aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore47
-rw-r--r--ChangeLog3409
-rw-r--r--LICENSE89
-rw-r--r--Makefile.am59
-rw-r--r--Makefile.nmake10
-rw-r--r--README3
-rw-r--r--ReleaseNotes2360
-rw-r--r--acinclude.m415
-rwxr-xr-xautogen.sh14
-rw-r--r--changes/bug104055
-rw-r--r--changes/bug106164
-rw-r--r--changes/bug12169_simple5
-rw-r--r--changes/bug1217011
-rw-r--r--changes/bug121957
-rw-r--r--changes/bug122275
-rw-r--r--changes/bug60242
-rw-r--r--changes/bug60436
-rw-r--r--changes/bug62183
-rw-r--r--changes/bug6244_part_c6
-rw-r--r--changes/bug62516
-rw-r--r--changes/bug6252_again11
-rw-r--r--changes/bug62717
-rw-r--r--changes/bug62743
-rw-r--r--changes/bug6274_23
-rw-r--r--changes/bug62964
-rw-r--r--changes/bug63415
-rw-r--r--changes/bug63774
-rw-r--r--changes/bug63796
-rw-r--r--changes/bug63873
-rw-r--r--changes/bug63974
-rw-r--r--changes/bug640416
-rw-r--r--changes/bug64233
-rw-r--r--changes/bug64363
-rw-r--r--changes/bug64724
-rw-r--r--changes/bug64756
-rw-r--r--changes/bug64805
-rw-r--r--changes/bug64904
-rw-r--r--changes/bug65002
-rw-r--r--changes/bug650715
-rw-r--r--changes/bug65145
-rw-r--r--changes/bug65305
-rw-r--r--changes/bug66907
-rw-r--r--changes/bug67106
-rw-r--r--changes/bug67323
-rw-r--r--changes/bug67439
-rw-r--r--changes/bug67744
-rw-r--r--changes/bug68015
-rw-r--r--changes/bug68115
-rw-r--r--changes/bug68279
-rw-r--r--changes/bug68444
-rw-r--r--changes/bug68664
-rw-r--r--changes/bug70145
-rw-r--r--changes/bug70223
-rw-r--r--changes/bug70376
-rw-r--r--changes/bug71399
-rw-r--r--changes/bug71906
-rw-r--r--changes/bug71915
-rw-r--r--changes/bug719210
-rw-r--r--changes/bug735212
-rw-r--r--changes/bug74644
-rw-r--r--changes/bug78898
-rw-r--r--changes/bug82084
-rw-r--r--changes/bug83773
-rw-r--r--changes/cov7090564
-rw-r--r--changes/cve-2012-22495
-rw-r--r--changes/dirserv-BUGGY-a7
-rw-r--r--changes/disable_pathbias_messages3
-rw-r--r--changes/geoip-dec20123
-rw-r--r--changes/geoip-feb20133
-rw-r--r--changes/geoip-jan20133
-rw-r--r--changes/geoip-mar20133
-rw-r--r--changes/geoip-nov20123
-rw-r--r--changes/geoip6-june20142
-rw-r--r--changes/link_negotiation_assert6
-rw-r--r--changes/more_8387_diagnosis4
-rw-r--r--changes/pathsel-BUGGY-a14
-rw-r--r--changes/port_doc3
-rw-r--r--changes/revert-geoip-may20126
-rw-r--r--changes/smartlist_foreach8
-rw-r--r--changes/ticket57493
-rw-r--r--configure.ac (renamed from configure.in)411
-rw-r--r--contrib/Makefile.am23
-rw-r--r--contrib/README61
-rw-r--r--contrib/auto-naming/README6
-rw-r--r--contrib/bundle.nsi67
-rwxr-xr-xcontrib/client-tools/tor-resolve.py (renamed from contrib/tor-resolve.py)0
-rwxr-xr-xcontrib/client-tools/torify (renamed from contrib/torify.in)0
-rwxr-xr-xcontrib/cross.sh195
-rwxr-xr-xcontrib/dirauth-tools/add-tor (renamed from contrib/add-tor)0
-rwxr-xr-xcontrib/dirauth-tools/nagios-check-tor-authority-cert (renamed from contrib/nagios-check-tor-authority-cert)0
-rw-r--r--contrib/directory-archive/crontab.sample3
-rwxr-xr-xcontrib/directory-archive/fetch-all77
-rw-r--r--contrib/directory-archive/fetch-all-functions82
-rwxr-xr-xcontrib/directory-archive/fetch-all-v3111
-rwxr-xr-xcontrib/directory-archive/sort-into-month-folder74
-rwxr-xr-xcontrib/directory-archive/tar-them-up127
-rw-r--r--contrib/dist/rc.subr (renamed from contrib/rc.subr)0
-rw-r--r--contrib/dist/suse/tor.sh.in (renamed from contrib/suse/tor.sh.in)0
-rw-r--r--contrib/dist/tor.service.in21
-rw-r--r--contrib/dist/tor.sh.in (renamed from contrib/tor.sh.in)0
-rw-r--r--contrib/dist/torctl.in (renamed from contrib/torctl.in)0
-rw-r--r--contrib/id_to_fp.c77
-rw-r--r--contrib/include.am18
-rwxr-xr-xcontrib/make-signature.sh79
-rwxr-xr-xcontrib/mdd.py169
-rw-r--r--contrib/netinst.nsi74
-rw-r--r--contrib/operator-tools/linux-tor-prio.sh (renamed from contrib/linux-tor-prio.sh)0
-rw-r--r--contrib/operator-tools/tor-exit-notice.html (renamed from contrib/tor-exit-notice.html)0
-rw-r--r--contrib/operator-tools/tor.logrotate.in (renamed from contrib/tor.logrotate.in)0
-rwxr-xr-xcontrib/or-tools/check-tor (renamed from contrib/check-tor)0
-rwxr-xr-xcontrib/or-tools/checksocks.pl (renamed from contrib/checksocks.pl)0
-rwxr-xr-xcontrib/or-tools/exitlist (renamed from contrib/exitlist)0
-rwxr-xr-xcontrib/package_nsis-weasel.sh90
-rw-r--r--contrib/package_nsis.sh57
-rw-r--r--contrib/polipo/Makefile.mingw100
-rw-r--r--contrib/polipo/README47
-rw-r--r--contrib/polipo/polipo-mingw.nsi172
-rwxr-xr-xcontrib/sd84
-rw-r--r--contrib/suse/Makefile.am3
-rw-r--r--contrib/tor-ctrl.sh212
-rwxr-xr-xcontrib/tor-stress27
-rw-r--r--contrib/tor-tsocks.conf13
-rw-r--r--contrib/torinst32.icobin4286 -> 0 bytes
-rw-r--r--contrib/win32build/package_nsis-mingw.sh (renamed from contrib/package_nsis-mingw.sh)6
-rw-r--r--contrib/win32build/tor-mingw.nsi.in (renamed from contrib/tor-mingw.nsi.in)4
-rw-r--r--contrib/win32build/tor.ico (renamed from contrib/tor.ico)bin82726 -> 82726 bytes
-rw-r--r--contrib/win32build/tor.nsi.in (renamed from contrib/tor.nsi.in)2
-rw-r--r--contrib/xenobite.icobin1150 -> 0 bytes
-rw-r--r--doc/HACKING96
-rw-r--r--doc/Makefile.am89
-rw-r--r--doc/TODO11
-rw-r--r--doc/TODO.021386
-rw-r--r--doc/TODO.02292
-rw-r--r--doc/TODO.external4
-rw-r--r--doc/TODO.future330
-rwxr-xr-xdoc/asciidoc-helper.sh4
-rw-r--r--doc/contrib/authority-policy.txt89
-rw-r--r--doc/contrib/incentives.txt479
-rw-r--r--doc/contrib/tor-rpm-creation.txt (renamed from doc/tor-rpm-creation.txt)0
-rw-r--r--doc/contrib/torel-design.txt181
-rw-r--r--doc/include.am89
-rw-r--r--doc/spec/README11
-rw-r--r--doc/tor-fw-helper.1.txt26
-rw-r--r--doc/tor-gencert.1.txt2
-rw-r--r--doc/tor-resolve.1.txt2
-rw-r--r--doc/tor-win32-mingw-creation.txt119
-rw-r--r--doc/tor.1.txt1164
-rw-r--r--doc/torify.1.txt26
-rw-r--r--doc/translations.txt182
-rw-r--r--doc/v3-authority-howto.txt84
-rw-r--r--m4/ax_check_sign.m454
-rw-r--r--m4/pc_from_ucontext.m4131
-rw-r--r--scripts/README58
-rwxr-xr-xscripts/codegen/gen_linux_syscalls.pl37
-rwxr-xr-xscripts/codegen/gen_server_ciphers.py115
-rw-r--r--scripts/codegen/get_mozilla_ciphers.py (renamed from src/common/get_mozilla_ciphers.py)30
-rwxr-xr-xscripts/maint/checkLogs.pl (renamed from contrib/checkLogs.pl)0
-rwxr-xr-xscripts/maint/checkOptionDocs.pl (renamed from contrib/checkOptionDocs.pl)5
-rwxr-xr-xscripts/maint/checkSpace.pl (renamed from contrib/checkSpace.pl)0
-rwxr-xr-xscripts/maint/check_config_macros.pl20
-rwxr-xr-xscripts/maint/findMergedChanges.pl (renamed from contrib/findMergedChanges.pl)17
-rwxr-xr-xscripts/maint/format_changelog.py298
-rwxr-xr-xscripts/maint/redox.py (renamed from contrib/redox.py)29
-rwxr-xr-xscripts/maint/sortChanges.py40
-rwxr-xr-xscripts/maint/updateVersions.pl (renamed from contrib/updateVersions.pl)18
-rwxr-xr-xscripts/test/cov-blame48
-rwxr-xr-xscripts/test/cov-diff17
-rwxr-xr-xscripts/test/coverage46
-rw-r--r--scripts/test/scan-build.sh49
-rw-r--r--src/Makefile.am5
-rw-r--r--src/common/Makefile.am67
-rw-r--r--src/common/Makefile.nmake11
-rw-r--r--src/common/address.c326
-rw-r--r--src/common/address.h32
-rw-r--r--src/common/aes.c43
-rw-r--r--src/common/aes.h6
-rw-r--r--src/common/backtrace.c233
-rw-r--r--src/common/backtrace.h21
-rw-r--r--src/common/ciphers.inc169
-rw-r--r--src/common/compat.c688
-rw-r--r--src/common/compat.h99
-rw-r--r--src/common/compat_libevent.c175
-rw-r--r--src/common/compat_libevent.h13
-rw-r--r--src/common/container.c214
-rw-r--r--src/common/container.h92
-rw-r--r--src/common/crypto.c716
-rw-r--r--src/common/crypto.h61
-rw-r--r--src/common/crypto_curve25519.c191
-rw-r--r--src/common/crypto_curve25519.h74
-rw-r--r--src/common/crypto_format.c45
-rw-r--r--src/common/di_ops.c93
-rw-r--r--src/common/di_ops.h18
-rw-r--r--src/common/include.am139
-rw-r--r--src/common/linux_syscalls.inc1153
-rw-r--r--src/common/log.c336
-rw-r--r--src/common/memarea.c56
-rw-r--r--src/common/memarea.h6
-rw-r--r--src/common/mempool.c16
-rw-r--r--src/common/mempool.h8
-rw-r--r--src/common/procmon.c41
-rw-r--r--src/common/procmon.h2
-rw-r--r--src/common/sandbox.c1758
-rw-r--r--src/common/sandbox.h222
-rw-r--r--src/common/sha256.c331
-rw-r--r--src/common/testsupport.h80
-rw-r--r--src/common/torgzip.c18
-rw-r--r--src/common/torgzip.h12
-rw-r--r--src/common/torint.h10
-rw-r--r--src/common/torlog.h107
-rw-r--r--src/common/tortls.c603
-rw-r--r--src/common/tortls.h23
-rw-r--r--src/common/util.c1189
-rw-r--r--src/common/util.h174
-rw-r--r--src/config/Makefile.am16
-rw-r--r--src/config/geoip141229
-rw-r--r--src/config/geoip618119
-rw-r--r--src/config/include.am16
-rw-r--r--src/config/mmdb-convert.py466
-rw-r--r--src/config/torrc.sample.in13
-rw-r--r--src/ext/OpenBSD_malloc_Linux.c (renamed from src/common/OpenBSD_malloc_Linux.c)0
-rw-r--r--src/ext/README51
-rw-r--r--src/ext/csiphash.c166
-rw-r--r--src/ext/curve25519_donna/README44
-rw-r--r--src/ext/curve25519_donna/curve25519-donna-c64.c451
-rw-r--r--src/ext/curve25519_donna/curve25519-donna.c732
-rw-r--r--src/ext/eventdns.c (renamed from src/or/eventdns.c)148
-rw-r--r--src/ext/eventdns.h (renamed from src/or/eventdns.h)4
-rw-r--r--src/ext/ht.h (renamed from src/common/ht.h)31
-rw-r--r--src/ext/include.am18
-rw-r--r--src/ext/siphash.h13
-rw-r--r--src/ext/strlcat.c (renamed from src/common/strlcat.c)0
-rw-r--r--src/ext/strlcpy.c (renamed from src/common/strlcpy.c)0
-rw-r--r--src/ext/tinytest.c (renamed from src/test/tinytest.c)157
-rw-r--r--src/ext/tinytest.h (renamed from src/test/tinytest.h)19
-rw-r--r--src/ext/tinytest_demo.c (renamed from src/test/tinytest_demo.c)49
-rw-r--r--src/ext/tinytest_macros.h (renamed from src/test/tinytest_macros.h)27
-rw-r--r--src/ext/tor_queue.h568
-rw-r--r--src/ext/tor_queue.txt883
-rw-r--r--src/include.am7
-rw-r--r--src/or/Makefile.am158
-rw-r--r--src/or/Makefile.nmake81
-rw-r--r--src/or/addressmap.c1078
-rw-r--r--src/or/addressmap.h62
-rw-r--r--src/or/buffers.c282
-rw-r--r--src/or/buffers.h55
-rw-r--r--src/or/channel.c4186
-rw-r--r--src/or/channel.h488
-rw-r--r--src/or/channeltls.c2081
-rw-r--r--src/or/channeltls.h57
-rw-r--r--src/or/circpathbias.c1538
-rw-r--r--src/or/circpathbias.h29
-rw-r--r--src/or/circuitbuild.c4913
-rw-r--r--src/or/circuitbuild.h149
-rw-r--r--src/or/circuitlist.c1326
-rw-r--r--src/or/circuitlist.h68
-rw-r--r--src/or/circuitmux.c1911
-rw-r--r--src/or/circuitmux.h148
-rw-r--r--src/or/circuitmux_ewma.c684
-rw-r--r--src/or/circuitmux_ewma.h29
-rw-r--r--src/or/circuitstats.c1658
-rw-r--r--src/or/circuitstats.h98
-rw-r--r--src/or/circuituse.c711
-rw-r--r--src/or/circuituse.h8
-rw-r--r--src/or/command.c1205
-rw-r--r--src/or/command.h16
-rw-r--r--src/or/config.c4412
-rw-r--r--src/or/config.h78
-rw-r--r--src/or/confparse.c1316
-rw-r--r--src/or/confparse.h137
-rw-r--r--src/or/connection.c1101
-rw-r--r--src/or/connection.h92
-rw-r--r--src/or/connection_edge.c1830
-rw-r--r--src/or/connection_edge.h102
-rw-r--r--src/or/connection_or.c1019
-rw-r--r--src/or/connection_or.h37
-rwxr-xr-x[-rw-r--r--]src/or/control.c922
-rw-r--r--src/or/control.h131
-rw-r--r--src/or/cpuworker.c442
-rw-r--r--src/or/cpuworker.h14
-rw-r--r--src/or/directory.c1185
-rw-r--r--src/or/directory.h36
-rw-r--r--src/or/dirserv.c1553
-rw-r--r--src/or/dirserv.h72
-rw-r--r--src/or/dirvote.c640
-rw-r--r--src/or/dirvote.h79
-rw-r--r--src/or/dns.c1056
-rw-r--r--src/or/dns.h7
-rw-r--r--src/or/dnsserv.c75
-rw-r--r--src/or/dnsserv.h9
-rw-r--r--src/or/entrynodes.c2327
-rw-r--r--src/or/entrynodes.h132
-rw-r--r--src/or/eventdns_tor.h7
-rw-r--r--src/or/ext_orport.c648
-rw-r--r--src/or/ext_orport.h42
-rw-r--r--src/or/fp_pair.c299
-rw-r--r--src/or/fp_pair.h45
-rw-r--r--src/or/geoip.c945
-rw-r--r--src/or/geoip.h33
-rw-r--r--src/or/hibernate.c48
-rw-r--r--src/or/hibernate.h15
-rw-r--r--src/or/include.am225
-rw-r--r--src/or/main.c709
-rw-r--r--src/or/main.h29
-rw-r--r--src/or/microdesc.c274
-rw-r--r--src/or/microdesc.h10
-rw-r--r--src/or/networkstatus.c813
-rw-r--r--src/or/networkstatus.h34
-rw-r--r--src/or/nodelist.c879
-rw-r--r--src/or/nodelist.h46
-rw-r--r--src/or/ntmain.c4
-rw-r--r--src/or/ntmain.h6
-rw-r--r--src/or/onion.c1353
-rw-r--r--src/or/onion.h128
-rw-r--r--src/or/onion_fast.c124
-rw-r--r--src/or/onion_fast.h38
-rw-r--r--src/or/onion_ntor.c300
-rw-r--r--src/or/onion_ntor.h63
-rw-r--r--src/or/onion_tap.c220
-rw-r--r--src/or/onion_tap.h37
-rw-r--r--src/or/or.h1491
-rw-r--r--src/or/policies.c303
-rw-r--r--src/or/policies.h23
-rw-r--r--src/or/reasons.c40
-rw-r--r--src/or/reasons.h6
-rw-r--r--src/or/relay.c1809
-rw-r--r--src/or/relay.h70
-rw-r--r--src/or/rendclient.c215
-rw-r--r--src/or/rendclient.h6
-rw-r--r--src/or/rendcommon.c283
-rw-r--r--src/or/rendcommon.h25
-rw-r--r--src/or/rendmid.c89
-rw-r--r--src/or/rendmid.h6
-rw-r--r--src/or/rendservice.c1908
-rw-r--r--src/or/rendservice.h80
-rw-r--r--src/or/rephist.c292
-rw-r--r--src/or/rephist.h17
-rw-r--r--src/or/replaycache.c204
-rw-r--r--src/or/replaycache.h66
-rwxr-xr-x[-rw-r--r--]src/or/router.c981
-rw-r--r--src/or/router.h47
-rw-r--r--src/or/routerlist.c2917
-rw-r--r--src/or/routerlist.h130
-rw-r--r--src/or/routerparse.c892
-rw-r--r--src/or/routerparse.h22
-rw-r--r--src/or/routerset.c433
-rw-r--r--src/or/routerset.h43
-rw-r--r--src/or/statefile.c649
-rw-r--r--src/or/statefile.h28
-rw-r--r--src/or/status.c72
-rw-r--r--src/or/status.h14
-rw-r--r--src/or/tor_main.c8
-rw-r--r--src/or/transports.c801
-rw-r--r--src/or/transports.h81
-rw-r--r--src/test/Makefile.am49
-rw-r--r--src/test/Makefile.nmake27
-rw-r--r--src/test/bench.c290
-rwxr-xr-xsrc/test/bt_test.py42
-rw-r--r--src/test/include.am121
-rwxr-xr-xsrc/test/ntor_ref.py405
-rw-r--r--src/test/slownacl_curve25519.py117
-rw-r--r--src/test/test-child.c2
-rwxr-xr-xsrc/test/test-network.sh47
-rw-r--r--src/test/test.c1492
-rw-r--r--src/test/test.h137
-rw-r--r--src/test/test_addr.c442
-rw-r--r--src/test/test_bt_cl.c109
-rw-r--r--src/test/test_buffers.c732
-rw-r--r--src/test/test_cell_formats.c1273
-rw-r--r--src/test/test_cell_queue.c158
-rw-r--r--src/test/test_circuitlist.c342
-rw-r--r--src/test/test_circuitmux.c88
-rwxr-xr-xsrc/test/test_cmdline_args.py292
-rw-r--r--src/test/test_config.c438
-rw-r--r--src/test/test_containers.c290
-rw-r--r--src/test/test_controller_events.c307
-rw-r--r--src/test/test_crypto.c574
-rw-r--r--src/test/test_data.c187
-rw-r--r--src/test/test_dir.c1466
-rw-r--r--src/test/test_extorport.c607
-rw-r--r--src/test/test_hs.c129
-rw-r--r--src/test/test_introduce.c528
-rw-r--r--src/test/test_logging.c135
-rw-r--r--src/test/test_microdesc.c171
-rw-r--r--src/test/test_nodelist.c71
-rw-r--r--src/test/test_ntor_cl.c170
-rw-r--r--src/test/test_oom.c372
-rw-r--r--src/test/test_options.c170
-rw-r--r--src/test/test_policy.c437
-rw-r--r--src/test/test_pt.c360
-rw-r--r--src/test/test_relaycell.c249
-rw-r--r--src/test/test_replay.c348
-rw-r--r--src/test/test_routerkeys.c85
-rw-r--r--src/test/test_socks.c393
-rw-r--r--src/test/test_status.c1114
-rw-r--r--src/test/test_util.c986
-rw-r--r--src/tools/Makefile.am22
-rw-r--r--src/tools/Makefile.nmake4
-rw-r--r--src/tools/include.am24
-rw-r--r--src/tools/tor-checkkey.c6
-rw-r--r--src/tools/tor-fw-helper/Makefile.am38
-rw-r--r--src/tools/tor-fw-helper/include.am36
-rw-r--r--src/tools/tor-fw-helper/tor-fw-helper-natpmp.c74
-rw-r--r--src/tools/tor-fw-helper/tor-fw-helper-natpmp.h10
-rw-r--r--src/tools/tor-fw-helper/tor-fw-helper-upnp.c46
-rw-r--r--src/tools/tor-fw-helper/tor-fw-helper-upnp.h9
-rw-r--r--src/tools/tor-fw-helper/tor-fw-helper.c373
-rw-r--r--src/tools/tor-fw-helper/tor-fw-helper.h26
-rw-r--r--src/tools/tor-gencert.c24
-rw-r--r--src/tools/tor-resolve.c83
-rw-r--r--src/win32/Makefile.am3
-rw-r--r--src/win32/include.am3
-rw-r--r--src/win32/orconfig.h17
-rw-r--r--tor.spec.in360
413 files changed, 121761 insertions, 144665 deletions
diff --git a/.gitignore b/.gitignore
index 3a28ecfd4..de1eb0469 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,16 +13,16 @@
*.gcno
*.gcov
*.gcda
-# latex stuff
-*.aux
-*.dvi
-*.blg
-*.bbl
-*.log
# Autotools stuff
.deps
+.dirstamp
+*.trs
+*.log
# Stuff made by our makefiles
*.bak
+# Python droppings
+*.pyc
+*.pyo
# /
/Makefile
@@ -41,10 +41,12 @@
/config.guess
/config.sub
/conftest*
+/micro-revision.*
/patch-stamp
/stamp-h
/stamp-h.in
/stamp-h1
+/test-driver
/tor.sh
/tor.spec
/depcomp
@@ -55,20 +57,11 @@
/tor-*-win32.exe
# /contrib/
-/contrib/Makefile
-/contrib/Makefile.in
-/contrib/tor.sh
-/contrib/torctl
-/contrib/torify
-/contrib/*.pyc
-/contrib/*.pyo
-/contrib/tor.logrotate
-/contrib/tor.wxs
-
-# /contrib/suse/
-/contrib/suse/tor.sh
-/contrib/suse/Makefile.in
-/contrib/suse/Makefile
+/contrib/dist/tor.sh
+/contrib/dist/torctl
+/contrib/dist/tor.service
+/contrib/operator-tools/tor.logrotate
+/contrib/dist/suse/tor.sh
# /debian/
/debian/files
@@ -123,11 +116,16 @@
/src/common/Makefile.in
/src/common/common_sha1.i
/src/common/libor.a
+/src/common/libor-testing.a
/src/common/libor.lib
/src/common/libor-crypto.a
+/src/common/libor-crypto-testing.a
/src/common/libor-crypto.lib
/src/common/libor-event.a
+/src/common/libor-event-testing.a
/src/common/libor-event.lib
+/src/common/libcurve25519_donna.a
+/src/common/libcurve25519_donna.lib
# /src/config/
/src/config/Makefile
@@ -140,10 +138,12 @@
/src/or/Makefile
/src/or/Makefile.in
/src/or/or_sha1.i
-/src/or/micro-revision.*
/src/or/tor
/src/or/tor.exe
+/src/or/tor-cov
+/src/or/tor-cov.exe
/src/or/libtor.a
+/src/or/libtor-testing.a
/src/or/libtor.lib
# /src/test
@@ -152,10 +152,13 @@
/src/test/bench
/src/test/bench.exe
/src/test/test
+/src/test/test-bt-cl
/src/test/test-child
+/src/test/test-ntor-cl
/src/test/test.exe
+/src/test/test-bt-cl.exe
/src/test/test-child.exe
-
+/src/test/test-ntor-cl.exe
# /src/tools/
/src/tools/tor-checkkey
diff --git a/ChangeLog b/ChangeLog
index 3d666a654..3dfb40aa4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,3382 @@
+Changes in version 0.2.5.5-alpha - 2014-06-??
+ Write a blurb here.
+
+ o Major bugfixes (security, OOM, new since 0.2.5.4-alpha, also in 0.2.4.22):
+ - Fix a memory leak that could occur if a microdescriptor parse
+ fails during the tokenizing step. This bug could enable a memory
+ exhaustion attack by directory servers. Fixes bug 11649; bugfix
+ on 0.2.2.6-alpha.
+
+ o Major bugfixes (relay):
+ - When uploading to the directory authorities, use a direct dirport
+ connection if we are a uploading an ordinary, non-anonymous
+ directory object. Previously, relays would used tunnel connections
+ under a fairly wide variety of circumstances. Fixes bug 11469;
+ bugfix on 0.2.4.3-alpha.
+
+ o Major bugfixes (security, directory authorities):
+ - Directory authorities now include a digest of each relay's
+ identity key as a part of its microdescriptor.
+
+ This is a workaround for bug #11743 (reported by "cypherpunks"),
+ where Tor clients do not support receiving multiple
+ microdescriptors with the same SHA256 digest in the same
+ consensus. When clients receive a consensus like this, they only
+ use one of the relays. Without this fix, a hostile relay could
+ selectively disable some client use of target relays by
+ constucting a router descriptor with a different identity and the
+ same microdescriptor parameters and getting the authorities to
+ list it in a microdescriptor consensus. This fix prevents an
+ attacker from causing a microdescriptor collision, because the
+ router's identity is not forgeable.
+
+ o Minor features (diagnostic):
+ - When logging a warning because of bug #7164, additionally check
+ the hash table for consistency (as proposed on ticket #11737).
+ This may help diagnose bug #7164.
+ - When we log a heartbeat, log how many one-hop circuits we have
+ that are at least 30 minutes old, and log status information about
+ a few of them. This is an attempt to track down bug 8387.
+ - When we encounter an unexpected CR in text that we're trying to
+ write to a file on Windows, log the name of the file. Should help
+ diagnosing bug 11233.
+ - Give more specific warnings when we notice at the client side that
+ an onion handshake has failed. Fixes ticket 9635.
+
+ o Minor features (security, memory management)):
+ - Add configure options controlling allocator tricks like mempools
+ and freelists, and turn them off by default; on most platforms
+ malloc is reasonable enough for this not to be necessary, and a
+ similar feature in OpenSSL exacerbated Heartbleed. Fixes
+ bug #11476.
+
+ o Minor features (security):
+ - Apply the secure SipHash-2-4 function to the hash table mapping
+ circuit IDs and channels to circuits. We missed this one when we
+ were converting all the other hash functions to use SipHash back
+ in 0.2.5.3-alpha. Resolves ticket 11750.
+
+ o Minor features (build):
+ - The configure script has a --disable-seccomp option to turn off
+ support for libseccomp on systems that have it, in case it (or
+ Tor's use of it) is broken. Resolves ticket 11628.
+
+ o Minor bugfixes (configuration, security, new since 0.2.5.4-alpha, also in 0.2.4.22):
+ - When running a hidden service, do not allow TunneledDirConns 0;
+ this will keep the hidden service from running, and also
+ make it publish its descriptors directly over HTTP. Fixes bug 10849;
+ bugfix on 0.2.1.1-alpha.
+
+ o Minor bugfixes (compilation):
+ - Fix compilation of test_status.c when building with MVSC. Bugfix
+ on 0.2.5.4-alpha. Patch from Gisle Vanem.
+ - Resolve GCC complaints on OpenBSD about discarding constness in
+ TO_{ORIGIN,OR}_CIRCUIT functions. Fixes part of bug 11633; bugfix
+ on 0.1.1.23. Patch from Dana Koch.
+ - Resolve clang complaints on OpenBSD with -Wshorten-64-to-32 due to
+ treatment of long and time_t as comparable types. Fixes part of
+ bug 11633. Patch from Dana Koch.
+ - Make Tor compile correctly with --disable-buf-freelists. Fixes bug
+ 11623; bugfix on 0.2.5.3-alpha.
+ - When deciding whether to build the 64-bit curve25519
+ implementation, detect platforms where we can compile 128-bit
+ arithmetic but cannot link it. Fixes bug 11729; bugfix on
+ 0.2.4.8-alpha. Patch from "conradev".
+ - Fix compilation when DNS_CACHE_DEBUG is enabled. Fixes bug 11761;
+ bugfix on 0.2.3.13-alpha. Found by "cypherpunks".
+
+ o Minor bugfixes (Directory server):
+ - When sending a compressed set of descriptors or microdescriptors,
+ make sure to finalize the zlib stream. Previously, we would write
+ all the compressed data, but if the last descriptor we wanted to
+ send was missing or too old, we would not mark the stream as
+ finished. This caused problems for decompression tools. Fixes bug
+ 11648; bugfix on 0.1.1.23.
+
+ o Minor bugfixes (dmalloc):
+ - Fix compilation with dmalloc. Fixes bug 11605; bugfix
+ on 0.2.4.10-alpha.
+
+ o Minor bugfixes (documentation):
+ - Correct the documenation so that it lists the correct directories
+ for the stats files. (They are in a subdirectory called "stats",
+ not "status".)
+
+ o Minor bugfixes (Linux seccomp sandbox):
+ - Make the seccomp sandbox code compile with ARM linux. Fixes bug
+ 11622; bugfix on 0.2.5.1-alpha.
+ - Avoid crashing when re-opening listener ports with the seccomp
+ sandbox active. Fixes bug 12115; bugfix on 0.2.5.1-alpha.
+ - Avoid crashing with the seccomp sandbox enabled along with
+ ConstrainedSockets. Fixes bug 12139; bugfix on 0.2.5.1-alpha.
+ - When we receive a SIGHUP with the sandbox enabled, correctly
+ support rotating our log files. Fixes bug 12032; bugfix
+ on 0.2.5.1-alpha.
+ - Avoid crash when running with sandboxing enabled and
+ DirReqStatistics not disabled. Fixes bug 12035; bugfix
+ on 0.2.5.1-alpha.
+ - Fix a "BUG" warning when trying to write bridge-stats files with
+ the Linux syscall sandbox filter enabled. Fixes bug 12041; bugfix
+ on 0.2.5.1-alpha.
+ - Prevent the sandbox from crashing on startup when run with the
+ --enable-expensive-hardening configuration option. Fixes bug
+ 11477; bugfix on 0.2.5.4-alpha.
+ - When running with DirPortFrontPage and Sandbox both enabled,
+ reload the DirPortFrontPage correctly when restarting. Fixes bug
+ 12028; bugfix on 0.2.5.1-alpha.
+ - Don't try to enable the sandbox when using the Tor binary to check
+ its configuration, hash a passphrase, or so on. Doing so was
+ crashing on startup for some users. Fixes bug 11609; bugfix
+ on 0.2.5.1-alpha.
+ - Avoid warnings when running with sandboxing and node statistics
+ enabled at the same time. Fixes part of 12064; bugfix on
+ 0.2.5.1-alpha. Patch from Michael Wolf.
+ - Avoid warnings when running with sandboxing enabled at the same
+ time as cookie authentication, hidden services or directory
+ authority voting. Fixes part of 12064; bugfix on 0.2.5.1-alpha.
+ - Do not allow options which would require us to call exec to be
+ enabled along with the seccomp2 sandbox: they will inevitably
+ crash. Fix for bug 12043; bugfix on 0.2.5.1-alpha.
+ - Handle failures in getpwnam()/getpwuid() when running with the
+ User option set and the Linux syscall sandbox enabled. Fixes bug
+ 11946; bugfix on 0.2.5.1-alpha.
+
+ o Minor bugfixes (pluggable transports):
+ - Enable the ExtORPortCookieAuthFile option, to allow changing the
+ default location of the authentication token for the extended OR
+ Port as used by sever-side pluggable transports. We had
+ implemented this option before, but the code to make it settable
+ had been omitted. Fixes bug 11635; bugfix on 0.2.5.1-alpha.
+ - Avoid another 60-second delay when starting Tor in a pluggable-
+ transport-using configuration when we already have cached
+ descriptors for our bridges. Fixes bug 11965; bugfix
+ on 0.2.3.6-alpha.
+
+ o Minor bugfixes (testing):
+ - The Python parts of the test scripts now work on Python 3 as well
+ as Python 2, so systems where '/usr/bin/python' is Python 3 will
+ no longer have the tests break. Fixes bug 11608; bugfix
+ on 0.2.5.2-alpha.
+ - When looking for versions of python that we could run the tests
+ with, check for "python2.7" and "python3.3"; previously we were
+ only looking for "python", "python2", and "python3". Patch from
+ Dana Koch. Fixes bug 11632; bugfix on 0.2.5.2-alpha.
+ - Fix all valgrind warnings produced by the unit tests. There were
+ over a thousand memory leak warnings previously, mostly produced
+ by forgetting to free things in the unit test code. Fixes bug
+ 11618, bugfixes on many versions of Tor.
+
+ o Minor bugfixes (tor-fw-helper):
+ - Give a correct log message when tor-fw-helper fails to launch.
+ (Previously, we would say something like "tor-fw-helper sent us a
+ string we could not parse".) Fixes bug 9781; bugfix
+ on 0.2.4.2-alpha.
+
+ o Minor bugfixes (relay, threading):
+ - Check return code on spawn_func() in cpuworker code, so that we
+ don't think we've spawned a nonworking cpuworker and write junk to
+ it forever. Fix related to bug 4345; bugfix on all released Tor
+ versions. Found by "skruffy".
+ - Use a pthread_attr to make sure that spawn_func() cannot return an
+ error while at the same time launching a thread. Fix related to
+ bug 4345; bugfix on all released Tor versions. Reported
+ by "cypherpunks".
+
+ o Minor bugfixes (relay, oom prevention):
+ - Correctly detect the total available system memory. We tried to do
+ this in 0.2.5.4-alpha, but the code was set up to always return an
+ error value, even on success. Fixes bug 11805; bugfix
+ on 0.2.5.4-alpha.
+
+ o Minor bugfixes (logging):
+ - Fix a misformatted log message about delayed directory fetches.
+ Fixes bug 11654; bugfix on 0.2.5.3-alpha.
+
+ o Distribution:
+ - Include a tor.service file in contrib/dist for use with systemd.
+ Some distributions will be able to use this file unmodified;
+ others will need to tweak it, or write their own. Patch from Jamie
+ Nguyen; resolves ticket 8368.
+
+ o Documentation:
+ - Clean up several option names in the manpage to match their real
+ names, add the missing documentation for a couple of testing and
+ directory authority options, remove the documentation for a
+ V2-directory fetching option that no longer exists. Resolves
+ ticket 11634.
+
+ o Package cleanup:
+ - The contrib directory has been sorted and tidy. Before, it was an
+ unsorted dumping ground for useful and not-so-useful things. Now,
+ it has been divided based on functionality, and the items which
+ seemed to be nonfunctional or useless have been removed. Resolves
+ ticket 8966; based on patches from "rl1987".
+
+ o Removed code:
+ - Remove /tor/dbg-stability.txt URL that was meant to help debug WFU
+ and MTBF calculations, but that nobody was using. Fixes #11742.
+ - The TunnelDirConns and PreferTunnelledDirConns options no longer
+ exist; tunneled directory connections have been available since
+ 0.1.2.5-alpha, and turning them off is not a good idea. This is a
+ brute-force fix for 10849, where "TunnelDirConns 0" would break
+ hidden services.
+
+
+Changes in version 0.2.4.22 - 2014-05-16
+ Tor 0.2.4.22 backports numerous high-priority fixes from the Tor 0.2.5
+ alpha release series. These include blocking all authority signing
+ keys that may have been affected by the OpenSSL "heartbleed" bug,
+ choosing a far more secure set of TLS ciphersuites by default, closing
+ a couple of memory leaks that could be used to run a target relay out
+ of RAM, and several others.
+
+ o Major features (security, backport from 0.2.5.4-alpha):
+ - Block authority signing keys that were used on authorities
+ vulnerable to the "heartbleed" bug in OpenSSL (CVE-2014-0160). (We
+ don't have any evidence that these keys _were_ compromised; we're
+ doing this to be prudent.) Resolves ticket 11464.
+
+ o Major bugfixes (security, OOM):
+ - Fix a memory leak that could occur if a microdescriptor parse
+ fails during the tokenizing step. This bug could enable a memory
+ exhaustion attack by directory servers. Fixes bug 11649; bugfix
+ on 0.2.2.6-alpha.
+
+ o Major bugfixes (TLS cipher selection, backport from 0.2.5.4-alpha):
+ - The relay ciphersuite list is now generated automatically based on
+ uniform criteria, and includes all OpenSSL ciphersuites with
+ acceptable strength and forward secrecy. Previously, we had left
+ some perfectly fine ciphersuites unsupported due to omission or
+ typo. Resolves bugs 11513, 11492, 11498, 11499. Bugs reported by
+ 'cypherpunks'. Bugfix on 0.2.4.8-alpha.
+ - Relays now trust themselves to have a better view than clients of
+ which TLS ciphersuites are better than others. (Thanks to bug
+ 11513, the relay list is now well-considered, whereas the client
+ list has been chosen mainly for anti-fingerprinting purposes.)
+ Relays prefer: AES over 3DES; then ECDHE over DHE; then GCM over
+ CBC; then SHA384 over SHA256 over SHA1; and last, AES256 over
+ AES128. Resolves ticket 11528.
+ - Clients now try to advertise the same list of ciphersuites as
+ Firefox 28. This change enables selection of (fast) GCM
+ ciphersuites, disables some strange old ciphers, and stops
+ advertising the ECDH (not to be confused with ECDHE) ciphersuites.
+ Resolves ticket 11438.
+
+ o Minor bugfixes (configuration, security):
+ - When running a hidden service, do not allow TunneledDirConns 0:
+ trying to set that option together with a hidden service would
+ otherwise prevent the hidden service from running, and also make
+ it publish its descriptors directly over HTTP. Fixes bug 10849;
+ bugfix on 0.2.1.1-alpha.
+
+ o Minor bugfixes (controller, backport from 0.2.5.4-alpha):
+ - Avoid sending a garbage value to the controller when a circuit is
+ cannibalized. Fixes bug 11519; bugfix on 0.2.3.11-alpha.
+
+ o Minor bugfixes (exit relay, backport from 0.2.5.4-alpha):
+ - Stop leaking memory when we successfully resolve a PTR record.
+ Fixes bug 11437; bugfix on 0.2.4.7-alpha.
+
+ o Minor bugfixes (bridge client, backport from 0.2.5.4-alpha):
+ - Avoid 60-second delays in the bootstrapping process when Tor is
+ launching for a second time while using bridges. Fixes bug 9229;
+ bugfix on 0.2.0.3-alpha.
+
+ o Minor bugfixes (relays and bridges, backport from 0.2.5.4-alpha):
+ - Give the correct URL in the warning message when trying to run a
+ relay on an ancient version of Windows. Fixes bug 9393.
+
+ o Minor bugfixes (compilation):
+ - Fix a compilation error when compiling with --disable-curve25519.
+ Fixes bug 9700; bugfix on 0.2.4.17-rc.
+
+ o Minor bugfixes:
+ - Downgrade the warning severity for the the "md was still
+ referenced 1 node(s)" warning. Tor 0.2.5.4-alpha has better code
+ for trying to diagnose this bug, and the current warning in
+ earlier versions of tor achieves nothing useful. Addresses warning
+ from bug 7164.
+
+ o Minor features (log verbosity, backport from 0.2.5.4-alpha):
+ - When we run out of usable circuit IDs on a channel, log only one
+ warning for the whole channel, and describe how many circuits
+ there were on the channel. Fixes part of ticket 11553.
+
+ o Minor features (security, backport from 0.2.5.4-alpha):
+ - Decrease the lower limit of MaxMemInCellQueues to 256 MBytes (but
+ leave the default at 8GBytes), to better support Raspberry Pi
+ users. Fixes bug 9686; bugfix on 0.2.4.14-alpha.
+
+ o Documentation (backport from 0.2.5.4-alpha):
+ - Correctly document that we search for a system torrc file before
+ looking in ~/.torrc. Fixes documentation side of 9213; bugfix on
+ 0.2.3.18-rc.
+
+
+Changes in version 0.2.5.4-alpha - 2014-04-25
+ Tor 0.2.5.4-alpha includes several security and performance
+ improvements for clients and relays, including blacklisting authority
+ signing keys that were used while susceptible to the OpenSSL
+ "heartbleed" bug, fixing two expensive functions on busy relays,
+ improved TLS ciphersuite preference lists, support for run-time
+ hardening on compilers that support AddressSanitizer, and more work on
+ the Linux sandbox code.
+
+ There are also several usability fixes for clients (especially clients
+ that use bridges), two new TransPort protocols supported (one on
+ OpenBSD, one on FreeBSD), and various other bugfixes.
+
+ This release marks end-of-life for Tor 0.2.2.x; those Tor versions
+ have accumulated many known flaws; everyone should upgrade.
+
+ o Major features (security):
+ - If you don't specify MaxMemInQueues yourself, Tor now tries to
+ pick a good value based on your total system memory. Previously,
+ the default was always 8 GB. You can still override the default by
+ setting MaxMemInQueues yourself. Resolves ticket 11396.
+ - Block authority signing keys that were used on authorities
+ vulnerable to the "heartbleed" bug in OpenSSL (CVE-2014-0160). (We
+ don't have any evidence that these keys _were_ compromised; we're
+ doing this to be prudent.) Resolves ticket 11464.
+
+ o Major features (relay performance):
+ - Speed up server-side lookups of rendezvous and introduction point
+ circuits by using hashtables instead of linear searches. These
+ functions previously accounted between 3 and 7% of CPU usage on
+ some busy relays. Resolves ticket 9841.
+ - Avoid wasting CPU when extending a circuit over a channel that is
+ nearly out of circuit IDs. Previously, we would do a linear scan
+ over possible circuit IDs before finding one or deciding that we
+ had exhausted our possibilities. Now, we try at most 64 random
+ circuit IDs before deciding that we probably won't succeed. Fixes
+ a possible root cause of ticket 11553.
+
+ o Major features (seccomp2 sandbox, Linux only):
+ - The seccomp2 sandbox can now run a test network for multiple hours
+ without crashing. The sandbox is still experimental, and more bugs
+ will probably turn up. To try it, enable "Sandbox 1" on a Linux
+ host. Resolves ticket 11351.
+ - Strengthen sandbox code: the sandbox can now test the arguments
+ for rename(), and blocks _sysctl() entirely. Resolves another part
+ of ticket 11351.
+ - When the sandbox blocks a system call, it now tries to log a stack
+ trace before exiting. Resolves ticket 11465.
+
+ o Major bugfixes (TLS cipher selection):
+ - The relay ciphersuite list is now generated automatically based on
+ uniform criteria, and includes all OpenSSL ciphersuites with
+ acceptable strength and forward secrecy. Previously, we had left
+ some perfectly fine ciphersuites unsupported due to omission or
+ typo. Resolves bugs 11513, 11492, 11498, 11499. Bugs reported by
+ 'cypherpunks'. Bugfix on 0.2.4.8-alpha.
+ - Relays now trust themselves to have a better view than clients of
+ which TLS ciphersuites are better than others. (Thanks to bug
+ 11513, the relay list is now well-considered, whereas the client
+ list has been chosen mainly for anti-fingerprinting purposes.)
+ Relays prefer: AES over 3DES; then ECDHE over DHE; then GCM over
+ CBC; then SHA384 over SHA256 over SHA1; and last, AES256 over
+ AES128. Resolves ticket 11528.
+ - Clients now try to advertise the same list of ciphersuites as
+ Firefox 28. This change enables selection of (fast) GCM
+ ciphersuites, disables some strange old ciphers, and stops
+ advertising the ECDH (not to be confused with ECDHE) ciphersuites.
+ Resolves ticket 11438.
+
+ o Major bugfixes (bridge client):
+ - Avoid 60-second delays in the bootstrapping process when Tor is
+ launching for a second time while using bridges. Fixes bug 9229;
+ bugfix on 0.2.0.3-alpha.
+
+ o Minor features (transparent proxy, *BSD):
+ - Support FreeBSD's ipfw firewall interface for TransPort ports on
+ FreeBSD. To enable it, set "TransProxyType ipfw". Resolves ticket
+ 10267; patch from "yurivict".
+ - Support OpenBSD's divert-to rules with the pf firewall for
+ transparent proxy ports. To enable it, set "TransProxyType
+ pf-divert". This allows Tor to run a TransPort transparent proxy
+ port on OpenBSD 4.4 or later without root privileges. See the
+ pf.conf(5) manual page for information on configuring pf to use
+ divert-to rules. Closes ticket 10896; patch from Dana Koch.
+
+ o Minor features (security):
+ - New --enable-expensive-hardening option to enable security
+ hardening options that consume nontrivial amounts of CPU and
+ memory. Right now, this includes AddressSanitizer and UbSan, which
+ are supported in newer versions of GCC and Clang. Closes ticket
+ 11477.
+
+ o Minor features (log verbosity):
+ - Demote the message that we give when a flushing connection times
+ out for too long from NOTICE to INFO. It was usually meaningless.
+ Resolves ticket 5286.
+ - Don't log so many notice-level bootstrapping messages at startup
+ about downloading descriptors. Previously, we'd log a notice
+ whenever we learned about more routers. Now, we only log a notice
+ at every 5% of progress. Fixes bug 9963.
+ - Warn less verbosely when receiving a malformed
+ ESTABLISH_RENDEZVOUS cell. Fixes ticket 11279.
+ - When we run out of usable circuit IDs on a channel, log only one
+ warning for the whole channel, and describe how many circuits
+ there were on the channel. Fixes part of ticket 11553.
+
+ o Minor features (relay):
+ - If a circuit timed out for at least 3 minutes, check if we have a
+ new external IP address, and publish a new descriptor with the new
+ IP address if it changed. Resolves ticket 2454.
+
+ o Minor features (controller):
+ - Make the entire exit policy available from the control port via
+ GETINFO exit-policy/*. Implements enhancement 7952. Patch from
+ "rl1987".
+ - Because of the fix for ticket 11396, the real limit for memory
+ usage may no longer match the configured MaxMemInQueues value. The
+ real limit is now exposed via GETINFO limits/max-mem-in-queues.
+
+ o Minor features (bridge client):
+ - Report a more useful failure message when we can't connect to a
+ bridge because we don't have the right pluggable transport
+ configured. Resolves ticket 9665. Patch from Fábio J. Bertinatto.
+
+ o Minor features (diagnostic):
+ - Add more log messages to diagnose bug 7164, which causes
+ intermittent "microdesc_free() called but md was still referenced"
+ warnings. We now include more information, to figure out why we
+ might be cleaning a microdescriptor for being too old if it's
+ still referenced by a live node_t object.
+
+ o Minor bugfixes (client, DNSPort):
+ - When using DNSPort, try to respond to AAAA requests with AAAA
+ answers. Previously, we hadn't looked at the request type when
+ deciding which answer type to prefer. Fixes bug 10468; bugfix on
+ 0.2.4.7-alpha.
+ - When receiving a DNS query for an unsupported record type, reply
+ with no answer rather than with a NOTIMPL error. This behavior
+ isn't correct either, but it will break fewer client programs, we
+ hope. Fixes bug 10268; bugfix on 0.2.0.1-alpha. Original patch
+ from "epoch".
+
+ o Minor bugfixes (exit relay):
+ - Stop leaking memory when we successfully resolve a PTR record.
+ Fixes bug 11437; bugfix on 0.2.4.7-alpha.
+
+ o Minor bugfixes (bridge client):
+ - Stop accepting bridge lines containing hostnames. Doing so would
+ cause clients to perform DNS requests on the hostnames, which was
+ not sensible behavior. Fixes bug 10801; bugfix on 0.2.0.1-alpha.
+ - Avoid a 60-second delay in the bootstrapping process when a Tor
+ client with pluggable transports re-reads its configuration at
+ just the wrong time. Re-fixes bug 11156; bugfix on 0.2.5.3-alpha.
+
+ o Minor bugfixes (client, logging during bootstrap):
+ - Warn only once if we start logging in an unsafe way. Previously,
+ we complain as many times as we had problems. Fixes bug 9870;
+ bugfix on 0.2.5.1-alpha.
+ - Only report the first fatal bootstrap error on a given OR
+ connection. This stops us from telling the controller bogus error
+ messages like "DONE". Fixes bug 10431; bugfix on 0.2.1.1-alpha.
+ - Be more helpful when trying to run sandboxed on Linux without
+ libseccomp. Instead of saying "Sandbox is not implemented on this
+ platform", we now explain that we need to be built with
+ libseccomp. Fixes bug 11543; bugfix on 0.2.5.1-alpha.
+ - Avoid generating spurious warnings when starting with
+ DisableNetwork enabled. Fixes bug 11200 and bug 10405; bugfix on
+ 0.2.3.9-alpha.
+
+ o Minor bugfixes (closing OR connections):
+ - If write_to_buf() in connection_write_to_buf_impl_() ever fails,
+ check if it's an or_connection_t and correctly call
+ connection_or_close_for_error() rather than
+ connection_mark_for_close() directly. Fixes bug 11304; bugfix on
+ 0.2.4.4-alpha.
+ - When closing all connections on setting DisableNetwork to 1, use
+ connection_or_close_normally() rather than closing OR connections
+ out from under the channel layer. Fixes bug 11306; bugfix on
+ 0.2.4.4-alpha.
+
+ o Minor bugfixes (controller):
+ - Avoid sending a garbage value to the controller when a circuit is
+ cannibalized. Fixes bug 11519; bugfix on 0.2.3.11-alpha.
+
+ o Minor bugfixes (tor-fw-helper):
+ - Allow tor-fw-helper to build again by adding src/ext to its
+ CPPFLAGS. Fixes bug 11296; bugfix on 0.2.5.3-alpha.
+
+ o Minor bugfixes (bridges):
+ - Avoid potential crashes or bad behavior when launching a
+ server-side managed proxy with ORPort or ExtORPort temporarily
+ disabled. Fixes bug 9650; bugfix on 0.2.3.16-alpha.
+
+ o Minor bugfixes (platform-specific):
+ - Fix compilation on Solaris, which does not have <endian.h>. Fixes
+ bug 11426; bugfix on 0.2.5.3-alpha.
+ - When dumping a malformed directory object to disk, save it in
+ binary mode on Windows, not text mode. Fixes bug 11342; bugfix on
+ 0.2.2.1-alpha.
+ - Don't report failures from make_socket_reuseable() on incoming
+ sockets on OSX: this can happen when incoming connections close
+ early. Fixes bug 10081.
+
+ o Minor bugfixes (trivial memory leaks):
+ - Fix a small memory leak when signing a directory object. Fixes bug
+ 11275; bugfix on 0.2.4.13-alpha.
+ - Free placeholder entries in our circuit table at exit; fixes a
+ harmless memory leak. Fixes bug 11278; bugfix on 0.2.5.1-alpha.
+ - Don't re-initialize a second set of OpenSSL mutexes when starting
+ up. Previously, we'd make one set of mutexes, and then immediately
+ replace them with another. Fixes bug 11726; bugfix on
+ 0.2.5.3-alpha.
+ - Resolve some memory leaks found by coverity in the unit tests, on
+ exit in tor-gencert, and on a failure to compute digests for our
+ own keys when generating a v3 networkstatus vote. These leaks
+ should never have affected anyone in practice.
+
+ o Minor bugfixes (hidden service):
+ - Only retry attempts to connect to a chosen rendezvous point 8
+ times, not 30. Fixes bug 4241; bugfix on 0.1.0.1-rc.
+
+ o Minor bugfixes (misc code correctness):
+ - Fix various instances of undefined behavior in channeltls.c,
+ tor_memmem(), and eventdns.c that would cause us to construct
+ pointers to memory outside an allocated object. (These invalid
+ pointers were not accessed, but C does not even allow them to
+ exist.) Fixes bug 10363; bugfixes on 0.1.1.1-alpha, 0.1.2.1-alpha,
+ 0.2.0.10-alpha, and 0.2.3.6-alpha. Reported by "bobnomnom".
+ - Use the AddressSanitizer and Ubsan sanitizers (in clang-3.4) to
+ fix some miscellaneous errors in our tests and codebase. Fixes bug
+ 11232. Bugfixes on versions back as far as 0.2.1.11-alpha.
+ - Always check return values for unlink, munmap, UnmapViewOfFile;
+ check strftime return values more often. In some cases all we can
+ do is report a warning, but this may help prevent deeper bugs from
+ going unnoticed. Closes ticket 8787; bugfixes on many, many tor
+ versions.
+ - Fix numerous warnings from the clang "scan-build" static analyzer.
+ Some of these are programming style issues; some of them are false
+ positives that indicated awkward code; some are undefined behavior
+ cases related to constructing (but not using) invalid pointers;
+ some are assumptions about API behavior; some are (harmlessly)
+ logging sizeof(ptr) bytes from a token when sizeof(*ptr) would be
+ correct; and one or two are genuine bugs that weren't reachable
+ from the rest of the program. Fixes bug 8793; bugfixes on many,
+ many tor versions.
+
+ o Documentation:
+ - Build the torify.1 manpage again. Previously, we were only trying
+ to build it when also building tor-fw-helper. That's why we didn't
+ notice that we'd broken the ability to build it. Fixes bug 11321;
+ bugfix on 0.2.5.1-alpha.
+ - Fix the layout of the SOCKSPort flags in the manpage. Fixes bug
+ 11061; bugfix on 0.2.4.7-alpha.
+ - Correctly document that we search for a system torrc file before
+ looking in ~/.torrc. Fixes documentation side of 9213; bugfix on
+ 0.2.3.18-rc.
+ - Resolve warnings from Doxygen.
+
+ o Code simplifications and refactoring:
+ - Remove is_internal_IP() function. Resolves ticket 4645.
+ - Remove unused function circuit_dump_by_chan from circuitlist.c.
+ Closes issue 9107; patch from "marek".
+ - Change our use of the ENUM_BF macro to avoid declarations that
+ confuse Doxygen.
+
+ o Deprecated versions:
+ - Tor 0.2.2.x has reached end-of-life; it has received no patches or
+ attention for some while. Directory authorities no longer accept
+ descriptors from relays running any version of Tor prior to Tor
+ 0.2.3.16-alpha. Resolves ticket 11149.
+
+ o Testing:
+ - New macros in test.h to simplify writing mock-functions for unit
+ tests. Part of ticket 11507. Patch from Dana Koch.
+ - Complete tests for the status.c module. Resolves ticket 11507.
+ Patch from Dana Koch.
+
+ o Removed code:
+ - Remove all code for the long unused v1 directory protocol.
+ Resolves ticket 11070.
+
+
+Changes in version 0.2.5.3-alpha - 2014-03-22
+ Tor 0.2.5.3-alpha includes all the fixes from 0.2.4.21. It contains
+ two new anti-DoS features for Tor relays, resolves a bug that kept
+ SOCKS5 support for IPv6 from working, fixes several annoying usability
+ issues for bridge users, and removes more old code for unused
+ directory formats.
+
+ The Tor 0.2.5.x release series is now in patch-freeze: no feature
+ patches not already written will be considered for inclusion in 0.2.5.x.
+
+ o Major features (relay security, DoS-resistance):
+ - When deciding whether we have run out of memory and we need to
+ close circuits, also consider memory allocated in buffers for
+ streams attached to each circuit.
+
+ This change, which extends an anti-DoS feature introduced in
+ 0.2.4.13-alpha and improved in 0.2.4.14-alpha, lets Tor exit relays
+ better resist more memory-based DoS attacks than before. Since the
+ MaxMemInCellQueues option now applies to all queues, it is renamed
+ to MaxMemInQueues. This feature fixes bug 10169.
+ - Avoid hash-flooding denial-of-service attacks by using the secure
+ SipHash-2-4 hash function for our hashtables. Without this
+ feature, an attacker could degrade performance of a targeted
+ client or server by flooding their data structures with a large
+ number of entries to be stored at the same hash table position,
+ thereby slowing down the Tor instance. With this feature, hash
+ table positions are derived from a randomized cryptographic key,
+ and an attacker cannot predict which entries will collide. Closes
+ ticket 4900.
+ - Decrease the lower limit of MaxMemInQueues to 256 MBytes (but leave
+ the default at 8GBytes), to better support Raspberry Pi users. Fixes
+ bug 9686; bugfix on 0.2.4.14-alpha.
+
+ o Minor features (bridges, pluggable transports):
+ - Bridges now write the SHA1 digest of their identity key
+ fingerprint (that is, a hash of a hash of their public key) to
+ notice-level logs, and to a new hashed-fingerprint file. This
+ information will help bridge operators look up their bridge in
+ Globe and similar tools. Resolves ticket 10884.
+ - Improve the message that Tor displays when running as a bridge
+ using pluggable transports without an Extended ORPort listener.
+ Also, log the message in the log file too. Resolves ticket 11043.
+
+ o Minor features (other):
+ - Add a new option, PredictedPortsRelevanceTime, to control how long
+ after having received a request to connect to a given port Tor
+ will try to keep circuits ready in anticipation of future requests
+ for that port. Patch from "unixninja92"; implements ticket 9176.
+ - Generate a warning if any ports are listed in the SocksPolicy,
+ DirPolicy, AuthDirReject, AuthDirInvalid, AuthDirBadDir, or
+ AuthDirBadExit options. (These options only support address
+ ranges.) Fixes part of ticket 11108.
+ - Update geoip and geoip6 to the February 7 2014 Maxmind GeoLite2
+ Country database.
+
+ o Minor bugfixes (new since 0.2.5.2-alpha, also in 0.2.4.21):
+ - Build without warnings under clang 3.4. (We have some macros that
+ define static functions only some of which will get used later in
+ the module. Starting with clang 3.4, these give a warning unless the
+ unused attribute is set on them.) Resolves ticket 10904.
+ - Fix build warnings about missing "a2x" comment when building the
+ manpages from scratch on OpenBSD; OpenBSD calls it "a2x.py".
+ Fixes bug 10929; bugfix on 0.2.2.9-alpha. Patch from Dana Koch.
+
+ o Minor bugfixes (client):
+ - Improve the log message when we can't connect to a hidden service
+ because all of the hidden service directory nodes hosting its
+ descriptor are excluded. Improves on our fix for bug 10722, which
+ was a bugfix on 0.2.0.10-alpha.
+ - Raise a control port warning when we fail to connect to all of
+ our bridges. Previously, we didn't inform the controller, and
+ the bootstrap process would stall. Fixes bug 11069; bugfix on
+ 0.2.1.2-alpha.
+ - Exit immediately when a process-owning controller exits.
+ Previously, tor relays would wait for a little while after their
+ controller exited, as if they had gotten an INT signal -- but this
+ was problematic, since there was no feedback for the user. To do a
+ clean shutdown, controllers should send an INT signal and give Tor
+ a chance to clean up. Fixes bug 10449; bugfix on 0.2.2.28-beta.
+ - Stop attempting to connect to bridges before our pluggable
+ transports are configured (harmless but resulted in some erroneous
+ log messages). Fixes bug 11156; bugfix on 0.2.3.2-alpha.
+ - Fix connections to IPv6 addresses over SOCKS5. Previously, we were
+ generating incorrect SOCKS5 responses, and confusing client
+ applications. Fixes bug 10987; bugfix on 0.2.4.7-alpha.
+
+ o Minor bugfixes (relays and bridges):
+ - Avoid crashing on a malformed resolv.conf file when running a
+ relay using Libevent 1. Fixes bug 8788; bugfix on 0.1.1.23.
+ - Non-exit relays no longer launch mock DNS requests to check for
+ DNS hijacking. This has been unnecessary since 0.2.1.7-alpha, when
+ non-exit relays stopped servicing DNS requests. Fixes bug 965;
+ bugfix on 0.2.1.7-alpha. Patch from Matt Pagan.
+ - Bridges now report complete directory request statistics. Related
+ to bug 5824; bugfix on 0.2.2.1-alpha.
+ - Bridges now never collect statistics that were designed for
+ relays. Fixes bug 5824; bugfix on 0.2.3.8-alpha.
+ - Stop giving annoying warning messages when we decide not to launch
+ a pluggable transport proxy that we don't need (because there are
+ no bridges configured to use it). Resolves ticket 5018; bugfix
+ on 0.2.5.2-alpha.
+ - Give the correct URL in the warning message when trying to run a
+ relay on an ancient version of Windows. Fixes bug 9393.
+
+ o Minor bugfixes (backtrace support):
+ - Support automatic backtraces on more platforms by using the
+ "-fasynchronous-unwind-tables" compiler option. This option is
+ needed for platforms like 32-bit Intel where "-fomit-frame-pointer"
+ is on by default and table generation is not. This doesn't yet
+ add Windows support; only Linux, OSX, and some BSDs are affected.
+ Reported by 'cypherpunks'; fixes bug 11047; bugfix on 0.2.5.2-alpha.
+ - Avoid strange behavior if two threads hit failed assertions at the
+ same time and both try to log backtraces at once. (Previously, if
+ this had happened, both threads would have stored their intermediate
+ results in the same buffer, and generated junk outputs.) Reported by
+ "cypherpunks". Fixes bug 11048; bugfix on 0.2.5.2-alpha.
+ - Fix a compiler warning in format_number_sigsafe(). Bugfix on
+ 0.2.5.2-alpha; patch from Nick Hopper.
+
+ o Minor bugfixes (unit tests):
+ - Fix a small bug in the unit tests that might have made the tests
+ call 'chmod' with an uninitialized bitmask. Fixes bug 10928;
+ bugfix on 0.2.5.1-alpha. Patch from Dana Koch.
+
+ o Removed code:
+ - Remove all remaining code related to version-0 hidden service
+ descriptors: they have not been in use since 0.2.2.1-alpha. Fixes
+ the rest of bug 10841.
+
+ o Documentation:
+ - Document in the manpage that "KBytes" may also be written as
+ "kilobytes" or "KB", that "Kbits" may also be written as
+ "kilobits", and so forth. Closes ticket 9222.
+ - Document that the ClientOnly config option overrides ORPort.
+ Our old explanation made ClientOnly sound as though it did
+ nothing at all. Resolves bug 9059.
+ - Explain that SocksPolicy, DirPolicy, and similar options don't
+ take port arguments. Fixes the other part of ticket 11108.
+ - Fix a comment about the rend_server_descriptor_t.protocols field
+ to more accurately describe its range. Also, make that field
+ unsigned, to more accurately reflect its usage. Fixes bug 9099;
+ bugfix on 0.2.1.5-alpha.
+ - Fix the manpage's description of HiddenServiceAuthorizeClient:
+ the maximum client name length is 16, not 19. Fixes bug 11118;
+ bugfix on 0.2.1.6-alpha.
+
+ o Code simplifications and refactoring:
+ - Get rid of router->address, since in all cases it was just the
+ string representation of router->addr. Resolves ticket 5528.
+
+ o Test infrastructure:
+ - Update to the latest version of tinytest.
+ - Improve the tinytest implementation of string operation tests so
+ that comparisons with NULL strings no longer crash the tests; they
+ now just fail, normally. Fixes bug 9004; bugfix on 0.2.2.4-alpha.
+
+
+Changes in version 0.2.4.21 - 2014-02-28
+ Tor 0.2.4.21 further improves security against potential adversaries who
+ find breaking 1024-bit crypto doable, and backports several stability
+ and robustness patches from the 0.2.5 branch.
+
+ o Major features (client security):
+ - When we choose a path for a 3-hop circuit, make sure it contains
+ at least one relay that supports the NTor circuit extension
+ handshake. Otherwise, there is a chance that we're building
+ a circuit that's worth attacking by an adversary who finds
+ breaking 1024-bit crypto doable, and that chance changes the game
+ theory. Implements ticket 9777.
+
+ o Major bugfixes:
+ - Do not treat streams that fail with reason
+ END_STREAM_REASON_INTERNAL as indicating a definite circuit failure,
+ since it could also indicate an ENETUNREACH connection error. Fixes
+ part of bug 10777; bugfix on 0.2.4.8-alpha.
+
+ o Code simplification and refactoring:
+ - Remove data structures which were introduced to implement the
+ CellStatistics option: they are now redundant with the new timestamp
+ field in the regular packed_cell_t data structure, which we did
+ in 0.2.4.18-rc in order to resolve bug 9093. Resolves ticket 10870.
+
+ o Minor features:
+ - Always clear OpenSSL bignums before freeing them -- even bignums
+ that don't contain secrets. Resolves ticket 10793. Patch by
+ Florent Daigniere.
+ - Build without warnings under clang 3.4. (We have some macros that
+ define static functions only some of which will get used later in
+ the module. Starting with clang 3.4, these give a warning unless the
+ unused attribute is set on them.) Resolves ticket 10904.
+ - Update geoip and geoip6 files to the February 7 2014 Maxmind
+ GeoLite2 Country database.
+
+ o Minor bugfixes:
+ - Set the listen() backlog limit to the largest actually supported
+ on the system, not to the value in a header file. Fixes bug 9716;
+ bugfix on every released Tor.
+ - Treat ENETUNREACH, EACCES, and EPERM connection failures at an
+ exit node as a NOROUTE error, not an INTERNAL error, since they
+ can apparently happen when trying to connect to the wrong sort
+ of netblocks. Fixes part of bug 10777; bugfix on 0.1.0.1-rc.
+ - Fix build warnings about missing "a2x" comment when building the
+ manpages from scratch on OpenBSD; OpenBSD calls it "a2x.py".
+ Fixes bug 10929; bugfix on 0.2.2.9-alpha. Patch from Dana Koch.
+ - Avoid a segfault on SIGUSR1, where we had freed a connection but did
+ not entirely remove it from the connection lists. Fixes bug 9602;
+ bugfix on 0.2.4.4-alpha.
+ - Fix a segmentation fault in our benchmark code when running with
+ Fedora's OpenSSL package, or any other OpenSSL that provides
+ ECDH but not P224. Fixes bug 10835; bugfix on 0.2.4.8-alpha.
+ - Turn "circuit handshake stats since last time" log messages into a
+ heartbeat message. Fixes bug 10485; bugfix on 0.2.4.17-rc.
+
+ o Documentation fixes:
+ - Document that all but one DirPort entry must have the NoAdvertise
+ flag set. Fixes bug 10470; bugfix on 0.2.3.3-alpha / 0.2.3.16-alpha.
+
+
+Changes in version 0.2.5.2-alpha - 2014-02-13
+ Tor 0.2.5.2-alpha includes all the fixes from 0.2.4.18-rc and 0.2.4.20,
+ like the "poor random number generation" fix and the "building too many
+ circuits" fix. It also further improves security against potential
+ adversaries who find breaking 1024-bit crypto doable, and launches
+ pluggable transports on demand (which gets us closer to integrating
+ pluggable transport support by default -- not to be confused with Tor
+ bundles enabling pluggable transports and bridges by default).
+
+ o Major features (client security):
+ - When we choose a path for a 3-hop circuit, make sure it contains
+ at least one relay that supports the NTor circuit extension
+ handshake. Otherwise, there is a chance that we're building
+ a circuit that's worth attacking by an adversary who finds
+ breaking 1024-bit crypto doable, and that chance changes the game
+ theory. Implements ticket 9777.
+ - Clients now look at the "usecreatefast" consensus parameter to
+ decide whether to use CREATE_FAST or CREATE cells for the first hop
+ of their circuit. This approach can improve security on connections
+ where Tor's circuit handshake is stronger than the available TLS
+ connection security levels, but the tradeoff is more computational
+ load on guard relays. Implements proposal 221. Resolves ticket 9386.
+
+ o Major features (bridges):
+ - Don't launch pluggable transport proxies if we don't have any
+ bridges configured that would use them. Now we can list many
+ pluggable transports, and Tor will dynamically start one when it
+ hears a bridge address that needs it. Resolves ticket 5018.
+ - The bridge directory authority now assigns status flags (Stable,
+ Guard, etc) to bridges based on thresholds calculated over all
+ Running bridges. Now bridgedb can finally make use of its features
+ to e.g. include at least one Stable bridge in its answers. Fixes
+ bug 9859.
+
+ o Major features (other):
+ - Extend ORCONN controller event to include an "ID" parameter,
+ and add four new controller event types CONN_BW, CIRC_BW,
+ CELL_STATS, and TB_EMPTY that show connection and circuit usage.
+ The new events are emitted in private Tor networks only, with the
+ goal of being able to better track performance and load during
+ full-network simulations. Implements proposal 218 and ticket 7359.
+ - On some platforms (currently: recent OSX versions, glibc-based
+ platforms that support the ELF format, and a few other
+ Unix-like operating systems), Tor can now dump stack traces
+ when a crash occurs or an assertion fails. By default, traces
+ are dumped to stderr (if possible) and to any logs that are
+ reporting errors. Implements ticket 9299.
+
+ o Major bugfixes:
+ - Avoid a segfault on SIGUSR1, where we had freed a connection but did
+ not entirely remove it from the connection lists. Fixes bug 9602;
+ bugfix on 0.2.4.4-alpha.
+ - Do not treat streams that fail with reason
+ END_STREAM_REASON_INTERNAL as indicating a definite circuit failure,
+ since it could also indicate an ENETUNREACH connection error. Fixes
+ part of bug 10777; bugfix on 0.2.4.8-alpha.
+
+ o Major bugfixes (new since 0.2.5.1-alpha, also in 0.2.4.20):
+ - Do not allow OpenSSL engines to replace the PRNG, even when
+ HardwareAccel is set. The only default builtin PRNG engine uses
+ the Intel RDRAND instruction to replace the entire PRNG, and
+ ignores all attempts to seed it with more entropy. That's
+ cryptographically stupid: the right response to a new alleged
+ entropy source is never to discard all previously used entropy
+ sources. Fixes bug 10402; works around behavior introduced in
+ OpenSSL 1.0.0. Diagnosis and investigation thanks to "coderman"
+ and "rl1987".
+ - Fix assertion failure when AutomapHostsOnResolve yields an IPv6
+ address. Fixes bug 10465; bugfix on 0.2.4.7-alpha.
+ - Avoid launching spurious extra circuits when a stream is pending.
+ This fixes a bug where any circuit that _wasn't_ unusable for new
+ streams would be treated as if it were, causing extra circuits to
+ be launched. Fixes bug 10456; bugfix on 0.2.4.12-alpha.
+
+ o Major bugfixes (new since 0.2.5.1-alpha, also in 0.2.4.18-rc):
+ - No longer stop reading or writing on cpuworker connections when
+ our rate limiting buckets go empty. Now we should handle circuit
+ handshake requests more promptly. Resolves bug 9731.
+ - Stop trying to bootstrap all our directory information from
+ only our first guard. Discovered while fixing bug 9946; bugfix
+ on 0.2.4.8-alpha.
+
+ o Minor features (bridges, pluggable transports):
+ - Add threshold cutoffs to the networkstatus document created by
+ the Bridge Authority. Fixes bug 1117.
+ - On Windows, spawn background processes using the CREATE_NO_WINDOW
+ flag. Now Tor Browser Bundle 3.5 with pluggable transports enabled
+ doesn't pop up a blank console window. (In Tor Browser Bundle 2.x,
+ Vidalia set this option for us.) Implements ticket 10297.
+
+ o Minor features (security):
+ - Always clear OpenSSL bignums before freeing them -- even bignums
+ that don't contain secrets. Resolves ticket 10793. Patch by
+ Florent Daignière.
+
+ o Minor features (config options and command line):
+ - Add an --allow-missing-torrc commandline option that tells Tor to
+ run even if the configuration file specified by -f is not available.
+ Implements ticket 10060.
+ - Add support for the TPROXY transparent proxying facility on Linux.
+ See documentation for the new TransProxyType option for more
+ details. Implementation by "thomo". Closes ticket 10582.
+
+ o Minor features (controller):
+ - Add a new "HS_DESC" controller event that reports activities
+ related to hidden service descriptors. Resolves ticket 8510.
+ - New "DROPGUARDS" controller command to forget all current entry
+ guards. Not recommended for ordinary use, since replacing guards
+ too frequently makes several attacks easier. Resolves ticket 9934;
+ patch from "ra".
+
+ o Minor features (build):
+ - Assume that a user using ./configure --host wants to cross-compile,
+ and give an error if we cannot find a properly named
+ tool-chain. Add a --disable-tool-name-check option to proceed
+ nevertheless. Addresses ticket 9869. Patch by Benedikt Gollatz.
+ - If we run ./configure and the compiler recognizes -fstack-protector
+ but the linker rejects it, warn the user about a potentially missing
+ libssp package. Addresses ticket 9948. Patch from Benedikt Gollatz.
+
+ o Minor features (testing):
+ - If Python is installed, "make check" now runs extra tests beyond
+ the unit test scripts.
+ - When bootstrapping a test network, sometimes very few relays get
+ the Guard flag. Now a new option "TestingDirAuthVoteGuard" can
+ specify a set of relays which should be voted Guard regardless of
+ their uptime or bandwidth. Addresses ticket 9206.
+
+ o Minor features (log messages):
+ - When ServerTransportPlugin is set on a bridge, Tor can write more
+ useful statistics about bridge use in its extrainfo descriptors,
+ but only if the Extended ORPort ("ExtORPort") is set too. Add a
+ log message to inform the user in this case. Resolves ticket 9651.
+ - When receiving a new controller connection, log the origin address.
+ Resolves ticket 9698; patch from "sigpipe".
+ - When logging OpenSSL engine status at startup, log the status of
+ more engines. Fixes ticket 10043; patch from Joshua Datko.
+ - Turn "circuit handshake stats since last time" log messages into a
+ heartbeat message. Fixes bug 10485; bugfix on 0.2.4.17-rc.
+
+ o Minor features (new since 0.2.5.1-alpha, also in 0.2.4.18-rc):
+ - Improve the circuit queue out-of-memory handler. Previously, when
+ we ran low on memory, we'd close whichever circuits had the most
+ queued cells. Now, we close those that have the *oldest* queued
+ cells, on the theory that those are most responsible for us
+ running low on memory. Based on analysis from a forthcoming paper
+ by Jansen, Tschorsch, Johnson, and Scheuermann. Fixes bug 9093.
+ - Generate bootstrapping status update events correctly when fetching
+ microdescriptors. Fixes bug 9927.
+ - Update to the October 2 2013 Maxmind GeoLite Country database.
+
+ o Minor bugfixes (clients):
+ - When closing a channel that has already been open, do not close
+ pending circuits that were waiting to connect to the same relay.
+ Fixes bug 9880; bugfix on 0.2.5.1-alpha. Thanks to skruffy for
+ finding this bug.
+
+ o Minor bugfixes (relays):
+ - Treat ENETUNREACH, EACCES, and EPERM connection failures at an
+ exit node as a NOROUTE error, not an INTERNAL error, since they
+ can apparently happen when trying to connect to the wrong sort
+ of netblocks. Fixes part of bug 10777; bugfix on 0.1.0.1-rc.
+
+ o Minor bugfixes (bridges):
+ - Fix a bug where the first connection works to a bridge that uses a
+ pluggable transport with client-side parameters, but we don't send
+ the client-side parameters on subsequent connections. (We don't
+ use any pluggable transports with client-side parameters yet,
+ but ScrambleSuit will soon become the first one.) Fixes bug 9162;
+ bugfix on 0.2.0.3-alpha. Based on a patch from "rl1987".
+
+ o Minor bugfixes (node selection):
+ - If ExcludeNodes is set, consider non-excluded hidden service
+ directory servers before excluded ones. Do not consider excluded
+ hidden service directory servers at all if StrictNodes is
+ set. (Previously, we would sometimes decide to connect to those
+ servers, and then realize before we initiated a connection that
+ we had excluded them.) Fixes bug 10722; bugfix on 0.2.0.10-alpha.
+ Reported by "mr-4".
+ - If we set the ExitNodes option but it doesn't include any nodes
+ that have the Exit flag, we would choose not to bootstrap. Now we
+ bootstrap so long as ExitNodes includes nodes which can exit to
+ some port. Fixes bug 10543; bugfix on 0.2.4.10-alpha.
+
+ o Minor bugfixes (controller and command-line):
+ - If changing a config option via "setconf" fails in a recoverable
+ way, we used to nonetheless write our new control ports to the
+ file described by the "ControlPortWriteToFile" option. Now we only
+ write out that file if we successfully switch to the new config
+ option. Fixes bug 5605; bugfix on 0.2.2.26-beta. Patch from "Ryman".
+ - When a command-line option such as --version or --help that
+ ordinarily implies --hush appears on the command line along with
+ --quiet, then actually obey --quiet. Previously, we obeyed --quiet
+ only if it appeared later on the command line. Fixes bug 9578;
+ bugfix on 0.2.5.1-alpha.
+
+ o Minor bugfixes (code correctness):
+ - Previously we used two temporary files when writing descriptors to
+ disk; now we only use one. Fixes bug 1376.
+ - Remove an erroneous (but impossible and thus harmless) pointer
+ comparison that would have allowed compilers to skip a bounds
+ check in channeltls.c. Fixes bugs 10313 and 9980; bugfix on
+ 0.2.0.10-alpha. Noticed by Jared L Wong and David Fifield.
+ - Fix an always-true assertion in pluggable transports code so it
+ actually checks what it was trying to check. Fixes bug 10046;
+ bugfix on 0.2.3.9-alpha. Found by "dcb".
+
+ o Minor bugfixes (protocol correctness):
+ - When receiving a VERSIONS cell with an odd number of bytes, close
+ the connection immediately since the cell is malformed. Fixes bug
+ 10365; bugfix on 0.2.0.10-alpha. Spotted by "bobnomnom"; fix by
+ "rl1987".
+
+ o Minor bugfixes (build):
+ - Restore the ability to compile Tor with V2_HANDSHAKE_SERVER
+ turned off (that is, without support for v2 link handshakes). Fixes
+ bug 4677; bugfix on 0.2.3.2-alpha. Patch from "piet".
+ - Fix compilation warnings and startup issues when running with
+ "Sandbox 1" and libseccomp-2.1.0. Fixes bug 10563; bugfix on
+ 0.2.5.1-alpha.
+ - Fix compilation on Solaris 9, which didn't like us having an
+ identifier named "sun". Fixes bug 10565; bugfix in 0.2.5.1-alpha.
+
+ o Minor bugfixes (testing):
+ - Fix a segmentation fault in our benchmark code when running with
+ Fedora's OpenSSL package, or any other OpenSSL that provides
+ ECDH but not P224. Fixes bug 10835; bugfix on 0.2.4.8-alpha.
+
+ o Minor bugfixes (log messages):
+ - Fix a bug where clients using bridges would report themselves
+ as 50% bootstrapped even without a live consensus document.
+ Fixes bug 9922; bugfix on 0.2.1.1-alpha.
+ - Suppress a warning where, if there's only one directory authority
+ in the network, we would complain that votes and signatures cannot
+ be uploaded to other directory authorities. Fixes bug 10842;
+ bugfix on 0.2.2.26-beta.
+ - Report bootstrapping progress correctly when we're downloading
+ microdescriptors. We had updated our "do we have enough microdescs
+ to begin building circuits?" logic most recently in 0.2.4.10-alpha
+ (see bug 5956), but we left the bootstrap status event logic at
+ "how far through getting 1/4 of them are we?" Fixes bug 9958;
+ bugfix on 0.2.2.36, which is where they diverged (see bug 5343).
+
+ o Minor bugfixes (new since 0.2.5.1-alpha, also in 0.2.4.20):
+ - Avoid a crash bug when starting with a corrupted microdescriptor
+ cache file. Fixes bug 10406; bugfix on 0.2.2.6-alpha.
+ - If we fail to dump a previously cached microdescriptor to disk, avoid
+ freeing duplicate data later on. Fixes bug 10423; bugfix on
+ 0.2.4.13-alpha. Spotted by "bobnomnom".
+
+ o Minor bugfixes on 0.2.4.x (new since 0.2.5.1-alpha, also in 0.2.4.18-rc):
+ - Correctly log long IPv6 exit policies, instead of truncating them
+ or reporting an error. Fixes bug 9596; bugfix on 0.2.4.7-alpha.
+ - Our default TLS ecdhe groups were backwards: we meant to be using
+ P224 for relays (for performance win) and P256 for bridges (since
+ it is more common in the wild). Instead we had it backwards. After
+ reconsideration, we decided that the default should be P256 on all
+ hosts, since its security is probably better, and since P224 is
+ reportedly used quite little in the wild. Found by "skruffy" on
+ IRC. Fix for bug 9780; bugfix on 0.2.4.8-alpha.
+ - Free directory authority certificate download statuses on exit
+ rather than leaking them. Fixes bug 9644; bugfix on 0.2.4.13-alpha.
+
+ o Minor bugfixes on 0.2.3.x (new since 0.2.5.1-alpha, also in 0.2.4.18-rc):
+ - If the guard we choose first doesn't answer, we would try the
+ second guard, but once we connected to the second guard we would
+ abandon it and retry the first one, slowing down bootstrapping.
+ The fix is to treat all our initially chosen guards as acceptable
+ to use. Fixes bug 9946; bugfix on 0.1.1.11-alpha.
+ - Fix an assertion failure that would occur when disabling the
+ ORPort setting on a running Tor process while accounting was
+ enabled. Fixes bug 6979; bugfix on 0.2.2.18-alpha.
+ - When examining the list of network interfaces to find our address,
+ do not consider non-running or disabled network interfaces. Fixes
+ bug 9904; bugfix on 0.2.3.11-alpha. Patch from "hantwister".
+ - Avoid an off-by-one error when checking buffer boundaries when
+ formatting the exit status of a pluggable transport helper.
+ This is probably not an exploitable bug, but better safe than
+ sorry. Fixes bug 9928; bugfix on 0.2.3.18-rc. Bug found by
+ Pedro Ribeiro.
+
+ o Removed code and features:
+ - Clients now reject any directory authority certificates lacking
+ a dir-key-crosscert element. These have been included since
+ 0.2.1.9-alpha, so there's no real reason for them to be optional
+ any longer. Completes proposal 157. Resolves ticket 10162.
+ - Remove all code that existed to support the v2 directory system,
+ since there are no longer any v2 directory authorities. Resolves
+ ticket 10758.
+ - Remove the HSAuthoritativeDir and AlternateHSAuthority torrc
+ options, which were used for designating authorities as "Hidden
+ service authorities". There has been no use of hidden service
+ authorities since 0.2.2.1-alpha, when we stopped uploading or
+ downloading v0 hidden service descriptors. Fixes bug 10881; also
+ part of a fix for bug 10841.
+
+ o Code simplification and refactoring:
+ - Remove some old fallback code designed to keep Tor clients working
+ in a network with only two working relays. Elsewhere in the code we
+ have long since stopped supporting such networks, so there wasn't
+ much point in keeping it around. Addresses ticket 9926.
+ - Reject 0-length EXTEND2 cells more explicitly. Fixes bug 10536;
+ bugfix on 0.2.4.8-alpha. Reported by "cypherpunks".
+ - Remove data structures which were introduced to implement the
+ CellStatistics option: they are now redundant with the addition
+ of a timestamp to the regular packed_cell_t data structure, which
+ we did in 0.2.4.18-rc in order to resolve ticket 9093. Implements
+ ticket 10870.
+
+ o Documentation (man page) fixes:
+ - Update manpage to describe some of the files you can expect to
+ find in Tor's DataDirectory. Addresses ticket 9839.
+ - Document that all but one DirPort entry must have the NoAdvertise
+ flag set. Fixes bug 10470; bugfix on 0.2.3.3-alpha / 0.2.3.16-alpha.
+
+ o Documentation fixes (new since 0.2.5.1-alpha, also in 0.2.4.18-rc):
+ - Clarify the usage and risks of setting the ContactInfo torrc line
+ for your relay or bridge. Resolves ticket 9854.
+ - Add anchors to the manpage so we can link to the html version of
+ the documentation for specific options. Resolves ticket 9866.
+ - Replace remaining references to DirServer in man page and
+ log entries. Resolves ticket 10124.
+
+ o Tool changes:
+ - Make the "tor-gencert" tool used by directory authority operators
+ create 2048-bit signing keys by default (rather than 1024-bit, since
+ 1024-bit is uncomfortably small these days). Addresses ticket 10324.
+
+
+Changes in version 0.2.4.20 - 2013-12-22
+ Tor 0.2.4.20 fixes potentially poor random number generation for users
+ who 1) use OpenSSL 1.0.0 or later, 2) set "HardwareAccel 1" in their
+ torrc file, 3) have "Sandy Bridge" or "Ivy Bridge" Intel processors,
+ and 4) have no state file in their DataDirectory (as would happen on
+ first start). Users who generated relay or hidden service identity
+ keys in such a situation should discard them and generate new ones.
+
+ This release also fixes a logic error that caused Tor clients to build
+ many more preemptive circuits than they actually need.
+
+ o Major bugfixes:
+ - Do not allow OpenSSL engines to replace the PRNG, even when
+ HardwareAccel is set. The only default builtin PRNG engine uses
+ the Intel RDRAND instruction to replace the entire PRNG, and
+ ignores all attempts to seed it with more entropy. That's
+ cryptographically stupid: the right response to a new alleged
+ entropy source is never to discard all previously used entropy
+ sources. Fixes bug 10402; works around behavior introduced in
+ OpenSSL 1.0.0. Diagnosis and investigation thanks to "coderman"
+ and "rl1987".
+ - Fix assertion failure when AutomapHostsOnResolve yields an IPv6
+ address. Fixes bug 10465; bugfix on 0.2.4.7-alpha.
+ - Avoid launching spurious extra circuits when a stream is pending.
+ This fixes a bug where any circuit that _wasn't_ unusable for new
+ streams would be treated as if it were, causing extra circuits to
+ be launched. Fixes bug 10456; bugfix on 0.2.4.12-alpha.
+
+ o Minor bugfixes:
+ - Avoid a crash bug when starting with a corrupted microdescriptor
+ cache file. Fixes bug 10406; bugfix on 0.2.2.6-alpha.
+ - If we fail to dump a previously cached microdescriptor to disk, avoid
+ freeing duplicate data later on. Fixes bug 10423; bugfix on
+ 0.2.4.13-alpha. Spotted by "bobnomnom".
+
+
+Changes in version 0.2.4.19 - 2013-12-11
+ The Tor 0.2.4 release series is dedicated to the memory of Aaron Swartz
+ (1986-2013). Aaron worked on diverse projects including helping to guide
+ Creative Commons, playing a key role in stopping SOPA/PIPA, bringing
+ transparency to the U.S government's PACER documents, and contributing
+ design and development for Tor and Tor2Web. Aaron was one of the latest
+ martyrs in our collective fight for civil liberties and human rights,
+ and his death is all the more painful because he was one of us.
+
+ Tor 0.2.4.19, the first stable release in the 0.2.4 branch, features
+ a new circuit handshake and link encryption that use ECC to provide
+ better security and efficiency; makes relays better manage circuit
+ creation requests; uses "directory guards" to reduce client enumeration
+ risks; makes bridges collect and report statistics about the pluggable
+ transports they support; cleans up and improves our geoip database;
+ gets much closer to IPv6 support for clients, bridges, and relays; makes
+ directory authorities use measured bandwidths rather than advertised
+ ones when computing flags and thresholds; disables client-side DNS
+ caching to reduce tracking risks; and fixes a big bug in bridge
+ reachability testing. This release introduces two new design
+ abstractions in the code: a new "channel" abstraction between circuits
+ and or_connections to allow for implementing alternate relay-to-relay
+ transports, and a new "circuitmux" abstraction storing the queue of
+ circuits for a channel. The release also includes many stability,
+ security, and privacy fixes.
+
+
+Changes in version 0.2.4.18-rc - 2013-11-16
+ Tor 0.2.4.18-rc is the fourth release candidate for the Tor 0.2.4.x
+ series. It takes a variety of fixes from the 0.2.5.x branch to improve
+ stability, performance, and better handling of edge cases.
+
+ o Major features:
+ - Re-enable TLS 1.1 and 1.2 when built with OpenSSL 1.0.1e or later.
+ Resolves ticket 6055. (OpenSSL before 1.0.1 didn't have TLS 1.1 or
+ 1.2, and OpenSSL from 1.0.1 through 1.0.1d had bugs that prevented
+ renegotiation from working with TLS 1.1 or 1.2, so we had disabled
+ them to solve bug 6033.)
+
+ o Major bugfixes:
+ - No longer stop reading or writing on cpuworker connections when
+ our rate limiting buckets go empty. Now we should handle circuit
+ handshake requests more promptly. Resolves bug 9731.
+ - If we are unable to save a microdescriptor to the journal, do not
+ drop it from memory and then reattempt downloading it. Fixes bug
+ 9645; bugfix on 0.2.2.6-alpha.
+ - Stop trying to bootstrap all our directory information from
+ only our first guard. Discovered while fixing bug 9946; bugfix
+ on 0.2.4.8-alpha.
+ - The new channel code sometimes lost track of in-progress circuits,
+ causing long-running clients to stop building new circuits. The
+ fix is to always call circuit_n_chan_done(chan, 0) from
+ channel_closed(). Fixes bug 9776; bugfix on 0.2.4.17-rc.
+
+ o Minor bugfixes (on 0.2.4.x):
+ - Correctly log long IPv6 exit policies, instead of truncating them
+ or reporting an error. Fixes bug 9596; bugfix on 0.2.4.7-alpha.
+ - Our default TLS ecdhe groups were backwards: we meant to be using
+ P224 for relays (for performance win) and P256 for bridges (since
+ it is more common in the wild). Instead we had it backwards. After
+ reconsideration, we decided that the default should be P256 on all
+ hosts, since its security is probably better, and since P224 is
+ reportedly used quite little in the wild. Found by "skruffy" on
+ IRC. Fix for bug 9780; bugfix on 0.2.4.8-alpha.
+ - Free directory authority certificate download statuses on exit
+ rather than leaking them. Fixes bug 9644; bugfix on 0.2.4.13-alpha.
+
+ o Minor bugfixes (on 0.2.3.x and earlier):
+ - If the guard we choose first doesn't answer, we would try the
+ second guard, but once we connected to the second guard we would
+ abandon it and retry the first one, slowing down bootstrapping.
+ The fix is to treat all our initially chosen guards as acceptable
+ to use. Fixes bug 9946; bugfix on 0.1.1.11-alpha.
+ - Fix an assertion failure that would occur when disabling the
+ ORPort setting on a running Tor process while accounting was
+ enabled. Fixes bug 6979; bugfix on 0.2.2.18-alpha.
+ - When examining the list of network interfaces to find our address,
+ do not consider non-running or disabled network interfaces. Fixes
+ bug 9904; bugfix on 0.2.3.11-alpha. Patch from "hantwister".
+ - Avoid an off-by-one error when checking buffer boundaries when
+ formatting the exit status of a pluggable transport helper.
+ This is probably not an exploitable bug, but better safe than
+ sorry. Fixes bug 9928; bugfix on 0.2.3.18-rc. Bug found by
+ Pedro Ribeiro.
+
+ o Minor features (protecting client timestamps):
+ - Clients no longer send timestamps in their NETINFO cells. These were
+ not used for anything, and they provided one small way for clients
+ to be distinguished from each other as they moved from network to
+ network or behind NAT. Implements part of proposal 222.
+ - Clients now round timestamps in INTRODUCE cells down to the nearest
+ 10 minutes. If a new Support022HiddenServices option is set to 0, or
+ if it's set to "auto" and the feature is disabled in the consensus,
+ the timestamp is sent as 0 instead. Implements part of proposal 222.
+ - Stop sending timestamps in AUTHENTICATE cells. This is not such
+ a big deal from a security point of view, but it achieves no actual
+ good purpose, and isn't needed. Implements part of proposal 222.
+ - Reduce down accuracy of timestamps in hidden service descriptors.
+ Implements part of proposal 222.
+
+ o Minor features (other):
+ - Improve the circuit queue out-of-memory handler. Previously, when
+ we ran low on memory, we'd close whichever circuits had the most
+ queued cells. Now, we close those that have the *oldest* queued
+ cells, on the theory that those are most responsible for us
+ running low on memory. Based on analysis from a forthcoming paper
+ by Jansen, Tschorsch, Johnson, and Scheuermann. Fixes bug 9093.
+ - Generate bootstrapping status update events correctly when fetching
+ microdescriptors. Fixes bug 9927.
+ - Update to the October 2 2013 Maxmind GeoLite Country database.
+
+ o Documentation fixes:
+ - Clarify the usage and risks of setting the ContactInfo torrc line
+ for your relay or bridge. Resolves ticket 9854.
+ - Add anchors to the manpage so we can link to the html version of
+ the documentation for specific options. Resolves ticket 9866.
+ - Replace remaining references to DirServer in man page and
+ log entries. Resolves ticket 10124.
+
+
+Changes in version 0.2.5.1-alpha - 2013-10-02
+ Tor 0.2.5.1-alpha introduces experimental support for syscall sandboxing
+ on Linux, allows bridges that offer pluggable transports to report usage
+ statistics, fixes many issues to make testing easier, and provides
+ a pile of minor features and bugfixes that have been waiting for a
+ release of the new branch.
+
+ 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.4.x for now.
+
+ o Major features (security):
+ - Use the seccomp2 syscall filtering facility on Linux to limit
+ which system calls Tor can invoke. This is an experimental,
+ Linux-only feature to provide defense-in-depth against unknown
+ attacks. To try turning it on, set "Sandbox 1" in your torrc
+ file. Please be ready to report bugs. We hope to add support
+ for better sandboxing in the future, including more fine-grained
+ filters, better division of responsibility, and support for more
+ platforms. This work has been done by Cristian-Matei Toader for
+ Google Summer of Code.
+ - Re-enable TLS 1.1 and 1.2 when built with OpenSSL 1.0.1e or later.
+ Resolves ticket 6055. (OpenSSL before 1.0.1 didn't have TLS 1.1 or
+ 1.2, and OpenSSL from 1.0.1 through 1.0.1d had bugs that prevented
+ renegotiation from working with TLS 1.1 or 1.2, so we had disabled
+ them to solve bug 6033.)
+
+ o Major features (other):
+ - Add support for passing arguments to managed pluggable transport
+ proxies. Implements ticket 3594.
+ - Bridges now track GeoIP information and the number of their users
+ even when pluggable transports are in use, and report usage
+ statistics in their extra-info descriptors. Resolves tickets 4773
+ and 5040.
+ - Make testing Tor networks bootstrap better: lower directory fetch
+ retry schedules and maximum interval without directory requests,
+ and raise maximum download tries. Implements ticket 6752.
+ - Add make target 'test-network' to run tests on a Chutney network.
+ Implements ticket 8530.
+ - The ntor handshake is now on-by-default, no matter what the
+ directory authorities recommend. Implements ticket 8561.
+
+ o Major bugfixes:
+ - Instead of writing destroy cells directly to outgoing connection
+ buffers, queue them and intersperse them with other outgoing cells.
+ This can prevent a set of resource starvation conditions where too
+ many pending destroy cells prevent data cells from actually getting
+ delivered. Reported by "oftc_must_be_destroyed". Fixes bug 7912;
+ bugfix on 0.2.0.1-alpha.
+ - If we are unable to save a microdescriptor to the journal, do not
+ drop it from memory and then reattempt downloading it. Fixes bug
+ 9645; bugfix on 0.2.2.6-alpha.
+ - The new channel code sometimes lost track of in-progress circuits,
+ causing long-running clients to stop building new circuits. The
+ fix is to always call circuit_n_chan_done(chan, 0) from
+ channel_closed(). Fixes bug 9776; bugfix on 0.2.4.17-rc.
+
+ o Build features:
+ - Tor now builds each source file in two modes: a mode that avoids
+ exposing identifiers needlessly, and another mode that exposes
+ more identifiers for testing. This lets the compiler do better at
+ optimizing the production code, while enabling us to take more
+ radical measures to let the unit tests test things.
+ - The production builds no longer include functions used only in
+ the unit tests; all functions exposed from a module only for
+ unit-testing are now static in production builds.
+ - Add an --enable-coverage configuration option to make the unit
+ tests (and a new src/or/tor-cov target) to build with gcov test
+ coverage support.
+
+ o Testing:
+ - We now have rudimentary function mocking support that our unit
+ tests can use to test functions in isolation. Function mocking
+ lets the tests temporarily replace a function's dependencies with
+ stub functions, so that the tests can check the function without
+ invoking the other functions it calls.
+ - Add more unit tests for the <circid,channel>->circuit map, and
+ the destroy-cell-tracking code to fix bug 7912.
+ - Unit tests for failing cases of the TAP onion handshake.
+ - More unit tests for address-manipulation functions.
+
+ o Minor features (protecting client timestamps):
+ - Clients no longer send timestamps in their NETINFO cells. These were
+ not used for anything, and they provided one small way for clients
+ to be distinguished from each other as they moved from network to
+ network or behind NAT. Implements part of proposal 222.
+ - Clients now round timestamps in INTRODUCE cells down to the nearest
+ 10 minutes. If a new Support022HiddenServices option is set to 0, or
+ if it's set to "auto" and the feature is disabled in the consensus,
+ the timestamp is sent as 0 instead. Implements part of proposal 222.
+ - Stop sending timestamps in AUTHENTICATE cells. This is not such
+ a big deal from a security point of view, but it achieves no actual
+ good purpose, and isn't needed. Implements part of proposal 222.
+ - Reduce down accuracy of timestamps in hidden service descriptors.
+ Implements part of proposal 222.
+
+ o Minor features (config options):
+ - Config (torrc) lines now handle fingerprints which are missing
+ their initial '$'. Resolves ticket 4341; improvement over 0.0.9pre5.
+ - Support a --dump-config option to print some or all of the
+ configured options. Mainly useful for debugging the command-line
+ option parsing code. Helps resolve ticket 4647.
+ - Raise awareness of safer logging: notify user of potentially
+ unsafe config options, like logging more verbosely than severity
+ "notice" or setting SafeLogging to 0. Resolves ticket 5584.
+ - Add a new configuration option TestingV3AuthVotingStartOffset
+ that bootstraps a network faster by changing the timing for
+ consensus votes. Addresses ticket 8532.
+ - Add a new torrc option "ServerTransportOptions" that allows
+ bridge operators to pass configuration parameters to their
+ pluggable transports. Resolves ticket 8929.
+ - The config (torrc) file now accepts bandwidth and space limits in
+ bits as well as bytes. (Anywhere that you can say "2 Kilobytes",
+ you can now say "16 kilobits", and so on.) Resolves ticket 9214.
+ Patch by CharlieB.
+
+ o Minor features (build):
+ - Add support for `--library-versions` flag. Implements ticket 6384.
+ - Return the "unexpected sendme" warnings to a warn severity, but make
+ them rate limited, to help diagnose ticket 8093.
+ - Detect a missing asciidoc, and warn the user about it, during
+ configure rather than at build time. Fixes issue 6506. Patch from
+ Arlo Breault.
+
+ o Minor features (other):
+ - Use the SOCK_NONBLOCK socket type, if supported, to open nonblocking
+ sockets in a single system call. Implements ticket 5129.
+ - Log current accounting state (bytes sent and received + remaining
+ time for the current accounting period) in the relay's heartbeat
+ message. Implements ticket 5526; patch from Peter Retzlaff.
+ - Implement the TRANSPORT_LAUNCHED control port event that
+ notifies controllers about new launched pluggable
+ transports. Resolves ticket 5609.
+ - If we're using the pure-C 32-bit curve25519_donna implementation
+ of curve25519, build it with the -fomit-frame-pointer option to
+ make it go faster on register-starved hosts. This improves our
+ handshake performance by about 6% on i386 hosts without nacl.
+ Closes ticket 8109.
+ - Update to the September 4 2013 Maxmind GeoLite Country database.
+
+ o Minor bugfixes:
+ - Set the listen() backlog limit to the largest actually supported
+ on the system, not to the value in a header file. Fixes bug 9716;
+ bugfix on every released Tor.
+ - No longer accept malformed http headers when parsing urls from
+ headers. Now we reply with Bad Request ("400"). Fixes bug 2767;
+ bugfix on 0.0.6pre1.
+ - In munge_extrainfo_into_routerinfo(), check the return value of
+ memchr(). This would have been a serious issue if we ever passed
+ it a non-extrainfo. Fixes bug 8791; bugfix on 0.2.0.6-alpha. Patch
+ from Arlo Breault.
+ - On the chance that somebody manages to build Tor on a
+ platform where time_t is unsigned, correct the way that
+ microdesc_add_to_cache() handles negative time arguments.
+ Fixes bug 8042; bugfix on 0.2.3.1-alpha.
+ - Reject relative control socket paths and emit a warning. Previously,
+ single-component control socket paths would be rejected, but Tor
+ would not log why it could not validate the config. Fixes bug 9258;
+ bugfix on 0.2.3.16-alpha.
+
+ o Minor bugfixes (command line):
+ - Use a single command-line parser for parsing torrc options on the
+ command line and for finding special command-line options to avoid
+ inconsistent behavior for torrc option arguments that have the same
+ names as command-line options. Fixes bugs 4647 and 9578; bugfix on
+ 0.0.9pre5.
+ - No longer allow 'tor --hash-password' with no arguments. Fixes bug
+ 9573; bugfix on 0.0.9pre5.
+
+ o Minor fixes (build, auxiliary programs):
+ - Stop preprocessing the "torify" script with autoconf, since
+ it no longer refers to LOCALSTATEDIR. Fixes bug 5505; patch
+ from Guilhem.
+ - The tor-fw-helper program now follows the standard convention and
+ exits with status code "0" on success. Fixes bug 9030; bugfix on
+ 0.2.3.1-alpha. Patch by Arlo Breault.
+ - Corrected ./configure advice for what openssl dev package you should
+ install on Debian. Fixes bug 9207; bugfix on 0.2.0.1-alpha.
+
+ o Minor code improvements:
+ - Remove constants and tests for PKCS1 padding; it's insecure and
+ shouldn't be used for anything new. Fixes bug 8792; patch
+ from Arlo Breault.
+ - Remove instances of strcpy() from the unit tests. They weren't
+ hurting anything, since they were only in the unit tests, but it's
+ embarassing to have strcpy() in the code at all, and some analysis
+ tools don't like it. Fixes bug 8790; bugfix on 0.2.3.6-alpha and
+ 0.2.3.8-alpha. Patch from Arlo Breault.
+
+ o Removed features:
+ - Remove migration code from when we renamed the "cached-routers"
+ file to "cached-descriptors" back in 0.2.0.8-alpha. This
+ incidentally resolves ticket 6502 by cleaning up the related code
+ a bit. Patch from Akshay Hebbar.
+
+ o Code simplification and refactoring:
+ - Extract the common duplicated code for creating a subdirectory
+ of the data directory and writing to a file in it. Fixes ticket
+ 4282; patch from Peter Retzlaff.
+ - Since OpenSSL 0.9.7, the i2d_*() functions support allocating output
+ buffer. Avoid calling twice: i2d_RSAPublicKey(), i2d_DHparams(),
+ i2d_X509(), and i2d_PublicKey(). Resolves ticket 5170.
+ - Add a set of accessor functions for the circuit timeout data
+ structure. Fixes ticket 6153; patch from "piet".
+ - Clean up exit paths from connection_listener_new(). Closes ticket
+ 8789. Patch from Arlo Breault.
+ - Since we rely on OpenSSL 0.9.8 now, we can use EVP_PKEY_cmp()
+ and drop our own custom pkey_eq() implementation. Fixes bug 9043.
+ - Use a doubly-linked list to implement the global circuit list.
+ Resolves ticket 9108. Patch from Marek Majkowski.
+ - Remove contrib/id_to_fp.c since it wasn't used anywhere.
+
+
+Changes in version 0.2.4.17-rc - 2013-09-05
+ Tor 0.2.4.17-rc is the third release candidate for the Tor 0.2.4.x
+ series. It adds an emergency step to help us tolerate the massive
+ influx of users: 0.2.4 clients using the new (faster and safer) "NTor"
+ circuit-level handshakes now effectively jump the queue compared to
+ the 0.2.3 clients using "TAP" handshakes. This release also fixes a
+ big bug hindering bridge reachability tests.
+
+ o Major features:
+ - Relays now process the new "NTor" circuit-level handshake requests
+ with higher priority than the old "TAP" circuit-level handshake
+ requests. We still process some TAP requests to not totally starve
+ 0.2.3 clients when NTor becomes popular. A new consensus parameter
+ "NumNTorsPerTAP" lets us tune the balance later if we need to.
+ Implements ticket 9574.
+
+ o Major bugfixes:
+ - If the circuit build timeout logic is disabled (via the consensus,
+ or because we are an authority), then don't build testing circuits.
+ Fixes bug 9657; bugfix on 0.2.2.14-alpha.
+ - Bridges now send AUTH_CHALLENGE cells during their v3 handshakes;
+ previously they did not, which prevented them from receiving
+ successful connections from relays for self-test or bandwidth
+ testing. Also, when a relay is extending a circuit to a bridge,
+ it needs to send a NETINFO cell, even when the bridge hasn't sent
+ an AUTH_CHALLENGE cell. Fixes bug 9546; bugfix on 0.2.3.6-alpha.
+ - If the time to download the next old-style networkstatus is in
+ the future, do not decline to consider whether to download the
+ next microdescriptor networkstatus. Fixes bug 9564; bugfix on
+ 0.2.3.14-alpha.
+
+ o Minor bugfixes:
+ - Avoid double-closing the listener socket in our socketpair()
+ replacement (used on Windows) in the case where the addresses on
+ our opened sockets don't match what we expected. Fixes bug 9400;
+ bugfix on 0.0.2pre7. Found by Coverity.
+
+ o Minor fixes (config options):
+ - Avoid overflows when the user sets MaxCircuitDirtiness to a
+ ridiculously high value, by imposing a (ridiculously high) 30-day
+ maximum on MaxCircuitDirtiness.
+ - Fix the documentation of HeartbeatPeriod to say that the heartbeat
+ message is logged at notice, not at info.
+ - Warn and fail if a server is configured not to advertise any
+ ORPorts at all. (We need *something* to put in our descriptor,
+ or we just won't work.)
+
+ o Minor features:
+ - Track how many "TAP" and "NTor" circuit handshake requests we get,
+ and how many we complete, and log it every hour to help relay
+ operators follow trends in network load. Addresses ticket 9658.
+ - Update to the August 7 2013 Maxmind GeoLite Country database.
+
+
+Changes in version 0.2.4.16-rc - 2013-08-10
+ Tor 0.2.4.16-rc is the second release candidate for the Tor 0.2.4.x
+ series. It fixes several crash bugs in the 0.2.4 branch.
+
+ o Major bugfixes:
+ - Fix a bug in the voting algorithm that could yield incorrect results
+ when a non-naming authority declared too many flags. Fixes bug 9200;
+ bugfix on 0.2.0.3-alpha.
+ - Fix an uninitialized read that could in some cases lead to a remote
+ crash while parsing INTRODUCE2 cells. Bugfix on 0.2.4.1-alpha.
+ Anybody running a hidden service on the experimental 0.2.4.x
+ branch should upgrade. (This is, so far as we know, unrelated to
+ the recent news.)
+ - Avoid an assertion failure when processing DNS replies without the
+ answer types we expected. Fixes bug 9337; bugfix on 0.2.4.7-alpha.
+ - Avoid a crash when using --hash-password. Fixes bug 9295; bugfix on
+ 0.2.4.15-rc. Found by stem integration tests.
+
+ o Minor bugfixes:
+ - Fix an invalid memory read that occured when a pluggable
+ transport proxy failed its configuration protocol.
+ Fixes bug 9288; bugfix on 0.2.4.1-alpha.
+ - When evaluating whether to use a connection that we haven't
+ decided is canonical using a recent link protocol version,
+ decide that it's canonical only if it used address _does_
+ match the desired address. Fixes bug 9309; bugfix on
+ 0.2.4.4-alpha. Reported by skruffy.
+ - Make the default behavior of NumDirectoryGuards be to track
+ NumEntryGuards. Now a user who changes only NumEntryGuards will get
+ the behavior she expects. Fixes bug 9354; bugfix on 0.2.4.8-alpha.
+ - Fix a spurious compilation warning with some older versions of
+ GCC on FreeBSD. Fixes bug 9254; bugfix on 0.2.4.14-alpha.
+
+ o Minor features:
+ - Update to the July 3 2013 Maxmind GeoLite Country database.
+
+
+Changes in version 0.2.4.15-rc - 2013-07-01
+ Tor 0.2.4.15-rc is the first release candidate for the Tor 0.2.4.x
+ series. It fixes a few smaller bugs, but generally appears stable.
+ Please test it and let us know whether it is!
+
+ o Major bugfixes:
+ - When receiving a new configuration file via the control port's
+ LOADCONF command, do not treat the defaults file as absent.
+ Fixes bug 9122; bugfix on 0.2.3.9-alpha.
+
+ o Minor features:
+ - Issue a warning when running with the bufferevents backend enabled.
+ It's still not stable, and people should know that they're likely
+ to hit unexpected problems. Closes ticket 9147.
+
+
+Changes in version 0.2.4.14-alpha - 2013-06-18
+ Tor 0.2.4.14-alpha fixes a pair of client guard enumeration problems
+ present in 0.2.4.13-alpha.
+
+ o Major bugfixes:
+ - When we have too much memory queued in circuits (according to a new
+ MaxMemInCellQueues option), close the circuits consuming the most
+ memory. This prevents us from running out of memory as a relay if
+ circuits fill up faster than they can be drained. Fixes bug 9063;
+ bugfix on the 54th commit of Tor. This bug is a further fix beyond
+ bug 6252, whose fix was merged into 0.2.3.21-rc.
+
+ This change also fixes an earlier approach taken in 0.2.4.13-alpha,
+ where we tried to solve this issue simply by imposing an upper limit
+ on the number of queued cells for a single circuit. That approach
+ proved to be problematic, since there are ways to provoke clients to
+ send a number of cells in excess of any such reasonable limit. Fixes
+ bug 9072; bugfix on 0.2.4.13-alpha.
+
+ - Limit hidden service descriptors to at most ten introduction
+ points, to slow one kind of guard enumeration. Fixes bug 9002;
+ bugfix on 0.1.1.11-alpha.
+
+
+Changes in version 0.2.4.13-alpha - 2013-06-14
+ Tor 0.2.4.13-alpha fixes a variety of potential remote crash
+ vulnerabilities, makes socks5 username/password circuit isolation
+ actually actually work (this time for sure!), and cleans up a bunch
+ of other issues in preparation for a release candidate.
+
+ o Major bugfixes (robustness):
+ - Close any circuit that has too many cells queued on it. Fixes
+ bug 9063; bugfix on the 54th commit of Tor. This bug is a further
+ fix beyond bug 6252, whose fix was merged into 0.2.3.21-rc.
+ - Prevent the get_freelists() function from running off the end of
+ the list of freelists if it somehow gets an unrecognized
+ allocation. Fixes bug 8844; bugfix on 0.2.0.16-alpha. Reported by
+ eugenis.
+ - Avoid an assertion failure on OpenBSD (and perhaps other BSDs)
+ when an exit connection with optimistic data succeeds immediately
+ rather than returning EINPROGRESS. Fixes bug 9017; bugfix on
+ 0.2.3.1-alpha.
+ - Fix a directory authority crash bug when building a consensus
+ using an older consensus as its basis. Fixes bug 8833. Bugfix
+ on 0.2.4.12-alpha.
+
+ o Major bugfixes:
+ - Avoid a memory leak where we would leak a consensus body when we
+ find that a consensus which we couldn't previously verify due to
+ missing certificates is now verifiable. Fixes bug 8719; bugfix
+ on 0.2.0.10-alpha.
+ - We used to always request authority certificates by identity digest,
+ meaning we'd get the newest one even when we wanted one with a
+ different signing key. Then we would complain about being given
+ a certificate we already had, and never get the one we really
+ wanted. Now we use the "fp-sk/" resource as well as the "fp/"
+ resource to request the one we want. Fixes bug 5595; bugfix on
+ 0.2.0.8-alpha.
+ - Follow the socks5 protocol when offering username/password
+ authentication. The fix for bug 8117 exposed this bug, and it
+ turns out real-world applications like Pidgin do care. Bugfix on
+ 0.2.3.2-alpha; fixes bug 8879.
+ - Prevent failures on Windows Vista and later when rebuilding the
+ microdescriptor cache. Diagnosed by Robert Ransom. Fixes bug 8822;
+ bugfix on 0.2.4.12-alpha.
+
+ o Minor bugfixes:
+ - Fix an impossible buffer overrun in the AES unit tests. Fixes
+ bug 8845; bugfix on 0.2.0.7-alpha. Found by eugenis.
+ - If for some reason we fail to write a microdescriptor while
+ rebuilding the cache, do not let the annotations from that
+ microdescriptor linger in the cache file, and do not let the
+ microdescriptor stay recorded as present in its old location.
+ Fixes bug 9047; bugfix on 0.2.2.6-alpha.
+ - Fix a memory leak that would occur whenever a configuration
+ option changed. Fixes bug 8718; bugfix on 0.2.3.3-alpha.
+ - Paste the description for PathBias parameters from the man
+ page into or.h, so the code documents them too. Fixes bug 7982;
+ bugfix on 0.2.3.17-beta and 0.2.4.8-alpha.
+ - Relays now treat a changed IPv6 ORPort as sufficient reason to
+ publish an updated descriptor. Fixes bug 6026; bugfix on
+ 0.2.4.1-alpha.
+ - When launching a resolve request on behalf of an AF_UNIX control
+ socket, omit the address field of the new entry connection, used in
+ subsequent controller events, rather than letting tor_dup_addr()
+ set it to "<unknown address type>". Fixes bug 8639; bugfix on
+ 0.2.4.12-alpha.
+
+ o Minor bugfixes (log messages):
+ - Fix a scaling issue in the path bias accounting code that
+ resulted in "Bug:" log messages from either
+ pathbias_scale_close_rates() or pathbias_count_build_success().
+ This represents a bugfix on a previous bugfix: the original fix
+ attempted in 0.2.4.10-alpha was incomplete. Fixes bug 8235; bugfix
+ on 0.2.4.1-alpha.
+ - Give a less useless error message when the user asks for an IPv4
+ address on an IPv6-only port, or vice versa. Fixes bug 8846; bugfix
+ on 0.2.4.7-alpha.
+
+ o Minor features:
+ - Downgrade "unexpected SENDME" warnings to protocol-warn for 0.2.4.x,
+ to tolerate bug 8093 for now.
+ - Add an "ignoring-advertised-bws" boolean to the flag-threshold lines
+ in directory authority votes to describe whether they have enough
+ measured bandwidths to ignore advertised (relay descriptor)
+ bandwidth claims. Resolves ticket 8711.
+ - Update to the June 5 2013 Maxmind GeoLite Country database.
+
+ o Removed documentation:
+ - Remove some of the older contents of doc/ as obsolete; move others
+ to torspec.git. Fixes bug 8965.
+
+ o Code simplification and refactoring:
+ - Avoid using character buffers when constructing most directory
+ objects: this approach was unwieldy and error-prone. Instead,
+ build smartlists of strings, and concatenate them when done.
+
+
+Changes in version 0.2.4.12-alpha - 2013-04-18
+ Tor 0.2.4.12-alpha moves Tor forward on several fronts: it starts the
+ process for lengthening the guard rotation period, makes directory
+ authority opinions in the consensus a bit less gameable, makes socks5
+ username/password circuit isolation actually work, and fixes a wide
+ variety of other issues.
+
+ o Major features:
+ - Raise the default time that a client keeps an entry guard from
+ "1-2 months" to "2-3 months", as suggested by Tariq Elahi's WPES
+ 2012 paper. (We would make it even longer, but we need better client
+ load balancing first.) Also, make the guard lifetime controllable
+ via a new GuardLifetime torrc option and a GuardLifetime consensus
+ parameter. Start of a fix for bug 8240; bugfix on 0.1.1.11-alpha.
+ - Directory authorities now prefer using measured bandwidths to
+ advertised ones when computing flags and thresholds. Resolves
+ ticket 8273.
+ - Directory authorities that have more than a threshold number
+ of relays with measured bandwidths now treat relays with unmeasured
+ bandwidths as having bandwidth 0. Resolves ticket 8435.
+
+ o Major bugfixes (assert / resource use):
+ - Avoid a bug where our response to TLS renegotiation under certain
+ network conditions could lead to a busy-loop, with 100% CPU
+ consumption. Fixes bug 5650; bugfix on 0.2.0.16-alpha.
+ - Avoid an assertion when we discover that we'd like to write a cell
+ onto a closing connection: just discard the cell. Fixes another
+ case of bug 7350; bugfix on 0.2.4.4-alpha.
+
+ o Major bugfixes (client-side privacy):
+ - When we mark a circuit as unusable for new circuits, have it
+ continue to be unusable for new circuits even if MaxCircuitDirtiness
+ is increased too much at the wrong time, or the system clock jumps
+ backwards. Fixes bug 6174; bugfix on 0.0.2pre26.
+ - If ClientDNSRejectInternalAddresses ("do not believe DNS queries
+ which have resolved to internal addresses") is set, apply that
+ rule to IPv6 as well. Fixes bug 8475; bugfix on 0.2.0.7-alpha.
+ - When an exit relay rejects a stream with reason "exit policy", but
+ we only know an exit policy summary (e.g. from the microdesc
+ consensus) for it, do not mark the relay as useless for all exiting.
+ Instead, mark just the circuit as unsuitable for that particular
+ address. Fixes part of bug 7582; bugfix on 0.2.3.2-alpha.
+ - Allow applications to get proper stream isolation with
+ IsolateSOCKSAuth. Many SOCKS5 clients that want to offer
+ username/password authentication also offer "no authentication". Tor
+ had previously preferred "no authentication", so the applications
+ never actually sent Tor their auth details. Now Tor selects
+ username/password authentication if it's offered. You can disable
+ this behavior on a per-SOCKSPort basis via PreferSOCKSNoAuth. Fixes
+ bug 8117; bugfix on 0.2.3.3-alpha.
+
+ o Major bugfixes (other):
+ - When unable to find any working directory nodes to use as a
+ directory guard, give up rather than adding the same non-working
+ nodes to the directory guard list over and over. Fixes bug 8231;
+ bugfix on 0.2.4.8-alpha.
+
+ o Minor features:
+ - Reject as invalid most directory objects containing a NUL.
+ Belt-and-suspender fix for bug 8037.
+ - In our testsuite, create temporary directories with a bit more
+ entropy in their name to make name collisions less likely. Fixes
+ bug 8638.
+ - Add CACHED keyword to ADDRMAP events in the control protocol
+ to indicate whether a DNS result will be cached or not. Resolves
+ ticket 8596.
+ - Update to the April 3 2013 Maxmind GeoLite Country database.
+
+ o Minor features (build):
+ - Detect and reject attempts to build Tor with threading support
+ when OpenSSL has been compiled without threading support.
+ Fixes bug 6673.
+ - Clarify that when autoconf is checking for nacl, it is checking
+ specifically for nacl with a fast curve25519 implementation.
+ Fixes bug 8014.
+ - Warn if building on a platform with an unsigned time_t: there
+ are too many places where Tor currently assumes that time_t can
+ hold negative values. We'd like to fix them all, but probably
+ some will remain.
+
+ o Minor bugfixes (build):
+ - Fix some bugs in tor-fw-helper-natpmp when trying to build and
+ run it on Windows. More bugs likely remain. Patch from Gisle Vanem.
+ Fixes bug 7280; bugfix on 0.2.3.1-alpha.
+ - Add the old src/or/micro-revision.i filename to CLEANFILES.
+ On the off chance that somebody has one, it will go away as soon
+ as they run "make clean". Fix for bug 7143; bugfix on 0.2.4.1-alpha.
+ - Build Tor correctly on 32-bit platforms where the compiler can build
+ but not run code using the "uint128_t" construction. Fixes bug 8587;
+ bugfix on 0.2.4.8-alpha.
+ - Fix compilation warning with some versions of clang that would
+ prefer the -Wswitch-enum compiler flag to warn about switch
+ statements with missing enum values, even if those switch
+ statements have a "default:" statement. Fixes bug 8598; bugfix
+ on 0.2.4.10-alpha.
+
+ o Minor bugfixes (protocol):
+ - Fix the handling of a TRUNCATE cell when it arrives while the
+ circuit extension is in progress. Fixes bug 7947; bugfix on 0.0.7.1.
+ - Fix a misframing issue when reading the version numbers in a
+ VERSIONS cell. Previously we would recognize [00 01 00 02] as
+ 'version 1, version 2, and version 0x100', when it should have
+ only included versions 1 and 2. Fixes bug 8059; bugfix on
+ 0.2.0.10-alpha. Reported pseudonymously.
+ - Make the format and order of STREAM events for DNS lookups
+ consistent among the various ways to launch DNS lookups. Fixes
+ bug 8203; bugfix on 0.2.0.24-rc. Patch by "Desoxy."
+ - Correct our check for which versions of Tor support the EXTEND2
+ cell. We had been willing to send it to Tor 0.2.4.7-alpha and
+ later, when support was really added in version 0.2.4.8-alpha.
+ Fixes bug 8464; bugfix on 0.2.4.8-alpha.
+
+ o Minor bugfixes (other):
+ - Correctly store microdescriptors and extrainfo descriptors with
+ an internal NUL byte. Fixes bug 8037; bugfix on 0.2.0.1-alpha.
+ Bug reported by "cypherpunks".
+ - Increase the width of the field used to remember a connection's
+ link protocol version to two bytes. Harmless for now, since the
+ only currently recognized versions are one byte long. Reported
+ pseudonymously. Fixes bug 8062; bugfix on 0.2.0.10-alpha.
+ - If the state file's path bias counts are invalid (presumably from a
+ buggy Tor prior to 0.2.4.10-alpha), make them correct. Also add
+ additional checks and log messages to the scaling of Path Bias
+ counts, in case there still are remaining issues with scaling.
+ Should help resolve bug 8235.
+ - Eliminate several instances where we use "Nickname=ID" to refer to
+ nodes in logs. Use "Nickname (ID)" instead. (Elsewhere, we still use
+ "$ID=Nickname", which is also acceptable.) Fixes bug 7065. Bugfix
+ on 0.2.3.21-rc, 0.2.4.5-alpha, 0.2.4.8-alpha, and 0.2.4.10-alpha.
+
+ o Minor bugfixes (syscalls):
+ - Always check the return values of functions fcntl() and
+ setsockopt(). We don't believe these are ever actually failing in
+ practice, but better safe than sorry. Also, checking these return
+ values should please analysis tools like Coverity. Patch from
+ 'flupzor'. Fixes bug 8206; bugfix on all versions of Tor.
+ - Use direct writes rather than stdio when building microdescriptor
+ caches, in an attempt to mitigate bug 8031, or at least make it
+ less common.
+
+ o Minor bugfixes (config):
+ - When rejecting a configuration because we were unable to parse a
+ quoted string, log an actual error message. Fixes bug 7950; bugfix
+ on 0.2.0.16-alpha.
+ - Behave correctly when the user disables LearnCircuitBuildTimeout
+ but doesn't tell us what they would like the timeout to be. Fixes
+ bug 6304; bugfix on 0.2.2.14-alpha.
+ - When autodetecting the number of CPUs, use the number of available
+ CPUs in preference to the number of configured CPUs. Inform the
+ user if this reduces the number of available CPUs. Fixes bug 8002;
+ bugfix on 0.2.3.1-alpha.
+ - Make it an error when you set EntryNodes but disable UseGuardNodes,
+ since it will (surprisingly to some users) ignore EntryNodes. Fixes
+ bug 8180; bugfix on 0.2.3.11-alpha.
+ - Allow TestingTorNetworks to override the 4096-byte minimum for
+ the Fast threshold. Otherwise they can't bootstrap until they've
+ observed more traffic. Fixes bug 8508; bugfix on 0.2.4.10-alpha.
+ - Fix some logic errors when the user manually overrides the
+ PathsNeededToBuildCircuits option in torrc. Fixes bug 8599; bugfix
+ on 0.2.4.10-alpha.
+
+ o Minor bugfixes (log messages to help diagnose bugs):
+ - If we fail to free a microdescriptor because of bug 7164, log
+ the filename and line number from which we tried to free it.
+ - Add another diagnostic to the heartbeat message: track and log
+ overhead that TLS is adding to the data we write. If this is
+ high, we are sending too little data to SSL_write at a time.
+ Diagnostic for bug 7707.
+ - Add more detail to a log message about relaxed timeouts, to help
+ track bug 7799.
+ - Warn more aggressively when flushing microdescriptors to a
+ microdescriptor cache fails, in an attempt to mitigate bug 8031,
+ or at least make it more diagnosable.
+ - Improve debugging output to help track down bug 8185 ("Bug:
+ outgoing relay cell has n_chan==NULL. Dropping.")
+ - Log the purpose of a path-bias testing circuit correctly.
+ Improves a log message from bug 8477; bugfix on 0.2.4.8-alpha.
+
+ o Minor bugfixes (0.2.4.x log messages that were too noisy):
+ - Don't attempt to relax the timeout of already opened 1-hop circuits.
+ They might never timeout. This should eliminate some/all cases of
+ the relaxed timeout log message.
+ - Use circuit creation time for network liveness evaluation. This
+ should eliminate warning log messages about liveness caused
+ by changes in timeout evaluation. Fixes bug 6572; bugfix on
+ 0.2.4.8-alpha.
+ - Reduce a path bias length check from notice to info. The message
+ is triggered when creating controller circuits. Fixes bug 8196;
+ bugfix on 0.2.4.8-alpha.
+ - Fix a path state issue that triggered a notice during relay startup.
+ Fixes bug 8320; bugfix on 0.2.4.10-alpha.
+ - Reduce occurrences of warns about circuit purpose in
+ connection_ap_expire_building(). Fixes bug 8477; bugfix on
+ 0.2.4.11-alpha.
+
+ o Minor bugfixes (pre-0.2.4.x log messages that were too noisy):
+ - If we encounter a write failure on a SOCKS connection before we
+ finish our SOCKS handshake, don't warn that we closed the
+ connection before we could send a SOCKS reply. Fixes bug 8427;
+ bugfix on 0.1.0.1-rc.
+ - Correctly recognize that [::1] is a loopback address. Fixes
+ bug 8377; bugfix on 0.2.1.3-alpha.
+ - Fix a directory authority warn caused when we have a large amount
+ of badexit bandwidth. Fixes bug 8419; bugfix on 0.2.2.10-alpha.
+ - Don't log inappropriate heartbeat messages when hibernating: a
+ hibernating node is _expected_ to drop out of the consensus,
+ decide it isn't bootstrapped, and so forth. Fixes bug 7302;
+ bugfix on 0.2.3.1-alpha.
+ - Don't complain about bootstrapping problems while hibernating.
+ These complaints reflect a general code problem, but not one
+ with any problematic effects (no connections are actually
+ opened). Fixes part of bug 7302; bugfix on 0.2.3.2-alpha.
+
+ o Documentation fixes:
+ - Update tor-fw-helper.1.txt and tor-fw-helper.c to make option
+ names match. Fixes bug 7768.
+ - Make the torify manpage no longer refer to tsocks; torify hasn't
+ supported tsocks since 0.2.3.14-alpha.
+ - Make the tor manpage no longer reference tsocks.
+ - Fix the GeoIPExcludeUnknown documentation to refer to
+ ExcludeExitNodes rather than the currently nonexistent
+ ExcludeEntryNodes. Spotted by "hamahangi" on tor-talk.
+
+ o Removed files:
+ - The tor-tsocks.conf is no longer distributed or installed. We
+ recommend that tsocks users use torsocks instead. Resolves
+ ticket 8290.
+
+
+Changes in version 0.2.4.11-alpha - 2013-03-11
+ Tor 0.2.4.11-alpha makes relay measurement by directory authorities
+ more robust, makes hidden service authentication work again, and
+ resolves a DPI fingerprint for Tor's SSL transport.
+
+ o Major features (directory authorities):
+ - Directory authorities now support a new consensus method (17)
+ where they cap the published bandwidth of servers for which
+ insufficient bandwidth measurements exist. Fixes part of bug 2286.
+ - Directory authorities that set "DisableV2DirectoryInfo_ 1" no longer
+ serve any v2 directory information. Now we can test disabling the
+ old deprecated v2 directory format, and see whether doing so has
+ any effect on network load. Begins to fix bug 6783.
+ - Directory authorities now include inside each vote a statement of
+ the performance thresholds they used when assigning flags.
+ Implements ticket 8151.
+
+ o Major bugfixes (directory authorities):
+ - Stop marking every relay as having been down for one hour every
+ time we restart a directory authority. These artificial downtimes
+ were messing with our Stable and Guard flag calculations. Fixes
+ bug 8218 (introduced by the fix for 1035). Bugfix on 0.2.2.23-alpha.
+
+ o Major bugfixes (hidden services):
+ - Allow hidden service authentication to succeed again. When we
+ refactored the hidden service introduction code back
+ in 0.2.4.1-alpha, we didn't update the code that checks
+ whether authentication information is present, causing all
+ authentication checks to return "false". Fix for bug 8207; bugfix
+ on 0.2.4.1-alpha. Found by Coverity; this is CID 718615.
+
+ o Minor features (relays, bridges):
+ - Make bridge relays check once a minute for whether their IP
+ address has changed, rather than only every 15 minutes. Resolves
+ bugs 1913 and 1992.
+ - Refactor resolve_my_address() so it returns the method by which we
+ decided our public IP address (explicitly configured, resolved from
+ explicit hostname, guessed from interfaces, learned by gethostname).
+ Now we can provide more helpful log messages when a relay guesses
+ its IP address incorrectly (e.g. due to unexpected lines in
+ /etc/hosts). Resolves ticket 2267.
+ - Teach bridge-using clients to avoid 0.2.2 bridges when making
+ microdescriptor-related dir requests, and only fall back to normal
+ descriptors if none of their bridges can handle microdescriptors
+ (as opposed to the fix in ticket 4013, which caused them to fall
+ back to normal descriptors if *any* of their bridges preferred
+ them). Resolves ticket 4994.
+ - Randomize the lifetime of our SSL link certificate, so censors can't
+ use the static value for filtering Tor flows. Resolves ticket 8443;
+ related to ticket 4014 which was included in 0.2.2.33.
+ - Support a new version of the link protocol that allows 4-byte circuit
+ IDs. Previously, circuit IDs were limited to 2 bytes, which presented
+ a possible resource exhaustion issue. Closes ticket 7351; implements
+ proposal 214.
+
+ o Minor features (portability):
+ - Tweak the curve25519-donna*.c implementations to tolerate systems
+ that lack stdint.h. Fixes bug 3894; bugfix on 0.2.4.8-alpha.
+ - Use Ville Laurikari's implementation of AX_CHECK_SIGN() to determine
+ the signs of types during autoconf. This is better than our old
+ approach, which didn't work when cross-compiling.
+ - Detect the sign of enum values, rather than assuming that MSC is the
+ only compiler where enum types are all signed. Fixes bug 7727;
+ bugfix on 0.2.4.10-alpha.
+
+ o Minor features (other):
+ - Say "KBytes" rather than "KB" in the man page (for various values
+ of K), to further reduce confusion about whether Tor counts in
+ units of memory or fractions of units of memory. Resolves ticket 7054.
+ - Clear the high bit on curve25519 public keys before passing them to
+ our backend, in case we ever wind up using a backend that doesn't do
+ so itself. If we used such a backend, and *didn't* clear the high bit,
+ we could wind up in a situation where users with such backends would
+ be distinguishable from users without. Fixes bug 8121; bugfix on
+ 0.2.4.8-alpha.
+ - Update to the March 6 2013 Maxmind GeoLite Country database.
+
+ o Minor bugfixes (clients):
+ - When we receive a RELAY_END cell with the reason DONE, or with no
+ reason, before receiving a RELAY_CONNECTED cell, report the SOCKS
+ status as "connection refused". Previously we reported these cases
+ as success but then immediately closed the connection. Fixes bug
+ 7902; bugfix on 0.1.0.1-rc. Reported by "oftc_must_be_destroyed".
+ - Downgrade an assertion in connection_ap_expire_beginning to an
+ LD_BUG message. The fix for bug 8024 should prevent this message
+ from displaying, but just in case, a warn that we can diagnose
+ is better than more assert crashes. Fixes bug 8065; bugfix on
+ 0.2.4.8-alpha.
+ - Lower path use bias thresholds to .80 for notice and .60 for warn.
+ Also make the rate limiting flags for the path use bias log messages
+ independent from the original path bias flags. Fixes bug 8161;
+ bugfix on 0.2.4.10-alpha.
+
+ o Minor bugfixes (relays):
+ - Stop trying to resolve our hostname so often (e.g. every time we
+ think about doing a directory fetch). Now we reuse the cached
+ answer in some cases. Fixes bugs 1992 (bugfix on 0.2.0.20-rc)
+ and 2410 (bugfix on 0.1.2.2-alpha).
+ - Stop sending a stray "(null)" in some cases for the server status
+ "EXTERNAL_ADDRESS" controller event. Resolves bug 8200; bugfix
+ on 0.1.2.6-alpha.
+ - When choosing which stream on a formerly stalled circuit to wake
+ first, make better use of the platform's weak RNG. Previously,
+ we had been using the % ("modulo") operator to try to generate a
+ 1/N chance of picking each stream, but this behaves badly with
+ many platforms' choice of weak RNG. Fixes bug 7801; bugfix on
+ 0.2.2.20-alpha.
+ - Use our own weak RNG when we need a weak RNG. Windows's rand() and
+ Irix's random() only return 15 bits; Solaris's random() returns more
+ bits but its RAND_MAX says it only returns 15, and so on. Motivated
+ by the fix for bug 7801; bugfix on 0.2.2.20-alpha.
+
+ o Minor bugfixes (directory authorities):
+ - Directory authorities now use less space when formatting identical
+ microdescriptor lines in directory votes. Fixes bug 8158; bugfix
+ on 0.2.4.1-alpha.
+
+ o Minor bugfixes (memory leaks spotted by Coverity -- bug 7816):
+ - Avoid leaking memory if we fail to compute a consensus signature
+ or we generate a consensus we can't parse. Bugfix on 0.2.0.5-alpha.
+ - Fix a memory leak when receiving headers from an HTTPS proxy. Bugfix
+ on 0.2.1.1-alpha.
+ - Fix a memory leak during safe-cookie controller authentication.
+ Bugfix on 0.2.3.13-alpha.
+ - Avoid memory leak of IPv6 policy content if we fail to format it into
+ a router descriptor. Bugfix on 0.2.4.7-alpha.
+
+ o Minor bugfixes (other code correctness issues):
+ - Avoid a crash if we fail to generate an extrainfo descriptor.
+ Fixes bug 8208; bugfix on 0.2.3.16-alpha. Found by Coverity;
+ this is CID 718634.
+ - When detecting the largest possible file descriptor (in order to
+ close all file descriptors when launching a new program), actually
+ use _SC_OPEN_MAX. The old code for doing this was very, very broken.
+ Fixes bug 8209; bugfix on 0.2.3.1-alpha. Found by Coverity; this
+ is CID 743383.
+ - Fix a copy-and-paste error when adding a missing A1 to a routerset
+ because of GeoIPExcludeUnknown. Fix for Coverity CID 980650.
+ Bugfix on 0.2.4.10-alpha.
+ - Fix an impossible-to-trigger integer overflow when estimating how
+ long our onionskin queue would take. (This overflow would require us
+ to accept 4 million onionskins before processing 100 of them.) Fixes
+ bug 8210; bugfix on 0.2.4.10-alpha.
+
+ o Code simplification and refactoring:
+ - Add a wrapper function for the common "log a message with a
+ rate-limit" case.
+
+
+Changes in version 0.2.4.10-alpha - 2013-02-04
+ Tor 0.2.4.10-alpha adds defenses at the directory authority level from
+ certain attacks that flood the network with relays; changes the queue
+ for circuit create requests from a sized-based limit to a time-based
+ limit; resumes building with MSVC on Windows; and fixes a wide variety
+ of other issues.
+
+ o Major bugfixes (directory authority):
+ - When computing directory thresholds, ignore any rejected-as-sybil
+ nodes during the computation so that they can't influence Fast,
+ Guard, etc. (We should have done this for proposal 109.) Fixes
+ bug 8146.
+ - When marking a node as a likely sybil, reset its uptime metrics
+ to zero, so that it cannot time towards getting marked as Guard,
+ Stable, or HSDir. (We should have done this for proposal 109.) Fixes
+ bug 8147.
+
+ o Major bugfixes:
+ - When a TLS write is partially successful but incomplete, remember
+ that the flushed part has been flushed, and notice that bytes were
+ actually written. Reported and fixed pseudonymously. Fixes bug
+ 7708; bugfix on Tor 0.1.0.5-rc.
+ - Reject bogus create and relay cells with 0 circuit ID or 0 stream
+ ID: these could be used to create unexpected streams and circuits
+ which would count as "present" to some parts of Tor but "absent"
+ to others, leading to zombie circuits and streams or to a bandwidth
+ denial-of-service. Fixes bug 7889; bugfix on every released version
+ of Tor. Reported by "oftc_must_be_destroyed".
+ - Rename all macros in our local copy of queue.h to begin with "TOR_".
+ This change seems the only good way to permanently prevent conflicts
+ with queue.h on various operating systems. Fixes bug 8107; bugfix
+ on 0.2.4.6-alpha.
+
+ o Major features (relay):
+ - Instead of limiting the number of queued onionskins (aka circuit
+ create requests) to a fixed, hard-to-configure number, we limit
+ the size of the queue based on how many we expect to be able to
+ process in a given amount of time. We estimate the time it will
+ take to process an onionskin based on average processing time
+ of previous onionskins. Closes ticket 7291. You'll never have to
+ configure MaxOnionsPending again.
+
+ o Major features (portability):
+ - Resume building correctly with MSVC and Makefile.nmake. This patch
+ resolves numerous bugs and fixes reported by ultramage, including
+ 7305, 7308, 7309, 7310, 7312, 7313, 7315, 7316, and 7669.
+ - Make the ntor and curve25519 code build correctly with MSVC.
+ Fix on 0.2.4.8-alpha.
+
+ o Minor features:
+ - When directory authorities are computing thresholds for flags,
+ never let the threshold for the Fast flag fall below 4096
+ bytes. Also, do not consider nodes with extremely low bandwidths
+ when deciding thresholds for various directory flags. This change
+ should raise our threshold for Fast relays, possibly in turn
+ improving overall network performance; see ticket 1854. Resolves
+ ticket 8145.
+ - The Tor client now ignores sub-domain components of a .onion
+ address. This change makes HTTP "virtual" hosting
+ possible: http://foo.aaaaaaaaaaaaaaaa.onion/ and
+ http://bar.aaaaaaaaaaaaaaaa.onion/ can be two different websites
+ hosted on the same hidden service. Implements proposal 204.
+ - We compute the overhead from passing onionskins back and forth to
+ cpuworkers, and report it when dumping statistics in response to
+ SIGUSR1. Supports ticket 7291.
+
+ o Minor features (path selection):
+ - When deciding whether we have enough descriptors to build circuits,
+ instead of looking at raw relay counts, look at which fraction
+ of (bandwidth-weighted) paths we're able to build. This approach
+ keeps clients from building circuits if their paths are likely to
+ stand out statistically. The default fraction of paths needed is
+ taken from the consensus directory; you can override it with the
+ new PathsNeededToBuildCircuits option. Fixes ticket 5956.
+ - When any country code is listed in ExcludeNodes or ExcludeExitNodes,
+ and we have GeoIP information, also exclude all nodes with unknown
+ countries "??" and "A1". This behavior is controlled by the
+ new GeoIPExcludeUnknown option: you can make such nodes always
+ excluded with "GeoIPExcludeUnknown 1", and disable the feature
+ with "GeoIPExcludeUnknown 0". Setting "GeoIPExcludeUnknown auto"
+ gets you the default behavior. Implements feature 7706.
+ - Path Use Bias: Perform separate accounting for successful circuit
+ use. Keep separate statistics on stream attempt rates versus stream
+ success rates for each guard. Provide configurable thresholds to
+ determine when to emit log messages or disable use of guards that
+ fail too many stream attempts. Resolves ticket 7802.
+
+ o Minor features (log messages):
+ - When learning a fingerprint for a bridge, log its corresponding
+ transport type. Implements ticket 7896.
+ - Improve the log message when "Bug/attack: unexpected sendme cell
+ from client" occurs, to help us track bug 8093.
+
+ o Minor bugfixes:
+ - Remove a couple of extraneous semicolons that were upsetting the
+ cparser library. Patch by Christian Grothoff. Fixes bug 7115;
+ bugfix on 0.2.2.1-alpha.
+ - Remove a source of rounding error during path bias count scaling;
+ don't count cannibalized circuits as used for path bias until we
+ actually try to use them; and fix a circuit_package_relay_cell()
+ warning message about n_chan==NULL. Fixes bug 7802.
+ - Detect nacl when its headers are in a nacl/ subdirectory. Also,
+ actually link against nacl when we're configured to use it. Fixes
+ bug 7972; bugfix on 0.2.4.8-alpha.
+ - Compile correctly with the --disable-curve25519 option. Fixes
+ bug 8153; bugfix on 0.2.4.8-alpha.
+
+ o Build improvements:
+ - Do not report status verbosely from autogen.sh unless the -v flag
+ is specified. Fixes issue 4664. Patch from Onizuka.
+ - Replace all calls to snprintf() outside of src/ext with
+ tor_snprintf(). Also remove the #define to replace snprintf with
+ _snprintf on Windows; they have different semantics, and all of
+ our callers should be using tor_snprintf() anyway. Fixes bug 7304.
+ - Try to detect if we are ever building on a platform where
+ memset(...,0,...) does not set the value of a double to 0.0. Such
+ platforms are permitted by the C standard, though in practice
+ they're pretty rare (since IEEE 754 is nigh-ubiquitous). We don't
+ currently support them, but it's better to detect them and fail
+ than to perform erroneously.
+
+ o Removed features:
+ - Stop exporting estimates of v2 and v3 directory traffic shares
+ in extrainfo documents. They were unneeded and sometimes inaccurate.
+ Also stop exporting any v2 directory request statistics. Resolves
+ ticket 5823.
+ - Drop support for detecting and warning about versions of Libevent
+ before 1.3e. Nothing reasonable ships with them any longer;
+ warning the user about them shouldn't be needed. Resolves ticket
+ 6826.
+
+ o Code simplifications and refactoring:
+ - Rename "isin" functions to "contains", for grammar. Resolves
+ ticket 5285.
+ - Rename Tor's logging function log() to tor_log(), to avoid conflicts
+ with the natural logarithm function from the system libm. Resolves
+ ticket 7599.
+
+
+Changes in version 0.2.4.9-alpha - 2013-01-15
+ Tor 0.2.4.9-alpha provides a quick fix to make the new ntor handshake
+ work more robustly.
+
+ o Major bugfixes:
+ - Fix backward compatibility logic when receiving an embedded ntor
+ handshake tunneled in a CREATE cell. This clears up the "Bug:
+ couldn't format CREATED cell" warning. Fixes bug 7959; bugfix
+ on 0.2.4.8-alpha.
+
+
+Changes in version 0.2.4.8-alpha - 2013-01-14
+ Tor 0.2.4.8-alpha introduces directory guards to reduce user enumeration
+ risks, adds a new stronger and faster circuit handshake, and offers
+ stronger and faster link encryption when both sides support it.
+
+ o Major features:
+ - Preliminary support for directory guards (proposal 207): when
+ possible, clients now use their entry guards for non-anonymous
+ directory requests. This can help prevent client enumeration. Note
+ that this behavior only works when we have a usable consensus
+ directory, and when options about what to download are more or less
+ standard. In the future we should re-bootstrap from our guards,
+ rather than re-bootstrapping from the preconfigured list of
+ directory sources that ships with Tor. Resolves ticket 6526.
+ - Tor relays and clients now support a better CREATE/EXTEND cell
+ format, allowing the sender to specify multiple address, identity,
+ and handshake types. Implements Robert Ransom's proposal 200;
+ closes ticket 7199.
+
+ o Major features (new circuit handshake):
+ - Tor now supports a new circuit extension handshake designed by Ian
+ Goldberg, Douglas Stebila, and Berkant Ustaoglu. Our original
+ circuit extension handshake, later called "TAP", was a bit slow
+ (especially on the relay side), had a fragile security proof, and
+ used weaker keys than we'd now prefer. The new circuit handshake
+ uses Dan Bernstein's "curve25519" elliptic-curve Diffie-Hellman
+ function, making it significantly more secure than the older
+ handshake, and significantly faster. Tor can use one of two built-in
+ pure-C curve25519-donna implementations by Adam Langley, or it
+ can link against the "nacl" library for a tuned version if present.
+
+ The built-in version is very fast for 64-bit systems when building
+ with GCC. The built-in 32-bit version is still faster than the
+ old TAP protocol, but using libnacl is better on most such hosts.
+
+ Clients don't currently use this protocol by default, since
+ comparatively few clients support it so far. To try it, set
+ UseNTorHandshake to 1.
+
+ Implements proposal 216; closes ticket 7202.
+
+ o Major features (better link encryption):
+ - Relays can now enable the ECDHE TLS ciphersuites when available
+ and appropriate. These ciphersuites let us negotiate forward-secure
+ TLS secret keys more safely and more efficiently than with our
+ previous use of Diffie-Hellman modulo a 1024-bit prime. By default,
+ public relays prefer the (faster) P224 group, and bridges prefer
+ the (more common) P256 group; you can override this with the
+ TLSECGroup option.
+
+ Enabling these ciphers was a little tricky, since for a long time,
+ clients had been claiming to support them without actually doing
+ so, in order to foil fingerprinting. But with the client-side
+ implementation of proposal 198 in 0.2.3.17-beta, clients can now
+ match the ciphers from recent Firefox versions *and* list the
+ ciphers they actually mean, so relays can believe such clients
+ when they advertise ECDHE support in their TLS ClientHello messages.
+
+ This feature requires clients running 0.2.3.17-beta or later,
+ and requires both sides to be running OpenSSL 1.0.0 or later
+ with ECC support. OpenSSL 1.0.1, with the compile-time option
+ "enable-ec_nistp_64_gcc_128", is highly recommended.
+
+ Implements the relay side of proposal 198; closes ticket 7200.
+
+ o Major bugfixes:
+ - Avoid crashing when, as a relay without IPv6-exit support, a
+ client insists on getting an IPv6 address or nothing. Fixes bug
+ 7814; bugfix on 0.2.4.7-alpha.
+
+ o Minor features:
+ - Improve circuit build timeout handling for hidden services.
+ In particular: adjust build timeouts more accurately depending
+ upon the number of hop-RTTs that a particular circuit type
+ undergoes. Additionally, launch intro circuits in parallel
+ if they timeout, and take the first one to reply as valid.
+ - Work correctly on Unix systems where EAGAIN and EWOULDBLOCK are
+ separate error codes; or at least, don't break for that reason.
+ Fixes bug 7935. Reported by "oftc_must_be_destroyed".
+ - Update to the January 2 2013 Maxmind GeoLite Country database.
+
+ o Minor features (testing):
+ - Add benchmarks for DH (1024-bit multiplicative group) and ECDH
+ (P-256) Diffie-Hellman handshakes to src/or/bench.
+ - Add benchmark functions to test onion handshake performance.
+
+ o Minor features (path bias detection):
+ - Alter the Path Bias log messages to be more descriptive in terms
+ of reporting timeouts and other statistics.
+ - Create three levels of Path Bias log messages, as opposed to just
+ two. These are configurable via consensus as well as via the torrc
+ options PathBiasNoticeRate, PathBiasWarnRate, PathBiasExtremeRate.
+ The default values are 0.70, 0.50, and 0.30 respectively.
+ - Separate the log message levels from the decision to drop guards,
+ which also is available via torrc option PathBiasDropGuards.
+ PathBiasDropGuards still defaults to 0 (off).
+ - Deprecate PathBiasDisableRate in favor of PathBiasDropGuards
+ in combination with PathBiasExtremeRate.
+ - Increase the default values for PathBiasScaleThreshold and
+ PathBiasCircThreshold from (200, 20) to (300, 150).
+ - Add in circuit usage accounting to path bias. If we try to use a
+ built circuit but fail for any reason, it counts as path bias.
+ Certain classes of circuits where the adversary gets to pick your
+ destination node are exempt from this accounting. Usage accounting
+ can be specifically disabled via consensus parameter or torrc.
+ - Convert all internal path bias state to double-precision floating
+ point, to avoid roundoff error and other issues.
+ - Only record path bias information for circuits that have completed
+ *two* hops. Assuming end-to-end tagging is the attack vector, this
+ makes us more resilient to ambient circuit failure without any
+ detection capability loss.
+
+ o Minor bugfixes (log messages):
+ - Rate-limit the "No circuits are opened. Relaxed timeout for a
+ circuit with channel state open..." message to once per hour to
+ keep it from filling the notice logs. Mitigates bug 7799 but does
+ not fix the underlying cause. Bugfix on 0.2.4.7-alpha.
+ - Avoid spurious warnings when configuring multiple client ports of
+ which only some are nonlocal. Previously, we had claimed that some
+ were nonlocal when in fact they weren't. Fixes bug 7836; bugfix on
+ 0.2.3.3-alpha.
+
+ o Code simplifications and refactoring:
+ - Get rid of a couple of harmless clang warnings, where we compared
+ enums to ints. These warnings are newly introduced in clang 3.2.
+ - Split the onion.c file into separate modules for the onion queue
+ and the different handshakes it supports.
+ - Remove the marshalling/unmarshalling code for sending requests to
+ cpuworkers over a socket, and instead just send structs. The
+ recipient will always be the same Tor binary as the sender, so
+ any encoding is overkill.
+
+
+Changes in version 0.2.4.7-alpha - 2012-12-24
+ Tor 0.2.4.7-alpha introduces a new approach to providing fallback
+ directory mirrors for more robust bootstrapping; fixes more issues where
+ clients with changing network conditions refuse to make any circuits;
+ adds initial support for exiting to IPv6 addresses; resumes being able
+ to update our GeoIP database, and includes the geoip6 file this time;
+ turns off the client-side DNS cache by default due to privacy risks;
+ and fixes a variety of other issues.
+
+ o Major features (client resilience):
+ - Add a new "FallbackDir" torrc option to use when we can't use
+ a directory mirror from the consensus (either because we lack a
+ consensus, or because they're all down). Currently, all authorities
+ are fallbacks by default, and there are no other default fallbacks,
+ but that will change. This option will allow us to give clients a
+ longer list of servers to try to get a consensus from when first
+ connecting to the Tor network, and thereby reduce load on the
+ directory authorities. Implements proposal 206, "Preconfigured
+ directory sources for bootstrapping". We also removed the old
+ "FallbackNetworkstatus" option, since we never got it working well
+ enough to use it. Closes bug 572.
+ - If we have no circuits open, use a relaxed timeout (the
+ 95-percentile cutoff) until a circuit succeeds. This heuristic
+ should allow Tor to succeed at building circuits even when the
+ network connection drastically changes. Should help with bug 3443.
+
+ o Major features (IPv6):
+ - Relays can now exit to IPv6 addresses: make sure that you have IPv6
+ connectivity, then set the IPv6Exit flag to 1. Also make sure your
+ exit policy reads as you would like: the address * applies to all
+ address families, whereas *4 is IPv4 address only, and *6 is IPv6
+ addresses only. On the client side, you'll need to wait until the
+ authorities have upgraded, wait for enough exits to support IPv6,
+ apply the "IPv6Traffic" flag to a SocksPort, and use Socks5. Closes
+ ticket 5547, implements proposal 117 as revised in proposal 208.
+
+ We DO NOT recommend that clients with actual anonymity needs start
+ using IPv6 over Tor yet, since not enough exits support it yet.
+
+ o Major features (geoip database):
+ - Maxmind began labelling Tor relays as being in country "A1",
+ which breaks by-country node selection inside Tor. Now we use a
+ script to replace "A1" ("Anonymous Proxy") entries in our geoip
+ file with real country codes. This script fixes about 90% of "A1"
+ entries automatically and uses manual country code assignments to
+ fix the remaining 10%. See src/config/README.geoip for details.
+ Fixes bug 6266. Also update to the December 5 2012 Maxmind GeoLite
+ Country database, as modified above.
+
+ o Major bugfixes (client-side DNS):
+ - Turn off the client-side DNS cache by default. Updating and using
+ the DNS cache is now configurable on a per-client-port
+ level. SOCKSPort, DNSPort, etc lines may now contain
+ {No,}Cache{IPv4,IPv6,}DNS lines to indicate that we shouldn't
+ cache these types of DNS answers when we receive them from an
+ exit node in response to an application request on this port, and
+ {No,}UseCached{IPv4,IPv6,DNS} lines to indicate that if we have
+ cached DNS answers of these types, we shouldn't use them. It's
+ potentially risky to use cached DNS answers at the client, since
+ doing so can indicate to one exit what answers we've gotten
+ for DNS lookups in the past. With IPv6, this becomes especially
+ problematic. Using cached DNS answers for requests on the same
+ circuit would present less linkability risk, since all traffic
+ on a circuit is already linkable, but it would also provide
+ little performance benefit: the exit node caches DNS replies
+ too. Implements a simplified version of Proposal 205. Implements
+ ticket 7570.
+
+ o Major bugfixes (other):
+ - Alter circuit build timeout measurement to start at the point
+ where we begin the CREATE/CREATE_FAST step (as opposed to circuit
+ initialization). This should make our timeout measurements more
+ uniform. Previously, we were sometimes including ORconn setup time
+ in our circuit build time measurements. Should resolve bug 3443.
+ - Fix an assertion that could trigger in hibernate_go_dormant() when
+ closing an or_connection_t: call channel_mark_for_close() rather
+ than connection_mark_for_close(). Fixes bug 7267. Bugfix on
+ 0.2.4.4-alpha.
+ - Include the geoip6 IPv6 GeoIP database in the tarball. Fixes bug
+ 7655; bugfix on 0.2.4.6-alpha.
+
+ o Minor features:
+ - Add a new torrc option "ServerTransportListenAddr" to let bridge
+ operators select the address where their pluggable transports will
+ listen for connections. Resolves ticket 7013.
+ - Allow an optional $ before the node identity digest in the
+ controller command GETINFO ns/id/<identity>, for consistency with
+ md/id/<identity> and desc/id/<identity>. Resolves ticket 7059.
+ - Log packaged cell fullness as part of the heartbeat message.
+ Diagnosis to try to determine the extent of bug 7743.
+
+ o Minor features (IPv6):
+ - AutomapHostsOnResolve now supports IPv6 addresses. By default, we
+ prefer to hand out virtual IPv6 addresses, since there are more of
+ them and we can't run out. To override this behavior and make IPv4
+ addresses preferred, set NoPreferIPv6Automap on whatever SOCKSPort
+ or DNSPort you're using for resolving. Implements ticket 7571.
+ - AutomapHostsOnResolve responses are now randomized, to avoid
+ annoying situations where Tor is restarted and applications
+ connect to the wrong addresses.
+ - Never try more than 1000 times to pick a new virtual address when
+ AutomapHostsOnResolve is set. That's good enough so long as we
+ aren't close to handing out our entire virtual address space;
+ if you're getting there, it's best to switch to IPv6 virtual
+ addresses anyway.
+
+ o Minor bugfixes:
+ - The ADDRMAP command can no longer generate an ill-formed error
+ code on a failed MAPADDRESS. It now says "internal" rather than
+ an English sentence fragment with spaces in the middle. Bugfix on
+ Tor 0.2.0.19-alpha.
+ - Fix log messages and comments to avoid saying "GMT" when we mean
+ "UTC". Fixes bug 6113.
+ - Compile on win64 using mingw64. Fixes bug 7260; patches from
+ "yayooo".
+ - Fix a crash when debugging unit tests on Windows: deallocate a
+ shared library with FreeLibrary, not CloseHandle. Fixes bug 7306;
+ bugfix on 0.2.2.17-alpha. Reported by "ultramage".
+
+ o Renamed options:
+ - The DirServer option is now DirAuthority, for consistency with
+ current naming patterns. You can still use the old DirServer form.
+
+ o Code simplification and refactoring:
+ - Move the client-side address-map/virtual-address/DNS-cache code
+ out of connection_edge.c into a new addressmap.c module.
+ - Remove unused code for parsing v1 directories and "running routers"
+ documents. Fixes bug 6887.
+
+
+Changes in version 0.2.3.25 - 2012-11-19
+ The Tor 0.2.3 release series is dedicated to the memory of Len "rabbi"
+ Sassaman (1980-2011), a long-time cypherpunk, anonymity researcher,
+ Mixmaster maintainer, Pynchon Gate co-designer, CodeCon organizer,
+ programmer, and friend. Unstinting in his dedication to the cause of
+ freedom, he inspired and helped many of us as we began our work on
+ anonymity, and inspires us still. Please honor his memory by writing
+ software to protect people's freedoms, and by helping others to do so.
+
+ Tor 0.2.3.25, the first stable release in the 0.2.3 branch, features
+ significantly reduced directory overhead (via microdescriptors),
+ enormous crypto performance improvements for fast relays on new
+ enough hardware, a new v3 TLS handshake protocol that can better
+ resist fingerprinting, support for protocol obfuscation plugins (aka
+ pluggable transports), better scalability for hidden services, IPv6
+ support for bridges, performance improvements like allowing clients
+ to skip the first round-trip on the circuit ("optimistic data") and
+ refilling token buckets more often, a new "stream isolation" design
+ to isolate different applications on different circuits, and many
+ stability, security, and privacy fixes.
+
+ o Major bugfixes:
+ - Tor tries to wipe potentially sensitive data after using it, so
+ that if some subsequent security failure exposes Tor's memory,
+ the damage will be limited. But we had a bug where the compiler
+ was eliminating these wipe operations when it decided that the
+ memory was no longer visible to a (correctly running) program,
+ hence defeating our attempt at defense in depth. We fix that
+ by using OpenSSL's OPENSSL_cleanse() operation, which a compiler
+ is unlikely to optimize away. Future versions of Tor may use
+ a less ridiculously heavy approach for this. Fixes bug 7352.
+ Reported in an article by Andrey Karpov.
+
+ o Minor bugfixes:
+ - Fix a harmless bug when opting against publishing a relay descriptor
+ because DisableNetwork is set. Fixes bug 7464; bugfix on
+ 0.2.3.9-alpha.
+
+
+Changes in version 0.2.4.6-alpha - 2012-11-13
+ Tor 0.2.4.6-alpha fixes an assert bug that has been plaguing relays,
+ makes our defense-in-depth memory wiping more reliable, and begins to
+ count IPv6 addresses in bridge statistics,
+
+ o Major bugfixes:
+ - Fix an assertion failure that could occur when closing a connection
+ with a spliced rendezvous circuit. Fix for bug 7212; bugfix on
+ Tor 0.2.4.4-alpha.
+ - Tor tries to wipe potentially sensitive data after using it, so
+ that if some subsequent security failure exposes Tor's memory,
+ the damage will be limited. But we had a bug where the compiler
+ was eliminating these wipe operations when it decided that the
+ memory was no longer visible to a (correctly running) program,
+ hence defeating our attempt at defense in depth. We fix that
+ by using OpenSSL's OPENSSL_cleanse() operation, which a compiler
+ is unlikely to optimize away. Future versions of Tor may use
+ a less ridiculously heavy approach for this. Fixes bug 7352.
+ Reported in an article by Andrey Karpov.
+
+ o Minor features:
+ - Add GeoIP database for IPv6 addresses. The new config option
+ is GeoIPv6File.
+ - Bridge statistics now count bridge clients connecting over IPv6:
+ bridge statistics files now list "bridge-ip-versions" and
+ extra-info documents list "geoip6-db-digest". The control protocol
+ "CLIENTS_SEEN" and "ip-to-country" queries now support IPv6. Initial
+ implementation by "shkoo", addressing ticket 5055.
+
+ o Minor bugfixes:
+ - Warn when we are binding low ports when hibernation is enabled;
+ previously we had warned when we were _advertising_ low ports with
+ hibernation enabled. Fixes bug 7285; bugfix on 0.2.3.9-alpha.
+ - Fix a harmless bug when opting against publishing a relay descriptor
+ because DisableNetwork is set. Fixes bug 7464; bugfix on
+ 0.2.3.9-alpha.
+ - Add warning message when a managed proxy dies during configuration.
+ Fixes bug 7195; bugfix on 0.2.4.2-alpha.
+ - Fix a linking error when building tor-fw-helper without miniupnp.
+ Fixes bug 7235; bugfix on 0.2.4.2-alpha. Fix by Anthony G. Basile.
+ - Check for closing an or_connection_t without going through correct
+ channel functions; emit a warning and then call
+ connection_or_close_for_error() so we don't assert as in bugs 7212
+ and 7267.
+ - Compile correctly on compilers without C99 designated initializer
+ support. Fixes bug 7286; bugfix on 0.2.4.4-alpha.
+ - Avoid a possible assert that can occur when channel_send_destroy() is
+ called on a channel in CHANNEL_STATE_CLOSING, CHANNEL_STATE_CLOSED,
+ or CHANNEL_STATE_ERROR when the Tor process is resumed after being
+ blocked for a long interval. Fixes bug 7350; bugfix on 0.2.4.4-alpha.
+ - Fix a memory leak on failing cases of channel_tls_process_certs_cell.
+ Fixes bug 7422; bugfix on 0.2.4.4-alpha.
+
+ o Code simplification and refactoring:
+ - Start using OpenBSD's implementation of queue.h, so that we don't
+ need to hand-roll our own pointer and list structures whenever we
+ need them. (We can't rely on a sys/queue.h, since some operating
+ systems don't have them, and the ones that do have them don't all
+ present the same extensions.)
+
+
+Changes in version 0.2.4.5-alpha - 2012-10-25
+ Tor 0.2.4.5-alpha comes hard at the heels of 0.2.4.4-alpha, to fix
+ two important security vulnerabilities that could lead to remotely
+ triggerable relay crashes, fix a major bug that was preventing clients
+ from choosing suitable exit nodes, and refactor some of our code.
+
+ o Major bugfixes (security, also in 0.2.3.24-rc):
+ - Fix a group of remotely triggerable assertion failures related to
+ incorrect link protocol negotiation. Found, diagnosed, and fixed
+ by "some guy from France". Fix for CVE-2012-2250; bugfix on
+ 0.2.3.6-alpha.
+ - Fix a denial of service attack by which any directory authority
+ could crash all the others, or by which a single v2 directory
+ authority could crash everybody downloading v2 directory
+ information. Fixes bug 7191; bugfix on 0.2.0.10-alpha.
+
+ o Major bugfixes (also in 0.2.3.24-rc):
+ - When parsing exit policy summaries from microdescriptors, we had
+ previously been ignoring the last character in each one, so that
+ "accept 80,443,8080" would be treated by clients as indicating
+ a node that allows access to ports 80, 443, and 808. That would
+ lead to clients attempting connections that could never work,
+ and ignoring exit nodes that would support their connections. Now
+ clients parse these exit policy summaries correctly. Fixes bug 7192;
+ bugfix on 0.2.3.1-alpha.
+
+ o Minor bugfixes (also in 0.2.3.24-rc):
+ - Clients now consider the ClientRejectInternalAddresses config option
+ when using a microdescriptor consensus stanza to decide whether
+ an exit relay would allow exiting to an internal address. Fixes
+ bug 7190; bugfix on 0.2.3.1-alpha.
+
+ o Minor bugfixes:
+ - Only disable TLS session ticket support when running as a TLS
+ server. Now clients will blend better with regular Firefox
+ connections. Fixes bug 7189; bugfix on Tor 0.2.3.23-rc.
+
+ o Code simplification and refactoring:
+ - Start using OpenBSD's implementation of queue.h (originally by
+ Niels Provos).
+ - Move the entry node code from circuitbuild.c to its own file.
+ - Move the circuit build timeout tracking code from circuitbuild.c
+ to its own file.
+
+
+Changes in version 0.2.3.24-rc - 2012-10-25
+ Tor 0.2.3.24-rc fixes two important security vulnerabilities that
+ could lead to remotely triggerable relay crashes, and fixes
+ a major bug that was preventing clients from choosing suitable exit
+ nodes.
+
+ o Major bugfixes (security):
+ - Fix a group of remotely triggerable assertion failures related to
+ incorrect link protocol negotiation. Found, diagnosed, and fixed
+ by "some guy from France". Fix for CVE-2012-2250; bugfix on
+ 0.2.3.6-alpha.
+ - Fix a denial of service attack by which any directory authority
+ could crash all the others, or by which a single v2 directory
+ authority could crash everybody downloading v2 directory
+ information. Fixes bug 7191; bugfix on 0.2.0.10-alpha.
+
+ o Major bugfixes:
+ - When parsing exit policy summaries from microdescriptors, we had
+ previously been ignoring the last character in each one, so that
+ "accept 80,443,8080" would be treated by clients as indicating
+ a node that allows access to ports 80, 443, and 808. That would
+ lead to clients attempting connections that could never work,
+ and ignoring exit nodes that would support their connections. Now
+ clients parse these exit policy summaries correctly. Fixes bug 7192;
+ bugfix on 0.2.3.1-alpha.
+
+ o Minor bugfixes:
+ - Clients now consider the ClientRejectInternalAddresses config option
+ when using a microdescriptor consensus stanza to decide whether
+ an exit relay would allow exiting to an internal address. Fixes
+ bug 7190; bugfix on 0.2.3.1-alpha.
+
+
+Changes in version 0.2.4.4-alpha - 2012-10-20
+ Tor 0.2.4.4-alpha adds a new v3 directory authority, fixes a privacy
+ vulnerability introduced by a change in OpenSSL, fixes a remotely
+ triggerable assert, and adds new channel_t and circuitmux_t abstractions
+ that will make it easier to test new connection transport and cell
+ scheduling algorithms.
+
+ o New directory authorities (also in 0.2.3.23-rc):
+ - Add Faravahar (run by Sina Rabbani) as the ninth v3 directory
+ authority. Closes ticket 5749.
+
+ o Major bugfixes (security/privacy, also in 0.2.3.23-rc):
+ - Disable TLS session tickets. OpenSSL's implementation was giving
+ our TLS session keys the lifetime of our TLS context objects, when
+ perfect forward secrecy would want us to discard anything that
+ could decrypt a link connection as soon as the link connection
+ was closed. Fixes bug 7139; bugfix on all versions of Tor linked
+ against OpenSSL 1.0.0 or later. Found by Florent Daignière.
+ - Discard extraneous renegotiation attempts once the V3 link
+ protocol has been initiated. Failure to do so left us open to
+ a remotely triggerable assertion failure. Fixes CVE-2012-2249;
+ bugfix on 0.2.3.6-alpha. Reported by "some guy from France".
+
+ o Internal abstraction features:
+ - Introduce new channel_t abstraction between circuits and
+ or_connection_t to allow for implementing alternate OR-to-OR
+ transports. A channel_t is an abstract object which can either be a
+ cell-bearing channel, which is responsible for authenticating and
+ handshaking with the remote OR and transmitting cells to and from
+ it, or a listening channel, which spawns new cell-bearing channels
+ at the request of remote ORs. Implements part of ticket 6465.
+ - Also new is the channel_tls_t subclass of channel_t, adapting it
+ to the existing or_connection_t code. The V2/V3 protocol handshaking
+ code which formerly resided in command.c has been moved below the
+ channel_t abstraction layer and may be found in channeltls.c now.
+ Implements the rest of ticket 6465.
+ - Introduce new circuitmux_t storing the queue of circuits for
+ a channel; this encapsulates and abstracts the queue logic and
+ circuit selection policy, and allows the latter to be overridden
+ easily by switching out a policy object. The existing EWMA behavior
+ is now implemented as a circuitmux_policy_t. Resolves ticket 6816.
+
+ o Required libraries:
+ - Tor now requires OpenSSL 0.9.8 or later. OpenSSL 1.0.0 or later is
+ strongly recommended.
+
+ o Minor features:
+ - Warn users who run hidden services on a Tor client with
+ UseEntryGuards disabled that their hidden services will be
+ vulnerable to http://freehaven.net/anonbib/#hs-attack06 (the
+ attack which motivated Tor to support entry guards in the first
+ place). Resolves ticket 6889.
+ - Tor now builds correctly on Bitrig, an OpenBSD fork. Patch from
+ dhill. Resolves ticket 6982.
+ - Option OutboundBindAddress can be specified multiple times and
+ accepts IPv6 addresses. Resolves ticket 6876.
+
+ o Minor bugfixes (also in 0.2.3.23-rc):
+ - Don't serve or accept v2 hidden service descriptors over a
+ relay's DirPort. It's never correct to do so, and disabling it
+ might make it more annoying to exploit any bugs that turn up in the
+ descriptor-parsing code. Fixes bug 7149.
+ - Fix two cases in src/or/transports.c where we were calling
+ fmt_addr() twice in a parameter list. Bug found by David
+ Fifield. Fixes bug 7014; bugfix on 0.2.3.9-alpha.
+ - Fix memory leaks whenever we logged any message about the "path
+ bias" detection. Fixes bug 7022; bugfix on 0.2.3.21-rc.
+ - When relays refuse a "create" cell because their queue of pending
+ create cells is too big (typically because their cpu can't keep up
+ with the arrival rate), send back reason "resource limit" rather
+ than reason "internal", so network measurement scripts can get a
+ more accurate picture. Fixes bug 7037; bugfix on 0.1.1.11-alpha.
+
+ o Minor bugfixes:
+ - Command-line option "--version" implies "--quiet". Fixes bug 6997.
+ - Free some more still-in-use memory at exit, to make hunting for
+ memory leaks easier. Resolves bug 7029.
+ - When a Tor client gets a "truncated" relay cell, the first byte of
+ its payload specifies why the circuit was truncated. We were
+ ignoring this 'reason' byte when tearing down the circuit, resulting
+ in the controller not being told why the circuit closed. Now we
+ pass the reason from the truncated cell to the controller. Bugfix
+ on 0.1.2.3-alpha; fixes bug 7039.
+ - Downgrade "Failed to hand off onionskin" messages to "debug"
+ severity, since they're typically redundant with the "Your computer
+ is too slow" messages. Fixes bug 7038; bugfix on 0.2.2.16-alpha.
+ - Make clients running with IPv6 bridges connect over IPv6 again,
+ even without setting new config options ClientUseIPv6 and
+ ClientPreferIPv6ORPort. Fixes bug 6757; bugfix on 0.2.4.1-alpha.
+ - Use square brackets around IPv6 addresses in numerous places
+ that needed them, including log messages, HTTPS CONNECT proxy
+ requests, TransportProxy statefile entries, and pluggable transport
+ extra-info lines. Fixes bug 7011; patch by David Fifield.
+
+ o Code refactoring and cleanup:
+ - Source files taken from other packages now reside in src/ext;
+ previously they were scattered around the rest of Tor.
+ - Avoid use of reserved identifiers in our C code. The C standard
+ doesn't like us declaring anything that starts with an
+ underscore, so let's knock it off before we get in trouble. Fix
+ for bug 1031; bugfix on the first Tor commit.
+
+
+Changes in version 0.2.3.23-rc - 2012-10-20
+ Tor 0.2.3.23-rc adds a new v3 directory authority, fixes a privacy
+ vulnerability introduced by a change in OpenSSL, and fixes a variety
+ of smaller bugs in preparation for the release.
+
+ o New directory authorities:
+ - Add Faravahar (run by Sina Rabbani) as the ninth v3 directory
+ authority. Closes ticket 5749.
+
+ o Major bugfixes (security/privacy):
+ - Disable TLS session tickets. OpenSSL's implementation was giving
+ our TLS session keys the lifetime of our TLS context objects, when
+ perfect forward secrecy would want us to discard anything that
+ could decrypt a link connection as soon as the link connection
+ was closed. Fixes bug 7139; bugfix on all versions of Tor linked
+ against OpenSSL 1.0.0 or later. Found by Florent Daignière.
+ - Discard extraneous renegotiation attempts once the V3 link
+ protocol has been initiated. Failure to do so left us open to
+ a remotely triggerable assertion failure. Fixes CVE-2012-2249;
+ bugfix on 0.2.3.6-alpha. Reported by "some guy from France".
+
+ o Major bugfixes:
+ - Fix a possible crash bug when checking for deactivated circuits
+ in connection_or_flush_from_first_active_circuit(). Fixes bug 6341;
+ bugfix on 0.2.2.7-alpha. Bug report and fix received pseudonymously.
+
+ o Minor bugfixes (on 0.2.3.x):
+ - Fix two cases in src/or/transports.c where we were calling
+ fmt_addr() twice in a parameter list. Bug found by David
+ Fifield. Fixes bug 7014; bugfix on 0.2.3.9-alpha.
+ - Convert an assert in the pathbias code to a log message. The assert
+ appears to only be triggerable by Tor2Web mode. Fixes bug 6866;
+ bugfix on 0.2.3.17-beta.
+ - Fix memory leaks whenever we logged any message about the "path
+ bias" detection. Fixes bug 7022; bugfix on 0.2.3.21-rc.
+
+ o Minor bugfixes (on 0.2.2.x and earlier):
+ - Don't serve or accept v2 hidden service descriptors over a relay's
+ DirPort. It's never correct to do so, and disabling it might
+ make it more annoying to exploit any bugs that turn up in the
+ descriptor-parsing code. Fixes bug 7149.
+ - When relays refuse a "create" cell because their queue of pending
+ create cells is too big (typically because their cpu can't keep up
+ with the arrival rate), send back reason "resource limit" rather
+ than reason "internal", so network measurement scripts can get a
+ more accurate picture. Bugfix on 0.1.1.11-alpha; fixes bug 7037.
+ - Correct file sizes when reading binary files on Cygwin, to avoid
+ a bug where Tor would fail to read its state file. Fixes bug 6844;
+ bugfix on 0.1.2.7-alpha.
+ - Avoid undefined behaviour when parsing the list of supported
+ rendezvous/introduction protocols in a hidden service descriptor.
+ Previously, Tor would have confused (as-yet-unused) protocol version
+ numbers greater than 32 with lower ones on many platforms. Fixes
+ bug 6827; bugfix on 0.2.0.10-alpha. Found by George Kadianakis.
+
+ o Documentation fixes:
+ - Clarify that hidden services are TCP only. Fixes bug 6024.
+
+
+Changes in version 0.2.4.3-alpha - 2012-09-22
+ Tor 0.2.4.3-alpha fixes another opportunity for a remotely triggerable
+ assertion, resumes letting relays test reachability of their DirPort,
+ and cleans up a bunch of smaller bugs.
+
+ o Security fixes:
+ - Fix an assertion failure in tor_timegm() that could be triggered
+ by a badly formatted directory object. Bug found by fuzzing with
+ Radamsa. Fixes bug 6811; bugfix on 0.2.0.20-rc.
+
+ o Major bugfixes:
+ - Fix a possible crash bug when checking for deactivated circuits
+ in connection_or_flush_from_first_active_circuit(). Fixes bug 6341;
+ bugfix on 0.2.2.7-alpha. Bug report and fix received pseudonymously.
+ - Allow routers to detect that their own DirPorts are running. When
+ we removed support for versions_supports_begindir, we also
+ accidentally removed the mechanism we used to self-test our
+ DirPort. Diagnosed with help from kargig. Fixes bugs 6814 and 6815;
+ bugfix on 0.2.4.2-alpha.
+
+ o Security features:
+ - Switch to a completely time-invariant approach for picking nodes
+ weighted by bandwidth. Our old approach would run through the
+ part of the loop after it had made its choice slightly slower
+ than it ran through the part of the loop before it had made its
+ choice. Addresses ticket 6538.
+ - Disable the use of Guard nodes when in Tor2WebMode. Guard usage
+ by tor2web clients allows hidden services to identify tor2web
+ clients through their repeated selection of the same rendezvous
+ and introduction point circuit endpoints (their guards). Resolves
+ ticket 6888.
+
+ o Minor features:
+ - Enable Tor to read configuration, state, and key information from
+ a FIFO. Previously Tor would only read from files with a positive
+ stat.st_size. Code from meejah; fixes bug 6044.
+
+ o Minor bugfixes:
+ - Correct file sizes when reading binary files on Cygwin, to avoid
+ a bug where Tor would fail to read its state file. Fixes bug 6844;
+ bugfix on 0.1.2.7-alpha.
+ - Correctly handle votes with more than 31 flags. Fixes bug 6853;
+ bugfix on 0.2.0.3-alpha.
+ - When complaining about a client port on a public address, log
+ which address we're complaining about. Fixes bug 4020; bugfix on
+ 0.2.3.3-alpha. Patch by Tom Fitzhenry.
+ - Convert an assert in the pathbias code to a log message. The assert
+ appears to only be triggerable by Tor2Web mode. Fixes bug 6866;
+ bugfix on 0.2.3.17-beta.
+ - Our new buildsystem was overzealous about rebuilding manpages: it
+ would rebuild them all whenever any one of them changed. Now our
+ dependency checking should be correct. Fixes bug 6843; bugfix on
+ 0.2.4.1-alpha.
+ - Don't do reachability testing over IPv6 unless AuthDirPublishIPv6
+ is set. Fixes bug 6880. Bugfix on 0.2.4.1-alpha.
+ - Correct log printout about which address family is preferred
+ when connecting to a bridge with both an IPv4 and IPv6 OR port.
+ Fixes bug 6884; bugfix on 0.2.4.1-alpha.
+
+ o Minor bugfixes (code cleanliness):
+ - Fix round_to_power_of_2() so it doesn't invoke undefined behavior
+ with large values. This situation was untriggered, but nevertheless
+ incorrect. Fixes bug 6831; bugfix on 0.2.0.1-alpha.
+ - Reject consensus votes with more than 64 known-flags. We aren't even
+ close to that limit yet, and our code doesn't handle it correctly.
+ Fixes bug 6833; bugfix on 0.2.0.1-alpha.
+ - Avoid undefined behaviour when parsing the list of supported
+ rendezvous/introduction protocols in a hidden service descriptor.
+ Previously, Tor would have confused (as-yet-unused) protocol version
+ numbers greater than 32 with lower ones on many platforms. Fixes
+ bug 6827; bugfix on 0.2.0.10-alpha. Found by George Kadianakis.
+ - Fix handling of rendezvous client authorization types over 8.
+ Fixes bug 6861; bugfix on 0.2.1.5-alpha.
+ - Fix building with older versions of GCC (2.95, for one) that don't
+ like preprocessor directives inside macro arguments. Found by
+ grarpamp. Fixes bug 6842; bugfix on 0.2.4.2-alpha.
+ - Switch weighted node selection rule from using a list of doubles
+ to using a list of int64_t. This change should make the process
+ slightly easier to debug and maintain. Needed to finish ticket 6538.
+
+ o Code simplification and refactoring:
+ - Move the generic "config" code into a new file, and have "config.c"
+ hold only torrc- and state-related code. Resolves ticket 6823.
+ - Move the core of our "choose a weighted element at random" logic
+ into its own function, and give it unit tests. Now the logic is
+ testable, and a little less fragile too.
+ - Removed the testing_since field of node_t, which hasn't been used
+ for anything since 0.2.0.9-alpha.
+
+ o Documentation fixes:
+ - Clarify that hidden services are TCP only. Fixes bug 6024.
+ - Resolve a typo in torrc.sample.in. Fixes bug 6819; bugfix on
+ 0.2.3.14-alpha.
+
+
+Changes in version 0.2.3.22-rc - 2012-09-11
+ Tor 0.2.3.22-rc fixes another opportunity for a remotely triggerable
+ assertion.
+
+ o Security fixes:
+ - Fix an assertion failure in tor_timegm() that could be triggered
+ by a badly formatted directory object. Bug found by fuzzing with
+ Radamsa. Fixes bug 6811; bugfix on 0.2.0.20-rc.
+
+ o Minor bugfixes:
+ - Avoid segfault when starting up having run with an extremely old
+ version of Tor and parsing its state file. Fixes bug 6801; bugfix
+ on 0.2.2.23-alpha.
+
+
+Changes in version 0.2.2.39 - 2012-09-11
+ Tor 0.2.2.39 fixes two more opportunities for remotely triggerable
+ assertions.
+
+ o Security fixes:
+ - Fix an assertion failure in tor_timegm() that could be triggered
+ by a badly formatted directory object. Bug found by fuzzing with
+ Radamsa. Fixes bug 6811; bugfix on 0.2.0.20-rc.
+ - Do not crash when comparing an address with port value 0 to an
+ address policy. This bug could have been used to cause a remote
+ assertion failure by or against directory authorities, or to
+ allow some applications to crash clients. Fixes bug 6690; bugfix
+ on 0.2.1.10-alpha.
+
+
+Changes in version 0.2.4.2-alpha - 2012-09-10
+ Tor 0.2.4.2-alpha enables port forwarding for pluggable transports,
+ raises the default rate limiting even more, and makes the bootstrapping
+ log messages less noisy.
+
+ o Major features:
+ - Automatically forward the TCP ports of pluggable transport
+ proxies using tor-fw-helper if PortForwarding is enabled. Implements
+ ticket 4567.
+
+ o Major bugfixes:
+ - Raise the default BandwidthRate/BandwidthBurst values from 5MB/10MB
+ to 1GB/1GB. The previous defaults were intended to be "basically
+ infinite", but it turns out they're now limiting our 100mbit+
+ relays and bridges. Fixes bug 6605; bugfix on 0.2.0.10-alpha (the
+ last time we raised it).
+
+ o Minor features:
+ - Detect when we're running with a version of OpenSSL other than the
+ one we compiled with. This has occasionally given people hard-to-
+ track-down errors.
+ - Log fewer lines at level "notice" about our OpenSSL and Libevent
+ versions and capabilities when everything is going right. Resolves
+ part of ticket 6736.
+ - Directory authorities no long accept descriptors for any version of
+ Tor before 0.2.2.35, or for any 0.2.3 release before 0.2.3.10-alpha.
+ These versions are insecure, unsupported, or both. Implements
+ ticket 6789.
+
+ o Minor bugfixes:
+ - Rename the (internal-use-only) UsingTestingNetworkDefaults option
+ to start with a triple-underscore so the controller won't touch it.
+ Patch by Meejah. Fixes bug 3155. Bugfix on 0.2.2.23-alpha.
+ - Avoid segfault when starting up having run with an extremely old
+ version of Tor and parsing its state file. Fixes bug 6801; bugfix
+ on 0.2.2.23-alpha.
+ - Rename the (testing-use-only) _UseFilteringSSLBufferevents option
+ so it doesn't start with _. Fixes bug 3155. Bugfix on 0.2.3.1-alpha.
+ - Don't follow the NULL pointer if microdescriptor generation fails.
+ (This does not appear to be triggerable, but it's best to be safe.)
+ Found by "f. tp.". Fixes bug 6797; bugfix on 0.2.4.1-alpha.
+ - Fix mis-declared dependencies on src/common/crypto.c and
+ src/or/tor_main.c that could break out-of-tree builds under some
+ circumstances. Fixes bug 6778; bugfix on 0.2.4.1-alpha.
+ - Avoid a warning when building common_sha1.i out of tree. Fixes bug
+ 6778; bugfix on 0.2.4.1-alpha.
+ - Fix a harmless (in this case) build warning for implicitly
+ converting a strlen() to an int. Bugfix on 0.2.4.1-alpha.
+
+ o Removed features:
+ - Now that all versions before 0.2.2.x are disallowed, we no longer
+ need to work around their missing features. Thus we can remove a
+ bunch of compatibility code.
+
+ o Code refactoring:
+ - Tweak tor-fw-helper to accept an arbitrary amount of arbitrary
+ TCP ports to forward. In the past it only accepted two ports:
+ the ORPort and the DirPort.
+
+
+Changes in version 0.2.4.1-alpha - 2012-09-05
+ Tor 0.2.4.1-alpha lets bridges publish their pluggable transports to
+ bridgedb; lets relays use IPv6 addresses and directory authorities
+ advertise them; and switches to a cleaner build interface.
+
+ 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.3.x for now.
+
+ o Major features (bridges):
+ - Bridges now report the pluggable transports they support to the
+ bridge authority, so it can pass the supported transports on to
+ bridgedb and/or eventually do reachability testing. Implements
+ ticket 3589.
+
+ o Major features (IPv6):
+ - Bridge authorities now accept IPv6 bridge addresses and include
+ them in network status documents. Implements ticket 5534.
+ - Clients who set "ClientUseIPv6 1" may connect to entry nodes over
+ IPv6. Set "ClientPreferIPv6ORPort 1" to make this even more likely
+ to happen. Implements ticket 5535.
+ - All kind of relays, not just bridges, can now advertise an IPv6
+ OR port. Implements ticket 6362.
+ - Directory authorities vote on IPv6 OR ports using the new consensus
+ method 14. Implements ticket 6363.
+
+ o Major features (build):
+ - Switch to a nonrecursive Makefile structure. Now instead of each
+ Makefile.am invoking other Makefile.am's, there is a master
+ Makefile.am that includes the others. This change makes our build
+ process slightly more maintainable, and improves parallelism for
+ building with make -j. Original patch by Stewart Smith; various
+ fixes by Jim Meyering.
+ - Where available, we now use automake's "silent" make rules by
+ default, so that warnings are easier to spot. You can get the old
+ behavior with "make V=1". Patch by Stewart Smith for ticket 6522.
+
+ o Minor features (code security and spec conformance):
+ - Clear keys and key-derived material left on the stack in
+ rendservice.c and rendclient.c. Check return value of
+ crypto_pk_write_private_key_to_string() in rend_service_load_keys().
+ These fixes should make us more forward-secure against cold-boot
+ attacks and the like. Fixes bug 2385.
+ - Reject EXTEND cells sent to nonexistent streams. According to the
+ spec, an EXTEND cell sent to _any_ nonzero stream ID is invalid, but
+ we were only checking for stream IDs that were currently in use.
+ Found while hunting for more instances of bug 6271. Bugfix on
+ 0.0.2pre8, which introduced incremental circuit construction.
+
+ o Minor features (streamlining);
+ - No longer include the "opt" prefix when generating routerinfos
+ or v2 directories: it has been needless since Tor 0.1.2. Closes
+ ticket 5124.
+ - Remove some now-needless code that tried to aggressively flush
+ OR connections as data was added to them. Since 0.2.0.1-alpha, our
+ cell queue logic has saved us from the failure mode that this code
+ was supposed to prevent. Removing this code will limit the number
+ of baroque control flow paths through Tor's network logic. Reported
+ pseudonymously on IRC. Fixes bug 6468; bugfix on 0.2.0.1-alpha.
+
+ o Minor features (controller):
+ - Add a "GETINFO signal/names" control port command. Implements
+ ticket 3842.
+ - Provide default values for all options via "GETINFO config/defaults".
+ Implements ticket 4971.
+
+ o Minor features (IPv6):
+ - New config option "AuthDirHasIPv6Connectivity 1" that directory
+ authorities should set if they have IPv6 connectivity and want to
+ do reachability tests for IPv6 relays. Implements feature 5974.
+ - A relay with an IPv6 OR port now sends that address in NETINFO
+ cells (in addition to its other address). Implements ticket 6364.
+
+ o Minor features (log messages):
+ - Omit the first heartbeat log message, because it never has anything
+ useful to say, and it clutters up the bootstrapping messages.
+ Resolves ticket 6758.
+ - Don't log about reloading the microdescriptor cache at startup. Our
+ bootstrap warnings are supposed to tell the user when there's a
+ problem, and our bootstrap notices say when there isn't. Resolves
+ ticket 6759; bugfix on 0.2.2.6-alpha.
+ - Don't log "I learned some more directory information" when we're
+ reading cached directory information. Reserve it for when new
+ directory information arrives in response to a fetch. Resolves
+ ticket 6760.
+ - Prevent rounding error in path bias counts when scaling
+ them down, and use the correct scale factor default. Also demote
+ some path bias related log messages down a level and make others
+ less scary sounding. Fixes bug 6647. Bugfix against 0.2.3.17-beta.
+ - We no longer warn so much when generating manpages from their
+ asciidoc source.
+
+ o Code simplifications and refactoring:
+ - Enhance our internal sscanf replacement so that we can eliminate
+ the last remaining uses of the system sscanf. (Though those uses
+ of sscanf were safe, sscanf itself is generally error prone, so
+ we want to eliminate when we can.) Fixes ticket 4195 and Coverity
+ CID 448.
+ - Move ipv6_preferred from routerinfo_t to node_t. Addresses bug 4620.
+ - Move last_reachable and testing_since from routerinfo_t to node_t.
+ Implements ticket 5529.
+ - Add replaycache_t structure, functions and unit tests, then refactor
+ rend_service_introduce() to be more clear to read, improve, debug,
+ and test. Resolves bug 6177.
+ - Finally remove support for malloc_good_size and malloc_usable_size.
+ We had hoped that these functions would let us eke a little more
+ memory out of our malloc implementation. Unfortunately, the only
+ implementations that provided these functions are also ones that
+ are already efficient about not overallocation: they never got us
+ more than 7 or so bytes per allocation. Removing them saves us a
+ little code complexity and a nontrivial amount of build complexity.
+
+ o New requirements:
+ - Tor maintainers now require Automake version 1.9 or later to build
+ Tor from the Git repository. (Automake is not required when building
+ from a source distribution.)
+
+
+Changes in version 0.2.3.21-rc - 2012-09-05
+ Tor 0.2.3.21-rc is the fourth release candidate for the Tor 0.2.3.x
+ series. It fixes a trio of potential security bugs, fixes a bug where
+ we were leaving some of the fast relays out of the microdescriptor
+ consensus, resumes interpreting "ORPort 0" and "DirPort 0" correctly,
+ and cleans up other smaller issues.
+
+ o Major bugfixes (security):
+ - Tear down the circuit if we get an unexpected SENDME cell. Clients
+ could use this trick to make their circuits receive cells faster
+ than our flow control would have allowed, or to gum up the network,
+ or possibly to do targeted memory denial-of-service attacks on
+ entry nodes. Fixes bug 6252. Bugfix on the 54th commit on Tor --
+ from July 2002, before the release of Tor 0.0.0. We had committed
+ this patch previously, but we had to revert it because of bug 6271.
+ Now that 6271 is fixed, this patch appears to work.
+ - Reject any attempt to extend to an internal address. Without
+ this fix, a router could be used to probe addresses on an internal
+ network to see whether they were accepting connections. Fixes bug
+ 6710; bugfix on 0.0.8pre1.
+ - Do not crash when comparing an address with port value 0 to an
+ address policy. This bug could have been used to cause a remote
+ assertion failure by or against directory authorities, or to
+ allow some applications to crash clients. Fixes bug 6690; bugfix
+ on 0.2.1.10-alpha.
+
+ o Major bugfixes:
+ - Remove the upper bound on microdescriptor length. We were hitting
+ the limit for routers with complex exit policies or family
+ declarations, causing clients to not use them. Fixes the first
+ piece of bug 6404; fix on 0.2.2.6-alpha.
+ - Detect "ORPort 0" as meaning, uniformly, that we're not running
+ as a relay. Previously, some of our code would treat the presence
+ of any ORPort line as meaning that we should act like a relay,
+ even though our new listener code would correctly not open any
+ ORPorts for ORPort 0. Similar bugs in other Port options are also
+ fixed. Fixes the first half of bug 6507; bugfix on 0.2.3.3-alpha.
+
+ o Minor bugfixes:
+ - Avoid a pair of double-free and use-after-mark bugs that can
+ occur with certain timings in canceled and re-received DNS
+ requests. Fixes bug 6472; bugfix on 0.0.7rc1.
+ - Fix build and 64-bit compile warnings from --enable-openbsd-malloc.
+ Fixes bug 6379. Bugfix on 0.2.0.20-rc.
+ - Allow one-hop directory fetching circuits the full "circuit build
+ timeout" period, rather than just half of it, before failing them
+ and marking the relay down. This fix should help reduce cases where
+ clients declare relays (or worse, bridges) unreachable because
+ the TLS handshake takes a few seconds to complete. Fixes bug 6743;
+ bugfix on 0.2.2.2-alpha, where we changed the timeout from a static
+ 30 seconds.
+ - Authorities no longer include any router in their microdescriptor
+ consensuses for which they couldn't generate or agree on a
+ microdescriptor. Fixes the second piece of bug 6404; fix on
+ 0.2.2.6-alpha.
+ - Detect and reject attempts to specify both "FooPort" and
+ "FooPort 0" in the same configuration domain. (It's still okay
+ to have a FooPort in your configuration file, and use "FooPort 0"
+ on the command line to disable it.) Fixes the second half of bug
+ 6507; bugfix on 0.2.3.3-alpha.
+ - Make wildcarded addresses (that is, ones beginning with "*.") work
+ when provided via the controller's MapAddress command. Previously,
+ they were accepted, but we never actually noticed that they were
+ wildcards. Fixes bug 6244; bugfix on 0.2.3.9-alpha.
+ - Avoid crashing on a malformed state file where EntryGuardPathBias
+ precedes EntryGuard. Fix for bug 6774; bugfix on 0.2.3.17-beta.
+ - Add a (probably redundant) memory clear between iterations of
+ the router status voting loop, to prevent future coding errors
+ where data might leak between iterations of the loop. Resolves
+ ticket 6514.
+
+ o Minor bugfixes (log messages):
+ - Downgrade "set buildtimeout to low value" messages to "info"
+ severity; they were never an actual problem, there was never
+ anything reasonable to do about them, and they tended to spam logs
+ from time to time. Fixes bug 6251; bugfix on 0.2.2.2-alpha.
+ - Downgrade path-bias warning messages to "info". We'll try to get
+ them working better in 0.2.4. Add internal circuit construction
+ state to protect against the noisy warn message "Unexpectedly high
+ circuit_successes". Also add some additional rate-limited notice
+ messages to help determine the root cause of the warn. Fixes bug
+ 6475. Bugfix against 0.2.3.17-beta.
+ - Move log message when unable to find a microdesc in a routerstatus
+ entry to parse time. Previously we'd spam this warning every time
+ we tried to figure out which microdescriptors to download. Fixes
+ the third piece of bug 6404; fix on 0.2.3.18-rc.
+
+ o Minor features:
+ - Consider new, removed or changed IPv6 OR ports a non-cosmetic
+ change when the authority is deciding whether to accept a newly
+ uploaded descriptor. Implements ticket 6423.
+ - Add missing documentation for consensus and microdesc files.
+ Resolves ticket 6732.
+
+
+Changes in version 0.2.2.38 - 2012-08-12
+ Tor 0.2.2.38 fixes a remotely triggerable crash bug, and fixes a timing
+ attack that could in theory leak path information.
+
+ o Security fixes:
+ - Avoid an uninitialized memory read when reading a vote or consensus
+ document that has an unrecognized flavor name. This read could
+ lead to a remote crash bug. Fixes bug 6530; bugfix on 0.2.2.6-alpha.
+ - Try to leak less information about what relays a client is
+ choosing to a side-channel attacker. Previously, a Tor client would
+ stop iterating through the list of available relays as soon as it
+ had chosen one, thus finishing a little earlier when it picked
+ a router earlier in the list. If an attacker can recover this
+ timing information (nontrivial but not proven to be impossible),
+ they could learn some coarse-grained information about which relays
+ a client was picking (middle nodes in particular are likelier to
+ be affected than exits). The timing attack might be mitigated by
+ other factors (see bug 6537 for some discussion), but it's best
+ not to take chances. Fixes bug 6537; bugfix on 0.0.8rc1.
+
+
+Changes in version 0.2.3.20-rc - 2012-08-05
+ Tor 0.2.3.20-rc is the third release candidate for the Tor 0.2.3.x
+ series. It fixes a pair of code security bugs and a potential anonymity
+ issue, updates our RPM spec files, and cleans up other smaller issues.
+
+ o Security fixes:
+ - Avoid read-from-freed-memory and double-free bugs that could occur
+ when a DNS request fails while launching it. Fixes bug 6480;
+ bugfix on 0.2.0.1-alpha.
+ - Avoid an uninitialized memory read when reading a vote or consensus
+ document that has an unrecognized flavor name. This read could
+ lead to a remote crash bug. Fixes bug 6530; bugfix on 0.2.2.6-alpha.
+ - Try to leak less information about what relays a client is
+ choosing to a side-channel attacker. Previously, a Tor client would
+ stop iterating through the list of available relays as soon as it
+ had chosen one, thus finishing a little earlier when it picked
+ a router earlier in the list. If an attacker can recover this
+ timing information (nontrivial but not proven to be impossible),
+ they could learn some coarse-grained information about which relays
+ a client was picking (middle nodes in particular are likelier to
+ be affected than exits). The timing attack might be mitigated by
+ other factors (see bug 6537 for some discussion), but it's best
+ not to take chances. Fixes bug 6537; bugfix on 0.0.8rc1.
+
+ o Minor features:
+ - Try to make the warning when giving an obsolete SOCKSListenAddress
+ a little more useful.
+ - Terminate active server managed proxies if Tor stops being a
+ relay. Addresses parts of bug 6274; bugfix on 0.2.3.6-alpha.
+ - Provide a better error message about possible OSX Asciidoc failure
+ reasons. Fixes bug 6436.
+ - Warn when Tor is configured to use accounting in a way that can
+ link a hidden service to some other hidden service or public
+ address. Resolves ticket 6490.
+
+ o Minor bugfixes:
+ - Check return value of fputs() when writing authority certificate
+ file. Fixes Coverity issue 709056; bugfix on 0.2.0.1-alpha.
+ - Ignore ServerTransportPlugin lines when Tor is not configured as
+ a relay. Fixes bug 6274; bugfix on 0.2.3.6-alpha.
+ - When disabling guards for having too high a proportion of failed
+ circuits, make sure to look at each guard. Fixes bug 6397; bugfix
+ on 0.2.3.17-beta.
+
+ o Packaging (RPM):
+ - Update our default RPM spec files to work with mock and rpmbuild
+ on RHEL/Fedora. They have an updated set of dependencies and
+ conflicts, a fix for an ancient typo when creating the "_tor"
+ user, and better instructions. Thanks to Ondrej Mikle for the
+ patch series. Fixes bug 6043.
+
+ o Testing:
+ - Make it possible to set the TestingTorNetwork configuration
+ option using AlternateDirAuthority and AlternateBridgeAuthority
+ as an alternative to setting DirServer. Addresses ticket 6377.
+
+ o Documentation:
+ - Clarify the documentation for the Alternate*Authority options.
+ Fixes bug 6387.
+ - Fix some typos in the manpages. Patch from A. Costa. Fixes bug 6500.
+
+ o Code simplification and refactoring:
+ - Do not use SMARTLIST_FOREACH for any loop whose body exceeds
+ 10 lines. Also, don't nest them. Doing so in the past has
+ led to hard-to-debug code. The new style is to use the
+ SMARTLIST_FOREACH_{BEGIN,END} pair. Addresses issue 6400.
+
+
+Changes in version 0.2.3.19-rc - 2012-07-06
+ Tor 0.2.3.19-rc is the second release candidate for the Tor 0.2.3.x
+ series. It fixes the compile on Windows, reverts to a GeoIP database
+ that isn't as broken, and fixes a flow control bug that has been around
+ since the beginning of Tor.
+
+ o Major bugfixes:
+ - Fix a bug handling SENDME cells on nonexistent streams that could
+ result in bizarre window values. Report and patch contributed
+ pseudonymously. Fixes part of bug 6271. This bug was introduced
+ before the first Tor release, in svn commit r152.
+ - Revert to the May 1 2012 Maxmind GeoLite Country database. In the
+ June 2012 database, Maxmind marked many Tor relays as country "A1",
+ which will cause risky behavior for clients that set EntryNodes
+ or ExitNodes. Addresses bug 6334; bugfix on 0.2.3.17-beta.
+ - Instead of ENOBUFS on Windows, say WSAENOBUFS. Fixes compilation
+ on Windows. Fixes bug 6296; bugfix on 0.2.3.18-rc.
+
+ o Minor bugfixes:
+ - Fix wrong TCP port range in parse_port_range(). Fixes bug 6218;
+ bugfix on 0.2.1.10-alpha.
+
+
Changes in version 0.2.3.18-rc - 2012-06-28
Tor 0.2.3.18-rc is the first release candidate for the Tor 0.2.3.x
series. It fixes a few smaller bugs, but generally appears stable.
@@ -225,7 +3604,7 @@ Changes in version 0.2.3.16-alpha - 2012-06-05
indefinitely. Fixes bug 5380; bugfix on 0.2.1.14-rc.
- When fetching a bridge descriptor from a bridge authority,
always do so anonymously, whether we have been able to open
- circuits or not. Partial fix for bug 1938; bugfix on 2.0.7-alpha.
+ circuits or not. Partial fix for bug 1938; bugfix on 0.2.0.7-alpha.
This behavior makes it *safer* to use UpdateBridgesFromAuthority,
but we'll need to wait for bug 6010 before it's actually usable.
@@ -955,7 +4334,8 @@ Changes in version 0.2.3.11-alpha - 2012-01-22
FastFlagMaxThreshold) to control the range of allowable bandwidths
for the Fast directory flag. These allow authorities to run
experiments on appropriate requirements for being a "Fast" node.
- The AuthDirFastGuarantee config value still applies.
+ The AuthDirFastGuarantee config value still applies. Implements
+ ticket 3946.
- Document the GiveGuardFlagTo_CVE_2011_2768_VulnerableRelays
directory authority option (introduced in Tor 0.2.2.34).
@@ -1270,6 +4650,29 @@ Changes in version 0.2.2.35 - 2011-12-16
by removing an absolute path from makensis.exe command.
+Changes in version 0.2.1.32 - 2011-12-16
+ Tor 0.2.1.32 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.
+
+ The Tor 0.2.1.x series will reach formal end-of-life some time in
+ early 2012; we will stop releasing patches for it then.
+
+ o Major bugfixes (also included in 0.2.2.x):
+ - 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.
+ - Fix a heap overflow bug that could occur when trying to pull
+ data into the first chunk of a buffer, when that chunk had
+ already had some data drained from it. Fixes CVE-2011-2778;
+ bugfix on 0.2.0.16-alpha. Reported by "Vektor".
+
+ o Minor features:
+ - Update to the December 6 2011 Maxmind GeoLite Country database.
+
+
Changes in version 0.2.3.9-alpha - 2011-12-08
Tor 0.2.3.9-alpha introduces initial IPv6 support for bridges, adds
a "DisableNetwork" security feature that bundles can use to avoid
@@ -2034,7 +5437,7 @@ Changes in version 0.2.3.4-alpha - 2011-09-13
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
+ 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.
diff --git a/LICENSE b/LICENSE
index bf90e614a..4ebab1823 100644
--- a/LICENSE
+++ b/LICENSE
@@ -13,7 +13,7 @@ Tor is distributed under this license:
Copyright (c) 2001-2004, Roger Dingledine
Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson
-Copyright (c) 2007-2012, The Tor Project, Inc.
+Copyright (c) 2007-2013, The Tor Project, Inc.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
@@ -43,7 +43,7 @@ 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.
===============================================================================
-src/common/strlcat.c and src/common/strlcpy.c by Todd C. Miller are licensed
+src/ext/strlcat.c and src/ext/strlcpy.c by Todd C. Miller are licensed
under the following license:
* Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
@@ -70,6 +70,58 @@ under the following license:
* 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.
+===============================================================================
+src/ext/tor_queue.h is licensed under the following license:
+
+ * Copyright (c) 1991, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+
+===============================================================================
+src/ext/csiphash.c is licensed under the following license:
+
+ Copyright (c) 2013 Marek Majkowski <marek@popcount.org>
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
===============================================================================
src/config/geoip is licensed under the following license:
@@ -106,6 +158,39 @@ 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
DATABASE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
===============================================================================
+m4/pc_from_ucontext.m4 is available under the following license. Note that
+it is *not* built into the Tor license.
+
+Copyright (c) 2005, Google Inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+ * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+===============================================================================
If you got Tor as a static binary with OpenSSL included, then you should know:
"This product includes software developed by the OpenSSL Project
for use in the OpenSSL Toolkit (http://www.openssl.org/)"
diff --git a/Makefile.am b/Makefile.am
index 29bba715b..6eceb761f 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -4,22 +4,39 @@
# See LICENSE for licensing information
# "foreign" means we don't follow GNU package layout standards
-# 1.7 means we require automake vesion 1.7
-AUTOMAKE_OPTIONS = foreign 1.7
+# 1.9 means we require automake vesion 1.9
+AUTOMAKE_OPTIONS = foreign 1.9 subdir-objects
-SUBDIRS = src doc contrib
+ACLOCAL_AMFLAGS = -I m4
-DIST_SUBDIRS = src doc contrib
+noinst_LIBRARIES=
+EXTRA_DIST=
+noinst_HEADERS=
+bin_PROGRAMS=
+CLEANFILES=
+TESTS=
+noinst_PROGRAMS=
+DISTCLEANFILES=
+bin_SCRIPTS=
+AM_CPPFLAGS=
+include src/include.am
+include doc/include.am
+include contrib/include.am
-EXTRA_DIST = \
+
+EXTRA_DIST+= \
ChangeLog \
INSTALL \
LICENSE \
Makefile.nmake \
README \
- ReleaseNotes \
- tor.spec \
- tor.spec.in
+ ReleaseNotes
+
+if COVERAGE_ENABLED
+TEST_CFLAGS=-fno-inline -fprofile-arcs -ftest-coverage
+else
+TEST_CFLAGS=
+endif
#install-data-local:
# $(INSTALL) -m 755 -d $(LOCALSTATEDIR)/lib/tor
@@ -49,25 +66,29 @@ doxygen:
test: all
./src/test/test
+# Note that test-network requires a copy of Chutney in $CHUTNEY_PATH.
+# Chutney can be cloned from https://git.torproject.org/chutney.git .
+test-network: all
+ ./src/test/test-network.sh
+
+reset-gcov:
+ rm -f src/*/*.gcda
+
# Avoid strlcpy.c, strlcat.c, aes.c, OpenBSD_malloc_Linux.c, sha256.c,
# eventdns.[hc], tinytest*.[ch]
check-spaces:
- ./contrib/checkSpace.pl -C \
- src/common/*.h \
- src/common/[^asO]*.c \
- src/common/address.c \
- src/or/[^e]*.[ch] \
- src/or/eventdns_tor.h \
- src/test/test*.[ch] \
- src/test/[^t]*.[ch] \
+ ./scripts/maint/checkSpace.pl -C \
+ src/common/*.[ch] \
+ src/or/*.[ch] \
+ src/test/*.[ch] \
src/tools/*.[ch] \
src/tools/tor-fw-helper/*.[ch]
check-docs:
- ./contrib/checkOptionDocs.pl
+ ./scripts/maint/checkOptionDocs.pl
check-logs:
- ./contrib/checkLogs.pl \
+ ./scripts/maint/checkLogs.pl \
src/*/*.[ch] | sort -n
version:
@@ -77,3 +98,5 @@ version:
(cd "$(top_srcdir)" && git rev-parse --short=16 HEAD); \
fi
+mostlyclean-local:
+ rm -f src/*/*.gc{da,no}
diff --git a/Makefile.nmake b/Makefile.nmake
index 425f1ec26..a0a11ebdb 100644
--- a/Makefile.nmake
+++ b/Makefile.nmake
@@ -3,3 +3,13 @@ all:
$(MAKE) /F Makefile.nmake
cd ../../src/or
$(MAKE) /F Makefile.nmake
+ cd ../../src/test
+ $(MAKE) /F Makefile.nmake
+
+clean:
+ cd src/common
+ $(MAKE) /F Makefile.nmake clean
+ cd ../../src/or
+ $(MAKE) /F Makefile.nmake clean
+ cd ../../src/test
+ $(MAKE) /F Makefile.nmake clean
diff --git a/README b/README
index 812680ca3..b2a391aa6 100644
--- a/README
+++ b/README
@@ -22,3 +22,6 @@ Frequently Asked Questions:
https://www.torproject.org/faq.html
https://wiki.torproject.org/noreply/TheOnionRouter/TorFAQ
+
+To get started working on Tor development:
+ See the doc/HACKING file.
diff --git a/ReleaseNotes b/ReleaseNotes
index 93e38faf3..19185a296 100644
--- a/ReleaseNotes
+++ b/ReleaseNotes
@@ -3,6 +3,2343 @@ 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.4.22 - 2014-05-16
+ Tor 0.2.4.22 backports numerous high-priority fixes from the Tor 0.2.5
+ alpha release series. These include blocking all authority signing
+ keys that may have been affected by the OpenSSL "heartbleed" bug,
+ choosing a far more secure set of TLS ciphersuites by default, closing
+ a couple of memory leaks that could be used to run a target relay out
+ of RAM, and several others.
+
+ o Major features (security, backport from 0.2.5.4-alpha):
+ - Block authority signing keys that were used on authorities
+ vulnerable to the "heartbleed" bug in OpenSSL (CVE-2014-0160). (We
+ don't have any evidence that these keys _were_ compromised; we're
+ doing this to be prudent.) Resolves ticket 11464.
+
+ o Major bugfixes (security, OOM):
+ - Fix a memory leak that could occur if a microdescriptor parse
+ fails during the tokenizing step. This bug could enable a memory
+ exhaustion attack by directory servers. Fixes bug 11649; bugfix
+ on 0.2.2.6-alpha.
+
+ o Major bugfixes (TLS cipher selection, backport from 0.2.5.4-alpha):
+ - The relay ciphersuite list is now generated automatically based on
+ uniform criteria, and includes all OpenSSL ciphersuites with
+ acceptable strength and forward secrecy. Previously, we had left
+ some perfectly fine ciphersuites unsupported due to omission or
+ typo. Resolves bugs 11513, 11492, 11498, 11499. Bugs reported by
+ 'cypherpunks'. Bugfix on 0.2.4.8-alpha.
+ - Relays now trust themselves to have a better view than clients of
+ which TLS ciphersuites are better than others. (Thanks to bug
+ 11513, the relay list is now well-considered, whereas the client
+ list has been chosen mainly for anti-fingerprinting purposes.)
+ Relays prefer: AES over 3DES; then ECDHE over DHE; then GCM over
+ CBC; then SHA384 over SHA256 over SHA1; and last, AES256 over
+ AES128. Resolves ticket 11528.
+ - Clients now try to advertise the same list of ciphersuites as
+ Firefox 28. This change enables selection of (fast) GCM
+ ciphersuites, disables some strange old ciphers, and stops
+ advertising the ECDH (not to be confused with ECDHE) ciphersuites.
+ Resolves ticket 11438.
+
+ o Minor bugfixes (configuration, security):
+ - When running a hidden service, do not allow TunneledDirConns 0:
+ trying to set that option together with a hidden service would
+ otherwise prevent the hidden service from running, and also make
+ it publish its descriptors directly over HTTP. Fixes bug 10849;
+ bugfix on 0.2.1.1-alpha.
+
+ o Minor bugfixes (controller, backport from 0.2.5.4-alpha):
+ - Avoid sending a garbage value to the controller when a circuit is
+ cannibalized. Fixes bug 11519; bugfix on 0.2.3.11-alpha.
+
+ o Minor bugfixes (exit relay, backport from 0.2.5.4-alpha):
+ - Stop leaking memory when we successfully resolve a PTR record.
+ Fixes bug 11437; bugfix on 0.2.4.7-alpha.
+
+ o Minor bugfixes (bridge client, backport from 0.2.5.4-alpha):
+ - Avoid 60-second delays in the bootstrapping process when Tor is
+ launching for a second time while using bridges. Fixes bug 9229;
+ bugfix on 0.2.0.3-alpha.
+
+ o Minor bugfixes (relays and bridges, backport from 0.2.5.4-alpha):
+ - Give the correct URL in the warning message when trying to run a
+ relay on an ancient version of Windows. Fixes bug 9393.
+
+ o Minor bugfixes (compilation):
+ - Fix a compilation error when compiling with --disable-curve25519.
+ Fixes bug 9700; bugfix on 0.2.4.17-rc.
+
+ o Minor bugfixes:
+ - Downgrade the warning severity for the the "md was still
+ referenced 1 node(s)" warning. Tor 0.2.5.4-alpha has better code
+ for trying to diagnose this bug, and the current warning in
+ earlier versions of tor achieves nothing useful. Addresses warning
+ from bug 7164.
+
+ o Minor features (log verbosity, backport from 0.2.5.4-alpha):
+ - When we run out of usable circuit IDs on a channel, log only one
+ warning for the whole channel, and describe how many circuits
+ there were on the channel. Fixes part of ticket 11553.
+
+ o Minor features (security, backport from 0.2.5.4-alpha):
+ - Decrease the lower limit of MaxMemInCellQueues to 256 MBytes (but
+ leave the default at 8GBytes), to better support Raspberry Pi
+ users. Fixes bug 9686; bugfix on 0.2.4.14-alpha.
+
+ o Documentation (backport from 0.2.5.4-alpha):
+ - Correctly document that we search for a system torrc file before
+ looking in ~/.torrc. Fixes documentation side of 9213; bugfix on
+ 0.2.3.18-rc.
+
+
+Changes in version 0.2.4.21 - 2014-02-28
+ Tor 0.2.4.21 further improves security against potential adversaries who
+ find breaking 1024-bit crypto doable, and backports several stability
+ and robustness patches from the 0.2.5 branch.
+
+ o Major features (client security):
+ - When we choose a path for a 3-hop circuit, make sure it contains
+ at least one relay that supports the NTor circuit extension
+ handshake. Otherwise, there is a chance that we're building
+ a circuit that's worth attacking by an adversary who finds
+ breaking 1024-bit crypto doable, and that chance changes the game
+ theory. Implements ticket 9777.
+
+ o Major bugfixes:
+ - Do not treat streams that fail with reason
+ END_STREAM_REASON_INTERNAL as indicating a definite circuit failure,
+ since it could also indicate an ENETUNREACH connection error. Fixes
+ part of bug 10777; bugfix on 0.2.4.8-alpha.
+
+ o Code simplification and refactoring:
+ - Remove data structures which were introduced to implement the
+ CellStatistics option: they are now redundant with the new timestamp
+ field in the regular packed_cell_t data structure, which we did
+ in 0.2.4.18-rc in order to resolve bug 9093. Resolves ticket 10870.
+
+ o Minor features:
+ - Always clear OpenSSL bignums before freeing them -- even bignums
+ that don't contain secrets. Resolves ticket 10793. Patch by
+ Florent Daigniere.
+ - Build without warnings under clang 3.4. (We have some macros that
+ define static functions only some of which will get used later in
+ the module. Starting with clang 3.4, these give a warning unless the
+ unused attribute is set on them.) Resolves ticket 10904.
+ - Update geoip and geoip6 files to the February 7 2014 Maxmind
+ GeoLite2 Country database.
+
+ o Minor bugfixes:
+ - Set the listen() backlog limit to the largest actually supported
+ on the system, not to the value in a header file. Fixes bug 9716;
+ bugfix on every released Tor.
+ - Treat ENETUNREACH, EACCES, and EPERM connection failures at an
+ exit node as a NOROUTE error, not an INTERNAL error, since they
+ can apparently happen when trying to connect to the wrong sort
+ of netblocks. Fixes part of bug 10777; bugfix on 0.1.0.1-rc.
+ - Fix build warnings about missing "a2x" comment when building the
+ manpages from scratch on OpenBSD; OpenBSD calls it "a2x.py".
+ Fixes bug 10929; bugfix on 0.2.2.9-alpha. Patch from Dana Koch.
+ - Avoid a segfault on SIGUSR1, where we had freed a connection but did
+ not entirely remove it from the connection lists. Fixes bug 9602;
+ bugfix on 0.2.4.4-alpha.
+ - Fix a segmentation fault in our benchmark code when running with
+ Fedora's OpenSSL package, or any other OpenSSL that provides
+ ECDH but not P224. Fixes bug 10835; bugfix on 0.2.4.8-alpha.
+ - Turn "circuit handshake stats since last time" log messages into a
+ heartbeat message. Fixes bug 10485; bugfix on 0.2.4.17-rc.
+
+ o Documentation fixes:
+ - Document that all but one DirPort entry must have the NoAdvertise
+ flag set. Fixes bug 10470; bugfix on 0.2.3.3-alpha / 0.2.3.16-alpha.
+
+
+Changes in version 0.2.4.20 - 2013-12-22
+ Tor 0.2.4.20 fixes potentially poor random number generation for users
+ who 1) use OpenSSL 1.0.0 or later, 2) set "HardwareAccel 1" in their
+ torrc file, 3) have "Sandy Bridge" or "Ivy Bridge" Intel processors,
+ and 4) have no state file in their DataDirectory (as would happen on
+ first start). Users who generated relay or hidden service identity
+ keys in such a situation should discard them and generate new ones.
+
+ This release also fixes a logic error that caused Tor clients to build
+ many more preemptive circuits than they actually need.
+
+ o Major bugfixes:
+ - Do not allow OpenSSL engines to replace the PRNG, even when
+ HardwareAccel is set. The only default builtin PRNG engine uses
+ the Intel RDRAND instruction to replace the entire PRNG, and
+ ignores all attempts to seed it with more entropy. That's
+ cryptographically stupid: the right response to a new alleged
+ entropy source is never to discard all previously used entropy
+ sources. Fixes bug 10402; works around behavior introduced in
+ OpenSSL 1.0.0. Diagnosis and investigation thanks to "coderman"
+ and "rl1987".
+ - Fix assertion failure when AutomapHostsOnResolve yields an IPv6
+ address. Fixes bug 10465; bugfix on 0.2.4.7-alpha.
+ - Avoid launching spurious extra circuits when a stream is pending.
+ This fixes a bug where any circuit that _wasn't_ unusable for new
+ streams would be treated as if it were, causing extra circuits to
+ be launched. Fixes bug 10456; bugfix on 0.2.4.12-alpha.
+
+ o Minor bugfixes:
+ - Avoid a crash bug when starting with a corrupted microdescriptor
+ cache file. Fixes bug 10406; bugfix on 0.2.2.6-alpha.
+ - If we fail to dump a previously cached microdescriptor to disk, avoid
+ freeing duplicate data later on. Fixes bug 10423; bugfix on
+ 0.2.4.13-alpha. Spotted by "bobnomnom".
+
+
+Changes in version 0.2.4.19 - 2013-12-11
+ The Tor 0.2.4 release series is dedicated to the memory of Aaron Swartz
+ (1986-2013). Aaron worked on diverse projects including helping to guide
+ Creative Commons, playing a key role in stopping SOPA/PIPA, bringing
+ transparency to the U.S government's PACER documents, and contributing
+ design and development for Tor and Tor2Web. Aaron was one of the latest
+ martyrs in our collective fight for civil liberties and human rights,
+ and his death is all the more painful because he was one of us.
+
+ Tor 0.2.4.19, the first stable release in the 0.2.4 branch, features
+ a new circuit handshake and link encryption that use ECC to provide
+ better security and efficiency; makes relays better manage circuit
+ creation requests; uses "directory guards" to reduce client enumeration
+ risks; makes bridges collect and report statistics about the pluggable
+ transports they support; cleans up and improves our geoip database;
+ gets much closer to IPv6 support for clients, bridges, and relays; makes
+ directory authorities use measured bandwidths rather than advertised
+ ones when computing flags and thresholds; disables client-side DNS
+ caching to reduce tracking risks; and fixes a big bug in bridge
+ reachability testing. This release introduces two new design
+ abstractions in the code: a new "channel" abstraction between circuits
+ and or_connections to allow for implementing alternate relay-to-relay
+ transports, and a new "circuitmux" abstraction storing the queue of
+ circuits for a channel. The release also includes many stability,
+ security, and privacy fixes.
+
+ o Major features (new circuit handshake):
+ - Tor now supports a new circuit extension handshake designed by Ian
+ Goldberg, Douglas Stebila, and Berkant Ustaoglu. Our original
+ circuit extension handshake, later called "TAP", was a bit slow
+ (especially on the relay side), had a fragile security proof, and
+ used weaker keys than we'd now prefer. The new circuit handshake
+ uses Dan Bernstein's "curve25519" elliptic-curve Diffie-Hellman
+ function, making it significantly more secure than the older
+ handshake, and significantly faster. Tor can use one of two built-in
+ pure-C curve25519-donna implementations by Adam Langley, or it
+ can link against the "nacl" library for a tuned version if present.
+
+ The built-in version is very fast for 64-bit systems when building
+ with GCC. The built-in 32-bit version is still faster than the
+ old TAP protocol, but using libnacl is better on most such hosts.
+
+ Implements proposal 216; closes ticket 7202.
+
+ o Major features (better link encryption):
+ - Relays can now enable the ECDHE TLS ciphersuites when available
+ and appropriate. These ciphersuites let us negotiate forward-secure
+ TLS secret keys more safely and more efficiently than with our
+ previous use of Diffie-Hellman modulo a 1024-bit prime. By default,
+ public relays prefer the (faster) P224 group, and bridges prefer
+ the (more common) P256 group; you can override this with the
+ TLSECGroup option.
+
+ This feature requires clients running 0.2.3.17-beta or later,
+ and requires both sides to be running OpenSSL 1.0.0 or later
+ with ECC support. OpenSSL 1.0.1, with the compile-time option
+ "enable-ec_nistp_64_gcc_128", is highly recommended.
+
+ Implements the relay side of proposal 198; closes ticket 7200.
+
+ - Re-enable TLS 1.1 and 1.2 when built with OpenSSL 1.0.1e or later.
+ Resolves ticket 6055. (OpenSSL before 1.0.1 didn't have TLS 1.1 or
+ 1.2, and OpenSSL from 1.0.1 through 1.0.1d had bugs that prevented
+ renegotiation from working with TLS 1.1 or 1.2, so we had disabled
+ them to solve bug 6033.)
+
+ o Major features (relay performance):
+ - Instead of limiting the number of queued onionskins (aka circuit
+ create requests) to a fixed, hard-to-configure number, we limit
+ the size of the queue based on how many we expect to be able to
+ process in a given amount of time. We estimate the time it will
+ take to process an onionskin based on average processing time
+ of previous onionskins. Closes ticket 7291. You'll never have to
+ configure MaxOnionsPending again.
+ - Relays process the new "NTor" circuit-level handshake requests
+ with higher priority than the old "TAP" circuit-level handshake
+ requests. We still process some TAP requests to not totally starve
+ 0.2.3 clients when NTor becomes popular. A new consensus parameter
+ "NumNTorsPerTAP" lets us tune the balance later if we need to.
+ Implements ticket 9574.
+
+ o Major features (client bootstrapping resilience):
+ - Add a new "FallbackDir" torrc option to use when we can't use
+ a directory mirror from the consensus (either because we lack a
+ consensus, or because they're all down). Currently, all authorities
+ are fallbacks by default, and there are no other default fallbacks,
+ but that will change. This option will allow us to give clients a
+ longer list of servers to try to get a consensus from when first
+ connecting to the Tor network, and thereby reduce load on the
+ directory authorities. Implements proposal 206, "Preconfigured
+ directory sources for bootstrapping". We also removed the old
+ "FallbackNetworkstatus" option, since we never got it working well
+ enough to use it. Closes bug 572.
+ - If we have no circuits open, use a relaxed timeout (the
+ 95th-percentile cutoff) until a circuit succeeds. This heuristic
+ should allow Tor to succeed at building circuits even when the
+ network connection drastically changes. Should help with bug 3443.
+
+ o Major features (use of guards):
+ - Support directory guards (proposal 207): when possible, clients now
+ use their entry guards for non-anonymous directory requests. This
+ can help prevent client enumeration. Note that this behavior only
+ works when we have a usable consensus directory, and when options
+ about what to download are more or less standard. In the future we
+ should re-bootstrap from our guards, rather than re-bootstrapping
+ from the preconfigured list of directory sources that ships with
+ Tor. Resolves ticket 6526.
+ - Raise the default time that a client keeps an entry guard from
+ "1-2 months" to "2-3 months", as suggested by Tariq Elahi's WPES
+ 2012 paper. (We would make it even longer, but we need better client
+ load balancing first.) Also, make the guard lifetime controllable
+ via a new GuardLifetime torrc option and a GuardLifetime consensus
+ parameter. Start of a fix for bug 8240; bugfix on 0.1.1.11-alpha.
+
+ o Major features (bridges with pluggable transports):
+ - Bridges now report the pluggable transports they support to the
+ bridge authority, so it can pass the supported transports on to
+ bridgedb and/or eventually do reachability testing. Implements
+ ticket 3589.
+ - Automatically forward the TCP ports of pluggable transport
+ proxies using tor-fw-helper if PortForwarding is enabled. Implements
+ ticket 4567.
+
+ o Major features (geoip database):
+ - Maxmind began labelling Tor relays as being in country "A1",
+ which breaks by-country node selection inside Tor. Now we use a
+ script to replace "A1" ("Anonymous Proxy") entries in our geoip
+ file with real country codes. This script fixes about 90% of "A1"
+ entries automatically and uses manual country code assignments to
+ fix the remaining 10%. See src/config/README.geoip for details.
+ Fixes bug 6266.
+ - Add GeoIP database for IPv6 addresses. The new config option
+ is GeoIPv6File.
+ - Update to the October 2 2013 Maxmind GeoLite Country database.
+
+ o Major features (IPv6):
+ - Clients who set "ClientUseIPv6 1" may connect to entry nodes over
+ IPv6. Set "ClientPreferIPv6ORPort 1" to make this even more likely
+ to happen. Implements ticket 5535.
+ - All kind of relays, not just bridges, can now advertise an IPv6
+ OR port. Implements ticket 6362.
+ - Relays can now exit to IPv6 addresses: make sure that you have IPv6
+ connectivity, then set the IPv6Exit flag to 1. Also make sure your
+ exit policy reads as you would like: the address * applies to all
+ address families, whereas *4 is IPv4 address only, and *6 is IPv6
+ addresses only. On the client side, you'll need to wait for enough
+ exits to support IPv6, apply the "IPv6Traffic" flag to a SocksPort,
+ and use Socks5. Closes ticket 5547, implements proposal 117 as
+ revised in proposal 208.
+ - Bridge authorities now accept IPv6 bridge addresses and include
+ them in network status documents. Implements ticket 5534.
+ - Directory authorities vote on IPv6 OR ports. Implements ticket 6363.
+
+ o Major features (directory authorities):
+ - Directory authorities now prefer using measured bandwidths to
+ advertised ones when computing flags and thresholds. Resolves
+ ticket 8273.
+ - Directory authorities that vote measured bandwidths about more
+ than a threshold number of relays now treat relays with
+ unmeasured bandwidths as having bandwidth 0 when computing their
+ flags. Resolves ticket 8435.
+ - Directory authorities now support a new consensus method (17)
+ where they cap the published bandwidth of relays for which
+ insufficient bandwidth measurements exist. Fixes part of bug 2286.
+ - Directory authorities that set "DisableV2DirectoryInfo_ 1" no longer
+ serve any v2 directory information. Now we can test disabling the
+ old deprecated v2 directory format, and see whether doing so has
+ any effect on network load. Begins to fix bug 6783.
+
+ o Major features (build and portability):
+ - Switch to a nonrecursive Makefile structure. Now instead of each
+ Makefile.am invoking other Makefile.am's, there is a master
+ Makefile.am that includes the others. This change makes our build
+ process slightly more maintainable, and improves parallelism for
+ building with make -j. Original patch by Stewart Smith; various
+ fixes by Jim Meyering.
+ - Where available, we now use automake's "silent" make rules by
+ default, so that warnings are easier to spot. You can get the old
+ behavior with "make V=1". Patch by Stewart Smith for ticket 6522.
+ - Resume building correctly with MSVC and Makefile.nmake. This patch
+ resolves numerous bugs and fixes reported by ultramage, including
+ 7305, 7308, 7309, 7310, 7312, 7313, 7315, 7316, and 7669.
+
+ o Security features:
+ - Switch to a completely time-invariant approach for picking nodes
+ weighted by bandwidth. Our old approach would run through the
+ part of the loop after it had made its choice slightly slower
+ than it ran through the part of the loop before it had made its
+ choice. Addresses ticket 6538.
+ - Disable the use of Guard nodes when in Tor2WebMode. Guard usage
+ by tor2web clients allows hidden services to identify tor2web
+ clients through their repeated selection of the same rendezvous
+ and introduction point circuit endpoints (their guards). Resolves
+ ticket 6888.
+
+ o Major bugfixes (relay denial of service):
+ - When we have too much memory queued in circuits (according to a new
+ MaxMemInCellQueues option), close the circuits that have the oldest
+ queued cells, on the theory that those are most responsible for
+ us running low on memory. This prevents us from running out of
+ memory as a relay if circuits fill up faster than they can be
+ drained. Fixes bugs 9063 and 9093; bugfix on the 54th commit of
+ Tor. This bug is a further fix beyond bug 6252, whose fix was
+ merged into 0.2.3.21-rc.
+ - Reject bogus create and relay cells with 0 circuit ID or 0 stream
+ ID: these could be used to create unexpected streams and circuits
+ which would count as "present" to some parts of Tor but "absent"
+ to others, leading to zombie circuits and streams or to a bandwidth
+ denial-of-service. Fixes bug 7889; bugfix on every released version
+ of Tor. Reported by "oftc_must_be_destroyed".
+ - Avoid a bug where our response to TLS renegotiation under certain
+ network conditions could lead to a busy-loop, with 100% CPU
+ consumption. Fixes bug 5650; bugfix on 0.2.0.16-alpha.
+
+ o Major bugfixes (asserts, crashes, leaks):
+ - Prevent the get_freelists() function from running off the end of
+ the list of freelists if it somehow gets an unrecognized
+ allocation. Fixes bug 8844; bugfix on 0.2.0.16-alpha. Reported by
+ eugenis.
+ - Avoid a memory leak where we would leak a consensus body when we
+ find that a consensus which we couldn't previously verify due to
+ missing certificates is now verifiable. Fixes bug 8719; bugfix
+ on 0.2.0.10-alpha.
+ - If we are unable to save a microdescriptor to the journal, do not
+ drop it from memory and then reattempt downloading it. Fixes bug
+ 9645; bugfix on 0.2.2.6-alpha.
+ - Fix an assertion failure that would occur when disabling the
+ ORPort setting on a running Tor process while accounting was
+ enabled. Fixes bug 6979; bugfix on 0.2.2.18-alpha.
+ - Avoid an assertion failure on OpenBSD (and perhaps other BSDs)
+ when an exit connection with optimistic data succeeds immediately
+ rather than returning EINPROGRESS. Fixes bug 9017; bugfix on
+ 0.2.3.1-alpha.
+ - Fix a memory leak that would occur whenever a configuration
+ option changed. Fixes bug 8718; bugfix on 0.2.3.3-alpha.
+
+ o Major bugfixes (relay rate limiting):
+ - When a TLS write is partially successful but incomplete, remember
+ that the flushed part has been flushed, and notice that bytes were
+ actually written. Reported and fixed pseudonymously. Fixes bug 7708;
+ bugfix on Tor 0.1.0.5-rc.
+ - Raise the default BandwidthRate/BandwidthBurst values from 5MB/10MB
+ to 1GB/1GB. The previous defaults were intended to be "basically
+ infinite", but it turns out they're now limiting our 100mbit+
+ relays and bridges. Fixes bug 6605; bugfix on 0.2.0.10-alpha (the
+ last time we raised it).
+ - No longer stop reading or writing on cpuworker connections when
+ our rate limiting buckets go empty. Now we should handle circuit
+ handshake requests more promptly. Resolves bug 9731.
+
+ o Major bugfixes (client-side privacy):
+ - When we mark a circuit as unusable for new circuits, have it
+ continue to be unusable for new circuits even if MaxCircuitDirtiness
+ is increased too much at the wrong time, or the system clock jumps
+ backwards. Fixes bug 6174; bugfix on 0.0.2pre26.
+ - If ClientDNSRejectInternalAddresses ("do not believe DNS queries
+ which have resolved to internal addresses") is set, apply that
+ rule to IPv6 as well. Fixes bug 8475; bugfix on 0.2.0.7-alpha.
+ - When an exit relay rejects a stream with reason "exit policy", but
+ we only know an exit policy summary (e.g. from the microdesc
+ consensus) for it, do not mark the relay as useless for all exiting.
+ Instead, mark just the circuit as unsuitable for that particular
+ address. Fixes part of bug 7582; bugfix on 0.2.3.2-alpha.
+
+ o Major bugfixes (stream isolation):
+ - Allow applications to get proper stream isolation with
+ IsolateSOCKSAuth. Many SOCKS5 clients that want to offer
+ username/password authentication also offer "no authentication". Tor
+ had previously preferred "no authentication", so the applications
+ never actually sent Tor their auth details. Now Tor selects
+ username/password authentication if it's offered. You can disable
+ this behavior on a per-SOCKSPort basis via PreferSOCKSNoAuth. Fixes
+ bug 8117; bugfix on 0.2.3.3-alpha.
+ - Follow the socks5 protocol when offering username/password
+ authentication. The fix for bug 8117 exposed this bug, and it
+ turns out real-world applications like Pidgin do care. Bugfix on
+ 0.2.3.2-alpha; fixes bug 8879.
+
+ o Major bugfixes (client circuit building):
+ - Alter circuit build timeout measurement to start at the point
+ where we begin the CREATE/CREATE_FAST step (as opposed to circuit
+ initialization). This should make our timeout measurements more
+ uniform. Previously, we were sometimes including ORconn setup time
+ in our circuit build time measurements. Should resolve bug 3443.
+ - If the circuit build timeout logic is disabled (via the consensus,
+ or because we are an authority), then don't build testing circuits.
+ Fixes bug 9657; bugfix on 0.2.2.14-alpha.
+
+ o Major bugfixes (client-side DNS):
+ - Turn off the client-side DNS cache by default. Updating and using
+ the DNS cache is now configurable on a per-client-port
+ level. SOCKSPort, DNSPort, etc lines may now contain
+ {No,}Cache{IPv4,IPv6,}DNS lines to indicate that we shouldn't
+ cache these types of DNS answers when we receive them from an
+ exit node in response to an application request on this port, and
+ {No,}UseCached{IPv4,IPv6,DNS} lines to indicate that if we have
+ cached DNS answers of these types, we shouldn't use them. It's
+ potentially risky to use cached DNS answers at the client, since
+ doing so can indicate to one exit what answers we've gotten
+ for DNS lookups in the past. With IPv6, this becomes especially
+ problematic. Using cached DNS answers for requests on the same
+ circuit would present less linkability risk, since all traffic
+ on a circuit is already linkable, but it would also provide
+ little performance benefit: the exit node caches DNS replies
+ too. Implements a simplified version of Proposal 205. Implements
+ ticket 7570.
+
+ o Major bugfixes (hidden service privacy):
+ - Limit hidden service descriptors to at most ten introduction
+ points, to slow one kind of guard enumeration. Fixes bug 9002;
+ bugfix on 0.1.1.11-alpha.
+
+ o Major bugfixes (directory fetching):
+ - If the time to download the next old-style networkstatus is in
+ the future, do not decline to consider whether to download the
+ next microdescriptor networkstatus. Fixes bug 9564; bugfix on
+ 0.2.3.14-alpha.
+ - We used to always request authority certificates by identity digest,
+ meaning we'd get the newest one even when we wanted one with a
+ different signing key. Then we would complain about being given
+ a certificate we already had, and never get the one we really
+ wanted. Now we use the "fp-sk/" resource as well as the "fp/"
+ resource to request the one we want. Fixes bug 5595; bugfix on
+ 0.2.0.8-alpha.
+
+ o Major bugfixes (bridge reachability):
+ - Bridges now send AUTH_CHALLENGE cells during their v3 handshakes;
+ previously they did not, which prevented them from receiving
+ successful connections from relays for self-test or bandwidth
+ testing. Also, when a relay is extending a circuit to a bridge,
+ it needs to send a NETINFO cell, even when the bridge hasn't sent
+ an AUTH_CHALLENGE cell. Fixes bug 9546; bugfix on 0.2.3.6-alpha.
+
+ o Major bugfixes (control interface):
+ - When receiving a new configuration file via the control port's
+ LOADCONF command, do not treat the defaults file as absent.
+ Fixes bug 9122; bugfix on 0.2.3.9-alpha.
+
+ o Major bugfixes (directory authorities):
+ - Stop marking every relay as having been down for one hour every
+ time we restart a directory authority. These artificial downtimes
+ were messing with our Stable and Guard flag calculations. Fixes
+ bug 8218 (introduced by the fix for 1035). Bugfix on 0.2.2.23-alpha.
+ - When computing directory thresholds, ignore any rejected-as-sybil
+ nodes during the computation so that they can't influence Fast,
+ Guard, etc. (We should have done this for proposal 109.) Fixes
+ bug 8146.
+ - When marking a node as a likely sybil, reset its uptime metrics
+ to zero, so that it cannot time towards getting marked as Guard,
+ Stable, or HSDir. (We should have done this for proposal 109.) Fixes
+ bug 8147.
+ - Fix a bug in the voting algorithm that could yield incorrect results
+ when a non-naming authority declared too many flags. Fixes bug 9200;
+ bugfix on 0.2.0.3-alpha.
+
+ o Internal abstraction features:
+ - Introduce new channel_t abstraction between circuits and
+ or_connection_t to allow for implementing alternate OR-to-OR
+ transports. A channel_t is an abstract object which can either be a
+ cell-bearing channel, which is responsible for authenticating and
+ handshaking with the remote OR and transmitting cells to and from
+ it, or a listening channel, which spawns new cell-bearing channels
+ at the request of remote ORs. Implements part of ticket 6465.
+ - Make a channel_tls_t subclass of channel_t, adapting it to the
+ existing or_connection_t code. The V2/V3 protocol handshaking
+ code which formerly resided in command.c has been moved below the
+ channel_t abstraction layer and may be found in channeltls.c now.
+ Implements the rest of ticket 6465.
+ - Introduce new circuitmux_t storing the queue of circuits for
+ a channel; this encapsulates and abstracts the queue logic and
+ circuit selection policy, and allows the latter to be overridden
+ easily by switching out a policy object. The existing EWMA behavior
+ is now implemented as a circuitmux_policy_t. Resolves ticket 6816.
+
+ o New build requirements:
+ - Tor now requires OpenSSL 0.9.8 or later. OpenSSL 1.0.0 or later is
+ strongly recommended.
+ - Tor maintainers now require Automake version 1.9 or later to build
+ Tor from the Git repository. (Automake is not required when building
+ from a source distribution.)
+
+ o Minor features (protocol):
+ - No longer include the "opt" prefix when generating routerinfos
+ or v2 directories: it has been needless since Tor 0.1.2. Closes
+ ticket 5124.
+ - Reject EXTEND cells sent to nonexistent streams. According to the
+ spec, an EXTEND cell sent to _any_ nonzero stream ID is invalid, but
+ we were only checking for stream IDs that were currently in use.
+ Found while hunting for more instances of bug 6271. Bugfix on
+ 0.0.2pre8, which introduced incremental circuit construction.
+ - Tor relays and clients now support a better CREATE/EXTEND cell
+ format, allowing the sender to specify multiple address, identity,
+ and handshake types. Implements Robert Ransom's proposal 200;
+ closes ticket 7199.
+ - Reject as invalid most directory objects containing a NUL.
+ Belt-and-suspender fix for bug 8037.
+
+ o Minor features (security):
+ - Clear keys and key-derived material left on the stack in
+ rendservice.c and rendclient.c. Check return value of
+ crypto_pk_write_private_key_to_string() in rend_service_load_keys().
+ These fixes should make us more forward-secure against cold-boot
+ attacks and the like. Fixes bug 2385.
+ - Use our own weak RNG when we need a weak RNG. Windows's rand() and
+ Irix's random() only return 15 bits; Solaris's random() returns more
+ bits but its RAND_MAX says it only returns 15, and so on. Motivated
+ by the fix for bug 7801; bugfix on 0.2.2.20-alpha.
+
+ o Minor features (control protocol):
+ - Add a "GETINFO signal/names" control port command. Implements
+ ticket 3842.
+ - Provide default values for all options via "GETINFO config/defaults".
+ Implements ticket 4971.
+ - Allow an optional $ before the node identity digest in the
+ controller command GETINFO ns/id/<identity>, for consistency with
+ md/id/<identity> and desc/id/<identity>. Resolves ticket 7059.
+ - Add CACHED keyword to ADDRMAP events in the control protocol
+ to indicate whether a DNS result will be cached or not. Resolves
+ ticket 8596.
+ - Generate bootstrapping status update events correctly when fetching
+ microdescriptors. Fixes bug 9927.
+
+ o Minor features (path selection):
+ - When deciding whether we have enough descriptors to build circuits,
+ instead of looking at raw relay counts, look at which fraction
+ of (bandwidth-weighted) paths we're able to build. This approach
+ keeps clients from building circuits if their paths are likely to
+ stand out statistically. The default fraction of paths needed is
+ taken from the consensus directory; you can override it with the
+ new PathsNeededToBuildCircuits option. Fixes ticket 5956.
+ - When any country code is listed in ExcludeNodes or ExcludeExitNodes,
+ and we have GeoIP information, also exclude all nodes with unknown
+ countries "??" and "A1". This behavior is controlled by the
+ new GeoIPExcludeUnknown option: you can make such nodes always
+ excluded with "GeoIPExcludeUnknown 1", and disable the feature
+ with "GeoIPExcludeUnknown 0". Setting "GeoIPExcludeUnknown auto"
+ gets you the default behavior. Implements feature 7706.
+
+ o Minor features (hidden services):
+ - Improve circuit build timeout handling for hidden services.
+ In particular: adjust build timeouts more accurately depending
+ upon the number of hop-RTTs that a particular circuit type
+ undergoes. Additionally, launch intro circuits in parallel
+ if they timeout, and take the first one to reply as valid.
+ - The Tor client now ignores sub-domain components of a .onion
+ address. This change makes HTTP "virtual" hosting
+ possible: http://foo.aaaaaaaaaaaaaaaa.onion/ and
+ http://bar.aaaaaaaaaaaaaaaa.onion/ can be two different websites
+ hosted on the same hidden service. Implements proposal 204.
+ - Enable Tor to read configuration, state, and key information from
+ a FIFO. Previously Tor would only read from files with a positive
+ stat.st_size. Code from meejah; fixes bug 6044.
+
+ o Minor features (clients):
+ - Teach bridge-using clients to avoid 0.2.2.x bridges when making
+ microdescriptor-related dir requests, and only fall back to normal
+ descriptors if none of their bridges can handle microdescriptors
+ (as opposed to the fix in ticket 4013, which caused them to fall
+ back to normal descriptors if *any* of their bridges preferred
+ them). Resolves ticket 4994.
+ - Tweak tor-fw-helper to accept an arbitrary amount of arbitrary
+ TCP ports to forward. In the past it only accepted two ports:
+ the ORPort and the DirPort.
+
+ o Minor features (protecting client timestamps):
+ - Clients no longer send timestamps in their NETINFO cells. These were
+ not used for anything, and they provided one small way for clients
+ to be distinguished from each other as they moved from network to
+ network or behind NAT. Implements part of proposal 222.
+ - Clients now round timestamps in INTRODUCE cells down to the nearest
+ 10 minutes. If a new Support022HiddenServices option is set to 0, or
+ if it's set to "auto" and the feature is disabled in the consensus,
+ the timestamp is sent as 0 instead. Implements part of proposal 222.
+ - Stop sending timestamps in AUTHENTICATE cells. This is not such
+ a big deal from a security point of view, but it achieves no actual
+ good purpose, and isn't needed. Implements part of proposal 222.
+ - Reduce down accuracy of timestamps in hidden service descriptors.
+ Implements part of proposal 222.
+
+ o Minor features (bridges):
+ - Make bridge relays check once a minute for whether their IP
+ address has changed, rather than only every 15 minutes. Resolves
+ bugs 1913 and 1992.
+ - Bridge statistics now count bridge clients connecting over IPv6:
+ bridge statistics files now list "bridge-ip-versions" and
+ extra-info documents list "geoip6-db-digest". The control protocol
+ "CLIENTS_SEEN" and "ip-to-country" queries now support IPv6. Initial
+ implementation by "shkoo", addressing ticket 5055.
+ - Add a new torrc option "ServerTransportListenAddr" to let bridge
+ operators select the address where their pluggable transports will
+ listen for connections. Resolves ticket 7013.
+ - Randomize the lifetime of our SSL link certificate, so censors can't
+ use the static value for filtering Tor flows. Resolves ticket 8443;
+ related to ticket 4014 which was included in 0.2.2.33.
+
+ o Minor features (relays):
+ - Option OutboundBindAddress can be specified multiple times and
+ accepts IPv6 addresses. Resolves ticket 6876.
+
+ o Minor features (IPv6, client side):
+ - AutomapHostsOnResolve now supports IPv6 addresses. By default, we
+ prefer to hand out virtual IPv6 addresses, since there are more of
+ them and we can't run out. To override this behavior and make IPv4
+ addresses preferred, set NoPreferIPv6Automap on whatever SOCKSPort
+ or DNSPort you're using for resolving. Implements ticket 7571.
+ - AutomapHostsOnResolve responses are now randomized, to avoid
+ annoying situations where Tor is restarted and applications
+ connect to the wrong addresses.
+ - Never try more than 1000 times to pick a new virtual address when
+ AutomapHostsOnResolve is set. That's good enough so long as we
+ aren't close to handing out our entire virtual address space;
+ if you're getting there, it's best to switch to IPv6 virtual
+ addresses anyway.
+
+ o Minor features (IPv6, relay/authority side):
+ - New config option "AuthDirHasIPv6Connectivity 1" that directory
+ authorities should set if they have IPv6 connectivity and want to
+ do reachability tests for IPv6 relays. Implements feature 5974.
+ - A relay with an IPv6 OR port now sends that address in NETINFO
+ cells (in addition to its other address). Implements ticket 6364.
+
+ o Minor features (directory authorities):
+ - Directory authorities no long accept descriptors for any version of
+ Tor before 0.2.2.35, or for any 0.2.3 release before 0.2.3.10-alpha.
+ These versions are insecure, unsupported, or both. Implements
+ ticket 6789.
+ - When directory authorities are computing thresholds for flags,
+ never let the threshold for the Fast flag fall below 4096
+ bytes. Also, do not consider nodes with extremely low bandwidths
+ when deciding thresholds for various directory flags. This change
+ should raise our threshold for Fast relays, possibly in turn
+ improving overall network performance; see ticket 1854. Resolves
+ ticket 8145.
+ - Directory authorities now include inside each vote a statement of
+ the performance thresholds they used when assigning flags.
+ Implements ticket 8151.
+ - Add an "ignoring-advertised-bws" boolean to the flag-threshold lines
+ in directory authority votes to describe whether they have enough
+ measured bandwidths to ignore advertised (relay descriptor)
+ bandwidth claims. Resolves ticket 8711.
+
+ o Minor features (path bias detection):
+ - Path Use Bias: Perform separate accounting for successful circuit
+ use. Keep separate statistics on stream attempt rates versus stream
+ success rates for each guard. Provide configurable thresholds to
+ determine when to emit log messages or disable use of guards that
+ fail too many stream attempts. Resolves ticket 7802.
+ - Create three levels of Path Bias log messages, as opposed to just
+ two. These are configurable via consensus as well as via the torrc
+ options PathBiasNoticeRate, PathBiasWarnRate, PathBiasExtremeRate.
+ The default values are 0.70, 0.50, and 0.30 respectively.
+ - Separate the log message levels from the decision to drop guards,
+ which also is available via torrc option PathBiasDropGuards.
+ PathBiasDropGuards still defaults to 0 (off).
+ - Deprecate PathBiasDisableRate in favor of PathBiasDropGuards
+ in combination with PathBiasExtremeRate.
+ - Increase the default values for PathBiasScaleThreshold and
+ PathBiasCircThreshold from (200, 20) to (300, 150).
+ - Add in circuit usage accounting to path bias. If we try to use a
+ built circuit but fail for any reason, it counts as path bias.
+ Certain classes of circuits where the adversary gets to pick your
+ destination node are exempt from this accounting. Usage accounting
+ can be specifically disabled via consensus parameter or torrc.
+ - Convert all internal path bias state to double-precision floating
+ point, to avoid roundoff error and other issues.
+ - Only record path bias information for circuits that have completed
+ *two* hops. Assuming end-to-end tagging is the attack vector, this
+ makes us more resilient to ambient circuit failure without any
+ detection capability loss.
+
+ o Minor features (build):
+ - Tor now builds correctly on Bitrig, an OpenBSD fork. Patch from
+ dhill. Resolves ticket 6982.
+ - Compile on win64 using mingw64. Fixes bug 7260; patches from
+ "yayooo".
+ - Work correctly on Unix systems where EAGAIN and EWOULDBLOCK are
+ separate error codes; or at least, don't break for that reason.
+ Fixes bug 7935. Reported by "oftc_must_be_destroyed".
+
+ o Build improvements (autotools):
+ - Warn if building on a platform with an unsigned time_t: there
+ are too many places where Tor currently assumes that time_t can
+ hold negative values. We'd like to fix them all, but probably
+ some will remain.
+ - Do not report status verbosely from autogen.sh unless the -v flag
+ is specified. Fixes issue 4664. Patch from Onizuka.
+ - Detect and reject attempts to build Tor with threading support
+ when OpenSSL has been compiled without threading support.
+ Fixes bug 6673.
+ - Try to detect if we are ever building on a platform where
+ memset(...,0,...) does not set the value of a double to 0.0. Such
+ platforms are permitted by the C standard, though in practice
+ they're pretty rare (since IEEE 754 is nigh-ubiquitous). We don't
+ currently support them, but it's better to detect them and fail
+ than to perform erroneously.
+ - We no longer warn so much when generating manpages from their
+ asciidoc source.
+ - Use Ville Laurikari's implementation of AX_CHECK_SIGN() to determine
+ the signs of types during autoconf. This is better than our old
+ approach, which didn't work when cross-compiling.
+
+ o Minor features (log messages, warnings):
+ - Detect when we're running with a version of OpenSSL other than the
+ one we compiled with. This conflict has occasionally given people
+ hard-to-track-down errors.
+ - Warn users who run hidden services on a Tor client with
+ UseEntryGuards disabled that their hidden services will be
+ vulnerable to http://freehaven.net/anonbib/#hs-attack06 (the
+ attack which motivated Tor to support entry guards in the first
+ place). Resolves ticket 6889.
+ - Warn when we are binding low ports when hibernation is enabled;
+ previously we had warned when we were _advertising_ low ports with
+ hibernation enabled. Fixes bug 7285; bugfix on 0.2.3.9-alpha.
+ - Issue a warning when running with the bufferevents backend enabled.
+ It's still not stable, and people should know that they're likely
+ to hit unexpected problems. Closes ticket 9147.
+
+ o Minor features (log messages, notices):
+ - Refactor resolve_my_address() so it returns the method by which we
+ decided our public IP address (explicitly configured, resolved from
+ explicit hostname, guessed from interfaces, learned by gethostname).
+ Now we can provide more helpful log messages when a relay guesses
+ its IP address incorrectly (e.g. due to unexpected lines in
+ /etc/hosts). Resolves ticket 2267.
+ - Track how many "TAP" and "NTor" circuit handshake requests we get,
+ and how many we complete, and log it every hour to help relay
+ operators follow trends in network load. Addresses ticket 9658.
+
+ o Minor features (log messages, diagnostics):
+ - If we fail to free a microdescriptor because of bug 7164, log
+ the filename and line number from which we tried to free it.
+ - We compute the overhead from passing onionskins back and forth to
+ cpuworkers, and report it when dumping statistics in response to
+ SIGUSR1. Supports ticket 7291.
+ - Add another diagnostic to the heartbeat message: track and log
+ overhead that TLS is adding to the data we write. If this is
+ high, we are sending too little data to SSL_write at a time.
+ Diagnostic for bug 7707.
+ - Log packaged cell fullness as part of the heartbeat message.
+ Diagnosis to try to determine the extent of bug 7743.
+ - Add more detail to a log message about relaxed timeouts, to help
+ track bug 7799.
+ - When learning a fingerprint for a bridge, log its corresponding
+ transport type. Implements ticket 7896.
+ - Warn more aggressively when flushing microdescriptors to a
+ microdescriptor cache fails, in an attempt to mitigate bug 8031,
+ or at least make it more diagnosable.
+ - Improve the log message when "Bug/attack: unexpected sendme cell
+ from client" occurs, to help us track bug 8093.
+ - Improve debugging output to help track down bug 8185 ("Bug:
+ outgoing relay cell has n_chan==NULL. Dropping.")
+
+ o Minor features (log messages, quieter bootstrapping):
+ - Log fewer lines at level "notice" about our OpenSSL and Libevent
+ versions and capabilities when everything is going right. Resolves
+ part of ticket 6736.
+ - Omit the first heartbeat log message, because it never has anything
+ useful to say, and it clutters up the bootstrapping messages.
+ Resolves ticket 6758.
+ - Don't log about reloading the microdescriptor cache at startup. Our
+ bootstrap warnings are supposed to tell the user when there's a
+ problem, and our bootstrap notices say when there isn't. Resolves
+ ticket 6759; bugfix on 0.2.2.6-alpha.
+ - Don't log "I learned some more directory information" when we're
+ reading cached directory information. Reserve it for when new
+ directory information arrives in response to a fetch. Resolves
+ ticket 6760.
+ - Don't complain about bootstrapping problems while hibernating.
+ These complaints reflect a general code problem, but not one
+ with any problematic effects (no connections are actually
+ opened). Fixes part of bug 7302; bugfix on 0.2.3.2-alpha.
+
+ o Minor features (testing):
+ - In our testsuite, create temporary directories with a bit more
+ entropy in their name to make name collisions less likely. Fixes
+ bug 8638.
+ - Add benchmarks for DH (1024-bit multiplicative group) and ECDH
+ (P-256) Diffie-Hellman handshakes to src/or/bench.
+ - Add benchmark functions to test onion handshake performance.
+
+ o Renamed options:
+ - The DirServer option is now DirAuthority, for consistency with
+ current naming patterns. You can still use the old DirServer form.
+
+ o Minor bugfixes (protocol):
+ - Fix the handling of a TRUNCATE cell when it arrives while the
+ circuit extension is in progress. Fixes bug 7947; bugfix on 0.0.7.1.
+ - When a Tor client gets a "truncated" relay cell, the first byte of
+ its payload specifies why the circuit was truncated. We were
+ ignoring this 'reason' byte when tearing down the circuit, resulting
+ in the controller not being told why the circuit closed. Now we
+ pass the reason from the truncated cell to the controller. Bugfix
+ on 0.1.2.3-alpha; fixes bug 7039.
+ - Fix a misframing issue when reading the version numbers in a
+ VERSIONS cell. Previously we would recognize [00 01 00 02] as
+ 'version 1, version 2, and version 0x100', when it should have
+ only included versions 1 and 2. Fixes bug 8059; bugfix on
+ 0.2.0.10-alpha. Reported pseudonymously.
+ - Make the format and order of STREAM events for DNS lookups
+ consistent among the various ways to launch DNS lookups. Fixes
+ bug 8203; bugfix on 0.2.0.24-rc. Patch by "Desoxy".
+
+ o Minor bugfixes (syscalls and disk interaction):
+ - Always check the return values of functions fcntl() and
+ setsockopt(). We don't believe these are ever actually failing in
+ practice, but better safe than sorry. Also, checking these return
+ values should please analysis tools like Coverity. Patch from
+ 'flupzor'. Fixes bug 8206; bugfix on all versions of Tor.
+ - Avoid double-closing the listener socket in our socketpair()
+ replacement (used on Windows) in the case where the addresses on
+ our opened sockets don't match what we expected. Fixes bug 9400;
+ bugfix on 0.0.2pre7. Found by Coverity.
+ - Correctly store microdescriptors and extrainfo descriptors that
+ include an internal NUL byte. Fixes bug 8037; bugfix on
+ 0.2.0.1-alpha. Bug reported by "cypherpunks".
+ - If for some reason we fail to write a microdescriptor while
+ rebuilding the cache, do not let the annotations from that
+ microdescriptor linger in the cache file, and do not let the
+ microdescriptor stay recorded as present in its old location.
+ Fixes bug 9047; bugfix on 0.2.2.6-alpha.
+ - Use direct writes rather than stdio when building microdescriptor
+ caches, in an attempt to mitigate bug 8031, or at least make it
+ less common.
+
+ o Minor fixes (config options):
+ - Warn and fail if a server is configured not to advertise any
+ ORPorts at all. (We need *something* to put in our descriptor,
+ or we just won't work.)
+ - Behave correctly when the user disables LearnCircuitBuildTimeout
+ but doesn't tell us what they would like the timeout to be. Fixes
+ bug 6304; bugfix on 0.2.2.14-alpha.
+ - Rename the (internal-use-only) UsingTestingNetworkDefaults option
+ to start with a triple-underscore so the controller won't touch it.
+ Patch by Meejah. Fixes bug 3155. Bugfix on 0.2.2.23-alpha.
+ - Rename the (testing-use-only) _UseFilteringSSLBufferevents option
+ so it doesn't start with _. Fixes bug 3155. Bugfix on 0.2.3.1-alpha.
+ - When autodetecting the number of CPUs, use the number of available
+ CPUs in preference to the number of configured CPUs. Inform the
+ user if this reduces the number of available CPUs. Fixes bug 8002;
+ bugfix on 0.2.3.1-alpha.
+ - Command-line option "--version" implies "--quiet". Fixes bug 6997.
+ - Make it an error when you set EntryNodes but disable UseGuardNodes,
+ since it will (surprisingly to some users) ignore EntryNodes. Fixes
+ bug 8180; bugfix on 0.2.3.11-alpha.
+ - Avoid overflows when the user sets MaxCircuitDirtiness to a
+ ridiculously high value, by imposing a (ridiculously high) 30-day
+ maximum on MaxCircuitDirtiness.
+
+ o Minor bugfixes (control protocol):
+ - Stop sending a stray "(null)" in some cases for the server status
+ "EXTERNAL_ADDRESS" controller event. Resolves bug 8200; bugfix
+ on 0.1.2.6-alpha.
+ - The ADDRMAP command can no longer generate an ill-formed error
+ code on a failed MAPADDRESS. It now says "internal" rather than
+ an English sentence fragment with spaces in the middle. Bugfix on
+ Tor 0.2.0.19-alpha.
+
+ o Minor bugfixes (clients / edges):
+ - When we receive a RELAY_END cell with the reason DONE, or with no
+ reason, before receiving a RELAY_CONNECTED cell, report the SOCKS
+ status as "connection refused". Previously we reported these cases
+ as success but then immediately closed the connection. Fixes bug
+ 7902; bugfix on 0.1.0.1-rc. Reported by "oftc_must_be_destroyed".
+ - If the guard we choose first doesn't answer, we would try the
+ second guard, but once we connected to the second guard we would
+ abandon it and retry the first one, slowing down bootstrapping.
+ The fix is to treat all our initially chosen guards as acceptable
+ to use. Fixes bug 9946; bugfix on 0.1.1.11-alpha.
+ - When choosing which stream on a formerly stalled circuit to wake
+ first, make better use of the platform's weak RNG. Previously,
+ we had been using the % ("modulo") operator to try to generate a
+ 1/N chance of picking each stream, but this behaves badly with
+ many platforms' choice of weak RNG. Fixes bug 7801; bugfix on
+ 0.2.2.20-alpha.
+
+ o Minor bugfixes (path bias detection):
+ - If the state file's path bias counts are invalid (presumably from a
+ buggy Tor prior to 0.2.4.10-alpha), make them correct. Also add
+ additional checks and log messages to the scaling of Path Bias
+ counts, in case there still are remaining issues with scaling.
+ Should help resolve bug 8235.
+ - Prevent rounding error in path bias counts when scaling
+ them down, and use the correct scale factor default. Also demote
+ some path bias related log messages down a level and make others
+ less scary sounding. Fixes bug 6647. Bugfix on 0.2.3.17-beta.
+ - Remove a source of rounding error during path bias count scaling;
+ don't count cannibalized circuits as used for path bias until we
+ actually try to use them; and fix a circuit_package_relay_cell()
+ warning message about n_chan==NULL. Fixes bug 7802.
+ - Paste the description for PathBias parameters from the man
+ page into or.h, so the code documents them too. Fixes bug 7982;
+ bugfix on 0.2.3.17-beta.
+
+ o Minor bugfixes (relays):
+ - Stop trying to resolve our hostname so often (e.g. every time we
+ think about doing a directory fetch). Now we reuse the cached
+ answer in some cases. Fixes bugs 1992 (bugfix on 0.2.0.20-rc)
+ and 2410 (bugfix on 0.1.2.2-alpha).
+ - When examining the list of network interfaces to find our address,
+ do not consider non-running or disabled network interfaces. Fixes
+ bug 9904; bugfix on 0.2.3.11-alpha. Patch from "hantwister".
+
+ o Minor bugfixes (blocking resistance):
+ - Only disable TLS session ticket support when running as a TLS
+ server. Now clients will blend better with regular Firefox
+ connections. Fixes bug 7189; bugfix on Tor 0.2.3.23-rc.
+
+ o Minor bugfixes (IPv6):
+ - Use square brackets around IPv6 addresses in numerous places
+ that needed them, including log messages, HTTPS CONNECT proxy
+ requests, TransportProxy statefile entries, and pluggable transport
+ extra-info lines. Fixes bug 7011; patch by David Fifield.
+
+ o Minor bugfixes (directory authorities):
+ - Reject consensus votes with more than 64 known-flags. We aren't even
+ close to that limit yet, and our code doesn't handle it correctly.
+ Fixes bug 6833; bugfix on 0.2.0.1-alpha.
+ - Correctly handle votes with more than 31 flags. Fixes bug 6853;
+ bugfix on 0.2.0.3-alpha.
+
+ o Minor bugfixes (memory leaks):
+ - Avoid leaking memory if we fail to compute a consensus signature
+ or we generate a consensus we can't parse. Bugfix on 0.2.0.5-alpha.
+ - Fix a memory leak when receiving headers from an HTTPS proxy. Bugfix
+ on 0.2.1.1-alpha; fixes bug 7816.
+ - Fix a memory leak during safe-cookie controller authentication.
+ Bugfix on 0.2.3.13-alpha; fixes bug 7816.
+ - Free some more still-in-use memory at exit, to make hunting for
+ memory leaks easier. Resolves bug 7029.
+
+ o Minor bugfixes (code correctness):
+ - Increase the width of the field used to remember a connection's
+ link protocol version to two bytes. Harmless for now, since the
+ only currently recognized versions are one byte long. Reported
+ pseudonymously. Fixes bug 8062; bugfix on 0.2.0.10-alpha.
+ - Fix a crash when debugging unit tests on Windows: deallocate a
+ shared library with FreeLibrary, not CloseHandle. Fixes bug 7306;
+ bugfix on 0.2.2.17-alpha. Reported by "ultramage".
+ - When detecting the largest possible file descriptor (in order to
+ close all file descriptors when launching a new program), actually
+ use _SC_OPEN_MAX. The old code for doing this was very, very broken.
+ Fixes bug 8209; bugfix on 0.2.3.1-alpha. Found by Coverity; this
+ is CID 743383.
+ - Avoid a crash if we fail to generate an extrainfo descriptor.
+ Fixes bug 8208; bugfix on 0.2.3.16-alpha. Found by Coverity;
+ this is CID 718634.
+ - Avoid an off-by-one error when checking buffer boundaries when
+ formatting the exit status of a pluggable transport helper.
+ This is probably not an exploitable bug, but better safe than
+ sorry. Fixes bug 9928; bugfix on 0.2.3.18-rc. Bug found by
+ Pedro Ribeiro.
+ - Get rid of a couple of harmless clang warnings, where we compared
+ enums to ints. These warnings are newly introduced in clang 3.2.
+
+ o Minor bugfixes (code cleanliness):
+ - Avoid use of reserved identifiers in our C code. The C standard
+ doesn't like us declaring anything that starts with an
+ underscore, so let's knock it off before we get in trouble. Fix
+ for bug 1031; bugfix on the first Tor commit.
+ - Fix round_to_power_of_2() so it doesn't invoke undefined behavior
+ with large values. This situation was untriggered, but nevertheless
+ incorrect. Fixes bug 6831; bugfix on 0.2.0.1-alpha.
+ - Fix an impossible buffer overrun in the AES unit tests. Fixes
+ bug 8845; bugfix on 0.2.0.7-alpha. Found by eugenis.
+ - Fix handling of rendezvous client authorization types over 8.
+ Fixes bug 6861; bugfix on 0.2.1.5-alpha.
+ - Remove a couple of extraneous semicolons that were upsetting the
+ cparser library. Patch by Christian Grothoff. Fixes bug 7115;
+ bugfix on 0.2.2.1-alpha.
+ - When complaining about a client port on a public address, log
+ which address we're complaining about. Fixes bug 4020; bugfix on
+ 0.2.3.3-alpha. Patch by Tom Fitzhenry.
+
+ o Minor bugfixes (log messages, warnings):
+ - If we encounter a write failure on a SOCKS connection before we
+ finish our SOCKS handshake, don't warn that we closed the
+ connection before we could send a SOCKS reply. Fixes bug 8427;
+ bugfix on 0.1.0.1-rc.
+ - Fix a directory authority warn caused when we have a large amount
+ of badexit bandwidth. Fixes bug 8419; bugfix on 0.2.2.10-alpha.
+ - Downgrade "Failed to hand off onionskin" messages to "debug"
+ severity, since they're typically redundant with the "Your computer
+ is too slow" messages. Fixes bug 7038; bugfix on 0.2.2.16-alpha.
+ - Avoid spurious warnings when configuring multiple client ports of
+ which only some are nonlocal. Previously, we had claimed that some
+ were nonlocal when in fact they weren't. Fixes bug 7836; bugfix on
+ 0.2.3.3-alpha.
+
+ o Minor bugfixes (log messages, other):
+ - Fix log messages and comments to avoid saying "GMT" when we mean
+ "UTC". Fixes bug 6113.
+ - When rejecting a configuration because we were unable to parse a
+ quoted string, log an actual error message. Fixes bug 7950; bugfix
+ on 0.2.0.16-alpha.
+ - Correctly recognize that [::1] is a loopback address. Fixes
+ bug 8377; bugfix on 0.2.1.3-alpha.
+ - Don't log inappropriate heartbeat messages when hibernating: a
+ hibernating node is _expected_ to drop out of the consensus,
+ decide it isn't bootstrapped, and so forth. Fixes bug 7302;
+ bugfix on 0.2.3.1-alpha.
+ - Eliminate several instances where we use "Nickname=ID" to refer to
+ nodes in logs. Use "Nickname (ID)" instead. (Elsewhere, we still use
+ "$ID=Nickname", which is also acceptable.) Fixes bug 7065. Bugfix
+ on 0.2.3.21-rc.
+
+ o Minor bugfixes (build):
+ - Fix some bugs in tor-fw-helper-natpmp when trying to build and
+ run it on Windows. More bugs likely remain. Patch from Gisle Vanem.
+ Fixes bug 7280; bugfix on 0.2.3.1-alpha.
+
+ o Documentation fixes:
+ - Make the torify manpage no longer refer to tsocks; torify hasn't
+ supported tsocks since 0.2.3.14-alpha.
+ - Make the tor manpage no longer reference tsocks.
+ - Fix the GeoIPExcludeUnknown documentation to refer to
+ ExcludeExitNodes rather than the currently nonexistent
+ ExcludeEntryNodes. Spotted by "hamahangi" on tor-talk.
+ - Resolve a typo in torrc.sample.in. Fixes bug 6819; bugfix on
+ 0.2.3.14-alpha.
+ - Say "KBytes" rather than "KB" in the man page (for various values
+ of K), to further reduce confusion about whether Tor counts in
+ units of memory or fractions of units of memory. Resolves ticket 7054.
+ - Update tor-fw-helper.1.txt and tor-fw-helper.c to make option
+ names match. Fixes bug 7768.
+ - Fix the documentation of HeartbeatPeriod to say that the heartbeat
+ message is logged at notice, not at info.
+ - Clarify the usage and risks of setting the ContactInfo torrc line
+ for your relay or bridge. Resolves ticket 9854.
+ - Add anchors to the manpage so we can link to the html version of
+ the documentation for specific options. Resolves ticket 9866.
+ - Replace remaining references to DirServer in man page and
+ log entries. Resolves ticket 10124.
+
+ o Removed features:
+ - Stop exporting estimates of v2 and v3 directory traffic shares
+ in extrainfo documents. They were unneeded and sometimes inaccurate.
+ Also stop exporting any v2 directory request statistics. Resolves
+ ticket 5823.
+ - Drop support for detecting and warning about versions of Libevent
+ before 1.3e. Nothing reasonable ships with them any longer; warning
+ the user about them shouldn't be needed. Resolves ticket 6826.
+ - Now that all versions before 0.2.2.x are disallowed, we no longer
+ need to work around their missing features. Remove a bunch of
+ compatibility code.
+
+ o Removed files:
+ - The tor-tsocks.conf is no longer distributed or installed. We
+ recommend that tsocks users use torsocks instead. Resolves
+ ticket 8290.
+ - Remove some of the older contents of doc/ as obsolete; move others
+ to torspec.git. Fixes bug 8965.
+
+ o Code simplification:
+ - Avoid using character buffers when constructing most directory
+ objects: this approach was unwieldy and error-prone. Instead,
+ build smartlists of strings, and concatenate them when done.
+ - Rename "isin" functions to "contains", for grammar. Resolves
+ ticket 5285.
+ - Rename Tor's logging function log() to tor_log(), to avoid conflicts
+ with the natural logarithm function from the system libm. Resolves
+ ticket 7599.
+ - Start using OpenBSD's implementation of queue.h, so that we don't
+ need to hand-roll our own pointer and list structures whenever we
+ need them. (We can't rely on a sys/queue.h, since some operating
+ systems don't have them, and the ones that do have them don't all
+ present the same extensions.)
+ - Start using OpenBSD's implementation of queue.h (originally by
+ Niels Provos).
+ - Enhance our internal sscanf replacement so that we can eliminate
+ the last remaining uses of the system sscanf. (Though those uses
+ of sscanf were safe, sscanf itself is generally error prone, so
+ we want to eliminate when we can.) Fixes ticket 4195 and Coverity
+ CID 448.
+ - Replace all calls to snprintf() outside of src/ext with
+ tor_snprintf(). Also remove the #define to replace snprintf with
+ _snprintf on Windows; they have different semantics, and all of
+ our callers should be using tor_snprintf() anyway. Fixes bug 7304.
+
+ o Refactoring:
+ - Add a wrapper function for the common "log a message with a
+ rate-limit" case.
+ - Split the onion.c file into separate modules for the onion queue
+ and the different handshakes it supports.
+ - Move the client-side address-map/virtual-address/DNS-cache code
+ out of connection_edge.c into a new addressmap.c module.
+ - Move the entry node code from circuitbuild.c to its own file.
+ - Move the circuit build timeout tracking code from circuitbuild.c
+ to its own file.
+ - Source files taken from other packages now reside in src/ext;
+ previously they were scattered around the rest of Tor.
+ - Move the generic "config" code into a new file, and have "config.c"
+ hold only torrc- and state-related code. Resolves ticket 6823.
+ - Move the core of our "choose a weighted element at random" logic
+ into its own function, and give it unit tests. Now the logic is
+ testable, and a little less fragile too.
+ - Move ipv6_preferred from routerinfo_t to node_t. Addresses bug 4620.
+ - Move last_reachable and testing_since from routerinfo_t to node_t.
+ Implements ticket 5529.
+ - Add replaycache_t structure, functions and unit tests, then refactor
+ rend_service_introduce() to be more clear to read, improve, debug,
+ and test. Resolves bug 6177.
+
+ o Removed code:
+ - Remove some now-needless code that tried to aggressively flush
+ OR connections as data was added to them. Since 0.2.0.1-alpha, our
+ cell queue logic has saved us from the failure mode that this code
+ was supposed to prevent. Removing this code will limit the number
+ of baroque control flow paths through Tor's network logic. Reported
+ pseudonymously on IRC. Fixes bug 6468; bugfix on 0.2.0.1-alpha.
+ - Remove unused code for parsing v1 directories and "running routers"
+ documents. Fixes bug 6887.
+ - Remove the marshalling/unmarshalling code for sending requests to
+ cpuworkers over a socket, and instead just send structs. The
+ recipient will always be the same Tor binary as the sender, so
+ any encoding is overkill.
+ - Remove the testing_since field of node_t, which hasn't been used
+ for anything since 0.2.0.9-alpha.
+ - Finally remove support for malloc_good_size and malloc_usable_size.
+ We had hoped that these functions would let us eke a little more
+ memory out of our malloc implementation. Unfortunately, the only
+ implementations that provided these functions are also ones that
+ are already efficient about not overallocation: they never got us
+ more than 7 or so bytes per allocation. Removing them saves us a
+ little code complexity and a nontrivial amount of build complexity.
+
+
+Changes in version 0.2.3.25 - 2012-11-19
+ The Tor 0.2.3 release series is dedicated to the memory of Len "rabbi"
+ Sassaman (1980-2011), a long-time cypherpunk, anonymity researcher,
+ Mixmaster maintainer, Pynchon Gate co-designer, CodeCon organizer,
+ programmer, and friend. Unstinting in his dedication to the cause of
+ freedom, he inspired and helped many of us as we began our work on
+ anonymity, and inspires us still. Please honor his memory by writing
+ software to protect people's freedoms, and by helping others to do so.
+
+ Tor 0.2.3.25, the first stable release in the 0.2.3 branch, features
+ significantly reduced directory overhead (via microdescriptors),
+ enormous crypto performance improvements for fast relays on new
+ enough hardware, a new v3 TLS handshake protocol that can better
+ resist fingerprinting, support for protocol obfuscation plugins (aka
+ pluggable transports), better scalability for hidden services, IPv6
+ support for bridges, performance improvements like allowing clients
+ to skip the first round-trip on the circuit ("optimistic data") and
+ refilling token buckets more often, a new "stream isolation" design
+ to isolate different applications on different circuits, and many
+ stability, security, and privacy fixes.
+
+ Major features (v3 directory protocol):
+ - Clients 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. Use "UseMicrodescriptors 0" to disable it.
+ - Caches now download, cache, and serve microdescriptors, as well
+ as multiple "flavors" of the consensus, including a flavor that
+ describes microdescriptors.
+
+ o Major features (build hardening):
+ - Enable gcc and ld hardening by default. Resolves ticket 5210.
+
+ o Major features (relay scaling):
+ - When built to use OpenSSL 1.0.1, and built for an x86 or x86_64
+ instruction set, take advantage of OpenSSL's AESNI, bitsliced, or
+ vectorized AES implementations as appropriate. These can be much,
+ much faster than other AES implementations.
+ - When using OpenSSL 1.0.0 or later, use OpenSSL's counter mode
+ implementation. It makes AES_CTR about 7% faster than our old one
+ (which was about 10% faster than the one OpenSSL used to provide).
+ Resolves ticket 4526.
+ - Use OpenSSL's EVP interface for AES encryption, so that all AES
+ operations can use hardware acceleration (if present). Resolves
+ ticket 4442.
+ - 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.
+
+ o Major features (blocking resistance):
+ - Update TLS cipher list to match Firefox 8 and later. Resolves
+ ticket 4744.
+ - Remove support for clients falsely claiming to support standard
+ ciphersuites that they can actually provide. As of modern OpenSSL
+ versions, it's not necessary to fake any standard ciphersuite,
+ and doing so prevents us from using better ciphersuites in the
+ future, since servers can't know whether an advertised ciphersuite
+ is really supported or not. Some hosts -- notably, ones with very
+ old versions of OpenSSL or where OpenSSL has been built with ECC
+ disabled -- will stand out because of this change; TBB users should
+ not be affected. Implements the client side of proposal 198.
+ - 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.
+ - 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 features (pluggable transports):
+ - Clients and bridges can now be configured to use a separate
+ "transport" proxy. This approach makes the censorship arms race
+ easier by allowing bridges to use protocol obfuscation plugins.
+ Implements proposal 180 (tickets 2841 and 3472).
+
+ o Major features (DoS resistance):
+ - Now that Tor 0.2.0.x is completely deprecated, enable the final
+ part of "Proposal 110: Avoiding infinite length circuits" by
+ refusing all circuit-extend requests that do not use a relay_early
+ cell. This change helps Tor resist a class of denial-of-service
+ attacks by limiting the maximum circuit length.
+ - Tear down the circuit if we get an unexpected SENDME cell. Clients
+ could use this trick to make their circuits receive cells faster
+ than our flow control would have allowed, or to gum up the network,
+ or possibly to do targeted memory denial-of-service attacks on
+ entry nodes. Fixes bug 6252. Bugfix on the 54th commit on Tor --
+ from July 2002, before the release of Tor 0.0.0.
+
+ o Major features (hidden services):
+ - Adjust the number of introduction points that a hidden service
+ will try to maintain based on how long its introduction points
+ remain in use and how many introductions they handle. Fixes
+ part of bug 3825.
+ - Add a "tor2web mode" for clients that want to connect to hidden
+ services non-anonymously (and possibly more quickly). As a safety
+ measure to try to keep users from turning this on without knowing
+ what they are doing, tor2web mode must be explicitly enabled at
+ compile time, and a copy of Tor compiled to run in tor2web mode
+ cannot be used as a normal Tor client. Implements feature 2553.
+
+ o Major features (IPv6):
+ - Clients can now connect to private bridges over IPv6. Bridges
+ still need at least one IPv4 address in order to connect to
+ other relays. Note that we don't yet handle the case where the
+ user has two bridge lines for the same bridge (one IPv4, one
+ IPv6). Implements parts of proposal 186.
+
+ o Major features (directory authorities):
+ - Use a more secure consensus parameter voting algorithm. Now at
+ least three directory authorities or a majority of them must
+ vote on a given parameter before it will be included in the
+ consensus. Implements proposal 178.
+ - 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.
+
+ o Major features (performance):
+ - 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.
+ - 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.
+ - 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.
+ - Raise the threshold of server descriptors needed (75%) and exit
+ server descriptors needed (50%) before we will declare ourselves
+ bootstrapped. This will make clients start building circuits a
+ little later, but makes the initially constructed circuits less
+ skewed and less in conflict with further directory fetches. Fixes
+ ticket 3196.
+
+ o Major features (relays):
+ - 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 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 (bufferevents):
+ - 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.
+ - Add experimental support for running on Windows with IOCP and no
+ kernel-space socket buffers. This feature is controlled by a new
+ "UserspaceIOCPBuffers" config option (off by default), which has
+ no effect unless Tor has been built with bufferevents enabled,
+ you're running on Windows, and you've set "DisableIOCP 0". In the
+ long run, this may help solve or mitigate bug 98.
+
+ o Major features (path selection):
+ - 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. Addresses ticket 1982, but see bug 2798 for an unresolved
+ issue here.
+
+ o Major features (port forwarding):
+ - Add support for automatic port mapping on the many home routers
+ that support NAT-PMP or UPnP. To build the support code, you'll
+ need to have the 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.
+
+ o Major features (logging):
+ - 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.
+ - Make logging resolution configurable with a new LogTimeGranularity
+ option, and change the default from 1 millisecond to 1 second.
+ Implements enhancement 1668.
+
+ o Major features (other):
+ - New "DisableNetwork" config option to prevent Tor from launching any
+ connections or accepting any connections except on a control port.
+ Bundles and controllers can set this option before letting Tor talk
+ to the rest of the network, for example to prevent any connections
+ to a non-bridge address. Packages like Orbot can also use this
+ option to instruct Tor to save power when the network is off.
+ - Try to use system facilities for enumerating local interface
+ addresses, before falling back to our old approach (which was
+ binding a UDP socket, and calling getsockname() on it). That
+ approach was scaring OS X users whose draconian firewall
+ software warned about binding to UDP sockets regardless of
+ whether packets were sent. Now we try to use getifaddrs(),
+ SIOCGIFCONF, or GetAdaptersAddresses(), depending on what the
+ system supports. Resolves ticket 1827.
+ - Add experimental support for a "defaults" torrc file to be parsed
+ before the regular torrc. Torrc options override the defaults file's
+ options in the same way that the command line overrides the torrc.
+ The SAVECONF controller command saves only those options which
+ differ between the current configuration and the defaults file. HUP
+ reloads both files. Implements task 4552.
+
+ o New directory authorities:
+ - Add Faravahar (run by Sina Rabbani) as the ninth v3 directory
+ authority. Closes ticket 5749.
+
+ o Security/privacy fixes:
+ - Avoid read-from-freed-memory and double-free bugs that could occur
+ when a DNS request fails while launching it. Fixes bug 6480;
+ bugfix on 0.2.0.1-alpha.
+ - Reject any attempt to extend to an internal address. Without
+ this fix, a router could be used to probe addresses on an internal
+ network to see whether they were accepting connections. Fixes bug
+ 6710; bugfix on 0.0.8pre1.
+ - Close any connection that sends unrecognized junk before the TLS
+ handshake. Solves an issue noted in bug 4369.
+ - The advertised platform of a relay now includes only its operating
+ system's name (e.g., "Linux", "Darwin", "Windows 7"), and not
+ its service pack level (for Windows) or its CPU architecture
+ (for Unix). Also drop the "git-XYZ" tag in the version. Packagers
+ can insert an extra string in the platform line by setting the
+ preprocessor variable TOR_BUILD_TAG. Resolves bug 2988.
+ - Disable TLS session tickets. OpenSSL's implementation was giving
+ our TLS session keys the lifetime of our TLS context objects, when
+ perfect forward secrecy would want us to discard anything that
+ could decrypt a link connection as soon as the link connection
+ was closed. Fixes bug 7139; bugfix on all versions of Tor linked
+ against OpenSSL 1.0.0 or later. Found by Florent Daignière.
+ - Tor tries to wipe potentially sensitive data after using it, so
+ that if some subsequent security failure exposes Tor's memory,
+ the damage will be limited. But we had a bug where the compiler
+ was eliminating these wipe operations when it decided that the
+ memory was no longer visible to a (correctly running) program,
+ hence defeating our attempt at defense in depth. We fix that
+ by using OpenSSL's OPENSSL_cleanse() operation, which a compiler
+ is unlikely to optimize away. Future versions of Tor may use
+ a less ridiculously heavy approach for this. Fixes bug 7352.
+ Reported in an article by Andrey Karpov.
+
+ o Major bugfixes (crashes and asserts):
+ - Avoid a pair of double-free and use-after-mark bugs that can
+ occur with certain timings in canceled and re-received DNS
+ requests. Fixes bug 6472; bugfix on 0.0.7rc1.
+ - Fix a denial of service attack by which any directory authority
+ could crash all the others, or by which a single v2 directory
+ authority could crash everybody downloading v2 directory
+ information. Fixes bug 7191; bugfix on 0.2.0.10-alpha.
+ - Fix an assert that directory authorities could trigger on sighup
+ during some configuration state transitions. We now don't treat
+ it as a fatal error when the new descriptor we just generated in
+ init_keys() isn't accepted. Fixes bug 4438; bugfix on 0.2.1.9-alpha.
+ - Avoid segfault when starting up having run with an extremely old
+ version of Tor and parsing its state file. Fixes bug 6801; bugfix
+ on 0.2.2.23-alpha.
+
+ o Major bugfixes (clients):
+ - If we are unable to find any exit that supports our predicted ports,
+ stop calling them predicted, so that we don't loop and build
+ hopeless circuits indefinitely. Fixes bug 3296; bugfix on 0.0.9pre6,
+ which introduced predicted ports.
+ - Check at each new consensus whether our entry guards were picked
+ long enough ago that we should rotate them. Previously, we only
+ did this check at startup, which could lead to us holding a guard
+ indefinitely. Fixes bug 5380; bugfix on 0.2.1.14-rc.
+ - When fetching a bridge descriptor from a bridge authority,
+ always do so anonymously, whether we have been able to open
+ circuits or not. Partial fix for bug 1938; bugfix on 0.2.0.7-alpha.
+ This behavior makes it *safer* to use UpdateBridgesFromAuthority,
+ but we'll need to wait for bug 6010 before it's actually usable.
+
+ o Major bugfixes (directory voting):
+ - Check more thoroughly to prevent a rogue authority from
+ double-voting on any consensus directory parameter. Previously,
+ authorities would crash in this case if the total number of
+ votes for any parameter exceeded the number of active voters,
+ but would let it pass otherwise. Partially fixes bug 5786; bugfix
+ on 0.2.2.2-alpha.
+ - When computing weight parameters, behave more robustly in the
+ presence of a bad bwweightscale value. Previously, the authorities
+ would crash if they agreed on a sufficiently broken weight_scale
+ value; now, they use a reasonable default and carry on. Fixes the
+ rest of bug 5786; bugfix on 0.2.2.17-alpha.
+ - If authorities are unable to get a v2 consensus document from other
+ directory authorities, they no longer fall back to fetching
+ them from regular directory caches. Fixes bug 5635; bugfix on
+ 0.2.2.26-beta, where routers stopped downloading v2 consensus
+ documents entirely.
+
+ o Major bugfixes (relays):
+ - Fix a bug handling SENDME cells on nonexistent streams that could
+ result in bizarre window values. Report and patch contributed
+ pseudonymously. Fixes part of bug 6271. This bug was introduced
+ before the first Tor release, in svn commit r152.
+ - 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 Bryon Eldridge, who also helped
+ immensely in tracking this bug down.
+ - Fix a possible crash bug when checking for deactivated circuits
+ in connection_or_flush_from_first_active_circuit(). Fixes bug 6341;
+ bugfix on 0.2.2.7-alpha. Bug report and fix received pseudonymously.
+ - Set the SO_REUSEADDR socket option before we call bind() on outgoing
+ connections. This change should allow busy exit relays to stop
+ running out of available sockets as quickly. Fixes bug 4950;
+ bugfix on 0.2.2.26-beta.
+
+ o Major bugfixes (blocking resistance):
+ - 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.
+ - Warn the user when HTTPProxy, but no other proxy type, is
+ configured. This can cause surprising behavior: it doesn't send
+ all of Tor's traffic over the HTTPProxy -- it sends unencrypted
+ directory traffic only. Resolves ticket 4663.
+
+ 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.
+ - Hidden services now ignore the timestamps on INTRODUCE2 cells.
+ They used to check that the timestamp was within 30 minutes
+ of their system clock, so they could cap the size of their
+ replay-detection cache, but that approach unnecessarily refused
+ service to clients with wrong clocks. Bugfix on 0.2.1.6-alpha, when
+ the v3 intro-point protocol (the first one which sent a timestamp
+ field in the INTRODUCE2 cell) was introduced; fixes bug 3460.
+ - 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.
+ Fixes part of bug 3825.
+
+ o Changes to default torrc file:
+ - Stop listing "socksport 9050" in torrc.sample. We open a socks
+ port on 9050 by default anyway, so this should not change anything
+ in practice.
+ - Stop mentioning the deprecated *ListenAddress options in
+ torrc.sample. Fixes bug 5438.
+ - Document unit of bandwidth-related options in sample torrc.
+ Fixes bug 5621.
+ - Fix broken URLs in the sample torrc file, and tell readers about
+ the OutboundBindAddress, ExitPolicyRejectPrivate, and
+ PublishServerDescriptor options. Addresses bug 4652.
+
+ o Minor features (directory authorities):
+ - Consider new, removed or changed IPv6 OR ports a non-cosmetic
+ change when the authority is deciding whether to accept a newly
+ uploaded descriptor. Implements ticket 6423.
+ - Directory authorities are now a little more lenient at accepting
+ older router descriptors, or newer router descriptors that don't
+ make big changes. This should help ameliorate past and future
+ issues where routers think they have uploaded valid descriptors,
+ but the authorities don't think so. Fix for ticket 2479.
+ - Authority operators can now vote for all relays in a given
+ set of countries to be BadDir/BadExit/Invalid/Rejected.
+ - Provide two consensus parameters (FastFlagMinThreshold and
+ FastFlagMaxThreshold) to control the range of allowable bandwidths
+ for the Fast directory flag. These allow authorities to run
+ experiments on appropriate requirements for being a "Fast" node.
+ The AuthDirFastGuarantee config value still applies. Implements
+ ticket 3946.
+
+ o Minor features (bridges / bridge authorities):
+ - Make bridge SSL certificates a bit more stealthy by using random
+ serial numbers, in the same fashion as OpenSSL when generating
+ self-signed certificates. Implements ticket 4584.
+ - Tag a bridge's descriptor as "never to be sent unencrypted".
+ This shouldn't matter, since bridges don't open non-anonymous
+ connections to the bridge authority and don't allow unencrypted
+ directory connections from clients, but we might as well make
+ sure. Closes bug 5139.
+ - 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.
+
+ o Minor features (IPv6):
+ - Make the code that clients use to detect an address change be
+ IPv6-aware, so that it won't fill clients' logs with error
+ messages when trying to get the IPv4 address of an IPv6
+ connection. Implements ticket 5537.
+ - Relays now understand an IPv6 address when they get one from a
+ directory server. Resolves ticket 4875.
+
+ o Minor features (hidden services):
+ - Expire old or over-used hidden service introduction points.
+ Required by fix for bug 3460.
+ - Reduce the lifetime of elements of hidden services' Diffie-Hellman
+ public key replay-detection cache from 60 minutes to 5 minutes. This
+ replay-detection cache is now used only to detect multiple
+ INTRODUCE2 cells specifying the same rendezvous point, so we can
+ avoid launching multiple simultaneous attempts to connect to it.
+ - 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.
+
+ o Minor features (relays):
+ - 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.
+ - Turn on directory request statistics by default and include them in
+ extra-info descriptors. Don't break if we have no GeoIP database.
+ - 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.
+ - 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
+ ticket 1883.
+
+ o Minor features (new config options):
+ - New config option "DynamicDHGroups" (disabled by default) provides
+ each bridge with a unique prime DH modulus to be used during
+ SSL handshakes. This option attempts to help against censors
+ who might use the Apache DH modulus as a static identifier for
+ bridges. Addresses ticket 4548.
+ - New config option "DisableDebuggerAttachment" (on by default)
+ to prevent basic debugging attachment attempts by other processes.
+ Supports Mac OS X and Gnu/Linux. Resolves ticket 3313.
+ - 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.
+
+ o Minor features (different behavior for old config options):
+ - Allow MapAddress directives to specify matches against super-domains,
+ as in "MapAddress *.torproject.org *.torproject.org.torserver.exit".
+ Implements issue 933.
+ - Don't disable the DirPort when we cannot exceed our AccountingMax
+ limit during this interval because the effective bandwidthrate is
+ low enough. This is useful in a situation where AccountMax is only
+ used as an additional safeguard or to provide statistics.
+ - Add port 6523 (Gobby) to LongLivedPorts. Patch by intrigeri;
+ implements ticket 3439.
+ - 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.
+ - 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.
+ - 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.
+
+ o Minor features (new command-line config behavior):
+ - Slightly change behavior of "list" options (that is, config
+ options that can appear more than once) when they appear both in
+ torrc and on the command line. Previously, the command-line options
+ would be appended to the ones from torrc. Now, the command-line
+ options override the torrc options entirely. This new behavior
+ allows the user to override list options (like exit policies and
+ ports to listen on) from the command line, rather than simply
+ appending to the list.
+ - You can get the old (appending) command-line behavior for "list"
+ options by prefixing the option name with a "+".
+ - You can remove all the values for a "list" option from the command
+ line without adding any new ones by prefixing the option name
+ with a "/".
+
+ o Minor features (controller, new events):
+ - Extend the control protocol to report flags that control a circuit's
+ path selection in CIRC events and in replies to 'GETINFO
+ circuit-status'. Implements part of ticket 2411.
+ - Extend the control protocol to report the hidden service address
+ and current state of a hidden-service-related circuit in CIRC
+ events and in replies to 'GETINFO circuit-status'. Implements part
+ of ticket 2411.
+ - Include the creation time of a circuit in CIRC and CIRC2
+ control-port events and the list produced by the 'GETINFO
+ circuit-status' control-port command.
+ - Add 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.
+ - 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.
+
+ o Minor features (controller, new getinfo options):
+ - Expose our view of whether we have gone dormant to the controller,
+ via a new "GETINFO dormant" value. Torbutton and other controllers
+ can use this to avoid doing periodic requests through Tor while
+ it's dormant (bug 4718). Resolves ticket 5954.
+ - Add a new GETINFO option to get total bytes read and written. Patch
+ from pipe, revised by atagar. Resolves ticket 2345.
+ - Implement new GETINFO controller fields to provide information about
+ the Tor process's pid, euid, username, and resource limits.
+
+ o Minor features (controller, other):
+ - Allow controllers to request an event notification whenever a
+ circuit is cannibalized or its purpose is changed. Implements
+ part of ticket 3457.
+ - Use absolute path names when reporting the torrc filename in the
+ control protocol, so a controller can more easily find the torrc
+ file. Resolves bug 1101.
+ - When reporting the path to the cookie file to the controller,
+ give an absolute path. Resolves ticket 4881.
+
+ o Minor features (log messages):
+ - Add more information to a log statement that might help track down
+ bug 4091. If you're seeing "Bug: tor_addr_is_internal() called with a
+ non-IP address" messages (or any Bug messages, for that matter!),
+ please let us know about it.
+ - If EntryNodes are given, but UseEntryGuards is set to 0, warn that
+ EntryNodes will have no effect. Resolves issue 2571.
+ - Try to make the introductory warning message that Tor prints on
+ startup more useful for actually finding help and information.
+ Resolves ticket 2474.
+ - When the system call to create a listener socket fails, log the
+ error message explaining why. This may help diagnose bug 4027.
+
+ o Minor features (other):
+ - 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.
+ - 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.
+ - 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.
+ - 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".
+ - Shorten links in the tor-exit-notice file. Patch by Christian Kujau.
+
+ o Minor bugfixes (code security):
+ - Prevent a null-pointer dereference when receiving a data cell
+ for a nonexistent stream when the circuit in question has an
+ empty deliver window. We don't believe this is triggerable,
+ since we don't currently allow deliver windows to become empty,
+ but the logic is tricky enough that it's better to make the code
+ robust. Fixes bug 5541; bugfix on 0.0.2pre14.
+ - Fix a (harmless) integer overflow in cell statistics reported by
+ some fast relays. Fixes bug 5849; bugfix on 0.2.2.1-alpha.
+ - Fix our implementation of crypto_random_hostname() so it can't
+ overflow on ridiculously large inputs. (No Tor version has ever
+ provided this kind of bad inputs, but let's be correct in depth.)
+ Fixes bug 4413; bugfix on 0.2.2.9-alpha. Fix by Stephen Palmateer.
+ - Add a (probably redundant) memory clear between iterations of
+ the router status voting loop, to prevent future coding errors
+ where data might leak between iterations of the loop. Resolves
+ ticket 6514.
+
+ o Minor bugfixes (wrapper functions):
+ - 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.
+ - 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.
+ - Enforce correct return behavior of tor_vsscanf() when the '%%'
+ pattern is used. Fixes bug 5558. Bugfix on 0.2.1.13.
+ - Make our replacement implementation of strtok_r() compatible with
+ the standard behavior of strtok_r(). Patch by nils. Fixes bug 5091;
+ bugfix on 0.2.2.1-alpha.
+ - Find more places in the code that should have been testing for
+ invalid sockets using the SOCKET_OK macro. Required for a fix
+ for bug 4533. Bugfix on 0.2.2.28-beta.
+
+ o Minor bugfixes (code correctness):
+ - Check return value of fputs() when writing authority certificate
+ file. Fixes Coverity issue 709056; bugfix on 0.2.0.1-alpha.
+ - When building Tor on Windows with -DUNICODE (not default), ensure
+ that error messages, filenames, and DNS server names are always
+ NUL-terminated when we convert them to a single-byte encoding.
+ Fixes bug 5909; bugfix on 0.2.2.16-alpha.
+ - Fix a memory leak when trying to launch a DNS request when the
+ nameservers are unconfigurable. Fixes bug 5916; bugfix on Tor
+ 0.1.2.1-alpha.
+ - Correct file sizes when reading binary files on Cygwin, to avoid
+ a bug where Tor would fail to read its state file. Fixes bug 6844;
+ bugfix on 0.1.2.7-alpha.
+ - Make sure to set *socket_error in all error cases in
+ connection_connect(), so it can't produce a warning about
+ errno being zero from errno_to_orconn_end_reason(). Bugfix on
+ 0.2.1.1-alpha; resolves ticket 6028.
+ - Initialize conn->addr to a valid state in spawn_cpuworker(). Fixes
+ bug 4532; found by "troll_un".
+
+ o Minor bugfixes (clients):
+ - Allow one-hop directory-fetching circuits the full "circuit build
+ timeout" period, rather than just half of it, before failing them
+ and marking the relay down. This fix should help reduce cases where
+ clients declare relays (or worse, bridges) unreachable because
+ the TLS handshake takes a few seconds to complete. Fixes bug 6743;
+ bugfix on 0.2.2.2-alpha, where we changed the timeout from a static
+ 30 seconds.
+ - Ensure we don't cannibalize circuits that are longer than three hops
+ already, so we don't end up making circuits with 5 or more
+ hops. Patch contributed by wanoskarnet. Fixes bug 5231; bugfix on
+ 0.1.0.1-rc which introduced cannibalization.
+
+ o Minor bugfixes (relays):
+ - 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.
+ - When relays refuse a "create" cell because their queue of pending
+ create cells is too big (typically because their cpu can't keep up
+ with the arrival rate), send back reason "resource limit" rather
+ than reason "internal", so network measurement scripts can get a
+ more accurate picture. Bugfix on 0.1.1.11-alpha; fixes bug 7037.
+ - Exit nodes don't need to fetch certificates for authorities that
+ they don't recognize; only directory authorities, bridges,
+ and caches need to do that. Fixes part of bug 2297; bugfix on
+ 0.2.2.11-alpha.
+
+ o Minor bugfixes (directory authority / mirrors):
+ - Avoid O(n^2) performance characteristics when parsing a large
+ extrainfo cache. Fixes bug 5828; bugfix on 0.2.0.1-alpha.
+ - Authorities no longer include any router in their microdescriptor
+ consensuses for which they couldn't generate or agree on a
+ microdescriptor. Fixes the second piece of bug 6404; fix on
+ 0.2.2.6-alpha.
+ - When checking for requested signatures on the latest consensus
+ before serving it to a client, make sure to check the right
+ consensus flavor. Bugfix on 0.2.2.6-alpha.
+ - Fix an edge case where TestingTorNetwork is set but the authorities
+ and relays all have an uptime of zero, so the private Tor network
+ could briefly lack support for hidden services. Fixes bug 3886;
+ bugfix on 0.2.2.18-alpha.
+ - Directory caches no longer refuse to clean out descriptors because
+ of missing v2 networkstatus documents, unless they're configured
+ to retrieve v2 networkstatus documents. Fixes bug 4838; bugfix on
+ 0.2.2.26-beta. Patch by Daniel Bryg.
+ - Don't serve or accept v2 hidden service descriptors over a relay's
+ DirPort. It's never correct to do so, and disabling it might
+ make it more annoying to exploit any bugs that turn up in the
+ descriptor-parsing code. Fixes bug 7149.
+
+ o Minor bugfixes (hidden services, client-side):
+ - 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.
+ - Avoid undefined behaviour when parsing the list of supported
+ rendezvous/introduction protocols in a hidden service descriptor.
+ Previously, Tor would have confused (as-yet-unused) protocol version
+ numbers greater than 32 with lower ones on many platforms. Fixes
+ bug 6827; bugfix on 0.2.0.10-alpha. Found by George Kadianakis.
+ - Don't close hidden service client circuits which have almost
+ finished connecting to their destination when they reach
+ the normal circuit-build timeout. Previously, we would close
+ introduction circuits which are waiting for an acknowledgement
+ from the introduction point, and rendezvous circuits which have
+ been specified in an INTRODUCE1 cell sent to a hidden service,
+ after the normal CBT. Now, we mark them as 'timed out', and launch
+ another rendezvous attempt in parallel. This behavior change can
+ be disabled using the new CloseHSClientCircuitsImmediatelyOnTimeout
+ option. Fixes part of bug 1297; bugfix on 0.2.2.2-alpha.
+
+ o Minor bugfixes (hidden services, service-side):
+ - Don't close hidden-service-side rendezvous circuits when they
+ reach the normal circuit-build timeout. This behaviour change can
+ be disabled using the new
+ CloseHSServiceRendCircuitsImmediatelyOnTimeout option. Fixes the
+ remaining part of bug 1297; bugfix on 0.2.2.2-alpha.
+ - Don't launch more than 10 service-side introduction-point circuits
+ for a hidden service in five minutes. Previously, we would consider
+ launching more introduction-point circuits if at least one second
+ had passed without any introduction-point circuits failing. Fixes
+ bug 4607; bugfix on 0.0.7pre1.
+
+ o Minor bugfixes (config option behavior):
+ - If the user tries to set MyFamily on a bridge, refuse to
+ do so, and warn about the security implications. Fixes bug 4657;
+ bugfix on 0.2.0.3-alpha.
+ - 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.
+ - Change the AllowDotExit rules so they should actually work.
+ We now enforce AllowDotExit only immediately after receiving an
+ address via SOCKS or DNSPort: other sources are free to provide
+ .exit addresses after the resolution occurs. Fixes bug 3940;
+ bugfix on 0.2.2.1-alpha.
+ - Make "LearnCircuitBuildTimeout 0" work more reliably. Specifically,
+ don't depend on the consensus parameters or compute adaptive
+ timeouts when it is disabled. Fixes bug 5049; bugfix on
+ 0.2.2.14-alpha.
+ - After we pick a directory mirror, we would refuse to use it if
+ it's in our ExcludeExitNodes list, resulting in mysterious failures
+ to bootstrap for people who just wanted to avoid exiting from
+ certain locations. Fixes bug 5623; bugfix on 0.2.2.25-alpha.
+ - When told to add a bridge with the same digest as a preexisting
+ bridge but a different addr:port, change the addr:port as
+ requested. Previously we would not notice the change. Fixes half
+ of bug 5603; fix on 0.2.2.26-beta.
+
+ o Minor bugfixes (controller):
+ - 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.
+ - Report a real bootstrap problem to the controller on router
+ identity mismatch. Previously we just said "foo", which probably
+ made a lot of sense at the time. Fixes bug 4169; bugfix on
+ 0.2.1.1-alpha.
+ - When we receive a SIGHUP and the controller __ReloadTorrcOnSIGHUP
+ option is set to 0 (which Vidalia version 0.2.16 now does when
+ a SAVECONF attempt fails), perform other actions that SIGHUP
+ usually causes (like reopening the logs). Fixes bug 5095; bugfix
+ on 0.2.1.9-alpha.
+ - Correctly handle checking the permissions on the parent
+ directory of a control socket in the root directory. Bug found
+ by Esteban Manchado Velázquez. Fixes bug 5089; bugfix on Tor
+ 0.2.2.26-beta.
+ - End AUTHCHALLENGE error messages (in the control protocol) with
+ a CRLF. Fixes bug 5760; bugfix on 0.2.2.36.
+
+ o Minor bugfixes (network reading/writing):
+ - Disable writing on marked-for-close connections when they are
+ blocked on bandwidth, to prevent busy-looping in Libevent. Fixes
+ bug 5263; bugfix on 0.0.2pre13, where we first added a special
+ case for flushing marked connections.
+ - Make sure that there are no unhandled pending TLS errors before
+ reading from a TLS stream. We had checks in 0.1.0.3-rc, but
+ lost them in 0.1.0.5-rc when we refactored read_to_buf_tls().
+ Bugfix on 0.1.0.5-rc; fixes bug 4528.
+ - Detect SSL handshake even when the initial attempt to write the
+ server hello fails. Fixes bug 4592; bugfix on 0.2.0.13-alpha.
+ - If the client fails to set a reasonable set of ciphersuites
+ during its v2 handshake renegotiation, allow the renegotiation to
+ continue nevertheless (i.e. send all the required certificates).
+ Fixes bug 4591; bugfix on 0.2.0.20-rc.
+
+ o Minor bugfixes (other):
+ - Exit nodes now correctly report EADDRINUSE and EADDRNOTAVAIL as
+ resource exhaustion, so that clients can adjust their load to
+ try other exits. Fixes bug 4710; bugfix on 0.1.0.1-rc, which
+ started using END_STREAM_REASON_RESOURCELIMIT.
+ - Don't check for whether the address we're using for outbound
+ connections has changed until after the outbound connection has
+ completed. On Windows, getsockname() doesn't succeed until the
+ connection is finished. Fixes bug 5374; bugfix on 0.1.1.14-alpha.
+ - Don't hold a Windows file handle open for every file mapping;
+ the file mapping handle is sufficient. Fixes bug 5951; bugfix on
+ 0.1.2.1-alpha.
+ - Fix wrong TCP port range in parse_port_range(). Fixes bug 6218;
+ bugfix on 0.2.1.10-alpha.
+ - If we fail to write a microdescriptor to the disk cache, do not
+ continue replacing the old microdescriptor file. Fixes bug 2954;
+ bugfix on 0.2.2.6-alpha.
+
+ o Minor bugfixes (log messages, path selection):
+ - Downgrade "set buildtimeout to low value" messages to "info"
+ severity; they were never an actual problem, there was never
+ anything reasonable to do about them, and they tended to spam logs
+ from time to time. Fixes bug 6251; bugfix on 0.2.2.2-alpha.
+ - Rate-limit the "Weighted bandwidth is 0.000000" message, and add
+ more information to it, so that we can track it down in case it
+ returns again. Mitigates bug 5235.
+ - Check CircuitBuildTimeout and LearnCircuitBuildTimeout in
+ options_validate(); warn if LearnCircuitBuildTimeout is disabled and
+ CircuitBuildTimeout is set unreasonably low. Resolves ticket 5452.
+ - Issue a log message if a guard completes less than 40% of your
+ circuits. Threshold is configurable by torrc option
+ PathBiasNoticeRate and consensus parameter pb_noticepct. There is
+ additional, off-by-default code to disable guards which fail too
+ many circuits. Addresses ticket 5458.
+
+ o Minor bugfixes (log messages, client):
+ - Downgrade "Got a certificate, but we already have it" log messages
+ from warning to info, except when we're a dirauth. Fixes bug 5238;
+ bugfix on 0.2.1.7-alpha.
+ - Fix the log message describing how we work around discovering
+ that our version is the ill-fated OpenSSL 0.9.8l. Fixes bug
+ 4837; bugfix on 0.2.2.9-alpha.
+ - When logging about a disallowed .exit name, do not also call it
+ an "invalid onion address". Fixes bug 3325; bugfix on 0.2.2.9-alpha.
+ - Fix a log message suggesting that people contact a non-existent
+ email address. Fixes bug 3448.
+ - Rephrase the log message emitted if the TestSocks check is
+ successful. Patch from Fabian Keil; fixes bug 4094.
+ - Log (at debug level) whenever a circuit's purpose is changed.
+ - Log SSL state transitions at log level DEBUG, log domain
+ HANDSHAKE. This can be useful for debugging censorship events.
+ Implements ticket 3264.
+ - We now log which torrc file we're using on startup. Implements
+ ticket 2444.
+ - Rate-limit log messages when asked to connect anonymously to
+ a private address. When these hit, they tended to hit fast and
+ often. Also, don't bother trying to connect to addresses that we
+ are sure will resolve to 127.0.0.1: getting 127.0.0.1 in a directory
+ reply makes us think we have been lied to, even when the address the
+ client tried to connect to was "localhost." Resolves ticket 2822.
+
+ o Minor bugfixes (log messages, non-client):
+ - Downgrade "eventdns rejected address" message to LOG_PROTOCOL_WARN.
+ Fixes bug 5932; bugfix on 0.2.2.7-alpha.
+ - Don't log that we have "decided to publish new relay descriptor"
+ unless we are actually publishing a descriptor. Fixes bug 3942;
+ bugfix on 0.2.2.28-beta.
+ - Log which authority we're missing votes from when we go to fetch
+ them from the other auths.
+ - Replace "Sending publish request" log messages with "Launching
+ upload", so that they no longer confusingly imply that we're
+ sending something to a directory we might not even be connected
+ to yet. Fixes bug 3311; bugfix on 0.2.0.10-alpha.
+ - Warn when Tor is configured to use accounting in a way that can
+ link a hidden service to some other hidden service or public
+ address. Resolves ticket 6490.
+ - Fix a minor formatting issue in one of tor-gencert's error messages.
+ Fixes bug 4574.
+
+ o Testing:
+ - Update to the latest version of the tinytest unit testing framework.
+ This includes a couple of bugfixes that can be relevant for
+ running forked unit tests on Windows, and removes all reserved
+ identifiers.
+ - Avoid a false positive in the util/threads unit test by increasing
+ the maximum timeout time. Fixes bug 6227; bugfix on 0.2.0.4-alpha.
+ - Make it possible to set the TestingTorNetwork configuration
+ option using AlternateDirAuthority and AlternateBridgeAuthority
+ as an alternative to setting DirServer. Addresses ticket 6377.
+ - Add a unit test for the environment_variable_names_equal() function.
+ - A wide variety of new unit tests by Esteban Manchado Velázquez.
+ - 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.
+ - 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.
+
+ o Build improvements:
+ - Use the dead_strip option when building Tor on OS X. This reduces
+ binary size by almost 19% when linking openssl and libevent
+ statically, which we do for Tor Browser Bundle.
+ - Provide a better error message about possible OSX Asciidoc failure
+ reasons. Fixes bug 6436.
+ - Detect attempts to build Tor on (as yet hypothetical) versions
+ of Windows where sizeof(intptr_t) != sizeof(SOCKET). Partial
+ fix for bug 4533. Bugfix on 0.2.2.28-beta.
+ - 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.
+ - Our autogen.sh script now 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.
+ - Running "make version" now displays the version of Tor that
+ we're about to build. Idea from katmagic; resolves issue 4400.
+ - Make 'tor --digests' list hashes of all Tor source files. Bugfix
+ on 0.2.2.4-alpha; fixes bug 3427.
+ - 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.
+ - Limited, experimental support for building with nmake and MSVC.
+
+ o Build requirements:
+ - 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.
+ - 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.
+ - 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.
+
+ o Build fixes (compile/link):
+ - Format more doubles with %f, not %lf. Patch from grarpamp to make
+ Tor build correctly on older BSDs again. Fixes bug 3894; bugfix on
+ Tor 0.2.0.8-alpha.
+ - When building with --enable-static-tor on OpenBSD, do not
+ erroneously attempt to link -lrt. Fixes bug 5103.
+ - Set _WIN32_WINNT to 0x0501 consistently throughout the code, so
+ that IPv6 stuff will compile on MSVC, and compilation issues
+ will be easier to track down. Fixes bug 5861.
+ - Fix build and 64-bit compile warnings from --enable-openbsd-malloc.
+ Fixes bug 6379. Bugfix on 0.2.0.20-rc.
+ - Make Tor build correctly again with -DUNICODE -D_UNICODE defined.
+ Fixes bug 6097; bugfix on 0.2.2.16-alpha.
+
+ o Build fixes (other):
+ - Use the _WIN32 macro throughout our code to detect Windows.
+ (Previously we had used the obsolete 'WIN32' and the idiosyncratic
+ 'MS_WINDOWS'.)
+ - Properly handle the case where the build-tree is not the same
+ as the source tree when generating src/common/common_sha1.i,
+ src/or/micro-revision.i, and src/or/or_sha1.i. Fixes bug 3953;
+ bugfix on 0.2.0.1-alpha.
+ - During configure, search for library containing cos function as
+ libm lives in libcore on some platforms (BeOS/Haiku). Linking
+ against libm was hard-coded before. Fixes the first part of bug
+ 4727; bugfix on 0.2.2.2-alpha. Patch and analysis by Martin Hebnes
+ Pedersen.
+ - Prevent a false positive from the check-spaces script, by disabling
+ the "whitespace between function name and (" check for functions
+ named 'op()'.
+
+ o Packaging (RPM) changes:
+ - Update our default RPM spec files to work with mock and rpmbuild
+ on RHEL/Fedora. They have an updated set of dependencies and
+ conflicts, a fix for an ancient typo when creating the "_tor"
+ user, and better instructions. Thanks to Ondrej Mikle for the
+ patch series. Fixes bug 6043.
+ - 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 refactoring (safety):
+ - Do not use SMARTLIST_FOREACH for any loop whose body exceeds
+ 10 lines. Also, don't nest them. Doing so in the past has
+ led to hard-to-debug code. The new style is to use the
+ SMARTLIST_FOREACH_{BEGIN,END} pair. Addresses issue 6400.
+ - Use macros to indicate OpenSSL versions, so we don't need to worry
+ about accidental hexadecimal bit shifts.
+ - 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.
+ - Convert more instances of tor_snprintf+tor_strdup into tor_asprintf.
+ - Use the smartlist_add_asprintf() alias more consistently.
+
+ o Code refactoring (consolidate):
+ - 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.
+ - Move tor_gettimeofday_cached() into compat_libevent.c, and use
+ Libevent's notion of cached time when possible.
+ - Remove duplicate code for invoking getrlimit() from control.c.
+ - Use OpenSSL's built-in SSL_state_string_long() instead of our
+ own homebrewed ssl_state_to_string() replacement. Patch from
+ Emile Snyder. Fixes bug 4653.
+ - Change the symmetric cipher interface so that creating and
+ initializing a stream cipher are no longer separate functions.
+
+ o Code refactoring (separate):
+ - Make a new "entry connection" struct as an internal subtype of "edge
+ connection", to simplify the code and make exit connections smaller.
+ - Split connection_about_to_close() into separate functions for each
+ connection type.
+ - 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 Code refactoring (name changes):
+ - Rename a handful of old identifiers, mostly related to crypto
+ structures and crypto functions. By convention, our "create an
+ object" functions are called "type_new()", our "free an object"
+ functions are called "type_free()", and our types indicate that
+ they are types only with a final "_t". But a handful of older
+ types and functions broke these rules, with function names like
+ "type_create" or "subsystem_op_type", or with type names like
+ type_env_t.
+ - 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.
+ - Use the name "CERTS" consistently to refer to the new cell type;
+ we were calling it CERT in some places and CERTS in others.
+ - Use a TOR_INVALID_SOCKET macro when initializing a socket to an
+ invalid value, rather than just -1.
+ - 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.
+
+ o Code refactoring (other):
+ - Defensively refactor rend_mid_rendezvous() so that protocol
+ violations and length checks happen in the beginning. Fixes
+ bug 5645.
+ - Remove the pure attribute from all functions that used it
+ previously. In many cases we assigned it incorrectly, because the
+ functions might assert or call impure functions, and we don't have
+ evidence that keeping the pure attribute is worthwhile. Implements
+ changes suggested in ticket 4421.
+ - Move the replay-detection cache for the RSA-encrypted parts of
+ INTRODUCE2 cells to the introduction point data structures.
+ Previously, we would use one replay-detection cache per hidden
+ service. Required by fix for bug 3460.
+ - 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 and files:
+ - Remove all internal support for unpadded RSA. We never used it, and
+ it would be a bad idea to start.
+ - Remove some workaround code for OpenSSL 0.9.6 (which is no longer
+ supported).
+ - Remove some redundant #include directives throughout the code.
+ Patch from Andrea Gelmini.
+ - 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.
+ - 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 relays.
+ - The "torify" script no longer supports the "tsocks" socksifier
+ tool, since tsocks doesn't support DNS and UDP right for Tor.
+ Everyone should be using torsocks instead. Fixes bugs 3530 and
+ 5180. Based on a patch by "ugh".
+ - Remove the torrc.bridge file: we don't use it for anything, and
+ it had become badly desynchronized from torrc.sample. Resolves
+ bug 5622.
+
+ o Documentation:
+ - Begin a doc/state-contents.txt file to explain the contents of
+ the Tor state file. Fixes bug 2987.
+ - Clarify the documentation for the Alternate*Authority options.
+ Fixes bug 6387.
+ - Document the --defaults-torrc option, and the new semantics for
+ overriding, extending, and clearing lists of options. Closes
+ bug 4748.
+ - Add missing man page documentation for consensus and microdesc
+ files. Resolves ticket 6732.
+ - Fix some typos in the manpages. Patch from A. Costa. Fixes bug 6500.
+
+ o Documentation fixes:
+ - Improve the manual's documentation for the NT Service command-line
+ options. Addresses ticket 3964.
+ - Clarify SessionGroup documentation slightly; resolves ticket 5437.
+ - Document the changes to the ORPort and DirPort options, and the
+ fact that {OR/Dir}ListenAddress is now unnecessary (and
+ therefore deprecated). Resolves ticket 5597.
+ - Correct a broken faq link in the INSTALL file. Fixes bug 2307.
+ - Clarify that hidden services are TCP only. Fixes bug 6024.
+
+
+Changes in version 0.2.2.39 - 2012-09-11
+ Tor 0.2.2.39 fixes two more opportunities for remotely triggerable
+ assertions.
+
+ o Security fixes:
+ - Fix an assertion failure in tor_timegm() that could be triggered
+ by a badly formatted directory object. Bug found by fuzzing with
+ Radamsa. Fixes bug 6811; bugfix on 0.2.0.20-rc.
+ - Do not crash when comparing an address with port value 0 to an
+ address policy. This bug could have been used to cause a remote
+ assertion failure by or against directory authorities, or to
+ allow some applications to crash clients. Fixes bug 6690; bugfix
+ on 0.2.1.10-alpha.
+
+
+Changes in version 0.2.2.38 - 2012-08-12
+ Tor 0.2.2.38 fixes a remotely triggerable crash bug, and fixes a timing
+ attack that could in theory leak path information.
+
+ o Security fixes:
+ - Avoid an uninitialized memory read when reading a vote or consensus
+ document that has an unrecognized flavor name. This read could
+ lead to a remote crash bug. Fixes bug 6530; bugfix on 0.2.2.6-alpha.
+ - Try to leak less information about what relays a client is
+ choosing to a side-channel attacker. Previously, a Tor client would
+ stop iterating through the list of available relays as soon as it
+ had chosen one, thus finishing a little earlier when it picked
+ a router earlier in the list. If an attacker can recover this
+ timing information (nontrivial but not proven to be impossible),
+ they could learn some coarse-grained information about which relays
+ a client was picking (middle nodes in particular are likelier to
+ be affected than exits). The timing attack might be mitigated by
+ other factors (see bug 6537 for some discussion), but it's best
+ not to take chances. Fixes bug 6537; bugfix on 0.0.8rc1.
+
+
Changes in version 0.2.2.37 - 2012-06-06
Tor 0.2.2.37 introduces a workaround for a critical renegotiation
bug in OpenSSL 1.0.1 (where 20% of the Tor network can't talk to itself
@@ -294,6 +2631,29 @@ Changes in version 0.2.2.35 - 2011-12-16
by removing an absolute path from makensis.exe command.
+Changes in version 0.2.1.32 - 2011-12-16
+ Tor 0.2.1.32 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.
+
+ The Tor 0.2.1.x series will reach formal end-of-life some time in
+ early 2012; we will stop releasing patches for it then.
+
+ o Major bugfixes (also included in 0.2.2.x):
+ - 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.
+ - Fix a heap overflow bug that could occur when trying to pull
+ data into the first chunk of a buffer, when that chunk had
+ already had some data drained from it. Fixes CVE-2011-2778;
+ bugfix on 0.2.0.16-alpha. Reported by "Vektor".
+
+ o Minor features:
+ - Update to the December 6 2011 Maxmind GeoLite Country database.
+
+
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.
diff --git a/acinclude.m4 b/acinclude.m4
index 9ab684877..7401e0b24 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -1,8 +1,8 @@
-dnl Helper macros for Tor configure.in
+dnl Helper macros for Tor configure.ac
dnl Copyright (c) 2001-2004, Roger Dingledine
dnl Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson
dnl Copyright (c) 2007-2008, Roger Dingledine, Nick Mathewson
-dnl Copyright (c) 2007-2012, The Tor Project, Inc.
+dnl Copyright (c) 2007-2013, The Tor Project, Inc.
dnl See LICENSE for licensing information
AC_DEFUN([TOR_EXTEND_CODEPATH],
@@ -43,6 +43,8 @@ AC_DEFUN([TOR_DEFINE_CODEPATH],
])
dnl 1:flags
+dnl 2:also try to link (yes: non-empty string)
+dnl will set yes or no in $tor_can_link_$1 (as modified by AS_VAR_PUSHDEF)
AC_DEFUN([TOR_CHECK_CFLAGS], [
AS_VAR_PUSHDEF([VAR],[tor_cv_cflags_$1])
AC_CACHE_CHECK([whether the compiler accepts $1], VAR, [
@@ -51,6 +53,13 @@ AC_DEFUN([TOR_CHECK_CFLAGS], [
AC_TRY_COMPILE([], [return 0;],
[AS_VAR_SET(VAR,yes)],
[AS_VAR_SET(VAR,no)])
+ if test x$2 != x; then
+ AS_VAR_PUSHDEF([can_link],[tor_can_link_$1])
+ AC_TRY_LINK([], [return 0;],
+ [AS_VAR_SET(can_link,yes)],
+ [AS_VAR_SET(can_link,no)])
+ AS_VAR_POPDEF([can_link])
+ fi
CFLAGS="$tor_saved_CFLAGS"
])
if test x$VAR = xyes; then
@@ -106,7 +115,7 @@ if test -f /etc/fedora-release && test x"$tor_$1_$2_redhat" != x; then
fi
else
if test -f /etc/redhat-release && test x"$tor_$1_$2_redhat" != x; then
- AC_WARN([On most Redhat-based systems, you can get$h $1 by installing the $tor_$1_$2_redhat" RPM package])
+ AC_WARN([On most Redhat-based systems, you can get$h $1 by installing the $tor_$1_$2_redhat RPM package])
if test x"$tor_$1_$2_redhat" != x"$tor_$1_devpkg_redhat"; then
AC_WARN([ You will probably need to install $tor_$1_devpkg_redhat too.])
fi
diff --git a/autogen.sh b/autogen.sh
index 0592f16c2..8c43a9798 100755
--- a/autogen.sh
+++ b/autogen.sh
@@ -1,13 +1,23 @@
#!/bin/sh
if [ -x "`which autoreconf 2>/dev/null`" ] ; then
- exec autoreconf -ivf
+ opt="-if"
+
+ for i in $@; do
+ case "$i" in
+ -v)
+ opt=$opt"v"
+ ;;
+ esac
+ done
+
+ exec autoreconf $opt
fi
set -e
# Run this to generate all the initial makefiles, etc.
-aclocal && \
+aclocal -I m4 && \
autoheader && \
autoconf && \
automake --add-missing --copy
diff --git a/changes/bug10405 b/changes/bug10405
new file mode 100644
index 000000000..d1110e44e
--- /dev/null
+++ b/changes/bug10405
@@ -0,0 +1,5 @@
+ o Minor bugfixes:
+ - Avoid "Tried to open a socket with DisableNetwork set" warnings
+ when starting a client with bridges configured and DisableNetwork
+ set. (Tor launcher starts Tor with DisableNetwork set the first
+ time.) Fixes bug 10405; bugfix on 0.2.3.9-alpha.
diff --git a/changes/bug10616 b/changes/bug10616
new file mode 100644
index 000000000..26f0bda85
--- /dev/null
+++ b/changes/bug10616
@@ -0,0 +1,4 @@
+ o Bugfixes:
+ - Squelch a spurious LD_BUG message "No origin circuit for successful
+ SOCKS stream" in certain hidden service failure cases; fixes bug
+ #10616.
diff --git a/changes/bug12169_simple b/changes/bug12169_simple
new file mode 100644
index 000000000..f9a300775
--- /dev/null
+++ b/changes/bug12169_simple
@@ -0,0 +1,5 @@
+ o Minor bugfixes (performance):
+ - Avoid using tor_memeq() for checking relay cell integrity.
+ This removes a possible performance bottleneck. Fixes part of bug
+ 12169; bugfix on 0.2.1.31.
+
diff --git a/changes/bug12170 b/changes/bug12170
new file mode 100644
index 000000000..e462e4fa7
--- /dev/null
+++ b/changes/bug12170
@@ -0,0 +1,11 @@
+ o Major bugfixes (performance):
+ - Do not recompute whether we have sufficient information to build
+ circuits every time we make a successful connection. Previously,
+ we would forget our cached value for this flag every time we
+ successfully opened a channel (or marked a router as running or not
+ running for any
+ other reason), regardless of whether we had
+ previously believed the router to be running. This forced us to
+ run a fairly expensive update operation with relatively
+ high frequency.
+ Fixes bug 12170; bugfix on 0.1.2.1-alpha.
diff --git a/changes/bug12195 b/changes/bug12195
new file mode 100644
index 000000000..f798129e6
--- /dev/null
+++ b/changes/bug12195
@@ -0,0 +1,7 @@
+ o Major bugfixes:
+ - When a circuit accidentally has the same circuit ID for its
+ forward and reverse direction, correctly detect the direction of
+ cells using that circuit. Previously, this would have made
+ roughly one circuit in a million non-functional. Fixes bug
+ 12195; this is a bugfix on every version of Tor.
+
diff --git a/changes/bug12227 b/changes/bug12227
new file mode 100644
index 000000000..d8b5d08a5
--- /dev/null
+++ b/changes/bug12227
@@ -0,0 +1,5 @@
+ o Minor bugfixes:
+ - Avoid an illegal read from stack when initializing the TLS
+ module using a version of OpenSSL without all of the ciphers
+ used by the v2 link handshake. Fixes bug 12227; bugfix on
+ 0.2.4.8-alpha. Found by "starlight".
diff --git a/changes/bug6024 b/changes/bug6024
deleted file mode 100644
index 743e6ef1f..000000000
--- a/changes/bug6024
+++ /dev/null
@@ -1,2 +0,0 @@
- o Documentation fixes:
- - Clarify that hidden services are TCP only. Fixes bug 6024.
diff --git a/changes/bug6043 b/changes/bug6043
deleted file mode 100644
index b88bafb78..000000000
--- a/changes/bug6043
+++ /dev/null
@@ -1,6 +0,0 @@
- o Packaging (RPM):
- - Our default RPM spec files have been updated to work with mock
- and rpmbuild on RHEL/Fedora. They have an updated set of
- dependencies and conflicts, a fix for an ancient typo when creating
- the "_tor" user, and better instructions. Thanks to Ondrej
- Mikle for the patch series; fix for bug 6043.
diff --git a/changes/bug6218 b/changes/bug6218
deleted file mode 100644
index 5d5d108b0..000000000
--- a/changes/bug6218
+++ /dev/null
@@ -1,3 +0,0 @@
- o Minor bugfixes:
- - Fix wrong TCP port range in parse_port_range(). Fixes bug 6218;
- bugfix on 0.2.1.10-alpha.
diff --git a/changes/bug6244_part_c b/changes/bug6244_part_c
deleted file mode 100644
index dea6e7b69..000000000
--- a/changes/bug6244_part_c
+++ /dev/null
@@ -1,6 +0,0 @@
- o Major bugfixes (controller):
- - Make wildcarded addresses (that is, ones beginning with *.) work when
- provided via the controller's MapAddress command. Previously, they
- were accepted, but we never actually noticed that they were wildcards.
- Fix for bug 6244; bugfix on 0.2.3.9-alpha.
-
diff --git a/changes/bug6251 b/changes/bug6251
deleted file mode 100644
index c782a93e4..000000000
--- a/changes/bug6251
+++ /dev/null
@@ -1,6 +0,0 @@
- o Minor bugfixes:
- - Downgrade "set buildtimeout to low value" messages to INFO
- severity; they were never an actual problem, there was never
- anything reasonable to do about them, and they tended to spam
- logs from time to time. Fix for bug 6251; bugfix on
- 0.2.2.2-alpha. \ No newline at end of file
diff --git a/changes/bug6252_again b/changes/bug6252_again
deleted file mode 100644
index f7fd00cb3..000000000
--- a/changes/bug6252_again
+++ /dev/null
@@ -1,11 +0,0 @@
- o Security fixes:
- - Tear down the circuit if we get an unexpected SENDME cell. Clients
- could use this trick to make their circuits receive cells faster
- than our flow control would have allowed, or to gum up the network,
- or possibly to do targeted memory denial-of-service attacks on
- entry nodes. Fixes bug 6252. Bugfix on the 54th commit on Tor --
- from July 2002, before the release of Tor 0.0.0. We had committed
- this patch previously, but we had to revert it because of bug 6271.
- Now that 6271 is fixed, this appears to work.
-
-
diff --git a/changes/bug6271 b/changes/bug6271
deleted file mode 100644
index 06b129f73..000000000
--- a/changes/bug6271
+++ /dev/null
@@ -1,7 +0,0 @@
- o Major bugfixes
-
- - Fix a bug handling SENDME cells on nonexistent streams that
- could result in bizarre window values. Report and patch
- contributed pseudymously. Fixes part of bug 6271. This bug
- was introduced before the first Tor release, in svn commit
- r152.
diff --git a/changes/bug6274 b/changes/bug6274
deleted file mode 100644
index ad1abcde5..000000000
--- a/changes/bug6274
+++ /dev/null
@@ -1,3 +0,0 @@
- o Minor bugfixes:
- - Ignore ServerTransportPlugin lines when Tor is not configured as
- a relay. Fixes bug 6274; bugfix on 0.2.3.6-alpha.
diff --git a/changes/bug6274_2 b/changes/bug6274_2
deleted file mode 100644
index 89576f932..000000000
--- a/changes/bug6274_2
+++ /dev/null
@@ -1,3 +0,0 @@
- o Minor features:
- - Terminate active server managed proxies if Tor stops being a
- relay. Addresses parts of bug 6274; bugfix on 0.2.3.6-alpha.
diff --git a/changes/bug6296 b/changes/bug6296
deleted file mode 100644
index b452b1745..000000000
--- a/changes/bug6296
+++ /dev/null
@@ -1,4 +0,0 @@
- o Minor bugfixes:
-
- - Instead of ENOBUFS on Windows, say WSAENOBUFS. Fixes
- compilation on Windows. Fixes bug 6296; bugfix on 0.2.3.18-rc.
diff --git a/changes/bug6341 b/changes/bug6341
deleted file mode 100644
index 04e52c7cd..000000000
--- a/changes/bug6341
+++ /dev/null
@@ -1,5 +0,0 @@
- o Major bugfixes:
- - Fix a possible crash bug when checking for deactivated circuits
- in connection_or_flush_from_first_active_circuit(). Fixes bug
- 6341; bugfix on 0.2.2.7-alpha. Bug report and fix received
- pseudonymously.
diff --git a/changes/bug6377 b/changes/bug6377
deleted file mode 100644
index a3a367278..000000000
--- a/changes/bug6377
+++ /dev/null
@@ -1,4 +0,0 @@
- o Testing:
- - Make it possible to set the TestingTorNetwork configuration
- option using AlternateDirAuthority and AlternateBridgeAuthority
- as an alternative to setting DirServer.
diff --git a/changes/bug6379 b/changes/bug6379
deleted file mode 100644
index 1f2b6941c..000000000
--- a/changes/bug6379
+++ /dev/null
@@ -1,6 +0,0 @@
- o Minor bugfixes:
- - Fix build warnings from --enable-openbsd-malloc with gcc warnings
- enabled. Fixes bug 6379.
- - Fix 64-bit warnings from --enable-openbsd-malloc. Fixes bug 6379.
- Bugfix on 0.2.0.20-rc.
-
diff --git a/changes/bug6387 b/changes/bug6387
deleted file mode 100644
index 73fc4f7cf..000000000
--- a/changes/bug6387
+++ /dev/null
@@ -1,3 +0,0 @@
- o Documentation:
- - Clarify the documentation for the Alternate*Authority options.
- Fixes bug 6387.
diff --git a/changes/bug6397 b/changes/bug6397
deleted file mode 100644
index 23d8359bd..000000000
--- a/changes/bug6397
+++ /dev/null
@@ -1,4 +0,0 @@
- o Major bugfixes:
- - When disabling guards for having too high a proportion of failed
- circuits, make sure to look at each guard. Fix for bug 6397; bugfix
- on 0.2.3.17-beta.
diff --git a/changes/bug6404 b/changes/bug6404
deleted file mode 100644
index 948f00b92..000000000
--- a/changes/bug6404
+++ /dev/null
@@ -1,16 +0,0 @@
- o Minor bugfixes:
-
- - Remove the maximum length of microdescriptor we are willing to
- generate. Occasionally this is needed for routers
- with complex policies or family declarations. Partial fix for
- bug 6404; fix on 0.2.2.6-alpha.
-
- - Authorities no longer include any router in their
- microdescriptor consensuses for which they couldn't generate or
- agree on a microdescriptor. Partial fix for bug 6404; fix on
- 0.2.2.6-alpha.
-
- - Move log message when unable to find a microdesc in a
- routerstatus entry to parse time. Previously we'd spam this
- warning every time we tried to figure out which microdescriptors
- to download. Partial fix for bug 6404; fix on 0.2.3.18-rc.
diff --git a/changes/bug6423 b/changes/bug6423
deleted file mode 100644
index 2ea4f1410..000000000
--- a/changes/bug6423
+++ /dev/null
@@ -1,3 +0,0 @@
- o Minor features:
- - Consider new, removed or changed IPv6 OR ports a non cosmetic
- change.
diff --git a/changes/bug6436 b/changes/bug6436
deleted file mode 100644
index 2c163df10..000000000
--- a/changes/bug6436
+++ /dev/null
@@ -1,3 +0,0 @@
- o Minor features:
- - Provide a better error message about possible OSX Asciidoc failure
- reasons. Fix for bug 6436.
diff --git a/changes/bug6472 b/changes/bug6472
deleted file mode 100644
index dcd42ebe6..000000000
--- a/changes/bug6472
+++ /dev/null
@@ -1,4 +0,0 @@
- o Minor bugfixes:
- - Avoid a pair of double-free and use-after-mark bugs that can
- occur with certain timings in canceled and re-received DNS
- requests. Fix for bug 6472; bugfix on 0.0.7rc1.
diff --git a/changes/bug6475 b/changes/bug6475
deleted file mode 100644
index 67bab9962..000000000
--- a/changes/bug6475
+++ /dev/null
@@ -1,6 +0,0 @@
- o Minor bugfixes:
- - Add internal circuit construction state to protect against
- the noisy warn message "Unexpectedly high circuit_successes".
- Also add some additional rate-limited notice messages to help
- determine the root cause of the warn. Fixes bug 6475.
- Bugfix against 0.2.3.17-beta.
diff --git a/changes/bug6480 b/changes/bug6480
deleted file mode 100644
index 83ae00b25..000000000
--- a/changes/bug6480
+++ /dev/null
@@ -1,5 +0,0 @@
- o Major bugfixes:
- - Avoid read-from-freed-RAM bug and related double-free bug that
- could occur when a DNS request fails while launching it. Fixes
- bug 6480; bugfix on 0.2.0.1-alpha.
-
diff --git a/changes/bug6490 b/changes/bug6490
deleted file mode 100644
index c92daad8f..000000000
--- a/changes/bug6490
+++ /dev/null
@@ -1,4 +0,0 @@
- o Minor features:
- - Warn when Tor is configured to use accounting in a way that will
- link a hidden service to some other hidden service or public
- address. Fix for bug 6490.
diff --git a/changes/bug6500 b/changes/bug6500
deleted file mode 100644
index cac2054a3..000000000
--- a/changes/bug6500
+++ /dev/null
@@ -1,2 +0,0 @@
- o Minor bugfixes:
- - Fix some typos in the manpages. Patch from A. Costa. Fixes bug 6500.
diff --git a/changes/bug6507 b/changes/bug6507
deleted file mode 100644
index 89940cbf7..000000000
--- a/changes/bug6507
+++ /dev/null
@@ -1,15 +0,0 @@
- o Major bugfixes:
- - Detect 'ORPort 0' as meaning, uniformly, that we're not running
- as a server. Previously, some of our code would treat the
- presence of any ORPort line as meaning that we should act like a
- server, even though our new listener code would correctly not
- open any ORPorts for ORPort 0. Similar bugs in other Port
- options are also fixed. Fixes bug 6507; bugfix on 0.2.3.3-alpha.
-
- o Minor features:
-
- - Detect and reject attempts to specify both 'FooPort' and
- 'FooPort 0' in the same configuration domain. (It's still okay
- to have a FooPort in your configuration file,and use 'FooPort 0'
- on the command line to disable it.) Fixes another case of
- bug6507; bugfix on 0.2.3.3-alpha.
diff --git a/changes/bug6514 b/changes/bug6514
deleted file mode 100644
index 84633bd27..000000000
--- a/changes/bug6514
+++ /dev/null
@@ -1,5 +0,0 @@
- o Minor bugfixes:
- - Add a (probably redundant) memory clear between iterations of
- the router status voting loop, to prevent future coding errors
- where data might leak between iterations of the loop. Resolves
- ticket 6514.
diff --git a/changes/bug6530 b/changes/bug6530
deleted file mode 100644
index 825bbb752..000000000
--- a/changes/bug6530
+++ /dev/null
@@ -1,5 +0,0 @@
- o Major security fixes:
- - Avoid a read of uninitializd RAM when reading a vote or consensus
- document with an unrecognized flavor name. This could lead to a
- remote crash bug. Fixes bug 6530; bugfix on 0.2.2.6-alpha.
-
diff --git a/changes/bug6690 b/changes/bug6690
deleted file mode 100644
index 99d42976e..000000000
--- a/changes/bug6690
+++ /dev/null
@@ -1,7 +0,0 @@
- o Major bugfixes (security):
- - Do not crash when comparing an address with port value 0 to an
- address policy. This bug could have been used to cause a remote
- assertion failure by or against directory authorities, or to
- allow some applications to crash clients. Fixes bug 6690; bugfix
- on 0.2.1.10-alpha.
-
diff --git a/changes/bug6710 b/changes/bug6710
deleted file mode 100644
index 2c8934611..000000000
--- a/changes/bug6710
+++ /dev/null
@@ -1,6 +0,0 @@
- o Major bugfixes (security):
- - Reject any attempt to extend to an internal address. Without
- this fix, a router could be used to probe addresses on an
- internal network to see whether they were accepting
- connections. Fix for bug 6710; bugfix on 0.0.8pre1.
-
diff --git a/changes/bug6732 b/changes/bug6732
deleted file mode 100644
index 7a744e014..000000000
--- a/changes/bug6732
+++ /dev/null
@@ -1,3 +0,0 @@
- o Documentation:
- - Add missing documentation for consensus and microdesc files. Fix for
- bug 6732.
diff --git a/changes/bug6743 b/changes/bug6743
deleted file mode 100644
index 6ec78f853..000000000
--- a/changes/bug6743
+++ /dev/null
@@ -1,9 +0,0 @@
- o Minor bugfixes:
- - Allow one-hop directory fetching circuits the full "circuit build
- timeout" period, rather than just half of it, before failing them
- and marking the relay down. This fix should help reduce cases where
- clients declare relays (or worse, bridges) unreachable because
- the TLS handshake takes a few seconds to complete. Fixes bug 6743;
- bugfix on 0.2.2.2-alpha, where we changed the timeout from a static
- 30 seconds.
-
diff --git a/changes/bug6774 b/changes/bug6774
deleted file mode 100644
index 0c137fd67..000000000
--- a/changes/bug6774
+++ /dev/null
@@ -1,4 +0,0 @@
- o Minor bugfixes:
- - Avoid crashing on a malformed state file where EntryGuardPathBias
- precedes EntryGuard. Fix for bug 6774; bugfix on 0.2.3.17-beta.
-
diff --git a/changes/bug6801 b/changes/bug6801
deleted file mode 100644
index ef21acc98..000000000
--- a/changes/bug6801
+++ /dev/null
@@ -1,5 +0,0 @@
- o Minor bugfixes:
- - Avoid segfault when starting up having run with an extremely old
- version of Tor and parsing its state file. Fixes bug 6801; bugfix on
- 0.2.2.23-alpha.
-
diff --git a/changes/bug6811 b/changes/bug6811
deleted file mode 100644
index 841ec1c54..000000000
--- a/changes/bug6811
+++ /dev/null
@@ -1,5 +0,0 @@
- o Major security fixes:
- - Fix an assertion failure in tor_timegm that could be triggered
- by a badly formatted directory object. Bug found by fuzzing with
- Radamsa. Fixes bug 6811; bugfix on 0.2.0.20-rc.
-
diff --git a/changes/bug6827 b/changes/bug6827
deleted file mode 100644
index bf71d2b97..000000000
--- a/changes/bug6827
+++ /dev/null
@@ -1,9 +0,0 @@
- o Minor bugfixes:
-
- - Avoid undefined behaviour when parsing the list of supported
- rendezvous/introduction protocols in a hidden service
- descriptor. Previously, Tor would have confused (as-yet-unused)
- protocol version numbers greater than 32 with lower ones on many
- platforms. Fixes bug 6827; bugfix on 0.2.0.10-alpha; found by
- George Kadianakis.
-
diff --git a/changes/bug6844 b/changes/bug6844
deleted file mode 100644
index 338e19d9a..000000000
--- a/changes/bug6844
+++ /dev/null
@@ -1,4 +0,0 @@
- o Minor bugfixes:
- - Correct file sizes when reading binary files on
- Cygwin, to avoid a bug where Tor would fail to read its state file.
- Fixes bug 6844; bugfix on 0.1.2.7-alpha.
diff --git a/changes/bug6866 b/changes/bug6866
deleted file mode 100644
index 561676b76..000000000
--- a/changes/bug6866
+++ /dev/null
@@ -1,4 +0,0 @@
- o Minor bugfixes:
- - Convert an assert in the pathbias code to a log message. Assert
- appears to only be triggerable by Tor2Web mode. Fixes bug 6866;
- bugfix on 0.2.3.17-beta.
diff --git a/changes/bug7014 b/changes/bug7014
deleted file mode 100644
index 1d39103a5..000000000
--- a/changes/bug7014
+++ /dev/null
@@ -1,5 +0,0 @@
- o Minor bugfixes:
- - Fix two cases in src/or/transports.c where we were calling
- fmt_addr() twice in a parameter list. Bug found by David
- Fifield. Fixes bug 7014; bugfix on 0.2.3.9-alpha.
-
diff --git a/changes/bug7022 b/changes/bug7022
deleted file mode 100644
index 10ac35472..000000000
--- a/changes/bug7022
+++ /dev/null
@@ -1,3 +0,0 @@
- o Minor bugfixes:
- - Fix memory leaks whenever we logged any message about the "path
- bias" detection. Fixes bug 7022; bugfix on 0.2.3.21-rc.
diff --git a/changes/bug7037 b/changes/bug7037
deleted file mode 100644
index fc3a1ad1c..000000000
--- a/changes/bug7037
+++ /dev/null
@@ -1,6 +0,0 @@
- o Minor bugfixes:
- - When relays refuse a "create" cell because their queue of pending
- create cells is too big (typically because their cpu can't keep up
- with the arrival rate), send back reason "resource limit" rather
- than reason "internal", so network measurement scripts can get a
- more accurate picture. Bugfix on 0.1.1.11-alpha; fixes bug 7037.
diff --git a/changes/bug7139 b/changes/bug7139
deleted file mode 100644
index dfb7d3283..000000000
--- a/changes/bug7139
+++ /dev/null
@@ -1,9 +0,0 @@
- o Major bugfixes (security):
-
- - Disable TLS session tickets. OpenSSL's implementation were giving
- our TLS session keys the lifetime of our TLS context objects, when
- perfect forward secrecy would want us to discard anything that
- could decrypt a link connection as soon as the link connection was
- closed. Fixes bug 7139; bugfix on all versions of Tor linked
- against OpenSSL 1.0.0 or later. Found by "nextgens".
-
diff --git a/changes/bug7190 b/changes/bug7190
deleted file mode 100644
index 1607f7944..000000000
--- a/changes/bug7190
+++ /dev/null
@@ -1,6 +0,0 @@
- o Minor bugfixes:
- - Clients now consider the ClientRejectInternalAddresses config option
- when using a microdescriptor consensus stanza to decide whether
- an exit relay would allow exiting to an internal address. Fixes
- bug 7190; bugfix on 0.2.3.1-alpha.
-
diff --git a/changes/bug7191 b/changes/bug7191
deleted file mode 100644
index a3bee6e5f..000000000
--- a/changes/bug7191
+++ /dev/null
@@ -1,5 +0,0 @@
- o Major bugfixes:
- - Fix a denial of service attack by which any directory authority
- could crash all the others, or by which a single v2 directory
- authority could crash everybody downloading v2 directory
- information. Fixes bug 7191; bugfix on 0.2.0.10-alpha.
diff --git a/changes/bug7192 b/changes/bug7192
deleted file mode 100644
index 10cbc2469..000000000
--- a/changes/bug7192
+++ /dev/null
@@ -1,10 +0,0 @@
- o Major bugfixes:
- - When parsing exit policy summaries from microdescriptors, we had
- previously been ignoring the last character in each one, so that
- "accept 80,443,8080" would be treated by clients as indicating a
- node that allows access to ports 80, 443, and 808. That would lead
- to clients attempting connections that could never work, and
- ignoring exit nodes that would support their connections. Now clients
- parse these exit policy summaries correctly. Fixes bug 7192;
- bugfix on 0.2.3.1-alpha.
-
diff --git a/changes/bug7352 b/changes/bug7352
deleted file mode 100644
index 74a878dbe..000000000
--- a/changes/bug7352
+++ /dev/null
@@ -1,12 +0,0 @@
- o Major bugfixes:
- - Tor tries to wipe potentially sensitive data after using it, so
- that if some subsequent security failure exposes Tor's memory,
- the damage will be limited. But we had a bug where the compiler
- was eliminating these wipe operations when it decided that the
- memory was no longer visible to a (correctly running) program,
- hence defeating our attempt at defense in depth. We fix that
- by using OpenSSL's OPENSSL_cleanse() operation, which a compiler
- is unlikely to optimize away. Future versions of Tor may use
- a less ridiculously heavy approach for this. Fixes bug 7352.
- Reported in an article by Andrey Karpov.
-
diff --git a/changes/bug7464 b/changes/bug7464
deleted file mode 100644
index 9259cc74a..000000000
--- a/changes/bug7464
+++ /dev/null
@@ -1,4 +0,0 @@
- o Minor bugfixes:
- - Fix a harmless bug when opting against publishing a relay descriptor
- because DisableNetwork is set. Fixes bug 7464; bugfix on
- 0.2.3.9-alpha.
diff --git a/changes/bug7889 b/changes/bug7889
deleted file mode 100644
index ce99a59ce..000000000
--- a/changes/bug7889
+++ /dev/null
@@ -1,8 +0,0 @@
- o Major bugfixes:
- - Reject bogus create and relay cells with 0 circuit ID or 0 stream
- ID: these could be used to create unexpected streams and circuits
- which would count as "present" to some parts of Tor but "absent"
- to others, leading to zombie circuits and streams or to a
- bandwidth DOS. Fixes bug 7889; bugfix on every released version of
- Tor. Reported by "oftc_must_be_destroyed".
-
diff --git a/changes/bug8208 b/changes/bug8208
deleted file mode 100644
index c85db90b5..000000000
--- a/changes/bug8208
+++ /dev/null
@@ -1,4 +0,0 @@
- o Minor bugfixes:
- - Avoid a crash if we fail to generate an extrinfo descriptor.
- Fixes bug 8208; bugfix on 0.2.3.16-alpha. Found by Coverity;
- this is CID 718634.
diff --git a/changes/bug8377 b/changes/bug8377
deleted file mode 100644
index c9ad151bc..000000000
--- a/changes/bug8377
+++ /dev/null
@@ -1,3 +0,0 @@
- o Minor bugfixes:
- - Correctly recognize that [::1] is a loopback address. Fixes bug #8377;
- bugfix on 0.2.1.3-alpha.
diff --git a/changes/cov709056 b/changes/cov709056
deleted file mode 100644
index 64a75ad8a..000000000
--- a/changes/cov709056
+++ /dev/null
@@ -1,4 +0,0 @@
- o Minor bugfixes:
- - Check return value of fputs() when writing authority certificate
- file. Fixes Coverity issue 709056; bugfix on 0.2.0.1-alpha.
-
diff --git a/changes/cve-2012-2249 b/changes/cve-2012-2249
deleted file mode 100644
index 625bfa2f5..000000000
--- a/changes/cve-2012-2249
+++ /dev/null
@@ -1,5 +0,0 @@
- o Major bugfixes (security):
- - Discard extraneous renegotiation attempts once the V3 link
- protocol has been initiated. Failure to do so left us open to
- a remotely triggerable assertion failure. Fixes CVE-2012-2249;
- bugfix on 0.2.3.6-alpha. Reported by "some guy from France".
diff --git a/changes/dirserv-BUGGY-a b/changes/dirserv-BUGGY-a
deleted file mode 100644
index 35b492a2d..000000000
--- a/changes/dirserv-BUGGY-a
+++ /dev/null
@@ -1,7 +0,0 @@
- o Minor bugfixes:
-
- - Don't serve or accept v2 hidden service descriptors over a
- relay's DirPort. It's never correct to do so, and disabling it
- might make it more annoying to exploit any bugs that turn up in the
- descriptor-parsing code. Fixes bug 7149.
-
diff --git a/changes/disable_pathbias_messages b/changes/disable_pathbias_messages
deleted file mode 100644
index 3bc996347..000000000
--- a/changes/disable_pathbias_messages
+++ /dev/null
@@ -1,3 +0,0 @@
- o Disabeled features
- - Downgrade path-bias warning messages to INFO. We'll try to get them
- working better in 0.2.4. Fixes bug 6475; bugfix on 0.2.3.17-beta.
diff --git a/changes/geoip-dec2012 b/changes/geoip-dec2012
deleted file mode 100644
index 26431c2e8..000000000
--- a/changes/geoip-dec2012
+++ /dev/null
@@ -1,3 +0,0 @@
- o Minor features:
- - Update to the December 5 2012 Maxmind GeoLite Country database.
-
diff --git a/changes/geoip-feb2013 b/changes/geoip-feb2013
deleted file mode 100644
index b5d794258..000000000
--- a/changes/geoip-feb2013
+++ /dev/null
@@ -1,3 +0,0 @@
- o Minor features:
- - Update to the February 6 2013 Maxmind GeoLite Country database.
-
diff --git a/changes/geoip-jan2013 b/changes/geoip-jan2013
deleted file mode 100644
index 45e5a150c..000000000
--- a/changes/geoip-jan2013
+++ /dev/null
@@ -1,3 +0,0 @@
- o Minor features:
- - Update to the January 2 2013 Maxmind GeoLite Country database.
-
diff --git a/changes/geoip-mar2013 b/changes/geoip-mar2013
deleted file mode 100644
index e9cc3981b..000000000
--- a/changes/geoip-mar2013
+++ /dev/null
@@ -1,3 +0,0 @@
- o Minor features:
- - Update to the March 6 2013 Maxmind GeoLite Country database.
-
diff --git a/changes/geoip-nov2012 b/changes/geoip-nov2012
deleted file mode 100644
index 22e7bace5..000000000
--- a/changes/geoip-nov2012
+++ /dev/null
@@ -1,3 +0,0 @@
- o Minor features:
- - Update to the November 7 2012 Maxmind GeoLite Country database.
-
diff --git a/changes/geoip6-june2014 b/changes/geoip6-june2014
new file mode 100644
index 000000000..1a33e6fb4
--- /dev/null
+++ b/changes/geoip6-june2014
@@ -0,0 +1,2 @@
+ o Minor features:
+ - Update geoip and geoip6 to the June 4 2014 Maxmind GeoLite2 Country database.
diff --git a/changes/link_negotiation_assert b/changes/link_negotiation_assert
deleted file mode 100644
index 398a54557..000000000
--- a/changes/link_negotiation_assert
+++ /dev/null
@@ -1,6 +0,0 @@
- o Major bugfixs (security):
- - Fix a group of remotely triggerable assertion failures related to
- incorrect link protocol negotiation. Found, diagnosed, and fixed
- by "some guy from France." Fix for CVE-2012-2250; bugfix on
- 0.2.3.6-alpha.
-
diff --git a/changes/more_8387_diagnosis b/changes/more_8387_diagnosis
new file mode 100644
index 000000000..68a36a113
--- /dev/null
+++ b/changes/more_8387_diagnosis
@@ -0,0 +1,4 @@
+ o Minor features (diagnostic):
+ - Improve the diagnostic log message for bug #8387 even further to
+ try to improve our odds of figuring out why one-hop directory
+ circuits sometimes do not get closed.
diff --git a/changes/pathsel-BUGGY-a b/changes/pathsel-BUGGY-a
deleted file mode 100644
index 2e642c795..000000000
--- a/changes/pathsel-BUGGY-a
+++ /dev/null
@@ -1,14 +0,0 @@
- o Security fixes:
-
- - Try to leak less information about what relays a client is
- choosing to a side-channel attacker. Previously, a Tor client
- would stop iterating through the list of available relays as
- soon as it had chosen one, thus finishing a little earlier
- when it picked a router earlier in the list. If an attacker
- can recover this timing information (nontrivial but not
- proven to be impossible), they could learn some coarse-
- grained information about which relays a client was picking
- (middle nodes in particular are likelier to be affected than
- exits). The timing attack might be mitigated by other factors
- (see bug #6537 for some discussion), but it's best not to
- take chances. Fixes bug 6537; bugfix on 0.0.8rc1.
diff --git a/changes/port_doc b/changes/port_doc
deleted file mode 100644
index 0e8662f0a..000000000
--- a/changes/port_doc
+++ /dev/null
@@ -1,3 +0,0 @@
- o Minor features (usability):
- - Try to make the warning when giving an obsolete SOCKSListenAddress
- a littel more useful.
diff --git a/changes/revert-geoip-may2012 b/changes/revert-geoip-may2012
deleted file mode 100644
index e420947a3..000000000
--- a/changes/revert-geoip-may2012
+++ /dev/null
@@ -1,6 +0,0 @@
- o Major bugfixes:
- - Revert to the May 1 2012 Maxmind GeoLite Country database. In the
- June 2012 database, Maxmind marked many Tor relays as country "A1",
- which will cause risky behavior for clients that set EntryNodes
- or ExitNodes. Addresses bug 6334; bugfix on 0.2.3.17-beta.
-
diff --git a/changes/smartlist_foreach b/changes/smartlist_foreach
deleted file mode 100644
index 2fd3a1a85..000000000
--- a/changes/smartlist_foreach
+++ /dev/null
@@ -1,8 +0,0 @@
- o Code simplification and refactoring:
- - Do not use SMARTLIST_FOREACH for any loop whose body exceeds
- 10 lines. Doing so in the past has led to hard-to-debug code.
- The new style is to use the SMARTLIST_FOREACH_{BEGIN,END} pair.
- Issue 6400.
- - Do not nest SMARTLIST_FOREACH blocks within one another. Any
- nested block ought to be using SMARTLIST_FOREACH_{BEGIN,END}.
- Issue 6400.
diff --git a/changes/ticket5749 b/changes/ticket5749
deleted file mode 100644
index 023724198..000000000
--- a/changes/ticket5749
+++ /dev/null
@@ -1,3 +0,0 @@
- o New directory authorities:
- - Add Faravahar (run by Sina Rabbani) as the ninth v3 directory
- authority. Closes ticket 5749.
diff --git a/configure.in b/configure.ac
index 8aa90f641..6e9e13d76 100644
--- a/configure.in
+++ b/configure.ac
@@ -1,11 +1,14 @@
dnl Copyright (c) 2001-2004, Roger Dingledine
dnl Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson
-dnl Copyright (c) 2007-2012, The Tor Project, Inc.
+dnl Copyright (c) 2007-2013, The Tor Project, Inc.
dnl See LICENSE for licensing information
-AC_INIT
-AM_INIT_AUTOMAKE(tor, 0.2.3.18-rc-dev)
-AM_CONFIG_HEADER(orconfig.h)
+AC_INIT([tor],[0.2.5.4-alpha-dev])
+AC_CONFIG_SRCDIR([src/or/main.c])
+AC_CONFIG_MACRO_DIR([m4])
+AM_INIT_AUTOMAKE
+m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+AC_CONFIG_HEADERS([orconfig.h])
AC_CANONICAL_HOST
@@ -21,7 +24,9 @@ CPPFLAGS="$CPPFLAGS -I\${top_srcdir}/src/common"
#XXXX020 We should make these enabled or not, before 0.2.0.x-final
AC_ARG_ENABLE(buf-freelists,
- AS_HELP_STRING(--disable-buf-freelists, disable freelists for buffer RAM))
+ AS_HELP_STRING(--enable-buf-freelists, enable freelists for buffer RAM))
+AC_ARG_ENABLE(mempools,
+ AS_HELP_STRING(--enable-mempools, enable mempools for relay cells))
AC_ARG_ENABLE(openbsd-malloc,
AS_HELP_STRING(--enable-openbsd-malloc, Use malloc code from openbsd. Linux only))
AC_ARG_ENABLE(instrument-downloads,
@@ -34,6 +39,15 @@ AC_ARG_ENABLE(static-zlib,
AS_HELP_STRING(--enable-static-zlib, Link against a static zlib library. Requires --with-zlib-dir))
AC_ARG_ENABLE(static-tor,
AS_HELP_STRING(--enable-static-tor, Create an entirely static Tor binary. Requires --with-openssl-dir and --with-libevent-dir and --with-zlib-dir))
+AC_ARG_ENABLE(curve25519,
+ AS_HELP_STRING(--disable-curve25519, Build Tor with no curve25519 elliptic-curve crypto support))
+AC_ARG_ENABLE(unittests,
+ AS_HELP_STRING(--disable-unittests, [Don't build unit tests for Tor. Risky!]))
+AC_ARG_ENABLE(coverage,
+ AS_HELP_STRING(--enable-coverage, [Enable coverage support in the unit-test build]))
+
+AM_CONDITIONAL(UNITTESTS_ENABLED, test x$enable_unittests != xno)
+AM_CONDITIONAL(COVERAGE_ENABLED, test x$enable_coverage = xyes)
if test "$enable_static_tor" = "yes"; then
enable_static_libevent="yes";
@@ -42,10 +56,17 @@ if test "$enable_static_tor" = "yes"; then
CFLAGS="$CFLAGS -static"
fi
-if test x$enable_buf_freelists != xno; then
+if test x$enable_buf_freelists = xyes; then
AC_DEFINE(ENABLE_BUF_FREELISTS, 1,
[Defined if we try to use freelists for buffer RAM chunks])
fi
+
+AM_CONDITIONAL(USE_MEMPOOLS, test x$enable_mempools = xyes)
+if test x$enable_mempools = xyes; then
+ AC_DEFINE(ENABLE_MEMPOOLS, 1,
+ [Defined if we try to use mempools for cells being relayed])
+fi
+
AM_CONDITIONAL(USE_OPENBSD_MALLOC, test x$enable_openbsd_malloc = xyes)
if test x$enable_instrument_downloads = xyes; then
AC_DEFINE(INSTRUMENT_DOWNLOADS, 1,
@@ -117,13 +138,13 @@ AC_ARG_ENABLE(gcc-warnings,
AC_ARG_ENABLE(gcc-warnings-advisory,
AS_HELP_STRING(--enable-gcc-warnings-advisory, [enable verbose warnings, excluding -Werror]))
-dnl Adam shostack suggests the following for Windows:
-dnl -D_FORTIFY_SOURCE=2 -fstack-protector-all
dnl Others suggest '/gs /safeseh /nxcompat /dynamicbase' for non-gcc on Windows
-dnl This requires that we use gcc and that we add -O2 to the CFLAGS.
AC_ARG_ENABLE(gcc-hardening,
AS_HELP_STRING(--disable-gcc-hardening, disable compiler security checks))
+AC_ARG_ENABLE(expensive-hardening,
+ AS_HELP_STRING(--enable-expensive-hardening, enable more expensive compiler hardening; makes Tor slower))
+
dnl Linker hardening options
dnl Currently these options are ELF specific - you can't use this with MacOSX
AC_ARG_ENABLE(linker-hardening,
@@ -146,12 +167,32 @@ fi])
AC_ARG_ENABLE(bufferevents,
AS_HELP_STRING(--enable-bufferevents, use Libevent's buffered IO.))
+AC_ARG_ENABLE(tool-name-check,
+ AS_HELP_STRING(--disable-tool-name-check, check for sanely named toolchain when cross-compiling))
+
+AC_ARG_ENABLE(seccomp,
+ AS_HELP_STRING(--disable-seccomp, do not attempt to use libseccomp))
+
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
+dnl Check whether the above macro has settled for a simply named tool even
+dnl though we're cross compiling. We must do this before running AC_PROG_CC,
+dnl because that will find any cc on the system, not only the cross-compiler,
+dnl and then verify that a binary built with this compiler runs on the
+dnl build system. It will then come to the false conclusion that we're not
+dnl cross-compiling.
+if test x$enable_tool_name_check != xno; then
+ if test x$ac_tool_warned = xyes; then
+ AC_MSG_ERROR([We are cross compiling but could not find a properly named toolchain. Do you have your cross-compiling toolchain in PATH? (You can --disable-tool-name-check to ignore this.)])
+ elif test "x$ac_ct_AR" != x -a x$cross_compiling = xmaybe; then
+ AC_MSG_ERROR([We think we are cross compiling but could not find a properly named toolchain. Do you have your cross-compiling toolchain in PATH? (You can --disable-tool-name-check to ignore this.)])
+ fi
+fi
+
AC_PROG_CC
AC_PROG_CPP
AC_PROG_MAKE_SET
@@ -162,7 +203,7 @@ AC_CHECK_PROG([SED],[sed],[sed],[/bin/false])
dnl check for asciidoc and a2x
AC_PATH_PROG([ASCIIDOC], [asciidoc], none)
-AC_PATH_PROG([A2X], [a2x], none)
+AC_PATH_PROGS([A2X], [a2x a2x.py], none)
AM_CONDITIONAL(USE_ASCIIDOC, test x$asciidoc = xtrue)
@@ -171,6 +212,13 @@ AM_CONDITIONAL(NAT_PMP, test x$natpmp = xtrue)
AM_CONDITIONAL(MINIUPNPC, test x$upnp = xtrue)
AM_PROG_CC_C_O
+AC_ARG_VAR(PYTHON)
+AC_CHECK_PROGS(PYTHON, [python python2 python2.7 python3 python3.3])
+if test "x$PYTHON" = "x"; then
+ AC_MSG_WARN([Python unavailable; some tests will not be run.])
+fi
+AM_CONDITIONAL(USEPYTHON, [test "x$PYTHON" != "x"])
+
ifdef([AC_C_FLEXIBLE_ARRAY_MEMBER], [
AC_C_FLEXIBLE_ARRAY_MEMBER
], [
@@ -290,6 +338,8 @@ dnl exports strlcpy without defining it in a header.
AC_CHECK_FUNCS(
_NSGetEnviron \
accept4 \
+ backtrace \
+ backtrace_symbols_fd \
clock_gettime \
flock \
ftime \
@@ -301,11 +351,13 @@ AC_CHECK_FUNCS(
inet_aton \
ioctl \
issetugid \
+ llround \
localtime_r \
lround \
memmem \
prctl \
rint \
+ sigaction \
socketpair \
strlcat \
strlcpy \
@@ -313,22 +365,12 @@ AC_CHECK_FUNCS(
strtok_r \
strtoull \
sysconf \
+ sysctl \
uname \
vasprintf \
+ _vscprintf
)
-using_custom_malloc=no
-if test x$enable_openbsd_malloc = xyes ; then
- AC_DEFINE(HAVE_MALLOC_GOOD_SIZE, 1, [Defined if we have the malloc_good_size function])
- using_custom_malloc=yes
-fi
-if test x$tcmalloc = xyes ; then
- using_custom_malloc=yes
-fi
-if test $using_custom_malloc = no ; then
- AC_CHECK_FUNCS(mallinfo malloc_good_size malloc_usable_size)
-fi
-
if test "$enable_threads" = "yes"; then
AC_CHECK_HEADERS(pthread.h)
AC_CHECK_FUNCS(pthread_create)
@@ -400,12 +442,18 @@ save_CPPFLAGS="$CPPFLAGS"
LIBS="-levent $STATIC_LIBEVENT_FLAGS $TOR_LIB_WS32 $LIBS"
LDFLAGS="$TOR_LDFLAGS_libevent $LDFLAGS"
CPPFLAGS="$TOR_CPPFLAGS_libevent $CPPFLAGS"
-AC_CHECK_FUNCS(event_get_version event_get_version_number event_get_method event_set_log_callback evdns_set_outgoing_bind_address event_base_loopexit)
+AC_CHECK_FUNCS([event_get_version \
+ event_get_version_number \
+ event_get_method \
+ event_set_log_callback \
+ evutil_secure_rng_set_urandom_device_file \
+ evutil_secure_rng_init \
+ event_base_loopexit])
AC_CHECK_MEMBERS([struct event.min_heap_idx], , ,
[#include <event.h>
])
-AC_CHECK_HEADERS(event2/event.h event2/dns.h event2/bufferevent_ssl.h)
+AC_CHECK_HEADERS(event2/event.h event2/dns.h)
LIBS="$save_LIBS"
LDFLAGS="$save_LDFLAGS"
@@ -497,7 +545,7 @@ dnl ------------------------------------------------------
dnl Where do you live, openssl? And how do we call you?
tor_openssl_pkg_redhat="openssl"
-tor_openssl_pkg_debian="libssl"
+tor_openssl_pkg_debian="libssl-dev"
tor_openssl_devpkg_redhat="openssl-devel"
tor_openssl_devpkg_debian="libssl-dev"
@@ -574,7 +622,16 @@ if test x$enable_gcc_hardening != xno; then
if test x$have_clang = xyes; then
TOR_CHECK_CFLAGS(-Qunused-arguments)
fi
- TOR_CHECK_CFLAGS(-fstack-protector-all)
+ TOR_CHECK_CFLAGS(-fstack-protector-all, also_link)
+ AS_VAR_PUSHDEF([can_compile], [tor_cv_cflags_-fstack-protector-all])
+ AS_VAR_PUSHDEF([can_link], [tor_can_link_-fstack-protector-all])
+ AS_VAR_IF(can_compile, [yes],
+ AS_VAR_IF(can_link, [yes],
+ [],
+ AC_MSG_ERROR([We tried to build with stack protection; it looks like your compiler supports it but your libc does not provide it. Are you missing libssp? (You can --disable-gcc-hardening to ignore this error.)]))
+ )
+ AS_VAR_POPDEF([can_link])
+ AS_VAR_POPDEF([can_compile])
TOR_CHECK_CFLAGS(-Wstack-protector)
TOR_CHECK_CFLAGS(-fwrapv)
TOR_CHECK_CFLAGS(--param ssp-buffer-size=1)
@@ -584,10 +641,40 @@ if test x$enable_gcc_hardening != xno; then
fi
fi
+if test x$enable_expensive_hardening = xyes ; then
+ TOR_CHECK_CFLAGS([-fsanitize=address])
+ TOR_CHECK_CFLAGS([-fsanitize=undefined])
+ TOR_CHECK_CFLAGS([-fno-omit-frame-pointer])
+fi
+
if test x$enable_linker_hardening != xno; then
TOR_CHECK_LDFLAGS(-z relro -z now, "$all_ldflags_for_check", "$all_libs_for_check")
fi
+# For backtrace support
+TOR_CHECK_LDFLAGS(-rdynamic)
+
+dnl ------------------------------------------------------
+dnl Now see if we have a -fomit-frame-pointer compiler option.
+
+saved_CFLAGS="$CFLAGS"
+TOR_CHECK_CFLAGS(-fomit-frame-pointer)
+F_OMIT_FRAME_POINTER=''
+if test "$saved_CFLAGS" != "$CFLAGS"; then
+ if test x$enable_expensive_hardening != xyes ; then
+ F_OMIT_FRAME_POINTER='-fomit-frame-pointer'
+ fi
+fi
+CFLAGS="$saved_CFLAGS"
+AC_SUBST(F_OMIT_FRAME_POINTER)
+
+dnl ------------------------------------------------------
+dnl If we are adding -fomit-frame-pointer (or if the compiler's doing it
+dnl for us, as GCC 4.6 and later do at many optimization levels), then
+dnl we should try to add -fasynchronous-unwind-tables so that our backtrace
+dnl code will work.
+TOR_CHECK_CFLAGS(-fasynchronous-unwind-tables)
+
dnl ------------------------------------------------------
dnl Where do you live, libnatpmp? And how do we call you?
dnl There are no packages for Debian or Redhat as of this patch
@@ -647,6 +734,126 @@ if test "$upnp" = "true"; then
fi
fi
+dnl ============================================================
+dnl Check for libseccomp
+
+if test "x$enable_seccomp" != "xno"; then
+ AC_CHECK_HEADERS([seccomp.h])
+ AC_SEARCH_LIBS(seccomp_init, [seccomp])
+fi
+
+dnl ============================================================
+dnl We need an implementation of curve25519.
+
+dnl set these defaults.
+have_a_curve25519=no
+build_curve25519_donna=no
+build_curve25519_donna_c64=no
+use_curve25519_donna=no
+use_curve25519_nacl=no
+CURVE25519_LIBS=
+
+if test x$enable_curve25519 != xno; then
+
+ dnl The best choice is using curve25519-donna-c64, but that requires
+ dnl that we
+ AC_CACHE_CHECK([whether we can use curve25519-donna-c64],
+ tor_cv_can_use_curve25519_donna_c64,
+ [AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM([dnl
+ #include <stdint.h>
+ typedef unsigned uint128_t __attribute__((mode(TI)));
+ int func(uint64_t a, uint64_t b) {
+ uint128_t c = ((uint128_t)a) * b;
+ int ok = ((uint64_t)(c>>96)) == 522859 &&
+ (((uint64_t)(c>>64))&0xffffffffL) == 3604448702L &&
+ (((uint64_t)(c>>32))&0xffffffffL) == 2351960064L &&
+ (((uint64_t)(c))&0xffffffffL) == 0;
+ return ok;
+ }
+ ], [dnl
+ int ok = func( ((uint64_t)2000000000) * 1000000000,
+ ((uint64_t)1234567890) << 24);
+ return !ok;
+ ])],
+ [tor_cv_can_use_curve25519_donna_c64=yes],
+ [tor_cv_can_use_curve25519_donna_c64=no],
+ [AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM([dnl
+ #include <stdint.h>
+ typedef unsigned uint128_t __attribute__((mode(TI)));
+ int func(uint64_t a, uint64_t b) {
+ uint128_t c = ((uint128_t)a) * b;
+ int ok = ((uint64_t)(c>>96)) == 522859 &&
+ (((uint64_t)(c>>64))&0xffffffffL) == 3604448702L &&
+ (((uint64_t)(c>>32))&0xffffffffL) == 2351960064L &&
+ (((uint64_t)(c))&0xffffffffL) == 0;
+ return ok;
+ }
+ ], [dnl
+ int ok = func( ((uint64_t)2000000000) * 1000000000,
+ ((uint64_t)1234567890) << 24);
+ return !ok;
+ ])],
+ [tor_cv_can_use_curve25519_donna_c64=cross],
+ [tor_cv_can_use_curve25519_donna_c64=no])])])
+
+ AC_CHECK_HEADERS([crypto_scalarmult_curve25519.h \
+ nacl/crypto_scalarmult_curve25519.h])
+
+ AC_CACHE_CHECK([for nacl compiled with a fast curve25519 implementation],
+ tor_cv_can_use_curve25519_nacl,
+ [tor_saved_LIBS="$LIBS"
+ LIBS="$LIBS -lnacl"
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM([dnl
+ #ifdef HAVE_CRYPTO_SCALARMULT_CURVE25519_H
+ #include <crypto_scalarmult_curve25519.h>
+ #elif defined(HAVE_NACL_CRYPTO_SCALARMULT_CURVE25519_H)
+ #include <nacl/crypto_scalarmult_curve25519.h>
+ #endif
+ #ifdef crypto_scalarmult_curve25519_ref_BYTES
+ #error Hey, this is the reference implementation! That's not fast.
+ #endif
+ ], [
+ unsigned char *a, *b, *c; crypto_scalarmult_curve25519(a,b,c);
+ ])], [tor_cv_can_use_curve25519_nacl=yes],
+ [tor_cv_can_use_curve25519_nacl=no])
+ LIBS="$tor_saved_LIBS" ])
+
+ dnl Okay, now we need to figure out which one to actually use. Fall back
+ dnl to curve25519-donna.c
+
+ if test x$tor_cv_can_use_curve25519_donna_c64 != xno; then
+ build_curve25519_donna_c64=yes
+ use_curve25519_donna=yes
+ elif test x$tor_cv_can_use_curve25519_nacl = xyes; then
+ use_curve25519_nacl=yes
+ CURVE25519_LIBS=-lnacl
+ else
+ build_curve25519_donna=yes
+ use_curve25519_donna=yes
+ fi
+ have_a_curve25519=yes
+fi
+
+if test x$have_a_curve25519 = xyes; then
+ AC_DEFINE(CURVE25519_ENABLED, 1,
+ [Defined if we have a curve25519 implementation])
+fi
+if test x$use_curve25519_donna = xyes; then
+ AC_DEFINE(USE_CURVE25519_DONNA, 1,
+ [Defined if we should use an internal curve25519_donna{,_c64} implementation])
+fi
+if test x$use_curve25519_nacl = xyes; then
+ AC_DEFINE(USE_CURVE25519_NACL, 1,
+ [Defined if we should use a curve25519 from nacl])
+fi
+AM_CONDITIONAL(BUILD_CURVE25519_DONNA, test x$build_curve25519_donna = xyes)
+AM_CONDITIONAL(BUILD_CURVE25519_DONNA_C64, test x$build_curve25519_donna_c64 = xyes)
+AM_CONDITIONAL(CURVE25519_ENABLED, test x$have_a_curve25519 = xyes)
+AC_SUBST(CURVE25519_LIBS)
+
dnl Make sure to enable support for large off_t if available.
AC_SYS_LARGEFILE
@@ -669,6 +876,7 @@ dnl These headers are not essential
AC_CHECK_HEADERS(
arpa/inet.h \
crt_externs.h \
+ execinfo.h \
grp.h \
ifaddrs.h \
inttypes.h \
@@ -691,6 +899,7 @@ AC_CHECK_HEADERS(
sys/prctl.h \
sys/resource.h \
sys/socket.h \
+ sys/sysctl.h \
sys/syslimits.h \
sys/time.h \
sys/types.h \
@@ -703,14 +912,6 @@ AC_CHECK_HEADERS(
AC_CHECK_HEADERS(sys/param.h)
-TOR_CHECK_PROTOTYPE(malloc_good_size, HAVE_MALLOC_GOOD_SIZE_PROTOTYPE,
-[#ifdef HAVE_MALLOC_H
-#include <malloc.h>
-#endif
-#ifdef HAVE_MALLOC_MALLOC_H
-#include <malloc/malloc.h>
-#endif])
-
AC_CHECK_HEADERS(net/if.h, net_if_found=1, net_if_found=0,
[#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
@@ -760,7 +961,7 @@ if test x$transparent = xtrue ; then
if test x$transparent_ok = x1 ; then
AC_DEFINE(USE_TRANSPARENT, 1, "Define to enable transparent proxy support")
case $host in
- *-*-openbsd*)
+ *-*-openbsd* | *-*-bitrig*)
AC_DEFINE(OPENBSD, 1, "Define to handle pf on OpenBSD properly") ;;
esac
else
@@ -801,9 +1002,12 @@ AC_CHECK_SIZEOF(__int64)
AC_CHECK_SIZEOF(void *)
AC_CHECK_SIZEOF(time_t)
AC_CHECK_SIZEOF(size_t)
+AC_CHECK_SIZEOF(pid_t)
AC_CHECK_TYPES([uint, u_char, ssize_t])
+AC_PC_FROM_UCONTEXT([/bin/true])
+
dnl used to include sockaddr_storage, but everybody has that.
AC_CHECK_TYPES([struct in6_addr, struct sockaddr_in6, sa_family_t], , ,
[#ifdef HAVE_SYS_TYPES_H
@@ -866,8 +1070,9 @@ AC_CHECK_TYPES([rlim_t], , ,
#endif
])
-AC_CACHE_CHECK([whether time_t is signed], tor_cv_time_t_signed, [
-AC_RUN_IFELSE([AC_LANG_SOURCE([
+AX_CHECK_SIGN([time_t],
+ [ AC_DEFINE(TIME_T_IS_SIGNED, 1, [Define if time_t is signed]) ],
+ [ : ], [
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
@@ -877,36 +1082,30 @@ AC_RUN_IFELSE([AC_LANG_SOURCE([
#ifdef HAVE_TIME_H
#include <time.h>
#endif
-int main(int c, char**v) { if (((time_t)-1)<0) return 1; else return 0; }])],
- tor_cv_time_t_signed=no, tor_cv_time_t_signed=yes, tor_cv_time_t_signed=cross)
])
-if test "$tor_cv_time_t_signed" = cross; then
- AC_MSG_NOTICE([Cross compiling: assuming that time_t is signed.])
+if test "$ax_cv_decl_time_t_signed" = no; then
+ AC_MSG_WARN([You have an unsigned time_t; some things will probably break. Please tell the Tor developers about your interesting platform.])
fi
-if test "$tor_cv_time_t_signed" != no; then
- AC_DEFINE([TIME_T_IS_SIGNED], 1,
- [Define to 1 iff time_t is signed])
-fi
-
-AC_CACHE_CHECK([whether size_t is signed], tor_cv_size_t_signed, [
-AC_RUN_IFELSE([AC_LANG_SOURCE([
+AX_CHECK_SIGN([size_t],
+ [ tor_cv_size_t_signed=yes ],
+ [ tor_cv_size_t_signed=no ], [
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
-int main(int c, char**v) { if (((size_t)-1)<0) return 1; else return 0; }])],
- tor_cv_size_t_signed=no, tor_cv_size_t_signed=yes, tor_cv_size_t_signed=cross)
])
-if test "$tor_cv_size_t_signed" = cross; then
- AC_MSG_NOTICE([Cross compiling: assuming that size_t is not signed.])
-fi
-
-if test "$tor_cv_size_t_signed" = yes; then
+if test "$ax_cv_decl_size_t_signed" = yes; then
AC_MSG_ERROR([You have a signed size_t; that's grossly nonconformant.])
fi
+AX_CHECK_SIGN([enum always],
+ [ AC_DEFINE(ENUM_VALS_ARE_SIGNED, 1, [Define if enum is always signed]) ],
+ [ : ], [
+ enum always { AAA, BBB, CCC };
+])
+
AC_CHECK_SIZEOF(socklen_t, , [AC_INCLUDES_DEFAULT()
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
@@ -942,6 +1141,30 @@ if test "$tor_cv_null_is_zero" != no; then
[Define to 1 iff memset(0) sets pointers to NULL])
fi
+AC_CACHE_CHECK([whether memset(0) sets doubles to 0.0], tor_cv_dbl0_is_zero,
+[AC_RUN_IFELSE([AC_LANG_SOURCE(
+[[#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#ifdef HAVE_STDDEF_H
+#include <stddef.h>
+#endif
+int main () { double d1,d2; d1=0; memset(&d2,0,sizeof(d2));
+return memcmp(&d1,&d2,sizeof(d1))?1:0; }]])],
+ [tor_cv_dbl0_is_zero=yes],
+ [tor_cv_dbl0_is_zero=no],
+ [tor_cv_dbl0_is_zero=cross])])
+
+if test "$tor_cv_dbl0_is_zero" = cross ; then
+ # Cross-compiling; let's hope that the target isn't raving mad.
+ AC_MSG_NOTICE([Cross-compiling: we'll assume that 0.0 can be represented as a sequence of 0-valued bytes.])
+fi
+
+if test "$tor_cv_dbl0_is_zero" != no; then
+ AC_DEFINE([DOUBLE_0_REP_IS_ZERO_BYTES], 1,
+ [Define to 1 iff memset(0) sets doubles to 0.0])
+fi
+
# And what happens when we malloc zero?
AC_CACHE_CHECK([whether we can malloc(0) safely.], tor_cv_malloc_zero_works,
[AC_RUN_IFELSE([AC_LANG_SOURCE(
@@ -1020,7 +1243,6 @@ if [[ $dmalloc -eq 1 ]]; then
AC_CHECK_HEADERS(dmalloc.h, , AC_MSG_ERROR(dmalloc header file not found. Do you have the development files for dmalloc installed?))
AC_SEARCH_LIBS(dmalloc_malloc, [dmallocth dmalloc], , AC_MSG_ERROR(Libdmalloc library not found. If you enable it you better have it installed.))
AC_DEFINE(USE_DMALLOC, 1, [Debug memory allocation library])
- AC_DEFINE(DMALLOC_FUNC_CHECK, 1, [Enable dmalloc's malloc function check])
AC_CHECK_FUNCS(dmalloc_strdup dmalloc_strndup)
fi
@@ -1032,6 +1254,17 @@ if test x$tcmalloc = xyes ; then
LDFLAGS="-ltcmalloc $LDFLAGS"
fi
+using_custom_malloc=no
+if test x$enable_openbsd_malloc = xyes ; then
+ using_custom_malloc=yes
+fi
+if test x$tcmalloc = xyes ; then
+ using_custom_malloc=yes
+fi
+if test $using_custom_malloc = no ; then
+ AC_CHECK_FUNCS(mallinfo)
+fi
+
# By default, we're going to assume we don't have mlockall()
# bionic and other platforms have various broken mlockall subsystems.
# Some systems don't have a working mlockall, some aren't linkable,
@@ -1251,6 +1484,12 @@ if test x$enable_gcc_warnings = xyes || test x$enable_gcc_warnings_advisory = xy
#error
#endif])], have_gcc43=yes, have_gcc43=no)
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [
+#if !defined(__GNUC__) || (__GNUC__ < 4) || (__GNUC__ == 4 && __GNUC_MINOR__ < 6)
+#error
+#endif])], have_gcc46=yes, have_gcc46=no)
+
+
save_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -Wshorten-64-to-32"
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], have_shorten64_flag=yes,
@@ -1258,7 +1497,7 @@ if test x$enable_gcc_warnings = xyes || test x$enable_gcc_warnings_advisory = xy
CFLAGS="$save_CFLAGS"
case $host in
- *-*-openbsd*)
+ *-*-openbsd* | *-*-bitrig*)
# Some OpenBSD versions (like 4.8) have -Wsystem-headers by default.
# That's fine, except that the headers don't pass -Wredundant-decls.
# Therefore, let's disable -Wsystem-headers when we're building
@@ -1302,44 +1541,60 @@ if test x$enable_gcc_warnings = xyes || test x$enable_gcc_warnings_advisory = xy
CFLAGS="$CFLAGS -Wextra -Warray-bounds"
fi
+ if test x$have_gcc46 = xyes ; then
+ # This warning was added in gcc 4.3, but it appears to generate
+ # spurious warnings in gcc 4.4. I don't know if it works in 4.5.
+ CFLAGS="$CFLAGS -Wlogical-op"
+ fi
+
if test x$have_shorten64_flag = xyes ; then
CFLAGS="$CFLAGS -Wshorten-64-to-32"
fi
+
+
##This will break the world on some 64-bit architectures
# CFLAGS="$CFLAGS -Winline"
fi
-
+if test "$enable_coverage" = yes && test "$have_clang" = "no"; then
+ case "$host_os" in
+ darwin*)
+ AC_MSG_WARN([Tried to enable coverage on OSX without using the clang compiler. This might not work! If coverage fails, use CC=clang when configuring with --enable-profiling.])
+ esac
+fi
CPPFLAGS="$CPPFLAGS $TOR_CPPFLAGS_libevent $TOR_CPPFLAGS_openssl $TOR_CPPFLAGS_zlib"
AC_CONFIG_FILES([
Doxyfile
Makefile
- contrib/Makefile
- contrib/suse/Makefile
- contrib/suse/tor.sh
- contrib/tor.logrotate
- contrib/tor.sh
- contrib/torctl
- contrib/torify
- doc/Makefile
- src/Makefile
- src/common/Makefile
- src/config/Makefile
+ contrib/dist/suse/tor.sh
+ contrib/operator-tools/tor.logrotate
+ contrib/dist/tor.sh
+ contrib/dist/torctl
+ contrib/dist/tor.service
src/config/torrc.sample
- src/or/Makefile
- src/test/Makefile
- src/tools/Makefile
- src/tools/tor-fw-helper/Makefile
- src/win32/Makefile
- tor.spec
])
+if test x$asciidoc = xtrue && test "$ASCIIDOC" = "none" ; then
+ regular_mans="doc/tor doc/tor-gencert doc/tor-resolve doc/torify"
+ for file in $regular_mans ; do
+ if ! [[ -f "$srcdir/$file.1.in" ]] || ! [[ -f "$srcdir/$file.html.in" ]] ; then
+ echo "==================================";
+ echo;
+ echo "You need asciidoc installed to be able to build the manpage.";
+ echo "To build without manpages, use the --disable-asciidoc argument";
+ echo "when calling configure.";
+ echo;
+ echo "==================================";
+ exit 1;
+ fi
+ done
+fi
+
AC_OUTPUT
-if test -x /usr/bin/perl && test -x ./contrib/updateVersions.pl ; then
- ./contrib/updateVersions.pl
+if test -x /usr/bin/perl && test -x ./scripts/maint/updateVersions.pl ; then
+ ./scripts/maint/updateVersions.pl
fi
-
diff --git a/contrib/Makefile.am b/contrib/Makefile.am
deleted file mode 100644
index 795c351f3..000000000
--- a/contrib/Makefile.am
+++ /dev/null
@@ -1,23 +0,0 @@
-SUBDIRS = suse
-DIST_SUBDIRS = suse
-
-confdir = $(sysconfdir)/tor
-
-EXTRA_DIST = \
- cross.sh \
- exitlist \
- linux-tor-prio.sh \
- package_nsis-mingw.sh \
- rc.subr \
- tor-ctrl.sh \
- tor-exit-notice.html \
- tor-mingw.nsi.in \
- tor-tsocks.conf \
- tor.ico \
- tor.nsi.in \
- tor.sh \
- torctl
-
-conf_DATA = tor-tsocks.conf
-
-bin_SCRIPTS = torify
diff --git a/contrib/README b/contrib/README
new file mode 100644
index 000000000..07c6f777d
--- /dev/null
+++ b/contrib/README
@@ -0,0 +1,61 @@
+The contrib/ directory contains small tools that might be useful for using
+with Tor. A few of them are included in the Tor source distribution; you can
+find the others in the main Tor repository. We don't guarantee that they're
+particularly useful.
+
+dirauth-tools/ -- Tools useful for directory authority administrators
+---------------------------------------------------------------------
+
+add-tor is an old script to manipulate the approved-routers file.
+
+nagios-check-tor-authority-cert is a nagios script to check when Tor
+authority certificates are expired or nearly expired.
+
+client-tools/ -- Tools for use with Tor clients
+-----------------------------------------------
+
+torify is a small wrapper script around torsocks.
+
+tor-resolve.py uses Tor's SOCKS port extensions to perform DNS lookups. You
+should probably use src/tools/tor-resolve instead.
+
+dist/ -- Scripts and files for use when packaging Tor
+-----------------------------------------------------
+
+torctl, rc.subr, and tor.sh are init scripts for use with SysV-style init
+tools. Everybody likes to write init scripts differently, it seems.
+
+tor.service is a sample service file for use with systemd.
+
+The suse/ subdirectory contains files used by the suse distribution.
+
+operator-tools/ -- Tools for Tor relay operators
+------------------------------------------------
+
+tor-exit-notice.html is an HTML file for use with the DirPortFrontPage
+option. It tells visitors that your relay is a Tor exit node, and that they
+shouldn't assume you're the origin for the traffic that you're delivering.
+
+tor.logrotate is a configuration file for use with the logrotate tool. You
+may need to edit it to work for you.
+
+linux-tor-prio.sh uses Linux iptables tools to traffic-shape your Tor relay's
+traffic. If it breaks, you get to keep both pieces.
+
+or-tools/ -- Tools for interacting with relays
+----------------------------------------------
+
+checksocks.pl is a tool to scan relays to see if any of them have advertised
+public SOCKS ports, so we can tell them not to.
+
+check-tor is a quick shell script to try doing a TLS handshake with a router
+or to try fetching a directory from it.
+
+exitlist is a precursor of check.torproject.org: it parses a bunch of cached
+server descriptors to determine which can connect to a given address:port.
+
+win32build -- Old files for windows packaging
+---------------------------------------------
+
+You shouldn't need these unless you're building some of the older Windows
+packages.
diff --git a/contrib/auto-naming/README b/contrib/auto-naming/README
deleted file mode 100644
index e2f9ff8c2..000000000
--- a/contrib/auto-naming/README
+++ /dev/null
@@ -1,6 +0,0 @@
-Tor directory authorities may maintain a binding of server identities
-(their long term identity key) and nicknames.
-
-The auto-naming scripts have been moved to svn in
-projects/tor-naming/auto-naming/trunk/
-
diff --git a/contrib/bundle.nsi b/contrib/bundle.nsi
deleted file mode 100644
index 55f6b5fa3..000000000
--- a/contrib/bundle.nsi
+++ /dev/null
@@ -1,67 +0,0 @@
-!include "MUI.nsh"
-!include "LogicLib.nsh"
-!include "FileFunc.nsh"
-
-!define VERSION "0.2.1.13"
-!define INSTALLER "TorBundle.exe"
-!define WEBSITE "https://www.torproject.org/"
-!define LICENSE "LICENSE"
-
-SetCompressor /SOLID BZIP2
-RequestExecutionLevel user
-OutFile ${INSTALLER}
-InstallDir "$LOCALAPPDATA\TorInstPkgs"
-SetOverWrite on
-Name "Tor ${VERSION} Bundle"
-Caption "Tor ${VERSION} Bundle Setup"
-BrandingText "Tor Bundle Installer"
-CRCCheck on
-XPStyle on
-ShowInstDetails hide
-VIProductVersion "${VERSION}"
-VIAddVersionKey "ProductName" "Tor"
-VIAddVersionKey "Comments" "${WEBSITE}"
-VIAddVersionKey "LegalTrademarks" "Three line BSD"
-VIAddVersionKey "LegalCopyright" "©2004-2011, Roger Dingledine, Nick Mathewson, The Tor Project, Inc."
-VIAddVersionKey "FileDescription" "Tor is an implementation of Onion Routing. You can read more at ${WEBSITE}"
-VIAddVersionKey "FileVersion" "${VERSION}"
-
-!define MUI_ICON "torinst32.ico"
-!define MUI_HEADERIMAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Header\win.bmp"
-!insertmacro MUI_PAGE_INSTFILES
-!insertmacro MUI_LANGUAGE "English"
-
-Section "Tor" Tor
- SectionIn RO
- SetOutPath $INSTDIR
- Call ExtractPackages
- Call RunInstallers
- Call LaunchVidalia
-SectionEnd
-
-Function ExtractPackages
- File "license.msi"
- File "tor.msi"
- File "torbutton.msi"
- File "thandy.msi"
- File "polipo.msi"
- File "vidalia.msi"
- File "tbcheck.bat"
-FunctionEnd
-
-Function RunInstallers
- ExecWait 'msiexec /i "$INSTDIR\license.msi" /qn'
- ExecWait 'msiexec /i "$INSTDIR\tor.msi" NOSC=1 /qn'
- ExecWait 'msiexec /i "$INSTDIR\thandy.msi" NOSC=1 /qn'
- ExecWait 'msiexec /i "$INSTDIR\polipo.msi" NOSC=1 /qn'
- ExecWait 'msiexec /i "$INSTDIR\torbutton.msi" /qn'
- ExecWait 'msiexec /i "$INSTDIR\vidalia.msi" /qn'
- ExpandEnvStrings $0 %COMSPEC%
- Exec '"$0" /C "$INSTDIR\tbcheck.bat"'
-FunctionEnd
-
-Function LaunchVidalia
- SetOutPath "$LOCALAPPDATA\Programs\Vidalia"
- Exec 'vidalia.exe -loglevel info -logfile log.txt'
-FunctionEnd
-
diff --git a/contrib/tor-resolve.py b/contrib/client-tools/tor-resolve.py
index 47ae1a0c3..47ae1a0c3 100755
--- a/contrib/tor-resolve.py
+++ b/contrib/client-tools/tor-resolve.py
diff --git a/contrib/torify.in b/contrib/client-tools/torify
index 54acfed65..54acfed65 100755
--- a/contrib/torify.in
+++ b/contrib/client-tools/torify
diff --git a/contrib/cross.sh b/contrib/cross.sh
deleted file mode 100755
index a6085a400..000000000
--- a/contrib/cross.sh
+++ /dev/null
@@ -1,195 +0,0 @@
-#!/bin/bash
-# Copyright 2006 Michael Mohr with modifications by Roger Dingledine
-# See LICENSE for licensing information.
-
-#######################################################################
-# Tor-cross: a tool to help cross-compile Tor
-#
-# The purpose of a cross-compiler is to produce an executable for
-# one system (CPU) on another. This is useful, for example, when
-# the target system does not have a native compiler available.
-# You might, for example, wish to cross-compile a program on your
-# host (the computer you're working on now) for a target such as
-# a router or handheld computer.
-#
-# A number of environment variables must be set in order for this
-# script to work:
-# $PREFIX, $CROSSPATH, $HOST_TRIPLET, $HOST,
-# and (optionally) $BUILD
-# Please run the script for a description of each one. If automated
-# builds are desired, the above variables can be exported at the top
-# of this script.
-#
-# Recent releases of Tor include test programs in configure. Normally
-# this is a good thing, since it catches a number of problems.
-# However, this also presents a problem when cross compiling, since
-# you can't run binary images for the target system on the host.
-#
-# Tor-cross assumes that you know what you're doing and removes a
-# number of checks known to cause problems with this process.
-# Note that this does not guarantee that the program will run or
-# even compile; it simply allows configure to generate the Makefiles.
-#
-# Stripping the binaries should almost always be done for an
-# embedded environment where space is at an exacting premium.
-# However, the default is NOT to strip them since they are useful for
-# debugging. If you do not plan to do any debugging and you
-# don't care about the debugging symbols, set $STRIP to "yes" before
-# running this script.
-#
-# Tor-cross was written by Michael Mohr. He can be contacted at
-# m(dot)mohr(at)laposte(dot)net. Comments are appreciated, but
-# flames go to /dev/null.
-#
-# The target with which this script is tested is little-endian
-# MIPS Linux, built on an Athlon-based Linux desktop.
-#
-#######################################################################
-
-# disable the platform-specific tests in configure
-export CROSS_COMPILE=yes
-
-# for error conditions
-EXITVAL=0
-
-if [ ! -f autogen.sh ]
-then
- echo "Please run this script from the root of the Tor distribution"
- exit -1
-fi
-
-if [ ! -f configure ]
-then
- if [ -z $GEN_BUILD ]
- then
- echo "To automatically generate the build environment, set \$GEN_BUILD"
- echo "to yes; for example,"
- echo " export GEN_BUILD=yes"
- EXITVAL=-1
- fi
-fi
-
-if [ -z $PREFIX ]
-then
- echo "You must define \$PREFIX since you are cross-compiling."
- echo "Select a non-system location (i.e. /tmp/tor-cross):"
- echo " export PREFIX=/tmp/tor-cross"
- EXITVAL=-1
-fi
-
-if [ -z $CROSSPATH ]
-then
- echo "You must define the location of your cross-compiler's"
- echo "directory using \$CROSSPATH; for example,"
- echo " export CROSSPATH=/opt/cross/staging_dir_mipsel/bin"
- EXITVAL=-1
-fi
-
-if [ -z $HOST_TRIPLET ]
-then
- echo "You must define \$HOST_TRIPLET to continue. For example,"
- echo "if you normally cross-compile applications using"
- echo "mipsel-linux-uclibc-gcc, you would set \$HOST_TRIPLET like so:"
- echo " export HOST_TRIPLET=mipsel-linux-uclibc-"
- EXITVAL=-1
-fi
-
-if [ -z $HOST ]
-then
- echo "You must specify a target processor with \$HOST; for example:"
- echo " export HOST=mipsel-unknown-elf"
- EXITVAL=-1
-fi
-
-if [ -z $BUILD ]
-then
- echo "You should specify the host machine's type with \$BUILD; for example:"
- echo " export BUILD=i686-pc-linux-gnu"
- echo "If you wish to let configure autodetect the host, set \$BUILD to 'auto':"
- echo " export BUILD=auto"
- EXITVAL=-1
-fi
-
-if [ ! -x $CROSSPATH/$HOST_TRIPLETgcc ]
-then
- echo "The specified toolchain does not contain an executable C compiler."
- echo "Please double-check your settings and rerun cross.sh."
- EXITVAL=-1
-fi
-
-if [ $EXITVAL -ne 0 ]
-then
- echo "Remember, you can hard-code these values in cross.sh if needed."
- exit $EXITVAL
-fi
-
-if [ ! -z "$GEN_BUILD" -a ! -f configure ]
-then
- export NOCONF=yes
- ./autogen.sh
-fi
-
-# clean up any existing object files
-if [ -f src/or/tor ]
-then
- make clean
-fi
-
-# Set up the build environment and try to run configure
-export PATH=$PATH:$CROSSPATH
-export RANLIB=${HOST_TRIPLET}ranlib
-export CC=${HOST_TRIPLET}gcc
-
-if [ $BUILD == "auto" ]
-then
- ./configure \
- --enable-debug \
- --enable-eventdns \
- --prefix=$PREFIX \
- --host=$HOST
-else
- ./configure \
- --enable-debug \
- --enable-eventdns \
- --prefix=$PREFIX \
- --host=$HOST \
- --build=$BUILD
-fi
-
-# has a problem occurred?
-if [ $? -ne 0 ]
-then
- echo ""
- echo "A problem has been detected with configure."
- echo "Please check the output above and rerun cross.sh"
- echo ""
- exit -1
-fi
-
-# Now we're cookin'
-
-make
-
-# has a problem occurred?
-if [ $? -ne 0 ]
-then
- echo ""
- echo "A problem has been detected with make."
- echo "Please check the output above and rerun make."
- echo ""
- exit -1
-fi
-
-# if $STRIP has length (i.e. STRIP=yes), strip the binaries
-if [ ! -z $STRIP ]
-then
-${HOST_TRIPLET}strip \
- src/or/tor \
- src/test/test \
- src/tools/tor-resolve
-fi
-
-echo ""
-echo "Tor should be compiled at this point. Now run 'make install' to"
-echo "install to $PREFIX"
-echo ""
diff --git a/contrib/add-tor b/contrib/dirauth-tools/add-tor
index 5a12abca8..5a12abca8 100755
--- a/contrib/add-tor
+++ b/contrib/dirauth-tools/add-tor
diff --git a/contrib/nagios-check-tor-authority-cert b/contrib/dirauth-tools/nagios-check-tor-authority-cert
index 46dc7284b..46dc7284b 100755
--- a/contrib/nagios-check-tor-authority-cert
+++ b/contrib/dirauth-tools/nagios-check-tor-authority-cert
diff --git a/contrib/directory-archive/crontab.sample b/contrib/directory-archive/crontab.sample
deleted file mode 100644
index e2821aa93..000000000
--- a/contrib/directory-archive/crontab.sample
+++ /dev/null
@@ -1,3 +0,0 @@
-10 * * * * cd projects/tor-v2dir && ./fetch-all-v3
-40 * * * * cd projects/tor-v2dir && ./fetch-all
-15 3 6 * * cd projects/tor-v2dir && ./sort-into-month-folder > /dev/null && ./tar-them-up last > /dev/null
diff --git a/contrib/directory-archive/fetch-all b/contrib/directory-archive/fetch-all
deleted file mode 100755
index dfa5a1b3e..000000000
--- a/contrib/directory-archive/fetch-all
+++ /dev/null
@@ -1,77 +0,0 @@
-#!/bin/bash
-
-# Download all current v2 directory status documents, then download
-# the descriptors and extra info documents.
-
-# Copyright (c) 2005, 2006, 2007, 2008 Peter Palfrader
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-# SOFTWARE.
-
-TZ=UTC
-export TZ
-
-DIRSERVERS=""
-DIRSERVERS="$DIRSERVERS 86.59.21.38:80" # tor26
-DIRSERVERS="$DIRSERVERS 128.31.0.34:9031" # moria1
-DIRSERVERS="$DIRSERVERS 128.31.0.34:9032" # moria2
-DIRSERVERS="$DIRSERVERS 194.109.206.212:80" # dizum
-
-DATEDIR=$(date "+%Y/%m/%d")
-TIME=$(date "+%Y%m%d-%H%M%S")
-
-. fetch-all-functions
-
-statuses=""
-for dirserver in $DIRSERVERS; do
- authorities=$(wget -q -O - http://$dirserver/tor/status/all | egrep '^fingerprint ' | awk '{print $2}')
- if [ "$authorities" == "" ]; then
- echo "Did not get a list of authorities from $dirserver, going to next" 2>&1
- continue
- fi
-
- dir="status/$DATEDIR"
- [ -d "$dir" ] || mkdir -p "$dir"
-
- authprefix="$dir/$TIME-"
- for fp in $authorities; do
- wget -q -O "$authprefix$fp" http://$dirserver/tor/status/fp/"$fp"
- bzip2 "$authprefix$fp"
- statuses="$statuses $authprefix$fp.bz2"
- done
- if [ "$statuses" == "" ]; then
- echo "Did not get any statuses from $dirserver, going to next" 2>&1
- continue
- else
- break
- fi
-done
-
-if [ "$statuses" = "" ]; then
- echo "No statuses available" 2>&1
- exit 1
-fi
-
-digests=$( for i in ` bzcat $statuses | awk '$1 == "r" {printf "%s=\n", $4}' | sort -u `; do
- echo $i | \
- base64-decode | \
- perl -e 'undef $/; $a=<>; print unpack("H\*", $a),"\n";';
- done )
-for digest in $digests; do
- fetch_digest "$digest" "server-descriptor"
-done
diff --git a/contrib/directory-archive/fetch-all-functions b/contrib/directory-archive/fetch-all-functions
deleted file mode 100644
index a9335bda7..000000000
--- a/contrib/directory-archive/fetch-all-functions
+++ /dev/null
@@ -1,82 +0,0 @@
-#!/bin/bash
-
-# function used by fetch-all* to download server descriptors and
-# extra info documents
-
-# Copyright (c) 2005, 2006, 2007, 2008 Peter Palfrader
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-# SOFTWARE.
-
-
-fetch_digest() {
- local digest
- local objecttype
- local urlpart
- local pathpart
- local target
- local targetdir
- local dirserver
- local ei
-
- digest="$1"
- objecttype="$2"
- if [ "$objecttype" = "server-descriptor" ] ; then
- urlpart="server"
- pathpart="server-descriptor"
- elif [ "$objecttype" = "extra-info" ] ; then
- urlpart="extra"
- pathpart="extra-info"
- else
- echo "Called fetch_digest with illegal objecttype '$objecttype'" >&2
- exit 1
- fi
- target=$( echo $digest | sed -e 's#^\(.\)\(.\)#'"$pathpart"'/\1/\2/\1\2#' )
- targetdir=$( dirname $target )
- [ -d "$targetdir" ] || mkdir -p "$targetdir"
- if ! [ -e "$target" ]; then
- for dirserver in $DIRSERVERS; do
- wget -q -O "$target" http://$dirserver/tor/$urlpart/d/"$digest" || rm -f "$target"
- if [ -s "$target" ]; then
- if egrep '^opt extra-info-digest ' "$target" > /dev/null; then
- ei=$( egrep '^opt extra-info-digest ' "$target" | awk '{print $3}' | tr 'A-F' 'a-f' )
- fetch_digest "$ei" "extra-info"
- elif egrep '^extra-info-digest ' "$target" > /dev/null; then
- ei=$( egrep '^extra-info-digest ' "$target" | awk '{print $2}' | tr 'A-F' 'a-f' )
- fetch_digest "$ei" "extra-info"
- fi
- break
- else
- rm -f "$target"
- fi
- done
- fi
- #if ! [ -e "$target" ]; then
- # echo "$objecttype $digest" >> failed
- #fi
-}
-
-if [ -x /usr/bin/base64 ] ; then
- base64-decode() {
- /usr/bin/base64 -d
- }
-else
- base64-decode() {
- perl -MMIME::Base64 -e 'print decode_base64(<>)'
- }
-fi
diff --git a/contrib/directory-archive/fetch-all-v3 b/contrib/directory-archive/fetch-all-v3
deleted file mode 100755
index a4746e02c..000000000
--- a/contrib/directory-archive/fetch-all-v3
+++ /dev/null
@@ -1,111 +0,0 @@
-#!/bin/bash
-
-# Download all current v3 directory status votes and the consensus document,
-# then download the descriptors and extra info documents.
-
-# Copyright (c) 2005, 2006, 2007, 2008 Peter Palfrader
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-# SOFTWARE.
-
-TZ=UTC
-export TZ
-
-DIRSERVERS=""
-DIRSERVERS="$DIRSERVERS 86.59.21.38:80" # tor26
-DIRSERVERS="$DIRSERVERS 128.31.0.34:9031" # moria1
-DIRSERVERS="$DIRSERVERS 216.224.124.114:9030" # ides
-DIRSERVERS="$DIRSERVERS 80.190.246.100:80" # gabelmoo
-#DIRSERVERS="$DIRSERVERS 140.247.60.64:80" # lefkada
-DIRSERVERS="$DIRSERVERS 194.109.206.212:80" # dizum
-#DIRSERVERS="$DIRSERVERS 128.31.0.34:9032" # moria2
-DIRSERVERS="$DIRSERVERS 213.73.91.31:80" # dannenberg
-DIRSERVERS="$DIRSERVERS 208.83.223.34:443" # urras
-TIME=$(date "+%Y%m%d-%H%M%S")
-
-. fetch-all-functions
-
-consensus=""
-tmpdir="consensus/tmp"
-[ -d "$tmpdir" ] || mkdir -p "$tmpdir"
-for dirserver in $DIRSERVERS; do
- wget -q -O "$tmpdir/$TIME-consensus" http://$dirserver/tor/status-vote/current/consensus
- if [ "$?" != 0 ]; then
- rm -f "$tmpdir/$TIME-consensus"
- continue
- fi
-
- freshconsensus="$tmpdir/$TIME-consensus"
-
- timestamp=$(awk '$1=="valid-after" {printf "%s-%s", $2, $3}' < "$freshconsensus")
- datedir=$(awk '$1=="valid-after" {printf "%s", $2}' < "$freshconsensus" | tr '-' '/')
- dir="consensus/$datedir"
- [ -d "$dir" ] || mkdir -p "$dir"
-
-
- consensus="$dir/$timestamp-consensus.bz2"
- if ! [ -e "$consensus" ]; then
- # the consensus is new, or at least we don't have it yet
- bzip2 "$freshconsensus"
- mv "$freshconsensus.bz2" "$consensus"
- break
- fi
-
- rm -f "$freshconsensus"
- echo "Consensus from $timestamp (gotten from $dirserver) already exists!" >&2
- # maybe there is a newer one on a different authority, so try again.
-done
-
-if [ "$consensus" = "" ]; then
- echo "No consensus available" 2>&1
- exit 1
-fi
-
-
-votes=$(bzcat $consensus | awk '$1 == "vote-digest" {print $2}')
-for vote in $votes; do
- for dirserver in $DIRSERVERS; do
- wget -q -O "$dir/$TIME-vote-$vote" http://$dirserver/tor/status-vote/current/d/$vote
- if [ "$?" != 0 ]; then
- rm -f "$dir/$TIME-vote-$vote"
- continue
- fi
- break
- done
- if [ -e "$dir/$TIME-vote-$vote" ]; then
- voteridentity=$(awk '$1=="fingerprint" {print $2}' < "$dir/$TIME-vote-$vote")
- if [ -e "$dir/$timestamp-vote-$voteridentity-$vote.bz2" ]; then
- echo "Vote $vote from $voteridentity already exists!" >&2
- rm -f "$dir/$TIME-vote-$vote"
- continue;
- fi
- mv "$dir/$TIME-vote-$vote" "$dir/$timestamp-vote-$voteridentity-$vote"
- bzip2 "$dir/$timestamp-vote-$voteridentity-$vote"
- else
- echo "Failed to get vote $vote!" >&2
- fi
-done
-
-digests=$( for i in ` bzcat $consensus | awk '$1 == "r" {printf "%s=\n", $4}' | sort -u `; do
- echo $i | \
- base64-decode | \
- perl -e 'undef $/; $a=<>; print unpack("H\*", $a),"\n";';
- done )
-for digest in $digests; do
- fetch_digest "$digest" "server-descriptor"
-done
diff --git a/contrib/directory-archive/sort-into-month-folder b/contrib/directory-archive/sort-into-month-folder
deleted file mode 100755
index 95033c58d..000000000
--- a/contrib/directory-archive/sort-into-month-folder
+++ /dev/null
@@ -1,74 +0,0 @@
-#!/usr/bin/perl -w
-
-# Sort dumped consensuses, statuses, descriptors etc into per-month folders.
-
-# Copyright (c) 2006, 2007, 2008 Peter Palfrader
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-# SOFTWARE.
-
-use strict;
-use File::Find;
-use File::Basename;
-use File::stat;
-use Time::Local;
-
-
-my $cutofftime;
-
-
-sub wanted() {
- return unless -f;
- my $mtime = stat($_)->mtime;
- return if $mtime >= $cutofftime;
-
- my (undef,undef,undef,undef,$mon,$year,undef,undef,undef) = gmtime $mtime;
-
- my $bn = basename $_;
- my $dn = dirname $_;
- my @path = split /\//, $dn;
- $path[0] .= sprintf 's-%4d-%02d', 1900+$year, $mon+1;
- $dn = join '/', @path;
-
- if (! -d $dn) {
- my $p = '.';
- for my $component (@path) {
- $p .= '/'.$component;
- if (! -d $p) {
- mkdir $p or die ("Cannot mkdir $p: $!\n");
- };
- };
- };
-
- print "$_ -> $dn/$bn\n";
- rename $_, $dn.'/'.$bn or die ("Cannot rename $_ to $dn/$bn: $!\n");
-};
-
-my (undef,undef,undef,undef,$mon,$year,undef,undef,undef) = gmtime(time - 5*24*3600);
-$cutofftime = timegm(0,0,0,1,$mon,$year);
-find( {
- wanted => \&wanted,
- no_chdir => 1
- },
- 'server-descriptor');
-
-find( {
- wanted => \&wanted,
- no_chdir => 1
- },
- 'extra-info');
diff --git a/contrib/directory-archive/tar-them-up b/contrib/directory-archive/tar-them-up
deleted file mode 100755
index 2775ca9ee..000000000
--- a/contrib/directory-archive/tar-them-up
+++ /dev/null
@@ -1,127 +0,0 @@
-#!/bin/sh
-
-# Tar up dumped consensuses, statuses, descriptors etc from per-month folders
-# into per-month tarballs.
-
-# Copyright (c) 2006, 2007, 2008 Peter Palfrader
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-# SOFTWARE.
-
-set -e
-set -x
-set -u
-
-usage() {
- echo "Usage: $0 <year> <month>" >&2
- echo " $0 last (does last month)" >&2
- exit 1
-}
-
-if [ -z "${1:-}" ]; then
- usage
-fi
-
-if [ "$1" = "last" ]; then
- year=`date --date="last month" +'%Y'`
- month=`date --date="last month" +'%m'`
-elif [ -z "${2:-}" ]; then
- usage
-else
- year="$1"
- month="$2"
-fi
-
-if [ "$year" -lt 2000 ] || [ "$year" -gt 2020 ] ||
- [ "$month" -lt 1 ] || [ "$month" -gt 12 ] ||
- [ "`echo -n $month | wc -c`" != 2 ]; then
- usage
-fi
-
-
-this_year=`date --utc +'%Y'`
-this_month=`date --utc +'%m'`
-
-if [ "`date -d $this_year-$this_month-01 +%s`" -le "`date -d $year-$month-01 +%s`" ]; then
- echo "Date in the future or current month?" >&2
- exit 1
-fi
-
-
-
-
-
-for file in \
- "extra-infos-$year-$month.tar.bz2" \
- "server-descriptors-$year-$month.tar.bz2" \
- "consensuses-$year-$month.tar.bz2" \
- "statuses-$year-$month.tar.bz2" \
- ; do
- if [ -e "$file" ]; then
- echo "$file already exists" >&2
- exit 1
- fi
-done
-
-for dir in \
- "extra-infos-$year-$month" \
- "server-descriptors-$year-$month" \
- "consensus/$year/$month" \
- "status/$year/$month" \
- ; do
- if ! [ -d "$dir" ]; then
- echo "$dir not found" >&2
- exit 1
- fi
-done
-
-for dir in \
- "consensuses-$year-$month" \
- "statuses-$year-$month" \
- ; do
- if [ -e "$dir" ]; then
- echo "$dir already exists" >&2
- exit 1
- fi
-done
-
-for kind in consensus status; do
- mv "$kind"/$year/$month "$kind"es-$year-$month
- find "$kind"es-$year-$month -type f -name '*.bz2' -print0 | xargs -0 bunzip2 -v
- tar cjvf "$kind"es-$year-$month.tar.bz2 "$kind"es-$year-$month
- rm -rf "$kind"es-$year-$month
-done
-
-for kind in extra-infos server-descriptors; do
- tar cjvf "$kind"-$year-$month.tar.bz2 "$kind"-$year-$month
- rm -rf "$kind"-$year-$month
-done
-
-
-
-[ -d Archive ] || mkdir Archive
-
-for kind in consensus status; do
- t="$kind"es-$year-$month.tar.bz2
- ! [ -e Archive/"$t" ] && mv "$t" Archive/"$t"
-done
-
-for kind in extra-infos server-descriptors; do
- t="$kind"-$year-$month.tar.bz2
- ! [ -e Archive/"$t" ] && mv "$t" Archive/"$t"
-done
diff --git a/contrib/rc.subr b/contrib/dist/rc.subr
index d757e8952..d757e8952 100644
--- a/contrib/rc.subr
+++ b/contrib/dist/rc.subr
diff --git a/contrib/suse/tor.sh.in b/contrib/dist/suse/tor.sh.in
index b7e9005eb..b7e9005eb 100644
--- a/contrib/suse/tor.sh.in
+++ b/contrib/dist/suse/tor.sh.in
diff --git a/contrib/dist/tor.service.in b/contrib/dist/tor.service.in
new file mode 100644
index 000000000..5d7670281
--- /dev/null
+++ b/contrib/dist/tor.service.in
@@ -0,0 +1,21 @@
+[Unit]
+Description = Anonymizing overlay network for TCP
+After = syslog.target network.target nss-lookup.target
+
+[Service]
+Type = simple
+ExecStart = @BINDIR@/tor -f @CONFDIR@/torrc
+ExecReload = /bin/kill -HUP ${MAINPID}
+KillSignal = SIGINT
+TimeoutSec = 30
+Restart = on-failure
+LimitNOFILE = 32768
+
+# Hardening
+PrivateTmp = yes
+DeviceAllow = /dev/null rw
+DeviceAllow = /dev/urandom r
+InaccessibleDirectories = /home
+
+[Install]
+WantedBy = multi-user.target
diff --git a/contrib/tor.sh.in b/contrib/dist/tor.sh.in
index 92f890681..92f890681 100644
--- a/contrib/tor.sh.in
+++ b/contrib/dist/tor.sh.in
diff --git a/contrib/torctl.in b/contrib/dist/torctl.in
index 4cc137da4..4cc137da4 100644
--- a/contrib/torctl.in
+++ b/contrib/dist/torctl.in
diff --git a/contrib/id_to_fp.c b/contrib/id_to_fp.c
deleted file mode 100644
index 55b025dfa..000000000
--- a/contrib/id_to_fp.c
+++ /dev/null
@@ -1,77 +0,0 @@
-/* Copyright 2006 Nick Mathewson; see LICENSE for licensing information */
-
-/* id_to_fp.c : Helper for directory authority ops. When somebody sends us
- * a private key, this utility converts the private key into a fingerprint
- * so you can de-list that fingerprint.
- */
-
-#include <openssl/rsa.h>
-#include <openssl/bio.h>
-#include <openssl/sha.h>
-#include <openssl/pem.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#define die(s) do { fprintf(stderr, "%s\n", s); goto err; } while (0)
-
-int
-main(int argc, char **argv)
-{
- BIO *b = NULL;
- RSA *key = NULL;
- unsigned char *buf = NULL, *bufp;
- int len, i;
- unsigned char digest[20];
- int status = 1;
-
- if (argc < 2) {
- fprintf(stderr, "Reading key from stdin...\n");
- if (!(b = BIO_new_fp(stdin, BIO_NOCLOSE)))
- die("couldn't read from stdin");
- } else if (argc == 2) {
- if (strcmp(argv[1], "-h") == 0 ||
- strcmp(argv[1], "--help") == 0) {
- fprintf(stdout, "Usage: %s [keyfile]\n", argv[0]);
- status = 0;
- goto err;
- } else {
- if (!(b = BIO_new_file(argv[1], "r")))
- die("couldn't open file");
- }
- } else {
- fprintf(stderr, "Usage: %s [keyfile]\n", argv[0]);
- goto err;
- }
- if (!(key = PEM_read_bio_RSAPrivateKey(b, NULL, NULL, NULL)))
- die("couldn't parse key");
-
- len = i2d_RSAPublicKey(key, NULL);
- if (len < 0)
- die("Bizarre key");
- bufp = buf = malloc(len+1);
- if (!buf)
- die("Out of memory");
- len = i2d_RSAPublicKey(key, &bufp);
- if (len < 0)
- die("Bizarre key");
-
- SHA1(buf, len, digest);
- for (i=0; i < 20; i += 2) {
- printf("%02X%02X ", (int)digest[i], (int)digest[i+1]);
- }
- printf("\n");
-
- status = 0;
-
-err:
- if (buf)
- free(buf);
- if (key)
- RSA_free(key);
- if (b)
- BIO_free(b);
- return status;
-}
-
diff --git a/contrib/include.am b/contrib/include.am
new file mode 100644
index 000000000..5d5f21649
--- /dev/null
+++ b/contrib/include.am
@@ -0,0 +1,18 @@
+
+EXTRA_DIST+= \
+ contrib/README \
+ contrib/client-tools/torify \
+ contrib/dist/rc.subr \
+ contrib/dist/suse/tor.sh.in \
+ contrib/dist/tor.sh \
+ contrib/dist/torctl \
+ contrib/dist/tor.service.in \
+ contrib/operator-tools/linux-tor-prio.sh \
+ contrib/operator-tools/tor-exit-notice.html \
+ contrib/or-tools/exitlist \
+ contrib/win32build/package_nsis-mingw.sh \
+ contrib/win32build/tor-mingw.nsi.in \
+ contrib/win32build/tor.ico \
+ contrib/win32build/tor.nsi.in
+
+bin_SCRIPTS+= contrib/client-tools/torify
diff --git a/contrib/make-signature.sh b/contrib/make-signature.sh
deleted file mode 100755
index 4aba08b75..000000000
--- a/contrib/make-signature.sh
+++ /dev/null
@@ -1,79 +0,0 @@
-#!/bin/sh
-
-set -eu
-
-if test "$1" = "" ; then
- echo "I need a package as an argument."
- exit 1
-fi
-
-PACKAGEFILE=$1
-
-if test ! -f "$PACKAGEFILE" ; then
- echo "$PACKAGEFILE is not a file."
- exit 1
-fi
-
-DIGESTNAME=sha256
-DIGESTOUTPUT=`gpg --print-md $DIGESTNAME $PACKAGEFILE`
-
-RAWDIGEST=`gpg --print-md $DIGESTNAME $PACKAGEFILE | sed -e 's/^[^ ]*: //' `
-
-# These regexes are a little fragile, but I think they work for us.
-VERSION=`echo $PACKAGEFILE | sed -e 's/^[a-z\-]*//' -e 's/\.[\.a-z]*$//' `
-PACKAGE=`echo $PACKAGEFILE | sed -e 's/-[0-9].*//'`
-SIGFILE_UNSIGNED="$PACKAGE-$VERSION-signature"
-SIGNATUREFILE="$SIGFILE_UNSIGNED.asc"
-
-cat >$SIGFILE_UNSIGNED <<EOF
-This is the signature file for "$PACKAGEFILE",
-which contains version "$VERSION" of "$PACKAGE".
-
-Here's how to check this signature.
-
-1) Make sure that this is really a signature file, and not a forgery,
- with:
-
- "gpg --verify $SIGNATUREFILE"
-
- The key should be one of the keys that signs the Tor release; the
- official Tor website has more information on those.
-
- If this step fails, then either you are missing the correct key, or
- this signature file was not really signed by a Tor packager.
- Beware!
-
-2) Make sure that the package you wanted is indeed "$PACKAGE", and that
- its version you wanted is indeed "$VERSION". If you wanted a
- different package, or a different version, this signature file is
- not the right one!
-
-3) Now that you're sure you have the right signature file, make sure
- that you got the right package. Check its $DIGESTNAME digest with
-
- "gpg --print-md $DIGESTNAME $PACKAGEFILE"
-
- The output should match this, exactly:
-
-$DIGESTOUTPUT
-
- Make sure that every part of the output matches: don't just check the
- first few characters. If the digest does not match, you do not have
- the right package file. It could even be a forgery.
-
-Frequently asked questions:
-
-Q: Why not just sign the package file, like you used to do?
-A: GPG signatures authenticate file contents, but not file names. If
- somebody gave you a renamed file with a matching renamed signature
- file, the signature would still be given as "valid".
-
---
-FILENAME: $PACKAGEFILE
-PACKAGE: $PACKAGE
-VERSION: $VERSION
-DIGESTALG: $DIGESTNAME
-DIGEST: $RAWDIGEST
-EOF
-
-gpg --clearsign $SIGFILE_UNSIGNED
diff --git a/contrib/mdd.py b/contrib/mdd.py
deleted file mode 100755
index e0b496b8f..000000000
--- a/contrib/mdd.py
+++ /dev/null
@@ -1,169 +0,0 @@
-#!/usr/bin/env python2.3
-
-import re, sys
-import textwrap
-
-files = sys.argv[1:]
-funcDeclaredIn = {}
-fileDeclares = {}
-functionCalls = {}
-funcCalledByFile = {}
-funcCalledByFunc = {}
-
-cpp_re = re.compile(r'//.*$')
-c_re = re.compile(r'/[*]+(?:[^*]+|[*]+[^/*])*[*]+/', re.M|re.S)
-
-for fname in files:
- f = open(fname, 'r')
- curFunc = "???"
- functionCalls.setdefault(curFunc,{})
- lineno = 0
- body = f.read()
- body = cpp_re.sub(" ",body)
- body = c_re.sub(" ",body)
- #if fname == 'dns.c': print body
- for line in body.split("\n"):
- lineno += 1
- m = re.match(r'^[^\s/].*\s(\w+)\([^;]*$', line)
- if m:
- #print line, "->", m.group(1)
- curFunc = m.group(1)
- if curFunc[0] == '_': curFunc = curFunc[1:]
- functionCalls.setdefault(curFunc,{})
- funcDeclaredIn[m.group(1)] = fname
- fileDeclares.setdefault(fname, {})[m.group(1)] = 1
- continue
- m = re.match(r'^(\w+)\([^;]', line)
- if m:
- #print line, "->", m.group(1)
- curFunc = m.group(1)
- if curFunc[0] == '_': curFunc = curFunc[1:]
- functionCalls.setdefault(curFunc,{})
- funcDeclaredIn[m.group(1)] = fname
- fileDeclares.setdefault(fname, {})[m.group(1)] = 1
- continue
- while line:
- m = re.search(r'(\w+)\(', line)
- if not m: break
- #print fname, line, curFunc, "->", m.group(1)
- fn = m.group(1)
- if fn[0] == '_':
- fn = fn[1:]
- functionCalls[curFunc][m.group(1)] = 1
- #if curFunc == "???":
- # print ">>!!!!! at %s:%s"%(fname,lineno)
- funcCalledByFunc.setdefault(m.group(1), {})[curFunc]=1
- funcCalledByFile.setdefault(m.group(1), {})[fname]=1
- line = line[m.end():]
-
- f.close()
-
-fileUsers = {}
-fileUses = {}
-
-for fname in files:
- print "%s:"%fname
- users = {}
- for func in fileDeclares[fname]:
- cb = funcCalledByFile.get(func,{}).keys()
- for f in cb: users[f] = 1
- #print "users[%s] = %s"%(f,users[f])
- users = users.keys()
- users.sort()
- fileUsers[fname] = users
- for user in users:
- fileUses.setdefault(user,[]).append(fname)
- if user == fname: continue
- print " from %s:"%user
- for func in fileDeclares[fname]:
- if funcCalledByFile.get(func,{}).get(user,0):
- print " %s()"%func
-
-def wrap(s, pre):
- return textwrap.fill(s,
- width=77, initial_indent=pre,
- subsequent_indent=" "*len(pre))
-
-for fname in files:
- print
- print "===== %s"%fname
- print wrap(" ".join(fileUses[fname]),
- " Calls: ")
- print wrap(" ".join(fileUsers[fname]),
- " Called by: ")
-
-print "=============================="
-
-funcnames = functionCalls.keys()
-funcnames.sort()
-
-if 1:
- for func in funcnames:
- print "===== %s"%func
- callers = [c for c in funcCalledByFunc.get(func,{}).keys()
- if c != "???"]
- callers.sort()
- called = [c for c in functionCalls[func].keys() if c != "???" and
- c in funcnames]
- called.sort()
- print wrap(" ".join(callers),
- " Called by:")
- print wrap(" ".join(called),
- " Calls:")
-
-# simple topological sort.
-functionDepth = {}
-while 1:
- BIG = 1000000
- any = 0
- for func in funcnames:
- if functionDepth.has_key(func):
- continue
- called = [c for c in functionCalls[func] if c != func and
- functionCalls.has_key(c)]
- if len(called) == 0:
- functionDepth[func] = 0
- #print "Depth(%s)=%s"%(func,0)
- any = 1
- continue
- calledDepths = [ functionDepth.get(c,BIG) for c in called ]
- if max(calledDepths) < BIG:
- d = functionDepth[func] = max(calledDepths)+1
- #print "Depth(%s)=%s"%(func,d)
- any = 1
- continue
- if not any:
- break
-
-# compute lexical closure.
-cycCalls = {}
-for func in funcnames:
- if not functionDepth.has_key(func):
- calls = [ c for c in functionCalls[func] if c != func and
- functionCalls.has_key(c) and not functionDepth.has_key(c)]
- cycCalls[func] = d = {}
- for c in calls:
- d[c]=1
-
-cycNames = cycCalls.keys()
-while 1:
- any = 0
- for func in cycNames:
- L = len(cycCalls[func])
- for called in cycCalls[func].keys():
- cycCalls[func].update(cycCalls[called])
- if L != len(cycCalls[func]):
- any = 1
- if not any:
- break
-
-depthList = [ (v,k) for k,v in functionDepth.items() ]
-depthList.sort()
-cycList = [ (len(v),k) for k,v in cycCalls.items() ]
-cycList.sort()
-for depth,name in depthList:
- print "Depth[%s]=%s"%(name,depth)
-for bredth,name in cycList:
- print "Width[%s]=%s"%(name,bredth)
-
-print "Sorted %s / %s"%(len(functionDepth),len(funcnames))
diff --git a/contrib/netinst.nsi b/contrib/netinst.nsi
deleted file mode 100644
index 08d950ab0..000000000
--- a/contrib/netinst.nsi
+++ /dev/null
@@ -1,74 +0,0 @@
-!include "MUI.nsh"
-!include "LogicLib.nsh"
-!include "FileFunc.nsh"
-
-!define VERSION "0.2.1.13"
-!define INSTALLER "TorNetInstaller.exe"
-!define WEBSITE "https://www.torproject.org/"
-!define LICENSE "LICENSE"
-
-SetCompressor /SOLID BZIP2
-RequestExecutionLevel user
-OutFile ${INSTALLER}
-InstallDir "$TEMP\TorInstTmp"
-SetOverWrite on
-Name "Tor Network Installer"
-Caption "Tor Network Installer"
-BrandingText "Tor Network Installer"
-CRCCheck on
-XPStyle on
-ShowInstDetails hide
-VIProductVersion "${VERSION}"
-VIAddVersionKey "ProductName" "Tor"
-VIAddVersionKey "Comments" "${WEBSITE}"
-VIAddVersionKey "LegalTrademarks" "Three line BSD"
-VIAddVersionKey "LegalCopyright" "©2004-2011, Roger Dingledine, Nick Mathewson, The Tor Project, Inc."
-VIAddVersionKey "FileDescription" "Tor is an implementation of Onion Routing. You can read more at ${WEBSITE}"
-VIAddVersionKey "FileVersion" "${VERSION}"
-
-!define MUI_ICON "torinst32.ico"
-!define MUI_HEADERIMAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Header\win.bmp"
-!insertmacro MUI_PAGE_INSTFILES
-!insertmacro MUI_LANGUAGE "English"
-
-Section "Tor" Tor
- SectionIn RO
- SetOutPath $INSTDIR
- Call ExtractPackages
- Call RunInstallers
- Call LaunchVidalia
- Call CleanUpTemp
-SectionEnd
-
-Function ExtractPackages
- File "license.msi"
- File "thandy.msi"
-FunctionEnd
-
-Function RunInstallers
- ExecWait 'msiexec /i "$INSTDIR\license.msi" /qn'
- ExecWait 'msiexec /i "$INSTDIR\thandy.msi" NOSC=1 /qn'
- ExecWait '"$LOCALAPPDATA\Programs\Thandy\thandy.exe" update "--repo=$LOCALAPPDATA\Thandy\Tor Updates" /bundleinfo/tor/win32/'
- ExecWait '"$LOCALAPPDATA\Programs\Thandy\thandy.exe" update "--repo=$LOCALAPPDATA\Thandy\Polipo Updates" /bundleinfo/polipo/win32/'
- ExecWait '"$LOCALAPPDATA\Programs\Thandy\thandy.exe" update "--repo=$LOCALAPPDATA\Thandy\TorButton Updates" /bundleinfo/torbutton/win32/'
- ExecWait '"$LOCALAPPDATA\Programs\Thandy\thandy.exe" update "--repo=$LOCALAPPDATA\Thandy\Vidalia Updates" /bundleinfo/vidalia/win32/'
- ExecWait '"$LOCALAPPDATA\Programs\Thandy\thandy.exe" update --install "--repo=$LOCALAPPDATA\Thandy\Tor Updates" /bundleinfo/tor/win32/'
- ExecWait '"$LOCALAPPDATA\Programs\Thandy\thandy.exe" update --install "--repo=$LOCALAPPDATA\Thandy\Polipo Updates" /bundleinfo/polipo/win32/'
- ExecWait '"$LOCALAPPDATA\Programs\Thandy\thandy.exe" update --install "--repo=$LOCALAPPDATA\Thandy\TorButton Updates" /bundleinfo/torbutton/win32/'
- ExecWait '"$LOCALAPPDATA\Programs\Thandy\thandy.exe" update --install "--repo=$LOCALAPPDATA\Thandy\Vidalia Updates" /bundleinfo/vidalia/win32/'
- ExpandEnvStrings $0 %COMSPEC%
- Exec '"$0" /C "$INSTDIR\tbcheck.bat"'
-FunctionEnd
-
-Function LaunchVidalia
- SetOutPath "$LOCALAPPDATA\Programs\Vidalia"
- Exec 'vidalia.exe -loglevel info -logfile log.txt'
-FunctionEnd
-
-Function CleanUpTemp
- ExecWait '"del" "$INSTDIR\license.msi"'
- ExecWait '"del" "$INSTDIR\thandy.msi"'
- SetOutPath $TEMP
- RMDir /r $TEMP\TorInstTmp
-FunctionEnd
-
diff --git a/contrib/linux-tor-prio.sh b/contrib/operator-tools/linux-tor-prio.sh
index ea9e0ddaa..ea9e0ddaa 100644
--- a/contrib/linux-tor-prio.sh
+++ b/contrib/operator-tools/linux-tor-prio.sh
diff --git a/contrib/tor-exit-notice.html b/contrib/operator-tools/tor-exit-notice.html
index 8cf5c294f..8cf5c294f 100644
--- a/contrib/tor-exit-notice.html
+++ b/contrib/operator-tools/tor-exit-notice.html
diff --git a/contrib/tor.logrotate.in b/contrib/operator-tools/tor.logrotate.in
index 6e75f80bf..6e75f80bf 100644
--- a/contrib/tor.logrotate.in
+++ b/contrib/operator-tools/tor.logrotate.in
diff --git a/contrib/check-tor b/contrib/or-tools/check-tor
index e981a35fc..e981a35fc 100755
--- a/contrib/check-tor
+++ b/contrib/or-tools/check-tor
diff --git a/contrib/checksocks.pl b/contrib/or-tools/checksocks.pl
index 3fcc0df14..3fcc0df14 100755
--- a/contrib/checksocks.pl
+++ b/contrib/or-tools/checksocks.pl
diff --git a/contrib/exitlist b/contrib/or-tools/exitlist
index 3fd26b516..3fd26b516 100755
--- a/contrib/exitlist
+++ b/contrib/or-tools/exitlist
diff --git a/contrib/package_nsis-weasel.sh b/contrib/package_nsis-weasel.sh
deleted file mode 100755
index 8dd494852..000000000
--- a/contrib/package_nsis-weasel.sh
+++ /dev/null
@@ -1,90 +0,0 @@
-#!/bin/sh
-
-set -e
-
-#
-# Script to package a Tor installer on win32. This script assumes that
-# you have already built Tor, that you are running cygwin, and that your
-# environment is basically exactly the same as Nick's.
-
-if ! [ -d Win32Build ] || ! [ -d contrib ]; then
- echo "No Win32Build and/or no contrib directory here. Are we in the right place?" >&2
- exit 1
-fi
-
-rm -rf win_tmp
-mkdir win_tmp
-mkdir win_tmp/bin
-mkdir win_tmp/contrib
-mkdir win_tmp/doc
-mkdir win_tmp/doc/website
-mkdir win_tmp/doc/design-paper
-mkdir win_tmp/doc/contrib
-mkdir win_tmp/src
-mkdir win_tmp/src/config
-mkdir win_tmp/tmp
-
-cp Win32Build/vc7/Tor/Debug/Tor.exe win_tmp/bin/tor.exe
-cp Win32Build/vc7/tor_resolve/Debug/tor_resolve.exe win_tmp/bin
-cp ../c-windows-system32/libeay32.dll win_tmp/bin
-cp ../c-windows-system32/ssleay32.dll win_tmp/bin
-
-man2html doc/tor.1.in > win_tmp/tmp/tor-reference.html
-man2html doc/tor-resolve.1 > win_tmp/tmp/tor-resolve.html
-
-clean_newlines() {
- perl -pe 's/^\n$/\r\n/mg; s/([^\r])\n$/\1\r\n/mg;' $1 >$2
-}
-
-clean_localstatedir() {
- perl -pe 's/^\n$/\r\n/mg; s/([^\r])\n$/\1\r\n/mg; s{\@LOCALSTATEDIR\@/(lib|log)/tor/}{C:\\Documents and Settings\\Application Data\\Tor\\}' $1 >$2
-}
-
-for fn in \
- doc/HACKING \
- doc/control-spec.txt \
- doc/dir-spec.txt \
- doc/rend-spec.txt \
- doc/socks-extensions.txt \
- doc/tor-spec.txt \
- doc/version-spec.txt \
- \
- doc/website/* \
- ; do
- clean_newlines "$fn" win_tmp/"$fn"
-done
-mmv win_tmp/doc/website/"*.html.*" win_tmp/doc/website/"#1.#2.html"
-
-cp doc/design-paper/tor-design.pdf win_tmp/doc/design-paper/tor-design.pdf
-
-for fn in tor-reference.html tor-resolve.html; do \
- clean_newlines win_tmp/tmp/$fn win_tmp/doc/$fn
-done
-
-for fn in README AUTHORS ChangeLog LICENSE; do \
- clean_newlines $fn win_tmp/$fn
-done
-
-clean_localstatedir src/config/torrc.sample.in win_tmp/src/config/torrc.sample
-
-cp contrib/tor.nsi.in win_tmp/contrib/tor.nsi
-(
- echo '/WEBSITE-FILES-HERE/'
- echo 'a' # append
- for fn in win_tmp/doc/website/*; do
- echo -n 'File "..\doc\website\'
- echo -n "`basename $fn`"
- echo '"'
- done
- echo "." # end input
- echo "w" # write
- echo "q" # quit
-) | ed win_tmp/contrib/tor.nsi
-
-cd win_tmp/contrib
-
-echo "Now run"
-echo ' t:'
-echo ' cd \tor\win_tmp\contrib'
-echo ' c:\programme\nsis\makensis tor.nsi'
-echo ' move tor-*.exe ../../..'
diff --git a/contrib/package_nsis.sh b/contrib/package_nsis.sh
deleted file mode 100644
index 863dfdff9..000000000
--- a/contrib/package_nsis.sh
+++ /dev/null
@@ -1,57 +0,0 @@
-#!/bin/sh
-#
-# Script to package a Tor installer on win32. This script assumes that
-# you have already built Tor, that you are running cygwin, and that your
-# environment is basically exactly the same as Nick's.
-
-# This file is obsolete.
-
-rm -rf win_tmp
-mkdir win_tmp
-mkdir win_tmp/bin
-mkdir win_tmp/contrib
-mkdir win_tmp/doc
-mkdir win_tmp/doc/design-paper
-mkdir win_tmp/doc/contrib
-mkdir win_tmp/src
-mkdir win_tmp/src/config
-mkdir win_tmp/tmp
-
-cp Win32Build/vc7/Tor/Debug/Tor.exe win_tmp/bin/tor.exe
-cp Win32Build/vc7/tor_resolve/Debug/tor_resolve.exe win_tmp/bin
-cp c:/windows/system32/libeay32.dll win_tmp/bin
-cp c:/windows/system32/ssleay32.dll win_tmp/bin
-
-man2html doc/tor.1.in > win_tmp/tmp/tor-reference.html
-man2html doc/tor-resolve.1 > win_tmp/tmp/tor-resolve.html
-
-clean_newlines() {
- perl -pe 's/^\n$/\r\n/mg; s/([^\r])\n$/\1\r\n/mg;' $1 >$2
-}
-
-clean_localstatedir() {
- perl -pe 's/^\n$/\r\n/mg; s/([^\r])\n$/\1\r\n/mg; s{\@LOCALSTATEDIR\@/(lib|log)/tor/}{C:\\Documents and Settings\\Application Data\\Tor\\}' $1 >$2
-}
-
-for fn in tor-spec.txt HACKING rend-spec.txt control-spec.txt \
- tor-doc.html tor-doc.css version-spec.txt; do
- clean_newlines doc/$fn win_tmp/doc/$fn
-done
-
-cp doc/design-paper/tor-design.pdf win_tmp/doc/design-paper/tor-design.pdf
-
-for fn in tor-reference.html tor-resolve.html; do \
- clean_newlines win_tmp/tmp/$fn win_tmp/doc/$fn
-done
-
-for fn in README AUTHORS ChangeLog LICENSE; do \
- clean_newlines $fn win_tmp/$fn
-done
-
-clean_localstatedir src/config/torrc.sample.in win_tmp/src/config/torrc.sample
-
-cp contrib/tor.nsi win_tmp/contrib
-
-cd win_tmp/contrib
-makensis tor.nsi
-mv tor-*.exe ../..
diff --git a/contrib/polipo/Makefile.mingw b/contrib/polipo/Makefile.mingw
deleted file mode 100644
index ddb20ec48..000000000
--- a/contrib/polipo/Makefile.mingw
+++ /dev/null
@@ -1,100 +0,0 @@
-PREFIX = Polipo
-BINDIR = $(PREFIX)\bin
-MANDIR = $(PREFIX)\man
-INFODIR = $(PREFIX)\info
-LOCAL_ROOT = $(PREFIX)
-DISK_CACHE_ROOT = $(PREFIX)\cache
-
-# To compile with Unix CC:
-
-# CDEBUGFLAGS=-O
-
-# To compile with GCC:
-
-# CC = gcc
-# CDEBUGFLAGS = -Os -g -Wall -std=gnu99
-CDEBUGFLAGS = -Os -g -Wall
-# CDEBUGFLAGS = -Os -Wall
-# CDEBUGFLAGS = -g -Wall
-
-# To compile on a pure POSIX system:
-
-# CC = c89
-# CC = c99
-# CDEBUGFLAGS=-O
-
-# To compile with icc 7, you need -restrict. (Their bug.)
-
-# CC=icc
-# CDEBUGFLAGS = -O -restrict
-
-# On System V (Solaris, HP/UX) you need the following:
-
-# PLATFORM_DEFINES = -DSVR4
-
-# On Solaris, you need the following:
-
-# LDLIBS = -lsocket -lnsl -lresolv
-
-# On mingw, you need
-
- EXE=.exe
- LDLIBS = -lwsock32 -lregex
-
-FILE_DEFINES = -DHAVE_REGEX
-
-# You may optionally also add any of the following to DEFINES:
-#
-# -DNO_DISK_CACHE to compile out the on-disk cache and local web server;
-# -DNO_IPv6 to avoid using the RFC 3493 API and stick to stock
-# Berkeley sockets;
-# -DHAVE_IPv6 to force the use of the RFC 3493 API on systems other
-# than GNU/Linux and BSD (let me know if it works);
-# -DNO_FANCY_RESOLVER to compile out the asynchronous name resolution
-# code;
-# -DNO_STANDARD_RESOLVER to compile out the code that falls back to
-# gethostbyname/getaddrinfo when DNS requests fail;
-# -DNO_TUNNEL to compile out the code that handles CONNECT requests;
-# -DNO_SOCKS to compile out the SOCKS gateway code.
-# -DNO_FORBIDDEN to compile out the all of the forbidden URL code
-# -DNO_REDIRECTOR to compile out the Squid-style redirector code
-# -DNO_SYSLOG to compile out logging to syslog
-
-DEFINES = $(FILE_DEFINES) $(PLATFORM_DEFINES)
-
-CFLAGS = $(MD5INCLUDES) $(CDEBUGFLAGS) $(DEFINES) $(EXTRA_DEFINES)
-
-SRCS = util.c event.c io.c chunk.c atom.c object.c log.c diskcache.c main.c \
- config.c local.c http.c client.c server.c auth.c tunnel.c \
- http_parse.c parse_time.c dns.c forbidden.c \
- md5import.c md5.c ftsimport.c fts_compat.c socks.c mingw.c
-
-OBJS = util.o event.o io.o chunk.o atom.o object.o log.o diskcache.o main.o \
- config.o local.o http.o client.o server.o auth.o tunnel.o \
- http_parse.o parse_time.o dns.o forbidden.o \
- md5import.o ftsimport.o socks.o mingw.o
-
-polipo$(EXE): $(OBJS)
- $(CC) $(CFLAGS) $(LDFLAGS) -o polipo$(EXE) $(OBJS) $(MD5LIBS) $(LDLIBS)
-
-ftsimport.o: ftsimport.c fts_compat.c
-
-md5import.o: md5import.c md5.c
-
-.PHONY: all install install.binary install.man
-
-all: polipo$(EXE) polipo.info html/index.html localindex.html
-
-TAGS: $(SRCS)
- etags $(SRCS)
-
-.PHONY: clean
-
-clean:
- -rm -f polipo$(EXE) *.o *~ core TAGS gmon.out
- -rm -f polipo.cp polipo.fn polipo.log polipo.vr
- -rm -f polipo.cps polipo.info* polipo.pg polipo.toc polipo.vrs
- -rm -f polipo.aux polipo.dvi polipo.ky polipo.ps polipo.tp
- -rm -f polipo.dvi polipo.ps polipo.ps.gz polipo.pdf polipo.html
- -rm -rf ./html/
- -rm -f polipo.man.html
diff --git a/contrib/polipo/README b/contrib/polipo/README
deleted file mode 100644
index 1110ca273..000000000
--- a/contrib/polipo/README
+++ /dev/null
@@ -1,47 +0,0 @@
-Copyright 2007-2008, Andrew Lewman
-Copyright 2009-2011, The Tor Project
-
-----------------
-General Comments
-----------------
-
-These are some hacks for making polipo work and install a package native
-to Windows.
-
-They need some work before they can be committed upstream:
- - Change the Makefile so it has a specific build such as "make
- dist-win32"
- - Configure the options for tor in polipo config, just leave them
- commented out for easy activation.
- - Work out better polipo config options for Tor.
-
-As always, I'm happy to accept patches.
-
---------------------------
-Pre-requisites for Windows
---------------------------
-
-Polipo for Win32 requires the mingw gnu regex library and dlls at
-http://sourceforge.net/project/showfiles.php?group_id=2435&package_id=73286&release_id=140957
-
-You'll need to download the -bin and -dev tarballs. And extract them
-into your MinGW directory.
-
-Instructions for building polipo under mingw32 for Windows:
-1) Copy Makefile.mingw over Makefile.
-2) Run 'make'.
-
-You should have a polipo.exe in the current directory.
-
--------------------------------------------
-Creating an installation package in Windows
--------------------------------------------
-
-If you want to build an installer using the Nullsoft Installer, install
-the NSI Compiler. In Windows Explorer, navigate to the directory in
-which you placed polipo-mingw.nsi. Right click on polipo-mingw.nsi and
-choose Compile NSIS Script. You'll then create a polipo installer.
-
-The Polipo NSI installer assumes libgnurx-0.dll is in the same directory as polipo.exe.
-You'll need to copy libgnurx-0.dll into "./" in order to make the
-installation package.
diff --git a/contrib/polipo/polipo-mingw.nsi b/contrib/polipo/polipo-mingw.nsi
deleted file mode 100644
index 624e825eb..000000000
--- a/contrib/polipo/polipo-mingw.nsi
+++ /dev/null
@@ -1,172 +0,0 @@
-;polipo-mingw.nsi - A basic win32 installer for Polipo
-; Originally written by J Doe.
-; Modified by Andrew Lewman
-; This is licensed under a Modified BSD license.
-;-----------------------------------------
-;
-!include "MUI.nsh"
-
-!define VERSION "1.0.4.0-forbidden-1"
-!define INSTALLER "polipo-${VERSION}-win32.exe"
-!define WEBSITE "http://www.pps.jussieu.fr/~jch/software/polipo/"
-
-!define LICENSE "COPYING"
-;BIN is where it expects to find polipo.exe
-!define BIN "."
-
-SetCompressor lzma
-OutFile ${INSTALLER}
-InstallDir $PROGRAMFILES\Polipo
-SetOverWrite ifnewer
-
-Name "Polipo"
-Caption "Polipo ${VERSION} Setup"
-BrandingText "A Caching Web Proxy"
-CRCCheck on
-XPStyle on
-VIProductVersion "${VERSION}"
-VIAddVersionKey "ProductName" "Polipo: A caching web proxy"
-VIAddVersionKey "Comments" "http://www.pps.jussieu.fr/~jch/software/polipo/"
-VIAddVersionKey "LegalTrademarks" "See COPYING"
-VIAddVersionKey "LegalCopyright" "©2008, Juliusz Chroboczek"
-VIAddVersionKey "FileDescription" "Polipo is a caching web proxy."
-VIAddVersionKey "FileVersion" "${VERSION}"
-
-!define MUI_WELCOMEPAGE_TITLE "Welcome to the Polipo ${VERSION} Setup Wizard"
-!define MUI_WELCOMEPAGE_TEXT "This wizard will guide you through the installation of Polipo ${VERSION}.\r\n\r\nIf you have previously installed Polipo and it is currently running, please exit Polipo first before continuing this installation.\r\n\r\n$_CLICK"
-!define MUI_ABORTWARNING
-!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\win-install.ico"
-!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\win-uninstall.ico"
-!define MUI_HEADERIMAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Header\win.bmp"
-!define MUI_HEADERIMAGE
-;!define MUI_FINISHPAGE_RUN
-!define MUI_FINISHPAGE_LINK "Visit the Polipo website for the latest updates."
-!define MUI_FINISHPAGE_LINK_LOCATION ${WEBSITE}
-
-!insertmacro MUI_PAGE_WELCOME
-!insertmacro MUI_PAGE_COMPONENTS
-!insertmacro MUI_PAGE_DIRECTORY
-!insertmacro MUI_PAGE_INSTFILES
-!insertmacro MUI_PAGE_FINISH
-!insertmacro MUI_UNPAGE_WELCOME
-!insertmacro MUI_UNPAGE_CONFIRM
-!insertmacro MUI_UNPAGE_INSTFILES
-!insertmacro MUI_UNPAGE_FINISH
-!insertmacro MUI_LANGUAGE "English"
-
-Var configfile
-Var forbiddenfile
-
-;Sections
-;--------
-
-Section "Polipo" Polipo
-;Files that have to be installed for polipo to run and that the user
-;cannot choose not to install
- SectionIn RO
- SetOutPath $INSTDIR
- File "${BIN}\polipo.exe"
- File "${BIN}\COPYING"
- File "${BIN}\CHANGES"
- File "${BIN}\config.sample"
- File "${BIN}\forbidden.sample"
- File "${BIN}\README.Windows"
- File "${BIN}\libgnurx-0.dll"
- WriteIniStr "$INSTDIR\Polipo Website.url" "InternetShortcut" "URL" ${WEBSITE}
-
- StrCpy $configfile "config"
- StrCpy $forbiddenfile "forbidden"
- SetOutPath $INSTDIR
- ;If there's already a polipo config file, ask if they want to
- ;overwrite it with the new one.
- IfFileExists "$INSTDIR\config" "" endifconfig
- MessageBox MB_ICONQUESTION|MB_YESNO "You already have a Polipo config file.$\r$\nDo you want to overwrite it with the default sample config file?" IDNO yesreplace
- Delete $INSTDIR\config
- Goto endifconfig
- yesreplace:
- StrCpy $configfile ".\config.sample"
- endifconfig:
- File /oname=$configfile ".\config.sample"
- ;If there's already a polipo forbidden file, ask if they want to
- ;overwrite it with the new one.
- IfFileExists "$INSTDIR\forbidden" "" endifforbidden
- MessageBox MB_ICONQUESTION|MB_YESNO "You already have a Polipo forbidden file.$\r$\nDo you want to overwrite it with the default sample forbidden file?" IDNO forbidyesreplace
- Delete $INSTDIR\forbidden
- Goto endifforbidden
- forbidyesreplace:
- StrCpy $forbiddenfile ".\forbidden.sample"
- endifforbidden:
- File /oname=$forbiddenfile ".\forbidden.sample"
- IfFileExists "$INSTDIR\bin\*.*" "" endifbinroot
- CreateDirectory "$INSTDIR\bin"
- endifbinroot:
- CopyFiles "${BIN}\localindex.html" $INSTDIR\index.html
- IfFileExists "$INSTDIR\cache\*.*" "" endifcache
- CreateDirectory "$INSTDIR\cache"
- endifcache:
-SectionEnd
-
-SubSection /e "Shortcuts" Shortcuts
-
-Section "Start Menu" StartMenu
- SetOutPath $INSTDIR
- IfFileExists "$SMPROGRAMS\Polipo\*.*" "" +2
- RMDir /r "$SMPROGRAMS\Polipo"
- CreateDirectory "$SMPROGRAMS\Polipo"
- CreateShortCut "$SMPROGRAMS\Polipo\Polipo.lnk" "$INSTDIR\polipo.exe" "-c config"
- CreateShortCut "$SMPROGRAMS\Polipo\Poliporc.lnk" "Notepad.exe" "$INSTDIR\config"
- CreateShortCut "$SMPROGRAMS\Polipo\Polipo Documentation.lnk" "$INSTDIR\www\index.html"
- CreateShortCut "$SMPROGRAMS\Polipo\Polipo Website.lnk" "$INSTDIR\Polipo Website.url"
- CreateShortCut "$SMPROGRAMS\Polipo\Uninstall.lnk" "$INSTDIR\Uninstall.exe"
-SectionEnd
-
-Section "Desktop" Desktop
- SetOutPath $INSTDIR
- CreateShortCut "$DESKTOP\Polipo.lnk" "$INSTDIR\polipo.exe" "-c config"
-SectionEnd
-
-Section /o "Run at startup" Startup
- SetOutPath $INSTDIR
- CreateShortCut "$SMSTARTUP\Polipo.lnk" "$INSTDIR\polipo.exe" "-c config -f forbidden" "" "" "" SW_SHOWMINIMIZED
-SectionEnd
-
-SubSectionEnd
-
-Section "Uninstall"
- Delete "$DESKTOP\Polipo.lnk"
- Delete "$INSTDIR\polipo.exe"
- Delete "$INSTDIR\Polipo Website.url"
- Delete "$INSTDIR\config"
- Delete "$INSTDIR\config.sample"
- Delete "$INSTDIR\forbidden.sample"
- Delete "$INSTDIR\libgnurx-0.dll"
- Delete "$INSTDIR\COPYING"
- Delete "$INSTDIR\CHANGES"
- Delete "$INSTDIR\README.Windows"
- StrCmp $INSTDIR $INSTDIR +2 ""
- RMDir /r $INSTDIR
- Delete "$INSTDIR\Uninstall.exe"
- RMDir /r "$INSTDIR\Documents"
- RMDir $INSTDIR
- RMDir /r "$SMPROGRAMS\Polipo"
- RMDir /r "$APPDATA\Polipo"
- Delete "$SMSTARTUP\Polipo.lnk"
- DeleteRegKey HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Polipo"
-SectionEnd
-
-Section -End
- WriteUninstaller "$INSTDIR\Uninstall.exe"
- ;The registry entries simply add the Polipo uninstaller to the Windows
- ;uninstall list.
- WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Polipo" "DisplayName" "Polipo (remove only)"
- WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Polipo" "UninstallString" '"$INSTDIR\Uninstall.exe"'
-SectionEnd
-
-!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
- !insertmacro MUI_DESCRIPTION_TEXT ${Polipo} "The core executable and config files needed for Polipo to run."
- !insertmacro MUI_DESCRIPTION_TEXT ${ShortCuts} "Shortcuts to easily start Polipo"
- !insertmacro MUI_DESCRIPTION_TEXT ${StartMenu} "Shortcuts to access Polipo and it's documentation from the Start Menu"
- !insertmacro MUI_DESCRIPTION_TEXT ${Desktop} "A shortcut to start Polipo from the desktop"
- !insertmacro MUI_DESCRIPTION_TEXT ${Startup} "Launches Polipo automatically at startup in a minimized window"
-!insertmacro MUI_FUNCTION_DESCRIPTION_END
-
diff --git a/contrib/sd b/contrib/sd
deleted file mode 100755
index 232e8accd..000000000
--- a/contrib/sd
+++ /dev/null
@@ -1,84 +0,0 @@
-#!/bin/bash
-#
-# Copyright (c) 2005, 2006, 2007, 2008 Peter Palfrader <peter@palfrader.org>
-# Copyright (c) 2008, 2009 Jacob Appelbaum <jacob@appelbaum.net>
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be
-# included in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-# This small script fetches information about a server when given a nickname.
-# It currently uses the v2 dir information and not the v3 consensus by default.
-# It requires wget, perl, awk to function properly. This is based on a zsh
-# dotfile from weasel and adapted to be a small bash utility.
-#
-
-# Feel free to set any authority you desire, we're using weasel's by default
-# You could also try the v3 directory infomation in weasel's dir authority:
-# http://tor.noreply.org/tor/status-vote/current/consensus
-#
-
-# Users can select between the two
-v3authority="http://tor.noreply.org/tor/status-vote/current/consensus";
-v2authority="http://tor.noreply.org:80/tor/status/authority";
-authority=$v2authority;
-
-function usage {
- echo "Usage: $0 [-2|-3] nodenickname";
-}
-
-if [ -z "$1" ];
-then
- usage;
- exit;
-fi
-
-# Are we switching between v2 or v3?
-if [ "$1" == "-2" -o "$1" == "-3" ];
-then
- if [ "$1" == "-2" -a -n "$2" ];
- then
- authority=$v2authority;
- nickname="$2";
- elif [ "$1" == "-3" -a -n "$2" ];
- then
- authority=$v3authority;
- nickname="$2";
- else
- usage;
- exit;
- fi
-else
- nickname="$1";
-fi
-
-# Fetch it and decode the fingerprint
-fp=`wget -q -O - $authority | \
- awk '$1 == "r" && $2 == "'$nickname'" {printf "%s===", $3}' | \
- perl -MMIME::Base64 -e "print unpack(\"H*\", decode_base64(<>)),\"\n\"";`
-
-# If we don't have a fingerprint, we don't have a match
-if [ "$fp" != "" ];
-then
- wget -q -O - http://tor.noreply.org:80/tor/server/fp/$fp;
- exit $?;
-else
- echo "It appears the nickname is not currently known by the directory" \
- "authority."
- exit 1;
-fi
diff --git a/contrib/suse/Makefile.am b/contrib/suse/Makefile.am
deleted file mode 100644
index 06511c042..000000000
--- a/contrib/suse/Makefile.am
+++ /dev/null
@@ -1,3 +0,0 @@
-confdir = $(sysconfdir)/tor
-
-EXTRA_DIST = tor.sh
diff --git a/contrib/tor-ctrl.sh b/contrib/tor-ctrl.sh
deleted file mode 100644
index 58320ced1..000000000
--- a/contrib/tor-ctrl.sh
+++ /dev/null
@@ -1,212 +0,0 @@
-#!/bin/bash
-#
-# tor-ctrl is a commandline tool for executing commands on a tor server via
-# the controlport. In order to get this to work, add "ControlPort 9051" and
-# "CookieAuthentication 1" to your torrc and reload tor. Or - if you want a
-# fixed password - leave out "CookieAuthentication 1" and use the following
-# line to create the appropriate HashedControlPassword entry for your torrc
-# (you need to change yourpassword, of course):
-#
-# echo "HashedControlPassword $(tor --hash-password yourpassword | tail -n 1)"
-#
-# tor-ctrl will return 0 if it was successful and 1 if not, 2 will be returned
-# if something (telnet, xxd) is missing. 4 will be returned if it executed
-# several commands from a file.
-#
-# For setting the bandwidth for specific times of the day, I suggest calling
-# tor-ctrl via cron, e.g.:
-#
-# 0 22 * * * /path/to/tor-ctrl -c "SETCONF bandwidthrate=1mb"
-# 0 7 * * * /path/to/tor-ctrl -c "SETCONF bandwidthrate=100kb"
-#
-# This would set the bandwidth to 100kb at 07:00 and to 1mb at 22:00. You can
-# use notations like 1mb, 1kb or the number of bytes.
-#
-# Many, many other things are possible, see
-# https://www.torproject.org/svn/trunk/doc/spec/control-spec.txt
-#
-# Copyright (c) 2007 by Stefan Behte
-#
-# tor-ctrl is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# tor-ctrl is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with tor-ctrl; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-#
-# Written by Stefan Behte
-#
-# Please send bugs, comments, wishes, thanks and success stories to:
-# Stefan dot Behte at gmx dot net
-#
-# Also have a look at my page:
-# http://ge.mine.nu/
-#
-# 2007-10-03: First version, only changing bandwidth possible.
-# 2007-10-04: Renaming to "tor-ctrl", added a lot of functions, it's now a
-# general-purpose tool.
-# Added control_auth_cookie/controlpassword auth, getopts,
-# program checks, reading from file etc.
-
-VERSION=v1
-TORCTLIP=127.0.0.1
-TORCTLPORT=9051
-TOR_COOKIE="/var/lib/tor/data/control_auth_cookie"
-SLEEP_AFTER_CMD=1
-VERBOSE=0
-
-usage()
-{
-cat <<EOF
-
-tor-ctrl $VERSION by Stefan Behte (http://ge.mine.nu)
-You should have a look at
-https://www.torproject.org/svn/trunk/doc/spec/control-spec.txt
-
-usage: tor-ctrl [-switch] [variable]
-
- [-c] [command] = command to execute
- notice: always "quote" your command
-
- [-f] [file] = file to execute commands from
- notice: only one command per line
-
- [-a] [path] = path to tor's control_auth_cookie
- default: /var/lib/tor/data/control_auth_cookie
- notice: do not forget to adjust your torrc
-
- [-s] [time] = sleep [var] seconds after each command sent
- default: 1 second
- notice: for GETCONF, you can use smaller pause times
- than for SETCONF; this is due to telnet's behaviour.
-
- [-p] [pwd] = Use password [var] instead of tor's control_auth_cookie
- default: not used
- notice: do not forget to adjust your torrc
-
- [-P] [port] = Tor ControlPort
- default: 9051
-
- [-v] = verbose
- default: not set
- notice: the default output is the return code ;)
- You propably want to set -v when running manually
-
- Examples: $0 -c "SETCONF bandwidthrate=1mb"
- $0 -v -c "GETINFO version"
- $0 -v -s 0 -P 9051 -p foobar -c "GETCONF bandwidthrate"
-
-EOF
-exit 2
-}
-
-checkprogs()
-{
- programs="telnet"
- if [ "$PASSWORD" = "" ]
- then
- # you only need xxd when using control_auth_cookie
- programs="$programs xxd"
- fi
-
- for p in $programs
- do
- which $p &>/dev/null # are you there?
- if [ "$?" != "0" ]
- then
- echo "$p is missing."
- exit 2
- fi
- done
-}
-
-sendcmd()
-{
- echo "$@"
- sleep ${SLEEP_AFTER_CMD}
-}
-
-login()
-{
- if [ "$PASSWORD" = "" ]
- then
- sendcmd "AUTHENTICATE $(xxd -c 32 -g 0 ${TOR_COOKIE} | awk '{print $2}')"
- else
- sendcmd "AUTHENTICATE \"${PASSWORD}\""
- fi
-}
-
-cmdpipe()
-{
- login
- sendcmd "$@"
- sendcmd "QUIT"
-}
-
-vecho()
-{
- if [ $VERBOSE -ge 1 ]
- then
- echo "$@"
- fi
-}
-
-myecho()
-{
- STR=$(cat)
- vecho "$STR"
-
- echo "$STR" | if [ "$(grep -c ^"250 ")" = 3 ]
- then
- exit 0
- else
- exit 1
- fi
-}
-
-filepipe()
-{
- login
- cat "$1" | while read line
- do
- sendcmd "$line"
- done
- sendcmd "QUIT"
-}
-
-while getopts ":a:c:s:p:P:f:vh" Option
-do
- case $Option in
- a) TOR_COOKIE="${OPTARG}";;
- c) CMD="${OPTARG}";;
- s) SLEEP_AFTER_CMD="${OPTARG}";;
- p) PASSWORD="${OPTARG}";;
- P) TORCTLPORT="${OPTARG}";;
- f) FILE="${OPTARG}";;
- v) VERBOSE=1;;
- h) usage;;
- *) usage;;
- esac
-done
-
-if [ -e "$FILE" ]
-then
- checkprogs
- filepipe "$FILE" | telnet $TORCTLIP $TORCTLPORT 2>/dev/null | myecho
- exit 4
-fi
-
-if [ "$CMD" != "" ]
-then
- checkprogs
- cmdpipe $CMD | telnet $TORCTLIP $TORCTLPORT 2>/dev/null | myecho
-else
- usage
-fi
diff --git a/contrib/tor-stress b/contrib/tor-stress
deleted file mode 100755
index a0c88c2fd..000000000
--- a/contrib/tor-stress
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/usr/bin/perl
-
-#require 'sys/syscall.ph';
-$|=1;
-
-$total = 1;
-$target = "http://www.cnn.com/";
-
-for($i=0;$i<$total;$i++) {
- print "Starting client $i\n";
- $pid = fork();
- if(!$pid) {
- open(FD,"wget -q -O - $target|");
- $c = 0;
- while(<FD>) {
- $c += length($_);
- }
-# $TIMEVAL_T = "LL";
-# $now = pack($TIMEVAL_T, ());
-# syscall(&SYS_gettimeofday, $now, 0) != -1 or die "gettimeofday: $!";
-# @now = unpack($TIMEVAL_T, $now);
- print "Client $i exiting ($c chars).\n";
- exit(0);
- }
-# sleep(1);
-}
-
diff --git a/contrib/tor-tsocks.conf b/contrib/tor-tsocks.conf
deleted file mode 100644
index 3dddaddbc..000000000
--- a/contrib/tor-tsocks.conf
+++ /dev/null
@@ -1,13 +0,0 @@
-# This is the configuration for libtsocks (transparent socks) for use
-# with tor, which is providing a socks server on port 9050 by default.
-#
-# See tsocks.conf(5) and torify(1) manpages.
-
-server = 127.0.0.1
-server_port = 9050
-
-# We specify local as 127.0.0.0 - 127.191.255.255 because the
-# Tor MAPADDRESS virtual IP range is the rest of net 127.
-local = 127.0.0.0/255.128.0.0
-local = 127.128.0.0/255.192.0.0
-
diff --git a/contrib/torinst32.ico b/contrib/torinst32.ico
deleted file mode 100644
index ccbad9b15..000000000
--- a/contrib/torinst32.ico
+++ /dev/null
Binary files differ
diff --git a/contrib/package_nsis-mingw.sh b/contrib/win32build/package_nsis-mingw.sh
index b8a46cdbe..cae862b91 100644
--- a/contrib/package_nsis-mingw.sh
+++ b/contrib/win32build/package_nsis-mingw.sh
@@ -40,7 +40,7 @@
# you know what you are doing.
# Start in the tor source directory after you've compiled tor.exe
-# This means start as ./contrib/package_nsis-mingw.sh
+# This means start as ./contrib/win32build/package_nsis-mingw.sh
rm -rf win_tmp
mkdir win_tmp
@@ -56,7 +56,7 @@ mkdir win_tmp/tmp
cp src/or/tor.exe win_tmp/bin/
cp src/tools/tor-resolve.exe win_tmp/bin/
-cp contrib/tor.ico win_tmp/bin/
+cp contrib/win32build/tor.ico win_tmp/bin/
cp src/config/geoip win_tmp/bin/
strip win_tmp/bin/*.exe
@@ -88,7 +88,7 @@ done
clean_localstatedir src/config/torrc.sample.in win_tmp/src/config/torrc.sample
-cp contrib/tor-mingw.nsi.in win_tmp/contrib/
+cp contrib/win32build/tor-mingw.nsi.in win_tmp/contrib/
cd win_tmp
makensis.exe contrib/tor-mingw.nsi.in
diff --git a/contrib/tor-mingw.nsi.in b/contrib/win32build/tor-mingw.nsi.in
index 2133a471b..0e1594dd3 100644
--- a/contrib/tor-mingw.nsi.in
+++ b/contrib/win32build/tor-mingw.nsi.in
@@ -8,7 +8,7 @@
!include "LogicLib.nsh"
!include "FileFunc.nsh"
!insertmacro GetParameters
-!define VERSION "0.2.3.18-rc-dev"
+!define VERSION "0.2.5.4-alpha-dev"
!define INSTALLER "tor-${VERSION}-win32.exe"
!define WEBSITE "https://www.torproject.org/"
!define LICENSE "LICENSE"
@@ -147,7 +147,7 @@ SectionEnd
!insertmacro MUI_DESCRIPTION_TEXT ${Tor} "The core executable and config files needed for Tor to run."
!insertmacro MUI_DESCRIPTION_TEXT ${Docs} "Documentation about Tor."
!insertmacro MUI_DESCRIPTION_TEXT ${ShortCuts} "Shortcuts to easily start Tor"
-!insertmacro MUI_DESCRIPTION_TEXT ${StartMenu} "Shortcuts to access Tor and it's documentation from the Start Menu"
+!insertmacro MUI_DESCRIPTION_TEXT ${StartMenu} "Shortcuts to access Tor and its documentation from the Start Menu"
!insertmacro MUI_DESCRIPTION_TEXT ${Desktop} "A shortcut to start Tor from the desktop"
!insertmacro MUI_DESCRIPTION_TEXT ${Startup} "Launches Tor automatically at startup in a minimized window"
!insertmacro MUI_FUNCTION_DESCRIPTION_END
diff --git a/contrib/tor.ico b/contrib/win32build/tor.ico
index 0cac29704..0cac29704 100644
--- a/contrib/tor.ico
+++ b/contrib/win32build/tor.ico
Binary files differ
diff --git a/contrib/tor.nsi.in b/contrib/win32build/tor.nsi.in
index a7ed914b8..dd24df454 100644
--- a/contrib/tor.nsi.in
+++ b/contrib/win32build/tor.nsi.in
@@ -207,7 +207,7 @@ SectionEnd
!insertmacro MUI_DESCRIPTION_TEXT ${OpenSSL} "OpenSSL libraries required by Tor."
!insertmacro MUI_DESCRIPTION_TEXT ${Docs} "Documentation about Tor."
!insertmacro MUI_DESCRIPTION_TEXT ${ShortCuts} "Shortcuts to easily start Tor"
- !insertmacro MUI_DESCRIPTION_TEXT ${StartMenu} "Shortcuts to access Tor and it's documentation from the Start Menu"
+ !insertmacro MUI_DESCRIPTION_TEXT ${StartMenu} "Shortcuts to access Tor and its documentation from the Start Menu"
!insertmacro MUI_DESCRIPTION_TEXT ${Desktop} "A shortcut to start Tor from the desktop"
!insertmacro MUI_DESCRIPTION_TEXT ${Startup} "Launches Tor automatically at startup in a minimized window"
!insertmacro MUI_FUNCTION_DESCRIPTION_END
diff --git a/contrib/xenobite.ico b/contrib/xenobite.ico
deleted file mode 100644
index 352394eef..000000000
--- a/contrib/xenobite.ico
+++ /dev/null
Binary files differ
diff --git a/doc/HACKING b/doc/HACKING
index bc409dc0d..c69b2a6fe 100644
--- a/doc/HACKING
+++ b/doc/HACKING
@@ -12,7 +12,7 @@ https://gitweb.torproject.org/torspec.git/blob_plain/HEAD:/proposals/001-process
For the latest version of the code, get a copy of git, and
- git clone git://git.torproject.org/git/tor .
+ git clone https://git.torproject.org/git/tor
We talk about Tor on the tor-talk mailing list. Design proposals and
discussion belong on the tor-dev mailing list. We hang around on
@@ -38,9 +38,9 @@ release. Occasionally, we'll merge an urgent bugfix into the release branch
before it gets merged into maint, but that's rare.
If you're working on a bugfix for a bug that occurs in a particular version,
-base your bugfix branch on the "maint" branch for the first _actively
-developed_ series that has that bug. (Right now, that's 0.2.1.) If you're
-working on a new feature, base it on the master branch.
+base your bugfix branch on the "maint" branch for the first supported series
+that has that bug. (As of June 2013, we're supporting 0.2.3 and later.) If
+you're working on a new feature, base it on the master branch.
How we log changes
@@ -51,7 +51,7 @@ the "changes" toplevel subdirectory. It should have the format of a
one-entry changelog section from the current ChangeLog file, as in
o Major bugfixes:
- - Fix a potential buffer overflow. Fixes bug 9999; bugfix on
+ - Fix a potential buffer overflow. Fixes bug 99999; bugfix on
0.3.1.4-beta.
To write a changes file, first categorize the change. Some common categories
@@ -90,10 +90,10 @@ Useful tools
These aren't strictly necessary for hacking on Tor, but they can help track
down bugs.
-The buildbot
-~~~~~~~~~~~~
+Jenkins
+~~~~~~~
-https://buildbot.vidalia-project.net/one_line_per_build
+https://jenkins.torproject.org
Dmalloc
~~~~~~~
@@ -118,17 +118,43 @@ Running gcov for unit test coverage
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-----
- make clean
- make CFLAGS='-g -fprofile-arcs -ftest-coverage'
- ./src/test/test
- cd src/common; gcov *.[ch]
- cd ../or; gcov *.[ch]
+ ./configure --enable-coverage
+ make
+ make check
+ mkdir coverage-output
+ ./scripts/test/coverage coverage-output
+-----
+
+(On OSX, you'll need to start with "--enable-coverage CC=clang".)
+
+Then, look at the .gcov files in coverage-output. '-' before a line means
+that the compiler generated no code for that line. '######' means that the
+line was never reached. Lines with numbers were called that number of times.
+
+If that doesn't work:
+ * Try configuring Tor with --disable-gcc-hardening
+ * You might need to run 'make clean' after you run './configure'.
+
+If you make changes to Tor and want to get another set of coverage results,
+you can run "make reset-gcov" to clear the intermediary gcov output.
+
+If you have two different "coverage-output" directories, and you want to see
+a meaningful diff between them, you can run:
+
+-----
+ ./scripts/test/cov-diff coverage-output1 coverage-output2 | less
-----
-Then, look at the .gcov files. '-' before a line means that the
-compiler generated no code for that line. '######' means that the
-line was never reached. Lines with numbers were called that number
-of times.
+In this diff, any lines that were visited at least once will have coverage
+"1". This lets you inspect what you (probably) really want to know: which
+untested lines were changed? Are there any new untested lines?
+
+Running integration tests
+~~~~~~~~~~~~~~~~~~~~~~~~~
+
+We have the beginnings of a set of scripts to run integration tests using
+Chutney. To try them, set CHUTNEY_PATH to your chutney source directory, and
+run "make test-network".
Profiling Tor with oprofile
~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -174,6 +200,8 @@ Did you remember...
- To build your code while configured with --enable-gcc-warnings?
- To run "make check-spaces" on your code?
+ - To run "make check-docs" to see whether all new options are on
+ the manpage?
- To write unit tests, as possible?
- To base your code on the appropriate branch?
- To include a file in the "changes" directory as appropriate?
@@ -304,7 +332,7 @@ do your own profiling to determine otherwise.
Log conventions
~~~~~~~~~~~~~~~
-https://wiki.torproject.org/noreply/TheOnionRouter/TorFAQ#LogLevels
+https://trac.torproject.org/projects/tor/wiki/doc/TorFAQ#loglevel
No error or warning messages should be expected during normal OR or OP
operation.
@@ -421,10 +449,11 @@ of them and reordering to focus on what users and funders would find
interesting and understandable.
2.1) Make sure that everything that wants a bug number has one.
+ Make sure that everything which is a bugfix says what version
+ it was a bugfix on.
2.2) Concatenate them.
- 2.3) Sort them by section. Within each section, try to make the
- first entry or two and the last entry most interesting: they're
- the ones that skimmers tend to read.
+ 2.3) Sort them by section. Within each section, sort by "version it's
+ a bugfix on", else by numerical ticket order.
2.4) Clean them up:
@@ -446,6 +475,10 @@ interesting and understandable.
Present and imperative tense: not past.
+ 'Relays', not 'servers' or 'nodes' or 'Tor relays'.
+
+ "Stop FOOing", not "Fix a bug where we would FOO".
+
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
@@ -467,7 +500,7 @@ a stable release, add it to the ReleaseNotes file too. If we're adding
to a release-0.2.x branch, manually commit the changelogs to the later
git branches too.
-4) Bump the version number in configure.in and rebuild.
+4) Bump the version number in configure.ac and rebuild.
5) Make dist, put the tarball up somewhere, and tell #tor about it. Wait
a while to see if anybody has problems building it. Try to get Sebastian
@@ -483,15 +516,10 @@ in their approved versions list.
8) scp the tarball and its sig to the website in the dist/ directory
(i.e. /srv/www-master.torproject.org/htdocs/dist/ on vescum). Edit
-include/versions.wmi to note the new version. From your website checkout,
-run ./publish to build and publish the website.
-
-Try not to delay too much between scp'ing the tarball and running
-./publish -- the website has multiple A records and your scp only sent
-it to one of them.
+"include/versions.wmi" and "Makefile" to note the new version. From your
+website checkout, run ./publish to build and publish the website.
-9) Email Erinn and weasel (cc'ing tor-assistants) that a new tarball
-is up. This step should probably change to mailing more packagers.
+9) Email the packagers (cc'ing tor-assistants) that a new tarball is up.
10) Add the version number to Trac. To do this, go to Trac, log in,
select "Admin" near the top of the screen, then select "Versions" from
@@ -502,8 +530,6 @@ the date in the ChangeLog.
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.
@@ -511,3 +537,9 @@ 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.)
+13) If it's a stable release, bump the version number in the maint-x.y.z
+ branch to "newversion-dev", and do a "merge -s ours" merge to avoid
+ taking that change into master. Do a similar 'merge -s theirs'
+ merge to get the change (and only that change) into release. (Some
+ of the build scripts require that maint merge cleanly into release.)
+
diff --git a/doc/Makefile.am b/doc/Makefile.am
deleted file mode 100644
index 6cdd66d51..000000000
--- a/doc/Makefile.am
+++ /dev/null
@@ -1,89 +0,0 @@
-# We use a two-step process to generate documentation from asciidoc files.
-#
-# First, we use asciidoc/a2x to process the asciidoc files into .1.in and
-# .html.in files (see the asciidoc-helper.sh script). These are the same as
-# the regular .1 and .html files, except that they still have some autoconf
-# variables set in them.
-#
-# Second, we use config.status to turn .1.in files into .1 files and
-# .html.in files into .html files.
-#
-# We do the steps in this order so that we can ship the .*.in files as
-# 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
-nodist_man_MANS = $(all_mans:=.1)
-doc_DATA = $(all_mans:=.html)
-else
-nodist_man_MANS = $(regular_mans:=.1)
-doc_DATA = $(regular_mans:=.html)
-endif
-html_in = $(all_mans:=.html.in)
-man_in = $(all_mans:=.1.in)
-txt_in = $(all_mans:=.1.txt)
-else
-html_in =
-man_in =
-txt_in =
-nodist_man_MANS =
-doc_DATA =
-endif
-
-EXTRA_DIST = HACKING asciidoc-helper.sh \
- $(html_in) $(man_in) $(txt_in) \
- tor-rpm-creation.txt \
- tor-win32-mingw-creation.txt spec/README \
- state-contents.txt
-
-docdir = @docdir@
-
-asciidoc_product = $(nodist_man_MANS) $(doc_DATA)
-
-# Generate the html documentation from asciidoc, but don't do
-# machine-specific replacements yet
-$(html_in) :
- $(top_srcdir)/doc/asciidoc-helper.sh html @ASCIIDOC@ $(top_srcdir)/doc/$@
-
-tor.html.in : tor.1.txt
-torify.html.in : torify.1.txt
-tor-gencert.html.in : tor-gencert.1.txt
-tor-resolve.html.in : tor-resolve.1.txt
-tor-fw-helper.html.in : tor-fw-helper.1.txt
-
-# Generate the manpage from asciidoc, but don't do
-# machine-specific replacements yet
-$(man_in) :
- $(top_srcdir)/doc/asciidoc-helper.sh man @A2X@ $(top_srcdir)/doc/$@
-
-tor.1.in : tor.1.txt
-torify.1.in : torify.1.txt
-tor-gencert.1.in : tor-gencert.1.txt
-tor-resolve.1.in : tor-resolve.1.txt
-tor-fw-helper.1.in : tor-fw-helper.1.txt
-
-# use ../config.status to swap all machine-specific magic strings
-# in the asciidoc with their replacements.
-$(asciidoc_product) :
- if test -e $(top_srcdir)/doc/$@.in && ! test -e ./$@.in ; then \
- cp $(top_srcdir)/doc/$@.in .; \
- fi
- ../config.status --file=$@;
-
-tor.1 : tor.1.in
-torify.1 : torify.1.in
-tor-gencert.1 : tor-gencert.1.in
-tor-resolve.1 : tor-resolve.1.in
-tor-fw-helper.1 : tor-fw-helper.1.in
-tor.html : tor.html.in
-torify.html : torify.html.in
-tor-gencert.html : tor-gencert.html.in
-tor-resolve.html : tor-resolve.html.in
-tor-fw-helper.html : tor-fw-helper.html.in
-
-CLEANFILES = $(asciidoc_product) config.log
-DISTCLEANFILES = $(html_in) $(man_in)
diff --git a/doc/TODO b/doc/TODO
deleted file mode 100644
index 194d6507b..000000000
--- a/doc/TODO
+++ /dev/null
@@ -1,11 +0,0 @@
-
-We've split out our TODO into three files:
-
-TODO.02x is the list of items we're planning to get done in the next
-stable release.
-
-TODO.external lives in svn under /projects/todo/. It's the list of
-external constraints and deliverables that we all need to keep in mind.
-
-TODO.future is the list of other items we plan to get to in later releases.
-
diff --git a/doc/TODO.021 b/doc/TODO.021
deleted file mode 100644
index 37c5b9845..000000000
--- a/doc/TODO.021
+++ /dev/null
@@ -1,386 +0,0 @@
-Legend:
-SPEC!! - Not specified
-SPEC - Spec not finalized
-N - nick claims
-R - arma claims
-P - phobos claims
-S - Steven claims
-E - Matt claims
-M - Mike claims
-J - Jeff claims
-I - ioerror claims
-W - weasel claims
-K - Karsten claims
- - Not done
- * Top priority
- . Partially done
- o Done
- d Deferrable
- D Deferred
- X Abandoned
-
-=======================================================================
-
-Things Roger would be excited to see:
-
-Nick
- * Look at Roger's proposal 141 discussions on or-dev, and help us
- decide how to proceed.
- . Tors start believing the contents of NETINFO cells.
- - respond to Steven's red-team TLS testing (a.k.a, look at a packet
- dump and compare)
-
-Matt
- - Fit Vidalia in 640x480 again.
- - Vidalia should avoid stomping on your custom exit policy lines
- just because you click on 'save' for a totally different config thing.
- - How much space do we save in TBB by stripping symbols from Vidalia
- first? Good idea or crazy idea?
- (phobos adds you save about 12MB total across all exes by stripping
- them) In fact, tbb-1.19 is stripped exes.
-
-ioerror
- * weather.torproject.org should go live.
- - Keep advocating new Tor servers and working with orgs like Mozilla
- to let them like Tor.
- - Find out what happened to the buildbot and get it back up:
- http://tor-buildbot.freehaven.net:8010/
- - Learn about locking memory pages that have sensitive content. Get
- that started in Tor.
- - Translation portal
- - Vidalia html help files
- - should we i18nize polipo's error messages too?
- - how to get our diagrams translated, and how to get our screenshots
- from the right language?
- - Some of our translated wml files are very old -- so old that they
- are harmful to leave in place. We need some sort of way to notice
- this and disable them.
-
-Steven
- - Move proposal 131 or equivalent forward.
- - Keep bugging us about exploits on the .exit notation.
- - Mike's question #3 on https://www.torproject.org/volunteer#Research
- - Worthwhile shipping TBB with some local html help files that come
- as bookmarks?
-
-Andrew
-
-Weasel
- - Figure out how to make Vidalia and Tor play nicely on Debian, make
- the necessary modifications, and make some Vidalia debs that pass
- muster.
- - Fix bug 393.
- - Get oftc to switch to Tor dns bulk exitlist. Or tell us why it's
- not suitable yet.
- - Move proposal 134 forward.
- - putting port predictions in state file
- - if tor hasn't been used in a while it stops fetching consensus
- documents. Retain that state over restarts.
-
-Roger
- - Finish tor-doc-bridge.wml
- . Fix FAQ entry on setting up private Tor network
- - Did we actually apply Steven's dkimproxy patch?
- - Brainstorm about safe but effective ways for vidalia to
- auto-update its user's bridges via Tor in the background.
- - it doesn't count as successfully opening a circuit if it's not
- an exit circuit.
-
-Mike:
- - Roger wants to get an email every time there's a blog change,
- e.g. a comment. That way spam doesn't go undetected for weeks.
- - Or, maybe just disable linking from blog comments entirely?
- (phobos mitigates this by checking it a few times a week)
-
-=======================================================================
-
-Bugs/issues for Tor 0.2.0.x:
- . we should have an off-by-default way for relays to dump geoip data to
- a file in their data directory, for measurement purposes.
- o Basic implementation
-N - Include probability-of-selection
-R d let bridges set relaybandwidthrate as low as 5kb
-
-Documentation for Tor 0.2.0.x:
- o Proposals:
- o 111: Prioritize local traffic over relayed.
- o 113: mark as closed close.
- o document the "3/4 and 7/8" business in the clients fetching consensus
- documents timeline.
-R - then document the bridge user download timeline.
- - HOWTO for DNSPort. See tup's wiki page.
- . Document transport and natdport in a good HOWTO.
- - Quietly document NT Service options: revise (or create) FAQ entry
-
-=======================================================================
-
-For 0.2.1.x-alpha:
-R d bug: if we launch using bridges, and then stop using bridges, we
- still have our bridges in our entryguards section, and may use them.
- o add an event to report geoip summaries to vidalia for bridge relays,
- so vidalia can say "recent activity (1-8 users) from sa".
-R - investigate: it looks like if the bridge authority is unreachable,
- we're not falling back on querying bridges directly?
- o if "no running bridges known", an application request should make
- us retry all our bridges.
-
-For 0.2.1.x:
- - Proposals to do:
- o 110: avoid infinite-length circuits
- * Figure out the right value for max RELAY_EARLY cells (Bug 878)
- - 117: IPv6 Exits
- - Internal code support for ipv6:
- o Clone ipv6 functions (inet_ntop, inet_pton) where they don't exist.
- o Many address variables need to become tor_addr_t
- o addr in connection_t
- o n_addr in extend_info_t
- - Teach resolving code how to handle ipv6.
- . Teach exit policies about ipv6 (consider ipv4/ipv6 interaction!)
- o Use IPv6 in connect/connected/failed-exitpolicy cells
- o accept ipv6 from socks
- o Generate END_REASON_EXITPOLICY cells right
- . ... and parse them right
- . Generate new BEGIN cell types and parse them right
- - Detect availability of ipv6
- - Advertise availability of ipv6.
- - Geoip support, if only to add a zone called "ipv6"
-
-K . 121: Hidden service authentication:
- - missing: delayed descriptor publication for 'stealth' mode.
- o 128: families of private bridges
- o 135: simplify configuration of private tor networks.
-K - 143: Improvements of Distributed Hidden Service Descriptor Storage:
- only easy parts for 0.2.1.x, defer complex ones to 0.2.2.x.
- o 148: Stream end reasons from the client side should be uniform.
-K o 155: Four Improvements of Hidden Service Performance
- - 145: Separate "suitable from a guard" from "suitable as a new guard"
- - 146: Adding new flag to reflect long-term stability
- - 149: Using data from NETINFO cells
- o Don't extend a circuit over a noncanonical connection with
- mismatched address.
- o Apply rovv's bugfixes wrt preferring canonical connections.
- o Make sure that having a non-canonical connection doesn't count
- as _having_ a connection for the purpose of connecting to others,
- and that when no canonical connection exists, we make one.
- - Learn our outgoing IP address from netinfo cells?
- - Learn skew from netinfo cells?
- o 157: Make certificate downloads specific.
-
- - Proposals to write:
- - Fix voting to handle bug 608 case when multiple servers get
- Named.
-N . Draft proposal for GeoIP aggregation (see external constraints *)
- . Figure out how to make good use of the fallback consensus file. Right
- now many of the addresses in the fallback consensus will be stale,
- so it will take dozens of minutes to bootstrap from it. This is a
- bad first Tor experience. But if we check the fallback consensus
- file *after* we fail to connect to any authorities, then it may
- still be valuable as a blocking-resistance step.
- o Write the proposal.
- - Patch our tor.spec rpm package so it knows where to put the fallback
- consensus file.
- . Put bandwidth weights in the networkstatus? So clients get weight
- their choices even before they have the descriptors; and so
- authorities can put in more accurate numbers in the future.
-
- - Spec compliance:
- * Make sure that clients could do the new handshake without sending any
- certs, if they wanted.
-
- - Tiny designs to write:
- - If a relay publishes a new descriptor with a significantly lower
- uptime or with a new IP address, then we should consider its current
- "running" interval to have ended even if it hadn't yet failed its
- third reachability test. the interval ended when the new descriptor
- appeared, and a new interval began then too.
-
- - Authority improvements:
-R - authorities should initiate a reachability test upon first
- glimpsing a new descriptor.
-
- - Use less bandwidth
- - Use if-modified-since to download consensuses
-
- - Testing
- - Better unit test coverage
- - Verify that write limits to linked connections work.
-
- - Security improvements
- - make is-consensus-fresh-enough check tighter.
- - If we haven't tried downloading a consensus for ages since we're tired,
- try getting a new one before we use old descriptors for a circuit.
- Related to bug 401. [What does "since we're tired" mean? -RD]
- [I don't know. -NM]
-
- - Feature removals and deprecations:
- - Get rid of the v1 directory stuff (making, serving, and caching)
- . First verify that the caches won't flip out?
- o If they will, just stop the caches from caching for now
- . perhaps replace it with a "this is a tor server" stock webpage.
- - Get the debs to set DirPortFrontPage in the default.
- - Decide how to handle DirPortFrontPage files with image links.
- - Can we deprecate controllers that don't use both features?
- - Both TorK and Vidalia use VERBOSE_NAMES.
- - TorK uses EXTENDED_EVENTS. Vidalia does not. (As of 9 Dec.)
- - Matt is checking whether Vidalia would break if we started to use
- EXTENDED_EVENTS by default. He says no.
-
-External tool improvements:
- - Get IOCP patches into libevent
-
-Nice to have for 0.2.1.x:
- - Proposals, time permitting
- - 134: handle authority fragmentation.
- - 140: Provide diffs betweeen consensuses
-
- - Handle multi-core cpus better
- - Split circuit AES across cores
- - Split cell_queue_t into a new structure with a processed subqueue,
- an unprocessed subqueue, and a symmetric key.
- - Write a function to pull cells from the unprocessed subqueue,
- en/decrypt them, and place them on the processed subqueue.
- - When a cell is added to a queue that previously had no
- unprocessed cells, put that queue into a set of queues that
- need to be processed. When the last cell is processed in a
- queue, remove it from the set of queues that need to be
- processed.
- - Worker code to process queues in round-robin fashion.
- - Think about how to be fair to differet circuits _and_ about to get
- CPU-affinity, if that matters.
- - When a cell is processed and placed onto a processed subqueue
- that was previously empty, _and_ the or_conn output buffer
- that the queue is targetting is empty, stick the buffer onto a
- list of buffers that need attention and notify the main
- thread if it was not already on the list.
- - When the main thread gets notified, it pumps those buffers.
- (i.e., it puts cells onto them from some of their circuits).
- - To free a queue that is not currently processing, grab its lock
- and free it.
- - To free a queue that _is_ processing, .... ?
-
- - Documentation
-P - Make documentation realize that location of system configuration file
- will depend on location of system defaults, and isn't always /etc/torrc.
-
- - Small controller features
- - A status event for when tor decides to stop fetching directory info
- if the client hasn't clicked recently: then make the onion change too.
- o Add a status event when new consensus arrives
-
- - Windows build
-P - create a "make win32-bundle" for vidalia-privoxy-tor-torbutton bundle
- - Is this obsolete with msi bundle coming soon asks phobos
-
- - Refactor bad code:
- - connection_or_get_by_identity_digest() and connection_good_enough_for
- _extend() could be merged into a smarter variant, perhaps.
- - Refactor the HTTP logic so the functions aren't so large.
- - Refactor buf_read and buf_write to have sensible ways to return
- error codes after partial writes
- - deprecate router_digest_is_trusted_dir() in favor of
- router_get_trusteddirserver_by_digest()
-
- - Should be trivial
- - Tor logs the libevent version on startup, for debugging purposes.
- This is great. But it does this before configuring the logs, so
- it only goes to stdout and is then lost.
- (phobos asks, is this still the case? because it shows up in my
- logs)
-
- - Deprecations
- - Even clients run rep_hist_load_mtbf_data(). This doesn't waste memory
- unless they had previously been non-clients collecting MTBF data.
- Dump it anyway?
- - Unless we start using ftime functions, dump them.
- - can we deprecate the FastFirstHopPK config option?
- - The v2dir flag isn't used for anything anymore, right? If so, dump it.
- - can we deprecate 'getinfo network-status'?
- - Dump most uint32_t addr functions.
-
- - do the part of the "abandon .exit" proposal that involves isolating
- circuits which have used a .exit stream from those that haven't
-
-Defer:
- - Proposals
- - 118: Listen on and advertise multiple ports:
- - Tor should be able to have a pool of outgoing IP addresses that it is
- able to rotate through. (maybe. Possible overlap with proposal 118.)
- - config option to publish what ports you listen on, beyond
- ORPort/DirPort. It should support ranges and bit prefixes (?) too.
- - Need to figure out the right format for routerinfo_t on this.
- - 147: Eliminate the need for v2 directories in generating v3 directories
-
- - Proposals to write.
- d Something for bug 469, to limit connections per IP.
- d Do we want to maintain our own set of entryguards that we use as
- next hop after the bridge?
- d Possibly: revise link protocol to allow big circuit IDs,
- variable-length cells, proposal-110 stuff, and versioned CREATES?
- d Fetch an updated geoip file from the directory authorities.
-R - bridge communities (revive proposal 128)
- . spec
- . deploy
- - man page entries for Alternate*Authority config options
-
- - Tiny designs to write
- - Better estimate of clock skew; has anonymity implications. Clients
- should estimate their skew as median of skew from servers over last
- N seconds, but for servers this is not so easy, since a server does
- not choose who it connects to.
- - Do TLS connection rotation more often than "once a week" in the
- extra-stable case.
- (One reason not to do it more often is because the old TLS conn
- probably has a circuit on it, and we don't really want to build up
- dozens of TCP connections to all the other extra-stable relays.)
-
-
- - Use less RAM
- - Optimize cell pool allocation.
- - Support (or just always use) jemalloc (if it helps)
- - mmap more files.
- - Pull serverdescs off buffers as they arrive.
- - Allocate routerstatus_t objects on a per-networkstatus memchunk.
-
- - Split TLS across multiple cores
-
- - "In the future, we should migrate to LOCAL_APPDATA entirely."
-
- - Use more mid-level and high-level libevent APIs
- - For dns?
- - For http?
- - For buffers?
-
- - Proposals to write
- - steven's plan for replacing check.torproject.org with a built-in
- answer by tor itself.
-
- - Refactor bad code:
- - Streamline how we pick entry nodes: Make choose_random_entry() have
- less magic and less control logic.
- - Move all status info out of routerinfo into local_routerstatus. Make
- "who can change what" in local_routerstatus explicit. Make
- local_routerstatus (or equivalent) subsume all places to go for "what
- router is this?"
- o Don't call time(NULL) so much; instead have a static time_t field
- that gets updated only a handful of times per second.
- - Refactor unit tests into multiple files
-
- - Make Tor able to chroot itself
- o allow it to load an entire config file from control interface
- - document LOADCONF
- - log rotation (and FD passing) via control interface
- - chroot yourself, including inhibit trying to read config file
- and reopen logs, unless they are under datadir.
-
- - Should be trivial:
- - Base relative control socket paths (and other stuff in torrc) on datadir.
- o enforce a lower limit on MaxCircuitDirtiness and CircuitBuildTimeout.
- - Make 'safelogging' extend to info-level logs too.
- - don't do dns hijacking tests if we're reject *:* exit policy?
- (deferred until 0.1.1.x is less common)
- - More consistent error checking in router_parse_entry_from_string().
- I can say "banana" as my bandwidthcapacity, and it won't even squeak.
-
- d Interface for letting SOAT modify flags that authorities assign.
- (How to keep the authority from clobbering them afterwards?
-
diff --git a/doc/TODO.022 b/doc/TODO.022
deleted file mode 100644
index d83ed6e67..000000000
--- a/doc/TODO.022
+++ /dev/null
@@ -1,92 +0,0 @@
-Nick's initial priorities for Tor 0.2.2:
-
-NOTE 1: I'm not looking at fiddly little stuff from TODO.021 yet. We
- can do a step where we triage the nice-to-have issues.
-
-NOTE 2: It's easy to list stuff like this with no time estimates and
- no target dates. I think we should pick a target date for
- 0.2.2, figure out how long the stuff we want will take, and
- triage accordingly, or vice versa.
-
-- Performance, mostly protocol-neutral.
-
- o Revise how we do bandwidth limiting and round-robining between
- circuits on a connection.
-
- . Revise how we do bandwidth limiting and round-robining between
- connections.
-
- - Better flow-control to avoid filling buffers on routers.
-
- - Figure out good ways to instrument Tor internals so we can tell
- how well our bandwidth and flow-control stuff is actually working.
- - What ports eat the bandwidth?
- - How full do queues get?
- - How much latency do queues get?
-
- - Rate limit at clients:
- - Give clients an upper bound on how much they're willing to use
- the network if they're not relaying?
- - ... or group client circuits by IP at the server and rate-limit
- like that.
-
- - Use if-modified-since to download consensuses
-
-
-- Other features
- - Proposals to implement:
- - 146: reflect long-term stability in consensuses
- - 147: Stop using v2 directories to generate v3 votes.
- - Start pinging as soon as we learn about a relay, not on a
- 22-minute cycle. Prioritize new and volatile relays for
- testing.
-
- - Proposals to improve and implement
- - 158: microdescriptors
- o Revise proposal
- - Implement
-
- - Proposals to improve and implement if not broken
- D IPv6 support. (Parts of 117, but figure out how to handle DNS
- requests.)
- - 140: Directory diffs
- - Need a decent simple C diff implementation.
- - Need a decent simple C ed patch implementation.
- - 149: learn info from netinfo cells.
- o Start discussion
- - Revise proposal based on discussion.
- X 134: handle authority fragmentation (Needs more analysis)
- - 165: Easy migration for voting authority sets
- - 163: Detect client-status better
- o Write proposal
- - Possibly implement, depending on discussion.
- - 164: Have authorities report relay and voting status better: make it
- easy to answer, "Why is my server not listed/not Guard/not
- Running/etc"
- o Write proposal
- - Possibly implement, depending on discussion
- - 162: Have consensuses come in multiple "flavours".
- o Write proposal
- - Possibly implement, depending on discussion.
-
- - Needs a proposal, or at least some design
- - Weaken the requirements for being a Guard, based on K's
- measurements.
-K - Finish measurements
-K? - Write proposal
- - Adaptive timeouts for giving up on circuits and streams.
-M - Revise proposal 151
- - Downweight guards more sensibly: be more forgiving about using
- Guard nodes as non-first-hop.
- - Write proposal.
- - Lagged weight updates in consensuses: don't just move abruptly.
-M? - Write proposal
- d Don't kill a circuit on the first failed extend.
-
-- Installers
- - Switch to MSI on win32
- - Use Thandy, perhaps?
-
-o Deprecations
- o Make .exit safe, or make it off-by-default.
-
diff --git a/doc/TODO.external b/doc/TODO.external
deleted file mode 100644
index 2e7e536ef..000000000
--- a/doc/TODO.external
+++ /dev/null
@@ -1,4 +0,0 @@
-
-[This file moved to svn in /projects/todo/. More people can edit
-it more easily there. -RD]
-
diff --git a/doc/TODO.future b/doc/TODO.future
deleted file mode 100644
index 85e07aa92..000000000
--- a/doc/TODO.future
+++ /dev/null
@@ -1,330 +0,0 @@
-Legend:
-SPEC!! - Not specified
-SPEC - Spec not finalized
-N - nick claims
-R - arma claims
-P - phobos claims
-S - Steven claims
-E - Matt claims
-M - Mike claims
-J - Jeff claims
-I - ioerror claims
-W - weasel claims
-K - Karsten claims
- - Not done
- * Top priority
- . Partially done
- o Done
- d Deferrable
- D Deferred
- X Abandoned
-
-=======================================================================
-
-Later, unless people want to implement them now:
- - Actually use SSL_shutdown to close our TLS connections.
- - Include "v" line in networkstatus getinfo values.
- [Nick: bridge authorities output a networkstatus that is missing
- version numbers. This is inconvenient if we want to make sure
- bridgedb gives out bridges with certain characteristics. -RD]
- [Okay. Is this a separate item, or is it the same issue as the lack of
- a "v" line in response to the controller GETINFO command? -NM]
- - MAYBE kill stalled circuits rather than stalled connections. This is
- possible thanks to cell queues, but we need to consider the anonymity
- implications.
- - Make resolves no longer use edge_connection_t unless they are actually
- _on_ a socks connection: have edge_connection_t and (say)
- dns_request_t both extend an edge_stream_t, and have p_streams and
- n_streams both be linked lists of edge_stream_t.
- - Generate torrc.{complete|sample}.in, tor.1.in, the HTML manual, and the
- online config documentation from a single source.
- - It would be potentially helpful to respond to https requests on
- the OR port by acting like an HTTPS server.
-
- - We should get smarter about handling address resolve failures, or
- addresses that resolve to local IPs. It would be neat to retry
- them, since right now we just close the stream. But we need to
- make sure we don't retry them on the same exit as before. But if
- we mark the circuit, then any user who types "localhost" will
- cycle through circuits till they run out of retries. See bug 872.
-
-Can anybody remember why we wanted to do this and/or what it means?
- - config option __ControllerLimit that hangs up if there are a limit
- of controller connections already.
- [This was mwenge's idea. The idea is that a Tor controller can
- "fill" Tor's controller slot quota, so jerks can't do cross-protocol
- attacks like the http form attack. -RD]
- - Bridge issues
- . Ask all directory questions to bridge via BEGIN_DIR.
- - use the bridges for dir fetches even when our dirport is open.
- - drop 'authority' queries if they're to our own identity key; accept
- them otherwise.
- - give extend_info_t a router_purpose again
-
-
-
-If somebody wants to do this in some version, they should:
- - Create packages for Maemo/Nokia 800/810, requested by Chris Soghoian
- - debian already makes ARM-arch debs, can maemo use these asks
- phobos?
- - More work on AvoidDiskWrites
- - Make DNSPort support TCP DNS.
-
-
-* * * * Roger, please sort these: * * * *
-
- - bridge communities with local bridge authorities:
- - clients who have a password configured decide to ask their bridge
- authority for a networkstatus
- - be able to have bridges that aren't in your torrc. save them in
- state file, etc.
- - Consider if we can solve: the Tor client doesn't know what flags
- its bridge has (since it only gets the descriptor), so it can't
- make decisions based on Fast or Stable.
- - Some mechanism for specifying that we want to stop using a cached
- bridge.
-
-=======================================================================
-
-Future versions:
-
- - Protocol
- - Our current approach to block attempts to use Tor as a single-hop proxy
- is pretty lame; we should get a better one.
- - Allow small cells and large cells on the same network?
- - Cell buffering and resending. This will allow us to handle broken
- circuits as long as the endpoints don't break, plus will allow
- connection (tls session key) rotation.
- - Implement Morphmix, so we can compare its behavior, complexity,
- etc. But see paper breaking morphmix.
- - Other transport. HTTP, udp, rdp, airhook, etc. May have to do our own
- link crypto, unless we can bully DTLS into it.
- - Need a relay teardown cell, separate from one-way ends.
- (Pending a user who needs this)
- - Handle half-open connections: right now we don't support all TCP
- streams, at least according to the protocol. But we handle all that
- we've seen in the wild.
- (Pending a user who needs this)
-
- - Directory system
- - BEGIN_DIR items
- - handle connect-dir streams that don't have a chosen_exit_name set.
- - Have a "Faster" status flag that means it. Fast2, Fast4, Fast8?
- - Add an option (related to AvoidDiskWrites) to disable directory
- caching. (Is this actually a good idea??)
- X Add d64 and fp64 along-side d and fp so people can paste status
- entries into a url. since + is a valid base64 char, only allow one
- at a time. Consider adding to controller as well.
- [abandoned for lack of demand]
- - Some back-out mechanism for auto-approval on authorities
- - a way of rolling back approvals to before a timestamp
- - Consider minion-like fingerprint file/log combination.
- X Have new people be in limbo and need to demonstrate usefulness
- before we approve them.
-
- - Hidden services:
- d Standby/hotswap/redundant hidden services: needs a proposal.
- - you can insert a hidserv descriptor via the controller.
- - auth mechanisms to let hidden service midpoint and responder filter
- connection requests: proposal 121.
- - Let each hidden service (or other thing) specify its own
- OutboundBindAddress?
-
- - Server operation
- - If the server is spewing complaints about raising your ulimit -n,
- we should add a note about this to the server descriptor so other
- people can notice too.
- - When we hit a funny error from a dir request (eg 403 forbidden),
- but tor is working and happy otherwise, and we haven't seen many
- such errors recently, then don't warn about it.
-
- - Controller
- - Implement missing status events and accompanying getinfos
- - DIR_REACHABLE
- - BAD_DIR_RESPONSE (Unexpected directory response; maybe we're behind
- a firewall.)
- - BAD_PROXY (Bad http or https proxy)
- - UNRECOGNIZED_ROUTER (a nickname we asked for is unavailable)
- - Status events related to hibernation
- - something about failing to parse our address?
- from resolve_my_address() in config.c
- - sketchy OS, sketchy threading
- - too many onions queued: threading problems or slow CPU?
- - Implement missing status event fields:
- - TIMEOUT on CHECKING_REACHABILITY
- - GETINFO status/client, status/server, status/general: There should be
- some way to learn which status events are currently "in effect."
- We should specify which these are, what format they appear in, and so
- on.
- - More information in events:
- - Include bandwidth breakdown by conn->type in BW events.
- - Change circuit status events to give more details, like purpose,
- whether they're internal, when they become dirty, when they become
- too dirty for further circuits, etc.
- - Change stream status events analogously.
- - Expose more information via getinfo:
- - import and export rendezvous descriptors
- - Review all static fields for additional candidates
- - Allow EXTENDCIRCUIT to unknown server.
- - We need some way to adjust server status, and to tell tor not to
- download directories/network-status, and a way to force a download.
- - Make everything work with hidden services
-
- - Performance/resources
- - per-conn write buckets
- - separate config options for read vs write limiting
- (It's hard to support read > write, since we need better
- congestion control to avoid overfull buffers there. So,
- defer the whole thing.)
- - Rate limit exit connections to a given destination -- this helps
- us play nice with websites when Tor users want to crawl them; it
- also introduces DoS opportunities.
- - Consider truncating rather than destroying failed circuits,
- in order to save the effort of restarting. There are security
- issues here that need thinking, though.
- - Handle full buffers without totally borking
- - Rate-limit OR and directory connections overall and per-IP and
- maybe per subnet.
-
- - Misc
- - Hold-open-until-flushed now works by accident; it should work by
- design.
- - Display the reasons in 'destroy' and 'truncated' cells under
- some circumstances?
- - Make router_is_general_exit() a bit smarter once we're sure what
- it's for.
- - Automatically determine what ports are reachable and start using
- those, if circuits aren't working and it's a pattern we
- recognize ("port 443 worked once and port 9001 keeps not
- working").
-
- - Security
- - some better fix for bug #516?
- - Directory guards
- - Mini-SoaT:
- - Servers might check certs for known-good ssl websites, and if
- they come back self-signed, declare themselves to be
- non-exits. Similar to how we test for broken/evil dns now.
- - Authorities should try using exits for http to connect to some
- URLS (specified in a configuration file, so as not to make the
- List Of Things Not To Censor completely obvious) and ask them
- for results. Exits that don't give good answers should have
- the BadExit flag set.
- - Alternatively, authorities should be able to import opinions
- from Snakes on a Tor.
- - Bind to random port when making outgoing connections to Tor servers,
- to reduce remote sniping attacks.
- - Audit everything to make sure rend and intro points are just as
- likely to be us as not.
- - Do something to prevent spurious EXTEND cells from making
- middleman nodes connect all over. Rate-limit failed
- connections, perhaps?
- - DoS protection: TLS puzzles, public key ops, bandwidth exhaustion.
-
- - Needs thinking
- - Now that we're avoiding exits when picking non-exit positions,
- we need to consider how to pick nodes for internal circuits. If
- we avoid exits for all positions, we skew the load balancing. If
- we accept exits for all positions, we leak whether it's an
- internal circuit at every step. If we accept exits only at the
- last hop, we reintroduce Lasse's attacks from the Oakland paper.
-
- - Windows server usability
- - Solve the ENOBUFS problem.
- - make tor's use of openssl operate on buffers rather than sockets,
- so we can make use of libevent's buffer paradigm once it has one.
- - make tor's use of libevent tolerate either the socket or the
- buffer paradigm; includes unifying the functions in connect.c.
- - We need a getrlimit equivalent on Windows so we can reserve some
- file descriptors for saving files, etc. Otherwise we'll trigger
- asserts when we're out of file descriptors and crash.
-
- - Documentation
- - a way to generate the website diagrams from source, so we can
- translate them as utf-8 text rather than with gimp. (svg? or
- imagemagick?)
- . Flesh out options_description array in src/or/config.c
- . multiple sample torrc files
- - Refactor tor man page to divide generally useful options from
- less useful ones?
- - Add a doxygen style checker to make check-spaces so nick doesn't drift
- too far from arma's undocumented styleguide. Also, document that
- styleguide in HACKING. (See r9634 for example.)
- - exactly one space at beginning and at end of comments, except i
- guess when there's line-length pressure.
- - if we refer to a function name, put a () after it.
- - only write <b>foo</b> when foo is an argument to this function.
- - doxygen comments must always end in some form of punctuation.
- - capitalize the first sentence in the doxygen comment, except
- when you shouldn't.
- - avoid spelling errors and incorrect comments. ;)
-
- - Packaging
- - The Debian package now uses --verify-config when (re)starting,
- to distinguish configuration errors from other errors. Perhaps
- the RPM and other startup scripts should too?
- - add a "default.action" file to the tor/vidalia bundle so we can
- fix the https thing in the default configuration:
- https://wiki.torproject.org/noreply/TheOnionRouter/TorFAQ#PrivoxyWeirdSSLPort
-
-
-=======================================================================
-
-Documentation, non-version-specific.
- - Specs
- - Mark up spec; note unclear points about servers
-NR - write a spec appendix for 'being nice with tor'
- - Specify the keys and key rotation schedules and stuff
- . Finish path-spec.txt
- - Mention controller libs someplace.
- - Remove need for HACKING file.
- - document http://wiki.noreply.org/noreply/TheOnionRouter/TransparentProxy on freebsd and osx
-P - figure out rpm spec files for bundles of vidalia-tor-polipo
-P - figure out polipo install scripts for bundles of vidalia-tor-polipo on osx, win32
- - figure out selinux policy for tor
-P - change packaging system to more automated and specific for each
- platform, suggested by Paul Wouter
-P - Setup repos for redhat and suse rpms & start signing the rpms the
- way package management apps prefer
-
-Website:
-J . tor-in-the-media page
-P - Figure out licenses for website material.
- (Phobos reccomends the Open Publication License with Option A at
- http://opencontent.org/openpub/)
-P - put the logo on the website, in source form, so people can put it on
- stickers directly, etc.
-P - put the source image for the stickers on the website, so people can
- print their own
-P - figure out a license for the logos and docs we publish (trademark
-figures into this)
- (Phobos reccomends the Open Publication License with Option A at
- http://opencontent.org/openpub/)
-I - add a page for localizing all tor's components.
- - It would be neat if we had a single place that described _all_ the
- tor-related tools you can use, and what they give you, and how well they
- work. Right now, we don't give a lot of guidance wrt
- torbutton/foxproxy/privoxy/polipo in any consistent place.
-P - create a 'blog badge' for tor fans to link to and feature on their
- blogs. A sample is at http://interloper.org/tmp/tor/tor-button.png
- - More prominently, we should have a recommended apps list.
- - recommend pidgin (gaim is renamed)
- - unrecommend IE because of ftp:// bug.
- - Addenda to tor-design
- - we should add a preamble to tor-design saying it's out of date.
- - we should add an appendix or errata on what's changed.
-
- - Tor mirrors
- - make a mailing list with the mirror operators
- o make an automated tool to check /project/trace/ at mirrors to
- learn which ones are lagging behind.
- - auto (or manually) cull the mirrors that are broken; and
- contact their operator?
- - a set of instructions for mirror operators to make their apaches
- serve our charsets correctly, and bonus points for language
- negotiation.
- - figure out how to load-balance the downloads across mirrors?
- - ponder how to get users to learn that they should google for
- "tor mirrors" if the main site is blocked.
- - find a mirror volunteer to coordinate all of this
-
diff --git a/doc/asciidoc-helper.sh b/doc/asciidoc-helper.sh
index dd420f7c4..c06b57026 100755
--- a/doc/asciidoc-helper.sh
+++ b/doc/asciidoc-helper.sh
@@ -52,8 +52,8 @@ elif [ "$1" = "man" ]; then
You need a working asciidoc installed to be able to build the manpage.
a2x is installed, but for some reason it isn't working. Sometimes
-This happens because required docbook support files are missing.
-Please install docbook-xsl, docbook-xml, and libxml2-utils (Debian) or
+this happens because required docbook support files are missing.
+Please install docbook-xsl, docbook-xml, and xmlto (Debian) or
similar. If you use homebrew on Mac OS X, install the docbook formula
and add "export XML_CATALOG_FILES=/usr/local/etc/xml/catalog" to your
.bashrc
diff --git a/doc/contrib/authority-policy.txt b/doc/contrib/authority-policy.txt
deleted file mode 100644
index dd3dc1178..000000000
--- a/doc/contrib/authority-policy.txt
+++ /dev/null
@@ -1,89 +0,0 @@
-
-0. Overview.
-
- This document contains various informal policies for how to operate
- a directory authority, how to choose new ones, etc.
-
-1. How to pick a new directory authority.
-
- Here's our current guidelines for how to pick new directory
- authorities.
-
- (These won't ever be formal criteria -- we need to keep this flexible
- so we can adapt to new situations.)
-
- o Stability:
- - Must be a low-downtime Tor server (computer as well as network).
- - Must have a static IP.
- - The operator must have been running a stable Tor server for at least
- 3 months.
- - Must intend for this server to stick around for the next 12 months
- or more.
- - Must not hibernate.
- - Should not be an exit node (as this increases the risk both of
- downtime and of key compromise).
-
- o Performance:
- - Must have sufficient bandwidth: at least 300 kB/s symmetric,
- though in practice the inbound traffic can be considerably less.
-
- o Availability:
- - Must be available to upgrade within a few days in most cases.
- (While we're still developing Tor, we periodically find bugs that
- impact the whole network and require authority upgrades.)
- - Should have a well-known way to contact the administrator
- via PGP-encrypted message.
-
- o Integrity:
- - Must promise not to censor or attack the network and users.
- - Should be run by somebody that Tor (i.e. Roger) knows.
- - Should be widely regarded as fair/trustworthy, or at least
- known, by many people.
- - If somebody asks you to backdoor or change your server, legally or
- otherwise, you will fight it to the extent of your abilities. If
- you fail to fight it, you must shut down the Tor server and notify
- us that you have.
-
- o Diversity
- - We should avoid situations that make it likelier for multiple
- authority failures to happen at the same time. Therefore...
- - It's good when authorities are not all in the same country.
- - It's good when authorities are not all in the same jurisdictions.
- - It's good when authorities are not all running the same OS.
- - It's good when authorities are not all using the same ISP.
- - It's good when authorities are not all running the same
- version of Tor.
- - No two authorities should have the same operator.
- - Maximal diversity, however, is not always practical. Sometimes,
- for example, there is only one version of Tor that provides a
- given consensus generation algorithm.
- - A small group of authorities with the same country/jurisdiction/OS is
- not a problem, until that group's size approaches quorum (half the
- authorities).
-
-2. How to choose the recommended versions
-
- The policy, in a nutshell, is to not remove versions without a good
- reason. So this means we should recommend all versions except:
-
- - Versions that no longer conform to the spec. That is, if they wouldn't
- actually interact correctly with the current Tor network.
- - Versions that have known security problems.
- - Versions that have frequent crash or assert problems.
- - Versions that harm the performance or stability of the current Tor
- network or the anonymity of other users. For example, a version
- that load balances wrong, or a version that hammers the authorities
- too much.
-
-
-> some use the slight variant of requiring a *good* reason.
-> excellent reasons include "there's a security flaw"
-> good reasons include "that crashes every time you start it. you would think
-+tor is dumb if you tried to use that version and think of it as tor."
-> good reasons include "those old clients do their load balancing wrong, and
-+they're screwing up the whole network"
-> reasons include "the old one is really slow, clients should prefer the new
-+one"
-> i try to draw the line at 'good reasons and above'
-
-
diff --git a/doc/contrib/incentives.txt b/doc/contrib/incentives.txt
deleted file mode 100644
index 850a0d01e..000000000
--- a/doc/contrib/incentives.txt
+++ /dev/null
@@ -1,479 +0,0 @@
-
- Tor Incentives Design Brainstorms
-
-1. Goals: what do we want to achieve with an incentive scheme?
-
-1.1. Encourage users to provide good relay service (throughput, latency).
-1.2. Encourage users to allow traffic to exit the Tor network from
- their node.
-
-2. Approaches to learning who should get priority.
-
-2.1. "Hard" or quantitative reputation tracking.
-
- In this design, we track the number of bytes and throughput in and
- out of nodes we interact with. When a node asks to send or receive
- bytes, we provide service proportional to our current record of the
- node's value. One approach is to let each circuit be either a normal
- circuit or a premium circuit, and nodes can "spend" their value by
- sending and receiving bytes on premium circuits: see section 4.1 for
- details of this design. Another approach (section 4.2) would treat
- all traffic from the node with the same priority class, and so nodes
- that provide resources will get and provide better service on average.
-
- This approach could be complemented with an anonymous e-cash
- implementation to let people spend reputations gained from one context
- in another context.
-
-2.2. "Soft" or qualitative reputation tracking.
-
- Rather than accounting for every byte (if I owe you a byte, I don't
- owe it anymore once you've spent it), instead I keep a general opinion
- about each server: my opinion increases when they do good work for me,
- and it decays with time, but it does not decrease as they send traffic.
- Therefore we reward servers who provide value to the system without
- nickle and diming them at each step. We also let them benefit from
- relaying traffic for others without having to "reserve" some of the
- payment for their own use. See section 4.3 for a possible design.
-
-2.3. Centralized opinions from the reputation servers.
-
- The above approaches are complex and we don't have all the answers
- for them yet. A simpler approach is just to let some central set
- of trusted servers (say, the Tor directory servers) measure whether
- people are contributing to the network, and provide a signal about
- which servers should be rewarded. They can even do the measurements
- via Tor so servers can't easily perform only when they're being
- tested. See section 4.4.
-
-2.4. Reputation servers that aggregate opinions.
-
- The option above has the directory servers doing all of the
- measurements. This doesn't scale. We can set it up so we have "deputy
- testers" -- trusted other nodes that do performance testing and report
- their results.
-
- If we want to be really adventurous, we could even
- accept claims from every Tor user and build a complex weighting /
- reputation system to decide which claims are "probably" right.
- One possible way to implement the latter is something similar to
- EigenTrust [http://www.stanford.edu/~sdkamvar/papers/eigentrust.pdf],
- where the opinion of nodes with high reputation more is weighted
- higher.
-
-3. Related issues we need to keep in mind.
-
-3.1. Relay and exit configuration needs to be easy and usable.
-
- Implicit in all of the above designs is the need to make it easy to
- run a Tor server out of the box. We need to make it stable on all
- common platforms (including XP), it needs to detect its available
- bandwidth and not overreach that, and it needs to help the operator
- through opening up ports on his firewall. Then we need a slick GUI
- that lets people click a button or two rather than editing text files.
-
- Once we've done all this, we'll hit our first big question: is
- most of the barrier to growth caused by the unusability of the current
- software? If so, are the rest of these incentive schemes superfluous?
-
-3.2. The network effect: how many nodes will you interact with?
-
- One of the concerns with pairwise reputation systems is that as the
- network gets thousands of servers, the chance that you're going to
- interact with a given server decreases. So if 90% of interactions
- don't have any prior information, the "local" incentive schemes above
- are going to degrade. This doesn't mean they're pointless -- it just
- means we need to be aware that this is a limitation, and plan in the
- background for what step to take next. (It seems that e-cash solutions
- would scale better, though they have issues of their own.)
-
-3.3. Guard nodes
-
- As of Tor 0.1.1.11, Tor users pick from a small set of semi-permanent
- "guard nodes" for their first hop of each circuit. This seems like it
- would have a big impact on pairwise reputation systems since you
- will only be cashing in on your reputation to a few people, and it is
- unlikely that a given pair of nodes will use each other as guard nodes.
-
- What does this imply? For one, it means that we don't care at all
- about the opinions of most of the servers out there -- we should
- focus on keeping our guard nodes happy with us.
-
- One conclusion from that is that our design needs to judge performance
- not just through direct interaction (beginning of the circuit) but
- also through indirect interaction (middle of the circuit). That way
- you can never be sure when your guards are measuring you.
-
- Both 3.2 and 3.3 may be solved by having a global notion of reputation,
- as in 2.3 and 2.4. However, computing the global reputation from local
- views could be expensive (O(n^2)) when the network is really large.
-
-3.4. Restricted topology: benefits and roadmap.
-
- As the Tor network continues to grow, we will need to make design
- changes to the network topology so that each node does not need
- to maintain connections to an unbounded number of other nodes. For
- anonymity's sake, we may partition the network such that all
- the nodes have the same belief about the divisions and each node is
- in only one partition. (The alternative is that every user fetches
- his own random subset of the overall node list -- this is bad because
- of intersection attacks.)
-
- Therefore the "network horizon" for each user will stay bounded,
- which helps against the above issues in 3.2 and 3.3.
-
- It could be that the core of long-lived servers will all get to know
- each other, and so the critical point that decides whether you get
- good service is whether the core likes you. Or perhaps it will turn
- out to work some other way.
-
- A special case here is the social network, where the network isn't
- partitioned randomly but instead based on some external properties.
- Social network topologies can provide incentives in other ways, because
- people may be more inclined to help out their friends, and more willing
- to relay traffic if most of the traffic they are relaying comes
- from their friends. It also opens the door for out-of-band incentive
- schemes because of the out-of-band links in the graph.
-
-3.5. Profit-maximizing vs. Altruism.
-
- There are some interesting game theory questions here.
-
- First, in a volunteer culture, success is measured in public utility
- or in public esteem. If we add a reward mechanism, there's a risk that
- reward-maximizing behavior will surpass utility- or esteem-maximizing
- behavior.
-
- Specifically, if most of our servers right now are relaying traffic
- for the good of the community, we may actually *lose* those volunteers
- if we turn the act of relaying traffic into a selfish act.
-
- I am not too worried about this issue for now, since we're aiming
- for an incentive scheme so effective that it produces tens of
- thousands of new servers.
-
-3.6. What part of the node's performance do you measure?
-
- We keep referring to having a node measure how well the other nodes
- receive bytes. But don't leeching clients receive bytes just as well
- as servers?
-
- Further, many transactions in Tor involve fetching lots of
- bytes and not sending very many. So it seems that we want to turn
- things around: we need to measure how quickly a node is _sending_
- us bytes, and then only send it bytes in proportion to that.
-
- However, a sneaky user could simply connect to a node and send some
- traffic through it, and voila, he has performed for the network. This
- is no good. The first fix is that we only count if you're receiving
- bytes "backwards" in the circuit. Now the sneaky user needs to
- construct a circuit such that his node appears later in the circuit,
- and then send some bytes back quickly.
-
- Maybe that complexity is sufficient to deter most lazy users. Or
- maybe it's an argument in favor of a more penny-counting reputation
- approach.
-
- Addendum: I was more thinking of measuring based on who is the service
- provider and service receiver for the circuit. Say Alice builds a
- circuit to Bob. Then Bob is providing service to Alice, since he
- otherwise wouldn't need to spend his bandwidth. So traffic in either
- direction should be charged to Alice. Of course, the same attack would
- work, namely, Bob could cheat by sending bytes back quickly. So someone
- close to the origin needs to detect this and close the circuit, if
- necessary. -JN
-
-3.7. What is the appropriate resource balance for servers vs. clients?
-
- If we build a good incentive system, we'll still need to tune it
- to provide the right bandwidth allocation -- if we reserve too much
- bandwidth for fast servers, then we're wasting some potential, but
- if we reserve too little, then fewer people will opt to become servers.
- In fact, finding an optimum balance is especially hard because it's
- a moving target: the better our incentive mechanism (and the lower
- the barrier to setup), the more servers there will be. How do we find
- the right balance?
-
- One answer is that it doesn't have to be perfect: we can err on the
- side of providing extra resources to servers. Then we will achieve our
- desired goal -- when people complain about speed, we can tell them to
- run a server, and they will in fact get better performance.
-
-3.8. Anonymity attack: fast connections probably come from good servers.
-
- If only fast servers can consistently get good performance in the
- network, they will stand out. "Oh, that connection probably came from
- one of the top ten servers in the network." Intersection attacks over
- time can improve the certainty of the attack.
-
- I'm not too worried about this. First, in periods of low activity,
- many different people might be getting good performance. This dirties
- the intersection attack. Second, with many of these schemes, we will
- still be uncertain whether the fast node originated the traffic, or
- was the entry node for some other lucky user -- and we already accept
- this level of attack in other cases such as the Murdoch-Danezis attack
- [http://freehaven.net/anonbib/#torta05].
-
-3.9. How do we allocate bandwidth over the course of a second?
-
- This may be a simple matter of engineering, but it still needs to be
- addressed. Our current token bucket design refills each bucket once a
- second. If we have N tokens in our bucket, and we don't know ahead of
- time how many connections are going to want to send out how many bytes,
- how do we balance providing quick service to the traffic that is
- already here compared to providing service to potential high-importance
- future traffic?
-
- If we have only two classes of service, here is a simple design:
- At each point, when we are 1/t through the second, the total number
- of non-priority bytes we are willing to send out is N/t. Thus if N
- priority bytes are waiting at the beginning of the second, we drain
- our whole bucket then, and otherwise we provide some delayed service
- to the non-priority bytes.
-
- Does this design expand to cover the case of three priority classes?
- Ideally we'd give each remote server its own priority number. Or
- hopefully there's an easy design in the literature to point to --
- this is clearly not my field.
-
- Is our current flow control mechanism (each circuit and each stream
- start out with a certain window, and once they've exhausted it they
- need to receive an ack before they can send more) going to have
- problems with this new design now that we'll be queueing more bytes
- for less preferred nodes? If it turns out we do, the first fix is
- to have the windows start out at zero rather than start out full --
- it will slow down the startup phase but protect us better.
-
- While we have outgoing cells queued for a given server, we have the
- option of reordering them based on the priority of the previous hop.
- Is this going to turn out to be useful? If we're the exit node (that
- is, there is no previous hop) what priority do those cells get?
-
- Should we do this prioritizing just for sending out bytes (as I've
- described here) or would it help to do it also for receiving bytes?
- See next section.
-
-3.10. Different-priority cells arriving on the same TCP connection.
-
- In some of the proposed designs, servers want to give specific circuits
- priority rather than having all circuits from them get the same class
- of service.
-
- Since Tor uses TCP's flow control for rate limiting, this constraints
- our design choices -- it is easy to give different TCP connections
- different priorities, but it is hard to give different cells on the
- same connection priority, because you have to read them to know what
- priority they're supposed to get.
-
- There are several possible solutions though. First is that we rely on
- the sender to reorder them so the highest priority cells (circuits) are
- more often first. Second is that if we open two TCP connections -- one
- for the high-priority cells, and one for the low-priority cells. (But
- this prevents us from changing the priority of a circuit because
- we would need to migrate it from one connection to the other.) A
- third approach is to remember which connections have recently sent
- us high-priority cells, and preferentially read from those connections.
-
- Hopefully we can get away with not solving this section at all. But if
- necessary, we can consult Ed Knightly, a Professor at Rice
- [http://www.ece.rice.edu/~knightly/], for his extensive experience on
- networking QoS.
-
-3.11. Global reputation system: Congestion on high reputation servers?
-
- If the notion of reputation is global (as in 2.3 or 2.4), circuits that
- go through successive high reputation servers would be the fastest and
- most reliable. This would incentivize everyone, regardless of their own
- reputation, to choose only the highest reputation servers in its
- circuits, causing an over-congestion on those servers.
-
- One could argue, though, that once those servers are over-congested,
- their bandwidth per circuit drops, which would in turn lower their
- reputation in the future. A question is whether this would overall
- stabilize.
-
- Another possible way is to keep a cap on reputation. In this way, a
- fraction of servers would have the same high reputation, thus balancing
- such load.
-
-3.12. Another anonymity attack: learning from service levels.
-
- If reputation is local, it may be possible for an evil node to learn
- the identity of the origin through provision of differential service.
- For instance, the evil node provides crappy bandwidth to everyone,
- until it finds a circuit that it wants to trace the origin, then it
- provides good bandwidth. Now, as only those directly or indirectly
- observing this circuit would like the evil node, it can test each node
- by building a circuit via each node to another evil node. If the
- bandwidth is high, it is (somewhat) likely that the node was a part of
- the circuit.
-
- This problem does not exist if the reputation is global and nodes only
- follow the global reputation, i.e., completely ignore their own view.
-
-3.13. DoS through high priority traffic.
-
- Assume there is an evil node with high reputation (or high value on
- Alice) and this evil node wants to deny the service to Alice. What it
- needs to do is to send a lot of traffic to Alice. To Alice, all traffic
- from this evil node is of high priority. If the choice of circuits are
- too based toward high priority circuits, Alice would spend most of her
- available bandwidth on this circuit, thus providing poor bandwidth to
- everyone else. Everyone else would start to dislike Alice, making it
- even harder for her to forward other nodes' traffic. This could cause
- Alice to have a low reputation, and the only high bandwidth circuit
- Alice could use would be via the evil node.
-
-3.14. If you run a fast server, can you run your client elsewhere?
-
- A lot of people want to run a fast server at a colocation facility,
- and then reap the rewards using their cablemodem or DSL Tor client.
-
- If we use anonymous micropayments, where reputation can literally
- be transferred, this is trivial.
-
- If we pick a design where servers accrue reputation and can only
- use it themselves, though, the clients can configure the servers as
- their entry nodes and "inherit" their reputation. In this approach
- we would let servers configure a set of IP addresses or keys that get
- "like local" service.
-
-4. Sample designs.
-
-4.1. Two classes of service for circuits.
-
- Whenever a circuit is built, it is specified by the origin which class,
- either "premium" or "normal", this circuit belongs. A premium circuit
- gets preferred treatment at each node. A node "spends" its value, which
- it earned a priori by providing service, to the next node by sending
- and receiving bytes. Once a node has overspent its values, the circuit
- cannot stay as premium. It either breaks or converts into a normal
- circuit. Each node also reserves a small portion of bandwidth for
- normal circuits to prevent starvation.
-
- Pro: Even if a node has no value to spend, it can still use normal
- circuits. This allow casual user to use Tor without forcing them to run
- a server.
-
- Pro: Nodes have incentive to forward traffic as quick and as much as
- possible to accumulate value.
-
- Con: There is no proactive method for a node to rebalance its debt. It
- has to wait until there happens to be a circuit in the opposite
- direction.
-
- Con: A node needs to build circuits in such a way that each node in the
- circuit has to have good values to the next node. This requires
- non-local knowledge and makes circuits less reliable as the values are
- used up in the circuit.
-
- Con: May discourage nodes to forward traffic in some circuits, as they
- worry about spending more useful values to get less useful values in
- return.
-
-4.2. Treat all the traffic from the node with the same service;
- hard reputation system.
-
- This design is similar to 4.1, except that instead of having two
- classes of circuits, there is only one. All the circuits are
- prioritized based on the value of the interacting node.
-
- Pro: It is simpler to design and give priority based on connections,
- not circuits.
-
- Con: A node only needs to keep a few guard nodes happy to forward their
- traffic.
-
- Con: Same as in 4.1, may discourage nodes to forward traffic in some
- circuits, as they worry about spending more useful values to get less
- useful values in return.
-
-4.3. Treat all the traffic from the node with the same service;
- soft reputation system.
-
- Rather than a guaranteed system with accounting (as 4.1 and 4.2),
- we instead try for a best-effort system. All bytes are in the same
- class of service. You keep track of other Tors by key, and give them
- service proportional to the service they have given you. That is, in
- the past when you have tried to push bytes through them, you track the
- number of bytes and the average bandwidth, and use that to weight the
- priority of their connections if they try to push bytes through you.
-
- Now you're going to get minimum service if you don't ever push bytes
- for other people, and you get increasingly improved service the more
- active you are. We should have memories fade over time (we'll have
- to tune that, which could be quite hard).
-
- Pro: Sybil attacks are pointless because new identities get lowest
- priority.
-
- Pro: Smoothly handles periods of both low and high network load. Rather
- than keeping track of the ratio/difference between what he's done for
- you and what you've done for him, simply keep track of what he's done
- for you, and give him priority based on that.
-
- Based on 3.3 above, it seems we should reward all the nodes in our
- path, not just the first one -- otherwise the node can provide good
- service only to its guards. On the other hand, there might be a
- second-order effect where you want nodes to like you so that *when*
- your guards choose you for a circuit, they'll be able to get good
- performance. This tradeoff needs more simulation/analysis.
-
- This approach focuses on incenting people to relay traffic, but it
- doesn't do much for incenting them to allow exits. It may help in
- one way through: if there are few exits, then they will attract a
- lot of use, so lots of people will like them, so when they try to
- use the network they will find their first hop to be particularly
- pleasant. After that they're like the rest of the world though. (An
- alternative would be to reward exit nodes with higher values. At the
- extreme, we could even ask the directory servers to suggest the extra
- values, based on the current availability of exit nodes.)
-
- Pro: this is a pretty easy design to add; and it can be phased in
- incrementally simply by having new nodes behave differently.
-
-4.4. Centralized opinions from the reputation servers.
-
- Have a set of official measurers who spot-check servers from the
- directory to see if they really do offer roughly the bandwidth
- they advertise. Include these observations in the directory. (For
- simplicity, the directory servers could be the measurers.) Then Tor
- servers give priority to other servers. We'd like to weight the
- priority by advertised bandwidth to encourage people to donate more,
- but it seems hard to distinguish between a slow server and a busy
- server.
-
- The spot-checking can be done anonymously to prevent selectively
- performing only for the measurers, because hey, we have an anonymity
- network.
-
- We could also reward exit nodes by giving them better priority, but
- like above this only will affect their first hop. Another problem
- is that it's darn hard to spot-check whether a server allows exits
- to all the pieces of the Internet that it claims to. If necessary,
- perhaps this can be solved by a distributed reporting mechanism,
- where clients that can reach a site from one exit but not another
- anonymously submit that site to the measurers, who verify.
-
- A last problem is that since directory servers will be doing their
- tests directly (easy to detect) or indirectly (through other Tor
- servers), then we know that we can get away with poor performance for
- people that aren't listed in the directory. Maybe we can turn this
- around and call it a feature though -- another reason to get listed
- in the directory.
-
-5. Recommendations and next steps.
-
-5.1. Simulation.
-
- For simulation trace, we can use two: one is what we obtained from Tor
- and one from existing web traces.
-
- We want to simulate all the four cases in 4.1-4. For 4.4, we may want
- to look at two variations: (1) the directory servers check the
- bandwidth themselves through Tor; (2) each node reports their perceived
- values on other nodes, while the directory servers use EigenTrust to
- compute global reputation and broadcast those.
-
-5.2. Deploying into existing Tor network.
-
diff --git a/doc/tor-rpm-creation.txt b/doc/contrib/tor-rpm-creation.txt
index a03891e2b..a03891e2b 100644
--- a/doc/tor-rpm-creation.txt
+++ b/doc/contrib/tor-rpm-creation.txt
diff --git a/doc/contrib/torel-design.txt b/doc/contrib/torel-design.txt
deleted file mode 100644
index 610cbe21f..000000000
--- a/doc/contrib/torel-design.txt
+++ /dev/null
@@ -1,181 +0,0 @@
-Design For A Tor DNS-based Exit List
-
-Status:
-
- This is a suggested design for a DNS Exit List (DNSEL) for Tor exit nodes.
- See http://exitlist.torproject.org/ for an implementation.
-
-Why?
-
- It's useful for third parties to be able to tell when a given connection
- is coming from a Tor exit node. Potential applications range from
- "anonymous user" cloaks on IRC networks like oftc, to networks like
- Freenode that apply special authentication rules to users from these
- IPs, to systems like Wikipedia that may want to make a priority of
- _unblocking_ shared IPs more liberally than non-shared IPs, since shared
- IPs presumably have non-abusive users as well as abusive ones.
-
- Since Tor provides exit policies, not every Tor server will connect to
- every address:port combination on the Internet. Unless you're trying to
- penalize hosts for supporting anonymity, it makes more sense to answer
- the fine-grained question "which Tor servers will connect to _me_?" than
- the coarse-grained question "which Tor servers exist?" The fine-grained
- approach also helps Tor server ops who share an IP with their Tor
- server: if they want to access a site that blocks Tor users, they
- can exclude that site from their exit policy, and the site can learn
- that they won't send it anonymous connections.
-
- Tor already ships with a tool (the "contrib/exitlist" script) to
- identify which Tor nodes might open anonymous connections to any given
- exit address. But this is a bit tricky to set up, so only sites like
- Freenode and OFTC that are dedicated to privacy use it.
- Conversely, providers of some DNSEL implementations are providing
- coarse-grained lists of Tor hosts -- sometimes even listing servers that
- permit no exit connections at all. This is rather a problem, since
- support for DNSEL is pretty ubiquitous.
-
-
-How?
-
- Keep a running Tor instance, and parse the cached-routers and
- cached-routers.new files as new routers arrive. To tell whether a given
- server allows connections to a certain address:port combo, look at the
- definitions in dir-spec.txt or follow the logic of the current exitlist
- script. If bug 405 is still open when you work on this
- (https://bugs.torproject.org/flyspray/index.php?do=details&id=405), you'll
- probably want to extend it to look at only the newest descriptor for
- each server, so you don't use obsolete exit policy data.
-
- FetchUselessDescriptors would probably be a good torrc option to enable.
-
- If you're also running a directory cache, you get extra-fresh
- information.
-
-
-The DNS interface
-
- Standard DNSEL, if I understand right, looks like this: There's some
- authoritative name server for foo.example.com. You want to know if
- 1.2.3.4 is in the list, so you query for an A record for
- 4.3.2.1.foo.example.com. If the record exists and has the value
- 127.0.0.2[DNSBL-EMAIL], 1.2.3.4 is in the list. If you get an NXDOMAIN
- error, 1.2.3.4 is not in the list. If you ask for a domain name outside
- of the foo.example.com zone, you get a Server Failure error[RFC 1035].
-
- Assume that the DNSEL answers queries authoritatively for some zone,
- torhosts.example.com. Below are some queries that could be supported,
- though some of them are possibly a bad idea.
-
-
- Query type 1: "General IP:Port"
-
- Format:
- {IP1}.{port}.{IP2}.ip-port.torhosts.example.com
-
- Rule:
- Iff {IP1} is a Tor server that permits connections to {port} on
- {IP2}, then there should be an A record with the value 127.0.0.2.
-
- Example:
- "1.0.0.10.80.4.3.2.1.ip-port.torhosts.example.com" should have the
- value 127.0.0.2 if and only if there is a Tor server at 10.0.0.1
- that allows connections to port 80 on 1.2.3.4.
-
- Example use:
- I'm running an IRC server at w.x.y.z:9999, and I want to tell
- whether an incoming connection is from a Tor server. I set
- up my IRC server to give a special mask to any user coming from
- an IP listed in 9999.z.y.x.w.ip-port.torhosts.example.com.
-
- Later, when I get a connection from a.b.c.d, my ircd looks up
- "d.c.b.a.9999.z.y.x.w.ip-port.torhosts.example.com" to see
- if it's a Tor server that allows connections to my ircd.
-
-
- Query type 2: "IP-port group"
-
- Format:
- {IP}.{listname}.list.torhosts.example.com
-
- Rule:
- Iff this Tor server is configured with an IP:Port list named
- {listname}, and {IP} is a Tor server that permits connections to
- any member of {listname}, then there exists an A record.
-
- Example:
- Suppose torhosts.example.com has a list of IP:Port called "foo".
- There is an A record for 4.3.2.1.foo.list.torhosts.example.com
- if and only if 1.2.3.4 is a Tor server that permits connections
- to one of the addresses in list "foo".
-
- Example use:
- Suppose torhosts.example.com has a list of hosts in "examplenet",
- a popular IRC network. Rather than having them each set up to
- query the appropriate "ip-port" list, they could instead all be
- set to query a central examplenet.list.torhosts.example.com.
-
- Problems:
- We'd be better off if each individual server queried about hosts
- that allowed connections to itself. That way, if I wanted to
- allow anonymous connections to foonet, but I wanted to be able to
- connect to foonet from my own IP without being marked, I could add
- just a few foonet addresses to my exit policy.
-
-
- Query type 3: "My IP, with port"
-
- Format:
- {IP}.{port}.me.torhosts.example.com
-
- Rule:
- An A record exists iff there is a tor server at {IP} that permits
- connections to {port} on the host that requested the lookup.
-
- Example:
- "4.3.2.1.80.me.torhosts.example.com" should have an A record if
- and only if there is a Tor server at 1.2.3.4 that allows
- connections to port 80 of the querying host.
-
- Example use:
- Somebody wants to set up a quick-and-dirty Tor detector for a
- single webserver: just point them at 80.me.torhosts.example.com.
-
- Problem:
- This would be easiest to use, but DNS gets in the way. If you
- create DNS records that give different results depending on who is
- asking, you mess up caching. There could be a fix here, but might
- not.
-
-
- RECOMMENDATION: Just build ip-port for now, and see what demand is
- like. There's no point in building mechanisms nobody wants.
-
-Web interface:
-
- Should provide the same data as the dns interface.
-
-Other issues:
-
- After a Tor server op turns off their server, it stops publishing server
- descriptors. We should consider that server's IP address to still
- represent a Tor node until 48 hours after its last descriptor was
- published.
-
- 30-60 minutes is not an unreasonable TTL.
-
- There could be some demand for address masks and port lists. Address
- masks wider than /8 make me nervous here, as do port ranges.
-
- We need an answer for what to do about hosts which exit from different
- IPs than their advertised IP. One approach would be for the DNSEL
- to launch periodic requests to itself through all exit servers whose
- policies allow it -- and then see where the requests actually come from.
-
-References:
-
- [DNSBL-EMAIL] Levine, J., "DNS Based Blacklists and Whitelists for
- E-Mail", http://tools.ietf.org/html/draft-irtf-asrg-dnsbl-02, November
- 2005.
-
- [RFC 1035] Mockapetris, P., "Domain Names - Implementation and
- Specification", RFC 1035, November 1987.
diff --git a/doc/include.am b/doc/include.am
new file mode 100644
index 000000000..30d3e20d8
--- /dev/null
+++ b/doc/include.am
@@ -0,0 +1,89 @@
+# We use a two-step process to generate documentation from asciidoc files.
+#
+# First, we use asciidoc/a2x to process the asciidoc files into .1.in and
+# .html.in files (see the asciidoc-helper.sh script). These are the same as
+# the regular .1 and .html files, except that they still have some autoconf
+# variables set in them.
+#
+# Second, we use config.status to turn .1.in files into .1 files and
+# .html.in files into .html files.
+#
+# We do the steps in this order so that we can ship the .*.in files as
+# part of the source distribution, so that people without asciidoc can
+# just use the .1 and .html files.
+
+base_mans = doc/tor doc/tor-gencert doc/tor-resolve doc/torify
+all_mans = $(base_mans) doc/tor-fw-helper
+if USE_FW_HELPER
+install_mans = $(all_mans)
+else
+install_mans = $(base_mans)
+endif
+
+if USE_ASCIIDOC
+nodist_man1_MANS = $(install_mans:=.1)
+doc_DATA = $(install_mans:=.html)
+html_in = $(all_mans:=.html.in)
+man_in = $(all_mans:=.1.in)
+txt_in = $(all_mans:=.1.txt)
+else
+html_in =
+man_in =
+txt_in =
+nodist_man1_MANS =
+doc_DATA =
+endif
+
+EXTRA_DIST+= doc/HACKING doc/asciidoc-helper.sh \
+ $(html_in) $(man_in) $(txt_in) \
+ doc/state-contents.txt
+
+docdir = @docdir@
+
+asciidoc_product = $(nodist_man1_MANS) $(doc_DATA)
+
+# Generate the html documentation from asciidoc, but don't do
+# machine-specific replacements yet
+$(html_in) :
+ $(AM_V_GEN)$(top_srcdir)/doc/asciidoc-helper.sh html @ASCIIDOC@ $(top_srcdir)/$@
+
+# Generate the manpage from asciidoc, but don't do
+# machine-specific replacements yet
+$(man_in) :
+ $(AM_V_GEN)$(top_srcdir)/doc/asciidoc-helper.sh man @A2X@ $(top_srcdir)/$@
+
+doc/tor.1.in: doc/tor.1.txt
+doc/torify.1.in: doc/torify.1.txt
+doc/tor-gencert.1.in: doc/tor-gencert.1.txt
+doc/tor-resolve.1.in: doc/tor-resolve.1.txt
+doc/tor-fw-helper.1.in: doc/tor-fw-helper.1.txt
+
+doc/tor.html.in: doc/tor.1.txt
+doc/torify.html.in: doc/torify.1.txt
+doc/tor-gencert.html.in: doc/tor-gencert.1.txt
+doc/tor-resolve.html.in: doc/tor-resolve.1.txt
+doc/tor-fw-helper.html.in: doc/tor-fw-helper.1.txt
+
+# use ../config.status to swap all machine-specific magic strings
+# in the asciidoc with their replacements.
+$(asciidoc_product) :
+ $(AM_V_GEN)$(MKDIR_P) $(@D)
+ $(AM_V_at)if test -e $(top_srcdir)/$@.in && ! test -e $@.in ; then \
+ cp $(top_srcdir)/$@.in $@; \
+ fi
+ $(AM_V_at)./config.status -q --file=$@;
+
+doc/tor.html: doc/tor.html.in
+doc/tor-gencert.html: doc/tor-gencert.html.in
+doc/tor-resolve.html: doc/tor-resolve.html.in
+doc/torify.html: doc/torify.html.in
+doc/tor-fw-helper.html: doc/tor-fw-helper.html.in
+
+doc/tor.1: doc/tor.1.in
+doc/tor-gencert.1: doc/tor-gencert.1.in
+doc/tor-resolve.1: doc/tor-resolve.1.in
+doc/torify.1: doc/torify.1.in
+doc/tor-fw-helper.1: doc/tor-fw-helper.1.in
+
+CLEANFILES+= $(asciidoc_product) config.log
+DISTCLEANFILES+= $(html_in) $(man_in)
diff --git a/doc/spec/README b/doc/spec/README
deleted file mode 100644
index ccd33a421..000000000
--- a/doc/spec/README
+++ /dev/null
@@ -1,11 +0,0 @@
-The Tor specifications and proposals have moved to a new repository.
-
-To browse the specifications, go to
- https://gitweb.torproject.org/torspec.git/tree
-
-To check out the specification repository, run
- git clone git://git.torproject.org/torspec.git
-
-For other information on the repository, see
- https://gitweb.torproject.org/torspec.git
-
diff --git a/doc/tor-fw-helper.1.txt b/doc/tor-fw-helper.1.txt
index 49b091038..1c103d925 100644
--- a/doc/tor-fw-helper.1.txt
+++ b/doc/tor-fw-helper.1.txt
@@ -2,6 +2,8 @@
// See LICENSE for licensing information
// This is an asciidoc file used to generate the manpage/html reference.
// Learn asciidoc on http://www.methods.co.nz/asciidoc/userguide.html
+:man source: Tor
+:man manual: Tor Manual
tor-fw-helper(1)
================
Jacob Appelbaum
@@ -12,9 +14,8 @@ tor-fw-helper - Manage upstream firewall/NAT devices
SYNOPSIS
--------
-**tor-fw-helper** [-h|--help] [-T|--test] [-v|--verbose] [-g|--fetch-public-ip]
- -i|--internal-or-port __TCP port__ [-e|--external-or-port _TCP port_]
- [-d|--internal-dir-port _TCP port_] [-p|--external-dir-port _TCP port_]
+**tor-fw-helper** [-h|--help] [-T|--test-commandline] [-v|--verbose] [-g|--fetch-public-ip]
+ [-p __external port__:__internal_port__]
DESCRIPTION
-----------
@@ -29,28 +30,19 @@ OPTIONS
**-h** or **--help**::
Display help text and exit.
-**-v**::
+**-v** or **--verbose**::
Display verbose output.
-**-T** or **--test**::
+**-T** or **--test-commandline**::
Display test information and print the test information in
tor-fw-helper.log
**-g** or **--fetch-public-ip**::
Fetch the the public ip address for each supported NAT helper method.
-**-i** or **--internal-or-port** __port__::
- Inform **tor-fw-helper** of your internal OR port. This is the only
- required argument.
-
-**-e** or **--external-or-port** __port__::
- Inform **tor-fw-helper** of your external OR port.
-
-**-d** or **--internal-dir-port** __port__::
- Inform **tor-fw-helper** of your internal Dir port.
-
-**-p** or **--external-dir-port** __port__::
- Inform **tor-fw-helper** of your external Dir port.
+**-p** or **--port** __external_port__:__internal_port__::
+ Forward external_port to internal_port. This option can appear
+ more than once.
BUGS
----
diff --git a/doc/tor-gencert.1.txt b/doc/tor-gencert.1.txt
index 2a2d1179c..aa61ec3ec 100644
--- a/doc/tor-gencert.1.txt
+++ b/doc/tor-gencert.1.txt
@@ -2,6 +2,8 @@
// See LICENSE for licensing information
// This is an asciidoc file used to generate the manpage/html reference.
// Learn asciidoc on http://www.methods.co.nz/asciidoc/userguide.html
+:man source: Tor
+:man manual: Tor Manual
tor-gencert(1)
==============
Nick Mathewson
diff --git a/doc/tor-resolve.1.txt b/doc/tor-resolve.1.txt
index bdc636b08..341d30224 100644
--- a/doc/tor-resolve.1.txt
+++ b/doc/tor-resolve.1.txt
@@ -2,6 +2,8 @@
// See LICENSE for licensing information
// This is an asciidoc file used to generate the manpage/html reference.
// Learn asciidoc on http://www.methods.co.nz/asciidoc/userguide.html
+:man source: Tor
+:man manual: Tor Manual
tor-resolve(1)
==============
Peter Palfrader
diff --git a/doc/tor-win32-mingw-creation.txt b/doc/tor-win32-mingw-creation.txt
deleted file mode 100644
index 4a25e47a8..000000000
--- a/doc/tor-win32-mingw-creation.txt
+++ /dev/null
@@ -1,119 +0,0 @@
-##
-## Instructions for building Tor with MinGW (http://www.mingw.org/)
-##
-
-Stage One: Download and Install MinGW.
----------------------------------------
-
-Download mingw:
-http://prdownloads.sf.net/mingw/MinGW-5.1.6.exe?download
-
-Download msys:
-http://prdownloads.sf.net/ming/MSYS-1.0.11.exe?download
-
-Download msysDTK:
-http://sourceforge.net/projects/mingw/files/MSYS%20Supplementary%20Tools/msysDTK-1.0.1/msysDTK-1.0.1.exe/download
-
-Install MinGW, msysDTK, and MSYS in that order.
-
-Make sure your PATH includes C:\MinGW\bin. You can verify this by right
-clicking on "My Computer", choose "Properties", choose "Advanced",
-choose "Environment Variables", select PATH.
-
-Start MSYS(rxvt).
-
-Create a directory called "tor-mingw".
-
-Stage Two: Download, extract, compile openssl
-----------------------------------------------
-
-Download openssl:
-http://www.openssl.org/source/openssl-0.9.8l.tar.gz
-
-Extract openssl:
-Copy the openssl tarball into the "tor-mingw" directory.
-Type "cd tor-mingw/"
-Type "tar zxf openssl-0.9.8l.tar.gz"
-(Note: There are many symlink errors because Windows doesn't support
-symlinks. You can ignore these errors.)
-
-Make openssl libraries:
-Type "cd tor-mingw/openssl-0.9.8l/"
-Type "./Configure -no-idea -no-rc5 -no-mdc2 mingw"
-Edit Makefile and remove the "test:" and "tests:" sections.
-Type "rm -rf ./test"
-Type "cd crypto/"
-Type "find ./ -name "*.h" -exec cp {} ../include/openssl/ \;"
-Type "cd ../ssl/"
-Type "find ./ -name "*.h" -exec cp {} ../include/openssl/ \;"
-Type "cd .."
-Type "cp *.h include/openssl/"
-Type "find ./fips -type f -name "*.h" -exec cp {} include/openssl/ \;"
-# The next steps can take up to 30 minutes to complete.
-Type "make"
-Type "make install"
-
-
-Stage Three: Download, extract, compile zlib
----------------------------------------------
-
-Download zlib source:
-http://www.zlib.net/zlib-1.2.3.tar.gz
-
-Extract zlib:
-Copy the zlib tarball into the "tor-mingw" directory
-Type "cd tor-mingw/"
-Type "tar zxf zlib-1.2.3.tar.gz"
-
-CHOICE:
-
-Make zlib.a:
-Type "cd tor-mingw/zlib-1.2.3/"
-Type "./configure"
-Type "make"
-Type "make install"
-
-Done.
-
-
-Stage Four: Download, extract, and compile libevent
-------------------------------------------------------
-
-Download the latest libevent release:
-http://www.monkey.org/~provos/libevent/
-
-Copy the libevent tarball into the "tor-mingw" directory.
-Type "cd tor-mingw"
-
-Extract libevent.
-
-Type "./configure --enable-static --disable-shared"
-Type "make"
-Type "make install"
-
-Stage Five: Build Tor
-----------------------
-
-Download the current Tor alpha release source code from https://torproject.org/download.html.
-Copy the Tor tarball into the "tor-mingw" directory.
-Extract Tor:
-Type "tar zxf latest-tor-alpha.tar.gz"
-
-cd tor-<version>
-Type "./configure"
-Type "make"
-
-You now have a tor.exe in src/or/. This is Tor.
-You now have a tor-resolve.exe in src/tools/.
-
-Stage Six: Build the installer
--------------------------------
-
-Install the latest NSIS:
-http://nsis.sourceforge.net/Download
-
-Run the package script in contrib:
-From the Tor build directory above, run:
-"./contrib/package_nsis-mingw.sh"
-
-The resulting Tor installer executable is in ./win_tmp/.
diff --git a/doc/tor.1.txt b/doc/tor.1.txt
index 773fccf53..2d89e62b4 100644
--- a/doc/tor.1.txt
+++ b/doc/tor.1.txt
@@ -2,6 +2,8 @@
// See LICENSE for licensing information
// This is an asciidoc file used to generate the manpage/html reference.
// Learn asciidoc on http://www.methods.co.nz/asciidoc/userguide.html
+:man source: Tor
+:man manual: Tor Manual
TOR(1)
======
@@ -16,61 +18,75 @@ SYNOPSIS
DESCRIPTION
-----------
-__tor__ is a connection-oriented anonymizing communication
+Tor is a connection-oriented anonymizing communication
service. Users choose a source-routed path through a set of nodes, and
negotiate a "virtual circuit" through the network, in which each node
knows its predecessor and successor, but no others. Traffic flowing down
the circuit is unwrapped by a symmetric key at each node, which reveals
the downstream node. +
-Basically __tor__ provides a distributed network of servers ("onion routers").
-Users bounce their TCP streams -- web traffic, ftp, ssh, etc -- around the
-routers, and recipients, observers, and even the routers themselves have
+Basically, Tor provides a distributed network of servers or relays ("onion routers").
+Users bounce their TCP streams -- web traffic, ftp, ssh, etc. -- around the
+network, and recipients, observers, and even the relays themselves have
difficulty tracking the source of the stream.
+By default, **tor** will only act as a client only. To help the network
+by providing bandwidth as a relay, change the **ORPort** configuration
+option -- see below. Please also consult the documentation on the Tor
+Project's website.
+
COMMAND-LINE OPTIONS
--------------------
-**-h**, **-help**::
+[[opt-h]] **-h**, **-help**::
Display a short help message and exit.
-**-f** __FILE__::
+[[opt-f]] **-f** __FILE__::
Specify a new configuration file to contain further Tor configuration
- options. (Default: $HOME/.torrc, or @CONFDIR@/torrc if that file is not
+ options. (Default: @CONFDIR@/torrc, or $HOME/.torrc if that file is not
found)
-**--defaults-torrc** __FILE__::
+[[opt-allow-missing-torrc]] **--allow-missing-torrc**::
+ Do not require that configuration file specified by **-f** exist if
+ default torrc can be accessed.
+
+[[opt-defaults-torrc]] **--defaults-torrc** __FILE__::
Specify a file in which to find default values for Tor options. The
contents of this file are overridden by those in the regular
configuration file, and by those on the command line. (Default:
@CONFDIR@/torrc-defaults.)
-**--hash-password**::
+[[opt-ignore-missing-torrc]] **--ignore-missing-torrc**::
+ Specifies that Tor should treat a missing torrc file as though it
+ were empty. Ordinarily, Tor does this for missing default torrc files,
+ but not for those specified on the command line.
+
+[[opt-hash-password]] **--hash-password** __PASSWORD__::
Generates a hashed password for control port access.
-**--list-fingerprint**::
+[[opt-list-fingerprint]] **--list-fingerprint**::
Generate your keys and output your nickname and fingerprint.
-**--verify-config**::
+[[opt-verify-config]] **--verify-config**::
Verify the configuration file is valid.
-**--service install** [**--options** __command-line options__]::
+[[opt-serviceinstall]] **--service install** [**--options** __command-line options__]::
Install an instance of Tor as a Windows service, with the provided
command-line options. Current instructions can be found at
https://trac.torproject.org/projects/tor/wiki/doc/TorFAQ#HowdoIrunmyTorrelayasanNTservice
-**--service** **remove**|**start**|**stop**::
+[[opt-service]] **--service** **remove**|**start**|**stop**::
Remove, start, or stop a configured Tor Windows service.
-**--nt-service**::
+[[opt-nt-service]] **--nt-service**::
Used internally to implement a Windows service.
-**--list-torrc-options**::
+[[opt-list-torrc-options]] **--list-torrc-options**::
List all valid options.
-**--version**::
+[[opt-version]] **--version**::
Display Tor version and exit.
-**--quiet**|**--hush**::
+[[opt-quiet]] **--quiet**|**--hush**::
Override the default console log. By default, Tor starts out logging
messages at level "notice" and higher to the console. It stops doing so
after it parses its configuration, if the configuration tells it to log
@@ -122,47 +138,57 @@ option name with a forward slash.
GENERAL OPTIONS
---------------
-**BandwidthRate** __N__ **bytes**|**KB**|**MB**|**GB**::
+[[BandwidthRate]] **BandwidthRate** __N__ **bytes**|**KBytes**|**MBytes**|**GBytes**|**KBits**|**MBits**|**GBits**::
A token bucket limits the average incoming bandwidth usage on this node to
the specified number of bytes per second, and the average outgoing
bandwidth usage to that same value. If you want to run a relay in the
- public network, this needs to be _at the very least_ 30 KB (that is,
- 30720 bytes). (Default: 5 MB)
-
-**BandwidthBurst** __N__ **bytes**|**KB**|**MB**|**GB**::
+ public network, this needs to be _at the very least_ 30 KBytes (that is,
+ 30720 bytes). (Default: 1 GByte) +
+ +
+ With this option, and in other options that take arguments in bytes,
+ KBytes, and so on, other formats are also supported. Notably, "KBytes" can
+ also be written as "kilobytes" or "kb"; "MBytes" can be written as
+ "megabytes" or "MB"; "kbits" can be written as "kilobits"; and so forth.
+ Tor also accepts "byte" and "bit" in the singular.
+ The prefixes "tera" and "T" are also recognized.
+ If no units are given, we default to bytes.
+ To avoid confusion, we recommend writing "bytes" or "bits" explicitly,
+ since it's easy to forget that "B" means bytes, not bits.
+
+[[BandwidthBurst]] **BandwidthBurst** __N__ **bytes**|**KBytes**|**MBytes**|**GBytes**|**KBits**|**MBits**|**GBits**::
Limit the maximum token bucket size (also known as the burst) to the given
- number of bytes in each direction. (Default: 10 MB)
+ number of bytes in each direction. (Default: 1 GByte)
-**MaxAdvertisedBandwidth** __N__ **bytes**|**KB**|**MB**|**GB**::
+[[MaxAdvertisedBandwidth]] **MaxAdvertisedBandwidth** __N__ **bytes**|**KBytes**|**MBytes**|**GBytes**|**KBits**|**MBits**|**GBits**::
If set, we will not advertise more than this amount of bandwidth for our
BandwidthRate. Server operators who want to reduce the number of clients
who ask to build circuits through them (since this is proportional to
advertised bandwidth rate) can thus reduce the CPU demands on their server
without impacting network performance.
-**RelayBandwidthRate** __N__ **bytes**|**KB**|**MB**|**GB**::
+[[RelayBandwidthRate]] **RelayBandwidthRate** __N__ **bytes**|**KBytes**|**MBytes**|**GBytes**|**KBits**|**MBits**|**GBits**::
If not 0, a separate token bucket limits the average incoming bandwidth
usage for \_relayed traffic_ on this node to the specified number of bytes
per second, and the average outgoing bandwidth usage to that same value.
Relayed traffic currently is calculated to include answers to directory
requests, but that may change in future versions. (Default: 0)
-**RelayBandwidthBurst** __N__ **bytes**|**KB**|**MB**|**GB**::
+[[RelayBandwidthBurst]] **RelayBandwidthBurst** __N__ **bytes**|**KBytes**|**MBytes**|**GBytes**|**KBits**|**MBits**|**GBits**::
If not 0, limit the maximum token bucket size (also known as the burst) for
\_relayed traffic_ to the given number of bytes in each direction.
(Default: 0)
-**PerConnBWRate** __N__ **bytes**|**KB**|**MB**|**GB**::
+[[PerConnBWRate]] **PerConnBWRate** __N__ **bytes**|**KBytes**|**MBytes**|**GBytes**|**KBits**|**MBits**|**GBits**::
If set, do separate rate limiting for each connection from a non-relay.
You should never need to change this value, since a network-wide value is
published in the consensus and your relay will use that value. (Default: 0)
-**PerConnBWBurst** __N__ **bytes**|**KB**|**MB**|**GB**::
+[[PerConnBWBurst]] **PerConnBWBurst** __N__ **bytes**|**KBytes**|**MBytes**|**GBytes**|**KBits**|**MBits**|**GBits**::
If set, do separate rate limiting for each connection from a non-relay.
You should never need to change this value, since a network-wide value is
published in the consensus and your relay will use that value. (Default: 0)
-**ClientTransportPlugin** __transport__ socks4|socks5 __IP__:__PORT__::
+[[ClientTransportPlugin]] **ClientTransportPlugin** __transport__ socks4|socks5 __IP__:__PORT__::
**ClientTransportPlugin** __transport__ exec __path-to-binary__ [options]::
In its first form, 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
@@ -174,12 +200,31 @@ GENERAL OPTIONS
forwards its traffic to it. It's the duty of that proxy to properly forward
the traffic to the bridge.
-**ServerTransportPlugin** __transport__ exec __path-to-binary__ [options]::
+[[ServerTransportPlugin]] **ServerTransportPlugin** __transport__ exec __path-to-binary__ [options]::
The Tor relay launches the pluggable transport proxy in __path-to-binary__
using __options__ as its command-line options, and expects to receive
proxied client traffic from it.
-**ConnLimit** __NUM__::
+[[ServerTransportListenAddr]] **ServerTransportListenAddr** __transport__ __IP__:__PORT__::
+ When this option is set, Tor will suggest __IP__:__PORT__ as the
+ listening address of any pluggable transport proxy that tries to
+ launch __transport__.
+
+[[ServerTransportOptions]] **ServerTransportOptions** __transport__ __k=v__ __k=v__ ...::
+ When this option is set, Tor will pass the __k=v__ parameters to
+ any pluggable transport proxy that tries to launch __transport__. +
+ (Example: ServerTransportOptions obfs45 shared-secret=bridgepasswd cache=/var/lib/tor/cache)
+
+[[ExtORPort]] **ExtORPort** \['address':]__port__|**auto**
+ Open this port to listen for Extended ORPort connections from your
+ pluggable transports.
+
+[[ExtORPortCookieAuthFile]] **ExtORPortCookieAuthFile** __Path__::
+ If set, this option overrides the default location and file name
+ for the Extended ORPort's cookie file -- the cookie file is needed
+ for pluggable transports to communicate through the Extended ORPort.
+
+[[ConnLimit]] **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
descriptors as the OS will allow (you can find this by "ulimit -H -n").
@@ -188,13 +233,14 @@ GENERAL OPTIONS
You probably don't need to adjust this. It has no effect on Windows
since that platform lacks getrlimit(). (Default: 1000)
-**DisableNetwork** **0**|**1**::
+[[DisableNetwork]] **DisableNetwork** **0**|**1**::
When this option is set, we don't listen for or accept any connections
- other than controller connections, and we don't make any outbound
+ other than controller connections, and we close (and don't reattempt)
+ any outbound
connections. Controllers sometimes use this option to avoid using
the network until Tor is fully configured. (Default: 0)
-**ConstrainedSockets** **0**|**1**::
+[[ConstrainedSockets]] **ConstrainedSockets** **0**|**1**::
If set, Tor will tell the kernel to attempt to shrink the buffers for all
sockets to the size specified in **ConstrainedSockSize**. This is useful for
virtual servers and other environments where system level TCP buffers may
@@ -215,12 +261,12 @@ GENERAL OPTIONS
the TCP stream and will reduce throughput in proportion to round trip
time on long paths. (Default: 0)
-**ConstrainedSockSize** __N__ **bytes**|**KB**::
+[[ConstrainedSockSize]] **ConstrainedSockSize** __N__ **bytes**|**KBytes**::
When **ConstrainedSockets** is enabled the receive and transmit buffers for
all sockets will be set to this limit. Must be a value between 2048 and
262144, in 1024 byte increments. Default of 8192 is recommended.
-**ControlPort** __PORT__|**auto**::
+[[ControlPort]] **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 or
@@ -231,7 +277,7 @@ GENERAL OPTIONS
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)
-**ControlListenAddress** __IP__[:__PORT__]::
+[[ControlListenAddress]] **ControlListenAddress** __IP__[:__PORT__]::
Bind the controller listener to this address. If you specify a port, bind
to this port rather than the one specified in ControlPort. We strongly
recommend that you leave this alone unless you know what you're doing,
@@ -239,96 +285,102 @@ GENERAL OPTIONS
dangerous. This directive can be specified multiple
times to bind to multiple addresses/ports. (Default: 127.0.0.1)
-**ControlSocket** __Path__::
+[[ControlSocket]] **ControlSocket** __Path__::
Like ControlPort, but listens on a Unix domain socket, rather than a TCP
socket. (Unix and Unix-like systems only.)
-**ControlSocketsGroupWritable** **0**|**1**::
+[[ControlSocketsGroupWritable]] **ControlSocketsGroupWritable** **0**|**1**::
If this option is set to 0, don't allow the filesystem group to read and
write unix sockets (e.g. ControlSocket). If the option is set to 1, make
the control socket readable and writable by the default GID. (Default: 0)
-**HashedControlPassword** __hashed_password__::
+[[HashedControlPassword]] **HashedControlPassword** __hashed_password__::
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**::
+[[CookieAuthentication]] **CookieAuthentication** **0**|**1**::
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)
-**CookieAuthFile** __Path__::
+[[CookieAuthFile]] **CookieAuthFile** __Path__::
If set, this option overrides the default location and file name
for Tor's cookie file. (See CookieAuthentication above.)
-**CookieAuthFileGroupReadable** **0**|**1**|__Groupname__::
+[[CookieAuthFileGroupReadable]] **CookieAuthFileGroupReadable** **0**|**1**|__Groupname__::
If this option is set to 0, don't allow the filesystem group to read the
cookie file. If the option is set to 1, make the cookie file readable by
the default GID. [Making the file readable by other groups is not yet
implemented; let us know if you need this for some reason.] (Default: 0)
-**ControlPortWriteToFile** __Path__::
+[[ControlPortWriteToFile]] **ControlPortWriteToFile** __Path__::
If set, Tor writes the address and port of any control port it opens to
this address. Usable by controllers to learn the actual control port
when ControlPort is set to "auto".
-**ControlPortFileGroupReadable** **0**|**1**::
+[[ControlPortFileGroupReadable]] **ControlPortFileGroupReadable** **0**|**1**::
If this option is set to 0, don't allow the filesystem group to read the
control port file. If the option is set to 1, make the control port
file readable by the default GID. (Default: 0)
-**DataDirectory** __DIR__::
+[[DataDirectory]] **DataDirectory** __DIR__::
Store working data in DIR (Default: @LOCALSTATEDIR@/lib/tor)
-**DirServer** [__nickname__] [**flags**] __address__:__port__ __fingerprint__::
+[[FallbackDir]] **FallbackDir** __address__:__port__ orport=__port__ id=__fingerprint__ [weight=__num__]::
+ When we're unable to connect to any directory cache for directory info
+ (usually because we don't know about any yet) we try a FallbackDir.
+ By default, the directory authorities are also FallbackDirs.
+
+[[DirAuthority]] **DirAuthority** [__nickname__] [**flags**] __address__:__port__ __fingerprint__::
Use a nonstandard authoritative directory server at the provided address
and port, with the specified key fingerprint. This option can be repeated
many times, for multiple authoritative directory servers. Flags are
separated by spaces, and determine what kind of an authority this directory
- is. By default, every authority is authoritative for current ("v2")-style
- directories, unless the "no-v2" flag is given. If the "v1" flags is
- provided, Tor will use this server as an authority for old-style (v1)
- directories as well. (Only directory mirrors care about this.) Tor will
- use this server as an authority for hidden service information if the "hs"
- flag is set, or if the "v1" flag is set and the "no-hs" flag is **not** set.
+ is. By default, an authority is not authoritative for any directory style
+ or version unless an appropriate flag is given.
Tor will use this authority as a bridge authoritative directory if the
"bridge" flag is set. If a flag "orport=**port**" is given, Tor will use the
- given port when opening encrypted tunnels to the dirserver. Lastly, if a
+ given port when opening encrypted tunnels to the dirserver. If a flag
+ "weight=**num**" is given, then the directory server is chosen randomly
+ with probability proportional to that weight (default 1.0). Lastly, if a
flag "v3ident=**fp**" is given, the dirserver is a v3 directory authority
whose v3 long-term signing key has the fingerprint **fp**. +
+
- If no **dirserver** line is given, Tor will use the default directory
- servers. NOTE: this option is intended for setting up a private Tor
+ If no **DirAuthority** line is given, Tor will use the default directory
+ authorities. NOTE: this option is intended for setting up a private Tor
network with its own directory authorities. If you use it, you will be
distinguishable from other users, because you won't believe the same
authorities they do.
-**DynamicDHGroups** **0**|**1**::
+[[DirAuthorityFallbackRate]] **DirAuthorityFallbackRate** __NUM__::
+ When configured to use both directory authorities and fallback
+ directories, the directory authorities also work as fallbacks. They are
+ chosen with their regular weights, multiplied by this number, which
+ should be 1.0 or less. (Default: 1.0)
+
+[[DynamicDHGroups]] **DynamicDHGroups** **0**|**1**::
If this option is set to 1, when running as a server, generate our
own Diffie-Hellman group instead of using the one from Apache's mod_ssl.
This option may help circumvent censorship based on static
Diffie-Hellman parameters. (Default: 0)
-**AlternateDirAuthority** [__nickname__] [**flags**] __address__:__port__ __fingerprint__ +
-
-**AlternateHSAuthority** [__nickname__] [**flags**] __address__:__port__ __fingerprint__ +
+[[AlternateDirAuthority]] **AlternateDirAuthority** [__nickname__] [**flags**] __address__:__port__ __fingerprint__ +
-**AlternateBridgeAuthority** [__nickname__] [**flags**] __address__:__port__ __ fingerprint__::
- These options behave as DirServer, but they replace fewer of the
+[[AlternateBridgeAuthority]] **AlternateBridgeAuthority** [__nickname__] [**flags**] __address__:__port__ __ fingerprint__::
+ These options behave as DirAuthority, but they replace fewer of the
default directory authorities. Using
AlternateDirAuthority replaces the default Tor directory authorities, but
- leaves the default hidden service authorities and bridge authorities in
- place. Similarly, AlternateHSAuthority replaces the default hidden
- service authorities, but not the directory or bridge authorities; and
+ leaves the default bridge authorities in
+ place. Similarly,
AlternateBridgeAuthority replaces the default bridge authority,
- but leaves the directory and hidden service authorities alone.
+ but leaves the directory authorities alone.
-**DisableAllSwap** **0**|**1**::
+[[DisableAllSwap]] **DisableAllSwap** **0**|**1**::
If set to 1, Tor will attempt to lock all current and future memory pages,
so that memory cannot be paged out. Windows, OS X and Solaris are currently
not supported. We believe that this feature works on modern Gnu/Linux
@@ -336,9 +388,10 @@ GENERAL OPTIONS
option requires that you start your Tor as root, and you should use the
**User** option to properly reduce Tor's privileges. (Default: 0)
-**DisableDebuggerAttachment** **0**|**1**::
+[[DisableDebuggerAttachment]] **DisableDebuggerAttachment** **0**|**1**::
If set to 1, Tor will attempt to prevent basic debugging attachment attempts
- by other processes. It has no impact for users who wish to attach if they
+ by other processes. This may also keep Tor from generating core files if
+ it crashes. It has no impact for users who wish to attach if they
have CAP_SYS_PTRACE or if they are root. We believe that this feature
works on modern Gnu/Linux distributions, and that it may also work on *BSD
systems (untested). Some modern Gnu/Linux systems such as Ubuntu have the
@@ -350,81 +403,86 @@ GENERAL OPTIONS
this to 0 for the duration of your debugging. Normal users should leave it
on. Disabling this option while Tor is running is prohibited. (Default: 1)
-**FetchDirInfoEarly** **0**|**1**::
+[[FetchDirInfoEarly]] **FetchDirInfoEarly** **0**|**1**::
If set to 1, Tor will always fetch directory information like other
directory caches, even if you don't meet the normal criteria for fetching
early. Normal users should leave it off. (Default: 0)
-**FetchDirInfoExtraEarly** **0**|**1**::
+[[FetchDirInfoExtraEarly]] **FetchDirInfoExtraEarly** **0**|**1**::
If set to 1, Tor will fetch directory information before other directory
caches. It will attempt to download directory information closer to the
start of the consensus period. Normal users should leave it off.
(Default: 0)
-**FetchHidServDescriptors** **0**|**1**::
+[[FetchHidServDescriptors]] **FetchHidServDescriptors** **0**|**1**::
If set to 0, Tor will never fetch any hidden service descriptors from the
rendezvous directories. This option is only useful if you're using a Tor
controller that handles hidden service fetches for you. (Default: 1)
-**FetchServerDescriptors** **0**|**1**::
+[[FetchServerDescriptors]] **FetchServerDescriptors** **0**|**1**::
If set to 0, Tor will never fetch any network status summaries or server
descriptors from the directory servers. This option is only useful if
you're using a Tor controller that handles directory fetches for you.
(Default: 1)
-**FetchUselessDescriptors** **0**|**1**::
+[[FetchUselessDescriptors]] **FetchUselessDescriptors** **0**|**1**::
If set to 1, Tor will fetch every non-obsolete descriptor from the
authorities that it hears about. Otherwise, it will avoid fetching useless
descriptors, for example for routers that are not running. This option is
useful if you're using the contributed "exitlist" script to enumerate Tor
nodes that exit to certain addresses. (Default: 0)
-**HTTPProxy** __host__[:__port__]::
+[[HTTPProxy]] **HTTPProxy** __host__[:__port__]::
Tor will make all its directory requests through this host:port (or host:80
if port is not specified), rather than connecting directly to any directory
servers.
-**HTTPProxyAuthenticator** __username:password__::
+[[HTTPProxyAuthenticator]] **HTTPProxyAuthenticator** __username:password__::
If defined, Tor will use this username:password for Basic HTTP proxy
authentication, as in RFC 2617. This is currently the only form of HTTP
proxy authentication that Tor supports; feel free to submit a patch if you
want it to support others.
-**HTTPSProxy** __host__[:__port__]::
+[[HTTPSProxy]] **HTTPSProxy** __host__[:__port__]::
Tor will make all its OR (SSL) connections through this host:port (or
host:443 if port is not specified), via HTTP CONNECT rather than connecting
directly to servers. You may want to set **FascistFirewall** to restrict
the set of ports you might try to connect to, if your HTTPS proxy only
allows connecting to certain ports.
-**HTTPSProxyAuthenticator** __username:password__::
+[[HTTPSProxyAuthenticator]] **HTTPSProxyAuthenticator** __username:password__::
If defined, Tor will use this username:password for Basic HTTPS proxy
authentication, as in RFC 2617. This is currently the only form of HTTPS
proxy authentication that Tor supports; feel free to submit a patch if you
want it to support others.
-**Socks4Proxy** __host__[:__port__]::
+[[Sandbox]] **Sandbox** **0**|**1**::
+ If set to 1, Tor will run securely through the use of a syscall sandbox.
+ Otherwise the sandbox will be disabled. The option is currently an
+ experimental feature. (Default: 0)
+
+[[Socks4Proxy]] **Socks4Proxy** __host__[:__port__]::
Tor will make all OR connections through the SOCKS 4 proxy at host:port
(or host:1080 if port is not specified).
-**Socks5Proxy** __host__[:__port__]::
+[[Socks5Proxy]] **Socks5Proxy** __host__[:__port__]::
Tor will make all OR connections through the SOCKS 5 proxy at host:port
(or host:1080 if port is not specified).
-**Socks5ProxyUsername** __username__ +
+[[Socks5ProxyUsername]] **Socks5ProxyUsername** __username__ +
-**Socks5ProxyPassword** __password__::
+[[Socks5ProxyPassword]] **Socks5ProxyPassword** __password__::
If defined, authenticate to the SOCKS 5 server using username and password
in accordance to RFC 1929. Both username and password must be between 1 and
255 characters.
-**KeepalivePeriod** __NUM__::
+[[KeepalivePeriod]] **KeepalivePeriod** __NUM__::
To keep firewalls from expiring connections, send a padding keepalive cell
every NUM seconds on open connections that are in use. If the connection
has no open circuits, it will instead be closed after NUM seconds of
idleness. (Default: 5 minutes)
-**Log** __minSeverity__[-__maxSeverity__] **stderr**|**stdout**|**syslog**::
+[[Log]] **Log** __minSeverity__[-__maxSeverity__] **stderr**|**stdout**|**syslog**::
Send all messages between __minSeverity__ and __maxSeverity__ to the standard
output stream, the standard error stream, or to the system log. (The
"syslog" value is only supported on Unix.) Recognized severity levels are
@@ -433,15 +491,15 @@ GENERAL OPTIONS
attacker who obtains the logs. If only one severity level is given, all
messages of that level or higher will be sent to the listed destination.
-**Log** __minSeverity__[-__maxSeverity__] **file** __FILENAME__::
+[[Log2]] **Log** __minSeverity__[-__maxSeverity__] **file** __FILENAME__::
As above, but send log messages to the listed filename. The
"Log" option may appear more than once in a configuration file.
Messages are sent to all the logs that match their severity
level.
-**Log** **[**__domain__,...**]**__minSeverity__[-__maxSeverity__] ... **file** __FILENAME__ +
+[[Log3]] **Log** **[**__domain__,...**]**__minSeverity__[-__maxSeverity__] ... **file** __FILENAME__ +
-**Log** **[**__domain__,...**]**__minSeverity__[-__maxSeverity__] ... **stderr**|**stdout**|**syslog**::
+[[Log4]] **Log** **[**__domain__,...**]**__minSeverity__[-__maxSeverity__] ... **stderr**|**stdout**|**syslog**::
As above, but select messages by range of log severity __and__ by a
set of "logging domains". Each logging domain corresponds to an area of
functionality inside Tor. You can specify any number of severity ranges
@@ -462,32 +520,40 @@ GENERAL OPTIONS
messages from domains other than networking and memory management, and all
messages of severity notice or higher.
-**LogMessageDomains** **0**|**1**::
+[[LogMessageDomains]] **LogMessageDomains** **0**|**1**::
If 1, Tor includes message domains with each log message. Every log
message currently has at least one domain; most currently have exactly
one. This doesn't affect controller log messages. (Default: 0)
-**OutboundBindAddress** __IP__::
+[[OutboundBindAddress]] **OutboundBindAddress** __IP__::
Make all outbound connections originate from the IP address specified. This
is only useful when you have multiple network interfaces, and you want all
- of Tor's outgoing connections to use a single one. This setting will be
- ignored for connections to the loopback addresses (127.0.0.0/8 and ::1).
+ of Tor's outgoing connections to use a single one. This option may
+ be used twice, once with an IPv4 address and once with an IPv6 address.
+ This setting will be ignored for connections to the loopback addresses
+ (127.0.0.0/8 and ::1).
-**PidFile** __FILE__::
+[[PidFile]] **PidFile** __FILE__::
On startup, write our PID to FILE. On clean shutdown, remove
FILE.
-**ProtocolWarnings** **0**|**1**::
+[[ProtocolWarnings]] **ProtocolWarnings** **0**|**1**::
If 1, Tor will log with severity \'warn' various cases of other parties not
following the Tor specification. Otherwise, they are logged with severity
\'info'. (Default: 0)
-**RunAsDaemon** **0**|**1**::
+[[PredictedPortsRelevanceTime]] **PredictedPortsRelevanceTime** __NUM__::
+ Set how long, after the client has mad an anonymized connection to a
+ given port, we will try to make sure that we build circuits to
+ exits that support that port. The maximum value for this option is 1
+ hour. (Default: 1 hour)
+
+[[RunAsDaemon]] **RunAsDaemon** **0**|**1**::
If 1, Tor forks and daemonizes to the background. This option has no effect
on Windows; instead you should use the --service command-line option.
(Default: 0)
-**LogTimeGranularity** __NUM__::
+[[LogTimeGranularity]] **LogTimeGranularity** __NUM__::
Set the resolution of timestamps in Tor's logs to NUM milliseconds.
NUM must be positive and either a divisor or a multiple of 1 second.
Note that this option only controls the granularity written by Tor to
@@ -495,7 +561,7 @@ GENERAL OPTIONS
messages to affect times logged by a controller, times attached to
syslog messages, or the mtime fields on log files. (Default: 1 second)
-**SafeLogging** **0**|**1**|**relay**::
+[[SafeLogging]] **SafeLogging** **0**|**1**|**relay**::
Tor can scrub potentially sensitive strings from log messages (e.g.
addresses) by replacing them with the string [scrubbed]. This way logs can
still be useful, but they don't leave behind personally identifying
@@ -506,37 +572,28 @@ GENERAL OPTIONS
relay, all log messages generated when acting as a relay are sanitized, but
all messages generated when acting as a client are not. (Default: 1)
-**User** __UID__::
+[[User]] **User** __UID__::
On startup, setuid to this user and setgid to their primary group.
-**HardwareAccel** **0**|**1**::
+[[HardwareAccel]] **HardwareAccel** **0**|**1**::
If non-zero, try to use built-in (static) crypto hardware acceleration when
available. (Default: 0)
-**AccelName** __NAME__::
+[[AccelName]] **AccelName** __NAME__::
When using OpenSSL hardware crypto acceleration attempt to load the dynamic
engine of this name. This must be used for any dynamic hardware engine.
Names can be verified with the openssl engine command.
-**AccelDir** __DIR__::
+[[AccelDir]] **AccelDir** __DIR__::
Specify this option if using dynamic hardware acceleration and the engine
implementation library resides somewhere other than the OpenSSL default.
-**AvoidDiskWrites** **0**|**1**::
+[[AvoidDiskWrites]] **AvoidDiskWrites** **0**|**1**::
If non-zero, try to write to disk less frequently than we would otherwise.
This is useful when running on flash memory or other media that support
only a limited number of writes. (Default: 0)
-**TunnelDirConns** **0**|**1**::
- If non-zero, when a directory server we contact supports it, we will build
- a one-hop circuit and make an encrypted connection via its ORPort.
- (Default: 1)
-
-**PreferTunneledDirConns** **0**|**1**::
- If non-zero, we will avoid directory servers that don't support tunneled
- directory connections, when possible. (Default: 1)
-
-**CircuitPriorityHalflife** __NUM1__::
+[[CircuitPriorityHalflife]] **CircuitPriorityHalflife** __NUM1__::
If this value is set, we override the default algorithm for choosing which
circuit's cell to deliver or relay next. When the value is 0, we
round-robin between the active circuits on a connection, delivering one
@@ -548,19 +605,19 @@ GENERAL OPTIONS
networkstatus. This is an advanced option; you generally shouldn't have
to mess with it. (Default: not set)
-**DisableIOCP** **0**|**1**::
+[[DisableIOCP]] **DisableIOCP** **0**|**1**::
If Tor was built to use the Libevent's "bufferevents" networking code
and you're running on Windows, setting this option to 1 will tell Libevent
not to use the Windows IOCP networking API. (Default: 1)
-**UserspaceIOCPBuffers** **0**|**1**::
+[[UserspaceIOCPBuffers]] **UserspaceIOCPBuffers** **0**|**1**::
If IOCP is enabled (see DisableIOCP above), setting this option to 1
will tell Tor to disable kernel-space TCP buffers, in order to avoid
needless copy operations and try not to run out of non-paged RAM.
This feature is experimental; don't use it yet unless you're eager to
help tracking down bugs. (Default: 0)
-**_UseFilteringSSLBufferevents** **0**|**1**::
+[[UseFilteringSSLBufferevents]] **UseFilteringSSLBufferevents** **0**|**1**::
Tells Tor to do its SSL communication using a chain of
bufferevents: one for SSL and one for networking. This option has no
effect if bufferevents are disabled (in which case it can't turn on), or
@@ -568,7 +625,7 @@ GENERAL OPTIONS
option is useful for debugging only; most users shouldn't touch it.
(Default: 0)
-**CountPrivateBandwidth** **0**|**1**::
+[[CountPrivateBandwidth]] **CountPrivateBandwidth** **0**|**1**::
If this option is set, then Tor's rate-limiting applies not only to
remote connections, but also to connections to private addresses like
127.0.0.1 or 10.0.0.1. This is mostly useful for debugging
@@ -580,14 +637,14 @@ CLIENT OPTIONS
The following options are useful only for clients (that is, if
**SocksPort**, **TransPort**, **DNSPort**, or **NATDPort** is non-zero):
-**AllowInvalidNodes** **entry**|**exit**|**middle**|**introduction**|**rendezvous**|**...**::
+[[AllowInvalidNodes]] **AllowInvalidNodes** **entry**|**exit**|**middle**|**introduction**|**rendezvous**|**...**::
If some Tor servers are obviously not working right, the directory
authorities can manually mark them as invalid, meaning that it's not
recommended you use them for entry or exit positions in your circuits. You
can opt to use them in some circuit positions, though. The default is
"middle,rendezvous", and other choices are not advised.
-**ExcludeSingleHopRelays** **0**|**1**::
+[[ExcludeSingleHopRelays]] **ExcludeSingleHopRelays** **0**|**1**::
This option controls whether circuits built by Tor will include relays with
the AllowSingleHopExits flag set to true. If ExcludeSingleHopRelays is set
to 0, these relays will be included. Note that these relays might be at
@@ -596,10 +653,10 @@ The following options are useful only for clients (that is, if
so using these relays might make your client stand out.
(Default: 1)
-**Bridge** [__transport__] __IP__:__ORPort__ [__fingerprint__]::
+[[Bridge]] **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
+ is provided (using the same format as for DirAuthority), 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. +
@@ -608,10 +665,10 @@ The following options are useful only for clients (that is, if
line, we use that pluggable transports proxy to transfer data to
the bridge.
-**LearnCircuitBuildTimeout** **0**|**1**::
+[[LearnCircuitBuildTimeout]] **LearnCircuitBuildTimeout** **0**|**1**::
If 0, CircuitBuildTimeout adaptive learning is disabled. (Default: 1)
-**CircuitBuildTimeout** __NUM__::
+[[CircuitBuildTimeout]] **CircuitBuildTimeout** __NUM__::
Try for at most NUM seconds when building circuits. If the circuit isn't
open in that time, give up on it. If LearnCircuitBuildTimeout is 1, this
@@ -619,7 +676,7 @@ The following options are useful only for clients (that is, if
LearnCircuitBuildTimeout is 0, this value is the only value used.
(Default: 60 seconds)
-**CircuitIdleTimeout** __NUM__::
+[[CircuitIdleTimeout]] **CircuitIdleTimeout** __NUM__::
If we have kept a clean (never used) circuit around for NUM seconds, then
close it. This way when the Tor client is entirely idle, it can expire all
of its circuits, and then expire its TLS connections. Also, if we end up
@@ -627,21 +684,22 @@ The following options are useful only for clients (that is, if
receiving, it won't forever take up a slot in the circuit list. (Default: 1
hour)
-**CircuitStreamTimeout** __NUM__::
+[[CircuitStreamTimeout]] **CircuitStreamTimeout** __NUM__::
If non-zero, this option overrides 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. (Default: 0)
-**ClientOnly** **0**|**1**::
- If set to 1, Tor will under no circumstances run as a relay or serve
- directory requests. This config option is mostly meaningless: we
- added it back when we were considering having Tor clients auto-promote
- themselves to being relays if they were stable and fast enough. The
- current behavior is simply that Tor is a client unless ORPort or
- DirPort are configured. (Default: 0)
+[[ClientOnly]] **ClientOnly** **0**|**1**::
+ If set to 1, Tor will not run as a relay or serve
+ directory requests, even if the ORPort, ExtORPort, or DirPort options are
+ set. (This config option is
+ mostly unnecessary: we added it back when we were considering having
+ Tor clients auto-promote themselves to being relays if they were stable
+ and fast enough. The current behavior is simply that Tor is a client
+ unless ORPort, ExtORPort, or DirPort are configured.) (Default: 0)
-**ExcludeNodes** __node__,__node__,__...__::
+[[ExcludeNodes]] **ExcludeNodes** __node__,__node__,__...__::
A list of identity fingerprints, nicknames, country codes and address
patterns of nodes to avoid when building a circuit.
(Example:
@@ -657,17 +715,29 @@ The following options are useful only for clients (that is, if
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
- can tell Tor to build circuits through any node.
+ can tell Tor to build circuits through any node. +
+ +
+ Country codes are case-insensitive. The code "\{??}" refers to nodes whose
+ country can't be identified. No country code, including \{??}, works if
+ no GeoIPFile can be loaded. See also the GeoIPExcludeUnknown option below.
-**ExcludeExitNodes** __node__,__node__,__...__::
+[[ExcludeExitNodes]] **ExcludeExitNodes** __node__,__node__,__...__::
A list of identity fingerprints, nicknames, country codes and address
patterns of nodes to never use when picking an exit node---that is, a
node that delivers traffic for you outside the Tor network. Note that any
node listed in ExcludeNodes is automatically considered to be part of this
list too. See also the caveats on the "ExitNodes" option below.
-**ExitNodes** __node__,__node__,__...__::
+[[GeoIPExcludeUnknown]] **GeoIPExcludeUnknown** **0**|**1**|**auto**::
+ If this option is set to 'auto', then whenever any country code is set in
+ ExcludeNodes or ExcludeExitNodes, all nodes with unknown country (\{??} and
+ possibly \{A1}) are treated as excluded as well. If this option is set to
+ '1', then all unknown countries are treated as excluded in ExcludeNodes
+ and ExcludeExitNodes. This option has no effect when a GeoIP file isn't
+ configured or can't be found. (Default: auto)
+
+[[ExitNodes]] **ExitNodes** __node__,__node__,__...__::
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. +
@@ -690,7 +760,7 @@ The following options are useful only for clients (that is, if
The .exit address notation, if enabled via AllowDotExit, overrides
this option.
-**EntryNodes** __node__,__node__,__...__::
+[[EntryNodes]] **EntryNodes** __node__,__node__,__...__::
A list of identity fingerprints, nicknames, and country codes of nodes
to use for the first hop in your normal circuits.
Normal circuits include all
@@ -701,7 +771,7 @@ The following options are useful only for clients (that is, if
The ExcludeNodes option overrides this option: any node listed in both
EntryNodes and ExcludeNodes is treated as excluded.
-**StrictNodes** **0**|**1**::
+[[StrictNodes]] **StrictNodes** **0**|**1**::
If StrictNodes is set to 1, Tor will treat the ExcludeNodes option as a
requirement to follow for all the circuits you generate, even if doing so
will break functionality for you. If StrictNodes is set to 0, Tor will
@@ -713,7 +783,7 @@ The following options are useful only for clients (that is, if
request, upload directory information, or download directory information.
(Default: 0)
-**FascistFirewall** **0**|**1**::
+[[FascistFirewall]] **FascistFirewall** **0**|**1**::
If 1, Tor will only create outgoing connections to ORs running on ports
that your firewall allows (defaults to 80 and 443; see **FirewallPorts**).
This will allow you to run Tor as a client behind a firewall with
@@ -721,12 +791,12 @@ The following options are useful only for clients (that is, if
a firewall. If you prefer more fine-grained control, use
ReachableAddresses instead.
-**FirewallPorts** __PORTS__::
+[[FirewallPorts]] **FirewallPorts** __PORTS__::
A list of ports that your firewall allows you to connect to. Only used when
**FascistFirewall** is set. This option is deprecated; use ReachableAddresses
instead. (Default: 80, 443)
-**ReachableAddresses** __ADDR__[/__MASK__][:__PORT__]...::
+[[ReachableAddresses]] **ReachableAddresses** __ADDR__[/__MASK__][:__PORT__]...::
A comma-separated list of IP addresses and ports that your firewall allows
you to connect to. The format is as for the addresses in ExitPolicy, except
that "accept" is understood unless "reject" is explicitly provided. For
@@ -735,14 +805,14 @@ The following options are useful only for clients (that is, if
99, rejects port 80 connections to net 18, and accepts connections to port
80 otherwise. (Default: \'accept \*:*'.)
-**ReachableDirAddresses** __ADDR__[/__MASK__][:__PORT__]...::
+[[ReachableDirAddresses]] **ReachableDirAddresses** __ADDR__[/__MASK__][:__PORT__]...::
Like **ReachableAddresses**, a list of addresses and ports. Tor will obey
these restrictions when fetching directory information, using standard HTTP
GET requests. If not set explicitly then the value of
**ReachableAddresses** is used. If **HTTPProxy** is set then these
connections will go through that proxy.
-**ReachableORAddresses** __ADDR__[/__MASK__][:__PORT__]...::
+[[ReachableORAddresses]] **ReachableORAddresses** __ADDR__[/__MASK__][:__PORT__]...::
Like **ReachableAddresses**, a list of addresses and ports. Tor will obey
these restrictions when connecting to Onion Routers, using TLS/SSL. If not
set explicitly then the value of **ReachableAddresses** is used. If
@@ -755,7 +825,7 @@ The following options are useful only for clients (that is, if
and some limit HTTP GET requests (which Tor uses for fetching directory
information) to port 80.
-**HidServAuth** __onion-address__ __auth-cookie__ [__service-name__]::
+[[HidServAuth]] **HidServAuth** __onion-address__ __auth-cookie__ [__service-name__]::
Client authorization for a hidden service. Valid onion addresses contain 16
characters in a-z2-7 plus ".onion", and valid auth cookies contain 22
characters in A-Za-z0-9+/. The service name is only used for internal
@@ -765,7 +835,7 @@ The following options are useful only for clients (that is, if
services can be configured to require authorization using the
**HiddenServiceAuthorizeClient** option.
-**CloseHSClientCircuitsImmediatelyOnTimeout** **0**|**1**::
+[[CloseHSClientCircuitsImmediatelyOnTimeout]] **CloseHSClientCircuitsImmediatelyOnTimeout** **0**|**1**::
If 1, Tor will close unfinished hidden service client circuits
which have not moved closer to connecting to their destination
hidden service when their internal state has not changed for the
@@ -775,7 +845,7 @@ The following options are useful only for clients (that is, if
another set of introduction and rendezvous circuits for the same
destination hidden service will be launched. (Default: 0)
-**CloseHSServiceRendCircuitsImmediatelyOnTimeout** **0**|**1**::
+[[CloseHSServiceRendCircuitsImmediatelyOnTimeout]] **CloseHSServiceRendCircuitsImmediatelyOnTimeout** **0**|**1**::
If 1, Tor will close unfinished hidden-service-side rendezvous
circuits after the current circuit-build timeout. Otherwise, such
circuits will be left open, in the hope that they will finish
@@ -783,7 +853,7 @@ The following options are useful only for clients (that is, if
rendezvous circuit for the same destination client will be
launched. (Default: 0)
-**LongLivedPorts** __PORTS__::
+[[LongLivedPorts]] **LongLivedPorts** __PORTS__::
A list of ports for services that tend to have long-running connections
(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
@@ -792,7 +862,7 @@ The following options are useful only for clients (that is, if
services whose virtual port is in this list. (Default: 21, 22, 706,
1863, 5050, 5190, 5222, 5223, 6523, 6667, 6697, 8300)
-**MapAddress** __address__ __newaddress__::
+[[MapAddress]] **MapAddress** __address__ __newaddress__::
When a request for address arrives to Tor, it will transform to newaddress
before processing it. For example, if you always want connections to
www.example.com to exit via __torserver__ (where __torserver__ is the
@@ -832,22 +902,22 @@ The following options are useful only for clients (that is, if
4. Using a wildcard to match only part of a string (as in *ample.com) is
also invalid.
-**NewCircuitPeriod** __NUM__::
+[[NewCircuitPeriod]] **NewCircuitPeriod** __NUM__::
Every NUM seconds consider whether to build a new circuit. (Default: 30
seconds)
-**MaxCircuitDirtiness** __NUM__::
+[[MaxCircuitDirtiness]] **MaxCircuitDirtiness** __NUM__::
Feel free to reuse a circuit that was first used at most NUM seconds ago,
but never attach a new stream to a circuit that is too old. For hidden
services, this applies to the __last__ time a circuit was used, not the
first. (Default: 10 minutes)
-**MaxClientCircuitsPending** __NUM__::
+[[MaxClientCircuitsPending]] **MaxClientCircuitsPending** __NUM__::
Do not allow more than NUM circuits to be pending at a time for handling
client streams. A circuit is pending if we have begun constructing it,
but it has not yet been completely constructed. (Default: 32)
-**NodeFamily** __node__,__node__,__...__::
+[[NodeFamily]] **NodeFamily** __node__,__node__,__...__::
The Tor servers, defined by their identity fingerprints or nicknames,
constitute a "family" of similar or co-administered servers, so never use
any two of them in the same circuit. Defining a NodeFamily is only needed
@@ -855,12 +925,12 @@ The following options are useful only for clients (that is, if
can be used multiple times. In addition to nodes, you can also list
IP address and ranges and country codes in {curly braces}.
-**EnforceDistinctSubnets** **0**|**1**::
+[[EnforceDistinctSubnets]] **EnforceDistinctSubnets** **0**|**1**::
If 1, Tor will not put two servers whose IP addresses are "too close" on
the same circuit. Currently, two addresses are "too close" if they lie in
the same /16 range. (Default: 1)
-**SOCKSPort** \['address':]__port__|**auto** [_isolation flags_]::
+[[SOCKSPort]] **SOCKSPort** \['address':]__port__|**auto** [_flags_] [_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
@@ -895,7 +965,62 @@ The following options are useful only for clients (that is, if
on different SOCKSPorts, TransPorts, etc are always isolated from one
another. This option overrides that behavior.)
-**SOCKSListenAddress** __IP__[:__PORT__]::
+[[OtherSOCKSPortFlags]]::
+ Other recognized __flags__ for a SOCKSPort are:
+ **NoIPv4Traffic**;;
+ Tell exits to not connect to IPv4 addresses in response to SOCKS
+ requests on this connection.
+ **IPv6Traffic**;;
+ Tell exits to allow IPv6 addresses in response to SOCKS requests on
+ this connection, so long as SOCKS5 is in use. (SOCKS4 can't handle
+ IPv6.)
+ **PreferIPv6**;;
+ Tells exits that, if a host has both an IPv4 and an IPv6 address,
+ we would prefer to connect to it via IPv6. (IPv4 is the default.) +
+ +
+ NOTE: Although this option allows you to specify an IP address
+ other than localhost, you should do so only with extreme caution.
+ The SOCKS protocol is unencrypted and (as we use it)
+ unauthenticated, so exposing it in this way could leak your
+ information to anybody watching your network, and allow anybody
+ to use your computer as an open proxy. +
+ +
+ **CacheIPv4DNS**;;
+ Tells the client to remember IPv4 DNS answers we receive from exit
+ nodes via this connection. (On by default.)
+ **CacheIPv6DNS**;;
+ Tells the client to remember IPv6 DNS answers we receive from exit
+ nodes via this connection.
+ **CacheDNS**;;
+ Tells the client to remember all DNS answers we receive from exit
+ nodes via this connection.
+ **UseIPv4Cache**;;
+ Tells the client to use any cached IPv4 DNS answers we have when making
+ requests via this connection. (NOTE: This option, along UseIPv6Cache
+ and UseDNSCache, can harm your anonymity, and probably
+ won't help performance as much as you might expect. Use with care!)
+ **UseIPv6Cache**;;
+ Tells the client to use any cached IPv6 DNS answers we have when making
+ requests via this connection.
+ **UseDNSCache**;;
+ Tells the client to use any cached DNS answers we have when making
+ requests via this connection.
+ **PreferIPv6Automap**;;
+ When serving a hostname lookup request on this port that
+ should get automapped (according to AutomapHostsOnResove),
+ if we could return either an IPv4 or an IPv6 answer, prefer
+ an IPv6 answer. (On by default.)
+ **PreferSOCKSNoAuth**;;
+ Ordinarily, when an application offers both "username/password
+ authentication" and "no authentication" to Tor via SOCKS5, Tor
+ selects username/password authentication so that IsolateSOCKSAuth can
+ work. This can confuse some applications, if they offer a
+ username/password combination then get confused when asked for
+ one. You can disable this behavior, so that Tor will select "No
+ authentication" when IsolateSOCKSAuth is disabled, or when this
+ option is set.
+
+[[SOCKSListenAddress]] **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
@@ -905,24 +1030,25 @@ The following options are useful only for clients (that is, if
compatibility, SOCKSListenAddress is only allowed when SOCKSPort is just
a port number.)
-**SocksPolicy** __policy__,__policy__,__...__::
+[[SocksPolicy]] **SocksPolicy** __policy__,__policy__,__...__::
Set an entrance policy for this server, to limit who can connect to the
SocksPort and DNSPort ports. The policies have the same form as exit
- policies below.
+ policies below, except that port specifiers are ignored. Any address
+ not matched by some entry in the policy is accepted.
-**SocksTimeout** __NUM__::
+[[SocksTimeout]] **SocksTimeout** __NUM__::
Let a socks connection wait NUM seconds handshaking, and NUM seconds
unattached waiting for an appropriate circuit, before we fail it. (Default:
2 minutes)
-**TokenBucketRefillInterval** __NUM__ [**msec**|**second**]::
+[[TokenBucketRefillInterval]] **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__,__...__::
+[[TrackHostExits]] **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
exit node for each. If the value is prepended with a \'.\', it is treated as
@@ -934,86 +1060,112 @@ The following options are useful only for clients (that is, if
user. However, most people who would wish to observe this will observe it
through cookies or other protocol-specific means anyhow.
-**TrackHostExitsExpire** __NUM__::
+[[TrackHostExitsExpire]] **TrackHostExitsExpire** __NUM__::
Since exit servers go up and down, it is desirable to expire the
association between host and exit server after NUM seconds. The default is
1800 seconds (30 minutes).
-**UpdateBridgesFromAuthority** **0**|**1**::
+[[UpdateBridgesFromAuthority]] **UpdateBridgesFromAuthority** **0**|**1**::
When set (along with UseBridges), Tor will try to fetch bridge descriptors
from the configured bridge authorities when feasible. It will fall back to
a direct request if the authority responds with a 404. (Default: 0)
-**UseBridges** **0**|**1**::
+[[UseBridges]] **UseBridges** **0**|**1**::
When set, Tor will fetch descriptors for each bridge listed in the "Bridge"
config lines, and use these relays as both entry guards and directory
guards. (Default: 0)
-**UseEntryGuards** **0**|**1**::
+[[UseEntryGuards]] **UseEntryGuards** **0**|**1**::
If this option is set to 1, we pick a few long-term entry servers, and try
to stick with them. This is desirable because constantly changing servers
increases the odds that an adversary who owns some servers will observe a
fraction of your paths. (Default: 1)
-**NumEntryGuards** __NUM__::
+[[UseEntryGuardsAsDirGuards]] **UseEntryGuardsAsDirGuards** **0**|**1**::
+ If this option is set to 1, and UseEntryGuards is also set to 1,
+ we try to use our entry guards as directory
+ guards, and failing that, pick more nodes to act as our directory guards.
+ This helps prevent an adversary from enumerating clients. It's only
+ available for clients (non-relay, non-bridge) that aren't configured to
+ download any non-default directory material. It doesn't currently
+ do anything when we lack a live consensus. (Default: 1)
+
+[[NumEntryGuards]] **NumEntryGuards** __NUM__::
If UseEntryGuards is set to 1, we will try to pick a total of NUM routers
as long-term entries for our circuits. (Default: 3)
-**SafeSocks** **0**|**1**::
+[[NumDirectoryGuards]] **NumDirectoryGuards** __NUM__::
+ If UseEntryGuardsAsDirectoryGuards is enabled, we try to make sure we
+ have at least NUM routers to use as directory guards. If this option
+ is set to 0, use the value from NumEntryGuards. (Default: 0)
+
+[[GuardLifetime]] **GuardLifetime** __N__ **days**|**weeks**|**months**::
+ If nonzero, and UseEntryGuards is set, minimum time to keep a guard before
+ picking a new one. If zero, we use the GuardLifetime parameter from the
+ consensus directory. No value here may be less than 1 month or greater
+ than 5 years; out-of-range values are clamped. (Default: 0)
+
+[[SafeSocks]] **SafeSocks** **0**|**1**::
When this option is enabled, Tor will reject application connections that
use unsafe variants of the socks protocol -- ones that only provide an IP
address, meaning the application is doing a DNS resolve first.
Specifically, these are socks4 and socks5 when not doing remote DNS.
(Default: 0)
-**TestSocks** **0**|**1**::
+[[TestSocks]] **TestSocks** **0**|**1**::
When this option is enabled, Tor will make a notice-level log entry for
each connection to the Socks port indicating whether the request used a
safe socks protocol or an unsafe one (see above entry on SafeSocks). This
helps to determine whether an application using Tor is possibly leaking
DNS requests. (Default: 0)
-**WarnUnsafeSocks** **0**|**1**::
+[[WarnUnsafeSocks]] **WarnUnsafeSocks** **0**|**1**::
When this option is enabled, Tor will warn whenever a request is
received that only contains an IP address instead of a hostname. Allowing
applications to do DNS resolves themselves is usually a bad idea and
can leak your location to attackers. (Default: 1)
-**VirtualAddrNetwork** __Address__/__bits__::
+[[VirtualAddrNetworkIPv4]] **VirtualAddrNetworkIPv4** __Address__/__bits__ +
+
+[[VirtualAddrNetworkIPv6]] **VirtualAddrNetworkIPv6** [__Address__]/__bits__::
When Tor needs to assign a virtual (unused) address because of a MAPADDRESS
command from the controller or the AutomapHostsOnResolve feature, Tor
- picks an unassigned address from this range. (Default:
- 127.192.0.0/10) +
+ picks an unassigned address from this range. (Defaults:
+ 127.192.0.0/10 and [FE80::]/10 respectively.) +
+
When providing proxy server service to a network of computers using a tool
- like dns-proxy-tor, change this address to "10.192.0.0/10" or
- "172.16.0.0/12". The default **VirtualAddrNetwork** address range on a
- properly configured machine will route to the loopback interface. For
+ like dns-proxy-tor, change the IPv4 network to "10.192.0.0/10" or
+ "172.16.0.0/12" and change the IPv6 network to "[FC00]/7".
+ The default **VirtualAddrNetwork** address ranges on a
+ properly configured machine will route to the loopback or link-local
+ interface. For
local use, no change to the default VirtualAddrNetwork setting is needed.
-**AllowNonRFC953Hostnames** **0**|**1**::
+[[AllowNonRFC953Hostnames]] **AllowNonRFC953Hostnames** **0**|**1**::
When this option is disabled, Tor blocks hostnames containing illegal
characters (like @ and :) rather than sending them to an exit node to be
resolved. This helps trap accidental attempts to resolve URLs and so on.
(Default: 0)
-**AllowDotExit** **0**|**1**::
+[[AllowDotExit]] **AllowDotExit** **0**|**1**::
If enabled, we convert "www.google.com.foo.exit" addresses on the
SocksPort/TransPort/NATDPort into "www.google.com" addresses that exit from
the node "foo". Disabled by default since attacking websites and exit
relays can use it to manipulate your path selection. (Default: 0)
-**FastFirstHopPK** **0**|**1**::
+[[FastFirstHopPK]] **FastFirstHopPK** **0**|**1**|**auto**::
When this option is disabled, Tor uses the public key step for the first
hop of creating circuits. Skipping it is generally safe since we have
already used TLS to authenticate the relay and to establish forward-secure
- keys. Turning this option off makes circuit building slower. +
+ keys. Turning this option off makes circuit building a little
+ slower. Setting this option to "auto" takes advice from the authorities
+ in the latest consensus about whether to use this feature. +
+
Note that Tor will always use the public key step for the first hop if it's
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)
+ doesn't yet know the onion key of the first hop. (Default: auto)
-**TransPort** \['address':]__port__|**auto** [_isolation flags_]::
+[[TransPort]] **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
@@ -1026,7 +1178,7 @@ The following options are useful only for clients (that is, if
default setting. You'll also want to set the TransListenAddress option for
the network you'd like to proxy. (Default: 0)
-**TransListenAddress** __IP__[:__PORT__]::
+[[TransListenAddress]] **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. (DEPRECATED: As of 0.2.3.x-alpha, you can
@@ -1035,7 +1187,33 @@ The following options are useful only for clients (that is, if
compatibility, TransListenAddress is only allowed when TransPort is just
a port number.)
-**NATDPort** \['address':]__port__|**auto** [_isolation flags_]::
+[[TransProxyType]] **TransProxyType** **default**|**TPROXY**|**ipfw**|**pf-divert**::
+ TransProxyType may only be enabled when there is transparent proxy listener
+ enabled.
+ +
+ Set this to "TPROXY" if you wish to be able to use the TPROXY Linux module
+ to transparently proxy connections that are configured using the TransPort
+ option. This setting lets the listener on the TransPort accept connections
+ for all addresses, even when the TransListenAddress is configured for an
+ internal address. Detailed information on how to configure the TPROXY
+ feature can be found in the Linux kernel source tree in the file
+ Documentation/networking/tproxy.txt.
+ +
+ Set this option to "ipfw" to use the FreeBSD ipfw interface.
+ +
+ On *BSD operating systems when using pf, set this to "pf-divert" to take
+ advantage of +divert-to+ rules, which do not modify the packets like
+ +rdr-to+ rules do. Detailed information on how to configure pf to use
+ +divert-to+ rules can be found in the pf.conf(5) manual page. On OpenBSD,
+ +divert-to+ is available to use on versions greater than or equal to
+ OpenBSD 4.4.
+ +
+ Set this to "default", or leave it unconfigured, to use regular IPTables
+ on Linux, or to use pf +rdr-to+ rules on *BSD systems.
+ +
+ (Default: "default".)
+
+[[NATDPort]] **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
@@ -1045,78 +1223,74 @@ The following options are useful only for clients (that is, if
+
This option is only for people who cannot use TransPort. (Default: 0)
-**NATDListenAddress** __IP__[:__PORT__]::
+[[NATDListenAddress]] **NATDListenAddress** __IP__[:__PORT__]::
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**::
+[[AutomapHostsOnResolve]] **AutomapHostsOnResolve** **0**|**1**::
When this option is enabled, and we get a request to resolve an address
that ends with one of the suffixes in **AutomapHostsSuffixes**, we map an
unused virtual address to that address, and return the new virtual address.
This is handy for making ".onion" addresses work with applications that
resolve an address and then connect to it. (Default: 0)
-**AutomapHostsSuffixes** __SUFFIX__,__SUFFIX__,__...__::
+[[AutomapHostsSuffixes]] **AutomapHostsSuffixes** __SUFFIX__,__SUFFIX__,__...__::
A comma-separated list of suffixes to use with **AutomapHostsOnResolve**.
The "." suffix is equivalent to "all addresses." (Default: .exit,.onion).
-**DNSPort** \['address':]__port__|**auto** [_isolation flags_]::
+[[DNSPort]] **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
+ them anonymously. This port only handles A, AAAA, and PTR requests---it
+ doesn't handle arbitrary DNS request types. 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__]::
+[[DNSListenAddress]] **DNSListenAddress** __IP__[:__PORT__]::
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**::
+[[ClientDNSRejectInternalAddresses]] **ClientDNSRejectInternalAddresses** **0**|**1**::
If true, Tor does not believe any anonymously retrieved DNS answer that
tells it that an address resolves to an internal address (like 127.0.0.1 or
192.168.0.1). This option prevents certain browser-based attacks; don't
turn it off unless you know what you're doing. (Default: 1)
-**ClientRejectInternalAddresses** **0**|**1**::
+[[ClientRejectInternalAddresses]] **ClientRejectInternalAddresses** **0**|**1**::
If true, Tor does not try to fulfill requests to connect to an internal
address (like 127.0.0.1 or 192.168.0.1) __unless a exit node is
specifically requested__ (for example, via a .exit hostname, or a
controller request). (Default: 1)
-**DownloadExtraInfo** **0**|**1**::
+[[DownloadExtraInfo]] **DownloadExtraInfo** **0**|**1**::
If true, Tor downloads and caches "extra-info" documents. These documents
contain information about servers other than the information in their
regular router descriptors. Tor does not use this information for anything
itself; to save bandwidth, leave this option turned off. (Default: 0)
-**FallbackNetworkstatusFile** __FILENAME__::
- If Tor doesn't have a cached networkstatus file, it starts out using this
- one instead. Even if this file is out of date, Tor can still use it to
- learn about directory mirrors, so it doesn't need to put load on the
- authorities. (Default: None)
-
-**WarnPlaintextPorts** __port__,__port__,__...__::
+[[WarnPlaintextPorts]] **WarnPlaintextPorts** __port__,__port__,__...__::
Tells Tor to issue a warnings whenever the user tries to make an anonymous
connection to one of these ports. This option is designed to alert users
to services that risk sending passwords in the clear. (Default:
23,109,110,143)
-**RejectPlaintextPorts** __port__,__port__,__...__::
+[[RejectPlaintextPorts]] **RejectPlaintextPorts** __port__,__port__,__...__::
Like WarnPlaintextPorts, but instead of warning about risky port uses, Tor
will instead refuse to make the connection. (Default: None)
-**AllowSingleHopCircuits** **0**|**1**::
+[[AllowSingleHopCircuits]] **AllowSingleHopCircuits** **0**|**1**::
When this option is set, the attached Tor controller can use relays
that have the **AllowSingleHopExits** option turned on to build
one-hop Tor connections. (Default: 0)
-**OptimisticData** **0**|**1**|**auto**::
+[[OptimisticData]] **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
@@ -1125,7 +1299,7 @@ The following options are useful only for clients (that is, if
Tor will look at the UseOptimisticData parameter in the networkstatus.
(Default: auto)
-**Tor2webMode** **0**|**1**::
+[[Tor2webMode]] **Tor2webMode** **0**|**1**::
When this option is set, Tor connects to hidden services
**non-anonymously**. This option also disables client connections to
non-hidden-service hostnames through Tor. It **must only** be used when
@@ -1133,7 +1307,7 @@ The following options are useful only for clients (that is, if
To enable this option the compile time flag --enable-tor2webmode must be
specified. (Default: 0)
-**UseMicrodescriptors** **0**|**1**|**auto**::
+[[UseMicrodescriptors]] **UseMicrodescriptors** **0**|**1**|**auto**::
Microdescriptors are a smaller version of the information that Tor needs
in order to build its circuits. Using microdescriptors makes Tor clients
download less directory information, thus saving bandwidth. Directory
@@ -1142,32 +1316,102 @@ The following options are useful only for clients (that is, if
"auto" (recommended) then it is on for all clients that do not set
FetchUselessDescriptors. (Default: auto)
-**PathBiasCircThreshold** __NUM__ +
+[[UseNTorHandshake]] **UseNTorHandshake** **0**|**1**|**auto**::
+ The "ntor" circuit-creation handshake is faster and (we think) more
+ secure than the original ("TAP") circuit handshake, but starting to use
+ it too early might make your client stand out. If this option is 0, your
+ Tor client won't use the ntor handshake. If it's 1, your Tor client
+ will use the ntor handshake to extend circuits through servers that
+ support it. If this option is "auto", then your client
+ will use the ntor handshake once enough directory authorities recommend
+ it. (Default: 1)
+
+[[PathBiasCircThreshold]] **PathBiasCircThreshold** __NUM__ +
+
+[[PathBiasNoticeRate]] **PathBiasNoticeRate** __NUM__ +
-**PathBiasNoticeRate** __NUM__ +
+[[PathBiasWarnRate]] **PathBiasWarnRate** __NUM__ +
-**PathBiasDisableRate** __NUM__ +
+[[PathBiasExtremeRate]] **PathBiasExtremeRate** __NUM__ +
-**PathBiasScaleThreshold** __NUM__ +
+[[PathBiasDropGuards]] **PathBiasDropGuards** __NUM__ +
-**PathBiasScaleFactor** __NUM__::
+[[PathBiasScaleThreshold]] **PathBiasScaleThreshold** __NUM__::
These options override the default behavior of Tor's (**currently
experimental**) path bias detection algorithm. To try to find broken or
misbehaving guard nodes, Tor looks for nodes where more than a certain
- fraction of circuits through that node fail after the first hop. The
- PathBiasCircThreshold option controls how many circuits we need to build
- through a guard before we make these checks. The PathBiasNoticeRate and
- PathBiasDisableRate options control what fraction of circuits must
- succeed through a guard so we won't warn about it or disable it,
- respectively. When we have seen more than PathBiasScaleThreshold
- circuits through a guard, we divide our observations by
- PathBiasScaleFactor, so that new observations don't get swamped by old
- ones. +
+ fraction of circuits through that guard fail to get built.
+ +
+ The PathBiasCircThreshold option controls how many circuits we need to build
+ through a guard before we make these checks. The PathBiasNoticeRate,
+ PathBiasWarnRate and PathBiasExtremeRate options control what fraction of
+ circuits must succeed through a guard so we won't write log messages.
+ If less than PathBiasExtremeRate circuits succeed *and* PathBiasDropGuards
+ is set to 1, we disable use of that guard. +
+ +
+ When we have seen more than PathBiasScaleThreshold
+ circuits through a guard, we scale our observations by 0.5 (governed by
+ the consensus) so that new observations don't get swamped by old ones. +
+
By default, or if a negative value is provided for one of these options,
Tor uses reasonable defaults from the networkstatus consensus document.
- If no defaults are available there, these options default to 20, .70,
- 0.0, 200, and 4 respectively.
+ If no defaults are available there, these options default to 150, .70,
+ .50, .30, 0, and 300 respectively.
+
+[[PathBiasUseThreshold]] **PathBiasUseThreshold** __NUM__ +
+
+[[PathBiasNoticeUseRate]] **PathBiasNoticeUseRate** __NUM__ +
+
+[[PathBiasExtremeUseRate]] **PathBiasExtremeUseRate** __NUM__ +
+
+[[PathBiasScaleUseThreshold]] **PathBiasScaleUseThreshold** __NUM__::
+ Similar to the above options, these options override the default behavior
+ of Tor's (**currently experimental**) path use bias detection algorithm.
+ +
+ Where as the path bias parameters govern thresholds for successfully
+ building circuits, these four path use bias parameters govern thresholds
+ only for circuit usage. Circuits which receive no stream usage
+ are not counted by this detection algorithm. A used circuit is considered
+ successful if it is capable of carrying streams or otherwise receiving
+ well-formed responses to RELAY cells.
+ +
+ By default, or if a negative value is provided for one of these options,
+ Tor uses reasonable defaults from the networkstatus consensus document.
+ If no defaults are available there, these options default to 20, .80,
+ .60, and 100, respectively.
+
+[[ClientUseIPv6]] **ClientUseIPv6** **0**|**1**::
+ If this option is set to 1, Tor might connect to entry nodes over
+ IPv6. Note that clients configured with an IPv6 address in a
+ **Bridge** line will try connecting over IPv6 even if
+ **ClientUseIPv6** is set to 0. (Default: 0)
+
+[[ClientPreferIPv6ORPort]] **ClientPreferIPv6ORPort** **0**|**1**::
+ If this option is set to 1, Tor prefers an OR port with an IPv6
+ address over one with IPv4 if a given entry node has both. Other
+ things may influence the choice. This option breaks a tie to the
+ favor of IPv6. (Default: 0)
+
+[[PathsNeededToBuildCircuits]] **PathsNeededToBuildCircuits** __NUM__::
+ Tor clients don't build circuits for user traffic until they know
+ about enough of the network so that they could potentially construct
+ enough of the possible paths through the network. If this option
+ is set to a fraction between 0.25 and 0.95, Tor won't build circuits
+ until it has enough descriptors or microdescriptors to construct
+ that fraction of possible paths. Note that setting this option too low
+ can make your Tor client less anonymous, and setting it too high can
+ prevent your Tor client from bootstrapping. If this option is negative,
+ Tor will use a default value chosen by the directory
+ authorities. (Default: -1.)
+
+[[Support022HiddenServices]] **Support022HiddenServices** **0**|**1**|**auto**::
+ Tor hidden services running versions before 0.2.3.x required clients to
+ send timestamps, which can potentially be used to distinguish clients
+ whose view of the current time is skewed. If this option is set to 0, we
+ do not send this timestamp, and hidden services on obsolete Tor versions
+ will not work. If this option is set to 1, we send the timestamp. If
+ this optoin is "auto", we take a recommendation from the latest consensus
+ document. (Default: auto)
SERVER OPTIONS
@@ -1176,7 +1420,7 @@ SERVER OPTIONS
The following options are useful only for servers (that is, if ORPort
is non-zero):
-**Address** __address__::
+[[Address]] **Address** __address__::
The IP address or fully qualified domain name of this server (e.g.
moria.mit.edu). You can leave this unset, and Tor will guess your IP
address. This IP address is the one used to tell clients and other
@@ -1184,32 +1428,36 @@ is non-zero):
Tor client binds to. To bind to a different address, use the
*ListenAddress and OutboundBindAddress options.
-**AllowSingleHopExits** **0**|**1**::
+[[AllowSingleHopExits]] **AllowSingleHopExits** **0**|**1**::
This option controls whether clients can use this server as a single hop
proxy. If set to 1, clients can use this server as an exit even if it is
the only hop in the circuit. Note that most clients will refuse to use
servers that set this option, since most clients have
ExcludeSingleHopRelays set. (Default: 0)
-**AssumeReachable** **0**|**1**::
+[[AssumeReachable]] **AssumeReachable** **0**|**1**::
This option is used when bootstrapping a new Tor network. If set to 1,
don't do self-reachability testing; just upload your server descriptor
immediately. If **AuthoritativeDirectory** is also set, this option
instructs the dirserver to bypass remote reachability testing too and list
all connected servers as running.
-**BridgeRelay** **0**|**1**::
+[[BridgeRelay]] **BridgeRelay** **0**|**1**::
Sets the relay to act as a "bridge" with respect to relaying connections
from bridge users to the Tor network. It mainly causes Tor to publish a
server descriptor to the bridge database, rather than publishing a relay
descriptor to the public directory authorities.
-**ContactInfo** __email_address__::
- Administrative contact information for server. This line might get picked
- up by spam harvesters, so you may want to obscure the fact that it's an
- email address.
+[[ContactInfo]] **ContactInfo** __email_address__::
+ Administrative contact information for this relay or bridge. This line
+ can be used to contact you if your relay or bridge is misconfigured or
+ something else goes wrong. Note that we archive and publish all
+ descriptors containing these lines and that Google indexes them, so
+ spammers might also collect them. You may want to obscure the fact
+ that it's an email address and/or generate a new address for this
+ purpose.
-**ExitPolicy** __policy__,__policy__,__...__::
+[[ExitPolicy]] **ExitPolicy** __policy__,__policy__,__...__::
Set an exit policy for this server. Each policy is of the form
"**accept**|**reject** __ADDR__[/__MASK__][:__PORT__]". If /__MASK__ is
omitted then this policy just applies to the host given. Instead of giving
@@ -1254,16 +1502,20 @@ is non-zero):
reject *:6881-6999
accept *:*
-**ExitPolicyRejectPrivate** **0**|**1**::
+[[ExitPolicyRejectPrivate]] **ExitPolicyRejectPrivate** **0**|**1**::
Reject all private (local) networks, along with your own public IP address,
at the beginning of your exit policy. See above entry on ExitPolicy.
(Default: 1)
-**MaxOnionsPending** __NUM__::
- If you have more than this number of onionskins queued for decrypt, reject
- new ones. (Default: 100)
+[[IPv6Exit]] **IPv6Exit** **0**|**1**::
+ If set, and we are an exit node, allow clients to use us for IPv6
+ traffic. (Default: 0)
+
+[[MaxOnionQueueDelay]] **MaxOnionQueueDelay** __NUM__ [**msec**|**second**]::
+ If we have more onionskins queued for processing than we can process in
+ this amount of time, reject new ones. (Default: 1750 msec)
-**MyFamily** __node__,__node__,__...__::
+[[MyFamily]] **MyFamily** __node__,__node__,__...__::
Declare that this Tor server is controlled or administered by a group or
organization identical or similar to that of the other servers, defined by
their identity fingerprints or nicknames. When two servers both declare
@@ -1271,17 +1523,20 @@ is non-zero):
same circuit. (Each server only needs to list the other servers in its
family; it doesn't need to list itself, but it won't hurt.) Do not list
any bridge relay as it would compromise its concealment.
+ +
+ When listing a node, it's better to list it by fingerprint than by
+ nickname: fingerprints are more reliable.
-**Nickname** __name__::
+[[Nickname]] **Nickname** __name__::
Set the server's nickname to \'name'. Nicknames must be between 1 and 19
characters inclusive, and must contain only the characters [a-zA-Z0-9].
-**NumCPUs** __num__::
+[[NumCPUs]] **NumCPUs** __num__::
How many processes to use at once for decrypting onionskins and other
parallelizable operations. If this is set to 0, Tor will try to detect
how many CPUs you have, defaulting to 1 if it can't tell. (Default: 0)
-**ORPort** \['address':]__PORT__|**auto** [_flags_]::
+[[ORPort]] **ORPort** \['address':]__PORT__|**auto** [_flags_]::
Advertise this port to listen for connections from Tor clients and
servers. This option is required to be a Tor server.
Set it to "auto" to have Tor pick a port for you. Set it to 0 to not
@@ -1308,7 +1563,7 @@ is non-zero):
For obvious reasons, NoAdvertise and NoListen are mutually exclusive, and
IPv4Only and IPv6Only are mutually exclusive.
-**ORListenAddress** __IP__[:__PORT__]::
+[[ORListenAddress]] **ORListenAddress** __IP__[:__PORT__]::
Bind to this IP address to listen for connections from Tor clients and
servers. If you specify a port, bind to this port rather than the one
specified in ORPort. (Default: 0.0.0.0) This directive can be specified
@@ -1317,19 +1572,19 @@ is non-zero):
This option is deprecated; you can get the same behavior with ORPort now
that it supports NoAdvertise and explicit addresses.
-**PortForwarding** **0**|**1**::
+[[PortForwarding]] **PortForwarding** **0**|**1**::
Attempt to automatically forward the DirPort and ORPort on a NAT router
connecting this Tor server to the Internet. If set, Tor will try both
NAT-PMP (common on Apple routers) and UPnP (common on routers from other
manufacturers). (Default: 0)
-**PortForwardingHelper** __filename__|__pathname__::
+[[PortForwardingHelper]] **PortForwardingHelper** __filename__|__pathname__::
If PortForwarding is set, use this executable to configure the forwarding.
If set to a filename, the system path will be searched for the executable.
If set to a path, only the specified path will be executed.
(Default: tor-fw-helper)
-**PublishServerDescriptor** **0**|**1**|**v1**|**v2**|**v3**|**bridge**,**...**::
+[[PublishServerDescriptor]] **PublishServerDescriptor** **0**|**1**|**v3**|**bridge**,**...**::
This option specifies which descriptors Tor will publish when acting as
a relay. You can
choose multiple arguments, separated by commas.
@@ -1342,26 +1597,31 @@ is non-zero):
which means "if running as a server, publish the
appropriate descriptors to the authorities".
-**ShutdownWaitLength** __NUM__::
+[[ShutdownWaitLength]] **ShutdownWaitLength** __NUM__::
When we get a SIGINT and we're a server, we begin shutting down:
we close listeners and start refusing new circuits. After **NUM**
- seconds, we exit. If we get a second SIGINT, we exit immedi-
- ately. (Default: 30 seconds)
+ seconds, we exit. If we get a second SIGINT, we exit immediately.
+ (Default: 30 seconds)
+
+[[SSLKeyLifetime]] **SSLKeyLifetime** __N__ **minutes**|**hours**|**days**|**weeks**::
+ When creating a link certificate for our outermost SSL handshake,
+ set its lifetime to this amount of time. If set to 0, Tor will choose
+ some reasonable random defaults. (Default: 0)
-**HeartbeatPeriod** __N__ **minutes**|**hours**|**days**|**weeks**::
+[[HeartbeatPeriod]] **HeartbeatPeriod** __N__ **minutes**|**hours**|**days**|**weeks**::
Log a heartbeat message every **HeartbeatPeriod** seconds. This is
- a log level __info__ message, designed to let you know your Tor
+ a log level __notice__ message, designed to let you know your Tor
server is still alive and doing useful things. Settings this
to 0 will disable the heartbeat. (Default: 6 hours)
-**AccountingMax** __N__ **bytes**|**KB**|**MB**|**GB**|**TB**::
+[[AccountingMax]] **AccountingMax** __N__ **bytes**|**KBytes**|**MBytes**|**GBytes**|**KBits**|**MBits**|**GBits**|**TBytes**::
Never send more than the specified number of bytes in a given accounting
period, or receive more than that number in the period. For example, with
- AccountingMax set to 1 GB, a server could send 900 MB and receive 800 MB
- and continue running. It will only hibernate once one of the two reaches 1
- GB. When the number of bytes gets low, Tor will stop accepting new
- connections and circuits. When the number of bytes
- is exhausted, Tor will hibernate until some
+ AccountingMax set to 1 GByte, a server could send 900 MBytes and
+ receive 800 MBytes and continue running. It will only hibernate once
+ one of the two reaches 1 GByte. When the number of bytes gets low,
+ Tor will stop accepting new connections and circuits. When the
+ number of bytes is exhausted, Tor will hibernate until some
time in the next accounting period. To prevent all servers from waking at
the same time, Tor will also wait until a random point in each period
before waking up. If you have bandwidth cost issues, enabling hibernation
@@ -1369,7 +1629,7 @@ is non-zero):
collection of fast servers that are up some of the time, which is more
useful than a set of slow servers that are always "available".
-**AccountingStart** **day**|**week**|**month** [__day__] __HH:MM__::
+[[AccountingStart]] **AccountingStart** **day**|**week**|**month** [__day__] __HH:MM__::
Specify how long accounting periods last. If **month** is given, each
accounting period runs from the time __HH:MM__ on the __dayth__ day of one
month to the same day and time of the next. (The day must be between 1 and
@@ -1380,60 +1640,61 @@ is non-zero):
the next day. All times are local, and given in 24-hour time. (Default:
"month 1 0:00")
-**RefuseUnknownExits** **0**|**1**|**auto**::
+[[RefuseUnknownExits]] **RefuseUnknownExits** **0**|**1**|**auto**::
Prevent nodes that don't appear in the consensus from exiting using this
relay. If the option is 1, we always block exit attempts from such
nodes; if it's 0, we never do, and if the option is "auto", then we do
- whatever the authorities suggest in the consensus. (Default: auto)
+ whatever the authorities suggest in the consensus (and block if the consensus
+ is quiet on the issue). (Default: auto)
-**ServerDNSResolvConfFile** __filename__::
+[[ServerDNSResolvConfFile]] **ServerDNSResolvConfFile** __filename__::
Overrides the default DNS configuration with the configuration in
__filename__. The file format is the same as the standard Unix
"**resolv.conf**" file (7). This option, like all other ServerDNS options,
only affects name lookups that your server does on behalf of clients.
(Defaults to use the system DNS configuration.)
-**ServerDNSAllowBrokenConfig** **0**|**1**::
+[[ServerDNSAllowBrokenConfig]] **ServerDNSAllowBrokenConfig** **0**|**1**::
If this option is false, Tor exits immediately if there are problems
parsing the system DNS configuration or connecting to nameservers.
Otherwise, Tor continues to periodically retry the system nameservers until
it eventually succeeds. (Default: 1)
-**ServerDNSSearchDomains** **0**|**1**::
+[[ServerDNSSearchDomains]] **ServerDNSSearchDomains** **0**|**1**::
If set to 1, then we will search for addresses in the local search domain.
For example, if this system is configured to believe it is in
"example.com", and a client tries to connect to "www", the client will be
connected to "www.example.com". This option only affects name lookups that
your server does on behalf of clients. (Default: 0)
-**ServerDNSDetectHijacking** **0**|**1**::
+[[ServerDNSDetectHijacking]] **ServerDNSDetectHijacking** **0**|**1**::
When this option is set to 1, we will test periodically to determine
whether our local nameservers have been configured to hijack failing DNS
requests (usually to an advertising site). If they are, we will attempt to
correct this. This option only affects name lookups that your server does
on behalf of clients. (Default: 1)
-**ServerDNSTestAddresses** __address__,__address__,__...__::
+[[ServerDNSTestAddresses]] **ServerDNSTestAddresses** __address__,__address__,__...__::
When we're detecting DNS hijacking, make sure that these __valid__ addresses
aren't getting redirected. If they are, then our DNS is completely useless,
and we'll reset our exit policy to "reject *:*". This option only affects
name lookups that your server does on behalf of clients. (Default:
"www.google.com, www.mit.edu, www.yahoo.com, www.slashdot.org")
-**ServerDNSAllowNonRFC953Hostnames** **0**|**1**::
+[[ServerDNSAllowNonRFC953Hostnames]] **ServerDNSAllowNonRFC953Hostnames** **0**|**1**::
When this option is disabled, Tor does not try to resolve hostnames
containing illegal characters (like @ and :) rather than sending them to an
exit node to be resolved. This helps trap accidental attempts to resolve
URLs and so on. This option only affects name lookups that your server does
on behalf of clients. (Default: 0)
-**BridgeRecordUsageByCountry** **0**|**1**::
+[[BridgeRecordUsageByCountry]] **BridgeRecordUsageByCountry** **0**|**1**::
When this option is enabled and BridgeRelay is also enabled, and we have
GeoIP data, Tor keeps a keep a per-country count of how many client
addresses have contacted it so that it can help the bridge authority guess
which countries have blocked access to it. (Default: 1)
-**ServerDNSRandomizeCase** **0**|**1**::
+[[ServerDNSRandomizeCase]] **ServerDNSRandomizeCase** **0**|**1**::
When this option is set, Tor sets the case of each character randomly in
outgoing DNS requests, and makes sure that the case matches in DNS replies.
This so-called "0x20 hack" helps resist some types of DNS poisoning attack.
@@ -1441,47 +1702,66 @@ is non-zero):
0x20-Bit Encoding". This option only affects name lookups that your server
does on behalf of clients. (Default: 1)
-**GeoIPFile** __filename__::
- A filename containing GeoIP data, for use with BridgeRecordUsageByCountry.
+[[GeoIPFile]] **GeoIPFile** __filename__::
+ A filename containing IPv4 GeoIP data, for use with by-country statistics.
+
+[[GeoIPv6File]] **GeoIPv6File** __filename__::
+ A filename containing IPv6 GeoIP data, for use with by-country statistics.
-**CellStatistics** **0**|**1**::
+[[TLSECGroup]] **TLSECGroup** **P224**|**P256**::
+ What EC group should we try to use for incoming TLS connections?
+ P224 is faster, but makes us stand out more. Has no effect if
+ we're a client, or if our OpenSSL version lacks support for ECDHE.
+ (Default: P256)
+
+[[CellStatistics]] **CellStatistics** **0**|**1**::
When this option is enabled, Tor writes statistics on the mean time that
cells spend in circuit queues to disk every 24 hours. (Default: 0)
-**DirReqStatistics** **0**|**1**::
+[[DirReqStatistics]] **DirReqStatistics** **0**|**1**::
When this option is enabled, a Tor directory writes statistics on the
number and response time of network status requests to disk every 24
hours. (Default: 1)
-**EntryStatistics** **0**|**1**::
+[[EntryStatistics]] **EntryStatistics** **0**|**1**::
When this option is enabled, Tor writes statistics on the number of
directly connecting clients to disk every 24 hours. (Default: 0)
-**ExitPortStatistics** **0**|**1**::
+[[ExitPortStatistics]] **ExitPortStatistics** **0**|**1**::
When this option is enabled, Tor writes statistics on the number of relayed
bytes and opened stream per exit port to disk every 24 hours. (Default: 0)
-**ConnDirectionStatistics** **0**|**1**::
+[[ConnDirectionStatistics]] **ConnDirectionStatistics** **0**|**1**::
When this option is enabled, Tor writes statistics on the bidirectional use
of connections to disk every 24 hours. (Default: 0)
-**ExtraInfoStatistics** **0**|**1**::
+[[ExtraInfoStatistics]] **ExtraInfoStatistics** **0**|**1**::
When this option is enabled, Tor includes previously gathered statistics in
its extra-info documents that it uploads to the directory authorities.
(Default: 1)
-**ExtendAllowPrivateAddresses** **0**|**1**::
+[[ExtendAllowPrivateAddresses]] **ExtendAllowPrivateAddresses** **0**|**1**::
When this option is enabled, Tor routers allow EXTEND request to
localhost, RFC1918 addresses, and so on. This can create security issues;
you should probably leave it off. (Default: 0)
+[[MaxMemInQueues]] **MaxMemInQueues** __N__ **bytes**|**KB**|**MB**|**GB**::
+ This option configures a threshold above which Tor will assume that it
+ needs to stop queueing or buffering data because it's about to run out of
+ memory. If it hits this threshold, it will begin killing circuits until
+ it has recovered at least 10% of this memory. Do not set this option too
+ low, or your relay may be unreliable under load. This option only
+ affects some queues, so the actual process size will be larger than
+ this. If this option is set to 0, Tor will try to pick a reasonable
+ default based on your system's physical memory. (Default: 0)
+
DIRECTORY SERVER OPTIONS
------------------------
The following options are useful only for directory servers (that is,
if DirPort is non-zero):
-**AuthoritativeDirectory** **0**|**1**::
+[[AuthoritativeDirectory]] **AuthoritativeDirectory** **0**|**1**::
When this option is set to 1, Tor operates as an authoritative directory
server. Instead of caching the directory, it generates its own list of
good servers, signs it, and sends that to the clients. Unless the clients
@@ -1489,37 +1769,26 @@ if DirPort is non-zero):
to set this option. Please coordinate with the other admins at
tor-ops@torproject.org if you think you should be a directory.
-**DirPortFrontPage** __FILENAME__::
+[[DirPortFrontPage]] **DirPortFrontPage** __FILENAME__::
When this option is set, it takes an HTML file and publishes it as "/" on
the DirPort. Now relay operators can provide a disclaimer without needing
to set up a separate webserver. There's a sample disclaimer in
- contrib/tor-exit-notice.html.
-
-**V1AuthoritativeDirectory** **0**|**1**::
- When this option is set in addition to **AuthoritativeDirectory**, Tor
- generates version 1 directory and running-routers documents (for legacy
- Tor clients up to 0.1.0.x).
-
-**V2AuthoritativeDirectory** **0**|**1**::
- When this option is set in addition to **AuthoritativeDirectory**, Tor
- generates version 2 network statuses and serves descriptors, etc as
- described in doc/spec/dir-spec-v2.txt (for Tor clients and servers running
- 0.1.1.x and 0.1.2.x).
+ contrib/operator-tools/tor-exit-notice.html.
-**V3AuthoritativeDirectory** **0**|**1**::
+[[V3AuthoritativeDirectory]] **V3AuthoritativeDirectory** **0**|**1**::
When this option is set in addition to **AuthoritativeDirectory**, Tor
generates version 3 network statuses and serves descriptors, etc as
described in doc/spec/dir-spec.txt (for Tor clients and servers running at
least 0.2.0.x).
-**VersioningAuthoritativeDirectory** **0**|**1**::
+[[VersioningAuthoritativeDirectory]] **VersioningAuthoritativeDirectory** **0**|**1**::
When this option is set to 1, Tor adds information on which versions of
Tor are still believed safe for use to the published directory. Each
version 1 authority is automatically a versioning authority; version 2
authorities provide this service optionally. See **RecommendedVersions**,
**RecommendedClientVersions**, and **RecommendedServerVersions**.
-**NamingAuthoritativeDirectory** **0**|**1**::
+[[NamingAuthoritativeDirectory]] **NamingAuthoritativeDirectory** **0**|**1**::
When this option is set to 1, then the server advertises that it has
opinions about nickname-to-fingerprint bindings. It will include these
opinions in its published network-status pages, by listing servers with
@@ -1528,33 +1797,29 @@ if DirPort is non-zero):
accept or publish descriptors that contradict a registered binding. See
**approved-routers** in the **FILES** section below.
-**HSAuthoritativeDir** **0**|**1**::
- When this option is set in addition to **AuthoritativeDirectory**, Tor also
- accepts and serves v0 hidden service descriptors,
- which are produced and used by Tor 0.2.1.x and older. (Default: 0)
-
-**HidServDirectoryV2** **0**|**1**::
+[[HidServDirectoryV2]] **HidServDirectoryV2** **0**|**1**::
When this option is set, Tor accepts and serves v2 hidden service
descriptors. Setting DirPort is not required for this, because clients
connect via the ORPort by default. (Default: 1)
-**BridgeAuthoritativeDir** **0**|**1**::
+[[BridgeAuthoritativeDir]] **BridgeAuthoritativeDir** **0**|**1**::
When this option is set in addition to **AuthoritativeDirectory**, Tor
accepts and serves router descriptors, but it caches and serves the main
networkstatus documents rather than generating its own. (Default: 0)
-**MinUptimeHidServDirectoryV2** __N__ **seconds**|**minutes**|**hours**|**days**|**weeks**::
+[[MinUptimeHidServDirectoryV2]] **MinUptimeHidServDirectoryV2** __N__ **seconds**|**minutes**|**hours**|**days**|**weeks**::
Minimum uptime of a v2 hidden service directory to be accepted as such by
authoritative directories. (Default: 25 hours)
-**DirPort** \['address':]__PORT__|**auto** [_flags_]::
+[[DirPort]] **DirPort** \['address':]__PORT__|**auto** [_flags_]::
If this option is nonzero, advertise the directory service on this port.
Set it to "auto" to have Tor pick a port for you. This option can occur
- more than once. (Default: 0)
+ more than once, but only one advertised DirPort is supported: all
+ but one DirPort must have the **NoAdvertise** flag set. (Default: 0)
+
The same flags are supported here as are supported by ORPort.
-**DirListenAddress** __IP__[:__PORT__]::
+[[DirListenAddress]] **DirListenAddress** __IP__[:__PORT__]::
Bind the directory service to this address. If you specify a port, bind to
this port rather than the one specified in DirPort. (Default: 0.0.0.0)
This directive can be specified multiple times to bind to multiple
@@ -1563,121 +1828,122 @@ if DirPort is non-zero):
This option is deprecated; you can get the same behavior with DirPort now
that it supports NoAdvertise and explicit addresses.
-**DirPolicy** __policy__,__policy__,__...__::
+[[DirPolicy]] **DirPolicy** __policy__,__policy__,__...__::
Set an entrance policy for this server, to limit who can connect to the
- directory ports. The policies have the same form as exit policies above.
-
-**FetchV2Networkstatus** **0**|**1**::
- If set, we try to fetch the (obsolete, unused) version 2 network status
- consensus documents from the directory authorities. No currently
- supported Tor version uses them. (Default: 0)
+ directory ports. The policies have the same form as exit policies above,
+ except that port specifiers are ignored. Any address not matched by
+ some entry in the policy is accepted.
DIRECTORY AUTHORITY SERVER OPTIONS
----------------------------------
-**RecommendedVersions** __STRING__::
+[[RecommendedVersions]] **RecommendedVersions** __STRING__::
STRING is a comma-separated list of Tor versions currently believed to be
safe. The list is included in each directory, and nodes which pull down the
directory learn whether they need to upgrade. This option can appear
multiple times: the values from multiple lines are spliced together. When
this is set then **VersioningAuthoritativeDirectory** should be set too.
-**RecommendedClientVersions** __STRING__::
+[[RecommendedClientVersions]] **RecommendedClientVersions** __STRING__::
STRING is a comma-separated list of Tor versions currently believed to be
safe for clients to use. This information is included in version 2
directories. If this is not set then the value of **RecommendedVersions**
is used. When this is set then **VersioningAuthoritativeDirectory** should
be set too.
-**RecommendedServerVersions** __STRING__::
+[[RecommendedServerVersions]] **RecommendedServerVersions** __STRING__::
STRING is a comma-separated list of Tor versions currently believed to be
safe for servers to use. This information is included in version 2
directories. If this is not set then the value of **RecommendedVersions**
is used. When this is set then **VersioningAuthoritativeDirectory** should
be set too.
-**ConsensusParams** __STRING__::
+[[ConsensusParams]] **ConsensusParams** __STRING__::
STRING is a space-separated list of key=value pairs that Tor will include
in the "params" line of its networkstatus vote.
-**DirAllowPrivateAddresses** **0**|**1**::
+[[DirAllowPrivateAddresses]] **DirAllowPrivateAddresses** **0**|**1**::
If set to 1, Tor will accept router descriptors with arbitrary "Address"
elements. Otherwise, if the address is not an IP address or is a private IP
address, it will reject the router descriptor. (Default: 0)
-**AuthDirBadDir** __AddressPattern...__::
+[[AuthDirBadDir]] **AuthDirBadDir** __AddressPattern...__::
Authoritative directories only. A set of address patterns for servers that
will be listed as bad directories in any network status document this
- authority publishes, if **AuthDirListBadDirs** is set.
+ authority publishes, if **AuthDirListBadDirs** is set. +
+ +
+ (The address pattern syntax here and in the options below
+ is the same as for exit policies, except that you don't need to say
+ "accept" or "reject", and ports are not needed.)
-**AuthDirBadExit** __AddressPattern...__::
+[[AuthDirBadExit]] **AuthDirBadExit** __AddressPattern...__::
Authoritative directories only. A set of address patterns for servers that
will be listed as bad exits in any network status document this authority
publishes, if **AuthDirListBadExits** is set.
-**AuthDirInvalid** __AddressPattern...__::
+[[AuthDirInvalid]] **AuthDirInvalid** __AddressPattern...__::
Authoritative directories only. A set of address patterns for servers that
will never be listed as "valid" in any network status document that this
authority publishes.
-**AuthDirReject** __AddressPattern__...::
+[[AuthDirReject]] **AuthDirReject** __AddressPattern__...::
Authoritative directories only. A set of address patterns for servers that
will never be listed at all in any network status document that this
authority publishes, or accepted as an OR address in any descriptor
submitted for publication by this authority.
-**AuthDirBadDirCCs** __CC__,... +
+[[AuthDirBadDirCCs]] **AuthDirBadDirCCs** __CC__,... +
-**AuthDirBadExitCCs** __CC__,... +
+[[AuthDirBadExitCCs]] **AuthDirBadExitCCs** __CC__,... +
-**AuthDirInvalidCCs** __CC__,... +
+[[AuthDirInvalidCCs]] **AuthDirInvalidCCs** __CC__,... +
-**AuthDirRejectCCs** __CC__,...::
+[[AuthDirRejectCCs]] **AuthDirRejectCCs** __CC__,...::
Authoritative directories only. These options contain a comma-separated
list of country codes such that any server in one of those country codes
will be marked as a bad directory/bad exit/invalid for use, or rejected
entirely.
-**AuthDirListBadDirs** **0**|**1**::
+[[AuthDirListBadDirs]] **AuthDirListBadDirs** **0**|**1**::
Authoritative directories only. If set to 1, this directory has some
opinion about which nodes are unsuitable as directory caches. (Do not set
this to 1 unless you plan to list non-functioning directories as bad;
otherwise, you are effectively voting in favor of every declared
directory.)
-**AuthDirListBadExits** **0**|**1**::
+[[AuthDirListBadExits]] **AuthDirListBadExits** **0**|**1**::
Authoritative directories only. If set to 1, this directory has some
opinion about which nodes are unsuitable as exit nodes. (Do not set this to
1 unless you plan to list non-functioning exits as bad; otherwise, you are
effectively voting in favor of every declared exit as an exit.)
-**AuthDirRejectUnlisted** **0**|**1**::
+[[AuthDirRejectUnlisted]] **AuthDirRejectUnlisted** **0**|**1**::
Authoritative directories only. If set to 1, the directory server rejects
all uploaded server descriptors that aren't explicitly listed in the
fingerprints file. This acts as a "panic button" if we get hit with a Sybil
attack. (Default: 0)
-**AuthDirMaxServersPerAddr** __NUM__::
+[[AuthDirMaxServersPerAddr]] **AuthDirMaxServersPerAddr** __NUM__::
Authoritative directories only. The maximum number of servers that we will
list as acceptable on a single IP address. Set this to "0" for "no limit".
(Default: 2)
-**AuthDirMaxServersPerAuthAddr** __NUM__::
+[[AuthDirMaxServersPerAuthAddr]] **AuthDirMaxServersPerAuthAddr** __NUM__::
Authoritative directories only. Like AuthDirMaxServersPerAddr, but applies
to addresses shared with directory authorities. (Default: 5)
-**AuthDirFastGuarantee** __N__ **bytes**|**KB**|**MB**|**GB**::
+[[AuthDirFastGuarantee]] **AuthDirFastGuarantee** __N__ **bytes**|**KBytes**|**MBytes**|**GBytes**|**KBits**|**MBits**|**GBits**::
Authoritative directories only. If non-zero, always vote the
Fast flag for any relay advertising this amount of capacity or
- more. (Default: 100 KB)
+ more. (Default: 100 KBytes)
-**AuthDirGuardBWGuarantee** __N__ **bytes**|**KB**|**MB**|**GB**::
+[[AuthDirGuardBWGuarantee]] **AuthDirGuardBWGuarantee** __N__ **bytes**|**KBytes**|**MBytes**|**GBytes**|**KBits**|**MBits**|**GBits**::
Authoritative directories only. If non-zero, this advertised capacity
or more is always sufficient to satisfy the bandwidth requirement
- for the Guard flag. (Default: 250 KB)
+ for the Guard flag. (Default: 250 KBytes)
-**BridgePassword** __Password__::
+[[BridgePassword]] **BridgePassword** __Password__::
If set, contains an HTTP authenticator that tells a bridge authority to
serve all requested bridge information. Used by the (only partially
implemented) "bridge community" design, where a community of bridge
@@ -1685,26 +1951,26 @@ DIRECTORY AUTHORITY SERVER OPTIONS
and their target user audience can periodically fetch the list of
available community bridges to stay up-to-date. (Default: not set)
-**V3AuthVotingInterval** __N__ **minutes**|**hours**::
+[[V3AuthVotingInterval]] **V3AuthVotingInterval** __N__ **minutes**|**hours**::
V3 authoritative directories only. Configures the server's preferred voting
interval. Note that voting will __actually__ happen at an interval chosen
by consensus from all the authorities' preferred intervals. This time
SHOULD divide evenly into a day. (Default: 1 hour)
-**V3AuthVoteDelay** __N__ **minutes**|**hours**::
+[[V3AuthVoteDelay]] **V3AuthVoteDelay** __N__ **minutes**|**hours**::
V3 authoritative directories only. Configures the server's preferred delay
between publishing its vote and assuming it has all the votes from all the
other authorities. Note that the actual time used is not the server's
preferred time, but the consensus of all preferences. (Default: 5 minutes)
-**V3AuthDistDelay** __N__ **minutes**|**hours**::
+[[V3AuthDistDelay]] **V3AuthDistDelay** __N__ **minutes**|**hours**::
V3 authoritative directories only. Configures the server's preferred delay
between publishing its consensus and signature and assuming it has all the
signatures from all the other authorities. Note that the actual time used
is not the server's preferred time, but the consensus of all preferences.
(Default: 5 minutes)
-**V3AuthNIntervalsValid** __NUM__::
+[[V3AuthNIntervalsValid]] **V3AuthNIntervalsValid** __NUM__::
V3 authoritative directories only. Configures the number of VotingIntervals
for which each consensus should be valid for. Choosing high numbers
increases network partitioning risks; choosing low numbers increases
@@ -1712,38 +1978,50 @@ DIRECTORY AUTHORITY SERVER OPTIONS
server's preferred number, but the consensus of all preferences. Must be at
least 2. (Default: 3)
-**V3BandwidthsFile** __FILENAME__::
+[[V3BandwidthsFile]] **V3BandwidthsFile** __FILENAME__::
V3 authoritative directories only. Configures the location of the
bandwidth-authority generated file storing information on relays' measured
bandwidth capacities. (Default: unset)
-**V3AuthUseLegacyKey** **0**|**1**::
+[[V3AuthUseLegacyKey]] **V3AuthUseLegacyKey** **0**|**1**::
If set, the directory authority will sign consensuses not only with its
own signing key, but also with a "legacy" key and certificate with a
different identity. This feature is used to migrate directory authority
keys in the event of a compromise. (Default: 0)
-**RephistTrackTime** __N__ **seconds**|**minutes**|**hours**|**days**|**weeks**::
+[[RephistTrackTime]] **RephistTrackTime** __N__ **seconds**|**minutes**|**hours**|**days**|**weeks**::
Tells an authority, or other node tracking node reliability and history,
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**::
+[[VoteOnHidServDirectoriesV2]] **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)
+[[AuthDirHasIPv6Connectivity]] **AuthDirHasIPv6Connectivity** **0**|**1**::
+ Authoritative directories only. When set to 0, OR ports with an
+ IPv6 address are being accepted without reachability testing.
+ When set to 1, IPv6 OR ports are being tested just like IPv4 OR
+ ports. (Default: 0)
+
+[[MinMeasuredBWsForAuthToIgnoreAdvertised]] **MinMeasuredBWsForAuthToIgnoreAdvertised** __N__::
+ A total value, in abstract bandwidth units, describing how much
+ measured total bandwidth an authority should have observed on the network
+ before it will treat advertised bandwidths as wholly
+ unreliable. (Default: 500)
+
HIDDEN SERVICE OPTIONS
----------------------
The following options are used to configure a hidden service.
-**HiddenServiceDir** __DIRECTORY__::
+[[HiddenServiceDir]] **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. DIRECTORY must be an existing directory.
-**HiddenServicePort** __VIRTPORT__ [__TARGET__]::
+[[HiddenServicePort]] **HiddenServicePort** __VIRTPORT__ [__TARGET__]::
Configure a virtual port VIRTPORT for a hidden service. You may use this
option multiple times; each time applies to the service using the most
recent hiddenservicedir. By default, this option maps the virtual port to
@@ -1753,29 +2031,29 @@ The following options are used to configure a hidden service.
connects to that VIRTPORT, one of the TARGETs from those lines will be
chosen at random.
-**PublishHidServDescriptors** **0**|**1**::
+[[PublishHidServDescriptors]] **PublishHidServDescriptors** **0**|**1**::
If set to 0, Tor will run any hidden services you configure, but it won't
advertise them to the rendezvous directory. This option is only useful if
you're using a Tor controller that handles hidserv publishing for you.
(Default: 1)
-**HiddenServiceVersion** __version__,__version__,__...__::
+[[HiddenServiceVersion]] **HiddenServiceVersion** __version__,__version__,__...__::
A list of rendezvous service descriptor versions to publish for the hidden
service. Currently, only version 2 is supported. (Default: 2)
-**HiddenServiceAuthorizeClient** __auth-type__ __client-name__,__client-name__,__...__::
+[[HiddenServiceAuthorizeClient]] **HiddenServiceAuthorizeClient** __auth-type__ __client-name__,__client-name__,__...__::
If configured, the hidden service is accessible for authorized clients
only. The auth-type can either be \'basic' for a general-purpose
authorization protocol or \'stealth' for a less scalable protocol that also
hides service activity from unauthorized clients. Only clients that are
listed here are authorized to access the hidden service. Valid client names
- are 1 to 19 characters long and only use characters in A-Za-z0-9+-_ (no
+ are 1 to 16 characters long and only use characters in A-Za-z0-9+-_ (no
spaces). If this option is set, the hidden service is not accessible for
clients without authorization any more. Generated authorization data can be
found in the hostname file. Clients need to put this authorization data in
their configuration file using **HidServAuth**.
-**RendPostPeriod** __N__ **seconds**|**minutes**|**hours**|**days**|**weeks**::
+[[RendPostPeriod]] **RendPostPeriod** __N__ **seconds**|**minutes**|**hours**|**days**|**weeks**::
Every time the specified period elapses, Tor uploads any rendezvous
service descriptors to the directory servers. This information is also
uploaded whenever it changes. (Default: 1 hour)
@@ -1785,10 +2063,11 @@ TESTING NETWORK OPTIONS
The following options are used for running a testing Tor network.
-**TestingTorNetwork** **0**|**1**::
+[[TestingTorNetwork]] **TestingTorNetwork** **0**|**1**::
If set to 1, Tor adjusts default values of the configuration options below,
so that it is easier to set up a testing Tor network. May only be set if
- non-default set of DirServers is set. Cannot be unset while Tor is running.
+ non-default set of DirAuthorities is set. Cannot be unset while Tor is
+ running.
(Default: 0) +
ServerDNSAllowBrokenConfig 1
@@ -1811,64 +2090,166 @@ The following options are used for running a testing Tor network.
TestingV3AuthInitialDistDelay 20 seconds
TestingAuthDirTimeToLearnReachability 0 minutes
TestingEstimatedDescriptorPropagationTime 0 minutes
-
-**TestingV3AuthInitialVotingInterval** __N__ **minutes**|**hours**::
+ TestingServerDownloadSchedule 0, 0, 0, 5, 10, 15, 20, 30, 60
+ TestingClientDownloadSchedule 0, 0, 5, 10, 15, 20, 30, 60
+ TestingServerConsensusDownloadSchedule 0, 0, 5, 10, 15, 20, 30, 60
+ TestingClientConsensusDownloadSchedule 0, 0, 5, 10, 15, 20, 30, 60
+ TestingBridgeDownloadSchedule 60, 30, 30, 60
+ TestingClientMaxIntervalWithoutRequest 5 seconds
+ TestingDirConnectionMaxStall 30 seconds
+ TestingConsensusMaxDownloadTries 80
+ TestingDescriptorMaxDownloadTries 80
+ TestingMicrodescMaxDownloadTries 80
+ TestingCertMaxDownloadTries 80
+ TestingEnableConnBwEvent 1
+ TestingEnableCellStatsEvent 1
+ TestingEnableTbEmptyEvent 1
+
+[[TestingV3AuthInitialVotingInterval]] **TestingV3AuthInitialVotingInterval** __N__ **minutes**|**hours**::
Like V3AuthVotingInterval, but for initial voting interval before the first
consensus has been created. Changing this requires that
**TestingTorNetwork** is set. (Default: 30 minutes)
-**TestingV3AuthInitialVoteDelay** __N__ **minutes**|**hours**::
- Like TestingV3AuthInitialVoteDelay, but for initial voting interval before
+[[TestingV3AuthInitialVoteDelay]] **TestingV3AuthInitialVoteDelay** __N__ **minutes**|**hours**::
+ Like V3AuthVoteDelay, but for initial voting interval before
the first consensus has been created. Changing this requires that
**TestingTorNetwork** is set. (Default: 5 minutes)
-**TestingV3AuthInitialDistDelay** __N__ **minutes**|**hours**::
- Like TestingV3AuthInitialDistDelay, but for initial voting interval before
+[[TestingV3AuthInitialDistDelay]] **TestingV3AuthInitialDistDelay** __N__ **minutes**|**hours**::
+ Like V3AuthDistDelay, but for initial voting interval before
the first consensus has been created. Changing this requires that
**TestingTorNetwork** is set. (Default: 5 minutes)
-**TestingAuthDirTimeToLearnReachability** __N__ **minutes**|**hours**::
+[[TestingV3AuthVotingStartOffset]] **TestingV3AuthVotingStartOffset** __N__ **seconds**|**minutes**|**hours**::
+ Directory authorities offset voting start time by this much.
+ Changing this requires that **TestingTorNetwork** is set. (Default: 0)
+
+[[TestingAuthDirTimeToLearnReachability]] **TestingAuthDirTimeToLearnReachability** __N__ **minutes**|**hours**::
After starting as an authority, do not make claims about whether routers
are Running until this much time has passed. Changing this requires
that **TestingTorNetwork** is set. (Default: 30 minutes)
-**TestingEstimatedDescriptorPropagationTime** __N__ **minutes**|**hours**::
+[[TestingEstimatedDescriptorPropagationTime]] **TestingEstimatedDescriptorPropagationTime** __N__ **minutes**|**hours**::
Clients try downloading router descriptors from directory caches after this
time. Changing this requires that **TestingTorNetwork** is set. (Default:
10 minutes)
+[[TestingMinFastFlagThreshold]] **TestingMinFastFlagThreshold** __N__ **bytes**|**KBytes**|**MBytes**|**GBytes**|**KBits**|**MBits**|**GBits**::
+ Minimum value for the Fast flag. Overrides the ordinary minimum taken
+ from the consensus when TestingTorNetwork is set. (Default: 0.)
+
+[[TestingServerDownloadSchedule]] **TestingServerDownloadSchedule** __N__,__N__,__...__::
+ Schedule for when servers should download things in general. Changing this
+ requires that **TestingTorNetwork** is set. (Default: 0, 0, 0, 60, 60, 120,
+ 300, 900, 2147483647)
+
+[[TestingClientDownloadSchedule]] **TestingClientDownloadSchedule** __N__,__N__,__...__::
+ Schedule for when clients should download things in general. Changing this
+ requires that **TestingTorNetwork** is set. (Default: 0, 0, 60, 300, 600,
+ 2147483647)
+
+[[TestingServerConsensusDownloadSchedule]] **TestingServerConsensusDownloadSchedule** __N__,__N__,__...__::
+ Schedule for when servers should download consensuses. Changing this
+ requires that **TestingTorNetwork** is set. (Default: 0, 0, 60, 300, 600,
+ 1800, 1800, 1800, 1800, 1800, 3600, 7200)
+
+[[TestingClientConsensusDownloadSchedule]] **TestingClientConsensusDownloadSchedule** __N__,__N__,__...__::
+ Schedule for when clients should download consensuses. Changing this
+ requires that **TestingTorNetwork** is set. (Default: 0, 0, 60, 300, 600,
+ 1800, 3600, 3600, 3600, 10800, 21600, 43200)
+
+[[TestingBridgeDownloadSchedule]] **TestingBridgeDownloadSchedule** __N__,__N__,__...__::
+ Schedule for when clients should download bridge descriptors. Changing this
+ requires that **TestingTorNetwork** is set. (Default: 3600, 900, 900, 3600)
+
+[[TestingClientMaxIntervalWithoutRequest]] **TestingClientMaxIntervalWithoutRequest** __N__ **seconds**|**minutes**::
+ When directory clients have only a few descriptors to request, they batch
+ them until they have more, or until this amount of time has passed.
+ Changing this requires that **TestingTorNetwork** is set. (Default: 10
+ minutes)
+
+[[TestingDirConnectionMaxStall]] **TestingDirConnectionMaxStall** __N__ **seconds**|**minutes**::
+ Let a directory connection stall this long before expiring it.
+ Changing this requires that **TestingTorNetwork** is set. (Default:
+ 5 minutes)
+
+[[TestingConsensusMaxDownloadTries]] **TestingConsensusMaxDownloadTries** __NUM__::
+ Try this often to download a consensus before giving up. Changing
+ this requires that **TestingTorNetwork** is set. (Default: 8)
+
+[[TestingDescriptorMaxDownloadTries]] **TestingDescriptorMaxDownloadTries** __NUM__::
+ Try this often to download a router descriptor before giving up.
+ Changing this requires that **TestingTorNetwork** is set. (Default: 8)
+
+[[TestingMicrodescMaxDownloadTries]] **TestingMicrodescMaxDownloadTries** __NUM__::
+ Try this often to download a microdesc descriptor before giving up.
+ Changing this requires that **TestingTorNetwork** is set. (Default: 8)
+
+[[TestingCertMaxDownloadTries]] **TestingCertMaxDownloadTries** __NUM__::
+ Try this often to download a v3 authority certificate before giving up.
+ Changing this requires that **TestingTorNetwork** is set. (Default: 8)
+
+[[TestingDirAuthVoteGuard]] **TestingDirAuthVoteGuard** __node__,__node__,__...__::
+ A list of identity fingerprints, nicknames, country codes and
+ address patterns of nodes to vote Guard for regardless of their
+ uptime and bandwidth. See the **ExcludeNodes** option for more
+ information on how to specify nodes.
+ +
+ In order for this option to have any effect, **TestingTorNetwork**
+ has to be set.
+
+[[TestingEnableConnBwEvent]] **TestingEnableConnBwEvent** **0**|**1**::
+ If this option is set, then Tor controllers may register for CONN_BW
+ events. Changing this requires that **TestingTorNetwork** is set.
+ (Default: 0)
+
+[[TestingEnableCellStatsEvent]] **TestingEnableCellStatsEvent** **0**|**1**::
+ If this option is set, then Tor controllers may register for CELL_STATS
+ events. Changing this requires that **TestingTorNetwork** is set.
+ (Default: 0)
+
+[[TestingEnableTbEmptyEvent]] **TestingEnableTbEmptyEvent** **0**|**1**::
+ If this option is set, then Tor controllers may register for TB_EMPTY
+ events. Changing this requires that **TestingTorNetwork** is set.
+ (Default: 0)
+
+[[TestingMinExitFlagThreshold]] **TestingMinExitFlagThreshold** __N__ **KBytes**|**MBytes**|**GBytes**|**KBits**|**MBits**|**GBits**::
+ Sets a lower-bound for assigning an exit flag when running as an
+ authority on a testing network. Overrides the usual default lower bound
+ of 4 KB. (Default: 0)
+
SIGNALS
-------
Tor catches the following signals:
-**SIGTERM**::
+[[SIGTERM]] **SIGTERM**::
Tor will catch this, clean up and sync to disk if necessary, and exit.
-**SIGINT**::
+[[SIGINT]] **SIGINT**::
Tor clients behave as with SIGTERM; but Tor servers will do a controlled
slow shutdown, closing listeners and waiting 30 seconds before exiting.
(The delay can be configured with the ShutdownWaitLength config option.)
-**SIGHUP**::
+[[SIGHUP]] **SIGHUP**::
The signal instructs Tor to reload its configuration (including closing and
reopening logs), and kill and restart its helper processes if applicable.
-**SIGUSR1**::
+[[SIGUSR1]] **SIGUSR1**::
Log statistics about current connections, past connections, and throughput.
-**SIGUSR2**::
+[[SIGUSR2]] **SIGUSR2**::
Switch all logs to loglevel debug. You can go back to the old loglevels by
sending a SIGHUP.
-**SIGCHLD**::
+[[SIGCHLD]] **SIGCHLD**::
Tor receives this signal when one of its helper processes has exited, so it
can clean up.
-**SIGPIPE**::
+[[SIGPIPE]] **SIGPIPE**::
Tor catches this signal and ignores it.
-**SIGXFSZ**::
+[[SIGXFSZ]] **SIGXFSZ**::
If this signal exists on your platform, Tor catches and ignores it.
FILES
@@ -1877,6 +2258,9 @@ FILES
**@CONFDIR@/torrc**::
The configuration file, which contains "option value" pairs.
+**$HOME/.torrc**::
+ Fallback location for torrc, if @CONFDIR@/torrc is not found.
+
**@LOCALSTATEDIR@/lib/tor/**::
The tor process stores keys and other data here.
@@ -1885,6 +2269,10 @@ __DataDirectory__**/cached-status/**::
Each file holds one such document; the filenames are the hexadecimal
identity key fingerprints of the directory authorities. Mostly obsolete.
+__DataDirectory__**/cached-certs**::
+ This file holds downloaded directory key certificates that are used to
+ verify authenticity of documents generated by Tor directory authorities.
+
__DataDirectory__**/cached-consensus** and/or **cached-microdesc-consensus**::
The most recent consensus network status document we've downloaded.
@@ -1928,12 +2316,21 @@ __DataDirectory__**/control_auth_cookie**::
control-spec.txt for details. Only used when cookie authentication is
enabled.
+__DataDirectory__**/lock**::
+ This file is used to prevent two Tor instances from using same data
+ directory. If access to this file is locked, data directory is already
+ in use by Tor.
+
__DataDirectory__**/keys/***::
Only used by servers. Holds identity keys and onion keys.
__DataDirectory__**/fingerprint**::
Only used by servers. Holds the fingerprint of the server's identity key.
+__DataDirectory__**/hashed-fingerprint**::
+ Only used by bridges. Holds the hashed fingerprint of the bridge's
+ identity key. (That is, the hash of the hash of the identity key.)
+
__DataDirectory__**/approved-routers**::
Only for naming authoritative directory servers (see
**NamingAuthoritativeDirectory**). This file lists nickname to identity
@@ -1944,11 +2341,53 @@ __DataDirectory__**/approved-routers**::
**!invalid** then descriptors are accepted but marked in the directory as
not valid, that is, not recommended.
+__DataDirectory__**/v3-status-votes**::
+ Only for authoritative directory servers. This file contains status votes
+ from all the authoritative directory servers and is used to generate the
+ network consensus document.
+
+__DataDirectory__**/unverified-consensus**::
+ This file contains a network consensus document that has been downloaded,
+ but which we didn't have the right certificates to check yet.
+
+__DataDirectory__**/unverified-microdesc-consensus**::
+ This file contains a microdescriptor-flavored network consensus document
+ that has been downloaded, but which we didn't have the right certificates
+ to check yet.
+
+__DataDirectory__**/unparseable-desc**::
+ Onion router descriptors that Tor was unable to parse are dumped to this
+ file. Only used for debugging.
+
__DataDirectory__**/router-stability**::
Only used by authoritative directory servers. Tracks measurements for
router mean-time-between-failures so that authorities have a good idea of
how to set their Stable flags.
+__DataDirectory__**/stats/dirreq-stats**::
+ Only used by directory caches and authorities. This file is used to
+ collect directory request statistics.
+
+__DataDirectory__**/stats/entry-stats**::
+ Only used by servers. This file is used to collect incoming connection
+ statistics by Tor entry nodes.
+
+__DataDirectory__**/stats/bridge-stats**::
+ Only used by servers. This file is used to collect incoming connection
+ statistics by Tor bridges.
+
+__DataDirectory__**/stats/exit-stats**::
+ Only used by servers. This file is used to collect outgoing connection
+ statistics by Tor exit routers.
+
+__DataDirectory__**/stats/buffer-stats**::
+ Only used by servers. This file is used to collect buffer usage
+ history.
+
+__DataDirectory__**/stats/conn-stats**::
+ Only used by servers. This file is used to collect approximate connection
+ history (number of active connections over time).
+
__HiddenServiceDirectory__**/hostname**::
The <base32-encoded-fingerprint>.onion domain name for this hidden service.
If the hidden service is restricted to authorized clients only, this file
@@ -1963,7 +2402,7 @@ __HiddenServiceDirectory__**/client_keys**::
SEE ALSO
--------
-**privoxy**(1), **tsocks**(1), **torify**(1) +
+**torsocks**(1), **torify**(1) +
**https://www.torproject.org/**
@@ -1976,4 +2415,3 @@ Plenty, probably. Tor is still in development. Please report them.
AUTHORS
-------
Roger Dingledine [arma at mit.edu], Nick Mathewson [nickm at alum.mit.edu].
-
diff --git a/doc/torify.1.txt b/doc/torify.1.txt
index 4a4be1250..8dca90131 100644
--- a/doc/torify.1.txt
+++ b/doc/torify.1.txt
@@ -2,14 +2,14 @@
// See LICENSE for licensing information
// This is an asciidoc file used to generate the manpage/html reference.
// Learn asciidoc on http://www.methods.co.nz/asciidoc/userguide.html
+:man source: Tor
+:man manual: Tor Manual
torify(1)
=========
-Peter Palfrader
-Jacob Appelbaum
NAME
----
-torify - wrapper for torsocks or tsocks and tor
+torify - wrapper for torsocks and tor
SYNOPSIS
--------
@@ -18,33 +18,25 @@ SYNOPSIS
DESCRIPTION
-----------
**torify** is a simple wrapper that attempts to find the best underlying Tor
-wrapper available on a system. It calls torsocks or tsocks with a tor specific
+wrapper available on a system. It calls torsocks with a tor specific
configuration file. +
torsocks is an improved wrapper that explicitly rejects UDP, safely resolves DNS
lookups and properly socksifies your TCP connections. +
-tsocks itself is a wrapper between the tsocks library and the application that
-you would like to run socksified. +
-
Please note that since both method use LD_PRELOAD, torify cannot be applied to
suid binaries.
WARNING
-------
-You should also be aware that the way tsocks currently works only TCP
-connections are socksified. Be aware that this will in most circumstances not
-include hostname lookups which would still be routed through your normal system
-resolver to your usual resolving nameservers. The **tor-resolve**(1) tool can be
-useful as a workaround in some cases. The Tor FAQ at
-https://wiki.torproject.org/noreply/TheOnionRouter/TorFAQ might have further
-information on this subject. +
-
When used with torsocks, torify should not leak DNS requests or UDP data. +
Both will leak ICMP data.
SEE ALSO
--------
-**tor**(1), **tor-resolve**(1), **torsocks**(1), **tsocks**(1),
-**tsocks.conf**(5).
+**tor**(1), **tor-resolve**(1), **torsocks**(1)
+
+AUTHORS
+-------
+Peter Palfrader and Jacob Appelbaum wrote this manual.
diff --git a/doc/translations.txt b/doc/translations.txt
deleted file mode 100644
index 06d16f446..000000000
--- a/doc/translations.txt
+++ /dev/null
@@ -1,182 +0,0 @@
-## Instructions for helping translate text for Vidalia, TorButton
-## and TorCheck
-## ( More translation information for Tor related apps will accumulate here )
-
-Our translations are handled in one of two places. The Tor Translation Portal
-handles all of the translations for Vidalia, Torbutton and TorCheck. The Tor
-website itself is currently handled by hand translations using subversion.
-
--------------------------------------------------------------------------
-
-For the Tor website, you'll need a Tor SVN account.
-If you do not have one and you need one, please run this command with your
-desired username in place of 'USERNAME':
- htdigest -c passwd.tmp "Tor subversion repository" USERNAME
-and send us the contents of passwd.tmp.
-
--------------------------------------------------------------------------
-
-For the Portal-based projects, all three check in their respective .po
-files into the following subversion urls:
-
- https://tor-svn.freehaven.net/svn/translation/trunk/projects/torbutton
- https://tor-svn.freehaven.net/svn/translation/trunk/projects/torcheck
- https://svn.vidalia-project.net/svn/vidalia/trunk/src/vidalia/i18n/
-
-The current pootle configuration is checked into subversion as well:
-
- https://tor-svn.freehaven.net/svn/translation/trunk/pootle
-
----------------------------- TorCheck -------------------------------
-
-TorCheck uses our translation portal to accept translations. Users use
-the portal to check in their changes. To make use of the translations
-that users have committed to the translations/ subversion module, you'll
-need to ensure that you have a current checked out copy of TorCheck:
-
- cd check/trunk/i18n/
- check/trunk/i18n$ svn up
-
-You should see something like the following:
-
- Fetching external item into 'pootle'
- External at revision 15300.
-
- At revision 15300.
-
-Now if you had changes, you'd simply want to move the newly updated .po files
-into the current stable directory. Moving the .po files from
-'check/trunk/i18n/pootle/' into 'check/trunk/i18n' properly naming the files
-for their respective locale.
-
-Here's an example of how to move all of the current pootle translations into
-the svn trunk area of TorCheck:
-
- cd check/trunk/i18n/
- for locale in `ls -1 pootle/|grep -v template`;
- do
- mv -v pootle/$locale/TorCheck_$locale.po TorCheck_$locale.po;
- done
-
-Now check the differences (ensure the output looks reasonable):
-
- svn diff
-
-Ensure that msgfmt has no errors:
-
- msgfmt -C *.po
-
-And finally check in the changes:
-
- svn commit
-
----------------------------- Torbutton -------------------------------
-
-Torbutton uses our translation portal to accept translations. Users use
-the portal to check in their changes.
-
-To make use of the translations that users have committed to the translations/
-subversion module, you'll need to ensure that you have a current checked out
-copy of them in your torbutton git checkout:
-
- cd torbutton.git/trans_tools
- torbutton.git/trans_tools$ svn co https://tor-svn.freehaven.net/svn/translation/trunk/projects/torbutton pootle
-
-You should see something like the following:
-
- Checked out revision 21092.
-
-If you made changes to strings in Torbutton, you need to rebuild the
-templates in torbutton.git/trans_tools/pootle/templates. This is done with
-the following command from within the torbutton.git checkout directory:
-
- moz2po -P -i src/chrome/locale/en/ -o trans_tools/pootle/templates/
-
-You now have two options:
-
-Option 1 (The [shitty] Pootle Web UI Way):
-
-View then commit the changes to the template with:
-
- cd trans_tools/pootle
- svn diff templates
- svn commit templates
-
-Then poke Jake to 'svn up' on the Pootle side. If you do this enough
-times, he may give you a button to click to update templates in Pootle,
-or maybe even an account on the Pootle server. Persistence is a virtue.
-
-You then need to go to the Pootle website and click the checkbox next to
-every language on:
-https://translation.torproject.org/projects/torbutton/admin.html
-and then click "Update Languages" at the bottom.
-
-You then need to go to each language and go to "Editing Options" and click
-"Commit" for each one.
-
-You then need to 'svn up' locally, and follow the procedure above for
-rebuilding your .dtd and .properties files.
-
-Yes, this sucks. :/
-
-Option 2 (Use your own msgmerge: YMMV, may change .po flags and formatting):
-
-Run msgmerge yourself for each language:
-
- cd trans_tools
- for i in `ls -1 pootle`
- do
- msgmerge -U ./pootle/$i/torbutton.dtd.po ./pootle/templates/torbutton.dtd.pot
- msgmerge -U ./pootle/$i/torbutton.properties.po ./pootle/templates/torbutton.properties.pot
- done
- svn diff pootle
- svn commit pootle
-
-Then poke Jake to 'svn up' on the Pootle side. If you do this enough times,
-he may give you a button on Pootle, or maybe even an account on the Pootle
-server. Persistence is a virtue.
-
-You may notice that some .po file flags and string formatting have changed
-with this method, depending on your gettext version. It is unclear if this
-is a problem. Please update this doc if you hit a landmine and everything
-breaks :)
-
-After this process is done, you then need to regenerate the mozilla
-.dtd and .properties files as specified above.
-
-
-Regardless of whether or not you had changes in the torbutton strings, if there
-were updated strings in pootle that you checked out from svn you now need to
-convert from .po and move the newly updated mozilla files into the current
-stable locale directory. First convert them with the 'mkmoz.sh' script and
-then move the proper mozilla files from 'torbutton.git/trans_tools/moz/' into
-'torbutton.git/src/chrome/locale/' directory while properly naming the files
-for their respective locale.
-
-Here's an example of how to move all of the current pootle translations into
-the svn trunk area of Torbutton:
-
- cd trans_tools
- ./mkmoz.sh
- for locale in `ls -1 moz/`;
- do
- mv -v moz/$locale/*.{dtd,properties} ../src/chrome/locale/$locale/
- done
-
-Now check the differences to your git branch to ensure the output looks
-reasonable:
-
- cd ..
- git diff
-
-And finally check in the changes:
-
- cd src/chrome/locale
- git commit .
-
----------------------------- Vidalia -------------------------------
-
-Vidalia uses our translation portal to accept translations. Users use the
-portal to check in their changes. No conversion or moving is required other
-than normal pootle usage.
-
diff --git a/doc/v3-authority-howto.txt b/doc/v3-authority-howto.txt
deleted file mode 100644
index e4470e8c8..000000000
--- a/doc/v3-authority-howto.txt
+++ /dev/null
@@ -1,84 +0,0 @@
-
- How to add a v3 directory authority.
-
-What we'll be doing:
-
- We'll be configuring your Tor server as a v3 directory authority,
- generating a v3 identity key plus certificates, and adding your v3
- identity fingerprint to the list of default directory authorities.
-
-The steps:
-
-0) Make sure you're running ntp, and that your time is correct.
-
- Make sure you have Tor version at least r12724. In the short term,
- running a working authority may mean running the latest version of
- Tor from SVN trunk. Later on, we hope that it will become easier
- and you can just run a recent development release (and later still,
- a recent stable release).
-
-1) First, you'll need a certificate. Run ./src/tools/tor-gencert to
- generate one.
-
- Run tor-gencert in a separate, very secure directory. Maybe even on
- a more secure computer. The first time you run it, you will need to
- run it with the --create-identity-key option to make a v3 authority
- identity key. Subsequent times, you can just run it as-is.
-
- tor-gencert will make 3 files:
-
- authority_identity_key -- THIS IS VERY SECRET AND VERY SENSITIVE.
- DO NOT LEAK IT. DO NOT LOSE IT.
-
- authority_signing_key -- A key for signing votes and v3 conensuses.
-
- authority_certificate -- A document authenticating your signing key
- with your identity-key.
-
- You will need to rotate your signing key periodically. The current
- default lifetime is 1 year. We'll probably take this down to a month or
- two some time soon. To rotate your key, run tor-gencert as before,
- but without the --create-identity-key option.
-
-2) Copy authority_signing_key and authority_certificate to your Tor keys
- directory.
-
- For example if your data directory is /var/lib/tor/, you should run
- cp authority_signing_key authority_certificate /var/lib/tor/keys/
-
- You will need to repeat this every time you rotate your certificate.
-
-3) Tell your Tor to be a v3 authority by adding these lines to your torrc:
-
- AuthoritativeDirectory 1
- V3AuthoritativeDirectory 1
-
-4) Now your authority is generating a networkstatus opinion (called a
- "vote") every period, but none of the other authorities care yet. The
- next step is to get a Tor developer (likely Roger or Nick) to add
- your v3 identity fingerprint to the default list of dirservers.
-
- First, you need to learn your authority's v3 identity fingerprint.
- It should be in your authority_certificate file in a line like:
-
- fingerprint 3041632465FA8847A98B2C5742108C72325532D9
-
- One of the Tor developers then needs to add this fingerprint to
- the add_default_trusted_dirservers() function in config.c, using
- the syntax "v3ident=<fingerprint>". For example, if moria1's new v3
- identity fingerprint is FOO, the moria1 dirserver line should now be:
-
- DirServer moria1 v1 orport=9001 v3ident=FOO 128.31.0.34:9031 FFCB 46DB 1339 DA84 674C 70D7 CB58 6434 C437 0441
-
- The v3ident item must appear after the nickname and before the IP.
-
-5) Once your fingerprint has been added to config.c, we will try to
- get a majority of v3 authorities to upgrade, so they know about you
- too. At that point your vote will automatically be included in the
- networkstatus consensus, and you'll be a fully-functioning contributing
- v3 authority.
-
- Note also that a majority of the configured v3 authorities need to
- agree in order to generate a consensus: so this is also the point
- where extended downtime on your server means missing votes.
-
diff --git a/m4/ax_check_sign.m4 b/m4/ax_check_sign.m4
new file mode 100644
index 000000000..104b17014
--- /dev/null
+++ b/m4/ax_check_sign.m4
@@ -0,0 +1,54 @@
+# ===========================================================================
+# http://www.gnu.org/software/autoconf-archive/ax_check_sign.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+# AX_CHECK_SIGN (TYPE, [ACTION-IF-SIGNED], [ACTION-IF-UNSIGNED], [INCLUDES])
+#
+# DESCRIPTION
+#
+# Checks whether TYPE is signed or not. If no INCLUDES are specified, the
+# default includes are used. If ACTION-IF-SIGNED is given, it is
+# additional shell code to execute when the type is signed. If
+# ACTION-IF-UNSIGNED is given, it is executed when the type is unsigned.
+#
+# This macro assumes that the type exists. Therefore the existence of the
+# type should be checked before calling this macro. For example:
+#
+# AC_CHECK_HEADERS([wchar.h])
+# AC_CHECK_TYPE([wchar_t],,[ AC_MSG_ERROR([Type wchar_t not found.]) ])
+# AX_CHECK_SIGN([wchar_t],
+# [ AC_DEFINE(WCHAR_T_SIGNED, 1, [Define if wchar_t is signed]) ],
+# [ AC_DEFINE(WCHAR_T_UNSIGNED, 1, [Define if wchar_t is unsigned]) ], [
+# #ifdef HAVE_WCHAR_H
+# #include <wchar.h>
+# #endif
+# ])
+#
+# LICENSE
+#
+# Copyright (c) 2008 Ville Laurikari <vl@iki.fi>
+#
+# Copying and distribution of this file, with or without modification, are
+# permitted in any medium without royalty provided the copyright notice
+# and this notice are preserved. This file is offered as-is, without any
+# warranty.
+
+#serial 6
+
+AU_ALIAS([VL_CHECK_SIGN], [AX_CHECK_SIGN])
+AC_DEFUN([AX_CHECK_SIGN], [
+ typename=`echo $1 | sed "s/@<:@^a-zA-Z0-9_@:>@/_/g"`
+ AC_CACHE_CHECK([whether $1 is signed], ax_cv_decl_${typename}_signed, [
+ AC_TRY_COMPILE([$4],
+ [ int foo @<:@ 1 - 2 * !((($1) -1) < 0) @:>@ ],
+ [ eval "ax_cv_decl_${typename}_signed=\"yes\"" ],
+ [ eval "ax_cv_decl_${typename}_signed=\"no\"" ])])
+ symbolname=`echo $1 | sed "s/@<:@^a-zA-Z0-9_@:>@/_/g" | tr "a-z" "A-Z"`
+ if eval "test \"\${ax_cv_decl_${typename}_signed}\" = \"yes\""; then
+ $2
+ elif eval "test \"\${ax_cv_decl_${typename}_signed}\" = \"no\""; then
+ $3
+ fi
+])dnl
diff --git a/m4/pc_from_ucontext.m4 b/m4/pc_from_ucontext.m4
new file mode 100644
index 000000000..6bedcbb2d
--- /dev/null
+++ b/m4/pc_from_ucontext.m4
@@ -0,0 +1,131 @@
+# This file is from Google Performance Tools, svn revision r226.
+#
+# The Google Performance Tools license is:
+########
+# Copyright (c) 2005, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+########
+# Original file follows below.
+
+# We want to access the "PC" (Program Counter) register from a struct
+# ucontext. Every system has its own way of doing that. We try all the
+# possibilities we know about. Note REG_PC should come first (REG_RIP
+# is also defined on solaris, but does the wrong thing).
+
+# OpenBSD doesn't have ucontext.h, but we can get PC from ucontext_t
+# by using signal.h.
+
+# The first argument of AC_PC_FROM_UCONTEXT will be invoked when we
+# cannot find a way to obtain PC from ucontext.
+
+AC_DEFUN([AC_PC_FROM_UCONTEXT],
+ [AC_CHECK_HEADERS(ucontext.h)
+ # Redhat 7 has <sys/ucontext.h>, but it barfs if we #include it directly
+ # (this was fixed in later redhats). <ucontext.h> works fine, so use that.
+ if grep "Red Hat Linux release 7" /etc/redhat-release >/dev/null 2>&1; then
+ AC_DEFINE(HAVE_SYS_UCONTEXT_H, 0, [<sys/ucontext.h> is broken on redhat 7])
+ ac_cv_header_sys_ucontext_h=no
+ else
+ AC_CHECK_HEADERS(sys/ucontext.h) # ucontext on OS X 10.6 (at least)
+ fi
+ AC_CHECK_HEADERS(cygwin/signal.h) # ucontext on cywgin
+ AC_MSG_CHECKING([how to access the program counter from a struct ucontext])
+ pc_fields=" uc_mcontext.gregs[[REG_PC]]" # Solaris x86 (32 + 64 bit)
+ pc_fields="$pc_fields uc_mcontext.gregs[[REG_EIP]]" # Linux (i386)
+ pc_fields="$pc_fields uc_mcontext.gregs[[REG_RIP]]" # Linux (x86_64)
+ pc_fields="$pc_fields uc_mcontext.sc_ip" # Linux (ia64)
+ pc_fields="$pc_fields uc_mcontext.uc_regs->gregs[[PT_NIP]]" # Linux (ppc)
+ pc_fields="$pc_fields uc_mcontext.gregs[[R15]]" # Linux (arm old [untested])
+ pc_fields="$pc_fields uc_mcontext.arm_pc" # Linux (arm arch 5)
+ pc_fields="$pc_fields uc_mcontext.gp_regs[[PT_NIP]]" # Suse SLES 11 (ppc64)
+ pc_fields="$pc_fields uc_mcontext.mc_eip" # FreeBSD (i386)
+ pc_fields="$pc_fields uc_mcontext.mc_rip" # FreeBSD (x86_64 [untested])
+ pc_fields="$pc_fields uc_mcontext.__gregs[[_REG_EIP]]" # NetBSD (i386)
+ pc_fields="$pc_fields uc_mcontext.__gregs[[_REG_RIP]]" # NetBSD (x86_64)
+ pc_fields="$pc_fields uc_mcontext->ss.eip" # OS X (i386, <=10.4)
+ pc_fields="$pc_fields uc_mcontext->__ss.__eip" # OS X (i386, >=10.5)
+ pc_fields="$pc_fields uc_mcontext->ss.rip" # OS X (x86_64)
+ pc_fields="$pc_fields uc_mcontext->__ss.__rip" # OS X (>=10.5 [untested])
+ pc_fields="$pc_fields uc_mcontext->ss.srr0" # OS X (ppc, ppc64 [untested])
+ pc_fields="$pc_fields uc_mcontext->__ss.__srr0" # OS X (>=10.5 [untested])
+ pc_field_found=false
+ for pc_field in $pc_fields; do
+ if ! $pc_field_found; then
+ # Prefer sys/ucontext.h to ucontext.h, for OS X's sake.
+ if test "x$ac_cv_header_cygwin_signal_h" = xyes; then
+ AC_TRY_COMPILE([#define _GNU_SOURCE 1
+ #include <cygwin/signal.h>],
+ [ucontext_t u; return u.$pc_field == 0;],
+ AC_DEFINE_UNQUOTED(PC_FROM_UCONTEXT, $pc_field,
+ How to access the PC from a struct ucontext)
+ AC_MSG_RESULT([$pc_field])
+ pc_field_found=true)
+ elif test "x$ac_cv_header_sys_ucontext_h" = xyes; then
+ AC_TRY_COMPILE([#define _GNU_SOURCE 1
+ #include <sys/ucontext.h>],
+ [ucontext_t u; return u.$pc_field == 0;],
+ AC_DEFINE_UNQUOTED(PC_FROM_UCONTEXT, $pc_field,
+ How to access the PC from a struct ucontext)
+ AC_MSG_RESULT([$pc_field])
+ pc_field_found=true)
+ elif test "x$ac_cv_header_ucontext_h" = xyes; then
+ AC_TRY_COMPILE([#define _GNU_SOURCE 1
+ #include <ucontext.h>],
+ [ucontext_t u; return u.$pc_field == 0;],
+ AC_DEFINE_UNQUOTED(PC_FROM_UCONTEXT, $pc_field,
+ How to access the PC from a struct ucontext)
+ AC_MSG_RESULT([$pc_field])
+ pc_field_found=true)
+ else # hope some standard header gives it to us
+ AC_TRY_COMPILE([],
+ [ucontext_t u; return u.$pc_field == 0;],
+ AC_DEFINE_UNQUOTED(PC_FROM_UCONTEXT, $pc_field,
+ How to access the PC from a struct ucontext)
+ AC_MSG_RESULT([$pc_field])
+ pc_field_found=true)
+ fi
+ fi
+ done
+ if ! $pc_field_found; then
+ pc_fields=" sc_eip" # OpenBSD (i386)
+ pc_fields="$pc_fields sc_rip" # OpenBSD (x86_64)
+ for pc_field in $pc_fields; do
+ if ! $pc_field_found; then
+ AC_TRY_COMPILE([#include <signal.h>],
+ [ucontext_t u; return u.$pc_field == 0;],
+ AC_DEFINE_UNQUOTED(PC_FROM_UCONTEXT, $pc_field,
+ How to access the PC from a struct ucontext)
+ AC_MSG_RESULT([$pc_field])
+ pc_field_found=true)
+ fi
+ done
+ fi
+ if ! $pc_field_found; then
+ [$1]
+ fi])
diff --git a/scripts/README b/scripts/README
new file mode 100644
index 000000000..70c763923
--- /dev/null
+++ b/scripts/README
@@ -0,0 +1,58 @@
+The scripts directory holds tools for use in building, generating, testing,
+and maintaining the Tor source code. It is mainly for use by developers.
+
+Code maintenance scripts
+------------------------
+
+maint/checkLogs.pl -- Verify that Tor log statements are unique.
+
+maint/check_config_macros.pl -- Look for autoconf tests whose results are
+never used.
+
+maint/checkOptionDocs.pl -- Make sure that Tor options are documented in the
+manpage, and that the manpage only documents real Tor options.
+
+maint/checkSpaces.pl -- Style checker for the Tor source code. Mainly checks
+whitespace.
+
+maint/findMergedChanges.pl -- Find a set of changes/* files that have been
+merged into an upstream version.
+
+maint/format_changelog.py -- Flow the changelog into the proper format.
+
+maint/redox.py -- Find places that should have DOCDOC comments to indicate a
+need for doxygen comments, and put those comments there.
+
+maint/updateVersions.pl -- Update the version number in the .nsi and windows
+orconfig.h files.
+
+
+Testing scripts
+---------------
+
+test/cov-blame -- Mash up the results of gcov with git blame. Mainly useful
+to find out who has been writing untested code.
+
+test/cov-diff -- Compare two directories of gcov files to identify changed
+lines without coverage.
+
+test/coverage -- Generates a directory full of gcov files. You need to use
+this script instead of calling gcov directly because of our confusingly named
+object files.
+
+test/scan-build.sh -- Example script for invoking clang's scan-build
+static analysis tools.
+
+
+Code generation scripts
+-----------------------
+
+codegen/gen_linux_syscalls.pl -- Generate a table mapping linux syscall
+numbers to their names.
+
+codegen/gen_server_ciphers.py -- Generate a sorted list of TLS ciphersuites
+for servers to choose from.
+
+codegen/get_mozilla_ciphers.py -- Generate a list of TLS ciphersuites for
+clients to use in order to look like Firefox.
+
diff --git a/scripts/codegen/gen_linux_syscalls.pl b/scripts/codegen/gen_linux_syscalls.pl
new file mode 100755
index 000000000..f985bad6c
--- /dev/null
+++ b/scripts/codegen/gen_linux_syscalls.pl
@@ -0,0 +1,37 @@
+#!/usr/bin/perl -w
+
+use strict;
+my %syscalls = ();
+
+while (<>) {
+ if (/^#define (__NR_\w+) /) {
+ $syscalls{$1} = 1;
+ }
+}
+
+print <<EOL;
+/* Automatically generated with
+ gen_linux_syscalls.pl /usr/include/asm/unistd*.h
+ Do not edit.
+ */
+static const struct {
+ int syscall_num; const char *syscall_name;
+} SYSCALLS_BY_NUMBER[] = {
+EOL
+
+for my $k (sort keys %syscalls) {
+ my $name = $k;
+ $name =~ s/^__NR_//;
+ print <<EOL;
+#ifdef $k
+ { $k, "$name" },
+#endif
+EOL
+
+}
+
+print <<EOL
+ {0, NULL}
+};
+
+EOL
diff --git a/scripts/codegen/gen_server_ciphers.py b/scripts/codegen/gen_server_ciphers.py
new file mode 100755
index 000000000..97ed9d046
--- /dev/null
+++ b/scripts/codegen/gen_server_ciphers.py
@@ -0,0 +1,115 @@
+#!/usr/bin/python
+# Copyright 2014, The Tor Project, Inc
+# See LICENSE for licensing information
+
+# This script parses openssl headers to find ciphersuite names, determines
+# which ones we should be willing to use as a server, and sorts them according
+# to preference rules.
+#
+# Run it on all the files in your openssl include directory.
+
+import re
+import sys
+
+EPHEMERAL_INDICATORS = [ "_EDH_", "_DHE_", "_ECDHE_" ]
+BAD_STUFF = [ "_DES_40_", "MD5", "_RC4_", "_DES_64_",
+ "_SEED_", "_CAMELLIA_", "_NULL" ]
+
+# these never get #ifdeffed.
+MANDATORY = [
+ "TLS1_TXT_DHE_RSA_WITH_AES_256_SHA",
+ "TLS1_TXT_DHE_RSA_WITH_AES_128_SHA",
+ "SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA",
+]
+
+def find_ciphers(filename):
+ with open(filename) as f:
+ for line in f:
+ m = re.search(r'(?:SSL3|TLS1)_TXT_\w+', line)
+ if m:
+ yield m.group(0)
+
+def usable_cipher(ciph):
+ ephemeral = False
+ for e in EPHEMERAL_INDICATORS:
+ if e in ciph:
+ ephemeral = True
+ if not ephemeral:
+ return False
+
+ if "_RSA_" not in ciph:
+ return False
+
+ for b in BAD_STUFF:
+ if b in ciph:
+ return False
+ return True
+
+# All fields we sort on, in order of priority.
+FIELDS = [ 'cipher', 'fwsec', 'mode', 'digest', 'bitlength' ]
+# Map from sorted fields to recognized value in descending order of goodness
+FIELD_VALS = { 'cipher' : [ 'AES', 'DES'],
+ 'fwsec' : [ 'ECDHE', 'DHE' ],
+ 'mode' : [ 'GCM', 'CBC' ],
+ 'digest' : [ 'SHA384', 'SHA256', 'SHA' ],
+ 'bitlength' : [ '256', '128', '192' ],
+}
+
+class Ciphersuite(object):
+ def __init__(self, name, fwsec, cipher, bitlength, mode, digest):
+ self.name = name
+ self.fwsec = fwsec
+ self.cipher = cipher
+ self.bitlength = bitlength
+ self.mode = mode
+ self.digest = digest
+
+ for f in FIELDS:
+ assert(getattr(self, f) in FIELD_VALS[f])
+
+ def sort_key(self):
+ return tuple(FIELD_VALS[f].index(getattr(self,f)) for f in FIELDS)
+
+
+def parse_cipher(ciph):
+ m = re.match('(?:TLS1|SSL3)_TXT_(EDH|DHE|ECDHE)_RSA(?:_WITH)?_(AES|DES)_(256|128|192)(|_CBC|_CBC3|_GCM)_(SHA|SHA256|SHA384)$', ciph)
+
+ if not m:
+ print "/* Couldn't parse %s ! */"%ciph
+ return None
+
+ fwsec, cipher, bits, mode, digest = m.groups()
+ if fwsec == 'EDH':
+ fwsec = 'DHE'
+
+ if mode in [ '_CBC3', '_CBC', '' ]:
+ mode = 'CBC'
+ elif mode == '_GCM':
+ mode = 'GCM'
+
+ return Ciphersuite(ciph, fwsec, cipher, bits, mode, digest)
+
+ALL_CIPHERS = []
+
+for fname in sys.argv[1:]:
+ ALL_CIPHERS += (parse_cipher(c)
+ for c in find_ciphers(fname)
+ if usable_cipher(c) )
+
+ALL_CIPHERS.sort(key=Ciphersuite.sort_key)
+
+for c in ALL_CIPHERS:
+ if c is ALL_CIPHERS[-1]:
+ colon = ';'
+ else:
+ colon = ' ":"'
+
+ if c.name in MANDATORY:
+ print " /* Required */"
+ print ' %s%s'%(c.name,colon)
+ else:
+ print "#ifdef %s"%c.name
+ print ' %s%s'%(c.name,colon)
+ print "#endif"
+
+
diff --git a/src/common/get_mozilla_ciphers.py b/scripts/codegen/get_mozilla_ciphers.py
index c7e9a84a0..0636eb365 100644
--- a/src/common/get_mozilla_ciphers.py
+++ b/scripts/codegen/get_mozilla_ciphers.py
@@ -41,12 +41,12 @@ fileA = open(ff('security/manager/ssl/src/nsNSSComponent.cpp'),'r')
inCipherSection = False
cipherLines = []
for line in fileA:
- if line.startswith('static CipherPref CipherPrefs'):
+ if line.startswith('static const CipherPref sCipherPrefs[]'):
# Get the starting boundary of the Cipher Preferences
inCipherSection = True
elif inCipherSection:
line = line.strip()
- if line.startswith('{NULL, 0}'):
+ if line.startswith('{ nullptr, 0}'):
# At the ending boundary of the Cipher Prefs
break
else:
@@ -56,12 +56,30 @@ fileA.close()
# Parse the lines and put them into a dict
ciphers = {}
cipher_pref = {}
+key_pending = None
for line in cipherLines:
- m = re.search(r'^{\s*\"([^\"]+)\",\s*(\S*)\s*}', line)
+ m = re.search(r'^{\s*\"([^\"]+)\",\s*(\S+)\s*(?:,\s*(true|false))?\s*}', line)
if m:
- key,value = m.groups()
- ciphers[key] = value
- cipher_pref[value] = key
+ assert not key_pending
+ key,value,enabled = m.groups()
+ if enabled == 'true':
+ ciphers[key] = value
+ cipher_pref[value] = key
+ continue
+ m = re.search(r'^{\s*\"([^\"]+)\",', line)
+ if m:
+ assert not key_pending
+ key_pending = m.group(1)
+ continue
+ m = re.search(r'^\s*(\S+)(?:,\s*(true|false))?\s*}', line)
+ if m:
+ assert key_pending
+ key = key_pending
+ value,enabled = m.groups()
+ key_pending = None
+ if enabled == 'true':
+ ciphers[key] = value
+ cipher_pref[value] = key
####
# Now find the correct order for the ciphers
diff --git a/contrib/checkLogs.pl b/scripts/maint/checkLogs.pl
index b00503e9a..b00503e9a 100755
--- a/contrib/checkLogs.pl
+++ b/scripts/maint/checkLogs.pl
diff --git a/contrib/checkOptionDocs.pl b/scripts/maint/checkOptionDocs.pl
index 23e57b489..94307c6ce 100755
--- a/contrib/checkOptionDocs.pl
+++ b/scripts/maint/checkOptionDocs.pl
@@ -41,8 +41,9 @@ loadTorrc("./src/config/torrc.sample.in", \%torrcSampleOptions);
my $considerNextLine = 0;
open(F, "./doc/tor.1.txt") or die;
while (<F>) {
- if (m!^\*\*([A-Za-z0-9_]+)\*\*!) {
- $manPageOptions{$1} = 1;
+ if (m!^(?:\[\[([A-za-z0-9_]+)\]\] *)?\*\*([A-Za-z0-9_]+)\*\*!) {
+ $manPageOptions{$2} = 1;
+ print "Missing an anchor: $2\n" unless (defined $1 or $2 eq 'tor');
}
}
close F;
diff --git a/contrib/checkSpace.pl b/scripts/maint/checkSpace.pl
index 682dbced0..682dbced0 100755
--- a/contrib/checkSpace.pl
+++ b/scripts/maint/checkSpace.pl
diff --git a/scripts/maint/check_config_macros.pl b/scripts/maint/check_config_macros.pl
new file mode 100755
index 000000000..bcde2becc
--- /dev/null
+++ b/scripts/maint/check_config_macros.pl
@@ -0,0 +1,20 @@
+#!/usr/bin/perl -w
+
+use strict;
+
+my @macros = ();
+
+open(F, 'orconfig.h.in');
+while(<F>) {
+ if (/^#undef +([A-Za-z0-9_]*)/) {
+ push @macros, $1;
+ }
+}
+close F;
+
+for my $m (@macros) {
+ my $s = `git grep '$m' src`;
+ if ($s eq '') {
+ print "Unused: $m\n";
+ }
+}
diff --git a/contrib/findMergedChanges.pl b/scripts/maint/findMergedChanges.pl
index 46e070f94..d6c4105b7 100755
--- a/contrib/findMergedChanges.pl
+++ b/scripts/maint/findMergedChanges.pl
@@ -8,7 +8,7 @@ sub nChanges {
local *F;
# requires perl 5.8. Avoids shell issues if we ever get a changes
# file named by the parents of Little Johnny Tables.
- open F, "-|", "git", "log", "--pretty=format:%H", $branches, "--", $fname
+ open F, "-|", "git", "log", "--no-merges", "--pretty=format:%H", $branches, "--", $fname
or die "$!";
my @changes = <F>;
return scalar @changes
@@ -19,15 +19,15 @@ my $look_for_type = "merged";
if (! @ARGV) {
print <<EOF
Usage:
- findMergedChanges.pl [--merged/--unmerged/--weird/--list] changes/*
+ findMergedChanges.pl [--merged/--unmerged/--weird/--list] [--branch=<branchname] [--head=<branchname>] changes/*
-A change is "merged" if it has ever been merged to release-0.2.2 and it has had
+A change is "merged" if it has ever been merged to release-0.2.4 and it has had
no subsequent changes in master.
-A change is "unmerged" if it has never been merged to release-0.2.2 and it
+A change is "unmerged" if it has never been merged to release-0.2.4 and it
has had changes in master.
-A change is "weird" if it has been merged to release-0.2.2 and it *has* had
+A change is "weird" if it has been merged to release-0.2.4 and it *has* had
subsequent changes in master.
Suggested application:
@@ -36,7 +36,8 @@ Suggested application:
EOF
}
-my $target_branch = "origin/release-0.2.2";
+my $target_branch = "origin/release-0.2.4";
+my $head = "origin/master";
while (@ARGV and $ARGV[0] =~ /^--/) {
my $flag = shift @ARGV;
@@ -44,6 +45,8 @@ while (@ARGV and $ARGV[0] =~ /^--/) {
$look_for_type = $1;
} elsif ($flag =~ /^--branch=(\S+)/) {
$target_branch = $1;
+ } elsif ($flag =~ /^--head=(\S+)/) {
+ $head = $1;
} else {
die "Unrecognized flag $flag";
}
@@ -51,7 +54,7 @@ while (@ARGV and $ARGV[0] =~ /^--/) {
for my $changefile (@ARGV) {
my $n_merged = nChanges($target_branch, $changefile);
- my $n_postmerged = nChanges("${target_branch}..origin/master", $changefile);
+ my $n_postmerged = nChanges("${target_branch}..${head}", $changefile);
my $type;
if ($n_merged != 0 and $n_postmerged == 0) {
diff --git a/scripts/maint/format_changelog.py b/scripts/maint/format_changelog.py
new file mode 100755
index 000000000..86f5c5039
--- /dev/null
+++ b/scripts/maint/format_changelog.py
@@ -0,0 +1,298 @@
+#!/usr/bin/python
+# Copyright (c) 2014, The Tor Project, Inc.
+# See LICENSE for licensing information
+#
+# This script reformats a section of the changelog to wrap everything to
+# the right width and put blank lines in the right places. Eventually,
+# it might include a linter.
+#
+# To run it, pipe a section of the changelog (starting with "Changes
+# in Tor 0.x.y.z-alpha" through the script.)
+
+import os
+import re
+import sys
+
+# ==============================
+# Oh, look! It's a cruddy approximation to Knuth's elegant text wrapping
+# algorithm, with totally ad hoc parameters!
+#
+# We're trying to minimize:
+# The total of the cubes of ragged space on underflowed intermediate lines,
+# PLUS
+# 100 * the fourth power of overflowed characters
+# PLUS
+# .1 * a bit more than the cube of ragged space on the last line.
+# PLUS
+# OPENPAREN_PENALTY for each line that starts with (
+#
+# We use an obvious dynamic programming algorithm to sorta approximate this.
+# It's not coded right or optimally, but it's fast enough for changelogs
+#
+# (Code found in an old directory of mine, lightly cleaned. -NM)
+
+NO_HYPHENATE=set("""
+pf-divert
+""".split())
+
+LASTLINE_UNDERFLOW_EXPONENT = 1
+LASTLINE_UNDERFLOW_PENALTY = 1
+
+UNDERFLOW_EXPONENT = 3
+UNDERFLOW_PENALTY = 1
+
+OVERFLOW_EXPONENT = 4
+OVERFLOW_PENALTY = 2000
+
+ORPHAN_PENALTY = 10000
+
+OPENPAREN_PENALTY = 200
+
+def generate_wrapping(words, divisions):
+ lines = []
+ last = 0
+ for i in divisions:
+ w = words[last:i]
+ last = i
+ line = " ".join(w).replace("\xff ","-").replace("\xff","-")
+ lines.append(line)
+ return lines
+
+def wrapping_quality(words, divisions, width1, width2):
+ total = 0.0
+
+ lines = generate_wrapping(words, divisions)
+ for line in lines:
+ length = len(line)
+ if line is lines[0]:
+ width = width1
+ else:
+ width = width2
+
+ if line[0:1] == '(':
+ total += OPENPAREN_PENALTY
+
+ if length > width:
+ total += OVERFLOW_PENALTY * (
+ (length - width) ** OVERFLOW_EXPONENT )
+ else:
+ if line is lines[-1]:
+ e,p = (LASTLINE_UNDERFLOW_EXPONENT, LASTLINE_UNDERFLOW_PENALTY)
+ if " " not in line:
+ total += ORPHAN_PENALTY
+ else:
+ e,p = (UNDERFLOW_EXPONENT, UNDERFLOW_PENALTY)
+
+ total += p * ((width - length) ** e)
+
+ return total
+
+def wrap_graf(words, prefix_len1=0, prefix_len2=0, width=72):
+ wrapping_after = [ (0,), ]
+
+ w1 = width - prefix_len1
+ w2 = width - prefix_len2
+
+ for i in range(1, len(words)+1):
+ best_so_far = None
+ best_score = 1e300
+ for j in range(i):
+ t = wrapping_after[j]
+ t1 = t[:-1] + (i,)
+ t2 = t + (i,)
+ wq1 = wrapping_quality(words, t1, w1, w2)
+ wq2 = wrapping_quality(words, t2, w1, w2)
+
+ if wq1 < best_score:
+ best_so_far = t1
+ best_score = wq1
+ if wq2 < best_score:
+ best_so_far = t2
+ best_score = wq2
+ wrapping_after.append( best_so_far )
+
+ lines = generate_wrapping(words, wrapping_after[-1])
+
+ return lines
+
+def hyphenateable(word):
+ if re.match(r'^[^\d\-]\D*-', word):
+ stripped = re.sub(r'^\W+','',word)
+ stripped = re.sub(r'\W+$','',word)
+ return stripped not in NO_HYPHENATE
+ else:
+ return False
+
+def split_paragraph(s):
+ "Split paragraph into words; tuned for Tor."
+
+ r = []
+ for word in s.split():
+ if hyphenateable(word):
+ while "-" in word:
+ a,word = word.split("-",1)
+ r.append(a+"\xff")
+ r.append(word)
+ return r
+
+def fill(text, width, initial_indent, subsequent_indent):
+ words = split_paragraph(text)
+ lines = wrap_graf(words, len(initial_indent), len(subsequent_indent),
+ width)
+ res = [ initial_indent, lines[0], "\n" ]
+ for line in lines[1:]:
+ res.append(subsequent_indent)
+ res.append(line)
+ res.append("\n")
+ return "".join(res)
+
+# ==============================
+
+
+TP_MAINHEAD = 0
+TP_HEADTEXT = 1
+TP_BLANK = 2
+TP_SECHEAD = 3
+TP_ITEMFIRST = 4
+TP_ITEMBODY = 5
+TP_END = 6
+
+def head_parser(line):
+ if re.match(r'^[A-Z]', line):
+ return TP_MAINHEAD
+ elif re.match(r'^ o ', line):
+ return TP_SECHEAD
+ elif re.match(r'^\s*$', line):
+ return TP_BLANK
+ else:
+ return TP_HEADTEXT
+
+def body_parser(line):
+ if re.match(r'^ o ', line):
+ return TP_SECHEAD
+ elif re.match(r'^ -',line):
+ return TP_ITEMFIRST
+ elif re.match(r'^ \S', line):
+ return TP_ITEMBODY
+ elif re.match(r'^\s*$', line):
+ return TP_BLANK
+ elif re.match(r'^Changes in', line):
+ return TP_END
+ else:
+ print "Weird line %r"%line
+
+class ChangeLog(object):
+ def __init__(self):
+ self.mainhead = None
+ self.headtext = []
+ self.curgraf = None
+ self.sections = []
+ self.cursection = None
+ self.lineno = 0
+
+ def addLine(self, tp, line):
+ self.lineno += 1
+
+ if tp == TP_MAINHEAD:
+ assert not self.mainhead
+ self.mainhead = line
+
+ elif tp == TP_HEADTEXT:
+ if self.curgraf is None:
+ self.curgraf = []
+ self.headtext.append(self.curgraf)
+ self.curgraf.append(line)
+
+ elif tp == TP_BLANK:
+ self.curgraf = None
+
+ elif tp == TP_SECHEAD:
+ self.cursection = [ self.lineno, line, [] ]
+ self.sections.append(self.cursection)
+
+ elif tp == TP_ITEMFIRST:
+ item = ( self.lineno, [ [line] ])
+ self.curgraf = item[1][0]
+ self.cursection[2].append(item)
+
+ elif tp == TP_ITEMBODY:
+ if self.curgraf is None:
+ self.curgraf = []
+ self.cursection[2][-1][1].append(self.curgraf)
+ self.curgraf.append(line)
+
+ else:
+ assert "This" is "unreachable"
+
+ def lint_head(self, line, head):
+ m = re.match(r'^ *o ([^\(]+)((?:\([^\)]+\))?):', head)
+ if not m:
+ print >>sys.stderr, "Weird header format on line %s"%line
+
+ def lint_item(self, line, grafs, head_type):
+ pass
+
+ def lint(self):
+ self.head_lines = {}
+ for sec_line, sec_head, items in self.sections:
+ head_type = self.lint_head(sec_line, sec_head)
+ for item_line, grafs in items:
+ self.lint_item(item_line, grafs, head_type)
+
+ def dumpGraf(self,par,indent1,indent2=-1):
+ if indent2 == -1:
+ indent2 = indent1
+ text = " ".join(re.sub(r'\s+', ' ', line.strip()) for line in par)
+
+ sys.stdout.write(fill(text,
+ width=72,
+ initial_indent=" "*indent1,
+ subsequent_indent=" "*indent2))
+
+ def dump(self):
+ print self.mainhead
+ for par in self.headtext:
+ self.dumpGraf(par, 2)
+ print
+ for _,head,items in self.sections:
+ if not head.endswith(':'):
+ print >>sys.stderr, "adding : to %r"%head
+ head = head + ":"
+ print head
+ for _,grafs in items:
+ self.dumpGraf(grafs[0],4,6)
+ for par in grafs[1:]:
+ print
+ self.dumpGraf(par,6,6)
+ print
+ print
+
+CL = ChangeLog()
+parser = head_parser
+
+sys.stdin = open('ChangeLog', 'r')
+
+for line in sys.stdin:
+ line = line.rstrip()
+ tp = parser(line)
+
+ if tp == TP_SECHEAD:
+ parser = body_parser
+ elif tp == TP_END:
+ nextline = line
+ break
+
+ CL.addLine(tp,line)
+
+CL.lint()
+
+sys.stdout = open('ChangeLog.new', 'w')
+
+CL.dump()
+
+print nextline
+
+for line in sys.stdin:
+ sys.stdout.write(line)
+
+os.rename('ChangeLog.new', 'ChangeLog')
diff --git a/contrib/redox.py b/scripts/maint/redox.py
index 43200dd07..fa816a726 100755
--- a/contrib/redox.py
+++ b/scripts/maint/redox.py
@@ -1,6 +1,6 @@
#!/usr/bin/python
#
-# Copyright (c) 2008-2012 The Tor Project, Inc.
+# Copyright (c) 2008-2013, The Tor Project, Inc.
# See LICENSE for licensing information.
#
# Hi!
@@ -10,7 +10,7 @@
# to tell you where documentation should go!
# To use me, edit the stuff below...
# ...and run 'make doxygen 2>doxygen.stderr' ...
-# ...and run ./contrib/redox.py < doxygen.stderr !
+# ...and run ./scripts/maint/redox.py < doxygen.stderr !
# I'll make a bunch of new files by adding missing DOCDOC comments to your
# source. Those files will have names like ./src/common/util.c.newdoc.
# You will want to look over the changes by hand before checking them in.
@@ -21,7 +21,7 @@
# 1. make doxygen 1>doxygen.stdout 2>doxygen.stderr.
# 2. grep Warning doxygen.stderr | grep -v 'is not documented' | less
# [This will tell you about all the bogus doxygen output you have]
-# 3. python ./contrib/redox.py <doxygen.stderr
+# 3. python ./scripts/maint/redox.py <doxygen.stderr
# [This will make lots of .newdoc files with DOCDOC comments for
# whatever was missing documentation.]
# 4. Look over those .newdoc files, and see which docdoc comments you
@@ -62,7 +62,7 @@ KINDS = [ "type", "field", "typedef", "define", "function", "variable",
NODOC_LINE_RE = re.compile(r'^([^:]+):(\d+): (\w+): (.*) is not documented\.$')
-THING_RE = re.compile(r'^Member ([a-zA-Z0-9_]+).*\((typedef|define|function|variable|enumeration)\) of (file|class) ')
+THING_RE = re.compile(r'^Member ([a-zA-Z0-9_]+).*\((typedef|define|function|variable|enumeration|macro definition)\) of (file|class) ')
SKIP_NAMES = [re.compile(s) for s in SKIP_NAME_PATTERNS]
@@ -105,9 +105,13 @@ def findline(lines, lineno, ident):
"""Given a list of all the lines in the file (adjusted so 1-indexing works),
a line number that ident is alledgedly on, and ident, I figure out
the line where ident was really declared."""
+ lno = lineno
for lineno in xrange(lineno, 0, -1):
- if ident in lines[lineno]:
- return lineno
+ try:
+ if ident in lines[lineno]:
+ return lineno
+ except IndexError:
+ continue
return None
@@ -126,8 +130,16 @@ def hascomment(lines, lineno, kind):
def hasdocdoc(lines, lineno, kind):
"""I return true if it looks like there's already a docdoc comment about
the thing on lineno of lines of type kind."""
- if "DOCDOC" in lines[lineno] or "DOCDOC" in lines[lineno-1]:
- return True
+ try:
+ if "DOCDOC" in lines[lineno]:
+ return True
+ except IndexError:
+ pass
+ try:
+ if "DOCDOC" in lines[lineno-1]:
+ return True
+ except IndexError:
+ pass
if kind == 'function' and FUNC_PAT.match(lines[lineno]):
if "DOCDOC" in lines[lineno-2]:
return True
@@ -210,6 +222,7 @@ def applyComments(fn, entries):
e = read()
for fn, errs in e.iteritems():
+ print `(fn, errs)`
comments = checkf(fn, errs)
if comments:
applyComments(fn, comments)
diff --git a/scripts/maint/sortChanges.py b/scripts/maint/sortChanges.py
new file mode 100755
index 000000000..f70490bad
--- /dev/null
+++ b/scripts/maint/sortChanges.py
@@ -0,0 +1,40 @@
+#!/usr/bin/python
+
+import re
+import sys
+
+def fetch(fn):
+ with open(fn) as f:
+ s = f.read()
+ s = "%s\n" % s.rstrip()
+ return s
+
+def score(s):
+ m = re.match(r'^ +o (.*)', s)
+ if not m:
+ print >>sys.stderr, "Can't score %r"%s
+ lw = m.group(1).lower()
+ if lw.startswith("major feature"):
+ score = 0
+ elif lw.startswith("major bug"):
+ score = 1
+ elif lw.startswith("major"):
+ score = 2
+ elif lw.startswith("minor feature"):
+ score = 10
+ elif lw.startswith("minor bug"):
+ score = 11
+ elif lw.startswith("minor"):
+ score = 12
+ else:
+ score = 100
+
+ return (score, lw, s)
+
+
+changes = [ score(fetch(fn)) for fn in sys.argv[1:] if not fn.endswith('~') ]
+
+changes.sort()
+
+for _, _, s in changes:
+ print s
diff --git a/contrib/updateVersions.pl b/scripts/maint/updateVersions.pl
index 76b6fe567..15c83b80a 100755
--- a/contrib/updateVersions.pl
+++ b/scripts/maint/updateVersions.pl
@@ -1,8 +1,10 @@
#!/usr/bin/perl -w
-$CONFIGURE_IN = './configure.in';
+$CONFIGURE_IN = './configure.ac';
$ORCONFIG_H = './src/win32/orconfig.h';
-$TOR_NSI = './contrib/tor-mingw.nsi.in';
+$TOR_NSI = './contrib/win32build/tor-mingw.nsi.in';
+
+$quiet = 1;
sub demand {
my $fn = shift;
@@ -13,18 +15,18 @@ demand($CONFIGURE_IN);
demand($ORCONFIG_H);
demand($TOR_NSI);
-# extract version from configure.in
+# extract version from configure.ac
open(F, $CONFIGURE_IN) or die "$!";
$version = undef;
while (<F>) {
- if (/AM_INIT_AUTOMAKE\(tor,\s*([^\)]*)\)/) {
+ if (/AC_INIT\(\[tor\],\s*\[([^\]]*)\]\)/) {
$version = $1;
last;
}
}
die "No version found" unless $version;
-print "Tor version is $version\n";
+print "Tor version is $version\n" unless $quiet;
close F;
sub correctversion {
@@ -36,7 +38,7 @@ sub correctversion {
if ($s =~ /^$defchar(?:)define\s+VERSION\s+\"([^\"]+)\"/m) {
$oldver = $1;
if ($oldver ne $version) {
- print "Version mismatch in $fn: It thinks that the version is $oldver. Fixing.\n";
+ print "Version mismatch in $fn: It thinks that the version is $oldver. I think it's $version. Fixing.\n";
$line = $defchar . "define VERSION \"$version\"";
open(F, ">$fn.bak");
print F $s;
@@ -44,9 +46,9 @@ sub correctversion {
$s =~ s/^$defchar(?:)define\s+VERSION.*?$/$line/m;
open(F, ">$fn");
print F $s;
- close F;
+ close F;
} else {
- print "$fn has the correct version. Good.\n";
+ print "$fn has the correct version. Good.\n" unless $quiet;
}
} else {
print "Didn't find a version line in $fn -- uh oh.\n";
diff --git a/scripts/test/cov-blame b/scripts/test/cov-blame
new file mode 100755
index 000000000..601f21195
--- /dev/null
+++ b/scripts/test/cov-blame
@@ -0,0 +1,48 @@
+#!/usr/bin/python
+
+import os
+import re
+import subprocess
+import sys
+
+def handle_file(source_fname, cov_fname):
+
+ lines_blm = subprocess.Popen(["git", "blame", source_fname], stdout=subprocess.PIPE).stdout.readlines()
+ lines_cov = open(cov_fname).readlines()
+
+ # XXXX expensive!
+ while re.match(r'\s*-:\s*0:', lines_cov[0]):
+ del lines_cov[0]
+
+ if len(lines_blm) != len(lines_cov):
+ print >>sys.stderr, "MISMATCH IN NUMBER OF LINES in",source_fname
+
+ for b,c in zip(lines_blm, lines_cov):
+ m = re.match(r'\s*([^\s:]+):', c)
+ if not m:
+ print >>sys.stderr, "CONFUSING LINE %r"% c
+ cov = 'X'
+ elif m.group(1) == '-':
+ cov = '-'
+ elif m.group(1)[0] == '#':
+ cov = '#'
+ elif m.group(1)[0].isdigit():
+ cov = '1'
+ else:
+ print >>sys.stderr, "CONFUSING LINE %r"% c
+ cov = 'X'
+
+ print cov, b,
+
+COV_DIR = sys.argv[1]
+SOURCES = sys.argv[2:]
+
+for fn in SOURCES:
+ _, base = os.path.split(fn)
+ cfn = os.path.join(COV_DIR, base)
+ cfn += ".gcov"
+ if os.path.exists(cfn):
+ handle_file(fn, cfn)
+ else:
+ print >>sys.stderr, "NO FILE EXISTS CALLED ",cfn
+
diff --git a/scripts/test/cov-diff b/scripts/test/cov-diff
new file mode 100755
index 000000000..33a54802b
--- /dev/null
+++ b/scripts/test/cov-diff
@@ -0,0 +1,17 @@
+#!/bin/sh
+# Copyright 2013 The Tor Project, Inc.
+# See LICENSE for licensing information.
+
+# cov-diff -- compare two directories full of gcov files.
+
+DIRA="$1"
+DIRB="$2"
+
+for A in $DIRA/*; do
+ B=$DIRB/`basename $A`
+ perl -pe 's/^\s*\d+:/ 1:/; s/^([^:]+:)[\d\s]+:/$1/;' "$A" > "$A.tmp"
+ perl -pe 's/^\s*\d+:/ 1:/; s/^([^:]+:)[\d\s]+:/$1/;' "$B" > "$B.tmp"
+ diff -u "$A.tmp" "$B.tmp"
+ rm "$A.tmp" "$B.tmp"
+done
+
diff --git a/scripts/test/coverage b/scripts/test/coverage
new file mode 100755
index 000000000..f4ae47582
--- /dev/null
+++ b/scripts/test/coverage
@@ -0,0 +1,46 @@
+#!/bin/sh
+# Copyright 2013 The Tor Project, Inc.
+# See LICENSE for licensing information.
+
+# coverage -- run gcov on the appropriate set of object files to extract
+# coverage information.
+
+dst=$1
+
+for fn in src/or/*.c src/common/*.c; do
+ BN=`basename $fn`
+ DN=`dirname $fn`
+ F=`echo $BN | sed -e 's/\.c$//;'`
+ GC="${BN}.gcov"
+ # Figure out the object file names
+ ONS=`echo ${DN}/src_*-${F}.o`
+ ONS_WILDCARD_LITERAL="${DN}/src_*-${F}.o"
+ # If the wildcard didn't expand, no files
+ if [ "$ONS" != "${ONS_WILDCARD_LITERAL}" ]
+ then
+ for on in $ONS; do
+ # We should have a gcno file
+ GCNO=`echo $on | sed -e 's/\.o$/\.gcno/;'`
+ if [ -e $GCNO ]
+ then
+ # No need to test for gcda, since gcov assumes no execution
+ # if it's absent
+ rm -f $GC
+ gcov -o $on $fn
+ if [ -e $GC ]
+ then
+ if [ -n $dst ]
+ then
+ mv $GC $dst/$GC
+ fi
+ else
+ echo "gcov -o $on $fn didn't make a .gcov file"
+ fi
+ else
+ echo "Couldn't find gcno file for $on"
+ fi
+ done
+ else
+ echo "No object file found matching source file $fn"
+ fi
+done
diff --git a/scripts/test/scan-build.sh b/scripts/test/scan-build.sh
new file mode 100644
index 000000000..623b227fe
--- /dev/null
+++ b/scripts/test/scan-build.sh
@@ -0,0 +1,49 @@
+#!/bin/sh
+# Copyright 2014 The Tor Project, Inc
+# See LICENSE for licensing information
+#
+# This script is used for running a bunch of clang scan-build checkers
+# on Tor.
+#
+# It has hardwired paths for Nick's desktop at the moment.
+
+CHECKERS="\
+ --use-analyzer=/opt/clang-3.4/bin/clang \
+ -disable-checker deadcode.DeadStores \
+ -enable-checker alpha.core.CastSize \
+ -enable-checker alpha.core.CastToStruct \
+ -enable-checker alpha.core.IdenticalExpr \
+ -enable-checker alpha.core.SizeofPtr \
+ -enable-checker alpha.security.ArrayBoundV2 \
+ -enable-checker alpha.security.MallocOverflow \
+ -enable-checker alpha.security.ReturnPtrRange \
+ -enable-checker alpha.unix.SimpleStream
+ -enable-checker alpha.unix.cstring.BufferOverlap \
+ -enable-checker alpha.unix.cstring.NotNullTerminated \
+ -enable-checker alpha.unix.cstring.OutOfBounds \
+ -enable-checker alpha.core.FixedAddr \
+ -enable-checker security.insecureAPI.strcpy
+"
+
+/opt/clang-3.4/bin/scan-build/scan-build \
+ $CHECKERS \
+ --use-analyzer=/opt/clang-3.4/bin/clang \
+ ./configure
+
+/opt/clang-3.4/bin/scan-build/scan-build \
+ $CHECKERS \
+ --use-analyzer=/opt/clang-3.4/bin/clang \
+ make -j2
+
+
+# Haven't tried this yet.
+# -enable-checker alpha.unix.PthreadLock
+
+# This one gives a false positive on every strcmp.
+# -enable-checker alpha.core.PointerSub
+
+# This one hates it when we stick a nonzero const in a pointer.
+# -enable-checker alpha.core.FixedAddr
+
+# This one crashes sometimes for me.
+# -enable-checker alpha.deadcode.IdempotentOperations
diff --git a/src/Makefile.am b/src/Makefile.am
deleted file mode 100644
index fa2dd560a..000000000
--- a/src/Makefile.am
+++ /dev/null
@@ -1,5 +0,0 @@
-
-# leave in dependency order, since common must be built first
-SUBDIRS = common or test tools win32 config
-DIST_SUBDIRS = common or test tools win32 config
-
diff --git a/src/common/Makefile.am b/src/common/Makefile.am
deleted file mode 100644
index 5e7684259..000000000
--- a/src/common/Makefile.am
+++ /dev/null
@@ -1,67 +0,0 @@
-
-noinst_LIBRARIES = libor.a libor-crypto.a libor-event.a
-
-EXTRA_DIST = common_sha1.i sha256.c Makefile.nmake
-
-#CFLAGS = -Wall -Wpointer-arith -O2
-
-if USE_OPENBSD_MALLOC
-libor_extra_source=OpenBSD_malloc_Linux.c
-else
-libor_extra_source=
-endif
-
-libor_a_SOURCES = \
- address.c \
- compat.c \
- container.c \
- di_ops.c \
- log.c \
- memarea.c \
- mempool.c \
- procmon.c \
- util.c \
- util_codedigest.c \
- $(libor_extra_source)
-
-libor_crypto_a_SOURCES = \
- aes.c \
- crypto.c \
- torgzip.c \
- tortls.c
-
-libor_event_a_SOURCES = compat_libevent.c
-
-noinst_HEADERS = \
- address.h \
- aes.h \
- ciphers.inc \
- compat.h \
- compat_libevent.h \
- container.h \
- crypto.h \
- di_ops.h \
- ht.h \
- memarea.h \
- mempool.h \
- procmon.h \
- strlcat.c \
- strlcpy.c \
- torgzip.h \
- torint.h \
- torlog.h \
- tortls.h \
- util.h
-
-common_sha1.i: $(libor_SOURCES) $(libor_crypto_a_SOURCES) $(noinst_HEADERS)
- if test "@SHA1SUM@" != none; then \
- (cd "$(srcdir)" && "@SHA1SUM@" $(libor_SOURCES) $(libor_crypto_a_SOURCES) $(noinst_HEADERS)) | "@SED@" -n 's/^\(.*\)$$/"\1\\n"/p' > common_sha1.i; \
- elif test "@OPENSSL@" != none; then \
- (cd "$(srcdir)" && "@OPENSSL@" sha1 $(libor_SOURCES) $(libor_crypto_a_SOURCES) $(noinst_HEADERS)) | "@SED@" -n 's/SHA1(\(.*\))= \(.*\)/"\2 \1\\n"/p' > common_sha1.i; \
- else \
- rm common_sha1.i; \
- touch common_sha1.i; \
- fi
-
-util_codedigest.o: common_sha1.i
-crypto.o: sha256.c
diff --git a/src/common/Makefile.nmake b/src/common/Makefile.nmake
index e54827367..0ebeaaaf7 100644
--- a/src/common/Makefile.nmake
+++ b/src/common/Makefile.nmake
@@ -1,15 +1,19 @@
all: libor.lib libor-crypto.lib libor-event.lib
-CFLAGS = /I ..\win32 /I ..\..\..\build-alpha\include
+CFLAGS = /I ..\win32 /I ..\..\..\build-alpha\include /I ..\ext
LIBOR_OBJECTS = address.obj compat.obj container.obj di_ops.obj \
log.obj memarea.obj mempool.obj procmon.obj util.obj \
util_codedigest.obj
-LIBOR_CRYPTO_OBJECTS = aes.obj crypto.obj torgzip.obj tortls.obj
+LIBOR_CRYPTO_OBJECTS = aes.obj crypto.obj torgzip.obj tortls.obj \
+ crypto_curve25519.obj curve25519-donna.obj
LIBOR_EVENT_OBJECTS = compat_libevent.obj
+curve25519-donna.obj: ..\ext\curve25519_donna\curve25519-donna.c
+ $(CC) $(CFLAGS) /D inline=_inline /c ..\ext\curve25519_donna\curve25519-donna.c
+
libor.lib: $(LIBOR_OBJECTS)
lib $(LIBOR_OBJECTS) /out:libor.lib
@@ -18,3 +22,6 @@ libor-crypto.lib: $(LIBOR_CRYPTO_OBJECTS)
libor-event.lib: $(LIBOR_EVENT_OBJECTS)
lib $(LIBOR_EVENT_OBJECTS) /out:libor-event.lib
+
+clean:
+ del *.obj *.lib libor*.lib
diff --git a/src/common/address.c b/src/common/address.c
index df26f61f8..2825b123d 100644
--- a/src/common/address.c
+++ b/src/common/address.c
@@ -1,6 +1,6 @@
/* Copyright (c) 2003-2004, Roger Dingledine
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -14,6 +14,7 @@
#include "address.h"
#include "torlog.h"
#include "container.h"
+#include "sandbox.h"
#ifdef _WIN32
#include <process.h>
@@ -181,6 +182,16 @@ tor_addr_make_unspec(tor_addr_t *a)
a->family = AF_UNSPEC;
}
+/** Set address <b>a</b> to the null address in address family <b>family</b>.
+ * The null address for AF_INET is 0.0.0.0. The null address for AF_INET6 is
+ * [::]. AF_UNSPEC is all null. */
+void
+tor_addr_make_null(tor_addr_t *a, sa_family_t family)
+{
+ memset(a, 0, sizeof(*a));
+ a->family = family;
+}
+
/** Similar behavior to Unix gethostbyname: resolve <b>name</b>, and set
* *<b>addr</b> to the proper IP address and family. The <b>family</b>
* argument (which must be AF_INET, AF_INET6, or AF_UNSPEC) declares a
@@ -224,8 +235,10 @@ tor_addr_lookup(const char *name, uint16_t family, tor_addr_t *addr)
memset(&hints, 0, sizeof(hints));
hints.ai_family = family;
hints.ai_socktype = SOCK_STREAM;
- err = getaddrinfo(name, NULL, &hints, &res);
- if (!err) {
+ err = sandbox_getaddrinfo(name, NULL, &hints, &res);
+ /* The check for 'res' here shouldn't be necessary, but it makes static
+ * analysis tools happy. */
+ if (!err && res) {
best = NULL;
for (res_p = res; res_p; res_p = res_p->ai_next) {
if (family == AF_UNSPEC) {
@@ -305,7 +318,8 @@ tor_addr_lookup(const char *name, uint16_t family, tor_addr_t *addr)
* also treated as internal for now.)
*/
int
-tor_addr_is_internal(const tor_addr_t *addr, int for_listening)
+tor_addr_is_internal_(const tor_addr_t *addr, int for_listening,
+ const char *filename, int lineno)
{
uint32_t iph4 = 0;
uint32_t iph6[4];
@@ -355,8 +369,8 @@ tor_addr_is_internal(const tor_addr_t *addr, int for_listening)
/* unknown address family... assume it's not safe for external use */
/* rather than tor_assert(0) */
- log_warn(LD_BUG, "tor_addr_is_internal() called with a non-IP address of "
- "type %d", (int)v_family);
+ log_warn(LD_BUG, "tor_addr_is_internal() called from %s:%d with a "
+ "non-IP address of type %d", filename, lineno, (int)v_family);
tor_fragile_assert();
return 1;
}
@@ -558,9 +572,22 @@ tor_addr_to_PTR_name(char *out, size_t outlen,
*
* Return an address family on success, or -1 if an invalid address string is
* provided.
+ *
+ * If 'flags & TAPMP_EXTENDED_STAR' is false, then the wildcard address '*'
+ * yield an IPv4 wildcard.
+ *
+ * If 'flags & TAPMP_EXTENDED_STAR' is true, then the wildcard address '*'
+ * yields an AF_UNSPEC wildcard address, and the following change is made
+ * in the grammar above:
+ * Address ::= IPv4Address / "[" IPv6Address "]" / "*" / "*4" / "*6"
+ * with the new "*4" and "*6" productions creating a wildcard to match
+ * IPv4 or IPv6 addresses.
+ *
*/
int
-tor_addr_parse_mask_ports(const char *s, tor_addr_t *addr_out,
+tor_addr_parse_mask_ports(const char *s,
+ unsigned flags,
+ tor_addr_t *addr_out,
maskbits_t *maskbits_out,
uint16_t *port_min_out, uint16_t *port_max_out)
{
@@ -617,9 +644,23 @@ tor_addr_parse_mask_ports(const char *s, tor_addr_t *addr_out,
memset(addr_out, 0, sizeof(tor_addr_t));
if (!strcmp(address, "*")) {
- family = AF_INET; /* AF_UNSPEC ???? XXXX_IP6 */
+ if (flags & TAPMP_EXTENDED_STAR) {
+ family = AF_UNSPEC;
+ tor_addr_make_unspec(addr_out);
+ } else {
+ family = AF_INET;
+ tor_addr_from_ipv4h(addr_out, 0);
+ }
+ any_flag = 1;
+ } else if (!strcmp(address, "*4") && (flags & TAPMP_EXTENDED_STAR)) {
+ family = AF_INET;
tor_addr_from_ipv4h(addr_out, 0);
any_flag = 1;
+ } else if (!strcmp(address, "*6") && (flags & TAPMP_EXTENDED_STAR)) {
+ static char nil_bytes[16] = { 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0 };
+ family = AF_INET6;
+ tor_addr_from_ipv6_bytes(addr_out, nil_bytes);
+ any_flag = 1;
} else if (tor_inet_pton(AF_INET6, address, &in6_tmp) > 0) {
family = AF_INET6;
tor_addr_from_in6(addr_out, &in6_tmp);
@@ -835,6 +876,32 @@ tor_addr_copy(tor_addr_t *dest, const tor_addr_t *src)
memcpy(dest, src, sizeof(tor_addr_t));
}
+/** Copy a tor_addr_t from <b>src</b> to <b>dest</b>, taking extra case to
+ * copy only the well-defined portions. Used for computing hashes of
+ * addresses.
+ */
+void
+tor_addr_copy_tight(tor_addr_t *dest, const tor_addr_t *src)
+{
+ tor_assert(src != dest);
+ tor_assert(src);
+ tor_assert(dest);
+ memset(dest, 0, sizeof(tor_addr_t));
+ dest->family = src->family;
+ switch (tor_addr_family(src))
+ {
+ case AF_INET:
+ dest->addr.in_addr.s_addr = src->addr.in_addr.s_addr;
+ break;
+ case AF_INET6:
+ memcpy(dest->addr.in6_addr.s6_addr, src->addr.in6_addr.s6_addr, 16);
+ case AF_UNSPEC:
+ break;
+ default:
+ tor_fragile_assert();
+ }
+}
+
/** Given two addresses <b>addr1</b> and <b>addr2</b>, return 0 if the two
* addresses are equivalent under the mask mbits, less than 0 if addr1
* precedes addr2, and greater than 0 otherwise.
@@ -956,19 +1023,17 @@ tor_addr_compare_masked(const tor_addr_t *addr1, const tor_addr_t *addr2,
}
}
-/** Return a hash code based on the address addr */
-unsigned int
+/** Return a hash code based on the address addr. DOCDOC extra */
+uint64_t
tor_addr_hash(const tor_addr_t *addr)
{
switch (tor_addr_family(addr)) {
case AF_INET:
- return tor_addr_to_ipv4h(addr);
+ return siphash24g(&addr->addr.in_addr.s_addr, 4);
case AF_UNSPEC:
return 0x4e4d5342;
- case AF_INET6: {
- const uint32_t *u = tor_addr_to_in6_addr32(addr);
- return u[0] + u[1] + u[2] + u[3];
- }
+ case AF_INET6:
+ return siphash24g(&addr->addr.in6_addr.s6_addr, 16);
default:
tor_fragile_assert();
return 0;
@@ -1007,6 +1072,19 @@ fmt_addr_impl(const tor_addr_t *addr, int decorate)
return "???";
}
+/** Return a string representing the pair <b>addr</b> and <b>port</b>.
+ * This calls fmt_and_decorate_addr internally, so IPv6 addresses will
+ * have brackets, and the caveats of fmt_addr_impl apply.
+ */
+const char *
+fmt_addrport(const tor_addr_t *addr, uint16_t port)
+{
+ /* Add space for a colon and up to 5 digits. */
+ static char buf[TOR_ADDR_BUF_LEN + 6];
+ tor_snprintf(buf, sizeof(buf), "%s:%u", fmt_and_decorate_addr(addr), port);
+ return buf;
+}
+
/** Like fmt_addr(), but takes <b>addr</b> as a host-order IPv4
* addresses. Also not thread-safe, also clobbers its return buffer on
* repeated calls. */
@@ -1136,6 +1214,8 @@ get_interface_addresses_raw(int severity)
result = smartlist_new();
for (i = ifa; i; i = i->ifa_next) {
tor_addr_t tmp;
+ if ((i->ifa_flags & (IFF_UP | IFF_RUNNING)) != (IFF_UP | IFF_RUNNING))
+ continue;
if (!i->ifa_addr)
continue;
if (i->ifa_addr->sa_family != AF_INET &&
@@ -1220,14 +1300,14 @@ get_interface_addresses_raw(int severity)
/* This interface, AFAICT, only supports AF_INET addresses */
fd = socket(AF_INET, SOCK_DGRAM, 0);
if (fd < 0) {
- log(severity, LD_NET, "socket failed: %s", strerror(errno));
+ tor_log(severity, LD_NET, "socket failed: %s", strerror(errno));
goto done;
}
/* Guess how much space we need. */
ifc.ifc_len = sz = 15*1024;
ifc.ifc_ifcu.ifcu_req = tor_malloc(sz);
if (ioctl(fd, SIOCGIFCONF, &ifc) < 0) {
- log(severity, LD_NET, "ioctl failed: %s", strerror(errno));
+ tor_log(severity, LD_NET, "ioctl failed: %s", strerror(errno));
close(fd);
goto done;
}
@@ -1367,20 +1447,54 @@ get_interface_address6(int severity, sa_family_t family, tor_addr_t *addr)
* XXXX024 IPv6 deprecate some of these.
*/
-/** Return true iff <b>ip</b> (in host order) is an IP reserved to localhost,
- * or reserved for local networks by RFC 1918.
- */
+/** Given an address of the form "ip:port", try to divide it into its
+ * ip and port portions, setting *<b>address_out</b> to a newly
+ * allocated string holding the address portion and *<b>port_out</b>
+ * to the port.
+ *
+ * Don't do DNS lookups and don't allow domain names in the "ip" field.
+ *
+ * If <b>default_port</b> is less than 0, don't accept <b>addrport</b> of the
+ * form "ip" or "ip:0". Otherwise, accept those forms, and set
+ * *<b>port_out</b> to <b>default_port</b>.
+ *
+ * Return 0 on success, -1 on failure. */
int
-is_internal_IP(uint32_t ip, int for_listening)
+tor_addr_port_parse(int severity, const char *addrport,
+ tor_addr_t *address_out, uint16_t *port_out,
+ int default_port)
{
- tor_addr_t myaddr;
- myaddr.family = AF_INET;
- myaddr.addr.in_addr.s_addr = htonl(ip);
+ int retval = -1;
+ int r;
+ char *addr_tmp = NULL;
+
+ tor_assert(addrport);
+ tor_assert(address_out);
+ tor_assert(port_out);
+
+ r = tor_addr_port_split(severity, addrport, &addr_tmp, port_out);
+ if (r < 0)
+ goto done;
- return tor_addr_is_internal(&myaddr, for_listening);
+ if (!*port_out) {
+ if (default_port >= 0)
+ *port_out = default_port;
+ else
+ goto done;
+ }
+
+ /* make sure that address_out is an IP address */
+ if (tor_addr_parse(address_out, addr_tmp) < 0)
+ goto done;
+
+ retval = 0;
+
+ done:
+ tor_free(addr_tmp);
+ return retval;
}
-/** Given an address of the form "host:port", try to divide it into its host
+/** Given an address of the form "host[:port]", try to divide it into its host
* ane port portions, setting *<b>address_out</b> to a newly allocated string
* holding the address portion and *<b>port_out</b> to the port (or 0 if no
* port is given). Return 0 on success, -1 on failure. */
@@ -1388,9 +1502,18 @@ int
tor_addr_port_split(int severity, const char *addrport,
char **address_out, uint16_t *port_out)
{
+ tor_addr_t a_tmp;
tor_assert(addrport);
tor_assert(address_out);
tor_assert(port_out);
+ /* We need to check for IPv6 manually because addr_port_lookup() doesn't
+ * do a good job on IPv6 addresses that lack a port. */
+ if (tor_addr_parse(&a_tmp, addrport) == AF_INET6) {
+ *port_out = 0;
+ *address_out = tor_strdup(addrport);
+ return 0;
+ }
+
return addr_port_lookup(severity, addrport, address_out, NULL, port_out);
}
@@ -1409,17 +1532,17 @@ addr_port_lookup(int severity, const char *addrport, char **address,
uint32_t *addr, uint16_t *port_out)
{
const char *colon;
- char *_address = NULL;
- int _port;
+ char *address_ = NULL;
+ int port_;
int ok = 1;
tor_assert(addrport);
colon = strrchr(addrport, ':');
if (colon) {
- _address = tor_strndup(addrport, colon-addrport);
- _port = (int) tor_parse_long(colon+1,10,1,65535,NULL,NULL);
- if (!_port) {
+ address_ = tor_strndup(addrport, colon-addrport);
+ port_ = (int) tor_parse_long(colon+1,10,1,65535,NULL,NULL);
+ if (!port_) {
log_fn(severity, LD_GENERAL, "Port %s out of range", escaped(colon+1));
ok = 0;
}
@@ -1432,28 +1555,28 @@ addr_port_lookup(int severity, const char *addrport, char **address,
ok = 0;
}
} else {
- _address = tor_strdup(addrport);
- _port = 0;
+ address_ = tor_strdup(addrport);
+ port_ = 0;
}
if (addr) {
/* There's an addr pointer, so we need to resolve the hostname. */
- if (tor_lookup_hostname(_address,addr)) {
- log_fn(severity, LD_NET, "Couldn't look up %s", escaped(_address));
+ if (tor_lookup_hostname(address_,addr)) {
+ log_fn(severity, LD_NET, "Couldn't look up %s", escaped(address_));
ok = 0;
*addr = 0;
}
}
if (address && ok) {
- *address = _address;
+ *address = address_;
} else {
if (address)
*address = NULL;
- tor_free(_address);
+ tor_free(address_);
}
if (port_out)
- *port_out = ok ? ((uint16_t) _port) : 0;
+ *port_out = ok ? ((uint16_t) port_) : 0;
return ok ? 0 : -1;
}
@@ -1468,7 +1591,7 @@ addr_mask_get_bits(uint32_t mask)
return 0;
if (mask == 0xFFFFFFFFu)
return 32;
- for (i=0; i<=32; ++i) {
+ for (i=1; i<=32; ++i) {
if (mask == (uint32_t) ~((1u<<(32-i))-1)) {
return i;
}
@@ -1476,32 +1599,6 @@ addr_mask_get_bits(uint32_t mask)
return -1;
}
-/** Compare two addresses <b>a1</b> and <b>a2</b> for equality under a
- * netmask of <b>mbits</b> bits. Return -1, 0, or 1.
- *
- * XXXX_IP6 Temporary function to allow masks as bitcounts everywhere. This
- * will be replaced with an IPv6-aware version as soon as 32-bit addresses are
- * no longer passed around.
- */
-int
-addr_mask_cmp_bits(uint32_t a1, uint32_t a2, maskbits_t bits)
-{
- if (bits > 32)
- bits = 32;
- else if (bits == 0)
- return 0;
-
- a1 >>= (32-bits);
- a2 >>= (32-bits);
-
- if (a1 < a2)
- return -1;
- else if (a1 > a2)
- return 1;
- else
- return 0;
-}
-
/** Parse a string <b>s</b> in the format of (*|port(-maxport)?)?, setting the
* various *out pointers as appropriate. Return 0 on success, -1 on failure.
*/
@@ -1554,93 +1651,6 @@ parse_port_range(const char *port, uint16_t *port_min_out,
return 0;
}
-/** Parse a string <b>s</b> in the format of
- * (IP(/mask|/mask-bits)?|*)(:(*|port(-maxport))?)?, setting the various
- * *out pointers as appropriate. Return 0 on success, -1 on failure.
- */
-int
-parse_addr_and_port_range(const char *s, uint32_t *addr_out,
- maskbits_t *maskbits_out, uint16_t *port_min_out,
- uint16_t *port_max_out)
-{
- char *address;
- char *mask, *port, *endptr;
- struct in_addr in;
- int bits;
-
- tor_assert(s);
- tor_assert(addr_out);
- tor_assert(maskbits_out);
- tor_assert(port_min_out);
- tor_assert(port_max_out);
-
- address = tor_strdup(s);
- /* Break 'address' into separate strings.
- */
- mask = strchr(address,'/');
- port = strchr(mask?mask:address,':');
- if (mask)
- *mask++ = '\0';
- if (port)
- *port++ = '\0';
- /* Now "address" is the IP|'*' part...
- * "mask" is the Mask|Maskbits part...
- * and "port" is the *|port|min-max part.
- */
-
- if (strcmp(address,"*")==0) {
- *addr_out = 0;
- } else if (tor_inet_aton(address, &in) != 0) {
- *addr_out = ntohl(in.s_addr);
- } else {
- log_warn(LD_GENERAL, "Malformed IP %s in address pattern; rejecting.",
- escaped(address));
- goto err;
- }
-
- if (!mask) {
- if (strcmp(address,"*")==0)
- *maskbits_out = 0;
- else
- *maskbits_out = 32;
- } else {
- endptr = NULL;
- bits = (int) strtol(mask, &endptr, 10);
- if (!*endptr) {
- /* strtol handled the whole mask. */
- if (bits < 0 || bits > 32) {
- log_warn(LD_GENERAL,
- "Bad number of mask bits on address range; rejecting.");
- goto err;
- }
- *maskbits_out = bits;
- } else if (tor_inet_aton(mask, &in) != 0) {
- bits = addr_mask_get_bits(ntohl(in.s_addr));
- if (bits < 0) {
- log_warn(LD_GENERAL,
- "Mask %s on address range isn't a prefix; dropping",
- escaped(mask));
- goto err;
- }
- *maskbits_out = bits;
- } else {
- log_warn(LD_GENERAL,
- "Malformed mask %s on address range; rejecting.",
- escaped(mask));
- goto err;
- }
- }
-
- if (parse_port_range(port, port_min_out, port_max_out)<0)
- goto err;
-
- tor_free(address);
- return 0;
- err:
- tor_free(address);
- return -1;
-}
-
/** Given an IPv4 in_addr struct *<b>in</b> (in network order, as usual),
* write it as a string into the <b>buf_len</b>-byte buffer in
* <b>buf</b>.
@@ -1698,3 +1708,15 @@ tor_addr_hostname_is_local(const char *name)
!strcasecmpend(name, ".local");
}
+/** Return a newly allocated tor_addr_port_t with <b>addr</b> and
+ <b>port</b> filled in. */
+tor_addr_port_t *
+tor_addr_port_new(const tor_addr_t *addr, uint16_t port)
+{
+ tor_addr_port_t *ap = tor_malloc_zero(sizeof(tor_addr_port_t));
+ if (addr)
+ tor_addr_copy(&ap->addr, addr);
+ ap->port = port;
+ return ap;
+}
+
diff --git a/src/common/address.h b/src/common/address.h
index c6c126862..8dc63b71c 100644
--- a/src/common/address.h
+++ b/src/common/address.h
@@ -1,6 +1,6 @@
/* Copyright (c) 2003-2004, Roger Dingledine
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -8,8 +8,8 @@
* \brief Headers for address.h
**/
-#ifndef _TOR_ADDRESS_H
-#define _TOR_ADDRESS_H
+#ifndef TOR_ADDRESS_H
+#define TOR_ADDRESS_H
#include "orconfig.h"
#include "torint.h"
@@ -40,7 +40,7 @@ typedef struct tor_addr_port_t
uint16_t port;
} tor_addr_port_t;
-#define TOR_ADDR_NULL {AF_UNSPEC, {0}};
+#define TOR_ADDR_NULL {AF_UNSPEC, {0}}
static INLINE const struct in6_addr *tor_addr_to_in6(const tor_addr_t *a);
static INLINE uint32_t tor_addr_to_ipv4n(const tor_addr_t *a);
@@ -55,6 +55,7 @@ socklen_t tor_addr_to_sockaddr(const tor_addr_t *a, uint16_t port,
int tor_addr_from_sockaddr(tor_addr_t *a, const struct sockaddr *sa,
uint16_t *port_out);
void tor_addr_make_unspec(tor_addr_t *a);
+void tor_addr_make_null(tor_addr_t *a, sa_family_t family);
char *tor_sockaddr_to_str(const struct sockaddr *sa);
/** Return an in6_addr* equivalent to <b>a</b>, or NULL if <b>a</b> is not
@@ -145,6 +146,7 @@ char *tor_dup_addr(const tor_addr_t *addr) ATTR_MALLOC;
* addresses. */
#define fmt_and_decorate_addr(a) fmt_addr_impl((a), 1)
const char *fmt_addr_impl(const tor_addr_t *addr, int decorate);
+const char *fmt_addrport(const tor_addr_t *addr, uint16_t port);
const char * fmt_addr32(uint32_t addr);
int get_interface_address6(int severity, sa_family_t family, tor_addr_t *addr);
@@ -165,9 +167,12 @@ int tor_addr_compare_masked(const tor_addr_t *addr1, const tor_addr_t *addr2,
* "exactly". */
#define tor_addr_eq(a,b) (0==tor_addr_compare((a),(b),CMP_EXACT))
-unsigned int tor_addr_hash(const tor_addr_t *addr);
+uint64_t tor_addr_hash(const tor_addr_t *addr);
int tor_addr_is_v4(const tor_addr_t *addr);
-int tor_addr_is_internal(const tor_addr_t *ip, int for_listening);
+int tor_addr_is_internal_(const tor_addr_t *ip, int for_listening,
+ const char *filename, int lineno);
+#define tor_addr_is_internal(addr, for_listening) \
+ tor_addr_is_internal_((addr), (for_listening), SHORT_FILE__, __LINE__)
/** Longest length that can be required for a reverse lookup name. */
/* 32 nybbles, 32 dots, 8 characters of "ip6.arpa", 1 NUL: 73 characters. */
@@ -179,13 +184,15 @@ int tor_addr_parse_PTR_name(tor_addr_t *result, const char *address,
int tor_addr_port_lookup(const char *s, tor_addr_t *addr_out,
uint16_t *port_out);
-int tor_addr_parse_mask_ports(const char *s,
+#define TAPMP_EXTENDED_STAR 1
+int tor_addr_parse_mask_ports(const char *s, unsigned flags,
tor_addr_t *addr_out, maskbits_t *mask_out,
uint16_t *port_min_out, uint16_t *port_max_out);
const char * tor_addr_to_str(char *dest, const tor_addr_t *addr, size_t len,
int decorate);
int tor_addr_parse(tor_addr_t *addr, const char *src);
void tor_addr_copy(tor_addr_t *dest, const tor_addr_t *src);
+void tor_addr_copy_tight(tor_addr_t *dest, const tor_addr_t *src);
void tor_addr_from_ipv4n(tor_addr_t *dest, uint32_t v4addr);
/** Set <b>dest</b> to the IPv4 address encoded in <b>v4addr</b> in host
* order. */
@@ -202,24 +209,25 @@ int tor_addr_is_loopback(const tor_addr_t *addr);
int tor_addr_port_split(int severity, const char *addrport,
char **address_out, uint16_t *port_out);
+int tor_addr_port_parse(int severity, const char *addrport,
+ tor_addr_t *address_out, uint16_t *port_out,
+ int default_port);
+
int tor_addr_hostname_is_local(const char *name);
/* IPv4 helpers */
-int is_internal_IP(uint32_t ip, int for_listening);
int addr_port_lookup(int severity, const char *addrport, char **address,
uint32_t *addr, uint16_t *port_out);
int parse_port_range(const char *port, uint16_t *port_min_out,
uint16_t *port_max_out);
-int parse_addr_and_port_range(const char *s, uint32_t *addr_out,
- maskbits_t *maskbits_out, uint16_t *port_min_out,
- uint16_t *port_max_out);
int addr_mask_get_bits(uint32_t mask);
-int addr_mask_cmp_bits(uint32_t a1, uint32_t a2, maskbits_t bits);
/** Length of a buffer to allocate to hold the results of tor_inet_ntoa.*/
#define INET_NTOA_BUF_LEN 16
int tor_inet_ntoa(const struct in_addr *in, char *buf, size_t buf_len);
char *tor_dup_ip(uint32_t addr) ATTR_MALLOC;
int get_interface_address(int severity, uint32_t *addr);
+tor_addr_port_t *tor_addr_port_new(const tor_addr_t *addr, uint16_t port);
+
#endif
diff --git a/src/common/aes.c b/src/common/aes.c
index 295a90749..f454a7f7b 100644
--- a/src/common/aes.c
+++ b/src/common/aes.c
@@ -1,7 +1,7 @@
/* Copyright (c) 2001, Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -41,6 +41,7 @@
#include "aes.h"
#include "util.h"
#include "torlog.h"
+#include "di_ops.h"
#ifdef ANDROID
/* Android's OpenSSL seems to have removed all of its Engine support. */
@@ -134,8 +135,8 @@ int
evaluate_evp_for_aes(int force_val)
{
(void) force_val;
- log_notice(LD_CRYPTO, "This version of OpenSSL has a known-good EVP "
- "counter-mode implementation. Using it.");
+ log_info(LD_CRYPTO, "This version of OpenSSL has a known-good EVP "
+ "counter-mode implementation. Using it.");
return 0;
}
int
@@ -212,11 +213,11 @@ evaluate_evp_for_aes(int force_val)
e = ENGINE_get_cipher_engine(NID_aes_128_ecb);
if (e) {
- log_notice(LD_CRYPTO, "AES engine \"%s\" found; using EVP_* functions.",
+ log_info(LD_CRYPTO, "AES engine \"%s\" found; using EVP_* functions.",
ENGINE_get_name(e));
should_use_EVP = 1;
} else {
- log_notice(LD_CRYPTO, "No AES engine found; using AES_* functions.");
+ log_info(LD_CRYPTO, "No AES engine found; using AES_* functions.");
should_use_EVP = 0;
}
#endif
@@ -257,18 +258,18 @@ evaluate_ctr_for_aes(void)
for (i=0; i<16; ++i)
AES_ctr128_encrypt(&zero[i], &output[i], 1, &key, ivec, ivec_tmp, &pos);
- if (memcmp(output, encrypt_zero, 16)) {
+ if (fast_memneq(output, encrypt_zero, 16)) {
/* Counter mode is buggy */
log_notice(LD_CRYPTO, "This OpenSSL has a buggy version of counter mode; "
"not using it.");
} else {
/* Counter mode is okay */
- log_notice(LD_CRYPTO, "This OpenSSL has a good implementation of counter "
+ log_info(LD_CRYPTO, "This OpenSSL has a good implementation of counter "
"mode; using it.");
should_use_openssl_CTR = 1;
}
#else
- log_notice(LD_CRYPTO, "This version of OpenSSL has a slow implementation of "
+ log_info(LD_CRYPTO, "This version of OpenSSL has a slow implementation of "
"counter mode; not using it.");
#endif
return 0;
@@ -285,7 +286,7 @@ evaluate_ctr_for_aes(void)
* value of the current counter.
*/
static INLINE void
-_aes_fill_buf(aes_cnt_cipher_t *cipher)
+aes_fill_buf_(aes_cnt_cipher_t *cipher)
{
/* We don't currently use OpenSSL's counter mode implementation because:
* 1) some versions have known bugs
@@ -340,7 +341,7 @@ aes_set_key(aes_cnt_cipher_t *cipher, const char *key, int key_bits)
EVP_EncryptInit(&cipher->key.evp, c, (const unsigned char*)key, NULL);
cipher->using_evp = 1;
} else {
- AES_set_encrypt_key((const unsigned char *)key, key_bits, &cipher->key.aes);
+ AES_set_encrypt_key((const unsigned char *)key, key_bits,&cipher->key.aes);
cipher->using_evp = 0;
}
@@ -360,7 +361,7 @@ aes_set_key(aes_cnt_cipher_t *cipher, const char *key, int key_bits)
memset(cipher->buf, 0, sizeof(cipher->buf));
else
#endif
- _aes_fill_buf(cipher);
+ aes_fill_buf_(cipher);
}
/** Release storage held by <b>cipher</b>
@@ -387,9 +388,10 @@ aes_cipher_free(aes_cnt_cipher_t *cipher)
#ifdef CAN_USE_OPENSSL_CTR
/* Helper function to use EVP with openssl's counter-mode wrapper. */
-static void evp_block128_fn(const uint8_t in[16],
- uint8_t out[16],
- const void *key)
+static void
+evp_block128_fn(const uint8_t in[16],
+ uint8_t out[16],
+ const void *key)
{
EVP_CIPHER_CTX *ctx = (void*)key;
int inl=16, outl=16;
@@ -429,8 +431,7 @@ aes_crypt(aes_cnt_cipher_t *cipher, const char *input, size_t len,
&cipher->pos);
}
return;
- }
- else
+ } else
#endif
{
int c = cipher->pos;
@@ -453,7 +454,7 @@ aes_crypt(aes_cnt_cipher_t *cipher, const char *input, size_t len,
UPDATE_CTR_BUF(cipher, 1);
}
UPDATE_CTR_BUF(cipher, 0);
- _aes_fill_buf(cipher);
+ aes_fill_buf_(cipher);
}
}
}
@@ -469,8 +470,7 @@ aes_crypt_inplace(aes_cnt_cipher_t *cipher, char *data, size_t len)
if (should_use_openssl_CTR) {
aes_crypt(cipher, data, len, data);
return;
- }
- else
+ } else
#endif
{
int c = cipher->pos;
@@ -493,7 +493,7 @@ aes_crypt_inplace(aes_cnt_cipher_t *cipher, char *data, size_t len)
UPDATE_CTR_BUF(cipher, 1);
}
UPDATE_CTR_BUF(cipher, 0);
- _aes_fill_buf(cipher);
+ aes_fill_buf_(cipher);
}
}
}
@@ -515,7 +515,8 @@ aes_set_iv(aes_cnt_cipher_t *cipher, const char *iv)
#ifdef CAN_USE_OPENSSL_CTR
if (!should_use_openssl_CTR)
#endif
- _aes_fill_buf(cipher);
+ aes_fill_buf_(cipher);
}
#endif
+
diff --git a/src/common/aes.h b/src/common/aes.h
index bde567f87..8ff28a762 100644
--- a/src/common/aes.h
+++ b/src/common/aes.h
@@ -1,12 +1,12 @@
/* Copyright (c) 2003, Roger Dingledine
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/* Implements a minimal interface to counter-mode AES. */
-#ifndef _TOR_AES_H
-#define _TOR_AES_H
+#ifndef TOR_AES_H
+#define TOR_AES_H
/**
* \file aes.h
diff --git a/src/common/backtrace.c b/src/common/backtrace.c
new file mode 100644
index 000000000..3a073a8ff
--- /dev/null
+++ b/src/common/backtrace.c
@@ -0,0 +1,233 @@
+/* Copyright (c) 2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#define __USE_GNU
+#define _GNU_SOURCE 1
+
+#include "orconfig.h"
+#include "compat.h"
+#include "util.h"
+#include "torlog.h"
+
+#ifdef HAVE_EXECINFO_H
+#include <execinfo.h>
+#endif
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_SIGNAL_H
+#include <signal.h>
+#endif
+
+#ifdef HAVE_CYGWIN_SIGNAL_H
+#include <cygwin/signal.h>
+#elif defined(HAVE_SYS_UCONTEXT_H)
+#include <sys/ucontext.h>
+#elif defined(HAVE_UCONTEXT_H)
+#include <ucontext.h>
+#endif
+
+#define EXPOSE_CLEAN_BACKTRACE
+#include "backtrace.h"
+
+#if defined(HAVE_EXECINFO_H) && defined(HAVE_BACKTRACE) && \
+ defined(HAVE_BACKTRACE_SYMBOLS_FD) && defined(HAVE_SIGACTION)
+#define USE_BACKTRACE
+#endif
+
+#if !defined(USE_BACKTRACE)
+#define NO_BACKTRACE_IMPL
+#endif
+
+/** Version of Tor to report in backtrace messages. */
+static char *bt_version = NULL;
+
+#ifdef USE_BACKTRACE
+/** Largest stack depth to try to dump. */
+#define MAX_DEPTH 256
+/** Static allocation of stack to dump. This is static so we avoid stack
+ * pressure. */
+static void *cb_buf[MAX_DEPTH];
+/** Protects cb_buf from concurrent access */
+static tor_mutex_t cb_buf_mutex;
+
+/** Change a stacktrace in <b>stack</b> of depth <b>depth</b> so that it will
+ * log the correct function from which a signal was received with context
+ * <b>ctx</b>. (When we get a signal, the current function will not have
+ * called any other function, and will therefore have not pushed its address
+ * onto the stack. Fortunately, we usually have the program counter in the
+ * ucontext_t structure.
+ */
+void
+clean_backtrace(void **stack, int depth, const ucontext_t *ctx)
+{
+#ifdef PC_FROM_UCONTEXT
+#if defined(__linux__)
+ const int n = 1;
+#elif defined(__darwin__) || defined(__APPLE__) || defined(__OpenBSD__) \
+ || defined(__FreeBSD__)
+ const int n = 2;
+#else
+ const int n = 1;
+#endif
+ if (depth <= n)
+ return;
+
+ stack[n] = (void*) ctx->PC_FROM_UCONTEXT;
+#else
+ (void) depth;
+ (void) ctx;
+#endif
+}
+
+/** Log a message <b>msg</b> at <b>severity</b> in <b>domain</b>, and follow
+ * that with a backtrace log. */
+void
+log_backtrace(int severity, int domain, const char *msg)
+{
+ int depth;
+ char **symbols;
+ int i;
+
+ tor_mutex_acquire(&cb_buf_mutex);
+
+ depth = backtrace(cb_buf, MAX_DEPTH);
+ symbols = backtrace_symbols(cb_buf, depth);
+
+ tor_log(severity, domain, "%s. Stack trace:", msg);
+ if (!symbols) {
+ tor_log(severity, domain, " Unable to generate backtrace.");
+ goto done;
+ }
+ for (i=0; i < depth; ++i) {
+ tor_log(severity, domain, " %s", symbols[i]);
+ }
+ free(symbols);
+
+ done:
+ tor_mutex_release(&cb_buf_mutex);
+}
+
+static void crash_handler(int sig, siginfo_t *si, void *ctx_)
+ __attribute__((noreturn));
+
+/** Signal handler: write a crash message with a stack trace, and die. */
+static void
+crash_handler(int sig, siginfo_t *si, void *ctx_)
+{
+ char buf[40];
+ int depth;
+ ucontext_t *ctx = (ucontext_t *) ctx_;
+ int n_fds, i;
+ const int *fds = NULL;
+
+ (void) si;
+
+ depth = backtrace(cb_buf, MAX_DEPTH);
+ /* Clean up the top stack frame so we get the real function
+ * name for the most recently failing function. */
+ clean_backtrace(cb_buf, depth, ctx);
+
+ format_dec_number_sigsafe((unsigned)sig, buf, sizeof(buf));
+
+ tor_log_err_sigsafe(bt_version, " died: Caught signal ", buf, "\n",
+ NULL);
+
+ n_fds = tor_log_get_sigsafe_err_fds(&fds);
+ for (i=0; i < n_fds; ++i)
+ backtrace_symbols_fd(cb_buf, depth, fds[i]);
+
+ abort();
+}
+
+/** Install signal handlers as needed so that when we crash, we produce a
+ * useful stack trace. Return 0 on success, -1 on failure. */
+static int
+install_bt_handler(void)
+{
+ int trap_signals[] = { SIGSEGV, SIGILL, SIGFPE, SIGBUS, SIGSYS,
+ SIGIO, -1 };
+ int i, rv=0;
+
+ struct sigaction sa;
+
+ tor_mutex_init(&cb_buf_mutex);
+
+ memset(&sa, 0, sizeof(sa));
+ sa.sa_sigaction = crash_handler;
+ sa.sa_flags = SA_SIGINFO;
+ sigfillset(&sa.sa_mask);
+
+ for (i = 0; trap_signals[i] >= 0; ++i) {
+ if (sigaction(trap_signals[i], &sa, NULL) == -1) {
+ log_warn(LD_BUG, "Sigaction failed: %s", strerror(errno));
+ rv = -1;
+ }
+ }
+
+ {
+ /* Now, generate (but do not log) a backtrace. This ensures that
+ * libc has pre-loaded the symbols we need to dump things, so that later
+ * reads won't be denied by the sandbox code */
+ char **symbols;
+ int depth = backtrace(cb_buf, MAX_DEPTH);
+ symbols = backtrace_symbols(cb_buf, depth);
+ if (symbols)
+ free(symbols);
+ }
+
+ return rv;
+}
+
+/** Uninstall crash handlers. */
+static void
+remove_bt_handler(void)
+{
+ tor_mutex_uninit(&cb_buf_mutex);
+}
+#endif
+
+#ifdef NO_BACKTRACE_IMPL
+void
+log_backtrace(int severity, int domain, const char *msg)
+{
+ tor_log(severity, domain, "%s. (Stack trace not available)", msg);
+}
+
+static int
+install_bt_handler(void)
+{
+ return 0;
+}
+
+static void
+remove_bt_handler(void)
+{
+}
+#endif
+
+/** Set up code to handle generating error messages on crashes. */
+int
+configure_backtrace_handler(const char *tor_version)
+{
+ tor_free(bt_version);
+ if (!tor_version)
+ tor_version = "";
+ tor_asprintf(&bt_version, "Tor %s", tor_version);
+
+ return install_bt_handler();
+}
+
+/** Perform end-of-process cleanup for code that generates error messages on
+ * crashes. */
+void
+clean_up_backtrace_handler(void)
+{
+ remove_bt_handler();
+
+ tor_free(bt_version);
+}
+
diff --git a/src/common/backtrace.h b/src/common/backtrace.h
new file mode 100644
index 000000000..1f4d73339
--- /dev/null
+++ b/src/common/backtrace.h
@@ -0,0 +1,21 @@
+/* Copyright (c) 2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#ifndef TOR_BACKTRACE_H
+#define TOR_BACKTRACE_H
+
+#include "orconfig.h"
+
+void log_backtrace(int severity, int domain, const char *msg);
+int configure_backtrace_handler(const char *tor_version);
+void clean_up_backtrace_handler(void);
+
+#ifdef EXPOSE_CLEAN_BACKTRACE
+#if defined(HAVE_EXECINFO_H) && defined(HAVE_BACKTRACE) && \
+ defined(HAVE_BACKTRACE_SYMBOLS_FD) && defined(HAVE_SIGACTION)
+void clean_backtrace(void **stack, int depth, const ucontext_t *ctx);
+#endif
+#endif
+
+#endif
+
diff --git a/src/common/ciphers.inc b/src/common/ciphers.inc
index 137d78b11..ab4ac4072 100644
--- a/src/common/ciphers.inc
+++ b/src/common/ciphers.inc
@@ -4,86 +4,51 @@
*
* This file was automatically generated by get_mozilla_ciphers.py.
*/
-#ifdef TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
- CIPHER(0xc00a, TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA)
-#else
- XCIPHER(0xc00a, TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA)
-#endif
-#ifdef TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA
- CIPHER(0xc014, TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA)
-#else
- XCIPHER(0xc014, TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA)
-#endif
-#ifdef TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA
- CIPHER(0x0088, TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA)
-#else
- XCIPHER(0x0088, TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA)
-#endif
-#ifdef TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA
- CIPHER(0x0087, TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA)
+#ifdef TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
+ CIPHER(0xc02b, TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256)
#else
- XCIPHER(0x0087, TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA)
+ XCIPHER(0xc02b, TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256)
#endif
-#ifdef TLS1_TXT_DHE_RSA_WITH_AES_256_SHA
- CIPHER(0x0039, TLS1_TXT_DHE_RSA_WITH_AES_256_SHA)
+#ifdef TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256
+ CIPHER(0xc02f, TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256)
#else
- XCIPHER(0x0039, TLS1_TXT_DHE_RSA_WITH_AES_256_SHA)
+ XCIPHER(0xc02f, TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256)
#endif
-#ifdef TLS1_TXT_DHE_DSS_WITH_AES_256_SHA
- CIPHER(0x0038, TLS1_TXT_DHE_DSS_WITH_AES_256_SHA)
+#ifdef TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
+ CIPHER(0xc00a, TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA)
#else
- XCIPHER(0x0038, TLS1_TXT_DHE_DSS_WITH_AES_256_SHA)
+ XCIPHER(0xc00a, TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA)
#endif
-#ifdef TLS1_TXT_ECDH_RSA_WITH_AES_256_CBC_SHA
- CIPHER(0xc00f, TLS1_TXT_ECDH_RSA_WITH_AES_256_CBC_SHA)
+#ifdef TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
+ CIPHER(0xc009, TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA)
#else
- XCIPHER(0xc00f, TLS1_TXT_ECDH_RSA_WITH_AES_256_CBC_SHA)
+ XCIPHER(0xc009, TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA)
#endif
-#ifdef TLS1_TXT_ECDH_ECDSA_WITH_AES_256_CBC_SHA
- CIPHER(0xc005, TLS1_TXT_ECDH_ECDSA_WITH_AES_256_CBC_SHA)
+#ifdef TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA
+ CIPHER(0xc013, TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA)
#else
- XCIPHER(0xc005, TLS1_TXT_ECDH_ECDSA_WITH_AES_256_CBC_SHA)
+ XCIPHER(0xc013, TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA)
#endif
-#ifdef TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA
- CIPHER(0x0084, TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA)
+#ifdef TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA
+ CIPHER(0xc014, TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA)
#else
- XCIPHER(0x0084, TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA)
+ XCIPHER(0xc014, TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA)
#endif
-#ifdef TLS1_TXT_RSA_WITH_AES_256_SHA
- CIPHER(0x0035, TLS1_TXT_RSA_WITH_AES_256_SHA)
+#ifdef TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA
+ CIPHER(0xc012, TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA)
#else
- XCIPHER(0x0035, TLS1_TXT_RSA_WITH_AES_256_SHA)
+ XCIPHER(0xc012, TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA)
#endif
#ifdef TLS1_TXT_ECDHE_ECDSA_WITH_RC4_128_SHA
CIPHER(0xc007, TLS1_TXT_ECDHE_ECDSA_WITH_RC4_128_SHA)
#else
XCIPHER(0xc007, TLS1_TXT_ECDHE_ECDSA_WITH_RC4_128_SHA)
#endif
-#ifdef TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
- CIPHER(0xc009, TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA)
-#else
- XCIPHER(0xc009, TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA)
-#endif
#ifdef TLS1_TXT_ECDHE_RSA_WITH_RC4_128_SHA
CIPHER(0xc011, TLS1_TXT_ECDHE_RSA_WITH_RC4_128_SHA)
#else
XCIPHER(0xc011, TLS1_TXT_ECDHE_RSA_WITH_RC4_128_SHA)
#endif
-#ifdef TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA
- CIPHER(0xc013, TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA)
-#else
- XCIPHER(0xc013, TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA)
-#endif
-#ifdef TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA
- CIPHER(0x0045, TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA)
-#else
- XCIPHER(0x0045, TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA)
-#endif
-#ifdef TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA
- CIPHER(0x0044, TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA)
-#else
- XCIPHER(0x0044, TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA)
-#endif
#ifdef TLS1_TXT_DHE_RSA_WITH_AES_128_SHA
CIPHER(0x0033, TLS1_TXT_DHE_RSA_WITH_AES_128_SHA)
#else
@@ -94,89 +59,63 @@
#else
XCIPHER(0x0032, TLS1_TXT_DHE_DSS_WITH_AES_128_SHA)
#endif
-#ifdef TLS1_TXT_ECDH_RSA_WITH_RC4_128_SHA
- CIPHER(0xc00c, TLS1_TXT_ECDH_RSA_WITH_RC4_128_SHA)
-#else
- XCIPHER(0xc00c, TLS1_TXT_ECDH_RSA_WITH_RC4_128_SHA)
-#endif
-#ifdef TLS1_TXT_ECDH_RSA_WITH_AES_128_CBC_SHA
- CIPHER(0xc00e, TLS1_TXT_ECDH_RSA_WITH_AES_128_CBC_SHA)
-#else
- XCIPHER(0xc00e, TLS1_TXT_ECDH_RSA_WITH_AES_128_CBC_SHA)
-#endif
-#ifdef TLS1_TXT_ECDH_ECDSA_WITH_RC4_128_SHA
- CIPHER(0xc002, TLS1_TXT_ECDH_ECDSA_WITH_RC4_128_SHA)
-#else
- XCIPHER(0xc002, TLS1_TXT_ECDH_ECDSA_WITH_RC4_128_SHA)
-#endif
-#ifdef TLS1_TXT_ECDH_ECDSA_WITH_AES_128_CBC_SHA
- CIPHER(0xc004, TLS1_TXT_ECDH_ECDSA_WITH_AES_128_CBC_SHA)
+#ifdef TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA
+ CIPHER(0x0045, TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA)
#else
- XCIPHER(0xc004, TLS1_TXT_ECDH_ECDSA_WITH_AES_128_CBC_SHA)
+ XCIPHER(0x0045, TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA)
#endif
-#ifdef TLS1_TXT_RSA_WITH_SEED_SHA
- CIPHER(0x0096, TLS1_TXT_RSA_WITH_SEED_SHA)
+#ifdef TLS1_TXT_DHE_RSA_WITH_AES_256_SHA
+ CIPHER(0x0039, TLS1_TXT_DHE_RSA_WITH_AES_256_SHA)
#else
- XCIPHER(0x0096, TLS1_TXT_RSA_WITH_SEED_SHA)
+ XCIPHER(0x0039, TLS1_TXT_DHE_RSA_WITH_AES_256_SHA)
#endif
-#ifdef TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA
- CIPHER(0x0041, TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA)
+#ifdef TLS1_TXT_DHE_DSS_WITH_AES_256_SHA
+ CIPHER(0x0038, TLS1_TXT_DHE_DSS_WITH_AES_256_SHA)
#else
- XCIPHER(0x0041, TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA)
+ XCIPHER(0x0038, TLS1_TXT_DHE_DSS_WITH_AES_256_SHA)
#endif
-#ifdef SSL3_TXT_RSA_RC4_128_MD5
- CIPHER(0x0004, SSL3_TXT_RSA_RC4_128_MD5)
+#ifdef TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA
+ CIPHER(0x0088, TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA)
#else
- XCIPHER(0x0004, SSL3_TXT_RSA_RC4_128_MD5)
+ XCIPHER(0x0088, TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA)
#endif
-#ifdef SSL3_TXT_RSA_RC4_128_SHA
- CIPHER(0x0005, SSL3_TXT_RSA_RC4_128_SHA)
+#ifdef SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA
+ CIPHER(0x0016, SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA)
#else
- XCIPHER(0x0005, SSL3_TXT_RSA_RC4_128_SHA)
+ XCIPHER(0x0016, SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA)
#endif
#ifdef TLS1_TXT_RSA_WITH_AES_128_SHA
CIPHER(0x002f, TLS1_TXT_RSA_WITH_AES_128_SHA)
#else
XCIPHER(0x002f, TLS1_TXT_RSA_WITH_AES_128_SHA)
#endif
-#ifdef TLS1_TXT_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA
- CIPHER(0xc008, TLS1_TXT_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA)
-#else
- XCIPHER(0xc008, TLS1_TXT_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA)
-#endif
-#ifdef TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA
- CIPHER(0xc012, TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA)
-#else
- XCIPHER(0xc012, TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA)
-#endif
-#ifdef SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA
- CIPHER(0x0016, SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA)
+#ifdef TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA
+ CIPHER(0x0041, TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA)
#else
- XCIPHER(0x0016, SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA)
+ XCIPHER(0x0041, TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA)
#endif
-#ifdef SSL3_TXT_EDH_DSS_DES_192_CBC3_SHA
- CIPHER(0x0013, SSL3_TXT_EDH_DSS_DES_192_CBC3_SHA)
+#ifdef TLS1_TXT_RSA_WITH_AES_256_SHA
+ CIPHER(0x0035, TLS1_TXT_RSA_WITH_AES_256_SHA)
#else
- XCIPHER(0x0013, SSL3_TXT_EDH_DSS_DES_192_CBC3_SHA)
+ XCIPHER(0x0035, TLS1_TXT_RSA_WITH_AES_256_SHA)
#endif
-#ifdef TLS1_TXT_ECDH_RSA_WITH_DES_192_CBC3_SHA
- CIPHER(0xc00d, TLS1_TXT_ECDH_RSA_WITH_DES_192_CBC3_SHA)
+#ifdef TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA
+ CIPHER(0x0084, TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA)
#else
- XCIPHER(0xc00d, TLS1_TXT_ECDH_RSA_WITH_DES_192_CBC3_SHA)
+ XCIPHER(0x0084, TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA)
#endif
-#ifdef TLS1_TXT_ECDH_ECDSA_WITH_DES_192_CBC3_SHA
- CIPHER(0xc003, TLS1_TXT_ECDH_ECDSA_WITH_DES_192_CBC3_SHA)
+#ifdef SSL3_TXT_RSA_DES_192_CBC3_SHA
+ CIPHER(0x000a, SSL3_TXT_RSA_DES_192_CBC3_SHA)
#else
- XCIPHER(0xc003, TLS1_TXT_ECDH_ECDSA_WITH_DES_192_CBC3_SHA)
+ XCIPHER(0x000a, SSL3_TXT_RSA_DES_192_CBC3_SHA)
#endif
-/* No openssl macro found for 0xfeff */
-#ifdef SSL_RSA_FIPS_WITH_3DES_EDE_CBC_SHA
- CIPHER(0xfeff, SSL_RSA_FIPS_WITH_3DES_EDE_CBC_SHA)
+#ifdef SSL3_TXT_RSA_RC4_128_SHA
+ CIPHER(0x0005, SSL3_TXT_RSA_RC4_128_SHA)
#else
- XCIPHER(0xfeff, SSL_RSA_FIPS_WITH_3DES_EDE_CBC_SHA)
+ XCIPHER(0x0005, SSL3_TXT_RSA_RC4_128_SHA)
#endif
-#ifdef SSL3_TXT_RSA_DES_192_CBC3_SHA
- CIPHER(0x000a, SSL3_TXT_RSA_DES_192_CBC3_SHA)
+#ifdef SSL3_TXT_RSA_RC4_128_MD5
+ CIPHER(0x0004, SSL3_TXT_RSA_RC4_128_MD5)
#else
- XCIPHER(0x000a, SSL3_TXT_RSA_DES_192_CBC3_SHA)
+ XCIPHER(0x0004, SSL3_TXT_RSA_RC4_128_MD5)
#endif
diff --git a/src/common/compat.c b/src/common/compat.c
index 59e3898de..111070cc1 100644
--- a/src/common/compat.c
+++ b/src/common/compat.c
@@ -1,6 +1,6 @@
/* Copyright (c) 2003-2004, Roger Dingledine
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -18,11 +18,12 @@
/* XXXX024 We should just use AC_USE_SYSTEM_EXTENSIONS in our autoconf,
* and get this (and other important stuff!) automatically. Once we do that,
* make sure to also change the extern char **environ detection in
- * configure.in, because whether that is declared or not depends on whether
+ * configure.ac, because whether that is declared or not depends on whether
* we have _GNU_SOURCE defined! Maybe that means that once we take this out,
* we can also take out the configure check. */
#define _GNU_SOURCE
+#define COMPAT_PRIVATE
#include "compat.h"
#ifdef _WIN32
@@ -34,6 +35,15 @@
#ifdef HAVE_UNAME
#include <sys/utsname.h>
#endif
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SYSCTL_H
+#include <sys/sysctl.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
@@ -109,6 +119,7 @@
#include "util.h"
#include "container.h"
#include "address.h"
+#include "sandbox.h"
/* Inline the strl functions if the platform doesn't have them. */
#ifndef HAVE_STRLCPY
@@ -125,6 +136,7 @@ tor_open_cloexec(const char *path, int flags, unsigned mode)
{
int fd;
#ifdef O_CLOEXEC
+ path = sandbox_intern_string(path);
fd = open(path, flags|O_CLOEXEC, mode);
if (fd >= 0)
return fd;
@@ -135,10 +147,16 @@ tor_open_cloexec(const char *path, int flags, unsigned mode)
return -1;
#endif
+ log_debug(LD_FS, "Opening %s with flags %x", path, flags);
fd = open(path, flags, mode);
#ifdef FD_CLOEXEC
- if (fd >= 0)
- fcntl(fd, F_SETFD, FD_CLOEXEC);
+ if (fd >= 0) {
+ if (fcntl(fd, F_SETFD, FD_CLOEXEC) == -1) {
+ log_warn(LD_FS,"Couldn't set FD_CLOEXEC: %s", strerror(errno));
+ close(fd);
+ return -1;
+ }
+ }
#endif
return fd;
}
@@ -150,12 +168,26 @@ tor_fopen_cloexec(const char *path, const char *mode)
{
FILE *result = fopen(path, mode);
#ifdef FD_CLOEXEC
- if (result != NULL)
- fcntl(fileno(result), F_SETFD, FD_CLOEXEC);
+ if (result != NULL) {
+ if (fcntl(fileno(result), F_SETFD, FD_CLOEXEC) == -1) {
+ log_warn(LD_FS,"Couldn't set FD_CLOEXEC: %s", strerror(errno));
+ fclose(result);
+ return NULL;
+ }
+ }
#endif
return result;
}
+/** As rename(), but work correctly with the sandbox. */
+int
+tor_rename(const char *path_old, const char *path_new)
+{
+ log_debug(LD_FS, "Renaming %s to %s", path_old, path_new);
+ return rename(sandbox_intern_string(path_old),
+ sandbox_intern_string(path_new));
+}
+
#if defined(HAVE_SYS_MMAN_H) || defined(RUNNING_DOXYGEN)
/** Try to create a memory mapping for <b>filename</b> and return it. On
* failure, return NULL. Sets errno properly, using ERANGE to mean
@@ -165,9 +197,10 @@ tor_mmap_file(const char *filename)
{
int fd; /* router file */
char *string;
- int page_size;
+ int page_size, result;
tor_mmap_t *res;
size_t size, filesize;
+ struct stat st;
tor_assert(filename);
@@ -181,9 +214,22 @@ tor_mmap_file(const char *filename)
return NULL;
}
- /* XXXX why not just do fstat here? */
- size = filesize = (size_t) lseek(fd, 0, SEEK_END);
- lseek(fd, 0, SEEK_SET);
+ /* Get the size of the file */
+ result = fstat(fd, &st);
+ if (result != 0) {
+ int save_errno = errno;
+ log_warn(LD_FS,
+ "Couldn't fstat opened descriptor for \"%s\" during mmap: %s",
+ filename, strerror(errno));
+ close(fd);
+ errno = save_errno;
+ return NULL;
+ }
+ size = filesize = (size_t)(st.st_size);
+ /*
+ * Should we check for weird crap like mmapping a named pipe here,
+ * or just wait for if (!size) below to fail?
+ */
/* ensure page alignment */
page_size = getpagesize();
size += (size%page_size) ? page_size-(size%page_size) : 0;
@@ -214,12 +260,27 @@ tor_mmap_file(const char *filename)
return res;
}
-/** Release storage held for a memory mapping. */
-void
+/** Release storage held for a memory mapping; returns 0 on success,
+ * or -1 on failure (and logs a warning). */
+int
tor_munmap_file(tor_mmap_t *handle)
{
- munmap((char*)handle->data, handle->mapping_size);
- tor_free(handle);
+ int res;
+
+ if (handle == NULL)
+ return 0;
+
+ res = munmap((char*)handle->data, handle->mapping_size);
+ if (res == 0) {
+ /* munmap() succeeded */
+ tor_free(handle);
+ } else {
+ log_warn(LD_FS, "Failed to munmap() in tor_munmap_file(): %s",
+ strerror(errno));
+ res = -1;
+ }
+
+ return res;
}
#elif defined(_WIN32)
tor_mmap_t *
@@ -301,17 +362,29 @@ tor_mmap_file(const char *filename)
tor_munmap_file(res);
return NULL;
}
-void
+
+/* Unmap the file, and return 0 for success or -1 for failure */
+int
tor_munmap_file(tor_mmap_t *handle)
{
- if (handle->data)
+ if (handle == NULL)
+ return 0;
+
+ if (handle->data) {
/* This is an ugly cast, but without it, "data" in struct tor_mmap_t would
have to be redefined as non-const. */
- UnmapViewOfFile( (LPVOID) handle->data);
+ BOOL ok = UnmapViewOfFile( (LPVOID) handle->data);
+ if (!ok) {
+ log_warn(LD_FS, "Failed to UnmapViewOfFile() in tor_munmap_file(): %d",
+ (int)GetLastError());
+ }
+ }
if (handle->mmap_handle != NULL)
CloseHandle(handle->mmap_handle);
tor_free(handle);
+
+ return 0;
}
#else
tor_mmap_t *
@@ -327,13 +400,25 @@ tor_mmap_file(const char *filename)
handle->size = st.st_size;
return handle;
}
-void
+
+/** Unmap the file mapped with tor_mmap_file(), and return 0 for success
+ * or -1 for failure.
+ */
+
+int
tor_munmap_file(tor_mmap_t *handle)
{
- char *d = (char*)handle->data;
+ char *d = NULL;
+ if (handle == NULL)
+ return 0;
+
+ d = (char*)handle->data;
tor_free(d);
memwipe(handle, 0, sizeof(tor_mmap_t));
tor_free(handle);
+
+ /* Can't fail in this mmap()/munmap()-free case */
+ return 0;
}
#endif
@@ -425,11 +510,10 @@ tor_vasprintf(char **strp, const char *fmt, va_list args)
else
*strp = strp_tmp;
return r;
-#elif defined(_MSC_VER)
+#elif defined(HAVE__VSCPRINTF)
/* On Windows, _vsnprintf won't tell us the length of the string if it
* overflows, so we need to use _vcsprintf to tell how much to allocate */
int len, r;
- char *res;
len = _vscprintf(fmt, args);
if (len < 0) {
*strp = NULL;
@@ -489,21 +573,29 @@ tor_memmem(const void *_haystack, size_t hlen,
#else
/* This isn't as fast as the GLIBC implementation, but it doesn't need to
* be. */
- const char *p, *end;
+ const char *p, *last_possible_start;
const char *haystack = (const char*)_haystack;
const char *needle = (const char*)_needle;
char first;
tor_assert(nlen);
+ if (nlen > hlen)
+ return NULL;
+
p = haystack;
- end = haystack + hlen;
+ /* Last position at which the needle could start. */
+ last_possible_start = haystack + hlen - nlen;
first = *(const char*)needle;
- while ((p = memchr(p, first, end-p))) {
- if (p+nlen > end)
- return NULL;
+ while ((p = memchr(p, first, last_possible_start + 1 - p))) {
if (fast_memeq(p, needle, nlen))
return p;
- ++p;
+ if (++p > last_possible_start) {
+ /* This comparison shouldn't be necessary, since if p was previously
+ * equal to last_possible_start, the next memchr call would be
+ * "memchr(p, first, 0)", which will return NULL. But it clarifies the
+ * logic. */
+ return NULL;
+ }
}
return NULL;
#endif
@@ -720,7 +812,7 @@ int
replace_file(const char *from, const char *to)
{
#ifndef _WIN32
- return rename(from,to);
+ return tor_rename(from, to);
#else
switch (file_status(to))
{
@@ -735,7 +827,7 @@ replace_file(const char *from, const char *to)
errno = EISDIR;
return -1;
}
- return rename(from,to);
+ return tor_rename(from,to);
#endif
}
@@ -861,6 +953,9 @@ tor_lockfile_unlock(tor_lockfile_t *lockfile)
/** @{ */
/** Some old versions of Unix didn't define constants for these values,
* and instead expect you to say 0, 1, or 2. */
+#ifndef SEEK_SET
+#define SEEK_SET 0
+#endif
#ifndef SEEK_CUR
#define SEEK_CUR 1
#endif
@@ -891,6 +986,18 @@ tor_fd_seekend(int fd)
#endif
}
+/** Move <b>fd</b> to position <b>pos</b> in the file. Return -1 on error, 0
+ * on success. */
+int
+tor_fd_setpos(int fd, off_t pos)
+{
+#ifdef _WIN32
+ return _lseek(fd, pos, SEEK_SET) < 0 ? -1 : 0;
+#else
+ return lseek(fd, pos, SEEK_SET) < 0 ? -1 : 0;
+#endif
+}
+
#undef DEBUG_SOCKET_COUNTING
#ifdef DEBUG_SOCKET_COUNTING
/** A bitarray of all fds that should be passed to tor_socket_close(). Only
@@ -924,24 +1031,40 @@ socket_accounting_unlock(void)
}
/** As close(), but guaranteed to work for sockets across platforms (including
- * Windows, where close()ing a socket doesn't work. Returns 0 on success, -1
- * on failure. */
+ * Windows, where close()ing a socket doesn't work. Returns 0 on success and
+ * the socket error code on failure. */
int
-tor_close_socket(tor_socket_t s)
+tor_close_socket_simple(tor_socket_t s)
{
int r = 0;
/* On Windows, you have to call close() on fds returned by open(),
- * and closesocket() on fds returned by socket(). On Unix, everything
- * gets close()'d. We abstract this difference by always using
- * tor_close_socket to close sockets, and always using close() on
- * files.
- */
-#if defined(_WIN32)
- r = closesocket(s);
-#else
- r = close(s);
-#endif
+ * and closesocket() on fds returned by socket(). On Unix, everything
+ * gets close()'d. We abstract this difference by always using
+ * tor_close_socket to close sockets, and always using close() on
+ * files.
+ */
+ #if defined(_WIN32)
+ r = closesocket(s);
+ #else
+ r = close(s);
+ #endif
+
+ if (r != 0) {
+ int err = tor_socket_errno(-1);
+ log_info(LD_NET, "Close returned an error: %s", tor_socket_strerror(err));
+ return err;
+ }
+
+ return r;
+}
+
+/** As tor_close_socket_simple(), but keeps track of the number
+ * of open sockets. Returns 0 on success, -1 on failure. */
+int
+tor_close_socket(tor_socket_t s)
+{
+ int r = tor_close_socket_simple(s);
socket_accounting_lock();
#ifdef DEBUG_SOCKET_COUNTING
@@ -956,13 +1079,11 @@ tor_close_socket(tor_socket_t s)
if (r == 0) {
--n_sockets_open;
} else {
- int err = tor_socket_errno(-1);
- log_info(LD_NET, "Close returned an error: %s", tor_socket_strerror(err));
#ifdef _WIN32
- if (err != WSAENOTSOCK)
+ if (r != WSAENOTSOCK)
--n_sockets_open;
#else
- if (err != EBADF)
+ if (r != EBADF)
--n_sockets_open;
#endif
r = -1;
@@ -1008,26 +1129,62 @@ mark_socket_open(tor_socket_t s)
tor_socket_t
tor_open_socket(int domain, int type, int protocol)
{
+ return tor_open_socket_with_extensions(domain, type, protocol, 1, 0);
+}
+
+/** As socket(), but creates a nonblocking socket and
+ * counts the number of open sockets. */
+tor_socket_t
+tor_open_socket_nonblocking(int domain, int type, int protocol)
+{
+ return tor_open_socket_with_extensions(domain, type, protocol, 1, 1);
+}
+
+/** As socket(), but counts the number of open sockets and handles
+ * socket creation with either of SOCK_CLOEXEC and SOCK_NONBLOCK specified.
+ * <b>cloexec</b> and <b>nonblock</b> should be either 0 or 1 to indicate
+ * if the corresponding extension should be used.*/
+tor_socket_t
+tor_open_socket_with_extensions(int domain, int type, int protocol,
+ int cloexec, int nonblock)
+{
tor_socket_t s;
-#ifdef SOCK_CLOEXEC
- s = socket(domain, type|SOCK_CLOEXEC, protocol);
+#if defined(SOCK_CLOEXEC) && defined(SOCK_NONBLOCK)
+ int ext_flags = (cloexec ? SOCK_CLOEXEC : 0) |
+ (nonblock ? SOCK_NONBLOCK : 0);
+ s = socket(domain, type|ext_flags, protocol);
if (SOCKET_OK(s))
goto socket_ok;
/* If we got an error, see if it is EINVAL. EINVAL might indicate that,
- * even though we were built on a system with SOCK_CLOEXEC support, we
- * are running on one without. */
+ * even though we were built on a system with SOCK_CLOEXEC and SOCK_NONBLOCK
+ * support, we are running on one without. */
if (errno != EINVAL)
return s;
-#endif /* SOCK_CLOEXEC */
+#endif /* SOCK_CLOEXEC && SOCK_NONBLOCK */
s = socket(domain, type, protocol);
if (! SOCKET_OK(s))
return s;
#if defined(FD_CLOEXEC)
- fcntl(s, F_SETFD, FD_CLOEXEC);
+ if (cloexec) {
+ if (fcntl(s, F_SETFD, FD_CLOEXEC) == -1) {
+ log_warn(LD_FS,"Couldn't set FD_CLOEXEC: %s", strerror(errno));
+ tor_close_socket_simple(s);
+ return TOR_INVALID_SOCKET;
+ }
+ }
+#else
+ (void)cloexec;
#endif
+ if (nonblock) {
+ if (set_socket_nonblocking(s) == -1) {
+ tor_close_socket_simple(s);
+ return TOR_INVALID_SOCKET;
+ }
+ }
+
goto socket_ok; /* So that socket_ok will not be unused. */
socket_ok:
@@ -1038,19 +1195,41 @@ tor_open_socket(int domain, int type, int protocol)
return s;
}
-/** As socket(), but counts the number of open sockets. */
+/** As accept(), but counts the number of open sockets. */
tor_socket_t
tor_accept_socket(tor_socket_t sockfd, struct sockaddr *addr, socklen_t *len)
{
+ return tor_accept_socket_with_extensions(sockfd, addr, len, 1, 0);
+}
+
+/** As accept(), but returns a nonblocking socket and
+ * counts the number of open sockets. */
+tor_socket_t
+tor_accept_socket_nonblocking(tor_socket_t sockfd, struct sockaddr *addr,
+ socklen_t *len)
+{
+ return tor_accept_socket_with_extensions(sockfd, addr, len, 1, 1);
+}
+
+/** As accept(), but counts the number of open sockets and handles
+ * socket creation with either of SOCK_CLOEXEC and SOCK_NONBLOCK specified.
+ * <b>cloexec</b> and <b>nonblock</b> should be either 0 or 1 to indicate
+ * if the corresponding extension should be used.*/
+tor_socket_t
+tor_accept_socket_with_extensions(tor_socket_t sockfd, struct sockaddr *addr,
+ socklen_t *len, int cloexec, int nonblock)
+{
tor_socket_t s;
-#if defined(HAVE_ACCEPT4) && defined(SOCK_CLOEXEC)
- s = accept4(sockfd, addr, len, SOCK_CLOEXEC);
+#if defined(HAVE_ACCEPT4) && defined(SOCK_CLOEXEC) && defined(SOCK_NONBLOCK)
+ int ext_flags = (cloexec ? SOCK_CLOEXEC : 0) |
+ (nonblock ? SOCK_NONBLOCK : 0);
+ s = accept4(sockfd, addr, len, ext_flags);
if (SOCKET_OK(s))
goto socket_ok;
/* If we got an error, see if it is ENOSYS. ENOSYS indicates that,
* even though we were built on a system with accept4 support, we
* are running on one without. Also, check for EINVAL, which indicates that
- * we are missing SOCK_CLOEXEC support. */
+ * we are missing SOCK_CLOEXEC/SOCK_NONBLOCK support. */
if (errno != EINVAL && errno != ENOSYS)
return s;
#endif
@@ -1060,9 +1239,24 @@ tor_accept_socket(tor_socket_t sockfd, struct sockaddr *addr, socklen_t *len)
return s;
#if defined(FD_CLOEXEC)
- fcntl(s, F_SETFD, FD_CLOEXEC);
+ if (cloexec) {
+ if (fcntl(s, F_SETFD, FD_CLOEXEC) == -1) {
+ log_warn(LD_NET, "Couldn't set FD_CLOEXEC: %s", strerror(errno));
+ tor_close_socket_simple(s);
+ return TOR_INVALID_SOCKET;
+ }
+ }
+#else
+ (void)cloexec;
#endif
+ if (nonblock) {
+ if (set_socket_nonblocking(s) == -1) {
+ tor_close_socket_simple(s);
+ return TOR_INVALID_SOCKET;
+ }
+ }
+
goto socket_ok; /* So that socket_ok will not be unused. */
socket_ok:
@@ -1084,17 +1278,31 @@ get_n_open_sockets(void)
return n;
}
-/** Turn <b>socket</b> into a nonblocking socket.
+/** Turn <b>socket</b> into a nonblocking socket. Return 0 on success, -1
+ * on failure.
*/
-void
+int
set_socket_nonblocking(tor_socket_t socket)
{
#if defined(_WIN32)
unsigned long nonblocking = 1;
ioctlsocket(socket, FIONBIO, (unsigned long*) &nonblocking);
#else
- fcntl(socket, F_SETFL, O_NONBLOCK);
+ int flags;
+
+ flags = fcntl(socket, F_GETFL, 0);
+ if (flags == -1) {
+ log_warn(LD_NET, "Couldn't get file status flags: %s", strerror(errno));
+ return -1;
+ }
+ flags |= O_NONBLOCK;
+ if (fcntl(socket, F_SETFL, flags) == -1) {
+ log_warn(LD_NET, "Couldn't set file status flags: %s", strerror(errno));
+ return -1;
+ }
#endif
+
+ return 0;
}
/**
@@ -1137,10 +1345,22 @@ tor_socketpair(int family, int type, int protocol, tor_socket_t fd[2])
return -errno;
#if defined(FD_CLOEXEC)
- if (SOCKET_OK(fd[0]))
- fcntl(fd[0], F_SETFD, FD_CLOEXEC);
- if (SOCKET_OK(fd[1]))
- fcntl(fd[1], F_SETFD, FD_CLOEXEC);
+ if (SOCKET_OK(fd[0])) {
+ r = fcntl(fd[0], F_SETFD, FD_CLOEXEC);
+ if (r == -1) {
+ close(fd[0]);
+ close(fd[1]);
+ return -errno;
+ }
+ }
+ if (SOCKET_OK(fd[1])) {
+ r = fcntl(fd[1], F_SETFD, FD_CLOEXEC);
+ if (r == -1) {
+ close(fd[0]);
+ close(fd[1]);
+ return -errno;
+ }
+ }
#endif
goto sockets_ok; /* So that sockets_ok will not be unused. */
@@ -1158,17 +1378,29 @@ tor_socketpair(int family, int type, int protocol, tor_socket_t fd[2])
return 0;
#else
+ return tor_ersatz_socketpair(family, type, protocol, fd);
+#endif
+}
+
+#ifdef NEED_ERSATZ_SOCKETPAIR
+/**
+ * Helper used to implement socketpair on systems that lack it, by
+ * making a direct connection to localhost.
+ */
+STATIC int
+tor_ersatz_socketpair(int family, int type, int protocol, tor_socket_t fd[2])
+{
/* This socketpair does not work when localhost is down. So
* it's really not the same thing at all. But it's close enough
* for now, and really, when localhost is down sometimes, we
* have other problems too.
*/
- tor_socket_t listener = -1;
- tor_socket_t connector = -1;
- tor_socket_t acceptor = -1;
+ tor_socket_t listener = TOR_INVALID_SOCKET;
+ tor_socket_t connector = TOR_INVALID_SOCKET;
+ tor_socket_t acceptor = TOR_INVALID_SOCKET;
struct sockaddr_in listen_addr;
struct sockaddr_in connect_addr;
- int size;
+ socklen_t size;
int saved_errno = -1;
if (protocol
@@ -1219,7 +1451,6 @@ tor_socketpair(int family, int type, int protocol, tor_socket_t fd[2])
goto tidy_up_and_fail;
if (size != sizeof(listen_addr))
goto abort_tidy_up_and_fail;
- tor_close_socket(listener);
/* Now check we are talking to ourself by matching port and host on the
two sockets. */
if (getsockname(connector, (struct sockaddr *) &connect_addr, &size) == -1)
@@ -1230,6 +1461,7 @@ tor_socketpair(int family, int type, int protocol, tor_socket_t fd[2])
|| listen_addr.sin_port != connect_addr.sin_port) {
goto abort_tidy_up_and_fail;
}
+ tor_close_socket(listener);
fd[0] = connector;
fd[1] = acceptor;
@@ -1244,19 +1476,19 @@ tor_socketpair(int family, int type, int protocol, tor_socket_t fd[2])
tidy_up_and_fail:
if (saved_errno < 0)
saved_errno = errno;
- if (listener != -1)
+ if (SOCKET_OK(listener))
tor_close_socket(listener);
- if (connector != -1)
+ if (SOCKET_OK(connector))
tor_close_socket(connector);
- if (acceptor != -1)
+ if (SOCKET_OK(acceptor))
tor_close_socket(acceptor);
return -saved_errno;
-#endif
}
+#endif
/** Number of extra file descriptors to keep in reserve beyond those that we
* tell Tor it's allowed to use. */
-#define ULIMIT_BUFFER 32 /* keep 32 extra fd's beyond _ConnLimit */
+#define ULIMIT_BUFFER 32 /* keep 32 extra fd's beyond ConnLimit_ */
/** Learn the maximum allowed number of file descriptors, and tell the system
* we want to use up to that number. (Some systems have a low soft limit, and
@@ -1470,6 +1702,106 @@ log_credential_status(void)
}
#endif
+#ifndef _WIN32
+/** Cached struct from the last getpwname() call we did successfully. */
+static struct passwd *passwd_cached = NULL;
+
+/** Helper: copy a struct passwd object.
+ *
+ * We only copy the fields pw_uid, pw_gid, pw_name, pw_dir. Tor doesn't use
+ * any others, and I don't want to run into incompatibilities.
+ */
+static struct passwd *
+tor_passwd_dup(const struct passwd *pw)
+{
+ struct passwd *new_pw = tor_malloc_zero(sizeof(struct passwd));
+ if (pw->pw_name)
+ new_pw->pw_name = tor_strdup(pw->pw_name);
+ if (pw->pw_dir)
+ new_pw->pw_dir = tor_strdup(pw->pw_dir);
+ new_pw->pw_uid = pw->pw_uid;
+ new_pw->pw_gid = pw->pw_gid;
+
+ return new_pw;
+}
+
+/** Helper: free one of our cached 'struct passwd' values. */
+static void
+tor_passwd_free(struct passwd *pw)
+{
+ if (!pw)
+ return;
+
+ tor_free(pw->pw_name);
+ tor_free(pw->pw_dir);
+ tor_free(pw);
+}
+
+/** Wrapper around getpwnam() that caches result. Used so that we don't need
+ * to give the sandbox access to /etc/passwd.
+ *
+ * The following fields alone will definitely be copied in the output: pw_uid,
+ * pw_gid, pw_name, pw_dir. Other fields are not present in cached values.
+ *
+ * When called with a NULL argument, this function clears storage associated
+ * with static variables it uses.
+ **/
+const struct passwd *
+tor_getpwnam(const char *username)
+{
+ struct passwd *pw;
+
+ if (username == NULL) {
+ tor_passwd_free(passwd_cached);
+ passwd_cached = NULL;
+ return NULL;
+ }
+
+ if ((pw = getpwnam(username))) {
+ tor_passwd_free(passwd_cached);
+ passwd_cached = tor_passwd_dup(pw);
+ log_notice(LD_GENERAL, "Caching new entry %s for %s",
+ passwd_cached->pw_name, username);
+ return pw;
+ }
+
+ /* Lookup failed */
+ if (! passwd_cached || ! passwd_cached->pw_name)
+ return NULL;
+
+ if (! strcmp(username, passwd_cached->pw_name))
+ return passwd_cached;
+
+ return NULL;
+}
+
+/** Wrapper around getpwnam() that can use cached result from
+ * tor_getpwnam(). Used so that we don't need to give the sandbox access to
+ * /etc/passwd.
+ *
+ * The following fields alone will definitely be copied in the output: pw_uid,
+ * pw_gid, pw_name, pw_dir. Other fields are not present in cached values.
+ */
+const struct passwd *
+tor_getpwuid(uid_t uid)
+{
+ struct passwd *pw;
+
+ if ((pw = getpwuid(uid))) {
+ return pw;
+ }
+
+ /* Lookup failed */
+ if (! passwd_cached)
+ return NULL;
+
+ if (uid == passwd_cached->pw_uid)
+ return passwd_cached;
+
+ return NULL;
+}
+#endif
+
/** Call setuid and setgid to run as <b>user</b> and switch to their
* primary group. Return 0 on success. On failure, log and return -1.
*/
@@ -1477,7 +1809,7 @@ int
switch_id(const char *user)
{
#ifndef _WIN32
- struct passwd *pw = NULL;
+ const struct passwd *pw = NULL;
uid_t old_uid;
gid_t old_gid;
static int have_already_switched_id = 0;
@@ -1498,7 +1830,7 @@ switch_id(const char *user)
old_gid = getgid();
/* Lookup the user and group information, if we have a problem, bail out. */
- pw = getpwnam(user);
+ pw = tor_getpwnam(user);
if (pw == NULL) {
log_warn(LD_CONFIG, "Error setting configured user: %s not found", user);
return -1;
@@ -1669,10 +2001,10 @@ tor_disable_debugger_attach(void)
char *
get_user_homedir(const char *username)
{
- struct passwd *pw;
+ const struct passwd *pw;
tor_assert(username);
- if (!(pw = getpwnam(username))) {
+ if (!(pw = tor_getpwnam(username))) {
log_err(LD_CONFIG,"User \"%s\" not found.", username);
return NULL;
}
@@ -1684,6 +2016,15 @@ get_user_homedir(const char *username)
* actually examine the filesystem; does a purely syntactic modification.
*
* The parent of the root director is considered to be iteself.
+ *
+ * Path separators are the forward slash (/) everywhere and additionally
+ * the backslash (\) on Win32.
+ *
+ * Cuts off any number of trailing path separators but otherwise ignores
+ * them for purposes of finding the parent directory.
+ *
+ * Returns 0 if a parent directory was successfully found, -1 otherwise (fname
+ * did not have any path separators or only had them at the end).
* */
int
get_parent_directory(char *fname)
@@ -1957,8 +2298,10 @@ tor_inet_pton(int af, const char *src, void *dst)
else {
unsigned byte1,byte2,byte3,byte4;
char more;
- for (eow = dot-1; eow >= src && TOR_ISDIGIT(*eow); --eow)
+ for (eow = dot-1; eow > src && TOR_ISDIGIT(*eow); --eow)
;
+ if (*eow != ':')
+ return 0;
++eow;
/* We use "scanf" because some platform inet_aton()s are too lax
@@ -2060,30 +2403,6 @@ tor_lookup_hostname(const char *name, uint32_t *addr)
return -1;
}
-/** Initialize the insecure libc RNG. */
-void
-tor_init_weak_random(unsigned seed)
-{
-#ifdef _WIN32
- srand(seed);
-#else
- srandom(seed);
-#endif
-}
-
-/** Return a randomly chosen value in the range 0..TOR_RAND_MAX. This
- * entropy will not be cryptographically strong; do not rely on it
- * for anything an adversary should not be able to predict. */
-long
-tor_weak_random(void)
-{
-#ifdef _WIN32
- return rand();
-#else
- return random();
-#endif
-}
-
/** Hold the result of our call to <b>uname</b>. */
static char uname_result[256];
/** True iff uname_result is set. */
@@ -2210,6 +2529,12 @@ tor_pthread_helper_fn(void *_data)
func(arg);
return NULL;
}
+/**
+ * A pthread attribute to make threads start detached.
+ */
+static pthread_attr_t attr_detached;
+/** True iff we've called tor_threads_init() */
+static int threads_initialized = 0;
#endif
/** Minimalist interface to run a void function in the background. On
@@ -2233,12 +2558,12 @@ spawn_func(void (*func)(void *), void *data)
#elif defined(USE_PTHREADS)
pthread_t thread;
tor_pthread_data_t *d;
+ if (PREDICT_UNLIKELY(!threads_initialized))
+ tor_threads_init();
d = tor_malloc(sizeof(tor_pthread_data_t));
d->data = data;
d->func = func;
- if (pthread_create(&thread,NULL,tor_pthread_helper_fn,d))
- return -1;
- if (pthread_detach(thread))
+ if (pthread_create(&thread,&attr_detached,tor_pthread_helper_fn,d))
return -1;
return 0;
#else
@@ -2290,8 +2615,33 @@ compute_num_cpus_impl(void)
return (int)info.dwNumberOfProcessors;
else
return -1;
-#elif defined(HAVE_SYSCONF) && defined(_SC_NPROCESSORS_CONF)
- long cpus = sysconf(_SC_NPROCESSORS_CONF);
+#elif defined(HAVE_SYSCONF)
+#ifdef _SC_NPROCESSORS_CONF
+ long cpus_conf = sysconf(_SC_NPROCESSORS_CONF);
+#else
+ long cpus_conf = -1;
+#endif
+#ifdef _SC_NPROCESSORS_ONLN
+ long cpus_onln = sysconf(_SC_NPROCESSORS_ONLN);
+#else
+ long cpus_onln = -1;
+#endif
+ long cpus = -1;
+
+ if (cpus_conf > 0 && cpus_onln < 0) {
+ cpus = cpus_conf;
+ } else if (cpus_onln > 0 && cpus_conf < 0) {
+ cpus = cpus_onln;
+ } else if (cpus_onln > 0 && cpus_conf > 0) {
+ if (cpus_onln < cpus_conf) {
+ log_notice(LD_GENERAL, "I think we have %ld CPUS, but only %ld of them "
+ "are available. Telling Tor to only use %ld. You can over"
+ "ride this with the NumCPUs option",
+ cpus_conf, cpus_onln, cpus_onln);
+ }
+ cpus = cpus_onln;
+ }
+
if (cpus >= 1 && cpus < INT_MAX)
return (int)cpus;
else
@@ -2570,8 +2920,6 @@ tor_get_thread_id(void)
* "reentrant" mutexes (i.e., once we can re-lock if we're already holding
* them.) */
static pthread_mutexattr_t attr_reentrant;
-/** True iff we've called tor_threads_init() */
-static int threads_initialized = 0;
/** Initialize <b>mutex</b> so it can be locked. Every mutex must be set
* up with tor_mutex_init() or tor_mutex_new(); not both. */
void
@@ -2715,6 +3063,8 @@ tor_threads_init(void)
if (!threads_initialized) {
pthread_mutexattr_init(&attr_reentrant);
pthread_mutexattr_settype(&attr_reentrant, PTHREAD_MUTEX_RECURSIVE);
+ tor_assert(0==pthread_attr_init(&attr_detached));
+ tor_assert(0==pthread_attr_setdetachstate(&attr_detached, 1));
threads_initialized = 1;
set_main_thread();
}
@@ -2759,7 +3109,7 @@ tor_cond_wait(tor_cond_t *cond, tor_mutex_t *mutex)
EnterCriticalSection(&cond->mutex);
tor_assert(WaitForSingleObject(event, 0) == WAIT_TIMEOUT);
- tor_assert(!smartlist_isin(cond->events, event));
+ tor_assert(!smartlist_contains(cond->events, event));
smartlist_add(cond->events, event);
LeaveCriticalSection(&cond->mutex);
@@ -3090,3 +3440,119 @@ format_win32_error(DWORD err)
}
#endif
+#if defined(HW_PHYSMEM64)
+/* This appears to be an OpenBSD thing */
+#define INT64_HW_MEM HW_PHYSMEM64
+#elif defined(HW_MEMSIZE)
+/* OSX defines this one */
+#define INT64_HW_MEM HW_MEMSIZE
+#endif
+
+/**
+ * Helper: try to detect the total system memory, and return it. On failure,
+ * return 0.
+ */
+static uint64_t
+get_total_system_memory_impl(void)
+{
+#if defined(__linux__)
+ /* On linux, sysctl is deprecated. Because proc is so awesome that you
+ * shouldn't _want_ to write portable code, I guess? */
+ unsigned long long result=0;
+ int fd = -1;
+ char *s = NULL;
+ const char *cp;
+ size_t file_size=0;
+ if (-1 == (fd = tor_open_cloexec("/proc/meminfo",O_RDONLY,0)))
+ return 0;
+ s = read_file_to_str_until_eof(fd, 65536, &file_size);
+ if (!s)
+ goto err;
+ cp = strstr(s, "MemTotal:");
+ if (!cp)
+ goto err;
+ /* Use the system sscanf so that space will match a wider number of space */
+ if (sscanf(cp, "MemTotal: %llu kB\n", &result) != 1)
+ goto err;
+
+ close(fd);
+ tor_free(s);
+ return result * 1024;
+
+ err:
+ tor_free(s);
+ close(fd);
+ return 0;
+#elif defined (_WIN32)
+ /* Windows has MEMORYSTATUSEX; pretty straightforward. */
+ MEMORYSTATUSEX ms;
+ memset(&ms, 0, sizeof(ms));
+ ms.dwLength = sizeof(ms);
+ if (! GlobalMemoryStatusEx(&ms))
+ return 0;
+
+ return ms.ullTotalPhys;
+
+#elif defined(HAVE_SYSCTL) && defined(INT64_HW_MEM)
+ /* On many systems, HW_PYHSMEM is clipped to 32 bits; let's use a better
+ * variant if we know about it. */
+ uint64_t memsize = 0;
+ size_t len = sizeof(memsize);
+ int mib[2] = {CTL_HW, INT64_HW_MEM};
+ if (sysctl(mib,2,&memsize,&len,NULL,0))
+ return 0;
+
+ return memsize;
+
+#elif defined(HAVE_SYSCTL) && defined(HW_PHYSMEM)
+ /* On some systems (like FreeBSD I hope) you can use a size_t with
+ * HW_PHYSMEM. */
+ size_t memsize=0;
+ size_t len = sizeof(memsize);
+ int mib[2] = {CTL_HW, HW_USERMEM};
+ if (sysctl(mib,2,&memsize,&len,NULL,0))
+ return -1;
+
+ return memsize;
+
+#else
+ /* I have no clue. */
+ return 0;
+#endif
+}
+
+/**
+ * Try to find out how much physical memory the system has. On success,
+ * return 0 and set *<b>mem_out</b> to that value. On failure, return -1.
+ */
+int
+get_total_system_memory(size_t *mem_out)
+{
+ static size_t mem_cached=0;
+ uint64_t m = get_total_system_memory_impl();
+ if (0 == m) {
+ /* We couldn't find our memory total */
+ if (0 == mem_cached) {
+ /* We have no cached value either */
+ *mem_out = 0;
+ return -1;
+ }
+
+ *mem_out = mem_cached;
+ return 0;
+ }
+
+#if SIZE_T_MAX != UINT64_MAX
+ if (m > SIZE_T_MAX) {
+ /* I think this could happen if we're a 32-bit Tor running on a 64-bit
+ * system: we could have more system memory than would fit in a
+ * size_t. */
+ m = SIZE_T_MAX;
+ }
+#endif
+
+ *mem_out = mem_cached = (size_t) m;
+
+ return 0;
+}
+
diff --git a/src/common/compat.h b/src/common/compat.h
index 42648bb04..683c4d089 100644
--- a/src/common/compat.h
+++ b/src/common/compat.h
@@ -1,13 +1,14 @@
/* Copyright (c) 2003-2004, Roger Dingledine
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
-#ifndef _TOR_COMPAT_H
-#define _TOR_COMPAT_H
+#ifndef TOR_COMPAT_H
+#define TOR_COMPAT_H
#include "orconfig.h"
#include "torint.h"
+#include "testsupport.h"
#ifdef _WIN32
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0501
@@ -53,13 +54,13 @@
#endif
#include <stdio.h>
+#include <errno.h>
#if defined (WINCE)
#include <fcntl.h>
#include <io.h>
#include <math.h>
#include <projects.h>
-#define snprintf _snprintf
/* this is not exported as W .... */
#define SHGetPathFromIDListW SHGetPathFromIDList
/* wcecompat has vasprintf */
@@ -74,19 +75,29 @@
#error "It seems your platform does not represent NULL as zero. We can't cope."
#endif
+#ifndef DOUBLE_0_REP_IS_ZERO_BYTES
+#error "It seems your platform does not represent 0.0 as zeros. We can't cope."
+#endif
+
#if 'a'!=97 || 'z'!=122 || 'A'!=65 || ' '!=32
#error "It seems that you encode characters in something other than ASCII."
#endif
/* ===== Compiler compatibility */
-/* GCC can check printf types on arbitrary functions. */
+/* GCC can check printf and scanf types on arbitrary functions. */
#ifdef __GNUC__
#define CHECK_PRINTF(formatIdx, firstArg) \
__attribute__ ((format(printf, formatIdx, firstArg)))
#else
#define CHECK_PRINTF(formatIdx, firstArg)
#endif
+#ifdef __GNUC__
+#define CHECK_SCANF(formatIdx, firstArg) \
+ __attribute__ ((format(scanf, formatIdx, firstArg)))
+#else
+#define CHECK_SCANF(formatIdx, firstArg)
+#endif
/* inline is __inline on windows. */
#ifdef _WIN32
@@ -132,6 +143,16 @@ extern INLINE double U64_TO_DBL(uint64_t x) {
#define DBL_TO_U64(x) ((uint64_t) (x))
#endif
+#ifdef ENUM_VALS_ARE_SIGNED
+#define ENUM_BF(t) unsigned
+#else
+/** Wrapper for having a bitfield of an enumerated type. Where possible, we
+ * just use the enumerated type (so the compiler can help us and notice
+ * problems), but if enumerated types are unsigned, we must use unsigned,
+ * so that the loss of precision doesn't make large values negative. */
+#define ENUM_BF(t) t
+#endif
+
/* GCC has several useful attributes. */
#if defined(__GNUC__) && __GNUC__ >= 3
#define ATTR_NORETURN __attribute__((noreturn))
@@ -148,6 +169,7 @@ extern INLINE double U64_TO_DBL(uint64_t x) {
*
* #define ATTR_NONNULL(x) __attribute__((nonnull x)) */
#define ATTR_NONNULL(x)
+#define ATTR_UNUSED __attribute__ ((unused))
/** Macro: Evaluates to <b>exp</b> and hints the compiler that the value
* of <b>exp</b> will probably be true.
@@ -171,6 +193,7 @@ extern INLINE double U64_TO_DBL(uint64_t x) {
#define ATTR_MALLOC
#define ATTR_NORETURN
#define ATTR_NONNULL(x)
+#define ATTR_UNUSED
#define PREDICT_LIKELY(exp) (exp)
#define PREDICT_UNLIKELY(exp) (exp)
#endif
@@ -239,6 +262,19 @@ size_t strlcpy(char *dst, const char *src, size_t siz) ATTR_NONNULL((1,2));
#define I64_FORMAT "%lld"
#endif
+#if (SIZEOF_INTPTR_T == SIZEOF_INT)
+#define INTPTR_T_FORMAT "%d"
+#define INTPTR_PRINTF_ARG(x) ((int)(x))
+#elif (SIZEOF_INTPTR_T == SIZEOF_LONG)
+#define INTPTR_T_FORMAT "%ld"
+#define INTPTR_PRINTF_ARG(x) ((long)(x))
+#elif (SIZEOF_INTPTR_T == 8)
+#define INTPTR_T_FORMAT I64_FORMAT
+#define INTPTR_PRINTF_ARG(x) I64_PRINTF_ARG(x)
+#else
+#error Unknown: SIZEOF_INTPTR_T
+#endif
+
/** Represents an mmaped file. Allocated via tor_mmap_file; freed with
* tor_munmap_file. */
typedef struct tor_mmap_t {
@@ -256,7 +292,7 @@ typedef struct tor_mmap_t {
} tor_mmap_t;
tor_mmap_t *tor_mmap_file(const char *filename) ATTR_NONNULL((1));
-void tor_munmap_file(tor_mmap_t *handle) ATTR_NONNULL((1));
+int tor_munmap_file(tor_mmap_t *handle) ATTR_NONNULL((1));
int tor_snprintf(char *str, size_t size, const char *format, ...)
CHECK_PRINTF(3,4) ATTR_NONNULL((1,3));
@@ -285,7 +321,7 @@ tor_memstr(const void *haystack, size_t hlen, const char *needle)
extern const uint32_t TOR_##name##_TABLE[]; \
static INLINE int TOR_##name(char c) { \
uint8_t u = c; \
- return !!(TOR_##name##_TABLE[(u >> 5) & 7] & (1 << (u & 31))); \
+ return !!(TOR_##name##_TABLE[(u >> 5) & 7] & (1u << (u & 31))); \
}
DECLARE_CTYPE_FN(ISALPHA)
DECLARE_CTYPE_FN(ISALNUM)
@@ -308,10 +344,10 @@ char *tor_strtok_r_impl(char *str, const char *sep, char **lasts);
#endif
#ifdef _WIN32
-#define _SHORT_FILE_ (tor_fix_source_file(__FILE__))
+#define SHORT_FILE__ (tor_fix_source_file(__FILE__))
const char *tor_fix_source_file(const char *fname);
#else
-#define _SHORT_FILE_ (__FILE__)
+#define SHORT_FILE__ (__FILE__)
#define tor_fix_source_file(s) (s)
#endif
@@ -374,6 +410,7 @@ struct tm *tor_gmtime_r(const time_t *timep, struct tm *result);
/* ===== File compatibility */
int tor_open_cloexec(const char *path, int flags, unsigned mode);
FILE *tor_fopen_cloexec(const char *path, const char *mode);
+int tor_rename(const char *path_old, const char *path_new);
int replace_file(const char *from, const char *to);
int touch_file(const char *fname);
@@ -384,6 +421,7 @@ tor_lockfile_t *tor_lockfile_lock(const char *filename, int blocking,
void tor_lockfile_unlock(tor_lockfile_t *lockfile);
off_t tor_fd_getpos(int fd);
+int tor_fd_setpos(int fd, off_t pos);
int tor_fd_seekend(int fd);
#ifdef _WIN32
@@ -403,21 +441,35 @@ typedef int socklen_t;
* any inadvertant checks for the socket being <= 0 or > 0 will probably
* still work. */
#define tor_socket_t intptr_t
+#define TOR_SOCKET_T_FORMAT INTPTR_T_FORMAT
#define SOCKET_OK(s) ((SOCKET)(s) != INVALID_SOCKET)
#define TOR_INVALID_SOCKET INVALID_SOCKET
#else
/** Type used for a network socket. */
#define tor_socket_t int
+#define TOR_SOCKET_T_FORMAT "%d"
/** Macro: true iff 's' is a possible value for a valid initialized socket. */
#define SOCKET_OK(s) ((s) >= 0)
/** Error/uninitialized value for a tor_socket_t. */
#define TOR_INVALID_SOCKET (-1)
#endif
+int tor_close_socket_simple(tor_socket_t s);
int tor_close_socket(tor_socket_t s);
+tor_socket_t tor_open_socket_with_extensions(
+ int domain, int type, int protocol,
+ int cloexec, int nonblock);
tor_socket_t tor_open_socket(int domain, int type, int protocol);
+tor_socket_t tor_open_socket_nonblocking(int domain, int type, int protocol);
tor_socket_t tor_accept_socket(tor_socket_t sockfd, struct sockaddr *addr,
socklen_t *len);
+tor_socket_t tor_accept_socket_nonblocking(tor_socket_t sockfd,
+ struct sockaddr *addr,
+ socklen_t *len);
+tor_socket_t tor_accept_socket_with_extensions(tor_socket_t sockfd,
+ struct sockaddr *addr,
+ socklen_t *len,
+ int cloexec, int nonblock);
int get_n_open_sockets(void);
#define tor_socket_send(s, buf, len, flags) send(s, buf, len, flags)
@@ -489,7 +541,7 @@ int tor_inet_aton(const char *cp, struct in_addr *addr) ATTR_NONNULL((1,2));
const char *tor_inet_ntop(int af, const void *src, char *dst, size_t len);
int tor_inet_pton(int af, const char *src, void *dst);
int tor_lookup_hostname(const char *name, uint32_t *addr) ATTR_NONNULL((1,2));
-void set_socket_nonblocking(tor_socket_t socket);
+int set_socket_nonblocking(tor_socket_t socket);
int tor_socketpair(int family, int type, int protocol, tor_socket_t fd[2]);
int network_init(void);
@@ -523,10 +575,15 @@ int tor_socket_errno(tor_socket_t sock);
const char *tor_socket_strerror(int e);
#else
#define SOCK_ERRNO(e) e
+#if EAGAIN == EWOULDBLOCK
#define ERRNO_IS_EAGAIN(e) ((e) == EAGAIN)
+#else
+#define ERRNO_IS_EAGAIN(e) ((e) == EAGAIN || (e) == EWOULDBLOCK)
+#endif
#define ERRNO_IS_EINPROGRESS(e) ((e) == EINPROGRESS)
#define ERRNO_IS_CONN_EINPROGRESS(e) ((e) == EINPROGRESS)
-#define ERRNO_IS_ACCEPT_EAGAIN(e) ((e) == EAGAIN || (e) == ECONNABORTED)
+#define ERRNO_IS_ACCEPT_EAGAIN(e) \
+ (ERRNO_IS_EAGAIN(e) || (e) == ECONNABORTED)
#define ERRNO_IS_ACCEPT_RESOURCE_LIMIT(e) \
((e) == EMFILE || (e) == ENFILE || (e) == ENOBUFS || (e) == ENOMEM)
#define ERRNO_IS_EADDRINUSE(e) ((e) == EADDRINUSE)
@@ -547,11 +604,6 @@ typedef enum {
SOCKS5_ADDRESS_TYPE_NOT_SUPPORTED = 0x08,
} socks5_reply_status_t;
-/* ===== Insecure rng */
-void tor_init_weak_random(unsigned seed);
-long tor_weak_random(void);
-#define TOR_RAND_MAX (RAND_MAX)
-
/* ===== OS compatibility */
const char *get_uname(void);
@@ -581,11 +633,18 @@ int switch_id(const char *user);
char *get_user_homedir(const char *username);
#endif
+#ifndef _WIN32
+const struct passwd *tor_getpwnam(const char *username);
+const struct passwd *tor_getpwuid(uid_t uid);
+#endif
+
int get_parent_directory(char *fname);
char *make_path_absolute(char *fname);
char **get_environment(void);
+int get_total_system_memory(size_t *mem_out);
+
int spawn_func(void (*func)(void *), void *data);
void spawn_exit(void) ATTR_NORETURN;
@@ -690,5 +749,13 @@ char *format_win32_error(DWORD err);
#endif
+#ifdef COMPAT_PRIVATE
+#if !defined(HAVE_SOCKETPAIR) || defined(_WIN32) || defined(TOR_UNIT_TESTS)
+#define NEED_ERSATZ_SOCKETPAIR
+STATIC int tor_ersatz_socketpair(int family, int type, int protocol,
+ tor_socket_t fd[2]);
+#endif
+#endif
+
#endif
diff --git a/src/common/compat_libevent.c b/src/common/compat_libevent.c
index 6655ca87d..74b54bb85 100644
--- a/src/common/compat_libevent.c
+++ b/src/common/compat_libevent.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2009-2012, The Tor Project, Inc. */
+/* Copyright (c) 2009-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -13,6 +13,8 @@
#include "compat.h"
#include "compat_libevent.h"
+#include "crypto.h"
+
#include "util.h"
#include "torlog.h"
@@ -54,7 +56,9 @@ typedef uint32_t le_version_t;
* it is. */
#define LE_OTHER V(0,0,99)
+#if 0
static le_version_t tor_get_libevent_version(const char **v_out);
+#endif
#if defined(HAVE_EVENT_SET_LOG_CALLBACK) || defined(RUNNING_DOXYGEN)
/** A string which, if it appears in a libevent log, should be ignored. */
@@ -74,19 +78,19 @@ libevent_logging_callback(int severity, const char *msg)
}
switch (severity) {
case _EVENT_LOG_DEBUG:
- log(LOG_DEBUG, LD_NOCB|LD_NET, "Message from libevent: %s", buf);
+ log_debug(LD_NOCB|LD_NET, "Message from libevent: %s", buf);
break;
case _EVENT_LOG_MSG:
- log(LOG_INFO, LD_NOCB|LD_NET, "Message from libevent: %s", buf);
+ log_info(LD_NOCB|LD_NET, "Message from libevent: %s", buf);
break;
case _EVENT_LOG_WARN:
- log(LOG_WARN, LD_NOCB|LD_GENERAL, "Warning from libevent: %s", buf);
+ log_warn(LD_NOCB|LD_GENERAL, "Warning from libevent: %s", buf);
break;
case _EVENT_LOG_ERR:
- log(LOG_ERR, LD_NOCB|LD_GENERAL, "Error from libevent: %s", buf);
+ log_err(LD_NOCB|LD_GENERAL, "Error from libevent: %s", buf);
break;
default:
- log(LOG_WARN, LD_NOCB|LD_GENERAL, "Message [%d] from libevent: %s",
+ log_warn(LD_NOCB|LD_GENERAL, "Message [%d] from libevent: %s",
severity, buf);
break;
}
@@ -185,13 +189,6 @@ tor_libevent_initialize(tor_libevent_cfg *torcfg)
/* some paths below don't use torcfg, so avoid unused variable warnings */
(void)torcfg;
-#ifdef __APPLE__
- if (MACOSX_KQUEUE_IS_BROKEN ||
- tor_get_libevent_version(NULL) < V_OLD(1,1,'b')) {
- setenv("EVENT_NOKQUEUE","1",1);
- }
-#endif
-
#ifdef HAVE_EVENT2_EVENT_H
{
int attempts = 0;
@@ -266,13 +263,13 @@ tor_libevent_initialize(tor_libevent_cfg *torcfg)
#if defined(HAVE_EVENT_GET_VERSION) && defined(HAVE_EVENT_GET_METHOD)
/* Making this a NOTICE for now so we can link bugs to a libevent versions
* or methods better. */
- log(LOG_NOTICE, LD_GENERAL,
+ log_info(LD_GENERAL,
"Initialized libevent version %s using method %s. Good.",
event_get_version(), tor_libevent_get_method());
#else
- log(LOG_NOTICE, LD_GENERAL,
+ log_notice(LD_GENERAL,
"Initialized old libevent (version 1.0b or earlier).");
- log(LOG_WARN, LD_GENERAL,
+ log_warn(LD_GENERAL,
"You have a *VERY* old version of libevent. It is likely to be buggy; "
"please build Tor with a more recent version.");
#endif
@@ -364,6 +361,7 @@ le_versions_compatibility(le_version_t v)
return 5;
}
+#if 0
/** Return the version number of the currently running version of Libevent.
* See le_version_t for info on the format.
*/
@@ -386,6 +384,7 @@ tor_get_libevent_version(const char **v_out)
*v_out = v;
return r;
}
+#endif
/** Return a string representation of the version of the currently running
* version of Libevent. */
@@ -407,77 +406,9 @@ void
tor_check_libevent_version(const char *m, int server,
const char **badness_out)
{
- int buggy = 0, iffy = 0, slow = 0, thread_unsafe = 0;
- le_version_t version;
- const char *v = NULL;
- const char *badness = NULL;
- const char *sad_os = "";
-
- version = tor_get_libevent_version(&v);
-
- /* It would be better to disable known-buggy methods rather than warning
- * about them. But the problem is that with older versions of Libevent,
- * it's not trivial to get them to change their methods once they're
- * initialized... and with newer versions of Libevent, they aren't actually
- * broken. But we should revisit this if we ever find a post-1.4 version
- * of Libevent where we need to disable a given method. */
- if (!strcmp(m, "kqueue")) {
- if (version < V_OLD(1,1,'b'))
- buggy = 1;
- } else if (!strcmp(m, "epoll")) {
- if (version < V(1,1,0))
- iffy = 1;
- } else if (!strcmp(m, "poll")) {
- if (version < V_OLD(1,0,'e'))
- buggy = 1;
- if (version < V(1,1,0))
- slow = 1;
- } else if (!strcmp(m, "select")) {
- if (version < V(1,1,0))
- slow = 1;
- } else if (!strcmp(m, "win32")) {
- if (version < V_OLD(1,1,'b'))
- buggy = 1;
- }
-
- /* Libevent versions before 1.3b do very badly on operating systems with
- * user-space threading implementations. */
-#if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__NetBSD__)
- if (server && version < V_OLD(1,3,'b')) {
- thread_unsafe = 1;
- sad_os = "BSD variants";
- }
-#elif defined(__APPLE__) || defined(__darwin__)
- if (server && version < V_OLD(1,3,'b')) {
- thread_unsafe = 1;
- sad_os = "Mac OS X";
- }
-#endif
-
- if (thread_unsafe) {
- log(LOG_WARN, LD_GENERAL,
- "Libevent version %s often crashes when running a Tor server with %s. "
- "Please use the latest version of libevent (1.3b or later)",v,sad_os);
- badness = "BROKEN";
- } else if (buggy) {
- log(LOG_WARN, LD_GENERAL,
- "There are serious bugs in using %s with libevent %s. "
- "Please use the latest version of libevent.", m, v);
- badness = "BROKEN";
- } else if (iffy) {
- log(LOG_WARN, LD_GENERAL,
- "There are minor bugs in using %s with libevent %s. "
- "You may want to use the latest version of libevent.", m, v);
- badness = "BUGGY";
- } else if (slow && server) {
- log(LOG_WARN, LD_GENERAL,
- "libevent %s can be very slow with %s. "
- "When running a server, please use the latest version of libevent.",
- v,m);
- badness = "SLOW";
- }
-
- *badness_out = badness;
+ (void) m;
+ (void) server;
+ *badness_out = NULL;
}
#if defined(LIBEVENT_VERSION)
@@ -486,6 +417,14 @@ tor_check_libevent_version(const char *m, int server,
#define HEADER_VERSION _EVENT_VERSION
#endif
+/** Return a string representation of the version of Libevent that was used
+* at compilation time. */
+const char *
+tor_libevent_get_header_version_str(void)
+{
+ return HEADER_VERSION;
+}
+
/** See whether the headers we were built against differ from the library we
* linked against so much that we're likely to crash. If so, warn the
* user. */
@@ -511,7 +450,7 @@ tor_check_libevent_header_compatibility(void)
verybad = compat1 != compat2;
- log(verybad ? LOG_WARN : LOG_NOTICE,
+ tor_log(verybad ? LOG_WARN : LOG_NOTICE,
LD_GENERAL, "We were compiled with headers from version %s "
"of Libevent, but we're using a Libevent library that says it's "
"version %s.", HEADER_VERSION, event_get_version());
@@ -689,7 +628,25 @@ tor_add_bufferevent_to_rate_limit_group(struct bufferevent *bev,
}
#endif
-#if defined(LIBEVENT_VERSION_NUMBER) && LIBEVENT_VERSION_NUMBER >= V(2,1,1)
+int
+tor_init_libevent_rng(void)
+{
+ int rv = 0;
+#ifdef HAVE_EVUTIL_SECURE_RNG_INIT
+ char buf[256];
+ if (evutil_secure_rng_init() < 0) {
+ rv = -1;
+ }
+ /* Older libevent -- manually initialize the RNG */
+ crypto_rand(buf, 32);
+ evutil_secure_rng_add_bytes(buf, 32);
+ evutil_secure_rng_get_bytes(buf, sizeof(buf));
+#endif
+ return rv;
+}
+
+#if defined(LIBEVENT_VERSION_NUMBER) && LIBEVENT_VERSION_NUMBER >= V(2,1,1) \
+ && !defined(TOR_UNIT_TESTS)
void
tor_gettimeofday_cached(struct timeval *tv)
{
@@ -722,5 +679,45 @@ tor_gettimeofday_cache_clear(void)
{
cached_time_hires.tv_sec = 0;
}
+
+#ifdef TOR_UNIT_TESTS
+/** For testing: force-update the cached time to a given value. */
+void
+tor_gettimeofday_cache_set(const struct timeval *tv)
+{
+ tor_assert(tv);
+ memcpy(&cached_time_hires, tv, sizeof(*tv));
+}
+#endif
#endif
+/**
+ * As tor_gettimeofday_cached, but can never move backwards in time.
+ *
+ * The returned value may diverge from wall-clock time, since wall-clock time
+ * can trivially be adjusted backwards, and this can't. Don't mix wall-clock
+ * time with these values in the same calculation.
+ *
+ * Depending on implementation, this function may or may not "smooth out" huge
+ * jumps forward in wall-clock time. It may or may not keep its results
+ * advancing forward (as opposed to stalling) if the wall-clock time goes
+ * backwards. The current implementation does neither of of these.
+ *
+ * This function is not thread-safe; do not call it outside the main thread.
+ *
+ * In future versions of Tor, this may return a time does not have its
+ * origin at the Unix epoch.
+ */
+void
+tor_gettimeofday_cached_monotonic(struct timeval *tv)
+{
+ struct timeval last_tv = { 0, 0 };
+
+ tor_gettimeofday_cached(tv);
+ if (timercmp(tv, &last_tv, <)) {
+ memcpy(tv, &last_tv, sizeof(struct timeval));
+ } else {
+ memcpy(&last_tv, tv, sizeof(struct timeval));
+ }
+}
+
diff --git a/src/common/compat_libevent.h b/src/common/compat_libevent.h
index 56285ef80..9ee7b49cf 100644
--- a/src/common/compat_libevent.h
+++ b/src/common/compat_libevent.h
@@ -1,8 +1,8 @@
-/* Copyright (c) 2009-2012, The Tor Project, Inc. */
+/* Copyright (c) 2009-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
-#ifndef _TOR_COMPAT_LIBEVENT_H
-#define _TOR_COMPAT_LIBEVENT_H
+#ifndef TOR_COMPAT_LIBEVENT_H
+#define TOR_COMPAT_LIBEVENT_H
#include "orconfig.h"
@@ -78,6 +78,7 @@ void tor_check_libevent_version(const char *m, int server,
const char **badness_out);
void tor_check_libevent_header_compatibility(void);
const char *tor_libevent_get_version_str(void);
+const char *tor_libevent_get_header_version_str(void);
#ifdef USE_BUFFEREVENTS
const struct timeval *tor_libevent_get_one_tick_timeout(void);
@@ -88,8 +89,14 @@ int tor_add_bufferevent_to_rate_limit_group(struct bufferevent *bev,
struct bufferevent_rate_limit_group *g);
#endif
+int tor_init_libevent_rng(void);
+
void tor_gettimeofday_cached(struct timeval *tv);
void tor_gettimeofday_cache_clear(void);
+#ifdef TOR_UNIT_TESTS
+void tor_gettimeofday_cache_set(const struct timeval *tv);
+#endif
+void tor_gettimeofday_cached_monotonic(struct timeval *tv);
#endif
diff --git a/src/common/container.c b/src/common/container.c
index ede98eca5..b937d544f 100644
--- a/src/common/container.c
+++ b/src/common/container.c
@@ -1,6 +1,6 @@
/* Copyright (c) 2003-2004, Roger Dingledine
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -163,7 +163,7 @@ smartlist_string_remove(smartlist_t *sl, const char *element)
/** Return true iff some element E of sl has E==element.
*/
int
-smartlist_isin(const smartlist_t *sl, const void *element)
+smartlist_contains(const smartlist_t *sl, const void *element)
{
int i;
for (i=0; i < sl->num_used; i++)
@@ -176,7 +176,7 @@ smartlist_isin(const smartlist_t *sl, const void *element)
* !strcmp(E,<b>element</b>)
*/
int
-smartlist_string_isin(const smartlist_t *sl, const char *element)
+smartlist_contains_string(const smartlist_t *sl, const char *element)
{
int i;
if (!sl) return 0;
@@ -203,7 +203,7 @@ smartlist_string_pos(const smartlist_t *sl, const char *element)
* !strcasecmp(E,<b>element</b>)
*/
int
-smartlist_string_isin_case(const smartlist_t *sl, const char *element)
+smartlist_contains_string_case(const smartlist_t *sl, const char *element)
{
int i;
if (!sl) return 0;
@@ -217,11 +217,11 @@ smartlist_string_isin_case(const smartlist_t *sl, const char *element)
* to the decimal encoding of <b>num</b>.
*/
int
-smartlist_string_num_isin(const smartlist_t *sl, int num)
+smartlist_contains_int_as_string(const smartlist_t *sl, int num)
{
char buf[32]; /* long enough for 64-bit int, and then some. */
tor_snprintf(buf,sizeof(buf),"%d", num);
- return smartlist_string_isin(sl, buf);
+ return smartlist_contains_string(sl, buf);
}
/** Return true iff the two lists contain the same strings in the same
@@ -243,11 +243,30 @@ smartlist_strings_eq(const smartlist_t *sl1, const smartlist_t *sl2)
return 1;
}
+/** Return true iff the two lists contain the same int pointer values in
+ * the same order, or if they are both NULL. */
+int
+smartlist_ints_eq(const smartlist_t *sl1, const smartlist_t *sl2)
+{
+ if (sl1 == NULL)
+ return sl2 == NULL;
+ if (sl2 == NULL)
+ return 0;
+ if (smartlist_len(sl1) != smartlist_len(sl2))
+ return 0;
+ SMARTLIST_FOREACH(sl1, int *, cp1, {
+ int *cp2 = smartlist_get(sl2, cp1_sl_idx);
+ if (*cp1 != *cp2)
+ return 0;
+ });
+ return 1;
+}
+
/** Return true iff <b>sl</b> has some element E such that
* tor_memeq(E,<b>element</b>,DIGEST_LEN)
*/
int
-smartlist_digest_isin(const smartlist_t *sl, const char *element)
+smartlist_contains_digest(const smartlist_t *sl, const char *element)
{
int i;
if (!sl) return 0;
@@ -257,19 +276,19 @@ smartlist_digest_isin(const smartlist_t *sl, const char *element)
return 0;
}
-/** Return true iff some element E of sl2 has smartlist_isin(sl1,E).
+/** Return true iff some element E of sl2 has smartlist_contains(sl1,E).
*/
int
smartlist_overlap(const smartlist_t *sl1, const smartlist_t *sl2)
{
int i;
for (i=0; i < sl2->num_used; i++)
- if (smartlist_isin(sl1, sl2->list[i]))
+ if (smartlist_contains(sl1, sl2->list[i]))
return 1;
return 0;
}
-/** Remove every element E of sl1 such that !smartlist_isin(sl2,E).
+/** Remove every element E of sl1 such that !smartlist_contains(sl2,E).
* Does not preserve the order of sl1.
*/
void
@@ -277,13 +296,13 @@ smartlist_intersect(smartlist_t *sl1, const smartlist_t *sl2)
{
int i;
for (i=0; i < sl1->num_used; i++)
- if (!smartlist_isin(sl2, sl1->list[i])) {
+ if (!smartlist_contains(sl2, sl1->list[i])) {
sl1->list[i] = sl1->list[--sl1->num_used]; /* swap with the end */
i--; /* so we process the new i'th element */
}
}
-/** Remove every element E of sl1 such that smartlist_isin(sl2,E).
+/** Remove every element E of sl1 such that smartlist_contains(sl2,E).
* Does not preserve the order of sl1.
*/
void
@@ -571,59 +590,116 @@ smartlist_bsearch_idx(const smartlist_t *sl, const void *key,
int (*compare)(const void *key, const void **member),
int *found_out)
{
- const int len = smartlist_len(sl);
- int hi, lo, cmp, mid;
+ int hi, lo, cmp, mid, len, diff;
+
+ tor_assert(sl);
+ tor_assert(compare);
+ tor_assert(found_out);
+ len = smartlist_len(sl);
+
+ /* Check for the trivial case of a zero-length list */
if (len == 0) {
*found_out = 0;
+ /* We already know smartlist_len(sl) is 0 in this case */
return 0;
- } else if (len == 1) {
- cmp = compare(key, (const void **) &sl->list[0]);
- if (cmp == 0) {
- *found_out = 1;
- return 0;
- } else if (cmp < 0) {
- *found_out = 0;
- return 0;
- } else {
- *found_out = 0;
- return 1;
- }
}
- hi = smartlist_len(sl) - 1;
+ /* Okay, we have a real search to do */
+ tor_assert(len > 0);
lo = 0;
+ hi = len - 1;
+
+ /*
+ * These invariants are always true:
+ *
+ * For all i such that 0 <= i < lo, sl[i] < key
+ * For all i such that hi < i <= len, sl[i] > key
+ */
while (lo <= hi) {
- mid = (lo + hi) / 2;
+ diff = hi - lo;
+ /*
+ * We want mid = (lo + hi) / 2, but that could lead to overflow, so
+ * instead diff = hi - lo (non-negative because of loop condition), and
+ * then hi = lo + diff, mid = (lo + lo + diff) / 2 = lo + (diff / 2).
+ */
+ mid = lo + (diff / 2);
cmp = compare(key, (const void**) &(sl->list[mid]));
- if (cmp>0) { /* key > sl[mid] */
- lo = mid+1;
- } else if (cmp<0) { /* key < sl[mid] */
- hi = mid-1;
- } else { /* key == sl[mid] */
+ if (cmp == 0) {
+ /* sl[mid] == key; we found it */
*found_out = 1;
return mid;
- }
- }
- /* lo > hi. */
- {
- tor_assert(lo >= 0);
- if (lo < smartlist_len(sl)) {
- cmp = compare(key, (const void**) &(sl->list[lo]));
+ } else if (cmp > 0) {
+ /*
+ * key > sl[mid] and an index i such that sl[i] == key must
+ * have i > mid if it exists.
+ */
+
+ /*
+ * Since lo <= mid <= hi, hi can only decrease on each iteration (by
+ * being set to mid - 1) and hi is initially len - 1, mid < len should
+ * always hold, and this is not symmetric with the left end of list
+ * mid > 0 test below. A key greater than the right end of the list
+ * should eventually lead to lo == hi == mid == len - 1, and then
+ * we set lo to len below and fall out to the same exit we hit for
+ * a key in the middle of the list but not matching. Thus, we just
+ * assert for consistency here rather than handle a mid == len case.
+ */
+ tor_assert(mid < len);
+ /* Move lo to the element immediately after sl[mid] */
+ lo = mid + 1;
+ } else {
+ /* This should always be true in this case */
tor_assert(cmp < 0);
- } else if (smartlist_len(sl)) {
- cmp = compare(key, (const void**) &(sl->list[smartlist_len(sl)-1]));
- tor_assert(cmp > 0);
+
+ /*
+ * key < sl[mid] and an index i such that sl[i] == key must
+ * have i < mid if it exists.
+ */
+
+ if (mid > 0) {
+ /* Normal case, move hi to the element immediately before sl[mid] */
+ hi = mid - 1;
+ } else {
+ /* These should always be true in this case */
+ tor_assert(mid == lo);
+ tor_assert(mid == 0);
+ /*
+ * We were at the beginning of the list and concluded that every
+ * element e compares e > key.
+ */
+ *found_out = 0;
+ return 0;
+ }
}
}
+
+ /*
+ * lo > hi; we have no element matching key but we have elements falling
+ * on both sides of it. The lo index points to the first element > key.
+ */
+ tor_assert(lo == hi + 1); /* All other cases should have been handled */
+ tor_assert(lo >= 0);
+ tor_assert(lo <= len);
+ tor_assert(hi >= 0);
+ tor_assert(hi <= len);
+
+ if (lo < len) {
+ cmp = compare(key, (const void **) &(sl->list[lo]));
+ tor_assert(cmp < 0);
+ } else {
+ cmp = compare(key, (const void **) &(sl->list[len-1]));
+ tor_assert(cmp > 0);
+ }
+
*found_out = 0;
return lo;
}
/** Helper: compare two const char **s. */
static int
-_compare_string_ptrs(const void **_a, const void **_b)
+compare_string_ptrs_(const void **_a, const void **_b)
{
return strcmp((const char*)*_a, (const char*)*_b);
}
@@ -633,14 +709,14 @@ _compare_string_ptrs(const void **_a, const void **_b)
void
smartlist_sort_strings(smartlist_t *sl)
{
- smartlist_sort(sl, _compare_string_ptrs);
+ smartlist_sort(sl, compare_string_ptrs_);
}
/** Return the most frequent string in the sorted list <b>sl</b> */
char *
smartlist_get_most_frequent_string(smartlist_t *sl)
{
- return smartlist_get_most_frequent(sl, _compare_string_ptrs);
+ return smartlist_get_most_frequent(sl, compare_string_ptrs_);
}
/** Remove duplicate strings from a sorted list, and free them with tor_free().
@@ -648,7 +724,27 @@ smartlist_get_most_frequent_string(smartlist_t *sl)
void
smartlist_uniq_strings(smartlist_t *sl)
{
- smartlist_uniq(sl, _compare_string_ptrs, _tor_free);
+ smartlist_uniq(sl, compare_string_ptrs_, tor_free_);
+}
+
+/** Helper: compare two pointers. */
+static int
+compare_ptrs_(const void **_a, const void **_b)
+{
+ const void *a = *_a, *b = *_b;
+ if (a<b)
+ return -1;
+ else if (a==b)
+ return 0;
+ else
+ return 1;
+}
+
+/** Sort <b>sl</b> in ascending order of the pointers it contains. */
+void
+smartlist_sort_pointers(smartlist_t *sl)
+{
+ smartlist_sort(sl, compare_ptrs_);
}
/* Heap-based priority queue implementation for O(lg N) insert and remove.
@@ -849,7 +945,7 @@ smartlist_pqueue_assert_ok(smartlist_t *sl,
/** Helper: compare two DIGEST_LEN digests. */
static int
-_compare_digests(const void **_a, const void **_b)
+compare_digests_(const void **_a, const void **_b)
{
return tor_memcmp((const char*)*_a, (const char*)*_b, DIGEST_LEN);
}
@@ -858,7 +954,7 @@ _compare_digests(const void **_a, const void **_b)
void
smartlist_sort_digests(smartlist_t *sl)
{
- smartlist_sort(sl, _compare_digests);
+ smartlist_sort(sl, compare_digests_);
}
/** Remove duplicate digests from a sorted list, and free them with tor_free().
@@ -866,12 +962,12 @@ smartlist_sort_digests(smartlist_t *sl)
void
smartlist_uniq_digests(smartlist_t *sl)
{
- smartlist_uniq(sl, _compare_digests, _tor_free);
+ smartlist_uniq(sl, compare_digests_, tor_free_);
}
/** Helper: compare two DIGEST256_LEN digests. */
static int
-_compare_digests256(const void **_a, const void **_b)
+compare_digests256_(const void **_a, const void **_b)
{
return tor_memcmp((const char*)*_a, (const char*)*_b, DIGEST256_LEN);
}
@@ -880,7 +976,7 @@ _compare_digests256(const void **_a, const void **_b)
void
smartlist_sort_digests256(smartlist_t *sl)
{
- smartlist_sort(sl, _compare_digests256);
+ smartlist_sort(sl, compare_digests256_);
}
/** Return the most frequent member of the sorted list of DIGEST256_LEN
@@ -888,7 +984,7 @@ smartlist_sort_digests256(smartlist_t *sl)
char *
smartlist_get_most_frequent_digest256(smartlist_t *sl)
{
- return smartlist_get_most_frequent(sl, _compare_digests256);
+ return smartlist_get_most_frequent(sl, compare_digests256_);
}
/** Remove duplicate 256-bit digests from a sorted list, and free them with
@@ -897,7 +993,7 @@ smartlist_get_most_frequent_digest256(smartlist_t *sl)
void
smartlist_uniq_digests256(smartlist_t *sl)
{
- smartlist_uniq(sl, _compare_digests256, _tor_free);
+ smartlist_uniq(sl, compare_digests256_, tor_free_);
}
/** Helper: Declare an entry type and a map type to implement a mapping using
@@ -928,7 +1024,7 @@ strmap_entries_eq(const strmap_entry_t *a, const strmap_entry_t *b)
static INLINE unsigned int
strmap_entry_hash(const strmap_entry_t *a)
{
- return ht_string_hash(a->key);
+ return (unsigned) siphash24g(a->key, strlen(a->key));
}
/** Helper: compare digestmap_entry_t objects by key value. */
@@ -942,13 +1038,7 @@ digestmap_entries_eq(const digestmap_entry_t *a, const digestmap_entry_t *b)
static INLINE unsigned int
digestmap_entry_hash(const digestmap_entry_t *a)
{
-#if SIZEOF_INT != 8
- const uint32_t *p = (const uint32_t*)a->key;
- return p[0] ^ p[1] ^ p[2] ^ p[3] ^ p[4];
-#else
- const uint64_t *p = (const uint64_t*)a->key;
- return p[0] ^ p[1];
-#endif
+ return (unsigned) siphash24g(a->key, DIGEST_LEN);
}
HT_PROTOTYPE(strmap_impl, strmap_entry_t, node, strmap_entry_hash,
diff --git a/src/common/container.h b/src/common/container.h
index dab3b83f3..0d31f2093 100644
--- a/src/common/container.h
+++ b/src/common/container.h
@@ -1,12 +1,13 @@
/* Copyright (c) 2003-2004, Roger Dingledine
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
-#ifndef _TOR_CONTAINER_H
-#define _TOR_CONTAINER_H
+#ifndef TOR_CONTAINER_H
+#define TOR_CONTAINER_H
#include "util.h"
+#include "siphash.h"
/** A resizeable list of pointers, with associated helpful functionality.
*
@@ -35,13 +36,14 @@ void smartlist_remove(smartlist_t *sl, const void *element);
void *smartlist_pop_last(smartlist_t *sl);
void smartlist_reverse(smartlist_t *sl);
void smartlist_string_remove(smartlist_t *sl, const char *element);
-int smartlist_isin(const smartlist_t *sl, const void *element);
-int smartlist_string_isin(const smartlist_t *sl, const char *element);
+int smartlist_contains(const smartlist_t *sl, const void *element);
+int smartlist_contains_string(const smartlist_t *sl, const char *element);
int smartlist_string_pos(const smartlist_t *, const char *elt);
-int smartlist_string_isin_case(const smartlist_t *sl, const char *element);
-int smartlist_string_num_isin(const smartlist_t *sl, int num);
+int smartlist_contains_string_case(const smartlist_t *sl, const char *element);
+int smartlist_contains_int_as_string(const smartlist_t *sl, int num);
int smartlist_strings_eq(const smartlist_t *sl1, const smartlist_t *sl2);
-int smartlist_digest_isin(const smartlist_t *sl, const char *element);
+int smartlist_contains_digest(const smartlist_t *sl, const char *element);
+int smartlist_ints_eq(const smartlist_t *sl1, const smartlist_t *sl2);
int smartlist_overlap(const smartlist_t *sl1, const smartlist_t *sl2);
void smartlist_intersect(smartlist_t *sl1, const smartlist_t *sl2);
void smartlist_subtract(smartlist_t *sl1, const smartlist_t *sl2);
@@ -101,6 +103,7 @@ void smartlist_uniq(smartlist_t *sl,
void smartlist_sort_strings(smartlist_t *sl);
void smartlist_sort_digests(smartlist_t *sl);
void smartlist_sort_digests256(smartlist_t *sl);
+void smartlist_sort_pointers(smartlist_t *sl);
char *smartlist_get_most_frequent_string(smartlist_t *sl);
char *smartlist_get_most_frequent_digest256(smartlist_t *sl);
@@ -471,64 +474,74 @@ void* strmap_remove_lc(strmap_t *map, const char *key);
#define DECLARE_TYPED_DIGESTMAP_FNS(prefix, maptype, valtype) \
typedef struct maptype maptype; \
typedef struct prefix##iter_t prefix##iter_t; \
- static INLINE maptype* prefix##new(void) \
+ ATTR_UNUSED static INLINE maptype* \
+ prefix##new(void) \
{ \
return (maptype*)digestmap_new(); \
} \
- static INLINE digestmap_t* prefix##to_digestmap(maptype *map) \
+ ATTR_UNUSED static INLINE digestmap_t* \
+ prefix##to_digestmap(maptype *map) \
{ \
return (digestmap_t*)map; \
} \
- static INLINE valtype* prefix##get(maptype *map, const char *key) \
+ ATTR_UNUSED static INLINE valtype* \
+ prefix##get(maptype *map, const char *key) \
{ \
return (valtype*)digestmap_get((digestmap_t*)map, key); \
} \
- static INLINE valtype* prefix##set(maptype *map, const char *key, \
- valtype *val) \
+ ATTR_UNUSED static INLINE valtype* \
+ prefix##set(maptype *map, const char *key, valtype *val) \
{ \
return (valtype*)digestmap_set((digestmap_t*)map, key, val); \
} \
- static INLINE valtype* prefix##remove(maptype *map, const char *key) \
+ ATTR_UNUSED static INLINE valtype* \
+ prefix##remove(maptype *map, const char *key) \
{ \
return (valtype*)digestmap_remove((digestmap_t*)map, key); \
} \
- static INLINE void prefix##free(maptype *map, void (*free_val)(void*)) \
+ ATTR_UNUSED static INLINE void \
+ prefix##free(maptype *map, void (*free_val)(void*)) \
{ \
digestmap_free((digestmap_t*)map, free_val); \
} \
- static INLINE int prefix##isempty(maptype *map) \
+ ATTR_UNUSED static INLINE int \
+ prefix##isempty(maptype *map) \
{ \
return digestmap_isempty((digestmap_t*)map); \
} \
- static INLINE int prefix##size(maptype *map) \
+ ATTR_UNUSED static INLINE int \
+ prefix##size(maptype *map) \
{ \
return digestmap_size((digestmap_t*)map); \
} \
- static INLINE prefix##iter_t *prefix##iter_init(maptype *map) \
+ ATTR_UNUSED static INLINE \
+ prefix##iter_t *prefix##iter_init(maptype *map) \
{ \
return (prefix##iter_t*) digestmap_iter_init((digestmap_t*)map); \
} \
- static INLINE prefix##iter_t *prefix##iter_next(maptype *map, \
- prefix##iter_t *iter) \
+ ATTR_UNUSED static INLINE \
+ prefix##iter_t *prefix##iter_next(maptype *map, prefix##iter_t *iter) \
{ \
return (prefix##iter_t*) digestmap_iter_next( \
(digestmap_t*)map, (digestmap_iter_t*)iter); \
} \
- static INLINE prefix##iter_t *prefix##iter_next_rmv(maptype *map, \
- prefix##iter_t *iter) \
+ ATTR_UNUSED static INLINE prefix##iter_t* \
+ prefix##iter_next_rmv(maptype *map, prefix##iter_t *iter) \
{ \
return (prefix##iter_t*) digestmap_iter_next_rmv( \
(digestmap_t*)map, (digestmap_iter_t*)iter); \
} \
- static INLINE void prefix##iter_get(prefix##iter_t *iter, \
- const char **keyp, \
- valtype **valp) \
+ ATTR_UNUSED static INLINE void \
+ prefix##iter_get(prefix##iter_t *iter, \
+ const char **keyp, \
+ valtype **valp) \
{ \
void *v; \
digestmap_iter_get((digestmap_iter_t*) iter, keyp, &v); \
*valp = v; \
} \
- static INLINE int prefix##iter_done(prefix##iter_t *iter) \
+ ATTR_UNUSED static INLINE int \
+ prefix##iter_done(prefix##iter_t *iter) \
{ \
return digestmap_iter_done((digestmap_iter_t*)iter); \
}
@@ -609,11 +622,11 @@ typedef struct {
static INLINE void
digestset_add(digestset_t *set, const char *digest)
{
- const uint32_t *p = (const uint32_t *)digest;
- const uint32_t d1 = p[0] + (p[1]>>16);
- const uint32_t d2 = p[1] + (p[2]>>16);
- const uint32_t d3 = p[2] + (p[3]>>16);
- const uint32_t d4 = p[3] + (p[0]>>16);
+ const uint64_t x = siphash24g(digest, 20);
+ const uint32_t d1 = (uint32_t) x;
+ const uint32_t d2 = (uint32_t)( (x>>16) + x);
+ const uint32_t d3 = (uint32_t)( (x>>32) + x);
+ const uint32_t d4 = (uint32_t)( (x>>48) + x);
bitarray_set(set->ba, BIT(d1));
bitarray_set(set->ba, BIT(d2));
bitarray_set(set->ba, BIT(d3));
@@ -623,13 +636,13 @@ digestset_add(digestset_t *set, const char *digest)
/** If <b>digest</b> is in <b>set</b>, return nonzero. Otherwise,
* <em>probably</em> return zero. */
static INLINE int
-digestset_isin(const digestset_t *set, const char *digest)
+digestset_contains(const digestset_t *set, const char *digest)
{
- const uint32_t *p = (const uint32_t *)digest;
- const uint32_t d1 = p[0] + (p[1]>>16);
- const uint32_t d2 = p[1] + (p[2]>>16);
- const uint32_t d3 = p[2] + (p[3]>>16);
- const uint32_t d4 = p[3] + (p[0]>>16);
+ const uint64_t x = siphash24g(digest, 20);
+ const uint32_t d1 = (uint32_t) x;
+ const uint32_t d2 = (uint32_t)( (x>>16) + x);
+ const uint32_t d3 = (uint32_t)( (x>>32) + x);
+ const uint32_t d4 = (uint32_t)( (x>>48) + x);
return bitarray_is_set(set->ba, BIT(d1)) &&
bitarray_is_set(set->ba, BIT(d2)) &&
bitarray_is_set(set->ba, BIT(d3)) &&
@@ -675,11 +688,6 @@ median_int32(int32_t *array, int n_elements)
{
return find_nth_int32(array, n_elements, (n_elements-1)/2);
}
-static INLINE long
-median_long(long *array, int n_elements)
-{
- return find_nth_long(array, n_elements, (n_elements-1)/2);
-}
#endif
diff --git a/src/common/crypto.c b/src/common/crypto.c
index 30990ecc8..a247a87d4 100644
--- a/src/common/crypto.c
+++ b/src/common/crypto.c
@@ -1,7 +1,7 @@
/* Copyright (c) 2001, Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -56,9 +56,10 @@
#include "../common/util.h"
#include "container.h"
#include "compat.h"
+#include "sandbox.h"
-#if OPENSSL_VERSION_NUMBER < OPENSSL_V_SERIES(0,9,7)
-#error "We require OpenSSL >= 0.9.7"
+#if OPENSSL_VERSION_NUMBER < OPENSSL_V_SERIES(0,9,8)
+#error "We require OpenSSL >= 0.9.8"
#endif
#ifdef ANDROID
@@ -69,31 +70,6 @@
/** Longest recognized */
#define MAX_DNS_LABEL_SIZE 63
-#if OPENSSL_VERSION_NUMBER < OPENSSL_V_SERIES(0,9,8) && \
- !defined(RUNNING_DOXYGEN)
-/** @{ */
-/** On OpenSSL versions before 0.9.8, there is no working SHA256
- * implementation, so we use Tom St Denis's nice speedy one, slightly adapted
- * to our needs. These macros make it usable by us. */
-#define SHA256_CTX sha256_state
-#define SHA256_Init sha256_init
-#define SHA256_Update sha256_process
-#define LTC_ARGCHK(x) tor_assert(x)
-/** @} */
-#include "sha256.c"
-#define SHA256_Final(a,b) sha256_done(b,a)
-
-static unsigned char *
-SHA256(const unsigned char *m, size_t len, unsigned char *d)
-{
- SHA256_CTX ctx;
- SHA256_Init(&ctx);
- SHA256_Update(&ctx, m, len);
- SHA256_Final(d, &ctx);
- return d;
-}
-#endif
-
/** Macro: is k a valid RSA public or private key? */
#define PUBLIC_KEY_OK(k) ((k) && (k)->key && (k)->key->n)
/** Macro: is k a valid RSA private key? */
@@ -101,9 +77,9 @@ SHA256(const unsigned char *m, size_t len, unsigned char *d)
#ifdef TOR_IS_MULTITHREADED
/** A number of preallocated mutexes for use by OpenSSL. */
-static tor_mutex_t **_openssl_mutexes = NULL;
+static tor_mutex_t **openssl_mutexes_ = NULL;
/** How many mutexes have we allocated for use by OpenSSL? */
-static int _n_openssl_mutexes = 0;
+static int n_openssl_mutexes_ = 0;
#endif
/** A public key, or a public/private key-pair. */
@@ -138,8 +114,7 @@ crypto_get_rsa_padding_overhead(int padding)
{
switch (padding)
{
- case RSA_PKCS1_OAEP_PADDING: return 42;
- case RSA_PKCS1_PADDING: return 11;
+ case RSA_PKCS1_OAEP_PADDING: return PKCS1_OAEP_PADDING_OVERHEAD;
default: tor_assert(0); return -1;
}
}
@@ -151,14 +126,16 @@ crypto_get_rsa_padding(int padding)
{
switch (padding)
{
- case PK_PKCS1_PADDING: return RSA_PKCS1_PADDING;
case PK_PKCS1_OAEP_PADDING: return RSA_PKCS1_OAEP_PADDING;
default: tor_assert(0); return -1;
}
}
/** Boolean: has OpenSSL's crypto been initialized? */
-static int _crypto_global_initialized = 0;
+static int crypto_early_initialized_ = 0;
+
+/** Boolean: has OpenSSL's crypto been initialized? */
+static int crypto_global_initialized_ = 0;
/** Log all pending crypto errors at level <b>severity</b>. Use
* <b>doing</b> to describe our current activities.
@@ -176,10 +153,11 @@ crypto_log_errors(int severity, const char *doing)
if (!lib) lib = "(null)";
if (!func) func = "(null)";
if (doing) {
- log(severity, LD_CRYPTO, "crypto error while %s: %s (in %s:%s)",
- doing, msg, lib, func);
+ tor_log(severity, LD_CRYPTO, "crypto error while %s: %s (in %s:%s)",
+ doing, msg, lib, func);
} else {
- log(severity, LD_CRYPTO, "crypto error: %s (in %s:%s)", msg, lib, func);
+ tor_log(severity, LD_CRYPTO, "crypto error: %s (in %s:%s)",
+ msg, lib, func);
}
}
}
@@ -193,10 +171,10 @@ log_engine(const char *fn, ENGINE *e)
const char *name, *id;
name = ENGINE_get_name(e);
id = ENGINE_get_id(e);
- log(LOG_NOTICE, LD_CRYPTO, "Using OpenSSL engine %s [%s] for %s",
- name?name:"?", id?id:"?", fn);
+ log_notice(LD_CRYPTO, "Default OpenSSL engine for %s is %s [%s]",
+ fn, name?name:"?", id?id:"?");
} else {
- log(LOG_INFO, LD_CRYPTO, "Using default implementation for %s", fn);
+ log_info(LD_CRYPTO, "Using default implementation for %s", fn);
}
}
#endif
@@ -221,16 +199,136 @@ try_load_engine(const char *path, const char *engine)
}
#endif
+/* Returns a trimmed and human-readable version of an openssl version string
+* <b>raw_version</b>. They are usually in the form of 'OpenSSL 1.0.0b 10
+* May 2012' and this will parse them into a form similar to '1.0.0b' */
+static char *
+parse_openssl_version_str(const char *raw_version)
+{
+ const char *end_of_version = NULL;
+ /* The output should be something like "OpenSSL 1.0.0b 10 May 2012. Let's
+ trim that down. */
+ if (!strcmpstart(raw_version, "OpenSSL ")) {
+ raw_version += strlen("OpenSSL ");
+ end_of_version = strchr(raw_version, ' ');
+ }
+
+ if (end_of_version)
+ return tor_strndup(raw_version,
+ end_of_version-raw_version);
+ else
+ return tor_strdup(raw_version);
+}
+
+static char *crypto_openssl_version_str = NULL;
+/* Return a human-readable version of the run-time openssl version number. */
+const char *
+crypto_openssl_get_version_str(void)
+{
+ if (crypto_openssl_version_str == NULL) {
+ const char *raw_version = SSLeay_version(SSLEAY_VERSION);
+ crypto_openssl_version_str = parse_openssl_version_str(raw_version);
+ }
+ return crypto_openssl_version_str;
+}
+
+static char *crypto_openssl_header_version_str = NULL;
+/* Return a human-readable version of the compile-time openssl version
+* number. */
+const char *
+crypto_openssl_get_header_version_str(void)
+{
+ if (crypto_openssl_header_version_str == NULL) {
+ crypto_openssl_header_version_str =
+ parse_openssl_version_str(OPENSSL_VERSION_TEXT);
+ }
+ return crypto_openssl_header_version_str;
+}
+
+/** Make sure that openssl is using its default PRNG. Return 1 if we had to
+ * adjust it; 0 otherwise. */
+static int
+crypto_force_rand_ssleay(void)
+{
+ if (RAND_get_rand_method() != RAND_SSLeay()) {
+ log_notice(LD_CRYPTO, "It appears that one of our engines has provided "
+ "a replacement the OpenSSL RNG. Resetting it to the default "
+ "implementation.");
+ RAND_set_rand_method(RAND_SSLeay());
+ return 1;
+ }
+ return 0;
+}
+
+/** Set up the siphash key if we haven't already done so. */
+int
+crypto_init_siphash_key(void)
+{
+ static int have_seeded_siphash = 0;
+ struct sipkey key;
+ if (have_seeded_siphash)
+ return 0;
+
+ if (crypto_rand((char*) &key, sizeof(key)) < 0)
+ return -1;
+ siphash_set_global_key(&key);
+ have_seeded_siphash = 1;
+ return 0;
+}
+
/** Initialize the crypto library. Return 0 on success, -1 on failure.
*/
int
-crypto_global_init(int useAccel, const char *accelName, const char *accelDir)
+crypto_early_init(void)
{
- if (!_crypto_global_initialized) {
+ if (!crypto_early_initialized_) {
+
+ crypto_early_initialized_ = 1;
+
ERR_load_crypto_strings();
OpenSSL_add_all_algorithms();
- _crypto_global_initialized = 1;
+
setup_openssl_threading();
+
+ if (SSLeay() == OPENSSL_VERSION_NUMBER &&
+ !strcmp(SSLeay_version(SSLEAY_VERSION), OPENSSL_VERSION_TEXT)) {
+ log_info(LD_CRYPTO, "OpenSSL version matches version from headers "
+ "(%lx: %s).", SSLeay(), SSLeay_version(SSLEAY_VERSION));
+ } else {
+ log_warn(LD_CRYPTO, "OpenSSL version from headers does not match the "
+ "version we're running with. If you get weird crashes, that "
+ "might be why. (Compiled with %lx: %s; running with %lx: %s).",
+ (unsigned long)OPENSSL_VERSION_NUMBER, OPENSSL_VERSION_TEXT,
+ SSLeay(), SSLeay_version(SSLEAY_VERSION));
+ }
+
+ if (SSLeay() < OPENSSL_V_SERIES(1,0,0)) {
+ log_notice(LD_CRYPTO,
+ "Your OpenSSL version seems to be %s. We recommend 1.0.0 "
+ "or later.",
+ crypto_openssl_get_version_str());
+ }
+
+ crypto_force_rand_ssleay();
+
+ if (crypto_seed_rng(1) < 0)
+ return -1;
+ if (crypto_init_siphash_key() < 0)
+ return -1;
+ }
+ return 0;
+}
+
+/** Initialize the crypto library. Return 0 on success, -1 on failure.
+ */
+int
+crypto_global_init(int useAccel, const char *accelName, const char *accelDir)
+{
+ if (!crypto_global_initialized_) {
+ crypto_early_init();
+
+ crypto_global_initialized_ = 1;
+
if (useAccel > 0) {
#ifdef DISABLE_ENGINES
(void)accelName;
@@ -266,21 +364,41 @@ crypto_global_init(int useAccel, const char *accelName, const char *accelDir)
" setting default ciphers.");
ENGINE_set_default(e, ENGINE_METHOD_ALL);
}
+ /* Log, if available, the intersection of the set of algorithms
+ used by Tor and the set of algorithms available in the engine */
log_engine("RSA", ENGINE_get_default_RSA());
log_engine("DH", ENGINE_get_default_DH());
+ log_engine("ECDH", ENGINE_get_default_ECDH());
+ log_engine("ECDSA", ENGINE_get_default_ECDSA());
log_engine("RAND", ENGINE_get_default_RAND());
+ log_engine("RAND (which we will not use)", ENGINE_get_default_RAND());
log_engine("SHA1", ENGINE_get_digest_engine(NID_sha1));
- log_engine("3DES", ENGINE_get_cipher_engine(NID_des_ede3_ecb));
- log_engine("AES", ENGINE_get_cipher_engine(NID_aes_128_ecb));
+ log_engine("3DES-CBC", ENGINE_get_cipher_engine(NID_des_ede3_cbc));
+ log_engine("AES-128-ECB", ENGINE_get_cipher_engine(NID_aes_128_ecb));
+ log_engine("AES-128-CBC", ENGINE_get_cipher_engine(NID_aes_128_cbc));
+#ifdef NID_aes_128_ctr
+ log_engine("AES-128-CTR", ENGINE_get_cipher_engine(NID_aes_128_ctr));
+#endif
+#ifdef NID_aes_128_gcm
+ log_engine("AES-128-GCM", ENGINE_get_cipher_engine(NID_aes_128_gcm));
+#endif
+ log_engine("AES-256-CBC", ENGINE_get_cipher_engine(NID_aes_256_cbc));
+#ifdef NID_aes_256_gcm
+ log_engine("AES-256-GCM", ENGINE_get_cipher_engine(NID_aes_256_gcm));
+#endif
+
#endif
} else {
log_info(LD_CRYPTO, "NOT using OpenSSL engine support.");
}
+ if (crypto_force_rand_ssleay()) {
+ if (crypto_seed_rng(1) < 0)
+ return -1;
+ }
+
evaluate_evp_for_aes(-1);
evaluate_ctr_for_aes();
-
- return crypto_seed_rng(1);
}
return 0;
}
@@ -294,7 +412,7 @@ crypto_thread_cleanup(void)
/** used by tortls.c: wrap an RSA* in a crypto_pk_t. */
crypto_pk_t *
-_crypto_new_pk_from_rsa(RSA *rsa)
+crypto_new_pk_from_rsa_(RSA *rsa)
{
crypto_pk_t *env;
tor_assert(rsa);
@@ -307,7 +425,7 @@ _crypto_new_pk_from_rsa(RSA *rsa)
/** Helper, used by tor-checkkey.c and tor-gencert.c. Return the RSA from a
* crypto_pk_t. */
RSA *
-_crypto_pk_get_rsa(crypto_pk_t *env)
+crypto_pk_get_rsa_(crypto_pk_t *env)
{
return env->key;
}
@@ -315,7 +433,7 @@ _crypto_pk_get_rsa(crypto_pk_t *env)
/** used by tortls.c: get an equivalent EVP_PKEY* for a crypto_pk_t. Iff
* private is set, include the private-key portion of the key. */
EVP_PKEY *
-_crypto_pk_get_evp_pkey(crypto_pk_t *env, int private)
+crypto_pk_get_evp_pkey_(crypto_pk_t *env, int private)
{
RSA *key = NULL;
EVP_PKEY *pkey = NULL;
@@ -343,7 +461,7 @@ _crypto_pk_get_evp_pkey(crypto_pk_t *env, int private)
/** Used by tortls.c: Get the DH* from a crypto_dh_t.
*/
DH *
-_crypto_dh_get_dh(crypto_dh_t *dh)
+crypto_dh_get_dh_(crypto_dh_t *dh)
{
return dh->dh;
}
@@ -358,7 +476,7 @@ crypto_pk_new(void)
rsa = RSA_new();
tor_assert(rsa);
- return _crypto_new_pk_from_rsa(rsa);
+ return crypto_new_pk_from_rsa_(rsa);
}
/** Release a reference to an asymmetric key; when all the references
@@ -441,11 +559,7 @@ crypto_pk_generate_key_with_bits(crypto_pk_t *env, int bits)
if (env->key)
RSA_free(env->key);
-#if OPENSSL_VERSION_NUMBER < OPENSSL_V_SERIES(0,9,8)
- /* In OpenSSL 0.9.7, RSA_generate_key is all we have. */
- env->key = RSA_generate_key(bits, 65537, NULL, NULL);
-#else
- /* In OpenSSL 0.9.8, RSA_generate_key is deprecated. */
+
{
BIGNUM *e = BN_new();
RSA *r = NULL;
@@ -463,11 +577,11 @@ crypto_pk_generate_key_with_bits(crypto_pk_t *env, int bits)
r = NULL;
done:
if (e)
- BN_free(e);
+ BN_clear_free(e);
if (r)
RSA_free(r);
- }
-#endif
+ }
+
if (!env->key) {
crypto_log_errors(LOG_WARN, "generating RSA key");
return -1;
@@ -711,19 +825,23 @@ crypto_pk_public_exponent_ok(crypto_pk_t *env)
return BN_is_word(env->key->e, 65537);
}
-/** Compare the public-key components of a and b. Return -1 if a\<b, 0
- * if a==b, and 1 if a\>b.
+/** Compare the public-key components of a and b. Return less than 0
+ * if a\<b, 0 if a==b, and greater than 0 if a\>b. A NULL key is
+ * considered to be less than all non-NULL keys, and equal to itself.
+ *
+ * Note that this may leak information about the keys through timing.
*/
int
crypto_pk_cmp_keys(crypto_pk_t *a, crypto_pk_t *b)
{
int result;
+ char a_is_non_null = (a != NULL) && (a->key != NULL);
+ char b_is_non_null = (b != NULL) && (b->key != NULL);
+ char an_argument_is_null = !a_is_non_null | !b_is_non_null;
- if (!a || !b)
- return -1;
-
- if (!a->key || !b->key)
- return -1;
+ result = tor_memcmp(&a_is_non_null, &b_is_non_null, sizeof(a_is_non_null));
+ if (an_argument_is_null)
+ return result;
tor_assert(PUBLIC_KEY_OK(a));
tor_assert(PUBLIC_KEY_OK(b));
@@ -733,6 +851,18 @@ crypto_pk_cmp_keys(crypto_pk_t *a, crypto_pk_t *b)
return BN_cmp((a->key)->e, (b->key)->e);
}
+/** Compare the public-key components of a and b. Return non-zero iff
+ * a==b. A NULL key is considered to be distinct from all non-NULL
+ * keys, and equal to itself.
+ *
+ * Note that this may leak information about the keys through timing.
+ */
+int
+crypto_pk_eq_keys(crypto_pk_t *a, crypto_pk_t *b)
+{
+ return (crypto_pk_cmp_keys(a, b) == 0);
+}
+
/** Return the size of the public key modulus in <b>env</b>, in bytes. */
size_t
crypto_pk_keysize(crypto_pk_t *env)
@@ -791,7 +921,7 @@ crypto_pk_copy_full(crypto_pk_t *env)
return NULL;
}
- return _crypto_new_pk_from_rsa(new_key);
+ return crypto_new_pk_from_rsa_(new_key);
}
/** Encrypt <b>fromlen</b> bytes from <b>from</b> with the public key
@@ -1122,22 +1252,21 @@ int
crypto_pk_asn1_encode(crypto_pk_t *pk, char *dest, size_t dest_len)
{
int len;
- unsigned char *buf, *cp;
- len = i2d_RSAPublicKey(pk->key, NULL);
- if (len < 0 || (size_t)len > dest_len || dest_len > SIZE_T_CEILING)
+ unsigned char *buf = NULL;
+
+ len = i2d_RSAPublicKey(pk->key, &buf);
+ if (len < 0 || buf == NULL)
return -1;
- cp = buf = tor_malloc(len+1);
- len = i2d_RSAPublicKey(pk->key, &cp);
- if (len < 0) {
- crypto_log_errors(LOG_WARN,"encoding public key");
- tor_free(buf);
+
+ if ((size_t)len > dest_len || dest_len > SIZE_T_CEILING) {
+ OPENSSL_free(buf);
return -1;
}
/* We don't encode directly into 'dest', because that would be illegal
* type-punning. (C99 is smarter than me, C99 is smarter than me...)
*/
memcpy(dest,buf,len);
- tor_free(buf);
+ OPENSSL_free(buf);
return len;
}
@@ -1158,7 +1287,7 @@ crypto_pk_asn1_decode(const char *str, size_t len)
crypto_log_errors(LOG_WARN,"decoding public key");
return NULL;
}
- return _crypto_new_pk_from_rsa(rsa);
+ return crypto_new_pk_from_rsa_(rsa);
}
/** Given a private or public key <b>pk</b>, put a SHA1 hash of the
@@ -1168,24 +1297,17 @@ crypto_pk_asn1_decode(const char *str, size_t len)
int
crypto_pk_get_digest(crypto_pk_t *pk, char *digest_out)
{
- unsigned char *buf, *bufp;
+ unsigned char *buf = NULL;
int len;
- len = i2d_RSAPublicKey(pk->key, NULL);
- if (len < 0)
+ len = i2d_RSAPublicKey(pk->key, &buf);
+ if (len < 0 || buf == NULL)
return -1;
- buf = bufp = tor_malloc(len+1);
- len = i2d_RSAPublicKey(pk->key, &bufp);
- if (len < 0) {
- crypto_log_errors(LOG_WARN,"encoding public key");
- tor_free(buf);
- return -1;
- }
if (crypto_digest(digest_out, (char*)buf, len) < 0) {
- tor_free(buf);
+ OPENSSL_free(buf);
return -1;
}
- tor_free(buf);
+ OPENSSL_free(buf);
return 0;
}
@@ -1194,31 +1316,24 @@ crypto_pk_get_digest(crypto_pk_t *pk, char *digest_out)
int
crypto_pk_get_all_digests(crypto_pk_t *pk, digests_t *digests_out)
{
- unsigned char *buf, *bufp;
+ unsigned char *buf = NULL;
int len;
- len = i2d_RSAPublicKey(pk->key, NULL);
- if (len < 0)
+ len = i2d_RSAPublicKey(pk->key, &buf);
+ if (len < 0 || buf == NULL)
return -1;
- buf = bufp = tor_malloc(len+1);
- len = i2d_RSAPublicKey(pk->key, &bufp);
- if (len < 0) {
- crypto_log_errors(LOG_WARN,"encoding public key");
- tor_free(buf);
- return -1;
- }
if (crypto_digest_all(digests_out, (char*)buf, len) < 0) {
- tor_free(buf);
+ OPENSSL_free(buf);
return -1;
}
- tor_free(buf);
+ OPENSSL_free(buf);
return 0;
}
/** Copy <b>in</b> to the <b>outlen</b>-byte buffer <b>out</b>, adding spaces
* every four spaces. */
-/* static */ void
-add_spaces_to_fp(char *out, size_t outlen, const char *in)
+void
+crypto_add_spaces_to_fp(char *out, size_t outlen, const char *in)
{
int n = 0;
char *end = out+outlen;
@@ -1255,28 +1370,33 @@ crypto_pk_get_fingerprint(crypto_pk_t *pk, char *fp_out, int add_space)
}
base16_encode(hexdigest,sizeof(hexdigest),digest,DIGEST_LEN);
if (add_space) {
- add_spaces_to_fp(fp_out, FINGERPRINT_LEN+1, hexdigest);
+ crypto_add_spaces_to_fp(fp_out, FINGERPRINT_LEN+1, hexdigest);
} else {
strncpy(fp_out, hexdigest, HEX_DIGEST_LEN+1);
}
return 0;
}
-/** Return true iff <b>s</b> is in the correct format for a fingerprint.
+/** Given a private or public key <b>pk</b>, put a hashed fingerprint of
+ * the public key into <b>fp_out</b> (must have at least FINGERPRINT_LEN+1
+ * bytes of space). Return 0 on success, -1 on failure.
+ *
+ * Hashed fingerprints are computed as the SHA1 digest of the SHA1 digest
+ * of the ASN.1 encoding of the public key, converted to hexadecimal, in
+ * upper case.
*/
int
-crypto_pk_check_fingerprint_syntax(const char *s)
+crypto_pk_get_hashed_fingerprint(crypto_pk_t *pk, char *fp_out)
{
- int i;
- for (i = 0; i < FINGERPRINT_LEN; ++i) {
- if ((i%5) == 4) {
- if (!TOR_ISSPACE(s[i])) return 0;
- } else {
- if (!TOR_ISXDIGIT(s[i])) return 0;
- }
+ char digest[DIGEST_LEN], hashed_digest[DIGEST_LEN];
+ if (crypto_pk_get_digest(pk, digest)) {
+ return -1;
+ }
+ if (crypto_digest(hashed_digest, digest, DIGEST_LEN)) {
+ return -1;
}
- if (s[FINGERPRINT_LEN]) return 0;
- return 1;
+ base16_encode(fp_out, FINGERPRINT_LEN + 1, hashed_digest, DIGEST_LEN);
+ return 0;
}
/* symmetric crypto */
@@ -1427,7 +1547,7 @@ crypto_digest256(char *digest, const char *m, size_t len,
int
crypto_digest_all(digests_t *ds_out, const char *m, size_t len)
{
- digest_algorithm_t i;
+ int i;
tor_assert(ds_out);
memset(ds_out, 0, sizeof(*ds_out));
if (crypto_digest(ds_out->d[DIGEST_SHA1], m, len) < 0)
@@ -1474,7 +1594,7 @@ struct crypto_digest_t {
SHA256_CTX sha2; /**< state for SHA256 */
} d; /**< State for the digest we're using. Only one member of the
* union is usable, depending on the value of <b>algorithm</b>. */
- digest_algorithm_t algorithm : 8; /**< Which algorithm is in use? */
+ digest_algorithm_bitfield_t algorithm : 8; /**< Which algorithm is in use? */
};
/** Allocate and return a new digest object to compute SHA1 digests.
@@ -1599,19 +1719,27 @@ crypto_digest_assign(crypto_digest_t *into,
memcpy(into,from,sizeof(crypto_digest_t));
}
-/** Compute the HMAC-SHA-1 of the <b>msg_len</b> bytes in <b>msg</b>, using
- * the <b>key</b> of length <b>key_len</b>. Store the DIGEST_LEN-byte result
- * in <b>hmac_out</b>.
- */
+/** Given a list of strings in <b>lst</b>, set the <b>len_out</b>-byte digest
+ * at <b>digest_out</b> to the hash of the concatenation of those strings,
+ * plus the optional string <b>append</b>, computed with the algorithm
+ * <b>alg</b>.
+ * <b>out_len</b> must be \<= DIGEST256_LEN. */
void
-crypto_hmac_sha1(char *hmac_out,
- const char *key, size_t key_len,
- const char *msg, size_t msg_len)
+crypto_digest_smartlist(char *digest_out, size_t len_out,
+ const smartlist_t *lst, const char *append,
+ digest_algorithm_t alg)
{
- tor_assert(key_len < INT_MAX);
- tor_assert(msg_len < INT_MAX);
- HMAC(EVP_sha1(), key, (int)key_len, (unsigned char*)msg, (int)msg_len,
- (unsigned char*)hmac_out, NULL);
+ crypto_digest_t *d;
+ if (alg == DIGEST_SHA1)
+ d = crypto_digest_new();
+ else
+ d = crypto_digest256_new(alg);
+ SMARTLIST_FOREACH(lst, const char *, cp,
+ crypto_digest_add_bytes(d, cp, strlen(cp)));
+ if (append)
+ crypto_digest_add_bytes(d, append, strlen(append));
+ crypto_digest_get_digest(d, digest_out, len_out);
+ crypto_digest_free(d);
}
/** Compute the HMAC-SHA-256 of the <b>msg_len</b> bytes in <b>msg</b>, using
@@ -1623,63 +1751,11 @@ crypto_hmac_sha256(char *hmac_out,
const char *key, size_t key_len,
const char *msg, size_t msg_len)
{
-#if OPENSSL_VERSION_NUMBER >= OPENSSL_V_SERIES(0,9,8)
/* If we've got OpenSSL >=0.9.8 we can use its hmac implementation. */
tor_assert(key_len < INT_MAX);
tor_assert(msg_len < INT_MAX);
HMAC(EVP_sha256(), key, (int)key_len, (unsigned char*)msg, (int)msg_len,
(unsigned char*)hmac_out, NULL);
-#else
- /* OpenSSL doesn't have an EVP implementation for SHA256. We'll need
- to do HMAC on our own.
-
- HMAC isn't so hard: To compute HMAC(key, msg):
- 1. If len(key) > blocksize, key = H(key).
- 2. If len(key) < blocksize, right-pad key up to blocksize with 0 bytes.
- 3. let ipad = key xor 0x363636363636....36
- let opad = key xor 0x5c5c5c5c5c5c....5c
- The result is H(opad | H( ipad | msg ) )
- */
-#define BLOCKSIZE 64
-#define DIGESTSIZE 32
- uint8_t k[BLOCKSIZE];
- uint8_t pad[BLOCKSIZE];
- uint8_t d[DIGESTSIZE];
- int i;
- SHA256_CTX st;
-
- tor_assert(key_len < INT_MAX);
- tor_assert(msg_len < INT_MAX);
-
- if (key_len <= BLOCKSIZE) {
- memset(k, 0, sizeof(k));
- memcpy(k, key, key_len); /* not time invariant in key_len */
- } else {
- SHA256((const uint8_t *)key, key_len, k);
- memset(k+DIGESTSIZE, 0, sizeof(k)-DIGESTSIZE);
- }
- for (i = 0; i < BLOCKSIZE; ++i)
- pad[i] = k[i] ^ 0x36;
- SHA256_Init(&st);
- SHA256_Update(&st, pad, BLOCKSIZE);
- SHA256_Update(&st, (uint8_t*)msg, msg_len);
- SHA256_Final(d, &st);
-
- for (i = 0; i < BLOCKSIZE; ++i)
- pad[i] = k[i] ^ 0x5c;
- SHA256_Init(&st);
- SHA256_Update(&st, pad, BLOCKSIZE);
- SHA256_Update(&st, d, DIGESTSIZE);
- SHA256_Final((uint8_t*)hmac_out, &st);
-
- /* Now clear everything. */
- memwipe(k, 0, sizeof(k));
- memwipe(pad, 0, sizeof(pad));
- memwipe(d, 0, sizeof(d));
- memwipe(&st, 0, sizeof(st));
-#undef BLOCKSIZE
-#undef DIGESTSIZE
-#endif
}
/* DH */
@@ -1734,7 +1810,7 @@ crypto_store_dynamic_dh_modulus(const char *fname)
{
int len, new_len;
DH *dh = NULL;
- unsigned char *dh_string_repr = NULL, *cp = NULL;
+ unsigned char *dh_string_repr = NULL;
char *base64_encoded_dh = NULL;
char *file_string = NULL;
int retval = -1;
@@ -1758,15 +1834,8 @@ crypto_store_dynamic_dh_modulus(const char *fname)
if (!BN_set_word(dh->g, DH_GENERATOR))
goto done;
- len = i2d_DHparams(dh, NULL);
- if (len < 0) {
- log_warn(LD_CRYPTO, "Error occured while DER encoding DH modulus (1).");
- goto done;
- }
-
- cp = dh_string_repr = tor_malloc_zero(len+1);
- len = i2d_DHparams(dh, &cp);
- if ((len < 0) || ((cp - dh_string_repr) != len)) {
+ len = i2d_DHparams(dh, &dh_string_repr);
+ if ((len < 0) || (dh_string_repr == NULL)) {
log_warn(LD_CRYPTO, "Error occured while DER encoding DH modulus (2).");
goto done;
}
@@ -1793,7 +1862,8 @@ crypto_store_dynamic_dh_modulus(const char *fname)
done:
if (dh)
DH_free(dh);
- tor_free(dh_string_repr);
+ if (dh_string_repr)
+ OPENSSL_free(dh_string_repr);
tor_free(base64_encoded_dh);
tor_free(file_string);
@@ -1929,7 +1999,7 @@ crypto_set_tls_dh_prime(const char *dynamic_dh_modulus_fname)
/* If the space is occupied, free the previous TLS DH prime */
if (dh_param_p_tls) {
- BN_free(dh_param_p_tls);
+ BN_clear_free(dh_param_p_tls);
dh_param_p_tls = NULL;
}
@@ -2057,6 +2127,16 @@ crypto_dh_new(int dh_type)
return NULL;
}
+/** Return a copy of <b>dh</b>, sharing its internal state. */
+crypto_dh_t *
+crypto_dh_dup(const crypto_dh_t *dh)
+{
+ crypto_dh_t *dh_new = tor_malloc_zero(sizeof(crypto_dh_t));
+ dh_new->dh = dh->dh;
+ DH_up_ref(dh->dh);
+ return dh_new;
+}
+
/** Return the length of the DH key in <b>dh</b>, in bytes.
*/
int
@@ -2081,8 +2161,8 @@ crypto_dh_generate_public(crypto_dh_t *dh)
log_warn(LD_CRYPTO, "Weird! Our own DH key was invalid. I guess once-in-"
"the-universe chances really do happen. Trying again.");
/* Free and clear the keys, so OpenSSL will actually try again. */
- BN_free(dh->dh->pub_key);
- BN_free(dh->dh->priv_key);
+ BN_clear_free(dh->dh->pub_key);
+ BN_clear_free(dh->dh->priv_key);
dh->dh->pub_key = dh->dh->priv_key = NULL;
goto again;
}
@@ -2144,10 +2224,10 @@ tor_check_dh_key(int severity, BIGNUM *bn)
log_fn(severity, LD_CRYPTO, "DH key must be at most p-2.");
goto err;
}
- BN_free(x);
+ BN_clear_free(x);
return 0;
err:
- BN_free(x);
+ BN_clear_free(x);
s = BN_bn2hex(bn);
log_fn(severity, LD_CRYPTO, "Rejecting insecure DH key [%s]", s);
OPENSSL_free(s);
@@ -2195,8 +2275,8 @@ crypto_dh_compute_secret(int severity, crypto_dh_t *dh,
goto error;
}
secret_len = result;
- if (crypto_expand_key_material(secret_tmp, secret_len,
- secret_out, secret_bytes_out)<0)
+ if (crypto_expand_key_material_TAP((uint8_t*)secret_tmp, secret_len,
+ (uint8_t*)secret_out, secret_bytes_out)<0)
goto error;
secret_len = secret_bytes_out;
@@ -2206,7 +2286,7 @@ crypto_dh_compute_secret(int severity, crypto_dh_t *dh,
done:
crypto_log_errors(LOG_WARN, "completing DH handshake");
if (pubkey_bn)
- BN_free(pubkey_bn);
+ BN_clear_free(pubkey_bn);
if (secret_tmp) {
memwipe(secret_tmp, 0, secret_tmp_len);
tor_free(secret_tmp);
@@ -2222,15 +2302,18 @@ crypto_dh_compute_secret(int severity, crypto_dh_t *dh,
* <b>key_out</b> by taking the first <b>key_out_len</b> bytes of
* H(K | [00]) | H(K | [01]) | ....
*
+ * This is the key expansion algorithm used in the "TAP" circuit extension
+ * mechanism; it shouldn't be used for new protocols.
+ *
* Return 0 on success, -1 on failure.
*/
int
-crypto_expand_key_material(const char *key_in, size_t key_in_len,
- char *key_out, size_t key_out_len)
+crypto_expand_key_material_TAP(const uint8_t *key_in, size_t key_in_len,
+ uint8_t *key_out, size_t key_out_len)
{
int i;
- char *cp, *tmp = tor_malloc(key_in_len+1);
- char digest[DIGEST_LEN];
+ uint8_t *cp, *tmp = tor_malloc(key_in_len+1);
+ uint8_t digest[DIGEST_LEN];
/* If we try to get more than this amount of key data, we'll repeat blocks.*/
tor_assert(key_out_len <= DIGEST_LEN*256);
@@ -2239,7 +2322,7 @@ crypto_expand_key_material(const char *key_in, size_t key_in_len,
for (cp = key_out, i=0; cp < key_out+key_out_len;
++i, cp += DIGEST_LEN) {
tmp[key_in_len] = i;
- if (crypto_digest(digest, tmp, key_in_len+1))
+ if (crypto_digest((char*)digest, (const char *)tmp, key_in_len+1))
goto err;
memcpy(cp, digest, MIN(DIGEST_LEN, key_out_len-(cp-key_out)));
}
@@ -2255,6 +2338,65 @@ crypto_expand_key_material(const char *key_in, size_t key_in_len,
return -1;
}
+/** Expand some secret key material according to RFC5869, using SHA256 as the
+ * underlying hash. The <b>key_in_len</b> bytes at <b>key_in</b> are the
+ * secret key material; the <b>salt_in_len</b> bytes at <b>salt_in</b> and the
+ * <b>info_in_len</b> bytes in <b>info_in_len</b> are the algorithm's "salt"
+ * and "info" parameters respectively. On success, write <b>key_out_len</b>
+ * bytes to <b>key_out</b> and return 0. On failure, return -1.
+ */
+int
+crypto_expand_key_material_rfc5869_sha256(
+ const uint8_t *key_in, size_t key_in_len,
+ const uint8_t *salt_in, size_t salt_in_len,
+ const uint8_t *info_in, size_t info_in_len,
+ uint8_t *key_out, size_t key_out_len)
+{
+ uint8_t prk[DIGEST256_LEN];
+ uint8_t tmp[DIGEST256_LEN + 128 + 1];
+ uint8_t mac[DIGEST256_LEN];
+ int i;
+ uint8_t *outp;
+ size_t tmp_len;
+
+ crypto_hmac_sha256((char*)prk,
+ (const char*)salt_in, salt_in_len,
+ (const char*)key_in, key_in_len);
+
+ /* If we try to get more than this amount of key data, we'll repeat blocks.*/
+ tor_assert(key_out_len <= DIGEST256_LEN * 256);
+ tor_assert(info_in_len <= 128);
+ memset(tmp, 0, sizeof(tmp));
+ outp = key_out;
+ i = 1;
+
+ while (key_out_len) {
+ size_t n;
+ if (i > 1) {
+ memcpy(tmp, mac, DIGEST256_LEN);
+ memcpy(tmp+DIGEST256_LEN, info_in, info_in_len);
+ tmp[DIGEST256_LEN+info_in_len] = i;
+ tmp_len = DIGEST256_LEN + info_in_len + 1;
+ } else {
+ memcpy(tmp, info_in, info_in_len);
+ tmp[info_in_len] = i;
+ tmp_len = info_in_len + 1;
+ }
+ crypto_hmac_sha256((char*)mac,
+ (const char*)prk, DIGEST256_LEN,
+ (const char*)tmp, tmp_len);
+ n = key_out_len < DIGEST256_LEN ? key_out_len : DIGEST256_LEN;
+ memcpy(outp, mac, n);
+ key_out_len -= n;
+ outp += n;
+ ++i;
+ }
+
+ memwipe(tmp, 0, sizeof(tmp));
+ memwipe(mac, 0, sizeof(mac));
+ return 0;
+}
+
/** Free a DH key exchange object.
*/
void
@@ -2282,35 +2424,27 @@ crypto_dh_free(crypto_dh_t *dh)
* that fd without checking whether it fit in the fd_set. Thus, if the
* system has not just been started up, it is unsafe to call */
#define RAND_POLL_IS_SAFE \
- ((OPENSSL_VERSION_NUMBER >= OPENSSL_V(0,9,7,'j') && \
- OPENSSL_VERSION_NUMBER < OPENSSL_V_SERIES(0,9,8)) || \
- OPENSSL_VERSION_NUMBER >= OPENSSL_V(0,9,8,'c'))
+ (OPENSSL_VERSION_NUMBER >= OPENSSL_V(0,9,8,'c'))
/** Set the seed of the weak RNG to a random value. */
-static void
-seed_weak_rng(void)
+void
+crypto_seed_weak_rng(tor_weak_rng_t *rng)
{
unsigned seed;
crypto_rand((void*)&seed, sizeof(seed));
- tor_init_weak_random(seed);
+ tor_init_weak_random(rng, seed);
}
-/** Seed OpenSSL's random number generator with bytes from the operating
- * system. <b>startup</b> should be true iff we have just started Tor and
- * have not yet allocated a bunch of fds. Return 0 on success, -1 on failure.
+/** Try to get <b>out_len</b> bytes of the strongest entropy we can generate,
+ * storing it into <b>out</b>.
*/
int
-crypto_seed_rng(int startup)
+crypto_strongest_rand(uint8_t *out, size_t out_len)
{
- int rand_poll_status = 0;
-
- /* local variables */
#ifdef _WIN32
- unsigned char buf[ADD_ENTROPY];
static int provider_set = 0;
static HCRYPTPROV provider;
#else
- char buf[ADD_ENTROPY];
static const char *filenames[] = {
"/dev/srandom", "/dev/urandom", "/dev/random", NULL
};
@@ -2318,63 +2452,83 @@ crypto_seed_rng(int startup)
size_t n;
#endif
- /* OpenSSL has a RAND_poll function that knows about more kinds of
- * entropy than we do. We'll try calling that, *and* calling our own entropy
- * functions. If one succeeds, we'll accept the RNG as seeded. */
- if (startup || RAND_POLL_IS_SAFE) {
- rand_poll_status = RAND_poll();
- if (rand_poll_status == 0)
- log_warn(LD_CRYPTO, "RAND_poll() failed.");
- }
-
#ifdef _WIN32
if (!provider_set) {
if (!CryptAcquireContext(&provider, NULL, NULL, PROV_RSA_FULL,
CRYPT_VERIFYCONTEXT)) {
if ((unsigned long)GetLastError() != (unsigned long)NTE_BAD_KEYSET) {
log_warn(LD_CRYPTO, "Can't get CryptoAPI provider [1]");
- return rand_poll_status ? 0 : -1;
+ return -1;
}
}
provider_set = 1;
}
- if (!CryptGenRandom(provider, sizeof(buf), buf)) {
+ if (!CryptGenRandom(provider, out_len, out)) {
log_warn(LD_CRYPTO, "Can't get entropy from CryptoAPI.");
- return rand_poll_status ? 0 : -1;
+ return -1;
}
- RAND_seed(buf, sizeof(buf));
- memwipe(buf, 0, sizeof(buf));
- seed_weak_rng();
+
return 0;
#else
for (i = 0; filenames[i]; ++i) {
- fd = open(filenames[i], O_RDONLY, 0);
+ log_debug(LD_FS, "Opening %s for entropy", filenames[i]);
+ fd = open(sandbox_intern_string(filenames[i]), O_RDONLY, 0);
if (fd<0) continue;
- log_info(LD_CRYPTO, "Seeding RNG from \"%s\"", filenames[i]);
- n = read_all(fd, buf, sizeof(buf), 0);
+ log_info(LD_CRYPTO, "Reading entropy from \"%s\"", filenames[i]);
+ n = read_all(fd, (char*)out, out_len, 0);
close(fd);
- if (n != sizeof(buf)) {
+ if (n != out_len) {
log_warn(LD_CRYPTO,
"Error reading from entropy source (read only %lu bytes).",
(unsigned long)n);
return -1;
}
- RAND_seed(buf, (int)sizeof(buf));
- memwipe(buf, 0, sizeof(buf));
- seed_weak_rng();
+
return 0;
}
- log_warn(LD_CRYPTO, "Cannot seed RNG -- no entropy source found.");
- return rand_poll_status ? 0 : -1;
+ log_warn(LD_CRYPTO, "Cannot get strong entropy: no entropy source found.");
+ return -1;
#endif
}
+/** Seed OpenSSL's random number generator with bytes from the operating
+ * system. <b>startup</b> should be true iff we have just started Tor and
+ * have not yet allocated a bunch of fds. Return 0 on success, -1 on failure.
+ */
+int
+crypto_seed_rng(int startup)
+{
+ int rand_poll_ok = 0, load_entropy_ok = 0;
+ uint8_t buf[ADD_ENTROPY];
+
+ /* OpenSSL has a RAND_poll function that knows about more kinds of
+ * entropy than we do. We'll try calling that, *and* calling our own entropy
+ * functions. If one succeeds, we'll accept the RNG as seeded. */
+ if (startup || RAND_POLL_IS_SAFE) {
+ rand_poll_ok = RAND_poll();
+ if (rand_poll_ok == 0)
+ log_warn(LD_CRYPTO, "RAND_poll() failed.");
+ }
+
+ load_entropy_ok = !crypto_strongest_rand(buf, sizeof(buf));
+ if (load_entropy_ok) {
+ RAND_seed(buf, sizeof(buf));
+ }
+
+ memwipe(buf, 0, sizeof(buf));
+
+ if (rand_poll_ok || load_entropy_ok)
+ return 0;
+ else
+ return -1;
+}
+
/** Write <b>n</b> bytes of strong random data to <b>to</b>. Return 0 on
* success, -1 on failure.
*/
-int
-crypto_rand(char *to, size_t n)
+MOCK_IMPL(int,
+crypto_rand, (char *to, size_t n))
{
int r;
tor_assert(n < INT_MAX);
@@ -2517,7 +2671,7 @@ smartlist_shuffle(smartlist_t *sl)
}
}
-/** Base-64 encode <b>srclen</b> bytes of data from <b>src</b>. Write
+/** Base64 encode <b>srclen</b> bytes of data from <b>src</b>. Write
* the result into <b>dest</b>, if it will fit within <b>destlen</b>
* bytes. Return the number of bytes written on success; -1 if
* destlen is too short, or other failure.
@@ -2576,7 +2730,7 @@ static const uint8_t base64_decode_table[256] = {
X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X,
};
-/** Base-64 decode <b>srclen</b> bytes of data from <b>src</b>. Write
+/** Base64 decode <b>srclen</b> bytes of data from <b>src</b>. Write
* the result into <b>dest</b>, if it will fit within <b>destlen</b>
* bytes. Return the number of bytes written on success; -1 if
* destlen is too short, or other failure.
@@ -2683,7 +2837,7 @@ base64_decode(char *dest, size_t destlen, const char *src, size_t srclen)
#undef SP
#undef PAD
-/** Base-64 encode DIGEST_LINE bytes from <b>digest</b>, remove the trailing =
+/** Base64 encode DIGEST_LINE bytes from <b>digest</b>, remove the trailing =
* and newline characters, and store the nul-terminated result in the first
* BASE64_DIGEST_LEN+1 bytes of <b>d64</b>. */
int
@@ -2696,7 +2850,7 @@ digest_to_base64(char *d64, const char *digest)
return 0;
}
-/** Given a base-64 encoded, nul-terminated digest in <b>d64</b> (without
+/** Given a base64 encoded, nul-terminated digest in <b>d64</b> (without
* trailing newline or = characters), decode it and store the result in the
* first DIGEST_LEN bytes at <b>digest</b>. */
int
@@ -2721,7 +2875,7 @@ digest_from_base64(char *digest, const char *d64)
#endif
}
-/** Base-64 encode DIGEST256_LINE bytes from <b>digest</b>, remove the
+/** Base64 encode DIGEST256_LINE bytes from <b>digest</b>, remove the
* trailing = and newline characters, and store the nul-terminated result in
* the first BASE64_DIGEST256_LEN+1 bytes of <b>d64</b>. */
int
@@ -2734,7 +2888,7 @@ digest256_to_base64(char *d64, const char *digest)
return 0;
}
-/** Given a base-64 encoded, nul-terminated digest in <b>d64</b> (without
+/** Given a base64 encoded, nul-terminated digest in <b>d64</b> (without
* trailing newline or = characters), decode it and store the result in the
* first DIGEST256_LEN bytes at <b>digest</b>. */
int
@@ -2759,7 +2913,7 @@ digest256_from_base64(char *digest, const char *d64)
#endif
}
-/** Implements base32 encoding as in rfc3548. Limitation: Requires
+/** Implements base32 encoding as in RFC 4648. Limitation: Requires
* that srclen*8 is a multiple of 5.
*/
void
@@ -2784,7 +2938,7 @@ base32_encode(char *dest, size_t destlen, const char *src, size_t srclen)
dest[i] = '\0';
}
-/** Implements base32 decoding as in rfc3548. Limitation: Requires
+/** Implements base32 decoding as in RFC 4648. Limitation: Requires
* that srclen*5 is a multiple of 8. Returns 0 if successful, -1 otherwise.
*/
int
@@ -2937,21 +3091,27 @@ memwipe(void *mem, uint8_t byte, size_t sz)
}
#ifdef TOR_IS_MULTITHREADED
+
+#ifndef OPENSSL_THREADS
+#error OpenSSL has been built without thread support. Tor requires an \
+ OpenSSL library with thread support enabled.
+#endif
+
/** Helper: OpenSSL uses this callback to manipulate mutexes. */
static void
-_openssl_locking_cb(int mode, int n, const char *file, int line)
+openssl_locking_cb_(int mode, int n, const char *file, int line)
{
(void)file;
(void)line;
- if (!_openssl_mutexes)
- /* This is not a really good fix for the
+ if (!openssl_mutexes_)
+ /* This is not a really good fix for the
* "release-freed-lock-from-separate-thread-on-shutdown" problem, but
* it can't hurt. */
return;
if (mode & CRYPTO_LOCK)
- tor_mutex_acquire(_openssl_mutexes[n]);
+ tor_mutex_acquire(openssl_mutexes_[n]);
else
- tor_mutex_release(_openssl_mutexes[n]);
+ tor_mutex_release(openssl_mutexes_[n]);
}
/** OpenSSL helper type: wraps a Tor mutex so that OpenSSL can use it
@@ -2963,7 +3123,7 @@ struct CRYPTO_dynlock_value {
/** OpenSSL callback function to allocate a lock: see CRYPTO_set_dynlock_*
* documentation in OpenSSL's docs for more info. */
static struct CRYPTO_dynlock_value *
-_openssl_dynlock_create_cb(const char *file, int line)
+openssl_dynlock_create_cb_(const char *file, int line)
{
struct CRYPTO_dynlock_value *v;
(void)file;
@@ -2976,7 +3136,7 @@ _openssl_dynlock_create_cb(const char *file, int line)
/** OpenSSL callback function to acquire or release a lock: see
* CRYPTO_set_dynlock_* documentation in OpenSSL's docs for more info. */
static void
-_openssl_dynlock_lock_cb(int mode, struct CRYPTO_dynlock_value *v,
+openssl_dynlock_lock_cb_(int mode, struct CRYPTO_dynlock_value *v,
const char *file, int line)
{
(void)file;
@@ -2990,7 +3150,7 @@ _openssl_dynlock_lock_cb(int mode, struct CRYPTO_dynlock_value *v,
/** OpenSSL callback function to free a lock: see CRYPTO_set_dynlock_*
* documentation in OpenSSL's docs for more info. */
static void
-_openssl_dynlock_destroy_cb(struct CRYPTO_dynlock_value *v,
+openssl_dynlock_destroy_cb_(struct CRYPTO_dynlock_value *v,
const char *file, int line)
{
(void)file;
@@ -3007,15 +3167,15 @@ setup_openssl_threading(void)
{
int i;
int n = CRYPTO_num_locks();
- _n_openssl_mutexes = n;
- _openssl_mutexes = tor_malloc(n*sizeof(tor_mutex_t *));
+ n_openssl_mutexes_ = n;
+ openssl_mutexes_ = tor_malloc(n*sizeof(tor_mutex_t *));
for (i=0; i < n; ++i)
- _openssl_mutexes[i] = tor_mutex_new();
- CRYPTO_set_locking_callback(_openssl_locking_cb);
+ openssl_mutexes_[i] = tor_mutex_new();
+ CRYPTO_set_locking_callback(openssl_locking_cb_);
CRYPTO_set_id_callback(tor_get_thread_id);
- CRYPTO_set_dynlock_create_callback(_openssl_dynlock_create_cb);
- CRYPTO_set_dynlock_lock_callback(_openssl_dynlock_lock_cb);
- CRYPTO_set_dynlock_destroy_callback(_openssl_dynlock_destroy_cb);
+ CRYPTO_set_dynlock_create_callback(openssl_dynlock_create_cb_);
+ CRYPTO_set_dynlock_lock_callback(openssl_dynlock_lock_cb_);
+ CRYPTO_set_dynlock_destroy_callback(openssl_dynlock_destroy_cb_);
return 0;
}
#else
@@ -3036,11 +3196,11 @@ crypto_global_cleanup(void)
ERR_free_strings();
if (dh_param_p)
- BN_free(dh_param_p);
+ BN_clear_free(dh_param_p);
if (dh_param_p_tls)
- BN_free(dh_param_p_tls);
+ BN_clear_free(dh_param_p_tls);
if (dh_param_g)
- BN_free(dh_param_g);
+ BN_clear_free(dh_param_g);
#ifndef DISABLE_ENGINES
ENGINE_cleanup();
@@ -3049,18 +3209,20 @@ crypto_global_cleanup(void)
CONF_modules_unload(1);
CRYPTO_cleanup_all_ex_data();
#ifdef TOR_IS_MULTITHREADED
- if (_n_openssl_mutexes) {
- int n = _n_openssl_mutexes;
- tor_mutex_t **ms = _openssl_mutexes;
+ if (n_openssl_mutexes_) {
+ int n = n_openssl_mutexes_;
+ tor_mutex_t **ms = openssl_mutexes_;
int i;
- _openssl_mutexes = NULL;
- _n_openssl_mutexes = 0;
+ openssl_mutexes_ = NULL;
+ n_openssl_mutexes_ = 0;
for (i=0;i<n;++i) {
tor_mutex_free(ms[i]);
}
tor_free(ms);
}
#endif
+ tor_free(crypto_openssl_version_str);
+ tor_free(crypto_openssl_header_version_str);
return 0;
}
diff --git a/src/common/crypto.h b/src/common/crypto.h
index 7d5627178..aa4271aa3 100644
--- a/src/common/crypto.h
+++ b/src/common/crypto.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001, Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -10,11 +10,12 @@
* \brief Headers for crypto.c
**/
-#ifndef _TOR_CRYPTO_H
-#define _TOR_CRYPTO_H
+#ifndef TOR_CRYPTO_H
+#define TOR_CRYPTO_H
#include <stdio.h>
#include "torint.h"
+#include "testsupport.h"
/*
Macro to create an arbitrary OpenSSL version number as used by
@@ -51,7 +52,7 @@
/** Length of the output of our message digest. */
#define DIGEST_LEN 20
/** Length of the output of our second (improved) message digests. (For now
- * this is just sha256, but any it can be any other 256-byte digest). */
+ * this is just sha256, but it could be any other 256-bit digest.) */
#define DIGEST256_LEN 32
/** Length of our symmetric cipher's keys. */
#define CIPHER_KEY_LEN 16
@@ -69,13 +70,9 @@
* signs removed. */
#define BASE64_DIGEST256_LEN 43
-/** Constant used to indicate PKCS1 padding for public-key encryption */
-#define PK_PKCS1_PADDING 60001
/** Constant used to indicate OAEP padding for public-key encryption */
#define PK_PKCS1_OAEP_PADDING 60002
-/** Number of bytes added for PKCS1 padding. */
-#define PKCS1_PADDING_OVERHEAD 11
/** Number of bytes added for PKCS1-OAEP padding. */
#define PKCS1_OAEP_PADDING_OVERHEAD 42
@@ -92,6 +89,7 @@ typedef enum {
DIGEST_SHA256 = 1,
} digest_algorithm_t;
#define N_DIGEST_ALGORITHMS (DIGEST_SHA256+1)
+#define digest_algorithm_bitfield_t ENUM_BF(digest_algorithm_t)
/** A set of all the digests we know how to compute, taken on a single
* string. Any digests that are shorter than 256 bits are right-padded
@@ -111,6 +109,9 @@ typedef struct crypto_digest_t crypto_digest_t;
typedef struct crypto_dh_t crypto_dh_t;
/* global state */
+const char * crypto_openssl_get_version_str(void);
+const char * crypto_openssl_get_header_version_str(void);
+int crypto_early_init(void);
int crypto_global_init(int hardwareAccel,
const char *accelName,
const char *accelPath);
@@ -147,6 +148,7 @@ int crypto_pk_write_private_key_to_filename(crypto_pk_t *env,
int crypto_pk_check_key(crypto_pk_t *env);
int crypto_pk_cmp_keys(crypto_pk_t *a, crypto_pk_t *b);
+int crypto_pk_eq_keys(crypto_pk_t *a, crypto_pk_t *b);
size_t crypto_pk_keysize(crypto_pk_t *env);
int crypto_pk_num_bits(crypto_pk_t *env);
crypto_pk_t *crypto_pk_dup_key(crypto_pk_t *orig);
@@ -181,7 +183,7 @@ crypto_pk_t *crypto_pk_asn1_decode(const char *str, size_t len);
int crypto_pk_get_digest(crypto_pk_t *pk, char *digest_out);
int crypto_pk_get_all_digests(crypto_pk_t *pk, digests_t *digests_out);
int crypto_pk_get_fingerprint(crypto_pk_t *pk, char *fp_out,int add_space);
-int crypto_pk_check_fingerprint_syntax(const char *s);
+int crypto_pk_get_hashed_fingerprint(crypto_pk_t *pk, char *fp_out);
/* symmetric crypto */
const char *crypto_cipher_get_key(crypto_cipher_t *env);
@@ -204,6 +206,10 @@ int crypto_digest(char *digest, const char *m, size_t len);
int crypto_digest256(char *digest, const char *m, size_t len,
digest_algorithm_t algorithm);
int crypto_digest_all(digests_t *ds_out, const char *m, size_t len);
+struct smartlist_t;
+void crypto_digest_smartlist(char *digest_out, size_t len_out,
+ const struct smartlist_t *lst, const char *append,
+ digest_algorithm_t alg);
const char *crypto_digest_algorithm_get_name(digest_algorithm_t alg);
int crypto_digest_algorithm_parse_name(const char *name);
crypto_digest_t *crypto_digest_new(void);
@@ -216,9 +222,6 @@ void crypto_digest_get_digest(crypto_digest_t *digest,
crypto_digest_t *crypto_digest_dup(const crypto_digest_t *digest);
void crypto_digest_assign(crypto_digest_t *into,
const crypto_digest_t *from);
-void crypto_hmac_sha1(char *hmac_out,
- const char *key, size_t key_len,
- const char *msg, size_t msg_len);
void crypto_hmac_sha256(char *hmac_out,
const char *key, size_t key_len,
const char *msg, size_t msg_len);
@@ -228,6 +231,7 @@ void crypto_hmac_sha256(char *hmac_out,
#define DH_TYPE_REND 2
#define DH_TYPE_TLS 3
crypto_dh_t *crypto_dh_new(int dh_type);
+crypto_dh_t *crypto_dh_dup(const crypto_dh_t *dh);
int crypto_dh_get_bytes(crypto_dh_t *dh);
int crypto_dh_generate_public(crypto_dh_t *dh);
int crypto_dh_get_public(crypto_dh_t *dh, char *pubkey_out,
@@ -236,15 +240,26 @@ ssize_t crypto_dh_compute_secret(int severity, crypto_dh_t *dh,
const char *pubkey, size_t pubkey_len,
char *secret_out, size_t secret_out_len);
void crypto_dh_free(crypto_dh_t *dh);
-int crypto_expand_key_material(const char *key_in, size_t in_len,
- char *key_out, size_t key_out_len);
+
+int crypto_expand_key_material_TAP(const uint8_t *key_in,
+ size_t key_in_len,
+ uint8_t *key_out, size_t key_out_len);
+int crypto_expand_key_material_rfc5869_sha256(
+ const uint8_t *key_in, size_t key_in_len,
+ const uint8_t *salt_in, size_t salt_in_len,
+ const uint8_t *info_in, size_t info_in_len,
+ uint8_t *key_out, size_t key_out_len);
/* random numbers */
int crypto_seed_rng(int startup);
-int crypto_rand(char *to, size_t n);
+MOCK_DECL(int,crypto_rand,(char *to, size_t n));
+int crypto_strongest_rand(uint8_t *out, size_t out_len);
int crypto_rand_int(unsigned int max);
uint64_t crypto_rand_uint64(uint64_t max);
double crypto_rand_double(void);
+struct tor_weak_rng_t;
+void crypto_seed_weak_rng(struct tor_weak_rng_t *rng);
+int crypto_init_siphash_key(void);
char *crypto_random_hostname(int min_rand_len, int max_rand_len,
const char *prefix, const char *suffix);
@@ -255,7 +270,7 @@ void smartlist_shuffle(struct smartlist_t *sl);
int base64_encode(char *dest, size_t destlen, const char *src, size_t srclen);
int base64_decode(char *dest, size_t destlen, const char *src, size_t srclen);
-/** Characters that can appear (case-insensitively) in a base-32 encoding. */
+/** Characters that can appear (case-insensitively) in a base32 encoding. */
#define BASE32_CHARS "abcdefghijklmnopqrstuvwxyz234567"
void base32_encode(char *dest, size_t destlen, const char *src, size_t srclen);
int base32_decode(char *dest, size_t destlen, const char *src, size_t srclen);
@@ -274,20 +289,18 @@ void secret_to_key(char *key_out, size_t key_out_len, const char *secret,
/** OpenSSL-based utility functions. */
void memwipe(void *mem, uint8_t byte, size_t sz);
-#ifdef CRYPTO_PRIVATE
/* Prototypes for private functions only used by tortls.c, crypto.c, and the
* unit tests. */
struct rsa_st;
struct evp_pkey_st;
struct dh_st;
-struct rsa_st *_crypto_pk_get_rsa(crypto_pk_t *env);
-crypto_pk_t *_crypto_new_pk_from_rsa(struct rsa_st *rsa);
-struct evp_pkey_st *_crypto_pk_get_evp_pkey(crypto_pk_t *env,
+struct rsa_st *crypto_pk_get_rsa_(crypto_pk_t *env);
+crypto_pk_t *crypto_new_pk_from_rsa_(struct rsa_st *rsa);
+struct evp_pkey_st *crypto_pk_get_evp_pkey_(crypto_pk_t *env,
int private);
-struct dh_st *_crypto_dh_get_dh(crypto_dh_t *dh);
-/* Prototypes for private functions only used by crypto.c and test.c*/
-void add_spaces_to_fp(char *out, size_t outlen, const char *in);
-#endif
+struct dh_st *crypto_dh_get_dh_(crypto_dh_t *dh);
+
+void crypto_add_spaces_to_fp(char *out, size_t outlen, const char *in);
#endif
diff --git a/src/common/crypto_curve25519.c b/src/common/crypto_curve25519.c
new file mode 100644
index 000000000..9e83440e1
--- /dev/null
+++ b/src/common/crypto_curve25519.c
@@ -0,0 +1,191 @@
+/* Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/* Wrapper code for a curve25519 implementation. */
+
+#define CRYPTO_CURVE25519_PRIVATE
+#include "orconfig.h"
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#include "crypto.h"
+#include "crypto_curve25519.h"
+#include "util.h"
+#include "torlog.h"
+
+/* ==============================
+ Part 1: wrap a suitable curve25519 implementation as curve25519_impl
+ ============================== */
+
+#ifdef USE_CURVE25519_DONNA
+int curve25519_donna(uint8_t *mypublic,
+ const uint8_t *secret, const uint8_t *basepoint);
+#endif
+#ifdef USE_CURVE25519_NACL
+#ifdef HAVE_CRYPTO_SCALARMULT_CURVE25519_H
+#include <crypto_scalarmult_curve25519.h>
+#elif defined(HAVE_NACL_CRYPTO_SCALARMULT_CURVE25519_H)
+#include <nacl/crypto_scalarmult_curve25519.h>
+#endif
+#endif
+
+STATIC int
+curve25519_impl(uint8_t *output, const uint8_t *secret,
+ const uint8_t *basepoint)
+{
+ uint8_t bp[CURVE25519_PUBKEY_LEN];
+ int r;
+ memcpy(bp, basepoint, CURVE25519_PUBKEY_LEN);
+ /* Clear the high bit, in case our backend foolishly looks at it. */
+ bp[31] &= 0x7f;
+#ifdef USE_CURVE25519_DONNA
+ r = curve25519_donna(output, secret, bp);
+#elif defined(USE_CURVE25519_NACL)
+ r = crypto_scalarmult_curve25519(output, secret, bp);
+#else
+#error "No implementation of curve25519 is available."
+#endif
+ memwipe(bp, 0, sizeof(bp));
+ return r;
+}
+
+/* ==============================
+ Part 2: Wrap curve25519_impl with some convenience types and functions.
+ ============================== */
+
+/**
+ * Return true iff a curve25519_public_key_t seems valid. (It's not necessary
+ * to see if the point is on the curve, since the twist is also secure, but we
+ * do need to make sure that it isn't the point at infinity.) */
+int
+curve25519_public_key_is_ok(const curve25519_public_key_t *key)
+{
+ return !safe_mem_is_zero(key->public_key, CURVE25519_PUBKEY_LEN);
+}
+
+/** Generate a new keypair and return the secret key. If <b>extra_strong</b>
+ * is true, this key is possibly going to get used more than once, so
+ * use a better-than-usual RNG. Return 0 on success, -1 on failure. */
+int
+curve25519_secret_key_generate(curve25519_secret_key_t *key_out,
+ int extra_strong)
+{
+ uint8_t k_tmp[CURVE25519_SECKEY_LEN];
+
+ if (crypto_rand((char*)key_out->secret_key, CURVE25519_SECKEY_LEN) < 0)
+ return -1;
+ if (extra_strong && !crypto_strongest_rand(k_tmp, CURVE25519_SECKEY_LEN)) {
+ /* If they asked for extra-strong entropy and we have some, use it as an
+ * HMAC key to improve not-so-good entropy rather than using it directly,
+ * just in case the extra-strong entropy is less amazing than we hoped. */
+ crypto_hmac_sha256((char *)key_out->secret_key,
+ (const char *)k_tmp, sizeof(k_tmp),
+ (const char *)key_out->secret_key, CURVE25519_SECKEY_LEN);
+ }
+ memwipe(k_tmp, 0, sizeof(k_tmp));
+ key_out->secret_key[0] &= 248;
+ key_out->secret_key[31] &= 127;
+ key_out->secret_key[31] |= 64;
+
+ return 0;
+}
+
+void
+curve25519_public_key_generate(curve25519_public_key_t *key_out,
+ const curve25519_secret_key_t *seckey)
+{
+ static const uint8_t basepoint[32] = {9};
+
+ curve25519_impl(key_out->public_key, seckey->secret_key, basepoint);
+}
+
+int
+curve25519_keypair_generate(curve25519_keypair_t *keypair_out,
+ int extra_strong)
+{
+ if (curve25519_secret_key_generate(&keypair_out->seckey, extra_strong) < 0)
+ return -1;
+ curve25519_public_key_generate(&keypair_out->pubkey, &keypair_out->seckey);
+ return 0;
+}
+
+int
+curve25519_keypair_write_to_file(const curve25519_keypair_t *keypair,
+ const char *fname,
+ const char *tag)
+{
+ char contents[32 + CURVE25519_SECKEY_LEN + CURVE25519_PUBKEY_LEN];
+ int r;
+
+ memset(contents, 0, sizeof(contents));
+ tor_snprintf(contents, sizeof(contents), "== c25519v1: %s ==", tag);
+ tor_assert(strlen(contents) <= 32);
+ memcpy(contents+32, keypair->seckey.secret_key, CURVE25519_SECKEY_LEN);
+ memcpy(contents+32+CURVE25519_SECKEY_LEN,
+ keypair->pubkey.public_key, CURVE25519_PUBKEY_LEN);
+
+ r = write_bytes_to_file(fname, contents, sizeof(contents), 1);
+
+ memwipe(contents, 0, sizeof(contents));
+ return r;
+}
+
+int
+curve25519_keypair_read_from_file(curve25519_keypair_t *keypair_out,
+ char **tag_out,
+ const char *fname)
+{
+ char prefix[33];
+ char *content;
+ struct stat st;
+ int r = -1;
+
+ *tag_out = NULL;
+
+ st.st_size = 0;
+ content = read_file_to_str(fname, RFTS_BIN|RFTS_IGNORE_MISSING, &st);
+ if (! content)
+ goto end;
+ if (st.st_size != 32 + CURVE25519_SECKEY_LEN + CURVE25519_PUBKEY_LEN)
+ goto end;
+
+ memcpy(prefix, content, 32);
+ prefix[32] = '\0';
+ if (strcmpstart(prefix, "== c25519v1: ") ||
+ strcmpend(prefix, " =="))
+ goto end;
+
+ *tag_out = tor_strndup(prefix+strlen("== c25519v1: "),
+ strlen(prefix) - strlen("== c25519v1: =="));
+
+ memcpy(keypair_out->seckey.secret_key, content+32, CURVE25519_SECKEY_LEN);
+ curve25519_public_key_generate(&keypair_out->pubkey, &keypair_out->seckey);
+ if (tor_memneq(keypair_out->pubkey.public_key,
+ content + 32 + CURVE25519_SECKEY_LEN,
+ CURVE25519_PUBKEY_LEN))
+ goto end;
+
+ r = 0;
+
+ end:
+ if (content) {
+ memwipe(content, 0, (size_t) st.st_size);
+ tor_free(content);
+ }
+ if (r != 0) {
+ memset(keypair_out, 0, sizeof(*keypair_out));
+ tor_free(*tag_out);
+ }
+ return r;
+}
+
+/** Perform the curve25519 ECDH handshake with <b>skey</b> and <b>pkey</b>,
+ * writing CURVE25519_OUTPUT_LEN bytes of output into <b>output</b>. */
+void
+curve25519_handshake(uint8_t *output,
+ const curve25519_secret_key_t *skey,
+ const curve25519_public_key_t *pkey)
+{
+ curve25519_impl(output, skey->secret_key, pkey->public_key);
+}
+
diff --git a/src/common/crypto_curve25519.h b/src/common/crypto_curve25519.h
new file mode 100644
index 000000000..57018ac2f
--- /dev/null
+++ b/src/common/crypto_curve25519.h
@@ -0,0 +1,74 @@
+/* Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#ifndef TOR_CRYPTO_CURVE25519_H
+#define TOR_CRYPTO_CURVE25519_H
+
+#include "testsupport.h"
+#include "torint.h"
+
+/** Length of a curve25519 public key when encoded. */
+#define CURVE25519_PUBKEY_LEN 32
+/** Length of a curve25519 secret key when encoded. */
+#define CURVE25519_SECKEY_LEN 32
+/** Length of the result of a curve25519 handshake. */
+#define CURVE25519_OUTPUT_LEN 32
+
+/** Wrapper type for a curve25519 public key */
+typedef struct curve25519_public_key_t {
+ uint8_t public_key[CURVE25519_PUBKEY_LEN];
+} curve25519_public_key_t;
+
+/** Wrapper type for a curve25519 secret key */
+typedef struct curve25519_secret_key_t {
+ uint8_t secret_key[CURVE25519_SECKEY_LEN];
+} curve25519_secret_key_t;
+
+/** A paired public and private key for curve25519. **/
+typedef struct curve25519_keypair_t {
+ curve25519_public_key_t pubkey;
+ curve25519_secret_key_t seckey;
+} curve25519_keypair_t;
+
+#ifdef CURVE25519_ENABLED
+/* These functions require that we actually know how to use curve25519 keys.
+ * The other data structures and functions in this header let us parse them,
+ * store them, and move them around.
+ */
+
+int curve25519_public_key_is_ok(const curve25519_public_key_t *);
+
+int curve25519_secret_key_generate(curve25519_secret_key_t *key_out,
+ int extra_strong);
+void curve25519_public_key_generate(curve25519_public_key_t *key_out,
+ const curve25519_secret_key_t *seckey);
+int curve25519_keypair_generate(curve25519_keypair_t *keypair_out,
+ int extra_strong);
+
+void curve25519_handshake(uint8_t *output,
+ const curve25519_secret_key_t *,
+ const curve25519_public_key_t *);
+
+int curve25519_keypair_write_to_file(const curve25519_keypair_t *keypair,
+ const char *fname,
+ const char *tag);
+
+int curve25519_keypair_read_from_file(curve25519_keypair_t *keypair_out,
+ char **tag_out,
+ const char *fname);
+
+#ifdef CRYPTO_CURVE25519_PRIVATE
+STATIC int curve25519_impl(uint8_t *output, const uint8_t *secret,
+ const uint8_t *basepoint);
+#endif
+#endif
+
+#define CURVE25519_BASE64_PADDED_LEN 44
+
+int curve25519_public_from_base64(curve25519_public_key_t *pkey,
+ const char *input);
+int curve25519_public_to_base64(char *output,
+ const curve25519_public_key_t *pkey);
+
+#endif
+
diff --git a/src/common/crypto_format.c b/src/common/crypto_format.c
new file mode 100644
index 000000000..be669c8d2
--- /dev/null
+++ b/src/common/crypto_format.c
@@ -0,0 +1,45 @@
+/* Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/* Formatting and parsing code for crypto-related data structures. */
+
+#include "orconfig.h"
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#include "crypto.h"
+#include "crypto_curve25519.h"
+#include "util.h"
+#include "torlog.h"
+
+int
+curve25519_public_to_base64(char *output,
+ const curve25519_public_key_t *pkey)
+{
+ char buf[128];
+ base64_encode(buf, sizeof(buf),
+ (const char*)pkey->public_key, CURVE25519_PUBKEY_LEN);
+ buf[CURVE25519_BASE64_PADDED_LEN] = '\0';
+ memcpy(output, buf, CURVE25519_BASE64_PADDED_LEN+1);
+ return 0;
+}
+
+int
+curve25519_public_from_base64(curve25519_public_key_t *pkey,
+ const char *input)
+{
+ size_t len = strlen(input);
+ if (len == CURVE25519_BASE64_PADDED_LEN - 1) {
+ /* not padded */
+ return digest256_from_base64((char*)pkey->public_key, input);
+ } else if (len == CURVE25519_BASE64_PADDED_LEN) {
+ char buf[128];
+ if (base64_decode(buf, sizeof(buf), input, len) != CURVE25519_PUBKEY_LEN)
+ return -1;
+ memcpy(pkey->public_key, buf, CURVE25519_PUBKEY_LEN);
+ return 0;
+ } else {
+ return -1;
+ }
+}
+
diff --git a/src/common/di_ops.c b/src/common/di_ops.c
index 7683c59de..14a144340 100644
--- a/src/common/di_ops.c
+++ b/src/common/di_ops.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011-2012, The Tor Project, Inc. */
+/* Copyright (c) 2011-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -8,6 +8,8 @@
#include "orconfig.h"
#include "di_ops.h"
+#include "torlog.h"
+#include "util.h"
/**
* Timing-safe version of memcmp. As memcmp, compare the <b>sz</b> bytes at
@@ -123,7 +125,7 @@ tor_memeq(const void *a, const void *b, size_t sz)
*
* If any_difference != 0:
* 0 < any_difference < 256, so
- * 0 < any_difference - 1 < 255
+ * 0 <= any_difference - 1 < 255
* (any_difference - 1) >> 8 == 0
* 1 & ((any_difference - 1) >> 8) == 0
*/
@@ -131,3 +133,90 @@ tor_memeq(const void *a, const void *b, size_t sz)
return 1 & ((any_difference - 1) >> 8);
}
+/* Implement di_digest256_map_t as a linked list of entries. */
+struct di_digest256_map_t {
+ struct di_digest256_map_t *next;
+ uint8_t key[32];
+ void *val;
+};
+
+/** Release all storage held in <b>map</b>, calling free_fn on each value
+ * as we go. */
+void
+dimap_free(di_digest256_map_t *map, dimap_free_fn free_fn)
+{
+ while (map) {
+ di_digest256_map_t *victim = map;
+ map = map->next;
+ if (free_fn)
+ free_fn(victim->val);
+ tor_free(victim);
+ }
+}
+
+/** Adjust the map at *<b>map</b>, adding an entry for <b>key</b> ->
+ * <b>val</b>, where <b>key</b> is a DIGEST256_LEN-byte key.
+ *
+ * The caller MUST NOT add a key that already appears in the map.
+ */
+void
+dimap_add_entry(di_digest256_map_t **map,
+ const uint8_t *key, void *val)
+{
+ di_digest256_map_t *new_ent;
+ {
+ void *old_val = dimap_search(*map, key, NULL);
+ tor_assert(! old_val);
+ tor_assert(val);
+ }
+ new_ent = tor_malloc_zero(sizeof(di_digest256_map_t));
+ new_ent->next = *map;
+ memcpy(new_ent->key, key, 32);
+ new_ent->val = val;
+ *map = new_ent;
+}
+
+/** Search the map at <b>map</b> for an entry whose key is <b>key</b> (a
+ * DIGEST256_LEN-byte key) returning the corresponding value if we found one,
+ * and returning <b>dflt_val</b> if the key wasn't found.
+ *
+ * This operation takes an amount of time dependent only on the length of
+ * <b>map</b>, not on the position or presence of <b>key</b> within <b>map</b>.
+ */
+void *
+dimap_search(const di_digest256_map_t *map, const uint8_t *key,
+ void *dflt_val)
+{
+ uintptr_t result = (uintptr_t)dflt_val;
+
+ while (map) {
+ uintptr_t r = (uintptr_t) tor_memeq(map->key, key, 32);
+ r -= 1; /* Now r is (uintptr_t)-1 if memeq returned false, and
+ * 0 if memeq returned true. */
+
+ result &= r;
+ result |= ((uintptr_t)(map->val)) & ~r;
+
+ map = map->next;
+ }
+
+ return (void *)result;
+}
+
+/**
+ * Return true iff the <b>sz</b> bytes at <b>mem</b> are all zero. Runs in
+ * time independent of the contents of <b>mem</b>.
+ */
+int
+safe_mem_is_zero(const void *mem, size_t sz)
+{
+ uint32_t total = 0;
+ const uint8_t *ptr = mem;
+
+ while (sz--) {
+ total |= *ptr++;
+ }
+
+ return 1 & ((total - 1) >> 8);
+}
+
diff --git a/src/common/di_ops.h b/src/common/di_ops.h
index 8f0bb698f..d93534b69 100644
--- a/src/common/di_ops.h
+++ b/src/common/di_ops.h
@@ -1,6 +1,6 @@
/* Copyright (c) 2003-2004, Roger Dingledine
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -27,5 +27,21 @@ int tor_memeq(const void *a, const void *b, size_t sz);
#define fast_memeq(a,b,c) (0==memcmp((a),(b),(c)))
#define fast_memneq(a,b,c) (0!=memcmp((a),(b),(c)))
+int safe_mem_is_zero(const void *mem, size_t sz);
+
+/** A type for a map from DIGEST256_LEN-byte blobs to void*, such that
+ * data lookups take an amount of time proportional only to the size
+ * of the map, and not to the position or presence of the item in the map.
+ *
+ * Not efficient for large maps! */
+typedef struct di_digest256_map_t di_digest256_map_t;
+typedef void (*dimap_free_fn)(void *);
+
+void dimap_free(di_digest256_map_t *map, dimap_free_fn free_fn);
+void dimap_add_entry(di_digest256_map_t **map,
+ const uint8_t *key, void *val);
+void *dimap_search(const di_digest256_map_t *map, const uint8_t *key,
+ void *dflt_val);
+
#endif
diff --git a/src/common/include.am b/src/common/include.am
new file mode 100644
index 000000000..61a90cd35
--- /dev/null
+++ b/src/common/include.am
@@ -0,0 +1,139 @@
+
+noinst_LIBRARIES += \
+ src/common/libor.a \
+ src/common/libor-crypto.a \
+ src/common/libor-event.a
+
+if UNITTESTS_ENABLED
+noinst_LIBRARIES += \
+ src/common/libor-testing.a \
+ src/common/libor-crypto-testing.a \
+ src/common/libor-event-testing.a
+endif
+
+EXTRA_DIST+= \
+ src/common/common_sha1.i \
+ src/common/Makefile.nmake
+
+#CFLAGS = -Wall -Wpointer-arith -O2
+AM_CPPFLAGS += -I$(srcdir)/src/common -Isrc/common
+
+if USE_OPENBSD_MALLOC
+libor_extra_source=src/ext/OpenBSD_malloc_Linux.c
+else
+libor_extra_source=
+endif
+
+if USE_MEMPOOLS
+libor_mempool_source=src/common/mempool.c
+libor_mempool_header=src/common/mempool.h
+else
+libor_mempool_source=
+libor_mempool_header=
+endif
+
+src_common_libcurve25519_donna_a_CFLAGS=
+
+if BUILD_CURVE25519_DONNA
+src_common_libcurve25519_donna_a_SOURCES=\
+ src/ext/curve25519_donna/curve25519-donna.c
+src_common_libcurve25519_donna_a_CFLAGS+=\
+ @F_OMIT_FRAME_POINTER@
+noinst_LIBRARIES+=src/common/libcurve25519_donna.a
+LIBDONNA=src/common/libcurve25519_donna.a
+else
+if BUILD_CURVE25519_DONNA_C64
+src_common_libcurve25519_donna_a_SOURCES=\
+ src/ext/curve25519_donna/curve25519-donna-c64.c
+noinst_LIBRARIES+=src/common/libcurve25519_donna.a
+LIBDONNA=src/common/libcurve25519_donna.a
+else
+LIBDONNA=
+endif
+endif
+
+if CURVE25519_ENABLED
+libcrypto_extra_source=src/common/crypto_curve25519.c
+endif
+
+LIBOR_A_SOURCES = \
+ src/common/address.c \
+ src/common/backtrace.c \
+ src/common/compat.c \
+ src/common/container.c \
+ src/common/di_ops.c \
+ src/common/log.c \
+ src/common/memarea.c \
+ src/common/procmon.c \
+ src/common/util.c \
+ src/common/util_codedigest.c \
+ src/common/sandbox.c \
+ src/ext/csiphash.c \
+ $(libor_extra_source) \
+ $(libor_mempool_source)
+
+LIBOR_CRYPTO_A_SOURCES = \
+ src/common/aes.c \
+ src/common/crypto.c \
+ src/common/crypto_format.c \
+ src/common/torgzip.c \
+ src/common/tortls.c \
+ $(libcrypto_extra_source)
+
+LIBOR_EVENT_A_SOURCES = src/common/compat_libevent.c
+
+src_common_libor_a_SOURCES = $(LIBOR_A_SOURCES)
+src_common_libor_crypto_a_SOURCES = $(LIBOR_CRYPTO_A_SOURCES)
+src_common_libor_event_a_SOURCES = $(LIBOR_EVENT_A_SOURCES)
+
+src_common_libor_testing_a_SOURCES = $(LIBOR_A_SOURCES)
+src_common_libor_crypto_testing_a_SOURCES = $(LIBOR_CRYPTO_A_SOURCES)
+src_common_libor_event_testing_a_SOURCES = $(LIBOR_EVENT_A_SOURCES)
+
+src_common_libor_testing_a_CPPFLAGS = -DTOR_UNIT_TESTS $(AM_CPPFLAGS)
+src_common_libor_crypto_testing_a_CPPFLAGS = -DTOR_UNIT_TESTS $(AM_CPPFLAGS)
+src_common_libor_event_testing_a_CPPFLAGS = -DTOR_UNIT_TESTS $(AM_CPPFLAGS)
+src_common_libor_testing_a_CFLAGS = $(AM_CFLAGS) $(TEST_CFLAGS)
+src_common_libor_crypto_testing_a_CFLAGS = $(AM_CFLAGS) $(TEST_CFLAGS)
+src_common_libor_event_testing_a_CFLAGS = $(AM_CFLAGS) $(TEST_CFLAGS)
+
+
+COMMONHEADERS = \
+ src/common/address.h \
+ src/common/backtrace.h \
+ src/common/aes.h \
+ src/common/ciphers.inc \
+ src/common/compat.h \
+ src/common/compat_libevent.h \
+ src/common/container.h \
+ src/common/crypto.h \
+ src/common/crypto_curve25519.h \
+ src/common/di_ops.h \
+ src/common/memarea.h \
+ src/common/linux_syscalls.inc \
+ src/common/procmon.h \
+ src/common/sandbox.h \
+ src/common/testsupport.h \
+ src/common/torgzip.h \
+ src/common/torint.h \
+ src/common/torlog.h \
+ src/common/tortls.h \
+ src/common/util.h \
+ $(libor_mempool_header)
+
+noinst_HEADERS+= $(COMMONHEADERS)
+
+DISTCLEANFILES+= src/common/common_sha1.i
+
+src/common/common_sha1.i: $(libor_SOURCES) $(libor_crypto_a_SOURCES) $(COMMONHEADERS)
+ $(AM_V_GEN)if test "@SHA1SUM@" != none; then \
+ (cd "$(srcdir)" && "@SHA1SUM@" $(src_common_libor_SOURCES) $(src_common_libor_crypto_a_SOURCES) $(COMMONHEADERS)) | "@SED@" -n 's/^\(.*\)$$/"\1\\n"/p' > $@; \
+ elif test "@OPENSSL@" != none; then \
+ (cd "$(srcdir)" && "@OPENSSL@" sha1 $(src_common_libor_SOURCES) $(src_Common_libor_crypto_a_SOURCES) $(COMMONHEADERS)) | "@SED@" -n 's/SHA1(\(.*\))= \(.*\)/"\2 \1\\n"/p' > $@; \
+ else \
+ rm $@; \
+ touch $@; \
+ fi
+
+src/common/util_codedigest.o: src/common/common_sha1.i
+
diff --git a/src/common/linux_syscalls.inc b/src/common/linux_syscalls.inc
new file mode 100644
index 000000000..cf47c7380
--- /dev/null
+++ b/src/common/linux_syscalls.inc
@@ -0,0 +1,1153 @@
+/* Automatically generated with
+ gen_linux_syscalls.pl /usr/include/asm/unistd*.h
+ Do not edit.
+ */
+static const struct {
+ int syscall_num; const char *syscall_name;
+} SYSCALLS_BY_NUMBER[] = {
+#ifdef __NR__llseek
+ { __NR__llseek, "_llseek" },
+#endif
+#ifdef __NR__newselect
+ { __NR__newselect, "_newselect" },
+#endif
+#ifdef __NR__sysctl
+ { __NR__sysctl, "_sysctl" },
+#endif
+#ifdef __NR_accept
+ { __NR_accept, "accept" },
+#endif
+#ifdef __NR_accept4
+ { __NR_accept4, "accept4" },
+#endif
+#ifdef __NR_access
+ { __NR_access, "access" },
+#endif
+#ifdef __NR_acct
+ { __NR_acct, "acct" },
+#endif
+#ifdef __NR_add_key
+ { __NR_add_key, "add_key" },
+#endif
+#ifdef __NR_adjtimex
+ { __NR_adjtimex, "adjtimex" },
+#endif
+#ifdef __NR_afs_syscall
+ { __NR_afs_syscall, "afs_syscall" },
+#endif
+#ifdef __NR_alarm
+ { __NR_alarm, "alarm" },
+#endif
+#ifdef __NR_arch_prctl
+ { __NR_arch_prctl, "arch_prctl" },
+#endif
+#ifdef __NR_bdflush
+ { __NR_bdflush, "bdflush" },
+#endif
+#ifdef __NR_bind
+ { __NR_bind, "bind" },
+#endif
+#ifdef __NR_break
+ { __NR_break, "break" },
+#endif
+#ifdef __NR_brk
+ { __NR_brk, "brk" },
+#endif
+#ifdef __NR_capget
+ { __NR_capget, "capget" },
+#endif
+#ifdef __NR_capset
+ { __NR_capset, "capset" },
+#endif
+#ifdef __NR_chdir
+ { __NR_chdir, "chdir" },
+#endif
+#ifdef __NR_chmod
+ { __NR_chmod, "chmod" },
+#endif
+#ifdef __NR_chown
+ { __NR_chown, "chown" },
+#endif
+#ifdef __NR_chown32
+ { __NR_chown32, "chown32" },
+#endif
+#ifdef __NR_chroot
+ { __NR_chroot, "chroot" },
+#endif
+#ifdef __NR_clock_adjtime
+ { __NR_clock_adjtime, "clock_adjtime" },
+#endif
+#ifdef __NR_clock_getres
+ { __NR_clock_getres, "clock_getres" },
+#endif
+#ifdef __NR_clock_gettime
+ { __NR_clock_gettime, "clock_gettime" },
+#endif
+#ifdef __NR_clock_nanosleep
+ { __NR_clock_nanosleep, "clock_nanosleep" },
+#endif
+#ifdef __NR_clock_settime
+ { __NR_clock_settime, "clock_settime" },
+#endif
+#ifdef __NR_clone
+ { __NR_clone, "clone" },
+#endif
+#ifdef __NR_close
+ { __NR_close, "close" },
+#endif
+#ifdef __NR_connect
+ { __NR_connect, "connect" },
+#endif
+#ifdef __NR_creat
+ { __NR_creat, "creat" },
+#endif
+#ifdef __NR_create_module
+ { __NR_create_module, "create_module" },
+#endif
+#ifdef __NR_delete_module
+ { __NR_delete_module, "delete_module" },
+#endif
+#ifdef __NR_dup
+ { __NR_dup, "dup" },
+#endif
+#ifdef __NR_dup2
+ { __NR_dup2, "dup2" },
+#endif
+#ifdef __NR_dup3
+ { __NR_dup3, "dup3" },
+#endif
+#ifdef __NR_epoll_create
+ { __NR_epoll_create, "epoll_create" },
+#endif
+#ifdef __NR_epoll_create1
+ { __NR_epoll_create1, "epoll_create1" },
+#endif
+#ifdef __NR_epoll_ctl
+ { __NR_epoll_ctl, "epoll_ctl" },
+#endif
+#ifdef __NR_epoll_ctl_old
+ { __NR_epoll_ctl_old, "epoll_ctl_old" },
+#endif
+#ifdef __NR_epoll_pwait
+ { __NR_epoll_pwait, "epoll_pwait" },
+#endif
+#ifdef __NR_epoll_wait
+ { __NR_epoll_wait, "epoll_wait" },
+#endif
+#ifdef __NR_epoll_wait_old
+ { __NR_epoll_wait_old, "epoll_wait_old" },
+#endif
+#ifdef __NR_eventfd
+ { __NR_eventfd, "eventfd" },
+#endif
+#ifdef __NR_eventfd2
+ { __NR_eventfd2, "eventfd2" },
+#endif
+#ifdef __NR_execve
+ { __NR_execve, "execve" },
+#endif
+#ifdef __NR_exit
+ { __NR_exit, "exit" },
+#endif
+#ifdef __NR_exit_group
+ { __NR_exit_group, "exit_group" },
+#endif
+#ifdef __NR_faccessat
+ { __NR_faccessat, "faccessat" },
+#endif
+#ifdef __NR_fadvise64
+ { __NR_fadvise64, "fadvise64" },
+#endif
+#ifdef __NR_fadvise64_64
+ { __NR_fadvise64_64, "fadvise64_64" },
+#endif
+#ifdef __NR_fallocate
+ { __NR_fallocate, "fallocate" },
+#endif
+#ifdef __NR_fanotify_init
+ { __NR_fanotify_init, "fanotify_init" },
+#endif
+#ifdef __NR_fanotify_mark
+ { __NR_fanotify_mark, "fanotify_mark" },
+#endif
+#ifdef __NR_fchdir
+ { __NR_fchdir, "fchdir" },
+#endif
+#ifdef __NR_fchmod
+ { __NR_fchmod, "fchmod" },
+#endif
+#ifdef __NR_fchmodat
+ { __NR_fchmodat, "fchmodat" },
+#endif
+#ifdef __NR_fchown
+ { __NR_fchown, "fchown" },
+#endif
+#ifdef __NR_fchown32
+ { __NR_fchown32, "fchown32" },
+#endif
+#ifdef __NR_fchownat
+ { __NR_fchownat, "fchownat" },
+#endif
+#ifdef __NR_fcntl
+ { __NR_fcntl, "fcntl" },
+#endif
+#ifdef __NR_fcntl64
+ { __NR_fcntl64, "fcntl64" },
+#endif
+#ifdef __NR_fdatasync
+ { __NR_fdatasync, "fdatasync" },
+#endif
+#ifdef __NR_fgetxattr
+ { __NR_fgetxattr, "fgetxattr" },
+#endif
+#ifdef __NR_finit_module
+ { __NR_finit_module, "finit_module" },
+#endif
+#ifdef __NR_flistxattr
+ { __NR_flistxattr, "flistxattr" },
+#endif
+#ifdef __NR_flock
+ { __NR_flock, "flock" },
+#endif
+#ifdef __NR_fork
+ { __NR_fork, "fork" },
+#endif
+#ifdef __NR_fremovexattr
+ { __NR_fremovexattr, "fremovexattr" },
+#endif
+#ifdef __NR_fsetxattr
+ { __NR_fsetxattr, "fsetxattr" },
+#endif
+#ifdef __NR_fstat
+ { __NR_fstat, "fstat" },
+#endif
+#ifdef __NR_fstat64
+ { __NR_fstat64, "fstat64" },
+#endif
+#ifdef __NR_fstatat64
+ { __NR_fstatat64, "fstatat64" },
+#endif
+#ifdef __NR_fstatfs
+ { __NR_fstatfs, "fstatfs" },
+#endif
+#ifdef __NR_fstatfs64
+ { __NR_fstatfs64, "fstatfs64" },
+#endif
+#ifdef __NR_fsync
+ { __NR_fsync, "fsync" },
+#endif
+#ifdef __NR_ftime
+ { __NR_ftime, "ftime" },
+#endif
+#ifdef __NR_ftruncate
+ { __NR_ftruncate, "ftruncate" },
+#endif
+#ifdef __NR_ftruncate64
+ { __NR_ftruncate64, "ftruncate64" },
+#endif
+#ifdef __NR_futex
+ { __NR_futex, "futex" },
+#endif
+#ifdef __NR_futimesat
+ { __NR_futimesat, "futimesat" },
+#endif
+#ifdef __NR_get_kernel_syms
+ { __NR_get_kernel_syms, "get_kernel_syms" },
+#endif
+#ifdef __NR_get_mempolicy
+ { __NR_get_mempolicy, "get_mempolicy" },
+#endif
+#ifdef __NR_get_robust_list
+ { __NR_get_robust_list, "get_robust_list" },
+#endif
+#ifdef __NR_get_thread_area
+ { __NR_get_thread_area, "get_thread_area" },
+#endif
+#ifdef __NR_getcpu
+ { __NR_getcpu, "getcpu" },
+#endif
+#ifdef __NR_getcwd
+ { __NR_getcwd, "getcwd" },
+#endif
+#ifdef __NR_getdents
+ { __NR_getdents, "getdents" },
+#endif
+#ifdef __NR_getdents64
+ { __NR_getdents64, "getdents64" },
+#endif
+#ifdef __NR_getegid
+ { __NR_getegid, "getegid" },
+#endif
+#ifdef __NR_getegid32
+ { __NR_getegid32, "getegid32" },
+#endif
+#ifdef __NR_geteuid
+ { __NR_geteuid, "geteuid" },
+#endif
+#ifdef __NR_geteuid32
+ { __NR_geteuid32, "geteuid32" },
+#endif
+#ifdef __NR_getgid
+ { __NR_getgid, "getgid" },
+#endif
+#ifdef __NR_getgid32
+ { __NR_getgid32, "getgid32" },
+#endif
+#ifdef __NR_getgroups
+ { __NR_getgroups, "getgroups" },
+#endif
+#ifdef __NR_getgroups32
+ { __NR_getgroups32, "getgroups32" },
+#endif
+#ifdef __NR_getitimer
+ { __NR_getitimer, "getitimer" },
+#endif
+#ifdef __NR_getpeername
+ { __NR_getpeername, "getpeername" },
+#endif
+#ifdef __NR_getpgid
+ { __NR_getpgid, "getpgid" },
+#endif
+#ifdef __NR_getpgrp
+ { __NR_getpgrp, "getpgrp" },
+#endif
+#ifdef __NR_getpid
+ { __NR_getpid, "getpid" },
+#endif
+#ifdef __NR_getpmsg
+ { __NR_getpmsg, "getpmsg" },
+#endif
+#ifdef __NR_getppid
+ { __NR_getppid, "getppid" },
+#endif
+#ifdef __NR_getpriority
+ { __NR_getpriority, "getpriority" },
+#endif
+#ifdef __NR_getresgid
+ { __NR_getresgid, "getresgid" },
+#endif
+#ifdef __NR_getresgid32
+ { __NR_getresgid32, "getresgid32" },
+#endif
+#ifdef __NR_getresuid
+ { __NR_getresuid, "getresuid" },
+#endif
+#ifdef __NR_getresuid32
+ { __NR_getresuid32, "getresuid32" },
+#endif
+#ifdef __NR_getrlimit
+ { __NR_getrlimit, "getrlimit" },
+#endif
+#ifdef __NR_getrusage
+ { __NR_getrusage, "getrusage" },
+#endif
+#ifdef __NR_getsid
+ { __NR_getsid, "getsid" },
+#endif
+#ifdef __NR_getsockname
+ { __NR_getsockname, "getsockname" },
+#endif
+#ifdef __NR_getsockopt
+ { __NR_getsockopt, "getsockopt" },
+#endif
+#ifdef __NR_gettid
+ { __NR_gettid, "gettid" },
+#endif
+#ifdef __NR_gettimeofday
+ { __NR_gettimeofday, "gettimeofday" },
+#endif
+#ifdef __NR_getuid
+ { __NR_getuid, "getuid" },
+#endif
+#ifdef __NR_getuid32
+ { __NR_getuid32, "getuid32" },
+#endif
+#ifdef __NR_getxattr
+ { __NR_getxattr, "getxattr" },
+#endif
+#ifdef __NR_gtty
+ { __NR_gtty, "gtty" },
+#endif
+#ifdef __NR_idle
+ { __NR_idle, "idle" },
+#endif
+#ifdef __NR_init_module
+ { __NR_init_module, "init_module" },
+#endif
+#ifdef __NR_inotify_add_watch
+ { __NR_inotify_add_watch, "inotify_add_watch" },
+#endif
+#ifdef __NR_inotify_init
+ { __NR_inotify_init, "inotify_init" },
+#endif
+#ifdef __NR_inotify_init1
+ { __NR_inotify_init1, "inotify_init1" },
+#endif
+#ifdef __NR_inotify_rm_watch
+ { __NR_inotify_rm_watch, "inotify_rm_watch" },
+#endif
+#ifdef __NR_io_cancel
+ { __NR_io_cancel, "io_cancel" },
+#endif
+#ifdef __NR_io_destroy
+ { __NR_io_destroy, "io_destroy" },
+#endif
+#ifdef __NR_io_getevents
+ { __NR_io_getevents, "io_getevents" },
+#endif
+#ifdef __NR_io_setup
+ { __NR_io_setup, "io_setup" },
+#endif
+#ifdef __NR_io_submit
+ { __NR_io_submit, "io_submit" },
+#endif
+#ifdef __NR_ioctl
+ { __NR_ioctl, "ioctl" },
+#endif
+#ifdef __NR_ioperm
+ { __NR_ioperm, "ioperm" },
+#endif
+#ifdef __NR_iopl
+ { __NR_iopl, "iopl" },
+#endif
+#ifdef __NR_ioprio_get
+ { __NR_ioprio_get, "ioprio_get" },
+#endif
+#ifdef __NR_ioprio_set
+ { __NR_ioprio_set, "ioprio_set" },
+#endif
+#ifdef __NR_ipc
+ { __NR_ipc, "ipc" },
+#endif
+#ifdef __NR_kcmp
+ { __NR_kcmp, "kcmp" },
+#endif
+#ifdef __NR_kexec_load
+ { __NR_kexec_load, "kexec_load" },
+#endif
+#ifdef __NR_keyctl
+ { __NR_keyctl, "keyctl" },
+#endif
+#ifdef __NR_kill
+ { __NR_kill, "kill" },
+#endif
+#ifdef __NR_lchown
+ { __NR_lchown, "lchown" },
+#endif
+#ifdef __NR_lchown32
+ { __NR_lchown32, "lchown32" },
+#endif
+#ifdef __NR_lgetxattr
+ { __NR_lgetxattr, "lgetxattr" },
+#endif
+#ifdef __NR_link
+ { __NR_link, "link" },
+#endif
+#ifdef __NR_linkat
+ { __NR_linkat, "linkat" },
+#endif
+#ifdef __NR_listen
+ { __NR_listen, "listen" },
+#endif
+#ifdef __NR_listxattr
+ { __NR_listxattr, "listxattr" },
+#endif
+#ifdef __NR_llistxattr
+ { __NR_llistxattr, "llistxattr" },
+#endif
+#ifdef __NR_lock
+ { __NR_lock, "lock" },
+#endif
+#ifdef __NR_lookup_dcookie
+ { __NR_lookup_dcookie, "lookup_dcookie" },
+#endif
+#ifdef __NR_lremovexattr
+ { __NR_lremovexattr, "lremovexattr" },
+#endif
+#ifdef __NR_lseek
+ { __NR_lseek, "lseek" },
+#endif
+#ifdef __NR_lsetxattr
+ { __NR_lsetxattr, "lsetxattr" },
+#endif
+#ifdef __NR_lstat
+ { __NR_lstat, "lstat" },
+#endif
+#ifdef __NR_lstat64
+ { __NR_lstat64, "lstat64" },
+#endif
+#ifdef __NR_madvise
+ { __NR_madvise, "madvise" },
+#endif
+#ifdef __NR_mbind
+ { __NR_mbind, "mbind" },
+#endif
+#ifdef __NR_migrate_pages
+ { __NR_migrate_pages, "migrate_pages" },
+#endif
+#ifdef __NR_mincore
+ { __NR_mincore, "mincore" },
+#endif
+#ifdef __NR_mkdir
+ { __NR_mkdir, "mkdir" },
+#endif
+#ifdef __NR_mkdirat
+ { __NR_mkdirat, "mkdirat" },
+#endif
+#ifdef __NR_mknod
+ { __NR_mknod, "mknod" },
+#endif
+#ifdef __NR_mknodat
+ { __NR_mknodat, "mknodat" },
+#endif
+#ifdef __NR_mlock
+ { __NR_mlock, "mlock" },
+#endif
+#ifdef __NR_mlockall
+ { __NR_mlockall, "mlockall" },
+#endif
+#ifdef __NR_mmap
+ { __NR_mmap, "mmap" },
+#endif
+#ifdef __NR_mmap2
+ { __NR_mmap2, "mmap2" },
+#endif
+#ifdef __NR_modify_ldt
+ { __NR_modify_ldt, "modify_ldt" },
+#endif
+#ifdef __NR_mount
+ { __NR_mount, "mount" },
+#endif
+#ifdef __NR_move_pages
+ { __NR_move_pages, "move_pages" },
+#endif
+#ifdef __NR_mprotect
+ { __NR_mprotect, "mprotect" },
+#endif
+#ifdef __NR_mpx
+ { __NR_mpx, "mpx" },
+#endif
+#ifdef __NR_mq_getsetattr
+ { __NR_mq_getsetattr, "mq_getsetattr" },
+#endif
+#ifdef __NR_mq_notify
+ { __NR_mq_notify, "mq_notify" },
+#endif
+#ifdef __NR_mq_open
+ { __NR_mq_open, "mq_open" },
+#endif
+#ifdef __NR_mq_timedreceive
+ { __NR_mq_timedreceive, "mq_timedreceive" },
+#endif
+#ifdef __NR_mq_timedsend
+ { __NR_mq_timedsend, "mq_timedsend" },
+#endif
+#ifdef __NR_mq_unlink
+ { __NR_mq_unlink, "mq_unlink" },
+#endif
+#ifdef __NR_mremap
+ { __NR_mremap, "mremap" },
+#endif
+#ifdef __NR_msgctl
+ { __NR_msgctl, "msgctl" },
+#endif
+#ifdef __NR_msgget
+ { __NR_msgget, "msgget" },
+#endif
+#ifdef __NR_msgrcv
+ { __NR_msgrcv, "msgrcv" },
+#endif
+#ifdef __NR_msgsnd
+ { __NR_msgsnd, "msgsnd" },
+#endif
+#ifdef __NR_msync
+ { __NR_msync, "msync" },
+#endif
+#ifdef __NR_munlock
+ { __NR_munlock, "munlock" },
+#endif
+#ifdef __NR_munlockall
+ { __NR_munlockall, "munlockall" },
+#endif
+#ifdef __NR_munmap
+ { __NR_munmap, "munmap" },
+#endif
+#ifdef __NR_name_to_handle_at
+ { __NR_name_to_handle_at, "name_to_handle_at" },
+#endif
+#ifdef __NR_nanosleep
+ { __NR_nanosleep, "nanosleep" },
+#endif
+#ifdef __NR_newfstatat
+ { __NR_newfstatat, "newfstatat" },
+#endif
+#ifdef __NR_nfsservctl
+ { __NR_nfsservctl, "nfsservctl" },
+#endif
+#ifdef __NR_nice
+ { __NR_nice, "nice" },
+#endif
+#ifdef __NR_oldfstat
+ { __NR_oldfstat, "oldfstat" },
+#endif
+#ifdef __NR_oldlstat
+ { __NR_oldlstat, "oldlstat" },
+#endif
+#ifdef __NR_oldolduname
+ { __NR_oldolduname, "oldolduname" },
+#endif
+#ifdef __NR_oldstat
+ { __NR_oldstat, "oldstat" },
+#endif
+#ifdef __NR_olduname
+ { __NR_olduname, "olduname" },
+#endif
+#ifdef __NR_open
+ { __NR_open, "open" },
+#endif
+#ifdef __NR_open_by_handle_at
+ { __NR_open_by_handle_at, "open_by_handle_at" },
+#endif
+#ifdef __NR_openat
+ { __NR_openat, "openat" },
+#endif
+#ifdef __NR_pause
+ { __NR_pause, "pause" },
+#endif
+#ifdef __NR_perf_event_open
+ { __NR_perf_event_open, "perf_event_open" },
+#endif
+#ifdef __NR_personality
+ { __NR_personality, "personality" },
+#endif
+#ifdef __NR_pipe
+ { __NR_pipe, "pipe" },
+#endif
+#ifdef __NR_pipe2
+ { __NR_pipe2, "pipe2" },
+#endif
+#ifdef __NR_pivot_root
+ { __NR_pivot_root, "pivot_root" },
+#endif
+#ifdef __NR_poll
+ { __NR_poll, "poll" },
+#endif
+#ifdef __NR_ppoll
+ { __NR_ppoll, "ppoll" },
+#endif
+#ifdef __NR_prctl
+ { __NR_prctl, "prctl" },
+#endif
+#ifdef __NR_pread64
+ { __NR_pread64, "pread64" },
+#endif
+#ifdef __NR_preadv
+ { __NR_preadv, "preadv" },
+#endif
+#ifdef __NR_prlimit64
+ { __NR_prlimit64, "prlimit64" },
+#endif
+#ifdef __NR_process_vm_readv
+ { __NR_process_vm_readv, "process_vm_readv" },
+#endif
+#ifdef __NR_process_vm_writev
+ { __NR_process_vm_writev, "process_vm_writev" },
+#endif
+#ifdef __NR_prof
+ { __NR_prof, "prof" },
+#endif
+#ifdef __NR_profil
+ { __NR_profil, "profil" },
+#endif
+#ifdef __NR_pselect6
+ { __NR_pselect6, "pselect6" },
+#endif
+#ifdef __NR_ptrace
+ { __NR_ptrace, "ptrace" },
+#endif
+#ifdef __NR_putpmsg
+ { __NR_putpmsg, "putpmsg" },
+#endif
+#ifdef __NR_pwrite64
+ { __NR_pwrite64, "pwrite64" },
+#endif
+#ifdef __NR_pwritev
+ { __NR_pwritev, "pwritev" },
+#endif
+#ifdef __NR_query_module
+ { __NR_query_module, "query_module" },
+#endif
+#ifdef __NR_quotactl
+ { __NR_quotactl, "quotactl" },
+#endif
+#ifdef __NR_read
+ { __NR_read, "read" },
+#endif
+#ifdef __NR_readahead
+ { __NR_readahead, "readahead" },
+#endif
+#ifdef __NR_readdir
+ { __NR_readdir, "readdir" },
+#endif
+#ifdef __NR_readlink
+ { __NR_readlink, "readlink" },
+#endif
+#ifdef __NR_readlinkat
+ { __NR_readlinkat, "readlinkat" },
+#endif
+#ifdef __NR_readv
+ { __NR_readv, "readv" },
+#endif
+#ifdef __NR_reboot
+ { __NR_reboot, "reboot" },
+#endif
+#ifdef __NR_recvfrom
+ { __NR_recvfrom, "recvfrom" },
+#endif
+#ifdef __NR_recvmmsg
+ { __NR_recvmmsg, "recvmmsg" },
+#endif
+#ifdef __NR_recvmsg
+ { __NR_recvmsg, "recvmsg" },
+#endif
+#ifdef __NR_remap_file_pages
+ { __NR_remap_file_pages, "remap_file_pages" },
+#endif
+#ifdef __NR_removexattr
+ { __NR_removexattr, "removexattr" },
+#endif
+#ifdef __NR_rename
+ { __NR_rename, "rename" },
+#endif
+#ifdef __NR_renameat
+ { __NR_renameat, "renameat" },
+#endif
+#ifdef __NR_request_key
+ { __NR_request_key, "request_key" },
+#endif
+#ifdef __NR_restart_syscall
+ { __NR_restart_syscall, "restart_syscall" },
+#endif
+#ifdef __NR_rmdir
+ { __NR_rmdir, "rmdir" },
+#endif
+#ifdef __NR_rt_sigaction
+ { __NR_rt_sigaction, "rt_sigaction" },
+#endif
+#ifdef __NR_rt_sigpending
+ { __NR_rt_sigpending, "rt_sigpending" },
+#endif
+#ifdef __NR_rt_sigprocmask
+ { __NR_rt_sigprocmask, "rt_sigprocmask" },
+#endif
+#ifdef __NR_rt_sigqueueinfo
+ { __NR_rt_sigqueueinfo, "rt_sigqueueinfo" },
+#endif
+#ifdef __NR_rt_sigreturn
+ { __NR_rt_sigreturn, "rt_sigreturn" },
+#endif
+#ifdef __NR_rt_sigsuspend
+ { __NR_rt_sigsuspend, "rt_sigsuspend" },
+#endif
+#ifdef __NR_rt_sigtimedwait
+ { __NR_rt_sigtimedwait, "rt_sigtimedwait" },
+#endif
+#ifdef __NR_rt_tgsigqueueinfo
+ { __NR_rt_tgsigqueueinfo, "rt_tgsigqueueinfo" },
+#endif
+#ifdef __NR_sched_get_priority_max
+ { __NR_sched_get_priority_max, "sched_get_priority_max" },
+#endif
+#ifdef __NR_sched_get_priority_min
+ { __NR_sched_get_priority_min, "sched_get_priority_min" },
+#endif
+#ifdef __NR_sched_getaffinity
+ { __NR_sched_getaffinity, "sched_getaffinity" },
+#endif
+#ifdef __NR_sched_getparam
+ { __NR_sched_getparam, "sched_getparam" },
+#endif
+#ifdef __NR_sched_getscheduler
+ { __NR_sched_getscheduler, "sched_getscheduler" },
+#endif
+#ifdef __NR_sched_rr_get_interval
+ { __NR_sched_rr_get_interval, "sched_rr_get_interval" },
+#endif
+#ifdef __NR_sched_setaffinity
+ { __NR_sched_setaffinity, "sched_setaffinity" },
+#endif
+#ifdef __NR_sched_setparam
+ { __NR_sched_setparam, "sched_setparam" },
+#endif
+#ifdef __NR_sched_setscheduler
+ { __NR_sched_setscheduler, "sched_setscheduler" },
+#endif
+#ifdef __NR_sched_yield
+ { __NR_sched_yield, "sched_yield" },
+#endif
+#ifdef __NR_security
+ { __NR_security, "security" },
+#endif
+#ifdef __NR_select
+ { __NR_select, "select" },
+#endif
+#ifdef __NR_semctl
+ { __NR_semctl, "semctl" },
+#endif
+#ifdef __NR_semget
+ { __NR_semget, "semget" },
+#endif
+#ifdef __NR_semop
+ { __NR_semop, "semop" },
+#endif
+#ifdef __NR_semtimedop
+ { __NR_semtimedop, "semtimedop" },
+#endif
+#ifdef __NR_sendfile
+ { __NR_sendfile, "sendfile" },
+#endif
+#ifdef __NR_sendfile64
+ { __NR_sendfile64, "sendfile64" },
+#endif
+#ifdef __NR_sendmmsg
+ { __NR_sendmmsg, "sendmmsg" },
+#endif
+#ifdef __NR_sendmsg
+ { __NR_sendmsg, "sendmsg" },
+#endif
+#ifdef __NR_sendto
+ { __NR_sendto, "sendto" },
+#endif
+#ifdef __NR_set_mempolicy
+ { __NR_set_mempolicy, "set_mempolicy" },
+#endif
+#ifdef __NR_set_robust_list
+ { __NR_set_robust_list, "set_robust_list" },
+#endif
+#ifdef __NR_set_thread_area
+ { __NR_set_thread_area, "set_thread_area" },
+#endif
+#ifdef __NR_set_tid_address
+ { __NR_set_tid_address, "set_tid_address" },
+#endif
+#ifdef __NR_setdomainname
+ { __NR_setdomainname, "setdomainname" },
+#endif
+#ifdef __NR_setfsgid
+ { __NR_setfsgid, "setfsgid" },
+#endif
+#ifdef __NR_setfsgid32
+ { __NR_setfsgid32, "setfsgid32" },
+#endif
+#ifdef __NR_setfsuid
+ { __NR_setfsuid, "setfsuid" },
+#endif
+#ifdef __NR_setfsuid32
+ { __NR_setfsuid32, "setfsuid32" },
+#endif
+#ifdef __NR_setgid
+ { __NR_setgid, "setgid" },
+#endif
+#ifdef __NR_setgid32
+ { __NR_setgid32, "setgid32" },
+#endif
+#ifdef __NR_setgroups
+ { __NR_setgroups, "setgroups" },
+#endif
+#ifdef __NR_setgroups32
+ { __NR_setgroups32, "setgroups32" },
+#endif
+#ifdef __NR_sethostname
+ { __NR_sethostname, "sethostname" },
+#endif
+#ifdef __NR_setitimer
+ { __NR_setitimer, "setitimer" },
+#endif
+#ifdef __NR_setns
+ { __NR_setns, "setns" },
+#endif
+#ifdef __NR_setpgid
+ { __NR_setpgid, "setpgid" },
+#endif
+#ifdef __NR_setpriority
+ { __NR_setpriority, "setpriority" },
+#endif
+#ifdef __NR_setregid
+ { __NR_setregid, "setregid" },
+#endif
+#ifdef __NR_setregid32
+ { __NR_setregid32, "setregid32" },
+#endif
+#ifdef __NR_setresgid
+ { __NR_setresgid, "setresgid" },
+#endif
+#ifdef __NR_setresgid32
+ { __NR_setresgid32, "setresgid32" },
+#endif
+#ifdef __NR_setresuid
+ { __NR_setresuid, "setresuid" },
+#endif
+#ifdef __NR_setresuid32
+ { __NR_setresuid32, "setresuid32" },
+#endif
+#ifdef __NR_setreuid
+ { __NR_setreuid, "setreuid" },
+#endif
+#ifdef __NR_setreuid32
+ { __NR_setreuid32, "setreuid32" },
+#endif
+#ifdef __NR_setrlimit
+ { __NR_setrlimit, "setrlimit" },
+#endif
+#ifdef __NR_setsid
+ { __NR_setsid, "setsid" },
+#endif
+#ifdef __NR_setsockopt
+ { __NR_setsockopt, "setsockopt" },
+#endif
+#ifdef __NR_settimeofday
+ { __NR_settimeofday, "settimeofday" },
+#endif
+#ifdef __NR_setuid
+ { __NR_setuid, "setuid" },
+#endif
+#ifdef __NR_setuid32
+ { __NR_setuid32, "setuid32" },
+#endif
+#ifdef __NR_setxattr
+ { __NR_setxattr, "setxattr" },
+#endif
+#ifdef __NR_sgetmask
+ { __NR_sgetmask, "sgetmask" },
+#endif
+#ifdef __NR_shmat
+ { __NR_shmat, "shmat" },
+#endif
+#ifdef __NR_shmctl
+ { __NR_shmctl, "shmctl" },
+#endif
+#ifdef __NR_shmdt
+ { __NR_shmdt, "shmdt" },
+#endif
+#ifdef __NR_shmget
+ { __NR_shmget, "shmget" },
+#endif
+#ifdef __NR_shutdown
+ { __NR_shutdown, "shutdown" },
+#endif
+#ifdef __NR_sigaction
+ { __NR_sigaction, "sigaction" },
+#endif
+#ifdef __NR_sigaltstack
+ { __NR_sigaltstack, "sigaltstack" },
+#endif
+#ifdef __NR_signal
+ { __NR_signal, "signal" },
+#endif
+#ifdef __NR_signalfd
+ { __NR_signalfd, "signalfd" },
+#endif
+#ifdef __NR_signalfd4
+ { __NR_signalfd4, "signalfd4" },
+#endif
+#ifdef __NR_sigpending
+ { __NR_sigpending, "sigpending" },
+#endif
+#ifdef __NR_sigprocmask
+ { __NR_sigprocmask, "sigprocmask" },
+#endif
+#ifdef __NR_sigreturn
+ { __NR_sigreturn, "sigreturn" },
+#endif
+#ifdef __NR_sigsuspend
+ { __NR_sigsuspend, "sigsuspend" },
+#endif
+#ifdef __NR_socket
+ { __NR_socket, "socket" },
+#endif
+#ifdef __NR_socketcall
+ { __NR_socketcall, "socketcall" },
+#endif
+#ifdef __NR_socketpair
+ { __NR_socketpair, "socketpair" },
+#endif
+#ifdef __NR_splice
+ { __NR_splice, "splice" },
+#endif
+#ifdef __NR_ssetmask
+ { __NR_ssetmask, "ssetmask" },
+#endif
+#ifdef __NR_stat
+ { __NR_stat, "stat" },
+#endif
+#ifdef __NR_stat64
+ { __NR_stat64, "stat64" },
+#endif
+#ifdef __NR_statfs
+ { __NR_statfs, "statfs" },
+#endif
+#ifdef __NR_statfs64
+ { __NR_statfs64, "statfs64" },
+#endif
+#ifdef __NR_stime
+ { __NR_stime, "stime" },
+#endif
+#ifdef __NR_stty
+ { __NR_stty, "stty" },
+#endif
+#ifdef __NR_swapoff
+ { __NR_swapoff, "swapoff" },
+#endif
+#ifdef __NR_swapon
+ { __NR_swapon, "swapon" },
+#endif
+#ifdef __NR_symlink
+ { __NR_symlink, "symlink" },
+#endif
+#ifdef __NR_symlinkat
+ { __NR_symlinkat, "symlinkat" },
+#endif
+#ifdef __NR_sync
+ { __NR_sync, "sync" },
+#endif
+#ifdef __NR_sync_file_range
+ { __NR_sync_file_range, "sync_file_range" },
+#endif
+#ifdef __NR_syncfs
+ { __NR_syncfs, "syncfs" },
+#endif
+#ifdef __NR_sysfs
+ { __NR_sysfs, "sysfs" },
+#endif
+#ifdef __NR_sysinfo
+ { __NR_sysinfo, "sysinfo" },
+#endif
+#ifdef __NR_syslog
+ { __NR_syslog, "syslog" },
+#endif
+#ifdef __NR_tee
+ { __NR_tee, "tee" },
+#endif
+#ifdef __NR_tgkill
+ { __NR_tgkill, "tgkill" },
+#endif
+#ifdef __NR_time
+ { __NR_time, "time" },
+#endif
+#ifdef __NR_timer_create
+ { __NR_timer_create, "timer_create" },
+#endif
+#ifdef __NR_timer_delete
+ { __NR_timer_delete, "timer_delete" },
+#endif
+#ifdef __NR_timer_getoverrun
+ { __NR_timer_getoverrun, "timer_getoverrun" },
+#endif
+#ifdef __NR_timer_gettime
+ { __NR_timer_gettime, "timer_gettime" },
+#endif
+#ifdef __NR_timer_settime
+ { __NR_timer_settime, "timer_settime" },
+#endif
+#ifdef __NR_timerfd_create
+ { __NR_timerfd_create, "timerfd_create" },
+#endif
+#ifdef __NR_timerfd_gettime
+ { __NR_timerfd_gettime, "timerfd_gettime" },
+#endif
+#ifdef __NR_timerfd_settime
+ { __NR_timerfd_settime, "timerfd_settime" },
+#endif
+#ifdef __NR_times
+ { __NR_times, "times" },
+#endif
+#ifdef __NR_tkill
+ { __NR_tkill, "tkill" },
+#endif
+#ifdef __NR_truncate
+ { __NR_truncate, "truncate" },
+#endif
+#ifdef __NR_truncate64
+ { __NR_truncate64, "truncate64" },
+#endif
+#ifdef __NR_tuxcall
+ { __NR_tuxcall, "tuxcall" },
+#endif
+#ifdef __NR_ugetrlimit
+ { __NR_ugetrlimit, "ugetrlimit" },
+#endif
+#ifdef __NR_ulimit
+ { __NR_ulimit, "ulimit" },
+#endif
+#ifdef __NR_umask
+ { __NR_umask, "umask" },
+#endif
+#ifdef __NR_umount
+ { __NR_umount, "umount" },
+#endif
+#ifdef __NR_umount2
+ { __NR_umount2, "umount2" },
+#endif
+#ifdef __NR_uname
+ { __NR_uname, "uname" },
+#endif
+#ifdef __NR_unlink
+ { __NR_unlink, "unlink" },
+#endif
+#ifdef __NR_unlinkat
+ { __NR_unlinkat, "unlinkat" },
+#endif
+#ifdef __NR_unshare
+ { __NR_unshare, "unshare" },
+#endif
+#ifdef __NR_uselib
+ { __NR_uselib, "uselib" },
+#endif
+#ifdef __NR_ustat
+ { __NR_ustat, "ustat" },
+#endif
+#ifdef __NR_utime
+ { __NR_utime, "utime" },
+#endif
+#ifdef __NR_utimensat
+ { __NR_utimensat, "utimensat" },
+#endif
+#ifdef __NR_utimes
+ { __NR_utimes, "utimes" },
+#endif
+#ifdef __NR_vfork
+ { __NR_vfork, "vfork" },
+#endif
+#ifdef __NR_vhangup
+ { __NR_vhangup, "vhangup" },
+#endif
+#ifdef __NR_vm86
+ { __NR_vm86, "vm86" },
+#endif
+#ifdef __NR_vm86old
+ { __NR_vm86old, "vm86old" },
+#endif
+#ifdef __NR_vmsplice
+ { __NR_vmsplice, "vmsplice" },
+#endif
+#ifdef __NR_vserver
+ { __NR_vserver, "vserver" },
+#endif
+#ifdef __NR_wait4
+ { __NR_wait4, "wait4" },
+#endif
+#ifdef __NR_waitid
+ { __NR_waitid, "waitid" },
+#endif
+#ifdef __NR_waitpid
+ { __NR_waitpid, "waitpid" },
+#endif
+#ifdef __NR_write
+ { __NR_write, "write" },
+#endif
+#ifdef __NR_writev
+ { __NR_writev, "writev" },
+#endif
+ {0, NULL}
+};
+
diff --git a/src/common/log.c b/src/common/log.c
index 5e2e6b5b5..517fa4faa 100644
--- a/src/common/log.c
+++ b/src/common/log.c
@@ -1,7 +1,7 @@
/* Copyright (c) 2001, Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -36,6 +36,10 @@
#include "torlog.h"
#include "container.h"
+/** Given a severity, yields an index into log_severity_list_t.masks to use
+ * for that severity. */
+#define SEVERITY_MASK_IDX(sev) ((sev) - LOG_ERR)
+
/** @{ */
/** The string we stick at the end of a log message when it is too long,
* and its length. */
@@ -83,12 +87,12 @@ should_log_function_name(log_domain_mask_t domain, int severity)
case LOG_DEBUG:
case LOG_INFO:
/* All debugging messages occur in interesting places. */
- return 1;
+ return (domain & LD_NOFUNCNAME) == 0;
case LOG_NOTICE:
case LOG_WARN:
case LOG_ERR:
/* We care about places where bugs occur. */
- return (domain == LD_BUG);
+ return (domain & (LD_BUG|LD_NOFUNCNAME)) == LD_BUG;
default:
/* Call assert, not tor_assert, since tor_assert calls log on failure. */
assert(0); return 0;
@@ -131,7 +135,7 @@ static smartlist_t *pending_cb_messages = NULL;
/** What's the lowest log level anybody cares about? Checking this lets us
* bail out early from log_debug if we aren't debugging. */
-int _log_global_min_severity = LOG_NOTICE;
+int log_global_min_severity_ = LOG_NOTICE;
static void delete_log(logfile_t *victim);
static void close_log(logfile_t *victim);
@@ -140,11 +144,9 @@ static char *domain_to_string(log_domain_mask_t domain,
char *buf, size_t buflen);
static INLINE char *format_msg(char *buf, size_t buf_len,
log_domain_mask_t domain, int severity, const char *funcname,
+ const char *suffix,
const char *format, va_list ap, size_t *msg_len_out)
- CHECK_PRINTF(6,0);
-static void logv(int severity, log_domain_mask_t domain, const char *funcname,
- const char *format, va_list ap)
- CHECK_PRINTF(4,0);
+ CHECK_PRINTF(7,0);
/** Name of the application: used to generate the message we write at the
* start of each new log. */
@@ -177,7 +179,7 @@ set_log_time_granularity(int granularity_msec)
* <b>buf_len</b> character buffer in <b>buf</b>.
*/
static INLINE size_t
-_log_prefix(char *buf, size_t buf_len, int severity)
+log_prefix_(char *buf, size_t buf_len, int severity)
{
time_t t;
struct timeval now;
@@ -230,7 +232,7 @@ log_tor_version(logfile_t *lf, int reset)
/* We are resetting, but we aren't at the start of the file; no
* need to log again. */
return 0;
- n = _log_prefix(buf, sizeof(buf), LOG_NOTICE);
+ n = log_prefix_(buf, sizeof(buf), LOG_NOTICE);
if (appname) {
tor_snprintf(buf+n, sizeof(buf)-n,
"%s opening %slog file.\n", appname, is_new?"new ":"");
@@ -251,6 +253,7 @@ log_tor_version(logfile_t *lf, int reset)
static INLINE char *
format_msg(char *buf, size_t buf_len,
log_domain_mask_t domain, int severity, const char *funcname,
+ const char *suffix,
const char *format, va_list ap, size_t *msg_len_out)
{
size_t n;
@@ -262,7 +265,7 @@ format_msg(char *buf, size_t buf_len,
buf_len -= 2; /* subtract 2 characters so we have room for \n\0 */
buf_end = buf+buf_len; /* point *after* the last char we can write to */
- n = _log_prefix(buf, buf_len, severity);
+ n = log_prefix_(buf, buf_len, severity);
end_of_prefix = buf+n;
if (log_domains_are_logged) {
@@ -312,6 +315,13 @@ format_msg(char *buf, size_t buf_len,
n = buf_len;
} else {
n += r;
+ if (suffix) {
+ size_t suffix_len = strlen(suffix);
+ if (buf_len-n >= suffix_len) {
+ memcpy(buf+n, suffix, suffix_len);
+ n += suffix_len;
+ }
+ }
}
buf[n]='\n';
buf[n+1]='\0';
@@ -323,9 +333,9 @@ format_msg(char *buf, size_t buf_len,
* <b>severity</b>. If provided, <b>funcname</b> is prepended to the
* message. The actual message is derived as from tor_snprintf(format,ap).
*/
-static void
-logv(int severity, log_domain_mask_t domain, const char *funcname,
- const char *format, va_list ap)
+MOCK_IMPL(STATIC void,
+logv,(int severity, log_domain_mask_t domain, const char *funcname,
+ const char *suffix, const char *format, va_list ap))
{
char buf[10024];
size_t msg_len = 0;
@@ -361,8 +371,8 @@ logv(int severity, log_domain_mask_t domain, const char *funcname,
if (!formatted) {
end_of_prefix =
- format_msg(buf, sizeof(buf), domain, severity, funcname, format, ap,
- &msg_len);
+ format_msg(buf, sizeof(buf), domain, severity, funcname, suffix,
+ format, ap, &msg_len);
formatted = 1;
}
@@ -423,102 +433,277 @@ void
tor_log(int severity, log_domain_mask_t domain, const char *format, ...)
{
va_list ap;
- if (severity > _log_global_min_severity)
+ if (severity > log_global_min_severity_)
return;
va_start(ap,format);
- logv(severity, domain, NULL, format, ap);
+ logv(severity, domain, NULL, NULL, format, ap);
va_end(ap);
}
+/** Maximum number of fds that will get notifications if we crash */
+#define MAX_SIGSAFE_FDS 8
+/** Array of fds to log crash-style warnings to. */
+static int sigsafe_log_fds[MAX_SIGSAFE_FDS] = { STDERR_FILENO };
+/** The number of elements used in sigsafe_log_fds */
+static int n_sigsafe_log_fds = 1;
+
+/** Write <b>s</b> to each element of sigsafe_log_fds. Return 0 on success, -1
+ * on failure. */
+static int
+tor_log_err_sigsafe_write(const char *s)
+{
+ int i;
+ ssize_t r;
+ size_t len = strlen(s);
+ int err = 0;
+ for (i=0; i < n_sigsafe_log_fds; ++i) {
+ r = write(sigsafe_log_fds[i], s, len);
+ err += (r != (ssize_t)len);
+ }
+ return err ? -1 : 0;
+}
+
+/** Given a list of string arguments ending with a NULL, writes them
+ * to our logs and to stderr (if possible). This function is safe to call
+ * from within a signal handler. */
+void
+tor_log_err_sigsafe(const char *m, ...)
+{
+ va_list ap;
+ const char *x;
+ char timebuf[33];
+ time_t now = time(NULL);
+
+ if (!m)
+ return;
+ if (log_time_granularity >= 2000) {
+ int g = log_time_granularity / 1000;
+ now -= now % g;
+ }
+ timebuf[0] = now < 0 ? '-' : ' ';
+ if (now < 0) now = -now;
+ timebuf[1] = '\0';
+ format_dec_number_sigsafe(now, timebuf+1, sizeof(timebuf)-1);
+ tor_log_err_sigsafe_write("\n=========================================="
+ "================== T=");
+ tor_log_err_sigsafe_write(timebuf);
+ tor_log_err_sigsafe_write("\n");
+ tor_log_err_sigsafe_write(m);
+ va_start(ap, m);
+ while ((x = va_arg(ap, const char*))) {
+ tor_log_err_sigsafe_write(x);
+ }
+ va_end(ap);
+}
+
+/** Set *<b>out</b> to a pointer to an array of the fds to log errors to from
+ * inside a signal handler. Return the number of elements in the array. */
+int
+tor_log_get_sigsafe_err_fds(const int **out)
+{
+ *out = sigsafe_log_fds;
+ return n_sigsafe_log_fds;
+}
+
+/** Helper function; return true iff the <b>n</b>-element array <b>array</b>
+ * contains <b>item</b>. */
+static int
+int_array_contains(const int *array, int n, int item)
+{
+ int j;
+ for (j = 0; j < n; ++j) {
+ if (array[j] == item)
+ return 1;
+ }
+ return 0;
+}
+
+/** Function to call whenever the list of logs changes to get ready to log
+ * from signal handlers. */
+void
+tor_log_update_sigsafe_err_fds(void)
+{
+ const logfile_t *lf;
+ int found_real_stderr = 0;
+
+ LOCK_LOGS();
+ /* Reserve the first one for stderr. This is safe because when we daemonize,
+ * we dup2 /dev/null to stderr, */
+ sigsafe_log_fds[0] = STDERR_FILENO;
+ n_sigsafe_log_fds = 1;
+
+ for (lf = logfiles; lf; lf = lf->next) {
+ /* Don't try callback to the control port, or syslogs: We can't
+ * do them from a signal handler. Don't try stdout: we always do stderr.
+ */
+ if (lf->is_temporary || lf->is_syslog ||
+ lf->callback || lf->seems_dead || lf->fd < 0)
+ continue;
+ if (lf->severities->masks[SEVERITY_MASK_IDX(LOG_ERR)] &
+ (LD_BUG|LD_GENERAL)) {
+ if (lf->fd == STDERR_FILENO)
+ found_real_stderr = 1;
+ /* Avoid duplicates */
+ if (int_array_contains(sigsafe_log_fds, n_sigsafe_log_fds, lf->fd))
+ continue;
+ sigsafe_log_fds[n_sigsafe_log_fds++] = lf->fd;
+ if (n_sigsafe_log_fds == MAX_SIGSAFE_FDS)
+ break;
+ }
+ }
+
+ if (!found_real_stderr &&
+ int_array_contains(sigsafe_log_fds, n_sigsafe_log_fds, STDOUT_FILENO)) {
+ /* Don't use a virtual stderr when we're also logging to stdout. */
+ assert(n_sigsafe_log_fds >= 2); /* Don't use assert inside log functions*/
+ sigsafe_log_fds[0] = sigsafe_log_fds[--n_sigsafe_log_fds];
+ }
+
+ UNLOCK_LOGS();
+}
+
+/** Add to <b>out</b> a copy of every currently configured log file name. Used
+ * to enable access to these filenames with the sandbox code. */
+void
+tor_log_get_logfile_names(smartlist_t *out)
+{
+ logfile_t *lf;
+ tor_assert(out);
+
+ LOCK_LOGS();
+
+ for (lf = logfiles; lf; lf = lf->next) {
+ if (lf->is_temporary || lf->is_syslog || lf->callback)
+ continue;
+ if (lf->filename == NULL)
+ continue;
+ smartlist_add(out, tor_strdup(lf->filename));
+ }
+
+ UNLOCK_LOGS();
+}
+
/** Output a message to the log, prefixed with a function name <b>fn</b>. */
#ifdef __GNUC__
/** GCC-based implementation of the log_fn backend, used when we have
* variadic macros. All arguments are as for log_fn, except for
* <b>fn</b>, which is the name of the calling functions. */
void
-_log_fn(int severity, log_domain_mask_t domain, const char *fn,
+log_fn_(int severity, log_domain_mask_t domain, const char *fn,
const char *format, ...)
{
va_list ap;
- if (severity > _log_global_min_severity)
+ if (severity > log_global_min_severity_)
return;
va_start(ap,format);
- logv(severity, domain, fn, format, ap);
+ logv(severity, domain, fn, NULL, format, ap);
va_end(ap);
}
+void
+log_fn_ratelim_(ratelim_t *ratelim, int severity, log_domain_mask_t domain,
+ const char *fn, const char *format, ...)
+{
+ va_list ap;
+ char *m;
+ if (severity > log_global_min_severity_)
+ return;
+ m = rate_limit_log(ratelim, approx_time());
+ if (m == NULL)
+ return;
+ va_start(ap, format);
+ logv(severity, domain, fn, m, format, ap);
+ va_end(ap);
+ tor_free(m);
+}
#else
/** @{ */
/** Variant implementation of log_fn, log_debug, log_info,... for C compilers
* without variadic macros. In this case, the calling function sets
- * _log_fn_function_name to the name of the function, then invokes the
- * appropriate _log_fn, _log_debug, etc. */
-const char *_log_fn_function_name=NULL;
+ * log_fn_function_name_ to the name of the function, then invokes the
+ * appropriate log_fn_, log_debug_, etc. */
+const char *log_fn_function_name_=NULL;
void
-_log_fn(int severity, log_domain_mask_t domain, const char *format, ...)
+log_fn_(int severity, log_domain_mask_t domain, const char *format, ...)
{
va_list ap;
- if (severity > _log_global_min_severity)
+ if (severity > log_global_min_severity_)
return;
va_start(ap,format);
- logv(severity, domain, _log_fn_function_name, format, ap);
+ logv(severity, domain, log_fn_function_name_, NULL, format, ap);
va_end(ap);
- _log_fn_function_name = NULL;
+ log_fn_function_name_ = NULL;
}
void
-_log_debug(log_domain_mask_t domain, const char *format, ...)
+log_fn_ratelim_(ratelim_t *ratelim, int severity, log_domain_mask_t domain,
+ const char *format, ...)
+{
+ va_list ap;
+ char *m;
+ if (severity > log_global_min_severity_)
+ return;
+ m = rate_limit_log(ratelim, approx_time());
+ if (m == NULL)
+ return;
+ va_start(ap, format);
+ logv(severity, domain, log_fn_function_name_, m, format, ap);
+ va_end(ap);
+ tor_free(m);
+}
+void
+log_debug_(log_domain_mask_t domain, const char *format, ...)
{
va_list ap;
/* For GCC we do this check in the macro. */
- if (PREDICT_LIKELY(LOG_DEBUG > _log_global_min_severity))
+ if (PREDICT_LIKELY(LOG_DEBUG > log_global_min_severity_))
return;
va_start(ap,format);
- logv(LOG_DEBUG, domain, _log_fn_function_name, format, ap);
+ logv(LOG_DEBUG, domain, log_fn_function_name_, NULL, format, ap);
va_end(ap);
- _log_fn_function_name = NULL;
+ log_fn_function_name_ = NULL;
}
void
-_log_info(log_domain_mask_t domain, const char *format, ...)
+log_info_(log_domain_mask_t domain, const char *format, ...)
{
va_list ap;
- if (LOG_INFO > _log_global_min_severity)
+ if (LOG_INFO > log_global_min_severity_)
return;
va_start(ap,format);
- logv(LOG_INFO, domain, _log_fn_function_name, format, ap);
+ logv(LOG_INFO, domain, log_fn_function_name_, NULL, format, ap);
va_end(ap);
- _log_fn_function_name = NULL;
+ log_fn_function_name_ = NULL;
}
void
-_log_notice(log_domain_mask_t domain, const char *format, ...)
+log_notice_(log_domain_mask_t domain, const char *format, ...)
{
va_list ap;
- if (LOG_NOTICE > _log_global_min_severity)
+ if (LOG_NOTICE > log_global_min_severity_)
return;
va_start(ap,format);
- logv(LOG_NOTICE, domain, _log_fn_function_name, format, ap);
+ logv(LOG_NOTICE, domain, log_fn_function_name_, NULL, format, ap);
va_end(ap);
- _log_fn_function_name = NULL;
+ log_fn_function_name_ = NULL;
}
void
-_log_warn(log_domain_mask_t domain, const char *format, ...)
+log_warn_(log_domain_mask_t domain, const char *format, ...)
{
va_list ap;
- if (LOG_WARN > _log_global_min_severity)
+ if (LOG_WARN > log_global_min_severity_)
return;
va_start(ap,format);
- logv(LOG_WARN, domain, _log_fn_function_name, format, ap);
+ logv(LOG_WARN, domain, log_fn_function_name_, NULL, format, ap);
va_end(ap);
- _log_fn_function_name = NULL;
+ log_fn_function_name_ = NULL;
}
void
-_log_err(log_domain_mask_t domain, const char *format, ...)
+log_err_(log_domain_mask_t domain, const char *format, ...)
{
va_list ap;
- if (LOG_ERR > _log_global_min_severity)
+ if (LOG_ERR > log_global_min_severity_)
return;
va_start(ap,format);
- logv(LOG_ERR, domain, _log_fn_function_name, format, ap);
+ logv(LOG_ERR, domain, log_fn_function_name_, NULL, format, ap);
va_end(ap);
- _log_fn_function_name = NULL;
+ log_fn_function_name_ = NULL;
}
/** @} */
#endif
@@ -638,7 +823,7 @@ add_stream_log_impl(const log_severity_list_t *severity,
lf->next = logfiles;
logfiles = lf;
- _log_global_min_severity = get_min_log_level();
+ log_global_min_severity_ = get_min_log_level();
}
/** Add a log handler named <b>name</b> to send all messages in <b>severity</b>
@@ -706,7 +891,7 @@ add_callback_log(const log_severity_list_t *severity, log_callback cb)
LOCK_LOGS();
logfiles = lf;
- _log_global_min_severity = get_min_log_level();
+ log_global_min_severity_ = get_min_log_level();
UNLOCK_LOGS();
return 0;
}
@@ -726,7 +911,7 @@ change_callback_log_severity(int loglevelMin, int loglevelMax,
memcpy(lf->severities, &severities, sizeof(severities));
}
}
- _log_global_min_severity = get_min_log_level();
+ log_global_min_severity_ = get_min_log_level();
UNLOCK_LOGS();
}
@@ -792,7 +977,7 @@ close_temp_logs(void)
}
}
- _log_global_min_severity = get_min_log_level();
+ log_global_min_severity_ = get_min_log_level();
UNLOCK_LOGS();
}
@@ -833,14 +1018,16 @@ add_file_log(const log_severity_list_t *severity, const char *filename)
fd = tor_open_cloexec(filename, O_WRONLY|O_CREAT|O_APPEND, 0644);
if (fd<0)
return -1;
- if (tor_fd_seekend(fd)<0)
+ if (tor_fd_seekend(fd)<0) {
+ close(fd);
return -1;
+ }
LOCK_LOGS();
add_stream_log_impl(severity, filename, fd);
logfiles->needs_close = 1;
lf = logfiles;
- _log_global_min_severity = get_min_log_level();
+ log_global_min_severity_ = get_min_log_level();
if (log_tor_version(lf, 0) < 0) {
delete_log(lf);
@@ -871,7 +1058,7 @@ add_syslog_log(const log_severity_list_t *severity)
LOCK_LOGS();
lf->next = logfiles;
logfiles = lf;
- _log_global_min_severity = get_min_log_level();
+ log_global_min_severity_ = get_min_log_level();
UNLOCK_LOGS();
return 0;
}
@@ -907,7 +1094,7 @@ log_level_to_string(int level)
static const char *domain_list[] = {
"GENERAL", "CRYPTO", "NET", "CONFIG", "FS", "PROTOCOL", "MM",
"HTTP", "APP", "CONTROL", "CIRC", "REND", "BUG", "DIR", "DIRSERV",
- "OR", "EDGE", "ACCT", "HIST", "HANDSHAKE", "HEARTBEAT", NULL
+ "OR", "EDGE", "ACCT", "HIST", "HANDSHAKE", "HEARTBEAT", "CHANNEL", NULL
};
/** Return a bitmask for the log domain for which <b>domain</b> is the name,
@@ -1106,42 +1293,7 @@ switch_logs_debug(void)
for (i = LOG_DEBUG; i >= LOG_ERR; --i)
lf->severities->masks[SEVERITY_MASK_IDX(i)] = ~0u;
}
- _log_global_min_severity = get_min_log_level();
+ log_global_min_severity_ = get_min_log_level();
UNLOCK_LOGS();
}
-#if 0
-static void
-dump_log_info(logfile_t *lf)
-{
- const char *tp;
-
- if (lf->filename) {
- printf("=== log into \"%s\" (%s-%s) (%stemporary)\n", lf->filename,
- sev_to_string(lf->min_loglevel),
- sev_to_string(lf->max_loglevel),
- lf->is_temporary?"":"not ");
- } else if (lf->is_syslog) {
- printf("=== syslog (%s-%s) (%stemporary)\n",
- sev_to_string(lf->min_loglevel),
- sev_to_string(lf->max_loglevel),
- lf->is_temporary?"":"not ");
- } else {
- printf("=== log (%s-%s) (%stemporary)\n",
- sev_to_string(lf->min_loglevel),
- sev_to_string(lf->max_loglevel),
- lf->is_temporary?"":"not ");
- }
-}
-
-void
-describe_logs(void)
-{
- logfile_t *lf;
- printf("==== BEGIN LOGS ====\n");
- for (lf = logfiles; lf; lf = lf->next)
- dump_log_info(lf);
- printf("==== END LOGS ====\n");
-}
-#endif
-
diff --git a/src/common/memarea.c b/src/common/memarea.c
index 07bd593cc..bcaea0949 100644
--- a/src/common/memarea.c
+++ b/src/common/memarea.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008-2012, The Tor Project, Inc. */
+/* Copyright (c) 2008-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/** \file memarea.c
@@ -29,6 +29,13 @@
#error "void* is neither 4 nor 8 bytes long. I don't know how to align stuff."
#endif
+#if defined(__GNUC__) && defined(FLEXIBLE_ARRAY_MEMBER)
+#define USE_ALIGNED_ATTRIBUTE
+#define U_MEM mem
+#else
+#define U_MEM u.mem
+#endif
+
#ifdef USE_SENTINELS
/** Magic value that we stick at the end of a memarea so we can make sure
* there are no run-off-the-end bugs. */
@@ -39,12 +46,12 @@
* end, set those bytes. */
#define SET_SENTINEL(chunk) \
STMT_BEGIN \
- set_uint32( &(chunk)->u.mem[chunk->mem_size], SENTINEL_VAL ); \
+ set_uint32( &(chunk)->U_MEM[chunk->mem_size], SENTINEL_VAL ); \
STMT_END
/** Assert that the sentinel on a memarea is set correctly. */
#define CHECK_SENTINEL(chunk) \
STMT_BEGIN \
- uint32_t sent_val = get_uint32(&(chunk)->u.mem[chunk->mem_size]); \
+ uint32_t sent_val = get_uint32(&(chunk)->U_MEM[chunk->mem_size]); \
tor_assert(sent_val == SENTINEL_VAL); \
STMT_END
#else
@@ -71,19 +78,23 @@ realign_pointer(void *ptr)
typedef struct memarea_chunk_t {
/** Next chunk in this area. Only kept around so we can free it. */
struct memarea_chunk_t *next_chunk;
- size_t mem_size; /**< How much RAM is available in u.mem, total? */
- char *next_mem; /**< Next position in u.mem to allocate data at. If it's
+ size_t mem_size; /**< How much RAM is available in mem, total? */
+ char *next_mem; /**< Next position in mem to allocate data at. If it's
* greater than or equal to mem+mem_size, this chunk is
* full. */
+#ifdef USE_ALIGNED_ATTRIBUTE
+ char mem[FLEXIBLE_ARRAY_MEMBER] __attribute__((aligned(MEMAREA_ALIGN)));
+#else
union {
char mem[1]; /**< Memory space in this chunk. */
- void *_void_for_alignment; /**< Dummy; used to make sure mem is aligned. */
+ void *void_for_alignment_; /**< Dummy; used to make sure mem is aligned. */
} u;
+#endif
} memarea_chunk_t;
/** How many bytes are needed for overhead before we get to the memory part
* of a chunk? */
-#define CHUNK_HEADER_SIZE STRUCT_OFFSET(memarea_chunk_t, u)
+#define CHUNK_HEADER_SIZE STRUCT_OFFSET(memarea_chunk_t, U_MEM)
/** What's the smallest that we'll allocate a chunk? */
#define CHUNK_SIZE 4096
@@ -118,10 +129,10 @@ alloc_chunk(size_t sz, int freelist_ok)
size_t chunk_size = freelist_ok ? CHUNK_SIZE : sz;
memarea_chunk_t *res;
chunk_size += SENTINEL_LEN;
- res = tor_malloc_roundup(&chunk_size);
+ res = tor_malloc(chunk_size);
res->next_chunk = NULL;
res->mem_size = chunk_size - CHUNK_HEADER_SIZE - SENTINEL_LEN;
- res->next_mem = res->u.mem;
+ res->next_mem = res->U_MEM;
tor_assert(res->next_mem+res->mem_size+SENTINEL_LEN ==
((char*)res)+chunk_size);
tor_assert(realign_pointer(res->next_mem) == res->next_mem);
@@ -140,7 +151,7 @@ chunk_free_unchecked(memarea_chunk_t *chunk)
++freelist_len;
chunk->next_chunk = freelist;
freelist = chunk;
- chunk->next_mem = chunk->u.mem;
+ chunk->next_mem = chunk->U_MEM;
} else {
tor_free(chunk);
}
@@ -183,7 +194,7 @@ memarea_clear(memarea_t *area)
}
area->first->next_chunk = NULL;
}
- area->first->next_mem = area->first->u.mem;
+ area->first->next_mem = area->first->U_MEM;
}
/** Remove all unused memarea chunks from the internal freelist. */
@@ -207,7 +218,7 @@ memarea_owns_ptr(const memarea_t *area, const void *p)
memarea_chunk_t *chunk;
const char *ptr = p;
for (chunk = area->first; chunk; chunk = chunk->next_chunk) {
- if (ptr >= chunk->u.mem && ptr < chunk->next_mem)
+ if (ptr >= chunk->U_MEM && ptr < chunk->next_mem)
return 1;
}
return 0;
@@ -226,7 +237,7 @@ memarea_alloc(memarea_t *area, size_t sz)
tor_assert(sz < SIZE_T_CEILING);
if (sz == 0)
sz = 1;
- if (chunk->next_mem+sz > chunk->u.mem+chunk->mem_size) {
+ if (chunk->next_mem+sz > chunk->U_MEM+chunk->mem_size) {
if (sz+CHUNK_HEADER_SIZE >= CHUNK_SIZE) {
/* This allocation is too big. Stick it in a special chunk, and put
* that chunk second in the list. */
@@ -244,8 +255,8 @@ memarea_alloc(memarea_t *area, size_t sz)
result = chunk->next_mem;
chunk->next_mem = chunk->next_mem + sz;
/* Reinstate these if bug 930 ever comes back
- tor_assert(chunk->next_mem >= chunk->u.mem);
- tor_assert(chunk->next_mem <= chunk->u.mem+chunk->mem_size);
+ tor_assert(chunk->next_mem >= chunk->U_MEM);
+ tor_assert(chunk->next_mem <= chunk->U_MEM+chunk->mem_size);
*/
chunk->next_mem = realign_pointer(chunk->next_mem);
return result;
@@ -280,14 +291,11 @@ memarea_strdup(memarea_t *area, const char *s)
char *
memarea_strndup(memarea_t *area, const char *s, size_t n)
{
- size_t ln;
+ size_t ln = 0;
char *result;
- const char *cp, *end = s+n;
tor_assert(n < SIZE_T_CEILING);
- for (cp = s; cp < end && *cp; ++cp)
+ for (ln = 0; ln < n && s[ln]; ++ln)
;
- /* cp now points to s+n, or to the 0 in the string. */
- ln = cp-s;
result = memarea_alloc(area, ln+1);
memcpy(result, s, ln);
result[ln]='\0';
@@ -304,8 +312,8 @@ memarea_get_stats(memarea_t *area, size_t *allocated_out, size_t *used_out)
for (chunk = area->first; chunk; chunk = chunk->next_chunk) {
CHECK_SENTINEL(chunk);
a += CHUNK_HEADER_SIZE + chunk->mem_size;
- tor_assert(chunk->next_mem >= chunk->u.mem);
- u += CHUNK_HEADER_SIZE + (chunk->next_mem - chunk->u.mem);
+ tor_assert(chunk->next_mem >= chunk->U_MEM);
+ u += CHUNK_HEADER_SIZE + (chunk->next_mem - chunk->U_MEM);
}
*allocated_out = a;
*used_out = u;
@@ -320,9 +328,9 @@ memarea_assert_ok(memarea_t *area)
for (chunk = area->first; chunk; chunk = chunk->next_chunk) {
CHECK_SENTINEL(chunk);
- tor_assert(chunk->next_mem >= chunk->u.mem);
+ tor_assert(chunk->next_mem >= chunk->U_MEM);
tor_assert(chunk->next_mem <=
- (char*) realign_pointer(chunk->u.mem+chunk->mem_size));
+ (char*) realign_pointer(chunk->U_MEM+chunk->mem_size));
}
}
diff --git a/src/common/memarea.h b/src/common/memarea.h
index b3c76d8d0..8b88585d3 100644
--- a/src/common/memarea.h
+++ b/src/common/memarea.h
@@ -1,9 +1,9 @@
-/* Copyright (c) 2008-2012, The Tor Project, Inc. */
+/* Copyright (c) 2008-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/* Tor dependencies */
-#ifndef _TOR_MEMAREA_H
-#define _TOR_MEMAREA_H
+#ifndef TOR_MEMAREA_H
+#define TOR_MEMAREA_H
typedef struct memarea_t memarea_t;
diff --git a/src/common/mempool.c b/src/common/mempool.c
index 637f081c8..438988876 100644
--- a/src/common/mempool.c
+++ b/src/common/mempool.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2007-2012, The Tor Project, Inc. */
+/* Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#if 1
/* Tor dependencies */
@@ -71,7 +71,6 @@
#define ASSERT(x) tor_assert(x)
#undef ALLOC_CAN_RETURN_NULL
#define TOR
-//#define ALLOC_ROUNDUP(p) tor_malloc_roundup(p)
/* End Tor dependencies */
#else
/* If you're not building this as part of Tor, you'll want to define the
@@ -115,7 +114,7 @@ struct mp_allocated_t {
* (Not actual size.) */
char mem[1];
/** An extra element to the union to insure correct alignment. */
- ALIGNMENT_TYPE _dummy;
+ ALIGNMENT_TYPE dummy_;
} u;
};
@@ -166,25 +165,16 @@ static mp_chunk_t *
mp_chunk_new(mp_pool_t *pool)
{
size_t sz = pool->new_chunk_capacity * pool->item_alloc_size;
-#ifdef ALLOC_ROUNDUP
- size_t alloc_size = CHUNK_OVERHEAD + sz;
- mp_chunk_t *chunk = ALLOC_ROUNDUP(&alloc_size);
-#else
mp_chunk_t *chunk = ALLOC(CHUNK_OVERHEAD + sz);
-#endif
+
#ifdef MEMPOOL_STATS
++pool->total_chunks_allocated;
#endif
CHECK_ALLOC(chunk);
memset(chunk, 0, sizeof(mp_chunk_t)); /* Doesn't clear the whole thing. */
chunk->magic = MP_CHUNK_MAGIC;
-#ifdef ALLOC_ROUNDUP
- chunk->mem_size = alloc_size - CHUNK_OVERHEAD;
- chunk->capacity = chunk->mem_size / pool->item_alloc_size;
-#else
chunk->capacity = pool->new_chunk_capacity;
chunk->mem_size = sz;
-#endif
chunk->next_mem = chunk->mem;
chunk->pool = pool;
return chunk;
diff --git a/src/common/mempool.h b/src/common/mempool.h
index d0a7bc2f3..0fc1e4c67 100644
--- a/src/common/mempool.h
+++ b/src/common/mempool.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2007-2012, The Tor Project, Inc. */
+/* Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -6,8 +6,8 @@
* \brief Headers for mempool.c
**/
-#ifndef _TOR_MEMPOOL_H
-#define _TOR_MEMPOOL_H
+#ifndef TOR_MEMPOOL_H
+#define TOR_MEMPOOL_H
/** A memory pool is a context in which a large number of fixed-sized
* objects can be allocated efficiently. See mempool.c for implementation
@@ -22,6 +22,8 @@ void mp_pool_destroy(mp_pool_t *pool);
void mp_pool_assert_ok(mp_pool_t *pool);
void mp_pool_log_status(mp_pool_t *pool, int severity);
+#define MP_POOL_ITEM_OVERHEAD (sizeof(void*))
+
#define MEMPOOL_STATS
#ifdef MEMPOOL_PRIVATE
diff --git a/src/common/procmon.c b/src/common/procmon.c
index 36b1a4855..0a49689e3 100644
--- a/src/common/procmon.c
+++ b/src/common/procmon.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011-2012, The Tor Project, Inc. */
+/* Copyright (c) 2011-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -25,9 +25,21 @@
#ifdef _WIN32
#include <windows.h>
+#endif
-/* Windows does not define pid_t, but _getpid() returns an int. */
+#if (0 == SIZEOF_PID_T) && defined(_WIN32)
+/* Windows does not define pid_t sometimes, but _getpid() returns an int.
+ * Everybody else needs to have a pid_t. */
typedef int pid_t;
+#define PID_T_FORMAT "%d"
+#elif (SIZEOF_PID_T == SIZEOF_INT) || (SIZEOF_PID_T == SIZEOF_SHORT)
+#define PID_T_FORMAT "%d"
+#elif (SIZEOF_PID_T == SIZEOF_LONG)
+#define PID_T_FORMAT "%ld"
+#elif (SIZEOF_PID_T == SIZEOF_INT64_T)
+#define PID_T_FORMAT I64_FORMAT
+#else
+#error Unknown: SIZEOF_PID_T
#endif
/* Define to 1 if process-termination monitors on this OS and Libevent
@@ -204,15 +216,17 @@ tor_process_monitor_new(struct event_base *base,
if (procmon->hproc != NULL) {
procmon->poll_hproc = 1;
- log_info(procmon->log_domain, "Successfully opened handle to process %d; "
+ log_info(procmon->log_domain, "Successfully opened handle to process "
+ PID_T_FORMAT"; "
"monitoring it.",
- (int)(procmon->pid));
+ procmon->pid);
} else {
/* If we couldn't get a handle to the process, we'll try again the
* first time we poll. */
- log_info(procmon->log_domain, "Failed to open handle to process %d; will "
+ log_info(procmon->log_domain, "Failed to open handle to process "
+ PID_T_FORMAT"; will "
"try again later.",
- (int)(procmon->pid));
+ procmon->pid);
}
#endif
@@ -257,7 +271,8 @@ tor_process_monitor_poll_cb(evutil_socket_t unused1, short unused2,
if (!GetExitCodeProcess(procmon->hproc, &exit_code)) {
char *errmsg = format_win32_error(GetLastError());
log_warn(procmon->log_domain, "Error \"%s\" occurred while polling "
- "handle for monitored process %d; assuming it's dead.",
+ "handle for monitored process "PID_T_FORMAT"; assuming "
+ "it's dead.",
errmsg, procmon->pid);
tor_free(errmsg);
its_dead_jim = 1;
@@ -273,7 +288,7 @@ tor_process_monitor_poll_cb(evutil_socket_t unused1, short unused2,
if (procmon->hproc != NULL) {
log_info(procmon->log_domain, "Successfully opened handle to monitored "
- "process %d.",
+ "process "PID_T_FORMAT".",
procmon->pid);
its_dead_jim = 0;
procmon->poll_hproc = 1;
@@ -292,8 +307,8 @@ tor_process_monitor_poll_cb(evutil_socket_t unused1, short unused2,
if (!its_dead_jim)
log_info(procmon->log_domain, "Failed to open handle to monitored "
- "process %d, and error code %lu (%s) is not 'invalid "
- "parameter' -- assuming the process is still alive.",
+ "process "PID_T_FORMAT", and error code %lu (%s) is not "
+ "'invalid parameter' -- assuming the process is still alive.",
procmon->pid,
err_code, errmsg);
@@ -306,9 +321,9 @@ tor_process_monitor_poll_cb(evutil_socket_t unused1, short unused2,
its_dead_jim = its_dead_jim && (errno == ESRCH);
#endif
- log(its_dead_jim ? LOG_NOTICE : LOG_INFO,
- procmon->log_domain, "Monitored process %d is %s.",
- (int)procmon->pid,
+ tor_log(its_dead_jim ? LOG_NOTICE : LOG_INFO,
+ procmon->log_domain, "Monitored process "PID_T_FORMAT" is %s.",
+ procmon->pid,
its_dead_jim ? "dead" : "still alive");
if (its_dead_jim) {
diff --git a/src/common/procmon.h b/src/common/procmon.h
index 88d64d6a1..b9388e2e9 100644
--- a/src/common/procmon.h
+++ b/src/common/procmon.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011-2012, The Tor Project, Inc. */
+/* Copyright (c) 2011-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/common/sandbox.c b/src/common/sandbox.c
new file mode 100644
index 000000000..4721b8dfc
--- /dev/null
+++ b/src/common/sandbox.c
@@ -0,0 +1,1758 @@
+/* Copyright (c) 2001 Matej Pfajfar.
+ * Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file sandbox.c
+ * \brief Code to enable sandboxing.
+ **/
+
+#include "orconfig.h"
+
+#ifndef _LARGEFILE64_SOURCE
+/**
+ * Temporarily required for O_LARGEFILE flag. Needs to be removed
+ * with the libevent fix.
+ */
+#define _LARGEFILE64_SOURCE
+#endif
+
+/** Malloc mprotect limit in bytes. */
+#define MALLOC_MP_LIM 1048576
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "sandbox.h"
+#include "container.h"
+#include "torlog.h"
+#include "torint.h"
+#include "util.h"
+#include "tor_queue.h"
+
+#define DEBUGGING_CLOSE
+
+#if defined(USE_LIBSECCOMP)
+
+#define _GNU_SOURCE
+
+#include <sys/mman.h>
+#include <sys/syscall.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/epoll.h>
+#include <sys/prctl.h>
+#include <linux/futex.h>
+#include <bits/signum.h>
+
+#include <stdarg.h>
+#include <seccomp.h>
+#include <signal.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <time.h>
+#include <poll.h>
+
+#if defined(HAVE_EXECINFO_H) && defined(HAVE_BACKTRACE) && \
+ defined(HAVE_BACKTRACE_SYMBOLS_FD) && defined(HAVE_SIGACTION)
+#define USE_BACKTRACE
+#define EXPOSE_CLEAN_BACKTRACE
+#include "backtrace.h"
+#endif
+
+#ifdef USE_BACKTRACE
+#include <execinfo.h>
+#endif
+
+/**
+ * Linux 32 bit definitions
+ */
+#if defined(__i386__)
+
+#define REG_SYSCALL REG_EAX
+#define M_SYSCALL gregs[REG_SYSCALL]
+
+/**
+ * Linux 64 bit definitions
+ */
+#elif defined(__x86_64__)
+
+#define REG_SYSCALL REG_RAX
+#define M_SYSCALL gregs[REG_SYSCALL]
+
+#elif defined(__arm__)
+
+#define M_SYSCALL arm_r7
+
+#endif
+
+/**Determines if at least one sandbox is active.*/
+static int sandbox_active = 0;
+/** Holds the parameter list configuration for the sandbox.*/
+static sandbox_cfg_t *filter_dynamic = NULL;
+/** Holds a list of pre-recorded results from getaddrinfo().*/
+static sb_addr_info_t *sb_addr_info = NULL;
+
+#undef SCMP_CMP
+#define SCMP_CMP(a,b,c) ((struct scmp_arg_cmp){(a),(b),(c),0})
+#define SCMP_CMP4(a,b,c,d) ((struct scmp_arg_cmp){(a),(b),(c),(d)})
+/* We use a wrapper here because these masked comparisons seem to be pretty
+ * verbose. Also, it's important to cast to scmp_datum_t before negating the
+ * mask, since otherwise the negation might get applied to a 32 bit value, and
+ * the high bits of the value might get masked out improperly. */
+#define SCMP_CMP_MASKED(a,b,c) \
+ SCMP_CMP4((a), SCMP_CMP_MASKED_EQ, ~(scmp_datum_t)(b), (c))
+
+/** Variable used for storing all syscall numbers that will be allowed with the
+ * stage 1 general Tor sandbox.
+ */
+static int filter_nopar_gen[] = {
+ SCMP_SYS(access),
+ SCMP_SYS(brk),
+ SCMP_SYS(clock_gettime),
+ SCMP_SYS(close),
+ SCMP_SYS(clone),
+ SCMP_SYS(epoll_create),
+ SCMP_SYS(epoll_wait),
+ SCMP_SYS(fcntl),
+ SCMP_SYS(fstat),
+#ifdef __NR_fstat64
+ SCMP_SYS(fstat64),
+#endif
+ SCMP_SYS(getdents64),
+ SCMP_SYS(getegid),
+#ifdef __NR_getegid32
+ SCMP_SYS(getegid32),
+#endif
+ SCMP_SYS(geteuid),
+#ifdef __NR_geteuid32
+ SCMP_SYS(geteuid32),
+#endif
+ SCMP_SYS(getgid),
+#ifdef __NR_getgid32
+ SCMP_SYS(getgid32),
+#endif
+#ifdef __NR_getrlimit
+ SCMP_SYS(getrlimit),
+#endif
+ SCMP_SYS(gettimeofday),
+ SCMP_SYS(gettid),
+ SCMP_SYS(getuid),
+#ifdef __NR_getuid32
+ SCMP_SYS(getuid32),
+#endif
+ SCMP_SYS(lseek),
+#ifdef __NR__llseek
+ SCMP_SYS(_llseek),
+#endif
+ SCMP_SYS(mkdir),
+ SCMP_SYS(mlockall),
+#ifdef __NR_mmap
+ /* XXXX restrict this in the same ways as mmap2 */
+ SCMP_SYS(mmap),
+#endif
+ SCMP_SYS(munmap),
+ SCMP_SYS(read),
+ SCMP_SYS(rt_sigreturn),
+ SCMP_SYS(sched_getaffinity),
+ SCMP_SYS(set_robust_list),
+#ifdef __NR_sigreturn
+ SCMP_SYS(sigreturn),
+#endif
+ SCMP_SYS(stat),
+ SCMP_SYS(uname),
+ SCMP_SYS(write),
+ SCMP_SYS(writev),
+ SCMP_SYS(exit_group),
+ SCMP_SYS(exit),
+
+ SCMP_SYS(madvise),
+#ifdef __NR_stat64
+ // getaddrinfo uses this..
+ SCMP_SYS(stat64),
+#endif
+
+ /*
+ * These socket syscalls are not required on x86_64 and not supported with
+ * some libseccomp versions (eg: 1.0.1)
+ */
+#if defined(__i386)
+ SCMP_SYS(recv),
+ SCMP_SYS(send),
+#endif
+
+ // socket syscalls
+ SCMP_SYS(bind),
+ SCMP_SYS(listen),
+ SCMP_SYS(connect),
+ SCMP_SYS(getsockname),
+ SCMP_SYS(recvmsg),
+ SCMP_SYS(recvfrom),
+ SCMP_SYS(sendto),
+ SCMP_SYS(unlink)
+};
+
+/* These macros help avoid the error where the number of filters we add on a
+ * single rule don't match the arg_cnt param. */
+#define seccomp_rule_add_0(ctx,act,call) \
+ seccomp_rule_add((ctx),(act),(call),0)
+#define seccomp_rule_add_1(ctx,act,call,f1) \
+ seccomp_rule_add((ctx),(act),(call),1,(f1))
+#define seccomp_rule_add_2(ctx,act,call,f1,f2) \
+ seccomp_rule_add((ctx),(act),(call),2,(f1),(f2))
+#define seccomp_rule_add_3(ctx,act,call,f1,f2,f3) \
+ seccomp_rule_add((ctx),(act),(call),3,(f1),(f2),(f3))
+#define seccomp_rule_add_4(ctx,act,call,f1,f2,f3,f4) \
+ seccomp_rule_add((ctx),(act),(call),4,(f1),(f2),(f3),(f4))
+
+/**
+ * Function responsible for setting up the rt_sigaction syscall for
+ * the seccomp filter sandbox.
+ */
+static int
+sb_rt_sigaction(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+{
+ unsigned i;
+ int rc;
+ int param[] = { SIGINT, SIGTERM, SIGPIPE, SIGUSR1, SIGUSR2, SIGHUP, SIGCHLD,
+#ifdef SIGXFSZ
+ SIGXFSZ
+#endif
+ };
+ (void) filter;
+
+ for (i = 0; i < ARRAY_LENGTH(param); i++) {
+ rc = seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(rt_sigaction),
+ SCMP_CMP(0, SCMP_CMP_EQ, param[i]));
+ if (rc)
+ break;
+ }
+
+ return rc;
+}
+
+#if 0
+/**
+ * Function responsible for setting up the execve syscall for
+ * the seccomp filter sandbox.
+ */
+static int
+sb_execve(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+{
+ int rc;
+ sandbox_cfg_t *elem = NULL;
+
+ // for each dynamic parameter filters
+ for (elem = filter; elem != NULL; elem = elem->next) {
+ smp_param_t *param = elem->param;
+
+ if (param != NULL && param->prot == 1 && param->syscall
+ == SCMP_SYS(execve)) {
+ rc = seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(execve),
+ SCMP_CMP(0, SCMP_CMP_EQ, param->value));
+ if (rc != 0) {
+ log_err(LD_BUG,"(Sandbox) failed to add execve syscall, received "
+ "libseccomp error %d", rc);
+ return rc;
+ }
+ }
+ }
+
+ return 0;
+}
+#endif
+
+/**
+ * Function responsible for setting up the time syscall for
+ * the seccomp filter sandbox.
+ */
+static int
+sb_time(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+{
+ (void) filter;
+#ifdef __NR_time
+ return seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(time),
+ SCMP_CMP(0, SCMP_CMP_EQ, 0));
+#else
+ return 0;
+#endif
+}
+
+/**
+ * Function responsible for setting up the accept4 syscall for
+ * the seccomp filter sandbox.
+ */
+static int
+sb_accept4(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+{
+ int rc = 0;
+ (void)filter;
+
+#ifdef __i386__
+ rc = seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(socketcall),
+ SCMP_CMP(0, SCMP_CMP_EQ, 18));
+ if (rc) {
+ return rc;
+ }
+#endif
+
+ rc = seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(accept4),
+ SCMP_CMP_MASKED(3, SOCK_CLOEXEC|SOCK_NONBLOCK, 0));
+ if (rc) {
+ return rc;
+ }
+
+ return 0;
+}
+
+#ifdef __NR_mmap2
+/**
+ * Function responsible for setting up the mmap2 syscall for
+ * the seccomp filter sandbox.
+ */
+static int
+sb_mmap2(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+{
+ int rc = 0;
+ (void)filter;
+
+ rc = seccomp_rule_add_2(ctx, SCMP_ACT_ALLOW, SCMP_SYS(mmap2),
+ SCMP_CMP(2, SCMP_CMP_EQ, PROT_READ),
+ SCMP_CMP(3, SCMP_CMP_EQ, MAP_PRIVATE));
+ if (rc) {
+ return rc;
+ }
+
+ rc = seccomp_rule_add_2(ctx, SCMP_ACT_ALLOW, SCMP_SYS(mmap2),
+ SCMP_CMP(2, SCMP_CMP_EQ, PROT_NONE),
+ SCMP_CMP(3, SCMP_CMP_EQ, MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE));
+ if (rc) {
+ return rc;
+ }
+
+ rc = seccomp_rule_add_2(ctx, SCMP_ACT_ALLOW, SCMP_SYS(mmap2),
+ SCMP_CMP(2, SCMP_CMP_EQ, PROT_READ|PROT_WRITE),
+ SCMP_CMP(3, SCMP_CMP_EQ, MAP_PRIVATE|MAP_ANONYMOUS));
+ if (rc) {
+ return rc;
+ }
+
+ rc = seccomp_rule_add_2(ctx, SCMP_ACT_ALLOW, SCMP_SYS(mmap2),
+ SCMP_CMP(2, SCMP_CMP_EQ, PROT_READ|PROT_WRITE),
+ SCMP_CMP(3, SCMP_CMP_EQ,MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK));
+ if (rc) {
+ return rc;
+ }
+
+ rc = seccomp_rule_add_2(ctx, SCMP_ACT_ALLOW, SCMP_SYS(mmap2),
+ SCMP_CMP(2, SCMP_CMP_EQ, PROT_READ|PROT_WRITE),
+ SCMP_CMP(3, SCMP_CMP_EQ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE));
+ if (rc) {
+ return rc;
+ }
+
+ rc = seccomp_rule_add_2(ctx, SCMP_ACT_ALLOW, SCMP_SYS(mmap2),
+ SCMP_CMP(2, SCMP_CMP_EQ, PROT_READ|PROT_WRITE),
+ SCMP_CMP(3, SCMP_CMP_EQ, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS));
+ if (rc) {
+ return rc;
+ }
+
+ rc = seccomp_rule_add_2(ctx, SCMP_ACT_ALLOW, SCMP_SYS(mmap2),
+ SCMP_CMP(2, SCMP_CMP_EQ, PROT_READ|PROT_EXEC),
+ SCMP_CMP(3, SCMP_CMP_EQ, MAP_PRIVATE|MAP_DENYWRITE));
+ if (rc) {
+ return rc;
+ }
+
+ return 0;
+}
+#endif
+
+/**
+ * Function responsible for setting up the open syscall for
+ * the seccomp filter sandbox.
+ */
+static int
+sb_open(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+{
+ int rc;
+ sandbox_cfg_t *elem = NULL;
+
+ // for each dynamic parameter filters
+ for (elem = filter; elem != NULL; elem = elem->next) {
+ smp_param_t *param = elem->param;
+
+ if (param != NULL && param->prot == 1 && param->syscall
+ == SCMP_SYS(open)) {
+ rc = seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(open),
+ SCMP_CMP(0, SCMP_CMP_EQ, param->value));
+ if (rc != 0) {
+ log_err(LD_BUG,"(Sandbox) failed to add open syscall, received "
+ "libseccomp error %d", rc);
+ return rc;
+ }
+ }
+ }
+
+ rc = seccomp_rule_add_1(ctx, SCMP_ACT_ERRNO(EACCES), SCMP_SYS(open),
+ SCMP_CMP_MASKED(1, O_CLOEXEC|O_NONBLOCK|O_NOCTTY, O_RDONLY));
+ if (rc != 0) {
+ log_err(LD_BUG,"(Sandbox) failed to add open syscall, received libseccomp "
+ "error %d", rc);
+ return rc;
+ }
+
+ return 0;
+}
+
+static int
+sb__sysctl(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+{
+ int rc;
+ (void) filter;
+ (void) ctx;
+
+ rc = seccomp_rule_add_0(ctx, SCMP_ACT_ERRNO(EPERM), SCMP_SYS(_sysctl));
+ if (rc != 0) {
+ log_err(LD_BUG,"(Sandbox) failed to add _sysctl syscall, "
+ "received libseccomp error %d", rc);
+ return rc;
+ }
+
+ return 0;
+}
+
+/**
+ * Function responsible for setting up the rename syscall for
+ * the seccomp filter sandbox.
+ */
+static int
+sb_rename(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+{
+ int rc;
+ sandbox_cfg_t *elem = NULL;
+
+ // for each dynamic parameter filters
+ for (elem = filter; elem != NULL; elem = elem->next) {
+ smp_param_t *param = elem->param;
+
+ if (param != NULL && param->prot == 1 &&
+ param->syscall == SCMP_SYS(rename)) {
+
+ rc = seccomp_rule_add_2(ctx, SCMP_ACT_ALLOW, SCMP_SYS(rename),
+ SCMP_CMP(0, SCMP_CMP_EQ, param->value),
+ SCMP_CMP(1, SCMP_CMP_EQ, param->value2));
+ if (rc != 0) {
+ log_err(LD_BUG,"(Sandbox) failed to add rename syscall, received "
+ "libseccomp error %d", rc);
+ return rc;
+ }
+ }
+ }
+
+ return 0;
+}
+
+/**
+ * Function responsible for setting up the openat syscall for
+ * the seccomp filter sandbox.
+ */
+static int
+sb_openat(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+{
+ int rc;
+ sandbox_cfg_t *elem = NULL;
+
+ // for each dynamic parameter filters
+ for (elem = filter; elem != NULL; elem = elem->next) {
+ smp_param_t *param = elem->param;
+
+ if (param != NULL && param->prot == 1 && param->syscall
+ == SCMP_SYS(openat)) {
+ rc = seccomp_rule_add_3(ctx, SCMP_ACT_ALLOW, SCMP_SYS(openat),
+ SCMP_CMP(0, SCMP_CMP_EQ, AT_FDCWD),
+ SCMP_CMP(1, SCMP_CMP_EQ, param->value),
+ SCMP_CMP(2, SCMP_CMP_EQ, O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|
+ O_CLOEXEC));
+ if (rc != 0) {
+ log_err(LD_BUG,"(Sandbox) failed to add openat syscall, received "
+ "libseccomp error %d", rc);
+ return rc;
+ }
+ }
+ }
+
+ return 0;
+}
+
+/**
+ * Function responsible for setting up the socket syscall for
+ * the seccomp filter sandbox.
+ */
+static int
+sb_socket(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+{
+ int rc = 0;
+ int i;
+ (void) filter;
+
+#ifdef __i386__
+ rc = seccomp_rule_add_0(ctx, SCMP_ACT_ALLOW, SCMP_SYS(socket));
+ if (rc)
+ return rc;
+#endif
+
+ rc = seccomp_rule_add_2(ctx, SCMP_ACT_ALLOW, SCMP_SYS(socket),
+ SCMP_CMP(0, SCMP_CMP_EQ, PF_FILE),
+ SCMP_CMP_MASKED(1, SOCK_CLOEXEC|SOCK_NONBLOCK, SOCK_STREAM));
+ if (rc)
+ return rc;
+
+ for (i = 0; i < 2; ++i) {
+ const int pf = i ? PF_INET : PF_INET6;
+
+ rc = seccomp_rule_add_3(ctx, SCMP_ACT_ALLOW, SCMP_SYS(socket),
+ SCMP_CMP(0, SCMP_CMP_EQ, pf),
+ SCMP_CMP_MASKED(1, SOCK_CLOEXEC|SOCK_NONBLOCK, SOCK_STREAM),
+ SCMP_CMP(2, SCMP_CMP_EQ, IPPROTO_TCP));
+ if (rc)
+ return rc;
+
+ rc = seccomp_rule_add_3(ctx, SCMP_ACT_ALLOW, SCMP_SYS(socket),
+ SCMP_CMP(0, SCMP_CMP_EQ, pf),
+ SCMP_CMP_MASKED(1, SOCK_CLOEXEC|SOCK_NONBLOCK, SOCK_DGRAM),
+ SCMP_CMP(2, SCMP_CMP_EQ, IPPROTO_IP));
+ if (rc)
+ return rc;
+ }
+
+ rc = seccomp_rule_add_3(ctx, SCMP_ACT_ALLOW, SCMP_SYS(socket),
+ SCMP_CMP(0, SCMP_CMP_EQ, PF_NETLINK),
+ SCMP_CMP(1, SCMP_CMP_EQ, SOCK_RAW),
+ SCMP_CMP(2, SCMP_CMP_EQ, 0));
+ if (rc)
+ return rc;
+
+ return 0;
+}
+
+/**
+ * Function responsible for setting up the socketpair syscall for
+ * the seccomp filter sandbox.
+ */
+static int
+sb_socketpair(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+{
+ int rc = 0;
+ (void) filter;
+
+#ifdef __i386__
+ rc = seccomp_rule_add_0(ctx, SCMP_ACT_ALLOW, SCMP_SYS(socketpair));
+ if (rc)
+ return rc;
+#endif
+
+ rc = seccomp_rule_add_2(ctx, SCMP_ACT_ALLOW, SCMP_SYS(socketpair),
+ SCMP_CMP(0, SCMP_CMP_EQ, PF_FILE),
+ SCMP_CMP(1, SCMP_CMP_EQ, SOCK_STREAM|SOCK_CLOEXEC));
+ if (rc)
+ return rc;
+
+ return 0;
+}
+
+/**
+ * Function responsible for setting up the setsockopt syscall for
+ * the seccomp filter sandbox.
+ */
+static int
+sb_setsockopt(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+{
+ int rc = 0;
+ (void) filter;
+
+#ifdef __i386__
+ rc = seccomp_rule_add_0(ctx, SCMP_ACT_ALLOW, SCMP_SYS(setsockopt));
+ if (rc)
+ return rc;
+#endif
+
+ rc = seccomp_rule_add_2(ctx, SCMP_ACT_ALLOW, SCMP_SYS(setsockopt),
+ SCMP_CMP(1, SCMP_CMP_EQ, SOL_SOCKET),
+ SCMP_CMP(2, SCMP_CMP_EQ, SO_REUSEADDR));
+ if (rc)
+ return rc;
+
+ rc = seccomp_rule_add_2(ctx, SCMP_ACT_ALLOW, SCMP_SYS(setsockopt),
+ SCMP_CMP(1, SCMP_CMP_EQ, SOL_SOCKET),
+ SCMP_CMP(2, SCMP_CMP_EQ, SO_SNDBUF));
+ if (rc)
+ return rc;
+
+ rc = seccomp_rule_add_2(ctx, SCMP_ACT_ALLOW, SCMP_SYS(setsockopt),
+ SCMP_CMP(1, SCMP_CMP_EQ, SOL_SOCKET),
+ SCMP_CMP(2, SCMP_CMP_EQ, SO_RCVBUF));
+ if (rc)
+ return rc;
+
+#ifdef IP_TRANSPARENT
+ rc = seccomp_rule_add_2(ctx, SCMP_ACT_ALLOW, SCMP_SYS(setsockopt),
+ SCMP_CMP(1, SCMP_CMP_EQ, SOL_IP),
+ SCMP_CMP(2, SCMP_CMP_EQ, IP_TRANSPARENT));
+ if (rc)
+ return rc;
+#endif
+
+ return 0;
+}
+
+/**
+ * Function responsible for setting up the getsockopt syscall for
+ * the seccomp filter sandbox.
+ */
+static int
+sb_getsockopt(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+{
+ int rc = 0;
+ (void) filter;
+
+#ifdef __i386__
+ rc = seccomp_rule_add_0(ctx, SCMP_ACT_ALLOW, SCMP_SYS(getsockopt));
+ if (rc)
+ return rc;
+#endif
+
+ rc = seccomp_rule_add_2(ctx, SCMP_ACT_ALLOW, SCMP_SYS(getsockopt),
+ SCMP_CMP(1, SCMP_CMP_EQ, SOL_SOCKET),
+ SCMP_CMP(2, SCMP_CMP_EQ, SO_ERROR));
+ if (rc)
+ return rc;
+
+ return 0;
+}
+
+#ifdef __NR_fcntl64
+/**
+ * Function responsible for setting up the fcntl64 syscall for
+ * the seccomp filter sandbox.
+ */
+static int
+sb_fcntl64(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+{
+ int rc = 0;
+ (void) filter;
+
+ rc = seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(fcntl64),
+ SCMP_CMP(1, SCMP_CMP_EQ, F_GETFL));
+ if (rc)
+ return rc;
+
+ rc = seccomp_rule_add_2(ctx, SCMP_ACT_ALLOW, SCMP_SYS(fcntl64),
+ SCMP_CMP(1, SCMP_CMP_EQ, F_SETFL),
+ SCMP_CMP(2, SCMP_CMP_EQ, O_RDWR|O_NONBLOCK));
+ if (rc)
+ return rc;
+
+ rc = seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(fcntl64),
+ SCMP_CMP(1, SCMP_CMP_EQ, F_GETFD));
+ if (rc)
+ return rc;
+
+ rc = seccomp_rule_add_2(ctx, SCMP_ACT_ALLOW, SCMP_SYS(fcntl64),
+ SCMP_CMP(1, SCMP_CMP_EQ, F_SETFD),
+ SCMP_CMP(2, SCMP_CMP_EQ, FD_CLOEXEC));
+ if (rc)
+ return rc;
+
+ return 0;
+}
+#endif
+
+/**
+ * Function responsible for setting up the epoll_ctl syscall for
+ * the seccomp filter sandbox.
+ *
+ * Note: basically allows everything but will keep for now..
+ */
+static int
+sb_epoll_ctl(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+{
+ int rc = 0;
+ (void) filter;
+
+ rc = seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(epoll_ctl),
+ SCMP_CMP(1, SCMP_CMP_EQ, EPOLL_CTL_ADD));
+ if (rc)
+ return rc;
+
+ rc = seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(epoll_ctl),
+ SCMP_CMP(1, SCMP_CMP_EQ, EPOLL_CTL_MOD));
+ if (rc)
+ return rc;
+
+ rc = seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(epoll_ctl),
+ SCMP_CMP(1, SCMP_CMP_EQ, EPOLL_CTL_DEL));
+ if (rc)
+ return rc;
+
+ return 0;
+}
+
+/**
+ * Function responsible for setting up the fcntl64 syscall for
+ * the seccomp filter sandbox.
+ *
+ * NOTE: if multiple filters need to be added, the PR_SECCOMP parameter needs
+ * to be whitelisted in this function.
+ */
+static int
+sb_prctl(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+{
+ int rc = 0;
+ (void) filter;
+
+ rc = seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(prctl),
+ SCMP_CMP(0, SCMP_CMP_EQ, PR_SET_DUMPABLE));
+ if (rc)
+ return rc;
+
+ return 0;
+}
+
+/**
+ * Function responsible for setting up the fcntl64 syscall for
+ * the seccomp filter sandbox.
+ *
+ * NOTE: does not NEED to be here.. currently only occurs before filter; will
+ * keep just in case for the future.
+ */
+static int
+sb_mprotect(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+{
+ int rc = 0;
+ (void) filter;
+
+ rc = seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(mprotect),
+ SCMP_CMP(2, SCMP_CMP_EQ, PROT_READ));
+ if (rc)
+ return rc;
+
+ rc = seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(mprotect),
+ SCMP_CMP(2, SCMP_CMP_EQ, PROT_NONE));
+ if (rc)
+ return rc;
+
+ return 0;
+}
+
+/**
+ * Function responsible for setting up the rt_sigprocmask syscall for
+ * the seccomp filter sandbox.
+ */
+static int
+sb_rt_sigprocmask(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+{
+ int rc = 0;
+ (void) filter;
+
+ rc = seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(rt_sigprocmask),
+ SCMP_CMP(0, SCMP_CMP_EQ, SIG_UNBLOCK));
+ if (rc)
+ return rc;
+
+ rc = seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(rt_sigprocmask),
+ SCMP_CMP(0, SCMP_CMP_EQ, SIG_SETMASK));
+ if (rc)
+ return rc;
+
+ return 0;
+}
+
+/**
+ * Function responsible for setting up the flock syscall for
+ * the seccomp filter sandbox.
+ *
+ * NOTE: does not need to be here, occurs before filter is applied.
+ */
+static int
+sb_flock(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+{
+ int rc = 0;
+ (void) filter;
+
+ rc = seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(flock),
+ SCMP_CMP(1, SCMP_CMP_EQ, LOCK_EX|LOCK_NB));
+ if (rc)
+ return rc;
+
+ rc = seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(flock),
+ SCMP_CMP(1, SCMP_CMP_EQ, LOCK_UN));
+ if (rc)
+ return rc;
+
+ return 0;
+}
+
+/**
+ * Function responsible for setting up the futex syscall for
+ * the seccomp filter sandbox.
+ */
+static int
+sb_futex(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+{
+ int rc = 0;
+ (void) filter;
+
+ // can remove
+ rc = seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(futex),
+ SCMP_CMP(1, SCMP_CMP_EQ,
+ FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME));
+ if (rc)
+ return rc;
+
+ rc = seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(futex),
+ SCMP_CMP(1, SCMP_CMP_EQ, FUTEX_WAKE_PRIVATE));
+ if (rc)
+ return rc;
+
+ rc = seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(futex),
+ SCMP_CMP(1, SCMP_CMP_EQ, FUTEX_WAIT_PRIVATE));
+ if (rc)
+ return rc;
+
+ return 0;
+}
+
+/**
+ * Function responsible for setting up the mremap syscall for
+ * the seccomp filter sandbox.
+ *
+ * NOTE: so far only occurs before filter is applied.
+ */
+static int
+sb_mremap(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+{
+ int rc = 0;
+ (void) filter;
+
+ rc = seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(mremap),
+ SCMP_CMP(3, SCMP_CMP_EQ, MREMAP_MAYMOVE));
+ if (rc)
+ return rc;
+
+ return 0;
+}
+
+/**
+ * Function responsible for setting up the poll syscall for
+ * the seccomp filter sandbox.
+ */
+static int
+sb_poll(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+{
+ int rc = 0;
+ (void) filter;
+
+ rc = seccomp_rule_add_2(ctx, SCMP_ACT_ALLOW, SCMP_SYS(poll),
+ SCMP_CMP(1, SCMP_CMP_EQ, 1),
+ SCMP_CMP(2, SCMP_CMP_EQ, 10));
+ if (rc)
+ return rc;
+
+ return 0;
+}
+
+#ifdef __NR_stat64
+/**
+ * Function responsible for setting up the stat64 syscall for
+ * the seccomp filter sandbox.
+ */
+static int
+sb_stat64(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+{
+ int rc = 0;
+ sandbox_cfg_t *elem = NULL;
+
+ // for each dynamic parameter filters
+ for (elem = filter; elem != NULL; elem = elem->next) {
+ smp_param_t *param = elem->param;
+
+ if (param != NULL && param->prot == 1 && (param->syscall == SCMP_SYS(open)
+ || param->syscall == SCMP_SYS(stat64))) {
+ rc = seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(stat64),
+ SCMP_CMP(0, SCMP_CMP_EQ, param->value));
+ if (rc != 0) {
+ log_err(LD_BUG,"(Sandbox) failed to add open syscall, received "
+ "libseccomp error %d", rc);
+ return rc;
+ }
+ }
+ }
+
+ return 0;
+}
+#endif
+
+/**
+ * Array of function pointers responsible for filtering different syscalls at
+ * a parameter level.
+ */
+static sandbox_filter_func_t filter_func[] = {
+ sb_rt_sigaction,
+ sb_rt_sigprocmask,
+#if 0
+ sb_execve,
+#endif
+ sb_time,
+ sb_accept4,
+#ifdef __NR_mmap2
+ sb_mmap2,
+#endif
+ sb_open,
+ sb_openat,
+ sb__sysctl,
+ sb_rename,
+#ifdef __NR_fcntl64
+ sb_fcntl64,
+#endif
+ sb_epoll_ctl,
+ sb_prctl,
+ sb_mprotect,
+ sb_flock,
+ sb_futex,
+ sb_mremap,
+ sb_poll,
+#ifdef __NR_stat64
+ sb_stat64,
+#endif
+
+ sb_socket,
+ sb_setsockopt,
+ sb_getsockopt,
+ sb_socketpair
+};
+
+const char *
+sandbox_intern_string(const char *str)
+{
+ sandbox_cfg_t *elem;
+
+ if (str == NULL)
+ return NULL;
+
+ for (elem = filter_dynamic; elem != NULL; elem = elem->next) {
+ smp_param_t *param = elem->param;
+
+ if (param->prot) {
+ if (!strcmp(str, (char*)(param->value))) {
+ return (char*)param->value;
+ }
+ if (param->value2 && !strcmp(str, (char*)param->value2)) {
+ return (char*)param->value2;
+ }
+ }
+ }
+
+ if (sandbox_active)
+ log_warn(LD_BUG, "No interned sandbox parameter found for %s", str);
+ return str;
+}
+
+/** DOCDOC */
+static int
+prot_strings_helper(strmap_t *locations,
+ char **pr_mem_next_p,
+ size_t *pr_mem_left_p,
+ intptr_t *value_p)
+{
+ char *param_val;
+ size_t param_size;
+ void *location;
+
+ if (*value_p == 0)
+ return 0;
+
+ param_val = (char*) *value_p;
+ param_size = strlen(param_val) + 1;
+ location = strmap_get(locations, param_val);
+
+ if (location) {
+ // We already interned this string.
+ tor_free(param_val);
+ *value_p = (intptr_t) location;
+ return 0;
+ } else if (*pr_mem_left_p >= param_size) {
+ // copy to protected
+ location = *pr_mem_next_p;
+ memcpy(location, param_val, param_size);
+
+ // re-point el parameter to protected
+ tor_free(param_val);
+ *value_p = (intptr_t) location;
+
+ strmap_set(locations, location, location); /* good real estate advice */
+
+ // move next available protected memory
+ *pr_mem_next_p += param_size;
+ *pr_mem_left_p -= param_size;
+ return 0;
+ } else {
+ log_err(LD_BUG,"(Sandbox) insufficient protected memory!");
+ return -1;
+ }
+}
+
+/**
+ * Protects all the strings in the sandbox's parameter list configuration. It
+ * works by calculating the total amount of memory required by the parameter
+ * list, allocating the memory using mmap, and protecting it from writes with
+ * mprotect().
+ */
+static int
+prot_strings(scmp_filter_ctx ctx, sandbox_cfg_t* cfg)
+{
+ int ret = 0;
+ size_t pr_mem_size = 0, pr_mem_left = 0;
+ char *pr_mem_next = NULL, *pr_mem_base;
+ sandbox_cfg_t *el = NULL;
+ strmap_t *locations = NULL;
+
+ // get total number of bytes required to mmap. (Overestimate.)
+ for (el = cfg; el != NULL; el = el->next) {
+ pr_mem_size += strlen((char*) el->param->value) + 1;
+ if (el->param->value2)
+ pr_mem_size += strlen((char*) el->param->value2) + 1;
+ }
+
+ // allocate protected memory with MALLOC_MP_LIM canary
+ pr_mem_base = (char*) mmap(NULL, MALLOC_MP_LIM + pr_mem_size,
+ PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0);
+ if (pr_mem_base == MAP_FAILED) {
+ log_err(LD_BUG,"(Sandbox) failed allocate protected memory! mmap: %s",
+ strerror(errno));
+ ret = -1;
+ goto out;
+ }
+
+ pr_mem_next = pr_mem_base + MALLOC_MP_LIM;
+ pr_mem_left = pr_mem_size;
+
+ locations = strmap_new();
+
+ // change el value pointer to protected
+ for (el = cfg; el != NULL; el = el->next) {
+ if (prot_strings_helper(locations, &pr_mem_next, &pr_mem_left,
+ &el->param->value) < 0) {
+ ret = -2;
+ goto out;
+ }
+ if (prot_strings_helper(locations, &pr_mem_next, &pr_mem_left,
+ &el->param->value2) < 0) {
+ ret = -2;
+ goto out;
+ }
+ el->param->prot = 1;
+ }
+
+ // protecting from writes
+ if (mprotect(pr_mem_base, MALLOC_MP_LIM + pr_mem_size, PROT_READ)) {
+ log_err(LD_BUG,"(Sandbox) failed to protect memory! mprotect: %s",
+ strerror(errno));
+ ret = -3;
+ goto out;
+ }
+
+ /*
+ * Setting sandbox restrictions so the string memory cannot be tampered with
+ */
+ // no mremap of the protected base address
+ ret = seccomp_rule_add_1(ctx, SCMP_ACT_KILL, SCMP_SYS(mremap),
+ SCMP_CMP(0, SCMP_CMP_EQ, (intptr_t) pr_mem_base));
+ if (ret) {
+ log_err(LD_BUG,"(Sandbox) mremap protected memory filter fail!");
+ return ret;
+ }
+
+ // no munmap of the protected base address
+ ret = seccomp_rule_add_1(ctx, SCMP_ACT_KILL, SCMP_SYS(munmap),
+ SCMP_CMP(0, SCMP_CMP_EQ, (intptr_t) pr_mem_base));
+ if (ret) {
+ log_err(LD_BUG,"(Sandbox) munmap protected memory filter fail!");
+ return ret;
+ }
+
+ /*
+ * Allow mprotect with PROT_READ|PROT_WRITE because openssl uses it, but
+ * never over the memory region used by the protected strings.
+ *
+ * PROT_READ|PROT_WRITE was originally fully allowed in sb_mprotect(), but
+ * had to be removed due to limitation of libseccomp regarding intervals.
+ *
+ * There is a restriction on how much you can mprotect with R|W up to the
+ * size of the canary.
+ */
+ ret = seccomp_rule_add_3(ctx, SCMP_ACT_ALLOW, SCMP_SYS(mprotect),
+ SCMP_CMP(0, SCMP_CMP_LT, (intptr_t) pr_mem_base),
+ SCMP_CMP(1, SCMP_CMP_LE, MALLOC_MP_LIM),
+ SCMP_CMP(2, SCMP_CMP_EQ, PROT_READ|PROT_WRITE));
+ if (ret) {
+ log_err(LD_BUG,"(Sandbox) mprotect protected memory filter fail (LT)!");
+ return ret;
+ }
+
+ ret = seccomp_rule_add_3(ctx, SCMP_ACT_ALLOW, SCMP_SYS(mprotect),
+ SCMP_CMP(0, SCMP_CMP_GT, (intptr_t) pr_mem_base + pr_mem_size +
+ MALLOC_MP_LIM),
+ SCMP_CMP(1, SCMP_CMP_LE, MALLOC_MP_LIM),
+ SCMP_CMP(2, SCMP_CMP_EQ, PROT_READ|PROT_WRITE));
+ if (ret) {
+ log_err(LD_BUG,"(Sandbox) mprotect protected memory filter fail (GT)!");
+ return ret;
+ }
+
+ out:
+ strmap_free(locations, NULL);
+ return ret;
+}
+
+/**
+ * Auxiliary function used in order to allocate a sandbox_cfg_t element and set
+ * it's values according the the parameter list. All elements are initialised
+ * with the 'prot' field set to false, as the pointer is not protected at this
+ * point.
+ */
+static sandbox_cfg_t*
+new_element2(int syscall, intptr_t value, intptr_t value2)
+{
+ smp_param_t *param = NULL;
+
+ sandbox_cfg_t *elem = tor_malloc_zero(sizeof(sandbox_cfg_t));
+ param = elem->param = tor_malloc_zero(sizeof(smp_param_t));
+
+ param->syscall = syscall;
+ param->value = value;
+ param->value2 = value2;
+ param->prot = 0;
+
+ return elem;
+}
+
+static sandbox_cfg_t*
+new_element(int syscall, intptr_t value)
+{
+ return new_element2(syscall, value, 0);
+}
+
+#ifdef __NR_stat64
+#define SCMP_stat SCMP_SYS(stat64)
+#else
+#define SCMP_stat SCMP_SYS(stat)
+#endif
+
+int
+sandbox_cfg_allow_stat_filename(sandbox_cfg_t **cfg, char *file)
+{
+ sandbox_cfg_t *elem = NULL;
+
+ elem = new_element(SCMP_stat, (intptr_t)(void*) file);
+ if (!elem) {
+ log_err(LD_BUG,"(Sandbox) failed to register parameter!");
+ return -1;
+ }
+
+ elem->next = *cfg;
+ *cfg = elem;
+
+ return 0;
+}
+
+int
+sandbox_cfg_allow_stat_filename_array(sandbox_cfg_t **cfg, ...)
+{
+ int rc = 0;
+ char *fn = NULL;
+
+ va_list ap;
+ va_start(ap, cfg);
+
+ while ((fn = va_arg(ap, char*)) != NULL) {
+ rc = sandbox_cfg_allow_stat_filename(cfg, fn);
+ if (rc) {
+ log_err(LD_BUG,"(Sandbox) sandbox_cfg_allow_stat_filename_array fail");
+ goto end;
+ }
+ }
+
+ end:
+ va_end(ap);
+ return 0;
+}
+
+int
+sandbox_cfg_allow_open_filename(sandbox_cfg_t **cfg, char *file)
+{
+ sandbox_cfg_t *elem = NULL;
+
+ elem = new_element(SCMP_SYS(open), (intptr_t)(void *) file);
+ if (!elem) {
+ log_err(LD_BUG,"(Sandbox) failed to register parameter!");
+ return -1;
+ }
+
+ elem->next = *cfg;
+ *cfg = elem;
+
+ return 0;
+}
+
+int
+sandbox_cfg_allow_rename(sandbox_cfg_t **cfg, char *file1, char *file2)
+{
+ sandbox_cfg_t *elem = NULL;
+
+ elem = new_element2(SCMP_SYS(rename),
+ (intptr_t)(void *) file1,
+ (intptr_t)(void *) file2);
+
+ if (!elem) {
+ log_err(LD_BUG,"(Sandbox) failed to register parameter!");
+ return -1;
+ }
+
+ elem->next = *cfg;
+ *cfg = elem;
+
+ return 0;
+}
+
+int
+sandbox_cfg_allow_open_filename_array(sandbox_cfg_t **cfg, ...)
+{
+ int rc = 0;
+ char *fn = NULL;
+
+ va_list ap;
+ va_start(ap, cfg);
+
+ while ((fn = va_arg(ap, char*)) != NULL) {
+ rc = sandbox_cfg_allow_open_filename(cfg, fn);
+ if (rc) {
+ log_err(LD_BUG,"(Sandbox) sandbox_cfg_allow_open_filename_array fail");
+ goto end;
+ }
+ }
+
+ end:
+ va_end(ap);
+ return 0;
+}
+
+int
+sandbox_cfg_allow_openat_filename(sandbox_cfg_t **cfg, char *file)
+{
+ sandbox_cfg_t *elem = NULL;
+
+ elem = new_element(SCMP_SYS(openat), (intptr_t)(void *) file);
+ if (!elem) {
+ log_err(LD_BUG,"(Sandbox) failed to register parameter!");
+ return -1;
+ }
+
+ elem->next = *cfg;
+ *cfg = elem;
+
+ return 0;
+}
+
+int
+sandbox_cfg_allow_openat_filename_array(sandbox_cfg_t **cfg, ...)
+{
+ int rc = 0;
+ char *fn = NULL;
+
+ va_list ap;
+ va_start(ap, cfg);
+
+ while ((fn = va_arg(ap, char*)) != NULL) {
+ rc = sandbox_cfg_allow_openat_filename(cfg, fn);
+ if (rc) {
+ log_err(LD_BUG,"(Sandbox) sandbox_cfg_allow_openat_filename_array fail");
+ goto end;
+ }
+ }
+
+ end:
+ va_end(ap);
+ return 0;
+}
+
+#if 0
+int
+sandbox_cfg_allow_execve(sandbox_cfg_t **cfg, const char *com)
+{
+ sandbox_cfg_t *elem = NULL;
+
+ elem = new_element(SCMP_SYS(execve), (intptr_t)(void *) com);
+ if (!elem) {
+ log_err(LD_BUG,"(Sandbox) failed to register parameter!");
+ return -1;
+ }
+
+ elem->next = *cfg;
+ *cfg = elem;
+
+ return 0;
+}
+
+int
+sandbox_cfg_allow_execve_array(sandbox_cfg_t **cfg, ...)
+{
+ int rc = 0;
+ char *fn = NULL;
+
+ va_list ap;
+ va_start(ap, cfg);
+
+ while ((fn = va_arg(ap, char*)) != NULL) {
+
+ rc = sandbox_cfg_allow_execve(cfg, fn);
+ if (rc) {
+ log_err(LD_BUG,"(Sandbox) sandbox_cfg_allow_execve_array failed");
+ goto end;
+ }
+ }
+
+ end:
+ va_end(ap);
+ return 0;
+}
+#endif
+
+int
+sandbox_getaddrinfo(const char *name, const char *servname,
+ const struct addrinfo *hints,
+ struct addrinfo **res)
+{
+ sb_addr_info_t *el;
+
+ if (servname != NULL)
+ return -1;
+
+ *res = NULL;
+
+ for (el = sb_addr_info; el; el = el->next) {
+ if (!strcmp(el->name, name)) {
+ *res = tor_malloc(sizeof(struct addrinfo));
+
+ memcpy(*res, el->info, sizeof(struct addrinfo));
+ /* XXXX What if there are multiple items in the list? */
+ return 0;
+ }
+ }
+
+ if (!sandbox_active) {
+ if (getaddrinfo(name, NULL, hints, res)) {
+ log_err(LD_BUG,"(Sandbox) getaddrinfo failed!");
+ return -1;
+ }
+
+ return 0;
+ }
+
+ // getting here means something went wrong
+ log_err(LD_BUG,"(Sandbox) failed to get address %s!", name);
+ if (*res) {
+ tor_free(*res);
+ res = NULL;
+ }
+ return -1;
+}
+
+int
+sandbox_add_addrinfo(const char* name)
+{
+ int ret;
+ struct addrinfo hints;
+ sb_addr_info_t *el = NULL;
+
+ el = tor_malloc(sizeof(sb_addr_info_t));
+
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_family = AF_INET;
+ hints.ai_socktype = SOCK_STREAM;
+
+ ret = getaddrinfo(name, NULL, &hints, &(el->info));
+ if (ret) {
+ log_err(LD_BUG,"(Sandbox) failed to getaddrinfo");
+ ret = -2;
+ tor_free(el);
+ goto out;
+ }
+
+ el->name = tor_strdup(name);
+ el->next = sb_addr_info;
+ sb_addr_info = el;
+
+ out:
+ return ret;
+}
+
+/**
+ * Function responsible for going through the parameter syscall filters and
+ * call each function pointer in the list.
+ */
+static int
+add_param_filter(scmp_filter_ctx ctx, sandbox_cfg_t* cfg)
+{
+ unsigned i;
+ int rc = 0;
+
+ // function pointer
+ for (i = 0; i < ARRAY_LENGTH(filter_func); i++) {
+ if ((filter_func[i])(ctx, cfg)) {
+ log_err(LD_BUG,"(Sandbox) failed to add syscall %d, received libseccomp "
+ "error %d", i, rc);
+ return rc;
+ }
+ }
+
+ return 0;
+}
+
+/**
+ * Function responsible of loading the libseccomp syscall filters which do not
+ * have parameter filtering.
+ */
+static int
+add_noparam_filter(scmp_filter_ctx ctx)
+{
+ unsigned i;
+ int rc = 0;
+
+ // add general filters
+ for (i = 0; i < ARRAY_LENGTH(filter_nopar_gen); i++) {
+ rc = seccomp_rule_add_0(ctx, SCMP_ACT_ALLOW, filter_nopar_gen[i]);
+ if (rc != 0) {
+ log_err(LD_BUG,"(Sandbox) failed to add syscall index %d (NR=%d), "
+ "received libseccomp error %d", i, filter_nopar_gen[i], rc);
+ return rc;
+ }
+ }
+
+ return 0;
+}
+
+/**
+ * Function responsible for setting up and enabling a global syscall filter.
+ * The function is a prototype developed for stage 1 of sandboxing Tor.
+ * Returns 0 on success.
+ */
+static int
+install_syscall_filter(sandbox_cfg_t* cfg)
+{
+ int rc = 0;
+ scmp_filter_ctx ctx;
+
+ ctx = seccomp_init(SCMP_ACT_TRAP);
+ if (ctx == NULL) {
+ log_err(LD_BUG,"(Sandbox) failed to initialise libseccomp context");
+ rc = -1;
+ goto end;
+ }
+
+ // protectign sandbox parameter strings
+ if ((rc = prot_strings(ctx, cfg))) {
+ goto end;
+ }
+
+ // add parameter filters
+ if ((rc = add_param_filter(ctx, cfg))) {
+ log_err(LD_BUG, "(Sandbox) failed to add param filters!");
+ goto end;
+ }
+
+ // adding filters with no parameters
+ if ((rc = add_noparam_filter(ctx))) {
+ log_err(LD_BUG, "(Sandbox) failed to add param filters!");
+ goto end;
+ }
+
+ // loading the seccomp2 filter
+ if ((rc = seccomp_load(ctx))) {
+ log_err(LD_BUG, "(Sandbox) failed to load: %d (%s)!", rc,
+ strerror(-rc));
+ goto end;
+ }
+
+ // marking the sandbox as active
+ sandbox_active = 1;
+
+ end:
+ seccomp_release(ctx);
+ return (rc < 0 ? -rc : rc);
+}
+
+#include "linux_syscalls.inc"
+static const char *
+get_syscall_name(int syscall_num)
+{
+ int i;
+ for (i = 0; SYSCALLS_BY_NUMBER[i].syscall_name; ++i) {
+ if (SYSCALLS_BY_NUMBER[i].syscall_num == syscall_num)
+ return SYSCALLS_BY_NUMBER[i].syscall_name;
+ }
+
+ {
+ static char syscall_name_buf[64];
+ format_dec_number_sigsafe(syscall_num,
+ syscall_name_buf, sizeof(syscall_name_buf));
+ return syscall_name_buf;
+ }
+}
+
+#ifdef USE_BACKTRACE
+#define MAX_DEPTH 256
+static void *syscall_cb_buf[MAX_DEPTH];
+#endif
+
+/**
+ * Function called when a SIGSYS is caught by the application. It notifies the
+ * user that an error has occurred and either terminates or allows the
+ * application to continue execution, based on the DEBUGGING_CLOSE symbol.
+ */
+static void
+sigsys_debugging(int nr, siginfo_t *info, void *void_context)
+{
+ ucontext_t *ctx = (ucontext_t *) (void_context);
+ const char *syscall_name;
+ int syscall;
+#ifdef USE_BACKTRACE
+ int depth;
+ int n_fds, i;
+ const int *fds = NULL;
+#endif
+
+ (void) nr;
+
+ if (info->si_code != SYS_SECCOMP)
+ return;
+
+ if (!ctx)
+ return;
+
+ syscall = (int) ctx->uc_mcontext.M_SYSCALL;
+
+#ifdef USE_BACKTRACE
+ depth = backtrace(syscall_cb_buf, MAX_DEPTH);
+ /* Clean up the top stack frame so we get the real function
+ * name for the most recently failing function. */
+ clean_backtrace(syscall_cb_buf, depth, ctx);
+#endif
+
+ syscall_name = get_syscall_name(syscall);
+
+ tor_log_err_sigsafe("(Sandbox) Caught a bad syscall attempt (syscall ",
+ syscall_name,
+ ")\n",
+ NULL);
+
+#ifdef USE_BACKTRACE
+ n_fds = tor_log_get_sigsafe_err_fds(&fds);
+ for (i=0; i < n_fds; ++i)
+ backtrace_symbols_fd(syscall_cb_buf, depth, fds[i]);
+#endif
+
+#if defined(DEBUGGING_CLOSE)
+ _exit(1);
+#endif // DEBUGGING_CLOSE
+}
+
+/**
+ * Function that adds a handler for SIGSYS, which is the signal thrown
+ * when the application is issuing a syscall which is not allowed. The
+ * main purpose of this function is to help with debugging by identifying
+ * filtered syscalls.
+ */
+static int
+install_sigsys_debugging(void)
+{
+ struct sigaction act;
+ sigset_t mask;
+
+ memset(&act, 0, sizeof(act));
+ sigemptyset(&mask);
+ sigaddset(&mask, SIGSYS);
+
+ act.sa_sigaction = &sigsys_debugging;
+ act.sa_flags = SA_SIGINFO;
+ if (sigaction(SIGSYS, &act, NULL) < 0) {
+ log_err(LD_BUG,"(Sandbox) Failed to register SIGSYS signal handler");
+ return -1;
+ }
+
+ if (sigprocmask(SIG_UNBLOCK, &mask, NULL)) {
+ log_err(LD_BUG,"(Sandbox) Failed call to sigprocmask()");
+ return -2;
+ }
+
+ return 0;
+}
+
+/**
+ * Function responsible of registering the sandbox_cfg_t list of parameter
+ * syscall filters to the existing parameter list. This is used for incipient
+ * multiple-sandbox support.
+ */
+static int
+register_cfg(sandbox_cfg_t* cfg)
+{
+ sandbox_cfg_t *elem = NULL;
+
+ if (filter_dynamic == NULL) {
+ filter_dynamic = cfg;
+ return 0;
+ }
+
+ for (elem = filter_dynamic; elem->next != NULL; elem = elem->next)
+ ;
+
+ elem->next = cfg;
+
+ return 0;
+}
+
+#endif // USE_LIBSECCOMP
+
+#ifdef USE_LIBSECCOMP
+/**
+ * Initialises the syscall sandbox filter for any linux architecture, taking
+ * into account various available features for different linux flavours.
+ */
+static int
+initialise_libseccomp_sandbox(sandbox_cfg_t* cfg)
+{
+ if (install_sigsys_debugging())
+ return -1;
+
+ if (install_syscall_filter(cfg))
+ return -2;
+
+ if (register_cfg(cfg))
+ return -3;
+
+ return 0;
+}
+
+int
+sandbox_is_active(void)
+{
+ return sandbox_active != 0;
+}
+#endif // USE_LIBSECCOMP
+
+sandbox_cfg_t*
+sandbox_cfg_new(void)
+{
+ return NULL;
+}
+
+int
+sandbox_init(sandbox_cfg_t *cfg)
+{
+#if defined(USE_LIBSECCOMP)
+ return initialise_libseccomp_sandbox(cfg);
+
+#elif defined(__linux__)
+ (void)cfg;
+ log_warn(LD_GENERAL,
+ "This version of Tor was built without support for sandboxing. To "
+ "build with support for sandboxing on Linux, you must have "
+ "libseccomp and its necessary header files (e.g. seccomp.h).");
+ return 0;
+
+#else
+ (void)cfg;
+ log_warn(LD_GENERAL,
+ "Currently, sandboxing is only implemented on Linux. The feature "
+ "is disabled on your platform.");
+ return 0;
+#endif
+}
+
+#ifndef USE_LIBSECCOMP
+int
+sandbox_cfg_allow_open_filename(sandbox_cfg_t **cfg, char *file)
+{
+ (void)cfg; (void)file;
+ return 0;
+}
+
+int
+sandbox_cfg_allow_open_filename_array(sandbox_cfg_t **cfg, ...)
+{
+ (void)cfg;
+ return 0;
+}
+
+int
+sandbox_cfg_allow_openat_filename(sandbox_cfg_t **cfg, char *file)
+{
+ (void)cfg; (void)file;
+ return 0;
+}
+
+int
+sandbox_cfg_allow_openat_filename_array(sandbox_cfg_t **cfg, ...)
+{
+ (void)cfg;
+ return 0;
+}
+
+#if 0
+int
+sandbox_cfg_allow_execve(sandbox_cfg_t **cfg, const char *com)
+{
+ (void)cfg; (void)com;
+ return 0;
+}
+
+int
+sandbox_cfg_allow_execve_array(sandbox_cfg_t **cfg, ...)
+{
+ (void)cfg;
+ return 0;
+}
+#endif
+
+int
+sandbox_cfg_allow_stat_filename(sandbox_cfg_t **cfg, char *file)
+{
+ (void)cfg; (void)file;
+ return 0;
+}
+
+int
+sandbox_cfg_allow_stat_filename_array(sandbox_cfg_t **cfg, ...)
+{
+ (void)cfg;
+ return 0;
+}
+
+int
+sandbox_cfg_allow_rename(sandbox_cfg_t **cfg, char *file1, char *file2)
+{
+ (void)cfg; (void)file1; (void)file2;
+ return 0;
+}
+
+int
+sandbox_is_active(void)
+{
+ return 0;
+}
+#endif
+
diff --git a/src/common/sandbox.h b/src/common/sandbox.h
new file mode 100644
index 000000000..c3c676663
--- /dev/null
+++ b/src/common/sandbox.h
@@ -0,0 +1,222 @@
+/* Copyright (c) 2001 Matej Pfajfar.
+ * Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file sandbox.h
+ * \brief Header file for sandbox.c.
+ **/
+
+#ifndef SANDBOX_H_
+#define SANDBOX_H_
+
+#include "orconfig.h"
+#include "torint.h"
+
+#ifndef SYS_SECCOMP
+
+/**
+ * Used by SIGSYS signal handler to check if the signal was issued due to a
+ * seccomp2 filter violation.
+ */
+#define SYS_SECCOMP 1
+
+#endif
+
+#if defined(HAVE_SECCOMP_H) && defined(__linux__)
+#define USE_LIBSECCOMP
+#endif
+
+struct sandbox_cfg_elem;
+
+/** Typedef to structure used to manage a sandbox configuration. */
+typedef struct sandbox_cfg_elem sandbox_cfg_t;
+
+/**
+ * Linux definitions
+ */
+#ifdef USE_LIBSECCOMP
+
+#ifndef __USE_GNU
+#define __USE_GNU
+#endif
+#include <sys/ucontext.h>
+#include <seccomp.h>
+#include <netdb.h>
+
+#define PARAM_PTR 0
+#define PARAM_NUM 1
+
+/**
+ * Enum used to manage the type of the implementation for general purpose.
+ */
+typedef enum {
+ /** Libseccomp implementation based on seccomp2*/
+ LIBSECCOMP2 = 0
+} SB_IMPL;
+
+/**
+ * Configuration parameter structure associated with the LIBSECCOMP2
+ * implementation.
+ */
+typedef struct smp_param {
+ /** syscall associated with parameter. */
+ int syscall;
+
+ /** parameter value. */
+ intptr_t value;
+ /** parameter value, second argument. */
+ intptr_t value2;
+
+ /** parameter flag (0 = not protected, 1 = protected). */
+ int prot;
+} smp_param_t;
+
+/**
+ * Structure used to manage a sandbox configuration.
+ *
+ * It is implemented as a linked list of parameters. Currently only controls
+ * parameters for open, openat, execve, stat64.
+ */
+struct sandbox_cfg_elem {
+ /** Sandbox implementation which dictates the parameter type. */
+ SB_IMPL implem;
+
+ /** Configuration parameter. */
+ smp_param_t *param;
+
+ /** Next element of the configuration*/
+ struct sandbox_cfg_elem *next;
+};
+
+/**
+ * Structure used for keeping a linked list of getaddrinfo pre-recorded
+ * results.
+ */
+struct sb_addr_info_el {
+ /** Name of the address info result. */
+ char *name;
+ /** Pre-recorded getaddrinfo result. */
+ struct addrinfo *info;
+ /** Next element in the list. */
+ struct sb_addr_info_el *next;
+};
+/** Typedef to structure used to manage an addrinfo list. */
+typedef struct sb_addr_info_el sb_addr_info_t;
+
+/** Function pointer defining the prototype of a filter function.*/
+typedef int (*sandbox_filter_func_t)(scmp_filter_ctx ctx,
+ sandbox_cfg_t *filter);
+
+/** Type that will be used in step 3 in order to manage multiple sandboxes.*/
+typedef struct {
+ /** function pointers associated with the filter */
+ sandbox_filter_func_t *filter_func;
+
+ /** filter function pointer parameters */
+ sandbox_cfg_t *filter_dynamic;
+} sandbox_t;
+
+#endif // USE_LIBSECCOMP
+
+#ifdef USE_LIBSECCOMP
+/** Pre-calls getaddrinfo in order to pre-record result. */
+int sandbox_add_addrinfo(const char *addr);
+
+struct addrinfo;
+/** Replacement for getaddrinfo(), using pre-recorded results. */
+int sandbox_getaddrinfo(const char *name, const char *servname,
+ const struct addrinfo *hints,
+ struct addrinfo **res);
+#else
+#define sandbox_getaddrinfo(name, servname, hints, res) \
+ getaddrinfo((name),(servname), (hints),(res))
+#define sandbox_add_addrinfo(name) \
+ ((void)(name))
+#endif
+
+#ifdef USE_LIBSECCOMP
+/** Returns a registered protected string used with the sandbox, given that
+ * it matches the parameter.
+ */
+const char* sandbox_intern_string(const char *param);
+#else
+#define sandbox_intern_string(s) (s)
+#endif
+
+/** Creates an empty sandbox configuration file.*/
+sandbox_cfg_t * sandbox_cfg_new(void);
+
+/**
+ * Function used to add a open allowed filename to a supplied configuration.
+ * The (char*) specifies the path to the allowed file; we take ownership
+ * of the pointer.
+ */
+int sandbox_cfg_allow_open_filename(sandbox_cfg_t **cfg, char *file);
+
+/**DOCDOC*/
+int sandbox_cfg_allow_rename(sandbox_cfg_t **cfg, char *file1, char *file2);
+
+/** Function used to add a series of open allowed filenames to a supplied
+ * configuration.
+ * @param cfg sandbox configuration.
+ * @param ... a list of stealable pointers to permitted files. The last
+ * one must be NULL.
+*/
+int sandbox_cfg_allow_open_filename_array(sandbox_cfg_t **cfg, ...);
+
+/**
+ * Function used to add a openat allowed filename to a supplied configuration.
+ * The (char*) specifies the path to the allowed file; we steal the pointer to
+ * that file.
+ */
+int sandbox_cfg_allow_openat_filename(sandbox_cfg_t **cfg, char *file);
+
+/** Function used to add a series of openat allowed filenames to a supplied
+ * configuration.
+ * @param cfg sandbox configuration.
+ * @param ... a list of stealable pointers to permitted files. The last
+ * one must be NULL.
+ */
+int sandbox_cfg_allow_openat_filename_array(sandbox_cfg_t **cfg, ...);
+
+#if 0
+/**
+ * Function used to add a execve allowed filename to a supplied configuration.
+ * The (char*) specifies the path to the allowed file; that pointer is stolen.
+ */
+int sandbox_cfg_allow_execve(sandbox_cfg_t **cfg, const char *com);
+
+/** Function used to add a series of execve allowed filenames to a supplied
+ * configuration.
+ * @param cfg sandbox configuration.
+ * @param ... an array of stealable pointers to permitted files. The last
+ * one must be NULL.
+ */
+int sandbox_cfg_allow_execve_array(sandbox_cfg_t **cfg, ...);
+#endif
+
+/**
+ * Function used to add a stat/stat64 allowed filename to a configuration.
+ * The (char*) specifies the path to the allowed file; that pointer is stolen.
+ */
+int sandbox_cfg_allow_stat_filename(sandbox_cfg_t **cfg, char *file);
+
+/** Function used to add a series of stat64 allowed filenames to a supplied
+ * configuration.
+ * @param cfg sandbox configuration.
+ * @param ... an array of stealable pointers to permitted files. The last
+ * one must be NULL.
+ */
+int sandbox_cfg_allow_stat_filename_array(sandbox_cfg_t **cfg, ...);
+
+/** Function used to initialise a sandbox configuration.*/
+int sandbox_init(sandbox_cfg_t* cfg);
+
+/** Return true iff the sandbox is turned on. */
+int sandbox_is_active(void);
+
+#endif /* SANDBOX_H_ */
+
diff --git a/src/common/sha256.c b/src/common/sha256.c
deleted file mode 100644
index 813c68d2a..000000000
--- a/src/common/sha256.c
+++ /dev/null
@@ -1,331 +0,0 @@
-/* Copyright (c) 2009-2012, The Tor Project, Inc. */
-/* See LICENSE for licensing information */
-/* This SHA256 implementation is adapted from the public domain one in
- LibTomCrypt, version 1.6. Tor uses it on platforms where OpenSSL doesn't
- have a SHA256. */
-
-
-typedef struct sha256_state {
- uint64_t length;
- uint32_t state[8], curlen;
- unsigned char buf[64];
-} sha256_state;
-
-#define CRYPT_OK 0
-#define CRYPT_NOP -1
-#define CRYPT_INVALID_ARG -2
-
-#define LOAD32H(x,y) STMT_BEGIN x = ntohl(get_uint32((const char*)y)); STMT_END
-#define STORE32H(x,y) STMT_BEGIN set_uint32((char*)y, htonl(x)); STMT_END
-#define STORE64H(x,y) STMT_BEGIN \
- set_uint32((char*)y, htonl((uint32_t)((x)>>32))); \
- set_uint32(((char*)y)+4, htonl((uint32_t)((x)&0xffffffff))); \
- STMT_END
-#define RORc(x, y) ( ((((unsigned long)(x)&0xFFFFFFFFUL)>>(unsigned long)((y)&31)) | ((unsigned long)(x)<<(unsigned long)(32-((y)&31)))) & 0xFFFFFFFFUL)
-#ifndef MIN
- #define MIN(x, y) ( ((x)<(y))?(x):(y) )
-#endif
-
-
-/* LibTomCrypt, modular cryptographic library -- Tom St Denis
- *
- * LibTomCrypt is a library that provides various cryptographic
- * algorithms in a highly modular and flexible manner.
- *
- * The library is free for all purposes without any express
- * guarantee it works.
- *
- * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com
- */
-
-/**
- @file sha256.c
- SHA256 by Tom St Denis
-*/
-
-
-#ifdef LTC_SMALL_CODE
-/* the K array */
-static const uint32_t K[64] = {
- 0x428a2f98UL, 0x71374491UL, 0xb5c0fbcfUL, 0xe9b5dba5UL, 0x3956c25bUL,
- 0x59f111f1UL, 0x923f82a4UL, 0xab1c5ed5UL, 0xd807aa98UL, 0x12835b01UL,
- 0x243185beUL, 0x550c7dc3UL, 0x72be5d74UL, 0x80deb1feUL, 0x9bdc06a7UL,
- 0xc19bf174UL, 0xe49b69c1UL, 0xefbe4786UL, 0x0fc19dc6UL, 0x240ca1ccUL,
- 0x2de92c6fUL, 0x4a7484aaUL, 0x5cb0a9dcUL, 0x76f988daUL, 0x983e5152UL,
- 0xa831c66dUL, 0xb00327c8UL, 0xbf597fc7UL, 0xc6e00bf3UL, 0xd5a79147UL,
- 0x06ca6351UL, 0x14292967UL, 0x27b70a85UL, 0x2e1b2138UL, 0x4d2c6dfcUL,
- 0x53380d13UL, 0x650a7354UL, 0x766a0abbUL, 0x81c2c92eUL, 0x92722c85UL,
- 0xa2bfe8a1UL, 0xa81a664bUL, 0xc24b8b70UL, 0xc76c51a3UL, 0xd192e819UL,
- 0xd6990624UL, 0xf40e3585UL, 0x106aa070UL, 0x19a4c116UL, 0x1e376c08UL,
- 0x2748774cUL, 0x34b0bcb5UL, 0x391c0cb3UL, 0x4ed8aa4aUL, 0x5b9cca4fUL,
- 0x682e6ff3UL, 0x748f82eeUL, 0x78a5636fUL, 0x84c87814UL, 0x8cc70208UL,
- 0x90befffaUL, 0xa4506cebUL, 0xbef9a3f7UL, 0xc67178f2UL
-};
-#endif
-
-/* Various logical functions */
-#define Ch(x,y,z) (z ^ (x & (y ^ z)))
-#define Maj(x,y,z) (((x | y) & z) | (x & y))
-#define S(x, n) RORc((x),(n))
-#define R(x, n) (((x)&0xFFFFFFFFUL)>>(n))
-#define Sigma0(x) (S(x, 2) ^ S(x, 13) ^ S(x, 22))
-#define Sigma1(x) (S(x, 6) ^ S(x, 11) ^ S(x, 25))
-#define Gamma0(x) (S(x, 7) ^ S(x, 18) ^ R(x, 3))
-#define Gamma1(x) (S(x, 17) ^ S(x, 19) ^ R(x, 10))
-
-/* compress 512-bits */
-#ifdef LTC_CLEAN_STACK
-static int _sha256_compress(sha256_state * md, unsigned char *buf)
-#else
-static int sha256_compress(sha256_state * md, unsigned char *buf)
-#endif
-{
- uint32_t S[8], W[64], t0, t1;
-#ifdef LTC_SMALL_CODE
- uint32_t t;
-#endif
- int i;
-
- /* copy state into S */
- for (i = 0; i < 8; i++) {
- S[i] = md->state[i];
- }
-
- /* copy the state into 512-bits into W[0..15] */
- for (i = 0; i < 16; i++) {
- LOAD32H(W[i], buf + (4*i));
- }
-
- /* fill W[16..63] */
- for (i = 16; i < 64; i++) {
- W[i] = Gamma1(W[i - 2]) + W[i - 7] + Gamma0(W[i - 15]) + W[i - 16];
- }
-
- /* Compress */
-#ifdef LTC_SMALL_CODE
-#define RND(a,b,c,d,e,f,g,h,i) \
- t0 = h + Sigma1(e) + Ch(e, f, g) + K[i] + W[i]; \
- t1 = Sigma0(a) + Maj(a, b, c); \
- d += t0; \
- h = t0 + t1;
-
- for (i = 0; i < 64; ++i) {
- RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],i);
- t = S[7]; S[7] = S[6]; S[6] = S[5]; S[5] = S[4];
- S[4] = S[3]; S[3] = S[2]; S[2] = S[1]; S[1] = S[0]; S[0] = t;
- }
-#else
-#define RND(a,b,c,d,e,f,g,h,i,ki) \
- t0 = h + Sigma1(e) + Ch(e, f, g) + ki + W[i]; \
- t1 = Sigma0(a) + Maj(a, b, c); \
- d += t0; \
- h = t0 + t1;
-
- RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],0,0x428a2f98);
- RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],1,0x71374491);
- RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],2,0xb5c0fbcf);
- RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],3,0xe9b5dba5);
- RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],4,0x3956c25b);
- RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],5,0x59f111f1);
- RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],6,0x923f82a4);
- RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],7,0xab1c5ed5);
- RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],8,0xd807aa98);
- RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],9,0x12835b01);
- RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],10,0x243185be);
- RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],11,0x550c7dc3);
- RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],12,0x72be5d74);
- RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],13,0x80deb1fe);
- RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],14,0x9bdc06a7);
- RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],15,0xc19bf174);
- RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],16,0xe49b69c1);
- RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],17,0xefbe4786);
- RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],18,0x0fc19dc6);
- RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],19,0x240ca1cc);
- RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],20,0x2de92c6f);
- RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],21,0x4a7484aa);
- RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],22,0x5cb0a9dc);
- RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],23,0x76f988da);
- RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],24,0x983e5152);
- RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],25,0xa831c66d);
- RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],26,0xb00327c8);
- RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],27,0xbf597fc7);
- RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],28,0xc6e00bf3);
- RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],29,0xd5a79147);
- RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],30,0x06ca6351);
- RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],31,0x14292967);
- RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],32,0x27b70a85);
- RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],33,0x2e1b2138);
- RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],34,0x4d2c6dfc);
- RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],35,0x53380d13);
- RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],36,0x650a7354);
- RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],37,0x766a0abb);
- RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],38,0x81c2c92e);
- RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],39,0x92722c85);
- RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],40,0xa2bfe8a1);
- RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],41,0xa81a664b);
- RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],42,0xc24b8b70);
- RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],43,0xc76c51a3);
- RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],44,0xd192e819);
- RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],45,0xd6990624);
- RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],46,0xf40e3585);
- RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],47,0x106aa070);
- RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],48,0x19a4c116);
- RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],49,0x1e376c08);
- RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],50,0x2748774c);
- RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],51,0x34b0bcb5);
- RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],52,0x391c0cb3);
- RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],53,0x4ed8aa4a);
- RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],54,0x5b9cca4f);
- RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],55,0x682e6ff3);
- RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],56,0x748f82ee);
- RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],57,0x78a5636f);
- RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],58,0x84c87814);
- RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],59,0x8cc70208);
- RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],60,0x90befffa);
- RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],61,0xa4506ceb);
- RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],62,0xbef9a3f7);
- RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],63,0xc67178f2);
-
-#undef RND
-
-#endif
-
- /* feedback */
- for (i = 0; i < 8; i++) {
- md->state[i] = md->state[i] + S[i];
- }
- return CRYPT_OK;
-}
-
-#ifdef LTC_CLEAN_STACK
-static int sha256_compress(sha256_state * md, unsigned char *buf)
-{
- int err;
- err = _sha256_compress(md, buf);
- burn_stack(sizeof(uint32_t) * 74);
- return err;
-}
-#endif
-
-/**
- Initialize the hash state
- @param md The hash state you wish to initialize
- @return CRYPT_OK if successful
-*/
-static int sha256_init(sha256_state * md)
-{
- LTC_ARGCHK(md != NULL);
-
- md->curlen = 0;
- md->length = 0;
- md->state[0] = 0x6A09E667UL;
- md->state[1] = 0xBB67AE85UL;
- md->state[2] = 0x3C6EF372UL;
- md->state[3] = 0xA54FF53AUL;
- md->state[4] = 0x510E527FUL;
- md->state[5] = 0x9B05688CUL;
- md->state[6] = 0x1F83D9ABUL;
- md->state[7] = 0x5BE0CD19UL;
- return CRYPT_OK;
-}
-
-/**
- Process a block of memory though the hash
- @param md The hash state
- @param in The data to hash
- @param inlen The length of the data (octets)
- @return CRYPT_OK if successful
-*/
-static int sha256_process (sha256_state * md, const unsigned char *in, unsigned long inlen)
-{
- unsigned long n;
- int err;
- LTC_ARGCHK(md != NULL);
- LTC_ARGCHK(in != NULL);
- if (md->curlen > sizeof(md->buf)) {
- return CRYPT_INVALID_ARG;
- }
- while (inlen > 0) {
- if (md->curlen == 0 && inlen >= 64) {
- if ((err = sha256_compress (md, (unsigned char *)in)) != CRYPT_OK) {
- return err;
- }
- md->length += 64 * 8;
- in += 64;
- inlen -= 64;
- } else {
- n = MIN(inlen, (64 - md->curlen));
- memcpy(md->buf + md->curlen, in, (size_t)n);
- md->curlen += n;
- in += n;
- inlen -= n;
- if (md->curlen == 64) {
- if ((err = sha256_compress (md, md->buf)) != CRYPT_OK) {
- return err;
- }
- md->length += 8*64;
- md->curlen = 0;
- }
- }
- }
- return CRYPT_OK;
-}
-
-/**
- Terminate the hash to get the digest
- @param md The hash state
- @param out [out] The destination of the hash (32 bytes)
- @return CRYPT_OK if successful
-*/
-static int sha256_done(sha256_state * md, unsigned char *out)
-{
- int i;
-
- LTC_ARGCHK(md != NULL);
- LTC_ARGCHK(out != NULL);
-
- if (md->curlen >= sizeof(md->buf)) {
- return CRYPT_INVALID_ARG;
- }
-
-
- /* increase the length of the message */
- md->length += md->curlen * 8;
-
- /* append the '1' bit */
- md->buf[md->curlen++] = (unsigned char)0x80;
-
- /* if the length is currently above 56 bytes we append zeros
- * then compress. Then we can fall back to padding zeros and length
- * encoding like normal.
- */
- if (md->curlen > 56) {
- while (md->curlen < 64) {
- md->buf[md->curlen++] = (unsigned char)0;
- }
- sha256_compress(md, md->buf);
- md->curlen = 0;
- }
-
- /* pad upto 56 bytes of zeroes */
- while (md->curlen < 56) {
- md->buf[md->curlen++] = (unsigned char)0;
- }
-
- /* store length */
- STORE64H(md->length, md->buf+56);
- sha256_compress(md, md->buf);
-
- /* copy output */
- for (i = 0; i < 8; i++) {
- STORE32H(md->state[i], out+(4*i));
- }
-#ifdef LTC_CLEAN_STACK
- zeromem(md, sizeof(sha256_state));
-#endif
- return CRYPT_OK;
-}
-
-/* $Source: /cvs/libtom/libtomcrypt/src/hashes/sha2/sha256.c,v $ */
-/* $Revision: 1.9 $ */
-/* $Date: 2006/11/01 09:28:17 $ */
diff --git a/src/common/testsupport.h b/src/common/testsupport.h
new file mode 100644
index 000000000..4a4f50b69
--- /dev/null
+++ b/src/common/testsupport.h
@@ -0,0 +1,80 @@
+/* Copyright (c) 2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#ifndef TOR_TESTSUPPORT_H
+#define TOR_TESTSUPPORT_H
+
+#ifdef TOR_UNIT_TESTS
+#define STATIC
+#else
+#define STATIC static
+#endif
+
+/** Quick and dirty macros to implement test mocking.
+ *
+ * To use them, suppose that you have a function you'd like to mock
+ * with the signature "void writebuf(size_t n, char *buf)". You can then
+ * declare the function as:
+ *
+ * MOCK_DECL(void, writebuf, (size_t n, char *buf));
+ *
+ * and implement it as:
+ *
+ * MOCK_IMPL(void
+ * writebuf,(size_t n, char *buf)
+ * {
+ * ...
+ * }
+ *
+ * For the non-testing build, this will expand simply into:
+ *
+ * void writebuf(size_t n, char *buf);
+ * void
+ * writebuf(size_t n, char *buf)
+ * {
+ * ...
+ * }
+ *
+ * But for the testing case, it will expand into:
+ *
+ * void writebuf__real(size_t n, char *buf);
+ * extern void (*writebuf)(size_t n, char *buf);
+ *
+ * void (*writebuf)(size_t n, char *buf) = writebuf__real;
+ * void
+ * writebuf__real(size_t n, char *buf)
+ * {
+ * ...
+ * }
+ *
+ * This is not a great mocking system! It is deliberately "the simplest
+ * thing that could work", and pays for its simplicity in its lack of
+ * features, and in its uglification of the Tor code. Replacing it with
+ * something clever would be a fine thing.
+ *
+ * @{ */
+#ifdef TOR_UNIT_TESTS
+#define MOCK_DECL(rv, funcname, arglist) \
+ rv funcname ##__real arglist; \
+ extern rv(*funcname) arglist
+#define MOCK_IMPL(rv, funcname, arglist) \
+ rv(*funcname) arglist = funcname ##__real; \
+ rv funcname ##__real arglist
+#define MOCK(func, replacement) \
+ do { \
+ (func) = (replacement); \
+ } while (0)
+#define UNMOCK(func) \
+ do { \
+ func = func ##__real; \
+ } while (0)
+#else
+#define MOCK_DECL(rv, funcname, arglist) \
+ rv funcname arglist
+#define MOCK_IMPL(rv, funcname, arglist) \
+ rv funcname arglist
+#endif
+/** @} */
+
+#endif
+
diff --git a/src/common/torgzip.c b/src/common/torgzip.c
index da4136228..15451ee30 100644
--- a/src/common/torgzip.c
+++ b/src/common/torgzip.c
@@ -1,6 +1,6 @@
/* Copyright (c) 2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -68,6 +68,22 @@ is_gzip_supported(void)
return gzip_is_supported;
}
+/** Return a string representation of the version of the currently running
+ * version of zlib. */
+const char *
+tor_zlib_get_version_str(void)
+{
+ return zlibVersion();
+}
+
+/** Return a string representation of the version of the version of zlib
+* used at compilation. */
+const char *
+tor_zlib_get_header_version_str(void)
+{
+ return ZLIB_VERSION;
+}
+
/** Return the 'bits' value to tell zlib to use <b>method</b>.*/
static INLINE int
method_bits(compress_method_t method)
diff --git a/src/common/torgzip.h b/src/common/torgzip.h
index d3ded81f9..5db03fe6e 100644
--- a/src/common/torgzip.h
+++ b/src/common/torgzip.h
@@ -1,6 +1,6 @@
/* Copyright (c) 2003, Roger Dingledine
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -8,8 +8,8 @@
* \brief Headers for torgzip.h
**/
-#ifndef _TOR_TORGZIP_H
-#define _TOR_TORGZIP_H
+#ifndef TOR_TORGZIP_H
+#define TOR_TORGZIP_H
/** Enumeration of what kind of compression to use. Only ZLIB_METHOD is
* guaranteed to be supported by the compress/uncompress functions here;
@@ -32,6 +32,12 @@ tor_gzip_uncompress(char **out, size_t *out_len,
int is_gzip_supported(void);
+const char *
+tor_zlib_get_version_str(void);
+
+const char *
+tor_zlib_get_header_version_str(void);
+
compress_method_t detect_compression_method(const char *in, size_t in_len);
/** Return values from tor_zlib_process; see that function's documentation for
diff --git a/src/common/torint.h b/src/common/torint.h
index 8771802d7..a993d7649 100644
--- a/src/common/torint.h
+++ b/src/common/torint.h
@@ -1,6 +1,6 @@
/* Copyright (c) 2003, Roger Dingledine
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -8,8 +8,8 @@
* \brief Header file to define uint32_t and friends
**/
-#ifndef _TOR_TORINT_H
-#define _TOR_TORINT_H
+#ifndef TOR_TORINT_H
+#define TOR_TORINT_H
#include "orconfig.h"
@@ -214,16 +214,20 @@ typedef int32_t ssize_t;
#if (SIZEOF_VOID_P > 4 && SIZEOF_VOID_P <= 8)
#ifndef HAVE_INTPTR_T
typedef int64_t intptr_t;
+#define SIZEOF_INTPTR_T 8
#endif
#ifndef HAVE_UINTPTR_T
typedef uint64_t uintptr_t;
+#define SIZEOF_UINTPTR_T 8
#endif
#elif (SIZEOF_VOID_P > 2 && SIZEOF_VOID_P <= 4)
#ifndef HAVE_INTPTR_T
typedef int32_t intptr_t;
+#define SIZEOF_INTPTR_T 4
#endif
#ifndef HAVE_UINTPTR_T
typedef uint32_t uintptr_t;
+#define SIZEOF_UINTPTR_T 4
#endif
#else
#error "void * is either >8 bytes or <= 2. In either case, I am confused."
diff --git a/src/common/torlog.h b/src/common/torlog.h
index 28890a44a..34f70f3c0 100644
--- a/src/common/torlog.h
+++ b/src/common/torlog.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001, Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -10,9 +10,10 @@
* \brief Headers for log.c
**/
-#ifndef _TOR_LOG_H
+#ifndef TOR_TORLOG_H
#include "compat.h"
+#include "testsupport.h"
#ifdef HAVE_SYSLOG_H
#include <syslog.h>
@@ -94,12 +95,17 @@
#define LD_HANDSHAKE (1u<<19)
/** Heartbeat messages */
#define LD_HEARTBEAT (1u<<20)
+/** Abstract channel_t code */
+#define LD_CHANNEL (1u<<21)
/** Number of logging domains in the code. */
-#define N_LOGGING_DOMAINS 21
+#define N_LOGGING_DOMAINS 22
/** This log message is not safe to send to a callback-based logger
* immediately. Used as a flag, not a log domain. */
#define LD_NOCB (1u<<31)
+/** This log message should not include a function name, even if it otherwise
+ * would. Used as a flag, not a log domain. */
+#define LD_NOFUNCNAME (1u<<30)
/** Mask of zero or more log domains, OR'd together. */
typedef uint32_t log_domain_mask_t;
@@ -112,12 +118,6 @@ typedef struct log_severity_list_t {
log_domain_mask_t masks[LOG_DEBUG-LOG_ERR+1];
} log_severity_list_t;
-#ifdef LOG_PRIVATE
-/** Given a severity, yields an index into log_severity_list_t.masks to use
- * for that severity. */
-#define SEVERITY_MASK_IDX(sev) ((sev) - LOG_ERR)
-#endif
-
/** Callback type used for add_callback_log. */
typedef void (*log_callback)(int severity, uint32_t domain, const char *msg);
@@ -151,66 +151,93 @@ void set_log_time_granularity(int granularity_msec);
void tor_log(int severity, log_domain_mask_t domain, const char *format, ...)
CHECK_PRINTF(3,4);
-#define log tor_log /* hack it so we don't conflict with log() as much */
-#if defined(__GNUC__) || defined(RUNNING_DOXYGEN)
-extern int _log_global_min_severity;
+void tor_log_err_sigsafe(const char *m, ...);
+int tor_log_get_sigsafe_err_fds(const int **out);
+void tor_log_update_sigsafe_err_fds(void);
+
+struct smartlist_t;
+void tor_log_get_logfile_names(struct smartlist_t *out);
+
+extern int log_global_min_severity_;
-void _log_fn(int severity, log_domain_mask_t domain,
+#if defined(__GNUC__) || defined(RUNNING_DOXYGEN)
+void log_fn_(int severity, log_domain_mask_t domain,
const char *funcname, const char *format, ...)
CHECK_PRINTF(4,5);
+struct ratelim_t;
+void log_fn_ratelim_(struct ratelim_t *ratelim, int severity,
+ log_domain_mask_t domain, const char *funcname,
+ const char *format, ...)
+ CHECK_PRINTF(5,6);
/** Log a message at level <b>severity</b>, using a pretty-printed version
* of the current function name. */
#define log_fn(severity, domain, args...) \
- _log_fn(severity, domain, __PRETTY_FUNCTION__, args)
+ log_fn_(severity, domain, __PRETTY_FUNCTION__, args)
+/** As log_fn, but use <b>ratelim</b> (an instance of ratelim_t) to control
+ * the frequency at which messages can appear.
+ */
+#define log_fn_ratelim(ratelim, severity, domain, args...) \
+ log_fn_ratelim_(ratelim, severity, domain, __PRETTY_FUNCTION__, args)
#define log_debug(domain, args...) \
STMT_BEGIN \
- if (PREDICT_UNLIKELY(_log_global_min_severity == LOG_DEBUG)) \
- _log_fn(LOG_DEBUG, domain, __PRETTY_FUNCTION__, args); \
+ if (PREDICT_UNLIKELY(log_global_min_severity_ == LOG_DEBUG)) \
+ log_fn_(LOG_DEBUG, domain, __PRETTY_FUNCTION__, args); \
STMT_END
#define log_info(domain, args...) \
- _log_fn(LOG_INFO, domain, __PRETTY_FUNCTION__, args)
+ log_fn_(LOG_INFO, domain, __PRETTY_FUNCTION__, args)
#define log_notice(domain, args...) \
- _log_fn(LOG_NOTICE, domain, __PRETTY_FUNCTION__, args)
+ log_fn_(LOG_NOTICE, domain, __PRETTY_FUNCTION__, args)
#define log_warn(domain, args...) \
- _log_fn(LOG_WARN, domain, __PRETTY_FUNCTION__, args)
+ log_fn_(LOG_WARN, domain, __PRETTY_FUNCTION__, args)
#define log_err(domain, args...) \
- _log_fn(LOG_ERR, domain, __PRETTY_FUNCTION__, args)
+ log_fn_(LOG_ERR, domain, __PRETTY_FUNCTION__, args)
#else /* ! defined(__GNUC__) */
-void _log_fn(int severity, log_domain_mask_t domain, const char *format, ...);
-void _log_debug(log_domain_mask_t domain, const char *format, ...);
-void _log_info(log_domain_mask_t domain, const char *format, ...);
-void _log_notice(log_domain_mask_t domain, const char *format, ...);
-void _log_warn(log_domain_mask_t domain, const char *format, ...);
-void _log_err(log_domain_mask_t domain, const char *format, ...);
+void log_fn_(int severity, log_domain_mask_t domain, const char *format, ...);
+struct ratelim_t;
+void log_fn_ratelim_(struct ratelim_t *ratelim, int severity,
+ log_domain_mask_t domain, const char *format, ...);
+void log_debug_(log_domain_mask_t domain, const char *format, ...);
+void log_info_(log_domain_mask_t domain, const char *format, ...);
+void log_notice_(log_domain_mask_t domain, const char *format, ...);
+void log_warn_(log_domain_mask_t domain, const char *format, ...);
+void log_err_(log_domain_mask_t domain, const char *format, ...);
#if defined(_MSC_VER) && _MSC_VER < 1300
/* MSVC 6 and earlier don't have __func__, or even __LINE__. */
-#define log_fn _log_fn
-#define log_debug _log_debug
-#define log_info _log_info
-#define log_notice _log_notice
-#define log_warn _log_warn
-#define log_err _log_err
+#define log_fn log_fn_
+#define log_fn_ratelim log_fn_ratelim_
+#define log_debug log_debug_
+#define log_info log_info_
+#define log_notice log_notice_
+#define log_warn log_warn_
+#define log_err log_err_
#else
/* We don't have GCC's varargs macros, so use a global variable to pass the
* function name to log_fn */
-extern const char *_log_fn_function_name;
+extern const char *log_fn_function_name_;
/* We abuse the comma operator here, since we can't use the standard
* do {...} while (0) trick to wrap this macro, since the macro can't take
* arguments. */
-#define log_fn (_log_fn_function_name=__func__),_log_fn
-#define log_debug (_log_fn_function_name=__func__),_log_debug
-#define log_info (_log_fn_function_name=__func__),_log_info
-#define log_notice (_log_fn_function_name=__func__),_log_notice
-#define log_warn (_log_fn_function_name=__func__),_log_warn
-#define log_err (_log_fn_function_name=__func__),_log_err
+#define log_fn (log_fn_function_name_=__func__),log_fn_
+#define log_fn_ratelim (log_fn_function_name_=__func__),log_fn_ratelim_
+#define log_debug (log_fn_function_name_=__func__),log_debug_
+#define log_info (log_fn_function_name_=__func__),log_info_
+#define log_notice (log_fn_function_name_=__func__),log_notice_
+#define log_warn (log_fn_function_name_=__func__),log_warn_
+#define log_err (log_fn_function_name_=__func__),log_err_
#endif
#endif /* !GNUC */
-# define _TOR_LOG_H
+#ifdef LOG_PRIVATE
+MOCK_DECL(STATIC void, logv, (int severity, log_domain_mask_t domain,
+ const char *funcname, const char *suffix, const char *format,
+ va_list ap) CHECK_PRINTF(5,0));
+#endif
+
+# define TOR_TORLOG_H
#endif
diff --git a/src/common/tortls.c b/src/common/tortls.c
index 60aac6492..ea0f21cb2 100644
--- a/src/common/tortls.c
+++ b/src/common/tortls.c
@@ -1,6 +1,6 @@
/* Copyright (c) 2003, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -48,9 +48,6 @@
#include "compat_libevent.h"
#endif
-#define CRYPTO_PRIVATE /* to import prototypes from crypto.h */
-#define TORTLS_PRIVATE
-
#include "crypto.h"
#include "tortls.h"
#include "util.h"
@@ -58,8 +55,8 @@
#include "container.h"
#include <string.h>
-#if OPENSSL_VERSION_NUMBER < OPENSSL_V_SERIES(0,9,7)
-#error "We require OpenSSL >= 0.9.7"
+#if OPENSSL_VERSION_NUMBER < OPENSSL_V_SERIES(0,9,8)
+#error "We require OpenSSL >= 0.9.8"
#endif
/* Enable the "v2" TLS handshake.
@@ -127,8 +124,33 @@ typedef struct tor_tls_context_t {
crypto_pk_t *auth_key;
} tor_tls_context_t;
+/** Return values for tor_tls_classify_client_ciphers.
+ *
+ * @{
+ */
+/** An error occurred when examining the client ciphers */
+#define CIPHERS_ERR -1
+/** The client cipher list indicates that a v1 handshake was in use. */
+#define CIPHERS_V1 1
+/** The client cipher list indicates that the client is using the v2 or the
+ * v3 handshake, but that it is (probably!) lying about what ciphers it
+ * supports */
+#define CIPHERS_V2 2
+/** The client cipher list indicates that the client is using the v2 or the
+ * v3 handshake, and that it is telling the truth about what ciphers it
+ * supports */
+#define CIPHERS_UNRESTRICTED 3
+/** @} */
+
#define TOR_TLS_MAGIC 0x71571571
+typedef enum {
+ TOR_TLS_ST_HANDSHAKE, TOR_TLS_ST_OPEN, TOR_TLS_ST_GOTCLOSE,
+ TOR_TLS_ST_SENTCLOSE, TOR_TLS_ST_CLOSED, TOR_TLS_ST_RENEGOTIATE,
+ TOR_TLS_ST_BUFFEREVENT
+} tor_tls_state_t;
+#define tor_tls_state_bitfield_t ENUM_BF(tor_tls_state_t)
+
/** Holds a SSL object and its associated data. Members are only
* accessed from within tortls.c.
*/
@@ -138,12 +160,9 @@ struct tor_tls_t {
SSL *ssl; /**< An OpenSSL SSL object. */
int socket; /**< The underlying file descriptor for this TLS connection. */
char *address; /**< An address to log when describing this connection. */
- enum {
- TOR_TLS_ST_HANDSHAKE, TOR_TLS_ST_OPEN, TOR_TLS_ST_GOTCLOSE,
- TOR_TLS_ST_SENTCLOSE, TOR_TLS_ST_CLOSED, TOR_TLS_ST_RENEGOTIATE,
- TOR_TLS_ST_BUFFEREVENT
- } state : 3; /**< The current SSL state, depending on which operations have
- * completed successfully. */
+ tor_tls_state_bitfield_t state : 3; /**< The current SSL state,
+ * depending on which operations
+ * have completed successfully. */
unsigned int isServer:1; /**< True iff this is a server-side connection */
unsigned int wasV2Handshake:1; /**< True iff the original handshake for
* this connection used the updated version
@@ -152,6 +171,9 @@ struct tor_tls_t {
* one certificate). */
/** True iff we should call negotiated_callback when we're done reading. */
unsigned int got_renegotiate:1;
+ /** Return value from tor_tls_classify_client_ciphers, or 0 if we haven't
+ * called that function yet. */
+ int8_t client_cipher_list_type;
/** Incremented every time we start the server side of a handshake. */
uint8_t server_handshake_count;
size_t wantwrite_n; /**< 0 normally, >0 if we returned wantwrite last
@@ -210,14 +232,16 @@ static X509* tor_tls_create_certificate(crypto_pk_t *rsa,
crypto_pk_t *rsa_sign,
const char *cname,
const char *cname_sign,
- unsigned int lifetime);
+ unsigned int cert_lifetime);
static int tor_tls_context_init_one(tor_tls_context_t **ppcontext,
crypto_pk_t *identity,
unsigned int key_lifetime,
+ unsigned int flags,
int is_client);
static tor_tls_context_t *tor_tls_context_new(crypto_pk_t *identity,
unsigned int key_lifetime,
+ unsigned int flags,
int is_client);
static int check_cert_lifetime_internal(int severity, const X509 *cert,
int past_tolerance, int future_tolerance);
@@ -234,8 +258,8 @@ static tor_tls_context_t *client_tls_context = NULL;
static int tls_library_is_initialized = 0;
/* Module-internal error codes. */
-#define _TOR_TLS_SYSCALL (_MIN_TOR_TLS_ERROR_VAL - 2)
-#define _TOR_TLS_ZERORETURN (_MIN_TOR_TLS_ERROR_VAL - 1)
+#define TOR_TLS_SYSCALL_ (MIN_TOR_TLS_ERROR_VAL_ - 2)
+#define TOR_TLS_ZERORETURN_ (MIN_TOR_TLS_ERROR_VAL_ - 1)
/** Write a description of the current state of <b>tls</b> into the
* <b>sz</b>-byte buffer at <b>buf</b>. */
@@ -308,11 +332,11 @@ tor_tls_log_one_error(tor_tls_t *tls, unsigned long err,
if (!lib) lib = "(null)";
if (!func) func = "(null)";
if (doing) {
- log(severity, domain, "TLS error while %s%s%s: %s (in %s:%s:%s)",
+ tor_log(severity, domain, "TLS error while %s%s%s: %s (in %s:%s:%s)",
doing, addr?" with ":"", addr?addr:"",
msg, lib, func, state);
} else {
- log(severity, domain, "TLS error%s%s: %s (in %s:%s:%s)",
+ tor_log(severity, domain, "TLS error%s%s: %s (in %s:%s:%s)",
addr?" with ":"", addr?addr:"",
msg, lib, func, state);
}
@@ -336,35 +360,19 @@ tls_log_errors(tor_tls_t *tls, int severity, int domain, const char *doing)
static int
tor_errno_to_tls_error(int e)
{
-#if defined(_WIN32)
switch (e) {
- case WSAECONNRESET: // most common
+ case SOCK_ERRNO(ECONNRESET): // most common
return TOR_TLS_ERROR_CONNRESET;
- case WSAETIMEDOUT:
+ case SOCK_ERRNO(ETIMEDOUT):
return TOR_TLS_ERROR_TIMEOUT;
- case WSAENETUNREACH:
- case WSAEHOSTUNREACH:
+ case SOCK_ERRNO(EHOSTUNREACH):
+ case SOCK_ERRNO(ENETUNREACH):
return TOR_TLS_ERROR_NO_ROUTE;
- case WSAECONNREFUSED:
+ case SOCK_ERRNO(ECONNREFUSED):
return TOR_TLS_ERROR_CONNREFUSED; // least common
default:
return TOR_TLS_ERROR_MISC;
}
-#else
- switch (e) {
- case ECONNRESET: // most common
- return TOR_TLS_ERROR_CONNRESET;
- case ETIMEDOUT:
- return TOR_TLS_ERROR_TIMEOUT;
- case EHOSTUNREACH:
- case ENETUNREACH:
- return TOR_TLS_ERROR_NO_ROUTE;
- case ECONNREFUSED:
- return TOR_TLS_ERROR_CONNREFUSED; // least common
- default:
- return TOR_TLS_ERROR_MISC;
- }
-#endif
}
/** Given a TOR_TLS_* error code, return a string equivalent. */
@@ -393,9 +401,9 @@ tor_tls_err_to_string(int err)
/** Given a TLS object and the result of an SSL_* call, use
* SSL_get_error to determine whether an error has occurred, and if so
* which one. Return one of TOR_TLS_{DONE|WANTREAD|WANTWRITE|ERROR}.
- * If extra&CATCH_SYSCALL is true, return _TOR_TLS_SYSCALL instead of
+ * If extra&CATCH_SYSCALL is true, return TOR_TLS_SYSCALL_ instead of
* reporting syscall errors. If extra&CATCH_ZERO is true, return
- * _TOR_TLS_ZERORETURN instead of reporting zero-return errors.
+ * TOR_TLS_ZERORETURN_ instead of reporting zero-return errors.
*
* If an error has occurred, log it at level <b>severity</b> and describe the
* current action as <b>doing</b>.
@@ -415,14 +423,14 @@ tor_tls_get_error(tor_tls_t *tls, int r, int extra,
return TOR_TLS_WANTWRITE;
case SSL_ERROR_SYSCALL:
if (extra&CATCH_SYSCALL)
- return _TOR_TLS_SYSCALL;
+ return TOR_TLS_SYSCALL_;
if (r == 0) {
- log(severity, LD_NET, "TLS error: unexpected close while %s (%s)",
+ tor_log(severity, LD_NET, "TLS error: unexpected close while %s (%s)",
doing, SSL_state_string_long(tls->ssl));
tor_error = TOR_TLS_ERROR_IO;
} else {
int e = tor_socket_errno(tls->socket);
- log(severity, LD_NET,
+ tor_log(severity, LD_NET,
"TLS error: <syscall error while %s> (errno=%d: %s; state=%s)",
doing, e, tor_socket_strerror(e),
SSL_state_string_long(tls->ssl));
@@ -432,8 +440,8 @@ tor_tls_get_error(tor_tls_t *tls, int r, int extra,
return tor_error;
case SSL_ERROR_ZERO_RETURN:
if (extra&CATCH_ZERO)
- return _TOR_TLS_ZERORETURN;
- log(severity, LD_NET, "TLS connection closed while %s in state %s",
+ return TOR_TLS_ZERORETURN_;
+ tor_log(severity, LD_NET, "TLS connection closed while %s in state %s",
doing, SSL_state_string_long(tls->ssl));
tls_log_errors(tls, severity, domain, doing);
return TOR_TLS_CLOSE;
@@ -478,7 +486,7 @@ tor_tls_init(void)
* a test of intelligence and determination.
*/
if (version > OPENSSL_V(0,9,8,'k') && version <= OPENSSL_V(0,9,8,'l')) {
- log_notice(LD_GENERAL, "OpenSSL %s looks like version 0.9.8l, but "
+ log_info(LD_GENERAL, "OpenSSL %s looks like version 0.9.8l, but "
"some vendors have backported renegotiation code from "
"0.9.8m without updating the version number. "
"I will try SSL3_FLAGS and SSL_OP to enable renegotation.",
@@ -486,12 +494,12 @@ tor_tls_init(void)
use_unsafe_renegotiation_flag = 1;
use_unsafe_renegotiation_op = 1;
} else if (version > OPENSSL_V(0,9,8,'l')) {
- log_notice(LD_GENERAL, "OpenSSL %s looks like version 0.9.8m or later; "
+ log_info(LD_GENERAL, "OpenSSL %s looks like version 0.9.8m or later; "
"I will try SSL_OP to enable renegotiation",
SSLeay_version(SSLEAY_VERSION));
use_unsafe_renegotiation_op = 1;
} else if (version <= OPENSSL_V(0,9,8,'k')) {
- log_notice(LD_GENERAL, "OpenSSL %s [%lx] looks like it's older than "
+ log_info(LD_GENERAL, "OpenSSL %s [%lx] looks like it's older than "
"0.9.8l, but some vendors have backported 0.9.8l's "
"renegotiation code to earlier versions, and some have "
"backported the code from 0.9.8m or 0.9.8n. I'll set both "
@@ -505,6 +513,37 @@ tor_tls_init(void)
SSLeay_version(SSLEAY_VERSION), version);
}
+#if (SIZEOF_VOID_P >= 8 && \
+ !defined(OPENSSL_NO_EC) && \
+ OPENSSL_VERSION_NUMBER >= OPENSSL_V_SERIES(1,0,1))
+ if (version >= OPENSSL_V_SERIES(1,0,1)) {
+ /* Warn if we could *almost* be running with much faster ECDH.
+ If we're built for a 64-bit target, using OpenSSL 1.0.1, but we
+ don't have one of the built-in __uint128-based speedups, we are
+ just one build operation away from an accelerated handshake.
+
+ (We could be looking at OPENSSL_NO_EC_NISTP_64_GCC_128 instead of
+ doing this test, but that gives compile-time options, not runtime
+ behavior.)
+ */
+ EC_KEY *key = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1);
+ const EC_GROUP *g = key ? EC_KEY_get0_group(key) : NULL;
+ const EC_METHOD *m = g ? EC_GROUP_method_of(g) : NULL;
+ const int warn = (m == EC_GFp_simple_method() ||
+ m == EC_GFp_mont_method() ||
+ m == EC_GFp_nist_method());
+ EC_KEY_free(key);
+
+ if (warn)
+ log_notice(LD_GENERAL, "We were built to run on a 64-bit CPU, with "
+ "OpenSSL 1.0.1 or later, but with a version of OpenSSL "
+ "that apparently lacks accelerated support for the NIST "
+ "P-224 and P-256 groups. Building openssl with such "
+ "support (using the enable-ec_nistp_64_gcc_128 option "
+ "when configuring it) would make ECDH much faster.");
+ }
+#endif
+
tor_tls_allocate_tor_tls_object_ex_data_index();
tls_library_is_initialized = 1;
@@ -567,9 +606,10 @@ tor_x509_name_new(const char *cname)
/** Generate and sign an X509 certificate with the public key <b>rsa</b>,
* signed by the private key <b>rsa_sign</b>. The commonName of the
* certificate will be <b>cname</b>; the commonName of the issuer will be
- * <b>cname_sign</b>. The cert will be valid for <b>cert_lifetime</b> seconds
- * starting from now. Return a certificate on success, NULL on
- * failure.
+ * <b>cname_sign</b>. The cert will be valid for <b>cert_lifetime</b>
+ * seconds, starting from some time in the past.
+ *
+ * Return a certificate on success, NULL on failure.
*/
static X509 *
tor_tls_create_certificate(crypto_pk_t *rsa,
@@ -591,15 +631,20 @@ tor_tls_create_certificate(crypto_pk_t *rsa,
tor_tls_init();
- start_time = time(NULL);
+ /* Make sure we're part-way through the certificate lifetime, rather
+ * than having it start right now. Don't choose quite uniformly, since
+ * then we might pick a time where we're about to expire. Lastly, be
+ * sure to start on a day boundary. */
+ start_time = time(NULL) - crypto_rand_int(cert_lifetime) + 2*24*3600;
+ start_time -= start_time % (24*3600);
tor_assert(rsa);
tor_assert(cname);
tor_assert(rsa_sign);
tor_assert(cname_sign);
- if (!(sign_pkey = _crypto_pk_get_evp_pkey(rsa_sign,1)))
+ if (!(sign_pkey = crypto_pk_get_evp_pkey_(rsa_sign,1)))
goto error;
- if (!(pkey = _crypto_pk_get_evp_pkey(rsa,0)))
+ if (!(pkey = crypto_pk_get_evp_pkey_(rsa,0)))
goto error;
if (!(x509 = X509_new()))
goto error;
@@ -647,7 +692,7 @@ tor_tls_create_certificate(crypto_pk_t *rsa,
if (pkey)
EVP_PKEY_free(pkey);
if (serial_number)
- BN_free(serial_number);
+ BN_clear_free(serial_number);
if (name)
X509_NAME_free(name);
if (name_issuer)
@@ -657,11 +702,58 @@ tor_tls_create_certificate(crypto_pk_t *rsa,
#undef SERIAL_NUMBER_SIZE
}
-/** List of ciphers that servers should select from.*/
+/** List of ciphers that servers should select from when the client might be
+ * claiming extra unsupported ciphers in order to avoid fingerprinting. */
#define SERVER_CIPHER_LIST \
(TLS1_TXT_DHE_RSA_WITH_AES_256_SHA ":" \
TLS1_TXT_DHE_RSA_WITH_AES_128_SHA ":" \
SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA)
+
+/** List of ciphers that servers should select from when we actually have
+ * our choice of what cipher to use. */
+const char UNRESTRICTED_SERVER_CIPHER_LIST[] =
+ /* This list is autogenerated with the gen_server_ciphers.py script;
+ * don't hand-edit it. */
+#ifdef TLS1_TXT_ECDHE_RSA_WITH_AES_256_GCM_SHA384
+ TLS1_TXT_ECDHE_RSA_WITH_AES_256_GCM_SHA384 ":"
+#endif
+#ifdef TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256
+ TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256 ":"
+#endif
+#ifdef TLS1_TXT_ECDHE_RSA_WITH_AES_256_SHA384
+ TLS1_TXT_ECDHE_RSA_WITH_AES_256_SHA384 ":"
+#endif
+#ifdef TLS1_TXT_ECDHE_RSA_WITH_AES_128_SHA256
+ TLS1_TXT_ECDHE_RSA_WITH_AES_128_SHA256 ":"
+#endif
+#ifdef TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA
+ TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA ":"
+#endif
+#ifdef TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA
+ TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA ":"
+#endif
+#ifdef TLS1_TXT_DHE_RSA_WITH_AES_256_GCM_SHA384
+ TLS1_TXT_DHE_RSA_WITH_AES_256_GCM_SHA384 ":"
+#endif
+#ifdef TLS1_TXT_DHE_RSA_WITH_AES_128_GCM_SHA256
+ TLS1_TXT_DHE_RSA_WITH_AES_128_GCM_SHA256 ":"
+#endif
+#ifdef TLS1_TXT_DHE_RSA_WITH_AES_256_SHA256
+ TLS1_TXT_DHE_RSA_WITH_AES_256_SHA256 ":"
+#endif
+#ifdef TLS1_TXT_DHE_RSA_WITH_AES_128_SHA256
+ TLS1_TXT_DHE_RSA_WITH_AES_128_SHA256 ":"
+#endif
+ /* Required */
+ TLS1_TXT_DHE_RSA_WITH_AES_256_SHA ":"
+ /* Required */
+ TLS1_TXT_DHE_RSA_WITH_AES_128_SHA ":"
+#ifdef TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA
+ TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA ":"
+#endif
+ /* Required */
+ SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA;
+
/* Note: to set up your own private testing network with link crypto
* disabled, set your Tors' cipher list to
* (SSL3_TXT_RSA_NULL_SHA). If you do this, you won't be able to communicate
@@ -728,24 +820,24 @@ tor_cert_new(X509 *x509_cert)
tor_cert_t *cert;
EVP_PKEY *pkey;
RSA *rsa;
- int length, length2;
- unsigned char *cp;
+ int length;
+ unsigned char *buf = NULL;
if (!x509_cert)
return NULL;
- length = i2d_X509(x509_cert, NULL);
+ length = i2d_X509(x509_cert, &buf);
cert = tor_malloc_zero(sizeof(tor_cert_t));
- if (length <= 0) {
+ if (length <= 0 || buf == NULL) {
tor_free(cert);
log_err(LD_CRYPTO, "Couldn't get length of encoded x509 certificate");
X509_free(x509_cert);
return NULL;
}
cert->encoded_len = (size_t) length;
- cp = cert->encoded = tor_malloc(length);
- length2 = i2d_X509(x509_cert, &cp);
- tor_assert(length2 == length);
+ cert->encoded = tor_malloc(length);
+ memcpy(cert->encoded, buf, length);
+ OPENSSL_free(buf);
cert->cert = x509_cert;
@@ -754,7 +846,7 @@ tor_cert_new(X509 *x509_cert)
if ((pkey = X509_get_pubkey(x509_cert)) &&
(rsa = EVP_PKEY_get1_RSA(pkey))) {
- crypto_pk_t *pk = _crypto_new_pk_from_rsa(rsa);
+ crypto_pk_t *pk = crypto_new_pk_from_rsa_(rsa);
crypto_pk_get_all_digests(pk, &cert->pkey_digests);
cert->pkey_digests_set = 1;
crypto_pk_free(pk);
@@ -778,13 +870,8 @@ tor_cert_decode(const uint8_t *certificate, size_t certificate_len)
if (certificate_len > INT_MAX)
return NULL;
-#if OPENSSL_VERSION_NUMBER < OPENSSL_V_SERIES(0,9,8)
- /* This ifdef suppresses a type warning. Take out this case once everybody
- * is using OpenSSL 0.9.8 or later. */
- x509 = d2i_X509(NULL, (unsigned char**)&cp, (int)certificate_len);
-#else
x509 = d2i_X509(NULL, &cp, (int)certificate_len);
-#endif
+
if (!x509)
return NULL; /* Couldn't decode */
if (cp - certificate != (int)certificate_len) {
@@ -901,36 +988,11 @@ tor_tls_cert_get_key(tor_cert_t *cert)
EVP_PKEY_free(pkey);
return NULL;
}
- result = _crypto_new_pk_from_rsa(rsa);
+ result = crypto_new_pk_from_rsa_(rsa);
EVP_PKEY_free(pkey);
return result;
}
-/** Return true iff <b>a</b> and <b>b</b> represent the same public key. */
-static int
-pkey_eq(EVP_PKEY *a, EVP_PKEY *b)
-{
- /* We'd like to do this, but openssl 0.9.7 doesn't have it:
- return EVP_PKEY_cmp(a,b) == 1;
- */
- unsigned char *a_enc=NULL, *b_enc=NULL, *a_ptr, *b_ptr;
- int a_len1, b_len1, a_len2, b_len2, result;
- a_len1 = i2d_PublicKey(a, NULL);
- b_len1 = i2d_PublicKey(b, NULL);
- if (a_len1 != b_len1)
- return 0;
- a_ptr = a_enc = tor_malloc(a_len1);
- b_ptr = b_enc = tor_malloc(b_len1);
- a_len2 = i2d_PublicKey(a, &a_ptr);
- b_len2 = i2d_PublicKey(b, &b_ptr);
- tor_assert(a_len2 == a_len1);
- tor_assert(b_len2 == b_len1);
- result = tor_memeq(a_enc, b_enc, a_len1);
- tor_free(a_enc);
- tor_free(b_enc);
- return result;
-}
-
/** Return true iff the other side of <b>tls</b> has authenticated to us, and
* the key certified in <b>cert</b> is the same as the key they used to do it.
*/
@@ -946,7 +1008,7 @@ tor_tls_cert_matches_key(const tor_tls_t *tls, const tor_cert_t *cert)
link_key = X509_get_pubkey(peercert);
cert_key = X509_get_pubkey(cert->cert);
- result = link_key && cert_key && pkey_eq(cert_key, link_key);
+ result = link_key && cert_key && EVP_PKEY_cmp(cert_key, link_key) == 1;
X509_free(peercert);
if (link_key)
@@ -1019,17 +1081,20 @@ tor_tls_context_incref(tor_tls_context_t *ctx)
/** Create new global client and server TLS contexts.
*
* If <b>server_identity</b> is NULL, this will not generate a server
- * TLS context. If <b>is_public_server</b> is non-zero, this will use
+ * TLS context. If TOR_TLS_CTX_IS_PUBLIC_SERVER is set in <b>flags</b>, use
* the same TLS context for incoming and outgoing connections, and
- * ignore <b>client_identity</b>. */
+ * ignore <b>client_identity</b>. If one of TOR_TLS_CTX_USE_ECDHE_P{224,256}
+ * is set in <b>flags</b>, use that ECDHE group if possible; otherwise use
+ * the default ECDHE group. */
int
-tor_tls_context_init(int is_public_server,
+tor_tls_context_init(unsigned flags,
crypto_pk_t *client_identity,
crypto_pk_t *server_identity,
unsigned int key_lifetime)
{
int rv1 = 0;
int rv2 = 0;
+ const int is_public_server = flags & TOR_TLS_CTX_IS_PUBLIC_SERVER;
if (is_public_server) {
tor_tls_context_t *new_ctx;
@@ -1039,7 +1104,7 @@ tor_tls_context_init(int is_public_server,
rv1 = tor_tls_context_init_one(&server_tls_context,
server_identity,
- key_lifetime, 0);
+ key_lifetime, flags, 0);
if (rv1 >= 0) {
new_ctx = server_tls_context;
@@ -1056,6 +1121,7 @@ tor_tls_context_init(int is_public_server,
rv1 = tor_tls_context_init_one(&server_tls_context,
server_identity,
key_lifetime,
+ flags,
0);
} else {
tor_tls_context_t *old_ctx = server_tls_context;
@@ -1069,6 +1135,7 @@ tor_tls_context_init(int is_public_server,
rv2 = tor_tls_context_init_one(&client_tls_context,
client_identity,
key_lifetime,
+ flags,
1);
}
@@ -1085,10 +1152,12 @@ static int
tor_tls_context_init_one(tor_tls_context_t **ppcontext,
crypto_pk_t *identity,
unsigned int key_lifetime,
+ unsigned int flags,
int is_client)
{
tor_tls_context_t *new_ctx = tor_tls_context_new(identity,
key_lifetime,
+ flags,
is_client);
tor_tls_context_t *old_ctx = *ppcontext;
@@ -1112,7 +1181,7 @@ tor_tls_context_init_one(tor_tls_context_t **ppcontext,
*/
static tor_tls_context_t *
tor_tls_context_new(crypto_pk_t *identity, unsigned int key_lifetime,
- int is_client)
+ unsigned flags, int is_client)
{
crypto_pk_t *rsa = NULL, *rsa_auth = NULL;
EVP_PKEY *pkey = NULL;
@@ -1150,7 +1219,7 @@ tor_tls_context_new(crypto_pk_t *identity, unsigned int key_lifetime,
authcert = tor_tls_create_certificate(rsa_auth, identity, nickname, nn2,
key_lifetime);
if (!cert || !idcert || !authcert) {
- log(LOG_WARN, LD_CRYPTO, "Error creating certificate");
+ log_warn(LD_CRYPTO, "Error creating certificate");
goto error;
}
}
@@ -1181,6 +1250,10 @@ tor_tls_context_new(crypto_pk_t *identity, unsigned int key_lifetime,
goto error;
SSL_CTX_set_options(result->ctx, SSL_OP_NO_SSLv2);
+ /* Prefer the server's ordering of ciphers: the client's ordering has
+ * historically been chosen for fingerprinting resistance. */
+ SSL_CTX_set_options(result->ctx, SSL_OP_CIPHER_SERVER_PREFERENCE);
+
/* Disable TLS1.1 and TLS1.2 if they exist. We need to do this to
* workaround a bug present in all OpenSSL 1.0.1 versions (as of 1
* June 2012), wherein renegotiating while using one of these TLS
@@ -1189,19 +1262,29 @@ tor_tls_context_new(crypto_pk_t *identity, unsigned int key_lifetime,
* version. Once some version of OpenSSL does TLS1.1 and TLS1.2
* renegotiation properly, we can turn them back on when built with
* that version. */
+#if OPENSSL_VERSION_NUMBER < OPENSSL_V(1,0,1,'e')
#ifdef SSL_OP_NO_TLSv1_2
SSL_CTX_set_options(result->ctx, SSL_OP_NO_TLSv1_2);
#endif
#ifdef SSL_OP_NO_TLSv1_1
SSL_CTX_set_options(result->ctx, SSL_OP_NO_TLSv1_1);
#endif
+#endif
+
/* Disable TLS tickets if they're supported. We never want to use them;
* using them can make our perfect forward secrecy a little worse, *and*
* create an opportunity to fingerprint us (since it's unusual to use them
* with TLS sessions turned off).
+ *
+ * In 0.2.4, clients advertise support for them though, to avoid a TLS
+ * distinguishability vector. This can give us worse PFS, though, if we
+ * get a server that doesn't set SSL_OP_NO_TICKET. With luck, there will
+ * be few such servers by the time 0.2.4 is more stable.
*/
#ifdef SSL_OP_NO_TICKET
- SSL_CTX_set_options(result->ctx, SSL_OP_NO_TICKET);
+ if (! is_client) {
+ SSL_CTX_set_options(result->ctx, SSL_OP_NO_TICKET);
+ }
#endif
if (
@@ -1222,6 +1305,7 @@ tor_tls_context_new(crypto_pk_t *identity, unsigned int key_lifetime,
}
SSL_CTX_set_options(result->ctx, SSL_OP_SINGLE_DH_USE);
+ SSL_CTX_set_options(result->ctx, SSL_OP_SINGLE_ECDH_USE);
#ifdef SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION
SSL_CTX_set_options(result->ctx,
@@ -1257,7 +1341,7 @@ tor_tls_context_new(crypto_pk_t *identity, unsigned int key_lifetime,
SSL_CTX_set_session_cache_mode(result->ctx, SSL_SESS_CACHE_OFF);
if (!is_client) {
tor_assert(rsa);
- if (!(pkey = _crypto_pk_get_evp_pkey(rsa,1)))
+ if (!(pkey = crypto_pk_get_evp_pkey_(rsa,1)))
goto error;
if (!SSL_CTX_use_PrivateKey(result->ctx, pkey))
goto error;
@@ -1269,9 +1353,29 @@ tor_tls_context_new(crypto_pk_t *identity, unsigned int key_lifetime,
{
crypto_dh_t *dh = crypto_dh_new(DH_TYPE_TLS);
tor_assert(dh);
- SSL_CTX_set_tmp_dh(result->ctx, _crypto_dh_get_dh(dh));
+ SSL_CTX_set_tmp_dh(result->ctx, crypto_dh_get_dh_(dh));
crypto_dh_free(dh);
}
+#if (!defined(OPENSSL_NO_EC) && \
+ OPENSSL_VERSION_NUMBER >= OPENSSL_V_SERIES(1,0,0))
+ if (! is_client) {
+ int nid;
+ EC_KEY *ec_key;
+ if (flags & TOR_TLS_CTX_USE_ECDHE_P224)
+ nid = NID_secp224r1;
+ else if (flags & TOR_TLS_CTX_USE_ECDHE_P256)
+ nid = NID_X9_62_prime256v1;
+ else
+ nid = NID_X9_62_prime256v1;
+ /* Use P-256 for ECDHE. */
+ ec_key = EC_KEY_new_by_curve_name(nid);
+ if (ec_key != NULL) /*XXXX Handle errors? */
+ SSL_CTX_set_tmp_ecdh(result->ctx, ec_key);
+ EC_KEY_free(ec_key);
+ }
+#else
+ (void)flags;
+#endif
SSL_CTX_set_verify(result->ctx, SSL_VERIFY_PEER,
always_accept_verify_cb);
/* let us realloc bufs that we're writing from */
@@ -1307,29 +1411,120 @@ tor_tls_context_new(crypto_pk_t *identity, unsigned int key_lifetime,
return NULL;
}
+/** Invoked when a TLS state changes: log the change at severity 'debug' */
+static void
+tor_tls_debug_state_callback(const SSL *ssl, int type, int val)
+{
+ log_debug(LD_HANDSHAKE, "SSL %p is now in state %s [type=%d,val=%d].",
+ ssl, SSL_state_string_long(ssl), type, val);
+}
+
+/* Return the name of the negotiated ciphersuite in use on <b>tls</b> */
+const char *
+tor_tls_get_ciphersuite_name(tor_tls_t *tls)
+{
+ return SSL_get_cipher(tls->ssl);
+}
+
#ifdef V2_HANDSHAKE_SERVER
-/** Return true iff the cipher list suggested by the client for <b>ssl</b> is
- * a list that indicates that the client knows how to do the v2 TLS connection
- * handshake. */
+
+/* Here's the old V2 cipher list we sent from 0.2.1.1-alpha up to
+ * 0.2.3.17-beta. If a client is using this list, we can't believe the ciphers
+ * that it claims to support. We'll prune this list to remove the ciphers
+ * *we* don't recognize. */
+static uint16_t v2_cipher_list[] = {
+ 0xc00a, /* TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA */
+ 0xc014, /* TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA */
+ 0x0039, /* TLS1_TXT_DHE_RSA_WITH_AES_256_SHA */
+ 0x0038, /* TLS1_TXT_DHE_DSS_WITH_AES_256_SHA */
+ 0xc00f, /* TLS1_TXT_ECDH_RSA_WITH_AES_256_CBC_SHA */
+ 0xc005, /* TLS1_TXT_ECDH_ECDSA_WITH_AES_256_CBC_SHA */
+ 0x0035, /* TLS1_TXT_RSA_WITH_AES_256_SHA */
+ 0xc007, /* TLS1_TXT_ECDHE_ECDSA_WITH_RC4_128_SHA */
+ 0xc009, /* TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA */
+ 0xc011, /* TLS1_TXT_ECDHE_RSA_WITH_RC4_128_SHA */
+ 0xc013, /* TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA */
+ 0x0033, /* TLS1_TXT_DHE_RSA_WITH_AES_128_SHA */
+ 0x0032, /* TLS1_TXT_DHE_DSS_WITH_AES_128_SHA */
+ 0xc00c, /* TLS1_TXT_ECDH_RSA_WITH_RC4_128_SHA */
+ 0xc00e, /* TLS1_TXT_ECDH_RSA_WITH_AES_128_CBC_SHA */
+ 0xc002, /* TLS1_TXT_ECDH_ECDSA_WITH_RC4_128_SHA */
+ 0xc004, /* TLS1_TXT_ECDH_ECDSA_WITH_AES_128_CBC_SHA */
+ 0x0004, /* SSL3_TXT_RSA_RC4_128_MD5 */
+ 0x0005, /* SSL3_TXT_RSA_RC4_128_SHA */
+ 0x002f, /* TLS1_TXT_RSA_WITH_AES_128_SHA */
+ 0xc008, /* TLS1_TXT_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA */
+ 0xc012, /* TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA */
+ 0x0016, /* SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA */
+ 0x0013, /* SSL3_TXT_EDH_DSS_DES_192_CBC3_SHA */
+ 0xc00d, /* TLS1_TXT_ECDH_RSA_WITH_DES_192_CBC3_SHA */
+ 0xc003, /* TLS1_TXT_ECDH_ECDSA_WITH_DES_192_CBC3_SHA */
+ 0xfeff, /* SSL3_TXT_RSA_FIPS_WITH_3DES_EDE_CBC_SHA */
+ 0x000a, /* SSL3_TXT_RSA_DES_192_CBC3_SHA */
+ 0
+};
+/** Have we removed the unrecognized ciphers from v2_cipher_list yet? */
+static int v2_cipher_list_pruned = 0;
+
+/** Remove from v2_cipher_list every cipher that we don't support, so that
+ * comparing v2_cipher_list to a client's cipher list will give a sensible
+ * result. */
+static void
+prune_v2_cipher_list(void)
+{
+ uint16_t *inp, *outp;
+ const SSL_METHOD *m = SSLv23_method();
+
+ inp = outp = v2_cipher_list;
+ while (*inp) {
+ unsigned char cipherid[3];
+ const SSL_CIPHER *cipher;
+ /* Is there no better way to do this? */
+ set_uint16(cipherid, htons(*inp));
+ cipherid[2] = 0; /* If ssl23_get_cipher_by_char finds no cipher starting
+ * with a two-byte 'cipherid', it may look for a v2
+ * cipher with the appropriate 3 bytes. */
+ cipher = m->get_cipher_by_char(cipherid);
+ if (cipher) {
+ tor_assert((cipher->id & 0xffff) == *inp);
+ *outp++ = *inp++;
+ } else {
+ inp++;
+ }
+ }
+ *outp = 0;
+
+ v2_cipher_list_pruned = 1;
+}
+
+/** Examine the client cipher list in <b>ssl</b>, and determine what kind of
+ * client it is. Return one of CIPHERS_ERR, CIPHERS_V1, CIPHERS_V2,
+ * CIPHERS_UNRESTRICTED.
+ **/
static int
-tor_tls_client_is_using_v2_ciphers(const SSL *ssl, const char *address)
+tor_tls_classify_client_ciphers(const SSL *ssl,
+ STACK_OF(SSL_CIPHER) *peer_ciphers)
{
- int i;
- SSL_SESSION *session;
+ int i, res;
+ tor_tls_t *tor_tls;
+ if (PREDICT_UNLIKELY(!v2_cipher_list_pruned))
+ prune_v2_cipher_list();
+
+ tor_tls = tor_tls_get_by_ssl(ssl);
+ if (tor_tls && tor_tls->client_cipher_list_type)
+ return tor_tls->client_cipher_list_type;
+
/* If we reached this point, we just got a client hello. See if there is
* a cipher list. */
- if (!(session = SSL_get_session((SSL *)ssl))) {
- log_info(LD_NET, "No session on TLS?");
- return 0;
- }
- if (!session->ciphers) {
+ if (!peer_ciphers) {
log_info(LD_NET, "No ciphers on session");
- return 0;
+ res = CIPHERS_ERR;
+ goto done;
}
/* Now we need to see if there are any ciphers whose presence means we're
* dealing with an updated Tor. */
- for (i = 0; i < sk_SSL_CIPHER_num(session->ciphers); ++i) {
- SSL_CIPHER *cipher = sk_SSL_CIPHER_value(session->ciphers, i);
+ for (i = 0; i < sk_SSL_CIPHER_num(peer_ciphers); ++i) {
+ SSL_CIPHER *cipher = sk_SSL_CIPHER_value(peer_ciphers, i);
const char *ciphername = SSL_CIPHER_get_name(cipher);
if (strcmp(ciphername, TLS1_TXT_DHE_RSA_WITH_AES_128_SHA) &&
strcmp(ciphername, TLS1_TXT_DHE_RSA_WITH_AES_256_SHA) &&
@@ -1337,34 +1532,67 @@ tor_tls_client_is_using_v2_ciphers(const SSL *ssl, const char *address)
strcmp(ciphername, "(NONE)")) {
log_debug(LD_NET, "Got a non-version-1 cipher called '%s'", ciphername);
// return 1;
- goto dump_list;
+ goto v2_or_higher;
}
}
- return 0;
- dump_list:
+ res = CIPHERS_V1;
+ goto done;
+ v2_or_higher:
+ {
+ const uint16_t *v2_cipher = v2_cipher_list;
+ for (i = 0; i < sk_SSL_CIPHER_num(peer_ciphers); ++i) {
+ SSL_CIPHER *cipher = sk_SSL_CIPHER_value(peer_ciphers, i);
+ uint16_t id = cipher->id & 0xffff;
+ if (id == 0x00ff) /* extended renegotiation indicator. */
+ continue;
+ if (!id || id != *v2_cipher) {
+ res = CIPHERS_UNRESTRICTED;
+ goto dump_ciphers;
+ }
+ ++v2_cipher;
+ }
+ if (*v2_cipher != 0) {
+ res = CIPHERS_UNRESTRICTED;
+ goto dump_ciphers;
+ }
+ res = CIPHERS_V2;
+ }
+
+ dump_ciphers:
{
smartlist_t *elts = smartlist_new();
char *s;
- for (i = 0; i < sk_SSL_CIPHER_num(session->ciphers); ++i) {
- SSL_CIPHER *cipher = sk_SSL_CIPHER_value(session->ciphers, i);
+ for (i = 0; i < sk_SSL_CIPHER_num(peer_ciphers); ++i) {
+ SSL_CIPHER *cipher = sk_SSL_CIPHER_value(peer_ciphers, i);
const char *ciphername = SSL_CIPHER_get_name(cipher);
smartlist_add(elts, (char*)ciphername);
}
s = smartlist_join_strings(elts, ":", 0, NULL);
- log_debug(LD_NET, "Got a non-version-1 cipher list from %s. It is: '%s'",
- address, s);
+ log_debug(LD_NET, "Got a %s V2/V3 cipher list from %s. It is: '%s'",
+ (res == CIPHERS_V2) ? "fictitious" : "real", ADDR(tor_tls), s);
tor_free(s);
smartlist_free(elts);
}
- return 1;
+ done:
+ if (tor_tls)
+ return tor_tls->client_cipher_list_type = res;
+
+ return res;
}
-/** Invoked when a TLS state changes: log the change at severity 'debug' */
-static void
-tor_tls_debug_state_callback(const SSL *ssl, int type, int val)
+/** Return true iff the cipher list suggested by the client for <b>ssl</b> is
+ * a list that indicates that the client knows how to do the v2 TLS connection
+ * handshake. */
+static int
+tor_tls_client_is_using_v2_ciphers(const SSL *ssl)
{
- log_debug(LD_HANDSHAKE, "SSL %p is now in state %s [type=%d,val=%d].",
- ssl, SSL_state_string_long(ssl), type, val);
+ SSL_SESSION *session;
+ if (!(session = SSL_get_session((SSL *)ssl))) {
+ log_info(LD_NET, "No session on TLS?");
+ return CIPHERS_ERR;
+ }
+
+ return tor_tls_classify_client_ciphers(ssl, session->ciphers) >= CIPHERS_V2;
}
/** Invoked when we're accepting a connection on <b>ssl</b>, and the connection
@@ -1400,7 +1628,7 @@ tor_tls_server_info_callback(const SSL *ssl, int type, int val)
}
/* Now check the cipher list. */
- if (tor_tls_client_is_using_v2_ciphers(ssl, ADDR(tls))) {
+ if (tor_tls_client_is_using_v2_ciphers(ssl)) {
if (tls->wasV2Handshake)
return; /* We already turned this stuff off for the first handshake;
* This is a renegotiation. */
@@ -1426,6 +1654,48 @@ tor_tls_server_info_callback(const SSL *ssl, int type, int val)
}
#endif
+#if OPENSSL_VERSION_NUMBER >= OPENSSL_V_SERIES(1,0,0)
+/** Callback to get invoked on a server after we've read the list of ciphers
+ * the client supports, but before we pick our own ciphersuite.
+ *
+ * We can't abuse an info_cb for this, since by the time one of the
+ * client_hello info_cbs is called, we've already picked which ciphersuite to
+ * use.
+ *
+ * Technically, this function is an abuse of this callback, since the point of
+ * a session_secret_cb is to try to set up and/or verify a shared-secret for
+ * authentication on the fly. But as long as we return 0, we won't actually be
+ * setting up a shared secret, and all will be fine.
+ */
+static int
+tor_tls_session_secret_cb(SSL *ssl, void *secret, int *secret_len,
+ STACK_OF(SSL_CIPHER) *peer_ciphers,
+ SSL_CIPHER **cipher, void *arg)
+{
+ (void) secret;
+ (void) secret_len;
+ (void) peer_ciphers;
+ (void) cipher;
+ (void) arg;
+
+ if (tor_tls_classify_client_ciphers(ssl, peer_ciphers) ==
+ CIPHERS_UNRESTRICTED) {
+ SSL_set_cipher_list(ssl, UNRESTRICTED_SERVER_CIPHER_LIST);
+ }
+
+ SSL_set_session_secret_cb(ssl, NULL, NULL);
+
+ return 0;
+}
+static void
+tor_tls_setup_session_secret_cb(tor_tls_t *tls)
+{
+ SSL_set_session_secret_cb(tls->ssl, tor_tls_session_secret_cb, NULL);
+}
+#else
+#define tor_tls_setup_session_secret_cb(tls) STMT_NIL
+#endif
+
/** Explain which ciphers we're missing. */
static void
log_unsupported_ciphers(smartlist_t *unsupported)
@@ -1625,6 +1895,9 @@ tor_tls_new(int sock, int isServer)
SSL_set_info_callback(result->ssl, tor_tls_debug_state_callback);
}
+ if (isServer)
+ tor_tls_setup_session_secret_cb(result);
+
/* Not expected to get called. */
tls_log_errors(NULL, LOG_WARN, LD_NET, "creating tor_tls_t object");
return result;
@@ -1721,6 +1994,10 @@ tor_tls_free(tor_tls_t *tls)
if (!tls)
return;
tor_assert(tls->ssl);
+ {
+ size_t r,w;
+ tor_tls_get_n_raw_bytes(tls,&r,&w); /* ensure written_by_tls is updated */
+ }
#ifdef SSL_set_tlsext_host_name
SSL_set_tlsext_host_name(tls->ssl, NULL);
#endif
@@ -1761,7 +2038,7 @@ tor_tls_read(tor_tls_t *tls, char *cp, size_t len)
return r;
}
err = tor_tls_get_error(tls, r, CATCH_ZERO, "reading", LOG_DEBUG, LD_NET);
- if (err == _TOR_TLS_ZERORETURN || err == TOR_TLS_CLOSE) {
+ if (err == TOR_TLS_ZERORETURN_ || err == TOR_TLS_CLOSE) {
log_debug(LD_NET,"read returned r=%d; TLS is closed",r);
tls->state = TOR_TLS_ST_CLOSED;
return TOR_TLS_CLOSE;
@@ -1772,6 +2049,13 @@ tor_tls_read(tor_tls_t *tls, char *cp, size_t len)
}
}
+/** Total number of bytes that we've used TLS to send. Used to track TLS
+ * overhead. */
+static uint64_t total_bytes_written_over_tls = 0;
+/** Total number of bytes that TLS has put on the network for us. Used to
+ * track TLS overhead. */
+static uint64_t total_bytes_written_by_tls = 0;
+
/** Underlying function for TLS writing. Write up to <b>n</b>
* characters from <b>cp</b> onto <b>tls</b>. On success, returns the
* number of characters written. On failure, returns TOR_TLS_ERROR,
@@ -1798,6 +2082,7 @@ tor_tls_write(tor_tls_t *tls, const char *cp, size_t n)
r = SSL_write(tls->ssl, cp, (int)n);
err = tor_tls_get_error(tls, r, 0, "writing", LOG_INFO, LD_NET);
if (err == TOR_TLS_DONE) {
+ total_bytes_written_over_tls += r;
return r;
}
if (err == TOR_TLS_WANTWRITE || err == TOR_TLS_WANTREAD) {
@@ -1866,7 +2151,7 @@ tor_tls_finish_handshake(tor_tls_t *tls)
/* There doesn't seem to be a clear OpenSSL API to clear mode flags. */
tls->ssl->mode &= ~SSL_MODE_NO_AUTO_CHAIN;
#ifdef V2_HANDSHAKE_SERVER
- if (tor_tls_client_is_using_v2_ciphers(tls->ssl, ADDR(tls))) {
+ if (tor_tls_client_is_using_v2_ciphers(tls->ssl)) {
/* This check is redundant, but back when we did it in the callback,
* we might have not been able to look up the tor_tls_t if the code
* was buggy. Fixing that. */
@@ -1974,7 +2259,7 @@ tor_tls_shutdown(tor_tls_t *tls)
} while (r>0);
err = tor_tls_get_error(tls, r, CATCH_ZERO, "reading to shut down",
LOG_INFO, LD_NET);
- if (err == _TOR_TLS_ZERORETURN) {
+ if (err == TOR_TLS_ZERORETURN_) {
tls->state = TOR_TLS_ST_GOTCLOSE;
/* fall through... */
} else {
@@ -1990,11 +2275,11 @@ tor_tls_shutdown(tor_tls_t *tls)
}
err = tor_tls_get_error(tls, r, CATCH_SYSCALL|CATCH_ZERO, "shutting down",
LOG_INFO, LD_NET);
- if (err == _TOR_TLS_SYSCALL) {
+ if (err == TOR_TLS_SYSCALL_) {
/* The underlying TCP connection closed while we were shutting down. */
tls->state = TOR_TLS_ST_CLOSED;
return TOR_TLS_DONE;
- } else if (err == _TOR_TLS_ZERORETURN) {
+ } else if (err == TOR_TLS_ZERORETURN_) {
/* The TLS connection says that it sent a shutdown record, but
* isn't done shutting down yet. Make sure that this hasn't
* happened before, then go back to the start of the function
@@ -2002,7 +2287,7 @@ tor_tls_shutdown(tor_tls_t *tls)
*/
if (tls->state == TOR_TLS_ST_GOTCLOSE ||
tls->state == TOR_TLS_ST_SENTCLOSE) {
- log(LOG_WARN, LD_NET,
+ log_warn(LD_NET,
"TLS returned \"half-closed\" value while already half-closed");
return TOR_TLS_ERROR_MISC;
}
@@ -2050,9 +2335,10 @@ log_cert_lifetime(int severity, const X509 *cert, const char *problem)
char mytime[33];
time_t now = time(NULL);
struct tm tm;
+ size_t n;
if (problem)
- log(severity, LD_GENERAL,
+ tor_log(severity, LD_GENERAL,
"Certificate %s. Either their clock is set wrong, or your clock "
"is wrong.",
problem);
@@ -2075,11 +2361,17 @@ log_cert_lifetime(int severity, const X509 *cert, const char *problem)
BIO_get_mem_ptr(bio, &buf);
s2 = tor_strndup(buf->data, buf->length);
- strftime(mytime, 32, "%b %d %H:%M:%S %Y GMT", tor_gmtime_r(&now, &tm));
-
- log(severity, LD_GENERAL,
- "(certificate lifetime runs from %s through %s. Your time is %s.)",
- s1,s2,mytime);
+ n = strftime(mytime, 32, "%b %d %H:%M:%S %Y UTC", tor_gmtime_r(&now, &tm));
+ if (n > 0) {
+ tor_log(severity, LD_GENERAL,
+ "(certificate lifetime runs from %s through %s. Your time is %s.)",
+ s1,s2,mytime);
+ } else {
+ tor_log(severity, LD_GENERAL,
+ "(certificate lifetime runs from %s through %s. "
+ "Couldn't get your time.)",
+ s1, s2);
+ }
end:
/* Not expected to get invoked */
@@ -2164,7 +2456,7 @@ tor_tls_verify(int severity, tor_tls_t *tls, crypto_pk_t **identity_key)
rsa = EVP_PKEY_get1_RSA(id_pkey);
if (!rsa)
goto done;
- *identity_key = _crypto_new_pk_from_rsa(rsa);
+ *identity_key = crypto_new_pk_from_rsa_(rsa);
r = 0;
@@ -2287,18 +2579,31 @@ tor_tls_get_n_raw_bytes(tor_tls_t *tls, size_t *n_read, size_t *n_written)
"r=%lu, last_read=%lu, w=%lu, last_written=%lu",
r, tls->last_read_count, w, tls->last_write_count);
}
+ total_bytes_written_by_tls += *n_written;
tls->last_read_count = r;
tls->last_write_count = w;
}
+/** Return a ratio of the bytes that TLS has sent to the bytes that we've told
+ * it to send. Used to track whether our TLS records are getting too tiny. */
+MOCK_IMPL(double,
+tls_get_write_overhead_ratio,(void))
+{
+ if (total_bytes_written_over_tls == 0)
+ return 1.0;
+
+ return U64_TO_DBL(total_bytes_written_by_tls) /
+ U64_TO_DBL(total_bytes_written_over_tls);
+}
+
/** Implement check_no_tls_errors: If there are any pending OpenSSL
* errors, log an error message. */
void
-_check_no_tls_errors(const char *fname, int line)
+check_no_tls_errors_(const char *fname, int line)
{
if (ERR_peek_error() == 0)
return;
- log(LOG_WARN, LD_CRYPTO, "Unhandled OpenSSL errors found at %s:%d: ",
+ log_warn(LD_CRYPTO, "Unhandled OpenSSL errors found at %s:%d: ",
tor_fix_source_file(fname), line);
tls_log_errors(NULL, LOG_WARN, LD_NET, NULL);
}
diff --git a/src/common/tortls.h b/src/common/tortls.h
index 491a5419d..a76ba3bc7 100644
--- a/src/common/tortls.h
+++ b/src/common/tortls.h
@@ -1,10 +1,10 @@
/* Copyright (c) 2003, Roger Dingledine
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
-#ifndef _TOR_TORTLS_H
-#define _TOR_TORTLS_H
+#ifndef TOR_TORTLS_H
+#define TOR_TORTLS_H
/**
* \file tortls.h
@@ -13,6 +13,7 @@
#include "crypto.h"
#include "compat.h"
+#include "testsupport.h"
/* Opaque structure to hold a TLS connection. */
typedef struct tor_tls_t tor_tls_t;
@@ -21,7 +22,7 @@ typedef struct tor_tls_t tor_tls_t;
typedef struct tor_cert_t tor_cert_t;
/* Possible return values for most tor_tls_* functions. */
-#define _MIN_TOR_TLS_ERROR_VAL -9
+#define MIN_TOR_TLS_ERROR_VAL_ -9
#define TOR_TLS_ERROR_MISC -9
/* Rename to unexpected close or something. XXXX */
#define TOR_TLS_ERROR_IO -8
@@ -54,7 +55,12 @@ const char *tor_tls_err_to_string(int err);
void tor_tls_get_state_description(tor_tls_t *tls, char *buf, size_t sz);
void tor_tls_free_all(void);
-int tor_tls_context_init(int is_public_server,
+
+#define TOR_TLS_CTX_IS_PUBLIC_SERVER (1u<<0)
+#define TOR_TLS_CTX_USE_ECDHE_P256 (1u<<1)
+#define TOR_TLS_CTX_USE_ECDHE_P224 (1u<<2)
+
+int tor_tls_context_init(unsigned flags,
crypto_pk_t *client_identity,
crypto_pk_t *server_identity,
unsigned int key_lifetime);
@@ -90,6 +96,8 @@ void tor_tls_get_buffer_sizes(tor_tls_t *tls,
size_t *rbuf_capacity, size_t *rbuf_bytes,
size_t *wbuf_capacity, size_t *wbuf_bytes);
+MOCK_DECL(double, tls_get_write_overhead_ratio, (void));
+
int tor_tls_used_v1_handshake(tor_tls_t *tls);
int tor_tls_received_v3_certificate(tor_tls_t *tls);
int tor_tls_get_num_server_handshakes(tor_tls_t *tls);
@@ -98,9 +106,9 @@ int tor_tls_get_tlssecrets(tor_tls_t *tls, uint8_t *secrets_out);
/* Log and abort if there are unhandled TLS errors in OpenSSL's error stack.
*/
-#define check_no_tls_errors() _check_no_tls_errors(__FILE__,__LINE__)
+#define check_no_tls_errors() check_no_tls_errors_(__FILE__,__LINE__)
-void _check_no_tls_errors(const char *fname, int line);
+void check_no_tls_errors_(const char *fname, int line);
void tor_tls_log_one_error(tor_tls_t *tls, unsigned long err,
int severity, int domain, const char *doing);
@@ -129,6 +137,7 @@ int tor_tls_cert_is_valid(int severity,
const tor_cert_t *cert,
const tor_cert_t *signing_cert,
int check_rsa_1024);
+const char *tor_tls_get_ciphersuite_name(tor_tls_t *tls);
#endif
diff --git a/src/common/util.c b/src/common/util.c
index 6fb597a3a..e27036a84 100644
--- a/src/common/util.c
+++ b/src/common/util.c
@@ -1,6 +1,6 @@
/* Copyright (c) 2003, Roger Dingledine
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -20,11 +20,12 @@
#define UTIL_PRIVATE
#include "util.h"
#include "torlog.h"
-#undef log
#include "crypto.h"
#include "torint.h"
#include "container.h"
#include "address.h"
+#include "sandbox.h"
+#include "backtrace.h"
#ifdef _WIN32
#include <io.h>
@@ -39,8 +40,8 @@
#endif
/* math.h needs this on Linux */
-#ifndef __USE_ISOC99
-#define __USE_ISOC99 1
+#ifndef _USE_ISOC99_
+#define _USE_ISOC99_ 1
#endif
#include <math.h>
#include <stdlib.h>
@@ -95,6 +96,23 @@
#endif
/* =====
+ * Assertion helper.
+ * ===== */
+/** Helper for tor_assert: report the assertion failure. */
+void
+tor_assertion_failed_(const char *fname, unsigned int line,
+ const char *func, const char *expr)
+{
+ char buf[256];
+ log_err(LD_BUG, "%s:%u: %s: Assertion %s failed; aborting.",
+ fname, line, func, expr);
+ tor_snprintf(buf, sizeof(buf),
+ "Assertion %s failed in %s at %s:%u",
+ expr, func, fname, line);
+ log_backtrace(LOG_ERR, LD_BUG, buf);
+}
+
+/* =====
* Memory management
* ===== */
#ifdef USE_DMALLOC
@@ -125,7 +143,7 @@
* ignored otherwise.
*/
void *
-_tor_malloc(size_t size DMALLOC_PARAMS)
+tor_malloc_(size_t size DMALLOC_PARAMS)
{
void *result;
@@ -159,7 +177,7 @@ _tor_malloc(size_t size DMALLOC_PARAMS)
* the process on error. (Same as calloc(size,1), but never returns NULL.)
*/
void *
-_tor_malloc_zero(size_t size DMALLOC_PARAMS)
+tor_malloc_zero_(size_t size DMALLOC_PARAMS)
{
/* You may ask yourself, "wouldn't it be smart to use calloc instead of
* malloc+memset? Perhaps libc's calloc knows some nifty optimization trick
@@ -167,7 +185,7 @@ _tor_malloc_zero(size_t size DMALLOC_PARAMS)
* we're allocating something very big (it knows if it just got the memory
* from the OS in a pre-zeroed state). We don't want to use tor_malloc_zero
* for big stuff, so we don't bother with calloc. */
- void *result = _tor_malloc(size DMALLOC_FN_ARGS);
+ void *result = tor_malloc_(size DMALLOC_FN_ARGS);
memset(result, 0, size);
return result;
}
@@ -184,7 +202,7 @@ _tor_malloc_zero(size_t size DMALLOC_PARAMS)
* smaller than size). Don't do that then.
*/
void *
-_tor_calloc(size_t nmemb, size_t size DMALLOC_PARAMS)
+tor_calloc_(size_t nmemb, size_t size DMALLOC_PARAMS)
{
/* You may ask yourself, "wouldn't it be smart to use calloc instead of
* malloc+memset? Perhaps libc's calloc knows some nifty optimization trick
@@ -197,7 +215,7 @@ _tor_calloc(size_t nmemb, size_t size DMALLOC_PARAMS)
tor_assert(nmemb < max_nmemb);
- result = _tor_malloc_zero((nmemb * size) DMALLOC_FN_ARGS);
+ result = tor_malloc_zero_((nmemb * size) DMALLOC_FN_ARGS);
return result;
}
@@ -206,7 +224,7 @@ _tor_calloc(size_t nmemb, size_t size DMALLOC_PARAMS)
* terminate. (Like realloc(ptr,size), but never returns NULL.)
*/
void *
-_tor_realloc(void *ptr, size_t size DMALLOC_PARAMS)
+tor_realloc_(void *ptr, size_t size DMALLOC_PARAMS)
{
void *result;
@@ -230,7 +248,7 @@ _tor_realloc(void *ptr, size_t size DMALLOC_PARAMS)
* NULL.)
*/
char *
-_tor_strdup(const char *s DMALLOC_PARAMS)
+tor_strdup_(const char *s DMALLOC_PARAMS)
{
char *dup;
tor_assert(s);
@@ -254,12 +272,12 @@ _tor_strdup(const char *s DMALLOC_PARAMS)
* NULL.)
*/
char *
-_tor_strndup(const char *s, size_t n DMALLOC_PARAMS)
+tor_strndup_(const char *s, size_t n DMALLOC_PARAMS)
{
char *dup;
tor_assert(s);
tor_assert(n < SIZE_T_CEILING);
- dup = _tor_malloc((n+1) DMALLOC_FN_ARGS);
+ dup = tor_malloc_((n+1) DMALLOC_FN_ARGS);
/* Performance note: Ordinarily we prefer strlcpy to strncpy. But
* this function gets called a whole lot, and platform strncpy is
* much faster than strlcpy when strlen(s) is much longer than n.
@@ -272,55 +290,38 @@ _tor_strndup(const char *s, size_t n DMALLOC_PARAMS)
/** Allocate a chunk of <b>len</b> bytes, with the same contents as the
* <b>len</b> bytes starting at <b>mem</b>. */
void *
-_tor_memdup(const void *mem, size_t len DMALLOC_PARAMS)
+tor_memdup_(const void *mem, size_t len DMALLOC_PARAMS)
{
char *dup;
tor_assert(len < SIZE_T_CEILING);
tor_assert(mem);
- dup = _tor_malloc(len DMALLOC_FN_ARGS);
+ dup = tor_malloc_(len DMALLOC_FN_ARGS);
+ memcpy(dup, mem, len);
+ return dup;
+}
+
+/** As tor_memdup(), but add an extra 0 byte at the end of the resulting
+ * memory. */
+void *
+tor_memdup_nulterm_(const void *mem, size_t len DMALLOC_PARAMS)
+{
+ char *dup;
+ tor_assert(len < SIZE_T_CEILING+1);
+ tor_assert(mem);
+ dup = tor_malloc_(len+1 DMALLOC_FN_ARGS);
memcpy(dup, mem, len);
+ dup[len] = '\0';
return dup;
}
/** Helper for places that need to take a function pointer to the right
* spelling of "free()". */
void
-_tor_free(void *mem)
+tor_free_(void *mem)
{
tor_free(mem);
}
-#if defined(HAVE_MALLOC_GOOD_SIZE) && !defined(HAVE_MALLOC_GOOD_SIZE_PROTOTYPE)
-/* Some version of Mac OSX have malloc_good_size in their libc, but not
- * actually defined in malloc/malloc.h. We detect this and work around it by
- * prototyping.
- */
-extern size_t malloc_good_size(size_t size);
-#endif
-
-/** Allocate and return a chunk of memory of size at least *<b>size</b>, using
- * the same resources we would use to malloc *<b>sizep</b>. Set *<b>sizep</b>
- * to the number of usable bytes in the chunk of memory. */
-void *
-_tor_malloc_roundup(size_t *sizep DMALLOC_PARAMS)
-{
-#ifdef HAVE_MALLOC_GOOD_SIZE
- tor_assert(*sizep < SIZE_T_CEILING);
- *sizep = malloc_good_size(*sizep);
- return _tor_malloc(*sizep DMALLOC_FN_ARGS);
-#elif 0 && defined(HAVE_MALLOC_USABLE_SIZE) && !defined(USE_DMALLOC)
- /* Never use malloc_usable_size(); it makes valgrind really unhappy,
- * and doesn't win much in terms of usable space where it exists. */
- void *result;
- tor_assert(*sizep < SIZE_T_CEILING);
- result = _tor_malloc(*sizep DMALLOC_FN_ARGS);
- *sizep = malloc_usable_size(result);
- return result;
-#else
- return _tor_malloc(*sizep DMALLOC_FN_ARGS);
-#endif
-}
-
/** Call the platform malloc info function, and dump the results to the log at
* level <b>severity</b>. If no such function exists, do nothing. */
void
@@ -354,8 +355,8 @@ tor_log_mallinfo(int severity)
* ===== */
/**
- * Returns the natural logarithm of d base 2. We define this wrapper here so
- * as to make it easier not to conflict with Tor's log() macro.
+ * Returns the natural logarithm of d base e. We defined this wrapper here so
+ * to avoid conflicts with old versions of tor_log(), which were named log().
*/
double
tor_mathlog(double d)
@@ -363,9 +364,9 @@ tor_mathlog(double d)
return log(d);
}
-/** Return the long integer closest to d. We define this wrapper here so
- * that not all users of math.h need to use the right incancations to get
- * the c99 functions. */
+/** Return the long integer closest to <b>d</b>. We define this wrapper
+ * here so that not all users of math.h need to use the right incantations
+ * to get the c99 functions. */
long
tor_lround(double d)
{
@@ -378,6 +379,21 @@ tor_lround(double d)
#endif
}
+/** Return the 64-bit integer closest to d. We define this wrapper here so
+ * that not all users of math.h need to use the right incantations to get the
+ * c99 functions. */
+int64_t
+tor_llround(double d)
+{
+#if defined(HAVE_LLROUND)
+ return (int64_t)llround(d);
+#elif defined(HAVE_RINT)
+ return (int64_t)rint(d);
+#else
+ return (int64_t)(d > 0 ? d + 0.5 : ceil(d - 0.5));
+#endif
+}
+
/** Returns floor(log2(u64)). If u64 is 0, (incorrectly) returns 0. */
int
tor_log2(uint64_t u64)
@@ -410,12 +426,24 @@ tor_log2(uint64_t u64)
return r;
}
-/** Return the power of 2 closest to <b>u64</b>. */
+/** Return the power of 2 in range [1,UINT64_MAX] closest to <b>u64</b>. If
+ * there are two powers of 2 equally close, round down. */
uint64_t
round_to_power_of_2(uint64_t u64)
{
- int lg2 = tor_log2(u64);
- uint64_t low = U64_LITERAL(1) << lg2, high = U64_LITERAL(1) << (lg2+1);
+ int lg2;
+ uint64_t low;
+ uint64_t high;
+ if (u64 == 0)
+ return 1;
+
+ lg2 = tor_log2(u64);
+ low = U64_LITERAL(1) << lg2;
+
+ if (lg2 == 63)
+ return low;
+
+ high = U64_LITERAL(1) << (lg2+1);
if (high - u64 < u64 - low)
return high;
else
@@ -655,6 +683,16 @@ fast_memcmpstart(const void *mem, size_t memlen,
return fast_memcmp(mem, prefix, plen);
}
+/** Given a nul-terminated string s, set every character before the nul
+ * to zero. */
+void
+tor_strclear(char *s)
+{
+ while (*s) {
+ *s++ = '\0';
+ }
+}
+
/** Return a pointer to the first char of s that is not whitespace and
* not a comment, or to the terminating NUL if no such character exists.
*/
@@ -860,6 +898,39 @@ tor_digest_is_zero(const char *digest)
return tor_memeq(digest, ZERO_DIGEST, DIGEST_LEN);
}
+/** Return true if <b>string</b> is a valid 'key=[value]' string.
+ * "value" is optional, to indicate the empty string. Log at logging
+ * <b>severity</b> if something ugly happens. */
+int
+string_is_key_value(int severity, const char *string)
+{
+ /* position of equal sign in string */
+ const char *equal_sign_pos = NULL;
+
+ tor_assert(string);
+
+ if (strlen(string) < 2) { /* "x=" is shortest args string */
+ tor_log(severity, LD_GENERAL, "'%s' is too short to be a k=v value.",
+ escaped(string));
+ return 0;
+ }
+
+ equal_sign_pos = strchr(string, '=');
+ if (!equal_sign_pos) {
+ tor_log(severity, LD_GENERAL, "'%s' is not a k=v value.", escaped(string));
+ return 0;
+ }
+
+ /* validate that the '=' is not in the beginning of the string. */
+ if (equal_sign_pos == string) {
+ tor_log(severity, LD_GENERAL, "'%s' is not a valid k=v value.",
+ escaped(string));
+ return 0;
+ }
+
+ return 1;
+}
+
/** Return true iff the DIGEST256_LEN bytes in digest are all zero. */
int
tor_digest256_is_zero(const char *digest)
@@ -1013,7 +1084,7 @@ base16_encode(char *dest, size_t destlen, const char *src, size_t srclen)
/** Helper: given a hex digit, return its value, or -1 if it isn't hex. */
static INLINE int
-_hex_decode_digit(char c)
+hex_decode_digit_(char c)
{
switch (c) {
case '0': return 0;
@@ -1041,7 +1112,7 @@ _hex_decode_digit(char c)
int
hex_decode_digit(char c)
{
- return _hex_decode_digit(c);
+ return hex_decode_digit_(c);
}
/** Given a hexadecimal string of <b>srclen</b> bytes in <b>src</b>, decode it
@@ -1059,8 +1130,8 @@ base16_decode(char *dest, size_t destlen, const char *src, size_t srclen)
return -1;
end = src+srclen;
while (src<end) {
- v1 = _hex_decode_digit(*src);
- v2 = _hex_decode_digit(*(src+1));
+ v1 = hex_decode_digit_(*src);
+ v2 = hex_decode_digit_(*(src+1));
if (v1<0||v2<0)
return -1;
*(uint8_t*)dest = (v1<<4)|v2;
@@ -1160,130 +1231,58 @@ esc_for_log(const char *s)
const char *
escaped(const char *s)
{
- static char *_escaped_val = NULL;
- tor_free(_escaped_val);
+ static char *escaped_val_ = NULL;
+ tor_free(escaped_val_);
if (s)
- _escaped_val = esc_for_log(s);
+ escaped_val_ = esc_for_log(s);
else
- _escaped_val = NULL;
+ escaped_val_ = NULL;
- return _escaped_val;
+ return escaped_val_;
}
-/** Rudimentary string wrapping code: given a un-wrapped <b>string</b> (no
- * newlines!), break the string into newline-terminated lines of no more than
- * <b>width</b> characters long (not counting newline) and insert them into
- * <b>out</b> in order. Precede the first line with prefix0, and subsequent
- * lines with prefixRest.
- */
-/* This uses a stupid greedy wrapping algorithm right now:
- * - For each line:
- * - Try to fit as much stuff as possible, but break on a space.
- * - If the first "word" of the line will extend beyond the allowable
- * width, break the word at the end of the width.
- */
-void
-wrap_string(smartlist_t *out, const char *string, size_t width,
- const char *prefix0, const char *prefixRest)
+/** Return a newly allocated string equal to <b>string</b>, except that every
+ * character in <b>chars_to_escape</b> is preceded by a backslash. */
+char *
+tor_escape_str_for_pt_args(const char *string, const char *chars_to_escape)
{
- size_t p0Len, pRestLen, pCurLen;
- const char *eos, *prefixCur;
- tor_assert(out);
+ char *new_string = NULL;
+ char *new_cp = NULL;
+ size_t length, new_length;
+
tor_assert(string);
- tor_assert(width);
- if (!prefix0)
- prefix0 = "";
- if (!prefixRest)
- prefixRest = "";
-
- p0Len = strlen(prefix0);
- pRestLen = strlen(prefixRest);
- tor_assert(width > p0Len && width > pRestLen);
- eos = strchr(string, '\0');
- tor_assert(eos);
- pCurLen = p0Len;
- prefixCur = prefix0;
-
- while ((eos-string)+pCurLen > width) {
- const char *eol = string + width - pCurLen;
- while (eol > string && *eol != ' ')
- --eol;
- /* eol is now the last space that can fit, or the start of the string. */
- if (eol > string) {
- size_t line_len = (eol-string) + pCurLen + 2;
- char *line = tor_malloc(line_len);
- memcpy(line, prefixCur, pCurLen);
- memcpy(line+pCurLen, string, eol-string);
- line[line_len-2] = '\n';
- line[line_len-1] = '\0';
- smartlist_add(out, line);
- string = eol + 1;
- } else {
- size_t line_len = width + 2;
- char *line = tor_malloc(line_len);
- memcpy(line, prefixCur, pCurLen);
- memcpy(line+pCurLen, string, width - pCurLen);
- line[line_len-2] = '\n';
- line[line_len-1] = '\0';
- smartlist_add(out, line);
- string += width-pCurLen;
- }
- prefixCur = prefixRest;
- pCurLen = pRestLen;
- }
- if (string < eos) {
- size_t line_len = (eos-string) + pCurLen + 2;
- char *line = tor_malloc(line_len);
- memcpy(line, prefixCur, pCurLen);
- memcpy(line+pCurLen, string, eos-string);
- line[line_len-2] = '\n';
- line[line_len-1] = '\0';
- smartlist_add(out, line);
+ length = strlen(string);
+
+ if (!length) /* If we were given the empty string, return the same. */
+ return tor_strdup("");
+ /* (new_length > SIZE_MAX) => ((length * 2) + 1 > SIZE_MAX) =>
+ (length*2 > SIZE_MAX - 1) => (length > (SIZE_MAX - 1)/2) */
+ if (length > (SIZE_MAX - 1)/2) /* check for overflow */
+ return NULL;
+
+ /* this should be enough even if all characters must be escaped */
+ new_length = (length * 2) + 1;
+
+ new_string = new_cp = tor_malloc(new_length);
+
+ while (*string) {
+ if (strchr(chars_to_escape, *string))
+ *new_cp++ = '\\';
+
+ *new_cp++ = *string++;
}
+
+ *new_cp = '\0'; /* NUL-terminate the new string */
+
+ return new_string;
}
/* =====
* Time
* ===== */
-/**
- * Converts struct timeval to a double value.
- * Preserves microsecond precision, but just barely.
- * Error is approx +/- 0.1 usec when dealing with epoch values.
- */
-double
-tv_to_double(const struct timeval *tv)
-{
- double conv = tv->tv_sec;
- conv += tv->tv_usec/1000000.0;
- return conv;
-}
-
-/**
- * Converts timeval to milliseconds.
- */
-int64_t
-tv_to_msec(const struct timeval *tv)
-{
- int64_t conv = ((int64_t)tv->tv_sec)*1000L;
- /* Round ghetto-style */
- conv += ((int64_t)tv->tv_usec+500)/1000L;
- return conv;
-}
-
-/**
- * Converts timeval to microseconds.
- */
-int64_t
-tv_to_usec(const struct timeval *tv)
-{
- int64_t conv = ((int64_t)tv->tv_sec)*1000000L;
- conv += tv->tv_usec;
- return conv;
-}
-
/** Return the number of microseconds elapsed between *start and *end.
*/
long
@@ -1322,6 +1321,18 @@ tv_mdiff(const struct timeval *start, const struct timeval *end)
return mdiff;
}
+/**
+ * Converts timeval to milliseconds.
+ */
+int64_t
+tv_to_msec(const struct timeval *tv)
+{
+ int64_t conv = ((int64_t)tv->tv_sec)*1000L;
+ /* Round ghetto-style */
+ conv += ((int64_t)tv->tv_usec+500)/1000L;
+ return conv;
+}
+
/** Yield true iff <b>y</b> is a leap-year. */
#define IS_LEAPYEAR(y) (!(y % 4) && ((y % 100) || !(y % 400)))
/** Helper: Return the number of leap-days between Jan 1, y1 and Jan 1, y2. */
@@ -1336,7 +1347,7 @@ n_leapdays(int y1, int y2)
static const int days_per_month[] =
{ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
-/** Compute a time_t given a struct tm. The result is given in GMT, and
+/** Compute a time_t given a struct tm. The result is given in UTC, and
* does not account for leap seconds. Return 0 on success, -1 on failure.
*/
int
@@ -1377,10 +1388,11 @@ static const char *MONTH_NAMES[] =
{ "Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
-/** Set <b>buf</b> to the RFC1123 encoding of the GMT value of <b>t</b>.
+/** Set <b>buf</b> to the RFC1123 encoding of the UTC value of <b>t</b>.
* The buffer must be at least RFC1123_TIME_LEN+1 bytes long.
*
- * (RFC1123 format is Fri, 29 Sep 2006 15:54:20 GMT)
+ * (RFC1123 format is "Fri, 29 Sep 2006 15:54:20 GMT". Note the "GMT"
+ * rather than "UTC".)
*/
void
format_rfc1123_time(char *buf, time_t t)
@@ -1398,8 +1410,11 @@ format_rfc1123_time(char *buf, time_t t)
memcpy(buf+8, MONTH_NAMES[tm.tm_mon], 3);
}
-/** Parse the RFC1123 encoding of some time (in GMT) from <b>buf</b>,
- * and store the result in *<b>t</b>.
+/** Parse the (a subset of) the RFC1123 encoding of some time (in UTC) from
+ * <b>buf</b>, and store the result in *<b>t</b>.
+ *
+ * Note that we only accept the subset generated by format_rfc1123_time above,
+ * not the full range of formats suggested by RFC 1123.
*
* Return 0 on success, -1 on failure.
*/
@@ -1501,7 +1516,7 @@ void
format_iso_time_nospace_usec(char *buf, const struct timeval *tv)
{
tor_assert(tv);
- format_iso_time_nospace(buf, tv->tv_sec);
+ format_iso_time_nospace(buf, (time_t)tv->tv_sec);
tor_snprintf(buf+ISO_TIME_LEN, 8, ".%06d", (int)tv->tv_usec);
}
@@ -1815,7 +1830,8 @@ file_status(const char *fname)
int r;
f = tor_strdup(fname);
clean_name_for_stat(f);
- r = stat(f, &st);
+ log_debug(LD_FS, "stat()ing %s", f);
+ r = stat(sandbox_intern_string(f), &st);
tor_free(f);
if (r) {
if (errno == ENOENT) {
@@ -1827,6 +1843,10 @@ file_status(const char *fname)
return FN_DIR;
else if (st.st_mode & S_IFREG)
return FN_FILE;
+#ifndef _WIN32
+ else if (st.st_mode & S_IFIFO)
+ return FN_FILE;
+#endif
else
return FN_ERROR;
}
@@ -1851,7 +1871,7 @@ check_private_dir(const char *dirname, cpd_check_t check,
char *f;
#ifndef _WIN32
int mask;
- struct passwd *pw = NULL;
+ const struct passwd *pw = NULL;
uid_t running_uid;
gid_t running_gid;
#else
@@ -1861,7 +1881,8 @@ check_private_dir(const char *dirname, cpd_check_t check,
tor_assert(dirname);
f = tor_strdup(dirname);
clean_name_for_stat(f);
- r = stat(f, &st);
+ log_debug(LD_FS, "stat()ing %s", f);
+ r = stat(sandbox_intern_string(f), &st);
tor_free(f);
if (r) {
if (errno != ENOENT) {
@@ -1897,7 +1918,7 @@ check_private_dir(const char *dirname, cpd_check_t check,
if (effective_user) {
/* Look up the user and group information.
* If we have a problem, bail out. */
- pw = getpwnam(effective_user);
+ pw = tor_getpwnam(effective_user);
if (pw == NULL) {
log_warn(LD_CONFIG, "Error setting configured user: %s not found",
effective_user);
@@ -1911,13 +1932,13 @@ check_private_dir(const char *dirname, cpd_check_t check,
}
if (st.st_uid != running_uid) {
- struct passwd *pw = NULL;
+ const struct passwd *pw = NULL;
char *process_ownername = NULL;
- pw = getpwuid(running_uid);
+ pw = tor_getpwuid(running_uid);
process_ownername = pw ? tor_strdup(pw->pw_name) : tor_strdup("<unknown>");
- pw = getpwuid(st.st_uid);
+ pw = tor_getpwuid(st.st_uid);
log_warn(LD_FS, "%s is not owned by this user (%s, %d) but by "
"%s (%d). Perhaps you are running Tor as the wrong user?",
@@ -1983,7 +2004,8 @@ write_str_to_file(const char *fname, const char *str, int bin)
#ifdef _WIN32
if (!bin && strchr(str, '\r')) {
log_warn(LD_BUG,
- "We're writing a text string that already contains a CR.");
+ "We're writing a text string that already contains a CR to %s",
+ escaped(fname));
}
#endif
return write_bytes_to_file(fname, str, strlen(str), bin);
@@ -2047,8 +2069,10 @@ start_writing_to_file(const char *fname, int open_flags, int mode,
open_flags &= ~O_EXCL;
new_file->rename_on_close = 1;
}
+#if O_BINARY != 0
if (open_flags & O_BINARY)
new_file->binary = 1;
+#endif
new_file->fd = tor_open_cloexec(open_name, open_flags, mode);
if (new_file->fd < 0) {
@@ -2120,6 +2144,7 @@ static int
finish_writing_to_file_impl(open_file_t *file_data, int abort_write)
{
int r = 0;
+
tor_assert(file_data && file_data->filename);
if (file_data->stdio_file) {
if (fclose(file_data->stdio_file)) {
@@ -2136,7 +2161,13 @@ finish_writing_to_file_impl(open_file_t *file_data, int abort_write)
if (file_data->rename_on_close) {
tor_assert(file_data->tempname && file_data->filename);
if (abort_write) {
- unlink(file_data->tempname);
+ int res = unlink(file_data->tempname);
+ if (res != 0) {
+ /* We couldn't unlink and we'll leave a mess behind */
+ log_warn(LD_FS, "Failed to unlink %s: %s",
+ file_data->tempname, strerror(errno));
+ r = -1;
+ }
} else {
tor_assert(strcmp(file_data->filename, file_data->tempname));
if (replace_file(file_data->tempname, file_data->filename)) {
@@ -2202,12 +2233,20 @@ write_chunks_to_file_impl(const char *fname, const smartlist_t *chunks,
return -1;
}
-/** Given a smartlist of sized_chunk_t, write them atomically to a file
- * <b>fname</b>, overwriting or creating the file as necessary. */
+/** Given a smartlist of sized_chunk_t, write them to a file
+ * <b>fname</b>, overwriting or creating the file as necessary.
+ * If <b>no_tempfile</b> is 0 then the file will be written
+ * atomically. */
int
-write_chunks_to_file(const char *fname, const smartlist_t *chunks, int bin)
+write_chunks_to_file(const char *fname, const smartlist_t *chunks, int bin,
+ int no_tempfile)
{
int flags = OPEN_FLAGS_REPLACE|(bin?O_BINARY:O_TEXT);
+
+ if (no_tempfile) {
+ /* O_APPEND stops write_chunks_to_file from using tempfiles */
+ flags |= O_APPEND;
+ }
return write_chunks_to_file_impl(fname, chunks, flags);
}
@@ -2228,9 +2267,9 @@ write_bytes_to_file_impl(const char *fname, const char *str, size_t len,
/** As write_str_to_file, but does not assume a NUL-terminated
* string. Instead, we write <b>len</b> bytes, starting at <b>str</b>. */
-int
-write_bytes_to_file(const char *fname, const char *str, size_t len,
- int bin)
+MOCK_IMPL(int,
+write_bytes_to_file,(const char *fname, const char *str, size_t len,
+ int bin))
{
return write_bytes_to_file_impl(fname, str, len,
OPEN_FLAGS_REPLACE|(bin?O_BINARY:O_TEXT));
@@ -2257,6 +2296,46 @@ write_bytes_to_new_file(const char *fname, const char *str, size_t len,
(bin?O_BINARY:O_TEXT));
}
+/**
+ * Read the contents of the open file <b>fd</b> presuming it is a FIFO
+ * (or similar) file descriptor for which the size of the file isn't
+ * known ahead of time. Return NULL on failure, and a NUL-terminated
+ * string on success. On success, set <b>sz_out</b> to the number of
+ * bytes read.
+ */
+char *
+read_file_to_str_until_eof(int fd, size_t max_bytes_to_read, size_t *sz_out)
+{
+ ssize_t r;
+ size_t pos = 0;
+ char *string = NULL;
+ size_t string_max = 0;
+
+ if (max_bytes_to_read+1 >= SIZE_T_CEILING)
+ return NULL;
+
+ do {
+ /* XXXX This "add 1K" approach is a little goofy; if we care about
+ * performance here, we should be doubling. But in practice we shouldn't
+ * be using this function on big files anyway. */
+ string_max = pos + 1024;
+ if (string_max > max_bytes_to_read)
+ string_max = max_bytes_to_read + 1;
+ string = tor_realloc(string, string_max);
+ r = read(fd, string + pos, string_max - pos - 1);
+ if (r < 0) {
+ tor_free(string);
+ return NULL;
+ }
+
+ pos += r;
+ } while (r > 0 && pos < max_bytes_to_read);
+
+ *sz_out = pos;
+ string[pos] = '\0';
+ return string;
+}
+
/** Read the contents of <b>filename</b> into a newly allocated
* string; return the string on success or NULL on failure.
*
@@ -2305,8 +2384,26 @@ read_file_to_str(const char *filename, int flags, struct stat *stat_out)
return NULL;
}
- if ((uint64_t)(statbuf.st_size)+1 >= SIZE_T_CEILING)
+#ifndef _WIN32
+/** When we detect that we're reading from a FIFO, don't read more than
+ * this many bytes. It's insane overkill for most uses. */
+#define FIFO_READ_MAX (1024*1024)
+ if (S_ISFIFO(statbuf.st_mode)) {
+ size_t sz = 0;
+ string = read_file_to_str_until_eof(fd, FIFO_READ_MAX, &sz);
+ if (string && stat_out) {
+ statbuf.st_size = sz;
+ memcpy(stat_out, &statbuf, sizeof(struct stat));
+ }
+ close(fd);
+ return string;
+ }
+#endif
+
+ if ((uint64_t)(statbuf.st_size)+1 >= SIZE_T_CEILING) {
+ close(fd);
return NULL;
+ }
string = tor_malloc((size_t)(statbuf.st_size+1));
@@ -2466,10 +2563,13 @@ unescape_string(const char *s, char **result, size_t *size_out)
* key portion and *<b>value_out</b> to a new string holding the value portion
* of the line, and return a pointer to the start of the next line. If we run
* out of data, return a pointer to the end of the string. If we encounter an
- * error, return NULL.
+ * error, return NULL and set *<b>err_out</b> (if provided) to an error
+ * message.
*/
const char *
-parse_config_line_from_str(const char *line, char **key_out, char **value_out)
+parse_config_line_from_str_verbose(const char *line, char **key_out,
+ char **value_out,
+ const char **err_out)
{
/* I believe the file format here is supposed to be:
FILE = (EMPTYLINE | LINE)* (EMPTYLASTLINE | LASTLINE)?
@@ -2543,12 +2643,18 @@ parse_config_line_from_str(const char *line, char **key_out, char **value_out)
/* Find the end of the line. */
if (*line == '\"') { // XXX No continuation handling is done here
- if (!(line = unescape_string(line, value_out, NULL)))
- return NULL;
+ if (!(line = unescape_string(line, value_out, NULL))) {
+ if (err_out)
+ *err_out = "Invalid escape sequence in quoted string";
+ return NULL;
+ }
while (*line == ' ' || *line == '\t')
++line;
- if (*line && *line != '#' && *line != '\n')
+ if (*line && *line != '#' && *line != '\n') {
+ if (err_out)
+ *err_out = "Excess data after quoted string";
return NULL;
+ }
} else {
/* Look for the end of the line. */
while (*line && *line != '\n' && (*line != '#' || continuation)) {
@@ -2683,9 +2789,9 @@ digit_to_num(char d)
* success, store the result in <b>out</b>, advance bufp to the next
* character, and return 0. On failure, return -1. */
static int
-scan_unsigned(const char **bufp, unsigned *out, int width, int base)
+scan_unsigned(const char **bufp, unsigned long *out, int width, int base)
{
- unsigned result = 0;
+ unsigned long result = 0;
int scanned_so_far = 0;
const int hex = base==16;
tor_assert(base == 10 || base == 16);
@@ -2697,8 +2803,8 @@ scan_unsigned(const char **bufp, unsigned *out, int width, int base)
while (**bufp && (hex?TOR_ISXDIGIT(**bufp):TOR_ISDIGIT(**bufp))
&& scanned_so_far < width) {
int digit = hex?hex_decode_digit(*(*bufp)++):digit_to_num(*(*bufp)++);
- unsigned new_result = result * base + digit;
- if (new_result > UINT32_MAX || new_result < result)
+ unsigned long new_result = result * base + digit;
+ if (new_result < result)
return -1; /* over/underflow. */
result = new_result;
++scanned_so_far;
@@ -2711,6 +2817,89 @@ scan_unsigned(const char **bufp, unsigned *out, int width, int base)
return 0;
}
+/** Helper: Read an signed int from *<b>bufp</b> of up to <b>width</b>
+ * characters. (Handle arbitrary width if <b>width</b> is less than 0.) On
+ * success, store the result in <b>out</b>, advance bufp to the next
+ * character, and return 0. On failure, return -1. */
+static int
+scan_signed(const char **bufp, long *out, int width)
+{
+ int neg = 0;
+ unsigned long result = 0;
+
+ if (!bufp || !*bufp || !out)
+ return -1;
+ if (width<0)
+ width=MAX_SCANF_WIDTH;
+
+ if (**bufp == '-') {
+ neg = 1;
+ ++*bufp;
+ --width;
+ }
+
+ if (scan_unsigned(bufp, &result, width, 10) < 0)
+ return -1;
+
+ if (neg) {
+ if (result > ((unsigned long)LONG_MAX) + 1)
+ return -1; /* Underflow */
+ *out = -(long)result;
+ } else {
+ if (result > LONG_MAX)
+ return -1; /* Overflow */
+ *out = (long)result;
+ }
+
+ return 0;
+}
+
+/** Helper: Read a decimal-formatted double from *<b>bufp</b> of up to
+ * <b>width</b> characters. (Handle arbitrary width if <b>width</b> is less
+ * than 0.) On success, store the result in <b>out</b>, advance bufp to the
+ * next character, and return 0. On failure, return -1. */
+static int
+scan_double(const char **bufp, double *out, int width)
+{
+ int neg = 0;
+ double result = 0;
+ int scanned_so_far = 0;
+
+ if (!bufp || !*bufp || !out)
+ return -1;
+ if (width<0)
+ width=MAX_SCANF_WIDTH;
+
+ if (**bufp == '-') {
+ neg = 1;
+ ++*bufp;
+ }
+
+ while (**bufp && TOR_ISDIGIT(**bufp) && scanned_so_far < width) {
+ const int digit = digit_to_num(*(*bufp)++);
+ result = result * 10 + digit;
+ ++scanned_so_far;
+ }
+ if (**bufp == '.') {
+ double fracval = 0, denominator = 1;
+ ++*bufp;
+ ++scanned_so_far;
+ while (**bufp && TOR_ISDIGIT(**bufp) && scanned_so_far < width) {
+ const int digit = digit_to_num(*(*bufp)++);
+ fracval = fracval * 10 + digit;
+ denominator *= 10;
+ ++scanned_so_far;
+ }
+ result += fracval / denominator;
+ }
+
+ if (!scanned_so_far) /* No actual digits scanned */
+ return -1;
+
+ *out = neg ? -result : result;
+ return 0;
+}
+
/** Helper: copy up to <b>width</b> non-space characters from <b>bufp</b> to
* <b>out</b>. Make sure <b>out</b> is nul-terminated. Advance <b>bufp</b>
* to the next non-space character or the EOS. */
@@ -2747,6 +2936,7 @@ tor_vsscanf(const char *buf, const char *pattern, va_list ap)
}
} else {
int width = -1;
+ int longmod = 0;
++pattern;
if (TOR_ISDIGIT(*pattern)) {
width = digit_to_num(*pattern++);
@@ -2759,17 +2949,57 @@ tor_vsscanf(const char *buf, const char *pattern, va_list ap)
if (!width) /* No zero-width things. */
return -1;
}
+ if (*pattern == 'l') {
+ longmod = 1;
+ ++pattern;
+ }
if (*pattern == 'u' || *pattern == 'x') {
- unsigned *u = va_arg(ap, unsigned *);
+ unsigned long u;
const int base = (*pattern == 'u') ? 10 : 16;
if (!*buf)
return n_matched;
- if (scan_unsigned(&buf, u, width, base)<0)
+ if (scan_unsigned(&buf, &u, width, base)<0)
+ return n_matched;
+ if (longmod) {
+ unsigned long *out = va_arg(ap, unsigned long *);
+ *out = u;
+ } else {
+ unsigned *out = va_arg(ap, unsigned *);
+ if (u > UINT_MAX)
+ return n_matched;
+ *out = (unsigned) u;
+ }
+ ++pattern;
+ ++n_matched;
+ } else if (*pattern == 'f') {
+ double *d = va_arg(ap, double *);
+ if (!longmod)
+ return -1; /* float not supported */
+ if (!*buf)
+ return n_matched;
+ if (scan_double(&buf, d, width)<0)
return n_matched;
++pattern;
++n_matched;
+ } else if (*pattern == 'd') {
+ long lng=0;
+ if (scan_signed(&buf, &lng, width)<0)
+ return n_matched;
+ if (longmod) {
+ long *out = va_arg(ap, long *);
+ *out = lng;
+ } else {
+ int *out = va_arg(ap, int *);
+ if (lng < INT_MIN || lng > INT_MAX)
+ return n_matched;
+ *out = (int)lng;
+ }
+ ++pattern;
+ ++n_matched;
} else if (*pattern == 's') {
char *s = va_arg(ap, char *);
+ if (longmod)
+ return -1;
if (width < 0)
return -1;
if (scan_string(&buf, s, width)<0)
@@ -2778,6 +3008,8 @@ tor_vsscanf(const char *buf, const char *pattern, va_list ap)
++n_matched;
} else if (*pattern == 'c') {
char *ch = va_arg(ap, char *);
+ if (longmod)
+ return -1;
if (width != -1)
return -1;
if (!*buf)
@@ -2788,6 +3020,8 @@ tor_vsscanf(const char *buf, const char *pattern, va_list ap)
} else if (*pattern == '%') {
if (*buf != '%')
return n_matched;
+ if (longmod)
+ return -1;
++buf;
++pattern;
} else {
@@ -2801,9 +3035,14 @@ tor_vsscanf(const char *buf, const char *pattern, va_list ap)
/** Minimal sscanf replacement: parse <b>buf</b> according to <b>pattern</b>
* and store the results in the corresponding argument fields. Differs from
- * sscanf in that it: Only handles %u, %x, %c and %Ns. Does not handle
- * arbitrarily long widths. %u and %x do not consume any space. Is
- * locale-independent. Returns -1 on malformed patterns.
+ * sscanf in that:
+ * <ul><li>It only handles %u, %lu, %x, %lx, %[NUM]s, %d, %ld, %lf, and %c.
+ * <li>It only handles decimal inputs for %lf. (12.3, not 1.23e1)
+ * <li>It does not handle arbitrarily long widths.
+ * <li>Numbers do not consume any space characters.
+ * <li>It is locale-independent.
+ * <li>%u and %x do not consume any space.
+ * <li>It returns -1 on malformed patterns.</ul>
*
* (As with other locale-independent functions, we need this to parse data that
* is in ASCII without worrying that the C library's locale-handling will make
@@ -2892,9 +3131,10 @@ tor_listdir(const char *dirname)
FindClose(handle);
tor_free(pattern);
#else
+ const char *prot_dname = sandbox_intern_string(dirname);
DIR *d;
struct dirent *de;
- if (!(d = opendir(dirname)))
+ if (!(d = opendir(prot_dname)))
return NULL;
result = smartlist_new();
@@ -3190,14 +3430,59 @@ tor_join_win_cmdline(const char *argv[])
return joined_argv;
}
+/* As format_{hex,dex}_number_sigsafe, but takes a <b>radix</b> argument
+ * in range 2..16 inclusive. */
+static int
+format_number_sigsafe(unsigned long x, char *buf, int buf_len,
+ unsigned int radix)
+{
+ unsigned long tmp;
+ int len;
+ char *cp;
+
+ /* NOT tor_assert. This needs to be safe to run from within a signal handler,
+ * and from within the 'tor_assert() has failed' code. */
+ if (radix < 2 || radix > 16)
+ return 0;
+
+ /* Count how many digits we need. */
+ tmp = x;
+ len = 1;
+ while (tmp >= radix) {
+ tmp /= radix;
+ ++len;
+ }
+
+ /* Not long enough */
+ if (!buf || len >= buf_len)
+ return 0;
+
+ cp = buf + len;
+ *cp = '\0';
+ do {
+ unsigned digit = (unsigned) (x % radix);
+ tor_assert(cp > buf);
+ --cp;
+ *cp = "0123456789ABCDEF"[digit];
+ x /= radix;
+ } while (x);
+
+ /* NOT tor_assert; see above. */
+ if (cp != buf) {
+ abort();
+ }
+
+ return len;
+}
+
/**
- * Helper function to output hex numbers, called by
- * format_helper_exit_status(). This writes the hexadecimal digits of x into
- * buf, up to max_len digits, and returns the actual number of digits written.
- * If there is insufficient space, it will write nothing and return 0.
+ * Helper function to output hex numbers from within a signal handler.
*
- * This function DOES NOT add a terminating NUL character to its output: be
- * careful!
+ * Writes the nul-terminated hexadecimal digits of <b>x</b> into a buffer
+ * <b>buf</b> of size <b>buf_len</b>, and return the actual number of digits
+ * written, not counting the terminal NUL.
+ *
+ * If there is insufficient space, write nothing and return 0.
*
* This accepts an unsigned int because format_helper_exit_status() needs to
* call it with a signed int and an unsigned char, and since the C standard
@@ -3212,54 +3497,27 @@ tor_join_win_cmdline(const char *argv[])
* arbitrary C functions.
*/
int
-format_hex_number_for_helper_exit_status(unsigned int x, char *buf,
- int max_len)
+format_hex_number_sigsafe(unsigned long x, char *buf, int buf_len)
{
- int len;
- unsigned int tmp;
- char *cur;
-
- /* Sanity check */
- if (!buf || max_len <= 0)
- return 0;
-
- /* How many chars do we need for x? */
- if (x > 0) {
- len = 0;
- tmp = x;
- while (tmp > 0) {
- tmp >>= 4;
- ++len;
- }
- } else {
- len = 1;
- }
-
- /* Bail if we would go past the end of the buffer */
- if (len > max_len)
- return 0;
-
- /* Point to last one */
- cur = buf + len - 1;
-
- /* Convert x to hex */
- do {
- *cur-- = "0123456789ABCDEF"[x & 0xf];
- x >>= 4;
- } while (x != 0 && cur >= buf);
+ return format_number_sigsafe(x, buf, buf_len, 16);
+}
- /* Return len */
- return len;
+/** As format_hex_number_sigsafe, but format the number in base 10. */
+int
+format_dec_number_sigsafe(unsigned long x, char *buf, int buf_len)
+{
+ return format_number_sigsafe(x, buf, buf_len, 10);
}
+#ifndef _WIN32
/** Format <b>child_state</b> and <b>saved_errno</b> as a hex string placed in
* <b>hex_errno</b>. Called between fork and _exit, so must be signal-handler
* safe.
*
- * <b>hex_errno</b> must have at least HEX_ERRNO_SIZE bytes available.
+ * <b>hex_errno</b> must have at least HEX_ERRNO_SIZE+1 bytes available.
*
* The format of <b>hex_errno</b> is: "CHILD_STATE/ERRNO\n", left-padded
- * with spaces. Note that there is no trailing \0. CHILD_STATE indicates where
+ * with spaces. CHILD_STATE indicates where
* in the processs of starting the child process did the failure occur (see
* CHILD_STATE_* macros for definition), and SAVED_ERRNO is the value of
* errno when the failure occurred.
@@ -3267,7 +3525,7 @@ format_hex_number_for_helper_exit_status(unsigned int x, char *buf,
* On success return the number of characters added to hex_errno, not counting
* the terminating NUL; return -1 on error.
*/
-int
+STATIC int
format_helper_exit_status(unsigned char child_state, int saved_errno,
char *hex_errno)
{
@@ -3294,12 +3552,12 @@ format_helper_exit_status(unsigned char child_state, int saved_errno,
* Count how many chars of space we have left, and keep a pointer into the
* current point in the buffer.
*/
- left = HEX_ERRNO_SIZE;
+ left = HEX_ERRNO_SIZE+1;
cur = hex_errno;
/* Emit child_state */
- written = format_hex_number_for_helper_exit_status(child_state,
- cur, left);
+ written = format_hex_number_sigsafe(child_state, cur, left);
+
if (written <= 0)
goto err;
@@ -3328,8 +3586,7 @@ format_helper_exit_status(unsigned char child_state, int saved_errno,
}
/* Emit unsigned_errno */
- written = format_hex_number_for_helper_exit_status(unsigned_errno,
- cur, left);
+ written = format_hex_number_sigsafe(unsigned_errno, cur, left);
if (written <= 0)
goto err;
@@ -3338,8 +3595,8 @@ format_helper_exit_status(unsigned char child_state, int saved_errno,
left -= written;
cur += written;
- /* Check that we have enough space left for a newline */
- if (left <= 0)
+ /* Check that we have enough space left for a newline and a NUL */
+ if (left <= 1)
goto err;
/* Emit the newline and NUL */
@@ -3360,6 +3617,7 @@ format_helper_exit_status(unsigned char child_state, int saved_errno,
done:
return res;
}
+#endif
/* Maximum number of file descriptors, if we cannot get it via sysconf() */
#define DEFAULT_MAX_FD 256
@@ -3555,7 +3813,7 @@ tor_spawn_background(const char *const filename, const char **argv,
TRUE, // handles are inherited
/*(TODO: set CREATE_NEW CONSOLE/PROCESS_GROUP to make GetExitCodeProcess()
* work?) */
- 0, // creation flags
+ CREATE_NO_WINDOW, // creation flags
(env==NULL) ? NULL : env->windows_environment_block,
NULL, // use parent's current directory
&siStartInfo, // STARTUPINFO pointer
@@ -3594,7 +3852,7 @@ tor_spawn_background(const char *const filename, const char **argv,
this is used for printing out the error message */
unsigned char child_state = CHILD_STATE_INIT;
- char hex_errno[HEX_ERRNO_SIZE];
+ char hex_errno[HEX_ERRNO_SIZE + 2]; /* + 1 should be sufficient actually */
static int max_fd = -1;
@@ -3630,12 +3888,13 @@ tor_spawn_background(const char *const filename, const char **argv,
child_state = CHILD_STATE_MAXFD;
#ifdef _SC_OPEN_MAX
- if (-1 != max_fd) {
+ if (-1 == max_fd) {
max_fd = (int) sysconf(_SC_OPEN_MAX);
- if (max_fd == -1)
+ if (max_fd == -1) {
max_fd = DEFAULT_MAX_FD;
log_warn(LD_GENERAL,
"Cannot find maximum file descriptor, assuming %d", max_fd);
+ }
}
#else
max_fd = DEFAULT_MAX_FD;
@@ -3775,19 +4034,26 @@ tor_spawn_background(const char *const filename, const char **argv,
* <b>process_handle</b>.
* If <b>also_terminate_process</b> is true, also terminate the
* process of the process handle. */
-void
-tor_process_handle_destroy(process_handle_t *process_handle,
- int also_terminate_process)
+MOCK_IMPL(void,
+tor_process_handle_destroy,(process_handle_t *process_handle,
+ int also_terminate_process))
{
if (!process_handle)
return;
if (also_terminate_process) {
if (tor_terminate_process(process_handle) < 0) {
- log_notice(LD_GENERAL, "Failed to terminate process with PID '%d'",
- tor_process_get_pid(process_handle));
+ const char *errstr =
+#ifdef _WIN32
+ format_win32_error(GetLastError());
+#else
+ strerror(errno);
+#endif
+ log_notice(LD_GENERAL, "Failed to terminate process with "
+ "PID '%d' ('%s').", tor_process_get_pid(process_handle),
+ errstr);
} else {
- log_info(LD_GENERAL, "Terminated process with PID '%d'",
+ log_info(LD_GENERAL, "Terminated process with PID '%d'.",
tor_process_get_pid(process_handle));
}
}
@@ -4255,7 +4521,94 @@ tor_split_lines(smartlist_t *sl, char *buf, int len)
return smartlist_len(sl);
}
+/** Return a string corresponding to <b>stream_status</b>. */
+const char *
+stream_status_to_string(enum stream_status stream_status)
+{
+ switch (stream_status) {
+ case IO_STREAM_OKAY:
+ return "okay";
+ case IO_STREAM_EAGAIN:
+ return "temporarily unavailable";
+ case IO_STREAM_TERM:
+ return "terminated";
+ case IO_STREAM_CLOSED:
+ return "closed";
+ default:
+ tor_fragile_assert();
+ return "unknown";
+ }
+}
+
+/* DOCDOC */
+static void
+log_portfw_spawn_error_message(const char *buf,
+ const char *executable, int *child_status)
+{
+ /* Parse error message */
+ int retval, child_state, saved_errno;
+ retval = tor_sscanf(buf, SPAWN_ERROR_MESSAGE "%x/%x",
+ &child_state, &saved_errno);
+ if (retval == 2) {
+ log_warn(LD_GENERAL,
+ "Failed to start child process \"%s\" in state %d: %s",
+ executable, child_state, strerror(saved_errno));
+ if (child_status)
+ *child_status = 1;
+ } else {
+ /* Failed to parse message from child process, log it as a
+ warning */
+ log_warn(LD_GENERAL,
+ "Unexpected message from port forwarding helper \"%s\": %s",
+ executable, buf);
+ }
+}
+
#ifdef _WIN32
+
+/** Return a smartlist containing lines outputted from
+ * <b>handle</b>. Return NULL on error, and set
+ * <b>stream_status_out</b> appropriately. */
+MOCK_IMPL(smartlist_t *,
+tor_get_lines_from_handle, (HANDLE *handle,
+ enum stream_status *stream_status_out))
+{
+ int pos;
+ char stdout_buf[600] = {0};
+ smartlist_t *lines = NULL;
+
+ tor_assert(stream_status_out);
+
+ *stream_status_out = IO_STREAM_TERM;
+
+ pos = tor_read_all_handle(handle, stdout_buf, sizeof(stdout_buf) - 1, NULL);
+ if (pos < 0) {
+ *stream_status_out = IO_STREAM_TERM;
+ return NULL;
+ }
+ if (pos == 0) {
+ *stream_status_out = IO_STREAM_EAGAIN;
+ return NULL;
+ }
+
+ /* End with a null even if there isn't a \r\n at the end */
+ /* TODO: What if this is a partial line? */
+ stdout_buf[pos] = '\0';
+
+ /* Split up the buffer */
+ lines = smartlist_new();
+ tor_split_lines(lines, stdout_buf, pos);
+
+ /* Currently 'lines' is populated with strings residing on the
+ stack. Replace them with their exact copies on the heap: */
+ SMARTLIST_FOREACH(lines, char *, line,
+ SMARTLIST_REPLACE_CURRENT(lines, line, tor_strdup(line)));
+
+ *stream_status_out = IO_STREAM_OKAY;
+
+ return lines;
+}
+
/** Read from stream, and send lines to log at the specified log level.
* Returns -1 if there is a error reading, and 0 otherwise.
* If the generated stream is flushed more often than on new lines, or
@@ -4303,6 +4656,34 @@ log_from_handle(HANDLE *pipe, int severity)
#else
+/** Return a smartlist containing lines outputted from
+ * <b>handle</b>. Return NULL on error, and set
+ * <b>stream_status_out</b> appropriately. */
+MOCK_IMPL(smartlist_t *,
+tor_get_lines_from_handle, (FILE *handle,
+ enum stream_status *stream_status_out))
+{
+ enum stream_status stream_status;
+ char stdout_buf[400];
+ smartlist_t *lines = NULL;
+
+ while (1) {
+ memset(stdout_buf, 0, sizeof(stdout_buf));
+
+ stream_status = get_string_from_pipe(handle,
+ stdout_buf, sizeof(stdout_buf) - 1);
+ if (stream_status != IO_STREAM_OKAY)
+ goto done;
+
+ if (!lines) lines = smartlist_new();
+ smartlist_add(lines, tor_strdup(stdout_buf));
+ }
+
+ done:
+ *stream_status_out = stream_status;
+ return lines;
+}
+
/** Read from stream, and send lines to log at the specified log level.
* Returns 1 if stream is closed normally, -1 if there is a error reading, and
* 0 otherwise. Handles lines from tor-fw-helper and
@@ -4330,23 +4711,7 @@ log_from_pipe(FILE *stream, int severity, const char *executable,
/* Check if buf starts with SPAWN_ERROR_MESSAGE */
if (strcmpstart(buf, SPAWN_ERROR_MESSAGE) == 0) {
- /* Parse error message */
- int retval, child_state, saved_errno;
- retval = tor_sscanf(buf, SPAWN_ERROR_MESSAGE "%x/%x",
- &child_state, &saved_errno);
- if (retval == 2) {
- log_warn(LD_GENERAL,
- "Failed to start child process \"%s\" in state %d: %s",
- executable, child_state, strerror(saved_errno));
- if (child_status)
- *child_status = 1;
- } else {
- /* Failed to parse message from child process, log it as a
- warning */
- log_warn(LD_GENERAL,
- "Unexpected message from port forwarding helper \"%s\": %s",
- executable, buf);
- }
+ log_portfw_spawn_error_message(buf, executable, child_status);
} else {
log_fn(severity, LD_GENERAL, "Port forwarding helper says: %s", buf);
}
@@ -4421,9 +4786,144 @@ get_string_from_pipe(FILE *stream, char *buf_out, size_t count)
return IO_STREAM_TERM;
}
-/* DOCDOC tor_check_port_forwarding */
+/** Parse a <b>line</b> from tor-fw-helper and issue an appropriate
+ * log message to our user. */
+static void
+handle_fw_helper_line(const char *executable, const char *line)
+{
+ smartlist_t *tokens = smartlist_new();
+ char *message = NULL;
+ char *message_for_log = NULL;
+ const char *external_port = NULL;
+ const char *internal_port = NULL;
+ const char *result = NULL;
+ int port = 0;
+ int success = 0;
+
+ if (strcmpstart(line, SPAWN_ERROR_MESSAGE) == 0) {
+ /* We need to check for SPAWN_ERROR_MESSAGE again here, since it's
+ * possible that it got sent after we tried to read it in log_from_pipe.
+ *
+ * XXX Ideally, we should be using one of stdout/stderr for the real
+ * output, and one for the output of the startup code. We used to do that
+ * before cd05f35d2c.
+ */
+ int child_status;
+ log_portfw_spawn_error_message(line, executable, &child_status);
+ goto done;
+ }
+
+ smartlist_split_string(tokens, line, NULL,
+ SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, -1);
+
+ if (smartlist_len(tokens) < 5)
+ goto err;
+
+ if (strcmp(smartlist_get(tokens, 0), "tor-fw-helper") ||
+ strcmp(smartlist_get(tokens, 1), "tcp-forward"))
+ goto err;
+
+ external_port = smartlist_get(tokens, 2);
+ internal_port = smartlist_get(tokens, 3);
+ result = smartlist_get(tokens, 4);
+
+ if (smartlist_len(tokens) > 5) {
+ /* If there are more than 5 tokens, they are part of [<message>].
+ Let's use a second smartlist to form the whole message;
+ strncat loops suck. */
+ int i;
+ int message_words_n = smartlist_len(tokens) - 5;
+ smartlist_t *message_sl = smartlist_new();
+ for (i = 0; i < message_words_n; i++)
+ smartlist_add(message_sl, smartlist_get(tokens, 5+i));
+
+ tor_assert(smartlist_len(message_sl) > 0);
+ message = smartlist_join_strings(message_sl, " ", 0, NULL);
+
+ /* wrap the message in log-friendly wrapping */
+ tor_asprintf(&message_for_log, " ('%s')", message);
+
+ smartlist_free(message_sl);
+ }
+
+ port = atoi(external_port);
+ if (port < 1 || port > 65535)
+ goto err;
+
+ port = atoi(internal_port);
+ if (port < 1 || port > 65535)
+ goto err;
+
+ if (!strcmp(result, "SUCCESS"))
+ success = 1;
+ else if (!strcmp(result, "FAIL"))
+ success = 0;
+ else
+ goto err;
+
+ if (!success) {
+ log_warn(LD_GENERAL, "Tor was unable to forward TCP port '%s' to '%s'%s. "
+ "Please make sure that your router supports port "
+ "forwarding protocols (like NAT-PMP). Note that if '%s' is "
+ "your ORPort, your relay will be unable to receive inbound "
+ "traffic.", external_port, internal_port,
+ message_for_log ? message_for_log : "",
+ internal_port);
+ } else {
+ log_info(LD_GENERAL,
+ "Tor successfully forwarded TCP port '%s' to '%s'%s.",
+ external_port, internal_port,
+ message_for_log ? message_for_log : "");
+ }
+
+ goto done;
+
+ err:
+ log_warn(LD_GENERAL, "tor-fw-helper sent us a string we could not "
+ "parse (%s).", line);
+
+ done:
+ SMARTLIST_FOREACH(tokens, char *, cp, tor_free(cp));
+ smartlist_free(tokens);
+ tor_free(message);
+ tor_free(message_for_log);
+}
+
+/** Read what tor-fw-helper has to say in its stdout and handle it
+ * appropriately */
+static int
+handle_fw_helper_output(const char *executable,
+ process_handle_t *process_handle)
+{
+ smartlist_t *fw_helper_output = NULL;
+ enum stream_status stream_status = 0;
+
+ fw_helper_output =
+ tor_get_lines_from_handle(tor_process_get_stdout_pipe(process_handle),
+ &stream_status);
+ if (!fw_helper_output) { /* didn't get any output from tor-fw-helper */
+ /* if EAGAIN we should retry in the future */
+ return (stream_status == IO_STREAM_EAGAIN) ? 0 : -1;
+ }
+
+ /* Handle the lines we got: */
+ SMARTLIST_FOREACH_BEGIN(fw_helper_output, char *, line) {
+ handle_fw_helper_line(executable, line);
+ tor_free(line);
+ } SMARTLIST_FOREACH_END(line);
+
+ smartlist_free(fw_helper_output);
+
+ return 0;
+}
+
+/** Spawn tor-fw-helper and ask it to forward the ports in
+ * <b>ports_to_forward</b>. <b>ports_to_forward</b> contains strings
+ * of the form "<external port>:<internal port>", which is the format
+ * that tor-fw-helper expects. */
void
-tor_check_port_forwarding(const char *filename, int dir_port, int or_port,
+tor_check_port_forwarding(const char *filename,
+ smartlist_t *ports_to_forward,
time_t now)
{
/* When fw-helper succeeds, how long do we wait until running it again */
@@ -4437,32 +4937,51 @@ tor_check_port_forwarding(const char *filename, int dir_port, int or_port,
static process_handle_t *child_handle=NULL;
static time_t time_to_run_helper = 0;
- int stdout_status, stderr_status, retval;
- const char *argv[10];
- char s_dirport[6], s_orport[6];
+ int stderr_status, retval;
+ int stdout_status = 0;
tor_assert(filename);
- /* Set up command line for tor-fw-helper */
- snprintf(s_dirport, sizeof s_dirport, "%d", dir_port);
- snprintf(s_orport, sizeof s_orport, "%d", or_port);
-
- /* TODO: Allow different internal and external ports */
- argv[0] = filename;
- argv[1] = "--internal-or-port";
- argv[2] = s_orport;
- argv[3] = "--external-or-port";
- argv[4] = s_orport;
- argv[5] = "--internal-dir-port";
- argv[6] = s_dirport;
- argv[7] = "--external-dir-port";
- argv[8] = s_dirport;
- argv[9] = NULL;
-
/* Start the child, if it is not already running */
if ((!child_handle || child_handle->status != PROCESS_STATUS_RUNNING) &&
time_to_run_helper < now) {
- int status;
+ /*tor-fw-helper cli looks like this: tor_fw_helper -p :5555 -p 4555:1111 */
+ const char **argv; /* cli arguments */
+ int args_n, status;
+ int argv_index = 0; /* index inside 'argv' */
+
+ tor_assert(smartlist_len(ports_to_forward) > 0);
+
+ /* check for overflow during 'argv' allocation:
+ (len(ports_to_forward)*2 + 2)*sizeof(char*) > SIZE_MAX ==
+ len(ports_to_forward) > (((SIZE_MAX/sizeof(char*)) - 2)/2) */
+ if ((size_t) smartlist_len(ports_to_forward) >
+ (((SIZE_MAX/sizeof(char*)) - 2)/2)) {
+ log_warn(LD_GENERAL,
+ "Overflow during argv allocation. This shouldn't happen.");
+ return;
+ }
+ /* check for overflow during 'argv_index' increase:
+ ((len(ports_to_forward)*2 + 2) > INT_MAX) ==
+ len(ports_to_forward) > (INT_MAX - 2)/2 */
+ if (smartlist_len(ports_to_forward) > (INT_MAX - 2)/2) {
+ log_warn(LD_GENERAL,
+ "Overflow during argv_index increase. This shouldn't happen.");
+ return;
+ }
+
+ /* Calculate number of cli arguments: one for the filename, two
+ for each smartlist element (one for "-p" and one for the
+ ports), and one for the final NULL. */
+ args_n = 1 + 2*smartlist_len(ports_to_forward) + 1;
+ argv = tor_malloc_zero(sizeof(char*)*args_n);
+
+ argv[argv_index++] = filename;
+ SMARTLIST_FOREACH_BEGIN(ports_to_forward, const char *, port) {
+ argv[argv_index++] = "-p";
+ argv[argv_index++] = port;
+ } SMARTLIST_FOREACH_END(port);
+ argv[argv_index] = NULL;
/* Assume tor-fw-helper will succeed, start it later*/
time_to_run_helper = now + TIME_TO_EXEC_FWHELPER_SUCCESS;
@@ -4479,6 +4998,9 @@ tor_check_port_forwarding(const char *filename, int dir_port, int or_port,
status = tor_spawn_background(filename, argv, NULL, &child_handle);
#endif
+ tor_free_((void*)argv);
+ argv=NULL;
+
if (PROCESS_STATUS_ERROR == status) {
log_warn(LD_GENERAL, "Failed to start port forwarding helper %s",
filename);
@@ -4496,16 +5018,17 @@ tor_check_port_forwarding(const char *filename, int dir_port, int or_port,
/* Read from stdout/stderr and log result */
retval = 0;
#ifdef _WIN32
- stdout_status = log_from_handle(child_handle->stdout_pipe, LOG_INFO);
- stderr_status = log_from_handle(child_handle->stderr_pipe, LOG_WARN);
- /* If we got this far (on Windows), the process started */
- retval = 0;
+ stderr_status = log_from_handle(child_handle->stderr_pipe, LOG_INFO);
#else
- stdout_status = log_from_pipe(child_handle->stdout_handle,
- LOG_INFO, filename, &retval);
stderr_status = log_from_pipe(child_handle->stderr_handle,
- LOG_WARN, filename, &retval);
+ LOG_INFO, filename, &retval);
#endif
+ if (handle_fw_helper_output(filename, child_handle) < 0) {
+ log_warn(LD_GENERAL, "Failed to handle fw helper output.");
+ stdout_status = -1;
+ retval = -1;
+ }
+
if (retval) {
/* There was a problem in the child process */
time_to_run_helper = now + TIME_TO_EXEC_FWHELPER_FAIL;
@@ -4551,3 +5074,45 @@ tor_check_port_forwarding(const char *filename, int dir_port, int or_port,
}
}
+/** Initialize the insecure RNG <b>rng</b> from a seed value <b>seed</b>. */
+void
+tor_init_weak_random(tor_weak_rng_t *rng, unsigned seed)
+{
+ rng->state = (uint32_t)(seed & 0x7fffffff);
+}
+
+/** Return a randomly chosen value in the range 0..TOR_WEAK_RANDOM_MAX based
+ * on the RNG state of <b>rng</b>. This entropy will not be cryptographically
+ * strong; do not rely on it for anything an adversary should not be able to
+ * predict. */
+int32_t
+tor_weak_random(tor_weak_rng_t *rng)
+{
+ /* Here's a linear congruential generator. OpenBSD and glibc use these
+ * parameters; they aren't too bad, and should have maximal period over the
+ * range 0..INT32_MAX. We don't want to use the platform rand() or random(),
+ * since some platforms have bad weak RNGs that only return values in the
+ * range 0..INT16_MAX, which just isn't enough. */
+ rng->state = (rng->state * 1103515245 + 12345) & 0x7fffffff;
+ return (int32_t) rng->state;
+}
+
+/** Return a random number in the range [0 , <b>top</b>). {That is, the range
+ * of integers i such that 0 <= i < top.} Chooses uniformly. Requires that
+ * top is greater than 0. This randomness is not cryptographically strong; do
+ * not rely on it for anything an adversary should not be able to predict. */
+int32_t
+tor_weak_random_range(tor_weak_rng_t *rng, int32_t top)
+{
+ /* We don't want to just do tor_weak_random() % top, since random() is often
+ * implemented with an LCG whose modulus is a power of 2, and those are
+ * cyclic in their low-order bits. */
+ int divisor, result;
+ tor_assert(top > 0);
+ divisor = TOR_WEAK_RANDOM_MAX / top;
+ do {
+ result = (int32_t)(tor_weak_random(rng) / divisor);
+ } while (result >= top);
+ return result;
+}
+
diff --git a/src/common/util.h b/src/common/util.h
index 8977d273c..18dc20639 100644
--- a/src/common/util.h
+++ b/src/common/util.h
@@ -1,6 +1,6 @@
/* Copyright (c) 2003-2004, Roger Dingledine
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -8,13 +8,14 @@
* \brief Headers for util.c
**/
-#ifndef _TOR_UTIL_H
-#define _TOR_UTIL_H
+#ifndef TOR_UTIL_H
+#define TOR_UTIL_H
#include "orconfig.h"
#include "torint.h"
#include "compat.h"
#include "di_ops.h"
+#include "testsupport.h"
#include <stdio.h>
#include <stdlib.h>
#ifdef _WIN32
@@ -47,13 +48,13 @@
/** Like assert(3), but send assertion failures to the log as well as to
* stderr. */
#define tor_assert(expr) STMT_BEGIN \
- if (PREDICT_UNLIKELY(!(expr))) { \
- log_err(LD_BUG, "%s:%d: %s: Assertion %s failed; aborting.", \
- _SHORT_FILE_, __LINE__, __func__, #expr); \
- fprintf(stderr,"%s:%d %s: Assertion %s failed; aborting.\n", \
- _SHORT_FILE_, __LINE__, __func__, #expr); \
- abort(); \
- } STMT_END
+ if (PREDICT_UNLIKELY(!(expr))) { \
+ tor_assertion_failed_(SHORT_FILE__, __LINE__, __func__, #expr); \
+ abort(); \
+ } STMT_END
+
+void tor_assertion_failed_(const char *fname, unsigned int line,
+ const char *func, const char *expr);
/* If we're building with dmalloc, we want all of our memory allocation
* functions to take an extra file/line pair of arguments. If not, not.
@@ -62,7 +63,7 @@
* to calls. */
#ifdef USE_DMALLOC
#define DMALLOC_PARAMS , const char *file, const int line
-#define DMALLOC_ARGS , _SHORT_FILE_, __LINE__
+#define DMALLOC_ARGS , SHORT_FILE__, __LINE__
#else
#define DMALLOC_PARAMS
#define DMALLOC_ARGS
@@ -74,23 +75,24 @@
#define tor_fragile_assert()
/* Memory management */
-void *_tor_malloc(size_t size DMALLOC_PARAMS) ATTR_MALLOC;
-void *_tor_malloc_zero(size_t size DMALLOC_PARAMS) ATTR_MALLOC;
-void *_tor_malloc_roundup(size_t *size DMALLOC_PARAMS) ATTR_MALLOC;
-void *_tor_calloc(size_t nmemb, size_t size DMALLOC_PARAMS) ATTR_MALLOC;
-void *_tor_realloc(void *ptr, size_t size DMALLOC_PARAMS);
-char *_tor_strdup(const char *s DMALLOC_PARAMS) ATTR_MALLOC ATTR_NONNULL((1));
-char *_tor_strndup(const char *s, size_t n DMALLOC_PARAMS)
+void *tor_malloc_(size_t size DMALLOC_PARAMS) ATTR_MALLOC;
+void *tor_malloc_zero_(size_t size DMALLOC_PARAMS) ATTR_MALLOC;
+void *tor_calloc_(size_t nmemb, size_t size DMALLOC_PARAMS) ATTR_MALLOC;
+void *tor_realloc_(void *ptr, size_t size DMALLOC_PARAMS);
+char *tor_strdup_(const char *s DMALLOC_PARAMS) ATTR_MALLOC ATTR_NONNULL((1));
+char *tor_strndup_(const char *s, size_t n DMALLOC_PARAMS)
+ ATTR_MALLOC ATTR_NONNULL((1));
+void *tor_memdup_(const void *mem, size_t len DMALLOC_PARAMS)
ATTR_MALLOC ATTR_NONNULL((1));
-void *_tor_memdup(const void *mem, size_t len DMALLOC_PARAMS)
+void *tor_memdup_nulterm_(const void *mem, size_t len DMALLOC_PARAMS)
ATTR_MALLOC ATTR_NONNULL((1));
-void _tor_free(void *mem);
+void tor_free_(void *mem);
#ifdef USE_DMALLOC
extern int dmalloc_free(const char *file, const int line, void *pnt,
const int func_id);
#define tor_free(p) STMT_BEGIN \
if (PREDICT_LIKELY((p)!=NULL)) { \
- dmalloc_free(_SHORT_FILE_, __LINE__, (p), 0); \
+ dmalloc_free(SHORT_FILE__, __LINE__, (p), 0); \
(p)=NULL; \
} \
STMT_END
@@ -100,7 +102,7 @@ extern int dmalloc_free(const char *file, const int line, void *pnt,
* and it sets the pointer value to NULL after freeing it.
*
* This is a macro. If you need a function pointer to release memory from
- * tor_malloc(), use _tor_free().
+ * tor_malloc(), use tor_free_().
*/
#define tor_free(p) STMT_BEGIN \
if (PREDICT_LIKELY((p)!=NULL)) { \
@@ -110,14 +112,14 @@ extern int dmalloc_free(const char *file, const int line, void *pnt,
STMT_END
#endif
-#define tor_malloc(size) _tor_malloc(size DMALLOC_ARGS)
-#define tor_malloc_zero(size) _tor_malloc_zero(size DMALLOC_ARGS)
-#define tor_calloc(nmemb,size) _tor_calloc(nmemb, size DMALLOC_ARGS)
-#define tor_malloc_roundup(szp) _tor_malloc_roundup(szp DMALLOC_ARGS)
-#define tor_realloc(ptr, size) _tor_realloc(ptr, size DMALLOC_ARGS)
-#define tor_strdup(s) _tor_strdup(s DMALLOC_ARGS)
-#define tor_strndup(s, n) _tor_strndup(s, n DMALLOC_ARGS)
-#define tor_memdup(s, n) _tor_memdup(s, n DMALLOC_ARGS)
+#define tor_malloc(size) tor_malloc_(size DMALLOC_ARGS)
+#define tor_malloc_zero(size) tor_malloc_zero_(size DMALLOC_ARGS)
+#define tor_calloc(nmemb,size) tor_calloc_(nmemb, size DMALLOC_ARGS)
+#define tor_realloc(ptr, size) tor_realloc_(ptr, size DMALLOC_ARGS)
+#define tor_strdup(s) tor_strdup_(s DMALLOC_ARGS)
+#define tor_strndup(s, n) tor_strndup_(s, n DMALLOC_ARGS)
+#define tor_memdup(s, n) tor_memdup_(s, n DMALLOC_ARGS)
+#define tor_memdup_nulterm(s, n) tor_memdup_nulterm_(s, n DMALLOC_ARGS)
void tor_log_mallinfo(int severity);
@@ -161,6 +163,7 @@ void tor_log_mallinfo(int severity);
/* Math functions */
double tor_mathlog(double d) ATTR_CONST;
long tor_lround(double d) ATTR_CONST;
+int64_t tor_llround(double d) ATTR_CONST;
int tor_log2(uint64_t u64) ATTR_CONST;
uint64_t round_to_power_of_2(uint64_t u64);
unsigned round_to_next_multiple_of(unsigned number, unsigned divisor);
@@ -173,6 +176,17 @@ int n_bits_set_u8(uint8_t v);
* overflow. */
#define CEIL_DIV(a,b) (((a)+(b)-1)/(b))
+/* Return <b>v</b> if it's between <b>min</b> and <b>max</b>. Otherwise
+ * return <b>min</b> if <b>v</b> is smaller than <b>min</b>, or <b>max</b> if
+ * <b>b</b> is larger than <b>max</b>.
+ *
+ * Requires that <b>min</b> is no more than <b>max</b>. May evaluate any of
+ * its arguments more than once! */
+#define CLAMP(min,v,max) \
+ ( ((v) < (min)) ? (min) : \
+ ((v) > (max)) ? (max) : \
+ (v) )
+
/* String manipulation */
/** Allowable characters in a hexadecimal string. */
@@ -188,6 +202,7 @@ int strcasecmpstart(const char *s1, const char *s2) ATTR_NONNULL((1,2));
int strcmpend(const char *s1, const char *s2) ATTR_NONNULL((1,2));
int strcasecmpend(const char *s1, const char *s2) ATTR_NONNULL((1,2));
int fast_memcmpstart(const void *mem, size_t memlen, const char *prefix);
+void tor_strclear(char *s);
void tor_strstrip(char *s, const char *strip) ATTR_NONNULL((1,2));
long tor_parse_long(const char *s, int base, long min,
@@ -208,25 +223,22 @@ const char *find_whitespace_eos(const char *s, const char *eos);
const char *find_str_at_start_of_line(const char *haystack,
const char *needle);
int string_is_C_identifier(const char *string);
+int string_is_key_value(int severity, const char *string);
int tor_mem_is_zero(const char *mem, size_t len);
int tor_digest_is_zero(const char *digest);
int tor_digest256_is_zero(const char *digest);
char *esc_for_log(const char *string) ATTR_MALLOC;
const char *escaped(const char *string);
+
+char *tor_escape_str_for_pt_args(const char *string,
+ const char *chars_to_escape);
+
struct smartlist_t;
-void wrap_string(struct smartlist_t *out, const char *string, size_t width,
- const char *prefix0, const char *prefixRest);
-int tor_vsscanf(const char *buf, const char *pattern, va_list ap)
-#ifdef __GNUC__
- __attribute__((format(scanf, 2, 0)))
-#endif
- ;
+int tor_vsscanf(const char *buf, const char *pattern, va_list ap) \
+ CHECK_SCANF(2, 0);
int tor_sscanf(const char *buf, const char *pattern, ...)
-#ifdef __GNUC__
- __attribute__((format(scanf, 2, 3)))
-#endif
- ;
+ CHECK_SCANF(2, 3);
void smartlist_add_asprintf(struct smartlist_t *sl, const char *pattern, ...)
CHECK_PRINTF(2, 3);
@@ -239,11 +251,9 @@ void base16_encode(char *dest, size_t destlen, const char *src, size_t srclen);
int base16_decode(char *dest, size_t destlen, const char *src, size_t srclen);
/* Time helpers */
-double tv_to_double(const struct timeval *tv);
-int64_t tv_to_msec(const struct timeval *tv);
-int64_t tv_to_usec(const struct timeval *tv);
long tv_udiff(const struct timeval *start, const struct timeval *end);
long tv_mdiff(const struct timeval *start, const struct timeval *end);
+int64_t tv_to_msec(const struct timeval *tv);
int tor_timegm(const struct tm *tm, time_t *time_out);
#define RFC1123_TIME_LEN 29
void format_rfc1123_time(char *buf, time_t t);
@@ -283,6 +293,15 @@ void update_approx_time(time_t now);
}
}
</pre>
+
+ As a convenience wrapper for logging, you can replace the above with:
+ <pre>
+ if (possibly_very_frequent_event()) {
+ static ratelim_t warning_limit = RATELIM_INIT(300);
+ log_fn_ratelim(&warning_limit, LOG_WARN, LD_GENERAL,
+ "The event occurred!");
+ }
+ </pre>
*/
typedef struct ratelim_t {
int rate;
@@ -306,6 +325,8 @@ enum stream_status {
IO_STREAM_CLOSED
};
+const char *stream_status_to_string(enum stream_status stream_status);
+
enum stream_status get_string_from_pipe(FILE *stream, char *buf, size_t count);
/** Return values from file_status(); see that function's documentation
@@ -335,8 +356,9 @@ FILE *fdopen_file(open_file_t *file_data);
int finish_writing_to_file(open_file_t *file_data);
int abort_writing_to_file(open_file_t *file_data);
int write_str_to_file(const char *fname, const char *str, int bin);
-int write_bytes_to_file(const char *fname, const char *str, size_t len,
- int bin);
+MOCK_DECL(int,
+write_bytes_to_file,(const char *fname, const char *str, size_t len,
+ int bin));
/** An ad-hoc type to hold a string of characters and a count; used by
* write_chunks_to_file. */
typedef struct sized_chunk_t {
@@ -344,7 +366,7 @@ typedef struct sized_chunk_t {
size_t len;
} sized_chunk_t;
int write_chunks_to_file(const char *fname, const struct smartlist_t *chunks,
- int bin);
+ int bin, int no_tempfile);
int append_bytes_to_file(const char *fname, const char *str, size_t len,
int bin);
int write_bytes_to_new_file(const char *fname, const char *str, size_t len,
@@ -360,8 +382,14 @@ struct stat;
#endif
char *read_file_to_str(const char *filename, int flags, struct stat *stat_out)
ATTR_MALLOC;
-const char *parse_config_line_from_str(const char *line,
- char **key_out, char **value_out);
+char *read_file_to_str_until_eof(int fd, size_t max_bytes_to_read,
+ size_t *sz_out)
+ ATTR_MALLOC;
+const char *parse_config_line_from_str_verbose(const char *line,
+ char **key_out, char **value_out,
+ const char **err_out);
+#define parse_config_line_from_str(line,key_out,value_out) \
+ parse_config_line_from_str_verbose((line),(key_out),(value_out),NULL)
char *expand_filename(const char *filename);
struct smartlist_t *tor_listdir(const char *dirname);
int path_is_relative(const char *filename);
@@ -373,7 +401,8 @@ void write_pidfile(char *filename);
/* Port forwarding */
void tor_check_port_forwarding(const char *filename,
- int dir_port, int or_port, time_t now);
+ struct smartlist_t *ports_to_forward,
+ time_t now);
typedef struct process_handle_t process_handle_t;
typedef struct process_environment_t process_environment_t;
@@ -464,16 +493,45 @@ HANDLE tor_process_get_stdout_pipe(process_handle_t *process_handle);
FILE *tor_process_get_stdout_pipe(process_handle_t *process_handle);
#endif
-int tor_terminate_process(process_handle_t *process_handle);
-void tor_process_handle_destroy(process_handle_t *process_handle,
- int also_terminate_process);
+#ifdef _WIN32
+MOCK_DECL(struct smartlist_t *,
+tor_get_lines_from_handle,(HANDLE *handle,
+ enum stream_status *stream_status));
+#else
+MOCK_DECL(struct smartlist_t *,
+tor_get_lines_from_handle,(FILE *handle,
+ enum stream_status *stream_status));
+#endif
+
+int
+tor_terminate_process(process_handle_t *process_handle);
+
+MOCK_DECL(void,
+tor_process_handle_destroy,(process_handle_t *process_handle,
+ int also_terminate_process));
+
+/* ===== Insecure rng */
+typedef struct tor_weak_rng_t {
+ uint32_t state;
+} tor_weak_rng_t;
+
+#define TOR_WEAK_RNG_INIT {383745623}
+#define TOR_WEAK_RANDOM_MAX (INT_MAX)
+void tor_init_weak_random(tor_weak_rng_t *weak_rng, unsigned seed);
+int32_t tor_weak_random(tor_weak_rng_t *weak_rng);
+int32_t tor_weak_random_range(tor_weak_rng_t *rng, int32_t top);
+/** Randomly return true according to <b>rng</b> with probability 1 in
+ * <b>n</b> */
+#define tor_weak_random_one_in_n(rng, n) (0==tor_weak_random_range((rng),(n)))
+
+int format_hex_number_sigsafe(unsigned long x, char *buf, int max_len);
+int format_dec_number_sigsafe(unsigned long x, char *buf, int max_len);
#ifdef UTIL_PRIVATE
/* Prototypes for private functions only used by util.c (and unit tests) */
-int format_hex_number_for_helper_exit_status(unsigned int x, char *buf,
- int max_len);
-int format_helper_exit_status(unsigned char child_state,
+#ifndef _WIN32
+STATIC int format_helper_exit_status(unsigned char child_state,
int saved_errno, char *hex_errno);
/* Space for hex values of child state, a slash, saved_errno (with
@@ -482,7 +540,11 @@ int format_helper_exit_status(unsigned char child_state,
1 + sizeof(int) * 2 + 1)
#endif
+#endif
+
const char *libor_get_digests(void);
+#define ARRAY_LENGTH(x) (sizeof(x)) / sizeof(x[0])
+
#endif
diff --git a/src/config/Makefile.am b/src/config/Makefile.am
deleted file mode 100644
index 90dd218b4..000000000
--- a/src/config/Makefile.am
+++ /dev/null
@@ -1,16 +0,0 @@
-confdir = $(sysconfdir)/tor
-
-tordatadir = $(datadir)/tor
-
-EXTRA_DIST = geoip
-# fallback-consensus
-
-conf_DATA = torrc.sample
-
-tordata_DATA = geoip
-# fallback_consensus
-
-# If we don't have it, fake it.
-fallback-consensus:
- touch fallback-consensus
-
diff --git a/src/config/geoip b/src/config/geoip
index 8e9f51385..653aff570 100644
--- a/src/config/geoip
+++ b/src/config/geoip
@@ -1,6 +1,7 @@
-# Last updated based on March 6 2013 Maxmind GeoLite Country
-# Visit the following URL for details on the conversion:
-# https://gitweb.torproject.org/tor.git/blob/HEAD:/src/config/README.geoip
+# Last updated based on June 4 2014 Maxmind GeoLite2 Country
+# wget https://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.mmdb.gz
+# gunzip GeoLite2-Country.mmdb.gz
+# python mmdb-convert.py GeoLite2-Country.mmdb
16777216,16777471,AU
16777472,16778239,CN
16778240,16779263,AU
@@ -68,39 +69,26 @@
29884416,29949951,TW
29949952,30015487,KR
30015488,30408703,CN
-30408704,33488895,KR
-33488896,33554431,AU
-33554432,34603007,FR
-34603008,34604543,EU
+30408704,33554431,KR
+33554432,33554432,DE
+33554433,34603007,FR
34604544,34605055,DE
-34605056,34620415,EU
+34612224,34612735,IL
34620416,34620927,SE
34620928,34621439,IT
-34621440,34636799,EU
34636800,34637311,DE
-34637312,34646527,EU
34646528,34647551,DE
-34647552,34648575,EU
34648576,34649087,GR
-34649088,34659327,EU
34659328,34660351,GR
-34660352,34664447,EU
34664448,34668543,DE
-34668544,34673663,EU
34673664,34674687,DE
-34674688,34733055,EU
34733056,34734079,DE
-34734080,34754559,EU
34754560,34758655,GR
-34758656,34803711,EU
+34796032,34796543,NL
34803712,34807807,IT
-34807808,34861055,EU
34861056,34865151,DE
-34865152,34866175,EU
34866176,34867199,IT
-34867200,34880511,EU
34880512,34881535,DE
-34881536,34910975,EU
34910976,34911231,ES
34911232,34911743,DE
34911744,34911999,AT
@@ -108,56 +96,42 @@
34912256,34912511,DE
34912512,34912767,ES
34912768,34913279,DE
-34913280,34928383,EU
34928384,34928639,DE
-34928640,34930687,EU
34930688,34938879,DE
34938880,34947071,FR
-34947072,34953215,EU
34953216,34954751,AT
34954752,34955263,NL
34955264,34959359,AT
34959360,34963455,NL
-34963456,34992127,EU
34992128,34993151,NL
34993152,34993663,FR
34993664,34993919,AT
34993920,34994175,DE
34994176,34995711,FR
-34995712,34995967,EU
34995968,34996223,NL
-34996224,34999295,EU
34999296,35001343,GB
35001344,35002367,FR
-35002368,35008511,EU
35008512,35009023,FR
-35009024,35010303,EU
35010304,35010559,BE
35010560,35011583,FR
-35011584,35011839,CH
-35011840,35020799,EU
+35011584,35011839,SE
35020800,35037183,GB
35037184,35054335,FR
35054336,35054591,GB
-35054592,35055103,EU
35055104,35055359,ES
-35055360,35055871,EU
35055872,35056127,NL
-35056128,35059199,EU
35059200,35059711,GB
-35059712,35060735,EU
35060736,35061247,GB
35061248,35061759,FR
-35061760,35090431,EU
35090432,35094527,GR
-35094528,35127295,EU
35127296,35651583,GB
35651584,36700159,IT
36700160,36962303,AE
36962304,37224447,IL
-37224448,37486591,UA
37486592,37748735,RU
-37748736,38273023,SE
+37748736,38258687,SE
+38258688,38258943,DK
+38258944,38273023,SE
38273024,38797311,KZ
38797312,39059455,PT
39059456,39321599,GR
@@ -165,7 +139,11 @@
39583744,39845887,RU
39845888,40370175,GB
40370176,40894463,DK
-40894464,41418751,IT
+40894464,41094879,IT
+41094880,41094887,SI
+41094888,41094895,IT
+41094896,41094903,SI
+41094904,41418751,IT
41418752,41943039,GB
41943040,42205183,DK
42205184,42467327,KZ
@@ -184,33 +162,11 @@
49807360,50331647,SE
50331648,57083940,US
57083941,57083941,BE
-57083942,68259583,US
-68259584,68259599,CA
-68259600,68296775,US
-68296776,68296783,MX
-68296784,68298887,US
-68298888,68298895,CA
-68298896,68305407,US
+57083942,68305407,US
68305408,68305919,MX
-68305920,68314143,US
-68314144,68314151,CA
-68314152,68395663,US
-68395664,68395671,CA
-68395672,68438287,US
-68438288,68438303,CA
-68438304,68649143,US
-68649144,68649151,CA
-68649152,69156927,US
-69156928,69156935,US
-69156936,69533951,US
-69533952,69534207,CA
-69534208,69915111,US
-69915112,69915119,CA
-69915120,69937263,US
-69937264,69937271,CA
-69937272,69956103,US
-69956104,69956111,BM
-69956112,71020543,US
+68305920,69094399,US
+69094400,69094655,AU
+69094656,71020543,US
71020544,71020799,CA
71020800,71571339,US
71571340,71571340,DE
@@ -220,17 +176,7 @@
71571714,71571715,DE
71571716,71595007,US
71595008,71595519,GB
-71595520,71664639,US
-71664640,71664692,GB
-71664693,71664693,US
-71664694,71664700,GB
-71664701,71664701,US
-71664702,71664704,GB
-71664705,71664705,US
-71664706,71664752,GB
-71664753,71664753,US
-71664754,71664895,GB
-71664896,71665077,US
+71595520,71665077,US
71665078,71665078,DE
71665079,71666464,US
71666465,71666465,DE
@@ -252,20 +198,11 @@
71667657,71667657,NL
71667658,71670208,US
71670209,71670209,NL
-71670210,72348895,US
-72348896,72348927,CA
-72348928,83886079,US
+71670210,83886079,US
83886080,83951615,SY
83951616,83959807,UA
83959808,83961855,ES
-83961856,83962111,KW
-83962112,83962367,SA
-83962368,83962623,BH
-83962624,83962879,LB
-83962880,83963135,AE
-83963136,83963391,QA
-83963392,83963647,OM
-83963648,83963903,JO
+83961856,83963903,CY
83963904,83965951,RU
83965952,83967999,CZ
83968000,83976191,DE
@@ -284,1371 +221,73 @@
84049920,84082687,RO
84082688,84148223,RU
84148224,84410367,DE
-84410368,84433919,RU
-84433920,84434176,UA
-84434177,84443135,RU
+84410368,84428799,RU
+84428800,84430847,GB
+84430848,84434943,RU
+84434944,84443135,IT
84443136,84451327,LB
84451328,84457471,RU
84457472,84459519,ES
84459520,84471807,RU
84471808,84473855,IQ
84473856,84475903,HU
-84475904,84540543,DE
-84540544,84540607,IT
-84540608,84541295,DE
-84541296,84541311,IT
-84541312,84545535,DE
+84475904,84545535,DE
84545536,84549631,GB
84549632,84551679,GE
84551680,84557823,DE
84557824,84557824,NL
84557825,84557825,US
-84557826,84557827,RU
-84557828,84557831,SG
-84557832,84557839,CA
-84557840,84557887,US
-84557888,84557951,BG
-84557952,84557967,AU
-84557968,84557983,US
-84557984,84557991,NL
-84557992,84557999,IT
-84558000,84558015,US
-84558016,84558047,JO
-84558048,84558127,US
-84558128,84558143,RU
-84558144,84558175,NL
-84558176,84558191,US
-84558192,84558207,HU
-84558208,84558223,NL
-84558224,84558239,US
-84558240,84558271,TR
-84558272,84558303,US
-84558304,84558311,NO
-84558312,84558319,NL
-84558320,84558335,TR
-84558336,84558375,US
-84558376,84558383,GR
-84558384,84558415,US
-84558416,84558423,MA
-84558424,84558431,IT
-84558432,84558511,US
-84558512,84558519,GB
-84558520,84558527,US
-84558528,84558543,SA
-84558544,84558551,LV
-84558552,84558559,AF
-84558560,84558567,GR
-84558568,84558575,BZ
-84558576,84558583,RO
-84558584,84558655,US
-84558656,84558855,NL
-84558856,84558863,US
-84558864,84558871,NL
-84558872,84558879,IN
-84558880,84558887,US
-84558888,84558891,EG
-84558892,84558895,IT
-84558896,84558903,LV
-84558904,84558907,TR
-84558908,84558919,US
-84558920,84558923,ZA
-84558924,84558927,ES
-84558928,84558931,DE
-84558932,84558935,TR
-84558936,84558943,PT
-84558944,84558947,TR
-84558948,84558951,US
-84558952,84558959,NL
-84558960,84558971,US
-84558972,84558973,RU
-84558974,84558974,GB
-84558975,84558975,EG
-84558976,84558983,US
-84558984,84558991,NL
-84558992,84559007,US
-84559008,84559015,TH
-84559016,84559023,BR
-84559024,84559031,AR
-84559032,84559039,US
-84559040,84559071,NL
-84559072,84559079,IT
-84559080,84559095,US
-84559096,84559099,LB
-84559100,84559103,RU
-84559104,84559111,IT
-84559112,84559119,AE
-84559120,84559131,SY
-84559132,84559135,GB
-84559136,84559151,US
-84559152,84559159,MA
-84559160,84559167,TR
-84559168,84559175,NL
-84559176,84559179,GB
-84559180,84559183,QA
-84559184,84559191,US
-84559192,84559199,GB
-84559200,84559211,IN
-84559212,84559223,US
-84559224,84559231,UA
-84559232,84559247,NL
-84559248,84559251,GB
-84559252,84559253,MA
-84559254,84559254,AU
-84559255,84559255,NL
-84559256,84559259,AE
-84559260,84559260,ZA
-84559261,84559261,NL
-84559262,84559262,GB
-84559263,84559263,MA
-84559264,84559271,ES
-84559272,84559279,NL
-84559280,84559295,US
-84559296,84559303,NL
-84559304,84559311,AE
-84559312,84559327,NL
-84559328,84559335,US
-84559336,84559343,TR
-84559344,84559367,US
-84559368,84559375,GB
-84559376,84559383,SG
-84559384,84559399,US
-84559400,84559403,CN
-84559404,84559405,RU
-84559406,84559406,AU
-84559407,84559407,EG
-84559408,84559415,US
-84559416,84559419,RU
-84559420,84559421,VG
-84559422,84559422,AU
-84559423,84559431,LB
-84559432,84559439,SE
-84559440,84559447,CN
-84559448,84559455,GB
-84559456,84559457,NL
-84559458,84559459,MA
-84559460,84559463,GB
-84559464,84559471,US
-84559472,84559479,QA
-84559480,84559487,SG
-84559488,84559495,US
-84559496,84559503,CY
-84559504,84559511,US
-84559512,84559519,BR
-84559520,84559527,ES
-84559528,84559535,FI
-84559536,84559543,NL
-84559544,84559567,US
-84559568,84559575,DE
-84559576,84559583,NL
-84559584,84559591,US
-84559592,84559607,AU
-84559608,84559611,PL
-84559612,84559613,RU
-84559614,84559614,EG
-84559615,84559615,NL
-84559616,84559623,AE
-84559624,84559631,MA
-84559632,84559647,NL
-84559648,84559663,US
-84559664,84559679,NL
-84559680,84559727,US
-84559728,84559735,NL
-84559736,84559743,GB
-84559744,84559823,NL
-84559824,84559831,GB
-84559832,84559839,NL
-84559840,84559847,CA
-84559848,84559848,LB
-84559849,84559849,CN
-84559850,84559850,GR
-84559851,84559851,GB
-84559852,84559863,US
-84559864,84559867,ES
-84559868,84559879,NL
-84559880,84559887,GR
-84559888,84559895,GB
-84559896,84559903,SE
-84559904,84559919,NL
-84559920,84559935,US
-84559936,84559943,MA
-84559944,84559951,US
-84559952,84559967,CN
-84559968,84559999,US
-84560000,84560007,NL
-84560008,84560015,MA
-84560016,84560023,NL
-84560024,84560031,CA
-84560032,84560047,NL
-84560048,84560055,BD
-84560056,84560063,NL
-84560064,84560095,SE
-84560096,84560103,NL
-84560104,84560111,LB
-84560112,84560119,ES
-84560120,84560127,AE
-84560128,84560135,US
-84560136,84560143,ES
-84560144,84560151,US
-84560152,84560159,IN
-84560160,84560191,US
-84560192,84560207,NL
-84560208,84560223,JO
-84560224,84560239,AE
-84560240,84560255,GB
-84560256,84560263,KW
-84560264,84560271,CY
-84560272,84560279,IT
-84560280,84560287,KW
-84560288,84560303,RO
-84560304,84560311,NL
-84560312,84560319,US
-84560320,84560351,TR
-84560352,84560359,US
-84560360,84560367,IE
-84560368,84560375,US
-84560376,84560383,AE
-84560384,84560391,IL
-84560392,84560399,NL
-84560400,84560407,BZ
-84560408,84560415,AU
-84560416,84560423,TR
-84560424,84560543,CN
-84560544,84560551,IL
-84560552,84560559,US
-84560560,84560567,JP
-84560568,84560575,AU
-84560576,84560607,CN
-84560608,84560623,US
-84560624,84560631,SE
-84560632,84560635,SA
+84557826,84560635,NL
84560636,84560639,US
-84560640,84560671,GB
-84560672,84560703,US
-84560704,84560735,IL
-84560736,84560751,NL
-84560752,84560783,US
-84560784,84560791,SA
-84560792,84560799,KW
-84560800,84560815,TR
-84560816,84560823,US
-84560824,84560827,RU
-84560828,84560831,GB
-84560832,84560847,US
-84560848,84560855,NL
-84560856,84560859,IN
-84560860,84560863,KR
-84560864,84560879,CN
-84560880,84560895,US
-84560896,84560903,PT
-84560904,84560911,SG
-84560912,84560919,US
-84560920,84560927,IL
-84560928,84560935,TR
-84560936,84560943,ES
-84560944,84560999,US
-84561000,84561007,IN
-84561008,84561015,US
-84561016,84561023,NL
-84561024,84561031,EG
-84561032,84561039,NL
-84561040,84561047,US
-84561048,84561051,GB
-84561052,84561055,ES
-84561056,84561063,RU
-84561064,84561079,GB
-84561080,84561087,US
-84561088,84561095,IL
-84561096,84561103,ES
-84561104,84561115,GB
-84561116,84561127,NL
-84561128,84561135,BR
-84561136,84561143,VG
-84561144,84561215,NL
+84560640,84561215,NL
84561216,84561247,US
-84561248,84561255,NL
-84561256,84561263,US
-84561264,84561267,NL
-84561268,84561271,CY
-84561272,84561275,LB
-84561276,84561279,TR
-84561280,84561343,NL
-84561344,84561351,TH
+84561248,84561351,NL
84561352,84561359,MY
-84561360,84561367,CH
-84561368,84561383,US
-84561384,84561387,NG
-84561388,84561391,ES
-84561392,84561399,KW
-84561400,84561407,MC
-84561408,84561431,US
-84561432,84561435,NL
-84561436,84561443,US
-84561444,84561447,IE
-84561448,84561455,US
-84561456,84561471,GB
-84561472,84561479,US
-84561480,84561483,RU
-84561484,84561487,CA
-84561488,84561495,US
-84561496,84561503,ES
-84561504,84561519,US
-84561520,84561527,EE
-84561528,84561543,US
-84561544,84561551,CA
-84561552,84561559,YE
-84561560,84561567,GB
-84561568,84561631,US
-84561632,84561639,NL
+84561360,84561639,NL
84561640,84561647,ES
-84561648,84561655,NL
-84561656,84561671,IL
-84561672,84561679,US
-84561680,84561687,NL
-84561688,84561703,US
-84561704,84561711,NL
-84561712,84561727,TR
+84561648,84561655,AF
+84561656,84561687,NL
+84561688,84561695,US
+84561696,84561727,NL
84561728,84561791,US
-84561792,84561895,NL
-84561896,84561903,US
-84561904,84561911,CN
-84561912,84561919,US
-84561920,84562431,NL
-84562432,84562439,MA
-84562440,84562447,NL
-84562448,84562455,US
-84562456,84562463,SG
-84562464,84562479,ES
-84562480,84562487,IN
-84562488,84562495,NL
-84562496,84562503,US
-84562504,84562511,IL
-84562512,84562519,IT
-84562520,84562527,DE
-84562528,84562535,TR
-84562536,84562551,US
-84562552,84562555,RO
-84562556,84562559,US
-84562560,84562591,GB
-84562592,84562599,NL
-84562600,84562607,CN
-84562608,84562615,US
-84562616,84562623,BA
-84562624,84562631,CY
-84562632,84562647,ES
-84562648,84562655,SZ
-84562656,84562663,IL
-84562664,84562671,JO
-84562672,84562679,GB
-84562680,84562751,ES
-84562752,84562815,US
-84562816,84562831,NL
-84562832,84562847,US
-84562848,84562863,NL
-84562864,84562887,LT
-84562888,84562903,NO
-84562904,84562911,IN
-84562912,84562927,AR
-84562928,84562939,US
-84562940,84562943,GB
-84562944,84562951,DK
-84562952,84562952,AU
-84562953,84562953,US
-84562954,84562955,RU
-84562956,84562956,CA
-84562957,84562957,GR
-84562958,84562959,US
-84562960,84562963,SE
-84562964,84562975,NL
-84562976,84562983,ES
-84562984,84562991,RO
-84562992,84562999,AU
-84563000,84563007,US
-84563008,84563011,TR
-84563012,84563015,RU
-84563016,84563019,US
-84563020,84563021,RU
-84563022,84563022,BR
-84563023,84563031,US
-84563032,84563035,GB
-84563036,84563037,MA
-84563038,84563039,HK
-84563040,84563043,TR
-84563044,84563044,EG
-84563045,84563045,TR
-84563046,84563046,SA
-84563047,84563047,AE
-84563048,84563055,CN
-84563056,84563063,GB
-84563064,84563067,RO
-84563068,84563071,KR
-84563072,84563087,NL
-84563088,84563095,SE
-84563096,84563103,AU
-84563104,84563111,CH
-84563112,84563115,RU
-84563116,84563116,TR
-84563117,84563117,RU
-84563118,84563119,US
-84563120,84563123,NL
-84563124,84563127,AE
-84563128,84563135,GB
-84563136,84563143,LT
-84563144,84563151,NZ
-84563152,84563159,AU
-84563160,84563167,RU
-84563168,84563175,IL
-84563176,84563183,NL
-84563184,84563195,CA
-84563196,84563197,RU
-84563198,84563198,US
-84563199,84563199,NL
-84563200,84563207,CH
-84563208,84563211,CN
-84563212,84563215,TR
-84563216,84563223,RU
-84563224,84563231,GB
-84563232,84563239,US
-84563240,84563247,DE
-84563248,84563255,ES
-84563256,84563259,GB
-84563260,84563263,IN
-84563264,84563279,US
-84563280,84563287,CN
-84563288,84563295,RU
-84563296,84563303,CN
-84563304,84563311,IL
-84563312,84563319,IN
-84563320,84563327,CH
-84563328,84563391,NL
-84563392,84563399,SA
-84563400,84563407,ES
-84563408,84563408,DE
-84563409,84563409,AE
-84563410,84563410,US
-84563411,84563411,AU
-84563412,84563415,AF
-84563416,84563423,CH
-84563424,84563431,US
-84563432,84563439,GB
-84563440,84563463,CA
-84563464,84563471,NL
-84563472,84563479,US
-84563480,84563483,NL
-84563484,84563487,AE
-84563488,84563495,AU
-84563496,84563503,EG
-84563504,84563511,CN
-84563512,84563517,AU
-84563518,84563519,US
-84563520,84563527,IN
-84563528,84563531,CN
-84563532,84563535,NL
-84563536,84563543,US
-84563544,84563551,NL
-84563552,84563575,US
-84563576,84563583,AU
-84563584,84563591,GB
-84563592,84563595,RU
-84563596,84563597,IN
-84563598,84563599,AU
-84563600,84563615,US
-84563616,84563623,CN
-84563624,84563627,NL
-84563628,84563631,GB
-84563632,84563639,US
-84563640,84563647,NL
+84561792,84562383,NL
+84562384,84562391,US
+84562392,84562511,NL
+84562512,84562527,US
+84562528,84563647,NL
84563648,84563655,US
-84563656,84563663,EG
-84563664,84563671,SA
-84563672,84563679,NL
-84563680,84563687,US
-84563688,84563691,AE
+84563656,84563691,NL
84563692,84563695,GB
-84563696,84563703,KW
-84563704,84563712,NL
-84563713,84563713,AU
-84563714,84563714,CN
-84563715,84563719,GB
-84563720,84563727,RO
-84563728,84563731,US
-84563732,84563735,NL
-84563736,84563743,CA
-84563744,84563751,GB
-84563752,84563807,US
-84563808,84563815,CN
-84563816,84563823,NL
-84563824,84563839,US
-84563840,84563847,CN
-84563848,84563851,IN
-84563852,84563853,EG
-84563854,84563863,US
-84563864,84563864,FI
-84563865,84563865,BR
-84563866,84563867,SA
-84563868,84563871,FI
-84563872,84563875,NL
-84563876,84563879,RU
-84563880,84563887,GB
-84563888,84563895,US
-84563896,84563903,NL
-84563904,84563905,CN
-84563906,84563906,RU
-84563907,84563907,NL
-84563908,84563911,RU
-84563912,84563915,GB
-84563916,84563917,US
-84563918,84563919,AE
-84563920,84563923,NL
-84563924,84563925,TR
-84563926,84563927,CN
-84563928,84563935,CH
-84563936,84563943,ES
-84563944,84563951,US
-84563952,84563953,AE
-84563954,84563954,US
-84563955,84563955,NL
-84563956,84563958,CN
-84563959,84563959,US
-84563960,84563963,GB
-84563964,84563965,CN
-84563966,84563966,AU
-84563967,84563967,TR
-84563968,84563975,US
-84563976,84563979,GB
-84563980,84563983,NL
-84563984,84563991,DK
-84563992,84563999,US
-84564000,84564007,FI
-84564008,84564015,US
-84564016,84564023,NL
-84564024,84564031,US
-84564032,84564039,GB
-84564040,84564047,NL
-84564048,84564055,NG
-84564056,84564063,AE
-84564064,84564071,RO
-84564072,84564075,NL
-84564076,84564095,US
-84564096,84564099,NL
-84564100,84564119,US
-84564120,84564127,JO
-84564128,84564159,US
-84564160,84564191,NL
-84564192,84564199,ES
-84564200,84564203,US
-84564204,84564207,NL
-84564208,84564223,CN
-84564224,84564231,UG
-84564232,84564239,DK
-84564240,84564247,IL
-84564248,84564263,TR
-84564264,84564271,IT
-84564272,84564279,US
-84564280,84564287,AE
-84564288,84564295,US
-84564296,84564311,DK
-84564312,84564319,US
-84564320,84564327,MA
-84564328,84564331,DE
-84564332,84564332,ES
-84564333,84564333,KW
-84564334,84564335,US
-84564336,84564343,IL
-84564344,84564359,TR
-84564360,84564367,NL
-84564368,84564375,TR
-84564376,84564383,AL
-84564384,84564391,SG
-84564392,84564415,NL
-84564416,84564423,BG
-84564424,84564431,TR
-84564432,84564447,US
-84564448,84564463,TR
-84564464,84564471,SG
-84564472,84564479,EG
-84564480,84564495,US
-84564496,84564503,ES
-84564504,84564575,US
-84564576,84564583,PT
-84564584,84564591,US
-84564592,84564599,ES
-84564600,84564607,US
-84564608,84564615,IT
-84564616,84564655,US
-84564656,84564671,CZ
-84564672,84564687,US
-84564688,84564703,GB
-84564704,84564711,US
-84564712,84564719,CN
-84564720,84564735,US
-84564736,84564743,IN
-84564744,84564751,DE
-84564752,84564767,US
-84564768,84564775,NL
-84564776,84564783,CA
-84564784,84564791,NL
-84564792,84564815,BR
-84564816,84564823,DE
-84564824,84564827,US
-84564828,84564839,DE
-84564840,84564847,SG
-84564848,84564851,UG
-84564852,84564855,PT
-84564856,84564863,TR
-84564864,84564871,US
-84564872,84564879,ES
-84564880,84564911,US
-84564912,84564919,GB
-84564920,84564967,US
-84564968,84564975,DK
-84564976,84564983,GB
-84564984,84564991,IL
-84564992,84564999,NO
-84565000,84565007,US
-84565008,84565015,DE
-84565016,84565023,BA
-84565024,84565031,US
-84565032,84565039,TW
-84565040,84565047,PL
-84565048,84565055,NL
-84565056,84565071,US
-84565072,84565079,NL
-84565080,84565087,US
-84565088,84565119,DK
-84565120,84565183,DE
-84565184,84565215,US
-84565216,84565223,GB
-84565224,84565227,CA
-84565228,84565231,BR
-84565232,84565239,NL
-84565240,84565243,SE
-84565244,84565255,US
-84565256,84565271,NL
-84565272,84565279,US
-84565280,84565287,BE
-84565288,84565303,NL
-84565304,84565311,IN
-84565312,84565319,ZA
-84565320,84565327,RO
-84565328,84565335,BR
-84565336,84565343,AE
-84565344,84565351,US
-84565352,84565359,DK
-84565360,84565367,NG
-84565368,84565375,SA
-84565376,84565391,TR
-84565392,84565399,US
-84565400,84565407,LT
-84565408,84565415,AR
-84565416,84565431,GB
-84565432,84565439,ES
-84565440,84565471,UA
-84565472,84565479,TR
-84565480,84565495,US
-84565496,84565503,BE
-84565504,84565567,ZA
-84565568,84565599,US
-84565600,84565607,VG
-84565608,84565615,TR
-84565616,84565631,US
-84565632,84565639,NL
-84565640,84565647,AL
-84565648,84565655,DK
-84565656,84565663,GR
-84565664,84565667,MA
-84565668,84565671,VG
-84565672,84565679,NL
-84565680,84565687,US
-84565688,84565695,GB
-84565696,84565711,EG
-84565712,84565719,GB
-84565720,84565727,US
-84565728,84565743,CA
-84565744,84565751,SA
-84565752,84565759,GB
-84565760,84565791,US
-84565792,84565799,IE
-84565800,84565807,CA
-84565808,84565823,CY
-84565824,84565847,US
-84565848,84565855,HR
-84565856,84565871,AE
-84565872,84565887,US
-84565888,84565895,LV
-84565896,84565903,JO
-84565904,84565911,FI
-84565912,84565935,US
-84565936,84565967,GB
-84565968,84565975,US
-84565976,84565999,GB
-84566000,84566007,NL
-84566008,84566015,NG
-84566016,84566031,RU
-84566032,84566047,TR
-84566048,84566055,US
-84566056,84566063,NL
-84566064,84566079,US
-84566080,84566095,IN
-84566096,84566111,US
-84566112,84566143,IT
-84566144,84566159,NL
-84566160,84566175,AE
-84566176,84566191,NO
-84566192,84566199,US
-84566200,84566207,AE
-84566208,84566223,CA
-84566224,84566231,DK
-84566232,84566239,ES
-84566240,84566247,PT
-84566248,84566271,IN
-84566272,84566279,US
-84566280,84566287,BZ
-84566288,84566289,US
-84566290,84566290,LT
-84566291,84566291,NO
-84566292,84566293,US
-84566294,84566294,GB
-84566295,84566303,US
-84566304,84566311,GB
-84566312,84566313,NL
-84566314,84566317,US
-84566318,84566319,LV
-84566320,84566327,US
-84566328,84566335,JO
-84566336,84566343,NL
-84566344,84566347,CN
-84566348,84566351,GB
-84566352,84566359,FR
-84566360,84566367,NL
-84566368,84566423,US
-84566424,84566427,NL
-84566428,84566431,US
-84566432,84566439,CN
-84566440,84566447,US
-84566448,84566455,LT
-84566456,84566463,NO
-84566464,84566471,BG
-84566472,84566479,NL
-84566480,84566487,IN
-84566488,84566491,AR
-84566492,84566495,ES
-84566496,84566500,GB
-84566501,84566501,US
-84566502,84566503,NL
-84566504,84566511,US
-84566512,84566515,NL
-84566516,84566519,US
-84566520,84566523,NL
-84566524,84566687,US
-84566688,84566719,NL
-84566720,84566791,US
-84566792,84566799,NL
-84566800,84566807,US
-84566808,84566815,MT
-84566816,84566847,GB
-84566848,84566911,IL
-84566912,84567039,EG
-84567040,84567047,US
-84567048,84567051,IN
-84567052,84567063,US
-84567064,84567071,CY
-84567072,84567079,US
-84567080,84567087,HK
-84567088,84567095,NL
-84567096,84567111,US
-84567112,84567119,BR
-84567120,84567127,US
-84567128,84567135,TR
-84567136,84567143,US
-84567144,84567151,TR
-84567152,84567159,US
-84567160,84567183,NL
-84567184,84567191,US
-84567192,84567199,NL
-84567200,84567215,US
-84567216,84567219,NL
-84567220,84567223,US
-84567224,84567231,NL
-84567232,84567359,US
-84567360,84567391,NL
-84567392,84567399,US
-84567400,84567415,NL
-84567416,84567551,US
-84567552,84567583,NG
-84567584,84567599,US
-84567600,84567615,NL
-84567616,84567623,ES
-84567624,84567631,US
-84567632,84567647,GB
-84567648,84567655,US
-84567656,84567663,NL
-84567664,84567671,LB
-84567672,84567679,US
-84567680,84567687,GB
-84567688,84567695,US
-84567696,84567703,NL
-84567704,84567719,US
-84567720,84567727,DE
-84567728,84567751,US
-84567752,84567759,GB
-84567760,84567767,US
-84567768,84567775,RO
-84567776,84567783,QA
-84567784,84567791,NL
-84567792,84567799,US
-84567800,84567807,DK
-84567808,84567839,US
-84567840,84567903,GB
-84567904,84567935,RU
-84567936,84568007,US
-84568008,84568023,EG
-84568024,84568031,KE
-84568032,84568063,AR
-84568064,84568071,AE
-84568072,84568079,US
-84568080,84568087,DK
-84568088,84568095,US
-84568096,84568111,NL
-84568112,84568119,US
-84568120,84568127,BZ
-84568128,84568143,US
-84568144,84568151,TR
-84568152,84568159,RO
-84568160,84568191,HK
-84568192,84568199,QA
-84568200,84568203,US
-84568204,84568207,NL
-84568208,84568215,MA
-84568216,84568223,US
-84568224,84568231,SA
-84568232,84568239,QA
-84568240,84568247,BR
-84568248,84568255,EG
-84568256,84568263,US
-84568264,84568271,NL
-84568272,84568279,US
-84568280,84568287,CN
-84568288,84568295,JO
-84568296,84568303,US
-84568304,84568311,ES
-84568312,84568319,US
-84568320,84568327,GB
-84568328,84568367,US
-84568368,84568383,NL
-84568384,84568583,US
-84568584,84568599,NL
-84568600,84568607,AE
-84568608,84568623,US
-84568624,84568627,PL
-84568628,84568639,NL
-84568640,84568647,AU
-84568648,84568655,AT
-84568656,84568671,EG
-84568672,84568695,NL
-84568696,84568711,US
-84568712,84568715,NL
-84568716,84568719,GB
-84568720,84568727,IE
-84568728,84568735,IT
-84568736,84568743,GB
-84568744,84568751,UA
-84568752,84568759,CZ
-84568760,84568767,DO
-84568768,84568799,TR
-84568800,84568807,BD
-84568808,84568823,AE
-84568824,84568831,US
-84568832,84568863,GB
-84568864,84568871,NL
-84568872,84568879,US
-84568880,84568887,GB
-84568888,84568895,RU
-84568896,84568911,NL
-84568912,84568919,CN
-84568920,84568927,PA
-84568928,84568935,QA
-84568936,84568943,IT
-84568944,84568959,MX
-84568960,84568975,US
-84568976,84568983,IN
-84568984,84568991,CA
-84568992,84568999,AU
-84569000,84569007,US
-84569008,84569015,GR
-84569016,84569023,GB
-84569024,84569039,JP
-84569040,84569047,US
-84569048,84569055,LB
-84569056,84569063,UA
-84569064,84569071,SA
-84569072,84569079,RU
-84569080,84569087,HR
-84569088,84569095,US
-84569096,84569103,DE
-84569104,84569111,SA
-84569112,84569127,GB
-84569128,84569163,US
-84569164,84569167,NL
-84569168,84569215,US
-84569216,84569223,TR
-84569224,84569231,MA
-84569232,84569239,AT
-84569240,84569247,JO
-84569248,84569255,ZA
-84569256,84569267,TW
-84569268,84569271,US
-84569272,84569343,GB
-84569344,84569351,TR
-84569352,84569359,US
-84569360,84569375,CN
-84569376,84569391,SY
-84569392,84569439,US
-84569440,84569447,GB
-84569448,84569455,DK
-84569456,84569463,US
-84569464,84569471,CN
-84569472,84569535,NL
-84569536,84569551,PK
-84569552,84569559,CN
-84569560,84569567,LB
-84569568,84569575,GB
-84569576,84569579,IT
-84569580,84569591,TR
-84569592,84569595,PL
-84569596,84569599,CY
-84569600,84569607,GB
-84569608,84569615,TR
-84569616,84569623,AU
-84569624,84569631,GB
-84569632,84569647,US
-84569648,84569663,AU
-84569664,84569679,PK
-84569680,84569727,AU
-84569728,84569791,NL
-84569792,84569823,AU
-84569824,84569839,CN
-84569840,84569847,US
-84569848,84569863,SE
-84569864,84569871,CN
-84569872,84569879,TR
-84569880,84569883,US
-84569884,84569887,BR
-84569888,84569895,TR
-84569896,84569899,BR
-84569900,84569911,DE
-84569912,84569919,CN
-84569920,84569927,US
-84569928,84569935,SA
-84569936,84569943,US
-84569944,84569951,SZ
-84569952,84569959,ES
-84569960,84569967,NL
-84569968,84569975,AT
-84569976,84569983,CA
-84569984,84570015,IL
-84570016,84570023,IT
-84570024,84570031,US
-84570032,84570039,IL
-84570040,84570047,NL
-84570048,84570055,DE
-84570056,84570059,NL
-84570060,84570063,ES
-84570064,84570071,GB
-84570072,84570079,DK
-84570080,84570087,TR
-84570088,84570095,DK
-84570096,84570103,US
-84570104,84570111,BR
-84570112,84570143,AE
-84570144,84570159,MA
-84570160,84570175,US
-84570176,84570207,NL
-84570208,84570223,AE
-84570224,84570239,ES
-84570240,84570255,US
-84570256,84570271,DK
-84570272,84570335,TR
-84570336,84570343,RU
-84570344,84570351,AE
-84570352,84570367,CA
-84570368,84570383,NL
-84570384,84570391,CZ
-84570392,84570399,KW
-84570400,84570439,US
-84570440,84570447,NL
-84570448,84570463,EG
-84570464,84570471,US
-84570472,84570479,HK
-84570480,84570495,US
-84570496,84570503,NL
-84570504,84570511,US
-84570512,84570519,AU
-84570520,84570523,NL
-84570524,84570527,UA
-84570528,84570535,US
-84570536,84570543,IT
-84570544,84570551,AU
-84570552,84570555,AT
-84570556,84570559,NL
-84570560,84570591,US
-84570592,84570599,BR
-84570600,84570607,US
-84570608,84570615,BR
-84570616,84570623,US
-84570624,84570631,RU
-84570632,84570639,TR
-84570640,84570647,SA
-84570648,84570651,CN
-84570652,84570655,IN
-84570656,84570679,TR
-84570680,84570687,KW
-84570688,84570699,PK
-84570700,84570703,GB
-84570704,84570711,AE
-84570712,84570719,IN
-84570720,84570731,US
-84570732,84570735,HR
-84570736,84570743,US
-84570744,84570751,SA
-84570752,84570767,NL
-84570768,84570771,SA
-84570772,84570773,AE
-84570774,84570774,BA
-84570775,84570775,US
-84570776,84570779,GB
-84570780,84570780,BH
-84570781,84570782,US
-84570783,84570783,CN
-84570784,84570791,IT
-84570792,84570799,EG
-84570800,84570815,CA
-84570816,84570823,SA
-84570824,84570831,AE
-84570832,84570847,NL
-84570848,84570855,AE
-84570856,84570863,US
-84570864,84570871,TR
-84570872,84570879,SE
-84570880,84570887,US
-84570888,84570903,GB
-84570904,84570911,SA
-84570912,84570935,MA
-84570936,84570951,SA
-84570952,84570959,SG
-84570960,84570967,MA
-84570968,84570975,UG
-84570976,84570979,NL
-84570980,84570991,IN
-84570992,84570999,US
-84571000,84571007,IL
-84571008,84571047,US
-84571048,84571055,JO
-84571056,84571073,US
-84571074,84571075,GB
-84571076,84571079,NL
-84571080,84571087,BR
-84571088,84571103,GB
-84571104,84571111,MA
-84571112,84571127,SA
-84571128,84571131,IL
-84571132,84571135,TR
-84571136,84571159,US
-84571160,84571167,TR
-84571168,84571175,NO
-84571176,84571191,CN
-84571192,84571195,AU
-84571196,84571199,BH
-84571200,84571207,US
-84571208,84571215,HR
-84571216,84571219,DK
-84571220,84571223,PA
-84571224,84571231,PL
-84571232,84571247,CN
-84571248,84571261,AU
-84571262,84571262,GB
-84571263,84571295,US
-84571296,84571303,AU
-84571304,84571311,HU
-84571312,84571319,AE
-84571320,84571335,GB
-84571336,84571343,IL
-84571344,84571351,GB
-84571352,84571359,DK
-84571360,84571367,UA
-84571368,84571383,TR
-84571384,84571387,MA
-84571388,84571389,IN
-84571390,84571391,KR
-84571392,84571407,BR
-84571408,84571415,RU
-84571416,84571419,BR
-84571420,84571431,IL
-84571432,84571439,BR
-84571440,84571455,NL
-84571456,84571463,EG
-84571464,84571471,NL
-84571472,84571487,DE
-84571488,84571519,ES
-84571520,84571531,US
-84571532,84571551,DK
-84571552,84571559,IE
-84571560,84571567,MX
-84571568,84571583,US
-84571584,84571599,PT
-84571600,84571607,US
-84571608,84571615,BA
-84571616,84571623,NL
-84571624,84571631,SZ
-84571632,84571639,US
-84571640,84571647,AU
-84571648,84571679,BR
-84571680,84571687,GB
-84571688,84571695,BM
-84571696,84571711,NL
-84571712,84571715,DE
-84571716,84571719,PK
-84571720,84571727,NL
-84571728,84571743,IN
-84571744,84571759,GB
-84571760,84571775,US
-84571776,84571783,EG
-84571784,84571787,CY
-84571788,84571799,IN
-84571800,84571831,US
-84571832,84571839,NL
-84571840,84571871,BR
-84571872,84571887,US
-84571888,84571903,NL
-84571904,84571911,AE
-84571912,84571919,NL
-84571920,84571927,EG
-84571928,84571935,BD
-84571936,84571943,IT
-84571944,84571951,PL
-84571952,84571959,CA
-84571960,84571975,ES
-84571976,84571983,US
-84571984,84571995,TR
-84571996,84571999,SA
-84572000,84572007,LB
-84572008,84572015,AE
-84572016,84572023,CN
-84572024,84572031,FR
-84572032,84572035,US
-84572036,84572043,AF
-84572044,84572047,US
-84572048,84572055,IN
-84572056,84572063,NZ
-84572064,84572071,DE
-84572072,84572095,US
-84572096,84572103,NL
-84572104,84572111,US
-84572112,84572127,NL
-84572128,84572135,US
-84572136,84572143,GB
-84572144,84572159,AF
-84572160,84572223,US
-84572224,84572239,TR
-84572240,84572243,NL
-84572244,84572247,TR
-84572248,84572251,GB
-84572252,84572259,IT
-84572260,84572261,NL
-84572262,84572262,EG
-84572263,84572263,AE
-84572264,84572271,NL
-84572272,84572279,US
-84572280,84572287,NL
-84572288,84572289,US
-84572290,84572291,NL
-84572292,84572295,US
-84572296,84572303,BR
-84572304,84572311,NL
-84572312,84572319,SA
-84572320,84572367,US
-84572368,84572375,GB
-84572376,84572383,VG
-84572384,84572391,TR
-84572392,84572399,CN
-84572400,84572407,US
-84572408,84572415,TR
-84572416,84572423,US
-84572424,84572427,IT
-84572428,84572431,LV
-84572432,84572435,US
-84572436,84572439,DE
-84572440,84572447,TR
-84572448,84572455,US
-84572456,84572459,SE
-84572460,84572463,LB
-84572464,84572471,US
-84572472,84572479,DE
-84572480,84572495,US
-84572496,84572503,HK
-84572504,84572511,EG
-84572512,84572515,IL
-84572516,84572519,US
-84572520,84572527,GB
-84572528,84572559,US
-84572560,84572575,KW
-84572576,84572583,US
-84572584,84572591,RU
-84572592,84572599,US
-84572600,84572607,AE
-84572608,84572615,DK
-84572616,84572623,BG
-84572624,84572647,US
-84572648,84572655,NL
-84572656,84572663,ES
-84572664,84572671,AE
-84572672,84572679,DK
-84572680,84572687,CN
-84572688,84572695,TW
-84572696,84572703,RU
-84572704,84572711,US
-84572712,84572715,GB
-84572716,84572717,HR
-84572718,84572718,GB
-84572719,84572719,GR
-84572720,84572727,CA
-84572728,84572731,US
-84572732,84572733,SA
-84572734,84572734,CN
-84572735,84572735,TR
-84572736,84572743,EG
-84572744,84572751,GB
-84572752,84572759,HR
-84572760,84572771,TR
-84572772,84572775,US
-84572776,84572783,BR
-84572784,84572799,TR
-84572800,84572807,US
-84572808,84572815,SY
-84572816,84572823,CY
-84572824,84572831,GB
-84572832,84572839,NL
-84572840,84572847,BD
-84572848,84572855,SA
-84572856,84572863,CY
-84572864,84572871,ES
-84572872,84572879,IT
-84572880,84572887,SA
-84572888,84572895,US
-84572896,84572903,HR
-84572904,84572911,DK
-84572912,84572919,CN
-84572920,84572923,IT
-84572924,84573183,NL
-84573184,84573191,BE
-84573192,84573199,NL
-84573200,84573211,US
-84573212,84573215,NL
-84573216,84573231,TR
-84573232,84573239,US
-84573240,84573247,FR
-84573248,84573255,CH
-84573256,84573279,NL
-84573280,84573311,US
-84573312,84573343,NL
-84573344,84573351,GB
-84573352,84573359,SA
-84573360,84573371,US
-84573372,84573375,TR
-84573376,84573387,US
-84573388,84573391,NL
-84573392,84573415,US
-84573416,84573423,NL
-84573424,84573439,US
-84573440,84573440,NL
-84573441,84573441,US
-84573442,84573443,NL
-84573444,84573447,IT
-84573448,84573455,US
-84573456,84573463,JP
-84573464,84573471,LB
-84573472,84573479,PS
-84573480,84573495,NL
-84573496,84573499,AE
-84573500,84573502,HK
-84573503,84573511,NL
-84573512,84573516,HK
-84573517,84573518,NL
-84573519,84573571,US
-84573572,84573575,GB
-84573576,84573579,NL
-84573580,84573583,GB
-84573584,84573587,RU
-84573588,84573591,US
-84573592,84573599,JP
-84573600,84573603,NL
-84573604,84573607,US
-84573608,84573611,NL
-84573612,84573615,US
-84573616,84573623,GB
-84573624,84573631,NG
-84573632,84573639,IE
-84573640,84573647,CA
-84573648,84573656,LB
-84573657,84573657,CY
-84573658,84573675,US
-84573676,84573676,NL
-84573677,84573677,GB
-84573678,84573679,TR
-84573680,84573687,HR
-84573688,84573688,SA
-84573689,84573690,TR
-84573691,84573691,AE
-84573692,84573694,RO
-84573695,84573696,NL
-84573697,84573697,BE
-84573698,84573699,US
-84573700,84573703,RU
-84573704,84573711,IT
-84573712,84573727,AE
-84573728,84573759,RU
-84573760,84573823,IT
-84573824,84573839,HR
-84573840,84573855,GB
-84573856,84573887,AE
-84573888,84573919,PA
-84573920,84573927,BR
-84573928,84573951,RU
-84573952,84573983,RO
-84573984,84574055,US
-84574056,84574063,PS
-84574064,84574071,IT
-84574072,84574103,HK
-84574104,84574207,US
+84563696,84563703,NL
+84563704,84563711,US
+84563712,84564411,NL
+84564412,84564415,US
+84564416,84564498,NL
+84564499,84564499,GB
+84564500,84564863,NL
+84564864,84564871,TR
+84564872,84565247,NL
+84565248,84565311,US
+84565312,84565655,NL
+84565656,84565663,US
+84565664,84574207,NL
84574208,84576255,FR
84576256,84582399,GB
84582400,84590591,DE
-84590592,84591103,NL
-84591104,84592639,BR
+84590592,84592639,BR
84592640,84594687,ES
84594688,84598783,DE
84598784,84600831,IQ
84600832,84602879,GB
84602880,84606975,AZ
84606976,84609023,AT
-84609024,84609087,BI
-84609088,84610047,GB
-84610048,84610303,ZM
-84610304,84610559,ZW
-84610560,84610687,ZA
-84610688,84610815,ZM
-84610816,84610879,CD
-84610880,84610943,AO
-84610944,84611071,ZA
-84611072,84615167,A2
+84609024,84615167,GB
84615168,84617215,IT
84617216,84619263,PS
84619264,84621311,DE
84621312,84623359,GR
84623360,84627455,RU
-84627456,84627711,US
-84627712,84627967,GB
-84627968,84628223,JP
-84628224,84631551,GB
+84627456,84631551,GB
84631552,84639743,IT
84639744,84672511,TR
84672512,84934655,RO
@@ -1658,12 +297,11 @@
85327872,85360639,IR
85360640,85362687,IL
85362688,85364735,GB
-85364736,85365767,DE
-85365768,85365775,CH
-85365776,85366015,DE
-85366016,85366271,LU
-85366272,85366783,DE
-85366784,85367807,CZ
+85364736,85366783,DE
+85366784,85367039,CZ
+85367040,85367295,RU
+85367296,85367551,SK
+85367552,85367807,RU
85367808,85368831,UA
85368832,85377023,RS
85377024,85385215,IR
@@ -1671,12 +309,10 @@
85387264,85389311,SE
85389312,85391359,DE
85391360,85393407,NL
-85393408,85393919,EU
-85393920,85394175,DE
-85394176,85395711,EU
-85395712,85395743,GB
-85395744,85395775,NG
-85395776,85401599,EU
+85395968,85396223,BE
+85396480,85397503,ES
+85398528,85398783,SA
+85399552,85400063,FR
85401600,85403647,IT
85403648,85405695,FR
85405696,85407743,RU
@@ -1711,13 +347,7 @@
86114304,86147071,KZ
86147072,86155263,ES
86155264,86157311,PS
-86157312,86157615,IL
-86157616,86157631,AO
-86157632,86157647,IL
-86157648,86157663,AO
-86157664,86157823,IL
-86157824,86158079,CG
-86158080,86159359,IL
+86157312,86159359,IL
86159360,86161407,UA
86161408,86163455,IT
86163456,86171647,IR
@@ -1738,1288 +368,151 @@
86245376,86376447,OM
86376448,86409215,AE
86409216,86441983,HU
-86441984,86442239,PL
-86442240,86442243,GB
-86442244,86442247,PL
-86442248,86442255,GB
-86442256,86442271,PL
-86442272,86442287,FR
-86442288,86442291,PL
-86442292,86442295,GB
-86442296,86442303,DE
-86442304,86442319,IT
-86442320,86442327,PL
-86442328,86442335,FR
-86442336,86442343,PT
-86442344,86442351,GB
-86442352,86442363,FR
-86442364,86442367,PL
-86442368,86442415,FR
-86442416,86442423,BE
-86442424,86442431,NL
-86442432,86442435,PL
-86442436,86442439,ES
-86442440,86442443,GB
-86442444,86442447,DE
-86442448,86442507,FR
-86442508,86442511,PL
-86442512,86442527,FR
-86442528,86442543,ES
-86442544,86442551,FR
-86442552,86442555,PL
-86442556,86442559,ES
-86442560,86442599,FR
-86442600,86442603,ES
-86442604,86442623,FR
-86442624,86442639,CH
-86442640,86442655,FR
-86442656,86442663,CZ
-86442664,86442667,FR
-86442668,86442671,IT
-86442672,86442687,FI
-86442688,86442691,GB
-86442692,86442695,FR
-86442696,86442699,ES
-86442700,86442703,CH
-86442704,86442711,FR
-86442712,86442715,DE
-86442716,86442719,BE
-86442720,86442723,PT
-86442724,86442727,PL
-86442728,86442735,IT
-86442736,86442739,PL
-86442740,86442743,GB
-86442744,86442747,IE
-86442748,86442751,GB
-86442752,86443039,FR
-86443040,86443047,IT
-86443048,86443051,IE
-86443052,86443055,PL
-86443056,86443059,GB
-86443060,86443063,PL
-86443064,86443067,DE
-86443068,86443135,FR
-86443136,86443167,NL
-86443168,86443199,PT
-86443200,86443231,IT
-86443232,86443295,PT
-86443296,86443311,LT
-86443312,86443343,IE
-86443344,86443359,IT
-86443360,86443363,FR
-86443364,86443367,NL
-86443368,86443375,FR
-86443376,86443391,PT
-86443392,86443407,BE
-86443408,86443415,PL
-86443416,86443423,PT
-86443424,86443427,IT
-86443428,86443447,FR
-86443448,86443451,IT
-86443452,86443455,FI
-86443456,86443487,NL
-86443488,86443503,ES
-86443504,86443507,IT
-86443508,86443539,FR
-86443540,86443543,PL
-86443544,86443551,LT
-86443552,86443555,FR
-86443556,86443559,PL
-86443560,86443583,FR
-86443584,86443647,GB
-86443648,86443855,FR
-86443856,86443863,PT
-86443864,86443867,PL
-86443868,86443871,FR
-86443872,86443875,FI
-86443876,86443879,IE
-86443880,86443883,FR
-86443884,86443887,ES
-86443888,86443903,FR
-86443904,86443919,PL
-86443920,86443971,FR
-86443972,86443975,PT
-86443976,86443979,PL
-86443980,86443983,FR
-86443984,86443995,ES
-86443996,86443999,PT
-86444000,86444003,GB
-86444004,86444007,ES
-86444008,86444011,FR
-86444012,86444015,PL
-86444016,86444031,FR
-86444032,86444035,PT
-86444036,86444039,BE
-86444040,86444043,FR
-86444044,86444047,ES
-86444048,86444063,LT
-86444064,86444071,IT
-86444072,86444079,DE
-86444080,86444095,FR
-86444096,86444103,GB
-86444104,86444111,FR
-86444112,86444119,GB
-86444120,86444123,IT
-86444124,86444127,BE
-86444128,86444135,FR
-86444136,86444143,IE
-86444144,86444151,GB
-86444152,86444159,IE
-86444160,86444303,FR
-86444304,86444307,PL
-86444308,86444315,FR
-86444316,86444319,PL
-86444320,86444327,ES
-86444328,86444331,NL
-86444332,86444335,ES
-86444336,86444351,GB
-86444352,86444367,PL
-86444368,86444375,DE
-86444376,86444395,FR
-86444396,86444399,GB
-86444400,86444415,ES
-86444416,86444479,FR
-86444480,86444487,IE
-86444488,86444495,CH
-86444496,86444515,FR
-86444516,86444523,GB
-86444524,86444527,FR
-86444528,86444543,PL
-86444544,86444547,FR
-86444548,86444551,PL
-86444552,86444559,FR
-86444560,86444567,PL
-86444568,86444571,LT
-86444572,86444583,FR
-86444584,86444591,NL
-86444592,86444595,FR
-86444596,86444599,NL
-86444600,86444603,IE
-86444604,86444639,NL
-86444640,86444655,PL
-86444656,86444663,ES
-86444664,86444687,PL
-86444688,86444691,GB
-86444692,86444695,FR
-86444696,86444703,PL
-86444704,86444719,FR
-86444720,86444739,PL
-86444740,86444743,FR
-86444744,86444751,GB
-86444752,86444783,FR
-86444784,86444791,GB
-86444792,86444799,NL
-86444800,86444815,GB
-86444816,86444835,FR
-86444836,86444839,PL
-86444840,86444843,DE
-86444844,86444847,GB
-86444848,86444871,FR
-86444872,86444875,NL
-86444876,86444879,PL
-86444880,86444887,FR
-86444888,86444895,PL
-86444896,86444903,IT
-86444904,86444911,ES
-86444912,86444927,FI
-86444928,86444931,DE
-86444932,86444935,PL
-86444936,86444939,NL
-86444940,86444943,CH
-86444944,86444947,GB
-86444948,86444951,PL
-86444952,86444971,FR
-86444972,86444975,DE
-86444976,86444983,IE
-86444984,86444991,FR
-86444992,86445055,PT
-86445056,86445059,ES
-86445060,86445071,FR
-86445072,86445079,DE
-86445080,86445083,BE
-86445084,86445087,FR
-86445088,86445091,GB
-86445092,86445095,NL
-86445096,86445099,IT
-86445100,86445103,FI
-86445104,86445111,CH
-86445112,86445119,FR
-86445120,86445151,PT
-86445152,86445167,PL
-86445168,86445207,FR
-86445208,86445211,IE
-86445212,86445215,PL
-86445216,86445231,GB
-86445232,86445235,IE
-86445236,86445239,FR
-86445240,86445247,GB
-86445248,86445251,PL
-86445252,86445255,IE
-86445256,86445263,PL
-86445264,86445279,ES
-86445280,86445287,FR
-86445288,86445291,IT
-86445292,86445295,PL
-86445296,86445311,GB
-86445312,86445319,NL
-86445320,86445327,DE
-86445328,86445343,IE
-86445344,86445347,GB
-86445348,86445351,PL
-86445352,86445367,FR
-86445368,86445371,IT
-86445372,86445375,PL
-86445376,86445407,FR
-86445408,86445423,IE
-86445424,86445431,GB
-86445432,86445439,BE
-86445440,86445455,IE
-86445456,86445471,PL
-86445472,86445479,FR
-86445480,86445483,ES
-86445484,86445503,FR
-86445504,86445519,GB
-86445520,86445523,BE
-86445524,86445527,FR
-86445528,86445531,CZ
-86445532,86445551,FR
-86445552,86445555,ES
-86445556,86445559,GB
-86445560,86445563,PL
-86445564,86445567,ES
-86445568,86445711,FR
-86445712,86445727,PL
-86445728,86445735,DE
-86445736,86445739,FR
-86445740,86445743,ES
-86445744,86445759,GB
-86445760,86445823,FR
-86445824,86445831,NL
-86445832,86445839,ES
-86445840,86445883,FR
-86445884,86445887,IT
-86445888,86445939,FR
-86445940,86445943,PL
-86445944,86445951,IT
-86445952,86445955,CH
-86445956,86445963,FR
-86445964,86445967,DE
-86445968,86445975,FR
-86445976,86445983,PL
-86445984,86446023,FR
-86446024,86446027,GB
-86446028,86446031,IE
-86446032,86446039,FR
-86446040,86446043,BE
-86446044,86446047,FR
-86446048,86446063,NL
-86446064,86446079,PL
-86446080,86446111,FR
-86446112,86446127,GB
-86446128,86446131,CZ
-86446132,86446135,FI
-86446136,86446175,FR
-86446176,86446183,ES
-86446184,86446191,IE
-86446192,86446399,FR
-86446400,86446403,IT
-86446404,86446407,FR
-86446408,86446415,DE
-86446416,86446419,FR
-86446420,86446423,PT
-86446424,86446427,FR
+86441984,86442495,FR
+86442496,86442499,ES
+86442500,86442507,FR
+86442508,86442511,ES
+86442512,86442687,FR
+86442688,86442691,ES
+86442692,86442699,FR
+86442700,86442700,ES
+86442701,86442702,CH
+86442703,86442703,ES
+86442704,86442723,FR
+86442724,86442724,PL
+86442725,86442739,FR
+86442740,86442743,ES
+86442744,86442751,FR
+86442752,86443007,GB
+86443008,86443047,FR
+86443048,86443051,ES
+86443052,86443451,FR
+86443452,86443455,ES
+86443456,86443535,FR
+86443536,86443539,ES
+86443540,86444119,FR
+86444120,86444123,ES
+86444124,86444287,FR
+86444288,86444291,NL
+86444292,86444315,FR
+86444316,86444323,ES
+86444324,86444387,FR
+86444388,86444391,NL
+86444392,86444519,FR
+86444520,86444523,ES
+86444524,86444563,FR
+86444564,86444567,NL
+86444568,86444575,FR
+86444576,86444579,ES
+86444580,86444687,FR
+86444688,86444691,ES
+86444692,86444835,FR
+86444836,86444839,NL
+86444840,86444843,ES
+86444844,86444879,FR
+86444880,86444883,NL
+86444884,86445059,FR
+86445060,86445063,NL
+86445064,86445111,FR
+86445112,86445115,NL
+86445116,86445251,FR
+86445252,86445255,NL
+86445256,86445559,FR
+86445560,86445563,NL
+86445564,86446407,FR
+86446408,86446408,DE
+86446409,86446411,FR
+86446412,86446412,DE
+86446413,86446427,FR
86446428,86446431,DE
-86446432,86446439,PL
-86446440,86446447,FR
-86446448,86446455,PL
-86446456,86446459,BE
-86446460,86446463,CH
-86446464,86446527,FR
-86446528,86446531,DE
-86446532,86446535,PL
-86446536,86446539,FI
-86446540,86446543,NL
-86446544,86446547,IE
-86446548,86446551,FR
-86446552,86446555,PL
-86446556,86446559,GB
-86446560,86446575,FR
-86446576,86446579,PL
-86446580,86446583,ES
-86446584,86446587,IT
-86446588,86446591,CZ
-86446592,86446599,ES
-86446600,86446607,FR
-86446608,86446611,ES
-86446612,86446615,PL
-86446616,86446619,NL
-86446620,86446623,DE
-86446624,86446655,FR
-86446656,86446675,IT
-86446676,86446679,IE
-86446680,86446683,PL
-86446684,86446687,FR
-86446688,86446691,GB
-86446692,86446695,PL
-86446696,86446699,IT
-86446700,86446707,GB
-86446708,86446715,ES
-86446716,86446719,DE
-86446720,86446723,FR
-86446724,86446727,IT
-86446728,86446731,PT
-86446732,86446735,GB
-86446736,86446743,CZ
-86446744,86446751,FR
-86446752,86446755,ES
-86446756,86446763,PL
-86446764,86446767,ES
-86446768,86446879,FR
-86446880,86446887,ES
-86446888,86446911,NL
-86446912,86446927,FR
-86446928,86446931,PL
-86446932,86446943,FR
-86446944,86446975,ES
-86446976,86446979,PL
-86446980,86446991,FR
-86446992,86446999,DE
-86447000,86447015,FR
-86447016,86447023,ES
-86447024,86447027,IE
-86447028,86447039,FR
-86447040,86447047,PT
-86447048,86447051,NL
-86447052,86447063,FR
-86447064,86447071,GB
-86447072,86447087,PL
-86447088,86447091,GB
-86447092,86447103,ES
-86447104,86447119,FR
-86447120,86447135,IE
-86447136,86447147,FR
-86447148,86447151,PL
-86447152,86447167,LT
-86447168,86447199,FR
-86447200,86447215,CZ
-86447216,86447231,PL
-86447232,86447239,CH
-86447240,86447247,ES
-86447248,86447255,FR
+86446432,86446619,FR
+86446620,86446620,DE
+86446621,86446679,FR
+86446680,86446683,ES
+86446684,86447095,FR
+86447096,86447103,ES
+86447104,86447255,FR
86447256,86447263,PL
-86447264,86447267,FR
-86447268,86447279,PL
-86447280,86447283,DE
-86447284,86447287,FR
-86447288,86447291,DE
-86447292,86447295,PL
-86447296,86447299,NL
-86447300,86447303,ES
-86447304,86447311,IE
-86447312,86447335,FR
-86447336,86447339,ES
-86447340,86447343,PT
-86447344,86447347,IE
-86447348,86447351,ES
-86447352,86447355,PL
-86447356,86447615,FR
-86447616,86448383,GB
-86448384,86448639,FR
-86448640,86448703,ES
-86448704,86448723,FR
-86448724,86448727,PL
-86448728,86448731,NL
-86448732,86448735,PL
-86448736,86448767,FR
-86448768,86448783,BE
-86448784,86448791,GB
-86448792,86448795,FR
-86448796,86448799,NL
-86448800,86448803,FR
-86448804,86448815,FI
-86448816,86448831,FR
-86448832,86448839,NL
-86448840,86448843,BE
-86448844,86448847,FR
-86448848,86448851,CH
+86447264,86447279,FR
+86447280,86447280,DE
+86447281,86447287,FR
+86447288,86447288,DE
+86447289,86448803,FR
+86448804,86448807,FI
+86448808,86448851,FR
86448852,86448855,IT
86448856,86448859,PT
-86448860,86448863,PL
-86448864,86448867,GB
-86448868,86448871,PL
-86448872,86448879,FR
-86448880,86448883,PT
-86448884,86448887,PL
-86448888,86448895,FR
-86448896,86449151,GB
-86449152,86449167,BE
-86449168,86449183,ES
-86449184,86449215,CZ
-86449216,86449279,IE
-86449280,86449283,GB
-86449284,86449287,ES
-86449288,86449291,IT
-86449292,86449363,PL
+86448860,86449363,FR
86449364,86449367,DE
-86449368,86449379,PL
-86449380,86449383,FI
-86449384,86449387,PL
-86449388,86449391,FI
-86449392,86449399,FR
-86449400,86449407,PL
-86449408,86449439,FR
-86449440,86449455,ES
-86449456,86449459,FR
-86449460,86449463,PL
-86449464,86449471,FR
-86449472,86449475,PL
-86449476,86449479,LT
-86449480,86449487,FR
-86449488,86449495,ES
-86449496,86449499,FR
-86449500,86449503,PL
-86449504,86449535,BE
-86449536,86449551,FR
-86449552,86449559,PL
-86449560,86449563,PT
-86449564,86449567,PL
-86449568,86449587,FR
-86449588,86449595,DE
-86449596,86449599,FR
-86449600,86449647,IE
-86449648,86449651,FR
-86449652,86449655,GB
-86449656,86449663,ES
-86449664,86449675,FR
-86449676,86449679,PT
-86449680,86449695,FR
-86449696,86449727,NL
-86449728,86449759,PL
-86449760,86449791,FR
-86449792,86449823,PL
-86449824,86449863,FR
-86449864,86449879,PL
-86449880,86449883,FR
-86449884,86449887,DE
-86449888,86449967,FR
-86449968,86449983,PL
-86449984,86449999,FR
-86450000,86450003,GB
-86450004,86450007,PT
-86450008,86450011,FR
-86450012,86450015,IE
-86450016,86450019,FR
-86450020,86450023,PL
-86450024,86450027,FR
-86450028,86450031,PL
-86450032,86450039,FR
-86450040,86450043,DE
-86450044,86450079,PL
-86450080,86450083,FR
-86450084,86450087,NL
-86450088,86450095,FR
-86450096,86450099,GB
-86450100,86450103,DE
-86450104,86450111,FR
-86450112,86450115,BE
-86450116,86450119,FR
-86450120,86450127,GB
-86450128,86450135,PT
-86450136,86450139,IE
-86450140,86450143,IT
-86450144,86450151,ES
-86450152,86450159,GB
-86450160,86450163,FR
-86450164,86450167,GB
-86450168,86450171,FR
-86450172,86450175,LT
-86450176,86450223,FR
-86450224,86450231,IT
-86450232,86450235,FR
+86449368,86449499,FR
+86449500,86449503,ES
+86449504,86449883,FR
+86449884,86449884,DE
+86449885,86450235,FR
86450236,86450239,GB
-86450240,86450255,ES
-86450256,86450271,BE
-86450272,86450303,GB
-86450304,86450319,FR
-86450320,86450327,LT
-86450328,86450335,FR
-86450336,86450339,GB
-86450340,86450343,FR
-86450344,86450359,PL
-86450360,86450371,FR
-86450372,86450375,GB
-86450376,86450495,FR
-86450496,86450511,IT
-86450512,86450519,FR
-86450520,86450527,PL
-86450528,86450591,BE
-86450592,86450607,FR
-86450608,86450615,ES
-86450616,86450623,GB
-86450624,86450639,IT
-86450640,86450643,FR
-86450644,86450647,PL
-86450648,86450651,ES
-86450652,86450655,IT
-86450656,86450815,FR
-86450816,86450847,LT
-86450848,86450867,PT
-86450868,86450871,ES
-86450872,86450875,FR
-86450876,86450879,GB
-86450880,86450911,FR
-86450912,86450915,IT
-86450916,86450919,PL
-86450920,86450923,FR
-86450924,86450927,CH
-86450928,86451199,FR
-86451200,86451207,BE
-86451208,86451223,FR
-86451224,86451231,NL
-86451232,86451247,BE
-86451248,86451251,FR
-86451252,86451255,GB
-86451256,86451263,NL
-86451264,86451267,PL
-86451268,86451271,FR
-86451272,86451279,IT
-86451280,86451295,FR
-86451296,86451327,NL
-86451328,86451331,GB
-86451332,86451335,FR
-86451336,86451339,IT
-86451340,86451359,FR
-86451360,86451363,PL
-86451364,86451371,FR
-86451372,86451375,LT
-86451376,86451383,FR
-86451384,86451387,PT
-86451388,86451391,FR
-86451392,86451395,GB
-86451396,86451407,PL
-86451408,86451411,IT
-86451412,86451415,FR
-86451416,86451419,DE
-86451420,86451423,ES
-86451424,86451455,NL
-86451456,86451459,CZ
-86451460,86451463,GB
-86451464,86451471,FR
-86451472,86451475,PL
-86451476,86451487,FR
-86451488,86451491,CH
-86451492,86451495,FR
-86451496,86451503,CZ
-86451504,86451511,FR
-86451512,86451515,PL
-86451516,86451519,NL
-86451520,86451527,FR
-86451528,86451531,LT
-86451532,86451535,FI
-86451536,86451551,DE
-86451552,86451563,FR
-86451564,86451567,PL
-86451568,86451575,FR
-86451576,86451579,PT
-86451580,86451583,PL
-86451584,86451615,GB
-86451616,86451667,FR
-86451668,86451671,BE
-86451672,86451675,FR
-86451676,86451679,PT
-86451680,86451687,FR
-86451688,86451695,PT
-86451696,86451703,DE
-86451704,86451871,FR
-86451872,86451879,PL
-86451880,86451887,GB
-86451888,86451895,ES
-86451896,86451903,FR
-86451904,86451967,NL
-86451968,86452031,CH
-86452032,86452047,FR
-86452048,86452055,CH
-86452056,86452059,FR
-86452060,86452063,ES
-86452064,86452067,FR
-86452068,86452075,PL
-86452076,86452079,NL
-86452080,86452111,FR
-86452112,86452115,PL
-86452116,86452143,FR
-86452144,86452159,CH
-86452160,86452191,ES
-86452192,86452211,FR
-86452212,86452215,GB
-86452216,86452223,IT
-86452224,86452239,FR
-86452240,86452247,IT
-86452248,86452251,DE
-86452252,86452255,FR
-86452256,86452267,PL
-86452268,86452271,FR
-86452272,86452279,GB
-86452280,86452287,FR
-86452288,86452295,GB
-86452296,86452335,FR
-86452336,86452343,NL
-86452344,86452347,FR
-86452348,86452351,ES
-86452352,86452367,FR
-86452368,86452383,IE
-86452384,86452399,ES
-86452400,86452415,PL
-86452416,86452447,PT
-86452448,86452479,FR
-86452480,86452543,PT
-86452544,86452575,GB
-86452576,86452583,BE
-86452584,86452587,ES
-86452588,86452591,BE
-86452592,86452607,IT
-86452608,86452639,GB
-86452640,86452911,FR
-86452912,86452927,NL
-86452928,86452943,FR
-86452944,86452959,DE
-86452960,86453023,FR
-86453024,86453031,ES
-86453032,86453039,CZ
-86453040,86453055,PL
-86453056,86453063,FR
-86453064,86453067,PL
-86453068,86453071,IT
-86453072,86453103,FR
-86453104,86453119,PT
-86453120,86453183,ES
-86453184,86453199,DE
-86453200,86453247,FR
-86453248,86453251,GB
-86453252,86453255,FR
-86453256,86453263,BE
-86453264,86453315,FR
-86453316,86453319,ES
-86453320,86453327,FR
-86453328,86453339,ES
-86453340,86453343,PT
-86453344,86453347,FR
-86453348,86453351,DE
-86453352,86453359,PL
-86453360,86453375,FR
-86453376,86453379,ES
-86453380,86453383,FR
-86453384,86453391,FI
-86453392,86453399,FR
-86453400,86453407,DE
-86453408,86453423,SN
-86453424,86453435,FR
-86453436,86453439,ES
-86453440,86453471,FR
-86453472,86453503,ES
-86453504,86453759,IT
-86453760,86453791,PL
-86453792,86453807,FR
-86453808,86453823,GB
-86453824,86453827,CZ
-86453828,86453831,DE
-86453832,86453835,NL
-86453836,86453839,PT
-86453840,86453847,GB
-86453848,86453851,ES
-86453852,86453855,PL
-86453856,86453871,BE
-86453872,86453875,FI
-86453876,86453879,DE
-86453880,86453887,PL
-86453888,86453895,GB
-86453896,86453935,FR
-86453936,86453951,PT
-86453952,86453983,NL
-86453984,86454015,FR
-86454016,86454047,IE
-86454048,86454111,FR
-86454112,86454123,PL
-86454124,86454127,FR
-86454128,86454143,CZ
-86454144,86454159,FR
-86454160,86454175,PT
-86454176,86454183,IE
-86454184,86454187,FR
-86454188,86454191,GB
-86454192,86454207,FR
-86454208,86454271,ES
-86454272,86454279,GB
-86454280,86454287,PL
-86454288,86454299,GB
-86454300,86454303,PL
-86454304,86454335,FR
+86450240,86452067,FR
+86452068,86452071,ES
+86452072,86452671,FR
+86452672,86452735,GB
+86452736,86453199,FR
+86453200,86453203,ES
+86453204,86453311,FR
+86453312,86453315,ES
+86453316,86453836,FR
+86453837,86453838,PT
+86453839,86454335,FR
86454336,86454343,DE
-86454344,86454351,PL
-86454352,86454367,FI
-86454368,86454383,PL
-86454384,86454391,GB
-86454392,86454399,FR
-86454400,86454527,BE
-86454528,86454559,NL
-86454560,86454591,FR
-86454592,86454607,NL
-86454608,86454611,PL
-86454612,86454619,FR
-86454620,86454623,ES
-86454624,86454783,FR
-86454784,86454815,IT
-86454816,86454831,FR
-86454832,86454835,ES
-86454836,86454839,FR
-86454840,86454847,GB
-86454848,86454871,FR
-86454872,86454879,ES
-86454880,86454887,DE
-86454888,86454891,IT
-86454892,86454895,NL
-86454896,86454899,PL
-86454900,86454903,GB
-86454904,86454915,FR
-86454916,86454919,PL
-86454920,86454923,DE
-86454924,86454927,FR
-86454928,86454943,DE
-86454944,86454947,FR
-86454948,86454951,ES
-86454952,86454959,FR
-86454960,86454967,PT
-86454968,86454971,DE
-86454972,86454975,GB
-86454976,86454991,FR
-86454992,86454995,FI
-86454996,86454999,DE
-86455000,86455003,LT
-86455004,86455007,ES
-86455008,86455431,FR
-86455432,86455435,NL
-86455436,86455439,PL
-86455440,86455447,FR
-86455448,86455451,ES
-86455452,86455455,FR
-86455456,86455487,PL
-86455488,86455519,FR
-86455520,86455551,PL
-86455552,86455623,FR
-86455624,86455627,DE
-86455628,86455631,FR
-86455632,86455647,ES
-86455648,86455679,NL
-86455680,86455767,FR
-86455768,86455771,GB
-86455772,86455775,NL
-86455776,86455783,DE
-86455784,86455871,FR
-86455872,86455887,ES
-86455888,86455903,NL
-86455904,86455919,GB
-86455920,86455927,BE
-86455928,86455931,FR
-86455932,86455935,IT
-86455936,86456015,FR
-86456016,86456019,GB
-86456020,86456027,FR
-86456028,86456031,CH
-86456032,86456035,IE
-86456036,86456039,DE
-86456040,86456043,FI
-86456044,86456047,NL
-86456048,86456063,GB
-86456064,86456079,FR
-86456080,86456087,PL
-86456088,86456111,FR
-86456112,86456119,PT
-86456120,86456143,GB
-86456144,86456151,NL
-86456152,86456159,DE
-86456160,86456191,NL
-86456192,86456195,FR
+86454344,86454615,FR
+86454616,86454619,ES
+86454620,86455623,FR
+86455624,86455624,DE
+86455625,86456195,FR
86456196,86456211,DE
-86456212,86456219,FR
-86456220,86456223,DE
-86456224,86456279,FR
-86456280,86456283,GB
-86456284,86456287,IT
-86456288,86456295,DE
-86456296,86456303,FR
-86456304,86456307,IT
-86456308,86456311,FR
-86456312,86456315,PT
-86456316,86456319,DE
-86456320,86456351,FR
+86456212,86456351,FR
86456352,86456367,CH
-86456368,86456371,FI
-86456372,86456383,FR
-86456384,86456415,PL
-86456416,86456479,FR
-86456480,86456511,ES
-86456512,86456543,GB
-86456544,86456831,FR
-86456832,86456847,PL
-86456848,86456855,FR
-86456856,86456859,NL
-86456860,86456863,FR
-86456864,86456879,ES
-86456880,86456895,FR
-86456896,86456927,DE
-86456928,86456943,FR
-86456944,86456955,PL
-86456956,86457023,FR
-86457024,86457055,NL
-86457056,86457059,FR
-86457060,86457063,DE
-86457064,86457067,FR
-86457068,86457071,CH
-86457072,86457075,FR
-86457076,86457079,ES
-86457080,86457087,FR
+86456368,86456371,FR
+86456372,86456375,ES
+86456376,86457059,FR
+86457060,86457060,DE
+86457061,86457087,FR
86457088,86457091,DE
-86457092,86457095,FR
-86457096,86457099,GB
-86457100,86457103,ES
-86457104,86457111,IE
-86457112,86457115,DE
-86457116,86457119,FR
-86457120,86457127,PL
-86457128,86457131,FR
-86457132,86457135,PT
-86457136,86457151,FR
-86457152,86457167,IT
-86457168,86457183,FR
-86457184,86457187,ES
-86457188,86457191,GB
-86457192,86457215,ES
-86457216,86457219,PL
-86457220,86457263,FR
-86457264,86457279,ES
-86457280,86457295,PL
-86457296,86457375,FR
-86457376,86457379,NL
-86457380,86457387,FR
-86457388,86457391,NL
-86457392,86457395,PL
-86457396,86457399,NL
-86457400,86457403,GB
-86457404,86457407,DE
-86457408,86457423,GB
-86457424,86457439,FR
-86457440,86457455,PL
-86457456,86457459,DE
-86457460,86457463,FR
-86457464,86457471,BE
-86457472,86457519,ES
-86457520,86457535,DE
-86457536,86457551,IE
-86457552,86457599,FR
-86457600,86457615,CH
-86457616,86457631,FR
-86457632,86457647,PL
-86457648,86457655,BE
-86457656,86457663,PL
-86457664,86457679,FR
-86457680,86457683,PL
-86457684,86457687,IT
-86457688,86457695,PL
-86457696,86457699,FI
-86457700,86457703,PL
-86457704,86457719,FR
-86457720,86457723,IT
-86457724,86457727,NL
-86457728,86457759,DE
-86457760,86457791,PL
-86457792,86457799,FR
-86457800,86457803,PL
-86457804,86457807,BE
-86457808,86457811,FR
-86457812,86457815,PL
-86457816,86457823,GB
-86457824,86458147,FR
-86458148,86458151,BE
-86458152,86458159,FR
-86458160,86458175,PT
-86458176,86458287,FR
-86458288,86458291,PL
-86458292,86458299,FR
-86458300,86458303,PL
-86458304,86458335,CH
-86458336,86458351,PT
-86458352,86458355,FR
-86458356,86458359,PT
-86458360,86458363,BE
-86458364,86458367,IE
-86458368,86466575,FR
-86466576,86466579,FI
-86466580,86466583,PL
-86466584,86466587,FR
-86466588,86466599,PL
-86466600,86466603,FR
-86466604,86466607,PT
-86466608,86466615,FR
-86466616,86466627,PT
-86466628,86466631,DE
-86466632,86466647,FR
-86466648,86466655,GB
-86466656,86466815,FR
-86466816,86466831,DE
-86466832,86466863,FR
-86466864,86466871,GB
-86466872,86466875,FR
-86466876,86466879,PL
-86466880,86466959,FR
-86466960,86466963,BE
-86466964,86466967,FR
-86466968,86466975,GB
-86466976,86467007,FR
-86467008,86467023,ES
-86467024,86467031,FR
-86467032,86467035,PL
-86467036,86467039,IT
-86467040,86467055,FI
-86467056,86467215,FR
-86467216,86467219,CZ
-86467220,86467231,FR
-86467232,86467247,NL
-86467248,86467263,IE
-86467264,86467287,PL
-86467288,86467291,FR
-86467292,86467295,NL
-86467296,86467311,IE
-86467312,86467319,IT
-86467320,86467323,FI
-86467324,86467583,GB
-86467584,86467967,FR
-86467968,86467971,IE
-86467972,86467975,IT
-86467976,86467979,FR
-86467980,86467983,LT
-86467984,86467991,FR
-86467992,86467995,NL
-86467996,86467999,FR
+86457092,86457111,FR
+86457112,86457112,DE
+86457113,86457187,FR
+86457188,86457191,ES
+86457192,86457403,FR
+86457404,86457407,ES
+86457408,86457455,FR
+86457456,86457456,DE
+86457457,86457799,FR
+86457800,86457803,ES
+86457804,86467320,FR
+86467321,86467321,FI
+86467322,86467999,FR
86468000,86468003,PL
-86468004,86468007,PT
-86468008,86468035,FR
-86468036,86468039,PL
-86468040,86468043,FR
-86468044,86468047,GB
-86468048,86468051,FR
-86468052,86468055,PL
-86468056,86468059,DE
-86468060,86468063,NL
-86468064,86468095,DE
-86468096,86468351,PT
-86468352,86468355,CH
-86468356,86468359,FR
-86468360,86468367,PL
-86468368,86468371,FR
-86468372,86468375,CH
-86468376,86468383,FR
-86468384,86468399,DE
-86468400,86468403,GB
-86468404,86468407,PL
-86468408,86468415,CH
-86468416,86468447,IE
+86468004,86468055,FR
+86468056,86468056,DE
+86468057,86468447,FR
86468448,86468479,CZ
-86468480,86468527,FR
-86468528,86468535,GB
-86468536,86468543,FR
-86468544,86468547,PL
-86468548,86468551,IE
-86468552,86468559,IT
-86468560,86468571,PL
-86468572,86468575,ES
-86468576,86468583,FR
-86468584,86468587,DE
-86468588,86468591,IT
-86468592,86468595,FR
-86468596,86468599,IT
-86468600,86468607,FR
-86468608,86468639,DE
-86468640,86468671,FR
-86468672,86468675,ES
-86468676,86468679,BE
-86468680,86468683,FR
-86468684,86468687,FI
-86468688,86468703,DE
-86468704,86468711,GB
-86468712,86468715,NL
-86468716,86468727,PL
-86468728,86468735,DE
-86468736,86468759,FR
-86468760,86468763,IT
-86468764,86468767,NL
-86468768,86468783,PL
-86468784,86468787,FR
-86468788,86468791,NL
-86468792,86468799,CH
-86468800,86468831,ES
-86468832,86468839,IT
-86468840,86468847,CZ
-86468848,86468855,FR
-86468856,86468863,LT
-86468864,86469139,FR
-86469140,86469143,PT
-86469144,86469147,FR
-86469148,86469151,NL
-86469152,86469183,CH
-86469184,86469247,PT
-86469248,86469655,FR
-86469656,86469659,DE
-86469660,86469663,CH
-86469664,86469679,IE
-86469680,86469687,FR
-86469688,86469691,IE
+86468480,86468587,FR
+86468588,86468591,ES
+86468592,86469183,FR
+86469184,86469247,GB
+86469248,86469691,FR
86469692,86469695,DE
-86469696,86469779,FR
-86469780,86469783,CZ
-86469784,86469791,FR
-86469792,86469795,GB
-86469796,86469799,FR
-86469800,86469807,CZ
-86469808,86469815,ES
-86469816,86469819,PL
-86469820,86469823,FR
-86469824,86469855,ES
-86469856,86469863,FR
-86469864,86469867,GB
-86469868,86469887,FR
-86469888,86469891,GB
-86469892,86469895,FR
-86469896,86469899,IE
-86469900,86469903,PL
-86469904,86469907,FR
-86469908,86469911,GB
-86469912,86469915,FR
-86469916,86469919,ES
-86469920,86469951,FR
-86469952,86470047,ES
-86470048,86470079,FR
-86470080,86470111,BE
-86470112,86470127,DE
-86470128,86470135,FR
-86470136,86470143,PL
-86470144,86470159,ES
-86470160,86470175,PL
-86470176,86470207,IE
-86470208,86470271,FR
-86470272,86470275,PL
-86470276,86470291,FR
-86470292,86470295,PL
-86470296,86470299,PT
-86470300,86470351,FR
-86470352,86470359,IT
-86470360,86470363,PT
-86470364,86470383,FR
-86470384,86470399,IE
-86470400,86470655,FR
-86470656,86470671,CZ
-86470672,86470687,PL
-86470688,86470719,GB
-86470720,86470727,DE
-86470728,86470731,ES
+86469696,86470731,FR
86470732,86470735,BE
-86470736,86470751,GB
-86470752,86470767,PT
-86470768,86470847,FR
-86470848,86470851,NL
-86470852,86470863,FR
-86470864,86470867,GB
-86470868,86470871,FR
-86470872,86470879,CH
-86470880,86470895,FR
-86470896,86470899,ES
-86470900,86470903,PL
-86470904,86470943,FR
-86470944,86470947,IE
-86470948,86470951,IT
-86470952,86470959,NL
-86470960,86470967,FR
-86470968,86470971,NL
-86470972,86470979,PL
-86470980,86470983,FR
-86470984,86470991,ES
-86470992,86470999,FR
-86471000,86471023,NL
-86471024,86471031,FR
-86471032,86471039,PL
-86471040,86471047,NL
-86471048,86471055,BE
-86471056,86471075,FR
-86471076,86471079,PL
-86471080,86471083,FR
-86471084,86471087,PL
-86471088,86471091,NL
-86471092,86471095,DE
-86471096,86471099,ES
-86471100,86471103,IT
-86471104,86471119,FR
-86471120,86471127,IT
-86471128,86471135,PL
-86471136,86471167,PT
-86471168,86471171,IT
-86471172,86471175,DE
-86471176,86471179,FR
-86471180,86471183,DE
-86471184,86471215,FR
-86471216,86471219,PL
-86471220,86471223,FR
-86471224,86471231,ES
-86471232,86471263,GB
-86471264,86471295,DE
-86471296,86471327,GB
-86471328,86471343,FR
-86471344,86471359,ES
-86471360,86471423,PT
-86471424,86471679,FR
-86471680,86471935,IT
-86471936,86471943,FR
-86471944,86471947,ES
-86471948,86471951,FR
-86471952,86471967,PL
-86471968,86471983,IT
-86471984,86471995,FR
-86471996,86471999,CH
-86472000,86472015,FR
-86472016,86472031,IT
-86472032,86472047,GB
-86472048,86472051,DE
-86472052,86472055,IE
-86472056,86472063,FR
-86472064,86472095,IE
-86472096,86472191,FR
-86472192,86472199,LT
-86472200,86472203,IT
-86472204,86472207,ES
-86472208,86472211,PL
-86472212,86472215,FR
-86472216,86472219,DE
-86472220,86472223,IE
-86472224,86472227,FR
-86472228,86472231,NL
-86472232,86472239,PL
-86472240,86472255,ES
-86472256,86472287,NL
-86472288,86472291,DE
-86472292,86472303,FR
-86472304,86472311,PT
-86472312,86472315,NL
-86472316,86472319,FR
-86472320,86472327,PL
-86472328,86472335,IT
-86472336,86472343,CZ
-86472344,86472347,PT
-86472348,86472351,NL
-86472352,86472399,FR
-86472400,86472403,ES
-86472404,86472407,GB
-86472408,86472415,FR
-86472416,86472431,ES
-86472432,86472471,FR
-86472472,86472475,NL
-86472476,86472479,PL
-86472480,86472487,PT
-86472488,86472511,FR
-86472512,86472515,IT
-86472516,86472519,FR
-86472520,86472523,ES
-86472524,86472551,FR
-86472552,86472559,NL
-86472560,86472575,FR
-86472576,86472607,BE
-86472608,86472623,FR
-86472624,86472639,PL
-86472640,86472767,FR
-86472768,86472771,PL
-86472772,86472775,IE
-86472776,86472779,GB
-86472780,86472831,FR
-86472832,86472895,ES
-86472896,86472927,FR
-86472928,86472935,IE
-86472936,86472943,ES
-86472944,86472959,FR
-86472960,86473023,IE
-86473024,86473087,FR
-86473088,86473215,PT
-86473216,86473251,FR
-86473252,86473255,PL
-86473256,86473263,PT
-86473264,86473279,FR
-86473280,86473283,IT
-86473284,86473287,ES
-86473288,86473291,FR
-86473292,86473295,PL
-86473296,86473311,FR
-86473312,86473343,GB
-86473344,86473347,DE
-86473348,86473359,ES
-86473360,86473375,FR
-86473376,86473383,CH
-86473384,86473391,LT
-86473392,86473399,FR
-86473400,86473403,PL
-86473404,86473423,FR
-86473424,86473427,ES
-86473428,86473431,IE
-86473432,86473435,PL
-86473436,86473439,CH
-86473440,86473443,ES
-86473444,86473727,FR
-86473728,86473731,FI
-86473732,86473743,PL
-86473744,86473775,FR
-86473776,86473791,FI
-86473792,86473795,ES
-86473796,86473799,FR
-86473800,86473803,GB
-86473804,86473807,FR
-86473808,86473823,GB
-86473824,86473839,FR
-86473840,86474111,PT
-86474112,86474119,FR
-86474120,86474123,ES
-86474124,86474127,PL
-86474128,86474143,FR
-86474144,86474151,GB
-86474152,86474163,FR
-86474164,86474167,GB
-86474168,86474175,IT
-86474176,86474287,FR
-86474288,86474303,IE
-86474304,86474307,GB
+86470736,86471179,FR
+86471180,86471180,DE
+86471181,86473087,FR
+86473088,86473151,PT
+86473152,86474307,FR
86474308,86474311,DE
-86474312,86474319,BE
-86474320,86474323,NL
-86474324,86474327,IT
-86474328,86474331,IE
-86474332,86474367,BE
-86474368,86474383,PL
-86474384,86474391,FR
-86474392,86474395,ES
-86474396,86474431,FR
-86474432,86474463,IE
-86474464,86474467,FR
-86474468,86474475,GB
+86474312,86474475,FR
86474476,86474479,DE
86474480,86474527,FR
86474528,86474531,DE
-86474532,86474551,FR
-86474552,86474555,BE
-86474556,86474559,PL
-86474560,86474591,FR
-86474592,86474623,PT
-86474624,86474687,FR
-86474688,86474719,PT
-86474720,86474723,FR
-86474724,86474727,NL
-86474728,86474731,PL
-86474732,86474735,IE
-86474736,86474743,FR
-86474744,86474747,GB
-86474748,86474751,FR
+86474532,86474751,FR
86474752,86482943,HR
86482944,86484991,RU
86484992,86487039,NL
@@ -3031,13 +524,14 @@
86497280,86499327,NL
86499328,86503423,FR
86503424,86505471,DE
-86505472,86505983,US
-86505984,86507519,PK
+86505472,86507519,GB
86507520,86573055,ES
86573056,86638591,RO
86638592,86671359,RU
-86671360,86671871,JE
-86671872,86673407,GB
+86671360,86671615,JE
+86671616,86671871,GB
+86671872,86672895,JE
+86672896,86673407,GB
86673408,86675455,DE
86675456,86677503,IT
86677504,86679551,FR
@@ -3063,8 +557,7 @@
86794240,86795263,DE
86795264,86796287,NL
86796288,86797311,US
-86797312,86797343,PY
-86797344,86798335,DE
+86797312,86798335,DE
86798336,86802431,CH
86802432,86804479,GE
86804480,86806527,DK
@@ -3081,9 +574,13 @@
86833152,86835199,GB
86835200,86837247,DE
86837248,86839295,ES
-86839296,86849535,GB
+86839296,86843391,GB
+86847488,86849535,GB
86849536,86851583,CZ
-86851584,86867967,RU
+86851584,86855679,NL
+86855680,86859775,RU
+86859776,86863871,DE
+86863872,86867967,EE
86867968,86872063,JO
86872064,86874111,GB
86874112,86876159,NO
@@ -3107,11 +604,7 @@
87425024,87556095,GR
87556096,87558143,ES
87558144,87560191,IT
-87560192,87560703,DE
-87560704,87560959,IN
-87560960,87561471,DE
-87561472,87561599,GB
-87561600,87562239,DE
+87560192,87562239,DE
87562240,87564287,UA
87564288,87566335,HU
87566336,87568383,FR
@@ -3121,8 +614,7 @@
87588864,87589887,IR
87589888,87590143,GB
87590144,87590399,US
-87590400,87590655,IT
-87590656,87590911,IR
+87590400,87590911,GB
87590912,87592959,RU
87592960,87597055,DK
87597056,87599103,ES
@@ -3139,27 +631,30 @@
87638016,87640063,UA
87640064,87642111,RS
87642112,87646207,GB
-87646208,87648255,RE
-87648256,87648767,FR
-87648768,87649279,RE
-87649280,87649535,FR
-87649536,87650303,RE
-87650304,87650559,FR
-87650560,87651071,RE
-87651072,87652351,FR
-87652352,87654399,RE
+87646208,87646463,FR
+87646464,87646719,RE
+87646720,87646975,YT
+87646976,87647231,FR
+87647232,87647743,RE
+87647744,87648511,FR
+87648512,87649535,RE
+87649536,87649791,FR
+87649792,87650815,RE
+87650816,87651583,FR
+87651584,87651839,RE
+87651840,87653119,FR
+87653120,87653375,RE
+87653376,87653631,FR
+87653632,87653887,RE
+87653888,87654143,FR
+87654144,87654399,RE
87654400,87670783,PL
87670784,87672831,DE
87672832,87674879,CH
87674880,87676927,AE
87676928,87678975,RU
-87678976,87678991,ES
-87678992,87679039,NL
-87679040,87679055,ES
-87679056,87679231,NL
-87679232,87680511,ES
-87680512,87680767,NL
-87680768,87681023,ES
+87678976,87679999,ES
+87680000,87681023,NL
87681024,87683071,RU
87683072,87685119,SE
87685120,87687167,NL
@@ -3168,16 +663,13 @@
87818240,87883775,PL
87883776,87885823,IT
87885824,87889919,RU
-87889920,87890175,IR
-87890176,87890431,US
-87890432,87890687,IR
-87890688,87890943,US
-87890944,87891967,IR
+87889920,87890431,IR
+87890432,87890943,US
+87890944,87891199,NL
+87891200,87891967,US
87891968,87902207,DE
87902208,87904255,IR
-87904256,87904767,DE
-87904768,87904831,NL
-87904832,87906303,DE
+87904256,87906303,DE
87906304,87908351,FI
87908352,87912447,BG
87912448,87914495,IE
@@ -3190,19 +682,20 @@
87943168,87945215,RU
87945216,87947263,HU
87947264,87949311,NL
-87949312,87982079,DE
+87949312,87965695,GB
+87965696,87967743,DE
+87967744,87969791,IT
+87969792,87973887,IM
+87973888,87982079,DE
87982080,88014847,RU
-88014848,88015103,DE
-88015104,88016895,LY
+88014848,88016895,LY
88016896,88018943,IR
88018944,88020991,GB
-88020992,88021247,PL
-88021248,88021503,CN
-88021504,88021759,BR
-88021760,88023039,FR
+88020992,88023039,FR
88023040,88031231,TR
88031232,88047615,KZ
-88047616,88049663,LU
+88047616,88048639,US
+88048640,88049663,LU
88049664,88051711,IT
88051712,88053759,GB
88053760,88055807,RU
@@ -3248,8 +741,7 @@
90456064,90472447,RU
90472448,90476543,DE
90476544,90478591,FR
-90478592,90479103,GB
-90479104,90480639,VG
+90478592,90480639,VG
90480640,90482687,YE
90482688,90484735,SA
90484736,90488831,NO
@@ -3258,7 +750,14 @@
90499072,90501119,IT
90501120,90503167,GB
90503168,90505215,IL
-90505216,90570751,RU
+90505216,90529791,RU
+90529792,90533887,NL
+90533888,90537983,EE
+90537984,90540031,RU
+90540032,90544127,GB
+90544128,90546175,RU
+90546176,90548223,DE
+90548224,90570751,RU
90570752,90578943,IT
90578944,90583039,IR
90583040,90587135,CZ
@@ -3272,9 +771,7 @@
90609664,90611711,RU
90611712,90613759,DE
90613760,90615807,GB
-90615808,90615808,SI
-90615809,90616575,BA
-90616576,90617855,SI
+90615808,90617855,SI
90617856,90619903,GB
90619904,90636287,IL
90636288,90701823,DK
@@ -3282,7 +779,10 @@
90705920,90707967,CZ
90707968,90710015,IT
90710016,90718207,UA
-90718208,90720255,EU
+90718208,90718719,DE
+90718720,90719231,FR
+90719232,90719487,AT
+90720000,90720255,GB
90720256,90722303,IQ
90722304,90724351,FI
90724352,90726399,CH
@@ -3298,22 +798,16 @@
90753024,90755071,RU
90755072,90757119,PL
90757120,90759167,AT
-90759168,90759684,NL
-90759685,90759930,RO
-90759931,90761215,NL
+90759168,90761215,NL
90761216,90763263,KZ
-90763264,90763391,IL
-90763392,90763519,CY
-90763520,90763775,US
-90763776,90765311,IL
+90763264,90765311,IL
90765312,90767359,PL
90767360,90832895,UA
90832896,90963967,RO
90963968,91226111,SA
91226112,92274687,IR
92274688,92536831,RU
-92536832,92536832,NL
-92536833,92602367,US
+92536832,92602367,NL
92602368,92604415,BA
92604416,92606463,PL
92606464,92608511,GB
@@ -3324,140 +818,7 @@
92635136,92643327,BA
92643328,92645375,GE
92645376,92651519,GB
-92651520,92654591,SE
-92654592,92654623,US
-92654624,92654719,SE
-92654720,92654751,NL
-92654752,92654783,GB
-92654784,92654815,FR
-92654816,92654847,DE
-92654848,92654879,US
-92654880,92654975,SE
-92654976,92655007,FR
-92655008,92655039,DE
-92655040,92655071,NL
-92655072,92655103,GB
-92655104,92655135,US
-92655136,92655231,SE
-92655232,92655263,FR
-92655264,92655295,GB
-92655296,92655327,NL
-92655328,92655359,DE
-92655360,92655391,US
-92655392,92655487,SE
-92655488,92655519,FR
-92655520,92655551,DE
-92655552,92655583,NL
-92655584,92655615,GB
-92655616,92655647,US
-92655648,92655727,SE
-92655728,92655743,NL
-92655744,92655775,FR
-92655776,92655807,GB
-92655808,92655839,NL
-92655840,92655871,DE
-92655872,92655903,US
-92655904,92655999,SE
-92656000,92656015,NL
-92656016,92656031,FR
-92656032,92656063,DE
-92656064,92656095,NL
-92656096,92656127,GB
-92656128,92656159,US
-92656160,92656223,SE
-92656224,92656239,NL
-92656240,92656255,SE
-92656256,92656287,FR
-92656288,92656319,GB
-92656320,92656351,NL
-92656352,92656383,DE
-92656384,92656415,US
-92656416,92656511,SE
-92656512,92656543,DE
-92656544,92656575,NL
-92656576,92656591,FR
-92656592,92656607,NL
-92656608,92656639,GB
-92656640,92656671,US
-92656672,92656767,SE
-92656768,92656783,FR
-92656784,92656799,NL
-92656800,92656831,GB
-92656832,92656863,NL
-92656864,92656895,DE
-92656896,92656927,US
-92656928,92657023,SE
-92657024,92657055,FR
-92657056,92657087,DE
-92657088,92657119,NL
-92657120,92657151,GB
-92657152,92657183,US
-92657184,92657279,SE
-92657280,92657295,NL
-92657296,92657311,FR
-92657312,92657343,GB
-92657344,92657375,NL
-92657376,92657407,DE
-92657408,92657439,US
-92657440,92657535,SE
-92657536,92657567,FR
-92657568,92657599,DE
-92657600,92657631,GB
-92657632,92657663,NL
-92657664,92657695,US
-92657696,92657775,SE
-92657776,92657823,NL
-92657824,92657855,GB
-92657856,92657887,FR
-92657888,92657919,DE
-92657920,92657951,US
-92657952,92658047,SE
-92658048,92658079,NL
-92658080,92658111,DE
-92658112,92658127,NL
-92658128,92658143,FR
-92658144,92658175,GB
-92658176,92658207,US
-92658208,92658303,SE
-92658304,92658319,NL
-92658320,92658335,FR
-92658336,92658367,GB
-92658368,92658399,NL
-92658400,92658431,DE
-92658432,92658463,US
-92658464,92658559,SE
-92658560,92658575,FR
-92658576,92658591,NL
-92658592,92658623,DE
-92658624,92658655,NL
-92658656,92658687,GB
-92658688,92658719,US
-92658720,92658815,SE
-92658816,92658847,GB
-92658848,92658879,NL
-92658880,92658911,FR
-92658912,92658943,DE
-92658944,92658975,US
-92658976,92659055,SE
-92659056,92659103,NL
-92659104,92659135,DE
-92659136,92659167,FR
-92659168,92659199,GB
-92659200,92659231,US
-92659232,92659295,SE
-92659296,92659311,NL
-92659312,92659327,SE
-92659328,92659359,NL
-92659360,92659391,DE
-92659392,92659423,FR
-92659424,92659455,GB
-92659456,92659471,US
-92659472,92659583,SE
-92659584,92659615,NL
-92659616,92659631,GB
-92659632,92659647,NL
-92659648,92659679,FR
-92659680,92659711,DE
+92651520,92659711,SE
92659712,92663807,AZ
92663808,92665855,GB
92665856,92667903,PL
@@ -3480,1677 +841,47 @@
92721152,92723199,PL
92723200,92725247,RU
92725248,92733439,SY
-92733440,92733535,FR
-92733536,92733539,CH
-92733540,92733543,FR
-92733544,92733547,ES
-92733548,92733551,GB
-92733552,92733555,PL
-92733556,92733559,FR
-92733560,92733563,GB
-92733564,92733567,DE
-92733568,92733631,FR
-92733632,92733663,PT
-92733664,92733695,ES
-92733696,92733751,FR
-92733752,92733755,GB
-92733756,92733775,FR
-92733776,92733783,PL
-92733784,92733847,FR
-92733848,92733851,DE
-92733852,92733855,GB
-92733856,92733887,FR
-92733888,92733903,IT
-92733904,92733919,PL
-92733920,92733927,FR
-92733928,92733931,GB
-92733932,92733935,ES
-92733936,92733939,IE
-92733940,92733943,FR
-92733944,92733951,PL
-92733952,92734207,IE
-92734208,92734255,FR
-92734256,92734271,PL
-92734272,92734275,DE
-92734276,92734279,FR
-92734280,92734287,ES
-92734288,92734295,PT
-92734296,92734303,FR
-92734304,92734307,PT
-92734308,92734311,PL
-92734312,92734319,IT
-92734320,92734367,FR
-92734368,92734383,GB
-92734384,92734399,FR
-92734400,92734463,PT
-92734464,92734495,FR
-92734496,92734511,DE
-92734512,92734527,FR
-92734528,92734559,BE
-92734560,92734575,FR
-92734576,92734579,PL
-92734580,92734591,FR
-92734592,92734595,DE
-92734596,92734719,FR
-92734720,92734727,ES
-92734728,92734731,GB
-92734732,92734735,PL
+92733440,92734735,FR
92734736,92734739,DE
-92734740,92734823,FR
-92734824,92734831,PL
-92734832,92734847,DE
-92734848,92734863,CH
-92734864,92734879,PL
-92734880,92734975,FR
-92734976,92735231,PT
-92735232,92735335,FR
-92735336,92735347,PL
-92735348,92735351,FR
-92735352,92735359,DE
-92735360,92735423,FR
-92735424,92735455,DE
-92735456,92735459,ES
-92735460,92735467,GB
-92735468,92735471,FR
-92735472,92735479,IT
-92735480,92735483,PL
-92735484,92735487,DE
-92735488,92735519,GB
-92735520,92735535,FR
-92735536,92735543,GB
-92735544,92735547,PL
-92735548,92735567,FR
-92735568,92735575,DE
-92735576,92735579,PL
-92735580,92735615,FR
-92735616,92735619,DE
-92735620,92735623,FR
-92735624,92735631,ES
-92735632,92735647,GB
-92735648,92735651,IT
-92735652,92735655,PL
-92735656,92735659,FR
-92735660,92735663,NL
-92735664,92735679,FR
-92735680,92735711,NL
-92735712,92735731,FR
-92735732,92735735,CH
-92735736,92735743,PL
-92735744,92735751,IT
-92735752,92735775,FR
-92735776,92735779,PL
-92735780,92735783,ES
-92735784,92735791,FR
-92735792,92735807,GB
-92735808,92735815,FR
-92735816,92735823,CZ
-92735824,92735831,FR
-92735832,92735839,DE
-92735840,92735875,FR
-92735876,92735879,DE
-92735880,92735883,IT
-92735884,92735887,PT
-92735888,92735903,FR
-92735904,92735935,DE
-92735936,92735967,CZ
-92735968,92735999,IT
-92736000,92736335,FR
-92736336,92736351,GB
-92736352,92736447,FR
-92736448,92736479,IT
-92736480,92736483,DE
-92736484,92736487,PL
-92736488,92736491,ES
-92736492,92736495,PT
-92736496,92736503,FR
-92736504,92736511,PL
-92736512,92737023,GB
-92737024,92737279,ES
-92737280,92737603,FR
-92737604,92737607,DE
-92737608,92737647,FR
-92737648,92737663,NL
-92737664,92737791,FR
-92737792,92738047,GB
-92738048,92738367,FR
-92738368,92738371,PL
-92738372,92738375,CH
-92738376,92738411,FR
-92738412,92738415,IE
-92738416,92738431,FR
-92738432,92738447,ES
-92738448,92738511,FR
-92738512,92738515,IT
-92738516,92738519,DE
-92738520,92738531,PL
-92738532,92738535,NL
-92738536,92738543,FR
-92738544,92738559,IT
-92738560,92738591,IE
-92738592,92738599,FR
-92738600,92738603,BE
-92738604,92738607,PL
-92738608,92738611,ES
-92738612,92738615,FI
-92738616,92738655,FR
-92738656,92738659,PL
-92738660,92738663,ES
-92738664,92738683,FR
-92738684,92738719,PL
+92734740,92735615,FR
+92735616,92735616,DE
+92735617,92735619,FR
+92735620,92735623,ES
+92735624,92735823,FR
+92735824,92735827,ES
+92735828,92735875,FR
+92735876,92735876,DE
+92735877,92735999,FR
+92736000,92736255,GB
+92736256,92736479,FR
+92736480,92736480,DE
+92736481,92738719,FR
92738720,92738727,GB
-92738728,92738735,IT
-92738736,92739343,FR
-92739344,92739351,PL
-92739352,92739355,FR
-92739356,92739359,ES
-92739360,92739375,DE
-92739376,92739391,IE
-92739392,92739395,PL
-92739396,92739399,IT
-92739400,92739403,PL
-92739404,92739407,IE
-92739408,92739439,FR
-92739440,92739447,FI
-92739448,92739455,GB
-92739456,92739487,NL
-92739488,92739491,FR
-92739492,92739495,CZ
-92739496,92739499,PT
-92739500,92739503,NL
-92739504,92739507,PT
-92739508,92739511,FR
-92739512,92739519,IE
-92739520,92739583,FR
-92739584,92739839,PT
-92739840,92740095,ES
-92740096,92740351,PT
-92740352,92740383,PL
-92740384,92740391,FR
-92740392,92740395,ES
-92740396,92740399,FR
-92740400,92740415,IE
-92740416,92740431,NL
-92740432,92740447,GB
-92740448,92740471,FR
-92740472,92740479,BE
-92740480,92740543,IE
-92740544,92740575,DE
-92740576,92740607,IT
-92740608,92740863,FR
-92740864,92741119,IT
-92741120,92741151,GB
-92741152,92741159,LT
-92741160,92741167,PL
-92741168,92741183,FR
-92741184,92741199,IE
-92741200,92741203,PL
-92741204,92741207,DE
-92741208,92741211,FR
-92741212,92741215,DE
-92741216,92741247,IT
-92741248,92741255,PT
-92741256,92741263,ES
-92741264,92741271,FI
-92741272,92741279,FR
-92741280,92741287,PL
-92741288,92741291,FR
-92741292,92741295,IE
-92741296,92741311,FR
-92741312,92741315,CZ
-92741316,92741319,NL
-92741320,92741327,FR
-92741328,92741331,DE
-92741332,92741335,ES
-92741336,92741343,FR
-92741344,92741351,NL
-92741352,92741383,FR
-92741384,92741387,GB
-92741388,92741391,FR
-92741392,92741395,ES
-92741396,92741399,DE
-92741400,92741427,FR
-92741428,92741431,PL
-92741432,92741455,FR
-92741456,92741503,DE
-92741504,92741535,GB
-92741536,92741539,FR
-92741540,92741543,NL
-92741544,92741547,PL
-92741548,92742143,FR
-92742144,92742147,ES
-92742148,92742163,PL
-92742164,92742167,GB
-92742168,92742191,FR
-92742192,92742207,PL
-92742208,92742239,BE
-92742240,92742247,GB
-92742248,92742255,ES
-92742256,92742271,GB
-92742272,92742279,FR
-92742280,92742283,IT
-92742284,92742287,GB
-92742288,92742291,FR
-92742292,92742295,NL
-92742296,92742303,FR
-92742304,92742319,IE
-92742320,92742343,FR
-92742344,92742347,GB
-92742348,92742351,ES
-92742352,92742419,FR
-92742420,92742423,ES
-92742424,92742431,PL
-92742432,92742463,FR
-92742464,92742467,PL
-92742468,92742471,ES
-92742472,92742495,FR
-92742496,92742503,PT
-92742504,92742511,FR
-92742512,92742527,GB
-92742528,92742575,FR
-92742576,92742579,ES
-92742580,92742583,FR
-92742584,92742591,IT
-92742592,92742623,PT
-92742624,92742639,FR
-92742640,92742643,ES
-92742644,92742647,PL
-92742648,92742651,GB
-92742652,92742655,FR
-92742656,92742671,IE
-92742672,92742695,FR
-92742696,92742703,GB
-92742704,92742707,FR
-92742708,92742711,PL
-92742712,92742719,FR
-92742720,92742751,BE
-92742752,92742771,FR
-92742772,92742775,ES
-92742776,92742787,FR
-92742788,92742791,PL
-92742792,92742795,GB
-92742796,92742799,FR
-92742800,92742807,IT
-92742808,92742815,GB
-92742816,92742819,NL
-92742820,92742827,PL
-92742828,92742839,FR
-92742840,92742847,PT
-92742848,92742911,FR
-92742912,92743167,ES
-92743168,92743199,FR
-92743200,92743207,GB
-92743208,92743215,ES
-92743216,92743231,GB
-92743232,92743235,FR
-92743236,92743239,BE
-92743240,92743243,GB
-92743244,92743247,FR
-92743248,92743263,IE
-92743264,92743271,FR
-92743272,92743279,GB
-92743280,92743287,IT
-92743288,92743291,PL
-92743292,92743295,GB
-92743296,92743303,FR
-92743304,92743311,PL
-92743312,92743315,FR
-92743316,92743319,BE
-92743320,92743327,FR
-92743328,92743335,PL
-92743336,92743351,GB
-92743352,92743423,FR
-92743424,92743431,DE
-92743432,92743439,ES
-92743440,92743487,FR
-92743488,92743491,ES
-92743492,92743503,FR
-92743504,92743519,IT
-92743520,92743527,PT
-92743528,92743535,FR
-92743536,92743551,IE
-92743552,92743575,FR
-92743576,92743579,CH
-92743580,92743599,FR
-92743600,92743607,DE
-92743608,92743611,GB
-92743612,92743639,FR
-92743640,92743643,PL
-92743644,92743647,NL
-92743648,92743663,BE
-92743664,92743675,FR
-92743676,92743679,PL
-92743680,92743935,GB
-92743936,92743939,FR
-92743940,92743943,PL
-92743944,92743951,ES
-92743952,92743955,PT
-92743956,92743967,FR
-92743968,92743999,DE
-92744000,92744111,FR
-92744112,92744119,ES
-92744120,92744123,PL
-92744124,92744127,GB
-92744128,92744191,FR
-92744192,92744223,PT
-92744224,92744227,FR
-92744228,92744231,GB
-92744232,92744235,FR
-92744236,92744239,ES
-92744240,92744247,FR
-92744248,92744255,DE
-92744256,92744259,GB
-92744260,92744263,IT
-92744264,92744267,PL
-92744268,92744271,FR
-92744272,92744279,LT
-92744280,92744287,FR
-92744288,92744291,ES
-92744292,92744295,FR
-92744296,92744299,NL
-92744300,92744319,FR
-92744320,92744323,GB
-92744324,92744327,FI
-92744328,92744335,FR
-92744336,92744339,PT
-92744340,92744343,CH
-92744344,92744367,PT
-92744368,92744379,FR
-92744380,92744383,ES
-92744384,92744399,FR
-92744400,92744415,PT
-92744416,92744543,FR
-92744544,92744547,BE
-92744548,92744551,PL
-92744552,92744555,ES
-92744556,92744559,CH
-92744560,92744563,PL
-92744564,92744567,IT
-92744568,92744575,BE
-92744576,92744607,FR
-92744608,92744639,PT
-92744640,92745279,FR
-92745280,92745295,PT
-92745296,92745311,FR
-92745312,92745343,PT
-92745344,92745383,FR
-92745384,92745391,IT
-92745392,92745395,NL
-92745396,92745399,GB
-92745400,92745403,FR
-92745404,92745439,PL
-92745440,92745791,FR
-92745792,92745807,PL
-92745808,92745823,NL
-92745824,92745839,FR
-92745840,92745855,GB
-92745856,92745871,FR
-92745872,92745887,NL
-92745888,92745903,IT
-92745904,92745919,CH
-92745920,92745983,PT
-92745984,92746335,FR
-92746336,92746351,GB
-92746352,92746415,FR
-92746416,92746431,CH
-92746432,92746463,DE
-92746464,92746623,FR
-92746624,92746639,BE
-92746640,92746687,FR
-92746688,92746719,GB
-92746720,92746831,FR
-92746832,92746839,PL
-92746840,92746847,GB
-92746848,92746943,FR
-92746944,92746975,PL
-92746976,92747023,FR
-92747024,92747039,DE
-92747040,92747043,PL
-92747044,92747047,CH
-92747048,92747051,DE
-92747052,92747071,FR
-92747072,92747103,GB
-92747104,92747119,CH
-92747120,92747199,FR
-92747200,92747203,DE
-92747204,92747207,ES
-92747208,92747211,GB
-92747212,92747215,FI
-92747216,92747219,CH
-92747220,92747223,BE
-92747224,92747227,PT
-92747228,92747231,PL
-92747232,92747235,LT
-92747236,92747239,IT
-92747240,92747243,IE
-92747244,92747247,NL
-92747248,92747255,FI
-92747256,92747271,PL
-92747272,92747275,NL
-92747276,92747279,CZ
-92747280,92747327,FR
-92747328,92747331,BE
-92747332,92747335,IE
-92747336,92747343,PL
-92747344,92747347,PT
-92747348,92747351,PL
-92747352,92747423,FR
-92747424,92747431,CH
-92747432,92747439,IT
-92747440,92747443,ES
-92747444,92747447,GB
-92747448,92747451,FR
-92747452,92747455,PL
-92747456,92747471,FR
-92747472,92747475,PL
-92747476,92747479,NL
-92747480,92747487,FR
-92747488,92747519,BE
-92747520,92747535,FR
-92747536,92747539,CZ
-92747540,92747543,CH
-92747544,92747547,GB
-92747548,92747567,ES
-92747568,92747575,PL
-92747576,92747583,ES
-92747584,92747615,NL
-92747616,92747695,FR
-92747696,92747699,PL
-92747700,92747703,FR
-92747704,92747711,GB
-92747712,92747775,PT
-92747776,92748479,FR
-92748480,92748511,GB
-92748512,92748803,FR
-92748804,92748807,PL
-92748808,92748811,FR
-92748812,92748815,PT
-92748816,92748835,FR
-92748836,92748839,PL
-92748840,92748843,GB
-92748844,92748851,CH
-92748852,92748859,FR
-92748860,92748863,PL
-92748864,92748887,FR
-92748888,92748895,GB
-92748896,92748975,FR
-92748976,92748983,DE
-92748984,92748991,GB
-92748992,92748999,ES
-92749000,92749007,PT
-92749008,92749011,FR
-92749012,92749015,ES
-92749016,92749019,GB
-92749020,92749023,IT
-92749024,92749039,FI
-92749040,92749063,NL
-92749064,92749067,DE
+92738728,92742815,FR
+92742816,92742819,ES
+92742820,92744263,FR
+92744264,92744267,NL
+92744268,92747711,FR
+92747712,92747775,GB
+92747776,92749067,FR
92749068,92749071,GB
-92749072,92749079,FR
-92749080,92749087,IE
-92749088,92749119,PT
-92749120,92749135,IE
-92749136,92749151,PT
-92749152,92749155,PL
-92749156,92749159,PT
-92749160,92749167,IT
-92749168,92749175,PL
-92749176,92749179,IE
-92749180,92749279,FR
-92749280,92749295,GB
-92749296,92749299,NL
-92749300,92749303,DE
-92749304,92749519,FR
-92749520,92749531,CH
-92749532,92749535,ES
-92749536,92749543,IE
-92749544,92749551,FR
-92749552,92749555,PT
-92749556,92749559,FR
-92749560,92749567,IT
-92749568,92749695,ES
-92749696,92749727,FR
-92749728,92749743,ES
-92749744,92749751,FR
-92749752,92749755,ES
-92749756,92749903,FR
-92749904,92749919,PL
-92749920,92750095,FR
-92750096,92750099,IT
-92750100,92750103,FR
-92750104,92750107,IE
-92750108,92750111,FR
-92750112,92750127,GB
-92750128,92750223,FR
-92750224,92750231,NL
-92750232,92750511,FR
-92750512,92750527,IE
-92750528,92750559,FR
-92750560,92750591,FI
-92750592,92750599,FR
-92750600,92750603,LT
-92750604,92750639,FR
-92750640,92750643,ES
-92750644,92750647,NL
-92750648,92750651,IT
-92750652,92750727,FR
-92750728,92750735,PT
-92750736,92750751,BE
-92750752,92750767,FI
-92750768,92750783,ES
-92750784,92750799,CZ
-92750800,92750815,IE
-92750816,92750831,IT
-92750832,92750839,LT
-92750840,92750847,FR
-92750848,92750863,DE
-92750864,92750879,IT
-92750880,92750887,ES
-92750888,92750895,PT
-92750896,92750899,IT
-92750900,92750903,FR
-92750904,92750907,GB
-92750908,92750911,FR
-92750912,92750943,PL
-92750944,92750959,FR
-92750960,92750967,PL
-92750968,92750975,FR
-92750976,92751039,BE
-92751040,92751071,ES
-92751072,92751231,GB
-92751232,92751235,IT
-92751236,92751239,PL
-92751240,92751243,FR
-92751244,92751247,ES
-92751248,92751271,FR
-92751272,92751275,DE
-92751276,92751279,NL
-92751280,92751295,PT
-92751296,92751311,GB
-92751312,92751319,PL
-92751320,92751615,FR
-92751616,92751631,ES
-92751632,92751647,CH
-92751648,92751679,FR
-92751680,92751711,PT
-92751712,92751807,DE
-92751808,92751871,FR
-92751872,92751903,GB
-92751904,92751991,FR
-92751992,92751999,DE
-92752000,92752127,ES
-92752128,92752143,IT
-92752144,92752191,FR
-92752192,92752255,ES
-92752256,92752319,BE
-92752320,92752431,FR
-92752432,92752447,GB
-92752448,92752575,FR
-92752576,92752583,IT
-92752584,92752607,GB
-92752608,92752611,IT
-92752612,92752615,DE
-92752616,92752619,PL
-92752620,92752631,IT
-92752632,92752635,FR
-92752636,92752639,PT
-92752640,92753175,FR
-92753176,92753215,CZ
-92753216,92753279,PT
-92753280,92753363,CZ
-92753364,92753367,GB
-92753368,92753551,FR
-92753552,92753567,NL
-92753568,92753631,FR
-92753632,92753663,BE
-92753664,92753671,FR
-92753672,92753675,IT
-92753676,92753919,FR
-92753920,92753923,CZ
-92753924,92753927,GB
-92753928,92753935,FR
-92753936,92753939,IT
-92753940,92753943,FR
-92753944,92753951,PT
-92753952,92753983,FR
-92753984,92754015,PT
-92754016,92754027,FR
-92754028,92754031,DE
-92754032,92754035,FR
-92754036,92754039,GB
-92754040,92754055,FR
-92754056,92754059,IT
-92754060,92754063,PL
-92754064,92754083,FR
-92754084,92754087,BE
-92754088,92754095,PL
-92754096,92754111,CH
-92754112,92754207,FR
-92754208,92754239,PT
-92754240,92754367,FR
-92754368,92754431,GB
-92754432,92754447,FR
-92754448,92754463,GB
-92754464,92754471,FR
-92754472,92754479,CZ
-92754480,92754495,ES
-92754496,92754559,CH
-92754560,92754579,FR
-92754580,92754583,PL
-92754584,92754591,FR
-92754592,92754623,CZ
-92754624,92754639,PL
-92754640,92754671,IT
-92754672,92755135,FR
-92755136,92755199,PT
-92755200,92755231,FR
-92755232,92755263,GB
-92755264,92755279,PT
-92755280,92755283,PL
-92755284,92755287,ES
-92755288,92755295,FR
-92755296,92755315,DE
-92755316,92755319,FR
-92755320,92755327,BE
-92755328,92755335,FR
-92755336,92755343,ES
-92755344,92755375,FR
-92755376,92755391,IE
-92755392,92755423,FR
-92755424,92755431,CH
-92755432,92755439,FR
-92755440,92755455,GB
-92755456,92755487,IT
-92755488,92755503,FR
-92755504,92755507,PT
-92755508,92755511,GB
-92755512,92755519,FR
-92755520,92755527,ES
-92755528,92755647,FR
-92755648,92755679,IT
-92755680,92755711,FR
-92755712,92755743,DE
-92755744,92755775,FI
-92755776,92755839,GB
-92755840,92755887,PT
-92755888,92755903,ES
-92755904,92755967,FR
-92755968,92756031,PT
-92756032,92756167,FR
-92756168,92756175,GB
-92756176,92756191,FR
-92756192,92756207,CH
-92756208,92756479,FR
-92756480,92756495,GB
-92756496,92756551,FR
-92756552,92756555,BE
-92756556,92756559,FR
-92756560,92756567,IE
-92756568,92756571,PL
-92756572,92756575,ES
-92756576,92756643,FR
-92756644,92756647,IT
-92756648,92756663,FR
-92756664,92756671,BE
-92756672,92756735,PT
-92756736,92756999,FR
-92757000,92757007,CH
-92757008,92757015,DE
-92757016,92757023,FR
-92757024,92757039,ES
-92757040,92757047,IT
-92757048,92757055,GB
-92757056,92757119,FR
-92757120,92757135,ES
-92757136,92757151,GB
-92757152,92757167,IT
-92757168,92757247,FR
-92757248,92757263,DE
-92757264,92757275,FR
-92757276,92757279,PL
-92757280,92757311,GB
+92749072,92749747,FR
+92749748,92749751,ES
+92749752,92751711,FR
+92751712,92751712,DE
+92751713,92754579,FR
+92754580,92754583,ES
+92754584,92757311,FR
92757312,92757375,ES
-92757376,92757439,FR
-92757440,92757503,PT
-92757504,92758047,FR
-92758048,92758055,BE
-92758056,92758063,CZ
-92758064,92758067,FR
-92758068,92758071,DE
-92758072,92758075,BE
-92758076,92758079,CH
-92758080,92758143,FR
-92758144,92758207,PT
-92758208,92758223,ES
-92758224,92758227,CZ
-92758228,92758231,PL
-92758232,92758235,DE
-92758236,92758271,FR
-92758272,92758303,IE
-92758304,92758319,PT
-92758320,92758335,FR
-92758336,92758343,PL
-92758344,92758347,GB
-92758348,92758351,CH
-92758352,92758355,FR
-92758356,92758359,PL
-92758360,92758363,FR
-92758364,92758367,CZ
-92758368,92758383,ES
-92758384,92758471,FR
-92758472,92758479,PL
-92758480,92758495,FR
-92758496,92758527,CH
-92758528,92758591,FR
-92758592,92758623,PT
-92758624,92758627,IT
-92758628,92758631,FR
-92758632,92758635,DE
-92758636,92758639,FR
-92758640,92758655,PL
-92758656,92758723,FR
-92758724,92758727,DE
-92758728,92758731,PL
-92758732,92758735,FR
-92758736,92758743,NL
-92758744,92758747,FR
-92758748,92758751,PL
-92758752,92758783,GB
-92758784,92758799,FR
-92758800,92758859,PL
-92758860,92758879,ES
-92758880,92758911,GB
-92758912,92758915,PL
-92758916,92758919,GB
-92758920,92758927,FR
-92758928,92758931,IT
-92758932,92758935,DE
-92758936,92758939,PL
-92758940,92758943,FR
-92758944,92758967,GB
-92758968,92759023,FR
-92759024,92759027,PT
-92759028,92759031,GB
-92759032,92759035,NL
-92759036,92759039,PL
-92759040,92759103,FR
-92759104,92759119,PL
-92759120,92759123,IE
-92759124,92759127,FR
-92759128,92759135,NL
-92759136,92759151,FR
-92759152,92759155,IT
-92759156,92759159,IE
-92759160,92759167,DE
-92759168,92759231,FR
-92759232,92759239,BE
-92759240,92759247,FR
-92759248,92759255,PL
-92759256,92759263,FR
-92759264,92759279,ES
-92759280,92759295,FR
-92759296,92759551,FI
-92759552,92760063,FR
-92760064,92760191,ES
-92760192,92760255,FR
-92760256,92760287,IE
-92760288,92760319,PT
-92760320,92760607,FR
-92760608,92760639,GB
-92760640,92760679,FR
-92760680,92760687,GB
-92760688,92760695,FR
-92760696,92760715,ES
-92760716,92760727,FR
-92760728,92760735,PT
-92760736,92760743,FI
-92760744,92760747,ES
-92760748,92760767,FR
-92760768,92760831,PT
-92760832,92761087,IE
-92761088,92761343,CH
-92761344,92761415,FR
-92761416,92761419,ES
-92761420,92761427,PL
-92761428,92761455,FR
-92761456,92761463,NL
-92761464,92761467,IT
-92761468,92761471,PL
-92761472,92761503,NL
-92761504,92761507,PL
-92761508,92761511,FR
-92761512,92761515,PL
-92761516,92761519,FR
-92761520,92761523,GB
-92761524,92761527,DE
-92761528,92761531,BE
-92761532,92761535,CH
-92761536,92761599,FR
-92761600,92761603,ES
-92761604,92761615,FR
-92761616,92761727,PL
-92761728,92761759,FR
-92761760,92761763,IT
-92761764,92761775,FR
-92761776,92761791,BE
-92761792,92761823,IT
-92761824,92761855,IE
-92761856,92761863,FR
-92761864,92761867,PL
-92761868,92761883,FR
-92761884,92761887,PL
-92761888,92761919,GB
-92761920,92761935,DE
-92761936,92761939,NL
-92761940,92761943,GB
-92761944,92761947,ES
-92761948,92762047,FR
-92762048,92762051,PL
-92762052,92762055,FR
-92762056,92762059,GB
-92762060,92762079,FR
-92762080,92762111,IT
-92762112,92762127,FR
+92757376,92762127,FR
92762128,92762135,ES
-92762136,92762143,FR
-92762144,92762147,PT
-92762148,92762151,PL
-92762152,92762155,LT
-92762156,92762159,IT
-92762160,92762163,FR
-92762164,92762167,ES
-92762168,92762175,FR
-92762176,92762207,FI
-92762208,92762211,FR
-92762212,92762219,PL
-92762220,92762223,DE
-92762224,92762239,FR
-92762240,92762271,IT
-92762272,92762303,DE
-92762304,92762307,FR
-92762308,92762311,PT
-92762312,92762335,FR
-92762336,92762399,GB
-92762400,92762431,ES
-92762432,92762495,FR
-92762496,92762503,GB
-92762504,92762511,BE
-92762512,92762591,FR
-92762592,92762599,PT
-92762600,92762607,NL
-92762608,92762615,IT
-92762616,92762619,ES
-92762620,92762623,IE
-92762624,92762655,CZ
-92762656,92762687,PT
-92762688,92762719,PL
-92762720,92762815,FR
-92762816,92762831,NL
-92762832,92762839,FR
-92762840,92762847,ES
-92762848,92762879,IE
-92762880,92762911,PL
-92762912,92762943,DE
-92762944,92763007,BE
-92763008,92763015,FR
-92763016,92763023,GB
-92763024,92763039,PL
-92763040,92763103,FR
-92763104,92763119,GB
-92763120,92763127,FR
-92763128,92763135,ES
-92763136,92763199,PT
-92763200,92763207,ES
-92763208,92763215,FR
-92763216,92763219,PT
-92763220,92763223,GB
-92763224,92763227,PL
-92763228,92763231,FR
-92763232,92763247,GB
-92763248,92763263,FR
-92763264,92763271,GB
-92763272,92763275,FR
-92763276,92763279,ES
-92763280,92763331,FR
-92763332,92763335,GB
-92763336,92763339,DE
-92763340,92763647,FR
-92763648,92763903,GB
-92763904,92764159,ES
-92764160,92764223,FR
-92764224,92764287,GB
-92764288,92764367,FR
-92764368,92764375,ES
-92764376,92764391,FR
-92764392,92764395,IT
-92764396,92764399,IE
-92764400,92764407,PL
-92764408,92764411,LT
-92764412,92764415,FR
-92764416,92764479,PT
-92764480,92764511,FR
-92764512,92764543,IE
-92764544,92764555,FR
-92764556,92764559,IE
-92764560,92764567,ES
-92764568,92764571,NL
-92764572,92764575,PT
-92764576,92764579,ES
-92764580,92764583,NL
-92764584,92764591,FR
-92764592,92764595,PL
-92764596,92764599,ES
-92764600,92764603,BE
-92764604,92764607,PL
-92764608,92764735,FR
-92764736,92764807,DE
-92764808,92764815,BE
-92764816,92764823,PT
-92764824,92764827,FR
-92764828,92764831,PT
-92764832,92764839,CH
-92764840,92764843,FR
-92764844,92764847,PL
-92764848,92764859,FR
-92764860,92764863,ES
-92764864,92764927,PT
-92764928,92765183,GB
-92765184,92765199,PT
-92765200,92765203,FR
-92765204,92765207,ES
-92765208,92765211,NL
-92765212,92765215,PL
-92765216,92765247,NL
-92765248,92765287,FR
-92765288,92765291,PT
-92765292,92765295,FR
-92765296,92765311,CZ
-92765312,92765343,FR
-92765344,92765347,GB
-92765348,92765351,ES
-92765352,92765359,PL
-92765360,92765367,ES
-92765368,92765371,IT
-92765372,92765391,FR
-92765392,92765395,IT
-92765396,92765399,PL
-92765400,92765403,IE
-92765404,92765407,BE
-92765408,92765423,FR
-92765424,92765427,GB
-92765428,92765431,DE
-92765432,92765439,CH
-92765440,92765447,NL
-92765448,92765455,DE
-92765456,92765459,FR
-92765460,92765471,GB
-92765472,92765503,IT
-92765504,92765567,FR
-92765568,92765571,GB
-92765572,92765591,FR
-92765592,92765595,DE
-92765596,92765627,FR
-92765628,92765631,FI
-92765632,92765635,ES
-92765636,92765639,FR
-92765640,92765647,IE
-92765648,92765663,FR
-92765664,92765667,ES
-92765668,92765675,FR
-92765676,92765679,IE
-92765680,92765727,FR
-92765728,92765735,PL
-92765736,92765739,GB
-92765740,92765743,IT
-92765744,92765859,FR
-92765860,92765863,PT
-92765864,92765867,IE
-92765868,92766079,FR
-92766080,92766143,PT
-92766144,92766175,GB
-92766176,92782607,FR
-92782608,92782611,NL
-92782612,92782655,FR
-92782656,92782687,IE
-92782688,92782719,IT
-92782720,92782735,FR
-92782736,92782739,CZ
-92782740,92782743,ES
-92782744,92782747,FR
-92782748,92782751,IT
-92782752,92782759,FR
-92782760,92782767,PL
-92782768,92782783,FR
-92782784,92782787,CH
-92782788,92782803,FR
-92782804,92782807,PT
-92782808,92782811,FR
-92782812,92782815,CH
-92782816,92782943,FR
-92782944,92782975,CH
-92782976,92782979,ES
-92782980,92782999,FR
-92783000,92783003,GB
-92783004,92783007,PT
-92783008,92783015,CZ
-92783016,92783019,FR
-92783020,92783023,NL
-92783024,92783039,PT
-92783040,92783043,DE
-92783044,92783047,FR
-92783048,92783051,GB
-92783052,92783059,PL
-92783060,92783063,DE
-92783064,92783087,FR
-92783088,92783095,DE
-92783096,92783103,IT
-92783104,92783111,FR
-92783112,92783115,NL
-92783116,92783119,IE
-92783120,92783135,PT
-92783136,92783147,FR
-92783148,92783151,DE
-92783152,92783155,IT
-92783156,92783163,GB
-92783164,92783167,FI
-92783168,92783235,FR
-92783236,92783243,GB
-92783244,92783247,PL
-92783248,92783263,FR
-92783264,92783267,PL
-92783268,92783271,FR
-92783272,92783279,IT
-92783280,92783287,GB
-92783288,92783319,FR
-92783320,92783323,IT
-92783324,92783327,FR
-92783328,92783359,IE
-92783360,92783423,ES
-92783424,92783439,GB
-92783440,92783447,FR
-92783448,92783455,IE
-92783456,92783487,NL
-92783488,92783491,IT
-92783492,92783495,FR
-92783496,92783503,ES
-92783504,92783515,FR
-92783516,92783519,CH
-92783520,92783647,FR
-92783648,92783663,BE
-92783664,92783667,GB
-92783668,92783671,FR
-92783672,92783679,IT
-92783680,92783711,FR
-92783712,92783715,PL
-92783716,92783719,NL
-92783720,92783723,IT
-92783724,92783727,PL
-92783728,92783731,ES
-92783732,92783735,FR
-92783736,92783739,CH
-92783740,92783743,FR
-92783744,92783807,BE
-92783808,92783871,FR
-92783872,92783887,NL
-92783888,92783911,FR
-92783912,92783919,PL
-92783920,92783995,FR
-92783996,92783999,LT
-92784000,92784031,FR
-92784032,92784047,NL
-92784048,92784079,FR
-92784080,92784087,PL
-92784088,92784099,FR
-92784100,92784103,CZ
-92784104,92784127,FR
-92784128,92784135,IE
-92784136,92784159,FR
-92784160,92784191,CH
-92784192,92784207,PT
-92784208,92784239,PL
-92784240,92784247,FR
-92784248,92784251,CH
-92784252,92784287,FR
-92784288,92784291,GB
-92784292,92784295,FR
-92784296,92784299,GB
-92784300,92784303,FR
-92784304,92784319,IE
-92784320,92784375,FR
-92784376,92784383,PT
-92784384,92784455,FR
-92784456,92784463,NL
-92784464,92784467,FR
-92784468,92784471,NL
-92784472,92784479,GB
-92784480,92784511,IT
-92784512,92784639,ES
-92784640,92784663,FR
-92784664,92784667,GB
-92784668,92784671,IE
-92784672,92784703,FR
-92784704,92784735,GB
-92784736,92784771,FR
-92784772,92784775,NL
-92784776,92784779,DE
-92784780,92784783,GB
-92784784,92784791,PL
-92784792,92784799,FR
-92784800,92784807,DE
-92784808,92784815,LT
-92784816,92784819,FR
-92784820,92784823,DE
-92784824,92784831,PT
-92784832,92784895,FR
-92784896,92785407,ES
-92785408,92785439,FR
-92785440,92785455,DE
-92785456,92785467,FR
-92785468,92785471,PL
-92785472,92785503,FR
-92785504,92785507,PL
-92785508,92785511,FR
-92785512,92785519,PT
-92785520,92785567,FR
-92785568,92785571,GB
-92785572,92785599,FR
-92785600,92785607,GB
-92785608,92785611,FR
-92785612,92785615,ES
-92785616,92785631,PT
-92785632,92785663,FR
-92785664,92785667,DE
-92785668,92785671,CH
-92785672,92785679,FR
-92785680,92785695,IE
-92785696,92785707,FR
-92785708,92785711,IT
-92785712,92785727,PT
-92785728,92785735,FR
-92785736,92785743,PT
-92785744,92785847,FR
-92785848,92785855,GB
-92785856,92785863,PT
-92785864,92785887,GB
-92785888,92786175,FR
-92786176,92786179,GB
-92786180,92786183,FR
-92786184,92786187,ES
-92786188,92786199,FR
-92786200,92786207,BE
-92786208,92786211,FR
-92786212,92786215,GB
-92786216,92786219,IE
-92786220,92786231,FR
-92786232,92786239,PT
-92786240,92786255,GB
-92786256,92786271,PT
-92786272,92786279,IT
-92786280,92786287,FR
-92786288,92786291,IT
-92786292,92786299,GB
-92786300,92786303,FR
-92786304,92786311,BE
-92786312,92786367,FR
-92786368,92786383,DE
-92786384,92786415,FR
-92786416,92786419,GB
-92786420,92786423,NL
-92786424,92786431,PT
-92786432,92786463,FR
-92786464,92786495,PL
-92786496,92786511,PT
-92786512,92786515,FR
-92786516,92786519,BE
-92786520,92786527,FR
-92786528,92786535,ES
-92786536,92786539,FR
-92786540,92786543,BE
-92786544,92786559,PT
-92786560,92786623,FR
-92786624,92786627,IT
-92786628,92786631,FR
-92786632,92786639,BE
-92786640,92786655,ES
-92786656,92786671,PL
-92786672,92786687,GB
-92786688,92786719,FR
-92786720,92786735,SN
-92786736,92786743,FR
-92786744,92786751,DE
-92786752,92786815,FR
-92786816,92786819,ES
-92786820,92786823,BE
-92786824,92786827,DE
-92786828,92786831,FR
-92786832,92786847,NL
-92786848,92786851,FR
-92786852,92786855,PL
-92786856,92786879,FR
-92786880,92786911,PT
-92786912,92786927,GB
-92786928,92786943,FR
-92786944,92786947,IT
-92786948,92786967,FR
-92786968,92786971,ES
-92786972,92786975,IT
-92786976,92786979,GB
-92786980,92786983,NL
-92786984,92786991,FR
-92786992,92786999,ES
-92787000,92787007,DE
-92787008,92787011,IT
-92787012,92787027,FR
-92787028,92787031,GB
-92787032,92787035,FR
-92787036,92787039,ES
-92787040,92787055,FR
-92787056,92787071,ES
-92787072,92787079,FR
-92787080,92787087,ES
-92787088,92787111,FR
-92787112,92787119,IT
-92787120,92787135,FR
-92787136,92787199,PL
-92787200,92787203,FI
-92787204,92787215,FR
-92787216,92787247,PT
-92787248,92787251,FR
-92787252,92787255,ES
-92787256,92787327,PT
-92787328,92787331,PL
-92787332,92787335,FR
-92787336,92787339,GB
-92787340,92787343,FR
-92787344,92787359,NL
-92787360,92787391,FR
-92787392,92787407,NL
-92787408,92787423,FR
-92787424,92787503,ES
-92787504,92787523,FR
-92787524,92787531,PL
-92787532,92787551,FR
-92787552,92787563,PT
-92787564,92787567,GB
-92787568,92787615,FR
-92787616,92787631,BE
-92787632,92787635,FR
-92787636,92787639,GB
-92787640,92787647,DE
-92787648,92787663,FR
-92787664,92787671,DE
-92787672,92787679,FR
-92787680,92787695,NL
-92787696,92787707,FR
-92787708,92787711,FI
-92787712,92788127,FR
-92788128,92788131,FI
-92788132,92788151,FR
-92788152,92788167,PL
-92788168,92788171,FR
-92788172,92788175,ES
-92788176,92788179,DE
-92788180,92788183,FR
-92788184,92788187,ES
-92788188,92788195,PL
-92788196,92788203,FR
-92788204,92788223,PT
-92788224,92788255,FR
-92788256,92788259,PT
-92788260,92788263,ES
-92788264,92788271,GB
-92788272,92788275,DE
-92788276,92788279,FR
-92788280,92788283,NL
-92788284,92788287,ES
-92788288,92788343,FR
-92788344,92788351,CZ
-92788352,92788431,FR
-92788432,92788447,IT
-92788448,92788495,FR
-92788496,92788511,NL
-92788512,92788527,IE
-92788528,92788543,FR
-92788544,92788607,PT
-92788608,92788639,NL
-92788640,92788671,BE
-92788672,92788683,FR
-92788684,92788687,PL
-92788688,92788735,FR
-92788736,92788743,GB
-92788744,92788747,PL
-92788748,92788795,FR
-92788796,92788799,IE
-92788800,92788919,FR
-92788920,92788927,PT
-92788928,92788931,FR
-92788932,92788935,PL
-92788936,92788943,ES
-92788944,92788959,FR
-92788960,92788963,PL
-92788964,92788975,DE
-92788976,92788983,PT
-92788984,92788991,DE
-92788992,92789007,IE
-92789008,92789055,FR
-92789056,92789071,CZ
-92789072,92789079,PL
-92789080,92789083,FR
-92789084,92789087,PT
-92789088,92789095,IT
-92789096,92789119,FR
-92789120,92789183,ES
-92789184,92789215,CZ
-92789216,92789223,PT
-92789224,92789231,NL
-92789232,92789255,FR
-92789256,92789259,GB
-92789260,92789263,FR
-92789264,92789267,IT
-92789268,92789271,FR
-92789272,92789275,FI
-92789276,92789279,DE
-92789280,92789311,IE
-92789312,92789319,GB
-92789320,92789335,FR
-92789336,92789339,CH
-92789340,92789343,CZ
-92789344,92789359,BE
-92789360,92789375,FR
-92789376,92789383,GB
-92789384,92789387,NL
-92789388,92789391,FR
-92789392,92789395,IT
-92789396,92789399,DE
-92789400,92789407,FR
-92789408,92789423,NL
-92789424,92789427,ES
-92789428,92789431,FR
-92789432,92789439,PL
-92789440,92789471,FR
-92789472,92789479,IT
-92789480,92789483,IE
-92789484,92789487,GB
-92789488,92789551,FR
-92789552,92789555,ES
-92789556,92789559,FR
-92789560,92789639,PT
-92789640,92789643,IT
-92789644,92789651,PL
-92789652,92789655,FR
-92789656,92789659,ES
-92789660,92789679,FR
-92789680,92789695,IT
-92789696,92789743,FR
-92789744,92789755,PT
-92789756,92789775,FR
-92789776,92789791,PL
-92789792,92789795,GB
-92789796,92789903,FR
-92789904,92789907,PL
-92789908,92789911,FR
-92789912,92789919,NL
-92789920,92789983,IE
-92789984,92790015,FR
-92790016,92790143,IE
-92790144,92790175,FR
-92790176,92790191,DE
-92790192,92790239,FR
-92790240,92790271,IE
-92790272,92790279,FR
-92790280,92790283,IE
-92790284,92790287,PL
-92790288,92790303,IT
-92790304,92790335,GB
-92790336,92790367,NL
-92790368,92790371,PT
-92790372,92790383,FR
-92790384,92790399,DE
-92790400,92790463,FR
-92790464,92790495,PT
-92790496,92790511,PL
-92790512,92790527,NL
-92790528,92790591,IT
-92790592,92790595,PL
-92790596,92790599,GB
-92790600,92790615,FR
-92790616,92790619,GB
-92790620,92790623,BE
-92790624,92790655,IE
-92790656,92790663,FR
-92790664,92790671,GB
-92790672,92790687,FR
-92790688,92790695,PL
-92790696,92790703,FR
-92790704,92790719,IT
-92790720,92791295,FR
-92791296,92791551,GB
-92791552,92791807,IE
-92791808,92792063,GB
-92792064,92792319,IE
-92792320,92792383,CH
-92792384,92792415,ES
-92792416,92792447,FR
-92792448,92792511,ES
-92792512,92792575,FR
-92792576,92792831,PT
-92792832,92792959,FR
-92792960,92792991,CH
-92792992,92793023,NL
-92793024,92793087,FR
-92793088,92793095,CZ
-92793096,92793099,BE
-92793100,92793103,FR
-92793104,92793119,NL
-92793120,92793151,GB
-92793152,92793155,DE
-92793156,92793183,FR
-92793184,92793215,GB
-92793216,92793247,IT
-92793248,92793279,ES
-92793280,92793287,FR
-92793288,92793295,DE
-92793296,92793319,FR
-92793320,92793323,GB
-92793324,92793331,FR
-92793332,92793343,GB
-92793344,92793855,DE
-92793856,92793887,FR
-92793888,92793919,IT
-92793920,92793935,FR
-92793936,92793943,PT
-92793944,92793951,PL
-92793952,92793983,FR
-92793984,92794047,PL
-92794048,92794143,FR
-92794144,92794159,DE
-92794160,92794207,NL
-92794208,92794223,IE
-92794224,92794227,FR
-92794228,92794231,PT
-92794232,92794239,ES
-92794240,92794327,FR
-92794328,92794335,IT
-92794336,92794367,FR
-92794368,92794431,PL
-92794432,92794463,FR
-92794464,92794499,GB
-92794500,92794503,FR
-92794504,92794511,IT
-92794512,92794691,FR
-92794692,92794695,ES
-92794696,92794699,PL
-92794700,92794703,IE
-92794704,92794715,FR
-92794716,92794719,GB
-92794720,92794727,PL
-92794728,92794735,GB
-92794736,92794911,FR
-92794912,92794943,NL
-92794944,92794975,CH
-92794976,92795103,FR
-92795104,92795111,ES
-92795112,92795119,PL
-92795120,92795127,FR
-92795128,92795131,PL
-92795132,92795135,GB
-92795136,92795167,IT
-92795168,92795171,NL
-92795172,92795175,BE
-92795176,92795179,PL
-92795180,92795191,FR
-92795192,92795195,NL
-92795196,92795199,FR
-92795200,92795263,GB
-92795264,92795327,FR
-92795328,92795391,DE
-92795392,92795455,CH
-92795456,92795487,FR
-92795488,92795495,ES
-92795496,92795511,FR
-92795512,92795515,GB
-92795516,92795551,FR
-92795552,92795559,BE
-92795560,92795567,PL
-92795568,92795583,IT
-92795584,92795615,IE
-92795616,92795619,GB
-92795620,92795623,PL
-92795624,92795627,ES
-92795628,92795631,NL
-92795632,92795647,FR
-92795648,92795903,GB
-92795904,92796159,IE
-92796160,92796415,GB
-92796416,92796423,FR
-92796424,92796427,ES
-92796428,92796431,NL
-92796432,92796463,FR
-92796464,92796471,GB
-92796472,92796479,NL
-92796480,92796511,CZ
-92796512,92796543,DE
-92796544,92796575,PL
-92796576,92796579,FR
-92796580,92796583,FI
-92796584,92796639,FR
-92796640,92796655,PT
-92796656,92796687,IE
-92796688,92796695,FR
-92796696,92796703,BE
-92796704,92796727,FR
-92796728,92796735,IT
-92796736,92796767,NL
-92796768,92796799,FR
-92796800,92796831,GB
-92796832,92796863,IT
-92796864,92796879,IE
-92796880,92796887,PL
-92796888,92796891,FR
-92796892,92796895,BE
-92796896,92796903,PL
-92796904,92796907,GB
-92796908,92796911,PL
-92796912,92796919,GB
-92796920,92796923,BE
-92796924,92796991,FR
-92796992,92797023,ES
-92797024,92797047,FR
-92797048,92797055,GB
-92797056,92797063,NL
-92797064,92797079,FR
-92797080,92797087,PL
-92797088,92797119,PT
-92797120,92797151,IT
-92797152,92797159,PT
-92797160,92797163,FR
-92797164,92797167,PT
-92797168,92797175,ES
-92797176,92797179,LT
-92797180,92797183,FR
-92797184,92797215,PT
-92797216,92797219,FR
-92797220,92797223,NL
-92797224,92797247,CH
-92797248,92797311,FR
-92797312,92797315,NL
-92797316,92797319,FR
-92797320,92797327,DE
-92797328,92797335,IE
-92797336,92797339,LT
-92797340,92797343,NL
-92797344,92797351,IT
-92797352,92797359,PL
-92797360,92797407,IT
-92797408,92797423,GB
-92797424,92797439,FR
-92797440,92797455,ES
-92797456,92797475,FR
-92797476,92797483,PL
-92797484,92797487,FR
-92797488,92797503,DE
-92797504,92797507,IT
-92797508,92797511,FR
-92797512,92797515,PL
-92797516,92797519,LT
-92797520,92797535,FR
-92797536,92797551,ES
-92797552,92797567,FR
-92797568,92797759,PT
-92797760,92797775,DE
-92797776,92797783,FR
-92797784,92797791,PL
-92797792,92797799,FR
-92797800,92797803,CH
-92797804,92797823,FR
-92797824,92797887,PL
-92797888,92797903,FR
-92797904,92797911,NL
-92797912,92797915,GB
-92797916,92797919,DE
-92797920,92797951,FR
-92797952,92797963,GB
-92797964,92797991,FR
-92797992,92797995,LT
-92797996,92797999,CZ
-92798000,92798007,CH
-92798008,92798011,DE
-92798012,92798015,ES
-92798016,92798047,FR
-92798048,92798055,DE
-92798056,92798059,FI
-92798060,92798079,DE
-92798080,92798087,FR
-92798088,92798095,GB
-92798096,92798111,IE
-92798112,92798119,IT
-92798120,92798127,DE
-92798128,92798143,NL
-92798144,92798159,PL
-92798160,92798163,DE
-92798164,92798167,FR
-92798168,92798191,PT
-92798192,92798207,IT
-92798208,92798211,NL
-92798212,92798215,FR
-92798216,92798223,ES
-92798224,92798231,IE
-92798232,92798239,FR
-92798240,92798247,PL
-92798248,92798255,FR
-92798256,92798271,FI
-92798272,92798275,ES
-92798276,92798283,FR
-92798284,92798287,PL
-92798288,92798303,PT
-92798304,92798319,FR
-92798320,92798335,DE
-92798336,92798399,ES
-92798400,92798415,GB
-92798416,92798431,FR
-92798432,92798439,PL
-92798440,92798451,IT
-92798452,92798455,FI
-92798456,92798975,FR
+92762136,92782687,FR
+92782688,92782719,ES
+92782720,92783543,FR
+92783544,92783547,ES
+92783548,92786827,FR
+92786828,92786831,IT
+92786832,92798975,FR
92798976,93323263,RU
93323264,93335551,CH
93335552,93339647,IL
@@ -5162,18 +893,7 @@
93360128,93362175,ES
93362176,93364223,GB
93364224,93368319,IT
-93368320,93368320,GB
-93368321,93368575,IN
-93368576,93368832,GB
-93368833,93369087,US
-93369088,93369088,GB
-93369089,93369343,US
-93369344,93369344,GB
-93369345,93369599,US
-93369600,93369600,GB
-93369601,93369855,US
-93369856,93370112,GB
-93370113,93370367,PK
+93368320,93370367,GB
93370368,93372415,IT
93372416,93388799,GR
93388800,93415423,CH
@@ -5181,8 +901,8 @@
93417472,93419519,IR
93419520,93421567,IT
93421568,93425663,DE
-93425664,93426175,SE
-93426176,93427711,GI
+93425664,93426687,GI
+93426688,93427711,DE
93427712,93429759,NO
93429760,93431807,RU
93431808,93433855,ES
@@ -5201,14 +921,14 @@
93681664,93683711,UA
93683712,93685759,AT
93685760,93687807,BE
-93687808,93691391,RU
-93691392,93691903,GB
+93687808,93691903,RU
93691904,93693951,PL
93693952,93695999,IE
93696000,93700095,FR
93700096,93702143,PL
-93702144,93704191,RU
-93704192,93708287,UA
+93702144,93705983,RU
+93705984,93706239,UA
+93706240,93708287,RU
93708288,93712383,DE
93712384,93714431,HU
93714432,93716479,NL
@@ -5218,7 +938,15 @@
93765632,93774847,SE
93774848,93776127,NO
93776128,93782015,SE
-93782016,93847551,GB
+93782016,93833983,GB
+93833984,93834239,NL
+93834240,93835263,GB
+93835264,93835519,NL
+93835520,93836287,GB
+93836288,93836799,NL
+93836800,93842351,GB
+93842352,93842359,NL
+93842360,93847551,GB
93847552,93880319,GE
93880320,93888511,IT
93888512,93890559,PL
@@ -5230,598 +958,90 @@
93906944,93908991,BA
93908992,93911039,IT
93911040,93913087,AE
-93913088,93913103,KR
-93913104,93913119,US
-93913120,93913127,AE
-93913128,93913135,IL
-93913136,93913147,KR
-93913148,93913151,IN
-93913152,93913155,KR
-93913156,93913159,CN
-93913160,93913167,IL
-93913168,93913183,US
-93913184,93913191,NL
-93913192,93913195,TR
-93913196,93913207,US
-93913208,93913223,NL
-93913224,93913231,AR
-93913232,93913239,QA
-93913240,93913247,NL
-93913248,93913263,CN
-93913264,93913271,US
-93913272,93913279,TR
-93913280,93913319,US
-93913320,93913327,EG
-93913328,93913335,US
-93913336,93913343,BR
-93913344,93913351,NL
-93913352,93913359,IT
-93913360,93913375,US
-93913376,93913383,IN
-93913384,93913391,BS
-93913392,93913399,IS
-93913400,93913407,CA
-93913408,93913415,NL
-93913416,93913423,IN
-93913424,93913431,IL
-93913432,93913435,TR
-93913436,93913471,NL
-93913472,93913479,IE
-93913480,93913487,BR
-93913488,93913495,US
-93913496,93913503,DK
-93913504,93913511,MA
-93913512,93913519,DK
-93913520,93913527,GB
-93913528,93913535,NL
-93913536,93913543,CA
-93913544,93913551,PA
-93913552,93913559,US
-93913560,93913567,CA
-93913568,93913575,GR
-93913576,93913599,NL
-93913600,93913615,JO
-93913616,93913623,TR
-93913624,93913647,US
-93913648,93913655,IN
-93913656,93913663,RU
-93913664,93913687,US
-93913688,93913703,IL
-93913704,93913711,ZA
-93913712,93913719,CA
-93913720,93913723,US
-93913724,93913727,GR
-93913728,93913759,US
-93913760,93913767,RU
-93913768,93913823,US
-93913824,93913835,NL
-93913836,93913855,US
-93913856,93913863,EE
-93913864,93913871,EG
-93913872,93913887,VG
-93913888,93913919,NL
-93913920,93913951,US
-93913952,93913983,JO
-93913984,93914015,US
-93914016,93914111,NL
-93914112,93914119,NO
-93914120,93914127,RU
-93914128,93914135,AF
-93914136,93914143,US
-93914144,93914151,IL
-93914152,93914159,KR
-93914160,93914167,JO
-93914168,93914171,RU
-93914172,93914173,NL
-93914174,93914174,US
-93914175,93914175,GB
-93914176,93914183,NL
-93914184,93914191,TR
-93914192,93914199,CN
-93914200,93914207,US
-93914208,93914215,IL
-93914216,93914223,TR
-93914224,93914231,RU
-93914232,93914263,NL
-93914264,93914271,IN
-93914272,93914279,ZA
-93914280,93914283,KW
-93914284,93914295,ES
-93914296,93914311,NL
-93914312,93914319,BE
-93914320,93914323,BR
-93914324,93914327,SA
-93914328,93914331,GB
-93914332,93914334,TR
-93914335,93914335,GB
-93914336,93914343,RO
-93914344,93914351,NL
-93914352,93914355,AU
-93914356,93914357,ES
+93913088,93914319,NL
+93914320,93914323,AZ
+93914324,93914357,NL
93914358,93914358,GB
-93914359,93914359,CN
-93914360,93914367,NL
-93914368,93914375,ES
-93914376,93914391,BE
-93914392,93914399,US
-93914400,93914407,BE
-93914408,93914439,NL
-93914440,93914447,TR
-93914448,93914455,US
-93914456,93914463,NO
-93914464,93914471,TR
-93914472,93914479,NL
-93914480,93914487,HR
-93914488,93914495,FR
-93914496,93914527,GT
-93914528,93914535,US
-93914536,93914543,NL
-93914544,93914551,QA
-93914552,93914567,US
-93914568,93914571,SE
-93914572,93914575,US
-93914576,93914583,NO
-93914584,93914587,US
-93914588,93914591,TR
-93914592,93914607,NL
-93914608,93914615,US
-93914616,93914623,CH
-93914624,93914663,US
-93914664,93914671,CZ
-93914672,93914679,TR
-93914680,93914687,IL
-93914688,93914695,US
-93914696,93914703,NL
-93914704,93914707,ES
-93914708,93914709,US
-93914710,93914710,EG
+93914359,93914671,NL
+93914672,93914679,US
+93914680,93914710,NL
93914711,93914711,GB
-93914712,93914719,US
-93914720,93914727,ES
-93914728,93914735,NL
-93914736,93914743,US
-93914744,93914751,EG
-93914752,93914783,US
-93914784,93914791,NL
-93914792,93914799,US
-93914800,93914807,NL
-93914808,93914815,PK
-93914816,93914847,NL
-93914848,93914855,AE
-93914856,93914871,US
-93914872,93914887,NL
-93914888,93914895,CH
-93914896,93914903,DE
-93914904,93914919,NL
-93914920,93914927,SE
-93914928,93914935,NL
-93914936,93914943,IN
-93914944,93914959,US
-93914960,93914967,NL
-93914968,93914975,NO
-93914976,93914983,LV
-93914984,93914991,JO
-93914992,93914999,CA
-93915000,93915007,NL
-93915008,93915071,US
-93915072,93915083,PL
-93915084,93915087,CA
-93915088,93915103,US
-93915104,93915111,RO
-93915112,93915119,TH
-93915120,93915131,US
-93915132,93915132,PA
-93915133,93915133,US
-93915134,93915134,CN
-93915135,93915135,NL
-93915136,93915207,US
-93915208,93915215,CY
-93915216,93915223,CA
-93915224,93915231,US
-93915232,93915247,GB
-93915248,93915263,NL
-93915264,93915271,US
-93915272,93915279,NL
-93915280,93915295,JP
-93915296,93915303,NL
-93915304,93915311,RO
-93915312,93915327,BR
-93915328,93915423,NL
-93915424,93915439,US
-93915440,93915551,NL
-93915552,93915559,US
-93915560,93915575,NL
-93915576,93915583,US
-93915584,93915615,NL
-93915616,93915623,BD
-93915624,93915663,NL
-93915664,93915679,US
-93915680,93915807,NL
-93915808,93915815,IT
-93915816,93915831,US
-93915832,93915839,CN
-93915840,93915863,US
-93915864,93915871,NL
-93915872,93915895,US
+93914712,93914951,NL
+93914952,93914959,US
+93914960,93915327,NL
+93915328,93915391,US
+93915392,93915847,NL
+93915848,93915855,TR
+93915856,93915863,US
+93915864,93915895,NL
93915896,93915903,AT
-93915904,93915911,DE
-93915912,93915919,US
-93915920,93915951,NL
-93915952,93915959,CN
-93915960,93915967,US
-93915968,93915975,NL
-93915976,93915983,US
-93915984,93915999,NL
-93916000,93916007,US
-93916008,93916015,MX
-93916016,93916031,NL
-93916032,93916039,US
-93916040,93916047,NL
-93916048,93916055,US
-93916056,93916063,ES
-93916064,93916079,US
-93916080,93916127,NL
-93916128,93916135,US
-93916136,93916143,ES
-93916144,93916159,NL
-93916160,93916175,US
-93916176,93916183,NL
-93916184,93916191,FR
-93916192,93916199,IL
-93916200,93916223,NL
-93916224,93916255,US
-93916256,93916303,NL
-93916304,93916304,AU
-93916305,93916305,CR
-93916306,93916307,AU
-93916308,93916311,NL
-93916312,93916319,US
-93916320,93916323,NL
-93916324,93916327,EG
-93916328,93916351,US
-93916352,93916383,NL
-93916384,93916407,US
-93916408,93916411,BD
-93916412,93916412,GR
-93916413,93916413,NL
-93916414,93916414,US
-93916415,93916415,NL
-93916416,93916447,US
-93916448,93916455,NL
-93916456,93916463,CY
-93916464,93916487,NL
-93916488,93916495,GB
-93916496,93916503,RO
-93916504,93916511,US
-93916512,93916519,LV
-93916520,93916527,IL
+93915904,93916335,NL
+93916336,93916343,US
+93916344,93916527,NL
93916528,93916543,US
-93916544,93916607,NL
-93916608,93916615,US
-93916616,93916623,CY
-93916624,93916719,NL
-93916720,93916727,CY
-93916728,93916735,US
-93916736,93916767,NL
-93916768,93916775,US
-93916776,93916783,CY
-93916784,93916823,NL
-93916824,93916831,CY
-93916832,93916879,NL
-93916880,93916887,CY
-93916888,93916895,US
-93916896,93916911,NL
-93916912,93916919,CY
-93916920,93916935,US
-93916936,93916939,CY
-93916940,93916943,NL
-93916944,93916951,CY
-93916952,93916959,NL
-93916960,93916967,US
-93916968,93916971,CY
+93916544,93916591,NL
+93916592,93916599,US
+93916600,93916971,NL
93916972,93916975,US
-93916976,93916991,NL
-93916992,93917003,US
-93917004,93917023,NL
-93917024,93917031,US
-93917032,93917039,NL
-93917040,93917063,US
-93917064,93917071,CN
-93917072,93917079,US
-93917080,93917087,NL
-93917088,93917095,US
-93917096,93917119,NL
-93917120,93917135,US
-93917136,93917143,AT
-93917144,93917167,US
-93917168,93917183,NL
-93917184,93917191,US
-93917192,93917311,NL
-93917312,93917343,US
-93917344,93917359,NL
-93917360,93917511,US
-93917512,93917519,NL
-93917520,93917527,US
-93917528,93917535,CN
-93917536,93917539,MA
-93917540,93917543,SE
-93917544,93917551,US
-93917552,93917559,GB
-93917560,93917563,NL
-93917564,93917567,ES
-93917568,93917575,US
-93917576,93917583,LV
-93917584,93917587,GR
-93917588,93917591,US
-93917592,93917599,NL
-93917600,93917607,GB
-93917608,93917611,NL
-93917612,93917615,TR
-93917616,93917623,NL
-93917624,93917631,US
-93917632,93917639,GB
-93917640,93917647,RS
-93917648,93917655,DE
-93917656,93917663,NL
-93917664,93917671,US
-93917672,93917679,IN
-93917680,93917687,TW
-93917688,93917695,LT
-93917696,93917703,US
-93917704,93917707,NL
-93917708,93917711,RU
-93917712,93917719,US
-93917720,93917727,NL
-93917728,93917735,TR
-93917736,93917743,GB
-93917744,93917751,NL
-93917752,93917791,US
-93917792,93917799,RU
-93917800,93917823,NL
-93917824,93917855,TR
-93917856,93917863,CY
-93917864,93917867,CN
-93917868,93917871,TR
-93917872,93917935,NL
-93917936,93917943,IN
-93917944,93917947,NL
-93917948,93917949,US
-93917950,93917950,BZ
-93917951,93917952,NL
-93917953,93917953,GB
-93917954,93917955,US
-93917956,93917959,IN
-93917960,93917963,TR
-93917964,93917975,US
-93917976,93917979,NL
-93917980,93917999,TR
-93918000,93918007,US
-93918008,93918015,NL
-93918016,93918023,RS
-93918024,93918031,GB
-93918032,93918047,US
-93918048,93918063,GB
-93918064,93918071,SE
-93918072,93918073,US
-93918074,93918074,AU
-93918075,93918075,FR
-93918076,93918079,TR
-93918080,93918087,GB
-93918088,93918095,CN
-93918096,93918103,FI
+93916976,93918103,NL
93918104,93918111,US
-93918112,93918127,GB
-93918128,93918135,SG
-93918136,93918143,US
-93918144,93918151,CA
-93918152,93918159,AE
-93918160,93918175,NL
-93918176,93918183,AE
-93918184,93918199,US
-93918200,93918207,NL
-93918208,93918223,US
-93918224,93918231,RO
-93918232,93918235,CN
-93918236,93918239,SA
-93918240,93918243,TR
-93918244,93918247,US
-93918248,93918255,NL
-93918256,93918263,RO
-93918264,93918279,US
-93918280,93918287,GB
-93918288,93918295,US
-93918296,93918303,RU
-93918304,93918319,BG
-93918320,93918327,PL
-93918328,93918335,IL
-93918336,93918351,NL
-93918352,93918359,CN
-93918360,93918363,EG
-93918364,93918367,AU
-93918368,93918383,IL
-93918384,93918431,US
-93918432,93918439,NL
-93918440,93918447,MA
-93918448,93918455,NL
-93918456,93918463,CN
-93918464,93918471,AU
-93918472,93918475,SE
-93918476,93918479,TR
-93918480,93918487,US
-93918488,93918495,MX
-93918496,93918503,DK
-93918504,93918511,NL
-93918512,93918519,US
-93918520,93918535,NL
-93918536,93918543,EE
-93918544,93918551,CH
-93918552,93918555,TR
+93918112,93918215,NL
+93918216,93918223,US
+93918224,93918555,NL
93918556,93918559,US
-93918560,93918567,AE
-93918568,93918575,NO
-93918576,93918591,NL
+93918560,93918591,NL
93918592,93918599,US
-93918600,93918607,GB
-93918608,93918615,US
-93918616,93918623,IL
-93918624,93918631,NO
-93918632,93918635,GR
-93918636,93918639,US
-93918640,93918647,NL
-93918648,93918655,IL
-93918656,93918687,BR
-93918688,93918695,TR
-93918696,93918703,US
-93918704,93918711,NL
-93918712,93918719,CY
-93918720,93918847,IT
-93918848,93918855,US
-93918856,93918863,GR
-93918864,93918871,IL
-93918872,93918879,RU
-93918880,93918887,TH
-93918888,93918895,EG
-93918896,93918903,HK
-93918904,93918911,GB
-93918912,93918919,IL
-93918920,93918927,IE
-93918928,93918935,RU
-93918936,93918943,NL
-93918944,93918975,US
-93918976,93919007,MA
-93919008,93919015,GR
-93919016,93919023,RU
-93919024,93919031,US
-93919032,93919039,DK
-93919040,93919087,NL
-93919088,93919095,AE
-93919096,93919103,NL
-93919104,93919135,TR
-93919136,93919143,US
-93919144,93919147,NL
-93919148,93919151,US
-93919152,93919159,NL
-93919160,93919163,US
-93919164,93919167,NL
-93919168,93919175,ES
-93919176,93919183,US
-93919184,93919191,IL
-93919192,93919195,US
-93919196,93919196,NL
-93919197,93919197,CA
-93919198,93919199,NL
-93919200,93919207,US
-93919208,93919215,NL
-93919216,93919247,US
-93919248,93919255,NL
-93919256,93919263,DK
+93918600,93918655,NL
+93918656,93918687,US
+93918688,93919263,NL
93919264,93919279,US
-93919280,93919287,NL
-93919288,93919295,US
-93919296,93919303,NL
-93919304,93919311,PT
-93919312,93919319,GB
-93919320,93919327,DK
-93919328,93919335,NL
-93919336,93919343,US
-93919344,93919359,NL
-93919360,93919423,US
-93919424,93919431,NL
-93919432,93919439,US
-93919440,93919443,AU
-93919444,93919463,US
-93919464,93919471,NL
-93919472,93919551,US
-93919552,93919583,CA
-93919584,93919591,PT
-93919592,93919599,US
-93919600,93919607,NL
-93919608,93919615,US
-93919616,93919623,LV
-93919624,93919631,PK
-93919632,93919639,GB
-93919640,93919647,NL
-93919648,93919655,US
-93919656,93919659,TR
-93919660,93919663,US
-93919664,93919671,NL
-93919672,93919679,ES
-93919680,93919703,US
-93919704,93919707,NL
-93919708,93919711,US
-93919712,93919719,IN
-93919720,93919727,GB
-93919728,93919735,ES
-93919736,93919743,CH
-93919744,93919751,NL
-93919752,93919759,MY
-93919760,93919775,NL
-93919776,93919779,US
-93919780,93919780,MA
-93919781,93919781,GR
-93919782,93919783,AU
-93919784,93919791,US
-93919792,93919799,NL
-93919800,93919807,US
-93919808,93919811,NL
-93919812,93919815,US
-93919816,93919819,NL
-93919820,93919821,SA
-93919822,93919822,ES
-93919823,93919823,IN
-93919824,93919863,NL
-93919864,93919871,US
-93919872,93919911,NL
-93919912,93919919,PT
-93919920,93919943,US
-93919944,93919991,NL
-93919992,93919999,US
-93920000,93920007,IL
-93920008,93920055,NL
-93920056,93920059,CY
+93919280,93919391,NL
+93919392,93919395,US
+93919396,93919951,NL
+93919952,93919959,US
+93919960,93920059,NL
93920060,93920063,US
-93920064,93920095,NL
-93920096,93920119,US
-93920120,93920127,NL
-93920128,93920143,RU
-93920144,93920167,US
-93920168,93920175,NL
-93920176,93920183,CY
-93920184,93920187,TR
-93920188,93920189,ES
-93920190,93920190,IN
-93920191,93920191,HR
-93920192,93920199,NL
-93920200,93920201,AU
-93920202,93920202,GB
-93920203,93920203,AE
-93920204,93920207,IL
-93920208,93920215,NL
-93920216,93920223,IL
-93920224,93920231,US
-93920232,93920351,NL
-93920352,93920367,CY
-93920368,93920383,NL
-93920384,93920391,GB
-93920392,93920395,GR
-93920396,93920407,NL
-93920408,93920415,US
-93920416,93920423,NL
-93920424,93920431,MX
-93920432,93920447,US
-93920448,93920463,NL
-93920464,93920479,TR
-93920480,93920483,US
-93920484,93920487,NL
-93920488,93920495,US
-93920496,93920503,FR
-93920504,93920511,NL
-93920512,93920519,US
-93920520,93920527,SE
-93920528,93920535,CH
-93920536,93920543,NL
-93920544,93920575,US
-93920576,93929471,NL
+93920064,93920163,NL
+93920164,93920167,US
+93920168,93920575,NL
+93920576,93920639,US
+93920640,93920855,NL
+93920856,93920863,US
+93920864,93921055,NL
+93921056,93921059,US
+93921060,93921063,NL
+93921064,93921071,GB
+93921072,93923551,NL
+93923552,93923559,US
+93923560,93923567,NL
+93923568,93923575,US
+93923576,93923855,NL
+93923856,93923863,US
+93923864,93924407,NL
+93924408,93924415,JP
+93924416,93924591,NL
+93924592,93924599,US
+93924600,93924927,NL
+93924928,93924935,ES
+93924936,93925807,NL
+93925808,93925815,KE
+93925816,93927143,NL
+93927144,93927151,JP
+93927152,93927231,NL
+93927232,93927247,CL
+93927248,93927871,NL
+93927872,93927879,US
+93927880,93927887,NL
+93927888,93927895,US
+93927896,93927927,NL
+93927928,93927935,US
+93927936,93929031,NL
+93929032,93929039,US
+93929040,93929079,NL
+93929080,93929087,US
+93929088,93929191,NL
+93929192,93929199,US
+93929200,93929471,NL
93929472,93939711,GB
93939712,93941759,NO
93941760,93945855,CH
@@ -5830,7 +1050,8 @@
93972480,93974527,SE
93974528,93976575,CH
93976576,93978623,GB
-93978624,94175231,RO
+93978624,94011391,ES
+94011392,94175231,RO
94175232,94178303,SE
94178304,94178559,NO
94178560,94179071,SE
@@ -5848,9 +1069,7 @@
94187264,94188287,AT
94188288,94189311,SE
94189312,94189567,LI
-94189568,94190079,NO
-94190080,94191103,GB
-94191104,94191615,SE
+94189568,94191615,SE
94191616,94193663,GB
94193664,94195711,SI
94195712,94199807,NL
@@ -5882,7 +1101,7 @@
94339072,94355455,ES
94355456,94357503,NL
94357504,94361599,GB
-94361600,94363647,PT
+94361600,94363647,LU
94363648,94365695,GB
94365696,94367743,HU
94367744,94369791,ES
@@ -5911,12 +1130,51 @@
95365120,95367167,ES
95367168,95369215,IT
95369216,95371263,GB
-95371264,95375359,EU
+95371264,95375359,IT
95375360,95377407,NL
95377408,95387647,RU
-95387648,95416319,DE
-95416320,95416831,US
-95416832,95420415,DE
+95387648,95387903,GB
+95387904,95388927,DE
+95388928,95389183,AU
+95389184,95389695,DE
+95389696,95390207,GB
+95390208,95393151,DE
+95393152,95393279,RS
+95393280,95393407,DE
+95393408,95393535,AE
+95393536,95393663,DE
+95393664,95393791,QA
+95393792,95394047,GB
+95394048,95395327,AU
+95395328,95395839,GB
+95395840,95398399,DE
+95398400,95398655,GB
+95398656,95400447,DE
+95400448,95400703,GB
+95400704,95401471,DE
+95401472,95401727,GB
+95401728,95402111,DE
+95402112,95402239,KW
+95402240,95402623,DE
+95402624,95402751,US
+95402752,95403519,DE
+95403520,95403775,GB
+95403776,95404799,DE
+95404800,95405055,GB
+95405056,95405567,DE
+95405568,95405823,GB
+95405824,95406335,DE
+95406336,95407359,GB
+95407360,95407871,US
+95407872,95408639,DE
+95408640,95409151,GB
+95409152,95409663,DE
+95409664,95409919,US
+95409920,95410175,DE
+95410176,95410431,AU
+95410432,95410687,DE
+95410688,95410943,GB
+95410944,95420415,DE
95420416,95551487,TR
95551488,95555583,AZ
95555584,95557631,GB
@@ -5928,18 +1186,7 @@
95569920,95571967,SE
95571968,95574015,RU
95574016,95576063,IT
-95576064,95578368,GB
-95578369,95578623,US
-95578624,95578624,GB
-95578625,95578879,US
-95578880,95578880,GB
-95578881,95579135,US
-95579136,95579136,GB
-95579137,95579391,US
-95579392,95579392,GB
-95579393,95579647,US
-95579648,95579904,GB
-95579905,95580159,US
+95576064,95580159,GB
95580160,95582207,NL
95582208,95584255,IT
95584256,95617023,GE
@@ -5952,28 +1199,33 @@
95647744,95649791,FR
95649792,95666175,IT
95666176,95668223,FR
-95668224,95674623,DE
-95674624,95674639,NL
-95674640,95676159,DE
-95676160,95676191,NL
-95676192,95682559,DE
-95682560,95944703,UA
+95668224,95682559,DE
95944704,96075775,PL
96075776,96143359,DE
96143360,96145407,GE
96145408,96149503,GB
96149504,96151551,ES
96151552,96153599,RU
-96153600,96155135,PL
-96155136,96155647,IE
+96153600,96155647,PL
96155648,96157695,CH
96157696,96165887,RU
-96165888,96167935,GP
-96167936,96169983,MQ
-96169984,96172031,GY
-96172032,96174079,FR
+96165888,96166143,GP
+96166144,96167167,FR
+96167168,96167423,GP
+96167424,96167679,FR
+96167680,96167935,GP
+96167936,96168191,MQ
+96168192,96169471,FR
+96169472,96169727,MQ
+96169728,96170751,FR
+96170752,96171263,GF
+96171264,96173055,FR
+96173056,96173311,MQ
+96173312,96174079,FR
96174080,96206847,HU
-96206848,96337919,RU
+96206848,96305151,RU
+96305152,96321535,DE
+96321536,96337919,RU
96337920,96403455,IR
96403456,96468991,AZ
96468992,96731135,RO
@@ -5982,139 +1234,15 @@
96862208,96894975,GB
96894976,96897023,CZ
96897024,96899071,GB
-96899072,96900991,AT
-96900992,96901119,DE
-96901120,96901375,AT
-96901376,96901631,DE
-96901632,96901887,AT
-96901888,96902399,DE
-96902400,96902655,AT
-96902656,96902671,DE
-96902672,96902703,AT
-96902704,96902719,CH
-96902720,96902735,DE
-96902736,96902791,AT
-96902792,96902799,CH
-96902800,96903167,AT
+96899072,96903167,AT
96903168,96911359,IR
-96911360,96919551,NL
+96911360,96919551,FR
96919552,96923647,IT
96923648,96925695,JO
-96925696,96925823,GB
-96925824,96925839,FI
-96925840,96925855,DK
-96925856,96925871,NO
-96925872,96925887,VN
-96925888,96925951,GB
-96925952,96925967,NL
-96925968,96926063,GB
-96926064,96926079,FI
-96926080,96926095,DK
-96926096,96926111,NO
-96926112,96926127,DE
-96926128,96926143,IT
-96926144,96926175,EG
-96926176,96926271,GB
-96926272,96926303,BY
-96926304,96926319,GB
-96926320,96926335,NL
-96926336,96926351,FI
-96926352,96926367,DK
-96926368,96926383,NO
-96926384,96926399,DE
-96926400,96926415,IT
-96926416,96926623,GB
-96926624,96926631,NL
-96926632,96926639,CN
-96926640,96926655,IT
-96926656,96926671,DE
-96926672,96926687,NO
-96926688,96926703,DK
-96926704,96926719,FI
-96926720,96926735,NL
-96926736,96926831,GB
-96926832,96926847,FI
-96926848,96926863,DK
-96926864,96926879,NO
-96926880,96926895,DE
-96926896,96926911,IT
-96926912,96926943,CZ
-96926944,96927103,GB
-96927104,96927135,EE
-96927136,96927151,IT
-96927152,96927167,DE
-96927168,96927183,NO
-96927184,96927199,DK
-96927200,96927215,FI
-96927216,96927247,NL
-96927248,96927295,GB
-96927296,96927327,UA
-96927328,96927343,GB
-96927344,96927359,FI
-96927360,96927375,DK
-96927376,96927391,NO
-96927392,96927407,DE
-96927408,96927423,IT
-96927424,96927487,GB
-96927488,96927503,NL
-96927504,96927551,GB
-96927552,96927583,GR
-96927584,96927599,GB
-96927600,96927615,FI
-96927616,96927631,DK
-96927632,96927647,NO
-96927648,96927663,DE
-96927664,96927679,IT
-96927680,96960511,GB
-96960512,96963639,DE
-96963640,96963647,AT
-96963648,96964607,DE
+96925696,96960511,GB
+96960512,96964607,DE
96964608,96968703,NL
-96968704,96971527,LT
-96971528,96971535,CA
-96971536,96971583,LK
-96971584,96971647,GB
-96971648,96971743,CY
-96971744,96971759,CA
-96971760,96971767,IN
-96971768,96971775,LT
-96971776,96972031,UY
-96972032,96972087,LT
-96972088,96972095,RU
-96972096,96972111,NL
-96972112,96972119,BE
-96972120,96972143,LT
-96972144,96972151,ES
-96972152,96972159,LT
-96972160,96972191,US
-96972192,96972207,LT
-96972208,96972215,HK
-96972216,96972279,US
-96972280,96972303,LT
-96972304,96972327,CN
-96972328,96972335,LT
-96972336,96972343,SC
-96972344,96972351,LT
-96972352,96972415,CY
-96972416,96972479,LT
-96972480,96972511,BR
-96972512,96972527,PL
-96972528,96972535,US
-96972536,96972551,LT
-96972552,96972575,CN
-96972576,96972607,CY
-96972608,96972655,LT
-96972656,96972663,CN
-96972664,96972671,CH
-96972672,96972703,PK
-96972704,96972727,RU
-96972728,96972767,LT
-96972768,96972783,FR
-96972784,96972786,LT
-96972787,96972787,NL
-96972788,96972789,LT
-96972790,96972790,NL
-96972791,96972799,LT
+96968704,96972799,LT
96972800,96974847,DE
96974848,96985087,RU
96985088,96987135,ES
@@ -6133,514 +1261,13 @@
97435648,97437695,DK
97437696,97439743,AT
97439744,97443839,NL
-97443840,97445887,ES
+97443840,97445887,PT
97445888,97447935,RS
97447936,97452031,PL
97452032,97517567,UA
97517568,98566143,IR
-98566144,98567167,GB
-98567168,98567935,DE
-98567936,98568191,AD
-98568192,98568447,AE
-98568448,98568703,AF
-98568704,98568959,AG
-98568960,98569215,AI
-98569216,98569471,AL
-98569472,98569727,AM
-98569728,98569983,AO
-98569984,98570239,AQ
-98570240,98570495,AR
-98570496,98570751,AS
-98570752,98571007,AT
-98571008,98571263,AU
-98571264,98571519,AW
-98571520,98571775,AX
-98571776,98572031,AZ
-98572032,98572287,BA
-98572288,98572543,BB
-98572544,98572799,BD
-98572800,98573055,BE
-98573056,98573311,BF
-98573312,98573567,BG
-98573568,98573823,BH
-98573824,98574079,BI
-98574080,98574335,BJ
-98574336,98574591,BL
-98574592,98574847,BM
-98574848,98575103,BN
-98575104,98575359,BO
-98575360,98575615,BQ
-98575616,98575871,BR
-98575872,98576127,BS
-98576128,98576383,BT
-98576384,98576639,NL
-98576640,98576895,BW
-98576896,98577151,BY
-98577152,98577407,BZ
-98577408,98577663,CA
-98577664,98577919,CC
-98577920,98578175,CD
-98578176,98578431,CF
-98578432,98578687,CG
-98578688,98578943,CH
-98578944,98579199,CI
-98579200,98579455,CK
-98579456,98579711,CL
-98579712,98579967,CM
-98579968,98580223,CN
-98580224,98580479,CO
-98580480,98580735,CR
-98580736,98580991,CU
-98580992,98581247,CV
-98581248,98581503,CW
-98581504,98581759,CX
-98581760,98582015,CY
-98582016,98582271,CZ
-98582272,98582527,DE
-98582528,98582783,DJ
-98582784,98583039,DK
-98583040,98583295,DM
-98583296,98583551,DO
-98583552,98583807,DZ
-98583808,98584063,EC
-98584064,98584319,EE
-98584320,98584575,EG
-98584576,98584831,EH
-98584832,98585087,ER
-98585088,98585343,ES
-98585344,98585599,ET
-98585600,98585855,FI
-98585856,98586111,FJ
-98586112,98586367,FK
-98586368,98586623,FM
-98586624,98586879,FO
-98586880,98587135,FR
-98587136,98587391,GA
-98587392,98587647,GB
-98587648,98587903,GD
-98587904,98588159,GE
-98588160,98588415,GF
-98588416,98588671,GG
-98588672,98588927,GH
-98588928,98589183,GI
-98589184,98589439,GL
-98589440,98589695,GM
-98589696,98589951,GN
-98589952,98590207,GP
-98590208,98590463,GQ
-98590464,98590719,GR
-98590720,98590975,GS
-98590976,98591231,GT
-98591232,98591487,GU
-98591488,98591743,GW
-98591744,98591999,GY
-98592000,98592255,HK
-98592256,98592511,NL
-98592512,98592767,HN
-98592768,98593023,HR
-98593024,98593279,HT
-98593280,98593535,HU
-98593536,98593791,ID
-98593792,98594047,IE
-98594048,98594303,IL
-98594304,98594559,IM
-98594560,98594815,IN
-98594816,98595071,IO
-98595072,98595327,IQ
-98595328,98595583,IR
-98595584,98595839,IS
-98595840,98596095,IT
-98596096,98596351,JE
-98596352,98596607,JM
-98596608,98596863,JO
-98596864,98597119,JP
-98597120,98597375,KE
-98597376,98597631,KG
-98597632,98597887,KI
-98597888,98598143,KM
-98598144,98598399,KN
-98598400,98598655,KP
-98598656,98598911,KR
-98598912,98599167,KW
-98599168,98599423,KY
-98599424,98599679,KZ
-98599680,98599935,LA
-98599936,98600191,LB
-98600192,98600447,LC
-98600448,98600703,LI
-98600704,98600959,LK
-98600960,98601215,LR
-98601216,98601471,LS
-98601472,98601727,LT
-98601728,98601983,LU
-98601984,98602239,LV
-98602240,98602495,LY
-98602496,98602751,MC
-98602752,98603007,MD
-98603008,98603263,ME
-98603264,98603519,MF
-98603520,98603775,MG
-98603776,98604031,MH
-98604032,98604287,MK
-98604288,98604543,ML
-98604544,98604799,MM
-98604800,98605055,MN
-98605056,98605311,MO
-98605312,98605567,MP
-98605568,98605823,MQ
-98605824,98606079,MR
-98606080,98606335,MS
-98606336,98606591,MT
-98606592,98606847,MU
-98606848,98607103,MV
-98607104,98607359,MW
-98607360,98607615,MX
-98607616,98607871,MY
-98607872,98608127,MZ
-98608128,98608383,NA
-98608384,98608639,NC
-98608640,98608895,NE
-98608896,98609151,NF
-98609152,98609407,NG
-98609408,98609663,NI
-98609664,98609919,NL
-98609920,98610175,NO
-98610176,98610431,NP
-98610432,98610687,NR
-98610688,98610943,NU
-98610944,98611199,NZ
-98611200,98611455,OM
-98611456,98611711,PA
-98611712,98611967,PE
-98611968,98612223,PF
-98612224,98612479,PG
-98612480,98612735,PH
-98612736,98612991,PK
-98612992,98613247,PL
-98613248,98613503,PM
-98613504,98613759,PN
-98613760,98614015,PR
-98614016,98614271,PS
-98614272,98614527,PT
-98614528,98614783,PW
-98614784,98615039,PY
-98615040,98615295,QA
-98615296,98615551,RE
-98615552,98615807,RO
-98615808,98616063,RS
-98616064,98616319,RU
-98616320,98616575,RW
-98616576,98616831,SA
-98616832,98617087,SB
-98617088,98617343,SC
-98617344,98617599,SD
-98617600,98617855,SE
-98617856,98618111,SG
-98618112,98618367,SH
-98618368,98618623,SI
-98618624,98618879,SJ
-98618880,98619135,SK
-98619136,98619391,SL
-98619392,98619647,SM
-98619648,98619903,SN
-98619904,98620159,SO
-98620160,98620415,SR
-98620416,98620671,SS
-98620672,98620927,ST
-98620928,98621183,SV
-98621184,98621439,SX
-98621440,98621695,SY
-98621696,98621951,SZ
-98621952,98622207,TC
-98622208,98622463,TD
-98622464,98622719,TF
-98622720,98622975,TG
-98622976,98623231,TH
-98623232,98623487,TJ
-98623488,98623743,TK
-98623744,98623999,TL
-98624000,98624255,TM
-98624256,98624511,TN
-98624512,98624767,TO
-98624768,98625023,TR
-98625024,98625279,TT
-98625280,98625535,TV
-98625536,98625791,TW
-98625792,98626047,TZ
-98626048,98626303,UA
-98626304,98626559,UG
-98626560,98626815,UM
-98626816,98627071,US
-98627072,98627327,UY
-98627328,98627583,UZ
-98627584,98627839,VA
-98627840,98628095,VC
-98628096,98628351,VE
-98628352,98628607,VG
-98628608,98628863,VI
-98628864,98629119,VN
-98629120,98629375,VU
-98629376,98629631,WF
-98629632,98629887,WS
-98629888,98630143,YE
-98630144,98630399,YT
-98630400,98630655,ZA
-98630656,98630911,ZM
-98630912,98631167,ZW
-98631168,98631679,AD
-98631680,98632703,GB
-98632704,98633471,DE
-98633472,98633727,AD
-98633728,98633983,AE
-98633984,98634239,AF
-98634240,98634495,AG
-98634496,98634751,AI
-98634752,98635007,AL
-98635008,98635263,AM
-98635264,98635519,AO
-98635520,98635775,AQ
-98635776,98636031,AR
-98636032,98636287,AS
-98636288,98636543,AT
-98636544,98636799,AU
-98636800,98637055,AW
-98637056,98637311,AX
-98637312,98637567,AZ
-98637568,98637823,BA
-98637824,98638079,BB
-98638080,98638335,BD
-98638336,98638591,BE
-98638592,98638847,BF
-98638848,98639103,BG
-98639104,98639359,BH
-98639360,98639615,BI
-98639616,98639871,BJ
-98639872,98640127,BL
-98640128,98640383,BM
-98640384,98640639,BN
-98640640,98640895,BO
-98640896,98641151,BQ
-98641152,98641407,BR
-98641408,98641663,BS
-98641664,98641919,BT
-98641920,98642175,NL
-98642176,98642431,BW
-98642432,98642687,BY
-98642688,98642943,BZ
-98642944,98643199,CA
-98643200,98643455,CC
-98643456,98643711,CD
-98643712,98643967,CF
-98643968,98644223,CG
-98644224,98644479,CH
-98644480,98644735,CI
-98644736,98644991,CK
-98644992,98645247,CL
-98645248,98645503,CM
-98645504,98645759,CN
-98645760,98646015,CO
-98646016,98646271,CR
-98646272,98646527,CU
-98646528,98646783,CV
-98646784,98647039,CW
-98647040,98647295,CX
-98647296,98647551,CY
-98647552,98647807,CZ
-98647808,98648063,DE
-98648064,98648319,DJ
-98648320,98648575,DK
-98648576,98648831,DM
-98648832,98649087,DO
-98649088,98649343,DZ
-98649344,98649599,EC
-98649600,98649855,EE
-98649856,98650111,EG
-98650112,98650367,EH
-98650368,98650623,ER
-98650624,98650879,ES
-98650880,98651135,ET
-98651136,98651391,FI
-98651392,98651647,FJ
-98651648,98651903,FK
-98651904,98652159,FM
-98652160,98652415,FO
-98652416,98652671,FR
-98652672,98652927,GA
-98652928,98653183,GB
-98653184,98653439,GD
-98653440,98653695,GE
-98653696,98653951,GF
-98653952,98654207,GG
-98654208,98654463,GH
-98654464,98654719,GI
-98654720,98654975,GL
-98654976,98655231,GM
-98655232,98655487,GN
-98655488,98655743,GP
-98655744,98655999,GQ
-98656000,98656255,GR
-98656256,98656511,GS
-98656512,98656767,GT
-98656768,98657023,GU
-98657024,98657279,GW
-98657280,98657535,GY
-98657536,98657791,HK
-98657792,98658047,NL
-98658048,98658303,HN
-98658304,98658559,HR
-98658560,98658815,HT
-98658816,98659071,HU
-98659072,98659327,ID
-98659328,98659583,IE
-98659584,98659839,IL
-98659840,98660095,IM
-98660096,98660351,IN
-98660352,98660607,IO
-98660608,98660863,IQ
-98660864,98661119,IR
-98661120,98661375,IS
-98661376,98661631,IT
-98661632,98661887,JE
-98661888,98662143,JM
-98662144,98662399,JO
-98662400,98662655,JP
-98662656,98662911,KE
-98662912,98663167,KG
-98663168,98663423,KI
-98663424,98663679,KM
-98663680,98663935,KN
-98663936,98664191,KP
-98664192,98664447,KR
-98664448,98664703,KW
-98664704,98664959,KY
-98664960,98665215,KZ
-98665216,98665471,LA
-98665472,98665727,LB
-98665728,98665983,LC
-98665984,98666239,LI
-98666240,98666495,LK
-98666496,98666751,LR
-98666752,98667007,LS
-98667008,98667263,LT
-98667264,98667519,LU
-98667520,98667775,LV
-98667776,98668031,LY
-98668032,98668287,MC
-98668288,98668543,MD
-98668544,98668799,ME
-98668800,98669055,MF
-98669056,98669311,MG
-98669312,98669567,MH
-98669568,98669823,MK
-98669824,98670079,ML
-98670080,98670335,MM
-98670336,98670591,MN
-98670592,98670847,MO
-98670848,98671103,MP
-98671104,98671359,MQ
-98671360,98671615,MR
-98671616,98671871,MS
-98671872,98672127,MT
-98672128,98672383,MU
-98672384,98672639,MV
-98672640,98672895,MW
-98672896,98673151,MX
-98673152,98673407,MY
-98673408,98673663,MZ
-98673664,98673919,NA
-98673920,98674175,NC
-98674176,98674431,NE
-98674432,98674687,NF
-98674688,98674943,NG
-98674944,98675199,NI
-98675200,98675455,NL
-98675456,98675711,NO
-98675712,98675967,NP
-98675968,98676223,NR
-98676224,98676479,NU
-98676480,98676735,NZ
-98676736,98676991,OM
-98676992,98677247,PA
-98677248,98677503,PE
-98677504,98677759,PF
-98677760,98678015,PG
-98678016,98678271,PH
-98678272,98678527,PK
-98678528,98678783,PL
-98678784,98679039,PM
-98679040,98679295,PN
-98679296,98679551,PR
-98679552,98679807,PS
-98679808,98680063,PT
-98680064,98680319,PW
-98680320,98680575,PY
-98680576,98680831,QA
-98680832,98681087,RE
-98681088,98681343,RO
-98681344,98681599,RS
-98681600,98681855,RU
-98681856,98682111,RW
-98682112,98682367,SA
-98682368,98682623,SB
-98682624,98682879,SC
-98682880,98683135,SD
-98683136,98683391,SE
-98683392,98683647,SG
-98683648,98683903,SH
-98683904,98684159,SI
-98684160,98684415,SJ
-98684416,98684671,SK
-98684672,98684927,SL
-98684928,98685183,SM
-98685184,98685439,SN
-98685440,98685695,SO
-98685696,98685951,SR
-98685952,98686207,SS
-98686208,98686463,ST
-98686464,98686719,SV
-98686720,98686975,SX
-98686976,98687231,SY
-98687232,98687487,SZ
-98687488,98687743,TC
-98687744,98687999,TD
-98688000,98688255,TF
-98688256,98688511,TG
-98688512,98688767,TH
-98688768,98689023,TJ
-98689024,98689279,TK
-98689280,98689535,TL
-98689536,98689791,TM
-98689792,98690047,TN
-98690048,98690303,TO
-98690304,98690559,TR
-98690560,98690815,TT
-98690816,98691071,TV
-98691072,98691327,TW
-98691328,98691583,TZ
-98691584,98691839,UA
-98691840,98692095,UG
-98692096,98692351,UM
-98692352,98692607,US
-98692608,98692863,UY
-98692864,98693119,UZ
-98693120,98693375,VA
-98693376,98693631,VC
-98693632,98693887,VE
-98693888,98694143,VG
-98694144,98694399,VI
-98694400,98694655,VN
-98694656,98694911,VU
-98694912,98695167,WF
-98695168,98695423,WS
-98695424,98695679,YE
-98695680,98695935,YT
-98695936,98696191,ZA
-98696192,98696447,ZM
-98696448,98696703,ZW
-98696704,98697215,AD
-98697216,98697471,FR
-98697472,98699263,GB
-98699264,98701311,FR
+98566144,98697215,NL
+98697216,98701311,FR
98701312,98705407,ES
98705408,98707455,SE
98707456,98709503,NL
@@ -6651,23 +1278,47 @@
98734080,98736127,CH
98736128,98738175,RU
98738176,98740223,NO
-98740224,98740479,ES
-98740480,98740735,DE
-98740736,98741247,US
-98741248,98742271,DE
+98740224,98742271,DE
98742272,98744319,GB
98744320,98746367,ES
98746368,98762751,TR
98762752,98893823,RU
98893824,98959359,TR
-98959360,99090431,DE
+98959360,99024895,DE
+99024896,99025151,GB
+99025152,99025407,IT
+99025408,99025663,NL
+99025664,99025919,DE
+99025920,99026175,SE
+99026176,99026943,DE
+99026944,99027199,GB
+99027200,99027455,CA
+99027456,99027711,PL
+99027712,99028735,DE
+99028736,99028991,EG
+99028992,99029247,GB
+99029248,99029503,DE
+99029504,99029759,TR
+99029760,99031295,DE
+99031296,99031551,GB
+99031552,99031807,DE
+99031808,99032063,FR
+99032064,99044863,DE
+99044864,99045119,GB
+99045120,99045375,NL
+99045376,99090431,DE
99090432,99614719,IR
99614720,99876863,SE
99876864,100139007,SA
100139008,100204543,UA
100204544,100237311,PT
100237312,100245503,IT
-100245504,100247551,SE
+100245504,100246015,SE
+100246016,100246271,GB
+100246272,100246527,NL
+100246528,100246783,DE
+100246784,100247039,FR
+100247040,100247551,SE
100247552,100249599,CH
100249600,100253695,SI
100253696,100261887,RU
@@ -6682,11 +1333,25 @@
100329472,100331519,RU
100331520,100335615,TR
100335616,100401151,KZ
-100401152,100532223,DE
-100532224,100564991,RO
-100564992,100573183,SE
+100532224,100559551,RO
+100559552,100559615,GB
+100559616,100559743,RO
+100559744,100559871,GB
+100559872,100559935,US
+100559936,100560127,RO
+100560128,100560383,US
+100560384,100560895,RO
+100560896,100560959,GB
+100560960,100561023,RO
+100561024,100561151,GB
+100561152,100564991,RO
+100564992,100569087,SE
+100569088,100569343,FR
+100569344,100569599,SE
+100569600,100569855,FR
+100569856,100573183,SE
100573184,100575231,GB
-100575232,100577279,SE
+100575232,100577279,DK
100577280,100579327,RU
100579328,100581375,AT
100581376,100589567,SE
@@ -6699,299 +1364,112 @@
100636672,100638719,NL
100638720,100646911,UA
100646912,100663295,RU
-100663296,121195295,US
-121195296,121195327,IT
-121195328,134693119,US
-134693120,134693375,CA
-134693376,134730239,US
-134730240,134730495,CA
-134730496,134738943,US
-134738944,134739199,CA
-134739200,134874866,US
+100663296,134874866,US
134874867,134874867,DO
-134874868,135013631,US
-135013632,135013887,US
-135013888,135192575,US
+134874868,135192575,US
135192576,135200767,MX
-135200768,135430143,US
-135430144,135430399,CA
-135430400,135432191,US
+135200768,135432191,US
135432192,135434239,CA
-135434240,135441407,US
-135441408,135441663,CA
-135441664,135603199,US
+135434240,135603199,US
135603200,135604223,CA
-135604224,135606783,US
-135606784,135607295,CA
-135607296,135790591,US
-135790592,135794687,CA
+135604224,135607039,US
+135607040,135607295,CA
+135607296,135776255,US
+135776256,135776511,GU
+135776512,135790591,US
+135790592,135790847,CA
+135790848,135791103,US
+135791104,135791615,CA
+135791616,135792639,US
+135792640,135794687,CA
135794688,136237055,US
136237056,136239103,CA
-136239104,136415487,US
-136415488,136415743,CA
-136415744,152305663,US
+136239104,136404991,US
+136404992,136407039,CA
+136407040,136413183,US
+136413184,136415231,CA
+136415232,136415665,US
+136415666,136415666,FR
+136415667,136689919,US
+136689920,136690175,CA
+136690176,139954241,US
+139954242,139954242,ES
+139954243,152305663,US
152305664,152338431,GB
152338432,167772159,US
-184549376,201859071,US
-201859072,201859087,VI
-201859088,201897983,US
+184549376,201897983,US
201897984,201898239,PR
-201898240,202385407,US
+201898240,202182143,US
+202182144,202182399,GB
+202182400,202385407,US
202385408,202385919,PR
202385920,202706431,US
202706432,202706943,PR
202706944,202935551,US
202935552,202935807,PR
-202935808,203625391,US
-203625392,203625399,PR
-203625400,203658287,US
-203658288,203658303,VI
-203658304,203658415,US
-203658416,203658423,VI
-203658424,203658463,US
-203658464,203658471,VI
-203658472,203658927,US
-203658928,203658935,VI
-203658936,203658943,US
-203658944,203658951,PR
-203658952,203658967,US
-203658968,203658991,VI
-203658992,203659007,US
+202935808,203272959,US
+203272960,203273215,GB
+203273216,203659007,US
203659008,203659263,VI
-203659264,204046335,US
-204046336,204047103,PR
-204047104,204047231,US
-204047232,204047247,VI
-204047248,204047255,US
-204047256,204047263,VI
-204047264,204047311,US
-204047312,204047335,VI
-204047336,204047439,US
-204047440,204047455,VI
-204047456,204047463,US
-204047464,204047471,VI
-204047472,204047487,US
-204047488,204047511,VI
-204047512,204047519,US
-204047520,204047535,VI
-204047536,204047543,PR
-204047544,204047551,US
-204047552,204047559,VI
-204047560,204047567,PR
-204047568,204047591,VI
-204047592,204047999,PR
+203659264,204047871,US
+204047872,204047999,PR
204048000,204048031,US
204048032,204048047,PR
-204048048,204048063,VI
-204048064,204048127,US
-204048128,204048383,PR
-204048384,205500987,US
-205500988,205500991,CA
-205500992,209783247,US
-209783248,209783255,CA
-209783256,209783679,US
-209783680,209783807,CA
-209783808,209784951,US
-209784952,209784959,CA
-209784960,209788767,US
-209788768,209788783,CA
-209788784,209789959,US
-209789960,209789967,FR
-209789968,209799007,US
-209799008,209799031,CA
-209799032,209809407,US
-209809408,209809471,CA
-209809472,209809599,US
-209809600,209809663,CA
-209809664,209831679,US
-209831680,209831711,DE
-209831712,209845143,US
-209845144,209845151,DE
-209845152,209867103,US
+204048048,209867103,US
209867104,209867111,CA
-209867112,210458623,US
-210458624,210458631,PR
-210458632,210785791,US
-210785792,210786047,BO
-210786048,211126783,US
+209867112,211126783,US
211126784,211126911,PR
211126912,211263999,US
211264000,211264255,SA
-211264256,211597055,US
-211597056,211597071,VI
-211597072,211597375,US
-211597376,211597439,VI
-211597440,211597719,US
+211264256,211597311,US
+211597312,211597567,VI
+211597568,211597719,US
211597720,211597727,VI
-211597728,211597743,PR
-211597744,211597775,US
-211597776,211597791,VI
-211597792,212122039,US
-212122040,212122047,PR
-212122048,212491249,US
-212491250,212491250,US
-212491251,212733527,US
-212733528,212733535,PR
-212733536,212787199,US
+211597728,212787199,US
212787200,212788223,PR
-212788224,212788631,US
-212788632,212788647,VI
-212788648,212788655,US
-212788656,212788663,VI
-212788664,212788863,US
+212788224,212788479,US
+212788480,212788735,VI
+212788736,212788863,US
212788864,212788991,PR
-212788992,212789063,US
-212789064,212789079,VI
-212789080,212789087,US
+212788992,212789087,US
212789088,212789095,VI
-212789096,212789143,US
-212789144,212789151,VI
-212789152,212789175,US
-212789176,212789183,VI
-212789184,212789191,PR
-212789192,212789215,US
-212789216,212789223,VI
-212789224,212791295,US
-212791296,212791447,VI
-212791448,212791455,US
-212791456,212791479,VI
-212791480,212791551,PR
-212791552,212791815,US
-212791816,212791871,VI
-212791872,212791935,US
+212789096,212791831,US
+212791832,212791839,VI
+212791840,212791935,US
212791936,212792063,VI
-212792064,212792199,US
-212792200,212792215,VI
-212792216,212792223,US
-212792224,212792231,VI
-212792232,212792271,US
-212792272,212792279,VI
-212792280,212793119,US
-212793120,212793127,VI
-212793128,212793199,US
-212793200,212793207,VI
-212793208,212793311,US
-212793312,212793327,PR
-212793328,212794575,US
+212792064,212793087,US
+212793088,212793343,PR
+212793344,212794575,US
212794576,212794583,VI
-212794584,212794783,US
-212794784,212794791,VI
-212794792,212794799,US
-212794800,212794815,VI
-212794816,212794879,US
-212794880,212794887,VI
-212794888,212794895,US
-212794896,212794911,VI
-212794912,212794943,PR
-212794944,212794999,US
-212795000,212795007,VI
-212795008,213895679,US
-213895680,213895743,VI
-213895744,214187519,US
-214187520,214187775,VI
-214187776,214187807,US
-214187808,214187815,PR
-214187816,214187903,US
-214187904,214187935,VI
-214187936,214697983,US
-214697984,214698007,VI
-214698008,214698015,PR
-214698016,214698031,US
-214698032,214698087,VI
-214698088,214698095,US
-214698096,214698103,PR
-214698104,214698111,US
-214698112,214698119,VI
-214698120,214698127,US
-214698128,214698135,VI
-214698136,214698143,PR
-214698144,214698151,VI
-214698152,214698159,US
-214698160,214698239,PR
-214698240,214698271,VI
-214698272,214698279,US
-214698280,214698287,VI
-214698288,214698303,US
+212794584,214237247,US
+214237248,214237311,PR
+214237312,214698239,US
+214698240,214698255,VI
+214698256,214698303,US
214698304,214698311,VI
-214698312,214698319,US
-214698320,214698335,PR
-214698336,214698359,US
-214698360,214698367,PR
-214698368,214698383,US
-214698384,214698639,PR
-214698640,214698655,VI
-214698656,214698911,PR
-214698912,214698927,US
-214698928,214699231,PR
-214699232,214699271,US
-214699272,214699279,VI
-214699280,214699303,US
-214699304,214699311,VI
-214699312,214699335,PR
-214699336,214699367,VI
-214699368,214699383,US
-214699384,214699391,VI
-214699392,214699415,US
-214699416,214699455,VI
-214699456,214699471,US
-214699472,214699487,VI
-214699488,214699519,US
+214698312,214699519,US
214699520,214699647,PR
214699648,214699775,VI
-214699776,214699799,US
-214699800,214699807,PR
-214699808,214699839,US
-214699840,214699847,PR
-214699848,214699879,US
-214699880,214699895,PR
-214699896,214699911,US
-214699912,214699919,VI
-214699920,214699951,US
-214699952,214699959,PR
-214699960,214699975,US
-214699976,214699991,VI
-214699992,214700015,US
-214700016,214700023,PR
-214700024,214858655,US
-214858656,214858671,NL
-214858672,215001343,US
-215001344,215001599,VI
-215001600,215002111,US
-215002112,215002127,VI
-215002128,216417663,US
+214699776,214778367,US
+214778368,214778623,PR
+214778624,216417663,US
216417664,216417727,PR
-216417728,218955263,US
-218955264,218955391,CA
-218955392,219187465,US
-219187466,219187467,EU
-219187468,219249919,US
-219249920,219250175,GB
-219250176,219512063,US
+216417728,217709055,US
+217709056,217709311,PR
+217709312,219512063,US
219512064,219512319,GB
219512320,234881023,US
234881024,234883071,CN
234883072,234884095,JP
234884096,234885119,CN
234885120,234889215,VN
-234889216,234893311,JP
-234893312,234895359,KR
-234895360,234895615,TW
-234895616,234895935,MY
-234895936,234896127,TH
-234896128,234896383,MN
-234896384,234896639,SA
-234896640,234896895,AE
-234896896,234897151,KR
-234897152,234897407,TW
-234897408,234913791,KR
+234889216,234913791,KR
234913792,234946559,HK
234946560,234947583,CN
234947584,234950655,JP
234950656,234951679,AU
234951680,234952703,HK
-234954752,234961663,NZ
-234961664,234961919,US
-234961920,234971135,NZ
+234954752,234971135,NZ
234979328,235012095,MY
235012096,235077631,AU
235077632,235143167,JP
@@ -7034,9 +1512,7 @@
247472128,247479295,JP
247479296,247480319,CN
247480320,247482367,MY
-247482368,247482879,PG
-247482880,247483135,AU
-247483136,247483391,PG
+247482368,247483391,PG
247483392,247484415,CN
247484416,247488511,KR
247488512,247496703,JP
@@ -7055,23 +1531,33 @@
248446976,248512511,TH
248512512,249561087,CN
249561088,251658239,VN
-251658240,264485119,US
-264485120,264485375,EU
-264485376,264997119,US
-264997120,264997375,EU
-264997376,265005311,US
-265005312,265005567,EU
-265005568,265025791,US
-265025792,265026047,GB
-265026048,265525503,US
-265525504,265525759,AP
-265525760,265529599,US
-265529600,265529855,AP
-265529856,265545983,US
-265545984,265546239,CN
-265546240,266059775,US
-266059776,266067967,IN
-266067968,266070271,US
+251658240,260976639,US
+260976640,260980735,GB
+260980736,264482815,US
+264482816,264485119,DE
+264485120,264485375,US
+264485376,264486911,DE
+264486912,264495103,US
+264495104,264503295,CH
+264503296,264634367,US
+264634368,264667135,DE
+264667136,264699903,US
+264699904,264716287,CH
+264716288,264798207,US
+264798208,264802303,GB
+264802304,264994815,US
+264994816,264997119,FR
+264997120,264997375,US
+264997376,265005311,FR
+265005312,265005567,US
+265005568,265011199,FR
+265011200,265023487,US
+265023488,265027583,GB
+265027584,265060351,US
+265060352,265093119,FR
+265093120,266062079,US
+266062080,266062335,IN
+266062336,266070271,US
266070272,266070527,AU
266070528,266578175,US
266578176,266578431,CA
@@ -7079,22 +1565,78 @@
266586368,266586623,CA
266586624,266598655,US
266598656,266598911,BR
-266598912,288195071,US
-288195072,288198655,CA
-288198656,289011535,US
-289011536,289011543,IT
-289011544,289406975,US
+266598912,288130047,US
+288130048,288131071,CA
+288131072,288167423,US
+288167424,288167935,CA
+288167936,288169471,US
+288169472,288169983,CA
+288169984,288176127,US
+288176128,288178175,MX
+288178176,288196607,US
+288196608,288197119,CA
+288197120,288197631,US
+288197632,288198143,CA
+288198144,288198655,CL
+288198656,288212991,US
+288212992,288215039,CA
+288215040,288223231,US
+288223232,288227327,CA
+288227328,289406975,US
289406976,289603583,IE
289603584,289628415,GB
289628416,289628671,US
-289628672,289669119,GB
+289628672,289652735,GB
+289652736,289653759,NL
+289653760,289657855,GB
+289657856,289658879,AE
+289658880,289669119,GB
289669120,289734655,FR
289734656,289746943,GB
289746944,289748991,US
289748992,289752063,ES
289752064,289760255,US
289760256,289763327,DE
-289763328,290264063,US
+289763328,289948927,US
+289948928,289949055,AT
+289949056,289949695,US
+289949696,289950207,NL
+289950208,289950463,PL
+289950464,289950719,PT
+289950720,289950975,CZ
+289950976,289951231,US
+289951232,289951487,RU
+289951488,289951743,US
+289951744,289952255,DK
+289952256,289952767,US
+289952768,289953791,GB
+289953792,289954303,US
+289954304,289954559,ES
+289954560,289955839,US
+289955840,289955967,FI
+289955968,289956095,US
+289956096,289956223,NO
+289956224,289956351,US
+289956352,289956479,DK
+289956480,289956607,US
+289956608,289956735,NL
+289956736,289956863,IN
+289956864,289957119,ES
+289957120,289957375,US
+289957376,289957631,SE
+289957632,289957887,US
+289957888,289958143,LU
+289958144,289958399,US
+289958400,289958655,IN
+289958656,289958911,US
+289958912,289959423,IT
+289959424,289959935,DK
+289959936,289960447,DE
+289960448,289960959,US
+289960960,289961471,BY
+289961472,289963007,US
+289963008,289964031,FR
+289964032,290264063,US
290264064,290264575,AT
290264576,290267135,US
290267136,290269183,NL
@@ -7126,7 +1668,8 @@
290302464,290302975,US
290302976,290303999,IN
290304000,290305023,IT
-290305024,290308095,US
+290305024,290306047,US
+290306048,290308095,DK
290308096,290310143,DE
290310144,290312191,US
290312192,290314239,BE
@@ -7138,35 +1681,24 @@
290423808,290424831,SE
290424832,290513663,US
290513664,290513919,MY
-290513920,323243895,US
-323243896,323243903,FR
-323243904,332132119,US
-332132120,332132127,IL
-332132128,344260607,US
-344260608,344261119,GB
-344261120,344261778,US
-344261779,344261779,EU
-344261780,344262655,US
+290513920,344260607,US
+344260608,344260863,GB
+344260864,344262655,US
344262656,344262911,GB
-344262912,344268817,US
-344268818,344268818,EU
-344268819,344270860,US
-344270861,344270861,GB
-344270862,344588543,US
+344262912,344588543,US
344588544,344589055,GB
344589056,344592895,US
344592896,344592945,GB
-344592946,344592946,EU
+344592946,344592946,US
344592947,344593151,GB
344593152,344593638,US
344593639,344593639,SE
-344593640,344645631,US
-344645632,344653823,GB
+344593640,344651263,US
+344651264,344651519,GB
+344651520,344653823,US
344653824,344659519,AU
344659520,344659520,SG
-344659521,344662591,AU
-344662592,344662592,MY
-344662593,344662783,AU
+344659521,344662783,AU
344662784,344663039,MY
344663040,344670719,AU
344670720,344671231,IN
@@ -7175,41 +1707,342 @@
344675072,344675121,AU
344675122,344676145,IN
344676146,344719359,AU
-344719360,344880127,US
-344880128,344880383,EU
-344880384,344881151,US
+344719360,344881151,US
344881152,344881407,IN
344881408,344977407,US
344977408,344977663,IN
-344977664,355993887,US
-355993888,355993895,IT
-355993896,368674047,US
-368674048,368674303,ES
-368674304,386862079,US
+344977664,386035711,US
+386035712,386039807,NL
+386039808,386060287,US
+386060288,386068479,NL
+386068480,386109439,US
+386109440,386113535,NL
+386113536,386125823,US
+386125824,386134015,NL
+386134016,386519039,US
+386519040,386523135,NL
+386523136,386613247,US
+386613248,386617343,NL
+386617344,386662399,US
+386662400,386670591,NL
+386670592,386736127,US
+386736128,386740223,NL
+386740224,386842623,US
+386842624,386854911,NL
+386854912,386862079,US
386862080,386862335,JP
-386862336,386924543,US
+386862336,386875391,US
+386875392,386879487,NL
+386879488,386887679,US
+386887680,386891775,NL
+386891776,386924543,US
386924544,387055615,CA
387055616,387121151,PR
-387121152,387132143,US
-387132144,387132151,CA
-387132152,387139327,US
-387139328,387139583,CA
-387139584,387151903,US
-387151904,387151911,CA
-387151912,387164415,US
-387164416,387164671,CA
-387164672,387802879,US
+387121152,387802879,US
387802880,387803135,PR
-387803136,387804671,US
-387804672,387804927,TW
-387804928,387825663,US
+387803136,387825663,US
387825664,387833855,CA
-387833856,391118847,US
-402653184,405012479,US
+387833856,387985407,US
+387985408,387993599,NL
+387993600,387997695,US
+387997696,388001791,NL
+388001792,388038655,US
+388038656,388042751,NL
+388042752,388055039,US
+388055040,388059135,NL
+388059136,388091903,US
+388091904,388100095,NL
+388100096,388149247,US
+388149248,388153343,NL
+388153344,388198399,US
+388198400,388202495,NL
+388202496,388222975,US
+388222976,388227071,NL
+388227072,388235263,US
+388235264,388239359,NL
+388239360,388251647,US
+388251648,388255743,NL
+388255744,388272127,US
+388272128,388284415,NL
+388284416,388288511,US
+388288512,388300799,NL
+388300800,388308991,US
+388308992,388317183,NL
+388317184,388325375,US
+388325376,388329471,NL
+388329472,388341759,US
+388341760,388345855,NL
+388345856,388354047,US
+388354048,388358143,NL
+388358144,388362239,US
+388362240,388390911,NL
+388390912,388440063,US
+388440064,388444159,NL
+388444160,388472831,US
+388472832,388476927,NL
+388476928,388513791,US
+388513792,388517887,NL
+388517888,388526079,US
+388526080,388530175,NL
+388530176,388538367,US
+388538368,388542463,NL
+388542464,388567039,US
+388567040,388571135,NL
+388571136,388632575,US
+388632576,388636671,NL
+388636672,388677631,US
+388677632,388681727,NL
+388681728,388698111,US
+388698112,388702207,NL
+388702208,388710399,US
+388710400,388730879,NL
+388730880,388812799,US
+388812800,388816895,NL
+388816896,388849663,US
+388849664,388853759,NL
+388853760,388857855,US
+388857856,388861951,NL
+388861952,388866047,US
+388866048,388878335,NL
+388878336,388919295,US
+388919296,388923391,NL
+388923392,389066751,US
+389066752,389074943,NL
+389074944,389079039,US
+389079040,389083135,NL
+389083136,389136383,US
+389136384,389140479,NL
+389140480,389177343,US
+389177344,389181439,NL
+389181440,389185535,US
+389185536,389201919,NL
+389201920,389206015,US
+389206016,389210111,NL
+389210112,389234687,US
+389234688,389238783,NL
+389238784,389242879,US
+389242880,389251071,NL
+389251072,389259263,US
+389259264,389292031,NL
+389292032,389296127,US
+389296128,389300223,NL
+389300224,389328895,US
+389328896,389365759,NL
+389365760,389390335,US
+389390336,389398527,NL
+389398528,389402623,US
+389402624,389427199,NL
+389427200,389431295,US
+389431296,389451775,NL
+389451776,389480447,US
+389480448,389484543,NL
+389484544,389509119,US
+389509120,389513215,NL
+389513216,389515263,US
+389515264,389521407,NL
+389521408,389537791,US
+389537792,389541887,NL
+389541888,389607423,US
+389607424,389611519,NL
+389611520,389619711,US
+389619712,389627903,NL
+389627904,389631999,US
+389632000,389640191,NL
+389640192,389730303,US
+389730304,389734399,NL
+389734400,389754879,US
+389754880,389763071,NL
+389763072,389767167,US
+389767168,389775359,NL
+389775360,389812223,US
+389812224,389824511,NL
+389824512,389926911,US
+389926912,389935103,NL
+389935104,389967871,US
+389967872,389976063,NL
+389976064,389988351,US
+389988352,389992447,NL
+389992448,390021119,US
+390021120,390029311,NL
+390029312,390033407,US
+390033408,390041599,NL
+390041600,390123519,US
+390123520,390131711,NL
+390131712,390143999,US
+390144000,390148095,NL
+390148096,390184959,US
+390184960,390193151,NL
+390193152,390205439,US
+390205440,390209535,NL
+390209536,390262783,US
+390262784,390270975,NL
+390270976,390287359,US
+390287360,390295551,NL
+390295552,390299647,US
+390299648,390303743,NL
+390303744,390733823,US
+390733824,390737919,NL
+390737920,390746111,US
+390746112,390758399,NL
+390758400,390770687,US
+390770688,390778879,NL
+390778880,390946815,US
+390946816,390955007,NL
+390955008,390995967,US
+390995968,391020543,NL
+391020544,391081983,US
+391081984,391086079,NL
+391086080,391110655,US
+391110656,391110911,IL
+391110912,391111167,GB
+391111168,391111679,NL
+391111680,391111935,US
+391111936,391113471,NL
+391113472,391113983,US
+391113984,391114751,NL
+391114752,391872511,US
+391872512,391888895,CA
+391888896,391897087,US
+391897088,391905279,CA
+391905280,391938047,US
+391938048,391946239,CA
+391946240,392765439,US
+392765440,392765695,GB
+392765696,394264575,US
+398458880,398635007,US
+398635008,398643199,NL
+398643200,398647295,US
+398647296,398655487,NL
+398655488,398659583,US
+398659584,398675967,NL
+398675968,398684159,US
+398684160,398692351,NL
+398692352,398782463,US
+398782464,398790655,NL
+398790656,398856191,US
+398856192,398876671,NL
+398876672,398970879,US
+398970880,398974975,NL
+398974976,399007743,US
+399007744,399011839,NL
+399011840,399020031,US
+399020032,399028223,NL
+399028224,399097855,US
+399097856,399106047,NL
+399106048,399147007,US
+399147008,399155199,NL
+399155200,399331327,US
+399331328,399339519,NL
+399339520,399368191,US
+399368192,399376383,NL
+399376384,399380479,US
+399380480,399405055,NL
+399405056,399458303,US
+399458304,399466495,NL
+399466496,399601663,US
+399601664,399618047,NL
+399618048,399630335,US
+399630336,399638527,NL
+399638528,399818751,US
+399818752,399831039,NL
+399831040,399908863,US
+399908864,399917055,NL
+399917056,399921151,US
+399921152,399929343,NL
+399929344,399933439,US
+399933440,399958015,NL
+399958016,399970303,US
+399970304,399978495,NL
+399978496,399990783,US
+399990784,399998975,NL
+399998976,400154623,US
+400154624,400162815,NL
+400162816,400232447,US
+400232448,400248831,NL
+400248832,400252927,US
+400252928,400269311,NL
+400269312,400273407,US
+400273408,400281599,NL
+400281600,400293887,US
+400293888,400302079,NL
+400302080,400412671,US
+400412672,400429055,NL
+400429056,400433151,US
+400433152,400441343,NL
+400441344,400490495,US
+400490496,400556031,NL
+400556032,400760831,US
+400760832,400769023,CA
+400769024,400805887,US
+400805888,400809983,CA
+400809984,400884479,US
+400884480,400884735,TR
+400884736,400884991,GB
+400884992,400887551,US
+400887552,400887807,GB
+400887808,400888575,US
+400888576,400888831,GB
+400888832,400911103,US
+400911104,400911359,PA
+400911360,400911615,AU
+400911616,400911871,CR
+400911872,400912127,US
+400912128,400912383,SG
+400912384,401130495,US
+401130496,401130751,DE
+401130752,401145855,US
+401145856,401211391,CA
+401211392,401293311,US
+401293312,401297407,CA
+401297408,401342463,US
+401342464,401346559,BB
+401346560,401378303,US
+401378304,401378559,EG
+401378560,401386495,US
+401386496,401387007,SE
+401387008,401387263,RU
+401387264,401547263,US
+401547264,401555455,CA
+401555456,402096639,US
+402096640,402096895,FR
+402096896,402105087,US
+402105088,402105343,GB
+402105344,402107391,US
+402107392,402107647,IT
+402107648,402122751,US
+402122752,402123007,SE
+402123008,402124287,US
+402124288,402124543,TR
+402124544,402128895,US
+402128896,402169855,CA
+402169856,402223103,US
+402223104,402227199,CA
+402227200,402231295,PR
+402231296,402239301,US
+402239302,402239302,CA
+402239303,402239473,US
+402239474,402239474,CA
+402239475,402243583,US
+402243584,402247679,CA
+402247680,402263807,US
+402263808,402264063,CA
+402264064,402279935,US
+402279936,402280191,CA
+402280192,402366463,US
+402366464,402374655,CA
+402374656,402399231,US
+402399232,402403327,CA
+402403328,402415615,US
+402415616,402417663,CA
+402417664,402550015,US
+402550016,402550271,CA
+402550272,402550783,GB
+402550784,405012479,US
405012480,405143551,CA
405143552,405180415,US
405180416,405184511,CA
-405184512,405372927,US
+405184512,405364735,US
+405364736,405372927,CA
405372928,405422079,PR
405422080,405798911,US
405798912,405831679,CA
@@ -7219,12 +2052,15 @@
405864448,405921791,US
405921792,405929983,CA
405929984,405938175,US
-405946368,405962751,CA
+405938176,405962751,CA
405962752,405970943,US
+405970944,405979135,CA
405979136,405995519,PR
+405995520,406003711,CA
406003712,406011903,US
406011904,406028287,BS
-406028288,406110207,US
+406028288,406052863,US
+406061056,406110207,US
406110208,406142975,CA
406142976,406147071,US
406147072,406151167,CA
@@ -7232,16 +2068,22 @@
406183936,406208511,CA
406216704,406241279,US
406241280,406257663,PR
+406257664,406274047,US
406274048,406290431,PR
406290432,406298623,US
406298624,406306815,PR
406306816,406323199,CA
406323200,406388735,US
406388736,406454271,CA
-406454272,406847487,US
+406454272,406683647,US
+406683648,406683775,CA
+406683776,406683903,US
+406683904,406684159,CA
+406684160,406838783,US
+406838784,406839295,CA
+406839296,406847487,US
406847488,407408639,CA
-407408640,407605247,US
-407609344,407613439,US
+407408640,407613439,US
407613440,407617535,CA
407617536,407633919,US
407633920,408420351,CA
@@ -7255,77 +2097,40 @@
409255936,409272319,CA
409272320,409337855,US
409337856,409354239,CA
-409370624,409731071,US
+409354240,409509887,US
+409518080,409550847,US
+409567232,409731071,US
409731072,409862143,CA
409862144,410124287,US
-410124288,410174239,CA
-410174240,410174247,US
-410174248,410174779,CA
-410174780,410174783,US
-410174784,410174835,CA
-410174836,410174839,US
-410174840,410174843,CA
-410174844,410174847,US
-410174848,410177735,CA
-410177736,410177743,US
-410177744,410180643,CA
-410180644,410180647,US
-410180648,410180695,CA
-410180696,410180703,US
-410180704,410180711,CA
-410180712,410180715,US
-410180716,410180759,CA
-410180760,410180763,US
-410180764,410180771,CA
-410180772,410180775,US
-410180776,410186719,CA
-410186720,410186723,US
-410186724,410187015,CA
-410187016,410187023,US
-410187024,410187175,CA
-410187176,410187183,US
-410187184,410187451,CA
-410187452,410187455,US
-410187456,410187703,CA
-410187704,410187707,US
-410187708,410189823,CA
+410124288,410189823,CA
410189824,410648575,US
410648576,410714111,CA
-410714112,411164671,US
+410714112,411156479,US
411164672,411168767,CA
-411172864,411303935,US
+411168768,411303935,US
411303936,411369471,NL
411369472,411435007,TR
411435008,411500543,DE
411500544,411566079,RS
411566080,411639807,US
-411639808,411643903,CA
-411648000,411664383,CA
+411639808,411664383,CA
411664384,411680767,US
-411680768,411682391,CA
-411682392,411682399,US
-411682400,411683863,CA
-411683864,411683871,US
-411683872,411684599,CA
-411684600,411684607,US
-411684608,411688831,CA
-411688832,411688863,US
-411688864,411688959,CA
+411680768,411688959,CA
411688960,411697151,PR
411697152,411746303,CA
411746304,411762687,PR
411762688,411770879,CA
411770880,411779071,US
411779072,411828223,PR
-411828224,411893759,US
+411828224,411885567,US
411893760,411975679,CA
411975680,411979775,US
411979776,411983871,CA
-411983872,411988735,US
-411988736,411988991,EU
+411983872,411988991,US
411988992,411989247,GB
-411989248,412221439,US
-412221440,412229631,CA
+411989248,412057599,US
+412073984,412221439,US
+412221440,412237823,CA
412254208,412483583,US
412483584,412549119,CA
412549120,412614655,US
@@ -7338,14 +2143,13 @@
412942336,412946431,US
412946432,412950527,PR
412950528,412958719,US
-412975104,413007871,CA
+412958720,413007871,CA
413007872,413908991,US
413908992,413925375,PR
413925376,415760383,US
415760384,416022527,CA
416022528,416059391,US
-416059392,416063487,CA
-416071680,416088063,CA
+416059392,416088063,CA
416088064,416153599,US
416153600,416161791,BS
416161792,416219135,US
@@ -7363,12 +2167,16 @@
417398784,417431551,US
417431552,417529855,CA
417529856,417538047,PR
-417538048,417775615,US
+417538048,417726463,US
+417726464,417734655,JP
+417734656,417775615,US
417775616,417796095,CA
417796096,417800191,US
417800192,417808383,BS
417808384,417820671,CA
-417820672,417857535,US
+417820672,417832191,US
+417832192,417832447,VI
+417832448,417857535,US
417857536,417923071,AR
417923072,418062335,US
418062336,418070527,CA
@@ -7380,9 +2188,7 @@
418643968,418668543,CA
418668544,418672639,US
418672640,418676735,CA
-418676736,418687743,BS
-418687744,418687998,DM
-418687999,418693119,BS
+418676736,418693119,BS
418693120,418709503,CA
418709504,418766847,US
418766848,418770943,CA
@@ -7393,12 +2199,9 @@
436207616,452984831,US
452984832,452985855,JP
452985856,452986879,MY
-452986880,452987391,SG
-452987392,452987647,BD
-452987648,452987903,SG
+452986880,452987903,SG
452987904,452988927,VN
-452988928,452993023,US
-452993024,452997119,JP
+452988928,452997119,JP
452997120,453001215,IN
453001216,453009407,AU
453009408,453017599,BD
@@ -7460,11 +2263,9 @@
459472896,459505663,AU
459505664,459538431,CN
459538432,459539455,AU
-459539456,459540479,TH
459540480,459541503,JP
459541504,459542527,IN
459542528,459544575,HK
-459544576,459545599,AU
459545600,459547647,JP
459548672,459550719,TH
459550720,459554815,JP
@@ -7499,7 +2300,10 @@
460226560,460259327,PH
460259328,460261375,AU
460261376,460262399,KH
-460262400,460263423,NZ
+460262400,460262655,US
+460262656,460262911,AU
+460262912,460263167,NZ
+460263168,460263423,GB
460263424,460267519,NP
460267520,460275711,ID
460275712,460277759,AU
@@ -7507,9 +2311,7 @@
460279808,460283903,AU
460283904,460292095,KR
460292096,460300287,JP
-460300288,460300799,HK
-460300800,460300927,JP
-460300928,460312575,HK
+460300288,460312575,HK
460312576,460320767,SG
460320768,460324863,AU
460324864,460341247,CN
@@ -7534,7 +2336,7 @@
460587008,460591103,JP
460591104,460593151,IN
460593152,460595199,JP
-460595200,460595711,IN
+460595200,460595711,SG
460595712,460596223,JP
460596224,460597247,AU
460598272,460599295,CN
@@ -7550,7 +2352,8 @@
460931072,460933119,AU
460933120,460935167,CN
460935168,460937215,ID
-460937216,460938239,AU
+460937216,460937727,NZ
+460937728,460938239,AU
460938240,460939263,JP
460939264,460940287,NZ
460940288,460941311,IN
@@ -7577,7 +2380,9 @@
461051904,461053951,AU
461053952,461062143,HK
461062144,461078527,IN
-461078528,461094911,FJ
+461078528,461078783,FJ
+461078784,461079039,AU
+461079040,461094911,FJ
461094912,461096959,HK
461096960,461099007,TW
461099008,461100031,JP
@@ -7661,7 +2466,8 @@
520325120,520327167,FR
520327168,520329215,DE
520329216,520330239,SE
-520330240,520331263,NL
+520330240,520330751,NL
+520330752,520331263,SE
520331264,520339455,IT
520339456,520343551,UA
520343552,520355839,GB
@@ -7669,24 +2475,38 @@
520421376,520486911,AT
520486912,520488959,NL
520488960,520489983,IT
-520489984,520491007,RU
-520491008,520493567,GB
-520493568,520494079,GB
+520489984,520490495,RU
+520490496,520490751,RO
+520490752,520491007,RU
+520491008,520491263,GB
+520491264,520491391,IS
+520491392,520491647,IT
+520491648,520491775,IS
+520491776,520492031,IE
+520492032,520493055,GB
+520493056,520494079,IT
520494080,520494335,FR
-520494336,520494591,TR
-520494592,520495103,CH
-520495104,520496383,DE
-520496384,520496895,TR
+520494336,520494591,IT
+520494592,520494847,CH
+520494848,520495103,DK
+520495104,520495871,IT
+520495872,520496383,DE
+520496384,520496895,IT
520496896,520497151,ES
520497152,520497407,FR
-520497408,520497663,ES
-520497664,520498175,FR
-520498176,520498687,CH
-520498688,520499711,FR
-520499712,520501247,DE
-520501248,520501503,IL
-520501504,520501759,AE
-520501760,520503295,GB
+520497408,520497919,IT
+520497920,520498175,FR
+520498176,520498431,CH
+520498432,520498687,SE
+520498688,520498943,IT
+520498944,520499199,FR
+520499200,520500223,IT
+520500224,520500479,LU
+520500480,520500735,DE
+520500736,520501759,IT
+520501760,520502271,GB
+520502272,520502783,IT
+520502784,520503295,GB
520503296,520505343,PL
520505344,520507391,GB
520507392,520511487,TR
@@ -7698,22 +2518,12 @@
520560640,520562687,TR
520562688,520564735,PL
520564736,520566783,IE
-520566784,520567039,CH
-520567040,520567295,CH
-520567296,520568831,CH
+520566784,520568831,CH
520568832,520589311,IR
520589312,520593407,IT
520593408,520595455,AM
520595456,520597503,MK
-520597504,520597567,DE
-520597568,520597599,IT
-520597600,520597631,HK
-520597632,520597663,IT
-520597664,520598047,DE
-520598048,520598079,FR
-520598080,520599935,DE
-520599936,520600063,US
-520600064,520601599,DE
+520597504,520601599,DE
520601600,520609791,SI
520609792,520613887,RU
520613888,520615935,CZ
@@ -7726,9 +2536,7 @@
520761344,520763391,IT
520763392,520765439,CZ
520765440,520781823,RU
-520781824,520822271,CH
-520822272,520822527,DE
-520822528,520822783,CH
+520781824,520822783,CH
520822784,520824831,IT
520824832,520826879,RO
520826880,520828927,QA
@@ -7739,14 +2547,8 @@
520882176,520884223,IT
520884224,520888319,MK
520888320,520896511,DE
-520896512,520897023,BE
-520897024,520897151,LU
-520897152,520897791,BE
-520897792,520897919,LU
-520897920,520898559,BE
-520898560,520902655,GB
-520902656,520902784,NL
-520902785,520912895,GB
+520896512,520898559,BE
+520898560,520912895,GB
520912896,520945663,UA
520945664,520947711,GB
520947712,520949759,SE
@@ -7757,17 +2559,14 @@
520978432,520980479,RU
520980480,520982527,IT
520982528,520984575,RU
-520984576,520984831,NG
-520984832,520986623,GB
+520984576,520986623,GB
520986624,520988671,PS
520988672,520990719,DE
520990720,520992767,RU
-520994816,521001567,BG
-521001568,521001575,RO
-521001576,521011199,BG
-521011200,521019647,RO
-521019648,521019903,CH
-521019904,521057279,RO
+520994816,521011199,BG
+521011200,521020415,RO
+521020416,521021439,MD
+521021440,521057279,RO
521057280,521058303,MD
521058304,521076735,RO
521076736,521078783,ES
@@ -7796,14 +2595,11 @@
521555968,521558015,NL
521558016,521560063,CY
521560064,521562111,PL
-521562112,521562911,DE
-521562912,521564159,GB
-521564160,521564415,GR
-521564416,521564671,AU
-521564672,521564927,JO
-521564928,521565183,GR
-521565184,521565695,GB
-521565696,521566207,AU
+521562112,521564159,GB
+521564160,521565183,GR
+521565184,521565439,GB
+521565440,521565695,US
+521565696,521566207,GR
521566208,521568255,LU
521568256,521601023,PT
521601024,521666559,RU
@@ -7848,9 +2644,7 @@
521746432,521748479,NL
521748480,521750527,SE
521750528,521752575,PS
-521752576,521754367,FR
-521754368,521754383,US
-521754384,521754623,FR
+521752576,521754623,FR
521754624,521756671,IR
521756672,521758719,NL
521758720,521760767,IR
@@ -7877,8 +2671,13 @@
521953280,521961471,RU
521961472,521969663,CZ
521969664,521977855,UA
-521977856,521986047,RU
-521986048,521994239,UA
+521977856,521986303,RU
+521986304,521986559,UA
+521986560,521989631,RU
+521989632,521989887,UA
+521989888,521991679,RU
+521991680,521991935,UA
+521991936,521994239,RU
521994240,522002431,KG
522002432,522010623,IR
522010624,522018815,AE
@@ -7886,9 +2685,7 @@
522027008,522059775,RU
522059776,522125311,CZ
522125312,522133503,MD
-522133504,522134783,NL
-522134784,522134911,US
-522134912,522135551,NL
+522133504,522135551,NL
522135552,522137599,IT
522137600,522141695,CH
522141696,522143743,RU
@@ -7911,7 +2708,7 @@
522721280,522741759,RU
522741760,522743807,UA
522743808,522747903,RU
-522747904,522780671,UA
+522747904,522764287,UA
522780672,522782719,RU
522782720,522784767,UA
522784768,522786815,BG
@@ -7962,46 +2759,24 @@
523018240,523022335,IT
523022336,523024895,RU
523024896,523025407,DE
-523025408,523025663,UA
+523025408,523025663,NL
523025664,523025919,CH
-523025920,523026431,NL
+523025920,523026431,RU
523026432,523030527,TR
523030528,523034623,FR
523034624,523038719,SE
523038720,523042815,RU
523042816,523075583,NO
523075584,523108351,HR
-523108352,523113215,HU
-523113216,523113471,RO
-523113472,523113983,HU
-523113984,523114239,RO
-523114240,523115775,HU
-523115776,523116287,RO
-523116288,523173887,HU
+523108352,523119615,HU
+523119616,523120639,RO
+523120640,523173887,HU
523173888,523182079,BA
523182080,523190271,IR
523190272,523192319,FI
523192320,523194367,ES
523194368,523196415,DE
-523196416,523196447,AE
-523196448,523196463,BH
-523196464,523196479,AE
-523196480,523196551,BH
-523196552,523196671,AE
-523196672,523196703,BH
-523196704,523196927,AE
-523196928,523197183,BH
-523197184,523197311,AE
-523197312,523197695,BH
-523197696,523198207,AE
-523198208,523198247,BH
-523198248,523198255,AE
-523198256,523198263,BH
-523198264,523198271,AE
-523198272,523198279,BH
-523198280,523198287,AE
-523198288,523198295,BH
-523198296,523198463,AE
+523196416,523198463,AE
523198464,523202559,CZ
523202560,523223039,RU
523223040,523225087,AM
@@ -8037,17 +2812,19 @@
528666624,528668671,RU
528668672,528670719,PL
528670720,528674815,CH
-528674816,528676863,RO
+528674816,528676863,GB
528676864,528678911,RU
528678912,528680959,MD
528680960,528683007,RO
-528683008,528685823,UA
+528683008,528684031,UA
+528684032,528684543,NL
+528684544,528685823,UA
528685824,528687103,US
528687104,528689151,UA
528689152,528691199,RO
528691200,528695295,PL
-528695296,528699391,UA
-528699392,528703487,RU
+528695296,528695551,UA
+528695552,528703487,RU
528703488,528715775,UA
528715776,528719871,RU
528719872,528721919,RO
@@ -8055,8 +2832,7 @@
528723968,528726015,ES
528726016,528736255,RU
528736256,528740351,SK
-528740352,528742143,IT
-528742144,528742399,US
+528740352,528742399,IT
528742400,528744447,RU
528744448,528746495,GB
528748544,528752639,CZ
@@ -8107,29 +2883,30 @@
529596416,529661951,TR
529661952,529727487,GE
529727488,529793023,HR
-529793024,529827839,RU
+529793024,529819647,CZ
+529819648,529826303,RU
+529826304,529826815,CZ
+529826816,529827839,RU
529827840,529828863,CZ
-529828864,529829887,RU
-529829888,529831935,CZ
-529831936,529835007,RU
+529828864,529835007,RU
529835008,529836031,KG
-529836032,529836543,UA
-529836544,529837055,IL
+529836032,529837055,CZ
529837056,529839103,RU
-529839104,529839615,UA
-529839616,529840127,CY
+529839104,529840127,CZ
529840128,529841151,RU
529841152,529842175,UA
529842176,529843199,IN
-529843200,529844735,RU
-529844736,529845247,UA
+529843200,529844223,RU
+529844224,529845247,CZ
529845248,529846271,UZ
-529846272,529848319,RU
-529848320,529848575,KZ
-529848576,529848831,UA
-529848832,529849087,GB
+529846272,529847295,CZ
+529847296,529848319,RU
+529848320,529848575,NL
+529848576,529848831,CZ
+529848832,529849087,UA
529849088,529849599,NL
-529849600,529850367,RU
+529849600,529850111,CZ
+529850112,529850367,RU
529850368,529853439,CZ
529853440,529856511,RU
529856512,529857535,KZ
@@ -8138,9 +2915,11 @@
529924096,529989631,DE
529989632,530055167,NL
530055168,530120703,GR
-530120704,530165759,CY
-530165760,530174207,GR
-530174208,530186239,CY
+530120704,530153471,CY
+530153472,530173951,GR
+530173952,530174207,CY
+530174208,530180095,GR
+530180096,530186239,CY
530186240,530251775,IL
530251776,530317311,TR
530317312,530579455,IT
@@ -8163,8 +2942,7 @@
531234816,531236863,IE
531236864,531238911,FR
531238912,531240959,LV
-531240960,531242751,SE
-531242752,531243007,DE
+531240960,531243007,SE
531243008,531245055,RU
531245056,531247103,IT
531247104,531251199,IR
@@ -8180,88 +2958,72 @@
531281920,531283967,RU
531283968,531292159,DE
531292160,531333119,AZ
-531333120,531333599,NL
-531333600,531333631,RU
-531333632,531334143,NL
-531334144,531334271,US
-531334272,531334399,NL
-531334400,531334463,US
-531334464,531334527,NL
-531334528,531334655,US
-531334656,531335167,NL
+531333120,531334655,NL
+531334656,531335167,US
531335168,531337215,IT
531337216,531339263,CH
531339264,531341311,AL
-531341312,531349503,MD
+531341312,531349503,KZ
531349504,531351551,RU
531351552,531355647,NL
531355648,531357695,IR
531357696,531361791,HU
-531361792,531365887,CH
-531365888,531366399,DE
-531366400,531367935,CH
+531361792,531367935,CH
531367936,531369983,DE
-531369984,531371007,CH
-531371008,531371519,US
-531371520,531372031,JP
+531369984,531372031,CH
531372032,531372287,DE
531372288,531372543,CH
531372544,531372799,DE
-531372800,531373567,CH
-531373568,531373575,DE
-531373576,531380223,CH
-531380224,531398655,DE
+531372800,531380223,CH
+531380224,531390463,DE
+531390464,531394559,CH
+531394560,531398655,DE
531398656,531400703,RU
531400704,531402751,UA
531402752,531404799,LU
531404800,531406847,FI
531406848,531408895,FR
-531408896,531415039,PL
+531410944,531415039,PL
531415040,531423231,RU
-531423232,531423487,GB
-531423488,531425279,NO
+531423232,531425279,NO
531425280,531427327,FR
-531427328,531428351,GB
+531427328,531427703,GB
+531427704,531427711,IT
+531427712,531427951,GB
+531427952,531427959,IT
+531427960,531428263,GB
+531428264,531428271,IT
+531428272,531428351,GB
531428352,531428359,IT
-531428360,531428375,GB
-531428376,531428383,IT
-531428384,531428495,GB
+531428360,531428495,GB
531428496,531428503,IT
-531428504,531428583,GB
-531428584,531428591,IT
-531428592,531428975,GB
-531428976,531428983,IT
-531428984,531429023,GB
-531429024,531429031,IT
-531429032,531429135,GB
+531428504,531429095,GB
+531429096,531429103,IT
+531429104,531429135,GB
531429136,531429143,IT
-531429144,531429239,GB
+531429144,531429167,GB
+531429168,531429175,IT
+531429176,531429239,GB
531429240,531429247,IT
-531429248,531429271,GB
-531429272,531429279,IT
-531429280,531429407,GB
+531429248,531429335,GB
+531429336,531429343,IT
+531429344,531429391,GB
+531429392,531429399,IT
+531429400,531429407,GB
531429408,531429415,IT
-531429416,531429487,GB
-531429488,531429495,IT
-531429496,531429671,GB
-531429672,531429679,IT
-531429680,531429879,GB
-531429880,531429887,IT
-531429888,531430319,GB
+531429416,531429599,GB
+531429600,531429607,IT
+531429608,531430319,GB
531430320,531430327,IT
-531430328,531430391,GB
-531430392,531430399,IT
-531430400,531430559,GB
-531430560,531430567,IT
-531430568,531430663,GB
-531430664,531430671,IT
-531430672,531430823,GB
+531430328,531430823,GB
531430824,531430831,IT
531430832,531430847,GB
531430848,531430855,IT
531430856,531430927,GB
531430928,531430935,IT
-531430936,531431423,GB
+531430936,531431031,GB
+531431032,531431039,IT
+531431040,531431423,GB
531431424,531496959,RO
531496960,531628031,PL
531628032,531660799,TR
@@ -8287,14 +3049,13 @@
532152320,532168703,DE
532168704,532185087,NL
532185088,532201471,IR
-532201472,532211711,RU
+532201472,532209663,RU
+532209664,532210687,DE
+532210688,532211711,RU
532211712,532212223,LU
-532212224,532212479,RU
-532212480,532212735,UA
-532212736,532212991,LV
-532212992,532214783,RU
-532214784,532215295,AE
-532215296,532221951,RU
+532212224,532213759,RU
+532213760,532214015,GB
+532214016,532221951,RU
532221952,532223999,IT
532224000,532226047,NO
532226048,532234239,GB
@@ -8312,64 +3073,50 @@
532305920,532307967,NO
532307968,532310015,RU
532310016,532312063,GR
-532312064,532312831,JE
-532312832,532312944,GB
-532312945,532312959,JE
-532312960,532313060,GB
-532313061,532313063,JE
-532313064,532313087,GB
-532313088,532314111,JE
+532312064,532312983,JE
+532312984,532312991,GB
+532312992,532314111,JE
532314112,532316159,DE
532316160,532324351,RU
532324352,532328447,NL
532328448,532330495,PS
532330496,532332543,CZ
532332544,532340735,PL
-532340736,532341759,US
-532341760,532342783,GB
-532342784,532343039,US
-532343040,532343359,GB
-532343360,532343487,US
-532343488,532343935,GB
-532343936,532343967,US
-532343968,532344063,GB
-532344064,532344575,US
-532344576,532346879,GB
-532346880,532347135,US
-532347136,532347903,GB
-532347904,532348159,US
-532348160,532348927,GB
-532348928,532365311,PL
-532365312,532373503,DE
+532340736,532341503,GB
+532341504,532341759,DE
+532341760,532344319,GB
+532344320,532344575,FR
+532344576,532347391,GB
+532347392,532347903,DE
+532347904,532348671,GB
+532348672,532348927,NL
+532348928,532365311,IE
+532365312,532365567,LU
+532365568,532365823,NL
+532365824,532366079,DE
+532366080,532366207,NL
+532366208,532366239,AR
+532366240,532366271,PA
+532366272,532371455,DE
+532371456,532373503,NL
532373504,532375551,RU
532375552,532377599,IT
532377600,532381695,DE
532381696,532414463,NL
532414464,532676607,IT
532676608,532692991,GE
-532692992,532701183,CZ
+532692992,532700927,CZ
+532700928,532701183,SK
532701184,532703231,GB
-532703232,532703679,RU
-532703680,532703743,IN
-532703744,532704511,RU
-532704512,532704767,IN
-532704768,532705279,RU
+532703232,532705279,RU
532705280,532709375,NL
532709376,532725759,RU
532725760,532729855,SE
532729856,532731903,TR
532731904,532733951,PL
-532733952,532734975,US
-532734976,532735999,SE
+532733952,532735999,SE
532736000,532738047,RU
-532738048,532738088,GB
-532738089,532738093,SZ
-532738094,532738232,GB
-532738233,532738303,PK
-532738304,532738559,US
-532738560,532739071,GB
-532739072,532739327,IN
-532739328,532740095,US
+532738048,532740095,GB
532740096,532742143,KG
532742144,532746239,GB
532746240,532752383,IT
@@ -8391,495 +3138,35 @@
532791296,532793343,LT
532793344,532795391,SE
532795392,532797439,CH
-532797440,532799487,IE
+532797440,532799231,IE
+532799232,532799487,GB
532799488,532801535,ES
532801536,532803583,DK
532803584,532805631,FR
532805632,532807679,SE
532807680,533200895,IT
533200896,533233663,TR
-533233664,533250047,IE
+533233664,533236991,IE
+533236992,533237247,GB
+533237248,533250047,IE
533250048,533254143,RU
533254144,533256191,NL
533256192,533262335,RU
533262336,533264383,ES
533264384,533266431,RU
-533266432,533266435,US
-533266436,533266439,CN
-533266440,533266443,JP
-533266444,533266447,DE
-533266448,533266451,FR
-533266452,533266455,GB
-533266456,533266459,BR
-533266460,533266463,IT
-533266464,533266467,CA
-533266468,533266471,IN
-533266472,533266475,RU
-533266476,533266479,ES
-533266480,533266483,AU
-533266484,533266487,MX
-533266488,533266491,KR
-533266492,533266495,NL
-533266496,533266499,TR
-533266500,533266503,ID
-533266504,533266507,CH
-533266508,533266511,PL
-533266512,533266515,BE
-533266516,533266519,SE
-533266520,533266523,SA
-533266524,533266527,TW
-533266528,533266531,SJ
-533266532,533266535,AT
-533266536,533266539,AR
-533266540,533266543,ZA
-533266544,533266547,IR
-533266548,533266551,TH
-533266552,533266555,DK
-533266556,533266559,GR
-533266560,533266563,AE
-533266564,533266567,VE
-533266568,533266571,CO
-533266572,533266575,FI
-533266576,533266579,MV
-533266580,533266583,PT
-533266584,533266587,HK
-533266588,533266591,SG
-533266592,533266595,EG
-533266596,533266599,NG
-533266600,533266603,IL
-533266604,533266607,IE
-533266608,533266611,CL
-533266612,533266615,CZ
-533266616,533266619,PH
-533266620,533266623,PK
-533266624,533266627,RO
-533266628,533266631,DZ
-533266632,533266635,PE
-533266636,533266639,NZ
-533266640,533266643,KZ
-533266644,533266647,UA
-533266648,533266651,KW
-533266652,533266655,QA
-533266656,533266687,DE
-533266688,533266691,HU
-533266692,533266695,BD
-533266696,533266699,VN
-533266700,533266703,MA
-533266704,533266707,SK
-533266708,533266711,AO
-533266712,533266715,IQ
-533266716,533266719,LY
-533266720,533266723,SD
-533266724,533266727,EC
-533266728,533266731,HR
-533266732,533266735,SY
-533266736,533266739,OM
-533266740,533266743,BY
-533266744,533266747,LU
-533266748,533266751,AZ
-533266752,533266755,DO
-533266756,533266759,LK
-533266760,533266763,SI
-533266764,533266767,FR
-533266768,533266771,BG
-533266772,533266775,TN
-533266776,533266779,GT
-533266780,533266783,UY
-533266784,533266787,LB
-533266788,533266791,UZ
-533266792,533266795,RS
-533266796,533266799,LT
-533266800,533266803,MM
-533266804,533266807,CR
-533266808,533266811,KE
-533266812,533266815,ET
-533266816,533266819,YE
-533266820,533266823,PA
-533266824,533266827,JO
-533266828,533266831,LV
-533266832,533266835,CY
-533266836,533266839,TZ
-533266840,533266843,CI
-533266844,533266847,CM
-533266848,533266851,SV
-533266852,533266855,BH
-533266856,533266859,TT
-533266860,533266863,EE
-533266864,533266867,BO
-533266868,533266871,GH
-533266872,533266875,PY
-533266876,533266879,UG
-533266880,533266883,AF
-533266884,533266887,BA
-533266888,533266891,ZM
-533266892,533266895,HN
-533266896,533266899,NP
-533266900,533266903,GQ
-533266904,533266907,JM
-533266908,533266911,IS
-533266912,533266943,DE
-533266944,533266947,SN
-533266948,533266951,CD
-533266952,533266955,GA
-533266956,533266959,US
-533266960,533266963,BN
-533266964,533266967,CG
-533266968,533266971,AL
-533266972,533266975,NA
-533266976,533266979,KH
-533266980,533266983,GE
-533266984,533266987,MK
-533266988,533266991,MU
-533266992,533266995,ML
-533266996,533266999,AM
-533267000,533267003,PG
-533267004,533267007,BF
-533267008,533267011,MG
-533267012,533267015,MT
-533267016,533267019,TD
-533267020,533267023,BS
-533267024,533267027,HT
-533267028,533267031,BJ
-533267032,533267035,NI
-533267036,533267039,LS
-533267040,533267043,MN
-533267044,533267047,RW
-533267048,533267051,NE
-533267052,533267055,TJ
-533267056,533267059,ZW
-533267060,533267063,MD
-533267064,533267067,MW
-533267068,533267071,KG
-533267072,533267075,GN
-533267076,533267079,BB
-533267080,533267083,ME
-533267084,533267087,MR
-533267088,533267091,SR
-533267092,533267095,SZ
-533267096,533267099,FJ
-533267100,533267103,TG
-533267104,533267107,ER
-533267108,533267111,GY
-533267112,533267115,CF
-533267116,533267119,SL
-533267120,533267123,LS
-533267124,533267127,CV
-533267128,533267131,BI
-533267132,533267135,MV
-533267136,533267139,BZ
-533267140,533267143,BT
-533267144,533267147,DJ
-533267148,533267151,AG
-533267152,533267155,GM
-533267156,533267159,LC
-533267160,533267163,LR
-533267164,533267167,SC
-533267168,533267199,DE
-533267200,533267423,US
-533267424,533267455,DE
-533267456,533267679,CN
-533267680,533267711,DE
-533267712,533267935,JP
-533267936,533268223,DE
-533268224,533268447,FR
-533268448,533268479,DE
-533268480,533268703,GB
-533268704,533268735,DE
-533268736,533268959,BR
-533268960,533268991,DE
-533268992,533269215,IT
-533269216,533269247,DE
-533269248,533269471,CA
-533269472,533269503,DE
-533269504,533269727,IN
-533269728,533269759,DE
-533269760,533269983,ES
-533269984,533270015,DE
-533270016,533270239,AU
-533270240,533270271,DE
-533270272,533270495,KR
-533270496,533270527,DE
-533270528,533270751,NL
-533270752,533270783,DE
-533270784,533271039,DK
-533271040,533271295,EE
-533271296,533271551,FO
-533271552,533271807,GE
-533271808,533272063,FR
-533272064,533272319,DE
-533272320,533272575,GI
-533272576,533272831,GR
-533272832,533273087,GL
-533273088,533273343,GG
-533273344,533273599,VA
-533273600,533273855,HU
-533273856,533274111,IS
-533274112,533274367,IR
-533274368,533274623,IQ
-533274624,533274879,IE
-533274880,533275135,IM
-533275136,533275391,IL
-533275392,533275647,IT
-533275648,533275903,JE
-533275904,533276159,JO
-533276160,533276415,KZ
-533276416,533276671,KW
-533276672,533276927,KG
-533276928,533277183,LV
-533277184,533277439,LB
-533277440,533277695,LI
-533277696,533277951,LT
-533277952,533278207,LU
-533278208,533278463,MT
-533278464,533278719,MC
-533278720,533278975,ME
-533278976,533279231,NL
-533279232,533279487,NO
-533279488,533279743,OM
-533279744,533279999,PS
-533280000,533280255,PL
-533280256,533280511,PT
-533280512,533280767,RO
-533280768,533281023,RU
-533281024,533281279,SM
-533281280,533281535,SA
-533281536,533281791,RS
-533281792,533282047,SK
-533282048,533282303,SI
-533282304,533282559,ES
-533282560,533282815,SE
-533282816,533283071,CH
-533283072,533283327,SY
-533283328,533283583,TJ
-533283584,533283839,TR
-533283840,533284095,TM
-533284096,533284351,UA
-533284352,533284607,AE
-533284608,533284863,GB
-533284864,533285119,UZ
-533285120,533285375,YE
-533285376,533285631,AX
-533285632,533285887,AL
-533285888,533286143,AD
-533286144,533286399,AM
-533286400,533286655,AT
-533286656,533286911,AZ
-533286912,533287167,BH
-533287168,533287423,BY
-533287424,533287679,BE
-533287680,533287935,BA
-533287936,533288191,BG
-533288192,533288447,HR
-533288448,533288703,CY
-533288704,533288959,CZ
-533288960,533289215,DK
-533289216,533289471,EE
-533289472,533289727,FO
-533289728,533289983,GE
-533289984,533290239,FR
-533290240,533290495,DE
-533290496,533290751,GI
-533290752,533291007,GR
-533291008,533291263,GL
-533291264,533291519,GG
-533291520,533291775,VA
-533291776,533292031,HU
-533292032,533292287,IS
-533292288,533292543,IR
-533292544,533292799,IQ
-533292800,533293055,IE
-533293056,533293311,IM
-533293312,533293567,IL
-533293568,533293823,IT
-533293824,533294079,JE
-533294080,533294335,JO
-533294336,533294591,KZ
-533294592,533294847,KW
-533294848,533295103,KG
-533295104,533295359,LV
-533295360,533295615,LB
-533295616,533295871,LI
-533295872,533296127,LT
-533296128,533296383,LU
-533296384,533296639,MT
-533296640,533296895,MC
-533296896,533297151,ME
-533297152,533297407,NL
-533297408,533297663,NO
-533297664,533297919,OM
-533297920,533298175,PT
-533298176,533298431,RO
-533298432,533298687,RU
-533298688,533298943,SM
-533298944,533299199,SA
-533299200,533299455,KW
-533299456,533299711,KY
-533299712,533299967,KZ
-533299968,533300223,LA
-533300224,533300479,LB
-533300480,533300735,LC
-533300736,533300991,LI
-533300992,533301247,LK
-533301248,533301503,LR
-533301504,533301759,LS
-533301760,533302015,LT
-533302016,533302271,LU
-533302272,533302527,LV
-533302528,533302783,LY
-533302784,533303039,MC
-533303040,533303295,MD
-533303296,533303551,ME
-533303552,533303807,MF
-533303808,533304063,MG
-533304064,533304319,MH
-533304320,533304575,MK
-533304576,533304831,ML
-533304832,533305087,MM
-533305088,533305343,MN
-533305344,533305599,MO
-533305600,533305855,MP
-533305856,533306111,MQ
-533306112,533306367,MR
-533306368,533306623,MS
-533306624,533306879,MT
-533306880,533307135,MU
-533307136,533307391,MV
-533307392,533307647,MW
-533307648,533307903,MX
-533307904,533308159,MY
-533308160,533308415,MZ
-533308416,533308671,NA
-533308672,533308927,NC
-533308928,533309183,NE
-533309184,533309439,NF
-533309440,533309695,NG
-533309696,533309951,NI
-533309952,533310207,NL
-533310208,533310463,NO
-533310464,533310719,NP
-533310720,533310975,NR
-533310976,533311231,NU
-533311232,533311487,NZ
-533311488,533311743,OM
-533311744,533311999,PA
-533312000,533312255,PE
-533312256,533312511,PF
-533312512,533312767,PG
-533312768,533313023,PH
-533313024,533313279,PK
-533313280,533313535,PL
-533313536,533313791,PM
-533313792,533314047,PN
-533314048,533314303,PR
-533314304,533314559,PS
-533314560,533314815,PT
-533314816,533315071,PW
-533315072,533315327,PY
-533315328,533315583,QA
-533315584,533315839,RE
-533315840,533316095,RO
-533316096,533316351,RS
-533316352,533316607,RU
-533316608,533316863,RW
-533316864,533317119,SA
-533317120,533317375,SB
-533317376,533317631,SC
-533317632,533317887,SD
-533317888,533318143,SE
-533318144,533318399,SG
-533318400,533318655,SH
-533318656,533318911,SI
-533318912,533319167,SJ
-533319168,533319423,SK
-533319424,533319679,SL
-533319680,533319935,SM
-533319936,533320191,SN
-533320192,533320447,SO
-533320448,533320703,SR
-533320704,533320959,SS
-533320960,533321215,ST
-533321216,533321471,SV
-533321472,533321727,SX
-533321728,533321983,SY
-533321984,533322239,SZ
-533322240,533322495,TC
-533322496,533322751,TD
-533322752,533323007,TF
-533323008,533323263,TG
-533323264,533323519,TH
-533323520,533323775,TJ
-533323776,533324031,TK
-533324032,533324287,TL
-533324288,533324543,TM
-533324544,533324799,TN
-533324800,533325055,TO
-533325056,533325311,TR
-533325312,533325567,TT
-533325568,533325823,TV
-533325824,533326079,TW
-533326080,533326335,TZ
-533326336,533326591,UA
-533326592,533326847,UG
-533326848,533327103,UM
-533327104,533327359,US
-533327360,533327615,UY
-533327616,533327871,UZ
-533327872,533328127,VA
-533328128,533328383,VC
-533328384,533328639,VE
-533328640,533328895,VG
-533328896,533329151,VI
-533329152,533329407,VN
-533329408,533329663,VU
-533329664,533329919,WF
-533329920,533330175,WS
-533330176,533330431,YE
-533330432,533330687,YT
-533330688,533330943,ZA
-533330944,533331199,ZM
-533331200,533331455,ZW
-533331456,533331967,AD
+533266432,533331967,NL
533331968,533397503,UA
533397504,533463039,KW
533463040,533479423,RU
-533479424,533479487,DE
-533479488,533479519,SE
-533479520,533479551,FI
-533479552,533479711,DE
-533479712,533479743,SE
-533479744,533479775,FI
-533479776,533479807,DK
-533479808,533479999,DE
-533480000,533480031,DK
-533480032,533480063,FI
-533480064,533480095,DE
-533480096,533480127,SE
-533480128,533480223,DE
-533480224,533480255,DK
-533480256,533480287,FI
-533480288,533480319,SE
-533480320,533480479,DE
-533480480,533480511,NO
-533480512,533480543,DE
-533480544,533480575,DK
-533480576,533480607,SE
-533480608,533480735,DE
-533480736,533480767,SE
-533480768,533480799,NO
-533480800,533480991,DE
-533480992,533481023,NO
-533481024,533481055,SE
-533481056,533481279,DE
-533481280,533481311,NO
-533481312,533481343,DE
-533481344,533481375,SE
-533481376,533481471,DE
+533479424,533481471,DE
533481472,533483519,NO
533483520,533485567,FR
533485568,533487615,LU
533487616,533491711,RU
533491712,533495807,DE
-533495808,533503999,NL
+533495808,533500159,NL
+533500160,533500415,JP
+533500416,533503999,NL
533504000,533512191,RU
533512192,533528575,ME
533528576,533594111,GB
@@ -8900,48 +3187,18 @@
533817344,533817344,TR
533817345,533819391,CY
533819392,533823487,DE
-533823488,533823551,CD
-533823552,533823552,BE
-533823553,533823612,CD
-533823613,533823616,BE
-533823617,533823644,CD
-533823645,533823648,BE
-533823649,533823660,CD
-533823661,533823664,BE
-533823665,533823676,CD
-533823677,533823680,BE
-533823681,533823692,CD
-533823693,533823696,BE
-533823697,533823708,CD
-533823709,533823712,BE
-533823713,533823724,CD
-533823725,533823743,BE
-533823744,533823999,CD
-533824000,533824255,BE
-533824256,533825535,CD
+533823488,533825535,BE
533825536,533831679,IS
533831680,533835775,DE
533835776,533837823,SE
533837824,533839871,DE
533839872,533856255,IS
533856256,533858303,FR
-533858304,533858751,HU
+533858304,533858751,TR
533858752,533858815,AT
-533858816,533859071,HU
-533859072,533859087,AT
-533859088,533859231,HU
-533859232,533859263,TR
-533859264,533859319,HU
-533859320,533859327,AT
-533859328,533859371,HU
-533859372,533859375,AT
-533859376,533859583,HU
-533859584,533859647,BG
+533858816,533859647,TR
533859648,533859663,AT
-533859664,533859775,BG
-533859776,533859839,SK
-533859840,533860095,TR
-533860096,533860351,SK
+533859664,533860351,TR
533862400,533864447,GB
533864448,533889023,TR
533889024,533891071,GB
@@ -8950,7 +3207,9 @@
533895168,533897215,TR
533897216,533899263,DE
533899264,533901311,RU
-533901312,533905407,IL
+533901312,533904383,IL
+533904384,533904639,FR
+533904640,533905407,IL
533905408,533913599,RU
533913600,533915647,ES
533915648,533919743,GB
@@ -8964,28 +3223,10 @@
533970944,533987327,SE
533987328,534118399,DE
534118400,534151167,KW
-534151168,534154367,DE
-534154368,534154431,CN
-534154432,534156031,DE
-534156032,534156287,CN
-534156288,534157759,DE
-534157760,534157823,US
-534157824,534158079,CN
-534158080,534166527,DE
-534166528,534166783,AU
-534166784,534167039,PL
-534167040,534167295,TR
-534167296,534177791,DE
-534177792,534179839,NL
-534179840,534181887,US
-534181888,534183935,DE
+534151168,534183935,DE
534183936,534249471,RO
534249472,534253567,GB
-534253568,534254591,FR
-534254592,534255103,GB
-534255104,534256639,FR
-534256640,534256895,GB
-534256896,534257663,FR
+534253568,534257663,FR
534257664,534259711,SE
534259712,534261759,CH
534261760,534263807,GB
@@ -8999,13 +3240,7 @@
534296576,534298623,BA
534298624,534306815,HR
534306816,534308863,SE
-534308864,534308867,IE
-534308868,534308887,GB
-534308888,534308895,IE
-534308896,534308907,GB
-534308908,534308911,IE
-534308912,534308919,GB
-534308920,534310911,IE
+534308864,534310911,IE
534310912,534315007,IT
534315008,534347775,HR
534347776,534355967,GB
@@ -9021,8 +3256,40 @@
534380544,534511615,AE
534511616,534512639,BZ
534512640,534512895,NL
-534512896,534513151,US
-534513152,534544383,DE
+534512896,534513151,SE
+534513152,534513215,BS
+534513216,534513279,VG
+534513280,534513407,NL
+534513408,534513663,SE
+534513664,534515455,US
+534515456,534515711,DE
+534515712,534517759,US
+534517760,534518783,NL
+534518784,534519039,DE
+534519040,534519167,NL
+534519168,534519199,KP
+534519200,534519231,VA
+534519232,534519263,AQ
+534519264,534519295,IT
+534519296,534519327,NL
+534519328,534519359,PK
+534519360,534519391,PE
+534519392,534519423,PK
+534519424,534519455,FJ
+534519456,534519487,BR
+534519488,534519519,MX
+534519520,534519551,CN
+534519552,534519807,NL
+534519808,534521855,US
+534521856,534522367,DE
+534522368,534522879,NL
+534522880,534523135,DE
+534523136,534523391,NL
+534523392,534523903,DE
+534523904,534530047,US
+534530048,534541311,DE
+534541312,534543359,US
+534543360,534544383,DE
534544384,534546431,RO
534546432,534548479,DE
534548480,534550527,PL
@@ -9040,7 +3307,8 @@
534663168,534675455,ES
534675456,534691839,GB
534691840,534693887,FR
-534693888,534700031,GB
+534693888,534695935,NL
+534695936,534700031,GB
534700032,534708223,JO
534708224,534740991,TR
534740992,534749183,BA
@@ -9054,59 +3322,50 @@
534773760,536870911,DE
536870912,539623423,US
539623424,539624577,NL
-539624578,539624578,EU
+539624578,539624578,US
539624579,539627519,NL
-539627520,539656191,US
+539627520,539629743,US
+539629744,539629751,GB
+539629752,539629975,US
+539629976,539629983,DE
+539629984,539630079,GB
+539630080,539630975,US
+539630976,539630983,PT
+539630984,539630991,FI
+539630992,539630999,NO
+539631000,539631007,CZ
+539631008,539631015,DK
+539631016,539631023,FR
+539631024,539631031,ES
+539631032,539631039,IE
+539631040,539631047,IT
+539631048,539656191,US
539656192,539660287,IN
-539660288,540680895,US
-540680896,540680959,BE
-540680960,540683775,US
-540683776,540683783,DE
-540683784,540685567,US
-540685568,540685631,FR
-540685632,540686591,US
-540686592,540686599,GB
-540686600,540686847,US
-540686848,540686863,GB
-540686864,540687103,US
-540687104,540687111,GB
-540687112,540687231,US
-540687232,540687359,CA
-540687360,540694527,US
-540694528,540694591,IT
-540694592,540705023,US
-540705024,540705031,IE
-540705032,540705535,US
-540705536,540705599,IE
-540705600,540711935,US
-540711936,540712447,NL
-540712448,540737535,US
+539660288,539668819,US
+539668820,539668823,NZ
+539668824,539668891,US
+539668892,539668892,AU
+539668893,539671103,US
+539671104,539671135,JP
+539671136,540737535,US
540737536,540737757,BZ
540737758,540737758,BR
-540737759,540737791,BZ
-540737792,540737919,BR
-540737920,540750175,BZ
-540750176,540750207,MX
-540750208,540750239,BZ
-540750240,540750255,MX
-540750256,540803071,BZ
+540737759,540803071,BZ
540803072,540811263,US
540811264,540814335,SG
-540814336,540814591,AP
+540814336,540814591,US
540814592,540815359,SG
-540815360,540819455,US
-540819456,540827647,CA
-540827648,540829695,US
-540829696,540831743,CA
-540831744,543690751,US
-543690752,543691007,AR
-543691008,543691263,US
-543691264,543691519,BR
-543691520,543752191,US
+540815360,540820959,US
+540820960,540820975,CA
+540820976,540826383,US
+540826384,540826399,CA
+540826400,543752191,US
543752192,543752447,BM
543752448,543755007,BR
543755008,543755263,CW
-543755264,543760895,US
+543755264,543760383,US
+543760384,543760639,CO
+543760640,543760895,US
543760896,543761151,VE
543761152,543761407,US
543761408,543761663,CL
@@ -9151,16 +3410,14 @@
543843584,543843839,DK
543843840,543844095,AT
543844096,543844351,US
-543844352,543844863,CH
-543844864,543845119,US
+543844352,543845119,CH
543845120,543846143,DE
543846144,543846655,HR
543846656,543846911,BG
543846912,543847167,SI
543847168,543847423,HU
543847424,543848447,US
-543848448,543850495,ES
-543850496,543850751,US
+543848448,543850751,ES
543850752,543851775,IE
543851776,543852031,DK
543852032,543852543,US
@@ -9184,26 +3441,31 @@
543864064,543864575,FI
543864576,543864831,US
543864832,543865343,PK
-543865344,543865855,US
+543865344,543865599,CZ
+543865600,543865855,US
543865856,543866879,GB
543866880,543870975,NL
543870976,543872511,ES
-543872512,543874047,US
+543872512,543872767,BE
+543872768,543873023,NL
+543873024,543874047,US
543874048,543875583,FR
543875584,543877119,DE
543877120,543878655,BE
543878656,543880191,IT
543880192,543881727,NL
543881728,543883263,GB
-543883264,548608767,US
-548608768,548609023,PR
-548609024,548616191,US
-548616192,548618239,PR
-548618240,586975999,US
-586976000,586976255,AP
-586976256,587006719,US
+543883264,544436771,US
+544436772,544436775,CA
+544436776,586972927,US
+586972928,586973183,CA
+586973184,586977023,US
+586977024,586977279,AU
+586977280,587006719,US
587006720,587006975,GB
-587006976,603979775,US
+587006976,587039487,US
+587039488,587039743,NO
+587039744,603979775,US
603979776,603980799,CN
603980800,603981823,NP
603981824,604110847,CN
@@ -9218,7 +3480,8 @@
606420992,606437375,ID
606437376,606470143,KH
606470144,606601215,KR
-606601216,607387647,CN
+606601216,607256575,CN
+607322112,607387647,CN
607387648,607649791,JP
607649792,608174079,CN
608174080,610271231,ID
@@ -9228,9 +3491,7 @@
620232704,620494847,CN
620494848,620625919,NP
620625920,620691455,CN
-620756992,620758015,IE
-620758016,620758271,NL
-620758272,620759039,IE
+620756992,620759039,IE
620759040,620763135,NL
620763136,620765183,EE
620765184,620773375,CH
@@ -9242,21 +3503,17 @@
620785664,620785919,DE
620785920,620786687,US
620786688,620787711,DE
-620787712,620788479,RU
-620788480,620788991,RU
-620788992,620789759,RU
+620787712,620789503,RU
+620789504,620789631,KZ
+620789632,620789759,RU
620789760,620810239,HR
620810240,620822527,LT
620822528,620845055,RU
620845056,620845191,GB
-620845192,620845201,DE
-620845202,620845215,NL
-620845216,620845439,GB
-620845440,620845503,SI
-620845504,620845567,GB
-620845568,620845823,LU
-620845824,620846079,GE
-620846080,620849151,GB
+620845192,620845199,DE
+620845200,620845503,GB
+620845504,620845567,SI
+620845568,620849151,GB
620849152,620851199,NL
620851200,620855295,DE
620855296,620859391,RU
@@ -9283,14 +3540,15 @@
621330432,621346815,PL
621346816,621355007,RU
621355008,621357055,UA
-621357056,621359615,RU
-621359616,621360127,UA
-621360128,621381631,RU
+621357056,621361151,RU
+621361152,621363199,GB
+621363200,621381631,RU
621381632,621383679,FR
621383680,621387775,RU
621387776,621389823,NL
621389824,621391871,SK
-621391872,621393919,CY
+621391872,621392127,IT
+621392128,621393919,CY
621393920,621395967,DE
621395968,621398015,CZ
621398016,621400063,TR
@@ -9299,21 +3557,18 @@
621404160,621408255,IT
621408256,621410303,RU
621410304,621412351,IR
-621412352,621430783,DE
-621430784,621436927,CZ
-621436928,621442303,DE
-621442304,621442367,RS
-621442368,621445119,DE
+621412352,621428735,NL
+621428736,621430783,DE
+621430784,621432831,ES
+621432832,621436927,IT
+621436928,621445119,DE
621445120,621805567,ES
621805568,621813759,NL
621813760,621821951,SA
621821952,621823999,DE
621824000,621826047,FR
621826048,621828095,RU
-621828096,621830143,GB
-621830144,621830263,FI
-621830264,621830271,US
-621830272,621838335,FI
+621830144,621838335,FI
621838336,621871103,SA
621871104,621903871,BY
621903872,621912063,IQ
@@ -9325,14 +3580,19 @@
621928448,621932543,DE
621932544,621934591,UA
621934592,621936639,SE
-621936640,621939455,RU
-621939456,621940479,GE
+621936640,621938687,RU
+621938688,621939458,GE
+621939459,621939459,RU
+621939460,621939711,GE
+621939712,621940479,RU
621940480,621942527,GB
-621942528,621960703,RU
-621960704,621960959,LV
-621960960,621969407,RU
-621971456,621971967,IM
-621971968,621973503,GB
+621942528,621969407,RU
+621971456,621971711,IM
+621971712,621971967,GB
+621971968,621972223,IM
+621972224,621972479,GB
+621972480,621972991,IM
+621972992,621973503,GB
621973504,621975551,IE
621975552,621977599,RU
621977600,621981695,FR
@@ -9340,44 +3600,12 @@
621983744,621985791,RS
621985792,621987839,US
621987840,621989887,DK
-621989888,621993727,SE
-621993728,621993983,DK
+621989888,621992959,SE
+621992960,621993983,DK
621993984,621998079,SI
621998080,622000127,ES
622000128,622004223,RU
-622004224,622004287,BE
-622004288,622004351,DK
-622004352,622004415,FI
-622004416,622004479,FR
-622004480,622004543,DE
-622004544,622004607,GG
-622004608,622004671,IS
-622004672,622004735,IE
-622004736,622004991,BE
-622004992,622005055,IM
-622005056,622005119,IT
-622005120,622005183,JE
-622005184,622005247,LU
-622005248,622005311,NL
-622005312,622005375,NO
-622005376,622005439,PL
-622005440,622005503,PT
-622005504,622005567,ES
-622005568,622005631,SE
-622005632,622005695,CH
-622005696,622005759,GB
-622005760,622005823,AT
-622005824,622005887,HR
-622005888,622005951,CZ
-622005952,622005959,FO
-622005960,622005967,GL
-622005968,622005975,EE
-622005976,622005983,LI
-622005984,622005991,MC
-622005992,622005999,SM
-622006000,622006007,AX
-622006008,622006015,AD
-622006016,622006271,BE
+622004224,622006271,BE
622006272,622008319,FI
622008320,622010367,GB
622010368,622018559,RU
@@ -9391,14 +3619,14 @@
622067712,622329855,RU
622329856,622395391,DE
622395392,622405631,UA
-622405632,622407679,ES
+622405632,622406655,ES
+622406656,622407679,GB
622407680,622409727,DE
622409728,622411775,FR
622411776,622413823,DE
622413824,622415871,FR
622415872,622417919,MK
-622417920,622419199,GB
-622419200,622419967,IM
+622417920,622419967,IM
622419968,622428159,UA
622428160,622460927,RO
622460928,622477311,AZ
@@ -9408,7 +3636,7 @@
622483456,622485503,GB
622485504,622487551,MK
622487552,622489599,GB
-622489600,622493695,US
+622489600,622493695,IL
622493696,622497791,MD
622497792,622499839,IL
622499840,622501887,SE
@@ -9418,8 +3646,8 @@
622510080,622512127,PL
622512128,622514175,DE
622514176,622518271,NO
-622518272,622518527,GB
-622518528,622520319,NL
+622518272,622519295,NL
+622519296,622520319,FR
622520320,622522367,RU
622522368,622524415,FR
622524416,622526463,ES
@@ -9461,12 +3689,29 @@
623052800,623054847,RS
623054848,623058943,FI
623058944,623067135,RO
-623067136,623069183,AL
+623067136,623069183,RS
623069184,623071231,GB
623071232,623073279,FI
623073280,623075327,GB
623075328,623077375,DK
-623077376,623083519,CH
+623077376,623077783,CH
+623077784,623077791,NL
+623077792,623077807,CH
+623077808,623077815,BE
+623077816,623077819,SE
+623077820,623077827,CH
+623077828,623077831,US
+623077832,623077833,PT
+623077834,623077835,ES
+623077836,623077837,CR
+623077838,623077839,KN
+623077840,623077843,BR
+623077844,623077849,HK
+623077850,623077851,ZA
+623077852,623077855,SG
+623077856,623077857,WS
+623077858,623077859,NZ
+623077860,623083519,CH
623083520,623116287,RO
623116288,623378431,KW
623378432,623509503,OM
@@ -9482,18 +3727,9 @@
623673344,623689727,NO
623689728,623706111,RU
623706112,623771647,BY
-623771648,623771903,GB
-623771904,623772159,US
-623772160,623772543,GB
-623772544,623772551,FR
-623772552,623774207,GB
-623774208,623774719,NL
-623774720,623775743,GB
+623771648,623775743,GB
623775744,623777791,IE
-623777792,623778175,GB
-623778176,623778239,DE
-623778240,623778303,NL
-623778304,623779839,GB
+623777792,623779839,GB
623779840,623783935,IL
623783936,623788031,RU
623788032,623790079,HU
@@ -9502,17 +3738,20 @@
623794176,623796223,ES
623796224,623798271,GB
623798272,623800319,GE
-623800320,623801086,LU
-623801087,623801087,SE
-623801088,623801855,LU
-623801856,623802623,SE
-623802624,623804415,NL
+623800320,623801087,SE
+623801088,623801599,US
+623801600,623801855,SE
+623801856,623802367,NL
+623802368,623802879,SE
+623802880,623804415,NL
623804416,623806463,RU
623806464,623808511,NL
623808512,623810559,RU
623810560,623812607,ES
623812608,623820799,SE
-623820800,623822847,NL
+623820800,623821823,NL
+623821824,623822335,US
+623822336,623822847,NL
623822848,623824895,GB
623824896,623826943,CZ
623826944,623837183,UA
@@ -9529,9 +3768,7 @@
624005120,624007167,IR
624007168,624009215,DE
624009216,624025599,RU
-624025600,624026622,NL
-624026623,624026623,HN
-624026624,624027647,NL
+624025600,624027647,NL
624027648,624029695,FR
624029696,624033791,SE
624033792,624164863,DE
@@ -9544,3706 +3781,187 @@
624566272,624568319,RU
624568320,624570367,BE
624570368,624574463,DE
-624574464,624574479,US
-624574480,624574487,IT
-624574488,624574495,US
-624574496,624574503,TR
-624574504,624574511,BR
-624574512,624574527,MA
-624574528,624574535,DK
-624574536,624574551,US
-624574552,624574559,GB
-624574560,624574567,US
-624574568,624574575,AU
-624574576,624574607,US
-624574608,624574615,HK
-624574616,624574623,NL
-624574624,624574655,TR
-624574656,624574663,US
-624574664,624574671,KW
-624574672,624574687,US
-624574688,624574703,NL
-624574704,624574711,US
-624574712,624574715,TR
+624574464,624574715,NL
624574716,624574719,US
-624574720,624574720,NL
-624574721,624574721,AU
-624574722,624574723,US
-624574724,624574727,TR
-624574728,624574735,US
-624574736,624574743,GB
-624574744,624574751,NL
-624574752,624574823,US
-624574824,624574831,DK
-624574832,624574855,US
-624574856,624574863,GB
-624574864,624574895,US
-624574896,624574899,IT
-624574900,624574903,HK
-624574904,624574911,US
-624574912,624574919,CA
-624574920,624574927,US
-624574928,624574935,IL
-624574936,624574943,GR
-624574944,624574959,US
-624574960,624574967,RO
-624574968,624574991,US
-624574992,624574999,ES
-624575000,624575007,US
-624575008,624575015,JO
-624575016,624575039,US
-624575040,624575047,SG
-624575048,624575055,GB
-624575056,624575063,CY
+624574720,624575063,NL
624575064,624575071,US
-624575072,624575079,FR
-624575080,624575095,US
-624575096,624575103,ES
-624575104,624575111,DK
-624575112,624575119,IT
-624575120,624575127,SA
-624575128,624575135,RO
-624575136,624575151,US
-624575152,624575163,MA
-624575164,624575167,TR
-624575168,624575175,RU
-624575176,624575183,ES
-624575184,624575191,BE
-624575192,624575199,US
-624575200,624575207,BE
-624575208,624575215,IL
-624575216,624575223,US
-624575224,624575231,HK
-624575232,624575239,EG
-624575240,624575247,HK
-624575248,624575263,US
-624575264,624575279,NL
-624575280,624575287,US
-624575288,624575295,NL
-624575296,624575303,CN
-624575304,624575311,NL
-624575312,624575335,US
-624575336,624575343,SA
-624575344,624575347,GB
-624575348,624575351,EG
-624575352,624575359,US
-624575360,624575367,TR
-624575368,624575375,US
-624575376,624575383,HK
-624575384,624575387,TR
-624575388,624575391,US
-624575392,624575399,GB
+624575072,624575135,NL
+624575136,624575143,US
+624575144,624575399,NL
624575400,624575403,US
-624575404,624575407,IT
-624575408,624575415,NL
-624575416,624575423,US
-624575424,624575427,IT
-624575428,624575431,IL
-624575432,624575439,NL
-624575440,624575455,NZ
-624575456,624575463,GB
-624575464,624575471,NZ
-624575472,624575479,AT
-624575480,624575487,AE
-624575488,624575495,TR
-624575496,624575503,IL
-624575504,624575551,US
-624575552,624575567,GB
-624575568,624575575,AE
-624575576,624575583,GB
-624575584,624575599,TR
-624575600,624575607,NL
-624575608,624575615,RU
-624575616,624575623,US
-624575624,624575627,ES
-624575628,624575631,EG
-624575632,624575771,NL
-624575772,624575775,US
-624575776,624575791,NL
-624575792,624575799,TR
-624575800,624575807,BD
-624575808,624575823,US
-624575824,624575831,IL
-624575832,624575839,US
-624575840,624575871,GB
-624575872,624575879,LB
-624575880,624575895,US
-624575896,624575903,DK
-624575904,624575911,NL
-624575912,624575919,CY
-624575920,624575927,US
-624575928,624575935,ES
-624575936,624575943,US
-624575944,624575951,NL
-624575952,624575959,NO
-624575960,624575967,US
-624575968,624575975,DK
-624575976,624575983,US
-624575984,624575991,GB
-624575992,624575999,IT
-624576000,624576011,PL
-624576012,624576023,US
-624576024,624576031,TR
-624576032,624576039,CZ
-624576040,624576047,TR
-624576048,624576055,NL
-624576056,624576063,HK
-624576064,624576071,BD
-624576072,624576079,NL
-624576080,624576095,US
-624576096,624576103,CA
-624576104,624576111,RU
-624576112,624576119,BR
-624576120,624576127,GB
+624575404,624575679,NL
+624575680,624575743,US
+624575744,624576127,NL
624576128,624576131,US
-624576132,624576135,SA
-624576136,624576143,RU
-624576144,624576151,NL
-624576152,624576159,US
-624576160,624576191,CN
-624576192,624576223,US
-624576224,624576231,EG
-624576232,624576235,CN
-624576236,624576239,AE
-624576240,624576255,US
-624576256,624576271,NL
-624576272,624576279,IQ
-624576280,624576295,US
-624576296,624576303,IE
-624576304,624576319,US
-624576320,624576327,IT
-624576328,624576335,NL
-624576336,624576343,TR
-624576344,624576359,US
-624576360,624576367,SE
-624576368,624576383,US
-624576384,624576391,NL
-624576392,624576399,UA
-624576400,624576407,GB
-624576408,624576411,AE
-624576412,624576415,TR
-624576416,624576423,GB
-624576424,624576431,DK
-624576432,624576439,ES
-624576440,624576443,US
-624576444,624576447,NL
-624576448,624576463,IL
-624576464,624576479,US
-624576480,624576487,CY
-624576488,624576495,GB
-624576496,624576511,US
-624576512,624576543,DK
-624576544,624576607,US
-624576608,624576639,TR
-624576640,624576703,BG
-624576704,624576711,PT
-624576712,624576719,US
-624576720,624576727,AU
-624576728,624576751,NL
-624576752,624576759,IT
-624576760,624576767,NL
-624576768,624576783,CA
-624576784,624576823,US
-624576824,624576831,SZ
-624576832,624576863,US
-624576864,624576871,IL
-624576872,624576879,US
-624576880,624576887,TR
+624576132,624576471,NL
+624576472,624576479,US
+624576480,624576887,NL
624576888,624576895,GB
-624576896,624576911,HR
-624576912,624576959,NL
-624576960,624576991,TR
-624576992,624576999,US
-624577000,624577007,IL
-624577008,624577015,NL
-624577016,624577023,AU
-624577024,624577055,SA
-624577056,624577071,VG
-624577072,624577119,US
-624577120,624577127,TR
-624577128,624577135,DE
-624577136,624577143,CN
-624577144,624577151,US
+624576896,624577135,NL
+624577136,624577139,GB
+624577140,624577151,NL
624577152,624577215,GB
-624577216,624577247,US
-624577248,624577279,LT
-624577280,624577287,US
-624577288,624577303,NL
-624577304,624577305,TR
-624577306,624577307,AU
+624577216,624577307,NL
624577308,624577311,US
-624577312,624577319,IL
-624577320,624577327,NL
-624577328,624577335,CN
-624577336,624577351,NL
-624577352,624577359,CA
-624577360,624577367,NL
-624577368,624577375,MU
-624577376,624577439,TR
-624577440,624577447,NL
-624577448,624577455,US
-624577456,624577463,PK
-624577464,624577467,DE
-624577468,624577471,TR
-624577472,624577483,CA
+624577312,624577483,NL
624577484,624577487,US
-624577488,624577495,NL
-624577496,624577503,GB
-624577504,624577535,US
-624577536,624577543,NL
-624577544,624577547,US
-624577548,624577551,AE
-624577552,624577559,US
-624577560,624577567,AE
-624577568,624577575,NL
-624577576,624577583,GB
-624577584,624577591,NL
-624577592,624577599,TR
-624577600,624577607,PL
-624577608,624577615,NL
-624577616,624577623,AE
-624577624,624577631,ES
-624577632,624577639,BA
-624577640,624577647,NL
-624577648,624577655,GB
-624577656,624577663,NL
-624577664,624577695,NZ
-624577696,624577703,BE
-624577704,624577711,CA
-624577712,624577727,NL
-624577728,624577791,US
-624577792,624577799,ZA
-624577800,624577807,US
-624577808,624577823,GB
-624577824,624577831,NL
-624577832,624577839,BD
-624577840,624577855,NL
-624577856,624577863,GB
-624577864,624577871,CN
-624577872,624577887,TR
-624577888,624577919,US
-624577920,624577935,NL
-624577936,624577943,ZA
-624577944,624577951,NL
-624577952,624577959,US
-624577960,624577967,TR
-624577968,624577983,NL
-624577984,624578015,RU
-624578016,624578023,TR
-624578024,624578031,US
-624578032,624578047,NL
-624578048,624578079,TR
-624578080,624578111,EG
-624578112,624578143,US
-624578144,624578175,NZ
-624578176,624578207,CA
-624578208,624578239,TR
-624578240,624578247,NL
-624578248,624578255,US
-624578256,624578271,NL
-624578272,624578287,TR
-624578288,624578407,NL
-624578408,624578415,GB
-624578416,624578423,SA
-624578424,624578431,US
-624578432,624578479,NL
-624578480,624578495,US
-624578496,624578511,NL
-624578512,624578527,US
-624578528,624578575,NL
-624578576,624578583,BA
-624578584,624578591,TR
-624578592,624578623,NL
-624578624,624578655,US
-624578656,624578735,NL
-624578736,624578743,SK
-624578744,624578747,TR
-624578748,624578751,SK
-624578752,624578759,GB
-624578760,624578767,NL
-624578768,624578775,US
-624578776,624578779,GB
-624578780,624578783,US
-624578784,624578791,AE
-624578792,624578799,NL
-624578800,624578815,US
-624578816,624578823,NL
-624578824,624578831,TR
-624578832,624578847,US
-624578848,624578855,NL
-624578856,624578863,MY
-624578864,624578871,NL
-624578872,624578879,SE
-624578880,624578895,NL
-624578896,624578911,JO
-624578912,624578919,NL
-624578920,624578927,US
-624578928,624578943,NL
-624578944,624578955,US
-624578956,624578959,SA
-624578960,624578983,NL
-624578984,624578991,EG
-624578992,624578999,AT
-624579000,624579007,NL
-624579008,624579015,TR
-624579016,624579055,NL
-624579056,624579063,US
-624579064,624579071,GB
-624579072,624579075,AE
+624577488,624578719,NL
+624578720,624578723,GB
+624578724,624578887,NL
+624578888,624578895,US
+624578896,624578951,NL
+624578952,624578955,US
+624578956,624579075,NL
624579076,624579079,US
-624579080,624579087,MY
-624579088,624579095,NL
-624579096,624579103,US
-624579104,624579111,NL
-624579112,624579119,RO
-624579120,624579127,NL
-624579128,624579131,SE
-624579132,624579135,LB
-624579136,624579143,NL
-624579144,624579167,US
-624579168,624579175,AE
-624579176,624579183,NL
-624579184,624579231,US
-624579232,624579239,NL
-624579240,624579243,BA
-624579244,624579247,HR
-624579248,624579255,CA
-624579256,624579263,NL
-624579264,624579295,US
-624579296,624579303,GB
-624579304,624579319,NL
-624579320,624579327,SZ
-624579328,624579391,US
-624579392,624579423,TR
-624579424,624579471,NL
-624579472,624579479,BD
-624579480,624579495,NL
+624579080,624579423,NL
+624579424,624579455,US
+624579456,624579495,NL
624579496,624579499,US
-624579500,624579503,GR
-624579504,624579519,TR
-624579520,624579527,IT
+624579500,624579527,NL
624579528,624579531,US
-624579532,624579535,PT
-624579536,624579567,NL
-624579568,624579615,US
-624579616,624579619,SM
-624579620,624579621,IN
-624579622,624579622,CN
-624579623,624579623,TR
-624579624,624579631,US
-624579632,624579632,JO
-624579633,624579633,AU
-624579634,624579634,GR
-624579635,624579637,TR
-624579638,624579638,GB
-624579639,624579639,BS
-624579640,624579647,BA
-624579648,624579663,GB
-624579664,624579667,US
-624579668,624579679,NL
-624579680,624579695,US
-624579696,624579703,MX
-624579704,624579705,NL
-624579706,624579707,AR
-624579708,624579719,NL
-624579720,624579727,PH
-624579728,624579751,US
-624579752,624579759,AU
-624579760,624579775,NL
-624579776,624579783,EE
-624579784,624579791,NL
-624579792,624579807,GB
-624579808,624579815,US
-624579816,624579823,BY
-624579824,624579831,CN
-624579832,624579832,NL
-624579833,624579833,GB
-624579834,624579835,NL
-624579836,624579837,CY
-624579838,624579838,TR
-624579839,624579839,NL
-624579840,624579847,GT
-624579848,624579849,TR
-624579850,624579851,AU
-624579852,624579855,LU
-624579856,624579863,NL
-624579864,624579867,EG
-624579868,624579869,NL
-624579870,624579871,VG
-624579872,624579875,TR
-624579876,624579879,IN
-624579880,624579887,US
-624579888,624579889,NL
-624579890,624579891,SA
-624579892,624579895,US
-624579896,624579903,NL
-624579904,624579939,US
-624579940,624579943,NL
-624579944,624579951,BD
-624579952,624579955,PT
-624579956,624579959,GB
-624579960,624579967,NL
-624579968,624579971,US
-624579972,624579972,TR
-624579973,624579973,ES
-624579974,624579975,SA
-624579976,624579983,US
-624579984,624579985,TR
-624579986,624579987,HR
-624579988,624579988,IL
-624579989,624579989,US
-624579990,624579990,GR
-624579991,624579991,PT
-624579992,624579999,NL
-624580000,624580007,LB
-624580008,624580015,US
-624580016,624580023,GT
-624580024,624580031,US
-624580032,624580035,NL
-624580036,624580047,US
-624580048,624580049,SA
-624580050,624580050,TR
-624580051,624580051,NL
-624580052,624580055,AU
-624580056,624580063,US
-624580064,624580067,SA
-624580068,624580071,US
-624580072,624580087,GT
-624580088,624580092,US
-624580093,624580093,IL
-624580094,624580094,TR
-624580095,624580095,NL
-624580096,624580127,CA
-624580128,624580131,ES
-624580132,624580132,TR
+624579532,624579623,NL
+624579624,624579627,US
+624579628,624580132,NL
624580133,624580133,GB
-624580134,624580135,BR
-624580136,624580143,US
-624580144,624580151,SE
-624580152,624580175,NL
-624580176,624580195,US
-624580196,624580199,AE
-624580200,624580207,SA
-624580208,624580211,IN
-624580212,624580213,TR
-624580214,624580223,NL
-624580224,624580295,US
-624580296,624580303,NL
-624580304,624580311,RO
-624580312,624580319,US
-624580320,624580327,DE
-624580328,624580335,NL
-624580336,624580343,DE
-624580344,624580351,BG
-624580352,624580415,US
-624580416,624580419,AU
-624580420,624580423,IN
-624580424,624580439,NL
-624580440,624580447,IL
-624580448,624580455,CO
-624580456,624580463,NL
-624580464,624580471,US
-624580472,624580479,HK
-624580480,624580487,CN
-624580488,624580495,EE
-624580496,624580503,US
-624580504,624580511,NL
-624580512,624580519,HR
-624580520,624580527,BE
-624580528,624580535,US
-624580536,624580543,SA
-624580544,624580575,US
-624580576,624580583,NL
-624580584,624580591,IT
-624580592,624580599,NL
-624580600,624580607,AU
-624580608,624580911,US
-624580912,624580919,ES
-624580920,624580951,US
-624580952,624580955,GB
-624580956,624580959,NL
-624580960,624580967,CZ
-624580968,624580975,NL
-624580976,624580983,SE
-624580984,624580991,BR
-624580992,624580995,RO
-624580996,624580999,SE
-624581000,624581003,CZ
-624581004,624581007,US
-624581008,624581015,IN
-624581016,624581023,GB
-624581024,624581031,BE
-624581032,624581039,US
-624581040,624581047,GB
-624581048,624581055,US
-624581056,624581063,NL
-624581064,624581071,AE
-624581072,624581087,NL
-624581088,624581103,AE
-624581104,624581127,US
-624581128,624581135,RO
-624581136,624581151,NL
-624581152,624581183,GB
-624581184,624581207,NL
-624581208,624581215,TR
-624581216,624581279,US
-624581280,624581295,GB
-624581296,624581303,SZ
-624581304,624581311,NL
-624581312,624581319,US
-624581320,624581327,NG
-624581328,624581335,SZ
-624581336,624581339,GB
-624581340,624581343,IN
-624581344,624581367,NL
-624581368,624581375,ES
-624581376,624581415,US
-624581416,624581423,BR
-624581424,624581439,NL
-624581440,624581443,GB
-624581444,624581447,CN
-624581448,624581455,NL
-624581456,624581463,US
-624581464,624581471,CN
-624581472,624581479,PL
-624581480,624581487,US
-624581488,624581495,ES
-624581496,624581503,US
-624581504,624581511,IN
-624581512,624581515,TR
-624581516,624581519,NL
-624581520,624581543,US
-624581544,624581567,NL
-624581568,624581599,RO
-624581600,624581631,NL
-624581632,624581663,US
-624581664,624581671,NL
-624581672,624581703,US
-624581704,624581711,ES
-624581712,624581735,NL
-624581736,624581743,US
-624581744,624581751,NL
-624581752,624581759,US
-624581760,624581887,NL
-624581888,624581895,US
-624581896,624581903,NL
-624581904,624581911,US
-624581912,624581919,MX
-624581920,624581927,US
-624581928,624581943,CN
-624581944,624581951,IN
-624581952,624581991,US
-624581992,624582007,ES
-624582008,624582015,EG
-624582016,624582207,NL
-624582208,624582215,BA
-624582216,624582223,US
-624582224,624582235,NL
-624582236,624582239,US
-624582240,624582243,AE
-624582244,624582245,NL
-624582246,624582246,US
-624582247,624582247,SA
-624582248,624582255,GB
-624582256,624582263,US
-624582264,624582271,CN
-624582272,624582272,US
-624582273,624582273,CN
-624582274,624582275,UA
-624582276,624582279,US
-624582280,624582287,GB
-624582288,624582295,NL
-624582296,624582303,CA
-624582304,624582311,US
-624582312,624582319,BE
-624582320,624582327,US
-624582328,624582335,KW
-624582336,624582343,CN
-624582344,624582351,EG
-624582352,624582359,KW
-624582360,624582367,AF
-624582368,624582375,AR
-624582376,624582383,GB
-624582384,624582391,AF
-624582392,624582399,HR
-624582400,624582463,US
-624582464,624582495,AF
-624582496,624582503,SA
-624582504,624582511,ES
-624582512,624582527,US
-624582528,624582543,NL
-624582544,624582559,TR
-624582560,624582575,NL
-624582576,624582583,EG
-624582584,624582607,DK
-624582608,624582615,BR
-624582616,624582623,PA
-624582624,624582639,NL
-624582640,624582647,CN
-624582648,624582651,TR
-624582652,624582759,US
-624582760,624582767,JO
-624582768,624582775,US
-624582776,624582783,NO
-624582784,624582791,NL
-624582792,624582799,DK
-624582800,624582807,US
-624582808,624582815,LV
-624582816,624582819,BR
-624582820,624582823,US
-624582824,624582847,DK
-624582848,624582863,US
-624582864,624582911,DK
-624582912,624582919,SE
-624582920,624582927,IL
-624582928,624582935,SA
-624582936,624582943,TR
-624582944,624582951,LV
-624582952,624582959,IL
-624582960,624582975,US
-624582976,624582983,TW
-624582984,624582991,JO
-624582992,624582999,GB
-624583000,624583007,US
-624583008,624583015,GR
-624583016,624583031,NZ
-624583032,624583039,SA
-624583040,624583071,SG
-624583072,624583079,BR
-624583080,624583087,TR
-624583088,624583103,GB
-624583104,624583111,NG
-624583112,624583115,US
-624583116,624583119,SE
-624583120,624583127,GB
-624583128,624583135,IT
-624583136,624583143,US
-624583144,624583147,NG
-624583148,624583151,CN
-624583152,624583159,US
-624583160,624583167,IN
-624583168,624583175,US
-624583176,624583183,RO
-624583184,624583423,US
-624583424,624583431,DE
-624583432,624583435,US
-624583436,624583439,AE
-624583440,624583447,US
-624583448,624583455,AE
-624583456,624583463,US
-624583464,624583471,GB
-624583472,624583479,HU
-624583480,624583487,TR
-624583488,624583495,PL
-624583496,624583503,US
-624583504,624583511,AE
-624583512,624583519,ES
-624583520,624583527,NL
-624583528,624583535,LB
-624583536,624583551,GB
-624583552,624583567,NL
-624583568,624583575,US
-624583576,624583583,DE
-624583584,624583591,BE
-624583592,624583599,CA
-624583600,624583603,DE
-624583604,624583607,TR
-624583608,624583611,DE
-624583612,624583679,US
-624583680,624583703,NL
-624583704,624583711,US
-624583712,624583719,SA
-624583720,624583727,UG
-624583728,624583735,US
-624583736,624583743,SA
-624583744,624583751,AE
-624583752,624583759,ES
-624583760,624583767,NL
-624583768,624583771,TR
-624583772,624583775,US
-624583776,624583783,PT
-624583784,624583791,NL
-624583792,624583795,TR
-624583796,624583799,BM
-624583800,624583807,CN
-624583808,624583815,NL
-624583816,624583823,US
-624583824,624583831,MA
-624583832,624583839,PK
-624583840,624583855,NL
-624583856,624583863,US
-624583864,624583871,DK
-624583872,624583903,IN
-624583904,624583911,BR
-624583912,624583919,ES
-624583920,624583927,DK
-624583928,624583935,GR
-624583936,624583951,US
-624583952,624583959,ES
-624583960,624583967,US
-624583968,624583975,NL
-624583976,624584015,US
-624584016,624584023,NL
-624584024,624584059,US
-624584060,624584063,IN
-624584064,624584071,DK
-624584072,624584079,IT
-624584080,624584087,SA
-624584088,624584095,RO
-624584096,624584111,US
-624584112,624584123,MA
-624584124,624584127,TR
-624584128,624584135,RU
-624584136,624584143,ES
-624584144,624584151,US
-624584152,624584155,EG
-624584156,624584159,TR
-624584160,624584167,IN
-624584168,624584175,IL
-624584176,624584191,US
-624584192,624584192,NL
-624584193,624584193,AU
-624584194,624584195,US
-624584196,624584199,TR
-624584200,624584207,US
-624584208,624584215,GB
-624584216,624584223,BR
-624584224,624584295,US
-624584296,624584303,DK
-624584304,624584327,US
-624584328,624584335,GB
-624584336,624584367,US
-624584368,624584371,IT
-624584372,624584375,HK
-624584376,624584383,US
-624584384,624584391,CA
-624584392,624584399,US
-624584400,624584407,IL
-624584408,624584431,DK
-624584432,624584439,RO
-624584440,624584455,US
-624584456,624584463,ES
-624584464,624584471,EG
-624584472,624584487,US
-624584488,624584495,SA
-624584496,624584503,CA
-624584504,624584511,GB
-624584512,624584543,US
-624584544,624584575,CY
-624584576,624584671,US
-624584672,624584679,DE
-624584680,624584683,SE
-624584684,624584687,US
-624584688,624584695,NL
-624584696,624584699,GB
-624584700,624584719,US
-624584720,624584731,NL
-624584732,624584751,US
-624584752,624584759,TR
-624584760,624584767,NL
-624584768,624584783,US
-624584784,624584791,IL
-624584792,624584799,US
-624584800,624584831,GB
-624584832,624584839,LB
-624584840,624584843,TR
-624584844,624584855,US
-624584856,624584863,DK
-624584864,624584871,US
-624584872,624584879,CY
-624584880,624584887,US
-624584888,624584895,ES
-624584896,624584903,US
-624584904,624584911,GB
-624584912,624584919,NO
-624584920,624584927,US
-624584928,624584935,NL
-624584936,624584943,US
-624584944,624584951,GB
-624584952,624584959,IT
-624584960,624584991,US
-624584992,624584999,GB
-624585000,624585007,US
-624585008,624585023,TR
-624585024,624585039,NL
-624585040,624585047,CH
-624585048,624585055,DK
-624585056,624585071,EG
-624585072,624585119,DK
-624585120,624585135,US
-624585136,624585143,DK
-624585144,624585151,US
-624585152,624585159,DK
-624585160,624585183,NL
-624585184,624585199,US
-624585200,624585215,NL
-624585216,624585227,PL
-624585228,624585231,CN
-624585232,624585239,US
-624585240,624585247,TR
-624585248,624585271,CN
-624585272,624585279,HK
-624585280,624585287,BD
-624585288,624585311,US
-624585312,624585319,CA
-624585320,624585323,CN
-624585324,624585327,TW
-624585328,624585335,BR
-624585336,624585343,GB
-624585344,624585347,IN
-624585348,624585351,SA
-624585352,624585359,RU
-624585360,624585367,BR
-624585368,624585375,US
-624585376,624585407,CN
-624585408,624585439,NL
-624585440,624585451,CN
-624585452,624585455,NL
-624585456,624585487,US
-624585488,624585495,NL
-624585496,624585503,US
-624585504,624585511,TR
-624585512,624585519,BR
-624585520,624585535,US
-624585536,624585543,DK
-624585544,624585559,US
-624585560,624585567,GB
-624585568,624585575,US
-624585576,624585583,AU
-624585584,624585607,US
-624585608,624585615,SG
-624585616,624585623,HK
-624585624,624585631,GB
-624585632,624585663,TR
-624585664,624585671,DK
-624585672,624585679,KW
-624585680,624585695,US
-624585696,624585711,TR
-624585712,624585719,US
-624585720,624585723,TR
-624585724,624585727,US
-624585728,624585735,PL
-624585736,624585743,IL
-624585744,624585751,SK
-624585752,624585775,US
-624585776,624585779,PL
-624585780,624585783,US
-624585784,624585791,IN
-624585792,624585807,GB
-624585808,624585815,AE
-624585816,624585823,AU
-624585824,624585847,US
-624585848,624585855,RU
-624585856,624585983,US
-624585984,624586015,SA
-624586016,624586031,VG
-624586032,624586047,US
-624586048,624586079,DE
-624586080,624586087,TR
-624586088,624586095,EG
-624586096,624586103,DE
-624586104,624586111,US
-624586112,624586175,GB
-624586176,624586207,US
-624586208,624586239,LT
-624586240,624586247,US
-624586248,624586255,DE
-624586256,624586263,US
-624586264,624586265,TR
-624586266,624586267,GB
-624586268,624586279,US
-624586280,624586287,NL
-624586288,624586295,CN
-624586296,624586303,US
-624586304,624586311,GB
-624586312,624586319,CA
-624586320,624586335,US
-624586336,624586399,TR
-624586400,624586415,US
-624586416,624586423,PK
-624586424,624586427,US
-624586428,624586431,TR
-624586432,624586443,CA
-624586444,624586447,HU
-624586448,624586495,US
-624586496,624586511,CA
-624586512,624586591,US
-624586592,624586607,IL
-624586608,624586615,TR
-624586616,624586639,US
-624586640,624586655,NL
-624586656,624586671,DE
-624586672,624586687,NL
-624586688,624586719,TR
-624586720,624586727,US
-624586728,624586735,IL
-624586736,624586751,US
-624586752,624586759,ZA
-624586760,624586767,US
-624586768,624586783,GB
-624586784,624586795,US
-624586796,624586799,NL
-624586800,624586815,US
-624586816,624586823,GB
-624586824,624586831,CN
-624586832,624586847,NL
-624586848,624586895,SA
-624586896,624586903,ZA
-624586904,624586919,US
-624586920,624586927,TR
-624586928,624586975,US
-624586976,624586983,TR
-624586984,624587039,US
-624587040,624587103,NL
-624587104,624587135,US
-624587136,624587151,NL
-624587152,624587159,AU
-624587160,624587167,PL
-624587168,624587263,US
-624587264,624587295,DK
-624587296,624587359,US
-624587360,624587391,TR
-624587392,624587455,PA
-624587456,624587463,PT
-624587464,624587487,US
-624587488,624587519,SA
-624587520,624587623,US
-624587624,624587631,GB
-624587632,624587639,SA
-624587640,624587647,US
-624587648,624587695,NL
-624587696,624587727,US
-624587728,624587743,NL
-624587744,624587751,US
-624587752,624587759,NL
-624587760,624587775,US
-624587776,624587783,EG
-624587784,624587791,IN
-624587792,624587807,US
-624587808,624587815,PH
-624587816,624587823,NL
-624587824,624587831,US
-624587832,624587839,NL
-624587840,624587847,CN
-624587848,624587879,US
-624587880,624587887,SA
-624587888,624587891,GB
-624587892,624587895,EG
-624587896,624587935,US
-624587936,624587943,GB
-624587944,624587947,SA
-624587948,624587951,IT
-624587952,624587959,NL
-624587960,624587967,US
-624587968,624587971,IT
-624587972,624587975,IL
-624587976,624587983,DK
-624587984,624587999,US
-624588000,624588007,GB
-624588008,624588015,DK
-624588016,624588023,NL
-624588024,624588031,AE
-624588032,624588271,NL
-624588272,624588287,US
-624588288,624588319,NL
-624588320,624588327,PK
-624588328,624588335,RO
-624588336,624588391,NL
-624588392,624588415,US
-624588416,624588463,NL
-624588464,624588479,US
-624588480,624588527,NL
-624588528,624588543,US
-624588544,624588551,NL
-624588552,624588559,US
-624588560,624588567,NL
-624588568,624588575,ES
-624588576,624588583,NL
-624588584,624588587,ES
-624588588,624588591,MA
-624588592,624588599,BE
-624588600,624588607,AE
-624588608,624588623,US
-624588624,624588631,GB
-624588632,624588639,AE
-624588640,624588643,IT
-624588644,624588647,TR
-624588648,624588655,GB
-624588656,624588671,DK
-624588672,624588703,CN
-624588704,624588711,TW
-624588712,624588719,UG
-624588720,624588727,SA
-624588728,624588735,US
-624588736,624588743,IN
-624588744,624588751,RO
-624588752,624588759,US
-624588760,624588767,NL
-624588768,624588775,BA
-624588776,624588783,CA
-624588784,624588791,US
-624588792,624588799,TR
-624588800,624588887,US
-624588888,624588891,GB
-624588892,624588895,NL
-624588896,624588927,US
-624588928,624588975,NL
-624588976,624588983,GB
-624588984,624588991,US
-624588992,624589007,NL
-624589008,624589055,US
-624589056,624589063,EG
-624589064,624589095,US
-624589096,624589103,IE
-624589104,624589119,US
-624589120,624589127,IT
-624589128,624589135,NL
-624589136,624589143,TR
-624589144,624589159,US
-624589160,624589167,SE
-624589168,624589183,US
-624589184,624589191,CN
-624589192,624589199,UA
-624589200,624589207,GB
-624589208,624589211,DE
-624589212,624589215,TR
-624589216,624589223,KW
-624589224,624589231,GB
-624589232,624589247,US
-624589248,624589263,IL
-624589264,624589279,US
-624589280,624589287,CY
-624589288,624589295,GB
-624589296,624589311,US
-624589312,624589343,TR
-624589344,624589407,EG
-624589408,624589423,NL
-624589424,624589439,US
-624589440,624589471,CA
-624589472,624589503,TR
-624589504,624589519,US
-624589520,624589703,NL
-624589704,624589707,PL
-624589708,624589711,SA
-624589712,624589759,NL
-624589760,624589767,EG
-624589768,624589823,NL
-624589824,624590079,US
-624590080,624590087,IT
-624590088,624590119,US
-624590120,624590127,GR
-624590128,624590151,US
-624590152,624590159,BG
-624590160,624590167,GB
-624590168,624590175,MX
-624590176,624590183,US
-624590184,624590191,EG
-624590192,624590199,IN
-624590200,624590203,US
-624590204,624590207,IL
-624590208,624590239,LT
-624590240,624590247,AZ
-624590248,624590255,IL
-624590256,624590303,US
-624590304,624590311,GB
-624590312,624590319,BZ
-624590320,624590327,RU
-624590328,624590335,CA
-624590336,624590351,US
-624590352,624590359,GB
-624590360,624590363,UG
-624590364,624590367,ES
-624590368,624590375,AT
-624590376,624590383,US
-624590384,624590399,NL
-624590400,624590407,IN
-624590408,624590415,CN
-624590416,624590431,HR
-624590432,624590463,AF
-624590464,624590471,CN
-624590472,624590475,TR
-624590476,624590479,US
-624590480,624590487,BD
-624590488,624590495,IE
-624590496,624590503,US
-624590504,624590511,FR
-624590512,624590519,AU
-624590520,624590527,US
-624590528,624590543,MA
-624590544,624590551,AT
-624590552,624590559,ES
-624590560,624590567,US
-624590568,624590575,EG
-624590576,624590583,CA
-624590584,624590591,GB
-624590592,624590623,US
-624590624,624590655,GB
-624590656,624590703,NL
-624590704,624590751,US
-624590752,624590759,CN
-624590760,624590767,US
-624590768,624590775,TR
-624590776,624590783,US
-624590784,624590815,TR
-624590816,624590823,US
-624590824,624590831,BR
-624590832,624590843,US
-624590844,624590847,NL
-624590848,624639999,FR
-624640000,624640003,DE
-624640004,624640007,GB
-624640008,624640063,FR
-624640064,624640067,PT
-624640068,624640071,IT
-624640072,624640087,FR
-624640088,624640091,IT
-624640092,624640095,PL
-624640096,624640111,NL
-624640112,624640115,DE
-624640116,624640119,IT
-624640120,624640127,DE
-624640128,624640135,PT
-624640136,624640139,GB
-624640140,624640143,FR
-624640144,624640147,NL
-624640148,624640159,DE
-624640160,624640175,BE
-624640176,624640183,PL
-624640184,624640187,ES
-624640188,624640191,GB
-624640192,624640239,FR
-624640240,624640243,CZ
-624640244,624640247,DE
-624640248,624640255,FR
-624640256,624640259,GB
-624640260,624640263,DE
-624640264,624640275,PL
-624640276,624640283,GB
-624640284,624640287,PL
-624640288,624640291,ES
-624640292,624640295,PL
-624640296,624640519,FR
-624640520,624640523,NL
-624640524,624640527,FR
-624640528,624640543,IT
-624640544,624640559,FR
-624640560,624640575,GB
-624640576,624640615,FR
-624640616,624640619,IE
-624640620,624640623,DE
-624640624,624640639,FR
-624640640,624640703,BE
-624640704,624640727,FR
-624640728,624640735,DE
-624640736,624640739,GB
-624640740,624640743,PT
-624640744,624640755,GB
-624640756,624640759,PL
-624640760,624640767,FR
-624640768,624640779,IT
-624640780,624640783,DE
-624640784,624640787,ES
-624640788,624640791,IT
-624640792,624640799,FR
-624640800,624640803,CH
-624640804,624640807,FR
-624640808,624640811,DE
-624640812,624640815,GB
-624640816,624640823,FR
-624640824,624640827,GB
-624640828,624640831,DE
-624640832,624640847,FR
-624640848,624640851,ES
-624640852,624640855,PL
-624640856,624640863,IT
-624640864,624640879,FR
-624640880,624640895,PL
-624640896,624640903,PT
-624640904,624640927,FR
-624640928,624640931,FI
-624640932,624640935,ES
-624640936,624640939,PL
-624640940,624640943,DE
-624640944,624640951,FR
-624640952,624640967,PT
-624640968,624640975,FR
-624640976,624640991,ES
-624640992,624640999,GB
-624641000,624641007,FR
-624641008,624641023,IT
-624641024,624641063,FR
-624641064,624641067,NL
-624641068,624641071,PL
-624641072,624641079,FR
-624641080,624641083,ES
-624641084,624641087,FR
-624641088,624641091,NL
-624641092,624641095,FR
-624641096,624641099,CH
-624641100,624641103,FR
-624641104,624641107,PL
-624641108,624641119,FR
-624641120,624641131,PL
-624641132,624641135,LT
-624641136,624641183,FR
-624641184,624641187,CZ
-624641188,624641191,ES
-624641192,624641195,PL
-624641196,624641207,FR
-624641208,624641211,FI
-624641212,624641215,FR
-624641216,624641223,IE
-624641224,624641231,GB
-624641232,624641243,FR
-624641244,624641247,IT
-624641248,624641255,GB
-624641256,624641259,PT
-624641260,624641263,DE
-624641264,624641295,FR
-624641296,624641299,CZ
-624641300,624641303,LT
-624641304,624641311,PT
-624641312,624641315,GB
-624641316,624641323,ES
-624641324,624641327,PL
-624641328,624641343,IE
-624641344,624641355,FR
-624641356,624641359,PT
-624641360,624641367,IE
-624641368,624641371,FR
-624641372,624641375,IT
-624641376,624641407,PL
-624641408,624641823,FR
-624641824,624641831,DE
-624641832,624641839,ES
-624641840,624641855,FR
-624641856,624641887,GB
-624641888,624641983,FR
-624641984,624642015,ES
-624642016,624642031,PL
-624642032,624642035,DE
-624642036,624642039,ES
-624642040,624642047,FR
-624642048,624642051,DE
-624642052,624642055,PL
-624642056,624642063,GB
-624642064,624642079,FR
-624642080,624642095,PL
-624642096,624642099,FR
-624642100,624642111,PL
-624642112,624642127,CH
-624642128,624642135,DE
-624642136,624642139,PL
-624642140,624642147,FR
-624642148,624642151,ES
-624642152,624642175,FR
-624642176,624642207,NL
-624642208,624642223,IT
-624642224,624642231,GB
-624642232,624642239,FR
-624642240,624642243,NL
-624642244,624642247,PL
-624642248,624642255,FR
-624642256,624642271,PL
-624642272,624642283,FR
-624642284,624642287,GB
-624642288,624642291,FR
-624642292,624642299,PL
-624642300,624642303,ES
-624642304,624642335,IT
-624642336,624642379,FR
-624642380,624642383,PL
-624642384,624642391,FR
-624642392,624642395,PL
-624642396,624642407,FR
-624642408,624642411,PL
-624642412,624642415,FR
-624642416,624642423,DE
-624642424,624642431,FR
-624642432,624642447,BE
-624642448,624642463,GB
-624642464,624642479,FR
-624642480,624642483,GB
-624642484,624642487,FR
-624642488,624642491,NL
-624642492,624642495,PL
-624642496,624642499,GB
-624642500,624642503,FR
-624642504,624642507,PT
-624642508,624642511,ES
-624642512,624642527,FR
-624642528,624642559,IT
-624642560,624642623,FR
-624642624,624642627,IT
-624642628,624642631,FR
-624642632,624642639,IT
-624642640,624642651,PL
-624642652,624642659,FR
-624642660,624642663,PL
-624642664,624642671,FI
-624642672,624642679,PL
-624642680,624642683,FR
-624642684,624642687,DE
-624642688,624642691,FR
-624642692,624642695,ES
-624642696,624642699,FR
-624642700,624642703,DE
-624642704,624642711,FR
-624642712,624642719,PL
-624642720,624642727,FR
-624642728,624642735,PL
-624642736,624642739,DE
-624642740,624642747,PL
-624642748,624642751,DE
-624642752,624642787,FR
-624642788,624642791,ES
-624642792,624642795,PL
-624642796,624642799,FR
-624642800,624642815,PT
-624642816,624642835,FR
-624642836,624642839,GB
-624642840,624642843,FR
-624642844,624642847,DE
-624642848,624642855,GB
-624642856,624642859,FR
-624642860,624642863,PL
-624642864,624642887,FR
-624642888,624642891,LT
-624642892,624642895,PL
-624642896,624642911,GB
-624642912,624642943,FR
-624642944,624642947,IT
-624642948,624642951,ES
-624642952,624642967,FR
-624642968,624642975,DE
-624642976,624643007,FR
-624643008,624643011,PL
-624643012,624643015,GB
-624643016,624643019,IE
-624643020,624643023,FR
-624643024,624643031,IT
-624643032,624643035,CZ
-624643036,624643039,DE
-624643040,624643055,FR
-624643056,624643059,ES
-624643060,624643063,IT
-624643064,624643067,NL
-624643068,624643071,PL
-624643072,624643079,NL
-624643080,624643087,FR
-624643088,624643091,IT
-624643092,624643095,FI
-624643096,624643103,IT
-624643104,624643107,FR
-624643108,624643111,GB
-624643112,624643115,FR
-624643116,624643119,PT
-624643120,624643123,IE
-624643124,624643131,PT
-624643132,624643183,FR
-624643184,624643191,ES
-624643192,624643199,FR
-624643200,624643203,PL
-624643204,624643207,NL
-624643208,624643211,PL
-624643212,624643215,CH
-624643216,624643235,FR
-624643236,624643239,PL
-624643240,624643243,FR
-624643244,624643247,ES
-624643248,624643255,IE
-624643256,624643259,PL
-624643260,624643263,DE
-624643264,624643311,FR
-624643312,624643315,FI
-624643316,624643319,IE
-624643320,624643327,IT
-624643328,624643343,FR
-624643344,624643347,DE
-624643348,624643351,FR
-624643352,624643355,PL
-624643356,624643359,FR
-624643360,624643371,LT
-624643372,624643375,FR
-624643376,624643383,ES
-624643384,624643423,FR
-624643424,624643459,ES
-624643460,624643463,IE
-624643464,624643487,FR
-624643488,624643503,PL
-624643504,624643507,NL
-624643508,624643511,DE
-624643512,624643519,IE
-624643520,624643583,DE
-624643584,624643619,FR
-624643620,624643623,DE
-624643624,624643627,PL
-624643628,624643631,BE
-624643632,624643647,ES
-624643648,624643711,FR
-624643712,624643727,PL
-624643728,624643735,GB
-624643736,624643759,FR
-624643760,624643767,CH
-624643768,624643775,FR
-624643776,624643779,NL
-624643780,624643783,IT
-624643784,624643791,FR
-624643792,624643807,DE
-624643808,624643815,CH
-624643816,624643819,FR
-624643820,624643823,GB
-624643824,624643839,FR
-624643840,624644095,DE
-624644096,624644111,PL
-624644112,624644115,BE
-624644116,624644119,GB
-624644120,624644123,DE
-624644124,624644127,FR
-624644128,624644131,PL
-624644132,624644135,NL
-624644136,624644175,FR
-624644176,624644191,PL
-624644192,624644195,FR
-624644196,624644199,PL
-624644200,624644203,IT
-624644204,624644207,PT
-624644208,624644223,BE
-624644224,624644255,FR
-624644256,624644271,CH
-624644272,624644275,FR
-624644276,624644279,DE
-624644280,624644287,ES
-624644288,624644291,FR
-624644292,624644295,PL
-624644296,624644299,FR
-624644300,624644303,NL
-624644304,624644307,IE
-624644308,624644311,FR
-624644312,624644319,ES
-624644320,624644323,NL
-624644324,624644327,ES
-624644328,624644331,PL
-624644332,624644335,NL
-624644336,624644351,IT
-624644352,624644415,FR
-624644416,624644439,GB
-624644440,624644443,CH
-624644444,624644459,FR
-624644460,624644463,PL
-624644464,624644479,FR
-624644480,624644495,FI
-624644496,624644511,IT
-624644512,624644519,FR
-624644520,624644527,ES
-624644528,624644535,GB
-624644536,624644543,NL
-624644544,624644607,FR
-624644608,624644615,IE
-624644616,624644619,IT
-624644620,624644623,FR
-624644624,624644631,PL
-624644632,624644679,FR
-624644680,624644683,DE
-624644684,624644687,FR
-624644688,624644695,PL
-624644696,624644719,FR
-624644720,624644735,DE
-624644736,624644767,PL
-624644768,624644771,FR
-624644772,624644775,CH
-624644776,624644783,BE
-624644784,624644799,IE
-624644800,624644807,NL
-624644808,624644823,FR
-624644824,624644831,PT
-624644832,624644839,PL
-624644840,624644843,IT
-624644844,624644847,PL
-624644848,624644851,ES
-624644852,624644855,IT
-624644856,624644863,GB
-624644864,624644895,ES
-624644896,624644903,FR
-624644904,624644911,NL
-624644912,624644915,FR
-624644916,624644923,ES
-624644924,624644927,PL
-624644928,624644931,FR
-624644932,624644935,CZ
-624644936,624644939,FR
-624644940,624644943,ES
-624644944,624644955,FR
-624644956,624644959,PL
-624644960,624644991,NL
-624644992,624645007,ES
-624645008,624645015,GB
-624645016,624645023,BE
-624645024,624645055,PL
-624645056,624645135,FR
-624645136,624645139,PT
-624645140,624645143,FR
-624645144,624645147,PL
-624645148,624645151,GB
-624645152,624645163,FR
-624645164,624645167,DE
-624645168,624645183,FR
-624645184,624645215,ES
-624645216,624645247,PT
-624645248,624645295,FR
-624645296,624645303,IE
-624645304,624645311,FR
-624645312,624645343,PL
-624645344,624645359,DE
-624645360,624645367,FR
-624645368,624645371,PL
-624645372,624645451,FR
-624645452,624645455,IT
-624645456,624645479,FR
-624645480,624645487,DE
-624645488,624645495,PL
-624645496,624645535,FR
-624645536,624645539,PT
-624645540,624645543,IT
-624645544,624645547,FR
-624645548,624645551,PT
-624645552,624645575,FR
-624645576,624645579,GB
-624645580,624645583,PL
-624645584,624645591,GB
-624645592,624645607,FR
-624645608,624645615,CH
-624645616,624645619,PL
-624645620,624645627,FR
-624645628,624645631,PL
-624645632,624645887,FR
-624645888,624645891,PL
-624645892,624645895,FR
-624645896,624645903,ES
-624645904,624645907,FR
-624645908,624645911,IE
-624645912,624645915,FR
-624645916,624645919,BE
-624645920,624646047,PT
-624646048,624646111,FR
-624646112,624646143,PL
-624646144,624646175,FR
-624646176,624646207,ES
-624646208,624646223,FR
-624646224,624646227,PL
-624646228,624646231,IT
-624646232,624646235,CZ
-624646236,624646239,GB
-624646240,624646255,FR
-624646256,624646259,DE
-624646260,624646263,GB
-624646264,624646267,FR
-624646268,624646271,FI
-624646272,624646283,FR
-624646284,624646287,IT
-624646288,624646295,FR
-624646296,624646303,ES
-624646304,624646311,PL
-624646312,624646315,FI
-624646316,624646319,ES
-624646320,624646339,FR
-624646340,624646343,LT
-624646344,624646347,IT
-624646348,624646351,IE
-624646352,624646367,GB
-624646368,624646399,PL
-624646400,624646527,FR
-624646528,624646535,DE
-624646536,624646539,PL
-624646540,624646543,FR
-624646544,624646559,DE
-624646560,624646575,FR
-624646576,624646579,PL
-624646580,624646583,NL
-624646584,624646591,GB
-624646592,624646607,FR
-624646608,624646623,CZ
-624646624,624646627,PT
-624646628,624646631,DE
-624646632,624646635,FR
-624646636,624646639,NL
-624646640,624646643,IE
-624646644,624646647,ES
-624646648,624646651,IT
-624646652,624646655,PL
-624646656,624646659,ES
-624646660,624646663,GB
-624646664,624646667,FR
-624646668,624646671,IT
-624646672,624646687,GB
-624646688,624646691,FR
-624646692,624646695,NL
-624646696,624646699,FR
-624646700,624646703,CH
-624646704,624646707,FR
-624646708,624646715,PL
-624646716,624646719,FR
-624646720,624646735,ES
-624646736,624646751,DE
-624646752,624646759,FR
-624646760,624646763,IT
-624646764,624646767,FR
-624646768,624646787,DE
-624646788,624646791,PL
-624646792,624646795,IE
-624646796,624646799,FR
-624646800,624646815,CH
-624646816,624646831,IT
-624646832,624646835,FR
-624646836,624646839,BE
-624646840,624646847,FR
-624646848,624646911,DE
-624646912,624646935,PL
-624646936,624646939,FR
-624646940,624646943,PL
-624646944,624646951,IT
-624646952,624646955,IE
-624646956,624646959,ES
-624646960,624646987,FR
-624646988,624646991,PL
-624646992,624647039,FR
-624647040,624647055,GB
-624647056,624647087,FR
-624647088,624647095,DE
-624647096,624647107,GB
-624647108,624647111,PL
-624647112,624647123,ES
-624647124,624647127,FR
-624647128,624647135,PL
-624647136,624647171,FR
-624647172,624647175,PL
-624647176,624647183,PT
-624647184,624647191,PL
-624647192,624647195,FR
-624647196,624647231,PL
-624647232,624647247,FR
-624647248,624647263,GB
-624647264,624647295,CH
-624647296,624647327,NL
-624647328,624647359,GB
-624647360,624647423,FR
-624647424,624647471,IE
-624647472,624647475,PL
-624647476,624647479,FR
-624647480,624647483,PT
-624647484,624647487,NL
-624647488,624647495,PL
-624647496,624647499,FR
-624647500,624647503,PL
-624647504,624647519,NL
-624647520,624647527,GB
-624647528,624647551,FR
-624647552,624647583,IE
-624647584,624647615,FR
-624647616,624647623,PL
-624647624,624647631,ES
-624647632,624647647,FR
-624647648,624647663,GB
-624647664,624647667,FR
-624647668,624647671,FI
-624647672,624647675,FR
-624647676,624647679,ES
-624647680,624647935,DE
-624647936,624647999,PL
-624648000,624648063,IT
-624648064,624648079,GB
-624648080,624648095,NL
-624648096,624648099,FR
-624648100,624648103,GB
-624648104,624648111,FR
-624648112,624648115,IE
-624648116,624648119,BE
-624648120,624648123,FR
-624648124,624648127,PL
-624648128,624648135,CH
-624648136,624648139,PL
+624580134,624580151,NL
+624580152,624580159,ES
+624580160,624581071,NL
+624581072,624581087,US
+624581088,624581135,NL
+624581136,624581139,US
+624581140,624581199,NL
+624581200,624581207,GB
+624581208,624581599,NL
+624581600,624581631,US
+624581632,624582123,NL
+624582124,624582127,US
+624582128,624582139,NL
+624582140,624582147,US
+624582148,624582287,NL
+624582288,624582295,US
+624582296,624582399,NL
+624582400,624582403,US
+624582404,624584111,NL
+624584112,624584119,US
+624584120,624584159,NL
+624584160,624584175,US
+624584176,624584383,NL
+624584384,624584391,US
+624584392,624584415,NL
+624584416,624584423,US
+624584424,624584639,NL
+624584640,624584655,US
+624584656,624585359,NL
+624585360,624585367,US
+624585368,624590847,NL
+624590848,624640951,FR
+624640952,624640959,PT
+624640960,624646343,FR
+624646344,624646347,NL
+624646348,624647171,FR
+624647172,624647175,ES
+624647176,624648139,FR
624648140,624648143,ES
-624648144,624648151,FR
-624648152,624648155,DE
-624648156,624648159,PL
-624648160,624650623,FR
-624650624,624650751,PT
-624650752,624651135,FR
-624651136,624651263,FI
-624651264,624651391,LT
-624651392,624651519,CZ
-624651520,624651647,NL
-624651648,624651775,IE
-624651776,624652287,PL
-624652288,624652799,IT
-624652800,624653311,DE
-624653312,624653823,GB
-624653824,624654335,ES
-624654336,624656383,FR
-624656384,624656639,IE
-624656640,624656703,DE
-624656704,624656723,FR
-624656724,624656727,FI
-624656728,624656731,PT
-624656732,624656735,PL
-624656736,624656739,FR
-624656740,624656743,GB
-624656744,624656751,FR
-624656752,624656755,GB
-624656756,624656763,FR
-624656764,624656767,PL
-624656768,624656831,FR
-624656832,624656895,ES
-624656896,624656911,FR
-624656912,624656927,DE
-624656928,624656935,FR
-624656936,624656943,BE
-624656944,624656951,FR
-624656952,624656955,PL
-624656956,624656959,DE
-624656960,624656991,GB
-624656992,624656999,DE
-624657000,624657007,FR
-624657008,624657015,ES
-624657016,624657019,GB
-624657020,624657023,PL
-624657024,624657063,FR
-624657064,624657067,NL
-624657068,624657071,FR
-624657072,624657087,GB
-624657088,624657135,PL
-624657136,624657139,IT
-624657140,624657143,NL
-624657144,624657147,FR
-624657148,624657155,PL
-624657156,624657159,FR
-624657160,624657167,IE
-624657168,624657199,PL
-624657200,624657215,DE
-624657216,624657263,PL
-624657264,624657279,BE
-624657280,624657295,PL
-624657296,624657299,DE
-624657300,624657303,PL
-624657304,624657311,GB
-624657312,624657315,DE
-624657316,624657319,FR
-624657320,624657327,DE
-624657328,624657331,ES
-624657332,624657359,FR
-624657360,624657363,GB
-624657364,624657367,PL
-624657368,624657375,IE
-624657376,624657379,PL
-624657380,624657383,FR
-624657384,624657387,DE
-624657388,624657407,FR
-624657408,624657415,PL
-624657416,624657423,ES
-624657424,624657427,BE
-624657428,624657431,FR
-624657432,624657435,PL
-624657436,624657439,FR
-624657440,624657471,PL
-624657472,624657475,DE
-624657476,624657479,PL
-624657480,624657491,FR
-624657492,624657495,BE
-624657496,624657503,GB
-624657504,624657535,BE
-624657536,624657543,ES
-624657544,624657551,FR
-624657552,624657559,NL
-624657560,624657567,FR
-624657568,624657583,PL
-624657584,624657591,GB
-624657592,624657599,FR
-624657600,624657603,BE
-624657604,624657607,ES
-624657608,624657611,LT
-624657612,624657615,BE
-624657616,624657631,GB
-624657632,624657643,FR
-624657644,624657651,PL
-624657652,624657655,FR
-624657656,624657663,GB
-624657664,624657667,PT
-624657668,624657671,PL
-624657672,624657675,NL
-624657676,624657679,ES
-624657680,624657707,FR
-624657708,624657711,ES
-624657712,624657715,PL
-624657716,624657719,PT
-624657720,624657723,PL
-624657724,624657727,NL
-624657728,624657735,GB
-624657736,624657743,NL
-624657744,624657759,FR
-624657760,624657767,PL
-624657768,624657771,FR
-624657772,624657775,DE
-624657776,624657779,BE
-624657780,624657783,GB
-624657784,624657787,NL
-624657788,624657803,FR
-624657804,624657807,PT
-624657808,624657815,DE
-624657816,624657819,ES
-624657820,624657823,GB
-624657824,624657827,FR
-624657828,624657831,PL
-624657832,624657839,ES
-624657840,624657855,NL
-624657856,624657863,FR
-624657864,624657871,PL
-624657872,624657875,FR
-624657876,624657879,PL
-624657880,624657883,CH
-624657884,624657919,PL
-624657920,624657927,PT
-624657928,624657931,BE
-624657932,624657935,FR
-624657936,624657943,NL
-624657944,624657947,FR
-624657948,624657951,GB
-624657952,624657975,FR
-624657976,624657979,GB
-624657980,624658007,FR
-624658008,624658011,PL
-624658012,624658015,FR
-624658016,624658031,PT
-624658032,624658047,PL
-624658048,624658079,FR
-624658080,624658087,IE
-624658088,624658095,GB
-624658096,624658111,IT
-624658112,624658175,FR
-624658176,624658179,BE
-624658180,624658183,PL
-624658184,624658191,ES
-624658192,624658223,FR
-624658224,624658239,BE
-624658240,624658303,FR
-624658304,624658323,PL
+624648144,624657711,FR
+624657712,624657715,ES
+624657716,624657883,FR
+624657884,624657887,ES
+624657888,624658323,FR
624658324,624658327,IE
-624658328,624658335,IT
-624658336,624658367,FR
-624658368,624658375,CZ
-624658376,624658391,FR
-624658392,624658395,PL
-624658396,624658399,DE
-624658400,624658403,PL
-624658404,624658407,FR
-624658408,624658411,ES
-624658412,624658415,GB
-624658416,624658423,FR
-624658424,624658431,PL
-624658432,624658447,NL
-624658448,624658479,FR
+624658328,624658479,FR
624658480,624658483,DE
-624658484,624658487,ES
-624658488,624658527,FR
-624658528,624658535,GB
-624658536,624658539,ES
-624658540,624658543,PL
-624658544,624658591,FR
-624658592,624658623,DE
-624658624,624658639,FR
-624658640,624658659,PL
-624658660,624658663,FR
-624658664,624658671,GB
-624658672,624658675,PL
-624658676,624658679,FR
-624658680,624658687,PL
-624658688,624658719,DE
-624658720,624658751,FR
-624658752,624658783,NL
-624658784,624658787,ES
-624658788,624658791,FR
-624658792,624658795,IT
-624658796,624658799,PL
-624658800,624658803,DE
-624658804,624658807,CZ
-624658808,624658811,FR
-624658812,624658831,PL
-624658832,624658835,CH
-624658836,624658839,NL
-624658840,624658843,PL
-624658844,624658847,GB
-624658848,624658855,PL
-624658856,624658863,FR
-624658864,624658879,ES
-624658880,624658911,NL
-624658912,624658927,FR
-624658928,624658943,SN
-624658944,624658947,PL
-624658948,624658951,ES
-624658952,624658959,IE
-624658960,624658963,PL
-624658964,624658967,IT
-624658968,624658971,DE
-624658972,624658975,FR
-624658976,624658979,PL
-624658980,624658983,FR
-624658984,624658987,PL
-624658988,624658991,FR
-624658992,624658995,GB
-624658996,624658999,IT
-624659000,624659003,IE
-624659004,624659007,GB
-624659008,624659023,FR
-624659024,624659031,ES
-624659032,624659055,FR
-624659056,624659071,IT
-624659072,624659135,GB
-624659136,624659279,FR
-624659280,624659295,GB
-624659296,624659299,NL
-624659300,624659303,CZ
-624659304,624659307,FR
-624659308,624659315,PL
-624659316,624659319,GB
-624659320,624659323,PL
-624659324,624659327,FR
-624659328,624659359,GB
-624659360,624659363,ES
-624659364,624659367,BE
-624659368,624659371,FR
-624659372,624659375,IT
-624659376,624659383,NL
-624659384,624659387,PL
-624659388,624659391,IT
-624659392,624659407,FR
-624659408,624659415,PL
-624659416,624659427,FR
-624659428,624659431,CZ
-624659432,624659439,FI
-624659440,624659447,FR
-624659448,624659455,ES
-624659456,624659487,PL
-624659488,624659503,CH
-624659504,624659551,FR
-624659552,624659583,PL
-624659584,624659599,GB
-624659600,624659607,DE
-624659608,624659611,CZ
-624659612,624659631,FR
-624659632,624659647,BE
-624659648,624659695,FR
-624659696,624659703,PL
-624659704,624659787,FR
-624659788,624659791,NL
-624659792,624659799,GB
-624659800,624659803,FR
-624659804,624659807,PT
-624659808,624659811,FR
-624659812,624659815,PL
-624659816,624659831,FR
-624659832,624659839,FI
-624659840,624659935,FR
-624659936,624659951,BE
-624659952,624659959,FR
-624659960,624659963,PL
-624659964,624659967,PT
-624659968,624659975,DE
-624659976,624659979,BE
-624659980,624659987,FR
-624659988,624659991,PL
-624659992,624659995,FR
-624659996,624659999,PL
-624660000,624660015,FR
-624660016,624660031,CH
-624660032,624660095,DE
-624660096,624660111,GB
-624660112,624660127,ES
-624660128,624660131,FR
-624660132,624660135,PL
-624660136,624660139,ES
-624660140,624660143,GB
-624660144,624660151,ES
-624660152,624660155,PL
-624660156,624660159,GB
-624660160,624660167,FR
-624660168,624660171,PL
-624660172,624660191,FR
-624660192,624660195,CH
-624660196,624660199,PL
-624660200,624660479,FR
-624660480,624660495,ES
-624660496,624660499,FR
-624660500,624660503,PL
-624660504,624660511,NL
-624660512,624660543,PT
-624660544,624660559,FR
-624660560,624660563,ES
-624660564,624660567,FR
-624660568,624660575,ES
-624660576,624660591,PT
-624660592,624660607,IE
-624660608,624660671,CH
-624660672,624660703,FR
-624660704,624660719,IT
-624660720,624660723,GB
-624660724,624660727,PL
-624660728,624660735,NL
-624660736,624660751,IE
-624660752,624660755,PT
-624660756,624660759,GB
-624660760,624660767,FR
-624660768,624660775,DE
-624660776,624660803,FR
-624660804,624660807,PL
-624660808,624660827,FR
-624660828,624660831,PL
-624660832,624660839,ES
-624660840,624660843,FR
-624660844,624660847,ES
-624660848,624660855,PL
-624660856,624660859,NL
-624660860,624660863,BE
-624660864,624660879,FR
-624660880,624660887,NL
-624660888,624660891,DE
-624660892,624660895,CH
-624660896,624660919,FR
-624660920,624660923,PL
-624660924,624660991,GB
-624660992,624661119,PL
-624661120,624661159,FR
-624661160,624661163,IT
-624661164,624661175,FR
-624661176,624661247,ES
-624661248,624661255,PL
-624661256,624661259,LT
-624661260,624661279,FR
-624661280,624661283,ES
-624661284,624661295,FR
-624661296,624661343,DE
-624661344,624661503,FR
-624661504,624661759,DE
-624661760,624661767,FR
-624661768,624661771,DE
-624661772,624661775,FI
-624661776,624661787,FR
+624658484,624660827,FR
+624660828,624660831,ES
+624660832,624661247,FR
+624661248,624661251,ES
+624661252,624661787,FR
624661788,624661788,RO
-624661789,624661791,FR
-624661792,624661823,ES
-624661824,624661827,IT
-624661828,624661831,PL
-624661832,624661839,FR
-624661840,624661855,PL
-624661856,624661863,FR
-624661864,624661871,ES
-624661872,624661875,PL
-624661876,624661879,CZ
-624661880,624661887,LT
-624661888,624661915,FR
-624661916,624661919,BE
-624661920,624661935,ES
-624661936,624661951,FR
-624661952,624661955,DE
+624661789,624661955,FR
624661956,624661959,PL
-624661960,624661967,FR
-624661968,624661975,DE
-624661976,624661979,FR
-624661980,624661983,IE
-624661984,624662015,FR
-624662016,624662047,IT
-624662048,624662111,FR
-624662112,624662119,LT
-624662120,624662127,ES
-624662128,624662143,FR
-624662144,624662175,PL
-624662176,624662179,FR
-624662180,624662183,CH
-624662184,624662191,FR
-624662192,624662207,GB
-624662208,624662211,PL
-624662212,624662215,IE
-624662216,624662227,FR
-624662228,624662231,BE
-624662232,624662239,ES
-624662240,624662243,FR
-624662244,624662251,PL
-624662252,624662311,FR
-624662312,624662315,GB
-624662316,624662319,ES
-624662320,624662327,FR
-624662328,624662331,PT
-624662332,624662399,FR
-624662400,624662431,GB
-624662432,624662447,BE
-624662448,624662471,FR
-624662472,624662475,DE
-624662476,624662479,FR
-624662480,624662527,IE
-624662528,624662543,DE
-624662544,624662591,IE
-624662592,624662631,FR
-624662632,624662635,DE
-624662636,624662639,NL
-624662640,624662647,PL
-624662648,624662651,FR
-624662652,624662655,ES
-624662656,624662687,FR
-624662688,624662691,PT
-624662692,624662695,PL
-624662696,624662703,FR
-624662704,624662719,CZ
-624662720,624662735,BE
-624662736,624662739,FR
-624662740,624662751,LT
-624662752,624662755,GB
-624662756,624662759,FR
-624662760,624662763,IE
-624662764,624662767,FR
-624662768,624662783,CH
-624662784,624662799,PL
-624662800,624662807,FR
-624662808,624662811,CH
-624662812,624662815,IT
-624662816,624662847,ES
-624662848,624662895,FR
-624662896,624662911,ES
-624662912,624663039,IE
-624663040,624663407,GB
-624663408,624663423,FI
-624663424,624663455,PL
-624663456,624663487,GB
-624663488,624663519,NL
-624663520,624663551,FR
-624663552,624663583,GB
-624663584,624663615,FR
-624663616,624663647,NL
-624663648,624663663,CZ
-624663664,624663667,FR
-624663668,624663671,GB
-624663672,624663679,IT
-624663680,624663683,PT
-624663684,624663687,PL
-624663688,624663695,GB
-624663696,624663711,FR
-624663712,624663743,IE
-624663744,624663759,FR
-624663760,624663767,ES
-624663768,624663783,FR
-624663784,624663787,BE
-624663788,624663791,ES
-624663792,624663807,NL
-624663808,624663839,FR
-624663840,624663847,NL
-624663848,624663855,GB
-624663856,624663863,LT
-624663864,624663867,PT
-624663868,624663871,PL
-624663872,624663879,FR
-624663880,624663883,GB
-624663884,624663887,NL
-624663888,624663891,BE
-624663892,624663895,PL
-624663896,624663903,GB
-624663904,624663919,FR
-624663920,624663935,ES
-624663936,624663951,FI
-624663952,624663959,FR
-624663960,624663967,CZ
-624663968,624663971,DE
-624663972,624663975,PL
-624663976,624663983,GB
-624663984,624664007,FR
-624664008,624664011,IT
-624664012,624664023,PL
-624664024,624664027,GB
-624664028,624664031,FR
-624664032,624664039,GB
-624664040,624664047,BE
-624664048,624664063,IE
-624664064,624664067,FR
-624664068,624664071,ES
-624664072,624664079,PL
-624664080,624664107,FR
-624664108,624664115,PL
-624664116,624664119,ES
-624664120,624664123,CH
-624664124,624664127,FR
-624664128,624664135,BE
-624664136,624664351,FR
-624664352,624664367,ES
-624664368,624664471,FR
-624664472,624664475,PT
-624664476,624664483,PL
-624664484,624664487,FR
-624664488,624664495,GB
-624664496,624664511,ES
-624664512,624664527,IE
-624664528,624664531,IT
-624664532,624664535,FR
-624664536,624664539,PL
-624664540,624664583,FR
-624664584,624664591,CH
-624664592,624664595,FR
-624664596,624664599,BE
-624664600,624664603,GB
-624664604,624664607,IE
-624664608,624664611,CH
-624664612,624664615,FR
-624664616,624664619,PL
-624664620,624664623,FR
-624664624,624664627,ES
-624664628,624664631,FR
-624664632,624664635,PL
-624664636,624664655,FR
-624664656,624664659,PL
-624664660,624664663,ES
-624664664,624664667,FI
-624664668,624664671,GB
-624664672,624664703,IE
-624664704,624664767,IT
-624664768,624664775,GB
-624664776,624664783,BE
-624664784,624664795,IT
-624664796,624664799,FR
-624664800,624664807,DE
-624664808,624664811,FR
-624664812,624664815,PL
-624664816,624664823,ES
-624664824,624664831,NL
-624664832,624664863,IE
-624664864,624664895,FR
-624664896,624664959,NL
-624664960,624665087,FR
-624665088,624665135,PL
-624665136,624665143,FR
-624665144,624665147,ES
-624665148,624665151,PL
-624665152,624665187,FR
-624665188,624665191,PL
-624665192,624665199,GB
-624665200,624665207,PL
-624665208,624665211,FR
-624665212,624665215,IT
-624665216,624665231,FR
-624665232,624665235,PL
-624665236,624665247,FR
-624665248,624665259,PT
-624665260,624665263,GB
-624665264,624665271,IT
-624665272,624665275,CZ
-624665276,624665279,FR
-624665280,624665283,DE
-624665284,624665287,IT
-624665288,624665295,FR
-624665296,624665303,GB
-624665304,624665359,FR
-624665360,624665367,DE
-624665368,624665375,FR
-624665376,624665379,CZ
-624665380,624665383,PT
-624665384,624665391,ES
-624665392,624665407,FR
-624665408,624665471,IT
-624665472,624665475,FR
-624665476,624665479,DE
-624665480,624665495,FR
-624665496,624665503,PL
-624665504,624665535,FR
-624665536,624665551,PL
-624665552,624665555,IE
-624665556,624665559,FR
-624665560,624665567,CZ
-624665568,624665587,FR
+624661960,624663951,FR
+624663952,624663955,ES
+624663956,624664527,FR
+624664528,624664531,ES
+624664532,624664676,FR
+624664677,624664677,IE
+624664678,624665587,FR
624665588,624665591,DE
-624665592,624665595,FR
-624665596,624665599,PL
-624665600,624665607,BE
-624665608,624665611,PL
-624665612,624665615,ES
-624665616,624665631,FR
-624665632,624665647,PL
-624665648,624665663,FR
-624665664,624665695,PT
-624665696,624665711,FR
-624665712,624665727,GB
-624665728,624665759,FR
-624665760,624665767,IE
-624665768,624665771,IT
-624665772,624665775,FR
-624665776,624665779,PL
-624665780,624665783,FI
-624665784,624665787,FR
-624665788,624665791,PL
-624665792,624665795,ES
-624665796,624665803,PL
-624665804,624665807,FR
-624665808,624665811,CH
-624665812,624665823,FR
-624665824,624665831,CH
-624665832,624665839,DE
-624665840,624665851,ES
-624665852,624665859,FR
-624665860,624665863,IT
-624665864,624665871,FR
-624665872,624665887,IE
-624665888,624665943,FR
-624665944,624665951,PL
-624665952,624665955,IE
-624665956,624665959,FR
-624665960,624665967,IE
-624665968,624665975,FR
-624665976,624665983,GB
-624665984,624666035,FR
-624666036,624666039,DE
-624666040,624666043,FR
-624666044,624666047,GB
-624666048,624666111,NL
-624666112,624666367,FR
-624666368,624666371,PL
-624666372,624666379,GB
-624666380,624666383,PL
-624666384,624666391,FR
-624666392,624666399,GB
-624666400,624666431,BE
-624666432,624666495,GB
-624666496,624666623,FR
-624666624,624666655,CH
-624666656,624666663,GB
-624666664,624666667,LT
-624666668,624666671,FR
-624666672,624666687,GB
-624666688,624666691,FR
-624666692,624666695,ES
-624666696,624666699,PT
-624666700,624666703,CH
-624666704,624666719,FR
-624666720,624666727,DE
-624666728,624666735,FR
-624666736,624666739,DE
-624666740,624666743,BE
-624666744,624666755,PL
-624666756,624666759,IT
-624666760,624666767,DE
-624666768,624666791,FR
-624666792,624666795,ES
-624666796,624666799,GB
-624666800,624666879,FR
-624666880,624666883,ES
-624666884,624666887,FR
-624666888,624666895,BE
-624666896,624666899,GB
-624666900,624666903,FR
-624666904,624666907,ES
-624666908,624666911,FR
-624666912,624666919,PT
-624666920,624666923,GB
-624666924,624666943,FR
-624666944,624666959,GB
-624666960,624666975,PL
-624666976,624666991,ES
-624666992,624666995,PL
-624666996,624666999,FR
-624667000,624667007,CZ
-624667008,624667039,BE
-624667040,624667075,FR
-624667076,624667079,PL
-624667080,624667083,IT
-624667084,624667087,PL
-624667088,624667103,GB
-624667104,624667107,FR
-624667108,624667111,PL
-624667112,624667115,ES
-624667116,624667119,CZ
-624667120,624667135,BE
-624667136,624667199,FR
-624667200,624667231,ES
-624667232,624667263,FR
-624667264,624667279,IE
-624667280,624667395,FR
-624667396,624667407,GB
-624667408,624667439,IE
-624667440,624667455,CH
-624667456,624667471,FR
-624667472,624667475,PT
-624667476,624667479,IT
-624667480,624667483,DE
-624667484,624667487,IE
-624667488,624667519,PT
-624667520,624667603,PL
-624667604,624667607,GB
-624667608,624667615,BE
-624667616,624667623,PL
-624667624,624667631,LT
-624667632,624667639,FR
-624667640,624667647,PL
-624667648,624667711,ES
-624667712,624667775,FI
-624667776,624667827,FR
-624667828,624667831,PL
-624667832,624667839,BE
-624667840,624667847,FR
-624667848,624667851,LT
-624667852,624667855,DE
-624667856,624667879,IE
-624667880,624667883,FR
-624667884,624667887,IE
-624667888,624667895,GB
-624667896,624667899,PL
-624667900,624667903,FR
-624667904,624667935,PT
-624667936,624667951,FR
-624667952,624667967,GB
-624667968,624667971,DE
-624667972,624667975,FR
-624667976,624667983,PL
-624667984,624667991,FR
-624667992,624667999,PL
-624668000,624668015,IT
-624668016,624668023,FR
-624668024,624668027,GB
-624668028,624668043,FR
-624668044,624668047,PL
-624668048,624668055,GB
-624668056,624668063,IE
-624668064,624668071,PT
-624668072,624668095,PL
-624668096,624668159,PT
-624668160,624668271,FR
-624668272,624668275,BE
-624668276,624668319,FR
-624668320,624668335,GB
-624668336,624668351,FR
-624668352,624668367,GB
-624668368,624668383,PL
-624668384,624668415,PT
-624668416,624668447,FR
-624668448,624668479,GB
-624668480,624668511,DE
-624668512,624668543,NL
-624668544,624668547,CZ
-624668548,624668551,FR
-624668552,624668559,IE
-624668560,624668575,FR
-624668576,624668583,GB
-624668584,624668607,FR
-624668608,624668639,PT
+624665592,624665951,FR
+624665952,624665955,NL
+624665956,624668639,FR
624668640,624668643,NL
-624668644,624668647,IE
-624668648,624668655,FR
-624668656,624668659,NL
-624668660,624668663,FR
-624668664,624668667,PL
-624668668,624668671,PT
-624668672,624668703,FR
-624668704,624668707,PL
-624668708,624668711,IE
-624668712,624668715,FR
-624668716,624668719,IE
-624668720,624668767,FR
-624668768,624668791,IT
-624668792,624668799,IE
-624668800,624668815,IT
-624668816,624668847,FR
-624668848,624668863,IE
-624668864,624668927,FR
-624668928,624668931,GB
-624668932,624668935,FR
-624668936,624668939,PL
-624668940,624668959,FR
-624668960,624668963,PL
-624668964,624668995,FR
-624668996,624668999,NL
-624669000,624669011,FR
-624669012,624669015,GB
-624669016,624669023,FR
-624669024,624669031,IT
-624669032,624669043,FR
-624669044,624669047,PL
-624669048,624669055,IE
-624669056,624669119,IT
-624669120,624669127,FR
-624669128,624669131,DE
-624669132,624669135,IT
-624669136,624669183,FR
-624669184,624669215,NL
-624669216,624669231,FR
-624669232,624669247,ES
-624669248,624669251,PL
-624669252,624669255,FR
-624669256,624669263,IE
-624669264,624669271,IT
-624669272,624669275,PL
-624669276,624669279,FR
-624669280,624669295,PL
-624669296,624669303,NL
-624669304,624669311,FR
-624669312,624669327,PL
-624669328,624669343,FR
-624669344,624669359,LT
-624669360,624669367,PL
-624669368,624669371,FR
-624669372,624669375,PL
-624669376,624669439,FR
-624669440,624669459,PL
-624669460,624669463,FI
-624669464,624669499,FR
-624669500,624669515,PL
-624669516,624669519,BE
-624669520,624669567,FR
-624669568,624669571,DE
-624669572,624669579,FR
-624669580,624669583,DE
-624669584,624669591,IT
-624669592,624669599,DE
-624669600,624669695,FR
-624669696,624669699,CH
-624669700,624669703,DE
-624669704,624669711,PL
-624669712,624669727,ES
-624669728,624669743,FR
-624669744,624669747,IT
-624669748,624669751,FR
-624669752,624669755,PL
-624669756,624669795,FR
-624669796,624669799,DE
-624669800,624669807,IE
-624669808,624669811,PL
-624669812,624669815,FR
-624669816,624669823,PL
-624669824,624669831,NL
-624669832,624669855,FR
-624669856,624669871,GB
-624669872,624669879,NL
-624669880,624669919,FR
-624669920,624669935,NL
-624669936,624669939,PL
-624669940,624669943,GB
-624669944,624669951,FR
-624669952,624669959,PL
-624669960,624669963,ES
-624669964,624669967,GB
-624669968,624669975,NL
-624669976,624669983,ES
-624669984,624669987,PL
-624669988,624669991,ES
-624669992,624669999,PL
-624670000,624670003,GB
-624670004,624670007,CH
-624670008,624670015,PL
-624670016,624670095,FR
-624670096,624670103,PL
-624670104,624670127,FR
-624670128,624670143,PL
-624670144,624670147,FR
-624670148,624670151,PL
-624670152,624670159,FR
-624670160,624670167,PL
-624670168,624670171,GB
-624670172,624670175,ES
-624670176,624670183,FI
-624670184,624670191,IT
-624670192,624670195,FR
-624670196,624670199,CH
-624670200,624670271,FR
-624670272,624670303,PL
-624670304,624670307,NL
-624670308,624670315,CH
-624670316,624670319,ES
-624670320,624670343,NL
-624670344,624670347,ES
-624670348,624670351,NL
-624670352,624670359,FR
-624670360,624670367,NL
-624670368,624670383,PL
-624670384,624670391,FR
-624670392,624670395,NL
-624670396,624670399,ES
-624670400,624670403,FR
-624670404,624670407,PL
-624670408,624670411,FR
-624670412,624670415,GB
-624670416,624670431,DE
-624670432,624670447,FR
-624670448,624670463,CH
-624670464,624670479,FR
-624670480,624670487,GB
-624670488,624670591,FR
-624670592,624670599,GB
-624670600,624670603,FR
-624670604,624670607,GB
-624670608,624670615,FR
-624670616,624670619,GB
-624670620,624670623,FR
-624670624,624670655,NL
-624670656,624670659,CZ
-624670660,624670663,IE
-624670664,624670667,BE
-624670668,624670671,NL
-624670672,624670687,ES
-624670688,624670771,FR
-624670772,624670775,PT
-624670776,624670783,CH
-624670784,624670791,FR
-624670792,624670803,GB
-624670804,624670815,PL
-624670816,624670863,FR
-624670864,624670871,GB
-624670872,624670879,FR
-624670880,624670895,PT
-624670896,624670903,CH
-624670904,624670911,FR
-624670912,624670919,GB
-624670920,624670927,FR
-624670928,624670935,PL
-624670936,624670959,FR
-624670960,624670975,PL
-624670976,624671239,GB
-624671240,624671243,FR
-624671244,624671247,PL
-624671248,624671251,ES
-624671252,624671255,PL
-624671256,624671279,FR
-624671280,624671291,ES
-624671292,624671423,FR
-624671424,624671427,GB
-624671428,624671431,BE
-624671432,624671439,FR
-624671440,624671455,ES
-624671456,624671463,NL
-624671464,624671467,PL
-624671468,624671471,ES
-624671472,624671475,FR
-624671476,624671479,ES
-624671480,624671483,FR
-624671484,624671487,GB
-624671488,624671743,FR
-624671744,624671775,IT
-624671776,624671807,DE
-624671808,624671823,PL
-624671824,624671831,FR
-624671832,624671839,DE
-624671840,624671855,PL
-624671856,624671887,FR
-624671888,624671895,PT
-624671896,624671903,DE
-624671904,624671919,PL
-624671920,624671927,FR
-624671928,624671935,IT
-624671936,624671943,CZ
-624671944,624671967,FR
-624671968,624671999,IT
-624672000,624672015,FR
-624672016,624672019,GB
-624672020,624672023,DE
-624672024,624672055,FR
-624672056,624672063,NL
-624672064,624672067,FR
-624672068,624672071,DE
-624672072,624672079,PL
-624672080,624672083,DE
-624672084,624672127,PT
-624672128,624672131,GB
-624672132,624672135,PL
-624672136,624672151,FR
-624672152,624672159,PL
-624672160,624672179,FR
-624672180,624672183,IE
-624672184,624672207,FR
-624672208,624672223,PT
-624672224,624672255,GB
-624672256,624672511,FR
-624672512,624672515,GB
-624672516,624672523,FR
-624672524,624672527,DE
-624672528,624672547,FR
-624672548,624672551,PL
-624672552,624672555,IT
-624672556,624672559,DE
-624672560,624672563,IE
-624672564,624672575,FR
-624672576,624672607,PT
-624672608,624672615,GB
-624672616,624672619,PT
-624672620,624672623,PL
-624672624,624672655,FR
-624672656,624672659,DE
-624672660,624672735,FR
-624672736,624672767,PT
-624672768,624672927,FR
-624672928,624672943,PL
-624672944,624672951,FR
-624672952,624672959,ES
-624672960,624672991,NL
-624672992,624673003,FR
-624673004,624673007,PL
-624673008,624673279,FR
-624673280,624673283,PL
-624673284,624673287,FR
-624673288,624673295,GB
-624673296,624673299,FR
-624673300,624673303,PT
-624673304,624673307,NL
-624673308,624673311,BE
-624673312,624673343,FR
-624673344,624673375,BE
-624673376,624673407,FR
-624673408,624673431,PL
-624673432,624673439,PT
-624673440,624673447,BE
-624673448,624673451,FR
-624673452,624673455,PL
-624673456,624673459,CH
-624673460,624673471,PL
-624673472,624673487,DE
-624673488,624673503,PL
-624673504,624673511,ES
-624673512,624673535,FR
+624668644,624669795,FR
+624669796,624669799,ES
+624669800,624672547,FR
+624672548,624672551,ES
+624672552,624673451,FR
+624673452,624673455,ES
+624673456,624673535,FR
624673536,624673791,ES
-624673792,624673799,PL
-624673800,624673803,IT
-624673804,624673807,DE
-624673808,624673811,PL
-624673812,624673815,LT
-624673816,624673839,FR
-624673840,624673855,PL
-624673856,624673859,IT
-624673860,624673863,FR
-624673864,624673871,CZ
-624673872,624673879,GB
-624673880,624673887,FR
-624673888,624673891,PL
-624673892,624673895,FR
-624673896,624673903,GB
-624673904,624673927,ES
-624673928,624673931,DE
-624673932,624673935,FR
-624673936,624673939,NL
-624673940,624673943,ES
-624673944,624673951,NL
-624673952,624673955,DE
-624673956,624673959,PL
-624673960,624673963,GB
-624673964,624673967,DE
-624673968,624673983,FR
-624673984,624673987,DE
-624673988,624673991,ES
-624673992,624673995,IT
-624673996,624673999,FR
-624674000,624674003,NL
-624674004,624674007,ES
-624674008,624674011,IT
-624674012,624674015,GB
-624674016,624674047,PT
-624674048,624674303,ES
-624674304,624674307,GB
-624674308,624674311,PL
-624674312,624674351,FR
-624674352,624674367,FI
-624674368,624674383,DE
-624674384,624674395,IT
-624674396,624674399,PL
-624674400,624674403,DE
-624674404,624674407,PL
-624674408,624674411,DE
-624674412,624674415,ES
-624674416,624674431,FR
-624674432,624674435,PL
-624674436,624674447,FR
-624674448,624674451,GB
-624674452,624674455,ES
-624674456,624674459,IT
-624674460,624674463,ES
-624674464,624674495,FR
-624674496,624674503,GB
-624674504,624674511,FR
-624674512,624674527,NL
-624674528,624674623,FR
-624674624,624674655,ES
-624674656,624674687,FR
-624674688,624674703,DE
-624674704,624674707,PL
-624674708,624674711,DE
-624674712,624674715,PL
-624674716,624674719,BE
-624674720,624674739,PL
-624674740,624674743,NL
-624674744,624674751,ES
-624674752,624674815,FR
-624674816,624674847,CH
-624674848,624674879,FR
-624674880,624674911,NL
-624674912,624674919,GB
-624674920,624674927,IT
-624674928,624674935,FR
-624674936,624674943,PT
-624674944,624675027,FR
-624675028,624675031,PL
-624675032,624675039,FR
-624675040,624675043,IE
-624675044,624675047,FR
-624675048,624675055,ES
-624675056,624675059,PL
-624675060,624675071,FR
-624675072,624675327,DE
-624675328,624675343,FR
-624675344,624675347,CZ
-624675348,624675351,NL
-624675352,624675359,PT
-624675360,624675375,FR
-624675376,624675383,IT
-624675384,624675387,NL
-624675388,624675391,FR
-624675392,624675423,ES
-624675424,624675439,FR
-624675440,624675447,PL
-624675448,624675535,FR
-624675536,624675543,GB
-624675544,624675547,FI
-624675548,624675583,PL
-624675584,624675615,FR
-624675616,624675623,IT
-624675624,624675631,FR
-624675632,624675639,GB
-624675640,624675647,FR
-624675648,624675651,FI
-624675652,624675663,ES
-624675664,624675679,IT
-624675680,624675683,NL
-624675684,624675687,PT
-624675688,624675691,PL
-624675692,624675695,IT
-624675696,624675711,FR
-624675712,624675719,ES
-624675720,624675727,NL
-624675728,624675731,PL
-624675732,624675743,FR
-624675744,624675775,BE
-624675776,624675787,PL
-624675788,624675791,FR
-624675792,624675799,GB
-624675800,624675803,CZ
-624675804,624675807,ES
-624675808,624675839,GB
-624675840,624675871,FR
-624675872,624675903,NL
-624675904,624675919,PL
-624675920,624675947,FR
-624675948,624675951,PL
-624675952,624675999,FR
-624676000,624676003,PL
+624673792,624673903,FR
+624673904,624673919,ES
+624673920,624675691,FR
+624675692,624675695,ES
+624675696,624675775,FR
+624675776,624675779,ES
+624675780,624676003,FR
624676004,624676007,DE
-624676008,624676019,FR
-624676020,624676023,IT
-624676024,624676027,PT
-624676028,624676031,FR
-624676032,624676063,PL
-624676064,624676067,NL
-624676068,624676071,LU
-624676072,624676075,ES
-624676076,624676087,FR
+624676008,624676087,FR
624676088,624676091,DE
-624676092,624676095,FR
-624676096,624676099,PL
-624676100,624676103,FR
-624676104,624676111,GB
-624676112,624676115,NL
-624676116,624676119,GB
-624676120,624676123,DE
-624676124,624676127,FR
-624676128,624676135,NL
-624676136,624676139,BE
-624676140,624676143,FR
-624676144,624676159,PL
-624676160,624676175,CH
-624676176,624676179,NL
-624676180,624676183,DE
-624676184,624676191,NL
-624676192,624676207,FR
-624676208,624676215,ES
-624676216,624676219,PL
-624676220,624676223,ES
-624676224,624676311,FR
-624676312,624676315,PL
-624676316,624676319,NL
-624676320,624676327,GB
-624676328,624676363,FR
-624676364,624676367,NL
-624676368,624676399,FR
-624676400,624676403,GB
-624676404,624676431,FR
-624676432,624676435,PL
-624676436,624676439,ES
-624676440,624676447,NL
-624676448,624676479,IE
-624676480,624676503,FR
-624676504,624676507,GB
-624676508,624676511,FR
-624676512,624676607,ES
-624676608,624676611,FR
-624676612,624676615,PT
-624676616,624676623,GB
-624676624,624676627,PL
-624676628,624676631,GB
-624676632,624676635,IT
-624676636,624676639,FR
-624676640,624676671,NL
-624676672,624676687,PT
-624676688,624676703,FR
-624676704,624676711,BE
-624676712,624676715,FR
-624676716,624676719,IT
-624676720,624676735,FR
-624676736,624676799,BE
-624676800,624676863,PT
-624676864,624676911,FR
-624676912,624676919,BE
-624676920,624676923,FR
-624676924,624676927,ES
-624676928,624676935,CH
-624676936,624676939,PL
-624676940,624676943,PT
-624676944,624676947,PL
-624676948,624676951,GB
-624676952,624676959,NL
-624676960,624676991,FR
-624676992,624677119,PT
-624677120,624677255,FR
-624677256,624677259,ES
-624677260,624677263,NL
-624677264,624677271,CZ
-624677272,624677279,PT
-624677280,624677283,PL
-624677284,624677287,ES
-624677288,624677303,FR
-624677304,624677307,DE
-624677308,624677311,IT
-624677312,624677343,NL
-624677344,624677367,FR
-624677368,624677375,IE
-624677376,624677379,CH
-624677380,624677383,ES
-624677384,624677391,DE
-624677392,624677395,PT
-624677396,624677399,FR
-624677400,624677403,FI
-624677404,624677407,DE
-624677408,624677439,GB
-624677440,624677443,ES
-624677444,624677447,PL
-624677448,624677459,FR
-624677460,624677463,ES
-624677464,624677467,IE
-624677468,624677471,GB
-624677472,624677519,FR
-624677520,624677535,DE
-624677536,624677567,PT
-624677568,624677583,FR
-624677584,624677587,ES
-624677588,624677599,PL
-624677600,624677603,CH
-624677604,624677607,GB
-624677608,624677615,CZ
-624677616,624677627,PL
-624677628,624677631,GB
-624677632,624677671,FR
-624677672,624677679,GB
-624677680,624677683,PL
-624677684,624677695,GB
-624677696,624677703,FR
-624677704,624677711,ES
-624677712,624677731,FR
-624677732,624677735,PL
-624677736,624677743,ES
-624677744,624677751,GB
-624677752,624677759,FR
-624677760,624677763,NL
-624677764,624677767,PL
-624677768,624677775,GB
-624677776,624677783,DE
-624677784,624677787,FR
-624677788,624677791,PL
-624677792,624677799,NL
-624677800,624677803,GB
-624677804,624677807,PL
-624677808,624677959,FR
-624677960,624677967,IE
-624677968,624677983,TN
-624677984,624678015,PT
-624678016,624678183,FR
-624678184,624678195,PL
-624678196,624678199,FR
-624678200,624678239,ES
-624678240,624678255,FR
-624678256,624678259,PL
-624678260,624678263,FR
-624678264,624678279,ES
-624678280,624678283,LT
-624678284,624678287,FR
-624678288,624678311,GB
-624678312,624678319,FR
-624678320,624678335,ES
-624678336,624678351,FR
-624678352,624678355,PT
-624678356,624678359,PL
-624678360,624678363,ES
-624678364,624678367,FR
-624678368,624678375,CH
-624678376,624678383,ES
-624678384,624678387,FR
-624678388,624678395,PT
-624678396,624678399,FR
-624678400,624678415,IE
-624678416,624678463,FR
-624678464,624678479,CH
-624678480,624678483,FR
-624678484,624678487,ES
-624678488,624678491,PT
-624678492,624678511,FR
-624678512,624678527,PL
-624678528,624678559,PT
-624678560,624678563,IT
-624678564,624678567,DE
-624678568,624678591,FR
-624678592,624678655,NL
-624678656,624678663,FR
-624678664,624678667,ES
-624678668,624678671,DE
-624678672,624678687,FR
-624678688,624678695,LT
-624678696,624678703,IT
-624678704,624678707,NL
-624678708,624678711,DE
-624678712,624678715,FR
-624678716,624678719,PL
-624678720,624678723,ES
-624678724,624678727,PL
-624678728,624678735,IT
-624678736,624678743,FR
-624678744,624678747,CH
-624678748,624678751,BE
-624678752,624678783,NL
-624678784,624678847,FR
-624678848,624678855,GB
-624678856,624678863,PL
-624678864,624678879,PT
-624678880,624678887,PL
-624678888,624678891,DE
-624678892,624678895,IE
-624678896,624678899,IT
-624678900,624678903,GB
-624678904,624678907,ES
-624678908,624678911,FR
-624678912,624679167,GB
-624679168,624679175,PL
-624679176,624679183,DE
-624679184,624679199,PL
-624679200,624679203,GB
-624679204,624679207,FR
-624679208,624679211,ES
-624679212,624679215,IT
-624679216,624679231,IE
-624679232,624679247,FR
-624679248,624679255,PT
-624679256,624679259,PL
-624679260,624679263,ES
-624679264,624679295,FR
-624679296,624679299,PL
-624679300,624679303,ES
-624679304,624679307,FR
-624679308,624679311,GB
-624679312,624679327,FR
-624679328,624679331,PL
-624679332,624679335,DE
-624679336,624679339,FR
-624679340,624679343,DE
-624679344,624679359,FR
-624679360,624679391,IE
-624679392,624679407,BE
-624679408,624679423,PL
-624679424,624679679,DE
-624679680,624679687,PL
-624679688,624679711,FR
-624679712,624679743,BE
-624679744,624679747,CZ
-624679748,624679751,PT
-624679752,624679767,PL
-624679768,624679771,NL
-624679772,624679775,PL
-624679776,624679779,FR
-624679780,624679783,NL
-624679784,624679815,FR
-624679816,624679819,IT
-624679820,624679823,PL
-624679824,624679827,PT
-624679828,624679831,DE
-624679832,624679839,GB
-624679840,624679843,FR
-624679844,624679847,PL
-624679848,624679851,PT
-624679852,624679855,IE
-624679856,624679859,PL
-624679860,624679863,FR
-624679864,624679867,ES
-624679868,624679871,FR
-624679872,624679903,GB
-624679904,624679907,IT
-624679908,624679911,PL
-624679912,624679915,ES
-624679916,624679919,FR
-624679920,624679923,BE
-624679924,624679927,FR
-624679928,624679935,IE
-624679936,624680463,FR
-624680464,624680467,PL
-624680468,624680475,FR
-624680476,624680479,PL
-624680480,624680499,FR
-624680500,624680503,NL
-624680504,624680507,PL
-624680508,624680539,FR
-624680540,624680543,IT
-624680544,624680559,FR
-624680560,624680563,PL
-624680564,624680567,NL
-624680568,624680639,FR
-624680640,624680703,FI
-624680704,624680743,FR
-624680744,624680747,BE
-624680748,624680751,NL
-624680752,624680767,PL
-624680768,624680783,CZ
-624680784,624680799,GB
-624680800,624680815,FR
-624680816,624680831,DE
-624680832,624680847,FR
-624680848,624680863,PT
-624680864,624680927,FR
-624680928,624680931,DE
-624680932,624680935,GB
-624680936,624680939,ES
-624680940,624680943,NL
-624680944,624680951,FR
-624680952,624680959,PT
-624680960,624680991,FR
-624680992,624680995,FI
-624680996,624681023,FR
-624681024,624681055,ES
-624681056,624681071,FR
-624681072,624681079,PL
-624681080,624681083,DE
-624681084,624681087,ES
-624681088,624681095,GB
-624681096,624681103,NL
-624681104,624681111,FR
-624681112,624681115,DE
-624681116,624681151,FR
-624681152,624681215,PT
-624681216,624681247,PL
-624681248,624681255,IT
-624681256,624681259,FR
-624681260,624681263,PL
-624681264,624681267,FR
-624681268,624681271,CZ
-624681272,624681279,GB
-624681280,624681311,FR
-624681312,624681327,PL
-624681328,624681331,CH
-624681332,624681335,PL
-624681336,624681343,FR
-624681344,624681347,CH
-624681348,624681359,FR
-624681360,624681363,PL
-624681364,624681367,CZ
-624681368,624681375,PL
-624681376,624681439,FR
-624681440,624681447,GB
-624681448,624681451,DE
-624681452,624681455,PL
-624681456,624681459,GB
-624681460,624681463,IT
-624681464,624681471,PL
-624681472,624681727,GB
-624681728,624681763,PL
-624681764,624681767,FR
-624681768,624681771,BE
-624681772,624681775,DE
-624681776,624681791,FR
-624681792,624681795,PL
-624681796,624681803,FR
-624681804,624681823,PL
-624681824,624681855,CZ
-624681856,624681919,FR
-624681920,624681923,DE
-624681924,624681927,IE
-624681928,624681931,PL
-624681932,624681967,FR
-624681968,624681971,PL
-624681972,624681975,BE
-624681976,624681979,IE
-624681980,624681983,ES
-624681984,624681999,PL
-624682000,624682003,ES
-624682004,624682007,PL
-624682008,624682047,FR
-624682048,624682059,GB
-624682060,624682063,IE
-624682064,624682071,PT
-624682072,624682075,GB
-624682076,624682079,PL
-624682080,624682083,FR
-624682084,624682087,NL
-624682088,624682103,FR
-624682104,624682111,IE
-624682112,624682127,PL
-624682128,624682143,ES
-624682144,624682167,FR
-624682168,624682175,GB
-624682176,624682207,FR
-624682208,624682215,BE
-624682216,624682223,PL
-624682224,624682259,FR
-624682260,624682263,GB
-624682264,624682267,ES
-624682268,624682271,PT
-624682272,624682303,FR
-624682304,624682319,BE
-624682320,624682323,ES
-624682324,624682335,PL
-624682336,624682339,FR
-624682340,624682343,GB
-624682344,624682347,PL
-624682348,624682351,ES
-624682352,624682355,IT
-624682356,624682359,FR
-624682360,624682367,ES
-624682368,624682495,FR
-624682496,624682559,ES
-624682560,624682623,FR
-624682624,624682639,ES
-624682640,624682655,BE
-624682656,624682687,ES
-624682688,624682751,FR
-624682752,624682767,DE
-624682768,624682783,FR
-624682784,624682787,ES
-624682788,624682791,IT
-624682792,624682795,DE
-624682796,624682799,ES
-624682800,624682879,FR
-624682880,624682911,GB
-624682912,624682919,NL
-624682920,624682927,IE
-624682928,624682931,PL
-624682932,624682935,FR
-624682936,624682939,PL
-624682940,624682943,DE
-624682944,624682967,PL
-624682968,624682971,GB
-624682972,624682975,PT
-624682976,624682991,IT
-624682992,624683011,FR
-624683012,624683015,PL
-624683016,624683023,ES
-624683024,624683031,PL
-624683032,624683039,GB
-624683040,624683047,BE
-624683048,624683051,FR
-624683052,624683055,IT
-624683056,624683063,ES
-624683064,624683067,FR
-624683068,624683071,GB
-624683072,624683079,FR
-624683080,624683083,PL
-624683084,624683087,FR
-624683088,624683095,GB
-624683096,624683099,NL
-624683100,624683103,FR
-624683104,624683119,ES
-624683120,624683243,FR
-624683244,624683251,PL
-624683252,624683295,FR
-624683296,624683311,IT
-624683312,624683327,FR
-624683328,624683335,GB
-624683336,624683339,BE
-624683340,624683343,ES
-624683344,624683351,IE
-624683352,624683359,DE
-624683360,624683371,FR
-624683372,624683375,ES
-624683376,624683379,FR
-624683380,624683383,IT
-624683384,624683387,FR
-624683388,624683391,GB
-624683392,624683491,FR
-624683492,624683495,NL
-624683496,624683519,FR
-624683520,624683583,PT
-624683584,624683631,FR
-624683632,624683647,ES
-624683648,624683679,FR
-624683680,624683687,PT
-624683688,624683695,PL
-624683696,624683759,FR
-624683760,624683775,PL
-624683776,624683777,FR
-624683778,624683781,DE
-624683782,624683783,FR
-624683784,624683785,CZ
-624683786,624683789,DE
-624683790,624683799,FR
-624683800,624683803,FI
-624683804,624683807,FR
-624683808,624683811,ES
-624683812,624683823,DE
-624683824,624683839,FR
-624683840,624683843,IT
-624683844,624683847,PT
-624683848,624683879,FR
-624683880,624683883,NL
-624683884,624683887,GB
-624683888,624683895,PL
-624683896,624683911,FR
-624683912,624683923,PL
-624683924,624683927,ES
-624683928,624683943,FR
-624683944,624683947,PL
-624683948,624683951,FI
-624683952,624683967,PL
-624683968,624683971,IE
-624683972,624683975,DE
+624676092,624676715,FR
+624676716,624676719,ES
+624676720,624677463,FR
+624677464,624677467,ES
+624677468,624679199,FR
+624679200,624679203,ES
+624679204,624679843,FR
+624679844,624679847,ES
+624679848,624681807,FR
+624681808,624681823,BE
+624681824,624683775,FR
+624683776,624683779,DE
+624683780,624683783,FR
+624683784,624683787,DE
+624683788,624683975,FR
624683976,624683983,GB
-624683984,624683991,PL
-624683992,624683999,GB
-624684000,624684007,NL
-624684008,624684015,FR
-624684016,624684019,DE
-624684020,624684023,CH
-624684024,624684027,GB
-624684028,624684031,CH
-624684032,624684039,FR
-624684040,624684043,DE
-624684044,624684051,FR
-624684052,624684055,ES
-624684056,624684063,NL
-624684064,624684071,PT
-624684072,624684079,FR
-624684080,624684095,DE
-624684096,624684103,PT
-624684104,624684107,IE
-624684108,624684111,PL
-624684112,624684127,NL
-624684128,624684131,GB
-624684132,624684135,NL
-624684136,624684143,FR
-624684144,624684151,IT
-624684152,624684155,NL
-624684156,624684159,FR
-624684160,624684163,IT
-624684164,624684167,FR
-624684168,624684171,IT
-624684172,624684175,PL
-624684176,624684187,FR
-624684188,624684191,PL
-624684192,624684195,CH
-624684196,624684199,PL
-624684200,624684203,GB
-624684204,624684207,PL
+624683984,624684207,FR
624684208,624684211,ES
-624684212,624684219,FR
-624684220,624684223,DE
-624684224,624684335,FR
-624684336,624684343,IT
-624684344,624684347,FR
-624684348,624684351,GB
-624684352,624684359,PL
-624684360,624684363,DE
-624684364,624684371,PL
-624684372,624684379,FR
-624684380,624684383,GB
-624684384,624684399,IE
-624684400,624684415,FR
-624684416,624684419,PT
-624684420,624684447,FR
-624684448,624684479,GB
-624684480,624684511,FI
-624684512,624684543,NL
-624684544,624684583,FR
-624684584,624684587,PL
-624684588,624684591,ES
-624684592,624684599,FR
-624684600,624684603,PL
-624684604,624684607,FR
-624684608,624684615,ES
-624684616,624684619,IT
-624684620,624684639,PL
-624684640,624684655,ES
-624684656,624684671,FR
-624684672,624684679,DE
-624684680,624684683,FR
-624684684,624684687,CZ
-624684688,624684703,IE
-624684704,624684711,GB
-624684712,624684719,BE
-624684720,624684767,FR
-624684768,624684775,IE
-624684776,624684779,IT
-624684780,624684799,FR
+624684212,624684799,FR
624684800,624684803,DE
-624684804,624684807,PL
-624684808,624684815,DE
-624684816,624684831,GB
-624684832,624684839,PL
-624684840,624684843,ES
-624684844,624684847,PT
-624684848,624684863,FR
-624684864,624684867,GB
-624684868,624684871,FR
-624684872,624684879,DE
-624684880,624684883,FR
-624684884,624684887,ES
-624684888,624684891,FR
-624684892,624684895,NL
-624684896,624684899,FR
-624684900,624684903,BE
-624684904,624684907,GB
-624684908,624684911,ES
-624684912,624684915,PL
-624684916,624684919,FR
-624684920,624684927,PL
-624684928,624684991,FR
-624684992,624685023,NL
-624685024,624685027,PL
-624685028,624685031,FR
-624685032,624685035,PL
-624685036,624685039,ES
-624685040,624685047,PL
-624685048,624685051,FR
-624685052,624685055,CZ
-624685056,624685059,GB
-624685060,624685063,PL
-624685064,624685071,FR
-624685072,624685075,ES
-624685076,624685087,FR
-624685088,624685095,PL
-624685096,624685103,FR
-624685104,624685119,ES
-624685120,624685167,FR
-624685168,624685183,PL
-624685184,624685223,FR
-624685224,624685227,ES
-624685228,624685231,PL
-624685232,624685235,CZ
-624685236,624685239,BE
-624685240,624685243,IE
-624685244,624685247,BE
-624685248,624685279,FR
-624685280,624685311,GB
-624685312,624685327,FR
-624685328,624685343,DE
-624685344,624685439,FR
-624685440,624685443,PL
-624685444,624685447,GB
-624685448,624685451,FR
-624685452,624685455,PL
-624685456,624685471,CH
-624685472,624685483,PL
-624685484,624685503,FR
-624685504,624685535,ES
-624685536,624685539,FR
-624685540,624685543,GB
-624685544,624685551,FR
-624685552,624685555,ES
-624685556,624685567,PL
-624685568,624685679,FR
-624685680,624685683,PL
-624685684,624685687,FI
-624685688,624685695,FR
-624685696,624685703,IE
-624685704,624685707,IT
-624685708,624685711,DE
+624684804,624685711,FR
624685712,624685715,ES
-624685716,624685719,FR
-624685720,624685723,IE
-624685724,624685727,DE
-624685728,624685759,FR
-624685760,624685775,ES
-624685776,624685791,FR
-624685792,624685799,PL
-624685800,624685803,GB
-624685804,624685807,IT
-624685808,624685815,FR
-624685816,624685823,GB
-624685824,624685887,FR
-624685888,624685919,PT
-624685920,624685923,FR
-624685924,624685927,NL
-624685928,624685935,GB
-624685936,624685943,IT
-624685944,624685951,FR
-624685952,624685967,FI
-624685968,624685987,IE
-624685988,624685991,FR
-624685992,624685999,DE
-624686000,624686003,LT
-624686004,624686007,GB
-624686008,624686015,ES
-624686016,624686399,FR
-624686400,624686419,DE
-624686420,624686439,FR
-624686440,624686443,IT
-624686444,624686447,PT
-624686448,624686611,FR
-624686612,624686615,FI
-624686616,624686623,PL
-624686624,624686627,DE
-624686628,624686663,FR
-624686664,624686671,PL
-624686672,624686687,FI
-624686688,624686695,FR
-624686696,624686699,IT
-624686700,624686703,PT
-624686704,624686707,LT
-624686708,624686711,IE
-624686712,624686715,FR
-624686716,624686719,ES
-624686720,624686751,IE
-624686752,624686815,FR
-624686816,624686847,GB
-624686848,624686855,FR
-624686856,624686859,PL
-624686860,624686863,CZ
-624686864,624686867,CH
-624686868,624686879,FR
-624686880,624686887,GB
-624686888,624686947,FR
-624686948,624686955,CZ
-624686956,624686959,FR
-624686960,624686975,GB
-624686976,624687039,FR
-624687040,624687055,PL
-624687056,624687071,DE
-624687072,624687103,FR
-624687104,624687231,DE
-624687232,624687295,FR
-624687296,624687327,CH
-624687328,624687343,PL
-624687344,624687347,CZ
-624687348,624687351,PL
-624687352,624687615,FR
-624687616,624687619,PT
-624687620,624687623,DE
-624687624,624687627,GB
-624687628,624687679,FR
-624687680,624687695,PT
-624687696,624687707,FR
-624687708,624687711,DE
-624687712,624687783,FR
-624687784,624687791,PT
-624687792,624687819,FR
-624687820,624687823,NL
-624687824,624687827,PT
+624685716,624685799,FR
+624685800,624685803,ES
+624685804,624685919,FR
+624685920,624685923,ES
+624685924,624686627,FR
+624686628,624686631,ES
+624686632,624686667,FR
+624686668,624686671,ES
+624686672,624686711,FR
+624686712,624686715,ES
+624686716,624687343,FR
+624687344,624687346,CZ
+624687347,624687347,ES
+624687348,624687827,FR
624687828,624687831,ES
-624687832,624687835,CZ
-624687836,624687839,ES
-624687840,624687903,FR
-624687904,624687919,ES
-624687920,624687923,PL
-624687924,624687927,ES
-624687928,624687967,FR
-624687968,624687983,IT
-624687984,624687999,FR
-624688000,624688003,PL
-624688004,624688015,FR
-624688016,624688031,GB
-624688032,624688039,FR
-624688040,624688047,PL
-624688048,624688127,FR
-624688128,624688143,PT
-624688144,624688151,ES
-624688152,624688159,FR
-624688160,624688167,ES
-624688168,624688171,FR
-624688172,624688175,ES
-624688176,624688223,IE
-624688224,624688239,FR
-624688240,624688255,NL
-624688256,624688303,IE
-624688304,624688315,PL
-624688316,624688319,GB
-624688320,624688323,IT
-624688324,624688327,NL
-624688328,624688335,PL
-624688336,624688343,FR
-624688344,624688347,GB
-624688348,624688351,FR
-624688352,624688399,IE
-624688400,624688435,FR
-624688436,624688439,IE
-624688440,624688443,ES
-624688444,624688479,FR
-624688480,624688483,ES
-624688484,624688487,CZ
-624688488,624688491,PL
-624688492,624688495,GB
-624688496,624688575,PL
-624688576,624688639,DE
-624688640,624688643,PL
-624688644,624688647,IT
-624688648,624688655,PT
-624688656,624688663,NL
-624688664,624688671,ES
-624688672,624688691,PL
+624687832,624688307,FR
+624688308,624688311,ES
+624688312,624688487,FR
+624688488,624688491,ES
+624688492,624688639,FR
+624688640,624688643,ES
+624688644,624688691,FR
624688692,624688695,ES
-624688696,624688699,PL
-624688700,624688703,FI
-624688704,624688719,FR
-624688720,624688723,ES
-624688724,624688727,GB
-624688728,624688731,FR
-624688732,624688735,PL
-624688736,624688751,DE
-624688752,624688767,FR
-624688768,624688775,GB
-624688776,624688779,FR
-624688780,624688795,PL
-624688796,624688799,DE
-624688800,624688815,NL
-624688816,624688831,PL
-624688832,624688863,FR
-624688864,624688895,NL
-624688896,624688927,FR
-624688928,624688935,PL
-624688936,624688943,CH
-624688944,624688951,FR
-624688952,624688955,LT
-624688956,624688959,PL
-624688960,624688975,FR
-624688976,624688991,DE
-624688992,624688999,FR
-624689000,624689007,PT
-624689008,624689015,IE
-624689016,624689019,NL
-624689020,624689023,IT
-624689024,624689031,FR
-624689032,624689039,FI
-624689040,624689059,FR
-624689060,624689063,CZ
-624689064,624689067,ES
-624689068,624689071,FR
-624689072,624689075,ES
-624689076,624689079,BE
-624689080,624689083,FR
-624689084,624689087,NL
-624689088,624689103,GB
-624689104,624689111,IT
-624689112,624689115,NL
-624689116,624689119,FR
-624689120,624689123,GB
-624689124,624689131,FR
-624689132,624689135,GB
-624689136,624689143,BE
-624689144,624689147,DE
-624689148,624689151,FR
+624688696,624688779,FR
+624688780,624688783,ES
+624688784,624688791,FR
+624688792,624688795,ES
+624688796,624688831,FR
+624688832,624688835,ES
+624688836,624689076,FR
+624689077,624689078,BE
+624689079,624689151,FR
624689152,624691199,DE
624691200,624693247,FR
624693248,624695295,RU
@@ -13256,11 +3974,7 @@
624723968,624726015,BG
624726016,624728063,PS
624728064,624730111,FR
-624730112,624731951,A2
-624731952,624731967,DK
-624731968,624732031,A2
-624732032,624732079,DK
-624732080,624732159,A2
+624730112,624732159,DK
624732160,624734207,DE
624734208,624736255,RU
624736256,624738303,FR
@@ -13277,8 +3991,7 @@
624803840,624812031,DE
624812032,624813055,BO
624813056,624814079,IL
-624814080,624814335,NL
-624814336,624816127,GB
+624814080,624816127,GB
624816128,624818175,FR
624818176,624820223,ES
624820224,624885759,BE
@@ -13295,19 +4008,13 @@
625506304,625508351,PL
625508352,625512447,AZ
625512448,625514495,DE
-625514496,625515775,GB
-625515776,625516543,GG
+625514496,625515263,GB
+625515264,625516031,GG
+625516032,625516543,GB
625516544,625518591,BE
-625518592,625518631,US
-625518632,625518647,NL
-625518648,625518847,US
-625518848,625519615,NL
-625519616,625519999,US
-625520000,625520071,NL
-625520072,625520079,US
-625520080,625520127,NL
-625520128,625520135,US
-625520136,625520639,NL
+625518592,625518847,NL
+625518848,625519103,US
+625519104,625520639,NL
625520640,625522687,RU
625522688,625523967,SE
625523968,625524479,US
@@ -13322,8 +4029,8 @@
625688576,625704959,MD
625704960,625707007,GE
625707008,625709055,AT
-625709056,625709183,JO
-625709184,625713151,NL
+625709056,625711103,JO
+625711104,625713151,NL
625713152,625721343,DK
625721344,625725439,RU
625725440,625727487,PS
@@ -13337,7 +4044,7 @@
625786880,625795071,PS
625795072,625803263,SA
625803264,625811455,TR
-625811456,625815551,NL
+625811456,625815551,FR
625815552,625817599,IQ
625817600,625817911,NL
625817912,625817915,GB
@@ -13347,26 +4054,22 @@
625827840,625829887,IT
625829888,625831935,RU
625831936,625836031,IT
-625836032,625836251,KZ
-625836252,625836255,RU
-625836256,625836263,KZ
-625836264,625838079,RU
+625836032,625838079,RU
625838080,625840127,IT
625840128,625842175,GB
625842176,625844223,PL
625844224,625846271,IT
625846272,625848319,RS
-625848320,625851391,GB
-625851392,625851903,NL
-625851904,625852415,SE
-625852416,625854463,GB
+625848320,625854463,GB
625854464,625856511,DE
625856512,625860607,IT
625860608,625868799,CZ
625868800,625999871,RU
625999872,627048447,DE
627048448,627113983,DK
-627113984,627179519,RO
+627113984,627145727,RO
+627145728,627146751,ES
+627146752,627179519,NL
627179520,627212287,IR
627212288,627216383,FI
627216384,627218431,GB
@@ -13376,8 +4079,6 @@
627230720,627232767,IR
627232768,627236863,PL
627236864,627238911,IQ
-627238912,627239167,US
-627239168,627240959,EU
627240960,627245055,RU
627245056,627277823,KZ
627277824,627294207,SA
@@ -13390,63 +4091,34 @@
627834880,627965951,PL
627965952,628006911,RU
628006912,628015103,GE
-628015104,628015791,FR
-628015792,628015807,GB
-628015808,628015831,FR
-628015832,628015871,GB
-628015872,628016087,FR
-628016088,628016127,GB
-628016128,628016231,FR
-628016232,628016239,GB
-628016240,628016297,FR
-628016298,628016298,ES
-628016299,628016319,FR
-628016320,628016351,GB
-628016352,628016479,FR
-628016480,628016511,GB
-628016512,628016603,FR
-628016604,628016639,GB
-628016640,628016863,FR
-628016864,628016895,GB
-628016896,628017107,FR
-628017108,628017151,GB
+628015104,628017151,GB
628017152,628019199,CH
628019200,628021247,UZ
-628021248,628021248,GB
-628021249,628021503,IE
-628021504,628021504,GB
-628021505,628022015,IE
-628022016,628022016,GB
-628022017,628022442,IE
-628022443,628023295,GB
+628021248,628023295,GB
628023296,628029439,RU
628029440,628031487,GB
628031488,628097023,HU
628097024,628230143,RU
628230144,628232191,IT
628232192,628236287,RU
-628236288,628239103,DE
-628239104,628239359,LU
-628239360,628244479,DE
+628236288,628244479,DE
628244480,628246527,FR
628246528,628248575,MT
-628248576,628249599,NL
-628249600,628250623,FI
+628248576,628250623,FI
628250624,628252671,NL
-628252672,628255487,DE
-628255488,628255743,NL
-628255744,628260863,DE
+628252672,628259071,DE
+628259072,628260863,SC
628260864,628277247,AZ
628277248,628293631,IR
628293632,628359167,UA
628359168,628621311,IT
-628621312,628686847,RO
+628621312,628654079,DE
+628654080,628662271,RO
+628662272,628670463,DE
+628670464,628686847,RO
628686848,628752383,SA
628752384,628785151,RU
-628785152,628786943,CH
-628786944,628787007,PL
-628787008,628787039,NL
-628787040,628787199,CH
+628785152,628787199,CH
628787200,628789247,TR
628789248,628791295,SE
628791296,628793343,IL
@@ -13466,11 +4138,14 @@
628847360,628847615,FR
628847616,628848639,GB
628848640,628850687,DE
-628850688,628852735,NO
-628852736,628867071,SE
+628850688,628850943,SE
+628850944,628851199,NO
+628851200,628851455,SE
+628851456,628852479,NO
+628852480,628867071,SE
628867072,628869119,IR
628869120,628871167,PL
-628871168,628873215,NL
+628871168,628873215,US
628873216,628875263,RU
628875264,628877311,SE
628877312,628879359,BE
@@ -13501,7 +4176,8 @@
629327872,629329919,IR
629329920,629331967,ES
629331968,629334015,IT
-629334016,629338111,GB
+629334016,629334271,NL
+629334272,629338111,GB
629338112,629340159,BG
629340160,629342207,GB
629342208,629374975,BH
@@ -13510,34 +4186,29 @@
629389312,629391359,CH
629391360,629399551,RU
629399552,629401599,GE
-629401600,629401983,DE
-629401984,629401991,CH
-629401992,629405695,DE
+629401600,629405695,DE
629405696,629407743,TR
629407744,629669887,ES
629669888,629735423,FI
629735424,629800959,IR
629800960,629866495,DE
-629866496,629879807,RU
+629866496,629874687,NL
+629874688,629879807,RU
629879808,629880063,DE
629880064,629880831,RU
629880832,629881855,EE
-629881856,629882879,LT
-629882880,629882880,EU
-629882881,629882889,GB
-629882890,629882890,GB
-629882891,629883135,GB
+629881856,629882879,DE
+629882880,629883135,GB
629883136,629883391,AU
-629883392,629883903,EU
629883904,629884159,AU
-629884160,629884671,EU
+629884416,629884671,CL
629884672,629884927,AU
629884928,629886975,PL
629886976,629889023,RU
629889024,629891071,IT
629891072,629895167,UA
629895168,629897215,AL
-629897216,629901311,ES
+629897216,629899263,ES
629901312,629903359,NL
629903360,629905407,PL
629905408,629907455,SE
@@ -13575,25 +4246,20 @@
630491136,630493183,DE
630493184,630495231,NO
630495232,630497279,DE
-630497280,630498054,NL
-630498055,630498055,RU
-630498056,630499076,NL
-630499077,630499077,RU
-630499078,630499327,NL
+630497280,630499327,NL
630499328,630501375,LV
-630501376,630503423,BE
-630503424,630505831,NL
-630505832,630505839,BE
-630505840,630509567,NL
+630501376,630509567,NL
630509568,630511615,TR
-630511616,630511871,AU
-630511872,630513663,GB
+630511616,630513663,GB
630513664,630515711,IT
630515712,630517759,DE
630517760,630519807,GB
-630519808,630521855,IE
-630521856,630523135,GR
-630523136,630587391,CY
+630521856,630538239,GR
+630538240,630539263,CY
+630539264,630554623,GR
+630554624,630556671,CY
+630556672,630571007,GR
+630571008,630587391,CY
630587392,630718463,KZ
630718464,630720511,JO
630720512,630722559,NL
@@ -13617,13 +4283,23 @@
630816768,630833151,RO
630833152,630849535,NL
630849536,630980607,TR
-630980608,631001087,RO
+630980608,630981631,MD
+630981632,630982655,RO
+630982656,630984703,MD
+630984704,630998271,RO
+630998272,630998783,MD
+630998784,631001087,RO
631001088,631005183,MD
-631005184,631037951,RO
-631037952,631038207,CH
-631038208,631046143,RO
-631046144,631046399,LT
-631046400,631048191,DK
+631005184,631006207,RO
+631006208,631007231,MD
+631007232,631017471,RO
+631017472,631018495,MD
+631018496,631039999,RO
+631040000,631042047,MD
+631042048,631044095,RO
+631044096,631045119,MD
+631045120,631046143,RO
+631046144,631048191,DK
631048192,631050239,FR
631050240,631054335,RU
631054336,631056383,GB
@@ -13648,7 +4324,20 @@
631242752,632291327,FR
632291328,632815615,IT
632815616,632946687,BE
-632946688,633077759,AT
+632946688,632963071,AT
+632963072,632979455,AM
+632979456,633012223,IT
+633012224,633063679,FR
+633063680,633063935,PL
+633063936,633064191,FR
+633064192,633064447,GB
+633064448,633065727,FR
+633065728,633065983,DE
+633065984,633066239,FR
+633066240,633066495,ES
+633066496,633066751,FR
+633066752,633067007,IT
+633067008,633077759,FR
633077760,633094143,RU
633094144,633098239,NL
633098240,633100287,HU
@@ -13681,9 +4370,7 @@
634001408,634003455,NO
634003456,634007551,PL
634007552,634009599,TR
-634009600,634009855,NO
-634009856,634010111,NL
-634010112,634010623,NO
+634009600,634010623,NO
634010624,634011647,RU
634011648,634028031,JO
634028032,634060799,RO
@@ -13703,7 +4390,8 @@
634124288,634126335,CH
634126336,634191871,RU
634191872,634193919,TR
-634193920,634194815,CZ
+634193920,634194687,SK
+634194688,634194815,CZ
634194816,634195967,SK
634195968,634198015,RU
634198016,634200063,BA
@@ -13714,9 +4402,7 @@
634208256,634216447,RU
634216448,634220543,HR
634220544,634222591,IQ
-634222592,634222911,DK
-634222912,634222975,NO
-634222976,634224639,DK
+634222592,634224639,DK
634224640,634388479,IT
634388480,634396671,SE
634396672,634398719,BA
@@ -13743,7 +4429,7 @@
634517504,634519551,LB
634519552,634650623,QA
634650624,634912767,BY
-634912768,635043839,RO
+634912768,635043839,SA
635043840,635076607,ES
635076608,635092991,KG
635092992,635097087,CY
@@ -13751,43 +4437,28 @@
635101184,635103231,AE
635103232,635105279,HU
635105280,635106303,IS
-635106304,635106815,US
-635106816,635107327,NL
+635106304,635107327,NL
635107328,635109375,DE
635109376,635174911,FI
-635174912,635179713,GB
-635179714,635179714,GB
-635179715,635183103,GB
+635174912,635183103,GB
635183104,635185151,NL
635185152,635187199,IT
635187200,635191295,FR
635191296,635195391,RS
635195392,635197439,RU
-635197440,635199583,GB
-635199584,635199607,IT
+635197440,635199591,GB
+635199592,635199607,IT
635199608,635199647,GB
635199648,635199655,IT
635199656,635199663,GB
635199664,635199671,IT
-635199672,635199719,GB
-635199720,635199727,IT
-635199728,635199735,GB
-635199736,635199743,IT
-635199744,635199775,GB
+635199672,635199775,GB
635199776,635199783,IT
-635199784,635199999,GB
-635200000,635200007,IT
-635200008,635200047,GB
-635200048,635200055,IT
-635200056,635200071,GB
-635200072,635200079,IT
-635200080,635200087,GB
-635200088,635200095,IT
-635200096,635200143,GB
-635200144,635200151,IT
-635200152,635200167,GB
+635199784,635200167,GB
635200168,635200175,IT
-635200176,635200231,GB
+635200176,635200199,GB
+635200200,635200207,IT
+635200208,635200231,GB
635200232,635200239,IT
635200240,635200263,GB
635200264,635200271,IT
@@ -13799,21 +4470,21 @@
635200432,635200439,IT
635200440,635200631,GB
635200632,635200639,IT
-635200640,635200959,GB
-635200960,635200975,IT
-635200976,635200991,GB
+635200640,635200727,GB
+635200728,635200735,IT
+635200736,635200959,GB
+635200960,635200967,IT
+635200968,635200991,GB
635200992,635200999,IT
635201000,635201087,GB
635201088,635201095,IT
635201096,635201159,GB
635201160,635201167,IT
-635201168,635201199,GB
-635201200,635201207,IT
-635201208,635201255,GB
+635201168,635201255,GB
635201256,635201263,IT
-635201264,635201383,GB
-635201384,635201391,IT
-635201392,635203583,GB
+635201264,635201455,GB
+635201456,635201463,IT
+635201464,635203583,GB
635203584,635207679,JO
635207680,635211775,HU
635211776,635213823,NL
@@ -13822,539 +4493,21 @@
635219968,635224063,RU
635224064,635240447,HU
635240448,635256831,IR
-635256832,635273215,GB
635273216,635281407,UA
-635281408,635282127,RO
-635282128,635282143,VG
-635282144,635282399,RO
-635282400,635282431,VG
-635282432,635282847,RO
-635282848,635282879,VG
-635282880,635283135,RO
-635283136,635283167,VG
-635283168,635283455,RO
+635281408,635283455,RO
635283456,635284479,DE
-635284480,635285503,US
+635284480,635284991,RO
+635284992,635285503,US
635285504,635287551,ME
635287552,635289599,RU
635289600,635291647,DE
-635291648,635292159,RU
-635292160,635292379,KZ
-635292380,635292383,RU
-635292384,635292415,KZ
-635292416,635293439,RU
-635293440,635293583,KZ
-635293584,635293695,RU
+635291648,635293695,RU
635293696,635295743,HU
635295744,635297791,GB
635297792,635299839,SE
635299840,635301887,ES
635301888,635305983,CZ
-635305984,635307007,GB
-635307008,635307775,DE
-635307776,635308031,AD
-635308032,635308287,AE
-635308288,635308543,AF
-635308544,635308799,AG
-635308800,635309055,AI
-635309056,635309311,AL
-635309312,635309567,AM
-635309568,635309823,AO
-635309824,635310079,AQ
-635310080,635310335,AR
-635310336,635310591,AS
-635310592,635310847,AT
-635310848,635311103,AU
-635311104,635311359,AW
-635311360,635311615,AX
-635311616,635311871,AZ
-635311872,635312127,BA
-635312128,635312383,BB
-635312384,635312639,BD
-635312640,635312895,BE
-635312896,635313151,BF
-635313152,635313407,BG
-635313408,635313663,BH
-635313664,635313919,BI
-635313920,635314175,BJ
-635314176,635314431,BL
-635314432,635314687,BM
-635314688,635314943,BN
-635314944,635315199,BO
-635315200,635315455,BQ
-635315456,635315711,BR
-635315712,635315967,BS
-635315968,635316223,BT
-635316224,635316479,NL
-635316480,635316735,BW
-635316736,635316991,BY
-635316992,635317247,BZ
-635317248,635317503,CA
-635317504,635317759,CC
-635317760,635318015,CD
-635318016,635318271,CF
-635318272,635318527,CG
-635318528,635318783,CH
-635318784,635319039,CI
-635319040,635319295,CK
-635319296,635319551,CL
-635319552,635319807,CM
-635319808,635320063,CN
-635320064,635320319,CO
-635320320,635320575,CR
-635320576,635320831,CU
-635320832,635321087,CV
-635321088,635321343,CW
-635321344,635321599,CX
-635321600,635321855,CY
-635321856,635322111,CZ
-635322112,635322367,DE
-635322368,635322623,DJ
-635322624,635322879,DK
-635322880,635323135,DM
-635323136,635323391,DO
-635323392,635323647,DZ
-635323648,635323903,EC
-635323904,635324159,EE
-635324160,635324415,EG
-635324416,635324671,EH
-635324672,635324927,ER
-635324928,635325183,ES
-635325184,635325439,ET
-635325440,635325695,FI
-635325696,635325951,FJ
-635325952,635326207,FK
-635326208,635326463,FM
-635326464,635326719,FO
-635326720,635326975,FR
-635326976,635327231,GA
-635327232,635327487,GB
-635327488,635327743,GD
-635327744,635327999,GE
-635328000,635328255,GF
-635328256,635328511,GG
-635328512,635328767,GH
-635328768,635329023,GI
-635329024,635329279,GL
-635329280,635329535,GM
-635329536,635329791,GN
-635329792,635330047,GP
-635330048,635330303,GQ
-635330304,635330559,GR
-635330560,635330815,GS
-635330816,635331071,GT
-635331072,635331327,GU
-635331328,635331583,GW
-635331584,635331839,GY
-635331840,635332095,HK
-635332096,635332351,NL
-635332352,635332607,HN
-635332608,635332863,HR
-635332864,635333119,HT
-635333120,635333375,HU
-635333376,635333631,ID
-635333632,635333887,IE
-635333888,635334143,IL
-635334144,635334399,IM
-635334400,635334655,IN
-635334656,635334911,IO
-635334912,635335167,IQ
-635335168,635335423,IR
-635335424,635335679,IS
-635335680,635335935,IT
-635335936,635336191,JE
-635336192,635336447,JM
-635336448,635336703,JO
-635336704,635336959,JP
-635336960,635337215,KE
-635337216,635337471,KH
-635337472,635337727,KI
-635337728,635337983,KM
-635337984,635338239,KN
-635338240,635338495,KP
-635338496,635338751,KR
-635338752,635339007,KW
-635339008,635339263,KY
-635339264,635339519,KZ
-635339520,635339775,LA
-635339776,635340031,LB
-635340032,635340287,LC
-635340288,635340543,LI
-635340544,635340799,LK
-635340800,635341055,LR
-635341056,635341311,LS
-635341312,635341567,LT
-635341568,635341823,LU
-635341824,635342079,LV
-635342080,635342335,LY
-635342336,635342591,MC
-635342592,635342847,MD
-635342848,635343103,ME
-635343104,635343359,MF
-635343360,635343615,MG
-635343616,635343871,MH
-635343872,635344127,MK
-635344128,635344383,ML
-635344384,635344639,MM
-635344640,635344895,MN
-635344896,635345151,MO
-635345152,635345407,MP
-635345408,635345663,MQ
-635345664,635345919,MR
-635345920,635346175,MS
-635346176,635346431,MT
-635346432,635346687,MU
-635346688,635346943,MV
-635346944,635347199,MW
-635347200,635347455,MX
-635347456,635347711,MY
-635347712,635347967,MZ
-635347968,635348223,NA
-635348224,635348479,NC
-635348480,635348735,NE
-635348736,635348991,NF
-635348992,635349247,NG
-635349248,635349503,NI
-635349504,635349759,NL
-635349760,635350015,NO
-635350016,635350271,NP
-635350272,635350527,NR
-635350528,635350783,NU
-635350784,635351039,NZ
-635351040,635351295,OM
-635351296,635351551,PA
-635351552,635351807,PE
-635351808,635352063,PF
-635352064,635352319,PG
-635352320,635352575,PH
-635352576,635352831,PK
-635352832,635353087,PL
-635353088,635353343,PM
-635353344,635353599,PN
-635353600,635353855,PR
-635353856,635354111,PS
-635354112,635354367,PT
-635354368,635354623,PW
-635354624,635354879,PY
-635354880,635355135,QA
-635355136,635355391,RE
-635355392,635355647,RO
-635355648,635355903,RS
-635355904,635356159,RU
-635356160,635356415,RW
-635356416,635356671,SA
-635356672,635356927,SB
-635356928,635357183,SC
-635357184,635357439,SD
-635357440,635357695,SE
-635357696,635357951,SG
-635357952,635358207,SH
-635358208,635358463,SI
-635358464,635358719,SJ
-635358720,635358975,SK
-635358976,635359231,SL
-635359232,635359487,SM
-635359488,635359743,SN
-635359744,635359999,SO
-635360000,635360255,SR
-635360256,635360511,SS
-635360512,635360767,ST
-635360768,635361023,SV
-635361024,635361279,SX
-635361280,635361535,SY
-635361536,635361791,SZ
-635361792,635362047,TC
-635362048,635362303,TD
-635362304,635362559,TF
-635362560,635362815,TG
-635362816,635363071,TH
-635363072,635363327,TJ
-635363328,635363583,TK
-635363584,635363839,TL
-635363840,635364095,TM
-635364096,635364351,TN
-635364352,635364607,TO
-635364608,635364863,TR
-635364864,635365119,TT
-635365120,635365375,TV
-635365376,635365631,TW
-635365632,635365887,TZ
-635365888,635366143,UA
-635366144,635366399,UG
-635366400,635366655,UM
-635366656,635366911,US
-635366912,635367167,UY
-635367168,635367423,UZ
-635367424,635367679,VA
-635367680,635367935,VC
-635367936,635368191,VE
-635368192,635368447,VG
-635368448,635368703,VI
-635368704,635368959,VN
-635368960,635369215,VU
-635369216,635369471,WF
-635369472,635369727,WS
-635369728,635369983,YE
-635369984,635370239,YT
-635370240,635370495,ZA
-635370496,635370751,ZM
-635370752,635371007,ZW
-635371008,635371519,AD
-635371520,635371775,AF
-635371776,635372031,AG
-635372032,635372287,AI
-635372288,635372543,AL
-635372544,635372799,AM
-635372800,635373055,AO
-635373056,635373311,AQ
-635373312,635373567,AR
-635373568,635373823,AS
-635373824,635374079,AT
-635374080,635374335,AU
-635374336,635374591,AW
-635374592,635374847,AX
-635374848,635375103,AZ
-635375104,635375359,BA
-635375360,635375615,BB
-635375616,635375871,BD
-635375872,635376127,BE
-635376128,635376383,BF
-635376384,635376639,BG
-635376640,635376895,BH
-635376896,635377151,BI
-635377152,635377407,BJ
-635377408,635377663,BL
-635377664,635377919,BM
-635377920,635378175,BN
-635378176,635378431,BO
-635378432,635378687,BQ
-635378688,635378943,BR
-635378944,635379199,BS
-635379200,635379455,BT
-635379456,635379711,NL
-635379712,635379967,BW
-635379968,635380223,BY
-635380224,635380479,BZ
-635380480,635380735,CA
-635380736,635380991,CC
-635380992,635381247,CD
-635381248,635381503,CF
-635381504,635381759,CG
-635381760,635382015,CH
-635382016,635382271,CI
-635382272,635382527,CK
-635382528,635382783,CL
-635382784,635383039,CM
-635383040,635383295,CN
-635383296,635383551,CO
-635383552,635383807,CR
-635383808,635384063,CU
-635384064,635384319,CV
-635384320,635384575,CW
-635384576,635384831,CX
-635384832,635385087,CY
-635385088,635385343,CZ
-635385344,635385599,DE
-635385600,635385855,DJ
-635385856,635386111,DK
-635386112,635386367,DM
-635386368,635386623,DO
-635386624,635386879,DZ
-635386880,635387135,EC
-635387136,635387391,EE
-635387392,635387647,EG
-635387648,635387903,EH
-635387904,635388159,ER
-635388160,635388415,DK
-635388416,635388671,DM
-635388672,635388927,DO
-635388928,635389183,DZ
-635389184,635389439,EC
-635389440,635389695,EE
-635389696,635389951,EG
-635389952,635390207,EH
-635390208,635390463,ER
-635390464,635390719,ES
-635390720,635390975,ET
-635390976,635391231,FI
-635391232,635391487,FJ
-635391488,635391743,FK
-635391744,635391999,FM
-635392000,635392255,FO
-635392256,635392511,FR
-635392512,635392767,GA
-635392768,635393023,GB
-635393024,635393279,GD
-635393280,635393535,GE
-635393536,635393791,GF
-635393792,635394047,GG
-635394048,635394303,GH
-635394304,635394559,GI
-635394560,635394815,GL
-635394816,635395071,GM
-635395072,635395327,GN
-635395328,635395583,GP
-635395584,635395839,GQ
-635395840,635396095,GR
-635396096,635396351,GS
-635396352,635396607,GT
-635396608,635396863,GU
-635396864,635397119,GW
-635397120,635397375,GY
-635397376,635397631,HK
-635397632,635397887,NL
-635397888,635398143,HN
-635398144,635398399,HR
-635398400,635398655,HT
-635398656,635398911,HU
-635398912,635399167,ID
-635399168,635399423,IE
-635399424,635399679,IL
-635399680,635399935,IM
-635399936,635400191,IN
-635400192,635400447,IO
-635400448,635400703,IQ
-635400704,635400959,IR
-635400960,635401215,IS
-635401216,635401471,IT
-635401472,635401727,JE
-635401728,635401983,JM
-635401984,635402239,JO
-635402240,635402495,JP
-635402496,635402751,KE
-635402752,635403007,KH
-635403008,635403263,KI
-635403264,635403519,KM
-635403520,635403775,KN
-635403776,635404031,KP
-635404032,635404287,KR
-635404288,635404543,KW
-635404544,635404799,KY
-635404800,635405055,KZ
-635405056,635405311,LA
-635405312,635405567,LB
-635405568,635405823,LC
-635405824,635406079,LI
-635406080,635406335,LK
-635406336,635406591,LR
-635406592,635406847,LS
-635406848,635407103,LT
-635407104,635407359,LU
-635407360,635407615,LV
-635407616,635407871,LY
-635407872,635408127,MC
-635408128,635408383,MD
-635408384,635408639,ME
-635408640,635408895,MF
-635408896,635409151,MG
-635409152,635409407,MH
-635409408,635409663,MK
-635409664,635409919,ML
-635409920,635410175,MM
-635410176,635410431,MN
-635410432,635410687,MO
-635410688,635410943,MP
-635410944,635411199,MQ
-635411200,635411455,MR
-635411456,635411711,MS
-635411712,635411967,MT
-635411968,635412223,MU
-635412224,635412479,MV
-635412480,635412735,MW
-635412736,635412991,MX
-635412992,635413247,MY
-635413248,635413503,MZ
-635413504,635413759,NA
-635413760,635414015,NC
-635414016,635414271,NE
-635414272,635414527,NF
-635414528,635414783,NG
-635414784,635415039,NI
-635415040,635415295,NL
-635415296,635415551,NO
-635415552,635415807,NP
-635415808,635416063,NR
-635416064,635416319,NU
-635416320,635416575,NZ
-635416576,635416831,OM
-635416832,635417087,PA
-635417088,635417343,PE
-635417344,635417599,PF
-635417600,635417855,PG
-635417856,635418111,PH
-635418112,635418367,PK
-635418368,635418623,PL
-635418624,635418879,PM
-635418880,635419135,PN
-635419136,635419391,PR
-635419392,635419647,PS
-635419648,635419903,PT
-635419904,635420159,PW
-635420160,635420415,PY
-635420416,635420671,QA
-635420672,635420927,RE
-635420928,635421183,RO
-635421184,635421439,RS
-635421440,635421695,RU
-635421696,635421951,RW
-635421952,635422207,SA
-635422208,635422463,SB
-635422464,635422719,SC
-635422720,635422975,SD
-635422976,635423231,SE
-635423232,635423487,SG
-635423488,635423743,SH
-635423744,635423999,SI
-635424000,635424255,SJ
-635424256,635424511,SK
-635424512,635424767,SL
-635424768,635425023,SM
-635425024,635425279,SN
-635425280,635425535,SO
-635425536,635425791,SR
-635425792,635426047,SS
-635426048,635426303,ST
-635426304,635426559,SV
-635426560,635426815,SX
-635426816,635427071,SY
-635427072,635427327,SZ
-635427328,635427583,TC
-635427584,635427839,TD
-635427840,635428095,TF
-635428096,635428351,TG
-635428352,635428607,TH
-635428608,635428863,TJ
-635428864,635429119,TK
-635429120,635429375,TL
-635429376,635429631,TM
-635429632,635429887,TN
-635429888,635430143,TO
-635430144,635430399,TR
-635430400,635430655,TT
-635430656,635430911,TV
-635430912,635431167,TW
-635431168,635431423,TZ
-635431424,635431679,UA
-635431680,635431935,UG
-635431936,635432191,UM
-635432192,635432447,US
-635432448,635432703,UY
-635432704,635432959,UZ
-635432960,635433215,VA
-635433216,635433471,VC
-635433472,635433727,VE
-635433728,635433983,VG
-635433984,635434239,VI
-635434240,635434495,VN
-635434496,635434751,VU
-635434752,635435007,WF
-635435008,635435263,WS
-635435264,635435519,YE
-635435520,635435775,YT
-635435776,635436031,ZA
-635436032,635436287,ZM
-635436288,635436543,ZW
-635436544,635437055,AD
+635305984,635437055,NL
635437056,635502591,RO
635502592,635568127,PL
635568128,635699199,IT
@@ -14365,9 +4518,7 @@
635723776,635725823,ES
635725824,635727871,US
635727872,635729919,RU
-635729920,635732479,DE
-635732480,635732991,US
-635732992,635748351,DE
+635729920,635748351,DE
635748352,635764735,IE
635764736,635830271,UA
635830272,635842559,DE
@@ -14375,10 +4526,11 @@
635846656,635854847,ES
635854848,635856895,NL
635856896,635858943,TR
-635858944,635860479,RU
-635860480,635860991,NL
+635858944,635860991,RU
635860992,635863039,BE
-635863040,635895807,RU
+635863040,635889663,RU
+635889664,635891711,NG
+635891712,635895807,RU
635895808,635961343,KW
635961344,635994111,GE
635994112,636026879,RU
@@ -14408,10 +4560,7 @@
636176384,636178431,TR
636178432,636180479,NL
636180480,636182527,FR
-636182528,636183295,SK
-636183296,636184575,CZ
-636184576,636184831,SK
-636184832,636186623,CZ
+636182528,636186623,CZ
636186624,636188671,NL
636188672,636190719,GB
636190720,636223487,RU
@@ -14425,21 +4574,24 @@
636952576,636956671,NL
636956672,636958719,IT
636958720,636960767,PL
-636960768,636967167,DE
+636960768,636966655,DE
+636966656,636966911,IT
+636966912,636967167,DE
636967168,636967935,FR
636967936,636968191,IT
636968192,636968447,ES
-636968448,636968959,DE
-636968960,636975103,TR
+636968448,636968703,BE
+636968704,636968959,DE
+636968960,636974079,TR
+636974080,636974591,GB
+636974592,636974847,NL
+636974848,636975103,TR
636975104,636977151,ES
636977152,637140991,PL
637140992,637206527,SE
637206528,637239295,NL
637239296,637272063,RO
-637272064,637272831,RU
-637272832,637275135,DE
-637275136,637275391,RU
-637275392,637276159,DE
+637272064,637276159,DE
637276160,637278207,RU
637278208,637288447,GB
637288448,637296639,AM
@@ -14448,23 +4600,15 @@
637300736,637302783,NO
637302784,637304831,NL
637304832,637313023,CH
-637313024,637314751,NL
-637314752,637315071,EU
-637315072,637317119,NL
637317120,637319167,ES
637319168,637321215,AT
637321216,637323263,GB
637323264,637325311,FR
-637325312,637325823,US
-637325824,637326079,GB
-637326080,637326335,DE
-637326336,637326591,HK
-637326592,637326847,AU
-637326848,637327359,NO
+637325312,637325567,US
+637325568,637327359,NO
637327360,637329407,IR
637329408,637329663,SI
-637329664,637329919,FR
-637329920,637330175,AT
+637329664,637330175,FR
637330176,637330431,DE
637330432,637330943,JP
637330944,637331199,GB
@@ -14478,140 +4622,211 @@
637333760,637334271,AT
637334272,637334527,TW
637334528,637334783,KR
-637334784,637337599,AT
+637334784,637335039,AE
+637335040,637335295,SK
+637335296,637335551,BG
+637335552,637335807,DE
+637335808,637336063,HK
+637336064,637336319,AT
+637336320,637336575,CL
+637336576,637336831,AT
+637336832,637337087,IT
+637337088,637337599,RU
637337600,637403135,NO
637403136,637534207,IR
-637534208,641736703,US
-641736704,641737727,CA
-641737728,641737983,US
-641737984,641741055,CA
-641741056,641741311,US
-641741312,641744895,CA
-641744896,641761279,US
-641761280,641765887,CA
+637534208,641736959,US
+641736960,641737215,CA
+641737216,641737471,US
+641737472,641737727,CA
+641737728,641761535,US
+641761536,641761791,CA
+641761792,641763071,US
+641763072,641763583,CA
+641763584,641765375,US
+641765376,641765887,CA
641765888,641766399,US
641766400,641767423,CA
-641767424,641826815,US
-641826816,641827839,MX
-641827840,642088959,US
-642088960,642097151,CA
-642097152,642695167,US
-642695168,642696191,US
-642696192,642793471,US
-642793472,642795519,CA
-642795520,642796031,CA
-642796032,642796543,CA
-642796544,642797055,CA
-642797056,642797567,CA
-642797568,642801663,US
-642801664,642809855,CA
-642809856,642924543,US
-642924544,642926591,MX
-642926592,643875071,US
-643875072,643875327,US
-643875328,644048127,US
-644048128,644048383,US
-644048384,644049151,US
-644049152,644049407,US
-644049408,644055039,US
-644055040,644056047,CA
-644056048,644056063,US
-644056064,644059135,CA
-644059136,644059391,CA
-644059392,644061631,CA
-644061632,644061663,US
-644061664,644065023,CA
-644065024,644065055,US
-644065056,644071679,CA
-644071680,644072447,US
-644072448,644073471,CA
-644073472,644084223,US
-644084224,644084479,GU
-644084480,644093439,US
-644093440,644093695,US
-644093696,644121855,US
-644121856,644122111,US
-644122112,644235263,US
-644235264,644243455,CA
-644243456,644268543,US
-644268544,644268613,CA
-644268614,644268614,US
-644268615,644268799,CA
-644268800,644323391,US
+641767424,641768447,US
+641768448,641768959,CA
+641768960,641769727,US
+641769728,641769983,CA
+641769984,641771519,US
+641771520,641771775,CA
+641771776,642093055,US
+642093056,642094591,CA
+642094592,642388479,US
+642388480,642388735,CA
+642388736,642793471,US
+642793472,642793983,CA
+642793984,642925055,US
+642925056,642925311,MX
+642925312,642926335,US
+642926336,642926591,MX
+642926592,643219519,US
+643219520,643219523,CA
+643219524,643219526,US
+643219527,643219527,CA
+643219528,643240447,US
+643240448,643240703,CA
+643240704,643242495,US
+643242496,643242751,CA
+643242752,643295231,US
+643295232,643295487,PR
+643295488,643295743,US
+643295744,643296127,PR
+643296128,643296767,US
+643296768,643297023,PR
+643297024,643302911,US
+643302912,643303167,CA
+643303168,643317759,US
+643317760,643318015,CA
+643318016,643346431,US
+643346432,643346687,CA
+643346688,643351551,US
+643351552,643351807,GB
+643351808,644055039,US
+644055040,644055807,CA
+644055808,644056063,US
+644056064,644056319,CA
+644056320,644056575,US
+644056576,644056831,CA
+644056832,644057087,US
+644057088,644057599,CA
+644057600,644058111,US
+644058112,644058879,CA
+644058880,644059391,US
+644059392,644059647,CA
+644059648,644060927,US
+644060928,644061183,CA
+644061184,644063231,US
+644063232,644063743,CA
+644063744,644064511,US
+644064512,644064767,CA
+644064768,644065055,US
+644065056,644065279,CA
+644065280,644067071,US
+644067072,644067327,CA
+644067328,644069631,US
+644069632,644070143,CA
+644070144,644084479,US
+644084480,644084735,GU
+644084736,644248831,US
+644248832,644249087,CA
+644249088,644323391,US
644323392,644323407,CA
-644323408,644388863,US
-644388864,644390911,CA
+644323408,644323583,US
+644323584,644323839,CA
+644323840,644389631,US
+644389632,644390911,CA
644390912,644403199,US
-644403200,644403711,CA
-644403712,644403967,US
-644403968,644404223,CA
-644404224,644408063,US
+644403200,644403455,CA
+644403456,644408063,US
644408064,644408319,CA
-644408320,644413439,US
-644413440,644414463,CA
+644408320,644414207,US
+644414208,644414463,CA
644414464,644422911,US
644422912,644423423,JP
644423424,644569087,US
-644569088,644571135,PR
-644571136,644581375,US
-644581376,644583423,CA
-644583424,644628479,US
-644628480,644636671,CA
-644636672,644718591,US
-644718592,644722687,CA
-644722688,644759551,US
-644759552,644767743,CA
-644767744,644833279,US
-644833280,644837375,CA
-644837376,644838655,US
-644838656,644838783,CA
-644838784,644838911,US
-644838912,644841471,CA
-644841472,644875647,US
-644875648,644875775,CA
-644875776,644876225,US
-644876226,644876226,CA
-644876227,644879329,US
-644879330,644879330,CA
-644879331,644890623,US
-644890624,644892927,CA
-644892928,644893183,US
-644893184,644907007,CA
-644907008,644980735,US
-644980736,644988927,CA
-644988928,645001215,US
-645001216,645003263,US
-645003264,645185535,US
-645185536,645189631,CA
-645189632,645218303,US
-645218304,645234687,CA
-645234688,645358271,US
-645358272,645358335,US
-645358336,645361663,US
-645361664,645361919,US
-645361920,645362175,US
-645362176,645362431,US
-645362432,645482495,US
-645482496,645484543,CA
-645484544,645525503,US
-645525504,645529599,CA
-645529600,645547007,US
+644569088,644569343,PR
+644569344,644570111,US
+644570112,644570175,PR
+644570176,644570623,US
+644570624,644571135,PR
+644571136,644582143,US
+644582144,644582399,CA
+644582400,644628735,US
+644628736,644628991,CA
+644628992,644634367,US
+644634368,644634623,CA
+644634624,644718847,US
+644718848,644719103,CA
+644719104,644760575,US
+644760576,644760831,CA
+644760832,644761343,US
+644761344,644761599,CA
+644761600,644762879,US
+644762880,644763135,CA
+644763136,644765439,US
+644765440,644765695,CA
+644765696,644767878,US
+644767879,644767879,CA
+644767880,644767999,US
+644768000,644768255,CA
+644768256,644833535,US
+644833536,644833791,CA
+644833792,644834047,US
+644834048,644834303,CA
+644834304,644834815,US
+644834816,644835327,CA
+644835328,644836351,US
+644836352,644836607,CA
+644836608,644838655,US
+644838656,644840447,CA
+644840448,644840703,US
+644840704,644841215,CA
+644841216,644897791,US
+644897792,644898047,CA
+644898048,644898815,US
+644898816,644899071,CA
+644899072,644899839,US
+644899840,644900095,CA
+644900096,644901631,US
+644901632,644901887,CA
+644901888,644982271,US
+644982272,644982527,CA
+644982528,644986111,US
+644986112,644986367,CA
+644986368,644987135,US
+644987136,644987391,CA
+644987392,645185535,US
+645185536,645185791,CA
+645185792,645188095,US
+645188096,645188351,CA
+645188352,645221631,US
+645221632,645222399,CA
+645222400,645223423,US
+645223424,645223679,CA
+645223680,645225471,US
+645225472,645225727,CA
+645225728,645227519,US
+645227520,645228287,CA
+645228288,645229311,US
+645229312,645229567,CA
+645229568,645482495,US
+645482496,645482751,CA
+645482752,645525759,US
+645525760,645526271,CA
+645526272,645526783,US
+645526784,645527039,CA
+645527040,645527551,US
+645527552,645527807,CA
+645527808,645528063,US
+645528064,645529343,CA
+645529344,645540351,US
+645540352,645540607,CA
+645540608,645547007,US
645547008,645547263,CA
645547264,645576703,US
-645576704,645576959,CA
-645576960,645644287,US
-645644288,645645311,MX
-645645312,645703679,US
-645703680,645705727,MX
-645705728,645731071,US
-645731072,645731199,US
-645731200,645736447,US
-645736448,645736703,PR
-645736704,645810943,US
-645810944,645811199,US
-645811200,645873663,US
-645873664,645881855,CA
-645881856,654311423,US
+645576704,645576997,CA
+645576998,645576998,US
+645576999,645577215,CA
+645577216,645644351,US
+645644352,645644415,MX
+645644416,645644927,US
+645644928,645645055,MX
+645645056,645646591,US
+645646592,645646847,MX
+645646848,645704447,US
+645704448,645704703,MX
+645704704,645705215,US
+645705216,645705471,MX
+645705472,645737983,US
+645737984,645738239,PR
+645738240,645873663,US
+645873664,645874175,CA
+645874176,645875711,US
+645875712,645876735,CA
+645876736,654311423,US
654311424,654311679,CN
654311680,654311935,AU
654311936,654376959,CN
@@ -14626,11 +4841,7 @@
661651456,662700031,KR
662700032,666894335,CN
666894336,671088639,ID
-671088640,671113215,US
-671113216,671113471,EU
-671113472,687618147,US
-687618148,687618151,EU
-687618152,687865855,US
+671088640,687865855,US
687865856,689963007,ZA
689963008,691011583,EG
691011584,691617791,ZA
@@ -14656,7 +4867,9 @@
692191232,692207615,CI
692207616,692240383,ZA
692240384,692256767,GH
-692256768,692273151,SD
+692256768,692260863,SD
+692260864,692261887,UG
+692261888,692273151,SD
692273152,692289535,EG
692289536,692305919,NG
692305920,692322303,CM
@@ -14669,8 +4882,7 @@
692600832,692609023,EG
692609024,692617215,ZM
692617216,692625407,ZA
-692625408,692633599,A2
-692633600,692641791,KE
+692625408,692641791,KE
692641792,692649983,GA
692649984,692658175,NG
692658176,692666367,ZA
@@ -14794,6 +5006,7 @@
693007360,693008383,NE
693008384,693009407,CF
693009408,693010431,GH
+693010432,693011455,ZA
693011456,693012479,SZ
693012480,693013503,TG
693013504,693014527,ZA
@@ -14807,7 +5020,7 @@
693021696,693022719,NG
693022720,693023743,KE
693023744,693026815,ZA
-693027840,693028863,CD
+693026816,693028863,CD
693028864,693029887,ZA
693029888,693030911,CM
693030912,693031935,NG
@@ -14821,7 +5034,6 @@
693040128,693041151,ZA
693041152,693042175,MW
693042176,693043199,NG
-693043200,693044223,ZW
693044224,693045247,NG
693045248,693046271,KE
693046272,693047295,ZW
@@ -14846,7 +5058,7 @@
693069824,693071871,ZA
693071872,693072895,ZW
693072896,693073919,NG
-693073920,693074943,SD
+693073920,693074943,SS
693074944,693075967,CV
693075968,693076991,CM
693076992,693078015,ZW
@@ -14881,9 +5093,12 @@
693107712,693239807,KE
693239808,693370879,SN
693370880,693403647,ZA
-693403648,693411839,KE
+693403648,693411583,KE
+693411584,693411839,MU
693411840,693420031,NG
-693420032,693428223,UG
+693420032,693423103,UG
+693423104,693424127,KE
+693424128,693428223,UG
693428224,693436415,SZ
693436416,693477375,ZA
693477376,693485567,BJ
@@ -14924,12 +5139,15 @@
696928256,696930303,BW
696930304,696932351,RW
696932352,696933375,BJ
+696933376,696934399,ZA
696934400,696942591,BF
696942592,696950783,MR
696950784,696958975,NG
696958976,696963071,TZ
-696963072,696966911,UG
-696966912,696967167,TZ
+696963072,696964095,ZA
+696964096,696965119,UG
+696965120,696966143,NG
+696966144,696967167,TZ
696967168,696971263,MZ
696971264,696975359,KE
696975360,696991743,GH
@@ -14962,11 +5180,12 @@
700260352,700268543,CI
700268544,700276735,ZA
700276736,700284927,CI
-700284928,700293119,GH
-700293120,700301311,EG
+700284928,700301311,GH
700301312,700309503,CD
700309504,700313599,DJ
-700313600,700317695,US
+700313600,700314367,US
+700314368,700314623,DJ
+700314624,700317695,US
700317696,700325887,NG
700325888,700334079,ZW
700334080,700335103,BJ
@@ -14978,11 +5197,14 @@
700340224,700341247,GH
700341248,700342271,MW
700342272,700350463,NA
-700350464,700358655,UG
+700350464,700351231,MU
+700351232,700352511,UG
+700352512,700358655,MU
700358656,700366847,MZ
700366848,700375039,UG
700375040,700376063,CM
700376064,700377087,NE
+700377088,700378111,CD
700378112,700379135,MG
700379136,700380159,NG
700380160,700381183,BW
@@ -15000,45 +5222,41 @@
700407808,700408831,GH
700408832,700409855,CM
700409856,700410879,LR
-700410880,700411903,NG
-700411904,700412927,ZA
700412928,700413951,ZM
700413952,700414975,SC
700414976,700432383,ZA
700432384,700434431,KE
700434432,700436479,LS
+700436480,700437503,NG
+700437504,700438527,MU
+700438528,700439551,BW
+700439552,700440575,GN
700440576,700442623,KE
700442624,700444671,ZW
700444672,700446719,GH
700446720,700447743,SL
700447744,700448767,DZ
-700448768,700579839,ZA
-700579840,700587007,A2
+700448768,700587007,ZA
700587008,700587263,ZM
-700587264,700588031,A2
-700588032,700588286,KM
-700588287,700588287,A2
+700587264,700588287,ZA
700588288,700588543,KM
-700588544,700589567,A2
-700589568,700589695,TZ
-700589696,700592383,A2
-700592384,700592639,KE
-700592640,700593151,A2
+700588544,700593151,ZA
700593152,700594175,NG
-700594176,700595967,A2
-700595968,700596223,CD
-700596224,700645375,A2
-700645376,700710911,ZA
+700594176,700710911,ZA
700710912,700776447,EG
700776448,700841983,RW
-700841984,700851199,MU
-700851200,700852223,NA
-700852224,700866559,MU
+700841984,700846079,MU
+700846080,700850175,NA
+700850176,700851455,MU
+700851456,700851711,ZA
+700851712,700854271,MU
+700854272,700855295,NA
+700855296,700866559,MU
700866560,700866815,NG
700866816,700867327,MU
700867328,700867583,NG
-700867584,700893183,MU
-700893184,700893695,NG
+700867584,700893439,MU
+700893440,700893695,NG
700893696,700895231,MU
700895232,700897023,NG
700897024,700897279,AO
@@ -15053,9 +5271,9 @@
701153280,701161471,CM
701161472,701169663,UG
701169664,701186047,ZA
-701186048,701190136,NG
-701190137,701190137,BJ
-701190138,701202431,NG
+701186048,701189887,NG
+701189888,701190143,BJ
+701190144,701202431,NG
701202432,701210623,NE
701210624,701214719,ZA
701214720,701218815,LS
@@ -15075,22 +5293,25 @@
701308928,701317119,AO
701317120,701325311,CM
701325312,701333503,EG
-701333504,701341695,NA
+701333504,701338111,NA
+701338112,701338367,ZM
+701338368,701341695,NA
701341696,701349887,NG
701349888,701358079,MA
701358080,701366271,SL
701366272,701374463,NG
701374464,701382655,KE
701382656,701390847,CI
-701390848,701399039,MU
+701390848,701392127,MU
+701392128,701392383,TZ
+701392384,701392639,ZA
+701392640,701399039,MU
701399040,701407231,EG
701407232,701423615,ZA
701423616,701431807,NG
701431808,701439999,CI
701440000,701448191,MG
-701448192,701461247,KE
-701461248,701461503,CD
-701461504,701462783,KE
+701448192,701462783,KE
701462784,701463039,CG
701463040,701463394,KE
701463395,701463395,NG
@@ -15102,16 +5323,21 @@
701464576,701472767,MU
701472768,701480959,TG
701480960,701489151,CI
-701489152,701493247,ZA
+701489152,701490175,NG
+701490176,701491199,AO
+701491200,701492223,MU
+701492224,701493247,ZA
701493248,701495295,TZ
-701495296,701513727,ZA
-701513728,701530111,LY
+701495296,701496319,NG
+701496320,701497343,GH
+701497344,701513727,ZA
+701513728,701523711,LY
+701523712,701523967,CA
+701523968,701530111,LY
701530112,701546495,SN
701546496,701562879,ZA
701562880,701579263,KE
-701579264,701593343,SD
-701593344,701593471,AE
-701593472,701595647,SD
+701579264,701595647,SD
701595648,701603839,DZ
701612032,701628415,EG
701628416,701644799,GH
@@ -15171,9 +5397,10 @@
702144512,702146559,EG
702146560,702148607,UG
702148608,702150655,ZA
-702150656,702152703,ZM
702152704,702169087,SD
-702169088,702181375,NA
+702169088,702173183,NA
+702173184,702175231,ZM
+702175232,702181375,NA
702181376,702185471,AO
702185472,702201855,EG
702201856,702218239,GH
@@ -15184,8 +5411,7 @@
702287872,702291967,ZW
702291968,702296063,MZ
702296064,702300159,GH
-702300160,702304255,NG
-702304256,702308351,SL
+702300160,702308351,NG
702308352,702312447,SC
702312448,702316543,KE
702316544,702320639,TZ
@@ -15194,9 +5420,7 @@
702328832,702332927,TZ
702332928,702337023,MZ
702337024,702341119,UG
-702341120,702345215,KE
-702345216,702346239,US
-702346240,702349311,KE
+702341120,702349311,KE
702349312,702353407,ZA
702353408,702357503,DZ
702357504,702365695,TZ
@@ -15219,7 +5443,9 @@
702425088,702427135,NG
702427136,702429183,ZA
702429184,702431231,TZ
-702431232,702435327,NG
+702431232,702433279,NG
+702433280,702434303,SS
+702434304,702435327,NG
702435328,702437375,MZ
702437376,702439423,TZ
702439424,702441471,MU
@@ -15240,6 +5466,7 @@
702461952,702463999,MW
702464000,702465023,BJ
702465024,702466047,CD
+702466048,702467071,AO
702467072,702468095,SC
702468096,702469119,NG
702469120,702470143,ZA
@@ -15249,14 +5476,18 @@
702475264,702476287,AO
702476288,702477311,ZM
702477312,702478335,RW
-702478336,702481407,AO
+702478336,702480383,AO
702481408,702482431,TZ
702482432,702483455,ZA
+702483456,702484479,BI
702484480,702485503,TZ
702485504,702486527,EG
+702486528,702487551,ZA
702487552,702488575,CM
702488576,702490623,ZA
702490624,702491647,AO
+702491648,702492671,NG
+702492672,702493695,GN
702493696,702494719,EG
702494720,702495743,KE
702495744,702496767,ZA
@@ -15267,6 +5498,7 @@
702500864,702501887,NA
702501888,702502911,UG
702502912,702503935,SL
+702503936,702504959,CM
702504960,702505983,MR
702505984,702507007,AO
702507008,702508031,CD
@@ -15284,7 +5516,7 @@
702520320,702521343,AO
702521344,702522367,SD
702522368,702523391,AO
-702523392,702524415,NG
+702523392,702524415,GA
702524416,702525439,ZA
702525440,702526463,DZ
702526464,702527487,TZ
@@ -15297,8 +5529,7 @@
702533632,702534655,CI
702534656,702535679,GM
702535680,702536703,SC
-702536704,702537727,MU
-702537728,702538751,RW
+702536704,702538751,MU
702538752,702539775,TZ
702539776,702540799,BF
702540800,702541823,DZ
@@ -15306,9 +5537,259 @@
702542848,702543871,ZA
702543872,702544895,BJ
702544896,702545919,ZA
-702545920,703070207,TN
+702545920,702721791,TN
+702721792,702722047,GP
+702722048,702729215,TN
+702729216,702729471,GP
+702729472,703070207,TN
703070208,703594495,EG
-703594496,704118783,ZA
+703594496,703595775,SD
+703595776,703596031,ZA
+703596032,703600383,SD
+703600384,703600639,ZA
+703600640,703601151,SD
+703601152,703601407,ZA
+703601408,703603455,SD
+703603456,703603711,ZA
+703603712,703604991,SD
+703604992,703605247,ZA
+703605248,703609087,SD
+703609088,703609343,ZA
+703609344,703613695,SD
+703613696,703613951,ZA
+703613952,703618559,SD
+703618560,703619071,ZA
+703619072,703619839,SD
+703619840,703620095,ZA
+703620096,703621887,SD
+703621888,703622143,ZA
+703622144,703622655,SD
+703622656,703622911,ZA
+703622912,703625215,SD
+703625216,703625471,ZA
+703625472,703627263,SD
+703627264,703627519,ZA
+703627520,703631871,SD
+703631872,703632127,ZA
+703632128,703633151,SD
+703633152,703633407,ZA
+703633408,703638271,SD
+703638272,703638527,ZA
+703638528,703639551,SD
+703639552,703639807,ZA
+703639808,703642367,SD
+703642368,703642623,ZA
+703642624,703643903,SD
+703643904,703644415,ZA
+703644416,703645439,SD
+703645440,703645695,ZA
+703645696,703646719,SD
+703646720,703647231,ZA
+703647232,703648767,SD
+703648768,703649023,ZA
+703649024,703649279,SD
+703649280,703650047,ZA
+703650048,703650815,SD
+703650816,703651071,ZA
+703651072,703665663,SD
+703665664,703665919,ZA
+703665920,703678463,SD
+703678464,703678719,ZA
+703678720,703682559,SD
+703682560,703682815,ZA
+703682816,703685119,SD
+703685120,703685631,ZA
+703685632,703685887,SD
+703685888,703686143,ZA
+703686144,703688447,SD
+703688448,703688703,ZA
+703688704,703689215,SD
+703689216,703689471,ZA
+703689472,703689727,SD
+703689728,703689983,ZA
+703689984,703690239,SD
+703690240,703690751,ZA
+703690752,703696127,SD
+703696128,703696383,ZA
+703696384,703696895,SD
+703696896,703697151,ZA
+703697152,703699199,SD
+703699200,703699455,ZA
+703699456,703702527,SD
+703702528,703703039,ZA
+703703040,703705599,SD
+703705600,703705855,ZA
+703705856,703706111,SD
+703706112,703706367,ZA
+703706368,703709695,SD
+703709696,703709951,ZA
+703709952,703710719,SD
+703710720,703710975,ZA
+703710976,703711487,SD
+703711488,703711743,ZA
+703711744,703713791,SD
+703713792,703714047,ZA
+703714048,703714303,SD
+703714304,703714559,ZA
+703714560,703724031,SD
+703724032,703724287,ZA
+703724288,703724543,SD
+703724544,703724799,ZA
+703724800,703725567,SD
+703725568,703725589,ZA
+703725590,703725590,KE
+703725591,703726591,ZA
+703726592,703727615,KE
+703727616,703728383,TZ
+703728384,703728639,ZA
+703728640,703733759,LY
+703733760,703734527,CM
+703734528,703734783,ZA
+703734784,703735807,CM
+703735808,703737855,ZA
+703737856,703746047,NG
+703746048,703747071,ZA
+703747072,703748095,CD
+703748096,703748351,ZA
+703748352,703749119,GN
+703749120,703750143,NG
+703750144,703750655,ZA
+703750656,703750911,MG
+703750912,703751167,ZA
+703751168,703751679,MG
+703751680,703751935,ZA
+703751936,703752447,MG
+703752448,703752703,ZA
+703752704,703753215,MG
+703753216,703753471,ZA
+703753472,703754239,MG
+703754240,703755263,GH
+703755264,703757311,ZA
+703757312,703758335,RE
+703758336,703759359,CD
+703759360,703760383,ZA
+703760384,703761407,GH
+703761408,703791103,ZA
+703791104,703791359,CD
+703791360,703791871,ZA
+703791872,703792895,CD
+703792896,703793151,ZA
+703793152,703794175,CD
+703794176,703794687,ZA
+703794688,703795199,CD
+703795200,703795455,ZA
+703795456,703798527,CD
+703798528,703799039,ZA
+703799040,703799807,CD
+703799808,703800063,ZA
+703800064,703800575,CD
+703800576,703800831,ZA
+703800832,703801855,CD
+703801856,703802111,ZA
+703802112,703804159,CD
+703804160,703804415,ZA
+703804416,703806719,CD
+703806720,703806975,ZA
+703806976,703809023,CD
+703809024,703809279,ZA
+703809280,703810559,CD
+703810560,703810815,ZA
+703810816,703811839,CD
+703811840,703812351,ZA
+703812352,703813119,CD
+703813120,703813375,ZA
+703813376,703817471,CD
+703817472,703817727,ZA
+703817728,703817983,CD
+703817984,703818239,ZA
+703818240,703822335,CD
+703822336,703822591,ZA
+703822592,703825407,CD
+703825408,703825663,ZA
+703825664,703827967,CD
+703827968,703828223,ZA
+703828224,703831295,CD
+703831296,703831551,ZA
+703831552,703832319,CD
+703832320,703832575,ZA
+703832576,703838207,CD
+703838208,703838463,ZA
+703838464,703838719,CD
+703838720,703838975,ZA
+703838976,703839743,CD
+703839744,703839999,ZA
+703840000,703841279,CD
+703841280,703841535,ZA
+703841536,703842559,CD
+703842560,703842815,ZA
+703842816,703845375,CD
+703845376,703845631,ZA
+703845632,703846911,CD
+703846912,703847167,ZA
+703847168,703847423,CD
+703847424,703847679,ZA
+703847680,703849215,CD
+703849216,703849471,ZA
+703849472,703856639,CD
+703856640,703856895,ZA
+703856896,703857919,CM
+703857920,703858431,ZA
+703858432,703858943,CM
+703858944,703859199,ZA
+703859200,703864063,CM
+703864064,703864319,ZA
+703864320,703864575,CM
+703864576,703865855,ZA
+703865856,703866623,CM
+703866624,703867135,ZA
+703867136,703867391,CM
+703867392,703867647,ZA
+703867648,703869439,CM
+703869440,703869951,ZA
+703869952,703870975,CM
+703870976,703871487,ZA
+703871488,703871743,CM
+703871744,703871999,ZA
+703872000,703876607,CM
+703876608,703876863,ZA
+703876864,703884287,CM
+703884288,703884799,ZA
+703884800,703885055,CM
+703885056,703885311,ZA
+703885312,703886079,CM
+703886080,703886335,ZA
+703886336,703888639,CM
+703888640,703888895,ZA
+703888896,703889151,CM
+703889152,703889407,ZA
+703889408,703889663,CM
+703889664,703890175,ZA
+703890176,703891455,CM
+703891456,703892223,ZA
+703892224,703897343,CM
+703897344,703897599,ZA
+703897600,703901183,CM
+703901184,703901695,ZA
+703901696,703902975,CM
+703902976,703903231,ZA
+703903232,703903487,CM
+703903488,703903743,ZA
+703903744,703905535,CM
+703905536,703905791,ZA
+703905792,703912447,CM
+703912448,703912703,ZA
+703912704,703912959,CM
+703912960,703913215,ZA
+703913216,703913727,CM
+703913728,703913983,ZA
+703913984,703914239,CM
+703914240,703914495,ZA
+703914496,703914751,CM
+703914752,703915519,ZA
+703915520,703919359,CM
+703919360,703919615,ZA
+703919616,703922175,CM
+703922176,704118783,ZA
704118784,704380927,MA
704380928,704643071,LY
704643072,704644095,CN
@@ -15346,7 +5827,13 @@
711131136,711160831,CN
711160832,711161855,BD
711161856,711163903,CN
-711163904,711196671,JP
+711163904,711164727,JP
+711164728,711164735,HK
+711164736,711166463,JP
+711166464,711166591,HK
+711166592,711169311,JP
+711169312,711169327,IN
+711169328,711196671,JP
711196672,711458815,CN
711458816,711983103,IN
711983104,712507391,VN
@@ -15374,23 +5861,24 @@
738197504,746717183,US
746717184,746782719,DE
746782720,755105791,US
+759234560,759235583,SG
+759235584,759236607,NZ
+759236608,759237631,IN
+759237632,759238655,AU
+765460480,767557631,UY
771751936,771817471,RU
771817472,771948543,TR
771948544,772014079,RU
-772014080,772050575,DE
-772050576,772050583,TR
-772050584,772054815,DE
-772054816,772054847,ES
-772054848,772076127,DE
-772076128,772076159,EG
-772076160,772076175,IT
-772076176,772145151,DE
+772014080,772145151,DE
772145152,772210687,ES
772210688,772276223,IE
772276224,772284415,NL
772284416,772284927,RU
772284928,772285183,UA
-772285184,772296703,RU
+772285184,772285439,UZ
+772285440,772285695,RU
+772285696,772285951,GR
+772285952,772296703,RU
772296704,772300799,UA
772300800,772341759,RU
772341760,772407295,NO
@@ -15402,9 +5890,7 @@
772734976,772800511,NO
772800512,772802559,GB
772802560,772804607,RU
-772804608,772805119,GL
-772805120,772805631,DK
-772805632,772806655,GL
+772804608,772806655,GL
772806656,772808703,RU
772808704,772810751,GB
772810752,772812799,FR
@@ -15425,7 +5911,15 @@
772841472,772843519,GB
772843520,772845567,IT
772845568,772847615,RU
-772847616,772849663,GB
+772847616,772848871,GB
+772848872,772848879,US
+772848880,772849231,GB
+772849232,772849247,MY
+772849248,772849255,GB
+772849256,772849263,US
+772849264,772849271,GB
+772849272,772849279,US
+772849280,772849663,GB
772849664,772851711,BG
772851712,772853759,CH
772853760,772855807,GB
@@ -15441,19 +5935,10 @@
772876288,772880383,RU
772880384,772882431,GB
772882432,772884479,FR
-772884480,772884543,GB
-772884544,772884735,LB
-772884736,772884799,GB
-772884800,772885503,LB
-772885504,772885567,GB
-772885568,772885759,LB
-772885760,772885823,GB
-772885824,772886527,LB
+772884480,772886527,LB
772886528,772888575,FR
772888576,772890623,GB
-772890624,772892479,RU
-772892480,772892486,HK
-772892487,772892671,RU
+772890624,772892671,RU
772892672,772894719,GB
772894720,772896767,PL
772896768,772898815,RS
@@ -15468,20 +5953,17 @@
772915200,772917247,FI
772917248,772919295,RU
772919296,772923391,GB
-772923392,772923519,AT
-772923520,772923551,DE
-772923552,772925439,AT
-772925440,772925695,GB
-772925696,772926719,ZW
-772926720,772926975,GB
-772926976,772927231,ZW
-772927232,772927487,GB
+772923392,772925439,AT
+772925440,772926463,GB
+772926464,772926719,ZW
+772926720,772927231,GB
+772927232,772927487,ZW
772927488,772929535,UA
772929536,772931583,RU
772931584,772933631,UA
-772933632,772933920,GB
-772933921,772933928,IE
-772933929,772935679,GB
+772933632,772933887,GB
+772933888,772934143,IE
+772934144,772935679,GB
772935680,772937727,PS
772937728,772939775,IT
772939776,772941823,BE
@@ -15490,7 +5972,8 @@
772945920,772947967,DE
772947968,772950015,AZ
772950016,772952063,ES
-772952064,772954111,GB
+772952064,772952319,US
+772952320,772954111,GB
772954112,772958207,FR
772958208,772962303,GB
772962304,772966399,FR
@@ -15500,17 +5983,13 @@
772972544,772974591,SA
772974592,772978687,GB
772978688,772980735,DE
-772980736,772982271,FR
-772982272,772982279,US
-772982280,772982783,FR
+772980736,772982783,FR
772982784,772984831,RU
772984832,772986879,FR
772986880,772988927,GB
772988928,772990975,FR
772990976,772993023,IT
-772993024,772994815,DE
-772994816,772994943,US
-772994944,772995071,DE
+772993024,772995071,DE
772995072,772997119,IR
772997120,772999167,BE
772999168,773001215,SI
@@ -15528,10 +6007,7 @@
773023744,773025791,RO
773025792,773027839,RU
773027840,773031935,FR
-773031936,773032191,CH
-773032192,773032447,CH
-773032448,773033727,CH
-773033728,773033983,CH
+773031936,773033983,CH
773033984,773036031,LV
773036032,773038079,DE
773038080,773040127,GB
@@ -15542,39 +6018,23 @@
773048320,773050367,LV
773050368,773052415,IE
773052416,773054463,NL
-773054464,773054719,RS
-773054720,773055487,AL
-773055488,773056127,RS
-773056128,773056511,AL
+773054464,773055231,AL
+773055232,773055359,XK
+773055360,773055871,AL
+773055872,773055999,RS
+773056000,773056255,XK
+773056256,773056511,AL
773056512,773058559,IT
773058560,773060607,BE
773060608,773062655,DK
-773062656,773063040,TR
-773063041,773063071,GB
-773063072,773063087,TR
-773063088,773063119,GB
-773063120,773063127,TR
-773063128,773063135,GB
-773063136,773063166,TR
-773063167,773063167,GB
-773063168,773063424,TR
-773063425,773063436,US
-773063437,773065088,TR
-773065089,773065215,US
-773065216,773066751,TR
+773062656,773066751,TR
773066752,773070847,AT
-773070848,773074463,DE
-773074464,773074495,YE
-773074496,773074943,DE
+773070848,773074943,DE
773074944,773079039,PL
773079040,773083135,RU
773083136,773087231,IT
773087232,773091327,LB
-773091328,773092867,GB
-773092868,773092990,US
-773092991,773094660,GB
-773094661,773094910,US
-773094911,773095423,GB
+773091328,773095423,GB
773095424,773099519,RO
773099520,773103615,TR
773103616,773107711,FR
@@ -15585,42 +6045,28 @@
773124096,773128191,CH
773128192,773132287,DE
773132288,773134335,IT
-773134336,773134847,CH
-773134848,773136127,IT
-773136128,773136159,CH
-773136160,773136383,IT
+773134336,773135359,CH
+773135360,773136383,IT
773136384,773140479,DK
773140480,773144575,CY
773144576,773148671,RU
773148672,773152767,IR
773152768,773153791,SE
773153792,773154815,US
-773154816,773155583,SE
-773155584,773155839,US
-773155840,773156863,SE
-773156864,773158143,FR
-773158144,773158911,DE
-773158912,773160447,FR
-773160448,773160959,ES
-773160960,773165055,FR
+773154816,773156863,SE
+773156864,773165055,FR
773165056,773166463,NL
773166464,773166591,PL
-773166592,773168799,US
-773168800,773168815,NL
-773168816,773169151,US
-773169152,773171343,NL
-773171344,773171359,BE
-773171360,773171599,NL
-773171600,773171607,BE
-773171608,773171615,NL
-773171616,773171647,BE
-773171648,773172223,NL
-773172224,773172287,BE
-773172288,773172351,GB
-773172352,773172479,NL
-773172480,773172607,GB
-773172608,773172735,BE
-773172736,773173247,NL
+773166592,773167199,US
+773167200,773167207,NL
+773167208,773167359,US
+773167360,773167615,NL
+773167616,773168127,US
+773168128,773168415,NL
+773168416,773168639,US
+773168640,773168895,NL
+773168896,773169151,US
+773169152,773173247,NL
773173248,773177343,IT
773177344,773181439,FR
773181440,773185535,PL
@@ -15629,7 +6075,15 @@
773197824,773201919,CH
773201920,773206015,DE
773206016,773210111,RU
-773210112,773214207,US
+773210112,773210623,US
+773210624,773211135,ES
+773211136,773211391,FR
+773211392,773211647,US
+773211648,773211903,NL
+773211904,773212159,US
+773212160,773212671,NL
+773212672,773213183,GB
+773213184,773214207,US
773214208,773218303,FR
773218304,773222399,IS
773222400,773226495,SE
@@ -15667,9 +6121,7 @@
773597184,773599231,BE
773599232,773601279,GB
773601280,773603327,LV
-773603328,773603839,UA
-773603840,773603855,HK
-773603856,773605375,UA
+773603328,773605375,UA
773605376,773607423,IR
773607424,773609471,DE
773609472,773611519,RU
@@ -15687,24 +6139,18 @@
773634048,773636095,DE
773636096,773638143,UA
773638144,773640191,CH
-773640192,773640513,ES
-773640514,773640515,FR
-773640516,773640516,NL
-773640517,773642239,ES
+773640192,773642239,ES
773642240,773644287,HU
773644288,773646335,RU
773646336,773648383,TR
773648384,773650431,PL
773650432,773652479,GB
-773652480,773653503,SK
-773653504,773653775,CZ
-773653776,773654527,SK
+773652480,773652735,TR
+773652736,773653503,SK
+773653504,773654527,TR
773654528,773656575,RU
773656576,773658623,PL
-773658624,773660671,DE
-773660672,773660935,AT
-773660936,773660943,IT
-773660944,773662719,AT
+773660672,773662719,AT
773662720,773664767,DE
773664768,773666815,ES
773666816,773668863,GB
@@ -15713,37 +6159,15 @@
773672960,773675007,SA
773675008,773677055,GB
773677056,773679103,DE
-773679104,773679135,IT
-773679136,773679231,A2
-773679232,773679295,DE
-773679296,773679327,A2
-773679328,773679359,IT
-773679360,773679423,GB
-773679424,773679487,A2
-773679488,773679615,FR
-773679616,773680383,IT
-773680384,773680639,A2
-773680640,773680703,LY
-773680704,773680895,IT
-773680896,773681151,HK
+773679104,773681151,IT
773681152,773683199,RU
-773683200,773684223,FR
-773684224,773684239,GB
-773684240,773684255,BE
-773684256,773684271,NL
-773684272,773685247,FR
+773683200,773685247,FR
773685248,773687295,UA
773687296,773689343,HU
773689344,773691391,PL
773691392,773695487,RU
773695488,773697535,MK
-773697536,773698047,LU
-773698048,773698063,GB
-773698064,773698079,US
-773698080,773698095,DE
-773698096,773698111,BE
-773698112,773698127,FR
-773698128,773699583,LU
+773697536,773699583,LU
773699584,773701631,CZ
773701632,773703679,RU
773703680,773705727,IT
@@ -15762,11 +6186,7 @@
773730304,773732351,GB
773732352,773734399,DE
773734400,773736447,CZ
-773736448,773738947,DE
-773738948,773738951,NO
-773738952,773739199,DE
-773739200,773739203,GB
-773739204,773740543,DE
+773736448,773740543,DE
773740544,773742591,CZ
773742592,773744639,GB
773744640,773746687,ES
@@ -15792,20 +6212,10 @@
773787648,773789695,DK
773789696,773791743,RU
773791744,773793791,PL
-773793792,773794527,FR
-773794528,773794535,GB
-773794536,773794543,IT
-773794544,773794551,ES
-773794552,773794559,DE
-773794560,773795839,FR
+773793792,773795839,FR
773795840,773797887,NL
773797888,773799935,ES
-773799936,773800447,GB
-773800448,773800703,CY
-773800704,773800959,GB
-773800960,773801215,SG
-773801216,773801727,US
-773801728,773801983,GB
+773799936,773801983,CY
773801984,773804031,IQ
773804032,773806079,GB
773806080,773808127,BE
@@ -15823,15 +6233,18 @@
773830656,773832703,NO
773832704,773834751,FR
773834752,773835007,GB
-773835008,773835519,IM
-773835520,773835647,GB
-773835648,773836031,IM
-773836032,773836799,GB
+773835008,773835263,IM
+773835264,773835519,GB
+773835520,773835775,IM
+773835776,773836031,GB
+773836032,773836287,IM
+773836288,773836799,GB
773836800,773838847,FR
773838848,773840895,DE
773840896,773842943,GB
-773842944,773844991,EU
-773844992,773846015,GB
+773844992,773845247,GB
+773845248,773845503,GG
+773845504,773846015,GB
773846016,773846527,GG
773846528,773847039,GB
773847040,773849087,IT
@@ -15852,97 +6265,36 @@
773963776,773971967,ME
773971968,773980159,UA
773980160,773988351,GB
-773988352,773999615,ES
-773999616,774000127,NL
-774000128,774000695,ES
-774000696,774000735,US
-774000736,774000743,ES
-774000744,774000751,US
-774000752,774000767,ES
-774000768,774000831,NL
-774000832,774000863,US
-774000864,774000879,NL
-774000880,774000895,US
-774000896,774001151,NL
-774001152,774001407,ES
-774001408,774001471,US
-774001472,774001487,ES
-774001488,774001503,NL
-774001504,774001535,ES
-774001536,774002687,NL
-774002688,774002815,US
-774002816,774002943,NL
-774002944,774003199,ES
-774003200,774003263,TR
-774003264,774003311,ES
-774003312,774003455,TR
-774003456,774003583,ES
-774003584,774003607,TR
-774003608,774003615,ES
-774003616,774003695,TR
-774003696,774003711,IE
-774003712,774004223,BE
-774004224,774004479,ES
-774004480,774004511,BE
-774004512,774004527,ES
-774004528,774004543,BE
-774004544,774004735,ES
+773988352,774000823,ES
+774000824,774000824,GB
+774000825,774001663,ES
+774001664,774002687,NL
+774002688,774002815,ES
+774002816,774002842,NL
+774002843,774002843,ES
+774002844,774002943,NL
+774002944,774004735,ES
774004736,774012927,IR
774012928,774021119,RU
774021120,774029311,IR
774029312,774037503,RO
774037504,774045695,SK
774045696,774053887,FR
-774053888,774055519,DE
-774055520,774055679,US
-774055680,774055935,DE
-774055936,774057855,US
-774057856,774058079,DE
-774058080,774058095,US
-774058096,774058111,DE
-774058112,774058239,US
-774058240,774058327,DE
-774058328,774058335,US
-774058336,774058359,DE
-774058360,774058367,HR
-774058368,774058399,US
-774058400,774058559,DE
-774058560,774058599,US
-774058600,774058815,DE
-774058816,774058847,US
-774058848,774058871,DE
-774058872,774058879,US
-774058880,774059215,DE
-774059216,774059223,ZA
-774059224,774059263,US
-774059264,774059391,DE
-774059392,774059423,US
-774059424,774059455,DE
-774059456,774059519,US
-774059520,774060031,DE
-774060032,774060047,ES
-774060048,774060063,DE
-774060064,774060159,US
-774060160,774060639,DE
-774060640,774060799,US
-774060800,774061007,DE
-774061008,774061023,CZ
-774061024,774061103,DE
-774061104,774061111,GI
-774061112,774061367,DE
-774061368,774061407,US
-774061408,774061567,DE
-774061568,774061727,US
-774061728,774062015,DE
-774062016,774062047,US
-774062048,774062079,DE
+774053888,774055935,DE
+774055936,774057727,US
+774057728,774062079,DE
774062080,774070271,YE
774070272,774078463,ES
774078464,774086655,BA
774086656,774094847,BG
774094848,774103039,HU
-774103040,774111231,UA
-774111232,774119423,RU
+774103040,774104831,RU
+774104832,774105087,UA
+774105088,774105343,RU
+774105344,774105599,UA
+774105600,774109695,RU
+774109696,774109951,UA
+774109952,774119423,RU
774119424,774127615,CZ
774127616,774135807,LT
774135808,774143999,IR
@@ -15950,24 +6302,27 @@
774152192,774160383,BA
774160384,774160415,VA
774160416,774160448,LI
-774160449,774160480,IM
+774160449,774160458,IM
+774160459,774160468,CA
+774160469,774160480,MX
774160481,774160514,IS
-774160515,774160547,RU
+774160515,774160547,MX
774160548,774160580,AE
-774160581,774160612,DK
+774160581,774160612,MX
774160613,774160639,AT
774160640,774160671,GI
774160672,774160702,CY
774160703,774160735,CH
774160736,774160768,GR
774160769,774160801,IL
-774160802,774160832,BG
+774160802,774160802,VA
+774160803,774160832,BG
774160833,774160864,NO
774160865,774160869,BR
774160870,774160873,CA
774160874,774160895,CR
774160896,774160927,PA
-774160928,774160935,CU
+774160928,774160935,MW
774160936,774160946,BS
774160947,774160956,KY
774160957,774160966,JM
@@ -16006,7 +6361,7 @@
774161273,774161282,MT
774161283,774161292,SE
774161293,774161302,US
-774161303,774161312,HK
+774161303,774161312,VA
774161313,774161322,IE
774161323,774161332,PK
774161333,774161337,KW
@@ -16022,24 +6377,30 @@
774161383,774161387,EE
774161388,774161392,LU
774161393,774161397,SK
-774161398,774161402,SI
+774161398,774161402,VA
774161403,774161405,LC
774161406,774161408,VA
-774161409,774161418,AU
+774161409,774161409,GB
+774161410,774161417,US
+774161418,774161418,GB
774161419,774161428,GL
774161429,774161438,HU
774161439,774161448,MK
774161449,774161458,PS
774161459,774161468,UZ
774161469,774161478,MS
-774161479,774161488,US
+774161479,774161479,GB
+774161480,774161487,US
+774161488,774161488,GB
774161489,774161498,MN
774161499,774161518,US
774161519,774161528,TW
774161529,774161538,DO
774161539,774161548,PY
774161549,774161558,EE
-774161559,774161568,SK
+774161559,774161559,SK
+774161560,774161566,BR
+774161567,774161568,SK
774161569,774161578,LC
774161579,774161588,VE
774161589,774161598,TC
@@ -16049,9 +6410,11 @@
774161649,774161658,HK
774161659,774161664,VA
774161665,774161674,US
-774161675,774161684,CL
+774161675,774161675,CL
+774161676,774161684,VA
774161685,774161694,GR
-774161695,774161704,AG
+774161695,774161695,AG
+774161696,774161704,GR
774161705,774161714,AM
774161715,774161724,GB
774161725,774161734,RO
@@ -16062,128 +6425,114 @@
774161775,774161784,SN
774161785,774161794,MA
774161795,774161804,BH
-774161805,774161814,JE
+774161805,774161805,JE
+774161806,774161813,US
+774161814,774161814,JE
774161815,774161824,TV
-774161825,774161834,PF
+774161825,774161825,PF
+774161826,774161833,US
+774161834,774161834,PF
774161835,774161844,SB
774161845,774161854,VU
-774161855,774161864,CW
-774161865,774161869,AR
+774161855,774161855,CW
+774161856,774161863,MX
+774161864,774161864,CW
+774161865,774161865,AR
+774161866,774161869,VA
774161870,774161874,ES
-774161875,774161879,GE
-774161880,774161884,RS
-774161885,774161889,DE
-774161890,774161894,IT
-774161895,774161899,BE
+774161875,774161899,VA
774161900,774161904,FR
-774161905,774161909,CZ
-774161910,774161914,LT
-774161915,774161917,PL
-774161918,774161920,VA
-774161921,774161940,GB
-774161941,774161950,AU
-774161951,774161955,IT
-774161956,774161960,NZ
-774161961,774161965,PL
-774161966,774161970,NL
-774161971,774161975,CA
-774161976,774161980,US
-774161981,774161985,GB
-774161986,774161990,IQ
-774161991,774161995,LT
-774161996,774162000,ER
-774162001,774162005,KE
-774162006,774162010,DE
-774162011,774162015,TN
-774162016,774162020,TT
-774162021,774162025,BO
-774162026,774162030,CH
-774162031,774162035,AU
-774162036,774162040,AL
-774162041,774162045,AD
-774162046,774162050,HR
-774162051,774162055,ME
-774162056,774162060,SY
+774161905,774162060,VA
774162061,774162065,US
-774162066,774162070,HT
-774162071,774162075,EC
-774162076,774162080,SH
-774162081,774162085,ZM
-774162086,774162090,KH
-774162091,774162095,VN
-774162096,774162100,FM
-774162101,774162105,US
+774162066,774162105,VA
774162106,774162110,GB
-774162111,774162115,SO
-774162116,774162120,FI
-774162121,774162125,DZ
+774162111,774162125,VA
774162126,774162130,MO
-774162131,774162135,MR
-774162136,774162140,CM
-774162141,774162145,SV
-774162146,774162150,HN
-774162151,774162155,US
-774162156,774162160,UY
-774162161,774162165,LV
-774162166,774162170,MD
+774162131,774162170,VA
774162171,774162173,GB
-774162174,774162176,VA
-774162177,774162181,LK
-774162182,774162186,IE
-774162187,774162196,EH
-774162197,774162206,NA
-774162207,774162216,CX
-774162217,774162236,GB
-774162237,774162246,CH
-774162247,774162266,US
-774162267,774162276,PT
-774162277,774162286,AE
-774162287,774162296,IO
+774162174,774162225,VA
+774162226,774162236,GB
+774162237,774162246,VA
+774162247,774162256,US
+774162257,774162296,VA
774162297,774162306,GB
-774162307,774162316,RE
-774162317,774162326,TK
-774162327,774162336,CV
+774162307,774162336,VA
774162337,774162346,AZ
774162347,774162366,US
774162367,774162376,MX
-774162377,774162386,GB
-774162387,774162396,ZW
+774162377,774162383,GB
+774162384,774162386,MX
+774162387,774162387,ZW
+774162388,774162395,DE
+774162396,774162396,ZW
774162397,774162406,SZ
774162407,774162416,SD
774162417,774162426,BF
774162427,774162432,VA
774162433,774162442,GB
774162443,774162452,BA
-774162453,774162462,WS
+774162453,774162453,WS
+774162454,774162461,BO
+774162462,774162462,WS
774162463,774162472,SR
-774162473,774162483,PT
-774162484,774162492,CK
-774162493,774162502,KI
+774162473,774162473,PT
+774162474,774162481,IT
+774162482,774162482,PT
+774162483,774162492,CK
+774162493,774162493,KI
+774162494,774162501,IT
+774162502,774162502,KI
774162503,774162512,NU
-774162513,774162522,TO
-774162523,774162532,CL
+774162513,774162513,TO
+774162514,774162521,BO
+774162522,774162522,TO
+774162523,774162523,CL
+774162524,774162531,DE
+774162532,774162532,CL
774162533,774162542,TF
774162543,774162552,GG
-774162553,774162562,LR
+774162553,774162553,LR
+774162554,774162561,MX
+774162562,774162562,LR
774162563,774162572,MQ
774162573,774162582,YT
774162583,774162592,NC
-774162593,774162602,NG
-774162603,774162627,US
+774162593,774162593,NG
+774162594,774162601,CA
+774162602,774162602,NG
+774162603,774162622,US
+774162623,774162627,MX
774162628,774162637,GB
774162638,774162642,NF
-774162643,774162687,US
+774162643,774162647,VN
+774162648,774162652,AO
+774162653,774162657,GM
+774162658,774162662,US
+774162663,774162667,BW
+774162668,774162672,US
+774162673,774162677,KG
+774162678,774162682,MG
+774162683,774162687,US
774162688,774162688,VA
-774162689,774162778,US
-774162779,774162798,CA
+774162689,774162693,US
+774162694,774162698,MZ
+774162699,774162703,NP
+774162704,774162738,US
+774162739,774162743,VA
+774162744,774162778,US
+774162779,774162787,CA
+774162788,774162788,VA
+774162789,774162798,CA
774162799,774162803,BN
774162804,774162808,TM
774162809,774162813,US
774162814,774162818,IT
774162819,774162823,KZ
-774162824,774162828,MV
+774162824,774162827,US
+774162828,774162828,MV
774162829,774162833,PN
-774162834,774162838,SM
+774162834,774162835,SM
+774162836,774162838,PN
774162839,774162848,GB
774162849,774162853,AU
774162854,774162858,NL
@@ -16199,43 +6548,39 @@
774162929,774162933,NR
774162934,774162938,GS
774162939,774162942,UM
-774162943,774162943,VA
-774162944,774162964,CH
-774162965,774162969,LU
-774162970,774162974,BY
-774162975,774162979,MY
-774162980,774162984,IN
-774162985,774162989,HR
-774162990,774162999,RU
-774163000,774163004,PK
-774163005,774163009,NZ
-774163010,774163014,VE
-774163015,774163074,CH
-774163075,774163084,GW
-774163085,774163094,LS
-774163095,774163104,ML
-774163105,774163114,PW
-774163115,774163124,SL
-774163125,774163134,TJ
-774163135,774163139,TG
-774163140,774163144,AS
-774163145,774163149,BD
-774163150,774163154,BT
-774163155,774163159,GF
-774163160,774163164,GP
-774163165,774163169,GN
-774163170,774163174,MU
-774163175,774163179,CG
-774163180,774163199,CH
-774163200,774163205,VA
-774163206,774163210,AU
+774162943,774162944,VA
+774162945,774162964,IT
+774162965,774162966,MX
+774162967,774162967,LI
+774162968,774162969,MX
+774162970,774162970,BY
+774162971,774162971,MX
+774162972,774162974,VA
+774162975,774162975,MY
+774162976,774162979,VA
+774162980,774162980,IN
+774162981,774162983,BO
+774162984,774162987,SX
+774162988,774162991,MX
+774162992,774162999,VA
+774163000,774163000,PK
+774163001,774163004,BO
+774163005,774163005,NZ
+774163006,774163009,BO
+774163010,774163010,VE
+774163011,774163014,BO
+774163015,774163071,VA
+774163072,774163074,GW
+774163075,774163124,IT
+774163125,774163127,TJ
+774163128,774163203,VA
+774163204,774163210,AU
774163211,774163215,TD
774163216,774163220,CD
774163221,774163225,DJ
774163226,774163230,CF
774163231,774163235,VA
-774163236,774163239,MF
-774163240,774163240,SX
+774163236,774163240,MF
774163241,774163245,VC
774163246,774163250,PM
774163251,774163255,BL
@@ -16244,39 +6589,29 @@
774163266,774163270,TZ
774163271,774163275,ST
774163276,774163280,GB
-774163281,774163285,KP
-774163286,774163290,FK
-774163291,774163295,BJ
-774163296,774163300,BI
-774163301,774163305,CI
-774163306,774163310,GQ
-774163311,774163315,GA
-774163316,774163320,GH
-774163321,774163325,NE
-774163326,774163330,RW
-774163331,774163335,UG
-774163336,774163340,MP
-774163341,774163345,TL
-774163346,774163350,WF
-774163351,774163354,SD
-774163355,774163360,SS
-774163361,774163370,BQ
-774163371,774163380,CW
-774163381,774163390,IT
-774163391,774163400,GE
-774163401,774163415,US
-774163416,774163454,IT
-774163455,774164479,VA
-774164480,774166527,CZ
+774163281,774163283,KP
+774163284,774163290,FK
+774163291,774163330,IT
+774163331,774163331,UG
+774163332,774163335,VA
+774163336,774163339,MP
+774163340,774163343,TL
+774163344,774163347,WF
+774163348,774163351,SD
+774163352,774163359,VA
+774163360,774163367,BQ
+774163368,774163375,CW
+774163376,774163383,IT
+774163384,774163391,GE
+774163392,774163399,VA
+774163400,774163411,US
+774163412,774163455,VA
+774163456,774166527,DK
774166528,774168575,EE
774168576,774176767,PL
-774176768,774179391,IT
-774179392,774179407,CH
-774179408,774184959,IT
+774176768,774184959,IT
774184960,774193151,GB
-774193152,774206975,ES
-774206976,774207231,GB
-774207232,774209535,ES
+774193152,774209535,ES
774209536,774217727,RU
774217728,774225919,GB
774225920,774234111,UA
@@ -16284,10 +6619,8 @@
774242304,774258687,RU
774258688,774266879,SA
774266880,774275071,RU
-774275072,774283007,IR
-774283008,774283263,GB
-774283264,774284287,US
-774284288,774291455,GB
+774275072,774283263,IR
+774283264,774291455,GB
774291456,774299647,NL
774299648,774307839,DE
774307840,774324223,RU
@@ -16301,23 +6634,15 @@
774389760,774406143,BG
774406144,774422527,IT
774422528,774438911,OM
-774438912,774443823,DE
-774443824,774443839,PA
-774443840,774444031,DE
-774444032,774444047,NL
-774444048,774444223,DE
-774444224,774444255,NL
-774444256,774455295,DE
+774438912,774455295,DE
774455296,774471679,RU
774471680,774488063,PL
-774488064,774504447,RO
+774488064,774504447,IR
774504448,774520831,RU
774520832,774537215,BH
774537216,774553599,RU
774553600,774569983,RO
-774569984,774579295,GB
-774579296,774579327,IT
-774579328,774586367,GB
+774569984,774586367,GB
774586368,774602751,PS
774602752,774619135,GB
774619136,774651903,RU
@@ -16355,46 +6680,8 @@
775421952,775487487,BY
775487488,775520255,AT
775520256,775553023,SY
-775553024,775557119,EU
-775557120,775557375,CH
-775557376,775569407,EU
-775569408,775569663,US
-775569664,775585791,EU
775585792,775618559,SY
-775618560,775641087,SE
-775641088,775641119,FI
-775641120,775641215,SE
-775641216,775641279,GB
-775641280,775641343,DE
-775641344,775641375,FI
-775641376,775641471,SE
-775641472,775641535,GB
-775641536,775641599,DE
-775641600,775641631,FI
-775641632,775641727,SE
-775641728,775641791,GB
-775641792,775641855,DE
-775641856,775641887,FI
-775641888,775641983,SE
-775641984,775642047,GB
-775642048,775642111,DE
-775642112,775642143,FI
-775642144,775642239,SE
-775642240,775642303,GB
-775642304,775642367,DE
-775642368,775642399,FI
-775642400,775642495,SE
-775642496,775642559,GB
-775642560,775642623,DE
-775642624,775642655,FI
-775642656,775642751,SE
-775642752,775642815,GB
-775642816,775642879,DE
-775642880,775642911,FI
-775642912,775643007,SE
-775643008,775643071,GB
-775643072,775643135,DE
-775643136,775645951,SE
+775618560,775645951,SE
775645952,775646207,NO
775646208,775651327,SE
775651328,775684095,DE
@@ -16403,7 +6690,7 @@
775710720,775716863,PS
775716864,775749631,GB
775749632,775847935,RU
-775847936,775880703,RO
+775847936,775880703,IR
775880704,775913471,UA
775913472,775946239,RU
775946240,776077311,GB
@@ -16417,1536 +6704,108 @@
778043392,778108927,UA
778108928,778174463,RO
778174464,778239999,UA
-778240000,778244351,AL
-778244352,778244607,RS
-778244608,778305535,AL
+778240000,778244095,AL
+778244096,778244351,RS
+778244352,778245119,AL
+778245120,778245375,RS
+778245376,778247679,AL
+778247680,778247935,XK
+778247936,778248191,RS
+778248192,778249727,AL
+778249728,778249983,RS
+778249984,778305535,AL
778305536,778371071,IR
778371072,778436607,RU
-778436608,778498047,RO
+778436608,778476031,RO
+778476032,778476287,MD
+778476288,778493951,RO
+778493952,778495999,NL
+778496000,778498047,RO
778498048,778500095,NL
778500096,778502143,RO
778502144,778567679,GR
778567680,778633215,TR
-778633216,778638079,FR
-778638080,778638335,IT
-778638336,778638591,ES
-778638592,778638975,FR
-778638976,778639103,CZ
-778639104,778639231,LT
-778639232,778639359,FI
-778639360,778639615,ES
-778639616,778639871,PL
-778639872,778640127,DE
-778640128,778640383,GB
-778640384,778640639,IT
-778640640,778640895,PT
-778640896,778641151,NL
-778641152,778641407,IE
-778641408,778665983,FR
-778665984,778666015,BE
-778666016,778666031,FR
-778666032,778666047,PL
-778666048,778666063,FR
-778666064,778666079,IE
-778666080,778666095,FR
-778666096,778666099,PL
-778666100,778666103,LT
-778666104,778666107,GB
-778666108,778666111,IE
-778666112,778666119,FR
-778666120,778666123,GB
-778666124,778666127,NL
-778666128,778666135,FR
-778666136,778666143,PL
-778666144,778666151,FR
-778666152,778666155,GB
-778666156,778666159,ES
-778666160,778666191,FR
-778666192,778666239,PL
-778666240,778666243,PT
-778666244,778666247,GB
-778666248,778666259,FR
-778666260,778666263,PL
-778666264,778666271,CH
-778666272,778666287,FR
-778666288,778666295,GB
-778666296,778666299,ES
-778666300,778666303,PL
-778666304,778666367,FR
-778666368,778666371,PL
-778666372,778666379,GB
-778666380,778666383,ES
-778666384,778666391,DE
-778666392,778666399,PL
-778666400,778666479,FR
+778633216,778666259,FR
+778666260,778666263,ES
+778666264,778666479,FR
778666480,778666495,DE
-778666496,778666751,IE
-778666752,778666783,CZ
-778666784,778666847,FR
-778666848,778666863,PT
-778666864,778666867,GB
-778666868,778666871,FR
-778666872,778666879,IE
-778666880,778666967,FR
-778666968,778666975,PL
-778666976,778667071,FR
-778667072,778667103,BE
-778667104,778667119,GB
-778667120,778667123,PT
-778667124,778667127,FR
-778667128,778667131,PL
-778667132,778667135,BE
-778667136,778667139,PL
-778667140,778667143,GB
-778667144,778667151,FR
-778667152,778667155,PL
-778667156,778667159,ES
-778667160,778667163,IT
-778667164,778667167,CH
-778667168,778667171,BE
-778667172,778667175,LT
-778667176,778667179,ES
-778667180,778667183,PT
-778667184,778667187,DE
-778667188,778667191,PL
-778667192,778667195,FR
-778667196,778667263,PL
-778667264,778667283,FR
-778667284,778667287,PL
-778667288,778667291,IT
-778667292,778667295,CH
-778667296,778667331,GB
-778667332,778667335,FR
-778667336,778667343,ES
-778667344,778667347,FR
-778667348,778667351,GB
-778667352,778667391,PL
-778667392,778667395,FR
-778667396,778667399,PL
-778667400,778667407,FI
-778667408,778667415,PL
-778667416,778667423,GB
-778667424,778667455,LT
-778667456,778667471,DE
-778667472,778667475,PL
-778667476,778667479,FR
-778667480,778667483,GB
-778667484,778667487,NL
-778667488,778667491,LT
-778667492,778667495,CH
-778667496,778667499,DE
-778667500,778667503,GB
-778667504,778667847,FR
-778667848,778667855,PL
-778667856,778667859,FR
-778667860,778667863,PL
-778667864,778667871,GB
-778667872,778667875,ES
-778667876,778667879,LT
-778667880,778667887,FI
-778667888,778667895,IT
-778667896,778667903,IE
-778667904,778667911,GB
-778667912,778667915,PL
-778667916,778667919,PT
-778667920,778667927,NL
-778667928,778667931,GB
-778667932,778667935,CZ
-778667936,778667943,FR
-778667944,778667947,PT
-778667948,778667951,PL
-778667952,778667967,GB
-778667968,778668015,FR
-778668016,778668019,DE
-778668020,778668023,NL
-778668024,778668027,PT
-778668028,778668031,NL
-778668032,778668319,FR
-778668320,778668351,GB
-778668352,778668359,FR
-778668360,778668367,PL
-778668368,778668371,DE
-778668372,778668375,ES
-778668376,778668379,GB
-778668380,778668383,FR
-778668384,778668391,ES
-778668392,778668395,FI
-778668396,778668399,ES
-778668400,778668415,GB
-778668416,778668495,ES
-778668496,778668499,PL
-778668500,778668507,FR
-778668508,778668511,PT
-778668512,778668515,PL
-778668516,778668519,DE
-778668520,778668527,FR
-778668528,778668535,IT
-778668536,778668539,DE
-778668540,778668543,FR
-778668544,778668559,GB
-778668560,778668567,IT
-778668568,778668575,PL
-778668576,778668607,FR
-778668608,778668615,IE
-778668616,778668619,FI
-778668620,778668623,PL
-778668624,778668639,FR
-778668640,778668671,PL
-778668672,778668703,FR
-778668704,778668707,PL
-778668708,778668711,ES
-778668712,778668719,FR
-778668720,778668727,PT
-778668728,778668731,IE
-778668732,778668735,FR
-778668736,778668799,IT
-778668800,778668863,FR
+778666496,778666879,FR
+778666880,778666943,GB
+778666944,778668863,FR
778668864,778668895,DE
-778668896,778669055,FR
-778669056,778669087,ES
-778669088,778669103,FR
-778669104,778669107,CZ
-778669108,778669111,GB
-778669112,778669115,FR
-778669116,778669119,DE
-778669120,778669151,FI
-778669152,778669207,FR
-778669208,778669211,CH
-778669212,778669215,ES
-778669216,778669219,CH
-778669220,778669223,FI
-778669224,778669231,GB
-778669232,778669295,FR
-778669296,778669303,PL
-778669304,778669311,DE
-778669312,778669447,FR
-778669448,778669451,BE
-778669452,778669455,ES
-778669456,778669471,FR
-778669472,778669503,CZ
-778669504,778669535,FR
-778669536,778669539,FI
-778669540,778669543,GB
-778669544,778669551,FR
-778669552,778669567,PL
-778669568,778669571,DE
-778669572,778669575,CZ
-778669576,778669579,NL
-778669580,778669583,DE
-778669584,778669587,ES
-778669588,778669591,FR
-778669592,778669599,BE
-778669600,778669615,FR
-778669616,778669623,GB
-778669624,778669631,PL
-778669632,778669663,FR
-778669664,778669695,NL
-778669696,778669727,PT
-778669728,778669759,NL
-778669760,778669767,DE
-778669768,778669771,GB
-778669772,778669775,FR
-778669776,778669783,DE
-778669784,778669787,IE
-778669788,778669791,PL
-778669792,778669807,DE
-778669808,778669823,FR
-778669824,778669855,ES
-778669856,778669887,FR
-778669888,778669903,PL
-778669904,778669935,FR
-778669936,778669943,DE
-778669944,778669951,CH
-778669952,778669959,NL
-778669960,778669967,GB
-778669968,778669983,IE
-778669984,778669999,IT
-778670000,778670007,PL
-778670008,778670011,CZ
-778670012,778670015,LT
-778670016,778670019,NL
-778670020,778670035,IT
-778670036,778670039,GB
-778670040,778670043,ES
-778670044,778670047,PT
-778670048,778670079,GB
-778670080,778670151,FR
-778670152,778670159,CH
-778670160,778670163,FR
-778670164,778670171,GB
-778670172,778670175,NL
-778670176,778670207,GB
-778670208,778670211,DE
-778670212,778670223,FR
-778670224,778670239,PL
-778670240,778670243,NL
-778670244,778670247,DE
-778670248,778670255,CZ
-778670256,778670287,FR
-778670288,778670291,CZ
-778670292,778670295,FR
-778670296,778670299,PL
-778670300,778670303,DE
-778670304,778670335,FR
-778670336,778670343,DE
-778670344,778670347,FR
-778670348,778670351,PL
-778670352,778670355,DE
-778670356,778670359,FR
-778670360,778670383,DE
-778670384,778670387,BE
-778670388,778670391,NL
-778670392,778670395,FR
-778670396,778670399,GB
-778670400,778670407,PL
-778670408,778670411,DE
-778670412,778670415,NL
-778670416,778670439,FR
-778670440,778670447,PL
-778670448,778670455,CH
-778670456,778670495,CZ
-778670496,778670503,FR
-778670504,778670511,ES
-778670512,778670519,NL
-778670520,778670523,FR
-778670524,778670527,PT
-778670528,778670559,FR
-778670560,778670563,PL
-778670564,778670567,FI
-778670568,778670575,FR
-778670576,778670591,IT
-778670592,778671103,ES
-778671104,778671127,GB
-778671128,778671135,PT
-778671136,778671167,BE
-778671168,778671171,DE
-778671172,778671175,FR
-778671176,778671183,ES
-778671184,778671203,FR
-778671204,778671207,FI
-778671208,778671211,FR
-778671212,778671215,PL
-778671216,778671231,FR
-778671232,778671239,GB
-778671240,778671247,FR
-778671248,778671263,PL
-778671264,778671279,GB
-778671280,778671311,FR
-778671312,778671327,PT
-778671328,778671331,ES
-778671332,778671335,DE
-778671336,778671343,BE
-778671344,778671631,FR
-778671632,778671647,PL
-778671648,778671807,FR
-778671808,778671839,ES
-778671840,778671871,FR
-778671872,778671875,DE
-778671876,778671879,ES
-778671880,778671883,NL
-778671884,778671887,FR
-778671888,778671903,GB
-778671904,778671907,NL
-778671908,778671915,FR
-778671916,778671919,GB
-778671920,778671967,FR
-778671968,778671999,NL
-778672000,778672055,FR
-778672056,778672063,PL
-778672064,778672067,GB
-778672068,778672071,BE
-778672072,778672079,GB
-778672080,778672095,BE
-778672096,778672103,CH
-778672104,778672111,NL
-778672112,778672119,GB
-778672120,778672123,ES
-778672124,778672127,CH
-778672128,778672255,FR
-778672256,778672319,BE
-778672320,778672383,FR
-778672384,778672447,PL
-778672448,778672479,DE
-778672480,778672511,ES
-778672512,778672527,PL
-778672528,778672543,FR
-778672544,778672551,ES
-778672552,778672559,CH
-778672560,778672563,GB
-778672564,778672567,IT
-778672568,778672639,FR
-778672640,778672703,DE
-778672704,778672767,CH
-778672768,778672803,FR
-778672804,778672807,DE
-778672808,778672811,PL
-778672812,778672815,ES
-778672816,778672819,IT
-778672820,778672823,ES
-778672824,778672831,DE
-778672832,778672851,FR
-778672852,778672879,PL
-778672880,778672887,FR
-778672888,778672891,ES
-778672892,778672911,FR
-778672912,778672919,PL
-778672920,778672927,FR
-778672928,778672959,DE
-778672960,778673079,FR
-778673080,778673083,ES
-778673084,778673087,PT
-778673088,778673119,FR
-778673120,778673151,ES
-778673152,778673187,FR
-778673188,778673191,DE
-778673192,778673195,ES
-778673196,778673199,GB
-778673200,778673207,FR
-778673208,778673215,DE
-778673216,778673247,IE
-778673248,778673263,FR
-778673264,778673279,IT
-778673280,778673283,GB
-778673284,778673295,FR
-778673296,778673303,PL
-778673304,778673311,DE
-778673312,778673315,CH
-778673316,778673319,FR
-778673320,778673327,IT
-778673328,778673343,FR
-778673344,778673359,PL
-778673360,778673375,GB
-778673376,778673387,FR
-778673388,778673391,DE
-778673392,778673407,PT
-778673408,778673663,PL
-778673664,778673711,FR
-778673712,778673719,PT
-778673720,778673723,IT
-778673724,778673727,PL
-778673728,778673807,FR
-778673808,778673839,ES
-778673840,778673843,FR
-778673844,778673847,GB
-778673848,778673851,DE
-778673852,778673879,FR
-778673880,778673883,CZ
-778673884,778673887,FI
-778673888,778673903,FR
-778673904,778673911,IT
-778673912,778673915,FR
-778673916,778673919,ES
-778673920,778674175,NL
-778674176,778674367,FR
-778674368,778674387,DE
-778674388,778674391,BE
-778674392,778674395,CH
-778674396,778674399,PT
-778674400,778674431,FR
-778674432,778674435,PL
-778674436,778674439,ES
-778674440,778674447,PL
-778674448,778674451,IT
-778674452,778674455,PL
-778674456,778674459,IT
-778674460,778674463,FI
-778674464,778674471,CH
-778674472,778674475,BE
-778674476,778674479,CH
-778674480,778674487,FR
-778674488,778674491,CZ
-778674492,778674495,PL
-778674496,778674499,CZ
-778674500,778674503,DE
-778674504,778674507,PL
-778674508,778674527,FR
-778674528,778674531,DE
-778674532,778674535,ES
-778674536,778674539,PT
-778674540,778674543,PL
-778674544,778674559,DE
-778674560,778674575,GB
-778674576,778674583,NL
-778674584,778674587,DE
-778674588,778674623,FR
-778674624,778674635,PL
-778674636,778674639,ES
-778674640,778674687,FR
-778674688,778674719,GB
-778674720,778674783,FR
-778674784,778674799,PL
-778674800,778674847,FR
-778674848,778674863,IT
-778674864,778674879,FI
-778674880,778674911,FR
-778674912,778674943,IE
-778674944,778674975,FR
-778674976,778674979,BE
-778674980,778674983,DE
-778674984,778674999,FR
-778675000,778675003,FI
-778675004,778675071,FR
-778675072,778675075,DE
-778675076,778675079,IT
-778675080,778675087,ES
-778675088,778675159,FR
-778675160,778675163,PL
-778675164,778675167,GB
-778675168,778675199,FR
-778675200,778675207,ES
-778675208,778675215,PL
-778675216,778675219,PT
-778675220,778675223,FR
-778675224,778675227,CZ
-778675228,778675235,FR
-778675236,778675243,PL
-778675244,778675247,DE
-778675248,778675359,FR
-778675360,778675367,DE
-778675368,778675371,CH
-778675372,778675375,CZ
-778675376,778675391,GB
-778675392,778675439,FR
-778675440,778675443,NL
-778675444,778675447,FR
-778675448,778675451,PL
-778675452,778675455,DE
-778675456,778675459,PL
-778675460,778675463,FR
-778675464,778675467,NL
-778675468,778675471,FR
-778675472,778675475,BE
-778675476,778675479,ES
-778675480,778675483,CH
-778675484,778675487,PT
-778675488,778675495,PL
-778675496,778675499,DE
-778675500,778675503,PL
-778675504,778675507,DE
-778675508,778675511,GB
-778675512,778675519,PL
-778675520,778675535,NL
-778675536,778675543,ES
-778675544,778675551,FR
-778675552,778675555,PL
-778675556,778675559,FR
-778675560,778675567,DE
-778675568,778675579,FR
-778675580,778675583,GB
-778675584,778675599,FR
-778675600,778675615,GB
-778675616,778675619,PL
-778675620,778675627,ES
-778675628,778675631,PL
-778675632,778675639,ES
-778675640,778675647,DE
-778675648,778675687,FR
-778675688,778675691,ES
-778675692,778675695,FR
-778675696,778675711,NL
-778675712,778675735,FR
-778675736,778675743,PL
-778675744,778675759,FR
-778675760,778675763,PT
+778668896,778670975,FR
+778670976,778670976,DE
+778670977,778673187,FR
+778673188,778673191,ES
+778673192,778673207,FR
+778673208,778673211,ES
+778673212,778673883,FR
+778673884,778673887,ES
+778673888,778675763,FR
778675764,778675767,PL
-778675768,778675775,ES
-778675776,778675779,GB
-778675780,778675783,PL
-778675784,778675791,ES
-778675792,778675795,NL
-778675796,778675799,DE
-778675800,778675803,GB
-778675804,778675807,CZ
-778675808,778675811,PL
-778675812,778675815,GB
-778675816,778675819,FR
-778675820,778675823,GB
-778675824,778675827,ES
-778675828,778675831,DE
-778675832,778675839,FR
-778675840,778675843,FI
-778675844,778675847,FR
-778675848,778675851,GB
-778675852,778675855,PT
-778675856,778675859,GB
-778675860,778675863,IE
-778675864,778675871,IT
-778675872,778675887,FR
-778675888,778675891,DE
-778675892,778675895,LT
-778675896,778675903,PL
-778675904,778675907,CH
-778675908,778675911,CZ
-778675912,778675915,NL
-778675916,778675919,DE
-778675920,778675923,FR
-778675924,778675927,IT
-778675928,778675935,FR
-778675936,778675947,ES
-778675948,778676095,FR
-778676096,778676099,DE
-778676100,778676103,CZ
-778676104,778676111,GB
-778676112,778676119,FR
-778676120,778676127,PL
-778676128,778676131,ES
-778676132,778676135,CZ
-778676136,778676139,DE
-778676140,778676143,PL
-778676144,778676159,ES
-778676160,778676183,FR
-778676184,778676191,PL
-778676192,778676207,FR
-778676208,778676215,DE
-778676216,778676219,FR
-778676220,778676223,GB
-778676224,778676351,FR
-778676352,778676359,NL
-778676360,778676367,FR
-778676368,778676383,GB
-778676384,778676415,FR
-778676416,778676423,ES
-778676424,778676431,PL
-778676432,778676439,FR
-778676440,778676443,PL
-778676444,778676447,CH
-778676448,778676463,FR
-778676464,778676479,PL
-778676480,778676543,NL
-778676544,778676555,FR
-778676556,778676559,ES
-778676560,778676563,FR
-778676564,778676567,NL
-778676568,778676579,FR
-778676580,778676583,DE
-778676584,778676587,BE
-778676588,778676591,DE
-778676592,778676607,FR
-778676608,778676611,PL
-778676612,778676615,PT
-778676616,778676619,BE
-778676620,778676623,FR
-778676624,778676627,GB
-778676628,778676631,ES
-778676632,778676635,FR
-778676636,778676639,DE
-778676640,778676655,ES
-778676656,778676687,FR
-778676688,778676691,ES
-778676692,778676695,PL
-778676696,778676719,FR
-778676720,778676723,GB
-778676724,778676727,PT
-778676728,778676735,BE
-778676736,778676743,FR
-778676744,778676747,CH
-778676748,778676751,CZ
-778676752,778676767,ES
-778676768,778676771,PL
-778676772,778676775,ES
-778676776,778676779,PL
-778676780,778676799,FR
-778676800,778676803,GB
-778676804,778676807,IT
-778676808,778676815,GB
-778676816,778676823,LT
-778676824,778676827,GB
-778676828,778676831,NL
-778676832,778676847,FR
-778676848,778676851,NL
-778676852,778676855,LT
-778676856,778676859,IE
-778676860,778676863,DE
-778676864,778676991,PL
-778676992,778676995,FR
-778676996,778676999,PL
-778677000,778677003,FR
-778677004,778677007,GB
-778677008,778677031,FR
-778677032,778677039,ES
-778677040,778677055,PL
-778677056,778677063,IT
-778677064,778677075,FR
-778677076,778677079,DE
-778677080,778677083,IT
-778677084,778677087,DE
-778677088,778677099,FR
-778677100,778677103,PL
-778677104,778677107,GB
-778677108,778677111,PL
-778677112,778677115,FR
-778677116,778677119,NL
-778677120,778677123,DE
-778677124,778677127,GB
-778677128,778677131,FR
-778677132,778677135,BE
-778677136,778677151,FR
-778677152,778677167,DE
-778677168,778677183,FR
-778677184,778677215,ES
-778677216,778677247,PL
-778677248,778677251,FR
-778677252,778677259,ES
-778677260,778677311,FR
-778677312,778677327,PL
-778677328,778677331,FI
-778677332,778677335,FR
-778677336,778677339,CH
-778677340,778677343,CZ
-778677344,778677375,FR
-778677376,778677391,GB
-778677392,778677399,FR
-778677400,778677403,PT
-778677404,778677407,CZ
-778677408,778677411,CH
-778677412,778677427,PL
-778677428,778677431,DE
-778677432,778677435,FR
-778677436,778677439,PL
-778677440,778677471,FR
+778675768,778675795,FR
+778675796,778675799,ES
+778675800,778675891,FR
+778675892,778675895,ES
+778675896,778677071,FR
+778677072,778677075,NL
+778677076,778677471,FR
778677472,778677475,DE
-778677476,778677479,CZ
-778677480,778677483,PL
-778677484,778677487,FR
-778677488,778677503,PL
-778677504,778677507,IE
-778677508,778677511,DE
-778677512,778677515,IT
-778677516,778677519,GB
-778677520,778677523,PL
-778677524,778677527,DE
-778677528,778677531,BE
-778677532,778677535,PT
-778677536,778677543,FI
-778677544,778677547,ES
-778677548,778677551,GB
-778677552,778677559,PL
-778677560,778677567,ES
-778677568,778677695,FR
-778677696,778677699,NL
-778677700,778677703,DE
-778677704,778677711,PL
-778677712,778677719,FR
-778677720,778677723,GB
-778677724,778677727,PL
-778677728,778677855,FR
-778677856,778677859,ES
-778677860,778677863,LT
-778677864,778677871,CH
-778677872,778677875,PL
-778677876,778677879,IT
-778677880,778677883,LT
-778677884,778677887,BE
-778677888,778677903,ES
-778677904,778677919,PT
-778677920,778677923,CH
-778677924,778677927,PT
-778677928,778677931,FR
-778677932,778677935,DE
-778677936,778677939,FR
-778677940,778677943,BE
-778677944,778677947,IT
-778677948,778677951,DE
-778677952,778677967,FR
-778677968,778677983,GB
-778677984,778677999,FR
-778678000,778678003,BE
-778678004,778678007,PL
-778678008,778678015,FR
-778678016,778678019,PL
-778678020,778678023,DE
-778678024,778678027,ES
-778678028,778678031,FR
-778678032,778678039,PL
-778678040,778678043,GB
-778678044,778678047,PL
-778678048,778678119,FR
-778678120,778678127,IT
-778678128,778678143,FR
-778678144,778678159,GB
-778678160,778678163,PL
-778678164,778678167,BE
-778678168,778678175,FR
-778678176,778678191,GB
-778678192,778678207,FR
-778678208,778678271,PL
-778678272,778678783,DE
-778678784,778678799,FR
-778678800,778678807,PL
-778678808,778678815,FR
-778678816,778678831,PL
-778678832,778678835,FR
-778678836,778678839,BE
-778678840,778678847,IT
-778678848,778678851,FR
-778678852,778678855,ES
-778678856,778678859,CZ
-778678860,778678863,GB
-778678864,778678871,PL
-778678872,778678875,ES
-778678876,778678879,NL
-778678880,778678895,FR
-778678896,778678903,GB
-778678904,778678911,PL
-778678912,778678919,FR
-778678920,778678927,ES
-778678928,778678943,BE
-778678944,778678967,FR
-778678968,778678975,PL
-778678976,778679007,FR
-778679008,778679023,PL
-778679024,778679031,NL
-778679032,778679035,FR
-778679036,778679039,PL
-778679040,778679047,DE
-778679048,778679055,PL
-778679056,778679071,BE
-778679072,778679075,FR
-778679076,778679079,BE
-778679080,778679087,FR
-778679088,778679091,PL
-778679092,778679095,CZ
-778679096,778679099,CH
-778679100,778679103,IT
-778679104,778679123,PL
-778679124,778679127,FR
-778679128,778679151,DE
-778679152,778679199,FR
-778679200,778679207,PT
-778679208,778679211,FR
-778679212,778679215,FI
-778679216,778679231,PT
-778679232,778679263,ES
-778679264,778679267,PT
-778679268,778679279,FR
-778679280,778679295,ES
-778679296,778679491,FR
-778679492,778679495,PL
-778679496,778679499,FR
-778679500,778679519,PL
-778679520,778679523,LT
-778679524,778679527,PL
-778679528,778679531,ES
-778679532,778679535,FR
-778679536,778679551,ES
-778679552,778679615,FR
-778679616,778679679,ES
-778679680,778679695,PT
-778679696,778679807,FR
-778679808,778679823,IT
-778679824,778679839,FR
-778679840,778679843,CH
-778679844,778679847,DE
-778679848,778679855,FR
-778679856,778679871,DE
-778679872,778679903,PL
-778679904,778679911,FR
-778679912,778679915,ES
-778679916,778679919,FR
-778679920,778679935,GB
-778679936,778680079,FR
-778680080,778680087,GB
-778680088,778680091,FR
-778680092,778680095,PL
-778680096,778680111,IT
-778680112,778680127,IE
-778680128,778680143,IT
-778680144,778680147,FR
-778680148,778680151,GB
-778680152,778680155,ES
-778680156,778680159,BE
-778680160,778680175,PT
-778680176,778680183,ES
-778680184,778680191,IT
-778680192,778680195,FR
-778680196,778680199,DE
-778680200,778680203,NL
-778680204,778680207,ES
-778680208,778680227,FR
+778677476,778677503,FR
+778677504,778677507,GB
+778677508,778677519,FR
+778677520,778677523,ES
+778677524,778679212,FR
+778679213,778679214,FI
+778679215,778679491,FR
+778679492,778679495,ES
+778679496,778680227,FR
778680228,778680231,IE
-778680232,778680255,FR
-778680256,778680271,IT
-778680272,778680287,GB
-778680288,778680471,FR
-778680472,778680475,ES
-778680476,778680479,IE
-778680480,778680559,FR
-778680560,778680575,ES
-778680576,778680639,NL
-778680640,778680643,FR
-778680644,778680647,PT
-778680648,778680655,ES
-778680656,778680679,FR
-778680680,778680683,PL
-778680684,778680767,FR
-778680768,778680831,BE
-778680832,778680895,IT
-778680896,778680959,CH
-778680960,778681023,DE
-778681024,778681087,FI
-778681088,778681343,FR
-778681344,778681359,GB
-778681360,778681367,ES
-778681368,778681371,FR
-778681372,778681375,LT
-778681376,778681383,FR
-778681384,778681391,DE
-778681392,778681399,FR
-778681400,778681403,DE
-778681404,778681407,ES
-778681408,778681411,FR
-778681412,778681419,GB
-778681420,778681423,FR
-778681424,778681431,FI
-778681432,778681435,IE
-778681436,778681439,FR
-778681440,778681455,GB
-778681456,778681459,NL
-778681460,778681463,PL
-778681464,778681471,ES
-778681472,778681479,FR
-778681480,778681483,IE
-778681484,778681487,PL
-778681488,778681495,IE
-778681496,778681503,FR
+778680232,778680683,FR
+778680684,778680687,ES
+778680688,778681503,FR
778681504,778681507,DE
-778681508,778681511,PL
-778681512,778681515,PT
-778681516,778681523,ES
-778681524,778681527,FR
-778681528,778681531,PL
-778681532,778681535,IT
-778681536,778681543,FR
-778681544,778681547,GB
-778681548,778681551,IT
-778681552,778681583,FR
-778681584,778681587,PL
-778681588,778681591,FR
-778681592,778681595,ES
-778681596,778681599,FR
-778681600,778681615,DE
-778681616,778681619,ES
-778681620,778681623,DE
-778681624,778681631,ES
-778681632,778681643,PL
-778681644,778681647,DE
-778681648,778681655,FR
-778681656,778681667,DE
-778681668,778681671,FR
-778681672,778681675,GB
-778681676,778681679,FR
-778681680,778681695,GB
-778681696,778681707,FR
-778681708,778681711,ES
-778681712,778681727,FR
-778681728,778681743,ES
-778681744,778681747,FR
-778681748,778681751,IT
-778681752,778681759,FR
-778681760,778681763,CZ
-778681764,778681767,NL
-778681768,778681771,PL
-778681772,778681775,IT
-778681776,778681779,GB
-778681780,778681787,FR
-778681788,778681791,NL
-778681792,778681823,IE
-778681824,778681839,FR
-778681840,778681843,IT
-778681844,778681855,FR
-778681856,778681859,NL
-778681860,778681871,FR
-778681872,778681887,IT
-778681888,778681903,LT
-778681904,778681919,NL
-778681920,778681983,GB
-778681984,778681999,PT
-778682000,778682015,FR
-778682016,778682031,PL
-778682032,778682047,BE
-778682048,778682063,NL
-778682064,778682079,PL
-778682080,778682095,FR
-778682096,778682103,IT
-778682104,778682111,ES
-778682112,778682115,FR
-778682116,778682119,PL
-778682120,778682127,FR
-778682128,778682131,CH
-778682132,778682135,NL
-778682136,778682139,FR
-778682140,778682143,DE
-778682144,778682175,FR
-778682176,778682191,IT
-778682192,778682207,GB
-778682208,778682239,FR
-778682240,778682243,NL
-778682244,778682247,LT
-778682248,778682251,GB
-778682252,778682255,CZ
-778682256,778682295,FR
-778682296,778682299,PL
-778682300,778682319,FR
-778682320,778682323,DE
-778682324,778682331,FR
-778682332,778682335,NL
-778682336,778682351,IT
-778682352,778682367,GB
-778682368,778690559,FR
-778690560,778690591,DE
-778690592,778690635,FR
-778690636,778690639,PL
-778690640,778690655,IT
-778690656,778690687,FR
-778690688,778690703,IE
-778690704,778690723,FR
-778690724,778690727,GB
-778690728,778690735,PL
-778690736,778690751,PT
-778690752,778690787,DE
-778690788,778690791,GB
-778690792,778690799,DE
-778690800,778690815,FR
-778690816,778690879,ES
-778690880,778690883,LT
-778690884,778690887,PL
-778690888,778690931,FR
-778690932,778690935,ES
-778690936,778690943,FR
-778690944,778690959,GB
-778690960,778690975,PL
-778690976,778690983,PT
-778690984,778690991,BE
-778690992,778690999,IT
-778691000,778691003,PL
-778691004,778691007,GB
-778691008,778691023,FR
-778691024,778691039,IE
-778691040,778691043,PL
-778691044,778691047,ES
-778691048,778691051,PL
-778691052,778691055,ES
-778691056,778691063,NL
-778691064,778691071,PL
-778691072,778691327,FR
-778691328,778691343,IT
-778691344,778691359,ES
-778691360,778691375,FR
-778691376,778691391,PL
-778691392,778691423,PT
-778691424,778691427,FR
-778691428,778691431,GB
-778691432,778691435,BE
-778691436,778691439,FR
-778691440,778691443,DE
-778691444,778691455,FR
-778691456,778691459,NL
-778691460,778691471,FR
-778691472,778691479,PL
-778691480,778691487,GB
-778691488,778691519,FR
-778691520,778691583,GB
-778691584,778691599,IE
-778691600,778691615,FR
-778691616,778691619,DE
-778691620,778691623,IE
-778691624,778691627,ES
-778691628,778691631,PL
-778691632,778691711,FR
+778681508,778681519,FR
+778681520,778681523,ES
+778681524,778691711,FR
778691712,778691727,GB
-778691728,778691743,FR
-778691744,778691747,PL
-778691748,778691751,FR
-778691752,778691755,IT
-778691756,778691759,ES
-778691760,778691775,FR
-778691776,778691791,GB
-778691792,778691795,DE
-778691796,778691799,FR
-778691800,778691803,ES
-778691804,778691807,FR
-778691808,778691839,ES
-778691840,778691855,IE
-778691856,778691967,FR
-778691968,778691971,NL
-778691972,778691975,FR
-778691976,778691983,ES
-778691984,778691987,CH
-778691988,778691991,IT
-778691992,778691999,FR
-778692000,778692007,ES
-778692008,778692015,FR
-778692016,778692019,IE
-778692020,778692023,GB
-778692024,778692031,FR
-778692032,778692039,DE
-778692040,778692063,PL
-778692064,778692095,CH
-778692096,778692103,CZ
-778692104,778692107,PL
-778692108,778692111,GB
-778692112,778692115,CZ
-778692116,778692119,GB
-778692120,778692191,FR
-778692192,778692195,ES
-778692196,778692199,CZ
-778692200,778692207,ES
-778692208,778692287,FR
-778692288,778692351,IE
-778692352,778692383,FR
-778692384,778692387,ES
-778692388,778692391,GB
-778692392,778692479,FR
-778692480,778692483,PL
-778692484,778692487,GB
-778692488,778692495,FR
-778692496,778692499,ES
-778692500,778692503,FR
-778692504,778692511,ES
-778692512,778692515,FR
-778692516,778692519,GB
-778692520,778692539,FR
-778692540,778692543,GB
-778692544,778692551,FR
-778692552,778692555,ES
-778692556,778692575,PL
-778692576,778692591,FR
-778692592,778692607,ES
-778692608,778692615,FR
-778692616,778692619,PL
-778692620,778692623,IE
-778692624,778692639,NL
-778692640,778692647,FR
-778692648,778692651,DE
-778692652,778692671,FR
-778692672,778692679,DE
-778692680,778692683,ES
-778692684,778692687,CZ
-778692688,778692703,FR
-778692704,778692711,NL
-778692712,778692719,GB
-778692720,778692723,PL
-778692724,778692735,FR
-778692736,778692739,ES
-778692740,778692743,PL
-778692744,778692747,PT
-778692748,778692751,ES
-778692752,778692767,GB
-778692768,778692783,ES
-778692784,778692787,PL
-778692788,778692791,IT
-778692792,778692799,FR
-778692800,778692807,IE
-778692808,778692811,FR
-778692812,778692815,DE
-778692816,778692823,NL
-778692824,778692827,IT
-778692828,778692831,GB
-778692832,778692839,IE
-778692840,778692843,FR
-778692844,778692847,PL
-778692848,778692863,DE
-778692864,778692879,FR
-778692880,778692883,PL
-778692884,778692887,FR
-778692888,778692891,PL
-778692892,778692895,GB
-778692896,778692911,FR
-778692912,778692927,NL
-778692928,778692943,PL
-778692944,778692967,FR
-778692968,778692975,GB
-778692976,778692983,DE
-778692984,778692991,FR
-778692992,778693023,GB
-778693024,778693027,PL
-778693028,778693031,ES
-778693032,778693035,PL
-778693036,778693039,GB
-778693040,778693063,FR
-778693064,778693067,GB
-778693068,778693071,IT
-778693072,778693075,FR
-778693076,778693079,PL
-778693080,778693087,FR
-778693088,778693091,IE
-778693092,778693099,FR
-778693100,778693103,ES
-778693104,778693119,FR
-778693120,778693127,GB
-778693128,778693131,FR
-778693132,778693135,PL
-778693136,778693139,FR
-778693140,778693143,PL
-778693144,778693155,FR
-778693156,778693159,PL
-778693160,778693163,ES
-778693164,778693171,CZ
-778693172,778693183,FR
-778693184,778693215,IT
-778693216,778693223,PL
-778693224,778693227,PT
-778693228,778693231,IT
-778693232,778693235,DE
-778693236,778693239,PL
-778693240,778693243,ES
-778693244,778693247,PL
-778693248,778693279,FR
-778693280,778693295,DE
-778693296,778693311,CH
-778693312,778693327,IT
-778693328,778693343,PL
-778693344,778693375,FR
-778693376,778693391,IT
-778693392,778693427,FR
-778693428,778693431,CZ
-778693432,778693439,FR
-778693440,778693455,GB
-778693456,778693511,FR
-778693512,778693515,DE
-778693516,778693567,FR
-778693568,778693599,BE
-778693600,778693607,DE
-778693608,778693611,ES
-778693612,778693615,GB
-778693616,778693619,FR
-778693620,778693623,DE
-778693624,778693627,FR
-778693628,778693631,PL
-778693632,778693663,FR
-778693664,778693679,NL
-778693680,778693695,DE
-778693696,778693759,IE
-778693760,778693763,NL
-778693764,778693767,ES
-778693768,778693771,PL
-778693772,778693775,FR
-778693776,778693791,IT
-778693792,778693795,PL
-778693796,778693823,FR
-778693824,778693839,GB
-778693840,778693855,FR
-778693856,778693887,DE
-778693888,778693891,GB
-778693892,778693895,FR
-778693896,778693899,ES
-778693900,778693903,NL
-778693904,778693919,IE
-778693920,778693927,CH
-778693928,778693931,PL
-778693932,778693935,DE
-778693936,778693967,FR
-778693968,778693971,ES
-778693972,778693975,PL
-778693976,778693983,PT
-778693984,778694015,IE
-778694016,778694147,FR
-778694148,778694155,PL
-778694156,778694159,FR
-778694160,778694163,GB
-778694164,778694167,PL
-778694168,778694183,FR
-778694184,778694187,CH
-778694188,778694191,ES
-778694192,778694195,BE
-778694196,778694199,NL
-778694200,778694203,IT
-778694204,778694291,FR
-778694292,778694295,DE
-778694296,778694299,FR
-778694300,778694303,PL
-778694304,778694307,FR
-778694308,778694311,PL
-778694312,778694315,FR
-778694316,778694319,GB
-778694320,778694335,FR
-778694336,778694351,IT
-778694352,778694367,FR
-778694368,778694399,BE
-778694400,778694415,FR
-778694416,778694463,IT
-778694464,778694479,FR
-778694480,778694511,IT
-778694512,778694515,PL
-778694516,778694527,ES
-778694528,778694543,FR
-778694544,778694555,DE
-778694556,778694559,NL
-778694560,778694563,PL
-778694564,778694567,FR
-778694568,778694575,GB
-778694576,778694591,PT
-778694592,778694623,FR
-778694624,778694627,PL
-778694628,778694639,FR
-778694640,778694643,PL
-778694644,778694647,PT
-778694648,778694695,FR
-778694696,778694699,NL
-778694700,778694703,GB
-778694704,778694719,FR
-778694720,778694783,IT
-778694784,778694827,FR
-778694828,778694831,PL
-778694832,778694839,IT
-778694840,778694847,PL
-778694848,778694911,FR
-778694912,778694943,LT
-778694944,778694959,FR
-778694960,778694975,ES
-778694976,778695007,FR
-778695008,778695039,ES
-778695040,778695071,IT
-778695072,778695075,BE
-778695076,778695079,PL
-778695080,778695083,NL
-778695084,778695087,FR
-778695088,778695103,PT
-778695104,778695167,PL
-778695168,778695183,FR
-778695184,778695191,GB
-778695192,778695199,FR
-778695200,778695203,PL
-778695204,778695207,ES
-778695208,778695215,FR
-778695216,778695231,DE
-778695232,778695295,NL
-778695296,778695299,FR
-778695300,778695303,IT
-778695304,778695307,PL
-778695308,778695319,FR
-778695320,778695323,DE
-778695324,778695327,IT
-778695328,778695331,IE
-778695332,778695335,GB
-778695336,778695343,FR
-778695344,778695347,PL
-778695348,778695351,ES
-778695352,778695383,FR
-778695384,778695399,DE
-778695400,778695415,GB
-778695416,778695423,IT
-778695424,778695431,PT
-778695432,778695439,ES
-778695440,778695447,FI
-778695448,778695455,NL
-778695456,778695471,FR
-778695472,778695479,PL
-778695480,778695487,FR
+778691728,778692499,FR
+778692500,778692503,ES
+778692504,778692743,FR
+778692744,778692747,ES
+778692748,778693095,FR
+778693096,778693099,ES
+778693100,778693427,FR
+778693428,778693431,ES
+778693432,778693759,FR
+778693760,778693763,ES
+778693764,778695471,FR
+778695472,778695475,ES
+778695476,778695487,FR
778695488,778695503,BE
-778695504,778695519,FR
-778695520,778695535,GB
-778695536,778695551,ES
-778695552,778695555,BE
-778695556,778695559,CH
-778695560,778695563,DE
-778695564,778695575,PL
-778695576,778695579,ES
-778695580,778695583,FI
-778695584,778695615,BE
-778695616,778695623,DE
-778695624,778695627,CZ
-778695628,778695631,FR
-778695632,778695647,GB
-778695648,778695663,FR
-778695664,778695679,NL
-778695680,778695711,PT
-778695712,778695751,FR
-778695752,778695759,PL
-778695760,778695767,GB
-778695768,778695775,ES
-778695776,778695795,FR
-778695796,778695799,ES
-778695800,778695839,FR
-778695840,778695871,DE
-778695872,778695903,FR
-778695904,778695911,FI
-778695912,778695923,FR
-778695924,778695927,CZ
-778695928,778695931,FI
-778695932,778695935,ES
-778695936,778696199,FR
-778696200,778696203,IT
-778696204,778696207,ES
-778696208,778696211,IE
-778696212,778696215,DE
-778696216,778696219,IT
-778696220,778696223,GB
-778696224,778696231,PL
-778696232,778696239,CH
-778696240,778696247,DE
-778696248,778696251,PL
-778696252,778696255,NL
-778696256,778696263,IT
-778696264,778696287,ES
-778696288,778696335,DE
-778696336,778696339,PL
-778696340,778696343,FR
-778696344,778696347,CH
-778696348,778696351,PL
-778696352,778696383,ES
-778696384,778696415,IE
-778696416,778696479,FR
-778696480,778696483,PL
-778696484,778696487,FR
-778696488,778696495,PL
+778695504,778696495,FR
778696496,778696499,ES
-778696500,778696503,FR
-778696504,778696511,IT
-778696512,778696543,DE
-778696544,778696559,FR
-778696560,778696567,PT
-778696568,778696575,ES
-778696576,778696591,FR
-778696592,778696639,IE
-778696640,778696643,ES
-778696644,778696647,NL
-778696648,778696655,FR
-778696656,778696659,NL
-778696660,778696663,CH
-778696664,778696667,FI
-778696668,778696671,IE
-778696672,778696699,FR
-778696700,778696703,GB
-778696704,778696959,FR
-778696960,778696975,IT
-778696976,778696979,GB
-778696980,778696983,FR
-778696984,778696987,ES
-778696988,778696995,NL
-778696996,778696999,PL
-778697000,778697007,FR
-778697008,778697015,IE
-778697016,778697019,PL
-778697020,778697023,ES
-778697024,778697035,FR
-778697036,778697039,GB
-778697040,778697055,IT
-778697056,778697059,DE
-778697060,778697063,FR
-778697064,778697067,PL
-778697068,778697071,FR
-778697072,778697087,IT
-778697088,778697091,FR
-778697092,778697095,PL
-778697096,778697099,FR
-778697100,778697103,PL
-778697104,778697151,IE
-778697152,778697171,FR
-778697172,778697175,DE
-778697176,778697179,PL
-778697180,778697183,GB
-778697184,778697251,FR
-778697252,778697255,GB
-778697256,778697259,FR
-778697260,778697263,CZ
-778697264,778697271,NL
-778697272,778697279,PL
-778697280,778697287,IE
-778697288,778697291,FR
-778697292,778697295,IT
-778697296,778697307,NL
-778697308,778697311,GB
-778697312,778697343,PL
-778697344,778697347,IE
-778697348,778697351,PL
-778697352,778697359,DE
-778697360,778697375,FR
-778697376,778697383,PT
-778697384,778697387,FR
-778697388,778697391,ES
-778697392,778697407,GB
-778697408,778697415,PT
-778697416,778697423,BE
-778697424,778697431,FR
-778697432,778697435,PL
-778697436,778697439,GB
-778697440,778697455,FR
-778697456,778697471,LT
-778697472,778697479,IE
-778697480,778697483,LT
-778697484,778697499,FR
-778697500,778697519,IE
-778697520,778697523,ES
-778697524,778697567,FR
-778697568,778697599,GB
-778697600,778697663,FR
-778697664,778697667,NL
-778697668,778697671,ES
-778697672,778697675,GB
-778697676,778697683,PL
-778697684,778697695,FR
-778697696,778697727,NL
-778697728,778697791,FI
-778697792,778697807,ES
-778697808,778697815,PL
-778697816,778697819,FR
-778697820,778697823,IT
-778697824,778697927,FR
-778697928,778697935,DE
-778697936,778697943,PL
-778697944,778697947,CH
-778697948,778697951,FR
-778697952,778697955,DE
-778697956,778697959,IE
-778697960,778697967,ES
-778697968,778697975,FR
-778697976,778697983,FI
-778697984,778698239,NL
-778698240,778698243,FR
-778698244,778698247,GB
-778698248,778698251,ES
-778698252,778698255,PL
-778698256,778698271,GB
-778698272,778698287,FR
-778698288,778698295,FI
-778698296,778698303,IE
-778698304,778698367,FR
-778698368,778698399,BE
-778698400,778698447,IE
-778698448,778698451,NL
-778698452,778698455,FR
-778698456,778698459,CZ
-778698460,778698463,PL
-778698464,778698467,NL
-778698468,778698471,FR
-778698472,778698479,IT
-778698480,778698495,FR
-778698496,778698499,PL
-778698500,778698503,FR
-778698504,778698511,CH
-778698512,778698519,FI
-778698520,778698531,FR
-778698532,778698535,CH
-778698536,778698539,PL
-778698540,778698543,FR
-778698544,778698551,DE
-778698552,778698555,PL
-778698556,778698559,IT
-778698560,778698627,FR
-778698628,778698631,ES
-778698632,778698635,GB
-778698636,778698639,ES
-778698640,778698643,NL
-778698644,778698647,PL
-778698648,778698655,ES
-778698656,778698667,FR
-778698668,778698671,ES
-778698672,778698675,FR
-778698676,778698679,PL
-778698680,778698683,FR
-778698684,778698687,PT
-778698688,778698695,LT
-778698696,778698703,FR
-778698704,778698707,DE
-778698708,778698711,PL
-778698712,778698715,FR
-778698716,778698719,CZ
-778698720,778698751,FR
+778696500,778696991,FR
+778696992,778696995,ES
+778696996,778697067,FR
+778697068,778697071,ES
+778697072,778697175,FR
+778697176,778697179,ES
+778697180,778697815,FR
+778697816,778697819,ES
+778697820,778697955,FR
+778697956,778697959,ES
+778697960,778698447,FR
+778698448,778698451,ES
+778698452,778698643,FR
+778698644,778698647,ES
+778698648,778698703,FR
+778698704,778698707,ES
+778698708,778698751,FR
778698752,778764287,TR
-778764288,778767871,HU
-778767872,778768383,RO
-778768384,778829823,HU
+778764288,778823167,HU
+778823168,778823423,UA
+778823424,778829823,HU
778829824,778895359,RO
778895360,778960895,LV
778960896,779026431,DE
@@ -17958,7 +6817,9 @@
779616256,779747327,IL
779747328,779878399,SI
779878400,780009471,AT
-780009472,780140543,CH
+780009472,780014591,CH
+780014592,780014719,DE
+780014720,780140543,CH
780140544,780206079,DE
780206080,780271615,NL
780271616,780337151,AM
@@ -17967,263 +6828,8 @@
780468224,780533759,UA
780533760,780599295,PL
780599296,780664831,CZ
-780664832,780665087,NL
-780665088,780665343,DE
-780665344,780665599,FR
-780665600,780665855,GB
-780665856,780666111,SA
-780666112,780666367,IT
-780666368,780666623,AX
-780666624,780666879,AF
-780666880,780667135,AL
-780667136,780667391,DZ
-780667392,780667647,AS
-780667648,780667903,AD
-780667904,780668159,AM
-780668160,780668415,AT
-780668416,780668671,AZ
-780668672,780668927,BH
-780668928,780669183,BY
-780669184,780669439,BE
-780669440,780669695,BA
-780669696,780669951,BG
-780669952,780670207,HR
-780670208,780670463,CY
-780670464,780670719,CZ
-780670720,780670975,DK
-780670976,780671231,EE
-780671232,780671487,FO
-780671488,780671743,FI
-780671744,780671999,FR
-780672000,780672255,GE
-780672256,780672511,DE
-780672512,780672767,GI
-780672768,780673023,GR
-780673024,780673279,GL
-780673280,780673535,GG
-780673536,780673791,VA
-780673792,780674047,HU
-780674048,780674303,IS
-780674304,780674559,IR
-780674560,780674815,IQ
-780674816,780675071,IE
-780675072,780675327,IM
-780675328,780675583,IL
-780675584,780675839,IT
-780675840,780676095,JE
-780676096,780676351,JO
-780676352,780676607,KZ
-780676608,780676863,KW
-780676864,780677119,KG
-780677120,780677375,LV
-780677376,780677631,LB
-780677632,780677887,LI
-780677888,780678143,LT
-780678144,780678399,LU
-780678400,780678655,MK
-780678656,780678911,MT
-780678912,780679167,MD
-780679168,780679423,MC
-780679424,780679679,ME
-780679680,780679935,NL
-780679936,780680447,NO
-780680448,780680703,PS
-780680704,780680959,PL
-780680960,780681215,PT
-780681216,780681471,QA
-780681472,780681727,RO
-780681728,780681983,RU
-780681984,780682239,SM
-780682240,780682495,SA
-780682496,780682751,RS
-780682752,780683007,SK
-780683008,780683263,SI
-780683264,780683519,ES
-780683520,780683775,SJ
-780683776,780684031,SE
-780684032,780684287,CH
-780684288,780684543,SY
-780684544,780684799,TJ
-780684800,780685055,TR
-780685056,780685311,TM
-780685312,780685567,UA
-780685568,780685823,AE
-780685824,780686079,GB
-780686080,780686335,UZ
-780686336,780686591,YE
-780686592,780686847,AX
-780686848,780687103,AL
-780687104,780687359,AD
-780687360,780687615,AM
-780687616,780687871,AT
-780687872,780688127,AZ
-780688128,780688383,BH
-780688384,780688639,BY
-780688640,780688895,BE
-780688896,780689151,BA
-780689152,780689407,BG
-780689408,780689663,HR
-780689664,780689919,CY
-780689920,780690175,CZ
-780690176,780690431,DK
-780690432,780690687,EE
-780690688,780690943,FO
-780690944,780691199,FI
-780691200,780691455,FR
-780691456,780691711,GE
-780691712,780691967,DE
-780691968,780692223,GI
-780692224,780692479,GR
-780692480,780692735,GL
-780692736,780692991,GG
-780692992,780693247,VA
-780693248,780693503,HU
-780693504,780693759,IS
-780693760,780694015,IR
-780694016,780694271,IQ
-780694272,780694527,IE
-780694528,780694783,IL
-780694784,780695039,IT
-780695040,780695295,JE
-780695296,780695551,JO
-780695552,780695807,KZ
-780695808,780696063,KW
-780696064,780696319,LB
-780696320,780696575,LI
-780696576,780696831,LT
-780696832,780697087,LU
-780697088,780697599,GB
-780697600,780697855,NL
-780697856,780698111,IT
-780698112,780698367,ES
-780698368,780698623,DE
-780698624,780698879,FR
-780698880,780699135,RU
-780699136,780699391,RO
-780699392,780699647,BG
-780699648,780699903,DK
-780699904,780700159,AT
-780700160,780700415,FI
-780700416,780700671,GR
-780700672,780700927,PL
-780700928,780701183,PT
-780701184,780701439,SE
-780701440,780701695,CH
-780701696,780701951,SA
-780701952,780702207,AD
-780702208,780702463,AE
-780702464,780702719,AF
-780702720,780702975,AG
-780702976,780703231,AI
-780703232,780703487,AL
-780703488,780703743,AM
-780703744,780703999,AO
-780704000,780704255,AQ
-780704256,780704511,AR
-780704512,780704767,AS
-780704768,780705023,AT
-780705024,780705279,AU
-780705280,780705535,AW
-780705536,780705791,AX
-780705792,780706047,AZ
-780706048,780706303,BA
-780706304,780706559,BB
-780706560,780706815,BD
-780706816,780707071,BE
-780707072,780707327,BF
-780707328,780707583,BG
-780707584,780707839,BH
-780707840,780708095,BI
-780708096,780708351,BJ
-780708352,780708607,BM
-780708608,780708863,BN
-780708864,780709119,BO
-780709120,780709375,BR
-780709376,780709631,BS
-780709632,780709887,BT
-780709888,780710143,FR
-780710144,780710399,BW
-780710400,780710655,BY
-780710656,780710911,BZ
-780710912,780711167,CA
-780711168,780711423,CC
-780711424,780711679,CD
-780711680,780711935,CF
-780711936,780712191,CG
-780712192,780712447,CH
-780712448,780712703,CI
-780712704,780712959,CK
-780712960,780713215,CL
-780713216,780713471,CM
-780713472,780713727,CN
-780713728,780713983,CO
-780713984,780714239,CR
-780714240,780714495,CU
-780714496,780714751,CV
-780714752,780715263,CY
-780715264,780715519,CZ
-780715520,780715775,DE
-780715776,780716031,DJ
-780716032,780716287,DK
-780716288,780716543,DM
-780716544,780716799,DO
-780716800,780717055,DZ
-780717056,780717311,EC
-780717312,780717567,EE
-780717568,780717823,EG
-780717824,780718079,EH
-780718080,780718335,ER
-780718336,780718591,ES
-780718592,780718847,ET
-780718848,780719103,FI
-780719104,780719359,FJ
-780719360,780719615,FK
-780719616,780719871,FM
-780719872,780720127,FO
-780720128,780720383,FR
-780720384,780720639,GA
-780720640,780720895,GB
-780720896,780721151,GD
-780721152,780721407,GE
-780721408,780721663,GF
-780721664,780721919,GG
-780721920,780722175,GH
-780722176,780722431,GI
-780722432,780722687,GL
-780722688,780722943,GM
-780722944,780723199,GN
-780723200,780723455,GP
-780723456,780723711,GQ
-780723712,780723967,GR
-780723968,780724223,GS
-780724224,780724479,GT
-780724480,780724735,GU
-780724736,780724991,GW
-780724992,780725247,GY
-780725248,780725759,HK
-780725760,780726015,HN
-780726016,780726271,HR
-780726272,780726527,HT
-780726528,780726783,HU
-780726784,780727039,ID
-780727040,780727295,IE
-780727296,780727551,IL
-780727552,780727807,IM
-780727808,780728063,IN
-780728064,780728319,IO
-780728320,780728575,IQ
-780728576,780728831,IR
-780728832,780729087,IS
-780729088,780729343,IT
-780729344,780729599,JE
-780729600,780729855,JM
-780729856,780730111,JO
-780730112,780730367,JP
-780730368,780756170,IE
-780756171,780756171,EU
-780756172,780756724,IE
-780756725,780756725,EU
-780756726,780779519,IE
+780664832,780730367,FR
+780730368,780779519,IE
780779520,780795903,SG
780795904,780861439,RU
780861440,780926975,HU
@@ -18231,12 +6837,10 @@
780992512,781058047,IT
781058048,781123583,DE
781123584,781189119,IR
-781189120,781223423,NL
-781223424,781223679,GB
-781223680,781320191,NL
+781189120,781320191,NL
781320192,781451263,RU
781451264,781455359,PL
-781455360,781459455,UA
+781455360,781459455,LT
781459456,781463551,IR
781463552,781467647,RU
781467648,781475839,PL
@@ -18279,8 +6883,7 @@
781676544,781678591,PL
781678592,781682687,RS
781682688,781684735,PL
-781684736,781686783,UA
-781686784,781688831,RU
+781684736,781688831,RU
781688832,781690879,RO
781690880,781692927,RU
781692928,781694975,UA
@@ -18308,46 +6911,11 @@
782385152,782401535,SE
782401536,782417919,FR
782417920,782434303,AM
-782434304,782446607,SI
-782446608,782446639,BA
-782446640,782446647,SI
-782446648,782446655,BA
-782446656,782446663,SI
-782446664,782446719,BA
-782446720,782446727,SI
-782446728,782446775,BA
-782446776,782446783,SI
-782446784,782446815,BA
-782446816,782446847,SI
-782446848,782447615,BA
-782447616,782449151,SI
-782449152,782449407,HR
-782449408,782449519,SI
-782449520,782449535,RS
-782449536,782449551,SI
-782449552,782449567,RS
-782449568,782449583,SI
-782449584,782449599,RS
-782449600,782449615,SI
-782449616,782449623,RS
-782449624,782449639,SI
-782449640,782449647,RS
-782449648,782449663,SI
-782449664,782449671,BA
-782449672,782449679,SI
-782449680,782449703,BA
-782449704,782449711,SI
-782449712,782449719,BA
-782449720,782449727,SI
-782449728,782449735,BA
-782449736,782449759,SI
-782449760,782449791,BA
-782449792,782449807,SI
-782449808,782449879,BA
-782449880,782449887,SI
-782449888,782449903,BA
-782449904,782449919,SI
-782449920,782450687,BA
+782434304,782446591,SI
+782446592,782447359,BA
+782447360,782447615,HR
+782447616,782449663,SI
+782449664,782450687,BA
782450688,782467071,DE
782467072,782483455,RU
782483456,782499839,FI
@@ -18356,36 +6924,18 @@
782532608,782548991,UA
782548992,782581759,RU
782581760,782598143,FR
-782598144,782607971,DE
-782607972,782607975,IT
-782607976,782608039,DE
-782608040,782608047,LU
-782608048,782630911,DE
+782598144,782616643,DE
+782616644,782616644,RU
+782616645,782630911,DE
782630912,782647295,MD
782647296,782663679,RU
-782663680,782663935,GB
-782663936,782665471,GB
-782665472,782666751,GB
-782666752,782667007,US
-782667008,782667519,GB
+782663680,782667519,NL
782667520,782667775,LU
-782667776,782671103,GB
-782671104,782671359,GB
-782671360,782671871,GB
-782671872,782672383,CA
-782672384,782672639,BG
-782672640,782672895,RO
-782672896,782673663,GB
-782673664,782675455,NL
-782675456,782676991,DE
-782676992,782678015,US
-782678016,782678527,RU
-782678528,782678783,UA
-782678784,782680063,GB
+782667776,782671871,NL
+782671872,782675967,LT
+782675968,782680063,NL
782680064,782696447,RU
-782696448,782711039,DE
-782711040,782711103,CH
-782711104,782712831,DE
+782696448,782712831,DE
782712832,782729215,RU
782729216,782745599,DE
782745600,782761983,CZ
@@ -18459,18 +7009,14 @@
783548416,783679487,RU
783679488,783681535,FR
783681536,783683583,IE
-783683584,783685375,DE
-783685376,783685631,US
+783683584,783685631,DE
783685632,783687679,RU
-783687680,783688191,PT
-783688192,783688703,US
-783688704,783689471,PT
-783689472,783689727,US
+783687680,783689727,PT
783689728,783691775,FR
783691776,783693823,BY
-783693824,783694623,GB
-783694624,783694687,FR
-783694688,783695871,GB
+783693824,783694367,GB
+783694368,783694399,DE
+783694400,783695871,GB
783695872,783697919,TR
783697920,783699967,FR
783699968,783702015,UA
@@ -18488,8 +7034,7 @@
783722496,783724543,AM
783724544,783726591,NL
783726592,783728639,IS
-783728640,783730655,BE
-783730656,783730687,NL
+783728640,783730687,BE
783730688,783732735,SE
783732736,783734783,FR
783734784,783736831,NL
@@ -18508,7 +7053,7 @@
783765504,783767551,RU
783767552,783769599,IL
783769600,783771647,DE
-783771648,783773695,GB
+783771648,783773695,FR
783773696,783775743,ES
783775744,783777791,AL
783777792,783779839,RU
@@ -18518,14 +7063,12 @@
783785984,783788031,RU
783788032,783790079,NO
783790080,783792127,RU
-783792128,783794175,IR
783794176,783798271,GB
783798272,783800319,PL
783800320,783802367,LV
783802368,783804415,FR
783804416,783806463,IT
-783806464,783810303,NL
-783810304,783810559,BE
+783806464,783810559,NL
783810560,783843327,SA
783843328,783876095,BH
783876096,783908863,UA
@@ -18543,7 +7086,9 @@
784269312,784302079,BY
784302080,784334847,RU
784334848,784465919,FR
-784465920,784596991,SE
+784465920,784524287,SE
+784524288,784524543,PL
+784524544,784596991,SE
784596992,784728063,TR
784728064,784793599,GR
784793600,784859135,CY
@@ -18572,15 +7117,11 @@
786567168,786569215,CZ
786569216,786571263,NO
786571264,786575359,ES
-786575360,786575871,GB
-786575872,786576127,SE
-786576128,786577407,GB
+786575360,786577407,GB
786577408,786579455,NL
786579456,786581503,RU
786581504,786583551,GB
-786583552,786583679,DE
-786583680,786583695,SC
-786583696,786585599,DE
+786583552,786585599,DE
786585600,786587647,NL
786587648,786589695,RU
786589696,786590719,FR
@@ -18608,8 +7149,7 @@
786632704,786634751,FR
786634752,786636799,RU
786636800,786638847,PL
-786638848,786640895,ES
-786640896,786642943,GB
+786638848,786642943,GB
786642944,786644991,GR
786644992,786649087,SE
786649088,786651135,FR
@@ -18648,9 +7188,7 @@
786747392,786751487,SK
786751488,786755583,PL
786755584,786759679,IT
-786759680,786771711,DE
-786771712,786771775,AT
-786771776,786771967,DE
+786759680,786771967,DE
786771968,786776063,UA
786776064,786780159,RU
786780160,786784255,IT
@@ -18658,15 +7196,11 @@
786788352,786792447,CZ
786792448,786796543,RU
786796544,786800639,PL
-786800640,786803711,US
-786803712,786804223,UA
-786804224,786804735,US
+786800640,786804735,US
786804736,786808831,RU
786808832,786812927,BG
786812928,786817023,RU
-786817024,786817151,SK
-786817152,786817215,SK
-786817216,786821119,SK
+786817024,786821119,SK
786821120,786825215,HR
786825216,786857983,SA
786857984,786868223,NO
@@ -18684,49 +7218,43 @@
786915328,786917375,SK
786917376,786919423,RO
786919424,786919431,IT
-786919432,786919695,GB
-786919696,786919703,IT
-786919704,786919879,GB
+786919432,786919639,GB
+786919640,786919647,IT
+786919648,786919799,GB
+786919800,786919807,IT
+786919808,786919879,GB
786919880,786919887,IT
-786919888,786920167,GB
-786920168,786920175,IT
-786920176,786920191,GB
+786919888,786919967,GB
+786919968,786919975,IT
+786919976,786920191,GB
786920192,786920199,IT
786920200,786920343,GB
786920344,786920351,IT
-786920352,786920495,GB
-786920496,786920503,IT
-786920504,786920703,GB
-786920704,786920711,IT
-786920712,786920839,GB
+786920352,786920631,GB
+786920632,786920639,IT
+786920640,786920839,GB
786920840,786920847,IT
-786920848,786921015,GB
-786921016,786921023,IT
-786921024,786921471,GB
+786920848,786920855,GB
+786920856,786920863,IT
+786920864,786921455,GB
+786921456,786921463,IT
+786921464,786921471,GB
786921472,786923519,ES
786923520,786925567,FR
-786925568,786926335,DE
-786926336,786926847,US
-786926848,786927615,DE
+786925568,786927615,DE
786927616,786929663,FR
786929664,786931711,PL
786931712,786933759,GB
786933760,786935807,RU
786935808,786937855,DE
786937856,786939903,GB
-786939904,786940159,SE
-786940160,786940415,FI
-786940416,786941447,SE
-786941448,786941951,FI
+786939904,786941951,FI
786941952,786943999,CH
786944000,786946047,RU
786946048,786948095,FR
786948096,786950143,UA
786950144,786952191,DE
-786952192,786952703,NE
-786952704,786952959,US
-786952960,786953215,NE
-786953216,786954239,US
+786952192,786954239,US
786954240,786956287,NL
786956288,786989055,RU
786989056,786991103,PL
@@ -18734,9 +7262,7 @@
786995200,786997247,BG
786997248,786999295,RU
786999296,787001343,ES
-787001344,787002623,CH
-787002624,787002639,GB
-787002640,787003391,CH
+787001344,787003391,CH
787003392,787005439,DE
787005440,787007487,GB
787007488,787009535,RU
@@ -18755,18 +7281,10 @@
787054592,787070975,IT
787070976,787087359,RU
787087360,787095551,TR
-787095552,787095567,EU
-787095568,787095615,CH
-787095616,787095647,EU
-787095648,787095663,CH
-787095664,787095807,EU
-787095808,787096063,CH
-787096064,787096575,EU
-787096576,787098367,CH
-787098368,787099391,EU
-787099392,787099647,CH
-787099648,787100671,EU
-787100672,787103743,CH
+787095680,787095711,CH
+787096576,787097855,CH
+787099392,787100671,CH
+787101696,787102719,CH
787103744,787111935,HR
787111936,787120127,CZ
787120128,787128319,ES
@@ -18785,12 +7303,7 @@
787173376,787175423,KZ
787175424,787177471,SA
787177472,787179519,RS
-787179520,787179775,CH
-787179776,787182095,DE
-787182096,787182111,CH
-787182112,787182335,DE
-787182336,787182591,CH
-787182592,787183615,DE
+787179520,787183615,DE
787183616,787185663,PL
787185664,787187711,GG
787187712,787189759,IT
@@ -18799,8 +7312,7 @@
787192064,787192319,FR
787192320,787192575,DE
787192576,787192831,SE
-787192832,787193087,AE
-787193088,787193855,EU
+787193088,787193343,FI
787193856,787195903,RU
787195904,787197951,GB
787197952,787199999,FR
@@ -18813,7 +7325,9 @@
787214336,787216383,DE
787216384,787218431,RU
787218432,787234815,GB
-787234816,787251199,SE
+787234816,787236559,SE
+787236560,787236575,NO
+787236576,787251199,SE
787251200,787267583,RU
787267584,787283967,DE
787283968,787300351,RU
@@ -18822,33 +7336,29 @@
787333120,787349503,DE
787349504,787365887,BG
787365888,787382271,PL
-787382272,787382527,GP
-787382528,787382783,FR
-787382784,787383039,GP
-787383040,787383295,FR
-787383296,787384575,GP
-787384576,787385087,FR
-787385088,787385343,GP
-787385344,787385599,FR
-787385600,787385855,GP
-787385856,787386879,FR
-787386880,787387391,MQ
-787387392,787389183,FR
-787389184,787390719,MQ
-787390720,787391487,FR
-787391488,787391999,MQ
-787392000,787392255,FR
-787392256,787392511,MQ
+787382272,787387647,GP
+787387648,787388671,MQ
+787388672,787388927,GP
+787388928,787390207,MQ
+787390208,787390463,GP
+787390464,787391231,FR
+787391232,787391487,MQ
+787391488,787391743,FR
+787391744,787392255,MQ
+787392256,787392511,FR
787392512,787392767,GP
-787392768,787394047,FR
-787394048,787394303,GP
-787394304,787395071,FR
-787395072,787395583,GF
-787395584,787396095,FR
-787396096,787396607,GF
-787396608,787397887,FR
-787397888,787398143,GF
-787398144,787398655,FR
+787392768,787393791,FR
+787393792,787394303,GP
+787394304,787394559,FR
+787394560,787394815,GF
+787394816,787395071,FR
+787395072,787395327,GF
+787395328,787395583,FR
+787395584,787396095,GF
+787396096,787396351,FR
+787396352,787396607,GF
+787396608,787398399,FR
+787398400,787398655,MQ
787398656,787415039,PL
787415040,787431423,BA
787431424,787447807,SE
@@ -18867,7 +7377,6 @@
787685376,787687423,IT
787687424,787689471,NL
787689472,787691519,CZ
-787691520,787693567,IT
787693568,787695615,SK
787695616,787697663,RU
787697664,787701759,DE
@@ -18878,38 +7387,16 @@
787709952,787724287,RU
787724288,787726335,UA
787726336,787742719,RU
-787742720,787750911,NL
-787750912,787759103,US
-787759104,787767295,NL
-787767296,787771391,US
-787771392,787773183,NL
-787773184,787773311,BE
-787773312,787773439,NL
-787773440,787773823,BE
-787773824,787773951,NL
-787773952,787774015,BE
-787774016,787774207,NL
-787774208,787774719,BE
-787774720,787774735,NL
-787774736,787774960,BE
-787774961,787774967,NL
-787774968,787774983,BE
-787774984,787775007,NL
-787775008,787775023,BE
-787775024,787775039,NL
-787775040,787775103,BE
-787775104,787775166,NL
-787775167,787775184,BE
-787775185,787775487,NL
+787742720,787759103,NL
+787759104,787767295,PS
+787767296,787775487,NL
787775488,787808255,DE
787808256,787841023,IR
787841024,787843071,RU
787843072,787845119,GR
787845120,787847167,CH
787847168,787849215,SE
-787849216,787850496,TR
-787850497,787850751,NL
-787850752,787851263,TR
+787849216,787851263,TR
787851264,787853311,RU
787853312,787855359,DE
787855360,787857407,CH
@@ -18919,38 +7406,19 @@
787863552,787865599,DE
787865600,787869695,FR
787869696,787873791,GB
-787873792,787890559,SE
-787890560,787890687,GB
-787890688,787892223,SE
-787892224,787894271,SE
-787894272,787896319,US
-787896320,787896575,SE
-787896576,787896703,SE
-787896704,787906559,SE
+787873792,787881745,SE
+787881746,787881747,FR
+787881748,787891247,SE
+787891248,787891251,ES
+787891252,787906559,SE
787906560,787939327,GR
787939328,787972095,GB
787972096,788004863,UA
-788004864,788005375,GB
-788005376,788006399,BE
-788006400,788006911,IT
-788006912,788007423,FR
-788007424,788007935,DE
-788007936,788008447,US
-788008448,788008959,SG
-788008960,788009471,IN
-788009472,788009983,ES
-788009984,788010495,HK
-788010496,788011007,AU
-788011008,788011519,CN
-788011520,788012031,AR
-788012032,788012543,CA
-788012544,788013055,RU
+788004864,788013055,GB
788013056,788021247,IR
788021248,788029439,SI
788029440,788045823,GB
-788045824,788050943,PL
-788050944,788051199,GB
-788051200,788054015,PL
+788045824,788054015,PL
788054016,788062207,JO
788062208,788070399,GB
788070400,788078591,RU
@@ -18975,12 +7443,7 @@
788234240,788242431,SA
788242432,788250623,IR
788250624,788258815,KG
-788258816,788259583,DE
-788259584,788259839,NL
-788259840,788260351,DE
-788260352,788260863,NL
-788260864,788266495,DE
-788266496,788267007,IN
+788258816,788267007,DE
788267008,788271103,SE
788271104,788275199,DE
788275200,788279295,AL
@@ -18991,35 +7454,20 @@
788299776,788303871,DE
788303872,788307967,IT
788307968,788312063,RU
-788312064,788312319,FR
-788312320,788312351,IT
-788312352,788312383,GB
-788312384,788312415,DE
-788312416,788312447,ES
-788312448,788312479,US
-788312480,788312511,BR
-788312512,788312543,NL
-788312544,788316159,FR
+788312064,788316159,FR
788316160,788320255,NL
788320256,788324351,UA
788324352,788328447,CZ
788328448,788332543,RU
788332544,788336639,BG
-788336640,788337407,DE
-788337408,788337663,GB
-788337664,788340479,DE
-788340480,788340735,GB
+788336640,788340735,DE
788340736,788344831,ES
788344832,788353023,DE
788353024,788357119,PS
788357120,788361215,CZ
788361216,788365311,DE
788365312,788369407,IQ
-788369408,788371711,DE
-788371712,788371715,AT
-788371716,788371719,US
-788371720,788371723,GB
-788371724,788373503,DE
+788369408,788373503,DE
788373504,788377599,BE
788377600,788381695,CH
788381696,788385791,SE
@@ -19040,9 +7488,7 @@
788426752,788428799,GB
788428800,788430847,DE
788430848,788432895,BG
-788432896,788432927,DE
-788432928,788432959,FR
-788432960,788434943,DE
+788432896,788434943,DE
788434944,788436991,SI
788436992,788439039,IT
788439040,788441087,RU
@@ -19054,10 +7500,8 @@
788455424,788457471,FR
788457472,788459519,IT
788459520,788461567,RU
-788461568,788462079,JE
-788462080,788462335,GB
-788462336,788463103,JE
-788463104,788465663,GB
+788461568,788462847,JE
+788462848,788465663,GB
788465664,788467711,CZ
788467712,788469759,NO
788469760,788471807,NL
@@ -19073,34 +7517,29 @@
788488192,788490239,RU
788490240,788492287,NL
788492288,788494335,GB
-788494336,788496383,SE
+788494336,788494591,US
+788494592,788495103,CY
+788495104,788495615,US
+788495616,788495871,GB
+788495872,788496383,CY
788496384,788498431,FR
788498432,788500479,RU
788500480,788502527,AL
788502528,788504575,IE
788504576,788506623,FR
788506624,788508671,CH
-788508672,788509215,FR
-788509216,788509231,AT
-788509232,788509247,FR
-788509248,788509279,AT
-788509280,788509631,FR
-788509632,788509695,AT
-788509696,788510335,FR
-788510336,788510463,AT
+788508672,788508927,AT
+788508928,788509183,FR
+788509184,788509439,AT
+788509440,788509951,FR
+788509952,788510463,AT
788510464,788510719,FR
-788510720,788510847,ES
-788510848,788510910,NO
-788510911,788512320,ES
-788512321,788512383,NO
-788512384,788512767,ES
+788510720,788512767,ES
788512768,788514815,FI
788514816,788516863,FR
788516864,788518911,LT
788518912,788520959,IR
-788520960,788522623,CZ
-788522624,788522655,PL
-788522656,788523007,CZ
+788520960,788523007,CZ
788523008,788525055,KZ
788525056,788527103,IT
788527104,788529151,GB
@@ -19108,11 +7547,13 @@
789577728,790102015,US
790102016,792002559,CA
792002560,792068095,US
-792068096,792330239,CA
+792068096,792096767,CA
+792096768,792097279,US
+792097280,792330239,CA
792330240,792723455,ES
792723456,793247743,DE
793247744,793313279,NZ
-793313280,793378815,US
+793313280,793378815,DE
793378816,795231487,CA
795231488,795231743,US
795231744,795233023,CA
@@ -19125,7 +7566,7 @@
803864576,803864831,US
803864832,805306367,CA
805306368,822083583,US
-822083584,822085631,ID
+822083584,822084607,ID
822085632,822087679,AU
822087680,822089727,JP
822089728,822090751,ID
@@ -19184,9 +7625,9 @@
831389696,831512575,KR
831512576,831513599,AU
831513600,831514623,NZ
-831514624,831514887,HK
-831514888,831514895,AU
-831514896,831515647,HK
+831514624,831514975,HK
+831514976,831515007,AU
+831515008,831515647,HK
831515648,831516671,AU
831516672,831518719,JP
831518720,831519743,AU
@@ -19195,9 +7636,7 @@
832045056,832307199,CN
832307200,832308223,MN
832308224,832311295,JP
-832311296,832312319,AU
-832312320,832313343,ID
-832313344,832315391,AU
+832311296,832315391,AU
832315392,832319487,KH
832319488,832320511,NU
832320512,832321535,VN
@@ -19212,7 +7651,7 @@
835715072,835977215,CN
835977216,836042751,JP
836042752,836046847,HK
-836046848,836050943,AU
+836046848,836050943,SG
836050944,836059135,IN
836059136,836075519,VN
836075520,836501503,TW
@@ -19247,46 +7686,15 @@
838467584,838729727,JP
838729728,838795263,KR
838795264,838860799,AU
-838860800,838993423,US
-838993424,838993447,MY
-838993448,838993463,PK
-838993464,838994175,US
-838994176,838994271,HK
-838994272,838995455,US
+838860800,838995455,US
838995456,838995967,CA
838995968,838996991,US
838996992,838997247,CA
-838997248,838999039,US
-838999040,838999295,CA
-838999296,839000159,US
-839000160,839000223,EG
-839000224,839002399,US
-839002400,839002431,ID
-839002432,839002463,EE
-839002464,839002495,HK
-839002496,839002527,US
-839002528,839002559,EG
-839002560,839002943,US
-839002944,839002975,EG
-839002976,839003775,US
-839003776,839003839,EG
-839003840,839005215,US
-839005216,839005280,CA
-839005281,839010559,US
-839010560,839010815,CA
-839010816,839016191,US
+838997248,839016191,US
839016192,839016447,CA
-839016448,839025119,US
-839025120,839025151,EG
-839025152,839025215,US
-839025216,839025247,EG
-839025248,839052031,US
-839052032,839052287,CA
-839052288,839054079,US
-839054080,839054335,CA
-839054336,839055615,US
-839055616,839055871,CA
-839055872,839056447,US
+839016448,839027967,US
+839027968,839030015,IN
+839030016,839056447,US
839056448,839056455,CN
839056456,839061503,US
839061504,839061759,CA
@@ -19294,237 +7702,183 @@
839062272,839064063,CA
839064064,839069183,US
839069184,839071231,CA
-839071232,839072255,US
-839072256,839074303,CA
-839074304,839095807,US
+839071232,839095807,US
839095808,839096063,CA
-839096064,839101695,US
-839101696,839102207,CA
-839102208,839103231,US
-839103232,839103487,CA
-839103488,839104255,US
+839096064,839104255,US
839104256,839104511,CA
839104512,839112191,US
839112192,839112703,CA
-839112704,839113215,US
-839113216,839113471,CA
-839113472,839122431,US
-839122432,839122495,CA
-839122496,839360511,US
-839360512,839368703,NL
+839112704,839352319,US
+839352320,839356415,NL
+839356416,839359487,US
+839359488,839360511,DE
+839360512,839366655,NL
+839366656,839366911,AT
+839366912,839367167,CZ
+839367168,839368703,NL
839368704,839385087,CZ
-839385088,840161595,US
-840161596,840161596,US
-840161597,840269823,US
+839385088,840269823,US
840269824,840273919,CA
840273920,840278015,US
840278016,840282111,CA
840282112,840294399,US
840294400,840298495,CA
-840298496,840835908,US
-840835909,840835909,CA
-840835910,840835942,US
-840835943,840835944,CA
-840835945,840835949,US
-840835950,840835951,TW
-840835952,840835962,US
-840835963,840835963,IN
-840835964,840836077,US
-840836078,840836085,RO
-840836086,840836159,US
-840836160,840836223,BR
-840836224,840836287,US
-840836288,840836351,BR
-840836352,840836415,US
-840836416,840836479,BR
-840836480,840836543,DE
-840836544,840836863,US
-840836864,840836927,BR
-840836928,840836959,US
-840836960,840836991,BR
-840836992,840837023,NL
-840837024,840837055,US
-840837056,840837087,TR
-840837088,840837119,BR
-840837120,840837183,US
-840837184,840837343,BR
-840837344,840837375,RS
-840837376,840837503,US
-840837504,840837564,CA
-840837565,840837572,BR
-840837573,840837575,TH
-840837576,840837577,BR
-840837578,840838175,US
-840838176,840838239,BR
-840838240,840838271,GB
-840838272,840838303,NL
-840838304,840838335,US
-840838336,840838367,JP
-840838368,840838399,BR
-840838400,840838655,US
-840838656,840838687,TR
-840838688,840838719,CA
-840838720,840838726,US
-840838727,840838728,TW
-840838729,840838975,US
-840838976,840838977,AU
-840838978,840838978,TH
-840838979,840838979,DE
-840838980,840838980,CA
-840838981,840838985,US
-840838986,840838986,EC
-840838987,840838987,US
-840838988,840838988,CY
-840838989,840838989,BR
-840838990,840838990,CO
-840838991,840838991,US
-840838992,840838992,BR
-840838993,840838994,US
-840838995,840838995,BR
-840838996,840838996,US
-840838997,840838997,MX
-840838998,840839004,US
-840839005,840839005,MX
-840839006,840839006,US
-840839007,840839007,CO
-840839008,840839008,LT
-840839009,840839012,US
-840839013,840839016,CA
-840839017,840839019,US
-840839020,840839020,UA
-840839021,840839023,US
-840839024,840839025,CA
-840839026,840839026,PK
-840839027,840839027,BR
-840839028,840839030,RU
-840839031,840839031,US
-840839032,840839032,BR
-840839033,840839035,US
-840839036,840839036,GB
-840839037,840839037,BR
-840839038,840898047,US
+840298496,840838508,US
+840838509,840838509,UA
+840838510,840838510,US
+840838511,840838512,UA
+840838513,840898047,US
840898048,840898559,CA
840898560,840909055,US
840909056,840909311,CA
-840909312,840957695,US
-840957696,840957951,JP
+840909312,840953855,US
+840953856,840954367,JP
+840954368,840956927,US
+840956928,840957951,JP
840957952,843055103,US
843055104,843644927,CA
843644928,844890111,US
844890112,844988415,CA
-844988416,845089407,US
-845089408,845089535,PR
-845089536,845283327,US
+844988416,845283327,US
845283328,845545471,CA
-845545472,846439770,US
-846439771,846439778,RO
-846439779,846439781,US
-846439782,846439782,BD
-846439783,846439817,US
-846439818,846439819,BD
-846439820,846440499,US
-846440500,846440500,BD
-846440501,846440644,US
-846440645,846440646,BD
-846440647,846441780,US
-846441781,846441790,RO
-846441791,846441792,US
-846441793,846441801,RO
-846441802,846441857,US
-846441858,846441868,RO
-846441869,846441889,US
-846441890,846441900,RO
-846441901,846442495,US
+845545472,846442495,US
846442496,846446591,CA
-846446592,846537727,US
-846537728,846537983,US
-846537984,846561279,US
+846446592,846537351,US
+846537352,846537352,CA
+846537353,846561279,US
846561280,846594047,CA
846594048,846626815,US
846626816,846627071,CN
846627072,855638015,US
855638016,872415231,GB
-872415232,880877567,US
-880877568,880878079,EU
-880878080,882843337,US
-882843338,882843339,EU
-882843340,882843751,US
-882843752,882843753,EU
-882843754,882851942,US
-882851943,882851943,EU
-882851944,889192447,US
-889192448,897238054,DE
-897238055,897238055,EU
-897238056,905969663,DE
-905969664,920911871,US
-920911872,920977407,IE
-920977408,921174015,US
-921174016,921239551,BR
-921239552,922091519,US
+872415232,889192447,US
+889192448,905969663,DE
+905969664,910688255,US
+910688256,911147007,IE
+911147008,911212543,AU
+911212544,912195583,US
+912195584,912261119,JP
+912261120,917635071,US
+917635072,917700607,JP
+917700608,917766143,SG
+917766144,918683647,US
+918683648,918814719,IE
+918814720,919011327,US
+919011328,919076863,JP
+919076864,919470079,US
+919470080,919535615,AU
+919535616,919601151,BR
+919601152,920125439,US
+920125440,920256511,IE
+920256512,920387583,US
+920387584,920453119,IE
+920453120,920518655,US
+920518656,920649727,CN
+920649728,920911871,US
+920911872,921042943,IE
+921042944,921174015,US
+921174016,921255935,BR
+921255936,921567231,US
+921567232,921632767,JP
+921632768,922091519,US
922091520,922189311,IE
-922189312,922189567,EU
-922189568,922222591,IE
-922222592,922353663,JP
-922353664,922419199,US
+922189312,922189567,US
+922189568,922205775,IE
+922205776,922205776,DE
+922205777,922222591,IE
+922222592,922419199,JP
922419200,922484735,SG
-922484736,922550271,AU
-922550272,956301311,US
-956301312,959447039,EU
+922484736,922615807,AU
+922615808,922746879,SG
+922746880,956301311,US
+956301312,959447039,FR
959447040,959512575,US
-959512576,960629507,EU
-960629508,960629508,GB
-960629509,960640769,EU
-960640770,960640770,GB
-960640771,960643365,EU
-960643366,960643367,GB
-960643368,960647167,EU
-960647168,960651263,GB
-960651264,960676607,EU
+959512576,960626687,FR
+960626688,960641023,GB
+960641024,960641279,FR
+960641280,960643330,GB
+960643331,960643331,FR
+960643332,960644351,GB
+960644352,960644863,FR
+960644864,960646399,GB
+960646400,960646911,FR
+960646912,960654335,GB
+960654336,960654591,FR
+960654592,960659455,GB
+960659456,960662015,DE
+960662016,960662271,FR
+960662272,960662783,DE
+960662784,960663039,FR
+960663040,960671487,DE
+960671488,960671743,FR
+960671744,960676607,DE
960676608,960676863,PL
-960676864,960692223,EU
+960676864,960692223,DE
960692224,960724991,FR
-960724992,960726783,EU
+960724992,960726783,NL
960726784,960727039,ZA
960727040,960727295,US
-960727296,960729343,EU
+960727296,960728319,NL
+960728320,960728575,FR
+960728576,960729343,NL
960729344,960729599,ZA
-960729600,960741375,EU
+960729600,960729855,FR
+960729856,960733183,NL
+960733184,960733439,BE
+960733440,960733695,FR
+960733696,960733951,BE
+960733952,960734463,FR
+960734464,960737535,BE
+960737536,960737791,FR
+960737792,960741375,BE
960741376,960749567,NL
960749568,960757759,LU
960757760,960888831,US
960888832,960921599,AU
960921600,960929791,NZ
-960929792,960954367,AU
-960954368,961019903,EU
+960929792,960933887,KI
+960933888,960937983,MH
+960937984,960942079,FM
+960942080,960946175,NR
+960946176,960950271,FJ
+960950272,960954367,PW
+960954368,960958463,PG
+960958464,960962559,WS
+960962560,960966655,SB
+960966656,960970751,TO
+960970752,960974847,TV
+960974848,960978943,VU
+960978944,960983039,NC
+960983040,961019903,FR
961019904,961021439,HK
-961021440,961021695,A2
+961021440,961021695,FR
961021696,961021951,HK
-961021952,961022079,AP
+961021952,961022079,FR
961022080,961022095,SG
-961022096,961022207,AP
+961022096,961022207,FR
961022208,961022719,HK
-961022720,961022975,AP
+961022720,961022975,FR
961022976,961025535,HK
-961025536,961025791,AP
+961025536,961025791,FR
961025792,961036799,HK
-961036800,961037055,AP
+961036800,961037055,FR
961037056,961052671,HK
961052672,961085439,JP
961085440,961087231,SG
-961087232,961087487,AP
+961087232,961087487,FR
961087488,961089023,SG
-961089024,961089535,AP
+961089024,961089535,FR
961089536,961090047,SG
-961090048,961090303,AP
+961090048,961090303,FR
961090304,961091839,SG
-961091840,961092095,AP
+961091840,961092095,FR
961092096,961092351,IN
-961092352,961092607,AP
+961092352,961092607,FR
961092608,961093887,SG
-961093888,961094143,AP
+961093888,961094143,FR
961094144,961118207,SG
961118208,961119487,MY
-961119488,961119743,AP
+961119488,961119743,FR
961119744,961126399,MY
961126400,961134591,TW
961134592,961142783,KR
@@ -19535,11 +7889,21 @@
961200128,961208319,CO
961208320,961216511,VE
961216512,961224703,PE
-961224704,961249279,EU
+961224704,961228799,EC
+961228800,961232895,BO
+961232896,961236991,PY
+961236992,961241087,FR
+961241088,961245183,GF
+961245184,961247231,GY
+961247232,961249279,SR
961249280,961253375,GT
-961253376,961265663,EU
+961253376,961257471,BZ
+961257472,961261567,HN
+961261568,961265663,NI
961265664,961269759,SV
-961269760,961282047,EU
+961269760,961273855,PA
+961273856,961277951,CR
+961277952,961282047,FR
961282048,961314815,MX
961314816,961380351,US
961380352,961413119,CA
@@ -19547,45 +7911,56 @@
961445888,961478655,ES
961478656,961511423,CH
961511424,961519615,PT
-961519616,961527807,EU
+961519616,961523711,SE
+961523712,961527807,LI
961527808,961531903,MC
-961531904,961535999,SM
-961536000,961540095,VA
-961540096,961544191,EU
+961531904,961533951,SM
+961533952,961540095,VA
+961540096,961542143,AD
+961542144,961544191,MC
961544192,961675263,US
-961675264,961740799,ZA
-961740800,961806335,EU
+961675264,961683455,ZA
+961683456,961687551,DZ
+961687552,961691647,AO
+961691648,961695743,BJ
+961695744,961699839,BW
+961699840,961703935,BF
+961703936,961708031,BI
+961708032,961712127,CM
+961712128,961716223,CV
+961716224,961720319,CF
+961720320,961724415,TD
+961724416,961740799,ZA
+961740800,961806335,FR
961806336,961810431,MR
-961810432,961826815,EU
+961810432,961826815,FR
961826816,961830911,NE
-961830912,961892351,EU
+961830912,961892351,FR
961892352,961896447,ZW
961896448,961900543,NG
-961900544,961937407,EU
+961900544,961937407,FR
961937408,961945599,IS
961945600,961950463,FI
-961950464,961950719,EU
+961950464,961950719,FR
961950720,961953791,FI
961953792,961961983,DK
961961984,961970175,NO
-961970176,961971455,SE
-961971456,961971711,EU
-961971712,962002943,SE
+961970176,962002943,FR
962002944,962035711,RU
962035712,962039807,EE
962039808,962043903,LV
962043904,962047999,LT
-962048000,962076671,EU
+962048000,962076671,FR
962076672,962080767,BH
-962080768,962084863,EU
+962080768,962084863,FR
962084864,962088959,GE
-962088960,962097151,EU
+962088960,962097151,FR
962097152,962101247,IL
-962101248,962134015,EU
+962101248,962134015,FR
962134016,962138111,AE
-962138112,962203647,EU
+962138112,962203647,FR
962203648,962207999,AT
-962208000,962208255,EU
+962208000,962208255,FR
962208256,962211839,AT
962211840,962215935,BG
962215936,962217983,HR
@@ -19593,25 +7968,53 @@
962220032,962224127,CZ
962224128,962228223,GR
962228224,962232319,HU
-962232320,962244607,EU
+962232320,962244607,FR
962244608,962248703,RO
-962248704,962252799,EU
+962248704,962252799,FR
962252800,962256895,SK
962256896,962260991,SI
962260992,962265087,TR
-962265088,962281471,EU
+962265088,962281471,FR
962281472,962285567,DO
-962285568,962359295,EU
+962285568,962359295,FR
962359296,962363391,IN
-962363392,962392063,EU
+962363392,962392063,FR
962392064,962396159,PK
-962396160,962408447,EU
+962396160,962408447,FR
962408448,962412543,TH
962412544,962416639,UZ
-962416640,962461695,EU
+962416640,962461695,FR
962461696,962469887,IE
962469888,962527231,TR
-962527232,973078527,EU
+962527232,962592767,FR
+962592768,962594815,IN
+962594816,962596863,FR
+962596864,962598911,SG
+962598912,962600959,FR
+962600960,962609151,HK
+962609152,962613247,JP
+962613248,962617343,FR
+962617344,962621439,AU
+962621440,962674687,FR
+962674688,962676735,BR
+962676736,962680831,FR
+962680832,962689023,US
+962689024,962723839,FR
+962723840,962732031,GB
+962732032,962740223,DE
+962740224,962744319,SE
+962744320,962748415,FR
+962748416,962752511,BH
+962752512,962756607,ZA
+962756608,968818687,FR
+968818688,968819711,DE
+968819712,968851455,FR
+968851456,968852479,US
+968852480,972744447,FR
+972744448,972744703,IN
+972744704,972747263,FR
+972747264,972747519,US
+972747520,973078527,FR
973078528,973209599,JP
973209600,973275135,IN
973275136,973471743,JP
@@ -19643,9 +8046,7 @@
977764352,977797119,MY
977797120,978321407,KR
978321408,978452479,JP
-978452480,978485247,CN
-978485248,978518015,SG
-978518016,978583551,CN
+978452480,978583551,CN
978599936,978640895,AU
978640896,978644991,NZ
978644992,978714623,JP
@@ -19658,7 +8059,9 @@
979369984,979410943,AU
979410944,979419135,HK
979419136,979435519,AU
-979435520,979468287,TH
+979435520,979436799,TH
+979436800,979437055,OM
+979437056,979468287,TH
979468288,979501055,BD
979501056,979566591,JP
979566592,979599359,TW
@@ -19708,11 +8111,7 @@
985006080,985071615,SG
985071616,985137151,JP
985137152,985202687,KR
-985202688,985224959,SG
-985224960,985225215,AP
-985225216,985243903,SG
-985243904,985244159,AP
-985244160,985268223,SG
+985202688,985268223,SG
985268224,985399295,VN
985399296,985661439,JP
985661440,987758591,CN
@@ -19738,11 +8137,15 @@
999555072,999686143,HK
999686144,999751679,KR
999751680,999784447,CN
-999784448,999800831,AP
+999784448,999800831,JP
999800832,999817215,KR
999817216,999849983,BD
999849984,999866367,KR
-999866368,999882751,HK
+999866368,999873919,HK
+999873920,999873941,VN
+999873942,999873943,HK
+999873944,999874047,VN
+999874048,999882751,HK
999948288,1000013823,AU
1000013824,1000079359,CN
1000079360,1000341503,JP
@@ -19789,20 +8192,16 @@
1023238144,1023246335,ID
1023246336,1023279103,CN
1023279104,1023311871,IN
-1023311872,1023316991,US
+1023311872,1023315711,US
+1023315712,1023315967,AU
+1023315968,1023316991,US
1023316992,1023317247,AU
-1023317248,1023317759,US
-1023317760,1023318015,IN
-1023318016,1023323903,US
-1023323904,1023324159,AU
-1023324160,1023328255,US
+1023317248,1023328255,US
1023328256,1023344639,JP
1023344640,1023410175,CN
1023410176,1023672319,IN
1023672320,1023688703,HK
-1023688704,1023692031,MM
-1023692032,1023692287,SG
-1023692288,1023692799,MM
+1023688704,1023692799,MM
1023692800,1023696895,CN
1023696896,1023705087,MY
1023705088,1023717375,JP
@@ -19827,9 +8226,7 @@
1023967232,1023975423,IN
1023975424,1023979519,CN
1023979520,1023983615,AU
-1023983616,1023991551,SG
-1023991552,1023991807,AP
-1023991808,1023999999,SG
+1023983616,1023999999,SG
1024000000,1024032767,PH
1024032768,1024065535,AU
1024065536,1024131071,HK
@@ -19843,19 +8240,19 @@
1024327680,1024344063,US
1024344064,1024352255,SG
1024352256,1024360447,AU
-1024360448,1024363775,JP
+1024360448,1024363263,JP
+1024363264,1024363519,SG
+1024363520,1024363775,JP
1024363776,1024364031,AU
-1024364032,1024365055,JP
-1024365056,1024365311,AP
-1024365312,1024365727,JP
+1024364032,1024365727,JP
1024365728,1024365759,SG
-1024365760,1024367423,JP
-1024367424,1024367487,PH
-1024367488,1024370687,JP
-1024370688,1024371199,PH
-1024371200,1024375295,JP
-1024375296,1024375807,AU
-1024375808,1024376831,JP
+1024365760,1024372543,JP
+1024372544,1024372607,HK
+1024372608,1024373263,JP
+1024373264,1024373279,HK
+1024373280,1024375295,JP
+1024375296,1024375551,AU
+1024375552,1024376831,JP
1024376832,1024393215,PH
1024393216,1024458751,HK
1024458752,1024491519,SG
@@ -19890,15 +8287,15 @@
1025376256,1025507327,TW
1025507328,1026293759,KR
1026293760,1026311423,JP
-1026311424,1026311679,US
+1026311424,1026311530,US
+1026311531,1026311531,JP
+1026311532,1026311679,US
1026311680,1026392063,JP
1026392064,1026408447,CN
1026408448,1026416639,JP
1026416640,1026420735,CN
1026420736,1026422783,JP
-1026422784,1026423295,AU
-1026423296,1026423551,AP
-1026423552,1026424831,AU
+1026422784,1026424831,AU
1026424832,1026490367,JP
1026490368,1026523135,TH
1026523136,1026539519,CN
@@ -19921,17 +8318,11 @@
1029701632,1030674431,KR
1030674432,1030676223,JP
1030676224,1030750207,KR
-1030750208,1030946303,JP
-1030946304,1030946559,AP
-1030946560,1031415039,JP
-1031415040,1031415295,US
-1031415296,1031798783,JP
-1031798784,1035993087,CN
-1035993088,1037410303,JP
-1037410304,1037415679,US
-1037415680,1037415935,AP
-1037415936,1037418495,US
-1037418496,1037565951,JP
+1030750208,1031798783,JP
+1031798784,1032668159,CN
+1032668160,1032668415,HK
+1032668416,1035993087,CN
+1035993088,1037565951,JP
1037565952,1038614527,TW
1038614528,1039007743,CN
1039007744,1039138815,HK
@@ -19953,64 +8344,17 @@
1039663104,1040187391,KR
1040187392,1040252927,IL
1040252928,1040318463,GR
-1040318464,1040344063,CH
-1040344064,1040344319,AT
-1040344320,1040383999,CH
+1040318464,1040383999,CH
1040384000,1040390853,SA
1040390854,1040390854,ZA
-1040390855,1040397823,SA
-1040397824,1040398591,GB
-1040398592,1040399871,SA
-1040399872,1040400127,GB
-1040400128,1040400383,SA
+1040390855,1040400383,SA
1040400384,1040416767,GB
1040416768,1040424959,SE
1040424960,1040433151,PL
1040433152,1040449535,GB
1040449536,1040457727,FR
1040457728,1040465919,ME
-1040465920,1040466687,DE
-1040466688,1040466975,EU
-1040466976,1040467007,DE
-1040467008,1040467071,EU
1040467072,1040467087,FR
-1040467088,1040467103,DE
-1040467104,1040467135,FR
-1040467136,1040467151,DE
-1040467152,1040467759,EU
-1040467760,1040467767,FR
-1040467768,1040467775,EU
-1040467776,1040467823,FR
-1040467824,1040467935,EU
-1040467936,1040467951,FR
-1040467952,1040467967,EU
-1040467968,1040468095,FR
-1040468096,1040468231,EU
-1040468232,1040468255,FR
-1040468256,1040468415,EU
-1040468416,1040468479,FR
-1040468480,1040468607,EU
-1040468608,1040468735,DE
-1040468736,1040468767,NL
-1040468768,1040469119,EU
-1040469120,1040469183,FR
-1040469184,1040469503,EU
-1040469504,1040469567,FR
-1040469568,1040469631,EU
-1040469632,1040469695,FR
-1040469696,1040469903,EU
-1040469904,1040469919,FR
-1040469920,1040469983,EU
-1040469984,1040469999,FR
-1040470000,1040470399,EU
-1040470400,1040470431,DE
-1040470432,1040471487,EU
-1040471488,1040471519,NL
-1040471520,1040472575,EU
-1040472576,1040472831,DE
-1040472832,1040473071,EU
-1040473072,1040473087,DE
-1040473088,1040474111,EU
1040474112,1040482303,CZ
1040482304,1040515071,BE
1040515072,1040547839,GB
@@ -20027,767 +8371,132 @@
1040982016,1040982527,DK
1040982528,1040982783,FI
1040982784,1040983551,DK
-1040983552,1040983807,EU
+1040983552,1040983807,FO
1040983808,1040990207,DK
-1040990208,1040994303,CY
-1040994304,1040994559,RU
-1040994560,1040998399,CY
+1040990208,1040998399,CY
1040998400,1041006591,EG
1041006592,1041039359,CH
-1041039360,1041051647,SE
-1041051648,1041051839,NO
-1041051840,1041052159,SE
-1041052160,1041052175,NO
-1041052176,1041072127,SE
+1041039360,1041072127,SE
1041072128,1041080319,GB
1041080320,1041088511,IT
1041088512,1041096703,AT
1041096704,1041235967,ES
1041235968,1041244159,UA
-1041244160,1041253119,RU
-1041253120,1041253375,TJ
-1041253376,1041268735,RU
+1041244160,1041268735,RU
1041268736,1041301503,NO
1041301504,1041310975,IE
-1041310976,1041311231,EU
-1041311232,1041336319,IE
-1041336320,1041336575,EU
-1041336576,1041367039,IE
+1041310976,1041311231,GB
+1041311232,1041367039,IE
1041367040,1041498111,IT
1041498112,1041563647,SE
1041563648,1041596415,PL
1041596416,1041629183,NL
-1041629184,1041638655,ES
-1041638656,1041638911,EU
-1041638912,1041641503,ES
-1041641504,1041641507,BE
-1041641508,1041642751,ES
-1041642752,1041643007,EU
-1041643008,1041694719,ES
-1041694720,1041695151,FR
-1041695152,1041695167,GB
-1041695168,1041695359,FR
-1041695360,1041695391,GB
-1041695392,1041695647,FR
-1041695648,1041695679,GB
-1041695680,1041695695,CH
-1041695696,1041695711,FR
-1041695712,1041695719,GB
-1041695720,1041695767,FR
-1041695768,1041695775,GB
-1041695776,1041695855,FR
-1041695856,1041695887,GB
-1041695888,1041695903,FR
-1041695904,1041695999,GB
-1041696000,1041696871,FR
-1041696872,1041696879,GB
-1041696880,1041697699,FR
-1041697700,1041697703,GB
-1041697704,1041698047,FR
-1041698048,1041698077,GB
-1041698078,1041698207,FR
-1041698208,1041698223,GB
-1041698224,1041698247,FR
-1041698248,1041698255,GB
-1041698256,1041698263,FR
-1041698264,1041698271,GB
-1041698272,1041698711,FR
-1041698712,1041698719,GB
-1041698720,1041699287,FR
-1041699288,1041699295,GB
-1041699296,1041699327,FR
-1041699328,1041699391,GB
-1041699392,1041699583,FR
-1041699584,1041699591,IT
-1041699592,1041699599,FR
-1041699600,1041699615,GB
-1041699616,1041699623,FR
-1041699624,1041699631,GB
-1041699632,1041699679,FR
-1041699680,1041699695,GB
-1041699696,1041699767,FR
-1041699768,1041699807,GB
-1041699808,1041700607,FR
-1041700608,1041700863,GB
-1041700864,1041701143,FR
-1041701144,1041701151,GB
-1041701152,1041701175,FR
-1041701176,1041701183,GB
-1041701184,1041701207,FR
-1041701208,1041701222,GB
-1041701223,1041701311,FR
-1041701312,1041701551,GB
-1041701552,1041701567,FR
-1041701568,1041701631,GB
-1041701632,1041704319,FR
-1041704320,1041704335,GB
-1041704336,1041704351,FR
-1041704352,1041704383,GB
-1041704384,1041704407,FR
-1041704408,1041704415,GB
+1041629184,1041694719,ES
+1041694720,1041700959,GB
+1041700960,1041700975,FR
+1041700976,1041701783,GB
+1041701784,1041701791,FR
+1041701792,1041701823,GB
+1041701824,1041701831,FR
+1041701832,1041703479,GB
+1041703480,1041703487,FR
+1041703488,1041703631,GB
+1041703632,1041703639,FR
+1041703640,1041704415,GB
1041704416,1041704423,FR
-1041704424,1041704431,GB
-1041704432,1041705231,FR
-1041705232,1041705239,GB
-1041705240,1041705255,FR
-1041705256,1041705279,GB
-1041705280,1041705295,FR
-1041705296,1041705311,GB
-1041705312,1041705343,FR
-1041705344,1041705367,GB
-1041705368,1041705391,FR
-1041705392,1041705439,GB
-1041705440,1041705447,FR
-1041705448,1041705455,GB
-1041705456,1041705463,FR
-1041705464,1041705479,GB
-1041705480,1041705487,FR
-1041705488,1041705519,GB
-1041705520,1041705631,FR
-1041705632,1041705663,GB
-1041705664,1041705695,FR
-1041705696,1041705703,GB
-1041705704,1041705743,FR
-1041705744,1041705751,GB
-1041705752,1041705767,FR
-1041705768,1041705815,GB
-1041705816,1041705831,FR
-1041705832,1041705855,GB
-1041705856,1041705871,FR
-1041705872,1041705879,GB
-1041705880,1041705887,FR
-1041705888,1041705895,GB
-1041705896,1041705903,FR
-1041705904,1041705911,GB
-1041705912,1041705935,FR
-1041705936,1041705951,GB
-1041705952,1041706120,FR
-1041706121,1041706127,GB
-1041706128,1041706223,FR
-1041706224,1041706231,IT
-1041706232,1041706239,GB
-1041706240,1041708687,FR
-1041708688,1041708695,GB
-1041708696,1041708703,FR
-1041708704,1041708799,GB
-1041708800,1041709463,FR
-1041709464,1041709471,GB
-1041709472,1041709479,FR
-1041709480,1041709487,GB
-1041709488,1041709767,FR
-1041709768,1041709775,GB
-1041709776,1041709783,FR
-1041709784,1041709791,GB
-1041709792,1041709903,FR
-1041709904,1041709911,GB
-1041709912,1041709919,FR
-1041709920,1041709927,GB
-1041709928,1041709935,FR
-1041709936,1041709943,GB
-1041709944,1041709991,FR
-1041709992,1041709999,GB
-1041710000,1041710007,FR
-1041710008,1041710015,GB
-1041710016,1041710047,FR
-1041710048,1041710055,GB
-1041710056,1041710391,FR
-1041710392,1041710407,GB
-1041710408,1041710431,FR
-1041710432,1041710455,GB
-1041710456,1041710471,FR
-1041710472,1041710487,GB
-1041710488,1041710495,FR
-1041710496,1041710511,GB
-1041710512,1041710535,FR
-1041710536,1041710543,GB
-1041710544,1041710551,FR
-1041710552,1041710591,GB
-1041710592,1041710735,FR
-1041710736,1041710751,GB
-1041710752,1041710775,FR
-1041710776,1041710783,GB
-1041710784,1041711487,FR
-1041711488,1041711519,GB
-1041711520,1041711551,FR
-1041711552,1041711567,GB
-1041711568,1041711583,FR
-1041711584,1041711599,GB
-1041711600,1041711879,FR
-1041711880,1041711887,GB
-1041711888,1041711943,FR
-1041711944,1041711951,GB
-1041711952,1041712063,FR
-1041712064,1041712095,GB
-1041712096,1041712975,FR
-1041712976,1041712983,GB
-1041712984,1041713095,FR
-1041713096,1041713103,GB
-1041713104,1041713127,FR
-1041713128,1041713135,GB
-1041713136,1041713991,FR
-1041713992,1041713999,GB
-1041714000,1041714047,FR
-1041714048,1041714055,GB
-1041714056,1041714071,FR
-1041714072,1041714079,GB
-1041714080,1041714095,FR
-1041714096,1041714103,GB
-1041714104,1041714111,FR
-1041714112,1041714175,GB
-1041714176,1041715495,FR
-1041715496,1041715503,GB
-1041715504,1041715527,FR
-1041715528,1041715535,GB
-1041715536,1041715583,FR
-1041715584,1041715615,GB
-1041715616,1041715631,FR
-1041715632,1041715647,GB
-1041715648,1041715775,FR
-1041715776,1041715791,GB
-1041715792,1041715807,FR
-1041715808,1041715823,GB
-1041715824,1041715863,FR
-1041715864,1041715870,GB
-1041715871,1041715903,FR
-1041715904,1041715911,GB
-1041715912,1041715943,FR
-1041715944,1041715951,GB
-1041715952,1041715999,FR
-1041716000,1041716015,GB
-1041716016,1041716047,FR
-1041716048,1041716095,GB
-1041716096,1041716439,FR
-1041716440,1041716447,GB
-1041716448,1041716503,FR
-1041716504,1041716511,GB
-1041716512,1041716519,FR
-1041716520,1041716527,GB
-1041716528,1041716543,FR
-1041716544,1041716575,GB
-1041716576,1041716671,FR
-1041716672,1041716703,GB
-1041716704,1041717063,FR
-1041717064,1041717071,GB
-1041717072,1041717167,FR
-1041717168,1041717183,GB
-1041717184,1041717503,FR
-1041717504,1041717511,IT
-1041717512,1041717631,FR
-1041717632,1041717639,GB
-1041717640,1041717687,FR
-1041717688,1041717695,GB
-1041717696,1041717711,FR
-1041717712,1041717719,GB
-1041717720,1041718159,FR
-1041718160,1041718167,GB
-1041718168,1041718199,FR
-1041718200,1041718223,GB
-1041718224,1041718231,FR
-1041718232,1041718263,GB
-1041718264,1041718279,FR
-1041718280,1041718287,BE
-1041718288,1041718343,FR
-1041718344,1041718351,GB
-1041718352,1041718383,FR
-1041718384,1041718391,GB
-1041718392,1041718447,FR
-1041718448,1041718455,GB
-1041718456,1041718463,FR
-1041718464,1041718479,GB
-1041718480,1041718495,FR
-1041718496,1041718503,GB
-1041718504,1041718895,FR
-1041718896,1041718911,GB
-1041718912,1041718935,FR
-1041718936,1041718943,GB
-1041718944,1041718975,FR
-1041718976,1041718991,GB
-1041718992,1041718999,FR
-1041719000,1041719007,GB
-1041719008,1041719167,FR
-1041719168,1041719175,GB
-1041719176,1041719203,FR
-1041719204,1041719223,GB
+1041704424,1041706551,GB
+1041706552,1041706559,FR
+1041706560,1041706751,GB
+1041706752,1041707263,FR
+1041707264,1041708543,GB
+1041708544,1041708799,FR
+1041708800,1041709823,GB
+1041709824,1041710079,FR
+1041710080,1041710423,GB
+1041710424,1041710431,FR
+1041710432,1041710671,GB
+1041710672,1041710687,FR
+1041710688,1041711551,GB
+1041711552,1041711559,FR
+1041711560,1041712631,GB
+1041712632,1041712639,FR
+1041712640,1041715071,GB
+1041715072,1041715079,FR
+1041715080,1041715567,GB
+1041715568,1041715583,FR
+1041715584,1041716039,GB
+1041716040,1041716047,FR
+1041716048,1041716223,GB
+1041716224,1041716231,FR
+1041716232,1041716455,GB
+1041716456,1041716463,FR
+1041716464,1041718015,GB
+1041718016,1041718271,FR
+1041718272,1041719223,GB
1041719224,1041719224,FR
1041719225,1041719227,GB
1041719228,1041719228,FR
-1041719229,1041719231,GB
-1041719232,1041719247,FR
-1041719248,1041719263,GB
-1041719264,1041719487,FR
-1041719488,1041719519,GB
-1041719520,1041720191,FR
-1041720192,1041720319,GB
-1041720320,1041721343,FR
-1041721344,1041721359,GB
-1041721360,1041721391,FR
-1041721392,1041721407,GB
-1041721408,1041721519,FR
-1041721520,1041721535,GB
-1041721536,1041721775,FR
-1041721776,1041721791,GB
-1041721792,1041721815,FR
-1041721816,1041721823,GB
-1041721824,1041722367,FR
-1041722368,1041722383,GB
-1041722384,1041722391,FR
-1041722392,1041722399,GB
-1041722400,1041722423,FR
-1041722424,1041722463,GB
-1041722464,1041722479,FR
-1041722480,1041722495,GB
-1041722496,1041722535,FR
-1041722536,1041722559,GB
-1041722560,1041722567,FR
-1041722568,1041722623,GB
-1041722624,1041722935,FR
-1041722936,1041722943,GB
-1041722944,1041722983,FR
-1041722984,1041723007,GB
-1041723008,1041723047,FR
-1041723048,1041723135,GB
-1041723136,1041723359,FR
-1041723360,1041723391,GB
-1041723392,1041723671,FR
-1041723672,1041723775,GB
+1041719229,1041719407,GB
+1041719408,1041719423,FR
+1041719424,1041720575,GB
+1041720576,1041720831,FR
+1041720832,1041721599,GB
+1041721600,1041721727,FR
+1041721728,1041721759,GB
+1041721760,1041721775,FR
+1041721776,1041722951,GB
+1041722952,1041722959,FR
+1041722960,1041723263,GB
+1041723264,1041723279,FR
+1041723280,1041723775,GB
1041723776,1041723839,FR
-1041723840,1041723871,GB
-1041723872,1041723887,FR
-1041723888,1041723903,GB
-1041723904,1041724671,FR
-1041724672,1041724927,GB
-1041724928,1041725015,FR
-1041725016,1041725023,GB
-1041725024,1041725119,FR
-1041725120,1041725167,GB
-1041725168,1041725175,FR
-1041725176,1041725183,GB
-1041725184,1041726063,FR
-1041726064,1041726079,GB
-1041726080,1041726127,FR
-1041726128,1041726151,GB
-1041726152,1041726159,FR
-1041726160,1041726167,GB
-1041726168,1041726535,FR
-1041726536,1041726543,GB
-1041726544,1041726599,FR
-1041726600,1041726607,GB
-1041726608,1041726639,FR
-1041726640,1041726655,GB
-1041726656,1041726671,FR
-1041726672,1041726687,GB
-1041726688,1041726719,FR
-1041726720,1041726727,GB
-1041726728,1041726735,FR
-1041726736,1041726751,GB
-1041726752,1041726847,FR
-1041726848,1041726863,GB
-1041726864,1041726879,FR
-1041726880,1041726903,GB
-1041726904,1041726951,FR
-1041726952,1041726959,GB
-1041726960,1041726975,FR
-1041726976,1041726979,GB
-1041726980,1041726983,FR
-1041726984,1041726987,GB
-1041726988,1041726991,FR
-1041726992,1041726992,GB
-1041726993,1041726994,FR
-1041726995,1041726995,GB
-1041726996,1041727007,FR
-1041727008,1041727028,GB
-1041727029,1041727029,FR
-1041727030,1041727036,GB
-1041727037,1041727038,FR
-1041727039,1041727042,GB
-1041727043,1041727043,FR
-1041727044,1041727049,GB
-1041727050,1041727050,FR
-1041727051,1041727055,GB
-1041727056,1041727063,FR
-1041727064,1041727070,GB
-1041727071,1041727087,FR
-1041727088,1041727089,GB
-1041727090,1041727090,FR
-1041727091,1041727091,GB
-1041727092,1041727167,FR
-1041727168,1041727239,GB
-1041727240,1041727303,FR
-1041727304,1041727311,GB
-1041727312,1041727999,FR
-1041728000,1041728047,GB
-1041728048,1041728063,FR
-1041728064,1041728095,GB
-1041728096,1041728111,FR
-1041728112,1041728127,GB
-1041728128,1041729503,FR
-1041729504,1041729519,GB
-1041729520,1041729527,FR
-1041729528,1041729535,GB
-1041729536,1041729561,FR
+1041723840,1041729559,GB
+1041729560,1041729561,FR
1041729562,1041729564,GB
1041729565,1041729566,FR
-1041729567,1041729567,GB
-1041729568,1041729615,FR
-1041729616,1041729623,GB
-1041729624,1041729663,FR
-1041729664,1041729935,GB
+1041729567,1041729935,GB
1041729936,1041729951,FR
-1041729952,1041730047,GB
-1041730048,1041730239,FR
-1041730240,1041730247,GB
-1041730248,1041730639,FR
-1041730640,1041730655,GB
-1041730656,1041732103,FR
-1041732104,1041732111,GB
-1041732112,1041732127,FR
-1041732128,1041732191,GB
-1041732192,1041732255,FR
-1041732256,1041732295,GB
-1041732296,1041732303,FR
-1041732304,1041732311,GB
-1041732312,1041732519,FR
-1041732520,1041732527,GB
-1041732528,1041732863,FR
-1041732864,1041732871,GB
-1041732872,1041732879,FR
-1041732880,1041732927,GB
-1041732928,1041732959,FR
-1041732960,1041732967,GB
-1041732968,1041732991,FR
-1041732992,1041733103,GB
-1041733104,1041734655,FR
-1041734656,1041734911,GB
-1041734912,1041735431,FR
-1041735432,1041735495,GB
-1041735496,1041735511,FR
-1041735512,1041735551,GB
-1041735552,1041735567,FR
-1041735568,1041735583,GB
-1041735584,1041735615,FR
-1041735616,1041735663,GB
-1041735664,1041736375,FR
-1041736376,1041736383,GB
-1041736384,1041736423,FR
-1041736424,1041736455,GB
-1041736456,1041736487,FR
-1041736488,1041736495,GB
-1041736496,1041736527,FR
-1041736528,1041736535,GB
-1041736536,1041736543,FR
-1041736544,1041736551,GB
-1041736552,1041736591,FR
-1041736592,1041736599,GB
-1041736600,1041736607,FR
-1041736608,1041736631,GB
-1041736632,1041736687,FR
-1041736688,1041736695,GB
-1041736696,1041737015,FR
-1041737016,1041737031,GB
-1041737032,1041737039,FR
-1041737040,1041737055,GB
-1041737056,1041737071,FR
-1041737072,1041737087,GB
-1041737088,1041737223,FR
-1041737224,1041737279,GB
-1041737280,1041737295,FR
-1041737296,1041737303,GB
-1041737304,1041737375,FR
-1041737376,1041737391,GB
-1041737392,1041737399,FR
-1041737400,1041737423,GB
-1041737424,1041737455,FR
-1041737456,1041737463,GB
-1041737464,1041737487,FR
-1041737488,1041737495,GB
-1041737496,1041737503,FR
-1041737504,1041737519,GB
-1041737520,1041737543,FR
-1041737544,1041737567,GB
-1041737568,1041737575,FR
-1041737576,1041737583,GB
+1041729952,1041731071,GB
+1041731072,1041731327,FR
+1041731328,1041732031,GB
+1041732032,1041732047,FR
+1041732048,1041736381,GB
+1041736382,1041736382,FR
+1041736383,1041736675,GB
+1041736676,1041736676,FR
+1041736677,1041737583,GB
1041737584,1041737591,FR
-1041737592,1041737599,GB
-1041737600,1041737607,FR
-1041737608,1041737615,GB
-1041737616,1041737647,FR
-1041737648,1041737663,GB
-1041737664,1041737671,FR
-1041737672,1041737695,GB
-1041737696,1041737727,FR
-1041737728,1041737735,GB
-1041737736,1041737783,FR
-1041737784,1041737823,GB
-1041737824,1041737847,FR
-1041737848,1041737855,GB
-1041737856,1041737871,FR
-1041737872,1041737879,GB
-1041737880,1041737903,FR
-1041737904,1041737911,GB
-1041737912,1041737919,FR
-1041737920,1041737935,GB
-1041737936,1041738159,FR
-1041738160,1041738167,GB
-1041738168,1041738215,FR
-1041738216,1041738223,GB
-1041738224,1041738503,FR
-1041738504,1041738511,GB
-1041738512,1041738519,FR
-1041738520,1041738543,GB
-1041738544,1041738551,FR
-1041738552,1041738559,GB
-1041738560,1041738567,FR
-1041738568,1041738575,GB
-1041738576,1041738583,FR
-1041738584,1041738591,GB
-1041738592,1041738599,FR
-1041738600,1041738623,GB
-1041738624,1041738663,FR
-1041738664,1041738671,GB
-1041738672,1041738703,FR
-1041738704,1041738719,GB
-1041738720,1041738735,FR
-1041738736,1041738751,GB
-1041738752,1041739079,FR
-1041739080,1041739087,GB
-1041739088,1041739167,FR
-1041739168,1041739231,GB
-1041739232,1041739295,FR
-1041739296,1041739299,BE
-1041739300,1041739375,FR
-1041739376,1041739383,BE
-1041739384,1041739407,FR
-1041739408,1041739423,GB
-1041739424,1041739463,FR
-1041739464,1041739471,GB
-1041739472,1041739487,FR
-1041739488,1041739503,GB
-1041739504,1041739519,FR
-1041739520,1041739535,GB
-1041739536,1041739743,FR
-1041739744,1041739751,GB
-1041739752,1041740031,FR
-1041740032,1041740039,GB
-1041740040,1041740055,FR
-1041740056,1041740063,GB
-1041740064,1041740103,FR
-1041740104,1041740119,GB
-1041740120,1041740135,FR
-1041740136,1041740143,GB
-1041740144,1041740167,FR
-1041740168,1041740175,GB
-1041740176,1041740207,FR
-1041740208,1041740215,GB
-1041740216,1041740263,FR
-1041740264,1041740271,GB
-1041740272,1041740551,FR
-1041740552,1041740559,GB
-1041740560,1041740567,FR
-1041740568,1041740575,GB
-1041740576,1041740591,FR
-1041740592,1041740607,GB
-1041740608,1041740647,FR
-1041740648,1041740655,GB
-1041740656,1041740671,FR
-1041740672,1041740687,GB
-1041740688,1041740703,FR
-1041740704,1041740719,GB
-1041740720,1041740807,FR
-1041740808,1041740831,GB
-1041740832,1041741567,FR
-1041741568,1041741583,GB
-1041741584,1041741607,FR
-1041741608,1041741615,GB
-1041741616,1041741631,FR
-1041741632,1041741647,GB
-1041741648,1041741663,DE
-1041741664,1041741679,GB
-1041741680,1041741687,FR
-1041741688,1041741823,GB
-1041741824,1041742087,FR
-1041742088,1041742095,GB
-1041742096,1041742119,FR
-1041742120,1041742127,GB
-1041742128,1041742183,FR
-1041742184,1041742191,GB
-1041742192,1041742199,FR
-1041742200,1041742207,GB
-1041742208,1041742223,FR
-1041742224,1041742239,GB
-1041742240,1041742255,FR
-1041742256,1041742271,GB
-1041742272,1041742279,FR
-1041742280,1041742287,GB
-1041742288,1041742303,FR
-1041742304,1041742335,GB
-1041742336,1041742359,FR
-1041742360,1041742367,GB
-1041742368,1041742375,FR
-1041742376,1041742391,GB
-1041742392,1041742407,FR
-1041742408,1041742415,GB
-1041742416,1041742455,FR
-1041742456,1041742463,GB
-1041742464,1041742471,FR
-1041742472,1041742479,GB
-1041742480,1041742511,FR
-1041742512,1041742527,GB
-1041742528,1041743135,FR
-1041743136,1041743143,GB
-1041743144,1041743175,FR
-1041743176,1041743215,GB
-1041743216,1041743263,FR
-1041743264,1041743271,GB
-1041743272,1041743303,FR
-1041743304,1041743311,GB
-1041743312,1041743615,FR
-1041743616,1041743623,GB
-1041743624,1041743639,FR
-1041743640,1041743647,GB
-1041743648,1041743671,FR
-1041743672,1041743679,GB
-1041743680,1041743719,FR
-1041743720,1041743727,GB
-1041743728,1041743743,FR
-1041743744,1041743759,GB
-1041743760,1041743767,FR
-1041743768,1041743799,GB
-1041743800,1041743807,FR
-1041743808,1041743823,GB
-1041743824,1041743831,FR
-1041743832,1041743847,GB
-1041743848,1041743863,FR
-1041743864,1041743871,GB
-1041743872,1041744903,FR
-1041744904,1041744911,GB
-1041744912,1041744919,FR
-1041744920,1041744927,GB
-1041744928,1041744943,FR
-1041744944,1041744951,GB
-1041744952,1041744975,FR
-1041744976,1041744983,GB
-1041744984,1041745007,FR
-1041745008,1041745031,GB
-1041745032,1041745063,FR
-1041745064,1041745079,GB
-1041745080,1041745087,FR
-1041745088,1041745095,GB
-1041745096,1041745127,FR
-1041745128,1041745151,GB
-1041745152,1041745527,FR
-1041745528,1041745535,GB
-1041745536,1041745543,FR
-1041745544,1041745551,GB
-1041745552,1041745567,FR
-1041745568,1041745575,GB
-1041745576,1041745599,FR
-1041745600,1041745615,GB
-1041745616,1041745639,FR
-1041745640,1041745647,GB
-1041745648,1041745655,FR
-1041745656,1041745663,GB
-1041745664,1041745919,FR
-1041745920,1041745959,GB
-1041745960,1041745999,FR
-1041746000,1041746015,GB
-1041746016,1041746023,FR
-1041746024,1041746031,GB
-1041746032,1041746039,FR
-1041746040,1041746047,GB
-1041746048,1041746063,FR
-1041746064,1041746095,GB
-1041746096,1041746111,FR
-1041746112,1041746135,GB
-1041746136,1041746799,FR
-1041746800,1041746823,GB
-1041746824,1041746831,FR
-1041746832,1041746847,GB
-1041746848,1041746863,FR
-1041746864,1041746895,GB
-1041746896,1041747463,FR
-1041747464,1041747487,GB
-1041747488,1041748991,FR
-1041748992,1041749247,EU
-1041749248,1041751303,FR
-1041751304,1041751311,GB
-1041751312,1041751343,FR
-1041751344,1041751359,GB
-1041751360,1041751391,FR
-1041751392,1041751423,GB
-1041751424,1041751567,FR
-1041751568,1041751575,GB
-1041751576,1041751695,FR
-1041751696,1041751719,GB
-1041751720,1041751759,FR
-1041751760,1041751767,GB
-1041751768,1041751775,FR
-1041751776,1041751807,GB
-1041751808,1041753319,FR
-1041753320,1041753343,GB
-1041753344,1041753407,FR
-1041753408,1041753503,GB
-1041753504,1041754143,FR
-1041754144,1041754151,GB
-1041754152,1041754175,FR
-1041754176,1041754191,GB
-1041754192,1041754239,FR
-1041754240,1041754247,GB
-1041754248,1041754423,FR
-1041754424,1041754431,GB
-1041754432,1041754455,FR
-1041754456,1041754463,GB
-1041754464,1041754479,FR
-1041754480,1041754495,GB
-1041754496,1041754519,FR
-1041754520,1041754527,GB
-1041754528,1041755231,FR
-1041755232,1041755239,GB
-1041755240,1041755271,FR
-1041755272,1041755279,GB
-1041755280,1041755335,FR
-1041755336,1041755343,GB
-1041755344,1041755375,FR
-1041755376,1041755391,GB
-1041755392,1041756455,FR
-1041756456,1041756471,GB
-1041756472,1041756543,FR
-1041756544,1041756567,GB
-1041756568,1041756591,FR
-1041756592,1041756607,GB
-1041756608,1041756655,FR
-1041756656,1041756663,GB
-1041756664,1041757439,FR
-1041757440,1041757447,GB
-1041757448,1041757479,FR
-1041757480,1041757487,GB
-1041757488,1041757503,FR
-1041757504,1041757519,GB
-1041757520,1041757583,FR
-1041757584,1041757591,GB
-1041757592,1041757607,FR
-1041757608,1041757615,GB
-1041757616,1041757631,FR
-1041757632,1041757647,GB
-1041757648,1041757663,FR
-1041757664,1041757671,GB
-1041757672,1041757687,FR
-1041757688,1041757695,GB
-1041757696,1041758255,FR
-1041758256,1041758271,GB
-1041758272,1041758319,FR
-1041758320,1041758343,GB
-1041758344,1041758351,FR
-1041758352,1041758367,GB
-1041758368,1041758391,FR
-1041758392,1041758399,GB
-1041758400,1041758407,FR
-1041758408,1041758415,GB
-1041758416,1041758423,FR
-1041758424,1041758431,GB
-1041758432,1041758679,FR
-1041758680,1041758687,GB
-1041758688,1041759231,FR
-1041759232,1041760255,GB
+1041737592,1041737839,GB
+1041737840,1041737855,FR
+1041737856,1041739031,GB
+1041739032,1041739039,FR
+1041739040,1041740279,GB
+1041740280,1041740287,FR
+1041740288,1041742415,GB
+1041742416,1041742423,FR
+1041742424,1041743103,GB
+1041743104,1041743111,FR
+1041743112,1041743247,GB
+1041743248,1041743255,FR
+1041743256,1041745783,GB
+1041745784,1041745791,FR
+1041745792,1041746903,GB
+1041746904,1041746919,FR
+1041746920,1041749639,GB
+1041749640,1041749643,FR
+1041749644,1041749659,GB
+1041749660,1041749663,FR
+1041749664,1041751679,GB
+1041751680,1041751687,FR
+1041751688,1041753231,GB
+1041753232,1041753239,FR
+1041753240,1041756839,GB
+1041756840,1041756855,FR
+1041756856,1041757615,GB
+1041757616,1041757623,FR
+1041757624,1041758175,GB
+1041758176,1041758183,FR
+1041758184,1041760255,GB
1041760256,1041768447,DE
1041768448,1041776639,NO
1041776640,1041784831,CZ
@@ -20795,79 +8504,19 @@
1041793024,1041825791,GB
1041825792,1041842175,NL
1041842176,1041891327,GB
-1041891328,1041921535,DE
-1041921536,1041921727,US
-1041921728,1041945087,DE
-1041945088,1041945151,AT
-1041945152,1041958463,DE
-1041958464,1041958527,DK
-1041958528,1041959423,DE
-1041959424,1041959679,US
-1041959680,1042022399,DE
-1042022400,1042045891,PT
-1042045892,1042045895,A2
-1042045896,1042086739,PT
-1042086740,1042086743,A2
-1042086744,1042087935,PT
+1041891328,1042022399,DE
+1042022400,1042087935,PT
1042087936,1042120703,TR
1042120704,1042153471,PL
1042153472,1042284543,GB
-1042284544,1042288399,CH
-1042288400,1042288415,GB
-1042288416,1042292735,CH
-1042292736,1042293247,NL
-1042293248,1042293503,GB
-1042293504,1042293535,IT
-1042293536,1042293567,IR
-1042293568,1042293631,IT
-1042293632,1042293759,GE
-1042293760,1042293985,IT
-1042293986,1042294783,NL
-1042294784,1042296063,GE
-1042296064,1042296191,CY
-1042296192,1042296575,GE
-1042296576,1042296831,BY
-1042296832,1042297215,NL
-1042297216,1042297319,IR
-1042297320,1042297327,GE
-1042297328,1042297599,IR
-1042297600,1042297855,GB
-1042297856,1042298111,NL
-1042298112,1042298143,US
-1042298144,1042298175,NL
-1042298176,1042298239,IR
-1042298240,1042298279,IQ
-1042298280,1042298287,IR
-1042298288,1042298303,GB
-1042298304,1042298335,IQ
-1042298336,1042298351,IR
-1042298352,1042298367,NL
-1042298368,1042298623,GB
-1042298624,1042298879,NL
-1042298880,1042299135,GB
-1042299136,1042299391,IQ
-1042299392,1042300159,NL
-1042300160,1042300175,BY
-1042300176,1042300223,IQ
-1042300224,1042300255,AM
-1042300256,1042300287,IR
-1042300288,1042300351,IT
-1042300352,1042300383,IQ
-1042300384,1042300415,IR
-1042300416,1042300479,NL
-1042300480,1042300495,IQ
-1042300496,1042300543,GB
-1042300544,1042300639,IQ
-1042300640,1042300647,NL
-1042300648,1042300655,IQ
-1042300656,1042300671,LB
-1042300672,1042300799,IQ
-1042300800,1042300863,IR
-1042300864,1042300895,LB
-1042300896,1042300903,MD
+1042284544,1042292735,CH
+1042292736,1042294527,NL
+1042294528,1042294783,GB
+1042294784,1042295551,NL
+1042295552,1042296575,GE
+1042296576,1042300903,NL
1042300904,1042300911,UA
-1042300912,1042300919,NL
-1042300920,1042300927,UA
+1042300912,1042300927,NL
1042300928,1042309119,RU
1042309120,1042317311,GB
1042317312,1042350079,ES
@@ -20879,91 +8528,19 @@
1042808832,1042817023,DE
1042817024,1042825215,IE
1042825216,1042833407,CZ
-1042833408,1042841599,GB
+1042833408,1042834025,GB
+1042834026,1042834026,PT
+1042834027,1042840673,GB
+1042840674,1042840674,PT
+1042840675,1042841599,GB
1042841600,1042874367,AT
-1042874368,1042875391,NL
-1042875392,1042875399,GB
-1042875400,1042875407,DE
-1042875408,1042875423,NL
-1042875424,1042875455,GB
-1042875456,1042875903,NL
-1042875904,1042876287,GB
-1042876288,1042876415,NL
-1042876416,1042876479,GB
-1042876480,1042876647,NL
-1042876648,1042876663,GB
-1042876664,1042876671,NL
-1042876672,1042876927,DE
-1042876928,1042877183,GB
-1042877184,1042877951,DE
-1042877952,1042878207,NL
-1042878208,1042878463,GB
-1042878464,1042879487,NL
-1042879488,1042879743,US
-1042879744,1042879999,NL
+1042874368,1042875135,NL
+1042875136,1042875391,FR
+1042875392,1042879999,NL
1042880000,1042880255,GB
-1042880256,1042880639,NL
-1042880640,1042880767,GB
-1042880768,1042882559,NL
-1042882560,1042882815,DE
-1042882816,1042888703,NL
-1042888704,1042888959,GB
-1042888960,1042889215,NL
-1042889216,1042889471,DE
-1042889472,1042889983,NL
-1042889984,1042890143,GB
-1042890144,1042890239,NL
-1042890240,1042890495,GB
-1042890496,1042890751,FR
-1042890752,1042890815,GB
-1042890816,1042890819,FR
-1042890820,1042890944,NL
-1042890945,1042890950,GB
-1042890951,1042890959,NL
-1042890960,1042890991,GB
-1042890992,1042891775,NL
-1042891776,1042891839,GB
-1042891840,1042891871,BE
-1042891872,1042892015,NL
-1042892016,1042892031,DE
-1042892032,1042892287,NL
-1042892288,1042892543,FR
-1042892544,1042892799,NL
-1042892800,1042893055,EU
-1042893056,1042893087,GB
-1042893088,1042893135,NL
-1042893136,1042893143,DE
-1042893144,1042893151,NL
-1042893152,1042893167,PL
-1042893168,1042893183,NL
-1042893184,1042893311,GB
-1042893312,1042894079,NL
-1042894080,1042894143,DE
-1042894144,1042894175,SE
-1042894176,1042894335,NL
-1042894336,1042894355,FR
-1042894356,1042894359,NL
-1042894360,1042894367,GB
-1042894368,1042894399,NL
-1042894400,1042894415,GB
-1042894416,1042894431,NL
-1042894432,1042894463,PT
-1042894464,1042894559,NL
-1042894560,1042894591,DE
-1042894592,1042894783,NL
-1042894784,1042894847,DE
-1042894848,1042895103,NL
-1042895104,1042895231,GB
-1042895232,1042895359,DE
-1042895360,1042895615,NL
-1042895616,1042895871,GB
-1042895872,1042896127,NL
-1042896128,1042896255,GB
-1042896256,1042900479,NL
-1042900480,1042900735,GB
-1042900736,1042915375,NL
-1042915376,1042915391,DE
-1042915392,1042939903,NL
+1042880256,1042889983,NL
+1042889984,1042890239,GB
+1042890240,1042939903,NL
1042939904,1043070975,ES
1043070976,1043079167,CZ
1043079168,1043087359,DE
@@ -20978,2023 +8555,52 @@
1043349504,1043357695,DE
1043357696,1043365887,CH
1043365888,1043398655,PT
-1043398656,1043464191,GB
-1043464192,1043464287,NL
-1043464288,1043464311,GB
-1043464312,1043464799,NL
-1043464800,1043464807,GB
-1043464808,1043464823,NL
-1043464824,1043464831,GB
-1043464832,1043464927,NL
-1043464928,1043465055,GB
-1043465056,1043465071,NL
-1043465072,1043465087,GB
-1043465088,1043465775,NL
-1043465776,1043465783,GB
-1043465784,1043465871,NL
-1043465872,1043465919,GB
-1043465920,1043465983,NL
-1043465984,1043466247,GB
-1043466248,1043466319,NL
-1043466320,1043466327,GB
-1043466328,1043466335,NL
-1043466336,1043466351,GB
-1043466352,1043466431,NL
-1043466432,1043466447,GB
-1043466448,1043466455,NL
-1043466456,1043466463,GB
-1043466464,1043466495,NL
-1043466496,1043466503,GB
-1043466504,1043466511,NL
-1043466512,1043466519,GB
-1043466520,1043466559,NL
-1043466560,1043466575,GB
-1043466576,1043466583,NL
-1043466584,1043466607,GB
-1043466608,1043466887,NL
-1043466888,1043466927,GB
-1043466928,1043466943,NL
-1043466944,1043466991,GB
-1043466992,1043467007,NL
-1043467008,1043467039,GB
-1043467040,1043467071,NL
-1043467072,1043467087,GB
-1043467088,1043467103,NL
-1043467104,1043467199,GB
-1043467200,1043467231,NL
-1043467232,1043467519,GB
-1043467520,1043467535,NL
-1043467536,1043467551,GB
-1043467552,1043467599,NL
-1043467600,1043467679,GB
-1043467680,1043467695,NL
-1043467696,1043467711,GB
-1043467712,1043467743,NL
-1043467744,1043467759,GB
-1043467760,1043467775,NL
-1043467776,1043467815,GB
-1043467816,1043467839,NL
-1043467840,1043467871,GB
-1043467872,1043467967,NL
-1043467968,1043467983,GB
-1043467984,1043467999,NL
-1043468000,1043468063,GB
-1043468064,1043468127,NL
-1043468128,1043468159,GB
-1043468160,1043468191,NL
-1043468192,1043468415,GB
-1043468416,1043468575,NL
-1043468576,1043468655,GB
-1043468656,1043468663,NL
-1043468664,1043468671,GB
-1043468672,1043468735,NL
-1043468736,1043468767,GB
-1043468768,1043468783,NL
-1043468784,1043468791,GB
-1043468792,1043468799,NL
-1043468800,1043468831,GB
-1043468832,1043468863,NL
-1043468864,1043468895,GB
-1043468896,1043468903,NL
-1043468904,1043468911,GB
-1043468912,1043468927,NL
-1043468928,1043468935,GB
-1043468936,1043468959,NL
-1043468960,1043468967,GB
-1043468968,1043469023,NL
-1043469024,1043469055,GB
-1043469056,1043469087,NL
-1043469088,1043469151,GB
-1043469152,1043469159,NL
-1043469160,1043469183,GB
-1043469184,1043469199,NL
-1043469200,1043469207,GB
-1043469208,1043469223,NL
-1043469224,1043469231,GB
-1043469232,1043469239,NL
-1043469240,1043469247,GB
-1043469248,1043469359,NL
-1043469360,1043469375,GB
-1043469376,1043469399,NL
-1043469400,1043469439,GB
-1043469440,1043469559,NL
-1043469560,1043469567,GB
-1043469568,1043469843,NL
-1043469844,1043469847,GB
-1043469848,1043469919,NL
-1043469920,1043469939,GB
-1043469940,1043469943,NL
-1043469944,1043470127,GB
+1043398656,1043470127,GB
1043470128,1043470223,NL
-1043470224,1043470271,GB
-1043470272,1043470303,NL
-1043470304,1043470335,GB
-1043470336,1043470847,NL
-1043470848,1043472383,GB
-1043472384,1043472395,DE
-1043472396,1043472399,GB
-1043472400,1043472423,DE
-1043472424,1043472431,GB
-1043472432,1043472443,DE
-1043472444,1043472467,GB
-1043472468,1043472475,DE
-1043472476,1043472487,GB
-1043472488,1043472495,DE
-1043472496,1043472503,GB
-1043472504,1043472743,DE
-1043472744,1043472751,GB
-1043472752,1043472895,DE
-1043472896,1043473151,GB
-1043473152,1043473247,DE
-1043473248,1043473255,GB
-1043473256,1043473411,DE
-1043473412,1043473415,GB
-1043473416,1043473579,DE
-1043473580,1043473583,GB
-1043473584,1043473983,DE
-1043473984,1043474015,GB
-1043474016,1043474031,DE
-1043474032,1043474047,GB
-1043474048,1043474455,DE
-1043474456,1043474463,GB
-1043474464,1043474487,DE
-1043474488,1043474495,GB
-1043474496,1043474499,DE
-1043474500,1043474503,GB
-1043474504,1043474623,DE
-1043474624,1043474687,GB
-1043474688,1043475887,DE
-1043475888,1043475919,GB
-1043475920,1043475983,DE
-1043475984,1043475991,GB
-1043475992,1043476319,DE
-1043476320,1043476351,GB
-1043476352,1043476483,DE
-1043476484,1043476487,GB
-1043476488,1043476543,DE
-1043476544,1043476559,GB
-1043476560,1043476575,DE
-1043476576,1043476607,GB
-1043476608,1043476735,DE
-1043476736,1043476767,GB
-1043476768,1043476815,DE
-1043476816,1043476991,GB
-1043476992,1043477503,DE
-1043477504,1043477759,GB
-1043477760,1043478047,DE
-1043478048,1043478063,GB
-1043478064,1043478179,DE
-1043478180,1043478271,GB
-1043478272,1043478287,DE
-1043478288,1043479295,GB
-1043479296,1043479551,DE
-1043479552,1043480063,GB
-1043480064,1043480343,DE
-1043480344,1043480359,GB
-1043480360,1043480363,DE
-1043480364,1043480575,GB
-1043480576,1043480687,CH
-1043480688,1043480695,GB
-1043480696,1043480831,CH
-1043480832,1043481855,GB
-1043481856,1043481879,CH
-1043481880,1043481895,GB
-1043481896,1043481959,CH
-1043481960,1043481967,GB
-1043481968,1043481999,CH
-1043482000,1043482015,GB
-1043482016,1043482079,CH
-1043482080,1043482623,GB
-1043482624,1043482647,CH
-1043482648,1043482667,GB
-1043482668,1043482671,CH
-1043482672,1043482687,GB
-1043482688,1043482719,CH
-1043482720,1043482735,GB
-1043482736,1043482759,CH
-1043482760,1043482783,GB
-1043482784,1043482791,CH
-1043482792,1043482807,GB
-1043482808,1043482895,CH
-1043482896,1043482919,GB
-1043482920,1043482951,CH
-1043482952,1043482995,GB
-1043482996,1043483039,CH
-1043483040,1043483047,GB
-1043483048,1043483059,CH
-1043483060,1043483063,GB
-1043483064,1043483103,CH
-1043483104,1043483111,GB
-1043483112,1043483231,CH
-1043483232,1043483235,GB
-1043483236,1043483279,CH
-1043483280,1043483295,GB
-1043483296,1043483311,CH
-1043483312,1043483319,GB
-1043483320,1043483327,CH
-1043483328,1043483335,GB
-1043483336,1043483343,CH
-1043483344,1043483359,GB
-1043483360,1043483391,CH
-1043483392,1043483406,GB
+1043470224,1043475871,GB
+1043475872,1043475887,DE
+1043475888,1043476111,GB
+1043476112,1043476127,DE
+1043476128,1043476383,GB
+1043476384,1043476399,DE
+1043476400,1043476431,GB
+1043476432,1043476447,DE
+1043476448,1043483406,GB
1043483407,1043483407,CH
-1043483408,1043483655,GB
-1043483656,1043483679,CH
-1043483680,1043483687,GB
-1043483688,1043483759,CH
-1043483760,1043483775,GB
-1043483776,1043483839,CH
-1043483840,1043483871,GB
-1043483872,1043483911,CH
-1043483912,1043484159,GB
-1043484160,1043484191,CH
-1043484192,1043484199,GB
-1043484200,1043484215,CH
-1043484216,1043484231,GB
-1043484232,1043484351,CH
-1043484352,1043484399,GB
-1043484400,1043484431,CH
-1043484432,1043484463,GB
-1043484464,1043484551,CH
-1043484552,1043484559,GB
-1043484560,1043484575,CH
-1043484576,1043484583,GB
-1043484584,1043484623,CH
-1043484624,1043484631,GB
-1043484632,1043484671,CH
-1043484672,1043484679,GB
-1043484680,1043484751,CH
-1043484752,1043484767,GB
-1043484768,1043484799,CH
-1043484800,1043484927,GB
-1043484928,1043484935,CH
-1043484936,1043484943,GB
-1043484944,1043484959,CH
-1043484960,1043484991,GB
-1043484992,1043485055,CH
-1043485056,1043485191,GB
-1043485192,1043485195,CH
-1043485196,1043485439,GB
-1043485440,1043485567,CH
-1043485568,1043485695,GB
-1043485696,1043486239,CH
-1043486240,1043486463,GB
-1043486464,1043486487,CH
-1043486488,1043486719,GB
-1043486720,1043486723,CH
-1043486724,1043486975,GB
-1043486976,1043487039,CH
-1043487040,1043487055,GB
-1043487056,1043487103,CH
-1043487104,1043487231,GB
-1043487232,1043487443,CH
-1043487444,1043487447,GB
-1043487448,1043487455,CH
-1043487456,1043487487,GB
-1043487488,1043487623,CH
-1043487624,1043487631,GB
-1043487632,1043487679,CH
-1043487680,1043487743,GB
-1043487744,1043487751,CH
-1043487752,1043488767,GB
+1043483408,1043488767,GB
1043488768,1043496959,DE
-1043496960,1043497055,FR
-1043497056,1043497079,GB
-1043497080,1043497215,FR
-1043497216,1043497759,GB
-1043497760,1043497767,FR
-1043497768,1043497857,GB
+1043496960,1043497857,GB
1043497858,1043497858,FR
-1043497859,1043497863,GB
-1043497864,1043497871,FR
-1043497872,1043497903,GB
-1043497904,1043497911,FR
-1043497912,1043497927,GB
-1043497928,1043497935,FR
-1043497936,1043497983,GB
-1043497984,1043498015,FR
-1043498016,1043498023,GB
-1043498024,1043498031,FR
-1043498032,1043498039,GB
-1043498040,1043498071,FR
-1043498072,1043498095,GB
-1043498096,1043498111,FR
-1043498112,1043498151,GB
-1043498152,1043498167,FR
-1043498168,1043498175,GB
-1043498176,1043498183,FR
-1043498184,1043498195,GB
-1043498196,1043498207,FR
-1043498208,1043498223,GB
-1043498224,1043498239,FR
-1043498240,1043498243,GB
-1043498244,1043498247,FR
-1043498248,1043498495,GB
-1043498496,1043498527,FR
-1043498528,1043498543,GB
-1043498544,1043498639,FR
-1043498640,1043498655,GB
-1043498656,1043498671,FR
-1043498672,1043498815,GB
-1043498816,1043498911,FR
-1043498912,1043499267,GB
-1043499268,1043499519,FR
-1043499520,1043505151,GB
+1043497859,1043505151,GB
1043505152,1043513343,NO
1043513344,1043529727,GB
1043529728,1043595263,NL
-1043595264,1043600639,DE
-1043600640,1043600895,FR
-1043600896,1043606255,DE
-1043606256,1043606271,GB
-1043606272,1043607679,DE
-1043607680,1043607711,FR
-1043607712,1043609279,DE
-1043609280,1043609343,AT
-1043609344,1043609463,DE
-1043609464,1043609471,IE
-1043609472,1043619839,DE
-1043619840,1043620095,IE
-1043620096,1043621503,DE
-1043621504,1043621567,GB
-1043621568,1043623215,DE
-1043623216,1043623231,GB
-1043623232,1043633663,DE
-1043633664,1043633919,FR
-1043633920,1043661567,DE
+1043595264,1043661567,DE
1043661568,1043661823,GB
-1043661824,1043693055,DE
-1043693056,1043693127,GB
-1043693128,1043693183,DE
-1043693184,1043693567,GB
-1043693568,1043718783,DE
-1043718784,1043718815,FR
-1043718816,1043719599,DE
-1043719600,1043719615,CH
-1043719616,1043719655,DE
-1043719656,1043719679,CH
-1043719680,1043857407,DE
-1043857408,1043890175,GB
-1043890176,1043890183,A2
-1043890184,1043890191,NG
-1043890192,1043890207,A2
-1043890208,1043890239,NG
-1043890240,1043890495,A2
-1043890496,1043890591,NG
-1043890592,1043891711,A2
-1043891712,1043891775,GQ
-1043891776,1043891839,NG
-1043891840,1043891967,GQ
-1043891968,1043892223,A2
-1043892224,1043892239,MZ
-1043892240,1043892255,A2
-1043892256,1043892287,MZ
-1043892288,1043892479,A2
-1043892480,1043892735,CD
-1043892736,1043892991,MZ
-1043892992,1043893567,A2
-1043893568,1043893583,NG
-1043893584,1043894559,A2
-1043894560,1043894591,LR
-1043894592,1043894751,A2
-1043894752,1043894783,NG
-1043894784,1043894847,LR
-1043894848,1043894879,NG
-1043894880,1043895039,A2
-1043895040,1043895167,NG
-1043895168,1043895983,A2
-1043895984,1043895999,AO
-1043896000,1043896063,A2
-1043896064,1043896319,NG
-1043896320,1043897343,A2
+1043661824,1043857407,DE
+1043857408,1043892735,GB
+1043892736,1043892991,CD
+1043892992,1043897343,GB
1043897344,1043897855,KE
-1043897856,1043898623,A2
-1043898624,1043898751,TZ
-1043898752,1043899391,A2
-1043899392,1043899647,CG
-1043899648,1043899927,A2
-1043899928,1043899935,SO
-1043899936,1043907071,A2
-1043907072,1043907327,NG
-1043907328,1043910495,A2
-1043910496,1043910503,GB
-1043910504,1043912703,A2
-1043912704,1043913215,ZM
-1043913216,1043913471,SS
-1043913472,1043914751,A2
-1043914752,1043914879,NG
-1043914880,1043916799,A2
-1043916800,1043917055,NG
-1043917056,1043919359,A2
-1043919360,1043919871,SD
-1043919872,1043921919,A2
+1043897856,1043919442,GB
+1043919443,1043919443,SS
+1043919444,1043921919,GB
1043921920,1043922943,IL
1043922944,1043988479,ES
-1043988480,1043988551,BE
-1043988552,1043988559,NL
-1043988560,1043988575,BE
-1043988576,1043988607,NL
-1043988608,1043988679,BE
-1043988680,1043988703,NL
-1043988704,1043988719,BE
-1043988720,1043988727,NL
-1043988728,1043988775,BE
-1043988776,1043988799,NL
-1043988800,1043988895,BE
-1043988896,1043988927,NL
-1043988928,1043989119,BE
-1043989120,1043989503,NL
-1043989504,1043989535,BE
-1043989536,1043989543,NL
-1043989544,1043989567,BE
-1043989568,1043989583,NL
-1043989584,1043989591,BE
-1043989592,1043989599,NL
-1043989600,1043989639,BE
-1043989640,1043989655,NL
-1043989656,1043989751,BE
-1043989752,1043990143,NL
-1043990144,1043990303,BE
-1043990304,1043990367,NL
-1043990368,1043990535,BE
-1043990536,1043990543,NL
-1043990544,1043990567,BE
-1043990568,1043990591,NL
-1043990592,1043990615,BE
-1043990616,1043990623,NL
-1043990624,1043990631,BE
-1043990632,1043990783,NL
-1043990784,1043991055,BE
-1043991056,1043991063,NL
-1043991064,1043991103,BE
-1043991104,1043991231,NL
-1043991232,1043992063,BE
-1043992064,1043992319,NL
-1043992320,1043992575,BE
-1043992576,1043992831,NL
-1043992832,1043993599,BE
-1043993600,1043993855,NL
-1043993856,1043994643,BE
-1043994644,1043994651,NL
-1043994652,1043994655,BE
-1043994656,1043994667,NL
-1043994668,1043994671,BE
-1043994672,1043994675,NL
-1043994676,1043994679,BE
-1043994680,1043994699,NL
-1043994700,1043994703,BE
-1043994704,1043994707,NL
-1043994708,1043994711,BE
-1043994712,1043994723,NL
-1043994724,1043994727,BE
-1043994728,1043994747,NL
-1043994748,1043994811,BE
-1043994812,1043994815,NL
-1043994816,1043994851,BE
-1043994852,1043994855,NL
-1043994856,1043994863,BE
-1043994864,1043994867,NL
-1043994868,1043994871,BE
-1043994872,1043994875,NL
-1043994876,1043994879,BE
-1043994880,1043994887,NL
-1043994888,1043994907,BE
-1043994908,1043994911,NL
-1043994912,1043994931,BE
-1043994932,1043994935,NL
-1043994936,1043994975,BE
-1043994976,1043994979,NL
-1043994980,1043994995,BE
-1043994996,1043995003,NL
-1043995004,1043995023,BE
-1043995024,1043995027,NL
-1043995028,1043995047,BE
-1043995048,1043995051,NL
-1043995052,1043995103,BE
-1043995104,1043995111,NL
-1043995112,1043995127,BE
-1043995128,1043995131,NL
-1043995132,1043995135,BE
-1043995136,1043995139,NL
-1043995140,1043995183,BE
-1043995184,1043995187,NL
-1043995188,1043995219,BE
-1043995220,1043995223,NL
-1043995224,1043995279,BE
-1043995280,1043995283,NL
-1043995284,1043995291,BE
-1043995292,1043995295,NL
-1043995296,1043995303,BE
-1043995304,1043995311,NL
-1043995312,1043995663,BE
-1043995664,1043995687,NL
-1043995688,1043995695,BE
-1043995696,1043995703,NL
-1043995704,1043995719,BE
-1043995720,1043995735,NL
-1043995736,1043995767,BE
-1043995768,1043995783,NL
-1043995784,1043995807,BE
-1043995808,1043995831,NL
-1043995832,1043995871,BE
-1043995872,1043995887,NL
-1043995888,1043995919,BE
-1043995920,1043995935,NL
-1043995936,1043995943,BE
-1043995944,1043995951,NL
-1043995952,1043995975,BE
-1043995976,1043995999,NL
-1043996000,1043996015,BE
-1043996016,1043996023,NL
-1043996024,1043996095,BE
-1043996096,1043996103,NL
-1043996104,1043996111,BE
-1043996112,1043996119,NL
-1043996120,1043996143,BE
-1043996144,1043996151,NL
-1043996152,1043996159,BE
-1043996160,1043996287,NL
-1043996288,1043996319,BE
-1043996320,1043996335,NL
-1043996336,1043996415,BE
-1043996416,1043997375,NL
-1043997376,1043997463,BE
-1043997464,1043997471,NL
-1043997472,1043997519,BE
-1043997520,1043997535,NL
-1043997536,1043997559,BE
-1043997560,1043997583,NL
-1043997584,1043997615,BE
-1043997616,1043997631,NL
-1043997632,1043997639,BE
-1043997640,1043997647,NL
-1043997648,1043997655,BE
-1043997656,1043997671,NL
-1043997672,1043997687,BE
-1043997688,1043997807,NL
-1043997808,1043997887,BE
-1043997888,1043997903,NL
-1043997904,1043997919,BE
-1043997920,1043997927,NL
-1043997928,1043998079,BE
-1043998080,1043998103,NL
-1043998104,1043998111,BE
-1043998112,1043998143,NL
-1043998144,1043998151,BE
-1043998152,1043998159,NL
-1043998160,1043998167,BE
-1043998168,1043998191,NL
-1043998192,1043998195,BE
-1043998196,1043998198,NL
-1043998199,1043998199,BE
-1043998200,1043998207,NL
-1043998208,1043998463,BE
-1043998464,1043998719,NL
-1043998720,1043998759,BE
-1043998760,1043998783,NL
-1043998784,1043998799,BE
-1043998800,1043998855,NL
-1043998856,1043998863,BE
-1043998864,1043998879,NL
-1043998880,1043998887,BE
-1043998888,1043998911,NL
-1043998912,1043998975,BE
-1043998976,1043998983,NL
-1043998984,1043999039,BE
-1043999040,1043999055,NL
-1043999056,1043999103,BE
-1043999104,1043999111,NL
-1043999112,1043999119,BE
-1043999120,1043999143,NL
-1043999144,1043999207,BE
-1043999208,1043999215,NL
-1043999216,1043999231,BE
-1043999232,1043999487,NL
-1043999488,1043999751,BE
-1043999752,1043999759,NL
-1043999760,1043999775,BE
-1043999776,1043999783,NL
-1043999784,1043999791,BE
-1043999792,1043999823,NL
-1043999824,1043999831,BE
-1043999832,1043999839,NL
-1043999840,1043999871,BE
-1043999872,1043999951,NL
-1043999952,1044000031,BE
-1044000032,1044000063,NL
-1044000064,1044000095,BE
-1044000096,1044000767,NL
-1044000768,1044000831,BE
-1044000832,1044000895,NL
-1044000896,1044000999,BE
-1044001000,1044001015,NL
-1044001016,1044001271,BE
-1044001272,1044001663,NL
-1044001664,1044001791,BE
-1044001792,1044001823,NL
-1044001824,1044001839,BE
-1044001840,1044001847,NL
-1044001848,1044001895,BE
-1044001896,1044001927,NL
-1044001928,1044001943,BE
-1044001944,1044001951,NL
-1044001952,1044002023,BE
-1044002024,1044002031,NL
-1044002032,1044002063,BE
-1044002064,1044002087,NL
-1044002088,1044002095,BE
-1044002096,1044002103,NL
-1044002104,1044002135,BE
-1044002136,1044002143,NL
-1044002144,1044002303,BE
-1044002304,1044002831,NL
-1044002832,1044002855,BE
-1044002856,1044002859,NL
-1044002860,1044002879,BE
-1044002880,1044002883,NL
-1044002884,1044002891,BE
-1044002892,1044002899,NL
-1044002900,1044002911,BE
-1044002912,1044002919,NL
-1044002920,1044002931,BE
-1044002932,1044002947,NL
-1044002948,1044002959,BE
-1044002960,1044002975,NL
-1044002976,1044002983,BE
-1044002984,1044002987,NL
-1044002988,1044002999,BE
-1044003000,1044003003,NL
-1044003004,1044003019,BE
-1044003020,1044003023,NL
-1044003024,1044003027,BE
-1044003028,1044003031,NL
-1044003032,1044003071,BE
-1044003072,1044003075,NL
-1044003076,1044003099,BE
-1044003100,1044003103,NL
-1044003104,1044003115,BE
-1044003116,1044003119,NL
-1044003120,1044003123,BE
-1044003124,1044003131,NL
-1044003132,1044003147,BE
-1044003148,1044003151,NL
-1044003152,1044003155,BE
-1044003156,1044003159,NL
-1044003160,1044003167,BE
-1044003168,1044003171,NL
-1044003172,1044003183,BE
-1044003184,1044003187,NL
-1044003188,1044003211,BE
-1044003212,1044003215,NL
-1044003216,1044003223,BE
-1044003224,1044003227,NL
-1044003228,1044003235,BE
-1044003236,1044003251,NL
-1044003252,1044003279,BE
-1044003280,1044003283,NL
-1044003284,1044003291,BE
-1044003292,1044003295,NL
-1044003296,1044003299,BE
-1044003300,1044003303,NL
-1044003304,1044003311,BE
-1044003312,1044003315,NL
-1044003316,1044003331,BE
-1044003332,1044003343,NL
-1044003344,1044003359,BE
-1044003360,1044003362,NL
-1044003363,1044003363,BE
-1044003364,1044003371,NL
-1044003372,1044003379,BE
-1044003380,1044003383,NL
-1044003384,1044003423,BE
-1044003424,1044003427,NL
-1044003428,1044003459,BE
-1044003460,1044003463,NL
-1044003464,1044003467,BE
-1044003468,1044003471,NL
-1044003472,1044003483,BE
-1044003484,1044003487,NL
-1044003488,1044003511,BE
-1044003512,1044003527,NL
-1044003528,1044003539,BE
-1044003540,1044003543,NL
-1044003544,1044003551,BE
-1044003552,1044003563,NL
-1044003564,1044003579,BE
-1044003580,1044003591,NL
-1044003592,1044003595,BE
-1044003596,1044003599,NL
-1044003600,1044003619,BE
-1044003620,1044003631,NL
-1044003632,1044003635,BE
-1044003636,1044003639,NL
-1044003640,1044003647,BE
-1044003648,1044003651,NL
-1044003652,1044003655,BE
-1044003656,1044003659,NL
-1044003660,1044003663,BE
-1044003664,1044003667,NL
-1044003668,1044003675,BE
-1044003676,1044003683,NL
-1044003684,1044003687,BE
-1044003688,1044003691,NL
-1044003692,1044003695,BE
-1044003696,1044003699,NL
-1044003700,1044003723,BE
-1044003724,1044003727,NL
-1044003728,1044003731,BE
-1044003732,1044003751,NL
-1044003752,1044003755,BE
-1044003756,1044003775,NL
-1044003776,1044003783,BE
-1044003784,1044003787,NL
-1044003788,1044003807,BE
-1044003808,1044003811,NL
-1044003812,1044003815,BE
-1044003816,1044003819,NL
-1044003820,1044003823,BE
-1044003824,1044003831,NL
-1044003832,1044003855,BE
-1044003856,1044003863,NL
-1044003864,1044003879,BE
-1044003880,1044003895,NL
-1044003896,1044003911,BE
-1044003912,1044003919,NL
-1044003920,1044003927,BE
-1044003928,1044003959,NL
-1044003960,1044003967,BE
-1044003968,1044003975,NL
-1044003976,1044003983,BE
-1044003984,1044003991,NL
-1044003992,1044004031,BE
-1044004032,1044004079,NL
-1044004080,1044004095,BE
-1044004096,1044004303,NL
-1044004304,1044004351,BE
-1044004352,1044004879,NL
-1044004880,1044004903,BE
-1044004904,1044004911,NL
-1044004912,1044004927,BE
-1044004928,1044004991,NL
-1044004992,1044005503,BE
-1044005504,1044005631,NL
-1044005632,1044005639,BE
-1044005640,1044005647,NL
-1044005648,1044005663,BE
-1044005664,1044005671,NL
-1044005672,1044005679,BE
-1044005680,1044005687,NL
-1044005688,1044005695,BE
-1044005696,1044005759,NL
-1044005760,1044005799,BE
-1044005800,1044005807,NL
-1044005808,1044005839,BE
-1044005840,1044005847,NL
-1044005848,1044005887,BE
-1044005888,1044006143,NL
-1044006144,1044006655,BE
-1044006656,1044006927,NL
-1044006928,1044006935,BE
-1044006936,1044006943,NL
-1044006944,1044007007,BE
-1044007008,1044007023,NL
-1044007024,1044007031,BE
-1044007032,1044007039,NL
-1044007040,1044007047,BE
-1044007048,1044007055,NL
-1044007056,1044007071,BE
-1044007072,1044007087,NL
-1044007088,1044007119,BE
-1044007120,1044007127,NL
-1044007128,1044007167,BE
-1044007168,1044007679,NL
-1044007680,1044007935,BE
-1044007936,1044007967,NL
-1044007968,1044007983,BE
-1044007984,1044007991,NL
-1044007992,1044008007,BE
-1044008008,1044008023,NL
-1044008024,1044008031,BE
-1044008032,1044008039,NL
-1044008040,1044008047,BE
-1044008048,1044008063,NL
-1044008064,1044008095,BE
-1044008096,1044008127,NL
-1044008128,1044008183,BE
-1044008184,1044008223,NL
-1044008224,1044008239,BE
-1044008240,1044008255,NL
-1044008256,1044008279,BE
-1044008280,1044008287,NL
-1044008288,1044008319,BE
-1044008320,1044008735,NL
-1044008736,1044009055,BE
-1044009056,1044009087,NL
-1044009088,1044009183,BE
-1044009184,1044009199,NL
-1044009200,1044009215,BE
-1044009216,1044009455,NL
-1044009456,1044009487,BE
-1044009488,1044009503,NL
-1044009504,1044009535,BE
-1044009536,1044009583,NL
-1044009584,1044009599,BE
-1044009600,1044009983,NL
-1044009984,1044011007,BE
-1044011008,1044011019,NL
-1044011020,1044011023,BE
-1044011024,1044011039,NL
-1044011040,1044011043,BE
-1044011044,1044011055,NL
-1044011056,1044011059,BE
-1044011060,1044011223,NL
-1044011224,1044011227,BE
-1044011228,1044011367,NL
-1044011368,1044011371,BE
-1044011372,1044011427,NL
-1044011428,1044011431,BE
-1044011432,1044011455,NL
-1044011456,1044011459,BE
-1044011460,1044011471,NL
-1044011472,1044011475,BE
-1044011476,1044011535,NL
-1044011536,1044011543,BE
-1044011544,1044011635,NL
-1044011636,1044011639,BE
-1044011640,1044011703,NL
-1044011704,1044011707,BE
-1044011708,1044011731,NL
-1044011732,1044011735,BE
-1044011736,1044011763,NL
-1044011764,1044011767,BE
-1044011768,1044011771,NL
-1044011772,1044011775,BE
-1044011776,1044011791,NL
-1044011792,1044011795,BE
-1044011796,1044011827,NL
-1044011828,1044011831,BE
-1044011832,1044011943,NL
-1044011944,1044011947,BE
-1044011948,1044011971,NL
-1044011972,1044012031,BE
-1044012032,1044013055,NL
-1044013056,1044013111,BE
-1044013112,1044013119,NL
-1044013120,1044013135,BE
-1044013136,1044013143,NL
-1044013144,1044013247,BE
-1044013248,1044013263,NL
-1044013264,1044013271,BE
-1044013272,1044013279,NL
-1044013280,1044013375,BE
-1044013376,1044013439,NL
-1044013440,1044014111,BE
-1044014112,1044014119,NL
-1044014120,1044017919,BE
-1044017920,1044017983,NL
-1044017984,1044018039,BE
-1044018040,1044018047,NL
-1044018048,1044019279,BE
-1044019280,1044019283,NL
-1044019284,1044019291,BE
-1044019292,1044019295,NL
-1044019296,1044019315,BE
-1044019316,1044019323,NL
-1044019324,1044019347,BE
-1044019348,1044019351,NL
-1044019352,1044019383,BE
-1044019384,1044019399,NL
-1044019400,1044019403,BE
-1044019404,1044019407,NL
-1044019408,1044019415,BE
-1044019416,1044019439,NL
-1044019440,1044019443,BE
-1044019444,1044019471,NL
-1044019472,1044019491,BE
-1044019492,1044019495,NL
-1044019496,1044019503,BE
-1044019504,1044019507,NL
-1044019508,1044019695,BE
-1044019696,1044019699,NL
-1044019700,1044019819,BE
-1044019820,1044019823,NL
-1044019824,1044019995,BE
-1044019996,1044019999,NL
-1044020000,1044020147,BE
-1044020148,1044020151,NL
-1044020152,1044020215,BE
-1044020216,1044020219,NL
-1044020220,1044020255,BE
-1044020256,1044020263,NL
-1044020264,1044020303,BE
-1044020304,1044020319,NL
-1044020320,1044020511,BE
-1044020512,1044020551,NL
-1044020552,1044020567,BE
-1044020568,1044020591,NL
-1044020592,1044020607,BE
-1044020608,1044020671,NL
-1044020672,1044020735,BE
-1044020736,1044021759,NL
-1044021760,1044021887,BE
-1044021888,1044022319,NL
-1044022320,1044022335,BE
-1044022336,1044022351,NL
-1044022352,1044022415,BE
-1044022416,1044022783,NL
-1044022784,1044023039,BE
-1044023040,1044023295,NL
-1044023296,1044023351,BE
-1044023352,1044023359,NL
-1044023360,1044023407,BE
-1044023408,1044023439,NL
-1044023440,1044024319,BE
-1044024320,1044024447,NL
-1044024448,1044024575,BE
-1044024576,1044024835,NL
-1044024836,1044024843,BE
-1044024844,1044024847,NL
-1044024848,1044024851,BE
-1044024852,1044024855,NL
-1044024856,1044024863,BE
-1044024864,1044024867,NL
-1044024868,1044024879,BE
-1044024880,1044024883,NL
-1044024884,1044024887,BE
-1044024888,1044024891,NL
-1044024892,1044024959,BE
-1044024960,1044025351,NL
-1044025352,1044025599,BE
-1044025600,1044025855,NL
-1044025856,1044025863,BE
-1044025864,1044025871,NL
-1044025872,1044025879,BE
-1044025880,1044025927,NL
-1044025928,1044025935,BE
-1044025936,1044025967,NL
-1044025968,1044025983,BE
-1044025984,1044025999,NL
-1044026000,1044026007,BE
-1044026008,1044026023,NL
-1044026024,1044026031,BE
-1044026032,1044026047,NL
-1044026048,1044026055,BE
-1044026056,1044026079,NL
-1044026080,1044026095,BE
-1044026096,1044026111,NL
-1044026112,1044026119,BE
-1044026120,1044026143,NL
-1044026144,1044026159,BE
-1044026160,1044026167,NL
-1044026168,1044026175,BE
-1044026176,1044026183,NL
-1044026184,1044026199,BE
-1044026200,1044026207,NL
-1044026208,1044026215,BE
-1044026216,1044026247,NL
-1044026248,1044026255,BE
-1044026256,1044026263,NL
-1044026264,1044026279,BE
-1044026280,1044026327,NL
-1044026328,1044026343,BE
-1044026344,1044026383,NL
-1044026384,1044026391,BE
-1044026392,1044026399,NL
-1044026400,1044026407,BE
-1044026408,1044026415,NL
-1044026416,1044026431,BE
-1044026432,1044026447,NL
-1044026448,1044026455,BE
-1044026456,1044026479,NL
-1044026480,1044026487,BE
-1044026488,1044026519,NL
-1044026520,1044026535,BE
-1044026536,1044026607,NL
-1044026608,1044026615,BE
-1044026616,1044026631,NL
-1044026632,1044026639,BE
-1044026640,1044026647,NL
-1044026648,1044026655,BE
-1044026656,1044026663,NL
-1044026664,1044026671,BE
-1044026672,1044026679,NL
-1044026680,1044026687,BE
-1044026688,1044026695,NL
-1044026696,1044026703,BE
-1044026704,1044026727,NL
-1044026728,1044026767,BE
-1044026768,1044026791,NL
-1044026792,1044026799,BE
-1044026800,1044026815,NL
-1044026816,1044026839,BE
-1044026840,1044026855,NL
-1044026856,1044026863,BE
-1044026864,1044026895,NL
-1044026896,1044027263,BE
-1044027264,1044027407,NL
-1044027408,1044027415,BE
-1044027416,1044027423,NL
-1044027424,1044027431,BE
-1044027432,1044027447,NL
-1044027448,1044027455,BE
-1044027456,1044027471,NL
-1044027472,1044027487,BE
-1044027488,1044027519,NL
-1044027520,1044027527,BE
-1044027528,1044027535,NL
-1044027536,1044027575,BE
-1044027576,1044027583,NL
-1044027584,1044027591,BE
-1044027592,1044027639,NL
-1044027640,1044027647,BE
-1044027648,1044027655,NL
-1044027656,1044027671,BE
-1044027672,1044027687,NL
-1044027688,1044027711,BE
-1044027712,1044027727,NL
-1044027728,1044027775,BE
-1044027776,1044027839,NL
-1044027840,1044027903,BE
-1044027904,1044028159,NL
-1044028160,1044028543,BE
-1044028544,1044028559,NL
-1044028560,1044028799,BE
-1044028800,1044028927,NL
-1044028928,1044028939,BE
-1044028940,1044028943,NL
-1044028944,1044028955,BE
-1044028956,1044028959,NL
-1044028960,1044029011,BE
-1044029012,1044029015,NL
-1044029016,1044029019,BE
-1044029020,1044029023,NL
-1044029024,1044029027,BE
-1044029028,1044029031,NL
-1044029032,1044029039,BE
-1044029040,1044029043,NL
-1044029044,1044029311,BE
-1044029312,1044029441,NL
-1044029442,1044029442,BE
-1044029443,1044029445,NL
-1044029446,1044029448,BE
-1044029449,1044029451,NL
-1044029452,1044029452,BE
-1044029453,1044029453,NL
-1044029454,1044029455,BE
-1044029456,1044029463,NL
-1044029464,1044029466,BE
-1044029467,1044029467,NL
-1044029468,1044029470,BE
-1044029471,1044029479,NL
-1044029480,1044029483,BE
-1044029484,1044029485,NL
-1044029486,1044029487,BE
-1044029488,1044029488,NL
-1044029489,1044029489,BE
-1044029490,1044029492,NL
-1044029493,1044029493,BE
-1044029494,1044029494,NL
-1044029495,1044029497,BE
-1044029498,1044029498,NL
-1044029499,1044029501,BE
-1044029502,1044029502,NL
-1044029503,1044029505,BE
-1044029506,1044029509,NL
-1044029510,1044029510,BE
-1044029511,1044029511,NL
-1044029512,1044029535,BE
-1044029536,1044029536,NL
-1044029537,1044029537,BE
-1044029538,1044029538,NL
-1044029539,1044029545,BE
-1044029546,1044029546,NL
-1044029547,1044029548,BE
-1044029549,1044029549,NL
-1044029550,1044029552,BE
-1044029553,1044029553,NL
-1044029554,1044029554,BE
-1044029555,1044029556,NL
-1044029557,1044029557,BE
-1044029558,1044029558,NL
-1044029559,1044029561,BE
-1044029562,1044029567,NL
-1044029568,1044029568,BE
-1044029569,1044029569,NL
-1044029570,1044029572,BE
-1044029573,1044029575,NL
-1044029576,1044029580,BE
-1044029581,1044029581,NL
-1044029582,1044029584,BE
-1044029585,1044029585,NL
-1044029586,1044029586,BE
-1044029587,1044029587,NL
-1044029588,1044029590,BE
-1044029591,1044029595,NL
-1044029596,1044029596,BE
-1044029597,1044029598,NL
-1044029599,1044029599,BE
-1044029600,1044029600,NL
-1044029601,1044029601,BE
-1044029602,1044029603,NL
-1044029604,1044029606,BE
-1044029607,1044029608,NL
-1044029609,1044029609,BE
-1044029610,1044029610,NL
-1044029611,1044029611,BE
-1044029612,1044029612,NL
-1044029613,1044029616,BE
-1044029617,1044029618,NL
-1044029619,1044029620,BE
-1044029621,1044029622,NL
-1044029623,1044029625,BE
-1044029626,1044029628,NL
-1044029629,1044029630,BE
-1044029631,1044029631,NL
-1044029632,1044029634,BE
-1044029635,1044029635,NL
-1044029636,1044029636,BE
-1044029637,1044029638,NL
-1044029639,1044029640,BE
-1044029641,1044029641,NL
-1044029642,1044029642,BE
-1044029643,1044029647,NL
-1044029648,1044029648,BE
-1044029649,1044029651,NL
-1044029652,1044029652,BE
-1044029653,1044029659,NL
-1044029660,1044029660,BE
-1044029661,1044029663,NL
-1044029664,1044029665,BE
-1044029666,1044029667,NL
-1044029668,1044029668,BE
-1044029669,1044029669,NL
-1044029670,1044029672,BE
-1044029673,1044029676,NL
-1044029677,1044029678,BE
-1044029679,1044029680,NL
-1044029681,1044029681,BE
-1044029682,1044029682,NL
-1044029683,1044029684,BE
-1044029685,1044029686,NL
-1044029687,1044029687,BE
-1044029688,1044029693,NL
-1044029694,1044029694,BE
-1044029695,1044029695,NL
-1044029696,1044029711,BE
-1044029712,1044029719,NL
-1044029720,1044029727,BE
-1044029728,1044029743,NL
-1044029744,1044029767,BE
-1044029768,1044029775,NL
-1044029776,1044029783,BE
-1044029784,1044029823,NL
-1044029824,1044029839,BE
-1044029840,1044029871,NL
-1044029872,1044029879,BE
-1044029880,1044029887,NL
-1044029888,1044029919,BE
-1044029920,1044029951,NL
-1044029952,1044029959,BE
-1044029960,1044029967,NL
-1044029968,1044029983,BE
-1044029984,1044030015,NL
-1044030016,1044030031,BE
-1044030032,1044030047,NL
-1044030048,1044030055,BE
-1044030056,1044030063,NL
-1044030064,1044030071,BE
-1044030072,1044030111,NL
-1044030112,1044030119,BE
-1044030120,1044030127,NL
-1044030128,1044030135,BE
-1044030136,1044030191,NL
-1044030192,1044030223,BE
-1044030224,1044030231,NL
-1044030232,1044030239,BE
-1044030240,1044030247,NL
-1044030248,1044030263,BE
-1044030264,1044030279,NL
-1044030280,1044030295,BE
-1044030296,1044030303,NL
-1044030304,1044030311,BE
-1044030312,1044030335,NL
-1044030336,1044030343,BE
-1044030344,1044030351,NL
-1044030352,1044030359,BE
-1044030360,1044030375,NL
-1044030376,1044030391,BE
-1044030392,1044030399,NL
-1044030400,1044030415,BE
-1044030416,1044030439,NL
-1044030440,1044030447,BE
-1044030448,1044030463,NL
-1044030464,1044030471,BE
-1044030472,1044030487,NL
-1044030488,1044030495,BE
-1044030496,1044030527,NL
-1044030528,1044030535,BE
-1044030536,1044030543,NL
-1044030544,1044030551,BE
-1044030552,1044030583,NL
-1044030584,1044030591,BE
-1044030592,1044030607,NL
-1044030608,1044030623,BE
-1044030624,1044030639,NL
-1044030640,1044030655,BE
-1044030656,1044030671,NL
-1044030672,1044030687,BE
-1044030688,1044030703,NL
-1044030704,1044030735,BE
-1044030736,1044030759,NL
-1044030760,1044030775,BE
-1044030776,1044030799,NL
-1044030800,1044030807,BE
-1044030808,1044030815,NL
-1044030816,1044030823,BE
-1044030824,1044030831,NL
-1044030832,1044030847,BE
-1044030848,1044030879,NL
-1044030880,1044030887,BE
-1044030888,1044030895,NL
-1044030896,1044030903,BE
-1044030904,1044030911,NL
-1044030912,1044030919,BE
-1044030920,1044030927,NL
-1044030928,1044030935,BE
-1044030936,1044030959,NL
-1044030960,1044030967,BE
-1044030968,1044030975,NL
-1044030976,1044030991,BE
-1044030992,1044030999,NL
-1044031000,1044031007,BE
-1044031008,1044031039,NL
-1044031040,1044031103,BE
-1044031104,1044031119,NL
-1044031120,1044031127,BE
-1044031128,1044031151,NL
-1044031152,1044031167,BE
-1044031168,1044031271,NL
-1044031272,1044031295,BE
-1044031296,1044031319,NL
-1044031320,1044031335,BE
-1044031336,1044031343,NL
-1044031344,1044031351,BE
-1044031352,1044031359,NL
-1044031360,1044031360,BE
-1044031361,1044031363,NL
-1044031364,1044031364,BE
-1044031365,1044031367,NL
-1044031368,1044031375,BE
-1044031376,1044031399,NL
-1044031400,1044031431,BE
-1044031432,1044031439,NL
-1044031440,1044031455,BE
-1044031456,1044031479,NL
-1044031480,1044031487,BE
-1044031488,1044031489,NL
-1044031490,1044031490,BE
-1044031491,1044031494,NL
-1044031495,1044031495,BE
-1044031496,1044031496,NL
-1044031497,1044031497,BE
-1044031498,1044031507,NL
-1044031508,1044031508,BE
-1044031509,1044031509,NL
-1044031510,1044031510,BE
-1044031511,1044031519,NL
-1044031520,1044031520,BE
-1044031521,1044031523,NL
-1044031524,1044031524,BE
-1044031525,1044031531,NL
-1044031532,1044031532,BE
-1044031533,1044031533,NL
-1044031534,1044031536,BE
-1044031537,1044031550,NL
-1044031551,1044031551,BE
-1044031552,1044031552,NL
-1044031553,1044031553,BE
-1044031554,1044031556,NL
-1044031557,1044031557,BE
-1044031558,1044031558,NL
-1044031559,1044031559,BE
-1044031560,1044031562,NL
-1044031563,1044031563,BE
-1044031564,1044031566,NL
-1044031567,1044031567,BE
-1044031568,1044031568,NL
-1044031569,1044031569,BE
-1044031570,1044031571,NL
-1044031572,1044031572,BE
-1044031573,1044031573,NL
-1044031574,1044031574,BE
-1044031575,1044031579,NL
-1044031580,1044031581,BE
-1044031582,1044031582,NL
-1044031583,1044031584,BE
-1044031585,1044031592,NL
-1044031593,1044031593,BE
-1044031594,1044031597,NL
-1044031598,1044031598,BE
-1044031599,1044031599,NL
-1044031600,1044031600,BE
-1044031601,1044031627,NL
-1044031628,1044031628,BE
-1044031629,1044031629,NL
-1044031630,1044031630,BE
-1044031631,1044031635,NL
-1044031636,1044031636,BE
-1044031637,1044031640,NL
-1044031641,1044031641,BE
-1044031642,1044031643,NL
-1044031644,1044031644,BE
-1044031645,1044031651,NL
-1044031652,1044031652,BE
-1044031653,1044031654,NL
-1044031655,1044031655,BE
-1044031656,1044031656,NL
-1044031657,1044031658,BE
-1044031659,1044031666,NL
-1044031667,1044031667,BE
-1044031668,1044031668,NL
-1044031669,1044031670,BE
-1044031671,1044031673,NL
-1044031674,1044031674,BE
-1044031675,1044031675,NL
-1044031676,1044031677,BE
-1044031678,1044031683,NL
-1044031684,1044031684,BE
-1044031685,1044031687,NL
-1044031688,1044031688,BE
-1044031689,1044031690,NL
-1044031691,1044031692,BE
-1044031693,1044031698,NL
-1044031699,1044031699,BE
-1044031700,1044031702,NL
-1044031703,1044031704,BE
-1044031705,1044031709,NL
-1044031710,1044031710,BE
-1044031711,1044031711,NL
-1044031712,1044031712,BE
-1044031713,1044031714,NL
-1044031715,1044031715,BE
-1044031716,1044031717,NL
-1044031718,1044031719,BE
-1044031720,1044031721,NL
-1044031722,1044031723,BE
-1044031724,1044031726,NL
-1044031727,1044031727,BE
-1044031728,1044031751,NL
-1044031752,1044031759,BE
-1044031760,1044031799,NL
-1044031800,1044031807,BE
-1044031808,1044031815,NL
-1044031816,1044031871,BE
-1044031872,1044031879,NL
-1044031880,1044031895,BE
-1044031896,1044031927,NL
-1044031928,1044031943,BE
-1044031944,1044031951,NL
-1044031952,1044031991,BE
-1044031992,1044031999,NL
-1044032000,1044032031,BE
-1044032032,1044032047,NL
-1044032048,1044032055,BE
-1044032056,1044032071,NL
-1044032072,1044032079,BE
-1044032080,1044032103,NL
-1044032104,1044032127,BE
-1044032128,1044032143,NL
-1044032144,1044032167,BE
-1044032168,1044032175,NL
-1044032176,1044032183,BE
-1044032184,1044032191,NL
-1044032192,1044032199,BE
-1044032200,1044032223,NL
-1044032224,1044032239,BE
-1044032240,1044032263,NL
-1044032264,1044032287,BE
-1044032288,1044032303,NL
-1044032304,1044032327,BE
-1044032328,1044032375,NL
-1044032376,1044032407,BE
-1044032408,1044032471,NL
-1044032472,1044032479,BE
-1044032480,1044032527,NL
-1044032528,1044032559,BE
-1044032560,1044032583,NL
-1044032584,1044032615,BE
-1044032616,1044032639,NL
-1044032640,1044032647,BE
-1044032648,1044032655,NL
-1044032656,1044032663,BE
-1044032664,1044032695,NL
-1044032696,1044032703,BE
-1044032704,1044032719,NL
-1044032720,1044032727,BE
-1044032728,1044032735,NL
-1044032736,1044032743,BE
-1044032744,1044032775,NL
-1044032776,1044032783,BE
-1044032784,1044032791,NL
-1044032792,1044032799,BE
-1044032800,1044032815,NL
-1044032816,1044032831,BE
-1044032832,1044032855,NL
-1044032856,1044032863,BE
-1044032864,1044032887,NL
-1044032888,1044032903,BE
-1044032904,1044032927,NL
-1044032928,1044032935,BE
-1044032936,1044032943,NL
-1044032944,1044032959,BE
-1044032960,1044032967,NL
-1044032968,1044032975,BE
-1044032976,1044032991,NL
-1044032992,1044032999,BE
-1044033000,1044033031,NL
-1044033032,1044033055,BE
-1044033056,1044033071,NL
-1044033072,1044033079,BE
-1044033080,1044033087,NL
-1044033088,1044033095,BE
-1044033096,1044033111,NL
-1044033112,1044033119,BE
-1044033120,1044033135,NL
-1044033136,1044033159,BE
-1044033160,1044033207,NL
-1044033208,1044033215,BE
-1044033216,1044033223,NL
-1044033224,1044033231,BE
-1044033232,1044033335,NL
-1044033336,1044033343,BE
-1044033344,1044033351,NL
-1044033352,1044033359,BE
-1044033360,1044033375,NL
-1044033376,1044033407,BE
-1044033408,1044033431,NL
-1044033432,1044033447,BE
-1044033448,1044033527,NL
-1044033528,1044033535,BE
-1044033536,1044033543,NL
-1044033544,1044033551,BE
-1044033552,1044033575,NL
-1044033576,1044033583,BE
-1044033584,1044033623,NL
-1044033624,1044033631,BE
-1044033632,1044033655,NL
-1044033656,1044033663,BE
-1044033664,1044033671,NL
-1044033672,1044033687,BE
-1044033688,1044033719,NL
-1044033720,1044033727,BE
-1044033728,1044033847,NL
-1044033848,1044033855,BE
-1044033856,1044033895,NL
-1044033896,1044033903,BE
-1044033904,1044033927,NL
-1044033928,1044033935,BE
-1044033936,1044033991,NL
-1044033992,1044033999,BE
-1044034000,1044034015,NL
-1044034016,1044034023,BE
-1044034024,1044034031,NL
-1044034032,1044034039,BE
-1044034040,1044034055,NL
-1044034056,1044034063,BE
-1044034064,1044034095,NL
-1044034096,1044034119,BE
-1044034120,1044034127,NL
-1044034128,1044034143,BE
-1044034144,1044034207,NL
-1044034208,1044034215,BE
-1044034216,1044034231,NL
-1044034232,1044034247,BE
-1044034248,1044034263,NL
-1044034264,1044034271,BE
-1044034272,1044034279,NL
-1044034280,1044034295,BE
-1044034296,1044034303,NL
-1044034304,1044034311,BE
-1044034312,1044034327,NL
-1044034328,1044034335,BE
-1044034336,1044034375,NL
-1044034376,1044034383,BE
-1044034384,1044034487,NL
-1044034488,1044034495,BE
-1044034496,1044034511,NL
-1044034512,1044034519,BE
-1044034520,1044034615,NL
-1044034616,1044034623,BE
-1044034624,1044034663,NL
-1044034664,1044034671,BE
-1044034672,1044034735,NL
-1044034736,1044034743,BE
-1044034744,1044034751,NL
-1044034752,1044034759,BE
-1044034760,1044034783,NL
-1044034784,1044034791,BE
-1044034792,1044034847,NL
-1044034848,1044034855,BE
-1044034856,1044034919,NL
-1044034920,1044034927,BE
-1044034928,1044034975,NL
-1044034976,1044034983,BE
-1044034984,1044034999,NL
-1044035000,1044035007,BE
-1044035008,1044035031,NL
-1044035032,1044035039,BE
-1044035040,1044035047,NL
-1044035048,1044035055,BE
-1044035056,1044035063,NL
-1044035064,1044035071,BE
-1044035072,1044035087,NL
-1044035088,1044035095,BE
-1044035096,1044035143,NL
-1044035144,1044035151,BE
-1044035152,1044035191,NL
-1044035192,1044035199,BE
-1044035200,1044035223,NL
-1044035224,1044035231,BE
-1044035232,1044035255,NL
-1044035256,1044035263,BE
-1044035264,1044035287,NL
-1044035288,1044035311,BE
-1044035312,1044035327,NL
-1044035328,1044035351,BE
-1044035352,1044035367,NL
-1044035368,1044035375,BE
-1044035376,1044035407,NL
-1044035408,1044035423,BE
-1044035424,1044035447,NL
-1044035448,1044035471,BE
-1044035472,1044035479,NL
-1044035480,1044035487,BE
-1044035488,1044035495,NL
-1044035496,1044035503,BE
-1044035504,1044035511,NL
-1044035512,1044035527,BE
-1044035528,1044035535,NL
-1044035536,1044035543,BE
-1044035544,1044035559,NL
-1044035560,1044035591,BE
-1044035592,1044035607,NL
-1044035608,1044035623,BE
-1044035624,1044035655,NL
-1044035656,1044035663,BE
-1044035664,1044035671,NL
-1044035672,1044035679,BE
-1044035680,1044035711,NL
-1044035712,1044035727,BE
-1044035728,1044035751,NL
-1044035752,1044035759,BE
-1044035760,1044035791,NL
-1044035792,1044035807,BE
-1044035808,1044035831,NL
-1044035832,1044035839,BE
-1044035840,1044035847,NL
-1044035848,1044035871,BE
-1044035872,1044035887,NL
-1044035888,1044035895,BE
-1044035896,1044035903,NL
-1044035904,1044035919,BE
-1044035920,1044035935,NL
-1044035936,1044035967,BE
-1044035968,1044035975,NL
-1044035976,1044035991,BE
-1044035992,1044035999,NL
-1044036000,1044036007,BE
-1044036008,1044036039,NL
-1044036040,1044036047,BE
-1044036048,1044036079,NL
-1044036080,1044036087,BE
-1044036088,1044036095,NL
-1044036096,1044036103,BE
-1044036104,1044036111,NL
-1044036112,1044036119,BE
-1044036120,1044036127,NL
-1044036128,1044036135,BE
-1044036136,1044036143,NL
-1044036144,1044036159,BE
-1044036160,1044036167,NL
-1044036168,1044036199,BE
-1044036200,1044036223,NL
-1044036224,1044036247,BE
-1044036248,1044036255,NL
-1044036256,1044036271,BE
-1044036272,1044036295,NL
-1044036296,1044036311,BE
-1044036312,1044036327,NL
-1044036328,1044036335,BE
-1044036336,1044036399,NL
-1044036400,1044036407,BE
-1044036408,1044036415,NL
-1044036416,1044036423,BE
-1044036424,1044036439,NL
-1044036440,1044036447,BE
-1044036448,1044036471,NL
-1044036472,1044036479,BE
-1044036480,1044036503,NL
-1044036504,1044036511,BE
-1044036512,1044036527,NL
-1044036528,1044036543,BE
-1044036544,1044036559,NL
-1044036560,1044036567,BE
-1044036568,1044036575,NL
-1044036576,1044036623,BE
-1044036624,1044036647,NL
-1044036648,1044036655,BE
-1044036656,1044036671,NL
-1044036672,1044036687,BE
-1044036688,1044036735,NL
-1044036736,1044036743,BE
-1044036744,1044036759,NL
-1044036760,1044036767,BE
-1044036768,1044036775,NL
-1044036776,1044036783,BE
-1044036784,1044036791,NL
-1044036792,1044036799,BE
-1044036800,1044036807,NL
-1044036808,1044036815,BE
-1044036816,1044036831,NL
-1044036832,1044036839,BE
-1044036840,1044036863,NL
-1044036864,1044036864,BE
-1044036865,1044036865,NL
-1044036866,1044036866,BE
-1044036867,1044036890,NL
-1044036891,1044036891,BE
-1044036892,1044036899,NL
-1044036900,1044036900,BE
-1044036901,1044036907,NL
-1044036908,1044036908,BE
-1044036909,1044036909,NL
-1044036910,1044036910,BE
-1044036911,1044036927,NL
-1044036928,1044036928,BE
-1044036929,1044036942,NL
-1044036943,1044036943,BE
-1044036944,1044036948,NL
-1044036949,1044036951,BE
-1044036952,1044036957,NL
-1044036958,1044036958,BE
-1044036959,1044036967,NL
-1044036968,1044036968,BE
-1044036969,1044036970,NL
-1044036971,1044036971,BE
-1044036972,1044036976,NL
-1044036977,1044036977,BE
-1044036978,1044036984,NL
-1044036985,1044036985,BE
-1044036986,1044036990,NL
-1044036991,1044036991,BE
-1044036992,1044037007,NL
-1044037008,1044037010,BE
-1044037011,1044037014,NL
-1044037015,1044037015,BE
-1044037016,1044037021,NL
-1044037022,1044037022,BE
-1044037023,1044037023,NL
-1044037024,1044037025,BE
-1044037026,1044037026,NL
-1044037027,1044037027,BE
-1044037028,1044037037,NL
-1044037038,1044037038,BE
-1044037039,1044037042,NL
-1044037043,1044037043,BE
-1044037044,1044037047,NL
-1044037048,1044037048,BE
-1044037049,1044037049,NL
-1044037050,1044037051,BE
-1044037052,1044037056,NL
-1044037057,1044037057,BE
-1044037058,1044037061,NL
-1044037062,1044037063,BE
-1044037064,1044037065,NL
-1044037066,1044037066,BE
-1044037067,1044037070,NL
-1044037071,1044037071,BE
-1044037072,1044037074,NL
-1044037075,1044037075,BE
-1044037076,1044037091,NL
-1044037092,1044037092,BE
-1044037093,1044037098,NL
-1044037099,1044037100,BE
-1044037101,1044037101,NL
-1044037102,1044037102,BE
-1044037103,1044037106,NL
-1044037107,1044037107,BE
-1044037108,1044037109,NL
-1044037110,1044037110,BE
-1044037111,1044037143,NL
-1044037144,1044037151,BE
-1044037152,1044037159,NL
-1044037160,1044037167,BE
-1044037168,1044037191,NL
-1044037192,1044037223,BE
-1044037224,1044037271,NL
-1044037272,1044037279,BE
-1044037280,1044037287,NL
-1044037288,1044037295,BE
-1044037296,1044037319,NL
-1044037320,1044037327,BE
-1044037328,1044037375,NL
-1044037376,1044037631,BE
-1044037632,1044038143,NL
-1044038144,1044038527,BE
-1044038528,1044038535,NL
-1044038536,1044038543,BE
-1044038544,1044038559,NL
-1044038560,1044038567,BE
-1044038568,1044038575,NL
-1044038576,1044038583,BE
-1044038584,1044038591,NL
-1044038592,1044038599,BE
-1044038600,1044038607,NL
-1044038608,1044038623,BE
-1044038624,1044038639,NL
-1044038640,1044038647,BE
-1044038648,1044038671,NL
-1044038672,1044038679,BE
-1044038680,1044038687,NL
-1044038688,1044038703,BE
-1044038704,1044038783,NL
-1044038784,1044038911,BE
-1044038912,1044038919,NL
-1044038920,1044038927,BE
-1044038928,1044038935,NL
-1044038936,1044038943,BE
-1044038944,1044039295,NL
-1044039296,1044039303,BE
-1044039304,1044039311,NL
-1044039312,1044039359,BE
-1044039360,1044039951,NL
-1044039952,1044039959,BE
-1044039960,1044039967,NL
-1044039968,1044040015,BE
-1044040016,1044040063,NL
-1044040064,1044040111,BE
-1044040112,1044040143,NL
-1044040144,1044040159,BE
-1044040160,1044040191,NL
-1044040192,1044040223,BE
-1044040224,1044040231,NL
-1044040232,1044040239,BE
-1044040240,1044040255,NL
-1044040256,1044040703,BE
-1044040704,1044041727,NL
-1044041728,1044043775,BE
-1044043776,1044043783,NL
-1044043784,1044043787,BE
-1044043788,1044043791,NL
-1044043792,1044043795,BE
-1044043796,1044043799,NL
-1044043800,1044043803,BE
-1044043804,1044043807,NL
-1044043808,1044043811,BE
-1044043812,1044043823,NL
-1044043824,1044043827,BE
-1044043828,1044043835,NL
-1044043836,1044043847,BE
-1044043848,1044043851,NL
-1044043852,1044043879,BE
-1044043880,1044043883,NL
-1044043884,1044043895,BE
-1044043896,1044043903,NL
-1044043904,1044043907,BE
-1044043908,1044043919,NL
-1044043920,1044043927,BE
-1044043928,1044043931,NL
-1044043932,1044043935,BE
-1044043936,1044043943,NL
-1044043944,1044043955,BE
-1044043956,1044043971,NL
-1044043972,1044043975,BE
-1044043976,1044043987,NL
-1044043988,1044043999,BE
-1044044000,1044044003,NL
-1044044004,1044044007,BE
-1044044008,1044044011,NL
-1044044012,1044044015,BE
-1044044016,1044044019,NL
-1044044020,1044044027,BE
-1044044028,1044044035,NL
-1044044036,1044044043,BE
-1044044044,1044044051,NL
-1044044052,1044044055,BE
-1044044056,1044044059,NL
-1044044060,1044044071,BE
-1044044072,1044044083,NL
-1044044084,1044044099,BE
-1044044100,1044044119,NL
-1044044120,1044044131,BE
-1044044132,1044044135,NL
-1044044136,1044044143,BE
-1044044144,1044044163,NL
-1044044164,1044044167,BE
-1044044168,1044044171,NL
-1044044172,1044044187,BE
-1044044188,1044044215,NL
-1044044216,1044044227,BE
-1044044228,1044044243,NL
-1044044244,1044044247,BE
-1044044248,1044044251,NL
-1044044252,1044045311,BE
-1044045312,1044045695,NL
-1044045696,1044045911,BE
-1044045912,1044045919,NL
-1044045920,1044046079,BE
-1044046080,1044046223,NL
-1044046224,1044046231,BE
-1044046232,1044046239,NL
-1044046240,1044046319,BE
-1044046320,1044046327,NL
-1044046328,1044051987,BE
-1044051988,1044051991,NL
-1044051992,1044052011,BE
-1044052012,1044052015,NL
-1044052016,1044052031,BE
-1044052032,1044052039,NL
-1044052040,1044052063,BE
-1044052064,1044052067,NL
-1044052068,1044052107,BE
-1044052108,1044052111,NL
-1044052112,1044052131,BE
-1044052132,1044052135,NL
-1044052136,1044052223,BE
-1044052224,1044052227,NL
-1044052228,1044052255,BE
-1044052256,1044052259,NL
-1044052260,1044052347,BE
-1044052348,1044052359,NL
-1044052360,1044052363,BE
-1044052364,1044052375,NL
-1044052376,1044052479,BE
-1044052480,1044052483,NL
-1044052484,1044052967,BE
-1044052968,1044052971,NL
-1044052972,1044052983,BE
-1044052984,1044052987,NL
-1044052988,1044053055,BE
-1044053056,1044053063,NL
-1044053064,1044053255,BE
-1044053256,1044053263,NL
-1044053264,1044053455,BE
-1044053456,1044053463,NL
-1044053464,1044053567,BE
-1044053568,1044059263,NL
-1044059264,1044059935,BE
-1044059936,1044060031,NL
-1044060032,1044060063,BE
-1044060064,1044061183,NL
-1044061184,1044061223,BE
-1044061224,1044061263,NL
-1044061264,1044061271,BE
-1044061272,1044061343,NL
-1044061344,1044061375,BE
-1044061376,1044061391,NL
-1044061392,1044061399,BE
-1044061400,1044061431,NL
-1044061432,1044061439,BE
-1044061440,1044061695,NL
-1044061696,1044061703,BE
-1044061704,1044061759,NL
-1044061760,1044061775,BE
-1044061776,1044061783,NL
-1044061784,1044061807,BE
-1044061808,1044061831,NL
-1044061832,1044061839,BE
-1044061840,1044061879,NL
-1044061880,1044061895,BE
-1044061896,1044061919,NL
-1044061920,1044061951,BE
-1044061952,1044062015,NL
-1044062016,1044062047,BE
-1044062048,1044062079,NL
-1044062080,1044062095,BE
-1044062096,1044062103,NL
-1044062104,1044062135,BE
-1044062136,1044062175,NL
-1044062176,1044062199,BE
-1044062200,1044062223,NL
-1044062224,1044062239,BE
-1044062240,1044062375,NL
-1044062376,1044062383,BE
-1044062384,1044062399,NL
-1044062400,1044062415,BE
-1044062416,1044062455,NL
-1044062456,1044062471,BE
-1044062472,1044062503,NL
-1044062504,1044062527,BE
-1044062528,1044062535,NL
-1044062536,1044062543,BE
-1044062544,1044062575,NL
-1044062576,1044062583,BE
-1044062584,1044062591,NL
-1044062592,1044062599,BE
-1044062600,1044062607,NL
-1044062608,1044062623,BE
-1044062624,1044062647,NL
-1044062648,1044062655,BE
-1044062656,1044062663,NL
-1044062664,1044062671,BE
-1044062672,1044063231,NL
-1044063232,1044063355,BE
-1044063356,1044063363,NL
-1044063364,1044067327,BE
-1044067328,1044068351,NL
-1044068352,1044068991,BE
-1044068992,1044069631,NL
-1044069632,1044070399,BE
-1044070400,1044076607,NL
-1044076608,1044076799,BE
-1044076800,1044077055,NL
-1044077056,1044077567,BE
-1044077568,1044092927,NL
-1044092928,1044093183,BE
-1044093184,1044094975,NL
-1044094976,1044099071,BE
-1044099072,1044103263,NL
-1044103264,1044103423,BE
-1044103424,1044103999,NL
-1044104000,1044104031,BE
-1044104032,1044104095,NL
-1044104096,1044104159,BE
-1044104160,1044104287,NL
-1044104288,1044104319,BE
-1044104320,1044104367,NL
-1044104368,1044104383,BE
-1044104384,1044104543,NL
-1044104544,1044104559,BE
-1044104560,1044104831,NL
-1044104832,1044105023,BE
-1044105024,1044105055,NL
-1044105056,1044105087,BE
-1044105088,1044105151,NL
-1044105152,1044106771,BE
-1044106772,1044106775,NL
-1044106776,1044106787,BE
-1044106788,1044106795,NL
-1044106796,1044106807,BE
-1044106808,1044106815,NL
-1044106816,1044107263,BE
-1044107264,1044111359,NL
-1044111360,1044115455,BE
-1044115456,1044117503,NL
-1044117504,1044117551,BE
-1044117552,1044117567,NL
-1044117568,1044118527,BE
-1044118528,1044118783,NL
-1044118784,1044118847,BE
-1044118848,1044118895,NL
-1044118896,1044118903,BE
-1044118904,1044119551,NL
+1043988480,1044118295,NL
+1044118296,1044118303,BE
+1044118304,1044118423,NL
+1044118424,1044118431,BE
+1044118432,1044118439,NL
+1044118440,1044118447,BE
+1044118448,1044119551,NL
1044119552,1044152319,GB
1044152320,1044185087,IR
1044185088,1044193279,RU
1044193280,1044201471,PL
-1044201472,1044207359,FI
-1044207360,1044207615,FR
-1044207616,1044217855,FI
+1044201472,1044217855,FI
1044217856,1044226047,DK
1044226048,1044234239,OM
-1044250624,1044251391,BE
-1044251392,1044251647,EU
-1044251648,1044252415,BE
-1044252416,1044252927,EU
-1044252928,1044253439,BE
-1044253440,1044253695,EU
-1044253696,1044254463,BE
-1044254464,1044254975,EU
-1044254976,1044255487,BE
-1044255488,1044255999,EU
-1044256000,1044256511,BE
-1044256512,1044256767,EU
-1044256768,1044257535,BE
-1044257536,1044257791,EU
-1044257792,1044258559,BE
-1044258560,1044259071,EU
-1044259072,1044259583,BE
-1044259584,1044260095,EU
-1044260096,1044261631,BE
-1044261632,1044262143,EU
-1044262144,1044262399,BE
-1044262400,1044263167,EU
-1044263168,1044263423,BE
-1044263424,1044264191,EU
-1044264192,1044264447,BE
-1044264448,1044265215,EU
-1044265216,1044265471,BE
-1044265472,1044265983,EU
-1044265984,1044266751,BE
-1044266752,1044267519,EU
-1044267520,1044269567,BE
-1044269568,1044270079,EU
-1044270080,1044271615,BE
-1044271616,1044272127,EU
-1044272128,1044272383,BE
-1044272384,1044272895,EU
-1044272896,1044273151,BE
-1044273152,1044283391,EU
1044283392,1044316159,FR
1044316160,1044332543,NO
1044332544,1044348927,RU
@@ -23004,133 +8610,34 @@
1044389888,1044398079,FR
1044398080,1044414463,UA
1044414464,1044447231,GB
-1044447232,1044451583,SE
-1044451584,1044451839,NO
-1044451840,1044453183,SE
-1044453184,1044453263,NO
-1044453264,1044454399,SE
-1044454400,1044454415,NO
-1044454416,1044454423,SE
-1044454424,1044454427,NO
-1044454428,1044454463,SE
-1044454464,1044454495,NO
-1044454496,1044454511,SE
-1044454512,1044454559,NO
-1044454560,1044454583,SE
-1044454584,1044454655,NO
-1044454656,1044454911,SE
-1044454912,1044455423,NO
+1044447232,1044453233,SE
+1044453234,1044453234,NO
+1044453235,1044455423,SE
1044455424,1044463615,EE
1044463616,1044479999,SE
1044480000,1044488191,CH
-1044488192,1044494911,SK
-1044494912,1044494943,SR
-1044494944,1044496383,SK
+1044488192,1044496383,SK
1044496384,1044512767,EE
1044512768,1044578303,DK
-1044578304,1044578559,DE
-1044578560,1044580607,GB
-1044580608,1044580671,DE
-1044580672,1044580735,GB
-1044580736,1044580767,DE
-1044580768,1044580799,GB
-1044580800,1044581119,DE
-1044581120,1044581631,GB
-1044581632,1044581903,DE
-1044581904,1044581951,GB
-1044581952,1044582015,DE
-1044582016,1044586495,GB
-1044586496,1044587007,DE
-1044587008,1044587519,GB
-1044587520,1044587775,DE
-1044587776,1044588031,GB
-1044588032,1044588287,DE
-1044588288,1044588543,GB
-1044588544,1044588559,DE
-1044588560,1044588575,GB
-1044588576,1044588607,DE
-1044588608,1044588799,GB
-1044588800,1044589567,DE
-1044589568,1044590591,GB
-1044590592,1044590671,DE
-1044590672,1044590719,GB
-1044590720,1044590783,DE
-1044590784,1044590847,GB
-1044590848,1044591103,DE
-1044591104,1044591615,GB
-1044591616,1044592127,DE
-1044592128,1044592143,GB
-1044592144,1044592159,DE
-1044592160,1044592191,GB
-1044592192,1044592255,DE
-1044592256,1044592639,GB
-1044592640,1044592655,DE
-1044592656,1044592671,GB
-1044592672,1044592703,DE
-1044592704,1044592831,GB
-1044592832,1044592895,DE
-1044592896,1044593151,GB
-1044593152,1044593407,DE
-1044593408,1044593663,GB
-1044593664,1044594175,DE
-1044594176,1044625407,GB
-1044625408,1044625463,DE
-1044625464,1044625471,GB
-1044625472,1044625503,AT
-1044625504,1044625535,DE
-1044625536,1044625551,AT
-1044625552,1044625663,GB
-1044625664,1044625679,DE
-1044625680,1044625919,GB
-1044625920,1044626175,AT
-1044626176,1044627455,GB
-1044627456,1044628223,DE
-1044628224,1044629503,GB
-1044629504,1044629759,DE
-1044629760,1044631551,GB
-1044631552,1044631903,DE
-1044631904,1044631951,GB
-1044631952,1044631967,DE
-1044631968,1044632319,GB
-1044632320,1044633087,DE
-1044633088,1044633343,GB
-1044633344,1044633855,DE
-1044633856,1044634623,GB
-1044634624,1044634879,DE
-1044634880,1044635647,GB
-1044635648,1044636159,US
-1044636160,1044638207,DE
-1044638208,1044638223,GB
-1044638224,1044638239,DE
-1044638240,1044638273,GB
-1044638274,1044638274,GB
-1044638275,1044638463,GB
+1044578304,1044578623,GB
+1044578624,1044578639,DE
+1044578640,1044636671,GB
+1044636672,1044637695,DE
+1044637696,1044638463,GB
1044638464,1044638719,DE
-1044638720,1044638975,GB
-1044638976,1044639231,DE
-1044639232,1044639743,GB
-1044639744,1044641791,DE
-1044641792,1044642815,US
-1044642816,1044643327,DE
-1044643328,1044643839,GB
+1044638720,1044640767,GB
+1044640768,1044642815,DE
+1044642816,1044643839,GB
1044643840,1044652031,DE
1044652032,1044660223,LY
-1044660224,1044664895,GR
-1044664896,1044664959,IR
-1044664960,1044665535,GR
-1044665536,1044665551,IQ
-1044665552,1044665855,GR
-1044665856,1044666367,US
-1044666368,1044667647,GR
-1044667648,1044667903,US
-1044667904,1044668415,GR
+1044660224,1044668415,GR
1044668416,1044676607,BA
1044676608,1044684799,RU
1044684800,1044692991,HU
1044692992,1044697087,AT
1044697088,1044697343,DE
-1044697344,1044697855,AT
-1044697856,1044698367,DE
+1044697344,1044698111,AT
+1044698112,1044698367,DE
1044698368,1044698623,AT
1044698624,1044699135,DE
1044699136,1044701183,AT
@@ -23141,689 +8648,52 @@
1044744192,1044746239,GB
1044746240,1044748287,DE
1044748288,1044750335,DK
-1044750336,1044750351,US
-1044750352,1044750355,HU
-1044750356,1044750359,BE
-1044750360,1044750363,GB
-1044750364,1044750367,FI
-1044750368,1044753151,NL
-1044753152,1044753183,DE
-1044753184,1044753215,HU
-1044753216,1044758527,NL
+1044750336,1044758527,NL
1044758528,1044774911,PL
-1044774912,1044782079,NO
-1044782080,1044782335,EU
-1044782336,1044800383,NO
-1044800384,1044800511,IT
-1044800512,1044840447,NO
+1044774912,1044840447,NO
1044840448,1044905983,FI
1044905984,1044908031,GB
1044908032,1044909055,US
-1044909056,1044910847,GB
-1044910848,1044911103,DE
-1044911104,1044913951,GB
-1044913952,1044913967,DE
-1044913968,1044913983,GB
-1044913984,1044914015,DE
-1044914016,1044914047,GB
-1044914048,1044914111,DE
-1044914112,1044916735,GB
-1044916736,1044917247,DE
-1044917248,1044917279,GB
-1044917280,1044917295,US
-1044917296,1044917311,DE
-1044917312,1044917343,GB
-1044917344,1044917359,DE
-1044917360,1044917503,GB
-1044917504,1044917759,DE
-1044917760,1044917823,GB
-1044917824,1044918271,DE
-1044918272,1044918287,GB
-1044918288,1044919295,DE
-1044919296,1044920191,GB
-1044920192,1044920319,DE
+1044909056,1044916735,GB
+1044916736,1044917263,DE
+1044917264,1044917279,GB
+1044917280,1044920319,DE
1044920320,1044921343,GB
1044921344,1044922367,US
1044922368,1044930559,DE
-1044930560,1044930607,BE
-1044930608,1044930615,GB
-1044930616,1044930667,BE
-1044930668,1044930671,GB
-1044930672,1044930695,BE
-1044930696,1044930703,GB
-1044930704,1044930719,BE
-1044930720,1044930727,GB
-1044930728,1044930751,BE
-1044930752,1044930795,GB
-1044930796,1044930799,BE
-1044930800,1044930807,GB
-1044930808,1044930911,BE
-1044930912,1044930927,DE
-1044930928,1044931343,BE
-1044931344,1044931359,GB
-1044931360,1044931375,BE
-1044931376,1044931391,GB
-1044931392,1044931407,BE
-1044931408,1044931439,GB
-1044931440,1044931455,BE
-1044931456,1044931463,GB
-1044931464,1044931487,BE
-1044931488,1044931495,GB
-1044931496,1044931535,BE
-1044931536,1044931543,GB
-1044931544,1044931551,BE
-1044931552,1044931567,GB
-1044931568,1044931583,BE
-1044931584,1044931623,GB
-1044931624,1044931631,BE
-1044931632,1044931639,GB
-1044931640,1044931651,BE
-1044931652,1044931655,GB
-1044931656,1044931663,BE
-1044931664,1044931679,GB
-1044931680,1044931703,BE
-1044931704,1044931727,GB
-1044931728,1044931759,BE
-1044931760,1044931775,GB
-1044931776,1044931831,BE
-1044931832,1044931835,GB
-1044931836,1044931855,BE
-1044931856,1044931871,GB
-1044931872,1044931903,BE
-1044931904,1044931911,GB
-1044931912,1044931915,BE
-1044931916,1044931919,GB
-1044931920,1044931923,BE
-1044931924,1044931927,GB
-1044931928,1044931935,BE
-1044931936,1044931951,GB
-1044931952,1044931975,BE
-1044931976,1044931983,GB
-1044931984,1044932047,BE
-1044932048,1044932087,GB
-1044932088,1044932351,BE
-1044932352,1044932375,GB
-1044932376,1044932383,BE
-1044932384,1044932407,GB
-1044932408,1044932415,BE
-1044932416,1044932479,GB
-1044932480,1044932495,BE
-1044932496,1044932543,GB
-1044932544,1044932607,BE
-1044932608,1044932671,LU
-1044932672,1044932675,BE
-1044932676,1044932687,GB
-1044932688,1044932703,BE
-1044932704,1044932707,GB
-1044932708,1044932719,BE
-1044932720,1044932799,GB
-1044932800,1044932807,BE
-1044932808,1044932823,GB
-1044932824,1044932831,BE
-1044932832,1044932863,GB
-1044932864,1044932895,BE
-1044932896,1044932903,GB
-1044932904,1044932935,BE
-1044932936,1044932947,GB
-1044932948,1044932951,BE
-1044932952,1044932959,GB
-1044932960,1044932975,BE
-1044932976,1044932983,GB
-1044932984,1044933007,BE
-1044933008,1044933015,GB
-1044933016,1044933019,BE
-1044933020,1044933039,GB
-1044933040,1044933055,BE
-1044933056,1044933079,GB
-1044933080,1044933087,BE
-1044933088,1044933095,GB
-1044933096,1044933103,BE
-1044933104,1044933107,GB
-1044933108,1044933119,BE
-1044933120,1044933183,GB
-1044933184,1044933215,BE
-1044933216,1044933227,GB
-1044933228,1044933231,BE
-1044933232,1044933279,GB
-1044933280,1044933303,BE
-1044933304,1044933311,GB
-1044933312,1044933359,BE
-1044933360,1044933375,GB
-1044933376,1044933407,BE
-1044933408,1044933411,GB
-1044933412,1044933415,BE
-1044933416,1044933439,GB
-1044933440,1044933487,BE
-1044933488,1044933495,GB
-1044933496,1044933503,BE
-1044933504,1044933519,GB
-1044933520,1044933551,BE
-1044933552,1044933555,GB
-1044933556,1044933583,BE
-1044933584,1044933599,GB
-1044933600,1044933615,BE
-1044933616,1044933623,GB
-1044933624,1044933711,BE
-1044933712,1044933719,GB
-1044933720,1044933727,BE
-1044933728,1044933735,GB
-1044933736,1044933743,BE
-1044933744,1044933759,GB
-1044933760,1044933823,BE
-1044933824,1044933831,GB
-1044933832,1044933843,BE
-1044933844,1044933847,GB
-1044933848,1044933863,BE
-1044933864,1044933887,GB
-1044933888,1044934151,BE
-1044934152,1044934159,GB
-1044934160,1044934191,BE
-1044934192,1044934199,GB
-1044934200,1044934231,BE
-1044934232,1044934247,GB
-1044934248,1044934287,BE
-1044934288,1044934295,GB
-1044934296,1044934319,BE
-1044934320,1044934327,GB
-1044934328,1044934343,BE
-1044934344,1044934351,GB
-1044934352,1044934359,BE
-1044934360,1044934503,GB
-1044934504,1044934543,BE
-1044934544,1044934551,GB
-1044934552,1044934575,BE
-1044934576,1044934583,GB
-1044934584,1044934591,BE
-1044934592,1044934599,GB
-1044934600,1044934607,BE
-1044934608,1044934615,GB
-1044934616,1044934719,BE
-1044934720,1044934783,GB
-1044934784,1044934815,BE
-1044934816,1044934819,GB
-1044934820,1044934823,BE
-1044934824,1044934911,GB
-1044934912,1044935183,BE
-1044935184,1044935199,GB
-1044935200,1044935231,BE
-1044935232,1044935247,GB
-1044935248,1044935263,BE
-1044935264,1044935295,GB
-1044935296,1044935331,BE
-1044935332,1044935343,GB
-1044935344,1044935355,BE
-1044935356,1044935391,GB
-1044935392,1044935407,BE
-1044935408,1044935423,GB
-1044935424,1044935743,BE
-1044935744,1044935751,GB
-1044935752,1044935839,BE
-1044935840,1044935847,GB
-1044935848,1044935851,BE
-1044935852,1044935871,GB
-1044935872,1044935879,BE
-1044935880,1044935887,GB
-1044935888,1044935895,BE
-1044935896,1044936095,GB
-1044936096,1044936103,BE
-1044936104,1044936111,GB
-1044936112,1044936123,BE
-1044936124,1044936151,GB
-1044936152,1044936199,BE
-1044936200,1044936215,GB
-1044936216,1044936271,BE
-1044936272,1044936311,GB
-1044936312,1044936335,BE
-1044936336,1044936351,GB
-1044936352,1044936439,BE
-1044936440,1044936455,GB
-1044936456,1044936463,FR
-1044936464,1044936495,BE
-1044936496,1044936503,GB
-1044936504,1044937183,BE
-1044937184,1044937187,GB
-1044937188,1044937287,BE
-1044937288,1044937343,GB
-1044937344,1044937383,BE
-1044937384,1044937399,GB
-1044937400,1044937487,BE
-1044937488,1044937503,GB
-1044937504,1044937515,BE
-1044937516,1044937531,GB
-1044937532,1044937535,BE
-1044937536,1044937551,GB
-1044937552,1044937567,BE
-1044937568,1044937583,GB
-1044937584,1044937591,BE
-1044937592,1044937599,GB
-1044937600,1044937607,BE
-1044937608,1044937639,GB
-1044937640,1044937679,BE
-1044937680,1044937695,GB
-1044937696,1044937703,BE
-1044937704,1044937711,GB
-1044937712,1044938047,BE
-1044938048,1044938079,GB
-1044938080,1044938103,BE
-1044938104,1044938107,GB
-1044938108,1044938111,BE
-1044938112,1044938151,GB
-1044938152,1044938175,BE
-1044938176,1044938207,GB
-1044938208,1044938235,BE
-1044938236,1044938271,GB
-1044938272,1044938315,BE
-1044938316,1044938319,GB
-1044938320,1044938327,BE
-1044938328,1044938343,GB
-1044938344,1044938367,BE
-1044938368,1044938399,GB
-1044938400,1044938407,BE
-1044938408,1044938415,GB
-1044938416,1044938423,BE
-1044938424,1044938431,GB
-1044938432,1044938447,BE
-1044938448,1044938455,GB
-1044938456,1044938479,BE
-1044938480,1044938495,GB
-1044938496,1044938503,LU
-1044938504,1044938523,GB
-1044938524,1044938527,BE
-1044938528,1044938559,GB
-1044938560,1044938623,LU
-1044938624,1044938631,BE
-1044938632,1044938719,GB
-1044938720,1044938751,LU
-1044938752,1044946943,GB
+1044930560,1044931231,GB
+1044931232,1044931239,BE
+1044931240,1044933499,GB
+1044933500,1044933503,BE
+1044933504,1044935439,GB
+1044935440,1044935455,BE
+1044935456,1044935663,GB
+1044935664,1044935671,BE
+1044935672,1044935759,GB
+1044935760,1044935775,BE
+1044935776,1044936115,GB
+1044936116,1044936119,BE
+1044936120,1044936487,GB
+1044936488,1044936495,BE
+1044936496,1044937247,GB
+1044937248,1044937255,BE
+1044937256,1044946943,GB
1044946944,1044955135,UA
1044955136,1044963327,NL
1044963328,1044971519,FI
1044971520,1044979711,FR
1044979712,1044987903,FI
1044987904,1045004287,BG
-1045004288,1045013231,GB
-1045013232,1045013247,IE
-1045013248,1045013455,GB
-1045013456,1045013471,IE
-1045013472,1045014488,GB
-1045014489,1045014494,ES
-1045014495,1045016832,GB
-1045016833,1045016862,ES
-1045016863,1045016880,GB
-1045016881,1045016886,ES
-1045016887,1045016888,GB
-1045016889,1045016894,ES
-1045016895,1045016895,GB
-1045016896,1045016959,ES
-1045016960,1045016960,GB
-1045016961,1045017022,ES
-1045017023,1045018143,GB
-1045018144,1045018151,AE
-1045018152,1045018207,GB
-1045018208,1045018231,FI
-1045018232,1045018367,GB
-1045018368,1045018399,ES
-1045018400,1045018423,GB
-1045018424,1045018559,ES
-1045018560,1045018623,GB
-1045018624,1045018783,ES
-1045018784,1045020255,GB
-1045020256,1045020527,ES
-1045020528,1045020543,GB
-1045020544,1045020639,ES
-1045020640,1045020655,GB
-1045020656,1045020671,ES
+1045004288,1045020671,GB
1045020672,1045037055,NO
-1045037056,1045118975,GR
-1045118976,1045119231,US
-1045119232,1045119743,AL
-1045119744,1045135359,GR
-1045135360,1045138659,DE
-1045138660,1045138660,CH
-1045138661,1045138661,DE
-1045138662,1045138662,IL
-1045138663,1045141759,DE
-1045141760,1045142015,PL
-1045142016,1045148613,DE
-1045148614,1045148614,US
-1045148615,1045148615,UA
-1045148616,1045148617,DE
-1045148618,1045148618,US
-1045148619,1045148619,DE
-1045148620,1045148620,US
-1045148621,1045148625,DE
-1045148626,1045148626,US
-1045148627,1045148637,DE
-1045148638,1045148638,US
-1045148639,1045148653,DE
-1045148654,1045148655,US
-1045148656,1045148669,DE
-1045148670,1045148670,US
-1045148671,1045149315,DE
-1045149316,1045149316,GR
-1045149317,1045149317,PL
-1045149318,1045149318,CZ
-1045149319,1045149319,DE
-1045149320,1045149320,GR
-1045149321,1045149333,DE
-1045149334,1045149335,PL
-1045149336,1045149341,DE
-1045149342,1045149342,RU
-1045149343,1045149343,BD
-1045149344,1045149344,PK
-1045149345,1045149345,US
-1045149346,1045149346,PL
-1045149347,1045149347,DE
-1045149348,1045149348,LT
-1045149349,1045149351,DE
-1045149352,1045149352,GB
-1045149353,1045149353,DE
-1045149354,1045149354,TR
-1045149355,1045149355,US
-1045149356,1045149358,DE
-1045149359,1045149359,LT
-1045149360,1045149361,DE
-1045149362,1045149362,UA
-1045149363,1045149364,DE
-1045149365,1045149365,CZ
-1045149366,1045149366,GR
-1045149367,1045149367,BD
-1045149368,1045149369,DE
-1045149370,1045149371,PK
-1045149372,1045149381,DE
-1045149382,1045149382,CZ
-1045149383,1045149383,NL
-1045149384,1045149386,DE
-1045149387,1045149387,CZ
-1045149388,1045149389,DE
-1045149390,1045149390,CZ
-1045149391,1045149392,DE
-1045149393,1045149394,LT
-1045149395,1045149396,CZ
-1045149397,1045149397,GR
-1045149398,1045149398,IR
-1045149399,1045149399,DE
-1045149400,1045149410,CZ
-1045149411,1045149413,DE
-1045149414,1045149419,CZ
-1045149420,1045154059,DE
-1045154060,1045154060,IL
-1045154061,1045154061,DE
-1045154062,1045154062,BR
-1045154063,1045154065,DE
-1045154066,1045154068,BR
-1045154069,1045154074,DE
-1045154075,1045154083,BR
-1045154084,1045154084,IL
-1045154085,1045154086,IN
-1045154087,1045154087,LT
-1045154088,1045154097,CH
-1045154098,1045154100,US
-1045154101,1045154104,CH
-1045154105,1045154106,UA
-1045154107,1045154108,IL
-1045154109,1045154109,NL
-1045154110,1045154110,IL
-1045154111,1045154115,DE
-1045154116,1045154116,US
-1045154117,1045154120,DE
-1045154121,1045154121,US
-1045154122,1045154123,DE
-1045154124,1045154124,US
-1045154125,1045154127,DE
-1045154128,1045154128,US
-1045154129,1045154129,DE
-1045154130,1045154130,US
-1045154131,1045154131,DE
-1045154132,1045154132,IN
-1045154133,1045154133,DE
-1045154134,1045154135,US
-1045154136,1045154140,DE
-1045154141,1045154142,US
-1045154143,1045154145,DE
-1045154146,1045154147,US
-1045154148,1045154148,DE
-1045154149,1045154149,CZ
-1045154150,1045154152,DE
-1045154153,1045154153,NO
-1045154154,1045154154,IN
-1045154155,1045154155,US
-1045154156,1045154158,IN
-1045154159,1045154159,DE
-1045154160,1045154160,US
-1045154161,1045154161,UA
-1045154162,1045154166,DE
-1045154167,1045154170,US
-1045154171,1045154171,DE
-1045154172,1045154174,US
-1045154175,1045154559,DE
-1045154560,1045154591,NL
-1045154592,1045154687,DE
-1045154688,1045154719,US
-1045154720,1045154751,RU
-1045154752,1045154783,SE
-1045154784,1045154815,BR
-1045154816,1045155071,DE
-1045155072,1045155327,CH
-1045155328,1045158148,DE
-1045158149,1045158149,US
-1045158150,1045158158,DE
-1045158159,1045158159,US
-1045158160,1045158161,DE
-1045158162,1045158162,US
-1045158163,1045158163,IL
-1045158164,1045158168,DE
-1045158169,1045158169,IL
-1045158170,1045158171,IE
-1045158172,1045158172,IL
-1045158173,1045158174,IE
-1045158175,1045158180,DE
-1045158181,1045158182,TR
-1045158183,1045158184,DE
-1045158185,1045158188,TR
-1045158189,1045158189,DE
-1045158190,1045158191,US
-1045158192,1045158192,DE
-1045158193,1045158193,US
-1045158194,1045158200,UA
-1045158201,1045158201,LV
-1045158202,1045158204,US
-1045158205,1045158275,DE
-1045158276,1045158276,SG
-1045158277,1045158277,US
-1045158278,1045158278,IL
-1045158279,1045158279,UA
-1045158280,1045158280,IL
-1045158281,1045158281,DE
-1045158282,1045158284,IL
-1045158285,1045158285,MA
-1045158286,1045158286,DE
-1045158287,1045158288,IN
-1045158289,1045158291,DE
-1045158292,1045158293,CH
-1045158294,1045158294,DE
-1045158295,1045158299,IL
-1045158300,1045158300,NL
-1045158301,1045158301,DE
-1045158302,1045158302,IN
-1045158303,1045158303,DE
-1045158304,1045158304,FI
-1045158305,1045158332,GB
-1045158333,1045158333,DE
-1045158334,1045158334,GB
-1045158335,1045159684,DE
-1045159685,1045159685,GR
-1045159686,1045159686,UA
-1045159687,1045159687,KR
-1045159688,1045159691,DE
-1045159692,1045159692,RU
-1045159693,1045159694,DE
-1045159695,1045159695,CH
-1045159696,1045159698,DE
-1045159699,1045159699,LK
-1045159700,1045159702,DE
-1045159703,1045159703,GT
-1045159704,1045159706,DE
-1045159707,1045159707,DK
-1045159708,1045159708,SG
-1045159709,1045159709,RU
-1045159710,1045159710,BR
-1045159711,1045159711,SG
-1045159712,1045159722,DE
-1045159723,1045159723,UA
-1045159724,1045159724,IT
-1045159725,1045159727,DE
-1045159728,1045159730,GR
-1045159731,1045159731,AT
-1045159732,1045159734,DE
-1045159735,1045159735,BR
-1045159736,1045159736,MD
-1045159737,1045159737,DE
-1045159738,1045159739,SA
-1045159740,1045159740,DE
-1045159741,1045159741,CZ
-1045159742,1045159747,DE
-1045159748,1045159748,IN
-1045159749,1045159752,DE
-1045159753,1045159753,IN
-1045159754,1045159754,US
-1045159755,1045159764,DE
-1045159765,1045159765,IN
-1045159766,1045159766,HK
-1045159767,1045159769,DE
-1045159770,1045159771,IN
-1045159772,1045159773,DE
-1045159774,1045159774,IN
-1045159775,1045159784,DE
-1045159785,1045159785,IN
-1045159786,1045159788,SG
-1045159789,1045159795,DE
-1045159796,1045159796,IN
-1045159797,1045159817,DE
-1045159818,1045159818,US
-1045159819,1045159820,DE
-1045159821,1045159822,US
-1045159823,1045159850,DE
-1045159851,1045159851,NO
-1045159852,1045159856,DE
-1045159857,1045159857,US
-1045159858,1045159859,DE
-1045159860,1045159865,US
-1045159866,1045159866,DE
-1045159867,1045159867,US
-1045159868,1045159876,DE
-1045159877,1045159877,US
-1045159878,1045159878,IN
-1045159879,1045159881,US
-1045159882,1045159883,DE
-1045159884,1045159884,US
-1045159885,1045159885,DE
-1045159886,1045159886,US
-1045159887,1045159887,DE
-1045159888,1045159888,US
-1045159889,1045159890,DE
-1045159891,1045159892,US
-1045159893,1045159893,FI
-1045159894,1045159897,US
-1045159898,1045159898,DE
-1045159899,1045159900,US
-1045159901,1045159901,DE
-1045159902,1045159902,US
-1045159903,1045159908,DE
-1045159909,1045159909,AT
-1045159910,1045159910,US
-1045159911,1045159911,TR
-1045159912,1045159914,US
-1045159915,1045159920,TR
-1045159921,1045159921,DE
-1045159922,1045159922,IN
-1045159923,1045159923,CA
-1045159924,1045159925,IN
-1045159926,1045159926,DE
-1045159927,1045159931,TR
-1045159932,1045159932,DE
-1045159933,1045159933,TR
-1045159934,1045160959,DE
-1045160960,1045160991,TR
-1045160992,1045161023,DE
-1045161024,1045161055,AT
-1045161056,1045161087,US
-1045161088,1045161119,DE
-1045161120,1045161151,NL
-1045161152,1045162143,DE
-1045162144,1045162144,HR
-1045162145,1045162165,DE
-1045162166,1045162166,LT
-1045162167,1045162167,BR
-1045162168,1045162171,DE
-1045162172,1045162172,TR
-1045162173,1045162173,MD
-1045162174,1045162687,DE
-1045162688,1045162688,PK
-1045162689,1045162689,CA
-1045162690,1045162700,DE
-1045162701,1045162703,CA
-1045162704,1045167876,DE
-1045167877,1045167877,TR
-1045167878,1045167878,DE
-1045167879,1045167879,TW
-1045167880,1045167880,DE
-1045167881,1045167881,PT
-1045167882,1045167882,DE
-1045167883,1045167883,AR
-1045167884,1045167884,BD
-1045167885,1045167886,DE
-1045167887,1045167887,TR
-1045167888,1045167895,DE
-1045167896,1045167896,RU
-1045167897,1045167897,PT
-1045167898,1045167901,DE
-1045167902,1045167902,HR
-1045167903,1045167903,RU
-1045167904,1045167904,US
-1045167905,1045167907,PK
-1045167908,1045167908,DE
-1045167909,1045167909,IT
-1045167910,1045167911,DE
-1045167912,1045167917,TR
-1045167918,1045167918,DE
-1045167919,1045167922,UA
-1045167923,1045167923,DE
-1045167924,1045167924,TW
-1045167925,1045167925,TR
-1045167926,1045167933,DE
-1045167934,1045167934,MD
-1045167935,1045168003,DE
-1045168004,1045168004,US
-1045168005,1045168011,DE
-1045168012,1045168013,US
-1045168014,1045168014,DE
-1045168015,1045168021,US
-1045168022,1045168024,DE
-1045168025,1045168045,US
-1045168046,1045168046,DE
-1045168047,1045168052,US
-1045168053,1045168054,RU
-1045168055,1045168055,US
-1045168056,1045168057,DE
-1045168058,1045168058,SG
-1045168059,1045168059,CZ
-1045168060,1045168074,DE
-1045168075,1045168075,IL
-1045168076,1045168076,IN
-1045168077,1045168077,DE
-1045168078,1045168079,IN
-1045168080,1045168080,DE
-1045168081,1045168086,IN
-1045168087,1045168087,DE
-1045168088,1045168099,IN
-1045168100,1045168116,DE
-1045168117,1045168117,LT
-1045168118,1045168123,DE
-1045168124,1045168124,US
-1045168125,1045168125,DE
-1045168126,1045168126,TR
-1045168127,1045168127,DE
+1045037056,1045135359,GR
+1045135360,1045152603,DE
+1045152604,1045152606,SG
+1045152607,1045154629,DE
+1045154630,1045154630,SG
+1045154631,1045159711,DE
+1045159712,1045159712,EG
+1045159713,1045168127,DE
1045168128,1045233663,RU
1045233664,1045241855,GB
1045241856,1045250047,IT
@@ -23831,49 +8701,19 @@
1045266432,1045274623,HU
1045274624,1045282815,IE
1045282816,1045299199,HU
-1045299200,1045302271,GB
-1045302272,1045303295,EU
-1045303296,1045305855,DE
-1045305856,1045307391,EU
+1045299200,1045307391,US
1045307392,1045315583,RU
1045315584,1045319679,DE
1045319680,1045323775,RU
1045323776,1045364735,FI
1045364736,1045430271,DK
-1045430272,1045436911,DE
-1045436912,1045436919,GB
-1045436920,1045446655,DE
-1045446656,1045446911,HU
-1045446912,1045447167,SK
-1045447168,1045447231,HU
-1045447232,1045447295,SK
-1045447296,1045447311,HU
-1045447312,1045447519,SK
-1045447520,1045447551,HU
-1045447552,1045448255,SK
-1045448256,1045448263,HU
-1045448264,1045448703,SK
-1045448704,1045448767,HU
-1045448768,1045450751,SK
-1045450752,1045451263,CZ
-1045451264,1045451775,SK
-1045451776,1045452079,CZ
-1045452080,1045452159,SK
-1045452160,1045452287,CZ
-1045452288,1045452799,SK
-1045452800,1045453055,CZ
-1045453056,1045454847,SK
+1045430272,1045446655,DE
+1045446656,1045454847,SK
1045454848,1045460991,DE
1045460992,1045461503,FR
1045461504,1045461631,DE
1045461632,1045461695,FR
-1045461696,1045461703,DE
-1045461704,1045461711,GB
-1045461712,1045461719,FR
-1045461720,1045461727,IT
-1045461728,1045461735,ES
-1045461736,1045461743,NL
-1045461744,1045463039,DE
+1045461696,1045463039,DE
1045463040,1045471231,FI
1045471232,1045479423,UA
1045479424,1045487615,SE
@@ -23884,72 +8724,9 @@
1045708800,1045716991,LB
1045716992,1045725183,RU
1045725184,1045733375,CZ
-1045733376,1045741567,GB
-1045741568,1045741823,SE
-1045741824,1045741831,GB
-1045741832,1045741839,BE
-1045741840,1045741855,GB
-1045741856,1045741895,SE
-1045741896,1045742039,GB
-1045742040,1045742047,SE
-1045742048,1045742111,GB
-1045742112,1045742115,SE
-1045742116,1045742175,GB
-1045742176,1045742191,SE
-1045742192,1045742335,GB
-1045742336,1045742623,SE
-1045742624,1045742751,GB
-1045742752,1045742759,SE
-1045742760,1045742847,GB
-1045742848,1045742983,SE
-1045742984,1045742991,GB
-1045742992,1045743007,SE
-1045743008,1045743015,FI
-1045743016,1045743031,GB
-1045743032,1045743039,SE
-1045743040,1045743047,GB
-1045743048,1045743231,SE
-1045743232,1045743251,GB
-1045743252,1045743263,SE
-1045743264,1045743299,GB
-1045743300,1045743623,SE
-1045743624,1045743871,GB
-1045743872,1045744263,SE
-1045744264,1045744383,GB
-1045744384,1045744647,SE
-1045744648,1045744671,BE
-1045744672,1045745407,GB
-1045745408,1045745695,SE
-1045745696,1045745759,GB
-1045745760,1045745768,SE
-1045745769,1045745791,GB
-1045745792,1045745855,SE
-1045745856,1045745919,GB
-1045745920,1045745951,SE
-1045745952,1045746175,GB
-1045746176,1045746431,SE
-1045746432,1045746495,GB
-1045746496,1045746527,SE
-1045746528,1045746671,GB
-1045746672,1045747071,SE
-1045747072,1045747199,GB
-1045747200,1045747463,SE
-1045747464,1045747759,GB
-1045747760,1045747775,SE
-1045747776,1045747839,GB
-1045747840,1045747855,SE
-1045747856,1045747919,GB
-1045747920,1045747935,SE
-1045747936,1045747967,GB
-1045747968,1045748223,SE
-1045748224,1045748319,GB
+1045733376,1045748319,GB
1045748320,1045748351,SE
-1045748352,1045748463,GB
-1045748464,1045748471,SE
-1045748472,1045748479,GB
-1045748480,1045748735,SE
-1045748736,1045749503,GB
-1045749504,1045749759,SE
+1045748352,1045749759,GB
1045749760,1045753855,SI
1045753856,1045755903,NL
1045755904,1045757951,UA
@@ -23966,479 +8743,125 @@
1046052864,1046061055,GB
1046061056,1046069247,DE
1046069248,1046085631,RU
-1046085632,1046150143,IL
-1046150144,1046150609,LR
+1046085632,1046150353,IL
+1046150354,1046150609,LR
1046150610,1046151167,IL
1046151168,1046216703,DE
1046216704,1046225647,NO
1046225648,1046225655,SE
1046225656,1046282239,NO
-1046282240,1046283007,DE
-1046283008,1046283135,BZ
-1046283136,1046283167,DE
-1046283168,1046283199,US
-1046283200,1046283247,DE
-1046283248,1046283255,US
-1046283256,1046283263,DE
-1046283264,1046283327,LU
-1046283328,1046285055,DE
-1046285056,1046285119,HR
-1046285120,1046285183,MT
-1046285184,1046285247,BZ
-1046285248,1046285311,BA
-1046285312,1046286367,DE
-1046286368,1046286399,US
-1046286400,1046286527,DE
-1046286528,1046286591,US
-1046286592,1046286663,DE
-1046286664,1046286671,BZ
-1046286672,1046286783,DE
-1046286784,1046286847,US
-1046286848,1046286935,DE
-1046286936,1046286943,ES
-1046286944,1046287039,DE
-1046287040,1046287103,US
-1046287104,1046287111,DE
-1046287112,1046287119,US
-1046287120,1046287135,DE
-1046287136,1046287167,US
-1046287168,1046287295,DE
-1046287296,1046287359,US
-1046287360,1046288383,DE
-1046288384,1046288511,CZ
-1046288512,1046288543,US
-1046288544,1046288655,CZ
-1046288656,1046288671,DE
-1046288672,1046288703,US
-1046288704,1046288767,DE
-1046288768,1046288775,AG
-1046288776,1046288895,DE
-1046288896,1046290431,AG
+1046282240,1046289407,DE
+1046289408,1046290431,AG
1046290432,1046298623,PL
-1046298624,1046299903,AT
-1046299904,1046300159,MK
-1046300160,1046300799,AT
-1046300800,1046300927,MK
-1046300928,1046302143,AT
-1046302144,1046302207,MK
-1046302208,1046305279,AT
-1046305280,1046305407,MK
-1046305408,1046305535,AT
-1046305536,1046305663,MK
-1046305664,1046305791,AT
-1046305792,1046306815,MK
-1046306816,1046308927,AT
-1046308928,1046309375,MK
-1046309376,1046309887,AT
-1046309888,1046310143,MK
-1046310144,1046310399,AT
-1046310400,1046311935,MK
-1046311936,1046315007,AT
-1046315008,1046315519,FR
-1046315520,1046316031,IT
-1046316032,1046316543,FR
-1046316544,1046317055,DK
-1046317056,1046317567,ES
-1046317568,1046318335,NL
-1046318336,1046318591,GB
-1046318592,1046323199,NL
-1046323200,1046327151,ES
-1046327152,1046327155,FR
-1046327156,1046331391,ES
-1046331392,1046331519,DE
-1046331520,1046331647,EU
-1046331648,1046331679,DE
-1046331680,1046331743,EU
-1046331744,1046331775,DE
-1046331776,1046331839,EU
-1046331840,1046331871,DE
-1046331872,1046332159,EU
-1046332160,1046332415,FR
-1046332416,1046332447,DE
-1046332448,1046333439,EU
-1046333440,1046333695,DE
-1046333696,1046334719,EU
-1046334720,1046334975,DE
-1046334976,1046336511,EU
-1046336512,1046337023,DE
-1046337024,1046337535,EU
-1046337536,1046338047,DE
-1046338048,1046339839,EU
-1046339840,1046340095,FR
-1046340096,1046343423,EU
-1046343424,1046343679,NL
-1046343680,1046344959,EU
-1046344960,1046345215,DE
-1046345216,1046345327,EU
-1046345328,1046345727,DE
-1046345728,1046346111,EU
-1046346112,1046346239,DE
-1046346240,1046346303,EU
-1046346304,1046346367,DE
-1046346368,1046346511,EU
-1046346512,1046346559,DE
-1046346560,1046347775,EU
-1046347776,1046349839,IT
-1046349840,1046349847,FR
-1046349848,1046352831,IT
-1046352832,1046352847,SM
-1046352848,1046366807,IT
-1046366808,1046366815,PL
-1046366816,1046385103,IT
-1046385104,1046385111,A2
-1046385112,1046391807,IT
-1046391808,1046392319,US
-1046392320,1046413311,IT
+1046298624,1046315007,AT
+1046315008,1046316031,FR
+1046316032,1046319103,GB
+1046319104,1046320127,NL
+1046320128,1046321151,GB
+1046321152,1046323199,NL
+1046323200,1046331391,ES
+1046347776,1046413311,IT
1046413312,1046446079,SE
-1046446080,1046479535,DE
-1046479536,1046479551,GB
-1046479552,1046479583,DE
-1046479584,1046479615,GB
-1046479616,1046479687,DE
-1046479688,1046479695,GB
-1046479696,1046480047,DE
-1046480048,1046480055,GB
-1046480056,1046480063,DE
-1046480064,1046480095,GB
-1046480096,1046480383,DE
-1046480384,1046480384,GB
-1046480385,1046480471,DE
-1046480472,1046480479,GB
-1046480480,1046480719,DE
-1046480720,1046480767,GB
-1046480768,1046481535,DE
-1046481536,1046481919,GB
-1046481920,1046481959,DE
-1046481960,1046481967,GB
-1046481968,1046482751,DE
-1046482752,1046482943,GB
-1046482944,1046483231,DE
-1046483232,1046483471,GB
-1046483472,1046483583,DE
-1046483584,1046483967,GB
-1046483968,1046484255,DE
-1046484256,1046484287,GB
-1046484288,1046484351,DE
-1046484352,1046484479,GB
+1046446080,1046478879,DE
+1046478880,1046479839,GB
+1046479840,1046479871,DE
+1046479872,1046480511,GB
+1046480512,1046480543,DE
+1046480544,1046481919,GB
+1046481920,1046481927,DE
+1046481928,1046483199,GB
+1046483200,1046483231,DE
+1046483232,1046484479,GB
1046484480,1046484511,DE
-1046484512,1046484607,GB
-1046484608,1046484623,DE
-1046484624,1046484991,GB
-1046484992,1046485023,DE
-1046485024,1046485031,GB
-1046485032,1046485127,DE
-1046485128,1046485135,GB
-1046485136,1046485159,DE
-1046485160,1046485167,GB
-1046485168,1046486287,DE
-1046486288,1046486295,GB
-1046486296,1046486375,DE
-1046486376,1046486383,GB
-1046486384,1046491223,DE
-1046491224,1046491231,GB
-1046491232,1046491391,DE
-1046491392,1046491399,GB
-1046491400,1046491423,DE
-1046491424,1046491431,GB
-1046491432,1046491743,DE
-1046491744,1046491775,GB
-1046491776,1046491839,DE
-1046491840,1046492159,GB
-1046492160,1046492415,DE
-1046492416,1046492447,GB
-1046492448,1046492503,DE
-1046492504,1046492511,GB
-1046492512,1046492543,DE
-1046492544,1046492551,GB
-1046492552,1046492655,DE
-1046492656,1046492663,GB
-1046492664,1046492927,DE
-1046492928,1046492967,GB
-1046492968,1046493071,DE
-1046493072,1046493087,GB
-1046493088,1046493095,DE
-1046493096,1046493103,GB
-1046493104,1046493391,DE
-1046493392,1046493399,GB
-1046493400,1046493407,DE
-1046493408,1046493471,GB
-1046493472,1046493487,DE
-1046493488,1046493511,GB
-1046493512,1046493519,DE
-1046493520,1046493535,GB
-1046493536,1046493551,DE
-1046493552,1046493575,GB
-1046493576,1046493583,DE
-1046493584,1046493591,GB
-1046493592,1046493599,DE
-1046493600,1046493631,GB
-1046493632,1046493639,DE
-1046493640,1046493695,GB
-1046493696,1046493951,DE
-1046493952,1046493983,GB
-1046493984,1046494007,DE
-1046494008,1046494015,GB
-1046494016,1046494031,DE
-1046494032,1046494039,GB
-1046494040,1046494087,DE
-1046494088,1046494095,GB
-1046494096,1046494303,DE
-1046494304,1046494311,GB
-1046494312,1046494327,DE
-1046494328,1046494335,GB
-1046494336,1046494607,DE
-1046494608,1046494615,GB
-1046494616,1046494623,DE
-1046494624,1046494719,GB
-1046494720,1046495351,DE
-1046495352,1046495359,GB
-1046495360,1046495407,DE
-1046495408,1046495415,GB
-1046495416,1046495439,DE
-1046495440,1046495447,GB
-1046495448,1046495487,DE
-1046495488,1046495519,GB
-1046495520,1046495527,DE
-1046495528,1046495535,GB
-1046495536,1046495543,DE
-1046495544,1046495551,GB
-1046495552,1046495567,DE
-1046495568,1046495575,GB
-1046495576,1046495599,DE
-1046495600,1046495607,GB
-1046495608,1046495631,DE
-1046495632,1046495639,GB
-1046495640,1046495647,DE
-1046495648,1046495663,GB
-1046495664,1046495703,DE
-1046495704,1046495719,GB
-1046495720,1046495879,DE
-1046495880,1046495895,GB
-1046495896,1046495999,DE
-1046496000,1046496047,GB
-1046496048,1046496127,DE
-1046496128,1046496135,GB
-1046496136,1046496191,DE
-1046496192,1046496215,GB
-1046496216,1046496231,DE
-1046496232,1046496239,GB
-1046496240,1046496303,DE
-1046496304,1046496511,GB
-1046496512,1046497463,DE
-1046497464,1046497471,GB
-1046497472,1046497479,DE
-1046497480,1046497567,GB
-1046497568,1046497639,DE
-1046497640,1046497647,GB
-1046497648,1046497663,DE
-1046497664,1046497671,GB
-1046497672,1046497719,DE
-1046497720,1046497727,GB
-1046497728,1046497759,DE
-1046497760,1046497775,GB
-1046497776,1046497975,DE
-1046497976,1046497983,GB
-1046497984,1046498047,DE
-1046498048,1046498079,GB
-1046498080,1046498103,DE
-1046498104,1046498111,GB
-1046498112,1046498159,DE
-1046498160,1046498167,GB
-1046498168,1046498207,DE
-1046498208,1046498215,GB
-1046498216,1046498239,DE
-1046498240,1046498255,GB
-1046498256,1046498263,DE
-1046498264,1046498271,GB
-1046498272,1046498279,DE
-1046498280,1046498295,GB
-1046498296,1046498359,DE
-1046498360,1046498367,GB
-1046498368,1046498455,DE
-1046498456,1046498591,GB
-1046498592,1046498631,DE
-1046498632,1046498639,GB
-1046498640,1046498655,DE
-1046498656,1046498663,GB
-1046498664,1046498679,DE
-1046498680,1046498687,GB
-1046498688,1046498719,DE
-1046498720,1046498727,GB
-1046498728,1046498819,DE
-1046498820,1046499327,GB
-1046499328,1046502655,DE
-1046502656,1046502719,GB
-1046502720,1046502863,DE
-1046502864,1046502911,GB
-1046502912,1046504415,DE
-1046504416,1046504447,GB
-1046504448,1046507519,DE
-1046507520,1046507535,GB
-1046507536,1046507615,DE
-1046507616,1046507631,GB
-1046507632,1046507647,DE
-1046507648,1046507695,GB
-1046507696,1046507807,DE
-1046507808,1046507823,IT
-1046507824,1046507951,DE
-1046507952,1046507983,FR
-1046507984,1046507999,IT
-1046508000,1046508015,DE
-1046508016,1046508031,GB
-1046508032,1046508079,DE
-1046508080,1046508111,PT
-1046508112,1046508127,DE
-1046508128,1046508159,ES
-1046508160,1046508223,DE
-1046508224,1046508287,GB
-1046508288,1046508303,DE
-1046508304,1046508319,GB
-1046508320,1046508471,DE
-1046508472,1046508479,FR
-1046508480,1046508495,DE
-1046508496,1046508527,GB
-1046508528,1046508543,FR
-1046508544,1046508559,ES
-1046508560,1046508583,GB
-1046508584,1046508591,DE
-1046508592,1046508607,ES
-1046508608,1046508623,FR
-1046508624,1046511615,GB
-1046511616,1046516287,DE
-1046516288,1046516735,GB
-1046516736,1046516751,DE
-1046516752,1046516991,GB
-1046516992,1046517031,DE
-1046517032,1046517039,GB
-1046517040,1046517087,DE
-1046517088,1046517759,GB
-1046517760,1046518271,DE
-1046518272,1046518783,GB
-1046518784,1046519039,DE
-1046519040,1046519167,GB
-1046519168,1046519607,DE
-1046519608,1046519623,GB
-1046519624,1046519799,DE
-1046519800,1046524159,GB
-1046524160,1046525183,DE
-1046525184,1046525215,GB
-1046525216,1046525247,DE
-1046525248,1046525311,GB
-1046525312,1046525343,DE
-1046525344,1046525439,GB
-1046525440,1046525695,DE
-1046525696,1046526591,GB
-1046526592,1046526599,DE
-1046526600,1046526631,GB
-1046526632,1046526635,DE
-1046526636,1046526719,GB
-1046526720,1046527487,DE
-1046527488,1046527743,GB
-1046527744,1046527999,DE
-1046528000,1046528255,GB
-1046528256,1046528287,DE
-1046528288,1046528319,GB
-1046528320,1046528335,DE
-1046528336,1046528391,GB
-1046528392,1046528399,DE
-1046528400,1046528459,GB
-1046528460,1046528463,DE
-1046528464,1046528471,GB
-1046528472,1046528479,DE
-1046528480,1046528487,GB
-1046528488,1046528495,DE
-1046528496,1046528519,GB
-1046528520,1046528527,DE
-1046528528,1046528543,GB
-1046528544,1046528559,DE
-1046528560,1046528575,GB
-1046528576,1046528587,DE
-1046528588,1046528599,GB
-1046528600,1046528603,DE
-1046528604,1046528607,GB
-1046528608,1046528639,DE
-1046528640,1046528703,GB
-1046528704,1046528767,DE
-1046528768,1046530047,GB
-1046530048,1046531327,DE
-1046531328,1046531839,GB
+1046484512,1046485303,GB
+1046485304,1046485311,DE
+1046485312,1046485903,GB
+1046485904,1046485911,DE
+1046485912,1046487289,GB
+1046487290,1046487290,DE
+1046487291,1046487551,GB
+1046487552,1046487807,DE
+1046487808,1046488319,GB
+1046488320,1046488575,DE
+1046488576,1046489087,GB
+1046489088,1046489119,DE
+1046489120,1046489391,GB
+1046489392,1046489407,IT
+1046489408,1046489471,GB
+1046489472,1046489487,ES
+1046489488,1046489503,GB
+1046489504,1046489519,DE
+1046489520,1046492471,GB
+1046492472,1046492479,DE
+1046492480,1046492719,GB
+1046492720,1046492727,DE
+1046492728,1046493015,GB
+1046493016,1046493023,DE
+1046493024,1046493039,GB
+1046493040,1046493047,DE
+1046493048,1046493063,GB
+1046493064,1046493071,DE
+1046493072,1046493983,GB
+1046493984,1046493999,DE
+1046494000,1046494191,GB
+1046494192,1046494199,DE
+1046494200,1046495127,GB
+1046495128,1046495135,DE
+1046495136,1046495415,GB
+1046495416,1046495423,DE
+1046495424,1046495607,GB
+1046495608,1046495615,DE
+1046495616,1046495719,GB
+1046495720,1046495727,DE
+1046495728,1046495767,GB
+1046495768,1046495775,DE
+1046495776,1046495911,GB
+1046495912,1046495919,DE
+1046495920,1046495983,GB
+1046495984,1046495991,DE
+1046495992,1046497807,GB
+1046497808,1046497815,DE
+1046497816,1046498135,GB
+1046498136,1046498143,DE
+1046498144,1046498215,GB
+1046498216,1046498223,DE
+1046498224,1046498303,GB
+1046498304,1046498319,DE
+1046498320,1046498687,GB
+1046498688,1046498695,DE
+1046498696,1046498799,GB
+1046498800,1046498807,DE
+1046498808,1046503095,GB
+1046503096,1046503103,DE
+1046503104,1046504447,GB
+1046504448,1046508543,DE
+1046508544,1046511615,GB
+1046511616,1046515711,DE
+1046515712,1046519615,GB
+1046519616,1046519623,AT
+1046519624,1046525183,GB
+1046525184,1046525695,DE
+1046525696,1046529023,GB
+1046529024,1046530047,DE
+1046530048,1046531839,GB
1046531840,1046532095,DE
-1046532096,1046534015,GB
-1046534016,1046534047,DE
-1046534048,1046534655,GB
-1046534656,1046534743,DE
-1046534744,1046534847,GB
-1046534848,1046534895,DE
-1046534896,1046534911,GB
-1046534912,1046535311,DE
-1046535312,1046535359,GB
-1046535360,1046535423,DE
-1046535424,1046535487,GB
-1046535488,1046535551,DE
-1046535552,1046535619,GB
-1046535620,1046535623,DE
-1046535624,1046536023,GB
-1046536024,1046536039,DE
-1046536040,1046536063,GB
-1046536064,1046536151,DE
-1046536152,1046536159,GB
-1046536160,1046536167,DE
-1046536168,1046536191,GB
-1046536192,1046536199,DE
-1046536200,1046536211,GB
-1046536212,1046536215,DE
-1046536216,1046536255,GB
-1046536256,1046536271,DE
-1046536272,1046536279,GB
-1046536280,1046536283,DE
-1046536284,1046536287,GB
-1046536288,1046536295,DE
-1046536296,1046536319,GB
-1046536320,1046536351,DE
-1046536352,1046536663,GB
-1046536664,1046536667,DE
-1046536668,1046536959,GB
-1046536960,1046537023,DE
-1046537024,1046537055,GB
-1046537056,1046537071,DE
-1046537072,1046537087,GB
-1046537088,1046537151,DE
-1046537152,1046537215,GB
-1046537216,1046537727,DE
-1046537728,1046537983,GB
-1046537984,1046538239,DE
-1046538240,1046538431,GB
-1046538432,1046538447,DE
-1046538448,1046538463,GB
-1046538464,1046538495,DE
-1046538496,1046538751,GB
-1046538752,1046539775,DE
-1046539776,1046540031,GB
-1046540032,1046540287,DE
-1046540288,1046540543,GB
-1046540544,1046541567,DE
-1046541568,1046541631,GB
-1046541632,1046541695,DE
-1046541696,1046541727,GB
-1046541728,1046541759,DE
-1046541760,1046541767,GB
-1046541768,1046541775,DE
-1046541776,1046541807,GB
-1046541808,1046543103,DE
-1046543104,1046543263,GB
-1046543264,1046543295,DE
-1046543296,1046543327,GB
-1046543328,1046543343,DE
-1046543344,1046543359,GB
-1046543360,1046543615,DE
-1046543616,1046544127,GB
-1046544128,1046544383,DE
+1046532096,1046533375,GB
+1046533376,1046533383,DE
+1046533384,1046535295,GB
+1046535296,1046535311,DE
+1046535312,1046535439,GB
+1046535440,1046535447,DE
+1046535448,1046537023,GB
+1046537024,1046537039,DE
+1046537040,1046538751,GB
+1046538752,1046539007,DE
+1046539008,1046543209,GB
+1046543210,1046543210,DE
+1046543211,1046543343,GB
+1046543344,1046543359,DE
+1046543360,1046544383,GB
1046544384,1046560767,IT
-1046560768,1046561327,ES
-1046561328,1046561335,IT
-1046561336,1046570591,ES
-1046570592,1046570607,CH
-1046570608,1046585343,ES
+1046560768,1046585343,ES
1046585344,1046609919,NO
1046609920,1046675455,IT
1046675456,1046708223,ES
@@ -24447,9 +8870,7 @@
1046757376,1046765567,IT
1046765568,1046773759,ES
1046773760,1046781951,FR
-1046781952,1046790143,GB
-1046790144,1046791167,US
-1046791168,1046798335,GB
+1046781952,1046798335,GB
1046798336,1046806527,HU
1046806528,1046814719,IT
1046814720,1046822911,SE
@@ -24457,97 +8878,7 @@
1046839296,1046847487,BA
1046847488,1046855679,ES
1046855680,1046872063,NO
-1046872064,1046872583,BE
-1046872584,1046872607,EU
-1046872608,1046872615,BE
-1046872616,1046872975,EU
-1046872976,1046872999,BE
-1046873000,1046873087,EU
-1046873088,1046873279,BE
-1046873280,1046873599,EU
-1046873600,1046878463,BE
-1046878464,1046879255,EU
-1046879256,1046879263,BE
-1046879264,1046879271,EU
-1046879272,1046879311,BE
-1046879312,1046879327,EU
-1046879328,1046879495,BE
-1046879496,1046879503,EU
-1046879504,1046879511,BE
-1046879512,1046879543,EU
-1046879544,1046879551,BE
-1046879552,1046879591,EU
-1046879592,1046879623,BE
-1046879624,1046879647,EU
-1046879648,1046879655,BE
-1046879656,1046879687,EU
-1046879688,1046879695,BE
-1046879696,1046879719,EU
-1046879720,1046879735,BE
-1046879736,1046879775,EU
-1046879776,1046879791,BE
-1046879792,1046879807,EU
-1046879808,1046879831,BE
-1046879832,1046879839,EU
-1046879840,1046879847,BE
-1046879848,1046879895,EU
-1046879896,1046879911,BE
-1046879912,1046879943,EU
-1046879944,1046879959,BE
-1046879960,1046879967,EU
-1046879968,1046880127,BE
-1046880128,1046880135,EU
-1046880136,1046880143,BE
-1046880144,1046880151,EU
-1046880152,1046880191,BE
-1046880192,1046880255,EU
-1046880256,1046880511,BE
-1046880512,1046880519,EU
-1046880520,1046880527,BE
-1046880528,1046880559,EU
-1046880560,1046880567,RO
-1046880568,1046880591,EU
-1046880592,1046880615,BE
-1046880616,1046880639,EU
-1046880640,1046880671,BE
-1046880672,1046880735,EU
-1046880736,1046880759,BE
-1046880760,1046880767,EU
-1046880768,1046880895,DE
-1046880896,1046880903,EU
-1046880904,1046880911,BE
-1046880912,1046880919,EU
-1046880920,1046880935,BE
-1046880936,1046880983,EU
-1046880984,1046881039,BE
-1046881040,1046881055,EU
-1046881056,1046881071,BE
-1046881072,1046881079,EU
-1046881080,1046881087,BE
-1046881088,1046881111,EU
-1046881112,1046881127,BE
-1046881128,1046881135,EU
-1046881136,1046881239,BE
-1046881240,1046881279,EU
-1046881280,1046882047,BE
-1046882048,1046882303,EU
-1046882304,1046884383,BE
-1046884384,1046885375,EU
-1046885376,1046887423,BE
-1046887424,1046887679,EU
-1046887680,1046888447,BE
-1046888448,1046895359,GB
-1046895360,1046896383,EU
-1046896384,1046897663,GB
-1046897664,1046898431,BE
-1046898432,1046898687,EU
-1046898688,1046898943,BE
-1046898944,1046899135,EU
-1046899136,1046899139,BE
-1046899140,1046899167,EU
-1046899168,1046904831,BE
-1046904832,1046906879,SK
-1046906880,1046908927,IR
+1046904832,1046908927,IR
1046908928,1046910975,SE
1046910976,1046913023,IT
1046913024,1046921215,NO
@@ -24566,36 +8897,17 @@
1047166976,1047199743,FR
1047199744,1047265279,DK
1047265280,1047273471,NL
-1047273472,1047277567,DE
-1047277568,1047281663,CZ
+1047273472,1047281663,DE
1047281664,1047289855,TR
-1047289856,1047295351,RS
-1047295352,1047295359,HU
-1047295360,1047298047,RS
-1047298048,1047300095,CH
-1047300096,1047300639,GB
-1047300640,1047302143,CH
-1047302144,1047302159,US
-1047302160,1047302175,GB
-1047302176,1047302191,AU
-1047302192,1047306239,CH
+1047289856,1047298047,RS
+1047298048,1047306239,CH
1047306240,1047314431,PL
1047314432,1047322623,SE
1047322624,1047330815,IT
1047330816,1047339007,RU
-1047339008,1047340279,SE
-1047340280,1047340287,DK
-1047340288,1047340431,SE
-1047340432,1047340439,NO
-1047340440,1047340799,SE
-1047340800,1047341055,NO
-1047341056,1047343871,SE
-1047343872,1047344127,NO
-1047344128,1047346351,SE
-1047346352,1047346359,FI
-1047346360,1047346431,SE
-1047346432,1047346687,FI
-1047346688,1047347199,SE
+1047339008,1047346175,SE
+1047346176,1047346431,FI
+1047346432,1047347199,SE
1047347200,1047363583,DE
1047363584,1047371775,CZ
1047371776,1047373559,RU
@@ -24608,232 +8920,28 @@
1047527424,1047535615,BE
1047535616,1047551999,DE
1047552000,1047560191,RU
-1047560192,1047561151,DE
-1047561152,1047561159,AT
-1047561160,1047561887,DE
-1047561888,1047561891,US
-1047561892,1047563071,DE
-1047563072,1047563135,ES
-1047563136,1047563287,DE
-1047563288,1047563295,CH
-1047563296,1047563303,DE
-1047563304,1047563311,CH
-1047563312,1047563319,DE
-1047563320,1047563323,CH
-1047563324,1047563351,DE
-1047563352,1047563355,CH
-1047563356,1047563363,DE
-1047563364,1047563367,ES
-1047563368,1047563407,DE
-1047563408,1047563411,CH
-1047563412,1047563415,DE
-1047563416,1047563419,BE
-1047563420,1047563431,DE
-1047563432,1047563435,CH
-1047563436,1047563455,DE
-1047563456,1047563463,ES
-1047563464,1047563467,DE
-1047563468,1047563471,CH
-1047563472,1047563555,DE
-1047563556,1047563559,CH
-1047563560,1047565107,DE
-1047565108,1047565111,IT
-1047565112,1047565131,DE
-1047565132,1047565135,GB
-1047565136,1047565279,DE
-1047565280,1047565311,CH
-1047565312,1047565343,DE
-1047565344,1047565359,CH
-1047565360,1047565503,DE
-1047565504,1047565507,CZ
-1047565508,1047565839,DE
-1047565840,1047565887,CH
-1047565888,1047566015,DE
-1047566016,1047566079,CZ
-1047566080,1047566403,DE
-1047566404,1047566415,CH
-1047566416,1047566435,DE
-1047566436,1047566439,CH
-1047566440,1047566451,DE
-1047566452,1047566459,CH
-1047566460,1047566475,DE
-1047566476,1047566479,CH
-1047566480,1047566495,DE
-1047566496,1047566499,CH
-1047566500,1047566519,DE
-1047566520,1047566539,CH
-1047566540,1047566543,DE
-1047566544,1047566547,CH
-1047566548,1047566559,DE
-1047566560,1047566563,CH
-1047566564,1047566871,DE
-1047566872,1047566879,CH
-1047566880,1047566891,DE
-1047566892,1047566903,CH
-1047566904,1047566947,DE
-1047566948,1047566951,AT
-1047566952,1047566963,DE
-1047566964,1047566967,AT
-1047566968,1047566971,CH
-1047566972,1047567015,DE
-1047567016,1047567019,CH
-1047567020,1047567027,DE
-1047567028,1047567031,CH
-1047567032,1047567039,DE
-1047567040,1047567043,AT
-1047567044,1047567047,CH
-1047567048,1047567063,DE
-1047567064,1047567067,CH
-1047567068,1047567071,DE
-1047567072,1047567075,NL
-1047567076,1047567079,DE
-1047567080,1047567083,NL
-1047567084,1047567135,DE
-1047567136,1047567143,GB
-1047567144,1047567147,CH
-1047567148,1047567151,BE
-1047567152,1047567159,CH
-1047567160,1047567163,DE
-1047567164,1047567167,AT
-1047567168,1047567175,CH
-1047567176,1047567211,DE
-1047567212,1047567227,CH
-1047567228,1047567239,DE
-1047567240,1047567243,CH
-1047567244,1047567247,DE
-1047567248,1047567255,CH
-1047567256,1047567283,DE
-1047567284,1047567287,CH
-1047567288,1047567307,DE
-1047567308,1047567311,CH
-1047567312,1047567319,DE
-1047567320,1047567327,CH
-1047567328,1047567343,DE
-1047567344,1047567351,AT
-1047567352,1047567359,DE
-1047567360,1047567375,CH
-1047567376,1047567447,DE
-1047567448,1047567451,CH
-1047567452,1047567463,DE
-1047567464,1047567471,CH
-1047567472,1047567475,DE
-1047567476,1047567483,CH
-1047567484,1047567495,DE
-1047567496,1047567499,CH
-1047567500,1047567535,DE
-1047567536,1047567539,CH
-1047567540,1047567551,DE
-1047567552,1047567555,CH
-1047567556,1047567583,DE
-1047567584,1047567615,CZ
-1047567616,1047567655,DE
-1047567656,1047567659,CH
-1047567660,1047567727,DE
-1047567728,1047567731,BE
-1047567732,1047567735,DE
-1047567736,1047567743,CH
-1047567744,1047567751,DE
-1047567752,1047567755,LU
-1047567756,1047567759,CH
-1047567760,1047567775,DE
-1047567776,1047567807,CH
-1047567808,1047567823,DE
-1047567824,1047567839,CH
-1047567840,1047567847,DE
-1047567848,1047567851,CH
-1047567852,1047567855,BE
-1047567856,1047567871,DE
-1047567872,1047567875,CH
-1047567876,1047567879,AT
-1047567880,1047567883,CH
-1047567884,1047567903,DE
-1047567904,1047567939,CH
-1047567940,1047567983,DE
-1047567984,1047567999,ES
-1047568000,1047568047,DE
-1047568048,1047568051,CH
-1047568052,1047568055,DE
-1047568056,1047568059,CH
-1047568060,1047568187,DE
-1047568188,1047568191,CH
-1047568192,1047568215,DE
-1047568216,1047568219,CH
-1047568220,1047568259,DE
-1047568260,1047568263,AT
-1047568264,1047568363,DE
-1047568364,1047568367,CH
-1047568368,1047568383,DE
+1047560192,1047568383,DE
1047568384,1047576575,NL
1047576576,1047584767,HU
-1047584768,1047592735,NL
-1047592736,1047592743,FR
-1047592744,1047592959,NL
+1047584768,1047592959,NL
1047592960,1047601151,BA
1047601152,1047625727,RU
1047625728,1047633919,NO
1047633920,1047642111,FI
1047642112,1047658495,DE
1047658496,1047724031,EG
-1047724032,1047728127,EU
1047728128,1047732223,SE
-1047732224,1047740415,EU
-1047740416,1047740431,US
-1047740432,1047740447,DE
-1047740448,1047740463,IT
-1047740464,1047740543,SE
-1047740544,1047740671,DE
-1047740672,1047740927,A2
-1047740928,1047781679,EU
-1047781680,1047781695,GB
-1047781696,1047781823,EU
-1047781824,1047781839,SE
-1047781840,1047781847,GB
-1047781848,1047781855,NL
-1047781856,1047781871,DE
-1047781872,1047782695,EU
-1047782696,1047782703,GB
-1047782704,1047782751,SE
-1047782752,1047782783,NO
-1047782784,1047782815,FI
-1047782816,1047782831,SE
-1047782832,1047782847,EU
-1047782848,1047782911,SE
-1047782912,1047785471,EU
-1047785472,1047788031,DE
-1047788032,1047788287,SE
-1047788288,1047788543,NL
-1047788544,1047789055,GB
-1047789056,1047789311,AT
-1047789312,1047789375,EU
-1047789376,1047789383,GB
-1047789384,1047789407,EU
-1047789408,1047789423,DE
-1047789424,1047789439,EU
-1047789440,1047789471,SE
-1047789472,1047789535,EU
-1047789536,1047789567,DE
-1047789568,1047806031,AT
-1047806032,1047806047,IT
-1047806048,1047822335,AT
-1047822336,1047835039,DE
-1047835040,1047835055,US
-1047835056,1047838719,DE
+1047787520,1047787775,ES
+1047789568,1047822335,AT
+1047822336,1047838719,DE
1047838720,1047846911,DK
1047846912,1047855103,SE
1047855104,1047863295,DE
1047863296,1047871487,EG
1047871488,1047887871,RU
1047887872,1047920639,ES
-1047920640,1047941119,RU
-1047941120,1047941375,GB
-1047941376,1047986175,RU
-1047986176,1047997439,SE
-1047997440,1047997503,NO
-1047997504,1048011775,SE
-1048011776,1048012031,EU
-1048012032,1048012383,SE
-1048012384,1048012391,DE
-1048012392,1048051711,SE
+1047920640,1047986175,RU
+1047986176,1048051711,SE
1048051712,1048117247,SA
1048117248,1048125439,GB
1048125440,1048133631,FI
@@ -24843,12 +8951,10 @@
1048182784,1048184831,UA
1048184832,1048186879,FR
1048186880,1048188927,LV
-1048188928,1048190975,BE
-1048190976,1048193023,UA
1048193024,1048195071,RO
1048195072,1048197119,RU
1048197120,1048201215,UA
-1048201216,1048203263,EU
+1048201216,1048203263,PL
1048203264,1048205311,DE
1048205312,1048209407,RU
1048209408,1048211455,UA
@@ -24861,61 +8967,25 @@
1048225792,1048227839,CZ
1048227840,1048233983,RU
1048233984,1048236031,UA
-1048236032,1048240127,RU
+1048236032,1048238079,RU
1048242176,1048244223,PL
1048244224,1048246271,RU
1048246272,1048248319,NO
1048248320,1048313855,IT
1048313856,1048510463,GB
-1048510464,1048537087,SE
-1048537088,1048539135,DK
-1048539136,1048575999,SE
+1048510464,1048575999,SE
1048576000,1048584191,DE
1048584192,1048592383,IL
1048592384,1048600575,IT
-1048600576,1048601599,UA
-1048601600,1048602111,RU
-1048602112,1048602223,PL
-1048602224,1048604671,UA
-1048604672,1048604687,EE
-1048604688,1048604751,UA
-1048604752,1048604759,EE
-1048604760,1048604927,UA
-1048604928,1048604945,LT
-1048604946,1048604963,UA
-1048604964,1048604967,LT
-1048604968,1048604971,UA
-1048604972,1048604991,LT
-1048604992,1048605071,UA
-1048605072,1048605079,LT
-1048605080,1048605103,UA
-1048605104,1048605119,LT
-1048605120,1048605695,UA
-1048605696,1048606719,EE
-1048606720,1048607231,UA
-1048607232,1048607503,EE
-1048607504,1048607743,UA
-1048607744,1048607759,EE
-1048607760,1048607775,UA
-1048607776,1048607839,EE
-1048607840,1048608255,UA
-1048608256,1048608287,RU
-1048608288,1048608671,UA
-1048608672,1048608703,EE
-1048608704,1048608711,UA
-1048608712,1048608727,EE
-1048608728,1048608731,UA
-1048608732,1048608767,EE
-1048608768,1048611583,GB
-1048611584,1048611839,FR
-1048611840,1048615423,GB
-1048615424,1048615487,US
-1048615488,1048616959,GB
-1048616960,1048617215,A2
+1048600576,1048603391,UA
+1048603392,1048603647,LV
+1048603648,1048608767,UA
+1048608768,1048616959,GB
+1048616960,1048617215,DE
1048617216,1048618751,KE
-1048618752,1048619007,A2
+1048618752,1048619007,DE
1048619008,1048621055,KE
-1048621056,1048625151,US
+1048621056,1048625151,DE
1048625152,1048633343,GB
1048633344,1048641535,NO
1048641536,1048649727,FR
@@ -24925,1301 +8995,34 @@
1048682496,1048690687,FR
1048690688,1048707071,PL
1048707072,1048772607,GB
-1048772608,1048838143,NL
-1048838144,1048838175,DE
-1048838176,1048838207,PL
-1048838208,1048838239,NL
-1048838240,1048839935,DE
-1048839936,1048839983,NL
-1048839984,1048839991,DE
-1048839992,1048840055,NL
-1048840056,1048840063,DE
-1048840064,1048840103,NL
-1048840104,1048840111,DE
-1048840112,1048840703,NL
-1048840704,1048843263,DE
-1048843264,1048843311,NL
-1048843312,1048843319,DE
-1048843320,1048843383,NL
-1048843384,1048843391,DE
-1048843392,1048843575,NL
-1048843576,1048843583,DE
-1048843584,1048843599,NL
-1048843600,1048843607,DE
-1048843608,1048843703,NL
-1048843704,1048843711,DE
-1048843712,1048843727,NL
-1048843728,1048843735,DE
-1048843736,1048843951,NL
-1048843952,1048843959,DE
-1048843960,1048843983,NL
-1048843984,1048843991,DE
-1048843992,1048844031,NL
-1048844032,1048844039,DE
-1048844040,1048844119,NL
-1048844120,1048844127,DE
-1048844128,1048844263,NL
-1048844264,1048844271,DE
-1048844272,1048844287,NL
-1048844288,1048844319,DE
-1048844320,1048844351,NL
-1048844352,1048845567,DE
-1048845568,1048845623,NL
-1048845624,1048845631,DE
-1048845632,1048845663,NL
-1048845664,1048845671,DE
-1048845672,1048845703,NL
-1048845704,1048845711,DE
-1048845712,1048845759,NL
-1048845760,1048845767,DE
-1048845768,1048845855,NL
-1048845856,1048845863,DE
-1048845864,1048845903,NL
-1048845904,1048845911,DE
-1048845912,1048846343,NL
-1048846344,1048846351,DE
-1048846352,1048846383,NL
-1048846384,1048846391,DE
-1048846392,1048846575,NL
-1048846576,1048846591,DE
-1048846592,1048846647,NL
-1048846648,1048846663,DE
-1048846664,1048846687,NL
-1048846688,1048846695,DE
-1048846696,1048846719,NL
-1048846720,1048846727,DE
-1048846728,1048846847,NL
-1048846848,1048847359,DE
-1048847360,1048847423,NL
-1048847424,1048847431,DE
-1048847432,1048847455,NL
-1048847456,1048847463,DE
-1048847464,1048847807,NL
-1048847808,1048847815,DE
-1048847816,1048847847,NL
-1048847848,1048847855,DE
-1048847856,1048847863,NL
-1048847864,1048847871,DE
-1048847872,1048847927,NL
-1048847928,1048847935,DE
-1048847936,1048848111,NL
-1048848112,1048848127,DE
-1048848128,1048848135,NL
-1048848136,1048848143,DE
-1048848144,1048848223,NL
-1048848224,1048848231,DE
-1048848232,1048848439,NL
-1048848440,1048848447,DE
-1048848448,1048848479,NL
-1048848480,1048848487,DE
-1048848488,1048848551,NL
-1048848552,1048848559,DE
-1048848560,1048848591,NL
-1048848592,1048848599,DE
-1048848600,1048848623,NL
-1048848624,1048848631,DE
-1048848632,1048848703,NL
-1048848704,1048848711,DE
-1048848712,1048848735,NL
-1048848736,1048848743,DE
-1048848744,1048848831,NL
-1048848832,1048848839,DE
-1048848840,1048848895,NL
-1048848896,1048849407,DE
-1048849408,1048849559,NL
-1048849560,1048849567,DE
-1048849568,1048849599,NL
-1048849600,1048849607,DE
-1048849608,1048849863,NL
-1048849864,1048849871,DE
-1048849872,1048849895,NL
-1048849896,1048849903,DE
-1048849904,1048850015,NL
-1048850016,1048850023,DE
-1048850024,1048850063,NL
-1048850064,1048850071,DE
-1048850072,1048850151,NL
-1048850152,1048850159,DE
-1048850160,1048850711,NL
-1048850712,1048850719,DE
-1048850720,1048850959,NL
-1048850960,1048850967,DE
-1048850968,1048851015,NL
-1048851016,1048851023,DE
-1048851024,1048851031,NL
-1048851032,1048851039,DE
-1048851040,1048851151,NL
-1048851152,1048851159,DE
-1048851160,1048851223,NL
-1048851224,1048851231,DE
-1048851232,1048851471,NL
-1048851472,1048851479,DE
-1048851480,1048851503,NL
-1048851504,1048851511,DE
-1048851512,1048851591,NL
-1048851592,1048851607,DE
-1048851608,1048851655,NL
-1048851656,1048851663,DE
-1048851664,1048851679,NL
-1048851680,1048851687,DE
-1048851688,1048851703,NL
-1048851704,1048851711,DE
-1048851712,1048851735,NL
-1048851736,1048851751,DE
-1048851752,1048852039,NL
-1048852040,1048852047,DE
-1048852048,1048852335,NL
-1048852336,1048852343,DE
-1048852344,1048852495,NL
-1048852496,1048852503,DE
-1048852504,1048852607,NL
-1048852608,1048852615,DE
-1048852616,1048852647,NL
-1048852648,1048852655,DE
-1048852656,1048852783,NL
-1048852784,1048852799,DE
-1048852800,1048852871,NL
-1048852872,1048852879,DE
-1048852880,1048853031,NL
-1048853032,1048853039,DE
-1048853040,1048853127,NL
-1048853128,1048853135,DE
-1048853136,1048853143,NL
-1048853144,1048853151,DE
-1048853152,1048853183,NL
-1048853184,1048853199,DE
-1048853200,1048853279,NL
-1048853280,1048853287,DE
-1048853288,1048853295,NL
-1048853296,1048853303,DE
-1048853304,1048853319,NL
-1048853320,1048853335,DE
-1048853336,1048853439,NL
-1048853440,1048853447,DE
-1048853448,1048853807,NL
-1048853808,1048853815,DE
-1048853816,1048853863,NL
-1048853864,1048853871,DE
-1048853872,1048854055,NL
-1048854056,1048854063,DE
-1048854064,1048854391,NL
-1048854392,1048854407,DE
-1048854408,1048854527,NL
-1048854528,1048855039,DE
-1048855040,1048855047,NL
-1048855048,1048855055,DE
-1048855056,1048855095,NL
-1048855096,1048855103,DE
-1048855104,1048855215,NL
-1048855216,1048855223,DE
-1048855224,1048855263,NL
-1048855264,1048855279,DE
-1048855280,1048855303,NL
-1048855304,1048855311,DE
-1048855312,1048855327,NL
-1048855328,1048855335,DE
-1048855336,1048855487,NL
-1048855488,1048855495,DE
-1048855496,1048855687,NL
-1048855688,1048855695,DE
-1048855696,1048855703,NL
-1048855704,1048855711,DE
-1048855712,1048855895,NL
-1048855896,1048855911,DE
-1048855912,1048855935,NL
-1048855936,1048855943,DE
-1048855944,1048856015,NL
-1048856016,1048856031,DE
-1048856032,1048856087,NL
-1048856088,1048856103,DE
-1048856104,1048856111,NL
-1048856112,1048856119,DE
-1048856120,1048856135,NL
-1048856136,1048856151,DE
-1048856152,1048856183,NL
-1048856184,1048856191,DE
-1048856192,1048856359,NL
-1048856360,1048856367,DE
-1048856368,1048856375,NL
-1048856376,1048856383,DE
-1048856384,1048856455,NL
-1048856456,1048856463,DE
-1048856464,1048856559,NL
-1048856560,1048856567,DE
-1048856568,1048856607,NL
-1048856608,1048856615,DE
-1048856616,1048856687,NL
-1048856688,1048856695,DE
-1048856696,1048856839,NL
-1048856840,1048856847,DE
-1048856848,1048856919,NL
-1048856920,1048856927,DE
-1048856928,1048856991,NL
-1048856992,1048857007,DE
-1048857008,1048857207,NL
-1048857208,1048857215,DE
-1048857216,1048857263,NL
-1048857264,1048857271,DE
-1048857272,1048857343,NL
-1048857344,1048857351,DE
-1048857352,1048857543,NL
-1048857544,1048857551,DE
-1048857552,1048857735,NL
-1048857736,1048857743,DE
-1048857744,1048857767,NL
-1048857768,1048857775,DE
-1048857776,1048857783,NL
-1048857784,1048857799,DE
-1048857800,1048857847,NL
-1048857848,1048857855,DE
-1048857856,1048857983,NL
-1048857984,1048857991,DE
-1048857992,1048858111,NL
-1048858112,1048858623,DE
-1048858624,1048858703,NL
-1048858704,1048858711,DE
-1048858712,1048858783,NL
-1048858784,1048858791,DE
-1048858792,1048858823,NL
-1048858824,1048858831,DE
-1048858832,1048858855,NL
-1048858856,1048858863,DE
-1048858864,1048858967,NL
-1048858968,1048858975,DE
-1048858976,1048859095,NL
-1048859096,1048859103,DE
-1048859104,1048859495,NL
-1048859496,1048859503,DE
-1048859504,1048859519,NL
-1048859520,1048859527,DE
-1048859528,1048859727,NL
-1048859728,1048859735,DE
-1048859736,1048859903,NL
-1048859904,1048859911,DE
-1048859912,1048860311,NL
-1048860312,1048860327,DE
-1048860328,1048860407,NL
-1048860408,1048860415,DE
-1048860416,1048860455,NL
-1048860456,1048860463,DE
-1048860464,1048860487,NL
-1048860488,1048860495,DE
-1048860496,1048860511,NL
-1048860512,1048860519,DE
-1048860520,1048860607,NL
-1048860608,1048860615,DE
-1048860616,1048860703,NL
-1048860704,1048860711,DE
-1048860712,1048860799,NL
-1048860800,1048860807,DE
-1048860808,1048860975,NL
-1048860976,1048860983,DE
-1048860984,1048861031,NL
-1048861032,1048861039,DE
-1048861040,1048861127,NL
-1048861128,1048861135,DE
-1048861136,1048861175,NL
-1048861176,1048861183,DE
-1048861184,1048861383,NL
-1048861384,1048861391,DE
-1048861392,1048861423,NL
-1048861424,1048861439,DE
-1048861440,1048861607,NL
-1048861608,1048861615,DE
-1048861616,1048861663,NL
-1048861664,1048861671,DE
-1048861672,1048861767,NL
-1048861768,1048861775,DE
-1048861776,1048861839,NL
-1048861840,1048861847,DE
-1048861848,1048862031,NL
-1048862032,1048862039,DE
-1048862040,1048862247,NL
-1048862248,1048862255,DE
-1048862256,1048862287,NL
-1048862288,1048862295,DE
-1048862296,1048862327,NL
-1048862328,1048862335,DE
-1048862336,1048862343,NL
-1048862344,1048862351,DE
-1048862352,1048862391,NL
-1048862392,1048862399,DE
-1048862400,1048862423,NL
-1048862424,1048862431,DE
-1048862432,1048862511,NL
-1048862512,1048862519,DE
-1048862520,1048862623,NL
-1048862624,1048862639,DE
-1048862640,1048862647,NL
-1048862648,1048862655,DE
-1048862656,1048862671,NL
-1048862672,1048862679,DE
-1048862680,1048862711,NL
-1048862712,1048862719,DE
-1048862720,1048862919,NL
-1048862920,1048862927,DE
-1048862928,1048862951,NL
-1048862952,1048862959,DE
-1048862960,1048863055,NL
-1048863056,1048863063,DE
-1048863064,1048863111,NL
-1048863112,1048863119,DE
-1048863120,1048863271,NL
-1048863272,1048863279,DE
-1048863280,1048863287,NL
-1048863288,1048863295,DE
-1048863296,1048863311,NL
-1048863312,1048863327,DE
-1048863328,1048863343,NL
-1048863344,1048863351,DE
-1048863352,1048863359,NL
-1048863360,1048863367,DE
-1048863368,1048863375,NL
-1048863376,1048863383,DE
-1048863384,1048863391,NL
-1048863392,1048863399,DE
-1048863400,1048863575,NL
-1048863576,1048863591,DE
-1048863592,1048863599,NL
-1048863600,1048863607,DE
-1048863608,1048863631,NL
-1048863632,1048863639,DE
-1048863640,1048863743,NL
-1048863744,1048863751,DE
-1048863752,1048863791,NL
-1048863792,1048863807,DE
-1048863808,1048863927,NL
-1048863928,1048863935,DE
-1048863936,1048864071,NL
-1048864072,1048864079,DE
-1048864080,1048864127,NL
-1048864128,1048864135,DE
-1048864136,1048864167,NL
-1048864168,1048864175,DE
-1048864176,1048864223,NL
-1048864224,1048864231,DE
-1048864232,1048864455,NL
-1048864456,1048864463,DE
-1048864464,1048864471,NL
-1048864472,1048864479,DE
-1048864480,1048864775,NL
-1048864776,1048864783,DE
-1048864784,1048864855,NL
-1048864856,1048864863,DE
-1048864864,1048865063,NL
-1048865064,1048865071,DE
-1048865072,1048865255,NL
-1048865256,1048865263,DE
-1048865264,1048865279,NL
-1048865280,1048865791,DE
-1048865792,1048865823,NL
-1048865824,1048865831,DE
-1048865832,1048865903,NL
-1048865904,1048865911,DE
-1048865912,1048865935,NL
-1048865936,1048865943,DE
-1048865944,1048866095,NL
-1048866096,1048866103,DE
-1048866104,1048866151,NL
-1048866152,1048866159,DE
-1048866160,1048866359,NL
-1048866360,1048866367,DE
-1048866368,1048866647,NL
-1048866648,1048866655,DE
-1048866656,1048866887,NL
-1048866888,1048866895,DE
-1048866896,1048867015,NL
-1048867016,1048867023,DE
-1048867024,1048867031,NL
-1048867032,1048867039,DE
-1048867040,1048867207,NL
-1048867208,1048867215,DE
-1048867216,1048867295,NL
-1048867296,1048867303,DE
-1048867304,1048867327,NL
-1048867328,1048868351,DE
-1048868352,1048868391,NL
-1048868392,1048868399,DE
-1048868400,1048868615,NL
-1048868616,1048868623,DE
-1048868624,1048868655,NL
-1048868656,1048868663,DE
-1048868664,1048868743,NL
-1048868744,1048868751,DE
-1048868752,1048868767,NL
-1048868768,1048868775,DE
-1048868776,1048868791,NL
-1048868792,1048868799,DE
-1048868800,1048868823,NL
-1048868824,1048868839,DE
-1048868840,1048869183,NL
-1048869184,1048869191,DE
-1048869192,1048869247,NL
-1048869248,1048869255,DE
-1048869256,1048869263,NL
-1048869264,1048869279,DE
-1048869280,1048869287,NL
-1048869288,1048869295,DE
-1048869296,1048869367,NL
-1048869368,1048869375,DE
-1048869376,1048869479,NL
-1048869480,1048869487,DE
-1048869488,1048869503,NL
-1048869504,1048869519,DE
-1048869520,1048869543,NL
-1048869544,1048869551,DE
-1048869552,1048869615,NL
-1048869616,1048869623,DE
-1048869624,1048869687,NL
-1048869688,1048869695,DE
-1048869696,1048869759,NL
-1048869760,1048869767,DE
-1048869768,1048869775,NL
-1048869776,1048869783,DE
-1048869784,1048869847,NL
-1048869848,1048869863,DE
-1048869864,1048869911,NL
-1048869912,1048869919,DE
-1048869920,1048869951,NL
-1048869952,1048869967,DE
-1048869968,1048869975,NL
-1048869976,1048869983,DE
-1048869984,1048870015,NL
-1048870016,1048870023,DE
-1048870024,1048870031,NL
-1048870032,1048870039,DE
-1048870040,1048870079,NL
-1048870080,1048870095,DE
-1048870096,1048870103,NL
-1048870104,1048870111,DE
-1048870112,1048870127,NL
-1048870128,1048870135,DE
-1048870136,1048870199,NL
-1048870200,1048870207,DE
-1048870208,1048870279,NL
-1048870280,1048870287,DE
-1048870288,1048870399,NL
-1048870400,1048870911,DE
-1048870912,1048871095,NL
-1048871096,1048871103,DE
-1048871104,1048871135,NL
-1048871136,1048871143,DE
-1048871144,1048871223,NL
-1048871224,1048871231,DE
-1048871232,1048871303,NL
-1048871304,1048871311,DE
-1048871312,1048871319,NL
-1048871320,1048871327,DE
-1048871328,1048871935,NL
-1048871936,1048872703,DE
-1048872704,1048872735,NL
-1048872736,1048872743,DE
-1048872744,1048872847,NL
-1048872848,1048872863,DE
-1048872864,1048872975,NL
-1048872976,1048872983,DE
-1048872984,1048873119,NL
-1048873120,1048873127,DE
-1048873128,1048873263,NL
-1048873264,1048873271,DE
-1048873272,1048873287,NL
-1048873288,1048873303,DE
-1048873304,1048873359,NL
-1048873360,1048873367,DE
-1048873368,1048873743,NL
-1048873744,1048873751,DE
-1048873752,1048873791,NL
-1048873792,1048873799,DE
-1048873800,1048873863,NL
-1048873864,1048873871,DE
-1048873872,1048873935,NL
-1048873936,1048873951,DE
-1048873952,1048874295,NL
-1048874296,1048874303,DE
-1048874304,1048874327,NL
-1048874328,1048874335,DE
-1048874336,1048874359,NL
-1048874360,1048874367,DE
-1048874368,1048874415,NL
-1048874416,1048874423,DE
-1048874424,1048874447,NL
-1048874448,1048874455,DE
-1048874456,1048874471,NL
-1048874472,1048874479,DE
-1048874480,1048874535,NL
-1048874536,1048874543,DE
-1048874544,1048874623,NL
-1048874624,1048874639,DE
-1048874640,1048874679,NL
-1048874680,1048874687,DE
-1048874688,1048874703,NL
-1048874704,1048874719,DE
-1048874720,1048874911,NL
-1048874912,1048874919,DE
-1048874920,1048875015,NL
-1048875016,1048875023,DE
-1048875024,1048875143,NL
-1048875144,1048875151,DE
-1048875152,1048875191,NL
-1048875192,1048875199,DE
-1048875200,1048875231,NL
-1048875232,1048875239,DE
-1048875240,1048875311,NL
-1048875312,1048875319,DE
-1048875320,1048875375,NL
-1048875376,1048875383,DE
-1048875384,1048875391,NL
-1048875392,1048875399,DE
-1048875400,1048875487,NL
-1048875488,1048875495,DE
-1048875496,1048875655,NL
-1048875656,1048875663,DE
-1048875664,1048875671,NL
-1048875672,1048875679,DE
-1048875680,1048875687,NL
-1048875688,1048875695,DE
-1048875696,1048875703,NL
-1048875704,1048875711,DE
-1048875712,1048875823,NL
-1048875824,1048875847,DE
-1048875848,1048876015,NL
-1048876016,1048876023,DE
-1048876024,1048876159,NL
-1048876160,1048876167,DE
-1048876168,1048876255,NL
-1048876256,1048876263,DE
-1048876264,1048876327,NL
-1048876328,1048876335,DE
-1048876336,1048876359,NL
-1048876360,1048876367,DE
-1048876368,1048876375,NL
-1048876376,1048876383,DE
-1048876384,1048876527,NL
-1048876528,1048876535,DE
-1048876536,1048876807,NL
-1048876808,1048876815,DE
-1048876816,1048876823,NL
-1048876824,1048876831,DE
-1048876832,1048876839,NL
-1048876840,1048876847,DE
-1048876848,1048876991,NL
-1048876992,1048876999,DE
-1048877000,1048877023,NL
-1048877024,1048877055,DE
-1048877056,1048877071,NL
-1048877072,1048877079,DE
-1048877080,1048877103,NL
-1048877104,1048877111,DE
-1048877112,1048877159,NL
-1048877160,1048877167,DE
-1048877168,1048877191,NL
-1048877192,1048877199,DE
-1048877200,1048877247,NL
-1048877248,1048877263,DE
-1048877264,1048877279,NL
-1048877280,1048877295,DE
-1048877296,1048877303,NL
-1048877304,1048878087,DE
-1048878088,1048878103,NL
-1048878104,1048878111,DE
-1048878112,1048878303,NL
-1048878304,1048878311,DE
-1048878312,1048878335,NL
-1048878336,1048878343,DE
-1048878344,1048878447,NL
-1048878448,1048878455,DE
-1048878456,1048878487,NL
-1048878488,1048878495,DE
-1048878496,1048878543,NL
-1048878544,1048878551,DE
-1048878552,1048878623,NL
-1048878624,1048878631,DE
-1048878632,1048878663,NL
-1048878664,1048878671,DE
-1048878672,1048878703,NL
-1048878704,1048878711,DE
-1048878712,1048878735,NL
-1048878736,1048878743,DE
-1048878744,1048878751,NL
-1048878752,1048878759,DE
-1048878760,1048878815,NL
-1048878816,1048878823,DE
-1048878824,1048878831,NL
-1048878832,1048878839,DE
-1048878840,1048878879,NL
-1048878880,1048878887,DE
-1048878888,1048878919,NL
-1048878920,1048878927,DE
-1048878928,1048878983,NL
-1048878984,1048878991,DE
-1048878992,1048879047,NL
-1048879048,1048879055,DE
-1048879056,1048879063,NL
-1048879064,1048879071,DE
-1048879072,1048879199,NL
-1048879200,1048879207,DE
-1048879208,1048879263,NL
-1048879264,1048879279,DE
-1048879280,1048879319,NL
-1048879320,1048879327,DE
-1048879328,1048879335,NL
-1048879336,1048879343,DE
-1048879344,1048879455,NL
-1048879456,1048879463,DE
-1048879464,1048879527,NL
-1048879528,1048879535,DE
-1048879536,1048879591,NL
-1048879592,1048879599,DE
-1048879600,1048879687,NL
-1048879688,1048879695,DE
-1048879696,1048879991,NL
-1048879992,1048879999,DE
-1048880000,1048880103,NL
-1048880104,1048880111,DE
-1048880112,1048880135,NL
-1048880136,1048880143,DE
-1048880144,1048880247,NL
-1048880248,1048880255,DE
-1048880256,1048880311,NL
-1048880312,1048880327,DE
-1048880328,1048880351,NL
-1048880352,1048880359,DE
-1048880360,1048880639,NL
-1048880640,1048881159,DE
-1048881160,1048881231,NL
-1048881232,1048881239,DE
-1048881240,1048881287,NL
-1048881288,1048881295,DE
-1048881296,1048881543,NL
-1048881544,1048881551,DE
-1048881552,1048881615,NL
-1048881616,1048881639,DE
-1048881640,1048881783,NL
-1048881784,1048881791,DE
-1048881792,1048881815,NL
-1048881816,1048881823,DE
-1048881824,1048881831,NL
-1048881832,1048881839,DE
-1048881840,1048881879,NL
-1048881880,1048881887,DE
-1048881888,1048881903,NL
-1048881904,1048881919,DE
-1048881920,1048881999,NL
-1048882000,1048882007,DE
-1048882008,1048882047,NL
-1048882048,1048882055,DE
-1048882056,1048882071,NL
-1048882072,1048882079,DE
-1048882080,1048882103,NL
-1048882104,1048882111,DE
-1048882112,1048882143,NL
-1048882144,1048882151,DE
-1048882152,1048882167,NL
-1048882168,1048882175,DE
-1048882176,1048882199,NL
-1048882200,1048882207,DE
-1048882208,1048882279,NL
-1048882280,1048882287,DE
-1048882288,1048882311,NL
-1048882312,1048882319,DE
-1048882320,1048882495,NL
-1048882496,1048882503,DE
-1048882504,1048882543,NL
-1048882544,1048882551,DE
-1048882552,1048882575,NL
-1048882576,1048882591,DE
-1048882592,1048882663,NL
-1048882664,1048882679,DE
-1048882680,1048882703,NL
-1048882704,1048882711,DE
-1048882712,1048882743,NL
-1048882744,1048882759,DE
-1048882760,1048882807,NL
-1048882808,1048882815,DE
-1048882816,1048882823,NL
-1048882824,1048882831,DE
-1048882832,1048882847,NL
-1048882848,1048882863,DE
-1048882864,1048882951,NL
-1048882952,1048882959,DE
-1048882960,1048883143,NL
-1048883144,1048883151,DE
-1048883152,1048883167,NL
-1048883168,1048883175,DE
-1048883176,1048883279,NL
-1048883280,1048883287,DE
-1048883288,1048883319,NL
-1048883320,1048883327,DE
-1048883328,1048883351,NL
-1048883352,1048883359,DE
-1048883360,1048883383,NL
-1048883384,1048883391,DE
-1048883392,1048883399,NL
-1048883400,1048883407,DE
-1048883408,1048883455,NL
-1048883456,1048883463,DE
-1048883464,1048883679,NL
-1048883680,1048883687,DE
-1048883688,1048883711,NL
-1048883712,1048883719,DE
-1048883720,1048883735,NL
-1048883736,1048883743,DE
-1048883744,1048883871,NL
-1048883872,1048883879,DE
-1048883880,1048883999,NL
-1048884000,1048884007,DE
-1048884008,1048884111,NL
-1048884112,1048884119,DE
-1048884120,1048884183,NL
-1048884184,1048884191,DE
-1048884192,1048884247,NL
-1048884248,1048884255,DE
-1048884256,1048884279,NL
-1048884280,1048884295,DE
-1048884296,1048884535,NL
-1048884536,1048884543,DE
-1048884544,1048884639,NL
-1048884640,1048884647,DE
-1048884648,1048884711,NL
-1048884712,1048884727,DE
-1048884728,1048884911,NL
-1048884912,1048884919,DE
-1048884920,1048884975,NL
-1048884976,1048884999,DE
-1048885000,1048885111,NL
-1048885112,1048885127,DE
-1048885128,1048885175,NL
-1048885176,1048885183,DE
-1048885184,1048885343,NL
-1048885344,1048885351,DE
-1048885352,1048885471,NL
-1048885472,1048885479,DE
-1048885480,1048885575,NL
-1048885576,1048885583,DE
-1048885584,1048885655,NL
-1048885656,1048885663,DE
-1048885664,1048885703,NL
-1048885704,1048885711,DE
-1048885712,1048885767,NL
-1048885768,1048885775,DE
-1048885776,1048885815,NL
-1048885816,1048885823,DE
-1048885824,1048885839,NL
-1048885840,1048885847,DE
-1048885848,1048885903,NL
-1048885904,1048885911,DE
-1048885912,1048885943,NL
-1048885944,1048885959,DE
-1048885960,1048886095,NL
-1048886096,1048886103,DE
-1048886104,1048886167,NL
-1048886168,1048886175,DE
-1048886176,1048886199,NL
-1048886200,1048886207,DE
-1048886208,1048886239,NL
-1048886240,1048886247,DE
-1048886248,1048886343,NL
-1048886344,1048886351,DE
-1048886352,1048886367,NL
-1048886368,1048886375,DE
-1048886376,1048886431,NL
-1048886432,1048886439,DE
-1048886440,1048886463,NL
-1048886464,1048886471,DE
-1048886472,1048886583,NL
-1048886584,1048886591,DE
-1048886592,1048886615,NL
-1048886616,1048886623,DE
-1048886624,1048886871,NL
-1048886872,1048886879,DE
-1048886880,1048886887,NL
-1048886888,1048886911,DE
-1048886912,1048887039,NL
-1048887040,1048887047,DE
-1048887048,1048887063,NL
-1048887064,1048887071,DE
-1048887072,1048887263,NL
-1048887264,1048887271,DE
-1048887272,1048887935,NL
-1048887936,1048887999,DE
-1048888000,1048888959,NL
-1048888960,1048889087,DE
-1048889088,1048889279,NL
-1048889280,1048889311,DE
-1048889312,1048891183,NL
-1048891184,1048891191,DE
-1048891192,1048891263,NL
-1048891264,1048891271,DE
-1048891272,1048891391,NL
-1048891392,1048891399,DE
-1048891400,1048891599,NL
-1048891600,1048891607,DE
-1048891608,1048891775,NL
-1048891776,1048891791,DE
-1048891792,1048891823,NL
-1048891824,1048891831,DE
-1048891832,1048891911,NL
-1048891912,1048891919,DE
-1048891920,1048892087,NL
-1048892088,1048892095,DE
-1048892096,1048892183,NL
-1048892184,1048892199,DE
-1048892200,1048892239,NL
-1048892240,1048892247,DE
-1048892248,1048892311,NL
-1048892312,1048892319,DE
-1048892320,1048892343,NL
-1048892344,1048892351,DE
-1048892352,1048892367,NL
-1048892368,1048892375,DE
-1048892376,1048892391,NL
-1048892392,1048892399,DE
-1048892400,1048892447,NL
-1048892448,1048892455,DE
-1048892456,1048892527,NL
-1048892528,1048892535,DE
-1048892536,1048892559,NL
-1048892560,1048892567,DE
-1048892568,1048892575,NL
-1048892576,1048892583,DE
-1048892584,1048892679,NL
-1048892680,1048892687,DE
-1048892688,1048892815,NL
-1048892816,1048892823,DE
-1048892824,1048892863,NL
-1048892864,1048892871,DE
-1048892872,1048892895,NL
-1048892896,1048892903,DE
-1048892904,1048892927,NL
-1048892928,1048892943,DE
-1048892944,1048892983,NL
-1048892984,1048892991,DE
-1048892992,1048893023,NL
-1048893024,1048893031,DE
-1048893032,1048893063,NL
-1048893064,1048893071,DE
-1048893072,1048893111,NL
-1048893112,1048893127,DE
-1048893128,1048893455,NL
-1048893456,1048893463,DE
-1048893464,1048893591,NL
-1048893592,1048893607,DE
-1048893608,1048893655,NL
-1048893656,1048893663,DE
-1048893664,1048893703,NL
-1048893704,1048893711,DE
-1048893712,1048893719,NL
-1048893720,1048893727,DE
-1048893728,1048893879,NL
-1048893880,1048893887,DE
-1048893888,1048893919,NL
-1048893920,1048893927,DE
-1048893928,1048893943,NL
-1048893944,1048893951,DE
-1048893952,1048893983,NL
-1048893984,1048893991,DE
-1048893992,1048894023,NL
-1048894024,1048894031,DE
-1048894032,1048894039,NL
-1048894040,1048894047,DE
-1048894048,1048894071,NL
-1048894072,1048894079,DE
-1048894080,1048894103,NL
-1048894104,1048894111,DE
-1048894112,1048894215,NL
-1048894216,1048894223,DE
-1048894224,1048894455,NL
-1048894456,1048894463,DE
-1048894464,1048894471,NL
-1048894472,1048894479,DE
-1048894480,1048894487,NL
-1048894488,1048894495,DE
-1048894496,1048894607,NL
-1048894608,1048894623,DE
-1048894624,1048894631,NL
-1048894632,1048894639,DE
-1048894640,1048894671,NL
-1048894672,1048894679,DE
-1048894680,1048894735,NL
-1048894736,1048894743,DE
-1048894744,1048894855,NL
-1048894856,1048894863,DE
-1048894864,1048894887,NL
-1048894888,1048894911,DE
-1048894912,1048895031,NL
-1048895032,1048895039,DE
-1048895040,1048895079,NL
-1048895080,1048895087,DE
-1048895088,1048895263,NL
-1048895264,1048895279,DE
-1048895280,1048895439,NL
-1048895440,1048895447,DE
-1048895448,1048895455,NL
-1048895456,1048895463,DE
-1048895464,1048895551,NL
-1048895552,1048895559,DE
-1048895560,1048895623,NL
-1048895624,1048895631,DE
-1048895632,1048895647,NL
-1048895648,1048895655,DE
-1048895656,1048895727,NL
-1048895728,1048895735,DE
-1048895736,1048895967,NL
-1048895968,1048895975,DE
-1048895976,1048896079,NL
-1048896080,1048896087,DE
-1048896088,1048896175,NL
-1048896176,1048896183,DE
-1048896184,1048896231,NL
-1048896232,1048896239,DE
-1048896240,1048896271,NL
-1048896272,1048896287,DE
-1048896288,1048896319,NL
-1048896320,1048896327,DE
-1048896328,1048896343,NL
-1048896344,1048896351,DE
-1048896352,1048896367,NL
-1048896368,1048896391,DE
-1048896392,1048896455,NL
-1048896456,1048896463,DE
-1048896464,1048896479,NL
-1048896480,1048896487,DE
-1048896488,1048896495,NL
-1048896496,1048896511,DE
-1048896512,1048896519,NL
-1048896520,1048896535,DE
-1048896536,1048896591,NL
-1048896592,1048896607,DE
-1048896608,1048896647,NL
-1048896648,1048896655,DE
-1048896656,1048896671,NL
-1048896672,1048896679,DE
-1048896680,1048896687,NL
-1048896688,1048896695,DE
-1048896696,1048896735,NL
-1048896736,1048896743,DE
-1048896744,1048896871,NL
-1048896872,1048896879,DE
-1048896880,1048896943,NL
-1048896944,1048896959,DE
-1048896960,1048896967,NL
-1048896968,1048896975,DE
-1048896976,1048897071,NL
-1048897072,1048897079,DE
-1048897080,1048897111,NL
-1048897112,1048897135,DE
-1048897136,1048897207,NL
-1048897208,1048897223,DE
-1048897224,1048897231,NL
-1048897232,1048897247,DE
-1048897248,1048897271,NL
-1048897272,1048897279,DE
-1048897280,1048897295,NL
-1048897296,1048897311,DE
-1048897312,1048897319,NL
-1048897320,1048897327,DE
-1048897328,1048897367,NL
-1048897368,1048897375,DE
-1048897376,1048897463,NL
-1048897464,1048897471,DE
-1048897472,1048897495,NL
-1048897496,1048897503,DE
-1048897504,1048897607,NL
-1048897608,1048897615,DE
-1048897616,1048897679,NL
-1048897680,1048897695,DE
-1048897696,1048897735,NL
-1048897736,1048897751,DE
-1048897752,1048897895,NL
-1048897896,1048897903,DE
-1048897904,1048897975,NL
-1048897976,1048897983,DE
-1048897984,1048898327,NL
-1048898328,1048898335,DE
-1048898336,1048898359,NL
-1048898360,1048898367,DE
-1048898368,1048898447,NL
-1048898448,1048898455,DE
-1048898456,1048898543,NL
-1048898544,1048898551,DE
-1048898552,1048898663,NL
-1048898664,1048898679,DE
-1048898680,1048898719,NL
-1048898720,1048898727,DE
-1048898728,1048898943,NL
-1048898944,1048898951,DE
-1048898952,1048898991,NL
-1048898992,1048898999,DE
-1048899000,1048899047,NL
-1048899048,1048899063,DE
-1048899064,1048899095,NL
-1048899096,1048899103,DE
-1048899104,1048899271,NL
-1048899272,1048899279,DE
-1048899280,1048899287,NL
-1048899288,1048899319,DE
-1048899320,1048899335,NL
-1048899336,1048899343,DE
-1048899344,1048899487,NL
-1048899488,1048899495,DE
-1048899496,1048899591,NL
-1048899592,1048899599,DE
-1048899600,1048899751,NL
-1048899752,1048899767,DE
-1048899768,1048899831,NL
-1048899832,1048899839,DE
-1048899840,1048900071,NL
-1048900072,1048900079,DE
-1048900080,1048900127,NL
-1048900128,1048900143,DE
-1048900144,1048900223,NL
-1048900224,1048900231,DE
-1048900232,1048900311,NL
-1048900312,1048900327,DE
-1048900328,1048900343,NL
-1048900344,1048900351,DE
-1048900352,1048900367,NL
-1048900368,1048900375,DE
-1048900376,1048900391,NL
-1048900392,1048900399,DE
-1048900400,1048900447,NL
-1048900448,1048900455,DE
-1048900456,1048900479,NL
-1048900480,1048900487,DE
-1048900488,1048900527,NL
-1048900528,1048900535,DE
-1048900536,1048900703,NL
-1048900704,1048900711,DE
-1048900712,1048900759,NL
-1048900760,1048900767,DE
-1048900768,1048900831,NL
-1048900832,1048900839,DE
-1048900840,1048900847,NL
-1048900848,1048900855,DE
-1048900856,1048900935,NL
-1048900936,1048900951,DE
-1048900952,1048901167,NL
-1048901168,1048901175,DE
-1048901176,1048901199,NL
-1048901200,1048901207,DE
-1048901208,1048901247,NL
-1048901248,1048901255,DE
-1048901256,1048901311,NL
-1048901312,1048901319,DE
-1048901320,1048901327,NL
-1048901328,1048901335,DE
-1048901336,1048901591,NL
-1048901592,1048901599,DE
-1048901600,1048901615,NL
-1048901616,1048901623,DE
-1048901624,1048902007,NL
-1048902008,1048902015,DE
-1048902016,1048902071,NL
-1048902072,1048902079,DE
-1048902080,1048902103,NL
-1048902104,1048902111,DE
-1048902112,1048902119,NL
-1048902120,1048902127,DE
-1048902128,1048902335,NL
-1048902336,1048902343,DE
-1048902344,1048902359,NL
-1048902360,1048902367,DE
-1048902368,1048902391,NL
-1048902392,1048902399,DE
-1048902400,1048902447,NL
-1048902448,1048902455,DE
-1048902456,1048902527,NL
-1048902528,1048902535,DE
-1048902536,1048902543,NL
-1048902544,1048902551,DE
-1048902552,1048902583,NL
-1048902584,1048902591,DE
-1048902592,1048902639,NL
-1048902640,1048902647,DE
-1048902648,1048902671,NL
-1048902672,1048902679,DE
-1048902680,1048902727,NL
-1048902728,1048902735,DE
-1048902736,1048902783,NL
-1048902784,1048902791,DE
-1048902792,1048902799,NL
-1048902800,1048902807,DE
-1048902808,1048903071,NL
-1048903072,1048903079,DE
-1048903080,1048903095,NL
-1048903096,1048903103,DE
-1048903104,1048903679,NL
+1048772608,1048903679,NL
1048903680,1048911871,GB
1048911872,1048920063,IT
1048920064,1048936447,NL
1048936448,1048944639,PL
1048944640,1048952831,RU
1048952832,1048969215,NL
-1048969216,1048969855,EU
-1048969856,1048969887,DE
-1048969888,1048971063,EU
-1048971064,1048971068,DE
-1048971069,1048971327,EU
-1048971328,1048971391,DE
-1048971392,1048972719,EU
-1048972720,1048972727,DE
-1048972728,1048973439,EU
-1048973440,1048973567,DE
-1048973568,1048974335,EU
-1048974336,1048975183,DE
-1048975184,1048976287,EU
-1048976288,1048976295,DE
-1048976296,1048976296,EU
-1048976297,1048976302,DE
-1048976303,1048976303,EU
-1048976304,1048976319,DE
-1048976320,1048976383,EU
-1048976384,1048976447,DE
-1048976448,1048976511,EU
-1048976512,1048977407,DE
-1048977408,1048978431,EU
-1048978432,1048978943,DE
-1048978944,1048979135,EU
-1048979136,1048979295,DE
-1048979296,1048979455,EU
-1048979456,1048980479,DE
-1048980480,1048980735,EU
-1048980736,1048980791,DE
-1048980792,1048980803,EU
-1048980804,1048980807,DE
-1048980808,1048980815,EU
-1048980816,1048980823,DE
-1048980824,1048980831,EU
-1048980832,1048980959,DE
-1048980960,1048980967,EU
-1048980968,1048980975,DE
-1048980976,1048981503,EU
-1048981504,1048981759,DE
-1048981760,1048981791,EU
-1048981792,1048981823,DE
-1048981824,1048982015,EU
-1048982016,1048982527,DE
-1048982528,1048982783,EU
-1048982784,1048983039,DE
-1048983040,1048983167,EU
-1048983168,1048983423,DE
-1048983424,1048983487,EU
-1048983488,1048983679,DE
-1048983680,1048985087,EU
-1048985088,1048985375,DE
-1048985376,1048986879,EU
-1048986880,1048987135,DE
-1048987136,1048991743,EU
-1048991744,1048991747,DE
-1048991748,1049001983,EU
-1049001984,1049002015,DE
-1049002016,1049002111,EU
-1049002112,1049002239,DE
-1049002240,1049002287,EU
-1049002288,1049002295,DE
-1049002296,1049002367,EU
-1049002368,1049002375,DE
-1049002376,1049003263,EU
-1049003264,1049004287,DE
-1049004288,1049004351,EU
-1049004352,1049004415,DE
-1049004416,1049004543,EU
-1049004544,1049006079,DE
-1049006080,1049007103,EU
-1049007104,1049007111,DE
-1049007112,1049007359,EU
-1049007360,1049009535,DE
-1049009536,1049009559,EU
-1049009560,1049009567,DE
-1049009568,1049009583,EU
-1049009584,1049009615,DE
-1049009616,1049009623,EU
-1049009624,1049009631,DE
-1049009632,1049009647,EU
-1049009648,1049009662,DE
-1049009663,1049009663,EU
-1049009664,1049012223,DE
-1049012224,1049012224,EU
-1049012225,1049012226,DE
-1049012227,1049012735,EU
-1049012736,1049014319,DE
-1049014320,1049014783,EU
-1049014784,1049016847,DE
-1049016848,1049016863,FR
-1049016864,1049017983,DE
-1049017984,1049018047,GE
-1049018048,1049018367,DE
-1049018368,1049018623,EU
-1049018624,1049020127,DE
-1049020128,1049020135,FR
-1049020136,1049021343,DE
-1049021344,1049021375,US
-1049021376,1049026559,DE
-1049026560,1049026815,EU
-1049026816,1049031999,DE
-1049032000,1049032031,EU
-1049032032,1049032159,DE
-1049032160,1049032167,EU
-1049032168,1049032175,DE
-1049032176,1049032191,EU
-1049032192,1049034751,DE
+1048979712,1048980223,DE
+1049006080,1049006335,DE
+1049008128,1049009151,DE
+1049016320,1049018367,DE
+1049018624,1049022463,DE
+1049026816,1049029375,DE
+1049030656,1049031679,DE
+1049031744,1049031871,DE
1049034752,1049067519,EG
1049067520,1049100287,DK
1049100288,1049231359,GB
1049231360,1049296895,DE
1049296896,1049362431,EG
-1049362432,1049362623,DE
-1049362624,1049362687,GB
-1049362688,1049362847,DE
-1049362848,1049362943,GB
-1049362944,1049362959,DE
-1049362960,1049363071,GB
-1049363072,1049363135,DE
-1049363136,1049363967,GB
-1049363968,1049364223,DE
-1049364224,1049365711,GB
-1049365712,1049365719,DE
-1049365720,1049365727,GB
-1049365728,1049365751,DE
-1049365752,1049365887,GB
-1049365888,1049365951,DE
-1049365952,1049366015,GB
-1049366016,1049366271,DE
-1049366272,1049366335,GB
-1049366336,1049366399,DE
-1049366400,1049366527,GB
+1049362432,1049366527,GB
1049366528,1049368575,DE
-1049368576,1049368671,GB
-1049368672,1049368687,DE
-1049368688,1049369599,GB
-1049369600,1049369935,DE
-1049369936,1049369983,GB
-1049369984,1049370143,DE
-1049370144,1049370175,GB
-1049370176,1049370255,DE
-1049370256,1049370303,GB
-1049370304,1049370367,DE
-1049370368,1049370623,GB
+1049368576,1049369983,GB
+1049369984,1049370047,DE
+1049370048,1049370623,GB
1049370624,1049378815,AT
1049378816,1049395199,EG
-1049395200,1049405055,NL
-1049405056,1049405183,GB
-1049405184,1049405247,LU
-1049405248,1049405311,NL
-1049405312,1049405375,BE
-1049405376,1049405439,NL
-1049405440,1049405567,DE
-1049405568,1049405631,BE
-1049405632,1049405695,AT
-1049405696,1049405759,CH
-1049405760,1049405823,ES
-1049405824,1049405887,FR
-1049405888,1049405951,GB
-1049405952,1049407615,NL
-1049407616,1049407999,CH
-1049408000,1049409023,NL
-1049409024,1049409279,DE
-1049409280,1049411583,NL
+1049395200,1049411583,NL
1049411584,1049419775,GB
1049419776,1049427967,RU
1049427968,1049436159,CZ
@@ -26228,141 +9031,22 @@
1049460736,1049468927,NO
1049468928,1049477119,DE
1049477120,1049493503,PL
-1049493504,1049518079,FI
-1049518080,1049518095,GB
-1049518096,1049559039,FI
-1049559040,1049648383,DE
-1049648384,1049648639,GB
-1049648640,1049653095,DE
-1049653096,1049653103,US
-1049653104,1049698303,DE
-1049698304,1049699071,NL
-1049699072,1049699327,A2
-1049699328,1049699583,NL
-1049699584,1049699839,BW
-1049699840,1049706495,NL
-1049706496,1049707007,GB
-1049707008,1049707519,NL
-1049707520,1049707775,LB
-1049707776,1049708031,DZ
-1049708032,1049709055,GB
-1049709056,1049709311,NL
-1049709312,1049709567,GB
-1049709568,1049710079,A2
+1049493504,1049559039,FI
+1049559040,1049698303,DE
+1049698304,1049706495,NL
+1049706496,1049709823,GB
+1049709824,1049710079,NL
1049710080,1049710335,GB
-1049710336,1049710591,A2
-1049710592,1049712895,GB
-1049712896,1049713055,IR
-1049713056,1049713087,MA
-1049713088,1049713151,IR
-1049713152,1049713663,NL
-1049713664,1049713791,LB
-1049713792,1049713919,IR
-1049713920,1049714175,GB
-1049714176,1049714687,NL
-1049714688,1049715711,IR
-1049715712,1049716735,NL
+1049710336,1049710591,NL
+1049710592,1049716735,GB
1049716736,1049717759,IQ
-1049717760,1049718015,GB
-1049718016,1049718271,IR
-1049718272,1049722879,NL
+1049717760,1049722879,GB
1049722880,1049731071,IS
1049731072,1049739263,FI
1049739264,1049755647,NL
-1049755648,1049757383,DE
-1049757384,1049757391,IT
-1049757392,1049758095,DE
-1049758096,1049758103,ES
-1049758104,1049758527,DE
-1049758528,1049758559,DK
-1049758560,1049759455,DE
-1049759456,1049759487,IT
-1049759488,1049759983,DE
-1049759984,1049759999,AE
-1049760000,1049760639,DE
-1049760640,1049760703,IT
-1049760704,1049760767,DE
-1049760768,1049760775,ES
-1049760776,1049760927,DE
-1049760928,1049760959,DK
-1049760960,1049761023,PL
-1049761024,1049761791,DE
-1049761792,1049762047,PL
-1049762048,1049762271,DE
-1049762272,1049762303,DK
-1049762304,1049763039,DE
-1049763040,1049763055,CH
-1049763056,1049763327,DE
-1049763328,1049763583,PL
-1049763584,1049764447,DE
-1049764448,1049764463,AE
-1049764464,1049764479,DE
-1049764480,1049764543,CH
-1049764544,1049765695,DE
-1049765696,1049765791,PL
-1049765792,1049766143,DE
-1049766144,1049766399,DK
-1049766400,1049766415,DE
-1049766416,1049766431,ES
-1049766432,1049766511,DE
-1049766512,1049766527,AE
-1049766528,1049767935,DE
-1049767936,1049767951,AE
-1049767952,1049768063,DE
-1049768064,1049768095,DK
-1049768096,1049768367,DE
-1049768368,1049768375,NL
-1049768376,1049768383,GB
-1049768384,1049768767,DE
-1049768768,1049768799,AE
-1049768800,1049769119,DE
-1049769120,1049769151,AE
-1049769152,1049770111,DE
-1049770112,1049770127,AE
-1049770128,1049770751,DE
-1049770752,1049771007,CH
-1049771008,1049772895,DE
-1049772896,1049772927,AE
-1049772928,1049773055,ES
-1049773056,1049774367,DE
-1049774368,1049774399,IT
-1049774400,1049775103,DE
-1049775104,1049775119,CH
-1049775120,1049776447,DE
-1049776448,1049776479,AE
-1049776480,1049777023,DE
-1049777024,1049777039,CH
-1049777040,1049777087,DE
-1049777088,1049777151,CH
-1049777152,1049778111,DE
-1049778112,1049778143,ES
-1049778144,1049778335,DE
-1049778336,1049778351,AE
-1049778352,1049778367,DE
-1049778368,1049778431,CH
-1049778432,1049778535,DE
-1049778536,1049778543,AT
-1049778544,1049779135,DE
-1049779136,1049779167,AE
-1049779168,1049782303,DE
-1049782304,1049782335,AE
-1049782336,1049782743,DE
-1049782744,1049782751,IT
-1049782752,1049783071,DE
-1049783072,1049783103,DK
-1049783104,1049783743,DE
-1049783744,1049783759,AE
-1049783760,1049784999,DE
-1049785000,1049785007,AT
-1049785008,1049794559,DE
+1049755648,1049794559,DE
1049794560,1049795583,CH
-1049795584,1049811455,DE
-1049811456,1049811711,PL
-1049811712,1049811967,DE
-1049811968,1049812479,PL
-1049812480,1049817287,DE
-1049817288,1049817295,AE
-1049817296,1049821183,DE
+1049795584,1049821183,DE
1049821184,1049886719,FR
1049886720,1049894911,RU
1049894912,1049903103,NO
@@ -26376,13 +9060,7 @@
1049960448,1049968639,GB
1049968640,1049985023,SA
1049985024,1050017791,IT
-1050017792,1050041087,KW
-1050041088,1050041599,US
-1050041600,1050047994,KW
-1050047995,1050047995,US
-1050047996,1050048767,KW
-1050048768,1050049023,US
-1050049024,1050083327,KW
+1050017792,1050083327,KW
1050083328,1050148863,ES
1050148864,1050157055,CY
1050157056,1050173439,RU
@@ -26390,429 +9068,29 @@
1050181632,1050189823,PL
1050189824,1050198015,DE
1050198016,1050206207,RU
-1050206208,1050206999,SK
-1050207000,1050207007,SR
-1050207008,1050214399,SK
-1050214400,1050246719,DE
-1050246720,1050246735,BE
-1050246736,1050272511,DE
-1050272512,1050272767,EU
-1050272768,1050332441,DE
+1050206208,1050214399,SK
+1050214400,1050332441,DE
1050332442,1050332442,GB
-1050332443,1050340607,DE
-1050340608,1050340639,US
-1050340640,1050450711,DE
-1050450712,1050450719,NL
-1050450720,1050470911,DE
+1050332443,1050470911,DE
1050470912,1050471031,GB
1050471032,1050471039,DE
1050471040,1050471167,GB
-1050471168,1050471391,DE
-1050471392,1050471399,IT
-1050471400,1050619503,DE
-1050619504,1050619511,CH
-1050619512,1050621407,DE
-1050621408,1050621439,BE
-1050621440,1050627327,DE
-1050627328,1050627583,EU
-1050627584,1050664911,DE
-1050664912,1050664919,IT
-1050664920,1050667519,DE
-1050667520,1050667775,FR
-1050667776,1050672479,DE
-1050672480,1050672487,SG
-1050672488,1050673151,DE
-1050673152,1050684095,FR
-1050684096,1050684103,GB
-1050684104,1050684609,FR
-1050684610,1050684610,LU
-1050684611,1050702623,FR
-1050702624,1050702631,DE
-1050702632,1050704661,FR
-1050704662,1050704662,GB
-1050704663,1050725463,FR
-1050725464,1050725471,GB
-1050725472,1050726335,FR
-1050726336,1050726343,DE
-1050726344,1050731146,FR
-1050731147,1050731147,GB
-1050731148,1050768551,FR
-1050768552,1050768558,CH
-1050768559,1050804223,FR
+1050471168,1050673151,DE
+1050673152,1050804223,FR
1050804224,1050869759,MK
1050869760,1050935295,NL
-1050935296,1050940927,EU
-1050940928,1050941183,ES
-1050941184,1050943231,EU
-1050943232,1050943487,ES
-1050943488,1050945535,EU
-1050945536,1050945791,ES
-1050945792,1050948607,EU
-1050948608,1050948863,ES
-1050948864,1050968063,EU
1050968064,1051000831,GB
1051000832,1051017215,RU
1051017216,1051033599,NL
1051033600,1051049983,FI
1051049984,1051066367,HU
-1051066368,1051082751,BE
-1051082752,1051084287,NL
-1051084288,1051084799,BE
-1051084800,1051096831,NL
-1051096832,1051097087,BE
-1051097088,1051098111,NL
-1051098112,1051099135,BE
-1051099136,1051099647,NL
-1051099648,1051099663,BE
-1051099664,1051099671,NL
-1051099672,1051099687,BE
-1051099688,1051099695,NL
-1051099696,1051099711,BE
-1051099712,1051099727,NL
-1051099728,1051099775,BE
-1051099776,1051099791,NL
-1051099792,1051099815,BE
-1051099816,1051099823,NL
-1051099824,1051099855,BE
-1051099856,1051099863,NL
-1051099864,1051099879,BE
-1051099880,1051099887,NL
-1051099888,1051099927,BE
-1051099928,1051099959,NL
-1051099960,1051099975,BE
-1051099976,1051099983,NL
-1051099984,1051100015,BE
-1051100016,1051100023,NL
-1051100024,1051100079,BE
-1051100080,1051100095,NL
-1051100096,1051100151,BE
-1051100152,1051100159,NL
-1051100160,1051100455,BE
-1051100456,1051100463,NL
-1051100464,1051100487,BE
-1051100488,1051100499,NL
-1051100500,1051100591,BE
-1051100592,1051100607,NL
-1051100608,1051100631,BE
-1051100632,1051100663,NL
-1051100664,1051100695,BE
-1051100696,1051100703,NL
-1051100704,1051100711,BE
-1051100712,1051100735,NL
-1051100736,1051100831,BE
-1051100832,1051100839,NL
-1051100840,1051100879,BE
-1051100880,1051100911,NL
-1051100912,1051100951,BE
-1051100952,1051100967,NL
-1051100968,1051101047,BE
-1051101048,1051101055,NL
-1051101056,1051101127,BE
-1051101128,1051101151,NL
-1051101152,1051101207,BE
-1051101208,1051101231,NL
-1051101232,1051101247,BE
-1051101248,1051101279,NL
-1051101280,1051101287,BE
-1051101288,1051101407,NL
-1051101408,1051101415,BE
-1051101416,1051101431,NL
-1051101432,1051101447,BE
-1051101448,1051101463,NL
-1051101464,1051101471,BE
-1051101472,1051101591,NL
-1051101592,1051101607,BE
-1051101608,1051101615,NL
-1051101616,1051101623,BE
-1051101624,1051101631,NL
-1051101632,1051101655,BE
-1051101656,1051101671,NL
-1051101672,1051101687,BE
-1051101688,1051101719,NL
-1051101720,1051101735,BE
-1051101736,1051101783,NL
-1051101784,1051101807,BE
-1051101808,1051101823,NL
-1051101824,1051101855,BE
-1051101856,1051101919,NL
-1051101920,1051101927,BE
-1051101928,1051101959,NL
-1051101960,1051101967,BE
-1051101968,1051101983,NL
-1051101984,1051102007,BE
-1051102008,1051102055,NL
-1051102056,1051102071,BE
-1051102072,1051102079,NL
-1051102080,1051102087,BE
-1051102088,1051102095,NL
-1051102096,1051102103,BE
-1051102104,1051102119,NL
-1051102120,1051102159,BE
-1051102160,1051102207,NL
-1051102208,1051102879,BE
-1051102880,1051102887,NL
-1051102888,1051103007,BE
-1051103008,1051103015,NL
-1051103016,1051103111,BE
-1051103112,1051103119,NL
-1051103120,1051103207,BE
-1051103208,1051103215,NL
-1051103216,1051103231,BE
-1051103232,1051103233,NL
-1051103234,1051103247,BE
-1051103248,1051103287,NL
-1051103288,1051103295,BE
-1051103296,1051103359,NL
-1051103360,1051103367,BE
-1051103368,1051103431,NL
-1051103432,1051103447,BE
-1051103448,1051103487,NL
-1051103488,1051103495,BE
-1051103496,1051103503,NL
-1051103504,1051103519,BE
-1051103520,1051103527,NL
-1051103528,1051103535,BE
-1051103536,1051103543,NL
-1051103544,1051103567,BE
-1051103568,1051103583,NL
-1051103584,1051103607,BE
-1051103608,1051103639,NL
-1051103640,1051103647,BE
-1051103648,1051103663,NL
-1051103664,1051103679,BE
-1051103680,1051103687,NL
-1051103688,1051103703,BE
-1051103704,1051103767,NL
-1051103768,1051103775,BE
-1051103776,1051103799,NL
-1051103800,1051103815,BE
-1051103816,1051103823,NL
-1051103824,1051103831,BE
-1051103832,1051103863,NL
-1051103864,1051103871,BE
-1051103872,1051103879,NL
-1051103880,1051103887,BE
-1051103888,1051103911,NL
-1051103912,1051103927,BE
-1051103928,1051103959,NL
-1051103960,1051103975,BE
-1051103976,1051103991,NL
-1051103992,1051103999,BE
-1051104000,1051104015,NL
-1051104016,1051104039,BE
-1051104040,1051104071,NL
-1051104072,1051104079,BE
-1051104080,1051104111,NL
-1051104112,1051104143,BE
-1051104144,1051104167,NL
-1051104168,1051104183,BE
-1051104184,1051104191,NL
-1051104192,1051104199,BE
-1051104200,1051104231,NL
-1051104232,1051104255,BE
-1051104256,1051104311,NL
-1051104312,1051104319,BE
-1051104320,1051104327,NL
-1051104328,1051104335,BE
-1051104336,1051104351,NL
-1051104352,1051104367,BE
-1051104368,1051104383,NL
-1051104384,1051104399,BE
-1051104400,1051104503,NL
-1051104504,1051104527,BE
-1051104528,1051104559,NL
-1051104560,1051104567,BE
-1051104568,1051104583,NL
-1051104584,1051104599,BE
-1051104600,1051104607,NL
-1051104608,1051104631,BE
-1051104632,1051104679,NL
-1051104680,1051104695,BE
-1051104696,1051104719,NL
-1051104720,1051104727,BE
-1051104728,1051104751,NL
-1051104752,1051104759,BE
-1051104760,1051104791,NL
-1051104792,1051104799,BE
-1051104800,1051104823,NL
-1051104824,1051104831,BE
-1051104832,1051104839,NL
-1051104840,1051104863,BE
-1051104864,1051104903,NL
-1051104904,1051104911,BE
-1051104912,1051104935,NL
-1051104936,1051104943,BE
-1051104944,1051104951,NL
-1051104952,1051104967,BE
-1051104968,1051104975,NL
-1051104976,1051104983,BE
-1051104984,1051104991,NL
-1051104992,1051104999,BE
-1051105000,1051105047,NL
-1051105048,1051105055,BE
-1051105056,1051105063,NL
-1051105064,1051105079,BE
-1051105080,1051105103,NL
-1051105104,1051105119,BE
-1051105120,1051105127,NL
-1051105128,1051105135,BE
-1051105136,1051105143,NL
-1051105144,1051105151,BE
-1051105152,1051105183,NL
-1051105184,1051105199,BE
-1051105200,1051105207,NL
-1051105208,1051105223,BE
-1051105224,1051105255,NL
-1051105256,1051105263,BE
-1051105264,1051105271,NL
-1051105272,1051105279,BE
-1051105280,1051105319,NL
-1051105320,1051105327,BE
-1051105328,1051105359,NL
-1051105360,1051105383,BE
-1051105384,1051105439,NL
-1051105440,1051105455,BE
-1051105456,1051105503,NL
-1051105504,1051105511,BE
-1051105512,1051105519,NL
-1051105520,1051105551,BE
-1051105552,1051105599,NL
-1051105600,1051105607,BE
-1051105608,1051105703,NL
-1051105704,1051105711,BE
-1051105712,1051105791,NL
-1051105792,1051105799,BE
-1051105800,1051105807,NL
-1051105808,1051105815,BE
-1051105816,1051105831,NL
-1051105832,1051105839,BE
-1051105840,1051105863,NL
-1051105864,1051105871,BE
-1051105872,1051105895,NL
-1051105896,1051105903,BE
-1051105904,1051105911,NL
-1051105912,1051105943,BE
-1051105944,1051105967,NL
-1051105968,1051105983,BE
-1051105984,1051105999,NL
-1051106000,1051106023,BE
-1051106024,1051106031,NL
-1051106032,1051106039,BE
-1051106040,1051106047,NL
-1051106048,1051106055,BE
-1051106056,1051106071,NL
-1051106072,1051106079,BE
-1051106080,1051106087,NL
-1051106088,1051106103,BE
-1051106104,1051106111,NL
-1051106112,1051106119,BE
-1051106120,1051106127,NL
-1051106128,1051106143,BE
-1051106144,1051106167,NL
-1051106168,1051106175,BE
-1051106176,1051106183,NL
-1051106184,1051106191,BE
-1051106192,1051106247,NL
-1051106248,1051106271,BE
-1051106272,1051106303,NL
-1051106304,1051106311,BE
-1051106312,1051106319,NL
-1051106320,1051106327,BE
-1051106328,1051106335,NL
-1051106336,1051106351,BE
-1051106352,1051106383,NL
-1051106384,1051106399,BE
-1051106400,1051106423,NL
-1051106424,1051106431,BE
-1051106432,1051106463,NL
-1051106464,1051106471,BE
-1051106472,1051106503,NL
-1051106504,1051106519,BE
-1051106520,1051106527,NL
-1051106528,1051106535,BE
-1051106536,1051106543,NL
-1051106544,1051106551,BE
-1051106552,1051106583,NL
-1051106584,1051106599,BE
-1051106600,1051106607,NL
-1051106608,1051106615,BE
-1051106616,1051106639,NL
-1051106640,1051106655,BE
-1051106656,1051106663,NL
-1051106664,1051106671,BE
-1051106672,1051106711,NL
-1051106712,1051106719,BE
-1051106720,1051106759,NL
-1051106760,1051106767,BE
-1051106768,1051106775,NL
-1051106776,1051106783,BE
-1051106784,1051106799,NL
-1051106800,1051106807,BE
-1051106808,1051106823,NL
-1051106824,1051106831,BE
-1051106832,1051106847,NL
-1051106848,1051106863,BE
-1051106864,1051106895,NL
-1051106896,1051106911,BE
-1051106912,1051106927,NL
-1051106928,1051106935,BE
-1051106936,1051106943,NL
-1051106944,1051106951,BE
-1051106952,1051106959,NL
-1051106960,1051106967,BE
-1051106968,1051106975,NL
-1051106976,1051107007,BE
-1051107008,1051107015,NL
-1051107016,1051107039,BE
-1051107040,1051107055,NL
-1051107056,1051107063,BE
-1051107064,1051107071,NL
-1051107072,1051107095,BE
-1051107096,1051107103,NL
-1051107104,1051107119,BE
-1051107120,1051107127,NL
-1051107128,1051107135,BE
-1051107136,1051107143,NL
-1051107144,1051107167,BE
-1051107168,1051107183,NL
-1051107184,1051107215,BE
-1051107216,1051107223,NL
-1051107224,1051107231,BE
-1051107232,1051107239,NL
-1051107240,1051107247,BE
-1051107248,1051107279,NL
-1051107280,1051107287,BE
-1051107288,1051107295,NL
-1051107296,1051107303,BE
-1051107304,1051107311,NL
-1051107312,1051107327,BE
-1051107328,1051107329,NL
-1051107330,1051107359,BE
-1051107360,1051107375,NL
-1051107376,1051107383,BE
-1051107384,1051107391,NL
-1051107392,1051107407,BE
-1051107408,1051107423,NL
-1051107424,1051107455,BE
-1051107456,1051107519,NL
-1051107520,1051107839,BE
-1051107840,1051115519,NL
-1051115520,1051121287,BE
-1051121288,1051121295,NL
-1051121296,1051123711,BE
-1051123712,1051123839,NL
-1051123840,1051123855,BE
-1051123856,1051123911,NL
-1051123912,1051123935,BE
-1051123936,1051124479,NL
-1051124480,1051124607,BE
-1051124608,1051124767,NL
-1051124768,1051124815,BE
-1051124816,1051124895,NL
-1051124896,1051124911,BE
-1051124912,1051125247,NL
-1051125248,1051125759,BE
-1051125760,1051131903,NL
+1051066368,1051115519,NL
+1051115520,1051117055,BE
+1051117056,1051117567,NL
+1051117568,1051123711,BE
+1051123712,1051125471,NL
+1051125472,1051125479,BE
+1051125480,1051131903,NL
1051131904,1051197439,CH
1051197440,1051213823,CZ
1051213824,1051230207,SK
@@ -26826,31 +9104,13 @@
1051295744,1051303935,GB
1051303936,1051312127,SK
1051312128,1051328511,GR
-1051328512,1051460095,GB
-1051460096,1051460351,ES
-1051460352,1051525119,GB
+1051328512,1051525119,GB
1051525120,1051533311,MT
1051533312,1051541503,NG
-1051541504,1051549345,GB
-1051549346,1051549346,EU
-1051549347,1051557887,GB
+1051541504,1051557887,GB
1051557888,1051566079,RU
1051566080,1051574271,IT
-1051574272,1051574623,GB
-1051574624,1051574655,GM
-1051574656,1051577535,GB
-1051577536,1051577567,NL
-1051577568,1051577855,GB
-1051577856,1051578111,NL
-1051578112,1051578143,GB
-1051578144,1051578175,NL
-1051578176,1051578247,GB
-1051578248,1051578255,FR
-1051578256,1051578303,GB
-1051578304,1051578335,NL
-1051578336,1051584207,GB
-1051584208,1051584223,BE
-1051584224,1051590655,GB
+1051574272,1051590655,GB
1051590656,1051721727,ES
1051721728,1051729919,RU
1051729920,1051738111,FI
@@ -26864,278 +9124,32 @@
1051803648,1051820031,CZ
1051820032,1051852799,NL
1051852800,1051918335,AT
-1051918336,1051919359,PL
-1051919360,1051920383,AT
-1051920384,1051920895,PL
-1051920896,1051946367,AT
-1051946368,1051946383,NL
-1051946384,1051946399,CH
-1051946400,1051946415,NL
-1051946416,1051946431,CH
-1051946432,1051946447,NL
-1051946448,1051946463,CH
-1051946464,1051946479,NL
-1051946480,1051946495,CH
-1051946496,1051949823,AT
-1051949824,1051949951,NL
-1051949952,1051983871,AT
-1051983872,1051984639,EU
-1051984640,1051984655,DE
-1051984656,1051986687,EU
-1051986688,1051986943,DE
-1051986944,1051990015,EU
+1051918336,1051918591,PL
+1051918592,1051919359,AT
+1051919360,1051920383,PL
+1051920384,1051920895,AT
+1051920896,1051921919,PL
+1051921920,1051922431,AT
+1051922432,1051924479,CH
+1051924480,1051948031,AT
+1051948032,1051949055,CH
+1051949056,1051949823,AT
+1051949824,1051950079,NL
+1051950080,1051983871,AT
1051990016,1051991039,DE
-1051991040,1051991807,EU
-1051991808,1051991935,DE
-1051991936,1051994623,EU
-1051994624,1051994639,DE
-1051994640,1051994647,EU
-1051994648,1051994671,DE
-1051994672,1051994699,EU
-1051994700,1051994703,BE
-1051994704,1051994715,EU
-1051994716,1051994719,DE
-1051994720,1051994751,BE
-1051994752,1051994791,EU
-1051994792,1051994799,NL
-1051994800,1051994831,DE
-1051994832,1051994863,EU
-1051994864,1051994871,DE
-1051994872,1051994943,EU
-1051994944,1051995055,DE
-1051995056,1051996335,EU
-1051996336,1051996351,DE
-1051996352,1051996879,EU
-1051996880,1051996927,DE
-1051996928,1051997439,EU
-1051997440,1051997695,DE
-1051997696,1051997711,EU
-1051997712,1051997727,DE
-1051997728,1051997951,EU
-1051997952,1051997983,DE
-1051997984,1051998247,EU
-1051998248,1051998255,DE
-1051998256,1051998687,EU
-1051998688,1051998695,DE
-1051998696,1051999039,EU
-1051999040,1051999043,DE
-1051999044,1051999135,EU
-1051999136,1051999151,DE
-1051999152,1051999167,EU
-1051999168,1051999359,DE
-1051999360,1051999487,EU
-1051999488,1051999743,DE
-1051999744,1051999999,EU
-1052000000,1052000063,DE
-1052000064,1052000127,EU
-1052000128,1052000143,DE
-1052000144,1052000191,EU
-1052000192,1052000511,DE
-1052000512,1052000519,EU
-1052000520,1052000527,DE
-1052000528,1052000535,EU
-1052000536,1052000539,DE
-1052000540,1052000583,EU
-1052000584,1052000623,DE
-1052000624,1052000631,EU
-1052000632,1052002559,DE
-1052002560,1052003327,EU
-1052003328,1052003839,DE
-1052003840,1052003967,EU
-1052003968,1052003999,DE
-1052004000,1052004671,EU
-1052004672,1052004687,DE
-1052004688,1052004703,EU
-1052004704,1052004735,DE
-1052004736,1052004751,EU
-1052004752,1052004759,DE
-1052004760,1052004767,EU
-1052004768,1052004783,DE
-1052004784,1052004815,EU
-1052004816,1052004831,DE
-1052004832,1052004895,EU
-1052004896,1052004959,DE
-1052004960,1052005119,EU
-1052005120,1052005151,DE
-1052005152,1052005247,EU
-1052005248,1052005631,DE
-1052005632,1052005887,EU
-1052005888,1052005911,DE
-1052005912,1052006543,EU
-1052006544,1052006559,DE
-1052006560,1052007039,EU
-1052007040,1052007103,DE
-1052007104,1052007431,EU
-1052007432,1052007435,DE
-1052007436,1052007455,EU
-1052007456,1052007471,DE
-1052007472,1052007519,EU
-1052007520,1052007535,DE
-1052007536,1052007775,EU
-1052007776,1052007791,DE
-1052007792,1052007935,EU
-1052007936,1052008223,DE
-1052008224,1052008515,EU
-1052008516,1052008527,DE
-1052008528,1052008543,EU
-1052008544,1052008583,DE
-1052008584,1052008607,EU
-1052008608,1052008623,DE
-1052008624,1052008671,EU
-1052008672,1052008687,DE
-1052008688,1052008703,EU
-1052008704,1052009087,DE
-1052009088,1052009471,EU
-1052009472,1052009487,DE
-1052009488,1052009503,EU
-1052009504,1052009535,DE
-1052009536,1052010463,EU
-1052010464,1052010519,DE
-1052010520,1052010623,EU
-1052010624,1052010655,DE
-1052010656,1052010751,EU
-1052010752,1052011135,DE
-1052011136,1052011263,EU
-1052011264,1052012287,DE
-1052012288,1052012303,EU
-1052012304,1052012335,DE
-1052012336,1052012383,EU
-1052012384,1052012399,DE
-1052012400,1052012543,EU
-1052012544,1052013055,DE
-1052013056,1052013071,EU
-1052013072,1052013087,DE
-1052013088,1052013119,EU
-1052013120,1052013127,DE
-1052013128,1052013143,EU
-1052013144,1052013151,DE
-1052013152,1052013215,EU
-1052013216,1052013263,DE
-1052013264,1052013311,EU
-1052013312,1052013567,DE
-1052013568,1052013695,EU
-1052013696,1052013823,DE
-1052013824,1052013847,EU
-1052013848,1052013855,DE
-1052013856,1052013887,EU
-1052013888,1052013951,DE
-1052013952,1052013959,EU
-1052013960,1052013963,DE
-1052013964,1052014111,EU
-1052014112,1052014239,DE
-1052014240,1052014271,EU
-1052014272,1052014303,DE
-1052014304,1052015367,EU
-1052015368,1052015375,DE
-1052015376,1052015423,EU
-1052015424,1052015519,DE
-1052015520,1052015551,EU
-1052015552,1052015583,DE
-1052015584,1052015631,EU
-1052015632,1052015647,DE
-1052015648,1052015695,EU
-1052015696,1052015727,DE
-1052015728,1052015999,EU
-1052016000,1052016127,DE
-1052016128,1052016207,EU
-1052016208,1052016223,DE
-1052016224,1052016239,EU
-1052016240,1052016247,DE
-1052016248,1052016255,EU
-1052016256,1052016323,DE
-1052016324,1052016447,EU
-1052016448,1052016463,DE
-1052016464,1052016479,EU
-1052016480,1052016511,DE
-1052016512,1052016679,EU
-1052016680,1052016687,DE
-1052016688,1052016895,EU
-1052016896,1052017151,DE
-1052017152,1052017231,EU
-1052017232,1052017247,DE
-1052017248,1052017471,EU
-1052017472,1052017503,DE
-1052017504,1052017535,EU
+1052001280,1052002303,DE
+1052003584,1052003839,DE
+1052011264,1052012031,DE
1052017536,1052017663,DE
-1052017664,1052018167,EU
-1052018168,1052018431,DE
-1052018432,1052018719,EU
-1052018720,1052018767,DE
-1052018768,1052019199,EU
-1052019200,1052019455,DE
-1052019456,1052019735,EU
-1052019736,1052019775,DE
-1052019776,1052019903,EU
-1052019904,1052020047,DE
-1052020048,1052020672,EU
-1052020673,1052020702,DE
-1052020703,1052020703,EU
-1052020704,1052020735,DE
-1052020736,1052022527,EU
-1052022528,1052022783,DE
-1052022784,1052041215,EU
-1052041216,1052041599,DE
-1052041600,1052041727,EU
-1052041728,1052041863,DE
-1052041864,1052041983,EU
-1052041984,1052042095,DE
-1052042096,1052042143,EU
-1052042144,1052042191,DE
-1052042192,1052042223,EU
-1052042224,1052042239,DE
-1052042240,1052042303,EU
-1052042304,1052042311,DE
-1052042312,1052042367,EU
-1052042368,1052042431,DE
-1052042432,1052042479,EU
-1052042480,1052042751,DE
-1052042752,1052042815,EU
-1052042816,1052042863,DE
-1052042864,1052043007,EU
-1052043008,1052043103,DE
-1052043104,1052043111,EU
-1052043112,1052043263,DE
-1052043264,1052043527,EU
-1052043528,1052043535,DE
-1052043536,1052043551,EU
-1052043552,1052043575,DE
-1052043576,1052043583,EU
-1052043584,1052043651,DE
-1052043652,1052043663,EU
-1052043664,1052043679,DE
-1052043680,1052043759,EU
-1052043760,1052043775,DE
-1052043776,1052044287,EU
-1052044288,1052044351,DE
-1052044352,1052044383,EU
-1052044384,1052044399,DE
-1052044400,1052044415,EU
-1052044416,1052044447,DE
-1052044448,1052044511,EU
-1052044512,1052044527,DE
-1052044528,1052044543,EU
-1052044544,1052044927,DE
-1052044928,1052045023,EU
-1052045024,1052045183,DE
-1052045184,1052045311,EU
-1052045312,1052046135,DE
-1052046136,1052046335,EU
-1052046336,1052046591,DE
-1052046592,1052046847,EU
-1052046848,1052047139,DE
-1052047140,1052049151,EU
-1052049152,1052049183,DE
-1052049184,1052049407,EU
+1052019712,1052019967,GB
+1052045312,1052046079,DE
1052049408,1052057599,PL
1052057600,1052065791,RU
-1052065792,1052082175,SE
+1052065792,1052081151,SE
+1052081152,1052082175,NL
1052082176,1052090367,DE
1052090368,1052098559,PL
-1052098560,1052103575,SE
-1052103576,1052103583,DK
-1052103584,1052104095,SE
-1052104096,1052104127,DK
-1052104128,1052116991,SE
+1052098560,1052116991,SE
1052116992,1052119039,RU
1052119040,1052121087,RO
1052121088,1052125183,RU
@@ -27145,7 +9159,7 @@
1052133376,1052135423,RU
1052135424,1052137471,UA
1052137472,1052139519,RU
-1052139520,1052141567,DE
+1052141056,1052141567,DE
1052141568,1052143615,PL
1052143616,1052145663,BG
1052145664,1052147711,UA
@@ -27153,7 +9167,9 @@
1052151808,1052153855,PL
1052153856,1052157951,UA
1052157952,1052159999,DK
-1052160000,1052162047,LU
+1052160000,1052160703,LU
+1052160704,1052161215,BE
+1052161216,1052162047,LU
1052162048,1052164095,CH
1052164096,1052168191,RU
1052168192,1052170239,PL
@@ -27164,847 +9180,52 @@
1052178432,1052180479,DK
1052180480,1052213247,RU
1052213248,1052246015,FI
-1052246016,1052247039,DE
-1052247040,1052247295,FR
-1052247296,1052247359,DE
-1052247360,1052247391,FR
-1052247392,1052247407,DE
-1052247408,1052247415,GB
-1052247416,1052247423,NL
-1052247424,1052247551,GB
-1052247552,1052248095,DE
-1052248096,1052248127,ZA
-1052248128,1052248135,FR
-1052248136,1052248143,DE
-1052248144,1052248159,BE
-1052248160,1052249375,DE
-1052249376,1052249407,IT
-1052249408,1052249471,DE
-1052249472,1052249503,ZA
-1052249504,1052250655,DE
-1052250656,1052250687,GB
-1052250688,1052250719,IL
-1052250720,1052250735,IT
-1052250736,1052250751,NL
-1052250752,1052252863,DE
-1052252864,1052252879,GB
-1052252880,1052252895,ZA
-1052252896,1052252927,IT
-1052252928,1052254207,DE
-1052254208,1052255255,NL
-1052255256,1052255263,GB
-1052255264,1052255871,NL
-1052255872,1052255935,GB
-1052255936,1052257279,NL
-1052257280,1052257791,FR
-1052257792,1052258303,AT
-1052258304,1052260623,FR
-1052260624,1052260631,ZA
-1052260632,1052260639,AT
-1052260640,1052260735,FR
-1052260736,1052260863,NL
-1052260864,1052260895,TR
-1052260896,1052261055,FR
-1052261056,1052261119,NL
-1052261120,1052262399,FR
-1052262400,1052263423,DK
-1052263424,1052263935,DE
-1052263936,1052264447,DK
-1052264448,1052264639,SE
-1052264640,1052264703,IT
-1052264704,1052265471,SE
-1052265472,1052265519,IT
-1052265520,1052265535,GB
-1052265536,1052265599,DE
-1052265600,1052265983,IT
-1052265984,1052266239,DE
-1052266240,1052266495,GB
-1052266496,1052268543,BE
-1052268544,1052268607,ZA
-1052268608,1052268671,BE
-1052268672,1052268703,IT
-1052268704,1052268719,ZA
-1052268720,1052268735,NL
-1052268736,1052268799,DE
-1052268800,1052270591,ZA
-1052270592,1052271871,FR
-1052271872,1052272127,BE
-1052272128,1052272543,FR
-1052272544,1052272575,AT
-1052272576,1052272639,SE
-1052272640,1052274175,FR
-1052274176,1052274687,ZA
-1052274688,1052274943,ES
-1052274944,1052275199,IT
-1052275200,1052275711,AT
-1052275712,1052276735,GB
-1052276736,1052278207,IT
-1052278208,1052278271,GB
-1052278272,1052278783,IT
-1052278784,1052278823,CH
-1052278824,1052278831,GB
-1052278832,1052278847,AT
-1052278848,1052278863,ZA
-1052278864,1052278879,NL
-1052278880,1052284607,GB
-1052284608,1052284671,EU
-1052284672,1052286975,GB
-1052286976,1052287487,CH
-1052287488,1052288255,SE
-1052288256,1052288287,EU
-1052288288,1052288295,IL
-1052288296,1052288303,BE
-1052288304,1052288319,AT
-1052288320,1052288383,EU
-1052288384,1052288511,FR
-1052288512,1052289023,AT
-1052289024,1052289151,GB
-1052289152,1052289183,CH
-1052289184,1052289215,DE
-1052289216,1052289279,GB
-1052289280,1052289535,EU
-1052289536,1052290047,GB
-1052290048,1052290063,CH
-1052290064,1052290303,GB
-1052290304,1052290367,EU
-1052290368,1052290399,CH
-1052290400,1052290431,ZA
-1052290432,1052290559,FR
-1052290560,1052290575,GB
-1052290576,1052290591,BE
-1052290592,1052290639,GB
-1052290640,1052290655,ZA
-1052290656,1052290687,DE
-1052290688,1052290815,GB
-1052290816,1052290831,CH
-1052290832,1052291327,GB
-1052291328,1052291583,CH
-1052291584,1052291679,FI
-1052291680,1052291687,TR
-1052291688,1052291695,GB
-1052291696,1052291711,CH
-1052291712,1052292095,FR
-1052292096,1052299263,GB
-1052299264,1052299775,EU
-1052299776,1052303359,GB
-1052303360,1052307455,DE
-1052307456,1052309247,CH
-1052309248,1052309503,NO
+1052259328,1052260351,FR
+1052279808,1052282879,GB
+1052284928,1052286975,GB
+1052293120,1052298239,GB
+1052303360,1052305407,DE
+1052306432,1052307455,DE
1052309504,1052310527,CH
-1052310528,1052310783,FR
-1052310784,1052311039,AT
-1052311040,1052311551,GB
-1052311552,1052311615,DE
-1052311616,1052311679,BE
-1052311680,1052311871,DE
-1052311872,1052311895,BE
-1052311896,1052311903,NL
-1052311904,1052311935,IT
-1052311936,1052311967,GB
-1052311968,1052311999,DE
-1052312000,1052312063,CH
-1052312064,1052312767,DE
-1052312768,1052312831,EU
-1052312832,1052312895,DE
-1052312896,1052312903,CH
-1052312904,1052312911,ES
-1052312912,1052312927,CH
-1052312928,1052313087,GB
-1052313088,1052314751,DE
-1052314752,1052314815,ES
-1052314816,1052314823,DE
-1052314824,1052314831,ES
-1052314832,1052314847,IT
-1052314848,1052315071,DE
-1052315072,1052315103,IT
-1052315104,1052315135,AT
-1052315136,1052315551,DE
-1052315552,1052315583,ES
-1052315584,1052315647,GB
-1052315648,1052316319,DE
-1052316320,1052316335,NL
-1052316336,1052316767,DE
-1052316768,1052316799,IT
-1052316800,1052316927,DE
-1052316928,1052317183,EU
-1052317184,1052317599,DE
-1052317600,1052317607,BE
-1052317608,1052317615,DE
-1052317616,1052317631,GB
-1052317632,1052317663,IT
-1052317664,1052318047,DE
-1052318048,1052318079,ES
-1052318080,1052318207,SE
-1052318208,1052318719,DE
-1052318720,1052319231,EU
-1052319232,1052319743,DE
-1052319744,1052319999,EU
-1052320000,1052320079,GB
-1052320080,1052320087,CZ
-1052320088,1052320095,GB
-1052320096,1052320127,ZA
-1052320128,1052320255,BE
-1052320256,1052322239,GB
-1052322240,1052322303,CH
-1052322304,1052323871,GB
-1052323872,1052323903,CH
-1052323904,1052324927,GB
-1052324928,1052324943,ZA
-1052324944,1052324959,NL
-1052324960,1052324991,ES
-1052324992,1052325191,GB
-1052325192,1052325199,DE
-1052325200,1052325215,AT
-1052325216,1052325247,ZA
-1052325248,1052325311,GB
-1052325312,1052325375,NL
-1052325376,1052325567,GB
-1052325568,1052325631,ZA
-1052325632,1052327935,GB
-1052327936,1052328223,CH
-1052328224,1052328255,IT
-1052328256,1052328319,ES
-1052328320,1052328447,DE
-1052328448,1052328639,CH
-1052328640,1052328671,ZA
-1052328672,1052328703,ES
-1052328704,1052329983,CH
-1052329984,1052330239,DE
-1052330240,1052331167,CH
-1052331168,1052331183,GB
-1052331184,1052331199,CH
-1052331200,1052331263,GB
-1052331264,1052331615,CH
-1052331616,1052331647,AT
-1052331648,1052331711,CH
-1052331712,1052331743,GB
-1052331744,1052332031,CH
-1052332032,1052333103,IT
-1052333104,1052333119,CH
-1052333120,1052333183,FR
-1052333184,1052333311,ZA
-1052333312,1052333567,EU
-1052333568,1052334751,IT
-1052334752,1052334759,NL
-1052334760,1052334767,ZA
-1052334768,1052334815,GB
-1052334816,1052334847,ZA
-1052334848,1052335423,IT
-1052335424,1052335455,NL
-1052335456,1052335519,ES
-1052335520,1052335535,ZA
-1052335536,1052335551,DE
-1052335552,1052335615,AT
-1052335616,1052336127,BE
-1052336128,1052336255,FR
-1052336256,1052336383,GB
-1052336384,1052337343,FR
-1052337344,1052337375,DE
-1052337376,1052337759,FR
-1052337760,1052337887,GB
-1052337888,1052337903,ZA
-1052337904,1052337911,NL
-1052337912,1052337919,ZA
-1052337920,1052340111,FR
-1052340112,1052340127,ES
-1052340128,1052340135,NL
-1052340136,1052340223,FR
-1052340224,1052340527,AT
-1052340528,1052340543,BE
-1052340544,1052340575,IT
-1052340576,1052340607,NL
+1052313600,1052314623,DE
+1052317312,1052317343,DE
+1052325888,1052327935,GB
+1052328960,1052329983,CH
+1052338176,1052339199,FR
1052340608,1052340671,HU
-1052340672,1052340703,GB
-1052340704,1052340719,ZA
-1052340720,1052340735,GB
-1052340736,1052340767,AT
-1052340768,1052340799,DE
-1052340800,1052340863,GB
-1052340864,1052341247,AT
-1052341248,1052341503,DE
-1052341504,1052342271,AT
-1052342272,1052342303,SE
-1052342304,1052342335,CH
-1052342336,1052342463,SE
-1052342464,1052342471,ZA
-1052342472,1052342479,GB
-1052342480,1052342495,ZA
-1052342496,1052342527,FR
-1052342528,1052343647,CH
-1052343648,1052343655,NL
-1052343656,1052343663,GB
-1052343664,1052343679,DE
-1052343680,1052344319,CH
-1052344320,1052344863,NL
-1052344864,1052344895,ES
-1052344896,1052344959,IT
-1052344960,1052345087,CH
-1052345088,1052345135,NL
-1052345136,1052345151,GB
-1052345152,1052345247,FR
-1052345248,1052345279,IT
-1052345280,1052345343,DE
-1052345344,1052345471,NL
-1052345472,1052345487,EU
-1052345488,1052345503,NL
-1052345504,1052345535,ZA
-1052345536,1052345551,AT
-1052345552,1052345567,GB
-1052345568,1052345631,NL
-1052345632,1052345663,IT
-1052345664,1052345695,HU
-1052345696,1052345727,PT
-1052345728,1052345855,AT
-1052345856,1052346903,NL
-1052346904,1052346911,BE
-1052346912,1052346943,ZA
-1052346944,1052347007,ES
-1052347008,1052347135,DE
-1052347136,1052347391,NL
1052347392,1052348415,CH
-1052348416,1052348799,GB
-1052348800,1052348831,DE
-1052348832,1052348863,CH
-1052348864,1052348879,DE
-1052348880,1052348895,GB
-1052348896,1052348927,DE
-1052348928,1052349119,GB
-1052349120,1052349151,BE
-1052349152,1052349343,GB
-1052349344,1052349375,DE
-1052349376,1052349407,GB
-1052349408,1052349439,ZA
-1052349440,1052352559,GB
-1052352560,1052352591,ZA
-1052352592,1052352607,GB
-1052352608,1052352639,EU
-1052352640,1052352703,GB
-1052352704,1052352767,DE
-1052352768,1052352927,GB
-1052352928,1052352959,IT
-1052352960,1052352991,ES
-1052352992,1052353023,BE
-1052353024,1052353279,IT
-1052353280,1052353407,DE
-1052353408,1052353535,EU
-1052353536,1052354111,DE
-1052354112,1052354175,TR
-1052354176,1052354559,DE
+1052350464,1052352511,GB
1052354560,1052356607,GB
-1052356608,1052356703,ZA
-1052356704,1052356735,ES
-1052356736,1052356799,RU
-1052356800,1052356863,IE
-1052356864,1052358479,ZA
-1052358480,1052358495,GB
-1052358496,1052358511,AT
-1052358512,1052358527,ZA
-1052358528,1052358655,DE
-1052358656,1052359839,ZA
-1052359840,1052359871,IE
-1052359872,1052359935,IT
-1052359936,1052360735,ZA
-1052360736,1052360743,GB
-1052360744,1052360767,ZA
-1052360768,1052360783,DE
-1052360784,1052360831,IT
-1052360832,1052360959,GB
-1052360960,1052360991,FR
-1052360992,1052361023,BE
-1052361024,1052361039,ZA
-1052361040,1052361055,NL
-1052361056,1052361087,DE
-1052361088,1052361151,ES
-1052361152,1052361215,GB
-1052361216,1052361471,ZA
-1052361472,1052361647,BE
-1052361648,1052361655,GB
-1052361656,1052361663,DE
-1052361664,1052361695,BE
-1052361696,1052361727,CH
-1052361728,1052361919,IT
-1052361920,1052361951,ZA
-1052361952,1052361967,IT
-1052361968,1052361983,ZA
-1052361984,1052362239,IT
-1052362240,1052362751,DK
-1052362752,1052362783,ES
-1052362784,1052362815,GB
-1052362816,1052362879,CH
-1052362880,1052363039,ES
-1052363040,1052363071,EU
-1052363072,1052363135,GB
-1052363136,1052363263,ES
-1052363264,1052364543,DE
-1052364544,1052364671,BE
-1052364672,1052364687,DE
-1052364688,1052364695,GB
-1052364696,1052364703,NL
-1052364704,1052364799,GB
-1052364800,1052366207,BE
-1052366208,1052366271,IE
-1052366272,1052366335,GB
-1052366336,1052366655,BE
-1052366656,1052366719,DE
-1052366720,1052367871,BE
-1052367872,1052368895,DK
-1052368896,1052369023,IE
-1052369024,1052369039,IT
-1052369040,1052369055,DE
-1052369056,1052369087,ZA
-1052369088,1052369151,IT
-1052369152,1052369407,IE
-1052369408,1052369663,HU
-1052369664,1052369855,CZ
-1052369856,1052369887,EU
+1052358432,1052358463,ZA
+1052366848,1052367871,BE
1052369888,1052369919,CZ
-1052369920,1052370175,NO
-1052370176,1052370431,DK
-1052370432,1052370559,SE
-1052370560,1052370623,DE
-1052370624,1052370687,IT
-1052370688,1052370943,DK
-1052370944,1052372255,GB
-1052372256,1052372287,ZA
-1052372288,1052372351,FI
-1052372352,1052374015,GB
1052374016,1052375039,CH
-1052375040,1052375551,DE
-1052375552,1052375679,EU
-1052375680,1052375711,DE
-1052375712,1052375807,FR
-1052375808,1052376063,DE
-1052376064,1052376319,EU
-1052376320,1052376831,DE
-1052376832,1052377087,ES
-1052377088,1052377535,DE
-1052377536,1052377599,NO
-1052377600,1052377743,FR
-1052377744,1052377759,NL
-1052377760,1052377791,ZA
-1052377792,1052377855,GB
-1052377856,1052377871,DE
-1052377872,1052377887,CH
-1052377888,1052377919,EU
-1052377920,1052377951,DE
-1052377952,1052377983,FR
-1052377984,1052378047,GB
-1052378048,1052378079,FR
-1052378080,1052378111,NL
-1052378112,1052378983,DE
-1052378984,1052378991,NO
-1052378992,1052379031,GB
-1052379032,1052379039,DE
-1052379040,1052379103,GB
-1052379104,1052379135,SE
-1052379136,1052379391,EU
-1052379392,1052379791,DE
-1052379792,1052379799,GB
-1052379800,1052379807,NL
-1052379808,1052379839,DE
-1052379840,1052379903,ZA
-1052379904,1052380063,GB
-1052380064,1052380127,DE
-1052380128,1052380159,NL
-1052380160,1052381183,DE
-1052381184,1052381439,EU
-1052381440,1052382623,DE
-1052382624,1052382655,EU
-1052382656,1052382719,ES
-1052382720,1052382975,DE
-1052382976,1052383999,GB
-1052384000,1052384255,NL
-1052384256,1052385279,GB
-1052385280,1052385535,DE
-1052385536,1052385615,GB
-1052385616,1052385631,ZA
-1052385632,1052385695,GB
-1052385696,1052385791,FR
-1052385792,1052388863,GB
-1052388864,1052389119,NL
-1052389120,1052390431,GB
-1052390432,1052390447,ZA
-1052390448,1052390455,GB
-1052390456,1052390463,IT
-1052390464,1052393471,GB
-1052393472,1052393599,CH
-1052393600,1052393695,FR
-1052393696,1052394271,CH
-1052394272,1052394303,ZA
-1052394304,1052394367,GB
-1052394368,1052395263,CH
-1052395264,1052395679,GB
-1052395680,1052395743,DE
-1052395744,1052395775,ES
-1052395776,1052396031,NL
-1052396032,1052396543,CH
-1052396544,1052396607,SE
-1052396608,1052396671,BE
-1052396672,1052396799,SE
-1052396800,1052396863,TR
-1052396864,1052396927,RO
-1052396928,1052397439,HU
-1052397440,1052397567,EU
-1052397568,1052399039,IT
-1052399040,1052399103,NO
-1052399104,1052399903,IT
-1052399904,1052399919,DE
-1052399920,1052399927,NL
-1052399928,1052399935,FR
-1052399936,1052399999,IT
-1052400000,1052400127,BE
-1052400128,1052401151,IT
-1052401152,1052401279,BE
-1052401280,1052401311,IT
-1052401312,1052401343,AT
-1052401344,1052401407,ZA
-1052401408,1052401599,BE
-1052401600,1052401631,GB
-1052401632,1052401663,RU
-1052401664,1052402047,FR
-1052402048,1052402175,NL
-1052402176,1052402271,FR
-1052402272,1052402303,IT
-1052402304,1052402367,GB
-1052402368,1052403359,FR
-1052403360,1052403391,DE
-1052403392,1052403407,IT
-1052403408,1052403415,GB
-1052403416,1052403423,NL
-1052403424,1052403455,RO
-1052403456,1052403727,FR
-1052403728,1052403743,NL
-1052403744,1052403775,FR
-1052403776,1052403807,ZA
-1052403808,1052403839,EU
-1052403840,1052403967,CH
-1052403968,1052404383,FR
-1052404384,1052404399,ZA
-1052404400,1052404447,FR
-1052404448,1052404479,GB
-1052404480,1052404767,FR
-1052404768,1052404783,ZA
-1052404784,1052404799,GB
-1052404800,1052404863,FR
-1052404864,1052404991,GB
-1052404992,1052405759,FR
-1052405760,1052407519,AT
-1052407520,1052407535,FR
-1052407536,1052407551,SE
-1052407552,1052407839,AT
-1052407840,1052407871,ZA
-1052407872,1052407887,DE
-1052407888,1052407903,ZA
-1052407904,1052407935,DE
-1052407936,1052408159,AT
-1052408160,1052408383,GB
-1052408384,1052408447,BE
-1052408448,1052408511,FR
-1052408512,1052408575,GB
-1052408576,1052408831,AT
-1052408832,1052409855,GB
-1052409856,1052409863,NL
-1052409864,1052409871,DE
-1052409872,1052409951,NL
-1052409952,1052409983,BE
-1052409984,1052410047,GB
-1052410048,1052410111,BE
-1052410112,1052411135,EU
-1052411136,1052412327,NL
-1052412328,1052412335,EU
-1052412336,1052412343,NL
-1052412344,1052412351,GB
-1052412352,1052412415,CH
-1052412416,1052412671,EU
-1052412672,1052412831,NL
-1052412832,1052412863,DE
-1052412864,1052413951,NL
-1052413952,1052414335,CZ
-1052414336,1052414463,EU
-1052414464,1052414975,IE
-1052414976,1052415999,BE
-1052416000,1052416575,DE
-1052416576,1052416639,ZA
-1052416640,1052416671,GB
-1052416672,1052416703,DE
-1052416704,1052416735,IT
-1052416736,1052416767,DE
-1052416768,1052417071,NO
-1052417072,1052417087,DE
-1052417088,1052417119,AT
-1052417120,1052417151,IT
-1052417152,1052417279,GB
-1052417280,1052417359,NO
-1052417360,1052417367,EU
-1052417368,1052417535,NO
-1052417536,1052418047,ZA
-1052418048,1052419583,BE
-1052419584,1052420031,IT
-1052420032,1052420063,EU
-1052420064,1052420095,IT
-1052420096,1052420735,GB
-1052420736,1052420767,DE
-1052420768,1052420783,GB
-1052420784,1052420799,ZA
-1052420800,1052420863,DE
-1052420864,1052422143,GB
-1052422144,1052422847,ZA
-1052422848,1052422863,SE
-1052422864,1052422879,FR
-1052422880,1052423199,ZA
-1052423200,1052423231,CH
-1052423232,1052423295,ZA
-1052423296,1052423303,EU
-1052423304,1052423311,CH
-1052423312,1052423359,EU
-1052423360,1052423423,NL
-1052423424,1052423967,ZA
-1052423968,1052423999,EU
-1052424000,1052424799,ZA
-1052424800,1052424815,GB
-1052424816,1052424823,ES
-1052424824,1052424831,BE
-1052424832,1052424959,GB
-1052424960,1052425151,ZA
-1052425152,1052425215,BE
+1052378944,1052378959,DE
+1052387328,1052388351,GB
+1052397312,1052397439,HU
+1052405248,1052405503,FR
+1052405760,1052406783,AT
+1052407856,1052407871,ZA
+1052421120,1052422143,GB
1052425216,1052426239,ZA
-1052426240,1052426319,PT
-1052426320,1052426327,EU
-1052426328,1052426495,PT
-1052426496,1052426511,EU
-1052426512,1052426527,FR
-1052426528,1052426751,EU
-1052426752,1052427263,NL
-1052427264,1052427839,CH
-1052427840,1052427855,GB
-1052427856,1052427871,IT
-1052427872,1052427903,AT
-1052427904,1052427967,DE
-1052427968,1052428031,GB
-1052428032,1052428287,CH
-1052428288,1052428479,ES
-1052428480,1052428543,BE
-1052428544,1052429407,ES
-1052429408,1052429439,FR
-1052429440,1052429567,BE
-1052429568,1052429759,ES
-1052429760,1052429823,DE
-1052429824,1052430335,ES
-1052430336,1052430407,BE
-1052430408,1052430415,ZA
-1052430416,1052430431,FR
-1052430432,1052430463,DE
-1052430464,1052430527,BE
-1052430528,1052430591,DE
-1052430592,1052433407,BE
-1052433408,1052433719,DK
-1052433720,1052433727,FR
-1052433728,1052433919,DK
-1052433920,1052434431,ZA
-1052434432,1052434751,GB
-1052434752,1052434783,NO
-1052434784,1052435455,GB
-1052435456,1052435647,NL
-1052435648,1052435679,EU
-1052435680,1052436479,NL
-1052436480,1052437023,DE
-1052437024,1052437055,ZA
-1052437056,1052437119,DE
-1052437120,1052437135,ZA
-1052437136,1052437151,DE
-1052437152,1052437183,GB
-1052437184,1052437247,ZA
-1052437248,1052437759,DE
-1052437760,1052438015,CH
-1052438016,1052438399,BE
-1052438400,1052438527,EU
-1052438528,1052439503,AT
-1052439504,1052439519,EU
-1052439520,1052439551,AT
-1052439552,1052440575,FR
-1052440576,1052441343,DE
-1052441344,1052441599,EU
-1052441600,1052442623,GB
-1052442624,1052443647,DE
-1052443648,1052446207,EU
-1052446208,1052446719,DE
-1052446720,1052447743,CZ
-1052447744,1052447871,PL
-1052447872,1052447999,EU
-1052448000,1052448127,PL
-1052448128,1052448255,EU
-1052448256,1052450815,ZA
-1052450816,1052451839,DE
-1052451840,1052452159,NO
-1052452160,1052452223,EU
-1052452224,1052452351,NO
-1052452352,1052452831,ES
-1052452832,1052452847,GB
-1052452848,1052452863,FR
-1052452864,1052452991,EU
-1052452992,1052452999,SK
-1052453000,1052453119,EU
-1052453120,1052453375,FR
-1052453376,1052453887,AT
-1052453888,1052454911,GB
-1052454912,1052454943,FR
-1052454944,1052454959,NL
-1052454960,1052454975,EU
-1052454976,1052455359,NL
-1052455360,1052455423,EU
-1052455424,1052455935,GB
-1052455936,1052456447,NL
-1052456448,1052456959,CH
-1052456960,1052457983,NL
-1052457984,1052458367,AT
-1052458368,1052458431,EU
-1052458432,1052458495,AT
-1052458496,1052458847,NL
-1052458848,1052458863,FR
-1052458864,1052458871,NL
-1052458872,1052458879,FR
-1052458880,1052460031,GB
-1052460032,1052460127,NO
-1052460128,1052460223,EU
-1052460224,1052460287,FR
-1052460288,1052460543,EU
-1052460544,1052460799,NO
-1052460800,1052461055,DE
-1052461056,1052461295,FR
-1052461296,1052461311,BE
-1052461312,1052461951,FR
-1052461952,1052461967,EU
-1052461968,1052463103,FR
-1052463104,1052463615,ES
-1052463616,1052464639,GB
-1052464640,1052464927,ES
-1052464928,1052464959,EU
-1052464960,1052465087,ES
-1052465088,1052465151,EU
-1052465152,1052465375,ZA
-1052465376,1052465407,EU
-1052465408,1052465663,ZA
-1052465664,1052466431,EU
-1052466432,1052468223,FR
-1052468224,1052469247,GB
-1052469248,1052470271,FR
-1052470272,1052470783,ZA
-1052470784,1052471007,FR
-1052471008,1052471039,EU
-1052471040,1052471295,BE
-1052471296,1052472511,GB
-1052472512,1052472575,EU
-1052472576,1052475231,GB
-1052475232,1052475239,EU
-1052475240,1052475255,GB
-1052475256,1052475263,EU
-1052475264,1052475391,GB
-1052475392,1052476383,FR
-1052476384,1052476415,EU
-1052476416,1052479487,FR
-1052479488,1052479743,NL
-1052479744,1052479999,DE
-1052480000,1052483583,NL
-1052483584,1052483999,IT
-1052484000,1052484031,EU
-1052484032,1052485279,IT
-1052485280,1052485311,EU
-1052485312,1052485631,IT
-1052485632,1052486655,GB
-1052486656,1052486911,CH
-1052486912,1052486975,DE
-1052486976,1052487039,FR
-1052487040,1052487167,DE
-1052487168,1052487423,GB
-1052487424,1052487679,AT
+1052431104,1052432127,BE
+1052433712,1052433719,DK
+1052449360,1052449375,ZA
+1052450768,1052450783,ZA
+1052481536,1052482559,NL
+1052485376,1052485631,IT
1052487680,1052488703,CH
1052488704,1052489727,GB
-1052489728,1052490239,IE
-1052490240,1052490751,SE
-1052490752,1052491679,AT
-1052491680,1052491687,EU
-1052491688,1052491775,AT
-1052491776,1052493567,BE
-1052493568,1052493695,EU
-1052493696,1052494335,BE
1052494336,1052494591,NL
-1052494592,1052495439,BE
-1052495440,1052495487,FR
-1052495488,1052495551,BE
-1052495552,1052495583,GB
-1052495584,1052495871,BE
-1052495872,1052495879,UA
-1052495880,1052496127,EU
-1052496128,1052497407,DE
-1052497408,1052497663,EU
-1052497664,1052497919,DE
-1052497920,1052498431,ES
-1052498432,1052498495,RO
-1052498496,1052498943,EU
-1052498944,1052499455,GB
-1052499456,1052499967,EU
-1052499968,1052500191,DK
-1052500192,1052500207,EU
-1052500208,1052500319,DK
-1052500320,1052500479,EU
-1052500480,1052500991,GB
-1052500992,1052501023,FI
-1052501024,1052501031,EU
-1052501032,1052501039,FI
-1052501040,1052501119,EU
-1052501120,1052501247,FI
-1052501248,1052501503,EU
-1052501504,1052502015,CH
-1052502016,1052502783,IE
-1052502784,1052502815,EU
-1052502816,1052502847,IE
-1052502848,1052503039,EU
-1052503040,1052504319,GB
-1052504320,1052504351,BY
-1052504352,1052504383,EU
-1052504384,1052507583,GB
-1052507584,1052507647,EU
-1052507648,1052507775,GB
-1052507776,1052507903,EU
-1052507904,1052596447,GB
-1052596448,1052596463,IT
-1052596464,1052631935,GB
-1052631936,1052631999,FR
-1052632000,1052634943,GB
-1052634944,1052634951,IE
-1052634952,1052644095,GB
-1052644096,1052644351,SE
-1052644352,1052647167,GB
-1052647168,1052647423,SE
-1052647424,1052653823,GB
-1052653824,1052654079,EU
-1052654080,1052661759,GB
-1052661760,1052662271,SE
-1052662272,1052665343,GB
-1052665344,1052665599,SE
-1052665600,1052675839,GB
-1052675840,1052676095,IE
-1052676096,1052684575,GB
-1052684576,1052684607,IT
-1052684608,1052706815,GB
-1052706816,1052712959,NL
+1052498432,1052498463,RO
+1052508160,1052704767,GB
+1052704768,1052712959,NL
1052712960,1052770303,GB
-1052770304,1052772991,CH
-1052772992,1052773119,ES
-1052773120,1052775711,CH
-1052775712,1052775727,DE
-1052775728,1052778495,CH
+1052770304,1052778495,CH
1052778496,1052786687,RU
1052786688,1052789759,GR
1052789760,1052803071,NL
-1052803072,1052803327,A2
-1052803328,1052803583,EU
-1052803584,1052806655,A2
-1052806656,1052807167,MW
-1052807168,1052809215,A2
-1052809216,1052810495,DE
-1052810496,1052810751,US
-1052810752,1052811263,DE
+1052803072,1052811263,DE
1052811264,1052819455,RU
1052819456,1052827647,DE
1052827648,1052835839,RU
@@ -28013,13 +9234,9 @@
1052852224,1052868607,EG
1052868608,1052876799,RS
1052876800,1052884991,NG
-1052884992,1052896351,FR
-1052896352,1052896352,FR
-1052896353,1052901375,FR
+1052884992,1052901375,FR
1052901376,1053032447,NL
-1053032448,1053047367,IT
-1053047368,1053047375,TR
-1053047376,1053097983,IT
+1053032448,1053097983,IT
1053097984,1053106175,DE
1053106176,1053114367,GB
1053114368,1053130751,BE
@@ -28027,252 +9244,22 @@
1053138944,1053147135,FI
1053147136,1053163519,SK
1053163520,1053294591,DK
-1053294592,1053294847,EU
-1053294848,1053295103,AT
-1053295104,1053295391,EU
-1053295392,1053295423,AT
-1053295424,1053295455,EU
-1053295456,1053295471,AT
-1053295472,1053295615,EU
1053295616,1053296639,AT
-1053296640,1053296927,IT
-1053296928,1053296991,EU
-1053296992,1053297027,IT
-1053297028,1053297039,EU
-1053297040,1053297055,IT
-1053297056,1053297071,EU
-1053297072,1053297143,IT
-1053297144,1053298175,EU
-1053298176,1053299199,CH
-1053299200,1053299711,EU
-1053299712,1053300063,GB
-1053300064,1053300095,EU
-1053300096,1053300103,GB
-1053300104,1053300111,EU
-1053300112,1053300735,GB
-1053300736,1053300991,CH
-1053300992,1053301279,FR
-1053301280,1053301287,EU
-1053301288,1053301295,FR
-1053301296,1053301303,EU
-1053301304,1053301359,FR
-1053301360,1053301367,EU
-1053301368,1053301503,FR
-1053301504,1053302031,EU
-1053302032,1053302055,FR
-1053302056,1053302063,DE
-1053302064,1053302159,FR
-1053302160,1053302175,EU
-1053302176,1053302183,FR
-1053302184,1053302303,EU
-1053302304,1053302335,FR
-1053302336,1053302367,EU
-1053302368,1053302375,FR
-1053302376,1053302383,EU
-1053302384,1053302687,FR
-1053302688,1053302711,GB
-1053302712,1053302719,EU
-1053302720,1053302783,FR
-1053302784,1053305087,EU
-1053305088,1053305951,GR
-1053305952,1053306111,EU
-1053306112,1053306879,GR
-1053306880,1053307903,EU
-1053307904,1053308543,GB
-1053308544,1053308671,EU
-1053308672,1053308687,GB
-1053308688,1053308703,EU
-1053308704,1053308711,GB
-1053308712,1053308767,EU
-1053308768,1053308831,GB
-1053308832,1053308839,EU
-1053308840,1053308863,GB
-1053308864,1053308927,EU
-1053308928,1053308991,ZA
-1053308992,1053309183,EU
-1053309184,1053309951,ZA
-1053309952,1053311231,EU
-1053311232,1053311359,CZ
-1053311360,1053312255,EU
-1053312256,1053312511,DK
-1053312512,1053312767,EU
-1053312768,1053312815,DK
-1053312816,1053312831,EU
-1053312832,1053312871,DK
-1053312872,1053312879,EU
-1053312880,1053312911,DK
-1053312912,1053312927,EU
-1053312928,1053312979,DK
-1053312980,1053312991,EU
-1053312992,1053313007,DK
-1053313008,1053313023,EU
-1053313024,1053313807,GB
-1053313808,1053313823,EU
-1053313824,1053313831,GB
-1053313832,1053313855,EU
-1053313856,1053313887,GB
-1053313888,1053313919,EU
-1053313920,1053314047,GB
-1053314048,1053314063,EU
-1053314064,1053314079,CZ
-1053314080,1053315071,EU
-1053315072,1053317119,GB
-1053317120,1053317295,ZA
-1053317296,1053317375,EU
-1053317376,1053317631,GB
-1053317632,1053318143,EU
-1053318144,1053318655,GB
-1053318656,1053318911,FI
-1053318912,1053318927,EU
-1053318928,1053318935,FI
-1053318936,1053318943,EU
-1053318944,1053318951,FI
-1053318952,1053318975,EU
-1053318976,1053319007,FI
-1053319008,1053319167,EU
-1053319168,1053320191,DE
-1053320192,1053320223,EU
-1053320224,1053320319,DE
-1053320320,1053320447,EU
-1053320448,1053320703,DE
-1053320704,1053321215,EU
-1053321216,1053321727,DE
-1053321728,1053326335,EU
-1053326336,1053326431,BE
-1053326432,1053326447,GB
-1053326448,1053326451,BE
-1053326452,1053326455,EU
-1053326456,1053326463,BE
-1053326464,1053326471,EU
-1053326472,1053326479,BE
-1053326480,1053326527,EU
-1053326528,1053326543,BE
-1053326544,1053326559,EU
-1053326560,1053326847,BE
-1053326848,1053327103,FI
-1053327104,1053327359,DK
-1053327360,1053327615,EU
-1053327616,1053328383,ZA
-1053328384,1053328639,EU
-1053328640,1053328867,ZA
-1053328868,1053328895,EU
-1053328896,1053329087,ZA
-1053329088,1053329119,EU
-1053329120,1053329135,ZA
-1053329136,1053329143,EU
-1053329144,1053329151,ZA
-1053329152,1053329183,EU
-1053329184,1053329279,ZA
-1053329280,1053329407,EU
-1053329408,1053329663,ES
-1053329664,1053330431,EU
-1053330432,1053330687,ES
-1053330688,1053331455,EU
-1053331456,1053331487,NL
-1053331488,1053331583,EU
-1053331584,1053331663,NL
-1053331664,1053331679,EU
-1053331680,1053331703,NL
-1053331704,1053331711,EU
-1053331712,1053332271,NL
-1053332272,1053332319,EU
-1053332320,1053332351,NL
-1053332352,1053332447,EU
-1053332448,1053332479,NL
-1053332480,1053334015,BE
-1053334016,1053334079,EU
-1053334080,1053334191,DK
-1053334192,1053334199,EU
-1053334200,1053334223,DK
-1053334224,1053334239,EU
-1053334240,1053334527,DK
-1053334528,1053334783,SE
-1053334784,1053335551,EU
-1053335552,1053336831,ZA
-1053336832,1053337087,EU
-1053337088,1053337119,ZA
-1053337120,1053337127,EU
-1053337128,1053337183,ZA
-1053337184,1053337607,EU
-1053337608,1053337631,CH
-1053337632,1053337855,EU
-1053337856,1053338111,ZA
-1053338112,1053338623,FI
-1053338624,1053338943,NO
-1053338944,1053338975,EU
-1053338976,1053338983,NO
-1053338984,1053339135,EU
-1053339136,1053339423,NO
-1053339424,1053339455,EU
-1053339456,1053339519,NO
-1053339520,1053339591,EU
-1053339592,1053339599,NO
-1053339600,1053339615,EU
-1053339616,1053339623,NO
-1053339624,1053339631,EU
-1053339632,1053339647,NO
-1053339648,1053340159,AT
-1053340160,1053340415,ZA
-1053340416,1053340479,EU
-1053340480,1053340511,NL
-1053340512,1053340671,EU
-1053340672,1053341567,GB
-1053341568,1053341575,EU
-1053341576,1053341647,GB
-1053341648,1053341655,EU
-1053341656,1053341695,GB
-1053341696,1053343743,EU
-1053343744,1053344255,FI
-1053344256,1053345279,EU
+1053307904,1053308159,GB
+1053313280,1053313535,GB
+1053316688,1053316695,GB
+1053320224,1053320239,DE
+1053327616,1053327871,ZA
+1053329440,1053329471,ES
+1053332992,1053334015,BE
+1053335552,1053336575,ZA
+1053339904,1053340159,AT
+1053340928,1053341183,GB
1053345280,1053345375,PK
-1053345376,1053345407,EU
-1053345408,1053345471,PK
-1053345472,1053347839,EU
-1053347840,1053348351,NL
-1053348352,1053348639,EU
-1053348640,1053348655,PT
-1053348656,1053349119,EU
-1053349120,1053349631,NL
-1053349632,1053349887,EU
-1053349888,1053349951,IE
-1053349952,1053350143,EU
-1053350144,1053350335,IE
-1053350336,1053350351,EU
-1053350352,1053350359,IE
-1053350360,1053350375,EU
-1053350376,1053350391,IE
-1053350392,1053350399,EU
-1053350400,1053350487,BE
-1053350488,1053350655,EU
-1053350656,1053350911,BE
-1053350912,1053351935,EU
-1053351936,1053352191,IL
-1053352192,1053352975,EU
-1053352976,1053352983,IE
-1053352984,1053353103,EU
-1053353104,1053353119,IE
-1053353120,1053353135,EU
-1053353136,1053353215,IE
-1053353216,1053353223,GB
-1053353224,1053353247,IE
-1053353248,1053353263,EU
-1053353264,1053353279,IE
-1053353280,1053353327,GB
-1053353328,1053353983,EU
+1053349376,1053349631,NL
+1053353408,1053353423,GB
1053353984,1053354239,IL
-1053354240,1053354495,EU
-1053354496,1053354655,IL
-1053354656,1053354687,EU
-1053354688,1053354719,IL
-1053354720,1053354751,EU
-1053354752,1053354831,IL
-1053354832,1053354855,EU
-1053354856,1053354863,IL
-1053354864,1053354871,EU
-1053354872,1053354879,IL
-1053354880,1053354911,EU
1053354912,1053355007,IL
-1053355008,1053360127,EU
1053360128,1053364223,ES
1053364224,1053368319,CZ
1053368320,1053376511,SE
@@ -28295,161 +9282,93 @@
1053655040,1053663231,UA
1053663232,1053671423,RU
1053671424,1053687807,LV
-1053687808,1053702635,DE
-1053702636,1053702639,GB
-1053702640,1053753343,DE
+1053687808,1053753343,DE
1053753344,1053818879,NL
1053818880,1053819391,DE
-1053819392,1053819423,EU
1053819424,1053819439,DE
-1053819440,1053819519,EU
1053819520,1053819563,DE
-1053819564,1053819583,EU
1053819584,1053819647,DE
-1053819648,1053820159,EU
1053820160,1053820927,DE
-1053820928,1053821439,EU
1053821440,1053821447,GB
-1053821448,1053821567,EU
1053821568,1053821695,GB
-1053821696,1053824015,EU
+1053824000,1053824007,DE
1053824016,1053824023,DE
-1053824024,1053824127,EU
+1053824064,1053824095,DE
1053824128,1053824255,NL
-1053824256,1053825023,EU
1053825024,1053825791,ES
1053825792,1053825919,GB
1053825920,1053826047,ES
-1053826048,1053826815,EU
1053826816,1053827327,DE
1053827328,1053827583,BE
-1053827584,1053829887,EU
+1053828096,1053829119,GB
1053829888,1053830143,DE
-1053830144,1053831167,EU
1053831168,1053831423,DE
-1053831424,1053834943,EU
1053834944,1053834975,DE
-1053834976,1053835263,EU
1053835264,1053835775,DE
-1053835776,1053837311,EU
1053837312,1053837439,FK
1053837440,1053837455,GB
-1053837456,1053837567,EU
1053837568,1053837823,GB
1053837824,1053838335,FK
1053838336,1053838591,DE
-1053838592,1053840399,EU
1053840400,1053840415,DE
-1053840416,1053840447,EU
1053840448,1053840511,DE
-1053840512,1053843199,EU
1053843200,1053843231,DK
1053843232,1053843455,GB
-1053843456,1053843711,EU
1053843712,1053843967,DE
1053843968,1053844223,GB
1053844224,1053844479,DE
-1053844480,1053844991,EU
1053844992,1053845503,DE
-1053845504,1053845727,EU
1053845728,1053845735,DE
-1053845736,1053846015,EU
1053846016,1053846527,DE
-1053846528,1053846783,EU
1053846784,1053847551,DE
1053847552,1053849599,GB
1053849600,1053850367,DE
-1053850368,1053851135,EU
1053851136,1053851647,DE
-1053851648,1053851903,EU
1053851904,1053851919,FR
-1053851920,1053852031,EU
1053852032,1053852047,IT
-1053852048,1053852111,EU
1053852112,1053852127,GB
1053852128,1053852159,DE
-1053852160,1053853695,EU
-1053853696,1053859839,GB
+1053855744,1053859839,GB
1053859840,1053860863,DE
-1053860864,1053862655,EU
1053862656,1053862783,DE
-1053862784,1053862847,EU
1053862848,1053862879,DE
-1053862880,1053863423,EU
1053863424,1053864959,DE
-1053864960,1053865215,EU
1053865216,1053865727,DE
1053865728,1053865759,US
-1053865760,1053865983,EU
1053865984,1053866239,DE
1053866240,1053866495,ES
1053866496,1053866823,DE
-1053866824,1053866831,EU
1053866832,1053866847,DE
-1053866848,1053867519,EU
1053867520,1053867775,DE
-1053867776,1053867975,EU
1053867976,1053867983,DE
-1053867984,1053867991,EU
1053867992,1053867999,DE
-1053868000,1053868007,EU
1053868008,1053868015,DE
-1053868016,1053868031,EU
1053868032,1053868447,ES
1053868448,1053868455,GB
-1053868456,1053868799,EU
+1053868456,1053868463,ES
+1053868480,1053868543,FR
1053868800,1053869567,DE
-1053869568,1053870079,EU
1053870080,1053870335,DE
1053870336,1053870591,GB
-1053870592,1053870847,EU
1053870848,1053871359,DE
-1053871360,1053871615,EU
1053871616,1053871871,DE
-1053871872,1053872383,EU
1053872384,1053872447,DE
-1053872448,1053872895,EU
+1053872512,1053872639,FR
1053872896,1053873663,DE
-1053873664,1053876223,EU
1053876224,1053876479,DE
1053876480,1053876735,GB
1053876736,1053876991,DE
-1053876992,1053877247,EU
1053877248,1053878271,DE
1053878272,1053878783,GB
1053878784,1053879047,DE
-1053879048,1053879055,EU
1053879056,1053879071,DE
-1053879072,1053879167,GB
-1053879168,1053879295,EU
+1053879104,1053879167,GB
1053879296,1053882111,DE
-1053882112,1053882367,EU
1053882368,1053882879,DE
1053882880,1053883391,GB
1053883392,1053884415,DE
1053884416,1053892607,BH
-1053892608,1053892619,DE
-1053892620,1053892623,GB
-1053892624,1053892943,DE
-1053892944,1053892959,GB
-1053892960,1053894495,DE
-1053894496,1053894527,GB
-1053894528,1053894719,DE
-1053894720,1053894735,FR
-1053894736,1053894743,GB
-1053894744,1053894751,GE
-1053894752,1053894783,DE
-1053894784,1053894815,IL
-1053894816,1053894831,DE
-1053894832,1053894847,US
-1053894848,1053896087,DE
-1053896088,1053896095,US
-1053896096,1053896127,GB
-1053896128,1053896159,DE
-1053896160,1053896175,US
-1053896176,1053896447,DE
-1053896448,1053896703,US
-1053896704,1053900799,DE
+1053892608,1053900799,DE
1053900800,1053917183,NO
1053917184,1053925375,UZ
1053925376,1053927159,SE
@@ -28460,7 +9379,9 @@
1054015488,1054089215,IT
1054089216,1054097407,GE
1054097408,1054105599,NL
-1054105600,1054113791,FR
+1054105600,1054107135,FR
+1054107136,1054107391,GB
+1054107392,1054113791,FR
1054113792,1054121983,NL
1054121984,1054130175,AT
1054130176,1054138367,LT
@@ -28471,35 +9392,24 @@
1054181121,1054181375,GB
1054181376,1054182399,DE
1054182400,1054183423,GB
-1054183424,1054186240,DE
-1054186241,1054187519,GB
-1054187520,1054189823,BG
-1054189824,1054190079,RO
-1054190080,1054195711,BG
+1054183424,1054185216,DE
+1054185217,1054185471,GB
+1054185472,1054186240,DE
+1054186241,1054186495,GB
+1054186496,1054187264,DE
+1054187265,1054187519,GB
+1054187520,1054192639,FR
+1054192640,1054192895,BG
+1054192896,1054195455,FR
+1054195456,1054195711,BG
1054195712,1054212095,BE
-1054212096,1054248959,DE
-1054248960,1054249007,FR
-1054249008,1054249015,DE
-1054249016,1054249031,FR
-1054249032,1054249039,DE
-1054249040,1054249199,FR
-1054249200,1054249207,DE
-1054249208,1054249215,FR
-1054249216,1054277631,DE
+1054212096,1054277631,DE
1054277632,1054343167,KW
1054343168,1054351359,NL
1054351360,1054359551,UA
1054359552,1054367743,RO
1054367744,1054375935,FI
-1054375936,1054381055,GB
-1054381056,1054381567,EG
-1054381568,1054381583,SG
-1054381584,1054381599,HK
-1054381600,1054381615,GB
-1054381616,1054381631,US
-1054381632,1054382079,GB
-1054382080,1054382335,SG
-1054382336,1054384127,GB
+1054375936,1054384127,GB
1054384128,1054400511,DE
1054400512,1054408703,GB
1054408704,1054416895,FR
@@ -28519,203 +9429,45 @@
1054654464,1054662655,MK
1054662656,1054670847,FI
1054670848,1054671103,GB
-1054671104,1054671167,EU
1054671168,1054671231,IE
-1054671232,1054671371,EU
1054671372,1054671375,IE
-1054671376,1054671415,EU
1054671416,1054671423,IE
-1054671424,1054671431,EU
1054671432,1054671439,IE
-1054671440,1054672159,EU
1054672160,1054672175,IE
-1054672176,1054672255,EU
1054672256,1054672287,IE
-1054672288,1054672319,EU
1054672320,1054672335,US
1054672336,1054672367,IE
-1054672368,1054672383,EU
1054672384,1054672447,IE
-1054672448,1054672719,EU
1054672720,1054672727,IE
-1054672728,1054672743,EU
1054672744,1054672767,IE
-1054672768,1054672775,EU
1054672776,1054672783,IE
-1054672784,1054672791,EU
1054672792,1054672807,IE
-1054672808,1054673663,EU
1054673664,1054673727,IE
-1054673728,1054673855,EU
1054673856,1054673919,IE
-1054673920,1054673951,EU
1054673952,1054674047,IE
-1054674048,1054674079,EU
1054674080,1054674111,IE
-1054674112,1054674455,EU
1054674456,1054674471,IE
-1054674472,1054674479,EU
1054674480,1054674495,IE
-1054674496,1054674503,EU
1054674504,1054674511,IE
-1054674512,1054674519,EU
1054674520,1054674527,GB
-1054674528,1054674687,EU
1054674688,1054675199,IE
-1054675200,1054675455,EU
1054675456,1054675711,IE
-1054675712,1054675967,EU
1054675968,1054676223,US
-1054676224,1054679039,EU
1054679040,1054687231,UA
1054687232,1054703615,MD
1054703616,1054711807,BG
1054711808,1054719999,IT
1054720000,1054867455,NL
-1054867456,1054943231,DE
-1054943232,1054943487,PL
-1054943488,1054946047,DE
-1054946048,1054946303,A2
-1054946304,1054948253,DE
-1054948254,1054948254,EU
-1054948255,1054949727,DE
-1054949728,1054949735,US
-1054949736,1054949807,DE
-1054949808,1054949815,ES
-1054949816,1054971487,DE
-1054971488,1054971503,AT
-1054971504,1054971511,DE
-1054971512,1054971519,AT
-1054971520,1054973951,DE
-1054973952,1054974207,EU
-1054974208,1054978815,DE
-1054978816,1054979071,FR
-1054979072,1055129599,DE
-1055129600,1055187027,CY
-1055187028,1055193855,GR
-1055193856,1055195135,CY
-1055195136,1055196159,EU
-1055196160,1055197823,CH
-1055197824,1055197919,EU
-1055197920,1055198463,CH
-1055198464,1055198975,EU
-1055198976,1055199103,CH
-1055199104,1055199359,EU
-1055199360,1055199375,CH
-1055199376,1055199463,EU
-1055199464,1055199487,CH
-1055199488,1055200415,EU
-1055200416,1055200423,PT
-1055200424,1055201023,EU
-1055201024,1055201279,US
-1055201280,1055203327,EU
-1055203328,1055203343,CZ
-1055203344,1055203839,EU
-1055203840,1055204095,CZ
-1055204096,1055204863,EU
-1055204864,1055205119,CZ
-1055205120,1055205631,EU
-1055205632,1055205887,CZ
-1055205888,1055206655,EU
-1055206656,1055206911,CZ
-1055206912,1055207167,EU
-1055207168,1055207423,CZ
-1055207424,1055207679,EU
-1055207680,1055209215,CZ
-1055209216,1055209727,EU
-1055209728,1055210239,CZ
-1055210240,1055211263,EU
-1055211264,1055211519,CZ
-1055211520,1055212043,EU
-1055212044,1055212131,PT
-1055212132,1055212175,EU
-1055212176,1055212179,PT
-1055212180,1055212183,EU
-1055212184,1055212247,PT
-1055212248,1055212351,EU
-1055212352,1055212415,PT
-1055212416,1055213263,EU
-1055213264,1055213307,PT
-1055213308,1055213311,EU
-1055213312,1055213319,PT
-1055213320,1055213327,EU
-1055213328,1055213359,PT
-1055213360,1055213367,EU
-1055213368,1055213455,PT
-1055213456,1055213471,EU
-1055213472,1055213567,PT
-1055213568,1055214079,EU
-1055214080,1055214239,PT
-1055214240,1055214271,EU
-1055214272,1055214847,PT
-1055214848,1055215359,EU
-1055215360,1055215999,PT
-1055216000,1055216031,EU
-1055216032,1055216383,PT
-1055216384,1055216895,EU
-1055216896,1055217663,PT
-1055217664,1055218207,EU
-1055218208,1055218239,PT
-1055218240,1055218271,EU
-1055218272,1055218299,PT
-1055218300,1055218351,EU
-1055218352,1055218383,PT
-1055218384,1055218391,EU
-1055218392,1055218399,PT
-1055218400,1055218431,EU
-1055218432,1055218447,PT
-1055218448,1055218463,EU
-1055218464,1055218471,PT
-1055218472,1055218479,EU
-1055218480,1055218687,PT
-1055218688,1055220223,EU
-1055220224,1055220287,NL
-1055220288,1055220351,EU
-1055220352,1055220399,NL
-1055220400,1055221503,EU
-1055221504,1055221631,BE
-1055221632,1055223551,EU
-1055223552,1055223807,NL
-1055223808,1055223903,EU
-1055223904,1055223999,LU
-1055224000,1055224063,EU
-1055224064,1055224463,LU
-1055224464,1055224575,EU
-1055224576,1055224607,LU
-1055224608,1055224831,EU
-1055224832,1055224911,LU
-1055224912,1055226111,EU
-1055226112,1055226175,ES
-1055226176,1055226191,EU
-1055226192,1055226207,ES
-1055226208,1055226239,EU
-1055226240,1055226255,ES
-1055226256,1055226263,EU
-1055226264,1055226271,ES
-1055226272,1055226367,EU
-1055226368,1055226399,ES
-1055226400,1055227639,EU
-1055227640,1055227647,PT
-1055227648,1055227903,EU
-1055227904,1055228159,TR
-1055228160,1055228927,EU
-1055228928,1055229183,TR
-1055229184,1055231999,EU
-1055232000,1055232255,NL
-1055232256,1055232511,EU
-1055232512,1055233023,NL
-1055233024,1055234063,EU
-1055234064,1055234079,NL
-1055234080,1055234127,US
-1055234128,1055241983,EU
-1055241984,1055242239,GR
-1055242240,1055252735,EU
-1055252736,1055252991,ES
-1055252992,1055253055,EU
-1055253056,1055253087,ES
-1055253088,1055256447,EU
-1055256448,1055256463,ES
-1055256464,1055326207,EU
+1054867456,1055129599,DE
+1055129600,1055195135,CY
+1055195136,1055203327,CH
+1055211520,1055219711,PT
+1055219712,1055223807,NL
+1055223808,1055225855,LU
+1055225856,1055227903,ES
+1055232000,1055236095,NL
+1055252480,1055256575,ES
+1055260672,1055264767,SE
1055326208,1055334399,RU
1055334400,1055342591,IE
1055342592,1055358975,RO
@@ -28737,15 +9489,11 @@
1055932416,1055940607,FI
1055940608,1055948799,EG
1055948800,1055956991,DE
-1055956992,1055958191,CZ
-1055958192,1055958207,GB
-1055958208,1055965183,CZ
+1055956992,1055965183,CZ
1055965184,1055973375,CH
1055973376,1055981567,FR
1055981568,1055989759,IT
-1055989760,1055992310,DE
-1055992311,1055992318,CH
-1055992319,1055997951,DE
+1055989760,1055997951,DE
1055997952,1056014335,FR
1056014336,1056022527,EG
1056022528,1056030719,GB
@@ -28756,23 +9504,14 @@
1056210944,1056219135,PL
1056219136,1056227327,GB
1056227328,1056243711,TR
-1056243712,1056244255,CH
-1056244256,1056244287,FR
-1056244288,1056244335,MC
-1056244336,1056244367,FR
-1056244368,1056244383,MC
-1056244384,1056244415,FR
-1056244416,1056244479,MC
-1056244480,1056251903,CH
+1056243712,1056251903,CH
1056251904,1056260095,RU
1056260096,1056276479,CZ
1056276480,1056374783,DE
1056374784,1056440319,SE
1056440320,1056473087,TR
1056473088,1056505855,FI
-1056505856,1056507015,PT
-1056507016,1056507023,ES
-1056507024,1056514047,PT
+1056505856,1056514047,PT
1056514048,1056522239,IT
1056522240,1056538623,AT
1056538624,1056546815,RU
@@ -28780,64 +9519,30 @@
1056555008,1056571391,GB
1056571392,1056669695,NL
1056669696,1056702463,MA
-1056702464,1056874559,GB
-1056874560,1056874567,IE
-1056874568,1056874599,GB
-1056874600,1056874607,IE
-1056874608,1056874639,GB
-1056874640,1056874647,IE
-1056874648,1056874655,GB
-1056874656,1056874679,IE
-1056874680,1056874751,GB
+1056702464,1056874751,GB
1056874752,1056875007,IE
-1056875008,1056875071,GB
-1056875072,1056875103,IE
-1056875104,1056875111,GB
-1056875112,1056875135,IE
-1056875136,1056875151,GB
-1056875152,1056875167,IE
-1056875168,1056875263,GB
-1056875264,1056875311,IE
-1056875312,1056875615,GB
-1056875616,1056875623,IE
-1056875624,1056875639,GB
-1056875640,1056875671,IE
-1056875672,1056876031,GB
-1056876032,1056876047,IE
-1056876048,1056964607,GB
+1056875008,1056875663,GB
+1056875664,1056875671,IE
+1056875672,1056964607,GB
1056964608,1061227263,US
-1061227264,1061227774,BO
-1061227775,1061518015,US
-1061518016,1061518047,A2
-1061518048,1061558271,US
+1061227264,1061227519,BO
+1061227520,1061558271,US
1061558272,1061559295,PK
1061559296,1061588735,US
1061588736,1061588991,GU
-1061588992,1061633567,US
-1061633568,1061633575,CA
-1061633576,1061776479,US
-1061776480,1061776639,CA
-1061776640,1061847711,US
-1061847712,1061847743,FR
-1061847744,1061853695,US
+1061588992,1061853695,US
1061853696,1061854207,GB
1061854208,1061939711,US
1061939712,1061940223,JM
-1061940224,1062069247,US
+1061940224,1061987839,US
+1061987840,1061988095,CA
+1061988096,1062069247,US
1062069248,1062070271,PR
1062070272,1062219519,US
1062219520,1062219775,IN
-1062219776,1062222975,US
-1062222976,1062223039,PH
-1062223040,1062244311,US
-1062244312,1062244319,PH
-1062244320,1062262783,US
+1062219776,1062262783,US
1062262784,1062263039,PH
-1062263040,1062378767,US
-1062378768,1062378783,CA
-1062378784,1062429695,US
-1062429696,1062430207,PR
-1062430208,1062473731,US
+1062263040,1062473731,US
1062473732,1062473732,IN
1062473733,1062486271,US
1062486272,1062486527,MX
@@ -28847,60 +9552,27 @@
1062545920,1062546431,BM
1062546432,1062597375,US
1062597376,1062597631,PR
-1062597632,1062636287,US
-1062636288,1062636351,GB
-1062636352,1062691159,US
-1062691160,1062691167,AF
-1062691168,1062725103,US
-1062725104,1062725111,IL
-1062725112,1062871551,US
-1062871552,1062872319,PR
-1062872320,1063390207,US
-1063390208,1063390463,PR
-1063390464,1063467047,US
-1063467048,1063467055,AF
-1063467056,1063504191,US
-1063504192,1063504255,MX
-1063504256,1063560687,US
-1063560688,1063560703,CA
-1063560704,1063567359,US
-1063567360,1063568895,A2
+1062597632,1062871551,US
+1062871552,1062872063,PR
+1062872064,1063057432,US
+1063057433,1063057433,CA
+1063057434,1063305727,US
+1063305728,1063305983,CA
+1063305984,1063568895,US
1063568896,1063569151,TZ
-1063569152,1063573679,A2
-1063573680,1063573695,VN
-1063573696,1063575551,A2
-1063575552,1063579999,US
-1063580000,1063580015,CA
-1063580016,1063587631,US
-1063587632,1063587647,CA
-1063587648,1063598847,US
-1063598848,1063598863,CA
-1063598864,1063690239,US
-1063690240,1063690495,PR
-1063690496,1063727615,US
+1063569152,1063727615,US
1063727616,1063728127,GU
-1063728128,1063747583,US
-1063747584,1063747839,A2
-1063747840,1063748095,UG
-1063748096,1063748607,A2
+1063728128,1063748607,US
1063748608,1063749119,GH
1063749120,1063749631,US
1063749632,1063749887,LR
1063749888,1063750143,SA
1063750144,1063750399,NG
-1063750400,1063750463,SA
-1063750464,1063750527,NG
-1063750528,1063750543,US
-1063750544,1063750559,A2
-1063750560,1063750655,US
+1063750400,1063750655,US
1063750656,1063751679,NG
-1063751680,1063752959,US
-1063752960,1063753215,A2
-1063753216,1063895039,US
+1063751680,1063895039,US
1063895040,1063899135,KR
-1063899136,1064064127,US
-1064064128,1064064191,CA
-1064064192,1064124927,US
+1063899136,1064124927,US
1064124928,1064125695,EC
1064125696,1064125951,US
1064125952,1064126207,PE
@@ -28908,81 +9580,22 @@
1064126720,1064126975,EC
1064126976,1064127487,US
1064127488,1064127999,EC
-1064128000,1064170751,US
-1064170752,1064170799,A2
-1064170800,1064170807,NG
-1064170808,1064170823,IN
-1064170824,1064170831,A2
-1064170832,1064170871,IN
-1064170872,1064170879,A2
-1064170880,1064170911,DE
-1064170912,1064170919,A2
-1064170920,1064170927,NG
-1064170928,1064170943,DE
-1064170944,1064170991,A2
-1064170992,1064170999,NG
-1064171000,1064171007,A2
-1064171008,1064171135,NG
-1064171136,1064171263,IN
-1064171264,1064171551,NG
-1064171552,1064171559,TZ
-1064171560,1064171575,A2
-1064171576,1064171583,PK
-1064171584,1064171607,A2
-1064171608,1064171615,PK
-1064171616,1064171631,GH
-1064171632,1064171647,A2
-1064171648,1064171775,NG
-1064171776,1064171799,A2
-1064171800,1064171815,IN
-1064171816,1064171823,A2
-1064171824,1064171839,IN
-1064171840,1064171855,A2
-1064171856,1064171871,TZ
-1064171872,1064171903,A2
-1064171904,1064171911,NG
-1064171912,1064171919,A2
-1064171920,1064171927,PK
-1064171928,1064171935,A2
-1064171936,1064171967,NG
-1064171968,1064172031,A2
-1064172032,1064204287,US
+1064128000,1064171263,US
+1064171264,1064171519,NG
+1064171520,1064204287,US
1064204288,1064205311,MX
1064205312,1064221951,US
1064221952,1064222207,MX
-1064222208,1064231023,US
-1064231024,1064231039,CA
-1064231040,1064306087,US
-1064306088,1064306095,AU
-1064306096,1064402687,US
-1064402688,1064402751,CA
-1064402752,1064445183,US
+1064222208,1064445183,US
1064445184,1064445439,PK
-1064445440,1064973055,US
-1064973056,1064973183,AU
-1064973184,1065049471,US
-1065049472,1065049535,CA
-1065049536,1065389439,US
-1065389440,1065389455,MY
-1065389456,1065390591,US
-1065390592,1065390599,MY
-1065390600,1065390655,US
-1065390656,1065390687,MX
-1065390688,1065517087,US
-1065517088,1065517119,A2
-1065517120,1065520895,US
-1065520896,1065520911,CA
-1065520912,1065520927,IT
-1065520928,1065530879,US
+1064445440,1065530879,US
1065530880,1065533439,TC
1065533440,1065537535,US
1065537536,1065541631,TC
1065541632,1065547775,US
1065547776,1065548031,FK
1065548032,1065548543,TC
-1065548544,1065583423,US
-1065583424,1065583439,HK
-1065583440,1065611263,US
+1065548544,1065611263,US
1065611264,1065615359,PR
1065615360,1065811967,US
1065811968,1065820159,CA
@@ -28990,120 +9603,39 @@
1065873408,1065877503,PR
1065877504,1065906175,US
1065906176,1065908223,KY
-1065908224,1065926815,US
-1065926816,1065926831,CA
-1065926832,1066311679,US
+1065908224,1066311679,US
1066311680,1066315775,CA
-1066315776,1066332159,US
-1066332160,1066336255,CA
+1066315776,1066333183,US
+1066333184,1066336255,CA
1066336256,1066352639,US
-1066352640,1066355711,JM
+1066352640,1066354943,JM
+1066354944,1066355199,BB
+1066355200,1066355711,JM
1066355712,1066355967,BB
1066355968,1066369023,JM
-1066369024,1066439055,US
-1066439056,1066439071,CA
-1066439072,1066439087,US
-1066439088,1066439095,CA
-1066439096,1066473807,US
-1066473808,1066473823,CA
-1066473824,1066535679,US
-1066535680,1066535687,GB
-1066535688,1066771303,US
-1066771304,1066771319,ME
-1066771320,1066828279,US
-1066828280,1066828287,IN
-1066828288,1066830079,US
-1066830080,1066830111,SG
-1066830112,1066830119,US
-1066830120,1066830127,SG
-1066830128,1066830287,US
-1066830288,1066830303,ML
-1066830304,1066830311,US
-1066830312,1066830319,SG
-1066830320,1066830783,US
-1066830784,1066830799,SG
-1066830800,1066830991,US
-1066830992,1066831007,JP
-1066831008,1066831071,US
-1066831072,1066831079,JP
-1066831080,1066831199,US
-1066831200,1066831231,JP
-1066831232,1067237887,US
-1067237888,1067238399,JP
-1067238400,1067473471,US
-1067473472,1067473535,CA
-1067473536,1067474751,US
-1067474752,1067474767,NL
-1067474768,1067481855,US
+1066369024,1067238143,US
+1067238144,1067238399,JP
+1067238400,1067481855,US
1067481856,1067482111,CA
-1067482112,1067494847,US
-1067494848,1067494879,CA
-1067494880,1067503615,US
-1067503616,1067503743,CA
-1067503744,1067532287,US
+1067482112,1067532287,US
1067532288,1067532799,HN
-1067532800,1067537959,US
-1067537960,1067537967,GB
-1067537968,1067552511,US
-1067552512,1067552767,PR
-1067552768,1067573247,US
-1067573248,1067573255,SG
-1067573256,1067575295,US
+1067532800,1067575295,US
1067575296,1067577343,HN
-1067577344,1067590111,US
-1067590112,1067590143,CA
-1067590144,1067593983,US
-1067593984,1067594239,PR
-1067594240,1067617791,US
+1067577344,1067617791,US
1067617792,1067618047,CN
-1067618048,1067621375,US
-1067621376,1067621631,PR
-1067621632,1067625967,US
-1067625968,1067625983,CH
-1067625984,1067653255,US
-1067653256,1067653263,PR
-1067653264,1067693055,US
+1067618048,1067693055,US
1067693056,1067693567,CO
-1067693568,1067700735,US
-1067700736,1067701247,CW
-1067701248,1067726847,US
+1067693568,1067726847,US
1067726848,1067727359,EC
1067727360,1067736831,US
1067736832,1067737087,PR
1067737088,1067740159,US
1067740160,1067741183,HN
-1067741184,1067762815,US
-1067762816,1067762831,CA
-1067762832,1067780607,US
+1067741184,1067780607,US
1067780608,1067780863,GB
-1067780864,1067822863,US
-1067822864,1067822871,CA
-1067822872,1067824895,US
+1067780864,1067824895,US
1067824896,1067825151,PR
-1067825152,1067838463,US
-1067838464,1067838591,IT
-1067838592,1067856575,US
-1067856576,1067856607,CO
-1067856608,1067863807,US
-1067863808,1067863935,CA
-1067863936,1067908295,US
-1067908296,1067908303,CH
-1067908304,1067909023,US
-1067909024,1067909039,SG
-1067909040,1067914655,US
-1067914656,1067914751,CA
-1067914752,1067918879,US
-1067918880,1067918887,NL
-1067918888,1067923231,US
-1067923232,1067923239,CA
-1067923240,1067934911,US
-1067934912,1067934927,CN
-1067934928,1067934935,PR
-1067934936,1067977895,US
-1067977896,1067977903,CA
-1067977904,1067978751,US
-1067978752,1067979007,PR
-1067979008,1067989247,US
+1067825152,1067989247,US
1067989248,1067989503,EC
1067989504,1067998463,US
1067998464,1067998719,CO
@@ -29111,29 +9643,15 @@
1068004352,1068004607,CA
1068004608,1068017663,US
1068017664,1068018175,YE
-1068018176,1068070887,US
-1068070888,1068070895,CA
-1068070896,1068083455,US
-1068083456,1068083711,PR
-1068083712,1068096415,US
-1068096416,1068096447,CA
-1068096448,1068119407,US
-1068119408,1068119423,DE
-1068119424,1068123135,US
-1068123136,1068123647,BB
-1068123648,1068167439,US
-1068167440,1068167447,GB
-1068167448,1068175871,US
+1068018176,1068123135,US
+1068123136,1068123391,BB
+1068123392,1068175871,US
1068175872,1068176383,YE
1068176384,1068199935,US
1068199936,1068204031,CA
1068204032,1068230655,US
1068230656,1068230911,CO
-1068230912,1068284735,US
-1068284736,1068284743,CA
-1068284744,1068284751,US
-1068284752,1068284759,DK
-1068284760,1068326911,US
+1068230912,1068326911,US
1068326912,1068327167,EC
1068327168,1068346367,US
1068346368,1068346879,YE
@@ -29141,36 +9659,20 @@
1068419072,1068421119,CO
1068421120,1068425983,US
1068425984,1068426239,EC
-1068426240,1068462079,US
-1068462080,1068462335,PR
-1068462336,1068473343,US
-1068473344,1068473855,BB
-1068473856,1068474111,US
-1068474112,1068474367,BB
-1068474368,1068480159,US
-1068480160,1068480191,IN
-1068480192,1068480431,US
-1068480432,1068480447,SE
-1068480448,1068481023,US
+1068426240,1068473343,US
+1068473344,1068474367,BB
+1068474368,1068481023,US
1068481024,1068481535,PR
1068481536,1068491263,US
1068491264,1068491519,HN
1068491520,1069622866,US
1069622867,1069622867,MX
-1069622868,1070652215,US
-1070652216,1070652216,US
-1070652217,1070701055,US
+1069622868,1070701055,US
1070701056,1070701311,DO
1070701312,1070701567,HT
1070701568,1070729471,US
1070729472,1070729727,CA
-1070729728,1070805559,US
-1070805560,1070805567,VG
-1070805568,1070849407,US
-1070849408,1070849423,US
-1070849424,1071100159,US
-1071100160,1071100415,PR
-1071100416,1071100927,US
+1070729728,1071100927,US
1071100928,1071101951,PR
1071101952,1071134719,US
1071134720,1071136767,HK
@@ -29179,60 +9681,24 @@
1071142912,1071144959,US
1071144960,1071153151,LB
1071153152,1071157247,US
-1071157248,1071161343,SG
-1071161344,1071162367,US
+1071157248,1071158271,SG
+1071158272,1071159295,US
+1071159296,1071160319,SG
+1071160320,1071162367,US
1071162368,1071163391,KR
1071163392,1071165439,HK
-1071165440,1071166463,US
-1071166464,1071167487,A2
-1071167488,1071169535,US
+1071165440,1071169535,US
1071169536,1071171583,TW
-1071171584,1071193279,US
-1071193280,1071193295,DM
-1071193296,1071193311,US
-1071193312,1071193359,DM
-1071193360,1071193375,US
-1071193376,1071193423,DM
-1071193424,1071193455,US
-1071193456,1071193471,DM
-1071193472,1071193535,US
-1071193536,1071193551,DM
-1071193552,1071193567,US
-1071193568,1071193583,DM
-1071193584,1071193631,US
-1071193632,1071193663,DM
-1071193664,1071193703,US
-1071193704,1071193711,DM
-1071193712,1071193727,US
-1071193728,1071193743,DM
-1071193744,1071193759,US
-1071193760,1071193807,DM
-1071193808,1071193847,US
-1071193848,1071193855,DM
-1071193856,1071193991,US
-1071193992,1071194015,DM
-1071194016,1071194079,US
-1071194080,1071194087,DM
-1071194088,1071196159,US
-1071196160,1071198207,HK
-1071198208,1071199231,JP
-1071199232,1071201279,US
-1071201280,1071202303,TH
-1071202304,1071204351,US
-1071204352,1071205375,HK
-1071205376,1071206399,US
-1071206400,1071208447,HK
-1071208448,1071210495,TW
-1071210496,1071216639,US
-1071216640,1071217663,AU
-1071217664,1071227903,US
-1071227904,1071228927,A2
-1071228928,1071251711,US
+1071171584,1071206911,US
+1071206912,1071207167,HK
+1071207168,1071251711,US
1071251712,1071252479,HK
1071252480,1071254783,US
1071254784,1071255039,GB
1071255040,1071255295,US
-1071255296,1071255551,DE
+1071255296,1071255525,LB
+1071255526,1071255526,DE
+1071255527,1071255551,LB
1071255552,1071256319,US
1071256320,1071256575,HK
1071256576,1071258879,US
@@ -29247,37 +9713,23 @@
1071267072,1071267839,HK
1071267840,1071268095,US
1071268096,1071268863,NL
-1071268864,1071270655,US
-1071270656,1071270911,AP
-1071270912,1071271167,US
-1071271168,1071271263,AP
-1071271264,1071271279,US
-1071271280,1071271359,AP
-1071271360,1071271679,US
+1071268864,1071271679,US
1071271680,1071271935,TW
1071271936,1071272191,US
1071272192,1071272447,SE
1071272448,1071274239,US
1071274240,1071274495,FR
-1071274496,1071280895,US
+1071274496,1071278959,US
+1071278960,1071278963,SG
+1071278964,1071280895,US
1071280896,1071281151,HK
1071281152,1071281407,US
1071281408,1071281663,AU
1071281664,1071282943,US
1071282944,1071283199,PH
-1071283200,1071283967,US
-1071283968,1071284223,A2
-1071284224,1071284479,US
-1071284480,1071284559,DM
-1071284560,1071284575,US
-1071284576,1071284607,DM
-1071284608,1071284639,US
-1071284640,1071284671,DM
-1071284672,1071286527,US
+1071283200,1071286527,US
1071286528,1071287295,LB
-1071287296,1071287551,US
-1071287552,1071287807,A2
-1071287808,1071288063,US
+1071287296,1071288063,US
1071288064,1071288319,FR
1071288320,1071288575,US
1071288576,1071288831,HK
@@ -29297,17 +9749,13 @@
1071293696,1071293951,SG
1071293952,1071294207,US
1071294208,1071294463,MY
-1071294464,1071294719,US
-1071294720,1071294975,A2
-1071294976,1071295231,US
+1071294464,1071295231,US
1071295232,1071295487,TH
1071295488,1071295743,US
1071295744,1071295999,GR
1071296000,1071296255,US
1071296256,1071296511,HK
-1071296512,1071296671,US
-1071296672,1071296703,DM
-1071296704,1071296767,US
+1071296512,1071296767,US
1071296768,1071297023,AE
1071297024,1071297791,US
1071297792,1071298047,IN
@@ -29325,37 +9773,7 @@
1071301888,1071302143,VN
1071302144,1071306495,US
1071306496,1071306751,HK
-1071306752,1071308823,US
-1071308824,1071308831,DM
-1071308832,1071308863,US
-1071308864,1071308927,DM
-1071308928,1071308959,US
-1071308960,1071309039,DM
-1071309040,1071309071,US
-1071309072,1071309087,DM
-1071309088,1071309119,US
-1071309120,1071309151,DM
-1071309152,1071309167,US
-1071309168,1071309183,DM
-1071309184,1071309215,US
-1071309216,1071309231,DM
-1071309232,1071309335,US
-1071309336,1071309343,DM
-1071309344,1071309359,US
-1071309360,1071309375,DM
-1071309376,1071309423,US
-1071309424,1071309439,DM
-1071309440,1071309463,US
-1071309464,1071309471,DM
-1071309472,1071309503,HK
-1071309504,1071309519,DM
-1071309520,1071309527,US
-1071309528,1071309567,DM
-1071309568,1071309695,US
-1071309696,1071309727,DM
-1071309728,1071309759,US
-1071309760,1071309823,DM
-1071309824,1071310079,US
+1071306752,1071310079,US
1071310080,1071310335,SG
1071310336,1071313919,US
1071313920,1071314175,TW
@@ -29369,37 +9787,7 @@
1071318784,1071319039,IN
1071319040,1071321087,US
1071321088,1071322111,HK
-1071322112,1071362063,US
-1071362064,1071362079,DM
-1071362080,1071362095,US
-1071362096,1071362111,DM
-1071362112,1071362175,US
-1071362176,1071362199,DM
-1071362200,1071362207,US
-1071362208,1071362239,HK
-1071362240,1071362287,US
-1071362288,1071362319,DM
-1071362320,1071362399,US
-1071362400,1071362559,DM
-1071362560,1071362623,US
-1071362624,1071362639,DM
-1071362640,1071362655,US
-1071362656,1071362823,DM
-1071362824,1071362831,US
-1071362832,1071362839,DM
-1071362840,1071362847,US
-1071362848,1071362863,DM
-1071362864,1071362871,US
-1071362872,1071362879,DM
-1071362880,1071362911,US
-1071362912,1071362919,DM
-1071362920,1071362927,US
-1071362928,1071362943,DM
-1071362944,1071363007,US
-1071363008,1071363039,DM
-1071363040,1071363455,US
-1071363456,1071363479,DM
-1071363480,1071415295,US
+1071322112,1071415295,US
1071415296,1071417343,TW
1071417344,1071446015,US
1071446016,1071448063,NL
@@ -29418,142 +9806,65 @@
1071487712,1071489023,HK
1071489024,1071517695,US
1071517696,1071519743,HK
-1071519744,1071579391,US
+1071519744,1071522817,US
+1071522818,1071522818,MW
+1071522819,1071579391,US
1071579392,1071579647,CA
-1071579648,1071599105,US
-1071599106,1071599134,PH
-1071599135,1071599300,US
-1071599301,1071599313,PH
-1071599314,1071599392,US
-1071599393,1071599415,PH
-1071599416,1071599477,US
-1071599478,1071599490,PH
-1071599491,1071954175,US
-1071954176,1071954183,GB
-1071954184,1071954239,US
-1071954240,1071954271,GB
-1071954272,1071954279,US
-1071954280,1071954287,FR
-1071954288,1071954303,US
+1071579648,1071954303,US
1071954304,1071954319,GB
-1071954320,1071954375,US
-1071954376,1071954383,NE
-1071954384,1072228863,US
+1071954320,1072157631,US
+1072157632,1072157663,DE
+1072157664,1072228863,US
1072228864,1072229375,CA
1072229376,1072360703,US
1072360704,1072360959,HK
-1072360960,1072383543,US
-1072383544,1072383551,ME
-1072383552,1072571831,US
-1072571832,1072571839,CA
-1072571840,1072707327,US
+1072360960,1072707327,US
1072707328,1072707583,IN
-1072707584,1072710327,US
-1072710328,1072710335,DE
-1072710336,1072712479,US
-1072712480,1072712495,IL
-1072712496,1072715943,US
-1072715944,1072715951,IL
-1072715952,1072718031,US
-1072718032,1072718039,DE
-1072718040,1072725071,US
-1072725072,1072725079,NZ
-1072725080,1072725311,US
-1072725312,1072725343,DE
-1072725344,1072727039,US
-1072727040,1072727047,JM
-1072727048,1072727215,US
-1072727216,1072727223,JM
-1072727224,1072773559,US
-1072773560,1072773567,JP
-1072773568,1072774335,US
-1072774336,1072774367,JP
-1072774368,1072774463,US
-1072774464,1072774479,JP
-1072774480,1072777631,US
-1072777632,1072777647,TW
-1072777648,1072785415,US
-1072785416,1072785423,DK
-1072785424,1072785439,US
-1072785440,1072785471,DK
-1072785472,1072790015,US
-1072790016,1072790031,JP
-1072790032,1072923135,US
+1072707584,1072923135,US
1072923136,1072923391,CA
-1072923392,1072923903,US
-1072923904,1072924159,CA
+1072923392,1072924159,US
1072924160,1072924671,HT
1072924672,1072925183,US
1072925184,1072925695,GB
1072925696,1072926207,CA
-1072926208,1072926471,US
-1072926472,1072926527,CA
-1072926528,1072926591,US
-1072926592,1072926719,CA
+1072926208,1072926463,US
+1072926464,1072926719,CA
1072926720,1072926975,PH
1072926976,1072927487,CA
1072927488,1072927743,US
-1072927744,1072928047,CA
-1072928048,1072928063,IE
-1072928064,1072928095,US
-1072928096,1072928127,CA
-1072928128,1072928255,US
-1072928256,1072928263,CA
-1072928264,1072928287,US
-1072928288,1072928319,CA
-1072928320,1072928447,US
-1072928448,1072928767,CA
+1072927744,1072927999,CA
+1072928000,1072928511,US
+1072928512,1072928767,CA
1072928768,1072929023,US
1072929024,1072929535,CA
-1072929536,1072929791,US
-1072929792,1072930047,CA
-1072930048,1072930303,US
+1072929536,1072930303,US
1072930304,1072931071,CA
-1072931072,1072931199,US
-1072931200,1072931327,AE
+1072931072,1072931327,US
1072931328,1072931583,CA
1072931584,1072931839,SY
1072931840,1072932607,CA
1072932608,1072932863,NG
-1072932864,1072933119,US
-1072933120,1072933151,FR
-1072933152,1072933247,CA
-1072933248,1072933375,US
-1072933376,1072934399,CA
-1072934400,1072934719,US
-1072934720,1072934751,CA
-1072934752,1072934775,US
+1072932864,1072933887,US
+1072933888,1072934399,CA
+1072934400,1072934775,US
1072934776,1072934783,FR
-1072934784,1072934847,AU
-1072934848,1072934879,CA
-1072934880,1072934911,TW
-1072934912,1072934943,CA
-1072934944,1072934975,PH
-1072934976,1072935039,CA
-1072935040,1072935135,US
-1072935136,1072935159,CA
-1072935160,1072935167,US
-1072935168,1072935679,CA
-1072935680,1072935807,PH
-1072935808,1072936447,CA
+1072934784,1072935423,US
+1072935424,1072935679,CA
+1072935680,1072936191,US
+1072936192,1072936447,CA
1072936448,1072936703,PH
1072936704,1072937215,US
1072937216,1072937471,IR
1072937472,1072937727,US
1072937728,1072938239,CA
1072938240,1072938495,VG
-1072938496,1072938751,CA
-1072938752,1072939007,US
+1072938496,1072939007,US
1072939008,1072939263,CA
-1072939264,1072939327,US
-1072939328,1072939519,CA
-1072939520,1072940031,US
-1072940032,1072942079,CA
-1072942080,1072942143,US
-1072942144,1072942335,CA
-1072942336,1072942591,US
-1072942592,1072955391,CA
-1072955392,1073022975,US
+1072939264,1072941055,US
+1072941056,1072942079,CA
+1072942080,1072943103,US
+1072943104,1072945151,CA
+1072945152,1073022975,US
1073022976,1073025791,HN
1073025792,1073026047,NI
1073026048,1073026303,US
@@ -29564,9 +9875,11 @@
1073028608,1073029119,GD
1073029120,1073031167,PR
1073031168,1073031423,US
-1073031424,1073031935,CW
-1073031936,1073033215,US
-1073033216,1073035263,CW
+1073031424,1073031679,CW
+1073031680,1073033215,US
+1073033216,1073034239,CW
+1073034240,1073034495,BB
+1073034496,1073035263,CW
1073035264,1073036032,GD
1073036033,1073036543,US
1073036544,1073037055,MX
@@ -29586,1575 +9899,389 @@
1073049600,1073052671,BS
1073052672,1073075460,US
1073075461,1073075716,NL
-1073075717,1073091397,US
-1073091398,1073091407,CH
-1073091408,1073093646,US
-1073093647,1073093654,PE
-1073093655,1073094557,US
-1073094558,1073094570,IT
-1073094571,1073373183,US
+1073075717,1073373183,US
1073373184,1073381375,CA
-1073381376,1073381391,US
-1073381392,1073381463,NL
-1073381464,1073381471,US
-1073381472,1073381631,NL
-1073381632,1073381887,EU
-1073381888,1073383727,US
-1073383728,1073383735,CA
-1073383736,1073383839,US
-1073383840,1073383871,VE
-1073383872,1073384191,US
-1073384192,1073384223,BR
-1073384224,1073384287,US
-1073384288,1073384295,BR
-1073384296,1073384511,US
-1073384512,1073384575,CA
-1073384576,1073384607,US
-1073384608,1073384639,BR
-1073384640,1073384711,US
-1073384712,1073384719,CL
-1073384720,1073384775,US
-1073384776,1073384783,CA
-1073384784,1073384879,US
-1073384880,1073384887,CA
-1073384888,1073385087,US
-1073385088,1073385095,CA
-1073385096,1073385151,US
-1073385152,1073385183,BR
-1073385184,1073385279,US
-1073385280,1073385311,BR
-1073385312,1073390207,US
-1073390208,1073390215,CA
-1073390216,1073390271,US
-1073390272,1073390303,CA
-1073390304,1073393887,US
-1073393888,1073393895,CO
-1073393896,1073393911,US
-1073393912,1073393919,CO
-1073393920,1073394191,US
-1073394192,1073394207,MX
-1073394208,1073394239,CA
-1073394240,1073394247,MX
-1073394248,1073394263,US
-1073394264,1073394271,MX
-1073394272,1073394279,US
-1073394280,1073394287,MX
-1073394288,1073394295,US
-1073394296,1073394303,MX
-1073394304,1073394311,AR
-1073394312,1073394439,US
-1073394440,1073394463,MX
-1073394464,1073394495,US
-1073394496,1073394503,MX
-1073394504,1073394543,US
-1073394544,1073394559,MX
-1073394560,1073394591,US
-1073394592,1073394623,AF
-1073394624,1073394719,US
-1073394720,1073394751,BR
-1073394752,1073394767,AR
-1073394768,1073394799,US
-1073394800,1073394807,CA
-1073394808,1073394967,US
-1073394968,1073394975,AR
-1073394976,1073395167,US
-1073395168,1073395175,AR
-1073395176,1073395183,US
-1073395184,1073395191,AR
-1073395192,1073395239,US
-1073395240,1073395247,BR
-1073395248,1073395399,US
-1073395400,1073395407,CA
-1073395408,1073395423,PR
-1073395424,1073395967,US
-1073395968,1073395999,BR
-1073396000,1073396191,US
-1073396192,1073396207,CA
-1073396208,1073396215,BR
-1073396216,1073396751,US
-1073396752,1073396831,BR
-1073396832,1073396863,US
-1073396864,1073396895,CA
-1073396896,1073396911,US
-1073396912,1073396919,CA
-1073396920,1073396927,US
-1073396928,1073396935,VE
-1073396936,1073396959,US
-1073396960,1073396991,CA
-1073396992,1073397063,US
-1073397064,1073397071,BR
-1073397072,1073434783,US
-1073434784,1073434799,CA
-1073434800,1073434807,GB
-1073434808,1073435583,US
-1073435584,1073435647,CA
-1073435648,1073438207,US
-1073438208,1073438463,A2
-1073438464,1074020351,US
+1073381376,1073454591,US
+1073454592,1073454847,KY
+1073454848,1074020351,US
1074020352,1074028543,CA
1074028544,1074118655,US
-1074118656,1074120703,CA
-1074120704,1074120719,US
-1074120720,1074120959,CA
+1074118656,1074120959,CA
1074120960,1074121215,US
-1074121216,1074122415,CA
-1074122416,1074122431,US
-1074122432,1074125055,CA
+1074121216,1074125055,CA
1074125056,1074125311,US
1074125312,1074126847,CA
1074126848,1074127359,US
-1074127360,1074128511,CA
-1074128512,1074128575,US
-1074128576,1074130943,CA
+1074127360,1074130943,CA
1074130944,1074131199,US
1074131200,1074135039,CA
1074135040,1074184191,US
1074184192,1074188287,CA
-1074188288,1074229247,US
-1074229248,1074241535,CA
+1074188288,1074233343,US
+1074233344,1074241535,CA
1074241536,1074397439,US
-1074397440,1074399039,CA
-1074399040,1074399231,US
-1074399232,1074462463,CA
-1074462464,1074463743,US
-1074463744,1074493695,CA
-1074493696,1074493823,US
-1074493824,1074494719,CA
+1074397440,1074398975,CA
+1074398976,1074399231,US
+1074399232,1074406655,CA
+1074406656,1074407167,US
+1074407168,1074408191,CA
+1074408192,1074408447,US
+1074408448,1074409471,CA
+1074409472,1074409727,US
+1074409728,1074410495,CA
+1074410496,1074411007,US
+1074411008,1074413567,CA
+1074413568,1074413823,US
+1074413824,1074417407,CA
+1074417408,1074418431,US
+1074418432,1074419967,CA
+1074419968,1074420223,US
+1074420224,1074421247,CA
+1074421248,1074421503,US
+1074421504,1074426623,CA
+1074426624,1074427135,US
+1074427136,1074428671,CA
+1074428672,1074428927,US
+1074428928,1074430207,CA
+1074430208,1074430463,US
+1074430464,1074433535,CA
+1074433536,1074433791,US
+1074433792,1074437119,CA
+1074437120,1074437375,US
+1074437376,1074438911,CA
+1074438912,1074439167,US
+1074439168,1074441727,CA
+1074441728,1074441983,US
+1074441984,1074444031,CA
+1074444032,1074444287,US
+1074444288,1074445311,CA
+1074445312,1074445567,US
+1074445568,1074446079,CA
+1074446080,1074446335,US
+1074446336,1074453247,CA
+1074453248,1074453503,US
+1074453504,1074455039,CA
+1074455040,1074455295,US
+1074455296,1074456319,CA
+1074456320,1074456575,US
+1074456576,1074459135,CA
+1074459136,1074459391,US
+1074459392,1074462207,CA
+1074462208,1074463743,US
+1074463744,1074465535,CA
+1074465536,1074465791,US
+1074465792,1074466815,CA
+1074466816,1074467071,US
+1074467072,1074469887,CA
+1074469888,1074470143,US
+1074470144,1074472191,CA
+1074472192,1074472447,US
+1074472448,1074474751,CA
+1074474752,1074475263,US
+1074475264,1074479871,CA
+1074479872,1074480127,US
+1074480128,1074482175,CA
+1074482176,1074482431,US
+1074482432,1074484479,CA
+1074484480,1074484735,US
+1074484736,1074488319,CA
+1074488320,1074488831,US
+1074488832,1074493695,CA
+1074493696,1074494207,US
+1074494208,1074494719,CA
1074494720,1074495743,US
-1074495744,1074513407,CA
-1074513408,1074672671,US
-1074672672,1074672703,IN
-1074672704,1074672943,US
-1074672944,1074672959,DK
-1074672960,1074673663,US
-1074673664,1074673679,CY
-1074673680,1074675679,US
-1074675680,1074675687,GB
-1074675688,1074680623,US
-1074680624,1074680639,CA
-1074680640,1074680703,US
-1074680704,1074680719,IL
-1074680720,1074681343,US
-1074681344,1074681359,CA
-1074681360,1074682687,US
-1074682688,1074682751,CA
-1074682752,1074683023,US
-1074683024,1074683039,CA
-1074683040,1074683807,US
-1074683808,1074683839,CA
-1074683840,1074690895,US
-1074690896,1074690911,AR
-1074690912,1074690943,US
-1074690944,1074691007,AR
-1074691008,1074691135,US
-1074691136,1074691199,AR
-1074691200,1074701583,US
-1074701584,1074701591,CA
-1074701592,1074701599,US
-1074701600,1074701631,CA
-1074701632,1074702783,US
-1074702784,1074702847,CA
-1074702848,1074703615,US
+1074495744,1074497023,CA
+1074497024,1074497279,US
+1074497280,1074498815,CA
+1074498816,1074499071,US
+1074499072,1074501375,CA
+1074501376,1074501631,US
+1074501632,1074503935,CA
+1074503936,1074504191,US
+1074504192,1074505215,CA
+1074505216,1074505471,US
+1074505472,1074508031,CA
+1074508032,1074508287,US
+1074508288,1074509823,CA
+1074509824,1074510079,US
+1074510080,1074513151,CA
+1074513152,1074703615,US
1074703616,1074703871,GB
1074703872,1074704383,US
1074704384,1074704639,GB
-1074704640,1074704703,US
-1074704704,1074704711,CH
-1074704712,1074704767,US
-1074704768,1074704831,CH
-1074704832,1074705727,US
-1074705728,1074705743,GB
-1074705744,1074705791,US
-1074705792,1074705799,IL
-1074705800,1074705887,US
-1074705888,1074705903,IL
-1074705904,1074706175,US
-1074706176,1074706303,IL
-1074706304,1074706367,US
-1074706368,1074706431,GB
-1074706432,1074706679,US
-1074706680,1074706687,GB
-1074706688,1074707775,US
-1074707776,1074707839,GB
-1074707840,1074707967,US
+1074704640,1074707967,US
1074707968,1074708223,GB
1074708224,1074708991,US
1074708992,1074709247,PH
-1074709248,1074711039,US
-1074711040,1074711055,IN
-1074711056,1074711103,US
-1074711104,1074711167,GB
-1074711168,1074716679,US
-1074716680,1074716687,GB
-1074716688,1074716719,US
-1074716720,1074716735,GB
-1074716736,1074733055,US
+1074709248,1074733055,US
1074733056,1074737151,AU
1074737152,1074745343,CA
1074745344,1074757631,US
1074757632,1074765823,CA
1074765824,1074777343,US
1074777344,1074777599,AU
-1074777600,1074783167,US
-1074783168,1074783199,CA
-1074783200,1074783231,BM
-1074783232,1074785823,US
-1074785824,1074785855,AU
-1074785856,1074870271,US
-1074870272,1074872319,CA
+1074777600,1074871591,US
+1074871592,1074871599,CA
+1074871600,1074871807,US
+1074871808,1074872319,CA
1074872320,1074937855,US
1074937856,1074946047,CA
1074946048,1074962431,US
1074962432,1074970623,CA
-1074970624,1075061495,US
-1075061496,1075061503,PE
-1075061504,1075062936,US
+1074970624,1075062936,US
1075062937,1075062937,SA
-1075062938,1075117287,US
-1075117288,1075117311,IN
-1075117312,1075147266,US
+1075062938,1075147266,US
1075147267,1075147267,PK
1075147268,1075265535,US
1075265536,1075269631,KR
-1075269632,1075421183,US
+1075269632,1075384319,US
+1075385600,1075386111,US
+1075387136,1075387391,US
+1075388416,1075421183,US
1075421184,1075429375,CA
1075429376,1075478527,US
-1075478528,1075479103,CA
-1075479104,1075479111,GB
-1075479112,1075479135,CA
-1075479136,1075479151,US
-1075479152,1075479607,CA
-1075479608,1075479615,US
-1075479616,1075482655,CA
-1075482656,1075482671,US
-1075482672,1075482967,CA
-1075482968,1075482975,US
-1075482976,1075494911,CA
-1075494912,1075513151,US
-1075513152,1075513183,KW
-1075513184,1075532663,US
-1075532664,1075532673,IT
-1075532674,1075558143,US
+1075478528,1075494911,CA
+1075494912,1075558143,US
1075558144,1075558911,VI
1075558912,1075576831,US
-1075576832,1075577087,NO
-1075577088,1075577103,GB
-1075577104,1075577271,NO
-1075577272,1075577279,GB
-1075577280,1075577311,NO
-1075577312,1075577599,GB
-1075577600,1075577615,NO
-1075577616,1075577623,GB
-1075577624,1075577775,NO
-1075577776,1075577791,GB
-1075577792,1075577855,NO
-1075577856,1075578111,GB
-1075578112,1075578623,NO
-1075578624,1075578879,GB
-1075578880,1075578927,NO
-1075578928,1075578943,GB
-1075578944,1075579007,NO
-1075579008,1075579039,GB
-1075579040,1075579047,NO
-1075579048,1075579059,GB
-1075579060,1075579747,NO
-1075579748,1075579751,GB
-1075579752,1075579935,NO
-1075579936,1075579943,GB
-1075579944,1075579967,NO
-1075579968,1075579975,GB
-1075579976,1075579983,NO
-1075579984,1075579999,GB
-1075580000,1075580055,NO
-1075580056,1075580063,GB
-1075580064,1075581271,NO
-1075581272,1075581279,NL
-1075581280,1075581295,NO
-1075581296,1075581311,NL
-1075581312,1075582975,NO
-1075582976,1075583007,NL
-1075583008,1075583039,NO
-1075583040,1075583055,NL
-1075583056,1075583119,NO
-1075583120,1075583123,NL
-1075583124,1075583127,NO
-1075583128,1075583135,NL
-1075583136,1075583147,NO
-1075583148,1075583151,NL
-1075583152,1075583503,NO
-1075583504,1075583519,NL
-1075583520,1075583551,NO
-1075583552,1075583567,NL
-1075583568,1075583583,NO
-1075583584,1075583591,NL
-1075583592,1075583647,NO
-1075583648,1075583663,NL
-1075583664,1075584071,NO
-1075584072,1075584095,NL
-1075584096,1075584695,NO
-1075584696,1075584711,NL
-1075584712,1075585023,NO
-1075585024,1075593967,US
-1075593968,1075593983,CA
-1075593984,1075594975,US
-1075594976,1075594991,CA
-1075594992,1075595343,US
-1075595344,1075595359,CA
-1075595360,1075596031,US
-1075596032,1075596047,CA
-1075596048,1075596831,US
-1075596832,1075596847,CA
-1075596848,1075597023,US
-1075597024,1075597039,CA
-1075597040,1075597167,US
-1075597168,1075597183,CA
-1075597184,1075597567,US
-1075597568,1075597599,CA
-1075597600,1075598367,US
-1075598368,1075598383,CA
-1075598384,1075598943,US
-1075598944,1075598991,CA
-1075598992,1075599007,US
-1075599008,1075599039,CA
-1075599040,1075599471,US
-1075599472,1075599487,IL
-1075599488,1075599967,US
-1075599968,1075599983,IE
-1075599984,1075601279,US
-1075601280,1075601295,CA
-1075601296,1075609599,US
+1075576832,1075577087,GB
+1075577088,1075579391,NO
+1075579392,1075579903,GB
+1075579904,1075585023,NO
+1075585024,1075609599,US
1075609600,1075613695,TT
-1075613696,1075744767,US
-1075744768,1075748863,A2
-1075748864,1075782143,US
-1075782144,1075782399,US
-1075782400,1075855359,US
+1075613696,1075769343,US
+1075769344,1075773439,CA
+1075773440,1075855359,US
1075855360,1075871743,DO
1075871744,1075970047,US
1075970048,1075972095,CA
1075972096,1075972351,GB
-1075972352,1075973703,US
-1075973704,1075973711,CA
-1075973712,1075973887,US
+1075972352,1075973887,US
1075973888,1075974143,CA
1075974144,1075975167,US
1075975168,1075975679,CA
-1075975680,1075975815,US
-1075975816,1075975983,CA
-1075975984,1075975999,US
-1075976000,1075976175,CA
-1075976176,1075976191,US
+1075975680,1075976127,US
+1075976128,1075976159,CA
+1075976160,1075976191,US
1075976192,1075976447,CA
-1075976448,1075976479,US
-1075976480,1075976511,CA
-1075976512,1075976543,US
-1075976544,1075976639,CA
-1075976640,1075976655,US
-1075976656,1075976663,CA
-1075976664,1075976671,US
-1075976672,1075976687,CA
-1075976688,1075976695,US
-1075976696,1075976703,CA
-1075976704,1075976959,US
+1075976448,1075976959,US
1075976960,1075978239,CA
-1075978240,1075978687,US
-1075978688,1075978719,CA
-1075978720,1075979551,US
-1075979552,1075979583,CA
-1075979584,1075980575,US
-1075980576,1075980591,GB
-1075980592,1075982335,US
+1075978240,1075982335,US
1075982336,1075982591,CA
-1075982592,1075982607,US
-1075982608,1075982655,CA
-1075982656,1075982671,MX
-1075982672,1075982695,CA
-1075982696,1075982703,US
-1075982704,1075982751,CA
-1075982752,1075982783,MX
-1075982784,1075982815,US
-1075982816,1075982831,CA
-1075982832,1075982847,US
-1075982848,1075983167,CA
-1075983168,1075983175,US
-1075983176,1075983199,CA
-1075983200,1075983231,US
-1075983232,1075984383,CA
+1075982592,1075982847,US
+1075982848,1075983103,CA
+1075983104,1075983359,US
+1075983360,1075984383,CA
1075984384,1075985919,US
-1075985920,1075987583,CA
-1075987584,1075987615,US
-1075987616,1075988991,CA
-1075988992,1075989023,US
-1075989024,1075989055,CA
-1075989056,1075989119,US
-1075989120,1075989263,CA
-1075989264,1075989279,US
-1075989280,1075989295,CA
-1075989296,1075989311,US
-1075989312,1075989327,CA
-1075989328,1075989335,US
-1075989336,1075989359,CA
-1075989360,1075989439,US
-1075989440,1075989455,CA
-1075989456,1075989487,US
-1075989488,1075989791,CA
-1075989792,1075989823,US
-1075989824,1075989839,CA
-1075989840,1075989855,US
-1075989856,1075990527,CA
-1075990528,1075990727,US
-1075990728,1075990735,CA
-1075990736,1075991671,US
-1075991672,1075991679,CA
-1075991680,1075992319,US
-1075992320,1075992447,GB
-1075992448,1075993215,US
-1075993216,1075993231,SG
-1075993232,1075994607,US
-1075994608,1075994623,BE
+1075985920,1075987455,CA
+1075987456,1075987967,US
+1075987968,1075988223,CA
+1075988224,1075988319,US
+1075988320,1075988351,CA
+1075988352,1075988479,US
+1075988480,1075988991,CA
+1075988992,1075989231,US
+1075989232,1075989239,CA
+1075989240,1075989503,US
+1075989504,1075989759,CA
+1075989760,1075990015,US
+1075990016,1075990527,CA
+1075990528,1075994623,US
1075994624,1075995007,CA
-1075995008,1075995023,VG
-1075995024,1075995039,US
-1075995040,1075995055,CA
-1075995056,1075995071,US
-1075995072,1075995079,MX
-1075995080,1075995087,CA
-1075995088,1075995103,US
-1075995104,1075995263,CA
-1075995264,1075995295,US
-1075995296,1075995326,CA
-1075995327,1075995391,US
-1075995392,1075995479,CA
-1075995480,1075995487,US
-1075995488,1075995503,CA
-1075995504,1075995519,MX
-1075995520,1075995567,CA
-1075995568,1075995599,US
-1075995600,1075996671,CA
-1075996672,1075996751,US
-1075996752,1075996767,CA
-1075996768,1075996799,US
-1075996800,1075997119,CA
-1075997120,1075997183,MX
-1075997184,1075997519,CA
-1075997520,1075997535,US
-1075997536,1075997695,CA
-1075997696,1075997823,CR
-1075997824,1075997919,US
-1075997920,1075997935,CA
-1075997936,1075997951,US
-1075997952,1075998103,CA
-1075998104,1075998207,US
-1075998208,1075998351,CA
-1075998352,1075998431,US
-1075998432,1075999231,CA
+1075995008,1075995103,US
+1075995104,1075995135,CA
+1075995136,1075995647,US
+1075995648,1075996671,CA
+1075996672,1075997183,US
+1075997184,1075997439,CA
+1075997440,1075998207,US
+1075998208,1075998271,CA
+1075998272,1075998463,US
+1075998464,1075999231,CA
1075999232,1075999999,US
1076000000,1076000255,CA
1076000256,1076000767,US
1076000768,1076002047,CA
-1076002048,1076002823,US
-1076002824,1076002831,CA
-1076002832,1076002879,US
-1076002880,1076002911,CA
-1076002912,1076002943,US
-1076002944,1076002975,CA
-1076002976,1076003023,US
-1076003024,1076003031,CA
-1076003032,1076003039,US
-1076003040,1076003055,CA
-1076003056,1076003071,US
+1076002048,1076003071,US
1076003072,1076003327,CA
-1076003328,1076003359,US
-1076003360,1076003375,CA
-1076003376,1076003391,US
-1076003392,1076003407,CA
-1076003408,1076003519,US
-1076003520,1076004383,CA
-1076004384,1076004423,US
-1076004424,1076004431,CA
-1076004432,1076004471,US
-1076004472,1076004479,CA
-1076004480,1076004495,US
-1076004496,1076004511,CA
-1076004512,1076004543,US
-1076004544,1076004575,CA
-1076004576,1076004863,US
+1076003328,1076003583,US
+1076003584,1076004351,CA
+1076004352,1076004863,US
1076004864,1076005119,CA
-1076005120,1076005151,NZ
-1076005152,1076005159,CA
-1076005160,1076005167,US
-1076005168,1076005191,CA
-1076005192,1076005207,US
-1076005208,1076005223,CA
-1076005224,1076005239,US
-1076005240,1076005247,CA
-1076005248,1076005263,US
-1076005264,1076005279,CA
-1076005280,1076005311,US
-1076005312,1076005343,CA
-1076005344,1076005375,US
-1076005376,1076005887,CA
-1076005888,1076006015,US
-1076006016,1076006055,CA
-1076006056,1076006079,US
-1076006080,1076006111,CA
-1076006112,1076006175,US
-1076006176,1076006207,CA
-1076006208,1076006223,US
-1076006224,1076006239,CA
-1076006240,1076006271,US
-1076006272,1076006303,CA
-1076006304,1076006335,US
-1076006336,1076006367,CA
-1076006368,1076006383,US
-1076006384,1076006719,CA
-1076006720,1076006751,US
-1076006752,1076006783,CA
-1076006784,1076006911,US
+1076005120,1076005311,US
+1076005312,1076005319,CA
+1076005320,1076005375,US
+1076005376,1076005631,CA
+1076005632,1076006399,US
+1076006400,1076006655,CA
+1076006656,1076006911,US
1076006912,1076007167,CA
-1076007168,1076007183,US
-1076007184,1076007247,CA
-1076007248,1076007263,US
-1076007264,1076007383,CA
-1076007384,1076007391,US
-1076007392,1076007947,CA
-1076007948,1076007951,US
-1076007952,1076008063,CA
-1076008064,1076008191,US
-1076008192,1076009631,CA
-1076009632,1076009639,US
-1076009640,1076009643,CA
-1076009644,1076009663,US
-1076009664,1076009695,CA
-1076009696,1076009727,US
-1076009728,1076009887,CA
-1076009888,1076009919,US
-1076009920,1076009983,CA
-1076009984,1076010623,US
-1076010624,1076010671,CA
-1076010672,1076010687,US
-1076010688,1076010727,CA
-1076010728,1076010735,US
-1076010736,1076011007,CA
-1076011008,1076012236,US
-1076012237,1076012237,IN
-1076012238,1076013094,US
-1076013095,1076013095,IN
-1076013096,1076018303,US
-1076018304,1076018367,BR
-1076018368,1076024307,US
-1076024308,1076024315,CA
-1076024316,1076026367,US
-1076026368,1076026591,CA
-1076026592,1076026623,US
+1076007168,1076007423,US
+1076007424,1076007935,CA
+1076007936,1076008447,US
+1076008448,1076009215,CA
+1076009216,1076009727,US
+1076009728,1076009983,CA
+1076009984,1076026623,US
1076026624,1076026879,CA
-1076026880,1076026943,US
-1076026944,1076026975,CA
-1076026976,1076027007,US
-1076027008,1076027015,CA
-1076027016,1076027031,US
-1076027032,1076027263,CA
-1076027264,1076027295,US
-1076027296,1076027407,CA
-1076027408,1076027423,US
-1076027424,1076027615,CA
-1076027616,1076027631,US
-1076027632,1076027711,CA
-1076027712,1076027727,US
-1076027728,1076027775,CA
-1076027776,1076027791,US
-1076027792,1076027807,CA
-1076027808,1076027823,US
-1076027824,1076027911,CA
-1076027912,1076027919,US
-1076027920,1076028031,CA
-1076028032,1076028063,US
-1076028064,1076028079,CA
-1076028080,1076028095,US
-1076028096,1076028143,CA
-1076028144,1076028151,US
-1076028152,1076028479,CA
-1076028480,1076028543,GB
-1076028544,1076028927,US
+1076026880,1076028159,US
+1076028160,1076028415,CA
+1076028416,1076028927,US
1076028928,1076029183,BZ
-1076029184,1076029215,CA
-1076029216,1076029223,US
-1076029224,1076029231,DM
-1076029232,1076029239,CA
-1076029240,1076029247,US
-1076029248,1076029255,CA
-1076029256,1076029271,US
-1076029272,1076029279,CA
-1076029280,1076029287,US
-1076029288,1076029295,CA
-1076029296,1076029311,US
-1076029312,1076029319,GB
-1076029320,1076029327,CA
-1076029328,1076029343,US
-1076029344,1076029415,CA
-1076029416,1076029422,US
-1076029423,1076029430,CA
-1076029431,1076029439,US
-1076029440,1076030223,CA
-1076030224,1076030231,US
-1076030232,1076030271,CA
-1076030272,1076030287,US
-1076030288,1076030303,CA
-1076030304,1076030335,US
-1076030336,1076030399,CA
-1076030400,1076030471,US
-1076030472,1076030527,CA
-1076030528,1076030567,US
-1076030568,1076030575,CA
-1076030576,1076030591,US
-1076030592,1076030599,CA
-1076030600,1076030607,US
-1076030608,1076030623,CA
-1076030624,1076030631,US
-1076030632,1076030975,CA
-1076030976,1076031743,US
+1076029184,1076029439,US
+1076029440,1076030207,CA
+1076030208,1076031743,US
1076031744,1076031999,CA
1076032000,1076032255,US
1076032256,1076032511,CA
-1076032512,1076033671,US
-1076033672,1076033687,CA
-1076033688,1076033919,US
-1076033920,1076033951,CA
-1076033952,1076034479,US
-1076034480,1076034495,CA
-1076034496,1076035519,US
+1076032512,1076035519,US
1076035520,1076035583,IN
-1076035584,1076036247,US
-1076036248,1076036255,IL
-1076036256,1076036351,US
-1076036352,1076036605,ES
-1076036606,1076036735,US
-1076036736,1076036751,CA
-1076036752,1076036791,US
-1076036792,1076036799,ZA
-1076036800,1076037439,US
-1076037440,1076037447,MX
-1076037448,1076043775,US
-1076043776,1076043839,CA
-1076043840,1076043871,MX
-1076043872,1076044095,US
-1076044096,1076044127,IN
-1076044128,1076044175,US
-1076044176,1076044183,IE
-1076044184,1076044191,FR
-1076044192,1076044551,US
-1076044552,1076044567,DE
-1076044568,1076044703,US
-1076044704,1076044735,AR
-1076044736,1076047527,US
-1076047528,1076047535,JP
-1076047536,1076047551,US
-1076047552,1076047583,CH
-1076047584,1076047967,US
-1076047968,1076047975,VE
-1076047976,1076048639,US
-1076048640,1076048671,MX
-1076048672,1076048703,AR
-1076048704,1076048735,US
-1076048736,1076048767,CA
-1076048768,1076048831,US
-1076048832,1076048863,IL
-1076048864,1076049151,US
+1076035584,1076049151,US
1076049152,1076049407,DE
-1076049408,1076049439,CA
-1076049440,1076049919,US
+1076049408,1076049919,US
1076049920,1076050175,IL
1076050176,1076174847,US
1076174848,1076178943,BM
-1076178944,1076179161,US
-1076179162,1076179163,IN
-1076179164,1076179196,US
-1076179197,1076179198,IN
-1076179199,1076180201,US
-1076180202,1076180222,PK
-1076180223,1076180795,US
-1076180796,1076180799,IN
-1076180800,1076181236,US
-1076181237,1076181237,CA
-1076181238,1076183039,US
-1076183040,1076183071,IN
-1076183072,1076183231,US
-1076183232,1076183295,CA
-1076183296,1076183807,US
+1076178944,1076183807,US
1076183808,1076184063,CA
-1076184064,1076184095,VE
-1076184096,1076184159,US
-1076184160,1076184191,PK
-1076184192,1076184223,IN
-1076184224,1076184255,US
-1076184256,1076184287,BE
-1076184288,1076184319,CA
-1076184320,1076185215,US
-1076185216,1076185343,CA
-1076185344,1076185439,US
-1076185440,1076185471,IT
-1076185472,1076185503,US
-1076185504,1076185535,DO
-1076185536,1076185919,US
-1076185920,1076185951,CA
-1076185952,1076185983,US
-1076185984,1076186015,PK
-1076186016,1076186303,US
-1076186304,1076186335,CA
-1076186336,1076186367,IT
-1076186368,1076186751,US
-1076186752,1076186783,CA
-1076186784,1076186815,TW
-1076186816,1076187743,US
-1076187744,1076187775,CA
-1076187776,1076187807,AU
-1076187808,1076189183,US
-1076189184,1076189215,VE
-1076189216,1076189279,CA
-1076189280,1076189311,US
-1076189312,1076189375,CA
-1076189376,1076189407,US
-1076189408,1076189439,IN
-1076189440,1076190079,US
-1076190080,1076190143,IN
-1076190144,1076190175,US
-1076190176,1076190207,IN
-1076190208,1076190783,US
-1076190784,1076190815,CA
-1076190816,1076190847,IN
-1076190848,1076190913,US
-1076190914,1076190945,IN
-1076190946,1076191231,US
-1076191232,1076191487,CA
-1076191488,1076192127,US
-1076192128,1076192191,CA
-1076192192,1076192767,US
-1076192768,1076192831,IN
-1076192832,1076193151,US
-1076193152,1076193183,TR
-1076193184,1076193247,US
-1076193248,1076193279,CA
+1076184064,1076193279,US
1076193280,1076193535,PK
-1076193536,1076194367,US
-1076194368,1076194399,IN
-1076194400,1076194431,IL
-1076194432,1076194463,IN
-1076194464,1076194495,BE
-1076194496,1076194559,US
+1076193536,1076194559,US
1076194560,1076194815,CA
1076194816,1076195071,US
1076195072,1076195327,IN
-1076195328,1076195551,US
-1076195552,1076195583,IN
-1076195584,1076195871,US
-1076195872,1076195903,BE
-1076195904,1076195999,US
-1076196000,1076196031,CN
-1076196032,1076196063,CA
-1076196064,1076196095,US
-1076196096,1076196415,CA
-1076196416,1076196479,US
-1076196480,1076196511,FR
-1076196512,1076196641,US
-1076196642,1076196671,BE
-1076196672,1076196863,US
-1076196864,1076196991,IN
-1076196992,1076197119,US
+1076195328,1076196095,US
+1076196096,1076196351,CA
+1076196352,1076197119,US
1076197120,1076197375,CA
-1076197376,1076198399,US
-1076198400,1076198655,CA
+1076197376,1076198655,US
1076198656,1076198911,AE
-1076198912,1076218015,US
-1076218016,1076218023,GB
-1076218024,1076219407,US
-1076219408,1076219415,GB
-1076219416,1076233177,US
+1076198912,1076233177,US
1076233178,1076233178,TC
-1076233179,1076281695,US
-1076281696,1076281727,TH
-1076281728,1076282111,US
-1076282112,1076282143,AU
-1076282144,1076282351,US
-1076282352,1076282367,CA
-1076282368,1076283903,US
+1076233179,1076283903,US
1076283904,1076284159,NO
-1076284160,1076284319,US
-1076284320,1076284335,GB
-1076284336,1076284679,US
-1076284680,1076284687,HU
-1076284688,1076285439,US
-1076285440,1076285455,DK
-1076285456,1076289951,US
-1076289952,1076289967,GB
-1076289968,1076291903,US
-1076291904,1076291919,UA
-1076291920,1076292559,US
-1076292560,1076292567,NL
-1076292568,1076294655,US
-1076294656,1076294687,CY
-1076294688,1076294703,US
-1076294704,1076294719,NO
-1076294720,1076295167,US
-1076295168,1076295199,CY
-1076295200,1076306463,US
-1076306464,1076306479,GB
-1076306480,1076306511,US
-1076306512,1076306527,AE
-1076306528,1076307495,US
-1076307496,1076307503,DE
-1076307504,1076307519,US
-1076307520,1076307535,DE
-1076307536,1076307743,US
-1076307744,1076307807,DE
-1076307808,1076307967,US
+1076284160,1076307967,US
1076307968,1076308223,DE
-1076308224,1076308495,US
-1076308496,1076308511,AE
-1076308512,1076308575,US
-1076308576,1076308591,IL
-1076308592,1076308671,US
-1076308672,1076308687,DE
-1076308688,1076308991,US
-1076308992,1076309007,IE
-1076309008,1076309119,US
-1076309120,1076309135,IE
-1076309136,1076309151,US
-1076309152,1076309183,DE
-1076309184,1076309967,US
-1076309968,1076309983,DE
-1076309984,1076310015,US
+1076308224,1076310015,US
1076310016,1076310271,DE
-1076310272,1076310303,AE
-1076310304,1076310367,US
-1076310368,1076310383,IE
-1076310384,1076310399,US
-1076310400,1076310431,AE
-1076310432,1076310463,AU
-1076310464,1076310527,IL
-1076310528,1076338687,US
+1076310272,1076338687,US
1076338688,1076346879,CA
1076346880,1076387839,US
1076387840,1076393727,CA
1076393728,1076394239,US
1076394240,1076396031,CA
-1076396032,1076404223,US
-1076404224,1076406015,A2
-1076406016,1076406271,US
-1076406272,1076408063,A2
-1076408064,1076408319,US
+1076396032,1076408319,US
1076408320,1076412415,CA
-1076412416,1076422192,US
-1076422193,1076422193,EU
-1076422194,1076424703,US
+1076412416,1076424703,US
1076424704,1076428799,CA
-1076428800,1076493311,US
-1076493312,1076493375,IN
-1076493376,1076543487,US
+1076428800,1076543487,US
1076543488,1076559871,CA
1076559872,1076628991,US
1076628992,1076629247,VI
-1076629248,1076696655,US
-1076696656,1076696663,CA
-1076696664,1076697503,US
-1076697504,1076697519,NZ
-1076697520,1076697567,US
-1076697568,1076697583,PE
-1076697584,1076698565,US
-1076698566,1076698580,AU
-1076698581,1076704376,US
-1076704377,1076704405,CO
-1076704406,1076705191,US
-1076705192,1076705199,AE
-1076705200,1076705215,US
-1076705216,1076705247,CA
-1076705248,1076705719,US
-1076705720,1076705729,AU
-1076705730,1076707087,US
-1076707088,1076707103,AT
-1076707104,1076707119,GB
-1076707120,1076707311,US
-1076707312,1076707319,AR
-1076707320,1076756479,US
+1076629248,1076756479,US
1076756480,1076772863,CA
1076772864,1076850687,US
1076850688,1076850943,CA
-1076850944,1076851035,US
-1076851036,1076851039,CA
-1076851040,1076851169,US
-1076851170,1076851175,CA
-1076851176,1076851351,US
-1076851352,1076851359,CA
-1076851360,1076880383,US
+1076850944,1076880383,US
1076880384,1076880639,CH
-1076880640,1076881023,GB
-1076881024,1076985855,US
-1076985856,1076991487,A2
-1076991488,1076991743,US
-1076991744,1077002239,A2
-1077002240,1077055487,US
+1076880640,1076880895,GB
+1076880896,1077055487,US
1077055488,1077059583,CA
-1077059584,1077383167,US
-1077383168,1077384191,US
-1077384192,1077444607,US
+1077059584,1077444607,US
1077444608,1077452799,CA
1077452800,1077460991,JP
1077460992,1077469183,US
1077469184,1077477375,CA
1077477376,1077506047,US
1077506048,1077510143,LS
-1077510144,1077561327,US
-1077561328,1077561343,AR
-1077561344,1077565503,US
-1077565504,1077565567,AR
-1077565568,1077567487,US
-1077567488,1077571583,A2
-1077571584,1077627167,US
-1077627168,1077627199,EC
-1077627200,1077629903,US
-1077629904,1077629919,CW
-1077629920,1077631167,US
-1077631168,1077631231,NL
-1077631232,1077632159,US
-1077632160,1077632191,GB
-1077632192,1077633799,US
-1077633800,1077633807,KY
-1077633808,1077633823,US
-1077633824,1077633855,CW
-1077633856,1077640799,US
-1077640800,1077640831,EC
-1077640832,1077641215,US
+1077510144,1077512191,US
+1077512192,1077513983,SE
+1077513984,1077641215,US
1077641216,1077657599,CA
-1077657600,1077839103,US
-1077839104,1077839119,ES
-1077839120,1077840383,US
-1077840384,1077840639,US
-1077840640,1077841151,US
+1077657600,1077841151,US
1077841152,1077841407,GB
-1077841408,1077843719,US
-1077843720,1077843727,CN
-1077843728,1077844383,US
-1077844384,1077844391,US
-1077844392,1077848575,US
+1077841408,1077848575,US
1077848576,1077848831,GR
-1077848832,1077851375,US
-1077851376,1077851383,FR
-1077851384,1077851471,US
-1077851472,1077851487,HK
-1077851488,1077852671,US
+1077848832,1077852671,US
1077852672,1077852927,CA
-1077852928,1077856127,US
-1077856128,1077856191,AU
-1077856192,1077857279,US
+1077852928,1077857279,US
1077857280,1077857535,CA
-1077857536,1077857567,US
-1077857568,1077857575,IT
-1077857576,1077858015,US
-1077858016,1077858047,CN
-1077858048,1077858943,US
-1077858944,1077858975,ZA
-1077858976,1077863207,US
-1077863208,1077863215,NG
-1077863216,1077865983,US
+1077857536,1077865983,US
1077865984,1077866239,CA
-1077866240,1077867655,US
-1077867656,1077867663,CK
-1077867664,1077868031,US
-1077868032,1077868159,IT
-1077868160,1077868831,US
-1077868832,1077868847,AE
-1077868848,1077869759,US
-1077869760,1077869823,GR
-1077869824,1077870335,US
+1077866240,1077870335,US
1077870336,1077870591,CN
-1077870592,1077936149,US
-1077936150,1077936150,NL
-1077936151,1077936189,US
-1077936190,1077936193,CA
-1077936194,1077936201,US
-1077936202,1077936205,GB
-1077936206,1077936233,US
-1077936234,1077936237,ES
-1077936238,1077936257,US
-1077936258,1077936261,AU
-1077936262,1077936265,IN
-1077936266,1077936273,US
-1077936274,1077936277,ES
-1077936278,1077936297,US
-1077936298,1077936301,NG
-1077936302,1077936305,US
-1077936306,1077936309,ZA
-1077936310,1077936313,US
-1077936314,1077936317,BR
-1077936318,1077936325,US
-1077936326,1077936329,MX
-1077936330,1077936369,US
-1077936370,1077936373,GB
-1077936374,1077936401,US
-1077936402,1077936409,GB
-1077936410,1077936413,CO
-1077936414,1077936426,US
-1077936427,1077936429,TH
-1077936430,1077936433,US
-1077936434,1077936437,CZ
-1077936438,1077936441,NO
-1077936442,1077936445,US
-1077936446,1077936449,TW
-1077936450,1077936453,US
-1077936454,1077936457,PT
-1077936458,1077936461,US
-1077936462,1077936463,GB
-1077936464,1077936465,US
-1077936466,1077936469,IN
-1077936470,1077936473,US
-1077936474,1077936474,CA
-1077936475,1077936475,US
-1077936476,1077936477,GB
-1077936478,1077936485,US
-1077936486,1077936489,TR
-1077936490,1077936501,US
-1077936502,1077936505,AR
-1077936506,1077936513,US
-1077936514,1077936517,BR
-1077936518,1077936521,US
-1077936522,1077936525,IN
-1077936526,1077936529,US
-1077936530,1077936533,PH
-1077936534,1077936545,US
-1077936546,1077936549,MY
-1077936550,1077936573,US
-1077936574,1077936577,AR
-1077936578,1077936597,US
-1077936598,1077936601,CA
-1077936602,1077936613,US
-1077936614,1077936617,UY
-1077936618,1077936621,US
-1077936622,1077936622,AU
-1077936623,1077936630,US
-1077936631,1077936634,PE
-1077936635,1077936638,CA
-1077936639,1077936645,US
-1077936646,1077936649,HK
-1077936650,1077936653,CA
-1077936654,1077936667,US
-1077936668,1077936671,CA
-1077936672,1077936691,US
-1077936692,1077936695,IT
-1077936696,1077936742,US
-1077936743,1077936743,BE
-1077936744,1077936759,US
-1077936760,1077936763,GB
-1077936764,1077936767,UA
-1077936768,1077936771,US
-1077936772,1077936775,IT
-1077936776,1077936789,US
-1077936790,1077936793,NG
-1077936794,1077936797,AU
-1077936798,1077936801,SI
-1077936802,1077936805,IT
-1077936806,1077936818,US
-1077936819,1077936822,RS
-1077936823,1077936850,US
-1077936851,1077936854,GB
-1077936855,1077936859,IN
-1077936860,1077936871,US
-1077936872,1077936875,LV
-1077936876,1077936879,CA
-1077936880,1077936883,IT
-1077936884,1077936887,CO
-1077936888,1077936913,US
-1077936914,1077936917,ES
-1077936918,1077936945,US
-1077936946,1077936949,GB
-1077936950,1077936957,US
-1077936958,1077936961,MA
-1077936962,1077936981,US
-1077936982,1077936985,AR
-1077936986,1077937015,US
-1077937016,1077937019,CA
-1077937020,1077937023,GB
-1077937024,1077937027,DE
-1077937028,1077937047,US
-1077937048,1077937051,BZ
-1077937052,1077937067,US
-1077937068,1077937071,GB
-1077937072,1077937079,US
-1077937080,1077937083,SE
-1077937084,1077937087,US
-1077937088,1077937088,BE
-1077937089,1077937089,CA
-1077937090,1077937093,IT
-1077937094,1077937133,US
-1077937134,1077937137,NG
-1077937138,1077937157,US
-1077937158,1077937161,TR
-1077937162,1077937222,US
-1077937223,1077937226,CA
-1077937227,1077937230,JM
-1077937231,1077937260,US
-1077937261,1077937269,EE
-1077937270,1077937273,LV
-1077937274,1077937297,US
-1077937298,1077937301,GB
-1077937302,1077937305,US
-1077937306,1077937309,ES
-1077937310,1077937335,US
-1077937336,1077937349,GB
-1077937350,1077937357,US
-1077937358,1077937361,CA
-1077937362,1077937365,US
-1077937366,1077937369,AR
-1077937370,1077937394,CA
-1077937395,1077937398,CN
-1077937399,1077937402,MX
-1077937403,1077937433,US
-1077937434,1077937437,GB
-1077937438,1077937441,CA
-1077937442,1077937449,US
-1077937450,1077937453,GR
-1077937454,1077937457,US
-1077937458,1077937461,GB
-1077937462,1077937478,US
-1077937479,1077937482,MX
-1077937483,1077937506,US
-1077937507,1077937510,CH
-1077937511,1077937571,US
-1077937572,1077937575,CY
-1077937576,1077937597,US
-1077937598,1077937601,IN
-1077937602,1077937621,US
-1077937622,1077937625,GB
-1077937626,1077937629,IT
-1077937630,1077937678,US
-1077937679,1077937682,ZA
-1077937683,1077937702,US
-1077937703,1077937706,PK
-1077937707,1077937710,RS
-1077937711,1077937718,US
-1077937719,1077937722,IN
-1077937723,1077937726,AU
-1077937727,1077937766,US
-1077937767,1077937770,RU
-1077937771,1077937802,US
-1077937803,1077937806,BE
-1077937807,1077937822,US
-1077937823,1077937826,GB
-1077937827,1077937862,US
-1077937863,1077937866,SA
-1077937867,1077937870,GB
-1077937871,1077937886,US
-1077937887,1077937890,GR
-1077937891,1077937902,US
-1077937903,1077937906,IN
-1077937907,1077937933,US
-1077937934,1077937937,IT
-1077937938,1077937941,US
-1077937942,1077937945,NO
-1077937946,1077937949,US
-1077937950,1077937953,CL
-1077937954,1077938003,US
-1077938004,1077938007,TH
-1077938008,1077938025,US
-1077938026,1077938029,FR
-1077938030,1077938033,US
-1077938034,1077938037,SA
-1077938038,1077938045,US
-1077938046,1077938049,RU
-1077938050,1077938081,US
-1077938082,1077938085,IN
-1077938086,1077938121,US
-1077938122,1077938125,DZ
-1077938126,1077938129,IN
-1077938130,1077938137,US
-1077938138,1077938141,GB
-1077938142,1077938145,CA
-1077938146,1077938205,US
-1077938206,1077938209,AR
-1077938210,1077938258,US
-1077938259,1077938262,PE
-1077938263,1077938266,US
-1077938267,1077938269,GB
-1077938270,1077938281,US
-1077938282,1077938283,DE
-1077938284,1077938284,CH
-1077938285,1077938288,CA
-1077938289,1077938292,US
-1077938293,1077938296,GB
-1077938297,1077938321,US
-1077938322,1077938325,GB
-1077938326,1077938329,PK
-1077938330,1077938345,US
-1077938346,1077938349,SA
-1077938350,1077938372,US
-1077938373,1077938376,DK
-1077938377,1077938380,IL
-1077938381,1077938404,US
-1077938405,1077938408,IT
-1077938409,1077938412,US
-1077938413,1077938416,PT
-1077938417,1077938426,US
-1077938427,1077938430,SE
-1077938431,1077938437,US
-1077938438,1077938441,PE
-1077938442,1077938445,US
-1077938446,1077938446,BE
-1077938447,1077938533,US
-1077938534,1077938537,CA
-1077938538,1077938551,US
-1077938552,1077938552,ES
-1077938553,1077938570,US
-1077938571,1077938571,NL
-1077938572,1077938588,US
-1077938589,1077938592,MX
-1077938593,1077938630,US
-1077938631,1077938644,IN
-1077938645,1077938656,US
-1077938657,1077938660,RO
-1077938661,1077938664,TR
-1077938665,1077938668,CA
-1077938669,1077938672,US
-1077938673,1077938676,GB
-1077938677,1077938680,IN
-1077938681,1077938702,US
-1077938703,1077938706,ID
-1077938707,1077938734,GB
-1077938735,1077938735,PK
-1077938736,1077938739,US
-1077938740,1077938749,NO
-1077938750,1077938750,NL
-1077938751,1077938785,US
-1077938786,1077938789,GR
-1077938790,1077938793,CA
-1077938794,1077938805,US
-1077938806,1077938809,DK
-1077938810,1077938813,HK
-1077938814,1077938831,US
-1077938832,1077938835,CA
-1077938836,1077938848,US
-1077938849,1077938852,IT
-1077938853,1077938856,ES
-1077938857,1077938860,EE
-1077938861,1077938895,US
-1077938896,1077938927,CA
-1077938928,1077938949,US
-1077938950,1077938969,CA
-1077938970,1077938981,US
-1077938982,1077938982,NL
-1077938983,1077938983,US
-1077938984,1077938988,CA
-1077938989,1077939005,US
-1077939006,1077939009,BE
-1077939010,1077939013,US
-1077939014,1077939017,GB
-1077939018,1077939025,US
-1077939026,1077939028,TH
-1077939029,1077939044,US
-1077939045,1077939048,IN
-1077939049,1077939064,US
-1077939065,1077939065,TH
-1077939066,1077939135,US
-1077939136,1077939139,IN
-1077939140,1077939189,US
-1077939190,1077939193,CA
-1077939194,1077939209,US
-1077939210,1077939210,BE
-1077939211,1077939218,US
-1077939219,1077939219,NL
-1077939220,1077939240,US
-1077939241,1077939244,NL
-1077939245,1077939251,US
-1077939252,1077939255,BR
-1077939256,1077939259,FR
-1077939260,1077939263,US
-1077939264,1077939267,MY
-1077939268,1077939296,US
-1077939297,1077939300,CA
-1077939301,1077939321,US
-1077939322,1077939325,CA
-1077939326,1077939350,US
-1077939351,1077939354,IN
-1077939355,1077939358,GB
-1077939359,1077939387,US
-1077939388,1077939391,PK
-1077939392,1077939395,US
-1077939396,1077939399,SE
-1077939400,1077939415,US
-1077939416,1077939423,BE
-1077939424,1077939439,US
-1077939440,1077939443,IS
-1077939444,1077939481,US
-1077939482,1077939491,CA
-1077939492,1077939549,US
-1077939550,1077939557,GB
-1077939558,1077939561,MU
-1077939562,1077939625,US
-1077939626,1077939630,UY
-1077939631,1077939634,GB
-1077939635,1077939644,US
-1077939645,1077939648,GR
-1077939649,1077939725,US
-1077939726,1077939727,DE
-1077939728,1077939751,US
-1077939752,1077939755,BZ
-1077939756,1077939763,US
-1077939764,1077939764,CH
-1077939765,1077939766,US
-1077939767,1077939770,RU
-1077939771,1077939776,DE
-1077939777,1077939780,CA
-1077939781,1077939784,GB
-1077939785,1077939785,FR
-1077939786,1077939790,US
-1077939791,1077939794,PE
-1077939795,1077939799,US
-1077939800,1077939803,BE
-1077939804,1077939867,US
-1077939868,1077939871,AU
-1077939872,1077939873,US
-1077939874,1077939874,DE
-1077939875,1077939911,US
-1077939912,1077939915,DO
-1077939916,1077939919,CA
-1077939920,1077939923,IN
-1077939924,1077939927,CA
-1077939928,1077939931,RO
-1077939932,1077939981,US
-1077939982,1077939985,MU
-1077939986,1077939997,US
-1077939998,1077940001,GB
-1077940002,1077940005,EG
-1077940006,1077940089,US
-1077940090,1077940093,SA
-1077940094,1077940097,US
-1077940098,1077940099,DE
-1077940100,1077940168,US
-1077940169,1077940172,GB
-1077940173,1077940182,US
-1077940183,1077940186,CA
-1077940187,1077940213,US
-1077940214,1077940217,MX
-1077940218,1077960751,US
-1077960752,1077960759,CA
-1077960760,1077960791,US
-1077960792,1077960799,CO
-1077960800,1077965855,US
-1077965856,1077965863,CA
-1077965864,1077965903,US
-1077965904,1077965911,BB
-1077965912,1077965919,CO
-1077965920,1077968831,US
-1077968832,1077968839,CA
-1077968840,1077968847,DK
-1077968848,1077977087,US
+1077870592,1077977087,US
1077977088,1077985279,CA
1077985280,1077993471,US
1077993472,1078001663,CA
-1078001664,1078067199,US
+1078001664,1078065039,US
+1078065040,1078065047,CA
+1078065048,1078067199,US
1078067200,1078071295,BS
1078071296,1078075391,CA
-1078079488,1078124543,US
+1078075392,1078124543,US
1078124544,1078128639,CA
1078128640,1078247423,US
1078247424,1078251519,CA
-1078251520,1078253823,US
-1078253824,1078253887,MX
-1078253888,1078280191,US
-1078280192,1078280583,CA
-1078280584,1078280591,US
-1078280592,1078280639,CA
-1078280640,1078280655,US
-1078280656,1078280671,CA
-1078280672,1078280695,US
-1078280696,1078280703,CA
-1078280704,1078280767,US
-1078280768,1078280799,CA
-1078280800,1078280831,UA
-1078280832,1078280895,CA
-1078280896,1078281087,US
-1078281088,1078281279,CA
-1078281280,1078281295,US
-1078281296,1078281711,CA
-1078281712,1078281719,US
-1078281720,1078282119,CA
-1078282120,1078282223,US
-1078282224,1078282238,CA
-1078282239,1078282239,US
+1078251520,1078280191,US
+1078280192,1078280447,CA
+1078280448,1078280575,US
+1078280576,1078280583,CA
+1078280584,1078281300,US
+1078281301,1078281301,CA
+1078281302,1078281511,US
+1078281512,1078281519,CA
+1078281520,1078281599,US
+1078281600,1078281663,CA
+1078281664,1078281727,US
+1078281728,1078281735,CA
+1078281736,1078282239,US
1078282240,1078283015,CA
-1078283016,1078283023,VG
-1078283024,1078283103,CA
-1078283104,1078283111,MX
-1078283112,1078283119,CA
-1078283120,1078283135,US
-1078283136,1078283263,CA
-1078283264,1078283264,US
-1078283265,1078283375,CA
-1078283376,1078283391,MX
-1078283392,1078283399,US
-1078283400,1078283407,MX
-1078283408,1078283423,US
-1078283424,1078283487,CA
-1078283488,1078283503,US
-1078283504,1078283551,CA
-1078283552,1078283583,US
-1078283584,1078283647,CA
-1078283648,1078283679,US
-1078283680,1078283687,CA
-1078283688,1078283695,US
-1078283696,1078283735,CA
-1078283736,1078283743,US
-1078283744,1078283751,CA
-1078283752,1078283775,US
-1078283776,1078283999,CA
-1078284000,1078284007,US
-1078284008,1078284015,CA
-1078284016,1078284031,US
-1078284032,1078284255,CA
-1078284256,1078284351,US
-1078284352,1078284367,CA
-1078284368,1078284399,US
-1078284400,1078284687,CA
-1078284688,1078284695,US
-1078284696,1078284703,MX
+1078283016,1078284031,US
+1078284032,1078284159,CA
+1078284160,1078284479,US
+1078284480,1078284543,CA
+1078284544,1078284703,US
1078284704,1078284719,CA
1078284720,1078284735,US
-1078284736,1078284991,CA
-1078284992,1078285007,US
-1078285008,1078285015,CA
-1078285016,1078285039,US
-1078285040,1078285167,CA
-1078285168,1078285175,US
-1078285176,1078285191,CA
-1078285192,1078285215,US
-1078285216,1078285231,CA
-1078285232,1078285247,US
-1078285248,1078285255,CA
-1078285256,1078285279,US
-1078285280,1078285287,MX
-1078285288,1078285295,US
-1078285296,1078285303,CA
-1078285304,1078285311,US
-1078285312,1078285935,CA
-1078285936,1078285943,US
-1078285944,1078286047,CA
-1078286048,1078286079,US
-1078286080,1078286111,CA
-1078286112,1078286115,US
-1078286116,1078286143,CA
-1078286144,1078286207,US
-1078286208,1078286335,CA
-1078286336,1078286351,US
+1078284736,1078284751,CA
+1078284752,1078284863,US
+1078284864,1078284991,CA
+1078284992,1078285151,US
+1078285152,1078285167,CA
+1078285168,1078285311,US
+1078285312,1078285567,CA
+1078285568,1078286351,US
1078286352,1078286367,CA
-1078286368,1078286463,US
-1078286464,1078286543,CA
-1078286544,1078286559,US
-1078286560,1078286575,TW
-1078286576,1078286591,CA
-1078286592,1078286655,US
-1078286656,1078286687,CA
-1078286688,1078286751,US
-1078286752,1078286759,CA
-1078286760,1078286783,US
-1078286784,1078286791,MX
-1078286792,1078286847,US
-1078286848,1078286975,CA
-1078286976,1078286991,US
-1078286992,1078287031,CA
-1078287032,1078287039,US
-1078287040,1078287071,CA
-1078287072,1078287103,US
-1078287104,1078287183,CA
-1078287184,1078287231,US
-1078287232,1078287279,CA
-1078287280,1078287311,US
-1078287312,1078287327,CA
-1078287328,1078287343,US
-1078287344,1078287759,CA
-1078287760,1078287767,US
-1078287768,1078287839,CA
-1078287840,1078287863,US
-1078287864,1078288383,CA
+1078286368,1078287231,US
+1078287232,1078287239,CA
+1078287240,1078287359,US
+1078287360,1078287615,CA
+1078287616,1078287807,US
+1078287808,1078287839,CA
+1078287840,1078287871,US
+1078287872,1078288383,CA
1078288384,1078306559,US
1078306560,1078306815,GB
-1078306816,1078309695,US
-1078309696,1078309711,GB
-1078309712,1078309967,US
-1078309968,1078309999,GB
-1078310000,1078312255,US
-1078312256,1078312271,GB
-1078312272,1078336447,US
-1078336448,1078336455,HK
-1078336456,1078336463,US
-1078336464,1078336479,HK
-1078336480,1078341807,US
-1078341808,1078341823,PH
-1078341824,1078349311,US
+1078306816,1078312260,US
+1078312261,1078312261,GB
+1078312262,1078349311,US
1078349312,1078349823,PH
-1078349824,1078428031,US
-1078428032,1078428159,AU
-1078428160,1078428999,US
-1078429000,1078429007,MX
-1078429008,1078429623,US
-1078429624,1078429631,AU
-1078429632,1078429695,US
+1078349824,1078413311,US
+1078415360,1078429695,US
1078429696,1078429951,GR
-1078429952,1078430095,US
-1078430096,1078430111,AE
-1078430112,1078430159,US
-1078430160,1078430167,FJ
-1078430168,1078432095,US
-1078432096,1078432103,JP
-1078432104,1078432151,US
-1078432152,1078432159,JP
-1078432160,1078432223,US
-1078432224,1078432239,AE
-1078432240,1078432767,US
-1078432768,1078432775,GB
-1078432776,1078432879,US
-1078432880,1078432887,GB
-1078432888,1078433316,US
-1078433317,1078433317,US
-1078433318,1078433631,US
-1078433632,1078433663,CN
-1078433664,1078434759,US
-1078434760,1078434767,BE
-1078434768,1078434775,US
-1078434776,1078434783,JP
-1078434784,1078434927,US
-1078434928,1078434943,DE
-1078434944,1078435423,US
-1078435424,1078435455,HK
-1078435456,1078435871,US
-1078435872,1078435879,US
-1078435880,1078436719,US
-1078436720,1078436727,JP
-1078436728,1078436767,US
-1078436768,1078436799,GB
-1078436800,1078437471,US
-1078437472,1078437479,JP
-1078437480,1078437567,US
-1078437568,1078437599,HK
-1078437600,1078438399,US
+1078429952,1078438399,US
1078438400,1078438655,CA
1078438656,1078438911,US
-1078438912,1078439167,CN
+1078438912,1078438929,CN
+1078438930,1078438930,US
+1078438931,1078439167,CN
1078439168,1078439679,US
1078439680,1078439935,NL
-1078439936,1078440127,US
-1078440128,1078440159,MX
-1078440160,1078443799,US
-1078443800,1078443807,US
-1078443808,1078452991,US
-1078452992,1078453247,AZ
-1078453248,1078453935,US
-1078453936,1078453951,AT
-1078453952,1078454559,US
-1078454560,1078454567,GB
-1078454568,1078454655,US
-1078454656,1078454663,UY
-1078454664,1078454703,US
-1078454704,1078454719,AT
-1078454720,1078455343,US
-1078455344,1078455359,AT
-1078455360,1078456319,US
+1078439936,1078455551,US
+1078455552,1078455807,NL
+1078455808,1078456319,US
1078456320,1078460415,CA
1078460416,1078504959,US
1078504960,1078505471,CA
@@ -31162,42 +10289,10 @@
1078517760,1078525951,CA
1078525952,1078575359,US
1078575360,1078575615,CA
-1078575616,1078575679,US
-1078575680,1078575743,AU
-1078575744,1078575807,US
-1078575808,1078575871,IN
-1078575872,1078576911,US
-1078576912,1078576943,IN
-1078576944,1078577711,US
-1078577712,1078577727,IN
-1078577728,1078578751,US
-1078578752,1078578815,CA
-1078578816,1078578879,US
-1078578880,1078578943,IN
-1078578944,1078580511,US
-1078580512,1078580543,CA
-1078580544,1078580703,US
-1078580704,1078580735,CA
-1078580736,1078581263,US
-1078581264,1078581279,IN
-1078581280,1078581311,US
-1078581312,1078581327,CR
-1078581328,1078581359,US
-1078581360,1078581391,IN
-1078581392,1078615679,US
-1078615680,1078615711,GB
-1078615712,1078621695,US
+1078575616,1078621695,US
1078621696,1078621951,IN
-1078621952,1078651055,US
-1078651056,1078651071,CA
-1078651072,1078660799,US
-1078660800,1078660831,CN
-1078660832,1078661807,US
-1078661808,1078661823,IN
-1078661824,1078722559,US
-1078722560,1078730127,AR
-1078730128,1078730135,CH
-1078730136,1078734847,AR
+1078621952,1078722559,US
+1078722560,1078734847,AR
1078734848,1078737919,CO
1078737920,1078738943,EC
1078738944,1078739455,VE
@@ -31210,9 +10305,7 @@
1078751232,1078753279,CO
1078753280,1078755327,AR
1078755328,1078757375,PE
-1078757376,1078757423,CL
-1078757424,1078757439,EC
-1078757440,1078767615,CL
+1078757376,1078767615,CL
1078767616,1078768639,CO
1078768640,1078769663,CL
1078769664,1078771711,CO
@@ -31222,190 +10315,26 @@
1078777856,1078780927,EC
1078780928,1078782463,US
1078782464,1078782719,PA
-1078782720,1078791215,US
-1078791216,1078791223,AU
-1078791224,1078791255,US
-1078791256,1078791263,CO
-1078791264,1078791303,US
-1078791304,1078791311,CA
-1078791312,1078791319,US
-1078791320,1078791343,AU
-1078791344,1078791391,US
-1078791392,1078791407,MX
-1078791408,1078791439,US
-1078791440,1078791447,PK
-1078791448,1078791471,US
-1078791472,1078791487,IL
-1078791488,1078791503,US
-1078791504,1078791519,MX
-1078791520,1078791711,US
-1078791712,1078791727,AU
-1078791728,1078792015,US
-1078792016,1078792031,AU
-1078792032,1078792095,US
-1078792096,1078792111,AU
-1078792112,1078792127,IN
-1078792128,1078792175,US
-1078792176,1078792191,AU
-1078792192,1078792511,US
-1078792512,1078792543,SG
-1078792544,1078793119,US
-1078793120,1078793151,CA
-1078793152,1078793535,US
-1078793536,1078793599,ZA
-1078793600,1078793663,US
-1078793664,1078793727,ZA
-1078793728,1078794495,US
-1078794496,1078794559,ZA
-1078794560,1078794591,US
-1078794592,1078794623,AU
-1078794624,1078795159,US
-1078795160,1078795167,AE
-1078795168,1078795255,US
-1078795256,1078795263,MX
-1078795264,1078795767,US
-1078795768,1078795775,IN
-1078795776,1078795783,CA
-1078795784,1078795807,US
-1078795808,1078795815,AU
-1078795816,1078795823,US
-1078795824,1078795831,CA
-1078795832,1078795887,US
-1078795888,1078795895,CA
-1078795896,1078795903,US
-1078795904,1078795911,ES
-1078795912,1078797399,US
-1078797400,1078797407,CA
-1078797408,1078797591,US
-1078797592,1078797599,IN
-1078797600,1078797703,US
-1078797704,1078797711,JP
-1078797712,1078797791,US
-1078797792,1078797815,IN
-1078797816,1078797991,US
-1078797992,1078797999,CA
-1078798000,1078798071,US
-1078798072,1078798079,GB
-1078798080,1078798111,US
-1078798112,1078798119,CA
-1078798120,1078798151,US
-1078798152,1078798159,AU
-1078798160,1078798183,US
-1078798184,1078798191,FR
-1078798192,1078798199,IN
-1078798200,1078798207,US
-1078798208,1078798215,IN
-1078798216,1078798223,GB
-1078798224,1078798231,GR
-1078798232,1078798279,US
-1078798280,1078798287,PK
-1078798288,1078798447,US
-1078798448,1078798455,AT
-1078798456,1078798575,US
-1078798576,1078798591,AR
-1078798592,1078798687,US
-1078798688,1078798703,AU
-1078798704,1078798911,US
-1078798912,1078798927,IT
-1078798928,1078799071,US
-1078799072,1078799087,CA
-1078799088,1078799263,US
-1078799264,1078799295,MX
-1078799296,1078799423,US
-1078799424,1078799455,MX
-1078799456,1078799551,US
-1078799552,1078799583,ID
-1078799584,1078799679,US
-1078799680,1078799743,BR
-1078799744,1078799999,US
-1078800000,1078800031,AU
-1078800032,1078800191,US
-1078800192,1078800223,IN
-1078800224,1078800287,US
-1078800288,1078800319,MX
-1078800320,1078800799,US
-1078800800,1078800831,FR
-1078800832,1078801327,US
-1078801328,1078801343,CL
-1078801344,1078808991,US
-1078808992,1078809023,AU
-1078809024,1078809647,US
-1078809648,1078809663,CA
-1078809664,1078814135,US
-1078814136,1078814143,HK
-1078814144,1078814399,US
-1078814400,1078814415,CA
-1078814416,1078895103,US
+1078782720,1078895103,US
1078895104,1078895359,CN
-1078895360,1078895967,US
-1078895968,1078895983,CN
-1078895984,1078945023,US
+1078895360,1078945023,US
1078945024,1078945279,GB
1078945280,1078956799,US
1078956800,1078957055,GB
1078957056,1079320575,US
-1079320576,1079320671,CA
-1079320672,1079320703,US
-1079320704,1079322191,CA
-1079322192,1079322199,US
-1079322200,1079322703,CA
-1079322704,1079322719,US
-1079322720,1079322815,CA
-1079322816,1079322839,US
-1079322840,1079322847,CA
-1079322848,1079322863,US
-1079322864,1079323231,CA
-1079323232,1079323247,US
-1079323248,1079323263,CA
-1079323264,1079323279,US
-1079323280,1079323311,CA
-1079323312,1079323327,US
-1079323328,1079323415,CA
-1079323416,1079323423,US
-1079323424,1079323447,CA
-1079323448,1079323455,US
-1079323456,1079323583,CA
-1079323584,1079323599,US
-1079323600,1079323615,CA
-1079323616,1079323647,US
-1079323648,1079324455,CA
-1079324456,1079324463,US
-1079324464,1079324799,CA
-1079324800,1079324831,US
-1079324832,1079325455,CA
-1079325456,1079325483,US
-1079325484,1079325527,CA
-1079325528,1079325535,US
-1079325536,1079325547,CA
-1079325548,1079325559,US
-1079325560,1079325599,CA
-1079325600,1079325607,US
-1079325608,1079325695,CA
-1079325696,1079325727,US
-1079325728,1079325871,CA
-1079325872,1079325887,US
-1079325888,1079325991,CA
-1079325992,1079325999,US
-1079326000,1079327616,CA
+1079320576,1079322831,CA
+1079322832,1079322839,US
+1079322840,1079327616,CA
1079327617,1079327617,US
-1079327618,1079328503,CA
-1079328504,1079328511,US
-1079328512,1079328767,CA
-1079328768,1079329919,US
-1079329920,1079329951,CA
-1079329952,1079377919,US
+1079327618,1079328767,CA
+1079328768,1079377919,US
1079377920,1079378943,CA
1079378944,1079379199,US
1079379200,1079379455,CA
1079379456,1079379711,US
1079379712,1079380927,CA
1079380928,1079380991,US
-1079380992,1079381119,PA
-1079381120,1079381503,CA
-1079381504,1079381535,US
-1079381536,1079381599,CA
-1079381600,1079381631,WS
-1079381632,1079381759,CA
+1079380992,1079381759,CA
1079381760,1079382271,US
1079382272,1079382527,CA
1079382528,1079383039,US
@@ -31418,33 +10347,21 @@
1079384576,1079385087,ZW
1079385088,1079385343,US
1079385344,1079385471,CA
-1079385472,1079385599,US
-1079385600,1079386623,CA
+1079385472,1079385479,US
+1079385480,1079386623,CA
1079386624,1079386879,SG
1079386880,1079387135,EG
1079387136,1079387903,US
1079387904,1079388159,PH
-1079388160,1079389439,CA
-1079389440,1079389567,US
-1079389568,1079389695,CA
+1079388160,1079389695,CA
1079389696,1079389951,US
1079389952,1079390719,CA
1079390720,1079391487,US
-1079391488,1079391615,CA
-1079391616,1079391679,US
-1079391680,1079391743,CA
+1079391488,1079391743,CA
1079391744,1079392255,HT
1079392256,1079393791,CA
1079393792,1079394047,US
-1079394048,1079394063,CA
-1079394064,1079394071,SG
-1079394072,1079394079,CA
-1079394080,1079394111,US
-1079394112,1079394143,AF
-1079394144,1079394175,CA
-1079394176,1079394207,US
-1079394208,1079394239,CA
-1079394240,1079394303,US
+1079394048,1079394303,CA
1079394304,1079395327,EC
1079395328,1079396095,US
1079396096,1079396351,CA
@@ -31452,15 +10369,9 @@
1079397376,1079397631,MH
1079397632,1079397887,CA
1079397888,1079398399,US
-1079398400,1079399583,CA
-1079399584,1079399599,US
-1079399600,1079400447,CA
-1079400448,1079400511,FR
-1079400512,1079400575,CA
-1079400576,1079400639,US
-1079400640,1079400767,CA
-1079400768,1079400831,US
-1079400832,1079401215,CA
+1079398400,1079399935,CA
+1079399936,1079400447,US
+1079400448,1079401215,CA
1079401216,1079401471,US
1079401472,1079403263,CA
1079403264,1079403519,US
@@ -31470,23 +10381,19 @@
1079403904,1079403935,US
1079403936,1079403999,CA
1079404000,1079404031,US
-1079404032,1079404287,CA
-1079404288,1079404319,US
-1079404320,1079404351,CA
-1079404352,1079404383,US
-1079404384,1079404543,CA
-1079404544,1079405119,US
-1079405120,1079405407,CA
-1079405408,1079405439,BD
+1079404032,1079404543,CA
+1079404544,1079404799,US
+1079404800,1079404959,CA
+1079404960,1079404991,US
+1079404992,1079405023,CA
+1079405024,1079405055,US
+1079405056,1079405439,CA
1079405440,1079405567,US
1079405568,1079407103,CA
1079407104,1079407359,US
1079407360,1079407615,CA
1079407616,1079408127,US
-1079408128,1079408383,CA
-1079408384,1079408415,ZA
-1079408416,1079408447,US
-1079408448,1079408639,CA
+1079408128,1079408639,CA
1079408640,1079408895,US
1079408896,1079409407,PK
1079409408,1079409919,US
@@ -31495,28 +10402,30 @@
1079410944,1079411199,CA
1079411200,1079411455,US
1079411456,1079411711,PK
-1079411712,1079412735,CA
+1079411712,1079411743,US
+1079411744,1079412735,CA
1079412736,1079413247,US
1079413248,1079413311,CA
1079413312,1079413343,US
-1079413344,1079413375,CA
-1079413376,1079413407,US
-1079413408,1079413535,CA
-1079413536,1079413567,US
-1079413568,1079414271,CA
+1079413344,1079414271,CA
1079414272,1079415039,US
1079415040,1079415295,HN
-1079415296,1079421951,CA
+1079415296,1079415871,US
+1079415872,1079415879,CA
+1079415880,1079415887,US
+1079415888,1079421951,CA
1079421952,1079422207,US
-1079422208,1079422239,CA
-1079422240,1079422271,US
-1079422272,1079425023,CA
+1079422208,1079425023,CA
1079425024,1079425279,US
-1079425280,1079425535,CA
-1079425536,1079425551,US
-1079425552,1079427583,CA
+1079425280,1079427583,CA
1079427584,1079428095,PW
-1079428096,1079431679,CA
+1079428096,1079429263,CA
+1079429264,1079429271,US
+1079429272,1079429279,CA
+1079429280,1079429295,US
+1079429296,1079429375,CA
+1079429376,1079429631,US
+1079429632,1079431679,CA
1079431680,1079432191,ZM
1079432192,1079432703,CA
1079432704,1079432959,US
@@ -31527,10 +10436,7 @@
1079437312,1079439359,US
1079439360,1079442431,CA
1079442432,1079442687,US
-1079442688,1079443199,CA
-1079443200,1079443231,PW
-1079443232,1079443327,CA
-1079443328,1079443455,AU
+1079442688,1079443455,CA
1079443456,1079459839,US
1079459840,1079508991,CA
1079508992,1079566847,US
@@ -31539,629 +10445,156 @@
1079567360,1079567615,AU
1079567616,1079574527,US
1079574528,1079578623,PR
-1079578624,1079585391,US
-1079585392,1079585407,IN
-1079585408,1079623679,US
-1079623680,1079626975,PR
-1079626976,1079626991,US
-1079626992,1079627775,PR
+1079578624,1079623679,US
+1079623680,1079627775,PR
1079627776,1079664639,US
1079664640,1079668735,CA
-1079668736,1079827871,US
-1079827872,1079827887,RU
-1079827888,1079861247,US
+1079668736,1079861247,US
1079861248,1079865343,CA
-1079865344,1079943999,US
-1079944000,1079944031,AU
-1079944032,1079953567,US
-1079953568,1079953599,GB
-1079953600,1079962879,US
+1079865344,1079962879,US
1079962880,1079963135,GB
1079963136,1080024319,US
1080024320,1080024575,CA
-1080024576,1080030527,US
-1080030528,1080030591,AR
-1080030592,1080033279,US
-1080033280,1080295423,CA
-1080295424,1080492031,US
-1080492032,1080496127,BE
-1080496128,1080498431,US
+1080024576,1080033279,US
+1080033280,1080164351,KY
+1080164352,1080295423,CA
+1080295424,1080496639,US
+1080496640,1080496895,ES
+1080496896,1080498431,US
1080498432,1080498664,GB
-1080498665,1080498665,EU
+1080498665,1080498665,US
1080498666,1080498687,GB
-1080498688,1080501503,US
-1080501504,1080501759,EU
-1080501760,1080508415,US
-1080508416,1080516607,GB
-1080516608,1080524799,US
-1080524800,1080543231,IN
-1080543232,1080549375,US
-1080549376,1080557567,IN
-1080557568,1080565759,US
-1080565760,1080573951,JP
-1080573952,1080581631,US
-1080581632,1080581887,SG
-1080581888,1080582143,AP
-1080582144,1080589311,US
-1080589312,1080589567,SG
-1080589568,1080590335,US
-1080590336,1080598527,IN
-1080598528,1080606719,US
-1080606720,1080614911,AU
-1080614912,1080615679,US
-1080615680,1080615935,AU
-1080615936,1080621311,US
-1080621312,1080621567,AU
+1080498688,1080513535,US
+1080513536,1080513791,GB
+1080513792,1080550399,US
+1080550400,1080550655,IN
+1080550656,1080552447,US
+1080552448,1080552703,IN
+1080552704,1080569343,US
+1080569344,1080569599,JP
+1080569600,1080569730,US
+1080569731,1080569731,JP
+1080569732,1080589567,US
+1080589568,1080589823,CN
+1080589824,1080610559,US
+1080610560,1080610815,AU
+1080610816,1080621055,US
+1080621056,1080621567,AU
1080621568,1080622079,US
1080622080,1080622335,AU
-1080622336,1080722827,US
-1080722828,1080722837,IT
-1080722838,1080722993,US
-1080722994,1080723003,CA
-1080723004,1080723113,US
-1080723114,1080723123,BR
-1080723124,1080723229,US
-1080723230,1080723239,GB
-1080723240,1080723259,US
-1080723260,1080723269,GB
-1080723270,1080723359,US
-1080723360,1080723369,BR
-1080723370,1080723565,US
-1080723566,1080723575,AE
-1080723576,1080724519,US
-1080724520,1080724539,CA
-1080724540,1080724875,US
-1080724876,1080724885,SY
-1080724886,1080725041,US
-1080725042,1080725051,QA
-1080725052,1080725081,US
-1080725082,1080725091,QA
-1080725092,1080725171,US
-1080725172,1080725181,QA
-1080725182,1080725277,US
-1080725278,1080725287,CA
-1080725288,1080725297,NZ
-1080725298,1080725467,US
-1080725468,1080725477,LB
-1080725478,1080725713,US
-1080725714,1080725723,BE
-1080725724,1080725929,US
-1080725930,1080725939,BE
-1080725940,1080726185,US
-1080726186,1080726195,JO
-1080726196,1080726607,US
-1080726608,1080726617,CA
-1080726618,1080727129,US
-1080727130,1080727139,AU
-1080727140,1080727159,US
-1080727160,1080727169,CA
-1080727170,1080727189,US
-1080727190,1080727199,AU
-1080727200,1080727741,US
-1080727742,1080727761,BR
-1080727762,1080727781,US
-1080727782,1080727801,GB
-1080727802,1080728625,US
-1080728626,1080728655,NZ
-1080728656,1080728775,US
-1080728776,1080728805,SE
-1080728806,1080728881,US
-1080728882,1080728891,IN
-1080728892,1080729127,US
-1080729128,1080729137,UA
-1080729138,1080729147,US
-1080729148,1080729157,CA
-1080729158,1080729177,US
-1080729178,1080729187,KH
-1080729188,1080729217,US
-1080729218,1080729237,KH
-1080729238,1080729287,US
-1080729288,1080729297,IT
-1080729298,1080729629,US
-1080729630,1080729639,JP
-1080729640,1080729649,CA
-1080729650,1080732319,US
-1080732320,1080732351,QA
-1080732352,1080733193,US
-1080733194,1080733203,NZ
-1080733204,1080733213,LB
-1080733214,1080733233,US
-1080733234,1080733243,DK
-1080733244,1080739007,US
-1080739008,1080739023,JO
-1080739024,1080739899,US
-1080739900,1080739909,IN
-1080739910,1080740235,US
-1080740236,1080740255,UA
-1080740256,1080740551,US
-1080740552,1080740561,UA
-1080740562,1080741189,US
-1080741190,1080741199,GR
-1080741200,1080741269,US
-1080741270,1080741279,GR
-1080741280,1080741289,GB
-1080741290,1080741495,US
-1080741496,1080741505,CA
-1080741506,1080741605,US
-1080741606,1080741615,SE
-1080741616,1080741671,US
-1080741672,1080741681,CA
-1080741682,1080744211,US
-1080744212,1080744221,CA
-1080744222,1080746691,US
-1080746692,1080746723,QA
-1080746724,1080747333,US
-1080747334,1080747343,NZ
-1080747344,1080747353,CA
-1080747354,1080747503,US
-1080747504,1080747513,CA
-1080747514,1080747539,US
-1080747540,1080747559,CA
-1080747560,1080747875,US
-1080747876,1080747885,ES
-1080747886,1080747915,US
-1080747916,1080747925,IL
-1080747926,1080747955,US
-1080747956,1080747965,ES
-1080747966,1080747975,US
-1080747976,1080748005,CA
-1080748006,1080748063,US
-1080748064,1080748095,QA
-1080748096,1080749823,US
-1080749824,1080749951,CA
-1080749952,1080750601,US
-1080750602,1080750611,GB
-1080750612,1080954879,US
+1080622336,1080954879,US
1080956774,1080956774,GB
-1080957952,1080958207,A2
+1080957952,1080958207,DE
1080958208,1080958463,BH
-1080958464,1080958719,A2
+1080958464,1080958719,DE
1080958720,1080958975,BH
-1080958976,1080960255,A2
+1080958976,1080960255,DE
1080960256,1080960511,BH
-1080960512,1080963839,A2
+1080960512,1080963839,DE
1080963840,1080967167,US
-1080967168,1080968191,A2
+1080967168,1080968191,DE
1080968192,1080968447,BH
-1080968448,1080969471,A2
+1080968448,1080969471,DE
1080969472,1080969727,BH
-1080969728,1080972575,A2
-1080972576,1080972607,ID
-1080972608,1080975039,A2
+1080969728,1080975039,DE
1080975040,1080975103,BJ
-1080975104,1080983551,A2
+1080975104,1080983551,DE
1080986624,1080987647,US
-1080987648,1080988671,A2
+1080987648,1080987903,IT
+1080987904,1080988671,DE
1080988672,1080989951,US
-1080989952,1080990207,A2
+1080989952,1080990207,DE
1080990208,1080999935,US
1080999936,1081016319,CA
1081016320,1081037311,US
1081037312,1081037567,CA
1081037568,1081038335,US
1081038336,1081040895,CA
-1081040896,1081047580,US
-1081047581,1081047581,US
-1081047582,1081122559,US
+1081040896,1081057535,US
+1081061376,1081122559,US
1081122560,1081122815,VI
1081122816,1081212927,US
1081212928,1081278463,CA
-1081278464,1081368607,US
-1081368608,1081368615,CO
-1081368616,1081368623,US
-1081368624,1081368631,CO
-1081368632,1081368743,US
-1081368744,1081368767,CO
-1081368768,1081369119,US
-1081369120,1081369151,CO
-1081369152,1081369183,US
-1081369184,1081369215,CO
-1081369216,1081369599,US
+1081278464,1081369599,US
1081369600,1081370111,CO
-1081370112,1081377071,US
-1081377072,1081377079,VE
-1081377080,1081377119,US
-1081377120,1081377135,VE
-1081377136,1081377183,US
-1081377184,1081377191,VE
-1081377192,1081377247,US
-1081377248,1081377279,VE
-1081377280,1081377663,US
+1081370112,1081377663,US
1081377664,1081377791,VE
-1081377792,1081377887,US
-1081377888,1081377919,VE
-1081377920,1081377935,US
-1081377936,1081377951,VE
-1081377952,1081378015,US
-1081378016,1081378047,VE
-1081378048,1081378375,US
-1081378376,1081378399,VE
-1081378400,1081378495,US
-1081378496,1081378575,VE
-1081378576,1081378607,US
-1081378608,1081378663,VE
-1081378664,1081379327,US
+1081377792,1081378495,US
+1081378496,1081378559,VE
+1081378560,1081379327,US
1081379328,1081379839,VE
1081379840,1081385215,US
-1081385216,1081385535,PA
-1081385536,1081385983,US
-1081385984,1081385991,PA
-1081385992,1081385999,US
-1081386000,1081386015,PA
-1081386016,1081386047,VE
-1081386048,1081387519,US
+1081385216,1081385471,PA
+1081385472,1081387519,US
1081387520,1081388031,PA
-1081388032,1081388127,US
-1081388128,1081388143,PA
-1081388144,1081391103,US
+1081388032,1081391103,US
1081391104,1081393151,PA
1081393152,1081393407,US
-1081393408,1081393751,CL
-1081393752,1081393759,US
-1081393760,1081393775,CL
-1081393776,1081393831,US
-1081393832,1081393839,CL
-1081393840,1081393847,US
-1081393848,1081393855,CL
-1081393856,1081393887,US
-1081393888,1081393903,CL
-1081393904,1081393919,US
+1081393408,1081393663,CL
+1081393664,1081393919,US
1081393920,1081397247,CL
1081397248,1081397759,US
1081397760,1081398783,CL
1081398784,1081399295,US
1081399296,1081401343,CL
-1081401344,1081401391,AR
-1081401392,1081401415,US
-1081401416,1081401471,AR
-1081401472,1081401567,US
-1081401568,1081401599,AR
-1081401600,1081401623,US
-1081401624,1081401631,AR
-1081401632,1081401663,US
-1081401664,1081401727,AR
-1081401728,1081401743,US
-1081401744,1081401807,AR
-1081401808,1081401815,US
-1081401816,1081401823,AR
-1081401824,1081401855,US
+1081401344,1081401855,US
1081401856,1081402367,AR
-1081402368,1081402895,US
-1081402896,1081403007,AR
-1081403008,1081403055,US
-1081403056,1081403103,AR
-1081403104,1081403119,US
-1081403120,1081403455,AR
-1081403456,1081403519,US
-1081403520,1081403535,AR
-1081403536,1081403543,US
-1081403544,1081403551,AR
-1081403552,1081403615,US
-1081403616,1081403631,AR
-1081403632,1081403679,US
-1081403680,1081403695,AR
-1081403696,1081403847,US
-1081403848,1081403855,AR
-1081403856,1081403863,US
-1081403864,1081403871,AR
-1081403872,1081403903,US
-1081403904,1081403967,AR
-1081403968,1081404031,US
-1081404032,1081404095,AR
-1081404096,1081405055,US
-1081405056,1081405119,AR
-1081405120,1081409791,US
+1081402368,1081403135,US
+1081403136,1081403391,AR
+1081403392,1081409791,US
1081409792,1081410047,PR
1081410048,1081410559,US
1081410560,1081411583,PR
-1081411584,1081413119,US
-1081413120,1081413631,PR
-1081413632,1081416191,US
+1081411584,1081416191,US
1081416192,1081416447,PR
-1081416448,1081419327,US
-1081419328,1081419391,PR
-1081419392,1081419423,US
-1081419424,1081419431,PR
-1081419432,1081419447,US
-1081419448,1081419455,PR
-1081419456,1081419775,US
+1081416448,1081419775,US
1081419776,1081420287,PR
-1081420288,1081420319,US
-1081420320,1081420351,PR
-1081420352,1081421311,US
+1081420288,1081421311,US
1081421312,1081421567,MF
-1081421568,1081442367,US
-1081442368,1081442399,CL
-1081442400,1081442959,US
-1081442960,1081442967,CL
-1081442968,1081443327,US
+1081421568,1081443327,US
1081443328,1081444351,CL
1081444352,1081445375,US
1081445376,1081446399,CL
1081446400,1081460735,US
1081460736,1081462783,PA
-1081462784,1081462815,CO
-1081462816,1081462847,BR
-1081462848,1081462919,US
-1081462920,1081462927,BR
-1081462928,1081463255,US
-1081463256,1081463263,BR
-1081463264,1081463287,US
-1081463288,1081463391,BR
-1081463392,1081463423,US
-1081463424,1081463487,BR
-1081463488,1081479167,US
+1081462784,1081462856,US
+1081462857,1081462857,BR
+1081462858,1081479167,US
1081479168,1081483263,CA
-1081483264,1081487367,US
-1081487368,1081487375,A2
-1081487376,1081487407,US
-1081487408,1081487519,A2
-1081487520,1081487583,US
-1081487584,1081487871,A2
-1081487872,1081487887,US
-1081487888,1081487895,A2
-1081487896,1081487979,US
-1081487980,1081487991,A2
-1081487992,1081488111,US
-1081488112,1081488119,A2
-1081488120,1081488123,US
-1081488124,1081488135,A2
-1081488136,1081488159,US
-1081488160,1081488167,A2
-1081488168,1081488295,US
-1081488296,1081488303,A2
-1081488304,1081488335,US
-1081488336,1081488343,A2
-1081488344,1081488351,US
-1081488352,1081488383,A2
-1081488384,1081489671,US
-1081489672,1081489679,A2
-1081489680,1081489687,US
-1081489688,1081489919,A2
-1081489920,1081546495,US
-1081546496,1081546751,CA
-1081546752,1081565183,US
+1081483264,1081565183,US
1081565184,1081573375,CA
-1081573376,1081581615,US
-1081581616,1081581623,JP
-1081581624,1081582015,US
-1081582016,1081582079,GB
-1081582080,1081582167,US
-1081582168,1081582175,AE
-1081582176,1081582183,US
-1081582184,1081582199,ID
-1081582200,1081582223,US
-1081582224,1081582231,JP
-1081582232,1081582335,US
-1081582336,1081582343,MY
-1081582344,1081582567,US
-1081582568,1081582591,MY
-1081582592,1081582695,US
-1081582696,1081582703,MY
-1081582704,1081583071,US
-1081583072,1081583103,MY
-1081583104,1081583551,US
-1081583552,1081583567,MY
-1081583568,1081583807,US
-1081583808,1081583815,AU
-1081583816,1081583887,US
-1081583888,1081583911,MY
-1081583912,1081583919,JP
-1081583920,1081583999,US
-1081584000,1081584007,MY
-1081584008,1081584079,US
-1081584080,1081584087,MY
-1081584088,1081584199,US
-1081584200,1081584223,MY
-1081584224,1081584463,US
-1081584464,1081584487,MY
-1081584488,1081584543,US
-1081584544,1081584575,MY
-1081584576,1081585439,US
-1081585440,1081585455,AE
-1081585456,1081585503,US
-1081585504,1081585519,LB
-1081585520,1081589759,US
+1081573376,1081589759,US
1081589760,1081593855,BB
1081593856,1081597951,CA
-1081597952,1081608191,US
-1081608192,1081608207,CA
-1081608208,1081608223,US
-1081608224,1081608231,CA
-1081608232,1081608319,US
-1081608320,1081608327,CA
-1081608328,1081608335,US
-1081608336,1081608343,CA
-1081608344,1081608503,US
-1081608504,1081608511,CA
-1081608512,1081608575,US
-1081608576,1081608583,CA
-1081608584,1081609823,US
-1081609824,1081609831,LK
-1081609832,1081611415,US
-1081611416,1081611423,IN
-1081611424,1081611511,US
-1081611512,1081611519,IN
-1081611520,1081611815,US
-1081611816,1081611823,IN
-1081611824,1081611831,US
-1081611832,1081611839,IN
-1081611840,1081611847,US
-1081611848,1081611855,IN
-1081611856,1081611903,US
-1081611904,1081611911,IN
-1081611912,1081611919,US
-1081611920,1081611927,IN
-1081611928,1081611935,LK
-1081611936,1081611943,IN
-1081611944,1081612015,US
-1081612016,1081612023,IN
-1081612024,1081612159,US
-1081612160,1081612191,IN
-1081612192,1081612655,US
-1081612656,1081612663,CA
-1081612664,1081612671,IN
-1081612672,1081618047,US
-1081618048,1081618055,ZA
-1081618056,1081618079,US
-1081618080,1081618095,ZA
-1081618096,1081618951,US
-1081618952,1081618959,GB
-1081618960,1081625671,US
-1081625672,1081625679,CA
-1081625680,1081625775,US
-1081625776,1081625783,CA
-1081625784,1081633919,US
-1081633920,1081634047,IN
-1081634048,1081872663,US
-1081872664,1081872671,FI
-1081872672,1081912607,US
-1081912608,1081912639,DE
-1081912640,1081927135,US
-1081927136,1081927143,GB
-1081927144,1081978623,US
-1081978624,1081978631,CH
-1081978632,1082091263,US
-1082091264,1082091271,CN
-1082091272,1082093679,US
-1082093680,1082093695,AU
-1082093696,1082097055,US
-1082097056,1082097071,CA
-1082097072,1082131199,US
-1082131200,1082131455,AS
-1082131456,1082138623,US
-1082138624,1082139409,A2
+1081597952,1082139409,US
1082139410,1082139410,ZA
-1082139411,1082140671,A2
-1082140672,1082314751,US
-1082314752,1082315263,CA
-1082315264,1082315471,US
-1082315472,1082318847,CA
-1082318848,1082343909,US
-1082343910,1082343911,GB
-1082343912,1082344080,US
-1082344081,1082344084,GB
-1082344085,1082344784,US
-1082344785,1082344786,HN
-1082344787,1082345202,US
-1082345203,1082345204,FR
-1082345205,1082345208,US
-1082345209,1082345211,FR
-1082345212,1082345275,US
-1082345276,1082345276,FR
-1082345277,1082345457,US
-1082345458,1082345459,FR
-1082345460,1082345733,US
-1082345734,1082345737,CA
-1082345738,1082346510,US
-1082346511,1082346514,IN
-1082346515,1082347640,US
-1082347641,1082347644,CA
-1082347645,1082347740,US
-1082347741,1082347744,IN
-1082347745,1082347882,US
-1082347883,1082347886,IN
-1082347887,1082347892,US
-1082347893,1082347896,IN
-1082347897,1082348005,US
-1082348006,1082348009,IN
-1082348010,1082348104,US
-1082348105,1082348110,FR
-1082348111,1082348115,US
-1082348116,1082348123,CA
-1082348124,1082348319,US
-1082348320,1082348327,GB
-1082348328,1082348335,US
-1082348336,1082348343,GB
-1082348344,1082348399,US
-1082348400,1082348407,BE
-1082348408,1082348415,US
-1082348416,1082348423,GB
-1082348424,1082348799,US
-1082348800,1082348831,CA
-1082348832,1082349575,US
-1082349576,1082349583,SA
-1082349584,1082349591,CA
-1082349592,1082349615,US
-1082349616,1082349623,IT
-1082349624,1082349639,US
-1082349640,1082349647,GB
-1082349648,1082349735,US
-1082349736,1082349743,MY
-1082349744,1082349767,US
-1082349768,1082349775,GR
-1082349776,1082349783,IT
-1082349784,1082349807,US
-1082349808,1082349815,GB
-1082349816,1082350655,US
-1082350656,1082350671,IT
-1082350672,1082350911,US
-1082350912,1082350943,RU
-1082350944,1082351361,US
-1082351362,1082351362,SA
-1082351363,1082351487,US
-1082351488,1082351615,AU
-1082351616,1082419455,US
-1082419456,1082419711,A2
-1082419712,1082679807,US
+1082139411,1082314751,US
+1082314752,1082318847,CA
+1082318848,1082351359,US
+1082351360,1082351487,SA
+1082351488,1082679807,US
1082683392,1082687487,CA
1082687488,1082786591,US
1082786592,1082786623,HK
-1082786624,1082787923,US
-1082787924,1082787927,AU
-1082787928,1082788447,US
-1082788448,1082788455,SG
-1082788456,1082788767,US
-1082788768,1082788799,SG
-1082788800,1082788963,US
-1082788964,1082788967,HK
-1082788968,1082788991,US
-1082788992,1082789119,HK
-1082789120,1082790143,US
+1082786624,1082790143,US
1082790144,1082790399,IN
-1082790400,1082790951,US
-1082790952,1082790959,AU
-1082790960,1082791167,US
+1082790400,1082791167,US
1082791168,1082791423,IN
-1082791424,1082819711,US
-1082819712,1082819715,IN
-1082819716,1082819839,US
+1082791424,1082819839,US
1082819840,1082820351,IN
-1082820352,1082885855,US
-1082885856,1082885887,CA
-1082885888,1082945535,US
-1082945536,1082948943,CA
-1082948944,1082948959,US
-1082948960,1082949631,CA
+1082820352,1082945535,US
+1082945536,1082949631,CA
1082949632,1082952703,US
1082952704,1082952959,CA
1082952960,1082982399,US
1082982400,1083015167,CA
-1083015168,1083261311,US
-1083261312,1083261439,US
-1083261440,1083264383,US
-1083264384,1083264447,US
-1083264448,1083264463,US
-1083264464,1083264511,US
-1083264512,1083265023,US
+1083015168,1083265023,US
1083265024,1083265279,CA
1083265280,1083396095,US
1083396096,1083400191,BM
-1083400192,1083413247,US
-1083413248,1083413375,CA
-1083413376,1083417727,US
-1083417728,1083417791,CA
-1083417792,1083437055,US
+1083400192,1083437055,US
1083437056,1083441151,CA
-1083441152,1083486911,US
-1083486912,1083486943,IS
-1083486944,1083618602,US
-1083618603,1083618611,DE
-1083618612,1083618714,US
-1083618715,1083618725,BR
-1083618726,1083619954,US
-1083619955,1083619986,CY
-1083619987,1083621375,US
+1083441152,1083621375,US
1083621376,1083637759,BS
1083637760,1083686911,US
1083686912,1083703295,CA
@@ -32179,138 +10612,46 @@
1085526016,1085530111,CA
1085530112,1085538303,US
1085538304,1085603839,CA
-1085603840,1085669656,US
-1085669657,1085669664,BZ
-1085669665,1085669794,US
-1085669795,1085669803,IS
-1085669804,1085669838,US
-1085669839,1085669847,FR
-1085669848,1085670342,US
-1085670343,1085670351,IS
-1085670352,1085670455,US
-1085670456,1085670463,NL
-1085670464,1085670628,US
-1085670629,1085670636,GR
-1085670637,1085670644,GE
-1085670645,1085671328,US
-1085671329,1085671336,IR
-1085671337,1085671688,US
-1085671689,1085671696,LB
-1085671697,1085671712,US
-1085671713,1085671720,AS
-1085671721,1085672873,US
-1085672874,1085672881,NL
-1085672882,1085672969,US
-1085672970,1085672978,CA
-1085672979,1085678408,US
-1085678409,1085678417,CA
-1085678418,1085679027,US
-1085679028,1085679045,FR
-1085679046,1085681695,US
-1085681696,1085681711,AS
-1085681712,1085681756,US
-1085681757,1085681765,EG
-1085681766,1085681906,US
-1085681907,1085681915,CA
-1085681916,1085682331,US
-1085682332,1085682339,CA
-1085682340,1085682374,US
-1085682375,1085682382,HK
-1085682383,1085682863,US
-1085682864,1085682872,AS
-1085682873,1085682914,US
-1085682915,1085682922,WS
-1085682923,1085683905,US
-1085683906,1085683914,TC
-1085683915,1085684480,US
-1085684481,1085684734,AS
-1085684735,1085685225,US
-1085685226,1085685233,CA
-1085685234,1085685304,US
-1085685305,1085685312,SA
-1085685313,1085685345,US
-1085685346,1085685353,CA
-1085685354,1085685574,US
-1085685575,1085685584,EG
-1085685585,1085685636,US
-1085685637,1085685645,SN
-1085685646,1085685669,US
-1085685670,1085685685,CA
-1085685686,1085849599,US
+1085603840,1085849599,US
1085849600,1085857791,CA
1085857792,1085915135,US
1085915136,1085923327,PR
1085927424,1085997055,US
1085997056,1086013439,CA
-1086013440,1086022079,US
-1086022080,1086022111,CA
-1086022112,1086022175,US
-1086022176,1086022207,CA
-1086022208,1086023175,US
-1086023176,1086023183,GB
-1086023184,1086023287,US
-1086023288,1086023295,NZ
-1086023296,1086023335,US
-1086023336,1086023343,RO
-1086023344,1086025447,US
-1086025448,1086025455,CA
-1086025456,1086028663,US
-1086028664,1086028671,BR
-1086028672,1086028751,US
-1086028752,1086028759,BR
-1086028760,1086042111,US
+1086013440,1086042111,US
1086042112,1086046207,CA
-1086046208,1086309887,US
+1086046208,1086050815,US
+1086054400,1086309887,US
1086309888,1086310143,AU
1086310144,1086317823,US
1086317824,1086318079,CA
-1086318080,1086358143,US
-1086358144,1086358271,PA
-1086358272,1086359231,US
-1086359232,1086359295,IL
-1086359296,1086359615,US
-1086359616,1086359647,LB
-1086359648,1086421503,US
+1086318080,1086421503,US
1086421504,1086422015,MP
-1086422016,1086476543,US
-1086476544,1086476607,BM
-1086476608,1086910335,US
-1086910336,1086910463,LB
-1086910464,1086922751,US
+1086422016,1086922751,US
1086922752,1086930943,CA
-1086930944,1086941831,US
-1086941832,1086941835,CA
-1086941836,1086942079,US
-1086942080,1086942087,CA
-1086942088,1086942975,US
+1086930944,1086942975,US
1086942976,1086943231,CA
1086943232,1086955519,US
1086955520,1086971903,CA
1086971904,1087016959,US
1087016960,1087021055,CA
-1087021056,1087375103,US
-1087375104,1087375359,BR
-1087375360,1087379455,US
-1087379456,1087379711,GB
-1087379712,1087385855,US
-1087385856,1087386111,EU
-1087386112,1087395327,US
-1087395328,1087395503,GB
-1087395504,1087395511,US
-1087395512,1087395583,GB
-1087395584,1087399167,US
+1087021056,1087395327,US
+1087395328,1087395455,GB
+1087395456,1087399167,US
1087399168,1087399423,GB
-1087399424,1087401727,US
-1087401728,1087401791,GB
-1087401792,1087401855,US
-1087401856,1087401887,MX
-1087401888,1087401919,US
-1087401920,1087401983,MX
-1087401984,1087419903,US
+1087399424,1087405407,US
+1087405408,1087405423,MX
+1087405424,1087413895,US
+1087413896,1087413903,DE
+1087413904,1087419135,US
+1087419136,1087419391,GB
+1087419392,1087419903,US
1087419904,1087420159,CA
-1087420160,1087432599,US
-1087432600,1087432607,FR
-1087432608,1087436159,US
+1087420160,1087432447,US
+1087432448,1087432607,FR
+1087432608,1087432639,US
+1087432640,1087432703,FR
+1087432704,1087436159,US
1087436160,1087436167,CH
1087436168,1087440895,US
1087440896,1087442943,PR
@@ -32318,11 +10659,7 @@
1087443552,1087443583,DE
1087443584,1087444223,US
1087444224,1087444479,GB
-1087444480,1087445503,US
-1087445504,1087445759,GB
-1087445760,1087461734,US
-1087461735,1087461735,IN
-1087461736,1087464945,US
+1087444480,1087464945,US
1087464946,1087464949,GB
1087464950,1087466489,US
1087466490,1087466493,GB
@@ -32330,171 +10667,83 @@
1087467292,1087467295,BR
1087467296,1087496703,US
1087496704,1087496959,CA
-1087496960,1087497855,US
-1087497856,1087497887,CA
-1087497888,1087514879,US
-1087514880,1087515135,BB
-1087515136,1087515647,US
-1087515648,1087516671,BB
-1087516672,1087554751,US
-1087554752,1087554759,IL
-1087554760,1087580927,US
-1087580928,1087581183,BR
-1087581184,1087596031,US
-1087596032,1087596287,DE
-1087596288,1087608319,US
+1087496960,1087593983,US
+1087593984,1087594239,MX
+1087594240,1087608319,US
1087608320,1087608575,GB
1087608576,1087643723,US
1087643724,1087643727,FR
-1087643728,1087651839,US
-1087651840,1087655935,VE
-1087655936,1087678623,US
+1087643728,1087654143,US
+1087654144,1087654399,VE
+1087654400,1087678623,US
1087678624,1087678655,GB
1087678656,1087686655,US
1087686656,1087686911,PR
-1087686912,1087695319,US
+1087686912,1087689215,US
+1087689216,1087689471,AR
+1087689472,1087695319,US
1087695320,1087695323,GB
-1087695324,1087714335,US
+1087695324,1087708685,US
+1087708686,1087708686,AU
+1087708687,1087714335,US
1087714336,1087714367,NL
1087714368,1087715327,US
1087715328,1087717375,PA
-1087717376,1087717631,US
-1087717632,1087717858,GB
-1087717859,1087717859,US
-1087717860,1087717887,GB
-1087717888,1087726096,US
+1087717376,1087726015,US
+1087726016,1087726047,FR
+1087726048,1087726096,US
1087726097,1087726097,GB
-1087726098,1087729663,US
-1087729664,1087733759,PR
-1087733760,1087735639,US
+1087726098,1087735639,US
1087735640,1087735647,GB
1087735648,1087746079,US
1087746080,1087746083,HK
1087746084,1087758335,US
-1087758336,1087766527,PR
-1087766528,1087799787,US
+1087758336,1087761919,PR
+1087761920,1087762431,US
+1087762432,1087766527,PR
+1087766528,1087798943,US
+1087798944,1087798975,CA
+1087798976,1087799413,US
+1087799414,1087799414,DE
+1087799415,1087799787,US
1087799788,1087799791,CH
1087799792,1087825663,US
1087825664,1087825919,SA
-1087825920,1087839231,US
-1087839232,1087839743,GB
-1087839744,1087854079,US
-1087854080,1087854591,GB
-1087854592,1087862783,US
+1087825920,1087836415,US
+1087836416,1087836671,FR
+1087836672,1087837359,US
+1087837360,1087837367,BR
+1087837368,1087839231,US
+1087839232,1087839487,GB
+1087839488,1087862783,US
1087862784,1087864831,PA
1087864832,1087873023,US
-1087873024,1087873535,CA
-1087873536,1087873791,US
-1087873792,1087874559,CA
-1087874560,1087874815,US
-1087874816,1087875071,CA
-1087875072,1087883263,US
+1087873024,1087873279,CA
+1087873280,1087883263,US
1087883264,1087883519,AR
-1087883520,1087883999,US
-1087884000,1087884025,GB
-1087884026,1087884026,US
-1087884027,1087884031,GB
-1087884032,1087918511,US
-1087918512,1087918519,PR
-1087918520,1087950111,US
+1087883520,1087884001,US
+1087884002,1087884002,GB
+1087884003,1087950111,US
1087950112,1087950119,PR
1087950120,1088012767,US
1088012768,1088012775,PR
-1088012776,1088424464,US
-1088424465,1088424478,AU
-1088424479,1088450704,US
-1088450705,1088450718,ES
-1088450719,1088451760,US
-1088451761,1088451774,CA
-1088451775,1088452112,US
-1088452113,1088452126,CA
-1088452127,1088452400,US
-1088452401,1088452414,VE
-1088452415,1088453024,US
-1088453025,1088453038,JP
-1088453039,1088453104,US
-1088453105,1088453118,CL
-1088453119,1088453488,US
-1088453489,1088453502,IE
-1088453503,1088453536,US
-1088453537,1088453550,CL
-1088453551,1088453808,US
-1088453809,1088453822,AR
-1088453823,1088453840,US
-1088453841,1088453854,LB
-1088453855,1088453856,US
-1088453857,1088453870,CN
-1088453871,1088454448,US
-1088454449,1088454462,LB
-1088454463,1088473375,US
-1088473376,1088473391,ES
-1088473392,1088473695,US
-1088473696,1088473711,IE
-1088473712,1088518415,US
-1088518416,1088518431,HK
-1088518432,1088518479,US
-1088518480,1088518495,TH
-1088518496,1088518927,US
-1088518928,1088519007,UA
-1088519008,1088522671,US
-1088522672,1088522687,CA
-1088522688,1088522735,US
-1088522736,1088522751,TH
-1088522752,1088523199,US
-1088523200,1088523215,TH
-1088523216,1088523439,US
-1088523440,1088523487,JP
-1088523488,1088524271,US
-1088524272,1088524286,IN
-1088524287,1088684031,US
+1088012776,1088398591,US
+1088398592,1088398719,CA
+1088398720,1088684031,US
1088684032,1088946175,CA
-1088946176,1088949919,US
-1088949920,1088949935,CA
-1088949936,1089053183,US
+1088946176,1089053183,US
1089053184,1089053439,BR
1089053440,1089054343,US
1089054344,1089054344,GB
-1089054345,1089057279,US
-1089057280,1089057535,EU
-1089057536,1089153535,US
-1089153536,1089153791,US
-1089153792,1089154847,US
-1089154848,1089154855,VE
-1089154856,1089154968,US
-1089154969,1089154977,IN
-1089154978,1089155011,US
-1089155012,1089155031,TR
-1089155032,1089156751,US
-1089156752,1089156759,EG
-1089156760,1089167359,US
+1089054345,1089058303,US
+1089058304,1089058559,TW
+1089058560,1089167359,US
1089167360,1089171455,CA
-1089171456,1089171967,A2
-1089171968,1089172735,US
-1089172736,1089172839,A2
-1089172840,1089172863,US
-1089172864,1089172895,A2
-1089172896,1089172927,US
-1089172928,1089172983,A2
-1089172984,1089172991,US
-1089172992,1089173119,NL
-1089173120,1089173247,A2
-1089173248,1089174015,US
-1089174016,1089174159,A2
-1089174160,1089174167,US
-1089174168,1089174175,A2
-1089174176,1089174199,US
-1089174200,1089174207,A2
-1089174208,1089174215,US
-1089174216,1089175551,A2
-1089175552,1089191935,US
+1089171456,1089183231,US
+1089183232,1089183487,GB
+1089183488,1089191935,US
1089191936,1089200127,CA
-1089200128,1089200751,US
-1089200752,1089200783,CA
-1089200784,1089203439,US
-1089203440,1089203447,AU
-1089203448,1089204575,US
-1089204576,1089204607,CA
-1089204608,1089209471,US
+1089200128,1089209471,US
1089209472,1089209479,GB
1089209480,1089209487,FR
1089209488,1089209495,DE
@@ -32515,96 +10764,28 @@
1089235456,1089235967,GB
1089235968,1089249279,US
1089249280,1089249535,IE
-1089249536,1089250070,US
-1089250071,1089250071,EU
-1089250072,1089263359,US
+1089249536,1089263359,US
1089263360,1089263615,FR
1089263616,1089263871,GB
-1089263872,1089264127,EU
+1089263872,1089264127,US
1089264128,1089264639,FR
1089264640,1089265663,US
1089265664,1089265919,GB
1089265920,1089266431,US
1089266432,1089266943,GB
-1089266944,1089282095,US
-1089282096,1089282099,CA
-1089282100,1089282687,US
-1089282688,1089282703,US
-1089282704,1089285439,US
-1089285440,1089285455,US
-1089285456,1089306623,US
+1089266944,1089306623,US
1089306624,1089339391,PR
-1089339392,1089393167,US
-1089393168,1089393175,CA
-1089393176,1089393223,US
+1089339392,1089393223,US
1089393224,1089393231,CA
-1089393232,1089393295,US
-1089393296,1089393407,CA
-1089393408,1089468415,US
-1089468416,1089468671,A2
-1089468672,1089482927,US
-1089482928,1089482935,CA
-1089482936,1089486591,US
-1089486592,1089486607,CA
-1089486608,1089488463,US
-1089488464,1089488479,JP
-1089488480,1089492351,US
-1089492352,1089492415,CA
-1089492416,1089493631,US
-1089493632,1089493647,CA
-1089493648,1089503871,US
-1089503872,1089503879,CA
-1089503880,1089507159,US
-1089507160,1089507167,CA
-1089507168,1089526783,US
+1089393232,1089393343,US
+1089393344,1089393359,CA
+1089393360,1089526783,US
1089526784,1089527039,VE
-1089527040,1089552383,US
-1089552384,1089552391,AU
-1089552392,1089557551,US
-1089557552,1089557559,CA
-1089557560,1089574319,US
-1089574320,1089574327,CA
-1089574328,1089576623,US
-1089576624,1089576631,CA
-1089576632,1089579519,US
+1089527040,1089579519,US
1089579520,1089580031,VE
-1089580032,1089581287,US
-1089581288,1089581295,CA
-1089581296,1089585919,US
-1089585920,1089585951,CA
-1089585952,1089587999,US
-1089588000,1089588015,IN
-1089588016,1089593615,US
-1089593616,1089593623,CA
-1089593624,1089595279,US
-1089595280,1089595287,CA
-1089595288,1089596543,US
-1089596544,1089596575,CA
-1089596576,1089598975,US
+1089580032,1089598975,US
1089598976,1089599231,HK
-1089599232,1089626399,US
-1089626400,1089626407,CA
-1089626408,1089626415,US
-1089626416,1089626431,CA
-1089626432,1089631055,US
-1089631056,1089631071,CA
-1089631072,1089644815,US
-1089644816,1089644831,GB
-1089644832,1089696063,US
-1089696064,1089696071,GB
-1089696072,1089703455,US
-1089703456,1089703487,CA
-1089703488,1089720959,US
-1089720960,1089720967,CA
-1089720968,1089721023,US
-1089721024,1089721087,CA
-1089721088,1089721503,US
-1089721504,1089721519,CA
-1089721520,1089721727,US
-1089721728,1089721791,CA
-1089721792,1089723823,US
-1089723824,1089723831,CA
-1089723832,1089881599,US
+1089599232,1089881599,US
1089881600,1089882111,GB
1089882112,1089882623,US
1089882624,1089883135,GB
@@ -32615,389 +10796,118 @@
1089970176,1089974271,PR
1089974272,1090146303,US
1090146304,1090150399,CA
-1090150400,1090172495,US
-1090172496,1090172511,GB
-1090172512,1090195086,US
-1090195087,1090195087,US
-1090195088,1090197111,US
-1090197112,1090197112,US
-1090197113,1090207743,US
+1090150400,1090207743,US
1090207744,1090215935,CA
1090215936,1090355199,US
-1090355200,1090356327,CA
-1090356328,1090356335,US
-1090356336,1090356399,CA
-1090356400,1090356415,US
-1090356416,1090357535,CA
-1090357536,1090357567,US
-1090357568,1090357663,CA
-1090357664,1090357679,US
-1090357680,1090357703,CA
-1090357704,1090357711,US
-1090357712,1090357727,CA
-1090357728,1090357735,US
-1090357736,1090363391,CA
+1090355200,1090363391,CA
1090363392,1090387967,US
1090387968,1090396159,CA
1090396160,1090424831,US
1090424832,1090428927,CA
1090428928,1090445311,US
-1090445312,1090447359,CA
-1090447360,1090447487,US
-1090447488,1090448127,CA
-1090448128,1090448255,US
-1090448256,1090453503,CA
-1090453504,1090497903,US
-1090497904,1090497919,AU
-1090497920,1091683357,US
-1091683358,1091683367,GB
-1091683368,1091683407,US
-1091683408,1091683417,BE
-1091683418,1091683437,US
-1091683438,1091683447,QA
-1091683448,1091683593,US
-1091683594,1091683603,CA
-1091683604,1091683613,US
-1091683614,1091683653,CA
-1091683654,1091683869,US
-1091683870,1091683889,AU
-1091683890,1091684879,US
-1091684880,1091684895,CA
-1091684896,1091685695,US
-1091685696,1091685711,QA
-1091685712,1091687167,US
-1091687168,1091687183,CA
-1091687184,1091687359,US
-1091687360,1091687391,CA
-1091687392,1091687711,US
-1091687712,1091687727,ES
-1091687728,1091687743,CO
-1091687744,1091687807,US
-1091687808,1091687839,CR
-1091687840,1091687871,ES
-1091687872,1091689255,US
-1091689256,1091689265,GB
-1091689266,1091689295,US
-1091689296,1091689305,NZ
-1091689306,1091689335,US
-1091689336,1091689345,SI
-1091689346,1091690495,US
-1091690496,1091690511,CA
-1091690512,1091690527,GB
-1091690528,1091690751,US
-1091690752,1091690815,GB
-1091690816,1091691327,US
-1091691328,1091691359,SA
-1091691360,1091692347,US
-1091692348,1091692357,SY
-1091692358,1091692397,US
-1091692398,1091692407,NL
-1091692408,1091692447,US
-1091692448,1091692457,GB
-1091692458,1091692573,US
-1091692574,1091692583,BE
-1091692584,1091692643,US
-1091692644,1091692653,PH
-1091692654,1091692703,US
-1091692704,1091692713,SI
-1091692714,1091692723,US
-1091692724,1091692733,CA
-1091692734,1091693095,US
-1091693096,1091693135,NZ
-1091693136,1091694447,US
-1091694448,1091694463,BG
-1091694464,1091694877,US
-1091694878,1091694887,DE
-1091694888,1091695007,US
-1091695008,1091695017,CA
-1091695018,1091797263,US
-1091797264,1091797279,IT
-1091797280,1091797975,US
-1091797976,1091797983,US
-1091797984,1091798639,US
-1091798640,1091798647,CN
-1091798648,1091798783,US
+1090445312,1090453503,CA
+1090453504,1091798783,US
1091798784,1091799039,CN
-1091799040,1091799719,US
-1091799720,1091799727,SG
-1091799728,1091800319,US
-1091800320,1091800327,JP
-1091800328,1091802111,US
+1091799040,1091802111,US
1091802112,1091802367,CA
1091802368,1091803135,US
1091803136,1091803391,CN
-1091803392,1091803711,US
-1091803712,1091803775,TH
-1091803776,1091803871,US
-1091803872,1091803903,NL
-1091803904,1091807231,US
+1091803392,1091807231,US
1091807232,1091807487,CA
1091807488,1091807999,US
1091808000,1091808511,CA
-1091808512,1091809375,US
-1091809376,1091809391,GB
-1091809392,1091812351,US
+1091808512,1091812351,US
1091812352,1091812607,CN
1091812608,1091960831,US
1091960832,1092026367,CA
-1092026368,1092066589,US
-1092066590,1092066597,KN
-1092066598,1092067042,US
-1092067043,1092067050,KN
-1092067051,1092075519,US
+1092026368,1092075519,US
1092075520,1092091903,PR
-1092091904,1092918983,US
-1092918984,1092918991,CA
-1092918992,1092940607,US
-1092940608,1092940639,AU
-1092940640,1093017599,US
+1092091904,1093017599,US
1093017600,1093021695,CA
1093021696,1093025791,US
1093025792,1093033983,CA
-1093033984,1093052015,US
-1093052016,1093052023,CA
-1093052024,1093052895,US
-1093052896,1093052911,AR
-1093052912,1093053343,US
-1093053344,1093053359,AU
-1093053360,1093054127,US
-1093054128,1093054143,FR
-1093054144,1093054207,US
-1093054208,1093054223,CA
-1093054224,1093054287,US
-1093054288,1093054303,GB
-1093054304,1093055487,US
-1093055488,1093055871,AR
-1093055872,1093055887,US
-1093055888,1093055903,KH
-1093055904,1093056111,US
-1093056112,1093056127,SY
-1093056128,1093056167,US
-1093056168,1093056175,RO
-1093056176,1093056447,US
-1093056448,1093056463,FR
-1093056464,1093056479,CA
-1093056480,1093057103,US
-1093057104,1093057119,JP
-1093057120,1093057263,US
-1093057264,1093057279,IT
-1093057280,1093057311,US
-1093057312,1093057343,CY
-1093057344,1093057391,US
-1093057392,1093057407,RO
-1093057408,1093058559,US
+1093033984,1093055487,US
+1093055488,1093055743,AR
+1093055744,1093058559,US
1093058560,1093063167,PR
1093063168,1093063679,DO
1093063680,1093066751,PR
1093066752,1093074943,US
1093074944,1093091327,CA
-1093091328,1093107775,US
-1093107776,1093107823,CA
-1093107824,1093107839,US
-1093107840,1093107951,CA
-1093107952,1093107967,US
-1093107968,1093109343,CA
-1093109344,1093109351,US
-1093109352,1093109359,CA
-1093109360,1093109375,US
-1093109376,1093109879,CA
-1093109880,1093109887,US
-1093109888,1093109967,CA
-1093109968,1093109983,US
-1093109984,1093110271,CA
+1093091328,1093107967,US
+1093107968,1093108479,CA
+1093108480,1093108735,US
+1093108736,1093109247,CA
+1093109248,1093109503,US
+1093109504,1093109759,CA
+1093109760,1093109871,US
+1093109872,1093109879,CA
+1093109880,1093110015,US
+1093110016,1093110271,CA
1093110272,1093110527,US
1093110528,1093110783,CA
-1093110784,1093110815,US
-1093110816,1093110847,CA
-1093110848,1093110927,US
-1093110928,1093111039,CA
-1093111040,1093111295,US
-1093111296,1093111551,CA
-1093111552,1093111583,US
-1093111584,1093111711,CA
-1093111712,1093111727,US
+1093110784,1093110927,US
+1093110928,1093110935,CA
+1093110936,1093111039,US
+1093111040,1093111551,CA
+1093111552,1093111727,US
1093111728,1093111743,CA
-1093111744,1093111759,US
-1093111760,1093111871,CA
-1093111872,1093111903,US
+1093111744,1093111903,US
1093111904,1093111935,CA
-1093111936,1093111943,US
-1093111944,1093111951,CA
-1093111952,1093111967,US
-1093111968,1093112319,CA
-1093112320,1093112327,US
-1093112328,1093112431,CA
-1093112432,1093112479,US
-1093112480,1093112543,CA
-1093112544,1093112831,US
-1093112832,1093112911,CA
-1093112912,1093112919,US
-1093112920,1093112959,CA
-1093112960,1093113087,US
-1093113088,1093113191,CA
-1093113192,1093113207,US
-1093113208,1093113379,CA
-1093113380,1093113383,US
-1093113384,1093113487,CA
-1093113488,1093113495,US
-1093113496,1093113743,CA
-1093113744,1093113759,US
-1093113760,1093113783,CA
-1093113784,1093113791,US
-1093113792,1093113851,CA
-1093113852,1093113855,US
+1093111936,1093113855,US
1093113856,1093114111,CA
-1093114112,1093114623,US
-1093114624,1093115775,CA
-1093115776,1093115839,US
-1093115840,1093116671,CA
-1093116672,1093116735,US
-1093116736,1093116927,CA
+1093114112,1093114843,US
+1093114844,1093114847,CA
+1093114848,1093114879,US
+1093114880,1093115647,CA
+1093115648,1093115903,US
+1093115904,1093116415,CA
+1093116416,1093116927,US
1093116928,1093117183,HK
-1093117184,1093117439,US
-1093117440,1093117455,CA
-1093117456,1093117503,US
-1093117504,1093117519,CA
-1093117520,1093117535,US
-1093117536,1093117567,CA
-1093117568,1093117615,US
-1093117616,1093117631,CA
-1093117632,1093117647,US
-1093117648,1093118207,CA
+1093117184,1093117951,US
+1093117952,1093118207,CA
1093118208,1093118463,HK
-1093118464,1093118495,CA
-1093118496,1093118527,US
-1093118528,1093118531,CA
-1093118532,1093118591,US
-1093118592,1093118719,CA
-1093118720,1093118983,US
-1093118984,1093119007,CA
-1093119008,1093119039,US
-1093119040,1093119135,CA
-1093119136,1093119167,US
-1093119168,1093119311,CA
-1093119312,1093119327,US
-1093119328,1093119359,CA
-1093119360,1093119423,US
-1093119424,1093119663,CA
-1093119664,1093119671,US
-1093119672,1093119687,CA
-1093119688,1093119743,US
-1093119744,1093119831,CA
-1093119832,1093119839,US
-1093119840,1093120383,CA
-1093120384,1093120431,US
-1093120432,1093120463,CA
-1093120464,1093120479,US
-1093120480,1093120767,CA
-1093120768,1093120911,US
-1093120912,1093120943,CA
-1093120944,1093120959,US
-1093120960,1093122047,CA
+1093118464,1093119999,US
+1093120000,1093120255,CA
+1093120256,1093120511,US
+1093120512,1093120767,CA
+1093120768,1093121023,US
+1093121024,1093122047,CA
1093122048,1093122175,US
-1093122176,1093122447,CA
-1093122448,1093122463,US
-1093122464,1093122479,CA
-1093122480,1093122487,US
-1093122488,1093122495,CA
-1093122496,1093122535,US
-1093122536,1093122543,CA
-1093122544,1093122551,US
-1093122552,1093122559,CA
-1093122560,1093122591,US
-1093122592,1093122655,CA
-1093122656,1093122671,US
-1093122672,1093122687,CA
-1093122688,1093122719,US
-1093122720,1093122767,CA
-1093122768,1093122783,US
-1093122784,1093122791,CA
-1093122792,1093123071,US
-1093123072,1093123839,CA
-1093123840,1093123903,US
-1093123904,1093123935,CW
-1093123936,1093123943,US
-1093123944,1093123967,CA
-1093123968,1093123983,US
-1093123984,1093123999,VG
-1093124000,1093124095,US
-1093124096,1093124287,CA
-1093124288,1093124351,US
-1093124352,1093124559,CA
-1093124560,1093124575,US
-1093124576,1093124991,CA
-1093124992,1093125055,US
-1093125056,1093125711,CA
-1093125712,1093125719,US
-1093125720,1093125775,CA
-1093125776,1093125871,US
-1093125872,1093125951,CA
-1093125952,1093126047,US
-1093126048,1093126063,CA
-1093126064,1093126079,US
-1093126080,1093126111,CA
-1093126112,1093126134,US
-1093126135,1093126142,CA
-1093126143,1093126143,US
+1093122176,1093122303,CA
+1093122304,1093122751,US
+1093122752,1093122767,CA
+1093122768,1093122815,US
+1093122816,1093123839,CA
+1093123840,1093123951,US
+1093123952,1093123967,CA
+1093123968,1093124607,US
+1093124608,1093124863,CA
+1093124864,1093125119,US
+1093125120,1093125631,CA
+1093125632,1093126143,US
1093126144,1093126399,CA
-1093126400,1093126431,VG
-1093126432,1093126447,US
-1093126448,1093126535,CA
-1093126536,1093126543,US
-1093126544,1093126639,CA
-1093126640,1093126655,US
-1093126656,1093127167,CA
-1093127168,1093127423,US
-1093127424,1093127455,CA
-1093127456,1093127551,US
-1093127552,1093127615,CA
-1093127616,1093127647,US
-1093127648,1093127663,CA
-1093127664,1093127775,US
-1093127776,1093127791,CA
-1093127792,1093128191,US
-1093128192,1093128415,CA
-1093128416,1093128447,US
+1093126400,1093126911,US
+1093126912,1093127167,CA
+1093127168,1093128447,US
1093128448,1093129215,CA
-1093129216,1093130367,US
-1093130368,1093130415,CA
-1093130416,1093130431,US
-1093130432,1093131263,CA
-1093131264,1093131391,US
-1093131392,1093131487,CA
-1093131488,1093132287,US
-1093132288,1093132415,CA
-1093132416,1093132447,US
-1093132448,1093133311,CA
-1093133312,1093133375,US
-1093133376,1093134263,CA
-1093134264,1093134271,US
-1093134272,1093134335,CA
-1093134336,1093135359,US
-1093135360,1093135639,CA
-1093135640,1093135647,US
-1093135648,1093135743,CA
-1093135744,1093135871,US
+1093129216,1093130751,US
+1093130752,1093131007,CA
+1093131008,1093132543,US
+1093132544,1093133055,CA
+1093133056,1093135359,US
+1093135360,1093135615,CA
+1093135616,1093135871,US
1093135872,1093136639,CA
1093136640,1093136895,US
-1093136896,1093137351,CA
-1093137352,1093137359,US
-1093137360,1093137375,MX
-1093137376,1093138431,CA
-1093138432,1093138559,US
-1093138560,1093138623,CA
-1093138624,1093138687,NL
-1093138688,1093139455,US
-1093139456,1093139583,CA
-1093139584,1093139647,US
-1093139648,1093139679,CA
-1093139680,1093139695,US
-1093139696,1093140223,CA
-1093140224,1093320191,US
-1093320192,1093320255,PR
-1093320256,1093320287,US
-1093320288,1093320447,PR
-1093320448,1093697535,US
+1093136896,1093137151,CA
+1093137152,1093137407,US
+1093137408,1093137791,CA
+1093137792,1093137919,US
+1093137920,1093138431,CA
+1093138432,1093139711,US
+1093139712,1093140223,CA
+1093140224,1093697535,US
1093697536,1093699071,BB
1093699072,1093700607,GD
1093700608,1093701631,VC
@@ -33013,27 +10923,13 @@
1093723648,1093724415,BB
1093724416,1093725183,VC
1093725184,1093730303,BB
-1093730304,1093730815,US
-1093730816,1093731071,US
-1093731072,1093733887,US
-1093733888,1093734143,US
-1093734144,1093737247,US
-1093737248,1093737263,AE
-1093737264,1093737423,US
-1093737424,1093737431,GB
-1093737432,1093740335,US
-1093740336,1093740351,SG
-1093740352,1093741599,US
-1093741600,1093741607,ES
-1093741608,1093743743,US
-1093743744,1093743807,CA
-1093743808,1093747839,US
-1093747840,1093747903,US
-1093747904,1093748799,US
-1093748800,1093748863,CN
-1093748864,1094441727,US
-1094441728,1094441983,US
-1094441984,1094565887,US
+1093730304,1093965960,US
+1093965961,1093965961,NL
+1093965962,1093966163,US
+1093966164,1093966164,NL
+1093966165,1093966216,US
+1093966217,1093966217,NL
+1093966218,1094565887,US
1094565888,1094582271,CA
1094582272,1094662271,US
1094662272,1094662303,CN
@@ -33041,26 +10937,18 @@
1094669636,1094669639,HK
1094669640,1094670795,US
1094670796,1094670799,CN
-1094670800,1095314943,US
-1095314944,1095314944,US
-1095314945,1095450623,US
+1094670800,1095450623,US
1095450624,1095467007,BS
-1095467008,1095627775,US
+1095467008,1095483391,US
+1095484416,1095484671,US
+1095491584,1095627775,US
1095627776,1095628287,CA
1095628288,1096278015,US
1096278016,1096286207,CA
-1096286208,1096290879,US
-1096290880,1096290943,A2
-1096290944,1096351231,US
-1096351232,1096351743,A2
-1096351744,1096518655,US
-1096518656,1096518911,A2
-1096518912,1096519167,US
+1096286208,1096519167,US
1096519168,1096519423,CD
1096519424,1096519679,SL
-1096519680,1096540927,US
-1096540928,1096541183,US
-1096541184,1096548351,US
+1096519680,1096548351,US
1096548352,1096810495,CA
1096810496,1096884223,US
1096884224,1096888319,CA
@@ -33068,114 +10956,30 @@
1096890880,1096891135,GB
1096891136,1096925183,US
1096925184,1096941567,CA
-1096941568,1096950551,US
-1096950552,1096950559,CA
-1096950560,1096952455,US
-1096952456,1096952463,GB
-1096952464,1096952519,US
-1096952520,1096952527,GB
-1096952528,1096956463,US
-1096956464,1096956471,GB
-1096956472,1096956631,US
-1096956632,1096956639,GB
-1096956640,1096957247,US
-1096957248,1096957255,CA
-1096957256,1096957775,US
-1096957776,1096957791,IE
-1096957792,1096959599,US
-1096959600,1096959607,GB
-1096959608,1096960767,US
-1096960768,1096960895,GB
-1096960896,1096969071,US
-1096969072,1096969079,CA
-1096969080,1096969471,US
-1096969472,1096969479,IN
-1096969480,1097057623,US
-1097057624,1097057631,IT
-1097057632,1097057655,US
-1097057656,1097057663,NZ
-1097057664,1097057727,US
-1097057728,1097057735,NZ
-1097057736,1097057743,IT
-1097057744,1097058303,US
-1097058304,1097058367,IT
-1097058368,1097060351,US
-1097060352,1097060359,IT
-1097060360,1097060367,AU
-1097060368,1097060383,US
-1097060384,1097060399,IT
-1097060400,1097060463,US
-1097060464,1097060471,IT
-1097060472,1097063663,US
-1097063664,1097063679,IT
-1097063680,1097067519,US
-1097067520,1097068031,GB
-1097068032,1097131263,US
-1097131264,1097131367,CN
-1097131368,1097131391,US
-1097131392,1097131423,CN
-1097131424,1097131439,US
-1097131440,1097131447,HK
-1097131448,1097131455,US
-1097131456,1097131471,CN
-1097131472,1097727999,US
-1097728000,1097729151,CA
-1097729152,1097729167,US
-1097729168,1097731447,CA
-1097731448,1097731455,GB
-1097731456,1097736191,CA
+1096941568,1097076123,US
+1097076124,1097076127,DE
+1097076128,1097727999,US
+1097728000,1097736191,CA
1097736192,1097768959,US
1097768960,1097785343,CA
-1097785344,1097830399,US
+1097785344,1097793535,US
+1097801728,1097830399,US
1097830400,1097834495,CA
1097834496,1097837197,US
1097837198,1097837198,AE
1097837199,1097896191,US
-1097896192,1097896711,VI
-1097896712,1097896719,US
-1097896720,1097897215,VI
-1097897216,1097913295,US
-1097913296,1097913303,CA
-1097913304,1097947135,US
-1097947136,1097949183,VI
+1097896192,1097897215,VI
+1097897216,1097947135,US
+1097947136,1097947735,VI
+1097947736,1097947743,US
+1097947744,1097949183,VI
1097949184,1097951231,US
1097951232,1097953279,VI
-1097953280,1098083895,US
-1098083896,1098083903,ME
-1098083904,1098187599,US
-1098187600,1098187607,GB
-1098187608,1098188047,US
-1098188048,1098188055,CA
-1098188056,1098353975,US
-1098353976,1098353983,CA
-1098353984,1098812343,US
-1098812344,1098812351,CA
-1098812352,1098891559,US
-1098891560,1098891567,AU
-1098891568,1098891583,US
-1098891584,1098891607,AU
-1098891608,1098891623,US
-1098891624,1098891631,AU
-1098891632,1098891639,US
-1098891640,1098891647,AU
-1098891648,1098891679,US
-1098891680,1098891695,AU
-1098891696,1098891711,US
-1098891712,1098891743,SG
-1098891744,1098891775,AU
-1098891776,1098892015,US
-1098892016,1098892031,AU
-1098892032,1101078455,US
-1101078456,1101078463,CA
-1101078464,1101113135,US
-1101113136,1101113143,CA
-1101113144,1101118239,US
-1101118240,1101118271,GB
-1101118272,1101121535,US
+1097953280,1098507263,US
+1098507264,1098507519,CA
+1098507520,1101121535,US
1101121536,1101121791,EC
-1101121792,1101139967,US
-1101139968,1101140223,PR
-1101140224,1101182975,US
+1101121792,1101182975,US
1101182976,1101183487,YE
1101183488,1101190655,US
1101190656,1101191167,EC
@@ -33185,41 +10989,27 @@
1101263104,1101263359,CW
1101263360,1101267711,US
1101267712,1101267967,CA
-1101267968,1101289983,US
-1101289984,1101290239,CW
-1101290240,1101304063,US
+1101267968,1101304063,US
1101304064,1101304319,EC
1101304320,1101304831,US
1101304832,1101305855,HN
1101305856,1101306047,US
1101306048,1101306079,PR
-1101306080,1101339887,US
-1101339888,1101339903,CA
-1101339904,1101352959,US
+1101306080,1101352959,US
1101352960,1101355007,HN
-1101355008,1101385855,US
-1101385856,1101385919,DK
-1101385920,1101402031,US
+1101355008,1101402031,US
1101402032,1101402047,PR
1101402048,1101425919,US
1101425920,1101426175,EC
-1101426176,1101440295,US
-1101440296,1101440303,CA
-1101440304,1101445775,US
-1101445776,1101445791,CA
-1101445792,1101459455,US
+1101426176,1101459455,US
1101459456,1101461503,BB
-1101461504,1101461759,US
-1101461760,1101462015,CW
-1101462016,1101469695,US
+1101461504,1101469695,US
1101469696,1101471743,HN
1101471744,1101475839,US
1101475840,1101479935,CO
1101479936,1101484031,US
1101484032,1101488127,CO
-1101488128,1101492623,US
-1101492624,1101492639,BE
-1101492640,1101521407,US
+1101488128,1101521407,US
1101521408,1101521919,AS
1101521920,1101542399,US
1101542400,1101542911,CO
@@ -33229,118 +11019,42 @@
1101635328,1101635583,HN
1101635584,1101650431,US
1101650432,1101650943,HN
-1101650944,1101662951,US
-1101662952,1101662959,PR
-1101662960,1101668095,US
+1101650944,1101668095,US
1101668096,1101668351,EC
-1101668352,1101676135,US
-1101676136,1101676143,CA
-1101676144,1101676543,US
+1101668352,1101676543,US
1101676544,1101678591,EC
1101678592,1101681407,US
1101681408,1101681663,NL
-1101681664,1101685383,US
-1101685384,1101685391,NL
-1101685392,1101726407,US
-1101726408,1101726415,CA
-1101726416,1101732199,US
-1101732200,1101732207,CH
-1101732208,1101750783,US
+1101681664,1101750783,US
1101750784,1101751295,BM
-1101751296,1101767679,US
-1101767680,1101768191,CW
-1101768192,1101791743,US
-1101791744,1101791999,A2
-1101792000,1101792255,US
-1101792256,1101792767,A2
-1101792768,1101797375,US
+1101751296,1101767935,US
+1101767936,1101768191,CW
+1101768192,1101797375,US
1101797376,1101798399,BB
1101798400,1101803519,US
1101803520,1101804543,HN
1101804544,1101837311,US
1101837312,1101837567,EC
-1101837568,1101856767,US
-1101856768,1101856775,DK
-1101856776,1101857295,US
-1101857296,1101857311,CA
-1101857312,1101869055,US
+1101837568,1101869055,US
1101869056,1101869567,GH
1101869568,1101871103,US
1101871104,1101873151,BO
-1101873152,1101881935,US
-1101881936,1101881951,GB
-1101881952,1101905407,US
+1101873152,1101905407,US
1101905408,1101905663,GH
-1101905664,1101952439,US
-1101952440,1101952447,CA
-1101952448,1101983231,US
-1101983232,1101983743,CW
-1101983744,1102004223,US
-1102004224,1102004479,IN
-1102004480,1102004735,US
+1101905664,1101992063,US
+1101992064,1101992191,NL
+1101992192,1102004735,US
1102004736,1102004991,IN
1102004992,1102005247,US
1102005248,1102005503,CA
1102005504,1102005759,PK
-1102005760,1102005887,US
-1102005888,1102005951,IE
-1102005952,1102006271,US
+1102005760,1102006271,US
1102006272,1102006527,CA
1102006528,1102007295,US
1102007296,1102007551,PK
-1102007552,1102007599,US
-1102007600,1102007615,AR
-1102007616,1102007679,US
-1102007680,1102007695,IN
-1102007696,1102007791,US
-1102007792,1102007807,VE
-1102007808,1102008079,US
-1102008080,1102008087,DO
-1102008088,1102008095,US
-1102008096,1102008103,CA
-1102008104,1102008151,US
-1102008152,1102008159,AR
-1102008160,1102008223,US
-1102008224,1102008231,CA
-1102008232,1102008607,US
-1102008608,1102008639,CA
-1102008640,1102008671,BE
-1102008672,1102008735,US
-1102008736,1102008767,BE
-1102008768,1102008831,US
-1102008832,1102008863,BE
-1102008864,1102010623,US
+1102007552,1102010623,US
1102010624,1102010879,PK
-1102010880,1102011647,US
-1102011648,1102011663,VE
-1102011664,1102011743,US
-1102011744,1102011759,TR
-1102011760,1102011855,US
-1102011856,1102011871,CR
-1102011872,1102011887,US
-1102011888,1102011903,AU
-1102011904,1102012799,US
-1102012800,1102012927,IN
-1102012928,1102012975,US
-1102012976,1102012991,IN
-1102012992,1102013103,US
-1102013104,1102013119,HK
-1102013120,1102013135,US
-1102013136,1102013151,VE
-1102013152,1102013167,US
-1102013168,1102013183,VE
-1102013184,1102014271,US
-1102014272,1102014335,IN
-1102014336,1102014399,CA
-1102014400,1102016255,US
-1102016256,1102016287,AR
-1102016288,1102016351,US
-1102016352,1102016383,MY
-1102016384,1102018431,US
-1102018432,1102018495,TZ
-1102018496,1102019583,US
-1102019584,1102019711,IN
-1102019712,1102389247,US
+1102010880,1102389247,US
1102389248,1102393343,CA
1102393344,1102446591,US
1102446592,1102448383,HN
@@ -33348,45 +11062,17 @@
1102449152,1102449407,SV
1102449408,1102454527,CR
1102454528,1102454783,HN
-1102454784,1102488123,US
-1102488124,1102488163,IN
-1102488164,1102488284,US
-1102488285,1102488315,IN
-1102488316,1102494223,US
-1102494224,1102494227,AU
-1102494228,1102494262,US
-1102494263,1102494279,AU
-1102494280,1102494332,US
-1102494333,1102494378,AU
-1102494379,1102495519,US
-1102495520,1102495527,AU
-1102495528,1102512127,US
+1102454784,1102512127,US
1102512128,1102516223,JM
1102516224,1103244799,US
1103244800,1103245055,EC
-1103245056,1103475871,US
-1103475872,1103475879,AF
-1103475880,1103476223,US
-1103476224,1103476255,CA
-1103476256,1103548415,US
+1103245056,1103548415,US
1103548416,1103550463,BS
-1103550464,1103586335,US
-1103586336,1103586351,DE
-1103586352,1103603711,US
+1103550464,1103603711,US
1103603712,1103605759,EC
1103605760,1103623167,US
1103623168,1103623679,CO
-1103623680,1103675647,US
-1103675648,1103675711,AU
-1103675712,1103676159,US
-1103676160,1103676175,AU
-1103676176,1103678831,US
-1103678832,1103678847,AU
-1103678848,1103769367,US
-1103769368,1103769375,LU
-1103769376,1103929055,US
-1103929056,1103929063,MX
-1103929064,1103930879,US
+1103623680,1103930879,US
1103930880,1103931135,MX
1103931136,1103987967,US
1103987968,1103988223,BR
@@ -33394,79 +11080,31 @@
1103992320,1103992575,FI
1103992576,1103996927,US
1103996928,1103997439,EC
-1103997440,1104003455,US
-1104003456,1104003583,PH
-1104003584,1104033439,US
-1104033440,1104033471,GB
-1104033472,1104075703,US
-1104075704,1104075711,CH
-1104075712,1104081391,US
-1104081392,1104081399,PR
-1104081400,1104082423,US
-1104082424,1104082431,UM
-1104082432,1104096407,US
-1104096408,1104096415,DE
-1104096416,1104166911,US
+1103997440,1104166911,US
1104166912,1104168959,CO
-1104168960,1104232743,US
-1104232744,1104232751,CA
-1104232752,1104265215,US
+1104168960,1104265215,US
1104265216,1104265727,PH
1104265728,1104492287,US
1104492288,1104492543,PH
-1104492544,1104559391,US
-1104559392,1104559399,CA
-1104559400,1104559487,US
-1104559488,1104559503,CA
-1104559504,1104629247,US
+1104492544,1104629247,US
1104629248,1104629759,GH
-1104629760,1104630975,US
-1104630976,1104631039,CA
-1104631040,1104753151,US
+1104629760,1104753151,US
1104753152,1104753407,SX
1104753408,1104842751,US
1104842752,1104844799,PR
-1104844800,1104875335,US
-1104875336,1104875351,AF
-1104875352,1104881087,US
-1104881088,1104881151,PH
-1104881152,1104916991,US
-1104916992,1104917247,AS
-1104917248,1105034495,US
+1104844800,1104924415,US
+1104924416,1104924671,IN
+1104924672,1105034495,US
1105034496,1105034751,IT
1105034752,1105099519,US
1105099520,1105099775,EC
-1105099776,1105142463,US
-1105142464,1105142471,MN
-1105142472,1105143039,US
-1105143040,1105143047,MN
-1105143048,1105153215,US
-1105153216,1105153279,PH
-1105153280,1105196775,US
-1105196776,1105196783,AF
-1105196784,1106305663,US
-1106305664,1106305671,CA
-1106305672,1106306047,US
-1106306048,1106306079,CA
-1106306080,1106349599,US
-1106349600,1106349607,UM
-1106349608,1106469695,US
-1106469696,1106469759,CO
-1106469760,1106469887,US
+1105099776,1106469887,US
1106469888,1106470911,BS
1106470912,1106475007,US
1106475008,1106475519,CO
-1106475520,1106484351,US
-1106484352,1106484415,PH
-1106484416,1106495303,US
-1106495304,1106495319,GB
-1106495320,1106532887,US
-1106532888,1106532895,TW
-1106532896,1106547743,US
-1106547744,1106547759,DK
-1106547760,1106685047,US
-1106685048,1106685055,CA
-1106685056,1106758655,US
+1106475520,1106740991,US
+1106740992,1106741247,CR
+1106741248,1106758655,US
1106758656,1106759167,EC
1106759168,1106759679,CO
1106759680,1106767871,US
@@ -33475,13 +11113,9 @@
1106768896,1106769919,CO
1106769920,1107239935,US
1107239936,1107240191,CN
-1107240192,1107240447,A2
+1107240192,1107240447,US
1107240448,1107240959,CN
-1107240960,1107241215,US
-1107241216,1107241343,CN
-1107241344,1107241471,US
-1107241472,1107241599,CN
-1107241600,1107243007,US
+1107240960,1107243007,US
1107243008,1107247103,TC
1107247104,1107275775,US
1107275776,1107279871,CA
@@ -33489,23 +11123,7 @@
1107288064,1107292159,CA
1107292160,1107701759,US
1107701760,1107705855,CA
-1107705856,1107801367,US
-1107801368,1107801375,CA
-1107801376,1107808842,US
-1107808843,1107808846,PE
-1107808847,1107808877,US
-1107808878,1107808881,PE
-1107808882,1107809392,US
-1107809393,1107809393,QA
-1107809394,1107809394,US
-1107809395,1107809396,QA
-1107809397,1107809418,US
-1107809419,1107809419,QA
-1107809420,1107809850,US
-1107809851,1107809851,CA
-1107809852,1107810392,US
-1107810393,1107810396,IN
-1107810397,1107812031,US
+1107705856,1107812031,US
1107812032,1107812095,CA
1107812096,1107820543,US
1107820544,1107853311,ZA
@@ -33537,403 +11155,133 @@
1108025344,1108029439,CA
1108029440,1108033535,US
1108033536,1108041727,CA
-1108041728,1108047295,US
-1108047296,1108047327,MX
-1108047328,1108054015,US
-1108054016,1108054303,CA
-1108054304,1108054311,US
-1108054312,1108054527,CA
-1108054528,1108054543,US
-1108054544,1108054687,CA
-1108054688,1108054695,US
-1108054696,1108054751,CA
-1108054752,1108054767,US
-1108054768,1108055071,CA
-1108055072,1108055103,US
-1108055104,1108055263,CA
-1108055264,1108055279,US
-1108055280,1108055399,CA
-1108055400,1108055407,US
-1108055408,1108055423,CA
-1108055424,1108055439,US
-1108055440,1108055455,CA
-1108055456,1108055471,US
-1108055472,1108055519,CA
-1108055520,1108055551,US
-1108055552,1108055903,CA
-1108055904,1108055919,US
-1108055920,1108055967,CA
-1108055968,1108055983,US
-1108055984,1108056127,PA
-1108056128,1108056191,US
-1108056192,1108056207,CA
-1108056208,1108056215,GB
-1108056216,1108056223,CA
-1108056224,1108056255,US
-1108056256,1108056287,CA
-1108056288,1108056319,CR
-1108056320,1108056407,CA
-1108056408,1108056415,US
-1108056416,1108056579,CA
-1108056580,1108056581,US
-1108056582,1108056671,CA
-1108056672,1108056703,US
-1108056704,1108056727,CA
-1108056728,1108056735,US
-1108056736,1108056783,CA
-1108056784,1108056791,CR
-1108056792,1108056799,GB
-1108056800,1108056935,CA
-1108056936,1108056943,GB
-1108056944,1108057071,CA
-1108057072,1108057079,NL
-1108057080,1108057087,US
-1108057088,1108057135,CA
-1108057136,1108057151,US
-1108057152,1108057215,CA
-1108057216,1108057239,US
-1108057240,1108057287,CA
-1108057288,1108057295,LB
-1108057296,1108057335,CA
-1108057336,1108057343,GB
-1108057344,1108057383,CA
-1108057384,1108057391,US
-1108057392,1108057519,CA
-1108057520,1108057535,US
-1108057536,1108057775,CA
-1108057776,1108057783,US
-1108057784,1108066303,CA
-1108066304,1108492287,US
+1108041728,1108054015,US
+1108054016,1108066303,CA
+1108066304,1108443391,US
+1108443392,1108443647,CA
+1108443648,1108492287,US
1108492288,1108500479,ZA
1108500480,1108525055,US
1108525056,1108541439,CA
-1108541440,1108861679,US
-1108861680,1108861687,LK
-1108861688,1108862271,US
-1108862272,1108862335,LT
-1108862336,1109246537,US
-1109246538,1109246538,CA
-1109246539,1109246557,US
-1109246558,1109246558,CA
-1109246559,1109246583,US
-1109246584,1109246584,CA
-1109246585,1109246585,US
-1109246586,1109246586,CA
-1109246587,1109250860,US
-1109250861,1109250868,PH
-1109250869,1109252455,US
-1109252456,1109252463,AU
-1109252464,1109639199,US
-1109639200,1109639215,IN
-1109639216,1109641663,US
-1109641664,1109641679,JP
-1109641680,1109642367,US
-1109642368,1109642383,IL
-1109642384,1109642415,US
-1109642416,1109642431,IL
-1109642432,1109642583,US
-1109642584,1109642591,DE
-1109642592,1109643303,US
-1109643304,1109643311,DE
-1109643312,1109643519,US
-1109643520,1109643551,CA
-1109643552,1109647231,US
-1109647232,1109647247,AU
-1109647248,1109648319,US
-1109648320,1109648335,JP
-1109648336,1109648927,US
-1109648928,1109648943,AU
-1109648944,1109650639,US
-1109650640,1109650655,AU
-1109650656,1109688319,US
+1108541440,1109688319,US
1109688320,1109696511,CA
-1109696512,1109705727,US
-1109705728,1109705743,CG
-1109705744,1109705759,US
-1109705760,1109705791,CD
-1109705792,1109705823,US
-1109705824,1109705839,CD
-1109705840,1109705855,US
-1109705856,1109705928,CD
+1109696512,1109705928,US
1109705929,1109705929,LB
-1109705930,1109705983,CD
-1109705984,1109707007,US
+1109705930,1109707007,US
1109707008,1109707263,JM
1109707264,1109707519,US
1109707520,1109707775,MW
-1109707776,1109708639,US
-1109708640,1109708671,HT
-1109708672,1109709823,US
+1109707776,1109709823,US
1109709824,1109710847,ZM
-1109710848,1109711175,US
-1109711176,1109711183,HT
-1109711184,1109712767,US
-1109712768,1109712895,A2
-1109712896,1109772223,US
-1109772224,1109772239,HK
-1109772240,1109774175,US
-1109774176,1109774183,CA
-1109774184,1109776575,US
-1109776576,1109776607,CN
-1109776608,1109776615,CA
-1109776616,1109819391,US
-1109819392,1109848831,CA
-1109848832,1109849087,CA
-1109849088,1109852159,CA
-1109852160,1109902415,US
-1109902416,1109902431,CY
-1109902432,1109902511,US
-1109902512,1109902527,CY
-1109902528,1109918463,US
+1109710848,1109819391,US
+1109819392,1109852159,CA
+1109852160,1109918463,US
1109918464,1109918719,GB
1109918720,1109919743,US
1109919744,1109919999,GB
-1109920000,1109923135,US
-1109923136,1109923151,BG
-1109923152,1109923183,US
-1109923184,1109923199,SK
-1109923200,1109923279,US
-1109923280,1109923295,GB
-1109923296,1109923647,US
-1109923648,1109923711,CA
-1109923712,1109925503,US
-1109925504,1109925567,GB
-1109925568,1109927167,US
+1109920000,1109927167,US
1109927168,1109927423,AU
1109927424,1109934591,US
1109934592,1109934847,GB
-1109934848,1109952599,US
-1109952600,1109952607,JP
-1109952608,1109952623,US
-1109952624,1109952631,GB
-1109952632,1109954167,US
-1109954168,1109954175,VE
-1109954176,1109954351,US
-1109954352,1109954367,ES
-1109954368,1110126591,US
+1109934848,1110126591,US
1110126592,1110130687,CA
1110130688,1110310911,US
1110310912,1110376447,CA
-1110376448,1110415929,US
-1110415930,1110415930,US
-1110415931,1110441983,US
+1110376448,1110441983,US
1110441984,1110442239,CA
-1110442240,1110442303,US
-1110442304,1110442367,CA
-1110442368,1110442431,US
-1110442432,1110442719,CA
-1110442720,1110442751,US
-1110442752,1110442863,CA
-1110442864,1110443007,US
-1110443008,1110443295,CA
-1110443296,1110443327,US
-1110443328,1110443551,CA
-1110443552,1110443711,US
-1110443712,1110443719,CA
-1110443720,1110443903,US
-1110443904,1110444031,CA
-1110444032,1110444287,US
+1110442240,1110443535,US
+1110443536,1110443543,CA
+1110443544,1110444287,US
1110444288,1110444799,CA
1110444800,1110445055,US
-1110445056,1110446655,CA
-1110446656,1110446719,IL
-1110446720,1110446847,CA
-1110446848,1110446975,US
-1110446976,1110447039,CA
-1110447040,1110447103,US
-1110447104,1110448383,CA
+1110445056,1110446591,CA
+1110446592,1110447359,US
+1110447360,1110448383,CA
1110448384,1110448639,US
-1110448640,1110449055,CA
-1110449056,1110449151,US
-1110449152,1110449703,CA
-1110449704,1110449719,US
-1110449720,1110449735,CA
-1110449736,1110449751,US
-1110449752,1110449783,CA
-1110449784,1110449791,US
-1110449792,1110449799,CA
-1110449800,1110449807,US
-1110449808,1110449879,CA
-1110449880,1110449895,US
-1110449896,1110449943,CA
-1110449944,1110449967,US
-1110449968,1110449975,CA
-1110449976,1110450031,US
-1110450032,1110450071,CA
-1110450072,1110450175,US
-1110450176,1110451327,CA
-1110451328,1110451455,US
+1110448640,1110448895,CA
+1110448896,1110449151,US
+1110449152,1110449663,CA
+1110449664,1110450431,US
+1110450432,1110450943,CA
+1110450944,1110451455,US
1110451456,1110451711,CA
1110451712,1110451967,US
1110451968,1110453247,CA
1110453248,1110454271,US
1110454272,1110455295,CA
-1110455296,1110458367,US
-1110458368,1110458415,CA
-1110458416,1110458431,US
-1110458432,1110458479,CA
-1110458480,1110458495,US
-1110458496,1110458575,CA
-1110458576,1110458639,US
-1110458640,1110458687,CA
-1110458688,1110458703,US
-1110458704,1110458735,CA
-1110458736,1110458767,US
-1110458768,1110458783,CA
-1110458784,1110458831,US
-1110458832,1110458847,CA
-1110458848,1110458879,US
-1110458880,1110458927,CA
-1110458928,1110458943,US
-1110458944,1110459007,CA
-1110459008,1110459023,US
-1110459024,1110459071,CA
-1110459072,1110459087,US
-1110459088,1110459151,CA
-1110459152,1110459167,US
-1110459168,1110459183,CA
-1110459184,1110459199,US
-1110459200,1110459215,CA
-1110459216,1110459311,US
-1110459312,1110459343,CA
-1110459344,1110459391,US
-1110459392,1110459423,CA
-1110459424,1110459455,US
-1110459456,1110459743,CA
-1110459744,1110459903,US
-1110459904,1110459967,CA
-1110459968,1110460223,US
-1110460224,1110460319,CA
-1110460320,1110460383,US
-1110460384,1110460447,CA
-1110460448,1110460479,US
-1110460480,1110460639,CA
-1110460640,1110460671,US
-1110460672,1110460719,CA
-1110460720,1110460743,US
-1110460744,1110460775,CA
-1110460776,1110460783,US
-1110460784,1110460831,CA
-1110460832,1110460863,US
-1110460864,1110460887,CA
-1110460888,1110460903,US
-1110460904,1110460911,CA
-1110460912,1110460935,US
-1110460936,1110460999,CA
-1110461000,1110461183,US
-1110461184,1110461375,CA
-1110461376,1110461439,US
-1110461440,1110461823,CA
-1110461824,1110462079,US
-1110462080,1110462719,CA
-1110462720,1110462847,US
-1110462848,1110463103,CA
-1110463104,1110463231,US
-1110463232,1110463487,CA
-1110463488,1110463747,US
-1110463748,1110463751,CA
-1110463752,1110463999,US
+1110455296,1110463999,US
1110464000,1110464767,CA
-1110464768,1110464895,US
-1110464896,1110464959,CA
-1110464960,1110465023,US
+1110464768,1110465023,US
1110465024,1110465535,CA
1110465536,1110466047,US
1110466048,1110466303,CA
-1110466304,1110466559,US
-1110466560,1110466567,CA
-1110466568,1110466815,US
-1110466816,1110466847,CA
-1110466848,1110467583,US
-1110467584,1110467711,CA
-1110467712,1110472447,US
+1110466304,1110472447,US
1110472448,1110473727,CA
1110473728,1110473983,US
-1110473984,1110474303,CA
-1110474304,1110474495,US
-1110474496,1110474751,CA
-1110474752,1110540287,US
+1110473984,1110474239,CA
+1110474240,1110540287,US
1110540288,1110573055,CA
-1110573056,1110578431,PR
-1110578432,1110578687,US
-1110578688,1110638591,PR
+1110573056,1110587391,PR
+1110587392,1110587903,US
+1110587904,1110588159,PR
+1110588160,1110588671,US
+1110588672,1110589183,PR
+1110589184,1110589439,US
+1110589440,1110590207,PR
+1110590208,1110590463,US
+1110590464,1110591231,PR
+1110591232,1110591487,US
+1110591488,1110592255,PR
+1110592256,1110592511,US
+1110592512,1110593023,PR
+1110593024,1110593279,US
+1110593280,1110593535,PR
+1110593536,1110593791,US
+1110593792,1110594047,PR
+1110594048,1110594303,US
+1110594304,1110594815,PR
+1110594816,1110595583,US
+1110595584,1110598655,PR
+1110598656,1110598911,US
+1110598912,1110638591,PR
1110638592,1110654463,US
1110654464,1110654719,HT
1110654720,1110663167,US
1110663168,1110675455,CA
1110675456,1110679551,US
-1110679552,1110683423,CA
-1110683424,1110683431,US
-1110683432,1110683647,CA
+1110679552,1110683647,CA
1110683648,1110700031,US
1110700032,1110704127,CA
-1110704128,1110852863,US
-1110852864,1110853119,A2
-1110853120,1110855679,US
+1110704128,1110855679,US
1110855680,1110856703,CN
1110856704,1110857727,IN
1110857728,1110858751,SG
-1110858752,1110863871,US
+1110858752,1110859007,US
+1110859008,1110859263,AU
+1110859264,1110863871,US
1110863872,1110865919,JM
1110865920,1110867455,KY
1110867456,1110867967,JM
-1110867968,1110870815,US
-1110870816,1110870847,HK
-1110870848,1110870919,US
-1110870920,1110870927,JP
-1110870928,1110887423,US
+1110867968,1110887423,US
1110887424,1110887679,IE
1110887680,1110929407,US
1110929408,1110933503,BM
-1110933504,1110940751,US
-1110940752,1110940767,US
-1110940768,1111195647,US
+1110933504,1111195647,US
1111195648,1111212031,CA
1111212032,1111228415,US
1111228416,1111244799,AR
-1111244800,1111888905,US
-1111888906,1111888915,IN
-1111888916,1111900223,US
-1111900224,1111900287,NL
-1111900288,1111901805,US
-1111901806,1111901815,GB
-1111901816,1112357375,US
-1112357376,1112357503,CA
-1112357504,1112360959,US
-1112360960,1112361023,CA
-1112361024,1112432639,US
+1111244800,1112432639,US
1112432640,1112440831,CA
1112440832,1112530943,US
1112530944,1112539135,CA
-1112539136,1112899769,US
-1112899770,1112899770,US
-1112899771,1112900287,US
-1112900288,1112900351,GB
-1112900352,1112900711,US
-1112900712,1112900719,GB
-1112900720,1112900863,US
-1112900864,1112902143,US
-1112902144,1112902655,US
-1112902656,1112902911,US
-1112902912,1112903711,US
-1112903712,1112903719,TR
-1112903720,1112903935,US
-1112903936,1112903999,GB
-1112904000,1112904447,US
-1112904448,1112904511,GB
-1112904512,1112905407,US
-1112905408,1112905471,GB
-1112905472,1112906367,US
-1112906368,1112906375,BR
-1112906376,1112906431,US
-1112906432,1112906439,GB
-1112906440,1112907775,US
+1112539136,1112873215,US
+1112875008,1112875519,US
+1112875776,1112877311,US
+1112877568,1112877823,US
+1112881152,1112907775,US
1112907776,1112907783,CA
-1112907784,1112907919,US
-1112907920,1112907935,EG
-1112907936,1112914175,US
-1112914176,1112914239,GB
-1112914240,1113591807,US
+1112907784,1112928255,US
+1112932096,1113591807,US
1113591808,1113595903,CA
1113595904,1113596415,CL
1113596416,1113596927,GT
@@ -33946,64 +11294,26 @@
1113600000,1113600255,US
1113600256,1113603071,VE
1113603072,1113603327,CL
-1113603328,1113603583,SV
+1113603328,1113603583,GT
1113603584,1113603839,US
1113603840,1113604095,CA
1113604096,1113657343,US
1113657344,1113661439,CA
-1113661440,1113696575,US
-1113696576,1113696639,CA
-1113696640,1113696831,US
-1113696832,1113696895,CA
-1113696896,1113718783,US
+1113661440,1113669631,US
+1113669632,1113670143,CA
+1113670144,1113670911,US
+1113670912,1113671167,CA
+1113671168,1113671423,US
+1113671424,1113677823,CA
+1113677824,1113718783,US
1113718784,1113743359,DO
-1113743360,1113752183,US
-1113752184,1113752184,US
-1113752185,1113752306,US
-1113752307,1113752307,US
-1113752308,1113752332,US
+1113743360,1113752332,US
1113752333,1113752333,AE
-1113752334,1113752434,US
-1113752435,1113752435,US
-1113752436,1113752469,US
-1113752470,1113752470,US
-1113752471,1113764497,US
-1113764498,1113764498,US
-1113764499,1113769531,US
-1113769532,1113769787,US
-1113769788,1113854007,US
-1113854008,1113854015,CA
-1113854016,1113854207,US
+1113752334,1113854207,US
1113854208,1113854463,CA
1113854464,1113854975,US
1113854976,1113855487,CA
-1113855488,1113857087,US
-1113857088,1113857151,CA
-1113857152,1113862247,US
-1113862248,1113862255,MX
-1113862256,1113864735,US
-1113864736,1113864743,BR
-1113864744,1113864767,US
-1113864768,1113864783,VI
-1113864784,1113881871,US
-1113881872,1113881879,GB
-1113881880,1113882351,US
-1113882352,1113882359,CA
-1113882360,1113888599,US
-1113888600,1113888607,CA
-1113888608,1113893783,US
-1113893784,1113893791,CA
-1113893792,1113893807,US
-1113893808,1113893815,CA
-1113893816,1113905791,US
-1113905792,1113905807,CA
-1113905808,1113916831,US
-1113916832,1113916839,GB
-1113916840,1113923839,US
-1113923840,1113923903,BR
-1113923904,1113932815,US
-1113932816,1113932823,CA
-1113932824,1113983999,US
+1113855488,1113983999,US
1113984000,1113984255,NL
1113984256,1113997311,US
1113997312,1114005503,CA
@@ -34011,90 +11321,35 @@
1114054656,1114062847,CA
1114062848,1114095615,US
1114095616,1114103807,CA
-1114103808,1114170095,US
-1114170096,1114170111,CA
-1114170112,1114505215,US
-1114505216,1114507263,CA
-1114507264,1114507295,US
-1114507296,1114507327,CA
-1114507328,1114507391,US
-1114507392,1114507423,CA
-1114507424,1114507431,GB
-1114507432,1114508287,CA
-1114508288,1114508799,US
-1114508800,1114511359,CA
-1114511360,1114511871,US
-1114511872,1114513407,CA
+1114103808,1114505215,US
+1114505216,1114506239,CA
+1114506240,1114506751,US
+1114506752,1114507263,CA
+1114507264,1114511871,US
+1114511872,1114512127,CA
+1114512128,1114513407,US
1114513408,1114515455,SA
1114515456,1114517503,US
-1114517504,1114519551,CA
-1114519552,1114520063,US
+1114517504,1114518015,CA
+1114518016,1114520063,US
1114520064,1114520319,PH
1114520320,1114520575,US
1114520576,1114520831,PH
-1114520832,1114524159,CA
+1114520832,1114524159,US
1114524160,1114524671,ZA
-1114524672,1114533375,CA
+1114524672,1114533375,US
1114533376,1114533887,ZA
1114533888,1114537983,AO
1114537984,1114550271,CA
-1114550272,1114579831,US
-1114579832,1114579832,US
-1114579833,1114628995,US
-1114628996,1114628996,US
-1114628997,1114653951,US
-1114653952,1114653983,MO
-1114653984,1114681343,US
+1114550272,1114681343,US
1114681344,1114685439,CA
1114685440,1114730495,US
1114730496,1114734591,CA
-1114734592,1114875647,US
-1114875648,1114876159,CA
-1114876160,1114876447,US
-1114876448,1114876463,CA
-1114876464,1114876479,AD
-1114876480,1114876511,US
-1114876512,1114876543,CA
-1114876544,1114876575,GB
-1114876576,1114876911,US
-1114876912,1114876927,AD
-1114876928,1114877183,US
+1114734592,1114877183,US
1114877184,1114877439,CY
-1114877440,1114877695,US
-1114877696,1114877759,SK
-1114877760,1114877791,US
-1114877792,1114877807,CA
-1114877808,1114877823,CW
-1114877824,1114877951,US
+1114877440,1114877951,US
1114877952,1114878207,PA
-1114878208,1114878463,US
-1114878464,1114878719,NL
-1114878720,1114878849,US
-1114878850,1114878977,LT
-1114878978,1114880079,US
-1114880080,1114880095,CY
-1114880096,1114880383,US
-1114880384,1114880399,CY
-1114880400,1114880407,GB
-1114880408,1114881279,US
-1114881280,1114881407,CY
-1114881408,1114881471,US
-1114881472,1114881535,CY
-1114881536,1114928863,US
-1114928864,1114928871,GB
-1114928872,1114929071,US
-1114929072,1114929087,RU
-1114929088,1114930175,US
-1114930176,1114930303,GB
-1114930304,1114967311,US
-1114967312,1114967327,GB
-1114967328,1115104511,US
-1115104512,1115104639,CA
-1115104640,1115111935,US
-1115111936,1115112063,PR
-1115112064,1115112079,US
-1115112080,1115112087,ES
-1115112088,1115112575,US
+1114878208,1115112575,US
1115112576,1115112607,IN
1115112608,1115113471,US
1115113472,1115114495,HN
@@ -34111,288 +11366,97 @@
1115127808,1115131903,CA
1115131904,1115135999,US
1115136000,1115144191,CA
-1115144192,1115705343,US
+1115144192,1115693055,US
+1115693056,1115697151,AR
+1115697152,1115705343,US
1115705344,1115709439,CA
-1115709440,1115768351,US
-1115768352,1115768367,CA
-1115768368,1115774799,US
-1115774800,1115774815,A2
-1115774816,1115783167,US
+1115709440,1115783167,US
1115783168,1115791359,CA
1115791360,1115795455,PR
1115795456,1115799551,CA
1115799552,1115815935,US
1115815936,1115947007,CA
1115947008,1116014079,US
-1116014080,1116014335,A2
+1116014080,1116014335,DE
1116014336,1116014591,US
-1116014592,1116014847,A2
+1116014592,1116014847,DE
1116014848,1116015871,US
-1116015872,1116016127,A2
+1116015872,1116016127,DE
1116016128,1116021247,US
1116021248,1116021503,CI
1116021504,1116024063,US
1116024064,1116024127,PG
1116024128,1116027135,US
-1116027136,1116027903,A2
-1116027904,1116158271,US
-1116158272,1116158335,CA
-1116158336,1116158463,US
-1116158464,1116158495,AU
-1116158496,1116158623,US
-1116158624,1116158719,CA
-1116158720,1116159519,US
-1116159520,1116159535,BR
-1116159536,1116168191,US
-1116168192,1116175103,CA
-1116175104,1116175135,JM
-1116175136,1116176383,CA
-1116176384,1116425393,US
-1116425394,1116425394,US
-1116425395,1116538687,US
-1116538688,1116538703,UA
-1116538704,1116897279,US
+1116027136,1116027903,DE
+1116027904,1116168191,US
+1116168192,1116176383,CA
+1116176384,1116897279,US
1116897280,1116905471,CA
1116905472,1117137919,US
1117137920,1117138175,CA
1117138176,1117142271,US
1117142272,1117142527,CA
-1117142528,1117167855,US
-1117167856,1117167871,GB
-1117167872,1117189951,US
-1117189952,1117190015,KR
-1117190016,1117195991,US
-1117195992,1117195999,A2
-1117196000,1117198591,US
+1117142528,1117198591,US
1117198592,1117198847,CA
1117198848,1117274111,US
1117274112,1117282303,CA
-1117282304,1117299615,US
-1117299616,1117299623,GB
-1117299624,1117303103,US
-1117303104,1117303167,CA
-1117303168,1117305671,US
-1117305672,1117305679,GB
-1117305680,1117409343,US
-1117409344,1117409351,GB
-1117409352,1117409783,US
-1117409784,1117409791,GB
-1117409792,1117413375,US
+1117282304,1117413375,US
1117413376,1117415423,CA
1117415424,1117416191,CW
1117416192,1117416447,CA
1117416448,1117416703,US
-1117416704,1117417215,CA
-1117417216,1117417223,US
-1117417224,1117417231,CA
-1117417232,1117417239,US
-1117417240,1117417247,CA
-1117417248,1117417263,US
-1117417264,1117417279,CA
-1117417280,1117417343,US
-1117417344,1117419775,CA
+1117416704,1117419775,CA
1117419776,1117420031,US
1117420032,1117420415,CA
1117420416,1117420447,US
-1117420448,1117421055,CA
-1117421056,1117421311,US
-1117421312,1117421567,CA
-1117421568,1117683711,US
+1117420448,1117421567,CA
+1117421568,1117460223,US
+1117460224,1117460287,GB
+1117460288,1117683711,US
1117683712,1117691903,CA
1117691904,1117724671,US
1117724672,1117728767,CA
-1117728768,1117745151,US
+1117728768,1117744127,US
1117745152,1117749247,CA
-1117749248,1117796575,US
-1117796576,1117796591,CA
-1117796592,1117815295,US
+1117749248,1117815295,US
1117815296,1117815551,CN
-1117815552,1117817919,US
-1117817920,1117817983,CA
-1117817984,1117819631,US
-1117819632,1117819647,AE
-1117819648,1117822463,US
-1117822464,1117822527,CA
-1117822528,1117823231,US
+1117815552,1117823231,US
1117823232,1117823487,CA
1117823488,1117823743,CN
1117823744,1117823999,US
1117824000,1117824511,GR
1117824512,1117829375,US
1117829376,1117829631,GR
-1117829632,1117831359,US
-1117831360,1117831423,A2
-1117831424,1117978623,US
-1117978624,1117979503,CA
-1117979504,1117979519,US
-1117979520,1117982639,CA
-1117982640,1117982655,US
-1117982656,1117982999,CA
-1117983000,1117983007,US
-1117983008,1117983023,CA
-1117983024,1117983039,US
-1117983040,1117983215,CA
-1117983216,1117983223,US
-1117983224,1117985055,CA
-1117985056,1117985079,US
-1117985080,1117985423,CA
-1117985424,1117985447,US
-1117985448,1117985463,CA
-1117985464,1117985471,US
-1117985472,1117986591,CA
-1117986592,1117986607,US
-1117986608,1117986815,CA
+1117829632,1117978623,US
+1117978624,1117986815,CA
1117986816,1117995007,US
1117995008,1117999103,CA
-1117999104,1118027783,US
-1118027784,1118029471,CA
-1118029472,1118029519,US
-1118029520,1118029551,CA
-1118029552,1118029567,US
-1118029568,1118030991,CA
-1118030992,1118030999,US
-1118031000,1118031071,CA
-1118031072,1118031079,US
-1118031080,1118031263,CA
-1118031264,1118031295,US
-1118031296,1118031311,CA
-1118031312,1118031319,US
-1118031320,1118031375,CA
-1118031376,1118031383,CR
-1118031384,1118031431,CA
-1118031432,1118031439,US
-1118031440,1118031759,CA
-1118031760,1118031799,US
-1118031800,1118031871,CA
-1118031872,1118126079,US
-1118126080,1118126719,CA
-1118126720,1118126847,US
-1118126848,1118127231,CA
-1118127232,1118127359,US
-1118127360,1118127615,CA
-1118127616,1118128255,US
-1118128256,1118128319,CA
-1118128320,1118128383,MY
-1118128384,1118128639,CA
-1118128640,1118129279,US
-1118129280,1118129663,CA
-1118129664,1118129695,BR
-1118129696,1118129823,US
-1118129824,1118129855,AU
-1118129856,1118129887,US
-1118129888,1118129919,CA
-1118129920,1118130687,US
-1118130688,1118131583,CA
-1118131584,1118131711,IN
-1118131712,1118132479,CA
+1117999104,1118027775,US
+1118027776,1118031871,CA
+1118031872,1118126335,US
+1118126336,1118126591,CA
+1118126592,1118130687,US
+1118130688,1118131455,CA
+1118131456,1118131967,US
+1118131968,1118132479,CA
1118132480,1118132991,US
-1118132992,1118133375,CA
-1118133376,1118133503,US
-1118133504,1118133631,CA
-1118133632,1118133759,US
-1118133760,1118133887,CA
-1118133888,1118134815,US
-1118134816,1118134879,CA
-1118134880,1118134911,US
-1118134912,1118134975,CA
-1118134976,1118135007,US
-1118135008,1118135039,IN
-1118135040,1118135567,US
-1118135568,1118135583,CA
-1118135584,1118135615,US
-1118135616,1118135631,TZ
-1118135632,1118135807,US
-1118135808,1118136191,CA
-1118136192,1118136831,US
-1118136832,1118136863,IN
-1118136864,1118136927,US
-1118136928,1118136959,CA
-1118136960,1118137119,US
-1118137120,1118137151,IL
-1118137152,1118137215,US
-1118137216,1118137247,GB
-1118137248,1118138559,US
-1118138560,1118138591,AU
-1118138592,1118138623,FR
-1118138624,1118138879,US
+1118132992,1118133247,CA
+1118133248,1118135807,US
+1118135808,1118136063,CA
+1118136064,1118138879,US
1118138880,1118139135,CA
1118139136,1118139903,US
1118139904,1118140415,CA
-1118140416,1118140831,US
-1118140832,1118140895,VE
-1118140896,1118141183,US
+1118140416,1118141183,US
1118141184,1118141439,CA
1118141440,1118141695,US
1118141696,1118141951,CA
-1118141952,1118141967,CN
-1118141968,1118142063,US
-1118142064,1118142079,IN
-1118142080,1118151423,US
-1118151424,1118151431,ES
-1118151432,1118151463,US
-1118151464,1118151471,CR
-1118151472,1118151631,US
-1118151632,1118151647,MX
-1118151648,1118152239,US
-1118152240,1118152255,AW
-1118152256,1118152271,PR
-1118152272,1118152287,US
-1118152288,1118152303,BR
-1118152304,1118152319,FR
-1118152320,1118152415,US
-1118152416,1118152431,PR
-1118152432,1118153071,US
-1118153072,1118153087,UY
-1118153088,1118153151,US
-1118153152,1118153167,AR
-1118153168,1118153543,US
-1118153544,1118153547,BR
-1118153548,1118153551,US
-1118153552,1118153567,DE
-1118153568,1118153679,US
-1118153680,1118153695,VE
-1118153696,1118153871,US
-1118153872,1118153887,CO
-1118153888,1118153919,US
-1118153920,1118153935,PA
-1118153936,1118153951,TT
-1118153952,1118154063,US
-1118154064,1118154079,MX
-1118154080,1118154207,US
-1118154208,1118154223,CL
-1118154224,1118155999,US
-1118156000,1118156015,GT
-1118156016,1118158079,US
-1118158080,1118158087,PA
-1118158088,1118158319,US
-1118158320,1118158323,SV
-1118158324,1118158331,US
-1118158332,1118158335,SV
-1118158336,1118158847,US
+1118141952,1118158847,US
1118158848,1118167039,CA
1118167040,1118474239,US
-1118474240,1118474535,CA
-1118474536,1118474543,US
-1118474544,1118474591,CA
-1118474592,1118474599,US
-1118474600,1118474607,CA
-1118474608,1118474615,US
-1118474616,1118474863,CA
-1118474864,1118474871,US
-1118474872,1118474879,CA
-1118474880,1118474911,US
-1118474912,1118475087,CA
-1118475088,1118475095,US
-1118475096,1118475215,CA
-1118475216,1118475223,US
-1118475224,1118475231,CA
-1118475232,1118475247,US
-1118475248,1118476807,CA
-1118476808,1118476831,US
-1118476832,1118476887,CA
-1118476888,1118476895,US
-1118476896,1118478335,CA
-1118478336,1118511103,US
+1118474240,1118478335,CA
+1118478336,1118483455,US
+1118486528,1118515199,US
1118515200,1118519295,CA
1118519296,1118527487,US
1118527488,1118531583,CA
@@ -34400,799 +11464,206 @@
1118535680,1118539775,CA
1118539776,1118543871,US
1118543872,1118547967,CA
-1118547968,1118548671,US
-1118548672,1118548679,CA
-1118548680,1118549575,US
-1118549576,1118549583,IN
-1118549584,1118564607,US
-1118564608,1118564639,NO
-1118564640,1118564655,US
-1118564656,1118564671,IN
-1118564672,1118564895,US
-1118564896,1118564927,AU
-1118564928,1118565375,US
-1118565376,1118565407,EG
-1118565408,1118572303,US
-1118572304,1118572319,US
-1118572320,1118572351,US
-1118572352,1118572543,US
-1118572544,1118789783,US
-1118789784,1118789791,BB
-1118789792,1118790655,US
+1118547968,1118790655,US
1118790656,1118790911,IL
-1118790912,1118791999,US
-1118792000,1118792031,PR
-1118792032,1118792063,DO
-1118792064,1118792127,US
-1118792128,1118792143,AU
-1118792144,1118793407,US
-1118793408,1118793423,BB
-1118793424,1118793471,US
+1118790912,1118793471,US
1118793472,1118793727,CO
-1118793728,1118793823,US
-1118793824,1118793839,CA
-1118793840,1118793871,US
-1118793872,1118793887,DO
-1118793888,1118793967,US
-1118793968,1118793983,HT
-1118793984,1118794127,US
-1118794128,1118794143,NO
-1118794144,1118795791,US
-1118795792,1118795807,AG
-1118795808,1118795895,US
-1118795896,1118795903,CY
-1118795904,1118796543,US
+1118793728,1118796543,US
1118796544,1118796799,GB
-1118796800,1118797063,US
-1118797064,1118797071,CR
-1118797072,1118961663,US
-1118961664,1118962831,A2
-1118962832,1118962839,SA
-1118962840,1118962847,NG
-1118962848,1118962943,A2
+1118796800,1118824447,US
+1118826496,1118962943,US
1118962944,1118963199,AS
-1118963200,1118963455,A2
-1118963456,1118963463,TZ
-1118963464,1118963471,A2
-1118963472,1118963479,NG
-1118963480,1118963487,GB
-1118963488,1118963495,AO
-1118963496,1118963583,A2
-1118963584,1118963647,KE
-1118963648,1118963975,A2
-1118963976,1118963991,LB
-1118963992,1118964991,A2
-1118964992,1118965247,CW
+1118963200,1118965247,US
1118965248,1118965503,AS
-1118965504,1118965839,A2
-1118965840,1118965847,EC
-1118965848,1118965911,A2
-1118965912,1118965919,MA
-1118965920,1118965999,A2
-1118966000,1118966007,NG
-1118966008,1118966015,A2
+1118965504,1118966015,US
1118966016,1118966271,BR
-1118966272,1118966311,SV
-1118966312,1118966319,A2
-1118966320,1118966327,SV
-1118966328,1118966335,SR
-1118966336,1118966351,SV
-1118966352,1118966367,A2
-1118966368,1118966399,SV
-1118966400,1118966407,A2
-1118966408,1118966415,SV
-1118966416,1118966423,NI
-1118966424,1118966455,A2
-1118966456,1118966463,NI
-1118966464,1118966487,A2
-1118966488,1118966495,NI
-1118966496,1118966503,A2
-1118966504,1118966511,NI
-1118966512,1118966519,A2
-1118966520,1118966527,NI
-1118966528,1118966655,A2
-1118966656,1118966687,SV
-1118966688,1118966695,NI
-1118966696,1118966703,A2
-1118966704,1118966711,NI
-1118966712,1118966719,A2
-1118966720,1118966783,EC
-1118966784,1118966791,LB
-1118966792,1118966807,A2
-1118966808,1118966815,LB
-1118966816,1118966847,A2
-1118966848,1118966911,PY
-1118966912,1118966959,A2
-1118966960,1118966975,SA
-1118966976,1118966991,A2
-1118966992,1118966999,SA
-1118967000,1118967015,LB
-1118967016,1118967063,A2
-1118967064,1118967135,SA
-1118967136,1118967159,LB
-1118967160,1118967167,A2
-1118967168,1118967199,SA
-1118967200,1118967207,A2
-1118967208,1118967231,LB
-1118967232,1118967255,A2
-1118967256,1118967271,LB
-1118967272,1118967279,A2
-1118967280,1118967287,LB
-1118967288,1118967295,A2
-1118967296,1118967327,LB
-1118967328,1118967335,A2
-1118967336,1118967343,LB
-1118967344,1118967359,A2
-1118967360,1118967367,LB
-1118967368,1118967391,A2
-1118967392,1118967399,MA
-1118967400,1118967423,LB
-1118967424,1118967487,A2
-1118967488,1118967519,SA
-1118967520,1118967535,A2
-1118967536,1118967543,LB
-1118967544,1118967551,SA
-1118967552,1118967567,LB
-1118967568,1118967583,A2
-1118967584,1118967615,SA
-1118967616,1118967631,A2
-1118967632,1118967647,SA
-1118967648,1118967663,LB
-1118967664,1118967679,A2
-1118967680,1118967743,LB
-1118967744,1118967775,SA
-1118967776,1118967799,A2
-1118967800,1118967807,RW
-1118967808,1118967839,A2
-1118967840,1118967847,LB
-1118967848,1118967903,A2
-1118967904,1118968015,SA
-1118968016,1118968039,A2
-1118968040,1118968047,LB
-1118968048,1118968063,A2
-1118968064,1118968095,SA
-1118968096,1118968111,A2
-1118968112,1118968127,LB
-1118968128,1118968159,SA
-1118968160,1118968175,LB
-1118968176,1118968183,AE
-1118968184,1118968191,A2
-1118968192,1118968207,SA
-1118968208,1118968223,IQ
-1118968224,1118968255,A2
-1118968256,1118968287,IQ
-1118968288,1118968295,AE
-1118968296,1118968303,A2
-1118968304,1118968319,AE
-1118968320,1118968575,SR
-1118968576,1118968831,A2
-1118968832,1118968895,SA
-1118968896,1118968927,A2
-1118968928,1118968975,SA
-1118968976,1118968991,A2
-1118968992,1118969007,SA
-1118969008,1118969023,A2
-1118969024,1118969055,SA
-1118969056,1118969087,A2
-1118969088,1118969215,SA
-1118969216,1118969279,A2
-1118969280,1118969343,SA
-1118969344,1118969367,A2
-1118969368,1118969375,NI
-1118969376,1118969599,A2
-1118969600,1118969727,GY
-1118969728,1118969855,A2
+1118966272,1118969855,US
1118969856,1118970111,LB
-1118970112,1118970119,KE
-1118970120,1118970239,A2
-1118970240,1118970367,NG
+1118970112,1118970367,US
1118970368,1118970623,GB
-1118970624,1118970751,A2
-1118970752,1118970879,GY
-1118970880,1118971520,SR
-1118971521,1118971647,A2
+1118970624,1118971647,US
1118971648,1118971903,GY
-1118971904,1118972159,A2
+1118971904,1118972159,US
1118972160,1118972415,VE
1118972416,1118972671,GB
-1118972672,1118972831,A2
-1118972832,1118972863,SA
-1118972864,1118972927,A2
-1118972928,1118972943,NI
-1118972944,1118972959,VE
-1118972960,1118972967,A2
-1118972968,1118972975,NI
-1118972976,1118972983,A2
-1118972984,1118972999,NI
-1118973000,1118973047,A2
-1118973048,1118973055,NI
-1118973056,1118973063,A2
-1118973064,1118973071,EC
-1118973072,1118973079,A2
-1118973080,1118973111,VE
-1118973112,1118973119,A2
-1118973120,1118973151,NI
-1118973152,1118973159,A2
-1118973160,1118973167,NI
-1118973168,1118973183,A2
+1118972672,1118973183,US
1118973184,1118973439,VE
1118973440,1118973695,US
1118973696,1118973951,NG
-1118973952,1118974015,GY
-1118974016,1118974047,A2
-1118974048,1118974055,SV
-1118974056,1118974095,A2
-1118974096,1118974103,EC
-1118974104,1118974111,SV
-1118974112,1118974119,NI
-1118974120,1118974135,A2
-1118974136,1118974207,EC
-1118974208,1118974215,US
-1118974216,1118975231,A2
-1118975232,1118975487,US
+1118973952,1118975487,US
1118975488,1118975743,KE
-1118975744,1118975999,A2
+1118975744,1118975999,US
1118976000,1118976255,GB
-1118976256,1118976295,A2
-1118976296,1118976311,SA
-1118976312,1118976343,A2
-1118976344,1118976359,LB
-1118976360,1118976367,A2
-1118976368,1118976375,SA
-1118976376,1118976383,LB
-1118976384,1118976399,A2
-1118976400,1118976423,SA
-1118976424,1118976599,A2
-1118976600,1118976607,NG
-1118976608,1118976615,LB
-1118976616,1118976687,A2
-1118976688,1118976703,NG
-1118976704,1118976727,A2
-1118976728,1118976735,NG
-1118976736,1118976767,A2
-1118976768,1118976791,NG
-1118976792,1118976831,A2
-1118976832,1118976863,NG
-1118976864,1118976895,A2
-1118976896,1118977023,NG
-1118977024,1118977055,A2
-1118977056,1118977087,SA
-1118977088,1118977311,A2
-1118977312,1118977343,NG
-1118977344,1118977351,KE
-1118977352,1118977535,A2
-1118977536,1118977551,US
-1118977552,1118977575,A2
-1118977576,1118977583,SA
-1118977584,1118977631,A2
-1118977632,1118977639,US
-1118977640,1118977839,A2
-1118977840,1118977847,LB
-1118977848,1118977879,A2
-1118977880,1118977887,NI
-1118977888,1118977903,A2
-1118977904,1118977919,US
-1118977920,1118978047,A2
-1118978048,1118978255,SA
-1118978256,1118978287,A2
-1118978288,1118978439,SA
-1118978440,1118978447,A2
-1118978448,1118978463,LB
-1118978464,1118978479,A2
-1118978480,1118978495,SA
-1118978496,1118979071,A2
-1118979072,1118979087,SA
-1118979088,1118979199,A2
-1118979200,1118979239,SA
-1118979240,1118979263,A2
-1118979264,1118979295,SA
-1118979296,1118979327,LB
-1118979328,1118979343,SA
-1118979344,1118979455,A2
-1118979456,1118979479,LB
-1118979480,1118979495,SA
-1118979496,1118979503,LB
-1118979504,1118979535,SA
-1118979536,1118979575,LB
-1118979576,1118979583,SA
-1118979584,1118979711,A2
-1118979712,1118979775,LB
-1118979776,1118979839,A2
-1118979840,1118979855,NI
-1118979856,1118979895,A2
-1118979896,1118979903,NI
-1118979904,1118980607,A2
+1118976256,1118980607,US
1118980608,1118980863,TZ
1118980864,1118981119,CW
-1118981120,1118981631,A2
-1118981632,1118981687,EC
-1118981688,1118981695,A2
-1118981696,1118981735,SV
-1118981736,1118981743,EC
-1118981744,1118981751,SV
-1118981752,1118981759,NG
-1118981760,1118981783,A2
-1118981784,1118981791,NI
-1118981792,1118981823,NG
-1118981824,1118981831,EC
-1118981832,1118981855,NI
-1118981856,1118981863,EC
-1118981864,1118981871,NI
-1118981872,1118981879,A2
-1118981880,1118981887,NI
-1118981888,1118982175,A2
-1118982176,1118982183,NG
-1118982184,1118982191,A2
-1118982192,1118982199,KE
-1118982200,1118982207,US
-1118982208,1118982215,A2
-1118982216,1118982279,NG
-1118982280,1118982287,A2
-1118982288,1118982295,NG
-1118982296,1118982303,A2
-1118982304,1118982311,KE
-1118982312,1118982327,NG
-1118982328,1118982335,A2
-1118982336,1118982367,NG
-1118982368,1118982383,A2
-1118982384,1118982391,NG
-1118982392,1118982399,A2
-1118982400,1118982415,NG
-1118982416,1118982431,SV
-1118982432,1118982447,NG
-1118982448,1118982463,US
-1118982464,1118982479,NG
-1118982480,1118982487,A2
-1118982488,1118982551,NG
-1118982552,1118982559,US
-1118982560,1118982567,NG
-1118982568,1118982575,US
-1118982576,1118982583,NG
-1118982584,1118982591,CM
-1118982592,1118982599,NG
-1118982600,1118982607,A2
-1118982608,1118982647,NG
-1118982648,1118982783,A2
-1118982784,1118982911,NG
-1118982912,1118982927,A2
-1118982928,1118982935,NG
-1118982936,1118983079,A2
-1118983080,1118983087,NG
-1118983088,1118983199,A2
-1118983200,1118983279,SA
-1118983280,1118983423,A2
+1118981120,1118983423,US
1118983424,1118983679,NI
-1118983680,1118983743,TZ
-1118983744,1118983759,VE
-1118983760,1118983807,A2
-1118983808,1118983839,NG
-1118983840,1118983871,A2
-1118983872,1118983879,TZ
-1118983880,1118983919,US
-1118983920,1118984447,A2
+1118983680,1118984447,US
1118984448,1118984703,SA
-1118984704,1118984775,TZ
-1118984776,1118984783,IQ
-1118984784,1118984791,A2
-1118984792,1118984799,NG
-1118984800,1118984807,A2
-1118984808,1118984815,LB
-1118984816,1118984839,A2
-1118984840,1118984847,SA
-1118984848,1118984855,A2
-1118984856,1118984863,IQ
-1118984864,1118984887,TZ
-1118984888,1118984895,LB
-1118984896,1118984927,SA
-1118984928,1118984935,A2
-1118984936,1118984943,SA
-1118984944,1118984951,LB
-1118984952,1118984959,SA
-1118984960,1118985983,A2
-1118985984,1118986111,NG
-1118986112,1118986239,A2
+1118984704,1118986239,US
1118986240,1118987007,GB
-1118987008,1118987263,US
-1118987264,1118988543,A2
-1118988544,1118988575,NG
-1118988576,1118988615,A2
-1118988616,1118988623,GB
-1118988624,1118988735,A2
-1118988736,1118988751,GB
-1118988752,1118988799,A2
+1118987008,1118988799,US
1118988800,1118989055,VE
-1118989056,1118989183,KE
-1118989184,1118989311,GB
+1118989056,1118989311,US
1118989312,1118989823,KE
-1118989824,1118989951,A2
-1118989952,1118990079,FR
-1118990080,1118990271,A2
-1118990272,1118990303,US
-1118990304,1118990719,A2
-1118990720,1118990727,KE
-1118990728,1118992639,A2
-1118992640,1118992655,KE
-1118992656,1118992735,A2
-1118992736,1118992743,SA
-1118992744,1118992767,A2
-1118992768,1118992839,US
-1118992840,1118993151,A2
+1118989824,1118993151,US
1118993152,1118993407,GY
-1118993408,1118994175,A2
+1118993408,1118994175,US
1118994176,1118994431,LR
1118994432,1119109119,US
1119109120,1119111167,CA
-1119113216,1119144927,US
-1119144928,1119144935,AU
-1119144936,1119150079,US
-1119154176,1119166863,US
-1119166864,1119166871,HT
-1119166872,1119167079,US
-1119167080,1119167087,CA
-1119167088,1119167359,US
-1119167360,1119167367,CA
-1119167368,1119167407,US
-1119167408,1119167415,CA
-1119167416,1119168023,US
-1119168024,1119168031,CA
-1119168032,1119168351,US
-1119168352,1119168359,AF
-1119168360,1119168975,US
-1119168976,1119168983,CA
-1119168984,1119169359,US
-1119169360,1119169367,HT
-1119169368,1119171383,US
-1119171384,1119171391,CA
-1119171392,1119172199,US
-1119172200,1119172207,CA
-1119172208,1119172895,US
-1119172896,1119172903,MX
-1119172904,1119172911,US
-1119172912,1119172991,MX
-1119172992,1119173007,US
-1119173008,1119173095,MX
-1119173096,1119173119,US
-1119173120,1119173143,MX
-1119173144,1119173151,US
-1119173152,1119173207,MX
-1119173208,1119173215,US
-1119173216,1119173223,MX
-1119173224,1119173231,US
-1119173232,1119173263,MX
-1119173264,1119173279,US
+1119113216,1119173135,US
+1119173136,1119173143,MX
+1119173144,1119173167,US
+1119173168,1119173175,MX
+1119173176,1119173183,US
+1119173184,1119173199,MX
+1119173200,1119173247,US
+1119173248,1119173255,MX
+1119173256,1119173279,US
1119173280,1119173295,MX
-1119173296,1119173311,US
-1119173312,1119173343,MX
-1119173344,1119173351,US
-1119173352,1119173367,MX
-1119173368,1119173375,US
-1119173376,1119173399,MX
-1119173400,1119173407,US
-1119173408,1119173471,MX
-1119173472,1119173495,US
-1119173496,1119173527,MX
-1119173528,1119173535,US
-1119173536,1119173543,MX
-1119173544,1119173551,US
-1119173552,1119173575,MX
-1119173576,1119173591,US
-1119173592,1119173655,MX
-1119173656,1119173671,US
-1119173672,1119173679,MX
-1119173680,1119173703,US
-1119173704,1119173727,MX
-1119173728,1119173735,US
-1119173736,1119173751,MX
-1119173752,1119173767,US
-1119173768,1119173775,MX
-1119173776,1119173799,US
-1119173800,1119173815,MX
-1119173816,1119173831,US
-1119173832,1119173847,MX
-1119173848,1119173863,US
-1119173864,1119173871,MX
-1119173872,1119173935,US
-1119173936,1119173983,MX
-1119173984,1119173999,US
-1119174000,1119174007,MX
-1119174008,1119174023,US
-1119174024,1119174031,GT
-1119174032,1119174039,MX
-1119174040,1119174047,US
-1119174048,1119174119,MX
-1119174120,1119174127,US
-1119174128,1119174199,MX
-1119174200,1119174215,US
-1119174216,1119174247,GT
-1119174248,1119174287,US
-1119174288,1119174319,MX
-1119174320,1119174343,US
-1119174344,1119174351,GT
-1119174352,1119174359,MX
-1119174360,1119174399,US
-1119174400,1119174407,GT
+1119173296,1119173599,US
+1119173600,1119173607,MX
+1119173608,1119174063,US
+1119174064,1119174071,MX
+1119174072,1119174135,US
+1119174136,1119174143,MX
+1119174144,1119174183,US
+1119174184,1119174191,MX
+1119174192,1119174223,US
+1119174224,1119174231,GT
+1119174232,1119174407,US
1119174408,1119174415,MX
-1119174416,1119174423,US
-1119174424,1119174471,MX
-1119174472,1119174479,US
-1119174480,1119174511,MX
-1119174512,1119174535,US
-1119174536,1119174543,MX
-1119174544,1119211519,US
+1119174416,1119211519,US
1119211520,1119215615,CA
1119215616,1119289343,US
1119289344,1119354879,CA
1119354880,1119428607,US
-1119428608,1119432703,VI
+1119428608,1119431663,VI
+1119431664,1119432191,US
+1119432192,1119432703,VI
1119432704,1119436799,CA
1119436800,1119440895,US
1119440896,1119444991,CA
1119444992,1119469567,US
1119469568,1119477759,CA
-1119477760,1119486623,US
-1119486624,1119486631,AU
-1119486632,1119490495,US
-1119490496,1119490527,GI
-1119490528,1119502335,US
+1119477760,1119502335,US
1119502336,1119510527,CA
1119510528,1119558143,US
1119558144,1119558655,PR
-1119558656,1119571967,US
+1119558656,1119568383,US
+1119568384,1119568639,GB
+1119568640,1119568767,US
+1119568768,1119568895,GB
+1119568896,1119570175,US
+1119570176,1119570303,GB
+1119570304,1119571967,US
1119571968,1119576063,CA
1119576064,1119580159,US
1119580160,1119584255,CA
-1119584256,1120149503,US
-1120149504,1120149599,CA
-1120149600,1120149631,US
-1120149632,1120150031,CA
-1120150032,1120150039,TW
-1120150040,1120151695,CA
-1120151696,1120151711,TW
-1120151712,1120152159,CA
-1120152160,1120152191,US
-1120152192,1120153599,CA
-1120153600,1120272383,US
-1120272384,1120276991,CA
-1120276992,1120277503,US
-1120277504,1120280575,CA
-1120280576,1120280831,US
-1120280832,1120280855,CA
-1120280856,1120280863,US
-1120280864,1120281087,CA
-1120281088,1120281095,PG
-1120281096,1120281103,US
-1120281104,1120281111,CA
-1120281112,1120281119,US
-1120281120,1120281135,ZA
-1120281136,1120281151,US
-1120281152,1120281375,CA
-1120281376,1120281383,AR
-1120281384,1120281391,US
-1120281392,1120281599,CA
-1120281600,1120282367,US
+1119584256,1119612927,US
+1119617024,1120149503,US
+1120149504,1120153599,CA
+1120153600,1120274943,US
+1120274944,1120274991,CA
+1120274992,1120282367,US
1120282368,1120282623,SY
1120282624,1120282879,US
1120282880,1120283135,SY
-1120283136,1120283391,US
-1120283392,1120283647,CA
+1120283136,1120283647,US
1120283648,1120284671,EC
1120284672,1120286719,CA
-1120286720,1120289023,US
-1120289024,1120290303,CA
-1120290304,1120290559,US
-1120290560,1120290751,CA
-1120290752,1120290783,US
-1120290784,1120293119,CA
-1120293120,1120293631,US
-1120293632,1120299007,CA
+1120286720,1120294911,US
+1120294912,1120297215,CA
+1120297216,1120299007,US
1120299008,1120299263,PK
1120299264,1120299519,US
1120299520,1120300799,PK
-1120300800,1120301055,US
-1120301056,1120304895,CA
-1120304896,1120305151,US
-1120305152,1120306687,CA
+1120300800,1120306687,US
1120306688,1120306943,PH
1120306944,1120307199,US
1120307200,1120307967,EC
1120307968,1120308223,PH
-1120308224,1120309247,CA
-1120309248,1120309503,US
-1120309504,1120309759,CA
-1120309760,1120310015,US
+1120308224,1120310015,US
1120310016,1120310783,PH
-1120310784,1120311807,CA
-1120311808,1120312063,US
-1120312064,1120312447,PH
-1120312448,1120312575,CA
+1120310784,1120312063,US
+1120312064,1120312319,PH
+1120312320,1120312575,US
1120312576,1120312831,PH
-1120312832,1120313343,CA
-1120313344,1120313599,US
-1120313600,1120315135,CA
-1120315136,1120315391,US
-1120315392,1120321535,CA
-1120321536,1120346111,US
+1120312832,1120346111,US
1120346112,1120350207,CA
1120350208,1120370687,US
1120370688,1120371199,CA
-1120371200,1120371455,US
-1120371456,1120371511,CA
-1120371512,1120371551,US
-1120371552,1120371647,CA
-1120371648,1120371651,US
-1120371652,1120371711,CA
-1120371712,1120372223,US
+1120371200,1120372223,US
1120372224,1120372479,CA
1120372480,1120372735,US
-1120372736,1120373423,CA
-1120373424,1120373503,US
-1120373504,1120374047,CA
-1120374048,1120374063,US
-1120374064,1120374279,CA
-1120374280,1120374303,US
-1120374304,1120374399,CA
-1120374400,1120374415,US
-1120374416,1120374479,CA
-1120374480,1120374487,US
-1120374488,1120374511,CA
-1120374512,1120374527,US
-1120374528,1120375243,CA
-1120375244,1120375263,US
-1120375264,1120375423,CA
-1120375424,1120375551,US
-1120375552,1120376111,CA
-1120376112,1120376127,US
-1120376128,1120376223,CA
-1120376224,1120376239,US
-1120376240,1120376255,MX
-1120376256,1120376287,CA
-1120376288,1120376303,US
-1120376304,1120376327,CA
-1120376328,1120376383,US
-1120376384,1120376447,CA
-1120376448,1120376455,US
-1120376456,1120376494,CA
+1120372736,1120373247,CA
+1120373248,1120373503,US
+1120373504,1120374015,CA
+1120374016,1120374527,US
+1120374528,1120375039,CA
+1120375040,1120375551,US
+1120375552,1120376063,CA
+1120376064,1120376303,US
+1120376304,1120376319,CA
+1120376320,1120376479,US
+1120376480,1120376494,CA
1120376495,1120376559,US
-1120376560,1120376647,CA
-1120376648,1120376671,US
-1120376672,1120376679,MX
-1120376680,1120376687,CA
-1120376688,1120376695,US
+1120376560,1120376575,CA
+1120376576,1120376695,US
1120376696,1120376703,CA
-1120376704,1120376767,US
-1120376768,1120376815,CA
-1120376816,1120376831,US
-1120376832,1120377167,CA
-1120377168,1120377199,US
-1120377200,1120377215,CA
-1120377216,1120377247,US
-1120377248,1120377791,CA
-1120377792,1120377823,US
-1120377824,1120378367,CA
+1120376704,1120376831,US
+1120376832,1120377087,CA
+1120377088,1120377343,US
+1120377344,1120377599,CA
+1120377600,1120377855,US
+1120377856,1120378367,CA
1120378368,1120378623,US
-1120378624,1120378911,CA
-1120378912,1120378943,US
-1120378944,1120379039,CA
-1120379040,1120379071,PA
-1120379072,1120379167,CA
-1120379168,1120379183,US
-1120379184,1120380027,CA
-1120380028,1120380031,US
-1120380032,1120380095,CA
-1120380096,1120380127,US
-1120380128,1120380131,CA
-1120380132,1120380223,US
-1120380224,1120380239,CA
-1120380240,1120380263,US
-1120380264,1120380271,CA
-1120380272,1120380415,US
-1120380416,1120380447,CA
-1120380448,1120380453,US
+1120378624,1120378879,CA
+1120378880,1120379199,US
+1120379200,1120379263,CA
+1120379264,1120379295,US
+1120379296,1120379311,CA
+1120379312,1120379391,US
+1120379392,1120379903,CA
+1120379904,1120380453,US
1120380454,1120380454,CA
-1120380455,1120380479,US
-1120380480,1120380639,CA
-1120380640,1120380655,US
-1120380656,1120380659,CA
-1120380660,1120380663,US
-1120380664,1120381055,CA
-1120381056,1120381071,US
-1120381072,1120381087,PA
-1120381088,1120381103,CA
-1120381104,1120381119,US
-1120381120,1120382231,CA
-1120382232,1120382239,US
-1120382240,1120382271,CA
-1120382272,1120382367,US
-1120382368,1120382431,CA
-1120382432,1120382439,US
+1120380455,1120380671,US
+1120380672,1120380991,CA
+1120380992,1120381087,US
+1120381088,1120381095,CA
+1120381096,1120381183,US
+1120381184,1120382207,CA
+1120382208,1120382439,US
1120382440,1120382447,CA
1120382448,1120382463,US
1120382464,1120382975,CA
-1120382976,1120383263,US
-1120383264,1120383327,CA
-1120383328,1120383343,US
-1120383344,1120383367,CA
-1120383368,1120383423,US
-1120383424,1120383439,CA
-1120383440,1120383775,US
-1120383776,1120383951,CA
-1120383952,1120385135,US
-1120385136,1120385143,CA
-1120385144,1120385151,US
-1120385152,1120385183,GB
-1120385184,1120385535,CA
+1120382976,1120385279,US
+1120385280,1120385535,CA
1120385536,1120386559,US
1120386560,1120387071,CA
-1120387072,1120485503,US
-1120485504,1120485631,IN
-1120485632,1120486079,US
-1120486080,1120486143,IN
-1120486144,1120486399,US
-1120486400,1120486911,CA
-1120486912,1120487103,US
-1120487104,1120487167,CA
-1120487168,1120487199,US
-1120487200,1120487231,CA
-1120487232,1120487359,US
-1120487360,1120487391,CA
-1120487392,1120487423,US
+1120387072,1120486655,US
+1120486656,1120486911,CA
+1120486912,1120487423,US
1120487424,1120487679,CA
-1120487680,1120488191,US
-1120488192,1120488703,CA
-1120488704,1120488767,US
-1120488768,1120488799,VE
-1120488800,1120488831,IL
-1120488832,1120488863,CA
-1120488864,1120488895,US
-1120488896,1120488927,KN
-1120488928,1120489215,US
-1120489216,1120489343,CA
-1120489344,1120489471,US
+1120487680,1120489471,US
1120489472,1120489727,CA
-1120489728,1120489983,US
-1120489984,1120490239,CA
-1120490240,1120490751,US
-1120490752,1120490783,GB
-1120490784,1120491263,US
-1120491264,1120491775,CA
-1120491776,1120492415,US
-1120492416,1120492543,FR
+1120489728,1120491519,US
+1120491520,1120491775,CA
+1120491776,1120492543,US
1120492544,1120493055,CA
-1120493056,1120493087,IN
-1120493088,1120493183,US
-1120493184,1120493215,CA
-1120493216,1120493311,US
-1120493312,1120493567,CA
-1120493568,1120493823,US
+1120493056,1120493823,US
1120493824,1120494079,CA
1120494080,1120494335,US
1120494336,1120494591,CA
-1120494592,1120494975,US
-1120494976,1120495039,CA
-1120495040,1120495743,US
-1120495744,1120495871,SG
-1120495872,1120496255,US
-1120496256,1120496287,CA
-1120496288,1120496385,US
-1120496386,1120496638,CA
-1120496639,1120496639,US
-1120496640,1120497151,CA
-1120497152,1120497311,US
-1120497312,1120497343,IN
-1120497344,1120497375,US
-1120497376,1120497663,CA
-1120497664,1120497791,US
-1120497792,1120497919,AU
-1120497920,1120497983,US
-1120497984,1120498013,BE
-1120498014,1120498143,US
-1120498144,1120498303,CA
-1120498304,1120498943,US
+1120494592,1120496639,US
+1120496640,1120496895,CA
+1120496896,1120497407,US
+1120497408,1120497663,CA
+1120497664,1120498943,US
1120498944,1120499199,CA
-1120499200,1120499583,US
-1120499584,1120499615,FR
-1120499616,1120499647,IN
-1120499648,1120501247,US
+1120499200,1120501247,US
1120501248,1120501503,CA
1120501504,1120509951,US
1120509952,1120515583,SV
@@ -35206,20 +11677,9 @@
1120518144,1120534527,CA
1120534528,1120641023,US
1120641024,1120657407,CA
-1120657408,1120731391,US
-1120731392,1120731647,A2
-1120731648,1120736207,US
-1120736208,1120736223,PY
-1120736224,1120736991,US
-1120736992,1120737007,KN
-1120737008,1120737023,US
+1120657408,1120737023,US
1120737024,1120737279,BS
-1120737280,1120739951,US
-1120739952,1120739983,MX
-1120739984,1120739991,US
-1120739992,1120740079,MX
-1120740080,1120740095,US
-1120740096,1120740351,MX
+1120737280,1120740351,US
1120740352,1120741375,TT
1120741376,1120741631,US
1120741632,1120741887,MX
@@ -35227,401 +11687,102 @@
1120743424,1120743679,KN
1120743680,1120744447,US
1120744448,1120744703,KN
-1120744704,1120745471,US
-1120745472,1120745727,A2
-1120745728,1120846431,US
-1120846432,1120846463,CA
-1120846464,1120854015,US
+1120744704,1120792575,US
+1120793272,1120793279,US
+1120793856,1120794111,US
+1120795136,1120854015,US
1120854016,1120862207,CA
1120862208,1120875007,US
1120875008,1120875263,AS
-1120875264,1120876287,US
-1120876288,1120876543,A2
-1120876544,1120876567,JO
-1120876568,1120876575,A2
-1120876576,1120876591,JO
-1120876592,1120876599,A2
-1120876600,1120876607,JO
-1120876608,1120876615,A2
-1120876616,1120876623,US
-1120876624,1120876655,A2
-1120876656,1120876671,US
-1120876672,1120876799,A2
-1120876800,1120877567,US
-1120877568,1120877575,A2
-1120877576,1120877583,CA
-1120877584,1120877823,A2
-1120877824,1120878359,US
-1120878360,1120878591,A2
-1120878592,1120886783,US
+1120875264,1120886783,US
1120886784,1120886911,CA
1120886912,1120887039,NG
-1120887040,1120888127,CA
-1120888128,1120888159,US
-1120888160,1120894975,CA
+1120887040,1120894975,CA
1120894976,1120911359,US
1120911360,1120919551,CA
1120919552,1121005567,US
1121005568,1121009663,CA
-1121009664,1121009983,US
-1121009984,1121009999,CA
-1121010000,1121038335,US
+1121009664,1121038335,US
1121038336,1121042431,CA
1121042432,1121230847,US
-1121230848,1121232119,CA
-1121232120,1121232127,US
-1121232128,1121233455,CA
-1121233456,1121233463,US
-1121233464,1121233471,DE
-1121233472,1121233575,CA
-1121233576,1121233583,US
-1121233584,1121233599,DE
-1121233600,1121239039,CA
+1121230848,1121239039,CA
1121239040,1121247231,US
-1121247232,1121247239,CA
-1121247240,1121247255,AG
-1121247256,1121247263,CA
-1121247264,1121247271,CR
-1121247272,1121247279,CA
-1121247280,1121247287,GI
-1121247288,1121247295,CY
-1121247296,1121247487,CA
-1121247488,1121247495,VG
-1121247496,1121247511,CA
-1121247512,1121247519,VG
-1121247520,1121247527,BZ
-1121247528,1121247535,VG
-1121247536,1121247543,BZ
-1121247544,1121247551,CA
-1121247552,1121247559,VG
-1121247560,1121247567,CA
-1121247568,1121247583,MT
-1121247584,1121247591,CY
-1121247592,1121247615,CA
-1121247616,1121247631,BZ
-1121247632,1121247647,VG
-1121247648,1121247663,US
-1121247664,1121247695,BZ
-1121247696,1121247711,CA
-1121247712,1121247719,CW
-1121247720,1121247743,CA
-1121247744,1121247775,BZ
-1121247776,1121247823,CA
-1121247824,1121247855,AG
-1121247856,1121247967,CA
-1121247968,1121247999,CR
-1121248000,1121248007,AG
-1121248008,1121248015,BZ
-1121248016,1121248039,CA
-1121248040,1121248047,AG
-1121248048,1121248055,CA
-1121248056,1121248063,AW
-1121248064,1121248071,CA
-1121248072,1121248079,PH
-1121248080,1121248087,CA
-1121248088,1121248095,AW
-1121248096,1121248111,PH
-1121248112,1121248127,CW
-1121248128,1121248135,MT
-1121248136,1121248159,CA
-1121248160,1121248255,AG
-1121248256,1121248287,CA
-1121248288,1121248311,BZ
-1121248312,1121248319,MT
-1121248320,1121248335,CA
-1121248336,1121248343,VG
-1121248344,1121248351,BZ
-1121248352,1121248367,MT
-1121248368,1121248383,CA
-1121248384,1121248399,VG
-1121248400,1121248407,CA
-1121248408,1121248431,PA
-1121248432,1121248447,CA
-1121248448,1121248495,BZ
-1121248496,1121248783,CA
-1121248784,1121248799,VG
-1121248800,1121248863,CA
-1121248864,1121248879,VG
-1121248880,1121248911,CA
-1121248912,1121248919,BZ
-1121248920,1121248959,VG
-1121248960,1121248983,CA
-1121248984,1121248991,MT
-1121248992,1121249023,VG
-1121249024,1121249279,CA
-1121249280,1121249343,MT
-1121249344,1121249375,CA
-1121249376,1121249383,VG
-1121249384,1121249391,CA
-1121249392,1121249399,AW
-1121249400,1121249535,CA
-1121249536,1121249543,BZ
-1121249544,1121249599,CA
-1121249600,1121249615,IM
-1121249616,1121249631,VG
-1121249632,1121249743,CA
-1121249744,1121249751,CR
-1121249752,1121249759,CA
-1121249760,1121249775,BZ
-1121249776,1121250047,CA
-1121250048,1121250079,CR
-1121250080,1121250095,AG
-1121250096,1121250111,CA
-1121250112,1121250127,CR
-1121250128,1121250143,CA
-1121250144,1121250175,GB
-1121250176,1121250183,AW
-1121250184,1121250207,BZ
-1121250208,1121250287,CA
-1121250288,1121250303,AG
+1121247232,1121250303,CA
1121250304,1121250815,BZ
-1121250816,1121250831,CA
-1121250832,1121250839,BZ
-1121250840,1121250847,AG
-1121250848,1121250879,CA
-1121250880,1121250911,VG
-1121250912,1121250935,CA
-1121250936,1121250943,VG
-1121250944,1121251007,BZ
-1121251008,1121251015,VG
-1121251016,1121251039,CA
-1121251040,1121251047,CR
-1121251048,1121251071,CA
-1121251072,1121251079,PH
-1121251080,1121251087,CA
-1121251088,1121251095,CY
-1121251096,1121251103,CA
-1121251104,1121251119,BZ
-1121251120,1121251135,CA
-1121251136,1121251167,AG
-1121251168,1121251199,VG
-1121251200,1121251271,CA
-1121251272,1121251279,PH
-1121251280,1121251287,BZ
-1121251288,1121251311,IM
-1121251312,1121251327,BZ
-1121251328,1121251583,CA
-1121251584,1121251591,BZ
-1121251592,1121251599,MT
-1121251600,1121251607,CA
-1121251608,1121251615,BZ
-1121251616,1121251647,NL
-1121251648,1121251655,BZ
-1121251656,1121251663,CA
-1121251664,1121251671,MT
-1121251672,1121251687,CA
-1121251688,1121251711,BZ
-1121251712,1121251727,CA
-1121251728,1121251791,BZ
-1121251792,1121251807,VG
-1121251808,1121251831,CA
-1121251832,1121251839,VG
-1121251840,1121251847,BZ
-1121251848,1121251855,CA
-1121251856,1121251863,CW
-1121251864,1121251871,CA
-1121251872,1121251887,VG
-1121251888,1121251895,CY
-1121251896,1121251903,CA
-1121251904,1121251935,AG
-1121251936,1121251943,CY
-1121251944,1121251951,MT
-1121251952,1121251967,VG
-1121251968,1121251983,MT
-1121251984,1121251991,CA
-1121251992,1121251999,AG
-1121252000,1121252095,CA
-1121252096,1121252359,AG
-1121252360,1121252367,ZA
-1121252368,1121252375,GG
-1121252376,1121252383,MT
-1121252384,1121252391,CR
-1121252392,1121252399,GG
-1121252400,1121252415,MT
-1121252416,1121252479,GI
-1121252480,1121252607,CR
-1121252608,1121252671,CA
-1121252672,1121252735,BZ
-1121252736,1121252863,CA
+1121250816,1121252863,CA
1121252864,1121253119,BZ
-1121253120,1121253343,CA
-1121253344,1121253375,CY
-1121253376,1121253887,CA
+1121253120,1121253887,CA
1121253888,1121254143,BZ
1121254144,1121255423,CA
-1121255424,1121654863,US
-1121654864,1121654879,IN
-1121654880,1121654975,US
-1121654976,1121654991,FR
-1121654992,1121656063,US
-1121656064,1121656095,NZ
-1121656096,1121714975,US
-1121714976,1121714991,AU
-1121714992,1121714998,US
+1121255424,1121714998,US
1121714999,1121714999,KW
-1121715000,1121715935,US
-1121715936,1121715943,US
-1121715944,1121716095,US
-1121716096,1121716223,AI
-1121716224,1121878015,US
+1121715000,1121878015,US
1121878016,1121910783,CA
1121910784,1122074623,US
1122074624,1122087935,CA
1122087936,1122088191,US
1122088192,1122091007,CA
-1122091008,1122092623,US
-1122092624,1122092631,CA
-1122092632,1122092687,US
-1122092688,1122092695,GB
-1122092696,1122092719,US
-1122092720,1122092751,CA
-1122092752,1122092799,US
+1122091008,1122092799,US
1122092800,1122093055,CA
-1122093056,1122093807,US
-1122093808,1122093815,HK
-1122093816,1122101127,US
-1122101128,1122101135,SE
-1122101136,1122101375,US
-1122101376,1122101383,CO
-1122101384,1122101471,US
-1122101472,1122101479,VE
-1122101480,1122126745,US
-1122126746,1122126753,CH
-1122126754,1122140159,US
+1122093056,1122140159,US
1122140160,1122148351,CA
-1122148352,1122179343,US
-1122179344,1122179351,CA
-1122179352,1122197695,US
-1122197696,1122197727,GB
-1122197728,1122197735,US
-1122197736,1122197743,GB
-1122197744,1122197767,US
-1122197768,1122197775,FR
-1122197776,1122203135,US
+1122148352,1122203135,US
1122203136,1122203391,GB
-1122203392,1122269217,US
-1122269218,1122269218,US
-1122269219,1122411551,US
-1122411552,1122411583,AU
-1122411584,1122412497,US
+1122203392,1122412497,US
1122412498,1122412498,LB
1122412499,1122416383,US
1122416384,1122416639,DM
1122416640,1122417919,US
1122417920,1122418175,AU
-1122418176,1122451455,US
+1122418176,1122430975,US
+1122434048,1122451455,US
1122451456,1122455551,CO
1122455552,1122476031,US
1122476032,1122480127,PR
-1122480128,1122480159,US
-1122480160,1122480167,RU
-1122480168,1122480207,US
-1122480208,1122480223,GB
-1122480224,1122480231,PL
-1122480232,1122480415,US
-1122480416,1122480423,CL
-1122480424,1122480479,US
-1122480480,1122480487,CA
-1122480488,1122493055,US
-1122493056,1122493183,ES
-1122493184,1122493439,US
-1122493440,1122494207,PR
-1122494208,1122495231,US
-1122495232,1122495999,PR
-1122496000,1122497327,US
-1122497328,1122497343,BR
-1122497344,1122497375,US
-1122497376,1122497391,PR
-1122497392,1122497535,US
-1122497536,1122498047,PR
-1122498048,1122498559,US
-1122498560,1122499071,PR
-1122499072,1122499583,US
-1122499584,1122500095,PR
-1122500096,1122528603,US
-1122528604,1122528613,ES
-1122528614,1122533375,US
+1122480128,1122494975,US
+1122494976,1122495231,PR
+1122495232,1122497791,US
+1122497792,1122498047,PR
+1122498048,1122533375,US
1122533376,1122535423,GB
1122535424,1122538495,KR
1122538496,1122635775,US
1122635776,1122639871,CA
-1122639872,1122667071,US
-1122667072,1122667135,CH
-1122667136,1122759247,US
-1122759248,1122759263,CA
-1122759264,1123123199,US
+1122639872,1123123199,US
1123123200,1123127295,CA
1123127296,1123180543,US
1123180544,1123184639,CA
1123184640,1123336191,US
1123336192,1123352575,CA
-1123352576,1123534847,US
+1123352576,1123397631,US
+1123398656,1123399679,US
+1123401728,1123534847,US
1123534848,1123536895,AW
-1123536896,1123582239,US
-1123582240,1123582271,CY
-1123582272,1123584511,US
+1123536896,1123584511,US
1123584512,1123584767,ES
1123584768,1123589631,US
1123589632,1123589887,DE
1123589888,1123590143,US
1123590144,1123598335,VI
-1123598336,1123598495,CA
-1123598496,1123598559,US
-1123598560,1123598943,CA
-1123598944,1123598975,US
-1123598976,1123599551,CA
-1123599552,1123599631,US
-1123599632,1123599743,CA
-1123599744,1123599775,US
-1123599776,1123599983,CA
-1123599984,1123599999,US
-1123600000,1123600431,CA
-1123600432,1123600447,US
-1123600448,1123600479,CA
-1123600480,1123600495,US
-1123600496,1123601023,CA
-1123601024,1123601087,US
-1123601088,1123601343,CA
-1123601344,1123601375,US
-1123601376,1123602047,CA
-1123602048,1123602079,US
-1123602080,1123602303,CA
-1123602304,1123602367,US
-1123602368,1123602527,CA
-1123602528,1123602559,US
-1123602560,1123602751,CA
-1123602752,1123602815,US
-1123602816,1123603279,CA
-1123603280,1123603295,US
-1123603296,1123603375,CA
-1123603376,1123603391,US
-1123603392,1123603679,CA
-1123603680,1123603711,US
-1123603712,1123603967,CA
-1123603968,1123604031,US
-1123604032,1123604191,CA
-1123604192,1123604223,US
-1123604224,1123604639,CA
-1123604640,1123604671,US
-1123604672,1123604703,CA
-1123604704,1123604799,US
-1123604800,1123604863,CA
-1123604864,1123604895,US
-1123604896,1123605727,CA
-1123605728,1123605759,US
-1123605760,1123606527,CA
-1123606528,1123651583,US
+1123598336,1123606527,CA
+1123606528,1123635199,US
+1123635200,1123635455,AU
+1123635456,1123635639,GB
+1123635640,1123635640,RU
+1123635641,1123635670,GB
+1123635671,1123635671,RU
+1123635672,1123635711,GB
+1123635712,1123638527,US
+1123638528,1123638783,FR
+1123638784,1123651583,US
1123651584,1123651839,JM
1123651840,1123652095,BB
-1123652096,1123652351,AI
-1123652352,1123652863,JM
+1123652096,1123652863,JM
1123652864,1123653119,HT
1123653120,1123653375,BB
1123653376,1123653631,JM
1123653632,1123654655,KY
-1123654656,1123654791,JM
-1123654792,1123654807,AG
-1123654808,1123655679,JM
+1123654656,1123655679,JM
1123655680,1123663871,US
1123663872,1123667967,SV
1123667968,1123670015,PR
@@ -35635,739 +11796,131 @@
1123801088,1123801343,RU
1123801344,1123848191,US
1123848192,1123852287,CA
-1123852288,1123870063,US
-1123870064,1123870071,GB
-1123870072,1123870295,US
-1123870296,1123870303,HK
-1123870304,1123870343,US
-1123870344,1123870351,HK
-1123870352,1123950591,US
+1123852288,1123950591,US
1123950592,1123958783,CA
-1123958784,1124028511,US
-1124028512,1124028543,NC
-1124028544,1125064703,US
+1123958784,1125064703,US
1125064704,1125065215,GB
-1125065216,1125076115,US
-1125076116,1125076116,US
-1125076117,1125076167,US
-1125076168,1125076168,US
-1125076169,1125076339,US
-1125076340,1125076340,US
-1125076341,1125076348,US
-1125076349,1125076349,US
-1125076350,1125081087,US
-1125081088,1125081151,CL
-1125081152,1125081183,CA
-1125081184,1125081215,US
-1125081216,1125081279,GB
-1125081280,1125081855,US
+1125065216,1125081855,US
1125081856,1125082111,DE
1125082112,1125082367,US
1125082368,1125082623,DE
-1125082624,1125082655,US
-1125082656,1125082687,UY
-1125082688,1125082783,US
-1125082784,1125082799,UY
-1125082800,1125083007,US
-1125083008,1125083023,RU
-1125083024,1125083967,US
-1125083968,1125084031,UY
-1125084032,1125084063,US
-1125084064,1125084095,SE
-1125084096,1125085135,US
-1125085136,1125085151,DE
-1125085152,1125086079,US
-1125086080,1125086143,AU
-1125086144,1125087999,US
+1125082624,1125087999,US
1125088000,1125088255,CA
-1125088256,1125090303,US
-1125090304,1125090335,AU
-1125090336,1125090367,US
-1125090368,1125090431,ZA
-1125090432,1125090479,US
-1125090480,1125090495,DE
-1125090496,1125091087,US
-1125091088,1125091103,CA
-1125091104,1125091135,US
-1125091136,1125091167,SK
-1125091168,1125091183,US
-1125091184,1125091199,UY
-1125091200,1125091455,US
-1125091456,1125091519,ES
-1125091520,1125091583,US
-1125091584,1125091647,GB
-1125091648,1125091663,US
-1125091664,1125091679,HU
-1125091680,1125091711,SE
-1125091712,1125091743,CA
-1125091744,1125091759,US
-1125091760,1125091775,UY
-1125091776,1125091839,CA
-1125091840,1125093471,US
-1125093472,1125093503,IL
-1125093504,1125093567,SK
-1125093568,1125093631,AU
-1125093632,1125094463,US
-1125094464,1125094527,BR
-1125094528,1125094655,US
-1125094656,1125094671,GB
-1125094672,1125094783,US
-1125094784,1125094799,GB
-1125094800,1125094847,CA
-1125094848,1125094911,BR
-1125094912,1125095039,AU
-1125095040,1125095167,GB
-1125095168,1125095183,BE
-1125095184,1125095295,US
-1125095296,1125095327,AU
-1125095328,1125096959,US
-1125096960,1125097087,AR
-1125097088,1125097215,US
-1125097216,1125097279,AU
-1125097280,1125097343,BR
-1125097344,1125097407,US
-1125097408,1125097439,IL
-1125097440,1125097455,US
-1125097456,1125097471,GB
-1125097472,1125097791,US
-1125097792,1125097823,ES
-1125097824,1125097855,AU
-1125097856,1125097871,JO
-1125097872,1125097887,UY
-1125097888,1125097919,US
-1125097920,1125097983,IL
-1125097984,1125099775,US
+1125088256,1125099775,US
1125099776,1125100031,GB
-1125100032,1125103359,US
-1125103360,1125103487,US
-1125103488,1125103519,UY
-1125103520,1125106111,US
-1125106112,1125106175,GB
-1125106176,1125106207,AU
-1125106208,1125106223,TR
-1125106224,1125106239,FR
-1125106240,1125106255,UY
-1125106256,1125106271,FR
-1125106272,1125106303,US
-1125106304,1125106367,DE
-1125106368,1125110271,US
-1125110272,1125110335,GB
-1125110336,1125110399,US
-1125110400,1125110463,KW
-1125110464,1125110783,US
-1125110784,1125110911,MA
-1125110912,1125110927,UY
-1125110928,1125110943,TW
-1125110944,1125110959,CA
-1125110960,1125110975,US
-1125110976,1125111039,MA
-1125111040,1125111423,US
-1125111424,1125111439,BR
-1125111440,1125111455,US
-1125111456,1125111471,CA
-1125111472,1125111487,US
-1125111488,1125111519,GB
-1125111520,1125111535,IL
-1125111536,1125111743,US
-1125111744,1125111775,DE
-1125111776,1125112447,US
-1125112448,1125112511,PL
-1125112512,1125112767,US
-1125112768,1125112783,GB
-1125112784,1125112831,US
+1125100032,1125112831,US
1125112832,1125113087,MA
-1125113088,1125115647,US
-1125115648,1125115663,ES
-1125115664,1125115727,US
-1125115728,1125115743,ES
-1125115744,1125116159,US
-1125116160,1125116191,BR
-1125116192,1125116223,TR
-1125116224,1125116415,US
+1125113088,1125116415,US
1125116416,1125116671,MA
-1125116672,1125116959,US
-1125116960,1125116991,JP
-1125116992,1125117023,US
-1125117024,1125117055,BR
-1125117056,1125117151,US
-1125117152,1125117167,UY
-1125117168,1125117183,US
+1125116672,1125117183,US
1125117184,1125117439,MA
-1125117440,1125118495,US
-1125118496,1125118511,BR
-1125118512,1125118527,US
-1125118528,1125118559,UY
-1125118560,1125118591,TR
-1125118592,1125118655,US
-1125118656,1125118687,IL
-1125118688,1125118719,BR
-1125118720,1125119199,US
-1125119200,1125119231,TR
-1125119232,1125119743,US
-1125119744,1125119871,RO
-1125119872,1125119903,US
-1125119904,1125119935,IL
-1125119936,1125119967,JP
-1125119968,1125120255,US
+1125117440,1125120255,US
1125120256,1125120511,MA
-1125120512,1125120767,US
-1125120768,1125120799,UY
-1125120800,1125120831,IL
-1125120832,1125120863,US
-1125120864,1125120895,GB
-1125120896,1125121023,RO
-1125121024,1125238553,US
+1125120512,1125156304,US
+1125156305,1125156305,DE
+1125156306,1125238553,US
1125238554,1125238554,ES
1125238555,1125290241,US
1125290242,1125290242,AE
-1125290243,1125350145,US
-1125350146,1125350146,US
-1125350147,1125454111,US
-1125454112,1125454119,ES
-1125454120,1125454271,US
-1125454272,1125454279,DE
-1125454280,1125454303,US
-1125454304,1125454323,NO
-1125454324,1125454327,SG
-1125454328,1125454411,US
-1125454412,1125454527,NO
-1125454528,1125454591,US
-1125454592,1125454847,A2
-1125454848,1125455359,US
-1125455360,1125455363,CA
-1125455364,1125455395,US
-1125455396,1125455399,NO
-1125455400,1125455423,US
-1125455424,1125455427,ES
-1125455428,1125455431,GB
-1125455432,1125455435,US
-1125455436,1125455439,ES
-1125455440,1125455443,CA
-1125455444,1125455447,US
-1125455448,1125455451,NO
-1125455452,1125455475,US
-1125455476,1125455479,NO
-1125455480,1125455491,US
-1125455492,1125455495,GB
-1125455496,1125455499,CA
-1125455500,1125455507,US
-1125455508,1125455515,ES
-1125455516,1125455519,US
-1125455520,1125455523,ES
-1125455524,1125455527,US
-1125455528,1125455531,GB
-1125455532,1125455535,NO
-1125455536,1125455543,US
-1125455544,1125455547,ES
-1125455548,1125455551,VG
-1125455552,1125455555,ES
-1125455556,1125455559,US
-1125455560,1125455563,NZ
-1125455564,1125455567,ES
-1125455568,1125455571,US
-1125455572,1125455575,NO
-1125455576,1125455579,CW
-1125455580,1125456131,US
-1125456132,1125456135,NO
-1125456136,1125456139,A2
-1125456140,1125456163,US
-1125456164,1125456167,NO
-1125456168,1125456175,US
-1125456176,1125456179,NO
-1125456180,1125456191,US
-1125456192,1125456195,GB
-1125456196,1125456199,NO
-1125456200,1125456203,CW
-1125456204,1125456207,US
-1125456208,1125456211,SG
-1125456212,1125456231,US
-1125456232,1125456239,ES
-1125456240,1125456247,GB
-1125456248,1125456259,CW
-1125456260,1125456263,ES
-1125456264,1125474303,US
+1125290243,1125457919,US
+1125458944,1125459455,US
+1125462016,1125474303,US
1125474304,1125478399,CA
1125478400,1125481215,US
1125481216,1125481727,CA
1125481728,1125498879,US
-1125498880,1125508095,CA
+1125498880,1125501439,CA
+1125501440,1125501695,US
+1125501696,1125508095,CA
1125508096,1125508351,PA
1125508352,1125514239,CA
1125514240,1125514495,CY
1125514496,1125514751,US
1125514752,1125515263,CA
1125515264,1125531647,US
-1125531648,1125539903,CA
-1125539904,1125539935,US
-1125539936,1125540151,CA
-1125540152,1125540159,GB
-1125540160,1125540207,CA
-1125540208,1125540223,US
-1125540224,1125540479,CA
-1125540480,1125540495,US
-1125540496,1125540511,CA
-1125540512,1125540527,US
-1125540528,1125540543,IE
-1125540544,1125540575,CA
-1125540576,1125540591,US
-1125540592,1125540703,CA
-1125540704,1125540711,US
-1125540712,1125540927,CA
-1125540928,1125540959,US
-1125540960,1125541151,CA
-1125541152,1125541159,CN
-1125541160,1125541183,CA
-1125541184,1125541215,KY
-1125541216,1125541223,CA
-1125541224,1125541231,US
-1125541232,1125541247,CA
-1125541248,1125541279,US
-1125541280,1125541391,CA
-1125541392,1125541407,US
-1125541408,1125541487,CA
-1125541488,1125541503,US
-1125541504,1125541543,CA
-1125541544,1125541551,CN
-1125541552,1125541807,CA
-1125541808,1125541815,US
-1125541816,1125541951,CA
-1125541952,1125541959,BM
-1125541960,1125542143,CA
-1125542144,1125542159,US
-1125542160,1125542175,CA
-1125542176,1125542199,US
-1125542200,1125542239,CA
-1125542240,1125542255,FR
-1125542256,1125542303,CA
-1125542304,1125542319,US
-1125542320,1125542351,CA
-1125542352,1125542367,US
-1125542368,1125542383,CA
-1125542384,1125542399,US
-1125542400,1125542447,CA
-1125542448,1125542463,US
-1125542464,1125542503,CA
-1125542504,1125542543,US
-1125542544,1125542607,CA
-1125542608,1125542615,US
-1125542616,1125543199,CA
-1125543200,1125543215,US
-1125543216,1125543231,CA
-1125543232,1125543247,US
-1125543248,1125543687,CA
-1125543688,1125543695,US
-1125543696,1125543887,CA
+1125531648,1125543887,CA
1125543888,1125543903,US
-1125543904,1125543919,CA
-1125543920,1125545983,US
+1125543904,1125543935,CA
+1125543936,1125545983,US
1125548032,1125550079,CA
1125550080,1125550335,US
1125550336,1125552127,CA
1125552128,1125572607,US
1125572608,1125576703,CA
-1125576704,1125595695,US
-1125595696,1125595711,NG
-1125595712,1125596687,US
-1125596688,1125596695,VE
-1125596696,1125613567,US
+1125576704,1125593371,US
+1125593372,1125593375,GB
+1125593376,1125613567,US
1125613568,1125617663,CA
-1125617664,1125623295,US
-1125623296,1125623551,IN
-1125623552,1125623807,US
-1125623808,1125624063,US
-1125624064,1125626111,US
-1125626112,1125626367,US
-1125626368,1125628671,US
-1125628672,1125628703,NZ
-1125628704,1125641790,US
-1125641791,1125641792,CA
-1125641793,1125642185,US
-1125642186,1125642189,CA
-1125642190,1125642301,US
-1125642302,1125642303,IN
-1125642304,1125642674,US
-1125642675,1125642694,BO
-1125642695,1125643183,US
-1125643184,1125643187,BR
-1125643188,1125645449,US
-1125645450,1125645453,CA
-1125645454,1126009343,US
-1126009344,1126009599,AR
-1126009600,1126924287,US
+1125617664,1126924287,US
1126924288,1126928383,CA
-1126928384,1126928639,US
-1126928640,1126931455,US
-1126931456,1126931711,US
-1126931712,1126948927,US
-1126948928,1126949559,CA
-1126949560,1126949567,BZ
-1126949568,1126949583,CA
-1126949584,1126949591,LB
-1126949592,1126949607,CA
-1126949608,1126949615,CN
-1126949616,1126949631,LB
-1126949632,1126949695,CA
-1126949696,1126949759,PK
-1126949760,1126950191,CA
-1126950192,1126950199,ES
-1126950200,1126950207,HR
-1126950208,1126950415,CA
-1126950416,1126950423,PK
-1126950424,1126950463,CA
-1126950464,1126950495,IT
-1126950496,1126950599,CA
-1126950600,1126950607,CN
-1126950608,1126950623,CA
-1126950624,1126950655,FR
-1126950656,1126950783,CA
-1126950784,1126950847,MY
-1126950848,1126951775,CA
-1126951776,1126951783,PH
-1126951784,1126951967,CA
-1126951968,1126951975,KP
-1126951976,1126951999,CA
-1126952000,1126952031,AU
-1126952032,1126952039,LB
-1126952040,1126952263,CA
-1126952264,1126952271,PH
-1126952272,1126952559,CA
-1126952560,1126952567,TH
-1126952568,1126952895,CA
-1126952896,1126952959,CY
+1126928384,1126948863,US
+1126948864,1126952959,CA
1126952960,1127677951,US
1127677952,1127694335,CA
-1127694336,1127707467,US
-1127707468,1127707468,US
-1127707469,1127923711,US
+1127694336,1127923711,US
1127923712,1127931903,CA
-1127931904,1127976191,US
-1127976192,1127976223,IL
-1127976224,1127979111,US
-1127979112,1127979119,CA
-1127979120,1127986087,US
-1127986088,1127986095,RO
-1127986096,1127986935,US
-1127986936,1127986943,IN
-1127986944,1127988551,US
-1127988552,1127988559,AU
-1127988560,1127988687,US
-1127988688,1127988695,IL
-1127988696,1128529919,US
-1128529920,1128633999,CA
-1128634000,1128634015,US
-1128634016,1128641023,CA
+1127931904,1128529919,US
+1128529920,1128641023,CA
1128641024,1128641535,US
1128641536,1128792063,CA
-1128792064,1128818687,US
-1128818688,1128818719,CA
-1128818720,1130536959,US
-1130536960,1130539007,GU
-1130539008,1132582463,US
-1132582464,1132582479,CA
-1132582480,1132698119,US
-1132698120,1132698127,CA
-1132698128,1132713607,US
-1132713608,1132713615,CA
-1132713616,1132947431,US
-1132947432,1132947439,CA
-1132947440,1132954319,US
-1132954320,1132954335,IS
-1132954336,1133461247,US
+1128792064,1130537215,US
+1130537216,1130537471,GU
+1130537472,1130537727,US
+1130537728,1130537983,GU
+1130537984,1130538751,US
+1130538752,1130539007,GU
+1130539008,1133461247,US
1133461248,1133461503,CA
-1133461504,1133785375,US
-1133785376,1133785383,NE
-1133785384,1133785391,US
-1133785392,1133785407,GB
-1133785408,1133785471,US
-1133785472,1133785503,GB
-1133785504,1133785567,US
-1133785568,1133785599,BE
-1133785600,1134029311,US
-1134029312,1134029567,A2
-1134029568,1134444543,US
+1133461504,1133789695,US
+1133789696,1133789823,GB
+1133789824,1134444543,US
1134444544,1134448639,CA
-1134448640,1134494361,US
-1134494362,1134494362,US
-1134494363,1134494689,US
-1134494690,1134494690,US
-1134494691,1134496041,US
-1134496042,1134496042,US
-1134496043,1134499659,US
-1134499660,1134499660,US
-1134499661,1134502354,US
-1134502355,1134502355,US
-1134502356,1134505665,US
-1134505666,1134505666,US
-1134505667,1134505867,US
-1134505868,1134505868,US
-1134505869,1134505931,US
-1134505932,1134505934,US
-1134505935,1134506628,US
-1134506629,1134506629,US
-1134506630,1134506907,US
-1134506908,1134506910,US
-1134506911,1134508267,US
-1134508268,1134508268,US
-1134508269,1134545919,US
-1134545920,1134545951,BH
-1134545952,1134546175,US
-1134546176,1134546207,BH
-1134546208,1134546943,US
+1134448640,1134546943,US
1134546944,1134551039,CA
-1134551040,1134759726,US
-1134759727,1134759727,US
-1134759728,1136721919,US
+1134551040,1136523263,US
+1136523264,1136523775,CA
+1136523776,1136721919,US
1136721920,1136787455,CA
-1136787456,1137189135,US
-1137189136,1137189151,IE
-1137189152,1137189247,US
-1137189248,1137189255,GB
-1137189256,1137189263,US
-1137189264,1137189271,GB
-1137189272,1137195519,US
+1136787456,1137195519,US
1137195520,1137195775,JP
-1137195776,1137254815,US
-1137254816,1137254831,NZ
-1137254832,1137255167,US
-1137255168,1137255423,IT
-1137255424,1137256191,US
-1137256192,1137256203,IT
-1137256204,1137261119,US
-1137261120,1137261183,IT
-1137261184,1137278975,US
+1137195776,1137278975,US
1137278976,1137283071,CA
1137283072,1137287167,US
1137287168,1137295359,CA
-1137295360,1137340927,US
-1137340928,1137340959,PL
-1137340960,1137369087,US
-1137369088,1137369167,CA
-1137369168,1137369175,US
-1137369176,1137369183,CA
-1137369184,1137369223,US
-1137369224,1137369359,CA
-1137369360,1137369375,US
-1137369376,1137369519,CA
-1137369520,1137369535,US
-1137369536,1137370111,CA
+1137295360,1137369343,US
+1137369344,1137369599,CA
+1137369600,1137369727,US
+1137369728,1137369759,CA
+1137369760,1137369855,US
+1137369856,1137370111,CA
1137370112,1137376255,US
-1137376256,1137376335,CA
-1137376336,1137376351,US
-1137376352,1137376367,CA
-1137376368,1137376383,US
-1137376384,1137376543,CA
+1137376256,1137376543,CA
1137376544,1137376575,US
1137376576,1137376591,CA
1137376592,1137376623,US
1137376624,1137376671,CA
-1137376672,1137376703,US
-1137376704,1137376767,CA
-1137376768,1137377311,US
-1137377312,1137377327,DE
-1137377328,1137377471,US
-1137377472,1137377479,MX
-1137377480,1137379071,US
-1137379072,1137379087,MX
-1137379088,1137382431,US
-1137382432,1137382447,HK
-1137382448,1137383455,US
-1137383456,1137383471,DE
-1137383472,1137426431,US
+1137376672,1137376719,US
+1137376720,1137376743,CA
+1137376744,1137376751,US
+1137376752,1137376767,CA
+1137376768,1137426431,US
1137426432,1137442815,PR
1137442816,1137459199,CA
1137459200,1137491967,US
1137491968,1137508351,CA
1137508352,1137524735,US
-1137524736,1137525642,CA
-1137525643,1137525643,CA
-1137525644,1137541119,CA
+1137524736,1137541119,CA
1137541120,1137623039,US
1137623040,1137639423,PR
-1137639424,1137704967,US
-1137704968,1137705287,CA
-1137705288,1137705295,US
-1137705296,1137705383,CA
-1137705384,1137705391,NL
-1137705392,1137705447,CA
-1137705448,1137705455,US
-1137705456,1137705727,CA
-1137705728,1137705735,US
-1137705736,1137705767,CA
-1137705768,1137705791,US
-1137705792,1137705879,CA
-1137705880,1137705887,US
-1137705888,1137705903,CA
-1137705904,1137705911,US
-1137705912,1137705943,CA
-1137705944,1137705951,US
-1137705952,1137706399,CA
-1137706400,1137706431,US
-1137706432,1137707519,CA
-1137707520,1137707575,US
-1137707576,1137707583,NL
-1137707584,1137707623,CA
-1137707624,1137707647,US
-1137707648,1137707663,CA
-1137707664,1137707679,US
-1137707680,1137707695,CA
-1137707696,1137707719,NL
-1137707720,1137707727,CA
-1137707728,1137707743,US
-1137707744,1137707759,CA
-1137707760,1137707775,US
-1137707776,1137708031,CA
-1137708032,1137708151,US
-1137708152,1137708167,CA
-1137708168,1137708175,US
-1137708176,1137708183,CA
-1137708184,1137708207,US
-1137708208,1137708215,CA
-1137708216,1137708247,US
-1137708248,1137708255,CA
-1137708256,1137708279,US
-1137708280,1137708927,CA
-1137708928,1137708943,US
-1137708944,1137708951,CA
-1137708952,1137708959,US
-1137708960,1137709007,CA
-1137709008,1137709023,US
-1137709024,1137709351,CA
-1137709352,1137709359,US
-1137709360,1137709383,CA
-1137709384,1137709391,US
-1137709392,1137709399,CA
-1137709400,1137709407,US
-1137709408,1137709423,CA
-1137709424,1137709431,US
-1137709432,1137709439,CA
-1137709440,1137709447,US
-1137709448,1137709463,CA
-1137709464,1137709487,US
-1137709488,1137709831,CA
-1137709832,1137709839,US
-1137709840,1137709903,CA
-1137709904,1137709911,US
-1137709912,1137709959,CA
-1137709960,1137709967,NL
-1137709968,1137710847,CA
-1137710848,1137710959,US
-1137710960,1137710967,CA
-1137710968,1137711135,US
-1137711136,1137711167,CA
-1137711168,1137711175,US
-1137711176,1137711191,CA
-1137711192,1137711199,NL
-1137711200,1137711207,CA
-1137711208,1137711215,NL
-1137711216,1137711223,US
-1137711224,1137711231,CA
-1137711232,1137711239,NL
-1137711240,1137711247,US
-1137711248,1137711255,CA
-1137711256,1137711263,NL
-1137711264,1137711279,US
-1137711280,1137711287,NL
-1137711288,1137711295,US
-1137711296,1137711303,NL
-1137711304,1137711335,US
-1137711336,1137711367,CA
-1137711368,1137711375,US
-1137711376,1137711399,CA
-1137711400,1137711407,US
-1137711408,1137711439,CA
-1137711440,1137711455,US
-1137711456,1137711471,CA
-1137711472,1137711487,US
-1137711488,1137711503,CA
-1137711504,1137711511,US
-1137711512,1137711559,CA
-1137711560,1137711567,US
-1137711568,1137711575,CA
-1137711576,1137711639,US
-1137711640,1137711647,CA
-1137711648,1137711655,US
-1137711656,1137711687,CA
-1137711688,1137711703,US
-1137711704,1137711743,CA
-1137711744,1137711751,US
-1137711752,1137711759,CA
-1137711760,1137711767,US
-1137711768,1137711791,CA
-1137711792,1137711807,US
-1137711808,1137711863,CA
-1137711864,1137711871,US
-1137711872,1137712007,CA
-1137712008,1137712015,US
-1137712016,1137712055,CA
-1137712056,1137712119,US
-1137712120,1137712127,CA
-1137712128,1137712135,US
-1137712136,1137712151,CA
-1137712152,1137712183,US
-1137712184,1137712191,CA
-1137712192,1137712215,US
-1137712216,1137712223,CA
-1137712224,1137712239,US
-1137712240,1137712255,CA
-1137712256,1137712263,US
-1137712264,1137712279,CA
-1137712280,1137712287,US
-1137712288,1137712295,CA
-1137712296,1137712327,US
-1137712328,1137712343,CA
-1137712344,1137712359,US
-1137712360,1137712383,CA
-1137712384,1137712671,US
-1137712672,1137712687,CA
-1137712688,1137712711,US
-1137712712,1137712719,CA
-1137712720,1137712759,US
-1137712760,1137712767,CA
-1137712768,1137712919,US
-1137712920,1137712927,CA
-1137712928,1137712959,US
-1137712960,1137712975,CA
-1137712976,1137713015,US
-1137713016,1137713023,CA
-1137713024,1137713071,US
-1137713072,1137713087,CA
-1137713088,1137713103,US
-1137713104,1137713111,CA
-1137713112,1137713127,US
-1137713128,1137713135,CA
-1137713136,1137724495,US
-1137724496,1137724511,CA
-1137724512,1137724543,US
-1137724544,1137724575,CA
-1137724576,1137724607,US
-1137724608,1137724623,CA
-1137724624,1137724655,US
-1137724656,1137724687,CA
-1137724688,1137724703,US
-1137724704,1137724719,CA
-1137724720,1137724847,US
-1137724848,1137724863,CA
-1137724864,1137724911,US
-1137724912,1137724927,CA
-1137724928,1137726015,US
-1137726016,1137726023,CL
-1137726024,1137758207,US
+1137639424,1137704959,US
+1137704960,1137712383,CA
+1137712384,1137712639,US
+1137712640,1137713151,CA
+1137713152,1137758207,US
1137758208,1137758463,GB
-1137758464,1137758495,US
-1137758496,1137758527,AU
-1137758528,1137758671,US
-1137758672,1137758687,CH
-1137758688,1137795071,US
-1137795072,1137799167,A2
-1137799168,1137840127,US
+1137758464,1137840127,US
1137840128,1137840383,CA
-1137840384,1137842431,US
-1137842432,1137842559,IN
-1137842560,1137843711,US
-1137843712,1137843775,NO
-1137843776,1137843991,US
-1137843992,1137843999,IN
-1137844000,1137868799,US
+1137840384,1137868799,US
1137868800,1137872895,CA
1137872896,1137876991,US
1137876992,1137881087,CA
@@ -36378,28 +11931,10 @@
1137922048,1137926143,US
1137926144,1137926655,CA
1137926656,1137926911,AW
-1137926912,1137927519,CA
-1137927520,1137927527,AG
-1137927528,1137927679,CA
-1137927680,1137927807,CR
-1137927808,1137927935,CA
-1137927936,1137928063,VG
-1137928064,1137928127,BZ
-1137928128,1137928191,VG
-1137928192,1137928223,CA
-1137928224,1137928239,VG
-1137928240,1137928255,CA
-1137928256,1137928319,BZ
-1137928320,1137929727,CA
+1137926912,1137929727,CA
1137929728,1137929983,IE
-1137929984,1137930055,CA
-1137930056,1137930079,GB
-1137930080,1137930127,CA
-1137930128,1137930159,MT
-1137930160,1137934335,CA
-1137934336,1137946585,US
-1137946586,1137946593,NO
-1137946594,1137950719,US
+1137929984,1137934335,CA
+1137934336,1137950719,US
1137950720,1137952255,CA
1137952256,1137952767,US
1137952768,1137954303,CA
@@ -36407,396 +11942,57 @@
1137963008,1137967103,VI
1137967104,1137975295,CA
1137975296,1137983487,US
-1137983488,1137984329,CA
-1137984330,1137984330,CA
-1137984331,1137988095,CA
-1137988096,1137988607,CA
-1137988608,1137991679,CA
+1137983488,1137991679,CA
1137991680,1138049023,US
-1138049024,1138053631,CA
-1138053632,1138053887,US
-1138053888,1138061311,CA
+1138049024,1138061311,CA
1138061312,1138069503,US
1138069504,1138073599,JM
1138073600,1138163711,US
-1138163712,1138163967,CA
-1138163968,1138163975,MA
-1138163976,1138163991,CA
-1138163992,1138163999,HR
-1138164000,1138164007,PA
-1138164008,1138164015,FR
-1138164016,1138164127,CA
-1138164128,1138164135,FR
-1138164136,1138164143,CA
-1138164144,1138164151,FR
-1138164152,1138164183,CA
-1138164184,1138164191,PH
-1138164192,1138164207,CA
-1138164208,1138164215,US
-1138164216,1138164255,CA
-1138164256,1138164263,LB
-1138164264,1138164271,FR
-1138164272,1138164279,PH
-1138164280,1138164367,CA
-1138164368,1138164375,PH
-1138164376,1138164399,FR
-1138164400,1138164511,CA
-1138164512,1138164543,FR
-1138164544,1138164583,CA
-1138164584,1138164591,NZ
-1138164592,1138164655,CA
-1138164656,1138164663,MA
-1138164664,1138164831,CA
-1138164832,1138164839,PH
-1138164840,1138164863,CA
-1138164864,1138164991,US
-1138164992,1138165311,CA
-1138165312,1138165319,US
-1138165320,1138165431,CA
-1138165432,1138165439,LB
-1138165440,1138165807,CA
-1138165808,1138165815,FR
-1138165816,1138165823,CH
-1138165824,1138165895,CA
-1138165896,1138165903,LB
-1138165904,1138165935,CA
-1138165936,1138165943,IL
-1138165944,1138165959,CA
-1138165960,1138165975,FR
-1138165976,1138165983,US
-1138165984,1138166199,CA
-1138166200,1138166207,FR
-1138166208,1138166527,CA
-1138166528,1138166535,TR
-1138166536,1138166663,CA
-1138166664,1138166671,LB
-1138166672,1138166703,CA
-1138166704,1138166711,FR
-1138166712,1138166719,AE
-1138166720,1138166819,CA
-1138166820,1138166823,PA
-1138166824,1138166879,CA
-1138166880,1138166887,RU
-1138166888,1138166919,CA
-1138166920,1138166927,PH
-1138166928,1138166967,CA
-1138166968,1138166983,FR
-1138166984,1138166991,SE
-1138166992,1138166999,PH
-1138167000,1138167031,CA
-1138167032,1138167039,FR
-1138167040,1138167111,CA
-1138167112,1138167119,US
-1138167120,1138167159,CA
-1138167160,1138167167,PH
-1138167168,1138167175,CA
-1138167176,1138167183,PH
-1138167184,1138167199,CA
-1138167200,1138167207,UA
-1138167208,1138167215,AE
-1138167216,1138167239,CA
-1138167240,1138167247,FR
-1138167248,1138167543,CA
-1138167544,1138167551,PA
-1138167552,1138167807,CA
+1138163712,1138167807,CA
1138167808,1138175999,US
1138176000,1138180095,CA
1138180096,1138184191,US
1138184192,1138184447,SG
-1138184448,1138188287,US
+1138184448,1138184959,US
+1138184960,1138185215,AU
+1138185216,1138188287,US
1138188288,1138192383,PR
1138192384,1138196479,US
1138196480,1138204671,CA
1138204672,1138212863,US
1138212864,1138216959,CA
-1138216960,1138337167,US
-1138337168,1138337183,GB
-1138337184,1138337199,US
-1138337200,1138337207,SG
-1138337208,1138372607,US
-1138372608,1138376703,AS
-1138376704,1138419711,US
+1138216960,1138372863,US
+1138372864,1138373119,AS
+1138373120,1138373887,US
+1138373888,1138374655,AS
+1138374656,1138374911,US
+1138374912,1138375679,AS
+1138375680,1138419711,US
1138419712,1138419967,DE
1138419968,1138499583,US
1138499584,1138503679,CA
-1138503680,1138508031,US
-1138508032,1138508095,GB
-1138508096,1138508447,US
-1138508448,1138508479,IT
-1138508480,1138508511,US
-1138508512,1138508543,CR
-1138508544,1138508575,US
+1138503680,1138508575,US
1138508576,1138508591,IT
-1138508592,1138508735,US
-1138508736,1138508767,CR
-1138508768,1138509823,US
+1138508592,1138509823,US
1138509824,1138510847,IN
-1138510848,1138510879,CA
-1138510880,1138510911,US
-1138510912,1138510975,IN
-1138510976,1138511103,MY
-1138511104,1138511167,CH
-1138511168,1138512383,US
-1138512384,1138512415,ID
-1138512416,1138512639,US
-1138512640,1138512671,ID
-1138512672,1138512895,US
-1138512896,1138512927,ID
-1138512928,1138544895,US
+1138510848,1138544895,US
1138544896,1138545151,GB
1138545152,1138593791,US
1138593792,1138597887,CA
1138597888,1138600447,US
1138600448,1138600703,BE
-1138600704,1138615299,US
-1138615300,1138615323,IT
-1138615324,1138622207,US
-1138622208,1138622463,US
-1138622464,1138655245,US
-1138655246,1138655316,CA
-1138655317,1138655374,US
-1138655375,1138655382,CA
-1138655383,1138655446,US
-1138655447,1138655454,CA
-1138655455,1138655458,US
-1138655459,1138655486,CA
-1138655487,1138655503,US
-1138655504,1138655521,MX
-1138655522,1138655581,US
-1138655582,1138655589,MX
-1138655590,1138655601,US
-1138655602,1138655609,EG
-1138655610,1138655617,MX
-1138655618,1138655621,US
-1138655622,1138655629,MX
-1138655630,1138655637,EG
-1138655638,1138655695,US
-1138655696,1138655703,MX
-1138655704,1138655715,US
-1138655716,1138655723,GB
-1138655724,1138655731,US
-1138655732,1138655739,VE
-1138655740,1138655817,US
-1138655818,1138655825,MX
-1138655826,1138655899,US
-1138655900,1138655911,MX
-1138655912,1138656025,US
-1138656026,1138656033,MX
-1138656034,1138656069,US
-1138656070,1138656077,EG
-1138656078,1138656093,MX
-1138656094,1138656137,US
-1138656138,1138656145,EG
-1138656146,1138656190,US
-1138656191,1138656198,CH
-1138656199,1138656222,US
-1138656223,1138656230,EG
-1138656231,1138656388,US
-1138656389,1138656396,ID
-1138656397,1138656605,US
-1138656606,1138656613,EG
-1138656614,1138656745,US
-1138656746,1138656753,AE
-1138656754,1138656761,EG
-1138656762,1138656857,US
-1138656858,1138656865,EG
-1138656866,1138656873,LK
-1138656874,1138656909,US
-1138656910,1138656917,IN
-1138656918,1138656981,US
-1138656982,1138656989,EG
-1138656990,1138656997,US
-1138656998,1138657005,EG
-1138657006,1138657051,US
-1138657052,1138657059,EG
-1138657060,1138657093,US
-1138657094,1138657101,EG
-1138657102,1138657109,IN
-1138657110,1138657110,US
-1138657111,1138657118,SE
-1138657119,1138657123,US
-1138657124,1138657131,EG
-1138657132,1138657173,US
-1138657174,1138657181,EG
-1138657182,1138657206,US
-1138657207,1138657214,EG
-1138657215,1138657222,IN
-1138657223,1138657235,US
-1138657236,1138657244,MA
-1138657245,1138657294,US
-1138657295,1138657302,EG
-1138657303,1138657324,US
-1138657325,1138657332,LK
-1138657333,1138657401,US
-1138657402,1138657409,IN
-1138657410,1138657433,US
-1138657434,1138657441,IN
-1138657442,1138657569,US
-1138657570,1138657577,LK
-1138657578,1138657605,US
-1138657606,1138657613,LK
-1138657614,1138657662,US
-1138657663,1138657670,EG
-1138657671,1138657748,US
-1138657749,1138657780,GB
-1138657781,1138658131,US
-1138658132,1138658163,EG
-1138658164,1138658171,US
-1138658172,1138658179,EG
-1138658180,1138658270,US
-1138658271,1138658278,IN
-1138658279,1138658431,US
-1138658432,1138658496,PK
-1138658497,1138659081,US
-1138659082,1138659207,ES
-1138659208,1138659307,US
-1138659308,1138659315,EG
-1138659316,1138659425,US
-1138659426,1138659433,VE
-1138659434,1138659465,US
-1138659466,1138659497,GB
-1138659498,1138659554,US
-1138659555,1138659562,EG
-1138659563,1138659570,GR
-1138659571,1138659593,US
-1138659594,1138659609,LK
-1138659610,1138659611,US
-1138659612,1138659619,EG
-1138659620,1138659625,US
-1138659626,1138659633,EG
-1138659634,1138659642,US
-1138659643,1138659650,ID
-1138659651,1138659697,US
-1138659698,1138659705,LK
-1138659706,1138659723,US
-1138659724,1138659731,ID
-1138659732,1138659753,US
-1138659754,1138659761,IN
-1138659762,1138659781,US
-1138659782,1138659789,NZ
-1138659790,1138659797,ID
-1138659798,1138659805,US
-1138659806,1138659813,ID
-1138659814,1138659821,LK
-1138659822,1138659823,US
-1138659824,1138659831,ID
-1138659832,1138659857,US
-1138659858,1138659889,GB
-1138659890,1138659922,US
-1138659923,1138659930,LK
-1138659931,1138660035,US
-1138660036,1138660043,IN
-1138660044,1138660050,US
-1138660051,1138660058,PH
-1138660059,1138660177,US
-1138660178,1138660185,ID
-1138660186,1138660193,US
-1138660194,1138660201,EG
-1138660202,1138660277,US
-1138660278,1138660285,EG
-1138660286,1138660311,US
-1138660312,1138660333,GB
-1138660334,1138660491,US
-1138660492,1138660499,EG
-1138660500,1138660539,US
-1138660540,1138660547,VE
-1138660548,1138660625,US
-1138660626,1138660633,EG
-1138660634,1138660645,US
-1138660646,1138660653,VE
-1138660654,1138660665,US
-1138660666,1138660673,IN
-1138660674,1138660694,US
-1138660695,1138660726,GB
-1138660727,1138660734,EG
-1138660735,1138660805,US
-1138660806,1138660821,EG
-1138660822,1138660873,US
-1138660874,1138660881,EG
-1138660882,1138660982,US
-1138660983,1138660990,EG
-1138660991,1138661002,US
-1138661003,1138661010,LK
-1138661011,1138661055,US
-1138661056,1138661063,EG
-1138661064,1138661129,US
-1138661130,1138661137,AE
-1138661138,1138661189,US
-1138661190,1138661193,LK
-1138661194,1138661195,US
-1138661196,1138661197,LK
-1138661198,1138661385,US
-1138661386,1138661393,EG
-1138661394,1138661457,US
-1138661458,1138661465,LK
-1138661466,1138661473,US
-1138661474,1138661481,AE
-1138661482,1138661489,US
-1138661490,1138661497,EG
-1138661498,1138661521,US
-1138661522,1138661529,EG
-1138661530,1138661607,US
-1138661608,1138661615,LK
-1138661616,1138661669,US
-1138661670,1138661677,IN
-1138661678,1138661729,US
-1138661730,1138661737,ID
-1138661738,1138661769,US
-1138661770,1138661777,MA
-1138661778,1138661785,US
-1138661786,1138661801,EG
-1138661802,1138661821,US
-1138661822,1138661829,MA
-1138661830,1138661969,US
-1138661970,1138661977,EG
-1138661978,1138662009,US
-1138662010,1138662017,IN
-1138662018,1138662273,US
-1138662274,1138662309,EG
-1138662310,1138662333,US
-1138662334,1138662349,EG
-1138662350,1138662369,US
-1138662370,1138662395,GB
-1138662396,1138662481,US
-1138662482,1138662497,EG
-1138662498,1138662505,LK
-1138662506,1138662537,US
-1138662538,1138662545,EG
-1138662546,1138662575,US
-1138662576,1138662607,MX
-1138662608,1138662623,US
-1138662624,1138662639,GB
-1138662640,1138662640,US
-1138662641,1138662648,EG
-1138662649,1138662942,US
-1138662943,1138663006,CN
-1138663007,1138663021,US
-1138663022,1138663166,GB
-1138663167,1138712575,US
-1138712576,1138714071,CA
-1138714072,1138714079,US
-1138714080,1138714087,ES
-1138714088,1138716671,CA
+1138600704,1138712575,US
+1138712576,1138716671,CA
1138716672,1138720767,US
1138720768,1138728959,CA
1138728960,1138774015,US
1138774016,1138778111,CA
-1138778112,1138780159,US
-1138780160,1138780415,CA
-1138780416,1138786303,US
+1138778112,1138780671,US
+1138780672,1138780679,CA
+1138780680,1138786303,US
1138786304,1138819071,PR
1138819072,1138851839,CA
-1138851840,1138851847,US
-1138851848,1138851855,IN
-1138851856,1138865578,US
-1138865579,1138865586,IN
-1138865587,1138874252,US
-1138874253,1138874264,UY
-1138874265,1138882331,US
-1138882332,1138882339,GB
-1138882340,1138882445,US
-1138882446,1138882453,GB
-1138882454,1138917375,US
+1138851840,1138917375,US
1138917376,1138937855,CA
1138937856,1138941951,US
1138941952,1138950143,CA
@@ -36804,124 +12000,64 @@
1139146752,1139154943,GT
1139154944,1139167231,JM
1139167232,1139167743,US
-1139167744,1139168895,PR
-1139168896,1139169279,US
-1139169280,1139170047,PR
-1139170048,1139170303,US
-1139170304,1139170559,PR
-1139170560,1139170815,US
-1139170816,1139171327,PR
-1139171328,1139175423,GT
-1139175424,1139179519,US
+1139167744,1139168767,PR
+1139168768,1139169279,US
+1139169280,1139170303,PR
+1139170304,1139171071,US
+1139171072,1139171327,PR
+1139171328,1139175679,US
+1139175680,1139175807,PR
+1139175808,1139179519,US
1139179520,1139195903,CA
1139195904,1139216383,US
1139216384,1139220479,CA
1139220480,1139265535,US
1139265536,1139269631,CA
-1139269632,1139274495,US
-1139274496,1139274751,US
-1139274752,1145054991,US
-1145054992,1145055007,FI
-1145055008,1145089791,US
+1139269632,1144796671,US
+1144796672,1144796799,CA
+1144796800,1144796927,US
+1144796928,1144797055,CA
+1144797056,1145089791,US
1145089792,1145090047,JP
-1145090048,1145188351,US
+1145090048,1145141247,US
+1145142784,1145158143,US
+1145158144,1145158655,CA
+1145158656,1145188351,US
1145188352,1145192447,CA
1145192448,1145242111,US
1145242112,1145242367,NO
-1145242368,1145243135,US
-1145243136,1145243391,EU
-1145243392,1145243647,US
-1145243648,1145244159,EU
+1145242368,1145244159,US
1145244160,1145244415,NO
1145244416,1145249791,US
1145249792,1145257983,CA
-1145257984,1145259007,US
-1145259008,1145259071,IN
-1145259072,1145259247,US
+1145257984,1145259247,US
1145259248,1145259251,AE
-1145259252,1145259263,US
-1145259264,1145259327,IN
-1145259328,1145260031,US
-1145260032,1145260095,IN
-1145260096,1145260623,US
-1145260624,1145260631,IN
-1145260632,1145261055,US
-1145261056,1145261119,IN
-1145261120,1145261311,US
-1145261312,1145261375,IN
-1145261376,1145307135,US
+1145259252,1145286655,US
+1145286656,1145287167,SG
+1145287168,1145287679,US
+1145287680,1145287935,SG
+1145287936,1145288191,US
+1145288192,1145288447,SG
+1145288448,1145307135,US
1145307136,1145311231,CA
-1145311232,1145333031,US
-1145333032,1145333039,IT
-1145333040,1145333191,US
-1145333192,1145333199,CN
-1145333200,1145333215,US
-1145333216,1145333223,CN
-1145333224,1145333879,US
-1145333880,1145333887,CN
-1145333888,1145334151,US
-1145334152,1145334167,CN
-1145334168,1145334175,US
-1145334176,1145334223,CN
-1145334224,1145334231,US
-1145334232,1145334239,CN
-1145334240,1145335103,US
-1145335104,1145335135,NL
-1145335136,1145335167,US
-1145335168,1145335183,CN
-1145335184,1145335215,US
-1145335216,1145335223,CN
-1145335224,1145376767,US
+1145311232,1145376767,US
1145376768,1145380863,CA
1145380864,1145405439,US
1145405440,1145413631,CA
1145413632,1145421823,US
1145421824,1145430015,CA
1145430016,1145475071,US
-1145475072,1145476887,CA
-1145476888,1145476895,US
-1145476896,1145479167,CA
-1145479168,1145484031,US
-1145484032,1145484063,VG
-1145484064,1145503743,US
+1145475072,1145479167,CA
+1145479168,1145503743,US
1145503744,1145520127,CA
1145520128,1145552895,US
1145552896,1145556991,CA
-1145556992,1145567839,US
-1145567840,1145567871,CN
-1145567872,1150046207,US
-1150046208,1150050303,JP
-1150050304,1150203871,US
-1150203872,1150203887,CA
-1150203888,1150287871,US
+1145556992,1150043135,US
+1150043136,1150044159,VA
+1150044160,1150287871,US
1150287872,1150812159,CA
1150812160,1151889407,US
-1151889408,1151889423,CA
-1151889424,1151889431,US
-1151889432,1151889447,CA
-1151889448,1151889455,FR
-1151889456,1151889471,CA
-1151889472,1151889487,RU
-1151889488,1151889495,CA
-1151889496,1151889535,MA
-1151889536,1151889599,CN
-1151889600,1151889615,CA
-1151889616,1151889631,MA
-1151889632,1151889791,CA
-1151889792,1151889823,MA
-1151889824,1151889839,CA
-1151889840,1151889847,PH
-1151889848,1151890007,CA
-1151890008,1151890015,GB
-1151890016,1151890079,CA
-1151890080,1151890087,GB
-1151890088,1151890095,CA
-1151890096,1151890111,GB
-1151890112,1151890119,CA
-1151890120,1151890127,GB
-1151890128,1151890143,CA
-1151890144,1151890151,SC
-1151890152,1151897599,CA
+1151889408,1151897599,CA
1151897600,1151943680,US
1151943681,1151943808,GB
1151943809,1151943871,NL
@@ -36934,118 +12070,53 @@
1151944112,1151944127,US
1151944128,1151944159,AU
1151944160,1151944175,FR
-1151944176,1151945727,US
+1151944176,1151944575,US
+1151944576,1151944703,ES
+1151944704,1151945727,US
1151945728,1151945759,RU
1151945760,1151945791,IR
1151945792,1151945823,IT
-1151945824,1151945855,US
+1151945824,1151945855,AU
1151945856,1151945887,SE
1151945888,1151945919,US
1151945920,1151945935,JP
1151945936,1151946239,US
1151946240,1151946751,GB
-1151946752,1151978927,US
-1151978928,1151978935,IE
-1151978936,1151978943,US
-1151978944,1151978975,IR
-1151978976,1152073727,US
+1151946752,1152073727,US
1152073728,1152077823,CA
-1152077824,1152082175,US
-1152082176,1152082303,IN
-1152082304,1152083455,US
-1152083456,1152083967,CN
-1152083968,1152084479,US
-1152084480,1152084991,IN
-1152084992,1152116479,US
+1152077824,1152083455,US
+1152083456,1152083711,MO
+1152083712,1152116479,US
1152116480,1152116735,CA
-1152116736,1152581631,US
+1152116736,1152117759,US
+1152117760,1152117952,IL
+1152117953,1152117953,CA
+1152117954,1152118015,IL
+1152118016,1152121855,US
+1152121856,1152122111,ID
+1152122112,1152581631,US
1152581632,1152614399,CA
1152614400,1152778239,US
1152778240,1152843775,CA
-1152843776,1154488319,US
-1154488320,1154488831,A2
-1154488832,1156071423,US
+1152843776,1156071423,US
1156071424,1156079615,CA
-1156079616,1156129487,US
-1156129488,1156129495,JP
-1156129496,1156129983,US
-1156129984,1156129999,CY
-1156130000,1156263935,US
+1156079616,1156263935,US
1156263936,1156265983,CA
1156265984,1156296703,US
1156296704,1156300799,CA
-1156300800,1157670431,US
-1157670432,1157670463,CA
-1157670464,1157713663,US
-1157713664,1157713791,CA
-1157713792,1157753087,US
+1156300800,1157753087,US
1157753088,1157753343,GB
-1157753344,1157755247,US
-1157755248,1157755263,GR
-1157755264,1157758207,US
+1157753344,1157758207,US
1157758208,1157758463,RU
-1157758464,1157910527,US
-1157910528,1157910529,CA
-1157910530,1157910533,MY
-1157910534,1157910537,CA
-1157910538,1157910561,US
-1157910562,1157910601,CA
-1157910602,1157910609,US
-1157910610,1157910721,CA
-1157910722,1157910745,US
-1157910746,1157910777,CA
-1157910778,1157910782,CR
-1157910783,1157910848,CA
-1157910849,1157910864,US
-1157910865,1157910911,CA
-1157910912,1157911039,US
-1157911040,1157911295,CA
-1157911296,1157911326,US
-1157911327,1157911355,CA
-1157911356,1157911386,US
-1157911387,1157911391,CA
-1157911392,1157911423,US
-1157911424,1157911551,CA
-1157911552,1157912063,US
-1157912064,1157912319,CA
-1157912320,1157912447,US
-1157912448,1157912448,CA
-1157912449,1157912456,LB
-1157912457,1157912464,ES
-1157912465,1157912472,DE
-1157912473,1157912480,ES
-1157912481,1157912488,LU
-1157912489,1157912575,US
-1157912576,1157912577,CA
-1157912578,1157912606,US
-1157912607,1157912833,CA
-1157912834,1157912848,MY
-1157912849,1157912959,CA
-1157912960,1157913023,US
-1157913024,1157913154,CA
-1157913155,1157913168,MY
-1157913169,1157914194,CA
-1157914195,1157914202,IN
-1157914203,1157914234,CA
-1157914235,1157914242,IN
-1157914243,1157914258,CA
-1157914259,1157914266,IN
-1157914267,1157914282,US
-1157914283,1157914306,CA
-1157914307,1157914314,MY
-1157914315,1157914322,SA
-1157914323,1157914330,TR
-1157914331,1157914339,US
-1157914340,1157914347,CA
-1157914348,1157914355,GB
-1157914356,1157914623,CA
-1157914624,1157931007,US
+1157758464,1157912703,US
+1157912704,1157912831,CA
+1157912832,1157913215,US
+1157913216,1157913279,CA
+1157913280,1157931007,US
1157931008,1157935103,BS
1157935104,1157943295,US
1157943296,1157947391,CA
-1157947392,1157950919,US
-1157950920,1157950975,HK
-1157950976,1158027263,US
+1157947392,1158027263,US
1158027264,1158027519,CA
1158027520,1158028287,US
1158028288,1158028543,CA
@@ -37055,656 +12126,148 @@
1158148096,1158152191,CA
1158152192,1158234111,US
1158234112,1158250495,CA
-1158250496,1158294719,US
-1158294720,1158294751,GB
-1158294752,1158295807,US
+1158250496,1158295807,US
1158295808,1158296063,GB
1158296064,1158316031,US
-1158316032,1158318847,CA
-1158318848,1158319103,CA
-1158319104,1158323695,CA
-1158323696,1158323711,SY
-1158323712,1158324223,CA
+1158316032,1158324223,CA
1158324224,1158340607,US
-1158340608,1158343199,CA
-1158343200,1158343231,US
-1158343232,1158344703,CA
+1158340608,1158344703,CA
1158344704,1158348799,US
1158348800,1158381567,CA
-1158381568,1158481417,US
-1158481418,1158481426,CA
-1158481427,1158481427,US
-1158481428,1158481436,CA
-1158481437,1158481597,US
-1158481598,1158481606,CA
-1158481607,1158481737,US
-1158481738,1158481745,CA
-1158481746,1158488529,US
-1158488530,1158488542,IL
-1158488543,1158488833,US
-1158488834,1158488846,IL
-1158488847,1158493441,US
-1158493442,1158493566,CA
-1158493567,1158496497,US
-1158496498,1158496506,TC
-1158496507,1158496530,US
-1158496531,1158496539,WS
-1158496540,1158496779,US
-1158496780,1158496788,FJ
-1158496789,1158496797,BE
-1158496798,1158496806,US
-1158496807,1158496815,PE
-1158496816,1158497616,US
-1158497617,1158497625,CH
-1158497626,1158497652,US
-1158497653,1158497661,CA
-1158497662,1158497670,GE
-1158497671,1158497770,US
-1158497771,1158497779,CA
-1158497780,1158497825,US
-1158497826,1158497834,GE
-1158497835,1158497865,WS
-1158497866,1158498032,US
-1158498033,1158498041,HK
-1158498042,1158498282,US
-1158498283,1158498291,MX
-1158498292,1158498457,US
-1158498458,1158498466,GR
-1158498467,1158498778,US
-1158498779,1158498787,IT
-1158498788,1158499171,US
-1158499172,1158499179,VI
-1158499180,1158499315,US
-1158499316,1158499326,CA
-1158499327,1158499382,US
-1158499383,1158499391,AS
-1158499392,1158499400,NL
-1158499401,1158499409,FR
-1158499410,1158499584,US
-1158499585,1158499838,CA
-1158499839,1158501120,US
-1158501121,1158501374,PR
-1158501375,1158504775,US
-1158504776,1158504784,CA
-1158504785,1158504836,US
-1158504837,1158504845,JM
-1158504846,1158504863,US
-1158504864,1158504872,GR
-1158504873,1158504941,US
-1158504942,1158504950,CA
-1158504951,1158504951,US
-1158504952,1158504959,KE
-1158504960,1158505653,US
-1158505654,1158505727,AU
-1158505728,1158506793,US
-1158506794,1158506809,IN
-1158506810,1158525184,US
-1158525185,1158525320,BE
-1158525321,1158525741,US
-1158525742,1158525750,BZ
-1158525751,1158525776,US
-1158525777,1158525785,FR
-1158525786,1158525821,US
-1158525822,1158525830,IT
-1158525831,1158526297,US
-1158526298,1158526306,IT
-1158526307,1158526335,US
-1158526336,1158526344,FR
-1158526345,1158526346,US
-1158526347,1158526355,PE
-1158526356,1158526357,US
-1158526358,1158526366,CA
-1158526367,1158526368,US
-1158526369,1158526377,CH
-1158526378,1158526930,US
-1158526931,1158526963,AS
-1158526964,1158538864,US
-1158538865,1158538872,WS
-1158538873,1158714111,US
-1158714112,1158714367,US
-1158714368,1158715007,US
-1158715008,1158715039,IE
-1158715040,1158716415,US
-1158716416,1158716423,IN
-1158716424,1158716543,US
-1158716544,1158716551,IE
-1158716552,1158716671,US
-1158716672,1158716703,IE
-1158716704,1158726731,US
-1158726732,1158726739,CA
-1158726740,1158732876,US
-1158732877,1158732884,GB
-1158732885,1158736241,US
-1158736242,1158736249,IN
-1158736250,1158774783,US
-1158774784,1158776947,CA
-1158776948,1158776951,US
-1158776952,1158784319,CA
-1158784320,1158784327,US
-1158784328,1158784367,CA
-1158784368,1158784375,US
-1158784376,1158784703,CA
-1158784704,1158784767,US
-1158784768,1158791167,CA
+1158381568,1158414591,US
+1158416336,1158416351,US
+1158416384,1158418431,US
+1158420480,1158439167,US
+1158439296,1158439423,US
+1158439680,1158439935,US
+1158440448,1158440703,US
+1158440960,1158724607,US
+1158724608,1158724863,NL
+1158724864,1158774783,US
+1158774784,1158791167,CA
1158791168,1158794239,BM
1158794240,1158794495,US
1158794496,1158799359,BM
1158799360,1158807551,CA
1158807552,1158995967,US
-1158995968,1158997879,CA
-1158997880,1158997887,US
-1158997888,1158997919,CA
-1158997920,1158997935,GB
-1158997936,1158999663,CA
-1158999664,1158999671,US
-1158999672,1158999863,CA
-1158999864,1158999871,US
-1158999872,1159004159,CA
+1158995968,1159004159,CA
1159004160,1159213055,US
1159213056,1159217151,CA
1159217152,1159249919,US
1159249920,1159254015,PR
-1159254016,1159262471,US
-1159262472,1159262475,TZ
-1159262476,1159262479,SA
-1159262480,1159262483,US
-1159262484,1159262487,TZ
-1159262488,1159262491,SA
-1159262492,1159262727,US
-1159262728,1159262731,DE
-1159262732,1159262735,RU
-1159262736,1159262739,US
-1159262740,1159262743,DE
-1159262744,1159262751,RU
-1159262752,1159262755,NL
-1159262756,1159262967,US
-1159262968,1159262975,RU
-1159262976,1159263279,US
-1159263280,1159263295,DE
-1159263296,1159263375,US
-1159263376,1159263391,ES
-1159263392,1159263503,US
-1159263504,1159263519,CZ
-1159263520,1159263599,US
-1159263600,1159263615,RU
-1159263616,1159263807,US
-1159263808,1159263823,EG
-1159263824,1159263967,US
-1159263968,1159263983,NG
-1159263984,1159264031,US
-1159264032,1159264047,ZA
-1159264048,1159264207,US
-1159264208,1159264223,AE
-1159264224,1159264351,US
-1159264352,1159264367,MY
-1159264368,1159264383,US
-1159264384,1159264399,TW
-1159264400,1159264623,US
-1159264624,1159264639,JP
-1159264640,1159264655,US
-1159264656,1159264671,AU
-1159264672,1159264767,US
-1159264768,1159264783,AR
-1159264784,1159264959,US
-1159264960,1159264975,BR
-1159264976,1159269119,US
+1159254016,1159269119,US
1159269120,1159269375,AR
1159269376,1159274495,US
1159274496,1159274751,GB
-1159274752,1159276799,US
-1159276800,1159277055,A2
-1159277056,1159281727,US
-1159281728,1159281743,HK
-1159281744,1159281919,US
+1159274752,1159281919,US
1159281920,1159282175,GB
-1159282176,1159290655,US
-1159290656,1159290687,CA
-1159290688,1159300607,US
+1159282176,1159300607,US
1159300608,1159300863,SE
-1159300864,1159318015,US
-1159318016,1159318047,GB
-1159318048,1159347199,US
-1159347200,1159347455,AU
-1159347456,1159348223,US
+1159300864,1159341103,US
+1159341104,1159341111,BR
+1159341112,1159348223,US
1159348224,1159356415,CA
1159356416,1159421951,US
1159421952,1159430143,CA
-1159430144,1159480439,US
-1159480440,1159480447,CA
-1159480448,1159482423,US
-1159482424,1159482431,CW
-1159482432,1159512063,US
-1159512064,1159512159,CA
-1159512160,1159512191,US
-1159512192,1159512895,CA
-1159512896,1159512959,US
-1159512960,1159512999,CA
-1159513000,1159513023,US
-1159513024,1159513343,CA
-1159513344,1159513375,US
-1159513376,1159513439,CA
-1159513440,1159513487,US
-1159513488,1159513519,CA
-1159513520,1159513535,US
-1159513536,1159513567,CA
-1159513568,1159513599,US
+1159430144,1159512575,US
+1159512576,1159512831,CA
+1159512832,1159513087,US
+1159513088,1159513343,CA
+1159513344,1159513599,US
1159513600,1159514879,CA
1159514880,1159515135,US
1159515136,1159515647,CA
-1159515648,1159515711,US
-1159515712,1159515887,CA
-1159515888,1159515895,US
-1159515896,1159515903,MX
+1159515648,1159515903,US
1159515904,1159516159,CA
-1159516160,1159516255,US
-1159516256,1159516287,CA
-1159516288,1159516415,US
+1159516160,1159516415,US
1159516416,1159516671,NL
-1159516672,1159517119,US
-1159517120,1159517151,CA
-1159517152,1159517183,US
-1159517184,1159517327,CA
-1159517328,1159517343,US
-1159517344,1159517359,CA
-1159517360,1159517439,US
-1159517440,1159517599,CA
-1159517600,1159517631,US
-1159517632,1159517663,CA
-1159517664,1159517695,US
-1159517696,1159517975,CA
-1159517976,1159517991,US
-1159517992,1159517999,CA
-1159518000,1159518015,US
-1159518016,1159518175,CA
-1159518176,1159518191,US
-1159518192,1159518207,CA
-1159518208,1159519743,US
+1159516672,1159517695,US
+1159517696,1159517951,CA
+1159517952,1159518015,US
+1159518016,1159518047,CA
+1159518048,1159518191,US
+1159518192,1159518199,CA
+1159518200,1159519743,US
1159519744,1159520767,CA
-1159520768,1159520799,US
-1159520800,1159520831,CA
-1159520832,1159520863,US
-1159520864,1159520871,CA
-1159520872,1159520895,US
-1159520896,1159520959,CA
-1159520960,1159520975,US
-1159520976,1159521007,CA
-1159521008,1159521087,US
-1159521088,1159521199,CA
-1159521200,1159521215,US
-1159521216,1159521823,CA
-1159521824,1159521855,US
-1159521856,1159522031,CA
-1159522032,1159522047,US
-1159522048,1159522095,CA
-1159522096,1159522111,US
-1159522112,1159522143,CA
-1159522144,1159522167,US
-1159522168,1159522175,CA
-1159522176,1159522207,US
-1159522208,1159522239,CA
-1159522240,1159522271,US
-1159522272,1159522287,CA
-1159522288,1159522815,US
-1159522816,1159523327,CA
-1159523328,1159523583,US
+1159520768,1159521279,US
+1159521280,1159521791,CA
+1159521792,1159522815,US
+1159522816,1159523071,CA
+1159523072,1159523583,US
1159523584,1159524351,CA
1159524352,1159525375,US
1159525376,1159526399,CA
1159526400,1159527935,US
1159527936,1159528191,CA
-1159528192,1159656487,US
-1159656488,1159656495,BR
-1159656496,1159657023,US
-1159657024,1159657039,AU
-1159657040,1159668479,US
-1159668480,1159668735,CA
-1159668736,1159673471,US
-1159673472,1159673503,CA
-1159673504,1159676927,US
-1159676928,1159677183,US
-1159677184,1159693871,US
-1159693872,1159693887,HN
-1159693888,1159694591,US
+1159528192,1159694591,US
1159694592,1159694847,CA
1159694848,1159700479,US
1159700480,1159725055,CA
-1159725056,1159995647,US
-1159995648,1159995655,AU
-1159995656,1159996063,US
-1159996064,1159996079,GB
-1159996080,1159996287,US
-1159996288,1159996319,AU
-1159996320,1159996383,US
-1159996384,1159996415,AU
-1159996416,1159997623,US
-1159997624,1159997631,SC
-1159997632,1159998575,US
-1159998576,1159998583,UG
-1159998584,1159998703,US
-1159998704,1159998711,RS
-1159998712,1160011775,US
-1160011776,1160012783,CA
-1160012784,1160012791,US
-1160012792,1160013399,CA
-1160013400,1160013423,US
-1160013424,1160013463,CA
-1160013464,1160013479,US
-1160013480,1160013647,CA
-1160013648,1160013663,US
-1160013664,1160013679,CA
-1160013680,1160013687,US
-1160013688,1160014775,CA
-1160014776,1160014783,US
-1160014784,1160014959,CA
-1160014960,1160014967,US
-1160014968,1160015007,CA
-1160015008,1160015015,US
-1160015016,1160015031,CA
-1160015032,1160015039,US
-1160015040,1160015063,CA
-1160015064,1160015071,US
-1160015072,1160015143,CA
-1160015144,1160015151,US
-1160015152,1160015167,CA
-1160015168,1160015191,US
-1160015192,1160015231,CA
-1160015232,1160015239,US
-1160015240,1160015279,CA
-1160015280,1160015287,US
-1160015288,1160015311,CA
-1160015312,1160015327,US
-1160015328,1160015999,CA
-1160016000,1160016095,US
-1160016096,1160016183,CA
-1160016184,1160016191,US
-1160016192,1160016223,CA
-1160016224,1160016239,US
-1160016240,1160016247,CA
-1160016248,1160016263,US
-1160016264,1160016271,CA
-1160016272,1160016279,US
-1160016280,1160016295,CA
-1160016296,1160016319,US
-1160016320,1160016343,CA
-1160016344,1160016351,US
-1160016352,1160016359,CA
-1160016360,1160016383,US
-1160016384,1160016895,CA
-1160016896,1160016903,US
-1160016904,1160016943,CA
-1160016944,1160016951,US
-1160016952,1160017023,CA
-1160017024,1160017031,US
-1160017032,1160017143,CA
-1160017144,1160017159,US
-1160017160,1160019967,CA
-1160019968,1160357942,US
-1160357943,1160357943,US
-1160357944,1160364031,US
+1159725056,1160011775,US
+1160011776,1160019967,CA
+1160019968,1160202239,US
+1160202240,1160202495,CA
+1160202496,1160364031,US
1160364032,1160368127,CA
1160368128,1160373247,US
-1160373248,1160373407,AE
-1160373408,1160373439,US
-1160373440,1160373503,AE
+1160373248,1160373503,AE
1160373504,1160392703,US
1160392704,1160396799,CA
-1160396800,1160405631,US
-1160405632,1160406015,DO
-1160406016,1160406271,US
-1160406272,1160406303,VE
-1160406304,1160406319,US
+1160396800,1160405759,US
+1160405760,1160406015,DO
+1160406016,1160406319,US
1160406320,1160406335,DO
-1160406336,1160406431,US
-1160406432,1160406447,ES
-1160406448,1160406479,US
-1160406480,1160406487,A2
-1160406488,1160408319,US
+1160406336,1160408319,US
1160408320,1160408575,CA
1160408576,1160409599,US
1160409600,1160410111,CO
-1160410112,1160410287,US
-1160410288,1160410303,DO
-1160410304,1160410447,US
-1160410448,1160410463,UY
-1160410464,1160410479,TT
-1160410480,1160410495,US
-1160410496,1160410511,PR
+1160410112,1160410511,US
1160410512,1160410519,EC
1160410520,1160410551,US
1160410552,1160410559,EC
-1160410560,1160411407,US
-1160411408,1160411423,GB
-1160411424,1160411567,US
-1160411568,1160411583,BR
-1160411584,1160412863,US
-1160412864,1160412879,GT
-1160412880,1160415637,US
-1160415638,1160415733,KN
-1160415734,1160415746,US
-1160415747,1160415776,CA
-1160415777,1160425471,US
+1160410560,1160425471,US
1160425472,1160429567,CA
-1160429568,1160433695,US
-1160433696,1160433711,GR
-1160433712,1160434015,US
-1160434016,1160434047,GB
-1160434048,1160434111,PT
-1160434112,1160434303,US
-1160434304,1160434367,NL
-1160434368,1160434559,US
-1160434560,1160434623,GB
-1160434624,1160434879,US
-1160434880,1160434943,IN
-1160434944,1160435007,US
-1160435008,1160435199,IN
-1160435200,1160436543,US
-1160436544,1160436575,ID
-1160436576,1160436607,CO
-1160436608,1160436799,US
-1160436800,1160436863,PK
-1160436864,1160436927,PT
-1160436928,1160437119,US
-1160437120,1160437183,IT
-1160437184,1160437247,US
-1160437248,1160437279,PT
-1160437280,1160437343,US
-1160437344,1160437375,CA
-1160437376,1160437503,US
-1160437504,1160437535,PT
-1160437536,1160437695,US
-1160437696,1160437759,IN
-1160437760,1160479343,US
-1160479344,1160479359,MX
-1160479360,1160486911,US
+1160429568,1160486911,US
1160486912,1160487423,AU
-1160487424,1160496615,US
-1160496616,1160496623,CA
-1160496624,1160503295,US
-1160503296,1160503871,A2
-1160503872,1160503903,US
-1160503904,1160504159,A2
-1160504160,1160504175,US
-1160504176,1160504191,A2
-1160504192,1160504207,AU
-1160504208,1160504287,A2
-1160504288,1160504303,US
-1160504304,1160504319,A2
-1160504320,1160504383,US
-1160504384,1160504511,A2
-1160504512,1160504543,NP
-1160504544,1160504575,AF
-1160504576,1160505343,A2
+1160487424,1160505343,US
1160505344,1160505855,AU
-1160505856,1160507391,A2
-1160507392,1160542207,US
-1160542208,1160542239,LB
-1160542240,1160543327,US
-1160543328,1160543359,MX
-1160543360,1160547839,US
+1160505856,1160547839,US
1160547840,1160548351,MX
1160548352,1160563199,US
1160563200,1160563711,MP
1160563712,1160609791,US
1160609792,1160610815,MX
-1160610816,1160660417,US
-1160660418,1160660418,US
-1160660419,1160661639,US
-1160661640,1160661647,GB
-1160661648,1160662743,US
-1160662744,1160662751,GB
-1160662752,1160663679,US
-1160663680,1160663711,HK
-1160663712,1160665623,US
-1160665624,1160665631,GB
-1160665632,1160665807,US
-1160665808,1160665815,GB
-1160665816,1160667087,US
-1160667088,1160667095,GB
-1160667096,1160667135,US
-1160667136,1160675327,CA
-1160675328,1160677247,US
-1160677248,1160677279,GB
-1160677280,1160677375,US
-1160677376,1160677439,GB
-1160677440,1160678399,US
+1160610816,1160667135,US
+1160667136,1160667903,CA
+1160667904,1160668159,US
+1160668160,1160675327,CA
+1160675328,1160678399,US
1160678400,1160678655,MX
1160678656,1160683519,US
-1160683520,1160684039,CA
-1160684040,1160684047,US
-1160684048,1160684063,CA
-1160684064,1160684071,US
-1160684072,1160684887,CA
-1160684888,1160684895,US
-1160684896,1160686567,CA
-1160686568,1160686575,US
-1160686576,1160687271,CA
-1160687272,1160687279,US
-1160687280,1160687583,CA
-1160687584,1160687591,US
-1160687592,1160688555,CA
-1160688556,1160688578,US
-1160688579,1160688687,CA
-1160688688,1160688695,US
-1160688696,1160688703,CA
-1160688704,1160688711,US
-1160688712,1160688767,CA
-1160688768,1160688783,US
-1160688784,1160688815,CA
-1160688816,1160688823,US
-1160688824,1160688831,CA
-1160688832,1160688839,US
-1160688840,1160689419,CA
-1160689420,1160689447,US
-1160689448,1160689531,CA
-1160689532,1160689571,US
-1160689572,1160689693,CA
-1160689694,1160689732,US
-1160689733,1160689733,CA
-1160689734,1160689741,US
-1160689742,1160689766,CA
-1160689767,1160689778,US
-1160689779,1160689789,CA
-1160689790,1160689799,US
-1160689800,1160689800,CA
-1160689801,1160689811,US
-1160689812,1160689834,CA
-1160689835,1160689846,US
-1160689847,1160689861,CA
-1160689862,1160689887,US
-1160689888,1160690349,CA
-1160690350,1160690361,US
-1160690362,1160690362,CA
-1160690363,1160690381,US
-1160690382,1160690386,CA
-1160690387,1160690415,US
-1160690416,1160690447,CA
-1160690448,1160690455,US
-1160690456,1160690559,CA
-1160690560,1160690607,US
-1160690608,1160690695,CA
-1160690696,1160690727,US
-1160690728,1160690735,CA
-1160690736,1160690751,US
-1160690752,1160690783,CA
-1160690784,1160690791,US
-1160690792,1160690807,CA
-1160690808,1160690823,US
-1160690824,1160690911,CA
-1160690912,1160690919,US
-1160690920,1160690951,CA
-1160690952,1160690959,US
-1160690960,1160691011,CA
-1160691012,1160691027,US
-1160691028,1160691551,CA
-1160691552,1160691567,US
-1160691568,1160691591,CA
-1160691592,1160691599,US
-1160691600,1160691615,CA
-1160691616,1160691631,US
-1160691632,1160691639,CA
-1160691640,1160691647,US
-1160691648,1160691671,CA
-1160691672,1160691679,US
-1160691680,1160691711,CA
-1160691712,1160808255,US
-1160808256,1160808287,CA
-1160808288,1160810495,US
+1160683520,1160691711,CA
+1160691712,1160810495,US
1160810496,1160810751,CA
-1160810752,1160811551,US
-1160811552,1160811559,BE
-1160811560,1160847359,US
+1160810752,1160847359,US
1160847360,1160855551,CA
1160855552,1160863999,US
1160864000,1160864255,CA
-1160864256,1160905215,US
-1160905216,1160905471,US
-1160905472,1160921087,US
+1160864256,1160921087,US
1160921088,1160925183,AG
-1160925184,1160938879,US
-1160938880,1160938887,NL
-1160938888,1160941463,US
-1160941464,1160941471,RU
-1160941472,1160941503,US
-1160941504,1160941511,CA
-1160941512,1160941535,US
-1160941536,1160941567,CA
-1160941568,1160945663,US
+1160925184,1160945663,US
1160945664,1160953855,CA
-1160953856,1160956431,US
-1160956432,1160956440,BY
-1160956441,1160957738,US
-1160957739,1160957752,CA
-1160957753,1161019391,US
+1160953856,1161019391,US
1161019392,1161035775,CA
1161035776,1161052671,US
1161052672,1161052927,GB
-1161052928,1161293823,US
+1161052928,1161053439,US
+1161053440,1161053695,GB
+1161053696,1161293823,US
1161293824,1161297919,CA
-1161297920,1161298303,US
-1161298304,1161298311,IL
-1161298312,1161304591,US
-1161304592,1161304599,AU
-1161304600,1161311743,US
-1161311744,1161311751,KN
-1161311752,1161311991,US
-1161311992,1161311999,KN
-1161312000,1161312839,US
-1161312840,1161312855,BS
-1161312856,1161312863,US
-1161312864,1161312871,BS
-1161312872,1161312991,US
-1161312992,1161312999,IL
-1161313000,1161313127,US
-1161313128,1161313135,BS
-1161313136,1161314151,US
-1161314152,1161314159,CA
-1161314160,1161363455,US
+1161297920,1161363455,US
1161363456,1161367551,CA
1161367552,1161416703,US
1161416704,1161420799,CA
-1161420800,1161421151,AG
-1161421152,1161421167,MS
-1161421168,1161421311,AG
+1161420800,1161421311,AG
1161421312,1161421567,AI
1161421568,1161422079,AG
1161422080,1161422335,VG
@@ -37722,941 +12285,62 @@
1161425152,1161425407,DM
1161425408,1161425663,AG
1161425664,1161425919,AI
-1161425920,1161425935,AG
-1161425936,1161425951,MS
-1161425952,1161426143,AG
-1161426144,1161426175,MS
-1161426176,1161426943,AG
+1161425920,1161426943,AG
1161426944,1161427199,AI
1161427200,1161427455,VG
-1161427456,1161427487,AG
-1161427488,1161427519,MS
-1161427520,1161428223,AG
+1161427456,1161428223,AG
1161428224,1161428991,KN
1161428992,1161429247,US
1161429248,1161429503,CA
1161429504,1161429759,US
-1161429760,1161429767,VN
-1161429768,1161429775,PL
-1161429776,1161429783,US
-1161429784,1161429807,CA
-1161429808,1161429855,US
-1161429856,1161429879,CA
-1161429880,1161429887,SG
-1161429888,1161429927,CA
-1161429928,1161429943,US
-1161429944,1161430015,CA
-1161430016,1161430023,US
-1161430024,1161430039,CA
-1161430040,1161430047,US
-1161430048,1161430087,CA
-1161430088,1161430095,MY
-1161430096,1161430103,US
-1161430104,1161430111,MY
-1161430112,1161430127,CA
-1161430128,1161430135,US
-1161430136,1161430207,CA
-1161430208,1161430215,US
-1161430216,1161430231,CA
-1161430232,1161430239,TR
-1161430240,1161430255,CA
-1161430256,1161430263,PY
-1161430264,1161430271,SK
-1161430272,1161430398,US
-1161430399,1161430399,CA
-1161430400,1161430431,US
-1161430432,1161430463,CA
-1161430464,1161430526,US
-1161430527,1161430527,CA
-1161430528,1161430719,US
-1161430720,1161430743,CA
-1161430744,1161430751,IT
-1161430752,1161430759,TH
-1161430760,1161431063,CA
-1161431064,1161431071,US
-1161431072,1161431087,CA
-1161431088,1161431095,AU
-1161431096,1161431111,CA
-1161431112,1161431127,GR
-1161431128,1161431167,CA
-1161431168,1161431175,CY
-1161431176,1161431191,CA
-1161431192,1161431199,CY
-1161431200,1161431263,CA
-1161431264,1161431279,US
-1161431280,1161431359,CA
-1161431360,1161431367,US
-1161431368,1161431375,CA
-1161431376,1161431383,HR
-1161431384,1161431391,CA
-1161431392,1161431407,US
-1161431408,1161431415,RU
-1161431416,1161431423,CA
-1161431424,1161431486,US
-1161431487,1161431495,CA
-1161431496,1161431503,IN
-1161431504,1161431511,US
-1161431512,1161431519,CA
-1161431520,1161431527,US
-1161431528,1161431535,CA
-1161431536,1161431543,US
-1161431544,1161431551,QA
-1161431552,1161432127,CA
-1161432128,1161432319,NO
-1161432320,1161432575,IN
-1161432576,1161433087,US
+1161429760,1161431039,CA
+1161431040,1161433087,US
1161433088,1161437183,CA
1161437184,1161453567,US
1161453568,1161457663,CA
-1161457664,1161501443,US
-1161501444,1161501470,TR
-1161501471,1161576447,US
-1161576448,1161580543,CA
-1161580544,1161586559,US
-1161586560,1161586623,US
-1161586624,1161586687,US
+1161457664,1161576447,US
+1161576448,1161578111,CA
+1161578112,1161578239,US
+1161578240,1161580543,CA
+1161580544,1161586687,US
1161586688,1161586943,PA
1161586944,1161617407,US
1161617408,1161625599,CA
-1161625600,1161627671,US
-1161627672,1161627679,BR
-1161627680,1161627687,US
-1161627688,1161627695,HR
-1161627696,1161627703,US
+1161625600,1161627703,US
1161627704,1161627711,DE
-1161627712,1161627727,US
-1161627728,1161627743,AR
-1161627744,1161627807,US
-1161627808,1161627815,HR
-1161627816,1161627819,US
-1161627820,1161627823,CA
-1161627824,1161627831,AU
-1161627832,1161627839,US
-1161627840,1161627847,AR
-1161627848,1161627855,US
-1161627856,1161627863,AR
-1161627864,1161627871,US
-1161627872,1161627879,BG
-1161627880,1161628455,US
-1161628456,1161628463,GB
-1161628464,1161628527,US
-1161628528,1161628535,BR
-1161628536,1161628607,US
-1161628608,1161628639,AR
-1161628640,1161628647,IN
-1161628648,1161628663,US
-1161628664,1161628671,AR
-1161628672,1161629199,US
-1161629200,1161629215,HR
-1161629216,1161629239,US
-1161629240,1161629247,PL
-1161629248,1161629263,US
-1161629264,1161629271,BR
-1161629272,1161629343,US
-1161629344,1161629375,FI
-1161629376,1161629383,CA
-1161629384,1161629391,AR
-1161629392,1161629519,US
-1161629520,1161629527,SE
-1161629528,1161629535,MY
-1161629536,1161629543,US
-1161629544,1161629551,PL
-1161629552,1161629583,US
-1161629584,1161629599,GB
-1161629600,1161629607,PL
-1161629608,1161629663,US
-1161629664,1161629671,AU
-1161629672,1161629695,US
-1161629696,1161629703,IN
-1161629704,1161629751,US
-1161629752,1161629759,AU
-1161629760,1161629767,IL
-1161629768,1161629775,US
-1161629776,1161629791,PL
-1161629792,1161629799,US
-1161629800,1161629807,IL
-1161629808,1161629815,GB
-1161629816,1161629823,BR
-1161629824,1161629839,PL
-1161629840,1161629847,US
-1161629848,1161629855,PL
-1161629856,1161629863,AR
-1161629864,1161629887,US
-1161629888,1161629903,CY
-1161629904,1161629911,AR
-1161629912,1161629919,US
-1161629920,1161629935,GB
-1161629936,1161629943,ES
-1161629944,1161630247,US
-1161630248,1161630255,HR
-1161630256,1161630263,NL
-1161630264,1161630271,AR
-1161630272,1161630335,US
-1161630336,1161630343,AR
-1161630344,1161630351,IL
-1161630352,1161630383,US
-1161630384,1161630391,AR
-1161630392,1161630399,US
-1161630400,1161630431,GB
-1161630432,1161630439,PL
-1161630440,1161630447,HR
-1161630448,1161630455,IN
-1161630456,1161630463,NL
-1161630464,1161630743,US
-1161630744,1161630751,PL
-1161630752,1161630895,US
-1161630896,1161630911,DK
-1161630912,1161630919,KW
-1161630920,1161630927,IN
-1161630928,1161630935,US
-1161630936,1161630943,SI
-1161630944,1161630951,US
-1161630952,1161630959,TR
-1161630960,1161631015,US
-1161631016,1161631023,IN
-1161631024,1161631071,US
-1161631072,1161631079,HR
-1161631080,1161631159,US
-1161631160,1161631167,CA
-1161631168,1161631479,US
-1161631480,1161631487,GB
-1161631488,1161631615,US
-1161631616,1161631623,IN
-1161631624,1161631743,US
-1161631744,1161631751,PL
-1161631752,1161632631,US
-1161632632,1161632639,GB
-1161632640,1161632927,US
-1161632928,1161632943,PL
-1161632944,1161633215,US
-1161633216,1161633231,EE
-1161633232,1161633543,US
-1161633544,1161633551,AR
-1161633552,1161633559,US
-1161633560,1161633567,IL
-1161633568,1161633583,US
-1161633584,1161633591,HR
-1161633592,1161633615,US
-1161633616,1161633623,IL
-1161633624,1161634079,US
+1161627712,1161631623,US
+1161631624,1161631631,KW
+1161631632,1161634079,US
1161634080,1161634087,AF
-1161634088,1161634135,US
-1161634136,1161634143,PH
-1161634144,1161634175,AR
-1161634176,1161634191,PL
-1161634192,1161634199,US
-1161634200,1161634207,NZ
-1161634208,1161634223,US
-1161634224,1161634239,PL
-1161634240,1161634247,GB
-1161634248,1161634255,IN
-1161634256,1161634319,US
-1161634320,1161634327,IN
-1161634328,1161634335,US
-1161634336,1161634367,PL
-1161634368,1161634495,US
-1161634496,1161634503,GB
-1161634504,1161634519,US
-1161634520,1161634527,BG
-1161634528,1161634543,GB
-1161634544,1161634559,US
+1161634088,1161634559,US
1161634560,1161634815,IN
-1161634816,1161634911,US
-1161634912,1161634927,GB
-1161634928,1161635007,US
-1161635008,1161635071,KW
-1161635072,1161635871,US
-1161635872,1161635887,PL
-1161635888,1161635967,US
-1161635968,1161636031,AF
-1161636032,1161636095,US
-1161636096,1161636127,GB
-1161636128,1161636159,US
-1161636160,1161636223,IL
-1161636224,1161636287,GB
-1161636288,1161636303,US
-1161636304,1161636311,PL
-1161636312,1161636415,US
-1161636416,1161636447,GB
-1161636448,1161636455,US
-1161636456,1161636463,PL
-1161636464,1161636479,US
-1161636480,1161636511,GB
-1161636512,1161636583,US
-1161636584,1161636591,IN
-1161636592,1161636607,US
-1161636608,1161636639,AF
-1161636640,1161637175,US
-1161637176,1161637183,PL
-1161637184,1161637359,US
-1161637360,1161637367,IN
-1161637368,1161637655,US
-1161637656,1161637663,IL
-1161637664,1161637679,US
-1161637680,1161637695,AR
-1161637696,1161637775,US
-1161637776,1161637783,GB
-1161637784,1161639039,US
-1161639040,1161639047,CA
-1161639048,1161639119,US
-1161639120,1161639127,DK
-1161639128,1161639511,US
-1161639512,1161639519,GB
-1161639520,1161639575,US
-1161639576,1161639583,BG
-1161639584,1161639687,US
-1161639688,1161639695,KW
-1161639696,1161639959,US
-1161639960,1161639967,GB
-1161639968,1161640015,US
-1161640016,1161640023,PL
-1161640024,1161640031,AR
-1161640032,1161640095,US
-1161640096,1161640127,AR
-1161640128,1161640767,US
-1161640768,1161640783,RO
-1161640784,1161640791,GB
-1161640792,1161640831,US
-1161640832,1161640863,AF
-1161640864,1161640895,AR
-1161640896,1161641375,US
-1161641376,1161641383,KW
-1161641384,1161641887,US
-1161641888,1161641911,KW
-1161641912,1161642031,US
-1161642032,1161642039,GB
-1161642040,1161642527,US
-1161642528,1161642559,AF
-1161642560,1161642591,US
-1161642592,1161642595,IN
-1161642596,1161647135,US
-1161647136,1161647167,AF
-1161647168,1161649407,US
+1161634816,1161649407,US
1161649408,1161649663,AR
-1161649664,1161650199,US
-1161650200,1161650207,BG
-1161650208,1161650239,US
-1161650240,1161650247,IN
-1161650248,1161650327,US
-1161650328,1161650343,AR
-1161650344,1161650359,US
-1161650360,1161650367,IL
-1161650368,1161650375,ES
-1161650376,1161650391,US
-1161650392,1161650399,CA
-1161650400,1161650415,US
-1161650416,1161650423,PL
-1161650424,1161650719,US
-1161650720,1161650751,GB
-1161650752,1161650799,US
-1161650800,1161650815,SI
-1161650816,1161650823,US
-1161650824,1161650831,AU
-1161650832,1161650847,US
-1161650848,1161650863,AR
-1161650864,1161650879,US
-1161650880,1161650895,GB
-1161650896,1161650927,US
-1161650928,1161650935,HR
-1161650936,1161650943,US
-1161650944,1161650951,SI
-1161650952,1161650967,US
-1161650968,1161650975,SI
-1161650976,1161651071,US
-1161651072,1161651079,HR
-1161651080,1161651095,US
-1161651096,1161651103,HR
-1161651104,1161651135,GB
-1161651136,1161651143,BG
-1161651144,1161651967,US
-1161651968,1161651999,AF
-1161652000,1161652095,US
-1161652096,1161652103,CY
-1161652104,1161652135,US
-1161652136,1161652143,IN
-1161652144,1161652159,GB
-1161652160,1161653023,US
-1161653024,1161653055,AR
-1161653056,1161653791,US
-1161653792,1161653799,SI
-1161653800,1161653831,US
-1161653832,1161653839,HR
-1161653840,1161653847,US
-1161653848,1161653855,SI
-1161653856,1161653887,US
-1161653888,1161653951,SE
-1161653952,1161654263,US
-1161654264,1161654271,SI
-1161654272,1161657663,US
-1161657664,1161657695,AF
-1161657696,1161658143,US
-1161658144,1161658151,SI
-1161658152,1161658159,US
-1161658160,1161658175,GB
-1161658176,1161658239,US
-1161658240,1161658271,AF
-1161658272,1161764863,US
+1161649664,1161764863,US
1161764864,1161773055,CA
1161773056,1161777151,SZ
-1161777152,1161793851,US
-1161793852,1161793860,PA
-1161793861,1161793911,US
-1161793912,1161793912,IT
-1161793913,1161793916,US
-1161793917,1161793917,IT
-1161793918,1161793920,US
-1161793921,1161793929,IT
-1161793930,1161794011,US
-1161794012,1161794020,AO
-1161794021,1161794036,US
-1161794037,1161794037,IT
-1161794038,1161794039,US
-1161794040,1161794040,IT
-1161794041,1161794468,US
-1161794469,1161794472,ZA
-1161794473,1161795643,US
-1161795644,1161795647,CA
-1161795648,1161795663,US
-1161795664,1161795667,BR
-1161795668,1161795979,US
-1161795980,1161795983,CA
-1161795984,1161796099,US
-1161796100,1161796103,CZ
-1161796104,1161818111,US
+1161777152,1161818111,US
1161818112,1161822207,CA
-1161822208,1161830401,US
-1161830402,1161830402,LT
-1161830403,1161830417,US
-1161830418,1161830418,JP
-1161830419,1161830425,US
+1161822208,1161830425,US
1161830426,1161830426,UA
-1161830427,1161830427,US
-1161830428,1161830428,DE
-1161830429,1161830438,US
-1161830439,1161830439,CA
-1161830440,1161830449,US
-1161830450,1161830450,HR
-1161830451,1161830465,US
-1161830466,1161830466,BR
-1161830467,1161830471,US
-1161830472,1161830472,GB
-1161830473,1161830477,US
-1161830478,1161830478,DO
-1161830479,1161830479,US
-1161830480,1161830480,BY
-1161830481,1161830493,US
-1161830494,1161830494,PK
-1161830495,1161830497,US
-1161830498,1161830498,VN
-1161830499,1161830505,US
-1161830506,1161830506,MX
-1161830507,1161830554,US
-1161830555,1161830555,BR
-1161830556,1161830582,US
-1161830583,1161830583,AE
-1161830584,1161830613,US
-1161830614,1161830614,EC
-1161830615,1161830620,US
-1161830621,1161830621,CA
-1161830622,1161830639,US
-1161830640,1161830640,BR
-1161830641,1161830662,US
-1161830663,1161830664,BR
-1161830665,1161830683,US
-1161830684,1161830684,BR
-1161830685,1161830694,US
-1161830695,1161830695,UA
-1161830696,1161830696,GT
-1161830697,1161830707,US
-1161830708,1161830708,PK
-1161830709,1161830721,US
-1161830722,1161830722,CY
-1161830723,1161830753,US
-1161830754,1161830754,CA
-1161830755,1161830758,US
-1161830759,1161830759,UA
-1161830760,1161830779,US
-1161830780,1161830780,BE
-1161830781,1161830784,US
-1161830785,1161830785,CY
-1161830786,1161830798,US
-1161830799,1161830799,MX
-1161830800,1161830800,BE
-1161830801,1161830804,US
-1161830805,1161830805,BE
-1161830806,1161830806,BD
-1161830807,1161830807,CA
-1161830808,1161830811,US
-1161830812,1161830812,DE
-1161830813,1161830813,US
-1161830814,1161830814,CA
-1161830815,1161830815,US
-1161830816,1161830816,CN
-1161830817,1161830817,US
-1161830818,1161830818,CA
-1161830819,1161830819,CN
-1161830820,1161830820,PK
-1161830821,1161830821,CY
-1161830822,1161830822,CN
-1161830823,1161830825,US
-1161830826,1161830826,UA
-1161830827,1161830832,US
-1161830833,1161830833,CN
-1161830834,1161830839,US
-1161830840,1161830840,PK
-1161830841,1161830842,US
-1161830843,1161830843,PK
-1161830844,1161830844,CL
-1161830845,1161830845,US
-1161830846,1161830846,MD
-1161830847,1161830852,US
-1161830853,1161830853,CO
-1161830854,1161830866,US
-1161830867,1161830867,VN
-1161830868,1161830881,US
-1161830882,1161830882,CA
-1161830883,1161830893,US
-1161830894,1161830894,BE
-1161830895,1161830895,BR
-1161830896,1161830928,US
-1161830929,1161830929,MX
-1161830930,1161830933,US
-1161830934,1161830934,MX
-1161830935,1161830944,US
-1161830945,1161830945,MX
-1161830946,1161831001,US
-1161831002,1161831002,MD
-1161831003,1161831015,US
-1161831016,1161831016,MX
-1161831017,1161831025,US
-1161831026,1161831026,MX
-1161831027,1161831052,US
-1161831053,1161831053,MX
-1161831054,1161831059,US
-1161831060,1161831060,BR
-1161831061,1161831123,US
-1161831124,1161831124,BR
-1161831125,1161831128,US
-1161831129,1161831129,CN
-1161831130,1161831131,US
-1161831132,1161831132,MD
-1161831133,1161831136,US
-1161831137,1161831139,PK
-1161831140,1161831178,US
-1161831179,1161831180,CA
-1161831181,1161831181,US
-1161831182,1161831182,AR
-1161831183,1161831187,US
-1161831188,1161831189,CA
-1161831190,1161831190,US
-1161831191,1161831191,CA
-1161831192,1161831202,US
-1161831203,1161831203,RO
-1161831204,1161831204,US
-1161831205,1161831205,BR
-1161831206,1161831208,US
-1161831209,1161831209,UA
-1161831210,1161831236,US
-1161831237,1161831237,MX
-1161831238,1161831241,US
-1161831242,1161831247,CO
-1161831248,1161831250,US
-1161831251,1161831251,DE
-1161831252,1161831254,US
-1161831255,1161831255,ID
-1161831256,1161831259,US
-1161831260,1161831261,GE
-1161831262,1161831262,MX
-1161831263,1161831263,US
-1161831264,1161831264,TH
-1161831265,1161831265,DE
-1161831266,1161831269,US
-1161831270,1161831270,DE
-1161831271,1161831271,US
-1161831272,1161831272,BR
-1161831273,1161831273,DE
-1161831274,1161831274,IN
-1161831275,1161831276,US
-1161831277,1161831277,IN
-1161831278,1161831278,RU
-1161831279,1161831281,DE
-1161831282,1161831282,GE
-1161831283,1161831283,BR
-1161831284,1161831285,US
-1161831286,1161831286,DE
-1161831287,1161831287,BR
-1161831288,1161831288,US
-1161831289,1161831289,UY
-1161831290,1161831290,BR
-1161831291,1161831299,US
-1161831300,1161831301,CA
-1161831302,1161831302,BR
-1161831303,1161831303,US
-1161831304,1161831304,BR
-1161831305,1161831306,US
-1161831307,1161831307,CO
-1161831308,1161831308,US
-1161831309,1161831309,PK
-1161831310,1161831314,US
-1161831315,1161831315,PK
-1161831316,1161831318,US
-1161831319,1161831319,JP
-1161831320,1161831326,US
-1161831327,1161831327,PK
-1161831328,1161831328,DE
-1161831329,1161831329,BR
-1161831330,1161831330,CA
-1161831331,1161831331,EC
-1161831332,1161831334,US
-1161831335,1161831335,CA
-1161831336,1161831338,US
-1161831339,1161831340,MX
-1161831341,1161831341,US
-1161831342,1161831342,MX
-1161831343,1161831343,BR
-1161831344,1161831344,CA
-1161831345,1161831346,US
-1161831347,1161831347,CA
-1161831348,1161831364,US
-1161831365,1161831365,IN
-1161831366,1161831366,PK
-1161831367,1161831368,US
-1161831369,1161831369,PK
-1161831370,1161831370,BR
-1161831371,1161831371,HU
-1161831372,1161831375,US
-1161831376,1161831377,BR
-1161831378,1161831378,BD
-1161831379,1161831380,PK
-1161831381,1161831382,US
-1161831383,1161831384,CO
+1161830427,1161830596,US
+1161830597,1161830597,UA
+1161830598,1161831384,US
1161831385,1161831385,UA
-1161831386,1161831388,US
-1161831389,1161831390,CA
-1161831391,1161831391,US
-1161831392,1161831392,CA
-1161831393,1161831395,CO
-1161831396,1161831397,US
-1161831398,1161831399,SG
-1161831400,1161831400,BR
-1161831401,1161831401,ID
-1161831402,1161831402,AE
-1161831403,1161831404,US
-1161831405,1161831406,AE
-1161831407,1161831410,US
-1161831411,1161831411,SI
-1161831412,1161831412,US
-1161831413,1161831413,CO
-1161831414,1161831414,CA
-1161831415,1161831415,US
-1161831416,1161831416,JP
-1161831417,1161831478,US
-1161831479,1161831480,BR
-1161831481,1161831486,US
-1161831487,1161831487,DO
-1161831488,1161831541,US
-1161831542,1161831542,LV
-1161831543,1161831545,US
-1161831546,1161831546,BR
-1161831547,1161831588,US
-1161831589,1161831589,CA
-1161831590,1161831590,BR
-1161831591,1161831595,US
-1161831596,1161831596,UA
-1161831597,1161831631,US
-1161831632,1161831632,PK
-1161831633,1161831633,TH
-1161831634,1161831701,US
-1161831702,1161831702,IN
-1161831703,1161831733,US
-1161831734,1161831734,BR
-1161831735,1161831763,US
-1161831764,1161831764,GR
-1161831765,1161831981,US
-1161831982,1161831982,MX
-1161831983,1161832132,US
-1161832133,1161832133,IN
-1161832134,1161832174,US
-1161832175,1161832175,BR
-1161832176,1161832176,IN
-1161832177,1161832182,US
-1161832183,1161832183,BR
-1161832184,1161832188,US
-1161832189,1161832189,CA
-1161832190,1161832215,US
-1161832216,1161832216,BR
-1161832217,1161832231,US
-1161832232,1161832232,BE
-1161832233,1161832234,RU
-1161832235,1161832260,US
-1161832261,1161832261,IN
-1161832262,1161832288,US
-1161832289,1161832289,BR
-1161832290,1161832293,US
-1161832294,1161832294,BR
-1161832295,1161832303,US
-1161832304,1161832304,CL
-1161832305,1161832429,US
-1161832430,1161832430,IN
-1161832431,1161832451,US
-1161832452,1161832453,BR
-1161832454,1161832454,US
-1161832455,1161832455,CA
-1161832456,1161832456,RU
-1161832457,1161832457,AR
-1161832458,1161832458,BR
-1161832459,1161832461,DE
-1161832462,1161832464,IN
-1161832465,1161832465,CA
-1161832466,1161832466,US
-1161832467,1161832468,UY
-1161832469,1161832473,US
-1161832474,1161832475,CA
-1161832476,1161832476,US
-1161832477,1161832478,CA
-1161832479,1161832483,US
+1161831386,1161832483,US
1161832484,1161832484,UA
-1161832485,1161832485,TR
-1161832486,1161832486,US
-1161832487,1161832488,TR
-1161832489,1161832490,US
-1161832491,1161832491,CA
-1161832492,1161832503,US
-1161832504,1161832504,VN
-1161832505,1161832507,US
-1161832508,1161832508,BR
-1161832509,1161832509,MX
-1161832510,1161832510,MD
-1161832511,1161832516,US
-1161832517,1161832530,BR
-1161832531,1161832531,US
-1161832532,1161832536,BR
-1161832537,1161832537,US
-1161832538,1161832538,BR
-1161832539,1161832539,PK
-1161832540,1161832541,BR
-1161832542,1161832542,US
-1161832543,1161832543,BR
-1161832544,1161832545,US
-1161832546,1161832550,BR
-1161832551,1161832555,US
-1161832556,1161832556,BR
-1161832557,1161832558,IN
-1161832559,1161832559,BR
-1161832560,1161832562,US
-1161832563,1161832563,BR
-1161832564,1161832565,US
-1161832566,1161832566,BR
-1161832567,1161832583,US
-1161832584,1161832585,BR
-1161832586,1161832588,US
-1161832589,1161832589,IN
-1161832590,1161832591,US
-1161832592,1161832592,IN
-1161832593,1161832593,PK
-1161832594,1161832596,IN
-1161832597,1161832597,BR
-1161832598,1161832598,IN
-1161832599,1161832599,US
-1161832600,1161832607,IN
-1161832608,1161832616,US
-1161832617,1161832618,BR
-1161832619,1161832620,US
-1161832621,1161832622,BR
-1161832623,1161832623,CA
-1161832624,1161832625,US
-1161832626,1161832632,CA
-1161832633,1161832735,US
-1161832736,1161832738,AR
-1161832739,1161832739,US
-1161832740,1161832767,AR
-1161832768,1161832770,US
-1161832771,1161832782,BR
-1161832783,1161832799,US
-1161832800,1161832831,BR
-1161832832,1161832895,US
-1161832896,1161832901,AR
-1161832902,1161832927,IN
-1161832928,1161832959,LT
-1161832960,1161833015,US
-1161833016,1161833017,BR
-1161833018,1161833055,US
-1161833056,1161833057,PK
-1161833058,1161833062,US
-1161833063,1161833063,PK
-1161833064,1161833064,US
-1161833065,1161833072,PK
-1161833073,1161833073,US
-1161833074,1161833075,PK
-1161833076,1161833077,US
-1161833078,1161833081,BR
-1161833082,1161833097,US
-1161833098,1161833100,CA
-1161833101,1161833101,US
-1161833102,1161833128,CA
-1161833129,1161833129,US
-1161833130,1161833132,CA
-1161833133,1161833134,BR
-1161833135,1161833136,US
-1161833137,1161833138,BR
-1161833139,1161833139,US
-1161833140,1161833144,BR
-1161833145,1161833145,US
-1161833146,1161833151,BR
-1161833152,1161833152,US
-1161833153,1161833168,BR
-1161833169,1161833169,US
-1161833170,1161833170,BR
-1161833171,1161833964,US
-1161833965,1161833965,IL
-1161833966,1161835875,US
-1161835876,1161835877,BR
-1161835878,1161835878,US
-1161835879,1161835879,BR
-1161835880,1161835930,US
-1161835931,1161835931,BR
-1161835932,1161835941,US
-1161835942,1161835947,PK
-1161835948,1161835952,US
-1161835953,1161835954,PK
-1161835955,1161835955,US
-1161835956,1161835956,PK
-1161835957,1161835957,US
-1161835958,1161835961,PK
-1161835962,1161835969,US
-1161835970,1161835971,PK
-1161835972,1161836020,US
-1161836021,1161836028,CA
-1161836029,1161836063,US
-1161836064,1161836095,JP
-1161836096,1161836383,US
-1161836384,1161836415,CY
-1161836416,1161836446,US
-1161836447,1161836447,BR
-1161836448,1161837281,US
-1161837282,1161837282,CA
-1161837283,1161837336,US
-1161837337,1161837337,BR
-1161837338,1161837457,US
-1161837458,1161837458,CO
-1161837459,1161837502,US
-1161837503,1161837503,BR
-1161837504,1161837567,US
+1161832485,1161835225,US
+1161835226,1161835226,UA
+1161835227,1161835230,US
+1161835231,1161835231,PH
+1161835232,1161837567,US
1161837568,1161837823,JP
-1161837824,1161837825,US
-1161837826,1161837826,BR
-1161837827,1161837854,US
-1161837855,1161837856,BR
-1161837857,1161837858,US
-1161837859,1161837889,BR
-1161837890,1161837890,US
-1161837891,1161837894,BR
-1161837895,1161837895,US
-1161837896,1161837900,BR
-1161837901,1161837901,US
-1161837902,1161837906,BR
-1161837907,1161837907,US
-1161837908,1161837911,BR
-1161837912,1161837914,US
-1161837915,1161837922,BR
-1161837923,1161837924,US
-1161837925,1161837932,BR
-1161837933,1161837938,US
-1161837939,1161837940,BR
-1161837941,1161837946,PK
-1161837947,1161837947,US
-1161837948,1161837948,PK
-1161837949,1161837958,BR
-1161837959,1161837959,US
-1161837960,1161837971,BR
-1161837972,1161837974,US
-1161837975,1161837976,BR
-1161837977,1161837993,US
-1161837994,1161838000,BR
-1161838001,1161838001,US
-1161838002,1161838031,BR
-1161838032,1161838038,US
-1161838039,1161838045,BR
-1161838046,1161838046,US
-1161838047,1161838050,BR
-1161838051,1161838051,US
-1161838052,1161838068,BR
-1161838069,1161838069,US
-1161838070,1161838070,AT
-1161838071,1161838076,BR
-1161838077,1161838355,US
-1161838356,1161838358,SK
-1161838359,1161838435,US
-1161838436,1161838436,SG
-1161838437,1161838437,BR
-1161838438,1161838441,US
-1161838442,1161838442,BR
-1161838443,1161838452,US
-1161838453,1161838453,PH
-1161838454,1161838456,US
-1161838457,1161838458,RU
-1161838459,1161838459,US
-1161838460,1161838460,BR
-1161838461,1161838468,US
-1161838469,1161838469,DO
-1161838470,1161838475,US
-1161838476,1161838476,CA
-1161838477,1161838477,BR
-1161838478,1161838480,US
-1161838481,1161838481,CA
-1161838482,1161838484,US
-1161838485,1161838485,IN
-1161838486,1161838505,US
-1161838506,1161838506,CA
-1161838507,1161838511,US
-1161838512,1161838512,AU
-1161838513,1161838513,SG
-1161838514,1161838514,UY
-1161838515,1161838515,PK
-1161838516,1161838516,IN
-1161838517,1161838517,US
-1161838518,1161838518,IN
-1161838519,1161838521,US
-1161838522,1161838522,IN
-1161838523,1161838529,US
-1161838530,1161838530,PK
-1161838531,1161838535,US
-1161838536,1161838536,BR
-1161838537,1161838574,US
-1161838575,1161838575,CO
-1161838576,1161841101,US
-1161841102,1161841112,DE
-1161841113,1161842101,US
-1161842102,1161842109,CH
-1161842110,1161842932,US
-1161842933,1161842940,MX
-1161842941,1161842955,US
-1161842956,1161842963,CA
-1161842964,1161842970,US
-1161842971,1161842978,GB
-1161842979,1161843084,US
-1161843085,1161843092,MX
-1161843093,1161843098,US
-1161843099,1161843106,MX
-1161843107,1161843143,US
-1161843144,1161843153,CA
-1161843154,1161843245,US
-1161843246,1161843253,MX
-1161843254,1161865703,US
-1161865704,1161865711,EG
-1161865712,1161866111,US
-1161866112,1161866127,MT
-1161866128,1161886719,US
-1161886720,1161887231,DE
-1161887232,1161891527,US
-1161891528,1161891535,CA
-1161891536,1161891543,US
-1161891544,1161891551,CA
-1161891552,1161900863,US
-1161900864,1161900895,US
-1161900896,1161901647,US
-1161901648,1161901655,VN
-1161901656,1161925631,US
+1161837824,1161885695,US
+1161885696,1161886207,JP
+1161886208,1161886975,US
+1161886976,1161887231,DE
+1161887232,1161887743,AU
+1161887744,1161925631,US
1161925632,1161925887,EC
1161925888,1161926399,US
1161926400,1161926655,EC
@@ -38664,50 +12348,15 @@
1162018816,1162022911,CA
1162022912,1162027007,US
1162027008,1162031103,ZA
-1162031104,1162032255,US
-1162032256,1162032271,CA
-1162032272,1162032287,US
+1162031104,1162032287,US
1162032288,1162032303,BE
-1162032304,1162032359,US
-1162032360,1162032367,JO
-1162032368,1162032735,US
-1162032736,1162032767,CA
-1162032768,1162032831,DO
-1162032832,1162033247,US
-1162033248,1162033263,CA
-1162033264,1162033983,US
-1162033984,1162034015,IN
-1162034016,1162059775,US
+1162032304,1162059775,US
1162059776,1162067967,CA
-1162067968,1162204970,US
-1162204971,1162204972,US
-1162204973,1162215423,US
+1162067968,1162215423,US
1162215424,1162280959,CA
-1162280960,1162295343,US
-1162295344,1162295351,GB
-1162295352,1162296407,US
-1162296408,1162296415,CA
-1162296416,1162297343,US
+1162280960,1162297343,US
1162297344,1162305535,CA
-1162305536,1162313727,US
-1162313728,1162320127,A2
-1162320128,1162320383,US
-1162320384,1162321919,A2
-1162321920,1162394463,US
-1162394464,1162394471,GB
-1162394472,1162408617,US
-1162408618,1162408618,US
-1162408619,1162408783,US
-1162408784,1162408831,CR
-1162408832,1162409727,US
-1162409728,1162409983,US
-1162409984,1162451511,US
-1162451512,1162451512,IN
-1162451513,1162451598,US
-1162451599,1162451601,IN
-1162451602,1162457991,US
-1162457992,1162457999,ID
-1162458000,1162461183,US
+1162305536,1162461183,US
1162461184,1162461695,BB
1162461696,1162462207,GD
1162462208,1162462975,BB
@@ -38721,17 +12370,17 @@
1162473472,1162475007,GD
1162475008,1162477567,BB
1162477568,1162715135,US
-1162715136,1162716159,CA
-1162716160,1162716175,US
-1162716176,1162723327,CA
-1162723328,1162807295,US
+1162715136,1162723327,CA
+1162723328,1162806527,US
+1162806528,1162806783,PR
+1162806784,1162807295,US
1162807296,1162809343,PR
1162809344,1162811391,US
1162811392,1162811647,CW
1162811648,1162812159,US
1162812160,1162812415,DO
1162812416,1162813439,BS
-1162813440,1162817535,CW
+1162813440,1162817535,US
1162817536,1162821631,GT
1162821632,1162823679,US
1162823680,1162825727,GT
@@ -38747,7 +12396,8 @@
1162853376,1162854399,PR
1162854400,1162858495,JM
1162858496,1162862591,HN
-1162862592,1162870783,US
+1162862592,1162866687,PR
+1162866688,1162870783,US
1162870784,1162871295,BB
1162871296,1162879999,LC
1162880000,1162882559,DM
@@ -38755,130 +12405,17 @@
1162883840,1162884863,BB
1162884864,1162885887,VC
1162885888,1162887167,BB
-1162887168,1162925983,US
-1162925984,1162926015,AU
-1162926016,1162926071,US
-1162926072,1162926079,AU
-1162926080,1163395071,US
-1163395072,1163395823,A2
-1163395824,1163395827,NP
-1163395828,1163395831,AF
-1163395832,1163395839,A2
-1163395840,1163395847,BD
-1163395848,1163395855,ID
-1163395856,1163395863,BD
-1163395864,1163395871,ID
-1163395872,1163395879,PK
-1163395880,1163395911,ID
-1163395912,1163395919,BD
-1163395920,1163395927,ID
-1163395928,1163395943,BD
-1163395944,1163395951,A2
-1163395952,1163395959,PK
-1163395960,1163396023,ID
-1163396024,1163396031,PK
-1163396032,1163396079,ID
-1163396080,1163396087,BD
-1163396088,1163396143,ID
-1163396144,1163396151,BD
-1163396152,1163396191,ID
-1163396192,1163396199,A2
-1163396200,1163396207,ID
-1163396208,1163396215,A2
-1163396216,1163396231,ID
-1163396232,1163396239,A2
-1163396240,1163396247,ID
-1163396248,1163396255,BD
-1163396256,1163396287,ID
-1163396288,1163396295,A2
-1163396296,1163396303,BD
-1163396304,1163396319,A2
-1163396320,1163396327,BD
-1163396328,1163396343,ID
-1163396344,1163396351,A2
-1163396352,1163396383,ID
-1163396384,1163396399,A2
-1163396400,1163396431,BD
-1163396432,1163396519,A2
-1163396520,1163396527,ID
-1163396528,1163396559,A2
-1163396560,1163396575,ID
-1163396576,1163396623,A2
-1163396624,1163396639,ID
-1163396640,1163396655,A2
-1163396656,1163396671,BD
-1163396672,1163396687,A2
-1163396688,1163396719,BD
-1163396720,1163396831,A2
-1163396832,1163396895,BD
-1163396896,1163396927,ID
-1163396928,1163396991,A2
-1163396992,1163397023,BD
-1163397024,1163397055,A2
-1163397056,1163397087,BD
-1163397088,1163397119,A2
-1163397120,1163397247,NP
-1163397248,1163397375,BD
-1163397376,1163397471,A2
-1163397472,1163397479,US
-1163397480,1163397535,A2
-1163397536,1163397543,US
-1163397544,1163397575,A2
-1163397576,1163397583,BD
-1163397584,1163397663,A2
-1163397664,1163397695,BD
-1163397696,1163397791,A2
-1163397792,1163397807,AF
-1163397808,1163397855,A2
-1163397856,1163397887,US
-1163397888,1163398143,NP
-1163398144,1163398239,A2
-1163398240,1163398303,BD
-1163398304,1163398367,A2
-1163398368,1163398399,BD
-1163398400,1163398655,US
-1163398656,1163399039,BD
-1163399040,1163399103,A2
-1163399104,1163399295,BD
-1163399296,1163399679,A2
-1163399680,1163399807,US
-1163399808,1163399935,A2
-1163399936,1163400063,US
-1163400064,1163400447,A2
-1163400448,1163400703,BD
-1163400704,1163400719,PK
-1163400720,1163400727,ID
-1163400728,1163400735,A2
-1163400736,1163400743,PK
-1163400744,1163400751,A2
-1163400752,1163400759,PK
-1163400760,1163400839,A2
-1163400840,1163400847,ID
-1163400848,1163400887,A2
-1163400888,1163400927,ID
-1163400928,1163400959,A2
+1162887168,1163398655,US
+1163398656,1163398911,BD
+1163398912,1163400959,US
1163400960,1163401215,BD
-1163401216,1163401239,ID
-1163401240,1163401255,A2
-1163401256,1163401263,ID
-1163401264,1163401319,A2
-1163401320,1163401327,PK
-1163401328,1163401351,A2
-1163401352,1163401359,PK
-1163401360,1163401431,A2
-1163401432,1163401439,PK
-1163401440,1163401471,A2
+1163401216,1163401471,US
1163401472,1163401727,ID
-1163401728,1163401791,BD
-1163401792,1163401983,A2
-1163401984,1163402367,BD
-1163402368,1163402495,A2
-1163402496,1163402879,BD
-1163402880,1163403007,A2
-1163403008,1163403071,BD
-1163403072,1163403135,US
-1163403136,1163403263,A2
-1163403264,1163407359,US
+1163401728,1163401983,US
+1163401984,1163402239,BD
+1163402240,1163402495,US
+1163402496,1163402751,BD
+1163402752,1163407359,US
1163407360,1163411455,CA
1163411456,1163468799,US
1163468800,1163469055,PR
@@ -38887,493 +12424,200 @@
1163472896,1163479295,US
1163479296,1163479551,CA
1163479552,1163526143,US
-1163526144,1163526943,CA
-1163526944,1163526975,US
-1163526976,1163527059,CA
-1163527060,1163527071,US
-1163527072,1163527103,CA
-1163527104,1163527135,US
-1163527136,1163527791,CA
-1163527792,1163527807,US
-1163527808,1163527903,CA
-1163527904,1163527935,US
+1163526144,1163526399,CA
+1163526400,1163526655,US
+1163526656,1163526911,CA
+1163526912,1163527167,US
+1163527168,1163527679,CA
+1163527680,1163527935,US
1163527936,1163529215,CA
-1163529216,1163530239,US
-1163530240,1163530335,CA
-1163530336,1163530367,US
-1163530368,1163530415,CA
-1163530416,1163530431,US
-1163530432,1163530599,CA
-1163530600,1163530623,US
-1163530624,1163530639,CA
-1163530640,1163530655,US
-1163530656,1163530815,CA
-1163530816,1163530831,US
-1163530832,1163530839,CA
-1163530840,1163530847,RS
-1163530848,1163530879,CA
-1163530880,1163530895,US
-1163530896,1163530903,CA
-1163530904,1163530935,US
-1163530936,1163530959,CA
-1163530960,1163530967,US
-1163530968,1163532799,CA
-1163532800,1163532927,US
-1163532928,1163533023,CA
-1163533024,1163533055,US
-1163533056,1163533439,CA
-1163533440,1163533511,US
-1163533512,1163533519,CA
-1163533520,1163533535,US
-1163533536,1163533551,CA
-1163533552,1163533567,PA
-1163533568,1163533695,CA
-1163533696,1163533727,US
-1163533728,1163533759,CA
-1163533760,1163533791,AU
-1163533792,1163533797,US
-1163533798,1163533798,CA
-1163533799,1163533807,US
-1163533808,1163533951,CA
-1163533952,1163534015,US
-1163534016,1163534031,CA
-1163534032,1163534047,US
-1163534048,1163534063,CA
-1163534064,1163534071,US
-1163534072,1163534079,MX
-1163534080,1163534143,US
-1163534144,1163534175,CA
-1163534176,1163534207,US
-1163534208,1163534247,CA
-1163534248,1163534255,US
-1163534256,1163534311,CA
-1163534312,1163534319,US
-1163534320,1163534327,CA
-1163534328,1163535359,US
+1163529216,1163530655,US
+1163530656,1163530663,CA
+1163530664,1163530991,US
+1163530992,1163532799,CA
+1163532800,1163533055,US
+1163533056,1163533311,CA
+1163533312,1163533807,US
+1163533808,1163533823,CA
+1163533824,1163534255,US
+1163534256,1163534271,CA
+1163534272,1163535359,US
1163535360,1163535615,CA
-1163535616,1163535743,US
-1163535744,1163535839,CA
-1163535840,1163535871,US
+1163535616,1163535871,US
1163535872,1163536383,CA
1163536384,1163537663,US
1163537664,1163539455,CA
-1163539456,1163540511,US
-1163540512,1163540607,CA
-1163540608,1163540735,US
+1163539456,1163540351,US
+1163540352,1163540479,CA
+1163540480,1163540735,US
1163540736,1163541503,CA
1163541504,1163542015,US
-1163542016,1163542799,CA
-1163542800,1163542855,US
-1163542856,1163542919,CA
-1163542920,1163542927,US
-1163542928,1163543687,CA
-1163543688,1163543695,US
-1163543696,1163543775,CA
-1163543776,1163543791,US
-1163543792,1163543823,CA
-1163543824,1163543847,US
-1163543848,1163543935,CA
-1163543936,1163543967,US
-1163543968,1163543983,CA
-1163543984,1163543991,US
-1163543992,1163544319,CA
-1163544320,1163544327,US
-1163544328,1163544383,CA
-1163544384,1163544423,US
-1163544424,1163544431,CA
-1163544432,1163544447,US
-1163544448,1163544575,CA
-1163544576,1163544607,US
-1163544608,1163544639,CA
-1163544640,1163544671,US
-1163544672,1163544735,CA
-1163544736,1163544759,US
-1163544760,1163544767,CA
-1163544768,1163544799,US
-1163544800,1163545087,CA
-1163545088,1163545215,US
-1163545216,1163545295,CA
-1163545296,1163545303,US
-1163545304,1163545311,CA
-1163545312,1163545567,US
-1163545568,1163545599,CA
-1163545600,1163545615,US
-1163545616,1163545631,CA
-1163545632,1163545663,GB
-1163545664,1163545679,US
-1163545680,1163545695,CA
-1163545696,1163545727,US
-1163545728,1163545887,CA
-1163545888,1163545895,US
-1163545896,1163545903,CA
-1163545904,1163545911,US
-1163545912,1163545983,CA
-1163545984,1163546015,US
+1163542016,1163542783,CA
+1163542784,1163543039,US
+1163543040,1163543551,CA
+1163543552,1163544063,US
+1163544064,1163544319,CA
+1163544320,1163544831,US
+1163544832,1163545087,CA
+1163545088,1163545343,US
+1163545344,1163545599,CA
+1163545600,1163546015,US
1163546016,1163546031,CA
-1163546032,1163546039,US
-1163546040,1163546047,NZ
-1163546048,1163546111,CA
-1163546112,1163546127,US
-1163546128,1163546175,CA
-1163546176,1163546207,US
-1163546208,1163546383,CA
-1163546384,1163546391,US
-1163546392,1163546399,CA
-1163546400,1163546423,US
-1163546424,1163546447,CA
-1163546448,1163546455,US
-1163546456,1163546527,CA
-1163546528,1163546535,US
-1163546536,1163546551,CA
-1163546552,1163546559,US
-1163546560,1163547391,CA
-1163547392,1163547407,US
-1163547408,1163547415,CA
-1163547416,1163547423,US
-1163547424,1163547487,CA
-1163547488,1163547527,US
-1163547528,1163547535,CA
-1163547536,1163547539,US
-1163547540,1163547543,CA
-1163547544,1163547551,US
-1163547552,1163547567,CA
-1163547568,1163547583,VG
-1163547584,1163547951,CA
-1163547952,1163547983,US
-1163547984,1163549007,CA
-1163549008,1163549023,US
-1163549024,1163549119,CA
-1163549120,1163549183,US
+1163546032,1163546623,US
+1163546624,1163546879,CA
+1163546880,1163547135,US
+1163547136,1163547391,CA
+1163547392,1163548159,US
+1163548160,1163548927,CA
+1163548928,1163549183,US
1163549184,1163549695,CA
1163549696,1163549951,US
-1163549952,1163550239,CA
-1163550240,1163550255,US
-1163550256,1163550335,CA
-1163550336,1163550351,US
-1163550352,1163550367,CA
-1163550368,1163550375,US
-1163550376,1163550383,CA
-1163550384,1163550399,US
-1163550400,1163550783,CA
-1163550784,1163550815,US
+1163549952,1163550207,CA
+1163550208,1163550815,US
1163550816,1163550831,CA
-1163550832,1163550839,US
-1163550840,1163550991,CA
-1163550992,1163551007,US
-1163551008,1163551071,CA
-1163551072,1163551087,US
-1163551088,1163551263,CA
-1163551264,1163551295,US
-1163551296,1163551327,CA
-1163551328,1163551359,US
-1163551360,1163551423,CA
-1163551424,1163551439,US
-1163551440,1163551623,CA
-1163551624,1163551631,CN
-1163551632,1163551663,CA
-1163551664,1163551695,US
-1163551696,1163551727,CA
-1163551728,1163551743,US
-1163551744,1163552383,CA
-1163552384,1163552519,US
-1163552520,1163552535,CA
-1163552536,1163552543,US
-1163552544,1163552575,CA
-1163552576,1163552607,PA
-1163552608,1163552679,CA
-1163552680,1163552687,US
-1163552688,1163552695,CA
-1163552696,1163552719,US
-1163552720,1163553855,CA
-1163553856,1163553871,US
-1163553872,1163553919,CA
-1163553920,1163553951,US
-1163553952,1163554559,CA
-1163554560,1163554591,US
-1163554592,1163554639,CA
-1163554640,1163554647,US
-1163554648,1163554655,MX
-1163554656,1163554703,CA
-1163554704,1163554751,US
-1163554752,1163554783,CA
-1163554784,1163554791,US
-1163554792,1163555839,CA
+1163550832,1163550847,US
+1163550848,1163550975,CA
+1163550976,1163551295,US
+1163551296,1163551311,CA
+1163551312,1163551455,US
+1163551456,1163551487,CA
+1163551488,1163551631,US
+1163551632,1163551647,CA
+1163551648,1163551743,US
+1163551744,1163552255,CA
+1163552256,1163552519,US
+1163552520,1163552527,CA
+1163552528,1163552543,US
+1163552544,1163552559,CA
+1163552560,1163552607,US
+1163552608,1163552623,CA
+1163552624,1163552767,US
+1163552768,1163553791,CA
+1163553792,1163554047,US
+1163554048,1163554559,CA
+1163554560,1163554815,US
+1163554816,1163555839,CA
1163555840,1163556095,US
1163556096,1163556607,CA
-1163556608,1163557727,US
-1163557728,1163557759,CA
-1163557760,1163558015,US
-1163558016,1163558028,KW
-1163558029,1163559679,US
+1163556608,1163559679,US
1163559680,1163559935,CA
1163559936,1163560959,US
-1163560960,1163562063,CA
-1163562064,1163562111,US
-1163562112,1163562199,CA
-1163562200,1163562207,US
-1163562208,1163562231,CA
-1163562232,1163562239,US
+1163560960,1163561983,CA
+1163561984,1163562239,US
1163562240,1163563007,CA
1163563008,1163564031,US
-1163564032,1163565055,CA
-1163565056,1163566047,US
-1163566048,1163566079,CA
-1163566080,1163567103,US
+1163564032,1163565311,CA
+1163565312,1163567103,US
1163567104,1163568127,CA
-1163568128,1163570431,US
-1163570432,1163570495,CA
-1163570496,1163571199,US
-1163571200,1163571983,CA
-1163571984,1163571999,US
-1163572000,1163572175,CA
-1163572176,1163572183,US
-1163572184,1163573247,CA
-1163573248,1163573439,US
-1163573440,1163573503,IN
-1163573504,1163575039,US
+1163568128,1163571199,US
+1163571200,1163571967,CA
+1163571968,1163572223,US
+1163572224,1163572479,CA
+1163572480,1163575039,US
1163575040,1163575295,IN
-1163575296,1163576703,CA
-1163576704,1163576799,US
-1163576800,1163576959,CA
-1163576960,1163576991,US
-1163576992,1163577263,CA
-1163577264,1163577311,US
-1163577312,1163577327,CA
-1163577328,1163577375,US
-1163577376,1163577407,CA
-1163577408,1163577471,US
-1163577472,1163577503,CA
-1163577504,1163577863,US
-1163577864,1163577919,CA
-1163577920,1163577951,US
-1163577952,1163577983,CA
-1163577984,1163578111,US
-1163578112,1163578175,CA
-1163578176,1163578191,US
-1163578192,1163578239,CA
-1163578240,1163578255,US
-1163578256,1163578271,CA
-1163578272,1163578303,US
-1163578304,1163578351,CA
-1163578352,1163578367,US
-1163578368,1163579119,CA
-1163579120,1163579127,US
-1163579128,1163579135,CA
-1163579136,1163579519,US
-1163579520,1163579647,CA
-1163579648,1163579871,US
-1163579872,1163579903,CA
+1163575296,1163576575,CA
+1163576576,1163579903,US
1163579904,1163580159,NL
1163580160,1163580927,US
1163580928,1163581183,CA
-1163581184,1163581439,US
-1163581440,1163581503,CA
-1163581504,1163581567,US
-1163581568,1163581583,CA
-1163581584,1163581615,US
-1163581616,1163581631,CA
-1163581632,1163581695,US
+1163581184,1163581695,US
1163581696,1163581951,CA
-1163581952,1163582015,US
-1163582016,1163582047,CA
-1163582048,1163582079,US
+1163581952,1163582031,US
+1163582032,1163582039,CA
+1163582040,1163582079,US
1163582080,1163582111,CA
-1163582112,1163582127,US
-1163582128,1163582183,CA
-1163582184,1163582191,US
-1163582192,1163583487,CA
-1163583488,1163585199,US
-1163585200,1163585215,CA
-1163585216,1163586740,US
-1163586741,1163586743,CA
-1163586744,1163586744,NL
-1163586745,1163586745,GB
-1163586746,1163587583,US
+1163582112,1163582207,US
+1163582208,1163583487,CA
+1163583488,1163587583,US
1163587584,1163588095,CA
-1163588096,1163588111,US
-1163588112,1163588159,CA
-1163588160,1163588199,US
-1163588200,1163588207,DM
-1163588208,1163588215,CA
-1163588216,1163588223,US
-1163588224,1163588607,CA
-1163588608,1163588608,US
-1163588609,1163588695,CA
-1163588696,1163588703,US
-1163588704,1163588727,CA
-1163588728,1163588799,US
-1163588800,1163588815,CA
-1163588816,1163588831,US
-1163588832,1163588847,CA
-1163588848,1163588863,US
+1163588096,1163588351,US
+1163588352,1163588607,CA
+1163588608,1163588863,US
1163588864,1163589631,CA
-1163589632,1163759071,US
-1163759072,1163759087,AE
-1163759088,1167319359,US
-1167319360,1167319367,CA
-1167319368,1167320071,US
-1167320072,1167320079,CA
-1167320080,1167321447,US
-1167321448,1167321455,CA
-1167321456,1167321959,US
-1167321960,1167321967,GB
-1167321968,1167322255,US
-1167322256,1167322263,CA
-1167322264,1167322695,US
-1167322696,1167322703,IN
-1167322704,1167323543,US
-1167323544,1167323551,CA
-1167323552,1167324287,US
-1167324288,1167324295,GB
-1167324296,1167324311,US
-1167324312,1167324319,CA
-1167324320,1167325727,US
-1167325728,1167325735,CA
-1167325736,1167325935,US
-1167325936,1167325951,CA
-1167325952,1167326231,US
-1167326232,1167326239,CA
-1167326240,1167326335,US
-1167326336,1167326367,SI
-1167326368,1167327031,US
-1167327032,1167327039,GB
-1167327040,1167693199,US
-1167693200,1167693215,UA
-1167693216,1167851519,US
+1163589632,1167851519,US
1167851520,1168113663,CA
1168113664,1168138239,US
1168138240,1168146431,JM
-1168146432,1168178687,US
-1168178688,1168178943,US
-1168178944,1168211967,US
+1168146432,1168211967,US
1168211968,1168220159,CA
1168220160,1168318719,US
1168318720,1168318975,CA
1168318976,1168321535,US
1168321536,1168321791,CA
1168321792,1168393215,US
-1168393216,1168393591,CA
-1168393592,1168393599,US
-1168393600,1168394495,CA
-1168394496,1168394511,US
-1168394512,1168394751,CA
+1168393216,1168393471,CA
+1168393472,1168393503,US
+1168393504,1168393519,CA
+1168393520,1168393543,US
+1168393544,1168393567,CA
+1168393568,1168393663,US
+1168393664,1168393983,CA
+1168393984,1168394143,US
+1168394144,1168394151,CA
+1168394152,1168394239,US
+1168394240,1168394495,CA
+1168394496,1168394575,US
+1168394576,1168394591,CA
+1168394592,1168394719,US
+1168394720,1168394751,CA
1168394752,1168420863,US
1168420864,1168424959,CA
-1168424960,1168454655,US
-1168454656,1168455167,US
-1168455168,1168474111,US
+1168424960,1168461823,US
+1168461824,1168465919,CA
+1168465920,1168474111,US
1168474112,1168506879,CA
-1168508928,1168510975,US
+1168509440,1168510975,US
1168510976,1168515071,CA
1168515072,1168535551,US
1168535552,1168539647,CA
-1168539648,1168621268,US
-1168621269,1168621270,IN
-1168621271,1168670719,US
+1168539648,1168670719,US
1168670720,1168687103,CA
-1168687104,1168727551,US
+1168687104,1168697599,US
+1168697600,1168697855,GB
+1168697856,1168698111,NL
+1168698112,1168727551,US
1168727552,1168727807,ES
1168727808,1168859135,US
1168859136,1168863231,CA
1168863232,1168867327,US
1168867328,1168875519,CA
-1168875520,1168887807,US
-1168887808,1168891903,CA
-1168891904,1168916479,US
+1168875520,1168916479,US
1168916480,1168932863,CA
1168932864,1168936959,US
1168936960,1168949247,CA
1168949248,1168949503,US
1168949504,1168949759,CA
-1168949760,1168949823,US
-1168949824,1168949855,CA
-1168949856,1168950271,US
+1168949760,1168950271,US
1168950272,1168951295,CA
-1168951296,1168951807,US
-1168951808,1168951823,CA
-1168951824,1168952063,US
-1168952064,1168952095,CA
-1168952096,1168952319,US
-1168952320,1168952511,CA
-1168952512,1168952575,US
+1168951296,1168952575,US
1168952576,1168952831,CA
-1168952832,1168952863,US
-1168952864,1168952895,CA
-1168952896,1168953023,US
-1168953024,1168953055,CA
-1168953056,1168953119,US
-1168953120,1168953279,CA
-1168953280,1168953311,US
-1168953312,1168953343,CA
-1168953344,1168955647,US
+1168952832,1168952887,US
+1168952888,1168952895,CA
+1168952896,1168955647,US
1168955648,1168956415,CA
1168956416,1168957183,US
1168957184,1168957311,IN
1168957312,1168957439,US
1168957440,1168958207,CA
-1168958208,1168958211,US
-1168958212,1168958215,CA
-1168958216,1168958223,US
-1168958224,1168958231,SG
-1168958232,1168958239,US
-1168958240,1168958423,CA
-1168958424,1168958463,US
-1168958464,1168958479,CA
-1168958480,1168958527,US
+1168958208,1168958271,US
+1168958272,1168958303,CA
+1168958304,1168958527,US
1168958528,1168958559,IN
-1168958560,1168960543,US
-1168960544,1168960591,CA
-1168960592,1168960607,US
-1168960608,1168960623,CA
-1168960624,1168960631,US
-1168960632,1168960767,CA
-1168960768,1168960799,US
-1168960800,1168960831,CA
-1168960832,1168960863,US
-1168960864,1168960887,CA
-1168960888,1168960895,US
-1168960896,1168961983,CA
-1168961984,1168961991,US
-1168961992,1168962007,CA
-1168962008,1168962015,US
-1168962016,1168962023,CA
-1168962024,1168962303,US
+1168958560,1168960671,US
+1168960672,1168960703,CA
+1168960704,1168961023,US
+1168961024,1168961791,CA
+1168961792,1168961807,US
+1168961808,1168961815,CA
+1168961816,1168961887,US
+1168961888,1168961919,CA
+1168961920,1168962303,US
1168962304,1168962559,CA
-1168962560,1168963039,US
-1168963040,1168963071,ES
+1168962560,1168963071,US
1168963072,1168965631,CA
1168965632,1168973823,US
1168973824,1168982015,CA
-1168982016,1169051903,US
-1169051904,1169051911,SG
-1169051912,1169057039,US
-1169057040,1169057055,BR
-1169057056,1169057071,US
-1169057072,1169057079,AR
-1169057080,1169057087,US
-1169057088,1169057119,BR
-1169057120,1169057127,US
-1169057128,1169057135,BR
-1169057136,1169057143,US
-1169057144,1169057151,BR
-1169057152,1169057215,US
-1169057216,1169057223,BR
-1169057224,1169057231,US
-1169057232,1169057247,BR
-1169057248,1169057263,US
-1169057264,1169057279,BR
-1169057280,1169092639,US
-1169092640,1169092671,GB
-1169092672,1169094713,US
-1169094714,1169094726,CA
-1169094727,1169094755,US
-1169094756,1169094763,AU
-1169094764,1169094771,IN
-1169094772,1169094925,US
-1169094926,1169094933,IN
-1169094934,1169095017,US
-1169095018,1169095027,IN
-1169095028,1169182975,US
+1168982016,1169182975,US
1169182976,1169183487,CA
1169183488,1169184767,US
1169184768,1169185023,CA
@@ -39384,217 +12628,63 @@
1169203200,1169211391,CA
1169211392,1170190335,US
1170190336,1170190847,GB
-1170190848,1170375167,US
-1170375168,1170375679,US
-1170375680,1170456959,US
-1170456960,1170456975,CR
-1170456976,1170456991,US
-1170456992,1170457007,PR
-1170457008,1170457599,US
-1170457600,1170457663,BR
-1170457664,1170461055,US
-1170461056,1170461695,CO
+1170190848,1170227199,US
+1170227200,1170231295,NL
+1170231296,1170461183,US
+1170461184,1170461695,CO
1170461696,1170465791,US
1170465792,1170466047,CY
-1170466048,1170466767,US
-1170466768,1170466783,MQ
-1170466784,1170467839,US
+1170466048,1170467839,US
1170467840,1170468351,DO
-1170468352,1170469055,US
-1170469056,1170469071,VG
-1170469072,1170470911,US
+1170468352,1170470911,US
1170470912,1170471167,ES
-1170471168,1170471263,US
-1170471264,1170471279,CA
-1170471280,1170471375,US
-1170471376,1170471391,UY
-1170471392,1170471903,US
-1170471904,1170471919,BE
-1170471920,1170472175,US
-1170472176,1170472191,DO
-1170472192,1170472703,US
+1170471168,1170472703,US
1170472704,1170472959,VG
1170472960,1170481151,CA
1170481152,1170489343,US
1170489344,1170497535,CA
1170497536,1170505727,US
1170505728,1170522111,CA
-1170522112,1170545083,US
-1170545084,1170545087,CN
-1170545088,1170573375,US
-1170573376,1170573391,RU
-1170573392,1170573392,US
-1170573393,1170573393,RU
-1170573394,1170573394,US
-1170573395,1170573439,RU
-1170573440,1170585047,US
-1170585048,1170585055,RU
-1170585056,1175977983,US
+1170522112,1175728639,US
+1175728640,1175728895,CA
+1175728896,1175977983,US
1175977984,1176502271,CA
-1176502272,1176511831,US
-1176511832,1176511839,CA
-1176511840,1176512703,US
-1176512704,1176512711,ZA
-1176512712,1176513479,US
-1176513480,1176513487,CA
-1176513488,1176513879,US
-1176513880,1176513887,GB
-1176513888,1176514271,US
-1176514272,1176514303,IN
-1176514304,1176609535,US
-1176609536,1176609583,CA
-1176609584,1176609599,US
-1176609600,1176609615,CA
-1176609616,1176609631,US
-1176609632,1176609663,CA
-1176609664,1176613927,US
-1176613928,1176613935,CA
-1176613936,1176616959,US
-1176616960,1176620047,CA
-1176620048,1176620055,US
-1176620056,1176620095,CA
-1176620096,1176620127,US
-1176620128,1176620175,CA
-1176620176,1176620183,US
-1176620184,1176620223,CA
-1176620224,1176620255,US
-1176620256,1176620287,CA
-1176620288,1176620319,US
-1176620320,1176620487,CA
-1176620488,1176620511,US
-1176620512,1176620743,CA
-1176620744,1176620783,US
-1176620784,1176620863,CA
-1176620864,1176620879,US
-1176620880,1176620911,CA
-1176620912,1176620915,US
-1176620916,1176620919,CA
-1176620920,1176620927,US
-1176620928,1176620967,CA
-1176620968,1176620975,US
-1176620976,1176620991,CA
-1176620992,1176620999,US
-1176621000,1176621599,CA
-1176621600,1176621631,US
-1176621632,1176621663,CA
-1176621664,1176621679,US
-1176621680,1176621695,CA
-1176621696,1176621727,US
-1176621728,1176621759,CA
-1176621760,1176621823,US
-1176621824,1176621863,CA
-1176621864,1176621887,US
-1176621888,1176622047,CA
-1176622048,1176622079,US
+1176502272,1176616959,US
+1176616960,1176620031,CA
+1176620032,1176620447,US
+1176620448,1176620479,CA
+1176620480,1176621311,US
+1176621312,1176621575,CA
+1176621576,1176622079,US
1176622080,1176622335,GB
-1176622336,1176622431,CA
-1176622432,1176622455,US
-1176622456,1176622559,CA
-1176622560,1176622591,US
-1176622592,1176623567,CA
-1176623568,1176623583,US
-1176623584,1176623615,CA
-1176623616,1176623871,US
+1176622336,1176622591,US
+1176622592,1176623103,CA
+1176623104,1176623871,US
1176623872,1176625151,CA
-1176625152,1176626119,US
-1176626120,1176626135,CA
-1176626136,1176626207,US
-1176626208,1176626271,CA
-1176626272,1176626287,US
-1176626288,1176626431,CA
-1176626432,1176626463,US
-1176626464,1176626495,BM
-1176626496,1176626559,US
-1176626560,1176626567,CA
-1176626568,1176626575,US
-1176626576,1176626591,CA
-1176626592,1176626975,US
-1176626976,1176627007,CA
-1176627008,1176627135,US
-1176627136,1176627199,CA
-1176627200,1176628223,US
-1176628224,1176628351,CA
-1176628352,1176628447,US
-1176628448,1176628671,CA
-1176628672,1176628703,US
-1176628704,1176628719,CA
-1176628720,1176628783,US
-1176628784,1176628799,CA
-1176628800,1176628863,US
-1176628864,1176628943,CA
-1176628944,1176628951,US
-1176628952,1176628975,CA
-1176628976,1176628991,US
-1176628992,1176629031,CA
-1176629032,1176629247,US
-1176629248,1176629279,CA
-1176629280,1176629295,US
-1176629296,1176629303,CA
-1176629304,1176629311,US
-1176629312,1176629343,CA
-1176629344,1176629375,US
-1176629376,1176629439,GI
-1176629440,1176629455,CA
-1176629456,1176629463,GI
-1176629464,1176629503,US
-1176629504,1176629519,CA
-1176629520,1176629535,NZ
-1176629536,1176629695,CA
-1176629696,1176629727,US
-1176629728,1176629759,CA
-1176629760,1176630271,US
+1176625152,1176626111,US
+1176626112,1176626127,CA
+1176626128,1176630271,US
1176630272,1176631295,CA
1176631296,1176631423,NL
1176631424,1176702975,US
1176702976,1176707071,CA
1176707072,1176731647,US
1176731648,1176735743,PR
-1176735744,1176735871,GB
-1176735872,1176735999,NG
-1176736000,1176736127,A2
-1176736128,1176736255,NG
-1176736256,1176736415,A2
-1176736416,1176736447,GN
-1176736448,1176736623,A2
-1176736624,1176736639,LR
-1176736640,1176736767,A2
-1176736768,1176737247,CR
-1176737248,1176737471,A2
-1176737472,1176737535,NI
-1176737536,1176737919,A2
-1176737920,1176737935,NG
-1176737936,1176738047,A2
-1176738048,1176738303,US
+1176735744,1176738303,US
1176738304,1176739071,CO
-1176739072,1176739327,US
-1176739328,1176739407,CO
-1176739408,1176739583,A2
+1176739072,1176739583,US
1176739584,1176739839,CO
1176739840,1176743935,CA
1176743936,1176752127,US
1176752128,1176756223,CA
1176756224,1176764415,US
1176764416,1176768511,PM
-1176768512,1176770751,US
-1176770752,1176770783,AE
-1176770784,1176770799,US
-1176770800,1176770803,KR
-1176770804,1176770811,US
-1176770812,1176770815,CA
-1176770816,1176770831,US
-1176770832,1176770847,BR
-1176770848,1176770851,BM
-1176770852,1176770919,US
-1176770920,1176770927,BR
+1176768512,1176770927,US
1176770928,1176770935,DO
1176770936,1176771327,US
1176771328,1176771583,KR
1176771584,1176771839,GB
-1176771840,1176771895,US
-1176771896,1176771903,AE
-1176771904,1176772079,US
-1176772080,1176772087,MX
-1176772088,1176776703,US
+1176771840,1176776703,US
1176776704,1176780799,CA
1176780800,1176895487,US
1176895488,1176897047,CA
@@ -39605,16 +12695,18 @@
1176904768,1176904775,US
1176904776,1176904871,CA
1176904872,1176904879,US
-1176904880,1176908223,CA
-1176908224,1176908231,MX
-1176908232,1176917831,CA
+1176904880,1176917831,CA
1176917832,1176917839,AU
1176917840,1176925007,CA
1176925008,1176925015,NG
1176925016,1176928255,CA
-1176928256,1176997375,US
-1176997376,1176997407,GB
-1176997408,1177022975,US
+1176928256,1177000703,US
+1177000704,1177000711,CA
+1177000712,1177000719,US
+1177000720,1177000735,CA
+1177000736,1177000751,US
+1177000752,1177000759,CA
+1177000760,1177022975,US
1177022976,1177023231,GB
1177023232,1177030655,US
1177030656,1177033727,AG
@@ -39622,61 +12714,31 @@
1177059328,1177061375,CA
1177061376,1177062143,US
1177062144,1177075455,CA
-1177075456,1177164255,US
-1177164256,1177164263,CA
-1177164264,1177164415,US
-1177164416,1177164479,CA
-1177164480,1177164511,US
-1177164512,1177164543,CA
-1177164544,1177164863,US
+1177075456,1177164863,US
1177164864,1177164895,CA
-1177164896,1177164927,US
-1177164928,1177164943,CA
-1177164944,1177165055,US
-1177165056,1177165823,CA
-1177165824,1177174143,US
-1177174144,1177174175,AE
-1177174176,1177175199,US
-1177175200,1177175231,CZ
-1177175232,1177182527,US
-1177182528,1177182591,CA
-1177182592,1177187663,US
-1177187664,1177187671,GB
-1177187672,1177210983,US
-1177210984,1177211007,FR
-1177211008,1177354239,US
-1177354240,1177355263,PR
-1177355264,1177355391,US
-1177355392,1177419775,PR
+1177164896,1177165055,US
+1177165056,1177165311,CA
+1177165312,1177354239,US
+1177354240,1177357311,PR
+1177357312,1177357567,US
+1177357568,1177405695,PR
+1177405696,1177405951,US
+1177405952,1177419775,PR
1177419776,1177505401,US
1177505402,1177505402,BB
1177505403,1177550847,US
1177550848,1178075135,CA
1178075136,1178599423,US
1178599424,1179910143,CA
-1179910144,1179924649,US
-1179924650,1179924650,US
-1179924651,1179924659,US
-1179924660,1179924660,US
-1179924661,1180113919,US
+1179910144,1180113919,US
1180113920,1180114431,AE
1180114432,1180124865,US
1180124866,1180124866,AE
-1180124867,1184829439,US
-1184829440,1184829695,A2
-1184829696,1184830769,US
-1184830770,1184830770,US
-1184830771,1189672191,US
-1189672192,1189672249,US
-1189672250,1189672251,A2
-1189672252,1189672447,US
-1189672448,1190170111,US
-1190170112,1190170127,UY
-1190170128,1190983455,US
-1190983456,1190983487,UA
-1190983488,1191673855,US
+1180124867,1191673855,US
1191673856,1191706623,CA
-1191706624,1192296447,US
+1191706624,1192232127,US
+1192232128,1192232159,PA
+1192232160,1192296447,US
1192296448,1192361983,CA
1192361984,1192427519,US
1192427520,1192460287,CA
@@ -39684,11 +12746,9 @@
1192468480,1192476671,CA
1192476672,1192488959,US
1192488960,1192493055,CA
-1192493056,1199718695,US
-1199718696,1199718703,A2
-1199718704,1199722495,US
-1199722496,1199722503,A2
-1199722504,1207975935,US
+1192493056,1207932159,US
+1207932160,1207932415,CA
+1207932416,1207975935,US
1207975936,1207980031,CA
1207980032,1208008703,US
1208008704,1208016895,CA
@@ -39696,252 +12756,27 @@
1208020992,1208025087,CA
1208025088,1208050943,US
1208050944,1208051199,CA
-1208051200,1208056111,US
-1208056112,1208056127,CN
-1208056128,1208074239,US
+1208051200,1208074239,US
1208074240,1208082431,CA
1208082432,1208090623,US
1208090624,1208107007,CA
-1208107008,1208122031,US
-1208122032,1208122047,GB
-1208122048,1208122063,CA
-1208122064,1208301455,US
-1208301456,1208301471,CA
-1208301472,1208324991,US
-1208324992,1208325119,CA
-1208325120,1208333567,US
-1208333568,1208333823,GB
-1208333824,1208337919,US
-1208337920,1208338175,A2
-1208338176,1208586372,US
-1208586373,1208586380,IN
-1208586381,1208586419,US
-1208586420,1208586427,AE
-1208586428,1208586447,US
-1208586448,1208586455,TR
-1208586456,1208586463,IN
-1208586464,1208586526,US
-1208586527,1208586536,TR
-1208586537,1208586563,US
-1208586564,1208586571,IN
-1208586572,1208586573,US
-1208586574,1208586581,VE
-1208586582,1208586589,LK
-1208586590,1208586597,EG
-1208586598,1208586742,US
-1208586743,1208586750,IN
-1208586751,1208586761,US
-1208586762,1208586774,GB
-1208586775,1208586871,US
-1208586872,1208586879,BS
-1208586880,1208586919,US
-1208586920,1208586927,AF
-1208586928,1208586957,US
-1208586958,1208586973,GB
-1208586974,1208586980,US
-1208586981,1208586988,EG
-1208586989,1208587025,US
-1208587026,1208587033,NZ
-1208587034,1208587045,US
-1208587046,1208587053,IN
-1208587054,1208587087,US
-1208587088,1208587095,LK
-1208587096,1208587169,US
-1208587170,1208587177,MX
-1208587178,1208587221,US
-1208587222,1208587229,LK
-1208587230,1208587321,US
-1208587322,1208587329,GB
-1208587330,1208587333,US
-1208587334,1208587341,CA
-1208587342,1208587345,US
-1208587346,1208587353,GB
-1208587354,1208587394,US
-1208587395,1208587402,EG
-1208587403,1208587418,US
-1208587419,1208587426,TR
-1208587427,1208587434,EG
-1208587435,1208587450,US
-1208587451,1208587458,LK
-1208587459,1208587479,US
-1208587480,1208587488,LK
-1208587489,1208587504,GB
-1208587505,1208587629,US
-1208587630,1208587637,MA
-1208587638,1208587671,US
-1208587672,1208587679,EG
-1208587680,1208587705,US
-1208587706,1208587713,CA
-1208587714,1208587728,US
-1208587729,1208587736,CA
-1208587737,1208587765,US
-1208587766,1208587773,LK
-1208587774,1208588071,US
-1208588072,1208588079,RU
-1208588080,1208588185,US
-1208588186,1208588193,EG
-1208588194,1208588591,US
-1208588592,1208588599,IN
-1208588600,1208588603,US
-1208588604,1208588611,ID
-1208588612,1208588714,US
-1208588715,1208588722,VE
-1208588723,1208588728,US
-1208588729,1208588760,GB
-1208588761,1208588771,US
-1208588772,1208588779,GB
-1208588780,1208588853,US
-1208588854,1208588861,IN
-1208588862,1208588953,US
-1208588954,1208588961,TR
-1208588962,1208588972,US
-1208588973,1208588985,GB
-1208588986,1208588989,US
-1208588990,1208589000,GB
-1208589001,1208589043,US
-1208589044,1208589051,BH
-1208589052,1208589073,US
-1208589074,1208589081,CA
-1208589082,1208589111,US
-1208589112,1208589119,VE
-1208589120,1208589279,US
-1208589280,1208589287,LK
-1208589288,1208589299,US
-1208589300,1208589307,LK
-1208589308,1208589341,US
-1208589342,1208589349,ID
-1208589350,1208589383,US
-1208589384,1208589391,BH
-1208589392,1208589399,US
-1208589400,1208589407,EG
-1208589408,1208589449,US
-1208589450,1208589457,EG
-1208589458,1208589578,US
-1208589579,1208589586,EG
-1208589587,1208589737,US
-1208589738,1208589745,EG
-1208589746,1208589783,US
-1208589784,1208589791,EG
-1208589792,1208589857,US
-1208589858,1208589865,MA
-1208589866,1208589901,US
-1208589902,1208589925,EG
-1208589926,1208589959,US
-1208589960,1208589967,IR
-1208589968,1208589975,VE
-1208589976,1208590007,US
-1208590008,1208590015,EG
-1208590016,1208590031,US
-1208590032,1208590047,EG
-1208590048,1208590091,US
-1208590092,1208590108,GB
-1208590109,1208590115,US
-1208590116,1208590123,EG
-1208590124,1208590161,US
-1208590162,1208590169,EG
-1208590170,1208590335,US
+1208107008,1208590335,US
1208590336,1208598527,CA
1208598528,1208647679,US
-1208647680,1208656319,CA
-1208656320,1208656351,US
-1208656352,1208656511,CA
-1208656512,1208656543,US
-1208656544,1208656575,CA
+1208647680,1208656575,CA
1208656576,1208656583,DO
-1208656584,1208656591,PA
-1208656592,1208656639,CA
-1208656640,1208656703,MY
-1208656704,1208656767,CA
-1208656768,1208656895,MY
-1208656896,1208656903,CA
-1208656904,1208656911,LB
-1208656912,1208657087,CA
-1208657088,1208657103,MA
-1208657104,1208657139,CA
-1208657140,1208657143,SE
-1208657144,1208657415,CA
-1208657416,1208657423,CH
-1208657424,1208657519,CA
-1208657520,1208657527,MA
-1208657528,1208657535,CA
-1208657536,1208657543,SE
-1208657544,1208657551,CA
-1208657552,1208657559,PH
-1208657560,1208657775,CA
-1208657776,1208657783,PA
-1208657784,1208657855,CA
-1208657856,1208657871,PA
-1208657872,1208657919,CA
-1208657920,1208657927,HK
-1208657928,1208657975,MA
-1208657976,1208657983,CA
-1208657984,1208657991,CN
-1208657992,1208658015,MA
-1208658016,1208658031,CA
-1208658032,1208658039,MA
-1208658040,1208658103,CA
-1208658104,1208658111,FR
-1208658112,1208658127,CA
-1208658128,1208658143,MA
-1208658144,1208658159,CA
-1208658160,1208658167,MA
-1208658168,1208659007,CA
-1208659008,1208659071,US
-1208659072,1208659135,CA
-1208659136,1208659151,CN
-1208659152,1208659327,CA
-1208659328,1208659359,US
-1208659360,1208659391,CA
-1208659392,1208659399,CN
-1208659400,1208659423,CA
-1208659424,1208659455,US
-1208659456,1208659519,PK
-1208659520,1208659551,US
-1208659552,1208659647,CA
-1208659648,1208659711,ID
-1208659712,1208659743,CA
-1208659744,1208659775,ID
-1208659776,1208659831,CA
-1208659832,1208659839,ID
-1208659840,1208659903,PK
-1208659904,1208659967,CA
+1208656584,1208659967,CA
1208659968,1208721407,US
1208721408,1208729599,CA
1208729600,1208770559,US
1208770560,1208774655,CA
1208774656,1208778751,US
1208778752,1208795135,CA
-1208795136,1208832391,US
-1208832392,1208832407,CN
-1208832408,1208832567,US
-1208832568,1208832575,CN
-1208832576,1208832583,US
-1208832584,1208832591,CN
-1208832592,1208832599,US
-1208832600,1208832607,CN
-1208832608,1208832623,IT
-1208832624,1208832631,NZ
-1208832632,1208832639,CN
-1208832640,1208832711,US
-1208832712,1208832719,CN
-1208832720,1208832775,US
-1208832776,1208832783,CA
-1208832784,1208833023,US
-1208833024,1208833031,PR
-1208833032,1208834415,US
-1208834416,1208834423,TK
-1208834424,1208834967,US
-1208834968,1208834975,ID
-1208834976,1208834991,US
-1208834992,1208834999,NP
-1208835000,1208835007,CA
-1208835008,1208852479,US
+1208795136,1208852479,US
1208852480,1208860671,CA
1208860672,1208918015,US
1208918016,1208922111,CA
-1208922112,1208926463,US
-1208926464,1208926719,EU
-1208926720,1208928767,US
+1208922112,1208928767,US
1208928768,1208929023,TW
1208929024,1208935935,US
1208935936,1208935943,AU
@@ -39952,7 +12787,8 @@
1208935976,1208935983,TW
1208935984,1208935991,IN
1208935992,1208935999,JP
-1208936000,1208936191,US
+1208936000,1208936003,HK
+1208936004,1208936191,US
1208936192,1208936199,AU
1208936200,1208936207,SG
1208936208,1208936215,HK
@@ -39962,51 +12798,16 @@
1208936240,1208936247,JP
1208936248,1208936255,IN
1208936256,1208936263,MY
-1208936264,1208936447,IN
-1208936448,1208938751,US
-1208938752,1208938759,AR
-1208938760,1208938775,BR
-1208938776,1208938783,CO
-1208938784,1208938791,CL
-1208938792,1208954879,US
-1208954880,1208957695,CA
-1208957696,1208957823,US
-1208957824,1208957855,CA
-1208957856,1208957919,US
-1208957920,1208957935,CA
-1208957936,1208957951,US
-1208957952,1208958975,CA
+1208936264,1208936295,US
+1208936296,1208936299,HK
+1208936300,1208954879,US
+1208954880,1208958975,CA
1208958976,1208975359,US
-1208975360,1208980503,CA
-1208980504,1208980511,US
-1208980512,1208982799,CA
-1208982800,1208982815,SE
-1208982816,1208983551,CA
-1208983552,1209002351,US
-1209002352,1209002367,A2
-1209002368,1209002495,US
-1209002496,1209002687,A2
-1209002688,1209003519,US
-1209003520,1209004031,A2
-1209004032,1209174231,US
-1209174232,1209174239,MY
-1209174240,1209189379,US
-1209189380,1209189395,MX
-1209189396,1209190147,US
-1209190148,1209190163,MX
-1209190164,1209190167,US
-1209190168,1209190195,GR
-1209190196,1209190851,US
-1209190852,1209190883,CA
-1209190884,1209271097,US
-1209271098,1209271098,US
-1209271099,1209338513,US
-1209338514,1209338514,US
-1209338515,1209357215,US
-1209357216,1209357231,SI
-1209357232,1209358591,US
+1208975360,1208983551,CA
+1208983552,1209358591,US
1209358592,1209358847,DE
-1209358848,1209434111,US
+1209358848,1209359103,GB
+1209359104,1209434111,US
1209434112,1209436671,BB
1209436672,1209437183,VC
1209437184,1209440767,BB
@@ -40021,192 +12822,59 @@
1209729024,1209786367,JM
1209786368,1209810943,US
1209810944,1209819135,CA
-1209819136,1209819903,US
-1209819904,1209819967,CA
-1209819968,1209820159,US
-1209820160,1209820223,CA
-1209820224,1209820399,US
-1209820400,1209820403,NG
-1209820404,1209821463,US
-1209821464,1209821471,GB
-1209821472,1209821703,US
-1209821704,1209821711,CN
-1209821712,1209821759,US
-1209821760,1209821791,CN
-1209821792,1209821983,US
-1209821984,1209821999,MX
-1209822000,1209822799,US
-1209822800,1209822815,DE
-1209822816,1209824287,US
-1209824288,1209824319,IN
-1209824320,1209824335,US
-1209824336,1209824339,FR
-1209824340,1209824511,US
+1209819136,1209824511,US
1209824512,1209824767,CN
-1209824768,1209825295,US
-1209825296,1209825311,GB
-1209825312,1209825343,US
-1209825344,1209825351,GB
-1209825352,1209860095,US
-1209860096,1209860127,IN
-1209860128,1209860575,US
-1209860576,1209860607,IN
-1209860608,1209860927,US
-1209860928,1209860959,AU
-1209860960,1209861119,US
+1209824768,1209861119,US
1209861120,1209861375,CA
-1209861376,1209861759,US
-1209861760,1209861887,FR
-1209861888,1209862143,US
+1209861376,1209862143,US
1209862144,1209862399,CA
1209862400,1209863167,US
1209863168,1209863423,CA
1209863424,1209863679,IN
1209863680,1209863935,US
1209863936,1209864191,CA
-1209864192,1209864639,US
-1209864640,1209864671,IN
-1209864672,1209865599,US
-1209865600,1209865727,IN
-1209865728,1209866111,US
-1209866112,1209866143,IN
-1209866144,1209866207,US
-1209866208,1209866239,IN
-1209866240,1209866751,US
-1209866752,1209867007,IN
-1209867008,1209867039,NZ
-1209867040,1209867199,US
-1209867200,1209867231,IN
-1209867232,1209867263,US
+1209864192,1209867263,US
1209867264,1209867519,CA
-1209867520,1209892607,US
-1209892608,1209892863,CA
-1209892864,1209893503,US
-1209893504,1209893519,MX
-1209893520,1209904959,US
-1209904960,1209904975,GB
-1209904976,1209917439,US
-1209917440,1209918367,CA
-1209918368,1209918399,US
-1209918400,1209925631,CA
+1209867520,1209917439,US
+1209917440,1209925631,CA
1209925632,1210253311,US
-1210253312,1210254703,CA
-1210254704,1210254719,NZ
-1210254720,1210261503,CA
-1210261504,1210381759,US
-1210381760,1210381823,RU
-1210381824,1210418175,US
-1210418176,1210418207,SG
-1210418208,1210449919,US
+1210253312,1210258431,CA
+1210258432,1210258687,US
+1210258688,1210261503,CA
+1210261504,1210420223,US
+1210420224,1210420479,IT
+1210420480,1210421503,US
+1210421504,1210421551,CA
+1210421552,1210449919,US
1210449920,1210580991,CA
-1210580992,1210861207,US
-1210861208,1210861215,GB
-1210861216,1210862191,US
-1210862192,1210862199,GB
-1210862200,1210865262,US
-1210865263,1210865270,MY
-1210865271,1210866435,US
-1210866436,1210866443,CL
-1210866444,1210925055,US
+1210580992,1210847231,US
+1210851328,1210925055,US
1210925056,1210941439,CA
-1210941440,1211032223,US
-1211032224,1211032255,VE
-1211032256,1211033087,US
+1210941440,1211033087,US
1211033088,1211033599,CO
-1211033600,1211035647,US
-1211035648,1211035663,PR
-1211035664,1211035711,US
+1211033600,1211035711,US
1211035712,1211035775,CA
-1211035776,1211035791,US
-1211035792,1211035807,CR
-1211035808,1211036031,US
-1211036032,1211036095,EC
-1211036096,1211036319,US
-1211036320,1211036335,CA
-1211036336,1211037519,US
-1211037520,1211037535,UY
-1211037536,1211037679,US
-1211037680,1211037695,AR
-1211037696,1211037999,US
-1211038000,1211038007,BB
-1211038008,1211038011,TT
-1211038012,1211038063,US
-1211038064,1211038079,TT
-1211038080,1211038719,US
+1211035776,1211038719,US
1211038720,1211038975,CY
-1211038976,1211039007,US
-1211039008,1211039023,VG
-1211039024,1211039087,US
-1211039088,1211039103,RU
-1211039104,1211236351,US
-1211236352,1211255551,PR
-1211255552,1211255807,US
-1211255808,1211269119,PR
-1211269120,1211304063,US
-1211304064,1211304159,CA
-1211304160,1211304207,US
-1211304208,1211304215,CA
-1211304216,1211304223,US
+1211038976,1211236351,US
+1211236352,1211269119,PR
+1211269120,1211303679,US
+1211303680,1211303935,CA
+1211303936,1211304223,US
1211304224,1211304239,CA
-1211304240,1211304287,US
-1211304288,1211304319,CA
-1211304320,1211304351,NL
-1211304352,1211304703,CA
-1211304704,1211304767,GB
-1211304768,1211304831,US
-1211304832,1211304959,CA
-1211304960,1211305983,US
-1211305984,1211306111,NL
-1211306112,1211306639,US
-1211306640,1211306647,CA
-1211306648,1211306755,US
-1211306756,1211306762,GB
-1211306763,1211306768,DE
-1211306769,1211306773,US
-1211306774,1211306879,CA
-1211306880,1211308167,US
+1211304240,1211304447,US
+1211304448,1211304703,CA
+1211304704,1211306783,US
+1211306784,1211306879,CA
+1211306880,1211308031,US
+1211308032,1211308159,CA
+1211308160,1211308167,US
1211308168,1211308175,CA
-1211308176,1211308191,US
-1211308192,1211308543,CA
-1211308544,1211308559,KN
-1211308560,1211308607,CA
-1211308608,1211308615,US
-1211308616,1211308623,CA
-1211308624,1211308639,US
-1211308640,1211308655,MX
-1211308656,1211308671,GB
-1211308672,1211308703,CA
-1211308704,1211308719,VG
-1211308720,1211308735,CA
-1211308736,1211308751,US
-1211308752,1211308767,CA
-1211308768,1211308783,US
-1211308784,1211310079,CA
-1211310080,1211310404,US
-1211310405,1211310405,IN
-1211310406,1211311378,US
-1211311379,1211311379,IN
-1211311380,1211311394,US
-1211311395,1211311395,IN
-1211311396,1211311883,US
-1211311884,1211311884,IN
-1211311885,1211311963,US
-1211311964,1211311964,IN
-1211311965,1211312569,US
-1211312570,1211312570,IN
-1211312571,1211313431,US
-1211313432,1211313439,IN
-1211313440,1211313567,US
-1211313568,1211313579,IN
-1211313580,1211314383,US
-1211314384,1211314399,CA
-1211314400,1211314415,US
-1211314416,1211314423,CA
-1211314424,1211314639,US
-1211314640,1211314671,CA
-1211314672,1211314863,US
-1211314864,1211314879,CA
-1211314880,1211316479,US
+1211308176,1211308287,US
+1211308288,1211308543,CA
+1211308544,1211308799,US
+1211308800,1211310079,CA
+1211310080,1211316479,US
1211316480,1211316991,CA
1211316992,1211317503,US
1211317504,1211317759,CA
@@ -40220,149 +12888,45 @@
1211333120,1211333631,VC
1211333632,1211333887,GD
1211333888,1211334655,VG
-1211334656,1211367487,US
-1211367488,1211367495,GB
-1211367496,1211367503,US
-1211367504,1211367519,CH
-1211367520,1211367615,US
-1211367616,1211367679,GB
-1211367680,1211367935,US
+1211334656,1211367935,US
1211367936,1211368191,CA
1211368192,1211368447,EE
-1211368448,1211384279,US
-1211384280,1211384287,GB
-1211384288,1211384327,US
-1211384328,1211384335,US
-1211384336,1211388159,US
-1211388160,1211388287,US
-1211388288,1211391455,US
-1211391456,1211391487,CN
-1211391488,1211391711,US
-1211391712,1211391719,CN
-1211391720,1211391727,US
-1211391728,1211391735,CN
-1211391736,1211392607,US
-1211392608,1211392639,GB
-1211392640,1211394063,US
-1211394064,1211394079,ES
-1211394080,1211404421,US
-1211404422,1211404422,CA
-1211404423,1211407293,US
-1211407294,1211407333,MX
-1211407334,1211419489,US
-1211419490,1211419497,CA
-1211419498,1211421739,US
-1211421740,1211421740,CA
-1211421741,1211432959,US
+1211368448,1211432959,US
1211432960,1211473919,CA
1211473920,1211596799,US
1211596800,1211605999,CA
1211606000,1211606003,US
1211606004,1211613183,CA
-1211613184,1212191304,US
-1212191305,1212191305,US
-1212191306,1212191367,US
-1212191368,1212191368,US
-1212191369,1216872447,US
+1211613184,1216872447,US
1216872448,1217396735,CA
-1217396736,1218674943,US
-1218674944,1218675199,IN
-1218675200,1218682879,US
-1218682880,1218691071,IN
-1218691072,1218693119,US
-1218693120,1218696191,IN
-1218696192,1218697215,US
-1218697216,1218697471,IN
-1218697472,1218706431,US
-1218706432,1218706687,CN
-1218706688,1218731807,US
-1218731808,1218731815,A2
-1218731816,1218778111,US
-1218778112,1218778367,SG
-1218778368,1218987263,US
+1217396736,1218697215,US
+1218697216,1218697727,IN
+1218697728,1218987263,US
1218987264,1218987519,CA
-1218987520,1219253319,US
-1219253320,1219253327,CA
-1219253328,1219256319,US
+1218987520,1219256319,US
1219256320,1219264511,CA
1219264512,1219272703,US
1219272704,1219276799,CA
-1219276800,1219290623,US
-1219290624,1219290751,AU
-1219290752,1219295295,US
-1219295296,1219295359,GR
-1219295360,1220701665,US
-1220701666,1220701666,US
-1220701667,1223182487,US
-1223182488,1223182503,ES
-1223182504,1223208831,US
-1223208832,1223208959,ES
-1223208960,1223222911,US
-1223222912,1223223039,BR
-1223223040,1223239167,US
-1223239168,1223239295,ES
-1223239296,1223244159,US
-1223244160,1223244223,BR
-1223244224,1223257599,US
-1223257600,1223257727,MX
-1223257728,1224278015,US
-1224278016,1224278023,GB
-1224278024,1224278111,US
-1224278112,1224278143,MY
-1224278144,1224278183,US
-1224278184,1224278191,CA
-1224278192,1224278359,US
-1224278360,1224278367,GB
-1224278368,1224278599,US
-1224278600,1224278607,AU
-1224278608,1224286719,US
-1224286720,1224286975,CA
-1224286976,1224290815,US
-1224290816,1224291071,CA
-1224291072,1224292095,US
-1224292096,1224292351,CA
-1224292352,1224295423,US
-1224295424,1224295679,VN
-1224295680,1224296447,US
-1224296448,1224296959,CA
-1224296960,1224299519,US
-1224299520,1224299775,CA
-1224299776,1224303359,US
-1224303360,1224303367,CA
-1224303368,1224311063,US
-1224311064,1224311071,MX
-1224311072,1224311247,US
-1224311248,1224311255,CA
-1224311256,1224311807,US
-1224311808,1224312319,CA
-1224312320,1224312327,GB
-1224312328,1224312911,US
-1224312912,1224312927,AU
-1224312928,1224314047,US
-1224314048,1224314079,GB
-1224314080,1224314687,US
-1224314688,1224314751,PA
-1224314752,1224317439,US
-1224317440,1224317695,CA
-1224317696,1224318207,US
-1224318208,1224318463,CA
-1224318464,1224321279,US
-1224321280,1224321535,CA
-1224321536,1224470527,US
-1224470528,1224473599,NL
+1219276800,1224210431,US
+1224210432,1224212479,NL
+1224212480,1224470527,US
+1224470528,1224471567,NL
+1224471568,1224471568,RU
+1224471569,1224473599,NL
1224473600,1224474623,US
1224474624,1224475647,GT
-1224475648,1224475903,PR
-1224475904,1224476671,US
-1224476672,1224478719,CW
+1224475648,1224476671,US
+1224476672,1224476927,CW
+1224476928,1224477183,US
+1224477184,1224478719,CW
1224478720,1224480767,US
1224480768,1224484863,JM
1224484864,1224493055,GT
1224493056,1224497151,US
1224497152,1224501247,GT
-1224501248,1224503551,JM
-1224503552,1224503807,BS
-1224503808,1224525568,JM
+1224501248,1224523520,JM
+1224523521,1224523775,US
+1224523776,1224525568,JM
1224525569,1224525823,US
1224525824,1224539904,JM
1224539905,1224701942,US
@@ -40379,157 +12943,33 @@
1244848128,1244852223,CA
1244852224,1244864511,US
1244864512,1244872703,CA
-1244872704,1244996655,US
-1244996656,1244996663,CH
-1244996664,1245050689,US
+1244872704,1245050689,US
1245050690,1245050690,SA
1245050691,1245052289,US
1245052290,1245052545,SA
-1245052546,1245087399,US
-1245087400,1245087407,ES
-1245087408,1245144575,US
+1245052546,1245144575,US
1245144576,1245144831,CH
-1245144832,1245168215,US
-1245168216,1245168219,CH
-1245168220,1245173215,US
-1245173216,1245173223,CH
-1245173224,1245178423,US
-1245178424,1245178431,IE
-1245178432,1245183999,US
+1245144832,1245183999,US
1245184000,1245446143,CA
-1245446144,1245662179,US
-1245662180,1245662182,US
-1245662183,1245663891,US
-1245663892,1245663892,US
-1245663893,1245663899,US
-1245663900,1245663900,US
-1245663901,1245664931,US
-1245664932,1245664932,US
-1245664933,1245664939,US
-1245664940,1245664940,US
-1245664941,1245665737,US
-1245665738,1245665739,US
-1245665740,1245665745,US
-1245665746,1245665747,US
-1245665748,1246864899,US
-1246864900,1246864958,EG
-1246864959,1246865663,US
-1246865664,1246865919,GB
-1246865920,1246874127,US
-1246874128,1246874216,GB
-1246874217,1246874368,US
-1246874369,1246874496,GB
-1246874497,1246874558,US
-1246874559,1246874590,GB
-1246874591,1246875509,US
-1246875510,1246875520,NL
-1246875521,1246887935,US
-1246887936,1246888191,PL
-1246888192,1246890463,US
+1245446144,1246890431,US
+1246890432,1246890463,CA
1246890464,1246890464,US
-1246890465,1246902783,US
+1246890465,1246890495,CA
+1246890496,1246902783,US
1246902784,1246903039,NL
-1246903040,1246937087,US
+1246903040,1246923519,US
+1246923520,1246923775,AU
+1246923776,1246937087,US
1246937088,1246945279,CA
-1246945280,1247027199,US
-1247027200,1247034367,A2
-1247034368,1247034623,US
-1247034624,1247035391,A2
-1247035392,1247072719,US
-1247072720,1247072735,NL
-1247072736,1247073791,US
-1247073792,1247074303,A2
-1247074304,1247123455,US
+1246945280,1247119439,US
+1247119440,1247119447,KW
+1247119448,1247119967,US
+1247119968,1247119975,KW
+1247119976,1247123455,US
1247123456,1247123711,GB
1247123712,1247123967,US
1247123968,1247124223,LU
-1247124224,1247481855,US
-1247481856,1247481863,CN
-1247481864,1247481887,US
-1247481888,1247481903,CN
-1247481904,1247481911,US
-1247481912,1247481927,CN
-1247481928,1247481951,US
-1247481952,1247481959,CN
-1247481960,1247481983,US
-1247481984,1247482015,GB
-1247482016,1247482047,CN
-1247482048,1247482063,CA
-1247482064,1247482079,US
-1247482080,1247482087,CN
-1247482088,1247482095,US
-1247482096,1247482103,CN
-1247482104,1247482111,US
-1247482112,1247482175,CN
-1247482176,1247482239,US
-1247482240,1247482255,GB
-1247482256,1247482263,CN
-1247482264,1247482271,US
-1247482272,1247482303,CN
-1247482304,1247482343,US
-1247482344,1247482351,CN
-1247482352,1247482383,US
-1247482384,1247482391,CN
-1247482392,1247482399,US
-1247482400,1247482431,CN
-1247482432,1247482495,US
-1247482496,1247482511,CN
-1247482512,1247482519,US
-1247482520,1247482543,CN
-1247482544,1247482551,US
-1247482552,1247482559,CN
-1247482560,1247482567,US
-1247482568,1247482583,CN
-1247482584,1247482615,US
-1247482616,1247482623,CN
-1247482624,1247482815,US
-1247482816,1247482847,CN
-1247482848,1247482927,US
-1247482928,1247482935,BO
-1247482936,1247482943,US
-1247482944,1247482951,BO
-1247482952,1247482967,US
-1247482968,1247482975,CN
-1247482976,1247483015,US
-1247483016,1247483039,CN
-1247483040,1247483047,CA
-1247483048,1247483079,US
-1247483080,1247483095,CN
-1247483096,1247483111,US
-1247483112,1247483119,CN
-1247483120,1247483647,US
-1247483648,1247483655,CN
-1247483656,1247483679,US
-1247483680,1247483711,CN
-1247483712,1247483743,US
-1247483744,1247483759,CN
-1247483760,1247483767,US
-1247483768,1247483823,CN
-1247483824,1247483831,US
-1247483832,1247483871,CN
-1247483872,1247485183,US
-1247485184,1247485191,CN
-1247485192,1247485231,US
-1247485232,1247485263,CN
-1247485264,1247485439,US
-1247485440,1247485455,CN
-1247485456,1247485463,US
-1247485464,1247485471,CN
-1247485472,1247485487,US
-1247485488,1247485503,CN
-1247485504,1247485511,US
-1247485512,1247485543,CN
-1247485544,1247485631,US
-1247485632,1247485639,CN
-1247485640,1247485647,US
-1247485648,1247485671,CN
-1247485672,1247485679,US
-1247485680,1247485727,CN
-1247485728,1247485735,US
-1247485736,1247485743,CN
-1247485744,1247485751,US
-1247485752,1247485951,CN
-1247485952,1247490047,US
+1247124224,1247490047,US
1247494144,1248864255,US
1248864256,1248866303,CA
1248866304,1248885759,US
@@ -40538,11 +12978,7 @@
1248899072,1248900095,CA
1248900096,1248902143,US
1248902144,1248903167,CA
-1248903168,1248903695,US
-1248903696,1248903711,ZA
-1248903712,1248903775,US
-1248903776,1248903791,FR
-1248903792,1248913407,US
+1248903168,1248913407,US
1248913408,1248915455,MF
1248915456,1248919551,US
1248919552,1248920575,CA
@@ -40552,7 +12988,9 @@
1248936960,1248939007,CA
1248939008,1248946175,US
1248946176,1248947199,VG
-1248947200,1248958463,US
+1248947200,1248956415,US
+1248956416,1248957439,CA
+1248957440,1248958463,US
1248958464,1248959487,CA
1248959488,1248964607,US
1248964608,1248966655,CA
@@ -40562,38 +13000,7 @@
1249010688,1249011711,CA
1249011712,1249019903,US
1249019904,1249020927,CA
-1249020928,1249026455,US
-1249026456,1249026463,ES
-1249026464,1249026703,US
-1249026704,1249026711,ZA
-1249026712,1249026767,US
-1249026768,1249026775,CA
-1249026776,1249026783,MX
-1249026784,1249027127,US
-1249027128,1249027135,ZA
-1249027136,1249027143,AU
-1249027144,1249027175,US
-1249027176,1249027183,IN
-1249027184,1249027223,US
-1249027224,1249027231,GB
-1249027232,1249027351,US
-1249027352,1249027359,CA
-1249027360,1249027391,US
-1249027392,1249027399,PH
-1249027400,1249027503,US
-1249027504,1249027519,CA
-1249027520,1249027647,US
-1249027648,1249027655,GB
-1249027656,1249027719,US
-1249027720,1249027727,GR
-1249027728,1249027735,CO
-1249027736,1249027823,US
-1249027824,1249027839,CA
-1249027840,1249027895,US
-1249027896,1249027903,PL
-1249027904,1249027919,US
-1249027920,1249027935,AU
-1249027936,1249029119,US
+1249020928,1249029119,US
1249029120,1249030143,CA
1249030144,1249036287,US
1249036288,1249037311,TC
@@ -40601,21 +13008,10 @@
1249038336,1249040383,CA
1249040384,1249046527,US
1249046528,1249047551,BM
-1249047552,1249050623,US
-1249050624,1249051135,US
-1249051136,1249051391,US
-1249051392,1249051647,US
-1249051648,1249051903,US
-1249051904,1249052671,US
-1249052672,1249059327,US
+1249047552,1249059327,US
1249059328,1249059839,CA
1249059840,1249082367,US
-1249082368,1249083391,CA
-1249083392,1249091583,US
-1249091584,1249092607,US
-1249092608,1249094015,US
-1249094016,1249094143,RO
-1249094144,1249099775,US
+1249083392,1249099775,US
1249099776,1249101823,CA
1249101824,1249102847,PR
1249102848,1249103103,US
@@ -40628,20 +13024,15 @@
1249130496,1249131519,JM
1249131520,1249139711,US
1249139712,1249140735,MF
-1249140736,1249163263,US
-1249163264,1249165407,CA
-1249165408,1249165471,US
-1249165472,1249165487,CA
-1249165488,1249165567,US
-1249165568,1249165759,CA
-1249165760,1249165791,US
-1249165792,1249166335,CA
-1249166336,1249166367,BZ
-1249166368,1249171455,US
+1249140736,1249142015,US
+1249142016,1249142271,GB
+1249142272,1249163263,US
+1249163264,1249165311,CA
+1249165312,1249165823,US
+1249165824,1249166335,CA
+1249166336,1249171455,US
1249171456,1249173503,CA
-1249173504,1249179967,US
-1249179968,1249179983,SE
-1249179984,1249191935,US
+1249173504,1249191935,US
1249191936,1249193983,CA
1249193984,1249195007,US
1249195008,1249196031,CA
@@ -40649,51 +13040,21 @@
1249203200,1249204223,GD
1249204224,1249210367,US
1249210368,1249212415,KY
-1249212416,1249215503,US
-1249215504,1249215511,CA
-1249215512,1249217535,US
+1249212416,1249217535,US
1249217536,1249218559,CA
-1249218560,1249227007,US
-1249227008,1249227071,CY
-1249227072,1249227135,VG
-1249227136,1249227167,US
-1249227168,1249227199,VG
-1249227200,1249227263,HK
+1249218560,1249227263,US
1249227264,1249227519,VG
-1249227520,1249228031,US
-1249228032,1249228063,CZ
-1249228064,1249228095,US
-1249228096,1249228223,UA
-1249228224,1249228239,CZ
-1249228240,1249228287,US
-1249228288,1249228351,SC
-1249228352,1249229216,US
-1249229217,1249229217,CA
-1249229218,1249229591,US
-1249229592,1249229599,ES
-1249229600,1249234687,US
+1249227520,1249234687,US
1249234688,1249234943,GB
1249234944,1249236991,US
1249236992,1249239039,KY
1249239040,1249245183,US
1249245184,1249247231,CA
1249247232,1249256447,US
-1249256448,1249256588,CA
-1249256589,1249256613,US
-1249256614,1249256649,CA
-1249256650,1249256687,GB
-1249256688,1249256835,CA
-1249256836,1249256868,US
-1249256869,1249256999,CA
-1249257000,1249257009,LB
-1249257010,1249257178,CA
-1249257179,1249257213,GB
-1249257214,1249257471,CA
+1249256448,1249257471,CA
1249257472,1249260543,US
1249260544,1249261567,CA
-1249261568,1249266279,US
-1249266280,1249266287,GB
-1249266288,1249272831,US
+1249261568,1249272831,US
1249272832,1249273855,CA
1249273856,1249310719,US
1249310720,1249311743,CA
@@ -40703,33 +13064,19 @@
1249335296,1249337343,CA
1249337344,1249359871,US
1249359872,1249361919,CA
-1249361920,1249381503,US
-1249381504,1249381519,DE
-1249381520,1249381759,US
-1249381760,1249381763,DE
-1249381764,1249381764,DE
-1249381765,1249381775,DE
-1249381776,1249382287,US
-1249382288,1249382303,DE
-1249382304,1249384447,US
+1249361920,1249379327,US
+1249379328,1249380351,CA
+1249380352,1249384447,US
1249384448,1249386495,PR
1249386496,1249391615,US
1249391616,1249392639,CA
1249392640,1249396735,US
1249396736,1249397759,CA
-1249397760,1249402375,US
-1249402376,1249402383,CA
-1249402384,1249409023,US
+1249397760,1249409023,US
1249409024,1249410047,CA
-1249410048,1249439823,US
-1249439824,1249439839,BR
-1249439840,1249440063,US
-1249440064,1249440127,CW
-1249440128,1249440255,US
-1249440256,1249440271,CW
-1249440272,1249440279,US
-1249440280,1249440287,FR
-1249440288,1249452031,US
+1249410048,1249434623,US
+1249434624,1249435647,CA
+1249435648,1249452031,US
1249452032,1249453055,CA
1249453056,1249474559,US
1249474560,1249475583,CA
@@ -40740,15 +13087,8 @@
1249479936,1249480191,HK
1249480192,1249484799,US
1249484800,1249486847,CA
-1249486848,1249492679,US
-1249492680,1249492687,AU
-1249492688,1249492727,US
-1249492728,1249492735,SA
-1249492736,1249492895,CA
-1249492896,1249492903,BR
-1249492904,1249492959,CA
-1249492960,1249492975,US
-1249492976,1249492991,CA
+1249486848,1249492735,US
+1249492736,1249492991,CA
1249492992,1249506303,US
1249506304,1249507327,CA
1249507328,1249516031,US
@@ -40759,57 +13099,38 @@
1249531904,1249533951,GD
1249533952,1249542143,US
1249542144,1249544191,CA
-1249544192,1249550351,US
-1249550352,1249550367,GB
-1249550368,1249550375,HK
-1249550376,1249550391,US
-1249550392,1249550399,TW
-1249550400,1249550863,US
-1249550864,1249550879,GB
-1249550880,1249550903,US
-1249550904,1249550911,GB
-1249550912,1249550935,US
-1249550936,1249550943,BY
-1249550944,1249562623,US
+1249544192,1249562623,US
1249562624,1249564671,CA
-1249564672,1249567558,US
-1249567559,1249567562,RU
-1249567563,1249567564,US
-1249567565,1249567569,RU
-1249567570,1249568319,US
-1249568320,1249568327,NL
-1249568328,1249571839,US
+1249564672,1249571839,US
1249571840,1249572863,CA
1249572864,1249576959,US
-1249576960,1249577403,CA
-1249577404,1249577468,US
-1249577469,1249577983,CA
+1249576960,1249577983,CA
1249577984,1249592319,US
1249592320,1249593343,CA
1249593344,1249598463,US
1249598464,1249599487,CA
1249599488,1249637887,US
1249637888,1249638143,CA
-1249638144,1249690751,US
-1249690752,1249690783,HK
-1249690784,1249690815,AU
-1249690816,1249710591,US
+1249638144,1249710143,US
+1249710144,1249710207,CN
+1249710208,1249710271,NL
+1249710272,1249710591,BE
1249710592,1249710847,DE
1249710848,1249715711,US
1249715712,1249715967,DE
1249715968,1249716735,US
1249716736,1249716991,DE
1249716992,1249720319,US
-1249720320,1249720352,AU
-1249720353,1249720353,JP
-1249720354,1249720575,AU
-1249720576,1249720599,GB
+1249720320,1249720511,AU
+1249720512,1249720527,IN
+1249720528,1249720575,AU
+1249720576,1249720591,FR
+1249720592,1249720599,GB
1249720600,1249720607,IT
-1249720608,1249720623,CH
-1249720624,1249720703,GB
-1249720704,1249720751,US
-1249720752,1249720767,GB
-1249720768,1249721343,US
+1249720608,1249720831,GB
+1249720832,1249721119,US
+1249721120,1249721135,CA
+1249721136,1249721343,US
1249721344,1249721351,AT
1249721352,1249721359,BE
1249721360,1249721367,CH
@@ -40831,7 +13152,9 @@
1249721512,1249721519,TR
1249721520,1249721527,ZA
1249721528,1249721535,DK
-1249721536,1249721599,GB
+1249721536,1249721543,US
+1249721544,1249721551,GB
+1249721552,1249721599,US
1249721600,1249721607,AT
1249721608,1249721615,BE
1249721616,1249721623,CH
@@ -40858,8 +13181,7 @@
1249721792,1249721799,KE
1249721800,1249721807,TR
1249721808,1249721815,ZA
-1249721816,1249721855,GB
-1249721856,1249722111,US
+1249721816,1249722111,US
1249722112,1249722367,IN
1249722368,1249725439,US
1249725440,1249725695,NL
@@ -40867,133 +13189,41 @@
1249725952,1249726207,NL
1249726208,1249727999,US
1249728000,1249728255,HU
-1249728256,1249736959,US
-1249736960,1249737471,EU
-1249737472,1249744895,US
+1249728256,1249744895,US
1249744896,1249745151,TW
-1249745152,1249773023,US
-1249773024,1249773055,CA
-1249773056,1249796095,US
+1249745152,1249754390,US
+1249754391,1249754391,DE
+1249754392,1249796095,US
1249796096,1249804287,CA
-1249804288,1249838847,US
-1249838848,1249838911,IN
-1249838912,1249838975,US
-1249838976,1249839039,IN
-1249839040,1249839423,US
-1249839424,1249839487,VE
-1249839488,1249843231,US
-1249843232,1249843247,IN
-1249843248,1249843423,US
-1249843424,1249843439,IN
-1249843440,1249846847,US
-1249846848,1249846879,GB
-1249846880,1249846911,CN
-1249846912,1249847039,US
-1249847040,1249847167,IN
-1249847168,1249847839,US
-1249847840,1249847871,IN
-1249847872,1249847903,US
-1249847904,1249847935,NO
-1249847936,1249848927,US
-1249848928,1249848959,AU
-1249848960,1249850367,US
-1249850368,1249850383,IN
-1249850384,1249850511,US
-1249850512,1249850527,CA
-1249850528,1249850543,US
-1249850544,1249850559,IN
-1249850560,1249850575,US
-1249850576,1249850591,IN
-1249850592,1249850607,NG
-1249850608,1249851903,US
+1249804288,1249851903,US
1249851904,1249852159,FR
-1249852160,1249852447,US
-1249852448,1249852479,IN
-1249852480,1249852767,US
-1249852768,1249852775,ID
-1249852776,1249886207,US
+1249852160,1249886207,US
1249886208,1249902591,CA
1249902592,1254490111,US
1254490112,1254555647,CA
-1254555648,1254604047,US
-1254604048,1254604063,ES
-1254604064,1254604159,US
-1254604160,1254604175,GB
-1254604176,1254604191,US
-1254604192,1254604199,IE
-1254604200,1254621183,US
-1254621184,1254629375,CA
+1254555648,1254621183,US
+1254621184,1254622207,CA
+1254622208,1254622463,US
+1254622464,1254629375,CA
1254629376,1254704383,US
1254704384,1254704639,PH
-1254704640,1254704903,US
-1254704904,1254704911,PH
-1254704912,1254713359,US
-1254713360,1254713407,CA
-1254713408,1254738239,US
-1254738240,1254738255,CA
-1254738256,1254738391,US
-1254738392,1254738399,IE
-1254738400,1254752191,US
-1254752192,1254752207,CH
-1254752208,1254924687,US
-1254924688,1254924703,RO
-1254924704,1254978751,US
+1254704640,1254978751,US
1254978752,1254978767,LB
-1254978768,1254993919,US
-1254993920,1254994175,CA
-1254994176,1255002111,US
+1254978768,1254989823,US
+1254989824,1254998015,CA
+1254998016,1255002111,US
1255002112,1255006207,CA
-1255006208,1255007487,US
-1255007488,1255007711,CA
-1255007712,1255011327,US
-1255011328,1255011335,CA
-1255011336,1255011343,US
-1255011344,1255011359,CA
-1255011360,1255011367,US
-1255011368,1255011551,CA
-1255011552,1255011559,US
-1255011560,1255011839,CA
-1255011840,1255039503,US
-1255039504,1255039519,CA
-1255039520,1255039631,US
-1255039632,1255039663,CA
-1255039664,1255044351,US
-1255044352,1255044479,CA
-1255044480,1255047167,US
+1255006208,1255011583,US
+1255011584,1255011839,CA
+1255011840,1255047167,US
1255047168,1255055359,CA
-1255055360,1255057887,US
-1255057888,1255057919,NL
-1255057920,1255058671,US
-1255058672,1255058687,GB
-1255058688,1255059327,US
-1255059328,1255059343,NL
-1255059344,1255059359,US
-1255059360,1255059391,CA
-1255059392,1255060159,US
-1255060160,1255060191,NL
-1255060192,1255060607,US
-1255060608,1255060623,CW
-1255060624,1255060655,US
-1255060656,1255060671,CW
-1255060672,1255061631,US
-1255061632,1255061647,CA
-1255061648,1255061695,US
-1255061696,1255061727,CR
-1255061728,1255061983,US
-1255061984,1255062015,CA
-1255062016,1255062463,US
-1255062464,1255062527,PA
-1255062528,1255210495,US
+1255055360,1255210495,US
1255210496,1255211007,DE
1255211008,1255245311,US
1255245312,1255245567,BR
1255245568,1255264511,US
1255264512,1255264767,SG
-1255264768,1255265279,US
-1255265280,1255266303,SG
-1255266304,1255274047,US
-1255274048,1255274079,GB
-1255274080,1255274495,US
+1255264768,1255274495,US
1255274496,1255274751,SG
1255274752,1255276543,US
1255276544,1255342079,CA
@@ -41003,9 +13233,7 @@
1255372288,1255372543,PA
1255372544,1255372799,US
1255372800,1255373055,DE
-1255373056,1255373567,US
-1255373568,1255373599,PH
-1255373600,1255489535,US
+1255373056,1255489535,US
1255489536,1255505919,PR
1255505920,1255514111,US
1255514112,1255522303,CA
@@ -41013,57 +13241,27 @@
1255571456,1255579647,CA
1255579648,1255669759,US
1255669760,1255735295,CA
-1255735296,1255746799,US
-1255746800,1255746815,BB
-1255746816,1255749247,US
-1255749248,1255749311,CH
-1255749312,1255756799,US
-1255756800,1255756815,CA
-1255756816,1255768063,US
-1255768064,1255768575,CA
-1255768576,1255770367,US
+1255735296,1255770367,US
1255770368,1255770623,CA
-1255770624,1255784959,US
-1255784960,1255784967,BE
-1255784968,1255788511,US
-1255788512,1255788543,BE
-1255788544,1255792127,US
+1255770624,1255792127,US
1255792128,1255792383,IL
-1255792384,1255792767,US
-1255792768,1255792895,IL
-1255792896,1255972863,US
+1255792384,1255972863,US
1255972864,1255981055,CA
1255981056,1256001535,US
1256001536,1256005631,CA
1256005632,1256030207,US
-1256030208,1256030463,CA
-1256030464,1256030663,US
-1256030664,1256030671,CA
-1256030672,1256030687,US
-1256030688,1256034303,CA
-1256034304,1256054271,US
-1256054272,1256054303,CZ
-1256054304,1256054527,US
-1256054528,1256054783,CZ
-1256054784,1256057975,US
-1256057976,1256057983,BZ
-1256057984,1256079359,US
+1256030208,1256034303,CA
+1256034304,1256054399,US
+1256054400,1256054783,CZ
+1256054784,1256079359,US
1256079360,1256087551,KY
-1256087552,1258767359,US
-1258767360,1258767615,US
-1258767616,1258958095,US
-1258958096,1258958103,CA
-1258958104,1263265535,US
-1263265536,1263265599,CA
-1263265600,1263266815,US
-1263266816,1263266823,CN
-1263266824,1263266855,US
-1263266856,1263266863,CN
-1263266864,1263268275,US
-1263268276,1263268340,CA
-1263268341,1263268343,US
-1263268344,1263268351,CA
-1263268352,1263271423,US
+1256087552,1262783487,US
+1262783488,1262783743,CA
+1262783744,1262783871,US
+1262783872,1262783999,CA
+1262784000,1262784127,US
+1262784128,1262784255,CA
+1262784256,1263271423,US
1263271424,1263271679,CA
1263271680,1264717823,US
1264717824,1264718079,CA
@@ -41074,71 +13272,18 @@
1264719872,1264762879,US
1264762880,1264763391,CA
1264763392,1264763647,IE
-1264763648,1264764927,CA
-1264764928,1264764959,US
-1264764960,1264766975,CA
-1264766976,1264968406,US
-1264968407,1264968407,US
-1264968408,1264980735,US
-1264980736,1264980743,CA
-1264980744,1264982847,US
-1264982848,1264982855,CA
-1264982856,1264982895,US
-1264982896,1264982903,AF
-1264982904,1264984575,US
-1264984576,1264984583,VE
-1264984584,1264990975,US
+1264763648,1264766975,CA
+1264766976,1264990975,US
1264990976,1264991231,NL
1264991232,1266147327,US
1266147328,1266155519,CA
-1266155520,1266489663,US
-1266489664,1266489695,CA
-1266489696,1266498175,US
-1266498176,1266498303,MA
-1266498304,1266516817,US
-1266516818,1266516830,IE
-1266516831,1266614599,US
-1266614600,1266614607,CA
-1266614608,1266614655,US
-1266614656,1266614783,CA
-1266614784,1266615551,US
-1266615552,1266615679,CA
-1266615680,1266615711,US
-1266615712,1266615727,SE
-1266615728,1266615743,CA
-1266615744,1266616639,US
-1266616640,1266616655,CA
-1266616656,1266617663,US
-1266617664,1266617695,GB
-1266617696,1266617823,US
-1266617824,1266617839,GB
-1266617840,1268252671,US
+1266155520,1267934968,US
+1267934969,1267934969,CA
+1267934970,1268252671,US
1268252672,1268776959,CA
1268776960,1275600895,US
1275600896,1275604991,BM
-1275604992,1275605263,US
-1275605264,1275605279,PL
-1275605280,1275605567,US
-1275605568,1275605583,PL
-1275605584,1275605823,US
-1275605824,1275605839,PL
-1275605840,1275606207,US
-1275606208,1275606223,PL
-1275606224,1275606367,US
-1275606368,1275606383,PL
-1275606384,1275606975,US
-1275606976,1275606991,PL
-1275606992,1275607071,US
-1275607072,1275607087,PL
-1275607088,1275607407,US
-1275607408,1275607423,PL
-1275607424,1275608319,US
-1275608320,1275608335,PL
-1275608336,1275608575,US
-1275608576,1275608591,PL
-1275608592,1275608831,US
-1275608832,1275608847,PL
-1275608848,1275621375,US
+1275604992,1275621375,US
1275621376,1275625471,CA
1275625472,1275658239,US
1275658240,1275658495,GB
@@ -41149,681 +13294,73 @@
1275665408,1275666431,US
1275666432,1275674623,CA
1275674624,1275707391,US
-1275707392,1275708927,CA
-1275708928,1275708991,US
-1275708992,1275711487,CA
+1275707392,1275711487,CA
1275711488,1275712511,US
1275712512,1275714047,CA
1275714048,1275714559,US
-1275714560,1275714815,CA
-1275714816,1275714831,US
-1275714832,1275714847,IE
-1275714848,1275715583,CA
+1275714560,1275715583,CA
1275715584,1275756543,US
1275756544,1275772927,CA
1275772928,1275789311,US
1275789312,1275822079,CA
-1275822080,1275854967,US
-1275854968,1275854975,CA
-1275854976,1275858215,US
-1275858216,1275858223,BB
-1275858224,1275858239,US
-1275858240,1275858247,CA
-1275858248,1275859671,US
-1275859672,1275859679,AU
-1275859680,1275859711,US
-1275859712,1275859719,PR
-1275859720,1275859727,US
-1275859728,1275859743,PR
-1275859744,1275859807,US
-1275859808,1275859815,AE
-1275859816,1275860087,US
-1275860088,1275860095,MX
-1275860096,1275861039,US
-1275861040,1275861055,CA
-1275861056,1275861103,US
-1275861104,1275861119,GT
-1275861120,1275864175,US
-1275864176,1275864183,CA
-1275864184,1275865055,US
-1275865056,1275865063,AU
-1275865064,1275865383,US
-1275865384,1275865391,CA
-1275865392,1275869087,US
-1275869088,1275869095,CA
-1275869096,1275869103,IL
-1275869104,1275869535,US
-1275869536,1275869551,GB
-1275869552,1275869895,US
-1275869896,1275869903,IL
-1275869904,1275870647,US
-1275870648,1275870655,CA
-1275870656,1275870671,US
-1275870672,1275870695,CA
-1275870696,1275871719,US
-1275871720,1275871727,GB
-1275871728,1275872895,US
-1275872896,1275872903,AU
-1275872904,1275872911,CA
-1275872912,1275872927,US
-1275872928,1275872935,CA
-1275872936,1275873095,US
-1275873096,1275873103,CA
-1275873104,1275873183,US
-1275873184,1275873215,AU
-1275873216,1275873535,US
-1275873536,1275873543,CG
-1275873544,1275873639,US
-1275873640,1275873647,SA
-1275873648,1275875135,US
-1275875136,1275875143,CA
-1275875144,1275875247,US
-1275875248,1275875255,CA
-1275875256,1275875359,US
-1275875360,1275875367,AU
-1275875368,1275875479,US
-1275875480,1275875503,AU
-1275875504,1275875767,US
-1275875768,1275875775,CA
-1275875776,1275876623,US
-1275876624,1275876631,GB
-1275876632,1275876839,US
-1275876840,1275876847,CA
-1275876848,1275877111,US
-1275877112,1275877119,CA
-1275877120,1275877695,US
-1275877696,1275877703,PK
-1275877704,1275879463,US
-1275879464,1275879471,GB
-1275879472,1275879487,AU
-1275879488,1275879503,GB
-1275879504,1275879511,US
-1275879512,1275879519,GB
-1275879520,1275879527,AU
-1275879528,1275879535,US
-1275879536,1275879551,AU
-1275879552,1275879711,US
-1275879712,1275879743,CA
-1275879744,1275879791,US
-1275879792,1275879807,GB
-1275879808,1275880191,US
-1275880192,1275880207,MX
-1275880208,1275880247,US
-1275880248,1275880255,CA
-1275880256,1275880783,US
-1275880784,1275880799,CA
-1275880800,1275881791,US
-1275881792,1275881799,AU
-1275881800,1275881807,CA
-1275881808,1275881847,US
-1275881848,1275881871,CA
-1275881872,1275881887,US
-1275881888,1275881895,CA
-1275881896,1275883991,US
-1275883992,1275883999,CA
-1275884000,1275884391,US
-1275884392,1275884399,AU
-1275884400,1275885551,US
-1275885552,1275885559,IT
-1275885560,1275885567,US
-1275885568,1275885583,IT
-1275885584,1275886703,US
-1275886704,1275886719,CA
-1275886720,1275886735,US
-1275886736,1275886743,AU
-1275886744,1275886855,US
-1275886856,1275886863,IT
-1275886864,1275886879,US
-1275886880,1275886895,IT
-1275886896,1275886983,US
-1275886984,1275886991,PA
-1275886992,1275887063,US
-1275887064,1275887071,AE
-1275887072,1275887079,US
-1275887080,1275887087,AE
-1275887088,1275888015,US
-1275888016,1275888023,IN
-1275888024,1275888039,US
-1275888040,1275888047,GB
-1275888048,1275888311,US
-1275888312,1275888319,DE
-1275888320,1275889695,US
-1275889696,1275889711,CA
-1275889712,1275889967,US
-1275889968,1275889983,DE
-1275889984,1275890039,US
-1275890040,1275890047,CA
-1275890048,1275890087,US
-1275890088,1275890095,GB
-1275890096,1275890191,US
-1275890192,1275890207,SA
-1275890208,1275890359,US
-1275890360,1275890367,CA
-1275890368,1275890423,US
-1275890424,1275890431,NL
-1275890432,1275890687,US
-1275890688,1275890703,DE
-1275890704,1275890735,US
-1275890736,1275890751,NL
-1275890752,1275891007,US
-1275891008,1275891015,CA
-1275891016,1275891063,US
-1275891064,1275891071,LB
-1275891072,1275891191,US
-1275891192,1275891199,DE
-1275891200,1275891463,US
-1275891464,1275891471,IE
-1275891472,1275891511,US
-1275891512,1275891519,AU
-1275891520,1275892255,US
-1275892256,1275892279,DK
-1275892280,1275892423,US
-1275892424,1275892431,GB
-1275892432,1275892735,US
-1275892736,1275892767,GB
-1275892768,1275892951,US
-1275892952,1275892967,GB
-1275892968,1275893303,US
-1275893304,1275893311,CA
-1275893312,1275893455,US
-1275893456,1275893463,MX
-1275893464,1275893775,US
-1275893776,1275893791,MX
-1275893792,1275894327,US
-1275894328,1275894335,GB
-1275894336,1275894383,US
-1275894384,1275894399,GB
-1275894400,1275894519,US
-1275894520,1275894527,AU
-1275894528,1275894831,US
-1275894832,1275894863,AU
-1275894864,1275895023,US
-1275895024,1275895039,CA
-1275895040,1275895095,US
-1275895096,1275895103,CG
-1275895104,1275895135,US
-1275895136,1275895143,SA
-1275895144,1275895159,US
-1275895160,1275895167,CA
-1275895168,1275895191,US
-1275895192,1275895199,GB
-1275895200,1275895263,US
-1275895264,1275895271,NG
-1275895272,1275896951,US
-1275896952,1275896959,PK
-1275896960,1275898247,US
-1275898248,1275898255,IT
-1275898256,1275898319,US
-1275898320,1275898335,IT
-1275898336,1275898783,US
-1275898784,1275898791,AU
-1275898792,1275898799,US
-1275898800,1275898807,AU
-1275898808,1275899223,US
-1275899224,1275899231,PT
-1275899232,1275899887,US
-1275899888,1275899903,NO
-1275899904,1275900271,US
-1275900272,1275900287,GB
-1275900288,1275901007,US
-1275901008,1275901023,PT
-1275901024,1275901135,US
-1275901136,1275901143,IL
-1275901144,1275901439,US
-1275901440,1275901455,GB
-1275901456,1275901511,US
-1275901512,1275901519,MX
-1275901520,1275901783,US
-1275901784,1275901791,NG
-1275901792,1275902031,US
-1275902032,1275902039,GB
-1275902040,1275902047,US
-1275902048,1275902079,GB
-1275902080,1275902119,US
-1275902120,1275902127,NG
-1275902128,1275902303,US
-1275902304,1275902311,CA
-1275902312,1275902383,US
-1275902384,1275902391,CA
-1275902392,1275903863,US
-1275903864,1275903871,CA
-1275903872,1275904823,US
-1275904824,1275904831,NG
-1275904832,1275905767,US
-1275905768,1275905783,GB
-1275905784,1275905791,ZA
-1275905792,1275906343,US
-1275906344,1275906351,CA
-1275906352,1275907071,US
-1275907072,1275907079,CA
-1275907080,1275907911,US
-1275907912,1275907919,HK
-1275907920,1275908431,US
-1275908432,1275908447,GB
-1275908448,1275910207,US
-1275910208,1275910223,PA
-1275910224,1275910399,US
-1275910400,1275910407,AE
-1275910408,1275910503,US
-1275910504,1275910511,IN
-1275910512,1275911655,US
-1275911656,1275911663,CA
-1275911664,1275911935,US
-1275911936,1275911967,CA
-1275911968,1275912759,US
+1275822080,1275912759,US
1275912760,1275912783,CA
-1275912784,1275912879,US
-1275912880,1275912887,PT
-1275912888,1275914135,US
-1275914136,1275914143,AU
-1275914144,1275915655,US
-1275915656,1275915663,MX
-1275915664,1275916167,US
-1275916168,1275916199,CA
-1275916200,1275916351,US
-1275916352,1275916383,NL
-1275916384,1275916887,US
-1275916888,1275916895,CA
-1275916896,1275918463,US
-1275918464,1275918479,IN
-1275918480,1275918719,US
-1275918720,1275918735,CA
-1275918736,1275918807,US
-1275918808,1275918815,NG
-1275918816,1275919263,US
-1275919264,1275919279,IE
-1275919280,1275919911,US
-1275919912,1275919919,BR
-1275919920,1275919935,US
-1275919936,1275919967,BR
-1275919968,1275919999,IE
-1275920000,1275920015,GB
-1275920016,1275920055,US
-1275920056,1275920063,GB
-1275920064,1275920079,US
-1275920080,1275920095,CA
-1275920096,1276821225,US
-1276821226,1276821226,US
-1276821227,1279262719,US
+1275912784,1279262719,US
1279262720,1279787007,CA
-1279787008,1279827967,US
-1279827968,1279827983,IL
-1279827984,1279827991,US
-1279827992,1279827999,IL
-1279828000,1279828015,GB
-1279828016,1279828031,IL
-1279828032,1279828047,US
-1279828048,1279828055,IL
-1279828056,1279828063,US
-1279828064,1279828071,NO
-1279828072,1279828511,US
-1279828512,1279828527,SA
-1279828528,1279828535,US
-1279828536,1279828543,FR
-1279828544,1279828567,US
-1279828568,1279828575,CA
-1279828576,1279828615,US
-1279828616,1279828623,CA
-1279828624,1279828639,US
-1279828640,1279828647,NO
-1279828648,1279828679,US
-1279828680,1279828687,AR
-1279828688,1279828695,US
-1279828696,1279828735,AR
-1279828736,1279828751,US
-1279828752,1279828759,GB
-1279828760,1279828767,SA
-1279828768,1279828799,US
-1279828800,1279828815,AR
-1279828816,1279828831,IL
-1279828832,1279828991,US
-1279828992,1279829031,EG
-1279829032,1279829063,US
-1279829064,1279829071,NO
-1279829072,1279829095,US
-1279829096,1279829103,SG
-1279829104,1279829231,US
-1279829232,1279829239,EG
-1279829240,1279829247,IN
-1279829248,1279829375,BA
-1279829376,1279829503,US
-1279829504,1279829511,MX
-1279829512,1279829519,US
-1279829520,1279829527,EG
-1279829528,1279829535,AE
-1279829536,1279829543,US
-1279829544,1279829551,AU
-1279829552,1279829559,US
-1279829560,1279829567,CN
-1279829568,1279829575,IL
-1279829576,1279829663,US
-1279829664,1279829671,NO
-1279829672,1279829695,US
-1279829696,1279829703,IL
-1279829704,1279829711,US
-1279829712,1279829759,FR
-1279829760,1279829815,US
-1279829816,1279829823,AZ
-1279829824,1279829839,US
-1279829840,1279829847,IL
-1279829848,1279829855,SE
-1279829856,1279829871,IL
-1279829872,1279829879,US
-1279829880,1279829887,CA
-1279829888,1279829895,US
-1279829896,1279829903,IN
-1279829904,1279829911,IL
-1279829912,1279829919,EG
-1279829920,1279830015,US
-1279830016,1279830023,IL
-1279830024,1279830095,US
-1279830096,1279830103,BR
-1279830104,1279830111,CL
-1279830112,1279830127,US
-1279830128,1279830143,CY
-1279830144,1279830151,US
-1279830152,1279830159,BD
-1279830160,1279830175,DE
-1279830176,1279830247,US
-1279830248,1279830255,CN
-1279830256,1279830463,US
-1279830464,1279830527,BA
-1279830528,1279848447,US
-1279848448,1279852543,PR
-1279852544,1279921919,US
-1279921920,1279922047,IE
-1279922048,1279940879,US
-1279940880,1279940887,DE
-1279940888,1279940943,US
-1279940944,1279940959,DE
-1279940960,1279940991,US
-1279940992,1279940999,DE
-1279941000,1279943679,US
-1279943680,1279943743,PR
-1279943744,1279950847,US
+1279787008,1279848447,US
+1279848448,1279851519,PR
+1279851520,1279852031,VI
+1279852032,1279852543,PR
+1279852544,1279950847,US
1279950848,1279951103,CA
-1279951104,1279951167,US
-1279951168,1279951199,CA
-1279951200,1279951223,US
-1279951224,1279952127,CA
-1279952128,1279952159,US
-1279952160,1279952175,CA
-1279952176,1279952191,US
-1279952192,1279952223,CA
-1279952224,1279952231,US
-1279952232,1279952239,CA
-1279952240,1279952383,US
-1279952384,1279952919,CA
-1279952920,1279952927,VG
-1279952928,1279952943,US
-1279952944,1279953023,CA
-1279953024,1279953055,VG
-1279953056,1279953087,US
-1279953088,1279953663,CA
-1279953664,1279953687,US
-1279953688,1279953823,CA
-1279953824,1279953919,US
-1279953920,1279953935,CA
-1279953936,1279953967,US
-1279953968,1279954015,CA
-1279954016,1279954047,US
-1279954048,1279954095,CA
-1279954096,1279954119,US
-1279954120,1279954175,CA
-1279954176,1279954431,US
-1279954432,1279954495,CA
-1279954496,1279954543,US
-1279954544,1279954623,CA
-1279954624,1279954655,US
-1279954656,1279954719,CA
-1279954720,1279954727,US
-1279954728,1279954783,CA
-1279954784,1279954839,US
-1279954840,1279954879,CA
-1279954880,1279954915,US
-1279954916,1279954927,CA
-1279954928,1279955095,US
-1279955096,1279955103,BB
-1279955104,1279955119,CA
-1279955120,1279955151,US
-1279955152,1279955159,AU
-1279955160,1279956059,US
-1279956060,1279956063,MX
-1279956064,1279956071,US
-1279956072,1279956079,CA
-1279956080,1279957172,US
-1279957173,1279957173,IN
-1279957174,1279957174,US
-1279957175,1279957175,IN
-1279957176,1279957179,US
-1279957180,1279957180,IN
-1279957181,1279957184,US
-1279957185,1279957185,IN
-1279957186,1279957431,US
-1279957432,1279957439,IN
-1279957440,1279957631,US
-1279957632,1279957651,IN
-1279957652,1279959551,US
+1279951104,1279951231,US
+1279951232,1279952127,CA
+1279952128,1279952383,US
+1279952384,1279952895,CA
+1279952896,1279953151,US
+1279953152,1279953663,CA
+1279953664,1279959551,US
1279959552,1279959807,CA
-1279959808,1279960063,US
-1279960064,1279960127,CA
-1279960128,1279960143,US
-1279960144,1279960159,CA
-1279960160,1279960223,US
-1279960224,1279960319,CA
-1279960320,1279960335,US
-1279960336,1279960343,CA
-1279960344,1279960415,US
-1279960416,1279960527,CA
-1279960528,1279960535,US
-1279960536,1279960559,CA
-1279960560,1279960567,MX
-1279960568,1279962223,US
-1279962224,1279962239,CA
-1279962240,1279962783,US
-1279962784,1279962791,CN
-1279962792,1279962895,US
-1279962896,1279962911,CA
-1279962912,1279962927,CN
-1279962928,1279963135,US
+1279959808,1279960479,US
+1279960480,1279960511,CA
+1279960512,1279963135,US
1279963136,1279963391,IN
-1279963392,1279963935,US
-1279963936,1279963967,CA
-1279963968,1279965183,US
+1279963392,1279965183,US
1279965184,1279966207,CA
1279966208,1279967231,US
-1279967232,1279967519,CA
-1279967520,1279967543,US
-1279967544,1279967583,CA
-1279967584,1279967695,US
-1279967696,1279967711,CA
-1279967712,1279968127,US
+1279967232,1279967487,CA
+1279967488,1279968127,US
1279968128,1279968255,CA
-1279968256,1279969311,US
-1279969312,1279969423,CA
-1279969424,1279969471,US
-1279969472,1279969535,CA
-1279969536,1279969551,US
-1279969552,1279969567,CA
-1279969568,1279969663,US
+1279968256,1279969343,US
+1279969344,1279969407,CA
+1279969408,1279969663,US
1279969664,1279969791,CA
-1279969792,1279969919,US
-1279969920,1279969935,CA
-1279969936,1279970047,US
+1279969792,1279970047,US
1279970048,1279970303,CA
-1279970304,1279970431,US
-1279970432,1279970447,CA
-1279970448,1279970495,US
-1279970496,1279970511,CA
-1279970512,1279970519,US
-1279970520,1279970815,CA
-1279970816,1279970911,US
-1279970912,1279970943,CA
-1279970944,1279971583,US
+1279970304,1279970559,US
+1279970560,1279970815,CA
+1279970816,1279970943,US
+1279970944,1279971071,CA
+1279971072,1279971583,US
1279971584,1279972095,CA
-1279972096,1279973951,US
-1279973952,1279973967,CA
-1279973968,1279973983,US
+1279972096,1279973983,US
1279973984,1279974015,IN
-1279974016,1279974175,US
-1279974176,1279974199,CA
-1279974200,1279974207,US
-1279974208,1279974271,CA
-1279974272,1279974391,US
-1279974392,1279974399,CA
-1279974400,1279974799,US
-1279974800,1279974815,CA
-1279974816,1279975407,US
-1279975408,1279975423,NZ
-1279975424,1279975695,CA
-1279975696,1279975967,US
-1279975968,1279975975,HK
-1279975976,1279975983,US
-1279975984,1279976007,CA
-1279976008,1279976031,US
-1279976032,1279976063,KN
-1279976064,1279976127,US
-1279976128,1279976143,CA
-1279976144,1279976159,US
-1279976160,1279976959,CA
+1279974016,1279975423,US
+1279975424,1279975679,CA
+1279975680,1279976191,US
+1279976192,1279976959,CA
1279976960,1279977215,US
1279977216,1279977471,CA
1279977472,1279977727,US
-1279977728,1279978111,CA
-1279978112,1279978143,US
-1279978144,1279978495,CA
-1279978496,1279979559,US
-1279979560,1279979575,CA
-1279979576,1279979583,US
-1279979584,1279979647,CA
-1279979648,1279979775,US
-1279979776,1279980063,CA
-1279980064,1279980079,US
-1279980080,1279980127,CA
-1279980128,1279980135,US
-1279980136,1279980159,CA
-1279980160,1279980287,US
+1279977728,1279977983,CA
+1279977984,1279979775,US
+1279979776,1279980031,CA
+1279980032,1279980287,US
1279980288,1279981567,CA
1279981568,1279999999,US
1280000000,1280032767,CA
1280032768,1280040959,US
-1280040960,1280043527,CA
-1280043528,1280043535,US
-1280043536,1280043551,CA
-1280043552,1280043559,US
-1280043560,1280043567,CA
-1280043568,1280043607,US
-1280043608,1280043679,CA
-1280043680,1280043703,US
-1280043704,1280043711,CA
-1280043712,1280043719,US
-1280043720,1280043751,CA
-1280043752,1280043759,US
-1280043760,1280043767,CA
-1280043768,1280043775,US
-1280043776,1280043807,CA
-1280043808,1280043815,US
-1280043816,1280043823,CA
-1280043824,1280043831,US
-1280043832,1280043959,CA
-1280043960,1280043975,US
-1280043976,1280044447,CA
-1280044448,1280044455,US
-1280044456,1280044463,CA
-1280044464,1280044471,US
-1280044472,1280044503,CA
-1280044504,1280044535,US
-1280044536,1280045063,CA
-1280045064,1280045071,US
-1280045072,1280045167,CA
-1280045168,1280045175,US
-1280045176,1280045183,CA
-1280045184,1280045191,US
-1280045192,1280045439,CA
-1280045440,1280045463,US
-1280045464,1280045511,CA
-1280045512,1280045527,US
-1280045528,1280045551,CA
-1280045552,1280045559,US
-1280045560,1280045711,CA
-1280045712,1280045727,US
-1280045728,1280045783,CA
-1280045784,1280045791,US
-1280045792,1280045879,CA
-1280045880,1280045887,US
-1280045888,1280046039,CA
-1280046040,1280046055,US
-1280046056,1280046167,CA
-1280046168,1280046199,US
-1280046200,1280046231,CA
-1280046232,1280046239,US
-1280046240,1280046247,CA
-1280046248,1280046255,US
-1280046256,1280046343,CA
-1280046344,1280046351,US
-1280046352,1280046423,CA
-1280046424,1280046431,US
-1280046432,1280046527,CA
-1280046528,1280046551,US
-1280046552,1280046751,CA
-1280046752,1280046759,US
-1280046760,1280046791,CA
-1280046792,1280046799,US
-1280046800,1280046871,CA
-1280046872,1280046879,US
-1280046880,1280046951,CA
-1280046952,1280046959,US
-1280046960,1280047095,CA
-1280047096,1280047103,US
-1280047104,1280047183,CA
-1280047184,1280047191,US
-1280047192,1280047495,CA
-1280047496,1280047519,US
-1280047520,1280047527,CA
-1280047528,1280047535,NL
-1280047536,1280047543,CA
-1280047544,1280047551,US
-1280047552,1280047583,CA
-1280047584,1280047591,US
-1280047592,1280047775,CA
-1280047776,1280047783,US
-1280047784,1280047799,CA
-1280047800,1280047807,US
-1280047808,1280047831,CA
-1280047832,1280047839,US
-1280047840,1280047967,CA
-1280047968,1280047983,US
-1280047984,1280047991,CA
-1280047992,1280047999,US
-1280048000,1280048095,CA
-1280048096,1280048103,US
-1280048104,1280048119,CA
-1280048120,1280048127,US
-1280048128,1280048399,CA
-1280048400,1280048407,US
-1280048408,1280048591,CA
-1280048592,1280048599,US
-1280048600,1280048607,CA
-1280048608,1280048623,US
-1280048624,1280048631,NL
-1280048632,1280048639,US
-1280048640,1280048735,CA
-1280048736,1280048743,US
-1280048744,1280048895,CA
-1280048896,1280048903,US
-1280048904,1280048911,CA
-1280048912,1280048919,FR
-1280048920,1280048991,CA
-1280048992,1280049007,US
-1280049008,1280049031,CA
-1280049032,1280049039,NL
-1280049040,1280049063,CA
-1280049064,1280049071,US
-1280049072,1280049095,CA
-1280049096,1280049103,US
-1280049104,1280049111,CA
-1280049112,1280049127,US
-1280049128,1280049151,CA
+1280040960,1280049151,CA
1280049152,1280073727,US
1280073728,1280081919,CA
1280081920,1280090111,US
@@ -41839,25 +13376,7 @@
1280098304,1280102399,PR
1280102400,1280131071,US
1280131072,1280139263,CA
-1280139264,1286389759,US
-1286389760,1286390271,US
-1286390272,1286390527,US
-1286390528,1286390783,US
-1286390784,1286391295,US
-1286391296,1286391807,US
-1286391808,1286393855,US
-1286393856,1286394623,US
-1286394624,1286395391,US
-1286395392,1286396159,US
-1286396160,1286398975,US
-1286398976,1286399487,US
-1286399488,1287611402,US
-1287611403,1287611403,US
-1287611404,1287877503,US
-1287877504,1287877567,UM
-1287877568,1290252799,US
-1290252800,1290252863,GB
-1290252864,1291845631,US
+1280139264,1291845631,US
1291845632,1292894207,DE
1292894208,1293156351,NO
1293156352,1293549567,DE
@@ -41868,9 +13387,7 @@
1294073856,1294204927,RU
1294204928,1294237695,RO
1294237696,1294270463,IR
-1294270464,1294278463,DE
-1294278464,1294278495,CA
-1294278496,1294303231,DE
+1294270464,1294303231,DE
1294303232,1294335999,RU
1294336000,1294368767,SI
1294368768,1294401535,LV
@@ -41891,21 +13408,13 @@
1294893056,1294925823,RS
1294925824,1294958591,DE
1294958592,1294991359,UA
-1294991360,1294998527,CZ
-1294998528,1294998591,SK
-1294998592,1295009023,CZ
-1295009024,1295009407,SK
-1295009408,1295016751,CZ
-1295016752,1295016767,GB
-1295016768,1295047679,CZ
+1294991360,1295047679,CZ
1295047680,1295048191,SK
1295048192,1295056895,CZ
1295056896,1295122431,GR
1295122432,1295253503,RU
1295253504,1295319039,UA
-1295319040,1295349119,SE
-1295349120,1295349247,NO
-1295349248,1295384575,SE
+1295319040,1295384575,SE
1295384576,1295450111,PT
1295450112,1295515647,PL
1295515648,1295777791,CH
@@ -41913,213 +13422,91 @@
1296039936,1296072703,SA
1296072704,1296105471,DE
1296105472,1296171007,PL
-1296171008,1296181743,DK
-1296181744,1296181751,GB
-1296181752,1296203775,DK
+1296171008,1296203775,DK
1296203776,1296236543,RU
1296236544,1296236671,FR
1296236672,1296236799,US
-1296236800,1296237055,GB
-1296237056,1296237311,FR
-1296237312,1296237439,US
+1296236800,1296237439,FR
1296237440,1296237567,IT
-1296237568,1296238079,FR
-1296238080,1296238591,DE
+1296237568,1296238591,FR
1296238592,1296239103,NL
1296239104,1296239231,FR
1296239232,1296239359,NL
1296239360,1296239615,DE
-1296239616,1296240383,FR
-1296240384,1296241151,BE
-1296241152,1296241407,IT
+1296239616,1296241407,FR
1296241408,1296242175,NL
-1296242176,1296242303,DE
+1296242176,1296242303,FR
1296242304,1296242431,NL
-1296242432,1296242687,BE
-1296242688,1296243199,FR
-1296243200,1296243455,GB
+1296242432,1296243455,FR
1296243456,1296243711,DE
1296243712,1296244223,US
1296244224,1296244479,NL
-1296244480,1296244735,GB
-1296244736,1296244991,IR
+1296244480,1296244991,FR
1296244992,1296245247,CH
-1296245248,1296245503,CA
+1296245248,1296245503,FR
1296245504,1296245759,NL
1296245760,1296246783,ES
1296246784,1296247295,NL
-1296247296,1296247807,FR
-1296247808,1296247871,US
-1296247872,1296247935,GB
-1296247936,1296248191,FR
-1296248192,1296248255,IE
-1296248256,1296248318,BE
-1296248319,1296248319,FR
-1296248320,1296248383,BE
-1296248384,1296248447,IT
-1296248448,1296248575,US
-1296248576,1296248703,IE
-1296248704,1296248959,FR
+1296247296,1296248959,FR
1296248960,1296249023,DE
1296249024,1296249087,GB
-1296249088,1296249151,US
-1296249152,1296249855,FR
-1296249856,1296249887,US
-1296249888,1296249919,FR
-1296249920,1296249951,US
-1296249952,1296250015,DE
-1296250016,1296250047,IL
-1296250048,1296250079,IE
-1296250080,1296250111,IL
-1296250112,1296250143,IE
-1296250144,1296250175,GB
-1296250176,1296250207,FR
-1296250208,1296250239,ES
-1296250240,1296250271,BE
-1296250272,1296250303,DE
-1296250304,1296250335,FR
-1296250336,1296250367,ES
+1296249088,1296250367,FR
1296250368,1296250399,CZ
1296250400,1296250431,DE
1296250432,1296250463,PL
1296250464,1296250495,RO
1296250496,1296250527,FR
1296250528,1296250559,DK
-1296250560,1296250847,FR
-1296250848,1296250879,GB
-1296250880,1296250975,FR
-1296250976,1296251007,DE
-1296251008,1296251039,FR
-1296251040,1296251071,US
-1296251072,1296251103,NL
-1296251104,1296251135,ES
-1296251136,1296251167,GB
-1296251168,1296251199,US
-1296251200,1296251295,DE
-1296251296,1296251327,BE
-1296251328,1296251359,IE
-1296251360,1296251391,DE
+1296250560,1296250623,FR
+1296250624,1296250879,BE
+1296250880,1296251199,FR
+1296251200,1296251231,NL
+1296251232,1296251391,FR
1296251392,1296251775,NL
1296251776,1296251903,DE
-1296251904,1296251919,IR
-1296251920,1296251935,BE
-1296251936,1296251967,US
-1296251968,1296252015,NL
-1296252016,1296252039,US
-1296252040,1296252055,DE
-1296252056,1296252063,US
-1296252064,1296252079,IT
-1296252080,1296252087,IE
-1296252088,1296252095,FR
-1296252096,1296252111,BE
-1296252112,1296252127,GB
-1296252128,1296252143,ES
-1296252144,1296252159,US
-1296252160,1296252175,GB
-1296252176,1296252191,PL
-1296252192,1296252207,RO
-1296252208,1296252223,BG
-1296252224,1296252239,GB
-1296252240,1296252255,IT
-1296252256,1296252271,GB
-1296252272,1296252303,FR
-1296252304,1296252319,IL
-1296252320,1296252335,GB
-1296252336,1296252351,FR
-1296252352,1296252359,DE
-1296252360,1296252367,BE
-1296252368,1296252383,DE
-1296252384,1296252391,FR
-1296252392,1296252395,US
-1296252396,1296252399,FR
-1296252400,1296252431,IE
-1296252432,1296252439,FR
-1296252440,1296252447,RU
-1296252448,1296252479,US
-1296252480,1296252671,FR
-1296252672,1296252679,GB
-1296252680,1296252687,FR
-1296252688,1296252695,NL
-1296252696,1296252711,DE
-1296252712,1296252719,FR
-1296252720,1296252727,BE
-1296252728,1296252735,IL
-1296252736,1296252739,FR
-1296252740,1296252743,IM
-1296252744,1296252759,FR
-1296252760,1296252791,DE
-1296252792,1296252799,IE
-1296252800,1296252839,GB
-1296252840,1296252847,DE
-1296252848,1296252855,GB
-1296252856,1296252871,IE
-1296252872,1296252887,DE
-1296252888,1296252895,IE
-1296252896,1296252911,BE
-1296252912,1296252919,GB
-1296252920,1296252927,PL
-1296252928,1296255743,DE
-1296255744,1296255999,FR
-1296256000,1296256840,DE
-1296256841,1296256848,US
-1296256849,1296257023,DE
-1296257024,1296257535,US
-1296257536,1296257791,DE
-1296257792,1296258047,FR
-1296258048,1296258303,TW
+1296251904,1296252479,FR
+1296252480,1296252487,ES
+1296252488,1296252535,FR
+1296252536,1296252543,IT
+1296252544,1296252591,FR
+1296252592,1296252595,GB
+1296252596,1296252607,FR
+1296252608,1296252615,NL
+1296252616,1296252623,ES
+1296252624,1296252667,FR
+1296252668,1296252671,GB
+1296252672,1296252871,FR
+1296252872,1296252879,DE
+1296252880,1296256839,FR
+1296256840,1296256847,US
+1296256848,1296258303,FR
1296258304,1296259071,NL
-1296259072,1296259583,US
-1296259584,1296259839,DE
+1296259072,1296259839,FR
1296259840,1296260351,NL
-1296260352,1296260607,FR
-1296260608,1296262143,DE
+1296260352,1296261119,FR
+1296261120,1296262143,DE
1296262144,1296262399,FR
1296262400,1296262655,US
1296262656,1296263679,FR
1296263680,1296263935,US
1296263936,1296263943,FR
-1296263944,1296263999,US
-1296264000,1296264015,FR
-1296264016,1296264023,US
-1296264024,1296264027,DE
-1296264028,1296264031,FR
-1296264032,1296264035,IM
-1296264036,1296264047,US
-1296264048,1296264055,CH
-1296264056,1296264063,FR
-1296264064,1296264151,GB
-1296264152,1296264191,FR
-1296264192,1296264543,US
-1296264544,1296264639,CA
-1296264640,1296264671,US
-1296264672,1296264959,FR
-1296264960,1296265023,US
-1296265024,1296265087,FR
-1296265088,1296265151,CA
-1296265152,1296265471,FR
-1296265472,1296265727,US
-1296265728,1296266239,FR
+1296263944,1296263959,US
+1296263960,1296264287,FR
+1296264288,1296264303,US
+1296264304,1296266239,FR
1296266240,1296266751,US
-1296266752,1296267519,FR
-1296267520,1296267775,CA
-1296267776,1296268031,US
-1296268032,1296268287,FR
-1296268288,1296268799,US
-1296268800,1296269055,FR
+1296266752,1296269055,FR
1296269056,1296269311,US
-1296269312,1296285695,TR
-1296285696,1296302079,BY
+1296269312,1296302079,BY
1296302080,1296334847,GB
1296334848,1296367615,DK
1296367616,1296400383,GR
1296400384,1296433151,BH
1296433152,1296465919,BG
1296465920,1296470015,LT
-1296470016,1296472383,NO
-1296472384,1296472415,BI
-1296472416,1296473087,NO
-1296473088,1296474623,LT
-1296474624,1296476159,US
+1296470016,1296473087,NO
+1296473088,1296475135,LT
+1296475136,1296476159,US
1296476160,1296479743,LT
1296479744,1296482303,NO
1296482304,1296498687,LT
@@ -42143,17 +13530,8 @@
1296596992,1296599039,DE
1296599040,1296601087,RU
1296601088,1296605183,NL
-1296605184,1296606271,AT
-1296606272,1296606335,DE
-1296606336,1296606367,AT
-1296606368,1296606399,CH
-1296606400,1296607103,AT
-1296607104,1296607135,CH
-1296607136,1296607231,AT
-1296607232,1296607743,CH
-1296607744,1296607999,NL
-1296608000,1296609023,CH
-1296609024,1296609279,NL
+1296605184,1296607231,AT
+1296607232,1296609279,NL
1296609280,1296611327,CH
1296611328,1296613375,TR
1296613376,1296615423,IT
@@ -42182,52 +13560,15 @@
1296670720,1296672767,ES
1296672768,1296674815,GB
1296674816,1296676863,BE
-1296676864,1296677271,NG
-1296677272,1296677287,A2
-1296677288,1296677311,NG
-1296677312,1296677319,A2
-1296677320,1296677343,NG
-1296677344,1296677351,A2
-1296677352,1296677367,NG
-1296677368,1296677375,US
-1296677376,1296677511,NG
-1296677512,1296677519,A2
-1296677520,1296677591,NG
-1296677592,1296677599,A2
-1296677600,1296677703,NG
-1296677704,1296677719,A2
-1296677720,1296677735,NG
-1296677736,1296677751,A2
-1296677752,1296677767,NG
-1296677768,1296677775,A2
-1296677776,1296677959,NG
-1296677960,1296677967,A2
-1296677968,1296677991,NG
-1296677992,1296678015,A2
-1296678016,1296678047,NG
-1296678048,1296678079,A2
-1296678080,1296678119,NG
-1296678120,1296678143,A2
-1296678144,1296678151,NG
-1296678152,1296678159,A2
-1296678160,1296678215,NG
-1296678216,1296678223,A2
-1296678224,1296678351,NG
-1296678352,1296678367,A2
-1296678368,1296678415,NG
-1296678416,1296678431,A2
-1296678432,1296678447,NG
-1296678448,1296678463,A2
-1296678464,1296678471,NG
-1296678472,1296678479,A2
-1296678480,1296678775,NG
-1296678776,1296678791,A2
-1296678792,1296678831,NG
-1296678832,1296678839,A2
-1296678840,1296678911,NG
-1296678912,1296680191,SA
-1296680192,1296680447,AE
-1296680448,1296680959,KW
+1296676864,1296677295,JE
+1296677296,1296677303,NG
+1296677304,1296677639,JE
+1296677640,1296677647,NG
+1296677648,1296677727,JE
+1296677728,1296677735,NG
+1296677736,1296678903,JE
+1296678904,1296678911,NG
+1296678912,1296680959,SA
1296680960,1296683007,ES
1296683008,1296685055,IE
1296685056,1296687103,TR
@@ -42235,9 +13576,7 @@
1296689152,1296691199,RU
1296691200,1296693247,CH
1296693248,1296695295,DE
-1296695296,1296696831,CH
-1296696832,1296697087,DE
-1296697088,1296697343,CH
+1296695296,1296697343,CH
1296697344,1296699391,RU
1296699392,1296701439,IT
1296701440,1296703487,RU
@@ -42258,12 +13597,9 @@
1296732160,1296734207,IT
1296734208,1296736255,FR
1296736256,1296738303,NO
-1296738304,1296738815,CH
-1296738816,1296739327,FI
-1296739328,1296740351,CH
+1296738304,1296740351,CH
1296740352,1296744447,RU
1296744448,1296746495,GB
-1296746496,1296748543,SI
1296748544,1296750591,FR
1296750592,1296752639,NO
1296752640,1296754687,BA
@@ -42274,8 +13610,7 @@
1296764928,1296769023,AT
1296769024,1296771071,TR
1296771072,1296773119,LT
-1296773120,1296774367,FR
-1296774368,1296775167,EU
+1296773120,1296774143,FR
1296775168,1296779263,FR
1296779264,1296781311,CZ
1296781312,1296783359,DK
@@ -42285,10 +13620,7 @@
1296789504,1296791551,CH
1296791552,1296793599,GB
1296793600,1296795647,RU
-1296795648,1296795903,NL
-1296795904,1296796159,GB
-1296796160,1296796415,NL
-1296796416,1296797695,GB
+1296795648,1296797695,GB
1296797696,1296799743,UA
1296799744,1296801791,RU
1296801792,1296803839,DK
@@ -42312,27 +13644,20 @@
1296941056,1296957439,BA
1296957440,1296973823,BG
1296973824,1296990207,CZ
-1296990208,1296995327,BG
-1296995328,1296996351,GR
-1296996352,1297006591,BG
+1296990208,1297006591,BG
1297006592,1297022975,BA
1297022976,1297039359,LT
1297039360,1297055743,TR
1297055744,1297072127,RU
-1297072128,1297072639,PL
-1297072640,1297072703,CY
-1297072704,1297072863,PL
-1297072864,1297072871,IT
-1297072872,1297088511,PL
+1297072128,1297088511,PL
1297088512,1297121279,AT
1297121280,1297154047,SE
-1297154048,1297154815,RO
-1297154816,1297155071,MD
-1297155072,1297215487,RO
+1297154048,1297178623,RO
+1297178624,1297178879,NL
+1297178880,1297215487,RO
1297215488,1297217535,NL
1297217536,1297219583,RO
1297219584,1297285119,RU
-1297285120,1297350655,GR
1297350656,1297416191,FR
1297416192,1297481727,BG
1297481728,1297514495,GB
@@ -42357,9 +13682,7 @@
1297584128,1297588223,UA
1297588224,1297590271,NL
1297590272,1297592319,RU
-1297592320,1297593087,GB
-1297593088,1297593343,IM
-1297593344,1297594367,GB
+1297592320,1297594367,GB
1297594368,1297596415,DE
1297596416,1297598463,UA
1297598464,1297602559,RU
@@ -42377,9 +13700,7 @@
1297727488,1297743871,MD
1297743872,1297760255,DE
1297760256,1297776639,LT
-1297776640,1297784831,DE
-1297784832,1297786879,CZ
-1297786880,1297793023,DE
+1297776640,1297793023,DE
1297793024,1297809407,UA
1297809408,1297825791,PL
1297825792,1297842175,RU
@@ -42388,19 +13709,11 @@
1297860608,1297862655,PT
1297862656,1297864703,FI
1297864704,1297866751,SE
-1297866752,1297867687,RU
-1297867688,1297867695,CY
-1297867696,1297867871,RU
-1297867872,1297867879,ES
-1297867880,1297868799,RU
+1297866752,1297868799,RU
1297868800,1297870847,DE
1297870848,1297872895,FR
1297872896,1297874943,GB
-1297874944,1297875487,CY
-1297875488,1297875503,TR
-1297875504,1297875536,CY
-1297875537,1297875551,TR
-1297875552,1297879040,CY
+1297874944,1297879040,CY
1297879041,1297883135,TR
1297883136,1297891327,PL
1297891328,1297899519,GB
@@ -42414,26 +13727,11 @@
1297965056,1297973247,RU
1297973248,1297981439,GB
1297981440,1297989631,RO
-1297989632,1297993295,CZ
-1297993296,1297993311,SK
-1297993312,1297997823,CZ
+1297989632,1297997823,CZ
1297997824,1298006015,IT
-1298006016,1298014207,RU
-1298014208,1298014719,LT
-1298014720,1298014975,RU
-1298014976,1298015231,LT
-1298015232,1298015487,RU
-1298015488,1298015743,LB
-1298015744,1298015999,IQ
-1298016000,1298016511,LB
-1298016512,1298017023,RU
-1298017024,1298018303,BY
-1298018304,1298018559,TM
-1298018560,1298018815,RU
-1298018816,1298019071,GB
-1298019072,1298019327,RU
-1298019328,1298019839,LT
-1298019840,1298020351,RU
+1298006016,1298017279,RU
+1298017280,1298018303,BY
+1298018304,1298020351,RU
1298020352,1298022399,BY
1298022400,1298030591,IT
1298030592,1298038783,RU
@@ -42444,15 +13742,8 @@
1298067456,1298071551,NL
1298071552,1298073599,TJ
1298073600,1298075647,RU
-1298075648,1298076671,CY
-1298076672,1298077695,US
-1298077696,1298078719,DE
-1298078720,1298078872,NL
-1298078873,1298078879,DE
-1298078880,1298079007,NL
-1298079008,1298079231,DE
-1298079232,1298079487,NL
-1298079488,1298079743,DE
+1298075648,1298077695,CY
+1298077696,1298079743,NL
1298079744,1298081791,GB
1298081792,1298083839,CZ
1298083840,1298085887,PL
@@ -42464,9 +13755,7 @@
1298096128,1298098175,NL
1298098176,1298100223,SE
1298100224,1298102271,GB
-1298102272,1298102687,CH
-1298102688,1298102703,LV
-1298102704,1298104319,CH
+1298102272,1298104319,CH
1298104320,1298106367,RU
1298106368,1298108415,IT
1298108416,1298110463,FI
@@ -42478,30 +13767,8 @@
1298120704,1298122751,CZ
1298122752,1298124799,RU
1298124800,1298126847,IT
-1298126848,1298127615,SA
-1298127616,1298128127,IR
-1298128128,1298128895,SA
-1298128896,1298129239,NL
-1298129240,1298129240,RU
-1298129241,1298129241,NL
-1298129242,1298129242,BE
-1298129243,1298129449,NL
-1298129450,1298129450,BZ
-1298129451,1298129465,NL
-1298129466,1298129466,US
-1298129467,1298129744,NL
-1298129745,1298129747,IT
-1298129748,1298129788,NL
-1298129789,1298129789,IT
-1298129790,1298129994,NL
-1298129995,1298129995,GB
-1298129996,1298130199,NL
-1298130200,1298130200,RU
-1298130201,1298130243,NL
-1298130244,1298130244,RU
-1298130245,1298130468,NL
-1298130469,1298130469,RU
-1298130470,1298130943,NL
+1298126848,1298128895,SA
+1298128896,1298130943,NL
1298130944,1298132991,BG
1298132992,1298135039,FI
1298135040,1298137087,NL
@@ -42519,46 +13786,25 @@
1298841600,1298857983,RU
1298857984,1298874367,SE
1298874368,1298907135,GB
-1298907136,1298917711,IE
-1298917712,1298917719,GB
-1298917720,1298923519,IE
+1298907136,1298923519,IE
1298923520,1298939903,IT
1298939904,1298956287,RU
1298956288,1298972671,GB
1298972672,1298989055,RU
1298989056,1299005439,UA
-1299005440,1299005695,BE
-1299005696,1299005951,RU
-1299005952,1299008511,NL
-1299008512,1299008767,BE
-1299008768,1299009023,US
-1299009024,1299009791,BE
-1299009792,1299010047,NL
+1299005440,1299010047,NL
1299010048,1299010815,BE
1299010816,1299011071,RU
-1299011072,1299011327,BE
-1299011328,1299011583,RU
-1299011584,1299011839,FR
-1299011840,1299012095,DE
-1299012096,1299012607,BE
-1299012608,1299013119,GB
-1299013120,1299013375,FR
-1299013376,1299013631,DE
+1299011072,1299013631,NL
1299013632,1299015679,BE
-1299015680,1299016703,NL
-1299016704,1299016959,BE
-1299016960,1299017215,NL
-1299017216,1299017727,RU
-1299017728,1299021823,BE
-1299021824,1299024559,CH
-1299024560,1299024575,DE
-1299024576,1299024863,CH
-1299024864,1299024871,DE
-1299024872,1299026111,CH
+1299015680,1299017727,NL
+1299017728,1299019775,BE
+1299019776,1299020031,NL
+1299020032,1299021055,BE
+1299021056,1299021823,NL
+1299021824,1299026111,CH
1299026112,1299026127,ES
-1299026128,1299026251,CH
-1299026252,1299026263,PT
-1299026264,1299038207,CH
+1299026128,1299038207,CH
1299038208,1299054591,FI
1299054592,1299070975,SE
1299070976,1299087359,SA
@@ -42589,26 +13835,17 @@
1306222592,1306230783,HR
1306230784,1306238975,LT
1306238976,1306263551,SE
-1306263552,1306265599,A2
-1306265600,1306266879,KE
+1306263552,1306266879,KE
1306266880,1306267135,NG
1306267136,1306267522,KE
1306267523,1306267527,NG
1306267528,1306271743,KE
1306271744,1306279935,RU
-1306279936,1306285775,IT
-1306285776,1306285783,US
-1306285784,1306286079,IT
-1306286080,1306287103,CH
-1306287104,1306287615,IT
-1306287616,1306287903,CH
-1306287904,1306288127,IT
+1306279936,1306288127,IT
1306288128,1306296319,AT
1306296320,1306312703,RU
1306312704,1306320895,UZ
-1306320896,1306323263,DE
-1306323264,1306323295,GB
-1306323296,1306329087,DE
+1306320896,1306329087,DE
1306329088,1306337279,BA
1306337280,1306345471,HU
1306345472,1306353663,LT
@@ -42619,9 +13856,7 @@
1306386432,1306394623,DK
1306394624,1306402815,ME
1306402816,1306411007,RU
-1306411008,1306415167,NL
-1306415168,1306415199,IT
-1306415200,1306419199,NL
+1306411008,1306419199,NL
1306419200,1306427391,RU
1306427392,1306435583,UA
1306435584,1306451967,NO
@@ -42634,11 +13869,7 @@
1306509312,1306525695,PL
1306525696,1307049983,ES
1307049984,1307066367,RU
-1307066368,1307068869,EU
1307068870,1307068870,CH
-1307068871,1307069695,EU
-1307069696,1307069919,DE
-1307069920,1307074559,EU
1307074560,1307082751,SA
1307082752,1307092991,RU
1307092992,1307095039,GB
@@ -42665,9 +13896,7 @@
1307195392,1307197439,CH
1307197440,1307205631,HU
1307205632,1307213823,FI
-1307213824,1307219239,SI
-1307219240,1307219247,MX
-1307219248,1307222015,SI
+1307213824,1307222015,SI
1307222016,1307230207,DK
1307230208,1307238399,RU
1307238400,1307246591,SK
@@ -42687,36 +13916,27 @@
1307361280,1307369471,CZ
1307369472,1307377663,RU
1307377664,1307385855,PL
-1307385856,1307389951,AT
-1307389952,1307392511,EU
-1307392512,1307393919,AT
-1307393920,1307393983,CZ
-1307393984,1307394047,AT
+1307385856,1307394047,AT
1307394048,1307402239,IR
1307402240,1307410431,HR
1307410432,1307418623,CZ
1307418624,1307426815,IR
1307426816,1307435007,CH
1307435008,1307437055,DE
-1307437056,1307441151,CZ
-1307441152,1307443199,DE
+1307437056,1307441151,ES
+1307441152,1307442175,NL
+1307442176,1307443199,DE
1307443200,1307451391,IT
1307451392,1307459583,SE
1307459584,1307467775,BG
1307467776,1307484159,RU
-1307484160,1307488767,GB
-1307488768,1307489023,IE
-1307489024,1307491327,GB
-1307491328,1307491839,IE
-1307491840,1307492351,GB
+1307484160,1307492351,GB
1307492352,1307500543,BA
1307500544,1307508735,RU
1307508736,1307516927,BA
1307516928,1307525119,CH
1307525120,1307533311,BA
-1307533312,1307535359,GB
-1307535360,1307535615,DE
-1307535616,1307535871,GB
+1307533312,1307535871,GB
1307535872,1307536127,US
1307536128,1307541503,GB
1307541504,1307549695,IT
@@ -42736,22 +13956,18 @@
1307623424,1307627519,FR
1307627520,1307631615,SE
1307631616,1307635711,IT
-1307635712,1307636735,EE
-1307636736,1307636807,LV
-1307636808,1307636815,EE
-1307636816,1307636847,LV
-1307636848,1307636863,EE
-1307636864,1307637759,LV
-1307637760,1307639807,LT
+1307635712,1307636991,EE
+1307636992,1307637247,LV
+1307637248,1307637503,EE
+1307637504,1307637759,LV
+1307637760,1307639551,EE
+1307639552,1307639807,LT
1307639808,1307643903,IT
1307643904,1307652095,RU
1307652096,1307656191,ES
1307656192,1307660287,JO
1307660288,1307662335,BE
-1307662336,1307662351,NL
-1307662352,1307662359,GB
-1307662360,1307662367,FR
-1307662368,1307664383,BE
+1307662336,1307664383,NL
1307664384,1307668479,NO
1307668480,1307672575,ES
1307672576,1307676671,DK
@@ -42760,11 +13976,7 @@
1307684864,1307688959,GB
1307688960,1307693055,LT
1307693056,1307697151,IT
-1307697152,1307697407,NL
-1307697408,1307697663,EU
-1307697664,1307698687,NL
-1307698688,1307698943,EU
-1307698944,1307701247,NL
+1307697152,1307701247,NL
1307701248,1307709439,RU
1307709440,1307713535,AL
1307713536,1307717631,IT
@@ -42777,24 +13989,9 @@
1307742208,1307746303,HU
1307746304,1307750399,UA
1307750400,1307754495,IT
-1307754496,1307755519,US
-1307755520,1307755775,GB
-1307755776,1307756031,GB
-1307756032,1307756287,US
-1307756288,1307756431,GB
-1307756432,1307756447,US
-1307756448,1307756543,GB
-1307756544,1307757055,FR
-1307757056,1307757063,GB
-1307757064,1307757071,US
-1307757072,1307757095,GB
-1307757096,1307757099,US
-1307757100,1307757183,GB
-1307757184,1307757279,US
-1307757280,1307757311,FR
-1307757312,1307757567,GB
-1307757568,1307757599,US
-1307757600,1307758591,GB
+1307754496,1307757289,GB
+1307757290,1307757293,FR
+1307757294,1307758591,GB
1307758592,1307762687,SM
1307762688,1307766783,PL
1307766784,1307770879,GB
@@ -42802,34 +13999,18 @@
1307774976,1307779071,RS
1307779072,1307787263,DK
1307787264,1307791359,MT
-1307791360,1307795455,KZ
1307795456,1307803647,RU
1307803648,1307807743,DK
1307807744,1307811839,SE
1307811840,1307815935,NL
-1307815936,1307816191,EU
-1307816192,1307816703,GB
-1307816704,1307816959,EU
-1307816960,1307817215,NL
-1307817216,1307817471,DE
-1307817472,1307817511,GB
-1307817512,1307817519,EU
-1307817520,1307817535,GB
-1307817536,1307817983,EU
+1307816192,1307816447,GB
1307817984,1307818048,GB
1307818049,1307818049,BE
-1307818050,1307818495,GB
-1307818496,1307818751,DE
-1307818752,1307819263,GB
-1307819264,1307819519,NL
-1307819520,1307820031,GB
+1307818050,1307818239,GB
+1307819520,1307819775,GB
1307820032,1307824127,ES
1307824128,1307828223,HU
-1307828224,1307830128,NL
-1307830129,1307830129,SE
-1307830130,1307830751,NL
-1307830752,1307830767,BE
-1307830768,1307832319,NL
+1307828224,1307832319,NL
1307832320,1307836415,RU
1307836416,1307840511,SE
1307840512,1307844607,RU
@@ -42837,30 +14018,7 @@
1307848704,1307852799,CH
1307852800,1307856895,RU
1307856896,1307860991,IT
-1307860992,1307861055,DE
-1307861056,1307861063,LU
-1307861064,1307861079,DE
-1307861080,1307861083,LU
-1307861084,1307861119,DE
-1307861120,1307861123,LU
-1307861124,1307861127,A2
-1307861128,1307861151,DE
-1307861152,1307861155,LU
-1307861156,1307861919,DE
-1307861920,1307861935,LU
-1307861936,1307861951,DE
-1307861952,1307861959,LU
-1307861960,1307861983,DE
-1307861984,1307861987,A2
-1307861988,1307864127,DE
-1307864128,1307864135,LU
-1307864136,1307864143,DE
-1307864144,1307864147,A2
-1307864148,1307864467,DE
-1307864468,1307864471,LU
-1307864472,1307864479,DE
-1307864480,1307864495,LU
-1307864496,1307865087,DE
+1307860992,1307865087,DE
1307865088,1307869183,AZ
1307869184,1307873279,GB
1307873280,1307877375,TJ
@@ -42869,19 +14027,9 @@
1307885568,1307889663,BG
1307889664,1307893759,RU
1307893760,1307897855,SE
-1307897856,1307901663,AT
-1307901664,1307901671,DE
-1307901672,1307901951,AT
+1307897856,1307901951,AT
1307901952,1307906047,JO
-1307906048,1307907263,CH
-1307907264,1307907327,IM
-1307907328,1307907459,CH
-1307907460,1307907463,DE
-1307907464,1307907719,CH
-1307907720,1307907727,IT
-1307907728,1307907823,CH
-1307907824,1307907831,IT
-1307907832,1307910143,CH
+1307906048,1307910143,CH
1307910144,1307914239,DE
1307914240,1307918335,NL
1307918336,1307922431,GB
@@ -42889,29 +14037,7 @@
1307926528,1307930623,KZ
1307930624,1307934719,RU
1307934720,1307938815,FR
-1307938816,1307938883,US
-1307938884,1307938892,TR
-1307938893,1307938994,US
-1307938995,1307939002,TR
-1307939003,1307939034,US
-1307939035,1307939042,TR
-1307939043,1307939073,US
-1307939074,1307939080,TR
-1307939081,1307939103,US
-1307939104,1307939119,TR
-1307939120,1307939167,US
-1307939168,1307939183,TR
-1307939184,1307939199,US
-1307939200,1307939231,TR
-1307939232,1307939359,US
-1307939360,1307939375,TR
-1307939376,1307939508,US
-1307939509,1307939512,TR
-1307939513,1307939770,US
-1307939771,1307939791,TR
-1307939792,1307940370,US
-1307940371,1307940378,TR
-1307940379,1307941119,US
+1307938816,1307941119,US
1307941120,1307942911,TR
1307942912,1307947007,RU
1307947008,1307951103,CH
@@ -42921,16 +14047,7 @@
1307967488,1307971583,IT
1307971584,1307979775,GB
1307979776,1307981823,ZW
-1307981824,1307982335,ZA
-1307982336,1307982591,BW
-1307982592,1307982847,ZA
-1307982848,1307983359,ZW
-1307983360,1307983423,ZA
-1307983424,1307983487,BW
-1307983488,1307983551,ZM
-1307983552,1307983615,MZ
-1307983616,1307983743,ZA
-1307983744,1307983871,ZM
+1307981824,1307983871,GB
1307983872,1307984383,NG
1307984384,1307987967,LB
1307987968,1307992063,FR
@@ -42943,39 +14060,20 @@
1308016640,1308020735,FI
1308020736,1308024831,BG
1308024832,1308033023,RU
-1308033024,1308033279,NL
-1308033280,1308033535,FR
-1308033536,1308033791,DE
-1308033792,1308034047,IT
-1308034048,1308034559,GB
-1308034560,1308034815,CZ
-1308034816,1308035327,DE
-1308035328,1308035583,GB
-1308035584,1308035839,AE
-1308035840,1308036095,GB
-1308036096,1308036351,SE
-1308036352,1308036607,BE
-1308036608,1308036863,ES
-1308036864,1308037119,FR
+1308033024,1308033535,DE
+1308033536,1308033791,GB
+1308033792,1308037119,DE
1308037120,1308041215,UA
1308041216,1308049407,RU
1308049408,1308053503,DK
1308053504,1308055551,DE
1308055552,1308057599,AL
-1308057600,1308061695,GR
-1308061696,1308069887,RU
+1308065792,1308069887,RU
1308069888,1308073983,NO
1308073984,1308078079,RU
-1308078080,1308079521,NL
-1308079522,1308079525,NL
-1308079526,1308079807,NL
-1308079808,1308079823,SC
-1308079824,1308080127,NL
+1308078080,1308080127,NL
1308080128,1308082175,RU
-1308082176,1308082687,GB
-1308082688,1308082943,AU
-1308082944,1308083199,US
-1308083200,1308084223,GB
+1308082176,1308084223,GB
1308084224,1308086271,RS
1308086272,1308088319,RU
1308088320,1308090367,UA
@@ -42992,8 +14090,7 @@
1309933568,1310195711,BE
1310195712,1310197759,RU
1310197760,1310199807,CZ
-1310199808,1310201599,IE
-1310201600,1310201855,GB
+1310199808,1310201855,IE
1310201856,1310203903,RU
1310203904,1310205951,FR
1310205952,1310207999,RU
@@ -43002,9 +14099,6 @@
1310212096,1310214143,HU
1310214144,1310216191,UA
1310216192,1310218239,IT
-1310220288,1310221311,NL
-1310221312,1310221567,MK
-1310221568,1310222335,NL
1310222336,1310224383,RS
1310224384,1310226431,GB
1310226432,1310228479,BE
@@ -43017,173 +14111,8 @@
1310240768,1310242815,RU
1310242816,1310244863,HU
1310244864,1310246911,EE
-1310246912,1310246927,FR
-1310246928,1310246943,ES
-1310246944,1310246959,IT
-1310246960,1310246975,AT
-1310246976,1310246991,PT
-1310246992,1310247007,NL
-1310247008,1310247023,GB
-1310247024,1310247039,GR
-1310247040,1310247055,CL
-1310247056,1310247071,BE
-1310247072,1310247087,MX
-1310247088,1310247103,AR
-1310247104,1310247119,PL
-1310247120,1310247135,IE
-1310247136,1310247151,CH
-1310247152,1310247167,RU
-1310247168,1310247183,BE
-1310247184,1310247199,BR
-1310247200,1310247215,CZ
-1310247216,1310247231,HK
-1310247232,1310247247,LU
-1310247248,1310247263,CN
-1310247264,1310247279,PH
-1310247280,1310247295,CH
-1310247296,1310247311,JP
-1310247312,1310247327,PE
-1310247328,1310247343,DE
-1310247344,1310247359,CA
-1310247360,1310247375,CR
-1310247376,1310247391,IN
-1310247392,1310247407,US
-1310247408,1310247423,CA
-1310247424,1310247431,BE
-1310247432,1310247439,BR
-1310247440,1310247447,CZ
-1310247448,1310247455,HK
-1310247456,1310247463,LU
-1310247464,1310247471,CN
-1310247472,1310247479,PH
-1310247480,1310247487,CH
-1310247488,1310247495,JP
-1310247496,1310247503,PE
-1310247504,1310247511,DE
-1310247512,1310247519,CA
-1310247520,1310247527,CR
-1310247528,1310247535,IN
-1310247536,1310247543,US
-1310247544,1310247551,CA
-1310247552,1310247559,FR
-1310247560,1310247567,ES
-1310247568,1310247575,IT
-1310247576,1310247583,AT
-1310247584,1310247591,PT
-1310247592,1310247599,NL
-1310247600,1310247607,GB
-1310247608,1310247615,GR
-1310247616,1310247623,CL
-1310247624,1310247631,BE
-1310247632,1310247639,MX
-1310247640,1310247647,AR
-1310247648,1310247655,PL
-1310247656,1310247663,IE
-1310247664,1310247671,CH
-1310247672,1310247679,RU
-1310247680,1310247687,BE
-1310247688,1310247695,BR
-1310247696,1310247703,CZ
-1310247704,1310247711,HK
-1310247712,1310247719,LU
-1310247720,1310247727,CN
-1310247728,1310247735,PH
-1310247736,1310247743,CH
-1310247744,1310247751,JP
-1310247752,1310247759,PE
-1310247760,1310247767,DE
-1310247768,1310247775,CA
-1310247776,1310247783,CR
-1310247784,1310247791,IN
-1310247792,1310247799,US
-1310247800,1310247807,CA
-1310247808,1310247815,FR
-1310247816,1310247823,ES
-1310247824,1310247831,IT
-1310247832,1310247839,AT
-1310247840,1310247847,PT
-1310247848,1310247855,NL
-1310247856,1310247863,GB
-1310247864,1310247871,GR
-1310247872,1310247879,CL
-1310247880,1310247887,BE
-1310247888,1310247895,MX
-1310247896,1310247903,AR
-1310247904,1310247911,PL
-1310247912,1310247919,IE
-1310247920,1310247927,CH
-1310247928,1310247935,RU
-1310247936,1310247951,TR
-1310247952,1310247967,SE
-1310247968,1310247983,NO
-1310247984,1310247999,DK
-1310248000,1310248015,LV
-1310248016,1310248031,BG
-1310248032,1310248047,UA
-1310248048,1310248063,CH
-1310248064,1310248079,ZA
-1310248080,1310248095,LU
-1310248096,1310248111,UY
-1310248112,1310248127,PA
-1310248128,1310248143,MY
-1310248144,1310248159,CO
-1310248160,1310248175,SG
-1310248176,1310248191,US
-1310248192,1310248207,RO
-1310248208,1310248223,LT
-1310248224,1310248239,BO
-1310248240,1310248255,HU
-1310248256,1310248271,FI
-1310248272,1310248287,IL
-1310248288,1310248303,AU
-1310248304,1310248319,NZ
-1310248320,1310248335,VE
-1310248336,1310248351,CR
-1310248352,1310248367,MA
-1310248368,1310248383,ID
-1310248384,1310248399,SK
-1310248400,1310248415,TW
-1310248416,1310248431,PA
-1310248432,1310248447,US
-1310248448,1310248455,BE
-1310248456,1310248463,BR
-1310248464,1310248487,FR
-1310248488,1310248495,CN
-1310248496,1310248503,FR
-1310248504,1310248511,CH
-1310248512,1310248519,JP
-1310248520,1310248527,PE
-1310248528,1310248535,DE
-1310248536,1310248543,CA
-1310248544,1310248551,CR
-1310248552,1310248559,IN
-1310248560,1310248567,US
-1310248568,1310248575,CA
-1310248576,1310248583,FR
-1310248584,1310248591,ES
-1310248592,1310248599,IT
-1310248600,1310248607,AT
-1310248608,1310248615,PT
-1310248616,1310248623,NL
-1310248624,1310248631,GB
-1310248632,1310248639,GR
-1310248640,1310248647,CL
-1310248648,1310248655,BE
-1310248656,1310248663,MX
-1310248664,1310248671,AR
-1310248672,1310248679,PL
-1310248680,1310248687,IE
-1310248688,1310248695,CH
-1310248696,1310248703,RU
-1310248704,1310248959,CH
-1310248960,1310249215,IM
-1310249216,1310249279,GB
-1310249280,1310249775,IM
-1310249776,1310249799,GG
-1310249800,1310250111,IM
-1310250112,1310250143,GG
-1310250144,1310250495,IM
-1310250496,1310251007,MT
+1310246912,1310248959,ZA
+1310248960,1310251007,IM
1310251008,1310255103,RU
1310255104,1310257151,CZ
1310257152,1310259199,FR
@@ -43207,8 +14136,19 @@
1310588928,1310605311,RU
1310605312,1310621695,PL
1310621696,1310638079,RS
-1310638080,1310654463,UA
-1310654464,1310656511,RU
+1310638080,1310639615,RU
+1310639616,1310639871,UA
+1310639872,1310640639,RU
+1310640640,1310641407,UA
+1310641408,1310642175,RU
+1310642176,1310642431,UA
+1310642432,1310643711,RU
+1310643712,1310644223,UA
+1310644224,1310648063,RU
+1310648064,1310648319,UA
+1310648320,1310650623,RU
+1310650624,1310650879,UA
+1310650880,1310656511,RU
1310656512,1310657535,GB
1310657536,1310658559,SE
1310658560,1310660607,RU
@@ -43247,8 +14187,8 @@
1310715904,1310717951,RU
1310717952,1310719999,UA
1310720000,1310851071,GB
-1310851072,1310921107,DE
-1310921108,1310921119,ES
+1310851072,1310921103,DE
+1310921104,1310921119,ES
1310921120,1310982143,DE
1310982144,1311113215,RU
1311113216,1311244287,IR
@@ -43256,35 +14196,21 @@
1311246336,1311248383,IT
1311248384,1311250431,GB
1311250432,1311252479,RU
-1311252480,1311253247,GB
-1311253248,1311253255,IT
-1311253256,1311253351,GB
-1311253352,1311253359,IT
-1311253360,1311253415,GB
-1311253416,1311253423,IT
-1311253424,1311254527,GB
+1311252480,1311253447,GB
+1311253448,1311253455,IT
+1311253456,1311254447,GB
+1311254448,1311254455,IT
+1311254456,1311254527,GB
1311254528,1311256575,SE
1311256576,1311258623,FR
1311258624,1311262719,GB
-1311262720,1311262975,FR
-1311262976,1311263407,CH
-1311263408,1311263423,BE
-1311263424,1311263615,CH
-1311263616,1311263679,FR
-1311263680,1311263871,CH
-1311263872,1311263999,FR
-1311264000,1311264255,CH
-1311264256,1311264767,FR
+1311262720,1311264767,CH
1311264768,1311266815,RU
1311266816,1311268863,FR
1311268864,1311270911,BE
1311270912,1311272959,RU
1311272960,1311275007,GB
-1311275008,1311276671,FR
-1311276672,1311276703,RU
-1311276704,1311276991,FR
-1311276992,1311277023,RU
-1311277024,1311277055,FR
+1311275008,1311277055,FR
1311277056,1311279103,IT
1311279104,1311280127,BG
1311280128,1311280383,MK
@@ -43295,30 +14221,22 @@
1311291392,1311293439,RU
1311293440,1311295487,NL
1311295488,1311297535,IT
-1311297536,1311298559,EU
-1311298560,1311299583,AT
+1311297536,1311299583,AT
1311299584,1311301631,RU
1311301632,1311303679,TR
1311303680,1311307775,GB
1311307776,1311309823,IS
-1311309824,1311310335,GB
-1311310336,1311310847,GG
-1311310848,1311311103,GB
-1311311104,1311311359,GG
-1311311360,1311311823,GB
-1311311824,1311311824,JE
-1311311825,1311311871,GB
+1311309824,1311310591,GB
+1311310592,1311310847,GG
+1311310848,1311310857,GB
+1311310858,1311310858,GG
+1311310859,1311311871,GB
1311311872,1311315967,CZ
-1311315968,1311317247,PL
-1311317248,1311317503,A2
-1311317504,1311318015,PL
+1311315968,1311318015,PL
1311318016,1311320063,RU
1311320064,1311322111,FR
-1311322112,1311324159,IT
1311324160,1311326207,LB
-1311326208,1311328159,BE
-1311328160,1311328191,LU
-1311328192,1311328255,BE
+1311326208,1311328255,BE
1311328256,1311330303,NL
1311332352,1311338495,RU
1311338496,1311340543,AT
@@ -43330,88 +14248,39 @@
1311350784,1311352831,FR
1311352832,1311354879,SK
1311354880,1311356927,RU
-1311356928,1311357183,GB
-1311357184,1311357439,FR
-1311357440,1311357695,IT
-1311357696,1311357951,CH
-1311357952,1311358207,CA
-1311358208,1311358263,FR
-1311358264,1311358271,ES
-1311358272,1311358719,FR
-1311358720,1311358975,BE
+1311356928,1311358975,FR
1311358976,1311361023,RU
-1311361024,1311361816,NL
-1311361817,1311361817,AU
-1311361818,1311363071,NL
+1311361024,1311363071,NL
1311363072,1311365119,GB
1311365120,1311367167,DE
-1311367168,1311367295,GN
-1311367296,1311367423,GA
-1311367424,1311367679,MM
-1311367680,1311367711,UG
-1311367712,1311367743,CD
-1311367744,1311367775,SL
-1311367776,1311367807,LR
-1311367808,1311367839,US
-1311367840,1311367871,DK
-1311367872,1311367887,LR
-1311367888,1311367895,DE
-1311367896,1311367903,NG
-1311367904,1311367927,A2
-1311367928,1311367935,DE
-1311367936,1311368191,A2
-1311368192,1311368319,BD
-1311368320,1311368447,CF
-1311368448,1311368575,TZ
-1311368576,1311368703,PG
-1311368704,1311368831,NP
-1311368832,1311368959,GM
-1311368960,1311369087,PT
-1311369088,1311369215,BT
+1311367168,1311369215,GB
1311369216,1311371263,FR
1311371264,1311373311,SE
-1311373312,1311374335,FR
-1311374336,1311374351,ES
-1311374352,1311375359,FR
+1311373312,1311375359,FR
1311375360,1311506431,DE
1311506432,1311637503,CZ
-1311637504,1311689599,DE
-1311689600,1311689607,ES
-1311689608,1311689687,DE
-1311689688,1311689695,ES
-1311689696,1311693335,DE
-1311693336,1311693343,ES
-1311693344,1311699527,DE
-1311699528,1311699535,IT
-1311699536,1311757439,DE
-1311757440,1311757447,ES
-1311757448,1311757463,DE
-1311757464,1311757471,ES
-1311757472,1312292863,DE
+1311637504,1312292863,DE
1312292864,1312817151,LT
-1312817152,1313192191,SE
-1313192192,1313192447,DK
-1313192448,1313865727,SE
+1312817152,1313183103,SE
+1313183104,1313183231,DK
+1313183232,1313865727,SE
1313865728,1313931263,CZ
1313931264,1313996799,RU
1313996800,1314062335,SE
-1314062336,1314088763,BG
-1314088764,1314088764,BG
-1314088765,1314127871,BG
+1314062336,1314127871,BG
1314127872,1314193407,LV
1314193408,1314258943,RU
1314258944,1314324479,GB
1314324480,1314390015,GR
1314390016,1314455551,PL
-1314455552,1314489599,KW
-1314489600,1314489855,US
-1314489856,1314521087,KW
+1314455552,1314521087,KW
1314521088,1314586623,BG
1314586624,1314652159,NO
1314652160,1314717695,HU
1314717696,1314783231,SA
1314783232,1314848767,DE
-1314848768,1315045375,RO
+1314848768,1314881535,GB
+1314881536,1315045375,RO
1315045376,1315176447,SK
1315176448,1315307519,QA
1315307520,1315438591,CZ
@@ -43424,145 +14293,26 @@
1315713024,1315717119,SE
1315717120,1315725311,RU
1315725312,1315729407,CZ
-1315729408,1315733503,EU
1315733504,1315737599,NL
1315737600,1315741695,CZ
1315741696,1315745791,LB
-1315745792,1315749375,CZ
-1315749376,1315749503,ES
-1315749504,1315749887,CZ
+1315745792,1315749887,CZ
1315749888,1315753983,RU
-1315753984,1315758079,KZ
-1315758080,1315759103,RE
-1315759104,1315759871,FR
-1315759872,1315760383,RE
-1315760384,1315760895,FR
-1315760896,1315761023,RE
-1315761024,1315761407,FR
+1315758080,1315758847,RE
+1315758848,1315760639,FR
+1315760640,1315760895,RE
+1315760896,1315761407,FR
1315761408,1315761663,RE
1315761664,1315761919,FR
1315761920,1315762175,RE
1315762176,1315766271,BG
-1315766272,1315769087,NL
-1315769088,1315769343,EU
-1315769344,1315769855,NL
-1315769856,1315770111,EU
-1315770112,1315770367,NL
-1315770368,1315770391,UA
-1315770392,1315770399,NA
-1315770400,1315770503,UA
-1315770504,1315770511,NA
-1315770512,1315770575,UA
-1315770576,1315770583,NA
-1315770584,1315770639,UA
-1315770640,1315770647,NA
-1315770648,1315770719,UA
-1315770720,1315770727,NA
-1315770728,1315770975,UA
-1315770976,1315770983,NA
-1315770984,1315770991,UA
-1315770992,1315770999,NA
-1315771000,1315771199,UA
-1315771200,1315771207,NA
-1315771208,1315771223,UA
-1315771224,1315771231,NA
-1315771232,1315771247,UA
-1315771248,1315771263,NA
-1315771264,1315771271,UA
-1315771272,1315771279,NA
-1315771280,1315771415,UA
-1315771416,1315771423,NA
-1315771424,1315771639,UA
-1315771640,1315771647,NA
-1315771648,1315771759,UA
-1315771760,1315771767,NA
-1315771768,1315771815,UA
-1315771816,1315771823,NA
-1315771824,1315771871,UA
-1315771872,1315771879,NA
-1315771880,1315771935,UA
-1315771936,1315771951,NA
-1315771952,1315771959,UA
-1315771960,1315771967,NA
-1315771968,1315772031,UA
-1315772032,1315772039,NA
-1315772040,1315772167,UA
-1315772168,1315772175,NA
-1315772176,1315772191,UA
-1315772192,1315772199,NA
-1315772200,1315772223,UA
-1315772224,1315772231,NA
-1315772232,1315772303,UA
-1315772304,1315772311,NA
-1315772312,1315772319,UA
-1315772320,1315772327,NA
-1315772328,1315772399,UA
-1315772400,1315772407,NA
-1315772408,1315772463,UA
-1315772464,1315772479,NA
-1315772480,1315772503,UA
-1315772504,1315772511,NA
-1315772512,1315772583,UA
-1315772584,1315772599,NA
-1315772600,1315772703,UA
-1315772704,1315772711,NA
-1315772712,1315772919,UA
-1315772920,1315772927,NA
-1315772928,1315773487,UA
-1315773488,1315773495,NA
-1315773496,1315773511,UA
-1315773512,1315773519,NA
-1315773520,1315773535,UA
-1315773536,1315773543,NA
-1315773544,1315773551,UA
-1315773552,1315773559,NA
-1315773560,1315773575,UA
-1315773576,1315773583,NA
-1315773584,1315773655,UA
-1315773656,1315773663,NA
-1315773664,1315773679,UA
-1315773680,1315773687,NA
-1315773688,1315773703,UA
-1315773704,1315773711,NA
-1315773712,1315773719,UA
-1315773720,1315773751,NA
-1315773752,1315773895,UA
-1315773896,1315773903,NA
-1315773904,1315773955,UA
-1315773956,1315773959,NA
-1315773960,1315773983,UA
-1315773984,1315773991,BY
-1315773992,1315774015,UA
-1315774016,1315774031,NA
-1315774032,1315774039,UA
-1315774040,1315774071,NA
-1315774072,1315774095,UA
-1315774096,1315774111,NA
-1315774112,1315774135,UA
-1315774136,1315774143,US
-1315774144,1315774191,UA
-1315774192,1315774207,NA
-1315774208,1315774239,UA
-1315774240,1315774255,RU
-1315774256,1315774263,NA
-1315774264,1315774423,UA
-1315774424,1315774431,NA
-1315774432,1315774463,UA
+1315766272,1315770367,NL
+1315770368,1315774463,UA
1315774464,1315778559,RU
1315778560,1315780607,AZ
-1315780608,1315780863,DE
-1315780864,1315781119,PL
-1315781120,1315781535,DE
-1315781536,1315781543,DK
-1315781544,1315781631,DE
-1315781632,1315781887,DK
-1315781888,1315782143,DE
-1315782144,1315782399,PL
-1315782400,1315782655,DK
+1315780608,1315782655,DE
1315782656,1315786751,AM
-1315786752,1315790592,FR
-1315790593,1315790593,IT
-1315790594,1315790847,FR
+1315786752,1315790847,FR
1315790848,1315794943,RS
1315794944,1315803135,RU
1315803136,1315807231,KZ
@@ -43570,12 +14320,9 @@
1315815424,1315819519,IR
1315819520,1315823615,DK
1315823616,1315827711,IQ
-1315827712,1315831807,RU
+1315827712,1315831807,FR
1315831808,1315835903,SA
-1315835904,1315836159,CY
-1315836160,1315839487,MT
-1315839488,1315839743,CY
-1315839744,1315839999,MT
+1315835904,1315839999,MT
1315840000,1315844095,EE
1315844096,1315848191,RU
1315848192,1315852287,BH
@@ -43592,21 +14339,20 @@
1315893248,1315897343,RU
1315897344,1315901439,IR
1315901440,1315905535,UA
-1315905536,1315909631,BA
+1315905536,1315909631,SI
1315909632,1315913727,AZ
1315913728,1315917823,DE
1315917824,1315921919,RU
1315921920,1315926015,TR
1315926016,1315930111,CZ
-1315930112,1315930623,DE
-1315930624,1315930879,LB
-1315930880,1315931135,DE
-1315931136,1315931647,LB
-1315931648,1315934207,DE
+1315930112,1315934207,DE
1315934208,1315938303,RU
1315938304,1315942399,DK
-1315942400,1315946495,UA
-1315946496,1315950591,GG
+1315942400,1315945030,UA
+1315945031,1315945031,RU
+1315945032,1315946495,UA
+1315946496,1315946751,GB
+1315946752,1315950591,GG
1315950592,1315954687,UA
1315954688,1315958783,DE
1315958784,1315962879,RU
@@ -43614,35 +14360,9 @@
1317011456,1317044223,BG
1317044224,1317076991,CZ
1317076992,1317109759,BE
-1317109760,1317113855,GB
-1317113856,1317114111,US
-1317114112,1317119103,GB
-1317119104,1317119119,CH
-1317119120,1317126399,GB
+1317109760,1317126399,GB
1317126400,1317126655,US
-1317126656,1317129023,GB
-1317129024,1317129039,CH
-1317129040,1317129055,GB
-1317129056,1317129087,CA
-1317129088,1317129279,GB
-1317129280,1317129343,CA
-1317129344,1317129471,GB
-1317129472,1317129599,IT
-1317129600,1317130495,GB
-1317130496,1317130511,CH
-1317130512,1317133055,GB
-1317133056,1317133183,LV
-1317133184,1317135615,GB
-1317135616,1317135871,DE
-1317135872,1317137183,GB
-1317137184,1317137215,CH
-1317137216,1317137663,GB
-1317137664,1317137919,SE
-1317137920,1317140095,GB
-1317140096,1317140223,US
-1317140224,1317142143,GB
-1317142144,1317142271,CA
-1317142272,1317142527,GB
+1317126656,1317142527,GB
1317142528,1317175295,PT
1317175296,1317208063,BG
1317208064,1317240831,HU
@@ -43663,753 +14383,22 @@
1317617664,1317625855,YE
1317625856,1317627903,DE
1317627904,1317629951,RU
-1317629952,1317634047,GB
-1317634048,1317637119,IE
-1317637120,1317637375,GB
-1317637376,1317641471,IE
-1317641472,1317641727,GB
-1317641728,1317642815,IE
-1317642816,1317642847,GB
-1317642848,1317642863,IE
-1317642864,1317642879,GB
-1317642880,1317642975,IE
-1317642976,1317642991,GB
-1317642992,1317643023,IE
-1317643024,1317643039,GB
-1317643040,1317645407,IE
-1317645408,1317645423,GB
-1317645424,1317645487,IE
-1317645488,1317645823,GB
-1317645824,1317646895,IE
-1317646896,1317646911,GB
-1317646912,1317646991,IE
-1317646992,1317646999,GB
-1317647000,1317647063,IE
-1317647064,1317647071,GB
-1317647072,1317647359,IE
-1317647360,1317647615,GB
-1317647616,1317648383,IE
-1317648384,1317649919,GB
-1317649920,1317650023,IE
-1317650024,1317650031,GB
-1317650032,1317650047,IE
-1317650048,1317650095,GB
-1317650096,1317650135,IE
-1317650136,1317650143,GB
-1317650144,1317650431,IE
+1317629952,1317636095,GB
+1317636096,1317637119,IE
+1317637120,1317642239,GB
+1317642240,1317642495,IE
+1317642496,1317646551,GB
+1317646552,1317646559,IE
+1317646560,1317647015,GB
+1317647016,1317647023,IE
+1317647024,1317650130,GB
+1317650131,1317650131,IE
+1317650132,1317650431,GB
1317650432,1317666815,PT
-1317666816,1317666839,GB
-1317666840,1317666855,GH
-1317666856,1317666863,GB
-1317666864,1317666871,GH
-1317666872,1317666879,GB
-1317666880,1317666887,LR
-1317666888,1317666911,NG
-1317666912,1317666959,GB
-1317666960,1317666967,NG
-1317666968,1317666999,GB
-1317667000,1317667007,AO
-1317667008,1317667015,GH
-1317667016,1317667055,GB
-1317667056,1317667063,LR
-1317667064,1317667103,GB
-1317667104,1317667111,UG
-1317667112,1317667135,GB
-1317667136,1317667143,AO
-1317667144,1317667151,GB
-1317667152,1317667159,NG
-1317667160,1317667167,AO
-1317667168,1317667175,NG
-1317667176,1317667191,GB
-1317667192,1317667207,NG
-1317667208,1317667223,GB
-1317667224,1317667231,NG
-1317667232,1317667239,GB
-1317667240,1317667247,NG
-1317667248,1317667287,GB
-1317667288,1317667295,NG
-1317667296,1317667327,GB
-1317667328,1317667335,NG
-1317667336,1317667343,GB
-1317667344,1317667351,NG
-1317667352,1317667359,AO
-1317667360,1317667423,GB
-1317667424,1317667431,TD
-1317667432,1317667439,GH
-1317667440,1317667487,GB
-1317667488,1317667495,GH
-1317667496,1317667551,GB
-1317667552,1317667567,NG
-1317667568,1317667751,GB
-1317667752,1317667759,NG
-1317667760,1317667767,FR
-1317667768,1317667775,ZA
-1317667776,1317667783,US
-1317667784,1317667791,AO
-1317667792,1317667799,NG
-1317667800,1317667807,GB
-1317667808,1317667815,NG
-1317667816,1317667823,UG
-1317667824,1317668095,GB
-1317668096,1317668103,GR
-1317668104,1317668143,GB
-1317668144,1317668151,AO
-1317668152,1317668159,GB
-1317668160,1317668167,NG
-1317668168,1317668183,GB
-1317668184,1317668191,CI
-1317668192,1317668207,GB
-1317668208,1317668215,LR
-1317668216,1317668223,GB
-1317668224,1317668231,NG
-1317668232,1317668271,GB
-1317668272,1317668279,SL
-1317668280,1317668303,GB
-1317668304,1317668311,UG
-1317668312,1317668319,IQ
-1317668320,1317668351,GB
-1317668352,1317668359,NG
-1317668360,1317668367,SL
-1317668368,1317668391,GB
-1317668392,1317668399,NG
-1317668400,1317668407,GB
-1317668408,1317668415,GH
-1317668416,1317668447,NG
-1317668448,1317668455,GB
-1317668456,1317668463,BJ
-1317668464,1317668471,AO
-1317668472,1317668487,GB
-1317668488,1317668495,UG
-1317668496,1317668503,GH
-1317668504,1317668511,CD
-1317668512,1317668551,GB
-1317668552,1317668559,AO
-1317668560,1317668567,GB
-1317668568,1317668575,NG
-1317668576,1317668583,GB
-1317668584,1317668591,LR
-1317668592,1317668599,UG
-1317668600,1317668615,GB
-1317668616,1317668623,UG
-1317668624,1317668639,GB
-1317668640,1317668647,NG
-1317668648,1317668671,GB
-1317668672,1317668687,NG
-1317668688,1317668727,GB
-1317668728,1317668735,NG
-1317668736,1317668767,GB
-1317668768,1317668775,LR
-1317668776,1317668783,GB
-1317668784,1317668791,NG
-1317668792,1317668807,GB
-1317668808,1317668815,NG
-1317668816,1317668967,GB
-1317668968,1317668975,NG
-1317668976,1317669007,GB
-1317669008,1317669015,NG
-1317669016,1317669055,GB
-1317669056,1317669063,NG
-1317669064,1317669087,GB
-1317669088,1317669095,CD
-1317669096,1317669103,NG
-1317669104,1317669111,GB
-1317669112,1317669119,NG
-1317669120,1317669375,GE
-1317669376,1317669903,GB
-1317669904,1317669911,NG
-1317669912,1317669919,GH
-1317669920,1317669927,GB
-1317669928,1317669935,CM
-1317669936,1317669943,GB
-1317669944,1317669959,NG
-1317669960,1317669983,GB
-1317669984,1317669991,LR
-1317669992,1317669999,NG
-1317670000,1317670063,GB
-1317670064,1317670079,NG
-1317670080,1317670143,GB
-1317670144,1317670175,SL
-1317670176,1317670223,GB
-1317670224,1317670231,AO
-1317670232,1317670447,GB
-1317670448,1317670455,IQ
-1317670456,1317670463,GB
-1317670464,1317670471,NG
-1317670472,1317670479,CO
-1317670480,1317670511,GB
-1317670512,1317670519,CI
-1317670520,1317670527,GB
-1317670528,1317670535,NG
-1317670536,1317670583,GB
-1317670584,1317670591,GH
-1317670592,1317670607,GB
-1317670608,1317670615,NG
-1317670616,1317670623,UG
-1317670624,1317670631,GB
-1317670632,1317670639,NG
-1317670640,1317670647,GB
-1317670648,1317670655,NG
-1317670656,1317670663,AO
-1317670664,1317670679,GB
-1317670680,1317670687,NG
-1317670688,1317670695,GB
-1317670696,1317670703,NG
-1317670704,1317670711,GB
-1317670712,1317670719,GH
-1317670720,1317670727,GB
-1317670728,1317670735,GH
-1317670736,1317670767,GB
-1317670768,1317670775,GH
-1317670776,1317670783,GB
-1317670784,1317670791,GH
-1317670792,1317670847,GB
-1317670848,1317670855,NG
-1317670856,1317670863,CD
-1317670864,1317670896,GB
-1317670897,1317670903,NG
-1317670904,1317671175,GB
-1317671176,1317671191,NG
-1317671192,1317671239,GB
-1317671240,1317671247,CI
-1317671248,1317671255,GB
-1317671256,1317671263,CI
-1317671264,1317671319,GB
-1317671320,1317671327,NG
-1317671328,1317671335,GB
-1317671336,1317671343,BW
-1317671344,1317671359,GB
-1317671360,1317671367,NG
-1317671368,1317671375,GB
-1317671376,1317671383,NG
-1317671384,1317671391,CI
-1317671392,1317671399,GB
-1317671400,1317671407,IQ
-1317671408,1317671447,GB
-1317671448,1317671463,NG
-1317671464,1317671471,GB
-1317671472,1317671487,NG
-1317671488,1317671527,GB
-1317671528,1317671535,NG
-1317671536,1317671543,LR
-1317671544,1317671551,SD
-1317671552,1317671655,GB
-1317671656,1317671663,NG
-1317671664,1317671671,GB
-1317671672,1317671679,AO
-1317671680,1317671687,LR
-1317671688,1317671719,GB
-1317671720,1317671727,NG
-1317671728,1317671759,GB
-1317671760,1317671767,AO
-1317671768,1317671799,GB
-1317671800,1317671807,NG
-1317671808,1317671823,CI
-1317671824,1317671831,NG
-1317671832,1317671855,GB
-1317671856,1317671863,UG
-1317671864,1317671903,GB
-1317671904,1317671911,NG
-1317671912,1317671919,AO
-1317671920,1317671927,NG
-1317671928,1317671935,GB
-1317671936,1317672447,GA
-1317672448,1317672455,GB
-1317672456,1317672463,GA
-1317672464,1317672495,GB
-1317672496,1317672503,NG
-1317672504,1317672583,GB
-1317672584,1317672591,CD
-1317672592,1317672615,GB
-1317672616,1317672623,NG
-1317672624,1317672671,GB
-1317672672,1317672679,NG
-1317672680,1317672727,GB
-1317672728,1317672735,UG
-1317672736,1317672743,LR
-1317672744,1317672759,GB
-1317672760,1317672767,NG
-1317672768,1317672815,GB
-1317672816,1317672823,BW
-1317672824,1317672839,GB
-1317672840,1317672847,NG
-1317672848,1317672863,GB
-1317672864,1317672871,NG
-1317672872,1317672903,GB
-1317672904,1317672911,CI
-1317672912,1317672919,GB
-1317672920,1317672927,GH
-1317672928,1317672959,GB
-1317672960,1317673231,NG
-1317673232,1317673335,GB
-1317673336,1317673343,GH
-1317673344,1317673351,GR
-1317673352,1317673375,GB
-1317673376,1317673383,AO
-1317673384,1317673391,NG
-1317673392,1317673423,GB
-1317673424,1317673431,NG
-1317673432,1317673455,GB
-1317673456,1317673463,AO
-1317673464,1317673471,GB
-1317673472,1317673479,NG
-1317673480,1317673495,GB
-1317673496,1317673519,NG
-1317673520,1317673543,GB
-1317673544,1317673551,ZW
-1317673552,1317673575,GB
-1317673576,1317673583,CD
-1317673584,1317673623,GB
-1317673624,1317673631,NG
-1317673632,1317673639,GB
-1317673640,1317673647,AO
-1317673648,1317673679,GB
-1317673680,1317673687,IQ
-1317673688,1317673711,GB
-1317673712,1317673719,CO
-1317673720,1317673727,NG
-1317673728,1317673735,GB
-1317673736,1317673743,AO
-1317673744,1317673751,IQ
-1317673752,1317673815,GB
-1317673816,1317673823,LR
-1317673824,1317673863,GB
-1317673864,1317673871,NG
-1317673872,1317673903,GB
-1317673904,1317673911,NG
-1317673912,1317673919,GB
-1317673920,1317673927,CI
-1317673928,1317673935,NG
-1317673936,1317673943,GB
-1317673944,1317673951,AO
-1317673952,1317673959,NG
-1317673960,1317673983,GB
-1317673984,1317674239,NG
-1317674240,1317674271,GB
-1317674272,1317674279,NG
-1317674280,1317674295,GB
-1317674296,1317674303,AO
-1317674304,1317674319,NG
-1317674320,1317674415,GB
-1317674416,1317674423,AO
-1317674424,1317674431,UG
-1317674432,1317674439,GB
-1317674440,1317674440,AO
-1317674441,1317674447,GB
-1317674448,1317674455,AO
-1317674456,1317674463,GB
-1317674464,1317674471,NG
-1317674472,1317674487,GB
-1317674488,1317674495,UG
-1317674496,1317674535,GB
-1317674536,1317674543,IQ
-1317674544,1317674551,GB
-1317674552,1317674567,NG
-1317674568,1317674623,GB
-1317674624,1317674631,NG
-1317674632,1317674639,GB
-1317674640,1317674647,NG
-1317674648,1317674655,GB
-1317674656,1317674671,NG
-1317674672,1317674687,GB
-1317674688,1317674695,NG
-1317674696,1317674711,GB
-1317674712,1317674735,NG
-1317674736,1317674743,GB
-1317674744,1317674751,IQ
-1317674752,1317674759,NG
-1317674760,1317674767,GB
-1317674768,1317674775,NG
-1317674776,1317674783,GB
-1317674784,1317674791,NG
-1317674792,1317674799,GB
-1317674800,1317674807,NG
-1317674808,1317674823,GB
-1317674824,1317674831,NG
-1317674832,1317674847,GB
-1317674848,1317674855,NG
-1317674856,1317674879,GB
-1317674880,1317674887,NG
-1317674888,1317674911,GB
-1317674912,1317674919,NG
-1317674920,1317674935,GB
-1317674936,1317674943,NG
-1317674944,1317674951,GB
-1317674952,1317674959,NG
-1317674960,1317674967,GH
-1317674968,1317674983,NG
-1317674984,1317675031,GB
-1317675032,1317675039,NG
-1317675040,1317675063,GB
-1317675064,1317675071,AO
-1317675072,1317675087,GB
-1317675088,1317675095,NG
-1317675096,1317675271,GB
-1317675272,1317675279,NG
-1317675280,1317675295,GB
-1317675296,1317675319,NG
-1317675320,1317675351,GB
-1317675352,1317675359,IQ
-1317675360,1317675367,NG
-1317675368,1317675423,GB
-1317675424,1317675439,NG
-1317675440,1317675463,GB
-1317675464,1317675471,CI
-1317675472,1317675559,GB
-1317675560,1317675567,NA
-1317675568,1317675591,GB
-1317675592,1317675607,NG
-1317675608,1317675623,GB
-1317675624,1317675639,NG
-1317675640,1317675647,FR
-1317675648,1317675695,GB
-1317675696,1317675703,NG
-1317675704,1317675743,GB
-1317675744,1317675751,GH
-1317675752,1317675759,NG
-1317675760,1317675775,GH
-1317675776,1317675807,GB
-1317675808,1317675815,NG
-1317675816,1317675847,GB
-1317675848,1317675855,TD
-1317675856,1317675903,GB
-1317675904,1317675911,SN
-1317675912,1317675919,NG
-1317675920,1317675951,GB
-1317675952,1317675959,KE
-1317675960,1317675991,GB
-1317675992,1317675999,NG
-1317676000,1317676007,GB
-1317676008,1317676015,GH
-1317676016,1317676023,SD
-1317676024,1317676031,GB
-1317676032,1317676047,NG
-1317676048,1317676063,GB
-1317676064,1317676071,GH
-1317676072,1317676079,NG
-1317676080,1317676087,AO
-1317676088,1317676095,NG
-1317676096,1317676103,GB
-1317676104,1317676111,NG
-1317676112,1317676119,CM
-1317676120,1317676135,GB
-1317676136,1317676143,CM
-1317676144,1317676151,NG
-1317676152,1317676159,CM
-1317676160,1317676167,TG
-1317676168,1317676175,ML
-1317676176,1317676191,GB
-1317676192,1317676207,SD
-1317676208,1317676223,GB
-1317676224,1317676231,GH
-1317676232,1317676239,GB
-1317676240,1317676247,NG
-1317676248,1317676287,GB
-1317676288,1317676295,NG
-1317676296,1317676327,GB
-1317676328,1317676335,NG
-1317676336,1317676359,GB
-1317676360,1317676407,NG
-1317676408,1317676423,GB
-1317676424,1317676463,NG
-1317676464,1317676503,GB
-1317676504,1317676511,NG
-1317676512,1317676519,GB
-1317676520,1317676527,NG
-1317676528,1317676543,GB
-1317676544,1317676567,NG
-1317676568,1317676575,BF
-1317676576,1317676583,GB
-1317676584,1317676591,NG
-1317676592,1317676599,GB
-1317676600,1317676607,AO
-1317676608,1317676615,SL
-1317676616,1317676655,GB
-1317676656,1317676663,NG
-1317676664,1317676711,GB
-1317676712,1317676719,NG
-1317676720,1317676807,GB
-1317676808,1317676815,NG
-1317676816,1317676823,LR
-1317676824,1317676851,NG
-1317676852,1317676911,GB
-1317676912,1317676919,CM
-1317676920,1317676943,GB
-1317676944,1317676951,CM
-1317676952,1317676983,GB
-1317676984,1317676999,NG
-1317677000,1317677007,IQ
-1317677008,1317677015,GB
-1317677016,1317677023,NG
-1317677024,1317677031,GB
-1317677032,1317677039,NG
-1317677040,1317677047,GB
-1317677048,1317677055,NG
-1317677056,1317677063,UG
-1317677064,1317677095,GB
-1317677096,1317677103,BF
-1317677104,1317677111,GB
-1317677112,1317677119,NG
-1317677120,1317677191,GB
-1317677192,1317677199,SD
-1317677200,1317677207,NG
-1317677208,1317677247,GB
-1317677248,1317677255,NG
-1317677256,1317677263,GB
-1317677264,1317677271,NG
-1317677272,1317677279,FR
-1317677280,1317677303,GB
-1317677304,1317677311,NG
-1317677312,1317677319,CD
-1317677320,1317677327,AO
-1317677328,1317677335,CD
-1317677336,1317677343,GB
-1317677344,1317677345,NG
-1317677346,1317677375,GB
-1317677376,1317677391,NG
-1317677392,1317677407,GB
-1317677408,1317677415,UG
-1317677416,1317677423,LR
-1317677424,1317677425,UG
-1317677426,1317677447,GB
-1317677448,1317677455,CD
-1317677456,1317677463,AO
-1317677464,1317677471,UG
-1317677472,1317677479,GB
-1317677480,1317677487,CM
-1317677488,1317677495,GB
-1317677496,1317677503,NG
-1317677504,1317677519,GB
-1317677520,1317677527,NG
-1317677528,1317677535,GQ
-1317677536,1317677543,NG
-1317677544,1317677551,LR
-1317677552,1317677559,GB
-1317677560,1317677567,NG
-1317677568,1317677711,GB
-1317677712,1317677719,NG
-1317677720,1317677823,GB
-1317677824,1317677831,AO
-1317677832,1317677839,GB
-1317677840,1317677847,LR
-1317677848,1317677855,NG
-1317677856,1317677863,BF
-1317677864,1317677887,GB
-1317677888,1317677895,ML
-1317677896,1317677903,GN
-1317677904,1317677935,GB
-1317677936,1317677943,NG
-1317677944,1317678047,GB
-1317678048,1317678055,IQ
-1317678056,1317678071,GB
-1317678072,1317678079,NG
-1317678080,1317678095,GB
-1317678096,1317678103,GQ
-1317678104,1317678127,GB
-1317678128,1317678135,SD
-1317678136,1317678143,NG
-1317678144,1317678151,TD
-1317678152,1317678159,NG
-1317678160,1317678167,GQ
-1317678168,1317678175,NG
-1317678176,1317678183,GR
-1317678184,1317678207,GB
-1317678208,1317678215,NG
-1317678216,1317678223,GB
-1317678224,1317678231,NG
-1317678232,1317678239,BF
-1317678240,1317678255,GB
-1317678256,1317678263,CD
-1317678264,1317678271,GB
-1317678272,1317678279,CD
-1317678280,1317678287,LR
-1317678288,1317678295,GR
-1317678296,1317678311,GB
-1317678312,1317678319,SD
-1317678320,1317678327,NG
-1317678328,1317678335,GB
-1317678336,1317678343,AO
-1317678344,1317678351,GB
-1317678352,1317678359,CD
-1317678360,1317678367,NG
-1317678368,1317678375,CD
-1317678376,1317678383,GB
-1317678384,1317678391,NE
-1317678392,1317678399,GB
-1317678400,1317678415,NG
-1317678416,1317678447,GB
-1317678448,1317678455,NG
-1317678456,1317678463,CD
-1317678464,1317678471,NG
-1317678472,1317678479,ML
-1317678480,1317678487,CD
-1317678488,1317678527,GB
-1317678528,1317678535,GA
-1317678536,1317678543,NG
-1317678544,1317678551,GB
-1317678552,1317678559,NG
-1317678560,1317678567,GB
-1317678568,1317678575,CD
-1317678576,1317678583,GB
-1317678584,1317678591,AO
-1317678592,1317678631,GB
-1317678632,1317678639,NG
-1317678640,1317678831,GB
-1317678832,1317678839,NG
-1317678840,1317678871,GB
-1317678872,1317678879,BJ
-1317678880,1317678943,GB
-1317678944,1317678951,NG
-1317678952,1317678991,GB
-1317678992,1317678999,NG
-1317679000,1317679023,GB
-1317679024,1317679031,TZ
-1317679032,1317679063,GB
-1317679064,1317679071,CM
-1317679072,1317679127,GB
-1317679128,1317679135,US
-1317679136,1317679223,GB
-1317679224,1317679231,NG
-1317679232,1317679247,GB
-1317679248,1317679255,NG
-1317679256,1317679263,GB
-1317679264,1317679271,NG
-1317679272,1317679319,GB
-1317679320,1317679327,NG
-1317679328,1317679343,GB
-1317679344,1317679351,TD
-1317679352,1317679359,GB
-1317679360,1317679375,GQ
-1317679376,1317679383,NG
-1317679384,1317679391,GB
-1317679392,1317679407,NG
-1317679408,1317679415,GB
-1317679416,1317679423,NG
-1317679424,1317679431,NE
-1317679432,1317679447,GB
-1317679448,1317679455,CD
-1317679456,1317679463,BJ
-1317679464,1317679495,GB
-1317679496,1317679503,CD
-1317679504,1317679511,NG
-1317679512,1317679519,NE
-1317679520,1317679527,CD
-1317679528,1317679543,GB
-1317679544,1317679551,CD
-1317679552,1317679559,GB
-1317679560,1317679567,NG
-1317679568,1317679591,GB
-1317679592,1317679599,CD
-1317679600,1317679607,NE
-1317679608,1317679615,GQ
-1317679616,1317679623,AO
-1317679624,1317679639,GB
-1317679640,1317679647,ZW
-1317679648,1317679655,GB
-1317679656,1317679663,NG
-1317679664,1317679679,AO
-1317679680,1317679687,CI
-1317679688,1317679695,NG
-1317679696,1317679703,BJ
-1317679704,1317679711,GB
-1317679712,1317679719,AO
-1317679720,1317679743,GB
-1317679744,1317679751,AO
-1317679752,1317679759,CD
-1317679760,1317679767,NG
-1317679768,1317679775,GB
-1317679776,1317679783,GN
-1317679784,1317679791,SS
-1317679792,1317679799,GB
-1317679800,1317679807,CF
-1317679808,1317679815,AO
-1317679816,1317679823,GB
-1317679824,1317679831,AO
-1317679832,1317679839,GB
-1317679840,1317679847,NG
-1317679848,1317679863,GB
-1317679864,1317679871,NG
-1317679872,1317679943,GB
-1317679944,1317679951,CD
-1317679952,1317679959,GB
-1317679960,1317679967,GN
-1317679968,1317679975,CD
-1317679976,1317679991,GB
-1317679992,1317679999,CD
-1317680000,1317680063,GB
-1317680064,1317680071,AO
-1317680072,1317680175,GB
-1317680176,1317680183,GQ
-1317680184,1317680199,GB
-1317680200,1317680207,SN
-1317680208,1317680247,GB
-1317680248,1317680255,NG
-1317680256,1317680279,GB
-1317680280,1317680287,CM
-1317680288,1317680303,GB
-1317680304,1317680311,NG
-1317680312,1317680383,GB
-1317680384,1317680391,NE
-1317680392,1317680399,CI
-1317680400,1317680527,GB
-1317680528,1317680535,CD
-1317680536,1317680575,GB
-1317680576,1317680583,NG
-1317680584,1317680591,GB
-1317680592,1317680599,NG
-1317680600,1317680607,GB
-1317680608,1317680623,NG
-1317680624,1317680639,GB
-1317680640,1317680647,NG
-1317680648,1317680663,GB
-1317680664,1317680671,GA
-1317680672,1317680695,GB
-1317680696,1317680703,BJ
-1317680704,1317680727,GB
-1317680728,1317680743,NG
-1317680744,1317680751,CD
-1317680752,1317680759,CF
-1317680760,1317680767,GB
-1317680768,1317680775,NE
-1317680776,1317680799,GB
-1317680800,1317680807,NG
-1317680808,1317680815,GB
-1317680816,1317680823,NG
-1317680824,1317680831,CD
-1317680832,1317680839,ML
-1317680840,1317680847,BF
-1317680848,1317680855,GB
-1317680856,1317680863,GQ
-1317680864,1317681159,GB
-1317681160,1317681167,NG
-1317681168,1317681175,GB
-1317681176,1317681183,NG
-1317681184,1317681223,GB
-1317681224,1317681231,NG
-1317681232,1317681279,GB
-1317681280,1317681287,NG
-1317681288,1317681375,GB
-1317681376,1317681399,NG
-1317681400,1317681407,GB
-1317681408,1317681415,NG
-1317681416,1317681927,GB
-1317681928,1317681931,NG
-1317681932,1317681999,GB
-1317682000,1317682007,NE
-1317682008,1317682015,NG
-1317682016,1317683199,GB
-1317683200,1317683839,DE
-1317683840,1317683855,CH
-1317683856,1317683863,DE
-1317683864,1317683871,FR
-1317683872,1317685503,DE
-1317685504,1317685631,BE
-1317685632,1317686303,DE
-1317686304,1317686319,NL
-1317686320,1317686335,DE
-1317686336,1317686367,NL
-1317686368,1317696287,DE
-1317696288,1317696319,ES
-1317696320,1317699583,DE
+1317666816,1317679727,GB
+1317679728,1317679735,CM
+1317679736,1317683199,GB
+1317683200,1317699583,DE
1317699584,1317715967,RU
1317715968,1317732351,SA
1317732352,1317748735,HU
@@ -44417,154 +14406,23 @@
1317765120,1317781503,GE
1317781504,1317814271,RU
1317814272,1317830655,DE
-1317830656,1317831679,NL
-1317831680,1317831711,CY
-1317831712,1317831839,NL
-1317831840,1317831871,CA
-1317831872,1317832191,NL
-1317832192,1317832447,GB
-1317832448,1317832511,CY
-1317832512,1317832575,NL
-1317832576,1317832703,GI
-1317832704,1317832959,NL
-1317832960,1317833215,IT
-1317833216,1317835007,NL
-1317835008,1317835071,RU
-1317835072,1317835135,GI
-1317835136,1317835199,RU
-1317835200,1317835263,CY
-1317835264,1317835615,NL
-1317835616,1317835647,RU
-1317835648,1317835711,NL
-1317835712,1317835775,GI
-1317835776,1317836031,CY
-1317836032,1317836159,NL
-1317836160,1317836223,CY
-1317836224,1317836863,NL
-1317836864,1317836927,CY
-1317836928,1317836991,NL
-1317836992,1317837007,GB
-1317837008,1317837023,RU
-1317837024,1317837567,NL
-1317837568,1317837823,US
-1317837824,1317837951,NL
-1317837952,1317838015,CY
-1317838016,1317838943,NL
-1317838944,1317838959,GB
-1317838960,1317838975,NL
-1317838976,1317839103,GI
-1317839104,1317839359,NL
-1317839360,1317839615,RU
-1317839616,1317839679,HK
-1317839680,1317839695,CZ
-1317839696,1317840127,NL
-1317840128,1317840159,SC
-1317840160,1317840639,NL
-1317840640,1317840895,US
-1317840896,1317841407,NL
-1317841408,1317841439,SC
-1317841440,1317841471,MT
-1317841472,1317841535,CY
-1317841536,1317841567,BZ
-1317841568,1317841599,NL
-1317841600,1317841663,GI
-1317841664,1317841727,HK
-1317841728,1317841855,CY
-1317841856,1317841887,IL
-1317841888,1317842943,NL
-1317842944,1317843071,CY
-1317843072,1317843135,NL
-1317843136,1317843199,CY
-1317843200,1317843391,US
-1317843392,1317843423,NL
-1317843424,1317843455,US
-1317843456,1317843519,NL
-1317843520,1317843583,GI
-1317843584,1317843647,US
-1317843648,1317843839,NL
-1317843840,1317843967,SC
-1317843968,1317844223,MY
-1317844224,1317844607,NL
-1317844608,1317844623,SC
-1317844624,1317845375,NL
-1317845376,1317845503,US
-1317845504,1317845631,NL
-1317845632,1317845759,CY
-1317845760,1317846015,NL
-1317846016,1317846271,PL
-1317846272,1317846399,CY
-1317846400,1317846463,LU
-1317846464,1317846527,NL
-1317846528,1317846655,US
-1317846656,1317846759,NL
-1317846760,1317846763,US
-1317846764,1317846783,NL
-1317846784,1317846911,CY
-1317846912,1317847039,US
+1317830656,1317847039,NL
1317847040,1317863423,RU
1317863424,1317879807,GB
1317879808,1317896191,SK
1317896192,1317912575,LU
1317912576,1317928959,GB
1317928960,1317945343,BG
-1317945344,1317950207,AT
-1317950208,1317950463,CZ
-1317950464,1317956607,AT
-1317956608,1317956639,CZ
-1317956640,1317957631,AT
-1317957632,1317958143,DE
-1317958144,1317958655,AT
-1317958656,1317958911,DE
-1317958912,1317958975,CZ
-1317958976,1317959007,DE
-1317959008,1317965047,AT
-1317965048,1317965055,DE
-1317965056,1317977407,AT
-1317977408,1317977415,MT
-1317977416,1317978111,AT
+1317945344,1317978111,AT
1317978112,1317994495,RU
-1317994496,1317994751,NL
-1317994752,1317996095,DE
-1317996096,1317996287,NL
-1317996288,1317996799,DE
-1317996800,1317997055,NL
-1317997056,1317998207,DE
-1317998208,1317998335,NL
-1317998336,1318000383,DE
-1318000384,1318000447,NL
-1318000448,1318000511,DE
-1318000512,1318000639,NL
-1318000640,1318001791,DE
-1318001792,1318001919,NL
-1318001920,1318003455,DE
-1318003456,1318004223,NL
-1318004224,1318004735,DE
-1318004736,1318004991,NL
-1318004992,1318005503,DE
-1318005504,1318005759,NL
-1318005760,1318006271,DE
-1318006272,1318006783,NL
-1318006784,1318007999,DE
-1318008000,1318008031,NL
-1318008032,1318009423,DE
-1318009424,1318009471,NL
-1318009472,1318010511,DE
-1318010512,1318010879,NL
+1317994496,1318010879,NL
1318010880,1318027263,DK
1318027264,1318043647,IE
1318043648,1318584319,GB
1318584320,1318592511,PL
-1318592512,1318592623,NL
-1318592624,1318592639,DE
-1318592640,1318592655,NL
-1318592656,1318592671,US
-1318592672,1318597247,NL
-1318597248,1318597375,US
-1318597376,1318599807,NL
-1318599808,1318599823,US
-1318599824,1318599919,NL
-1318599920,1318599935,GB
-1318599936,1318600703,NL
+1318592512,1318597343,NL
+1318597344,1318597359,US
+1318597360,1318600703,NL
1318600704,1318608895,AT
1318608896,1318617087,IT
1318617088,1318625279,FR
@@ -44577,23 +14435,17 @@
1318682624,1318690815,RU
1318690816,1318699007,DK
1318699008,1318707199,IE
-1318707200,1318707775,FR
-1318707776,1318707783,GB
-1318707784,1318711360,FR
-1318711361,1318711391,GB
-1318711392,1318711647,FR
-1318711648,1318711663,IT
-1318711664,1318713855,FR
-1318713856,1318714111,GB
-1318714112,1318715390,FR
+1318707200,1318707455,FR
+1318707456,1318713023,GB
+1318713024,1318713087,FR
+1318713088,1318714367,GB
+1318714368,1318715390,FR
1318715391,1318715391,GB
1318715392,1318723583,BG
1318723584,1318731775,IR
1318731776,1318739967,PL
1318739968,1318748159,GB
-1318748160,1318753023,LV
-1318753024,1318753279,BE
-1318753280,1318756351,LV
+1318748160,1318756351,LV
1318756352,1318764543,UA
1318764544,1318780927,KW
1318780928,1318789119,CH
@@ -44602,46 +14454,31 @@
1318805504,1318813695,PL
1318813696,1318821887,FR
1318821888,1318838271,RU
-1318838272,1318839039,GB
-1318839040,1318840319,IE
-1318840320,1318840959,GB
-1318840960,1318841078,IE
+1318838272,1318841078,IE
1318841079,1318841079,GB
-1318841080,1318841087,IE
-1318841088,1318841471,GB
-1318841472,1318841855,IE
-1318841856,1318842111,GB
-1318842112,1318842367,IE
-1318842368,1318842623,GB
-1318842624,1318842879,IE
-1318842880,1318846463,GB
+1318841080,1318846463,IE
1318846464,1318854655,NO
1318854656,1318862847,CZ
1318862848,1318871039,GB
1318871040,1318879231,DK
1318879232,1318887423,CZ
1318887424,1318895615,PL
-1318895616,1318897663,SE
-1318897664,1318903807,DK
+1318895616,1318903807,DK
1318903808,1318911999,RU
1318912000,1318920191,MK
1318920192,1318928383,IR
1318928384,1318936575,LT
1318936576,1318944767,DK
1318944768,1318958079,CZ
-1318958080,1318960895,PL
-1318960896,1318961151,CZ
+1318958080,1318960127,PL
+1318960128,1318961151,CZ
1318961152,1318969343,GB
1318969344,1318977535,RU
1318977536,1318985727,LT
-1318985728,1319001087,GB
-1319001088,1319002111,US
+1318985728,1319000063,GB
+1319000064,1319002111,US
1319002112,1319010303,IE
-1319010304,1319017215,CY
-1319017216,1319017279,DE
-1319017280,1319017295,CY
-1319017296,1319017303,DE
-1319017304,1319018495,CY
+1319010304,1319018495,CY
1319018496,1319026687,IR
1319026688,1319034879,RU
1319034880,1319035903,NO
@@ -44651,26 +14488,15 @@
1319043072,1319051263,FR
1319051264,1319059455,UA
1319059456,1319067647,PL
-1319067648,1319070271,DE
-1319070272,1319070335,PT
-1319070336,1319070463,RU
-1319070464,1319070975,DE
+1319067648,1319070975,DE
1319070976,1319071103,PL
-1319071104,1319071231,RU
+1319071104,1319071231,DE
1319071232,1319071487,PL
-1319071488,1319073023,DE
-1319073024,1319073279,TR
-1319073280,1319074303,DE
-1319074304,1319074559,HK
-1319074560,1319074815,DE
+1319071488,1319074815,DE
1319074816,1319074943,PL
-1319074944,1319075071,RU
+1319074944,1319075071,DE
1319075072,1319075199,PL
-1319075200,1319075327,RU
-1319075328,1319075455,DE
-1319075456,1319075583,RU
-1319075584,1319075711,DE
-1319075712,1319075839,RU
+1319075200,1319075839,DE
1319075840,1319084031,BG
1319084032,1319092223,KW
1319092224,1319100415,IT
@@ -44684,9 +14510,7 @@
1331757056,1331822591,IE
1331822592,1331824639,IT
1331824640,1331826687,RU
-1331826688,1331828607,FR
-1331828608,1331828615,BE
-1331828616,1331828735,FR
+1331826688,1331828735,FR
1331828736,1331830783,LT
1331830784,1331832831,GB
1331832832,1331834879,IT
@@ -44694,7 +14518,8 @@
1331836928,1331838975,FR
1331838976,1331841023,ES
1331841024,1331843071,CZ
-1331843072,1331845119,GB
+1331843072,1331844863,GB
+1331844864,1331845119,FR
1331845120,1331847167,RU
1331847168,1331849215,FR
1331849216,1331851263,BG
@@ -44711,9 +14536,7 @@
1331873792,1331877887,RU
1331877888,1331879935,ES
1331879936,1331881983,DE
-1331881984,1331883007,GB
-1331883008,1331883263,SL
-1331883264,1331886079,GB
+1331881984,1331886079,GB
1331886080,1331888127,RU
1331888128,1331890175,SE
1331890176,1331892223,IT
@@ -44730,11 +14553,7 @@
1331914752,1331916799,RU
1331916800,1331918847,IT
1331918848,1331920895,BE
-1331920896,1331921087,NL
-1331921088,1331921119,BE
-1331921120,1331922751,NL
-1331922752,1331922815,BE
-1331922816,1331922943,NL
+1331920896,1331922943,NL
1331922944,1331924991,DE
1331924992,1331927039,GB
1331927040,1331929087,FI
@@ -44742,59 +14561,12 @@
1331931136,1331933183,SE
1331933184,1331935231,TR
1331935232,1331937279,NL
-1331937280,1331937311,GB
-1331937312,1331937319,IQ
-1331937320,1331937471,GB
-1331937472,1331937519,NG
-1331937520,1331937535,LB
-1331937536,1331937567,SM
-1331937568,1331937575,NG
-1331937576,1331937583,GB
-1331937584,1331937599,ZA
-1331937600,1331937663,GB
-1331937664,1331937727,DE
-1331937728,1331938111,GB
-1331938112,1331938127,AE
-1331938128,1331938135,SA
-1331938136,1331938143,AE
-1331938144,1331938151,GB
-1331938152,1331938159,PL
-1331938160,1331938167,GB
-1331938168,1331938175,KW
-1331938176,1331938191,GB
-1331938192,1331938207,AE
-1331938208,1331938271,GB
-1331938272,1331938303,QA
-1331938304,1331938319,GB
-1331938320,1331938335,AE
-1331938336,1331938375,GB
-1331938376,1331938383,AE
-1331938384,1331938399,IE
-1331938400,1331938431,AE
-1331938432,1331938815,GB
-1331938816,1331939071,NG
-1331939072,1331939327,GB
-1331939328,1331939871,BE
-1331939872,1331939879,LU
-1331939880,1331939991,BE
-1331939992,1331939999,IT
-1331940000,1331940151,BE
-1331940152,1331940159,FR
-1331940160,1331941375,BE
+1331937280,1331939327,GB
+1331939328,1331941375,BE
1331941376,1331943423,ES
1331943424,1331945471,RU
1331945472,1331947519,SE
-1331947520,1331948543,CH
-1331948544,1331948547,NL
-1331948548,1331948551,CH
-1331948552,1331948559,FR
-1331948560,1331948567,GB
-1331948568,1331948575,DE
-1331948576,1331948583,CZ
-1331948584,1331948591,CY
-1331948592,1331948607,BG
-1331948608,1331948615,US
-1331948616,1331949567,CH
+1331947520,1331949567,CH
1331949568,1331951615,RU
1331951616,1331953663,GE
1331953664,1332019199,BG
@@ -44804,9 +14576,7 @@
1332215808,1332346879,RU
1332346880,1332412415,AL
1332412416,1332477951,GR
-1332477952,1332489215,ES
-1332489216,1332489727,US
-1332489728,1332609023,ES
+1332477952,1332609023,ES
1332609024,1332613119,PL
1332613120,1332617215,UA
1332617216,1332621311,CZ
@@ -44817,7 +14587,7 @@
1332637696,1332641791,BG
1332641792,1332645887,UA
1332645888,1332649983,RS
-1332649984,1332658175,UA
+1332654080,1332658175,RU
1332658176,1332662271,PL
1332662272,1332670463,UA
1332670464,1332740095,RU
@@ -44848,17 +14618,13 @@
1334084632,1334091775,DE
1334091776,1334099967,LT
1334099968,1334108159,IR
-1334108160,1334113527,BE
-1334113528,1334113535,NL
-1334113536,1334115583,BE
-1334115584,1334115839,RU
-1334115840,1334116351,BE
+1334108160,1334116351,BE
1334116352,1334124543,AX
-1334124544,1334130687,DE
+1334124544,1334125567,DE
+1334125568,1334126591,ES
+1334126592,1334130687,DE
1334130688,1334131711,NL
-1334131712,1334132223,DE
-1334132224,1334132479,NL
-1334132480,1334132735,DE
+1334131712,1334132735,DE
1334132736,1334165503,RU
1334165504,1334173695,PL
1334173696,1334181887,LT
@@ -44868,7 +14634,7 @@
1334206464,1334214655,FI
1334214656,1334222847,JO
1334222848,1334231039,BG
-1334231040,1334239231,EE
+1334231040,1334239231,RU
1334239232,1334247423,IS
1334247424,1334255615,NO
1334255616,1334263807,IT
@@ -44880,83 +14646,50 @@
1334304768,1334312959,RU
1334312960,1334316031,SE
1334316032,1334316287,NO
-1334316288,1334343047,SE
-1334343048,1334343055,NO
-1334343056,1334345727,SE
+1334316288,1334345727,SE
1334345728,1334378495,RU
1334378496,1334411263,IT
1334411264,1334444031,RU
-1334444032,1334478847,SE
-1334478848,1334480895,DK
-1334480896,1334484991,SE
-1334484992,1334489087,DK
-1334489088,1334501375,SE
-1334501376,1334509567,DK
+1334444032,1334476799,SE
+1334476800,1334484223,DK
+1334484224,1334484479,SE
+1334484480,1334484735,DK
+1334484736,1334484991,SE
+1334484992,1334495231,DK
+1334495232,1334495743,SE
+1334495744,1334495999,DK
+1334496000,1334496255,SE
+1334496256,1334497023,DK
+1334497024,1334497279,SE
+1334497280,1334497535,DK
+1334497536,1334498047,SE
+1334498048,1334498559,DK
+1334498560,1334499071,SE
+1334499072,1334500351,DK
+1334500352,1334500607,SE
+1334500608,1334509567,DK
1334509568,1334542335,PL
1334542336,1334575103,RU
1334575104,1334579199,UA
1334579200,1334583295,RU
-1334583296,1334584375,DE
-1334584376,1334584383,DK
-1334584384,1334584703,DE
-1334584704,1334584711,AT
-1334584712,1334584759,DE
-1334584760,1334584767,PL
-1334584768,1334585471,DE
-1334585472,1334585503,AT
-1334585504,1334591487,DE
+1334583296,1334591487,DE
1334591488,1334595583,RU
-1334595584,1334596351,IT
-1334596352,1334596607,GR
-1334596608,1334597887,IT
-1334597888,1334598143,GR
-1334598144,1334598271,SK
-1334598272,1334598399,CZ
-1334598400,1334598463,GR
-1334598464,1334598527,IT
-1334598528,1334598655,GR
-1334598656,1334599039,IT
-1334599040,1334599167,FR
-1334599168,1334599679,IT
+1334595584,1334599679,IT
1334599680,1334603775,RU
1334603776,1334607871,DE
-1334607872,1334609994,IE
-1334609995,1334609995,GB
-1334609996,1334610020,IE
-1334610021,1334610021,GB
-1334610022,1334611967,IE
+1334607872,1334611967,IE
1334611968,1334616063,ME
1334616064,1334620159,MD
1334620160,1334624255,DE
-1334624256,1334625535,GB
-1334625536,1334625791,AP
-1334625792,1334626303,AU
-1334626304,1334627839,GB
-1334627840,1334628095,NO
-1334628096,1334628351,GB
+1334624256,1334628351,GB
1334628352,1334632447,IE
1334632448,1334636543,KZ
1334636544,1334640639,RU
1334640640,1334644735,FR
-1334644736,1334644991,LU
-1334644992,1334645222,A2
-1334645223,1334645223,US
-1334645224,1334645226,A2
-1334645227,1334645227,US
-1334645228,1334645247,A2
-1334645248,1334647936,IQ
-1334647937,1334648063,DE
-1334648064,1334648319,IQ
-1334648320,1334648575,DE
-1334648576,1334648831,A2
-1334648832,1334649343,GB
-1334649344,1334649375,DK
-1334649376,1334651647,GB
-1334651648,1334651903,FR
-1334651904,1334652159,DE
-1334652160,1334652863,GB
-1334652864,1334652895,FR
-1334652896,1334652927,GB
+1334644736,1334647039,DE
+1334647040,1334647807,IQ
+1334647808,1334648831,DE
+1334648832,1334652927,GB
1334652928,1334661119,RU
1334661120,1334665215,CH
1334665216,1334669311,NO
@@ -44967,16 +14700,15 @@
1334681856,1334682111,GB
1334682112,1334682367,IE
1334682368,1334682623,FR
-1334682624,1334682879,NO
-1334682880,1334683135,DK
-1334683136,1334683391,CZ
+1334682624,1334683135,DE
+1334683136,1334683391,GB
1334683392,1334683647,CH
1334683648,1334683903,GB
1334683904,1334684031,DE
1334684032,1334684159,NL
1334684160,1334684415,SE
1334684416,1334684479,GB
-1334684480,1334684511,CH
+1334684480,1334684511,DE
1334684512,1334684671,GB
1334684672,1334684927,FI
1334684928,1334685183,NL
@@ -44991,25 +14723,21 @@
1334710272,1334714367,RU
1334714368,1334718463,DE
1334718464,1334722559,KZ
-1334722560,1334725631,NL
-1334725632,1334726143,SE
-1334726144,1334726655,LU
-1334726656,1334729983,RU
-1334729984,1334730431,KZ
-1334730432,1334730439,RU
-1334730440,1334730443,KZ
-1334730444,1334730447,RU
-1334730448,1334730463,KZ
-1334730464,1334730479,RU
-1334730480,1334730487,KZ
-1334730488,1334730495,RU
-1334730496,1334730751,KZ
-1334730752,1334734847,RU
+1334722560,1334723583,NL
+1334723584,1334723839,BE
+1334723840,1334724095,PT
+1334724096,1334724351,NO
+1334724352,1334724863,US
+1334724864,1334725631,NL
+1334725632,1334725887,SE
+1334725888,1334726143,NL
+1334726144,1334726399,LU
+1334726400,1334726655,SE
+1334726656,1334734847,RU
1334734848,1334738943,LT
1334738944,1334743039,CH
1334743040,1334747135,CZ
1334747136,1334751231,RU
-1334751232,1334755327,BH
1334755328,1334759423,UA
1334759424,1334763519,SE
1334763520,1334767615,DK
@@ -45018,11 +14746,7 @@
1334779904,1334783999,UA
1334784000,1334788095,AT
1334788096,1334792191,RU
-1334792192,1334793215,GB
-1334793216,1334793727,IR
-1334793728,1334793919,GB
-1334793920,1334793928,AE
-1334793929,1334794239,GB
+1334792192,1334794239,GB
1334794240,1334796287,ES
1334796288,1334800383,ME
1334800384,1334804479,IT
@@ -45040,9 +14764,7 @@
1336147968,1336279039,RU
1336279040,1336410111,GR
1336410112,1336541183,PT
-1336541184,1336542207,SA
-1336542208,1336542463,US
-1336542464,1336543231,SA
+1336541184,1336543231,SA
1336543232,1336545279,ES
1336545280,1336547327,SE
1336547328,1336549375,RU
@@ -45050,14 +14772,11 @@
1336551424,1336553471,GB
1336553472,1336555519,SA
1336555520,1336557567,BE
-1336557568,1336558591,ES
-1336558592,1336559328,US
-1336559329,1336559615,ES
+1336557568,1336559615,ES
1336559616,1336561663,GB
1336561664,1336563711,NO
1336563712,1336567807,NL
1336567808,1336569855,BY
-1336569856,1336571903,EU
1336571904,1336573951,PL
1336573952,1336575999,DK
1336576000,1336578047,RU
@@ -45076,31 +14795,20 @@
1336606720,1336608767,PL
1336608768,1336610815,RU
1336610816,1336612863,TR
-1336612864,1336613375,ES
-1336613376,1336613630,IT
-1336613631,1336613631,ES
-1336613632,1336613887,IT
-1336613888,1336614655,ES
-1336614656,1336614910,IT
-1336614911,1336614911,ES
+1336612864,1336614911,ES
1336614912,1336616959,GB
1336616960,1336619007,ES
1336619008,1336621055,AL
1336621056,1336623103,DE
1336623104,1336625151,BE
-1336625152,1336625303,IE
-1336625304,1336625311,GB
-1336625312,1336626259,IE
-1336626260,1336626263,GB
-1336626264,1336626767,IE
-1336626768,1336626783,GB
-1336626784,1336626927,IE
-1336626928,1336626943,GB
-1336626944,1336627199,IE
+1336625152,1336626286,GB
+1336626287,1336626287,IE
+1336626288,1336627199,GB
1336627200,1336629247,NO
1336629248,1336631295,DE
1336631296,1336633343,IS
-1336633344,1336635391,ES
+1336633344,1336634879,ES
+1336634880,1336635391,PT
1336635392,1336637439,RU
1336637440,1336639487,UA
1336639488,1336643583,HU
@@ -45113,9 +14821,7 @@
1336655872,1336657919,NL
1336657920,1336659967,DE
1336659968,1336662015,RU
-1336662016,1336663039,ES
-1336663040,1336663071,FR
-1336663072,1336664063,ES
+1336662016,1336664063,ES
1336664064,1336668159,FI
1336668160,1336670207,BH
1336670208,1336672255,SE
@@ -45128,9 +14834,7 @@
1336786944,1336803327,JO
1336811520,1336827903,RU
1336827904,1336836095,AT
-1336836096,1336837119,BE
-1336837120,1336837375,NL
-1336837376,1336838143,BE
+1336836096,1336838143,NL
1336838144,1336842239,DE
1336842240,1336844287,DK
1336844288,1336846335,IR
@@ -45140,167 +14844,121 @@
1336852480,1336868863,FR
1336868864,1336885247,RU
1336885248,1336901631,RS
-1336901632,1336910352,IR
-1336910353,1336910353,CA
-1336910354,1336910408,IR
-1336910409,1336910411,CA
-1336910412,1336910448,IR
-1336910449,1336910449,CA
-1336910450,1336910476,IR
-1336910477,1336910478,CA
-1336910479,1336910484,IR
-1336910485,1336910485,CA
-1336910486,1336910486,IR
-1336910487,1336910488,CA
-1336910489,1336910529,IR
-1336910530,1336910545,CA
-1336910546,1336911749,IR
-1336911750,1336911759,AE
-1336911760,1336911853,IR
-1336911854,1336911869,CA
-1336911870,1336918015,IR
+1336901632,1336918015,IR
1336918016,1336934399,PL
-1336934400,1337458687,IL
+1336934400,1337241562,IL
+1337241563,1337241563,RO
+1337241564,1337458687,IL
1337458688,1337982975,PL
1337982976,1342177279,DE
-1342177280,1342628159,GB
-1342628160,1342628175,IE
-1342628176,1342628207,GB
+1342177280,1342628207,GB
1342628208,1342628223,IE
-1342628224,1342628319,GB
-1342628320,1342628335,IE
-1342628336,1342628351,GB
-1342628352,1342628367,IE
-1342628368,1342628431,GB
-1342628432,1342628463,IE
-1342628464,1342628663,GB
-1342628664,1342628671,IE
-1342628672,1342701567,GB
-1342701568,1342701823,FR
-1342701824,1342703103,MQ
-1342703104,1342703359,FR
-1342703360,1342705663,MQ
-1342705664,1342705919,FR
-1342705920,1342712319,MQ
-1342712320,1342712575,FR
-1342712576,1342714879,MQ
-1342714880,1342715135,FR
-1342715136,1342715647,MQ
-1342715648,1342715903,FR
-1342715904,1342716671,MQ
-1342716672,1342717183,FR
+1342628224,1342701567,GB
+1342701568,1342704127,MQ
+1342704128,1342704383,FR
+1342704384,1342704895,MQ
+1342704896,1342705151,FR
+1342705152,1342705919,MQ
+1342705920,1342706175,FR
+1342706176,1342707711,MQ
+1342707712,1342707967,FR
+1342707968,1342708223,MQ
+1342708224,1342708479,FR
+1342708480,1342708735,MQ
+1342708736,1342708991,FR
+1342708992,1342711807,MQ
+1342711808,1342712063,FR
+1342712064,1342716159,MQ
+1342716160,1342716415,FR
+1342716416,1342716927,MQ
+1342716928,1342717183,FR
1342717184,1342717951,MQ
-1342717952,1342722559,GP
-1342722560,1342722815,FR
-1342722816,1342727679,GP
-1342727680,1342727935,FR
-1342727936,1342733311,GP
-1342733312,1342733567,FR
-1342733568,1342734335,GP
-1342734336,1342735615,RE
-1342735616,1342735871,FR
-1342735872,1342736639,RE
+1342717952,1342718207,GP
+1342718208,1342718463,FR
+1342718464,1342719231,GP
+1342719232,1342719487,FR
+1342719488,1342720255,GP
+1342720256,1342720511,FR
+1342720512,1342720767,GP
+1342720768,1342721023,FR
+1342721024,1342722303,GP
+1342722304,1342722559,FR
+1342722560,1342723071,GP
+1342723072,1342723327,FR
+1342723328,1342724095,GP
+1342724096,1342724351,FR
+1342724352,1342725375,GP
+1342725376,1342725631,FR
+1342725632,1342727423,GP
+1342727424,1342727679,FR
+1342727680,1342729215,GP
+1342729216,1342729471,FR
+1342729472,1342729727,GP
+1342729728,1342729983,FR
+1342729984,1342733823,GP
+1342733824,1342734079,FR
+1342734080,1342734335,GP
+1342734336,1342734847,RE
+1342734848,1342735103,FR
+1342735104,1342736639,RE
1342736640,1342736895,FR
-1342736896,1342737407,RE
-1342737408,1342737663,FR
-1342737664,1342741247,RE
-1342741248,1342741503,FR
-1342741504,1342743551,RE
-1342743552,1342743807,FR
-1342743808,1342746111,RE
-1342746112,1342746367,FR
-1342746368,1342747135,RE
-1342747136,1342747391,FR
-1342747392,1342747647,RE
-1342747648,1342748159,FR
-1342748160,1342748671,RE
-1342748672,1342748927,FR
-1342748928,1342750463,RE
-1342750464,1342750719,FR
-1342750720,1342753535,RE
-1342753536,1342753791,FR
-1342753792,1342758911,RE
-1342758912,1342759423,GF
-1342759424,1342761727,FR
-1342761728,1342762239,GF
-1342762240,1342763007,FR
-1342763008,1342765055,GF
-1342765056,1342765823,FR
-1342765824,1342767103,GF
-1342767104,1342981887,FR
-1342981888,1342981935,GB
-1342981936,1342982143,FR
-1342982144,1342982399,MG
-1342982400,1342988287,FR
+1342736896,1342738175,RE
+1342738176,1342738687,FR
+1342738688,1342739199,RE
+1342739200,1342739455,FR
+1342739456,1342741503,RE
+1342741504,1342742015,FR
+1342742016,1342742271,RE
+1342742272,1342742783,FR
+1342742784,1342743039,RE
+1342743040,1342743295,FR
+1342743296,1342743807,RE
+1342743808,1342744063,FR
+1342744064,1342749695,RE
+1342749696,1342750207,FR
+1342750208,1342753023,RE
+1342753024,1342753279,FR
+1342753280,1342756351,RE
+1342756352,1342757119,FR
+1342757120,1342757887,RE
+1342757888,1342758399,FR
+1342758400,1342759167,RE
+1342759168,1342759423,FR
+1342759424,1342760447,RE
+1342760448,1342760703,FR
+1342760704,1342763519,RE
+1342763520,1342763775,FR
+1342763776,1342764031,RE
+1342764032,1342764287,FR
+1342764288,1342766079,RE
+1342766080,1342766847,FR
+1342766848,1342767103,RE
+1342767104,1342988287,FR
1342988288,1342989055,US
1342989056,1342996479,FR
-1342996480,1342996991,GF
-1342996992,1342997247,FR
-1342997248,1342998015,GF
-1342998016,1342998271,FR
-1342998272,1342998527,GF
-1342998528,1342998783,FR
-1342998784,1343003391,GF
-1343003392,1343003647,FR
-1343003648,1343005695,GF
+1342996480,1343000575,GF
+1343000576,1343001087,FR
+1343001088,1343001855,GF
+1343001856,1343002111,FR
+1343002112,1343005695,GF
1343005696,1343005951,FR
-1343005952,1343006719,GF
-1343006720,1343006975,FR
-1343006976,1343008511,GF
-1343008512,1343008767,FR
-1343008768,1343011327,GF
-1343011328,1343011583,FR
-1343011584,1343012351,GF
-1343012352,1343012607,FR
-1343012608,1343012863,GF
-1343012864,1343013119,FR
-1343013120,1343013375,US
-1343013376,1343017983,FR
+1343005952,1343012863,GF
+1343012864,1343017983,FR
1343017984,1343018495,RE
1343018496,1343025151,FR
1343025152,1343025663,RE
-1343025664,1343025819,FR
-1343025820,1343025820,LU
-1343025821,1343217663,FR
-1343217664,1343218687,MU
-1343218688,1343219711,FR
-1343219712,1343219967,KR
-1343219968,1343220479,FR
+1343025664,1343220479,FR
1343220480,1343220671,DE
1343220672,1343220735,FR
1343220736,1343220863,GB
-1343220864,1343221023,FR
-1343221024,1343221027,DE
-1343221028,1343221031,FR
-1343221032,1343221039,GB
-1343221040,1343221439,FR
-1343221440,1343221447,GB
-1343221448,1343221503,FR
-1343221504,1343221759,GB
-1343221760,1343221823,LB
-1343221824,1343221855,FR
-1343221856,1343222271,LB
-1343222272,1343222287,CI
-1343222288,1343222527,FR
-1343222528,1343222575,TD
-1343222576,1343222783,FR
-1343222784,1343222911,TD
-1343222912,1343223551,FR
-1343223552,1343223807,LB
-1343223808,1343224063,FR
+1343220864,1343221055,FR
+1343221056,1343221119,GB
+1343221120,1343223679,FR
+1343223680,1343223687,LB
+1343223688,1343224063,FR
1343224064,1343224303,US
-1343224304,1343224319,FR
-1343224320,1343224535,LB
-1343224536,1343224543,FR
-1343224544,1343224575,LB
-1343224576,1343224831,FR
-1343224832,1343225087,A2
-1343225088,1343225855,FR
-1343225856,1343475711,IT
-1343475712,1343475967,US
-1343475968,1343605503,IT
-1343605504,1343605759,US
-1343605760,1343750143,IT
+1343224304,1343225855,FR
+1343225856,1343750143,IT
1343750144,1344798719,ES
1344798720,1345323007,GB
1345323008,1345847295,PL
@@ -45312,21 +14970,18 @@
1346375680,1346379775,RU
1346379776,1346383871,ES
1346383872,1346387967,GB
-1346387968,1346391807,HU
-1346391808,1346392063,AT
+1346387968,1346392063,HU
1346392064,1346396159,UA
1346396160,1346400255,RU
1346400256,1346404351,IT
-1346404352,1346408447,AT
+1346404352,1346407423,AT
+1346407424,1346408447,DE
1346408448,1346412543,LU
1346412544,1346416639,RU
1346416640,1346420735,DE
1346420736,1346424831,NO
1346424832,1346428927,JO
-1346428928,1346429183,EU
-1346429184,1346431743,FR
-1346431744,1346431999,KZ
-1346432000,1346433023,FR
+1346428928,1346433023,FR
1346433024,1346439167,NL
1346439168,1346441215,ES
1346441216,1346445311,RU
@@ -45335,98 +14990,39 @@
1346453504,1346461695,BA
1346461696,1346469887,NL
1346469888,1346473983,BE
-1346473984,1346477823,IT
-1346477824,1346477855,HU
-1346477856,1346478079,IT
+1346473984,1346478079,IT
1346478080,1346482175,BA
1346482176,1346486271,CZ
1346486272,1346490367,SE
1346490368,1346494463,GB
1346494464,1346498559,FR
-1346498560,1346500607,IM
-1346500608,1346500671,GB
-1346500672,1346500735,IM
-1346500736,1346500783,GB
-1346500784,1346500799,IM
-1346500800,1346500847,GB
-1346500848,1346500863,IM
-1346500864,1346501343,GB
-1346501344,1346501375,IM
-1346501376,1346501631,GB
-1346501632,1346501759,IM
-1346501760,1346501807,GB
-1346501808,1346501839,IM
-1346501840,1346501847,GB
-1346501848,1346501855,IM
-1346501856,1346501871,GB
-1346501872,1346501887,IM
-1346501888,1346501891,GB
-1346501892,1346501895,IM
-1346501896,1346502175,GB
-1346502176,1346502207,IM
-1346502208,1346502231,GB
-1346502232,1346502263,IM
-1346502264,1346502319,GB
-1346502320,1346502323,IM
-1346502324,1346502335,GB
-1346502336,1346502351,IM
-1346502352,1346502367,GB
-1346502368,1346502375,IM
-1346502376,1346502655,GB
+1346498560,1346502655,IM
1346502656,1346510847,DE
1346510848,1346519039,AT
1346519040,1346527231,RU
-1346527232,1346528607,DE
-1346528608,1346528623,CH
-1346528624,1346531327,DE
+1346527232,1346531327,DE
1346531328,1346535423,ES
-1346535424,1346537335,BE
-1346537336,1346537343,GB
-1346537344,1346537983,BE
-1346537984,1346537988,AT
-1346537989,1346537991,BE
-1346537992,1346537999,AT
-1346538000,1346538007,CZ
-1346538008,1346538015,BE
-1346538016,1346538031,CH
-1346538032,1346538143,BE
-1346538144,1346538175,HR
-1346538176,1346538239,BE
-1346538240,1346538303,AT
-1346538304,1346539519,BE
+1346535424,1346539519,BE
1346539520,1346543615,RU
1346543616,1346547711,FI
1346547712,1346551807,IR
1346555904,1346559999,IT
-1346560000,1346560447,LI
-1346560448,1346560479,CH
-1346560480,1346561535,LI
-1346561536,1346561599,CH
-1346561600,1346562783,LI
-1346562784,1346562879,CH
-1346562880,1346563071,LI
-1346563072,1346563327,CH
-1346563328,1346564095,LI
+1346560000,1346564095,LI
1346564096,1346568191,EE
-1346568192,1346571199,SE
-1346571200,1346571207,SK
-1346571208,1346571775,SE
-1346571776,1346572287,SE
+1346568192,1346569815,SE
+1346569816,1346569819,ES
+1346569820,1346572287,SE
1346572288,1346576383,DE
-1346576384,1346580479,DK
1346580480,1346584575,RU
1346584576,1346588159,US
-1346588160,1346588671,KR
-1346588672,1346589439,US
+1346588928,1346589439,US
1346589440,1346589695,DE
1346589696,1346592767,US
1346592768,1346596863,ES
1346596864,1346600959,IT
1346605056,1346609151,CH
1346609152,1346617343,FR
-1346617344,1346620415,SE
-1346620416,1346620927,DK
-1346620928,1346621439,SE
+1346617344,1346621439,SE
1346621440,1346625535,RU
1346625536,1346629631,DE
1346629632,1346637823,RU
@@ -45441,40 +15037,7 @@
1346686976,1346691071,GB
1346691072,1346695167,PL
1346695168,1346699263,RU
-1346699264,1346699839,GB
-1346699840,1346699871,HK
-1346699872,1346699875,GB
-1346699876,1346699879,IL
-1346699880,1346699887,US
-1346699888,1346700575,GB
-1346700576,1346700591,VG
-1346700592,1346700607,GB
-1346700608,1346700639,US
-1346700640,1346700847,GB
-1346700848,1346700855,US
-1346700856,1346701183,GB
-1346701184,1346701215,GR
-1346701216,1346703431,GB
-1346703432,1346703435,US
-1346703436,1346703483,GB
-1346703484,1346703487,US
-1346703488,1346703567,GB
-1346703568,1346703571,US
-1346703572,1346703603,GB
-1346703604,1346703607,US
-1346703608,1346703871,GB
-1346703872,1346704127,LI
-1346704128,1346704383,GB
-1346704384,1346704447,US
-1346704448,1346704479,GB
-1346704480,1346704511,US
-1346704512,1346704575,GB
-1346704576,1346704639,US
-1346704640,1346704767,LI
-1346704768,1346704895,US
-1346704896,1346705407,GB
-1346705408,1346705535,US
-1346705536,1346707455,GB
+1346699264,1346707455,GB
1346707456,1346711551,DE
1346711552,1346715647,AZ
1346715648,1346723839,NL
@@ -45484,13 +15047,14 @@
1346740224,1346744319,FI
1346744320,1346748415,RU
1346748416,1346752511,DE
-1346752512,1346753535,FR
-1346753536,1346754047,RE
-1346754048,1346754559,FR
-1346754560,1346754815,RE
-1346754816,1346755071,FR
-1346755072,1346755583,RE
-1346755584,1346756607,FR
+1346752512,1346753023,RE
+1346753024,1346753791,FR
+1346753792,1346754303,RE
+1346754304,1346754559,FR
+1346754560,1346755071,RE
+1346755072,1346755583,FR
+1346755584,1346756095,RE
+1346756096,1346756607,FR
1346756608,1346760703,SE
1346760704,1346764799,IR
1346764800,1346768895,DK
@@ -45502,9 +15066,7 @@
1346793472,1346797567,IT
1346797568,1346801663,IL
1346801664,1346805759,SE
-1346805760,1346806031,DE
-1346806032,1346806047,CH
-1346806048,1346818047,DE
+1346805760,1346818047,DE
1346818048,1346822143,FR
1346822144,1346826239,RU
1346826240,1346830335,RS
@@ -45526,7 +15088,7 @@
1346904064,1346908159,PL
1346908160,1346912255,LI
1346912256,1346920447,BG
-1346920448,1346924543,A2
+1346920448,1346924543,KE
1346924544,1346928639,RU
1346928640,1346932735,DE
1346932736,1346936831,DK
@@ -45540,11 +15102,7 @@
1346969600,1346973695,DE
1346973696,1346977791,SE
1346977792,1346985983,RU
-1346985984,1346986975,DE
-1346986976,1346987007,ES
-1346987008,1346991231,DE
-1346991232,1346991247,CH
-1346991248,1346994175,DE
+1346985984,1346994175,DE
1346994176,1346998271,NL
1346998272,1347002367,ES
1347002368,1347006463,RU
@@ -45567,9 +15125,7 @@
1347092480,1347096575,IR
1347096576,1347100671,SE
1347100672,1347108863,AT
-1347108864,1347111423,GB
-1347111424,1347111455,US
-1347111456,1347112959,GB
+1347108864,1347112959,GB
1347112960,1347117055,RU
1347117056,1347121151,FI
1347121152,1347125247,CH
@@ -45577,23 +15133,11 @@
1347129344,1347133439,FR
1347133440,1347141631,EG
1347141632,1347145727,CH
-1347145728,1347146239,IN
-1347146240,1347146495,CA
-1347146496,1347146751,FR
-1347146752,1347147007,CA
-1347147008,1347147263,DE
+1347145728,1347147263,CA
1347147264,1347147775,GB
-1347147776,1347148287,DE
-1347148288,1347148543,GB
-1347148544,1347148799,CA
-1347148800,1347149055,NO
-1347149056,1347149311,GB
-1347149312,1347149567,DE
-1347149568,1347149823,CA
+1347147776,1347149823,CA
1347149824,1347151423,HU
-1347151424,1347151615,AT
-1347151616,1347153407,HU
-1347153408,1347158015,AT
+1347151424,1347158015,AT
1347158016,1347162111,CH
1347162112,1347166207,IT
1347166208,1347174399,GR
@@ -45604,87 +15148,30 @@
1347194880,1347198975,SE
1347198976,1347203071,QA
1347203072,1347207167,RU
-1347207168,1347210911,GB
-1347210912,1347210919,IE
-1347210920,1347210927,GB
-1347210928,1347210935,IE
-1347210936,1347211111,GB
-1347211112,1347211119,IE
-1347211120,1347215359,GB
+1347207168,1347215359,GB
1347215360,1347223551,RU
-1347223552,1347223807,EG
-1347223808,1347224063,HK
-1347224064,1347224183,US
-1347224184,1347224575,EG
-1347224576,1347224831,US
-1347224832,1347225599,EG
+1347223552,1347225599,GB
1347225600,1347226623,PK
-1347226624,1347227135,EG
-1347227136,1347227391,HK
-1347227392,1347227647,EG
-1347227648,1347228055,DE
-1347228056,1347228063,GR
-1347228064,1347229311,DE
-1347229312,1347229343,AT
-1347229344,1347229895,DE
+1347226624,1347227647,GB
+1347227648,1347229895,DE
1347229896,1347229903,GR
-1347229904,1347230975,DE
-1347230976,1347230983,ES
-1347230984,1347231071,DE
-1347231072,1347231087,AT
-1347231088,1347231095,GR
-1347231096,1347231743,DE
+1347229904,1347231743,DE
1347231744,1347235839,UA
1347235840,1347239935,GE
-1347239936,1347240943,DK
-1347240944,1347240959,GB
-1347240960,1347244031,DK
-1347244032,1347245311,GB
-1347245312,1347245567,US
-1347245568,1347245823,GB
-1347245824,1347246079,US
-1347246080,1347247359,GB
-1347247360,1347247839,RU
-1347247840,1347248127,US
-1347248128,1347248863,SE
-1347248864,1347248864,FI
-1347248865,1347249343,SE
-1347249344,1347249375,FI
-1347249376,1347249631,SE
-1347249632,1347249639,RU
-1347249640,1347250687,SE
-1347250688,1347250691,NO
-1347250692,1347250695,SE
-1347250696,1347250735,NO
-1347250736,1347250767,SE
-1347250768,1347250783,FI
-1347250784,1347252223,SE
-1347252224,1347254559,HU
-1347254560,1347254591,PT
-1347254592,1347254655,LU
-1347254656,1347255903,HU
-1347255904,1347255919,SC
-1347255920,1347256271,HU
-1347256272,1347256287,SC
-1347256288,1347256319,HU
+1347239936,1347244031,DK
+1347244032,1347245055,GB
+1347245056,1347245311,RU
+1347245312,1347248127,GB
+1347248128,1347252223,SE
+1347252224,1347256319,HU
1347256320,1347260415,FO
1347260416,1347264511,MK
1347264512,1347268607,RU
1347268608,1347272703,LB
1347272704,1347276799,MT
-1347276800,1347280031,DE
-1347280032,1347280063,ET
-1347280064,1347280495,DE
-1347280496,1347280511,ET
-1347280512,1347280543,DE
-1347280544,1347280575,MY
-1347280576,1347280895,DE
+1347276800,1347280895,DE
1347280896,1347284991,FR
-1347284992,1347286271,GB
-1347286272,1347286335,BN
-1347286336,1347286527,GB
-1347286528,1347286535,BG
-1347286536,1347289087,GB
+1347284992,1347289087,GB
1347289088,1347293183,FR
1347293184,1347293311,SE
1347293312,1347293312,LR
@@ -45692,20 +15179,20 @@
1347293317,1347293319,LR
1347293320,1347293328,GA
1347293329,1347293335,NG
-1347293336,1347293351,A2
+1347293336,1347293351,SE
1347293352,1347293375,NG
-1347293376,1347293391,A2
+1347293376,1347293391,SE
1347293392,1347293392,CY
1347293393,1347293400,NG
1347293401,1347293407,US
-1347293408,1347293408,A2
+1347293408,1347293408,SE
1347293409,1347293416,NG
1347293417,1347293424,TZ
1347293425,1347293440,GN
1347293441,1347293447,US
1347293448,1347293456,GA
1347293457,1347293464,NG
-1347293465,1347293471,US
+1347293465,1347293471,SE
1347293472,1347293479,IQ
1347293480,1347293487,LR
1347293488,1347293495,TD
@@ -45717,7 +15204,7 @@
1347293537,1347293544,GH
1347293545,1347293552,NG
1347293553,1347293559,ZM
-1347293560,1347293560,A2
+1347293560,1347293560,SE
1347293561,1347293568,GN
1347293569,1347293576,NG
1347293577,1347293584,GN
@@ -45730,19 +15217,23 @@
1347293633,1347293640,LR
1347293641,1347293656,NG
1347293657,1347293672,GN
-1347293673,1347293675,A2
+1347293673,1347293675,SE
1347293676,1347293679,BR
1347293680,1347293680,GN
1347293681,1347293688,US
1347293689,1347293719,NG
-1347293720,1347293723,A2
+1347293720,1347293723,SE
1347293724,1347293724,US
-1347293725,1347293727,A2
+1347293725,1347293727,SE
1347293728,1347293728,GN
-1347293729,1347293744,US
+1347293729,1347293735,US
+1347293736,1347293743,GN
+1347293744,1347293744,US
1347293745,1347293752,GN
1347293753,1347293760,NG
-1347293761,1347293776,ZM
+1347293761,1347293767,ZM
+1347293768,1347293775,CM
+1347293776,1347293776,ZM
1347293777,1347293800,NG
1347293801,1347293807,US
1347293808,1347293816,NG
@@ -45767,7 +15258,7 @@
1347293985,1347293991,US
1347293992,1347294000,NG
1347294001,1347294008,TZ
-1347294009,1347294015,A2
+1347294009,1347294015,SE
1347294016,1347294023,US
1347294024,1347294040,GN
1347294041,1347294048,NG
@@ -45786,13 +15277,12 @@
1347294161,1347294168,GN
1347294169,1347294176,NG
1347294177,1347294184,US
-1347294185,1347294191,A2
+1347294185,1347294191,SE
1347294192,1347294192,KE
-1347294193,1347294208,NG
-1347294209,1347294212,SE
-1347294213,1347294215,A2
+1347294193,1347294207,NG
+1347294208,1347294215,SE
1347294216,1347294223,IQ
-1347294224,1347294224,A2
+1347294224,1347294224,SE
1347294225,1347294232,CM
1347294233,1347294240,US
1347294241,1347294248,LR
@@ -45801,7 +15291,7 @@
1347294265,1347294268,LS
1347294269,1347294271,LR
1347294272,1347294279,BR
-1347294280,1347294280,A2
+1347294280,1347294280,SE
1347294281,1347294288,CM
1347294289,1347294303,UG
1347294304,1347294304,US
@@ -45820,29 +15310,32 @@
1347294402,1347294402,NG
1347294403,1347294408,CM
1347294409,1347294415,GN
-1347294416,1347294424,NG
+1347294416,1347294418,SE
+1347294419,1347294424,NG
1347294425,1347294425,US
1347294426,1347294426,NG
1347294427,1347294432,US
-1347294433,1347294435,A2
-1347294436,1347294440,SE
+1347294433,1347294440,SE
1347294441,1347294447,SO
-1347294448,1347294975,US
+1347294448,1347294463,US
+1347294464,1347294464,SE
+1347294465,1347294496,US
+1347294497,1347294975,SE
1347294976,1347294992,CG
1347294993,1347295008,US
1347295009,1347295015,LR
-1347295016,1347295032,A2
+1347295016,1347295032,SE
1347295033,1347295056,NG
-1347295057,1347295063,A2
-1347295064,1347295072,LS
+1347295057,1347295064,SE
+1347295065,1347295072,LS
1347295073,1347295079,AF
1347295080,1347295103,NG
-1347295104,1347295104,A2
+1347295104,1347295104,SE
1347295105,1347295112,LY
1347295113,1347295120,ZA
1347295121,1347295128,NG
1347295129,1347295132,GN
-1347295133,1347295135,A2
+1347295133,1347295135,SE
1347295136,1347295144,FR
1347295145,1347295152,NG
1347295153,1347295159,US
@@ -45850,103 +15343,71 @@
1347295161,1347295168,GN
1347295169,1347295184,LS
1347295185,1347295192,SO
-1347295193,1347295199,A2
+1347295193,1347295199,SE
1347295200,1347295216,ZM
1347295217,1347295223,US
1347295224,1347295224,AO
1347295225,1347295232,NG
-1347295233,1347295744,A2
+1347295233,1347295744,SE
1347295745,1347295745,US
-1347295746,1347295747,A2
-1347295748,1347295752,US
+1347295746,1347295748,SE
+1347295749,1347295752,US
1347295753,1347295755,BW
-1347295756,1347295759,A2
+1347295756,1347295759,SE
1347295760,1347295775,BW
1347295776,1347295776,IQ
1347295777,1347295784,HU
1347295785,1347295791,LB
-1347295792,1347295816,A2
+1347295792,1347295816,SE
1347295817,1347295824,OM
1347295825,1347295832,GH
1347295833,1347295840,FR
1347295841,1347295848,NG
1347295849,1347295852,LS
-1347295853,1347295856,A2
+1347295853,1347295856,SE
1347295857,1347295864,NG
-1347295865,1347295927,A2
-1347295928,1347295936,NG
+1347295865,1347295928,SE
+1347295929,1347295936,NG
1347295937,1347295976,US
1347295977,1347295984,LS
1347295985,1347295992,US
-1347295993,1347295999,A2
-1347296000,1347296080,US
-1347296081,1347296088,SE
-1347296089,1347296112,US
+1347295993,1347295999,SE
+1347296000,1347296007,US
+1347296008,1347296008,SE
+1347296009,1347296032,US
+1347296033,1347296040,SE
+1347296041,1347296044,US
+1347296045,1347296056,SE
+1347296057,1347296080,US
+1347296081,1347296104,SE
+1347296105,1347296112,US
1347296113,1347296128,ZM
-1347296129,1347296232,US
+1347296129,1347296136,SE
+1347296137,1347296144,US
+1347296145,1347296160,SE
+1347296161,1347296168,US
+1347296169,1347296176,SE
+1347296177,1347296184,US
+1347296185,1347296192,SE
+1347296193,1347296200,US
+1347296201,1347296224,SE
+1347296225,1347296232,US
1347296233,1347296240,JO
-1347296241,1347296255,US
-1347296256,1347296264,A2
+1347296241,1347296264,SE
1347296265,1347296272,US
-1347296273,1347296775,A2
-1347296776,1347296783,NG
-1347296784,1347296799,US
-1347296800,1347296807,LR
-1347296808,1347296823,GN
-1347296824,1347296831,NG
-1347296832,1347296847,A2
-1347296848,1347296859,GN
-1347296860,1347296863,A2
-1347296864,1347296871,GN
-1347296872,1347296879,NG
-1347296880,1347296887,GN
-1347296888,1347296895,A2
-1347296896,1347296903,GN
-1347296904,1347296911,A2
-1347296912,1347296943,GN
-1347296944,1347296967,A2
-1347296968,1347296975,NG
-1347296976,1347296983,A2
-1347296984,1347296991,US
-1347296992,1347297007,NG
-1347297008,1347297015,US
-1347297016,1347297031,A2
-1347297032,1347297039,GA
-1347297040,1347297047,GN
-1347297048,1347297055,CM
-1347297056,1347297071,GH
+1347296273,1347297071,SE
1347297072,1347297079,US
-1347297080,1347297103,A2
-1347297104,1347297119,CG
-1347297120,1347297127,GH
-1347297128,1347297151,A2
+1347297080,1347297151,SE
1347297152,1347297159,SL
-1347297160,1347297167,GN
-1347297168,1347297175,SL
-1347297176,1347297183,A2
-1347297184,1347297191,US
-1347297192,1347297223,A2
-1347297224,1347297231,NE
-1347297232,1347297247,A2
-1347297248,1347297255,CM
-1347297256,1347297279,A2
+1347297160,1347297279,SE
1347297280,1347305471,UA
1347305472,1347309567,AL
-1347309568,1347309839,DE
-1347309840,1347309855,CH
-1347309856,1347313663,DE
+1347309568,1347313663,DE
1347313664,1347321855,RU
1347321856,1347322111,KW
1347322112,1347322367,US
-1347322368,1347322623,KW
-1347322624,1347322879,US
-1347322880,1347324927,KW
-1347324928,1347325439,US
-1347325440,1347325695,KW
-1347325696,1347325951,IQ
-1347325952,1347327231,CZ
-1347327232,1347327487,SK
-1347327488,1347327743,CZ
+1347322368,1347325951,KW
+1347325952,1347327743,CZ
1347327744,1347327999,SK
1347328000,1347330047,CZ
1347330048,1347338239,DE
@@ -45959,48 +15420,28 @@
1347362816,1347366911,NL
1347366912,1347371007,IT
1347371008,1347375103,RU
-1347375104,1347375359,EU
-1347375360,1347375615,GB
-1347375616,1347375871,EU
-1347375872,1347379199,GB
+1347375104,1347379199,GB
1347379200,1347383295,NL
-1347383296,1347384111,EE
-1347384112,1347384115,FI
-1347384116,1347385599,EE
-1347385600,1347385855,FR
-1347385856,1347386751,EE
-1347386752,1347386815,MY
-1347386816,1347387011,EE
+1347383296,1347387011,EE
1347387012,1347387015,DE
1347387016,1347387391,EE
1347387392,1347391487,GB
-1347391488,1347395583,LB
+1347391488,1347393535,IQ
+1347393536,1347395583,LB
1347395584,1347399679,SE
1347399680,1347403775,RU
1347403776,1347407871,NL
1347407872,1347411967,GB
1347411968,1347416063,DE
1347416064,1347420159,RU
-1347420160,1347421263,DK
-1347421264,1347421279,DE
-1347421280,1347425791,DK
-1347425792,1347426047,EU
-1347426048,1347427135,DK
-1347427136,1347427327,NO
-1347427328,1347428351,DK
+1347420160,1347428351,DK
1347428352,1347432447,BA
1347432448,1347436543,HR
1347436544,1347440639,SE
1347440640,1347444735,ES
1347444736,1347452927,RU
-1347452928,1347455930,BG
-1347455931,1347455931,BG
-1347455932,1347461119,BG
-1347461120,1347462579,AL
-1347462580,1347462583,RS
-1347462584,1347462591,AL
-1347462592,1347462607,RS
-1347462608,1347465215,AL
+1347452928,1347461119,BG
+1347461120,1347465215,AL
1347465216,1347469311,GB
1347469312,1347473407,RU
1347473408,1347477503,UZ
@@ -46008,32 +15449,18 @@
1347481600,1347485695,AT
1347485696,1347493887,DE
1347493888,1347502079,LV
-1347502080,1347503103,ES
-1347503104,1347503359,GB
-1347503360,1347504383,ES
-1347504384,1347504639,GB
-1347504640,1347504959,ES
-1347504960,1347505023,GB
-1347505024,1347505151,ES
-1347505152,1347505407,GB
-1347505408,1347505663,DE
-1347505664,1347506175,ES
-1347506176,1347506431,GB
-1347506432,1347518463,ES
+1347502080,1347505159,ES
+1347505160,1347505167,GB
+1347505168,1347505215,ES
+1347505216,1347505247,GB
+1347505248,1347518463,ES
1347518464,1347522559,AT
1347522560,1347526655,LB
-1347526656,1347527967,FI
-1347527968,1347527999,SE
-1347528000,1347534847,FI
+1347526656,1347534847,FI
1347534848,1347538943,DE
1347538944,1347543039,RU
-1347543040,1347544063,SK
-1347544064,1347544319,SL
-1347544320,1347547135,SK
-1347547136,1347550303,DE
-1347550304,1347550335,AT
-1347550336,1347551167,DE
-1347551168,1347551231,PL
+1347543040,1347547135,SK
+1347547136,1347551231,DE
1347551232,1347555327,IT
1347555328,1347559423,PL
1347559424,1347567615,RU
@@ -46041,11 +15468,10 @@
1347571712,1347575807,RU
1347575808,1347579903,DK
1347579904,1347588095,GB
-1347588096,1347590911,CZ
-1347590912,1347591167,SK
-1347591168,1347592191,CZ
+1347588096,1347592191,CZ
1347592192,1347600383,RU
-1347600384,1347602431,UA
+1347600384,1347601407,CZ
+1347601408,1347602431,UA
1347602432,1347608575,DE
1347608576,1347612671,FR
1347612672,1347616767,GB
@@ -46054,65 +15480,41 @@
1347624960,1347633151,CH
1347633152,1347637247,CZ
1347637248,1347641343,SE
-1347641344,1347646194,DE
-1347646195,1347646207,TR
-1347646208,1347649535,DE
+1347641344,1347649535,DE
1347649536,1347653631,GE
-1347653632,1347654615,GB
-1347654616,1347654623,EG
-1347654624,1347657727,GB
+1347653632,1347657727,GB
1347657728,1347661823,IT
1347661824,1347665919,DE
1347665920,1347670015,RU
1347670016,1347674111,SE
1347674112,1347682303,RU
1347682304,1347686399,DE
-1347686400,1347688703,EU
-1347688704,1347688735,BE
-1347688736,1347688743,EU
-1347688744,1347688751,ET
-1347688752,1347688767,SN
-1347688768,1347688959,EU
-1347688960,1347689343,BE
-1347689344,1347690495,EU
1347690496,1347694591,SE
1347694592,1347706879,GB
1347706880,1347710975,IT
1347710976,1347715071,RU
-1347715072,1347723263,ES
+1347715072,1347716351,ES
+1347716352,1347716607,BG
+1347716608,1347718143,ES
+1347718144,1347718399,US
+1347718400,1347723263,ES
1347723264,1347727359,GB
1347727360,1347731455,UA
1347731456,1347739647,DE
1347739648,1347747839,NL
1347747840,1347751935,DE
-1347751936,1347754751,CY
-1347754752,1347754775,GR
-1347754776,1347754791,CY
-1347754792,1347754887,GR
-1347754888,1347754888,CY
-1347754889,1347754894,GR
-1347754895,1347754895,CY
-1347754896,1347754919,GR
-1347754920,1347754927,CY
-1347754928,1347754935,GR
-1347754936,1347754943,RS
-1347754944,1347754951,CY
-1347754952,1347754959,TN
-1347754960,1347754967,CY
-1347754968,1347754983,GR
-1347754984,1347754991,CY
-1347754992,1347755112,GR
-1347755113,1347755119,CY
-1347755120,1347755191,GR
-1347755192,1347755223,CY
-1347755224,1347755231,GR
-1347755232,1347755239,CY
-1347755240,1347755247,GR
-1347755248,1347755263,CY
-1347755264,1347755775,GR
-1347755776,1347756031,CY
+1347751936,1347754903,CY
+1347754904,1347754911,GR
+1347754912,1347755015,CY
+1347755016,1347755023,GR
+1347755024,1347755135,CY
+1347755136,1347755151,GR
+1347755152,1347755159,CY
+1347755160,1347755175,GR
+1347755176,1347756031,CY
1347756032,1347760127,NL
-1347760128,1347764223,HU
+1347760128,1347762175,CZ
+1347762176,1347764223,HU
1347764224,1347772415,GB
1347772416,1347776511,MT
1347776512,1347780607,SE
@@ -46126,368 +15528,17 @@
1347809280,1347813375,RU
1347813376,1347817471,DE
1347817472,1347821567,IT
-1347821568,1347822343,GB
-1347822344,1347822351,NL
-1347822352,1347825663,GB
+1347821568,1347825663,GB
1347825664,1347829759,IT
1347829760,1347833855,SE
-1347833856,1347833953,DE
-1347833954,1347833954,TR
-1347833955,1347833958,DE
-1347833959,1347833960,TR
-1347833961,1347833961,DE
-1347833962,1347833962,TR
-1347833963,1347833963,DE
-1347833964,1347833964,TR
-1347833965,1347833965,US
-1347833966,1347833966,TR
-1347833967,1347834002,DE
-1347834003,1347834003,TR
-1347834004,1347834004,US
-1347834005,1347834006,DE
-1347834007,1347834012,US
-1347834013,1347834066,DE
-1347834067,1347834068,BR
-1347834069,1347834070,DE
-1347834071,1347834072,US
-1347834073,1347834073,DE
-1347834074,1347834074,PK
-1347834075,1347834078,US
-1347834079,1347835651,DE
-1347835652,1347835653,RU
-1347835654,1347835781,DE
-1347835782,1347835782,PK
-1347835783,1347835784,DE
-1347835785,1347835785,TR
-1347835786,1347835790,DE
-1347835791,1347835791,GB
-1347835792,1347835794,US
-1347835795,1347835795,DE
-1347835796,1347835796,GB
-1347835797,1347835798,DE
-1347835799,1347835799,IN
-1347835800,1347835803,UG
-1347835804,1347835804,IN
-1347835805,1347835811,DE
-1347835812,1347835812,RU
-1347835813,1347835813,ZA
-1347835814,1347835815,DE
-1347835816,1347835816,TR
-1347835817,1347835817,DE
-1347835818,1347835818,AR
-1347835819,1347835819,DE
-1347835820,1347835820,US
-1347835821,1347835821,ES
-1347835822,1347835822,DE
-1347835823,1347835823,GB
-1347835824,1347835824,TR
-1347835825,1347835825,DE
-1347835826,1347835826,UA
-1347835827,1347835827,DE
-1347835828,1347835828,PL
-1347835829,1347835829,BE
-1347835830,1347835830,TR
-1347835831,1347835831,LT
-1347835832,1347835832,DE
-1347835833,1347835833,TR
-1347835834,1347835848,DE
-1347835849,1347835849,AQ
-1347835850,1347835850,IN
-1347835851,1347835851,AQ
-1347835852,1347835863,DE
-1347835864,1347835865,VE
-1347835866,1347835866,GR
-1347835867,1347835867,DE
-1347835868,1347835868,TR
-1347835869,1347835869,VE
-1347835870,1347835870,GR
-1347835871,1347835872,DE
-1347835873,1347835873,KW
-1347835874,1347835874,AR
-1347835875,1347835880,DE
-1347835881,1347835881,TR
-1347835882,1347835892,DE
-1347835893,1347835893,BD
-1347835894,1347835894,DE
-1347835895,1347835895,ES
-1347835896,1347835896,AT
-1347835897,1347835897,DE
-1347835898,1347835898,VN
-1347835899,1347835899,CA
-1347835900,1347835975,DE
-1347835976,1347835976,PK
-1347835977,1347835978,DE
-1347835979,1347835980,PK
-1347835981,1347835982,DE
-1347835983,1347835984,RU
-1347835985,1347835985,PL
-1347835986,1347835986,DE
-1347835987,1347835987,US
-1347835988,1347835994,DE
-1347835995,1347835995,BD
-1347835996,1347835997,DE
-1347835998,1347835998,MD
-1347835999,1347836000,LT
-1347836001,1347836002,DE
-1347836003,1347836003,DK
-1347836004,1347836004,BG
-1347836005,1347836005,LI
-1347836006,1347836007,DE
-1347836008,1347836008,US
-1347836009,1347836009,DE
-1347836010,1347836010,US
-1347836011,1347836012,PK
-1347836013,1347836014,DE
-1347836015,1347836015,MX
-1347836016,1347836016,PK
-1347836017,1347836017,RO
-1347836018,1347836018,PT
-1347836019,1347836019,EC
-1347836020,1347836020,IN
-1347836021,1347836021,LT
-1347836022,1347836022,DE
-1347836023,1347836024,MD
-1347836025,1347836026,DE
-1347836027,1347836027,MD
-1347836028,1347836029,LT
-1347836030,1347836030,IN
-1347836031,1347836033,DE
-1347836034,1347836034,IN
-1347836035,1347836035,LT
-1347836036,1347836036,DE
-1347836037,1347836038,UG
-1347836039,1347836040,DE
-1347836041,1347836041,IT
-1347836042,1347836044,BR
-1347836045,1347836047,TR
-1347836048,1347836049,DE
-1347836050,1347836050,GR
-1347836051,1347836051,DE
-1347836052,1347836052,PL
-1347836053,1347836053,UG
-1347836054,1347836056,DE
-1347836057,1347836057,NO
-1347836058,1347836061,DE
-1347836062,1347836062,NO
-1347836063,1347836063,LT
-1347836064,1347836066,DE
-1347836067,1347836067,PK
-1347836068,1347836070,IN
-1347836071,1347836071,BD
-1347836072,1347836072,AF
-1347836073,1347836073,BD
-1347836074,1347836074,GR
-1347836075,1347836075,AT
-1347836076,1347836081,DE
-1347836082,1347836082,LK
-1347836083,1347836083,DE
-1347836084,1347836084,NL
-1347836085,1347836087,DE
-1347836088,1347836088,BA
-1347836089,1347836089,IL
-1347836090,1347836091,DE
-1347836092,1347836092,IT
-1347836093,1347836211,DE
-1347836212,1347836212,US
-1347836213,1347836218,DE
-1347836219,1347836219,US
-1347836220,1347836294,DE
-1347836295,1347836295,IN
-1347836296,1347836296,GR
-1347836297,1347836300,DE
-1347836301,1347836301,US
-1347836302,1347836302,DE
-1347836303,1347836309,US
-1347836310,1347836310,FI
-1347836311,1347836311,PK
-1347836312,1347836312,IL
-1347836313,1347836313,US
-1347836314,1347836314,DE
-1347836315,1347836315,US
-1347836316,1347836338,DE
-1347836339,1347836339,IN
-1347836340,1347836340,DE
-1347836341,1347836341,UG
-1347836342,1347836344,DE
-1347836345,1347836345,MA
-1347836346,1347836346,DE
-1347836347,1347836347,MA
-1347836348,1347836547,DE
-1347836548,1347836549,CY
-1347836550,1347836551,DE
-1347836552,1347836555,TR
-1347836556,1347836556,US
-1347836557,1347836575,DE
-1347836576,1347836576,BE
-1347836577,1347836578,DE
-1347836579,1347836580,EE
-1347836581,1347836581,MA
-1347836582,1347836583,DE
-1347836584,1347836584,RU
-1347836585,1347836585,DE
-1347836586,1347836588,UA
-1347836589,1347836591,DE
-1347836592,1347836592,PK
-1347836593,1347836593,BO
-1347836594,1347836594,RU
-1347836595,1347836595,MD
-1347836596,1347836597,DE
-1347836598,1347836599,PL
-1347836600,1347836602,DE
-1347836603,1347836603,GR
-1347836604,1347836604,CO
-1347836605,1347836605,DE
-1347836606,1347836606,TR
-1347836607,1347836607,MT
-1347836608,1347837511,DE
-1347837512,1347837512,IL
-1347837513,1347837515,DE
-1347837516,1347837517,UG
-1347837518,1347837518,DE
-1347837519,1347837519,US
-1347837520,1347837523,DE
-1347837524,1347837525,BR
-1347837526,1347837526,DE
-1347837527,1347837528,US
-1347837529,1347837538,DE
-1347837539,1347837542,BR
-1347837543,1347837543,US
-1347837544,1347837548,BR
-1347837549,1347837555,DE
-1347837556,1347837556,IN
-1347837557,1347837557,UG
-1347837558,1347837558,IN
-1347837559,1347837559,GB
-1347837560,1347837566,IN
-1347837567,1347837573,DE
-1347837574,1347837574,PK
-1347837575,1347837580,DE
-1347837581,1347837581,BR
-1347837582,1347837582,TR
-1347837583,1347837583,US
-1347837584,1347837591,DE
-1347837592,1347837592,HU
-1347837593,1347837593,TR
-1347837594,1347837595,RU
-1347837596,1347837598,FI
-1347837599,1347837600,DO
-1347837601,1347837603,DE
-1347837604,1347837604,CH
-1347837605,1347837605,IN
-1347837606,1347837608,TR
-1347837609,1347837610,DE
-1347837611,1347837616,LT
-1347837617,1347837619,IN
-1347837620,1347837620,NL
-1347837621,1347837621,IN
-1347837622,1347837623,DE
-1347837624,1347837626,IN
-1347837627,1347837629,RU
-1347837630,1347837630,AE
-1347837631,1347837631,GB
-1347837632,1347837633,DE
-1347837634,1347837634,NL
-1347837635,1347837635,BD
-1347837636,1347837637,DE
-1347837638,1347837638,PK
-1347837639,1347837641,DE
-1347837642,1347837642,IT
-1347837643,1347837643,GR
-1347837644,1347837644,AE
-1347837645,1347837645,RU
-1347837646,1347837647,IN
-1347837648,1347837648,RU
-1347837649,1347837649,PT
-1347837650,1347837650,DE
-1347837651,1347837651,IT
-1347837652,1347837652,DE
-1347837653,1347837655,RU
-1347837656,1347837660,DE
-1347837661,1347837661,AE
-1347837662,1347837666,DE
-1347837667,1347837667,US
-1347837668,1347837668,PK
-1347837669,1347837951,DE
+1347833856,1347837951,DE
1347837952,1347846143,RO
1347846144,1347850239,NO
1347850240,1347854335,IT
-1347854336,1347854591,DE
-1347854592,1347854599,EU
-1347854600,1347854607,DE
-1347854608,1347854623,EU
-1347854624,1347854639,DE
-1347854640,1347854655,EU
-1347854656,1347854791,DE
-1347854792,1347854815,EU
-1347854816,1347854831,DE
-1347854832,1347854847,EU
-1347854848,1347854871,DE
-1347854872,1347854879,EU
-1347854880,1347854887,DE
-1347854888,1347854911,EU
-1347854912,1347855071,DE
-1347855072,1347855079,EU
-1347855080,1347855103,DE
-1347855104,1347855359,CH
-1347855360,1347856127,DE
-1347856128,1347856191,EU
-1347856192,1347856239,DE
-1347856240,1347856255,EU
-1347856256,1347856383,DE
-1347856384,1347856399,EU
-1347856400,1347856423,DE
-1347856424,1347856447,EU
-1347856448,1347856591,DE
-1347856592,1347856607,EU
-1347856608,1347856639,DE
-1347856640,1347856895,AT
-1347856896,1347858495,DE
-1347858496,1347858503,EU
-1347858504,1347858527,DE
-1347858528,1347858559,EU
-1347858560,1347858575,DE
-1347858576,1347858623,EU
-1347858624,1347858631,DE
-1347858632,1347858639,EU
-1347858640,1347859335,DE
-1347859336,1347859343,EU
-1347859344,1347859351,DE
-1347859352,1347859359,EU
-1347859360,1347859383,DE
-1347859384,1347859391,EU
-1347859392,1347859423,DE
-1347859424,1347859455,EU
-1347859456,1347860863,DE
-1347860864,1347860879,EU
-1347860880,1347860895,DE
-1347860896,1347860911,EU
-1347860912,1347860927,DE
-1347860928,1347860943,EU
-1347860944,1347861383,DE
-1347861384,1347861391,EU
-1347861392,1347861395,DE
-1347861396,1347861399,EU
-1347861400,1347861471,DE
-1347861472,1347861503,EU
-1347861504,1347861759,DE
-1347861760,1347861799,EU
-1347861800,1347861823,DE
-1347861824,1347861943,EU
-1347861944,1347861951,DE
-1347861952,1347862007,EU
-1347862008,1347862015,CH
-1347862016,1347862089,EU
+1347854336,1347854847,DE
+1347857408,1347858431,DE
1347862090,1347862090,DE
-1347862091,1347862111,EU
-1347862112,1347862143,DE
-1347862144,1347862279,EU
-1347862280,1347862287,DE
-1347862288,1347862303,EU
-1347862304,1347862431,DE
-1347862432,1347862463,EU
-1347862464,1347862471,DE
-1347862472,1347862479,EU
-1347862480,1347862527,DE
+1347862272,1347862527,DE
1347862528,1347866623,CH
1347866624,1347870719,NO
1347870720,1347874815,AM
@@ -46495,23 +15546,19 @@
1347878400,1347878911,SK
1347878912,1347887103,GB
1347887104,1347891199,PL
-1347891200,1347895287,SE
-1347895288,1347895295,GB
+1347891200,1347895295,SE
1347895296,1347903487,GH
1347903488,1347907583,RU
1347907584,1347911679,DE
1347911680,1347915775,GB
1347915776,1347919871,RU
-1347919872,1347922303,DE
-1347922304,1347922319,NL
-1347922320,1347922475,DE
-1347922476,1347922476,NL
-1347922477,1347923967,DE
+1347919872,1347923967,DE
1347923968,1347928063,CZ
1347928064,1347932159,RU
1347932160,1347936255,SK
1347936256,1347940351,FR
1347940352,1347944447,BA
+1347945472,1347946495,NG
1347947520,1347948543,DZ
1347948544,1347952639,DE
1347952640,1347956735,BE
@@ -46519,99 +15566,12 @@
1347960832,1347964927,DE
1347964928,1347969023,IT
1347969024,1347977215,SE
-1347977216,1347978007,A2
-1347978008,1347978015,NG
-1347978016,1347978031,A2
-1347978032,1347978039,NG
-1347978040,1347978191,A2
-1347978192,1347978199,NG
-1347978200,1347978263,A2
-1347978264,1347978271,NG
-1347978272,1347978319,A2
-1347978320,1347978327,NG
-1347978328,1347978351,A2
-1347978352,1347978359,NG
-1347978360,1347978375,A2
-1347978376,1347978407,NG
-1347978408,1347978447,A2
-1347978448,1347978463,NG
-1347978464,1347978631,A2
-1347978632,1347978647,NG
-1347978648,1347978727,A2
-1347978728,1347978735,NG
-1347978736,1347978847,A2
-1347978848,1347978855,NG
-1347978856,1347978935,A2
-1347978936,1347978943,NG
-1347978944,1347979055,A2
-1347979056,1347979071,NG
-1347979072,1347979135,A2
-1347979136,1347979143,NG
-1347979144,1347979159,A2
-1347979160,1347979167,NG
-1347979168,1347979231,A2
-1347979232,1347979247,NG
-1347979248,1347979375,A2
-1347979376,1347979399,NG
-1347979400,1347979583,A2
-1347979584,1347979591,NG
-1347979592,1347979743,A2
-1347979744,1347979751,NG
-1347979752,1347980111,A2
-1347980112,1347980127,GN
-1347980128,1347980271,A2
-1347980272,1347980279,DK
-1347980280,1347981007,A2
-1347981008,1347981015,NG
-1347981016,1347981023,A2
-1347981024,1347981031,NG
-1347981032,1347981255,A2
-1347981256,1347981263,DK
-1347981264,1347981927,A2
-1347981928,1347981935,NG
-1347981936,1347982031,A2
-1347982032,1347982055,NG
-1347982056,1347982279,A2
-1347982280,1347982287,NG
-1347982288,1347982927,A2
-1347982928,1347982943,NG
-1347982944,1347983063,A2
-1347983064,1347983071,NG
-1347983072,1347983247,A2
-1347983248,1347983263,DK
-1347983264,1347983303,A2
-1347983304,1347983311,NG
-1347983312,1347983399,A2
-1347983400,1347983407,A2
-1347983408,1347983903,A2
-1347983904,1347983911,NG
-1347983912,1347983919,A2
-1347983920,1347983927,NG
-1347983928,1347983983,A2
-1347983984,1347984127,NG
-1347984128,1347984207,A2
-1347984208,1347984215,NG
-1347984216,1347984415,A2
-1347984416,1347984423,NG
-1347984424,1347984719,A2
-1347984720,1347984727,NG
-1347984728,1347984879,A2
-1347984880,1347984895,NG
-1347984896,1347984959,A2
-1347984960,1347984991,NG
-1347984992,1347985031,A2
-1347985032,1347985039,NG
-1347985040,1347985103,A2
-1347985104,1347985119,NG
-1347985120,1347985151,A2
-1347985152,1347985407,DK
+1347977216,1347985407,DK
1347985408,1347989503,IT
1347989504,1347993599,FI
1347993600,1348001791,GB
1348001792,1348005887,ES
-1348005888,1348009215,BH
-1348009216,1348009471,US
-1348009472,1348009983,BH
+1348005888,1348009983,BH
1348009984,1348014079,RU
1348014080,1348018175,DK
1348018176,1348026367,NO
@@ -46627,9 +15587,7 @@
1348063232,1348067327,CH
1348067328,1348071423,NL
1348071424,1348075519,DE
-1348075520,1348076287,LV
-1348076288,1348076543,RU
-1348076544,1348083711,LV
+1348075520,1348083711,LV
1348083712,1348091903,LU
1348091904,1348095999,RU
1348096000,1348100095,AL
@@ -46640,7 +15598,8 @@
1348116480,1348120575,JO
1348120576,1348124671,RU
1348124672,1348128767,GB
-1348128768,1348132351,SI
+1348128768,1348129791,BE
+1348129792,1348132351,SI
1348132352,1348132863,BE
1348132864,1348136959,UA
1348136960,1348141055,RU
@@ -46656,56 +15615,27 @@
1348177920,1348182015,BE
1348182016,1348190207,UA
1348190208,1348194303,RU
-1348194304,1348194815,GR
-1348194816,1348195071,US
-1348195072,1348198399,GR
+1348194304,1348198399,GR
1348198400,1348202495,NO
-1348202496,1348206591,EU
1348206592,1348218879,RU
-1348218880,1348219295,DE
-1348219296,1348219327,A2
-1348219328,1348219343,DE
-1348219344,1348219359,ZM
-1348219360,1348219647,DE
-1348219648,1348220159,US
-1348220160,1348220687,DE
-1348220688,1348220703,SA
-1348220704,1348220927,DE
-1348220928,1348221183,US
-1348221184,1348222975,DE
+1348218880,1348222975,DE
1348222976,1348231167,LU
1348231168,1348235263,RU
1348235264,1348239359,AT
1348239360,1348241407,SE
-1348241408,1348242431,NO
-1348242432,1348242943,GB
-1348242944,1348243455,SE
+1348241408,1348242431,GB
+1348242432,1348243455,SE
1348243456,1348247551,GB
1348247552,1348251647,RU
1348251648,1348255743,GE
1348255744,1348263935,RU
1348263936,1348268031,UA
1348268032,1348272127,CZ
-1348272128,1348274695,IE
-1348274696,1348274791,CH
-1348274792,1348274799,IE
-1348274800,1348274815,IL
-1348274816,1348274911,IE
-1348274912,1348274919,CH
-1348274920,1348274927,IE
-1348274928,1348274935,IL
-1348274936,1348275199,CH
-1348275200,1348275711,GB
-1348275712,1348275967,CH
-1348275968,1348280319,IE
+1348272128,1348280319,IE
1348280320,1348284415,AT
1348284416,1348288511,RU
1348288512,1348292607,IT
-1348292608,1348294689,FR
-1348294690,1348294690,GB
-1348294691,1348296556,FR
-1348296557,1348296557,GB
-1348296558,1348296703,FR
+1348292608,1348296703,FR
1348296704,1348300799,RU
1348300800,1348304895,UA
1348304896,1348308991,IT
@@ -46722,12 +15652,8 @@
1348354048,1348358143,NL
1348358144,1348362239,DE
1348362240,1348366335,MC
-1348366336,1348368227,IT
-1348368228,1348368228,A2
-1348368229,1348368895,IT
-1348368896,1348369151,A2
-1348369152,1348370431,IT
-1348370432,1348374527,CZ
+1348366336,1348370431,IT
+1348370432,1348374527,DE
1348374528,1348378623,CH
1348378624,1348382719,BY
1348382720,1348386815,FR
@@ -46741,14 +15667,7 @@
1348419584,1348427775,HU
1348427776,1348435967,CZ
1348435968,1348440063,FI
-1348440064,1348440319,DE
-1348440320,1348440831,NL
-1348440832,1348441215,DE
-1348441216,1348441343,NL
-1348441344,1348441855,DE
-1348441856,1348442111,NL
-1348442112,1348443775,DE
-1348443776,1348448255,NL
+1348440064,1348448255,NL
1348448256,1348456447,GB
1348456448,1348460543,BH
1348460544,1348464639,SI
@@ -46763,405 +15682,57 @@
1349124096,1349255167,GR
1349255168,1349451775,AT
1349451776,1349517311,IE
-1349517312,1349584543,NL
-1349584544,1349584551,GB
-1349584552,1349763071,NL
+1349517312,1349763071,NL
1349763072,1349771263,RU
1349771264,1349779455,NL
1349779456,1349910527,IT
1349910528,1350041599,FR
-1350041600,1350057215,AT
-1350057216,1350057343,AG
-1350057344,1350091991,AT
-1350091992,1350091999,SA
-1350092000,1350092287,AT
-1350092288,1350092543,A2
-1350092544,1350215167,AT
-1350215168,1350215191,IQ
-1350215192,1350215679,AT
+1350041600,1350215679,AT
1350215680,1350215935,IQ
-1350215936,1350216959,A2
+1350215936,1350216959,AT
1350216960,1350217215,IQ
-1350217216,1350217471,A2
+1350217216,1350217471,AT
1350217472,1350217727,IQ
-1350217728,1350220287,AT
-1350220288,1350220543,DE
-1350220544,1350295823,AT
-1350295824,1350295831,SA
-1350295832,1350295847,AT
-1350295848,1350295855,SA
-1350295856,1350296063,AT
-1350296064,1350296319,A2
-1350296320,1350296327,AT
-1350296328,1350296343,A2
-1350296344,1350296351,AT
-1350296352,1350296359,A2
-1350296360,1350296367,AT
-1350296368,1350296387,A2
-1350296388,1350296391,AT
-1350296392,1350296395,A2
-1350296396,1350296399,AT
-1350296400,1350296439,A2
-1350296440,1350296511,AT
-1350296512,1350296519,A2
-1350296520,1350296539,AT
-1350296540,1350296543,A2
-1350296544,1350303743,AT
+1350217728,1350303743,AT
1350303744,1350434815,FR
1350434816,1350565887,NL
-1350565888,1351793791,DE
-1351793792,1351793855,GB
-1351793856,1351801327,DE
-1351801328,1351801335,HU
-1351801336,1351806975,DE
-1351806976,1351807231,IT
-1351807232,1351879999,DE
-1351880000,1351880031,IT
-1351880032,1351965183,DE
-1351965184,1351965439,US
-1351965440,1351968511,DE
-1351968512,1351968767,CH
-1351968768,1351998679,DE
-1351998680,1351998687,TH
-1351998688,1352002047,DE
-1352002048,1352002303,US
-1352002304,1352010239,DE
-1352010240,1352010495,US
-1352010496,1352031618,DE
-1352031619,1352031619,EU
-1352031620,1352038695,DE
-1352038696,1352038699,US
-1352038700,1352041471,DE
-1352041472,1352041727,US
-1352041728,1352043959,DE
-1352043960,1352043967,A2
-1352043968,1352062455,DE
-1352062456,1352062463,CH
-1352062464,1352069631,DE
-1352069632,1352069759,US
-1352069760,1352069799,DE
-1352069800,1352069887,US
-1352069888,1352139671,DE
-1352139672,1352139679,IT
-1352139680,1352141311,DE
-1352141312,1352141567,NL
-1352141568,1352147007,DE
-1352147008,1352147015,SE
-1352147016,1352147107,DE
-1352147108,1352147111,SE
-1352147112,1352147263,DE
-1352147264,1352147271,ES
-1352147272,1352147391,DE
-1352147392,1352147399,CZ
-1352147400,1352147423,DE
-1352147424,1352147431,ES
-1352147432,1352147439,DE
-1352147440,1352147447,SZ
-1352147448,1352148151,DE
-1352148152,1352148159,IT
-1352148160,1352148751,DE
-1352148752,1352148759,US
-1352148760,1352149415,DE
-1352149416,1352149423,FI
-1352149424,1352149427,DE
-1352149428,1352149451,FR
-1352149452,1352149455,DE
-1352149456,1352149487,FR
-1352149488,1352149743,DE
-1352149744,1352149751,AT
-1352149752,1352149783,DE
-1352149784,1352149791,SE
-1352149792,1352149807,DE
-1352149808,1352149823,SE
-1352149824,1352149855,DE
-1352149856,1352149871,SE
-1352149872,1352150359,DE
-1352150360,1352150367,ES
-1352150368,1352150695,DE
-1352150696,1352150703,ES
-1352150704,1352150711,DE
-1352150712,1352150719,TR
-1352150720,1352150727,HU
-1352150728,1352150743,ES
-1352150744,1352293471,DE
-1352293472,1352293479,GB
-1352293480,1352294911,DE
-1352294912,1352295167,EU
-1352295168,1352299775,DE
+1350565888,1352299775,DE
1352299776,1352300031,US
-1352300032,1352404599,DE
-1352404600,1352404607,NL
-1352404608,1352405503,DE
-1352405504,1352405759,US
-1352405760,1352412159,DE
+1352300032,1352412159,DE
1352412160,1352412415,FR
-1352412416,1352445695,DE
-1352445696,1352445703,NL
-1352445704,1352663039,DE
+1352412416,1352412799,DE
+1352412800,1352412863,GB
+1352412864,1352417279,DE
+1352417280,1352418303,SK
+1352418304,1352663039,DE
1352663040,1353187327,DK
-1353187328,1353252991,GB
-1353252992,1353253023,FR
-1353253024,1353253663,GB
-1353253664,1353253671,NL
-1353253672,1353253791,GB
-1353253792,1353253823,FR
-1353253824,1353255071,GB
-1353255072,1353255087,CA
-1353255088,1353255839,GB
-1353255840,1353255855,FR
-1353255856,1353257111,GB
-1353257112,1353257119,ES
-1353257120,1353257151,GB
-1353257152,1353257167,FR
-1353257168,1353257983,GB
-1353257984,1353258263,SE
-1353258264,1353258271,NO
-1353258272,1353258303,SE
-1353258304,1353258367,FI
-1353258368,1353258391,SE
-1353258392,1353258399,GB
-1353258400,1353258407,SE
-1353258408,1353258415,GB
-1353258416,1353258423,DK
-1353258424,1353258495,SE
-1353258496,1353258503,GB
-1353258504,1353258519,SE
-1353258520,1353258559,GB
-1353258560,1353258623,SE
-1353258624,1353258631,GB
-1353258632,1353258639,SE
-1353258640,1353258783,GB
-1353258784,1353258807,SE
-1353258808,1353265407,GB
-1353265408,1353265439,DE
-1353265440,1353265943,GB
-1353265944,1353265951,IE
-1353265952,1353266959,GB
-1353266960,1353266975,IE
-1353266976,1353267199,GB
-1353267200,1353268223,IE
-1353268224,1353268487,GB
-1353268488,1353268495,BE
-1353268496,1353268503,GB
-1353268504,1353268511,BE
-1353268512,1353268519,GB
-1353268520,1353268559,BE
-1353268560,1353268567,GB
-1353268568,1353268599,BE
-1353268600,1353268607,GB
-1353268608,1353268647,BE
-1353268648,1353268655,GB
-1353268656,1353268687,BE
-1353268688,1353268695,GB
-1353268696,1353268703,BE
-1353268704,1353268711,GB
-1353268712,1353269007,BE
-1353269008,1353269015,GB
-1353269016,1353269031,BE
-1353269032,1353269039,GB
-1353269040,1353269223,BE
-1353269224,1353269231,FR
-1353269232,1353269247,BE
-1353269248,1353270527,GB
-1353270528,1353270783,IE
-1353270784,1353271295,GB
-1353271296,1353271423,IE
-1353271424,1353271807,GB
-1353271808,1353271831,ES
-1353271832,1353271839,GB
-1353271840,1353271911,ES
-1353271912,1353271919,GB
-1353271920,1353272023,ES
-1353272024,1353272031,GB
-1353272032,1353272039,ES
-1353272040,1353272047,GB
-1353272048,1353272055,ES
-1353272056,1353272079,GB
-1353272080,1353272103,ES
-1353272104,1353272111,GB
-1353272112,1353272119,ES
-1353272120,1353272127,GB
-1353272128,1353272143,ES
-1353272144,1353272151,GB
-1353272152,1353272159,ES
-1353272160,1353272207,GB
-1353272208,1353272245,ES
-1353272246,1353272247,GB
-1353272248,1353272271,ES
-1353272272,1353272287,GB
-1353272288,1353273055,ES
-1353273056,1353273063,GB
-1353273064,1353273071,ES
-1353273072,1353273087,GB
-1353273088,1353273343,ES
-1353273344,1353273631,BE
-1353273632,1353273639,GB
-1353273640,1353273671,BE
-1353273672,1353273679,GB
-1353273680,1353273711,BE
-1353273712,1353273719,GB
-1353273720,1353274367,BE
-1353274368,1353274895,ES
-1353274896,1353274911,GB
-1353274912,1353275135,ES
-1353275136,1353275199,GB
-1353275200,1353275255,ES
-1353275256,1353275263,GB
-1353275264,1353275279,ES
-1353275280,1353275287,GB
-1353275288,1353275391,ES
-1353275392,1353277439,GB
+1353187328,1353262295,GB
+1353262296,1353262303,US
+1353262304,1353272079,GB
+1353272080,1353272095,ES
+1353272096,1353275247,GB
+1353275248,1353275255,ES
+1353275256,1353277439,GB
1353277440,1353279487,CH
-1353279488,1353280119,IT
-1353280120,1353280127,GB
-1353280128,1353280199,IT
-1353280200,1353280207,GB
-1353280208,1353280231,IT
-1353280232,1353280239,GB
-1353280240,1353280343,IT
-1353280344,1353280351,GB
-1353280352,1353280767,IT
-1353280768,1353280775,GB
-1353280776,1353280783,IT
-1353280784,1353281023,GB
-1353281024,1353281303,BE
-1353281304,1353281319,GB
-1353281320,1353281327,BE
-1353281328,1353281343,GB
-1353281344,1353281359,BE
-1353281360,1353281367,GB
-1353281368,1353281391,BE
-1353281392,1353281407,GB
-1353281408,1353281535,BE
-1353281536,1353282047,GB
-1353282048,1353282063,IT
-1353282064,1353282071,GB
-1353282072,1353282103,IT
-1353282104,1353282111,GB
-1353282112,1353282143,IT
-1353282144,1353282167,GB
-1353282168,1353282183,IT
-1353282184,1353282191,GB
-1353282192,1353282215,IT
-1353282216,1353282223,GB
-1353282224,1353282247,IT
-1353282248,1353282263,GB
-1353282264,1353282295,IT
-1353282296,1353282303,GB
-1353282304,1353282559,IT
-1353282560,1353283071,GB
-1353283072,1353283327,IT
-1353283328,1353286143,GB
-1353286144,1353286255,EU
-1353286256,1353286271,GB
-1353286272,1353286303,EU
-1353286304,1353286311,GB
-1353286312,1353286397,EU
-1353286398,1353286398,GB
-1353286399,1353286399,EU
-1353286400,1353287679,GB
-1353287680,1353288031,IE
-1353288032,1353288063,GB
-1353288064,1353288067,IE
-1353288068,1353288071,GB
-1353288072,1353288151,IE
-1353288152,1353288159,GB
-1353288160,1353288167,IE
-1353288168,1353288175,GB
-1353288176,1353288831,IE
-1353288832,1353288839,GB
-1353288840,1353288847,IE
-1353288848,1353288855,GB
-1353288856,1353288879,IE
-1353288880,1353288895,GB
-1353288896,1353288991,IE
-1353288992,1353288999,GB
-1353289000,1353289023,IE
-1353289024,1353289031,NL
-1353289032,1353289039,GB
-1353289040,1353289047,IE
-1353289048,1353289087,GB
-1353289088,1353289599,IE
-1353289600,1353289615,GB
-1353289616,1353289623,IE
-1353289624,1353289631,GB
-1353289632,1353289647,IE
-1353289648,1353289663,GB
-1353289664,1353289727,IE
-1353289728,1353290919,GB
-1353290920,1353290927,FR
-1353290928,1353290943,GB
-1353290944,1353290951,FR
-1353290952,1353295471,GB
-1353295472,1353295479,IE
-1353295480,1353295511,GB
-1353295512,1353295519,DE
-1353295520,1353297151,GB
-1353297152,1353297183,IE
-1353297184,1353298687,GB
-1353298688,1353299647,SE
-1353299648,1353299839,GB
-1353299840,1353299847,SE
-1353299848,1353299871,GB
-1353299872,1353299911,SE
-1353299912,1353299927,GB
-1353299928,1353299935,SE
-1353299936,1353299967,GB
-1353299968,1353300095,SE
-1353300096,1353300103,GB
-1353300104,1353300111,SE
-1353300112,1353300119,FI
-1353300120,1353300127,SE
-1353300128,1353300175,GB
-1353300176,1353300191,SE
-1353300192,1353300239,GB
-1353300240,1353300247,SE
-1353300248,1353300279,GB
-1353300280,1353300735,SE
-1353300736,1353306111,GB
-1353306112,1353306623,ES
-1353306624,1353306687,GB
-1353306688,1353306735,BE
-1353306736,1353306751,GB
-1353306752,1353307135,BE
-1353307136,1353307143,IT
-1353307144,1353308159,GB
+1353279488,1353287959,GB
+1353287960,1353287967,IE
+1353287968,1353288191,GB
+1353288192,1353288447,IE
+1353288448,1353298687,GB
+1353298688,1353299455,SE
+1353299456,1353300079,GB
+1353300080,1353300095,SE
+1353300096,1353306695,GB
+1353306696,1353306703,BE
+1353306704,1353308159,GB
1353308160,1353309183,FR
-1353309184,1353310463,GB
-1353310464,1353310479,ES
-1353310480,1353310487,GB
-1353310488,1353310551,ES
-1353310552,1353310559,GB
-1353310560,1353310575,ES
-1353310576,1353310583,GB
-1353310584,1353310599,ES
-1353310600,1353310607,DE
-1353310608,1353310623,ES
-1353310624,1353310663,GB
-1353310664,1353310679,ES
-1353310680,1353310687,GB
-1353310688,1353310703,ES
-1353310704,1353310719,GB
-1353310720,1353310807,IT
-1353310808,1353310815,GB
-1353310816,1353311175,IT
-1353311176,1353311183,ES
-1353311184,1353311231,IT
-1353311232,1353312255,GB
-1353312256,1353312767,CH
-1353312768,1353313191,IT
-1353313192,1353313199,GB
-1353313200,1353313279,IT
-1353313280,1353313791,IE
-1353313792,1353314303,GB
-1353314304,1353314815,CH
-1353314816,1353315415,ES
-1353315416,1353315423,FR
-1353315424,1353316351,ES
-1353316352,1353317375,GB
-1353317376,1353317631,FR
-1353317632,1353318143,GB
-1353318144,1353318399,IE
+1353309184,1353312447,GB
+1353312448,1353312479,CH
+1353312480,1353313535,GB
+1353313536,1353313791,IE
+1353313792,1353315327,GB
+1353315328,1353316351,ES
+1353316352,1353318399,GB
1353318400,1353383935,SE
1353383936,1353449471,DE
1353449472,1353515007,PT
@@ -47172,87 +15743,16 @@
1354235904,1354301439,KW
1354301440,1354366975,FR
1354366976,1354432511,FI
-1354432512,1354469375,DE
-1354469376,1354469631,EU
-1354469632,1354469887,DE
-1354469888,1354471679,EU
-1354471680,1354471935,DE
-1354471936,1354472191,EU
-1354472192,1354472959,DE
-1354472960,1354473215,EU
-1354473216,1354485759,DE
-1354485760,1354487295,EU
-1354487296,1354488319,DE
-1354488320,1354488831,EU
-1354488832,1354489087,DE
-1354489088,1354489855,EU
-1354489856,1354498047,DE
+1354432512,1354498047,DE
1354498048,1354563583,CZ
1354563584,1354629119,GB
1354629120,1354658495,DE
1354658496,1354658511,AT
-1354658512,1354662191,DE
-1354662192,1354662207,CY
-1354662208,1354662943,DE
-1354662944,1354662975,AT
-1354662976,1354664759,DE
-1354664760,1354664767,IT
-1354664768,1354665215,DE
+1354658512,1354662159,DE
+1354662160,1354662167,AT
+1354662168,1354665215,DE
1354665216,1354665223,AT
-1354665224,1354666495,DE
-1354666496,1354666751,FI
-1354666752,1354668031,DE
-1354668032,1354668159,AT
-1354668160,1354674719,DE
-1354674720,1354674751,CH
-1354674752,1354674815,DE
-1354674816,1354674943,IT
-1354674944,1354675199,AE
-1354675200,1354676479,DE
-1354676480,1354676767,AE
-1354676768,1354676991,DE
-1354676992,1354677023,AE
-1354677024,1354677247,DE
-1354677248,1354677279,AE
-1354677280,1354678015,DE
-1354678016,1354678031,AE
-1354678032,1354678559,DE
-1354678560,1354678575,AE
-1354678576,1354678751,DE
-1354678752,1354678759,IT
-1354678760,1354679295,DE
-1354679296,1354679807,AE
-1354679808,1354680063,DE
-1354680064,1354680079,AE
-1354680080,1354681471,DE
-1354681472,1354681487,AE
-1354681488,1354681815,DE
-1354681816,1354681823,CH
-1354681824,1354682287,DE
-1354682288,1354682303,AE
-1354682304,1354682771,DE
-1354682772,1354682775,RS
-1354682776,1354682895,DE
-1354682896,1354682911,AE
-1354682912,1354683095,DE
-1354683096,1354683103,IT
-1354683104,1354683391,DE
-1354683392,1354684159,PL
-1354684160,1354684415,DE
-1354684416,1354684431,AE
-1354684432,1354684671,DE
-1354684672,1354684927,AE
-1354684928,1354687023,DE
-1354687024,1354687031,LU
-1354687032,1354687359,DE
-1354687360,1354687375,NZ
-1354687376,1354687383,DE
-1354687384,1354687391,NZ
-1354687392,1354687399,DE
-1354687400,1354687407,IT
-1354687408,1354687455,DE
-1354687456,1354687487,IT
-1354687488,1354694655,DE
+1354665224,1354694655,DE
1354694656,1354760191,IR
1354760192,1355022335,GB
1355022336,1355284479,DK
@@ -47263,180 +15763,52 @@
1356070912,1356201983,NO
1356201984,1356333055,FR
1356333056,1356464127,SE
-1356464128,1356595199,CH
+1356464128,1356539775,CH
+1356539776,1356539903,DE
+1356539904,1356595199,CH
1356595200,1356857343,FI
1356857344,1356922879,ES
1356922880,1356988415,GB
1356988416,1357053951,DE
-1357053952,1357091727,AE
-1357091728,1357091743,A2
-1357091744,1357119487,AE
-1357119488,1357126807,DE
-1357126808,1357126815,NL
-1357126816,1357127471,DE
-1357127472,1357127487,CH
-1357127488,1357185023,DE
+1357053952,1357119487,AE
+1357119488,1357185023,DE
1357185024,1357250559,GB
1357250560,1357316095,IL
-1357316096,1357316607,ES
-1357316608,1357317119,LU
1357317120,1357317375,GB
-1357317376,1357317631,A2
-1357317632,1357318143,LY
-1357318144,1357320191,QA
-1357320192,1357320703,FR
-1357320704,1357320959,RO
-1357320960,1357320991,ES
-1357320992,1357320999,GB
-1357321000,1357321007,FR
-1357321008,1357321015,GB
-1357321016,1357321023,DK
1357321024,1357321087,KE
-1357321088,1357321215,HK
-1357321216,1357321471,GB
-1357321472,1357321727,ES
-1357321728,1357321983,CY
1357321984,1357322239,GB
-1357322240,1357322751,DE
-1357322752,1357323263,BH
-1357323264,1357323519,ES
+1357322240,1357322255,DE
+1357322496,1357322751,DE
1357323520,1357323775,GB
-1357323776,1357324287,DE
-1357324288,1357326335,GB
-1357326336,1357326591,NL
-1357326592,1357326847,DE
-1357326848,1357327359,GB
-1357327360,1357328383,DE
-1357328384,1357330431,EU
-1357330432,1357330943,DE
-1357330944,1357331455,ES
-1357331456,1357331711,GB
-1357331712,1357331967,ES
-1357331968,1357332223,GB
-1357332224,1357332479,FR
-1357332480,1357333247,DE
-1357333248,1357333503,GB
-1357333504,1357333759,IR
-1357333760,1357333823,FR
-1357333824,1357333855,GB
-1357333856,1357334015,ES
-1357334016,1357334271,TZ
-1357334272,1357334527,CA
-1357334528,1357335039,FR
-1357335040,1357335295,GB
-1357335296,1357335551,FR
-1357335552,1357335807,GB
-1357335808,1357336063,KE
-1357336064,1357336319,GB
-1357336320,1357336575,FR
-1357336576,1357337599,NL
-1357337600,1357337855,ES
-1357337856,1357338111,SA
-1357338112,1357338879,FR
-1357338880,1357339391,NO
-1357339392,1357339647,ES
-1357339648,1357339903,DZ
-1357339904,1357340159,GB
-1357340160,1357340415,DE
-1357340416,1357342719,GB
-1357342720,1357342975,PL
+1357324288,1357325311,GB
+1357327360,1357327615,FR
+1357328384,1357328639,GB
+1357329408,1357329415,BE
+1357335808,1357336063,IT
+1357340672,1357341695,GB
1357342976,1357343231,GB
-1357343232,1357343295,EU
-1357343296,1357343311,US
-1357343312,1357343343,GB
-1357343344,1357343487,US
1357343488,1357343503,GB
-1357343504,1357343519,US
-1357343520,1357343535,FR
-1357343536,1357343711,US
-1357343712,1357343999,GB
-1357344000,1357344767,EU
-1357344768,1357346815,CA
-1357346816,1357347839,FR
+1357344260,1357344263,FR
+1357344512,1357344767,FR
+1357347456,1357347583,FR
+1357347616,1357347647,FR
1357347840,1357348095,PL
-1357348096,1357348351,EU
-1357348352,1357348607,ES
-1357348608,1357348863,EU
-1357348864,1357349119,DE
-1357349120,1357349375,LU
-1357349376,1357349887,GB
-1357349888,1357350399,ES
-1357350400,1357350911,QA
-1357350912,1357351167,GB
1357351168,1357351423,PL
-1357351424,1357352959,GB
-1357352960,1357353983,CA
-1357353984,1357354495,GB
-1357354496,1357354751,ES
-1357354752,1357355007,FR
-1357355008,1357355263,NL
-1357355264,1357355775,FR
-1357355776,1357356031,GB
-1357356032,1357356543,ES
-1357356544,1357357055,PT
-1357357056,1357357567,ES
-1357357568,1357358079,DE
-1357358080,1357358335,ES
-1357358336,1357358591,FR
-1357358592,1357358847,DE
-1357358848,1357359103,PL
-1357359104,1357359999,ES
-1357360000,1357360015,GB
-1357360016,1357360023,IT
-1357360024,1357360031,BE
-1357360032,1357360047,EU
-1357360048,1357360271,GB
-1357360272,1357360279,FR
-1357360280,1357360383,GB
-1357360384,1357360639,EU
-1357360640,1357360895,GB
-1357360896,1357361151,DE
+1357359872,1357360383,GB
1357361152,1357363199,GB
1357363200,1357364223,QA
1357364224,1357365247,ES
-1357365248,1357365759,DZ
-1357365760,1357365791,ES
-1357365792,1357365823,BH
-1357365824,1357365887,GB
-1357365888,1357366015,DE
-1357366016,1357366271,KM
-1357366272,1357366527,FR
-1357366528,1357366591,BE
-1357366592,1357366655,FR
-1357366656,1357366719,PT
-1357366720,1357366783,GB
-1357366784,1357366799,MD
-1357366800,1357366815,ES
-1357366816,1357366847,FR
-1357366848,1357366863,GB
-1357366864,1357366879,ES
-1357366880,1357366943,GB
-1357366944,1357366959,EU
+1357366784,1357366959,FR
1357366960,1357366967,BE
1357366968,1357366975,FR
-1357366976,1357367295,GB
-1357367296,1357367551,FR
-1357367552,1357368063,GB
-1357368064,1357368831,GN
-1357368832,1357369343,ES
-1357369344,1357369599,PL
-1357369600,1357369855,GB
-1357369856,1357370111,KE
-1357370112,1357370367,DE
-1357370368,1357370879,GB
-1357370880,1357371391,LY
-1357371392,1357371647,GB
-1357371648,1357371903,FR
-1357371904,1357372159,RU
+1357366976,1357367039,GB
+1357368576,1357368831,NL
1357372160,1357372927,GB
-1357372928,1357373183,AM
-1357373184,1357373439,GB
-1357373440,1357381631,EU
-1357381632,1357386143,NO
-1357386144,1357386147,DK
-1357386148,1357391615,NO
-1357391616,1357391871,SE
-1357391872,1357414399,NO
+1357373468,1357373471,GB
+1357373480,1357373483,GB
+1357373488,1357373519,GB
+1357373952,1357374463,GB
+1357381632,1357414399,NO
1357414400,1357447167,LV
1357447168,1357479935,IE
1357479936,1357512703,LV
@@ -47447,221 +15819,44 @@
1357643776,1357676543,FR
1357676544,1357709311,BE
1357709312,1357742079,RU
-1357742080,1357759079,DE
-1357759080,1357759087,AM
-1357759088,1357759183,DE
-1357759184,1357759191,AT
-1357759192,1357765823,DE
-1357765824,1357765831,AT
-1357765832,1357767056,DE
-1357767057,1357767057,DE
-1357767058,1357767239,DE
-1357767240,1357769287,DE
-1357769288,1357773111,DE
-1357773112,1357773119,PL
-1357773120,1357774847,DE
+1357742080,1357774847,DE
1357774848,1357791231,GB
1357791232,1357807615,PL
1357807616,1357840383,CH
1357840384,1357873151,NO
-1357873152,1357875199,DE
-1357875200,1357875215,AT
-1357875216,1357875247,DE
-1357875248,1357875263,US
-1357875264,1357875279,AT
-1357875280,1357875295,DE
1357875296,1357875327,IE
-1357875328,1357875423,DE
-1357875424,1357875439,GB
-1357875440,1357875711,DE
-1357875712,1357875967,PL
-1357875968,1357876143,DE
-1357876144,1357876151,SE
-1357876152,1357876223,DE
-1357876224,1357876239,NO
-1357876240,1357876255,DE
-1357876256,1357876335,EU
-1357876336,1357876339,PL
-1357876340,1357876343,RU
-1357876344,1357876351,DE
-1357876352,1357876383,EU
-1357876384,1357876391,RU
-1357876392,1357876399,PL
-1357876400,1357876407,DE
-1357876408,1357876415,GB
-1357876416,1357876447,PL
-1357876448,1357876479,EU
-1357876480,1357876495,SE
-1357876496,1357876543,EU
-1357876544,1357876735,DE
-1357876736,1357876863,EU
-1357876864,1357876927,SE
-1357876928,1357877327,DE
-1357877328,1357877335,EU
-1357877336,1357877439,DE
-1357877440,1357877503,EU
-1357877504,1357877759,DE
-1357877760,1357878271,EU
-1357878272,1357878335,CH
-1357878336,1357878399,CZ
-1357878400,1357878463,NL
-1357878464,1357878527,NO
-1357878528,1357878591,AT
-1357878592,1357878655,PL
-1357878656,1357878719,DE
-1357878720,1357878783,NL
-1357878784,1357879807,DE
-1357879808,1357879871,RU
-1357879872,1357879903,EU
-1357879904,1357879935,DE
+1357877248,1357877311,DE
+1357877376,1357877439,DE
1357879936,1357880063,GB
-1357880064,1357880319,NL
-1357880320,1357880447,DE
-1357880448,1357880511,EU
-1357880512,1357880543,DE
-1357880544,1357880559,AT
-1357880560,1357880831,DE
-1357880832,1357881087,AT
-1357881088,1357881343,DE
-1357881344,1357883647,FR
1357883648,1357883903,SE
-1357883904,1357883911,GB
-1357883912,1357883919,FR
-1357883920,1357883927,GB
-1357883928,1357883999,EU
-1357884000,1357884031,FR
-1357884032,1357884095,RU
-1357884096,1357884159,SE
-1357884160,1357884415,GB
-1357884416,1357884419,EU
-1357884420,1357884423,FR
-1357884424,1357884427,BE
-1357884428,1357884431,DE
-1357884432,1357884439,US
-1357884440,1357884447,FR
-1357884448,1357884495,EU
-1357884496,1357884511,DE
-1357884512,1357884927,FR
-1357884928,1357884935,EU
-1357884936,1357884943,GB
-1357884944,1357884959,EU
-1357884960,1357884991,RU
-1357884992,1357885055,DK
-1357885056,1357885119,FR
-1357885120,1357885183,DE
-1357885184,1357885191,EU
-1357885192,1357885199,ES
-1357885200,1357885215,EU
-1357885216,1357885247,ES
-1357885248,1357885439,DE
-1357885440,1357885695,FR
-1357885696,1357885951,DE
-1357885952,1357886079,EU
-1357886080,1357886207,DE
-1357886208,1357886463,EU
-1357886464,1357887487,US
-1357887488,1357888511,FR
-1357888512,1357889023,DE
+1357885952,1357886207,SE
1357889024,1357889279,GB
-1357889280,1357890815,EU
-1357890816,1357890831,NL
-1357890832,1357890847,EU
-1357890848,1357890879,NL
-1357890880,1357890911,EU
-1357890912,1357890943,DE
-1357890944,1357891327,NL
-1357891328,1357891391,AT
-1357891392,1357891399,NL
-1357891400,1357891423,EU
-1357891424,1357891455,DE
-1357891456,1357891647,SE
-1357891648,1357891679,NL
+1357889280,1357889535,SE
+1357891072,1357891327,NL
1357891680,1357891711,GB
-1357891712,1357891839,SE
1357891840,1357892095,GB
-1357892096,1357892111,DE
-1357892112,1357892127,ES
-1357892128,1357892143,FR
-1357892144,1357892159,IT
-1357892160,1357892175,GB
-1357892176,1357892183,AR
-1357892184,1357892191,AU
-1357892192,1357892199,BR
-1357892200,1357892207,NL
-1357892208,1357892215,SE
-1357892216,1357892223,US
-1357892224,1357892351,FR
-1357892352,1357893119,NL
-1357893120,1357893375,SE
-1357893376,1357893407,EU
-1357893408,1357893439,SE
-1357893440,1357893471,IT
-1357893472,1357893503,PL
-1357893504,1357893631,DE
-1357893632,1357894911,EU
-1357894912,1357895423,FR
-1357895424,1357895679,AE
-1357895680,1357895935,DE
-1357895936,1357896447,SE
-1357896448,1357896959,DE
-1357896960,1357897215,FR
-1357897216,1357897279,SE
-1357897280,1357897343,DK
-1357897344,1357897375,HU
-1357897376,1357897407,PL
-1357897408,1357897439,RU
-1357897440,1357897487,DE
-1357897488,1357897535,EU
-1357897536,1357897543,CZ
-1357897544,1357897551,SE
-1357897552,1357897559,GB
-1357897560,1357897855,EU
-1357897856,1357898495,DE
-1357898496,1357898751,EU
-1357898752,1357899267,DE
-1357899268,1357899275,FR
-1357899276,1357899279,NL
-1357899280,1357899295,EU
-1357899296,1357899311,DE
-1357899312,1357899327,EU
-1357899328,1357899391,GB
-1357899392,1357899519,EU
-1357899520,1357899523,GB
-1357899524,1357899527,EU
-1357899528,1357899535,BR
-1357899536,1357899543,CZ
-1357899544,1357899551,EU
-1357899552,1357899567,AT
-1357899568,1357899647,EU
+1357892608,1357892735,NL
+1357892864,1357893119,NL
+1357898752,1357898879,DE
1357899648,1357899775,GB
-1357899776,1357900287,DE
-1357900288,1357900319,EU
-1357900320,1357900327,FR
-1357900328,1357900351,GB
-1357900352,1357900415,CH
1357900416,1357900543,SE
-1357900544,1357900799,NL
-1357900800,1357901055,DE
-1357901056,1357901311,EU
-1357901312,1357901823,DE
-1357901824,1357902365,EU
+1357902336,1357902365,GB
1357902366,1357902366,NO
-1357902367,1357902847,EU
+1357902367,1357902591,GB
+1357902592,1357902847,RU
1357902848,1357903359,GB
-1357903360,1357903615,DE
-1357903616,1357904383,EU
-1357904384,1357904895,DE
1357904896,1357905407,GB
-1357905408,1357905663,SE
-1357905664,1357905919,NL
1357905920,1357910015,LT
1357910016,1357914111,GR
1357914112,1357922303,RU
1357922304,1357926399,SA
1357926400,1357930495,GB
-1357930496,1357942783,RU
+1357930496,1357938687,RU
+1357938688,1357942783,NL
1357942784,1357946879,RS
-1357946880,1357955071,PL
+1357946880,1357953023,PL
+1357953024,1357954047,US
+1357954048,1357955071,PL
1357955072,1357959167,KE
1357959168,1357963263,RU
1357963264,1357967359,AT
@@ -47671,58 +15866,35 @@
1357979648,1357983743,KZ
1357983744,1357983783,GB
1357983784,1357983791,IT
-1357983792,1357983951,GB
-1357983952,1357983959,IT
-1357983960,1357984079,GB
-1357984080,1357984087,IT
-1357984088,1357984103,GB
+1357983792,1357984103,GB
1357984104,1357984119,IT
1357984120,1357984319,GB
1357984320,1357984327,IT
-1357984328,1357984335,GB
-1357984336,1357984343,IT
-1357984344,1357984367,GB
+1357984328,1357984367,GB
1357984368,1357984375,IT
-1357984376,1357984439,GB
-1357984440,1357984447,IT
-1357984448,1357984487,GB
+1357984376,1357984487,GB
1357984488,1357984495,IT
1357984496,1357984527,GB
-1357984528,1357984567,IT
-1357984568,1357984591,GB
+1357984528,1357984551,IT
+1357984552,1357984591,GB
1357984592,1357984599,IT
1357984600,1357984671,GB
1357984672,1357984679,IT
-1357984680,1357984703,GB
-1357984704,1357984711,IT
-1357984712,1357984783,GB
-1357984784,1357984791,IT
-1357984792,1357984823,GB
+1357984680,1357984823,GB
1357984824,1357984831,IT
-1357984832,1357985015,GB
+1357984832,1357984911,GB
+1357984912,1357984919,IT
+1357984920,1357985015,GB
1357985016,1357985023,IT
-1357985024,1357985391,GB
-1357985392,1357985399,IT
-1357985400,1357985511,GB
-1357985512,1357985519,IT
-1357985520,1357985791,GB
+1357985024,1357985343,GB
+1357985344,1357985351,IT
+1357985352,1357985575,GB
+1357985576,1357985583,IT
+1357985584,1357985791,GB
1357985792,1357987839,DE
-1357987840,1357988479,GB
-1357988480,1357988483,DE
-1357988484,1357988495,GB
-1357988496,1357988543,DE
-1357988544,1357988551,NL
-1357988552,1357988559,DE
-1357988560,1357988567,GB
-1357988568,1357988607,DE
-1357988608,1357988751,GB
-1357988752,1357988775,DE
-1357988776,1357988779,GB
-1357988780,1357988783,ES
-1357988784,1357988799,DE
-1357988800,1357988831,CZ
-1357988832,1357988863,DE
-1357988864,1357991935,GB
+1357987840,1357989631,GB
+1357989632,1357989887,FR
+1357989888,1357991935,GB
1357991936,1357996031,NO
1357996032,1358000127,CH
1358000128,1358004223,LI
@@ -47736,118 +15908,58 @@
1358036992,1358041087,IR
1358041088,1358045183,FI
1358045184,1358049279,SK
-1358049280,1358061567,RU
-1358061568,1358065663,UA
+1358049280,1358062591,RU
+1358062592,1358065663,UA
1358065664,1358069759,BA
-1358069760,1358072543,DE
-1358072544,1358072575,CH
-1358072576,1358074719,DE
-1358074720,1358074751,CH
-1358074752,1358082815,DE
-1358082816,1358083071,CH
-1358083072,1358086143,DE
+1358069760,1358086143,DE
1358086144,1358090239,CH
1358090240,1358094335,KZ
1358094336,1358102527,NL
1358102528,1358106623,RU
1358106624,1358110719,LT
-1358110720,1358116895,DE
-1358116896,1358116911,IT
-1358116912,1358118911,DE
+1358110720,1358118911,DE
1358118912,1358123007,RU
1358123008,1358127103,PT
1358127104,1358131199,CZ
1358131200,1358135295,DK
1358135296,1358139391,RU
1358139392,1358143487,UA
-1358143488,1358147519,AT
-1358147520,1358147583,MT
+1358143488,1358147583,AT
1358147584,1358151679,GB
1358151680,1358155775,DE
1358155776,1358159871,CH
1358159872,1358163967,ES
-1358163968,1358166015,FR
-1358166016,1358167295,MQ
-1358167296,1358167807,FR
-1358167808,1358168063,MQ
+1358163968,1358164223,FR
+1358164224,1358164479,MQ
+1358164480,1358164991,FR
+1358164992,1358165503,MQ
+1358165504,1358166015,FR
+1358166016,1358166783,MQ
+1358166784,1358167551,FR
+1358167552,1358167807,MQ
+1358167808,1358168063,FR
1358168064,1358172159,GB
1358172160,1358176255,CY
1358176256,1358180351,RU
1358180352,1358184447,ES
-1358184448,1358187775,SE
-1358187776,1358188031,NO
-1358188032,1358192639,SE
+1358184448,1358186607,SE
+1358186608,1358186623,NO
+1358186624,1358187775,SE
+1358187776,1358187839,NO
+1358187840,1358192639,SE
1358192640,1358196735,HU
1358196736,1358200831,IT
1358200832,1358209023,PL
1358209024,1358213119,IL
1358213120,1358217215,GB
1358217216,1358221311,SE
-1358221312,1358223359,DE
-1358223360,1358223871,GB
-1358223872,1358223887,NL
-1358223888,1358223895,DE
-1358223896,1358223903,NL
-1358223904,1358223919,DE
-1358223920,1358223927,NL
-1358223928,1358223935,DE
-1358223936,1358223939,NL
-1358223940,1358223951,DE
-1358223952,1358223959,NL
-1358223960,1358223975,DE
-1358223976,1358223991,NL
-1358223992,1358223999,DE
-1358224000,1358224043,NL
-1358224044,1358224047,DE
-1358224048,1358224087,NL
-1358224088,1358224511,DE
-1358224512,1358224519,BE
-1358224520,1358224611,DE
-1358224612,1358224727,BE
-1358224728,1358224959,DE
-1358224960,1358225127,IT
-1358225128,1358225135,DE
-1358225136,1358225183,IT
-1358225184,1358225187,DE
-1358225188,1358225247,IT
-1358225248,1358225407,DE
+1358221312,1358225407,DE
1358225408,1358229503,RU
-1358229504,1358230111,DE
-1358230112,1358230115,AT
-1358230116,1358230391,DE
-1358230392,1358230399,CH
-1358230400,1358232863,DE
-1358232864,1358232867,IT
-1358232868,1358232924,DE
-1358232925,1358232925,CH
-1358232926,1358233599,DE
+1358229504,1358233599,DE
1358233600,1358237695,ES
-1358237696,1358239231,FR
-1358239232,1358239487,CH
-1358239488,1358239743,FR
-1358239744,1358239999,CH
-1358240000,1358240255,FR
-1358240256,1358240319,CH
-1358240320,1358241791,FR
-1358241792,1358241823,BE
-1358241824,1358241951,FR
-1358241952,1358241983,BE
-1358241984,1358242591,FR
-1358242592,1358242623,BE
-1358242624,1358244351,FR
-1358244352,1358244607,IT
-1358244608,1358245503,FR
-1358245504,1358245631,BE
-1358245632,1358245695,FR
-1358245696,1358245759,BE
-1358245760,1358249215,FR
-1358249216,1358249471,IT
-1358249472,1358249983,FR
-1358249984,1358251815,DE
-1358251816,1358251823,NL
-1358251824,1358254079,DE
+1358237696,1358249983,FR
+1358249984,1358254079,DE
1358254080,1358258175,MD
-1358258176,1358262271,RU
1358262272,1358266367,UA
1358266368,1358274559,DE
1358274560,1358278655,GR
@@ -47861,9 +15973,7 @@
1358307328,1358315519,DE
1358315520,1358323711,RU
1358323712,1358327807,LU
-1358327808,1358328671,DE
-1358328672,1358328727,AT
-1358328728,1358331903,DE
+1358327808,1358331903,DE
1358331904,1358335999,IL
1358336000,1358344191,FI
1358344192,1358352383,NL
@@ -47873,78 +15983,14 @@
1358364672,1358372863,GB
1358372864,1358376959,RU
1358376960,1358381055,GB
-1358381056,1358383311,IT
-1358383312,1358383327,FR
-1358383328,1358384127,IT
-1358384128,1358384143,FR
-1358384144,1358384191,IT
-1358384192,1358384199,FR
-1358384200,1358384481,IT
-1358384482,1358384482,SI
-1358384483,1358385151,IT
+1358381056,1358385151,IT
1358385152,1358389247,GB
1358389248,1358397439,RU
-1358397440,1358397743,GB
-1358397744,1358397951,A2
-1358397952,1358398463,TZ
-1358398464,1358399487,GB
-1358399488,1358399999,NG
-1358400000,1358400007,PK
-1358400008,1358400015,A2
-1358400016,1358400071,IN
-1358400072,1358400255,A2
-1358400256,1358400511,AF
-1358400512,1358400519,GA
-1358400520,1358400527,A2
-1358400528,1358400535,TZ
-1358400536,1358400543,A2
-1358400544,1358400551,GA
-1358400552,1358400575,A2
-1358400576,1358400591,KE
-1358400592,1358400639,A2
-1358400640,1358400775,KE
-1358400776,1358400783,A2
-1358400784,1358400799,KE
-1358400800,1358400831,NG
-1358400832,1358400863,A2
-1358400864,1358400895,GA
-1358400896,1358401279,NG
+1358397440,1358401279,GB
1358401280,1358401535,KE
-1358401536,1358401791,GB
-1358401792,1358402175,A2
-1358402176,1358402559,TZ
-1358402560,1358402719,GB
-1358402720,1358403103,A2
-1358403104,1358403135,ID
-1358403136,1358403151,A2
-1358403152,1358403167,ID
-1358403168,1358403183,A2
-1358403184,1358403273,ID
-1358403274,1358403327,A2
-1358403328,1358403583,NG
-1358403584,1358403591,PK
-1358403592,1358403631,A2
-1358403632,1358403679,PK
-1358403680,1358403687,A2
-1358403688,1358403711,PK
-1358403712,1358403839,A2
-1358403840,1358404095,NG
-1358404096,1358404607,A2
-1358404608,1358404611,NG
-1358404612,1358404615,TZ
-1358404616,1358404623,NG
-1358404624,1358404655,TZ
-1358404656,1358404671,NG
-1358404672,1358404695,A2
-1358404696,1358404703,TZ
-1358404704,1358404735,A2
-1358404736,1358404751,NG
-1358404752,1358404767,A2
-1358404768,1358404783,NG
-1358404784,1358404863,A2
-1358404864,1358405119,NG
-1358405120,1358405375,TZ
-1358405376,1358405631,NG
+1358401536,1358402303,GB
+1358402304,1358402559,TZ
+1358402560,1358405631,GB
1358405632,1358409727,NL
1358409728,1358413823,RU
1358413824,1358422015,NL
@@ -47961,37 +16007,10 @@
1358467072,1358471167,RU
1358471168,1358475263,FI
1358475264,1358479359,GB
-1358479360,1358479391,LI
-1358479392,1358479511,CH
-1358479512,1358479551,LI
-1358479552,1358479615,CH
+1358479360,1358479615,CH
1358479616,1358483455,LI
1358483456,1358487551,FR
-1358487552,1358487689,SE
-1358487690,1358487691,RU
-1358487692,1358487693,RO
-1358487694,1358487695,PL
-1358487696,1358487697,HU
-1358487698,1358487699,BG
-1358487700,1358487701,ES
-1358487702,1358487711,SE
-1358487712,1358487727,US
-1358487728,1358487743,FR
-1358487744,1358487775,SE
-1358487776,1358487999,FR
-1358488000,1358488191,SE
-1358488192,1358488223,GB
-1358488224,1358488239,US
-1358488240,1358488255,FR
-1358488256,1358491183,SE
-1358491184,1358491191,NO
-1358491192,1358491199,DK
-1358491200,1358491215,FI
-1358491216,1358491439,SE
-1358491440,1358491455,NO
-1358491456,1358491471,DK
-1358491472,1358491487,FI
-1358491488,1358491647,SE
+1358487552,1358491647,SE
1358491648,1358495743,FI
1358495744,1358499839,PL
1358499840,1358503935,KZ
@@ -48006,27 +16025,11 @@
1358548992,1358551039,NL
1358551040,1358553087,GB
1358553088,1358557183,UA
-1358557184,1358557375,IE
-1358557376,1358557407,GB
-1358557408,1358557903,IE
-1358557904,1358557911,GB
-1358557912,1358557951,IE
-1358557952,1358558047,GB
-1358558048,1358558143,IE
-1358558144,1358558175,GB
-1358558176,1358558807,IE
-1358558808,1358558815,GB
-1358558816,1358558831,IE
-1358558832,1358558847,GB
-1358558848,1358558975,IE
-1358558976,1358559007,GB
-1358559008,1358559039,IE
-1358559040,1358559071,GB
-1358559072,1358559551,IE
-1358559552,1358559559,GB
-1358559560,1358560415,IE
-1358560416,1358560447,GB
-1358560448,1358561279,IE
+1358557184,1358557951,GB
+1358557952,1358558207,IE
+1358558208,1358560255,GB
+1358560256,1358560511,IE
+1358560512,1358561279,GB
1358561280,1358569471,CZ
1358569472,1358573567,NG
1358573568,1358577663,LV
@@ -48039,79 +16042,26 @@
1358610432,1358614527,IR
1358614528,1358622719,RU
1358622720,1358626815,SK
-1358626816,1358627839,A2
-1358627840,1358627925,US
-1358627926,1358627926,A2
-1358627927,1358628863,US
-1358628864,1358630911,A2
-1358630912,1358635007,GB
+1358626816,1358635007,GB
1358635008,1358639103,TR
1358639104,1358643199,RU
1358643200,1358647295,ES
1358647296,1358651391,DE
1358651392,1358655487,FR
1358655488,1358667775,RU
-1358667776,1358668031,PT
-1358668032,1358668039,GB
-1358668040,1358668067,PT
-1358668068,1358668071,GB
-1358668072,1358668111,PT
-1358668112,1358668119,GB
-1358668120,1358668255,PT
-1358668256,1358668263,GB
-1358668264,1358668271,PT
-1358668272,1358668279,ES
-1358668280,1358668359,PT
-1358668360,1358668363,GB
-1358668364,1358668479,PT
-1358668480,1358668495,GB
-1358668496,1358668519,PT
-1358668520,1358668543,GB
-1358668544,1358668799,PT
-1358668800,1358668807,GB
-1358668808,1358668839,PT
-1358668840,1358668863,GB
-1358668864,1358668895,PT
-1358668896,1358668927,GB
-1358668928,1358669327,PT
-1358669328,1358669335,ES
-1358669336,1358669351,PT
-1358669352,1358669359,GB
-1358669360,1358669463,PT
-1358669464,1358669471,GB
-1358669472,1358669487,PT
-1358669488,1358669503,GB
-1358669504,1358669599,PT
-1358669600,1358669823,GB
-1358669824,1358669847,PT
-1358669848,1358669855,GB
-1358669856,1358669975,PT
-1358669976,1358669983,GB
-1358669984,1358670167,PT
-1358670168,1358670175,GB
-1358670176,1358670183,PT
-1358670184,1358670191,GB
-1358670192,1358670943,PT
+1358667776,1358668159,GB
+1358668160,1358668167,PT
+1358668168,1358668447,GB
+1358668448,1358668455,PT
+1358668456,1358670943,GB
1358670944,1358670951,FR
-1358670952,1358671023,PT
-1358671024,1358671039,GB
-1358671040,1358671839,PT
-1358671840,1358671855,ES
-1358671856,1358671871,PT
-1358671872,1358671903,GB
-1358671904,1358671967,PT
-1358671968,1358671983,GB
-1358671984,1358672479,PT
-1358672480,1358672511,GB
-1358672512,1358672687,PT
-1358672688,1358672703,GB
-1358672704,1358673535,PT
-1358673536,1358673567,US
-1358673568,1358673599,GB
-1358673600,1358673663,PT
-1358673664,1358675967,GB
-1358675968,1358677247,SE
-1358677248,1358677759,DK
+1358670952,1358670975,GB
+1358670976,1358670991,PT
+1358670992,1358671935,GB
+1358671936,1358671943,PT
+1358671944,1358675967,GB
+1358675968,1358676735,SE
+1358676736,1358677759,DK
1358677760,1358679295,SE
1358679296,1358680063,DK
1358680064,1358688255,RU
@@ -48121,46 +16071,11 @@
1358700544,1358704639,AT
1358704640,1358708735,HU
1358708736,1358712831,GB
-1358712832,1358713999,NL
-1358714000,1358714015,A2
-1358714016,1358716383,NL
-1358716384,1358716415,PL
-1358716416,1358716927,NL
+1358712832,1358716927,NL
1358716928,1358721023,DE
1358721024,1358725119,GB
1358725120,1358733311,RU
-1358733312,1358734003,SE
-1358734004,1358734007,NO
-1358734008,1358734123,SE
-1358734124,1358734127,CW
-1358734128,1358735491,SE
-1358735492,1358735495,NL
-1358735496,1358738303,SE
-1358738304,1358738307,FR
-1358738308,1358738431,SE
-1358738432,1358738447,NL
-1358738448,1358738687,SE
-1358738688,1358738691,DE
-1358738692,1358739135,SE
-1358739136,1358739151,NL
-1358739152,1358739503,SE
-1358739504,1358739519,FR
-1358739520,1358740099,SE
-1358740100,1358740103,MY
-1358740104,1358740159,SE
-1358740160,1358740175,FR
-1358740176,1358740335,SE
-1358740336,1358740351,GB
-1358740352,1358740671,SE
-1358740672,1358740675,PL
-1358740676,1358740679,BG
-1358740680,1358740683,BR
-1358740684,1358740687,TR
-1358740688,1358740883,SE
-1358740884,1358740887,NL
-1358740888,1358740927,SE
-1358740928,1358740943,DK
-1358740944,1358741503,SE
+1358733312,1358741503,SE
1358741504,1358745599,IT
1358745600,1358749695,SE
1358749696,1358753791,IT
@@ -48170,22 +16085,13 @@
1358770176,1358774271,BG
1358774272,1358778367,ES
1358778368,1358782463,CH
-1358782464,1358784015,GB
-1358784016,1358784039,NL
-1358784040,1358784063,DE
-1358784064,1358784831,GB
-1358784832,1358784863,NL
-1358784864,1358784895,DE
-1358784896,1358785087,GB
-1358785088,1358785151,NL
-1358785152,1358786559,GB
-1358786560,1358787071,NL
-1358787072,1358787327,GB
+1358782464,1358784039,GB
+1358784040,1358784047,DE
+1358784048,1358787327,GB
1358787328,1358787583,IE
1358787584,1358790655,GB
1358790656,1358798847,IR
-1358798848,1358799359,DE
-1358799360,1358802943,HR
+1358798848,1358802943,HR
1358802944,1358807039,HU
1358807040,1358811135,ES
1358811136,1358815231,DE
@@ -48195,178 +16101,49 @@
1358827520,1358831615,RU
1358831616,1358835711,NO
1358835712,1358839807,RU
-1358839808,1358842111,CH
-1358842112,1358842879,CH
-1358842880,1358843903,CH
+1358839808,1358843903,CH
1358843904,1358847999,MT
1358848000,1358856191,RU
1358856192,1358860287,DE
-1358860288,1358860835,GB
-1358860836,1358860836,EU
-1358860837,1358861311,GB
-1358861312,1358861567,EU
+1358860288,1358861361,GB
+1358861362,1358861363,DE
+1358861364,1358861449,GB
+1358861450,1358861450,DE
+1358861451,1358861473,GB
+1358861474,1358861474,DE
+1358861475,1358861567,GB
1358861568,1358861823,DE
1358861824,1358862335,FR
1358862336,1358862847,US
-1358862848,1358862898,DK
+1358862848,1358862898,GB
1358862899,1358862899,NO
-1358862900,1358863103,DK
-1358863104,1358863359,CH
-1358863360,1358863871,US
-1358863872,1358864383,GB
+1358862900,1358863359,GB
+1358863360,1358863615,US
+1358863616,1358863903,GB
+1358863904,1358863919,SA
+1358863920,1358864383,GB
1358864384,1358872575,CH
1358872576,1358876671,IT
1358876672,1358880767,LV
1358884864,1358888959,SE
-1358888960,1358889599,DE
-1358889600,1358889631,CH
-1358889632,1358889887,DE
-1358889888,1358889919,IR
-1358889920,1358889951,DE
-1358889952,1358889983,CH
-1358889984,1358890591,DE
-1358890592,1358890623,IT
-1358890624,1358890815,DE
-1358890816,1358890879,AR
-1358890880,1358890975,DE
-1358890976,1358891007,IT
-1358891008,1358891647,DE
-1358891648,1358891711,IT
-1358891712,1358892159,DE
-1358892160,1358892191,IR
-1358892192,1358892223,IT
-1358892224,1358893055,DE
+1358888960,1358893055,DE
1358893056,1358897151,RU
-1358897152,1358898175,A2
-1358898176,1358898239,CA
-1358898240,1358898335,A2
-1358898336,1358898351,DK
-1358898352,1358898816,A2
-1358898817,1358898943,CG
-1358898944,1358898975,A2
-1358898976,1358898991,US
-1358898992,1358899079,A2
-1358899080,1358899087,CD
-1358899088,1358899095,A2
-1358899096,1358899103,CD
-1358899104,1358899111,A2
-1358899112,1358899119,ZA
-1358899120,1358899127,A2
-1358899128,1358899135,NG
-1358899136,1358899199,A2
-1358899200,1358899207,UG
-1358899208,1358899215,LA
-1358899216,1358899239,US
-1358899240,1358899247,LK
-1358899248,1358899263,A2
-1358899264,1358899295,PK
-1358899296,1358899303,NG
-1358899304,1358899311,AE
-1358899312,1358899327,NG
-1358899328,1358899335,CD
-1358899336,1358899343,NG
-1358899344,1358899359,MR
-1358899360,1358899375,US
-1358899376,1358899383,CD
-1358899384,1358899391,UG
-1358899392,1358899407,A2
-1358899408,1358899415,DE
-1358899416,1358899423,CD
-1358899424,1358899439,A2
-1358899440,1358899455,NG
-1358899456,1358899463,A2
-1358899464,1358899471,US
-1358899472,1358899479,SV
-1358899480,1358899599,A2
-1358899600,1358899607,LK
-1358899608,1358899615,A2
-1358899616,1358899631,NG
-1358899632,1358899647,NP
-1358899648,1358899711,A2
+1358897152,1358899711,GB
1358899712,1358899967,US
1358899968,1358900223,KE
-1358900224,1358900767,A2
-1358900768,1358900783,BI
-1358900784,1358900959,A2
-1358900960,1358900975,SL
-1358900976,1358901807,A2
-1358901808,1358901815,CD
-1358901816,1358901935,A2
-1358901936,1358901951,NG
-1358901952,1358901999,A2
-1358902000,1358902039,NG
-1358902040,1358902063,A2
-1358902064,1358902079,TZ
-1358902080,1358902087,NG
-1358902088,1358902103,MG
-1358902104,1358902143,NG
-1358902144,1358902151,A2
-1358902152,1358902167,NG
-1358902168,1358902175,AU
-1358902176,1358902207,A2
-1358902208,1358902215,US
-1358902216,1358902233,NG
-1358902234,1358902263,A2
-1358902264,1358902271,ZA
-1358902272,1358903615,A2
-1358903616,1358903623,GB
-1358903624,1358903807,A2
-1358903808,1358903951,NG
-1358903952,1358903967,A2
-1358903968,1358903983,CA
-1358903984,1358903999,NG
-1358904000,1358904032,ZA
-1358904033,1358904071,A2
-1358904072,1358904095,US
-1358904096,1358904103,A2
-1358904104,1358904119,US
-1358904120,1358904127,A2
-1358904128,1358904135,US
-1358904136,1358904143,A2
-1358904144,1358904151,NG
-1358904152,1358904167,A2
-1358904168,1358904175,US
-1358904176,1358904191,A2
-1358904192,1358904199,NG
-1358904200,1358904255,US
-1358904256,1358904295,A2
-1358904296,1358904311,NG
-1358904312,1358904551,A2
-1358904552,1358904559,IL
-1358904560,1358904575,A2
-1358904576,1358904701,NG
-1358904702,1358904703,A2
+1358900224,1358904703,GB
1358904704,1358904719,MU
-1358904720,1358904735,KN
+1358904720,1358904735,GB
1358904736,1358904767,ZA
-1358904768,1358904831,NG
-1358904832,1358905095,A2
-1358905096,1358905103,GH
-1358905104,1358905111,A2
-1358905112,1358905119,TZ
-1358905120,1358905127,GY
-1358905128,1358905151,A2
-1358905152,1358905159,MG
-1358905160,1358905167,A2
+1358904768,1358905167,GB
1358905168,1358905183,CD
-1358905184,1358905215,GH
-1358905216,1358905223,US
-1358905224,1358905231,A2
-1358905232,1358905247,GN
-1358905248,1358905279,US
-1358905280,1358905295,A2
-1358905296,1358905303,LR
-1358905304,1358905311,A2
-1358905312,1358905327,US
-1358905328,1358905343,A2
+1358905184,1358905343,GB
1358905344,1358909439,UA
1358909440,1358913535,RU
1358913536,1358917631,CH
1358917632,1358921727,ES
1358921728,1358929919,RU
-1358929920,1358930700,LU
-1358930701,1358930701,EU
-1358930702,1358934015,LU
+1358929920,1358934015,LU
1358934016,1358938111,RU
1358938112,1358946303,GB
1358946304,1358950399,LV
@@ -48381,40 +16158,20 @@
1359063040,1359064063,PL
1359064064,1359101951,RU
1359101952,1359118335,GB
-1359118336,1359118591,DE
-1359118592,1359118719,NL
-1359118720,1359118815,DE
-1359118816,1359118831,NL
-1359118832,1359119199,DE
+1359118336,1359119199,DE
1359119200,1359119231,NL
1359119232,1359119359,DE
1359119360,1359120383,NL
1359120384,1359121407,DK
-1359121408,1359123583,DE
-1359123584,1359123711,SE
-1359123712,1359133311,DE
-1359133312,1359133439,AT
-1359133440,1359134303,DE
-1359134304,1359134319,NL
-1359134320,1359134719,DE
+1359121408,1359134719,DE
1359134720,1359151103,CZ
-1359151104,1359158207,DE
-1359158208,1359158215,CH
-1359158216,1359166175,DE
-1359166176,1359166191,HK
-1359166192,1359167487,DE
-1359167488,1359172095,GB
-1359172096,1359172351,EU
-1359172352,1359183871,GB
+1359151104,1359167487,DE
+1359167488,1359183871,GB
1359183872,1359200255,RU
1359200256,1359216639,AT
1359216640,1359233023,EG
1359233024,1359249407,NL
-1359249408,1359260735,CY
-1359260736,1359260751,A2
-1359260752,1359263743,CY
-1359263744,1359263999,LB
-1359264000,1359265791,CY
+1359249408,1359265791,CY
1359265792,1359282175,RU
1359282176,1359298559,IL
1359298560,1359314943,RU
@@ -48426,29 +16183,10 @@
1359396864,1359413247,GB
1359413248,1359429631,DE
1359429632,1359446015,LT
-1359446016,1359451727,DK
-1359451728,1359451731,US
-1359451732,1359455551,DK
-1359455552,1359455558,PL
-1359455559,1359462399,DK
-1359462400,1359467007,DE
-1359467008,1359467455,US
-1359467456,1359467487,CA
-1359467488,1359467495,DE
-1359467496,1359467647,US
-1359467648,1359467775,DE
-1359467776,1359467863,US
-1359467864,1359467871,DE
-1359467872,1359468287,US
-1359468288,1359468543,DE
-1359468544,1359468799,SG
-1359468800,1359468863,DE
-1359468864,1359468879,SG
-1359468880,1359468927,DE
-1359468928,1359469055,SG
-1359469056,1359469311,DE
-1359469312,1359469567,SG
-1359469568,1359470591,DE
+1359446016,1359462399,DK
+1359462400,1359467775,DE
+1359467776,1359468031,US
+1359468032,1359470591,DE
1359470592,1359478783,CH
1359478784,1359511551,TR
1359511552,1359544319,SE
@@ -48473,21 +16211,10 @@
1360019456,1360023551,FI
1360023552,1360027647,RU
1360027648,1360031743,AT
-1360031744,1360039935,RU
+1360031744,1360035839,RU
1360039936,1360044031,AT
1360044032,1360048127,SE
-1360048128,1360049167,DE
-1360049168,1360049183,GB
-1360049184,1360049199,DE
-1360049200,1360049207,SE
-1360049208,1360049215,IT
-1360049216,1360049223,ES
-1360049224,1360049231,JP
-1360049232,1360049239,US
-1360049240,1360049247,GB
-1360049248,1360050959,DE
-1360050960,1360050975,US
-1360050976,1360052223,DE
+1360048128,1360052223,DE
1360052224,1360056319,HU
1360056320,1360060415,SA
1360060416,1360064511,LT
@@ -48504,17 +16231,8 @@
1360113664,1360117759,HU
1360117760,1360121855,FI
1360121856,1360125951,DE
-1360125952,1360126975,SI
-1360126976,1360127487,HR
-1360127488,1360127999,RS
-1360128000,1360128511,MK
-1360128512,1360129023,SI
-1360129024,1360130047,BA
-1360130048,1360131520,IE
-1360131521,1360131583,GB
-1360131584,1360131903,IE
-1360131904,1360131919,US
-1360131920,1360134143,IE
+1360125952,1360130047,SI
+1360130048,1360134143,IE
1360134144,1360138239,NL
1360138240,1360142335,CH
1360142336,1360146431,KZ
@@ -48529,69 +16247,28 @@
1360195584,1360199679,NL
1360199680,1360203775,CZ
1360203776,1360207871,FR
-1360207872,1360210943,CZ
-1360210944,1360211199,EU
-1360211200,1360211967,CZ
+1360207872,1360211967,CZ
1360211968,1360216063,GB
1360216064,1360224255,RU
-1360224256,1360225663,ES
-1360225664,1360225695,GB
-1360225696,1360228351,ES
+1360224256,1360228351,ES
1360228352,1360232447,FI
1360232448,1360236543,RU
-1360236544,1360239135,AT
-1360239136,1360239167,DE
-1360239168,1360240639,AT
-1360240640,1360244735,ES
-1360244736,1360249855,GB
-1360249856,1360250111,CH
-1360250112,1360251391,GB
-1360251392,1360251647,DE
-1360251648,1360252415,GB
-1360252416,1360252671,CH
-1360252672,1360257023,GB
-1360257024,1360259447,DK
-1360259448,1360259451,US
-1360259452,1360265215,DK
-1360265216,1360265503,NL
-1360265504,1360265511,DE
-1360265512,1360265983,NL
-1360265984,1360265991,PT
-1360265992,1360266567,GB
-1360266568,1360266575,RU
-1360266576,1360266759,GB
-1360266760,1360266767,FR
-1360266768,1360266791,GB
-1360266792,1360266815,ES
-1360266816,1360266847,GB
-1360266848,1360266863,BE
-1360266864,1360266871,FR
-1360266872,1360266879,ES
-1360266880,1360266991,GB
-1360266992,1360266999,BE
-1360267000,1360267007,GB
-1360267008,1360268031,SE
-1360268032,1360268199,FR
-1360268200,1360268207,ES
-1360268208,1360268287,FR
-1360268288,1360269311,GB
+1360236544,1360240639,AT
+1360240640,1360242431,ES
+1360242432,1360244479,US
+1360244480,1360244735,ES
+1360244736,1360257023,GB
+1360257024,1360265215,DK
+1360265216,1360269311,GB
1360269312,1360273407,KG
1360273408,1360281599,GB
1360281600,1360281727,NL
1360281728,1360281855,ES
-1360281856,1360282111,NL
-1360282112,1360282239,ES
-1360282240,1360282495,NL
+1360281856,1360282495,NL
1360282496,1360282623,DE
-1360282624,1360282751,NL
-1360282752,1360282787,GB
-1360282788,1360283519,NL
-1360283520,1360283535,BE
-1360283536,1360285183,NL
-1360285184,1360285335,ES
-1360285336,1360285343,NL
-1360285344,1360285375,ES
-1360285376,1360285695,NL
+1360282624,1360284671,NL
+1360284672,1360284927,DK
+1360284928,1360285695,NL
1360285696,1360289791,DE
1360289792,1360293887,RU
1360293888,1360302079,DE
@@ -48606,9 +16283,7 @@
1360334848,1360338943,IT
1360338944,1360343039,CY
1360343040,1360347135,SA
-1360347136,1360347903,GB
-1360347904,1360348159,ES
-1360348160,1360351231,GB
+1360347136,1360351231,GB
1360351232,1360355327,AZ
1360355328,1360359423,EG
1360359424,1360363519,AT
@@ -48623,11 +16298,7 @@
1360392192,1360396287,EE
1360396288,1360400383,RU
1360400384,1360404479,BH
-1360404480,1360404735,GB
-1360404736,1360404991,DE
-1360404992,1360405247,FR
-1360405248,1360405503,SE
-1360405504,1360408575,GB
+1360404480,1360408575,GB
1360408576,1360412671,RU
1360412672,1360420863,DZ
1360420864,1360424959,TR
@@ -48670,35 +16341,18 @@
1360592896,1360596991,RU
1360596992,1360601087,CZ
1360601088,1360605183,BY
-1360605184,1360613375,RU
+1360605184,1360609279,RU
1360613376,1360617471,SE
1360617472,1360621567,IT
1360621568,1360625663,ES
-1360625664,1360625919,A2
-1360625920,1360626943,DE
-1360626944,1360627199,LB
-1360627200,1360627455,A2
-1360627456,1360627520,IQ
-1360627521,1360627711,DE
-1360627712,1360627743,LB
-1360627744,1360627967,DE
-1360627968,1360628095,IQ
-1360628096,1360628223,LU
-1360628224,1360628479,A2
-1360628480,1360628735,LB
-1360628736,1360628991,IQ
-1360628992,1360629055,TR
-1360629056,1360629247,DE
-1360629248,1360629503,A2
-1360629504,1360629759,IQ
+1360625664,1360629759,DE
1360629760,1360633855,SE
1360633856,1360637951,RU
1360637952,1360642047,FO
1360642048,1360644735,FR
1360644736,1360644863,IT
-1360644864,1360645711,FR
-1360645712,1360645719,GB
-1360645720,1360646143,FR
+1360644864,1360645887,FR
+1360645888,1360646143,GB
1360646144,1360650239,AT
1360650240,1360654335,UA
1360654336,1360658431,EE
@@ -48717,9 +16371,7 @@
1360728064,1360732159,FR
1360732160,1360736255,NO
1360736256,1360740351,RU
-1360740352,1360743679,GB
-1360743680,1360743935,FR
-1360743936,1360748677,GB
+1360740352,1360748677,GB
1360748678,1360748678,IM
1360748679,1360749759,GB
1360749760,1360749791,IM
@@ -48730,9 +16382,7 @@
1360764928,1360769023,DE
1360769024,1360773119,IT
1360773120,1360777215,CZ
-1360777216,1360778559,DK
-1360778560,1360778631,DE
-1360778632,1360781311,DK
+1360777216,1360781311,DK
1360781312,1360785407,DE
1360785408,1360793599,RU
1360793600,1360797695,CZ
@@ -48744,44 +16394,19 @@
1360822272,1360826367,AT
1360826368,1360830463,GB
1360830464,1360838655,RU
-1360838656,1360839167,CH
-1360839168,1360842751,FR
+1360838656,1360842751,FR
1360842752,1360846847,RU
1360846848,1360850943,DE
-1360850944,1360855039,IT
1360855040,1360859135,NL
1360859136,1360863231,LT
1360863232,1360867327,NO
1360867328,1360879615,GB
1360879616,1360883711,EG
1360883712,1360887807,RU
-1360887808,1360890367,FI
-1360890368,1360890623,RU
-1360890624,1360890879,FI
-1360890880,1360891391,RU
-1360891392,1360891647,FI
-1360891648,1360891903,RU
-1360891904,1360892791,CH
-1360892792,1360892799,IT
-1360892800,1360892831,CH
-1360892832,1360892847,MD
-1360892848,1360894335,CH
-1360894336,1360894367,MD
-1360894368,1360894975,CH
-1360894976,1360894983,IT
-1360894984,1360895999,CH
+1360887808,1360891903,FI
+1360891904,1360895999,CH
1360896000,1360900095,QA
-1360900096,1360905391,IT
-1360905392,1360905407,GB
-1360905408,1360906687,IT
-1360906688,1360906719,GB
-1360906720,1360909391,IT
-1360909392,1360909407,GB
-1360909408,1360910495,IT
-1360910496,1360910511,GB
-1360910512,1360910527,IT
-1360910528,1360910559,GB
-1360910560,1360916479,IT
+1360900096,1360916479,IT
1360916480,1360920575,IR
1360920576,1360928767,IT
1360928768,1360932863,NL
@@ -48795,1064 +16420,84 @@
1360961536,1360965631,UA
1360965632,1360977919,RU
1360977920,1360986111,CZ
-1360986112,1360987935,GB
-1360987936,1360987983,SK
-1360987984,1360990207,GB
-1360990208,1360990463,CZ
-1360990464,1360994303,GB
+1360986112,1360994303,GB
1360994304,1360998399,CZ
1360998400,1361002495,FI
-1361002496,1361003776,GB
-1361003777,1361003807,GN
-1361003808,1361006591,GB
+1361002496,1361006591,GB
1361006592,1361010687,DK
1361010688,1361018879,GB
1361018880,1361022975,AT
1361022976,1361027071,IT
1361027072,1361035263,IR
-1361035264,1361035527,NL
-1361035528,1361035535,IT
-1361035536,1361035543,IQ
-1361035544,1361035547,ES
-1361035548,1361035551,DE
-1361035552,1361035555,IQ
-1361035556,1361035559,NL
-1361035560,1361035563,IQ
-1361035564,1361035567,DE
-1361035568,1361035575,ES
-1361035576,1361035583,DE
-1361035584,1361035587,IT
-1361035588,1361035599,IQ
-1361035600,1361035607,NL
-1361035608,1361035615,IT
-1361035616,1361035619,GB
-1361035620,1361035623,IT
-1361035624,1361035627,DE
+1361035264,1361035627,NL
1361035628,1361035631,DZ
-1361035632,1361035635,IT
-1361035636,1361035655,IQ
-1361035656,1361035663,TR
-1361035664,1361035671,IQ
-1361035672,1361035675,IT
-1361035676,1361035679,IQ
-1361035680,1361035683,IE
-1361035684,1361035687,IQ
-1361035688,1361035691,GB
-1361035692,1361035695,IQ
-1361035696,1361035703,NL
-1361035704,1361035715,IQ
-1361035716,1361035723,GB
-1361035724,1361035727,IQ
-1361035728,1361035735,NL
-1361035736,1361035739,IQ
-1361035740,1361035743,IT
-1361035744,1361035751,IQ
-1361035752,1361035755,GB
-1361035756,1361035759,IQ
-1361035760,1361035763,ES
-1361035764,1361035767,NL
-1361035768,1361035775,IQ
-1361035776,1361035779,GB
-1361035780,1361035783,PL
-1361035784,1361035799,IQ
-1361035800,1361035807,TR
-1361035808,1361035811,NL
-1361035812,1361035815,BA
-1361035816,1361035823,NL
-1361035824,1361035831,DE
-1361035832,1361035839,BE
-1361035840,1361035847,ES
-1361035848,1361035851,GB
-1361035852,1361035855,IQ
-1361035856,1361035863,ES
-1361035864,1361035871,BE
-1361035872,1361035875,GB
-1361035876,1361035879,NL
-1361035880,1361035899,IQ
-1361035900,1361035903,NL
-1361035904,1361035907,KW
-1361035908,1361035911,ES
-1361035912,1361035915,IQ
-1361035916,1361035919,IT
-1361035920,1361035923,CH
-1361035924,1361035927,IQ
-1361035928,1361035931,DE
-1361035932,1361035935,TR
-1361035936,1361035943,GB
-1361035944,1361035959,IQ
-1361035960,1361035963,GB
-1361035964,1361035967,CH
-1361035968,1361035975,GB
-1361035976,1361035979,NL
-1361035980,1361035983,IQ
-1361035984,1361035995,DE
-1361035996,1361035999,IE
-1361036000,1361036015,GB
-1361036016,1361036019,IQ
-1361036020,1361036023,NL
-1361036024,1361036031,IQ
-1361036032,1361036039,IE
-1361036040,1361036043,IT
-1361036044,1361036055,IQ
-1361036056,1361036063,NL
-1361036064,1361036071,DE
-1361036072,1361036079,BE
-1361036080,1361036087,FR
-1361036088,1361036095,IT
-1361036096,1361036103,IQ
-1361036104,1361036111,NO
-1361036112,1361036119,RO
-1361036120,1361036127,HU
-1361036128,1361036135,CZ
-1361036136,1361036143,IQ
-1361036144,1361036151,TR
-1361036152,1361036167,ES
-1361036168,1361036175,IQ
-1361036176,1361036191,GB
-1361036192,1361036199,IQ
-1361036200,1361036207,TR
-1361036208,1361036215,IQ
-1361036216,1361036223,DE
-1361036224,1361036239,IQ
-1361036240,1361036243,NL
-1361036244,1361036247,IT
-1361036248,1361036251,TN
-1361036252,1361036255,NL
-1361036256,1361036259,GB
-1361036260,1361036287,IQ
-1361036288,1361036295,IT
-1361036296,1361036299,IQ
-1361036300,1361036303,GB
-1361036304,1361036307,ES
-1361036308,1361036311,NL
-1361036312,1361036315,IQ
-1361036316,1361036319,DZ
-1361036320,1361036327,IQ
-1361036328,1361036331,DZ
-1361036332,1361036335,IT
-1361036336,1361036359,IQ
-1361036360,1361036367,DZ
-1361036368,1361036371,TR
-1361036372,1361036375,GB
-1361036376,1361036379,NL
-1361036380,1361036383,GB
-1361036384,1361036387,DZ
-1361036388,1361036403,IQ
-1361036404,1361036411,IT
-1361036412,1361036415,NL
-1361036416,1361036419,US
-1361036420,1361036423,ES
-1361036424,1361036431,GB
-1361036432,1361036435,EG
-1361036436,1361036459,IQ
-1361036460,1361036471,TR
-1361036472,1361036475,GB
-1361036476,1361036491,IQ
-1361036492,1361036495,GB
-1361036496,1361036515,IQ
-1361036516,1361036519,IT
-1361036520,1361036523,GB
-1361036524,1361036527,IQ
-1361036528,1361036531,IT
-1361036532,1361036535,IQ
-1361036536,1361036551,TR
-1361036552,1361036559,GB
-1361036560,1361036567,IQ
-1361036568,1361036575,NL
-1361036576,1361036579,IQ
-1361036580,1361036583,IT
-1361036584,1361036595,IQ
-1361036596,1361036599,GI
-1361036600,1361036607,IQ
-1361036608,1361036611,GI
-1361036612,1361036615,NL
-1361036616,1361036623,GB
-1361036624,1361036631,IQ
-1361036632,1361036635,GR
-1361036636,1361036639,GB
-1361036640,1361036655,IQ
-1361036656,1361036663,NL
-1361036664,1361036667,DZ
-1361036668,1361036671,CH
-1361036672,1361036675,TR
-1361036676,1361036679,NL
-1361036680,1361036687,IQ
-1361036688,1361036695,NL
-1361036696,1361036703,TR
-1361036704,1361036711,IQ
-1361036712,1361036719,GB
-1361036720,1361036727,IQ
-1361036728,1361036735,US
-1361036736,1361036763,IQ
-1361036764,1361036767,KW
-1361036768,1361036783,US
-1361036784,1361036787,GB
-1361036788,1361036791,IQ
-1361036792,1361036799,NL
-1361036800,1361036823,IQ
-1361036824,1361036827,GB
-1361036828,1361036831,DZ
-1361036832,1361036839,NL
-1361036840,1361036847,IQ
-1361036848,1361036851,DZ
-1361036852,1361036855,IQ
-1361036856,1361036863,NL
-1361036864,1361036867,IQ
-1361036868,1361036871,DE
-1361036872,1361036879,TR
-1361036880,1361036887,US
-1361036888,1361036891,GB
-1361036892,1361036899,NL
-1361036900,1361036919,IQ
-1361036920,1361036923,IT
-1361036924,1361036927,DZ
-1361036928,1361036935,TR
-1361036936,1361036943,NL
-1361036944,1361036991,IQ
-1361036992,1361037007,TR
-1361037008,1361037067,IQ
-1361037068,1361037075,TR
-1361037076,1361037079,HU
-1361037080,1361037087,IQ
-1361037088,1361037091,AF
-1361037092,1361037095,IQ
-1361037096,1361037099,IT
-1361037100,1361037103,TR
-1361037104,1361037111,NL
-1361037112,1361037115,US
-1361037116,1361037119,NL
-1361037120,1361037123,US
-1361037124,1361037127,IQ
-1361037128,1361037143,NL
-1361037144,1361037151,IQ
-1361037152,1361037159,US
-1361037160,1361037171,IQ
-1361037172,1361037175,TR
-1361037176,1361037179,IQ
-1361037180,1361037183,GB
-1361037184,1361037203,IQ
-1361037204,1361037207,FR
-1361037208,1361037215,DE
-1361037216,1361037255,IQ
-1361037256,1361037263,NL
-1361037264,1361037271,IQ
-1361037272,1361037279,NL
-1361037280,1361037295,IQ
-1361037296,1361037311,DZ
-1361037312,1361037319,IQ
-1361037320,1361037327,GB
-1361037328,1361037351,IQ
-1361037352,1361037359,NL
-1361037360,1361037367,IQ
-1361037368,1361037375,TR
-1361037376,1361037391,IQ
-1361037392,1361037395,IT
-1361037396,1361037399,US
-1361037400,1361037407,DZ
-1361037408,1361037415,TR
-1361037416,1361037439,IQ
-1361037440,1361037447,TR
-1361037448,1361037455,IQ
-1361037456,1361037463,DZ
-1361037464,1361037471,CH
-1361037472,1361037479,NL
-1361037480,1361037487,DZ
-1361037488,1361037503,IQ
-1361037504,1361037511,DE
-1361037512,1361037527,IQ
-1361037528,1361037531,NL
-1361037532,1361037535,DZ
-1361037536,1361037551,TR
-1361037552,1361037567,IQ
-1361037568,1361037575,TR
-1361037576,1361037583,IQ
-1361037584,1361037587,GB
-1361037588,1361037591,NL
-1361037592,1361037607,IQ
-1361037608,1361037611,NL
-1361037612,1361037615,ES
-1361037616,1361037619,NL
-1361037620,1361037627,ES
-1361037628,1361037631,IT
-1361037632,1361037639,DZ
-1361037640,1361037667,IQ
-1361037668,1361037671,DZ
-1361037672,1361037679,TR
-1361037680,1361037683,IQ
-1361037684,1361037687,TR
-1361037688,1361037695,IQ
-1361037696,1361037703,TR
-1361037704,1361037771,IQ
-1361037772,1361037775,GB
-1361037776,1361037783,NL
-1361037784,1361037819,IQ
-1361037820,1361037823,NL
-1361037824,1361037835,IQ
-1361037836,1361037839,ES
-1361037840,1361037847,IQ
-1361037848,1361037851,NL
-1361037852,1361037855,ES
-1361037856,1361037871,IQ
-1361037872,1361037875,ES
-1361037876,1361037879,NL
-1361037880,1361037883,PT
-1361037884,1361037891,IQ
-1361037892,1361037895,ES
-1361037896,1361037899,NL
-1361037900,1361037903,IQ
-1361037904,1361037907,NL
-1361037908,1361037911,US
-1361037912,1361037919,NL
-1361037920,1361037999,IQ
-1361038000,1361038015,NL
-1361038016,1361038023,IQ
-1361038024,1361038031,IT
-1361038032,1361038039,IQ
-1361038040,1361038047,US
-1361038048,1361038055,IQ
-1361038056,1361038071,NL
-1361038072,1361038087,IQ
-1361038088,1361038095,NL
-1361038096,1361038103,US
-1361038104,1361038119,IQ
-1361038120,1361038127,NL
-1361038128,1361038135,MA
-1361038136,1361038143,IQ
-1361038144,1361038147,NL
-1361038148,1361038159,GB
-1361038160,1361038163,NL
-1361038164,1361038175,GB
-1361038176,1361038179,NL
-1361038180,1361038191,GB
-1361038192,1361038195,NL
-1361038196,1361038199,IQ
-1361038200,1361038211,GB
-1361038212,1361038215,NL
-1361038216,1361038223,GB
-1361038224,1361038231,IQ
-1361038232,1361038239,DE
-1361038240,1361038247,IQ
-1361038248,1361038271,US
-1361038272,1361038275,GB
-1361038276,1361038279,NL
-1361038280,1361038287,GB
-1361038288,1361038295,NL
-1361038296,1361038303,DE
-1361038304,1361038311,IQ
-1361038312,1361038319,NL
-1361038320,1361038335,US
-1361038336,1361039359,NL
+1361035632,1361039359,NL
1361039360,1361041407,IE
1361041408,1361042431,NL
1361042432,1361043455,PL
1361043456,1361051647,IR
1361051648,1362100223,ES
-1362100224,1362395135,FR
-1362395136,1362395183,CH
-1362395184,1362395391,FR
-1362395392,1362395519,SG
-1362395520,1362395647,FR
+1362100224,1362395647,FR
1362395648,1362396159,US
1362396160,1362396415,FR
1362396416,1362396927,US
-1362396928,1362397183,CM
-1362397184,1362397255,GB
-1362397256,1362397439,FR
+1362396928,1362397439,FR
1362397440,1362397503,US
1362397504,1362398463,FR
1362398464,1362398719,DE
1362398720,1362403583,FR
-1362403584,1362405887,DZ
+1362403584,1362404351,DZ
+1362404352,1362404607,FR
+1362404608,1362405887,DZ
1362405888,1362406143,FR
1362406144,1362407167,SV
-1362407168,1362407423,FR
-1362407424,1362407431,US
-1362407432,1362407439,FR
-1362407440,1362407447,US
-1362407448,1362407455,FR
-1362407456,1362407519,US
-1362407520,1362407615,FR
-1362407616,1362407647,HK
-1362407648,1362407679,FR
-1362407680,1362407743,US
-1362407744,1362407839,FR
-1362407840,1362407871,US
-1362407872,1362407887,HK
-1362407888,1362407903,US
-1362407904,1362407919,HK
-1362407920,1362407935,US
-1362407936,1362409727,FR
-1362409728,1362409983,HK
-1362409984,1362411519,FR
+1362407168,1362411519,FR
1362411520,1362413273,MQ
-1362413274,1362413567,FR
-1362413568,1362413587,CM
-1362413588,1362414079,FR
+1362413274,1362414079,FR
1362414080,1362414847,US
1362414848,1362415103,GB
1362415104,1362415359,FR
1362415360,1362415615,DE
1362415616,1362417663,GP
1362417664,1362419711,SG
-1362419712,1362423039,FR
-1362423040,1362423167,SG
-1362423168,1362423231,FR
-1362423232,1362423239,GB
-1362423240,1362423263,FR
-1362423264,1362423295,SG
-1362423296,1362423807,VE
+1362419712,1362423807,FR
1362423808,1362425855,SG
1362425856,1362426623,US
1362426624,1362426879,FR
-1362426880,1362427903,MQ
-1362427904,1362755583,FR
-1362755584,1362759695,NL
-1362759696,1362759703,BE
-1362759704,1362759711,NL
-1362759712,1362759727,BE
-1362759728,1362759735,NL
-1362759736,1362759767,BE
-1362759768,1362759775,NL
-1362759776,1362759791,BE
-1362759792,1362759815,NL
-1362759816,1362759847,BE
-1362759848,1362759863,NL
-1362759864,1362759879,BE
-1362759880,1362759895,NL
-1362759896,1362759903,BE
-1362759904,1362759919,NL
-1362759920,1362759927,BE
-1362759928,1362759943,NL
-1362759944,1362759967,BE
-1362759968,1362759983,NL
-1362759984,1362759999,BE
-1362760000,1362760007,NL
-1362760008,1362760031,BE
-1362760032,1362760039,NL
-1362760040,1362760047,BE
-1362760048,1362760055,NL
-1362760056,1362760087,BE
-1362760088,1362760111,NL
-1362760112,1362760119,BE
-1362760120,1362760167,NL
-1362760168,1362760191,BE
-1362760192,1362760215,NL
-1362760216,1362760223,BE
-1362760224,1362760239,NL
-1362760240,1362760271,BE
-1362760272,1362760279,NL
-1362760280,1362760287,BE
-1362760288,1362760303,NL
-1362760304,1362760351,BE
-1362760352,1362760375,NL
-1362760376,1362760383,BE
-1362760384,1362760391,NL
-1362760392,1362760399,BE
-1362760400,1362760423,NL
-1362760424,1362760439,BE
-1362760440,1362760447,NL
-1362760448,1362760455,BE
-1362760456,1362760471,NL
-1362760472,1362760479,BE
-1362760480,1362760503,NL
-1362760504,1362760511,BE
-1362760512,1362760519,NL
-1362760520,1362760535,BE
-1362760536,1362760559,NL
-1362760560,1362760567,BE
-1362760568,1362760575,NL
-1362760576,1362760591,BE
-1362760592,1362760615,NL
-1362760616,1362760639,BE
-1362760640,1362760647,NL
-1362760648,1362760663,BE
-1362760664,1362760671,NL
-1362760672,1362760679,BE
-1362760680,1362760687,NL
-1362760688,1362760703,BE
-1362760704,1362760711,NL
-1362760712,1362760719,BE
-1362760720,1362760735,NL
-1362760736,1362760751,BE
-1362760752,1362760783,NL
-1362760784,1362760815,BE
-1362760816,1362760831,NL
-1362760832,1362760839,BE
-1362760840,1362760863,NL
-1362760864,1362760879,BE
-1362760880,1362760887,NL
-1362760888,1362760903,BE
-1362760904,1362760919,NL
-1362760920,1362760927,BE
-1362760928,1362760967,NL
-1362760968,1362760983,BE
-1362760984,1362761007,NL
-1362761008,1362761023,BE
-1362761024,1362761031,NL
-1362761032,1362761063,BE
-1362761064,1362761103,NL
-1362761104,1362761111,BE
-1362761112,1362761119,NL
-1362761120,1362761127,BE
-1362761128,1362761159,NL
-1362761160,1362761167,BE
-1362761168,1362761175,NL
-1362761176,1362761199,BE
-1362761200,1362761207,NL
-1362761208,1362761215,BE
-1362761216,1362761247,NL
-1362761248,1362761255,BE
-1362761256,1362761279,NL
-1362761280,1362761287,BE
-1362761288,1362761303,NL
-1362761304,1362761311,BE
-1362761312,1362761319,NL
-1362761320,1362761327,BE
-1362761328,1362761407,NL
-1362761408,1362761415,BE
-1362761416,1362761463,NL
-1362761464,1362761471,BE
-1362761472,1362761495,NL
-1362761496,1362761503,BE
-1362761504,1362761519,NL
-1362761520,1362761535,BE
-1362761536,1362761559,NL
-1362761560,1362761567,BE
-1362761568,1362761583,NL
-1362761584,1362761591,BE
-1362761592,1362761607,NL
-1362761608,1362761623,BE
-1362761624,1362761631,NL
-1362761632,1362761647,BE
-1362761648,1362761663,NL
-1362761664,1362761679,BE
-1362761680,1362761687,NL
-1362761688,1362761695,BE
-1362761696,1362761719,NL
-1362761720,1362761727,BE
-1362761728,1362761743,NL
-1362761744,1362761767,BE
-1362761768,1362761879,NL
-1362761880,1362761895,BE
-1362761896,1362761959,NL
-1362761960,1362761967,BE
-1362761968,1362761983,NL
-1362761984,1362761999,BE
-1362762000,1362762007,NL
-1362762008,1362762015,BE
-1362762016,1362762031,NL
-1362762032,1362762039,BE
-1362762040,1362762047,NL
-1362762048,1362762063,BE
-1362762064,1362762071,NL
-1362762072,1362762079,BE
-1362762080,1362762095,NL
-1362762096,1362762127,BE
-1362762128,1362762135,NL
-1362762136,1362762143,BE
-1362762144,1362762151,NL
-1362762152,1362762175,BE
-1362762176,1362762183,NL
-1362762184,1362762199,BE
-1362762200,1362762207,NL
-1362762208,1362762215,BE
-1362762216,1362762231,NL
-1362762232,1362762255,BE
-1362762256,1362762263,NL
-1362762264,1362762271,BE
-1362762272,1362762279,NL
-1362762280,1362762287,BE
-1362762288,1362762335,NL
-1362762336,1362762343,BE
-1362762344,1362762351,NL
-1362762352,1362762367,BE
-1362762368,1362762423,NL
-1362762424,1362762439,BE
-1362762440,1362762447,NL
-1362762448,1362762455,BE
-1362762456,1362762495,NL
-1362762496,1362762527,BE
-1362762528,1362762535,NL
-1362762536,1362762567,BE
-1362762568,1362762583,NL
-1362762584,1362762599,BE
-1362762600,1362762647,NL
-1362762648,1362762655,BE
-1362762656,1362762719,NL
-1362762720,1362762727,BE
-1362762728,1362762791,NL
-1362762792,1362762807,BE
-1362762808,1362762863,NL
-1362762864,1362762879,BE
-1362762880,1362762903,NL
-1362762904,1362762911,BE
-1362762912,1362762951,NL
-1362762952,1362762983,BE
-1362762984,1362762991,NL
-1362762992,1362763031,BE
-1362763032,1362763047,NL
-1362763048,1362763055,BE
-1362763056,1362763079,NL
-1362763080,1362763087,BE
-1362763088,1362763103,NL
-1362763104,1362763119,BE
-1362763120,1362763143,NL
-1362763144,1362763151,BE
-1362763152,1362763159,NL
-1362763160,1362763175,BE
-1362763176,1362763183,NL
-1362763184,1362763191,BE
-1362763192,1362763223,NL
-1362763224,1362763231,BE
-1362763232,1362763287,NL
-1362763288,1362763295,BE
-1362763296,1362763303,NL
-1362763304,1362763311,BE
-1362763312,1362763335,NL
-1362763336,1362763343,BE
-1362763344,1362763367,NL
-1362763368,1362763375,BE
-1362763376,1362763383,NL
-1362763384,1362763415,BE
-1362763416,1362763423,NL
-1362763424,1362763439,BE
-1362763440,1362763455,NL
-1362763456,1362763463,BE
-1362763464,1362763471,NL
-1362763472,1362763479,BE
-1362763480,1362763503,NL
-1362763504,1362763519,BE
-1362763520,1362763535,NL
-1362763536,1362763543,BE
-1362763544,1362763599,NL
-1362763600,1362763615,BE
-1362763616,1362763623,NL
-1362763624,1362763631,BE
-1362763632,1362763679,NL
-1362763680,1362763687,BE
-1362763688,1362763695,NL
-1362763696,1362763703,BE
-1362763704,1362763735,NL
-1362763736,1362763751,BE
-1362763752,1362763767,NL
-1362763768,1362763791,BE
-1362763792,1362763799,NL
-1362763800,1362763815,BE
-1362763816,1362763903,NL
-1362763904,1362763927,BE
-1362763928,1362763967,NL
-1362763968,1362763975,BE
-1362763976,1362763991,NL
-1362763992,1362763999,BE
-1362764000,1362764023,NL
-1362764024,1362764031,BE
-1362764032,1362764039,NL
-1362764040,1362764047,BE
-1362764048,1362764063,NL
-1362764064,1362764087,BE
-1362764088,1362764103,NL
-1362764104,1362764111,BE
-1362764112,1362764135,NL
-1362764136,1362764143,BE
-1362764144,1362764159,NL
-1362764160,1362764167,BE
-1362764168,1362764175,NL
-1362764176,1362764183,BE
-1362764184,1362764199,NL
-1362764200,1362764207,BE
-1362764208,1362764239,NL
-1362764240,1362764247,BE
-1362764248,1362764255,NL
-1362764256,1362764263,BE
-1362764264,1362764311,NL
-1362764312,1362764327,BE
-1362764328,1362764335,NL
-1362764336,1362764351,BE
-1362764352,1362764367,NL
-1362764368,1362764375,BE
-1362764376,1362764383,NL
-1362764384,1362764391,BE
-1362764392,1362764407,NL
-1362764408,1362764415,BE
-1362764416,1362764431,NL
-1362764432,1362764439,BE
-1362764440,1362764495,NL
-1362764496,1362764527,BE
-1362764528,1362764535,NL
-1362764536,1362764543,BE
-1362764544,1362764551,NL
-1362764552,1362764559,BE
-1362764560,1362764567,NL
-1362764568,1362764575,BE
-1362764576,1362764607,NL
-1362764608,1362764615,BE
-1362764616,1362764623,NL
-1362764624,1362764639,BE
-1362764640,1362764655,NL
-1362764656,1362764679,BE
-1362764680,1362764695,NL
-1362764696,1362764703,BE
-1362764704,1362764711,NL
-1362764712,1362764735,BE
-1362764736,1362764743,NL
-1362764744,1362764751,BE
-1362764752,1362764759,NL
-1362764760,1362764775,BE
-1362764776,1362764791,NL
-1362764792,1362764807,BE
-1362764808,1362764823,NL
-1362764824,1362764831,BE
-1362764832,1362764847,NL
-1362764848,1362764855,BE
-1362764856,1362764871,NL
-1362764872,1362764887,BE
-1362764888,1362764895,NL
-1362764896,1362764911,BE
-1362764912,1362764927,NL
-1362764928,1362764935,BE
-1362764936,1362764975,NL
-1362764976,1362764991,BE
-1362764992,1362764999,NL
-1362765000,1362765015,BE
-1362765016,1362765023,NL
-1362765024,1362765047,BE
-1362765048,1362765063,NL
-1362765064,1362765071,BE
-1362765072,1362765079,NL
-1362765080,1362765087,BE
-1362765088,1362765095,NL
-1362765096,1362765127,BE
-1362765128,1362765135,NL
-1362765136,1362765151,BE
-1362765152,1362765175,NL
-1362765176,1362765191,BE
-1362765192,1362765199,NL
-1362765200,1362765215,BE
-1362765216,1362765239,NL
-1362765240,1362765247,BE
-1362765248,1362765255,NL
-1362765256,1362765263,BE
-1362765264,1362765311,NL
-1362765312,1362765319,BE
-1362765320,1362765327,NL
-1362765328,1362765343,BE
-1362765344,1362765375,NL
-1362765376,1362765407,BE
-1362765408,1362765415,NL
-1362765416,1362765431,BE
-1362765432,1362765447,NL
-1362765448,1362765455,BE
-1362765456,1362765463,NL
-1362765464,1362765471,BE
-1362765472,1362765495,NL
-1362765496,1362765511,BE
-1362765512,1362765519,NL
-1362765520,1362765535,BE
-1362765536,1362765551,NL
-1362765552,1362765559,BE
-1362765560,1362765575,NL
-1362765576,1362765599,BE
-1362765600,1362765607,NL
-1362765608,1362765615,BE
-1362765616,1362765639,NL
-1362765640,1362765647,BE
-1362765648,1362765655,NL
-1362765656,1362765663,BE
-1362765664,1362765703,NL
-1362765704,1362765711,BE
-1362765712,1362765727,NL
-1362765728,1362765735,BE
-1362765736,1362765759,NL
-1362765760,1362765767,BE
-1362765768,1362765783,NL
-1362765784,1362765807,BE
-1362765808,1362765823,NL
-1362765824,1362765847,BE
-1362765848,1362765919,NL
-1362765920,1362765943,BE
-1362765944,1362765959,NL
-1362765960,1362765967,BE
-1362765968,1362765991,NL
-1362765992,1362766015,BE
-1362766016,1362766031,NL
-1362766032,1362766071,BE
-1362766072,1362766095,NL
-1362766096,1362766119,BE
-1362766120,1362766127,NL
-1362766128,1362766143,BE
-1362766144,1362766151,NL
-1362766152,1362766159,BE
-1362766160,1362766175,NL
-1362766176,1362766183,BE
-1362766184,1362766191,NL
-1362766192,1362766207,BE
-1362766208,1362766215,NL
-1362766216,1362766231,BE
-1362766232,1362766247,NL
-1362766248,1362766255,BE
-1362766256,1362766279,NL
-1362766280,1362766295,BE
-1362766296,1362766319,NL
-1362766320,1362766335,BE
-1362766336,1362766351,NL
-1362766352,1362766359,BE
-1362766360,1362766375,NL
-1362766376,1362766383,BE
-1362766384,1362766407,NL
-1362766408,1362766447,BE
-1362766448,1362766479,NL
-1362766480,1362766487,BE
-1362766488,1362766503,NL
-1362766504,1362766511,BE
-1362766512,1362766527,NL
-1362766528,1362766535,BE
-1362766536,1362766551,NL
-1362766552,1362766591,BE
-1362766592,1362766599,NL
-1362766600,1362766615,BE
-1362766616,1362766623,NL
-1362766624,1362766639,BE
-1362766640,1362766647,NL
-1362766648,1362766663,BE
-1362766664,1362766671,NL
-1362766672,1362766687,BE
-1362766688,1362766703,NL
-1362766704,1362766711,BE
-1362766712,1362766727,NL
-1362766728,1362766751,BE
-1362766752,1362766759,NL
-1362766760,1362766767,BE
-1362766768,1362766831,NL
-1362766832,1362766847,BE
-1362766848,1362766863,NL
-1362766864,1362766871,BE
-1362766872,1362766879,NL
-1362766880,1362766887,BE
-1362766888,1362766895,NL
-1362766896,1362766903,BE
-1362766904,1362766911,NL
-1362766912,1362766919,BE
-1362766920,1362766927,NL
-1362766928,1362766935,BE
-1362766936,1362766943,NL
-1362766944,1362766959,BE
-1362766960,1362766967,NL
-1362766968,1362766983,BE
-1362766984,1362766999,NL
-1362767000,1362767031,BE
-1362767032,1362767039,NL
-1362767040,1362767063,BE
-1362767064,1362767079,NL
-1362767080,1362767087,BE
-1362767088,1362767095,NL
-1362767096,1362767103,BE
-1362767104,1362767111,NL
-1362767112,1362767127,BE
-1362767128,1362767135,NL
-1362767136,1362767143,BE
-1362767144,1362767199,NL
-1362767200,1362767207,BE
-1362767208,1362767223,NL
-1362767224,1362767231,BE
-1362767232,1362767239,NL
-1362767240,1362767255,BE
-1362767256,1362767303,NL
-1362767304,1362767319,BE
-1362767320,1362767327,NL
-1362767328,1362767335,BE
-1362767336,1362767343,NL
-1362767344,1362767367,BE
-1362767368,1362767375,NL
-1362767376,1362767383,BE
-1362767384,1362767407,NL
-1362767408,1362767423,BE
-1362767424,1362767447,NL
-1362767448,1362767463,BE
-1362767464,1362767479,NL
-1362767480,1362767495,BE
-1362767496,1362767527,NL
-1362767528,1362767535,BE
-1362767536,1362767543,NL
-1362767544,1362767551,BE
-1362767552,1362767559,NL
-1362767560,1362767575,BE
-1362767576,1362767607,NL
-1362767608,1362767639,BE
-1362767640,1362767647,NL
-1362767648,1362767663,BE
-1362767664,1362767671,NL
-1362767672,1362767679,BE
-1362767680,1362767695,NL
-1362767696,1362767711,BE
-1362767712,1362767719,NL
-1362767720,1362767759,BE
-1362767760,1362767767,NL
-1362767768,1362767775,BE
-1362767776,1362767783,NL
-1362767784,1362767807,BE
-1362767808,1362767815,NL
-1362767816,1362767839,BE
-1362767840,1362767863,NL
-1362767864,1362767871,BE
-1362767872,1362813695,NL
-1362813696,1362817023,BE
-1362817024,1362817031,NL
-1362817032,1362817039,BE
-1362817040,1362817047,NL
-1362817048,1362817087,BE
-1362817088,1362817103,NL
-1362817104,1362817119,BE
-1362817120,1362817151,NL
-1362817152,1362817215,BE
-1362817216,1362817271,NL
-1362817272,1362817279,BE
-1362817280,1362817311,NL
-1362817312,1362817343,BE
-1362817344,1362817359,NL
-1362817360,1362817375,BE
-1362817376,1362817439,NL
-1362817440,1362817455,BE
-1362817456,1362817563,NL
-1362817564,1362817583,BE
-1362817584,1362817655,NL
-1362817656,1362817663,BE
-1362817664,1362817743,NL
-1362817744,1362818091,BE
-1362818092,1362818092,NL
-1362818093,1362820095,BE
-1362820096,1362837503,NL
-1362837504,1362845695,BE
-1362845696,1362870271,NL
-1362870272,1362872319,BE
-1362872320,1362872335,NL
-1362872336,1362872343,BE
-1362872344,1362872351,NL
-1362872352,1362873855,BE
-1362873856,1362873859,NL
-1362873860,1362874367,BE
-1362874368,1362874375,NL
-1362874376,1362875903,BE
-1362875904,1362875907,NL
-1362875908,1362876423,BE
-1362876424,1362876431,NL
-1362876432,1362876439,BE
-1362876440,1362876447,NL
-1362876448,1362876455,BE
-1362876456,1362876463,NL
-1362876464,1362876471,BE
-1362876472,1362876535,NL
-1362876536,1362876543,BE
-1362876544,1362876583,NL
-1362876584,1362877963,BE
-1362877964,1362877979,NL
-1362877980,1362877983,BE
-1362877984,1362877999,NL
-1362878000,1362878003,BE
-1362878004,1362878015,NL
-1362878016,1362878463,BE
-1362878464,1362878471,NL
-1362878472,1362879999,BE
-1362880000,1362880003,NL
-1362880004,1362880527,BE
-1362880528,1362880727,NL
-1362880728,1362880735,BE
-1362880736,1362880743,NL
-1362880744,1362880751,BE
-1362880752,1362881023,NL
-1362881024,1362881055,BE
-1362881056,1362881087,NL
-1362881088,1362881103,BE
-1362881104,1362881111,NL
-1362881112,1362882047,BE
-1362882048,1362882051,NL
-1362882052,1362882055,BE
-1362882056,1362882067,NL
-1362882068,1362882071,BE
-1362882072,1362882143,NL
-1362882144,1362882155,BE
-1362882156,1362882179,NL
-1362882180,1362882183,BE
-1362882184,1362882207,NL
-1362882208,1362882211,BE
-1362882212,1362882219,NL
-1362882220,1362882223,BE
-1362882224,1362882231,NL
-1362882232,1362884095,BE
-1362884096,1362884099,NL
-1362884100,1362885119,BE
-1362885120,1362886399,NL
-1362886400,1362886400,BE
-1362886401,1362886409,NL
-1362886410,1362886413,BE
-1362886414,1362886416,NL
-1362886417,1362886419,BE
-1362886420,1362886421,NL
-1362886422,1362886422,BE
-1362886423,1362886423,NL
-1362886424,1362886655,BE
+1362426880,1362427815,MQ
+1362427816,1362755583,FR
+1362755584,1362886655,NL
1362886656,1363017727,ES
1363017728,1363148799,CH
1363148800,1363410943,FR
1363410944,1363673087,NL
1363673088,1363935231,IT
1363935232,1364197375,GB
-1364197376,1364262911,FR
+1364197376,1364212991,FR
+1364212992,1364213247,GF
+1364213248,1364262911,FR
1364262912,1364328447,IT
1364328448,1364459519,BE
1364459520,1364525055,PT
-1364525056,1364525311,NL
-1364525312,1364525567,A2
-1364525568,1364526335,NL
-1364526336,1364526591,US
+1364525056,1364526591,NL
1364526592,1364528639,GB
-1364528640,1364528895,UA
-1364528896,1364530175,GB
-1364530176,1364531455,NL
-1364531456,1364531711,IT
-1364531712,1364537459,NL
-1364537460,1364537463,GB
-1364537464,1364537511,NL
-1364537512,1364537519,GB
-1364537520,1364540671,NL
-1364540672,1364540927,US
-1364540928,1364577023,NL
-1364577024,1364577279,GB
-1364577280,1364577791,NL
-1364577792,1364578303,GB
-1364578304,1364579839,NL
-1364579840,1364580095,US
-1364580096,1364581375,NL
+1364528640,1364529663,NL
+1364529664,1364530175,GB
+1364530176,1364541439,NL
+1364541440,1364545535,SE
+1364545536,1364581375,NL
1364581376,1364582399,LY
-1364582400,1364583423,US
-1364583424,1364585727,NL
+1364582400,1364585727,NL
1364585728,1364585983,CA
-1364585984,1364586240,LB
-1364586241,1364586495,NL
-1364586496,1364586752,LB
-1364586753,1364588977,NL
-1364588978,1364588978,US
-1364588979,1364589567,NL
-1364589568,1364589823,A2
-1364589824,1364590591,NL
+1364585984,1364586239,LB
+1364586240,1364590591,NL
1364590592,1364721663,GB
1364721664,1364725759,SE
1364725760,1364733951,DE
1364733952,1364738047,IT
1364738048,1364742143,NO
1364742144,1364746239,RU
-1364746240,1364749311,FR
-1364749312,1364749374,BE
-1364749375,1364749455,FR
-1364749456,1364749463,BE
-1364749464,1364749471,FR
-1364749472,1364749583,BE
-1364749584,1364749599,FR
-1364749600,1364749696,BE
-1364749697,1364749823,FR
-1364749824,1364749983,BE
-1364749984,1364749991,FR
-1364749992,1364750079,BE
-1364750080,1364750335,FR
+1364746240,1364750335,FR
1364750336,1364754431,RU
1364754432,1364758527,SK
1364758528,1364762623,KZ
@@ -49867,20 +16512,13 @@
1364803584,1364809727,RU
1364809728,1364815871,DE
1364815872,1364819967,RU
-1364819968,1364823295,GB
-1364823296,1364823311,AE
-1364823312,1364824063,GB
+1364819968,1364824063,GB
1364824064,1364828159,SE
-1364828160,1364829439,GB
-1364829440,1364829487,FR
-1364829488,1364829503,GB
-1364829504,1364829527,FR
-1364829528,1364832255,GB
+1364828160,1364832255,GB
1364832256,1364836351,RU
1364836352,1364840447,DE
1364840448,1364844543,AM
-1364844544,1364852479,DE
-1364852480,1364852735,GB
+1364844544,1364852735,DE
1364852736,1364856831,RU
1364856832,1364860927,IQ
1364860928,1364865023,DE
@@ -49904,123 +16542,40 @@
1364934656,1364938751,FR
1364938752,1364942847,CZ
1364942848,1364946943,GB
-1364946944,1364947167,TR
-1364947168,1364947199,US
-1364947200,1364948479,GB
-1364948480,1364949247,TR
-1364949248,1364949503,CY
-1364949504,1364949759,TR
-1364949760,1364950015,CY
-1364950016,1364950527,TR
-1364950528,1364950783,CY
-1364950784,1364950847,TR
-1364950848,1364950911,GB
-1364950912,1364951039,TR
+1364946944,1364951039,TR
1364951040,1364959231,IR
1364959232,1364963327,DE
1364963328,1364967423,RU
-1364967424,1364969983,GB
-1364969984,1364970239,FR
-1364970240,1364970495,US
-1364970496,1364971519,GB
+1364967424,1364971519,GB
1364971520,1364975615,CZ
1364975616,1364979711,BJ
-1364979712,1364982783,GB
-1364982784,1364983295,CH
-1364983296,1364983551,US
-1364983552,1364983807,GB
+1364979712,1364983039,GB
+1364983040,1364983295,CH
+1364983296,1364983807,GB
1364983808,1364991999,DE
1364992000,1364996095,IT
1364996096,1365000191,GR
-1365000192,1365002751,SE
-1365002752,1365003263,GB
-1365003264,1365003903,SE
-1365003904,1365004035,GB
-1365004036,1365004039,SE
-1365004040,1365004047,GB
-1365004048,1365004063,SE
-1365004064,1365004287,GB
+1365000192,1365004287,SE
1365004288,1365008383,FR
1365008384,1365012479,CH
-1365012480,1365012735,FR
-1365012736,1365013503,US
-1365013504,1365013631,FR
-1365013632,1365013855,US
-1365013856,1365013983,FR
-1365013984,1365014015,GB
-1365014016,1365014239,US
-1365014240,1365014271,FR
-1365014272,1365015551,US
-1365015552,1365015903,FR
+1365012480,1365015903,US
1365015904,1365015919,GB
-1365015920,1365015927,DE
-1365015928,1365015935,ES
-1365015936,1365016047,US
-1365016048,1365016063,CN
-1365016064,1365016079,FR
-1365016080,1365016095,US
-1365016096,1365016111,FR
-1365016112,1365016255,US
-1365016256,1365016319,FR
-1365016320,1365016575,US
+1365015920,1365016575,US
1365016576,1365020671,ES
1365020672,1365024767,CZ
-1365024768,1365027839,DE
-1365027840,1365027871,US
-1365027872,1365028863,DE
+1365024768,1365028863,DE
1365028864,1365032959,NL
1365032960,1365041151,PT
-1365041152,1365041407,IQ
-1365041408,1365041663,LU
-1365041664,1365041695,FR
-1365041696,1365041727,GB
-1365041728,1365042047,LU
+1365041152,1365042047,FR
1365042048,1365042055,GB
-1365042056,1365042175,LU
-1365042176,1365044223,FR
-1365044224,1365044287,BE
-1365044288,1365044479,FR
-1365044480,1365044607,LU
-1365044608,1365044639,BE
-1365044640,1365044655,LU
-1365044656,1365044719,FR
-1365044720,1365044815,LU
-1365044816,1365044831,BE
-1365044832,1365044895,LU
-1365044896,1365044911,FR
-1365044912,1365044927,LU
+1365042056,1365044735,FR
+1365044736,1365044799,LU
+1365044800,1365044927,FR
1365044928,1365044935,GR
-1365044936,1365044959,LU
-1365044960,1365044975,BE
-1365044976,1365045247,LU
-1365045248,1365045535,AT
-1365045536,1365045543,BA
-1365045544,1365045551,BG
-1365045552,1365045559,DE
-1365045560,1365045567,GB
-1365045568,1365045575,HR
-1365045576,1365045583,AT
-1365045584,1365045591,PL
-1365045592,1365045599,RO
-1365045600,1365045607,RU
-1365045608,1365045615,RS
-1365045616,1365045623,SI
-1365045624,1365045631,SK
-1365045632,1365045639,CZ
-1365045640,1365045647,UA
-1365045648,1365045663,HU
-1365045664,1365047039,AT
-1365047040,1365047103,SK
-1365047104,1365047295,AT
-1365047296,1365047647,SK
-1365047648,1365047679,AT
-1365047680,1365047807,SK
-1365047808,1365047871,AT
-1365047872,1365047903,SK
-1365047904,1365047999,AT
-1365048000,1365048191,SK
-1365048192,1365048255,AT
-1365048256,1365049343,SK
+1365044936,1365044943,LU
+1365044944,1365045247,FR
+1365045248,1365047295,AT
+1365047296,1365049343,SK
1365049344,1365057535,FR
1365057536,1365061631,IT
1365061632,1365065727,NL
@@ -50029,59 +16584,23 @@
1365078016,1365082111,DE
1365082112,1365090303,SE
1365090304,1365094399,NO
-1365094400,1365094655,FR
-1365094656,1365094911,BG
-1365094912,1365095087,FR
-1365095088,1365095095,GB
-1365095096,1365095575,FR
-1365095576,1365095583,GB
-1365095584,1365096703,FR
-1365096704,1365096711,GB
-1365096712,1365096735,FR
-1365096736,1365096767,IT
-1365096768,1365098495,FR
+1365094400,1365098495,FR
1365098496,1365102591,HU
-1365102592,1365102911,ES
-1365102912,1365102919,GB
-1365102920,1365103383,ES
-1365103384,1365103391,GB
-1365103392,1365103479,ES
-1365103480,1365103487,GB
-1365103488,1365103519,ES
-1365103520,1365103551,GB
-1365103552,1365103679,ES
-1365103680,1365103743,GB
-1365103744,1365103775,ES
-1365103776,1365103791,GB
-1365103792,1365103983,ES
-1365103984,1365103991,IL
-1365103992,1365104199,ES
-1365104200,1365104200,GB
-1365104201,1365104206,ES
-1365104207,1365104207,GB
-1365104208,1365106687,ES
+1365102592,1365106687,ES
1365106688,1365110783,GB
1365110784,1365114879,FR
1365114880,1365118975,BA
1365118976,1365127167,RU
-1365127168,1365130271,AT
-1365130272,1365130303,IT
-1365130304,1365130495,AT
-1365130496,1365131007,IT
-1365131008,1365131263,AT
+1365127168,1365131263,AT
1365131264,1365139455,SE
1365139456,1365147647,CH
1365147648,1365155839,RU
1365155840,1365159935,SE
1365159936,1365164031,HU
-1365164032,1365166497,GB
-1365166498,1365166498,GB
-1365166499,1365172223,GB
+1365164032,1365172223,GB
1365172224,1365176319,LV
1365176320,1365180415,HU
-1365180416,1365183231,DE
-1365183232,1365183295,SC
-1365183296,1365184511,DE
+1365180416,1365184511,DE
1365184512,1365192703,RU
1365192704,1365196799,GB
1365196800,1365200895,ES
@@ -50089,215 +16608,22 @@
1365204992,1365209087,CZ
1365209088,1365213183,BE
1365213184,1365217279,RU
-1365217280,1365217551,GB
-1365217552,1365217567,US
-1365217568,1365217575,PT
-1365217576,1365217591,GB
-1365217592,1365217599,EG
-1365217600,1365217631,GB
-1365217632,1365217663,US
-1365217664,1365217671,PH
-1365217672,1365217687,IL
-1365217688,1365217695,KW
-1365217696,1365217703,GB
-1365217704,1365217711,AU
-1365217712,1365217791,US
-1365217792,1365217807,BD
-1365217808,1365217815,US
-1365217816,1365217823,DK
-1365217824,1365217831,GB
-1365217832,1365217839,TR
-1365217840,1365217847,GB
-1365217848,1365217855,BD
-1365217856,1365217871,GB
-1365217872,1365217879,BD
-1365217880,1365217919,US
-1365217920,1365217927,DK
-1365217928,1365217951,BD
-1365217952,1365217975,GB
-1365217976,1365217983,US
-1365217984,1365217991,DK
-1365217992,1365218023,US
-1365218024,1365218031,DK
-1365218032,1365218303,US
-1365218304,1365218311,CA
-1365218312,1365218319,AR
-1365218320,1365218327,ZA
-1365218328,1365218351,US
-1365218352,1365218367,CY
-1365218368,1365218375,RO
-1365218376,1365218383,UA
-1365218384,1365218407,EG
-1365218408,1365218415,IN
-1365218416,1365218431,GB
-1365218432,1365218439,EG
-1365218440,1365218447,ZA
-1365218448,1365218455,CA
-1365218456,1365218459,GB
-1365218460,1365218463,US
-1365218464,1365218471,HK
-1365218472,1365218479,GB
-1365218480,1365218511,GR
-1365218512,1365218519,AU
-1365218520,1365218527,US
-1365218528,1365218543,GR
-1365218544,1365218551,CY
-1365218552,1365218559,GR
-1365218560,1365218815,GB
-1365218816,1365218879,EG
-1365218880,1365218895,US
-1365218896,1365218903,GB
-1365218904,1365218911,MU
-1365218912,1365218927,US
-1365218928,1365218943,BR
-1365218944,1365218951,IN
-1365218952,1365218959,NL
-1365218960,1365218975,US
-1365218976,1365219007,CN
-1365219008,1365219023,US
-1365219024,1365219031,DK
-1365219032,1365219039,CY
-1365219040,1365219071,GB
-1365219072,1365219103,TR
-1365219104,1365219111,SA
-1365219112,1365219119,GB
-1365219120,1365219135,US
-1365219136,1365219143,GB
-1365219144,1365219159,US
-1365219160,1365219167,CA
-1365219168,1365219168,GB
-1365219169,1365219183,ES
-1365219184,1365219191,CA
-1365219192,1365219199,DE
-1365219200,1365219207,IN
-1365219208,1365219215,US
-1365219216,1365219231,GB
-1365219232,1365219247,CY
-1365219248,1365219279,GB
-1365219280,1365219287,BD
-1365219288,1365219295,US
-1365219296,1365219311,GB
-1365219312,1365219327,TR
-1365219328,1365219391,US
-1365219392,1365219399,DK
-1365219400,1365219407,AU
-1365219408,1365219415,GB
-1365219416,1365219423,TR
-1365219424,1365219431,US
-1365219432,1365219439,RU
-1365219440,1365219455,US
-1365219456,1365219463,NL
-1365219464,1365219471,AU
-1365219472,1365219479,IL
-1365219480,1365219511,GB
-1365219512,1365219519,BD
-1365219520,1365219583,US
-1365219584,1365219647,CN
-1365219648,1365219663,IN
-1365219664,1365219671,TR
-1365219672,1365219679,GB
-1365219680,1365219687,BD
-1365219688,1365219695,US
-1365219696,1365219703,DK
-1365219704,1365219711,UA
-1365219712,1365219743,TR
-1365219744,1365219751,US
-1365219752,1365219759,SG
-1365219760,1365219775,UA
-1365219776,1365219783,PY
-1365219784,1365219791,BA
-1365219792,1365219799,NO
-1365219800,1365219807,TR
-1365219808,1365219811,US
-1365219812,1365219815,AU
-1365219816,1365219903,US
-1365219904,1365219919,ES
-1365219920,1365219935,IN
-1365219936,1365219951,CA
-1365219952,1365219967,DK
-1365219968,1365219983,ES
-1365219984,1365219991,IT
-1365219992,1365220007,EE
-1365220008,1365220015,ES
-1365220016,1365220031,US
-1365220032,1365220127,CN
-1365220128,1365220143,TR
-1365220144,1365220151,IL
-1365220152,1365220159,AR
-1365220160,1365220223,US
-1365220224,1365220255,JO
-1365220256,1365220263,KW
-1365220264,1365220271,GB
-1365220272,1365220287,KW
-1365220288,1365220303,AR
-1365220304,1365220311,NL
-1365220312,1365220319,BR
-1365220320,1365220371,US
-1365220372,1365220375,GB
-1365220376,1365220387,US
-1365220388,1365220391,JO
-1365220392,1365220399,ZA
-1365220400,1365220407,GB
-1365220408,1365220423,US
-1365220424,1365220431,GB
-1365220432,1365220435,JO
-1365220436,1365220439,US
-1365220440,1365220479,GB
-1365220480,1365220487,AU
-1365220488,1365220523,US
-1365220524,1365220527,GB
-1365220528,1365220535,IS
-1365220536,1365220551,GB
-1365220552,1365220567,IS
-1365220568,1365220575,IL
-1365220576,1365220583,CH
-1365220584,1365220599,TR
-1365220600,1365220607,GR
-1365220608,1365220615,TR
-1365220616,1365220623,US
-1365220624,1365220631,KW
-1365220632,1365220639,GR
-1365220640,1365220663,GB
-1365220664,1365220679,US
-1365220680,1365220687,IT
-1365220688,1365220727,US
-1365220728,1365220735,JO
-1365220736,1365220767,US
-1365220768,1365220769,GB
-1365220770,1365220770,CY
-1365220771,1365220775,GB
-1365220776,1365220783,US
-1365220784,1365220791,IN
-1365220792,1365220799,KW
-1365220800,1365220807,RU
-1365220808,1365220815,US
-1365220816,1365220823,KW
-1365220824,1365220831,GB
-1365220832,1365220847,IT
-1365220848,1365220855,AU
-1365220856,1365220903,US
-1365220904,1365220911,CA
-1365220912,1365220919,US
-1365220920,1365220927,KW
-1365220928,1365220935,IT
-1365220936,1365220939,AR
-1365220940,1365220943,US
-1365220944,1365220959,GB
-1365220960,1365220967,US
-1365220968,1365220975,GB
-1365220976,1365220979,US
-1365220980,1365220983,GB
-1365220984,1365220991,BR
-1365220992,1365220999,ZA
-1365221000,1365221023,US
-1365221024,1365221031,TR
-1365221032,1365221047,IL
-1365221048,1365221055,GB
-1365221056,1365221063,KW
-1365221064,1365221071,MY
-1365221072,1365221087,ES
-1365221088,1365221119,US
-1365221120,1365221375,GB
+1365217280,1365217343,GB
+1365217344,1365217351,US
+1365217352,1365217655,GB
+1365217656,1365217663,US
+1365217664,1365218191,GB
+1365218192,1365218199,US
+1365218200,1365219391,GB
+1365219392,1365219407,MY
+1365219408,1365220231,GB
+1365220232,1365220239,IE
+1365220240,1365220359,GB
+1365220360,1365220367,US
+1365220368,1365221231,GB
+1365221232,1365221239,NL
+1365221240,1365221247,US
+1365221248,1365221375,GB
1365221376,1365225471,GE
1365225472,1365229567,UA
1365229568,1365233663,PL
@@ -50305,7 +16631,9 @@
1365237760,1365241855,UZ
1365241856,1365245951,DK
1365245952,1366294527,GB
-1366294528,1367343103,IT
+1366294528,1366405831,IT
+1366405832,1366405835,SI
+1366405836,1367343103,IT
1367343104,1369440255,GB
1369440256,1369473023,DE
1369473024,1369505791,HU
@@ -50357,69 +16685,48 @@
1370062848,1370095615,DE
1370095616,1370128383,GB
1370128384,1370161151,SE
-1370161152,1370170367,NL
-1370170368,1370170399,US
-1370170400,1370174463,NL
-1370174464,1370174591,US
-1370174592,1370174719,US
-1370174720,1370175487,US
-1370175488,1370181887,NL
-1370181888,1370182015,NL
-1370182016,1370182143,US
+1370161152,1370174463,NL
+1370174464,1370175487,US
+1370175488,1370178815,NL
+1370178816,1370179071,ES
+1370179072,1370181887,NL
+1370181888,1370182143,US
1370182144,1370182911,NL
-1370182912,1370183167,NL
+1370182912,1370183167,DE
1370183168,1370185983,NL
-1370185984,1370186495,NL
-1370186496,1370187519,NL
-1370187520,1370187775,DE
-1370187776,1370188031,GR
-1370188032,1370188799,NL
+1370185984,1370186239,GB
+1370186240,1370188543,NL
+1370188544,1370188799,FR
1370188800,1370189055,US
1370189056,1370189311,NL
-1370189312,1370189567,NL
+1370189312,1370189567,US
1370189568,1370190847,NL
1370190848,1370191871,DE
1370191872,1370193919,NL
1370193920,1370226687,GB
1370226688,1370259455,ES
1370259456,1370292223,SE
-1370292224,1370299903,NL
-1370299904,1370300159,US
-1370300160,1370324991,NL
+1370292224,1370324991,NL
1370324992,1370357759,DE
1370357760,1370390527,IT
1370390528,1370423295,GB
1370423296,1370439679,NO
1370439680,1370456063,NL
1370456064,1370488831,FI
-1370488832,1370505855,RU
-1370505856,1370505871,CY
-1370505872,1370508895,RU
-1370508896,1370508911,CY
-1370508912,1370555887,RU
-1370555888,1370555903,CY
-1370555904,1370563967,RU
-1370563968,1370564031,US
-1370564032,1370619903,RU
+1370488832,1370619903,RU
1370619904,1370750975,GB
1370750976,1370767359,RO
1370767360,1370771455,MD
-1370771456,1370772479,RO
-1370772480,1370772991,MD
-1370772992,1370882047,RO
+1370771456,1370882047,RO
1370882048,1371013119,HU
1371013120,1371078655,ES
1371078656,1371144191,FR
1371144192,1371201535,GR
1371201536,1371205631,PL
1371205632,1371209727,SE
-1371209728,1371251343,GB
-1371251344,1371251359,US
-1371251360,1371275263,GB
+1371209728,1371275263,GB
1371275264,1371340799,BE
-1371340800,1371374740,AT
-1371374741,1371374741,SK
-1371374742,1371406335,AT
+1371340800,1371406335,AT
1371406336,1371471871,PL
1371471872,1371537407,NO
1371537408,1371602943,MA
@@ -50429,93 +16736,25 @@
1371799552,1371865087,RO
1371865088,1371930623,FI
1371930624,1371996159,LV
-1371996160,1371996415,NG
-1371996416,1371996671,A2
+1371996160,1371996671,GB
1371996672,1371996927,GA
-1371996928,1371997119,A2
-1371997120,1371997127,NG
-1371997128,1371997183,A2
+1371996928,1371997183,GB
1371997184,1371997439,KE
-1371997440,1371997695,A2
-1371997696,1371998207,NG
-1371998208,1371998463,CD
-1371998464,1371998719,NG
-1371998720,1372000255,A2
+1371997440,1372000255,GB
1372000256,1372004351,UG
-1372004352,1372004607,LR
-1372004608,1372006399,A2
-1372006400,1372006407,NG
-1372006408,1372006426,A2
+1372004352,1372006426,GB
1372006427,1372006427,TZ
-1372006428,1372006463,A2
-1372006464,1372006495,NG
-1372006496,1372007039,A2
-1372007040,1372007455,NG
-1372007456,1372008095,A2
-1372008096,1372008127,NG
-1372008128,1372008159,A2
-1372008160,1372008191,NG
-1372008192,1372008927,A2
-1372008928,1372008959,MW
-1372008960,1372010239,A2
-1372010240,1372010272,NG
-1372010273,1372010967,A2
-1372010968,1372011007,TZ
-1372011008,1372011775,A2
-1372011776,1372012031,ZM
-1372012032,1372012543,A2
-1372012544,1372014591,ZM
-1372014592,1372015615,A2
-1372015616,1372015871,NG
-1372015872,1372016127,A2
-1372016128,1372016383,GH
-1372016384,1372019199,A2
-1372019200,1372019455,GA
-1372019456,1372020735,A2
+1372006428,1372012543,GB
+1372012544,1372013567,ZM
+1372013568,1372020735,GB
1372020736,1372022783,ZM
-1372022784,1372024831,A2
-1372024832,1372025087,ZM
-1372025088,1372025631,A2
-1372025632,1372025663,ZM
-1372025664,1372025695,KE
-1372025696,1372025727,TZ
-1372025728,1372025855,A2
-1372025856,1372026367,IL
+1372022784,1372026367,GB
1372026368,1372026879,KE
1372026880,1372027903,IL
-1372027904,1372029439,A2
-1372029440,1372029695,NG
-1372029696,1372029951,NE
-1372029952,1372031999,A2
-1372032000,1372032255,CM
-1372032256,1372033279,A2
-1372033280,1372033535,IN
-1372033536,1372041343,A2
-1372041344,1372041471,NG
-1372041472,1372043519,A2
+1372027904,1372043519,GB
1372043520,1372043775,NG
-1372043776,1372044287,A2
-1372044288,1372044543,NG
-1372044544,1372044799,A2
-1372044800,1372044863,CM
-1372044864,1372044927,NG
-1372044928,1372045055,A2
-1372045056,1372045087,CM
-1372045088,1372045119,A2
-1372045120,1372045151,NG
-1372045152,1372045567,A2
-1372045568,1372045823,ZM
-1372045824,1372045887,NG
-1372045888,1372046559,A2
-1372046560,1372046591,NG
-1372046592,1372047231,A2
-1372047232,1372047295,NG
-1372047296,1372047359,A2
-1372047360,1372047615,CM
-1372047616,1372049919,A2
-1372049920,1372050175,NG
-1372050176,1372060159,A2
-1372060160,1372061695,IL
+1372043776,1372060671,GB
+1372060672,1372061695,IL
1372061696,1372069887,RU
1372069888,1372073983,FR
1372073984,1372078079,CZ
@@ -50526,37 +16765,22 @@
1372094464,1372098559,IT
1372098560,1372102655,RU
1372102656,1372106751,SE
-1372106752,1372110591,FR
-1372110592,1372110623,GB
-1372110624,1372110655,DE
-1372110656,1372110687,IT
-1372110688,1372110719,ES
-1372110720,1372110751,FR
-1372110752,1372110783,NL
-1372110784,1372110847,FR
+1372106752,1372110847,FR
1372110848,1372114943,DE
1372114944,1372119039,RU
1372119040,1372123135,IT
1372123136,1372127231,RU
1372127232,1372131327,IT
1372131328,1372135423,RU
-1372135424,1372138255,DE
-1372138256,1372138263,GB
-1372138264,1372139519,DE
+1372135424,1372139519,DE
1372139520,1372143615,CZ
1372143616,1372147711,RU
-1372147712,1372151807,BE
-1372151808,1372152823,DE
-1372152824,1372152831,GB
-1372152832,1372156063,DE
-1372156064,1372156095,GB
-1372156096,1372156719,DE
-1372156720,1372156735,GB
-1372156736,1372159999,DE
+1372147712,1372149247,BE
+1372149248,1372149375,HK
+1372149376,1372151807,BE
+1372151808,1372159999,DE
1372160000,1372164095,GB
-1372164096,1372166863,DE
-1372166864,1372166879,US
-1372166880,1372168191,DE
+1372164096,1372168191,DE
1372168192,1372172287,GB
1372172288,1372176383,FR
1372176384,1372180479,CH
@@ -50568,79 +16792,15 @@
1372585984,1372618751,IT
1372618752,1372651519,GB
1372651520,1372684287,FI
-1372684288,1372685631,DE
-1372685632,1372685655,EU
-1372685656,1372685663,DE
-1372685664,1372685695,EU
-1372685696,1372685823,DE
-1372685824,1372685887,EU
-1372685888,1372686335,DE
-1372686336,1372687359,EU
-1372687360,1372687487,DE
-1372687488,1372687519,EU
-1372687520,1372687647,DE
-1372687648,1372687679,EU
-1372687680,1372687711,DE
-1372687712,1372687719,EU
-1372687720,1372687727,DE
-1372687728,1372687743,EU
-1372687744,1372688199,DE
-1372688200,1372688223,EU
-1372688224,1372688351,DE
-1372688352,1372688383,EU
-1372688384,1372691455,DE
-1372691456,1372691711,US
-1372691712,1372691967,EU
-1372691968,1372694271,DE
-1372694272,1372694303,EU
-1372694304,1372694367,DE
-1372694368,1372694383,EU
-1372694384,1372694399,DE
-1372694400,1372694559,EU
-1372694560,1372694591,DE
-1372694592,1372694623,EU
-1372694624,1372694719,DE
-1372694720,1372694783,EU
-1372694784,1372694815,DE
-1372694816,1372694831,EU
-1372694832,1372695039,DE
-1372695040,1372695167,EU
-1372695168,1372695199,DE
-1372695200,1372695231,EU
-1372695232,1372695295,GB
-1372695296,1372695423,DE
-1372695424,1372695455,EU
-1372695456,1372695551,DE
-1372695552,1372695807,CZ
-1372695808,1372696007,DK
-1372696008,1372696063,EU
-1372696064,1372697215,DE
-1372697216,1372697231,EU
-1372697232,1372697239,DE
-1372697240,1372697247,EU
-1372697248,1372698471,DE
-1372698472,1372698559,EU
-1372698560,1372698655,DE
-1372698656,1372698687,EU
-1372698688,1372698751,DE
-1372698752,1372698783,EU
-1372698784,1372698814,DE
-1372698815,1372698879,EU
-1372698880,1372700159,DE
-1372700160,1372700671,EU
-1372700672,1372702463,DE
-1372702464,1372702719,EU
-1372702720,1372702735,DE
-1372702736,1372702751,EU
-1372702752,1372702991,DE
-1372702992,1372703271,EU
-1372703272,1372703295,DE
-1372703296,1372703327,EU
-1372703328,1372703391,DE
-1372703392,1372703423,EU
-1372703424,1372703487,DE
-1372703488,1372704767,EU
-1372704768,1372717055,DE
+1372688384,1372689407,DE
+1372690432,1372691455,DE
+1372696000,1372696007,DK
+1372697344,1372697599,DE
+1372698880,1372699391,DE
+1372699904,1372700159,DE
+1372702720,1372703231,DE
+1372704768,1372713983,DE
+1372715008,1372717055,DE
1372717056,1372749823,PL
1372749824,1372782591,DE
1372782592,1372815359,RU
@@ -50652,237 +16812,127 @@
1373306880,1373372415,PL
1373372416,1373437951,FR
1373437952,1373503487,CH
-1373503488,1373519871,RU
-1373519872,1373523967,GB
-1373523968,1373569023,RU
+1373503488,1373569023,RU
1373569024,1373634559,AT
1373634560,1374683135,SE
-1374683136,1375080959,BE
-1375080960,1375081215,EU
-1375081216,1375207423,BE
-1375207424,1375208447,MQ
+1374683136,1375207423,BE
+1375207424,1375207935,FR
+1375207936,1375208447,MQ
1375208448,1375208703,GP
1375208704,1375210239,MQ
1375210240,1375210495,GP
1375210496,1375211519,MQ
-1375211520,1375211775,FR
-1375211776,1375212799,GP
+1375211520,1375211775,GP
+1375211776,1375212031,FR
+1375212032,1375212799,GP
1375212800,1375213055,FR
-1375213056,1375214591,GP
-1375214592,1375214847,FR
-1375214848,1375215103,GP
-1375215104,1375215359,FR
-1375215360,1375215615,GP
-1375215616,1375216895,GF
-1375216896,1375217151,FR
-1375217152,1375217919,GF
-1375217920,1375218175,FR
-1375218176,1375219711,GF
-1375219712,1375219967,FR
-1375219968,1375223807,GF
-1375223808,1375224575,FR
-1375224576,1375225087,MQ
-1375225088,1375225343,FR
-1375225344,1375226111,MQ
-1375226112,1375226879,FR
-1375226880,1375227135,MQ
-1375227136,1375228159,FR
-1375228160,1375231999,MQ
-1375232000,1375233023,FR
-1375233024,1375233535,MQ
-1375233536,1375233791,FR
-1375233792,1375234559,MQ
-1375234560,1375236095,FR
-1375236096,1375237119,MQ
-1375237120,1375237631,FR
-1375237632,1375237887,MQ
-1375237888,1375238399,FR
-1375238400,1375240191,MQ
+1375213056,1375215615,GP
+1375215616,1375215871,GF
+1375215872,1375216383,FR
+1375216384,1375218175,GF
+1375218176,1375218687,FR
+1375218688,1375219455,GF
+1375219456,1375219711,FR
+1375219712,1375221247,GF
+1375221248,1375221503,FR
+1375221504,1375221759,GF
+1375221760,1375222783,FR
+1375222784,1375223807,GF
+1375223808,1375227135,MQ
+1375227136,1375227647,FR
+1375227648,1375230463,MQ
+1375230464,1375230719,FR
+1375230720,1375233023,MQ
+1375233024,1375233279,FR
+1375233280,1375233791,MQ
+1375233792,1375235071,FR
+1375235072,1375235583,MQ
+1375235584,1375236095,FR
+1375236096,1375236351,MQ
+1375236352,1375236863,FR
+1375236864,1375237631,MQ
+1375237632,1375237887,FR
+1375237888,1375239679,MQ
+1375239680,1375239935,FR
+1375239936,1375240191,MQ
1375240192,1375240447,FR
-1375240448,1375241215,GP
-1375241216,1375241471,FR
-1375241472,1375243775,GP
-1375243776,1375244031,FR
-1375244032,1375244543,GP
-1375244544,1375244799,FR
-1375244800,1375245311,GP
-1375245312,1375245567,FR
-1375245568,1375247359,GP
+1375240448,1375240959,GP
+1375240960,1375241215,FR
+1375241216,1375241983,GP
+1375241984,1375242239,FR
+1375242240,1375242495,MF
+1375242496,1375242751,GP
+1375242752,1375243263,FR
+1375243264,1375245311,GP
+1375245312,1375246079,FR
+1375246080,1375246335,GP
+1375246336,1375246591,FR
+1375246592,1375247359,GP
1375247360,1375247615,FR
-1375247616,1375251455,GP
-1375251456,1375251967,FR
-1375251968,1375252223,GP
-1375252224,1375252479,FR
-1375252480,1375253503,GP
-1375253504,1375253759,FR
-1375253760,1375256575,GP
-1375256576,1375257343,RE
-1375257344,1375257599,FR
-1375257600,1375257855,RE
+1375247616,1375249919,GP
+1375249920,1375250175,FR
+1375250176,1375250431,GP
+1375250432,1375251455,FR
+1375251456,1375252223,GP
+1375252224,1375253247,FR
+1375253248,1375253759,GP
+1375253760,1375254527,FR
+1375254528,1375256063,GP
+1375256064,1375256319,FR
+1375256320,1375256575,GP
+1375256576,1375257087,RE
+1375257088,1375257343,FR
+1375257344,1375257855,RE
1375257856,1375258111,FR
-1375258112,1375260415,RE
-1375260416,1375260671,FR
-1375260672,1375262207,RE
-1375262208,1375262463,FR
-1375262464,1375263999,RE
-1375264000,1375264255,FR
-1375264256,1375270911,RE
-1375270912,1375271167,FR
-1375271168,1375271423,RE
+1375258112,1375258879,RE
+1375258880,1375261183,FR
+1375261184,1375261695,RE
+1375261696,1375262207,FR
+1375262208,1375265535,RE
+1375265536,1375266047,FR
+1375266048,1375266303,RE
+1375266304,1375268095,FR
+1375268096,1375268351,RE
+1375268352,1375268863,FR
+1375268864,1375269119,RE
+1375269120,1375269631,FR
+1375269632,1375270143,RE
+1375270144,1375270655,FR
+1375270656,1375271423,RE
1375271424,1375271679,FR
-1375271680,1375272959,RE
-1375272960,1375705984,FR
-1375705985,1375705985,EU
-1375705986,1375731711,FR
-1375731712,1375844671,GB
-1375844672,1375844735,US
-1375844736,1375844767,GB
-1375844768,1375844863,US
-1375844864,1375852543,GB
-1375852544,1375852799,IE
-1375852800,1378719197,GB
-1378719198,1378719198,EU
-1378719199,1378877439,GB
+1375271680,1375271935,RE
+1375271936,1375272191,FR
+1375272192,1375272959,RE
+1375272960,1375731711,FR
+1375731712,1378877439,GB
1378877440,1379926015,IT
1379926016,1380188159,FR
-1380188160,1380226399,GB
-1380226400,1380226407,A2
-1380226408,1380450303,GB
+1380188160,1380450303,GB
1380450304,1380712447,NL
1380712448,1380974591,RO
-1380974592,1380978727,IL
-1380978728,1380978735,A2
-1380978736,1381036471,IL
-1381036472,1381036479,A2
-1381036480,1381105663,IL
+1380974592,1381105663,IL
1381105664,1381236735,DE
1381236736,1381367807,IT
1381367808,1381498879,ES
1381498880,1381761023,IT
1381761024,1382023167,NL
-1382023168,1382024959,SE
-1382024960,1382025215,DK
-1382025216,1382039007,SE
-1382039008,1382039023,FR
-1382039024,1382039055,SE
-1382039056,1382039071,DE
-1382039072,1382039175,SE
-1382039176,1382039191,GB
-1382039192,1382039271,SE
-1382039272,1382039275,GB
-1382039276,1382039551,SE
+1382023168,1382039551,SE
1382039552,1382055935,DE
1382055936,1382072319,FR
1382072320,1382088703,RU
-1382088704,1382092367,FR
-1382092368,1382092399,MC
-1382092400,1382092815,FR
-1382092816,1382092831,MC
-1382092832,1382092927,FR
-1382092928,1382092943,MC
-1382092944,1382093055,FR
-1382093056,1382093087,GB
-1382093088,1382093119,FR
-1382093120,1382093151,MC
-1382093152,1382093503,FR
-1382093504,1382093583,MC
-1382093584,1382093823,FR
-1382093824,1382093887,MC
-1382093888,1382094079,FR
-1382094080,1382094143,MC
-1382094144,1382094335,FR
-1382094336,1382094351,MC
-1382094352,1382094591,FR
-1382094592,1382094623,MC
-1382094624,1382097919,FR
-1382097920,1382098431,IT
-1382098432,1382105087,FR
+1382088704,1382105087,FR
1382105088,1382137855,DE
1382137856,1382154239,RU
1382154240,1382170623,FR
-1382170624,1382171775,DE
-1382171776,1382171791,CH
-1382171792,1382171927,DE
-1382171928,1382171935,CH
-1382171936,1382173663,DE
-1382173664,1382173671,GB
-1382173672,1382173675,DE
-1382173676,1382173679,CH
-1382173680,1382177983,DE
-1382177984,1382178303,LI
-1382178304,1382178823,DE
-1382178824,1382178831,CH
-1382178832,1382179231,DE
-1382179232,1382179239,MT
-1382179240,1382179247,DE
-1382179248,1382179279,GB
-1382179280,1382181135,DE
-1382181136,1382181151,CH
-1382181152,1382182095,DE
-1382182096,1382182111,CH
-1382182112,1382182547,DE
-1382182548,1382182551,CH
-1382182552,1382182655,DE
-1382182656,1382182687,US
-1382182688,1382182799,DE
-1382182800,1382182831,GB
-1382182832,1382182895,DE
-1382182896,1382182911,GB
-1382182912,1382183167,LI
-1382183168,1382183423,CH
-1382183424,1382183935,LI
-1382183936,1382185031,DE
-1382185032,1382185039,SK
-1382185040,1382187007,DE
-1382187008,1382191871,ES
-1382191872,1382192127,VE
-1382192128,1382203391,ES
+1382170624,1382187007,DE
+1382187008,1382203391,ES
1382203392,1382205439,GB
-1382205440,1382205695,EU
-1382205696,1382205951,DE
-1382205952,1382207743,EU
-1382207744,1382207999,DE
-1382208000,1382208255,EU
-1382208256,1382208319,DE
-1382208320,1382209535,EU
-1382209536,1382209791,DE
-1382209792,1382211071,EU
-1382211072,1382211199,DE
-1382211200,1382211583,EU
-1382211584,1382211839,FR
-1382211840,1382212223,EU
-1382212224,1382212239,FR
-1382212240,1382212607,EU
-1382212608,1382212863,FR
-1382212864,1382213631,EU
-1382213632,1382215679,GB
-1382215680,1382216447,NL
-1382216448,1382217727,GB
-1382217728,1382217983,NL
-1382217984,1382219007,GB
-1382219008,1382219519,NL
-1382219520,1382219775,GB
-1382219776,1382220735,SE
-1382220736,1382220767,NO
-1382220768,1382220783,SE
-1382220784,1382220791,NO
-1382220792,1382222847,SE
+1382213632,1382219775,GB
+1382219776,1382222847,SE
1382222848,1382223103,FI
-1382223104,1382223327,SE
-1382223328,1382223359,FI
-1382223360,1382224287,SE
-1382224288,1382224319,NO
-1382224320,1382227327,SE
-1382227328,1382227455,NO
-1382227456,1382227583,SE
-1382227584,1382227711,DK
-1382227712,1382232575,SE
-1382232576,1382232639,NO
-1382232640,1382233279,SE
-1382233280,1382233343,NO
-1382233344,1382233407,SE
-1382233408,1382233423,NO
-1382233424,1382252543,SE
+1382223104,1382226943,SE
+1382226944,1382227199,NO
+1382227200,1382252543,SE
1382252544,1382268927,CZ
1382268928,1382285311,IR
1382285312,1382301695,CZ
@@ -50902,137 +16952,67 @@
1382514688,1382531071,DK
1382531072,1382547455,FI
1382547456,1382809599,IT
-1382809600,1382967551,GB
-1382967552,1382967807,GB
-1382967808,1383025663,GB
-1383025664,1383025672,DE
-1383025673,1383025679,GB
-1383025680,1383025711,DE
-1383025712,1383025727,GB
-1383025728,1383025759,DE
-1383025760,1383071743,GB
-1383071744,1383073279,RU
-1383073280,1383073535,KZ
-1383073536,1383088127,RU
+1382809600,1383071743,GB
+1383071744,1383088127,RU
1383088128,1383096319,IS
-1383096320,1383096447,PL
-1383096448,1383096575,FR
-1383096576,1383096831,GB
-1383096832,1383096863,FR
-1383096864,1383096959,GB
-1383096960,1383097087,FR
-1383097088,1383097343,ES
-1383097344,1383098111,GB
-1383098112,1383098367,DE
-1383098368,1383098879,GB
-1383098880,1383099903,DE
-1383099904,1383100415,FR
-1383100416,1383100768,GB
-1383100769,1383100782,ES
-1383100783,1383100831,GB
-1383100832,1383100847,IE
-1383100848,1383100879,GB
-1383100880,1383100895,IE
-1383100896,1383103271,GB
-1383103272,1383103279,ES
-1383103280,1383103471,GB
-1383103472,1383103487,AE
-1383103488,1383104015,GB
-1383104016,1383104023,ES
-1383104024,1383104511,GB
+1383096320,1383100159,GB
+1383100160,1383100415,FR
+1383100416,1383104511,GB
1383104512,1383112703,JE
1383112704,1383114751,LB
1383114752,1383116799,GB
1383116800,1383120895,RU
1383120896,1383129087,IT
1383129088,1383137279,GB
-1383137280,1383139583,MC
-1383139584,1383139839,A2
-1383139840,1383140095,MC
-1383140096,1383140351,A2
-1383140352,1383141119,MC
-1383141120,1383141375,US
-1383141376,1383145471,MC
+1383137280,1383145471,MC
1383145472,1383153663,CZ
1383153664,1383161855,GB
1383161856,1383170047,DE
-1383170048,1383171743,GB
-1383171744,1383171775,NZ
-1383171776,1383172559,GB
-1383172560,1383172567,ZA
-1383172568,1383186431,GB
+1383170048,1383186431,GB
1383186432,1383194623,IT
1383194624,1383202815,GB
1383202816,1383211007,RU
1383211008,1383219199,CY
-1383219200,1383222407,AL
-1383222408,1383222447,RS
-1383222448,1383222463,AL
-1383222464,1383222527,RS
-1383222528,1383223119,AL
-1383223120,1383225759,RS
-1383225760,1383225771,AL
-1383225772,1383225807,RS
-1383225808,1383225827,AL
-1383225828,1383226091,RS
-1383226092,1383226095,AL
-1383226096,1383226367,RS
-1383226368,1383226623,AL
-1383226624,1383226751,RS
-1383226752,1383226815,AL
-1383226816,1383227391,RS
-1383227392,1383239295,RU
-1383239296,1383239423,AR
-1383239424,1383243775,RU
+1383219200,1383223295,AL
+1383223296,1383223551,XK
+1383223552,1383225983,AL
+1383225984,1383226007,RS
+1383226008,1383226207,AL
+1383226208,1383226239,RS
+1383226240,1383227391,AL
+1383227392,1383243775,RU
1383243776,1383251967,YE
1383251968,1383260159,CZ
1383260160,1383268351,RU
1383268352,1383273983,IR
-1383273984,1383276543,KW
+1383273984,1383275775,KW
+1383275776,1383276543,IR
1383276544,1383284735,KZ
1383284736,1383292927,PL
1383292928,1383301119,DE
1383301120,1383309311,SE
1383309312,1383317503,IT
1383317504,1383321599,SE
-1383321600,1383325695,RU
1383325696,1383333887,GB
1383333888,1383350271,RU
1383350272,1383358463,NO
-1383358464,1383366911,DE
-1383366912,1383367167,SY
-1383367168,1383367679,KW
+1383358464,1383367679,DE
1383367680,1383368703,GB
-1383368704,1383368831,DE
-1383368832,1383368847,GB
-1383368848,1383368895,KW
-1383368896,1383368957,DE
-1383368958,1383368958,US
-1383368959,1383369087,DE
-1383369088,1383369119,GB
-1383369120,1383369231,KW
-1383369232,1383369247,GB
-1383369248,1383369535,KW
-1383369536,1383369567,GB
-1383369568,1383369599,DE
-1383369600,1383369727,KW
+1383368704,1383369727,DE
1383369728,1383369760,SA
1383369761,1383369761,KW
1383369762,1383369768,SA
1383369769,1383369769,KW
1383369770,1383369983,SA
-1383369984,1383370751,KW
-1383370752,1383371775,DE
-1383371776,1383374591,KW
-1383374592,1383374723,US
+1383369984,1383372031,DE
+1383372032,1383374335,KW
+1383374336,1383374723,DE
1383374724,1383374724,KW
-1383374725,1383374847,US
+1383374725,1383374847,DE
1383374848,1383383039,ES
1383383040,1383391231,CY
1383391232,1383399423,FI
-1383399424,1383402015,LI
-1383402016,1383402023,CH
-1383402024,1383407615,LI
+1383399424,1383407615,LI
1383407616,1383415807,NO
1383415808,1383423999,RU
1383424000,1383432191,SE
@@ -51041,33 +17021,17 @@
1383448576,1383456767,RS
1383456768,1383464959,UA
1383464960,1383469055,BA
-1383469056,1383470479,UA
-1383470480,1383470495,RU
-1383470496,1383471103,UA
+1383469056,1383471103,UA
1383471104,1383473151,SE
1383473152,1383481343,DE
1383481344,1383481599,GB
1383481600,1383481615,US
1383481616,1383481663,GB
1383481664,1383481695,US
-1383481696,1383481703,GB
-1383481704,1383481711,US
-1383481712,1383481775,GB
-1383481776,1383481791,SA
-1383481792,1383482367,GB
-1383482368,1383482879,NL
-1383482880,1383483887,GB
-1383483888,1383483903,JP
-1383483904,1383485375,GB
-1383485376,1383485407,US
-1383485408,1383497727,GB
-1383497728,1383499039,RU
-1383499040,1383499047,UA
-1383499048,1383502335,RU
-1383502336,1383502847,CH
-1383502848,1383503615,RU
-1383503616,1383503616,CZ
-1383503617,1383505919,RU
+1383481696,1383482623,GB
+1383482624,1383482879,NL
+1383482880,1383497727,GB
+1383497728,1383505919,RU
1383505920,1383514111,SA
1383514112,1383522303,FI
1383522304,1383530495,BG
@@ -51083,33 +17047,9 @@
1383596032,1384120319,FR
1384120320,1384153087,NG
1384153088,1384185855,FI
-1384185856,1384189183,DE
-1384189184,1384189439,AT
-1384189440,1384190463,DE
-1384190464,1384190719,NL
-1384190720,1384190975,DE
1384190976,1384191231,DK
-1384191232,1384191999,DE
-1384192000,1384192191,NL
-1384192192,1384192255,DE
-1384192256,1384192511,NL
-1384192512,1384192575,DE
-1384192576,1384192639,SE
-1384192640,1384192767,DE
-1384192768,1384193023,BG
-1384193024,1384194191,DE
-1384194192,1384194207,AT
-1384194208,1384194559,DE
-1384194560,1384194815,NL
-1384194816,1384195711,DE
-1384195712,1384195743,NL
-1384195744,1384195751,CH
-1384195752,1384195775,DE
-1384195776,1384195839,SE
-1384195840,1384196095,DE
1384196096,1384197119,CZ
-1384197120,1384202239,DE
-1384202240,1384218623,GB
+1384204288,1384206335,ES
1384218624,1384251391,EG
1384251392,1384267775,FI
1384267776,1384284159,CH
@@ -51132,90 +17072,7 @@
1384742912,1384759295,RU
1384759296,1384775679,SY
1384775680,1384792063,RU
-1384792064,1384792623,FR
-1384792624,1384792639,BE
-1384792640,1384793679,FR
-1384793680,1384793695,BE
-1384793696,1384793791,FR
-1384793792,1384793823,BE
-1384793824,1384794127,FR
-1384794128,1384794143,CH
-1384794144,1384794271,FR
-1384794272,1384794287,CH
-1384794288,1384795279,FR
-1384795280,1384795327,BE
-1384795328,1384799807,FR
-1384799808,1384799871,CH
-1384799872,1384808447,FR
-1384808448,1384808479,BE
-1384808480,1384808735,EU
-1384808736,1384808799,BE
-1384808800,1384808831,FR
-1384808832,1384808959,FI
-1384808960,1384808967,BE
-1384808968,1384808975,EU
-1384808976,1384808991,DE
-1384808992,1384809015,BE
-1384809016,1384809023,GB
-1384809024,1384809039,FR
-1384809040,1384809047,BE
-1384809048,1384809055,EU
-1384809056,1384809071,BE
-1384809072,1384809087,FR
-1384809088,1384809103,BE
-1384809104,1384809111,EU
-1384809112,1384809119,GE
-1384809120,1384809175,BE
-1384809176,1384809183,EU
-1384809184,1384809199,BE
-1384809200,1384809207,EU
-1384809208,1384809215,BE
-1384809216,1384809407,BR
-1384809408,1384809439,FR
-1384809440,1384809471,DE
-1384809472,1384809983,US
-1384809984,1384810239,PT
-1384810240,1384811007,US
-1384811008,1384811519,GB
-1384811520,1384811647,IR
-1384811648,1384811711,EU
-1384811712,1384811743,ES
-1384811744,1384811775,BE
-1384811776,1384812031,FR
-1384812032,1384812159,PR
-1384812160,1384812287,PT
-1384812288,1384812543,ES
-1384812544,1384813567,GB
-1384813568,1384814079,ES
-1384814080,1384814591,GB
-1384814592,1384815103,BE
-1384815104,1384815615,FR
-1384815616,1384816127,BE
-1384816128,1384816255,EU
-1384816256,1384816383,ES
-1384816384,1384816639,EU
-1384816640,1384817151,DK
-1384817152,1384817407,EU
-1384817408,1384817439,GB
-1384817440,1384817471,EU
-1384817472,1384817503,SE
-1384817504,1384817599,BE
-1384817600,1384817663,FR
-1384817664,1384817919,BE
-1384817920,1384818175,EU
-1384818176,1384818815,BE
-1384818816,1384818879,NL
-1384818880,1384819199,EU
-1384819200,1384819711,GB
-1384819712,1384820223,CH
-1384820224,1384820735,BE
-1384820736,1384821247,EU
-1384821248,1384821759,BE
-1384821760,1384822271,DK
-1384822272,1384822783,ES
-1384822784,1384823295,BE
-1384823296,1384823807,CH
-1384823808,1384824831,EU
+1384792064,1384808447,FR
1384824832,1384841215,GB
1384841216,1384857599,PL
1384857600,1384873983,NL
@@ -51224,9 +17081,7 @@
1384923136,1384939519,RU
1384939520,1384955903,LT
1384955904,1384972287,RU
-1384972288,1384978975,DE
-1384978976,1384978991,NL
-1384978992,1384988671,DE
+1384972288,1384988671,DE
1384988672,1385005055,FI
1385005056,1385021439,HU
1385021440,1385037823,IE
@@ -51247,20 +17102,13 @@
1385218048,1385226239,UA
1385226240,1385234431,GB
1385234432,1385242623,DE
-1385242624,1385244095,GB
-1385244096,1385244111,HK
-1385244112,1385244143,GB
-1385244144,1385244151,CH
-1385244152,1385249535,GB
-1385249536,1385249791,US
-1385249792,1385250815,GB
+1385242624,1385250815,GB
1385250816,1385259007,PL
1385259008,1385267199,IT
1385267200,1385275391,SE
1385275392,1385283583,IT
-1385283584,1385285631,DE
-1385285632,1385287679,GB
-1385287680,1385291775,EU
+1385283584,1385286143,DE
+1385286144,1385291775,GB
1385291776,1385299967,TR
1385299968,1385308159,BG
1385308160,1385309439,BE
@@ -51298,76 +17146,13 @@
1385529344,1385537535,RU
1385537536,1385545727,DE
1385545728,1385553919,RU
-1385553920,1385554515,DE
-1385554516,1385554519,CH
-1385554520,1385554527,DE
-1385554528,1385554531,AT
-1385554532,1385554719,DE
-1385554720,1385554735,AT
-1385554736,1385557503,DE
-1385557504,1385557759,AT
-1385557760,1385559039,DE
-1385559040,1385559295,SK
-1385559296,1385560831,DE
-1385560832,1385561087,SK
-1385561088,1385562111,DE
-1385562112,1385562623,ES
-1385562624,1385563135,EU
-1385563136,1385563391,IE
-1385563392,1385563647,EU
-1385563648,1385563935,IE
-1385563936,1385564039,EU
-1385564040,1385564055,IE
-1385564056,1385564063,EU
-1385564064,1385564095,IE
-1385564096,1385564103,EU
-1385564104,1385564111,IE
-1385564112,1385564159,EU
-1385564160,1385564231,HU
-1385564232,1385564239,AT
-1385564240,1385564415,EU
-1385564416,1385564671,HU
-1385564672,1385565183,EU
-1385565184,1385565439,ES
-1385565440,1385566335,EU
-1385566336,1385566399,FR
-1385566400,1385566431,EU
-1385566432,1385566975,FR
-1385566976,1385567007,EU
-1385567008,1385567023,FR
-1385567024,1385567087,EU
-1385567088,1385567103,FR
-1385567104,1385567135,EU
-1385567136,1385567155,FR
-1385567156,1385567159,EU
-1385567160,1385567215,FR
-1385567216,1385567223,EU
-1385567224,1385567227,FR
-1385567228,1385567231,EU
+1385553920,1385562111,DE
1385567232,1385568255,IE
-1385568256,1385568767,FR
-1385568768,1385569279,EU
-1385569280,1385569407,FR
-1385569408,1385569455,CZ
-1385569456,1385569471,EU
-1385569472,1385569487,CZ
-1385569488,1385569791,EU
-1385569792,1385570303,FR
1385570304,1385578495,HU
1385578496,1385580543,TR
1385580544,1385580799,DK
1385580800,1385586687,TR
-1385586688,1385587967,GB
-1385587968,1385588735,US
-1385588736,1385589247,HK
-1385589248,1385589503,JP
-1385589504,1385589759,SG
-1385589760,1385590015,JP
-1385590016,1385590783,GB
-1385590784,1385591295,US
-1385591296,1385591807,HK
-1385591808,1385592063,SG
-1385592064,1385594879,GB
+1385586688,1385594879,GB
1385594880,1385603071,NL
1385603072,1385611263,CZ
1385611264,1385619455,AT
@@ -51380,52 +17165,20 @@
1385668608,1385676799,NL
1385676800,1385684991,RU
1385684992,1385824255,GB
-1385824256,1385833471,PT
-1385833472,1385833727,GB
-1385833728,1385955327,PT
+1385824256,1385955327,PT
1385955328,1386086399,NL
-1386086400,1386217319,ES
-1386217320,1386217327,NO
-1386217328,1386217471,ES
+1386086400,1386217471,ES
1386217472,1386283007,PL
1386283008,1386348543,NL
1386348544,1386414079,RU
1386414080,1386479615,GB
1386479616,1386545151,NO
-1386545152,1386549247,DE
-1386549248,1386549503,GB
-1386549504,1386549759,IT
-1386549760,1386550271,ES
-1386550272,1386550527,DE
-1386550528,1386550783,FR
-1386550784,1386551039,GB
-1386551040,1386586111,DE
-1386586112,1386586623,GB
-1386586624,1386587135,FR
-1386587136,1386587903,IT
-1386587904,1386588159,ES
-1386588160,1386590207,DE
-1386590208,1386590719,GB
-1386590720,1386590975,ES
-1386590976,1386591231,IT
-1386591232,1386591487,FR
-1386591488,1386592255,DE
-1386592256,1386592511,PL
-1386592512,1386602495,DE
-1386602496,1386610687,US
+1386545152,1386610687,DE
1386610688,1386676223,IL
1386676224,1386741759,SA
-1386741760,1387233791,NL
-1387233792,1387233919,BE
-1387233920,1387249663,NL
+1386741760,1387249663,NL
1387249664,1387250687,BE
-1387250688,1387251199,NL
-1387251200,1387251231,BE
-1387251232,1387251263,NL
-1387251264,1387251727,BE
-1387251728,1387251751,NL
-1387251752,1387251759,BE
-1387251760,1387331583,NL
+1387250688,1387331583,NL
1387331584,1387397119,PL
1387397120,1387462655,OM
1387462656,1387528191,RU
@@ -51435,45 +17188,12 @@
1387790336,1388314623,IT
1388314624,1388322815,AT
1388322816,1388331007,SI
-1388331008,1388331519,NL
-1388331520,1388331522,FR
-1388331523,1388331524,NL
-1388331525,1388331526,GB
-1388331527,1388331528,DE
-1388331529,1388331532,NL
-1388331533,1388331534,IT
-1388331535,1388331536,NL
-1388331537,1388331538,PL
-1388331539,1388338175,NL
-1388338176,1388338178,FR
-1388338179,1388338180,GB
-1388338181,1388338182,DE
-1388338183,1388338186,NL
-1388338187,1388338188,IT
-1388338189,1388338190,NL
-1388338191,1388338192,PL
-1388338193,1388339199,NL
+1388331008,1388339199,NL
1388339200,1388347391,GB
1388347392,1388363775,DK
1388363776,1388371967,DE
1388371968,1388380159,CH
-1388380160,1388388943,IT
-1388388944,1388388951,NG
-1388388952,1388388959,IT
-1388388960,1388388967,NG
-1388388968,1388389567,IT
-1388389568,1388389631,NG
-1388389632,1388389943,IT
-1388389944,1388389951,NG
-1388389952,1388389967,IT
-1388389968,1388389983,NG
-1388389984,1388390167,IT
-1388390168,1388390191,NG
-1388390192,1388390207,IT
-1388390208,1388394495,NG
-1388394496,1388396031,IT
-1388396032,1388396287,NG
-1388396288,1388396543,IT
+1388380160,1388396543,IT
1388396544,1388404735,LV
1388404736,1388412927,UA
1388412928,1388421119,RU
@@ -51491,50 +17211,16 @@
1388519424,1388527615,NL
1388527616,1388535807,DE
1388535808,1388543999,GB
-1388544000,1388546066,IE
-1388546067,1388546069,GB
-1388546070,1388546159,IE
-1388546160,1388546167,GB
-1388546168,1388547935,IE
-1388547936,1388547951,GB
-1388547952,1388550847,IE
-1388550848,1388550852,IE
-1388550853,1388552191,IE
+1388544000,1388552191,IE
1388552192,1388560383,GB
1388560384,1388568575,FI
-1388568576,1388570841,CH
-1388570842,1388570842,CH
-1388570843,1388576767,CH
-1388576768,1388584959,FR
-1388584960,1388586303,GB
-1388586304,1388586367,EU
-1388586368,1388586391,GB
-1388586392,1388586399,EU
-1388586400,1388586447,GB
-1388586448,1388586455,EU
-1388586456,1388586495,GB
-1388586496,1388587263,EU
-1388587264,1388587391,GB
-1388587392,1388587407,EU
-1388587408,1388587423,GB
-1388587424,1388587439,EU
-1388587440,1388587471,GB
-1388587472,1388587487,EU
-1388587488,1388587503,FR
-1388587504,1388587511,GB
-1388587512,1388587519,EU
-1388587520,1388588543,GB
-1388588544,1388588799,US
+1388568576,1388576767,CH
+1388576768,1388580863,NL
+1388580864,1388584959,FR
+1388587520,1388587775,GB
+1388588288,1388588543,GB
1388588800,1388589823,GB
-1388589824,1388590079,EU
-1388590080,1388590335,FR
-1388590336,1388591103,EU
1388591104,1388591359,AU
-1388591360,1388591615,EU
-1388591616,1388591631,US
-1388591632,1388591647,EU
-1388591648,1388591663,US
-1388591664,1388593151,EU
1388593152,1388601343,RU
1388601344,1388609535,SE
1388609536,1388617727,RU
@@ -51544,103 +17230,62 @@
1388642304,1388650495,FI
1388650496,1388658687,PL
1388658688,1388666879,GB
-1388666880,1388675071,FR
-1388675072,1388675327,NL
-1388675328,1388676863,DE
-1388676864,1388677119,EU
-1388677120,1388677375,GB
-1388677376,1388677631,EU
-1388677632,1388677663,AT
-1388677664,1388677887,EU
-1388677888,1388679167,DE
-1388679168,1388679423,FR
-1388679424,1388679455,DE
-1388679456,1388679679,EU
-1388679680,1388682239,DE
-1388682240,1388682751,EU
-1388682752,1388683263,DE
-1388683264,1388689639,CH
-1388689640,1388689647,DE
-1388689648,1388691455,CH
+1388666880,1388667135,FR
+1388667136,1388667391,RE
+1388667392,1388668671,FR
+1388668672,1388668927,RE
+1388668928,1388669183,FR
+1388669184,1388669439,RE
+1388669440,1388675071,FR
+1388677632,1388677887,NL
+1388678144,1388679167,DE
+1388681216,1388683263,DE
+1388683264,1388683903,CH
+1388683904,1388683919,DE
+1388683920,1388685599,CH
+1388685600,1388685631,GB
+1388685632,1388688127,CH
+1388688128,1388688159,NL
+1388688160,1388691455,CH
1388691456,1388699647,NL
1388699648,1388707839,SE
-1388707840,1388708607,LB
-1388708608,1388709119,LT
-1388709120,1388709375,IQ
-1388709376,1388709887,RU
-1388709888,1388710911,LB
-1388710912,1388711167,IQ
-1388711168,1388711679,RU
+1388707840,1388708095,LB
+1388708096,1388709631,RU
+1388709632,1388709887,LT
+1388709888,1388711679,RU
1388711680,1388711935,LB
-1388711936,1388712191,RU
-1388712192,1388712703,LT
-1388712704,1388713215,LB
-1388713216,1388713471,SE
-1388713472,1388713727,RU
-1388713728,1388713983,LT
-1388713984,1388714239,RU
+1388711936,1388714239,RU
1388714240,1388714495,LB
1388714496,1388714751,RU
-1388714752,1388715007,IQ
+1388714752,1388715007,LT
1388715008,1388715263,LB
-1388715264,1388715519,LT
-1388715520,1388715775,LV
-1388715776,1388716031,LT
+1388715264,1388716031,RU
1388716032,1388724223,ES
1388724224,1388732415,DE
1388732416,1388740607,ES
-1388740608,1388740623,GB
-1388740624,1388740719,IE
-1388740720,1388740727,GB
-1388740728,1388740731,IE
-1388740732,1388740735,GB
-1388740736,1388740847,IE
-1388740848,1388741231,GB
-1388741232,1388741239,IE
-1388741240,1388741375,GB
-1388741376,1388741971,IE
-1388741972,1388741983,GB
-1388741984,1388742067,IE
-1388742068,1388742079,GB
-1388742080,1388742143,IE
-1388742144,1388742335,GB
-1388742336,1388742367,IE
-1388742368,1388742463,GB
-1388742464,1388742479,IE
-1388742480,1388742559,GB
-1388742560,1388742575,IE
-1388742576,1388742719,GB
-1388742720,1388742731,IE
-1388742732,1388742735,IR
-1388742736,1388742795,IE
-1388742796,1388742847,GB
-1388742848,1388743087,IE
-1388743088,1388743099,GB
-1388743100,1388743603,IE
-1388743604,1388743615,GB
-1388743616,1388743650,IE
-1388743651,1388743651,GB
-1388743652,1388744683,IE
-1388744684,1388744687,GB
-1388744688,1388745951,IE
-1388745952,1388745959,GB
-1388745960,1388746263,IE
-1388746264,1388746271,GB
-1388746272,1388746399,IE
-1388746400,1388746495,GB
-1388746496,1388746851,IE
-1388746852,1388746863,GB
-1388746864,1388746967,IE
-1388746968,1388746975,GB
-1388746976,1388748303,IE
-1388748304,1388748319,GB
-1388748320,1388748349,IE
-1388748350,1388748351,GB
-1388748352,1388748663,IE
-1388748664,1388748667,GB
-1388748668,1388748791,IE
-1388748792,1388748795,GB
-1388748796,1388748799,IE
+1388740608,1388741791,GB
+1388741792,1388741795,IE
+1388741796,1388743015,GB
+1388743016,1388743023,IE
+1388743024,1388743047,GB
+1388743048,1388743055,IE
+1388743056,1388743423,GB
+1388743424,1388743435,IE
+1388743436,1388743679,GB
+1388743680,1388743935,IE
+1388743936,1388744391,GB
+1388744392,1388744395,IE
+1388744396,1388744759,GB
+1388744760,1388744767,IE
+1388744768,1388744831,GB
+1388744832,1388744847,IE
+1388744848,1388745971,GB
+1388745972,1388745975,IE
+1388745976,1388746495,GB
+1388746496,1388746751,IE
+1388746752,1388746911,GB
+1388746912,1388746927,IE
+1388746928,1388748799,GB
1388748800,1388756991,RU
1388756992,1388765183,DE
1388765184,1388773375,GB
@@ -51648,32 +17293,15 @@
1388781568,1388789759,ES
1388789760,1388794943,NL
1388794944,1388794959,GB
-1388794960,1388796559,NL
-1388796560,1388796575,GB
-1388796576,1388796679,NL
-1388796680,1388796687,GB
-1388796688,1388796783,NL
-1388796784,1388796799,GB
-1388796800,1388797951,NL
+1388794960,1388796679,NL
+1388796680,1388796681,GB
+1388796682,1388796682,NL
+1388796683,1388796687,GB
+1388796688,1388797951,NL
1388797952,1388806143,RU
-1388806144,1388806911,DE
-1388806912,1388807167,AT
-1388807168,1388807679,DE
-1388807680,1388807711,BZ
-1388807712,1388808255,DE
-1388808256,1388808287,BZ
-1388808288,1388813311,DE
-1388813312,1388813567,FR
-1388813568,1388813823,AR
-1388813824,1388814335,DE
-1388814336,1388815103,AX
-1388815104,1388815231,FI
-1388815232,1388818687,AX
-1388818688,1388818815,FI
-1388818816,1388821119,AX
-1388821120,1388821150,SE
-1388821151,1388821247,AX
-1388821248,1388822527,SE
+1388806144,1388814335,DE
+1388814336,1388822015,AX
+1388822016,1388822527,SE
1388822528,1388830719,AM
1388830720,1388838911,FI
1388838912,1388871679,RU
@@ -51687,258 +17315,28 @@
1389101056,1389133823,NL
1389133824,1389166591,RU
1389166592,1389199359,PS
-1389199360,1389199871,A2
+1389199360,1389199871,AE
1389199872,1389200159,US
-1389200160,1389201919,A2
-1389201920,1389202175,AF
-1389202176,1389203551,A2
-1389203552,1389203567,LB
-1389203568,1389203743,A2
-1389203744,1389203775,IQ
-1389203776,1389203967,A2
-1389203968,1389203999,LY
-1389204000,1389204223,A2
-1389204224,1389204255,IQ
-1389204256,1389204799,A2
-1389204800,1389204863,IQ
-1389204864,1389204879,A2
-1389204880,1389204895,IQ
-1389204896,1389205247,A2
-1389205248,1389205503,AF
-1389205504,1389205631,A2
-1389205632,1389205759,DE
-1389205760,1389205791,A2
-1389205792,1389205823,DE
-1389205824,1389206143,A2
-1389206144,1389206175,LY
-1389206176,1389206783,A2
-1389206784,1389207039,DE
-1389207040,1389207423,A2
-1389207424,1389207487,DE
-1389207488,1389209887,A2
-1389209888,1389209903,IQ
-1389209904,1389210143,A2
-1389210144,1389210207,IQ
-1389210208,1389210271,A2
-1389210272,1389210303,IQ
-1389210304,1389210623,A2
-1389210624,1389210627,IQ
-1389210628,1389210631,US
-1389210632,1389210655,IQ
-1389210656,1389210687,A2
-1389210688,1389210719,IQ
-1389210720,1389210767,A2
-1389210768,1389210783,IQ
-1389210784,1389210815,A2
-1389210816,1389210847,IQ
-1389210848,1389211135,A2
-1389211136,1389211151,IQ
-1389211152,1389211199,A2
-1389211200,1389211263,IQ
-1389211264,1389211343,A2
-1389211344,1389211359,LY
-1389211360,1389211391,A2
-1389211392,1389211423,IQ
-1389211424,1389211439,A2
-1389211440,1389211455,IQ
-1389211456,1389211519,A2
-1389211520,1389211535,IQ
-1389211536,1389211567,A2
-1389211568,1389211647,IQ
-1389211648,1389212159,A2
-1389212160,1389212415,GB
-1389212416,1389212671,A2
-1389212672,1389212767,IQ
-1389212768,1389213087,A2
-1389213088,1389213119,IQ
-1389213120,1389213183,A2
-1389213184,1389213439,LY
-1389213440,1389214719,A2
-1389214720,1389215743,LY
-1389215744,1389215999,AF
-1389216000,1389217535,A2
-1389217536,1389217791,AF
-1389217792,1389218047,A2
-1389218048,1389218303,AE
-1389218304,1389219839,AF
-1389219840,1389220191,A2
-1389220192,1389220207,IQ
-1389220208,1389222543,A2
-1389222544,1389222559,LY
-1389222560,1389222591,SA
-1389222592,1389223679,A2
-1389223680,1389223935,DE
-1389223936,1389224191,US
-1389224192,1389225215,A2
-1389225216,1389225471,US
-1389225472,1389225583,AE
-1389225584,1389225599,IQ
-1389225600,1389225727,AE
-1389225728,1389225983,A2
-1389225984,1389226239,AE
-1389226240,1389226495,A2
-1389226496,1389227775,AE
-1389227776,1389227791,IQ
-1389227792,1389228351,A2
-1389228352,1389228415,AE
+1389200160,1389218815,AE
+1389218816,1389219839,AF
+1389219840,1389228415,AE
1389228416,1389228479,LB
-1389228480,1389229055,A2
-1389229056,1389231359,AE
-1389231360,1389231615,EU
-1389231616,1389231871,A2
-1389231872,1389232127,SA
-1389232128,1389232319,DE
-1389232320,1389232327,LT
-1389232328,1389263615,DE
-1389263616,1389263871,NL
-1389263872,1389264031,DE
-1389264032,1389264063,ES
-1389264064,1389264127,DE
-1389264128,1389264639,ES
-1389264640,1389264895,US
+1389228480,1389232127,AE
+1389232128,1389264895,DE
1389264896,1389265151,TZ
-1389265152,1389265167,NG
-1389265168,1389265183,US
-1389265184,1389265199,ZA
-1389265200,1389265231,ET
-1389265232,1389265239,TZ
-1389265240,1389265263,A2
-1389265264,1389265279,NG
-1389265280,1389265407,TD
-1389265408,1389265663,US
-1389265664,1389266463,A2
-1389266464,1389266471,CD
-1389266472,1389266543,A2
-1389266544,1389266551,CD
-1389266552,1389266559,A2
-1389266560,1389266569,CD
-1389266570,1389266575,A2
-1389266576,1389266591,NG
-1389266592,1389266599,A2
-1389266600,1389266607,NG
-1389266608,1389266663,A2
-1389266664,1389266687,CD
-1389266688,1389266695,ZA
-1389266696,1389266957,A2
+1389265152,1389266957,GB
1389266958,1389266958,NG
-1389266959,1389267199,A2
-1389267200,1389267455,CD
-1389267456,1389267967,A2
-1389267968,1389268223,BI
-1389268224,1389268351,US
-1389268352,1389268479,A2
-1389268480,1389268607,US
-1389268608,1389268735,GB
-1389268736,1389268863,A2
+1389266959,1389268863,GB
1389268864,1389268871,KE
-1389268872,1389269023,A2
-1389269024,1389269031,CD
-1389269032,1389269055,A2
-1389269056,1389269063,CD
-1389269064,1389269151,A2
-1389269152,1389269159,NG
-1389269160,1389269183,A2
-1389269184,1389269215,NG
-1389269216,1389269247,A2
-1389269248,1389269375,NG
-1389269376,1389269759,A2
-1389269760,1389269887,CD
-1389269888,1389270015,A2
-1389270016,1389270079,CD
-1389270080,1389270095,A2
-1389270096,1389270111,CD
-1389270112,1389270815,A2
-1389270816,1389270823,US
-1389270824,1389271039,A2
-1389271040,1389271295,CA
-1389271296,1389272063,A2
-1389272064,1389272191,NO
-1389272192,1389272223,GB
-1389272224,1389272319,A2
-1389272320,1389272575,AE
-1389272576,1389272831,A2
-1389272832,1389272959,ZA
-1389272960,1389273087,FR
-1389273088,1389273343,LB
-1389273344,1389273599,AE
-1389273600,1389273855,MG
-1389273856,1389274111,NG
-1389274112,1389274367,A2
-1389274368,1389274399,US
-1389274400,1389274431,GH
-1389274432,1389274494,US
-1389274495,1389274495,A2
-1389274496,1389274751,ZA
-1389274752,1389274815,CD
-1389274816,1389274839,LR
-1389274840,1389274847,A2
-1389274848,1389274879,LR
-1389274880,1389275135,AE
-1389275136,1389275391,GB
-1389275392,1389275471,BD
-1389275472,1389275503,A2
-1389275504,1389275511,DE
-1389275512,1389275647,A2
+1389268872,1389275647,GB
1389275648,1389275903,ZA
-1389275904,1389276415,US
-1389276416,1389276671,MX
-1389276672,1389277055,A2
-1389277056,1389277183,MX
-1389277184,1389277439,A2
-1389277440,1389277695,IQ
-1389277696,1389277951,AE
-1389277952,1389278207,A2
-1389278208,1389278463,SN
-1389278464,1389278719,MX
-1389278720,1389278975,DE
-1389278976,1389279231,MX
-1389279232,1389279487,US
-1389279488,1389279743,TZ
-1389279744,1389279999,LR
-1389280000,1389280255,CI
-1389280256,1389280511,A2
-1389280512,1389280767,FR
-1389280768,1389281023,VG
-1389281024,1389281279,A2
-1389281280,1389282047,ZA
-1389282048,1389282815,A2
-1389282816,1389282943,LR
-1389282944,1389283071,SN
-1389283072,1389283327,A2
-1389283328,1389283583,LR
-1389283584,1389283711,A2
-1389283712,1389283839,ZA
-1389283840,1389287423,A2
-1389287424,1389287551,US
-1389287552,1389287679,A2
-1389287680,1389287935,DK
-1389287936,1389288447,US
+1389275904,1389288447,GB
1389288448,1389289471,GN
1389289472,1389290495,NO
-1389290496,1389290751,US
-1389290752,1389291007,FR
-1389291008,1389291519,A2
-1389291520,1389292031,US
-1389292032,1389292799,GH
-1389292800,1389293055,MG
-1389293056,1389293311,US
-1389293312,1389294335,A2
-1389294336,1389294591,US
-1389294592,1389294719,A2
-1389294720,1389294847,IQ
-1389294848,1389295615,US
-1389295616,1389295871,ZA
-1389295872,1389296063,US
-1389296064,1389296383,A2
-1389296384,1389296447,AD
-1389296448,1389296639,A2
-1389296640,1389297151,TZ
-1389297152,1389297663,A2
+1389290496,1389297663,GB
1389297664,1389330431,UA
1389330432,1389363199,DE
-1389363200,1389365780,CZ
-1389365781,1389365781,SA
-1389365782,1389379583,CZ
+1389363200,1389379583,CZ
1389379584,1389395967,RU
1389395968,1389412351,RO
1389412352,1389428735,RS
@@ -51946,62 +17344,10 @@
1389445120,1389461503,RU
1389461504,1389477887,SE
1389477888,1389494271,BY
-1389494272,1389495615,DE
-1389495616,1389495645,CH
-1389495646,1389502239,DE
-1389502240,1389502271,CH
-1389502272,1389504511,DE
-1389504512,1389504772,FR
-1389504773,1389504780,CH
-1389504781,1389505023,FR
-1389505024,1389510655,DE
+1389494272,1389510655,DE
1389510656,1389527039,NL
1389527040,1389543423,PL
-1389543424,1389544927,DE
-1389544928,1389544943,SG
-1389544944,1389548991,DE
-1389548992,1389549055,BE
-1389549056,1389552735,DE
-1389552736,1389552743,FR
-1389552744,1389552815,DE
-1389552816,1389552823,NL
-1389552824,1389557247,DE
-1389557248,1389557375,EU
-1389557376,1389557391,DE
-1389557392,1389557503,EU
-1389557504,1389558015,DE
-1389558016,1389558271,EU
-1389558272,1389559743,DE
-1389559744,1389559807,CH
-1389559808,1389560063,DE
-1389560064,1389560319,BR
-1389560320,1389561343,DE
-1389561344,1389561599,IT
-1389561600,1389562111,DE
-1389562112,1389562367,US
-1389562368,1389563135,IT
-1389563136,1389563391,DE
-1389563392,1389563647,IT
-1389563648,1389563775,DE
-1389563776,1389563839,GB
-1389563840,1389563903,DE
-1389563904,1389564159,IT
-1389564160,1389565439,DE
-1389565440,1389565695,IT
-1389565696,1389565951,DE
-1389565952,1389566207,IT
-1389566208,1389566463,BR
-1389566464,1389567231,DE
-1389567232,1389567487,IT
-1389567488,1389568767,DE
-1389568768,1389569023,IT
-1389569024,1389569279,DE
-1389569280,1389569535,US
-1389569536,1389570047,DE
-1389570048,1389570303,IT
-1389570304,1389573887,DE
-1389573888,1389574143,NL
-1389574144,1389576191,DE
+1389543424,1389576191,DE
1389576192,1389592575,GB
1389592576,1389598719,GE
1389598720,1389598975,RU
@@ -52017,29 +17363,16 @@
1389707264,1389723647,IT
1389723648,1389756415,ES
1389756416,1389772799,SE
-1389772800,1389778431,SI
-1389778432,1389778943,CA
-1389778944,1389780735,RS
-1389780736,1389780991,SI
-1389780992,1389782783,HR
-1389782784,1389783039,SI
+1389772800,1389783039,SI
1389783040,1389785087,BA
1389785088,1389787135,MK
-1389787136,1389788671,SI
-1389788672,1389789183,RS
+1389787136,1389789183,SI
1389789184,1389805567,PL
-1389805568,1389806591,US
+1389805568,1389805823,DE
+1389805824,1389806079,US
+1389806080,1389806591,DE
1389806592,1389806847,SA
-1389806848,1389808639,US
-1389808640,1389808895,EU
-1389808896,1389814271,US
-1389814272,1389814527,DE
-1389814528,1389814783,US
-1389814784,1389815039,EU
-1389815040,1389815295,US
-1389815296,1389815551,DE
-1389815552,1389815807,US
-1389815808,1389821951,DE
+1389806848,1389821951,DE
1389821952,1389838335,NL
1389838336,1389854719,UZ
1389854720,1389871103,IT
@@ -52051,18 +17384,13 @@
1390149632,1390215167,CH
1390215168,1390280703,IS
1390280704,1390346239,TR
-1390346240,1390394367,ES
-1390394368,1390394879,PT
-1390394880,1390395391,ES
-1390395392,1390396415,FR
-1390396416,1390397183,PT
-1390397184,1390411775,ES
+1390346240,1390411775,ES
1390411776,1392508927,FR
-1392508928,1394606079,PL
+1392508928,1393623705,PL
+1393623706,1393623706,GB
+1393623707,1394606079,PL
1394606080,1396703231,ES
-1396703232,1396776476,AT
-1396776477,1396776477,AT
-1396776478,1396834303,AT
+1396703232,1396834303,AT
1396834304,1396899839,TR
1396899840,1396965375,GB
1396965376,1396973567,NL
@@ -52080,20 +17408,17 @@
1397071872,1397096447,RU
1397096448,1397227519,IE
1397227520,1397489663,DK
-1397489664,1397751807,CH
+1397489664,1397582847,CH
+1397582848,1397583103,DE
+1397583104,1397583615,CH
+1397583616,1397583871,DE
+1397583872,1397751807,CH
1397751808,1398276095,NL
1398276096,1398800383,DK
-1398800384,1398817279,KW
-1398817280,1398817343,US
-1398817344,1398817407,KW
-1398817408,1398817535,US
-1398817536,1398833151,KW
-1398833152,1398840447,NL
-1398840448,1398840575,GB
-1398840576,1398865919,NL
+1398800384,1398833151,KW
+1398833152,1398865919,NL
1398865920,1398867967,RU
1398867968,1398870015,NL
-1398870016,1398872063,PL
1398872064,1398874111,BG
1398874112,1398876159,GB
1398876160,1398880255,DE
@@ -52104,35 +17429,10 @@
1398888448,1398890495,GB
1398890496,1398892543,DK
1398892544,1398894591,RU
-1398894592,1398896639,DE
1398896640,1398898687,CH
1398898688,1398931455,ES
1398931456,1398964223,GB
-1398964224,1398964543,NL
-1398964544,1398964559,US
-1398964560,1398965503,NL
-1398965504,1398965759,US
-1398965760,1398966839,NL
-1398966840,1398966847,PL
-1398966848,1398967871,NL
-1398967872,1398967903,IE
-1398967904,1398973951,NL
-1398973952,1398974207,US
-1398974208,1398979327,NL
-1398979328,1398979583,US
-1398979584,1398980873,NL
-1398980874,1398980881,US
-1398980882,1398980956,NL
-1398980957,1398980975,US
-1398980976,1398982143,NL
-1398982144,1398982399,US
-1398982400,1398983423,NL
-1398983424,1398983487,GB
-1398983488,1398983519,JE
-1398983520,1398983551,GB
-1398983552,1398983679,NL
-1398983680,1398984191,US
-1398984192,1398996991,NL
+1398964224,1398996991,NL
1398996992,1399029759,LU
1399029760,1399062527,LV
1399062528,1399095295,FI
@@ -52148,69 +17448,37 @@
1399717888,1399848959,AE
1399848960,1400111103,FR
1400111104,1400373247,NL
-1400373248,1400705279,DE
-1400705280,1400705791,EU
-1400705792,1400707071,DE
-1400707072,1400708095,EU
-1400708096,1400709119,DE
-1400709120,1400709120,EU
-1400709121,1400710142,DE
-1400710143,1400710399,EU
-1400710400,1400712191,DE
-1400712192,1400712447,EU
-1400712448,1400712703,DE
-1400712704,1400712959,EU
-1400712960,1400718335,DE
-1400718336,1400718847,EU
-1400718848,1400722431,DE
-1400722432,1400729599,EU
-1400729600,1400730639,DE
-1400730640,1400731135,EU
-1400731136,1400733695,DE
-1400733696,1400897535,EU
+1400373248,1400702463,DE
+1400702976,1400705023,DE
+1400706048,1400707071,DE
+1400709120,1400710143,DE
+1400711168,1400712191,DE
+1400713216,1400718335,DE
+1400719360,1400721407,DE
+1400723456,1400727551,DE
+1400729600,1400730623,DE
+1400731648,1400733695,DE
1400897536,1400963071,NL
1400963072,1401028607,DE
1401028608,1401094143,IL
1401094144,1401159679,HR
1401159680,1401225215,PT
1401225216,1401241599,DE
-1401241600,1401242623,EU
-1401242624,1401244159,DE
-1401244160,1401246719,EU
1401246720,1401257983,DE
-1401257984,1401264127,EU
-1401264128,1401264903,DE
-1401264904,1401265151,EU
-1401265152,1401265919,DE
-1401265920,1401265951,EU
-1401265952,1401265983,DE
-1401265984,1401270271,EU
-1401270272,1401273599,DE
-1401273600,1401273727,EU
-1401273728,1401274367,DE
-1401274368,1401278463,EU
+1401271296,1401274367,DE
1401278464,1401283583,DE
-1401283584,1401286655,EU
1401286656,1401290751,DE
1401290752,1401356287,BE
1401356288,1401421823,DE
1401421824,1401423871,GB
-1401423872,1401423903,AE
-1401423904,1401423967,GR
-1401423968,1401423999,SA
-1401424000,1401425151,AE
-1401425152,1401425407,GR
-1401425408,1401425919,AE
+1401423872,1401425919,AE
1401425920,1401427967,NL
1401427968,1401430015,RU
1401430016,1401432063,AT
1401432064,1401434111,IE
-1401434112,1401436159,RU
1401436160,1401438207,BH
1401438208,1401440255,GB
-1401440256,1401443487,DE
-1401443488,1401443519,GI
-1401443520,1401444351,DE
+1401440256,1401444351,DE
1401444352,1401446399,DK
1401446400,1401448447,DE
1401448448,1401450495,IT
@@ -52230,28 +17498,21 @@
1401477120,1401479167,BE
1401479168,1401481215,PL
1401481216,1401485311,RU
-1401485312,1401487871,GB
-1401487872,1401488127,EU
-1401488128,1401489407,GB
+1401485312,1401489407,GB
1401489408,1401491455,SE
1401491456,1401493503,NL
1401493504,1401495551,CH
1401495552,1401497599,DE
1401497600,1401499647,AT
1401499648,1401501695,RU
-1401501696,1401501791,IT
-1401501792,1401502207,A2
-1401502208,1401502463,IT
-1401502464,1401503487,A2
+1401501696,1401503487,IT
1401503488,1401503743,AL
1401503744,1401505791,DE
1401505792,1401509887,CH
1401509888,1401511935,UA
1401511936,1401513983,DE
1401513984,1401516031,IT
-1401516032,1401516439,AT
-1401516440,1401516447,AE
-1401516448,1401518079,AT
+1401516032,1401518079,AT
1401518080,1401520127,DK
1401520128,1401522175,GB
1401522176,1401526271,NL
@@ -52267,17 +17528,9 @@
1401544704,1401546751,GB
1401546752,1401548799,IT
1401548800,1401550847,FR
-1401550848,1401550879,GB
-1401550880,1401550911,JE
-1401550912,1401550935,GB
-1401550936,1401550975,JE
-1401550976,1401550983,GB
-1401550984,1401551015,JE
-1401551016,1401551023,GB
-1401551024,1401551071,JE
-1401551072,1401551871,GB
-1401551872,1401552383,JE
-1401552384,1401552895,GB
+1401550848,1401551103,GB
+1401551104,1401552639,JE
+1401552640,1401552895,GB
1401552896,1401554943,NL
1401554944,1401556991,IE
1401556992,1401563135,GB
@@ -52291,230 +17544,8 @@
1401634816,1401651199,HR
1401651200,1401667583,RU
1401667584,1401683967,IT
-1401683968,1401684067,SE
-1401684068,1401684071,NO
-1401684072,1401684075,DE
-1401684076,1401684479,SE
-1401684480,1401684511,DK
-1401684512,1401684515,DE
-1401684516,1401684519,SE
-1401684520,1401684527,NL
-1401684528,1401684671,SE
-1401684672,1401684703,DK
-1401684704,1401684731,SE
-1401684732,1401684735,DK
-1401684736,1401684755,NO
-1401684756,1401684759,SE
-1401684760,1401684763,DE
-1401684764,1401684767,SE
-1401684768,1401684895,NO
-1401684896,1401684995,SE
-1401684996,1401684999,DE
-1401685000,1401686015,SE
-1401686016,1401686059,GB
-1401686060,1401686063,DE
-1401686064,1401686143,GB
-1401686144,1401686207,SE
-1401686208,1401686215,NL
-1401686216,1401686223,SE
-1401686224,1401686271,GB
-1401686272,1401686287,SE
-1401686288,1401686291,DE
-1401686292,1401686335,SE
-1401686336,1401686399,NL
-1401686400,1401686911,SE
-1401686912,1401686927,DE
-1401686928,1401686943,SE
-1401686944,1401686947,DE
-1401686948,1401691519,SE
-1401691520,1401691535,DE
-1401691536,1401695263,SE
-1401695264,1401695267,GB
-1401695268,1401695271,SE
-1401695272,1401695275,GB
-1401695276,1401695279,DE
-1401695280,1401697815,SE
-1401697816,1401697823,DE
-1401697824,1401698223,SE
-1401698224,1401698227,GB
-1401698228,1401698231,DE
-1401698232,1401703951,SE
-1401703952,1401703955,DE
-1401703956,1401704511,SE
-1401704512,1401704515,DE
-1401704516,1401705983,SE
-1401705984,1401705987,DE
-1401705988,1401708287,SE
-1401708288,1401708543,DE
-1401708544,1401708671,FR
-1401708672,1401708799,IT
-1401708800,1401708927,FR
-1401708928,1401709055,PL
-1401709056,1401709311,SE
-1401709312,1401709567,GB
-1401709568,1401711615,SE
-1401711616,1401711647,GB
-1401711648,1401711679,DE
-1401711680,1401711711,NL
-1401711712,1401711743,ES
-1401711744,1401711775,DK
-1401711776,1401711807,IT
-1401711808,1401711839,US
-1401711840,1401711871,NL
-1401711872,1401711903,GB
-1401711904,1401711935,DE
-1401711936,1401711967,NL
-1401711968,1401711999,ES
-1401712000,1401712031,DK
-1401712032,1401712063,CH
-1401712064,1401712095,FR
-1401712096,1401712127,NL
-1401712128,1401712159,GB
-1401712160,1401712191,DE
-1401712192,1401712223,SE
-1401712224,1401712255,ES
-1401712256,1401712287,DK
-1401712288,1401712319,SE
-1401712320,1401712351,IT
-1401712352,1401712383,DE
-1401712384,1401712415,GB
-1401712416,1401712447,DE
-1401712448,1401712479,NL
-1401712480,1401712511,ES
-1401712512,1401712543,SE
-1401712544,1401712575,US
-1401712576,1401712607,GB
-1401712608,1401712639,NL
-1401712640,1401712895,SE
-1401712896,1401713151,DE
-1401713152,1401714047,SE
-1401714048,1401714063,FR
-1401714064,1401719935,SE
-1401719936,1401719951,DK
-1401719952,1401719955,GB
-1401719956,1401719959,SE
-1401719960,1401719963,GB
-1401719964,1401719967,DE
-1401719968,1401726783,SE
-1401726784,1401726787,DE
-1401726788,1401727743,SE
-1401727744,1401727999,GB
-1401728000,1401728335,SE
-1401728336,1401728351,NL
-1401728352,1401728431,SE
-1401728432,1401728447,NL
-1401728448,1401740543,SE
-1401740544,1401740799,DE
-1401740800,1401742847,SE
-1401742848,1401742879,GB
-1401742880,1401742895,SE
-1401742896,1401742911,GB
-1401742912,1401743055,SE
-1401743056,1401743071,GB
-1401743072,1401743087,SE
-1401743088,1401743119,GB
-1401743120,1401743151,SE
-1401743152,1401743167,GB
-1401743168,1401743311,SE
-1401743312,1401743327,GB
-1401743328,1401743343,SE
-1401743344,1401743359,GB
-1401743360,1401745439,SE
-1401745440,1401745443,GB
-1401745444,1401745447,US
-1401745448,1401745487,SE
-1401745488,1401745503,ES
-1401745504,1401745919,SE
-1401745920,1401745935,IT
-1401745936,1401745959,SE
-1401745960,1401745967,US
-1401745968,1401745971,MY
-1401745972,1401745975,NL
-1401745976,1401745983,SE
-1401745984,1401745999,NL
-1401746000,1401746015,ES
-1401746016,1401746019,GB
-1401746020,1401746023,SE
-1401746024,1401746027,DE
-1401746028,1401746175,SE
-1401746176,1401746191,DK
-1401746192,1401746215,SE
-1401746216,1401746223,BG
-1401746224,1401746239,SE
-1401746240,1401746255,NL
-1401746256,1401746271,ES
-1401746272,1401746279,GB
-1401746280,1401746283,SE
-1401746284,1401746287,US
-1401746288,1401746291,DE
-1401746292,1401746431,SE
-1401746432,1401746447,NL
-1401746448,1401746467,SE
-1401746468,1401746471,NL
-1401746472,1401746479,US
-1401746480,1401746487,GB
-1401746488,1401746495,SE
-1401746496,1401746511,NL
-1401746512,1401746527,ES
-1401746528,1401746531,DE
-1401746532,1401746623,SE
-1401746624,1401746639,DE
-1401746640,1401746655,SE
-1401746656,1401746687,IE
-1401746688,1401746703,NO
-1401746704,1401746719,SE
-1401746720,1401746723,DE
-1401746724,1401746751,SE
-1401746752,1401746767,NL
-1401746768,1401746783,ES
-1401746784,1401746879,SE
-1401746880,1401746895,DE
-1401746896,1401746943,SE
-1401746944,1401746959,FR
-1401746960,1401747007,SE
-1401747008,1401747023,NL
-1401747024,1401747039,ES
-1401747040,1401747043,DE
-1401747044,1401747135,SE
-1401747136,1401747151,DE
-1401747152,1401747199,SE
-1401747200,1401747215,IT
-1401747216,1401747235,SE
-1401747236,1401747239,US
-1401747240,1401747243,DE
-1401747244,1401747247,SE
-1401747248,1401747263,ES
-1401747264,1401747391,SE
-1401747392,1401747407,DE
-1401747408,1401747423,GB
-1401747424,1401747439,ES
-1401747440,1401747487,SE
-1401747488,1401747495,DK
-1401747496,1401747499,SE
-1401747500,1401747503,GB
-1401747504,1401747583,SE
-1401747584,1401747587,DE
-1401747588,1401747647,SE
-1401747648,1401747663,DE
-1401747664,1401747711,SE
-1401747712,1401747967,FR
-1401747968,1401749135,SE
-1401749136,1401749151,DE
-1401749152,1401749503,SE
-1401749504,1401750719,DE
-1401750720,1401750735,ES
-1401750736,1401753087,DE
-1401753088,1401753343,AT
-1401753344,1401759231,DE
-1401759232,1401759487,GB
-1401759488,1401760255,DE
-1401760256,1401760767,SK
-1401760768,1401764095,DE
-1401764096,1401764351,ES
-1401764352,1401765247,DE
-1401765248,1401765375,NL
-1401765376,1401765759,DE
-1401765760,1401765887,NL
+1401683968,1401749503,SE
+1401749504,1401765887,DE
1401765888,1401782271,IE
1401782272,1401815039,FR
1401815040,1401817087,SE
@@ -52569,7 +17600,6 @@
1401935872,1401937919,FI
1401937920,1401939967,GB
1401939968,1401942015,UA
-1401942016,1401944063,EU
1401944064,1401946111,BG
1401946112,1401962495,FR
1401962496,1401978879,PL
@@ -52577,19 +17607,17 @@
1401995264,1402011647,CH
1402011648,1402018815,SE
1402018816,1402019327,FI
-1402019328,1402021535,SE
-1402021536,1402021567,NO
-1402021568,1402027263,SE
+1402019328,1402027263,SE
1402027264,1402027519,NO
-1402027520,1402027823,SE
-1402027824,1402027831,GB
-1402027832,1402028031,SE
+1402027520,1402028031,SE
1402028032,1402044415,FR
1402044416,1402060799,PL
1402060800,1402077183,FI
1402077184,1402093567,GB
1402093568,1402109951,RU
-1402109952,1402142719,FI
+1402109952,1402129919,FI
+1402129920,1402130175,AX
+1402130176,1402142719,FI
1402142720,1402159103,ES
1402159104,1402175487,IT
1402175488,1402191871,IE
@@ -52601,7 +17629,9 @@
1402273792,1402277631,RU
1402277632,1402277887,TJ
1402277888,1402290175,RU
-1402290176,1402306559,NL
+1402290176,1402306204,NL
+1402306205,1402306205,DE
+1402306206,1402306559,NL
1402306560,1402322943,IT
1402322944,1402339327,RU
1402339328,1402355711,CH
@@ -52612,85 +17642,10 @@
1402408960,1402413055,DE
1402413056,1402417151,PL
1402417152,1402421247,DE
-1402421248,1402421375,NL
-1402421376,1402421735,FR
-1402421736,1402421743,NL
-1402421744,1402422119,FR
-1402422120,1402422127,PT
-1402422128,1402422159,FR
-1402422160,1402422167,AT
-1402422168,1402422783,FR
-1402422784,1402423039,LU
-1402423040,1402423295,FR
-1402423296,1402423399,BE
-1402423400,1402423407,LU
-1402423408,1402423807,BE
-1402423808,1402423839,FR
-1402423840,1402423847,ES
-1402423848,1402423919,FR
-1402423920,1402423927,ES
-1402423928,1402424319,FR
-1402424320,1402424575,BE
-1402424576,1402424831,FR
-1402424832,1402425343,GB
-1402425344,1402425599,DE
-1402425600,1402425855,LU
-1402425856,1402425871,BE
-1402425872,1402425935,FR
-1402425936,1402425943,NL
-1402425944,1402425999,FR
-1402426000,1402426015,CH
-1402426016,1402426271,FR
-1402426272,1402426279,PT
-1402426280,1402426367,FR
-1402426368,1402426623,DE
-1402426624,1402427135,CH
-1402427136,1402427239,GB
-1402427240,1402427247,FR
-1402427248,1402427335,GB
-1402427336,1402427343,FR
-1402427344,1402427535,GB
-1402427536,1402427551,BE
-1402427552,1402427655,GB
-1402427656,1402427663,FR
-1402427664,1402427671,GB
-1402427672,1402427679,NL
-1402427680,1402427903,GB
-1402427904,1402427935,FR
-1402427936,1402427951,GB
-1402427952,1402427959,FR
-1402427960,1402428023,GB
-1402428024,1402428031,AT
-1402428032,1402428095,GB
-1402428096,1402428103,BE
-1402428104,1402428111,GB
-1402428112,1402428119,BE
-1402428120,1402428255,GB
-1402428256,1402428271,AT
-1402428272,1402428279,FR
-1402428280,1402428295,GB
-1402428296,1402428311,BE
-1402428312,1402428319,NL
-1402428320,1402428335,FR
-1402428336,1402428351,BE
-1402428352,1402429439,GB
-1402429440,1402431487,US
-1402431488,1402433535,GB
-1402433536,1402434047,FR
-1402434048,1402434071,GB
-1402434072,1402434079,NL
-1402434080,1402434103,GB
-1402434104,1402434111,NL
-1402434112,1402434559,GB
-1402434560,1402434815,US
-1402434816,1402434895,FR
-1402434896,1402434911,GB
-1402434912,1402434943,FR
-1402434944,1402435071,GB
-1402435072,1402435103,LU
-1402435104,1402435327,GB
-1402435328,1402435343,SE
-1402435344,1402437631,GB
+1402421248,1402422271,FR
+1402422272,1402429439,GB
+1402429440,1402430463,US
+1402430464,1402437631,GB
1402437632,1402454015,DK
1402454016,1402470399,GB
1402470400,1402994687,FR
@@ -52698,26 +17653,14 @@
1403256832,1403322367,AT
1403322368,1403387903,ES
1403387904,1403396095,SE
-1403396096,1403400191,EE
-1403400192,1403400207,TR
-1403400208,1403400215,EE
-1403400216,1403400219,US
-1403400220,1403400239,EE
-1403400240,1403400255,BG
-1403400256,1403400263,EE
-1403400264,1403400271,US
-1403400272,1403404287,EE
+1403396096,1403404287,EE
1403404288,1403412479,GB
1403412480,1403420671,RU
1403420672,1403428863,NL
1403428864,1403437055,GB
1403437056,1403445247,RO
1403445248,1403461631,RU
-1403461632,1403462015,FR
-1403462016,1403462031,GB
-1403462032,1403465727,FR
-1403465728,1403465743,GB
-1403465744,1403469823,FR
+1403461632,1403469823,FR
1403469824,1403486207,RU
1403486208,1403494399,FR
1403494400,1403502591,GB
@@ -52725,9 +17668,7 @@
1403510784,1403518975,CZ
1403518976,1403535359,CY
1403535360,1403551743,PL
-1403551744,1403556503,SK
-1403556504,1403556511,SR
-1403556512,1403568127,SK
+1403551744,1403568127,SK
1403568128,1403573247,SE
1403573248,1403573503,ES
1403573504,1403574783,SE
@@ -52736,24 +17677,15 @@
1403576064,1403576319,DE
1403576320,1403578879,SE
1403578880,1403579135,DK
-1403579136,1403580159,SE
-1403580160,1403580415,GB
-1403580416,1403581951,SE
+1403579136,1403581951,SE
1403581952,1403582207,US
1403582208,1403584511,SE
1403584512,1403600895,DE
-1403600896,1403601519,FR
-1403601520,1403601535,MC
-1403601536,1403617279,FR
+1403600896,1403617279,FR
1403617280,1403633663,DE
1403633664,1403650047,RU
-1403650048,1403653631,A2
-1403653632,1403653663,DE
-1403653664,1403666431,A2
-1403666432,1403682815,GB
-1403682816,1403688959,A2
-1403688960,1403692031,GB
-1403692032,1403699199,A2
+1403650048,1403666431,DE
+1403666432,1403699199,GB
1403699200,1403715583,UA
1403715584,1403731967,LT
1403731968,1403748351,RU
@@ -52761,10 +17693,10 @@
1403764736,1403781119,GR
1403781120,1403797503,RU
1403797504,1403813887,SE
-1403813888,1403827199,NL
-1403827200,1403827711,BE
-1403827712,1403830271,NL
-1403830272,1403846655,CH
+1403813888,1403830271,NL
+1403830272,1403838719,CH
+1403838720,1403838975,RU
+1403838976,1403846655,CH
1403846656,1403863039,IS
1403863040,1403879423,FR
1403879424,1403895807,ES
@@ -52780,105 +17712,186 @@
1404043264,1404051455,EE
1404051456,1404059647,HR
1404059648,1404076031,NO
-1404076032,1404076287,EE
-1404076288,1404076543,DE
-1404076544,1404081663,LV
-1404081664,1404083711,DE
-1404083712,1404092415,NO
+1404076032,1404077055,SE
+1404077056,1404081151,LV
+1404081152,1404082175,SE
+1404082176,1404083199,DE
+1404083200,1404084223,SE
+1404084224,1404092415,NO
1404092416,1404108799,SE
1404108800,1404112895,NL
1404112896,1404114943,HR
1404114944,1404116991,SE
1404116992,1404125183,NO
-1404125184,1404151807,SE
-1404151808,1404152063,EE
-1404152064,1404166143,SE
-1404166144,1404170239,LV
-1404170240,1404174335,EE
-1404174336,1404184063,SE
-1404184064,1404184575,NO
-1404184576,1404186623,SE
-1404186624,1404187647,NO
-1404187648,1404188671,SE
-1404188672,1404189183,LT
-1404189184,1404189695,EE
-1404189696,1404190719,NO
+1404125184,1404135423,SE
+1404135424,1404137471,NL
+1404137472,1404139519,SE
+1404139520,1404141567,NL
+1404141568,1404166143,SE
+1404166144,1404174335,LV
+1404174336,1404182527,EE
+1404182528,1404189183,SE
+1404189184,1404190719,EE
1404190720,1404192767,SE
1404192768,1404194815,LV
-1404194816,1404195839,LT
-1404195840,1404196351,NO
-1404196352,1404197375,LT
-1404197376,1404197887,NO
-1404197888,1404198911,LT
+1404194816,1404198911,LT
1404198912,1404200959,SE
1404200960,1404203007,NL
1404203008,1404207103,HR
-1404207104,1404210175,NO
+1404207104,1404209151,LV
+1404209152,1404210175,NO
1404210176,1404212223,LV
1404212224,1404215295,SE
1404215296,1404219391,LV
1404219392,1404220415,SE
1404220416,1404221439,EE
1404221440,1404222463,RU
-1404222464,1404222975,LV
-1404222976,1404225535,SE
+1404222464,1404225535,SE
1404225536,1404227071,RU
-1404227072,1404227583,HR
+1404227072,1404227583,SE
1404227584,1404231679,LV
1404231680,1404232191,SE
1404232192,1404232703,NO
-1404232704,1404233215,LV
-1404233216,1404234239,SE
-1404234240,1404235775,HR
-1404235776,1404256255,SE
+1404232704,1404234751,SE
+1404234752,1404239871,HR
+1404239872,1404256255,SE
1404256256,1404305407,RU
1404305408,1404313599,EE
1404313600,1404321791,HR
1404321792,1404338175,RU
1404338176,1404340223,SE
1404340224,1404342271,HR
-1404342272,1404371071,SE
-1404371072,1404371087,EE
-1404371088,1404371095,SE
-1404371096,1404371103,EE
-1404371104,1404371135,SE
-1404371136,1404371167,EE
-1404371168,1404379135,SE
+1404342272,1404379135,SE
1404379136,1404383231,AT
1404383232,1404385279,HR
1404385280,1404386047,LT
1404386048,1404387327,SE
-1404387328,1404395519,DE
-1404395520,1404415999,LT
-1404416000,1404420095,EE
+1404387328,1404420095,LT
1404420096,1404436479,RU
-1404436480,1404567551,SE
+1404436480,1404444671,SE
+1404444672,1404445951,NO
+1404445952,1404446207,SE
+1404446208,1404446719,NO
+1404446720,1404446975,SE
+1404446976,1404447999,NO
+1404448000,1404448255,SE
+1404448256,1404452863,NO
+1404452864,1404510207,SE
+1404510208,1404510975,HR
+1404510976,1404511231,SE
+1404511232,1404512255,HR
+1404512256,1404512767,SE
+1404512768,1404513023,HR
+1404513024,1404514303,SE
+1404514304,1404514559,HR
+1404514560,1404514815,SE
+1404514816,1404515071,HR
+1404515072,1404515327,SE
+1404515328,1404515839,HR
+1404515840,1404516095,SE
+1404516096,1404518143,HR
+1404518144,1404522495,SE
+1404522496,1404526591,LV
+1404526592,1404538879,SE
+1404538880,1404542975,LV
+1404542976,1404559359,SE
+1404559360,1404563455,LV
+1404563456,1404567551,SE
1404567552,1404583935,HR
1404583936,1404600319,NO
-1404600320,1404645375,SE
-1404645376,1404645887,HR
-1404645888,1404677888,SE
-1404677889,1404678143,EE
-1404678144,1404764159,SE
+1404600320,1404678143,SE
+1404678144,1404680191,HR
+1404680192,1404731391,SE
+1404731392,1404732159,HR
+1404732160,1404732671,SE
+1404732672,1404733951,HR
+1404733952,1404734207,SE
+1404734208,1404736511,HR
+1404736512,1404736767,SE
+1404736768,1404740095,HR
+1404740096,1404740351,SE
+1404740352,1404740863,HR
+1404740864,1404741119,SE
+1404741120,1404742911,HR
+1404742912,1404743679,SE
+1404743680,1404744959,HR
+1404744960,1404745215,SE
+1404745216,1404745983,HR
+1404745984,1404746495,SE
+1404746496,1404748031,HR
+1404748032,1404748287,SE
+1404748288,1404748799,HR
+1404748800,1404749311,SE
+1404749312,1404749567,HR
+1404749568,1404750079,SE
+1404750080,1404752639,HR
+1404752640,1404752895,SE
+1404752896,1404754943,HR
+1404754944,1404755199,SE
+1404755200,1404755967,HR
+1404755968,1404756223,SE
+1404756224,1404756479,HR
+1404756480,1404756735,SE
+1404756736,1404757247,HR
+1404757248,1404757503,SE
+1404757504,1404759551,HR
+1404759552,1404759807,SE
+1404759808,1404760063,HR
+1404760064,1404760319,SE
+1404760320,1404760831,HR
+1404760832,1404761087,SE
+1404761088,1404762111,HR
+1404762112,1404762367,SE
+1404762368,1404762623,HR
+1404762624,1404763135,SE
+1404763136,1404763647,HR
+1404763648,1404763903,SE
+1404763904,1404764159,HR
1404764160,1404780543,NL
-1404780544,1404796927,SE
+1404780544,1404788735,SE
+1404788736,1404790527,NL
+1404790528,1404790783,SE
+1404790784,1404791039,NL
+1404791040,1404791295,SE
+1404791296,1404791807,NL
+1404791808,1404792063,SE
+1404792064,1404792575,NL
+1404792576,1404792831,SE
+1404792832,1404793599,NL
+1404793600,1404793855,SE
+1404793856,1404795135,NL
+1404795136,1404795391,SE
+1404795392,1404795647,NL
+1404795648,1404795903,SE
+1404795904,1404796927,NL
1404796928,1404801023,EE
-1404801024,1404802047,SE
-1404802048,1404803071,EE
-1404803072,1404804095,LV
+1404801024,1404803071,SE
+1404803072,1404803327,LV
+1404803328,1404803583,SE
+1404803584,1404804095,LV
1404804096,1404805119,SE
1404805120,1404813311,AT
1404813312,1404815871,EE
1404815872,1404816383,LT
1404816384,1404821503,NL
-1404821504,1404829695,SE
+1404821504,1404821759,SE
+1404821760,1404822271,NL
+1404822272,1404822527,SE
+1404822528,1404822783,NL
+1404822784,1404823039,SE
+1404823040,1404825087,NL
+1404825088,1404825343,SE
+1404825344,1404826367,NL
+1404826368,1404826623,SE
+1404826624,1404827135,NL
+1404827136,1404827903,SE
+1404827904,1404829695,NL
1404829696,1404870655,RU
1404870656,1404872703,LT
1404872704,1404874751,SE
1404874752,1404875775,LV
-1404875776,1404876799,LT
-1404876800,1404895231,SE
-1404895232,1404927999,DE
+1404875776,1404887039,SE
+1404887040,1404927999,NL
1404928000,1404944383,SE
1404944384,1404960767,LT
1404960768,1405026303,SE
@@ -52888,18 +17901,27 @@
1405050880,1405059071,AT
1405059072,1405063167,SE
1405063168,1405067263,NO
-1405067264,1405075455,DE
-1405075456,1405083647,EE
+1405067264,1405083647,EE
1405083648,1405091839,SE
-1405091840,1406010111,FR
-1406010112,1406010367,RE
-1406010368,1406140415,FR
+1405091840,1405815295,FR
+1405815296,1405815551,MQ
+1405815552,1405820927,FR
+1405820928,1405821183,MQ
+1405821184,1405822719,FR
+1405822720,1405822975,MQ
+1405822976,1405834751,FR
+1405834752,1405835007,MQ
+1405835008,1405850879,FR
+1405850880,1405851135,MQ
+1405851136,1405858815,FR
+1405858816,1405859071,MQ
+1405859072,1405871103,FR
+1405871104,1405871359,MQ
+1405871360,1406140415,FR
1406140416,1406205951,CZ
1406205952,1406271487,SE
1406271488,1406337023,IE
-1406337024,1406376703,IT
-1406376704,1406376959,US
-1406376960,1406402559,IT
+1406337024,1406402559,IT
1406402560,1406468095,GR
1406468096,1406533631,ES
1406533632,1406599167,FR
@@ -52909,113 +17931,43 @@
1406681088,1406689279,GB
1406689280,1406697471,SE
1406697472,1406705663,GB
-1406705664,1406708735,IT
-1406708736,1406709247,A2
-1406709248,1406710015,IT
-1406710016,1406710263,A2
-1406710264,1406710271,IT
-1406710272,1406710911,A2
-1406710912,1406710927,IT
-1406710928,1406711295,A2
-1406711296,1406712063,IT
-1406712064,1406713343,A2
-1406713344,1406713855,IT
-1406713856,1406714879,AT
-1406714880,1406715391,NL
-1406715392,1406715519,AT
-1406715520,1406715647,NL
-1406715648,1406715711,AT
-1406715712,1406716415,NL
-1406716416,1406716671,AT
-1406716672,1406716927,NL
-1406716928,1406717439,AT
-1406717440,1406717695,NL
-1406717696,1406717951,DE
-1406717952,1406718015,GB
-1406718016,1406718019,AT
-1406718020,1406719487,GB
-1406719488,1406719743,AT
+1406705664,1406713855,IT
+1406713856,1406719743,AT
1406719744,1406719999,GB
-1406720000,1406721023,AT
-1406721024,1406721279,DE
-1406721280,1406722047,GB
+1406720000,1406722047,AT
1406722048,1406730239,DE
1406730240,1406746623,RU
1406746624,1406754815,BE
1406754816,1406763007,GB
-1406763008,1406764031,BE
-1406764032,1406765055,LU
-1406765056,1406766079,BE
-1406766080,1406766591,LU
-1406766592,1406767103,BE
-1406767104,1406768127,LU
-1406768128,1406769407,BE
-1406769408,1406769663,LU
-1406769664,1406770175,BE
-1406770176,1406771199,LU
+1406763008,1406763263,BE
+1406763264,1406764799,LU
+1406764800,1406765055,BE
+1406765056,1406765311,LU
+1406765312,1406765823,BE
+1406765824,1406766335,LU
+1406766336,1406767103,BE
+1406767104,1406767615,LU
+1406767616,1406767871,BE
+1406767872,1406768127,LU
+1406768128,1406768383,BE
+1406768384,1406769407,LU
+1406769408,1406769663,BE
+1406769664,1406770431,LU
+1406770432,1406770687,BE
+1406770688,1406770943,LU
+1406770944,1406771199,BE
1406771200,1406779391,GB
1406779392,1406787583,RU
-1406787584,1406787679,GB
-1406787680,1406787687,ES
-1406787688,1406787695,IL
-1406787696,1406787935,GB
-1406787936,1406787967,ES
-1406787968,1406788055,GB
-1406788056,1406788095,ES
-1406788096,1406788351,NL
-1406788352,1406788479,BG
-1406788480,1406788607,ES
-1406788608,1406788711,GB
-1406788712,1406789119,ES
-1406789120,1406789135,GB
-1406789136,1406789182,FR
-1406789183,1406789183,ES
-1406789184,1406789247,GB
-1406789248,1406789375,ES
-1406789376,1406789503,RO
-1406789504,1406789631,ES
-1406789632,1406789887,FR
-1406789888,1406790015,HU
-1406790016,1406790143,ES
-1406790144,1406790176,GB
-1406790177,1406790207,ES
-1406790208,1406791087,GB
-1406791088,1406791103,ES
-1406791104,1406791135,GB
-1406791136,1406791143,IL
-1406791144,1406791159,ES
-1406791160,1406791167,GB
-1406791168,1406791423,ES
-1406791424,1406791551,GB
-1406791552,1406791679,ES
-1406791680,1406791935,GB
-1406791936,1406791967,DE
-1406791968,1406792191,ES
-1406792192,1406792703,GB
-1406792704,1406792719,FR
-1406792720,1406792735,GB
-1406792736,1406793119,FR
-1406793120,1406793215,ES
-1406793216,1406793743,GB
-1406793744,1406793759,DE
-1406793760,1406793831,GB
-1406793832,1406793832,ES
-1406793833,1406793839,GB
-1406793840,1406793843,IL
-1406793844,1406793983,GB
-1406793984,1406794175,ES
-1406794176,1406794238,GB
-1406794239,1406794239,ES
-1406794240,1406794495,GB
-1406794496,1406794511,ES
-1406794512,1406794529,FR
-1406794530,1406794751,ES
+1406787584,1406791167,ES
+1406791168,1406791295,GB
+1406791296,1406793843,ES
+1406793844,1406793847,GB
+1406793848,1406794751,ES
1406794752,1406795775,NL
-1406795776,1406797823,IM
-1406797824,1406798591,GB
-1406798592,1406798847,IM
-1406798848,1406802943,GB
-1406802944,1406803967,IM
+1406795776,1406796543,GB
+1406796544,1406796799,IM
+1406796800,1406803455,GB
+1406803456,1406803967,IM
1406803968,1406812159,DE
1406812160,1406820351,SE
1406820352,1406828543,PL
@@ -53031,28 +17983,19 @@
1406894080,1406902271,RU
1406902272,1406910463,AT
1406910464,1406918655,SE
-1406918656,1406926335,RU
-1406926336,1406926847,DE
+1406918656,1406926847,RU
1406926848,1406935039,IT
1406935040,1406951423,RU
1406951424,1406959615,PL
-1406959616,1406964287,DE
-1406964288,1406964327,NL
-1406964328,1406967343,DE
-1406967344,1406967399,GB
-1406967400,1406967407,DE
-1406967408,1406967423,GB
-1406967424,1406967551,DE
-1406967552,1406967615,GB
-1406967616,1406967807,DE
+1406959616,1406964351,DE
+1406964352,1406964479,NL
+1406964480,1406967807,DE
1406967808,1406975999,RU
1406976000,1406984191,IE
1406984192,1407000575,RU
1407000576,1407016959,DE
1407016960,1407025151,IT
-1407025152,1407025663,DK
-1407025664,1407025919,US
-1407025920,1407033343,DK
+1407025152,1407033343,DK
1407033344,1407034367,UZ
1407034368,1407035391,RU
1407035392,1407041535,UZ
@@ -53061,7 +18004,8 @@
1407057920,1407066111,RU
1407066112,1407074303,LU
1407074304,1407089663,RU
-1407089664,1407090687,US
+1407089664,1407090559,US
+1407090560,1407090687,RU
1407090688,1407098879,CH
1407098880,1407107071,BG
1407107072,1407115263,RU
@@ -53069,25 +18013,7 @@
1407123456,1407131647,SE
1407131648,1407139839,NL
1407139840,1407148031,DE
-1407148032,1407149695,GB
-1407149696,1407149759,CY
-1407149760,1407149791,SE
-1407149792,1407150335,GB
-1407150336,1407150591,SE
-1407150592,1407151615,GB
-1407151616,1407151871,SE
-1407151872,1407152259,GB
-1407152260,1407152263,IE
-1407152264,1407152287,US
-1407152288,1407154443,GB
-1407154444,1407154447,SE
-1407154448,1407154623,GB
-1407154624,1407154631,SE
-1407154632,1407154679,GB
-1407154680,1407154687,US
-1407154688,1407154815,GB
-1407154816,1407154819,IE
-1407154820,1407156223,GB
+1407148032,1407156223,GB
1407156224,1407164415,LV
1407164416,1407172607,PT
1407172608,1407180799,GB
@@ -53096,1321 +18022,43 @@
1407320064,1407451135,SE
1407451136,1407483903,BG
1407483904,1407516671,CH
-1407516672,1407516687,GB
-1407516688,1407516695,NG
-1407516696,1407516703,GB
-1407516704,1407516711,NG
-1407516712,1407516727,GB
-1407516728,1407516735,NG
-1407516736,1407516743,UG
-1407516744,1407516751,LR
-1407516752,1407516767,GB
-1407516768,1407516775,AO
-1407516776,1407516783,GR
-1407516784,1407516791,NG
-1407516792,1407516807,GB
-1407516808,1407516815,NG
-1407516816,1407516847,GB
-1407516848,1407516855,NG
-1407516856,1407516863,GB
-1407516864,1407516871,NG
-1407516872,1407516879,GB
-1407516880,1407516895,NG
-1407516896,1407516911,GB
-1407516912,1407516927,NG
-1407516928,1407516935,GB
-1407516936,1407516943,CD
-1407516944,1407516951,NG
-1407516952,1407516959,GB
-1407516960,1407516967,NG
-1407516968,1407516983,GB
-1407516984,1407516991,KE
-1407516992,1407516999,CD
-1407517000,1407517023,GB
-1407517024,1407517031,GQ
-1407517032,1407517055,GB
-1407517056,1407517063,UG
-1407517064,1407517071,GQ
-1407517072,1407517079,GB
-1407517080,1407517087,CD
-1407517088,1407517135,GB
-1407517136,1407517143,NG
-1407517144,1407517151,GB
-1407517152,1407517159,CD
-1407517160,1407517363,GB
-1407517364,1407517367,CD
-1407517368,1407517371,GB
-1407517372,1407517375,LR
-1407517376,1407517379,NG
-1407517380,1407517383,GB
-1407517384,1407517391,CD
-1407517392,1407517423,GB
-1407517424,1407517431,US
-1407517432,1407517439,NG
-1407517440,1407517703,GB
-1407517704,1407517719,US
-1407517720,1407517735,GB
-1407517736,1407517743,US
-1407517744,1407517751,GB
-1407517752,1407517775,US
-1407517776,1407517815,GB
-1407517816,1407517823,US
-1407517824,1407517887,GQ
-1407517888,1407517919,GB
-1407517920,1407517927,TD
-1407517928,1407517951,GB
-1407517952,1407518015,SL
-1407518016,1407518039,GB
-1407518040,1407518047,CD
-1407518048,1407518055,GB
-1407518056,1407518063,NG
-1407518064,1407518079,GB
-1407518080,1407518087,FR
-1407518088,1407518111,GB
-1407518112,1407518127,NG
-1407518128,1407518135,ZW
-1407518136,1407518143,GH
-1407518144,1407518151,GB
-1407518152,1407518159,BF
-1407518160,1407518167,GB
-1407518168,1407518175,CD
-1407518176,1407518191,GB
-1407518192,1407518199,NG
-1407518200,1407518207,VG
-1407518208,1407518215,LR
-1407518216,1407518231,GB
-1407518232,1407518239,IL
-1407518240,1407518255,NG
-1407518256,1407518263,CD
-1407518264,1407518267,GB
-1407518268,1407518271,VG
-1407518272,1407518335,GB
-1407518336,1407518343,CG
-1407518344,1407518345,GB
-1407518346,1407518353,BF
-1407518354,1407518359,GB
-1407518360,1407518367,NG
-1407518368,1407518375,ZA
-1407518376,1407518383,AO
-1407518384,1407518831,GB
-1407518832,1407518847,NG
-1407518848,1407518911,FR
-1407518912,1407518943,NG
-1407518944,1407518975,GB
-1407518976,1407518983,NG
-1407518984,1407518991,GB
-1407518992,1407518999,NG
-1407519000,1407519015,GB
-1407519016,1407519023,AO
-1407519024,1407519031,GB
-1407519032,1407519039,AO
-1407519040,1407519047,NG
-1407519048,1407519055,GB
-1407519056,1407519063,NG
-1407519064,1407519071,BJ
-1407519072,1407519087,GB
-1407519088,1407519095,NG
-1407519096,1407519103,CM
-1407519104,1407519111,NG
-1407519112,1407519119,SL
-1407519120,1407519127,GB
-1407519128,1407519135,SL
-1407519136,1407519143,GB
-1407519144,1407519151,AO
-1407519152,1407519159,GB
-1407519160,1407519167,AO
-1407519168,1407519175,GB
-1407519176,1407519183,SL
-1407519184,1407519191,GB
-1407519192,1407519199,CD
-1407519200,1407519207,GB
-1407519208,1407519215,TD
-1407519216,1407519231,GB
-1407519232,1407519615,NG
-1407519616,1407519767,GB
-1407519768,1407519775,CD
-1407519776,1407519783,CG
-1407519784,1407519791,GB
-1407519792,1407519799,NG
-1407519800,1407519839,GB
-1407519840,1407519847,CD
-1407519848,1407519855,NG
-1407519856,1407519863,GB
-1407519864,1407519871,NG
-1407519872,1407519879,GB
-1407519880,1407519887,NG
-1407519888,1407519903,GB
-1407519904,1407519911,NG
-1407519912,1407519943,GB
-1407519944,1407519959,CD
-1407519960,1407519991,GB
-1407519992,1407519999,NG
-1407520000,1407520015,GB
-1407520016,1407520023,NG
-1407520024,1407520071,GB
-1407520072,1407520079,CM
-1407520080,1407520087,NG
-1407520088,1407520127,GB
-1407520128,1407520135,CD
-1407520136,1407520143,GB
-1407520144,1407520151,GN
-1407520152,1407520152,GB
-1407520153,1407520159,GN
-1407520160,1407520207,GB
-1407520208,1407520215,NG
-1407520216,1407520223,CD
-1407520224,1407520231,SD
-1407520232,1407520239,GB
-1407520240,1407520247,NE
-1407520248,1407520271,GB
-1407520272,1407520279,NG
-1407520280,1407520311,GB
-1407520312,1407520327,NG
-1407520328,1407520335,SL
-1407520336,1407520351,GB
-1407520352,1407520359,NG
-1407520360,1407520367,CD
-1407520368,1407520375,GB
-1407520376,1407520397,NG
-1407520398,1407520415,GB
-1407520416,1407520423,AO
-1407520424,1407520439,GB
-1407520440,1407520447,CD
-1407520448,1407520463,NG
-1407520464,1407520511,GB
-1407520512,1407520767,NG
-1407520768,1407520791,GB
-1407520792,1407520799,ZA
-1407520800,1407520807,GB
-1407520808,1407520815,MU
-1407520816,1407520823,GR
-1407520824,1407520831,CI
-1407520832,1407520847,GB
-1407520848,1407520855,ZM
-1407520856,1407520863,GB
-1407520864,1407520871,TZ
-1407520872,1407520879,CD
-1407520880,1407520887,GB
-1407520888,1407520895,GR
-1407520896,1407520911,GB
-1407520912,1407520919,ZW
-1407520920,1407520927,IQ
-1407520928,1407520935,GB
-1407520936,1407520943,CD
-1407520944,1407520951,GB
-1407520952,1407520959,ZM
-1407520960,1407520975,GB
-1407520976,1407520983,ZM
-1407520984,1407520991,GB
-1407520992,1407520999,IQ
-1407521000,1407521007,GB
-1407521008,1407521015,CD
-1407521016,1407521023,GB
-1407521024,1407521031,ZM
-1407521032,1407521047,GB
-1407521048,1407521055,NG
-1407521056,1407521063,KE
-1407521064,1407521071,NG
-1407521072,1407521087,UG
-1407521088,1407521095,NG
-1407521096,1407521127,GB
-1407521128,1407521135,NG
-1407521136,1407521143,GB
-1407521144,1407521151,ZM
-1407521152,1407521159,NG
-1407521160,1407521191,GB
-1407521192,1407521199,CD
-1407521200,1407521207,GB
-1407521208,1407521215,IQ
-1407521216,1407521223,GB
-1407521224,1407521231,TZ
-1407521232,1407521247,GB
-1407521248,1407521279,GH
-1407521280,1407521287,GB
-1407521288,1407521295,UG
-1407521296,1407521415,GB
-1407521416,1407521423,LR
-1407521424,1407521639,GB
-1407521640,1407521647,NG
-1407521648,1407522303,GB
-1407522304,1407522559,A2
-1407522560,1407522567,US
-1407522568,1407522575,NG
-1407522576,1407522583,GB
-1407522584,1407522591,GL
-1407522592,1407522599,UG
-1407522600,1407522607,ZM
-1407522608,1407522615,AO
-1407522616,1407522639,GB
-1407522640,1407522647,UG
-1407522648,1407522671,GB
-1407522672,1407522679,ZM
-1407522680,1407522687,SD
-1407522688,1407522703,GB
-1407522704,1407522711,US
-1407522712,1407522727,GB
-1407522728,1407522735,ZW
-1407522736,1407522743,GB
-1407522744,1407522751,NG
-1407522752,1407522767,ZM
-1407522768,1407522775,GB
-1407522776,1407522783,TD
-1407522784,1407522799,GB
-1407522800,1407522807,NG
-1407522808,1407522815,GB
-1407522816,1407522823,CD
-1407522824,1407522831,NG
-1407522832,1407522839,MZ
-1407522840,1407522847,NG
-1407522848,1407522855,GB
-1407522856,1407522863,ZW
-1407522864,1407522871,GB
-1407522872,1407522879,IQ
-1407522880,1407522887,MU
-1407522888,1407522903,GB
-1407522904,1407522911,KE
-1407522912,1407522919,CG
-1407522920,1407522927,GB
-1407522928,1407522935,GR
-1407522936,1407522967,GB
-1407522968,1407522975,MU
-1407522976,1407522983,CD
-1407522984,1407522991,GB
-1407522992,1407522999,CD
-1407523000,1407523015,GB
-1407523016,1407523023,KE
-1407523024,1407523047,GB
-1407523048,1407523055,NG
-1407523056,1407523063,MU
-1407523064,1407523071,GB
-1407523072,1407523079,UG
-1407523080,1407523087,GB
-1407523088,1407523088,NG
-1407523089,1407523103,GB
-1407523104,1407523111,UG
-1407523112,1407523119,GB
-1407523120,1407523127,CD
-1407523128,1407523135,GB
-1407523136,1407523143,BJ
-1407523144,1407523159,GB
-1407523160,1407523167,LR
-1407523168,1407523175,GB
-1407523176,1407523183,UG
-1407523184,1407523207,GB
-1407523208,1407523215,SD
-1407523216,1407523223,BI
-1407523224,1407523231,SO
-1407523232,1407523255,GB
-1407523256,1407523263,NG
-1407523264,1407523271,GB
-1407523272,1407523279,US
-1407523280,1407523287,GB
-1407523288,1407523295,NG
-1407523296,1407523303,GR
-1407523304,1407523311,NG
-1407523312,1407523327,GB
-1407523328,1407523335,MW
-1407523336,1407523343,TD
-1407523344,1407523375,GB
-1407523376,1407523391,KE
-1407523392,1407523415,GB
-1407523416,1407523423,ES
-1407523424,1407523455,GB
-1407523456,1407523463,IQ
-1407523464,1407523479,KE
-1407523480,1407523487,GB
-1407523488,1407523495,SO
-1407523496,1407523511,GB
-1407523512,1407523519,IQ
-1407523520,1407523535,GB
-1407523536,1407523543,SO
-1407523544,1407523551,NG
-1407523552,1407523559,CM
-1407523560,1407523567,KE
-1407523568,1407523575,CD
-1407523576,1407523583,FR
-1407523584,1407523591,IQ
-1407523592,1407523623,GB
-1407523624,1407523655,IQ
-1407523656,1407523663,GB
-1407523664,1407523679,IQ
-1407523680,1407523687,GB
-1407523688,1407523719,IQ
-1407523720,1407523743,GB
-1407523744,1407523751,IQ
-1407523752,1407523799,GB
-1407523800,1407523807,SY
-1407523808,1407523831,GB
-1407523832,1407523839,IQ
-1407523840,1407523871,GB
-1407523872,1407523879,SS
-1407523880,1407523895,GB
-1407523896,1407523903,GR
-1407523904,1407523911,UG
-1407523912,1407523919,GB
-1407523920,1407523935,GN
-1407523936,1407523943,SL
-1407523944,1407523951,GN
-1407523952,1407523959,GB
-1407523960,1407523967,SS
-1407523968,1407524047,GB
-1407524048,1407524055,MU
-1407524056,1407524087,GB
-1407524088,1407524095,CD
-1407524096,1407524103,MW
-1407524104,1407524143,GB
-1407524144,1407524151,VG
-1407524152,1407524159,GB
-1407524160,1407524167,CD
-1407524168,1407524207,GB
-1407524208,1407524215,CD
-1407524216,1407524223,GB
-1407524224,1407524231,GQ
-1407524232,1407524255,GB
-1407524256,1407524263,SN
-1407524264,1407524271,ZW
-1407524272,1407524287,GB
-1407524288,1407524295,MZ
-1407524296,1407524319,GB
-1407524320,1407524327,BW
-1407524328,1407524335,ZW
-1407524336,1407524343,SO
-1407524344,1407524351,KE
-1407524352,1407524607,GB
-1407524608,1407524615,ZW
-1407524616,1407524623,CD
-1407524624,1407524631,ZA
-1407524632,1407524639,NG
-1407524640,1407524647,GB
-1407524648,1407524655,CD
-1407524656,1407524663,ZW
-1407524664,1407524671,CD
-1407524672,1407524679,GB
-1407524680,1407524687,LR
-1407524688,1407524711,GB
-1407524712,1407524719,ZW
-1407524720,1407524727,GB
-1407524728,1407524735,NG
-1407524736,1407524743,GB
-1407524744,1407524751,ZW
-1407524752,1407524759,GB
-1407524760,1407524767,CM
-1407524768,1407524775,BW
-1407524776,1407524783,GB
-1407524784,1407524791,ZW
-1407524792,1407524839,GB
-1407524840,1407524847,LR
-1407524848,1407524855,GB
-1407524856,1407524863,CD
-1407524864,1407524871,GR
-1407524872,1407524879,GB
-1407524880,1407524887,ZW
-1407524888,1407524895,GB
-1407524896,1407524903,LR
-1407524904,1407524911,GB
-1407524912,1407524919,ZW
-1407524920,1407524927,ZA
-1407524928,1407524935,GB
-1407524936,1407524943,GR
-1407524944,1407524951,ZW
-1407524952,1407524983,GB
-1407524984,1407524991,ZA
-1407524992,1407524999,TZ
-1407525000,1407525007,UG
-1407525008,1407525015,GB
-1407525016,1407525023,UG
-1407525024,1407525031,US
-1407525032,1407525039,IL
-1407525040,1407525047,ZA
-1407525048,1407525055,NG
-1407525056,1407525063,ZA
-1407525064,1407525071,SO
-1407525072,1407525079,CD
-1407525080,1407525087,GB
-1407525088,1407525095,MW
-1407525096,1407525103,ZW
-1407525104,1407525111,NG
-1407525112,1407525119,ZA
-1407525120,1407525127,GB
-1407525128,1407525135,SD
-1407525136,1407525143,CD
-1407525144,1407525151,GB
-1407525152,1407525167,CD
-1407525168,1407525183,GB
-1407525184,1407525191,ZW
-1407525192,1407525207,GB
-1407525208,1407525215,CD
-1407525216,1407525231,GB
-1407525232,1407525255,CD
-1407525256,1407525263,GB
-1407525264,1407525287,CD
-1407525288,1407525303,GB
-1407525304,1407525319,CD
-1407525320,1407525327,GB
-1407525328,1407525343,CD
-1407525344,1407525383,GB
-1407525384,1407525391,CD
-1407525392,1407525399,GB
-1407525400,1407525407,KE
-1407525408,1407525415,UG
-1407525416,1407525423,SO
-1407525424,1407525431,UG
-1407525432,1407525471,GB
-1407525472,1407525479,UG
-1407525480,1407525487,SO
-1407525488,1407525503,GB
-1407525504,1407525511,UG
-1407525512,1407525543,GB
-1407525544,1407525551,KE
-1407525552,1407525575,GB
-1407525576,1407525583,LR
-1407525584,1407525599,GB
-1407525600,1407525607,CD
-1407525608,1407525695,GB
-1407525696,1407525703,IQ
-1407525704,1407525879,GB
-1407525880,1407525887,IQ
-1407525888,1407525895,SN
-1407525896,1407525903,SS
-1407525904,1407525919,GB
-1407525920,1407525927,CD
-1407525928,1407525935,UG
-1407525936,1407525943,GR
-1407525944,1407525987,GB
-1407525988,1407525991,CM
-1407525992,1407525999,BF
-1407526000,1407526007,GB
-1407526008,1407526015,GR
-1407526016,1407526023,LR
-1407526024,1407526079,GB
-1407526080,1407526087,BF
-1407526088,1407526111,GB
-1407526112,1407526119,UG
-1407526120,1407526127,GB
-1407526128,1407526135,BJ
-1407526136,1407526143,GB
-1407526144,1407526151,UG
-1407526152,1407526231,GB
+1407516672,1407522719,GB
+1407522720,1407522727,CD
+1407522728,1407526231,GB
1407526232,1407526239,CD
-1407526240,1407526711,GB
-1407526712,1407526719,GN
-1407526720,1407527631,GB
-1407527632,1407527639,GR
-1407527640,1407527655,GB
-1407527656,1407527663,KE
-1407527664,1407527767,GB
-1407527768,1407527775,CD
-1407527776,1407527799,GB
-1407527800,1407527807,US
-1407527808,1407527815,GB
-1407527816,1407527823,ZW
-1407527824,1407527831,GB
-1407527832,1407527839,CM
-1407527840,1407527919,GB
-1407527920,1407527935,IL
-1407527936,1407528959,GB
-1407528960,1407529178,US
+1407526240,1407529178,GB
1407529179,1407529180,NG
-1407529181,1407529215,US
-1407529216,1407531007,GB
-1407531008,1407531015,BF
-1407531016,1407531027,GB
-1407531028,1407531031,SN
-1407531032,1407531111,GB
-1407531112,1407531119,SS
-1407531120,1407531127,CD
-1407531128,1407531143,GB
-1407531144,1407531151,CG
-1407531152,1407531159,CD
-1407531160,1407531167,FR
-1407531168,1407531175,GB
-1407531176,1407531183,CF
-1407531184,1407531391,GB
-1407531392,1407531399,UG
-1407531400,1407531407,GB
-1407531408,1407531415,UG
-1407531416,1407531423,GB
-1407531424,1407531431,UG
-1407531432,1407531439,GB
-1407531440,1407531447,UG
-1407531448,1407531471,GB
-1407531472,1407531479,UG
-1407531480,1407531487,GB
-1407531488,1407531495,UG
-1407531496,1407531503,GB
-1407531504,1407531511,UG
-1407531512,1407531519,GB
-1407531520,1407531535,CD
-1407531536,1407531551,GB
-1407531552,1407531559,SS
-1407531560,1407531567,SD
-1407531568,1407531575,CD
-1407531576,1407531583,GQ
-1407531584,1407531591,CD
-1407531592,1407531607,GB
-1407531608,1407531615,CD
-1407531616,1407531623,GB
-1407531624,1407531631,CD
-1407531632,1407531639,ZM
-1407531640,1407531647,CD
-1407531648,1407531663,GB
-1407531664,1407531671,MZ
-1407531672,1407531687,CD
-1407531688,1407531703,GB
-1407531704,1407531711,SD
-1407531712,1407531735,CD
-1407531736,1407531751,GB
-1407531752,1407531759,GQ
-1407531760,1407531767,ZW
-1407531768,1407531775,SD
-1407531776,1407532543,GB
-1407532544,1407532551,SO
-1407532552,1407532559,AO
-1407532560,1407532575,US
-1407532576,1407532583,GB
-1407532584,1407532591,SO
-1407532592,1407532615,GB
-1407532616,1407532623,KG
-1407532624,1407532639,GB
-1407532640,1407532647,NG
-1407532648,1407532663,GB
-1407532664,1407532671,TZ
-1407532672,1407532799,BF
-1407532800,1407532927,SO
-1407532928,1407533055,US
-1407533056,1407533071,GB
-1407533072,1407533079,SN
-1407533080,1407533087,NG
-1407533088,1407533095,LR
-1407533096,1407533111,GB
-1407533112,1407533119,UG
-1407533120,1407533127,NG
-1407533128,1407533151,GB
-1407533152,1407533159,LR
-1407533160,1407533167,CD
-1407533168,1407533175,BF
-1407533176,1407533183,SN
-1407533184,1407533231,GB
-1407533232,1407533239,SN
-1407533240,1407533247,BF
-1407533248,1407533255,GB
-1407533256,1407533263,NG
-1407533264,1407533271,LR
-1407533272,1407533295,GB
-1407533296,1407533303,NG
-1407533304,1407533311,GB
-1407533312,1407533327,AO
-1407533328,1407533343,GB
-1407533344,1407533375,NG
-1407533376,1407533407,CD
-1407533408,1407533423,GB
-1407533424,1407533439,GH
-1407533440,1407533567,GB
-1407533568,1407533583,NG
-1407533584,1407533591,NE
-1407533592,1407533607,GB
-1407533608,1407533663,NG
-1407533664,1407533687,GB
-1407533688,1407533695,NG
-1407533696,1407533711,GB
-1407533712,1407533719,ZW
-1407533720,1407533727,SL
-1407533728,1407533735,TD
-1407533736,1407533743,GN
-1407533744,1407533751,VG
-1407533752,1407533783,GB
-1407533784,1407533791,CG
-1407533792,1407533799,GB
-1407533800,1407533807,LR
-1407533808,1407533815,GB
-1407533816,1407533823,NG
-1407533824,1407533831,LR
-1407533832,1407533863,GB
-1407533864,1407533871,CD
-1407533872,1407533895,GB
-1407533896,1407533903,CD
-1407533904,1407533919,GB
-1407533920,1407533927,BF
-1407533928,1407533935,NE
-1407533936,1407533943,GB
-1407533944,1407533951,GN
-1407533952,1407533967,GB
-1407533968,1407533975,CD
-1407533976,1407533983,GB
-1407533984,1407533991,LR
-1407533992,1407533999,NE
-1407534000,1407534007,GB
-1407534008,1407534023,VG
-1407534024,1407534039,GB
-1407534040,1407534047,BF
-1407534048,1407534055,CM
-1407534056,1407534079,GB
-1407534080,1407534335,AE
-1407534336,1407534343,KE
-1407534344,1407534365,GB
+1407529181,1407534365,GB
1407534366,1407534366,NG
-1407534367,1407534367,GB
-1407534368,1407534383,NG
-1407534384,1407534391,GR
-1407534392,1407534399,AO
-1407534400,1407534407,NG
-1407534408,1407534415,US
-1407534416,1407534455,GB
-1407534456,1407534463,NG
-1407534464,1407534527,GB
-1407534528,1407534535,LR
-1407534536,1407534543,GB
-1407534544,1407534551,NE
-1407534552,1407534559,BF
-1407534560,1407534567,NG
-1407534568,1407534575,GB
-1407534576,1407534583,GQ
-1407534584,1407534719,GB
-1407534720,1407534727,GQ
-1407534728,1407534735,GB
-1407534736,1407534775,NG
-1407534776,1407534783,ML
-1407534784,1407534791,CD
-1407534792,1407534847,GB
-1407534848,1407535103,CM
-1407535104,1407535615,GA
-1407535616,1407535623,GR
-1407535624,1407535647,GB
-1407535648,1407535655,NG
-1407535656,1407535679,GB
-1407535680,1407535687,GN
-1407535688,1407535695,GB
-1407535696,1407535703,GN
-1407535704,1407536127,GB
-1407536128,1407536639,GA
-1407536640,1407536895,CD
-1407536896,1407536903,GB
-1407536904,1407536919,ZW
-1407536920,1407536927,GB
-1407536928,1407536935,TD
-1407536936,1407536943,NG
-1407536944,1407536951,AO
-1407536952,1407536975,GB
-1407536976,1407536983,US
-1407536984,1407536991,IQ
-1407536992,1407537031,GB
-1407537032,1407537039,NG
-1407537040,1407537047,GB
-1407537048,1407537055,NG
-1407537056,1407537071,GH
-1407537072,1407537079,GB
-1407537080,1407537087,NG
+1407534367,1407537087,GB
1407537088,1407537095,GH
-1407537096,1407537103,GB
-1407537104,1407537111,NG
-1407537112,1407537119,LR
-1407537120,1407537135,GB
-1407537136,1407537143,NG
-1407537144,1407537151,GB
-1407537152,1407537159,UG
-1407537160,1407537183,GB
-1407537184,1407537191,NG
-1407537192,1407537207,GB
-1407537208,1407537215,BE
-1407537216,1407537263,GB
-1407537264,1407537287,CM
-1407537288,1407537295,UG
-1407537296,1407537303,GB
-1407537304,1407537311,LR
-1407537312,1407537319,GB
-1407537320,1407537327,NG
-1407537328,1407537343,GB
-1407537344,1407537351,NG
-1407537352,1407537367,GB
-1407537368,1407537383,NG
-1407537384,1407537447,GB
-1407537448,1407537455,UG
-1407537456,1407537463,AO
-1407537464,1407537487,GB
-1407537488,1407537495,NG
-1407537496,1407537503,GB
-1407537504,1407537511,AO
-1407537512,1407537543,GB
-1407537544,1407537551,AO
-1407537552,1407537575,GB
-1407537576,1407537591,NG
-1407537592,1407537607,GB
-1407537608,1407537615,CM
-1407537616,1407537631,GB
-1407537632,1407537639,NG
-1407537640,1407537679,GB
-1407537680,1407537687,IQ
-1407537688,1407537703,GB
-1407537704,1407537735,NG
-1407537736,1407537751,GB
-1407537752,1407537759,NG
-1407537760,1407537767,GB
-1407537768,1407537847,NG
-1407537848,1407537855,GB
-1407537856,1407537863,NG
-1407537864,1407537871,TG
-1407537872,1407537879,IQ
-1407537880,1407537903,GB
-1407537904,1407537911,TG
-1407537912,1407537935,GB
-1407537936,1407537943,GH
-1407537944,1407537951,TG
-1407537952,1407537959,GB
-1407537960,1407537967,TG
-1407537968,1407537975,NG
-1407537976,1407537983,GB
-1407537984,1407537991,NG
-1407537992,1407537999,GB
-1407538000,1407538007,NG
-1407538008,1407538015,GB
-1407538016,1407538023,NG
-1407538024,1407538031,GB
-1407538032,1407538039,NG
-1407538040,1407538047,CD
-1407538048,1407538055,NG
-1407538056,1407538063,GB
-1407538064,1407538071,LU
-1407538072,1407538079,GB
-1407538080,1407538087,LR
-1407538088,1407538095,AO
-1407538096,1407538111,GB
-1407538112,1407538119,LR
-1407538120,1407538127,NG
-1407538128,1407538143,GB
-1407538144,1407538151,GN
-1407538152,1407538167,GB
-1407538168,1407538175,IQ
-1407538176,1407538255,GB
-1407538256,1407538263,NG
-1407538264,1407538271,GB
-1407538272,1407538279,CO
-1407538280,1407538295,GB
-1407538296,1407538303,AO
-1407538304,1407538311,NG
-1407538312,1407538319,CD
-1407538320,1407538327,GB
-1407538328,1407538335,CD
-1407538336,1407538343,GB
-1407538344,1407538351,CD
-1407538352,1407538383,GB
-1407538384,1407538391,CM
-1407538392,1407538407,GB
-1407538408,1407538415,NG
-1407538416,1407538439,GB
-1407538440,1407538447,NG
-1407538448,1407538471,GB
-1407538472,1407538479,NG
-1407538480,1407538583,GB
-1407538584,1407538591,NG
-1407538592,1407538599,GB
-1407538600,1407538607,NG
-1407538608,1407538663,GB
-1407538664,1407538679,NG
-1407538680,1407538719,GB
-1407538720,1407538727,FR
-1407538728,1407538863,GB
-1407538864,1407538879,GE
-1407538880,1407538887,GB
-1407538888,1407538895,NG
-1407538896,1407538911,GB
-1407538912,1407538919,GH
-1407538920,1407538927,GB
-1407538928,1407538935,NG
-1407538936,1407538943,GH
-1407538944,1407538951,CD
-1407538952,1407538975,GB
-1407538976,1407538983,NG
-1407538984,1407538991,SL
-1407538992,1407538999,GB
-1407539000,1407539007,NG
-1407539008,1407539055,GB
-1407539056,1407539063,NG
-1407539064,1407539103,GB
-1407539104,1407539111,NG
-1407539112,1407539143,GB
-1407539144,1407539151,NG
-1407539152,1407539167,GB
-1407539168,1407539175,TD
-1407539176,1407539183,GH
-1407539184,1407539191,GB
-1407539192,1407539199,NG
-1407539200,1407539455,GE
-1407539456,1407539463,NG
-1407539464,1407539467,GB
-1407539468,1407539475,BF
-1407539476,1407539483,GB
-1407539484,1407539491,BF
-1407539492,1407539495,GB
-1407539496,1407539503,TD
-1407539504,1407539511,CM
-1407539512,1407539519,GB
-1407539520,1407539527,NG
-1407539528,1407539535,GB
-1407539536,1407539543,GQ
-1407539544,1407539559,GB
-1407539560,1407539567,NE
-1407539568,1407539599,GB
-1407539600,1407539607,NG
-1407539608,1407539631,GB
-1407539632,1407539639,NG
-1407539640,1407539647,TD
-1407539648,1407539655,GQ
-1407539656,1407539663,NE
-1407539664,1407539703,GB
-1407539704,1407539711,NE
-1407539712,1407539727,GB
-1407539728,1407539735,GR
-1407539736,1407539743,GB
-1407539744,1407539751,UG
-1407539752,1407539759,NG
-1407539760,1407539767,GB
-1407539768,1407539775,GR
-1407539776,1407539783,GB
-1407539784,1407539791,GR
-1407539792,1407539799,NG
-1407539800,1407539863,GB
-1407539864,1407539879,NG
-1407539880,1407539895,GB
-1407539896,1407539903,NG
-1407539904,1407539911,GB
-1407539912,1407539919,NG
-1407539920,1407539927,CD
-1407539928,1407539935,GB
-1407539936,1407539943,GN
-1407539944,1407539951,NG
-1407539952,1407539967,GB
-1407539968,1407539975,CD
-1407539976,1407540023,GB
-1407540024,1407540031,A2
-1407540032,1407540071,GB
-1407540072,1407540079,NG
-1407540080,1407540111,GB
-1407540112,1407540119,TG
-1407540120,1407540135,GB
-1407540136,1407540143,CD
-1407540144,1407540159,GB
-1407540160,1407540167,CD
-1407540168,1407540183,GB
-1407540184,1407540191,CD
-1407540192,1407540207,GB
-1407540208,1407540215,CD
-1407540216,1407540231,GB
-1407540232,1407540239,UG
-1407540240,1407540247,NG
-1407540248,1407540271,GB
-1407540272,1407540279,LR
-1407540280,1407540295,GB
-1407540296,1407540303,NG
-1407540304,1407540319,GB
-1407540320,1407540327,CD
-1407540328,1407540335,NG
-1407540336,1407540351,GB
-1407540352,1407540359,TD
-1407540360,1407540367,GB
-1407540368,1407540375,LR
-1407540376,1407540415,GB
-1407540416,1407540423,NG
-1407540424,1407540431,GB
-1407540432,1407540439,CI
-1407540440,1407540447,GB
-1407540448,1407540455,LR
-1407540456,1407540463,GB
-1407540464,1407540471,MU
-1407540472,1407540479,GB
-1407540480,1407540487,CM
-1407540488,1407540575,GB
-1407540576,1407540583,AO
-1407540584,1407540607,GB
-1407540608,1407540615,NG
-1407540616,1407540623,SD
-1407540624,1407540631,NG
-1407540632,1407540655,GB
-1407540656,1407540671,CD
-1407540672,1407540703,GB
-1407540704,1407540711,NG
-1407540712,1407540767,GB
-1407540768,1407540775,NG
-1407540776,1407540991,GB
-1407540992,1407540999,CD
-1407541000,1407541023,GB
-1407541024,1407541031,LR
-1407541032,1407541055,NG
-1407541056,1407541063,GB
-1407541064,1407541071,NG
-1407541072,1407541095,GB
-1407541096,1407541103,GQ
-1407541104,1407541175,GB
-1407541176,1407541183,NG
-1407541184,1407541471,GB
-1407541472,1407541495,NG
-1407541496,1407541535,GB
-1407541536,1407541543,CM
-1407541544,1407541551,GB
-1407541552,1407541559,NG
-1407541560,1407541567,GH
-1407541568,1407541583,CM
-1407541584,1407541591,GB
-1407541592,1407541599,CM
-1407541600,1407541711,GB
-1407541712,1407541719,NG
-1407541720,1407541727,GB
-1407541728,1407541735,NG
-1407541736,1407541747,GB
-1407541748,1407541751,LR
-1407541752,1407541759,NG
-1407541760,1407541791,GB
-1407541792,1407541799,CM
-1407541800,1407541887,GB
-1407541888,1407542143,NG
-1407542144,1407542543,GB
-1407542544,1407542551,LR
-1407542552,1407542575,GB
-1407542576,1407542583,CD
-1407542584,1407542599,GB
-1407542600,1407542607,TG
-1407542608,1407542623,GB
-1407542624,1407542631,BJ
-1407542632,1407542639,NG
-1407542640,1407542655,GB
-1407542656,1407542663,SL
-1407542664,1407542671,GB
-1407542672,1407542679,CM
-1407542680,1407542687,NG
-1407542688,1407542695,CD
-1407542696,1407542703,NG
-1407542704,1407542727,GB
-1407542728,1407542735,NG
-1407542736,1407542767,GB
-1407542768,1407542775,GA
-1407542776,1407542791,GB
-1407542792,1407542799,NG
-1407542800,1407542847,GB
-1407542848,1407542863,NG
-1407542864,1407542903,GB
-1407542904,1407542911,CD
-1407542912,1407543039,AT
-1407543040,1407543167,GB
-1407543168,1407543183,GH
-1407543184,1407543191,GB
-1407543192,1407543239,NG
-1407543240,1407543255,GB
-1407543256,1407543263,NG
-1407543264,1407543279,GB
-1407543280,1407543287,NG
-1407543288,1407543295,GB
-1407543296,1407543303,NG
-1407543304,1407543311,GB
-1407543312,1407543343,NG
-1407543344,1407543359,GB
-1407543360,1407543399,NG
-1407543400,1407543407,GB
-1407543408,1407543415,NG
-1407543416,1407543463,GB
-1407543464,1407543471,NG
-1407543472,1407543487,GB
-1407543488,1407543511,NG
-1407543512,1407543519,GB
-1407543520,1407543607,NG
-1407543608,1407543615,GB
-1407543616,1407543663,NG
-1407543664,1407543679,GB
-1407543680,1407543735,NG
-1407543736,1407543743,GB
-1407543744,1407543783,NG
-1407543784,1407543791,GB
-1407543792,1407543807,NG
-1407543808,1407543815,GB
-1407543816,1407543831,NE
-1407543832,1407543859,GB
-1407543860,1407543864,NE
-1407543865,1407543871,GB
-1407543872,1407543879,GA
-1407543880,1407543887,GB
-1407543888,1407543895,NE
-1407543896,1407543903,GB
-1407543904,1407543911,CD
-1407543912,1407543919,NE
-1407543920,1407543935,GB
-1407543936,1407543951,NG
-1407543952,1407543959,GB
-1407543960,1407543967,CG
-1407543968,1407543975,CM
-1407543976,1407543983,GB
-1407543984,1407543991,NE
-1407543992,1407543999,NG
-1407544000,1407544007,GB
-1407544008,1407544015,NE
-1407544016,1407544023,NG
-1407544024,1407544031,GB
-1407544032,1407544039,CD
-1407544040,1407544047,NG
-1407544048,1407544119,GB
-1407544120,1407544127,NE
-1407544128,1407544135,GB
-1407544136,1407544143,NE
-1407544144,1407544167,GB
-1407544168,1407544175,NE
-1407544176,1407544583,GB
-1407544584,1407544591,NG
-1407544592,1407544599,GB
-1407544600,1407544607,NG
-1407544608,1407544839,GB
-1407544840,1407544847,SL
-1407544848,1407544887,GB
-1407544888,1407544895,NG
-1407544896,1407544943,GB
-1407544944,1407544951,NG
-1407544952,1407545599,GB
-1407545600,1407545615,NG
-1407545616,1407545623,GB
-1407545624,1407545631,NG
-1407545632,1407545639,GB
-1407545640,1407545647,NG
-1407545648,1407545655,GB
-1407545656,1407545663,NG
-1407545664,1407545719,GB
-1407545720,1407545735,NG
-1407545736,1407545751,GB
-1407545752,1407545759,LR
-1407545760,1407545767,GQ
-1407545768,1407545775,TD
-1407545776,1407545783,CD
-1407545784,1407545791,IL
-1407545792,1407545799,GB
-1407545800,1407545807,GQ
-1407545808,1407545831,NG
-1407545832,1407545847,GB
-1407545848,1407545855,GQ
-1407545856,1407545863,CI
-1407545864,1407545871,GB
-1407545872,1407545879,CD
-1407545880,1407545903,GB
-1407545904,1407545919,NG
-1407545920,1407545927,GB
-1407545928,1407545935,NG
-1407545936,1407545943,ZA
-1407545944,1407545951,NG
-1407545952,1407545959,BJ
-1407545960,1407545967,GB
-1407545968,1407545975,GQ
-1407545976,1407546031,GB
-1407546032,1407546039,NG
-1407546040,1407546095,GB
-1407546096,1407546103,GQ
-1407546104,1407546383,GB
-1407546384,1407546407,NG
-1407546408,1407546415,GB
-1407546416,1407546471,NG
-1407546472,1407546479,GB
-1407546480,1407546535,NG
-1407546536,1407546543,GB
-1407546544,1407546551,NG
-1407546552,1407546567,NE
-1407546568,1407546583,NG
-1407546584,1407546599,GB
-1407546600,1407546615,NG
-1407546616,1407546863,GB
-1407546864,1407546879,LR
-1407546880,1407546887,GB
-1407546888,1407546895,CD
-1407546896,1407546959,GB
-1407546960,1407546967,GH
-1407546968,1407546991,GB
-1407546992,1407547007,TD
-1407547008,1407547039,GB
-1407547040,1407547047,NG
-1407547048,1407547079,GB
-1407547080,1407547095,NG
-1407547096,1407547103,AO
-1407547104,1407547151,GB
-1407547152,1407547159,CD
-1407547160,1407547167,GB
-1407547168,1407547175,NG
-1407547176,1407547183,GB
-1407547184,1407547191,UG
-1407547192,1407547199,NG
-1407547200,1407547207,GB
-1407547208,1407547215,TD
-1407547216,1407547247,GB
-1407547248,1407547255,SL
-1407547256,1407547263,GB
-1407547264,1407547271,SL
-1407547272,1407547303,GB
-1407547304,1407547311,SL
-1407547312,1407547327,NG
-1407547328,1407547343,GB
-1407547344,1407547367,NG
-1407547368,1407547383,GB
-1407547384,1407547911,NG
-1407547912,1407547919,GB
-1407547920,1407547927,CG
-1407547928,1407547943,GB
-1407547944,1407547951,BJ
-1407547952,1407547983,GB
-1407547984,1407547999,BJ
-1407548000,1407548023,GB
-1407548024,1407548031,NG
-1407548032,1407548047,GB
-1407548048,1407548055,GA
-1407548056,1407548063,NG
-1407548064,1407548111,GB
-1407548112,1407548119,CI
-1407548120,1407548127,GB
-1407548128,1407548143,CM
-1407548144,1407548151,NE
-1407548152,1407548415,NG
-1407548416,1407548423,GB
-1407548424,1407548427,CM
-1407548428,1407548443,GB
-1407548444,1407548447,NE
-1407548448,1407548499,GB
-1407548500,1407548503,FR
-1407548504,1407548531,GB
-1407548532,1407548535,LR
-1407548536,1407548711,GB
-1407548712,1407548719,CD
-1407548720,1407548927,GB
-1407548928,1407548951,NG
-1407548952,1407548959,GB
-1407548960,1407548967,NG
-1407548968,1407548975,CM
-1407548976,1407548983,GB
-1407548984,1407548991,CD
-1407548992,1407548999,CM
-1407549000,1407549015,NG
-1407549016,1407549023,GB
-1407549024,1407549031,BJ
-1407549032,1407549039,AO
-1407549040,1407549055,GB
-1407549056,1407549063,NG
-1407549064,1407549071,GB
-1407549072,1407549079,NG
-1407549080,1407549127,GB
-1407549128,1407549135,LR
-1407549136,1407549143,SL
-1407549144,1407549151,GB
-1407549152,1407549159,CD
-1407549160,1407549439,GB
+1407537096,1407549439,GB
1407549440,1407582207,RU
1407582208,1407614975,PL
1407614976,1407680511,ES
-1407680512,1407680863,FR
-1407680864,1407681023,GB
-1407681024,1407681039,ES
-1407681040,1407681087,GB
-1407681088,1407681095,ES
-1407681096,1407681096,GB
-1407681097,1407681102,ES
-1407681103,1407681103,GB
-1407681104,1407681291,ES
-1407681292,1407681295,GB
-1407681296,1407681535,ES
-1407681536,1407681983,GB
-1407681984,1407681999,ES
-1407682000,1407682303,GB
-1407682304,1407682559,FR
-1407682560,1407682879,GB
-1407682880,1407682911,FI
-1407682912,1407683431,GB
-1407683432,1407683439,IL
-1407683440,1407683471,GB
-1407683472,1407683479,IL
-1407683480,1407686431,GB
-1407686432,1407686463,ES
-1407686464,1407686495,GB
-1407686496,1407686527,ES
-1407686528,1407687168,GB
-1407687169,1407687182,ES
-1407687183,1407687184,GB
-1407687185,1407687190,ES
-1407687191,1407687199,GB
-1407687200,1407687231,ES
-1407687232,1407687296,GB
-1407687297,1407687422,ES
-1407687423,1407687423,GB
-1407687424,1407687679,ES
-1407687680,1407687935,GB
-1407687936,1407687991,ES
-1407687992,1407688063,GB
-1407688064,1407688191,ES
-1407688192,1407695215,GB
-1407695216,1407695223,ES
-1407695224,1407696487,GB
-1407696488,1407696495,AU
-1407696496,1407699104,GB
-1407699105,1407699134,ES
-1407699135,1407700271,GB
-1407700272,1407700287,DE
-1407700288,1407702015,GB
-1407702016,1407702271,FR
-1407702272,1407702783,GB
-1407702784,1407702911,FR
-1407702912,1407702927,GB
-1407702928,1407702975,FR
-1407702976,1407703039,GB
-1407703040,1407703455,FR
-1407703456,1407703535,GB
-1407703536,1407703871,FR
-1407703872,1407703935,GB
-1407703936,1407704039,FR
-1407704040,1407704191,GB
-1407704192,1407704319,FR
-1407704320,1407704383,GB
-1407704384,1407704447,FR
-1407704448,1407705167,GB
-1407705168,1407705183,FR
-1407705184,1407705599,GB
-1407705600,1407705727,FR
-1407705728,1407705759,GB
-1407705760,1407705791,FR
-1407705792,1407706367,GB
-1407706368,1407706423,FR
-1407706424,1407706431,GB
-1407706432,1407706559,FR
-1407706560,1407707055,GB
-1407707056,1407707063,PT
-1407707064,1407707703,GB
-1407707704,1407707839,CH
-1407707840,1407707903,GB
-1407707904,1407707935,CH
-1407707936,1407709183,GB
-1407709184,1407709695,DE
-1407709696,1407710207,GB
-1407710208,1407710239,ES
-1407710240,1407710491,GB
-1407710492,1407710495,IL
-1407710496,1407710651,GB
-1407710652,1407710655,IL
-1407710656,1407711231,GB
-1407711232,1407711319,FR
-1407711320,1407711327,GB
-1407711328,1407711743,FR
-1407711744,1407712207,GB
-1407712208,1407712223,FR
-1407712224,1407712247,GB
-1407712248,1407712254,CW
-1407712255,1407712767,GB
-1407712768,1407713279,DE
+1407680512,1407695763,GB
+1407695764,1407695767,DK
+1407695768,1407695771,GB
+1407695772,1407695775,DK
+1407695776,1407702271,GB
+1407702272,1407702527,DE
+1407702528,1407711239,GB
+1407711240,1407711247,FR
+1407711248,1407711263,GB
+1407711264,1407711295,FR
+1407711296,1407713279,GB
1407713280,1407778815,NL
1407778816,1407844351,SE
1407844352,1407909887,RU
1407909888,1407975423,GR
-1407975424,1408015312,DE
-1408015313,1408015313,A2
-1408015314,1408040959,DE
+1407975424,1408040959,DE
1408040960,1408106495,RU
1408106496,1408172031,PL
1408172032,1408237567,RU
1408237568,1408270335,CZ
1408270336,1408303103,PT
1408303104,1408335871,LV
-1408335872,1408336879,SE
-1408336880,1408336887,FI
-1408336888,1408338959,SE
-1408338960,1408338967,NO
-1408338968,1408353815,SE
-1408353816,1408353823,DK
-1408353824,1408368639,SE
+1408335872,1408368639,SE
1408368640,1408376831,NO
1408376832,1408385023,DE
1408385024,1408393215,PL
@@ -54429,26 +18077,13 @@
1408458752,1408460799,GB
1408460800,1408462847,PL
1408462848,1408464895,DE
-1408464896,1408466943,RO
1408466944,1408499711,NO
1408499712,1408532479,PS
1408532480,1408567919,GB
1408567920,1408567927,IE
-1408567928,1408574847,GB
-1408574848,1408574911,IE
-1408574912,1408575231,GB
-1408575232,1408575239,IE
-1408575240,1408579583,GB
+1408567928,1408579583,GB
1408579584,1408579839,IE
-1408579840,1408584191,GB
-1408584192,1408584703,IE
-1408584704,1408585407,GB
-1408585408,1408585471,IE
-1408585472,1408590367,GB
-1408590368,1408590383,IM
-1408590384,1408590847,GB
-1408590848,1408591103,BE
-1408591104,1408597503,GB
+1408579840,1408597503,GB
1408597504,1408598015,IE
1408598016,1408630783,FI
1408630784,1408634879,RO
@@ -54459,9 +18094,9 @@
1408761856,1409286143,SE
1409286144,1409362431,HU
1409362432,1409363967,BG
-1409363968,1409380655,HU
-1409380656,1409380673,RO
-1409380674,1409413119,HU
+1409363968,1409378679,HU
+1409378680,1409378687,RO
+1409378688,1409413119,HU
1409413120,1409415167,BG
1409415168,1409430271,HU
1409430272,1409430783,RO
@@ -54469,321 +18104,51 @@
1409548288,1409810431,FR
1409810432,1409941503,GB
1409941504,1410007039,PL
-1410007040,1410007551,A2
-1410007552,1410007807,IR
-1410007808,1410008575,A2
-1410008576,1410008607,AE
-1410008608,1410008831,A2
-1410008832,1410009087,US
-1410009088,1410009343,A2
-1410009344,1410009479,US
-1410009480,1410009487,A2
-1410009488,1410009535,GI
-1410009536,1410009599,A2
-1410009600,1410009855,DE
-1410009856,1410010111,US
-1410010112,1410010127,A2
-1410010128,1410010135,IQ
-1410010136,1410010399,A2
-1410010400,1410010431,LY
-1410010432,1410010543,A2
-1410010544,1410010575,LY
-1410010576,1410010599,A2
-1410010600,1410010607,IR
-1410010608,1410010623,LY
-1410010624,1410010639,DE
-1410010640,1410010687,A2
-1410010688,1410010703,IR
-1410010704,1410010719,A2
-1410010720,1410010751,LY
-1410010752,1410010823,A2
-1410010824,1410010831,IR
-1410010832,1410010879,A2
-1410010880,1410011135,IR
-1410011136,1410011647,DE
-1410011648,1410012415,A2
-1410012416,1410012671,AE
-1410012672,1410013183,DE
-1410013184,1410013439,ES
-1410013440,1410013471,IR
-1410013472,1410013535,AE
-1410013536,1410013567,IR
-1410013568,1410013631,AE
-1410013632,1410013663,IR
-1410013664,1410013695,AE
-1410013696,1410013727,KW
-1410013728,1410013759,AE
-1410013760,1410013791,IR
-1410013792,1410013823,A2
-1410013824,1410013887,AF
-1410013888,1410013919,A2
-1410013920,1410013951,KW
-1410013952,1410013983,AE
-1410013984,1410014015,IR
-1410014016,1410014047,KW
-1410014048,1410014079,AE
-1410014080,1410014207,A2
-1410014208,1410014239,AE
-1410014240,1410014335,IR
-1410014336,1410014399,AE
-1410014400,1410014463,ES
-1410014464,1410014495,KW
-1410014496,1410014591,IR
-1410014592,1410014885,A2
-1410014886,1410014886,ES
-1410014887,1410014895,A2
-1410014896,1410014927,IR
-1410014928,1410014935,PA
-1410014936,1410014943,IR
-1410014944,1410014951,AE
-1410014952,1410014966,A2
-1410014967,1410014967,IR
-1410014968,1410014968,A2
-1410014969,1410014969,IR
-1410014970,1410014972,A2
-1410014973,1410014974,AE
-1410014975,1410015007,A2
-1410015008,1410015103,IR
-1410015104,1410015135,ES
-1410015136,1410015263,IR
-1410015264,1410015295,KW
-1410015296,1410015423,IR
-1410015424,1410015487,AE
-1410015488,1410015743,AF
-1410015744,1410015871,IR
-1410015872,1410015935,AE
-1410015936,1410016255,IR
-1410016256,1410016319,AE
-1410016320,1410016383,ES
-1410016384,1410016415,IR
-1410016416,1410016447,PA
-1410016448,1410016543,IR
-1410016544,1410016575,A2
-1410016576,1410016607,AE
-1410016608,1410016639,PA
-1410016640,1410016671,IR
-1410016672,1410016703,PA
-1410016704,1410016767,A2
-1410016768,1410016831,IR
-1410016832,1410016863,AE
-1410016864,1410016895,IR
-1410016896,1410017023,AE
-1410017024,1410017055,PA
-1410017056,1410017119,IR
-1410017120,1410017279,A2
-1410017280,1410017407,IR
-1410017408,1410017535,A2
-1410017536,1410017791,US
-1410017792,1410018047,IR
-1410018048,1410018303,A2
-1410018304,1410018559,AE
-1410018560,1410018591,A2
-1410018592,1410018607,IR
-1410018608,1410018623,LY
-1410018624,1410020103,A2
-1410020104,1410020111,US
-1410020112,1410021375,A2
-1410021376,1410021407,IR
-1410021408,1410021631,A2
-1410021632,1410021663,IR
-1410021664,1410021791,A2
-1410021792,1410021823,IR
-1410021824,1410022527,A2
-1410022528,1410022591,AE
-1410022592,1410022655,IR
-1410022656,1410023167,A2
-1410023168,1410023423,IR
-1410023424,1410024287,A2
-1410024288,1410024319,IR
-1410024320,1410024447,A2
-1410024448,1410025087,IR
-1410025088,1410025215,A2
-1410025216,1410025247,ES
-1410025248,1410025279,A2
-1410025280,1410025311,AE
-1410025312,1410025343,ES
-1410025344,1410025407,IR
-1410025408,1410025439,AE
-1410025440,1410025503,A2
-1410025504,1410025519,AE
-1410025520,1410025535,IR
-1410025536,1410025567,ES
-1410025568,1410025599,A2
-1410025600,1410025727,IR
-1410025728,1410025759,AE
-1410025760,1410025791,A2
-1410025792,1410025823,AE
-1410025824,1410025855,IR
-1410025856,1410025983,A2
-1410025984,1410026015,IR
-1410026016,1410026047,AE
-1410026048,1410026111,ES
-1410026112,1410026143,A2
-1410026144,1410026175,IR
-1410026176,1410026207,AE
-1410026208,1410026239,IR
-1410026240,1410026367,AE
-1410026368,1410026431,IR
-1410026432,1410026463,A2
-1410026464,1410026751,IR
-1410026752,1410026815,CA
-1410026816,1410026847,A2
-1410026848,1410026911,IR
-1410026912,1410026943,A2
-1410026944,1410027006,IR
-1410027007,1410027007,A2
-1410027008,1410027263,KW
-1410027264,1410027519,AF
-1410027520,1410027711,A2
-1410027712,1410027775,IR
-1410027776,1410028799,A2
-1410028800,1410028831,IR
-1410028832,1410029823,A2
-1410029824,1410030079,DE
-1410030080,1410030335,A2
-1410030336,1410030591,DE
-1410030592,1410035327,A2
-1410035328,1410035343,IR
-1410035344,1410035983,A2
-1410035984,1410035999,PA
-1410036000,1410036031,A2
-1410036032,1410036063,PA
-1410036064,1410036111,A2
-1410036112,1410036127,PA
-1410036128,1410036191,A2
-1410036192,1410036207,PA
-1410036208,1410036735,A2
-1410036736,1410036751,PA
-1410036752,1410042367,A2
-1410042368,1410042623,US
-1410042624,1410042815,A2
-1410042816,1410042831,US
-1410042832,1410043169,A2
-1410043170,1410043171,US
-1410043172,1410043172,A2
-1410043173,1410043173,US
-1410043174,1410043903,A2
-1410043904,1410043935,AE
-1410043936,1410045183,A2
-1410045184,1410045439,IQ
-1410045440,1410046463,A2
-1410046464,1410046495,DE
-1410046496,1410046719,A2
-1410046720,1410046735,DE
-1410046736,1410046975,A2
-1410046976,1410047103,TR
-1410047104,1410071815,A2
-1410071816,1410071839,DE
-1410071840,1410072319,A2
-1410072320,1410072575,AE
+1410007040,1410072575,DE
1410072576,1410203647,GB
-1410203648,1410204439,FR
-1410204440,1410204455,IT
-1410204456,1410204479,FR
-1410204480,1410204495,PT
-1410204496,1410212863,FR
+1410203648,1410212863,FR
1410212864,1410213119,GB
-1410213120,1410225431,FR
-1410225432,1410225439,GB
-1410225440,1410233575,FR
-1410233576,1410233583,IE
-1410233584,1410266303,FR
-1410266304,1410266311,IE
-1410266312,1410269183,FR
-1410269184,1410278399,LT
-1410278400,1410278655,LV
-1410278656,1410318335,LT
+1410213120,1410269183,FR
+1410269184,1410303999,LT
+1410304000,1410306047,LV
+1410306048,1410318335,LT
1410318336,1410319359,LV
1410319360,1410322431,LT
1410322432,1410326527,LV
1410326528,1410334719,LT
1410334720,1410342911,ES
1410342912,1410351103,SK
-1410351104,1410354175,CH
-1410354176,1410354431,FR
-1410354432,1410359295,CH
+1410351104,1410359295,CH
1410359296,1410367487,CZ
1410367488,1410375679,RU
-1410375680,1410383871,DK
+1410375680,1410378015,DK
+1410378016,1410378031,NO
+1410378032,1410383871,DK
1410383872,1410392063,NO
-1410392064,1410397183,DE
-1410397184,1410397439,PL
-1410397440,1410399487,DE
-1410399488,1410399743,TR
-1410399744,1410400063,DE
-1410400064,1410400127,TR
-1410400128,1410400255,DE
+1410392064,1410400255,DE
1410400256,1410408447,RU
1410408448,1410416639,IT
1410416640,1410424831,TR
1410424832,1410433023,DE
1410433024,1410441215,BE
-1410441216,1410443295,DE
-1410443296,1410443327,IR
-1410443328,1410443383,DE
-1410443384,1410443387,US
-1410443388,1410449407,DE
+1410441216,1410449407,DE
1410449408,1410457599,SE
1410457600,1410465791,RU
1410465792,1410473983,ES
1410473984,1410490367,JO
1410490368,1410498559,RU
-1410498560,1410502803,IT
-1410502804,1410502807,US
-1410502808,1410506751,IT
+1410498560,1410506751,IT
1410506752,1410514943,IE
1410514944,1410523135,GB
1410523136,1410531327,PT
1410531328,1410539519,DE
-1410539520,1410544415,GB
-1410544416,1410544431,DE
-1410544432,1410547711,GB
+1410539520,1410540671,GB
+1410540672,1410540799,US
+1410540800,1410547711,GB
1410547712,1410555903,CZ
1410555904,1410564095,GB
1410564096,1410572287,SE
-1410572288,1410572863,DE
-1410572864,1410572895,RU
-1410572896,1410573407,DE
-1410573408,1410573439,RU
-1410573440,1410573695,DE
-1410573696,1410573711,RU
-1410573712,1410573759,DE
-1410573760,1410573775,RU
-1410573776,1410573799,DE
-1410573800,1410573815,IT
-1410573816,1410573823,RU
-1410573824,1410574511,DE
-1410574512,1410574519,CH
-1410574520,1410574527,DE
-1410574528,1410574543,IT
-1410574544,1410574559,DE
-1410574560,1410574575,RU
-1410574576,1410574583,DE
-1410574584,1410574591,RU
-1410574592,1410575071,DE
-1410575072,1410575087,IT
-1410575088,1410575103,RU
-1410575104,1410575111,US
-1410575112,1410575119,IT
-1410575120,1410575135,DE
-1410575136,1410575167,RU
-1410575168,1410575279,DE
-1410575280,1410575295,IL
-1410575296,1410575327,IT
-1410575328,1410575359,SI
-1410575360,1410575775,DE
-1410575776,1410575791,RU
-1410575792,1410575807,DE
-1410575808,1410575823,IL
-1410575824,1410575839,BG
-1410575840,1410575855,IT
-1410575856,1410575871,DE
-1410575872,1410575999,DK
-1410576000,1410576255,DE
-1410576256,1410576319,IT
-1410576320,1410576351,DE
-1410576352,1410576383,IT
-1410576384,1410588671,DE
+1410572288,1410588671,DE
1410588672,1410596863,GB
1410596864,1410605055,ES
1410605056,1410613247,CH
@@ -54791,12 +18156,8 @@
1410621440,1410629631,NO
1410629632,1410637823,FI
1410637824,1410646015,AT
-1410646016,1410647807,GB
-1410647808,1410648319,IE
-1410648320,1410654207,GB
-1410654208,1410662143,SI
-1410662144,1410662207,CY
-1410662208,1410662399,SI
+1410646016,1410654207,GB
+1410654208,1410662399,SI
1410662400,1410670591,HU
1410670592,1410672639,DE
1410672640,1410673663,US
@@ -54806,76 +18167,14 @@
1410678784,1410686975,RU
1410686976,1410695167,CZ
1410695168,1410703359,GB
-1410703360,1410711551,ES
1410711552,1410719743,BG
1410719744,1410727935,RU
1410727936,1410736127,BG
-1410736128,1410744319,RS
-1410744320,1410744575,FR
-1410744576,1410744831,A2
-1410744832,1410745087,FR
-1410745088,1410745343,A2
-1410745344,1410745855,FR
-1410745856,1410746111,CH
-1410746112,1410746879,AO
-1410746880,1410748415,A2
-1410748416,1410752511,DE
-1410752512,1410752515,AQ
-1410752516,1410752519,DE
-1410752520,1410752523,AQ
-1410752524,1410752575,DE
-1410752576,1410752703,AQ
-1410752704,1410752763,DE
-1410752764,1410752779,AQ
-1410752780,1410752787,DE
-1410752788,1410752791,AQ
-1410752792,1410753143,DE
-1410753144,1410753151,SC
-1410753152,1410753155,AQ
-1410753156,1410753159,DE
-1410753160,1410753167,AQ
-1410753168,1410753271,DE
-1410753272,1410753279,AQ
-1410753280,1410753359,DE
-1410753360,1410753367,AQ
-1410753368,1410753531,DE
-1410753532,1410753791,AQ
-1410753792,1410754303,DE
-1410754304,1410754599,AQ
-1410754600,1410754607,DE
-1410754608,1410754767,AQ
-1410754768,1410754775,DE
-1410754776,1410754783,TL
-1410754784,1410754815,AQ
-1410754816,1410754827,DE
-1410754828,1410754831,AQ
-1410754832,1410754855,DE
-1410754856,1410754859,AQ
-1410754860,1410754867,DE
-1410754868,1410754871,AQ
-1410754872,1410755063,DE
-1410755064,1410755067,AQ
-1410755068,1410755071,DE
-1410755072,1410755327,AQ
-1410755328,1410755583,DE
-1410755584,1410756351,AQ
-1410756352,1410756863,DE
-1410756864,1410757119,AQ
-1410757120,1410758655,DE
-1410758656,1410759423,AQ
-1410759424,1410760191,DE
-1410760192,1410760447,AQ
-1410760448,1410760455,NL
-1410760456,1410760463,DE
-1410760464,1410760471,CN
-1410760472,1410760479,DE
-1410760480,1410760495,AQ
-1410760496,1410760511,DE
-1410760512,1410760551,AQ
-1410760552,1410760567,DE
-1410760568,1410760571,AQ
-1410760572,1410760575,DE
-1410760576,1410760703,AQ
+1410736128,1410738687,RS
+1410738688,1410738943,XK
+1410738944,1410744319,RS
+1410744320,1410752511,FR
+1410752512,1410760703,NL
1410760704,1410768895,RU
1410768896,1410777087,GB
1410777088,1410785279,RU
@@ -54890,30 +18189,13 @@
1410850816,1410859007,DE
1410859008,1411383295,NL
1411383296,1411448831,LT
-1411448832,1411451647,IT
-1411451648,1411451903,DE
-1411451904,1411452159,IT
-1411452160,1411452415,DE
-1411452416,1411453439,IT
-1411453440,1411453695,DE
-1411453696,1411454975,IT
-1411454976,1411455231,DE
-1411455232,1411455359,IT
-1411455360,1411455743,DE
-1411455744,1411456255,IT
-1411456256,1411456511,DE
-1411456512,1411457279,IT
-1411457280,1411457535,DE
-1411457536,1411465215,IT
-1411465216,1411465471,GB
-1411465472,1411465727,US
-1411465728,1411481855,IT
+1411448832,1411449727,IT
+1411449728,1411449791,DE
+1411449792,1411450303,IT
+1411450304,1411450367,DE
+1411450368,1411481855,IT
1411481856,1411483903,DE
-1411483904,1411500799,IT
-1411500800,1411501055,DE
-1411501056,1411505407,IT
-1411505408,1411505663,US
-1411505664,1411514367,IT
+1411483904,1411514367,IT
1411514368,1411579903,FI
1411579904,1411645439,NL
1411645440,1411710975,EG
@@ -54935,144 +18217,30 @@
1411833856,1411837951,NL
1411837952,1411842047,BG
1411842048,1411850239,NL
-1411850240,1411858431,RO
-1411858432,1411868607,DE
-1411868608,1411868671,ES
-1411868672,1411870719,DE
-1411870720,1411871487,GB
-1411871488,1411871615,EU
-1411871616,1411871999,GB
-1411872000,1411872767,EU
+1411850240,1411858431,FR
+1411858432,1411870719,DE
1411872768,1411874815,NL
1411874816,1411876863,RU
-1411876864,1411878911,EU
1411878912,1411880959,CH
-1411880960,1411881471,GE
+1411880960,1411881215,DE
+1411881216,1411881471,GB
1411881472,1411883007,DE
1411883008,1411887103,PL
1411887104,1411889151,IR
1411889152,1411891199,IT
-1411891200,1411893247,IQ
-1411893248,1411895295,FR
1411895296,1411899391,SI
1411899392,1411901439,ES
-1411901440,1411902207,IE
-1411902208,1411902271,DK
-1411902272,1411903487,IE
+1411901440,1411903487,IE
1411903488,1411907583,RU
-1411907584,1411907839,EU
-1411907840,1411908095,GB
-1411908096,1411908351,DE
-1411908352,1411908399,EU
-1411908400,1411908479,GB
-1411908480,1411908535,EU
-1411908536,1411908559,GB
-1411908560,1411908563,AU
-1411908564,1411908607,EU
-1411908608,1411908863,GB
-1411908864,1411909631,EU
-1411909632,1411909759,GB
-1411909760,1411911423,EU
-1411911424,1411911439,GB
-1411911440,1411911615,EU
-1411911616,1411911647,GB
-1411911648,1411911679,EU
1411911680,1411915775,US
-1411915776,1411915839,GB
-1411915840,1411915903,EU
-1411915904,1411915911,GB
-1411915912,1411915935,EU
-1411915936,1411915967,GB
-1411915968,1411916031,EU
-1411916032,1411916095,GB
-1411916096,1411916295,EU
-1411916296,1411916303,GB
-1411916304,1411916799,EU
-1411916800,1411916863,GB
-1411916864,1411917567,EU
-1411917568,1411917639,GB
-1411917640,1411917663,EU
-1411917664,1411917695,GB
-1411917696,1411917759,EU
-1411917760,1411917791,GB
-1411917792,1411919871,EU
1411919872,1411923967,DE
1411923968,1411940351,BG
1411940352,1411973119,PL
-1411973120,1411999751,SI
-1411999752,1411999767,BA
-1411999768,1411999775,SI
-1411999776,1411999791,BA
-1411999792,1411999807,SI
-1411999808,1411999847,BA
-1411999848,1411999871,SI
-1411999872,1411999895,BA
-1411999896,1411999903,SI
-1411999904,1411999911,BA
-1411999912,1411999919,SI
-1411999920,1411999927,BA
-1411999928,1411999935,SI
-1411999936,1411999943,BA
-1411999944,1411999951,SI
-1411999952,1411999959,BA
-1411999960,1411999967,SI
-1411999968,1412000767,BA
-1412000768,1412000775,SI
-1412000776,1412000791,BA
-1412000792,1412000863,SI
-1412000864,1412000879,BA
-1412000880,1412000895,SI
-1412000896,1412000911,BA
-1412000912,1412000943,SI
-1412000944,1412000959,BA
-1412000960,1412000975,SI
-1412000976,1412000999,BA
-1412001000,1412001007,SI
-1412001008,1412001015,BA
-1412001016,1412001311,SI
-1412001312,1412001319,DE
-1412001320,1412001807,SI
-1412001808,1412001855,RO
-1412001856,1412001919,SI
-1412001920,1412002303,RO
-1412002304,1412002559,SI
-1412002560,1412002783,MK
-1412002784,1412002815,SI
-1412002816,1412003119,BA
-1412003120,1412003135,SI
-1412003136,1412003151,BA
-1412003152,1412003199,SI
-1412003200,1412003215,BA
-1412003216,1412003223,SI
-1412003224,1412003231,BA
-1412003232,1412003247,SI
-1412003248,1412003263,BA
-1412003264,1412003271,SI
-1412003272,1412003303,BA
-1412003304,1412003327,SI
-1412003328,1412003335,BA
-1412003336,1412003343,SI
-1412003344,1412003351,BA
-1412003352,1412003375,SI
-1412003376,1412003383,BA
-1412003384,1412003391,SI
-1412003392,1412003527,BA
-1412003528,1412003535,SI
-1412003536,1412003551,BA
-1412003552,1412003583,SI
-1412003584,1412003599,BA
-1412003600,1412003623,SI
-1412003624,1412003631,BA
-1412003632,1412003639,SI
-1412003640,1412003647,BA
-1412003648,1412003799,SI
-1412003800,1412003815,BA
-1412003816,1412003855,SI
-1412003856,1412003903,BG
-1412003904,1412003967,SI
-1412003968,1412004351,BG
-1412004352,1412004863,BA
-1412004864,1412005887,SI
+1411973120,1411999743,SI
+1411999744,1412001023,BA
+1412001024,1412002815,SI
+1412002816,1412003839,BA
+1412003840,1412005887,SI
1412005888,1412038655,NL
1412038656,1412071423,RU
1412071424,1412104191,CZ
@@ -55080,53 +18248,38 @@
1412136960,1412169727,BG
1412169728,1412202495,TR
1412202496,1412235263,DE
-1412235264,1412254719,GB
-1412254720,1412254975,NL
-1412254976,1412257535,GB
-1412257536,1412257599,NL
-1412257600,1412258559,GB
-1412258560,1412258815,DE
-1412258816,1412300799,GB
+1412235264,1412300799,GB
1412300800,1412333567,DE
1412333568,1412366335,LT
1412366336,1412399103,SK
1412399104,1412415487,RU
-1412415488,1412416511,AE
-1412416512,1412420351,IR
-1412420352,1412420607,AE
-1412420608,1412431871,IR
+1412415488,1412419583,AE
+1412419584,1412427775,IR
+1412427776,1412429823,AE
+1412429824,1412431871,IR
1412431872,1412562943,NO
1412562944,1412628479,EE
-1412628480,1412644863,TR
+1412628480,1412641791,TR
+1412641792,1412642815,DE
+1412642816,1412644863,TR
1412644864,1412661247,RU
1412661248,1412677631,GB
1412677632,1412685823,RU
-1412685824,1412686239,IE
-1412686240,1412686335,BB
-1412686336,1412689315,IE
-1412689316,1412689343,GB
-1412689344,1412690191,IE
-1412690192,1412690199,GB
-1412690200,1412694015,IE
+1412685824,1412694015,IE
1412694016,1412710399,EE
1412710400,1412726783,RU
1412726784,1412743167,SI
1412743168,1412775935,NO
1412775936,1412792319,NL
1412792320,1412793343,US
-1412793344,1412793855,EU
1412793856,1412804607,US
-1412804608,1412804863,EU
1412804864,1412805631,US
-1412805632,1412806143,EU
1412806144,1412808703,US
1412808704,1412825087,RU
1412825088,1412830463,IQ
1412830464,1412832767,LB
1412832768,1412833023,SL
-1412833024,1412833279,LB
-1412833280,1412833535,CI
-1412833536,1412841471,LB
+1412833024,1412841471,LB
1412841472,1412857855,UZ
1412857856,1412874239,BG
1412874240,1412890623,RU
@@ -55135,10 +18288,16 @@
1412923392,1412939775,FR
1412939776,1412956159,CH
1412956160,1413480447,DE
-1413480448,1414004735,GB
-1414004736,1414069218,CH
+1413480448,1414004735,IN
+1414004736,1414036607,CH
+1414036608,1414036991,DE
+1414036992,1414039551,CH
+1414039552,1414040575,DE
+1414040576,1414069218,CH
1414069219,1414069219,AT
-1414069220,1414266879,CH
+1414069220,1414094847,CH
+1414094848,1414095615,DE
+1414095616,1414266879,CH
1414266880,1414529023,ES
1414529024,1415053311,NL
1415053312,1415184383,ES
@@ -55148,316 +18307,23 @@
1415577600,1416101887,FR
1416101888,1416364031,NL
1416364032,1416626175,IL
-1416626176,1417019391,AT
-1417019392,1417084927,DE
-1417084928,1417117695,AT
-1417117696,1417150463,DE
+1416626176,1416941567,AT
+1416941568,1416943615,CH
+1416943616,1416944639,AT
+1416944640,1416945663,CZ
+1416945664,1416953855,AT
+1416953856,1417019391,RO
+1417019392,1417150463,DE
1417150464,1417674751,ES
1417674752,1421869055,DE
1421869056,1422393343,BE
-1422393344,1422393599,DE
-1422393600,1422393855,IT
-1422393856,1422397967,DE
-1422397968,1422397983,CH
-1422397984,1422398847,DE
-1422398848,1422398879,ES
-1422398880,1422399231,DE
-1422399232,1422399487,US
-1422399488,1422399999,DE
-1422400000,1422400255,IT
-1422400256,1422400511,DE
-1422400512,1422400767,BR
-1422400768,1422401127,DE
-1422401128,1422401135,US
-1422401136,1422401319,DE
-1422401320,1422401327,AT
-1422401328,1422403839,DE
-1422403840,1422403903,IT
-1422403904,1422403935,SE
-1422403936,1422403943,AT
-1422403944,1422406399,DE
-1422406400,1422406463,GB
-1422406464,1422406471,AT
-1422406472,1422406475,DE
-1422406476,1422406479,US
-1422406480,1422406527,DE
-1422406528,1422406543,US
-1422406544,1422406559,DK
-1422406560,1422406575,RU
-1422406576,1422406623,DE
-1422406624,1422406639,AT
-1422406640,1422410335,DE
-1422410336,1422410343,AT
-1422410344,1422410367,DE
-1422410368,1422410495,IT
-1422410496,1422411399,DE
-1422411400,1422411407,RO
-1422411408,1422411439,DE
-1422411440,1422411455,US
-1422411456,1422411775,DE
-1422411776,1422412031,AT
-1422412032,1422412303,DE
-1422412304,1422412319,CH
-1422412320,1422412527,DE
-1422412528,1422412543,RO
-1422412544,1422413567,DE
+1422393344,1422413567,DE
1422413568,1422413695,AT
1422413696,1422413727,US
-1422413728,1422418175,DE
-1422418176,1422418943,US
-1422418944,1422419967,DE
-1422419968,1422423807,US
-1422423808,1422425855,DE
-1422425856,1422430463,US
-1422430464,1422437391,DE
-1422437392,1422437399,AT
-1422437400,1422437439,DE
-1422437440,1422437455,CH
-1422437456,1422437471,DE
-1422437472,1422437487,AT
-1422437488,1422437503,DE
-1422437504,1422437519,AT
-1422437520,1422437647,DE
-1422437648,1422437655,AT
-1422437656,1422437695,DE
-1422437696,1422437711,CH
-1422437712,1422437727,DE
-1422437728,1422437743,AT
-1422437744,1422437759,DE
-1422437760,1422437775,AT
-1422437776,1422437903,DE
-1422437904,1422437911,AT
-1422437912,1422437951,DE
-1422437952,1422437967,CH
-1422437968,1422437983,DE
-1422437984,1422437999,AT
-1422438000,1422438015,DE
-1422438016,1422438031,AT
-1422438032,1422438159,DE
-1422438160,1422438167,AT
-1422438168,1422438207,DE
-1422438208,1422438223,CH
-1422438224,1422438239,DE
-1422438240,1422438255,AT
-1422438256,1422438271,DE
-1422438272,1422438287,AT
-1422438288,1422438415,DE
-1422438416,1422438423,AT
-1422438424,1422438463,DE
-1422438464,1422438479,CH
-1422438480,1422438495,DE
-1422438496,1422438511,AT
-1422438512,1422438527,DE
-1422438528,1422438543,AT
-1422438544,1422438671,DE
-1422438672,1422438679,AT
-1422438680,1422438719,DE
-1422438720,1422438735,CH
-1422438736,1422438751,DE
-1422438752,1422438767,AT
-1422438768,1422438783,DE
-1422438784,1422438799,AT
-1422438800,1422438927,DE
-1422438928,1422438935,AT
-1422438936,1422438975,DE
-1422438976,1422438991,CH
-1422438992,1422439007,DE
-1422439008,1422439023,AT
-1422439024,1422439039,DE
-1422439040,1422439055,AT
-1422439056,1422439183,DE
-1422439184,1422439191,AT
-1422439192,1422439231,DE
-1422439232,1422439247,CH
-1422439248,1422439263,DE
-1422439264,1422439279,AT
-1422439280,1422439295,DE
-1422439296,1422439311,AT
-1422439312,1422439439,DE
-1422439440,1422439447,AT
-1422439448,1422439487,DE
-1422439488,1422439503,CH
-1422439504,1422439519,DE
-1422439520,1422439535,AT
-1422439536,1422439551,DE
-1422439552,1422439567,AT
-1422439568,1422439695,DE
-1422439696,1422439703,AT
-1422439704,1422439743,DE
-1422439744,1422439759,CH
-1422439760,1422439775,DE
-1422439776,1422439791,AT
-1422439792,1422439807,DE
-1422439808,1422439823,AT
-1422439824,1422439951,DE
-1422439952,1422439959,AT
-1422439960,1422439999,DE
-1422440000,1422440015,CH
-1422440016,1422440207,DE
-1422440208,1422440215,AT
-1422440216,1422440255,DE
-1422440256,1422440271,CH
-1422440272,1422440463,DE
-1422440464,1422440471,AT
-1422440472,1422440511,DE
-1422440512,1422440527,CH
-1422440528,1422440719,DE
-1422440720,1422440727,AT
-1422440728,1422440767,DE
-1422440768,1422440783,CH
-1422440784,1422440975,DE
-1422440976,1422440983,AT
-1422440984,1422441023,DE
-1422441024,1422441039,CH
-1422441040,1422441231,DE
-1422441232,1422441239,AT
-1422441240,1422441279,DE
-1422441280,1422441295,CH
-1422441296,1422441487,DE
-1422441488,1422441495,AT
-1422441496,1422441535,DE
-1422441536,1422441551,CH
-1422441552,1422441743,DE
-1422441744,1422441751,AT
-1422441752,1422441791,DE
-1422441792,1422441807,CH
-1422441808,1422441999,DE
-1422442000,1422442007,AT
-1422442008,1422442047,DE
-1422442048,1422442063,CH
-1422442064,1422442255,DE
-1422442256,1422442263,AT
-1422442264,1422442303,DE
-1422442304,1422442319,CH
-1422442320,1422444287,DE
-1422444288,1422444543,US
-1422444544,1422444671,CN
-1422444672,1422445055,DE
-1422445056,1422446079,IT
-1422446080,1422451023,DE
-1422451024,1422451039,AT
-1422451040,1422451119,DE
-1422451120,1422451127,AT
-1422451128,1422451551,DE
-1422451552,1422451583,SE
-1422451584,1422451687,DE
-1422451688,1422451695,AT
-1422451696,1422452271,DE
-1422452272,1422452275,RU
-1422452276,1422452567,DE
-1422452568,1422452575,AT
-1422452576,1422452591,DE
-1422452592,1422452607,AT
-1422452608,1422453007,DE
-1422453008,1422453015,AT
-1422453016,1422453263,DE
-1422453264,1422453271,AT
-1422453272,1422453519,DE
-1422453520,1422453527,AT
-1422453528,1422453775,DE
-1422453776,1422453783,AT
-1422453784,1422454031,DE
-1422454032,1422454039,AT
-1422454040,1422454287,DE
-1422454288,1422454295,AT
-1422454296,1422454543,DE
-1422454544,1422454551,AT
-1422454552,1422454847,DE
-1422454848,1422454851,US
-1422454852,1422454871,DE
-1422454872,1422454879,AT
-1422454880,1422456127,DE
-1422456128,1422456135,AT
-1422456136,1422456143,DE
-1422456144,1422456159,AT
-1422456160,1422456639,DE
-1422456640,1422456647,AT
-1422456648,1422456655,DE
-1422456656,1422456671,AT
-1422456672,1422457215,DE
-1422457216,1422457223,AT
-1422457224,1422457231,DE
-1422457232,1422457247,AT
-1422457248,1422457407,DE
-1422457408,1422457415,AT
-1422457416,1422457423,DE
-1422457424,1422457439,AT
-1422457440,1422457471,DE
-1422457472,1422457487,US
-1422457488,1422458175,DE
-1422458176,1422458191,AT
-1422458192,1422458431,DE
-1422458432,1422458447,AT
-1422458448,1422458671,DE
-1422458672,1422458687,AT
-1422458688,1422460927,DE
-1422460928,1422461183,US
-1422461184,1422464255,DE
-1422464256,1422465279,US
-1422465280,1422465535,DE
-1422465536,1422466559,US
-1422466560,1422467695,DE
-1422467696,1422467711,RO
-1422467712,1422467967,DE
-1422467968,1422468031,BE
-1422468032,1422468671,DE
-1422468672,1422468735,IT
-1422468736,1422468799,DE
-1422468800,1422468863,CN
-1422468864,1422469839,DE
-1422469840,1422469847,RO
-1422469848,1422469903,DE
-1422469904,1422469911,AT
-1422469912,1422470159,DE
-1422470160,1422470167,AT
-1422470168,1422470415,DE
-1422470416,1422470423,AT
-1422470424,1422470671,DE
-1422470672,1422470679,AT
-1422470680,1422470927,DE
-1422470928,1422470935,AT
-1422470936,1422471183,DE
-1422471184,1422471191,AT
-1422471192,1422471439,DE
-1422471440,1422471447,AT
-1422471448,1422471695,DE
-1422471696,1422471703,AT
-1422471704,1422471951,DE
-1422471952,1422471959,AT
-1422471960,1422472207,DE
-1422472208,1422472215,AT
-1422472216,1422472463,DE
-1422472464,1422472471,AT
-1422472472,1422472719,DE
-1422472720,1422472727,AT
-1422472728,1422472975,DE
-1422472976,1422472983,AT
-1422472984,1422473231,DE
-1422473232,1422473239,AT
-1422473240,1422473487,DE
-1422473488,1422473495,AT
-1422473496,1422473743,DE
-1422473744,1422473751,AT
-1422473752,1422473999,DE
-1422474000,1422474007,AT
-1422474008,1422474255,DE
-1422474256,1422474263,AT
-1422474264,1422474511,DE
-1422474512,1422474519,AT
-1422474520,1422474767,DE
-1422474768,1422474775,AT
-1422474776,1422475023,DE
-1422475024,1422475031,AT
-1422475032,1422476863,DE
-1422476864,1422476895,GB
-1422476896,1422479615,DE
-1422479616,1422479871,BE
-1422479872,1422483423,DE
-1422483424,1422483439,GB
-1422483440,1422484463,DE
-1422484464,1422484479,GB
-1422484480,1422491647,DE
-1422491648,1422508031,RU
+1422413728,1422491647,DE
+1422491648,1422495615,RU
+1422495616,1422495679,NL
+1422495680,1422508031,RU
1422508032,1422512127,BG
1422512128,1422516223,PL
1422516224,1422520319,BY
@@ -55467,34 +18333,16 @@
1422655488,1422721023,RU
1422721024,1422729215,PL
1422729216,1422737407,NO
-1422737408,1422745599,EU
1422745600,1422753791,EG
1422753792,1422761983,FR
1422761984,1422770175,PL
1422770176,1422786559,GR
1422786560,1422852095,HU
-1422852096,1422856383,EU
-1422856384,1422856447,FR
-1422856448,1422856703,EU
-1422856704,1422856959,FR
-1422856960,1422857087,EU
1422857088,1422857151,FR
-1422857152,1422857215,EU
-1422857216,1422857727,FR
-1422857728,1422857791,EU
-1422857792,1422857855,FR
-1422857856,1422857919,EU
-1422857920,1422858047,FR
-1422858048,1422858111,EU
-1422858112,1422858143,FR
-1422858144,1422858239,EU
-1422858240,1422858495,FR
-1422858496,1422909439,EU
-1422909440,1422909951,NL
-1422909952,1422911231,EU
-1422911232,1422911487,NL
-1422911488,1422916863,EU
-1422916864,1422917631,GB
+1422916608,1422916863,GB
+1422917120,1422917343,GB
+1422917344,1422917375,NL
+1422917376,1422917631,GB
1422917632,1423441919,NO
1423441920,1423704063,SE
1423704064,1423966207,IT
@@ -55504,265 +18352,26 @@
1424286720,1424287743,BG
1424287744,1424359423,IL
1424359424,1424490495,FI
-1424490496,1424523263,ES
+1424490496,1424503711,ES
+1424503712,1424503715,PT
+1424503716,1424523263,ES
1424523264,1424556031,RO
1424556032,1424588799,EG
-1424588800,1424589311,DE
-1424589312,1424589567,FR
-1424589568,1424590719,GB
-1424590720,1424590735,SE
-1424590736,1424590751,GB
-1424590752,1424590767,SE
-1424590768,1424590771,GB
-1424590772,1424590783,SE
-1424590784,1424590847,CH
-1424590848,1424591359,SE
-1424591360,1424591367,GB
-1424591368,1424591406,SE
-1424591407,1424591407,GB
-1424591408,1424591423,SE
-1424591424,1424591439,GB
-1424591440,1424591447,SE
-1424591448,1424591455,GB
-1424591456,1424591463,SE
-1424591464,1424591471,GB
-1424591472,1424591551,SE
-1424591552,1424591615,CZ
-1424591616,1424592639,GB
-1424592640,1424593151,FR
-1424593152,1424593407,NL
-1424593408,1424593663,DE
-1424593664,1424593727,SK
-1424593728,1424593791,HU
-1424593792,1424593919,DE
-1424593920,1424593967,FR
-1424593968,1424593983,GB
-1424593984,1424594047,FR
-1424594048,1424594055,GB
-1424594056,1424594063,IT
-1424594064,1424594103,FR
-1424594104,1424594111,GB
-1424594112,1424594175,FR
-1424594176,1424594431,GB
-1424594432,1424594687,IE
-1424594688,1424595455,GB
-1424595456,1424595527,IT
-1424595528,1424595535,GB
-1424595536,1424595551,IT
-1424595552,1424595559,GB
-1424595560,1424595575,IT
-1424595576,1424595583,GB
-1424595584,1424596479,IT
-1424596480,1424596543,GB
-1424596544,1424596991,FR
-1424596992,1424597255,CZ
-1424597256,1424597263,GB
-1424597264,1424597311,CZ
-1424597312,1424597343,GB
-1424597344,1424597351,CH
-1424597352,1424597375,GB
-1424597376,1424597391,CZ
-1424597392,1424597407,GB
-1424597408,1424597431,CZ
-1424597432,1424597503,GB
-1424597504,1424597759,FR
-1424597760,1424598015,IT
-1424598016,1424599039,GB
-1424599040,1424599279,DK
-1424599280,1424599295,GB
-1424599296,1424599551,DK
-1424599552,1424599815,HU
-1424599816,1424599823,GB
-1424599824,1424599855,HU
-1424599856,1424599871,GB
-1424599872,1424599875,HU
-1424599876,1424599879,GB
-1424599880,1424599887,HU
-1424599888,1424599903,GB
-1424599904,1424599935,HU
-1424599936,1424599999,GB
-1424600000,1424600031,HU
-1424600032,1424600063,GB
-1424600064,1424600319,CH
-1424600320,1424600575,GB
+1424588800,1424592639,GB
+1424592640,1424592895,FR
+1424592896,1424595711,GB
+1424595712,1424595967,IT
+1424595968,1424597069,GB
+1424597070,1424597070,CZ
+1424597071,1424600575,GB
1424600576,1424600831,FR
-1424600832,1424601087,BE
-1424601088,1424601343,GB
-1424601344,1424601367,ES
-1424601368,1424601471,GB
-1424601472,1424601599,ES
-1424601600,1424601855,CH
-1424601856,1424602111,GB
-1424602112,1424602623,DE
-1424602624,1424602735,GB
-1424602736,1424602743,IT
-1424602744,1424602879,GB
+1424600832,1424602879,GB
1424602880,1424603135,US
-1424603136,1424603391,SK
-1424603392,1424603647,DE
-1424603648,1424603903,GB
-1424603904,1424604039,ES
-1424604040,1424604047,GB
-1424604048,1424604095,ES
-1424604096,1424604103,GB
-1424604104,1424604159,ES
-1424604160,1424604543,NL
-1424604544,1424604671,GB
-1424604672,1424604927,EU
-1424604928,1424604959,NL
-1424604960,1424604967,GB
-1424604968,1424605071,NL
-1424605072,1424605079,GB
-1424605080,1424605119,NL
-1424605120,1424605135,GB
-1424605136,1424605183,NL
-1424605184,1424605247,GB
-1424605248,1424605279,NL
-1424605280,1424605439,GB
-1424605440,1424605567,BG
-1424605568,1424605583,GR
-1424605584,1424605599,BE
-1424605600,1424605607,GB
-1424605608,1424605623,BG
-1424605624,1424605631,GB
-1424605632,1424605695,BG
-1424605696,1424605951,NL
-1424605952,1424605959,CH
-1424605960,1424605967,AT
-1424605968,1424605983,GB
-1424605984,1424606023,AT
-1424606024,1424606207,GB
-1424606208,1424606719,IT
-1424606720,1424606975,NL
-1424606976,1424607167,GB
-1424607168,1424607199,SK
-1424607200,1424607215,GB
-1424607216,1424607223,SK
-1424607224,1424607487,GB
-1424607488,1424607871,DE
-1424607872,1424608031,GB
-1424608032,1424608083,FR
-1424608084,1424608087,GB
-1424608088,1424608127,FR
-1424608128,1424608279,GB
-1424608280,1424608383,FR
-1424608384,1424608399,ES
-1424608400,1424608511,FR
-1424608512,1424608559,ES
-1424608560,1424608567,GB
-1424608568,1424608671,ES
-1424608672,1424608691,GB
-1424608692,1424609023,ES
-1424609024,1424609055,GB
-1424609056,1424609151,DE
-1424609152,1424609215,GB
-1424609216,1424609231,DE
-1424609232,1424609247,GB
-1424609248,1424609255,DE
-1424609256,1424609271,GB
-1424609272,1424609279,DE
-1424609280,1424609375,CH
-1424609376,1424609383,GB
-1424609384,1424609395,CH
-1424609396,1424609399,GB
-1424609400,1424609535,CH
-1424609536,1424609543,GB
-1424609544,1424609551,CH
-1424609552,1424609559,GB
-1424609560,1424609719,CH
-1424609720,1424609727,GB
-1424609728,1424609743,CH
-1424609744,1424609759,GB
-1424609760,1424609791,CH
-1424609792,1424610303,GB
-1424610304,1424610559,TZ
-1424610560,1424610815,PL
-1424610816,1424611071,FR
-1424611072,1424611135,BE
-1424611136,1424611175,GB
-1424611176,1424611199,BE
-1424611200,1424611263,GB
-1424611264,1424611271,BE
-1424611272,1424611279,LU
-1424611280,1424611287,BE
-1424611288,1424611295,FR
-1424611296,1424611319,BE
-1424611320,1424611327,GB
-1424611328,1424611583,PL
-1424611584,1424612095,GB
-1424612096,1424612223,CZ
-1424612224,1424612239,GB
-1424612240,1424612319,CZ
-1424612320,1424612607,GB
-1424612608,1424612671,AE
-1424612672,1424612863,GB
-1424612864,1424613119,FR
-1424613120,1424613375,GB
-1424613376,1424613631,ES
-1424613632,1424614143,IT
-1424614144,1424614415,GB
-1424614416,1424614503,IT
-1424614504,1424614511,GB
-1424614512,1424614655,IT
-1424614656,1424614911,FR
-1424614912,1424615167,RO
-1424615168,1424615679,GB
-1424615680,1424615935,IT
-1424615936,1424616191,FR
-1424616192,1424616320,IT
-1424616321,1424616479,GB
-1424616480,1424616483,ES
-1424616484,1424616487,GB
-1424616488,1424616503,ES
-1424616504,1424616511,GB
-1424616512,1424616615,ES
-1424616616,1424616631,GB
-1424616632,1424616655,ES
-1424616656,1424616659,GB
-1424616660,1424616695,ES
-1424616696,1424616703,GB
-1424616704,1424616959,US
-1424616960,1424617215,FR
+1424603136,1424607743,GB
+1424607744,1424607775,DE
+1424607776,1424617215,GB
1424617216,1424617231,IT
-1424617232,1424617247,GB
-1424617248,1424617359,IT
-1424617360,1424617391,GB
-1424617392,1424617395,IT
-1424617396,1424617399,GB
-1424617400,1424617407,IT
-1424617408,1424617423,ES
-1424617424,1424617431,GB
-1424617432,1424617447,IT
-1424617448,1424617455,GB
-1424617456,1424617463,IT
-1424617464,1424617471,GB
-1424617472,1424617727,US
-1424617728,1424617983,GB
-1424617984,1424618031,IT
-1424618032,1424618047,GB
-1424618048,1424618111,IT
-1424618112,1424618143,GB
-1424618144,1424618191,IT
-1424618192,1424618207,GB
-1424618208,1424618239,IT
-1424618240,1424618495,NL
-1424618496,1424618751,GB
-1424618752,1424618927,FR
-1424618928,1424618943,IT
-1424618944,1424618991,FR
-1424618992,1424619007,GB
-1424619008,1424619215,IT
-1424619216,1424619223,GB
-1424619224,1424619775,IT
-1424619776,1424619807,BE
-1424619808,1424619839,GB
-1424619840,1424619855,BE
-1424619856,1424619863,GB
-1424619864,1424619915,BE
-1424619916,1424619919,GB
-1424619920,1424620031,BE
-1424620032,1424621311,GB
-1424621312,1424621567,IT
+1424617232,1424621567,GB
1424621568,1424625663,PL
1424625664,1424629759,GB
1424629760,1424633855,PL
@@ -55777,65 +18386,27 @@
1424713728,1424719871,SA
1424719872,1424722431,IE
1424722432,1424723199,CZ
-1424723200,1424724735,DE
-1424724736,1424724991,IE
+1424723200,1424724991,DE
1424724992,1424727039,GB
-1424727040,1424727295,IE
-1424727296,1424727551,SL
-1424727552,1424728063,PL
-1424728064,1424728319,IE
+1424727040,1424728319,DE
1424728320,1424729855,FR
-1424729856,1424730367,DE
-1424730368,1424730623,ES
-1424730624,1424730879,GB
+1424729856,1424730879,DE
1424730880,1424733183,IE
1424733184,1424733951,NL
1424733952,1424735103,SE
-1424735104,1424736127,DE
-1424736128,1424736383,AT
-1424736384,1424736895,FR
-1424736896,1424737151,DE
-1424737152,1424737279,GB
-1424737280,1424737407,DK
-1424737408,1424737535,AT
-1424737536,1424737671,DE
-1424737672,1424737751,GB
-1424737752,1424738815,DE
+1424735104,1424738815,DE
1424738816,1424739583,SE
-1424739584,1424739839,GB
-1424739840,1424740511,DE
-1424740512,1424740551,GB
-1424740552,1424741119,DE
-1424741120,1424741375,IE
-1424741376,1424742911,DE
-1424742912,1424743167,IE
-1424743168,1424743423,IT
-1424743424,1424743935,DE
-1424743936,1424744191,GB
-1424744192,1424744703,DE
-1424744704,1424744959,GB
-1424744960,1424746495,DE
+1424739584,1424746495,DE
1424746496,1424749055,IE
-1424749056,1424749311,SL
-1424749312,1424750079,DE
-1424750080,1424750335,FR
-1424750336,1424750591,GB
-1424750592,1424750847,FR
-1424750848,1424751103,IE
-1424751104,1424751359,DE
-1424751360,1424751615,AT
-1424751616,1424752127,IE
-1424752128,1424752383,DE
-1424752384,1424752639,NL
+1424749056,1424752639,DE
1424752640,1424785407,HU
-1424785408,1424811775,ES
-1424811776,1424812031,GB
-1424812032,1424818175,ES
+1424785408,1424818175,ES
1424818176,1424850943,RU
1424850944,1424883711,LV
1424883712,1424916479,DK
1424916480,1424949247,BG
-1424949248,1424982015,RO
+1424949248,1424965631,RO
+1424965632,1424982015,FR
1424982016,1425014783,FI
1425014784,1425031167,LT
1425031168,1425047551,FI
@@ -55861,84 +18432,43 @@
1425375232,1425391615,DE
1425391616,1425407999,LV
1425408000,1425424383,NL
-1425424384,1425424463,A2
-1425424464,1425424895,DE
-1425424896,1425425151,NE
-1425425152,1425426303,DE
-1425426304,1425426319,IR
-1425426320,1425426343,DE
-1425426344,1425426352,IR
-1425426353,1425426431,DE
+1425424384,1425426431,DE
1425426432,1425428479,KW
1425428480,1425430527,GB
1425430528,1425432575,SE
1425432576,1425434623,HR
1425434624,1425436671,FR
1425436672,1425438719,GB
-1425438720,1425439271,DE
-1425439272,1425439279,CZ
-1425439280,1425439399,DE
-1425439400,1425439407,CZ
-1425439408,1425439535,DE
-1425439536,1425439543,CZ
-1425439544,1425439711,DE
-1425439712,1425439727,CZ
-1425439728,1425440767,DE
+1425438720,1425440767,DE
1425440768,1425442815,SE
1425442816,1425444863,GB
-1425444864,1425445126,IT
-1425445127,1425445127,FR
-1425445128,1425445139,IT
-1425445140,1425445141,GB
-1425445142,1425446911,IT
+1425444864,1425446911,IT
1425446912,1425448959,GB
1425448960,1425451007,CZ
1425451008,1425459199,GB
-1425459200,1425460735,IM
-1425460736,1425460927,GB
-1425460928,1425460967,IM
-1425460968,1425460975,GB
-1425460976,1425460983,IM
-1425460984,1425461247,GB
+1425459200,1425461247,IM
1425461248,1425463295,ES
1425463296,1425467135,FR
1425467136,1425467391,ES
1425467392,1425469439,CH
1425469440,1425471487,DK
-1425471488,1425471783,DE
-1425471784,1425471791,GB
-1425471792,1425471799,CH
-1425471800,1425471815,DE
-1425471816,1425471823,CH
-1425471824,1425471831,GB
-1425471832,1425471863,DE
-1425471864,1425471871,GB
-1425471872,1425471887,IT
-1425471888,1425471895,GB
-1425471896,1425471919,DE
-1425471920,1425471943,GB
-1425471944,1425471967,DE
-1425471968,1425471975,CH
-1425471976,1425472007,DE
-1425472008,1425472011,GB
-1425472012,1425472015,ES
-1425472016,1425472035,DE
-1425472036,1425472039,GB
-1425472040,1425473535,DE
-1425473536,1425485311,RO
-1425485312,1425485823,US
-1425485824,1425506303,RO
+1425471488,1425473535,DE
+1425473536,1425479679,RO
+1425479680,1425480703,MD
+1425480704,1425484799,RO
+1425484800,1425485311,MD
+1425485312,1425489407,RO
+1425489408,1425489663,NL
+1425489664,1425506303,RO
1425506304,1425522687,NO
1425522688,1425539071,IT
-1425539072,1425712895,FI
-1425712896,1425713151,AX
-1425713152,1425715071,FI
-1425715072,1425715199,AX
-1425715200,1425715967,FI
-1425715968,1425716223,AX
-1425716224,1425801215,FI
-1425801216,1425817599,BG
-1425817600,1425833983,DE
+1425539072,1425801215,FI
+1425801216,1425813759,BG
+1425813760,1425814015,MK
+1425814016,1425814271,BG
+1425814272,1425814527,MK
+1425814528,1425817599,BG
+1425820160,1425820415,DE
1425833984,1425850367,RU
1425850368,1425866751,GB
1425866752,1425883135,CH
@@ -55946,286 +18476,45 @@
1425899520,1425915903,IT
1425915904,1425932287,FI
1425932288,1425948671,GR
-1425948672,1425949183,DE
-1425949184,1425949191,NL
-1425949192,1425965055,DE
-1425965056,1425965100,ES
-1425965101,1425965112,FR
-1425965113,1425965116,ZA
-1425965117,1425965120,A2
-1425965121,1425965182,IT
-1425965183,1425965183,EU
-1425965184,1425965503,IT
-1425965504,1425965567,FR
-1425965568,1425965568,EU
-1425965569,1425965572,NG
-1425965573,1425965576,US
-1425965577,1425965580,FR
-1425965581,1425965584,BJ
-1425965585,1425965588,ES
-1425965589,1425965592,EU
-1425965593,1425965631,FR
-1425965632,1425965823,A2
-1425965824,1425965952,EU
-1425965953,1425966079,A2
-1425966080,1425966080,EU
-1425966081,1425966088,DE
-1425966089,1425966104,EU
-1425966105,1425966128,DE
-1425966129,1425966144,EU
-1425966145,1425966152,DE
-1425966153,1425966208,EU
-1425966209,1425966224,DE
-1425966225,1425966239,EU
-1425966240,1425966271,IT
-1425966272,1425966335,DE
-1425966336,1425966336,EU
-1425966337,1425966340,IT
-1425966341,1425966344,EU
-1425966345,1425966392,IT
-1425966393,1425966400,EU
-1425966401,1425966416,IT
-1425966417,1425966463,EU
-1425966464,1425966527,IT
-1425966528,1425966591,A2
-1425966592,1425966592,EU
-1425966593,1425966706,IT
-1425966707,1425966720,EU
-1425966721,1425966728,BJ
-1425966729,1425966735,EU
-1425966736,1425966751,BJ
-1425966752,1425966815,EU
-1425966816,1425966847,BJ
-1425966848,1425966852,EU
-1425966853,1425966896,DE
-1425966897,1425966910,IT
-1425966911,1425966911,EU
-1425966912,1425966975,DE
-1425966976,1425967039,IT
-1425967040,1425967103,DE
-1425967104,1425967104,EU
-1425967105,1425967120,TR
-1425967121,1425967359,IT
-1425967360,1425967615,A2
-1425967616,1425967807,IT
-1425967808,1425967871,A2
-1425967872,1425968383,DZ
-1425968384,1425968638,GB
-1425968639,1425968703,EU
-1425968704,1425968831,IT
-1425968832,1425968895,A2
-1425968896,1425969023,IT
-1425969024,1425969087,A2
-1425969088,1425969151,IT
-1425969152,1425969199,EU
-1425969200,1425969343,IT
-1425969344,1425969407,A2
-1425969408,1425969471,IT
-1425969472,1425969599,A2
-1425969600,1425969663,IT
-1425969664,1425969727,FR
-1425969728,1425969791,IT
-1425969792,1425969855,FR
-1425969856,1425969983,A2
-1425969984,1425970047,IT
-1425970048,1425970111,DE
-1425970112,1425970175,A2
+1425948672,1425965055,DE
+1425965056,1425970175,IT
1425970176,1425970431,FR
-1425970432,1425970495,EU
-1425970496,1425970687,IT
-1425970688,1425970688,EU
-1425970689,1425970751,DE
-1425970752,1425970815,EU
-1425970816,1425970943,A2
-1425970944,1425971007,IT
-1425971008,1425971071,NL
-1425971072,1425971199,A2
-1425971200,1425971231,NL
-1425971232,1425971263,DE
-1425971264,1425971455,NL
-1425971456,1425971519,A2
-1425971520,1425971583,IT
-1425971584,1425971647,A2
-1425971648,1425971711,IT
-1425971712,1425971727,AE
-1425971728,1425971743,US
-1425971744,1425971775,EU
-1425971776,1425971839,DE
-1425971840,1425971903,SE
-1425971904,1425972223,A2
-1425972224,1425972351,EU
-1425972352,1425972415,A2
-1425972416,1425972479,IT
-1425972480,1425972607,EU
-1425972608,1425972671,A2
-1425972672,1425972735,IT
-1425972736,1425972863,EU
-1425972864,1425972991,A2
-1425972992,1425973119,EU
-1425973120,1425973183,A2
-1425973184,1425973247,IT
-1425973248,1425973248,EU
-1425973249,1425973260,PL
-1425973261,1425973264,EU
-1425973265,1425973268,DE
-1425973269,1425973272,FR
-1425973273,1425973276,PL
-1425973277,1425973280,EU
-1425973281,1425973300,PL
-1425973301,1425973308,DE
-1425973309,1425973332,PL
-1425973333,1425973336,DE
-1425973337,1425973439,EU
-1425973440,1425973503,PL
-1425973504,1425973759,IT
-1425973760,1425973823,PL
-1425973824,1425973887,IT
-1425973888,1425974143,A2
-1425974144,1425974207,IT
-1425974208,1425974271,A2
-1425974272,1425974463,EU
-1425974464,1425974527,IT
-1425974528,1425974719,EU
-1425974720,1425974783,A2
-1425974784,1425974847,IT
-1425974848,1425974911,SE
-1425974912,1425974975,A2
-1425974976,1425975039,IT
-1425975040,1425975103,A2
-1425975104,1425975167,IT
-1425975168,1425975231,A2
-1425975232,1425975295,IT
-1425975296,1425975296,EU
-1425975297,1425975360,PE
-1425975361,1425975423,A2
-1425975424,1425975551,IT
-1425975552,1425975679,FR
-1425975680,1425975743,IT
-1425975744,1425975807,A2
-1425975808,1425976063,IT
-1425976064,1425976064,EU
-1425976065,1425976126,FR
-1425976127,1425976127,EU
-1425976128,1425976191,IT
-1425976192,1425976255,FR
-1425976256,1425976319,IT
-1425976320,1425976320,EU
-1425976321,1425976328,FR
-1425976329,1425976336,GB
-1425976337,1425976344,EU
-1425976345,1425976352,FR
-1425976353,1425976368,GB
-1425976369,1425976372,FR
-1425976373,1425976380,GB
-1425976381,1425976388,FR
-1425976389,1425976392,IT
-1425976393,1425976432,FR
-1425976433,1425976440,GB
-1425976441,1425976448,FR
-1425976449,1425976464,GB
-1425976465,1425976575,EU
-1425976576,1425976830,GB
-1425976831,1425976831,EU
-1425976832,1425977342,GB
-1425977343,1425977343,EU
-1425977344,1425977855,IT
-1425977856,1425978111,DE
-1425978112,1425978367,BG
-1425978368,1425978368,EU
-1425978369,1425978388,IT
-1425978389,1425978389,EU
-1425978390,1425978495,IT
-1425978496,1425978559,A2
-1425978560,1425978624,EU
-1425978625,1425978751,IT
-1425978752,1425978815,EU
-1425978816,1425978819,IT
-1425978820,1425979071,EU
-1425979072,1425979135,IT
-1425979136,1425979327,EU
-1425979328,1425979391,IT
-1425979392,1425979392,EU
-1425979393,1425979400,DE
-1425979401,1425979412,EU
-1425979413,1425979416,DE
-1425979417,1425979436,EU
-1425979437,1425979456,DE
-1425979457,1425979460,EU
-1425979461,1425979464,DE
-1425979465,1425979472,EU
-1425979473,1425979476,DE
-1425979477,1425979480,EU
-1425979481,1425979488,DE
-1425979489,1425979503,EU
-1425979504,1425979519,IT
-1425979520,1425979583,DE
-1425979584,1425979647,A2
-1425979648,1425979652,EU
-1425979653,1425979656,AE
-1425979657,1425979660,EU
-1425979661,1425979692,AE
-1425979693,1425979704,EU
-1425979705,1425979708,AE
-1425979709,1425979711,EU
-1425979712,1425979775,DE
-1425979776,1425979839,US
-1425979840,1425979903,IT
-1425979904,1425979904,EU
-1425979905,1425979968,AE
-1425979969,1425979976,EU
-1425979977,1425979984,FR
-1425979985,1425979998,IT
-1425979999,1425979999,EU
-1425980000,1425980031,US
-1425980032,1425980095,DE
-1425980096,1425980159,AE
-1425980160,1425980287,IT
-1425980288,1425980351,A2
-1425980352,1425980415,IT
+1425970432,1425980415,IT
1425980416,1425980671,IQ
-1425980672,1425981439,A2
+1425980672,1425981439,IT
1425981440,1425997823,RU
1425997824,1426014207,MT
1426014208,1426030591,DK
1426030592,1426046975,BH
1426046976,1426063359,SI
-1426063360,1426587647,CH
+1426063360,1426094335,CH
+1426094336,1426094591,DE
+1426094592,1426112511,CH
+1426112512,1426112767,DE
+1426112768,1426118271,CH
+1426118272,1426118399,DE
+1426118400,1426168575,CH
+1426168576,1426168831,DE
+1426168832,1426175999,CH
+1426176000,1426176255,DE
+1426176256,1426587647,CH
1426587648,1426604031,SE
1426604032,1426620415,DE
1426636800,1426653183,GB
1426653184,1426669567,RO
1426669568,1426685951,IR
1426685952,1426702335,TJ
-1426702336,1426703103,LV
-1426703104,1426703167,RU
-1426703168,1426703214,LV
-1426703215,1426703217,RU
-1426703218,1426716159,LV
-1426716160,1426716415,RU
-1426716416,1426718719,LV
+1426702336,1426718719,LV
1426718720,1426731007,SI
1426731008,1426735103,HR
1426735104,1426751487,BE
1426751488,1426767871,FR
-1426767872,1426778991,DE
-1426778992,1426778999,IT
-1426779000,1426784255,DE
+1426767872,1426784255,DE
1426784256,1426800639,SE
1426800640,1426817023,PL
1426817024,1426833407,BG
1426833408,1426849791,SE
-1426849792,1426851519,NL
-1426851520,1426851583,PA
-1426851584,1426852352,NL
-1426852353,1426852359,RU
-1426852360,1426852367,SE
-1426852368,1426852375,NL
-1426852376,1426852383,US
-1426852384,1426857472,NL
-1426857473,1426857500,ES
-1426857501,1426864511,NL
-1426864512,1426864639,PA
-1426864640,1426866175,NL
+1426849792,1426866175,NL
1426866176,1426882559,GB
1426882560,1426898943,FR
1426898944,1426915327,RU
@@ -56234,2240 +18523,61 @@
1426948096,1426964479,DE
1426964480,1426967287,GB
1426967288,1426967295,ES
-1426967296,1426967455,GB
-1426967456,1426967463,ES
-1426967464,1426967567,GB
-1426967568,1426967575,ES
-1426967576,1426967671,GB
-1426967672,1426967679,ES
-1426967680,1426968343,GB
-1426968344,1426968351,ES
-1426968352,1426969135,GB
-1426969136,1426969151,ES
-1426969152,1426971855,GB
-1426971856,1426971863,ES
-1426971864,1426972319,GB
-1426972320,1426972326,FR
-1426972327,1426973335,GB
-1426973336,1426973343,ES
-1426973344,1426976031,GB
-1426976032,1426976047,ES
-1426976048,1426976111,GB
-1426976112,1426976119,ES
-1426976120,1426977663,GB
-1426977664,1426977671,ES
-1426977672,1426978999,GB
-1426979000,1426979007,ES
-1426979008,1426980863,GB
+1426967296,1426980863,GB
1426980864,1426997247,BG
1426997248,1427013631,PL
1427013632,1427030015,FR
-1427030016,1427031679,DE
-1427031680,1427031743,AT
-1427031744,1427031807,DE
-1427031808,1427032063,AT
-1427032064,1427032143,DE
-1427032144,1427032151,TW
-1427032152,1427032183,DE
-1427032184,1427032191,PL
-1427032192,1427032223,DE
-1427032224,1427032231,GR
-1427032232,1427032735,DE
+1427030016,1427032143,DE
+1427032144,1427032159,TW
+1427032160,1427032735,DE
1427032736,1427032743,AT
1427032744,1427032959,DE
1427032960,1427032967,NL
1427032968,1427033247,DE
1427033248,1427033263,TW
-1427033264,1427035391,DE
-1427035392,1427035519,GB
-1427035520,1427046399,DE
+1427033264,1427046399,DE
1427046400,1427062783,IR
1427062784,1427095551,RU
1427095552,1427111935,LV
1427111936,1427177471,DE
1427177472,1427220556,NL
1427220557,1427220557,KG
-1427220558,1427227135,NL
-1427227136,1427227647,US
-1427227648,1427227967,NL
-1427227968,1427227975,GB
-1427227976,1427227983,DE
-1427227984,1427227991,IT
-1427227992,1427227999,ES
-1427228000,1427228007,PL
-1427228008,1427228015,RU
-1427228016,1427228023,FR
-1427228024,1427236631,NL
-1427236632,1427236633,US
-1427236634,1427243007,NL
+1427220558,1427243007,NL
1427243008,1427308543,IT
-1427308544,1427364571,NO
-1427364572,1427364575,SE
-1427364576,1427374079,NO
+1427308544,1427374079,NO
1427374080,1427439615,IT
1427439616,1427505151,RU
1427505152,1427570687,DE
1427570688,1427636223,FI
1427636224,1427668991,DK
1427668992,1427701759,SE
-1427701760,1427705091,DE
-1427705092,1427705094,US
-1427705095,1427705096,IN
-1427705097,1427705099,US
-1427705100,1427705100,DE
-1427705101,1427705101,IN
-1427705102,1427705102,DE
-1427705103,1427705109,IN
-1427705110,1427705111,DE
-1427705112,1427705115,US
-1427705116,1427705116,IN
-1427705117,1427705117,DE
-1427705118,1427705118,BG
-1427705119,1427705143,CA
-1427705144,1427705144,DE
-1427705145,1427705146,US
-1427705147,1427705147,UA
-1427705148,1427705148,US
-1427705149,1427705149,DE
-1427705150,1427705150,CA
-1427705151,1427705155,DE
-1427705156,1427705156,GR
-1427705157,1427705157,DE
-1427705158,1427705158,RO
-1427705159,1427705159,BR
-1427705160,1427705160,PT
-1427705161,1427705161,IN
-1427705162,1427705163,DE
-1427705164,1427705164,MX
-1427705165,1427705166,AT
-1427705167,1427705175,DE
-1427705176,1427705177,BR
-1427705178,1427705178,DE
-1427705179,1427705179,PK
-1427705180,1427705180,MX
-1427705181,1427705183,BR
-1427705184,1427705184,DE
-1427705185,1427705186,PK
-1427705187,1427705187,LT
-1427705188,1427705193,DE
-1427705194,1427705195,IR
-1427705196,1427705196,LT
-1427705197,1427705198,DE
-1427705199,1427705199,EG
-1427705200,1427705200,BR
-1427705201,1427705202,DE
-1427705203,1427705203,US
-1427705204,1427705204,PL
-1427705205,1427705205,DK
-1427705206,1427705210,DE
-1427705211,1427705211,IN
-1427705212,1427705225,DE
-1427705226,1427705228,US
-1427705229,1427705229,PK
-1427705230,1427705237,DE
-1427705238,1427705242,US
-1427705243,1427705243,DE
-1427705244,1427705245,US
-1427705246,1427705250,LT
-1427705251,1427705254,DE
-1427705255,1427705255,TR
-1427705256,1427705256,DE
-1427705257,1427705257,TR
-1427705258,1427705258,DE
-1427705259,1427705260,TR
-1427705261,1427705263,US
-1427705264,1427705266,DE
-1427705267,1427705267,US
-1427705268,1427705268,DE
-1427705269,1427705269,US
-1427705270,1427705277,DE
-1427705278,1427705278,US
-1427705279,1427705290,DE
-1427705291,1427705291,LT
-1427705292,1427705297,DE
-1427705298,1427705298,UA
-1427705299,1427705299,CO
-1427705300,1427705301,DE
-1427705302,1427705302,PK
-1427705303,1427705303,DE
-1427705304,1427705304,GR
-1427705305,1427705307,DE
-1427705308,1427705309,LT
-1427705310,1427705310,DE
-1427705311,1427705311,SG
-1427705312,1427705314,DE
-1427705315,1427705315,NL
-1427705316,1427705316,AR
-1427705317,1427705321,DE
-1427705322,1427705323,PT
-1427705324,1427705328,DE
-1427705329,1427705331,US
-1427705332,1427705334,DE
-1427705335,1427705335,IT
-1427705336,1427705336,DE
-1427705337,1427705337,BR
-1427705338,1427705338,DE
-1427705339,1427705339,GB
-1427705340,1427705342,FR
-1427705343,1427705360,DE
-1427705361,1427705361,NO
-1427705362,1427705364,DE
-1427705365,1427705365,AT
-1427705366,1427705373,DE
-1427705374,1427705374,NO
-1427705375,1427705375,DE
-1427705376,1427705386,US
-1427705387,1427705394,UG
-1427705395,1427705396,DE
-1427705397,1427705397,FI
-1427705398,1427705403,DE
-1427705404,1427705406,CA
-1427705407,1427705491,DE
-1427705492,1427705492,US
-1427705493,1427705528,DE
-1427705529,1427705529,US
-1427705530,1427705543,DE
-1427705544,1427705544,US
-1427705545,1427705548,DE
-1427705549,1427705549,MD
-1427705550,1427705550,RO
-1427705551,1427705555,DE
-1427705556,1427705556,UA
-1427705557,1427705557,DE
-1427705558,1427705558,BR
-1427705559,1427705559,DE
-1427705560,1427705560,BR
-1427705561,1427705561,BE
-1427705562,1427705562,DE
-1427705563,1427705563,BR
-1427705564,1427705564,UA
-1427705565,1427705566,DE
-1427705567,1427705567,UA
-1427705568,1427705569,DE
-1427705570,1427705570,US
-1427705571,1427705571,DE
-1427705572,1427705572,TR
-1427705573,1427705573,BR
-1427705574,1427705574,GR
-1427705575,1427705575,TR
-1427705576,1427705576,UA
-1427705577,1427705578,NL
-1427705579,1427705579,ZA
-1427705580,1427705582,DE
-1427705583,1427705583,KR
-1427705584,1427705584,NL
-1427705585,1427705586,DE
-1427705587,1427705587,GR
-1427705588,1427705588,DE
-1427705589,1427705589,BR
-1427705590,1427705590,LK
-1427705591,1427705592,DE
-1427705593,1427705593,RU
-1427705594,1427705594,US
-1427705595,1427705595,DE
-1427705596,1427705596,CH
-1427705597,1427705604,DE
-1427705605,1427705605,UY
-1427705606,1427705614,DE
-1427705615,1427705615,TR
-1427705616,1427705616,GR
-1427705617,1427705618,UY
-1427705619,1427705619,UA
-1427705620,1427705620,GR
-1427705621,1427705625,DE
-1427705626,1427705627,CO
-1427705628,1427705629,DE
-1427705630,1427705630,CY
-1427705631,1427705631,US
-1427705632,1427705632,DE
-1427705633,1427705635,UA
-1427705636,1427705638,DE
-1427705639,1427705639,TN
-1427705640,1427705642,DE
-1427705643,1427705643,UA
-1427705644,1427705644,US
-1427705645,1427705649,DE
-1427705650,1427705650,AE
-1427705651,1427705654,DE
-1427705655,1427705656,AE
-1427705657,1427705657,DE
-1427705658,1427705658,BR
-1427705659,1427705660,DE
-1427705661,1427705661,BE
-1427705662,1427705669,DE
-1427705670,1427705672,CA
-1427705673,1427705673,DE
-1427705674,1427705677,CA
-1427705678,1427705678,DE
-1427705679,1427705679,CA
-1427705680,1427705680,DE
-1427705681,1427705681,PK
-1427705682,1427705683,AU
-1427705684,1427705684,PK
-1427705685,1427705685,BR
-1427705686,1427705690,US
-1427705691,1427705706,CA
-1427705707,1427705722,US
-1427705723,1427705724,DE
-1427705725,1427705725,US
-1427705726,1427705731,DE
-1427705732,1427705732,PK
-1427705733,1427705733,BD
-1427705734,1427705734,AT
-1427705735,1427705735,GB
-1427705736,1427705746,DE
-1427705747,1427705747,TR
-1427705748,1427705748,PT
-1427705749,1427705749,CA
-1427705750,1427705750,CY
-1427705751,1427705751,DE
-1427705752,1427705752,TR
-1427705753,1427705756,DE
-1427705757,1427705759,GB
-1427705760,1427705762,DE
-1427705763,1427705763,UA
-1427705764,1427705765,DE
-1427705766,1427705766,LT
-1427705767,1427705767,FR
-1427705768,1427705769,DE
-1427705770,1427705770,AU
-1427705771,1427705771,FR
-1427705772,1427705773,DE
-1427705774,1427705774,PT
-1427705775,1427705777,DE
-1427705778,1427705778,TR
-1427705779,1427705782,DE
-1427705783,1427705784,LT
-1427705785,1427705785,BR
-1427705786,1427705786,UA
-1427705787,1427705788,DE
-1427705789,1427705789,AR
-1427705790,1427705790,CR
-1427705791,1427705795,DE
-1427705796,1427705796,PT
-1427705797,1427705797,UA
-1427705798,1427705801,DE
-1427705802,1427705802,RU
-1427705803,1427705804,GR
-1427705805,1427705805,BD
-1427705806,1427705806,DE
-1427705807,1427705807,AR
-1427705808,1427705808,DE
-1427705809,1427705809,BR
-1427705810,1427705810,GR
-1427705811,1427705811,US
-1427705812,1427705812,DE
-1427705813,1427705813,MD
-1427705814,1427705814,DE
-1427705815,1427705815,LT
-1427705816,1427705816,SE
-1427705817,1427705818,US
-1427705819,1427705830,DE
-1427705831,1427705831,US
-1427705832,1427705832,MD
-1427705833,1427705833,DE
-1427705834,1427705834,AE
-1427705835,1427705835,GR
-1427705836,1427705836,DE
-1427705837,1427705837,PT
-1427705838,1427705840,NL
-1427705841,1427705841,CY
-1427705842,1427705842,AT
-1427705843,1427705843,GE
-1427705844,1427705845,DE
-1427705846,1427705846,RU
-1427705847,1427705847,UA
-1427705848,1427705848,DE
-1427705849,1427705849,DK
-1427705850,1427705850,TR
-1427705851,1427705851,UA
-1427705852,1427706371,DE
-1427706372,1427706378,US
-1427706379,1427706380,BR
-1427706381,1427706384,US
-1427706385,1427706386,DE
-1427706387,1427706392,LT
-1427706393,1427706396,DE
-1427706397,1427706404,US
-1427706405,1427706407,DE
-1427706408,1427706408,BR
-1427706409,1427706409,IN
-1427706410,1427706410,BR
-1427706411,1427706411,IN
-1427706412,1427706412,BR
-1427706413,1427706413,DE
-1427706414,1427706416,IN
-1427706417,1427706418,DE
-1427706419,1427706421,IN
-1427706422,1427706422,PA
-1427706423,1427706426,IN
-1427706427,1427706427,DE
-1427706428,1427706429,IN
-1427706430,1427706436,DE
-1427706437,1427706438,BR
-1427706439,1427706446,DE
-1427706447,1427706448,US
-1427706449,1427706449,DE
-1427706450,1427706478,US
-1427706479,1427706479,DE
-1427706480,1427706484,BR
-1427706485,1427706492,US
-1427706493,1427706563,DE
-1427706564,1427706567,CA
-1427706568,1427706573,DE
-1427706574,1427706574,CA
-1427706575,1427706577,DE
-1427706578,1427706580,CA
-1427706581,1427706581,NO
-1427706582,1427706582,US
-1427706583,1427706583,NO
-1427706584,1427706586,DE
-1427706587,1427706588,LT
-1427706589,1427706589,IN
-1427706590,1427706597,DE
-1427706598,1427706598,IN
-1427706599,1427706599,DE
-1427706600,1427706600,IN
-1427706601,1427706601,BR
-1427706602,1427706603,DE
-1427706604,1427706605,BR
-1427706606,1427706607,DE
-1427706608,1427706612,BR
-1427706613,1427706617,IN
-1427706618,1427706621,US
-1427706622,1427706757,DE
-1427706758,1427706760,MD
-1427706761,1427706763,TR
-1427706764,1427706764,UA
-1427706765,1427706765,IN
-1427706766,1427706766,ZA
-1427706767,1427706769,AE
-1427706770,1427706770,UA
-1427706771,1427706772,DE
-1427706773,1427706773,UA
-1427706774,1427706774,DE
-1427706775,1427706775,UG
-1427706776,1427706776,BR
-1427706777,1427706777,GR
-1427706778,1427706778,ZA
-1427706779,1427706781,GB
-1427706782,1427706782,PK
-1427706783,1427706784,DE
-1427706785,1427706785,ZA
-1427706786,1427706786,TR
-1427706787,1427706787,DE
-1427706788,1427706789,TR
-1427706790,1427706792,DE
-1427706793,1427706795,NL
-1427706796,1427706796,HU
-1427706797,1427706798,NL
-1427706799,1427706799,RO
-1427706800,1427706800,UA
-1427706801,1427706801,DE
-1427706802,1427706802,ES
-1427706803,1427706803,DE
-1427706804,1427706806,AR
-1427706807,1427706808,GR
-1427706809,1427706810,DE
-1427706811,1427706811,NL
-1427706812,1427706813,CA
-1427706814,1427706814,FR
-1427706815,1427706815,DE
-1427706816,1427706823,US
-1427706824,1427706824,CA
-1427706825,1427706825,DE
-1427706826,1427706828,LT
-1427706829,1427706851,DE
-1427706852,1427706853,IN
-1427706854,1427706855,DE
-1427706856,1427706856,US
-1427706857,1427706859,BR
-1427706860,1427706863,CA
-1427706864,1427706872,US
-1427706873,1427706873,CA
-1427706874,1427706874,US
-1427706875,1427706875,CA
-1427706876,1427706878,US
-1427706879,1427706879,BR
-1427706880,1427707391,DE
-1427707392,1427707392,US
-1427707393,1427707396,DE
-1427707397,1427707397,RU
-1427707398,1427707775,DE
-1427707776,1427707777,IL
-1427707778,1427707778,BE
-1427707779,1427707779,PL
-1427707780,1427707782,TR
-1427707783,1427707783,BG
-1427707784,1427707785,UA
-1427707786,1427707788,DE
-1427707789,1427707789,HR
-1427707790,1427707791,LV
-1427707792,1427707794,DE
-1427707795,1427707795,CH
-1427707796,1427707798,CA
-1427707799,1427707800,DE
-1427707801,1427707803,TR
-1427707804,1427707804,DE
-1427707805,1427707805,BE
-1427707806,1427708672,DE
-1427708673,1427708673,TR
-1427708674,1427708674,DE
-1427708675,1427708675,RU
-1427708676,1427708676,NL
-1427708677,1427708677,IL
-1427708678,1427708678,ES
-1427708679,1427708680,GB
-1427708681,1427708681,ES
-1427708682,1427708683,DE
-1427708684,1427708684,NL
-1427708685,1427708686,DE
-1427708687,1427708687,TR
-1427708688,1427708691,DE
-1427708692,1427708692,TR
-1427708693,1427708693,BD
-1427708694,1427708694,DE
-1427708695,1427708695,NL
-1427708696,1427708696,GR
-1427708697,1427708699,BZ
-1427708700,1427708700,PK
-1427708701,1427708701,DE
-1427708702,1427708702,FR
-1427708703,1427708703,GR
-1427708704,1427708706,DE
-1427708707,1427708707,LT
-1427708708,1427708708,UA
-1427708709,1427708709,DE
-1427708710,1427708710,BD
-1427708711,1427708711,ES
-1427708712,1427708712,AT
-1427708713,1427708713,LT
-1427708714,1427708714,DE
-1427708715,1427708716,LT
-1427708717,1427708718,DE
-1427708719,1427708719,AL
-1427708720,1427708720,PK
-1427708721,1427708721,CH
-1427708722,1427708722,KZ
-1427708723,1427708723,ZA
-1427708724,1427708724,NL
-1427708725,1427708726,TR
-1427708727,1427708727,DE
-1427708728,1427708730,IT
-1427708731,1427708731,GR
-1427708732,1427708732,DE
-1427708733,1427708733,US
-1427708734,1427708740,DE
-1427708741,1427708741,BE
-1427708742,1427708742,DE
-1427708743,1427708743,UA
-1427708744,1427708744,DE
-1427708745,1427708745,NL
-1427708746,1427708749,DE
-1427708750,1427708750,US
-1427708751,1427708751,RO
-1427708752,1427708752,DE
-1427708753,1427708753,BD
-1427708754,1427708754,IT
-1427708755,1427708760,DE
-1427708761,1427708761,ES
-1427708762,1427708764,DE
-1427708765,1427708765,UA
-1427708766,1427708766,RU
-1427708767,1427708771,DE
-1427708772,1427708772,IE
-1427708773,1427708773,RU
-1427708774,1427708775,GB
-1427708776,1427708777,UA
-1427708778,1427708781,DE
-1427708782,1427708782,SI
-1427708783,1427708783,US
-1427708784,1427708784,AT
-1427708785,1427708785,DE
-1427708786,1427708786,IT
-1427708787,1427708787,MD
-1427708788,1427708790,HR
-1427708791,1427708802,DE
-1427708803,1427708804,MD
-1427708805,1427708805,LK
-1427708806,1427708807,US
-1427708808,1427708808,NO
-1427708809,1427708809,UA
-1427708810,1427708810,RO
-1427708811,1427708812,DE
-1427708813,1427708813,RO
-1427708814,1427708814,MD
-1427708815,1427708817,DE
-1427708818,1427708818,PH
-1427708819,1427708819,IT
-1427708820,1427708822,NL
-1427708823,1427708825,DE
-1427708826,1427708827,TR
-1427708828,1427708828,PK
-1427708829,1427708829,AT
-1427708830,1427708833,DE
-1427708834,1427708834,CY
-1427708835,1427708835,TW
-1427708836,1427708842,DE
-1427708843,1427708843,EG
-1427708844,1427708844,DE
-1427708845,1427708845,AT
-1427708846,1427708846,TR
-1427708847,1427708847,RU
-1427708848,1427708850,IN
-1427708851,1427708851,GR
-1427708852,1427708852,KZ
-1427708853,1427708853,RO
-1427708854,1427708854,DE
-1427708855,1427708856,UA
-1427708857,1427708858,CL
-1427708859,1427708859,DE
-1427708860,1427708860,BR
-1427708861,1427708861,TN
-1427708862,1427708862,UA
-1427708863,1427708865,DE
-1427708866,1427708866,TR
-1427708867,1427708871,DE
-1427708872,1427708872,DK
-1427708873,1427708873,DE
-1427708874,1427708874,TR
-1427708875,1427708875,DE
-1427708876,1427708876,HR
-1427708877,1427708877,DE
-1427708878,1427708880,TR
-1427708881,1427708881,CN
-1427708882,1427708884,DE
-1427708885,1427708887,BG
-1427708888,1427708888,UA
-1427708889,1427708894,DE
-1427708895,1427708895,AR
-1427708896,1427708898,PE
-1427708899,1427708899,SI
-1427708900,1427708901,ES
-1427708902,1427708902,DE
-1427708903,1427708905,IL
-1427708906,1427708907,UA
-1427708908,1427708908,IT
-1427708909,1427708909,CZ
-1427708910,1427708910,IT
-1427708911,1427708912,CZ
-1427708913,1427708915,DE
-1427708916,1427708918,UA
-1427708919,1427708921,US
-1427708922,1427708922,DE
-1427708923,1427708925,CZ
-1427708926,1427708926,UA
-1427708927,1427709823,DE
-1427709824,1427709824,FR
-1427709825,1427709826,TR
-1427709827,1427709827,DE
-1427709828,1427709830,TW
-1427709831,1427709833,PE
-1427709834,1427709836,EG
-1427709837,1427709838,BR
-1427709839,1427709841,FR
-1427709842,1427709842,UA
-1427709843,1427709845,DE
-1427709846,1427709846,AT
-1427709847,1427709849,RO
-1427709850,1427721744,DE
-1427721745,1427721745,RU
-1427721746,1427721746,CH
-1427721747,1427721747,LV
-1427721748,1427721753,DE
-1427721754,1427721756,TR
-1427721757,1427721763,DE
-1427721764,1427721764,CY
-1427721765,1427721765,DE
-1427721766,1427721766,BD
-1427721767,1427721768,DE
-1427721769,1427721769,IT
-1427721770,1427721770,RU
-1427721771,1427721776,DE
-1427721777,1427721777,ES
-1427721778,1427721784,DE
-1427721785,1427721785,BD
-1427721786,1427721786,DE
-1427721787,1427721787,GR
-1427721788,1427721788,NL
-1427721789,1427721789,PK
-1427721790,1427721790,LT
-1427721791,1427721792,DE
-1427721793,1427721793,CY
-1427721794,1427721794,US
-1427721795,1427721796,RU
-1427721797,1427721797,BD
-1427721798,1427721798,GB
-1427721799,1427721801,TR
-1427721802,1427721802,US
-1427721803,1427721803,BD
-1427721804,1427721804,DK
-1427721805,1427721806,DE
-1427721807,1427721809,CA
-1427721810,1427721810,TR
-1427721811,1427721817,DE
-1427721818,1427721818,IN
-1427721819,1427721821,DE
-1427721822,1427721822,EE
-1427721823,1427721823,BD
-1427721824,1427721825,IN
-1427721826,1427721827,DE
-1427721828,1427721828,PK
-1427721829,1427721830,DE
-1427721831,1427721831,UA
-1427721832,1427721834,DE
-1427721835,1427721836,RO
-1427721837,1427721837,BD
-1427721838,1427721838,GR
-1427721839,1427721842,DE
-1427721843,1427721843,US
-1427721844,1427721844,DE
-1427721845,1427721845,GR
-1427721846,1427721846,SK
-1427721847,1427721847,DE
-1427721848,1427721848,RU
-1427721849,1427721851,LT
-1427721852,1427721852,DE
-1427721853,1427721853,IT
-1427721854,1427721854,DK
-1427721855,1427721859,DE
-1427721860,1427721860,US
-1427721861,1427721861,DK
-1427721862,1427721863,US
-1427721864,1427721864,BD
-1427721865,1427721865,UA
-1427721866,1427721866,DE
-1427721867,1427721869,NL
-1427721870,1427721877,DE
-1427721878,1427721878,IT
-1427721879,1427721879,LV
-1427721880,1427721880,DE
-1427721881,1427721881,LV
-1427721882,1427721882,BD
-1427721883,1427721883,PK
-1427721884,1427721884,ES
-1427721885,1427721885,PK
-1427721886,1427721886,DE
-1427721887,1427721889,TR
-1427721890,1427721891,DE
-1427721892,1427721892,IE
-1427721893,1427721894,DE
-1427721895,1427721897,HR
-1427721898,1427721898,IE
-1427721899,1427721899,TR
-1427721900,1427721904,DE
-1427721905,1427721905,TR
-1427721906,1427721906,IE
-1427721907,1427721908,DE
-1427721909,1427721910,KY
-1427721911,1427721912,IN
-1427721913,1427721913,DE
-1427721914,1427721914,IE
-1427721915,1427721916,NL
-1427721917,1427721917,IE
-1427721918,1427721918,IN
-1427721919,1427721923,DE
-1427721924,1427721924,NL
-1427721925,1427721926,DE
-1427721927,1427721927,UA
-1427721928,1427721928,US
-1427721929,1427721930,DE
-1427721931,1427721932,US
-1427721933,1427721933,DE
-1427721934,1427721935,RO
-1427721936,1427721938,BR
-1427721939,1427721939,DE
-1427721940,1427721940,UA
-1427721941,1427723008,DE
-1427723009,1427723009,UA
-1427723010,1427723012,CA
-1427723013,1427723013,IN
-1427723014,1427723014,GR
-1427723015,1427723016,IT
-1427723017,1427723017,BR
-1427723018,1427723018,DE
-1427723019,1427723021,RU
-1427723022,1427723023,TR
-1427723024,1427723024,DE
-1427723025,1427723025,RU
-1427723026,1427723026,DE
-1427723027,1427723027,PE
-1427723028,1427723028,US
-1427723029,1427723031,DE
-1427723032,1427723034,RU
-1427723035,1427723038,DE
-1427723039,1427723039,UA
-1427723040,1427723040,US
-1427723041,1427723046,DE
-1427723047,1427723047,PE
-1427723048,1427723048,TR
-1427723049,1427723050,DE
-1427723051,1427723051,MD
-1427723052,1427723052,DE
-1427723053,1427723053,AZ
-1427723054,1427723055,DE
-1427723056,1427723056,BD
-1427723057,1427723057,TW
-1427723058,1427723058,DE
-1427723059,1427723059,TW
-1427723060,1427723068,DE
-1427723069,1427723069,TR
-1427723070,1427723070,IT
-1427723071,1427723391,DE
-1427723392,1427723519,LI
-1427723520,1427725887,DE
-1427725888,1427725893,TR
-1427725894,1427725895,DE
-1427725896,1427725897,US
-1427725898,1427725900,CA
-1427725901,1427725901,TR
-1427725902,1427725902,UA
-1427725903,1427725903,DE
-1427725904,1427725905,UA
-1427725906,1427725906,DE
-1427725907,1427725909,BE
-1427725910,1427725913,TR
-1427725914,1427725914,ES
-1427725915,1427725918,DE
-1427725919,1427725919,ES
-1427725920,1427725920,GR
-1427725921,1427725926,DE
-1427725927,1427725927,GB
-1427725928,1427725928,DE
-1427725929,1427725929,SA
-1427725930,1427725930,GR
-1427725931,1427725931,CZ
-1427725932,1427725983,DE
-1427725984,1427725984,EG
-1427725985,1427725985,DE
-1427725986,1427725986,US
-1427725987,1427725987,IL
-1427725988,1427725989,DE
-1427725990,1427725990,UA
-1427725991,1427725994,DE
-1427725995,1427725995,TR
-1427725996,1427725996,DE
-1427725997,1427725997,US
-1427725998,1427726478,DE
-1427726479,1427726479,IN
-1427726480,1427726480,DE
-1427726481,1427726483,LT
-1427726484,1427726484,US
-1427726485,1427726486,DE
-1427726487,1427726488,IN
-1427726489,1427726489,DE
-1427726490,1427726490,BR
-1427726491,1427726493,US
-1427726494,1427726494,DE
-1427726495,1427726495,BR
-1427726496,1427726496,DE
-1427726497,1427726499,BR
-1427726500,1427726505,DE
-1427726506,1427726511,UA
-1427726512,1427726513,DE
-1427726514,1427726515,IN
-1427726516,1427726520,DE
-1427726521,1427726522,BR
-1427726523,1427726526,PK
-1427726527,1427726529,US
-1427726530,1427726530,DE
-1427726531,1427726533,TR
-1427726534,1427726535,US
-1427726536,1427726537,TR
-1427726538,1427726538,CA
-1427726539,1427726539,TR
-1427726540,1427726542,CA
-1427726543,1427726543,TR
-1427726544,1427726545,IN
-1427726546,1427726546,CA
-1427726547,1427726552,DE
-1427726553,1427726553,US
-1427726554,1427726558,AE
-1427726559,1427726563,US
-1427726564,1427726577,IN
-1427726578,1427726585,DE
-1427726586,1427726586,TR
-1427726587,1427726588,DE
-1427726589,1427726590,TR
-1427726591,1427726789,DE
-1427726790,1427726790,MD
-1427726791,1427726792,DE
-1427726793,1427726793,UA
-1427726794,1427726795,DE
-1427726796,1427726796,UA
-1427726797,1427726809,DE
-1427726810,1427726810,NO
-1427726811,1427726811,DE
-1427726812,1427726812,TR
-1427726813,1427726825,DE
-1427726826,1427726826,CY
-1427726827,1427726835,DE
-1427726836,1427726836,US
-1427726837,1427726837,DE
-1427726838,1427726838,AZ
-1427726839,1427726840,DE
-1427726841,1427726841,RO
-1427726842,1427726845,DE
-1427726846,1427726846,TR
-1427726847,1427726980,DE
-1427726981,1427726982,TW
-1427726983,1427726983,BD
-1427726984,1427726984,DE
-1427726985,1427726985,IT
-1427726986,1427726986,MD
-1427726987,1427727007,DE
-1427727008,1427727008,TW
-1427727009,1427727235,DE
-1427727236,1427727236,IN
-1427727237,1427727237,DE
-1427727238,1427727238,BR
-1427727239,1427727240,DE
-1427727241,1427727241,TR
-1427727242,1427727244,DE
-1427727245,1427727245,BR
-1427727246,1427727247,CH
-1427727248,1427727248,DE
-1427727249,1427727249,IN
-1427727250,1427727255,DE
-1427727256,1427727256,BR
-1427727257,1427727258,DE
-1427727259,1427727261,CA
-1427727262,1427727270,DE
-1427727271,1427727271,IN
-1427727272,1427727272,DE
-1427727273,1427727273,AE
-1427727274,1427727276,DE
-1427727277,1427727277,IN
-1427727278,1427727278,DE
-1427727279,1427727281,LV
-1427727282,1427727282,CA
-1427727283,1427727283,DE
-1427727284,1427727284,UA
-1427727285,1427727285,LV
-1427727286,1427727288,US
-1427727289,1427727291,LT
-1427727292,1427727293,DE
-1427727294,1427727307,LT
-1427727308,1427727348,DE
-1427727349,1427727349,BR
-1427727350,1427728383,DE
-1427728384,1427728415,BR
-1427728416,1427728447,RU
-1427728448,1427728479,DE
-1427728480,1427728511,CY
-1427728512,1427728575,DE
-1427728576,1427728639,BR
-1427728640,1427728703,DE
-1427728704,1427728735,RU
-1427728736,1427728799,DE
-1427728800,1427728831,RU
-1427728832,1427728895,CY
-1427728896,1427728927,RU
-1427728928,1427728959,US
-1427728960,1427728991,RU
-1427728992,1427729023,LT
-1427729024,1427729055,GB
-1427729056,1427729087,CA
-1427729088,1427729119,MA
-1427729120,1427729151,BR
-1427729152,1427729215,DE
-1427729216,1427729279,IN
-1427729280,1427729311,DE
-1427729312,1427729343,GR
-1427729344,1427729375,DE
-1427729376,1427729407,LT
-1427729408,1427729925,DE
-1427729926,1427729926,CY
-1427729927,1427729927,TR
-1427729928,1427729928,GT
-1427729929,1427729929,DE
-1427729930,1427729930,HR
-1427729931,1427729932,DE
-1427729933,1427729933,MD
-1427729934,1427729937,DE
-1427729938,1427729938,PE
-1427729939,1427729942,DE
-1427729943,1427729944,EG
-1427729945,1427729946,DE
-1427729947,1427729947,EG
-1427729948,1427729958,DE
-1427729959,1427729959,CY
-1427729960,1427729960,AL
-1427729961,1427729961,DE
-1427729962,1427729963,AE
-1427729964,1427729966,DE
-1427729967,1427729968,UA
-1427729969,1427729969,DE
-1427729970,1427729970,AT
-1427729971,1427729974,DE
-1427729975,1427729975,BD
-1427729976,1427729976,AU
-1427729977,1427729981,DE
-1427729982,1427729982,MD
-1427729983,1427730002,DE
-1427730003,1427730003,US
-1427730004,1427730010,DE
-1427730011,1427730011,RU
-1427730012,1427730015,DE
-1427730016,1427730017,UA
-1427730018,1427730018,DE
-1427730019,1427730019,UA
-1427730020,1427730024,DE
-1427730025,1427730026,AT
-1427730027,1427730028,US
-1427730029,1427730029,DE
-1427730030,1427730030,MD
-1427730031,1427730033,DE
-1427730034,1427730034,UA
-1427730035,1427730035,TR
-1427730036,1427730041,DE
-1427730042,1427730042,UA
-1427730043,1427730045,DE
-1427730046,1427730046,MD
-1427730047,1427730051,DE
-1427730052,1427730052,MD
-1427730053,1427730056,DE
-1427730057,1427730057,DK
-1427730058,1427730058,DE
-1427730059,1427730059,UA
-1427730060,1427730060,SE
-1427730061,1427730061,RU
-1427730062,1427730066,DE
-1427730067,1427730067,PE
-1427730068,1427730068,PK
-1427730069,1427730076,DE
-1427730077,1427730077,BD
-1427730078,1427730078,DE
-1427730079,1427730079,MD
-1427730080,1427730080,DE
-1427730081,1427730081,AE
-1427730082,1427730084,DE
-1427730085,1427730085,BG
-1427730086,1427730089,DE
-1427730090,1427730090,AE
-1427730091,1427730098,DE
-1427730099,1427730099,SE
-1427730100,1427730102,DE
-1427730103,1427730103,AE
-1427730104,1427730104,AT
-1427730105,1427730105,DE
-1427730106,1427730107,RU
-1427730108,1427730108,SA
-1427730109,1427730117,DE
-1427730118,1427730118,US
-1427730119,1427730119,UA
-1427730120,1427730120,SA
-1427730121,1427730122,DE
-1427730123,1427730124,SA
-1427730125,1427730134,DE
-1427730135,1427730135,IN
-1427730136,1427730137,DE
-1427730138,1427730138,RU
-1427730139,1427730139,DE
-1427730140,1427730140,BD
-1427730141,1427730142,DE
-1427730143,1427730144,US
-1427730145,1427730145,HR
-1427730146,1427730147,BG
-1427730148,1427730148,DE
-1427730149,1427730149,UA
-1427730150,1427730150,GB
-1427730151,1427730151,RU
-1427730152,1427730152,DE
-1427730153,1427730153,RU
-1427730154,1427730154,IN
-1427730155,1427730157,DE
-1427730158,1427730158,TR
-1427730159,1427730159,GR
-1427730160,1427730160,DE
-1427730161,1427730161,SE
-1427730162,1427730162,DE
-1427730163,1427730163,DK
-1427730164,1427730164,LV
-1427730165,1427730165,DE
-1427730166,1427730166,NL
-1427730167,1427730167,DE
-1427730168,1427730170,DK
-1427730171,1427730171,LT
-1427730172,1427730172,AR
-1427730173,1427730173,NL
-1427730174,1427730174,RU
-1427730175,1427731462,DE
-1427731463,1427731463,TR
-1427731464,1427731469,DE
-1427731470,1427731470,CY
-1427731471,1427731471,SI
-1427731472,1427731478,DE
-1427731479,1427731480,IT
-1427731481,1427731483,DE
-1427731484,1427731485,IT
-1427731486,1427731488,DE
-1427731489,1427731489,SI
-1427731490,1427731490,DE
-1427731491,1427731492,TR
-1427731493,1427731495,DE
-1427731496,1427731496,PE
-1427731497,1427731497,PH
-1427731498,1427731511,DE
-1427731512,1427731512,US
-1427731513,1427731525,DE
-1427731526,1427731526,NO
-1427731527,1427731528,DE
-1427731529,1427731529,TR
-1427731530,1427731551,DE
-1427731552,1427731583,BR
-1427731584,1427739889,DE
+1427701760,1427712304,DE
+1427712305,1427712305,SG
+1427712306,1427712369,DE
+1427712370,1427712373,SG
+1427712374,1427712374,DE
+1427712375,1427712381,SG
+1427712382,1427712382,DE
+1427712383,1427712388,SG
+1427712389,1427722027,DE
+1427722028,1427722030,SG
+1427722031,1427722031,DE
+1427722032,1427722033,SG
+1427722034,1427728088,DE
+1427728089,1427728100,SG
+1427728101,1427728599,DE
+1427728600,1427728600,SK
+1427728601,1427739889,DE
1427739890,1427739890,RU
-1427739891,1427741183,DE
-1427741184,1427741184,US
-1427741185,1427741185,BD
-1427741186,1427741186,TR
-1427741187,1427741191,DE
-1427741192,1427741192,PE
-1427741193,1427741195,DE
-1427741196,1427741196,AZ
-1427741197,1427741197,US
-1427741198,1427741206,DE
-1427741207,1427741207,UA
-1427741208,1427741209,DE
-1427741210,1427741210,UG
-1427741211,1427741212,DE
-1427741213,1427741213,US
-1427741214,1427741214,PE
-1427741215,1427741218,DE
-1427741219,1427741220,NL
-1427741221,1427741224,DE
-1427741225,1427741227,US
-1427741228,1427741228,TR
-1427741229,1427741229,DE
-1427741230,1427741230,TR
-1427741231,1427741231,DE
-1427741232,1427741232,TR
-1427741233,1427741234,DE
-1427741235,1427741235,PL
-1427741236,1427741237,RU
-1427741238,1427741242,DE
-1427741243,1427741243,NL
-1427741244,1427741244,DE
-1427741245,1427741245,SI
-1427741246,1427741247,DE
-1427741248,1427741248,TR
-1427741249,1427741249,AZ
-1427741250,1427741250,DE
-1427741251,1427741253,RO
-1427741254,1427741254,BR
-1427741255,1427741256,TR
-1427741257,1427741258,DE
-1427741259,1427741259,TR
-1427741260,1427741261,DE
-1427741262,1427741263,TR
-1427741264,1427741265,DE
-1427741266,1427741266,MX
-1427741267,1427741267,DE
-1427741268,1427741268,UA
-1427741269,1427741270,DE
-1427741271,1427741271,EC
-1427741272,1427741272,TH
-1427741273,1427741273,DE
-1427741274,1427741274,HR
-1427741275,1427741276,DE
-1427741277,1427741278,ES
-1427741279,1427741280,HR
-1427741281,1427741281,BR
-1427741282,1427741282,PL
-1427741283,1427741283,GR
-1427741284,1427741284,TR
-1427741285,1427741285,LK
-1427741286,1427741286,UA
-1427741287,1427741287,TW
-1427741288,1427741288,DE
-1427741289,1427741289,UG
-1427741290,1427741292,DE
-1427741293,1427741293,MX
-1427741294,1427741295,DE
-1427741296,1427741296,TR
-1427741297,1427741299,DE
-1427741300,1427741300,GR
-1427741301,1427741301,RO
-1427741302,1427741302,FI
-1427741303,1427741303,DE
-1427741304,1427741304,AL
-1427741305,1427741305,AT
-1427741306,1427741306,RO
-1427741307,1427741307,RU
-1427741308,1427741309,DE
-1427741310,1427741311,UA
-1427741312,1427741312,DE
-1427741313,1427741313,KE
-1427741314,1427741314,RU
-1427741315,1427741318,DE
-1427741319,1427741319,RU
-1427741320,1427741320,DE
-1427741321,1427741321,AT
-1427741322,1427741324,DE
-1427741325,1427741325,NL
-1427741326,1427741328,DE
-1427741329,1427741329,TR
-1427741330,1427741330,AZ
-1427741331,1427741334,DE
-1427741335,1427741336,TR
-1427741337,1427741337,GR
-1427741338,1427741338,TR
-1427741339,1427741339,TW
-1427741340,1427741340,FR
-1427741341,1427741341,DE
-1427741342,1427741342,US
-1427741343,1427741347,DE
-1427741348,1427741348,TW
-1427741349,1427741350,RU
-1427741351,1427741359,DE
-1427741360,1427741360,RU
-1427741361,1427741363,IN
-1427741364,1427741368,DE
-1427741369,1427741369,KR
-1427741370,1427741370,DE
-1427741371,1427741371,GR
-1427741372,1427741376,DE
-1427741377,1427741377,AT
-1427741378,1427741382,DE
-1427741383,1427741383,TW
-1427741384,1427741384,GR
-1427741385,1427741385,IT
-1427741386,1427741386,DE
-1427741387,1427741387,AT
-1427741388,1427741388,DE
-1427741389,1427741389,TR
-1427741390,1427741390,DE
-1427741391,1427741391,TR
-1427741392,1427741393,DE
-1427741394,1427741396,GB
-1427741397,1427741399,CA
-1427741400,1427741400,AL
-1427741401,1427741403,DE
-1427741404,1427741404,HR
-1427741405,1427741405,AL
-1427741406,1427741406,CA
-1427741407,1427741409,DE
-1427741410,1427741412,SG
-1427741413,1427741413,CH
-1427741414,1427741414,KR
-1427741415,1427741416,TW
-1427741417,1427741418,DE
-1427741419,1427741419,UA
-1427741420,1427741420,LK
-1427741421,1427741421,GR
-1427741422,1427741422,US
-1427741423,1427741429,DE
-1427741430,1427741430,MY
-1427741431,1427741431,PA
-1427741432,1427741434,DE
-1427741435,1427741435,AT
-1427741436,1427741436,DE
-1427741437,1427741437,VN
-1427741438,1427741438,TR
-1427741439,1427741570,DE
-1427741571,1427741571,US
-1427741572,1427741572,SA
-1427741573,1427741576,DE
-1427741577,1427741577,DK
-1427741578,1427741579,UG
-1427741580,1427741580,DE
-1427741581,1427741581,RU
-1427741582,1427741582,MD
-1427741583,1427741583,RU
-1427741584,1427741584,CH
-1427741585,1427741585,DE
-1427741586,1427741586,GE
-1427741587,1427741587,AU
-1427741588,1427741588,GE
-1427741589,1427741590,DE
-1427741591,1427741591,TR
-1427741592,1427741594,DE
-1427741595,1427741595,TH
-1427741596,1427741596,PT
-1427741597,1427741598,IT
-1427741599,1427741599,DE
-1427741600,1427741601,RU
-1427741602,1427741602,UA
-1427741603,1427741604,AT
-1427741605,1427741605,CZ
-1427741606,1427741606,TR
-1427741607,1427741608,CZ
-1427741609,1427741609,SA
-1427741610,1427741613,DE
-1427741614,1427741614,IT
-1427741615,1427741615,RU
-1427741616,1427741616,TH
-1427741617,1427741623,DE
-1427741624,1427741624,NL
-1427741625,1427741625,RO
-1427741626,1427741627,TR
-1427741628,1427741629,DE
-1427741630,1427741630,VE
-1427741631,1427741631,TR
-1427741632,1427741632,RU
-1427741633,1427741633,UG
-1427741634,1427741635,DE
-1427741636,1427741636,FR
-1427741637,1427741637,BR
-1427741638,1427741638,DE
-1427741639,1427741643,ES
-1427741644,1427741644,DE
-1427741645,1427741645,GR
-1427741646,1427741646,AT
-1427741647,1427741647,DE
-1427741648,1427741649,TH
-1427741650,1427741650,DE
-1427741651,1427741651,AT
-1427741652,1427741652,IT
-1427741653,1427741653,DE
-1427741654,1427741654,TR
-1427741655,1427741655,DE
-1427741656,1427741656,AR
-1427741657,1427741657,KR
-1427741658,1427741658,DE
-1427741659,1427741661,UA
-1427741662,1427741662,DE
-1427741663,1427741663,NL
-1427741664,1427741664,TR
-1427741665,1427741665,NL
-1427741666,1427741666,CH
-1427741667,1427741667,UA
-1427741668,1427741669,DE
-1427741670,1427741670,RU
-1427741671,1427741674,DE
-1427741675,1427741675,BR
-1427741676,1427741676,GR
-1427741677,1427741677,TR
-1427741678,1427741678,DE
-1427741679,1427741679,GR
-1427741680,1427741680,PL
-1427741681,1427741684,DE
-1427741685,1427741685,BE
-1427741686,1427741686,CH
-1427741687,1427741688,DE
-1427741689,1427741689,SA
-1427741690,1427741692,AE
-1427741693,1427741699,DE
-1427741700,1427741700,GR
-1427741701,1427741701,GT
-1427741702,1427741702,DE
-1427741703,1427741703,GR
-1427741704,1427741706,CY
-1427741707,1427741707,GT
-1427741708,1427741709,DE
-1427741710,1427741710,BR
-1427741711,1427741713,DE
-1427741714,1427741714,RU
-1427741715,1427741718,DE
-1427741719,1427741721,CO
-1427741722,1427741724,DE
-1427741725,1427741725,IE
-1427741726,1427741726,RO
-1427741727,1427741727,PE
-1427741728,1427741728,PT
-1427741729,1427741729,DE
-1427741730,1427741732,RU
-1427741733,1427741735,DE
-1427741736,1427741736,RU
-1427741737,1427741747,DE
-1427741748,1427741750,NL
-1427741751,1427741751,DE
-1427741752,1427741754,TR
-1427741755,1427741756,DE
-1427741757,1427741757,BG
-1427741758,1427741759,RO
-1427741760,1427741762,BR
-1427741763,1427741763,HK
-1427741764,1427741772,BR
-1427741773,1427741782,IN
-1427741783,1427741783,DE
-1427741784,1427741791,UA
-1427741792,1427741794,DE
-1427741795,1427741795,CA
-1427741796,1427741801,DE
-1427741802,1427741817,TR
-1427741818,1427741825,DE
-1427741826,1427741826,PL
-1427741827,1427741827,DE
-1427741828,1427741828,GR
-1427741829,1427741830,DE
-1427741831,1427741831,AR
-1427741832,1427741833,DE
-1427741834,1427741834,US
-1427741835,1427741835,PL
-1427741836,1427741836,DE
-1427741837,1427741837,MD
-1427741838,1427741838,BR
-1427741839,1427741839,DE
-1427741840,1427741840,IT
-1427741841,1427741842,UA
-1427741843,1427741845,CY
-1427741846,1427741846,UA
-1427741847,1427741847,PE
-1427741848,1427741849,DE
-1427741850,1427741851,GR
-1427741852,1427741852,DE
-1427741853,1427741853,HU
-1427741854,1427741854,LT
-1427741855,1427741855,DE
-1427741856,1427741856,IE
-1427741857,1427741857,GR
-1427741858,1427741858,EG
-1427741859,1427741866,DE
-1427741867,1427741867,UA
-1427741868,1427741868,DE
-1427741869,1427741870,PT
-1427741871,1427741871,LK
-1427741872,1427741873,DE
-1427741874,1427741874,BR
-1427741875,1427741875,US
-1427741876,1427741876,LT
-1427741877,1427741877,IT
-1427741878,1427741878,HU
-1427741879,1427741879,BR
-1427741880,1427741880,US
-1427741881,1427741882,DE
-1427741883,1427741883,AE
-1427741884,1427741884,DE
-1427741885,1427741885,GR
-1427741886,1427741886,TR
-1427741887,1427741887,GR
-1427741888,1427741892,DE
-1427741893,1427741893,MD
-1427741894,1427741896,LK
-1427741897,1427741897,DE
-1427741898,1427741898,KH
-1427741899,1427741899,IN
-1427741900,1427741902,DE
-1427741903,1427741903,SK
-1427741904,1427741906,NL
-1427741907,1427741907,CZ
-1427741908,1427741908,DE
-1427741909,1427741911,UA
-1427741912,1427741912,DE
-1427741913,1427741913,RU
-1427741914,1427741914,GR
-1427741915,1427741923,DE
-1427741924,1427741924,RU
-1427741925,1427741930,DE
-1427741931,1427741931,AL
-1427741932,1427741932,SK
-1427741933,1427741933,DE
-1427741934,1427741934,UA
-1427741935,1427741938,DE
-1427741939,1427741939,CH
-1427741940,1427741945,DE
-1427741946,1427741946,UA
-1427741947,1427741947,HU
-1427741948,1427741949,CH
-1427741950,1427741950,KH
-1427741951,1427741951,DE
-1427741952,1427741952,RU
-1427741953,1427741954,DE
-1427741955,1427741955,BG
-1427741956,1427741956,NO
-1427741957,1427741957,DE
-1427741958,1427741958,IT
-1427741959,1427741960,DE
-1427741961,1427741962,UG
-1427741963,1427741965,TR
-1427741966,1427741970,DE
-1427741971,1427741971,LK
-1427741972,1427741972,AT
-1427741973,1427741973,DE
-1427741974,1427741974,UG
-1427741975,1427741976,DE
-1427741977,1427741978,RU
-1427741979,1427741979,IT
-1427741980,1427741980,CH
-1427741981,1427741983,DE
-1427741984,1427741986,CH
-1427741987,1427741987,SI
-1427741988,1427741988,LT
-1427741989,1427741989,UA
-1427741990,1427741990,PL
-1427741991,1427741991,DE
-1427741992,1427741993,ES
-1427741994,1427741994,DE
-1427741995,1427741995,CO
-1427741996,1427741997,DE
-1427741998,1427741998,GR
-1427741999,1427742001,DE
-1427742002,1427742002,TR
-1427742003,1427742003,CO
-1427742004,1427742006,DE
-1427742007,1427742007,TR
-1427742008,1427742009,DE
-1427742010,1427742010,LB
-1427742011,1427742013,DE
-1427742014,1427742014,ES
-1427742015,1427742016,DE
-1427742017,1427742017,US
-1427742018,1427742018,BG
-1427742019,1427742021,DE
-1427742022,1427742022,CZ
-1427742023,1427742023,PL
-1427742024,1427742024,DE
-1427742025,1427742025,GR
-1427742026,1427742028,CH
-1427742029,1427742030,DE
-1427742031,1427742031,TR
-1427742032,1427742034,DE
-1427742035,1427742036,IL
-1427742037,1427742037,DE
-1427742038,1427742038,UA
-1427742039,1427742039,HR
-1427742040,1427742042,DE
-1427742043,1427742043,PK
-1427742044,1427742044,DE
-1427742045,1427742045,BR
-1427742046,1427742046,RU
-1427742047,1427742048,DE
-1427742049,1427742049,SG
-1427742050,1427742050,DE
-1427742051,1427742051,IN
-1427742052,1427742052,DE
-1427742053,1427742055,CA
-1427742056,1427742058,BR
-1427742059,1427742063,DE
-1427742064,1427742064,PL
-1427742065,1427742065,IN
-1427742066,1427742066,TR
-1427742067,1427742079,DE
-1427742080,1427742080,RU
-1427742081,1427742084,DE
-1427742085,1427742087,BE
-1427742088,1427742088,DE
-1427742089,1427742089,BR
-1427742090,1427742090,DE
-1427742091,1427742091,GR
-1427742092,1427742092,HK
-1427742093,1427742093,DE
-1427742094,1427742096,TR
-1427742097,1427742098,SA
-1427742099,1427742106,TR
-1427742107,1427742107,DE
-1427742108,1427742108,TR
-1427742109,1427742114,DE
-1427742115,1427742115,BR
-1427742116,1427742116,RO
-1427742117,1427742117,DE
-1427742118,1427742120,BR
-1427742121,1427742122,DE
-1427742123,1427742124,TR
-1427742125,1427742125,LB
-1427742126,1427742130,DE
-1427742131,1427742131,TR
-1427742132,1427742139,DE
-1427742140,1427742142,UA
-1427742143,1427742143,DE
-1427742144,1427742144,IN
-1427742145,1427742157,DE
-1427742158,1427742158,LB
-1427742159,1427742167,DE
-1427742168,1427742168,RU
-1427742169,1427742169,IL
-1427742170,1427742170,US
-1427742171,1427742173,LT
-1427742174,1427742719,DE
-1427742720,1427742751,IO
-1427742752,1427742911,DE
-1427742912,1427742975,BR
-1427742976,1427743007,RU
-1427743008,1427743039,US
-1427743040,1427743071,BR
-1427743072,1427743103,CY
-1427743104,1427743135,DE
-1427743136,1427743136,IN
-1427743137,1427743167,DE
-1427743168,1427743199,CY
-1427743200,1427743231,TR
-1427743232,1427743263,GR
-1427743264,1427743295,DE
-1427743296,1427743327,BR
-1427743328,1427743359,DE
-1427743360,1427743423,BR
-1427743424,1427743455,US
-1427743456,1427743487,CY
-1427743488,1427743519,DE
-1427743520,1427743551,BR
-1427743552,1427743615,DE
-1427743616,1427743647,DK
-1427743648,1427743679,DE
-1427743680,1427743711,RU
-1427743712,1427743743,TR
-1427743744,1427743775,DE
-1427743776,1427743807,ZA
-1427743808,1427743839,BR
-1427743840,1427743871,RU
-1427743872,1427743903,DE
-1427743904,1427743935,US
-1427743936,1427743967,RU
-1427743968,1427743999,DE
-1427744000,1427744031,AT
-1427744032,1427744063,RU
-1427744064,1427744191,DE
-1427744192,1427744223,RU
-1427744224,1427744255,DE
-1427744256,1427744287,US
-1427744288,1427744319,TR
-1427744320,1427744351,DE
-1427744352,1427744383,UA
-1427744384,1427744415,PL
-1427744416,1427744511,DE
-1427744512,1427744543,IT
-1427744544,1427744575,DE
-1427744576,1427744607,PL
-1427744608,1427744639,DE
-1427744640,1427744671,TR
-1427744672,1427744703,DE
-1427744704,1427744799,BR
-1427744800,1427744831,LT
-1427744832,1427744863,DE
-1427744864,1427744927,TR
-1427744928,1427744959,DE
-1427744960,1427744991,RU
-1427744992,1427745023,DK
-1427745024,1427745055,BM
-1427745056,1427745087,US
-1427745088,1427745119,DE
-1427745120,1427745151,US
-1427745152,1427745183,RO
-1427745184,1427745215,CH
-1427745216,1427745247,US
-1427745248,1427745311,DE
-1427745312,1427745343,NL
-1427745344,1427745375,RU
-1427745376,1427745407,BR
-1427745408,1427745471,US
-1427745472,1427745503,RO
-1427745504,1427745535,RU
-1427745536,1427745567,BR
-1427745568,1427745599,RU
-1427745600,1427745631,DE
-1427745632,1427745663,BM
-1427745664,1427745695,CY
-1427745696,1427745727,US
-1427745728,1427745759,DE
-1427745760,1427745791,LT
-1427745792,1427745823,FR
-1427745824,1427745855,US
-1427745856,1427745887,BR
-1427745888,1427745919,IN
-1427745920,1427745983,DE
-1427745984,1427746015,RU
-1427746016,1427746047,US
-1427746048,1427746079,SE
-1427746080,1427746111,GB
-1427746112,1427746143,DE
-1427746144,1427746175,GR
-1427746176,1427746239,DE
-1427746240,1427746271,US
-1427746272,1427747839,DE
-1427747840,1427747871,FI
-1427747872,1427747935,BR
-1427747936,1427747967,US
-1427747968,1427747999,DE
-1427748000,1427748031,BR
-1427748032,1427748063,DE
-1427748064,1427748095,US
-1427748096,1427748127,BR
-1427748128,1427748159,DE
-1427748160,1427748191,GB
-1427748192,1427748255,DE
-1427748256,1427748287,US
-1427748288,1427748351,DE
-1427748352,1427748383,BR
-1427748384,1427748447,DE
-1427748448,1427748479,RU
-1427748480,1427748575,DE
-1427748576,1427748607,BR
-1427748608,1427748639,DE
-1427748640,1427748671,FR
-1427748672,1427748703,DE
-1427748704,1427748735,LT
-1427748736,1427748799,BR
-1427748800,1427749471,DE
-1427749472,1427749503,BR
-1427749504,1427749567,DE
-1427749568,1427749599,CY
-1427749600,1427749631,DE
-1427749632,1427749663,RU
-1427749664,1427749695,DE
-1427749696,1427749727,BR
-1427749728,1427749759,DE
-1427749760,1427749791,BR
-1427749792,1427749855,DE
-1427749856,1427749887,RU
-1427749888,1427749919,DE
-1427749920,1427749951,US
-1427749952,1427749983,BR
-1427749984,1427750015,RU
-1427750016,1427750079,DE
-1427750080,1427750111,US
-1427750112,1427750143,DE
-1427750144,1427750175,US
-1427750176,1427750207,SE
-1427750208,1427750239,DE
-1427750240,1427750271,US
-1427750272,1427750303,DE
-1427750304,1427750335,FR
-1427750336,1427750367,US
-1427750368,1427759935,DE
-1427759936,1427759967,HR
-1427759968,1427759999,DE
-1427760000,1427760031,BR
-1427760032,1427760063,US
-1427760064,1427760095,AR
-1427760096,1427760127,US
-1427760128,1427760159,LT
-1427760160,1427760191,PL
-1427760192,1427760255,US
-1427760256,1427760319,DE
-1427760320,1427760351,US
-1427760352,1427760383,RU
-1427760384,1427760415,DE
-1427760416,1427760447,US
-1427760448,1427760479,BR
-1427760480,1427760575,DE
-1427760576,1427760607,CH
-1427760608,1427760671,DE
-1427760672,1427760703,BR
-1427760704,1427760735,DE
-1427760736,1427760767,BR
-1427760768,1427760799,DE
-1427760800,1427760831,US
-1427760832,1427760863,DE
-1427760864,1427760895,US
-1427760896,1427760959,DE
-1427760960,1427760991,CZ
-1427760992,1427761055,DE
-1427761056,1427761087,CL
-1427761088,1427761215,DE
-1427761216,1427761247,TR
-1427761248,1427761279,US
-1427761280,1427761311,RU
-1427761312,1427761343,UA
-1427761344,1427761375,DE
-1427761376,1427761407,TW
-1427761408,1427761439,RU
-1427761440,1427761503,DE
-1427761504,1427761535,PL
-1427761536,1427761567,US
-1427761568,1427761599,RU
-1427761600,1427761631,EG
-1427761632,1427764351,DE
-1427764352,1427764352,ES
-1427764353,1427764353,DE
-1427764354,1427764354,RO
-1427764355,1427764356,DE
-1427764357,1427764357,RU
-1427764358,1427764358,TR
-1427764359,1427764359,ID
-1427764360,1427764360,DE
-1427764361,1427764361,LT
-1427764362,1427764364,DE
-1427764365,1427764365,UG
-1427764366,1427764366,DE
-1427764367,1427764367,IR
-1427764368,1427764369,RO
-1427764370,1427764385,DE
-1427764386,1427764387,BD
-1427764388,1427764389,TR
-1427764390,1427764390,DE
-1427764391,1427764391,UA
-1427764392,1427764393,DE
-1427764394,1427764394,SA
-1427764395,1427764397,DE
-1427764398,1427764399,GR
-1427764400,1427764400,LT
-1427764401,1427764401,DE
-1427764402,1427764402,LT
-1427764403,1427764404,DE
-1427764405,1427764405,TR
-1427764406,1427764407,LT
-1427764408,1427764410,DE
-1427764411,1427764411,UA
-1427764412,1427764414,IT
-1427764415,1427764415,IL
-1427764416,1427764417,DE
-1427764418,1427764418,RU
-1427764419,1427764419,DE
-1427764420,1427764420,TR
-1427764421,1427764426,DE
-1427764427,1427764428,GR
-1427764429,1427764429,RU
-1427764430,1427764430,UG
-1427764431,1427764432,DE
-1427764433,1427764435,HR
-1427764436,1427764437,DE
-1427764438,1427764438,TR
-1427764439,1427764439,RU
-1427764440,1427764441,DE
-1427764442,1427764442,AL
-1427764443,1427764445,LK
-1427764446,1427764446,DE
-1427764447,1427764447,TR
-1427764448,1427764449,US
-1427764450,1427764450,GR
-1427764451,1427764458,DE
-1427764459,1427764460,RU
-1427764461,1427764461,TR
-1427764462,1427764463,DE
-1427764464,1427764464,GR
-1427764465,1427764467,DE
-1427764468,1427764468,IT
-1427764469,1427764470,DE
-1427764471,1427764473,MD
-1427764474,1427764474,SA
-1427764475,1427764475,DE
-1427764476,1427764478,BR
-1427764479,1427765381,DE
-1427765382,1427765382,TR
-1427765383,1427765385,DE
-1427765386,1427765386,TR
-1427765387,1427765391,DE
-1427765392,1427765394,TR
-1427765395,1427765395,DE
-1427765396,1427765398,TR
-1427765399,1427765402,DE
-1427765403,1427765404,TR
-1427765405,1427765405,IN
-1427765406,1427765407,DE
-1427765408,1427765409,TR
-1427765410,1427765413,IN
-1427765414,1427765417,DE
-1427765418,1427765418,US
-1427765419,1427765420,DE
-1427765421,1427765422,UA
-1427765423,1427765424,DE
-1427765425,1427765428,IN
-1427765429,1427765429,TR
-1427765430,1427765443,DE
-1427765444,1427765445,TR
-1427765446,1427765447,DE
-1427765448,1427765448,TR
-1427765449,1427765454,DE
-1427765455,1427765455,TR
-1427765456,1427765457,DE
-1427765458,1427765458,TR
-1427765459,1427765462,DE
-1427765463,1427765463,US
-1427765464,1427765467,DE
-1427765468,1427765469,UA
-1427765470,1427765470,TR
-1427765471,1427765472,DE
-1427765473,1427765473,IN
-1427765474,1427765474,DE
-1427765475,1427765478,TR
-1427765479,1427765484,IN
-1427765485,1427765486,UA
-1427765487,1427765487,TR
-1427765488,1427765488,DE
-1427765489,1427765492,TR
-1427765493,1427765493,US
-1427765494,1427765494,DE
-1427765495,1427765501,US
-1427765502,1427765502,UA
-1427765503,1427765508,DE
-1427765509,1427765509,TR
-1427765510,1427765510,DE
-1427765511,1427765511,TR
-1427765512,1427765512,DE
-1427765513,1427765514,TR
-1427765515,1427765530,DE
-1427765531,1427765531,TR
-1427765532,1427765535,DE
-1427765536,1427765537,US
-1427765538,1427765538,DE
-1427765539,1427765542,IE
-1427765543,1427765543,DE
-1427765544,1427765544,IE
-1427765545,1427765550,DE
-1427765551,1427765555,US
-1427765556,1427765557,TR
-1427765558,1427765560,DE
-1427765561,1427765561,US
-1427765562,1427765562,TR
-1427765563,1427765565,US
-1427765566,1427765571,DE
-1427765572,1427765572,US
-1427765573,1427765575,DE
-1427765576,1427765576,US
-1427765577,1427765578,DE
-1427765579,1427765579,US
-1427765580,1427765582,DE
-1427765583,1427765585,US
-1427765586,1427765586,DE
-1427765587,1427765589,US
-1427765590,1427765590,DE
-1427765591,1427765591,US
-1427765592,1427765596,DE
-1427765597,1427765597,US
-1427765598,1427765599,DE
-1427765600,1427765601,US
-1427765602,1427765606,DE
-1427765607,1427765607,US
-1427765608,1427765616,DE
-1427765617,1427765617,US
-1427765618,1427765619,DE
-1427765620,1427765621,US
-1427765622,1427765622,DE
-1427765623,1427765625,US
-1427765626,1427765626,DE
-1427765627,1427765628,BG
-1427765629,1427765645,DE
-1427765646,1427765646,US
-1427765647,1427765647,DE
-1427765648,1427765649,US
-1427765650,1427765650,TR
-1427765651,1427765659,DE
-1427765660,1427765660,TR
-1427765661,1427765661,DE
-1427765662,1427765662,TR
-1427765663,1427765663,DE
-1427765664,1427765664,TR
-1427765665,1427765666,DE
-1427765667,1427765667,TR
-1427765668,1427765669,DE
-1427765670,1427765672,TR
-1427765673,1427765677,DE
-1427765678,1427765678,TR
-1427765679,1427765680,DE
-1427765681,1427765682,TR
-1427765683,1427765683,DE
-1427765684,1427765687,TR
-1427765688,1427765688,US
-1427765689,1427765690,DE
-1427765691,1427765691,TR
-1427765692,1427765693,BR
-1427765694,1427765694,US
-1427765695,1427765767,DE
-1427765768,1427765773,US
-1427765774,1427765776,DE
-1427765777,1427765779,LT
-1427765780,1427765780,DE
-1427765781,1427765781,LT
-1427765782,1427765785,DE
-1427765786,1427765786,TR
-1427765787,1427765787,HK
-1427765788,1427765789,DE
-1427765790,1427765790,LT
-1427765791,1427765791,DE
-1427765792,1427765796,US
-1427765797,1427765799,DE
-1427765800,1427765800,US
-1427765801,1427765802,GB
-1427765803,1427765803,DE
-1427765804,1427765804,GB
-1427765805,1427765805,DE
-1427765806,1427765806,GB
-1427765807,1427765807,DE
-1427765808,1427765808,GB
-1427765809,1427765809,DE
-1427765810,1427765813,GB
-1427765814,1427765814,DE
-1427765815,1427765817,GB
-1427765818,1427765818,BR
-1427765819,1427765819,DE
-1427765820,1427765821,GB
-1427765822,1427765831,DE
-1427765832,1427765832,PK
-1427765833,1427765837,DE
-1427765838,1427765849,BR
-1427765850,1427765850,DE
-1427765851,1427765860,BR
-1427765861,1427765861,DE
-1427765862,1427765868,BR
-1427765869,1427765895,DE
-1427765896,1427765897,GB
-1427765898,1427765899,DE
-1427765900,1427765905,GB
-1427765906,1427765906,DE
-1427765907,1427765909,GB
-1427765910,1427765916,DE
-1427765917,1427765917,US
-1427765918,1427765919,DE
-1427765920,1427765924,GB
-1427765925,1427765926,DE
-1427765927,1427765927,US
-1427765928,1427766019,DE
-1427766020,1427766021,LT
-1427766022,1427766024,DE
-1427766025,1427766025,LT
-1427766026,1427766028,DE
-1427766029,1427766029,IN
-1427766030,1427766040,DE
-1427766041,1427766042,IN
-1427766043,1427766044,DE
-1427766045,1427766045,IN
-1427766046,1427766047,LT
-1427766048,1427766048,DE
-1427766049,1427766050,LT
-1427766051,1427766051,TR
-1427766052,1427766063,DE
-1427766064,1427766064,GR
-1427766065,1427766065,IN
-1427766066,1427766067,TR
-1427766068,1427766070,IN
-1427766071,1427766072,DE
-1427766073,1427766073,IN
-1427766074,1427766074,DE
-1427766075,1427766075,LT
-1427766076,1427766085,DE
-1427766086,1427766086,IN
-1427766087,1427766087,DE
-1427766088,1427766088,TR
-1427766089,1427766089,IN
-1427766090,1427766092,DE
-1427766093,1427766094,IN
-1427766095,1427766099,DE
-1427766100,1427766100,BG
-1427766101,1427766105,DE
-1427766106,1427766108,TR
-1427766109,1427766110,DE
-1427766111,1427766111,TR
-1427766112,1427766114,DE
-1427766115,1427766115,TR
-1427766116,1427766117,DE
-1427766118,1427766118,TR
-1427766119,1427766120,DE
-1427766121,1427766121,TR
-1427766122,1427766122,US
-1427766123,1427766124,DE
-1427766125,1427766125,IN
-1427766126,1427766134,DE
-1427766135,1427766135,US
-1427766136,1427766211,DE
-1427766212,1427766212,BR
-1427766213,1427766213,DE
-1427766214,1427766215,GB
-1427766216,1427766216,TR
-1427766217,1427766217,BE
-1427766218,1427766218,DE
-1427766219,1427766219,CA
-1427766220,1427766221,BE
-1427766222,1427766224,CH
-1427766225,1427766225,DE
-1427766226,1427766226,UG
-1427766227,1427766227,DE
-1427766228,1427766228,BE
-1427766229,1427766232,DE
-1427766233,1427766233,GR
-1427766234,1427766234,AE
-1427766235,1427766235,IN
-1427766236,1427766236,AE
-1427766237,1427766240,DE
-1427766241,1427766241,LT
-1427766242,1427766242,DE
-1427766243,1427766245,PK
-1427766246,1427766249,DE
-1427766250,1427766250,ES
-1427766251,1427766251,IR
-1427766252,1427766252,DE
-1427766253,1427766253,ES
-1427766254,1427766254,DE
-1427766255,1427766257,TR
-1427766258,1427766258,DE
-1427766259,1427766259,LK
-1427766260,1427766260,DE
-1427766261,1427766261,ES
-1427766262,1427766262,DE
-1427766263,1427766263,IR
-1427766264,1427766264,DE
-1427766265,1427766265,AZ
-1427766266,1427766270,TR
-1427766271,1427766339,DE
-1427766340,1427766340,US
-1427766341,1427766343,DE
-1427766344,1427766344,AU
-1427766345,1427766347,DE
-1427766348,1427766357,US
-1427766358,1427766389,DE
-1427766390,1427766390,AU
-1427766391,1427766428,DE
-1427766429,1427766429,US
-1427766430,1427766430,TR
-1427766431,1427766441,DE
-1427766442,1427766442,GR
-1427766443,1427766443,TR
-1427766444,1427766444,DE
-1427766445,1427766446,TR
-1427766447,1427766447,DE
-1427766448,1427766448,TR
-1427766449,1427766449,DE
-1427766450,1427766450,TR
-1427766451,1427766452,DE
-1427766453,1427766453,TR
-1427766454,1427766454,IN
-1427766455,1427766455,DE
-1427766456,1427766459,IN
-1427766460,1427766460,DE
-1427766461,1427766461,IN
-1427766462,1427766467,DE
-1427766468,1427766468,BR
-1427766469,1427766469,DE
-1427766470,1427766470,BE
-1427766471,1427766471,DE
-1427766472,1427766472,PL
-1427766473,1427766474,DE
-1427766475,1427766477,TR
-1427766478,1427766479,DE
-1427766480,1427766480,AT
-1427766481,1427766483,DE
-1427766484,1427766484,GR
-1427766485,1427766489,DE
-1427766490,1427766490,PE
-1427766491,1427766491,BD
-1427766492,1427766492,PK
-1427766493,1427766493,RU
-1427766494,1427766495,HU
-1427766496,1427766496,UA
-1427766497,1427766499,PK
-1427766500,1427766500,FR
-1427766501,1427766503,DE
-1427766504,1427766504,RU
-1427766505,1427766505,DE
-1427766506,1427766506,US
-1427766507,1427766507,DE
-1427766508,1427766508,BR
-1427766509,1427766513,DE
-1427766514,1427766515,PK
-1427766516,1427766516,DE
-1427766517,1427766517,VE
-1427766518,1427766520,DE
-1427766521,1427766521,TR
-1427766522,1427766523,CA
-1427766524,1427766537,DE
-1427766538,1427766538,PK
-1427766539,1427766539,PA
-1427766540,1427766543,DE
-1427766544,1427766544,US
-1427766545,1427766546,RU
-1427766547,1427766547,EG
-1427766548,1427766549,DE
-1427766550,1427766550,PK
-1427766551,1427766551,FR
-1427766552,1427766552,BR
-1427766553,1427766554,LT
-1427766555,1427766555,SE
-1427766556,1427766556,BR
-1427766557,1427766557,FR
-1427766558,1427766559,TR
-1427766560,1427766560,PK
-1427766561,1427766561,IT
-1427766562,1427766562,DE
-1427766563,1427766563,GR
-1427766564,1427766565,DE
-1427766566,1427766566,BR
-1427766567,1427766567,DE
-1427766568,1427766569,GR
-1427766570,1427766570,DE
-1427766571,1427766571,UA
-1427766572,1427766572,DE
-1427766573,1427766573,MD
-1427766574,1427766574,DE
-1427766575,1427766575,BR
-1427766576,1427766576,IT
-1427766577,1427766577,DE
-1427766578,1427766578,PL
-1427766579,1427766579,AR
-1427766580,1427766580,US
-1427766581,1427766581,DE
-1427766582,1427766582,PT
-1427766583,1427766583,DE
-1427766584,1427766586,PK
-1427766587,1427766587,IT
-1427766588,1427766588,DE
-1427766589,1427766589,HU
-1427766590,1427766660,DE
-1427766661,1427766661,US
-1427766662,1427766665,DE
-1427766666,1427766666,US
-1427766667,1427766667,DE
-1427766668,1427766668,US
-1427766669,1427766674,DE
-1427766675,1427766695,US
-1427766696,1427766696,DE
-1427766697,1427766702,US
-1427766703,1427766710,IN
-1427766711,1427766711,DE
-1427766712,1427766714,IN
-1427766715,1427766715,DE
-1427766716,1427766716,TR
-1427766717,1427766717,DE
-1427766718,1427766718,TR
-1427766719,1427766787,DE
-1427766788,1427766788,UA
-1427766789,1427766791,DE
-1427766792,1427766792,UA
-1427766793,1427766803,DE
-1427766804,1427766804,EE
-1427766805,1427766805,UA
-1427766806,1427766809,DE
-1427766810,1427766810,PK
-1427766811,1427766812,DE
-1427766813,1427766813,CN
-1427766814,1427766816,DE
-1427766817,1427766818,CN
-1427766819,1427766819,UA
-1427766820,1427766820,RU
-1427766821,1427766823,DE
-1427766824,1427766824,UA
-1427766825,1427766825,AR
-1427766826,1427766826,DE
-1427766827,1427766827,GR
-1427766828,1427766829,EG
-1427766830,1427766830,DE
-1427766831,1427766831,IN
-1427766832,1427766833,AE
-1427766834,1427766835,DE
-1427766836,1427766836,IR
-1427766837,1427766838,GE
-1427766839,1427766839,DE
-1427766840,1427766840,LK
-1427766841,1427766844,DE
-1427766845,1427766846,EG
-1427766847,1427766857,DE
-1427766858,1427766866,US
-1427766867,1427766878,DE
-1427766879,1427766880,AU
-1427766881,1427766882,DE
-1427766883,1427766883,AU
-1427766884,1427766885,DE
-1427766886,1427766886,AU
-1427766887,1427766898,DE
-1427766899,1427766901,AU
-1427766902,1427766903,DE
-1427766904,1427766904,AU
-1427766905,1427766985,DE
-1427766986,1427766986,IT
-1427766987,1427766987,US
-1427766988,1427767007,DE
-1427767008,1427767009,CA
-1427767010,1427767010,DE
-1427767011,1427767014,CA
-1427767015,1427767015,DE
-1427767016,1427767017,CA
-1427767018,1427767018,DE
-1427767019,1427767021,CA
-1427767022,1427767024,DE
-1427767025,1427767028,CA
-1427767029,1427767029,DE
-1427767030,1427767030,CA
-1427767031,1427767031,NL
-1427767032,1427767036,DE
-1427767037,1427767038,KW
-1427767039,1427767295,DE
+1427739891,1427741372,DE
+1427741373,1427741373,AT
+1427741374,1427767295,DE
1427767296,1427800063,BE
1427800064,1427832831,RU
1427832832,1427865599,BE
1427865600,1427898367,DK
1427898368,1427914751,RU
-1427914752,1427923967,BE
-1427923968,1427924223,FR
-1427924224,1427931135,BE
+1427914752,1427931135,BE
1427931136,1427947519,PL
1427947520,1427963903,RU
1427963904,1427980287,TR
@@ -58479,15 +18589,10 @@
1428062208,1428078591,SE
1428078592,1428094975,RU
1428094976,1428103167,AT
-1428103168,1428111359,GB
-1428111360,1428118783,A2
-1428118784,1428119039,US
-1428119040,1428119551,A2
+1428103168,1428119551,GB
1428119552,1428121599,LV
1428121600,1428123647,FR
-1428123648,1428126975,RU
-1428126976,1428127231,TR
-1428127232,1428127743,RU
+1428123648,1428127743,RU
1428127744,1428129791,ES
1428129792,1428131839,GB
1428131840,1428133887,FR
@@ -58495,24 +18600,21 @@
1428135936,1428137983,IT
1428137984,1428140031,GB
1428140032,1428142079,RU
-1428142080,1428143119,DE
-1428143120,1428143135,RU
-1428143136,1428143167,DE
-1428143168,1428143199,ID
-1428143200,1428143263,DE
-1428143264,1428143279,CH
-1428143280,1428144127,DE
-1428144128,1428147287,FR
-1428147288,1428147295,GB
-1428147296,1428147343,FR
-1428147344,1428147351,GB
-1428147352,1428152319,FR
+1428142080,1428144127,DE
+1428144128,1428145151,FR
+1428145152,1428147519,GB
+1428147520,1428147583,FR
+1428147584,1428147711,GB
+1428147712,1428148223,FR
+1428148224,1428148735,GB
+1428148736,1428148991,FR
+1428148992,1428151807,GB
+1428151808,1428152063,FR
+1428152064,1428152319,GB
1428152320,1428160511,PL
1428160512,1428260863,IT
1428260864,1428261119,GB
-1428261120,1428474367,IT
-1428474368,1428474623,US
-1428474624,1428536831,IT
+1428261120,1428536831,IT
1428536832,1428537087,US
1428537088,1429209087,IT
1429209088,1430257663,ES
@@ -58524,23 +18626,13 @@
1431044096,1431306239,FI
1431306240,1431568383,DK
1431568384,1431830527,ES
-1431830528,1431832832,DE
-1431832833,1431832846,AT
-1431832847,1431837680,DE
-1431837681,1431837694,AT
-1431837695,1431838719,DE
-1431838720,1431839007,BE
-1431839008,1431839039,DE
-1431839040,1431846911,BE
+1431830528,1431838719,DE
+1431838720,1431846911,BE
1431846912,1431855103,NO
1431855104,1431863295,NL
-1431863296,1431864391,PT
-1431864392,1431864399,ES
-1431864400,1431866447,PT
-1431866448,1431866455,NL
-1431866456,1431866479,PT
-1431866480,1431866495,ES
-1431866496,1431871487,PT
+1431863296,1431866367,PT
+1431866368,1431867391,ES
+1431867392,1431871487,PT
1431871488,1431879679,RU
1431879680,1431887871,IT
1431887872,1431896063,GB
@@ -58551,9 +18643,7 @@
1431928832,1431937023,IT
1431937024,1431945215,PL
1431945216,1431953407,NO
-1431953408,1431956735,DK
-1431956736,1431956991,EU
-1431956992,1431961599,DK
+1431953408,1431961599,DK
1431961600,1431969791,CH
1431969792,1431977983,GB
1431977984,1431986175,NL
@@ -58561,9 +18651,7 @@
1431994368,1432002559,AT
1432002560,1432010751,HU
1432010752,1432018943,UA
-1432018944,1432023551,GB
-1432023552,1432023567,BG
-1432023568,1432027135,GB
+1432018944,1432027135,GB
1432027136,1432035327,IE
1432035328,1432043519,GB
1432043520,1432051711,ES
@@ -58575,61 +18663,11 @@
1432092672,1432100863,RU
1432100864,1432109055,CZ
1432109056,1432117247,GB
-1432117248,1432125439,CY
-1432125440,1432131607,NL
-1432131608,1432131615,PH
-1432131616,1432131679,NL
-1432131680,1432131695,PH
-1432131696,1432131711,NL
-1432131712,1432131727,PH
-1432131728,1432131743,NL
-1432131744,1432131759,PH
-1432131760,1432131775,NL
-1432131776,1432131783,PH
-1432131784,1432131887,NL
-1432131888,1432131903,PH
-1432131904,1432131919,NL
-1432131920,1432131935,PH
-1432131936,1432131951,NL
-1432131952,1432131967,PH
-1432131968,1432131999,NL
-1432132000,1432132031,PH
-1432132032,1432132271,NL
-1432132272,1432132287,PH
-1432132288,1432132303,NL
-1432132304,1432132319,PH
-1432132320,1432132351,NL
-1432132352,1432132495,PH
-1432132496,1432132511,NL
-1432132512,1432132559,PH
-1432132560,1432132639,NL
-1432132640,1432132655,PH
-1432132656,1432132671,NL
-1432132672,1432132687,PH
-1432132688,1432132815,NL
-1432132816,1432132831,PH
-1432132832,1432132895,NL
-1432132896,1432132911,PH
-1432132912,1432132927,NL
-1432132928,1432132943,PH
-1432132944,1432133039,NL
-1432133040,1432133055,PH
-1432133056,1432133151,NL
-1432133152,1432133167,PH
-1432133168,1432133199,NL
-1432133200,1432133215,PH
-1432133216,1432133327,NL
-1432133328,1432133343,PH
-1432133344,1432133455,NL
-1432133456,1432133503,PH
-1432133504,1432133543,NL
-1432133544,1432133551,PH
-1432133552,1432133631,NL
+1432125440,1432131583,NL
+1432131584,1432133631,US
1432133632,1432150015,GB
1432150016,1432158207,BA
-1432158208,1432165247,DE
-1432165248,1432165375,PL
-1432165376,1432166399,DE
+1432158208,1432166399,DE
1432166400,1432174591,RU
1432174592,1432182783,DE
1432182784,1432190975,CZ
@@ -58651,21 +18689,7 @@
1432322048,1432338431,RU
1432338432,1432346623,FR
1432346624,1433403391,TR
-1433403392,1433406431,ES
-1433406432,1433406447,US
-1433406448,1433407487,ES
-1433407488,1433410047,NL
-1433410048,1433410559,US
-1433410560,1433411071,ES
-1433411072,1433411327,US
-1433411328,1433411343,ES
-1433411344,1433411375,TR
-1433411376,1433411407,US
-1433411408,1433411423,TR
-1433411424,1433411439,ES
-1433411440,1433411455,TR
-1433411456,1433411519,US
-1433411520,1433411583,ES
+1433403392,1433411583,ES
1433411584,1433419775,RU
1433419776,1433427967,LB
1433427968,1433436159,RU
@@ -58689,18 +18713,22 @@
1433575424,1433583615,RU
1433583616,1433591807,UA
1433591808,1433599999,GE
-1433600000,1433602303,DE
-1433602304,1433602319,LU
-1433602320,1433608191,DE
-1433608192,1433610239,EU
+1433600000,1433608191,DE
+1433608192,1433608447,TR
+1433608448,1433608703,NL
+1433608704,1433610239,GB
1433610240,1433612287,US
1433612288,1433614335,GB
1433614336,1433615027,DE
-1433615028,1433615028,EU
+1433615028,1433615028,GB
1433615029,1433615359,DE
-1433615360,1433615871,FR
-1433615872,1433616383,CH
-1433616384,1433624575,AE
+1433615360,1433615615,FR
+1433615616,1433615871,GB
+1433615872,1433616127,CH
+1433616128,1433616383,GB
+1433616384,1433621759,AE
+1433621760,1433622015,IN
+1433622016,1433624575,AE
1433624576,1433632767,LV
1433632768,1433640959,GI
1433640960,1433649151,RU
@@ -58722,27 +18750,13 @@
1433772032,1433788415,SE
1433788416,1433796607,UZ
1433796608,1433804799,GB
-1433804800,1433805823,FR
-1433805824,1433805855,AE
-1433805856,1433805887,US
-1433805888,1433805919,LU
-1433805920,1433806591,FR
-1433806592,1433806623,GB
-1433806624,1433806655,BE
-1433806656,1433806687,IT
-1433806688,1433806719,NL
-1433806720,1433806751,DE
-1433806752,1433806783,ES
-1433806784,1433806815,CH
-1433806816,1433806847,AT
-1433806848,1433812991,FR
+1433804800,1433812991,FR
1433812992,1433821183,BG
1433821184,1433829375,GE
1433829376,1433831423,CZ
1433831424,1433833471,RU
1433833472,1433835519,IT
-1433835520,1433835775,IE
-1433835776,1433837567,GB
+1433835520,1433837567,GB
1433837568,1433839615,DE
1433839616,1433841663,GB
1433841664,1433843711,RU
@@ -58755,18 +18769,12 @@
1433856000,1433858047,GB
1433858048,1433860095,ES
1433860096,1433862143,DE
-1433862144,1433863375,CH
-1433863376,1433863399,GB
-1433863400,1433863423,CH
-1433863424,1433863487,US
-1433863488,1433864191,CH
+1433862144,1433864191,CH
1433864192,1433866239,HU
-1433866240,1433866751,NL
-1433866752,1433867007,GB
-1433867008,1433867521,NL
-1433867522,1433867522,GB
-1433867523,1433867775,NL
-1433867776,1433870335,GB
+1433866240,1433867519,NL
+1433867520,1433867775,GB
+1433867776,1433868287,NL
+1433868288,1433870335,GB
1433870336,1433872383,TR
1433872384,1433874431,IT
1433874432,1433876479,NL
@@ -58780,106 +18788,36 @@
1433890816,1433892863,GB
1433892864,1433894911,MT
1433894912,1433896959,SE
-1433896960,1433897471,NO
-1433897472,1433897727,NL
-1433897728,1433899007,NO
+1433896960,1433899007,NO
1433899008,1433901055,RU
1433901056,1433905151,DE
1433905152,1433907199,FR
1433907200,1433909247,IT
1433909248,1433911295,BE
1433911296,1433913343,ES
-1433913344,1433913875,NL
-1433913876,1433913879,DE
-1433913880,1433914047,NL
-1433914048,1433915135,DE
-1433915136,1433915391,NL
+1433913344,1433915391,NL
1433915392,1433917439,DE
1433917440,1433919487,BE
1433919488,1433921535,GB
-1433921536,1433921735,CH
-1433921736,1433921736,EU
-1433921737,1433923583,CH
-1433923584,1433923711,BE
-1433923712,1433924479,NL
-1433924480,1433925631,BE
+1433921536,1433923583,CH
+1433923584,1433925631,BE
1433925632,1433927679,GB
1433927680,1434189823,RO
1434189824,1434451967,AT
1434451968,1434517503,PL
1434517504,1434550271,DK
1434550272,1434583039,SA
-1434583040,1434611711,BG
+1434583040,1434595327,BG
+1434595328,1434596351,MK
+1434596352,1434611711,BG
1434611712,1434613759,MK
1434613760,1434615807,BG
1434615808,1434648575,IL
1434648576,1434681343,FI
-1434681344,1434681983,DE
-1434681984,1434681999,NL
-1434682000,1434682303,DE
-1434682304,1434682367,NL
-1434682368,1434683327,DE
-1434683328,1434683391,MY
-1434683392,1434685759,DE
-1434685760,1434685951,NL
-1434685952,1434686975,DE
-1434686976,1434687231,NL
-1434687232,1434687359,DE
-1434687360,1434687487,NL
-1434687488,1434687647,DE
-1434687648,1434687679,NL
-1434687680,1434688031,DE
-1434688032,1434688127,NL
-1434688128,1434688143,DE
-1434688144,1434688159,NL
-1434688160,1434688207,DE
-1434688208,1434688223,NL
-1434688224,1434688255,DE
-1434688256,1434689023,NL
-1434689024,1434689279,DE
-1434689280,1434689535,NL
-1434689536,1434689903,DE
-1434689904,1434689919,NL
-1434689920,1434689951,DE
-1434689952,1434690015,NL
-1434690016,1434691071,DE
-1434691072,1434691327,NL
-1434691328,1434692607,DE
-1434692608,1434692671,NL
-1434692672,1434694911,DE
-1434694912,1434695679,NL
-1434695680,1434696447,DE
-1434696448,1434696703,NL
-1434696704,1434698239,DE
-1434698240,1434698367,NL
-1434698368,1434698879,DE
-1434698880,1434699263,NL
-1434699264,1434702079,DE
-1434702080,1434702335,NL
-1434702336,1434702463,DE
-1434702464,1434702591,NL
-1434702592,1434702655,DE
-1434702656,1434702671,NL
-1434702672,1434702783,DE
-1434702784,1434702911,NL
-1434702912,1434702975,DE
-1434702976,1434703039,NL
-1434703040,1434704895,DE
-1434704896,1434705407,NL
-1434705408,1434705663,DE
-1434705664,1434705919,NL
-1434705920,1434708991,DE
-1434708992,1434709247,NL
-1434709248,1434709503,DE
-1434709504,1434709759,NL
-1434709760,1434710015,DE
-1434710016,1434710527,NL
-1434710528,1434712063,DE
-1434712064,1434712575,NL
-1434712576,1434712959,DE
-1434712960,1434712975,NL
-1434712976,1434714111,DE
-1434714112,1434746879,AZ
+1434681344,1434714111,DE
+1434714112,1434717951,AZ
+1434717952,1434718207,GB
+1434718208,1434746879,AZ
1434746880,1434779647,CZ
1434779648,1434812415,GB
1434812416,1434845183,IR
@@ -58892,22 +18830,16 @@
1435238400,1435500543,RU
1435500544,1436024831,NL
1436024832,1436090367,ES
-1436090368,1436101119,TR
-1436101120,1436101375,CY
-1436101376,1436102143,TR
-1436102144,1436102655,CY
-1436102656,1436155903,TR
+1436090368,1436155903,TR
1436155904,1436221439,OM
1436221440,1436286975,ES
1436286976,1436418047,FI
1436418048,1436420095,DE
-1436420096,1436422143,GB
1436422144,1436424191,FR
1436424192,1436426239,CH
1436426240,1436428287,BA
1436428288,1436430335,GB
-1436430336,1436430847,US
-1436430848,1436432383,RU
+1436430336,1436432383,RU
1436432384,1436436479,GB
1436436480,1436438527,LV
1436438528,1436440575,IT
@@ -58916,43 +18848,29 @@
1436444672,1436446719,BE
1436446720,1436450815,FR
1436450816,1436452863,BH
-1436452864,1436453119,NL
-1436453120,1436453314,DE
-1436453315,1436453315,EU
-1436453316,1436453631,DE
-1436453632,1436453887,NL
-1436453888,1436454399,GB
-1436454400,1436454655,NL
-1436454656,1436454911,GB
+1436452864,1436453375,GB
+1436453376,1436453631,DE
+1436453632,1436454911,GB
1436454912,1436456959,AZ
1436456960,1436459007,GB
1436459008,1436461055,NL
1436461056,1436463103,ES
-1436463104,1436465151,DE
+1436463104,1436464383,DE
+1436464384,1436464639,AT
+1436464640,1436465151,DE
1436465152,1436467199,RU
-1436467200,1436469247,DE
+1436467200,1436468223,DE
+1436468224,1436468479,AT
+1436468480,1436469247,DE
1436469248,1436471295,NL
-1436471296,1436471551,BE
-1436471552,1436471615,NL
-1436471616,1436471679,FR
-1436471680,1436471743,BE
-1436471744,1436471807,BR
-1436471808,1436473343,BE
-1436473344,1436473599,RO
-1436473600,1436473855,IT
-1436473856,1436474111,RO
-1436474112,1436474367,IT
-1436474368,1436475391,RO
+1436471296,1436473343,BE
+1436473344,1436475391,RO
1436475392,1436477439,AT
1436477440,1436479487,CH
1436479488,1436481535,RU
1436481536,1436483583,NL
1436483584,1436485631,UA
-1436485632,1436487471,DE
-1436487472,1436487487,AT
-1436487488,1436487623,DE
-1436487624,1436487631,AT
-1436487632,1436487679,DE
+1436485632,1436487679,DE
1436487680,1436489727,IE
1436489728,1436491775,KZ
1436491776,1436495871,RU
@@ -58971,36 +18889,20 @@
1436526592,1436528639,GB
1436528640,1436530687,IT
1436530688,1436532735,GB
-1436532736,1436535039,IT
-1436535040,1436535295,AP
-1436535296,1436535839,IT
-1436535840,1436535855,ET
-1436535856,1436535943,IT
-1436535944,1436535951,ET
-1436535952,1436535999,IT
-1436536000,1436536007,MO
-1436536008,1436536831,IT
+1436532736,1436536831,IT
1436536832,1436538879,GB
1436538880,1436540927,JO
1436540928,1436542975,RU
-1436542976,1436544199,NL
-1436544200,1436544207,HK
-1436544208,1436545023,NL
+1436542976,1436545023,NL
1436545024,1436547071,DE
1436547072,1436549119,GB
-1436549120,1436745727,CZ
-1436745728,1436803071,SK
-1436803072,1436807167,CZ
-1436807168,1436811263,SK
+1436549120,1436680191,CZ
+1436680192,1436811263,SK
1436811264,1437073407,NO
1437073408,1437335551,FR
1437335552,1437597695,RU
1437597696,1438121983,DE
-1438121984,1438127103,NL
-1438127104,1438127359,GB
-1438127360,1438127615,SE
-1438127616,1438127871,BE
-1438127872,1438142463,NL
+1438121984,1438142463,NL
1438142464,1438142719,GB
1438142720,1438187519,NL
1438187520,1438253055,IR
@@ -59009,17 +18911,9 @@
1438384128,1438400511,FI
1438400512,1438433279,SE
1438433280,1438515199,GB
-1438515200,1438519007,DE
-1438519008,1438519039,SI
-1438519040,1438523391,DE
-1438523392,1438524159,NL
-1438524160,1438524415,DE
-1438524416,1438524947,NL
-1438524948,1438524951,DE
-1438524952,1438525335,NL
-1438525336,1438525343,DE
-1438525344,1438525607,NL
-1438525608,1438580735,DE
+1438515200,1438560255,DE
+1438560256,1438562303,US
+1438562304,1438580735,DE
1438580736,1438646271,NL
1438646272,1438662655,RU
1438662656,1438679039,ES
@@ -59036,121 +18930,28 @@
1438810112,1438826495,SE
1438826496,1438842879,FI
1438842880,1438859263,SE
-1438859264,1438860351,DE
-1438860352,1438860415,GB
-1438860416,1438861331,DE
-1438861332,1438861335,US
-1438861336,1438861375,DE
-1438861376,1438861439,US
-1438861440,1438861523,DE
-1438861524,1438861599,US
-1438861600,1438861631,DE
-1438861632,1438861639,US
-1438861640,1438861663,DE
-1438861664,1438861823,US
-1438861824,1438862079,CH
-1438862080,1438862339,DE
-1438862340,1438862359,US
-1438862360,1438862399,DE
-1438862400,1438862475,US
-1438862476,1438862479,DE
-1438862480,1438862599,US
-1438862600,1438862615,DE
-1438862616,1438862679,US
-1438862680,1438862751,DE
-1438862752,1438862775,US
-1438862776,1438862847,DE
-1438862848,1438862879,US
-1438862880,1438869647,DE
-1438869648,1438869651,LV
-1438869652,1438869655,DE
+1438859264,1438869655,DE
1438869656,1438869663,UA
-1438869664,1438874783,DE
-1438874784,1438874791,PA
-1438874792,1438874807,DE
-1438874808,1438874847,PA
-1438874848,1438874863,DE
-1438874864,1438874879,PA
-1438874880,1438875647,DE
-1438875648,1438876159,RU
-1438876160,1438876415,LT
-1438876416,1438876927,RU
-1438876928,1438877183,IQ
-1438877184,1438877439,A2
-1438877440,1438877695,RU
-1438877696,1438877951,LT
-1438877952,1438878975,LB
-1438878976,1438879231,IQ
-1438879232,1438880767,RU
-1438880768,1438881279,IQ
-1438881280,1438882303,RU
-1438882304,1438882559,LT
-1438882560,1438883583,RU
-1438883584,1438883839,AM
-1438883840,1438884351,RU
-1438884352,1438884607,LB
-1438884608,1438884863,IQ
-1438884864,1438885887,RU
-1438885888,1438890239,LT
-1438890240,1438890495,RU
-1438890496,1438890751,IQ
-1438890752,1438892031,RU
-1438892032,1438896127,CH
+1438869664,1438875647,DE
+1438875648,1438877951,RU
+1438877952,1438878207,LB
+1438878208,1438885887,RU
+1438885888,1438889983,LT
+1438889984,1438892031,RU
+1438892032,1438893823,IS
+1438893824,1438894079,CH
+1438894080,1438896127,IS
1438896128,1438900223,AQ
1438900224,1438908415,CH
1438908416,1438924799,GR
1438924800,1438941183,NO
1438941184,1438957567,BG
1438957568,1438973951,EE
-1438973952,1438994551,DE
-1438994552,1438994559,GB
-1438994560,1438994619,DE
-1438994620,1438994623,SE
-1438994624,1438994751,DE
-1438994752,1438994759,GB
-1438994760,1438994763,SE
-1438994764,1438995039,DE
-1438995040,1438995047,GB
-1438995048,1438995067,DE
-1438995068,1438995071,SE
-1438995072,1438995399,DE
-1438995400,1438995407,GB
-1438995408,1438995647,DE
-1438995648,1438995655,GB
-1438995656,1438998697,DE
-1438998698,1438998730,NL
-1438998731,1438998799,DE
-1438998800,1438998814,AT
-1438998815,1438998829,NL
-1438998830,1438998844,CH
-1438998845,1438998859,BE
-1438998860,1438998874,DK
-1438998875,1438998889,ES
-1438998890,1438998904,FI
-1438998905,1438998919,FR
-1438998920,1438998934,GR
-1438998935,1438998949,HU
-1438998950,1438998964,IS
-1438998965,1438998979,IT
-1438998980,1438998994,LI
-1438998995,1438999009,LU
-1438999010,1438999024,GB
-1438999025,1438999039,SE
-1438999040,1438999167,DE
-1438999168,1438999248,NL
-1438999249,1438999252,DE
-1438999253,1438999295,NL
-1438999296,1438999551,DE
-1438999552,1438999807,GB
-1438999808,1439000575,DE
-1439000576,1439000831,NL
-1439000832,1439002367,DE
+1438973952,1439000575,DE
+1439000576,1439001343,NL
+1439001344,1439002367,DE
1439002368,1439002623,NL
-1439002624,1439006567,DE
-1439006568,1439006575,AT
-1439006576,1439006671,DE
-1439006672,1439006675,PL
-1439006676,1439006719,DE
+1439002624,1439006719,DE
1439006720,1439023103,SE
1439023104,1439039487,IS
1439039488,1439055871,IR
@@ -59168,20 +18969,18 @@
1439305728,1439309823,DK
1439309824,1439318015,PL
1439318016,1439322111,DK
-1439322112,1439326207,RO
1439326208,1439330303,PL
1439330304,1439334399,RS
1439334400,1439338495,RU
1439338496,1439342591,PL
-1439342592,1439346687,UA
1439346688,1439350783,RU
-1439350784,1439354879,UA
1439354880,1439358975,PL
1439358976,1439367167,RU
-1439367168,1439375359,NL
-1439375360,1439382527,DE
-1439382528,1439432703,NL
-1439432704,1439498239,RO
+1439367168,1439399935,NL
+1439399936,1439432703,DK
+1439432704,1439477759,RO
+1439477760,1439479807,MD
+1439479808,1439498239,RO
1439498240,1439513599,DE
1439513600,1439514623,GB
1439514624,1439516671,IT
@@ -59190,8 +18989,7 @@
1439518720,1439527935,DE
1439527936,1439528959,GB
1439528960,1439529471,DE
-1439529472,1439529727,GB
-1439529728,1439529983,DE
+1439529472,1439529983,GB
1439529984,1439530239,EG
1439530240,1439534079,DE
1439534080,1439535103,GB
@@ -59220,11 +19018,7 @@
1439629312,1439694847,CZ
1439694848,1439825919,SA
1439825920,1439956991,GB
-1439956992,1440103181,DE
-1440103182,1440103182,DE
-1440103183,1440204799,DE
-1440204800,1440215039,EU
-1440215040,1440251903,DE
+1439956992,1440251903,DE
1440251904,1440284671,SK
1440284672,1440317439,FI
1440317440,1440350207,BG
@@ -59253,27 +19047,7 @@
1441357824,1441366015,AT
1441366016,1441374207,RU
1441374208,1441382399,GB
-1441382400,1441384511,FR
-1441384512,1441384543,US
-1441384544,1441385471,FR
-1441385472,1441385503,US
-1441385504,1441386111,FR
-1441386112,1441386239,IL
-1441386240,1441387519,FR
-1441387520,1441387647,US
-1441387648,1441387903,FR
-1441387904,1441387919,GN
-1441387920,1441387935,FR
-1441387936,1441387951,GB
-1441387952,1441388671,FR
-1441388672,1441388799,CA
-1441388800,1441389055,FR
-1441389056,1441389119,IE
-1441389120,1441389223,FR
-1441389224,1441389231,LU
-1441389232,1441389567,FR
-1441389568,1441389599,LU
-1441389600,1441390591,FR
+1441382400,1441390591,FR
1441390592,1441398783,DK
1441398784,1441415167,RU
1441415168,1441423359,GB
@@ -59282,66 +19056,37 @@
1441439744,1441447935,LV
1441447936,1441456127,BE
1441456128,1441464319,NL
-1441464320,1441468671,SE
-1441468672,1441470719,DK
-1441470720,1441472511,SE
+1441464320,1441468927,SE
+1441468928,1441469183,DK
+1441469184,1441472511,SE
1441472512,1441480703,RU
1441480704,1441488895,TR
-1441488896,1441492223,GB
-1441492224,1441492479,BE
-1441492480,1441497087,GB
+1441488896,1441497087,GB
1441497088,1441505279,IT
1441505280,1441521663,RU
1441521664,1441529855,DK
1441529856,1441538047,RU
-1441538048,1441542111,DE
-1441542112,1441542127,ES
-1441542128,1441542911,DE
-1441542912,1441542927,RO
-1441542928,1441543567,DE
-1441543568,1441543583,CH
-1441543584,1441543599,HR
-1441543600,1441545551,DE
-1441545552,1441545567,AT
-1441545568,1441545887,DE
-1441545888,1441545903,CH
-1441545904,1441546239,DE
+1441538048,1441546239,DE
1441546240,1441554431,DK
1441554432,1441554687,GB
1441554688,1441554943,NL
-1441554944,1441555199,GB
-1441555200,1441555455,DE
-1441555456,1441556735,GB
-1441556736,1441556991,DE
-1441556992,1441557759,GB
-1441557760,1441558015,NL
-1441558016,1441564671,GB
+1441554944,1441556991,GB
+1441556992,1441557503,SE
+1441557504,1441564671,GB
1441564672,1441566719,IQ
1441566720,1441568767,GB
1441568768,1441570815,FR
1441570816,1441579007,RU
-1441579008,1441582159,DE
-1441582160,1441582175,US
-1441582176,1441582975,DE
-1441582976,1441583103,US
-1441583104,1441586431,DE
-1441586432,1441586687,US
-1441586688,1441587199,DE
-1441587200,1441594879,AT
-1441594880,1441595135,DE
-1441595136,1441603583,AT
+1441579008,1441587199,DE
+1441587200,1441603583,AT
1441603584,1441611775,RU
1441611776,1441619967,DE
-1441619968,1441620735,FR
-1441620736,1441620767,ES
-1441620768,1441620863,FR
-1441620864,1441620895,ES
-1441620896,1441620927,PT
-1441620928,1441620959,ES
-1441620960,1441628159,FR
+1441619968,1441628159,FR
1441628160,1441636351,SA
1441636352,1441644543,PL
-1441644544,1441652735,GB
+1441644544,1441651455,GB
+1441651456,1441651711,CA
+1441651712,1441652735,GB
1441652736,1441660927,SK
1441660928,1441669119,ES
1441669120,1441677311,GE
@@ -59350,33 +19095,23 @@
1441693696,1441694719,BR
1441694720,1441695743,DE
1441695744,1441696767,US
-1441696768,1441697023,AP
+1441696768,1441697023,DE
1441697024,1441697791,SG
1441697792,1441698815,US
1441698816,1441701887,DE
1441701888,1441710079,AT
1441710080,1441718271,SE
1441718272,1441726463,DE
-1441726464,1441729023,KW
-1441729024,1441729535,SG
-1441729536,1441734655,KW
+1441726464,1441734655,KW
1441734656,1441742847,RU
1441742848,1441751039,CZ
1441751040,1441759231,DE
-1441759232,1441763327,BG
-1441763328,1441765375,RO
-1441765376,1441767423,BG
+1441759232,1441767423,BG
1441767424,1441775615,IT
-1441775616,1441783807,ES
+1441775616,1441783807,IR
1441783808,1441791999,CZ
-1441792000,1441870847,PT
-1441870848,1441871359,US
-1441871360,1442316287,PT
-1442316288,1442316583,SK
-1442316584,1442316591,DE
-1442316592,1442332927,SK
-1442332928,1442333055,BE
-1442333056,1442381823,SK
+1441792000,1442316287,PT
+1442316288,1442381823,SK
1442381824,1442447359,RU
1442447360,1442512895,IL
1442512896,1442578431,ES
@@ -59385,7 +19120,9 @@
1442709504,1442775039,LV
1442775040,1442779135,PL
1442779136,1442783231,DE
-1442783232,1442787327,NO
+1442783232,1442786559,NO
+1442786560,1442786815,LV
+1442786816,1442787327,NO
1442787328,1442791423,LT
1442791424,1442795519,LV
1442799616,1442803711,LT
@@ -59404,58 +19141,7 @@
1445068800,1445199871,RO
1445199872,1445330943,QA
1445330944,1445396479,LT
-1445396480,1445429247,BE
-1445429248,1445429311,NL
-1445429312,1445430303,BE
-1445430304,1445431295,NL
-1445431296,1445431647,BE
-1445431648,1445431679,NL
-1445431680,1445431807,BE
-1445431808,1445433855,NL
-1445433856,1445433887,BE
-1445433888,1445434111,NL
-1445434112,1445434399,BE
-1445434400,1445434527,NL
-1445434528,1445434559,BE
-1445434560,1445434623,NL
-1445434624,1445435135,BE
-1445435136,1445435395,NL
-1445435396,1445435399,BE
-1445435400,1445435423,NL
-1445435424,1445435431,BE
-1445435432,1445435967,NL
-1445435968,1445435999,BE
-1445436000,1445436287,NL
-1445436288,1445436415,BE
-1445436416,1445436463,NL
-1445436464,1445436511,BE
-1445436512,1445436799,NL
-1445436800,1445436863,BE
-1445436864,1445436895,NL
-1445436896,1445436927,BE
-1445436928,1445436959,NL
-1445436960,1445437182,BE
-1445437183,1445437311,NL
-1445437312,1445437319,BE
-1445437320,1445437439,NL
-1445437440,1445437695,BE
-1445437696,1445437711,NL
-1445437712,1445437743,BE
-1445437744,1445437823,NL
-1445437824,1445438271,BE
-1445438272,1445439999,NL
-1445440000,1445440255,BE
-1445440256,1445442559,NL
-1445442560,1445443327,BE
-1445443328,1445445119,NL
-1445445120,1445445855,BE
-1445445856,1445447679,NL
-1445447680,1445451519,BE
-1445451520,1445451647,NL
-1445451648,1445456126,BE
-1445456127,1445456127,NL
-1445456128,1445458175,BE
-1445458176,1445462015,NL
+1445396480,1445462015,BE
1445462016,1445986303,IE
1445986304,1446051839,DK
1446051840,1446117375,CZ
@@ -59469,668 +19155,56 @@
1446576128,1446608895,IR
1446608896,1446641663,BY
1446641664,1446674431,SI
-1446674432,1446694543,DK
-1446694544,1446694559,SE
-1446694560,1446694591,DK
-1446694592,1446694607,NO
-1446694608,1446694623,GB
-1446694624,1446694639,TH
-1446694640,1446694655,BR
-1446694656,1446706051,DK
-1446706052,1446706056,SE
-1446706057,1446707175,DK
-1446707176,1446707183,NO
-1446707184,1446707199,DK
-1446707200,1446710687,AT
-1446710688,1446710695,CH
-1446710696,1446710799,AT
-1446710800,1446710815,MT
-1446710816,1446710887,AT
-1446710888,1446710895,MT
-1446710896,1446710903,AT
-1446710904,1446710911,MT
-1446710912,1446712783,AT
-1446712784,1446712791,DE
-1446712792,1446716399,AT
-1446716400,1446716407,MT
-1446716408,1446732671,AT
-1446732672,1446732679,IT
-1446732680,1446736503,AT
-1446736504,1446736511,US
-1446736512,1446739967,AT
+1446674432,1446707135,DK
+1446707136,1446707199,NO
+1446707200,1446739967,AT
1446739968,1446772735,HU
1446772736,1446805503,SA
1446805504,1446838271,FI
-1446838272,1446862079,SI
-1446862080,1446862591,HR
-1446862592,1446871039,SI
+1446838272,1446871039,SI
1446871040,1446903807,CZ
-1446903808,1446904063,A2
-1446904064,1446904071,CY
-1446904072,1446904079,LY
-1446904080,1446904087,AF
-1446904088,1446904095,BF
-1446904096,1446904103,SD
-1446904104,1446904111,IQ
-1446904112,1446904119,GN
-1446904120,1446904127,IQ
-1446904128,1446904135,A2
-1446904136,1446904143,LY
-1446904144,1446904151,ER
-1446904152,1446904231,A2
-1446904232,1446904239,IQ
-1446904240,1446904247,A2
-1446904248,1446904255,AF
-1446904256,1446904263,CY
-1446904264,1446904319,A2
-1446904320,1446904335,AE
-1446904336,1446904351,A2
-1446904352,1446904367,AE
-1446904368,1446904383,IQ
-1446904384,1446904399,A2
-1446904400,1446904415,IQ
-1446904416,1446904575,A2
-1446904576,1446904591,SD
-1446904592,1446904599,AF
-1446904600,1446904607,A2
-1446904608,1446904623,SD
-1446904624,1446904639,A2
-1446904640,1446904679,IQ
-1446904680,1446904751,A2
-1446904752,1446904759,NG
-1446904760,1446904799,A2
-1446904800,1446904807,SD
-1446904808,1446904831,A2
-1446904832,1446904835,LY
-1446904836,1446904843,IQ
-1446904844,1446904847,CG
-1446904848,1446904851,AF
-1446904852,1446904855,LY
-1446904856,1446904859,IQ
-1446904860,1446904867,LY
-1446904868,1446904871,IQ
-1446904872,1446904879,A2
-1446904880,1446904883,IQ
-1446904884,1446904887,AF
-1446904888,1446904895,IQ
-1446904896,1446904899,LY
-1446904900,1446904903,A2
-1446904904,1446904907,AF
-1446904908,1446904919,A2
-1446904920,1446904923,LY
-1446904924,1446904927,AF
-1446904928,1446904931,TD
-1446904932,1446904935,A2
-1446904936,1446904939,AO
-1446904940,1446904943,LY
-1446904944,1446904947,IQ
-1446904948,1446904951,LY
-1446904952,1446904955,AF
-1446904956,1446904959,A2
-1446904960,1446904963,IQ
-1446904964,1446904967,TD
-1446904968,1446904971,A2
-1446904972,1446904975,LY
-1446904976,1446904979,CG
-1446904980,1446904983,TG
-1446904984,1446904991,LY
-1446904992,1446904995,IQ
-1446904996,1446905003,A2
-1446905004,1446905007,NG
-1446905008,1446905011,A2
-1446905012,1446905015,AF
-1446905016,1446905019,NG
-1446905020,1446905023,LY
-1446905024,1446905027,A2
-1446905028,1446905031,IQ
-1446905032,1446905035,LY
-1446905036,1446905039,IQ
-1446905040,1446905043,AF
-1446905044,1446905047,IQ
-1446905048,1446905051,LY
-1446905052,1446905059,IQ
-1446905060,1446905067,NG
-1446905068,1446905071,A2
-1446905072,1446905075,NG
-1446905076,1446905083,A2
-1446905084,1446905087,AF
-1446905088,1446905343,A2
-1446905344,1446905351,NG
-1446905352,1446905383,A2
-1446905384,1446905391,SD
-1446905392,1446905583,A2
-1446905584,1446905591,AF
-1446905592,1446905611,A2
-1446905612,1446905615,IQ
-1446905616,1446905619,A2
-1446905620,1446905623,TD
-1446905624,1446905627,A2
-1446905628,1446905631,IQ
-1446905632,1446905635,A2
-1446905636,1446905639,IQ
-1446905640,1446905643,A2
-1446905644,1446905647,IQ
-1446905648,1446905651,A2
-1446905652,1446905655,IQ
-1446905656,1446905659,AF
-1446905660,1446905663,ER
-1446905664,1446905667,LY
-1446905668,1446905675,AF
-1446905676,1446905683,LY
-1446905684,1446905687,A2
-1446905688,1446905691,CF
-1446905692,1446905703,A2
-1446905704,1446905707,IQ
-1446905708,1446905715,A2
-1446905716,1446905719,IQ
-1446905720,1446905723,AF
-1446905724,1446905727,A2
-1446905728,1446905731,IQ
-1446905732,1446905735,AF
-1446905736,1446905739,IQ
-1446905740,1446905743,A2
-1446905744,1446905759,LY
-1446905760,1446905763,ML
-1446905764,1446905767,A2
-1446905768,1446905775,IQ
-1446905776,1446905791,A2
-1446905792,1446905795,TD
-1446905796,1446905799,A2
-1446905800,1446905803,IQ
-1446905804,1446905815,A2
-1446905816,1446905819,LY
-1446905820,1446905823,IQ
-1446905824,1446905831,A2
-1446905832,1446905835,NG
-1446905836,1446905839,IQ
-1446905840,1446905851,A2
-1446905852,1446905855,AF
-1446905856,1446905863,LY
-1446905864,1446905871,SD
-1446905872,1446905911,A2
-1446905912,1446905927,SD
-1446905928,1446905935,A2
-1446905936,1446905943,SD
-1446905944,1446905959,A2
-1446905960,1446905967,AF
-1446905968,1446906023,A2
-1446906024,1446906031,SD
-1446906032,1446906071,A2
-1446906072,1446906079,CY
-1446906080,1446906111,A2
-1446906112,1446906119,IQ
-1446906120,1446906123,A2
-1446906124,1446906131,IQ
-1446906132,1446906135,SD
-1446906136,1446906151,A2
-1446906152,1446906159,AF
-1446906160,1446906167,A2
-1446906168,1446906171,IQ
-1446906172,1446906179,AF
-1446906180,1446906211,A2
-1446906212,1446906215,AF
-1446906216,1446906219,IQ
-1446906220,1446906223,BG
-1446906224,1446906231,A2
-1446906232,1446906239,AF
-1446906240,1446906243,IQ
-1446906244,1446906251,A2
-1446906252,1446906255,IQ
-1446906256,1446906259,A2
-1446906260,1446906263,AF
-1446906264,1446906287,A2
-1446906288,1446906295,IQ
-1446906296,1446906299,A2
-1446906300,1446906303,LY
-1446906304,1446906327,A2
-1446906328,1446906331,IQ
-1446906332,1446906343,A2
-1446906344,1446906347,NG
-1446906348,1446906359,A2
-1446906360,1446906363,SD
-1446906364,1446906391,A2
-1446906392,1446906399,CY
-1446906400,1446906879,A2
1446906880,1446907135,IQ
-1446907136,1446907143,A2
-1446907144,1446907147,AF
-1446907148,1446907151,IQ
-1446907152,1446907159,A2
-1446907160,1446907163,IQ
-1446907164,1446907171,A2
-1446907172,1446907175,IQ
-1446907176,1446907187,A2
-1446907188,1446907191,CG
-1446907192,1446907195,A2
-1446907196,1446907199,LY
-1446907200,1446907211,A2
-1446907212,1446907215,IQ
-1446907216,1446907219,A2
-1446907220,1446907223,BJ
-1446907224,1446907231,A2
-1446907232,1446907243,IQ
-1446907244,1446907251,A2
-1446907252,1446907259,IQ
-1446907260,1446907263,A2
-1446907264,1446907271,IQ
-1446907272,1446907279,A2
-1446907280,1446907283,GA
-1446907284,1446907287,A2
-1446907288,1446907291,AF
-1446907292,1446907307,A2
-1446907308,1446907311,AF
-1446907312,1446907315,A2
-1446907316,1446907319,IQ
-1446907320,1446907323,AF
-1446907324,1446907355,A2
-1446907356,1446907359,IQ
-1446907360,1446907367,A2
-1446907368,1446907368,IQ
-1446907369,1446907371,A2
-1446907372,1446907375,AF
-1446907376,1446907383,A2
-1446907384,1446907387,CI
-1446907388,1446907395,A2
-1446907396,1446907399,IQ
-1446907400,1446907403,A2
-1446907404,1446907407,IQ
-1446907408,1446907415,A2
-1446907416,1446907423,IQ
-1446907424,1446907431,A2
-1446907432,1446907435,IQ
-1446907436,1446907439,A2
-1446907440,1446907443,AF
-1446907444,1446907447,IQ
-1446907448,1446907487,A2
-1446907488,1446907491,IQ
-1446907492,1446907495,TD
-1446907496,1446907519,A2
-1446907520,1446907523,LY
-1446907524,1446907531,A2
-1446907532,1446907535,CI
-1446907536,1446907543,A2
-1446907544,1446907547,LY
-1446907548,1446907551,A2
-1446907552,1446907555,LY
-1446907556,1446907559,A2
-1446907560,1446907563,AF
-1446907564,1446907571,A2
-1446907572,1446907575,AF
-1446907576,1446907579,IQ
-1446907580,1446907583,A2
-1446907584,1446907587,IQ
-1446907588,1446907595,A2
-1446907596,1446907599,IQ
-1446907600,1446907611,A2
-1446907612,1446907615,IQ
-1446907616,1446907619,TD
-1446907620,1446907635,A2
-1446907636,1446907639,IQ
-1446907640,1446907663,A2
-1446907664,1446907667,NG
-1446907668,1446907671,IQ
-1446907672,1446907679,A2
-1446907680,1446907683,LY
-1446907684,1446907687,IQ
-1446907688,1446907691,A2
-1446907692,1446907695,IQ
-1446907696,1446907711,A2
-1446907712,1446907715,IQ
-1446907716,1446907719,AF
-1446907720,1446907735,A2
-1446907736,1446907739,IQ
-1446907740,1446907743,A2
-1446907744,1446907747,IQ
-1446907748,1446907751,A2
-1446907752,1446907755,AF
-1446907756,1446907767,A2
-1446907768,1446907775,IQ
-1446907776,1446907787,A2
-1446907788,1446907791,IQ
-1446907792,1446907811,A2
-1446907812,1446907819,IQ
-1446907820,1446907823,AF
-1446907824,1446907827,A2
-1446907828,1446907831,TD
-1446907832,1446907855,A2
-1446907856,1446907859,AF
-1446907860,1446907871,A2
-1446907872,1446907875,IQ
-1446907876,1446907891,A2
-1446907892,1446907895,AF
-1446907896,1446907899,A2
-1446907900,1446907903,EG
-1446907904,1446907911,A2
-1446907912,1446907919,SD
-1446907920,1446908143,A2
-1446908144,1446908151,AE
-1446908152,1446908159,SD
-1446908160,1446908163,AF
-1446908164,1446908187,A2
-1446908188,1446908191,GH
-1446908192,1446908195,A2
-1446908196,1446908199,IQ
-1446908200,1446908211,A2
-1446908212,1446908215,SD
-1446908216,1446908231,A2
-1446908232,1446908235,LY
-1446908236,1446908247,A2
-1446908248,1446908251,AF
-1446908252,1446908259,A2
-1446908260,1446908263,IQ
-1446908264,1446908267,A2
-1446908268,1446908271,AF
-1446908272,1446908275,A2
-1446908276,1446908279,LY
-1446908280,1446908283,A2
-1446908284,1446908287,AF
-1446908288,1446908299,A2
-1446908300,1446908303,IQ
-1446908304,1446908331,A2
-1446908332,1446908335,NG
-1446908336,1446908343,A2
-1446908344,1446908347,IQ
-1446908348,1446908351,TD
-1446908352,1446908355,IQ
-1446908356,1446908359,A2
-1446908360,1446908363,LY
-1446908364,1446908379,A2
-1446908380,1446908383,IQ
-1446908384,1446908387,A2
-1446908388,1446908391,IQ
-1446908392,1446908423,A2
-1446908424,1446908427,AF
-1446908428,1446908435,A2
-1446908436,1446908443,AF
-1446908444,1446908455,A2
-1446908456,1446908459,LB
-1446908460,1446908479,A2
-1446908480,1446908483,IQ
-1446908484,1446908603,A2
-1446908604,1446908607,CG
-1446908608,1446908631,A2
-1446908632,1446908635,IQ
-1446908636,1446908655,A2
-1446908656,1446908659,IQ
-1446908660,1446908663,A2
-1446908664,1446908667,IQ
-1446908668,1446908683,A2
-1446908684,1446908687,SD
-1446908688,1446908691,IQ
-1446908692,1446908755,A2
-1446908756,1446908759,IQ
-1446908760,1446908787,A2
-1446908788,1446908791,NG
-1446908792,1446908863,A2
-1446908864,1446908871,AF
-1446908872,1446908875,A2
-1446908876,1446908879,AF
-1446908880,1446908919,A2
-1446908920,1446908923,IQ
-1446908924,1446908927,A2
-1446908928,1446908931,IQ
-1446908932,1446908971,A2
-1446908972,1446908975,AF
-1446908976,1446908979,GA
-1446908980,1446908983,AF
-1446908984,1446908991,A2
-1446908992,1446908995,IQ
-1446908996,1446909007,A2
-1446909008,1446909011,IQ
-1446909012,1446909083,A2
-1446909084,1446909087,CG
-1446909088,1446909095,A2
-1446909096,1446909099,TD
-1446909100,1446909111,A2
-1446909112,1446909115,IQ
-1446909116,1446909163,A2
-1446909164,1446909167,IQ
-1446909168,1446909187,A2
-1446909188,1446909191,IQ
-1446909192,1446909203,A2
-1446909204,1446909207,IQ
-1446909208,1446909239,A2
-1446909240,1446909243,LY
-1446909244,1446909295,A2
-1446909296,1446909299,IQ
-1446909300,1446909363,A2
-1446909364,1446909367,IQ
-1446909368,1446909399,A2
-1446909400,1446909403,AF
-1446909404,1446909423,A2
-1446909424,1446909435,AF
-1446909436,1446909443,IQ
-1446909444,1446909447,NG
-1446909448,1446909499,A2
-1446909500,1446909503,IQ
-1446909504,1446909507,LY
-1446909508,1446909511,IQ
-1446909512,1446909515,A2
-1446909516,1446909519,EG
-1446909520,1446909523,CG
-1446909524,1446909527,A2
-1446909528,1446909531,EG
-1446909532,1446909535,A2
-1446909536,1446909539,AF
-1446909540,1446909547,IQ
-1446909548,1446909575,A2
-1446909576,1446909579,AF
-1446909580,1446909599,A2
-1446909600,1446909603,AF
-1446909604,1446909639,A2
-1446909640,1446909643,NG
-1446909644,1446909687,A2
-1446909688,1446909691,AF
-1446909692,1446909739,A2
-1446909740,1446909743,AF
-1446909744,1446909803,A2
-1446909804,1446909807,AF
-1446909808,1446909815,A2
-1446909816,1446909819,AF
-1446909820,1446909827,IQ
-1446909828,1446909967,A2
-1446909968,1446909971,LY
-1446909972,1446909999,A2
-1446910000,1446910003,AF
-1446910004,1446910019,A2
-1446910020,1446910023,IQ
-1446910024,1446910035,A2
-1446910036,1446910039,NG
-1446910040,1446910055,A2
-1446910056,1446910059,ZM
-1446910060,1446910111,A2
-1446910112,1446910115,NG
-1446910116,1446910139,A2
-1446910140,1446910143,NG
-1446910144,1446910163,A2
-1446910164,1446910167,NG
-1446910168,1446910187,A2
-1446910188,1446910191,IQ
-1446910192,1446910195,A2
-1446910196,1446910199,AF
-1446910200,1446910215,A2
-1446910216,1446910219,IQ
-1446910220,1446910223,A2
-1446910224,1446910227,IQ
-1446910228,1446910251,A2
-1446910252,1446910255,IQ
-1446910256,1446910275,A2
-1446910276,1446910279,IQ
-1446910280,1446910283,A2
-1446910284,1446910287,IQ
-1446910288,1446910303,A2
-1446910304,1446910307,IQ
-1446910308,1446910311,AF
-1446910312,1446910335,A2
-1446910336,1446910339,AF
-1446910340,1446910347,A2
-1446910348,1446910351,GA
-1446910352,1446910359,A2
-1446910360,1446910363,IQ
-1446910364,1446910375,A2
-1446910376,1446910379,AF
-1446910380,1446910459,A2
-1446910460,1446910463,LY
-1446910464,1446910471,A2
-1446910472,1446910479,LY
-1446910480,1446910487,EG
-1446910488,1446910495,A2
-1446910496,1446910503,NG
-1446910504,1446910599,A2
-1446910600,1446910607,NG
-1446910608,1446910623,A2
-1446910624,1446910639,AF
-1446910640,1446910695,A2
-1446910696,1446910711,SD
-1446910712,1446910719,A2
1446910720,1446911231,IQ
-1446911232,1446911235,A2
-1446911236,1446911239,IQ
-1446911240,1446911255,A2
-1446911256,1446911259,LY
-1446911260,1446911263,AF
-1446911264,1446911267,IQ
-1446911268,1446911271,AF
-1446911272,1446911303,A2
-1446911304,1446911307,IQ
-1446911308,1446911319,A2
-1446911320,1446911323,AF
-1446911324,1446911343,A2
-1446911344,1446911347,IQ
-1446911348,1446911351,LY
-1446911352,1446911363,A2
-1446911364,1446911367,LY
-1446911368,1446911395,A2
-1446911396,1446911399,AF
-1446911400,1446911403,A2
-1446911404,1446911407,AF
-1446911408,1446911411,LY
-1446911412,1446911423,A2
-1446911424,1446911427,AF
-1446911428,1446911435,A2
-1446911436,1446911439,SD
-1446911440,1446911443,A2
-1446911444,1446911447,IQ
-1446911448,1446911459,A2
-1446911460,1446911463,LY
-1446911464,1446911475,A2
-1446911476,1446911479,ER
-1446911480,1446911483,CG
-1446911484,1446911743,A2
-1446911744,1446911751,IQ
-1446911752,1446911763,A2
-1446911764,1446911767,LY
-1446911768,1446911771,A2
-1446911772,1446911775,AF
-1446911776,1446911779,A2
-1446911780,1446911783,AF
-1446911784,1446911787,A2
-1446911788,1446911791,AF
-1446911792,1446911795,A2
-1446911796,1446911799,IQ
-1446911800,1446911803,NG
-1446911804,1446911819,A2
-1446911820,1446911823,IQ
-1446911824,1446911827,A2
-1446911828,1446911831,IQ
-1446911832,1446911835,A2
-1446911836,1446911843,IQ
-1446911844,1446911847,A2
-1446911848,1446911855,IQ
-1446911856,1446911859,AF
-1446911860,1446911867,A2
-1446911868,1446911871,LY
-1446911872,1446911875,AF
-1446911876,1446911903,A2
-1446911904,1446911907,AF
-1446911908,1446911947,A2
-1446911948,1446911951,IQ
-1446911952,1446911955,A2
-1446911956,1446911959,IQ
-1446911960,1446911963,A2
-1446911964,1446911967,IQ
-1446911968,1446911987,A2
-1446911988,1446911995,AF
-1446911996,1446912003,A2
-1446912004,1446912007,AF
-1446912008,1446912011,A2
-1446912012,1446912015,IQ
-1446912016,1446912027,A2
-1446912028,1446912031,AF
-1446912032,1446912035,A2
-1446912036,1446912039,AF
-1446912040,1446912043,IQ
-1446912044,1446912047,CG
-1446912048,1446912051,AF
-1446912052,1446912055,ER
-1446912056,1446912059,A2
-1446912060,1446912063,NG
-1446912064,1446912067,AF
-1446912068,1446912071,A2
-1446912072,1446912075,IQ
-1446912076,1446912079,A2
-1446912080,1446912083,IQ
-1446912084,1446912087,AF
-1446912088,1446912095,A2
-1446912096,1446912103,AF
-1446912104,1446912115,A2
-1446912116,1446912119,LY
-1446912120,1446912151,A2
-1446912152,1446912155,CF
-1446912156,1446912163,A2
-1446912164,1446912167,IQ
-1446912168,1446912183,A2
-1446912184,1446912187,AF
-1446912188,1446912191,IQ
-1446912192,1446912195,A2
-1446912196,1446912203,IQ
-1446912204,1446912215,A2
-1446912216,1446912219,IQ
-1446912220,1446912239,A2
-1446912240,1446912247,IQ
-1446912248,1446912251,AF
-1446912252,1446912255,IQ
-1446912256,1446912263,AF
-1446912264,1446912295,IQ
-1446912296,1446912311,AF
-1446912312,1446912319,A2
-1446912320,1446912335,IQ
-1446912336,1446912343,KW
-1446912344,1446912367,IQ
-1446912368,1446912375,A2
-1446912376,1446912391,AF
-1446912392,1446912399,GA
-1446912400,1446912415,AF
-1446912416,1446912423,A2
-1446912424,1446912431,AF
-1446912432,1446920191,A2
1446920192,1446936575,RU
1446936576,1446952959,NO
1446952960,1446969343,QA
1446969344,1446985727,GB
1446985728,1447010303,PL
1447010304,1447018495,LV
-1447018496,1447019007,CZ
-1447019008,1447019023,BZ
-1447019024,1447026687,CZ
-1447026688,1447076354,FR
-1447076355,1447076357,FR
-1447076358,1448083455,FR
+1447018496,1447026687,CZ
+1447026688,1448083455,FR
1448083456,1449132031,NL
1449132032,1449394175,AE
1449394176,1449459711,LT
1449459712,1449525247,HU
1449525248,1449590783,RU
1449590784,1449656319,DE
-1449656320,1449808639,RO
-1449808640,1449808895,UA
-1449808896,1449840639,RO
+1449656320,1449706495,RO
+1449706496,1449707519,MD
+1449707520,1449736191,RO
+1449736192,1449738239,MD
+1449738240,1449742335,RO
+1449742336,1449744383,MD
+1449744384,1449765887,RO
+1449765888,1449766911,MD
+1449766912,1449775103,RO
+1449775104,1449776127,MD
+1449776128,1449819135,RO
+1449819136,1449820159,MD
+1449820160,1449824255,RO
+1449824256,1449826303,MD
+1449826304,1449840639,RO
1449840640,1449852927,MD
-1449852928,1449918463,RO
+1449852928,1449869311,RO
+1449869312,1449870335,MD
+1449870336,1449893887,RO
+1449893888,1449895935,MD
+1449895936,1449918463,RO
1449918464,1449951231,JO
1449951232,1449983999,TR
1449984000,1449992191,NL
-1449992192,1450000383,IR
+1449992192,1450000127,IR
+1450000128,1450000383,GB
1450000384,1450008575,HU
1450008576,1450016767,ES
1450016768,1450024959,IT
@@ -60141,16 +19215,11 @@
1450057728,1450065919,EE
1450065920,1450074111,DE
1450074112,1450082303,RU
-1450082304,1450084351,IT
-1450084352,1450085119,A2
-1450085120,1450090495,IT
+1450082304,1450090495,IT
1450090496,1450106879,RU
1450106880,1450115071,SK
1450115072,1450123263,RU
-1450123264,1450125231,AT
-1450125232,1450125239,DE
-1450125240,1450125247,US
-1450125248,1450131455,AT
+1450123264,1450131455,AT
1450131456,1450139647,UA
1450139648,1450147839,PL
1450147840,1450151935,CH
@@ -60159,7 +19228,6 @@
1450156032,1450164223,GB
1450164224,1450166271,SA
1450166272,1450168319,PL
-1450168320,1450170367,EU
1450170368,1450172415,GB
1450172416,1450174463,UA
1450174464,1450176511,DE
@@ -60169,17 +19237,11 @@
1450311680,1450442751,FI
1450442752,1450704895,CH
1450704896,1451229183,RO
-1451229184,1455204703,GB
-1455204704,1455204735,GG
-1455204736,1455423487,GB
+1451229184,1455423487,GB
1455423488,1459617791,FR
1459617792,1461714943,IT
1461714944,1462763519,IE
-1462763520,1463162611,DK
-1463162612,1463162612,US
-1463162613,1463162613,DK
-1463162614,1463162614,US
-1463162615,1463812095,DK
+1462763520,1463812095,DK
1463812096,1464074239,BE
1464074240,1464336383,IL
1464336384,1464467455,DK
@@ -60197,18 +19259,21 @@
1465974784,1466007551,HU
1466007552,1466040319,BG
1466040320,1466073087,EE
-1466073088,1466092831,FR
-1466092832,1466092863,GB
-1466092864,1466093023,FR
-1466093024,1466093039,BE
-1466093040,1466097663,FR
+1466073088,1466097663,FR
1466097664,1466099711,ES
1466099712,1466101759,PL
1466101760,1466103807,DE
-1466103808,1466104575,GB
-1466104576,1466104831,FR
-1466104832,1466105343,BE
-1466105344,1466105855,GB
+1466103808,1466104116,FR
+1466104117,1466104117,GB
+1466104118,1466104442,FR
+1466104443,1466104443,GB
+1466104444,1466104467,FR
+1466104468,1466104468,GB
+1466104469,1466104942,FR
+1466104943,1466104943,BE
+1466104944,1466105343,FR
+1466105344,1466105599,GB
+1466105600,1466105855,FR
1466105856,1466122239,PL
1466122240,1466130431,LV
1466130432,1466138623,PL
@@ -60223,9 +19288,7 @@
1466265600,1466269695,HU
1466269696,1466302463,SA
1466302464,1466335231,GB
-1466335232,1466367631,CH
-1466367632,1466367639,AT
-1466367640,1466367999,CH
+1466335232,1466367999,CH
1466368000,1466400767,PT
1466400768,1466433535,RU
1466433536,1466499071,DK
@@ -60235,23 +19298,10 @@
1466571896,1466589183,DE
1466589184,1466590207,FR
1466590208,1466591999,GB
-1466592000,1466592255,PL
-1466592256,1466592511,FR
-1466592512,1466592767,GB
-1466592768,1466592895,FR
-1466592896,1466593023,GB
-1466593024,1466606847,DE
-1466606848,1466607103,FR
-1466607104,1466608895,DE
-1466608896,1466609151,ES
-1466609152,1466613759,DE
+1466592000,1466613759,DE
1466613760,1466615807,ES
1466615808,1466616575,GB
-1466616576,1466617343,ES
-1466617344,1466617471,FR
-1466617472,1466617599,GB
-1466617600,1466617855,ES
-1466617856,1466630143,DE
+1466616576,1466630143,DE
1466630144,1466695679,IR
1466695680,1466761215,FI
1466761216,1466826751,SA
@@ -60267,44 +19317,9 @@
1467285504,1467301887,RU
1467301888,1467318271,GB
1467318272,1467334655,RU
-1467334656,1467340959,GB
-1467340960,1467340991,US
-1467340992,1467342975,GB
-1467342976,1467343103,EG
-1467343104,1467344639,GB
-1467344640,1467344895,ZA
-1467344896,1467347999,GB
-1467348000,1467348031,US
-1467348032,1467349887,GB
-1467349888,1467349903,CH
-1467349904,1467350527,GB
-1467350528,1467350783,CH
-1467350784,1467351039,GB
+1467334656,1467351039,GB
1467351040,1467367423,NO
-1467367424,1467367615,DE
-1467367616,1467367647,SE
-1467367648,1467367871,DE
-1467367872,1467367903,SE
-1467367904,1467367935,DE
-1467367936,1467368191,SI
-1467368192,1467368319,DK
-1467368320,1467368447,DE
-1467368448,1467368703,DK
-1467368704,1467369519,DE
-1467369520,1467369535,RU
-1467369536,1467369647,DE
-1467369648,1467369663,CH
-1467369664,1467369759,DE
-1467369760,1467369791,HR
-1467369792,1467369855,SE
-1467369856,1467369871,RU
-1467369872,1467369887,DE
-1467369888,1467369903,RU
-1467369904,1467369919,DE
-1467369920,1467369951,SG
-1467369952,1467369983,DE
-1467369984,1467370015,DK
-1467370016,1467383807,DE
+1467367424,1467383807,DE
1467383808,1467400191,BG
1467400192,1467416575,RU
1467416576,1467432959,PL
@@ -60312,26 +19327,13 @@
1467449344,1467457535,SI
1467457536,1467465727,EE
1467465728,1467465759,NL
-1467465760,1467465791,AT
+1467465760,1467465791,DE
1467465792,1467465799,NL
-1467465800,1467465807,AT
-1467465808,1467465823,DE
-1467465824,1467465855,AT
-1467465856,1467465983,DE
+1467465800,1467465983,DE
1467465984,1467466015,NL
-1467466016,1467466023,DE
-1467466024,1467466031,AT
-1467466032,1467466111,NL
-1467466112,1467466143,DE
-1467466144,1467466175,NL
-1467466176,1467466215,DE
-1467466216,1467466223,VG
-1467466224,1467466239,NL
-1467466240,1467466271,DE
-1467466272,1467466751,NL
-1467466752,1467467071,DE
-1467467072,1467467103,CH
-1467467104,1467472895,DE
+1467466016,1467466495,DE
+1467466496,1467466751,NL
+1467466752,1467472895,DE
1467472896,1467473919,NL
1467473920,1467482111,RU
1467482112,1467613183,BG
@@ -60340,16 +19342,10 @@
1467875328,1467940863,BG
1467940864,1468006399,GB
1468006400,1472200703,DE
-1472200704,1472226463,IE
-1472226464,1472226479,GB
-1472226480,1472259071,IE
+1472200704,1472259071,IE
1472259072,1472259327,GB
-1472259328,1472264799,IE
-1472264800,1472264807,GB
-1472264808,1472266239,IE
-1472266240,1472314335,DE
-1472314336,1472314343,A2
-1472314344,1472331775,DE
+1472259328,1472266239,IE
+1472266240,1472331775,DE
1472331776,1472397311,GB
1472397312,1472462847,NL
1472462848,1472528383,PT
@@ -60376,28 +19372,18 @@
1474723840,1474756607,SA
1474756608,1474822143,FR
1474822144,1474887679,IE
-1474887680,1474944527,NL
-1474944528,1474944535,US
-1474944536,1474953215,NL
-1474953216,1474968895,DE
-1474968896,1474968903,A2
-1474968904,1475016447,DE
-1475016448,1475016703,A2
-1475016704,1475018751,DE
+1474887680,1474953215,NL
+1474953216,1475018751,DE
1475018752,1475084287,ES
1475084288,1475086335,NL
1475086336,1475092479,RU
1475092480,1475094527,CY
1475094528,1475096575,RU
1475096576,1475098623,BH
-1475098624,1475101695,GB
-1475101696,1475102207,ZA
-1475102208,1475102719,GB
+1475098624,1475102719,GB
1475102720,1475104767,FR
1475104768,1475106815,RU
-1475106816,1475107583,SE
-1475107584,1475107839,LU
-1475107840,1475108863,SE
+1475106816,1475108863,SE
1475108864,1475110911,NL
1475110912,1475112959,DE
1475112960,1475115007,AT
@@ -60424,85 +19410,44 @@
1475151872,1475153919,BE
1475153920,1475155967,GB
1475155968,1475158015,NL
-1475158016,1475159551,IS
-1475159552,1475160063,GB
+1475158016,1475160063,IS
1475160064,1475162111,RU
1475162112,1475170303,GB
1475170304,1475172351,ES
1475172352,1475174399,DE
-1475174400,1475175047,NL
-1475175048,1475175055,US
-1475175056,1475176447,NL
+1475174400,1475176447,NL
1475176448,1475178495,RO
1475178496,1475180543,RU
-1475180544,1475181343,DE
-1475181344,1475181375,LU
-1475181376,1475181455,DE
-1475181456,1475181471,SC
-1475181472,1475181519,DE
-1475181520,1475181535,GB
-1475181536,1475181551,NL
-1475181552,1475181855,DE
-1475181856,1475181887,LU
-1475181888,1475181919,DE
-1475181920,1475181951,LU
-1475181952,1475182079,DE
-1475182080,1475182335,RO
-1475182336,1475184639,DE
+1475180544,1475184639,DE
1475184640,1475186687,RU
1475186688,1475188735,GB
1475188736,1475190783,SE
1475190784,1475192831,GB
1475192832,1475194879,CH
1475194880,1475196927,DE
-1475196928,1475198143,FR
-1475198144,1475198175,GB
-1475198176,1475198975,FR
+1475196928,1475198975,FR
1475198976,1475201023,BH
1475201024,1475203071,RS
1475203072,1475205119,SE
1475205120,1475205887,DE
1475205888,1475206143,US
-1475206144,1475206399,DE
-1475206400,1475206655,AP
-1475206656,1475207151,DE
+1475206144,1475207151,DE
1475207152,1475207183,US
-1475207184,1475207263,AE
-1475207264,1475207295,US
-1475207296,1475207423,AE
-1475207424,1475207679,GR
-1475207680,1475208191,SA
-1475208192,1475209215,AE
+1475207184,1475209215,AE
1475209216,1475211263,UZ
1475211264,1475213311,DE
1475213312,1475215359,FR
1475215360,1475223551,IT
-1475223552,1475229695,NO
-1475229696,1475229759,SE
-1475229760,1475229951,NO
-1475229952,1475230255,SE
-1475230256,1475230263,NO
-1475230264,1475230399,SE
-1475230400,1475230975,NO
-1475230976,1475231023,SE
-1475231024,1475233791,NO
-1475233792,1475235071,GB
-1475235072,1475235327,IE
-1475235328,1475235839,GB
-1475235840,1475236863,IE
-1475236864,1475237119,GB
-1475237120,1475237887,IE
+1475223552,1475226495,SE
+1475226496,1475227647,NO
+1475227648,1475231743,SE
+1475231744,1475233791,NO
+1475233792,1475235839,GB
+1475235840,1475237887,IE
1475237888,1475239935,ES
1475239936,1475241983,RU
-1475241984,1475242239,MC
-1475242240,1475243775,FR
-1475243776,1475244031,MC
-1475244032,1475244287,DE
-1475244288,1475244543,SD
-1475244544,1475244799,FR
-1475244800,1475245055,LB
-1475245056,1475245311,US
-1475245312,1475245823,DE
+1475241984,1475244031,FR
+1475244032,1475245823,DE
1475245824,1475246079,RU
1475246080,1475248127,CH
1475248128,1475250175,JO
@@ -60525,7 +19470,6 @@
1475284992,1475287039,GB
1475287040,1475291135,RU
1475291136,1475293183,PL
-1475293184,1475295231,GB
1475295232,1475297279,SK
1475297280,1475299327,DK
1475299328,1475301375,PL
@@ -60562,189 +19506,49 @@
1475493888,1475510271,RU
1475510272,1475543039,GB
1475543040,1475559423,RO
-1475559424,1475562751,GR
-1475562752,1475563007,BG
-1475563008,1475564031,GR
-1475564032,1475564287,BG
-1475564288,1475566591,GR
-1475566592,1475566847,BG
-1475566848,1475570687,GR
-1475570688,1475570943,BG
-1475570944,1475571711,GR
-1475571712,1475573247,BG
-1475573248,1475573503,GR
-1475573504,1475574015,BG
-1475574016,1475574271,GR
-1475574272,1475575039,BG
-1475575040,1475575807,GR
+1475559424,1475571711,GR
+1475571712,1475572735,BG
+1475572736,1475575807,GR
1475575808,1475592191,AT
1475592192,1475608575,GB
1475608576,1475624959,RU
-1475624960,1475627519,JE
-1475627520,1475627655,GB
-1475627656,1475627663,JE
-1475627664,1475627688,GB
-1475627689,1475627695,JE
-1475627696,1475627775,GB
-1475627776,1475628031,JE
-1475628032,1475628287,GB
-1475628288,1475634431,JE
-1475634432,1475634495,GB
-1475634496,1475634559,JE
-1475634560,1475634719,GB
-1475634720,1475634727,JE
-1475634728,1475634735,GB
-1475634736,1475634751,JE
-1475634752,1475634759,GB
-1475634760,1475634799,JE
-1475634800,1475634815,GB
-1475634816,1475634967,JE
-1475634968,1475634975,GB
-1475634976,1475636287,JE
-1475636288,1475636399,GB
-1475636400,1475636415,JE
-1475636416,1475636431,GB
-1475636432,1475636447,JE
-1475636448,1475636479,GB
-1475636480,1475636735,JE
-1475636736,1475637503,GB
-1475637504,1475639039,JE
-1475639040,1475639216,GB
-1475639217,1475639223,JE
-1475639224,1475639263,GB
-1475639264,1475639271,BB
-1475639272,1475639279,JE
-1475639280,1475639287,GB
-1475639288,1475639295,JE
-1475639296,1475639343,GB
-1475639344,1475639359,JE
-1475639360,1475639375,GB
-1475639376,1475639383,JE
-1475639384,1475639527,GB
-1475639528,1475639543,JE
-1475639544,1475639595,GB
-1475639596,1475639599,JE
-1475639600,1475639807,GB
-1475639808,1475641087,JE
-1475641088,1475641215,GB
-1475641216,1475641343,JE
+1475624960,1475637303,JE
+1475637304,1475637311,GB
+1475637312,1475637471,JE
+1475637472,1475637479,GB
+1475637480,1475638783,JE
+1475638784,1475639039,GB
+1475639040,1475639391,JE
+1475639392,1475639399,GB
+1475639400,1475639479,JE
+1475639480,1475639487,GB
+1475639488,1475639559,JE
+1475639560,1475639567,GB
+1475639568,1475639583,JE
+1475639584,1475639591,GB
+1475639592,1475639695,JE
+1475639696,1475639703,GB
+1475639704,1475641343,JE
1475641344,1475657727,UA
1475657728,1475674111,SK
1475674112,1475690495,DE
1475690496,1475706879,CH
1475706880,1475723263,RU
-1475723264,1475725311,GB
-1475725312,1475726527,RU
-1475726528,1475726575,GB
-1475726576,1475727167,RU
-1475727168,1475727343,GB
-1475727344,1475727359,RU
-1475727360,1475727391,FI
-1475727392,1475727615,GB
-1475727616,1475727623,FI
-1475727624,1475727631,GB
-1475727632,1475727639,FI
-1475727640,1475727647,GB
-1475727648,1475727663,FI
-1475727664,1475727735,GB
-1475727736,1475727743,RU
-1475727744,1475727807,GB
-1475727808,1475727871,FI
-1475727872,1475728383,GB
-1475728384,1475728511,CH
-1475728512,1475728767,GB
-1475728768,1475728783,FR
-1475728784,1475728887,GB
-1475728888,1475728895,RU
-1475728896,1475729087,GB
-1475729088,1475729103,DE
-1475729104,1475729135,GB
-1475729136,1475729143,RU
-1475729144,1475729151,GB
-1475729152,1475729215,AT
-1475729216,1475729343,GB
-1475729344,1475729359,RU
-1475729360,1475729391,GB
-1475729392,1475729407,RU
-1475729408,1475729536,UA
-1475729537,1475729647,GB
-1475729648,1475729671,UA
-1475729672,1475729679,GB
-1475729680,1475729687,UA
-1475729688,1475729919,GB
-1475729920,1475730431,UA
-1475730432,1475730495,RU
-1475730496,1475731455,UA
-1475731456,1475732479,GB
-1475732480,1475732991,RU
-1475732992,1475734271,GB
-1475734272,1475734279,RU
-1475734280,1475734783,GB
-1475734784,1475734791,UA
-1475734792,1475734799,RU
-1475734800,1475734807,UA
-1475734808,1475734815,RU
-1475734816,1475734823,UA
-1475734824,1475734831,RU
-1475734832,1475734911,UA
-1475734912,1475734919,RU
-1475734920,1475734991,UA
-1475734992,1475734999,RU
-1475735000,1475735039,UA
-1475735040,1475735295,GB
-1475735296,1475735319,UA
-1475735320,1475735327,RU
-1475735328,1475735343,UA
-1475735344,1475735351,RU
-1475735352,1475735367,UA
-1475735368,1475735375,RU
-1475735376,1475735383,UA
-1475735384,1475735391,RU
-1475735392,1475735439,UA
-1475735440,1475735455,RU
-1475735456,1475735551,UA
-1475735552,1475735807,US
-1475735808,1475735999,RU
-1475736000,1475736063,GB
-1475736064,1475736127,LV
-1475736128,1475736191,EE
-1475736192,1475736255,GB
-1475736256,1475736319,HU
-1475736320,1475736447,RU
-1475736448,1475736551,UA
-1475736552,1475736831,RU
-1475736832,1475736959,GB
-1475736960,1475737023,FR
-1475737024,1475737087,PL
-1475737088,1475737151,NL
-1475737152,1475737183,CZ
-1475737184,1475737191,RU
-1475737192,1475737215,CZ
-1475737216,1475737255,DE
-1475737256,1475737263,RU
-1475737264,1475737267,DE
-1475737268,1475737279,RU
-1475737280,1475737343,AT
-1475737344,1475737399,UA
-1475737400,1475737407,RU
-1475737408,1475737471,UA
-1475737472,1475737479,RU
-1475737480,1475737487,UA
-1475737488,1475737495,RU
-1475737496,1475737503,UA
-1475737504,1475737519,RU
-1475737520,1475737543,UA
-1475737544,1475737551,RU
-1475737552,1475737583,UA
-1475737584,1475737591,RU
-1475737592,1475737599,UA
-1475737600,1475737655,FI
-1475737656,1475737663,RU
-1475737664,1475737727,FI
-1475737728,1475737735,RU
-1475737736,1475737855,FI
-1475737856,1475738111,SE
-1475738112,1475739647,RU
+1475723264,1475724866,GB
+1475724867,1475724867,RU
+1475724868,1475724869,GB
+1475724870,1475724870,RU
+1475724871,1475725055,GB
+1475725056,1475725311,RU
+1475725312,1475726079,GB
+1475726080,1475726335,RU
+1475726336,1475729663,GB
+1475729664,1475729671,UA
+1475729672,1475731007,GB
+1475731008,1475731071,UA
+1475731072,1475738111,GB
+1475738112,1475738879,RU
+1475738880,1475739647,GB
1475739648,1475756031,BG
1475756032,1475772415,GB
1475772416,1475788799,LV
@@ -60761,11 +19565,7 @@
1475870720,1475878911,NO
1475878912,1475887103,IT
1475887104,1475895295,PL
-1475895296,1475895551,GB
-1475895552,1475897343,IE
-1475897344,1475899903,GB
-1475899904,1475901439,IE
-1475901440,1475903487,CH
+1475895296,1475903487,GB
1475903488,1475911679,IR
1475911680,1475919871,MD
1475919872,1475921983,IT
@@ -60778,33 +19578,14 @@
1475927632,1475927647,FR
1475927648,1475928063,IT
1475928064,1475952639,RU
-1475952640,1475953151,AE
-1475953152,1475953407,A2
-1475953408,1475954175,GB
+1475952640,1475954175,GB
1475954176,1475954687,NO
-1475954688,1475954943,A2
-1475954944,1475955199,GB
-1475955200,1475955839,NG
-1475955840,1475955967,GH
-1475955968,1475956223,GB
-1475956224,1475956607,NG
-1475956608,1475956735,GH
-1475956736,1475957503,GB
-1475957504,1475957759,IN
-1475957760,1475958015,AF
-1475958016,1475958527,GB
+1475954688,1475955247,GB
+1475955248,1475955255,NG
+1475955256,1475958527,GB
1475958528,1475958783,NO
-1475958784,1475959039,GB
-1475959040,1475959047,US
-1475959048,1475959295,A2
-1475959296,1475959647,GB
-1475959648,1475959743,A2
-1475959744,1475960207,GB
-1475960208,1475960319,A2
-1475960320,1475960831,GB
-1475960832,1475965103,NL
-1475965104,1475965119,IT
-1475965120,1475969023,NL
+1475958784,1475960831,GB
+1475960832,1475969023,NL
1475969024,1475977215,CZ
1475977216,1475985407,SE
1475985408,1476009983,RU
@@ -60815,38 +19596,28 @@
1476042752,1476050943,PL
1476050944,1476067327,RU
1476067328,1476075519,TR
-1476075520,1476079555,NL
-1476079556,1476079557,DE
-1476079558,1476083711,NL
+1476075520,1476083711,NL
1476083712,1476116479,RU
1476116480,1476124671,SE
1476124672,1476132863,PL
-1476132864,1476134911,FR
-1476134912,1476135167,GB
-1476135168,1476141055,FR
+1476132864,1476141055,FR
1476141056,1476149247,GB
1476149248,1476157439,NO
-1476157440,1476159231,BH
-1476159232,1476159487,JO
-1476159488,1476159695,GB
-1476159696,1476159727,BH
-1476159728,1476159951,GB
-1476159952,1476159983,BH
-1476159984,1476165119,GB
-1476165120,1476165375,BH
-1476165376,1476165631,JO
+1476157440,1476160511,BH
+1476160512,1476164607,GB
+1476164608,1476165631,BH
1476165632,1476173823,HR
1476173824,1476182015,BG
-1476182016,1476190207,IE
+1476182016,1476186367,GB
+1476186368,1476186383,IE
+1476186384,1476190207,GB
1476190208,1476198399,BY
1476198400,1476206591,RU
1476206592,1476214783,GE
1476214784,1476222975,SE
1476222976,1476231167,IT
1476231168,1476239359,NL
-1476239360,1476245759,DE
-1476245760,1476246015,PL
-1476246016,1476247551,DE
+1476239360,1476247551,DE
1476247552,1476255743,RU
1476255744,1476257791,ES
1476257792,1476259839,FR
@@ -60857,17 +19628,11 @@
1476288512,1476296703,LU
1476296704,1476304895,RU
1476304896,1476313087,BG
-1476313088,1476315135,FI
+1476313088,1476315135,DE
1476315136,1476316159,US
-1476316160,1476316671,SG
-1476316672,1476317183,CN
-1476317184,1476317695,FI
-1476317696,1476318207,DE
-1476318208,1476318463,FI
-1476318464,1476318719,DE
-1476318720,1476318975,FI
-1476318976,1476319231,SG
-1476319232,1476321279,FI
+1476316160,1476317183,FI
+1476317184,1476321151,DE
+1476321152,1476321279,FI
1476321280,1476329471,MC
1476329472,1476337663,RU
1476337664,1476345855,NL
@@ -60878,46 +19643,38 @@
1476378624,1476386815,KZ
1476386816,1476395007,RU
1476395008,1478492159,ES
-1478492160,1478534087,IT
-1478534088,1478534095,FR
-1478534096,1478534951,IT
-1478534952,1478534975,FR
-1478534976,1478535471,IT
-1478535472,1478535479,FR
-1478535480,1478869511,IT
-1478869512,1478869519,FR
-1478869520,1478870167,IT
-1478870168,1478870175,FR
-1478870176,1478872119,IT
-1478872120,1478872127,FR
-1478872128,1479016191,IT
-1479016192,1479016447,US
-1479016448,1479400703,IT
-1479400704,1479401471,US
-1479401472,1479898367,IT
+1478492160,1478772671,IT
+1478772672,1478772675,SI
+1478772676,1478912623,IT
+1478912624,1478912631,SI
+1478912632,1479296487,IT
+1479296488,1479296495,SI
+1479296496,1479392487,IT
+1479392488,1479392495,SI
+1479392496,1479421151,IT
+1479421152,1479421159,SI
+1479421160,1479898367,IT
1479898368,1479898623,US
1479898624,1480589311,IT
-1480589312,1481633041,DE
-1481633042,1481633042,DE
-1481633043,1481637887,DE
+1480589312,1481637887,DE
1481637888,1481646079,SE
1481646080,1481654271,RU
1481654272,1481662463,IT
1481662464,1481678847,BG
-1481678848,1481679743,SE
-1481679744,1481679775,GB
-1481679776,1481680639,SE
-1481680640,1481680643,GB
-1481680644,1481687039,SE
+1481678848,1481684991,SE
+1481684992,1481687039,GB
1481687040,1481695231,DE
1481695232,1481703423,SK
1481703424,1481711615,SA
1481711616,1481719807,RU
1481719808,1481727999,CZ
1481728000,1481736191,IE
-1481736192,1481741823,GG
-1481741824,1481742079,GB
-1481742080,1481744383,GG
+1481736192,1481741311,GG
+1481741312,1481741567,GB
+1481741568,1481741568,GG
+1481741569,1481741823,GB
+1481741824,1481742079,GG
+1481742080,1481744383,GB
1481744384,1481752575,IT
1481752576,1481760767,RU
1481760768,1481768959,UA
@@ -60936,9 +19693,7 @@
1481867264,1481875455,SE
1481875456,1481883647,CZ
1481883648,1481891839,RU
-1481891840,1481893119,CZ
-1481893120,1481893375,SK
-1481893376,1481893631,CZ
+1481891840,1481893631,CZ
1481893632,1481893887,SK
1481893888,1481900031,CZ
1481900032,1481908223,CH
@@ -60953,26 +19708,7 @@
1481973760,1481981951,FO
1481981952,1481982340,NL
1481982341,1481982341,LB
-1481982342,1481983999,NL
-1481984000,1481984127,GB
-1481984128,1481984255,PA
-1481984256,1481984383,NL
-1481984384,1481984511,GI
-1481984512,1481984639,CY
-1481984640,1481985023,NL
-1481985024,1481985279,MT
-1481985280,1481987327,NL
-1481987328,1481987583,GB
-1481987584,1481987967,NL
-1481987968,1481988031,PA
-1481988032,1481988095,NL
-1481988096,1481988159,GI
-1481988160,1481988167,RU
-1481988168,1481988319,NL
-1481988320,1481988335,BZ
-1481988336,1481988351,NL
-1481988352,1481988607,GB
-1481988608,1481990143,NL
+1481982342,1481990143,NL
1481990144,1481998335,MK
1481998336,1482006527,FI
1482006528,1482022911,RU
@@ -60980,11 +19716,7 @@
1482031104,1482039295,SY
1482039296,1482047487,SE
1482047488,1482055679,RU
-1482055680,1482059811,CZ
-1482059812,1482059813,SK
-1482059814,1482060919,CZ
-1482060920,1482060927,SK
-1482060928,1482063871,CZ
+1482055680,1482063871,CZ
1482063872,1482072063,FI
1482072064,1482080255,IT
1482080256,1482088447,RU
@@ -60992,9 +19724,7 @@
1482096640,1482104831,BG
1482104832,1482113023,NO
1482113024,1482121215,RU
-1482121216,1482127123,IT
-1482127124,1482127127,TR
-1482127128,1482129407,IT
+1482121216,1482129407,IT
1482129408,1482137599,ES
1482137600,1482145791,IE
1482145792,1482153983,ES
@@ -61010,16 +19740,17 @@
1484783616,1484849151,DE
1484849152,1484914687,SE
1484914688,1484980223,DE
-1484980224,1485001055,SE
-1485001056,1485001087,NO
-1485001088,1485045759,SE
+1484980224,1485045759,SE
1485045760,1485111295,HU
1485111296,1485242367,DE
1485242368,1485246463,RU
1485246464,1485250559,UA
1485250560,1485254655,IR
1485254656,1485258751,RU
-1485258752,1485266943,UA
+1485258752,1485262847,UA
+1485262848,1485263615,RU
+1485263616,1485263871,UA
+1485263872,1485266943,RU
1485266944,1485271039,RO
1485271040,1485275135,UA
1485275136,1485283327,LV
@@ -61033,12 +19764,9 @@
1486094336,1486127103,ES
1486127104,1486159871,FI
1486159872,1486192639,IS
-1486192640,1486211687,IT
-1486211688,1486211695,GB
-1486211696,1486225407,IT
+1486192640,1486225407,IT
1486225408,1486258175,DE
-1486258176,1486290943,RS
-1486290944,1486292991,GB
+1486258176,1486292991,GB
1486292992,1486295039,RU
1486295040,1486297087,ES
1486297088,1486299135,IE
@@ -61051,9 +19779,7 @@
1486311424,1486313471,IE
1486313472,1486315519,RU
1486315520,1486317567,HU
-1486317568,1486320383,RU
-1486320384,1486320639,US
-1486320640,1486321663,RU
+1486317568,1486321663,RU
1486321664,1486323711,NL
1486323712,1486325759,GB
1486325760,1486327807,PL
@@ -61083,212 +19809,44 @@
1489240064,1489305599,EE
1489305600,1489338367,GR
1489338368,1489371135,BE
-1489371136,1489389391,DE
-1489389392,1489389399,IT
-1489389400,1489391639,DE
-1489391640,1489391647,ES
-1489391648,1489392767,DE
-1489392768,1489392775,IT
-1489392776,1489402239,DE
-1489402240,1489402367,TR
-1489402368,1489404767,DE
-1489404768,1489404775,IT
-1489404776,1489404839,DE
-1489404840,1489404847,ES
-1489404848,1489404855,DE
-1489404856,1489404863,ES
-1489404864,1489436671,DE
+1489371136,1489436671,DE
1489436672,1489502207,PL
1489502208,1489534975,SI
1489534976,1489567743,RU
1489567744,1489600511,BH
1489600512,1489633279,RU
-1489633280,1489635327,IT
-1489635328,1489635838,GB
-1489635839,1489635839,EU
-1489635840,1489636863,IT
-1489636864,1489637119,FR
-1489637120,1489637887,IT
-1489637888,1489638399,A2
-1489638400,1489638655,IT
-1489638656,1489638911,FR
-1489638912,1489640703,IT
-1489640704,1489640959,FR
-1489640960,1489641727,IT
-1489641728,1489641983,HK
-1489641984,1489642495,IT
-1489642496,1489642751,FR
-1489642752,1489644543,IT
+1489633280,1489634303,FR
+1489634304,1489635839,IT
+1489635840,1489636863,FR
+1489636864,1489637119,IT
+1489637120,1489637631,FR
+1489637632,1489638143,IT
+1489638144,1489639423,FR
+1489639424,1489639679,IT
+1489639680,1489640959,FR
+1489640960,1489641215,IT
+1489641216,1489641471,FR
+1489641472,1489641599,PT
+1489641600,1489641727,GR
+1489641728,1489642495,FR
+1489642496,1489642751,IT
+1489642752,1489644031,FR
+1489644032,1489644287,IT
+1489644288,1489644543,FR
1489644544,1489644799,IQ
-1489644800,1489645055,A2
-1489645056,1489645567,IT
-1489645568,1489646079,A2
-1489646080,1489646335,GB
-1489646336,1489646591,US
-1489646592,1489646847,A2
-1489646848,1489647103,IT
-1489647104,1489647359,GB
-1489647360,1489648639,IT
-1489648640,1489648895,A2
-1489648896,1489649158,GB
-1489649159,1489649159,US
-1489649160,1489649407,GB
-1489649408,1489649663,EU
+1489644800,1489649663,IT
1489649664,1489650687,FR
-1489650688,1489651199,EU
-1489651200,1489653759,IT
-1489653760,1489653760,EU
-1489653761,1489653874,IT
-1489653875,1489657599,EU
-1489657600,1489659919,IT
-1489659920,1489659935,FR
-1489659936,1489659951,DE
-1489659952,1489659967,CY
-1489659968,1489659983,FI
-1489659984,1489659999,GR
-1489660000,1489660015,IE
-1489660016,1489660031,ES
-1489660032,1489660047,PL
-1489660048,1489660063,GB
-1489660064,1489660079,AD
-1489660080,1489660095,AE
-1489660096,1489660111,AL
-1489660112,1489660127,AM
-1489660128,1489660143,AT
-1489660144,1489660159,BA
-1489660160,1489660175,BE
-1489660176,1489660191,BG
-1489660192,1489660207,BH
-1489660208,1489660223,BY
-1489660224,1489660239,CH
-1489660240,1489660255,CZ
-1489660256,1489660271,DK
-1489660272,1489660287,DZ
-1489660288,1489660303,EE
-1489660304,1489660319,EG
-1489660320,1489660335,HR
-1489660336,1489660351,HU
-1489660352,1489660367,KW
-1489660368,1489660383,LI
-1489660384,1489660399,LT
-1489660400,1489660415,LU
-1489660416,1489660431,LV
-1489660432,1489660447,LY
-1489660448,1489660463,MA
-1489660464,1489660479,MC
-1489660480,1489660495,MD
-1489660496,1489660511,ME
-1489660512,1489660527,MK
-1489660528,1489660543,MT
-1489660544,1489660559,NL
-1489660560,1489660575,NO
-1489660576,1489660591,OM
-1489660592,1489660607,PT
-1489660608,1489660623,QA
-1489660624,1489660639,RO
-1489660640,1489660655,RS
-1489660656,1489660671,RU
-1489660672,1489660687,SA
-1489660688,1489660703,SE
-1489660704,1489660719,SI
-1489660720,1489660735,SK
-1489660736,1489660751,SM
-1489660752,1489660767,TN
-1489660768,1489660783,TR
-1489660784,1489660799,UA
-1489660800,1489660815,VA
-1489660816,1489660927,EU
-1489660928,1489660943,IT
-1489660944,1489660959,FR
-1489660960,1489660975,DE
-1489660976,1489660991,CY
-1489660992,1489661007,FI
-1489661008,1489661023,GR
-1489661024,1489661039,IE
-1489661040,1489661055,ES
-1489661056,1489661071,PL
-1489661072,1489661087,GB
-1489661088,1489661103,AD
-1489661104,1489661119,AE
-1489661120,1489661135,AL
-1489661136,1489661151,AM
-1489661152,1489661167,AT
-1489661168,1489661183,BA
-1489661184,1489661199,BE
-1489661200,1489661215,BG
-1489661216,1489661231,BH
-1489661232,1489661247,BY
-1489661248,1489661263,CH
-1489661264,1489661279,CZ
-1489661280,1489661295,DK
-1489661296,1489661311,DZ
-1489661312,1489661327,EE
-1489661328,1489661343,EG
-1489661344,1489661359,HR
-1489661360,1489661375,HU
-1489661376,1489661391,KW
-1489661392,1489661407,LI
-1489661408,1489661423,LT
-1489661424,1489661439,LU
-1489661440,1489661455,LV
-1489661456,1489661471,LY
-1489661472,1489661487,MA
-1489661488,1489661503,MC
-1489661504,1489661519,MD
-1489661520,1489661535,ME
-1489661536,1489661551,MK
-1489661552,1489661567,MT
-1489661568,1489661583,NL
-1489661584,1489661599,NO
-1489661600,1489661615,OM
-1489661616,1489661631,PT
-1489661632,1489661647,QA
-1489661648,1489661663,RO
-1489661664,1489661679,RS
-1489661680,1489661695,RU
-1489661696,1489661711,SA
-1489661712,1489661727,SE
-1489661728,1489661743,SI
-1489661744,1489661759,SK
-1489661760,1489661775,SM
-1489661776,1489661791,TN
-1489661792,1489661807,TR
-1489661808,1489661823,UA
-1489661824,1489661839,VA
-1489661840,1489661951,EU
-1489661952,1489662463,GB
-1489662464,1489662719,EU
-1489662720,1489662975,ZA
-1489662976,1489663999,IT
-1489664000,1489664511,LY
-1489664512,1489665023,EU
-1489665024,1489665279,ZA
-1489665280,1489666047,IT
-1489666048,1489698815,GB
+1489650688,1489660159,IT
+1489660160,1489660415,LY
+1489660416,1489666047,IT
+1489666048,1489674239,GB
+1489674240,1489676287,NL
+1489676288,1489698815,GB
1489698816,1489731583,MT
1489731584,1489764351,BG
1489764352,1489797119,RU
1489797120,1489829887,KZ
-1489829888,1489855495,DE
-1489855496,1489855503,CH
-1489855504,1489855519,RU
-1489855520,1489855535,PL
-1489855536,1489855543,DE
-1489855544,1489855551,PL
-1489855552,1489855583,DE
-1489855584,1489855615,RU
-1489855616,1489855807,DE
-1489855808,1489855871,US
-1489855872,1489855903,DE
-1489855904,1489855935,AU
-1489855936,1489855999,US
-1489856000,1489856031,PL
-1489856032,1489856063,RU
-1489856064,1489856095,DE
-1489856096,1489856103,VG
-1489856104,1489856111,DE
-1489856112,1489856127,US
-1489856128,1489862655,DE
+1489829888,1489862655,DE
1489862656,1489928191,RU
1489928192,1489960959,SE
1489960960,1489993727,HR
@@ -61296,55 +19854,36 @@
1490026496,1490028543,US
1490028544,1490029055,UA
1490029056,1490042879,NL
-1490042880,1490049879,CZ
-1490049880,1490049887,AT
-1490049888,1490049919,CZ
-1490049920,1490049983,PL
-1490049984,1490053375,CZ
+1490042880,1490053375,CZ
1490053376,1490054143,PL
1490054144,1490059263,CZ
1490059264,1490075647,DE
1490075648,1490092031,GB
1490092032,1490108415,DE
-1490108416,1490116607,MC
-1490116608,1490118143,FR
-1490118144,1490120703,MC
-1490120704,1490124287,FR
-1490124288,1490124799,MC
-1490124800,1490157567,HU
+1490108416,1490124799,MC
+1490124800,1490141183,HU
+1490141184,1490142719,CZ
+1490142720,1490143231,HU
+1490143232,1490143999,CZ
+1490144000,1490144255,HU
+1490144256,1490146559,CZ
+1490146560,1490146815,HU
+1490146816,1490148863,CZ
+1490148864,1490149119,HU
+1490149120,1490151679,CZ
+1490151680,1490151935,HU
+1490151936,1490153983,CZ
+1490153984,1490154239,HU
+1490154240,1490154495,CZ
+1490154496,1490154751,HU
+1490154752,1490157567,CZ
1490157568,1490173951,RU
1490173952,1490190335,PT
-1490190336,1490192895,GB
-1490192896,1490193151,IE
-1490193152,1490194431,GB
-1490194432,1490194687,DE
-1490194688,1490195455,GB
-1490195456,1490195519,DE
-1490195520,1490195583,PL
-1490195584,1490195711,DE
-1490195712,1490195775,IT
-1490195776,1490195903,PL
-1490195904,1490195967,CZ
-1490195968,1490196095,IT
-1490196096,1490196223,HU
-1490196224,1490196287,IT
-1490196288,1490196351,AL
-1490196352,1490196415,RS
-1490196416,1490196479,GR
-1490196480,1490196991,GB
-1490196992,1490197503,IE
-1490197504,1490198015,GB
-1490198016,1490198271,PT
-1490198272,1490198527,ES
-1490198528,1490200063,GB
-1490200064,1490200319,ES
-1490200320,1490200575,GB
-1490200576,1490200831,ES
-1490200832,1490201087,GB
-1490201088,1490201471,DE
-1490201472,1490201535,HU
-1490201536,1490201855,DE
-1490201856,1490206719,GB
+1490190336,1490196991,GB
+1490196992,1490197247,IE
+1490197248,1490205183,GB
+1490205184,1490205439,LY
+1490205440,1490206719,GB
1490206720,1490223103,GE
1490223104,1490255871,GB
1490255872,1490272255,NL
@@ -61356,22 +19895,12 @@
1490354176,1490386943,SA
1490386944,1490403327,IT
1490403328,1490419711,BG
-1490419712,1490436095,A2
+1490419712,1490436095,DE
1490436096,1490452479,UA
1490452480,1490468863,PT
-1490468864,1490472447,GB
-1490472448,1490472703,US
-1490472704,1490473983,GB
-1490473984,1490474239,US
-1490474240,1490478591,GB
-1490478592,1490479103,RU
-1490479104,1490480127,GB
+1490468864,1490480127,GB
1490480128,1490480639,RU
-1490480640,1490484223,GB
-1490484224,1490484479,US
-1490484480,1490484735,GB
-1490484736,1490485247,US
-1490485248,1490501631,GB
+1490480640,1490501631,GB
1490501632,1490518015,DE
1490518016,1490534399,RU
1490534400,1490550783,DE
@@ -61383,54 +19912,54 @@
1490878464,1490879487,DE
1490879488,1490880511,US
1490880512,1490881535,FR
-1490881536,1490885631,EU
1490885632,1490886655,US
-1490886656,1490904063,EU
1490904064,1490905087,US
-1490905088,1490909183,EU
1490909184,1490910207,US
-1490910208,1490913279,EU
1490913280,1490915327,US
1490915328,1490917375,IT
1490917376,1490919423,IL
-1490919424,1490927615,EU
1490927616,1490929663,FR
-1490929664,1490931711,EU
1490931712,1490931967,DE
1490931968,1490932223,PL
1490932224,1490933759,DE
-1490933760,1490934527,EU
1490934528,1490934783,IL
-1490934784,1490943999,EU
1490944000,1491075071,LT
1491075072,1493172223,TR
1493172224,1493303295,DE
-1493303296,1493434367,FR
+1493303296,1493430527,FR
+1493430528,1493430783,GP
+1493430784,1493431039,FR
+1493431040,1493431551,GP
+1493431552,1493431807,FR
+1493431808,1493432319,GP
+1493432320,1493434111,MQ
+1493434112,1493434367,FR
1493434368,1493565439,SA
1493565440,1493696511,ES
1493696512,1493958655,NO
1493958656,1494220799,DE
-1494220800,1494221055,FR
-1494221056,1494221311,RE
-1494221312,1494222335,FR
-1494222336,1494223103,RE
-1494223104,1494224127,FR
-1494224128,1494224383,RE
-1494224384,1494224895,FR
-1494224896,1494226431,GP
-1494226432,1494226943,FR
-1494226944,1494227455,GP
-1494227456,1494227967,FR
-1494227968,1494228991,GP
+1494220800,1494221823,FR
+1494221824,1494222335,RE
+1494222336,1494222591,FR
+1494222592,1494222847,RE
+1494222848,1494223615,FR
+1494223616,1494223871,RE
+1494223872,1494225407,FR
+1494225408,1494225663,GP
+1494225664,1494226687,FR
+1494226688,1494226943,GP
+1494226944,1494227455,FR
+1494227456,1494227967,GP
+1494227968,1494228479,FR
+1494228480,1494228735,GP
+1494228736,1494228991,FR
1494228992,1494237183,RU
1494237184,1494245375,IE
1494245376,1494253567,RU
1494253568,1494261759,DE
1494261760,1494269951,GB
1494269952,1494278143,AT
-1494278144,1494282751,GB
-1494282752,1494283007,FR
-1494283008,1494286335,GB
+1494278144,1494286335,GB
1494286336,1494294527,HR
1494294528,1494302719,RU
1494302720,1494310911,FI
@@ -61444,10 +19973,7 @@
1494368256,1494376447,IE
1494376448,1494384639,SE
1494384640,1494392831,RU
-1494392832,1494393087,US
-1494393088,1494398975,NL
-1494398976,1494399743,US
-1494399744,1494401023,NL
+1494392832,1494401023,NL
1494401024,1494409215,LV
1494409216,1494417407,FI
1494417408,1494425599,TR
@@ -61455,13 +19981,9 @@
1494441984,1494450175,UA
1494450176,1494458367,DK
1494458368,1494474751,RU
-1494474752,1494477471,DE
-1494477472,1494477503,IL
-1494477504,1494482943,DE
+1494474752,1494482943,DE
1494482944,1494499327,RU
-1494499328,1494507375,NL
-1494507376,1494507391,DE
-1494507392,1494507519,NL
+1494499328,1494507519,NL
1494507520,1494523903,RU
1494523904,1494532095,NL
1494532096,1494540287,GB
@@ -61469,20 +19991,9 @@
1494548480,1494556671,GB
1494556672,1494564863,DE
1494564864,1494573055,UA
-1494573056,1494580479,RO
-1494580480,1494580735,HU
-1494580736,1494581247,RO
+1494573056,1494581247,RO
1494581248,1494589439,RU
-1494589440,1494592511,NL
-1494592512,1494593535,US
-1494593536,1494594559,NL
-1494594560,1494595071,US
-1494595072,1494595327,A2
-1494595328,1494595583,NL
-1494595584,1494596607,US
-1494596608,1494597119,NL
-1494597120,1494597375,US
-1494597376,1494597631,NL
+1494589440,1494597631,US
1494597632,1494605823,IT
1494605824,1494614015,GB
1494614016,1494616063,RU
@@ -61510,11 +20021,7 @@
1494745088,1494810623,CZ
1494810624,1494843391,BG
1494843392,1494876159,PL
-1494876160,1494880519,AT
-1494880520,1494880527,DE
-1494880528,1494880647,AT
-1494880648,1494880655,DE
-1494880656,1494908927,AT
+1494876160,1494908927,AT
1494908928,1494941695,PT
1494941696,1494974463,FI
1494974464,1495007231,DE
@@ -61532,66 +20039,22 @@
1495060480,1495062527,GB
1495062528,1495064575,JO
1495064576,1495066623,PL
-1495066624,1495067183,GB
-1495067184,1495067191,IE
-1495067192,1495068671,GB
+1495066624,1495068671,GB
1495068672,1495070719,DE
1495070720,1495072767,RU
1495072768,1495105535,CZ
1495105536,1495138303,ES
1495138304,1495139327,FR
-1495139328,1495139583,EU
-1495139584,1495139591,GB
-1495139592,1495139711,EU
-1495139712,1495139839,GB
-1495139840,1495139871,ES
-1495139872,1495139903,FR
-1495139904,1495140351,EU
1495140352,1495142399,FR
-1495142400,1495143679,EU
-1495143680,1495143935,FR
-1495143936,1495146495,EU
-1495146496,1495150591,FR
-1495150592,1495151103,GB
-1495151104,1495151359,NL
-1495151360,1495153663,FR
-1495153664,1495153919,EU
-1495153920,1495154175,TR
-1495154176,1495154687,FR
-1495154688,1495160063,EU
-1495160064,1495160319,NL
-1495160320,1495161599,EU
-1495161600,1495161855,FR
-1495161856,1495162367,EU
-1495162368,1495162879,US
-1495162880,1495162943,FR
-1495162944,1495163007,EU
-1495163008,1495163647,FR
-1495163648,1495164415,EU
-1495164416,1495164671,FR
-1495164672,1495164927,EU
-1495164928,1495165055,FR
-1495165056,1495165183,EU
-1495165184,1495165199,FR
-1495165200,1495165207,EU
-1495165208,1495165215,ES
-1495165216,1495165439,EU
-1495165440,1495168383,FR
-1495168384,1495168415,EU
-1495168416,1495168447,FR
-1495168448,1495168511,EU
-1495168512,1495168767,FR
+1495148544,1495150591,FR
+1495151616,1495153663,FR
+1495160240,1495160255,FR
+1495160256,1495160263,GB
+1495163552,1495163567,FR
1495168768,1495169023,GB
-1495169024,1495169279,FR
-1495169280,1495169535,EU
-1495169536,1495169791,FR
-1495169792,1495170047,NL
-1495170048,1495170335,FR
-1495170336,1495170399,EU
-1495170400,1495171071,FR
-1495171072,1495174399,NL
-1495174400,1495174655,US
-1495174656,1495203839,NL
+1495170760,1495170763,DE
+1495170816,1495171071,FR
+1495171072,1495203839,NL
1495203840,1495205887,DE
1495205888,1495207935,CZ
1495207936,1495209983,RU
@@ -61604,48 +20067,9 @@
1495224320,1495228415,RU
1495228416,1495230463,NL
1495230464,1495234559,RU
-1495234560,1495236607,CH
-1495236608,1495237247,AT
-1495237248,1495237255,EU
-1495237256,1495237271,AT
-1495237272,1495237311,EU
-1495237312,1495237319,AT
-1495237320,1495237375,EU
-1495237376,1495237711,AT
-1495237712,1495237727,NL
-1495237728,1495237731,AT
-1495237732,1495237739,EU
-1495237740,1495237743,AT
-1495237744,1495237751,EU
-1495237752,1495237775,AT
-1495237776,1495237791,EU
-1495237792,1495237807,AT
-1495237808,1495237887,EU
-1495237888,1495238207,AT
-1495238208,1495238223,EU
-1495238224,1495238231,AT
-1495238232,1495238239,EU
-1495238240,1495238255,AT
-1495238256,1495238271,EU
-1495238272,1495238399,AT
-1495238400,1495238415,EU
-1495238416,1495238423,AT
-1495238424,1495238655,EU
+1495236608,1495238655,AT
1495238656,1495240703,DE
-1495240704,1495240751,FR
-1495240752,1495240759,BE
-1495240760,1495240767,CH
-1495240768,1495242367,FR
-1495242368,1495242375,HU
-1495242376,1495242383,BG
-1495242384,1495242391,SK
-1495242392,1495242399,LT
-1495242400,1495242407,LV
-1495242408,1495242415,SI
-1495242416,1495242423,EE
-1495242424,1495242431,FI
-1495242432,1495242439,SE
-1495242440,1495242751,FR
+1495240704,1495242751,FR
1495242752,1495244799,MK
1495244800,1495246847,CZ
1495246848,1495248895,IE
@@ -61655,48 +20079,102 @@
1495255040,1495257087,IT
1495257088,1495259135,GB
1495259136,1495261183,BE
-1495261184,1495261439,EU
-1495261440,1495263231,PT
+1495261184,1495263231,PT
1495263232,1495265279,GB
-1495265280,1495265791,DE
-1495265792,1495266047,RU
-1495266048,1495267327,US
+1495265280,1495267327,US
1495267328,1495269375,SE
-1495269376,1495306239,RO
+1495269376,1495283711,RO
+1495283712,1495285759,MD
+1495285760,1495304191,RO
+1495304192,1495306239,MD
1495306240,1495306573,GB
1495306574,1495306574,RO
1495306575,1495308287,GB
-1495308288,1495326719,RO
-1495326720,1495330815,MD
-1495330816,1495334911,RO
-1495334912,1495335935,MD
-1495335936,1495621887,RO
-1495621888,1495622143,TR
-1495622144,1495622655,A2
-1495622656,1495623679,RO
-1495623680,1495623935,MD
-1495623936,1495801855,RO
-1495801856,1495802879,GB
-1495802880,1495875583,RO
+1495308288,1495313407,RO
+1495313408,1495314431,MD
+1495314432,1495326719,RO
+1495326720,1495335935,MD
+1495335936,1495416831,RO
+1495416832,1495418879,MD
+1495418880,1495429119,RO
+1495429120,1495431167,MD
+1495431168,1495449599,RO
+1495449600,1495451647,MD
+1495451648,1495452671,RO
+1495452672,1495453695,MD
+1495453696,1495459839,RO
+1495459840,1495460863,MD
+1495460864,1495468031,RO
+1495468032,1495470079,MD
+1495470080,1495476223,RO
+1495476224,1495478271,MD
+1495478272,1495517183,RO
+1495517184,1495518207,MD
+1495518208,1495571455,RO
+1495571456,1495572479,MD
+1495572480,1495608319,RO
+1495608320,1495609343,MD
+1495609344,1495670783,RO
+1495670784,1495671807,MD
+1495671808,1495678975,RO
+1495678976,1495679999,MD
+1495680000,1495682047,RO
+1495682048,1495683071,MD
+1495683072,1495747583,RO
+1495747584,1495748607,MD
+1495748608,1495749631,RO
+1495749632,1495750655,MD
+1495750656,1495752703,RO
+1495752704,1495755775,MD
+1495755776,1495756799,RO
+1495756800,1495758847,MD
+1495758848,1495759871,RO
+1495759872,1495760127,MD
+1495760128,1495790079,RO
+1495790080,1495790335,MD
+1495790336,1495852031,RO
+1495852032,1495853055,MD
+1495853056,1495875583,RO
1495875584,1495891967,MD
-1495891968,1495927295,RO
-1495927296,1495927551,AE
-1495927552,1495931647,RO
-1495931648,1495931903,SE
-1495931904,1495937023,RO
-1495937024,1495937535,SE
-1495937536,1496078335,RO
+1495891968,1495941119,RO
+1495941120,1495942143,MD
+1495942144,1495943167,RO
+1495943168,1495945215,MD
+1495945216,1495951359,RO
+1495951360,1495952383,MD
+1495952384,1495957503,RO
+1495957504,1495958527,MD
+1495958528,1495970815,RO
+1495970816,1495971839,MD
+1495971840,1495982079,RO
+1495982080,1495983103,MD
+1495983104,1495986175,RO
+1495986176,1495988223,MD
+1495988224,1496018943,RO
+1496018944,1496020991,MD
+1496020992,1496023039,RO
+1496023040,1496024063,MD
+1496024064,1496033279,RO
+1496033280,1496034303,MD
+1496034304,1496053759,RO
+1496053760,1496055807,MD
+1496055808,1496078335,RO
1496078336,1496079359,MD
-1496079360,1496121343,RO
+1496079360,1496084991,RO
+1496084992,1496085247,MD
+1496085248,1496094719,RO
+1496094720,1496095743,MD
+1496095744,1496121343,RO
1496121344,1496122367,MD
-1496122368,1496178943,RO
-1496178944,1496179199,AE
-1496179200,1496197119,RO
+1496122368,1496131583,RO
+1496131584,1496132607,MD
+1496132608,1496197119,RO
1496197120,1496197631,MD
-1496197632,1496262655,RO
-1496262656,1496262911,AE
-1496262912,1496263167,US
-1496263168,1496295423,RO
+1496197632,1496228863,RO
+1496228864,1496229887,MD
+1496229888,1496276735,RO
+1496276736,1496276991,MD
+1496276992,1496295423,RO
1496295424,1496297471,GB
1496297472,1496299519,MD
1496299520,1496317951,RO
@@ -61719,34 +20197,11 @@
1500078080,1500086271,GB
1500086272,1500094463,RU
1500094464,1500102655,AT
-1500102656,1500104799,NL
-1500104800,1500104815,DE
-1500104816,1500106527,NL
-1500106528,1500106559,DE
-1500106560,1500107415,NL
-1500107416,1500107423,DE
-1500107424,1500107775,NL
-1500107776,1500107903,DE
-1500107904,1500107943,NL
-1500107944,1500107951,DE
-1500107952,1500107999,NL
-1500108000,1500108007,BE
-1500108008,1500108159,NL
-1500108160,1500108287,DE
-1500108288,1500108319,NL
-1500108320,1500108351,DE
-1500108352,1500108799,NL
-1500108800,1500109311,DE
-1500109312,1500110847,NL
+1500102656,1500110847,NL
1500110848,1500119039,UA
1500119040,1500127231,TR
1500127232,1500135423,FI
-1500135424,1500135555,DE
-1500135556,1500135559,CH
-1500135560,1500140560,DE
-1500140561,1500140564,AT
-1500140565,1500140568,CH
-1500140569,1500143615,DE
+1500135424,1500143615,DE
1500143616,1500151807,BG
1500151808,1500153855,GB
1500153856,1500155903,IE
@@ -61755,9 +20210,7 @@
1500160000,1500162047,NL
1500162048,1500164095,RU
1500164096,1500166143,GB
-1500166144,1500166399,FR
-1500166400,1500166655,DE
-1500166656,1500168191,FR
+1500166144,1500168191,FR
1500168192,1500170239,RU
1500170240,1500172287,LU
1500172288,1500174335,AT
@@ -61766,53 +20219,9 @@
1500178432,1500180479,KZ
1500180480,1500182527,BE
1500182528,1500184575,RU
-1500184576,1500184831,GB
-1500184832,1500186623,IM
+1500184576,1500186623,IM
1500186624,1500188671,KW
-1500188672,1500188687,GB
-1500188688,1500188719,FR
-1500188720,1500188799,GB
-1500188800,1500188815,FR
-1500188816,1500188831,GB
-1500188832,1500188863,FR
-1500188864,1500188879,GB
-1500188880,1500188903,FR
-1500188904,1500188911,GB
-1500188912,1500188919,FR
-1500188920,1500188927,GB
-1500188928,1500189055,FR
-1500189056,1500189071,GB
-1500189072,1500189231,FR
-1500189232,1500189247,GB
-1500189248,1500189279,FR
-1500189280,1500189295,GB
-1500189296,1500189343,FR
-1500189344,1500189695,GB
-1500189696,1500189759,FR
-1500189760,1500189887,GB
-1500189888,1500189903,FR
-1500189904,1500189919,GB
-1500189920,1500189935,FR
-1500189936,1500190015,GB
-1500190016,1500190215,FR
-1500190216,1500190223,GB
-1500190224,1500190375,FR
-1500190376,1500190391,GB
-1500190392,1500190399,FR
-1500190400,1500190407,GB
-1500190408,1500190431,FR
-1500190432,1500190467,GB
-1500190468,1500190495,FR
-1500190496,1500190527,GB
-1500190528,1500190543,FR
-1500190544,1500190599,GB
-1500190600,1500190607,FR
-1500190608,1500190623,GB
-1500190624,1500190631,FR
-1500190632,1500190639,GB
-1500190640,1500190687,FR
-1500190688,1500190703,GB
-1500190704,1500190719,FR
+1500188672,1500190719,FR
1500190720,1500194815,RU
1500194816,1500196863,GB
1500196864,1500198911,ES
@@ -61824,11 +20233,7 @@
1500209152,1500211199,KZ
1500211200,1500213247,IT
1500213248,1500217343,RU
-1500217344,1500217855,CZ
-1500217856,1500218111,DE
-1500218112,1500218367,CZ
-1500218368,1500218879,DE
-1500218880,1500219391,EE
+1500217344,1500219391,DE
1500219392,1500221439,RU
1500221440,1500223487,SK
1500223488,1500225535,PL
@@ -61851,11 +20256,7 @@
1500348416,1500413951,RU
1500413952,1500430335,DE
1500430336,1500446719,RS
-1500446720,1500447743,LV
-1500447744,1500447999,LT
-1500448000,1500448511,LV
-1500448512,1500448767,LT
-1500448768,1500463103,LV
+1500446720,1500463103,LV
1500463104,1500479487,CZ
1500479488,1500495871,RU
1500495872,1500512255,BA
@@ -61873,42 +20274,23 @@
1502478336,1502605311,SI
1502605312,1502606335,HR
1502606336,1502609407,SI
-1502609408,1502624030,DE
-1502624031,1502624047,IR
-1502624048,1502625791,DE
+1502609408,1502625791,DE
1502625792,1502642175,SA
1502642176,1502658559,IR
1502658560,1502674943,AT
1502674944,1502691327,DE
-1502691328,1502691679,GB
-1502691680,1502691711,SE
-1502691712,1502692863,GB
-1502692864,1502693119,SE
-1502693120,1502702835,GB
-1502702836,1502702839,IE
-1502702840,1502703103,GB
-1502703104,1502703615,SE
-1502703616,1502707711,GB
+1502691328,1502707711,GB
1502707712,1502715903,RU
1502715904,1502717951,IT
1502717952,1502719999,GB
-1502720000,1502722047,CH
+1502720000,1502721023,FR
+1502721024,1502722047,CH
1502722048,1502724095,TR
1502724096,1502740479,GB
1502740480,1502756863,NL
1502756864,1502773247,UZ
1502773248,1502789631,BA
-1502789632,1502791551,DE
-1502791552,1502791679,PL
-1502791680,1502793503,DE
-1502793504,1502793511,NL
-1502793512,1502794239,DE
-1502794240,1502794495,NL
-1502794496,1502795767,DE
-1502795768,1502795771,NL
-1502795772,1502797055,DE
-1502797056,1502797311,PL
-1502797312,1502806015,DE
+1502789632,1502806015,DE
1502806016,1502822399,SA
1502822400,1502838783,HU
1502838784,1502855167,SE
@@ -61920,69 +20302,28 @@
1502937088,1502953471,RO
1502953472,1502969855,MD
1502969856,1502975231,FR
-1502975232,1502975247,GB
-1502975248,1502975263,IE
-1502975264,1502975295,GB
-1502975296,1502975311,FR
-1502975312,1502975319,IE
-1502975320,1502975327,FR
-1502975328,1502975359,GB
-1502975360,1502975367,IE
-1502975368,1502975375,GB
-1502975376,1502975455,FR
-1502975456,1502975487,IE
-1502975488,1502975743,ES
+1502975232,1502975487,GB
+1502975488,1502975743,FR
1502975744,1502975999,DE
-1502976000,1502977151,FR
-1502977152,1502979071,US
-1502979072,1502979103,FR
-1502979104,1502979111,ES
-1502979112,1502979119,US
-1502979120,1502979135,ES
-1502979136,1502979199,FR
-1502979200,1502979215,ES
+1502976000,1502978047,FR
+1502978048,1502979071,US
+1502979072,1502979135,FR
+1502979136,1502979199,GB
+1502979200,1502979215,FR
1502979216,1502979231,CZ
-1502979232,1502979327,FR
-1502979328,1502979583,US
-1502979584,1502980351,FR
+1502979232,1502980351,FR
1502980352,1502980607,US
-1502980608,1502980863,FR
-1502980864,1502980871,US
-1502980872,1502980879,IL
-1502980880,1502981887,FR
+1502980608,1502981887,FR
1502981888,1502982143,NL
-1502982144,1502982911,DE
-1502982912,1502983167,FR
-1502983168,1502986255,DE
-1502986256,1502986495,TR
-1502986496,1502986511,DE
-1502986512,1502986751,PL
-1502986752,1502987535,DE
-1502987536,1502987551,AE
-1502987552,1502987775,DE
-1502987776,1502988031,TR
-1502988032,1502989055,DE
-1502989056,1502989567,TR
-1502989568,1502990847,DE
-1502990848,1502991103,PL
-1502991104,1502991359,DE
-1502991360,1502991615,PL
-1502991616,1502994687,DE
-1502994688,1502994943,PL
-1502994944,1502995967,DE
-1502995968,1502996479,PL
-1502996480,1502996735,DE
-1502996736,1502997247,PL
-1502997248,1502997503,LT
-1502997504,1502997759,HK
-1502997760,1502999734,DE
+1502982144,1502986239,FR
+1502986240,1502999734,DE
1502999735,1502999735,SA
1502999736,1502999737,DE
1502999738,1502999738,SA
1502999739,1503000063,DE
1503000064,1503000319,PL
-1503000320,1503000831,DE
-1503000832,1503001343,PL
+1503000320,1503001087,DE
+1503001088,1503001343,PL
1503001344,1503002623,DE
1503002624,1503006719,GE
1503006720,1503010815,GB
@@ -62011,9 +20352,7 @@
1503895680,1503895687,IT
1503895688,1503895695,DE
1503895696,1503895703,GB
-1503895704,1503895751,DE
-1503895752,1503895759,IT
-1503895760,1503896175,DE
+1503895704,1503896175,DE
1503896176,1503896183,NL
1503896184,1503896359,DE
1503896360,1503896367,CH
@@ -62025,7 +20364,9 @@
1503896440,1503896447,NO
1503896448,1503896543,DE
1503896544,1503896551,FR
-1503896552,1503897335,DE
+1503896552,1503897303,DE
+1503897304,1503897311,AT
+1503897312,1503897335,DE
1503897336,1503897343,PT
1503897344,1503897351,RO
1503897352,1503897367,DE
@@ -62047,12 +20388,9 @@
1503898168,1503898175,RO
1503898176,1503898183,IT
1503898184,1503898191,AT
-1503898192,1503898199,DE
-1503898200,1503898207,RO
+1503898192,1503898207,DE
1503898208,1503898215,IT
-1503898216,1503898239,DE
-1503898240,1503898303,IT
-1503898304,1503898335,DE
+1503898216,1503898335,DE
1503898336,1503898343,IT
1503898344,1503898351,DE
1503898352,1503898359,CH
@@ -62085,8 +20423,8 @@
1503898992,1503898999,GB
1503899000,1503899007,AT
1503899008,1503899015,CH
-1503899016,1503899063,DE
-1503899064,1503899087,AT
+1503899016,1503899071,DE
+1503899072,1503899087,AT
1503899088,1503899119,DE
1503899120,1503899127,NL
1503899128,1503899143,DE
@@ -62095,8 +20433,8 @@
1503899184,1503899191,GR
1503899192,1503899199,CH
1503899200,1503899271,DE
-1503899272,1503899287,BE
-1503899288,1503899295,DE
+1503899272,1503899279,BE
+1503899280,1503899295,DE
1503899296,1503899303,GR
1503899304,1503899311,NL
1503899312,1503899351,DE
@@ -62109,16 +20447,20 @@
1503899408,1503899423,DE
1503899424,1503899431,IT
1503899432,1503899439,GR
-1503899440,1503899495,DE
-1503899496,1503899503,GR
-1503899504,1503899575,DE
+1503899440,1503899463,DE
+1503899464,1503899471,IT
+1503899472,1503899543,DE
+1503899544,1503899551,SK
+1503899552,1503899575,DE
1503899576,1503899583,BE
1503899584,1503899687,DE
1503899688,1503899695,IT
1503899696,1503899703,BE
1503899704,1503899919,DE
1503899920,1503899927,BE
-1503899928,1503899951,DE
+1503899928,1503899935,IT
+1503899936,1503899943,BE
+1503899944,1503899951,DE
1503899952,1503899959,IT
1503899960,1503900143,DE
1503900144,1503900151,RU
@@ -62133,46 +20475,48 @@
1503901144,1503901151,IT
1503901152,1503901167,DE
1503901168,1503901175,IT
-1503901176,1503901567,DE
+1503901176,1503901455,DE
+1503901456,1503901463,IT
+1503901464,1503901471,CH
+1503901472,1503901567,DE
1503901568,1503901695,TW
-1503901696,1503908351,DE
-1503908352,1503909375,IT
-1503909376,1503920127,DE
-1503920128,1503985663,HR
+1503901696,1503902007,DE
+1503902008,1503902015,IT
+1503902016,1503902079,DE
+1503902080,1503902087,BA
+1503902088,1503902135,DE
+1503902136,1503902143,BE
+1503902144,1503902167,DE
+1503902168,1503902175,NL
+1503902176,1503902215,DE
+1503902216,1503902223,US
+1503902224,1503902335,DE
+1503902336,1503902399,BE
+1503902400,1503902407,RO
+1503902408,1503903687,DE
+1503903688,1503903695,IT
+1503903696,1503903711,DE
+1503903712,1503903719,IT
+1503903720,1503904319,DE
+1503904320,1503904327,IT
+1503904328,1503904343,DE
+1503904344,1503904351,BE
+1503904352,1503904367,DE
+1503904368,1503904375,CH
+1503904376,1503920127,DE
+1503920128,1503985151,HR
+1503985152,1503985407,DE
+1503985408,1503985663,HR
1503985664,1504018431,IR
1504018432,1504051199,RO
1504051200,1504083967,FI
1504083968,1504116735,DE
1504116736,1504149503,PL
-1504149504,1504151551,GB
-1504151552,1504151615,IE
-1504151616,1504152127,GB
-1504152128,1504152191,IE
-1504152192,1504152415,GB
-1504152416,1504152431,IE
-1504152432,1504154623,GB
+1504149504,1504149759,GB
+1504149760,1504150015,ES
+1504150016,1504154623,GB
1504154624,1504155647,IE
-1504155648,1504156927,GB
-1504156928,1504157183,IE
-1504157184,1504161279,GB
-1504161280,1504161535,IE
-1504161536,1504164607,GB
-1504164608,1504164863,IE
-1504164864,1504169983,GB
-1504169984,1504170239,IE
-1504170240,1504171007,GB
-1504171008,1504171263,PT
-1504171264,1504171775,GB
-1504171776,1504172031,US
-1504172032,1504173055,GB
-1504173056,1504173311,IE
-1504173312,1504174591,GB
-1504174592,1504175103,IE
-1504175104,1504176383,GB
-1504176384,1504176639,IE
-1504176640,1504178431,GB
-1504178432,1504178687,IE
-1504178688,1504247807,GB
+1504155648,1504247807,GB
1504247808,1504313343,RU
1504313344,1504378879,FR
1504378880,1504444415,PL
@@ -62193,106 +20537,17 @@
1505280000,1505288191,IR
1505288192,1505296383,RU
1505296384,1505304575,UA
-1505304576,1505305351,FR
-1505305352,1505305359,GB
-1505305360,1505305367,BE
-1505305368,1505305375,ES
-1505305376,1505305383,NL
-1505305384,1505305391,DE
-1505305392,1505305399,IT
-1505305400,1505305407,PT
-1505305408,1505305415,US
-1505305416,1505305423,CH
-1505305424,1505305908,FR
-1505305909,1505305909,LU
-1505305910,1505306303,FR
-1505306304,1505306319,ES
-1505306320,1505306335,DE
-1505306336,1505306351,GB
-1505306352,1505306367,IT
-1505306368,1505312767,FR
+1505304576,1505312767,FR
1505312768,1505320959,RU
-1505320960,1505321055,AT
-1505321056,1505321071,DE
-1505321072,1505321103,AT
-1505321104,1505321111,DE
-1505321112,1505321127,AT
-1505321128,1505321135,DE
-1505321136,1505321423,AT
-1505321424,1505321439,DE
-1505321440,1505321599,AT
-1505321600,1505321631,DE
-1505321632,1505321695,AT
-1505321696,1505321823,DE
-1505321824,1505321831,AT
-1505321832,1505321983,DE
-1505321984,1505322303,AT
-1505322304,1505322415,DE
-1505322416,1505322895,AT
-1505322896,1505324335,DE
-1505324336,1505324367,AT
-1505324368,1505324791,DE
-1505324792,1505324799,AT
-1505324800,1505326847,DE
-1505326848,1505326863,AT
-1505326864,1505326879,DE
-1505326880,1505326887,AT
-1505326888,1505326895,DE
-1505326896,1505327359,AT
-1505327360,1505327607,DE
-1505327608,1505327871,AT
-1505327872,1505328119,DE
-1505328120,1505328135,AT
-1505328136,1505328143,DE
-1505328144,1505328223,AT
-1505328224,1505328255,DE
-1505328256,1505328287,AT
-1505328288,1505328319,DE
-1505328320,1505328391,AT
-1505328392,1505328399,DE
-1505328400,1505328511,AT
-1505328512,1505328639,DE
-1505328640,1505329151,AT
-1505329152,1505329231,IE
-1505329232,1505329247,GB
-1505329248,1505329375,IE
-1505329376,1505329439,GB
-1505329440,1505329455,IE
-1505329456,1505329471,GB
-1505329472,1505331199,IE
-1505331200,1505332223,GB
-1505332224,1505332991,IE
-1505332992,1505332999,GB
-1505333000,1505333471,IE
-1505333472,1505333487,GB
-1505333488,1505333623,IE
-1505333624,1505333631,GB
-1505333632,1505333887,IE
-1505333888,1505333951,GB
-1505333952,1505335807,IE
+1505320960,1505329151,AT
+1505329152,1505335807,IE
1505335808,1505336063,GB
-1505336064,1505336576,IE
-1505336577,1505336639,GB
-1505336640,1505336655,IE
-1505336656,1505336711,GB
-1505336712,1505336823,IE
-1505336824,1505336863,GB
-1505336864,1505336959,IE
-1505336960,1505336975,GB
-1505336976,1505337023,IE
-1505337024,1505337055,GB
-1505337056,1505337071,IE
-1505337072,1505337215,GB
-1505337216,1505337343,IE
+1505336064,1505336575,IE
+1505336576,1505336831,GB
+1505336832,1505337343,IE
1505337344,1505345535,FR
1505345536,1505353727,MK
-1505353728,1505359663,CZ
-1505359664,1505359671,SK
-1505359672,1505359675,CZ
-1505359676,1505359679,SK
-1505359680,1505359759,CZ
-1505359760,1505359775,SK
-1505359776,1505361919,CZ
+1505353728,1505361919,CZ
1505361920,1505370111,PL
1505370112,1505378303,SM
1505378304,1505386495,IT
@@ -62306,50 +20561,7 @@
1505419264,1505427455,RU
1505427456,1505435647,UA
1505435648,1505443839,MD
-1505443840,1505452103,GB
-1505452104,1505452111,US
-1505452112,1505454367,GB
-1505454368,1505454375,US
-1505454376,1505454383,GB
-1505454384,1505454391,US
-1505454392,1505454399,SG
-1505454400,1505454463,GB
-1505454464,1505454495,AU
-1505454496,1505454511,GB
-1505454512,1505454527,DE
-1505454528,1505454543,NZ
-1505454544,1505454911,GB
-1505454912,1505454943,CZ
-1505454944,1505454959,GB
-1505454960,1505454975,IE
-1505454976,1505455103,US
-1505455104,1505455503,GB
-1505455504,1505455519,NL
-1505455520,1505455999,GB
-1505456000,1505456079,US
-1505456080,1505456127,GB
-1505456128,1505456255,US
-1505456256,1505456343,GB
-1505456344,1505456347,US
-1505456348,1505456351,GB
-1505456352,1505456367,US
-1505456368,1505456639,GB
-1505456640,1505456895,US
-1505456896,1505456987,GB
-1505456988,1505456991,US
-1505456992,1505457011,GB
-1505457012,1505457015,US
-1505457016,1505458175,GB
-1505458176,1505458431,US
-1505458432,1505458455,GB
-1505458456,1505458495,US
-1505458496,1505458519,GB
-1505458520,1505458527,US
-1505458528,1505458543,GB
-1505458544,1505458559,US
-1505458560,1505460079,GB
-1505460080,1505460087,HU
-1505460088,1505460223,GB
+1505443840,1505460223,GB
1505460224,1505478655,CZ
1505478656,1505482751,DE
1505482752,1505484799,LB
@@ -62373,35 +20585,40 @@
1505646848,1505647103,PL
1505647104,1505648639,CZ
1505648640,1505656831,LT
-1505656832,1505665023,BH
-1505665024,1505668263,IT
-1505668264,1505668267,DE
-1505668268,1505670615,IT
-1505670616,1505670623,US
-1505670624,1505673215,IT
+1505665024,1505673215,IT
1505673216,1505681407,BG
1505681408,1505689599,RU
-1505689600,1505691391,NO
-1505691392,1505691418,DK
-1505691419,1505691423,NO
-1505691424,1505691551,DK
-1505691552,1505691559,NO
-1505691560,1505691647,DK
-1505691648,1505697791,NO
+1505689600,1505697791,NO
1505697792,1505705983,IE
-1505705984,1505707327,DE
-1505707328,1505707519,AT
-1505707520,1505708543,DE
-1505708544,1505709055,AT
-1505709056,1505714175,DE
+1505705984,1505714175,DE
1505714176,1505722367,LV
1505722368,1505738751,PL
-1505738752,1505745839,GB
-1505745840,1505745855,IL
-1505745856,1505746943,GB
+1505738752,1505740543,GB
+1505740544,1505740607,IL
+1505740608,1505740631,GB
+1505740632,1505740799,IL
+1505740800,1505746943,GB
1505746944,1505755135,RU
1505755136,1506017279,GB
-1506017280,1506279423,DE
+1506017280,1506082815,IR
+1506082816,1506148351,GB
+1506148352,1506218751,IR
+1506218752,1506219007,DE
+1506219008,1506219263,IR
+1506219264,1506219519,DE
+1506219520,1506219775,IR
+1506219776,1506220031,DE
+1506220032,1506261759,IR
+1506261760,1506262783,DE
+1506262784,1506265343,IR
+1506265344,1506267135,DE
+1506267136,1506270207,IR
+1506270208,1506271231,DE
+1506271232,1506274303,IR
+1506274304,1506274559,DE
+1506274560,1506274815,IR
+1506274816,1506275071,DE
+1506275072,1506279423,IR
1506279424,1506312191,NL
1506312192,1506316287,GB
1506316288,1506322431,PL
@@ -62417,314 +20634,52 @@
1506342912,1506344959,UA
1506344960,1506377727,LV
1506377728,1506410495,HR
-1506410496,1506418687,DE
-1506418688,1506418695,CY
-1506418696,1506418703,GB
-1506418704,1506418719,CA
-1506418720,1506418975,DE
-1506418976,1506418983,CA
-1506418984,1506422079,DE
-1506422080,1506422111,CY
-1506422112,1506422142,CA
-1506422143,1506422319,DE
-1506422320,1506422335,GB
-1506422336,1506422399,US
-1506422400,1506422415,CA
-1506422416,1506422431,EE
-1506422432,1506427183,DE
-1506427184,1506427199,CA
-1506427200,1506436607,DE
-1506436608,1506436767,US
-1506436768,1506436863,DE
-1506436864,1506436879,FR
-1506436880,1506436883,GB
-1506436884,1506436959,DE
-1506436960,1506436975,GB
-1506436976,1506437023,DE
-1506437024,1506437039,FR
-1506437040,1506437055,DE
-1506437056,1506437071,FR
-1506437072,1506437087,US
-1506437088,1506437119,DE
-1506437120,1506437503,US
-1506437504,1506437551,DE
-1506437552,1506437567,BG
-1506437568,1506437583,DE
-1506437584,1506437615,NL
-1506437616,1506437623,US
-1506437624,1506437631,DE
-1506437632,1506437887,MU
-1506437888,1506437903,CA
-1506437904,1506437919,US
-1506437920,1506437951,IN
-1506437952,1506437983,DE
-1506437984,1506437991,US
-1506437992,1506437999,DE
-1506438000,1506438015,CA
-1506438016,1506438143,DE
-1506438144,1506438271,HK
-1506438272,1506438367,GB
-1506438368,1506438383,IL
-1506438384,1506438399,GB
-1506438400,1506438527,US
-1506438528,1506438783,DE
-1506438784,1506438799,KR
-1506438800,1506438847,DE
-1506438848,1506438863,US
-1506438864,1506438871,DE
-1506438872,1506438879,FR
-1506438880,1506438883,US
-1506438884,1506438887,HK
-1506438888,1506438895,NL
-1506438896,1506438911,CH
-1506438912,1506439039,US
-1506439040,1506439219,DE
-1506439220,1506439223,BG
-1506439224,1506439463,DE
-1506439464,1506439471,GB
-1506439472,1506439479,BG
-1506439480,1506439571,DE
-1506439572,1506439575,US
-1506439576,1506439579,DE
-1506439580,1506439583,NL
-1506439584,1506439607,DE
-1506439608,1506439615,SE
-1506439616,1506439619,CH
-1506439620,1506439623,GB
-1506439624,1506439631,DE
-1506439632,1506439647,AE
-1506439648,1506439667,GB
-1506439668,1506439671,CH
-1506439672,1506439935,DE
-1506439936,1506440191,US
-1506440192,1506440447,DE
-1506440448,1506440575,US
-1506440576,1506440591,CY
-1506440592,1506440607,NL
-1506440608,1506440639,DE
-1506440640,1506440671,US
-1506440672,1506440702,SE
-1506440703,1506440703,DE
-1506440704,1506440711,US
-1506440712,1506440719,FR
-1506440720,1506440735,US
-1506440736,1506440767,GB
-1506440768,1506440799,US
-1506440800,1506440831,DE
-1506440832,1506440959,US
-1506440960,1506440991,FR
-1506440992,1506440999,US
-1506441000,1506441007,GB
-1506441008,1506441023,US
-1506441024,1506441087,HK
-1506441088,1506441215,CA
-1506441216,1506441343,US
-1506441344,1506441407,HK
-1506441408,1506441415,DE
-1506441416,1506441423,FR
-1506441424,1506441503,DE
-1506441504,1506441535,US
-1506441536,1506441615,DE
-1506441616,1506441631,US
-1506441632,1506441647,DE
-1506441648,1506441663,GB
-1506441664,1506441671,NL
-1506441672,1506441679,CA
-1506441680,1506441695,DE
-1506441696,1506441727,CA
-1506441728,1506442239,MU
-1506442240,1506442383,US
-1506442384,1506442399,GB
-1506442400,1506442415,FR
-1506442416,1506442427,US
-1506442428,1506442431,DE
-1506442432,1506442463,HK
-1506442464,1506442623,DE
-1506442624,1506442655,GB
-1506442656,1506442687,US
-1506442688,1506442703,GB
-1506442704,1506442711,US
-1506442712,1506442715,NL
-1506442716,1506442719,US
-1506442720,1506442735,GB
-1506442736,1506442743,DE
-1506442744,1506442751,US
-1506442752,1506442879,DE
-1506442880,1506442911,GB
-1506442912,1506442919,DE
-1506442920,1506442923,GB
-1506442924,1506442927,NL
-1506442928,1506442975,US
-1506442976,1506442991,DE
-1506442992,1506442999,GB
-1506443000,1506443003,IE
-1506443004,1506443151,DE
-1506443152,1506443167,GB
-1506443168,1506443183,NL
-1506443184,1506443199,DE
-1506443200,1506443263,US
-1506443264,1506444287,GB
-1506444288,1506445055,DE
-1506445056,1506445311,GB
-1506445312,1506445337,FR
-1506445338,1506445343,GB
-1506445344,1506445519,FR
-1506445520,1506445527,GB
-1506445528,1506446335,FR
-1506446336,1506446719,NL
-1506446720,1506446735,GB
-1506446736,1506447359,NL
-1506447360,1506448255,IT
-1506448256,1506448319,GB
-1506448320,1506448383,IT
-1506448384,1506448639,AT
-1506448640,1506448647,GB
-1506448648,1506448663,AT
-1506448664,1506448671,GB
-1506448672,1506448703,AT
-1506448704,1506448895,GB
-1506448896,1506449407,BE
-1506449408,1506449663,NL
-1506449664,1506449919,SK
-1506449920,1506449927,CH
-1506449928,1506449935,GB
-1506449936,1506450031,CH
-1506450032,1506450039,GB
-1506450040,1506450431,CH
-1506450432,1506450687,CZ
-1506450688,1506450695,GB
-1506450696,1506450703,CZ
-1506450704,1506450711,GB
-1506450712,1506450751,CZ
-1506450752,1506450759,GB
-1506450760,1506450767,CZ
-1506450768,1506450847,GB
-1506450848,1506450863,CZ
-1506450864,1506450879,GB
-1506450880,1506450943,CZ
-1506450944,1506451199,DK
-1506451200,1506451791,ES
-1506451792,1506451799,GB
-1506451800,1506451967,ES
-1506451968,1506451999,GB
-1506452000,1506452063,ES
-1506452064,1506452095,GB
-1506452096,1506452143,ES
-1506452144,1506452159,GB
-1506452160,1506452223,ES
-1506452224,1506452479,DE
-1506452480,1506452735,US
-1506452736,1506452751,RO
-1506452752,1506452759,GB
-1506452760,1506452767,RO
-1506452768,1506452863,GB
-1506452864,1506452871,RO
-1506452872,1506452991,GB
-1506452992,1506453247,AT
-1506453248,1506453391,SE
-1506453392,1506453399,GB
-1506453400,1506453407,SE
-1506453408,1506453423,GB
-1506453424,1506453439,SE
-1506453440,1506453447,GB
-1506453448,1506453471,SE
-1506453472,1506453487,GB
-1506453488,1506453503,SE
-1506453504,1506453759,DE
-1506453760,1506453823,FR
-1506453824,1506453839,GB
-1506453840,1506454015,FR
-1506454016,1506454271,AT
-1506454272,1506454527,ES
-1506454528,1506454783,IT
-1506454784,1506455039,US
-1506455040,1506455295,GB
-1506455296,1506455551,IT
-1506455552,1506456063,AE
-1506456064,1506456319,HU
-1506456320,1506456575,IT
-1506456576,1506456831,IE
+1506410496,1506422063,DE
+1506422064,1506422079,GB
+1506422080,1506443263,DE
+1506443264,1506445103,GB
+1506445104,1506445119,DE
+1506445120,1506445135,GB
+1506445136,1506445151,DE
+1506445152,1506445167,GB
+1506445168,1506445183,DE
+1506445184,1506446823,GB
+1506446824,1506446831,NL
+1506446832,1506450047,GB
+1506450048,1506450111,CH
+1506450112,1506450863,GB
+1506450864,1506450879,CZ
+1506450880,1506453311,GB
+1506453312,1506453319,SE
+1506453320,1506456831,GB
1506456832,1506457087,IT
-1506457088,1506458239,GB
-1506458240,1506458271,CH
-1506458272,1506458279,GB
-1506458280,1506458287,CH
-1506458288,1506458303,GB
-1506458304,1506458623,CH
-1506458624,1506459135,GB
-1506459136,1506459177,BE
-1506459178,1506459178,EU
-1506459179,1506459647,BE
-1506459648,1506460671,FR
-1506460672,1506460927,AT
-1506460928,1506461311,IT
-1506461312,1506461315,GB
-1506461316,1506461319,IT
-1506461320,1506461327,GB
-1506461328,1506461343,IT
-1506461344,1506461351,GB
-1506461352,1506461359,FR
-1506461360,1506461695,IT
-1506461696,1506461839,FR
-1506461840,1506461855,GB
-1506461856,1506461887,FR
-1506461888,1506461951,GB
-1506461952,1506462207,FR
-1506462208,1506462463,ES
-1506462464,1506462527,FR
-1506462528,1506462583,GB
-1506462584,1506462599,FR
-1506462600,1506462607,GB
-1506462608,1506462623,A2
-1506462624,1506462719,FR
-1506462720,1506463231,IT
-1506463232,1506463487,SE
-1506463488,1506463999,DE
-1506464000,1506464767,GB
-1506464768,1506464911,NL
-1506464912,1506464919,GB
-1506464920,1506465023,NL
-1506465024,1506465187,EU
+1506457088,1506458244,GB
+1506458245,1506458245,CH
+1506458246,1506460151,GB
+1506460152,1506460159,FR
+1506460160,1506463679,GB
+1506463680,1506463695,DE
+1506463696,1506464895,GB
+1506464896,1506464911,NL
+1506464912,1506465187,GB
1506465188,1506465188,NL
-1506465189,1506465279,EU
-1506465280,1506465791,GB
-1506465792,1506466047,DE
-1506466048,1506466303,BE
-1506466304,1506466375,DE
-1506466376,1506466383,GB
-1506466384,1506466559,DE
-1506466560,1506467071,GB
-1506467072,1506467327,DE
-1506467328,1506467599,GB
-1506467600,1506467695,IT
-1506467696,1506467839,GB
-1506467840,1506468351,IT
-1506468352,1506468607,GB
-1506468608,1506468863,TZ
-1506468864,1506469471,IT
-1506469472,1506469479,GB
-1506469480,1506470143,IT
-1506470144,1506470399,GB
-1506470400,1506470655,DE
-1506470656,1506471679,IT
-1506471680,1506471951,GB
-1506471952,1506471975,NL
-1506471976,1506471979,GB
-1506471980,1506471999,NL
-1506472000,1506472031,BE
-1506472032,1506472175,NL
-1506472176,1506472191,GB
-1506472192,1506472447,IT
-1506472448,1506472703,GB
-1506472704,1506473215,IT
-1506473216,1506473471,GB
-1506473472,1506474495,IT
-1506474496,1506474751,FR
-1506474752,1506475519,IT
-1506475520,1506475551,GB
-1506475552,1506475567,AT
-1506475568,1506475775,GB
-1506475776,1506476031,DE
+1506465189,1506466383,GB
+1506466384,1506466391,DE
+1506466392,1506466399,GB
+1506466400,1506466431,DE
+1506466432,1506469663,GB
+1506469664,1506469695,IT
+1506469696,1506469759,GB
+1506469760,1506469775,IT
+1506469776,1506471983,GB
+1506471984,1506471999,NL
+1506472000,1506472031,GB
+1506472032,1506472047,NL
+1506472048,1506473471,GB
+1506473472,1506473727,IT
+1506473728,1506474239,GB
+1506474240,1506474495,IT
+1506474496,1506476031,GB
1506476032,1506508799,KW
1506508800,1506541567,CZ
1506541568,1506574335,RU
@@ -62734,16 +20689,12 @@
1506639872,1506672639,NL
1506672640,1506689023,PL
1506689024,1506705407,CH
-1506705408,1506740223,GB
+1506705408,1506727935,GB
+1506727936,1506728959,FR
+1506728960,1506740223,GB
1506740224,1506742271,FI
-1506742272,1506743167,SE
-1506743168,1506743183,DE
-1506743184,1506743199,FR
-1506743200,1506743215,IE
-1506743216,1506744319,SE
-1506744320,1506744383,NL
-1506744384,1506744391,GB
-1506744392,1506746367,NL
+1506742272,1506744319,SE
+1506744320,1506746367,NL
1506746368,1506750463,RU
1506750464,1506752511,GB
1506752512,1506754559,IE
@@ -62751,62 +20702,40 @@
1506758656,1506760703,IT
1506760704,1506764799,RU
1506764800,1506766847,IT
-1506766848,1506768383,NO
-1506768384,1506768895,GE
+1506766848,1506768895,NO
1506768896,1506770943,AT
1506770944,1506772991,NL
1506772992,1506775039,GB
1506775040,1506777087,AT
-1506777088,1506781695,GB
-1506781696,1506781951,IE
-1506781952,1506783231,GB
+1506777088,1506783231,GB
1506785280,1506787327,BE
1506787328,1506789375,ME
1506789376,1506791423,DE
1506791424,1506793471,GB
1506793472,1506795519,RU
-1506795520,1506797567,IE
-1506797568,1506799615,ES
+1506795520,1506799615,CH
1506799616,1506801663,LV
-1506801664,1506802831,DE
-1506802832,1506802839,CH
-1506802840,1506803135,DE
+1506801664,1506803135,DE
1506803136,1506803151,CH
1506803152,1506803711,DE
1506803712,1506869247,RU
1506869248,1506934783,UA
1506934784,1507000319,GR
-1507000320,1507016191,QA
-1507016192,1507016447,US
-1507016448,1507065855,QA
+1507000320,1507065855,QA
1507065856,1507131391,SI
1507131392,1507196927,GB
1507196928,1507262463,PT
1507262464,1507327999,BG
1507328000,1507393535,RS
1507393536,1507459071,CH
-1507459072,1507524607,KZ
+1507459072,1507502847,KZ
+1507502848,1507503103,GB
+1507503104,1507524607,KZ
1507524608,1507590143,EE
1507590144,1507655679,NL
1507655680,1507659775,DE
1507659776,1507663871,RU
-1507663872,1507664127,IT
-1507664128,1507664383,GR
-1507664384,1507664767,DE
-1507664768,1507664895,US
-1507664896,1507665663,IT
-1507665664,1507665791,BG
-1507665792,1507665919,GR
-1507665920,1507666431,US
-1507666432,1507666559,GR
-1507666560,1507666591,FR
-1507666592,1507666639,GR
-1507666640,1507666655,IL
-1507666656,1507666687,SG
-1507666688,1507666943,GB
-1507666944,1507667455,IT
-1507667456,1507667711,DE
-1507667712,1507667967,US
+1507663872,1507667967,IT
1507667968,1507672063,RU
1507672064,1507676159,EE
1507676160,1507680255,IR
@@ -62820,9 +20749,7 @@
1507713024,1507717119,RU
1507717120,1507717631,SE
1507717632,1507718911,NO
-1507718912,1507720191,SE
-1507720192,1507720447,NO
-1507720448,1507721215,SE
+1507718912,1507721215,SE
1507721216,1507753983,GB
1507753984,1507819519,RU
1507819520,1507852287,HU
@@ -62833,21 +20760,11 @@
1508442112,1508458495,DK
1508458496,1508466687,DE
1508466688,1508468735,NO
-1508468736,1508468991,NL
-1508468992,1508469055,US
-1508469056,1508470783,NL
+1508468736,1508470783,NL
1508470784,1508474879,SI
-1508474880,1508479263,CZ
-1508479264,1508479295,GB
-1508479296,1508486463,CZ
-1508486464,1508486527,DE
-1508486528,1508491263,CZ
+1508474880,1508491263,CZ
1508491264,1508507647,SE
-1508507648,1508514063,GB
-1508514064,1508514071,A2
-1508514072,1508521535,GB
-1508521536,1508521551,IE
-1508521552,1508524031,GB
+1508507648,1508524031,GB
1508524032,1508540415,IE
1508540416,1508556799,FR
1508556800,1508573183,PL
@@ -62855,22 +20772,13 @@
1508589568,1508605951,IR
1508605952,1508622335,RU
1508622336,1508638719,EE
-1508638720,1508639231,SE
-1508639232,1508641535,DK
-1508641536,1508642047,SE
-1508642048,1508642815,DK
-1508642816,1508646911,SE
-1508646912,1508647423,DK
-1508647424,1508647679,SE
-1508647680,1508647935,DK
-1508647936,1508648447,SE
-1508648448,1508648703,DK
-1508648704,1508650751,SE
-1508650752,1508651263,DK
-1508651264,1508652543,SE
-1508652544,1508654079,DK
-1508654080,1508654591,SE
-1508654592,1508655103,DK
+1508638720,1508639999,SE
+1508640000,1508640255,DK
+1508640256,1508642559,SE
+1508642560,1508642815,DK
+1508642816,1508650751,SE
+1508650752,1508651007,DK
+1508651008,1508655103,SE
1508655104,1508671487,FI
1508671488,1508687871,CH
1508687872,1508704255,UZ
@@ -62879,21 +20787,13 @@
1508737024,1508753407,SA
1508753408,1508769791,KG
1508769792,1508786175,PL
-1508786176,1508787199,DE
-1508787200,1508787455,ES
-1508787456,1508788031,DE
-1508788032,1508788063,BE
-1508788064,1508789831,DE
-1508789832,1508789839,AT
-1508789840,1508802559,DE
-1508802560,1508804783,GB
-1508804784,1508804791,DE
-1508804792,1508818943,GB
+1508786176,1508802559,DE
+1508802560,1508818943,GB
1508818944,1508819711,RO
1508819712,1508819967,DE
1508819968,1508830719,RO
-1508830720,1508832255,SK
-1508832256,1508835327,RO
+1508830720,1508831487,SK
+1508831488,1508835327,RO
1508835328,1508851711,CZ
1508851712,1508868095,PL
1508868096,1508884479,RU
@@ -62909,40 +20809,17 @@
1509449728,1509453823,ES
1509453824,1509457919,RU
1509457920,1509462015,NL
-1509462016,1509465855,LI
-1509465856,1509466111,CH
-1509466112,1509466879,NL
-1509466880,1509466911,FR
-1509466912,1509467055,NL
-1509467056,1509467103,SE
-1509467104,1509467399,NL
-1509467400,1509467407,PL
-1509467408,1509467423,NL
-1509467424,1509467455,PL
-1509467456,1509467487,NL
-1509467488,1509467519,PL
-1509467520,1509467583,BE
-1509467584,1509467839,NL
-1509467840,1509467871,PL
-1509467872,1509469055,NL
-1509469056,1509469183,PL
-1509469184,1509469887,NL
-1509469888,1509469919,MY
-1509469920,1509470207,NL
+1509462016,1509465599,LI
+1509465600,1509465855,CH
+1509465856,1509466111,LI
+1509466112,1509470207,NL
1509470208,1509478399,RU
1509478400,1509482495,FR
1509482496,1509486591,RU
-1509486592,1509489407,CZ
-1509489408,1509489535,DE
-1509489536,1509490687,CZ
+1509486592,1509490687,CZ
1509490688,1509494783,DK
1509494784,1509498879,RU
-1509498880,1509499391,CH
-1509499392,1509500671,DE
-1509500672,1509500927,CH
-1509500928,1509501151,DE
-1509501152,1509501159,GB
-1509501160,1509502975,CH
+1509498880,1509502975,DE
1509502976,1509507071,RU
1509507072,1509511167,GB
1509511168,1509515263,LT
@@ -62951,56 +20828,39 @@
1509535744,1509537791,IT
1509537792,1509539839,HR
1509539840,1509543935,AM
-1509543936,1509543975,LB
-1509543976,1509543983,DE
-1509543984,1509548031,LB
+1509543936,1509548031,LB
1509548032,1509564415,RU
1509564416,1509568511,GB
1509568512,1509572607,FI
1509572608,1509576703,NL
1509576704,1509580799,KZ
1509580800,1509584895,CZ
-1509584896,1509588479,NO
-1509588480,1509588607,GB
-1509588608,1509588991,NO
+1509584896,1509588991,NO
1509588992,1509593087,DE
1509593088,1509601279,RU
-1509601280,1509604111,NL
-1509604112,1509604129,BE
-1509604130,1509604130,NL
-1509604131,1509604255,BE
-1509604256,1509604287,NL
-1509604288,1509604303,BE
-1509604304,1509604311,NL
-1509604312,1509604351,BE
-1509604352,1509605375,NL
+1509601280,1509605375,NL
1509605376,1509609471,PL
1509609472,1509617663,RU
1509617664,1509621759,CZ
-1509621760,1509623807,US
-1509623808,1509624319,NL
-1509624320,1509625855,US
+1509621760,1509625855,US
1509625856,1509629951,UA
1509629952,1509634047,HU
1509634048,1509638143,FR
1509638144,1509642239,RU
-1509642240,1509644351,KW
-1509644352,1509644383,GB
-1509644384,1509646335,KW
+1509642240,1509646335,KW
1509646336,1509650431,RU
1509650432,1509654527,GB
1509654528,1509658623,DE
1509658624,1509666815,RU
1509666816,1509670911,IT
1509670912,1509675007,GB
-1509675008,1509677823,NO
-1509677824,1509679103,GB
+1509675008,1509677439,NO
+1509677440,1509679103,GB
1509679104,1509683199,ES
1509683200,1509687295,CH
1509687296,1509703679,UA
1509703680,1509720063,RU
-1509720064,1509724927,US
-1509724928,1509736447,TR
+1509720064,1509736447,TR
1509736448,1509752831,BG
1509752832,1509769215,RU
1509769216,1509785599,SE
@@ -63013,162 +20873,230 @@
1509900288,1509916671,RU
1509916672,1509933055,GB
1509933056,1509949439,US
-1509949440,1511981055,FR
-1511981056,1511986175,RE
+1509949440,1510663167,FR
+1510663168,1510663423,RE
+1510663424,1511981055,FR
+1511981056,1511981567,RE
+1511981568,1511982591,FR
+1511982592,1511983615,RE
+1511983616,1511984639,FR
+1511984640,1511985151,RE
+1511985152,1511985407,FR
+1511985408,1511986175,RE
1511986176,1511986431,FR
-1511986432,1511987967,RE
-1511987968,1511988223,FR
-1511988224,1511989247,RE
+1511986432,1511986687,RE
+1511986688,1511986943,FR
+1511986944,1511987199,RE
+1511987200,1511987967,FR
+1511987968,1511988479,RE
+1511988480,1511988735,FR
+1511988736,1511989247,RE
1511989248,1511989503,FR
-1511989504,1511989759,RE
-1511989760,1511990015,FR
-1511990016,1511990271,RE
+1511989504,1511990271,RE
1511990272,1511990527,FR
-1511990528,1511992831,RE
-1511992832,1511993087,FR
-1511993088,1511993855,RE
-1511993856,1511994367,FR
-1511994368,1511996671,RE
-1511996672,1511996927,FR
-1511996928,1511997183,RE
-1511997184,1511997439,FR
-1511997440,1511997695,MQ
-1511997696,1511997951,FR
-1511997952,1512001535,MQ
-1512001536,1512001791,FR
-1512001792,1512004863,MQ
-1512004864,1512005119,FR
-1512005120,1512005375,MQ
-1512005376,1512005631,FR
-1512005632,1512009727,GP
-1512009728,1512009983,GF
-1512009984,1512010239,FR
-1512010240,1512010495,GF
-1512010496,1512010751,FR
-1512010752,1512011263,GP
-1512011264,1512011519,GF
-1512011520,1512011775,GP
-1512011776,1512012031,GF
-1512012032,1512012287,GP
-1512012288,1512012543,GF
-1512012544,1512012799,GP
-1512012800,1512013055,FR
-1512013056,1512013311,GF
-1512013312,1512013823,FR
-1512013824,1512014847,GF
-1512014848,1512015103,FR
-1512015104,1512016383,GF
-1512016384,1512016639,FR
-1512016640,1512017151,GF
-1512017152,1512017407,FR
-1512017408,1512019967,GF
-1512019968,1512022271,FR
-1512022272,1512022783,GF
-1512022784,1512023039,FR
-1512023040,1512023807,GF
-1512023808,1512024063,FR
-1512024064,1512024575,GF
-1512024576,1512024831,FR
-1512024832,1512025599,GF
-1512025600,1512025855,FR
-1512025856,1512028159,GF
-1512028160,1512030207,FR
+1511990528,1511991295,RE
+1511991296,1511991551,FR
+1511991552,1511992575,RE
+1511992576,1511993087,FR
+1511993088,1511994367,RE
+1511994368,1511995135,FR
+1511995136,1511995391,RE
+1511995392,1511995647,FR
+1511995648,1511996415,RE
+1511996416,1511996671,FR
+1511996672,1511996927,RE
+1511996928,1511997439,FR
+1511997440,1511998207,MQ
+1511998208,1511998463,FR
+1511998464,1511998719,MQ
+1511998720,1511998975,FR
+1511998976,1511999487,MQ
+1511999488,1511999743,FR
+1511999744,1512001023,MQ
+1512001024,1512001535,FR
+1512001536,1512003583,MQ
+1512003584,1512003839,FR
+1512003840,1512004095,MQ
+1512004096,1512004351,FR
+1512004352,1512005631,MQ
+1512005632,1512006143,BL
+1512006144,1512006399,FR
+1512006400,1512006911,BL
+1512006912,1512007167,MF
+1512007168,1512007423,FR
+1512007424,1512007935,BL
+1512007936,1512008191,FR
+1512008192,1512008447,BL
+1512008448,1512008703,MF
+1512008704,1512009215,BL
+1512009216,1512009471,MF
+1512009472,1512010239,BL
+1512010240,1512010495,GP
+1512010496,1512010751,BL
+1512010752,1512011263,MF
+1512011264,1512012287,BL
+1512012288,1512012543,FR
+1512012544,1512013055,BL
+1512013056,1512013311,FR
+1512013312,1512013567,BL
+1512013568,1512013823,FR
+1512013824,1512016639,GF
+1512016640,1512016895,FR
+1512016896,1512018943,GF
+1512018944,1512019199,FR
+1512019200,1512020479,GF
+1512020480,1512022015,FR
+1512022016,1512022271,GF
+1512022272,1512022527,FR
+1512022528,1512028415,GF
+1512028416,1512030207,FR
1512030208,1512046591,YT
1512046592,1512767487,FR
-1512767488,1512769023,RE
-1512769024,1512769279,FR
-1512769280,1512771071,RE
-1512771072,1512771327,FR
-1512771328,1512772095,RE
-1512772096,1512772863,FR
-1512772864,1512773631,RE
-1512773632,1512773887,FR
-1512773888,1512774399,RE
-1512774400,1512774911,FR
-1512774912,1512775423,RE
-1512775424,1512775935,FR
-1512775936,1512776447,RE
-1512776448,1512776959,FR
-1512776960,1512777215,RE
+1512767488,1512767743,RE
+1512767744,1512767999,FR
+1512768000,1512768255,RE
+1512768256,1512768511,FR
+1512768512,1512770047,RE
+1512770048,1512770303,FR
+1512770304,1512770815,RE
+1512770816,1512771583,FR
+1512771584,1512772351,RE
+1512772352,1512772863,FR
+1512772864,1512777215,RE
1512777216,1512777471,FR
-1512777472,1512779007,RE
-1512779008,1512779263,FR
-1512779264,1512780031,RE
-1512780032,1512780287,FR
-1512780288,1512781823,RE
-1512781824,1512782847,FR
-1512782848,1512783359,RE
-1512783360,1512783615,FR
-1512783616,1512783871,RE
-1512783872,1512784127,FR
-1512784128,1512784895,RE
-1512784896,1512785407,FR
-1512785408,1512785919,RE
-1512785920,1512786943,FR
-1512786944,1512788991,RE
-1512788992,1512789247,FR
-1512789248,1512791039,RE
-1512791040,1512791295,FR
-1512791296,1512791551,RE
-1512791552,1512792063,FR
-1512792064,1512798207,RE
+1512777472,1512778495,RE
+1512778496,1512779007,FR
+1512779008,1512779519,RE
+1512779520,1512780031,FR
+1512780032,1512780287,RE
+1512780288,1512780543,FR
+1512780544,1512781567,RE
+1512781568,1512782847,FR
+1512782848,1512783103,RE
+1512783104,1512783359,FR
+1512783360,1512785919,RE
+1512785920,1512787199,FR
+1512787200,1512787967,RE
+1512787968,1512788223,FR
+1512788224,1512791807,RE
+1512791808,1512793087,FR
+1512793088,1512794111,RE
+1512794112,1512794367,FR
+1512794368,1512794623,RE
+1512794624,1512794879,FR
+1512794880,1512795135,RE
+1512795136,1512795391,FR
+1512795392,1512796415,RE
+1512796416,1512796671,FR
+1512796672,1512797183,RE
+1512797184,1512797439,FR
+1512797440,1512797695,RE
+1512797696,1512797951,FR
+1512797952,1512798207,RE
1512798208,1512799231,FR
1512799232,1512799487,RE
-1512799488,1512800255,FR
-1512800256,1512803327,MQ
-1512803328,1512803583,FR
-1512803584,1512804351,MQ
-1512804352,1512804607,FR
-1512804608,1512805887,MQ
-1512805888,1512806399,FR
-1512806400,1512809471,MQ
-1512809472,1512809983,FR
-1512809984,1512810239,MQ
-1512810240,1512810495,FR
-1512810496,1512811263,MQ
-1512811264,1512811519,FR
-1512811520,1512811775,MQ
-1512811776,1512812031,FR
-1512812032,1512816639,MQ
-1512816640,1512819199,GP
-1512819200,1512819455,FR
-1512819456,1512820223,GP
-1512820224,1512820479,FR
-1512820480,1512820735,GP
-1512820736,1512820991,FR
-1512820992,1512824063,GP
-1512824064,1512824319,FR
-1512824320,1512824831,GP
-1512824832,1512825087,FR
-1512825088,1512825599,GP
-1512825600,1512825855,FR
-1512825856,1512826879,GP
-1512826880,1512827135,FR
-1512827136,1512829183,GP
-1512829184,1512829439,FR
-1512829440,1512829951,GP
-1512829952,1512830719,FR
-1512830720,1512832767,GP
+1512799488,1512800511,FR
+1512800512,1512801023,MQ
+1512801024,1512801535,FR
+1512801536,1512802303,MQ
+1512802304,1512802815,FR
+1512802816,1512803071,MQ
+1512803072,1512803327,FR
+1512803328,1512803839,MQ
+1512803840,1512804607,FR
+1512804608,1512805375,MQ
+1512805376,1512805631,FR
+1512805632,1512806399,MQ
+1512806400,1512806655,FR
+1512806656,1512807423,MQ
+1512807424,1512807679,FR
+1512807680,1512807935,MQ
+1512807936,1512808447,FR
+1512808448,1512808959,MQ
+1512808960,1512809215,FR
+1512809216,1512810495,MQ
+1512810496,1512810751,FR
+1512810752,1512812543,MQ
+1512812544,1512812799,FR
+1512812800,1512813311,MQ
+1512813312,1512813567,FR
+1512813568,1512813823,MQ
+1512813824,1512814079,FR
+1512814080,1512815615,MQ
+1512815616,1512815871,FR
+1512815872,1512816639,MQ
+1512816640,1512818431,GP
+1512818432,1512818687,FR
+1512818688,1512819967,GP
+1512819968,1512820223,FR
+1512820224,1512822271,GP
+1512822272,1512822527,FR
+1512822528,1512824319,GP
+1512824320,1512824831,FR
+1512824832,1512826367,GP
+1512826368,1512826623,FR
+1512826624,1512828671,GP
+1512828672,1512828927,FR
+1512828928,1512830463,GP
+1512830464,1512830719,FR
+1512830720,1512831999,GP
+1512832000,1512832255,FR
+1512832256,1512832767,GP
1512832768,1514110975,FR
-1514110976,1514118143,GP
-1514118144,1514118399,FR
-1514118400,1514118655,GP
-1514118656,1514119167,FR
-1514119168,1514127359,GP
-1514127360,1514128127,RE
-1514128128,1514128383,FR
-1514128384,1514131967,RE
+1514110976,1514111487,GP
+1514111488,1514111743,FR
+1514111744,1514112255,GP
+1514112256,1514112767,FR
+1514112768,1514114047,GP
+1514114048,1514114559,FR
+1514114560,1514116863,GP
+1514116864,1514117119,FR
+1514117120,1514117887,GP
+1514117888,1514118143,FR
+1514118144,1514119423,GP
+1514119424,1514119679,FR
+1514119680,1514119935,GP
+1514119936,1514120191,FR
+1514120192,1514121215,GP
+1514121216,1514121471,FR
+1514121472,1514123007,GP
+1514123008,1514123263,FR
+1514123264,1514125055,GP
+1514125056,1514125823,FR
+1514125824,1514126079,GP
+1514126080,1514126335,FR
+1514126336,1514126591,GP
+1514126592,1514127359,FR
+1514127360,1514127871,RE
+1514127872,1514128127,FR
+1514128128,1514128895,RE
+1514128896,1514129151,FR
+1514129152,1514129919,RE
+1514129920,1514130175,FR
+1514130176,1514130687,RE
+1514130688,1514130943,FR
+1514130944,1514131455,RE
+1514131456,1514131711,FR
+1514131712,1514131967,RE
1514131968,1514132223,FR
-1514132224,1514134015,RE
+1514132224,1514132735,RE
+1514132736,1514132991,FR
+1514132992,1514134015,RE
1514134016,1514134271,FR
-1514134272,1514139391,RE
+1514134272,1514135295,RE
+1514135296,1514135551,FR
+1514135552,1514135807,RE
+1514135808,1514136063,FR
+1514136064,1514136831,RE
+1514136832,1514137855,FR
+1514137856,1514139391,RE
1514139392,1514139647,FR
-1514139648,1514143743,RE
-1514143744,1515192639,FR
-1515192640,1515192655,EU
-1515192656,1515241759,FR
-1515241760,1515241791,GB
-1515241792,1515467007,FR
+1514139648,1514140415,RE
+1514140416,1514140671,FR
+1514140672,1514142207,RE
+1514142208,1514142463,FR
+1514142464,1514143743,RE
+1514143744,1515467007,FR
1515467008,1515467263,ES
1515467264,1515467519,FR
1515467520,1515468031,US
@@ -63177,36 +21105,95 @@
1515468544,1515468799,DE
1515468800,1515469823,FR
1515469824,1515470079,DE
-1515470080,1515486975,FR
-1515486976,1515487231,CD
-1515487232,1515487495,HK
-1515487496,1515487739,FR
-1515487740,1515487775,HK
-1515487776,1515487999,FR
-1515488000,1515488255,HK
-1515488256,1515519743,FR
-1515519744,1515519999,ES
-1515520000,1518338047,FR
+1515470080,1515470335,FR
+1515470336,1515470847,US
+1515470848,1515488511,FR
+1515488512,1515488895,US
+1515488896,1515489023,FR
+1515489024,1515489039,DE
+1515489040,1515489151,FR
+1515489152,1515489167,ES
+1515489168,1518338047,FR
1518338048,1518370815,DE
1518370816,1518403583,NL
-1518403584,1518452735,SE
+1518403584,1518436351,SE
+1518436352,1518439679,NO
+1518439680,1518439935,SE
+1518439936,1518441471,NO
+1518441472,1518441727,SE
+1518441728,1518444031,NO
+1518444032,1518444287,SE
+1518444288,1518444543,NO
+1518444544,1518444799,SE
+1518444800,1518445823,NO
+1518445824,1518446335,SE
+1518446336,1518448383,NO
+1518448384,1518448895,SE
+1518448896,1518452223,NO
+1518452224,1518452735,SE
1518452736,1518460927,AT
-1518460928,1518469119,NL
-1518469120,1518479359,SE
-1518479360,1518481407,EE
-1518481408,1518493695,SE
+1518460928,1518470143,NL
+1518470144,1518472191,SE
+1518472192,1518475263,LT
+1518475264,1518476287,SE
+1518476288,1518476799,EE
+1518476800,1518477311,SE
+1518477312,1518481407,EE
+1518481408,1518489599,SE
+1518489600,1518490623,NL
+1518490624,1518493695,SE
1518493696,1518501887,NL
1518501888,1518503935,EE
1518503936,1518510079,LT
-1518510080,1518516479,LV
-1518516480,1518517247,SE
+1518510080,1518516223,LV
+1518516224,1518517247,SE
1518517248,1518518271,LV
-1518518272,1518538495,SE
-1518538496,1518538751,LT
-1518538752,1518542847,SE
+1518518272,1518542847,SE
1518542848,1518551039,LT
1518551040,1518565375,NL
-1518565376,1518633215,SE
+1518565376,1518567423,SE
+1518567424,1518568703,LV
+1518568704,1518568959,SE
+1518568960,1518570239,LV
+1518570240,1518570495,SE
+1518570496,1518572543,LV
+1518572544,1518572799,SE
+1518572800,1518573311,LV
+1518573312,1518573823,SE
+1518573824,1518574335,LV
+1518574336,1518574591,SE
+1518574592,1518576127,LV
+1518576128,1518576383,SE
+1518576384,1518577407,LV
+1518577408,1518577919,SE
+1518577920,1518578687,LV
+1518578688,1518578943,SE
+1518578944,1518580479,LV
+1518580480,1518580735,SE
+1518580736,1518582271,LV
+1518582272,1518582527,SE
+1518582528,1518583039,LV
+1518583040,1518583295,SE
+1518583296,1518585343,LV
+1518585344,1518585599,SE
+1518585600,1518585855,LV
+1518585856,1518586111,SE
+1518586112,1518586623,LV
+1518586624,1518586879,SE
+1518586880,1518587647,LV
+1518587648,1518587903,SE
+1518587904,1518591743,LV
+1518591744,1518591999,SE
+1518592000,1518592255,LV
+1518592256,1518592511,SE
+1518592512,1518594047,LV
+1518594048,1518594303,SE
+1518594304,1518594815,LV
+1518594816,1518595071,SE
+1518595072,1518595327,LV
+1518595328,1518595583,SE
+1518595584,1518600191,LV
+1518600192,1518633215,SE
1518633216,1518633471,NL
1518633472,1518635007,SE
1518635008,1518637055,NL
@@ -63215,137 +21202,73 @@
1518649344,1518665727,SE
1518665728,1518727167,RU
1518727168,1518731263,SE
-1518731264,1518764031,DE
-1518764032,1518772223,LT
-1518772224,1518927871,DE
+1518731264,1518747647,DE
+1518747648,1518772223,LT
+1518772224,1518780415,NL
+1518780416,1518796799,HR
+1518796800,1518927871,DE
1518927872,1518944255,RU
1518944256,1518960639,SE
1518960640,1518961663,LT
1518961664,1518962175,EE
-1518962176,1518962687,LV
+1518962176,1518962687,SE
1518962688,1518964735,NO
1518964736,1518966783,HR
1518966784,1518967807,SE
-1518967808,1518970879,HR
-1518970880,1518972927,SE
-1518972928,1518977023,HR
+1518967808,1518977023,HR
1518977024,1518993407,SE
1518993408,1519190015,RU
-1519190016,1519263743,SE
-1519263744,1519288319,NL
-1519288320,1519321087,SE
+1519190016,1519206399,SE
+1519206400,1519208447,LV
+1519208448,1519259647,SE
+1519259648,1519260671,NL
+1519260672,1519263743,SE
+1519263744,1519289343,NL
+1519289344,1519292415,SE
+1519292416,1519293951,LT
+1519293952,1519297023,SE
+1519297024,1519297279,LT
+1519297280,1519297535,SE
+1519297536,1519297791,LT
+1519297792,1519300607,SE
+1519300608,1519304703,LT
+1519304704,1519313151,SE
+1519313152,1519313407,LT
+1519313408,1519313663,SE
+1519313664,1519313919,LT
+1519313920,1519314175,SE
+1519314176,1519318271,LT
+1519318272,1519318527,SE
+1519318528,1519321087,LT
1519321088,1519386623,RU
-1519386624,1519452159,SE
+1519386624,1519394815,SE
+1519394816,1519398911,HR
+1519398912,1519403007,SE
+1519403008,1519411711,NL
+1519411712,1519411967,SE
+1519411968,1519415295,NL
+1519415296,1519415551,SE
+1519415552,1519416575,NL
+1519416576,1519416831,SE
+1519416832,1519419391,NL
+1519419392,1519452159,SE
1519452160,1519517695,NL
1519517696,1519583231,AT
1519583232,1519648767,IT
1519648768,1519714303,SA
1519714304,1519779839,NO
1519779840,1519910911,RU
-1519910912,1519927295,GB
-1519927296,1519927311,FR
-1519927312,1519927319,BE
-1519927320,1519927327,FR
-1519927328,1519927335,ES
-1519927336,1519927343,CH
-1519927344,1519927351,AT
-1519927352,1519927375,NL
-1519927376,1519927383,CH
-1519927384,1519927399,NL
-1519927400,1519927407,FR
-1519927408,1519927415,AT
-1519927416,1519927423,BE
-1519927424,1519927431,LU
-1519927432,1519927439,NL
-1519927440,1519927447,CH
-1519927448,1519927463,FR
-1519927464,1519927471,IT
-1519927472,1519927479,NL
-1519927480,1519927503,FR
-1519927504,1519927511,NL
-1519927512,1519927527,ES
-1519927528,1519927535,NL
-1519927536,1519927543,FR
-1519927544,1519927551,IE
-1519927552,1519927559,SE
-1519927560,1519927567,IT
-1519927568,1519927575,GB
-1519927576,1519927583,FR
-1519927584,1519927591,AT
-1519927592,1519927607,BE
-1519927608,1519927615,FR
-1519927616,1519927679,NL
-1519927680,1519927687,IE
-1519927688,1519927695,IT
-1519927696,1519927719,NL
-1519927720,1519927727,ES
-1519927728,1519927735,FR
-1519927736,1519927743,NL
-1519927744,1519927751,ES
-1519927752,1519927759,IT
-1519927760,1519927767,ES
-1519927768,1519927775,NL
-1519927776,1519927783,FR
-1519927784,1519927823,GB
-1519927824,1519927831,BE
-1519927832,1519927855,GB
-1519927856,1519927863,DK
-1519927864,1519927871,FI
-1519927872,1519927879,NL
-1519927880,1519927895,GB
-1519927896,1519927903,NL
-1519927904,1519928119,GB
-1519928120,1519928143,NO
-1519928144,1519928151,NL
-1519928152,1519928183,DK
-1519928184,1519928191,GB
-1519928192,1519928199,SE
-1519928200,1519928247,GB
-1519928248,1519928255,DK
-1519928256,1519929279,GB
-1519929280,1519929287,NL
-1519929288,1519929343,GB
-1519929344,1519934463,NL
-1519934464,1519934975,GB
-1519934976,1519935487,NL
-1519935488,1519935615,FR
-1519935616,1519935743,NL
-1519935744,1519935935,FI
-1519935936,1519936191,BE
+1519910912,1519928063,GB
+1519928064,1519928319,DK
+1519928320,1519931391,GB
+1519931392,1519934463,NL
+1519934464,1519936191,GB
1519936192,1519936255,DK
-1519936256,1519936383,NL
-1519936384,1519936447,BE
-1519936448,1519936511,NO
-1519936512,1519936575,SK
-1519936576,1519936767,DK
-1519936768,1519936895,SE
-1519936896,1519937023,BE
-1519937024,1519937279,DK
-1519937280,1519937343,NL
-1519937344,1519937407,SE
-1519937408,1519937471,NO
-1519937472,1519937535,GB
-1519937536,1519937727,NL
-1519937728,1519938559,GB
+1519936256,1519938559,GB
1519938560,1519939583,NL
-1519939584,1519939615,NO
-1519939616,1519939647,NL
-1519939648,1519939679,SE
-1519939680,1519939711,SK
-1519939712,1519939743,NL
-1519939744,1519939807,BE
-1519939808,1519939839,NL
-1519939840,1519940095,GB
-1519940096,1519940159,NL
-1519940160,1519940191,FI
-1519940192,1519940223,SE
-1519940224,1519943679,GB
+1519939584,1519943679,GB
1519943680,1519976447,AT
-1519976448,1519980159,DE
-1519980160,1519980191,GB
-1519980192,1519980199,DE
-1519980200,1519980287,GB
-1519980288,1520009215,DE
+1519976448,1520009215,DE
1520009216,1520041983,SY
1520041984,1520074751,RU
1520074752,1520107519,BG
@@ -63364,9 +21287,11 @@
1522270208,1522401279,RU
1522401280,1522532351,EE
1522532352,1524629503,GB
-1524629504,1524886783,SE
-1524886784,1524887039,DK
-1524887040,1525678079,SE
+1524629504,1525092351,SE
+1525092352,1525092479,DK
+1525092480,1525122047,SE
+1525122048,1525122175,DK
+1525122176,1525678079,SE
1525678080,1526726655,GB
1526726656,1531183103,DE
1531183104,1531445247,FR
@@ -63389,7 +21314,6 @@
1532639232,1532641279,PL
1532641280,1532643327,NO
1532643328,1532645375,PL
-1532645376,1532647423,RU
1532647424,1532649471,PL
1532649472,1532651519,FR
1532651520,1532653567,NO
@@ -63420,9 +21344,7 @@
1533431808,1533433855,IE
1533433856,1533435903,DK
1533435904,1533437951,CZ
-1533437952,1533441519,PL
-1533441520,1533441535,CH
-1533441536,1533442047,PL
+1533437952,1533442047,PL
1533442048,1533444095,AE
1533444096,1533446143,IT
1533446144,1533448191,DE
@@ -63440,27 +21362,15 @@
1533470720,1533472767,KW
1533472768,1533474815,ES
1533474816,1533476863,FR
-1533476864,1533478143,IE
-1533478144,1533478207,DK
-1533478208,1533478911,IE
+1533476864,1533478911,IE
1533478912,1533480959,RS
-1533480960,1533481727,NL
-1533481728,1533482495,GB
-1533482496,1533482751,NL
-1533482752,1533483007,GB
+1533480960,1533483007,NL
1533483008,1533485055,AM
-1533485056,1533485567,GB
-1533485568,1533485823,DE
-1533485824,1533486335,SE
+1533485056,1533486079,GB
+1533486080,1533486335,SE
1533486336,1533486591,NO
-1533486592,1533486847,DK
-1533486848,1533487103,FI
-1533487104,1533487359,FR
-1533487360,1533487615,US
-1533487616,1533487871,JP
-1533487872,1533488639,FR
-1533488640,1533488895,US
-1533488896,1533489151,JP
+1533486592,1533487103,GB
+1533487104,1533489151,FR
1533489152,1533491199,ES
1533491200,1533493247,AM
1533493248,1533499391,RU
@@ -63470,12 +21380,7 @@
1533505536,1533507583,DE
1533507584,1533509631,UA
1533509632,1533511679,GB
-1533511680,1533511935,IT
-1533511936,1533513023,FR
-1533513024,1533513087,ES
-1533513088,1533513215,FR
-1533513216,1533513471,GB
-1533513472,1533513727,DE
+1533511680,1533513727,FR
1533513728,1533515775,KW
1533515776,1533517823,RU
1533517824,1533519871,CZ
@@ -63488,12 +21393,20 @@
1533540352,1533542399,AT
1533542400,1533607935,HU
1533607936,1533640703,LV
-1533640704,1533669375,RU
+1533640704,1533659135,RU
+1533659136,1533660159,LV
+1533660160,1533661183,UA
+1533661184,1533663231,SE
+1533663232,1533665279,NL
+1533665280,1533667327,GB
+1533667328,1533669375,RU
1533669376,1533671423,DE
1533671424,1533673471,FI
1533673472,1533677567,DE
1533677568,1533679615,ES
-1533679616,1533681663,PL
+1533679616,1533680127,PL
+1533680128,1533680383,ES
+1533680384,1533681663,PL
1533681664,1533689855,IQ
1533689856,1533698047,IR
1533698048,1533702143,JO
@@ -63511,39 +21424,21 @@
1533837312,1533845503,IR
1533845504,1533847551,GB
1533847552,1533849599,RU
-1533849600,1533851135,SE
-1533851136,1533851647,US
-1533851648,1533851903,CH
-1533851904,1533851919,DE
-1533851920,1533851923,FR
-1533851924,1533851935,CH
-1533851936,1533851939,GB
-1533851940,1533851951,CH
-1533851952,1533851955,IT
-1533851956,1533851967,CH
-1533851968,1533851971,PL
-1533851972,1533851983,CH
-1533851984,1533851987,BR
-1533851988,1533852191,CH
-1533852192,1533852195,IN
-1533852196,1533853695,CH
-1533853696,1533870079,TR
-1533870080,1533870591,ES
-1533870592,1533874175,GB
+1533849600,1533851647,SE
+1533851648,1533853695,CH
+1533853696,1533874175,GB
1533874176,1533878271,DE
1533878272,1533880319,CZ
1533880320,1533882367,GB
1533882368,1533886463,IT
1533886464,1533894655,RU
1533894656,1533896703,ES
-1533896704,1533897215,PT
-1533897216,1533898495,US
-1533898496,1533900799,PT
+1533896704,1533900799,PT
1533900800,1533902847,FR
1533902848,1533911039,RU
1533911040,1533913087,ES
1533913088,1533915135,IT
-1533915136,1533919231,GB
+1533915136,1533919231,NL
1533919232,1533921279,IT
1533921280,1533923327,RU
1533923328,1533925375,TR
@@ -63552,647 +21447,45 @@
1533929472,1533932799,GB
1533932800,1533933055,DE
1533933056,1534066687,GB
-1534066688,1534129151,AT
-1534129152,1534129407,A2
-1534129408,1534328831,AT
-1534328832,1534363903,ES
-1534363904,1534364159,PT
-1534364160,1534459903,ES
+1534066688,1534328831,AT
+1534328832,1534459903,ES
1534459904,1534590975,AT
1534590976,1534656511,HU
1534656512,1534711807,FR
1534711808,1534712831,BE
-1534712832,1534713855,FR
-1534713856,1534713887,PT
-1534713888,1534713927,FR
-1534713928,1534713931,GB
-1534713932,1534713935,FI
-1534713936,1534713943,FR
-1534713944,1534713947,DE
-1534713948,1534713951,PL
-1534713952,1534713955,DE
-1534713956,1534713959,BE
-1534713960,1534713963,CH
-1534713964,1534713983,FR
-1534713984,1534713999,PL
-1534714000,1534714015,FR
-1534714016,1534714031,DE
-1534714032,1534714047,BE
-1534714048,1534714051,FR
-1534714052,1534714055,IT
-1534714056,1534714059,DE
-1534714060,1534714063,FR
-1534714064,1534714079,ES
-1534714080,1534714095,FR
-1534714096,1534714111,BE
-1534714112,1534714115,ES
-1534714116,1534714119,DE
-1534714120,1534714123,FI
-1534714124,1534714127,ES
-1534714128,1534714143,BE
-1534714144,1534714159,GB
-1534714160,1534714255,FR
-1534714256,1534714259,DE
-1534714260,1534714271,PL
-1534714272,1534714279,FR
-1534714280,1534714283,DE
-1534714284,1534714287,CH
-1534714288,1534714303,ES
-1534714304,1534714307,GB
-1534714308,1534714311,ES
-1534714312,1534714315,PL
-1534714316,1534714323,FR
-1534714324,1534714327,ES
-1534714328,1534714331,FR
-1534714332,1534714335,PL
-1534714336,1534714351,FR
-1534714352,1534714383,GB
-1534714384,1534714399,FR
-1534714400,1534714403,GB
-1534714404,1534714407,ES
-1534714408,1534714415,DE
-1534714416,1534714431,GB
-1534714432,1534714439,FR
-1534714440,1534714447,PL
-1534714448,1534714463,FR
-1534714464,1534714495,NL
-1534714496,1534714511,FR
-1534714512,1534714527,DE
-1534714528,1534714531,FR
-1534714532,1534714535,PL
-1534714536,1534714539,GB
-1534714540,1534714543,PL
-1534714544,1534714551,FR
-1534714552,1534714559,ES
-1534714560,1534714575,NL
-1534714576,1534714591,GB
-1534714592,1534714655,FR
-1534714656,1534714671,PL
-1534714672,1534714691,FR
-1534714692,1534714695,GB
-1534714696,1534714703,FR
-1534714704,1534714719,CH
-1534714720,1534714751,BE
+1534712832,1534714415,FR
+1534714416,1534714431,ES
+1534714432,1534714751,FR
1534714752,1534714767,DE
-1534714768,1534714783,IE
-1534714784,1534714799,PL
-1534714800,1534714815,GB
-1534714816,1534714819,BE
-1534714820,1534714831,FR
-1534714832,1534714839,DE
-1534714840,1534714847,FR
-1534714848,1534714855,GB
-1534714856,1534714863,CH
-1534714864,1534714871,FR
-1534714872,1534714875,ES
-1534714876,1534714879,DE
-1534714880,1534714911,FR
-1534714912,1534714927,DE
-1534714928,1534714931,PT
-1534714932,1534714935,DE
-1534714936,1534714939,FR
-1534714940,1534714975,DE
-1534714976,1534715039,FR
-1534715040,1534715055,GB
-1534715056,1534715071,IE
-1534715072,1534715103,FR
-1534715104,1534715119,BE
-1534715120,1534715135,FR
-1534715136,1534715143,PL
-1534715144,1534715199,FR
-1534715200,1534715203,IT
-1534715204,1534715207,FR
-1534715208,1534715211,GB
-1534715212,1534715215,FR
-1534715216,1534715231,BE
-1534715232,1534715267,FR
-1534715268,1534715271,PL
-1534715272,1534715279,FR
-1534715280,1534715283,PL
-1534715284,1534715287,FR
-1534715288,1534715295,CZ
-1534715296,1534715303,FR
-1534715304,1534715315,PL
-1534715316,1534715319,ES
-1534715320,1534715327,PL
-1534715328,1534715343,NL
-1534715344,1534715359,FR
-1534715360,1534715367,NL
-1534715368,1534715371,FR
-1534715372,1534715375,CH
-1534715376,1534715391,FR
-1534715392,1534715399,PL
-1534715400,1534715415,GB
-1534715416,1534715419,DE
-1534715420,1534715431,IT
-1534715432,1534715439,FR
-1534715440,1534715447,ES
-1534715448,1534715451,FR
-1534715452,1534715455,PL
-1534715456,1534715471,FR
-1534715472,1534715487,IE
-1534715488,1534715583,FR
-1534715584,1534715599,GB
-1534715600,1534715603,DE
-1534715604,1534715607,GB
-1534715608,1534715611,CH
-1534715612,1534715615,FI
-1534715616,1534715639,FR
-1534715640,1534715643,PL
-1534715644,1534715647,DE
-1534715648,1534715663,PL
-1534715664,1534715667,FR
-1534715668,1534715671,PL
-1534715672,1534715675,CZ
-1534715676,1534715679,GB
-1534715680,1534715711,FR
-1534715712,1534715727,PT
-1534715728,1534715735,FR
-1534715736,1534715759,PL
-1534715760,1534715775,ES
-1534715776,1534715783,PL
-1534715784,1534715791,BE
-1534715792,1534715807,CZ
-1534715808,1534715871,FR
-1534715872,1534715875,PL
-1534715876,1534715879,FR
-1534715880,1534715883,PT
-1534715884,1534715887,PL
-1534715888,1534715935,FR
-1534715936,1534715939,IE
-1534715940,1534715943,PL
-1534715944,1534715947,FR
-1534715948,1534715951,PL
-1534715952,1534715983,FR
-1534715984,1534715987,PL
-1534715988,1534715991,ES
-1534715992,1534715995,PL
-1534715996,1534715999,FR
-1534716000,1534716007,NL
-1534716008,1534716047,FR
-1534716048,1534716063,GB
-1534716064,1534716131,FR
-1534716132,1534716143,ES
-1534716144,1534716159,FR
-1534716160,1534716163,IT
-1534716164,1534716167,FI
-1534716168,1534716175,IE
-1534716176,1534716191,FR
-1534716192,1534716223,ES
-1534716224,1534716239,FR
-1534716240,1534716255,GB
-1534716256,1534716271,FR
-1534716272,1534716287,IE
-1534716288,1534716303,FR
-1534716304,1534716311,PL
-1534716312,1534716319,FR
-1534716320,1534716351,PL
-1534716352,1534716355,FR
-1534716356,1534716359,PL
-1534716360,1534716363,FR
-1534716364,1534716367,GB
-1534716368,1534716375,BE
-1534716376,1534716379,FR
-1534716380,1534716383,CZ
-1534716384,1534716391,FR
-1534716392,1534716395,ES
-1534716396,1534716399,GB
-1534716400,1534716403,PL
-1534716404,1534716407,NL
-1534716408,1534716415,FR
-1534716416,1534716431,ES
-1534716432,1534716447,PL
-1534716448,1534716463,IE
-1534716464,1534716479,FR
-1534716480,1534716495,ES
-1534716496,1534716575,FR
-1534716576,1534716591,PL
-1534716592,1534716639,FR
-1534716640,1534716647,BE
-1534716648,1534716655,FR
-1534716656,1534716663,IE
-1534716664,1534716671,FR
-1534716672,1534716687,PL
-1534716688,1534716703,FR
-1534716704,1534716735,ES
-1534716736,1534716751,FR
-1534716752,1534716759,PL
-1534716760,1534716763,DE
-1534716764,1534716767,ES
-1534716768,1534716775,DE
-1534716776,1534716779,PT
-1534716780,1534716787,PL
-1534716788,1534716799,FR
-1534716800,1534716803,DE
-1534716804,1534716807,PL
-1534716808,1534716811,NL
-1534716812,1534716815,PL
-1534716816,1534716823,FR
-1534716824,1534716831,GB
-1534716832,1534716863,FR
-1534716864,1534716879,ES
-1534716880,1534716895,BE
-1534716896,1534716903,ES
-1534716904,1534716911,DE
-1534716912,1534716927,FR
-1534716928,1534716943,DE
-1534716944,1534716959,FR
-1534716960,1534716963,ES
-1534716964,1534716991,FR
-1534716992,1534717007,DE
-1534717008,1534717011,PL
-1534717012,1534717019,FR
-1534717020,1534717023,PT
-1534717024,1534717031,IE
-1534717032,1534717035,DE
-1534717036,1534717039,GB
-1534717040,1534717047,PL
-1534717048,1534717063,FR
-1534717064,1534717071,IT
-1534717072,1534717103,FR
-1534717104,1534717119,PL
-1534717120,1534717135,IT
-1534717136,1534717139,CH
-1534717140,1534717143,CZ
-1534717144,1534717147,FR
-1534717148,1534717151,IT
-1534717152,1534717227,FR
-1534717228,1534717231,ES
-1534717232,1534717247,FR
-1534717248,1534717251,PL
-1534717252,1534717255,NL
-1534717256,1534717311,FR
-1534717312,1534717315,PL
-1534717316,1534717319,IE
-1534717320,1534717323,GB
-1534717324,1534717343,FR
-1534717344,1534717359,GB
-1534717360,1534717407,FR
-1534717408,1534717411,IT
-1534717412,1534717415,CH
-1534717416,1534717419,CZ
-1534717420,1534717427,PL
-1534717428,1534717431,FR
-1534717432,1534717435,GB
-1534717436,1534717439,NL
-1534717440,1534717519,FR
-1534717520,1534717535,DE
-1534717536,1534717551,PL
-1534717552,1534717567,CZ
-1534717568,1534717583,IE
-1534717584,1534717587,CZ
-1534717588,1534717591,GB
-1534717592,1534717599,DE
-1534717600,1534717647,FR
-1534717648,1534717659,PL
-1534717660,1534717663,FR
+1534714768,1534715871,FR
+1534715872,1534715875,ES
+1534715876,1534715935,FR
+1534715936,1534715939,NL
+1534715940,1534716375,FR
+1534716376,1534716379,ES
+1534716380,1534717247,FR
+1534717248,1534717251,ES
+1534717252,1534717263,FR
+1534717264,1534717267,ES
+1534717268,1534717663,FR
1534717664,1534717679,GB
-1534717680,1534717711,ES
-1534717712,1534717715,DE
-1534717716,1534717719,ES
-1534717720,1534717727,FR
-1534717728,1534717731,ES
-1534717732,1534717735,PL
-1534717736,1534717739,BE
-1534717740,1534717743,GB
-1534717744,1534717751,FR
-1534717752,1534717759,BE
-1534717760,1534717763,PL
-1534717764,1534717767,FR
-1534717768,1534717771,IT
-1534717772,1534717783,FR
-1534717784,1534717787,GB
-1534717788,1534717791,DE
-1534717792,1534717823,FR
-1534717824,1534717855,BE
-1534717856,1534717871,NL
-1534717872,1534717903,FR
-1534717904,1534717907,IT
-1534717908,1534717911,GB
-1534717912,1534717923,FR
-1534717924,1534717927,ES
-1534717928,1534717931,DE
-1534717932,1534717935,PL
-1534717936,1534717951,FR
-1534717952,1534717955,DE
-1534717956,1534717959,BE
-1534717960,1534717963,PT
-1534717964,1534717967,CH
-1534717968,1534717983,IT
-1534717984,1534717987,PL
-1534717988,1534717991,FR
-1534717992,1534717995,NL
-1534717996,1534717999,GB
-1534718000,1534718007,ES
-1534718008,1534718011,PL
-1534718012,1534718015,FR
-1534718016,1534718031,BE
-1534718032,1534718063,FR
-1534718064,1534718079,IT
-1534718080,1534718087,ES
-1534718088,1534718091,DE
-1534718092,1534718095,ES
-1534718096,1534718111,PL
-1534718112,1534718127,GB
-1534718128,1534718143,ES
-1534718144,1534718159,FR
-1534718160,1534718207,PL
-1534718208,1534718335,FR
-1534718336,1534718351,CH
-1534718352,1534718359,FR
-1534718360,1534718363,ES
-1534718364,1534718415,FR
-1534718416,1534718419,ES
-1534718420,1534718423,GB
-1534718424,1534718431,ES
-1534718432,1534718439,FR
-1534718440,1534718447,ES
-1534718448,1534718451,FR
-1534718452,1534718455,PL
-1534718456,1534718463,IT
-1534718464,1534718467,DE
-1534718468,1534718471,GB
-1534718472,1534718475,PT
-1534718476,1534718479,PL
-1534718480,1534718487,FR
-1534718488,1534718495,DE
-1534718496,1534718527,FR
-1534718528,1534718531,ES
-1534718532,1534718535,PL
-1534718536,1534718575,FR
-1534718576,1534718591,GB
-1534718592,1534718607,NL
-1534718608,1534718623,FR
-1534718624,1534718631,PL
-1534718632,1534718703,FR
-1534718704,1534718707,IT
-1534718708,1534718711,FR
-1534718712,1534718719,ES
-1534718720,1534718735,GB
-1534718736,1534718739,NL
-1534718740,1534718751,FR
-1534718752,1534718755,PL
-1534718756,1534718763,FR
-1534718764,1534718767,PL
-1534718768,1534718783,FR
-1534718784,1534718815,ES
-1534718816,1534718823,PL
-1534718824,1534718847,FR
-1534718848,1534718911,BE
-1534718912,1534718927,IT
-1534718928,1534718943,FR
-1534718944,1534718959,IT
-1534718960,1534719039,FR
-1534719040,1534719055,BE
-1534719056,1534719071,FR
-1534719072,1534719075,FI
-1534719076,1534719079,ES
-1534719080,1534719083,IT
-1534719084,1534719087,CH
-1534719088,1534719103,PL
-1534719104,1534719167,BE
-1534719168,1534719295,FR
-1534719296,1534719311,ES
-1534719312,1534719335,FR
-1534719336,1534719339,IT
-1534719340,1534719343,ES
-1534719344,1534719375,FR
-1534719376,1534719379,PL
-1534719380,1534719383,IT
-1534719384,1534719391,FR
-1534719392,1534719395,CH
-1534719396,1534719399,PT
-1534719400,1534719403,IT
-1534719404,1534719439,FR
-1534719440,1534719459,PL
-1534719460,1534719463,CH
-1534719464,1534719471,PL
-1534719472,1534719487,IE
-1534719488,1534719503,FR
-1534719504,1534719507,DE
-1534719508,1534719511,GB
-1534719512,1534719515,PL
-1534719516,1534719535,FR
-1534719536,1534719539,NL
-1534719540,1534719543,FR
-1534719544,1534719551,GB
-1534719552,1534719555,NL
-1534719556,1534719559,PL
-1534719560,1534719567,FR
-1534719568,1534719571,CH
-1534719572,1534719575,NL
-1534719576,1534719583,GB
-1534719584,1534719599,FR
-1534719600,1534719607,PL
-1534719608,1534719615,ES
-1534719616,1534719631,FR
-1534719632,1534719639,ES
-1534719640,1534719647,FR
-1534719648,1534719655,IE
-1534719656,1534719659,NL
-1534719660,1534719679,FR
-1534719680,1534719695,GB
-1534719696,1534719699,IT
-1534719700,1534719703,DE
-1534719704,1534719711,GB
-1534719712,1534719731,FR
-1534719732,1534719735,IE
-1534719736,1534719739,PL
-1534719740,1534719743,ES
-1534719744,1534719747,FR
-1534719748,1534719751,PL
-1534719752,1534719759,FR
-1534719760,1534719775,IT
-1534719776,1534719783,FR
-1534719784,1534719787,PT
-1534719788,1534719791,PL
-1534719792,1534719799,FR
-1534719800,1534719803,ES
-1534719804,1534719807,GB
-1534719808,1534719811,PL
-1534719812,1534719815,FR
-1534719816,1534719819,CH
-1534719820,1534719823,CZ
-1534719824,1534719831,FR
-1534719832,1534719839,PL
-1534719840,1534719871,FR
-1534719872,1534719887,IE
-1534719888,1534719951,FR
-1534719952,1534719967,DE
-1534719968,1534719983,ES
-1534719984,1534720003,FR
-1534720004,1534720011,ES
-1534720012,1534720015,IE
-1534720016,1534720023,FR
+1534717680,1534718763,FR
+1534718764,1534718767,ES
+1534718768,1534719747,FR
+1534719748,1534719751,ES
+1534719752,1534719783,FR
+1534719784,1534719787,ES
+1534719788,1534720003,FR
+1534720004,1534720007,ES
+1534720008,1534720023,FR
1534720024,1534720027,PL
-1534720028,1534720031,ES
-1534720032,1534720047,FR
-1534720048,1534720063,ES
-1534720064,1534720079,FR
-1534720080,1534720095,GB
-1534720096,1534720111,IT
-1534720112,1534720179,FR
-1534720180,1534720183,NL
-1534720184,1534720211,FR
-1534720212,1534720215,PL
-1534720216,1534720223,PT
-1534720224,1534720239,DE
-1534720240,1534720255,BE
-1534720256,1534720271,FR
-1534720272,1534720287,PL
-1534720288,1534720291,IT
-1534720292,1534720295,PL
-1534720296,1534720299,GB
-1534720300,1534720351,FR
-1534720352,1534720367,ES
-1534720368,1534720383,PL
-1534720384,1534720387,FR
-1534720388,1534720391,FI
-1534720392,1534720395,DE
-1534720396,1534720399,PL
-1534720400,1534720403,LT
-1534720404,1534720407,GB
-1534720408,1534720411,FR
-1534720412,1534720415,IE
-1534720416,1534720419,ES
-1534720420,1534720423,DE
-1534720424,1534720431,ES
-1534720432,1534720447,PL
-1534720448,1534720451,FR
-1534720452,1534720455,NL
-1534720456,1534720471,FR
+1534720028,1534720179,FR
+1534720180,1534720183,ES
+1534720184,1534720471,FR
1534720472,1534720479,DE
-1534720480,1534720495,IE
-1534720496,1534720511,PL
-1534720512,1534720535,FR
-1534720536,1534720539,PL
-1534720540,1534720543,FI
-1534720544,1534720559,FR
-1534720560,1534720583,IT
-1534720584,1534720591,BE
-1534720592,1534720611,FR
-1534720612,1534720615,BE
-1534720616,1534720619,DE
-1534720620,1534720623,PT
-1534720624,1534720639,FR
-1534720640,1534720643,PL
-1534720644,1534720647,FR
-1534720648,1534720655,IE
-1534720656,1534720671,ES
-1534720672,1534720735,FR
-1534720736,1534720739,CH
-1534720740,1534720743,PL
-1534720744,1534720747,IE
-1534720748,1534720767,FR
-1534720768,1534720783,ES
-1534720784,1534720787,FR
-1534720788,1534720791,DE
-1534720792,1534720795,IT
-1534720796,1534720799,ES
-1534720800,1534720815,PL
-1534720816,1534720831,FR
-1534720832,1534720863,PL
-1534720864,1534720879,ES
-1534720880,1534720895,FR
-1534720896,1534720899,ES
-1534720900,1534720903,LT
-1534720904,1534720911,PT
-1534720912,1534720943,FR
-1534720944,1534720951,CH
-1534720952,1534720959,PL
-1534720960,1534720975,IT
-1534720976,1534720979,NL
-1534720980,1534720983,GB
-1534720984,1534720991,PL
-1534720992,1534721007,IT
-1534721008,1534721023,FR
-1534721024,1534721031,DE
-1534721032,1534721055,FR
-1534721056,1534721063,ES
-1534721064,1534721071,GB
-1534721072,1534721095,FR
-1534721096,1534721099,DE
-1534721100,1534721111,PL
-1534721112,1534721115,NL
-1534721116,1534721119,FR
-1534721120,1534721135,IT
-1534721136,1534721159,FR
-1534721160,1534721163,ES
-1534721164,1534721183,FR
-1534721184,1534721191,LT
-1534721192,1534721195,FR
-1534721196,1534721199,IT
-1534721200,1534721215,FR
-1534721216,1534721223,BE
-1534721224,1534721231,CH
-1534721232,1534721247,DE
-1534721248,1534721263,FR
-1534721264,1534721279,GB
-1534721280,1534721287,PL
-1534721288,1534721311,FR
-1534721312,1534721319,PL
-1534721320,1534721327,PT
-1534721328,1534721343,FR
-1534721344,1534721359,PL
-1534721360,1534721375,GB
-1534721376,1534721391,FR
-1534721392,1534721407,PL
-1534721408,1534721439,DE
-1534721440,1534721455,FR
-1534721456,1534721471,ES
-1534721472,1534721491,GB
-1534721492,1534721495,FR
-1534721496,1534721519,PL
-1534721520,1534721567,FR
-1534721568,1534721583,GB
-1534721584,1534721587,FR
-1534721588,1534721591,GB
-1534721592,1534721595,PL
-1534721596,1534721599,ES
-1534721600,1534721615,FR
-1534721616,1534721619,PL
+1534720480,1534721619,FR
1534721620,1534721623,ES
-1534721624,1534721627,PL
-1534721628,1534721631,NL
-1534721632,1534721647,ES
-1534721648,1534721663,FR
-1534721664,1534721679,ES
-1534721680,1534721699,FR
-1534721700,1534721703,PL
-1534721704,1534721707,DE
-1534721708,1534721711,GB
-1534721712,1534721743,FR
-1534721744,1534721747,PL
-1534721748,1534721751,GB
-1534721752,1534721755,DE
-1534721756,1534721807,FR
-1534721808,1534721827,PL
-1534721828,1534721831,FR
-1534721832,1534721835,DE
-1534721836,1534721839,BE
-1534721840,1534721855,PL
-1534721856,1534721887,ES
-1534721888,1534721903,FR
-1534721904,1534721919,DE
-1534721920,1534721935,FR
-1534721936,1534721943,CH
-1534721944,1534721951,IT
-1534721952,1534721955,NL
-1534721956,1534721959,PL
-1534721960,1534721963,IE
-1534721964,1534721967,CH
-1534721968,1534721971,DE
-1534721972,1534721975,PL
-1534721976,1534721979,FI
-1534721980,1534721983,PL
-1534721984,1534721999,FR
-1534722000,1534722007,PL
-1534722008,1534722011,PT
-1534722012,1534722015,ES
-1534722016,1534722031,IE
-1534722032,1534722039,FR
-1534722040,1534722043,BE
-1534722044,1534722047,FR
+1534721624,1534722047,FR
1534722048,1534787583,RU
1534787584,1534791679,RO
1534791680,1534795775,RU
@@ -64210,14 +21503,22 @@
1534849024,1534853119,NL
1534853120,1534918655,UA
1534918656,1534984191,GB
-1534984192,1535049727,ES
+1534984192,1534985215,NO
+1534985216,1535049727,ES
1535049728,1535115263,SK
1535115264,1535197183,AT
1535197184,1535246335,SE
1535246336,1535311871,AT
-1535311872,1535377407,SE
+1535311872,1535344639,NO
+1535344640,1535350783,LV
+1535350784,1535352831,HR
+1535352832,1535361023,EE
+1535361024,1535377407,NL
1535377408,1535442943,GR
-1535442944,1535508479,FI
+1535442944,1535451135,FI
+1535451136,1535459327,DK
+1535459328,1535475711,AT
+1535475712,1535508479,IR
1535508480,1535574015,BG
1535574016,1535578111,GB
1535578112,1535582207,LV
@@ -64244,23 +21545,16 @@
1535707136,1535709183,DE
1535709184,1535715327,CH
1535715328,1535717375,DE
-1535717376,1535720447,CH
-1535720448,1535720959,DE
-1535720960,1535721087,CH
-1535721088,1535721727,DE
+1535717376,1535721471,CH
+1535721472,1535721727,DE
1535721728,1535737855,CH
-1535737856,1535769855,HU
-1535769856,1535770623,SR
+1535737856,1535770623,HU
1535770624,1535803391,CH
1535803392,1535836159,GR
-1535836160,1535868927,HU
+1535836160,1535868927,CZ
1535868928,1535901695,BG
1535901696,1535934463,GR
-1535934464,1535959551,KW
-1535959552,1535959807,US
-1535959808,1535963391,KW
-1535963392,1535963647,US
-1535963648,1535967231,KW
+1535934464,1535967231,KW
1535967232,1535999999,AT
1536000000,1536032767,NL
1536032768,1536036863,LV
@@ -64268,31 +21562,12 @@
1536040960,1536045055,GB
1536045056,1536045311,IQ
1536045312,1536045567,LB
-1536045568,1536046079,IQ
-1536046080,1536046847,DE
-1536046848,1536046975,A2
-1536046976,1536047039,SA
-1536047040,1536047103,IQ
-1536047104,1536047679,LB
-1536047680,1536047999,A2
-1536048000,1536048127,SA
-1536048128,1536048255,AE
-1536048256,1536048319,DE
-1536048320,1536048383,IQ
-1536048384,1536048511,A2
-1536048512,1536048575,IQ
-1536048576,1536048639,A2
-1536048640,1536048671,FR
-1536048672,1536048703,LU
-1536048704,1536048719,IQ
-1536048720,1536048735,NL
-1536048736,1536048895,DE
-1536048896,1536049151,A2
+1536045568,1536049151,DE
1536049152,1536051199,IT
1536051200,1536057343,RU
1536057344,1536061439,IE
1536061440,1536065535,SE
-1536065536,1536065791,DE
+1536065536,1536065791,GB
1536065792,1536066303,LU
1536066304,1536066815,NL
1536067072,1536067327,GB
@@ -64301,7 +21576,7 @@
1536067840,1536068095,PL
1536068096,1536068351,RU
1536068352,1536068607,HR
-1536068608,1536069119,RU
+1536068864,1536069119,RU
1536069120,1536069375,TR
1536069376,1536069631,IT
1536069632,1536073727,RU
@@ -64315,17 +21590,12 @@
1536114688,1536118783,GB
1536118784,1536122879,DE
1536122880,1536126975,AT
-1536126976,1536130815,DK
-1536130816,1536131071,EU
+1536126976,1536131071,DK
1536131072,1536143359,RU
1536143360,1536147455,GB
1536147456,1536151551,IT
1536151552,1536155647,RS
-1536155648,1536155655,IL
-1536155656,1536155659,GB
-1536155660,1536155663,GR
-1536155664,1536155667,US
-1536155668,1536159743,IL
+1536155648,1536159743,IL
1536159744,1536163839,DE
1536163840,1536180223,SY
1536180224,1536196607,HU
@@ -64361,31 +21631,18 @@
1536589824,1536614399,PL
1536614400,1536622591,DK
1536622592,1536626687,GB
-1536626688,1536630783,DE
+1536626688,1536626943,DE
+1536626944,1536627072,AT
+1536627073,1536630783,DE
1536630784,1536634879,RU
1536634880,1536643071,FR
1536643072,1536647167,TR
1536647168,1536651263,ES
1536651264,1536655359,FR
1536655360,1536659455,GE
-1536659456,1536659775,DE
-1536659776,1536659791,AO
-1536659792,1536659807,SD
-1536659808,1536659841,DE
-1536659842,1536659843,US
-1536659844,1536660015,DE
-1536660016,1536660031,CG
-1536660032,1536660063,CD
-1536660064,1536660079,SO
-1536660080,1536660095,DE
-1536660096,1536660159,LB
-1536660160,1536660175,AE
-1536660176,1536662271,DE
+1536659456,1536662271,DE
1536662272,1536662527,IQ
-1536662528,1536662783,AE
-1536662784,1536663295,DE
-1536663296,1536663327,LB
-1536663328,1536663551,DE
+1536662528,1536663551,DE
1536663552,1536667647,SA
1536667648,1536675839,RU
1536675840,1536679935,GB
@@ -64395,8 +21652,8 @@
1537212416,1538260991,FR
1538260992,1538785279,BE
1538785280,1538793471,NL
-1538793472,1538797055,DE
-1538797056,1538801663,NL
+1538793472,1538797567,DE
+1538797568,1538801663,NL
1538801664,1538809855,IR
1538809856,1538818047,GE
1538818048,1538826239,NO
@@ -64407,55 +21664,18 @@
1538859008,1538875391,RU
1538875392,1538883583,RS
1538883584,1538891775,BE
-1538891776,1538892543,DE
-1538892544,1538892799,CY
-1538892800,1538893567,DE
-1538893568,1538894079,CY
-1538894080,1538894591,FR
-1538894592,1538894847,DE
-1538894848,1538895871,FR
-1538895872,1538896895,DE
-1538896896,1538897663,FR
-1538897664,1538897671,DE
-1538897672,1538897679,IT
-1538897680,1538897687,ES
-1538897688,1538897695,RU
-1538897696,1538897703,PL
-1538897704,1538897711,GR
-1538897712,1538897719,PT
-1538897720,1538897727,GB
-1538897728,1538897735,NL
-1538897736,1538897919,FR
-1538897920,1538898687,DE
-1538898688,1538899967,FR
-1538899968,1538904031,SI
-1538904032,1538904039,BH
-1538904040,1538908159,SI
+1538891776,1538897919,GB
+1538897920,1538899967,PL
+1538899968,1538908159,SI
1538908160,1538916351,RU
1538916352,1538924543,GB
1538924544,1538932735,DE
1538932736,1538940927,NO
1538940928,1538949119,RU
1538949120,1538957311,AT
-1538957312,1538961535,DE
-1538961536,1538961599,IT
-1538961600,1538961823,DE
-1538961824,1538961839,GB
-1538961840,1538962263,DE
-1538962264,1538962271,GB
-1538962272,1538962415,DE
-1538962416,1538962431,US
-1538962432,1538962683,DE
-1538962684,1538962687,US
-1538962688,1538963071,DE
-1538963072,1538963087,GB
-1538963088,1538963264,DE
-1538963265,1538963278,GE
-1538963279,1538963280,DE
-1538963281,1538963294,GE
-1538963295,1538963407,DE
-1538963408,1538963423,GB
-1538963424,1538965503,DE
+1538957312,1538964991,DE
+1538964992,1538965247,GB
+1538965248,1538965503,DE
1538965504,1538973695,IR
1538973696,1538981887,JO
1538981888,1538990079,BY
@@ -64466,43 +21686,14 @@
1539022848,1539031039,LT
1539031040,1539039231,IT
1539039232,1539047423,PL
-1539047424,1539047583,IT
-1539047584,1539047591,US
-1539047592,1539048439,IT
-1539048440,1539048447,SG
-1539048448,1539048543,IT
-1539048544,1539048551,LY
-1539048552,1539048559,IT
-1539048560,1539048567,LY
-1539048568,1539048639,IT
-1539048640,1539048687,IQ
-1539048688,1539049215,IT
-1539049216,1539049223,LY
-1539049224,1539049255,IT
-1539049256,1539049263,LY
-1539049264,1539049311,IT
-1539049312,1539049327,LY
-1539049328,1539049335,IT
-1539049336,1539049343,LY
-1539049344,1539050263,IT
-1539050264,1539050271,TR
-1539050272,1539050367,IT
-1539050368,1539050375,FR
-1539050376,1539050383,IT
-1539050384,1539050399,FR
-1539050400,1539055471,IT
-1539055472,1539055487,FR
-1539055488,1539055615,IT
+1539047424,1539055615,IT
1539055616,1539063807,LV
1539063808,1539071999,FR
1539072000,1539080191,PL
1539080192,1539088383,UZ
1539088384,1539096575,RU
-1539096576,1539110655,TR
-1539110656,1539110687,US
-1539110688,1539112959,TR
1539112960,1539115007,PL
-1539115008,1539117055,CH
+1539115008,1539117055,AE
1539117056,1539123199,PL
1539123200,1539125247,SE
1539125248,1539127295,RU
@@ -64523,7 +21714,6 @@
1539151872,1539153919,UA
1539153920,1539155967,RU
1539155968,1539160063,NO
-1539160064,1539162111,RU
1539162112,1539164159,DE
1539164160,1539166207,DK
1539166208,1539168255,FI
@@ -64536,30 +21726,18 @@
1539194880,1539203071,RU
1539203072,1539207167,NL
1539207168,1539211263,RU
-1539211264,1539211775,CZ
-1539211776,1539212031,DE
-1539212032,1539212287,CZ
-1539212288,1539212543,DE
-1539212544,1539213311,CZ
+1539211264,1539213311,CZ
1539213312,1539215359,SE
1539215360,1539219455,DE
-1539219456,1539221503,GG
-1539221504,1539222527,FR
-1539222528,1539222783,HK
-1539222784,1539223039,CN
-1539223040,1539223103,ES
-1539223104,1539223167,BR
-1539223168,1539223231,IT
-1539223232,1539223295,DE
-1539223296,1539223551,US
+1539219456,1539221247,GG
+1539221248,1539221503,GB
+1539221504,1539223551,FR
1539223552,1539225599,RU
1539225600,1539227647,HU
1539227648,1539229695,FI
1539229696,1539231743,DE
1539231744,1539233791,BE
-1539233792,1539234303,LU
-1539234304,1539234559,IE
-1539234560,1539235839,LU
+1539233792,1539235839,LU
1539235840,1539237887,DE
1539237888,1539239935,RU
1539239936,1539244031,DE
@@ -64574,7 +21752,6 @@
1539297280,1539301375,BG
1539301376,1539309567,RU
1539309568,1539310591,PL
-1539310592,1539311615,UA
1539311616,1539312639,NL
1539312640,1539313663,DE
1539313664,1539314687,GB
@@ -64597,7 +21774,6 @@
1539333120,1539335167,RU
1539335168,1539336191,CH
1539336192,1539336703,UA
-1539336704,1539337215,EE
1539337216,1539338239,ES
1539338240,1539339263,SE
1539339264,1539340287,NL
@@ -64610,7 +21786,6 @@
1539348480,1539351551,UA
1539351552,1539352575,PL
1539352576,1539354623,RU
-1539354624,1539355647,PL
1539355648,1539357695,UA
1539357696,1539358719,RU
1539358720,1539359743,GB
@@ -64631,7 +21806,6 @@
1539375104,1539376127,NO
1539377152,1539378175,UA
1539378176,1539379199,PL
-1539379200,1539380223,EU
1539380224,1539381247,CH
1539381248,1539382271,RS
1539382272,1539383295,RO
@@ -64644,24 +21818,22 @@
1539388416,1539389439,PL
1539389440,1539389951,FR
1539389952,1539390463,RU
-1539390464,1539391487,RO
1539391488,1539392511,LV
1539392512,1539393535,UA
1539393536,1539393791,DE
1539393792,1539394047,PL
-1539394048,1539394303,EU
+1539394048,1539394303,RU
1539394304,1539394559,RS
1539394560,1539396607,UA
1539396608,1539397631,PL
1539397632,1539398143,RU
1539398144,1539398655,PL
1539398656,1539399679,ES
-1539399680,1539401727,PL
+1539399680,1539400703,PL
1539401728,1539402239,GB
1539402240,1539402751,FR
1539402752,1539403263,GB
1539403264,1539403775,RU
-1539404800,1539405823,EE
1539405824,1539406847,PL
1539406848,1539408895,UA
1539408896,1539409919,CZ
@@ -64669,7 +21841,6 @@
1539410944,1539411967,RU
1539411968,1539412991,PL
1539412992,1539414015,RU
-1539414016,1539415039,UA
1539415040,1539416063,BG
1539416064,1539417087,PL
1539417088,1539418111,UA
@@ -64679,7 +21850,6 @@
1539421184,1539422207,GB
1539422208,1539423231,PL
1539423232,1539424255,IE
-1539424256,1539425279,LV
1539425280,1539426303,PL
1539426304,1539427327,BG
1539427328,1539428351,UA
@@ -64689,17 +21859,15 @@
1539435520,1539437567,RU
1539437568,1539438591,GB
1539439616,1539440639,UA
-1539440640,1539441663,RU
+1539441152,1539441663,RU
1539441664,1539442175,IL
1539442176,1539442687,DE
1539442688,1539443199,NL
1539443200,1539444223,RU
-1539444224,1539444735,FR
1539444736,1539445247,RU
1539445248,1539445759,PL
1539445760,1539446271,FI
1539446272,1539446783,SE
-1539446784,1539447295,RU
1539447296,1539447807,SE
1539447808,1539448831,RO
1539448832,1539449343,AT
@@ -64711,8 +21879,6 @@
1539452416,1539452927,GB
1539452928,1539453439,CH
1539453440,1539453951,UA
-1539453952,1539454463,GB
-1539454464,1539454975,RU
1539454976,1539455487,UA
1539455488,1539455999,RU
1539456000,1539456511,FR
@@ -64733,16 +21899,13 @@
1539464704,1539465215,DK
1539465216,1539466751,FR
1539466752,1539467263,KW
-1539467264,1539467775,RU
1539467776,1539468287,PL
1539468288,1539468799,DE
1539468800,1539469823,RU
1539469824,1539470335,IL
1539470336,1539470847,GB
-1539470848,1539471359,SE
1539471360,1539471871,RU
1539471872,1539472383,PL
-1539472384,1539472895,UA
1539472896,1539473407,GB
1539473408,1539473919,FR
1539473920,1539474431,KW
@@ -64750,30 +21913,26 @@
1539474944,1539475455,UA
1539475456,1539475967,NL
1539475968,1539476479,PL
-1539476480,1539476991,CZ
1539476992,1539477503,IT
1539477504,1539478015,PL
1539478016,1539478527,CH
1539478528,1539479039,RO
-1539479040,1539479551,DK
-1539479552,1539480063,GB
+1539479040,1539480063,GB
1539480064,1539480575,DK
1539480576,1539481087,PL
1539481088,1539481599,GB
1539481600,1539482111,RU
1539482112,1539482623,UA
1539482624,1539483135,RU
-1539483136,1539483647,ES
1539483648,1539484159,UA
-1539484160,1539484671,GB
1539484672,1539485695,RU
1539485696,1539486207,RO
1539486208,1539486719,FR
1539486720,1539487231,DE
-1539487232,1539488255,RU
+1539487744,1539488255,RU
1539488256,1539488767,SE
1539488768,1539489279,PL
-1539489280,1539490815,RU
+1539489280,1539490303,RU
1539490816,1539491327,CH
1539491328,1539491839,PL
1539491840,1539492351,RU
@@ -64794,7 +21953,6 @@
1539500544,1539501055,RO
1539501056,1539501567,BE
1539501568,1539502079,UA
-1539502080,1539502591,PL
1539502592,1539503103,HR
1539503104,1539504127,RU
1539504128,1539504639,AT
@@ -64823,17 +21981,14 @@
1539517440,1539517951,RO
1539517952,1539518463,PL
1539518464,1539518975,DE
-1539518976,1539519487,RU
1539519488,1539519999,UA
1539520000,1539520511,DE
1539520512,1539521023,PL
1539521024,1539521535,DK
1539521536,1539522047,RU
1539522048,1539522559,RO
-1539522560,1539523071,RU
-1539523072,1539523583,RO
1539523584,1539524095,UA
-1539524096,1539524607,GR
+1539524096,1539524607,GB
1539524608,1539525119,FR
1539525120,1539525631,UA
1539525632,1539526143,SE
@@ -64876,7 +22031,6 @@
1539547136,1539547647,NL
1539547648,1539548159,IL
1539548160,1539548671,FR
-1539548672,1539549183,EU
1539549184,1539549695,GB
1539549696,1539550207,RU
1539550208,1539550719,UA
@@ -64897,7 +22051,6 @@
1539558400,1539558911,RU
1539558912,1539559423,FR
1539559424,1539560447,RU
-1539560448,1539560959,GB
1539560960,1539561471,UA
1539561472,1539561983,RO
1539561984,1539563007,DE
@@ -64919,20 +22072,16 @@
1539571712,1539572735,UA
1539572736,1539573759,RU
1539573760,1539575807,PL
-1539575808,1539576831,LV
1539576832,1539577855,GB
1539577856,1539578879,RU
1539578880,1539579903,PL
1539579904,1539580927,RU
1539580928,1539581951,AM
-1539581952,1539582975,RU
1539582976,1539583999,RO
1539584000,1539585023,PL
1539585024,1539586047,UA
1539586048,1539587071,PL
1539587072,1539588095,UA
-1539588096,1539589119,BG
-1539589120,1539590143,GB
1539590144,1539591167,RU
1539591168,1539592191,UZ
1539592192,1539593215,UA
@@ -64961,13 +22110,11 @@
1539624960,1539625983,RU
1539625984,1539627007,PL
1539627008,1539628031,RU
-1539628032,1539629055,UA
1539629056,1539630079,BG
1539630080,1539631103,UA
-1539631104,1539632127,CN
1539632128,1539633151,RU
1539633152,1539634175,SE
-1539634176,1539638271,RU
+1539634176,1539637247,RU
1539638272,1539639295,UA
1539639296,1539640319,RU
1539640320,1539641343,PL
@@ -64976,8 +22123,6 @@
1539643392,1539644415,UA
1539644416,1539645439,DE
1539645440,1539646463,GB
-1539646464,1539647487,IE
-1539647488,1539648511,RU
1539648512,1539649023,CY
1539649024,1539649535,LB
1539649536,1539650559,UA
@@ -65010,7 +22155,6 @@
1539681280,1539684351,RU
1539684352,1539685375,UA
1539685376,1539688447,RU
-1539688448,1539689471,SA
1539689472,1539690495,RU
1539690496,1539691519,FI
1539691520,1539692543,RU
@@ -65019,7 +22163,6 @@
1539695616,1539696639,GB
1539696640,1539697663,RU
1539697664,1539698687,UA
-1539698688,1539699711,GE
1539699712,1539700735,RO
1539700736,1539701759,DK
1539701760,1539702783,UA
@@ -65043,13 +22186,12 @@
1539707648,1539707903,AE
1539707904,1539708159,PL
1539708160,1539708415,DE
-1539708416,1539708671,GB
+1539708416,1539708671,NL
1539708672,1539708927,RO
1539708928,1539709183,IE
1539709184,1539709439,AT
1539709440,1539709695,BE
1539709696,1539709951,NL
-1539709952,1539710207,TR
1539710208,1539710463,GB
1539710464,1539710719,FR
1539710720,1539710975,UA
@@ -65067,7 +22209,6 @@
1539714304,1539714559,AT
1539714560,1539714815,RU
1539714816,1539715071,PT
-1539715072,1539715327,SE
1539715328,1539715583,TR
1539715584,1539715839,UA
1539715840,1539716095,RU
@@ -65092,7 +22233,6 @@
1539721728,1539721983,PL
1539721984,1539722239,RU
1539722240,1539722495,PL
-1539722496,1539722751,GB
1539722752,1539723007,DE
1539723008,1539723263,CH
1539723264,1539723519,PL
@@ -65123,12 +22263,9 @@
1539729664,1539729919,FR
1539729920,1539730175,NL
1539730176,1539730431,GB
-1539730432,1539730687,GR
-1539730688,1539730943,KZ
1539730944,1539731455,PL
1539731456,1539731711,SI
1539731712,1539732223,DE
-1539732224,1539732479,FR
1539732480,1539732735,UA
1539732736,1539732991,DK
1539732992,1539733247,PL
@@ -65159,7 +22296,6 @@
1539739392,1539739647,UA
1539739648,1539739903,DK
1539739904,1539740415,PL
-1539740416,1539740671,RO
1539740672,1539740927,AT
1539740928,1539741183,RU
1539741184,1539741439,PL
@@ -65170,7 +22306,6 @@
1539742464,1539742719,RU
1539742720,1539742975,LV
1539742976,1539743231,DE
-1539743232,1539743487,GR
1539743488,1539743743,FR
1539743744,1539743999,RO
1539744000,1539744255,PL
@@ -65179,7 +22314,6 @@
1539744768,1539745023,SE
1539745024,1539745279,GB
1539745280,1539745535,GI
-1539745536,1539745791,CH
1539745792,1539746303,DK
1539746560,1539746815,RU
1539746816,1539747071,DK
@@ -65195,18 +22329,16 @@
1539749376,1539749631,PT
1539749632,1539749887,GR
1539749888,1539750143,RU
-1539750144,1539750399,TR
1539750400,1539750655,PL
1539750656,1539750911,DE
1539750912,1539751167,UA
-1539751168,1539751423,AT
+1539751168,1539751423,DE
1539751424,1539751679,SI
1539751680,1539751935,FR
1539751936,1539752191,DE
1539752192,1539752447,SE
1539752448,1539752703,PL
1539752704,1539752959,AT
-1539752960,1539753215,RO
1539753216,1539753471,DE
1539753472,1539753727,HU
1539753728,1539754239,FR
@@ -65217,16 +22349,14 @@
1539755264,1539755519,IL
1539755520,1539755775,EE
1539755776,1539756031,MT
-1539756032,1539756543,PL
+1539756288,1539756543,PL
1539756800,1539757055,BE
1539757056,1539757567,RU
1539757568,1539757823,SI
1539757824,1539758079,UA
1539758080,1539758335,HR
1539758336,1539758591,PL
-1539758592,1539758847,NL
1539758848,1539759103,BA
-1539759104,1539759359,DK
1539759360,1539759615,RU
1539759616,1539759871,PL
1539759872,1539760127,SE
@@ -65236,7 +22366,6 @@
1539760896,1539761151,DK
1539761152,1539761407,DE
1539761408,1539761663,CH
-1539761664,1539761919,PL
1539761920,1539762175,RU
1539762176,1539762431,PL
1539762432,1539762687,UA
@@ -65270,7 +22399,6 @@
1539769856,1539770111,FR
1539770112,1539770367,GR
1539770368,1539770623,DE
-1539770624,1539770879,FR
1539770880,1539771135,RU
1539771136,1539771391,FR
1539771392,1539771647,PL
@@ -65291,7 +22419,6 @@
1539775488,1539775743,UA
1539775744,1539775999,IL
1539776256,1539776511,SK
-1539776512,1539776767,HU
1539776768,1539777023,UA
1539777024,1539777279,RU
1539777280,1539777535,UA
@@ -65301,12 +22428,9 @@
1539778304,1539778559,LB
1539778560,1539778815,RU
1539778816,1539779071,RO
-1539779072,1539779327,GB
-1539779328,1539779583,NL
-1539779584,1539779839,PL
+1539779328,1539779583,CH
1539779840,1539780095,NL
1539780096,1539780351,RU
-1539780352,1539780607,AT
1539780608,1539780863,PL
1539780864,1539781119,RO
1539781120,1539781375,NL
@@ -65338,14 +22462,13 @@
1539788032,1539788287,HR
1539788288,1539788543,GB
1539788544,1539788799,HR
-1539788800,1539789311,RU
+1539788800,1539789055,RU
1539789568,1539789823,DE
1539789824,1539790079,NL
1539790080,1539790335,CH
1539790336,1539790591,LV
1539790848,1539791103,DE
1539791104,1539791359,PL
-1539791360,1539791615,RU
1539791616,1539792383,UA
1539792384,1539792639,IL
1539792640,1539792895,PL
@@ -65354,7 +22477,6 @@
1539793408,1539793663,CH
1539793664,1539794175,IL
1539794176,1539794431,PL
-1539794432,1539794687,DK
1539794688,1539794943,FR
1539794944,1539795199,RO
1539795200,1539795455,PL
@@ -65375,7 +22497,6 @@
1539799040,1539799295,ES
1539799296,1539799551,DK
1539799552,1539799807,ES
-1539799808,1539800063,RO
1539800064,1539800319,SI
1539800320,1539800575,GB
1539800576,1539800831,LV
@@ -65395,7 +22516,6 @@
1539804928,1539805439,UA
1539805440,1539805695,AT
1539805696,1539805951,CH
-1539805952,1539806207,RU
1539806208,1539806463,FI
1539806464,1539806719,RU
1539806720,1539806975,BG
@@ -65408,10 +22528,8 @@
1539808512,1539808767,GB
1539808768,1539809023,DE
1539809024,1539809279,GB
-1539809280,1539809535,EU
1539809536,1539809791,SI
1539809792,1539810047,DE
-1539810048,1539810303,UA
1539810304,1539810559,CZ
1539810560,1539810815,DE
1539810816,1539811071,TR
@@ -65419,18 +22537,15 @@
1539811584,1539811839,DE
1539811840,1539812095,IT
1539812096,1539812351,RU
-1539812352,1539812607,CH
1539812608,1539812863,IT
1539812864,1539813119,RU
1539813120,1539813375,AT
1539813376,1539813631,PL
1539813632,1539813887,NL
1539813888,1539814143,RU
-1539814144,1539814399,NL
1539814400,1539814911,GB
1539814912,1539815167,UA
1539815168,1539815423,GB
-1539815424,1539815935,RU
1539815936,1539816191,CH
1539816192,1539816447,SA
1539816448,1539816703,UA
@@ -65438,7 +22553,6 @@
1539816960,1539817215,DK
1539817216,1539817471,TR
1539817472,1539817727,DE
-1539817728,1539817983,PL
1539817984,1539818239,UA
1539818240,1539818495,NO
1539818496,1539819007,RU
@@ -65446,7 +22560,7 @@
1539819264,1539819519,RO
1539819520,1539819775,AT
1539819776,1539820031,SI
-1539820032,1539820287,VG
+1539820032,1539820287,IL
1539820288,1539820543,PL
1539820544,1539820799,ES
1539820800,1539821055,RU
@@ -65455,7 +22569,6 @@
1539821568,1539821823,DK
1539821824,1539822079,DE
1539822080,1539822335,RO
-1539822336,1539822591,RU
1539822592,1539822847,GB
1539822848,1539823103,IE
1539823104,1539823359,DE
@@ -65490,7 +22603,6 @@
1539831040,1539831295,UA
1539831296,1539831551,PL
1539831552,1539831807,DE
-1539831808,1539832063,RU
1539832064,1539832319,GB
1539832320,1539832575,PL
1539832576,1539832831,RU
@@ -65514,10 +22626,8 @@
1539853312,1539854335,PL
1539854336,1539855359,UA
1539855360,1539856383,RU
-1539856384,1539857407,UA
1539857408,1539858431,PL
1539858432,1539859455,RO
-1539859456,1539860479,DE
1539860480,1539861503,PL
1539861504,1539862527,DE
1539862528,1539863551,UA
@@ -65529,16 +22639,13 @@
1539868672,1539869695,UA
1539869696,1539870719,ES
1539870720,1539871743,IL
-1539871744,1539872767,ES
1539872768,1539873791,SE
1539873792,1539875839,UA
-1539875840,1539876863,MD
+1539875840,1539876863,RU
1539876864,1539877887,ES
1539877888,1539878911,PL
-1539878912,1539879935,EU
1539879936,1539880959,UA
1539880960,1539881983,PL
-1539881984,1539883007,UA
1539883008,1539884031,RS
1539884032,1539885055,MT
1539885056,1539886079,UA
@@ -65553,19 +22660,17 @@
1539896320,1539898367,UA
1539898368,1539899391,CZ
1539899392,1539900415,RU
-1539900416,1539901439,EU
1539901440,1539902463,RU
1539902464,1539903487,LV
1539903488,1539904511,PL
1539904512,1539905535,CZ
-1539905536,1539907583,UA
-1539907584,1539908607,EU
-1539908608,1539910655,UA
+1539905536,1539906559,UA
+1539908608,1539909631,UA
+1539909632,1539910655,RU
1539910656,1539911679,PL
1539911680,1539913727,RU
1539913728,1539914751,CH
1539914752,1539915775,SE
-1539915776,1539916799,RU
1539916800,1539917823,UA
1539917824,1539918847,RU
1539918848,1539920895,RO
@@ -65574,7 +22679,6 @@
1539922944,1539923967,SE
1539923968,1539924991,RU
1539924992,1539926015,DE
-1539926016,1539927039,RU
1539927040,1539928063,UA
1539928064,1539930111,RU
1539930112,1539931135,PL
@@ -65594,12 +22698,11 @@
1539946496,1539947519,RU
1539947520,1539948543,UA
1539948544,1539949567,RO
-1539949568,1539950591,MD
1539950592,1539950847,GB
1539950848,1539951103,RU
1539951104,1539951615,UA
1539951616,1539953663,RU
-1539953664,1539954175,CH
+1539953664,1539954175,AT
1539954176,1539954687,KZ
1539954688,1539956735,RO
1539956736,1539957759,UA
@@ -65610,7 +22713,6 @@
1539965952,1539966975,RU
1539966976,1539967999,UA
1539968000,1539972095,RU
-1539972096,1539973119,GB
1539974144,1539975167,RU
1539975168,1539976191,DE
1539976192,1539977215,RU
@@ -65645,16 +22747,14 @@
1540008960,1540011007,PL
1540011008,1540014079,RU
1540014080,1540015103,PL
-1540015104,1540016127,RU
-1540016128,1540017151,DE
-1540017152,1540019199,RU
-1540019200,1540020223,UA
+1540015104,1540018175,RU
+1540018176,1540020223,UA
1540020224,1540022271,RU
1540022272,1540023295,GB
1540023296,1540024319,PL
1540024320,1540025343,RU
1540025344,1540026367,GB
-1540026368,1540028415,UA
+1540026368,1540027391,UA
1540029440,1540031487,RU
1540031488,1540032511,UA
1540032512,1540033535,RU
@@ -65674,12 +22774,9 @@
1540046848,1540047871,RU
1540047872,1540048895,LV
1540048896,1540049919,GB
-1540049920,1540050943,UA
1540050944,1540052991,RU
-1540052992,1540055039,UA
-1540055040,1540055423,EU
-1540055424,1540055551,NO
-1540055552,1540056063,EU
+1540052992,1540054015,UA
+1540055040,1540056063,NO
1540056064,1540057087,NL
1540057088,1540057343,PL
1540057344,1540057599,RU
@@ -65688,7 +22785,6 @@
1540058112,1540059135,DE
1540059136,1540060159,UA
1540060160,1540061183,NO
-1540061184,1540062207,A2
1540062208,1540063231,RU
1540063232,1540064255,NL
1540064256,1540065279,PL
@@ -65698,7 +22794,9 @@
1540070400,1540071423,PL
1540071424,1540072447,SE
1540072448,1540073471,UA
-1540073472,1540077567,RU
+1540073472,1540074495,RU
+1540074496,1540075519,UZ
+1540075520,1540077567,RU
1540077568,1540078591,FR
1540078592,1540081663,RU
1540081664,1540082687,DE
@@ -65706,7 +22804,8 @@
1540083712,1540084735,RU
1540084736,1540085759,NL
1540085760,1540087807,PL
-1540087808,1540092927,RU
+1540087808,1540088831,RU
+1540089856,1540092927,RU
1540092928,1540094975,PL
1540094976,1540095999,RU
1540096000,1540097023,SE
@@ -65714,7 +22813,7 @@
1540099072,1540100095,UA
1540100096,1540103167,RU
1540103168,1540105215,DE
-1540105216,1540110335,UA
+1540105216,1540106239,UA
1540110336,1540111359,RU
1540111360,1540112383,UA
1540112384,1540113407,LV
@@ -65739,21 +22838,18 @@
1540136960,1540137983,PL
1540137984,1540139007,RU
1540139008,1540140031,DE
-1540140032,1540140287,US
-1540140288,1540141055,GB
+1540140032,1540141055,GB
1540141056,1540142079,RU
1540142080,1540143103,UA
1540143104,1540144127,RU
1540144128,1540145151,AM
-1540145152,1540145407,EU
-1540145408,1540146175,AT
+1540145152,1540146175,AT
1540146176,1540147199,UA
1540147200,1540148223,RU
1540148224,1540149247,PL
1540149248,1540150271,GB
1540150272,1540151295,UA
1540151296,1540152319,AT
-1540152320,1540153343,SE
1540153344,1540156415,RU
1540156416,1540157439,UZ
1540157440,1540158463,RU
@@ -65785,8 +22881,6 @@
1540185088,1540186111,RU
1540186112,1540187135,NL
1540187136,1540188159,US
-1540188160,1540189183,KZ
-1540189184,1540190207,GB
1540190208,1540191231,PT
1540191232,1540192255,FR
1540192256,1540195327,RU
@@ -65801,7 +22895,6 @@
1540205568,1540206591,DE
1540206592,1540208639,RU
1540208640,1540209663,NO
-1540209664,1540210687,RU
1540210688,1540211455,NL
1540211456,1540211711,CZ
1540212736,1540213759,RU
@@ -65812,11 +22905,8 @@
1540217856,1540218879,GB
1540218880,1540219903,RU
1540219904,1540220927,PL
-1540220928,1540221441,NL
-1540221442,1540221569,US
-1540221570,1540221825,NL
-1540221826,1540222081,US
-1540222082,1540223999,RU
+1540220928,1540221951,US
+1540221952,1540223999,RU
1540224000,1540225023,PL
1540225024,1540226047,GB
1540226048,1540227071,RU
@@ -65827,7 +22917,7 @@
1540229120,1540229631,AT
1540229632,1540230143,NL
1540230144,1540232191,RU
-1540232192,1540232703,BG
+1540232192,1540232703,LU
1540232704,1540233215,RU
1540233216,1540233727,CH
1540233728,1540234239,PL
@@ -65846,7 +22936,7 @@
1540242944,1540243455,RU
1540243456,1540243967,PL
1540243968,1540244479,RU
-1540244480,1540244991,CH
+1540244480,1540244735,CH
1540244992,1540245503,DE
1540245504,1540246015,RU
1540246016,1540246527,IT
@@ -65858,7 +22948,6 @@
1540249600,1540250111,KZ
1540250112,1540250367,PL
1540250368,1540250623,CZ
-1540250624,1540251135,RU
1540251136,1540251647,GB
1540251648,1540252159,PL
1540252160,1540252671,DE
@@ -65932,23 +23021,19 @@
1540291072,1540291583,BE
1540291584,1540292095,UA
1540292096,1540292607,RU
-1540292608,1540293119,FR
1540293120,1540293631,DK
1540293632,1540295167,UA
1540295168,1540295679,PL
-1540295680,1540296191,SA
1540296192,1540296703,PL
1540296704,1540297215,DE
1540297216,1540298239,FR
1540298240,1540298751,HR
1540298752,1540299263,RU
1540299264,1540299775,UA
-1540299776,1540300287,KZ
+1540299776,1540300287,KG
1540300288,1540300799,RU
1540300800,1540301311,DK
-1540301312,1540301568,IL
-1540301569,1540301569,A2
-1540301570,1540301823,IL
+1540301312,1540301823,IL
1540301824,1540302847,GB
1540302848,1540303871,RU
1540303872,1540304895,UA
@@ -65968,15 +23053,12 @@
1540313600,1540315135,RU
1540315136,1540315647,UA
1540315648,1540316159,IL
-1540316160,1540316415,EU
-1540316416,1540316671,DE
+1540316160,1540316671,DE
1540316672,1540317183,RO
-1540317184,1540317695,KG
1540317696,1540318207,UA
1540318208,1540318719,RU
1540318720,1540319231,RO
1540319232,1540320255,UA
-1540320256,1540320767,RU
1540320768,1540321279,GB
1540321280,1540321791,SE
1540321792,1540322303,RU
@@ -65997,7 +23079,6 @@
1540330496,1540331007,PL
1540331008,1540331519,IT
1540331520,1540332031,GB
-1540332032,1540332543,RU
1540332544,1540333055,PL
1540333056,1540333567,NO
1540333568,1540334079,RO
@@ -66005,16 +23086,14 @@
1540334592,1540335103,RU
1540335104,1540336127,PL
1540336128,1540336639,RU
-1540336640,1540337663,MC
1540337664,1540338175,FR
-1540338176,1540339199,RU
+1540338688,1540339199,RU
1540339200,1540339711,UA
1540339712,1540340735,PL
1540340736,1540341247,CZ
1540341248,1540341759,BG
1540341760,1540342271,GB
1540342272,1540342783,UA
-1540342784,1540343295,ES
1540343296,1540343807,GB
1540343808,1540344831,PL
1540344832,1540345343,UA
@@ -66030,7 +23109,6 @@
1540350464,1540350975,NO
1540350976,1540351487,DK
1540352000,1540352511,NL
-1540352512,1540353023,RU
1540353024,1540353535,GR
1540353536,1540354047,RU
1540354048,1540354559,IL
@@ -66058,9 +23136,7 @@
1540361984,1540362239,EE
1540362240,1540362495,RU
1540362496,1540363007,DE
-1540363008,1540363263,FR
1540363264,1540363519,RU
-1540363520,1540363775,GB
1540363776,1540364031,IS
1540364032,1540364287,RU
1540364288,1540364543,NO
@@ -66070,7 +23146,6 @@
1540365312,1540365567,GB
1540365568,1540365823,RU
1540365824,1540366079,CH
-1540366080,1540366335,IE
1540366336,1540366591,PL
1540366592,1540366847,RU
1540366848,1540367103,AT
@@ -66084,7 +23159,6 @@
1540368896,1540369407,RU
1540369408,1540369663,PL
1540369664,1540369919,DE
-1540369920,1540370175,UA
1540370176,1540370431,DE
1540370432,1540370687,LB
1540370688,1540370943,NL
@@ -66094,7 +23168,6 @@
1540371712,1540371967,GB
1540371968,1540372223,NO
1540372224,1540372479,PL
-1540372480,1540372735,EU
1540372736,1540372991,GR
1540372992,1540373247,DE
1540373248,1540373503,UA
@@ -66106,7 +23179,6 @@
1540374784,1540375039,UA
1540375040,1540375551,GB
1540375552,1540375807,DE
-1540375808,1540376063,NL
1540376064,1540376319,TR
1540376320,1540376575,DK
1540376576,1540376831,PL
@@ -66122,7 +23194,6 @@
1540379136,1540379391,CH
1540379392,1540379647,DE
1540379648,1540379903,RU
-1540379904,1540380159,EU
1540380160,1540380415,IL
1540380416,1540380671,NL
1540380672,1540380927,SI
@@ -66141,7 +23212,6 @@
1540384000,1540384255,SI
1540384256,1540384511,FR
1540384512,1540384767,SE
-1540384768,1540385023,HR
1540385024,1540385279,GB
1540385280,1540385535,PL
1540385536,1540385791,DE
@@ -66149,7 +23219,6 @@
1540386304,1540386559,NL
1540386560,1540386815,GB
1540386816,1540387071,NL
-1540387072,1540387327,RU
1540387328,1540387583,GB
1540387584,1540388095,UA
1540388096,1540388351,GB
@@ -66163,7 +23232,6 @@
1540390144,1540390399,SI
1540390400,1540390655,RU
1540390656,1540390911,UA
-1540390912,1540391167,SA
1540391168,1540391423,IL
1540391424,1540391679,CH
1540391680,1540391935,NL
@@ -66191,7 +23259,7 @@
1540398080,1540398335,SA
1540398336,1540398591,DK
1540398592,1540399359,DE
-1540399360,1540399871,RU
+1540399360,1540399615,RU
1540399872,1540400127,GB
1540400128,1540400383,NL
1540400384,1540400639,IR
@@ -66222,7 +23290,6 @@
1540407808,1540408063,UA
1540408064,1540408319,IT
1540408320,1540408575,NL
-1540408576,1540408831,HR
1540408832,1540409087,UA
1540409088,1540409343,TR
1540409344,1540409599,SI
@@ -66231,9 +23298,7 @@
1540410112,1540410367,KW
1540410368,1540410623,CH
1540410624,1540410879,RU
-1540410880,1540411135,TR
-1540411136,1540411391,SG
-1540411392,1540411647,RU
+1540411136,1540411391,NL
1540411648,1540411903,FR
1540411904,1540412159,RU
1540412160,1540412415,BE
@@ -66253,21 +23318,18 @@
1540415744,1540415999,SI
1540416000,1540416255,FR
1540416256,1540416511,CH
-1540416512,1540416767,RU
1540416768,1540417023,NL
-1540417024,1540417279,RU
1540417280,1540417535,UA
1540417536,1540417791,RU
1540417792,1540418047,HR
1540418048,1540418559,RO
1540418816,1540419071,FR
1540419072,1540419327,RU
-1540419328,1540419839,GB
+1540419328,1540419583,GB
1540419840,1540420095,NL
1540420096,1540420607,GB
1540420608,1540420863,DE
1540420864,1540421119,GB
-1540421120,1540421375,RU
1540421376,1540421631,PL
1540421632,1540422143,RU
1540422144,1540422399,PL
@@ -66288,7 +23350,6 @@
1540426240,1540426495,IE
1540426496,1540426751,UA
1540426752,1540427263,NL
-1540427264,1540427519,RU
1540427520,1540427775,FR
1540427776,1540428287,RU
1540428288,1540428543,SI
@@ -66311,14 +23372,12 @@
1540433152,1540433407,GB
1540433408,1540433663,AM
1540433664,1540433919,DK
-1540433920,1540434175,GB
1540434176,1540434431,CH
1540434432,1540434687,DE
1540434688,1540434943,GB
1540434944,1540435199,FR
1540435200,1540435455,RO
1540435456,1540435967,GR
-1540435968,1540436223,RU
1540436224,1540436479,SI
1540436480,1540436735,GB
1540436736,1540436991,UA
@@ -66327,22 +23386,21 @@
1540437504,1540438015,UA
1540438016,1540438271,PL
1540438272,1540438527,US
-1540438528,1540439039,RU
+1540438784,1540439039,RU
1540439040,1540439295,GB
1540439296,1540439551,RO
-1540439552,1540440063,PL
1540440064,1540440319,UA
1540440320,1540440575,RU
1540440576,1540440831,MD
1540440832,1540441087,RU
-1540441088,1540441343,PL
1540441344,1540441855,RU
1540441856,1540442111,GB
1540442112,1540442367,RU
1540442368,1540442623,GB
1540442624,1540442879,IE
1540442880,1540443135,AT
-1540443136,1540443647,RU
+1540443136,1540443391,RU
+1540443392,1540443647,CZ
1540443648,1540443903,FR
1540443904,1540444159,GB
1540444160,1540444415,RU
@@ -66363,7 +23421,6 @@
1540448256,1540448511,UA
1540448512,1540448767,IT
1540448768,1540449023,CH
-1540449280,1540449535,UA
1540449536,1540449791,CZ
1540449792,1540450047,RO
1540450048,1540450303,DE
@@ -66378,7 +23435,6 @@
1540452352,1540452607,AT
1540452608,1540452863,IL
1540452864,1540453119,HU
-1540453120,1540453375,RU
1540453376,1540453631,PL
1540453632,1540453887,FR
1540453888,1540454143,UA
@@ -66407,7 +23463,6 @@
1540461056,1540461311,BG
1540461312,1540461823,RU
1540462080,1540462335,SI
-1540462336,1540462591,UA
1540462592,1540463103,PL
1540463104,1540463359,FR
1540463360,1540463615,PL
@@ -66416,9 +23471,8 @@
1540464128,1540464383,CH
1540464384,1540464895,DE
1540464896,1540465407,GB
-1540465408,1540465663,ES
1540465664,1540465919,NL
-1540465920,1540466175,RU
+1540465920,1540466175,UA
1540466176,1540466431,DK
1540466432,1540466687,RU
1540466688,1540466943,NL
@@ -66430,13 +23484,10 @@
1540468736,1540468991,UA
1540468992,1540469247,PL
1540469248,1540469503,GB
-1540469504,1540469759,RO
1540469760,1540470015,PL
1540470016,1540470271,SI
1540470272,1540470527,IL
-1540470528,1540471039,RU
1540471040,1540471295,DE
-1540471296,1540471551,RU
1540471552,1540471807,GB
1540471808,1540472063,SI
1540472064,1540472319,RO
@@ -66469,13 +23520,10 @@
1540480000,1540480255,GB
1540480256,1540480767,PL
1540480768,1540481023,GB
-1540481024,1540481279,LT
1540481280,1540481535,GB
1540481536,1540481791,UA
-1540481792,1540482047,RU
1540482048,1540482303,DK
1540482304,1540482559,FR
-1540482560,1540482815,CH
1540482816,1540483071,DE
1540483072,1540483327,SE
1540483328,1540483839,RU
@@ -66511,7 +23559,6 @@
1540500480,1540501503,RU
1540501504,1540502527,PL
1540502528,1540503551,RU
-1540503552,1540504575,NL
1540504576,1540505599,SE
1540505600,1540506623,RO
1540506624,1540507647,GB
@@ -66521,7 +23568,6 @@
1540510720,1540511743,RU
1540511744,1540512767,BG
1540512768,1540514815,RU
-1540514816,1540515839,GB
1540515840,1540516863,RU
1540516864,1540517887,UA
1540517888,1540518911,RU
@@ -66561,12 +23607,11 @@
1540564992,1540566015,DE
1540566016,1540567039,RU
1540567040,1540568063,MD
-1540568064,1540572159,RU
+1540568064,1540571135,RU
1540572160,1540573183,UA
1540573184,1540574207,NL
1540574208,1540576255,RU
1540576256,1540577279,PL
-1540577280,1540578303,RO
1540578304,1540579327,RU
1540579328,1540580351,IE
1540580352,1540581375,PL
@@ -66577,7 +23622,6 @@
1540586496,1540588543,RU
1540588544,1540589567,UA
1540589568,1540593663,RU
-1540593664,1540594687,GB
1540594688,1540595711,IT
1540595712,1540596735,UZ
1540596736,1540597759,FR
@@ -66585,14 +23629,13 @@
1540598784,1540600831,UA
1540600832,1540602879,RU
1540602880,1540603903,BG
-1540603904,1540605951,RU
+1540603904,1540604927,RU
1540605952,1540606975,MD
1540606976,1540607999,UA
1540608000,1540609023,RU
1540609024,1540610047,UA
1540610048,1540611071,RU
1540611072,1540612095,PL
-1540612096,1540613119,TR
1540613120,1540614143,RU
1540614144,1540615167,BG
1540615168,1540616191,RU
@@ -66613,7 +23656,6 @@
1540622850,1540622853,RU
1540622854,1540622854,GB
1540622855,1540623103,RU
-1540623104,1540623359,SE
1540623360,1540623615,GB
1540623616,1540623871,BG
1540624128,1540624383,RS
@@ -66621,14 +23663,12 @@
1540624640,1540624895,BG
1540624896,1540625151,GB
1540625152,1540625407,IR
-1540625408,1540625663,RU
1540625664,1540625919,FR
1540625920,1540626175,UA
1540626176,1540626431,RO
1540626432,1540626687,SI
1540626688,1540626943,PL
1540626944,1540627199,FR
-1540627200,1540627455,PL
1540627456,1540627711,DK
1540627712,1540627967,CH
1540627968,1540628223,PL
@@ -66639,10 +23679,8 @@
1540629248,1540629503,RO
1540629504,1540629759,DK
1540629760,1540630015,BG
-1540630016,1540630271,DE
1540630272,1540630527,RO
1540630528,1540630783,CH
-1540630784,1540631039,RU
1540631040,1540631295,NL
1540631296,1540631551,CH
1540631552,1540631807,HR
@@ -66650,13 +23688,9 @@
1540632064,1540632319,AT
1540632320,1540632575,RU
1540632576,1540632831,DK
-1540632832,1540633087,GB
1540633088,1540633343,RU
-1540633344,1540633599,CH
1540633600,1540633855,RO
1540633856,1540634111,AE
-1540634112,1540634367,GB
-1540634368,1540634623,FR
1540634624,1540634879,UA
1540634880,1540635135,RU
1540635136,1540635391,FR
@@ -66665,18 +23699,14 @@
1540636160,1540636415,RO
1540636416,1540636671,LV
1540636672,1540636927,RU
-1540636928,1540637183,UA
1540637184,1540637439,RO
1540637440,1540637695,SA
1540637696,1540637951,RU
1540637952,1540638207,RS
1540638208,1540638463,RO
1540638464,1540638719,AM
-1540638720,1540638975,UA
1540639232,1540639487,RO
-1540639488,1540639491,CH
-1540639492,1540639492,EU
-1540639493,1540639743,CH
+1540639488,1540639743,CH
1540639744,1540639999,IL
1540640000,1540640255,CH
1540640256,1540640511,FR
@@ -66727,8 +23757,7 @@
1540653056,1540653311,FR
1540653312,1540653567,DK
1540653568,1540653823,DE
-1540653824,1540654079,GB
-1540654080,1540654335,EU
+1540653824,1540654335,GB
1540654336,1540654591,RU
1540654592,1540654847,SI
1540654848,1540655103,RU
@@ -66736,7 +23765,7 @@
1540655360,1540655615,RU
1540655616,1540655871,GB
1540655872,1540656383,NL
-1540656384,1540656895,RU
+1540656640,1540656895,RU
1540656896,1540657151,RO
1540657152,1540657407,DE
1540657408,1540657663,CY
@@ -66794,7 +23823,7 @@
1540673280,1540673535,SE
1540673536,1540673791,SI
1540673792,1540674047,SE
-1540674048,1540674303,NL
+1540674048,1540674303,GB
1540674304,1540674559,FR
1540674560,1540674815,GB
1540674816,1540675071,GE
@@ -66882,7 +23911,6 @@
1540697856,1540698111,NO
1540698112,1540698367,DE
1540698368,1540698623,IE
-1540698624,1540698879,EU
1540698880,1540699135,RU
1540699136,1540699391,GR
1540699392,1540699647,NL
@@ -66899,14 +23927,12 @@
1540702464,1540702719,PT
1540702720,1540702975,DK
1540702976,1540703231,RU
-1540703232,1540703487,DE
+1540703232,1540703487,GB
1540703488,1540703743,NL
1540703744,1540703999,DK
1540704000,1540704255,PL
1540704256,1540704511,KZ
1540704512,1540704767,IE
-1540704768,1540705023,UA
-1540705024,1540705279,HU
1540705280,1540705535,RO
1540705536,1540705791,AT
1540705792,1540706047,NL
@@ -66946,7 +23972,6 @@
1540715520,1540715775,DE
1540716032,1540716287,PL
1540716288,1540716543,UA
-1540716544,1540716799,RU
1540716800,1540717055,UA
1540717056,1540717311,CZ
1540717312,1540717823,PL
@@ -67032,7 +24057,6 @@
1540740608,1540740863,NL
1540740864,1540741119,RO
1540741120,1540741375,GB
-1540741376,1540741631,EU
1540741632,1540742143,NL
1540742144,1540742399,RU
1540742400,1540742655,DE
@@ -67072,7 +24096,8 @@
1540755456,1540756479,UA
1540756480,1540757503,DK
1540757504,1540758527,PL
-1540758528,1540760575,UA
+1540758528,1540759551,UA
+1540760064,1540760319,UA
1540760576,1540761599,PL
1540761600,1540762623,RU
1540762624,1540763647,LU
@@ -67080,20 +24105,20 @@
1540764672,1540765695,PL
1540765696,1540766719,RU
1540766720,1540767743,IT
-1540767744,1540768767,GB
1540768768,1540769791,RU
1540769792,1540770815,IT
1540770816,1540771839,RU
1540771840,1540773887,UA
1540773888,1540774911,SE
-1540774912,1540775935,GB
1540775936,1540776959,RU
1540776960,1540777983,IL
1540777984,1540779007,HR
1540779008,1540780031,NL
1540780032,1540781055,UA
1540781056,1540783103,RU
-1540783104,1540787199,UA
+1540783104,1540784639,UA
+1540784640,1540784895,RU
+1540784896,1540787199,UA
1540787200,1540788223,KZ
1540788224,1540790271,RU
1540790272,1540791295,KW
@@ -67117,8 +24142,8 @@
1540812800,1540813823,RU
1540813824,1540815871,UA
1540815872,1540816895,DE
-1540816896,1540817920,PL
-1540817921,1540818943,NL
+1540816896,1540817919,PL
+1540817920,1540818943,NL
1540818944,1540819967,UA
1540819968,1540820991,CZ
1540820992,1540823039,RU
@@ -67157,9 +24182,7 @@
1540860928,1540861951,KZ
1540861952,1540862975,BY
1540862976,1540865023,GB
-1540865024,1540867071,RU
-1540867072,1540868095,KZ
-1540868096,1540872191,RU
+1540865024,1540872191,RU
1540872192,1540873215,BG
1540873216,1540875263,RU
1540875264,1540876287,PL
@@ -67179,7 +24202,6 @@
1540884480,1540884735,RO
1540884736,1540884991,GB
1540884992,1540885247,BE
-1540885248,1540885503,UA
1540885504,1540885759,ES
1540885760,1540886015,DE
1540886016,1540886271,DK
@@ -67214,14 +24236,13 @@
1540893696,1540893951,HU
1540893952,1540894207,DE
1540894208,1540894463,RU
-1540894464,1540894719,RO
+1540894464,1540894719,MD
1540894720,1540895487,RU
1540895488,1540895743,PL
1540895744,1540895999,RO
1540896000,1540896255,RU
1540896256,1540896511,SI
1540896512,1540896767,GB
-1540896768,1540897023,EU
1540897024,1540897279,GB
1540897280,1540897535,FR
1540897536,1540897791,RU
@@ -67307,8 +24328,7 @@
1540920576,1540920831,PL
1540920832,1540921087,HU
1540921088,1540921599,RO
-1540921600,1540921855,MT
-1540921856,1540922111,EU
+1540921600,1540922111,MT
1540922112,1540922367,ES
1540922368,1540922879,RO
1540922880,1540923135,DE
@@ -67343,7 +24363,6 @@
1540930304,1540930559,RU
1540930560,1540930815,KW
1540930816,1540931071,KZ
-1540931072,1540931327,EU
1540931328,1540931839,PL
1540931840,1540932095,GB
1540932096,1540932351,PL
@@ -67438,7 +24457,7 @@
1540966912,1540967935,RU
1540967936,1540968447,UA
1540968960,1540969471,RO
-1540969472,1540969983,NL
+1540969472,1540969983,GB
1540969984,1540970495,DE
1540970496,1540971007,IE
1540971008,1540971519,UA
@@ -67492,7 +24511,7 @@
1540988928,1540989183,GB
1540989184,1540989439,PL
1540989440,1540989695,UA
-1540989696,1540989951,RU
+1540989696,1540989951,PL
1540989952,1540990207,FR
1540990208,1540990463,DE
1540990464,1540990719,UA
@@ -67504,7 +24523,7 @@
1540992256,1540992511,AT
1540992512,1540993279,DE
1540993280,1540993535,LB
-1540993536,1540993791,SC
+1540993536,1540993791,RU
1540993792,1540994047,UA
1540994048,1540994303,RU
1540994304,1540994559,SE
@@ -67524,7 +24543,6 @@
1540998400,1540998655,UA
1540998656,1540998911,PL
1540998912,1540999167,DE
-1540999168,1540999423,RU
1540999424,1540999679,DK
1540999680,1540999935,RU
1540999936,1541000191,RO
@@ -67545,7 +24563,6 @@
1541004288,1541004543,RU
1541004544,1541004799,PL
1541004800,1541005055,SI
-1541005056,1541005311,NL
1541005312,1541005567,PL
1541005568,1541006079,AT
1541006080,1541006335,RU
@@ -67560,7 +24577,6 @@
1541008384,1541008639,RU
1541008640,1541008895,GB
1541008896,1541009151,TR
-1541009152,1541009407,RU
1541009408,1541009663,UA
1541009664,1541009919,CH
1541009920,1541010175,PL
@@ -67585,7 +24601,6 @@
1541024768,1541026815,UA
1541026816,1541027839,LV
1541028864,1541029887,PL
-1541029888,1541030911,UA
1541030912,1541031935,PL
1541031936,1541032959,UA
1541032960,1541033983,PL
@@ -67596,16 +24611,14 @@
1541038080,1541039103,UA
1541039104,1541040127,RU
1541040128,1541041151,UA
-1541041152,1541042175,RU
-1541042176,1541043199,DE
-1541043200,1541044223,RU
+1541041152,1541044223,RU
1541044224,1541045247,US
1541045248,1541046271,NL
1541046272,1541051391,RU
1541051392,1541052415,NL
1541052416,1541053439,RO
1541053440,1541054463,PL
-1541054464,1541055487,RU
+1541054464,1541055487,TJ
1541055488,1541056511,PL
1541056512,1541057535,TJ
1541057536,1541058559,RS
@@ -67648,7 +24661,7 @@
1541099520,1541100543,UA
1541100544,1541101567,HU
1541101568,1541102591,RU
-1541102592,1541103615,EU
+1541102592,1541103615,RO
1541103616,1541105663,RU
1541105664,1541106687,PL
1541106688,1541107711,NL
@@ -67693,7 +24706,7 @@
1541147136,1541147391,PL
1541147392,1541147903,RU
1541147904,1541148415,RO
-1541148416,1541148671,US
+1541148416,1541148671,GB
1541148672,1541148927,RU
1541148928,1541149439,PL
1541149440,1541149695,SE
@@ -67710,7 +24723,7 @@
1541152768,1541153023,PL
1541153024,1541153279,RU
1541153280,1541153535,DE
-1541153536,1541153791,RO
+1541153536,1541153791,UA
1541153792,1541154047,DE
1541154048,1541154303,NL
1541154304,1541154559,RU
@@ -67750,7 +24763,7 @@
1541163520,1541163775,DE
1541163776,1541164031,RO
1541164032,1541164287,RU
-1541164288,1541164543,CH
+1541164288,1541164543,HR
1541164544,1541164799,SI
1541164800,1541165055,IR
1541165056,1541165311,UA
@@ -67845,7 +24858,6 @@
1541188864,1541189119,RU
1541189120,1541189375,UA
1541189376,1541189631,GB
-1541189632,1541189887,SC
1541189888,1541190143,PL
1541190144,1541190399,GB
1541190400,1541190655,AT
@@ -67893,7 +24905,6 @@
1541202432,1541202687,ES
1541202688,1541202943,SE
1541202944,1541203199,DE
-1541203200,1541203455,ES
1541203456,1541203711,UA
1541203712,1541203967,GB
1541203968,1541204223,RO
@@ -67932,11 +24943,7 @@
1541216768,1541217279,PL
1541217280,1541218303,RU
1541218304,1541218815,IT
-1541218816,1541219008,RU
-1541219009,1541219016,GB
-1541219017,1541219024,RU
-1541219025,1541219038,GB
-1541219039,1541219839,RU
+1541218816,1541219839,RU
1541219840,1541220351,CZ
1541220352,1541221375,RU
1541221376,1541221887,PL
@@ -67975,7 +24982,6 @@
1541237248,1541238271,RU
1541238272,1541239295,SK
1541239296,1541239807,PL
-1541239808,1541240319,RU
1541240320,1541240831,CH
1541240832,1541241343,DE
1541241344,1541241855,PL
@@ -68025,7 +25031,7 @@
1541265408,1541265919,RS
1541265920,1541266431,UA
1541266432,1541266943,KW
-1541266944,1541267455,US
+1541266944,1541267455,CY
1541267456,1541267967,FR
1541267968,1541268479,DE
1541268480,1541268991,AM
@@ -68094,7 +25100,7 @@
1541338112,1541341183,UA
1541341184,1541341439,TR
1541341440,1541341695,RU
-1541341696,1541341951,DE
+1541341696,1541341951,HU
1541341952,1541342463,PL
1541342464,1541342719,FR
1541342720,1541342975,PL
@@ -68164,7 +25170,6 @@
1541359616,1541359871,PL
1541359872,1541360127,FR
1541360128,1541360383,CZ
-1541360384,1541360639,RU
1541360640,1541360895,FR
1541360896,1541361151,UA
1541361152,1541361407,PL
@@ -68177,8 +25182,8 @@
1541362944,1541363199,DK
1541363200,1541363455,UA
1541363456,1541363711,IE
-1541363712,1541363967,UA
-1541363968,1541364479,RU
+1541363712,1541364223,UA
+1541364224,1541364479,RU
1541364480,1541364735,AT
1541364736,1541364991,SE
1541364992,1541365247,RU
@@ -68187,7 +25192,6 @@
1541365760,1541366015,DE
1541366016,1541366271,UA
1541366272,1541366527,RU
-1541366528,1541366783,RO
1541366784,1541367039,NO
1541367040,1541367295,AT
1541367296,1541367807,UA
@@ -68272,7 +25276,7 @@
1541389312,1541389567,RU
1541389568,1541389823,SI
1541389824,1541390079,RO
-1541390080,1541390335,US
+1541390080,1541390335,NL
1541390336,1541390591,DK
1541390592,1541390847,SI
1541390848,1541391103,RU
@@ -68360,7 +25364,7 @@
1541420032,1541420543,RU
1541420544,1541421055,NL
1541421056,1541421567,PL
-1541421568,1541422079,CZ
+1541421568,1541422079,GB
1541422080,1541422591,PL
1541422592,1541423103,RU
1541423616,1541424127,AT
@@ -68371,14 +25375,14 @@
1541426176,1541426687,RU
1541426688,1541427199,UA
1541427200,1541428223,RU
-1541428224,1541429247,UA
+1541428224,1541428991,UA
+1541428992,1541429247,RU
1541429248,1541429759,FI
1541429760,1541430271,CZ
1541430272,1541430783,LT
1541430784,1541431295,CH
1541431296,1541431807,UA
1541431808,1541432319,RU
-1541432320,1541432831,RO
1541432832,1541433343,RU
1541433344,1541433855,PL
1541433856,1541434367,RU
@@ -68430,7 +25434,6 @@
1541463552,1541464063,UA
1541464064,1541464575,PL
1541464576,1541465087,DE
-1541465088,1541465599,RU
1541465600,1541466111,FR
1541466112,1541467135,RU
1541467136,1541467647,PL
@@ -68541,7 +25544,7 @@
1541572608,1541573119,RU
1541573120,1541573631,UA
1541573632,1541574655,RU
-1541574656,1541575167,DK
+1541574656,1541575167,SE
1541575168,1541575423,PL
1541575424,1541575679,IT
1541575680,1541577727,RU
@@ -68558,7 +25561,7 @@
1541583616,1541583871,GE
1541583872,1541584127,SE
1541584128,1541584383,GB
-1541584384,1541584895,BE
+1541584384,1541584895,NL
1541584896,1541585151,DE
1541585152,1541585663,RU
1541585664,1541585919,UA
@@ -68577,7 +25580,7 @@
1541592576,1541593087,FR
1541593088,1541594111,CZ
1541594112,1541594367,AL
-1541594368,1541595135,RU
+1541594624,1541595135,RU
1541595136,1541595647,IR
1541595648,1541596159,BG
1541596160,1541597695,PL
@@ -68665,7 +25668,6 @@
1541645824,1541646079,RO
1541646080,1541646335,PL
1541646336,1541646847,RU
-1541646848,1541647359,NO
1541647360,1541648383,RU
1541648384,1541648639,PL
1541648640,1541648895,DK
@@ -68700,7 +25702,6 @@
1541666048,1541666815,GB
1541666816,1541667839,NO
1541667840,1541668095,CH
-1541668096,1541668351,GB
1541668352,1541668607,UA
1541668608,1541668863,GE
1541668864,1541669887,GB
@@ -68719,7 +25720,8 @@
1541677056,1541678079,PL
1541678080,1541678591,RO
1541678592,1541678847,BG
-1541678848,1541679615,RU
+1541678848,1541679103,KZ
+1541679104,1541679615,RU
1541679616,1541680127,PL
1541680128,1541681151,CZ
1541681152,1541682175,RU
@@ -68762,7 +25764,7 @@
1541704704,1541706239,RO
1541706240,1541706751,UA
1541706752,1541707263,RU
-1541707264,1541707519,CH
+1541707264,1541707519,DE
1541707520,1541707775,NL
1541707776,1541708799,DE
1541708800,1541709823,PL
@@ -68793,8 +25795,8 @@
1541723648,1541723903,NO
1541723904,1541724159,BE
1541724160,1541725183,CZ
-1541725184,1541727231,RU
-1541727232,1541727743,UA
+1541725184,1541727487,RU
+1541727488,1541727743,UA
1541727744,1541727999,RU
1541728256,1541729023,GB
1541729024,1541729279,DE
@@ -68824,7 +25826,7 @@
1541739776,1541740031,NO
1541740032,1541740287,PL
1541740288,1541740543,NL
-1541740544,1541740799,SK
+1541740544,1541740799,CZ
1541740800,1541741055,RU
1541741056,1541741567,PL
1541741568,1541742079,SK
@@ -68869,7 +25871,6 @@
1541766144,1541767167,GB
1541767168,1541767679,UA
1541767680,1541768191,FR
-1541768192,1541769215,RO
1541769216,1541769471,FR
1541769472,1541770239,FI
1541770240,1541770495,CH
@@ -68893,7 +25894,7 @@
1541779968,1541780479,DE
1541780480,1541780735,ES
1541780736,1541780991,GB
-1541780992,1541781503,RO
+1541781248,1541781503,RO
1541781504,1541781759,TR
1541781760,1541782015,RU
1541782016,1541782271,RO
@@ -68906,7 +25907,9 @@
1541785856,1541786111,GB
1541786112,1541786623,RU
1541786624,1541787647,UA
-1541787648,1541788671,RU
+1541787648,1541788159,RU
+1541788160,1541788415,UA
+1541788416,1541788671,RU
1541788672,1541789183,PL
1541789184,1541789695,IR
1541789696,1541790719,UA
@@ -68927,8 +25930,7 @@
1541795584,1541795839,ES
1541795840,1541796863,UA
1541796864,1541797375,RU
-1541797376,1541797887,NL
-1541797888,1541798143,DE
+1541797376,1541798143,GB
1541798144,1541798911,PL
1541798912,1541799935,CZ
1541799936,1541800447,FR
@@ -69100,7 +26102,6 @@
1541885952,1541886975,PL
1541886976,1541887999,UA
1541888000,1541888255,RS
-1541888256,1541888511,RU
1541888512,1541889023,GB
1541889024,1541889535,PL
1541889536,1541890303,RU
@@ -69145,7 +26146,6 @@
1541913088,1541914623,RU
1541914624,1541915647,IL
1541915648,1541916671,RU
-1541916672,1541917695,RO
1541917696,1541917951,CH
1541917952,1541918207,PL
1541918208,1541918463,UA
@@ -69207,7 +26207,6 @@
1541954560,1541955583,RU
1541955584,1541956095,DE
1541956096,1541956351,RO
-1541956352,1541956607,UA
1541956608,1541957119,LB
1541957120,1541957375,PL
1541957376,1541957631,UA
@@ -69220,8 +26219,7 @@
1541960192,1541960703,NL
1541960704,1541961727,UA
1541961728,1541962751,RU
-1541962752,1541963007,GB
-1541963008,1541963263,GB
+1541962752,1541963263,GB
1541963264,1541963519,RU
1541963520,1541964031,UA
1541964288,1541964543,NL
@@ -69241,13 +26239,13 @@
1541974016,1541975551,RU
1541975552,1541975807,TR
1541975808,1541976319,PL
-1541976320,1541977087,UA
+1541976320,1541976575,UA
+1541976576,1541977087,RU
1541977088,1541977343,IT
1541977344,1541977599,GB
1541977600,1541977855,RO
1541977856,1541978111,PL
-1541978112,1541978623,RO
-1541978624,1541978879,MD
+1541978112,1541978879,RO
1541978880,1541979135,FR
1541979136,1541979647,RU
1541979648,1541981183,PL
@@ -69260,7 +26258,8 @@
1541984768,1541985279,RO
1541985280,1541986303,CZ
1541986304,1541986815,RU
-1541986816,1541988351,SK
+1541986816,1541987327,CZ
+1541987328,1541988351,SK
1541988352,1541988607,FR
1541988608,1541988863,RU
1541988864,1541989631,RO
@@ -69292,7 +26291,6 @@
1542000640,1542000895,GB
1542000896,1542001151,UA
1542001152,1542001663,PL
-1542001664,1542001919,MD
1542001920,1542002175,HU
1542002176,1542002687,NL
1542002688,1542002943,RS
@@ -69323,8 +26321,7 @@
1542017792,1542018047,GB
1542018048,1542019071,DE
1542019072,1542019327,RU
-1542019328,1542019583,RO
-1542019584,1542020095,UA
+1542019328,1542020095,UA
1542020096,1542021119,RU
1542021120,1542023167,UA
1542023168,1542023423,PL
@@ -69343,13 +26340,12 @@
1542028800,1542029055,CH
1542029056,1542029311,UA
1542029312,1542029823,GB
-1542029824,1542031359,RU
+1542030336,1542031359,RU
1542031360,1542032383,PL
1542032384,1542032639,UA
1542032640,1542032895,SA
1542032896,1542033407,DK
-1542033408,1542035199,RU
-1542035200,1542035455,UA
+1542033408,1542035455,RU
1542035456,1542036479,GB
1542036480,1542038271,PL
1542038272,1542038527,SI
@@ -69385,7 +26381,8 @@
1542060288,1542060543,RO
1542060544,1542061055,PL
1542061056,1542062079,IT
-1542062080,1542064127,UA
+1542062080,1542063103,UA
+1542063104,1542064127,RU
1542064128,1542064383,PL
1542064384,1542064639,FR
1542064640,1542065151,RU
@@ -69396,7 +26393,7 @@
1542066944,1542067199,BG
1542067200,1542067455,UA
1542067456,1542067711,BG
-1542067712,1542067967,DE
+1542067712,1542067967,US
1542067968,1542068223,GB
1542068224,1542069759,UA
1542069760,1542070015,DE
@@ -69502,7 +26499,7 @@
1542131712,1542134271,PL
1542134272,1542136319,RU
1542136320,1542136831,DE
-1542136832,1542137855,TJ
+1542136832,1542137855,RU
1542137856,1542138367,ES
1542138368,1542138623,RU
1542138624,1542138879,RO
@@ -69568,8 +26565,7 @@
1542172416,1542172671,RU
1542172672,1542173695,KZ
1542173696,1542174207,RU
-1542174208,1542174463,UA
-1542174464,1542174719,CZ
+1542174208,1542174719,CZ
1542174720,1542176767,RU
1542176768,1542177791,PL
1542177792,1542178815,UA
@@ -69586,7 +26582,8 @@
1542183936,1542184191,GB
1542184192,1542184447,RU
1542184448,1542184959,PL
-1542184960,1542185983,UA
+1542184960,1542185471,UA
+1542185472,1542185983,BY
1542185984,1542187007,PL
1542187008,1542187263,DK
1542187264,1542187519,RU
@@ -69595,9 +26592,8 @@
1542188288,1542188543,NL
1542188544,1542189055,PL
1542189056,1542189311,DE
-1542189312,1542189567,TR
1542189568,1542189823,SI
-1542189824,1542190079,GE
+1542189824,1542190079,DE
1542190080,1542191103,RU
1542191104,1542192127,BG
1542192128,1542193407,PL
@@ -69647,14 +26643,11 @@
1542218752,1542220031,RU
1542220032,1542220287,PL
1542220288,1542220799,DE
-1542220800,1542222335,RU
-1542222336,1542222591,UA
-1542222592,1542222847,PK
+1542220800,1542222591,RU
1542222848,1542223103,SE
1542223104,1542223359,GB
1542223360,1542223871,UA
1542223872,1542224127,RU
-1542224128,1542224383,UA
1542224384,1542224639,DE
1542224640,1542224895,DK
1542224896,1542225151,RU
@@ -69682,7 +26675,7 @@
1542236928,1542237183,UA
1542237184,1542238207,PL
1542238208,1542239743,RU
-1542239744,1542239999,EU
+1542239744,1542239999,HU
1542240000,1542240767,RU
1542240768,1542241023,DK
1542241024,1542241279,GB
@@ -69790,7 +26783,6 @@
1542300672,1542301695,UA
1542301696,1542302463,SK
1542302464,1542303231,PL
-1542303232,1542303743,EU
1542303744,1542303999,GB
1542304000,1542304255,FR
1542304256,1542305279,RU
@@ -69824,7 +26816,6 @@
1542320128,1542322175,UA
1542322176,1542322431,RO
1542322432,1542322687,RU
-1542322688,1542322943,UA
1542322944,1542323199,IL
1542323200,1542323711,RU
1542323712,1542324479,IR
@@ -69856,14 +26847,16 @@
1542342656,1542343167,FR
1542343168,1542343679,UA
1542343680,1542344447,PL
-1542344448,1542345471,RU
-1542345472,1542345727,MD
-1542345728,1542345983,RU
+1542344448,1542345215,RU
+1542345216,1542345471,UA
+1542345472,1542345727,RU
+1542345728,1542345983,UA
1542345984,1542346239,PL
1542346240,1542348287,RU
1542348288,1542348799,MD
1542348800,1542349823,RU
-1542349824,1542351359,UA
+1542349824,1542350847,UA
+1542350848,1542351359,CZ
1542351360,1542351615,BG
1542351616,1542351871,PL
1542351872,1542353151,RU
@@ -69878,7 +26871,7 @@
1542357504,1542357759,GB
1542357760,1542358015,FR
1542358016,1542358271,UA
-1542358272,1542358527,RU
+1542358272,1542358527,CZ
1542358528,1542359039,PL
1542359040,1542360319,RU
1542360320,1542360575,NL
@@ -69955,7 +26948,6 @@
1542397952,1542398463,NL
1542398464,1542398975,DE
1542398976,1542399231,PL
-1542399232,1542399487,RU
1542399488,1542399999,DK
1542400000,1542401535,RU
1542401536,1542401791,GB
@@ -69968,7 +26960,7 @@
1542405376,1542405631,PL
1542405632,1542405887,GB
1542405888,1542406143,RU
-1542406144,1542406655,ES
+1542406144,1542406655,NL
1542406656,1542407167,PL
1542407168,1542408191,RU
1542408192,1542408703,GB
@@ -69988,7 +26980,8 @@
1542414336,1542414847,SI
1542414848,1542415359,RU
1542415360,1542415615,DK
-1542415616,1542416383,RU
+1542415616,1542415871,KZ
+1542415872,1542416383,RU
1542416384,1542417407,UA
1542417408,1542418431,IR
1542418432,1542418687,RU
@@ -70000,7 +26993,6 @@
1542422016,1542422527,RU
1542422528,1542422783,RO
1542422784,1542423039,PL
-1542423040,1542423295,RO
1542423296,1542424575,RU
1542424576,1542425599,UA
1542425600,1542426623,RU
@@ -70013,7 +27005,6 @@
1542428416,1542428671,RS
1542428672,1542429695,PL
1542429696,1542429951,GB
-1542429952,1542430207,VG
1542430208,1542430719,RU
1542430720,1542431743,UA
1542431744,1542432767,RO
@@ -70084,7 +27075,7 @@
1542464512,1542464767,RU
1542464768,1542465023,TR
1542465024,1542465535,RU
-1542465536,1542466559,RS
+1542465536,1542466559,XK
1542466560,1542466815,PL
1542466816,1542467071,RU
1542467072,1542467583,PL
@@ -70106,7 +27097,6 @@
1542475776,1542476799,LB
1542476800,1542477823,RU
1542477824,1542478079,DK
-1542478080,1542478335,RU
1542478336,1542478847,UA
1542478848,1542479103,RU
1542479104,1542479359,PL
@@ -70122,10 +27112,11 @@
1542483456,1542484991,RU
1542484992,1542486015,NL
1542486016,1542488319,RU
-1542488320,1542488575,EU
+1542488320,1542488575,DE
1542488576,1542491135,PL
-1542491136,1542492415,RU
-1542492416,1542492671,UA
+1542491136,1542492159,UA
+1542492160,1542492415,RU
+1542492416,1542492671,CZ
1542492672,1542493183,IL
1542493184,1542493439,PS
1542493440,1542494207,RO
@@ -70173,7 +27164,7 @@
1542512640,1542512895,GB
1542512896,1542513151,RU
1542513152,1542513663,GB
-1542513664,1542513919,LU
+1542513664,1542513919,FR
1542513920,1542514175,GB
1542514176,1542514687,IT
1542514688,1542515199,RU
@@ -70228,10 +27219,9 @@
1542541056,1542541311,BE
1542541312,1542542335,UA
1542542336,1542542847,RU
-1542542848,1542543359,IT
+1542542848,1542543359,GB
1542543360,1542544383,RU
1542544384,1542544639,IR
-1542544640,1542544895,UA
1542544896,1542545407,GR
1542545408,1542586367,UA
1542586368,1542594559,AZ
@@ -70256,7 +27246,7 @@
1542640896,1542641151,RU
1542641152,1542641663,IN
1542641664,1542641919,RO
-1542641920,1542642175,OM
+1542641920,1542642175,AE
1542642176,1542642431,PL
1542642432,1542642687,RU
1542642688,1542643199,PL
@@ -70346,7 +27336,7 @@
1542839296,1542839551,DE
1542839552,1542839807,UA
1542839808,1542840063,CY
-1542840064,1542848511,UA
+1542840064,1542840319,UA
1542848512,1542849535,RU
1542849536,1542850559,UA
1542850560,1542851583,GB
@@ -70403,21 +27393,36 @@
1542979584,1543110655,DE
1543110656,1543127039,UA
1543127040,1543143423,DE
-1543143424,1543241727,RO
+1543143424,1543167999,RO
+1543168000,1543172095,MD
+1543172096,1543241727,RO
1543241728,1543503871,IT
1543503872,1545601023,GB
-1545601024,1545673167,SE
-1545673168,1545673175,FI
-1545673176,1545673183,SE
-1545673184,1545673215,FI
-1545673216,1545674495,SE
+1545601024,1545674495,SE
1545674496,1545674751,FI
1545674752,1545863167,SE
1545863168,1545895935,RU
1545895936,1545928703,BA
1545928704,1545961471,SI
1545961472,1545994239,RU
-1545994240,1546027007,CZ
+1545994240,1545995263,CZ
+1545995264,1545995519,RU
+1545995520,1545996287,CZ
+1545996288,1545998335,RU
+1545998336,1546000383,CZ
+1546000384,1546001407,UZ
+1546001408,1546002943,RU
+1546002944,1546003199,UA
+1546003200,1546003455,RU
+1546003456,1546004479,CZ
+1546004480,1546004735,UA
+1546004736,1546005247,CZ
+1546005248,1546006527,RU
+1546006528,1546008575,UA
+1546008576,1546010623,BY
+1546010624,1546014719,CZ
+1546014720,1546015743,RU
+1546015744,1546027007,CZ
1546027008,1546059775,RU
1546059776,1546063871,SE
1546063872,1546067967,DE
@@ -70426,48 +27431,20 @@
1546076160,1546080255,RU
1546080256,1546084351,AZ
1546084352,1546088447,RU
-1546088448,1546088575,SN
-1546088576,1546088703,TM
-1546088704,1546088831,BA
-1546088832,1546088959,TJ
-1546088960,1546089087,GB
-1546089088,1546089215,DE
-1546089216,1546089343,MW
-1546089344,1546089471,ZW
-1546089472,1546089599,BI
-1546089600,1546089727,GW
-1546089728,1546089855,LS
-1546089856,1546089983,NE
-1546089984,1546090111,DE
-1546090112,1546090239,MR
-1546090240,1546090367,ZM
-1546090368,1546090495,MG
-1546090496,1546090623,BW
-1546090624,1546090751,GH
-1546090752,1546090879,ER
-1546090880,1546091007,AO
-1546091008,1546091135,NA
-1546091136,1546091263,KM
-1546091264,1546091391,GN
-1546091392,1546091519,HT
-1546091520,1546091647,AF
-1546091648,1546091775,TD
-1546091776,1546091903,BF
-1546091904,1546092031,RW
-1546092032,1546092159,TG
-1546092160,1546092287,SD
-1546092288,1546092415,RW
-1546092416,1546092543,NG
+1546088448,1546092543,GB
1546092544,1546096639,RU
1546096640,1546100735,IT
1546100736,1546104831,AT
1546104832,1546108927,IE
1546108928,1546113023,IM
1546113024,1546121215,RU
-1546121216,1546121727,FR
-1546121728,1546121983,IT
-1546121984,1546124799,ES
-1546124800,1546125311,FR
+1546121216,1546121855,FR
+1546121856,1546121856,IT
+1546121857,1546121983,FR
+1546121984,1546121987,ES
+1546121988,1546122649,FR
+1546122650,1546122650,PT
+1546122651,1546125311,FR
1546125312,1546256383,GB
1546256384,1546264575,RU
1546264576,1546266623,TR
@@ -70498,23 +27475,19 @@
1546317824,1546319871,CH
1546319872,1546321919,RS
1546321920,1546323967,RU
-1546323968,1546325503,GE
-1546325504,1546326015,SE
+1546323968,1546326015,NO
1546326016,1546328063,ES
1546328064,1546330111,CZ
1546330112,1546332159,SE
1546332160,1546334207,GB
-1546334208,1546335743,DE
-1546335744,1546336255,GB
+1546334208,1546336255,DE
1546336256,1546338303,CZ
1546338304,1546340351,GB
1546340352,1546342399,DK
1546342400,1546344447,TR
1546344448,1546346495,DK
1546346496,1546348543,AT
-1546348544,1546350399,DE
-1546350400,1546350431,JP
-1546350432,1546350591,DE
+1546348544,1546350591,DE
1546350592,1546352639,PL
1546352640,1546354687,DK
1546354688,1546356735,FR
@@ -70531,53 +27504,30 @@
1546379264,1546381311,ES
1546381312,1546383359,DK
1546383360,1546385407,IT
-1546385408,1546385471,FR
-1546385472,1546385479,DE
-1546385480,1546385487,IT
-1546385488,1546385495,ES
-1546385496,1546385535,FR
-1546385536,1546385599,US
-1546385600,1546387455,FR
-1546387456,1546460960,TR
-1546460961,1546460967,NL
-1546460968,1546518527,TR
+1546385408,1546387455,FR
+1546387456,1546518527,TR
1546518528,1546649599,KZ
1546649600,1546665983,SA
-1546665984,1546673823,GB
-1546673824,1546673839,RS
-1546673840,1546678863,GB
-1546678864,1546678871,RS
-1546678872,1546679839,GB
+1546665984,1546679839,GB
1546679840,1546679840,HR
-1546679841,1546680831,GB
-1546680832,1546680895,RS
-1546680896,1546681407,GB
-1546681408,1546681439,RS
-1546681440,1546681455,GB
-1546681456,1546681471,RS
-1546681472,1546682367,GB
+1546679841,1546682367,GB
1546682368,1546698751,BE
1546698752,1546715135,NL
1546715136,1546731519,LV
-1546731520,1546733567,RE
-1546733568,1546734079,FR
-1546734080,1546734591,RE
-1546734592,1546735103,FR
+1546731520,1546731775,RE
+1546731776,1546735103,FR
1546735104,1546735359,RE
1546735360,1546739711,FR
1546739712,1546739967,GP
-1546739968,1546740223,FR
-1546740224,1546741503,GP
-1546741504,1546742271,FR
-1546742272,1546742527,MQ
-1546742528,1546742783,FR
-1546742784,1546743039,GF
-1546743040,1546743551,FR
+1546739968,1546741503,FR
+1546741504,1546742015,GP
+1546742016,1546742527,FR
+1546742528,1546743295,GF
+1546743296,1546743551,FR
1546743552,1546743807,GF
-1546743808,1546744319,FR
-1546744320,1546744831,MQ
-1546744832,1546747647,FR
-1546747648,1546747903,MQ
+1546743808,1546745087,FR
+1546745088,1546745855,MQ
+1546745856,1546747903,FR
1546747904,1546764287,RU
1546764288,1546780671,UA
1546780672,1546797055,IR
@@ -70587,9 +27537,7 @@
1546878976,1546895359,DE
1546895360,1546911743,IE
1546911744,1546928127,SK
-1546928128,1546929407,GB
-1546929408,1546929415,A2
-1546929416,1546944511,GB
+1546928128,1546944511,GB
1546944512,1546960895,UA
1546960896,1546977279,HU
1546977280,1546993663,MK
@@ -70614,13 +27562,7 @@
1547448320,1547452415,SK
1547452416,1547456511,IT
1547456512,1547460607,RU
-1547460608,1547465727,GB
-1547465728,1547465983,ES
-1547465984,1547467775,GB
-1547467776,1547468031,ES
-1547468032,1547468287,GB
-1547468288,1547468543,ES
-1547468544,1547468799,GB
+1547460608,1547468799,GB
1547468800,1547472895,PL
1547472896,1547476991,DK
1547476992,1547481087,ES
@@ -70638,26 +27580,16 @@
1547522048,1547526143,CZ
1547526144,1547534335,HU
1547534336,1547538431,FR
-1547538432,1547542527,EU
1547542528,1547546623,FR
1547546624,1547550719,IR
1547550720,1547554815,IE
-1547554816,1547555078,AT
-1547555079,1547555079,EU
-1547555080,1547558911,AT
+1547554816,1547555071,AT
+1547555072,1547555078,DE
+1547555079,1547555079,AT
+1547555080,1547555327,DE
+1547555328,1547558911,AT
1547558912,1547563007,IL
-1547563008,1547564287,NL
-1547564288,1547564311,CH
-1547564312,1547564315,BG
-1547564316,1547564335,NL
-1547564336,1547564351,US
-1547564352,1547564415,CY
-1547564416,1547564439,NZ
-1547564440,1547564543,NL
-1547564544,1547564799,US
-1547564800,1547564831,NL
-1547564832,1547564863,LV
-1547564864,1547565311,NL
+1547563008,1547565311,NL
1547565312,1547565823,US
1547565824,1547567103,NL
1547567104,1547571199,GB
@@ -70673,111 +27605,39 @@
1547608064,1547612159,LB
1547612160,1547616255,IR
1547616256,1547620351,DK
-1547620352,1547620359,A2
-1547620360,1547620367,NG
-1547620368,1547620375,A2
-1547620376,1547620391,NG
-1547620392,1547620399,A2
+1547620352,1547620375,JE
+1547620376,1547620383,NG
+1547620384,1547620399,JE
1547620400,1547620407,NG
-1547620408,1547620415,A2
-1547620416,1547620423,NG
-1547620424,1547620439,A2
-1547620440,1547620551,NG
-1547620552,1547620559,A2
-1547620560,1547620615,NG
-1547620616,1547620639,A2
-1547620640,1547620647,NG
-1547620648,1547620863,A2
-1547620864,1547620871,NG
-1547620872,1547620879,A2
-1547620880,1547620887,NG
-1547620888,1547620895,A2
-1547620896,1547620903,NG
-1547620904,1547620911,A2
-1547620912,1547620935,NG
-1547620936,1547620951,A2
-1547620952,1547620959,NG
-1547620960,1547620967,A2
-1547620968,1547620991,NG
-1547620992,1547620999,A2
-1547621000,1547621031,NG
-1547621032,1547621039,A2
-1547621040,1547621063,NG
-1547621064,1547621071,A2
-1547621072,1547621087,NG
-1547621088,1547621095,A2
-1547621096,1547621135,NG
-1547621136,1547621143,A2
-1547621144,1547621151,NG
-1547621152,1547621167,A2
-1547621168,1547621191,NG
-1547621192,1547621199,A2
-1547621200,1547621207,NG
-1547621208,1547621215,US
+1547620408,1547620599,JE
+1547620600,1547620607,NG
+1547620608,1547620919,JE
+1547620920,1547620927,NG
+1547620928,1547621015,JE
+1547621016,1547621023,NG
+1547621024,1547621047,JE
+1547621048,1547621055,NG
+1547621056,1547621183,JE
+1547621184,1547621191,NG
+1547621192,1547621215,JE
1547621216,1547621223,NG
-1547621224,1547621231,A2
+1547621224,1547621231,JE
1547621232,1547621239,NG
-1547621240,1547621247,A2
-1547621248,1547621263,NG
-1547621264,1547621271,A2
+1547621240,1547621255,JE
+1547621256,1547621263,NG
+1547621264,1547621271,JE
1547621272,1547621279,NG
-1547621280,1547621303,A2
-1547621304,1547621335,NG
-1547621336,1547621351,A2
-1547621352,1547621375,NG
-1547621376,1547621447,A2
+1547621280,1547621447,JE
1547621448,1547621455,NG
-1547621456,1547621463,A2
+1547621456,1547621463,JE
1547621464,1547621471,NG
-1547621472,1547621575,A2
-1547621576,1547621583,NG
-1547621584,1547621615,A2
-1547621616,1547621623,NG
-1547621624,1547621687,A2
-1547621688,1547621711,NG
-1547621712,1547622407,A2
-1547622408,1547622415,NG
-1547622416,1547622455,A2
-1547622456,1547622471,NG
-1547622472,1547622511,A2
-1547622512,1547622519,NG
-1547622520,1547622527,GB
-1547622528,1547622559,A2
-1547622560,1547622575,NG
-1547622576,1547622583,A2
-1547622584,1547622615,NG
-1547622616,1547622623,A2
-1547622624,1547622631,NG
-1547622632,1547622911,A2
-1547622912,1547622935,NG
-1547622936,1547622943,A2
-1547622944,1547622951,US
-1547622952,1547622959,NG
-1547622960,1547622967,A2
-1547622968,1547622983,NG
-1547622984,1547622991,A2
-1547622992,1547623015,NG
-1547623016,1547623031,A2
-1547623032,1547623039,NG
-1547623040,1547623047,A2
-1547623048,1547623071,NG
-1547623072,1547623103,A2
-1547623104,1547623159,NG
-1547623160,1547623167,A2
+1547621472,1547622919,JE
+1547622920,1547622935,NG
+1547622936,1547623167,JE
1547623168,1547623423,NG
-1547623424,1547623455,US
-1547623456,1547623463,NG
-1547623464,1547623479,A2
+1547623424,1547623479,JE
1547623480,1547623487,NG
-1547623488,1547623495,A2
-1547623496,1547623519,NG
-1547623520,1547623527,A2
-1547623528,1547623559,NG
-1547623560,1547623567,A2
-1547623568,1547623615,NG
-1547623616,1547623727,A2
-1547623728,1547623735,NG
-1547623736,1547624447,A2
+1547623488,1547624447,JE
1547624448,1547628543,CZ
1547628544,1547632639,BG
1547632640,1547636735,TR
@@ -70787,53 +27647,46 @@
1547649024,1547653119,RU
1547653120,1547657215,LV
1547657216,1547661311,RU
-1547661312,1547665407,LV
+1547661312,1547665407,ES
1547665408,1547669503,GB
-1547669504,1547672575,AT
-1547672576,1547673087,HR
-1547673088,1547673599,AT
+1547669504,1547673599,AT
1547673600,1547677695,NL
1547677696,1547685887,RU
1547685888,1547689983,AT
1547689984,1547694079,IT
1547694080,1547698175,HU
-1547698176,1547699359,NL
-1547699360,1547699391,GB
-1547699392,1547777119,NL
-1547777120,1547777127,IT
-1547777128,1547846143,NL
-1547846144,1547846335,FR
-1547846336,1548157119,NL
-1548157120,1548157183,DE
-1548157184,1548157951,NL
-1548157952,1548158207,SE
-1548158208,1548158599,NL
+1547698176,1548130303,NL
+1548130304,1548130559,BE
+1548130560,1548158599,NL
1548158600,1548158607,GB
-1548158608,1548158623,NL
-1548158624,1548158639,DE
-1548158640,1548158647,NL
-1548158648,1548158663,GB
-1548158664,1548158671,DE
-1548158672,1548158695,NL
-1548158696,1548158703,GB
-1548158704,1548158719,NL
-1548158720,1548159103,DE
-1548159104,1548159231,NL
-1548159232,1548159487,ES
+1548158608,1548159231,NL
+1548159232,1548159235,ES
+1548159236,1548159487,NL
1548159488,1548159999,GB
-1548160000,1548160535,NL
-1548160536,1548160543,GB
-1548160544,1548160559,BE
-1548160560,1548160639,NL
-1548160640,1548160767,BE
-1548160768,1548161279,NL
-1548161280,1548161295,FR
-1548161296,1548161311,CH
-1548161312,1548161535,NL
-1548161536,1548161791,GB
-1548161792,1548162351,NL
-1548162352,1548162359,DE
-1548162360,1548222463,NL
+1548160000,1548160255,NL
+1548160256,1548160511,PL
+1548160512,1548169215,NL
+1548169216,1548171263,DE
+1548171264,1548172287,FR
+1548172288,1548173311,GB
+1548173312,1548174335,BE
+1548174336,1548174847,LU
+1548174848,1548175359,IE
+1548175360,1548175871,ES
+1548175872,1548176383,PT
+1548176384,1548176895,IT
+1548176896,1548177407,CH
+1548177408,1548177919,AT
+1548177920,1548178431,PL
+1548178432,1548178943,DK
+1548178944,1548179455,NO
+1548179456,1548179967,SE
+1548179968,1548180479,FI
+1548180480,1548180991,SK
+1548180992,1548181503,TR
+1548181504,1548182015,US
+1548182016,1548182527,HK
+1548182528,1548222463,NL
1548222464,1548746751,DE
1548746752,1549271039,RO
1549271040,1549795327,FR
@@ -70843,104 +27696,124 @@
1550319616,1550581759,CH
1550581760,1550843903,NL
1550843904,1550974975,UA
-1550974976,1550975231,MD
-1550975232,1551007743,RO
+1550974976,1551007743,RO
1551007744,1551106047,MD
1551106048,1551237119,DE
1551237120,1551368191,GR
1551368192,1551499263,NL
-1551499264,1551503359,EU
1551503360,1551504383,GB
1551504384,1551505407,FR
-1551505408,1551507455,EU
1551507456,1551508479,DE
1551508480,1551509503,IT
-1551509504,1551516671,EU
1551516672,1551517695,IT
1551517696,1551518719,ES
-1551518720,1551528959,EU
1551528960,1551529983,FR
-1551529984,1551544319,EU
1551544320,1551547391,DE
-1551547392,1551548415,EU
1551548416,1551551487,DE
-1551551488,1551556607,EU
1551556608,1551558655,FR
-1551558656,1551560703,EU
1551560704,1551561727,DE
1551561728,1551562751,FR
-1551562752,1551564799,EU
1551564800,1551572991,FR
-1551572992,1551577087,EU
1551577088,1551580159,NL
-1551580160,1551604479,EU
1551604480,1551604735,SE
-1551604736,1551630335,EU
1551630336,1551892479,RU
-1551892480,1553989631,FR
-1553989632,1553991167,MQ
-1553991168,1553991423,FR
-1553991424,1553992959,MQ
-1553992960,1553993215,FR
-1553993216,1553994495,MQ
-1553994496,1553994751,FR
-1553994752,1553997055,MQ
-1553997056,1553997311,FR
-1553997312,1553997823,MQ
-1553997824,1553998079,FR
-1553998080,1554000895,MQ
-1554000896,1554001919,FR
-1554001920,1554002687,MQ
-1554002688,1554002943,FR
-1554002944,1554005247,MQ
+1551892480,1553989887,FR
+1553989888,1553990911,MQ
+1553990912,1553991167,FR
+1553991168,1553992703,MQ
+1553992704,1553993215,FR
+1553993216,1553996031,MQ
+1553996032,1553996543,FR
+1553996544,1553997311,MQ
+1553997312,1553997567,FR
+1553997568,1554001407,MQ
+1554001408,1554001663,FR
+1554001664,1554001919,MQ
+1554001920,1554002175,FR
+1554002176,1554005247,MQ
1554005248,1554005503,FR
1554005504,1554006015,MQ
-1554006016,1554006271,FR
-1554006272,1554007039,GP
-1554007040,1554007295,FR
-1554007296,1554008063,GP
-1554008064,1554008831,FR
-1554008832,1554013183,GP
-1554013184,1554013439,FR
-1554013440,1554017279,GP
-1554017280,1554017535,FR
-1554017536,1554018303,GP
-1554018304,1554018815,FR
-1554018816,1554022143,GP
-1554022144,1554022399,FR
-1554022400,1554023167,GP
-1554023168,1554023423,FR
-1554023424,1554030591,GP
-1554030592,1554031359,MQ
-1554031360,1554031871,FR
-1554031872,1554032383,MQ
+1554006016,1554006783,GP
+1554006784,1554007295,FR
+1554007296,1554007807,GP
+1554007808,1554008063,FR
+1554008064,1554009343,GP
+1554009344,1554009855,FR
+1554009856,1554011647,GP
+1554011648,1554011903,FR
+1554011904,1554013695,GP
+1554013696,1554014207,FR
+1554014208,1554015231,GP
+1554015232,1554015487,FR
+1554015488,1554016767,GP
+1554016768,1554017279,FR
+1554017280,1554018047,GP
+1554018048,1554018303,FR
+1554018304,1554019583,GP
+1554019584,1554019839,FR
+1554019840,1554021119,GP
+1554021120,1554021375,FR
+1554021376,1554021887,GP
+1554021888,1554022399,FR
+1554022400,1554023423,GP
+1554023424,1554023679,FR
+1554023680,1554024959,GP
+1554024960,1554025215,FR
+1554025216,1554025471,GP
+1554025472,1554025727,FR
+1554025728,1554026751,GP
+1554026752,1554027007,FR
+1554027008,1554027519,GP
+1554027520,1554027775,FR
+1554027776,1554029055,GP
+1554029056,1554029311,FR
+1554029312,1554030079,GP
+1554030080,1554030335,FR
+1554030336,1554030591,GP
+1554030592,1554031615,MQ
+1554031616,1554032127,FR
+1554032128,1554032383,MQ
1554032384,1554032639,FR
-1554032640,1554034431,MQ
-1554034432,1554034687,FR
-1554034688,1554036735,MQ
-1554036736,1554036991,FR
-1554036992,1554038015,MQ
-1554038016,1554038271,FR
-1554038272,1554038783,MQ
+1554032640,1554035455,MQ
+1554035456,1554035967,FR
+1554035968,1554037503,MQ
+1554037504,1554037759,FR
+1554037760,1554038271,MQ
+1554038272,1554038783,FR
1554038784,1554039295,RE
-1554039296,1554039551,FR
-1554039552,1554039807,RE
-1554039808,1554040063,FR
-1554040064,1554044671,RE
-1554044672,1554044927,FR
-1554044928,1554046719,RE
-1554046720,1554046975,FR
-1554046976,1554049791,RE
-1554049792,1554050047,FR
-1554050048,1554054911,RE
-1554054912,1556086783,FR
-1556086784,1556491204,DE
-1556491205,1556491205,EU
-1556491206,1556493903,DE
-1556493904,1556493911,A2
-1556493912,1558708223,DE
-1558708224,1559232511,GB
-1559232512,1559240703,IL
+1554039296,1554039807,FR
+1554039808,1554040063,RE
+1554040064,1554040319,FR
+1554040320,1554041343,RE
+1554041344,1554041599,FR
+1554041600,1554042367,RE
+1554042368,1554042879,FR
+1554042880,1554043903,RE
+1554043904,1554044159,FR
+1554044160,1554046463,RE
+1554046464,1554046719,FR
+1554046720,1554047231,RE
+1554047232,1554048255,FR
+1554048256,1554048767,RE
+1554048768,1554049279,FR
+1554049280,1554049535,RE
+1554049536,1554049791,FR
+1554049792,1554052351,RE
+1554052352,1554052607,FR
+1554052608,1554053887,RE
+1554053888,1554054143,FR
+1554054144,1554054655,RE
+1554054656,1556086783,FR
+1556086784,1557921791,DE
+1557921792,1558052863,NO
+1558052864,1558118399,FR
+1558118400,1558119423,DE
+1558119424,1558122495,RU
+1558122496,1558151167,AT
+1558151168,1558183935,IT
+1558183936,1558708223,DE
+1558708224,1559236607,GB
+1559236608,1559240703,IL
1559240704,1559248895,BA
1559248896,1559257087,LV
1559257088,1559265279,UA
@@ -70949,24 +27822,17 @@
1559271424,1559273471,FI
1559273472,1559281663,CZ
1559281664,1559289855,RU
-1559289856,1559297535,SK
-1559297536,1559297599,AT
-1559297600,1559298047,SK
+1559289856,1559298047,SK
1559298048,1559306239,RU
1559306240,1559314431,JO
1559314432,1559322623,GE
1559322624,1559330815,RU
1559330816,1559339007,BA
-1559339008,1559339743,RU
-1559339744,1559339775,MH
-1559339776,1559341695,RU
-1559341696,1559341703,ES
-1559341704,1559347199,RU
+1559339008,1559347199,RU
1559347200,1559355391,SE
1559355392,1559388159,RU
1559388160,1559396351,UA
1559396352,1559404543,GB
-1559404544,1559412735,FI
1559412736,1559420927,IR
1559420928,1559429119,HR
1559429120,1559437311,FR
@@ -70994,26 +27860,33 @@
1559617536,1559625727,GB
1559625728,1559633919,DK
1559633920,1559642111,IT
-1559642112,1559650303,RU
1559650304,1559658495,IT
1559658496,1559683071,RU
1559683072,1559691263,CH
1559691264,1559756799,BG
1559756800,1559789567,AT
-1559789568,1559838719,RU
+1559789568,1559822335,RU
1559838720,1559855103,UA
1559855104,1559887871,HU
1559887872,1559920639,PT
1559920640,1559924693,LU
1559924694,1559924694,GB
1559924695,1559932927,LU
-1559932928,1559953407,DE
+1559932928,1559943167,DE
+1559943168,1559944191,LU
+1559944192,1559945727,FR
+1559945728,1559946751,LU
+1559946752,1559950335,DE
+1559950336,1559950847,LU
+1559950848,1559953407,DE
1559953408,1559986175,MT
1559986176,1560018943,IE
1560018944,1560051711,DE
1560051712,1560084479,RU
1560084480,1560117247,JO
-1560117248,1560150015,CZ
+1560117248,1560133631,CZ
+1560133632,1560137727,RU
+1560137728,1560150015,CZ
1560150016,1560182783,NL
1560182784,1560215551,SE
1560215552,1560281087,RU
@@ -71042,9 +27915,7 @@
1566121984,1566126079,NO
1566126080,1566130175,IT
1566130176,1566134271,TR
-1566134272,1566134999,GB
-1566135000,1566135007,ES
-1566135008,1566138367,GB
+1566134272,1566138367,GB
1566138368,1566142463,CZ
1566142464,1566146559,NO
1566146560,1566150655,GB
@@ -71053,37 +27924,25 @@
1566158848,1566162943,RU
1566162944,1566167039,PL
1566167040,1566171135,UA
-1566171136,1566175230,CY
-1566175231,1566175231,TR
+1566171136,1566175231,CY
1566175232,1566179327,IE
1566179328,1566183423,DK
1566183424,1566187519,ES
1566187520,1566191615,RU
1566191616,1566195711,FI
-1566195712,1566199807,AL
1566199808,1566207999,RU
1566208000,1566212095,DK
1566212096,1566216191,DE
1566216192,1566220287,SE
1566220288,1566224383,CZ
-1566224384,1566226175,DE
-1566226176,1566226239,NL
-1566226240,1566226303,DE
-1566226304,1566226335,NL
-1566226336,1566226343,DE
-1566226344,1566226367,NL
-1566226368,1566228479,DE
+1566224384,1566228479,DE
1566228480,1566232575,GB
1566232576,1566248959,RU
1566248960,1566257151,GB
1566257152,1566261247,CZ
1566261248,1566265343,TR
-1566265344,1566266367,US
-1566266368,1566269439,A2
-1566269440,1566271487,NO
-1566271488,1566271999,FI
-1566272000,1566272511,SE
-1566272512,1566273535,NO
+1566265344,1566269439,DE
+1566269440,1566273535,NO
1566273536,1566277631,RU
1566277632,1566281727,IT
1566281728,1566285823,CZ
@@ -71098,12 +27957,7 @@
1566314496,1566316543,BE
1566316544,1566318591,NL
1566318592,1566320639,RU
-1566320640,1566321151,DE
-1566321152,1566321407,NL
-1566321408,1566321663,UA
-1566321664,1566321919,BZ
-1566321920,1566322431,GB
-1566322432,1566322687,BS
+1566320640,1566322687,DE
1566322688,1566324735,CZ
1566324736,1566326783,HU
1566326784,1566328831,RU
@@ -71116,10 +27970,7 @@
1566343168,1566345215,DE
1566345216,1566347263,RU
1566347264,1566349311,DE
-1566349312,1566350591,IT
-1566350592,1566350719,US
-1566350720,1566350847,GB
-1566350848,1566351359,IT
+1566349312,1566351359,IT
1566351360,1566353407,AT
1566353408,1566355455,ES
1566355456,1566357503,RU
@@ -71136,90 +27987,23 @@
1566382080,1566384127,TR
1566384128,1566386175,CZ
1566386176,1566388223,FR
-1566388224,1566388479,HK
-1566388480,1566388991,HU
-1566388992,1566389247,SC
-1566389248,1566389503,HU
-1566389504,1566389759,SC
-1566389760,1566390271,US
+1566388224,1566390271,LU
1566390272,1566392319,LT
1566392320,1566394367,ES
-1566394368,1566394529,NO
-1566394530,1566394534,DK
-1566394535,1566396175,NO
-1566396176,1566396191,NL
-1566396192,1566396415,NO
-1566396416,1566396927,GB
-1566396928,1566397183,GI
-1566397184,1566397439,MT
-1566397440,1566398463,GB
+1566394368,1566394528,NO
+1566394529,1566394529,FR
+1566394530,1566394530,NO
+1566394531,1566394531,DE
+1566394532,1566394532,PL
+1566394533,1566394533,NL
+1566394534,1566394534,SE
+1566394535,1566394535,PT
+1566394536,1566394538,NO
+1566394539,1566394539,RU
+1566394540,1566396415,NO
+1566396416,1566398463,GB
1566398464,1566400511,RU
-1566400512,1566400575,NO
-1566400576,1566400583,GB
-1566400584,1566400607,NO
-1566400608,1566400639,GB
-1566400640,1566400671,NO
-1566400672,1566400703,DE
-1566400704,1566400735,NL
-1566400736,1566400859,NO
-1566400860,1566400863,NL
-1566400864,1566400871,GB
-1566400872,1566400903,NO
-1566400904,1566400907,DE
-1566400908,1566400911,GB
-1566400912,1566400915,GE
-1566400916,1566400919,NO
-1566400920,1566400923,NE
-1566400924,1566400943,NO
-1566400944,1566400955,NE
-1566400956,1566400967,NO
-1566400968,1566400979,GB
-1566400980,1566400983,GE
-1566400984,1566400987,NE
-1566400988,1566401023,NO
-1566401024,1566401247,US
-1566401248,1566401279,FR
-1566401280,1566401327,US
-1566401328,1566401343,NO
-1566401344,1566401376,US
-1566401377,1566401399,NO
-1566401400,1566401463,US
-1566401464,1566401467,NO
-1566401468,1566401483,US
-1566401484,1566401487,HK
-1566401488,1566401491,NO
-1566401492,1566401499,US
-1566401500,1566401503,NO
-1566401504,1566401535,US
-1566401536,1566401599,IN
-1566401600,1566401663,HK
-1566401664,1566401727,SG
-1566401728,1566401791,NO
-1566401792,1566401856,SI
-1566401857,1566401887,NO
-1566401888,1566401919,US
-1566401920,1566401951,NO
-1566401952,1566401967,GB
-1566401968,1566401975,HK
-1566401976,1566401987,AU
-1566401988,1566401991,HK
-1566401992,1566401999,SG
-1566402000,1566402003,AU
-1566402004,1566402007,NO
-1566402008,1566402011,AU
-1566402012,1566402035,HK
-1566402036,1566402111,NO
-1566402112,1566402143,HK
-1566402144,1566402175,NL
-1566402176,1566402199,US
-1566402200,1566402207,NO
-1566402208,1566402215,US
-1566402216,1566402223,NO
-1566402224,1566402239,US
-1566402240,1566402255,NO
-1566402256,1566402303,US
-1566402304,1566402559,NO
-1566402560,1566404607,IQ
+1566400512,1566402559,NO
1566404608,1566406655,ES
1566406656,1566408703,NL
1566408704,1566410751,GB
@@ -71238,39 +28022,20 @@
1566443520,1566445567,NO
1566445568,1566447615,PL
1566447616,1566451711,IT
-1566451712,1566452223,IL
-1566452224,1566452479,TR
-1566452480,1566453759,IL
+1566451712,1566453759,IL
1566453760,1566455807,IQ
-1566455808,1566456351,PT
-1566456352,1566456359,AO
-1566456360,1566457855,PT
+1566455808,1566457855,PT
1566457856,1566459903,CH
1566459904,1566461951,GB
1566461952,1566463999,DE
1566464000,1566466047,IT
1566466048,1566468095,ES
-1566468096,1566468879,BE
-1566468880,1566468895,HU
-1566468896,1566469391,BE
-1566469392,1566469407,HU
-1566469408,1566470143,BE
-1566470144,1566470165,IE
-1566470166,1566470167,GB
-1566470168,1566470351,IE
-1566470352,1566470367,GB
-1566470368,1566471755,IE
-1566471756,1566471757,GB
-1566471758,1566471783,IE
-1566471784,1566471791,GB
-1566471792,1566472005,IE
-1566472006,1566472007,GB
-1566472008,1566472051,IE
-1566472052,1566472053,GB
-1566472054,1566472117,IE
-1566472118,1566472119,GB
-1566472120,1566472191,IE
-1566472192,1566474239,GB
+1566468096,1566470143,BE
+1566470144,1566471007,GB
+1566471008,1566471011,IE
+1566471012,1566471143,GB
+1566471144,1566471147,IE
+1566471148,1566474239,GB
1566474240,1566476287,DE
1566476288,1566478335,BG
1566478336,1566482431,RU
@@ -71311,7 +28076,9 @@
1566556160,1566558207,RU
1566558208,1566560255,JO
1566560256,1566560767,IT
-1566560768,1566561023,SM
+1566560768,1566561015,SM
+1566561016,1566561017,IT
+1566561018,1566561023,SM
1566561024,1566564351,IT
1566564352,1566566399,IS
1566566400,1566568447,FR
@@ -71319,11 +28086,7 @@
1566570496,1566572543,NL
1566572544,1566703615,GB
1566703616,1566769151,SA
-1566769152,1566773759,CZ
-1566773760,1566774015,SK
-1566774016,1566793215,CZ
-1566793216,1566793471,SK
-1566793472,1566834687,CZ
+1566769152,1566834687,CZ
1566834688,1566900223,RU
1566900224,1566965759,IT
1566965760,1567031295,PT
@@ -71338,81 +28101,138 @@
1567555584,1567621119,AT
1567621120,1567696383,RO
1567696384,1567696895,MD
-1567696896,1567705087,RO
-1567705088,1567707135,MD
-1567707136,1567712767,RO
-1567712768,1567713279,DE
-1567713280,1567715327,RO
+1567696896,1567703039,RO
+1567703040,1567707391,MD
+1567707392,1567707647,RO
+1567707648,1567707903,MD
+1567707904,1567708671,RO
+1567708672,1567709183,MD
+1567709184,1567710207,RO
+1567710208,1567711231,MD
+1567711232,1567715327,RO
1567715328,1567717375,MD
-1567717376,1567719935,RO
-1567719936,1567720191,GB
-1567720192,1567750655,RO
-1567750656,1567751167,SE
-1567751168,1567752191,RO
+1567717376,1567742975,RO
+1567742976,1567743487,MD
+1567743488,1567749119,RO
+1567749120,1567750143,MD
+1567750144,1567752191,RO
1567752192,1567756287,MD
-1567756288,1567763521,RO
-1567763522,1567763522,EU
-1567763523,1567763542,RO
-1567763543,1567763543,EU
-1567763544,1567775743,RO
+1567756288,1567775743,RO
1567775744,1567776767,MD
-1567776768,1567785983,RO
-1567785984,1567786239,MD
-1567786240,1567830015,RO
+1567776768,1567830015,RO
1567830016,1567831039,MD
-1567831040,1567840255,RO
-1567840256,1567842303,DE
-1567842304,1567880191,RO
+1567831040,1567852543,RO
+1567852544,1567854591,MD
+1567854592,1567875071,RO
+1567875072,1567879167,MD
+1567879168,1567880191,RO
1567880192,1567881215,SE
1567881216,1567883263,RO
1567883264,1567948799,MD
-1567948800,1568026623,RO
+1567948800,1567961087,RO
+1567961088,1567965183,MD
+1567965184,1567966207,RO
+1567966208,1567969279,MD
+1567969280,1567981567,RO
+1567981568,1567983615,MD
+1567983616,1567984639,RO
+1567984640,1567987711,MD
+1567987712,1567988735,RO
+1567988736,1567992831,MD
+1567992832,1567997951,RO
+1567997952,1568014335,NL
+1568014336,1568026623,RO
1568026624,1568030719,MD
-1568030720,1568083967,RO
+1568030720,1568059391,RO
+1568059392,1568063487,MD
+1568063488,1568083967,RO
1568083968,1568086015,MD
-1568086016,1568178175,RO
+1568086016,1568104447,RO
+1568104448,1568106495,MD
+1568106496,1568107519,RO
+1568107520,1568108543,MD
+1568108544,1568112639,RO
+1568112640,1568114687,MD
+1568114688,1568115711,RO
+1568115712,1568118783,MD
+1568118784,1568120831,RO
+1568120832,1568122879,MD
+1568122880,1568130047,RO
+1568130048,1568133119,MD
+1568133120,1568138239,RO
+1568138240,1568141311,MD
+1568141312,1568178175,RO
1568178176,1568210943,RU
1568210944,1568243711,GB
-1568243712,1568245759,GP
-1568245760,1568246527,GF
+1568243712,1568243967,FR
+1568243968,1568244735,GP
+1568244736,1568244991,FR
+1568244992,1568245759,GP
+1568245760,1568246271,FR
+1568246272,1568246527,GF
1568246528,1568247039,GP
-1568247040,1568247551,GF
-1568247552,1568248831,GP
+1568247040,1568247295,FR
+1568247296,1568247551,GF
+1568247552,1568247807,MF
+1568247808,1568248063,FR
+1568248064,1568248831,GP
1568248832,1568249087,MQ
-1568249088,1568250879,GP
-1568250880,1568251135,MQ
-1568251136,1568251903,GP
-1568251904,1568253951,MQ
-1568253952,1568254719,GP
-1568254720,1568254975,GF
-1568254976,1568255743,GP
+1568249088,1568249599,GP
+1568249600,1568249855,MQ
+1568249856,1568250111,FR
+1568250112,1568250879,GP
+1568250880,1568251135,FR
+1568251136,1568251647,GP
+1568251648,1568251903,MF
+1568251904,1568252159,MQ
+1568252160,1568252415,GP
+1568252416,1568252671,MQ
+1568252672,1568252927,GP
+1568252928,1568253183,GF
+1568253184,1568253951,GP
+1568253952,1568255743,FR
1568255744,1568255999,GF
-1568256000,1568257791,GP
-1568257792,1568258303,MQ
-1568258304,1568259071,GF
-1568259072,1568260351,MQ
-1568260352,1568261119,GP
-1568261120,1568264191,MQ
-1568264192,1568268287,GP
-1568268288,1568268543,GF
+1568256000,1568256511,GP
+1568256512,1568259071,FR
+1568259072,1568259327,MQ
+1568259328,1568260095,GP
+1568260096,1568260351,FR
+1568260352,1568260607,MF
+1568260608,1568261119,GP
+1568261120,1568261375,FR
+1568261376,1568262143,GP
+1568262144,1568262655,MQ
+1568262656,1568262911,GP
+1568262912,1568263167,MQ
+1568263168,1568263423,FR
+1568263424,1568263679,MQ
+1568263680,1568264447,FR
+1568264448,1568264703,GP
+1568264704,1568265215,MF
+1568265216,1568265471,FR
+1568265472,1568266239,GP
+1568266240,1568266495,FR
+1568266496,1568267263,GP
+1568267264,1568268543,FR
1568268544,1568269311,GP
-1568269312,1568269823,MQ
-1568269824,1568272639,GP
-1568272640,1568273407,GF
-1568273408,1568274687,MQ
+1568269312,1568269567,MQ
+1568269568,1568270079,GP
+1568270080,1568270335,MQ
+1568270336,1568271359,GP
+1568271360,1568271615,FR
+1568271616,1568272383,GP
+1568272384,1568273151,FR
+1568273152,1568273407,GF
+1568273408,1568274175,FR
+1568274176,1568274687,MQ
1568274688,1568274943,GP
1568274944,1568275199,MQ
1568275200,1568275455,GP
-1568275456,1568276479,MQ
-1568276480,1568293135,DE
-1568293136,1568293151,SA
-1568293152,1568294983,DE
-1568294984,1568294991,FR
-1568294992,1568295855,DE
-1568295856,1568295863,GB
-1568295864,1568296239,DE
-1568296240,1568296247,ZA
-1568296248,1568309247,DE
+1568275456,1568275711,FR
+1568275712,1568275967,MQ
+1568275968,1568276223,FR
+1568276224,1568276479,MQ
+1568276480,1568309247,DE
1568309248,1568342015,RO
1568342016,1568374783,BG
1568374784,1568440319,RU
@@ -71424,7 +28244,9 @@
1568571392,1568604159,LB
1568604160,1568636927,UA
1568636928,1569193983,DE
-1569193984,1569718271,HR
+1569193984,1569438463,HR
+1569438464,1569438719,BR
+1569438720,1569718271,HR
1569718272,1570242559,IT
1570242560,1570275327,GB
1570275328,1570308095,BG
@@ -71433,11 +28255,7 @@
1570373632,1570406399,NL
1570406400,1570439167,PL
1570439168,1570471935,TR
-1570471936,1570480895,BG
-1570480896,1570481151,MK
-1570481152,1570492159,BG
-1570492160,1570492415,ES
-1570492416,1570504703,BG
+1570471936,1570504703,BG
1570504704,1570570239,ES
1570570240,1570572287,NL
1570572288,1570574335,UA
@@ -71466,158 +28284,14 @@
1570644768,1570644775,GB
1570644776,1570644991,FR
1570644992,1570645247,GB
-1570645248,1570647807,FR
-1570647808,1570648063,GB
-1570648064,1570652159,FR
-1570652160,1570652287,SE
-1570652288,1570652291,MY
-1570652292,1570652295,GB
-1570652296,1570652299,DE
-1570652300,1570652543,SE
-1570652544,1570652551,FR
-1570652552,1570652891,SE
-1570652892,1570652895,DE
-1570652896,1570655631,SE
-1570655632,1570655635,DE
-1570655636,1570655999,SE
-1570656000,1570656255,GB
-1570656256,1570660351,SE
-1570660352,1570660359,FI
-1570660360,1570660367,SE
-1570660368,1570660383,FR
-1570660384,1570660387,RU
-1570660388,1570660407,SE
-1570660408,1570660411,DE
-1570660412,1570660543,SE
-1570660544,1570660575,FI
-1570660576,1570660591,GB
-1570660592,1570660595,RU
-1570660596,1570660599,SE
-1570660600,1570660607,FI
-1570660608,1570660615,SE
-1570660616,1570660619,RU
-1570660620,1570660623,SE
-1570660624,1570660639,FR
-1570660640,1570660675,DE
-1570660676,1570660863,SE
-1570660864,1570661375,NO
-1570661376,1570661631,GB
-1570661632,1570662143,SE
-1570662144,1570662399,DE
-1570662400,1570663423,SE
-1570663424,1570663583,GB
-1570663584,1570663615,NO
-1570663616,1570663839,GB
-1570663840,1570663871,NO
-1570663872,1570663935,GB
-1570663936,1570665919,SE
-1570665920,1570665935,GB
-1570665936,1570665951,IT
-1570665952,1570665967,FR
-1570665968,1570666143,SE
-1570666144,1570666147,DE
-1570666148,1570666175,SE
-1570666176,1570666191,GB
-1570666192,1570666223,FR
-1570666224,1570666227,SE
-1570666228,1570666231,NO
-1570666232,1570666263,SE
-1570666264,1570666267,US
-1570666268,1570666367,SE
-1570666368,1570666383,FR
-1570666384,1570666387,SE
-1570666388,1570666391,NL
-1570666392,1570666395,SE
-1570666396,1570666399,DE
-1570666400,1570666431,SE
-1570666432,1570666447,GB
-1570666448,1570666463,DE
-1570666464,1570666495,SE
-1570666496,1570666499,ES
-1570666500,1570666511,SE
-1570666512,1570666519,NO
-1570666520,1570666687,SE
-1570666688,1570666703,GB
-1570666704,1570666719,ES
-1570666720,1570666735,FR
-1570666736,1570666751,SE
-1570666752,1570666755,ES
-1570666756,1570666759,SE
-1570666760,1570666767,GB
-1570666768,1570666887,SE
-1570666888,1570666891,DE
-1570666892,1570666903,SE
-1570666904,1570666911,NL
-1570666912,1570666943,SE
-1570666944,1570666959,FR
-1570666960,1570666975,SE
-1570666976,1570666991,FR
-1570666992,1570667007,SE
-1570667008,1570667011,ES
-1570667012,1570667015,SE
-1570667016,1570667023,FI
-1570667024,1570667039,ES
-1570667040,1570667167,SE
-1570667168,1570667171,DE
-1570667172,1570667199,SE
-1570667200,1570667215,FR
-1570667216,1570667231,SE
-1570667232,1570667247,FR
-1570667248,1570667263,SE
-1570667264,1570667267,ES
-1570667268,1570667283,SE
-1570667284,1570667287,MT
-1570667288,1570667295,SE
-1570667296,1570667327,GB
-1570667328,1570667335,SE
-1570667336,1570667339,GB
-1570667340,1570667343,NL
-1570667344,1570667347,DE
-1570667348,1570667455,SE
-1570667456,1570667471,FR
-1570667472,1570667487,SE
-1570667488,1570667503,FR
-1570667504,1570667515,SE
-1570667516,1570667519,US
-1570667520,1570667523,NL
-1570667524,1570667527,IT
-1570667528,1570667531,NO
-1570667532,1570667535,IT
-1570667536,1570667587,SE
-1570667588,1570667591,US
-1570667592,1570667599,SE
-1570667600,1570667603,DE
-1570667604,1570667647,SE
-1570667648,1570667651,US
-1570667652,1570667711,SE
-1570667712,1570667727,FR
-1570667728,1570667743,NL
-1570667744,1570667775,SE
-1570667776,1570667779,NL
-1570667780,1570667791,SE
-1570667792,1570667807,ES
-1570667808,1570667839,SE
-1570667840,1570667903,FR
-1570667904,1570667907,SE
-1570667908,1570667911,RU
-1570667912,1570667915,US
-1570667916,1570667919,SE
-1570667920,1570667923,DE
-1570667924,1570667967,SE
-1570667968,1570667983,FR
-1570667984,1570668031,SE
-1570668032,1570668035,NL
-1570668036,1570668047,SE
-1570668048,1570668055,ES
-1570668056,1570668063,NL
-1570668064,1570668287,SE
-1570668288,1570668291,NL
-1570668292,1570668351,SE
-1570668352,1570668415,NO
-1570668416,1570668543,SE
-1570668544,1570671983,RU
-1570671984,1570671987,TR
-1570671988,1570701311,RU
+1570645248,1570652159,FR
+1570652160,1570668543,SE
+1570668544,1570686975,RU
+1570686976,1570693119,NL
+1570693120,1570695167,RU
+1570695168,1570696191,PL
+1570696192,1570697215,BR
+1570697216,1570701311,RU
1570701312,1570717695,PL
1570717696,1570725887,HR
1570725888,1570734079,DE
@@ -71629,104 +28303,102 @@
1570764800,1570766847,DE
1570766848,1571291135,DK
1571291136,1571422207,RO
-1571422208,1571422975,UA
-1571422976,1571423231,RU
-1571423232,1571423487,UA
+1571422208,1571422463,CZ
+1571422464,1571422719,UA
+1571422720,1571423231,RU
+1571423232,1571423487,CZ
1571423488,1571423999,RU
1571424000,1571424255,KZ
1571424256,1571424511,KG
-1571424512,1571424767,RU
-1571424768,1571425023,CY
-1571425024,1571425535,RU
+1571424512,1571424767,AM
+1571424768,1571425023,CZ
+1571425024,1571425024,RU
+1571425025,1571425148,CZ
+1571425149,1571425149,RU
+1571425150,1571425231,CZ
+1571425232,1571425232,RU
+1571425233,1571425279,CZ
+1571425280,1571425535,RU
1571425536,1571425791,NL
-1571425792,1571426303,RU
-1571426304,1571428351,CZ
-1571428352,1571428863,RU
-1571428864,1571429119,CZ
-1571429120,1571429375,RU
+1571425792,1571428607,CZ
+1571428608,1571428863,UA
+1571428864,1571429375,CZ
1571429376,1571435519,UA
-1571435520,1571435775,NL
-1571435776,1571436031,RU
-1571436032,1571436543,UA
+1571435520,1571435775,RU
+1571435776,1571436287,CZ
+1571436288,1571436543,UA
1571436544,1571438591,RU
-1571438592,1571441663,UA
-1571441664,1571441791,RU
-1571441792,1571441887,DE
-1571441888,1571441919,RU
-1571441920,1571442687,NL
+1571438592,1571440639,UA
+1571440640,1571441407,CZ
+1571441408,1571441663,UA
+1571441664,1571441919,RU
+1571441920,1571442175,CZ
+1571442176,1571442687,NL
1571442688,1571443199,UA
-1571443200,1571443455,NL
+1571443200,1571443455,RU
1571443456,1571443711,UA
-1571443712,1571444735,CZ
-1571444736,1571446011,NL
-1571446012,1571446015,US
-1571446016,1571446783,NL
-1571446784,1571447807,KZ
-1571447808,1571448831,RU
-1571448832,1571450879,US
+1571443712,1571444991,CZ
+1571444992,1571445247,UA
+1571445248,1571446271,NL
+1571446272,1571446783,CZ
+1571446784,1571447039,GB
+1571447040,1571447295,CZ
+1571447296,1571447807,RU
+1571447808,1571448831,CZ
+1571448832,1571449343,NL
+1571449344,1571449855,CZ
+1571449856,1571450879,RU
1571450880,1571451903,UA
-1571451904,1571452927,RU
-1571452928,1571453951,CZ
-1571453952,1571454975,GB
-1571454976,1571455999,RU
-1571456000,1571456511,CY
-1571456512,1571457023,RU
-1571457024,1571458047,UA
+1571451904,1571453951,CZ
+1571453952,1571455999,RU
+1571456000,1571456511,UA
+1571456512,1571457535,CZ
+1571457536,1571458047,RU
1571458048,1571459071,CZ
1571459072,1571463167,UA
-1571463168,1571465215,RU
-1571465216,1571469311,CZ
-1571469312,1571470335,RU
-1571470336,1571477503,CZ
-1571477504,1571478527,RU
-1571478528,1571485695,CZ
-1571485696,1571487743,RU
+1571463168,1571471359,CZ
+1571471360,1571475455,RU
+1571475456,1571476479,CZ
+1571476480,1571477503,RU
+1571477504,1571487743,CZ
1571487744,1571495935,SK
-1571495936,1571500031,CZ
-1571500032,1571502079,RU
-1571502080,1571504127,CZ
+1571495936,1571504127,CZ
1571504128,1571508223,UA
1571508224,1571514367,CZ
1571514368,1571520511,BY
-1571520512,1571522559,KZ
-1571522560,1571522815,RU
-1571522816,1571523071,UA
-1571523072,1571523583,RU
-1571523584,1571524607,CZ
+1571520512,1571522047,UA
+1571522048,1571522815,RU
+1571522816,1571524607,CZ
1571524608,1571526655,RU
1571526656,1571528703,CZ
-1571528704,1571529727,MD
+1571528704,1571529215,BY
+1571529216,1571529727,CZ
1571529728,1571530239,RU
-1571530240,1571530751,CZ
-1571530752,1571531263,RU
+1571530240,1571531263,CZ
1571531264,1571531775,UA
1571531776,1571532799,RU
-1571532800,1571533055,SK
-1571533056,1571533823,CZ
-1571533824,1571534847,RU
+1571532800,1571534079,CZ
+1571534080,1571534847,RU
1571534848,1571535103,LV
-1571535104,1571535359,UA
-1571535360,1571539967,RU
-1571539968,1571540223,NL
-1571540224,1571540479,UA
-1571540480,1571540735,RU
-1571540736,1571540991,BY
+1571535104,1571535617,CZ
+1571535618,1571535618,RU
+1571535619,1571535871,CZ
+1571535872,1571538943,RU
+1571538944,1571540991,CZ
1571540992,1571541247,RU
1571541248,1571541503,UA
-1571541504,1571542015,CY
-1571542016,1571542527,RU
-1571542528,1571542783,SK
-1571542784,1571543039,KG
-1571543040,1571543551,CZ
+1571541504,1571543039,CZ
+1571543040,1571543551,NL
1571543552,1571543807,UA
-1571543808,1571545343,RU
+1571543808,1571544063,CZ
+1571544064,1571545343,RU
1571545344,1571545599,UA
-1571545600,1571545855,RU
-1571545856,1571546111,CZ
-1571546112,1571546623,KZ
-1571546624,1571549183,CZ
-1571549184,1571552255,UA
-1571552256,1571553279,CZ
+1571545600,1571545855,CZ
+1571545856,1571546111,RU
+1571546112,1571546879,CZ
+1571546880,1571547135,RU
+1571547136,1571549183,CZ
+1571549184,1571553279,UA
1571553280,1571684351,IL
1571684352,1571686399,ES
1571686400,1571688447,GB
@@ -71739,40 +28411,20 @@
1571702784,1571704831,RU
1571704832,1571706879,GB
1571706880,1571708927,NL
-1571708928,1571709439,GB
-1571709440,1571709567,DE
-1571709568,1571709695,GB
-1571709696,1571709823,FR
-1571709824,1571709951,GB
-1571709952,1571710079,NL
-1571710080,1571710207,GB
-1571710208,1571710335,ES
-1571710336,1571710463,GB
-1571710464,1571710591,IT
-1571710592,1571710975,GB
+1571708928,1571710975,GB
1571710976,1571713023,NL
1571713024,1571715071,RU
1571715072,1571717119,GR
1571717120,1571719167,RU
1571719168,1571721215,GB
1571721216,1571723263,FR
-1571723264,1571723775,GB
-1571723776,1571724031,SE
-1571724032,1571725311,GB
+1571723264,1571725311,GB
1571725312,1571727359,RO
1571727360,1571729407,IE
-1571729408,1571729791,SK
-1571729792,1571729799,CZ
-1571729800,1571731455,SK
-1571731456,1571732479,CH
-1571732480,1571732495,LI
-1571732496,1571733503,CH
+1571729408,1571731455,SK
+1571731456,1571733503,CH
1571733504,1571735551,FI
1571735552,1571737599,NL
-1571737600,1571737855,GB
-1571737856,1571738111,EU
-1571738112,1571738367,NL
-1571738368,1571739647,EU
1571739648,1571741695,GB
1571741696,1571743743,RU
1571743744,1571745791,GB
@@ -71787,32 +28439,40 @@
1571749888,1571758079,RU
1571758080,1571766271,IL
1571766272,1571786751,PL
-1571786752,1571790847,EU
1571790848,1571794943,PL
1571794944,1571799039,NL
1571799040,1571815423,UA
-1571815424,1571817215,FR
-1571817216,1571817983,RE
-1571817984,1571818239,FR
-1571818240,1571818751,RE
-1571818752,1571820543,FR
-1571820544,1571821311,RE
-1571821312,1571822591,FR
+1571815424,1571815679,FR
+1571815680,1571815935,RE
+1571815936,1571816959,FR
+1571816960,1571817727,RE
+1571817728,1571818495,FR
+1571818496,1571818751,RE
+1571818752,1571819007,FR
+1571819008,1571819263,RE
+1571819264,1571819519,FR
+1571819520,1571819775,RE
+1571819776,1571820287,FR
+1571820288,1571820543,RE
+1571820544,1571820799,FR
+1571820800,1571821055,RE
+1571821056,1571822591,FR
1571822592,1571823103,RE
-1571823104,1571824383,FR
-1571824384,1571824639,RE
-1571824640,1571826175,FR
-1571826176,1571826687,RE
-1571826688,1571826943,FR
-1571826944,1571827199,RE
-1571827200,1571830271,FR
-1571830272,1571831295,RE
-1571831296,1571831807,FR
+1571823104,1571823871,FR
+1571823872,1571824127,RE
+1571824128,1571824895,FR
+1571824896,1571825151,RE
+1571825152,1571826687,FR
+1571826688,1571827199,RE
+1571827200,1571827711,FR
+1571827712,1571827967,RE
+1571827968,1571828991,FR
+1571828992,1571829247,RE
+1571829248,1571831807,FR
1571831808,1571848191,DK
1571848192,1571864575,RU
1571864576,1571880959,PL
1571880960,1571897343,RU
-1571898368,1571898623,NO
1571913728,1571930111,GE
1571930112,1571946495,LV
1571946496,1571962879,SA
@@ -71821,9 +28481,12 @@
1571995648,1572012031,UA
1572012032,1572020223,NO
1572020224,1572028415,SE
-1572028416,1572028927,RU
+1572028416,1572028927,GB
1572028928,1572029183,UA
-1572029184,1572044799,RU
+1572029184,1572030463,GB
+1572030464,1572042751,RU
+1572042752,1572043263,GB
+1572043264,1572044799,RU
1572044800,1572061183,IT
1572061184,1572077567,PL
1572077568,1572093951,RU
@@ -71832,8 +28495,7 @@
1572098048,1572100095,DK
1572100096,1572102143,CH
1572102144,1572110335,BA
-1572110336,1572110591,US
-1572110592,1572112383,GB
+1572110336,1572112383,GB
1572112384,1572114431,RU
1572114432,1572116479,BA
1572116480,1572118527,DE
@@ -71848,13 +28510,7 @@
1572257792,1572274175,FR
1572274176,1572276223,FI
1572276224,1572277247,US
-1572277248,1572277759,DE
-1572277760,1572280319,SG
-1572280320,1572280575,DE
-1572280576,1572281855,SG
-1572281856,1572282111,IN
-1572282112,1572282367,PT
-1572282368,1572290559,SG
+1572277248,1572290559,SG
1572290560,1572306943,RU
1572306944,1572323327,BG
1572323328,1572339711,UA
@@ -71874,7 +28530,10 @@
1572392960,1572393471,NL
1572393472,1572393983,GB
1572393984,1572394495,DE
-1572394496,1572397055,US
+1572394496,1572394751,FR
+1572394752,1572395263,US
+1572395264,1572395519,NL
+1572395520,1572397055,US
1572397056,1572401151,AZ
1572401152,1572405247,GB
1572405248,1572409343,CZ
@@ -71887,7 +28546,6 @@
1572433920,1572438015,IT
1572438016,1572442111,AT
1572442112,1572446207,RU
-1572446208,1572450303,NO
1572450304,1572458495,RU
1572458496,1572462591,UA
1572462592,1572466687,LB
@@ -71896,70 +28554,25 @@
1572474880,1572475135,ZA
1572475136,1572483071,GB
1572483072,1572487167,RU
-1572487168,1572490751,RS
-1572490752,1572491007,HR
+1572487168,1572491007,RS
1572491008,1572491263,LU
1572491264,1572495359,IT
1572495360,1572499455,RU
1572499456,1572503551,TR
-1572503552,1572504063,IT
-1572504064,1572504319,US
-1572504320,1572504575,DE
-1572504576,1572504703,RO
-1572504704,1572504831,TR
-1572504832,1572505087,SG
-1572505088,1572505871,IT
-1572505872,1572505887,GR
-1572505888,1572505983,IT
-1572505984,1572506623,GR
-1572506624,1572507199,IT
-1572507200,1572507207,GB
-1572507208,1572507647,IT
+1572503552,1572507647,IT
1572507648,1572511743,GB
1572511744,1572515839,DE
-1572515840,1572517759,NL
-1572517760,1572517775,CA
-1572517776,1572519935,NL
+1572515840,1572519935,NL
1572519936,1572524031,DE
1572524032,1572528127,GE
1572528128,1572532223,RU
1572532224,1572536319,IT
-1572536320,1572536831,JE
-1572536832,1572537087,GB
-1572537088,1572538111,JE
-1572538112,1572538175,GB
-1572538176,1572538367,JE
+1572536320,1572538367,JE
1572538368,1572540415,NL
-1572540416,1572541439,GB
-1572541440,1572541447,FR
-1572541448,1572541455,GB
-1572541456,1572541463,FR
-1572541464,1572541471,GB
-1572541472,1572541535,FR
-1572541536,1572541543,GB
-1572541544,1572541551,CH
-1572541552,1572541951,GB
-1572541952,1572541983,DE
-1572541984,1572541991,BE
-1572541992,1572541999,ES
-1572542000,1572542015,GB
-1572542016,1572542031,HU
-1572542032,1572542071,GB
-1572542072,1572542079,DE
-1572542080,1572542087,ES
-1572542088,1572542111,GB
-1572542112,1572542119,PL
-1572542120,1572542127,ES
-1572542128,1572542151,GB
-1572542152,1572542159,DE
-1572542160,1572542207,GB
-1572542208,1572542463,FR
+1572540416,1572542463,GB
1572542464,1572544511,IT
-1572544512,1572544575,IQ
-1572544576,1572544767,US
-1572544768,1572545279,IQ
-1572545280,1572545535,US
-1572545536,1572546559,IQ
+1572544512,1572544767,FR
+1572544768,1572546559,IQ
1572546560,1572548607,FR
1572548608,1572550655,NL
1572550656,1572552703,DE
@@ -71971,13 +28584,11 @@
1572562944,1572564991,CZ
1572564992,1572567039,DE
1572567040,1572569087,RU
-1572569088,1572569343,NL
-1572569344,1572569599,GB
-1572569600,1572571135,NL
1572571136,1572573183,RO
-1572573184,1572574975,GG
-1572574976,1572575167,GB
-1572575168,1572575231,GG
+1572573184,1572574463,GG
+1572574464,1572574719,GB
+1572574720,1572574975,GG
+1572574976,1572575231,GB
1572575232,1572577279,RU
1572577280,1572579327,AM
1572579328,1572581375,GB
@@ -71986,11 +28597,9 @@
1572587520,1572589567,TR
1572589568,1572591615,CH
1572591616,1572593663,NL
-1572593664,1572594687,GB
-1572594688,1572594943,FR
-1572594944,1572595711,GB
+1572593664,1572595711,GB
1572595712,1572597759,DE
-1572597760,1572599807,RS
+1572597760,1572599807,XK
1572599808,1572601855,DE
1572601856,1572603903,SE
1572603904,1572605951,GE
@@ -72000,15 +28609,8 @@
1572612096,1572614143,RU
1572614144,1572616191,ES
1572616192,1572618239,CH
-1572618240,1572618383,NL
-1572618384,1572618399,US
-1572618400,1572618415,HK
-1572618416,1572620287,NL
-1572620288,1572620415,CH
-1572620416,1572620431,CZ
-1572620432,1572620559,CH
-1572620560,1572620567,NL
-1572620568,1572622335,CH
+1572618240,1572620287,NL
+1572620288,1572622335,CH
1572622336,1572624383,RU
1572624384,1572626431,NO
1572626432,1572628479,IT
@@ -72020,7 +28622,7 @@
1572635392,1572635647,FR
1572635648,1572635903,ES
1572635904,1572636159,DE
-1572636160,1572636415,SE
+1572636160,1572636415,IT
1572636416,1572636671,NL
1572636672,1572638719,ES
1572638720,1572640767,FR
@@ -72036,62 +28638,45 @@
1572661248,1572663295,NO
1572663296,1572665343,DE
1572665344,1572667391,NL
-1572667392,1572667455,GB
-1572667456,1572667459,SA
-1572667460,1572668655,GB
-1572668656,1572668671,CY
-1572668672,1572668703,GB
-1572668704,1572668711,CY
-1572668712,1572668719,GB
-1572668720,1572668727,CY
-1572668728,1572669439,GB
+1572667392,1572669439,GB
1572669440,1572673535,RU
1572673536,1572675583,AT
1572675584,1572677631,ES
-1572677632,1572681727,RU
-1572681728,1572681983,DE
-1572681984,1572682239,RU
-1572682240,1572682751,DE
-1572682752,1572683775,RU
+1572677632,1572683775,RU
1572683776,1572685823,CH
1572685824,1572689919,RU
1572689920,1572691967,ES
1572691968,1572694015,SA
1572694016,1572696063,GB
1572696064,1572698111,HU
-1572698112,1572700159,RU
1572700160,1572702207,NL
1572702208,1572704255,IT
1572704256,1572706303,RU
1572706304,1572708351,DE
-1572708352,1572708863,GB
-1572708864,1572709375,GG
-1572709376,1572709887,GB
-1572709888,1572710143,GG
-1572710144,1572710399,GB
+1572708352,1572708607,GB
+1572708608,1572709375,GG
+1572709376,1572710143,GB
+1572710144,1572710399,GG
1572710400,1572712447,DE
1572712448,1572714495,ES
-1572714496,1572716543,IT
+1572714496,1572714943,NG
+1572714944,1572714959,IT
+1572714960,1572716543,NG
1572716544,1572718591,SA
1572718592,1572720639,RU
1572720640,1572722687,IT
1572722688,1572724735,RU
1572724736,1572726783,BY
1572726784,1572728831,CH
-1572728832,1572730239,SE
-1572730240,1572730303,MY
-1572730304,1572730879,SE
+1572728832,1572730879,SE
1572730880,1572732927,RU
1572732928,1572734975,HU
-1572734976,1572737023,KZ
1572737024,1572739071,RU
1572739072,1572741119,IR
1572741120,1572743167,FI
1572743168,1572745215,UA
1572745216,1572749311,CZ
-1572749312,1572751111,DE
-1572751112,1572751119,GB
-1572751120,1572751359,DE
+1572749312,1572751359,DE
1572751360,1572753407,CH
1572753408,1572755455,NO
1572755456,1572757503,DE
@@ -72100,14 +28685,9 @@
1572761600,1572763647,GB
1572763648,1572765695,TR
1572765696,1572767743,CZ
-1572767744,1572769740,NL
-1572769741,1572769790,KY
-1572769791,1572769791,NL
-1572769792,1572770047,RO
-1572770048,1572770111,RS
-1572770112,1572771839,RO
-1572771840,1572772095,EU
-1572772096,1572773887,ES
+1572767744,1572769791,NL
+1572769792,1572771839,RO
+1572771840,1572773887,ES
1572773888,1572775935,RS
1572775936,1572777983,GB
1572777984,1572780031,UA
@@ -72124,9 +28704,7 @@
1572800512,1572804607,RU
1572804608,1572808703,GB
1572808704,1572810751,FR
-1572810752,1572812031,DE
-1572812032,1572812543,RO
-1572812544,1572812799,DE
+1572810752,1572812799,DE
1572812800,1572814847,RU
1572814848,1572816895,KW
1572816896,1572818943,RU
@@ -72141,50 +28719,20 @@
1572835328,1572837375,IE
1572837376,1572839423,DK
1572839424,1572841471,DE
-1572841472,1572842239,EU
-1572842240,1572842495,LV
-1572842496,1572842751,EU
-1572842752,1572843007,NL
-1572843008,1572843519,EU
1572843520,1572845567,JO
1572845568,1572847615,FR
1572847616,1572849663,GI
1572849664,1572851711,GB
1572851712,1572853759,DE
-1572853760,1572853760,EU
-1572853761,1572853767,BE
-1572853768,1572853769,EU
-1572853770,1572853770,DK
-1572853771,1572853775,EU
-1572853776,1572854015,BE
-1572854016,1572854271,LU
-1572854272,1572854272,EU
-1572854273,1572854284,BE
-1572854285,1572854285,NL
-1572854286,1572854286,CH
-1572854287,1572854287,LU
-1572854288,1572854288,BE
-1572854289,1572854289,CH
-1572854290,1572854527,BE
-1572854528,1572855039,EU
-1572855040,1572855071,BE
-1572855072,1572855295,EU
-1572855296,1572855551,CH
-1572855552,1572855552,EU
-1572855553,1572855558,BE
-1572855559,1572855561,EU
-1572855562,1572855562,DK
-1572855563,1572855567,EU
-1572855568,1572855807,BE
+1572853760,1572855807,BE
1572855808,1572857855,KZ
1572857856,1572859903,SE
1572859904,1572861951,IT
1572861952,1572863999,CH
1572864000,1577058303,DE
1577058304,1578106879,GB
-1578106880,1578139391,DE
-1578139392,1578139647,AT
-1578139648,1578172415,DE
+1578106880,1578139647,DE
+1578139648,1578172415,CH
1578172416,1578237951,MT
1578237952,1578303487,DK
1578303488,1578369023,RU
@@ -72192,696 +28740,48 @@
1578434560,1578500095,HU
1578500096,1578565631,FI
1578565632,1578582015,FR
-1578582016,1578584575,IT
-1578584576,1578586111,PT
+1578582016,1578584063,IT
+1578584064,1578585087,FR
+1578585088,1578586111,PT
1578586112,1578588159,ES
1578588160,1578590207,PL
-1578590208,1578590223,FR
-1578590224,1578590231,DE
-1578590232,1578590239,IT
-1578590240,1578590271,FR
-1578590272,1578590275,NL
-1578590276,1578590279,PT
-1578590280,1578590283,PL
-1578590284,1578590287,GB
-1578590288,1578590303,FR
-1578590304,1578590311,IT
-1578590312,1578590339,FR
-1578590340,1578590343,DE
-1578590344,1578590351,FR
-1578590352,1578590367,GB
-1578590368,1578590415,FR
-1578590416,1578590431,PL
-1578590432,1578590447,BE
-1578590448,1578590471,FR
-1578590472,1578590479,DE
-1578590480,1578590495,IT
-1578590496,1578590527,PL
-1578590528,1578590535,ES
-1578590536,1578590543,FR
-1578590544,1578590559,PL
-1578590560,1578590563,DE
-1578590564,1578590567,FR
-1578590568,1578590571,PL
-1578590572,1578590575,IT
-1578590576,1578590599,FR
-1578590600,1578590603,LT
-1578590604,1578590607,PL
-1578590608,1578590619,DE
-1578590620,1578590623,IT
-1578590624,1578590639,FR
-1578590640,1578590647,CZ
-1578590648,1578590655,BE
-1578590656,1578590659,FR
-1578590660,1578590663,CZ
-1578590664,1578590667,FR
-1578590668,1578590671,NL
-1578590672,1578590687,PL
-1578590688,1578590691,GB
-1578590692,1578590695,DE
-1578590696,1578590699,FR
-1578590700,1578590727,PL
-1578590728,1578590731,GB
-1578590732,1578590735,PL
-1578590736,1578590787,FR
-1578590788,1578590791,LT
-1578590792,1578590799,FR
-1578590800,1578590815,ES
-1578590816,1578590831,GB
-1578590832,1578590839,NL
-1578590840,1578590847,PL
-1578590848,1578590851,DE
-1578590852,1578590855,FR
-1578590856,1578590859,GB
-1578590860,1578590879,FR
-1578590880,1578590911,PL
-1578590912,1578590927,FR
-1578590928,1578590935,DE
-1578590936,1578590943,ES
-1578590944,1578590975,FR
-1578590976,1578590991,GB
-1578590992,1578590999,PT
-1578591000,1578591007,FR
-1578591008,1578591011,GB
-1578591012,1578591023,FR
-1578591024,1578591039,PL
-1578591040,1578591055,NL
-1578591056,1578591071,FR
-1578591072,1578591119,GB
-1578591120,1578591127,FR
-1578591128,1578591135,DE
-1578591136,1578591143,FR
-1578591144,1578591151,GB
-1578591152,1578591167,ES
-1578591168,1578591183,FR
-1578591184,1578591187,CH
-1578591188,1578591191,PT
-1578591192,1578591195,GB
-1578591196,1578591279,FR
-1578591280,1578591287,ES
-1578591288,1578591291,FR
-1578591292,1578591295,ES
-1578591296,1578591327,FR
-1578591328,1578591343,PL
-1578591344,1578591391,FR
-1578591392,1578591395,IT
-1578591396,1578591399,PL
-1578591400,1578591403,DE
-1578591404,1578591407,PL
-1578591408,1578591411,ES
-1578591412,1578591415,FR
-1578591416,1578591423,ES
-1578591424,1578591431,PL
-1578591432,1578591435,NL
-1578591436,1578591439,ES
-1578591440,1578591455,FR
-1578591456,1578591459,GB
-1578591460,1578591463,FR
-1578591464,1578591487,PL
-1578591488,1578591503,FR
-1578591504,1578591519,CH
-1578591520,1578591551,ES
-1578591552,1578591555,BE
-1578591556,1578591559,IT
-1578591560,1578591575,FR
-1578591576,1578591579,DE
-1578591580,1578591583,ES
-1578591584,1578591599,IT
-1578591600,1578591703,FR
-1578591704,1578591707,DE
-1578591708,1578591791,FR
-1578591792,1578591795,ES
-1578591796,1578591799,NL
-1578591800,1578591807,PL
-1578591808,1578591855,FR
-1578591856,1578591871,SN
-1578591872,1578591887,FR
-1578591888,1578591891,PL
-1578591892,1578591899,FR
-1578591900,1578591903,NL
-1578591904,1578591919,PL
-1578591920,1578591939,ES
-1578591940,1578591951,FR
-1578591952,1578591967,PT
-1578591968,1578591975,FR
-1578591976,1578591979,PL
-1578591980,1578591983,FR
-1578591984,1578592031,PL
-1578592032,1578592039,PT
-1578592040,1578592043,ES
-1578592044,1578592047,PL
-1578592048,1578592063,FR
-1578592064,1578592067,ES
-1578592068,1578592071,FR
-1578592072,1578592079,PL
-1578592080,1578592095,ES
-1578592096,1578592111,FR
-1578592112,1578592127,GB
-1578592128,1578592143,DE
-1578592144,1578592159,NL
-1578592160,1578592163,FR
-1578592164,1578592171,IT
-1578592172,1578592175,ES
+1578590208,1578590787,FR
+1578590788,1578590791,ES
+1578590792,1578590851,FR
+1578590852,1578590855,ES
+1578590856,1578590863,FR
+1578590864,1578590879,BE
+1578590880,1578591695,FR
+1578591696,1578591699,ES
+1578591700,1578592175,FR
1578592176,1578592183,CZ
1578592184,1578592191,PT
1578592192,1578592199,BE
1578592200,1578592207,CH
-1578592208,1578592223,FR
-1578592224,1578592239,ES
-1578592240,1578592279,FR
-1578592280,1578592283,BE
-1578592284,1578592287,FR
-1578592288,1578592295,IT
-1578592296,1578592303,PT
-1578592304,1578592351,FR
-1578592352,1578592367,PL
-1578592368,1578592371,FR
-1578592372,1578592375,PL
-1578592376,1578592379,GB
-1578592380,1578592383,DE
-1578592384,1578592395,FR
-1578592396,1578592399,DE
-1578592400,1578592407,NL
-1578592408,1578592411,GB
-1578592412,1578592415,DE
-1578592416,1578592423,IT
-1578592424,1578592431,IE
-1578592432,1578592487,FR
-1578592488,1578592495,FI
-1578592496,1578592511,FR
-1578592512,1578592515,GB
-1578592516,1578592519,PL
-1578592520,1578592531,FR
-1578592532,1578592535,GB
-1578592536,1578592539,PL
-1578592540,1578592559,FR
-1578592560,1578592575,DE
-1578592576,1578592591,GB
-1578592592,1578592607,FR
-1578592608,1578592623,IE
-1578592624,1578592687,FR
-1578592688,1578592695,DE
-1578592696,1578592703,ES
-1578592704,1578592719,FR
-1578592720,1578592735,CH
-1578592736,1578592743,PL
-1578592744,1578592747,PT
-1578592748,1578592751,DE
-1578592752,1578592767,IT
-1578592768,1578592783,DE
-1578592784,1578592799,ES
-1578592800,1578592803,NL
-1578592804,1578592811,FR
-1578592812,1578592815,GB
-1578592816,1578592827,FR
-1578592828,1578592831,GB
-1578592832,1578592847,PL
-1578592848,1578592851,BE
-1578592852,1578592855,DE
-1578592856,1578592859,FR
-1578592860,1578592879,PL
-1578592880,1578592883,FR
-1578592884,1578592891,GB
-1578592892,1578592895,FR
-1578592896,1578592959,IT
-1578592960,1578592991,FR
-1578592992,1578593007,IE
-1578593008,1578593279,DE
-1578593280,1578593295,GB
-1578593296,1578593299,ES
-1578593300,1578593303,GB
-1578593304,1578593307,ES
-1578593308,1578593319,FR
-1578593320,1578593323,PT
-1578593324,1578593327,FR
-1578593328,1578593343,IT
-1578593344,1578593359,PT
-1578593360,1578593375,PL
-1578593376,1578593407,GB
-1578593408,1578593411,IT
-1578593412,1578593415,FR
-1578593416,1578593423,DE
-1578593424,1578593439,FR
-1578593440,1578593443,GB
-1578593444,1578593447,PL
-1578593448,1578593455,DE
-1578593456,1578593471,FR
-1578593472,1578593479,GB
-1578593480,1578593483,ES
-1578593484,1578593487,FR
-1578593488,1578593495,ES
-1578593496,1578593503,FR
-1578593504,1578593519,PL
-1578593520,1578593543,FR
-1578593544,1578593547,ES
-1578593548,1578593551,FI
-1578593552,1578593583,FR
-1578593584,1578593587,GB
-1578593588,1578593591,DE
-1578593592,1578593599,IE
-1578593600,1578593631,FR
-1578593632,1578593647,NL
-1578593648,1578593659,PL
-1578593660,1578593671,FR
-1578593672,1578593679,DE
-1578593680,1578593695,PL
-1578593696,1578593703,GB
-1578593704,1578593711,BE
-1578593712,1578593715,FR
-1578593716,1578593719,IT
-1578593720,1578593723,CH
-1578593724,1578593759,FR
-1578593760,1578593775,ES
-1578593776,1578593791,NL
-1578593792,1578593823,FR
-1578593824,1578593831,GB
-1578593832,1578593835,FR
-1578593836,1578593839,ES
-1578593840,1578593871,FR
-1578593872,1578593875,ES
-1578593876,1578593887,FR
-1578593888,1578593895,ES
-1578593896,1578593899,GB
-1578593900,1578593903,DE
-1578593904,1578593919,FR
-1578593920,1578593935,PL
-1578593936,1578593939,IT
-1578593940,1578593943,CH
-1578593944,1578593947,ES
-1578593948,1578593955,FR
-1578593956,1578593959,LT
-1578593960,1578593963,FR
-1578593964,1578593967,ES
-1578593968,1578594015,FR
-1578594016,1578594031,BE
-1578594032,1578594039,ES
-1578594040,1578594047,IT
-1578594048,1578594055,FR
-1578594056,1578594059,ES
-1578594060,1578594079,FR
-1578594080,1578594087,CH
-1578594088,1578594095,CZ
-1578594096,1578594147,FR
-1578594148,1578594151,ES
-1578594152,1578594159,IT
-1578594160,1578594163,FR
-1578594164,1578594167,ES
-1578594168,1578594171,DE
-1578594172,1578594175,ES
-1578594176,1578594183,DE
-1578594184,1578594211,FR
-1578594212,1578594215,DE
-1578594216,1578594239,PL
-1578594240,1578594255,PT
-1578594256,1578594271,ES
-1578594272,1578594303,PL
-1578594304,1578594307,GB
-1578594308,1578594311,FI
-1578594312,1578594319,FR
-1578594320,1578594335,PL
-1578594336,1578594351,DE
-1578594352,1578594355,GB
-1578594356,1578594359,FR
-1578594360,1578594363,PT
-1578594364,1578594367,ES
-1578594368,1578594371,GB
-1578594372,1578594375,FR
-1578594376,1578594383,PT
-1578594384,1578594399,FR
-1578594400,1578594431,PL
-1578594432,1578594447,FR
-1578594448,1578594463,PL
-1578594464,1578594479,FR
-1578594480,1578594495,ES
-1578594496,1578594511,FR
-1578594512,1578594515,PL
-1578594516,1578594519,FR
-1578594520,1578594523,PL
-1578594524,1578594527,FR
-1578594528,1578594531,PL
-1578594532,1578594535,NL
-1578594536,1578594539,DE
-1578594540,1578594543,FR
-1578594544,1578594551,ES
-1578594552,1578594555,PL
-1578594556,1578594559,LT
-1578594560,1578594575,PL
-1578594576,1578594607,ES
-1578594608,1578594623,FR
-1578594624,1578594687,DE
-1578594688,1578594703,GB
-1578594704,1578594707,BE
-1578594708,1578594711,FR
-1578594712,1578594715,IT
-1578594716,1578594751,FR
-1578594752,1578594767,ES
-1578594768,1578594775,GB
-1578594776,1578594779,ES
-1578594780,1578594783,IE
-1578594784,1578594799,FR
-1578594800,1578594815,DE
-1578594816,1578594847,FR
-1578594848,1578594863,IT
-1578594864,1578594871,PL
-1578594872,1578595039,FR
-1578595040,1578595055,GB
-1578595056,1578595103,FR
-1578595104,1578595119,GB
-1578595120,1578595151,FR
-1578595152,1578595167,ES
-1578595168,1578595199,FR
-1578595200,1578595203,DE
-1578595204,1578595207,FR
-1578595208,1578595215,PL
-1578595216,1578595231,DE
-1578595232,1578595263,BE
-1578595264,1578595267,ES
-1578595268,1578595271,FR
-1578595272,1578595275,DE
-1578595276,1578595279,ES
-1578595280,1578595327,FR
-1578595328,1578595343,IT
-1578595344,1578595363,FR
-1578595364,1578595367,DE
-1578595368,1578595379,FR
-1578595380,1578595383,CH
-1578595384,1578595387,ES
-1578595388,1578595407,PL
-1578595408,1578595411,IE
-1578595412,1578595415,IT
-1578595416,1578595419,FR
-1578595420,1578595423,IT
-1578595424,1578595439,PL
-1578595440,1578595447,FR
-1578595448,1578595455,ES
-1578595456,1578595459,DE
-1578595460,1578595467,PL
-1578595468,1578595471,FR
-1578595472,1578595479,ES
-1578595480,1578595487,GB
-1578595488,1578595503,DE
-1578595504,1578595519,PT
-1578595520,1578595523,PL
-1578595524,1578595527,FR
-1578595528,1578595531,IE
-1578595532,1578595535,GB
-1578595536,1578595543,LT
-1578595544,1578595547,GB
-1578595548,1578595607,FR
-1578595608,1578595611,GB
-1578595612,1578595615,CZ
-1578595616,1578595619,PL
-1578595620,1578595623,ES
-1578595624,1578595627,FR
-1578595628,1578595631,IT
-1578595632,1578595635,FR
-1578595636,1578595639,ES
-1578595640,1578595643,DE
-1578595644,1578595647,GB
-1578595648,1578595683,FR
-1578595684,1578595687,GB
-1578595688,1578595695,LT
-1578595696,1578595703,FR
-1578595704,1578595711,PL
-1578595712,1578595743,GB
-1578595744,1578595747,IT
-1578595748,1578595751,FR
-1578595752,1578595759,ES
-1578595760,1578595763,FR
-1578595764,1578595767,DE
-1578595768,1578595775,ES
-1578595776,1578595807,CH
-1578595808,1578595823,DE
-1578595824,1578595855,FR
-1578595856,1578595871,GB
-1578595872,1578595903,FR
-1578595904,1578595907,NL
-1578595908,1578595911,BE
-1578595912,1578595935,FR
-1578595936,1578595951,BE
-1578595952,1578595959,DE
-1578595960,1578595967,FR
-1578595968,1578595983,IE
-1578595984,1578595987,PL
-1578595988,1578595995,IT
-1578595996,1578596031,FR
-1578596032,1578596063,IT
-1578596064,1578596095,IE
-1578596096,1578596099,DE
-1578596100,1578596103,GB
-1578596104,1578596107,PL
-1578596108,1578596111,ES
-1578596112,1578596115,NL
-1578596116,1578596119,FR
-1578596120,1578596123,PT
-1578596124,1578596127,ES
-1578596128,1578596143,PL
-1578596144,1578596147,GB
-1578596148,1578596151,FR
-1578596152,1578596155,DE
-1578596156,1578596175,FR
-1578596176,1578596183,ES
-1578596184,1578596191,BE
-1578596192,1578596207,ES
-1578596208,1578596255,FR
-1578596256,1578596287,GB
-1578596288,1578596351,FR
-1578596352,1578596863,GB
-1578596864,1578598943,FR
-1578598944,1578598975,CH
-1578598976,1578599039,FR
-1578599040,1578599071,DE
-1578599072,1578599103,ES
-1578599104,1578599135,PT
-1578599136,1578599167,IE
-1578599168,1578600191,FR
-1578600192,1578600255,BE
-1578600256,1578600511,FR
-1578600512,1578600575,BE
-1578600576,1578602495,FR
+1578592208,1578593023,FR
+1578593024,1578593279,DE
+1578593280,1578593439,FR
+1578593440,1578593443,ES
+1578593444,1578593955,FR
+1578593956,1578593959,ES
+1578593960,1578595419,FR
+1578595420,1578595423,GB
+1578595424,1578595987,FR
+1578595988,1578595991,ES
+1578595992,1578602495,FR
1578602496,1578604543,NL
1578604544,1578606591,GB
1578606592,1578607725,DE
1578607726,1578607726,FR
1578607727,1578608639,DE
1578608640,1578610687,CZ
-1578610688,1578610767,FR
-1578610768,1578610771,CH
-1578610772,1578610775,GB
-1578610776,1578610779,DE
-1578610780,1578610783,FR
-1578610784,1578610799,DE
-1578610800,1578610803,FR
-1578610804,1578610807,GB
-1578610808,1578610819,FR
-1578610820,1578610823,IE
-1578610824,1578610827,FR
-1578610828,1578610831,IE
-1578610832,1578610847,CH
-1578610848,1578610851,PL
-1578610852,1578610855,IE
-1578610856,1578610859,PL
-1578610860,1578610863,FR
-1578610864,1578610867,BE
-1578610868,1578610871,FR
-1578610872,1578610879,PL
-1578610880,1578610943,FR
-1578610944,1578610975,ES
-1578610976,1578611007,PL
-1578611008,1578611023,IT
-1578611024,1578611039,NL
-1578611040,1578611043,ES
-1578611044,1578611047,FR
-1578611048,1578611051,ES
-1578611052,1578611055,NL
-1578611056,1578611071,FR
-1578611072,1578611075,DE
-1578611076,1578611087,FR
-1578611088,1578611103,DE
-1578611104,1578611107,PT
-1578611108,1578611119,DE
-1578611120,1578611123,PL
-1578611124,1578611127,FR
-1578611128,1578611135,PL
-1578611136,1578611151,CH
-1578611152,1578611167,DE
-1578611168,1578611175,PL
-1578611176,1578611183,IE
-1578611184,1578611191,ES
-1578611192,1578611195,FR
-1578611196,1578611199,ES
-1578611200,1578611215,NL
-1578611216,1578611219,GB
-1578611220,1578611223,DE
-1578611224,1578611227,ES
-1578611228,1578611231,PL
-1578611232,1578611235,IT
-1578611236,1578611239,FR
-1578611240,1578611243,IE
-1578611244,1578611251,GB
-1578611252,1578611255,IT
-1578611256,1578611259,FI
-1578611260,1578611263,PL
-1578611264,1578611279,IT
-1578611280,1578611287,FR
-1578611288,1578611291,PL
-1578611292,1578611295,DE
-1578611296,1578611303,GB
-1578611304,1578611327,PL
-1578611328,1578611343,BE
-1578611344,1578611359,FR
-1578611360,1578611375,CH
-1578611376,1578611391,FR
-1578611392,1578611399,GB
-1578611400,1578611407,ES
-1578611408,1578611423,IT
-1578611424,1578611431,GB
-1578611432,1578611435,PL
-1578611436,1578611443,FR
-1578611444,1578611447,NL
-1578611448,1578611455,PL
-1578611456,1578611711,FR
-1578611712,1578611775,CH
-1578611776,1578611783,DE
-1578611784,1578611807,FR
-1578611808,1578611839,CH
-1578611840,1578611855,BE
-1578611856,1578611903,FR
-1578611904,1578611907,PL
-1578611908,1578611911,GB
-1578611912,1578611919,PT
-1578611920,1578611935,BE
-1578611936,1578611943,PL
-1578611944,1578611947,FR
-1578611948,1578611951,GB
-1578611952,1578611967,PL
-1578611968,1578612031,GB
-1578612032,1578612039,DE
-1578612040,1578612047,CH
-1578612048,1578612051,NL
-1578612052,1578612059,DE
-1578612060,1578612063,ES
-1578612064,1578612095,FR
-1578612096,1578612111,PT
-1578612112,1578612115,FR
-1578612116,1578612119,PL
-1578612120,1578612123,IE
-1578612124,1578612127,DE
-1578612128,1578612135,ES
-1578612136,1578612139,FR
-1578612140,1578612143,ES
-1578612144,1578612223,PL
-1578612224,1578612239,IT
-1578612240,1578612255,FR
-1578612256,1578612263,IE
-1578612264,1578612303,FR
-1578612304,1578612319,NL
-1578612320,1578612383,FR
-1578612384,1578612415,PL
-1578612416,1578612487,FR
-1578612488,1578612495,ES
-1578612496,1578612499,DE
-1578612500,1578612503,CZ
-1578612504,1578612507,FR
-1578612508,1578612511,CZ
-1578612512,1578612519,FR
-1578612520,1578612527,PL
-1578612528,1578612539,FR
-1578612540,1578612543,BE
-1578612544,1578612575,FR
-1578612576,1578612579,PL
-1578612580,1578612583,FR
-1578612584,1578612587,IE
-1578612588,1578612607,IT
-1578612608,1578612623,PT
-1578612624,1578612671,FR
-1578612672,1578612687,ES
-1578612688,1578612863,FR
-1578612864,1578612895,NL
-1578612896,1578612903,PL
-1578612904,1578612907,DE
-1578612908,1578612911,PL
-1578612912,1578612927,FR
-1578612928,1578612943,ES
-1578612944,1578612959,GB
-1578612960,1578612975,DE
-1578612976,1578612983,IT
-1578612984,1578612991,FR
-1578612992,1578613247,DE
-1578613248,1578613391,FR
-1578613392,1578613399,GB
-1578613400,1578613407,PL
-1578613408,1578613423,FR
-1578613424,1578613427,DE
-1578613428,1578613435,GB
-1578613436,1578613439,PT
-1578613440,1578613447,GB
-1578613448,1578613451,NL
-1578613452,1578613455,FR
-1578613456,1578613459,IE
-1578613460,1578613467,FR
-1578613468,1578613471,PL
-1578613472,1578613475,ES
-1578613476,1578613479,PT
-1578613480,1578613487,PL
-1578613488,1578613491,FR
-1578613492,1578613495,IE
-1578613496,1578613499,FR
-1578613500,1578613503,PL
-1578613504,1578613567,DE
-1578613568,1578613631,PL
-1578613632,1578613647,DE
-1578613648,1578613663,FR
-1578613664,1578613679,PL
-1578613680,1578613695,ES
-1578613696,1578613711,FR
-1578613712,1578613719,IT
-1578613720,1578613727,IE
-1578613728,1578613735,FR
-1578613736,1578613739,PL
-1578613740,1578613743,FR
-1578613744,1578613751,ES
-1578613752,1578613759,NL
-1578613760,1578613775,DE
-1578613776,1578613779,FR
-1578613780,1578613783,DE
-1578613784,1578613787,BE
-1578613788,1578613791,CZ
-1578613792,1578613823,ES
-1578613824,1578613839,NL
-1578613840,1578613847,GB
-1578613848,1578613855,CZ
-1578613856,1578613871,NL
-1578613872,1578613887,IE
-1578613888,1578613891,IT
-1578613892,1578613895,BE
-1578613896,1578613919,FR
-1578613920,1578613923,GB
-1578613924,1578613927,FR
-1578613928,1578613935,PL
-1578613936,1578613983,FR
-1578613984,1578613999,PL
-1578614000,1578614003,FR
-1578614004,1578614007,PL
-1578614008,1578614015,DE
-1578614016,1578614047,FR
-1578614048,1578614055,FI
-1578614056,1578614071,FR
-1578614072,1578614079,ES
-1578614080,1578614175,FR
-1578614176,1578614191,ES
-1578614192,1578614195,FR
-1578614196,1578614207,GB
-1578614208,1578614271,PL
+1578610688,1578612907,FR
+1578612908,1578612911,ES
+1578612912,1578613735,FR
+1578613736,1578613739,ES
+1578613740,1578614271,FR
1578614272,1578614527,ES
-1578614528,1578614543,GB
-1578614544,1578614559,PL
-1578614560,1578614575,FR
-1578614576,1578614583,DE
-1578614584,1578614591,GB
-1578614592,1578614623,CZ
-1578614624,1578614655,BE
-1578614656,1578631167,FR
+1578614528,1578631167,FR
1578631168,1578663935,RO
1578663936,1578762239,RU
1578762240,1578795007,BG
@@ -72892,28 +28792,7 @@
1578991616,1579024383,KW
1579024384,1579057151,GB
1579057152,1579089919,LV
-1579089920,1579090431,GB
-1579090432,1579090463,NL
-1579090464,1579091759,GB
-1579091760,1579091775,IL
-1579091776,1579091839,GB
-1579091840,1579091855,US
-1579091856,1579093759,GB
-1579093760,1579094015,NL
-1579094016,1579094271,GB
-1579094272,1579094527,NL
-1579094528,1579094783,GB
-1579094784,1579095039,NL
-1579095040,1579096319,GB
-1579096320,1579096351,DK
-1579096352,1579104511,GB
-1579104512,1579104767,US
-1579104768,1579105023,GB
-1579105024,1579105087,NL
-1579105088,1579105119,DE
-1579105120,1579105535,GB
-1579105536,1579105599,NL
-1579105600,1579106303,GB
+1579089920,1579106303,GB
1579106304,1579122687,DE
1579122688,1579155455,RU
1579155456,1579679743,IT
@@ -72926,14 +28805,8 @@
1580015616,1580048383,UA
1580048384,1580064767,RU
1580064768,1580072959,DE
-1580072960,1580075071,PT
-1580075072,1580075199,GB
-1580075200,1580104959,PT
-1580104960,1580105215,CH
-1580105216,1580134399,PT
-1580134400,1580134575,ES
-1580134576,1580134583,GB
-1580134584,1580136447,ES
+1580072960,1580134399,PT
+1580134400,1580136447,ES
1580136448,1580138495,PT
1580138496,1580204031,IT
1580204032,1580335103,RO
@@ -72948,12 +28821,8 @@
1581809664,1581826047,BG
1581826048,1581842431,GB
1581842432,1581858815,BG
-1581858816,1581868287,IT
-1581868288,1581869055,US
-1581869056,1581875199,IT
-1581875200,1581890559,TR
-1581890560,1581891071,GB
-1581891072,1581891583,TR
+1581858816,1581875199,IT
+1581875200,1581891583,TR
1581891584,1581907967,RU
1581907968,1581924351,IT
1581924352,1581940735,UA
@@ -72980,158 +28849,119 @@
1582252032,1582268415,TR
1582268416,1582284799,DE
1582284800,1582301183,BH
-1582301184,1583176703,IT
-1583176704,1583177727,US
-1583177728,1583349759,IT
+1582301184,1582452223,IT
+1582452224,1582452231,SI
+1582452232,1582695151,IT
+1582695152,1582695159,SI
+1582695160,1582701383,IT
+1582701384,1582701391,SI
+1582701392,1582704639,IT
+1582704640,1582705663,SI
+1582705664,1582853903,IT
+1582853904,1582853919,SI
+1582853920,1583349759,IT
1583349760,1583611903,SA
1583611904,1583615999,LV
-1583616000,1583617791,NL
-1583617792,1583617844,US
-1583617845,1583617845,US
-1583617846,1583618047,US
-1583618048,1583619839,NL
-1583619840,1583620095,US
+1583616000,1583620095,NL
1583620096,1583624191,IT
-1583624192,1583628287,RS
+1583624192,1583624447,XK
+1583624448,1583628287,RS
1583628288,1583632383,DE
1583632384,1583636479,RU
1583636480,1583640575,MK
1583640576,1583644671,NL
-1583644672,1583646463,DE
-1583646464,1583646719,GB
-1583646720,1583648767,DE
+1583644672,1583648767,DE
1583648768,1583652863,CH
1583652864,1583656959,FR
1583656960,1583665151,RU
1583665152,1583669247,UA
1583669248,1583673343,GE
-1583673344,1583673991,DE
-1583673992,1583673999,GB
-1583674000,1583677439,DE
+1583673344,1583677439,DE
1583677440,1583681535,FI
1583681536,1583685631,PL
1583685632,1583689727,DE
1583689728,1583693823,IT
-1583693824,1583693871,RU
-1583693872,1583693879,A2
-1583693880,1583697919,RU
+1583693824,1583697919,RU
1583697920,1583702015,TR
1583702016,1583706111,RU
-1583706112,1583710207,GI
-1583710208,1583712255,IR
-1583712256,1583714303,AE
+1583710208,1583714303,IR
1583714304,1583722495,GB
1583722496,1583726591,IR
-1583726592,1583727359,BG
-1583727360,1583727871,MK
-1583727872,1583730687,BG
-1583730688,1583733247,DK
-1583733248,1583733311,DE
-1583733312,1583734783,DK
+1583726592,1583730687,BG
+1583730688,1583734783,DK
1583734784,1583738879,LV
1583738880,1583742975,IR
1583742976,1583747071,TR
1583747072,1583751167,RU
1583751168,1583755263,NO
-1583755264,1583755414,NL
-1583755415,1583755424,RU
-1583755425,1583759359,NL
+1583755264,1583759359,NL
1583759360,1583763455,TR
1583763456,1583767551,RU
1583767552,1583771647,AT
1583771648,1583775743,RU
1583775744,1583779839,IT
-1583779840,1583779855,GB
-1583779856,1583779863,BG
-1583779864,1583780135,GB
-1583780136,1583780143,IT
-1583780144,1583780255,GB
-1583780256,1583780263,IT
-1583780264,1583780335,GB
+1583779840,1583779847,GB
+1583779848,1583779855,IT
+1583779856,1583780263,GB
+1583780264,1583780271,IT
+1583780272,1583780335,GB
1583780336,1583780343,IT
1583780344,1583780423,GB
1583780424,1583780431,IT
-1583780432,1583780767,GB
+1583780432,1583780607,GB
+1583780608,1583780615,IT
+1583780616,1583780767,GB
1583780768,1583780775,IT
-1583780776,1583780943,GB
-1583780944,1583780951,IT
-1583780952,1583781127,GB
-1583781128,1583781135,IT
-1583781136,1583781279,GB
-1583781280,1583781295,IT
-1583781296,1583781359,GB
+1583780776,1583780791,GB
+1583780792,1583780799,IT
+1583780800,1583781031,GB
+1583781032,1583781039,IT
+1583781040,1583781359,GB
1583781360,1583781367,IT
-1583781368,1583781447,GB
-1583781448,1583781455,IT
-1583781456,1583781863,GB
+1583781368,1583781863,GB
1583781864,1583781871,IT
-1583781872,1583782279,GB
-1583782280,1583782287,IT
-1583782288,1583782431,GB
+1583781872,1583781911,GB
+1583781912,1583781919,IT
+1583781920,1583782415,GB
+1583782416,1583782423,IT
+1583782424,1583782431,GB
1583782432,1583782439,IT
-1583782440,1583782495,GB
-1583782496,1583782503,IT
-1583782504,1583782975,GB
+1583782440,1583782703,GB
+1583782704,1583782711,IT
+1583782712,1583782975,GB
1583782976,1583782983,IT
-1583782984,1583783479,GB
+1583782984,1583783119,GB
+1583783120,1583783127,IT
+1583783128,1583783479,GB
1583783480,1583783487,IT
-1583783488,1583783575,GB
-1583783576,1583783583,BG
-1583783584,1583783935,GB
-1583783936,1583788031,EU
+1583783488,1583783495,GB
+1583783496,1583783503,IT
+1583783504,1583783935,GB
1583788032,1583792127,TM
1583792128,1583796223,IE
-1583796224,1583800063,DE
-1583800064,1583800095,AT
-1583800096,1583800319,DE
+1583796224,1583800319,DE
1583800320,1583804415,ME
1583804416,1583808511,GB
1583808512,1583812607,MD
-1583812608,1583815167,NL
-1583815168,1583815215,US
-1583815216,1583815343,NL
-1583815344,1583815351,US
-1583815352,1583815679,NL
-1583815680,1583815711,DE
-1583815712,1583815727,US
-1583815728,1583815807,NL
-1583815808,1583815935,US
-1583815936,1583816191,GB
-1583816192,1583816255,DE
-1583816256,1583816351,NL
-1583816352,1583816431,GB
-1583816432,1583816703,NL
-1583816704,1583817616,TR
-1583817617,1583817624,CY
-1583817625,1583820799,TR
+1583812608,1583816703,NL
+1583816704,1583820799,TR
1583820800,1583824895,LV
1583824896,1583828991,SI
1583828992,1583833087,RU
1583833088,1583837183,CH
1583841280,1583845375,FR
-1583845376,1583845535,NL
-1583845536,1583845567,BE
-1583845568,1583845727,NL
-1583845728,1583845743,BE
-1583845744,1583848639,NL
-1583848640,1583848703,BE
-1583848704,1583848735,NL
-1583848736,1583848799,BE
-1583848800,1583849471,NL
-1583849472,1583850751,DE
-1583850752,1583850943,AT
-1583850944,1583850951,DE
-1583850952,1583850959,AT
-1583850960,1583850999,DE
-1583851000,1583851007,AT
-1583851008,1583853567,DE
+1583845376,1583849471,NL
+1583849472,1583853567,DE
1583853568,1583857663,RU
1583857664,1583861759,SE
1583861760,1583865855,LU
1583865856,1583869951,RU
1583869952,1583874047,KZ
-1583874048,1584398335,BE
-1584398336,1584660479,CZ
+1583874048,1584119935,BE
+1584119936,1584120063,FR
+1584120064,1584398335,BE
+1584398336,1584529407,CZ
+1584529408,1584660479,DE
1584660480,1584857087,GB
1584857088,1584859135,DE
1584859136,1584922623,GB
@@ -73144,51 +28974,38 @@
1585199104,1585201151,NL
1585201152,1585205247,IT
1585205248,1585207295,FR
-1585207296,1585209855,NL
-1585209856,1585210111,IQ
-1585210112,1585210367,IR
-1585210368,1585211391,NL
+1585207296,1585209343,NL
1585211392,1585213439,CZ
1585213440,1585214463,GB
1585214464,1585217535,NL
1585217536,1585219583,FR
1585219584,1585221631,NL
1585221632,1585223679,SK
-1585223680,1585224447,FR
-1585224448,1585224703,GP
-1585224704,1585224959,FR
+1585223680,1585224959,FR
1585224960,1585225215,RE
1585225216,1585225471,FR
1585225472,1585225727,YT
-1585225728,1585227775,UA
-1585227776,1585231359,RU
-1585231360,1585231615,NL
-1585231616,1585231871,RU
+1585225728,1585227007,UA
+1585227008,1585227263,RU
+1585227264,1585227775,UA
+1585227776,1585231871,RU
1585231872,1585233919,CZ
1585233920,1585238015,RU
1585238016,1585240063,DE
-1585240064,1585241087,MQ
-1585241088,1585242111,GP
+1585240064,1585240575,FR
+1585240576,1585241855,MQ
+1585241856,1585242111,GP
1585242112,1585244159,RU
1585244160,1585246207,FR
1585246208,1585248255,RU
1585248256,1585250303,CZ
1585250304,1585254399,RU
1585254400,1585256447,GB
-1585256448,1585256959,DE
-1585256960,1585257215,FR
-1585257216,1585258495,DE
+1585256448,1585258495,DE
1585258496,1585260543,GB
1585260544,1585264639,RU
-1585264640,1585265015,MT
-1585265016,1585265039,GG
-1585265040,1585265663,MT
-1585265664,1585265695,FR
-1585265696,1585265727,IM
-1585265728,1585266175,FR
-1585266176,1585266271,MT
-1585266272,1585266287,MA
-1585266288,1585266687,MT
+1585264640,1585265663,MT
+1585265664,1585266687,IM
1585266688,1585270783,DE
1585270784,1585272831,IT
1585272832,1585274879,RU
@@ -73224,9 +29041,7 @@
1585336320,1585338367,SE
1585338368,1585340415,RU
1585340416,1585342463,AT
-1585342464,1585343311,GB
-1585343312,1585343319,DE
-1585343320,1585344511,GB
+1585342464,1585344511,GB
1585344512,1585346559,FR
1585346560,1585348607,GB
1585348608,1585350655,CH
@@ -73257,10 +29072,8 @@
1585400064,1585400319,IL
1585400320,1585400575,GB
1585400576,1585400831,FR
-1585400832,1585401088,DE
-1585401089,1585401343,NL
-1585401344,1585401599,DE
-1585401600,1585401855,GB
+1585400832,1585401087,NL
+1585401344,1585401855,GB
1585401856,1585403903,IT
1585403904,1585405951,RU
1585405952,1585407999,GB
@@ -73279,44 +29092,13 @@
1585440768,1585442815,IT
1585442816,1585446911,RU
1585446912,1585577983,KW
-1585577984,1585709055,UA
+1585577984,1585643519,UA
+1585643520,1585709055,RU
1585709056,1585840127,PT
1585840128,1585971199,DE
1585971200,1585979391,AT
1585979392,1585987583,GB
-1585987584,1585988095,SE
-1585988096,1585988103,IT
-1585988104,1585988119,SE
-1585988120,1585988123,US
-1585988124,1585988351,SE
-1585988352,1585988359,DE
-1585988360,1585988479,SE
-1585988480,1585988483,US
-1585988484,1585989307,SE
-1585989308,1585989311,US
-1585989312,1585989671,SE
-1585989672,1585989679,NL
-1585989680,1585990655,SE
-1585990656,1585990659,US
-1585990660,1585990847,SE
-1585990848,1585990851,US
-1585990852,1585990911,SE
-1585990912,1585990915,US
-1585990916,1585991167,SE
-1585991168,1585991171,IT
-1585991172,1585991683,SE
-1585991684,1585991687,IT
-1585991688,1585991727,SE
-1585991728,1585991731,RU
-1585991732,1585991935,SE
-1585991936,1585991939,US
-1585991940,1585994511,SE
-1585994512,1585994519,NL
-1585994520,1585994543,SE
-1585994544,1585994547,MY
-1585994548,1585995647,SE
-1585995648,1585995651,US
-1585995652,1585995775,SE
+1585987584,1585995775,SE
1585995776,1586003967,AT
1586003968,1586012159,SK
1586012160,1586020351,DE
@@ -73324,14 +29106,13 @@
1586028544,1586036735,GB
1586036736,1586061311,RU
1586061312,1586069503,SE
-1586069504,1586077695,DE
+1586069504,1586073599,DK
+1586073600,1586077695,DE
1586077696,1586085887,GE
1586085888,1586110463,RU
1586110464,1586118655,IT
1586118656,1586126847,DK
-1586126848,1586128383,CZ
-1586128384,1586128639,SK
-1586128640,1586135039,CZ
+1586126848,1586135039,CZ
1586135040,1586143231,RU
1586143232,1586151423,IT
1586151424,1586159615,TR
@@ -73345,13 +29126,8 @@
1586216960,1586225151,BG
1586225152,1586233343,RU
1586233344,1586241535,FR
-1586241536,1586243779,SE
-1586243780,1586243787,NO
-1586243788,1586244559,SE
-1586244560,1586244575,FI
-1586244576,1586249727,SE
+1586241536,1586249727,SE
1586249728,1586257919,SI
-1586257920,1586266111,EU
1586266112,1586274303,RU
1586274304,1586282495,BE
1586282496,1586298879,RU
@@ -73365,37 +29141,28 @@
1586356224,1586372607,RU
1586372608,1586380799,JO
1586380800,1586388991,GB
-1586388992,1586389518,ES
-1586389519,1586389774,US
-1586389775,1586397183,ES
-1586397184,1586399231,LV
+1586388992,1586389503,ES
+1586389504,1586389759,US
+1586389760,1586397183,ES
1586399232,1586401279,RU
1586401280,1586403327,IT
1586403328,1586405375,IS
1586405376,1586407423,AT
1586407424,1586409471,GB
-1586409472,1586411519,IT
-1586411520,1586411775,GB
-1586411776,1586412287,US
-1586412288,1586412543,HK
-1586412544,1586412799,GB
-1586412800,1586413055,US
-1586413056,1586413567,GB
+1586411520,1586412031,GB
+1586412032,1586412287,US
+1586412288,1586413567,GB
1586413568,1586415615,IT
-1586415616,1586416383,ES
-1586416384,1586417663,AD
+1586415616,1586416255,ES
+1586416256,1586417663,AD
1586417664,1586419711,NL
1586419712,1586421759,DE
1586421760,1586423807,SE
1586423808,1586425855,CZ
1586425856,1586427903,NL
-1586427904,1586428159,CH
-1586428160,1586429407,FR
-1586429408,1586429423,US
-1586429424,1586429951,FR
-1586429952,1586431999,CH
+1586427904,1586431999,CH
1586432000,1586434047,DK
-1586434048,1586436095,BE
+1586434048,1586436095,FR
1586436096,1586438143,ES
1586438144,1586446335,RU
1586446336,1586448383,NO
@@ -73404,23 +29171,12 @@
1586452480,1586454527,CH
1586454528,1586456575,IT
1586456576,1586458623,GB
-1586458624,1586458911,FR
-1586458912,1586458943,BE
-1586458944,1586458975,CH
-1586458976,1586459007,DE
-1586459008,1586459039,ES
-1586459040,1586459071,GB
-1586459072,1586459103,IT
-1586459104,1586459135,NL
-1586459136,1586460527,FR
-1586460528,1586460543,ES
-1586460544,1586460671,FR
+1586458624,1586460671,FR
1586460672,1586462719,GB
1586462720,1586464767,RU
1586464768,1586466815,ES
1586466816,1586468863,RU
1586468864,1586470911,IT
-1586470912,1586472959,GB
1586472960,1586475007,CZ
1586475008,1586477055,GR
1586477056,1586479103,BE
@@ -73446,12 +29202,12 @@
1587179520,1587183615,UA
1587183616,1587199999,RU
1587200000,1587216383,UA
-1587216384,1587319295,BG
-1587319296,1587319551,DE
-1587319552,1587347455,BG
+1587216384,1587325951,BG
+1587325952,1587326975,GR
+1587326976,1587347455,BG
1587347456,1587412991,NL
1587412992,1587417087,RU
-1587417088,1587425279,UA
+1587421184,1587425279,UA
1587425280,1587429375,UZ
1587429376,1587437567,UA
1587437568,1587445759,RU
@@ -73464,27 +29220,33 @@
1587511296,1587544063,IL
1587544064,1588068351,IT
1588068352,1588592639,GB
-1588592640,1588621311,RO
+1588592640,1588593663,RO
+1588593664,1588593919,MD
+1588593920,1588609023,RO
+1588609024,1588613119,MD
+1588613120,1588621311,RO
1588621312,1588625407,MD
-1588625408,1588689407,RO
-1588689408,1588689919,DE
-1588689920,1588723711,RO
+1588625408,1588641791,RO
+1588641792,1588643839,ES
+1588643840,1588653055,RO
+1588653056,1588654079,MD
+1588654080,1588673535,RO
+1588673536,1588674559,MD
+1588674560,1588723711,RO
1588723712,1588854783,UA
1588854784,1588985855,RU
1588985856,1589182463,IR
1589182464,1589198847,OM
1589198848,1589200895,FR
1589200896,1589202943,IT
-1589202944,1589203711,SE
-1589203712,1589203775,NL
-1589203776,1589203839,SE
-1589203840,1589203967,NL
-1589203968,1589204479,SE
-1589204480,1589204991,NL
+1589202944,1589204991,SE
1589204992,1589207039,DE
1589207040,1589215231,IT
1589215232,1589247999,GB
-1589248000,1589280767,NO
+1589248000,1589256191,NO
+1589256192,1589258239,SE
+1589258240,1589264383,LV
+1589264384,1589280767,NL
1589280768,1589313535,DE
1589313536,1589346303,LB
1589346304,1589379071,KW
@@ -73495,8 +29257,13 @@
1589510144,1589542911,RU
1589542912,1589575679,BG
1589575680,1589608447,RU
-1589608448,1589612543,DK
-1589612544,1589620735,SE
+1589608448,1589608703,SE
+1589608704,1589608959,DK
+1589608960,1589609215,SE
+1589609216,1589611519,DK
+1589611520,1589611775,SE
+1589611776,1589612287,DK
+1589612288,1589620735,SE
1589620736,1589641215,DK
1589641216,1590034431,GB
1590034432,1590036479,RU
@@ -73517,9 +29284,7 @@
1590069248,1590071295,AT
1590071296,1590073343,FR
1590073344,1590075391,NL
-1590075392,1590077247,BE
-1590077248,1590077279,NL
-1590077280,1590077439,BE
+1590075392,1590077439,BE
1590077440,1590079487,GB
1590079488,1590079743,GP
1590079744,1590081535,FR
@@ -73543,19 +29308,10 @@
1590116352,1590120447,RU
1590120448,1590122495,IT
1590122496,1590124543,DE
-1590124544,1590126591,CH
1590126592,1590128639,RU
1590128640,1590130687,FI
1590130688,1590132735,FR
-1590132736,1590132991,DE
-1590132992,1590133567,GB
-1590133568,1590133599,DE
-1590133600,1590133657,GB
-1590133658,1590133659,FR
-1590133660,1590133663,GB
-1590133664,1590133667,FR
-1590133668,1590134783,GB
-1590134784,1590136831,ES
+1590132736,1590134783,GB
1590136832,1590138879,GB
1590138880,1590140927,FR
1590140928,1590142975,UA
@@ -73565,15 +29321,10 @@
1590149120,1590151167,CZ
1590151168,1590153215,TR
1590153216,1590157311,RU
-1590157312,1590158335,IE
-1590158336,1590161407,GB
+1590157312,1590161407,GB
1590161408,1590163455,DE
1590163456,1590165503,NL
-1590165504,1590176643,AE
-1590176644,1590176644,US
-1590176645,1590176831,AE
-1590176832,1590176863,A2
-1590176864,1590689791,AE
+1590165504,1590689791,AE
1590689792,1591214079,NL
1591214080,1591738367,DE
1591738368,1592000511,BE
@@ -73583,9 +29334,7 @@
1592012800,1592016895,CH
1592016896,1592020991,GB
1592020992,1592025087,SK
-1592025088,1592027903,DE
-1592027904,1592027935,GB
-1592027936,1592029183,DE
+1592025088,1592029183,DE
1592029184,1592033279,RU
1592033280,1592037375,NL
1592037376,1592041471,CH
@@ -73596,47 +29345,17 @@
1592046108,1592046111,GB
1592046112,1592049663,FR
1592049664,1592053759,RU
-1592053760,1592054271,NL
-1592054272,1592054527,US
-1592054528,1592054655,NL
-1592054656,1592054783,US
-1592054784,1592055295,AE
-1592055296,1592057727,NL
-1592057728,1592057735,IN
-1592057736,1592057855,NL
+1592053760,1592057855,NL
1592057856,1592061951,RS
1592061952,1592066047,RU
-1592066048,1592067583,US
-1592067584,1592067711,NO
-1592067712,1592068095,NL
-1592068096,1592068607,US
-1592068608,1592068863,CY
-1592068864,1592068895,US
-1592068896,1592068927,NL
-1592068928,1592068959,US
-1592068960,1592068991,CY
-1592068992,1592069087,US
-1592069088,1592069247,CY
-1592069248,1592069375,RU
-1592069376,1592069407,US
-1592069408,1592069631,CY
-1592069632,1592069711,NL
-1592069712,1592069727,CY
-1592069728,1592069759,NL
-1592069760,1592069839,CY
-1592069840,1592069887,NL
-1592069888,1592070143,CY
+1592066048,1592066559,CY
+1592066560,1592067583,US
+1592067584,1592070143,CY
1592070144,1592074239,RU
1592074240,1592078335,SK
1592078336,1592082431,NL
1592082432,1592086527,GB
-1592086528,1592087079,CZ
-1592087080,1592087087,PL
-1592087088,1592087167,CZ
-1592087168,1592087175,PL
-1592087176,1592087295,CZ
-1592087296,1592088191,PL
-1592088192,1592090623,CZ
+1592086528,1592090623,CZ
1592090624,1592094719,RU
1592094720,1592098815,RS
1592098816,1592102911,GB
@@ -73694,7 +29413,6 @@
1592317952,1592319999,PL
1592320000,1592322047,LT
1592322048,1592324095,RU
-1592326144,1592328191,UA
1592328192,1592393727,RU
1592393728,1592459263,SE
1592459264,1592524799,TR
@@ -73723,35 +29441,17 @@
1593098240,1593114623,CH
1593114624,1593122815,DK
1593122816,1593131007,SE
-1593131008,1593147135,GB
-1593147136,1593147391,EU
+1593131008,1593147391,GB
1593147392,1593163775,RU
1593163776,1593180159,AT
1593180160,1593196543,NO
-1593196544,1593202687,SE
-1593202688,1593202815,NO
-1593202816,1593203455,SE
-1593203456,1593203487,NO
-1593203488,1593204087,SE
-1593204088,1593204095,FI
-1593204096,1593205567,SE
-1593205568,1593205631,DK
-1593205632,1593209151,SE
-1593209152,1593209155,GR
-1593209156,1593209159,HU
-1593209160,1593209163,FI
-1593209164,1593209167,CH
-1593209168,1593210879,SE
-1593210880,1593211391,NO
-1593211392,1593212927,SE
+1593196544,1593212927,SE
1593212928,1593229311,PL
1593229312,1593245695,EE
1593245696,1593247743,NL
1593247744,1593249791,IT
1593249792,1593251839,RU
-1593251840,1593252159,FR
-1593252160,1593252192,GB
-1593252193,1593253631,FR
+1593251840,1593253631,FR
1593253632,1593253887,ES
1593253888,1593255935,CZ
1593255936,1593257983,DE
@@ -73782,7 +29482,13 @@
1593311232,1593343999,UA
1593344000,1593376767,HU
1593376768,1593409535,JO
-1593409536,1593442303,DE
+1593409536,1593421055,DE
+1593421056,1593421311,GB
+1593421312,1593421567,FR
+1593421568,1593421823,GB
+1593421824,1593422591,DE
+1593422592,1593422847,GB
+1593422848,1593442303,DE
1593442304,1593475071,BA
1593475072,1593491455,HR
1593491456,1593499647,DE
@@ -73812,11 +29518,71 @@
1596588032,1596719103,BG
1596719104,1596850175,IE
1596850176,1596866559,CZ
-1596866560,1596882943,RU
-1596882944,1596901375,CZ
-1596901376,1596907519,BY
+1596866560,1596887039,RU
+1596887040,1596889087,UA
+1596889088,1596889599,KZ
+1596889600,1596889855,CZ
+1596889856,1596890111,UA
+1596890112,1596890623,RU
+1596890624,1596891135,CZ
+1596891136,1596900351,RU
+1596900352,1596907519,BY
1596907520,1596915711,RU
-1596915712,1596981247,CZ
+1596915712,1596925951,CZ
+1596925952,1596932095,RU
+1596932096,1596940543,CZ
+1596940544,1596940799,RU
+1596940800,1596941055,UA
+1596941056,1596941311,CZ
+1596941312,1596942335,RU
+1596942336,1596945407,UA
+1596945408,1596945919,CZ
+1596945920,1596946175,RU
+1596946176,1596946431,NL
+1596946432,1596947455,RU
+1596947456,1596948479,UA
+1596948480,1596950527,BY
+1596950528,1596950783,UA
+1596950784,1596951551,CZ
+1596951552,1596952063,NL
+1596952064,1596952575,UA
+1596952576,1596952831,RU
+1596952832,1596953599,CZ
+1596953600,1596954623,UA
+1596954624,1596954879,RU
+1596954880,1596955391,CZ
+1596955392,1596955647,RU
+1596955648,1596956415,CZ
+1596956416,1596956671,RU
+1596956672,1596956927,CZ
+1596956928,1596956963,DE
+1596956964,1596956964,RU
+1596956965,1596957183,DE
+1596957184,1596957695,UA
+1596957696,1596958207,CZ
+1596958208,1596958463,RU
+1596958464,1596958719,UA
+1596958720,1596961023,RU
+1596961024,1596961279,CZ
+1596961280,1596961791,SK
+1596961792,1596962815,RU
+1596962816,1596963327,AM
+1596963328,1596963839,CZ
+1596963840,1596964095,KZ
+1596964096,1596964607,CZ
+1596964608,1596965887,RU
+1596965888,1596966911,KG
+1596966912,1596967167,RU
+1596967168,1596967423,CZ
+1596967424,1596967935,RU
+1596967936,1596968959,UA
+1596968960,1596973055,BA
+1596973056,1596975103,BY
+1596975104,1596975615,CZ
+1596975616,1596978431,RU
+1596978432,1596978944,CZ
+1596978945,1596978945,RU
+1596978946,1596981247,CZ
1596981248,1597243391,PL
1597243392,1597505535,RU
1597505536,1597767679,KZ
@@ -73842,19 +29608,10 @@
1599078400,1599094783,SE
1599094784,1599111167,RU
1599111168,1599127551,IR
-1599127552,1599133695,CZ
-1599133696,1599133823,SK
-1599133824,1599143935,CZ
+1599127552,1599143935,CZ
1599143936,1599160319,UA
1599160320,1599176703,IR
-1599176704,1599187967,FR
-1599187968,1599188223,DE
-1599188224,1599188991,FR
-1599188992,1599189503,DE
-1599189504,1599189759,FR
-1599189760,1599190015,DE
-1599190016,1599190271,EU
-1599190272,1599193087,FR
+1599176704,1599193087,FR
1599193088,1599209471,RU
1599209472,1599242239,IR
1599242240,1599258623,CZ
@@ -73862,14 +29619,18 @@
1599324160,1599340543,IE
1599340544,1599356927,RU
1599356928,1599373311,BH
-1599373312,1599438847,RU
+1599373312,1599406079,RU
+1599406080,1599422463,NL
+1599422464,1599438847,RU
1599438848,1599455231,RS
1599455232,1599471615,CZ
1599471616,1599487999,MK
1599488000,1599504383,IL
1599504384,1599520767,AZ
1599520768,1599537151,RU
-1599537152,1599553535,BG
+1599537152,1599550719,BG
+1599550720,1599550975,RS
+1599550976,1599553535,BG
1599553536,1599561727,KG
1599561728,1599565823,GB
1599565824,1599567871,SY
@@ -73879,15 +29640,10 @@
1599602688,1599864831,DE
1599864832,1600126975,PT
1600126976,1600389119,NL
-1600389120,1600397311,EU
1600397312,1600401407,DE
-1600401408,1600442367,EU
1600442368,1600446463,DE
-1600446464,1600453119,EU
1600453120,1600453631,IT
-1600453632,1600456703,EU
1600456704,1600457727,DE
-1600457728,1600520191,EU
1600520192,1600651263,SK
1600651264,1600684031,GE
1600684032,1600749567,RU
@@ -73895,12 +29651,7 @@
1600782336,1600880639,RU
1600880640,1600913407,AL
1600913408,1600946175,PL
-1600946176,1600963167,RU
-1600963168,1600963175,UA
-1600963176,1600963183,RU
-1600963184,1600963191,BY
-1600963192,1600963199,KZ
-1600963200,1600978943,RU
+1600946176,1600978943,RU
1600978944,1601011711,SE
1601011712,1601044479,UA
1601044480,1601077247,RU
@@ -73909,58 +29660,33 @@
1601142784,1601175551,UA
1601175552,1601699839,DE
1601699840,1602224127,ES
-1602224128,1602224515,NL
-1602224516,1602224523,DE
-1602224524,1602226175,NL
+1602224128,1602226175,NL
1602226176,1602228223,GB
1602228224,1602230270,FR
1602230271,1602230271,DE
1602230272,1602232319,DK
1602232320,1602234367,CH
-1602234368,1602235903,FR
-1602235904,1602235967,ES
-1602235968,1602236159,FR
-1602236160,1602236223,GB
-1602236224,1602236287,FR
-1602236288,1602236335,GB
-1602236336,1602236383,FR
-1602236384,1602238463,GB
+1602234368,1602236415,FR
+1602236416,1602238463,GB
1602238464,1602240511,TR
1602240512,1602242559,BY
-1602242560,1602244031,FR
-1602244032,1602244035,GB
-1602244036,1602244039,ES
-1602244040,1602244607,FR
+1602242560,1602244607,FR
1602244608,1602246655,CH
1602246656,1602248703,NL
1602248704,1602250751,BE
1602250752,1602252799,NO
1602252800,1602254847,SE
-1602254848,1602255103,PT
-1602255104,1602255359,HU
-1602255360,1602255615,US
-1602255616,1602255871,PT
-1602255872,1602256895,HU
+1602254848,1602256895,LU
1602256896,1602258943,GB
1602258944,1602260991,RU
1602260992,1602263039,FR
1602263040,1602265087,ES
1602265088,1602267135,RU
-1602267136,1602267199,DE
-1602267200,1602267263,FR
-1602267264,1602267327,GB
-1602267328,1602267391,ES
-1602267392,1602269183,RO
+1602267136,1602269183,RO
1602269184,1602271231,RU
1602271232,1602273279,MK
-1602273280,1602273535,FR
-1602273536,1602273791,GB
-1602273792,1602274559,IN
-1602274560,1602274815,IE
-1602274816,1602275071,GB
-1602275072,1602275679,DE
-1602275680,1602275695,CA
-1602275696,1602279423,DE
+1602273280,1602275327,CA
+1602275328,1602279423,DE
1602279424,1602281471,GB
1602281472,1602283519,RU
1602283520,1602285567,HR
@@ -73970,15 +29696,9 @@
1602291712,1602293759,SA
1602293760,1602295807,GB
1602295808,1602297855,NL
-1602297856,1602298367,IL
-1602298368,1602298431,MT
-1602298432,1602298879,IL
-1602298880,1602299391,MT
-1602299392,1602299903,GB
+1602297856,1602299903,IL
1602299904,1602301951,GR
-1602301952,1602303311,DE
-1602303312,1602303319,US
-1602303320,1602303999,DE
+1602301952,1602303999,DE
1602304000,1602306047,RU
1602306048,1602308095,GB
1602308096,1602310143,RU
@@ -73987,9 +29707,7 @@
1602314240,1602316287,CZ
1602316288,1602318335,GB
1602318336,1602320383,ES
-1602320384,1602322687,NL
-1602322688,1602322703,IE
-1602322704,1602324479,NL
+1602320384,1602324479,NL
1602324480,1602328575,RU
1602328576,1602330623,ES
1602330624,1602336767,RU
@@ -74015,10 +29733,7 @@
1602375680,1602377727,BY
1602377728,1602379775,PS
1602379776,1602383871,GB
-1602383872,1602383873,DE
-1602383874,1602384895,EU
-1602384896,1602385151,DE
-1602385152,1602385919,EU
+1602383872,1602385919,DE
1602385920,1602387967,AT
1602387968,1602390015,RU
1602390016,1602392063,IT
@@ -74030,9 +29745,7 @@
1602402304,1602404351,LU
1602404352,1602405631,GB
1602405632,1602405759,CN
-1602405760,1602405887,GB
-1602405888,1602406015,CN
-1602406016,1602406399,GB
+1602405760,1602406399,GB
1602406400,1602408447,DE
1602408448,1602410495,DK
1602410496,1602412543,NO
@@ -74044,37 +29757,18 @@
1602426880,1602428927,RU
1602428928,1602430975,PL
1602430976,1602433023,IT
-1602433024,1602433471,HU
-1602433472,1602433479,CY
-1602433480,1602435071,HU
+1602433024,1602435071,HU
1602435072,1602437119,IT
1602437120,1602439167,GB
1602439168,1602441215,RU
1602441216,1602443263,GB
1602443264,1602445311,RU
1602445312,1602447359,DE
-1602447360,1602447871,GB
-1602447872,1602448383,DE
-1602448384,1602448895,NL
-1602448896,1602449407,GB
+1602447360,1602449407,GB
1602449408,1602451455,LV
1602451456,1602453503,DE
1602453504,1602455551,SK
-1602455552,1602455690,FR
-1602455691,1602455691,BE
-1602455692,1602456015,FR
-1602456016,1602456025,ES
-1602456026,1602456026,DE
-1602456027,1602456027,NL
-1602456028,1602456028,IT
-1602456029,1602456029,ES
-1602456030,1602456030,PT
-1602456031,1602456031,ES
-1602456032,1602456175,FR
-1602456176,1602456183,ES
-1602456184,1602457471,FR
-1602457472,1602457487,BE
-1602457488,1602457599,FR
+1602455552,1602457599,FR
1602457600,1602459647,RU
1602459648,1602461695,GB
1602461696,1602465791,ES
@@ -74094,43 +29788,23 @@
1602813952,1602846719,RU
1602846720,1602879487,GE
1602879488,1602879743,RE
-1602879744,1602880255,FR
-1602880256,1602881535,RE
-1602881536,1602882559,FR
-1602882560,1602882815,RE
-1602882816,1602883327,FR
-1602883328,1602884607,RE
-1602884608,1602889215,FR
-1602889216,1602889727,RE
-1602889728,1602890239,FR
-1602890240,1602891775,RE
-1602891776,1602892287,FR
-1602892288,1602892799,RE
-1602892800,1602893823,FR
-1602893824,1602894335,RE
-1602894336,1602894847,FR
+1602879744,1602882303,MQ
+1602882304,1602882559,RE
+1602882560,1602885631,MQ
+1602885632,1602885887,RE
+1602885888,1602891775,MQ
+1602891776,1602892031,RE
+1602892032,1602894847,MQ
1602894848,1602895103,RE
-1602895104,1602896924,FR
+1602895104,1602896383,MQ
+1602896384,1602896639,RE
+1602896640,1602896924,MQ
1602896925,1602896925,RE
-1602896926,1602898431,FR
-1602898432,1602898943,MQ
-1602898944,1602900223,FR
-1602900224,1602900991,MQ
-1602900992,1602901503,FR
-1602901504,1602902783,MQ
-1602902784,1602903807,FR
-1602903808,1602904063,MQ
-1602904064,1602904319,RE
-1602904320,1602906111,FR
-1602906112,1602908415,RE
-1602908416,1602909183,FR
-1602909184,1602910207,RE
-1602910208,1602910719,FR
-1602910720,1602910975,RE
-1602910976,1602911231,FR
-1602911232,1602911487,RE
-1602911488,1602911743,FR
-1602911744,1602912255,RE
+1602896926,1602897407,MQ
+1602897408,1602897663,RE
+1602897664,1602907135,MQ
+1602907136,1602907391,RE
+1602907392,1602912255,MQ
1602912256,1602928639,GB
1602928640,1602930687,HU
1602930688,1602932735,GB
@@ -74143,9 +29817,7 @@
1603026944,1603031039,SE
1603031040,1603035135,RU
1603035136,1603039231,SY
-1603039232,1603042559,RS
-1603042560,1603042687,RS
-1603042688,1603043327,RS
+1603039232,1603043327,RS
1603043328,1603047423,IT
1603047424,1603051519,RU
1603051520,1603055615,JO
@@ -74156,29 +29828,31 @@
1603067928,1603071999,GB
1603072000,1603076095,CZ
1603076096,1603080191,RU
-1603080192,1603080447,GB
-1603080448,1603080703,FR
+1603080192,1603080703,GB
1603080704,1603080831,US
1603080832,1603080959,SE
1603080960,1603081087,DE
1603081088,1603081247,GB
1603081248,1603081255,NO
1603081256,1603081263,FI
-1603081264,1603081279,DE
+1603081264,1603081279,GB
1603081280,1603081295,US
-1603081296,1603082239,GB
+1603081296,1603081407,GB
+1603081408,1603081471,ES
+1603081472,1603082239,GB
1603082240,1603082495,DE
1603082496,1603082751,GT
1603082752,1603083007,ES
1603083008,1603083263,UA
1603083264,1603083535,DE
-1603083536,1603083551,GB
+1603083536,1603083551,LU
1603083552,1603083567,NL
-1603083568,1603083823,LU
-1603083824,1603084031,GB
-1603084032,1603086847,IT
-1603086848,1603087103,DE
-1603087104,1603088383,IT
+1603083568,1603083583,LU
+1603083584,1603083615,DE
+1603083616,1603083647,LU
+1603083648,1603083775,DE
+1603083776,1603084031,GB
+1603084032,1603088383,IT
1603088384,1603092479,LB
1603092480,1603100671,NO
1603100672,1603108863,FR
@@ -74188,87 +29862,17 @@
1603129344,1603133439,JO
1603133440,1603137535,RU
1603137536,1603141631,KW
-1603141632,1603144199,ES
-1603144200,1603144207,PT
-1603144208,1603144215,ES
-1603144216,1603144247,PT
-1603144248,1603145727,ES
-1603145728,1603145983,NL
-1603145984,1603145991,ES
-1603145992,1603146031,NL
-1603146032,1603146063,CY
-1603146064,1603146239,NL
-1603146240,1603146751,US
-1603146752,1603146759,DK
-1603146760,1603147007,NL
-1603147008,1603147263,US
-1603147264,1603147519,NL
-1603147520,1603147775,IL
-1603147776,1603148031,US
-1603148032,1603148287,IL
-1603148288,1603148799,NL
-1603148800,1603149311,IL
+1603141632,1603145727,ES
+1603145728,1603149311,IL
1603149312,1603149567,NL
-1603149568,1603149823,US
+1603149568,1603149823,IL
1603149824,1603153919,RU
1603153920,1603158015,NL
-1603158016,1603159167,DE
-1603159168,1603159183,NL
-1603159184,1603159199,FR
-1603159200,1603159215,AT
-1603159216,1603159487,DE
-1603159488,1603159519,AT
-1603159520,1603159535,NL
-1603159536,1603159551,GB
-1603159552,1603159823,DE
-1603159824,1603159871,CH
-1603159872,1603159903,DE
-1603159904,1603159919,GB
-1603159920,1603160079,DE
-1603160080,1603160095,NL
-1603160096,1603160111,GB
-1603160112,1603160335,DE
-1603160336,1603160351,GB
-1603160352,1603160383,DE
-1603160384,1603160399,NL
-1603160400,1603160415,CH
-1603160416,1603161007,DE
-1603161008,1603161023,GB
-1603161024,1603161103,DE
-1603161104,1603161119,GB
-1603161120,1603161135,AT
-1603161136,1603161151,GB
-1603161152,1603161167,CH
-1603161168,1603161567,DE
-1603161568,1603161599,FR
-1603161600,1603162111,DE
+1603158016,1603162111,DE
1603162112,1603166207,TJ
-1603166208,1603166751,NL
-1603166752,1603166767,MT
-1603166768,1603166815,US
-1603166816,1603166847,VE
-1603166848,1603166911,NL
-1603166912,1603166943,VE
-1603166944,1603166959,NL
-1603166960,1603166975,US
-1603166976,1603167135,NL
-1603167136,1603167167,JP
-1603167168,1603167231,NL
-1603167232,1603167743,BE
-1603167744,1603167871,NO
-1603167872,1603167999,NL
-1603168000,1603168063,CY
-1603168064,1603168127,NL
-1603168128,1603168143,SA
-1603168144,1603168191,NL
-1603168192,1603168207,US
-1603168208,1603168575,NL
-1603168576,1603168591,GB
-1603168592,1603168615,NL
+1603166208,1603168615,NL
1603168616,1603168623,US
-1603168624,1603169919,NL
-1603169920,1603169983,US
-1603169984,1603170303,NL
+1603168624,1603170303,NL
1603170304,1603174399,IE
1603174400,1603178495,TR
1603178496,1603182591,GB
@@ -74279,67 +29883,12 @@
1603198976,1603203071,IR
1603203072,1603207167,PL
1603207168,1603215359,RU
-1603215360,1603217167,DE
-1603217168,1603217183,US
-1603217184,1603219455,DE
-1603219456,1603220495,CH
-1603220496,1603220503,LI
-1603220504,1603223551,CH
-1603223552,1603223615,FR
-1603223616,1603223631,GB
-1603223632,1603223704,FR
-1603223705,1603223711,GB
-1603223712,1603223827,FR
-1603223828,1603223828,RU
-1603223829,1603223936,FR
-1603223937,1603223951,GB
-1603223952,1603224319,FR
-1603224320,1603224335,GB
-1603224336,1603224351,BE
-1603224352,1603224367,NL
-1603224368,1603224383,DE
-1603224384,1603224399,CH
-1603224400,1603224415,IT
-1603224416,1603224431,ES
-1603224432,1603224447,US
-1603224448,1603224463,MX
-1603224464,1603224575,GB
-1603224576,1603224895,FR
-1603224896,1603224911,GB
-1603224912,1603225447,FR
-1603225448,1603225455,GB
-1603225456,1603225511,FR
-1603225512,1603225583,GB
-1603225584,1603225599,FR
-1603225600,1603225607,ES
-1603225608,1603225615,GB
-1603225616,1603225623,DE
-1603225624,1603225631,IT
-1603225632,1603225639,US
-1603225640,1603225647,CN
-1603225648,1603226111,FR
-1603226112,1603226623,GB
-1603226624,1603227647,FR
-1603227648,1603227787,AT
-1603227788,1603227799,DE
-1603227800,1603227843,AT
-1603227844,1603227847,DE
-1603227848,1603227931,AT
-1603227932,1603227935,IT
-1603227936,1603227939,CZ
-1603227940,1603227947,CH
-1603227948,1603227971,IT
-1603227972,1603227983,AT
-1603227984,1603227991,DE
-1603227992,1603228415,AT
-1603228416,1603228799,DE
-1603228800,1603228883,AT
-1603228884,1603228887,DE
-1603228888,1603228927,AT
-1603228928,1603228991,DE
-1603228992,1603229047,AT
-1603229048,1603229055,SI
-1603229056,1603231743,AT
+1603215360,1603219455,DE
+1603219456,1603223551,CH
+1603223552,1603225087,GB
+1603225088,1603225343,FR
+1603225344,1603227647,GB
+1603227648,1603231743,AT
1603231744,1603235839,IT
1603235840,1603239935,RU
1603239936,1603244031,CZ
@@ -74360,25 +29909,7 @@
1603895296,1603928063,RU
1603928064,1603944447,DK
1603944448,1603977215,RU
-1603977216,1603979519,GB
-1603979520,1603979775,US
-1603979776,1603980463,GB
-1603980464,1603980479,CH
-1603980480,1603980863,GB
-1603980864,1603980927,ID
-1603980928,1603982655,GB
-1603982656,1603982687,DK
-1603982688,1603982719,CW
-1603982720,1603982783,GB
-1603982784,1603982847,CW
-1603982848,1603984895,GB
-1603984896,1603985151,PT
-1603985152,1603985279,GB
-1603985280,1603985407,BR
-1603985408,1603990015,GB
-1603990016,1603990271,GR
-1603990272,1603990527,SA
-1603990528,1603993599,GB
+1603977216,1603993599,GB
1603993600,1604009983,ME
1604009984,1604026367,PL
1604026368,1604042751,NL
@@ -74386,15 +29917,8 @@
1604059136,1604075519,MK
1604075520,1604091903,RU
1604091904,1604108287,BA
-1604108288,1604117199,DE
-1604117200,1604117215,GR
-1604117216,1604117219,JP
-1604117220,1604117223,US
-1604117224,1604117227,GB
-1604117228,1604117231,ES
-1604117232,1604117235,FR
-1604117236,1604141055,DE
-1604141056,1604157439,RO
+1604108288,1604141055,DE
+1604141056,1604157439,IT
1604157440,1604190207,FR
1604190208,1604206591,UA
1604206592,1604222975,PL
@@ -74416,49 +29940,16 @@
1604853760,1604861951,HU
1604861952,1604870143,RS
1604870144,1604878335,HR
-1604878336,1604886655,DE
-1604886656,1604886783,RU
-1604886784,1604887039,DE
-1604887040,1604887295,GB
-1604887296,1604888063,DE
-1604888064,1604889599,TR
-1604889600,1604890111,DE
-1604890112,1604890367,RU
-1604890368,1604890879,TR
-1604890880,1604891967,DE
-1604891968,1604892159,RU
-1604892160,1604892927,DE
-1604892928,1604893183,HK
-1604893184,1604893951,DE
-1604893952,1604894463,TR
-1604894464,1604894719,DE
-1604894720,1604895487,CZ
-1604895488,1604895491,SK
-1604895492,1604895607,CZ
-1604895608,1604895611,SK
-1604895612,1604900351,CZ
-1604900352,1604900383,SC
-1604900384,1604901311,CZ
-1604901312,1604901375,SC
-1604901376,1604901631,CZ
-1604901632,1604901887,SK
-1604901888,1604901911,CZ
-1604901912,1604901935,SK
-1604901936,1604901983,CZ
-1604901984,1604902023,SK
-1604902024,1604902031,CZ
-1604902032,1604902047,SK
-1604902048,1604902399,CZ
-1604902400,1604902911,SK
+1604878336,1604888063,DE
+1604888064,1604888831,TR
+1604888832,1604894719,DE
+1604894720,1604902911,CZ
1604902912,1604911103,BG
1604911104,1604919295,UA
1604919296,1604927487,NO
1604927488,1604935679,IT
1604935680,1604952063,RU
-1604952064,1604958719,DE
-1604958720,1604959231,RU
-1604959232,1604959743,DE
-1604959744,1604960255,RU
+1604952064,1604960255,DE
1604960256,1604968447,BG
1604968448,1604976639,ES
1604976640,1604993023,FR
@@ -74474,96 +29965,79 @@
1605083136,1605091327,BE
1605091328,1605099519,PL
1605099520,1605107711,RU
-1605107712,1605108255,GB
-1605108256,1605108263,IT
+1605107712,1605108247,GB
+1605108248,1605108263,IT
1605108264,1605108407,GB
1605108408,1605108415,IT
-1605108416,1605108439,GB
-1605108440,1605108447,IT
-1605108448,1605108567,GB
+1605108416,1605108567,GB
1605108568,1605108575,IT
-1605108576,1605108623,GB
-1605108624,1605108631,IT
-1605108632,1605109671,GB
-1605109672,1605109679,IT
-1605109680,1605110263,GB
+1605108576,1605109223,GB
+1605109224,1605109231,IT
+1605109232,1605109431,GB
+1605109432,1605109439,IT
+1605109440,1605109495,GB
+1605109496,1605109503,IT
+1605109504,1605110111,GB
+1605110112,1605110119,IT
+1605110120,1605110167,GB
+1605110168,1605110175,IT
+1605110176,1605110263,GB
1605110264,1605110271,IT
-1605110272,1605111111,GB
-1605111112,1605111119,IT
-1605111120,1605111847,GB
-1605111848,1605111855,IT
-1605111856,1605111919,GB
+1605110272,1605110559,GB
+1605110560,1605110567,IT
+1605110568,1605111023,GB
+1605111024,1605111031,IT
+1605111032,1605111199,GB
+1605111200,1605111207,IT
+1605111208,1605111799,GB
+1605111800,1605111807,IT
+1605111808,1605111919,GB
1605111920,1605111927,IT
-1605111928,1605112367,GB
-1605112368,1605112375,IT
-1605112376,1605112607,GB
-1605112608,1605112615,IT
-1605112616,1605113223,GB
-1605113224,1605113231,IT
-1605113232,1605113383,GB
+1605111928,1605111935,GB
+1605111936,1605111943,IT
+1605111944,1605112647,GB
+1605112648,1605112655,IT
+1605112656,1605112847,GB
+1605112848,1605112855,IT
+1605112856,1605113087,GB
+1605113088,1605113095,IT
+1605113096,1605113383,GB
1605113384,1605113391,IT
-1605113392,1605113415,GB
-1605113416,1605113423,IT
-1605113424,1605114199,GB
+1605113392,1605113407,GB
+1605113408,1605113415,IT
+1605113416,1605113503,GB
+1605113504,1605113511,IT
+1605113512,1605114199,GB
1605114200,1605114207,IT
1605114208,1605114263,GB
1605114264,1605114271,IT
-1605114272,1605114711,GB
-1605114712,1605114719,IT
-1605114720,1605114767,GB
-1605114768,1605114775,IT
-1605114776,1605114871,GB
+1605114272,1605114295,GB
+1605114296,1605114303,IT
+1605114304,1605114327,GB
+1605114328,1605114335,IT
+1605114336,1605114535,GB
+1605114536,1605114543,IT
+1605114544,1605114871,GB
1605114872,1605114879,IT
1605114880,1605114959,GB
1605114960,1605114967,IT
1605114968,1605115007,GB
1605115008,1605115015,IT
-1605115016,1605115047,GB
-1605115048,1605115055,IT
-1605115056,1605115759,GB
-1605115760,1605115767,IT
-1605115768,1605115807,GB
-1605115808,1605115815,IT
-1605115816,1605115903,GB
+1605115016,1605115599,GB
+1605115600,1605115607,IT
+1605115608,1605115863,GB
+1605115864,1605115871,IT
+1605115872,1605115903,GB
1605115904,1605124095,RU
-1605124096,1605124607,US
-1605124608,1605124639,GB
-1605124640,1605124735,US
-1605124736,1605124863,GB
-1605124864,1605124895,US
-1605124896,1605124927,GB
-1605124928,1605124959,US
-1605124960,1605125119,GB
-1605125120,1605125247,US
-1605125248,1605125263,GB
+1605124096,1605125263,GB
1605125264,1605125267,DE
-1605125268,1605125269,EU
+1605125268,1605125269,GB
1605125270,1605125279,DE
-1605125280,1605125335,GB
-1605125336,1605125343,US
-1605125344,1605125375,GB
-1605125376,1605125903,US
-1605125904,1605125904,GB
-1605125905,1605125920,DE
-1605125921,1605126015,GB
-1605126016,1605126911,US
-1605126912,1605127167,EU
-1605127168,1605127679,US
-1605127680,1605127935,GB
-1605127936,1605128703,US
-1605128704,1605129215,GB
-1605129216,1605129727,US
-1605129728,1605130239,GB
-1605130240,1605130244,US
-1605130245,1605130245,EU
-1605130246,1605130271,US
-1605130272,1605130295,GB
-1605130296,1605130303,US
-1605130304,1605130367,GB
-1605130368,1605130399,US
-1605130400,1605130495,GB
-1605130496,1605132159,US
-1605132160,1605132287,GB
+1605125280,1605125903,GB
+1605125904,1605125919,DE
+1605125920,1605130239,GB
+1605130240,1605130271,NL
+1605130272,1605132287,GB
1605132288,1605148671,RU
1605148672,1605156863,PT
1605156864,1605165055,JO
@@ -74572,8 +30046,7 @@
1605169413,1605173247,GB
1605173248,1605181439,TR
1605181440,1605189631,LT
-1605189632,1605189663,SK
-1605189664,1605189759,CZ
+1605189632,1605189759,CZ
1605189760,1605189887,SK
1605189888,1605197823,CZ
1605197824,1605206015,DE
@@ -74584,9 +30057,7 @@
1605238784,1605246975,IT
1605246976,1605255167,PL
1605257216,1605259263,FR
-1605259264,1605259519,DE
-1605259520,1605259583,CH
-1605259584,1605261311,DE
+1605259264,1605261311,DE
1605261312,1605271551,RU
1605271552,1605279743,DE
1605279744,1605287935,FR
@@ -74610,13 +30081,22 @@
1605599232,1605631999,GR
1605632000,1605664767,RS
1605664768,1605697535,MK
-1605697536,1605782527,RU
-1605782528,1605782783,CZ
-1605782784,1605783295,RU
-1605783296,1605783551,UA
-1605783552,1605795839,RU
+1605697536,1605734399,RU
+1605734400,1605735423,GB
+1605735424,1605742591,RU
+1605742592,1605744639,GB
+1605744640,1605750783,RU
+1605750784,1605751807,GB
+1605751808,1605763071,RU
+1605763072,1605765119,KZ
+1605765120,1605795839,RU
1605795840,1605828607,BE
-1605828608,1605861375,RU
+1605828608,1605828863,GB
+1605828864,1605830399,IL
+1605830400,1605830655,US
+1605830656,1605840895,RU
+1605840896,1605844991,CH
+1605844992,1605861375,RU
1605861376,1605894143,TR
1605894144,1606156287,RO
1606156288,1606418431,RU
@@ -74624,59 +30104,60 @@
1606636288,1606636543,GB
1606636544,1607467007,SE
1607467008,1607532543,DE
-1607532544,1607569407,SE
+1607532544,1607562495,SE
+1607562496,1607562751,DK
+1607562752,1607569407,SE
1607569408,1607572479,DK
-1607572480,1607573503,SE
-1607573504,1607577599,DK
+1607572480,1607575551,SE
+1607575552,1607577599,GB
1607577600,1607581695,SE
-1607581696,1607583743,DK
-1607583744,1607585791,SE
-1607585792,1607598079,DK
-1607598080,1607598335,IT
-1607598336,1607598591,EU
-1607598592,1607606015,IT
+1607581696,1607584511,DK
+1607584512,1607584767,SE
+1607584768,1607585023,DK
+1607585024,1607585279,SE
+1607585280,1607595263,DK
+1607595264,1607595519,SE
+1607595520,1607598079,DK
+1607598080,1607601919,IT
+1607601920,1607602175,GB
+1607602176,1607606015,IT
1607606016,1607606271,FR
-1607606272,1607609343,IT
-1607609344,1607609599,EU
-1607609600,1607610367,IT
+1607606272,1607608319,IT
+1607608320,1607609343,ES
+1607609344,1607610367,IT
1607610368,1607612415,IE
-1607612416,1607614463,EU
-1607614464,1607616511,FR
-1607616512,1607618559,EU
-1607618560,1607619071,IT
-1607619072,1607620607,GB
-1607620608,1607622655,EU
-1607622656,1607625983,IT
-1607625984,1607626239,EU
-1607626240,1607626751,IT
-1607626752,1607634431,EU
-1607634432,1607636479,IT
-1607636480,1607651583,EU
-1607651584,1607652351,FR
-1607652352,1607655423,EU
-1607655424,1607663615,IT
-1607663616,1607691455,NL
-1607691456,1607691519,GB
-1607691520,1607695559,NL
-1607695560,1607695560,NL
-1607695561,1607700735,NL
-1607700736,1607700991,GB
-1607700992,1607718207,NL
-1607718208,1607718239,GB
-1607718240,1607729151,NL
-1607729152,1607761919,EG
+1607612416,1607614463,IT
+1607614464,1607615487,FR
+1607615488,1607617535,GB
+1607617536,1607618559,IT
+1607618560,1607620607,ES
+1607620608,1607622655,IT
+1607622656,1607624703,ES
+1607624704,1607625727,IT
+1607625728,1607625983,ES
+1607625984,1607626239,IT
+1607626240,1607626751,ES
+1607626752,1607647231,IT
+1607647232,1607651327,DE
+1607651328,1607655423,FR
+1607655424,1607660287,IT
+1607660288,1607660543,PT
+1607660544,1607663615,IT
+1607663616,1607729151,NL
+1607729152,1607737343,SY
+1607737344,1607761919,EG
1607761920,1607766015,SY
1607766016,1607794687,EG
1607794688,1607860223,RU
1607860224,1607892991,ES
1607892992,1607893055,GB
1607893056,1607893119,DE
-1607893120,1607893188,DK
-1607893189,1607893247,IT
+1607893120,1607893183,DK
+1607893184,1607893247,IT
1607893248,1607893311,AT
1607893312,1607893375,FR
-1607893376,1607893443,SE
-1607893444,1607893503,NL
+1607893376,1607893439,SE
+1607893440,1607893503,NL
1607893504,1607893567,BE
1607893568,1607893631,IE
1607893632,1607925759,ES
@@ -74687,7 +30168,7 @@
1607930880,1607933951,PL
1607933952,1607934975,DE
1607934976,1607937023,UA
-1607937024,1607938047,LV
+1607937024,1607938047,SE
1607938048,1607939071,UA
1607939072,1607940095,PL
1607940096,1607941119,RU
@@ -74727,48 +30208,30 @@
1607983104,1607984127,GB
1607984128,1607985151,RU
1607985152,1607986175,PL
-1607986176,1607986687,FR
+1607986176,1607986431,FR
+1607986432,1607986687,GB
1607986688,1607988223,RU
1607988224,1607989247,KG
1607989248,1607991295,RU
1607991296,1608122367,UA
-1608122368,1608253439,RO
+1608122368,1608155135,GB
+1608155136,1608253439,RO
1608253440,1608384511,RU
1608384512,1608515583,DE
1608515584,1610612735,IT
1610612736,1610678271,US
1610678272,1610743807,CA
-1610743808,1611165943,US
-1611165944,1611165951,BD
-1611165952,1611166111,US
-1611166112,1611166119,NZ
-1611166120,1611166167,US
-1611166168,1611166175,AF
-1611166176,1611166343,US
-1611166344,1611166351,VE
-1611166352,1611166559,US
-1611166560,1611166575,HN
-1611166576,1611166735,US
-1611166736,1611166751,SE
-1611166752,1611166783,CA
-1611166784,1611167647,US
-1611167648,1611167679,CA
-1611167680,1611167727,SE
-1611167728,1611169599,US
-1611169600,1611169663,IE
-1611169664,1611227135,US
+1610743808,1611128831,US
+1611128832,1611130879,NL
+1611130880,1611227135,US
1611227136,1611235327,CA
1611235328,1611923455,US
1611923456,1612185599,CA
-1612185600,1612611583,US
-1612611584,1612636159,CA
-1612636160,1612685567,US
-1612685568,1612685583,CA
-1612685584,1612686175,US
-1612686176,1612686207,CA
-1612686208,1612689055,US
-1612689056,1612689071,CA
-1612689072,1613471743,US
+1612185600,1612611327,US
+1612611328,1612636159,CA
+1612636160,1613405695,US
+1613405696,1613405951,CA
+1613405952,1613471743,US
1613471744,1613479935,JM
1613479936,1613480191,CA
1613480192,1613488127,US
@@ -74776,66 +30239,27 @@
1613492224,1613504511,US
1613504512,1613529087,CA
1613529088,1613545471,US
-1613545472,1613545495,CA
-1613545496,1613545503,US
-1613545504,1613545551,CA
-1613545552,1613545559,US
-1613545560,1613545799,CA
-1613545800,1613545807,US
-1613545808,1613545871,CA
-1613545872,1613545879,US
-1613545880,1613545887,NL
-1613545888,1613546159,CA
-1613546160,1613546167,US
-1613546168,1613546407,CA
-1613546408,1613546423,US
-1613546424,1613546679,CA
-1613546680,1613546695,US
-1613546696,1613546703,CA
-1613546704,1613546719,US
-1613546720,1613547935,CA
-1613547936,1613547943,US
-1613547944,1613548479,CA
-1613548480,1613548487,US
-1613548488,1613548959,CA
-1613548960,1613548967,US
-1613548968,1613550487,CA
-1613550488,1613550495,US
-1613550496,1613550735,CA
-1613550736,1613550743,US
-1613550744,1613552063,CA
-1613552064,1613552079,US
-1613552080,1613552151,CA
-1613552152,1613552159,US
-1613552160,1613552199,CA
-1613552200,1613552207,US
-1613552208,1613556511,CA
-1613556512,1613556535,US
-1613556536,1613556559,CA
-1613556560,1613556583,US
-1613556584,1613556599,CA
-1613556600,1613556615,US
-1613556616,1613558359,CA
-1613558360,1613558375,NL
-1613558376,1613565951,CA
+1613545472,1613565951,CA
1613565952,1613606911,US
-1613606912,1613613119,CA
-1613613120,1613613151,IE
-1613613152,1613615103,CA
+1613606912,1613615103,CA
1613615104,1613635583,US
-1613635584,1613639679,CA
-1613639680,1613676543,US
+1613635584,1613640191,CA
+1613640192,1613640319,US
+1613640320,1613640447,CA
+1613640448,1613640575,US
+1613640576,1613643263,CA
+1613643264,1613643391,US
+1613643392,1613643775,CA
+1613643776,1613676543,US
1613676544,1613680639,CA
-1613680640,1613703670,US
-1613703671,1613703678,LK
-1613703679,1613737983,US
+1613680640,1613737983,US
1613737984,1613742079,CA
-1613742080,1613750803,US
-1613750804,1613750804,US
-1613750805,1613758463,US
+1613742080,1613758463,US
1613758464,1614282751,CA
1614282752,1614741503,US
-1614741504,1614757887,CA
+1614741504,1614743039,CA
+1614743040,1614743295,US
+1614743296,1614757887,CA
1614757888,1614774271,US
1614774272,1614786559,CA
1614786560,1618837503,US
@@ -74855,16 +30279,12 @@
1619001344,1632305151,US
1632305152,1632321535,CA
1632321536,1632354303,US
-1632354304,1632354607,CA
-1632354608,1632354615,US
-1632354616,1632354679,CA
-1632354680,1632354687,US
-1632354688,1632354919,CA
-1632354920,1632354927,NL
-1632354928,1632362495,CA
-1632362496,1632587007,US
-1632587008,1632587263,US
-1632587264,1634414591,US
+1632354304,1632362495,CA
+1632362496,1632978303,US
+1632978304,1632978431,CA
+1632978432,1632979583,US
+1632979584,1632979711,CA
+1632979712,1634414591,US
1634414592,1634418687,CA
1634418688,1634447359,US
1634447360,1634451455,CA
@@ -74872,31 +30292,22 @@
1634455552,1634459647,CA
1634459648,1634467839,US
1634467840,1634729983,CA
-1634729984,1650919315,US
-1650919316,1650919316,US
-1650919317,1652293631,US
+1634729984,1652293631,US
1652293632,1652310015,CA
-1652310016,1652460487,US
-1652460488,1652460495,CN
-1652460496,1652481279,US
+1652310016,1652447849,US
+1652447850,1652447850,CN
+1652447851,1652481279,US
1652481280,1652481791,CN
-1652481792,1652487286,US
-1652487287,1652487287,TR
-1652487288,1653500927,US
-1653500928,1653501183,FR
-1653501184,1653501439,IL
+1652481792,1653500927,US
+1653500928,1653501439,IL
1653501440,1653501695,HK
1653501696,1653534719,US
1653534720,1653538815,CA
1653538816,1653555199,US
-1653555200,1653560319,CA
-1653560320,1653560327,US
-1653560328,1653567487,CA
+1653555200,1653567487,CA
1653567488,1653571583,US
1653571584,1653575679,CA
-1653575680,1653575797,US
-1653575798,1653575798,US
-1653575799,1653592063,US
+1653575680,1653592063,US
1653592064,1653596159,CA
1653596160,1653600255,US
1653600256,1653604351,CA
@@ -74904,158 +30315,26 @@
1654542336,1654546431,CA
1654546432,1654550527,VG
1654550528,1654554623,US
-1654554624,1654558207,CA
-1654558208,1654558463,US
-1654558464,1654558719,CA
-1654558720,1654583103,US
-1654583104,1654583135,CA
-1654583136,1654597647,US
-1654597648,1654597655,PL
-1654597656,1654648831,US
+1654554624,1654558719,CA
+1654558720,1654648831,US
1654648832,1654652927,CA
-1654652928,1663444375,US
-1663444376,1663444383,CA
-1663444384,1673527295,US
+1654652928,1656731007,US
+1656731008,1656731135,VI
+1656731136,1673527295,US
1673527296,1673560063,CA
-1673560064,1673562207,US
-1673562208,1673562239,CR
-1673562240,1673562303,US
-1673562304,1673562319,CA
-1673562320,1673562335,PL
-1673562336,1673562399,US
-1673562400,1673562415,GB
-1673562416,1673562639,US
-1673562640,1673562671,GB
-1673562672,1673562719,US
-1673562720,1673562751,NL
-1673562752,1673562975,US
-1673562976,1673563007,NL
-1673563008,1673563151,US
-1673563152,1673563167,CA
-1673563168,1673563663,US
-1673563664,1673563679,CA
-1673563680,1673563695,US
-1673563696,1673563711,CA
-1673563712,1673563775,US
-1673563776,1673563903,GB
-1673563904,1673566847,US
-1673566848,1673566911,CA
-1673566912,1673567263,US
-1673567264,1673567279,AT
-1673567280,1673567583,US
-1673567584,1673567615,CA
-1673567616,1673567807,US
-1673567808,1673567823,AU
-1673567824,1673567855,US
-1673567856,1673567871,CA
-1673567872,1673568255,US
-1673568256,1673568271,CA
-1673568272,1673568303,US
-1673568304,1673568319,GB
-1673568320,1673568383,US
-1673568384,1673568447,CA
-1673568448,1673569023,US
-1673569024,1673569039,CA
-1673569040,1673569055,HR
-1673569056,1673569183,US
-1673569184,1673569215,NL
-1673569216,1673569887,US
-1673569888,1673569903,PL
-1673569904,1673569967,US
-1673569968,1673569983,GB
-1673569984,1673571679,US
-1673571680,1673571711,CA
-1673571712,1673572895,US
-1673572896,1673572911,CA
-1673572912,1673573183,US
-1673573184,1673573247,CA
-1673573248,1673573503,US
-1673573504,1673573567,NL
-1673573568,1673577231,US
-1673577232,1673577247,CA
-1673577248,1673578287,US
-1673578288,1673578303,CA
-1673578304,1673578751,US
-1673578752,1673578767,CA
-1673578768,1673579391,US
-1673579392,1673579455,LT
-1673579456,1673580095,US
-1673580096,1673580127,CA
-1673580128,1673580287,US
+1673560064,1673580287,US
1673580288,1673580543,CA
-1673580544,1673580927,US
-1673580928,1673580991,LT
-1673580992,1673581183,US
-1673581184,1673581247,LT
-1673581248,1673581439,US
-1673581440,1673581503,LT
-1673581504,1673581599,US
-1673581600,1673581615,CA
-1673581616,1673581695,US
-1673581696,1673581759,LT
-1673581760,1673581951,US
-1673581952,1673582015,LT
-1673582016,1673582207,US
-1673582208,1673582271,LT
-1673582272,1673583231,US
-1673583232,1673583295,CA
-1673583296,1673583455,US
-1673583456,1673583487,HR
-1673583488,1673583935,US
-1673583936,1673583967,HR
-1673583968,1673584191,US
-1673584192,1673584223,HR
-1673584224,1673584383,US
-1673584384,1673584399,HR
-1673584400,1673584767,US
-1673584768,1673584895,CA
-1673584896,1673585343,US
-1673585344,1673585407,SC
-1673585408,1673586175,US
-1673586176,1673586191,NL
-1673586192,1673586431,US
-1673586432,1673586447,NL
-1673586448,1673588799,US
-1673588800,1673588863,CA
-1673588864,1673588991,US
-1673588992,1673589007,HR
-1673589008,1673590783,US
-1673590784,1673590911,EC
-1673590912,1673986047,US
+1673580544,1673986047,US
1673986048,1674051583,CA
1674051584,1674575871,US
1674575872,1677721599,CA
-1677721600,1680531967,US
-1680531968,1680532447,CN
-1680532448,1680532479,US
-1680532480,1680532575,CN
-1680532576,1680532591,US
-1680532592,1680532599,CN
-1680532600,1680532623,US
-1680532624,1680532639,CN
-1680532640,1680532655,US
-1680532656,1680532671,CN
-1680532672,1680532735,US
-1680532736,1680532831,CN
-1680532832,1680532863,US
-1680532864,1680533375,CN
-1680533376,1680533407,US
-1680533408,1680533567,CN
-1680533568,1680533599,US
-1680533600,1680534663,CN
-1680534664,1680534671,US
-1680534672,1680534687,CN
-1680534688,1680534703,US
-1680534704,1680534935,CN
-1680534936,1680534975,US
-1680534976,1680535487,CN
-1680535488,1680535551,US
+1677721600,1680534015,US
+1680534016,1680534527,CN
+1680534528,1680535551,US
1680535552,1680539647,CA
1680539648,1680564223,US
1680564224,1680572415,CA
-1680572416,1680627199,US
-1680627200,1680627263,CA
-1680627264,1681915903,US
+1680572416,1681915903,US
1686110208,1694498815,US
1694498816,1694499839,CN
1694499840,1694500863,ID
@@ -75081,7 +30360,7 @@
1695023104,1695547391,TW
1695547392,1697775615,CN
1697775616,1697776639,ID
-1697776640,1697779711,JP
+1697776640,1697777663,JP
1697779712,1697783807,ID
1697783808,1697789951,JP
1697789952,1697790975,CN
@@ -75147,7 +30426,7 @@
1701740544,1701838847,JP
1701838848,1702363135,AU
1702363136,1702821887,CN
-1702821888,1702887423,HK
+1702821888,1702887423,SG
1702887424,1702888447,CN
1702888448,1702889471,AU
1702889472,1702903807,CN
@@ -75209,7 +30488,8 @@
1728152576,1728153599,MY
1728153600,1728154623,SG
1728154624,1728155647,JP
-1728155648,1728158719,MY
+1728155648,1728158463,MY
+1728158464,1728158719,NL
1728158720,1728159743,HK
1728159744,1728161791,TH
1728161792,1728162815,CN
@@ -75222,7 +30502,7 @@
1728171008,1728172031,AU
1728172032,1728173055,VN
1728173056,1728175103,AU
-1728175104,1728177151,HK
+1728176128,1728177151,HK
1728177152,1728178175,AU
1728178176,1728179199,LA
1728179200,1728180223,VN
@@ -75259,7 +30539,6 @@
1728246784,1728254975,JP
1728254976,1728255999,MY
1728256000,1728257023,HK
-1728257024,1728258047,MN
1728258048,1728259071,IN
1728259072,1728260095,KR
1728260096,1728261119,IN
@@ -75298,7 +30577,6 @@
1728316416,1728317439,MY
1728317440,1728319487,JP
1728319488,1728320511,AU
-1728320512,1728321535,PH
1728321536,1728322559,JP
1728322560,1728323583,MY
1728323584,1728324607,JP
@@ -75326,9 +30604,7 @@
1728346112,1728346367,AU
1728346368,1728346623,NZ
1728346624,1728347135,AU
-1728347136,1728347147,SG
-1728347148,1728347148,AP
-1728347149,1728348159,SG
+1728347136,1728348159,SG
1728348160,1728349183,VN
1728349184,1728349951,AU
1728349952,1728350207,NP
@@ -75356,7 +30632,6 @@
1728369664,1728370687,AU
1728370688,1728371711,TH
1728371712,1728372735,IN
-1728372736,1728373759,HK
1728373760,1728374783,TH
1728374784,1728375039,SG
1728375040,1728375295,IN
@@ -75414,7 +30689,6 @@
1728425984,1728427007,JP
1728427008,1728428031,MY
1728428032,1728430079,IN
-1728430080,1728431103,JP
1728431104,1728431615,AF
1728431616,1728431871,HK
1728431872,1728432127,SG
@@ -75433,7 +30707,7 @@
1728444416,1728445439,JP
1728445440,1728446463,CN
1728446464,1728446975,ID
-1728446976,1728447487,IN
+1728446976,1728447231,IN
1728447488,1728448511,HK
1728448512,1728449535,KH
1728449536,1728450559,AU
@@ -75458,14 +30732,11 @@
1728468480,1728468735,AU
1728468736,1728469247,IN
1728469248,1728469503,NZ
-1728469504,1728470015,HK
1728470016,1728471039,JP
1728471040,1728472063,PH
1728472064,1728473087,KR
-1728473088,1728473343,IN
1728473344,1728473599,AU
1728473600,1728474111,SG
-1728474112,1728475135,IN
1728475136,1728476159,JP
1728476160,1728476415,AU
1728476416,1728476927,ID
@@ -75499,7 +30770,7 @@
1728501248,1728501503,ID
1728501504,1728502783,AU
1728502784,1728503807,CN
-1728503808,1728505855,JP
+1728503808,1728504831,JP
1728505856,1728506879,NZ
1728506880,1728507903,MY
1728507904,1728508927,JP
@@ -75542,7 +30813,6 @@
1728544768,1728545791,IN
1728545792,1728546815,JP
1728546816,1728547839,AU
-1728547840,1728548863,MY
1728548864,1728549119,KH
1728549120,1728549375,IN
1728549376,1728549631,PH
@@ -75562,7 +30832,6 @@
1728558080,1728559103,IN
1728559104,1728560127,ID
1728560128,1728560639,AU
-1728560640,1728561151,HK
1728561152,1728562175,AU
1728562176,1728562431,VN
1728562432,1728562687,VU
@@ -75598,7 +30867,7 @@
1728593152,1728593407,AU
1728593408,1728593663,IN
1728593664,1728593919,ID
-1728593920,1728595967,JP
+1728593920,1728594943,JP
1728595968,1728596479,NZ
1728596480,1728598015,ID
1728598016,1728599039,NZ
@@ -75610,7 +30879,6 @@
1728606208,1728607231,PK
1728607232,1728608255,IN
1728608256,1728608511,SG
-1728608512,1728608767,IN
1728608768,1728609023,ID
1728609024,1728610303,IN
1728610304,1728611327,TH
@@ -75651,7 +30919,7 @@
1728643072,1728645119,VN
1728645120,1728646143,SG
1728646144,1728647167,IN
-1728647168,1728648703,AU
+1728647168,1728648191,AU
1728648704,1728648959,ID
1728648960,1728649215,PK
1728650240,1728651263,JP
@@ -75660,7 +30928,6 @@
1728653312,1728654335,NZ
1728654336,1728655359,ID
1728655872,1728656127,SB
-1728656128,1728656383,HK
1728656384,1728661503,AU
1728661504,1728662527,IN
1728662528,1728665599,VN
@@ -75669,7 +30936,6 @@
1728668672,1728669695,SG
1728669696,1728670207,BD
1728670208,1728670463,NZ
-1728670464,1728670719,FJ
1728670720,1728671743,JP
1728671744,1728672767,BD
1728672768,1728673791,TW
@@ -75719,7 +30985,6 @@
1728716800,1728717823,AU
1728717824,1728718847,JP
1728718848,1728719871,MY
-1728719872,1728720895,NZ
1728720896,1728721919,AU
1728721920,1728722943,BD
1728722944,1728723199,ID
@@ -75778,12 +31043,10 @@
1728768000,1728768255,AU
1728768256,1728768511,NZ
1728768512,1728769023,IN
-1728769024,1728770047,HK
1728770048,1728772095,JP
1728772096,1728773375,IN
1728773376,1728773631,ID
1728773632,1728774143,PH
-1728774144,1728775167,AU
1728775168,1728776191,JP
1728776192,1728777215,AU
1728777216,1728778239,TH
@@ -75852,7 +31115,6 @@
1728836608,1728837631,HK
1728837632,1728838655,KR
1728838656,1728839679,ID
-1728839680,1728839935,FJ
1728839936,1728840191,IN
1728840192,1728840447,SG
1728840448,1728842751,AU
@@ -75880,7 +31142,6 @@
1728861184,1728861439,ID
1728861440,1728862207,AU
1728862208,1728863231,PH
-1728863232,1728864255,HK
1728864256,1728865279,AF
1728865280,1728866303,AU
1728866304,1728867327,VN
@@ -75911,7 +31172,7 @@
1728887808,1728888831,AU
1728888832,1728889855,IN
1728889856,1728890879,JP
-1728890880,1728891903,SG
+1728890880,1728891903,AU
1728891904,1728892927,BD
1728892928,1728893439,BN
1728893440,1728893695,SG
@@ -75931,11 +31192,10 @@
1728902656,1728902911,MY
1728902912,1728903167,BD
1728903168,1728905215,KR
-1728905216,1728905471,FJ
1728905472,1728905727,PK
-1728905728,1728907263,IN
+1728905728,1728906239,IN
1728907264,1728908287,NZ
-1728908288,1728912383,JP
+1728909312,1728912383,JP
1728912384,1728913407,TH
1728913408,1728914431,PH
1728914432,1728915199,ID
@@ -75946,7 +31206,7 @@
1728919552,1728920575,AU
1728920576,1728921599,JP
1728921600,1728922623,AF
-1728922624,1728924415,AU
+1728922624,1728923647,AU
1728924416,1728924671,MY
1728924672,1728925695,VN
1728925696,1728927743,AU
@@ -75956,7 +31216,6 @@
1728930816,1728931839,AU
1728931840,1728932863,JP
1728932864,1728933887,IN
-1728933888,1728934911,JP
1728934912,1728935935,NZ
1728935936,1728936959,MY
1728936960,1728937983,CN
@@ -75977,7 +31236,7 @@
1728951552,1728951807,ID
1728951808,1728952063,SG
1728952064,1728952319,IN
-1728952320,1728953343,AU
+1728952832,1728953343,AU
1728953344,1728954367,HK
1728954368,1728955391,JP
1728955392,1728956415,CN
@@ -75986,7 +31245,6 @@
1728959488,1728960511,TH
1728960512,1728961279,AU
1728961280,1728961535,IN
-1728961536,1728962559,JP
1728962560,1728963583,BD
1728963584,1728964607,TH
1728964608,1728965631,HK
@@ -75994,7 +31252,6 @@
1728966656,1728967679,IN
1728967680,1728968703,CN
1728968704,1728970751,JP
-1728970752,1728971007,FJ
1728971008,1728971263,AU
1728971264,1728971519,IN
1728971520,1728971775,NZ
@@ -76004,7 +31261,6 @@
1728974848,1728976383,ID
1728976384,1728976895,AU
1728976896,1728977151,AF
-1728977408,1728977663,HK
1728977664,1728977919,BD
1728977920,1728978943,MY
1728978944,1728979967,JP
@@ -76013,22 +31269,22 @@
1728982016,1728982527,ID
1728982528,1728982783,IN
1728982784,1728985087,AU
-1728985088,1728986111,TW
-1728986112,1728987135,PH
+1728985088,1728987135,PH
1728987136,1728988159,AU
1728988160,1728988191,NZ
1728988192,1728988199,US
1728988200,1728989183,NZ
1728989184,1728990207,BD
-1728990208,1728991231,SG
+1728990208,1728990335,MY
+1728990336,1728990463,ID
+1728990464,1728990975,KR
+1728990976,1728991231,SG
1728991232,1728992255,BD
1728992256,1728993279,CN
1728993280,1728994303,PG
1728994304,1728995327,AU
1728995328,1728996095,IN
1728996096,1728996351,SG
-1728996352,1728997375,HK
-1728997376,1728998399,PH
1728998400,1728998655,ID
1728998656,1728998911,BD
1728998912,1728999423,ID
@@ -76054,7 +31310,6 @@
1729020160,1729020415,BD
1729020416,1729020671,PH
1729020672,1729020927,ID
-1729020928,1729021951,JP
1729021952,1729022975,AU
1729022976,1729023999,BD
1729024000,1729025023,IN
@@ -76070,10 +31325,10 @@
1729031168,1729032191,SG
1729032192,1729033215,CN
1729033216,1729033727,SG
-1729033728,1729033983,GB
-1729033984,1729034239,SG
+1729033728,1729034239,GB
1729034240,1729035263,KH
-1729035264,1729036287,AU
+1729035264,1729035519,SG
+1729035520,1729036287,AU
1729036288,1729037311,JP
1729037312,1729039359,CN
1729039360,1729040383,JP
@@ -76100,9 +31355,7 @@
1729059840,1729060863,JP
1729060864,1729061887,CN
1729061888,1729062911,SG
-1729062912,1729063167,MY
-1729063168,1729063423,HK
-1729063424,1729063935,MY
+1729062912,1729063935,MY
1729063936,1729064959,JP
1729064960,1729065983,PG
1729065984,1729067007,JP
@@ -76128,7 +31381,9 @@
1729081344,1729081599,NP
1729081600,1729082111,AU
1729082112,1729082367,IN
-1729082368,1729084415,HK
+1729082368,1729083391,HK
+1729083392,1729083647,JP
+1729083648,1729084415,HK
1729084416,1729085439,JP
1729085440,1729087487,HK
1729087488,1729088511,CN
@@ -76137,7 +31392,7 @@
1729091584,1729092607,HK
1729092608,1729094143,BD
1729094144,1729094655,IN
-1729094656,1729095679,AU
+1729094656,1729095167,AU
1729095680,1729096703,SG
1729096704,1729097215,AU
1729097216,1729097727,AF
@@ -76145,7 +31400,6 @@
1729098752,1729099775,BD
1729099776,1729100543,IN
1729100544,1729100799,ID
-1729100800,1729101823,PH
1729101824,1729102847,VN
1729102848,1729103871,IN
1729103872,1729104895,JP
@@ -76154,7 +31408,10 @@
1729105920,1729106943,SG
1729106944,1729107967,NZ
1729107968,1729108479,IN
-1729108480,1729108991,HK
+1729108480,1729108616,KR
+1729108617,1729108617,HK
+1729108618,1729108735,KR
+1729108736,1729108991,HK
1729108992,1729111039,IN
1729111040,1729112063,JP
1729112064,1729113087,MY
@@ -76215,11 +31472,15 @@
1729162240,1729163263,JP
1729163264,1729165311,TW
1729165312,1729166335,JP
-1729166336,1729167359,HK
+1729166336,1729166671,SG
+1729166672,1729166687,PH
+1729166688,1729166799,SG
+1729166800,1729166815,PH
+1729166816,1729166847,SG
+1729166848,1729167359,HK
1729167360,1729168383,IN
1729168384,1729169407,JP
1729169408,1729170431,TW
-1729170432,1729171455,BD
1729171456,1729171967,AU
1729171968,1729172223,IN
1729172224,1729172479,MY
@@ -76245,7 +31506,6 @@
1729189888,1729190911,VN
1729190912,1729191935,HK
1729191936,1729195007,IN
-1729195008,1729195519,MN
1729195520,1729196031,BD
1729196032,1729197055,GU
1729197056,1729198079,HK
@@ -76255,7 +31515,6 @@
1729199872,1729200127,TH
1729200128,1729201151,IN
1729201152,1729202175,AU
-1729202176,1729203199,JP
1729203200,1729205247,SG
1729205248,1729206271,JP
1729206272,1729207295,AU
@@ -76270,7 +31529,144 @@
1729213952,1729214463,ID
1729214464,1729216511,JP
1729216512,1729216767,ID
-1729217536,1729218559,HK
+1729216768,1729217023,AU
+1729217024,1729217535,IN
+1729217536,1729217791,JP
+1729217792,1729218047,SG
+1729218048,1729218175,MY
+1729218176,1729218303,SG
+1729218304,1729218431,JP
+1729218432,1729218559,KR
+1729218560,1729219583,PK
+1729219584,1729220607,CN
+1729220608,1729221631,MY
+1729221632,1729222655,KH
+1729222656,1729225727,AU
+1729225728,1729226751,CN
+1729226752,1729227775,AU
+1729227776,1729228799,VN
+1729228800,1729229823,TW
+1729229824,1729230847,ID
+1729230848,1729231103,PH
+1729231360,1729232895,AU
+1729232896,1729233919,MY
+1729233920,1729234943,VN
+1729234944,1729236991,PK
+1729236992,1729238015,ID
+1729238016,1729239039,PK
+1729239040,1729240063,JP
+1729240064,1729242111,ID
+1729242112,1729244159,AU
+1729244160,1729245183,SG
+1729245184,1729247231,AU
+1729247232,1729247487,NZ
+1729247488,1729247743,AU
+1729247744,1729248255,NZ
+1729248256,1729249279,JP
+1729249280,1729252351,IN
+1729254400,1729255423,AU
+1729255424,1729256447,MY
+1729257472,1729258495,ID
+1729258496,1729259519,JP
+1729259520,1729260543,IN
+1729260544,1729261567,AU
+1729261568,1729262591,JP
+1729262592,1729262847,PK
+1729262848,1729263103,ID
+1729263104,1729263615,NZ
+1729263616,1729264639,IN
+1729264640,1729265663,AU
+1729265664,1729266687,TW
+1729266688,1729267711,ID
+1729267712,1729268735,NZ
+1729268736,1729269759,IN
+1729269760,1729270783,ID
+1729270784,1729271807,AU
+1729271808,1729272063,IN
+1729272064,1729272319,ID
+1729272320,1729272831,AU
+1729272832,1729273855,IN
+1729273856,1729274879,AF
+1729274880,1729276927,IN
+1729276928,1729277951,BN
+1729277952,1729278975,VN
+1729278976,1729279999,MN
+1729280000,1729281023,HK
+1729281024,1729281535,AU
+1729281536,1729282047,ID
+1729282048,1729283071,CN
+1729283072,1729284095,AU
+1729284096,1729285119,NZ
+1729285120,1729286143,AU
+1729286144,1729288191,CN
+1729288192,1729289215,IN
+1729289216,1729290239,ID
+1729290240,1729291263,CN
+1729291264,1729293311,JP
+1729293312,1729294591,ID
+1729294592,1729294847,AU
+1729294848,1729295103,IN
+1729295104,1729295359,PK
+1729295360,1729296383,MY
+1729297408,1729298431,AU
+1729299456,1729300479,NZ
+1729300480,1729300991,SG
+1729300992,1729301503,NZ
+1729301504,1729302527,CN
+1729302528,1729302783,PH
+1729302784,1729303551,IN
+1729303552,1729304575,SG
+1729304576,1729305599,HK
+1729305600,1729306623,JP
+1729306624,1729307647,PH
+1729307904,1729308159,ID
+1729308160,1729308415,HK
+1729308416,1729308671,AU
+1729308672,1729310719,CN
+1729310720,1729311743,JP
+1729311744,1729312767,IN
+1729312768,1729313791,ID
+1729313792,1729314815,AU
+1729314816,1729317887,CN
+1729317888,1729319423,ID
+1729319424,1729319935,SG
+1729319936,1729320959,HK
+1729320960,1729321983,IN
+1729321984,1729323007,AU
+1729323008,1729324031,VN
+1729324032,1729325055,NZ
+1729325056,1729326079,TH
+1729326080,1729327103,ID
+1729327104,1729328127,AU
+1729328128,1729330175,JP
+1729330176,1729331199,KR
+1729331200,1729331711,IN
+1729331712,1729332223,BD
+1729332224,1729335295,IN
+1729335296,1729336319,AU
+1729336320,1729338367,IN
+1729338368,1729340415,JP
+1729340416,1729341439,VN
+1729341440,1729341951,IN
+1729341952,1729343487,AU
+1729343488,1729346559,ID
+1729346560,1729347583,HK
+1729347584,1729348607,AU
+1729348608,1729350655,IN
+1729350656,1729352703,ID
+1729352704,1729353727,IN
+1729353728,1729353983,AU
+1729353984,1729354239,IN
+1729354240,1729354751,AU
+1729354752,1729355775,VN
+1729355776,1729356799,IN
+1729356800,1729357823,ID
+1729357824,1729358847,CN
+1729358848,1729359871,HK
+1729359872,1729360895,JP
+1729360896,1729361919,AU
+1729361920,1729362943,IN
+1729362944,1729363967,BD
1729363968,1729364991,PK
1729364992,1729367039,JP
1729367040,1729368063,CN
@@ -76282,17 +31678,14 @@
1729372160,1729373183,CN
1729373184,1729374207,JP
1729374208,1729375231,TW
-1729375232,1729376255,JP
1729376256,1729376767,AU
1729376768,1729377023,SG
1729377024,1729377279,ID
1729377280,1729378303,BD
1729378304,1729378815,IN
-1729378816,1729379071,TH
1729379072,1729379327,SG
1729379328,1729380351,HK
1729380352,1729381375,IN
-1729381376,1729382399,AU
1729382400,1729383423,JP
1729383424,1729384447,PG
1729384448,1729385471,KH
@@ -76346,7 +31739,6 @@
1729426432,1729427455,AU
1729427456,1729428479,CN
1729428480,1729430527,AU
-1729430528,1729431551,BD
1729431552,1729432575,JP
1729432576,1729433599,PH
1729433600,1729433855,IN
@@ -76405,7 +31797,6 @@
1729486848,1729488383,ID
1729488384,1729488895,SB
1729488896,1729489919,IN
-1729489920,1729490943,BD
1729490944,1729491967,CN
1729491968,1729492991,HK
1729492992,1729494015,SB
@@ -76415,7 +31806,6 @@
1729520640,1729527807,CN
1729527808,1729528831,SG
1729528832,1729530879,ID
-1729530880,1729531903,MY
1729531904,1729532927,AU
1729532928,1729533951,MY
1729533952,1729534975,JP
@@ -76431,8 +31821,9 @@
1729543168,1729544191,CN
1729544192,1729545215,IN
1729545216,1729546239,AU
-1729546240,1729547263,HK
-1729548288,1729549311,AU
+1729546240,1729546495,JP
+1729546496,1729547263,HK
+1729548544,1729549311,AU
1729549312,1729550335,JP
1729550336,1729551359,MY
1729551360,1729552383,KR
@@ -76442,7 +31833,6 @@
1729554944,1729555455,NZ
1729555456,1729556479,IN
1729556480,1729557503,ID
-1729557504,1729558527,HK
1729558528,1729559551,ID
1729559552,1729560575,CN
1729560576,1729561599,AU
@@ -76457,14 +31847,13 @@
1729569792,1729570815,AF
1729570816,1729571839,AU
1729571840,1729572863,MY
-1729572864,1729573887,MN
+1729573632,1729573887,MN
1729573888,1729574911,NC
1729574912,1729575935,CN
1729575936,1729576959,BD
1729576960,1729577983,AU
1729577984,1729578495,HK
1729578496,1729578751,AU
-1729578752,1729579007,MY
1729579008,1729580031,JP
1729580032,1729581055,SG
1729581056,1729583103,KR
@@ -76491,7 +31880,7 @@
1729599488,1729600511,AU
1729600512,1729601535,VN
1729601536,1729603583,CN
-1729603584,1729604607,BD
+1729603584,1729604607,HK
1729604608,1729605119,AU
1729605376,1729605631,ID
1729605632,1729606655,CN
@@ -76500,7 +31889,6 @@
1729609728,1729610751,HK
1729610752,1729611775,JP
1729611776,1729612799,ID
-1729612800,1729613823,JP
1729613824,1729614847,SG
1729614848,1729615103,NZ
1729615104,1729615359,KH
@@ -76516,6 +31904,271 @@
1729623552,1729623807,TH
1729623808,1729624063,AF
1729624064,1729626111,JP
+1729626112,1729627135,HK
+1729627136,1729628159,SG
+1729628160,1729629183,KR
+1729629184,1729629695,ID
+1729629696,1729629951,AU
+1729629952,1729630207,HK
+1729630208,1729631231,PH
+1729631232,1729632255,IN
+1729632256,1729633279,SG
+1729633280,1729634303,NZ
+1729634304,1729635327,KH
+1729635328,1729636351,IN
+1729636352,1729637375,NZ
+1729637376,1729637887,SG
+1729637888,1729638143,IN
+1729638144,1729638399,AU
+1729638400,1729639423,ID
+1729639424,1729640447,JP
+1729640448,1729641471,ID
+1729641472,1729642495,IN
+1729642496,1729643519,AU
+1729643520,1729644543,JP
+1729644544,1729645823,ID
+1729645824,1729646079,SG
+1729646080,1729646591,PG
+1729646592,1729649663,IN
+1729649664,1729650687,HK
+1729650688,1729651711,PK
+1729651712,1729652735,TW
+1729652736,1729653759,ID
+1729653760,1729654783,IN
+1729654784,1729655807,NC
+1729655808,1729656831,CN
+1729656832,1729657855,AU
+1729657856,1729658879,IN
+1729658880,1729659903,CN
+1729659904,1729660415,AU
+1729660416,1729660671,MY
+1729660672,1729660927,IN
+1729660928,1729662975,NZ
+1729662976,1729663999,CN
+1729664000,1729665023,ID
+1729665024,1729666047,HK
+1729666048,1729667071,SG
+1729667072,1729668095,JP
+1729668096,1729669119,SG
+1729669120,1729670143,JP
+1729670144,1729671167,IN
+1729671168,1729672191,CN
+1729672192,1729673215,IN
+1729673216,1729674239,CN
+1729674240,1729675263,IN
+1729675264,1729676287,JP
+1729676288,1729677311,AU
+1729677312,1729678335,IN
+1729678336,1729679359,HK
+1729679360,1729680383,AU
+1729680384,1729681407,ID
+1729681408,1729682431,HK
+1729682432,1729683455,CN
+1729683456,1729684479,HK
+1729684480,1729685503,CN
+1729685504,1729687551,IN
+1729687552,1729688575,AU
+1729688576,1729689599,VN
+1729689600,1729691647,CN
+1729691648,1729693695,IN
+1729693696,1729694207,CN
+1729694208,1729694719,IN
+1729694720,1729695743,MM
+1729695744,1729696767,KR
+1729696768,1729702911,CN
+1729702912,1729703935,IN
+1729703936,1729704959,CN
+1729705216,1729705471,AU
+1729705472,1729705983,ID
+1729705984,1729706751,AU
+1729706752,1729707007,NZ
+1729707008,1729708031,HK
+1729708032,1729710079,CN
+1729710080,1729711103,HK
+1729711104,1729712127,MM
+1729712128,1729713151,BD
+1729713152,1729714175,IN
+1729714176,1729715199,JP
+1729715200,1729716223,IN
+1729716224,1729717247,TH
+1729717248,1729718271,JP
+1729718272,1729719295,HK
+1729719296,1729720319,ID
+1729720320,1729721087,AU
+1729721088,1729721343,IN
+1729721344,1729722367,NZ
+1729722368,1729726463,IN
+1729726464,1729727487,PK
+1729727488,1729728511,KI
+1729728512,1729729535,JP
+1729729536,1729730559,CN
+1729730560,1729731583,IN
+1729731584,1729732607,CN
+1729732608,1729733631,AU
+1729733632,1729733887,BD
+1729733888,1729734655,ID
+1729734656,1729736703,IN
+1729736704,1729737727,PH
+1729737728,1729738751,AU
+1729738752,1729739775,BD
+1729739776,1729740799,NZ
+1729740800,1729742335,ID
+1729742336,1729742847,PH
+1729742848,1729743871,SG
+1729743872,1729744895,IN
+1729744896,1729745919,ID
+1729745920,1729746943,AU
+1729746944,1729747967,CN
+1729747968,1729748223,IN
+1729748224,1729748479,AU
+1729748480,1729748991,ID
+1729748992,1729750015,IN
+1729750016,1729750527,VU
+1729750528,1729751039,IN
+1729751040,1729753087,TW
+1729753088,1729754111,TH
+1729754112,1729755135,NZ
+1729755136,1729756159,BD
+1729756160,1729757183,HK
+1729757184,1729758207,CN
+1729758208,1729759231,ID
+1729759232,1729760255,IN
+1729760256,1729761279,ID
+1729761280,1729762303,NZ
+1729762304,1729763327,TH
+1729763328,1729764351,SG
+1729764352,1729766399,JP
+1729766400,1729767423,PH
+1729767424,1729768447,SG
+1729768448,1729769471,MY
+1729769472,1729772543,IN
+1729772544,1729773567,AU
+1729773568,1729774591,CN
+1729774592,1729775615,AU
+1729775616,1729776127,IN
+1729776128,1729776639,MY
+1729776640,1729777663,IN
+1729777664,1729779711,PK
+1729779712,1729780735,AU
+1729780736,1729781759,HK
+1729781760,1729782783,IN
+1729782784,1729783551,ID
+1729783552,1729783807,NZ
+1729783808,1729785855,IN
+1729785856,1729786879,BD
+1729786880,1729787903,JP
+1729787904,1729789951,HK
+1729789952,1729790975,ID
+1729792000,1729793023,BD
+1729793024,1729794047,IN
+1729794048,1729795071,HK
+1729795072,1729796095,MY
+1729796096,1729797119,JP
+1729797120,1729799167,CN
+1729799168,1729800191,JP
+1729800192,1729800703,IN
+1729800704,1729801215,MY
+1729801216,1729802239,AU
+1729802240,1729803263,MY
+1729803264,1729804287,TH
+1729804288,1729805311,PK
+1729805312,1729806335,JP
+1729806336,1729807359,MN
+1729807360,1729808383,MY
+1729808384,1729808895,IN
+1729808896,1729809407,AU
+1729809408,1729810431,IN
+1729810432,1729812479,ID
+1729812480,1729813503,IN
+1729813504,1729814527,HK
+1729814528,1729815551,IN
+1729815552,1729816575,CN
+1729816576,1729817599,IN
+1729817600,1729818623,AU
+1729818624,1729819647,CN
+1729819648,1729820671,BD
+1729820672,1729821695,MY
+1729821696,1729822719,VN
+1729822720,1729822975,HK
+1729822976,1729823231,AU
+1729823232,1729823487,IN
+1729823488,1729823743,ID
+1729823744,1729824767,CN
+1729824768,1729825791,IN
+1729825792,1729826815,CN
+1729826816,1729827839,IN
+1729827840,1729828863,PK
+1729828864,1729829887,CN
+1729829888,1729831935,AU
+1729831936,1729832191,ID
+1729832192,1729832447,NZ
+1729832448,1729832959,AU
+1729832960,1729833983,JP
+1729833984,1729835007,SG
+1729835008,1729836031,IN
+1729836032,1729837055,NZ
+1729837056,1729838079,CN
+1729838080,1729840127,VN
+1729840128,1729841151,JP
+1729841152,1729842175,MY
+1729842176,1729843199,HK
+1729843200,1729844223,JP
+1729844224,1729845247,IN
+1729845248,1729846271,NZ
+1729846272,1729847295,AU
+1729847296,1729848319,CN
+1729848320,1729849343,TH
+1729849344,1729850367,MY
+1729850368,1729851391,HK
+1729851392,1729852415,MY
+1729852416,1729853439,MM
+1729853440,1729853695,IN
+1729853696,1729853951,NZ
+1729853952,1729854463,PH
+1729854464,1729855487,HK
+1729855488,1729856511,KR
+1729856512,1729857535,AU
+1729857536,1729858559,JP
+1729858560,1729859583,IN
+1729859584,1729860607,HK
+1729860608,1729861631,KR
+1729861632,1729862655,AU
+1729862656,1729863679,JP
+1729863680,1729864703,AU
+1729864704,1729866751,IN
+1729866752,1729867775,AU
+1729867776,1729869823,HK
+1729869824,1729870847,JP
+1729870848,1729871871,AU
+1729871872,1729872895,JP
+1729872896,1729873919,AU
+1729873920,1729874943,TH
+1729874944,1729875455,MY
+1729875456,1729875967,ID
+1729875968,1729876991,CN
+1729876992,1729878015,JP
+1729878016,1729879039,NZ
+1729879040,1729879167,AU
+1729879168,1729879679,JP
+1729879680,1729879807,AU
+1729879808,1729880063,JP
+1729880064,1729880831,AU
+1729880832,1729881087,NZ
+1729881088,1729881215,PH
+1729881216,1729881343,TH
+1729881344,1729881471,ID
+1729881472,1729881599,VN
+1729881600,1729881727,TH
+1729881728,1729881855,PH
+1729881856,1729881983,VN
+1729881984,1729882111,ID
+1729882112,1729883135,IN
+1729883136,1729884159,VN
+1729884160,1729885183,CN
+1729885184,1729886207,JP
+1729886208,1729887743,ID
+1729887744,1729887999,VU
+1729888000,1729888255,IN
1729888256,1729889279,KH
1729889280,1729891327,CN
1729891328,1729892351,ID
@@ -76527,7 +32180,6 @@
1729898496,1729899519,AU
1729899520,1729900543,HK
1729900544,1729901567,AU
-1729901568,1729902079,BD
1729902080,1729902591,SG
1729902592,1729903615,ID
1729903616,1729905663,KR
@@ -76571,7 +32223,6 @@
1729939968,1729940479,PH
1729940480,1729941503,CN
1729941504,1729942527,SG
-1729942528,1729943551,IN
1729943552,1729944063,AU
1729944064,1729946623,ID
1729946624,1729949695,JP
@@ -76661,7 +32312,7 @@
1730031616,1730032639,HK
1730032640,1730033663,JP
1730033664,1730034687,ID
-1730034688,1730036735,JP
+1730034688,1730035711,JP
1730036736,1730037759,HK
1730037760,1730038783,JP
1730038784,1730039807,HK
@@ -76686,7 +32337,6 @@
1730062336,1730062591,AU
1730062592,1730062847,BD
1730062848,1730064383,ID
-1730064384,1730065407,JP
1730065408,1730066431,ID
1730066432,1730067455,AU
1730067456,1730068479,BD
@@ -76700,14 +32350,15 @@
1730074368,1730074623,SG
1730074624,1730075647,CN
1730075648,1730076671,ID
-1730076672,1730077695,AU
-1730077696,1730080767,CN
+1730076672,1730080767,CN
1730080768,1730081791,HK
1730081792,1730082815,ID
1730082816,1730083839,PW
1730083840,1730084863,JP
1730084864,1730085887,CN
-1730085888,1730086911,AU
+1730085888,1730086143,AU
+1730086144,1730086399,ID
+1730086400,1730086911,AU
1730086912,1730087935,HK
1730087936,1730088959,JP
1730088960,1730091007,HK
@@ -76760,11 +32411,800 @@
1730142208,1730143231,ID
1730143232,1730144255,SG
1730144256,1730145279,ID
-1730145280,1730146303,BD
1730146304,1730147327,HK
1730147328,1730148351,JP
1730148352,1730149375,ID
1730149376,1730150399,JP
+1742733312,1742734335,HK
+1742734336,1742735359,IN
+1742735360,1742736383,JP
+1742736384,1742737407,PK
+1742737408,1742738431,SG
+1742738432,1742738687,HK
+1742738688,1742738943,AU
+1742738944,1742739455,HK
+1742739456,1742740479,IN
+1742740480,1742741503,KH
+1742741504,1742743551,IN
+1742743552,1742745599,CN
+1742745600,1742745855,IN
+1742745856,1742746111,AU
+1742746112,1742746623,IN
+1742746624,1742747135,AU
+1742747136,1742747391,IN
+1742747392,1742747647,AU
+1742747648,1742748671,HK
+1742748672,1742749695,CN
+1742749696,1742750719,ID
+1742750720,1742751743,IN
+1742751744,1742752767,HK
+1742752768,1742753791,NZ
+1742753792,1742754815,CN
+1742754816,1742756863,AU
+1742756864,1742757887,JP
+1742757888,1742758911,BN
+1742758912,1742759935,ID
+1742759936,1742760191,AU
+1742760192,1742760447,IN
+1742760448,1742760703,HK
+1742760704,1742760959,NZ
+1742760960,1742761983,IN
+1742761984,1742763007,AU
+1742763008,1742764031,SG
+1742764032,1742765823,AU
+1742765824,1742766079,AF
+1742766080,1742767103,NZ
+1742767104,1742768127,TW
+1742768128,1742769663,ID
+1742769664,1742769919,AU
+1742769920,1742770175,JP
+1742770176,1742774271,IN
+1742774272,1742774527,AU
+1742774528,1742774783,NZ
+1742774784,1742775295,AU
+1742775296,1742776319,SG
+1742776320,1742777343,VN
+1742777344,1742779647,ID
+1742779648,1742779903,IN
+1742779904,1742780415,AU
+1742780416,1742782463,IN
+1742782464,1742783487,TW
+1742783488,1742784511,MY
+1742784512,1742786559,TW
+1742786560,1742788095,AU
+1742788096,1742788607,AF
+1742788608,1742789631,IN
+1742789632,1742793727,CN
+1742793728,1742796799,IN
+1742796800,1742797823,HK
+1742797824,1742798847,JP
+1742798848,1742799871,TW
+1742799872,1742800895,NZ
+1742800896,1742801919,HK
+1742801920,1742802943,IN
+1742802944,1742804991,HK
+1742804992,1742807039,IN
+1742807040,1742808063,AU
+1742808064,1742809087,PH
+1742809088,1742810111,IN
+1742810112,1742810623,AU
+1742810624,1742811135,IN
+1742811136,1742812159,PK
+1742812160,1742813183,JP
+1742813184,1742815231,IN
+1742815232,1742815743,SG
+1742815744,1742815999,ID
+1742816000,1742817279,AU
+1742817280,1742818815,IN
+1742818816,1742819327,KH
+1742819328,1742820351,JP
+1742820352,1742821375,CN
+1742821376,1742822399,ID
+1742822400,1742823423,BD
+1742823424,1742823679,AU
+1742823680,1742823935,IN
+1742823936,1742824191,ID
+1742824192,1742826495,IN
+1742826496,1742827519,JP
+1742827520,1742828543,IN
+1742828544,1742830591,JP
+1742830592,1742833663,IN
+1742833664,1742834687,PH
+1742834688,1742835711,AU
+1742835712,1742836735,JP
+1742836736,1742837759,ID
+1742837760,1742838783,JP
+1742838784,1742841855,AU
+1742841856,1742842367,TH
+1742842368,1742843391,ID
+1742843392,1742843647,IN
+1742843648,1742843903,ID
+1742843904,1742845951,IN
+1742845952,1742846463,ID
+1742846464,1742846975,AU
+1742846976,1742847999,IN
+1742848000,1742849023,JP
+1742849024,1742851071,HK
+1742851072,1742852095,IN
+1742852096,1742852607,ID
+1742852608,1742853119,NZ
+1742853120,1742854143,HK
+1742854144,1742855167,AF
+1742855168,1742856191,PK
+1742856192,1742857215,IN
+1742857216,1742858239,BD
+1742858240,1742859263,AU
+1742859264,1742860287,VN
+1742860288,1742860799,AU
+1742860800,1742861055,ID
+1742861056,1742861311,AU
+1742861312,1742862335,NP
+1742862336,1742863359,HK
+1742863360,1742864383,JP
+1742864384,1742866431,IN
+1742866432,1742867199,AU
+1742867200,1742867455,IN
+1742867456,1742868479,PH
+1742868480,1742869503,CN
+1742869504,1742870015,IN
+1742870016,1742870527,VU
+1742870528,1742872575,IN
+1742872576,1742873599,NZ
+1742873600,1742874623,PH
+1742874624,1742875647,CN
+1742875648,1742876671,JP
+1742876672,1742877695,ID
+1742877696,1742877951,IN
+1742877952,1742878207,AU
+1742878208,1742878463,JP
+1742878464,1742878719,ID
+1742878720,1742880767,CN
+1742880768,1742881791,NZ
+1742881792,1742882815,AU
+1742882816,1742884863,KR
+1742884864,1742885887,CN
+1742885888,1742887935,IN
+1742887936,1742888959,HK
+1742888960,1742889983,KR
+1742889984,1742891007,TW
+1742891008,1742892031,AU
+1742892032,1742893055,VN
+1742893056,1742894079,NZ
+1742894080,1742895103,CN
+1742895104,1742895615,SG
+1742895616,1742895871,BD
+1742895872,1742896127,AU
+1742896128,1742897151,HK
+1742897152,1742898175,AU
+1742898176,1742899199,CN
+1742899200,1742900223,ID
+1742900224,1742903295,IN
+1742903296,1742904319,HK
+1742904320,1742905343,CN
+1742905344,1742907391,AU
+1742907392,1742908415,IN
+1742908416,1742908927,SG
+1742908928,1742909183,ID
+1742909184,1742909439,IN
+1742909440,1742910463,AU
+1742910464,1742911487,CN
+1742911488,1742914559,IN
+1742914560,1742915583,CN
+1742915584,1742918655,IN
+1742918656,1742919679,TW
+1742919680,1742920191,PK
+1742920192,1742920447,ID
+1742920448,1742921727,AU
+1742921728,1742923775,IN
+1742923776,1742924799,ID
+1742924800,1742926847,IN
+1742926848,1742927359,AU
+1742927360,1742927615,SG
+1742927616,1742927871,AU
+1742927872,1742928895,VN
+1742928896,1742929919,NZ
+1742929920,1742930175,IN
+1742930176,1742930431,MY
+1742930432,1742930943,PH
+1742930944,1742931967,KH
+1742931968,1742932991,JP
+1742932992,1742933503,SG
+1742933504,1742933759,ID
+1742933760,1742934015,NZ
+1742934016,1742935039,AF
+1742935040,1742938111,AU
+1742938112,1742939135,TW
+1742939136,1742940159,IN
+1742940160,1742941183,JP
+1742941184,1742942207,PH
+1742942208,1742943231,CN
+1742943232,1742945279,IN
+1742945280,1742945791,AU
+1742945792,1742946047,IN
+1742946048,1742947327,AU
+1742947328,1742948351,IN
+1742948352,1742951423,CN
+1742951424,1742953471,HK
+1742953472,1742954495,BD
+1742954496,1742955519,IN
+1742955520,1742956543,CN
+1742956544,1742957567,HK
+1742957568,1742958591,AU
+1742958592,1742959615,VN
+1742959616,1742960639,IN
+1742960640,1742961663,CN
+1742961664,1742962687,IN
+1742962688,1742963711,HK
+1742963712,1742965759,CN
+1742965760,1742966015,MY
+1742966016,1742968319,ID
+1742968320,1742970879,IN
+1742970880,1742971903,JP
+1742971904,1742972927,SG
+1742972928,1742973439,AU
+1742973440,1742973951,NZ
+1742973952,1742975999,SG
+1742976000,1742977023,JP
+1742977024,1742978047,HK
+1742978048,1742979071,JP
+1742979072,1742980095,HK
+1742980096,1742981119,CN
+1742981120,1742982143,NZ
+1742982144,1742983167,CN
+1742983168,1742984191,IN
+1742984192,1742985215,CN
+1742985216,1742986239,VN
+1742986240,1742987263,ID
+1742987264,1742988287,TW
+1742988288,1742989311,CN
+1742989312,1742989567,AU
+1742989568,1742989823,PH
+1742989824,1742990335,AU
+1742990336,1742991359,IN
+1742991360,1742992383,ID
+1742992384,1742993407,LK
+1742993408,1742994431,JP
+1742994432,1742995455,ID
+1742995456,1742996479,BD
+1742996480,1742997503,TH
+1742997504,1742998527,JP
+1742998528,1742999551,CN
+1742999552,1742999807,AU
+1742999808,1743000063,ID
+1743000064,1743000575,IN
+1743000576,1743001599,VN
+1743001600,1743002623,ID
+1743002624,1743003647,CN
+1743003648,1743007999,IN
+1743008000,1743008255,BD
+1743008256,1743008767,IN
+1743008768,1743010815,MY
+1743010816,1743011839,JP
+1743011840,1743012863,HK
+1743012864,1743013887,CN
+1743013888,1743015935,IN
+1743015936,1743016447,ID
+1743016448,1743016703,HK
+1743016704,1743016959,IN
+1743016960,1743017983,KH
+1743017984,1743019007,CN
+1743019008,1743021055,HK
+1743021056,1743021311,SG
+1743021312,1743021567,NZ
+1743021568,1743021823,PH
+1743021824,1743022079,IN
+1743022080,1743023103,AU
+1743023104,1743024127,HK
+1743024128,1743025151,IN
+1743025152,1743026175,ID
+1743026176,1743027199,BD
+1743027200,1743028223,AU
+1743028224,1743029247,CN
+1743029248,1743030271,AU
+1743030272,1743031295,HK
+1743031296,1743035391,IN
+1743035392,1743036415,PK
+1743036416,1743037439,CN
+1743037440,1743038463,AU
+1743038464,1743039487,JP
+1743039488,1743040511,IN
+1743040512,1743041535,CN
+1743041536,1743042559,HK
+1743042560,1743043583,IN
+1743043584,1743044607,AU
+1743044608,1743045119,IN
+1743045120,1743045631,AU
+1743045632,1743046655,JP
+1743046656,1743047679,BD
+1743047680,1743049727,CN
+1743049728,1743050751,AU
+1743050752,1743051775,TW
+1743051776,1743052799,IN
+1743052800,1743053823,JP
+1743053824,1743055871,CN
+1743055872,1743059199,ID
+1743059200,1743059967,IN
+1743059968,1743060991,LA
+1743060992,1743061503,AU
+1743061504,1743062015,IN
+1743062016,1743062271,AU
+1743062272,1743062527,IN
+1743062528,1743063039,AU
+1743063040,1743064063,SG
+1743064064,1743064575,ID
+1743064576,1743065087,IN
+1743065088,1743066111,TW
+1743066112,1743067135,CN
+1743067136,1743068159,IN
+1743068160,1743069183,HK
+1743069184,1743070207,MY
+1743070208,1743071231,IN
+1743071232,1743072255,VN
+1743072256,1743073279,BD
+1743073280,1743074047,AU
+1743074048,1743074303,IN
+1743074304,1743075327,HK
+1743075328,1743076351,MY
+1743076352,1743077375,JP
+1743077376,1743078399,IN
+1743078400,1743079423,JP
+1743079424,1743080959,ID
+1743080960,1743081471,IN
+1743081472,1743083519,BD
+1743083520,1743084543,SG
+1743084544,1743085567,TH
+1743085568,1743085823,SG
+1743085824,1743086079,AU
+1743086080,1743086591,NZ
+1743086592,1743087615,TW
+1743087616,1743088639,PH
+1743088640,1743089663,TH
+1743089664,1743090687,MY
+1743090688,1743091711,HK
+1743091712,1743092735,MN
+1743092736,1743093759,TW
+1743093760,1743094015,SG
+1743094016,1743094271,IN
+1743094272,1743094527,NZ
+1743094528,1743094783,IN
+1743094784,1743095807,TW
+1743095808,1743096831,CN
+1743096832,1743098879,HK
+1743098880,1743099903,CN
+1743099904,1743100927,KH
+1743100928,1743101951,KR
+1743101952,1743103999,ID
+1743104000,1743105023,IN
+1743105024,1743106047,CN
+1743106048,1743107071,MN
+1743107072,1743108095,HK
+1743108096,1743108607,IN
+1743108608,1743108863,SG
+1743108864,1743109119,AU
+1743109120,1743110143,HK
+1743110144,1743111167,VN
+1743111168,1743112191,HK
+1743112192,1743113215,ID
+1743113216,1743114239,SG
+1743114240,1743115263,IN
+1743115264,1743118335,CN
+1743118336,1743119359,IN
+1743119360,1743120383,CN
+1743120384,1743121407,IN
+1743121408,1743123455,CN
+1743123456,1743124479,IN
+1743124480,1743124991,NZ
+1743124992,1743125503,IN
+1743125504,1743126527,JP
+1743126528,1743127551,CN
+1743127552,1743128575,BD
+1743128576,1743129599,JP
+1743129600,1743131647,HK
+1743131648,1743132671,IN
+1743132672,1743133695,JP
+1743133696,1743134719,CN
+1743134720,1743134975,HK
+1743134976,1743135231,IN
+1743135232,1743135743,HK
+1743135744,1743136767,SG
+1743136768,1743138815,CN
+1743138816,1743139327,ID
+1743139328,1743139839,SG
+1743139840,1743140863,IN
+1743140864,1743141887,MY
+1743141888,1743142911,BD
+1743142912,1743143935,BN
+1743143936,1743144959,HK
+1743144960,1743145983,AU
+1743145984,1743147007,NZ
+1743147008,1743147263,AU
+1743147264,1743147519,NZ
+1743147520,1743147775,MN
+1743147776,1743148031,ID
+1743148032,1743149055,IN
+1743149056,1743150079,KR
+1743150080,1743151103,JP
+1743151104,1743152127,CN
+1743152128,1743153151,IN
+1743153152,1743154175,BD
+1743154176,1743155199,HK
+1743155200,1743156223,KR
+1743156224,1743157247,KH
+1743157248,1743158271,HK
+1743158272,1743160319,JP
+1743160320,1743161343,TH
+1743161344,1743163391,HK
+1743163392,1743166463,IN
+1743166464,1743167487,AU
+1743167488,1743168511,HK
+1743168512,1743169535,IN
+1743169536,1743170559,JP
+1743170560,1743171583,KR
+1743171584,1743172607,AU
+1743172608,1743173631,BD
+1743173632,1743174655,AU
+1743174656,1743175679,ID
+1743175680,1743176703,HK
+1743176704,1743179775,CN
+1743179776,1743180799,JP
+1743180800,1743181823,CN
+1743181824,1743182847,HK
+1743182848,1743184895,IN
+1743184896,1743185919,HK
+1743185920,1743186943,SG
+1743186944,1743187967,CN
+1743187968,1743188991,HK
+1743188992,1743190015,JP
+1743190016,1743191039,SG
+1743191040,1743192063,AF
+1743192064,1743195135,IN
+1743195136,1743196159,HK
+1743196160,1743198207,CN
+1743198208,1743198719,JP
+1743198720,1743198975,AU
+1743198976,1743199231,SG
+1743199232,1743200255,HK
+1743200256,1743201279,IN
+1743201280,1743202303,PH
+1743202304,1743204351,IN
+1743204352,1743205375,TW
+1743205376,1743206399,JP
+1743206400,1743207423,HK
+1743207424,1743208447,KH
+1743208448,1743210495,CN
+1743210496,1743211519,JP
+1743211520,1743212543,IN
+1743212544,1743213567,ID
+1743213568,1743214591,HK
+1743214592,1743215615,AU
+1743215616,1743216639,MM
+1743216640,1743217151,SG
+1743217152,1743217663,JP
+1743217664,1743218687,IN
+1743218688,1743219711,HK
+1743219712,1743221759,ID
+1743221760,1743222783,IN
+1743222784,1743223807,ID
+1743223808,1743224831,IN
+1743224832,1743225855,KR
+1743225856,1743226367,IN
+1743226368,1743226623,PH
+1743226624,1743226879,BD
+1743226880,1743227903,AF
+1743227904,1743228927,HK
+1743228928,1743229951,CN
+1743229952,1743230975,VN
+1743230976,1743231999,HK
+1743232000,1743232511,NZ
+1743232512,1743233023,AU
+1743233024,1743234047,BD
+1743234048,1743235071,HK
+1743235072,1743235583,AU
+1743235584,1743236095,ID
+1743236096,1743237119,US
+1743237120,1743238143,BD
+1743238144,1743240191,CN
+1743240192,1743241215,VN
+1743241216,1743242239,JP
+1743242240,1743244287,ID
+1743244288,1743245311,AU
+1743245312,1743248383,IN
+1743248384,1743248895,SG
+1743248896,1743249407,IN
+1743249408,1743250431,MY
+1743250432,1743251455,BD
+1743251456,1743252479,IN
+1743252480,1743253503,JP
+1743253504,1743254527,PH
+1743254528,1743255551,CN
+1743255552,1743256319,SG
+1743256320,1743256575,MY
+1743256576,1743258623,HK
+1743258624,1743259647,CN
+1743259648,1743260671,IN
+1743260672,1743261695,JP
+1743261696,1743262719,HK
+1743262720,1743264767,IN
+1743264768,1743265279,MY
+1743265280,1743265535,ID
+1743265536,1743265791,AU
+1743265792,1743266303,ID
+1743266304,1743267839,HK
+1743267840,1743268863,TH
+1743268864,1743269887,SG
+1743269888,1743270911,MY
+1743270912,1743273983,VN
+1743273984,1743275007,ID
+1743275008,1743276031,HK
+1743276032,1743277055,JP
+1743277056,1743278079,PH
+1743278080,1743279103,LA
+1743279104,1743281151,HK
+1743281152,1743283199,AU
+1743283200,1743284223,BD
+1743284224,1743285247,JP
+1743285248,1743286271,NZ
+1743286272,1743287295,IN
+1743287296,1743288319,AU
+1743288320,1743289343,VN
+1743289344,1743291391,IN
+1743291392,1743292415,AU
+1743292416,1743293439,IN
+1743293440,1743293951,AU
+1743293952,1743294463,PG
+1743294464,1743295487,CN
+1743295488,1743296511,IN
+1743296512,1743297535,NP
+1743297536,1743298303,NZ
+1743298304,1743299583,AU
+1743299584,1743300607,KH
+1743300608,1743301631,AU
+1743301632,1743303679,IN
+1743303680,1743304703,NZ
+1743304704,1743305727,IN
+1743305728,1743306751,JP
+1743306752,1743307775,KH
+1743307776,1743308799,AU
+1743308800,1743309823,JP
+1743309824,1743310335,NZ
+1743310336,1743311871,AU
+1743311872,1743312895,CN
+1743312896,1743313919,AU
+1743313920,1743314943,HK
+1743781888,1743783935,JP
+1743783936,1743784959,IN
+1743784960,1743785983,JP
+1743785984,1743787007,CN
+1743787008,1743789055,JP
+1743789056,1743790079,KR
+1743790080,1743791103,IN
+1743791104,1743792127,CN
+1743792128,1743793151,HK
+1743793152,1743794175,BD
+1743794176,1743795199,KR
+1743795200,1743796223,NZ
+1743796224,1743797247,JP
+1743797248,1743798271,TH
+1743798272,1743800319,HK
+1743800320,1743801343,CN
+1743801344,1743802367,IN
+1743802368,1743803391,HK
+1743803392,1743804415,CN
+1743804416,1743804671,AU
+1743804672,1743805439,IN
+1743805440,1743806463,HK
+1743806464,1743809535,IN
+1743809536,1743810559,ID
+1743810560,1743811583,KH
+1743811584,1743813631,JP
+1743813632,1743814655,CN
+1743814656,1743815679,SG
+1743815680,1743815935,AU
+1743815936,1743816191,NZ
+1743816192,1743816703,AU
+1743816704,1743817727,IN
+1743817728,1743818751,HK
+1743818752,1743819775,IN
+1743819776,1743820799,HK
+1743820800,1743821823,NZ
+1743821824,1743822847,CN
+1743822848,1743825919,IN
+1743825920,1743826943,CN
+1743826944,1743827967,MY
+1743827968,1743828991,HK
+1743828992,1743830015,NZ
+1743830016,1743832063,IN
+1743832064,1743834111,HK
+1743834112,1743838207,IN
+1743838208,1743838463,PK
+1743838464,1743838719,HK
+1743838720,1743841279,AU
+1743841280,1743843327,IN
+1743843328,1743844351,LA
+1743844352,1743845375,CN
+1743845376,1743846399,BD
+1743846400,1743847423,JP
+1743847424,1743848447,AU
+1743848448,1743848959,ID
+1743848960,1743849471,AU
+1743849472,1743850495,IN
+1743850496,1743851519,CN
+1743851520,1743852543,HK
+1743852544,1743853567,IN
+1743853568,1743853823,ID
+1743853824,1743854079,IN
+1743854080,1743854335,AU
+1743854336,1743854591,LK
+1743854592,1743856639,TH
+1743856640,1743857663,NZ
+1743857664,1743859711,IN
+1743859712,1743860735,HK
+1743860736,1743861759,IN
+1743861760,1743862783,NZ
+1743862784,1743863807,SG
+1743863808,1743864831,JP
+1743864832,1743865855,TW
+1743865856,1743866879,CN
+1743866880,1743867903,KR
+1743867904,1743868927,JP
+1743868928,1743870975,NZ
+1743870976,1743873023,CN
+1743873024,1743874047,AU
+1743874048,1743874303,JP
+1743874304,1743875071,SG
+1743875072,1743876095,HK
+1743876096,1743877119,IN
+1743877120,1743878143,KR
+1743878144,1743879167,NZ
+1743879168,1743881215,JP
+1743881216,1743885311,IN
+1743885312,1743885823,AU
+1743885824,1743886207,MY
+1743886208,1743886335,SG
+1743886336,1743887359,JP
+1743887360,1743888383,AF
+1743888384,1743889407,CN
+1743889408,1743890431,HK
+1743890432,1743891455,IN
+1743891456,1743892479,JP
+1743892480,1743892991,AU
+1743892992,1743893503,ID
+1743893504,1743894527,IN
+1743894528,1743896575,CN
+1743896576,1743897599,JP
+1743897600,1743899647,AU
+1743899648,1743900671,ID
+1743900672,1743901695,JP
+1743901696,1743902719,IN
+1743902720,1743903743,AU
+1743903744,1743904767,CN
+1743904768,1743908863,IN
+1743908864,1743909375,AU
+1743909376,1743910911,IN
+1743910912,1743911935,VN
+1743911936,1743912959,AU
+1743912960,1743913983,HK
+1743913984,1743915007,JP
+1743915008,1743916031,CN
+1743916032,1743917055,KH
+1743917056,1743918079,MY
+1743918080,1743919103,BD
+1743919104,1743920127,NZ
+1743920128,1743921151,JP
+1743921152,1743922175,AU
+1743922176,1743923199,NZ
+1743923200,1743924223,KH
+1743924224,1743925247,MN
+1743925248,1743925503,NZ
+1743925504,1743925759,AU
+1743925760,1743926271,AF
+1743926272,1743927295,VN
+1743927296,1743928319,KH
+1743928320,1743929343,IN
+1743929344,1743930367,CN
+1743930368,1743931391,NZ
+1743931392,1743932415,HK
+1743932416,1743933439,IN
+1743933440,1743934463,AU
+1743934464,1743936511,SG
+1743936512,1743937535,AU
+1743937536,1743938559,MM
+1743938560,1743939583,HK
+1743939584,1743940607,ID
+1743940608,1743941631,HK
+1743941632,1743942655,JP
+1743942656,1743944703,IN
+1743944704,1743945215,ID
+1743945216,1743945727,TO
+1743945728,1743947775,CN
+1743947776,1743948799,JP
+1743948800,1743949823,HK
+1743949824,1743950847,TH
+1743950848,1743951359,HK
+1743951360,1743951871,SG
+1743951872,1743953919,IN
+1743953920,1743954943,CN
+1743954944,1743955967,PG
+1743955968,1743959039,CN
+1743959040,1743959551,ID
+1743959552,1743960063,AU
+1743960064,1743964159,IN
+1743964160,1743965183,CN
+1743965184,1743966719,ID
+1743966720,1743967231,AU
+1743967232,1743968255,CN
+1743968256,1743969279,BD
+1743969280,1743970303,CN
+1743970304,1743971327,IN
+1743971328,1743972351,NZ
+1743972352,1743972607,IN
+1743972608,1743972863,ID
+1743972864,1743973119,IN
+1743973120,1743973375,AU
+1743973376,1743974399,IN
+1743974400,1743975423,CN
+1743975424,1743976447,NZ
+1743976448,1743977471,AU
+1743977472,1743978495,JP
+1743978496,1743979519,HK
+1743979520,1743980543,JP
+1743980544,1743981567,IN
+1743981568,1743982591,SG
+1743982592,1743983359,AU
+1743983360,1743983615,IN
+1743983616,1743984639,KR
+1743984640,1743985663,CN
+1743985664,1743994879,IN
+1743994880,1743995903,AU
+1743995904,1743997951,IN
+1743997952,1743999999,BD
+1744000000,1744001023,AU
+1744001024,1744001535,IN
+1744001536,1744001791,NZ
+1744001792,1744002047,AU
+1744002048,1744003071,HK
+1744003072,1744004095,NZ
+1744004096,1744005119,HK
+1744005120,1744006143,VN
+1744006144,1744006655,ID
+1744006656,1744006911,AU
+1744006912,1744009215,IN
+1744009216,1744010239,JP
+1744010240,1744011263,ID
+1744011264,1744012287,HK
+1744012288,1744013311,IN
+1744013312,1744014335,CN
+1744014336,1744015359,BD
+1744015360,1744016383,IN
+1744016384,1744017407,AU
+1744017408,1744018431,JP
+1744018432,1744019455,MY
+1744019456,1744020479,NZ
+1744020480,1744021503,HK
+1744021504,1744022527,TH
+1744022528,1744023551,SG
+1744023552,1744023807,IN
+1744023808,1744024319,ID
+1744024320,1744024575,AF
+1744024576,1744025599,HK
+1744025600,1744026623,IN
+1744026624,1744027647,JP
+1744027648,1744028671,MY
+1744028672,1744029695,JP
+1744029696,1744030719,KR
+1744030720,1744031743,NZ
+1744031744,1744032767,JP
+1744032768,1744033791,MY
+1744033792,1744034815,VN
+1744034816,1744035839,SG
+1744035840,1744039423,IN
+1744039424,1744039679,PH
+1744039680,1744039935,AU
+1744039936,1744040959,JP
+1744040960,1744041471,AU
+1744041472,1744041983,ID
+1744041984,1744043007,TW
+1744043008,1744044031,CN
1744044032,1744045055,HK
1744045056,1744047103,SG
1744047104,1744048127,BD
@@ -76781,7 +33221,8 @@
1744056832,1744057087,NZ
1744057088,1744057343,ID
1744057344,1744058367,HK
-1744058368,1744067583,CN
+1744058368,1744066559,CN
+1744066560,1744067583,HK
1744067584,1744068607,JP
1744068608,1744069631,ID
1744069632,1744070655,SG
@@ -76794,7 +33235,7 @@
1744078848,1744079871,VN
1744079872,1744080895,BD
1744080896,1744081919,AF
-1744081920,1744082943,CN
+1744081920,1744082943,HK
1744082944,1744083967,IN
1744083968,1744084991,HK
1744084992,1744085503,ID
@@ -76816,7 +33257,6 @@
1744101376,1744102399,HK
1744102400,1744103423,FJ
1744103424,1744104447,CN
-1744104448,1744105471,AU
1744105472,1744106751,IN
1744106752,1744107007,ID
1744107008,1744107519,SG
@@ -76825,7 +33265,6 @@
1744109568,1744110591,IN
1744110592,1744111615,JP
1744111616,1744113663,IN
-1744113664,1744114687,JP
1744114688,1744115455,IN
1744115456,1744115711,CN
1744115712,1744116735,MY
@@ -76894,7 +33333,6 @@
1744184576,1744184831,SG
1744184832,1744185087,HK
1744185088,1744185343,JP
-1744185344,1744186367,HK
1744186368,1744187903,IN
1744187904,1744188159,TH
1744188160,1744188415,AU
@@ -76905,7 +33343,7 @@
1744192512,1744194559,JP
1744194560,1744194815,ID
1744194816,1744195071,HK
-1744195072,1744195327,SG
+1744195072,1744195327,AU
1744195328,1744195583,HK
1744195584,1744196607,JP
1744196608,1744197631,IN
@@ -76917,9 +33355,9 @@
1744202240,1744202495,IN
1744202496,1744202751,ID
1744202752,1744203775,PK
-1744203776,1744204356,MY
-1744204357,1744204484,HK
-1744204485,1744204799,MY
+1744203776,1744204287,MY
+1744204288,1744204415,HK
+1744204416,1744204799,MY
1744204800,1744205823,ID
1744205824,1744207871,CN
1744207872,1744208127,AU
@@ -76943,7 +33381,6 @@
1744222208,1744222719,ID
1744222720,1744223231,AU
1744223232,1744224255,TH
-1744224256,1744225279,JP
1744225280,1744226303,IN
1744226304,1744227327,SG
1744227328,1744228351,MY
@@ -76951,7 +33388,6 @@
1744229376,1744230399,IN
1744230400,1744230655,HK
1744230656,1744230911,MY
-1744230912,1744231423,IN
1744231424,1744232447,VN
1744232448,1744233471,IN
1744233472,1744234495,KH
@@ -76964,17 +33400,15 @@
1744238848,1744239615,NZ
1744239616,1744240639,JP
1744240640,1744241663,AU
-1744241664,1744242687,JP
1744242688,1744245503,ID
1744245504,1744245759,AU
1744245760,1744247807,ID
1744247808,1744248831,IN
-1744248832,1744250367,ID
+1744248832,1744249855,ID
1744250368,1744250879,PH
1744250880,1744251903,ID
1744251904,1744252927,BD
1744252928,1744253951,LK
-1744253952,1744254975,JP
1744254976,1744255999,NZ
1744256000,1744257023,TH
1744257024,1744257535,AU
@@ -77030,12 +33464,522 @@
1744303872,1744304127,NZ
1744304128,1744305151,AU
1744305152,1744306175,PH
+1744306176,1744306687,CN
+1744306688,1744308223,AU
+1744308224,1744309247,JP
+1744309248,1744310271,BD
+1744310272,1744312319,AU
+1744312320,1744312575,IN
+1744312576,1744312831,ID
+1744312832,1744313343,AU
+1744313344,1744315391,IN
+1744315392,1744316415,HK
+1744316416,1744317439,KH
+1744317440,1744318463,AU
+1744318464,1744320511,JP
+1744320512,1744321535,ID
+1744321536,1744322559,IN
+1744322560,1744323583,CN
+1744323584,1744324607,JP
+1744324608,1744325631,IN
+1744325632,1744326655,HK
+1744326656,1744328703,IN
+1744328704,1744329727,JP
+1744329728,1744330751,IN
+1744330752,1744331519,AU
+1744331520,1744331775,SG
+1744331776,1744332799,CN
+1744332800,1744333823,KR
+1744333824,1744334847,HK
+1744334848,1744337919,IN
+1744337920,1744338943,CN
+1744338944,1744339967,AU
+1744339968,1744340991,SG
+1744340992,1744343039,HK
+1744343040,1744343551,SG
+1744343552,1744343807,ID
+1744343808,1744344063,AU
+1744344064,1744345087,JP
+1744345088,1744346111,CN
+1744346112,1744347135,IN
+1744347136,1744349183,VN
+1744349184,1744350207,CN
+1744350208,1744351231,IN
+1744351232,1744352255,NZ
+1744352256,1744354303,HK
+1744354304,1744355327,AU
+1744355328,1744356351,CN
+1744356352,1744357375,JP
+1744357376,1744357631,NZ
+1744357632,1744358399,AU
+1744358400,1744359423,BD
+1744359424,1744360447,IN
+1744360448,1744361471,CN
+1744361472,1744362495,ID
+1744363520,1744365567,CN
+1744365568,1744366591,IN
+1744366592,1744367615,BD
+1744367616,1744368639,HK
+1744368640,1744369663,IN
+1744369664,1744369919,ID
+1744369920,1744370431,AU
+1744370432,1744370687,JP
+1744370688,1744371711,HK
+1744371712,1744372735,BD
+1744372736,1744373759,IN
+1744373760,1744374783,JP
+1744374784,1744375807,CN
+1744375808,1744376831,IN
+1744376832,1744377855,VN
+1744377856,1744378879,IN
+1744378880,1744379903,KR
+1744379904,1744380927,HK
+1744380928,1744383999,IN
+1744384000,1744385023,AU
+1744385024,1744386047,CN
+1744386048,1744386303,BD
+1744386304,1744386559,AU
+1744386560,1744387071,ID
+1744387072,1744388095,NZ
+1744388096,1744388607,ID
+1744388608,1744390143,AU
+1744390144,1744391167,HK
+1744391168,1744393215,IN
+1744393216,1744394239,MY
+1744394240,1744395263,IN
+1744395264,1744396287,MY
+1744396288,1744397311,IN
+1744397312,1744398335,VN
+1744398336,1744400383,HK
+1744400384,1744402431,JP
+1744402432,1744403455,IN
+1744403456,1744404479,AU
+1744404480,1744405503,CN
+1744406528,1744407551,CN
+1744407552,1744408575,AU
+1744408576,1744409599,CN
+1744409600,1744410623,AU
+1744410624,1744411647,PK
+1744411648,1744412671,JP
+1744412672,1744413695,SG
+1744413696,1744417791,CN
+1744417792,1744418815,IN
+1744418816,1744419839,JP
+1744419840,1744421887,CN
+1744421888,1744422911,HK
+1744422912,1744423935,JP
+1744423936,1744424959,IN
+1744424960,1744425471,MY
+1744425472,1744425727,ID
+1744425728,1744425983,IN
+1744425984,1744427007,JP
+1744427008,1744428031,PG
+1744428032,1744429567,AU
+1744429568,1744429823,IN
+1744429824,1744430079,ID
+1744430080,1744431103,PK
+1744431104,1744434175,IN
+1744434176,1744435199,CN
+1744435200,1744436223,IN
+1744436224,1744437247,CN
+1744437248,1744439295,JP
+1744439296,1744439807,AU
+1744439808,1744440319,IN
+1744440320,1744441343,HK
+1744441344,1744442367,IN
+1744442368,1744443391,AU
+1744443392,1744444415,VN
+1744444416,1744445439,IN
+1744445440,1744446463,CN
+1744446464,1744447487,JP
+1744447488,1744447743,IN
+1744447744,1744447999,HK
+1744448000,1744448511,BD
+1744448512,1744449535,IN
+1744449536,1744450559,NZ
+1744450560,1744451583,HK
+1744451584,1744452607,SG
+1744452608,1744453119,AU
+1744453120,1744453375,IN
+1744453376,1744453631,AU
+1744453632,1744454655,SG
+1744454656,1744455679,BD
+1744455680,1744456703,JP
+1744456704,1744459775,IN
+1744459776,1744460799,NZ
+1744460800,1744462847,JP
+1744462848,1744463871,NZ
+1744463872,1744464895,CN
+1744464896,1744465919,JP
+1744465920,1744466943,IN
+1744466944,1744467967,NZ
+1744467968,1744468991,JP
+1744468992,1744470015,CN
+1744470016,1744471039,TH
+1744471040,1744472063,NP
+1744472064,1744473087,IN
+1744473088,1744473343,TW
+1744473344,1744474111,SG
+1744474112,1744481279,IN
+1744481280,1744482303,JP
+1744482304,1744483327,IN
+1744483328,1744484351,CN
+1744484352,1744485119,IN
+1744485120,1744485375,MY
+1744485376,1744486399,IN
+1744486400,1744487423,CN
+1744487424,1744487935,TH
+1744487936,1744488191,NZ
+1744488192,1744488447,ID
+1744488448,1744489471,JP
+1744489472,1744490495,NZ
+1744490496,1744491519,IN
+1744491520,1744492543,AU
+1744492544,1744493567,CN
+1744493568,1744494079,AU
+1744494080,1744494591,PK
+1744494592,1744495615,CN
+1744495616,1744497663,NZ
+1744497664,1744498687,CN
+1744498688,1744500735,AU
+1744500736,1744502783,CN
+1744502784,1744503807,MY
+1744503808,1744504831,AU
+1744504832,1744505855,MY
+1744505856,1744506367,AU
+1744506368,1744506623,ID
+1744506624,1744506879,AU
+1744506880,1744510975,IN
+1744510976,1744511999,CN
+1744512000,1744513023,HK
+1744513024,1744513535,ID
+1744513536,1744513791,AU
+1744513792,1744514047,IN
+1744514048,1744514559,ID
+1744514560,1744514815,IN
+1744514816,1744515071,AU
+1744515072,1744516095,IN
+1744516096,1744517119,HK
+1744517120,1744519167,IN
+1744519168,1744520191,AU
+1744520192,1744521215,TH
+1744521216,1744523263,JP
+1744523264,1744524287,IN
+1744524288,1744525311,CN
+1744525312,1744526335,HK
+1744526336,1744527359,IN
+1744527360,1744528383,CN
+1744528384,1744529407,IN
+1744529408,1744530431,KR
+1744530432,1744530943,SG
+1744530944,1744531455,AU
+1744531456,1744532479,HK
+1744532480,1744533503,JP
+1744533504,1744534527,BD
+1744534528,1744536575,CN
+1744536576,1744537087,PW
+1744537088,1744538623,AU
+1744538624,1744539647,HK
+1744539648,1744540671,AU
+1744540672,1744541695,IN
+1744541696,1744542719,ID
+1744542720,1744543743,JP
+1744543744,1744544767,CN
+1744544768,1744545791,HK
+1744545792,1744546047,NZ
+1744546048,1744547839,AU
+1744547840,1744548863,AF
+1744548864,1744549887,ID
+1744549888,1744551935,IN
+1744551936,1744552959,JP
+1744552960,1744553471,SG
+1744553472,1744553983,HK
+1744553984,1744555007,MY
+1744555008,1744556031,CN
+1744556032,1744562175,IN
+1744562176,1744563199,BD
+1744563200,1744565247,CN
+1744565248,1744566271,HK
+1744566272,1744567295,IN
+1744567296,1744568319,JP
+1744568320,1744569343,VN
+1744569344,1744570367,IN
+1744570368,1744570879,JP
+1744570880,1744571391,AU
+1744571392,1744571903,ID
+1744571904,1744572415,AU
+1744572416,1744573439,HK
+1744573440,1744574463,ID
+1744574464,1744575487,IN
+1744575488,1744576511,CN
+1744576512,1744577535,IN
+1744577536,1744578559,CN
+1744578560,1744580607,IN
+1744580608,1744580863,PH
+1744580864,1744581119,SG
+1744581120,1744581631,ID
+1744581632,1744582655,JP
+1744582656,1744583679,AU
+1744583680,1744584703,IN
+1744584704,1744585727,CN
+1744585728,1744586751,TW
+1744586752,1744588799,HK
+1744589824,1744590079,BT
+1744590080,1744590335,ID
+1744590336,1744590591,IN
+1744590592,1744590847,AU
+1744590848,1744591871,HK
+1744591872,1744593919,IN
+1744593920,1744594431,ID
+1744594432,1744594943,AU
+1744594944,1744595967,CN
+1744595968,1744596991,IN
+1744596992,1744598015,SG
+1744598016,1744602111,JP
+1744602112,1744603135,HK
+1744603136,1744604159,JP
+1744604160,1744607231,IN
+1744607232,1744608255,AU
+1744608256,1744609791,IN
+1744609792,1744610047,HK
+1744610048,1744610303,ID
+1744610304,1744612351,IN
+1744612352,1744613375,CN
+1744613376,1744614399,HK
+1744614400,1744615423,JP
+1744615424,1744616447,IN
+1744616448,1744616959,ID
+1744616960,1744617471,AU
+1744617472,1744618495,IN
+1744618496,1744619519,JP
+1744619520,1744620543,SG
+1744620544,1744622591,CN
+1744622592,1744625663,IN
+1744625664,1744626687,SG
+1744626688,1744627711,KR
+1744627712,1744628735,CN
+1744628736,1744629759,IN
+1744629760,1744630783,HK
+1744630784,1744631039,TW
+1744631040,1744631295,IN
+1744631296,1744631551,AU
+1744631552,1744631807,NZ
+1744631808,1744632831,CN
+1744632832,1744633855,VN
+1744633856,1744634879,ID
+1744634880,1744635903,CN
+1744635904,1744636927,HK
+1744636928,1744637951,MY
+1744637952,1744638975,JP
+1744638976,1744639999,IN
+1744640000,1744641023,SG
+1744641024,1744643583,IN
+1744643584,1744644095,BD
+1744644096,1744645119,HK
+1744645120,1744646143,BD
+1744646144,1744647167,PH
+1744647168,1744648191,IN
+1744648192,1744649215,KR
+1744649216,1744650239,CN
+1744650240,1744651263,AU
+1744651264,1744651775,ID
+1744651776,1744652287,IN
+1744652288,1744653311,TH
+1744653312,1744655871,JP
+1744655872,1744656383,ID
+1744656384,1744657407,VN
+1744657408,1744658431,AU
+1744658432,1744659455,HK
+1744659456,1744660479,JP
+1744660480,1744660735,IN
+1744660736,1744660991,MY
+1744660992,1744661503,ID
+1744661504,1744662527,MY
+1744662528,1744663551,ID
+1744663552,1744663807,NZ
+1744663808,1744664063,TH
+1744664064,1744664575,AU
+1744664576,1744665599,HK
+1744665600,1744665855,ID
+1744665856,1744666111,IN
+1744666112,1744666367,AU
+1744666368,1744666623,PH
+1744666624,1744667647,JP
+1744667648,1744668671,TH
+1744668672,1744669695,NZ
+1744669696,1744670719,HK
+1744670720,1744671743,SG
+1744671744,1744673791,IN
+1744673792,1744674815,PK
+1744674816,1744675839,BD
+1744675840,1744676351,SG
+1744676352,1744678911,IN
+1744678912,1744679935,JP
+1744679936,1744680959,KH
+1744680960,1744681983,WS
+1744681984,1744683007,JP
+1744683008,1744685055,AU
+1744685056,1744686079,IN
+1744686080,1744687103,CN
+1744687104,1744688127,IN
+1744688128,1744689151,ID
+1744689152,1744690175,JP
+1744690176,1744692223,CN
+1744692224,1744693247,IN
+1744693248,1744694271,CN
+1744694272,1744696319,HK
+1744696320,1744697343,PH
+1744697344,1744698367,HK
+1744698368,1744699391,KH
+1744699392,1744700415,NZ
+1744700416,1744701439,AU
+1744701440,1744702463,CN
+1744702464,1744704511,VN
+1744704512,1744705535,CN
+1744705536,1744705791,AU
+1744705792,1744706047,ID
+1744706048,1744706303,BD
+1744706304,1744708607,IN
+1744708608,1744709631,PH
+1744709632,1744710655,VN
+1744710656,1744711679,SG
+1744711680,1744712191,ID
+1744712192,1744712447,AU
+1744712448,1744712703,ID
+1744712704,1744714751,IN
+1744714752,1744715775,JP
+1744715776,1744719871,CN
+1744719872,1744720895,IN
+1744720896,1744721919,BD
+1744721920,1744723455,AU
+1744723456,1744723711,BD
+1744723712,1744723967,ID
+1744723968,1744726015,IN
+1744726016,1744727039,ID
+1744727040,1744728063,HK
+1744728064,1744729087,CN
+1744729088,1744730111,HK
+1744730112,1744731135,MN
+1744731136,1744731647,IN
+1744731648,1744732159,ID
+1744732160,1744733183,IN
+1744733184,1744734207,NZ
+1744734208,1744736255,AU
+1744736256,1744737279,JP
+1744737280,1744738303,CN
+1744738304,1744739327,SG
+1744739328,1744740351,NZ
+1744740352,1744741375,IN
+1744741376,1744741887,AU
+1744741888,1744742143,AF
+1744742144,1744742399,BD
+1744742400,1744743423,ID
+1744743424,1744744447,IN
+1744744448,1744745471,CN
+1744745472,1744747519,NP
+1744747520,1744748543,CN
+1744748544,1744749055,JP
+1744749056,1744749567,NZ
+1744749568,1744749823,CN
+1744749824,1744750591,AU
+1744750592,1744752639,IN
+1744752640,1744753663,HK
+1744753664,1744754687,SG
+1744754688,1744755711,VN
+1744755712,1744756735,CN
+1744756736,1744757759,PF
+1744757760,1744758271,NZ
+1744758272,1744758527,IN
+1744758528,1744758783,NZ
+1744758784,1744759807,PF
+1744759808,1744762879,IN
+1744762880,1744763903,PH
+1744763904,1744764927,HK
+1744764928,1744765951,JP
+1744765952,1744766975,PK
+1744766976,1744767999,IN
+1744768000,1744768255,ID
+1744768256,1744768511,TH
+1744768512,1744769023,ID
+1744769024,1744770047,AU
+1744770048,1744771071,JP
+1744771072,1744772095,NZ
+1744772096,1744772351,IN
+1744772352,1744772607,ID
+1744772608,1744772863,BD
+1744772864,1744773119,AU
+1744773120,1744774143,SG
+1744774144,1744776191,IN
+1744776192,1744777215,HK
+1744777216,1744778239,AU
+1744778240,1744778751,ID
+1744778752,1744779263,AU
+1744779264,1744781311,HK
+1744781312,1744782335,JP
+1744782336,1744783359,CN
+1744783360,1744786431,IN
+1744786432,1744787455,VN
+1744787456,1744789503,CN
+1744789504,1744792575,IN
+1744792576,1744793599,PK
+1744793600,1744794623,IN
+1744794624,1744795647,KH
+1744795648,1744797183,ID
+1744797184,1744797439,NP
+1744797440,1744797695,HK
+1744797696,1744798719,PK
+1744798720,1744799743,HK
+1744799744,1744801791,CN
+1744801792,1744802815,IN
+1744802816,1744803839,PK
+1744803840,1744804863,PH
+1744804864,1744805375,ID
+1744805376,1744808447,IN
+1744808448,1744808959,MY
+1744808960,1744809983,MM
+1744809984,1744811007,HK
+1744811008,1744812031,IN
+1744812032,1744813055,CN
+1744813056,1744816127,IN
+1744816128,1744817151,CN
+1744817152,1744818175,IN
+1744818176,1744820223,CN
+1744820224,1744823295,IN
+1744823296,1744824319,CN
+1744824320,1744825343,IN
+1744825344,1744826367,VN
+1744826368,1744827391,ID
+1744827392,1744828415,JP
+1744828416,1744828927,AU
+1744828928,1744829183,SG
+1744829184,1744829439,AU
+1744829440,1744830463,HK
+1744830464,1747191807,US
+1747191808,1747193855,CA
+1747193856,1747198975,US
+1747200000,1747214335,US
+1747215360,1747216383,CA
+1747216384,1747218431,US
+1747219456,1747220479,CA
+1747320832,1753227263,US
+1753231360,1753243647,US
+1753350144,1753415679,US
+1762656256,1763704831,MU
+1763704832,1764753407,EG
+1764753408,1765801983,KE
+1765801984,1766850559,MA
+1766850560,1767899135,EG
+1767899136,1768947711,DZ
+1768947712,1769996287,NG
1769996288,1772093439,MA
1772093440,1772617727,KE
1772617728,1773142015,AO
-1774190592,1774452735,EG
-1774452736,1774714879,NG
-1774714880,1775239167,EG
+1773142016,1773273087,ZA
+1773273088,1773404159,RW
+1773404160,1773666303,EG
+1773666304,1773928447,ZA
+1773928448,1774190591,MA
+1774190592,1775239167,EG
1775239168,1776680959,ZA
1776680960,1776812031,KE
1776812032,1776877567,NA
@@ -77076,380 +34020,267 @@
1784676352,1785200639,KR
1785200640,1785462783,TW
1785462784,1786773503,CN
-1786773504,1790595071,JP
-1790595072,1790597119,US
-1790597120,1790648319,JP
-1790648320,1790649007,CN
-1790649008,1790649008,JP
-1790649009,1790650367,CN
-1790650368,1790967807,JP
+1786773504,1790967807,JP
1790967808,1793064959,IN
1793064960,1794113535,CN
1794113536,1795162111,KR
-1795162112,1795555359,US
-1795555360,1795555455,CA
-1795555456,1795555519,US
-1795555520,1795555583,CA
-1795555584,1795555839,US
+1795162112,1795387903,US
+1795387904,1795388159,CA
+1795388160,1795555839,US
1795555840,1795555855,CA
-1795555856,1795555863,US
-1795555864,1795555903,CA
-1795555904,1795555967,CW
-1795555968,1795556095,CA
-1795556096,1795556103,US
-1795556104,1795556127,CA
-1795556128,1795556175,US
-1795556176,1795556183,CA
-1795556184,1795556191,US
-1795556192,1795556255,CA
-1795556256,1795556287,US
-1795556288,1795556319,QA
-1795556320,1795556351,US
+1795555856,1795556351,US
1795556352,1795556607,CA
-1795556608,1795556623,US
-1795556624,1795556863,CA
-1795556864,1795556927,US
-1795556928,1795556959,CA
-1795556960,1795556991,US
-1795556992,1795557119,CA
-1795557120,1795557135,US
-1795557136,1795557143,CA
-1795557144,1795557151,US
-1795557152,1795557215,CA
-1795557216,1795557247,US
-1795557248,1795557375,CA
+1795556608,1795557375,US
1795557376,1795557631,IN
1795557632,1795559423,US
1795559424,1795559679,AR
-1795559680,1795559743,US
-1795559744,1795559807,AE
-1795559808,1795560447,US
+1795559680,1795560447,US
1795560448,1795560959,CA
-1795560960,1795561215,US
-1795561216,1795562239,CA
+1795560960,1795561471,US
+1795561472,1795562239,CA
1795562240,1795563263,US
1795563264,1795563519,CA
1795563520,1795564031,US
1795564032,1795564543,CA
-1795564544,1795565631,US
-1795565632,1795565719,CA
-1795565720,1795565759,US
-1795565760,1795565791,CA
-1795565792,1795565807,US
-1795565808,1795566143,CA
-1795566144,1795566207,US
-1795566208,1795566231,CA
-1795566232,1795566239,US
-1795566240,1795566303,CA
-1795566304,1795566335,US
+1795564544,1795565823,US
+1795565824,1795566079,CA
+1795566080,1795566335,US
1795566336,1795566591,CA
-1795566592,1795567615,US
-1795567616,1795567663,CA
-1795567664,1795567679,US
-1795567680,1795567695,CA
-1795567696,1795567711,US
-1795567712,1795567735,CA
-1795567736,1795567743,US
-1795567744,1795567775,CA
-1795567776,1795567791,US
-1795567792,1795567807,CA
-1795567808,1795567871,US
-1795567872,1795568639,CA
+1795566592,1795568127,US
+1795568128,1795568639,CA
1795568640,1795569663,US
1795569664,1795570175,CA
-1795570176,1795570463,US
-1795570464,1795570495,CA
-1795570496,1795570655,US
-1795570656,1795570671,CA
-1795570672,1795571199,US
-1795571200,1795571215,CA
-1795571216,1795571223,US
-1795571224,1795571231,CA
-1795571232,1795571327,US
-1795571328,1795571391,CA
-1795571392,1795571423,US
-1795571424,1795571455,CA
-1795571456,1795583999,US
+1795570176,1795583999,US
1795584000,1795588095,SG
-1795588096,1796253695,US
-1796253696,1796253951,CA
-1796253952,1796257919,US
-1796257920,1796258047,PR
-1796258048,1796262911,US
-1796262912,1796263167,PR
-1796263168,1796325375,US
-1796325376,1796325631,PR
-1796325632,1796514244,US
-1796514245,1796514245,US
-1796514246,1803550719,US
-1807745024,1815806207,US
-1815806208,1815806463,US
-1815806464,1815808656,US
-1815808657,1815808657,US
-1815808658,1815822335,US
+1795588096,1795591167,US
+1795591168,1795592191,NL
+1795592192,1795593727,US
+1795593728,1795595775,NL
+1795595776,1795596287,US
+1795596288,1795603455,NL
+1795603456,1805049855,US
+1805049856,1805058047,CA
+1805058048,1805144063,US
+1805144064,1805148159,CA
+1805148160,1805167103,US
+1805167104,1805167359,FR
+1805167360,1805171231,US
+1805171232,1805171239,CA
+1805171240,1805171607,US
+1805171608,1805171615,CA
+1805171616,1805190399,US
+1805190400,1805190655,ES
+1805190656,1805210623,US
+1805210624,1805210879,EG
+1805210880,1805582335,US
+1805582336,1805647871,CA
+1805647872,1805713407,US
+1805713408,1805717503,CA
+1805717504,1805721599,US
+1805721600,1805725695,CA
+1805725696,1805729791,US
+1805729792,1805733887,CA
+1805733888,1805737983,US
+1805737984,1805742079,CA
+1805742080,1805752575,US
+1805752576,1805753087,CA
+1805753088,1805754111,US
+1805754112,1805754367,CA
+1805754368,1806174207,US
+1806174208,1806174463,BR
+1806174464,1806205183,US
+1806205184,1806205439,CA
+1806205440,1806263551,US
+1806263552,1806263807,KR
+1806263808,1806401535,US
+1806401536,1806434303,CA
+1806434304,1806925823,US
+1806925824,1806958591,CA
+1806958592,1807056895,US
+1807056896,1807057151,AU
+1807057152,1807057663,US
+1807057664,1807057919,GB
+1807057920,1807597567,US
+1807597568,1807646719,CA
+1807646720,1807695871,US
+1807695872,1807699967,VI
+1807699968,1815822335,US
1815822336,1815826431,CA
1815826432,1815871487,US
1815871488,1815879679,CA
-1815879680,1815905034,US
-1815905035,1815905038,US
-1815905039,1815912447,US
+1815879680,1815912447,US
1815912448,1815920639,CA
1815920640,1815928831,US
1815928832,1815937023,BS
-1815937024,1815940111,US
-1815940112,1815940127,US
-1815940128,1815950191,US
-1815950192,1815950207,US
-1815950208,1815951247,US
-1815951248,1815951263,US
-1815951264,1815951407,US
-1815951408,1815951423,US
-1815951424,1815957823,US
-1815957824,1815957887,US
-1815957888,1815996159,US
+1815937024,1815961599,US
+1815961600,1815961855,AU
+1815961856,1815962111,ES
+1815962112,1815962623,NL
+1815962624,1815963391,US
+1815963392,1815963647,NL
+1815963648,1815964159,US
+1815964160,1815964415,DK
+1815964416,1815964671,PL
+1815964672,1815965951,US
+1815965952,1815966207,DE
+1815966208,1815966719,US
+1815966720,1815966975,GB
+1815966976,1815967231,US
+1815967232,1815967487,CA
+1815967488,1815968255,US
+1815968256,1815968511,FR
+1815968512,1815968639,US
+1815968640,1815968767,FR
+1815968768,1815969279,US
+1815969280,1815969791,JP
+1815969792,1815987199,US
+1815987200,1815987711,GB
+1815987712,1815988223,NL
+1815988224,1815988735,JP
+1815988736,1815990271,US
+1815990272,1815990783,FR
+1815990784,1815991295,US
+1815991296,1815991807,AU
+1815991808,1815995135,US
+1815995136,1815995391,AU
+1815995392,1815995903,US
+1815995904,1815996159,GB
1815996160,1815996415,CA
-1815996416,1816001791,US
+1815996416,1815997695,US
+1815997696,1815997951,FR
+1815997952,1816001791,US
1816001792,1816002559,NL
-1816002560,1816005799,US
-1816005800,1816005807,LK
-1816005808,1816007167,US
-1816007168,1816007175,CA
-1816007176,1816007663,US
-1816007664,1816007671,CA
-1816007672,1816008959,US
-1816008960,1816009215,IN
-1816009216,1816024319,US
-1816024320,1816024575,CA
-1816024576,1816031343,US
-1816031344,1816031351,CA
-1816031352,1816049983,US
-1816049984,1816050047,CN
-1816050048,1816068095,US
-1816068096,1816070415,CA
-1816070416,1816070423,AD
-1816070424,1816133631,CA
+1816002560,1816068095,US
+1816068096,1816133631,CA
1816133632,1822429183,US
1822429184,1822433279,CA
1822433280,1822445567,US
1822445568,1822451199,CA
1822451200,1822486527,US
-1822486528,1822489111,CA
-1822489112,1822489119,US
-1822489120,1822490623,CA
+1822486528,1822490623,CA
1822490624,1822498815,US
1822498816,1822502911,CA
1822502912,1822519295,US
1822519296,1822523391,CA
1822523392,1822531583,US
1822531584,1822535679,CA
-1822535680,1822552319,US
-1822552320,1822552383,GB
-1822552384,1822552527,US
-1822552528,1822552535,GB
-1822552536,1822572543,US
+1822535680,1822552575,US
+1822552576,1822553087,AT
+1822553088,1822553343,US
+1822553344,1822553599,BR
+1822553600,1822553855,US
+1822553856,1822554111,HK
+1822554112,1822572543,US
1822572544,1822605311,CA
-1822605312,1822654463,US
-1822654464,1822670847,CA
+1822605312,1822609407,US
+1822609408,1822609535,SG
+1822609536,1822611487,US
+1822611488,1822611551,CA
+1822611552,1822611967,US
+1822611968,1822612479,CA
+1822612480,1822614015,US
+1822614016,1822614271,JP
+1822614272,1822614783,US
+1822614784,1822615039,FR
+1822615040,1822617855,US
+1822617856,1822618367,CA
+1822618368,1822618879,US
+1822618880,1822619391,CA
+1822619392,1822619903,US
+1822619904,1822620415,AU
+1822620416,1822654463,US
+1822654464,1822662143,CA
+1822662144,1822662399,US
+1822662400,1822670847,CA
1822670848,1822949375,US
1822949376,1822982143,CA
-1822982144,1823081975,US
-1823081976,1823081983,ID
-1823081984,1823082199,US
-1823082200,1823082207,TR
-1823082208,1823083583,US
-1823083584,1823083591,QA
-1823083592,1823083823,US
-1823083824,1823083831,QA
-1823083832,1823084767,US
-1823084768,1823084775,QA
-1823084776,1823084799,US
-1823084800,1823084807,TR
-1823084808,1823085855,US
-1823085856,1823085863,PE
-1823085864,1823090775,US
-1823090776,1823090783,EG
-1823090784,1823092511,US
-1823092512,1823092527,IN
-1823092528,1823093063,US
-1823093064,1823093071,QA
-1823093072,1823113215,US
+1822982144,1823113215,US
1823113216,1823129599,CA
1823129600,1823162367,US
1823162368,1823170559,CA
1823170560,1823178751,US
1823178752,1823179007,GB
-1823179008,1823211519,US
+1823179008,1823179263,DE
+1823179264,1823186687,US
+1823186688,1823186943,IN
+1823186944,1823211519,US
1823211520,1823342591,CA
1823342592,1823346687,US
1823346688,1823350783,CA
-1823350784,1823354895,US
-1823354896,1823354903,BE
-1823354904,1823354927,US
-1823354928,1823354935,VE
-1823354936,1823355039,US
-1823355040,1823355047,GB
-1823355048,1823355055,RO
-1823355056,1823355063,US
-1823355064,1823355071,CA
-1823355072,1823355087,SE
-1823355088,1823355095,US
-1823355096,1823355103,SE
-1823355104,1823355119,US
-1823355120,1823355127,VE
-1823355128,1823355135,US
-1823355136,1823355263,GB
-1823355264,1823355503,US
-1823355504,1823355507,GB
-1823355508,1823356655,US
-1823356656,1823356663,IN
-1823356664,1823357727,US
-1823357728,1823357791,CA
-1823357792,1823357887,US
-1823357888,1823357951,CA
-1823357952,1823357983,SE
-1823357984,1823358207,US
-1823358208,1823358239,SE
-1823358240,1823358287,US
-1823358288,1823358303,SE
-1823358304,1823358479,US
-1823358480,1823358487,CA
-1823358488,1823358519,US
-1823358520,1823358527,CA
-1823358528,1823358575,US
-1823358576,1823358583,GB
-1823358584,1823358591,US
-1823358592,1823358599,GB
-1823358600,1823358743,US
-1823358744,1823358751,CA
-1823358752,1823358783,US
-1823358784,1823358791,SE
-1823358792,1823358807,CA
-1823358808,1823358895,US
-1823358896,1823358911,ES
-1823358912,1823358951,US
-1823358952,1823358959,CA
-1823358960,1823359583,US
-1823359584,1823359607,CN
-1823359608,1823359695,US
-1823359696,1823359727,CA
-1823359728,1823361791,US
+1823350784,1823361791,US
1823361792,1823362303,CA
1823362304,1823375359,US
1823375360,1823379455,CA
1823379456,1823383551,US
1823383552,1823387647,CA
-1823387648,1823420511,US
-1823420512,1823420519,EC
-1823420520,1823420583,US
-1823420584,1823420591,MX
-1823420592,1823420623,US
-1823420624,1823420631,KR
-1823420632,1823420639,JP
-1823420640,1823420767,US
-1823420768,1823420783,CA
-1823420784,1823420799,US
+1823387648,1823420799,US
1823420800,1823420815,MX
-1823420816,1823420911,US
-1823420912,1823420927,IE
-1823420928,1823421279,US
-1823421280,1823421311,CA
-1823421312,1823421455,US
+1823420816,1823421455,US
1823421456,1823421463,IL
-1823421464,1823421479,US
-1823421480,1823421487,JM
-1823421488,1823421599,US
-1823421600,1823421607,LU
-1823421608,1823421631,US
-1823421632,1823421639,IT
-1823421640,1823421655,US
-1823421656,1823421663,SG
-1823421664,1823421759,US
-1823421760,1823421791,BR
-1823421792,1823422079,US
-1823422080,1823422111,CA
-1823422112,1823422463,US
-1823422464,1823422655,CA
-1823422656,1823422815,US
-1823422816,1823422847,CA
-1823422848,1823422879,US
-1823422880,1823422911,CA
-1823422912,1823422943,US
-1823422944,1823422975,AE
-1823422976,1823422991,US
-1823422992,1823423007,HK
-1823423008,1823423167,US
-1823423168,1823423183,NL
-1823423184,1823423295,US
-1823423296,1823423359,CA
-1823423360,1823423903,US
-1823423904,1823423935,IL
-1823423936,1823424031,US
-1823424032,1823424047,TW
-1823424048,1823424063,US
-1823424064,1823424079,AU
-1823424080,1823424127,US
-1823424128,1823424159,CA
-1823424160,1823428607,US
+1823421464,1823428607,US
1823428608,1823432703,CA
1823432704,1823440895,US
1823440896,1823444991,CA
-1823444992,1823449247,US
-1823449248,1823449255,MK
-1823449256,1823449311,US
-1823449312,1823449327,BO
-1823449328,1823449551,US
-1823449552,1823449559,VE
-1823449560,1823449567,MK
-1823449568,1823449599,US
-1823449600,1823449607,MK
-1823449608,1823450951,US
-1823450952,1823450959,MK
-1823450960,1823465471,US
+1823444992,1823465471,US
1823465472,1823469567,CA
-1823469568,1823573631,US
-1823573632,1823573759,IN
-1823573760,1823581183,US
-1823581184,1823581311,IN
-1823581312,1823588351,US
-1823588352,1823588479,IN
-1823588480,1823735807,US
+1823469568,1823735807,US
1823735808,1823866879,CA
-1823866880,1826955551,US
-1826955552,1826955559,AD
-1826955560,1828716543,US
-1828716544,1830813695,FR
+1823866880,1828716543,US
+1828716544,1830797007,FR
+1830797008,1830797008,MQ
+1830797009,1830813695,FR
1830813696,1831337983,NL
1831337984,1831862271,DE
1831862272,1832124415,PT
1832124416,1832386559,IT
1832386560,1832517631,DK
-1832517632,1832583167,SE
+1832517632,1832582655,SE
+1832582656,1832582911,DK
+1832582912,1832583167,SE
1832583168,1832648703,DK
1832648704,1832681471,HR
1832681472,1832714239,RU
1832714240,1832747007,HU
1832747008,1832779775,RU
-1832779776,1832782591,FR
-1832782592,1832783103,MQ
+1832779776,1832780031,FR
+1832780032,1832780287,MQ
+1832780288,1832780799,FR
+1832780800,1832781567,MQ
+1832781568,1832782335,FR
+1832782336,1832783103,MQ
1832783104,1832783359,FR
1832783360,1832783615,MQ
-1832783616,1832784127,FR
-1832784128,1832784383,GP
-1832784384,1832784639,FR
-1832784640,1832786431,GP
-1832786432,1832786943,FR
-1832786944,1832787199,GF
-1832787200,1832791807,FR
-1832791808,1832792063,YT
-1832792064,1832792319,FR
-1832792320,1832792575,RE
-1832792576,1832794111,FR
-1832794112,1832796159,GP
-1832796160,1832796415,FR
+1832783616,1832783871,FR
+1832783872,1832784639,GP
+1832784640,1832785151,FR
+1832785152,1832785407,GP
+1832785408,1832785663,FR
+1832785664,1832785919,GP
+1832785920,1832787199,FR
+1832787200,1832787455,GF
+1832787456,1832788735,FR
+1832788736,1832788991,RE
+1832788992,1832789503,FR
+1832789504,1832790015,RE
+1832790016,1832791039,FR
+1832791040,1832791295,YT
+1832791296,1832791551,FR
+1832791552,1832791807,YT
+1832791808,1832794879,FR
+1832794880,1832795135,GP
+1832795136,1832796415,FR
1832796416,1832796671,RE
1832796672,1832796927,FR
-1832796928,1832797183,MQ
-1832797184,1832812543,FR
+1832796928,1832797183,GP
+1832797184,1832798975,FR
+1832798976,1832799743,GP
+1832799744,1832801535,FR
+1832801536,1832802047,MQ
+1832802048,1832802559,FR
+1832802560,1832802815,MQ
+1832802816,1832803839,FR
+1832803840,1832804351,MQ
+1832804352,1832812543,FR
1832812544,1832845311,RU
1832845312,1832878079,BH
1832878080,1832878412,RU
@@ -77500,7 +34331,6 @@
1833267200,1833269247,HU
1833269248,1833271295,FI
1833271296,1833273343,IT
-1833273344,1833275391,EU
1833275392,1833277439,IT
1833277440,1833279487,CH
1833279488,1833281535,AL
@@ -77509,10 +34339,7 @@
1833285632,1833289727,FR
1833289728,1833291775,IT
1833291776,1833293823,CZ
-1833293824,1833294540,BE
-1833294541,1833294550,NL
-1833294551,1833294591,FR
-1833294592,1833295871,BE
+1833293824,1833295871,BE
1833295872,1833297919,NL
1833297920,1833299967,GB
1833299968,1833302015,LU
@@ -77521,49 +34348,20 @@
1833308160,1833310207,FR
1833310208,1833312255,RU
1833312256,1833314303,ES
-1833314304,1833315327,IM
-1833315328,1833315343,GB
-1833315344,1833315583,IM
-1833315584,1833315647,GB
-1833315648,1833315711,IM
-1833315712,1833315799,GB
-1833315800,1833315815,IM
-1833315816,1833315823,GB
-1833315824,1833315903,IM
-1833315904,1833315919,GB
-1833315920,1833315935,IM
-1833315936,1833315951,GB
-1833315952,1833316351,IM
+1833314304,1833316351,IM
1833316352,1833318399,DK
1833318400,1833320447,GB
1833320448,1833320959,AE
1833320960,1833321215,IQ
-1833321216,1833321282,US
-1833321283,1833321283,AE
-1833321284,1833321471,US
-1833321472,1833322495,AE
+1833321216,1833322495,AE
1833322496,1833324543,IT
1833324544,1833326591,NO
-1833326592,1833327103,GB
-1833327104,1833328639,US
+1833326592,1833328639,US
1833328640,1833330687,AT
1833330688,1833332735,UA
1833332736,1833334783,CH
1833334784,1833336831,IT
-1833336832,1833336959,ES
-1833336960,1833337071,FR
-1833337072,1833337983,ES
-1833337984,1833337999,US
-1833338000,1833338015,GB
-1833338016,1833338031,FR
-1833338032,1833338047,IT
-1833338048,1833338063,DE
-1833338064,1833338071,JP
-1833338072,1833338079,DK
-1833338080,1833338087,NL
-1833338088,1833338095,NO
-1833338096,1833338103,SE
-1833338104,1833338879,ES
+1833336832,1833338879,ES
1833338880,1833342975,GB
1833342976,1833345023,CH
1833345024,1833347071,FI
@@ -77572,35 +34370,17 @@
1833351168,1833353215,RU
1833353216,1833355263,DE
1833355264,1833357311,IT
-1833357312,1833357561,IE
-1833357562,1833357567,GB
-1833357568,1833357579,IE
-1833357580,1833357587,GB
-1833357588,1833357647,IE
-1833357648,1833357663,GB
-1833357664,1833357671,IE
-1833357672,1833357675,GB
-1833357676,1833357941,IE
-1833357942,1833358079,GB
-1833358080,1833358619,IE
-1833358620,1833358841,GB
-1833358842,1833359063,IE
-1833359064,1833359071,GB
-1833359072,1833359079,IE
-1833359080,1833359083,GB
-1833359084,1833359087,IE
-1833359088,1833359091,GB
-1833359092,1833359167,IE
-1833359168,1833359359,GB
+1833357312,1833357587,GB
+1833357588,1833357631,IE
+1833357632,1833357823,GB
+1833357824,1833358079,IE
+1833358080,1833359359,GB
1833359360,1833361407,DE
1833361408,1833363455,GB
1833363456,1833365503,RU
1833365504,1833367551,IT
1833367552,1833369599,RU
-1833369600,1833370111,NL
-1833370112,1833370367,BG
-1833370368,1833370623,SE
-1833370624,1833371647,NL
+1833369600,1833371647,NL
1833371648,1833373695,RU
1833373696,1833377791,DE
1833377792,1833379839,KZ
@@ -77609,30 +34389,22 @@
1833383936,1833385983,DK
1833385984,1833388031,SK
1833388032,1833390079,RU
-1833390080,1833390207,GB
-1833390208,1833390335,US
-1833390336,1833391871,GB
-1833391872,1833392127,US
+1833390080,1833392127,GB
1833392128,1833396223,CH
1833396224,1833398271,NL
1833398272,1833400319,DE
1833400320,1833402367,GB
1833402368,1833406463,FR
-1833406464,1833406720,GB
-1833406721,1833406751,NL
-1833406752,1833406848,GB
-1833406849,1833406863,ET
-1833406864,1833406912,GB
-1833406913,1833406919,CA
-1833406920,1833408511,GB
-1833410560,1833412607,PT
+1833406464,1833406719,GB
+1833406720,1833406975,LV
+1833406976,1833408511,GB
+1833410560,1833412607,LU
1833412608,1833414655,GB
1833414656,1833416703,RU
1833416704,1833418751,NL
1833418752,1833422847,RU
1833422848,1833424895,CZ
-1833424896,1833426687,DE
-1833426688,1833426943,GB
+1833424896,1833426943,DE
1833426944,1833428991,KG
1833428992,1833431039,IT
1833431040,1833433087,RU
@@ -77645,26 +34417,10 @@
1833455616,1833459711,NL
1833459712,1833463807,ME
1833463808,1833467903,UA
-1833467904,1833468079,RU
-1833468080,1833468159,CH
-1833468160,1833468287,RU
-1833468288,1833468575,CH
-1833468576,1833468591,RU
-1833468592,1833469439,CH
-1833469440,1833469951,IN
-1833469952,1833471999,CH
-1833472000,1833473023,UA
-1833473024,1833474047,NL
+1833467904,1833471999,CH
+1833472000,1833473023,NL
1833474048,1833475071,UA
-1833475072,1833476095,DE
-1833476096,1833476351,NL
-1833476352,1833476479,GB
-1833476480,1833477375,NL
-1833477376,1833477503,GB
-1833477504,1833477631,DE
-1833477632,1833478911,NL
-1833478912,1833479167,US
-1833479168,1833484287,NL
+1833476096,1833484287,NL
1833484288,1833488383,IR
1833488384,1833492479,GB
1833492480,1833504767,RU
@@ -77675,13 +34431,17 @@
1833521152,1833525247,IT
1833525248,1833529343,LV
1833529344,1833533439,GB
-1833533440,1833537535,RU
+1833535488,1833537535,RU
1833537536,1833541631,AT
-1833541632,1833542655,GB
+1833541632,1833541887,GB
+1833541888,1833542143,IN
+1833542144,1833542655,GB
1833542656,1833542911,IN
1833542912,1833543167,GB
1833543168,1833543423,IN
-1833543424,1833545215,GB
+1833543424,1833544959,GB
+1833544960,1833545087,IN
+1833545088,1833545215,GB
1833545216,1833545471,NL
1833545472,1833545727,GB
1833545728,1833549823,IT
@@ -77690,7 +34450,8 @@
1833558016,1833562111,RO
1833562112,1833566207,PS
1833566208,1833570303,SE
-1833570304,1833573631,GB
+1833570304,1833571583,NL
+1833571584,1833573631,GB
1833573632,1833574399,NL
1833574400,1833578495,YE
1833578496,1833582591,HU
@@ -77698,9 +34459,7 @@
1833586688,1833590783,FR
1833590784,1833594879,PL
1833594880,1833603071,RU
-1833603072,1833606399,SK
-1833606400,1833606655,CZ
-1833606656,1833607167,SK
+1833603072,1833607167,SK
1833607168,1833611263,RU
1833611264,1833615359,NO
1833615360,1833619455,GB
@@ -77710,56 +34469,16 @@
1833631744,1833635839,CZ
1833635840,1833639935,DE
1833639936,1833644031,AM
-1833644032,1833644063,TJ
-1833644064,1833644287,RU
-1833644288,1833644319,TJ
-1833644320,1833648127,RU
+1833644032,1833648127,RU
1833648128,1833652223,LB
-1833652224,1833656511,DE
-1833656512,1833656543,US
-1833656544,1833656639,DE
-1833656640,1833656671,US
-1833656672,1833656991,DE
-1833656992,1833657039,US
-1833657040,1833657151,DE
-1833657152,1833657215,US
-1833657216,1833657303,DE
-1833657304,1833657311,US
-1833657312,1833657791,DE
-1833657792,1833657855,US
-1833657856,1833658047,DE
-1833658048,1833658111,US
-1833658112,1833658303,DE
-1833658304,1833658367,US
-1833658368,1833658959,DE
-1833658960,1833658975,US
-1833658976,1833659103,DE
-1833659104,1833659199,US
-1833659200,1833659231,DE
-1833659232,1833659263,US
-1833659264,1833659423,DE
-1833659424,1833659455,US
-1833659456,1833660351,DE
-1833660352,1833660415,US
+1833652224,1833660415,DE
1833660416,1833664511,IT
1833664512,1833668607,RU
1833668608,1833672703,CZ
1833672704,1833676799,GB
-1833676800,1833677567,DE
-1833677568,1833677599,CH
-1833677600,1833677775,DE
-1833677776,1833677783,FR
-1833677784,1833680895,DE
+1833676800,1833680895,DE
1833680896,1833684991,UA
-1833684992,1833685015,DE
-1833685016,1833685023,LU
-1833685024,1833685067,DE
-1833685068,1833685071,GB
-1833685072,1833685847,DE
-1833685848,1833685851,IE
-1833685852,1833685855,DE
-1833685856,1833685871,IE
-1833685872,1833689087,DE
+1833684992,1833689087,DE
1833689088,1833693183,FI
1833693184,1833697279,RU
1833697280,1833959423,IE
@@ -77790,7 +34509,7 @@
1834964992,1834967039,PL
1834967040,1834971135,RU
1834971136,1834973183,PL
-1834973184,1834975231,RU
+1834973184,1834974207,UA
1834975232,1834977279,IL
1834977280,1834983423,PL
1834983424,1834985471,RU
@@ -77805,11 +34524,7 @@
1835008000,1835532287,RO
1835532288,1835540479,SE
1835540480,1835548671,DE
-1835548672,1835549695,GB
-1835549696,1835550207,ES
-1835550208,1835561351,GB
-1835561352,1835561359,A2
-1835561360,1835565055,GB
+1835548672,1835565055,GB
1835565056,1835573247,AL
1835573248,1835581439,UA
1835581440,1835589631,BG
@@ -77817,23 +34532,10 @@
1835597824,1835606015,HU
1835606016,1835614207,CZ
1835614208,1835622399,RU
-1835622400,1835624959,SE
-1835624960,1835625215,DK
-1835625216,1835625471,SE
-1835625472,1835625599,DK
-1835625600,1835626239,SE
-1835626240,1835626495,DK
-1835626496,1835626751,SE
-1835626752,1835627007,DK
-1835627008,1835627519,SE
-1835627520,1835627647,DK
-1835627648,1835629567,SE
-1835629568,1835630335,DK
-1835630336,1835630591,SE
+1835622400,1835630591,SE
1835630592,1835636735,RU
1835636736,1835638527,LU
-1835638528,1835638783,AM
-1835638784,1835646975,RU
+1835638528,1835646975,RU
1835646976,1835655167,BA
1835655168,1835663359,CY
1835663360,1835671551,UA
@@ -77842,7 +34544,6 @@
1835687936,1835696127,IE
1835696128,1835704319,RU
1835704320,1835709439,NL
-1835709440,1835712511,EU
1835712512,1835720703,RU
1835720704,1835728895,RS
1835728896,1835737087,PL
@@ -77858,7 +34559,7 @@
1835810816,1835819007,UA
1835819008,1835827199,CZ
1835827200,1835835391,GB
-1835835392,1835843583,ES
+1835835392,1835843583,IR
1835843584,1835851775,NO
1835851776,1835859967,UA
1835859968,1835868159,DE
@@ -77866,76 +34567,72 @@
1835876352,1835884543,NO
1835884544,1835892735,NL
1835892736,1835909119,GB
-1835909120,1835913215,RS
+1835909120,1835911167,RS
+1835911168,1835913215,DE
1835913216,1835917311,RU
-1835917312,1835917919,GB
+1835917312,1835917855,GB
+1835917856,1835917863,IT
+1835917864,1835917919,GB
1835917920,1835917935,IT
-1835917936,1835918159,GB
-1835918160,1835918167,IT
-1835918168,1835918439,GB
+1835917936,1835918439,GB
1835918440,1835918447,IT
1835918448,1835918519,GB
1835918520,1835918527,IT
-1835918528,1835918567,GB
-1835918568,1835918583,IT
-1835918584,1835918695,GB
-1835918696,1835918703,IT
-1835918704,1835918735,GB
+1835918528,1835918599,GB
+1835918600,1835918607,IT
+1835918608,1835918711,GB
+1835918712,1835918719,IT
+1835918720,1835918735,GB
1835918736,1835918743,IT
-1835918744,1835919151,GB
+1835918744,1835918823,GB
+1835918824,1835918831,IT
+1835918832,1835918847,GB
+1835918848,1835918855,IT
+1835918856,1835919095,GB
+1835919096,1835919103,IT
+1835919104,1835919127,GB
+1835919128,1835919135,IT
+1835919136,1835919151,GB
1835919152,1835919159,IT
-1835919160,1835919375,GB
-1835919376,1835919383,IT
-1835919384,1835919631,GB
-1835919632,1835919639,IT
-1835919640,1835919751,GB
+1835919160,1835919751,GB
1835919752,1835919759,IT
-1835919760,1835920127,GB
-1835920128,1835920159,PT
-1835920160,1835920167,GB
-1835920168,1835920175,PT
-1835920176,1835920191,GB
-1835920192,1835920199,PT
-1835920200,1835920207,GB
-1835920208,1835920335,PT
-1835920336,1835920343,GB
-1835920344,1835920383,PT
-1835920384,1835920407,GB
-1835920408,1835920415,IT
-1835920416,1835920479,GB
+1835919760,1835920479,GB
1835920480,1835920487,IT
-1835920488,1835920631,GB
-1835920632,1835920639,IT
-1835920640,1835920775,GB
-1835920776,1835920783,IT
-1835920784,1835920863,GB
-1835920864,1835920871,IT
-1835920872,1835921047,GB
+1835920488,1835920727,GB
+1835920728,1835920735,IT
+1835920736,1835920943,GB
+1835920944,1835920951,IT
+1835920952,1835921047,GB
1835921048,1835921055,IT
1835921056,1835921119,GB
1835921120,1835921127,IT
1835921128,1835921343,GB
1835921344,1835921351,IT
-1835921352,1835921407,GB
-1835921408,1835921415,IT
-1835921416,1835921855,GB
-1835921856,1835921863,IT
-1835921864,1835922415,GB
+1835921352,1835921463,GB
+1835921464,1835921471,IT
+1835921472,1835922415,GB
1835922416,1835922423,IT
-1835922424,1835922559,GB
+1835922424,1835922455,GB
+1835922456,1835922463,IT
+1835922464,1835922559,GB
1835922560,1835922567,IT
-1835922568,1835922815,GB
-1835922816,1835922831,IT
-1835922832,1835923863,GB
+1835922568,1835923351,GB
+1835923352,1835923359,IT
+1835923360,1835923487,GB
+1835923488,1835923495,IT
+1835923496,1835923863,GB
1835923864,1835923871,IT
-1835923872,1835923967,GB
-1835923968,1835923975,IT
-1835923976,1835924999,GB
-1835925000,1835925007,IT
-1835925008,1835925503,GB
+1835923872,1835924375,GB
+1835924376,1835924383,IT
+1835924384,1835925503,GB
1835925504,1835933695,LV
-1835933696,1835941887,RU
-1835941888,1835950079,UA
+1835933696,1835942399,RU
+1835942400,1835942655,UA
+1835942656,1835947775,RU
+1835947776,1835948031,UA
+1835948032,1835949055,RU
+1835949056,1835949311,UA
+1835949312,1835950079,RU
1835950080,1835958271,LB
1835958272,1835966463,HU
1835966464,1835974655,IR
@@ -77947,66 +34644,60 @@
1836015616,1836023807,AD
1836023808,1836040191,RU
1836040192,1836048383,GB
-1836048384,1836048467,RS
-1836048468,1836048471,SR
-1836048472,1836056575,RS
+1836048384,1836056575,RS
1836056576,1836580863,IT
1836580864,1836597247,RU
-1836597248,1836597759,LU
-1836597760,1836606463,DE
-1836606464,1836612607,LU
+1836597248,1836598271,LU
+1836598272,1836605439,FR
+1836605440,1836612607,LU
1836612608,1836613631,DE
-1836613632,1836630015,RU
+1836613632,1836626943,RU
+1836626944,1836627967,NL
+1836627968,1836630015,RU
1836630016,1836646399,BG
1836646400,1836679167,RS
-1836679168,1836685823,BG
-1836685824,1836687359,GR
+1836679168,1836686335,BG
+1836686336,1836687359,GR
1836687360,1836711935,BG
1836711936,1836728319,UA
1836728320,1836744703,RS
-1836744704,1836745983,FR
-1836745984,1836746239,RE
-1836746240,1836746495,FR
-1836746496,1836746751,RE
-1836746752,1836747775,FR
-1836747776,1836748543,RE
-1836748544,1836748799,FR
-1836748800,1836749311,RE
-1836749312,1836749567,FR
-1836749568,1836749823,RE
-1836749824,1836750335,FR
-1836750336,1836750591,RE
-1836750592,1836750847,FR
-1836750848,1836751103,RE
-1836751104,1836751359,FR
-1836751360,1836751871,RE
-1836751872,1836752127,FR
-1836752128,1836752383,RE
-1836752384,1836752895,FR
-1836752896,1836753663,RE
-1836753664,1836754175,FR
-1836754176,1836754943,RE
-1836754944,1836755711,FR
-1836755712,1836756479,RE
-1836756480,1836756735,FR
-1836756736,1836756991,RE
+1836744704,1836746495,FR
+1836746496,1836747007,RE
+1836747008,1836747263,FR
+1836747264,1836748031,RE
+1836748032,1836748543,FR
+1836748544,1836748799,RE
+1836748800,1836749055,FR
+1836749056,1836749567,RE
+1836749568,1836750079,FR
+1836750080,1836750591,RE
+1836750592,1836751103,FR
+1836751104,1836751615,RE
+1836751616,1836753151,FR
+1836753152,1836753407,RE
+1836753408,1836753919,FR
+1836753920,1836754687,RE
+1836754688,1836755455,FR
+1836755456,1836755711,RE
+1836755712,1836755967,FR
+1836755968,1836756223,RE
+1836756224,1836756479,FR
+1836756480,1836756991,RE
1836756992,1836758015,FR
-1836758016,1836758783,RE
-1836758784,1836759039,FR
-1836759040,1836759551,RE
-1836759552,1836760063,FR
-1836760064,1836760319,RE
-1836760320,1836760575,FR
-1836760576,1836761087,RE
+1836758016,1836758527,RE
+1836758528,1836758783,FR
+1836758784,1836759039,RE
+1836759040,1836759551,FR
+1836759552,1836760575,RE
+1836760576,1836760831,FR
+1836760832,1836761087,RE
1836761088,1836777471,IR
1836777472,1836793855,SI
1836793856,1836810239,GB
1836810240,1836826623,RU
1836826624,1836843007,CZ
1836843008,1836875775,RU
-1836875776,1836876543,SE
-1836876544,1836876639,RU
-1836876640,1836892159,SE
+1836875776,1836892159,SE
1836892160,1836908543,RU
1836908544,1836924927,IE
1836924928,1836941311,DE
@@ -78025,9 +34716,7 @@
1839202304,1839235071,BG
1839235072,1839267839,IL
1839267840,1839300607,RU
-1839300608,1839330303,BH
-1839330304,1839330559,US
-1839330560,1839333375,BH
+1839300608,1839333375,BH
1839333376,1839366143,UA
1839366144,1839398911,IR
1839398912,1839431679,NO
@@ -78036,24 +34725,7 @@
1839450112,1839452159,NO
1839452160,1839454207,FI
1839454208,1839456255,RU
-1839456256,1839457535,RO
-1839457536,1839457599,VG
-1839457600,1839457695,RO
-1839457696,1839457711,SY
-1839457712,1839458687,RO
-1839458688,1839458719,IN
-1839458720,1839458759,RO
-1839458760,1839458760,RO
-1839458761,1839458863,RO
-1839458864,1839458867,US
-1839458868,1839459327,RO
-1839459328,1839459599,DE
-1839459600,1839459615,RO
-1839459616,1839460031,DE
-1839460032,1839460039,RO
-1839460040,1839460127,DE
-1839460128,1839460159,RO
-1839460160,1839460351,DE
+1839456256,1839460351,RO
1839460352,1839462399,RU
1839462400,1839464447,FI
1839464448,1839497215,CZ
@@ -78063,39 +34735,11 @@
1839595520,1839661055,RO
1839661056,1839693823,UA
1839693824,1839726591,RU
-1839726592,1839753535,IT
-1839753536,1839753543,ES
-1839753544,1839756327,IT
-1839756328,1839756335,FR
-1839756336,1839759359,IT
+1839726592,1839759359,IT
1839759360,1839792127,RU
-1839792128,1839792639,GB
-1839792640,1839792655,US
-1839792656,1839794735,GB
-1839794736,1839794751,CH
-1839794752,1839794847,GB
+1839792128,1839794847,GB
1839794848,1839794879,CH
-1839794880,1839795151,GB
-1839795152,1839795167,US
-1839795168,1839796607,GB
-1839796608,1839796671,US
-1839796672,1839797759,GB
-1839797760,1839798015,GR
-1839798016,1839798271,GB
-1839798272,1839798399,US
-1839798400,1839798527,GB
-1839798528,1839798559,US
-1839798560,1839800959,GB
-1839800960,1839801023,GR
-1839801024,1839802111,GB
-1839802112,1839802239,RO
-1839802240,1839805951,GB
-1839805952,1839806207,US
-1839806208,1839806463,GB
-1839806464,1839811071,US
-1839811072,1839812607,GB
-1839812608,1839814143,US
-1839814144,1839816703,GB
+1839794880,1839816703,GB
1839816704,1839824895,NO
1839824896,1839890431,RU
1839890432,1839923199,GB
@@ -78152,7 +34796,8 @@
1841669120,1841669375,PL
1841669376,1841669631,BE
1841669632,1841670143,UA
-1841670144,1841672191,PL
+1841670144,1841671935,PL
+1841671936,1841672191,GB
1841672192,1841674239,FR
1841674240,1841676287,PL
1841676288,1841680383,RU
@@ -78179,96 +34824,68 @@
1841831936,1841840127,MT
1841840128,1841848319,PL
1841848320,1841856511,RU
-1841856512,1841864769,UA
-1841864770,1841872895,YE
+1841856512,1841864703,UA
+1841864704,1841872895,YE
1841872896,1841876991,NL
1841876992,1841878015,JP
1841878016,1841879039,AU
-1841879040,1841879551,NL
-1841879552,1841879807,US
+1841879040,1841879807,NL
1841879808,1841880063,GB
1841880064,1841881087,JP
1841881088,1841889279,UA
1841889280,1841897471,IR
1841897472,1841905663,RO
1841905664,1841922047,RU
-1841922048,1841930239,NL
+1841922048,1841924351,NL
+1841924352,1841924607,DE
+1841924608,1841925887,NL
+1841925888,1841926143,DE
+1841926144,1841930239,NL
1841930240,1841938431,KG
1841938432,1841946623,RU
1841946624,1841954815,UA
1841954816,1841971199,RU
1841971200,1841979391,CZ
1841979392,1841983487,NL
-1841983488,1841983575,GI
-1841983576,1841983599,US
-1841983600,1841983999,GI
-1841984000,1841984511,IM
-1841984512,1841984575,FR
-1841984576,1841984639,IM
-1841984640,1841985023,FR
-1841985024,1841985087,IE
-1841985088,1841985103,CY
-1841985104,1841985119,IE
-1841985120,1841985135,CY
-1841985136,1841985143,IM
-1841985144,1841985167,GG
-1841985168,1841985535,IM
+1841983488,1841985535,IM
1841985536,1841987583,SI
1841987584,1841995775,DK
1841995776,1842003967,RU
1842003968,1842012159,CH
-1842012160,1842020351,GB
+1842012160,1842017023,GB
+1842017024,1842017279,BE
+1842017280,1842020351,GB
1842020352,1842028543,NO
1842028544,1842036735,CH
-1842036736,1842038783,FR
-1842038784,1842044927,LU
-1842044928,1842047369,GB
-1842047370,1842047371,IN
-1842047372,1842053119,GB
-1842053120,1842061311,ES
-1842061312,1842069503,IR
+1842036736,1842042879,FR
+1842042880,1842044927,LU
+1842044928,1842053119,GB
+1842053120,1842069503,IR
1842069504,1842077695,RU
-1842077696,1842078207,MQ
-1842078208,1842078463,FR
-1842078464,1842078719,MQ
-1842078720,1842079743,FR
-1842079744,1842080511,MQ
-1842080512,1842082047,GP
-1842082048,1842082303,MQ
-1842082304,1842082815,GP
-1842082816,1842085887,MQ
+1842077696,1842077951,FR
+1842077952,1842078207,MQ
+1842078208,1842078719,FR
+1842078720,1842078975,MQ
+1842078976,1842079487,FR
+1842079488,1842080767,MQ
+1842080768,1842081023,GP
+1842081024,1842081279,MQ
+1842081280,1842081535,GP
+1842081536,1842081791,MQ
+1842081792,1842082047,GP
+1842082048,1842082559,MQ
+1842082560,1842082815,GP
+1842082816,1842083071,MQ
+1842083072,1842083583,GP
+1842083584,1842084607,MQ
+1842084608,1842084863,GP
+1842084864,1842085887,MQ
1842085888,1842118655,GB
1842118656,1842151423,FI
1842151424,1842153471,FR
-1842153472,1842153567,NO
-1842153568,1842153575,GB
-1842153576,1842153663,NO
-1842153664,1842153679,NL
-1842153680,1842153687,NO
-1842153688,1842153695,NL
-1842153696,1842153887,NO
-1842153888,1842153919,DE
-1842153920,1842153951,NE
-1842153952,1842153983,NO
-1842153984,1842154047,US
-1842154048,1842154055,NO
-1842154056,1842154079,US
-1842154080,1842154111,NO
-1842154112,1842154115,US
-1842154116,1842154119,NO
-1842154120,1842154143,US
-1842154144,1842154239,NO
-1842154240,1842154247,HK
-1842154248,1842154255,SG
-1842154256,1842154271,NO
-1842154272,1842154279,CN
-1842154280,1842154367,NO
-1842154368,1842154431,US
-1842154432,1842154447,SG
-1842154448,1842154495,NO
-1842154496,1842155007,US
-1842155008,1842155263,AU
-1842155264,1842155519,SG
+1842153472,1842154271,NO
+1842154272,1842154303,HK
+1842154304,1842155519,NO
1842155520,1842157567,IT
1842157568,1842159615,AE
1842159616,1842161663,BA
@@ -78281,11 +34898,7 @@
1842173952,1842175999,RO
1842176000,1842178047,FI
1842178048,1842180095,IT
-1842180096,1842180607,IQ
-1842180608,1842180791,US
-1842180792,1842180799,IQ
-1842180800,1842180863,US
-1842180864,1842182143,IQ
+1842180096,1842182143,IQ
1842182144,1842184191,LV
1842184192,1842186239,DE
1842186240,1842188287,ES
@@ -78301,23 +34914,19 @@
1842206720,1842208767,SE
1842208768,1842210815,GB
1842210816,1842212863,LT
-1842212864,1842213631,CZ
-1842213632,1842213887,SK
-1842213888,1842214911,CZ
+1842212864,1842214911,CZ
1842214912,1842216959,RU
1842216960,1842225151,RO
1842225152,1842233343,UA
1842233344,1842241535,RO
1842241536,1842249727,RS
-1842249728,1842258162,RU
-1842258163,1842266111,EU
+1842249728,1842257919,RU
1842266112,1842274303,PL
1842274304,1842282495,RO
1842282496,1842286591,RU
1842286592,1842290687,GB
1842290688,1842294783,RS
1842294784,1842298879,PL
-1842298880,1842302975,UA
1842302976,1842307071,RU
1842307072,1842311167,PL
1842311168,1842315263,UA
@@ -78336,7 +34945,9 @@
1843478528,1843494911,SE
1843494912,1843511295,IR
1843511296,1843527679,RU
-1843527680,1843544063,IL
+1843527680,1843539199,IL
+1843539200,1843539455,FR
+1843539456,1843544063,IL
1843544064,1843560447,RU
1843560448,1843576831,DE
1843576832,1843593215,RU
@@ -78356,16 +34967,7 @@
1843789824,1843806207,SK
1843806208,1843822591,IR
1843822592,1843838975,RU
-1843838976,1843841535,DE
-1843841536,1843841791,CH
-1843841792,1843842047,AU
-1843842048,1843847743,DE
-1843847744,1843847759,GR
-1843847760,1843849215,DE
-1843849216,1843850239,GB
-1843850240,1843852799,DE
-1843852800,1843853055,DE
-1843853056,1843855359,DE
+1843838976,1843855359,DE
1843855360,1843871743,PL
1843871744,1843888127,GB
1843888128,1843904511,CZ
@@ -78399,20 +35001,13 @@
1843978240,1843980287,NL
1843980288,1843982335,FR
1843982336,1843984383,PL
-1843984384,1843985407,RU
-1843985408,1843985663,UA
-1843985664,1843986431,RU
+1843984384,1843986431,RU
1843986432,1843988479,NO
-1843988480,1843988527,GB
-1843988528,1843988528,EU
-1843988529,1843990527,GB
+1843988480,1843990527,GB
1843990528,1843992575,LB
1843992576,1843994623,AT
1843994624,1844000767,GB
-1844000768,1844001791,NO
-1844001792,1844002303,NL
-1844002304,1844002559,NO
-1844002560,1844002815,NL
+1844000768,1844002815,NO
1844002816,1844006911,CZ
1844006912,1844008959,SM
1844008960,1844011007,PL
@@ -78423,11 +35018,8 @@
1844021248,1844027391,DE
1844027392,1844029439,CZ
1844029440,1844031487,RU
-1844031488,1844031999,EU
+1844031744,1844031999,AT
1844032000,1844032255,GB
-1844032256,1844033023,CH
-1844033024,1844033271,EU
-1844033272,1844033535,CH
1844033536,1844035583,RS
1844035584,1844037631,MD
1844037632,1844041727,RU
@@ -78440,34 +35032,15 @@
1844058112,1844062207,RU
1844062208,1844064255,CZ
1844064256,1844068351,IT
-1844068352,1844068479,FR
-1844068480,1844070399,ES
-1844070400,1844071423,GB
-1844071424,1844072447,DE
+1844068352,1844070399,ES
+1844070400,1844072447,LU
1844072448,1844076543,ES
-1844076544,1844076575,GB
-1844076576,1844076639,IE
-1844076640,1844076655,GB
-1844076656,1844076775,IE
-1844076776,1844076783,GB
-1844076784,1844076791,IE
-1844076792,1844076799,GB
-1844076800,1844077463,IE
-1844077464,1844077471,GB
-1844077472,1844077503,IE
-1844077504,1844077567,GB
-1844077568,1844077663,IE
-1844077664,1844077695,GB
-1844077696,1844077727,IE
-1844077728,1844078559,GB
-1844078560,1844078575,IE
-1844078576,1844078591,GB
-1844078592,1844080127,DE
-1844080128,1844080639,PL
+1844076544,1844077055,GB
+1844077056,1844077567,IE
+1844077568,1844078591,GB
+1844078592,1844080639,DE
1844080640,1844082687,GE
-1844082688,1844084055,DE
-1844084056,1844084071,CH
-1844084072,1844084735,DE
+1844082688,1844084735,DE
1844084736,1844086783,RU
1844086784,1844088831,IT
1844088832,1844090879,AT
@@ -78477,9 +35050,7 @@
1844099072,1844101119,DE
1844101120,1844105215,GB
1844105216,1844107263,ES
-1844107264,1844107807,DE
-1844107808,1844107823,CH
-1844107824,1844109311,DE
+1844107264,1844109311,DE
1844109312,1844109567,US
1844109568,1844111359,GB
1844111360,1844113407,AL
@@ -78491,20 +35062,8 @@
1844123648,1844125695,RU
1844125696,1844127743,NL
1844127744,1844129791,DE
-1844129792,1844131583,NL
-1844131584,1844131647,SC
-1844131648,1844131711,NL
-1844131712,1844131775,RU
-1844131776,1844131807,US
-1844131808,1844131817,NL
-1844131818,1844131839,US
-1844131840,1844131849,DE
-1844131850,1844131865,AT
-1844131866,1844132159,DE
-1844132160,1844132167,AT
-1844132168,1844132451,DE
-1844132452,1844132459,AT
-1844132460,1844133887,DE
+1844129792,1844131839,NL
+1844131840,1844133887,DE
1844133888,1844135935,LT
1844135936,1844137983,NL
1844137984,1844140031,FR
@@ -78514,79 +35073,39 @@
1844146176,1844148223,NO
1844148224,1844150271,GB
1844150272,1844152319,ES
-1844152320,1844154355,DE
-1844154356,1844154367,NL
-1844154368,1844155903,GB
-1844155904,1844156159,US
-1844156160,1844156415,GB
+1844152320,1844154367,DE
+1844154368,1844156415,GB
1844156416,1844158463,IT
1844158464,1844160511,RU
1844160512,1844162559,SE
1844162560,1844164607,CZ
1844164608,1844166655,RU
1844166656,1844168703,AZ
-1844168704,1844169471,SE
-1844169472,1844169487,AF
-1844169488,1844169519,US
-1844169520,1844169567,SE
+1844168704,1844169503,GI
+1844169504,1844169519,US
+1844169520,1844169567,GI
1844169568,1844169583,US
-1844169584,1844169599,SE
+1844169584,1844169599,GI
1844169600,1844169647,US
-1844169648,1844169655,AF
-1844169656,1844169663,ER
-1844169664,1844169679,US
-1844169680,1844169687,ZM
-1844169688,1844169695,IQ
-1844169696,1844169703,KZ
-1844169704,1844169707,ZA
-1844169708,1844169727,SE
-1844169728,1844169767,DE
-1844169768,1844169951,US
-1844169952,1844169983,DE
-1844169984,1844170239,US
-1844170240,1844170255,AF
-1844170256,1844170263,IQ
-1844170264,1844170303,AF
-1844170304,1844170311,GH
-1844170312,1844170319,DE
-1844170320,1844170327,IQ
-1844170328,1844170751,DE
+1844169648,1844169727,GI
+1844169728,1844170751,DE
1844170752,1844174847,RU
-1844174848,1844178457,DE
-1844178458,1844178458,FR
-1844178459,1844178943,DE
+1844174848,1844178943,DE
1844178944,1844180991,EE
-1844180992,1844181488,TR
-1844181489,1844181503,DE
-1844181504,1844181608,TR
-1844181609,1844181616,CA
-1844181617,1844181824,TR
-1844181825,1844181839,GB
-1844181840,1844181952,TR
-1844181953,1844181958,GB
-1844181959,1844181984,TR
-1844181985,1844181990,GB
-1844181991,1844183039,TR
-1844183040,1844191231,IT
+1844180992,1844183039,TR
+1844183040,1844185087,IT
+1844185088,1844187135,CH
+1844187136,1844191231,IT
1844191232,1844195327,AL
1844199424,1844203519,RU
-1844203520,1844205823,NL
-1844205824,1844205888,VG
-1844205889,1844207615,NL
+1844203520,1844207615,NL
1844207616,1844211711,RU
1844211712,1844215807,SK
1844215808,1844219903,BE
-1844219904,1844220159,KE
-1844220160,1844223999,A2
+1844219904,1844223999,DE
1844224000,1844228095,GB
-1844228096,1844228479,DK
-1844228480,1844228511,SE
-1844228512,1844230159,DK
-1844230160,1844230175,SE
-1844230176,1844232191,DK
-1844232192,1844235775,ES
-1844235776,1844236031,GB
-1844236032,1844236287,FR
+1844228096,1844232191,DK
+1844232192,1844236287,ES
1844236288,1844252671,RU
1844252672,1844256767,GB
1844256768,1844260863,BA
@@ -78605,26 +35124,11 @@
1844310016,1844318207,FR
1844318208,1844322303,IT
1844322304,1844326399,CZ
-1844326400,1844330239,DK
-1844330240,1844330303,LU
-1844330304,1844330423,DK
-1844330424,1844330439,LU
-1844330440,1844330495,DK
+1844326400,1844330495,DK
1844330496,1844334591,GB
1844334592,1844342783,RU
1844342784,1844346879,IT
-1844346880,1844347007,US
-1844347008,1844347135,GB
-1844347136,1844347263,BE
-1844347264,1844347903,GB
-1844347904,1844348159,US
-1844348160,1844348671,GB
-1844348672,1844348927,BE
-1844348928,1844349439,GB
-1844349440,1844349951,US
-1844349952,1844350207,HK
-1844350208,1844350719,CA
-1844350720,1844350975,GB
+1844346880,1844350975,GB
1844350976,1844355071,SY
1844355072,1844359167,KZ
1844359168,1844363263,IR
@@ -78639,11 +35143,7 @@
1844396032,1844400127,CZ
1844400128,1844408319,GB
1844408320,1844412415,FR
-1844412416,1844414207,RU
-1844414208,1844414463,SE
-1844414464,1844414719,NL
-1844414720,1844414975,US
-1844414976,1844416511,RU
+1844412416,1844416511,RU
1844416512,1844420607,FR
1844420608,1844424703,DE
1844424704,1844428799,SI
@@ -78694,7 +35194,9 @@
1847735296,1847736319,AU
1847736320,1847738367,HK
1847738368,1847754751,KR
-1847754752,1847783423,TH
+1847754752,1847780351,TH
+1847780352,1847780607,CN
+1847780608,1847783423,TH
1847783424,1847787519,US
1847787520,1847803903,KR
1847803904,1847807999,VN
@@ -78824,10 +35326,13 @@
1860736000,1860737023,AU
1860737024,1860739071,JP
1860739072,1860743167,PH
-1860743168,1860744191,AU
+1860743168,1860743333,AU
+1860743334,1860743334,HK
+1860743335,1860743462,AU
+1860743463,1860743464,JP
+1860743465,1860744191,AU
1860744192,1860745215,IN
1860745216,1860746239,AU
-1860746240,1860747263,PK
1860747264,1860759551,JP
1860759552,1860761599,AU
1860761600,1860763647,IN
@@ -78843,7 +35348,9 @@
1866588160,1866592255,NZ
1866592256,1866596351,VN
1866596352,1866661887,CN
-1866661888,1866670079,AU
+1866661888,1866666656,AU
+1866666657,1866666657,NZ
+1866666658,1866670079,AU
1866670080,1866674175,MY
1866674176,1866678271,TW
1866678272,1866686463,ID
@@ -78883,7 +35390,7 @@
1868300288,1868333055,IN
1868333056,1868341247,PK
1868341248,1868345343,ID
-1868345344,1868346367,GU
+1868345344,1868346367,AU
1868346368,1868347391,TH
1868347392,1868348415,AU
1868348416,1868349439,KR
@@ -78912,11 +35419,7 @@
1870118912,1870135295,IN
1870135296,1870462975,CN
1870462976,1870479359,JP
-1870479360,1870480895,PH
-1870480896,1870481151,US
-1870481152,1870487551,PH
-1870487552,1870487807,US
-1870487808,1870495743,PH
+1870479360,1870495743,PH
1870495744,1870497791,TW
1870497792,1870499839,IN
1870499840,1870501887,JP
@@ -79025,7 +35528,9 @@
1888030720,1888034815,HK
1888034816,1888038911,JP
1888038912,1888040959,CN
-1888040960,1888059391,JP
+1888040960,1888041471,JP
+1888041472,1888041727,NZ
+1888041728,1888059391,JP
1888059392,1888063487,VN
1888063488,1888067583,JP
1888067584,1888071679,MY
@@ -79105,13 +35610,16 @@
1897250816,1897259007,HK
1897259008,1897260031,NZ
1897260032,1897261055,BD
-1897261056,1897263103,JP
1897263104,1897265151,TH
1897265152,1897267199,JP
1897267200,1897365503,VN
1897365504,1897398271,MY
1897398272,1897660415,CN
-1897660416,1897725951,HK
+1897660416,1897663487,HK
+1897663488,1897663743,GB
+1897663744,1897697279,HK
+1897697280,1897697535,AU
+1897697536,1897725951,HK
1897725952,1897730047,JP
1897730048,1897734143,AU
1897734144,1897738239,HK
@@ -79121,7 +35629,10 @@
1897758720,1897779199,KR
1897779200,1897781247,AU
1897781248,1897783295,JP
-1897783296,1897787391,SG
+1897783296,1897784319,SG
+1897784320,1897784831,HK
+1897784832,1897785343,KR
+1897785344,1897787391,SG
1897787392,1897789439,AU
1897789440,1897790463,KH
1897790464,1897791487,HK
@@ -79160,7 +35671,9 @@
1899850752,1899851775,VN
1899851776,1899855871,JP
1899855872,1899888639,TW
-1899888640,1904345087,CN
+1899888640,1902210559,CN
+1902210560,1902210815,MO
+1902210816,1904345087,CN
1904345088,1904361471,JP
1904361472,1904369663,KR
1904369664,1904375807,CN
@@ -79168,9 +35681,7 @@
1904376832,1904377855,KH
1904377856,1904476159,KR
1904476160,1905262591,CN
-1905262592,1905429765,JP
-1905429766,1905429766,AP
-1905429767,1906311167,JP
+1905262592,1906311167,JP
1906311168,1908408319,VN
1908408320,1908424703,AU
1908424704,1908441087,KR
@@ -79190,9 +35701,7 @@
1908756480,1908760575,KR
1908760576,1908761599,NZ
1908761600,1908762623,CN
-1908762624,1908762879,IN
-1908762880,1908763135,HK
-1908763136,1908763647,IN
+1908762624,1908763647,IN
1908763648,1908764671,ID
1908764672,1908768767,AU
1908768768,1908801535,JP
@@ -79203,14 +35712,12 @@
1909161984,1909194751,PK
1909194752,1909456895,CN
1909456896,1909473279,JP
-1909473280,1909479939,HK
-1909479940,1909479940,US
-1909479941,1909481471,HK
+1909473280,1909481471,HK
1909481472,1909587967,CN
1909587968,1909719039,MY
1909719040,1909735423,CN
1909735424,1909736713,US
-1909736714,1909736714,AP
+1909736714,1909736714,IN
1909736715,1909743615,US
1909743616,1909744639,AU
1909744640,1909745663,CN
@@ -79236,7 +35743,6 @@
1914437632,1914503167,CN
1914503168,1914552319,KR
1914552320,1914560511,SG
-1914560512,1914568703,KH
1914568704,1914576895,KR
1914576896,1914580991,TW
1914580992,1914585087,KR
@@ -79292,7 +35798,9 @@
1919909888,1919918079,AU
1919918080,1919926271,CN
1919926272,1919942655,KR
-1919942656,1920069631,CN
+1919942656,1920006847,CN
+1920006848,1920006911,HK
+1920006912,1920069631,CN
1920069632,1920073727,HK
1920073728,1920466943,CN
1920466944,1920991231,ID
@@ -79347,9 +35855,7 @@
1921945600,1921949695,HK
1921949696,1921953791,AU
1921953792,1921957887,JP
-1921957888,1921964031,GU
-1921964032,1921964287,US
-1921964288,1921974271,GU
+1921957888,1921974271,GU
1921974272,1922039807,IN
1922039808,1925447679,JP
1925447680,1925578751,CN
@@ -79371,7 +35877,7 @@
1931354112,1931362303,AU
1931362304,1931378687,TW
1931378688,1931427839,JP
-1931427840,1931431935,PH
+1931427840,1931428351,PH
1931431936,1931433983,JP
1931433984,1931436031,AU
1931436032,1931444223,KR
@@ -79387,9 +35893,7 @@
1932156928,1932161023,JP
1932161024,1932163071,TW
1932163072,1932165119,PH
-1932165120,1932182523,SG
-1932182524,1932182524,AP
-1932182525,1932197887,SG
+1932165120,1932197887,SG
1932197888,1932263423,TW
1932263424,1933574143,CN
1933574144,1933639679,AU
@@ -79397,9 +35901,7 @@
1933705216,1933770751,SG
1933770752,1933836287,TH
1933836288,1933901823,KR
-1933901824,1933909759,AU
-1933909760,1933910015,AU
-1933910016,1933918207,AU
+1933901824,1933918207,AU
1933918208,1933922303,CN
1933922304,1933926399,IN
1933926400,1933934591,KR
@@ -79445,9 +35947,7 @@
1937518592,1937522687,JP
1937522688,1937530879,ID
1937530880,1937532927,US
-1937532928,1937534975,IN
-1937534976,1937535487,US
-1937535488,1937535999,IN
+1937532928,1937535999,IN
1937536000,1937536511,GB
1937536512,1937539071,IN
1937539072,1937637375,JP
@@ -79488,9 +35988,7 @@
1940357120,1940389887,JP
1940389888,1940914175,CN
1940914176,1941045247,JP
-1941045248,1941046783,HK
-1941046784,1941047295,AU
-1941047296,1941049343,HK
+1941045248,1941049343,HK
1941049344,1941051391,AU
1941051392,1941052415,KH
1941052416,1941053439,AU
@@ -79525,7 +36023,11 @@
1946163200,1946165247,CN
1946165248,1946173439,PK
1946173440,1946173695,PG
-1946173696,1946181631,SG
+1946173696,1946176511,SG
+1946176512,1946176767,PH
+1946176768,1946178047,SG
+1946178048,1946178303,HK
+1946178304,1946181631,SG
1946181632,1946189823,MY
1946189824,1946222591,JP
1946222592,1946943487,CN
@@ -79551,7 +36053,9 @@
1949448192,1949448703,HK
1949448704,1949448959,AU
1949448960,1949449215,IN
-1949449216,1949450239,HK
+1949449216,1949449471,SG
+1949449472,1949449727,JP
+1949449728,1949450239,HK
1949450240,1949466623,IN
1949466624,1949499391,PH
1949499392,1949564927,SG
@@ -79567,8 +36071,7 @@
1950089216,1950351359,CN
1950351360,1950482431,JP
1950482432,1950515199,CN
-1950515200,1950517247,US
-1950517248,1950523391,IN
+1950515200,1950523391,IN
1950523392,1950527487,AU
1950527488,1950531583,JP
1950531584,1950533631,NP
@@ -79580,10 +36083,7 @@
1950545920,1950547967,PH
1950547968,1950580735,KR
1950580736,1950613503,JP
-1950613504,1950617599,GU
-1950617600,1950619135,US
-1950619136,1950619391,GU
-1950619392,1950621695,US
+1950613504,1950621695,GU
1950621696,1950629887,KR
1950629888,1950646271,IN
1950646272,1950648319,VN
@@ -79659,7 +36159,9 @@
1958850560,1958852607,CN
1958852608,1958853631,AU
1958853632,1958854655,ID
-1958854656,1958862847,AU
+1958854656,1958858751,AU
+1958858752,1958860799,NZ
+1958860800,1958862847,BD
1958862848,1958871039,JP
1958871040,1959067647,CN
1959067648,1959100415,MY
@@ -79670,7 +36172,9 @@
1959110656,1959112703,JP
1959112704,1959113215,HK
1959113216,1959113471,IN
-1959113472,1959116799,HK
+1959113472,1959114751,HK
+1959114752,1959115007,IN
+1959115008,1959116799,HK
1959116800,1959133183,SG
1959133184,1959239679,CN
1959239680,1959241727,KR
@@ -79682,7 +36186,8 @@
1959260160,1959264255,JP
1959264256,1959395327,KR
1959395328,1959526399,IN
-1959526400,1960050687,CN
+1959526400,1959657471,CN
+1959723008,1960050687,CN
1960050688,1960058879,KR
1960058880,1960067071,VN
1960067072,1960069119,AU
@@ -79705,9 +36210,7 @@
1960187904,1960189951,IN
1960189952,1960202239,CN
1960202240,1960206335,JP
-1960206336,1960212582,SG
-1960212583,1960212583,AP
-1960212584,1960214527,SG
+1960206336,1960214527,SG
1960214528,1960574975,CN
1960574976,1960837119,JP
1960837120,1961885695,CN
@@ -79723,7 +36226,6 @@
1962672128,1962803199,CN
1962803200,1962827775,JP
1962827776,1962829823,ID
-1962829824,1962831871,JP
1962831872,1962835967,ID
1962835968,1962868735,CN
1962868736,1962885119,AU
@@ -79742,9 +36244,17 @@
1964138496,1964146687,HK
1964146688,1964171263,JP
1964171264,1964173311,BD
-1964173312,1964173776,AP
+1964173312,1964173727,AU
+1964173728,1964173743,JP
+1964173744,1964173776,AU
1964173777,1964173777,JP
-1964173778,1964175359,AP
+1964173778,1964173823,AU
+1964173824,1964174079,HK
+1964174080,1964174335,AU
+1964174336,1964174495,SG
+1964174496,1964174511,SN
+1964174512,1964174591,SG
+1964174592,1964175359,AU
1964175360,1964179455,GB
1964179456,1964244991,TW
1964244992,1964249087,AU
@@ -79821,16 +36331,12 @@
1969727488,1969729535,ID
1969729536,1969733631,JP
1969733632,1969750015,VN
-1969750016,1969782783,JP
-1969782784,1969783807,US
-1969783808,1969790975,JP
+1969750016,1969790975,JP
1969790976,1969793023,AU
1969793024,1969795071,CN
1969795072,1969797119,NZ
1969797120,1969798143,SG
-1969798144,1969798655,HK
-1969798656,1969798911,KR
-1969798912,1969799167,HK
+1969798144,1969799167,HK
1969799168,1969807359,ID
1969807360,1969809407,AF
1969809408,1969811455,IN
@@ -79859,19 +36365,16 @@
1970926336,1970926591,US
1970926592,1970926847,SG
1970926848,1970927103,IL
-1970927104,1970927359,SG
-1970927360,1970927615,US
+1970927104,1970927615,SG
1970927616,1970929663,AU
1970929664,1970962431,VN
1970962432,1970995199,CN
1970995200,1971060735,KR
1971060736,1975517183,CN
-1975517184,1976195839,IN
-1976195840,1976196095,US
-1976196096,1979711487,IN
+1975517184,1979711487,IN
1979711488,1981284351,JP
-1981284352,1981546494,CN
-1981546495,1981546495,SG
+1981284352,1981480959,CN
+1981480960,1981546495,JP
1981546496,1981808639,CN
1981808640,1983905791,KR
1983905792,1984102399,CN
@@ -79894,9 +36397,7 @@
1985347584,1985478655,JP
1985478656,1985480703,IN
1985480704,1985482751,PH
-1985482752,1985484799,AU
-1985484800,1985485055,AU
-1985485056,1985486847,AU
+1985482752,1985486847,AU
1985486848,1985609727,CN
1985609728,1985675263,NZ
1985675264,1985708031,KR
@@ -79942,9 +36443,7 @@
1988034560,1988067327,AU
1988067328,1988075519,CN
1988075520,1988083711,AU
-1988083712,1988158975,KR
-1988158976,1988159231,US
-1988159232,1988362239,KR
+1988083712,1988362239,KR
1988362240,1988624383,CN
1988624384,1988755455,ID
1988755456,1988861951,AU
@@ -79967,15 +36466,11 @@
1991376896,1991442431,CN
1991442432,1991499775,BD
1991499776,1991507967,NC
-1991507968,1991835647,CN
-1991835648,1991852031,SG
-1991852032,1991868415,CN
-1991868416,1991901183,SG
-1991901184,1992097791,CN
-1992097792,1992163327,HK
+1991507968,1992097791,CN
+1992097792,1992163327,SG
1992163328,1992818687,CN
-1992818688,1992884223,SG
-1992884224,1993342975,CN
+1992818688,1992949759,SG
+1992949760,1993342975,CN
1993342976,1993605119,AU
1993605120,1993736191,CN
1993736192,1993867263,SG
@@ -79995,7 +36490,8 @@
1996636160,1996644351,ID
1996644352,1996652543,BT
1996652544,1997078527,CN
-1997078528,1997144063,HK
+1997078528,1997094911,AU
+1997094912,1997144063,HK
1997144064,1997176831,CN
1997176832,1997180927,AU
1997180928,1997185023,HK
@@ -80037,9 +36533,9 @@
1997723648,1997725695,JP
1997725696,1998061567,CN
1998061568,1998258175,JP
-1998258176,1998274047,SG
-1998274048,1998274303,US
-1998274304,1998274559,SG
+1998258176,1998271231,SG
+1998271232,1998271487,AU
+1998271488,1998274559,SG
1998274560,1998454783,CN
1998454784,1998456831,AU
1998456832,1998458879,JP
@@ -80053,21 +36549,16 @@
1998553088,1998561279,JP
1998561280,1998562047,IN
1998562048,1998562303,TH
-1998562304,1998562559,IN
-1998562560,1998562815,AP
-1998562816,1998562863,IN
+1998562304,1998562863,IN
1998562864,1998562864,HK
1998562865,1998565375,IN
1998565376,1998569471,TW
1998569472,1998577663,CN
1998577664,1998579711,AU
1998579712,1998581759,SG
-1998581760,1998583807,KR
-1998583808,1998584063,AU
-1998584064,1998585087,KR
-1998585088,1998585343,SG
-1998585344,1998585599,JP
-1998585600,1998585855,IN
+1998581760,1998584319,KR
+1998584320,1998584575,OM
+1998584576,1998585855,KR
1998585856,1999130623,CN
1999130624,1999134719,BD
1999134720,1999136767,MN
@@ -80077,9 +36568,7 @@
1999249408,1999257599,PH
1999257600,1999273983,TH
1999273984,1999278079,CN
-1999278080,1999278097,HK
-1999278098,1999278098,HK
-1999278099,1999280127,HK
+1999278080,1999280127,HK
1999280128,1999282175,IN
1999282176,1999290367,KR
1999290368,1999298559,SG
@@ -80100,11 +36589,7 @@
2000355328,2000371711,KR
2000371712,2000373759,JP
2000373760,2000375807,HK
-2000375808,2000376319,AF
-2000376320,2000376575,US
-2000376576,2000377087,AF
-2000377088,2000377343,US
-2000377344,2000377855,AF
+2000375808,2000377855,AF
2000377856,2000379903,JP
2000379904,2000388095,TH
2000388096,2000617471,CN
@@ -80177,7 +36662,6 @@
2007040000,2007048191,KR
2007048192,2007064575,AU
2007066624,2007070719,JP
-2007070720,2007072767,IN
2007072768,2007498751,CN
2007498752,2008023039,JP
2008023040,2009071615,CN
@@ -80227,18 +36711,17 @@
2015166464,2015182847,AU
2015182848,2015199231,PH
2015199232,2015203327,KR
-2015203328,2015203839,JP
-2015203840,2015205375,US
+2015203328,2015205375,JP
2015205376,2015207423,ID
2015207424,2015215615,JP
-2015215616,2015219711,IN
+2015215616,2015216383,IN
+2015216384,2015216639,AU
+2015216640,2015219711,IN
2015219712,2015219967,US
-2015219968,2015220223,PH
+2015219968,2015220223,HK
2015220224,2015220479,IN
2015220480,2015220735,HK
-2015220736,2015221247,IN
-2015221248,2015221503,SG
-2015221504,2015223807,IN
+2015220736,2015223807,IN
2015223808,2015225855,ID
2015225856,2015227903,IN
2015227904,2015231999,AU
@@ -80269,8 +36752,8 @@
2019035136,2019037183,CN
2019037184,2019041279,JP
2019041280,2019045375,IN
-2019045376,2019046399,US
-2019046400,2019049471,JP
+2019045376,2019045631,US
+2019045632,2019049471,JP
2019049472,2019078143,AU
2019078144,2019082239,IN
2019082240,2019098623,HK
@@ -80289,12 +36772,10 @@
2022178816,2022180863,NZ
2022180864,2022182911,JP
2022184960,2022187007,KH
-2022187008,2022187663,HK
-2022187664,2022187679,US
-2022187680,2022189651,HK
-2022189652,2022189652,HK
-2022189653,2022191103,HK
-2022191104,2022195199,NZ
+2022187008,2022191103,HK
+2022191104,2022194175,NZ
+2022194176,2022194687,AU
+2022194688,2022195199,NZ
2022195200,2022211583,KR
2022211584,2022227967,CN
2022227968,2022244351,JP
@@ -80334,9 +36815,7 @@
2030059520,2030108671,KR
2030108672,2030125055,PH
2030125056,2030141439,KR
-2030141440,2030173695,JP
-2030173696,2030173951,AP
-2030173952,2030305279,JP
+2030141440,2030305279,JP
2030305280,2030436351,CN
2030436352,2030567423,SG
2030567424,2032926719,CN
@@ -80370,9 +36849,7 @@
2033631232,2033647615,KR
2033647616,2033663999,CN
2033664000,2033696767,KR
-2033696768,2033708799,GU
-2033708800,2033709055,US
-2033709056,2033713151,GU
+2033696768,2033713151,GU
2033713152,2033876991,CN
2033876992,2033879039,JP
2033879040,2033887231,CN
@@ -80457,8 +36934,8 @@
2046836736,2046885887,CN
2046885888,2046951423,JP
2046951424,2047082495,PH
-2047082496,2047475711,CN
-2047475712,2047492095,HK
+2047082496,2047442943,CN
+2047442944,2047492095,HK
2047492096,2047496191,KR
2047496192,2047508479,HK
2047508480,2047526911,CN
@@ -80510,8 +36987,8 @@
2053515264,2053519359,ID
2053519360,2053521407,JP
2053521408,2053529599,CN
-2053529600,2053532927,AU
-2053532928,2053533183,NZ
+2053529600,2053532671,AU
+2053532672,2053533183,NZ
2053533184,2053533695,AU
2053533696,2053534719,VN
2053534720,2053537791,IN
@@ -80559,13 +37036,19 @@
2056794112,2056796159,BD
2056796160,2056806399,JP
2056806400,2056814591,KR
-2056814592,2056817663,JP
+2056814592,2056816863,JP
+2056816864,2056816895,MY
+2056816896,2056817663,JP
2056817664,2056817919,AU
-2056817920,2056818943,JP
+2056817920,2056818431,JP
+2056818432,2056818687,SG
+2056818688,2056818943,JP
2056818944,2056818993,MY
-2056818994,2056818994,AP
+2056818994,2056818994,JP
2056818995,2056819199,MY
-2056819200,2056830975,JP
+2056819200,2056823849,JP
+2056823850,2056823850,SG
+2056823851,2056830975,JP
2056830976,2056847359,CN
2056847360,2056912895,KR
2056912896,2057043967,TH
@@ -80594,10 +37077,7 @@
2059997184,2060001279,MN
2060001280,2060002559,HK
2060002560,2060002815,ID
-2060002816,2060004351,HK
-2060004352,2060004607,US
-2060004608,2060005119,HK
-2060005120,2060005375,US
+2060002816,2060005375,HK
2060005376,2060009471,CN
2060009472,2060025855,AU
2060025856,2060058623,TW
@@ -80611,43 +37091,44 @@
2060451840,2061500415,JP
2061500416,2063073279,CN
2063073280,2063077375,BD
-2063077376,2063077377,HK
-2063077378,2063077378,AP
-2063077379,2063078143,HK
-2063078144,2063078399,SG
-2063078400,2063079423,HK
+2063077376,2063077377,PH
+2063077378,2063077378,HK
+2063077379,2063077631,PH
+2063077632,2063079423,HK
2063079424,2063081471,CN
2063081472,2063085567,ID
2063085568,2063089663,CN
2063089664,2063097855,JP
-2063097856,2063098367,MM
-2063098368,2063098495,SG
-2063098496,2063106047,MM
-2063106048,2063107071,JP
-2063107072,2063107327,AP
-2063107328,2063107623,JP
+2063097856,2063106047,MM
+2063106048,2063106559,JP
+2063106560,2063106815,AU
+2063106816,2063107623,JP
2063107624,2063107631,AU
-2063107632,2063111679,JP
-2063111680,2063112191,AU
-2063112192,2063114495,JP
+2063107632,2063111167,JP
+2063111168,2063112191,AU
+2063112192,2063113727,JP
+2063113728,2063113983,AU
+2063113984,2063114495,JP
2063114496,2063114751,IN
2063114752,2063115007,JP
2063115008,2063115263,IN
-2063115264,2063118335,JP
+2063115264,2063117311,JP
+2063117312,2063117567,NZ
+2063117568,2063118335,JP
2063118336,2063118591,IN
2063118592,2063119871,JP
-2063119872,2063119999,IN
-2063120000,2063120383,JP
-2063120384,2063121407,AU
-2063121408,2063122431,JP
+2063119872,2063120383,IN
+2063120384,2063120895,JP
+2063120896,2063121151,AU
+2063121152,2063122431,JP
2063122432,2063138815,SG
2063138816,2063335423,JP
2063335424,2063341567,AU
2063341568,2063343615,SG
-2063343616,2063351807,AP
+2063343616,2063351807,JP
2063351808,2063368191,KR
2063368192,2063372287,JP
-2063372288,2063374335,AP
+2063372288,2063374335,AU
2063374336,2063376383,NZ
2063376384,2063380479,TW
2063380480,2063382527,KH
@@ -80656,9 +37137,7 @@
2063392768,2063400959,IN
2063400960,2063466495,JP
2063466496,2063482879,TW
-2063482880,2063486463,MN
-2063486464,2063486719,JP
-2063486720,2063499263,MN
+2063482880,2063499263,MN
2063499264,2063532031,KR
2063532032,2063548415,LK
2063548416,2063550463,CN
@@ -80691,7 +37170,9 @@
2066923520,2066939903,JP
2066939904,2066972671,AU
2066972672,2067005439,TW
-2067005440,2067726335,CN
+2067005440,2067529727,CN
+2067529728,2067595263,HK
+2067595264,2067726335,CN
2067726336,2067791871,IN
2067791872,2070052863,CN
2070052864,2070056959,AU
@@ -80708,7 +37189,9 @@
2070200320,2070208511,JP
2070208512,2070210047,SG
2070210048,2070210303,AU
-2070210304,2070216703,SG
+2070210304,2070210815,SG
+2070210816,2070211071,AU
+2070211072,2070216703,SG
2070216704,2070282239,CN
2070282240,2070347775,AU
2070347776,2070380543,CN
@@ -80821,7 +37304,12 @@
2080636928,2080702463,IN
2080702464,2080767999,KR
2080768000,2080776191,TW
-2080776192,2080784383,ID
+2080776192,2080777215,HK
+2080777216,2080778239,GB
+2080778240,2080779263,US
+2080779264,2080780287,SG
+2080780288,2080781311,ID
+2080781312,2080784383,SG
2080784384,2080800767,CN
2080800768,2080817151,PH
2080817152,2080825343,NZ
@@ -80843,8 +37331,8 @@
2082340864,2082406399,IN
2082406400,2082471935,CN
2082471936,2083007231,JP
-2083007232,2083012607,US
-2083012608,2083024895,JP
+2083007232,2083007487,US
+2083007488,2083024895,JP
2083024896,2083053567,CN
2083053568,2083057663,TH
2083058688,2083059711,IN
@@ -80964,9 +37452,7 @@
2093383680,2093416447,NZ
2093416448,2093432831,KR
2093432832,2093445119,TW
-2093445120,2093448447,AF
-2093448448,2093448703,US
-2093448704,2093449215,AF
+2093445120,2093449215,AF
2093449216,2093481983,KR
2093481984,2094006271,CN
2094006272,2094530559,JP
@@ -81063,9 +37549,7 @@
2111111168,2111143935,CN
2111143936,2111152127,ID
2111152128,2111160319,AU
-2111160320,2111161599,AF
-2111161600,2111161855,US
-2111161856,2111168511,AF
+2111160320,2111168511,AF
2111168512,2111176703,TH
2111176704,2111193087,VN
2111193088,2111201279,AU
@@ -81081,15 +37565,15 @@
2112487424,2112618495,VN
2112618496,2112880639,NZ
2112880640,2113683455,KR
-2113683456,2113685247,JP
-2113685248,2113685311,PH
-2113685312,2113685759,JP
+2113683456,2113685759,JP
2113685760,2113686015,MY
2113686016,2113687807,JP
2113687808,2113688063,AU
-2113688064,2113693695,JP
-2113693696,2113693951,HK
-2113693952,2113716223,JP
+2113688064,2113688319,JP
+2113688320,2113688575,SG
+2113688576,2113693599,JP
+2113693600,2113693615,HK
+2113693616,2113716223,JP
2113716224,2113732607,SG
2113732608,2113761279,AU
2113761280,2113765375,VN
@@ -81105,8 +37589,13 @@
2147485696,2147487743,DK
2147487744,2147489791,NO
2147489792,2147491839,RU
-2147491840,2147500031,DE
-2147500032,2147502079,NL
+2147491840,2147494911,DE
+2147494912,2147495167,RO
+2147495168,2147498239,DE
+2147498240,2147498495,RO
+2147498496,2147500031,DE
+2147500032,2147501055,FR
+2147501056,2147502079,NL
2147502080,2147504127,DK
2147504128,2147508223,RU
2147508224,2147510271,DE
@@ -81120,14 +37609,12 @@
2147526656,2147528703,UA
2147528704,2147532799,CZ
2147532800,2147534847,DE
-2147534848,2147549183,CY
+2147534848,2147536895,CY
+2147536896,2147540991,GR
+2147540992,2147549183,CY
2147549184,2147942399,US
2147942400,2148007935,DE
-2148007936,2148220515,US
-2148220516,2148220535,AU
-2148220536,2148229151,US
-2148229152,2148229183,CA
-2148229184,2148532223,US
+2148007936,2148532223,US
2148532224,2148597759,GB
2148597760,2150039551,US
2150039552,2150105087,NO
@@ -81139,7 +37626,7 @@
2150432768,2150498303,IT
2150498304,2151743487,US
2151743488,2151759871,BY
-2151759872,2151768063,US
+2151759872,2151768063,DE
2151768064,2151770111,GB
2151770112,2151772159,BA
2151772160,2151776255,IT
@@ -81150,9 +37637,9 @@
2151784448,2151792639,IR
2151792640,2151794687,CH
2151794688,2151796735,IT
-2151796736,2151797247,DE
-2151797248,2151798015,NL
-2151798016,2151800831,DE
+2151796736,2151798783,NL
+2151798784,2151799807,DE
+2151799808,2151800831,NL
2151800832,2151809023,PT
2151809024,2151940095,IT
2151940096,2152464383,RU
@@ -81161,9 +37648,41 @@
2152726528,2153119743,US
2153119744,2153185279,GB
2153185280,2153250815,SE
-2153250816,2153316095,US
-2153316096,2153316351,AP
-2153316352,2153578495,US
+2153250816,2153384447,US
+2153384448,2153385471,GB
+2153385472,2153385599,AT
+2153385600,2153385663,CZ
+2153385664,2153385727,FI
+2153385728,2153385791,PL
+2153385792,2153385855,PT
+2153385856,2153385919,TR
+2153385920,2153385983,US
+2153385984,2153387007,GB
+2153387008,2153387263,CH
+2153387264,2153387775,US
+2153387776,2153388031,CH
+2153388032,2153406463,US
+2153406464,2153407487,JP
+2153407488,2153407743,HK
+2153407744,2153407999,US
+2153408000,2153408511,BR
+2153408512,2153408767,AU
+2153408768,2153409023,PA
+2153409024,2153409279,AR
+2153409280,2153409535,CR
+2153409536,2153409791,CO
+2153409792,2153410047,MX
+2153410048,2153410303,US
+2153410304,2153410559,TW
+2153410560,2153410815,PA
+2153410816,2153411071,AR
+2153411072,2153411327,CR
+2153411328,2153411583,CO
+2153411584,2153411839,MX
+2153411840,2153412095,US
+2153412096,2153412351,TW
+2153412352,2153413119,AU
+2153413120,2153578495,US
2153578496,2153644031,FR
2153644032,2153906175,US
2153906176,2153971711,GB
@@ -81173,7 +37692,6 @@
2155610112,2155675647,UA
2155675648,2155806719,US
2155806720,2155808767,IT
-2155808768,2155810815,RU
2155810816,2155812863,FR
2155812864,2155814911,GB
2155814912,2155819007,NL
@@ -81184,7 +37702,11 @@
2155827200,2155831295,PL
2155831296,2155833343,RU
2155833344,2155833855,SE
-2155833856,2155834623,NL
+2155833856,2155834367,NL
+2155834368,2155834464,SE
+2155834465,2155834512,NL
+2155834513,2155834532,SE
+2155834533,2155834623,NL
2155834624,2155834879,LU
2155834880,2155835391,NL
2155835392,2155839487,RO
@@ -81193,7 +37715,6 @@
2155845632,2155847679,DE
2155847680,2155849727,ES
2155849728,2155851775,TR
-2155851776,2155853823,KZ
2155853824,2155855871,SE
2155855872,2155872255,RO
2155872256,2156003327,US
@@ -81203,10 +37724,7 @@
2156331008,2156593151,US
2156593152,2156658687,IL
2156658688,2156691455,IR
-2156691456,2156691478,A2
-2156691479,2156691479,FR
-2156691480,2156695551,A2
-2156695552,2156697599,FR
+2156691456,2156697599,FR
2156697600,2156699647,CY
2156699648,2156703743,RU
2156703744,2156707839,BG
@@ -81226,112 +37744,43 @@
2159149056,2159280127,CH
2159280128,2159542271,US
2159542272,2159607807,AU
-2159607808,2159869951,US
+2159607808,2159673343,IN
+2159673344,2159869951,US
2159869952,2159935487,CA
2159935488,2160525311,US
-2160525312,2160590847,GB
-2160590848,2160852991,US
+2160525312,2160590847,SG
+2160590848,2160656383,US
+2160721920,2160852991,US
2160852992,2160885759,RU
-2160885760,2160889727,AT
-2160889728,2160889759,DE
-2160889760,2160889887,AT
-2160889888,2160889919,GB
-2160889920,2160890111,AT
-2160890112,2160890127,CH
-2160890128,2160890143,AT
-2160890144,2160890159,CN
-2160890160,2160890175,AD
-2160890176,2160890191,AT
-2160890192,2160890207,FR
-2160890208,2160890239,AT
-2160890240,2160890255,SK
-2160890256,2160890335,AT
-2160890336,2160890351,TW
-2160890352,2160890383,AT
-2160890384,2160890399,GB
-2160890400,2160890415,AT
-2160890416,2160890431,DE
-2160890432,2160890495,AT
-2160890496,2160890511,FR
-2160890512,2160890527,AT
-2160890528,2160890543,DE
-2160890544,2160890599,AT
-2160890600,2160890607,GB
-2160890608,2160890615,DE
-2160890616,2160890623,AT
-2160890624,2160890751,DE
-2160890752,2160891007,AT
-2160891008,2160891135,DE
-2160891136,2160892215,AT
-2160892216,2160892223,DE
-2160892224,2160892231,IT
-2160892232,2160892255,AT
-2160892256,2160892263,BE
-2160892264,2160892279,DE
-2160892280,2160892295,AT
-2160892296,2160892303,DE
-2160892304,2160892311,GB
-2160892312,2160892319,HR
-2160892320,2160892327,AT
-2160892328,2160892335,DE
-2160892336,2160892343,US
-2160892344,2160892399,AT
-2160892400,2160892407,IE
-2160892408,2160892455,AT
-2160892456,2160892463,DE
-2160892464,2160892471,AT
-2160892472,2160892479,GB
-2160892480,2160892495,AT
-2160892496,2160892503,DE
-2160892504,2160892551,AT
-2160892552,2160892559,IN
-2160892560,2160892567,GR
-2160892568,2160893055,AT
-2160893056,2160893119,DE
-2160893120,2160893951,AT
+2160885760,2160893951,AT
2160893952,2160902143,RU
-2160902144,2160902673,NL
-2160902674,2160902675,TR
-2160902676,2160902679,NL
-2160902680,2160902681,TR
-2160902682,2160902714,NL
-2160902715,2160902716,TR
-2160902717,2160902724,NL
-2160902725,2160902727,TR
-2160902728,2160902755,NL
-2160902756,2160902756,TR
-2160902757,2160902762,NL
-2160902763,2160902763,TR
-2160902764,2160903428,NL
-2160903429,2160903429,ES
-2160903430,2160906239,NL
+2160902144,2160906239,NL
2160906240,2160908287,FR
2160908288,2160910335,PL
2160910336,2160914431,NL
2160914432,2160918527,SA
2160918528,2161508351,US
2161508352,2161573887,FI
-2161573888,2162687999,US
+2161573888,2162228223,US
+2162228224,2162228479,CA
+2162228480,2162687999,US
2162688000,2162753535,GB
2162753536,2162819071,CA
2162819072,2162884607,RO
2162884608,2163212287,US
2163212288,2163277823,GB
-2163277824,2163288063,US
-2163288064,2163290111,US
-2163290112,2163304447,US
-2163304448,2163306495,US
-2163306496,2163408895,US
+2163277824,2163408895,US
2163408896,2163474431,GB
2163474432,2163605503,US
-2163605504,2163623935,CH
-2163623936,2163624191,AP
-2163624192,2163638271,CH
+2163605504,2163623935,DE
+2163623936,2163624191,CH
+2163624192,2163638271,DE
2163638272,2163638527,US
-2163638528,2163671039,CH
+2163638528,2163671039,DE
2163671040,2163867647,US
2163867648,2163933183,AU
-2163933184,2164981759,US
+2163933184,2164260863,US
+2164326400,2164981759,US
2164981760,2165112831,GB
2165112832,2165178367,DE
2165178368,2165309439,US
@@ -81350,15 +37799,14 @@
2166571008,2166575103,GB
2166575104,2166575359,US
2166575360,2166575615,GB
-2166575616,2166598655,US
-2166598656,2166598911,FR
-2166598912,2166606335,US
-2166606336,2166606591,FR
-2166606592,2166607009,US
-2166607010,2166607011,DE
+2166575616,2166607009,US
+2166607010,2166607010,DE
+2166607011,2166607011,GB
2166607012,2166613759,US
2166613760,2166614015,DE
-2166614016,2168193023,US
+2166614016,2167209983,US
+2167275520,2167930879,US
+2167996416,2168193023,US
2168193024,2168258559,JP
2168258560,2168651775,US
2168651776,2168717311,GB
@@ -81381,7 +37829,8 @@
2170945536,2171011071,FR
2171011072,2171076607,DE
2171076608,2171142143,FR
-2171142144,2172452863,US
+2171142144,2172256255,US
+2172321792,2172452863,US
2172452864,2172518399,NL
2172518400,2172583935,US
2172583936,2172649471,AU
@@ -81406,16 +37855,12 @@
2175926272,2175991807,SE
2175991808,2176057343,US
2176057344,2176122879,AU
-2176122880,2176389119,FR
-2176389120,2176389375,NL
-2176389376,2176450559,FR
+2176122880,2176450559,FR
2176450560,2176516095,US
2176516096,2176581631,DE
2176581632,2176868607,US
2176868608,2176868863,IT
-2176868864,2176893951,US
-2176893952,2176894207,AP
-2176894208,2176897023,US
+2176868864,2176897023,US
2176897024,2176897279,AU
2176897280,2176974847,US
2176974848,2177105919,CH
@@ -81429,13 +37874,11 @@
2178351104,2178416639,GB
2178416640,2178482175,US
2178482176,2178547711,DE
-2178547712,2179379199,US
-2179379200,2179395583,GB
-2179395584,2179397632,US
+2178547712,2179391487,US
+2179391488,2179391999,GB
+2179392000,2179397632,US
2179397633,2179397633,GB
-2179397634,2179398143,US
-2179398144,2179398399,GB
-2179398400,2179465215,US
+2179397634,2179465215,US
2179530752,2179596287,DE
2179596288,2179661823,GB
2179661824,2179989503,US
@@ -81496,19 +37939,14 @@
2183266304,2183331839,JP
2183331840,2183416575,US
2183416576,2183416831,GB
-2183416832,2183419647,US
-2183419648,2183419903,EU
-2183419904,2183421695,US
-2183421696,2183421951,EU
-2183421952,2183437055,US
-2183437056,2183437311,AP
-2183437312,2183462911,US
+2183416832,2183462911,US
2183462912,2183528447,NL
2183528448,2183856127,US
2183856128,2183888895,GR
2183888896,2183905279,GB
2183905280,2183921663,HU
-2183921664,2184577023,US
+2183921664,2184380415,US
+2184445952,2184577023,US
2184577024,2184642559,JP
2184642560,2184708095,US
2184708096,2184773631,AU
@@ -81540,27 +37978,7 @@
2186870784,2186936319,NL
2186936320,2187067391,US
2187067392,2187132927,CH
-2187132928,2187221887,US
-2187221888,2187222015,US
-2187222016,2187225471,US
-2187225472,2187225599,US
-2187225600,2187225823,US
-2187225824,2187225855,US
-2187225856,2187225983,US
-2187225984,2187226111,US
-2187226112,2187229471,US
-2187229472,2187229479,US
-2187229480,2187229607,US
-2187229608,2187229615,US
-2187229616,2187229679,US
-2187229680,2187229687,US
-2187229688,2187230111,US
-2187230112,2187230143,US
-2187230144,2187232511,US
-2187232512,2187232639,US
-2187232640,2187232767,US
-2187232768,2187233023,US
-2187233024,2187263999,US
+2187132928,2187263999,US
2187264000,2187329535,AU
2187329536,2187460607,US
2187460608,2187526143,FR
@@ -81576,60 +37994,49 @@
2188509184,2188574719,US
2188574720,2188640255,NL
2188640256,2188705791,AU
-2188705792,2188705857,EU
+2188705792,2188705857,US
2188705858,2188705858,DE
-2188705859,2188705957,EU
+2188705859,2188705957,US
2188705958,2188705958,DE
-2188705959,2188706101,EU
+2188705959,2188706101,US
2188706102,2188706102,DE
-2188706103,2188706453,EU
+2188706103,2188706453,US
2188706454,2188706454,DK
-2188706455,2188707839,EU
-2188707840,2188708863,FR
-2188708864,2188711800,EU
+2188706455,2188708607,US
+2188708608,2188708863,FR
+2188708864,2188711800,US
2188711801,2188711801,DE
-2188711802,2188716031,EU
-2188716032,2188718079,FR
-2188718080,2188718581,EU
+2188711802,2188716031,US
+2188716032,2188716287,FR
+2188716288,2188718581,US
2188718582,2188718582,DE
-2188718583,2188724463,EU
+2188718583,2188724463,US
2188724464,2188724464,NL
-2188724465,2188724991,EU
-2188724992,2188725247,IL
-2188725248,2188726783,EU
+2188724465,2188726783,US
2188726784,2188727039,GB
-2188727040,2188728319,EU
+2188727040,2188728319,US
2188728320,2188728575,GB
-2188728576,2188734463,EU
+2188728576,2188734463,US
2188734464,2188734719,FR
-2188734720,2188736511,EU
-2188736512,2188737023,GB
-2188737024,2188737791,EU
-2188737792,2188738047,GB
-2188738048,2188768767,EU
-2188768768,2188769023,YT
-2188769024,2188769279,EU
-2188769280,2188769535,NL
-2188769536,2188771327,EU
-2188771328,2188900351,US
-2188900352,2188900607,EU
-2188900608,2188902399,US
+2188734720,2188738306,US
+2188738307,2188738307,GB
+2188738308,2188768767,US
+2188768768,2188769279,YT
+2188769280,2188902399,US
2188902400,2188967935,FR
2188967936,2189099007,US
2189099008,2189164543,NZ
2189164544,2189230079,US
2189230080,2189295615,CH
2189295616,2189492223,US
-2189492224,2189557759,CA
+2189492224,2189557759,CZ
2189557760,2189623295,AU
2189623296,2189754367,US
2189754368,2189819903,DE
2189819904,2189950975,US
2189950976,2190016511,IT
2190016512,2190082047,US
-2190082048,2190140159,NL
-2190140160,2190140415,EU
-2190140416,2190737407,NL
+2190082048,2190737407,NL
2190737408,2190802943,GB
2190802944,2190868479,DE
2190868480,2191065087,US
@@ -81656,25 +38063,11 @@
2193096704,2193162239,US
2193162240,2193178623,UA
2193178624,2193180671,GB
-2193180672,2193181695,IR
-2193181696,2193182207,DE
-2193182208,2193182719,IR
+2193180672,2193182719,IR
2193182720,2193184767,PT
2193184768,2193186815,ES
2193186816,2193188863,PL
-2193188864,2193189119,DE
-2193189120,2193189247,CZ
-2193189248,2193189375,GB
-2193189376,2193189631,CZ
-2193189632,2193189919,DE
-2193189920,2193189935,GB
-2193189936,2193189951,DE
-2193189952,2193189983,IT
-2193189984,2193190015,DE
-2193190016,2193190079,CZ
-2193190080,2193190111,DE
-2193190112,2193190143,AR
-2193190144,2193190911,DE
+2193188864,2193190911,DE
2193195008,2193199103,DK
2193199104,2193201151,GB
2193201152,2193202175,SE
@@ -81692,13 +38085,34 @@
2193555456,2193620991,US
2193620992,2193686527,IT
2193686528,2193688575,FR
-2193688576,2193691199,CZ
-2193691200,2193691263,SK
-2193691264,2193692671,CZ
+2193688576,2193692671,CZ
2193692672,2193694719,FR
-2193694720,2193704959,RU
+2193694720,2193695743,US
+2193695744,2193696767,RU
+2193696768,2193697791,US
+2193697792,2193698815,RU
+2193698816,2193701887,US
+2193701888,2193704959,RU
2193704960,2193707007,IT
-2193707008,2193711103,GB
+2193707008,2193707239,GB
+2193707240,2193707247,IT
+2193707248,2193707407,GB
+2193707408,2193707415,IT
+2193707416,2193707751,GB
+2193707752,2193707759,IT
+2193707760,2193707831,GB
+2193707832,2193707839,IT
+2193707840,2193707975,GB
+2193707976,2193707983,IT
+2193707984,2193708511,GB
+2193708512,2193708519,IT
+2193708520,2193708663,GB
+2193708664,2193708671,IT
+2193708672,2193708735,GB
+2193708736,2193708743,IT
+2193708744,2193708815,GB
+2193708816,2193708823,IT
+2193708824,2193711103,GB
2193711104,2193713151,DE
2193713152,2193715199,ES
2193715200,2193717247,DE
@@ -81708,21 +38122,14 @@
2193817600,2193883135,NZ
2193883136,2194014207,US
2194014208,2194079743,CH
-2194079744,2194210815,US
-2194210816,2194276351,GB
-2194276352,2194407423,US
+2194079744,2194407423,US
2194407424,2194472959,BG
2194472960,2194538495,US
2194538496,2194604031,ES
2194604032,2194669567,US
2194669568,2194735103,IS
2194735104,2194800639,GB
-2194800640,2194866175,US
-2194931712,2195069436,US
-2195069437,2195069437,AP
-2195069438,2195073023,US
-2195073024,2195073279,EU
-2195073280,2195193855,US
+2194800640,2195193855,US
2195193856,2195324927,NZ
2195324928,2195455999,US
2195456000,2195521535,AU
@@ -81753,22 +38160,21 @@
2197776384,2197778431,DE
2197778432,2197780479,IT
2197780480,2197782527,DE
-2197782528,2197786623,UA
+2197782528,2197782685,RU
+2197782686,2197782686,UA
+2197782687,2197782783,RU
+2197782784,2197783039,UA
+2197783040,2197786623,RU
2197786624,2197788671,IT
2197788672,2197790719,PL
-2197790720,2197790947,SE
-2197790948,2197790951,EE
-2197790952,2197791111,SE
-2197791112,2197791115,LV
-2197791116,2197791455,SE
-2197791456,2197791459,LT
-2197791460,2197792767,SE
+2197790720,2197792767,SE
2197792768,2197794815,IT
2197794816,2197796863,SA
2197796864,2197798911,DE
2197798912,2197815295,IR
2197880832,2197946367,IT
-2197946368,2204172287,US
+2197946368,2202533887,US
+2202599424,2204172287,US
2204172288,2204237823,SE
2204237824,2204303359,US
2204303360,2204368895,DE
@@ -81784,8 +38190,7 @@
2205351936,2205483007,SE
2205483008,2205515775,CH
2205515776,2205519871,AZ
-2205519872,2205520383,US
-2205520384,2205523967,DE
+2205519872,2205523967,DE
2205523968,2205526015,YE
2205526016,2205528063,GB
2205528064,2205530111,SE
@@ -81850,7 +38255,7 @@
2210136064,2210201599,DE
2210201600,2210594815,US
2210594816,2210660351,CA
-2210660352,2211053567,US
+2210725888,2211053567,US
2211053568,2211119103,CA
2211119104,2211184639,NZ
2211184640,2211250175,US
@@ -81871,15 +38276,17 @@
2212691968,2212757503,GB
2212757504,2212761599,FI
2212761600,2212762623,GB
-2212762624,2212766719,FI
+2212762624,2212764927,FI
+2212764928,2212765183,BG
+2212765184,2212766719,FI
2212766720,2212767743,GB
-2212767744,2212802559,FI
-2212802560,2212802815,IN
-2212802816,2212805631,FI
-2212805632,2212806143,CN
-2212806144,2212810751,FI
-2212810752,2212811519,US
-2212811520,2212823039,FI
+2212767744,2212796415,FI
+2212796416,2212797951,NL
+2212797952,2212804095,FI
+2212804096,2212804351,NL
+2212804352,2212807679,FI
+2212807680,2212808703,US
+2212808704,2212823039,FI
2212823040,2212954111,US
2212954112,2213019647,GB
2213019648,2213085183,CA
@@ -81897,22 +38304,19 @@
2214068224,2214133759,JP
2214133760,2214264831,US
2214264832,2214330367,GB
-2214330368,2214397951,US
-2214397952,2214398207,CA
-2214398208,2214398975,US
-2214398976,2214400767,CA
-2214400768,2214401279,US
-2214401280,2214408191,CA
-2214408192,2214411519,US
-2214411520,2214461439,CA
+2214330368,2214461439,US
2214461440,2214526975,FR
2214592512,2218786815,US
2218786816,2219769855,IL
2219769856,2222521855,US
2222521856,2222522111,PR
-2222522112,2224160767,US
+2222522112,2223111679,US
+2223111680,2223111935,VI
+2223111936,2224160767,US
2224160768,2224226303,GB
-2224226304,2224357375,US
+2224226304,2224242687,US
+2224242688,2224259071,SG
+2224259072,2224357375,US
2224357376,2224422911,FR
2224422912,2224488447,NO
2224488448,2224619519,US
@@ -81921,7 +38325,7 @@
2224750592,2224816127,FI
2224816128,2224881663,CA
2224947200,2225340415,US
-2225340416,2225733631,FR
+2225405952,2225733631,FR
2225733632,2225799167,US
2225799168,2225864703,FI
2225864704,2226126847,US
@@ -81935,13 +38339,9 @@
2226716672,2226782207,GB
2226782208,2226847743,ZA
2226847744,2226913279,DE
-2226913280,2226921471,US
-2226921472,2226921727,EU
-2226921728,2227052543,US
-2227052544,2227052609,EU
+2226913280,2227052609,US
2227052610,2227052610,CH
-2227052611,2227052799,EU
-2227052800,2227109887,US
+2227052611,2227109887,US
2227175424,2227372031,US
2227372032,2227437567,DE
2227437568,2227503103,SE
@@ -81960,12 +38360,11 @@
2229796864,2229862399,GB
2229862400,2229927935,US
2229927936,2229993471,AU
-2229993472,2230583295,US
-2230583296,2230601727,GB
-2230601728,2230601983,EU
-2230601984,2230603775,GB
-2230603776,2230608127,US
-2230608128,2230637567,GB
+2229993472,2230321151,US
+2230386688,2230583295,US
+2230583296,2230603775,GB
+2230603776,2230607871,US
+2230607872,2230637567,GB
2230637568,2230638591,SG
2230638592,2230648831,GB
2230648832,2230714367,US
@@ -81981,10 +38380,9 @@
2248151040,2248153087,GB
2248153088,2248155135,DE
2248155136,2248163327,AL
-2248163328,2248165503,GB
-2248165504,2248165631,US
-2248165632,2248166399,GB
-2248166400,2248167423,US
+2248163328,2248163839,US
+2248163840,2248165375,GB
+2248165376,2248167423,US
2248167424,2248169471,IE
2248169472,2248171519,NL
2248171520,2248177663,RU
@@ -82012,9 +38410,7 @@
2249588736,2249654271,CA
2249654272,2249724671,US
2249724672,2249724927,CA
-2249724928,2249781247,US
-2249781248,2249781255,FR
-2249781256,2249785343,US
+2249724928,2249785343,US
2249785344,2249850879,SE
2249850880,2249916415,US
2249916416,2249981951,NL
@@ -82026,21 +38422,21 @@
2250375168,2250440703,DE
2250440704,2250506239,US
2250506240,2250571775,GB
-2250571776,2250637055,FI
-2250637056,2250637311,EU
-2250637312,2250702847,CH
-2250702848,2251227135,US
+2250571776,2250637311,FI
+2250637312,2250956799,US
+2250956800,2250957055,HK
+2250957056,2250957311,SG
+2250957312,2250957567,AU
+2250957568,2250957823,JP
+2250957824,2251227135,US
2251227136,2251292671,NO
2251292672,2251685887,US
-2251685888,2251686143,EU
-2251686144,2251751423,BE
+2251685888,2251751423,BE
2251751424,2251948031,US
2251948032,2252013567,BE
2252013568,2252079103,FR
2252079104,2252210175,DE
-2252210176,2252417023,US
-2252417024,2252417279,GB
-2252417280,2252931071,US
+2252210176,2252931071,US
2252996608,2253062143,US
2253062144,2253127679,KR
2253127680,2253193215,DE
@@ -82054,16 +38450,9 @@
2254045184,2254077951,GE
2254077952,2254079999,BA
2254080000,2254082047,FR
-2254082048,2254082559,NO
-2254082560,2254082815,NL
-2254082816,2254083071,NO
-2254083072,2254083327,GB
-2254083328,2254083583,DK
-2254083584,2254084095,NO
+2254082048,2254084095,NO
2254084096,2254094335,RU
-2254094336,2254096383,RO
-2254096384,2254096895,GB
-2254096896,2254098431,RO
+2254094336,2254098431,GB
2254098432,2254100479,RU
2254100480,2254102527,CH
2254102528,2254110719,IT
@@ -82073,7 +38462,7 @@
2255749120,2255814655,US
2255814656,2255880191,CA
2255880192,2255945727,US
-2255945728,2256011263,NO
+2255945728,2256011263,DE
2256011264,2256666623,US
2256666624,2256732159,DE
2256732160,2257190911,US
@@ -82082,16 +38471,10 @@
2257453056,2257518591,GB
2257518592,2257584127,NL
2257584128,2257649663,AU
-2257649664,2257715199,NL
-2257715200,2257715455,EU
-2257715456,2257716735,NL
-2257716736,2257716991,EU
-2257716992,2257717503,NL
+2257649664,2257717503,NL
2257717504,2257717759,GB
2257717760,2257718015,FR
-2257718016,2257765119,NL
-2257765120,2257765375,EU
-2257765376,2257771007,NL
+2257718016,2257771007,NL
2257771008,2257771263,NO
2257771264,2257776639,NL
2257776640,2257776895,IN
@@ -82107,54 +38490,200 @@
2258305024,2258370559,DE
2258370560,2258436095,US
2258436096,2258567167,FR
-2258567168,2258567679,US
-2258567680,2258567935,HK
-2258567936,2258583551,US
+2258567168,2258568191,US
+2258568192,2258568447,HK
+2258568448,2258582783,US
+2258582784,2258582791,GB
+2258582792,2258583551,US
2258583552,2258591743,GB
-2258591744,2258593375,AU
-2258593376,2258593535,HK
-2258593536,2258594303,AU
-2258594304,2258594559,HK
-2258594560,2258594613,AP
-2258594614,2258594614,HK
-2258594615,2258594815,AP
-2258594816,2258596095,AU
-2258596096,2258596351,HK
-2258596352,2258596863,AP
-2258596864,2258597119,AU
-2258597120,2258597375,PG
-2258597376,2258597439,HK
-2258597440,2258598079,AU
+2258591744,2258591935,AU
+2258591936,2258591967,HK
+2258591968,2258592271,AU
+2258592272,2258592279,JP
+2258592280,2258592287,AU
+2258592288,2258592291,JP
+2258592292,2258592439,AU
+2258592440,2258592447,JP
+2258592448,2258592791,AU
+2258592792,2258592803,HK
+2258592804,2258593279,AU
+2258593280,2258593535,HK
+2258593536,2258594047,AU
+2258594048,2258594111,HK
+2258594112,2258594303,AU
+2258594304,2258594319,HK
+2258594320,2258594559,PG
+2258594560,2258594815,HK
+2258594816,2258595103,AU
+2258595104,2258595167,TW
+2258595168,2258595231,AU
+2258595232,2258595263,TW
+2258595264,2258595295,AU
+2258595296,2258595327,TW
+2258595328,2258595383,AU
+2258595384,2258595391,KR
+2258595392,2258595887,AU
+2258595888,2258595895,NZ
+2258595896,2258595967,AU
+2258595968,2258595983,TW
+2258595984,2258596095,AU
+2258596096,2258596103,HK
+2258596104,2258596159,AU
+2258596160,2258596255,HK
+2258596256,2258596351,AU
+2258596352,2258596863,HK
+2258596864,2258596887,AU
+2258596888,2258596903,HK
+2258596904,2258596991,AU
+2258596992,2258597023,HK
+2258597024,2258597071,AU
+2258597072,2258597079,TW
+2258597080,2258597115,AU
+2258597116,2258597215,HK
+2258597216,2258597263,PG
+2258597264,2258597293,HK
+2258597294,2258597294,PG
+2258597295,2258597303,HK
+2258597304,2258597311,PG
+2258597312,2258597367,HK
+2258597368,2258597371,PG
+2258597372,2258597535,HK
+2258597536,2258597567,AU
+2258597568,2258597583,HK
+2258597584,2258597599,AU
+2258597600,2258597631,HK
+2258597632,2258597759,AU
+2258597760,2258597887,HK
+2258597888,2258597903,AU
+2258597904,2258597919,JP
+2258597920,2258597927,AU
+2258597928,2258597935,JP
+2258597936,2258598079,AU
2258598080,2258598087,TW
-2258598088,2258598639,AU
-2258598640,2258598655,TW
-2258598656,2258601471,AU
+2258598088,2258598095,AU
+2258598096,2258598111,TW
+2258598112,2258598143,JP
+2258598144,2258598495,AU
+2258598496,2258598511,NZ
+2258598512,2258598519,AU
+2258598520,2258598527,JP
+2258598528,2258598623,AU
+2258598624,2258598655,TW
+2258598656,2258599183,AU
+2258599184,2258599187,JP
+2258599188,2258599675,AU
+2258599676,2258599679,JP
+2258599680,2258600263,AU
+2258600264,2258600267,HK
+2258600268,2258600515,AU
+2258600516,2258600519,IN
+2258600520,2258600523,AU
+2258600524,2258600527,IN
+2258600528,2258600959,AU
+2258600960,2258601087,SG
+2258601088,2258601167,AU
+2258601168,2258601175,NZ
+2258601176,2258601215,AU
+2258601216,2258601343,TW
+2258601344,2258601471,AU
2258601472,2258601983,JP
-2258601984,2258602431,AU
-2258602432,2258602447,HK
-2258602448,2258602879,AU
-2258602880,2258603089,HK
+2258601984,2258602303,AU
+2258602304,2258602327,HK
+2258602328,2258602335,AU
+2258602336,2258602367,HK
+2258602368,2258602399,AU
+2258602400,2258602447,HK
+2258602448,2258602479,AU
+2258602480,2258602495,HK
+2258602496,2258602815,AU
+2258602816,2258602879,HK
+2258602880,2258603007,AU
+2258603008,2258603071,HK
+2258603072,2258603087,PG
+2258603088,2258603089,HK
2258603090,2258603090,PG
-2258603091,2258603263,HK
-2258603264,2258604799,AU
-2258604800,2258605055,AP
-2258605056,2258606079,AU
-2258606080,2258606335,HK
-2258606336,2258607871,AU
-2258607872,2258608639,HK
-2258608640,2258609663,AU
-2258609664,2258610175,HK
+2258603091,2258603103,HK
+2258603104,2258603135,PG
+2258603136,2258603139,HK
+2258603140,2258603199,PG
+2258603200,2258603207,HK
+2258603208,2258603263,PG
+2258603264,2258603775,AU
+2258603776,2258603839,HK
+2258603840,2258603903,AU
+2258603904,2258603943,HK
+2258603944,2258603951,AU
+2258603952,2258603967,HK
+2258603968,2258604031,AU
+2258604032,2258604287,HK
+2258604288,2258604671,AU
+2258604672,2258604735,SG
+2258604736,2258604799,AU
+2258604800,2258605055,HK
+2258605056,2258605311,AU
+2258605312,2258605439,SG
+2258605440,2258606143,AU
+2258606144,2258606147,HK
+2258606148,2258606151,AU
+2258606152,2258606191,HK
+2258606192,2258606199,AU
+2258606200,2258606367,HK
+2258606368,2258606415,AU
+2258606416,2258606423,HK
+2258606424,2258606463,AU
+2258606464,2258606471,HK
+2258606472,2258606487,AU
+2258606488,2258606535,HK
+2258606536,2258606963,AU
+2258606964,2258606967,NZ
+2258606968,2258607091,AU
+2258607092,2258607095,NZ
+2258607096,2258607351,AU
+2258607352,2258607359,NZ
+2258607360,2258607819,AU
+2258607820,2258607823,HK
+2258607824,2258607871,AU
+2258607872,2258607879,HK
+2258607880,2258607903,AU
+2258607904,2258607999,HK
+2258608000,2258608063,AU
+2258608064,2258608127,HK
+2258608128,2258608183,AU
+2258608184,2258608187,TW
+2258608188,2258608255,AU
+2258608256,2258608259,JP
+2258608260,2258608279,AU
+2258608280,2258608283,JP
+2258608284,2258608655,AU
+2258608656,2258608663,JP
+2258608664,2258608671,AU
+2258608672,2258608687,JP
+2258608688,2258610175,AU
2258610176,2258610431,IN
-2258610432,2258610687,AU
-2258610688,2258610943,HK
-2258610944,2258611071,JP
-2258611072,2258632703,HK
+2258610432,2258610703,AU
+2258610704,2258610719,TW
+2258610720,2258610751,AU
+2258610752,2258610755,TW
+2258610756,2258610759,AU
+2258610760,2258610783,TW
+2258610784,2258611071,AU
+2258611072,2258611103,JP
+2258611104,2258611119,AU
+2258611120,2258611167,JP
+2258611168,2258611215,AU
+2258611216,2258611223,NZ
+2258611224,2258614783,AU
+2258614784,2258614815,IN
+2258614816,2258615039,AU
+2258615040,2258615055,IN
+2258615056,2258616319,AU
+2258616320,2258632703,HK
2258632704,2258698239,JP
2258698240,2259222527,US
2259222528,2259288063,DE
2259288064,2259353599,US
2259353600,2259419135,DE
-2259419136,2259681279,US
+2259419136,2259615743,US
2259681280,2259746815,DE
2259746816,2259812351,US
2259812352,2259877887,AU
@@ -82167,26 +38696,30 @@
2260467712,2260533247,NL
2260533248,2260598783,US
2260598784,2260664319,CA
-2260664320,2260723711,GB
+2260664320,2260720895,GB
+2260720896,2260721151,DE
+2260721152,2260723711,GB
2260723712,2260723967,IL
2260723968,2260729343,GB
2260729344,2260729599,IL
2260729600,2260729855,GB
-2260729856,2260991999,US
+2260729856,2260926463,US
2260992000,2261057535,CN
2261057536,2261188607,US
2261188608,2261254143,CA
2261254144,2261385215,US
2261385216,2261450751,PR
2261450752,2261516287,NL
-2261516288,2261647359,US
+2261516288,2261569535,US
+2261569536,2261569791,TH
+2261569792,2261647359,US
2261647360,2261712895,FR
2261712896,2261778431,US
2261778432,2261843967,TW
2261843968,2261975039,US
2261975040,2262040575,AU
2262040576,2262106111,FR
-2262106112,2262171647,IE
+2262106112,2262171647,GB
2262171648,2262237183,FR
2262237184,2262499327,US
2262499328,2262630399,GB
@@ -82214,37 +38747,37 @@
2264905728,2264907775,ES
2264907776,2264924159,DE
2264924160,2264989695,CA
-2264989696,2265711615,US
-2265711616,2265776127,CA
+2264989696,2265605887,US
+2265605888,2265606143,GB
+2265606144,2265710847,US
+2265710848,2265776127,CA
2265776128,2266169343,US
2266169344,2266234879,CA
-2266234880,2266694655,US
+2266234880,2266431487,US
+2266431488,2266497023,CA
+2266497024,2266694655,US
2266694656,2266694911,SG
-2266694912,2276720639,US
+2266694912,2276786175,US
2276786176,2276851711,CA
2276851712,2277769215,US
2277769216,2277834751,GB
-2277834752,2280998911,US
-2280998912,2280999167,EU
-2280999168,2281007103,US
+2277834752,2281007103,US
2281007104,2281007359,IN
2281007360,2281023487,US
2281023488,2281023743,IN
-2281023744,2282226019,US
-2282226020,2282226020,AP
-2282226021,2282226175,US
+2281023744,2281029631,US
+2281029632,2281029887,FR
+2281029888,2281037823,US
+2281037824,2281038079,FR
+2281038080,2281701887,US
+2281701888,2281703423,CH
+2281703424,2282226175,US
2282226176,2282226243,AU
-2282226244,2282226245,AP
+2282226244,2282226245,US
2282226246,2282226431,AU
-2282226432,2282226943,US
-2282226944,2282227199,AP
-2282227200,2282234111,US
+2282226432,2282234111,US
2282234112,2282234367,GB
-2282234368,2282264063,US
-2282264064,2282264319,EU
-2282264320,2282264575,US
-2282264576,2282264831,EU
-2282264832,2291204095,US
+2282234368,2291204095,US
2291204096,2291269631,PR
2291269632,2291400703,US
2291400704,2291466239,GB
@@ -82264,10 +38797,13 @@
2292842496,2292908031,GB
2292908032,2292973567,US
2292973568,2293039103,DE
-2293039104,2293080063,EU
-2293080064,2293088255,BE
-2293088256,2293104639,EU
-2293104640,2293891071,US
+2293039104,2293080575,LU
+2293080576,2293080831,BE
+2293080832,2293085183,LU
+2293085184,2293085439,BE
+2293085440,2293104639,LU
+2293104640,2293825535,US
+2293825536,2293891071,IN
2293891072,2293956607,AU
2293956608,2294022143,JP
2294022144,2294677503,US
@@ -82288,11 +38824,7 @@
2297298944,2297364479,CH
2297364480,2297626623,US
2297626624,2297692159,DE
-2297692160,2298118655,US
-2298118656,2298118911,GB
-2298118912,2298395903,US
-2298395904,2298396159,GB
-2298396160,2299461631,US
+2297692160,2299461631,US
2299461632,2299527167,CA
2299527168,2299592703,US
2299592704,2299658239,NL
@@ -82307,20 +38839,17 @@
2301624320,2301755391,US
2301755392,2301820927,GB
2301820928,2302083071,US
-2302083072,2302190381,NL
-2302190382,2302190382,NL
-2302190383,2302214143,NL
+2302083072,2302214143,NL
2302214144,2302279679,US
2302279680,2302345215,SE
2302410752,2302541823,SE
2302541824,2302607359,CH
-2302672896,2302935039,US
+2302607360,2302640127,SC
+2302738432,2302935039,US
2302935040,2303000575,KR
2303000576,2303189557,US
2303189558,2303189558,IE
-2303189559,2303190527,US
-2303190528,2303190783,AP
-2303190784,2303262719,US
+2303189559,2303262719,US
2303262720,2303328255,GB
2303328256,2303393791,CA
2303393792,2303459327,US
@@ -82342,7 +38871,8 @@
2305622016,2305687551,AU
2305687552,2305753087,US
2305753088,2305818623,AU
-2305818624,2306342911,US
+2305818624,2306015231,US
+2306080768,2306342911,US
2306342912,2306408447,NL
2306408448,2306473983,FR
2306473984,2306539519,CA
@@ -82368,10 +38898,12 @@
2309160960,2309226495,FI
2309226496,2309357567,US
2309357568,2309423103,AU
-2309423104,2309750783,US
+2309423104,2309685247,US
2309750784,2309816319,AU
2309816320,2309881855,US
2309881856,2309947391,NL
+2309947392,2309980159,US
+2309980160,2310012927,CA
2310012928,2310668287,US
2310668288,2310733823,CA
2310733824,2310864895,US
@@ -82382,7 +38914,7 @@
2311127040,2311192575,DE
2311192576,2311258111,FR
2311258112,2311323647,GB
-2311323648,2311847935,US
+2311389184,2311847935,US
2311847936,2311913471,IT
2311913472,2311979007,GB
2311979008,2312044543,US
@@ -82415,9 +38947,7 @@
2315649024,2315714559,SE
2315714560,2315780095,AU
2315780096,2315911167,US
-2315911168,2315976703,CA
-2315976704,2315976959,US
-2315976960,2316042239,CA
+2315911168,2316042239,CA
2316042240,2316173311,US
2316173312,2316238847,SE
2316238848,2316500991,US
@@ -82438,9 +38968,7 @@
2317413376,2317413631,ID
2317413632,2317414655,US
2317414656,2317414911,AU
-2317414912,2317417983,US
-2317417984,2317418239,AP
-2317418240,2317484031,US
+2317414912,2317484031,US
2317484032,2317487359,CA
2317487360,2317487615,US
2317487616,2317549567,CA
@@ -82466,14 +38994,16 @@
2319974400,2320039935,US
2320039936,2320105471,CA
2320105472,2320171007,US
-2320171008,2320236543,NZ
+2320171008,2320203775,NZ
+2320203776,2320236543,SG
2320236544,2320302079,US
2320302080,2320367615,AU
2320367616,2320433151,US
2320433152,2320564223,AU
2320564224,2320629759,CH
2320629760,2320695295,CA
-2320695296,2321547263,US
+2320695296,2321416191,US
+2321481728,2321547263,US
2321547264,2321612799,FR
2321678336,2321743871,US
2321809408,2321874943,ES
@@ -82485,9 +39015,11 @@
2322202624,2322268159,SE
2322268160,2322333695,JP
2322333696,2322923519,US
-2323054592,2323185663,CA
+2323054592,2323120127,CA
2323316736,2323382271,US
-2323382272,2323447807,NO
+2323382272,2323406847,NO
+2323406848,2323407103,DK
+2323407104,2323447807,NO
2323447808,2323775487,US
2323775488,2323841023,AU
2323841024,2323906559,CH
@@ -82501,13 +39033,8 @@
2328035328,2328100863,FR
2328100864,2328231935,US
2328231936,2328297471,GB
-2328297472,2328313855,EU
-2328313856,2328317695,NL
-2328317696,2328317951,FR
-2328317952,2328342527,EU
-2328342528,2328342783,DE
-2328342784,2328362751,EU
-2328362752,2328494079,DE
+2328313856,2328317951,NL
+2328363008,2328494079,DE
2328494080,2328559615,US
2328559616,2328625151,BE
2328690688,2328756223,BE
@@ -82523,7 +39050,7 @@
2329477120,2329542655,AU
2329542656,2329608191,CA
2329673728,2329739263,US
-2329739264,2329804799,CH
+2329739264,2329804799,SE
2329804800,2329870335,DE
2329870336,2329935871,CH
2329935872,2330001407,DE
@@ -82532,15 +39059,14 @@
2330132480,2330198015,SE
2330198016,2330263551,CH
2330263552,2330267647,US
-2330329088,2330394623,US
+2330267648,2330271743,CA
+2330271744,2330394623,US
2330394624,2330460159,FR
2330460160,2330525695,AT
2330525696,2330591231,SE
2330591232,2330656767,US
2330656768,2330722303,NZ
-2330722304,2331049983,US
-2331049984,2331115519,GB
-2331115520,2331181055,US
+2330722304,2331181055,US
2331181056,2331246591,JP
2331246592,2331443199,DE
2331443200,2331508735,US
@@ -82550,10 +39076,12 @@
2331836416,2331901951,GB
2331901952,2331967487,US
2332033024,2332098559,ID
-2332098560,2332622847,DE
+2332098560,2332360703,DE
+2332426240,2332622847,DE
2332622848,2332688383,CN
2332688384,2332753919,NL
-2332753920,2333868031,DE
+2332753920,2333736959,DE
+2333802496,2333868031,DE
2333933568,2334064639,DE
2334064640,2334916607,US
2334916608,2334982143,AU
@@ -82587,23 +39115,17 @@
2337865728,2337931263,DE
2337931264,2337996799,BE
2337996800,2338062335,GR
-2338062336,2338075391,EU
-2338075392,2338075647,IL
-2338075648,2338084863,EU
-2338084864,2338085375,IL
-2338085376,2338085631,EU
-2338085632,2338086143,IL
-2338086144,2338087423,EU
-2338087424,2338087679,IL
-2338087680,2338108927,EU
-2338108928,2338109951,IL
-2338109952,2338115071,EU
+2338083840,2338084095,TR
+2338086912,2338087423,DE
+2338092288,2338092543,SE
+2338113536,2338113791,FR
2338115072,2338115839,IL
-2338115840,2338124799,EU
+2338120448,2338120703,DE
+2338123008,2338123263,AT
+2338123520,2338123775,IT
2338124800,2338125055,GB
-2338125056,2338126591,EU
-2338126592,2338127615,IL
-2338127616,2338127871,EU
+2338125056,2338125311,FR
+2338125312,2338125567,GB
2338127872,2338324479,US
2338324480,2338390015,SE
2338390016,2338455551,FI
@@ -82616,9 +39138,7 @@
2338848768,2338914303,US
2338914304,2339962879,NO
2339962880,2340028415,US
-2340028416,2340081663,NL
-2340081664,2340081919,BR
-2340081920,2340093951,NL
+2340028416,2340093951,SE
2340093952,2340159487,FI
2340159488,2340225023,FR
2340225024,2340421631,US
@@ -82680,9 +39200,7 @@
2344353792,2344419327,AU
2344419328,2344484863,CN
2344484864,2344550399,PK
-2344550400,2344566783,EU
-2344566784,2344574975,IT
-2344574976,2344615935,EU
+2344609024,2344609279,IT
2344615936,2344878079,ID
2344878080,2346188799,CN
2346188800,2346450943,AU
@@ -82708,9 +39226,8 @@
2354249728,2354315263,AU
2354315264,2354380799,DE
2354380800,2354446335,NL
-2354446336,2354511871,SE
-2354511872,2354577407,CA
-2354577408,2354839551,US
+2354446336,2354511871,FR
+2354511872,2354839551,US
2354839552,2354905087,TW
2354905088,2355036159,FR
2355036160,2355101695,US
@@ -82737,9 +39254,7 @@
2359689216,2359754751,SE
2359754752,2359820287,CA
2359820288,2359885823,AU
-2359885824,2360215807,US
-2360215808,2360216063,US
-2360216064,2360672255,US
+2359885824,2360672255,US
2360672256,2360737791,DE
2360737792,2360868863,US
2360868864,2360934399,CA
@@ -82751,7 +39266,7 @@
2361917440,2361982975,NZ
2361982976,2362114047,US
2362114048,2362179583,IE
-2362179584,2362245119,GB
+2362179584,2362245119,US
2362245120,2362441727,CN
2362441728,2362572799,US
2362572800,2362638335,CN
@@ -82761,22 +39276,18 @@
2363490304,2363555839,CN
2363555840,2363883519,US
2363883520,2363949055,CA
-2363949056,2364342271,US
+2363949056,2364211199,US
+2364276736,2364342271,US
2364342272,2364407807,CN
2364407808,2364538879,US
2364538880,2364604415,CN
2364604416,2364671487,US
-2364671488,2364671743,CN
+2364671488,2364671743,MO
2364671744,2364675839,US
2364675840,2364676095,CA
-2364676096,2364676863,US
-2364676864,2364676867,EU
+2364676096,2364676867,US
2364676868,2364677119,GB
-2364677120,2364681727,US
-2364681728,2364681983,EU
-2364681984,2364724735,US
-2364724736,2364724991,AP
-2364724992,2364725503,US
+2364677120,2364725503,US
2364725504,2364725759,IL
2364725760,2364727807,US
2364727808,2364728063,DE
@@ -82793,7 +39304,7 @@
2365587456,2365589503,JO
2365589504,2365590527,US
2365590528,2365591039,NO
-2365591040,2365591455,EU
+2365591040,2365591455,US
2365591456,2365591551,NO
2365591552,2365593599,DE
2365593600,2365595647,NL
@@ -82807,9 +39318,7 @@
2365638656,2365640703,FR
2365640704,2365644799,GB
2365644800,2365652991,NO
-2365652992,2365983487,DE
-2365983488,2365983519,EU
-2365983520,2366032895,DE
+2365652992,2366032895,DE
2366032896,2366033151,GB
2366033152,2366111743,DE
2366111744,2366144511,MT
@@ -82837,15 +39346,10 @@
2366171136,2366308351,DE
2366308352,2366368255,GB
2366368256,2366368511,FR
-2366368512,2366369791,GB
-2366369792,2366370815,FR
-2366370816,2366371071,GB
-2366371072,2366373887,FR
+2366368512,2366373887,GB
2366373888,2367487999,DE
2367488000,2367553535,SI
-2367553536,2370579746,DE
-2370579747,2370579747,DE
-2370579748,2370895871,DE
+2367553536,2370895871,DE
2370895872,2370961407,SE
2370961408,2371158015,DE
2371158016,2371223551,RO
@@ -82861,26 +39365,27 @@
2372206592,2372214783,UA
2372214784,2372218879,DE
2372218880,2372222975,FR
-2372222976,2372239359,EU
-2372239360,2372264447,RU
+2372224512,2372224767,GB
+2372227072,2372227583,NO
+2372230400,2372230655,AT
+2372231424,2372231679,HU
+2372231680,2372232191,GB
+2372238730,2372238730,US
+2372239360,2372240383,SK
+2372240384,2372240895,NL
+2372240896,2372241151,AE
+2372241152,2372241407,NL
+2372241408,2372264447,RU
2372264448,2372266495,UA
2372266496,2372272127,RU
2372272128,2372337663,US
2372337664,2372403199,ID
2372403200,2372468735,US
2372468736,2372472831,NL
-2372472832,2372474367,PL
-2372474368,2372474623,US
-2372474624,2372474879,GB
+2372472832,2372474879,PL
2372474880,2372483071,RU
2372483072,2372485119,JO
-2372485120,2372485185,RU
-2372485186,2372485246,NL
-2372485247,2372485247,RU
-2372485248,2372485375,IN
-2372485376,2372485849,RU
-2372485850,2372485887,NL
-2372485888,2372487167,RU
+2372485120,2372487167,RU
2372487168,2372489215,FR
2372489216,2372493311,LB
2372493312,2372497407,ES
@@ -82890,27 +39395,11 @@
2372505600,2372507647,NL
2372507648,2372509695,IT
2372509696,2372510207,AE
-2372510208,2372510719,ES
-2372510720,2372510975,A2
-2372510976,2372511231,GR
-2372511232,2372511743,A2
-2372511744,2372511744,SI
-2372511745,2372511998,BA
-2372511999,2372512000,SI
-2372512001,2372512254,BA
-2372512255,2372512256,SI
-2372512257,2372512510,BA
-2372512511,2372512512,SI
-2372512513,2372512766,BA
-2372512767,2372512768,SI
-2372512769,2372513022,BA
-2372513023,2372513024,SI
-2372513025,2372513278,BA
-2372513279,2372513280,SI
-2372513281,2372513534,BA
-2372513535,2372513536,SI
-2372513537,2372513790,BA
-2372513791,2372513791,SI
+2372510208,2372510335,AO
+2372510336,2372510336,ES
+2372510337,2372510463,AO
+2372510464,2372511743,AE
+2372511744,2372513791,SI
2372513792,2372534271,GB
2372534272,2372665343,US
2372665344,2372730879,IT
@@ -82932,10 +39421,14 @@
2373627904,2373648383,CH
2373648384,2373910527,US
2373910528,2373911041,FI
-2373911042,2373911042,EU
+2373911042,2373911042,US
2373911043,2373976063,FI
2373976064,2374107135,US
-2374107136,2374172671,DE
+2374107136,2374171135,DE
+2374171136,2374171206,CH
+2374171207,2374171207,DE
+2374171208,2374171391,CH
+2374171392,2374172671,DE
2374172672,2374238207,US
2374238208,2374303743,AU
2374303744,2374369279,US
@@ -82947,11 +39440,11 @@
2374512640,2374514687,SK
2374514688,2374516735,ES
2374516736,2374524927,AM
-2374524928,2374526719,DE
-2374526720,2374526975,FR
-2374526976,2374527231,DE
-2374527232,2374527743,FR
-2374527744,2374529023,DE
+2374524928,2374525717,FR
+2374525718,2374525718,BE
+2374525719,2374528261,FR
+2374528262,2374528262,PL
+2374528263,2374529023,FR
2374529024,2374531071,RU
2374531072,2374533119,NL
2374533120,2374565887,HR
@@ -82968,54 +39461,17 @@
2374674432,2374676479,NL
2374676480,2374680575,LB
2374680576,2374684671,NL
-2374684672,2374684839,GB
-2374684840,2374684847,NO
-2374684848,2374684863,FI
-2374684864,2374684879,DK
-2374684880,2374684991,GB
-2374684992,2374685119,FI
-2374685120,2374685135,DK
-2374685136,2374685167,GB
-2374685168,2374685175,NO
-2374685176,2374685239,GB
-2374685240,2374685247,DK
-2374685248,2374685375,NO
-2374685376,2374685423,GB
-2374685424,2374685431,FI
-2374685432,2374685487,GB
-2374685488,2374685503,FI
-2374685504,2374685631,DK
-2374685632,2374685647,NO
-2374685648,2374685743,GB
-2374685744,2374685759,FI
-2374685760,2374685855,NL
-2374685856,2374685871,DK
-2374685872,2374685887,NL
-2374685888,2374686007,GB
-2374686008,2374686015,FI
-2374686016,2374686111,PL
-2374686112,2374686127,DK
-2374686128,2374686143,PL
-2374686144,2374686271,GB
-2374686272,2374686303,NL
-2374686304,2374686367,GB
-2374686368,2374686399,FI
-2374686400,2374686415,DK
-2374686416,2374686639,GB
-2374686640,2374686655,DK
-2374686656,2374686671,FI
-2374686672,2374686719,GB
+2374684672,2374686719,GB
2374686720,2374688767,NL
2374688768,2374696959,GB
2374696960,2374959103,US
-2374959104,2375024639,SE
+2374959104,2375024639,BE
2375024640,2375090175,DK
2375090176,2375155711,NO
2375155712,2375221247,US
-2375221248,2375352319,SE
-2375352320,2376233215,US
-2376233216,2376233471,AU
-2376233472,2376269823,US
+2375221248,2375286783,SE
+2375286784,2375352319,CH
+2375352320,2376269823,US
2376269824,2376335359,GB
2376335360,2376597503,US
2376597504,2376663039,AU
@@ -83023,8 +39479,8 @@
2376728576,2376761343,GB
2376761344,2376777727,CZ
2376777728,2376781823,BA
-2376781824,2376783871,ES
-2376783872,2376785919,FR
+2376781824,2376782847,DZ
+2376782848,2376785919,FR
2376785920,2376794111,UA
2376794112,2376859647,CH
2376859648,2376925183,FI
@@ -83039,41 +39495,39 @@
2377842688,2377908223,GB
2377908224,2378025983,US
2378025984,2378026239,NL
-2378026240,2378026495,EU
+2378026240,2378026495,US
2378026496,2378027007,FR
2378027008,2378170367,US
2378170368,2378235903,FI
2378235904,2378301439,US
-2378301440,2378303231,FR
-2378303232,2378303487,EU
-2378303488,2378366975,FR
+2378301440,2378366975,FR
2378366976,2378432511,US
2378432512,2378498047,TR
2378498048,2378500607,US
2378500608,2378500863,GB
-2378500864,2378501631,US
-2378501632,2378501887,EU
-2378501888,2378694655,US
+2378500864,2378694655,US
2378694656,2378760191,DE
2378760192,2378825727,AT
2378825728,2378891263,US
2378891264,2378956799,AT
-2378956800,2379218943,US
+2378956800,2379131391,US
+2379131392,2379131647,IN
+2379131648,2379218943,US
2379218944,2379284479,FI
2379284480,2380201983,US
2380201984,2380267519,KR
2380267520,2380398591,US
2380398592,2380464127,IL
-2380464128,2380464896,FR
-2380464897,2380464897,US
-2380464898,2380465407,FR
-2380465408,2380465663,AP
-2380465664,2380529663,FR
+2380464128,2380464895,FR
+2380464896,2380465151,US
+2380465152,2380529663,FR
2380529664,2380558847,GB
2380558848,2380559103,ZA
-2380559104,2380593663,GB
-2380593664,2380593919,AP
-2380593920,2380595199,GB
+2380559104,2380578815,GB
+2380578816,2380579071,JP
+2380579072,2380579327,GB
+2380579328,2380579583,HK
+2380579584,2380595199,GB
2380660736,2380726271,US
2380726272,2380791807,GB
2380791808,2381119487,US
@@ -83093,85 +39547,7 @@
2382233600,2382299135,US
2382299136,2382331903,GR
2382331904,2382335999,FR
-2382336000,2382338559,NL
-2382338560,2382338575,BE
-2382338576,2382338623,NL
-2382338624,2382338639,CA
-2382338640,2382338687,NL
-2382338688,2382338703,CA
-2382338704,2382338751,NL
-2382338752,2382338767,CA
-2382338768,2382338815,NL
-2382338816,2382338831,BE
-2382338832,2382338879,NL
-2382338880,2382338895,LU
-2382338896,2382338943,NL
-2382338944,2382338959,BE
-2382338960,2382339007,NL
-2382339008,2382339023,CH
-2382339024,2382339087,NL
-2382339088,2382339103,IT
-2382339104,2382339119,NL
-2382339120,2382339135,PT
-2382339136,2382339151,FR
-2382339152,2382339167,ES
-2382339168,2382339183,DK
-2382339184,2382339199,CH
-2382339200,2382339215,NL
-2382339216,2382339231,DE
-2382339232,2382339247,PL
-2382339248,2382339263,AT
-2382339264,2382339279,FR
-2382339280,2382339295,CZ
-2382339296,2382339311,RO
-2382339312,2382339327,BG
-2382339328,2382339343,NL
-2382339344,2382339359,GB
-2382339360,2382339375,NL
-2382339376,2382339391,AU
-2382339392,2382339407,FR
-2382339408,2382339423,BE
-2382339424,2382339439,BR
-2382339440,2382339455,KY
-2382339456,2382339471,NL
-2382339472,2382339487,CA
-2382339488,2382339503,CY
-2382339504,2382339519,CO
-2382339520,2382339535,CH
-2382339536,2382339551,AE
-2382339552,2382339567,EE
-2382339568,2382339583,US
-2382339584,2382339599,NL
-2382339600,2382339615,FI
-2382339616,2382339631,NL
-2382339632,2382339647,FR
-2382339648,2382339663,ES
-2382339664,2382339679,GI
-2382339680,2382339695,GR
-2382339696,2382339711,HK
-2382339712,2382339727,NL
-2382339728,2382339743,HU
-2382339744,2382339759,IN
-2382339760,2382339775,IE
-2382339776,2382339791,BE
-2382339792,2382339807,IL
-2382339808,2382339823,NO
-2382339824,2382339839,LI
-2382339840,2382339855,NL
-2382339856,2382339871,LT
-2382339872,2382339887,NL
-2382339888,2382339903,LU
-2382339904,2382339919,CH
-2382339920,2382339935,MA
-2382339936,2382339951,MC
-2382339952,2382339983,NL
-2382339984,2382339999,NO
-2382340000,2382340015,NZ
-2382340016,2382340031,UA
-2382340032,2382340047,BE
-2382340048,2382340063,RU
-2382340064,2382340079,SG
-2382340080,2382340095,SE
+2382336000,2382340095,NL
2382340096,2382342143,CH
2382342144,2382344191,AT
2382344192,2382346239,NL
@@ -83181,163 +39557,38 @@
2382368768,2382372863,CA
2382372864,2382382847,US
2382382848,2382383103,LU
-2382383104,2382383231,AE
-2382383232,2382397439,US
-2382397440,2382397791,CN
-2382397792,2382397823,US
-2382397824,2382397863,CN
-2382397864,2382397871,US
-2382397872,2382398015,CN
-2382398016,2382398047,US
-2382398048,2382398207,CN
-2382398208,2382398215,US
-2382398216,2382398399,CN
-2382398400,2382398463,US
-2382398464,2382398479,CN
-2382398480,2382398487,US
-2382398488,2382398495,CN
-2382398496,2382398511,US
-2382398512,2382398751,CN
-2382398752,2382398759,US
-2382398760,2382398783,CN
-2382398784,2382398799,US
-2382398800,2382398895,CN
-2382398896,2382398903,US
-2382398904,2382398943,CN
-2382398944,2382398975,US
-2382398976,2382399071,CN
-2382399072,2382399087,US
-2382399088,2382399519,CN
-2382399520,2382399551,US
-2382399552,2382399695,CN
-2382399696,2382399711,US
-2382399712,2382399727,CN
-2382399728,2382399743,US
-2382399744,2382400127,CN
-2382400128,2382400135,US
-2382400136,2382400311,CN
-2382400312,2382400319,US
-2382400320,2382400351,CN
-2382400352,2382400367,US
-2382400368,2382400703,CN
-2382400704,2382400735,US
-2382400736,2382400927,CN
-2382400928,2382400943,US
-2382400944,2382400967,CN
-2382400968,2382400975,US
-2382400976,2382400983,CN
-2382400984,2382400991,US
-2382400992,2382401135,CN
-2382401136,2382401279,US
-2382401280,2382401535,CN
-2382401536,2382409727,CA
-2382409728,2382422015,US
+2382383104,2382383209,US
+2382383210,2382383210,AE
+2382383211,2382401535,US
+2382401536,2382405631,CA
+2382405632,2382422015,US
2382422016,2382426111,JM
2382426112,2382430207,US
2382430208,2382626815,CA
-2382626816,2382651391,US
-2382651392,2382651487,CN
-2382651488,2382651519,CA
-2382651520,2382651903,CN
-2382651904,2382651935,CA
-2382651936,2382652015,CN
-2382652016,2382652023,US
-2382652024,2382652063,CN
-2382652064,2382652095,US
-2382652096,2382652223,CN
-2382652224,2382652287,US
-2382652288,2382652343,CN
-2382652344,2382652351,US
-2382652352,2382652383,CN
-2382652384,2382652415,US
-2382652416,2382652583,CN
-2382652584,2382652591,US
-2382652592,2382652743,CN
-2382652744,2382652751,US
-2382652752,2382652767,CN
-2382652768,2382652783,US
-2382652784,2382652847,CN
-2382652848,2382652855,US
-2382652856,2382653007,CN
-2382653008,2382653023,US
-2382653024,2382653031,CN
-2382653032,2382653039,US
-2382653040,2382653143,CN
-2382653144,2382653151,US
-2382653152,2382653631,CN
-2382653632,2382653663,US
-2382653664,2382653711,CN
-2382653712,2382653727,US
-2382653728,2382653759,CN
-2382653760,2382653823,CA
-2382653824,2382654007,CN
-2382654008,2382654015,CA
-2382654016,2382654031,US
-2382654032,2382654039,CN
-2382654040,2382654071,US
-2382654072,2382654079,CN
-2382654080,2382654143,US
-2382654144,2382654607,CN
-2382654608,2382654615,US
-2382654616,2382654735,CN
-2382654736,2382654751,US
-2382654752,2382654847,CN
-2382654848,2382654855,US
-2382654856,2382654863,CA
-2382654864,2382654983,CN
-2382654984,2382654991,US
-2382654992,2382655359,CN
-2382655360,2382655423,CA
-2382655424,2382655455,US
-2382655456,2382655807,CN
-2382655808,2382655815,US
-2382655816,2382656031,CN
-2382656032,2382656063,CA
-2382656064,2382656167,CN
-2382656168,2382656175,US
-2382656176,2382656455,CN
-2382656456,2382656463,US
-2382656464,2382656487,CN
-2382656488,2382656511,US
-2382656512,2382656567,CN
-2382656568,2382656575,US
-2382656576,2382656687,CN
-2382656688,2382656695,US
-2382656696,2382656795,CN
-2382656796,2382656799,US
-2382656800,2382656831,CN
-2382656832,2382656847,US
-2382656848,2382656991,CN
-2382656992,2382657023,US
+2382626816,2382654207,US
+2382654208,2382654463,CN
+2382654464,2382657023,US
2382657024,2382657535,CN
-2382657536,2382657663,US
-2382657664,2382658559,CN
+2382657536,2382657791,US
+2382657792,2382658559,CN
2382658560,2382658815,CA
-2382658816,2382659199,CN
-2382659200,2382659247,US
-2382659248,2382659295,CN
-2382659296,2382659327,US
-2382659328,2382659375,CN
-2382659376,2382659455,US
-2382659456,2382659583,CN
-2382659584,2382678783,US
-2382678784,2382679039,CA
+2382658816,2382659071,CN
+2382659072,2382678527,US
+2382678528,2382679039,CA
2382679040,2382680063,US
2382680064,2382684159,CA
2382684160,2382692351,US
2382692352,2383085567,CA
2383085568,2383151103,US
2383151104,2385903615,CA
-2385903616,2385915903,US
+2385903616,2385905663,US
+2385907712,2385908223,US
+2385911808,2385915903,US
2385915904,2385919999,CA
-2385920000,2385945007,US
-2385945008,2385945015,MX
-2385945016,2385968127,US
-2385968128,2385968383,CA
-2385968384,2385969151,US
-2385969152,2386067455,CA
-2386067456,2386083839,US
-2386083840,2386624511,CA
+2385920000,2385952767,US
+2385954816,2385955327,US
+2385956864,2385969151,US
+2385969152,2386624511,CA
2386624512,2386690047,US
2386690048,2386988287,CA
2386988288,2386988543,CH
@@ -83347,16 +39598,16 @@
2387003392,2387003647,GB
2387003648,2387003903,CA
2387003904,2387004159,GB
-2387004160,2387345151,CA
+2387004160,2387344127,CA
+2387344128,2387344895,US
+2387344896,2387345151,CA
2387345152,2387345407,US
2387345408,2387410943,CA
2387410944,2387476479,US
2387476480,2387542015,CA
2387542016,2387607551,US
2387607552,2388328447,CA
-2388328448,2388340895,US
-2388340896,2388340903,CA
-2388340904,2388345343,US
+2388328448,2388345343,US
2388345344,2388345599,LK
2388345600,2388350207,US
2388350208,2388350463,LK
@@ -83371,20 +39622,28 @@
2390995456,2391015423,US
2391015424,2391277567,CA
2391277568,2391343103,US
-2391343104,2394947583,CA
+2391343104,2393044095,CA
+2393044096,2393044223,US
+2393044224,2394947583,CA
2394947584,2395013119,US
2395013120,2395209727,CA
2395209728,2395340799,US
-2395340800,2397700095,CA
+2395340800,2395804159,CA
+2395804160,2395804415,GB
+2395804416,2395814911,CA
+2395814912,2395815167,US
+2395815168,2395841279,CA
+2395841280,2395841535,GB
+2395841536,2395854079,CA
+2395854080,2395854335,US
+2395854336,2397700095,CA
2397700096,2397765631,US
2397765632,2398748671,CA
2398748672,2398945279,US
2398945280,2399010815,CA
2399010816,2399109119,US
2399109120,2399141887,PR
-2399141888,2401036287,US
-2401036288,2401036543,EU
-2401036544,2401828863,US
+2399141888,2401828863,US
2401828864,2401894399,GB
2401894400,2402222079,US
2402222080,2402287615,IE
@@ -83446,7 +39705,8 @@
2411462656,2411593727,AU
2411593728,2411986943,US
2411986944,2412052479,FR
-2412052480,2412576767,US
+2412052480,2412314623,US
+2412445696,2412576767,US
2412576768,2412642303,AT
2412642304,2412773375,US
2412838912,2412904447,US
@@ -83484,43 +39744,35 @@
2416377856,2416443391,CN
2416443392,2416705535,US
2416705536,2416771071,CN
-2416771072,2416963583,US
-2416963584,2416963839,EU
-2416963840,2416967679,US
+2416771072,2416967679,US
2416967680,2417033215,IN
2417033216,2417229823,US
2417229824,2417295359,ES
2417295360,2417360895,PT
2417360896,2417491967,CR
-2417491968,2417557503,GR
+2417491968,2417557503,GB
2417557504,2417688575,US
2417688576,2417754111,SE
2417754112,2418016255,US
2418016256,2418081791,GB
-2418081792,2418311167,US
-2418311168,2418313215,IN
-2418313216,2418315263,US
-2418315264,2418315775,IN
-2418315776,2418323007,US
+2418081792,2418312959,US
+2418312960,2418313215,IN
+2418313216,2418323007,US
2418323008,2418323008,PH
-2418323009,2418323455,US
-2418323456,2418331647,IN
-2418331648,2418332159,US
-2418332160,2418332415,IN
-2418332416,2418336767,US
-2418336768,2418337535,IN
-2418337536,2418337791,US
-2418337792,2418338047,IN
-2418338048,2418338303,US
+2418323009,2418337023,US
+2418337024,2418337279,IN
+2418337280,2418338303,US
2418338304,2418338815,IN
2418338816,2418341887,US
-2418341888,2418343935,IN
-2418343936,2418606079,US
+2418341888,2418342143,IN
+2418342144,2418606079,US
2418606080,2418671615,DE
2418671616,2418737151,US
2418737152,2418802687,NL
-2418802688,2418868223,EU
-2418868224,2419326975,US
+2418868224,2418998271,US
+2418998272,2418998527,GB
+2418998528,2419064831,US
+2419130368,2419326975,US
2419326976,2419392511,CN
2419392512,2419458047,AU
2419458048,2419523583,NL
@@ -83543,12 +39795,9 @@
2421555200,2421620735,US
2421620736,2421686271,GB
2421686272,2422145023,US
-2422145024,2422153215,NL
-2422153216,2422153471,EU
-2422153472,2422154239,NL
+2422145024,2422154239,NL
2422154240,2422155263,US
-2422155264,2422155519,AP
-2422155520,2422161407,NL
+2422155264,2422161407,NL
2422161408,2422163455,GB
2422163456,2422165503,US
2422165504,2422167551,HK
@@ -83574,25 +39823,21 @@
2425487360,2426667007,US
2426667008,2426732543,NO
2426732544,2426798079,FR
-2426798080,2427207679,US
+2426798080,2426929151,US
+2426994688,2427224063,US
+2427224064,2427256831,CA
2427256832,2427322367,GB
2427322368,2427453439,US
2427453440,2427536895,NO
2427536896,2427537151,US
-2427537152,2427544575,NO
-2427544576,2427544831,AP
-2427544832,2427584511,NO
+2427537152,2427584511,NO
2427584512,2427650047,GB
2427650048,2427846655,NO
2427846656,2428174335,US
2428174336,2428178431,GB
-2428178432,2428183562,US
-2428183563,2428183563,EU
-2428183564,2428567551,US
+2428178432,2428567551,US
2428567552,2428633087,NO
-2428633088,2428696831,CA
-2428696832,2428697087,EU
-2428697088,2428698623,CA
+2428633088,2428698623,CA
2428698624,2428960767,US
2428960768,2429026303,MY
2429026304,2429091839,CH
@@ -83607,54 +39852,48 @@
2429681664,2429878271,US
2429878272,2429943807,JP
2429943808,2430009343,HK
-2430009344,2432172031,US
+2430009344,2430205951,US
+2430271488,2432172031,US
2432172032,2432237567,BE
-2432237568,2432575487,US
-2432575488,2432576511,DE
-2432576512,2432577535,US
-2432577536,2432579583,GB
-2432579584,2432602879,US
-2432602880,2432603135,PL
-2432603136,2432604159,US
-2432604160,2432606207,GB
-2432606208,2432610303,US
-2432610304,2432614399,IT
-2432614400,2432616447,NL
-2432616448,2432616448,US
-2432616449,2432617472,NL
-2432617473,2432630783,US
+2432237568,2432568575,US
+2432568576,2432568831,BE
+2432568832,2432577535,US
+2432577536,2432577791,GB
+2432577792,2432587263,US
+2432587264,2432587519,IE
+2432587520,2432616447,US
+2432616448,2432617471,NL
+2432617472,2432630783,US
2432630784,2432696319,CN
2432696320,2433247231,NL
2433247232,2433247487,GB
2433247488,2433810431,NL
2433810432,2433875967,GB
-2433875968,2435115775,NL
-2435115776,2435116031,GB
-2435116032,2436300799,NL
+2433875968,2435055615,NL
+2435055616,2435121151,GB
+2435121152,2436300799,NL
2436300800,2436366335,GB
2436366336,2436759551,NL
2436759552,2436767743,GB
-2436767744,2436767874,EU
+2436767744,2436767874,NL
2436767875,2436767875,DE
-2436767876,2436767999,EU
+2436767876,2436767999,NL
2436768000,2436825087,GB
-2436825088,2441150463,NL
+2436825088,2436955647,NL
+2436955648,2436955903,DE
+2436955904,2441150463,NL
2441150464,2441215999,BE
2441216000,2446983167,NL
-2446983168,2447015935,EU
-2447015936,2447015939,DK
-2447015940,2447015943,SE
-2447015944,2447015947,GB
-2447015948,2447015951,HK
-2447015952,2447048703,EU
2447048704,2447376383,NL
-2447376384,2447441919,GB
-2447441920,2447507455,DE
+2447376384,2447384575,GB
+2447384576,2447384831,BE
+2447384832,2447441919,GB
+2447441920,2447446271,DE
+2447446272,2447446527,GB
+2447446528,2447507455,DE
2447507456,2447572991,FR
2447572992,2447638527,GB
-2447638528,2447679819,DE
-2447679820,2447679839,IT
-2447679840,2447704063,DE
+2447638528,2447704063,DE
2447704064,2447769599,GB
2447769600,2447835135,DE
2447835136,2447900671,FR
@@ -83662,9 +39901,9 @@
2447966208,2448031743,GB
2448031744,2448097279,CH
2448097280,2448162815,SE
-2448162816,2448174591,HU
-2448174592,2448174847,RO
-2448174848,2448228351,HU
+2448162816,2448183295,HU
+2448183296,2448183551,BG
+2448183552,2448228351,HU
2448228352,2448293887,PL
2448293888,2448359423,FR
2448359424,2448424959,GB
@@ -83674,7 +39913,9 @@
2448621568,2448687103,DE
2448687104,2448752639,AT
2448752640,2448818175,CH
-2448818176,2448883711,GB
+2448818176,2448850943,GB
+2448850944,2448851967,US
+2448851968,2448883711,GB
2448883712,2448949247,FI
2448949248,2449014783,FR
2449014784,2449080319,RU
@@ -83699,15 +39940,12 @@
2449473536,2449477631,DE
2449477632,2449479679,AL
2449479680,2449481727,FR
-2449481728,2449489919,RO
-2449489920,2449491967,FR
-2449491968,2449492223,NL
-2449492224,2449492273,RU
-2449492274,2449492341,NL
-2449492342,2449492351,RU
-2449492352,2449492805,NL
-2449492806,2449492814,IN
-2449492815,2449494015,NL
+2449481728,2449485823,DE
+2449485824,2449489919,RO
+2449489920,2449490943,FR
+2449490944,2449491199,DE
+2449491200,2449491967,FR
+2449491968,2449494015,NL
2449494016,2449496063,UA
2449496064,2449498111,FR
2449498112,2449506303,DE
@@ -83724,11 +39962,9 @@
2450849792,2450915327,SE
2450915328,2451026431,US
2451026432,2451026687,AU
-2451026688,2451031039,US
-2451031040,2451031295,AP
-2451031296,2451035135,US
-2451035136,2451035391,EU
-2451035392,2451986959,US
+2451026688,2451042815,US
+2451042816,2451043071,ZA
+2451043072,2451986959,US
2451986960,2451986960,GB
2451986961,2452619263,US
2452619264,2452684799,IT
@@ -83751,21 +39987,12 @@
2453805056,2453807103,FI
2453807104,2453815295,GB
2453815296,2453831679,RO
-2453831680,2453831807,IR
-2453831808,2453831871,IQ
-2453831872,2453832959,IR
-2453832960,2453833727,IQ
+2453831680,2453833727,IQ
2453833728,2453835775,ES
2453835776,2453837823,FR
-2453837824,2453838591,LU
-2453838592,2453838847,AT
-2453838848,2453839359,SE
-2453839360,2453839871,EU
2453839872,2453852159,RU
2453852160,2453856255,RO
-2453856256,2453856679,DE
-2453856680,2453856687,GB
-2453856688,2453858303,DE
+2453856256,2453858303,DE
2453858304,2453860351,SE
2453860352,2453864447,ES
2453864448,2453929983,CH
@@ -83782,25 +40009,31 @@
2454781952,2454847487,FI
2454847488,2454851583,US
2454851584,2454851839,DK
-2454851840,2454852095,US
-2454852096,2454852351,US
-2454852352,2454853119,US
+2454851840,2454853119,US
2454853120,2454853375,DK
-2454853376,2454870015,US
-2454870016,2454870527,CL
-2454870528,2454885503,US
+2454853376,2454885503,US
2454885504,2454885631,GB
2454885632,2454887423,US
2454887424,2454887679,DK
2454887680,2454904999,US
2454905000,2454905007,BR
-2454905008,2454906943,US
+2454905008,2454905919,US
+2454905920,2454905951,AR
+2454905952,2454906943,US
2454906944,2454906951,CL
-2454906952,2454913023,US
+2454906952,2454907265,US
+2454907266,2454907266,CL
+2454907267,2454907903,US
+2454907904,2454908159,VE
+2454908160,2454913023,US
2454913024,2454978559,CL
2454978560,2455175167,US
2455175168,2455240703,GB
-2455240704,2455371775,US
+2455240704,2455244799,US
+2455244800,2455245567,AU
+2455245568,2455245823,US
+2455245824,2455246847,AU
+2455246848,2455371775,US
2455371776,2455437311,GB
2455437312,2455830527,US
2455830528,2455896063,GB
@@ -83811,11 +40044,8 @@
2456223744,2456289279,BE
2456289280,2456354815,NL
2456354816,2456420351,GB
-2456420352,2456485887,EU
2456485888,2456551423,DE
-2456551424,2456603135,AT
-2456603136,2456603391,EU
-2456603392,2456616959,AT
+2456551424,2456616959,AT
2456616960,2456682495,CH
2456682496,2456748031,HU
2456748032,2456813567,US
@@ -83824,18 +40054,23 @@
2457075712,2457141247,AU
2457206784,2457272319,AU
2457272320,2457337855,FI
-2457337856,2457360639,RU
-2457360640,2457360895,UA
+2457337856,2457339903,RU
+2457339904,2457340927,BA
+2457340928,2457343999,RU
+2457344000,2457346047,UA
+2457346048,2457360383,RU
+2457360384,2457360895,CZ
2457360896,2457361151,RU
2457361152,2457361407,CZ
-2457361408,2457366527,RU
+2457361408,2457365503,RU
+2457365504,2457366527,CZ
2457366528,2457367551,GB
2457367552,2457372671,CZ
2457372672,2457376767,RU
2457376768,2457378815,DE
2457378816,2457393151,RU
-2457393152,2457398271,CZ
-2457398272,2457403391,RU
+2457393152,2457397247,CZ
+2457397248,2457403391,RU
2457403392,2457599999,US
2457600000,2457665535,GR
2457665536,2458058751,US
@@ -83848,9 +40083,8 @@
2458451968,2458648575,US
2458648576,2458714111,DE
2458714112,2458779647,ZA
-2458779648,2459191295,US
-2459191296,2459191551,CH
-2459191552,2459631615,US
+2458779648,2458910719,US
+2458976256,2459631615,US
2459631616,2459697151,CL
2459697152,2459828223,US
2459828224,2459860991,RU
@@ -83859,8 +40093,8 @@
2459959296,2460024831,US
2460024832,2460090367,FI
2460090368,2460152319,GB
-2460152320,2460152831,FR
-2460152832,2460155903,GB
+2460152320,2460152575,FR
+2460152576,2460155903,GB
2460155904,2460221439,US
2460221440,2460286975,BR
2460286976,2460549119,US
@@ -83879,29 +40113,21 @@
2461466624,2461597695,US
2461597696,2461599743,CH
2461599744,2461601791,SE
-2461601792,2461603762,GB
-2461603763,2461603763,GB
-2461603764,2461605887,GB
+2461601792,2461605887,GB
2461605888,2461607935,LB
2461607936,2461609983,FR
-2461609984,2461610495,BE
-2461610496,2461611519,NL
-2461611520,2461611575,BE
-2461611576,2461611583,NL
-2461611584,2461612031,BE
-2461612032,2461613271,IL
-2461613272,2461613279,PS
-2461613280,2461613567,IL
+2461609984,2461611007,BE
+2461611008,2461612031,NL
+2461612032,2461613567,IL
2461613568,2461613823,PS
2461613824,2461614079,IL
2461614080,2461630463,TR
-2461630464,2461659135,RU
-2461659136,2461659647,UA
-2461659648,2461659903,RU
-2461659904,2461659905,UA
-2461659906,2461659913,RU
-2461659914,2461660159,UA
-2461660160,2461663231,RU
+2461630464,2461646847,NL
+2461646848,2461659391,RU
+2461659392,2461659647,UA
+2461659648,2461662463,RU
+2461662464,2461662719,NL
+2461662720,2461663231,RU
2461663232,2461794303,US
2461794304,2461859839,GB
2461859840,2461990911,US
@@ -83910,7 +40136,9 @@
2462121984,2462187519,PT
2462187520,2462253055,GB
2462253056,2462326783,AU
-2462384128,2463236095,US
+2462384128,2462580735,US
+2462580736,2462646271,GB
+2462646272,2463236095,US
2463236096,2463301631,AT
2463301632,2463367167,FI
2463367168,2463432703,SI
@@ -83946,54 +40174,8 @@
2465681408,2465683455,SE
2465683456,2465685503,FR
2465685504,2465690367,DE
-2465690368,2465690431,US
-2465690432,2465690623,IT
-2465690624,2465690639,GB
-2465690640,2465690879,IT
-2465690880,2465690895,CH
-2465690896,2465691135,IT
-2465691136,2465691151,DE
-2465691152,2465691391,IT
-2465691392,2465691407,NL
-2465691408,2465691647,IT
-2465691648,2465691663,BR
-2465691664,2465691903,IT
-2465691904,2465691919,JP
-2465691920,2465692159,IT
-2465692160,2465692175,CN
-2465692176,2465692415,IT
-2465692416,2465692431,LT
-2465692432,2465692671,IT
-2465692672,2465692687,FR
-2465692688,2465692927,IT
-2465692928,2465692943,ID
-2465692944,2465693183,IT
-2465693184,2465693199,RU
-2465693200,2465693439,IT
-2465693440,2465693455,FR
-2465693456,2465693695,IT
-2465693696,2465719039,NO
-2465719040,2465719167,FR
-2465719168,2465719295,US
-2465719296,2465719423,FR
-2465719424,2465719551,US
-2465719552,2465719679,FR
-2465719680,2465719807,US
-2465719808,2465719935,FR
-2465719936,2465720063,US
-2465720064,2465720191,FR
-2465720192,2465720319,US
-2465720320,2465720351,NO
-2465720352,2465720383,DK
-2465720384,2465720607,NO
-2465720608,2465720639,DK
-2465720640,2465720863,NO
-2465720864,2465720895,DK
-2465720896,2465721119,NO
-2465721120,2465721151,DK
-2465721152,2465721375,NO
-2465721376,2465721407,DK
-2465721408,2465726463,NO
+2465690368,2465693695,IT
+2465693696,2465726463,NO
2465726464,2465791999,CH
2465792000,2465857535,FR
2465857536,2465923071,US
@@ -84021,9 +40203,15 @@
2466232320,2466234367,ES
2466234368,2466242559,RU
2466242560,2466250751,GE
-2466250752,2466323475,US
-2466323476,2466323477,IN
-2466323478,2466643967,US
+2466250752,2466318335,US
+2466318336,2466318591,SG
+2466318592,2466323455,US
+2466323456,2466323711,SG
+2466323712,2466326015,US
+2466326016,2466326271,SG
+2466326272,2466336767,US
+2466336768,2466337023,SG
+2466337024,2466643967,US
2466643968,2466709503,KR
2466709504,2466775039,HU
2466775040,2466840575,HK
@@ -84035,11 +40223,7 @@
2467233792,2468020223,US
2468020224,2468085759,GR
2468085760,2468151295,US
-2468151296,2468180479,DK
-2468180480,2468180735,EU
-2468180736,2468189663,DK
-2468189664,2468189695,GB
-2468189696,2468216831,DK
+2468151296,2468216831,DK
2468216832,2468282367,KZ
2468282368,2468347903,US
2468347904,2468478975,CZ
@@ -84055,9 +40239,7 @@
2469724160,2469789695,US
2469789696,2469855231,DE
2469855232,2470182911,US
-2470182912,2470183167,CH
-2470183168,2470183423,AP
-2470183424,2470248447,CH
+2470182912,2470248447,CH
2470248448,2470510591,US
2470510592,2470576127,BR
2470576128,2470641663,AU
@@ -84084,18 +40266,24 @@
2472673280,2472869887,FR
2472869888,2472935423,US
2472935424,2473000959,GR
-2473000960,2473344255,US
-2473344256,2473344511,GB
-2473344512,2473394175,US
+2473000960,2473332735,US
+2473332736,2473333247,AE
+2473333248,2473342975,US
+2473342976,2473345023,GB
+2473345024,2473345535,US
+2473345536,2473346047,AE
+2473346048,2473348095,US
+2473348096,2473348607,SA
+2473348608,2473379839,US
+2473379840,2473381887,AU
+2473381888,2473394175,US
2473394176,2473459711,AU
2473459712,2473525247,ZA
2473525248,2473656319,NO
2473656320,2473721855,US
2473721856,2473730559,GB
2473730560,2473731071,HK
-2473731072,2473785599,GB
-2473785600,2473785855,AP
-2473785856,2473787391,GB
+2473731072,2473787391,GB
2473787392,2474049535,US
2474049536,2474115071,GB
2474115072,2474246143,US
@@ -84130,11 +40318,10 @@
2477850624,2478047231,US
2478047232,2478112767,SE
2478112768,2478178303,NL
-2478178304,2478229759,US
-2478229760,2478230015,AP
-2478230016,2478309375,US
+2478178304,2478309375,US
2478309376,2478374911,GB
-2478374912,2478440447,US
+2478374912,2478404095,US
+2478407680,2478440447,US
2478440448,2478505983,SE
2478505984,2478571519,US
2478571520,2478702591,GB
@@ -84147,11 +40334,7 @@
2479226880,2479357951,US
2479357952,2479423487,AU
2479423488,2479489023,GB
-2479489024,2479584767,US
-2479584768,2479585023,US
-2479585024,2479586815,US
-2479586816,2479587071,US
-2479587072,2479620095,US
+2479489024,2479620095,US
2479620096,2479685631,DE
2479685632,2479947775,US
2479947776,2480013311,AU
@@ -84167,20 +40350,17 @@
2481455104,2481520639,SK
2481520640,2481848319,IL
2481848320,2482175999,US
-2482176000,2482193919,FI
-2482193920,2482194175,SG
-2482194176,2482208767,FI
+2482176000,2482208767,FI
2482208768,2482216959,US
2482216960,2482225151,FI
-2482225152,2482231295,SG
-2482231296,2482231551,CN
-2482231552,2482233343,SG
+2482225152,2482233343,SG
2482233344,2482241535,CN
2482241536,2482634751,US
2482634752,2482700287,FR
2482700288,2482765823,CZ
2482765824,2482831359,IE
2482831360,2483027967,US
+2483027968,2483093503,DO
2483093504,2483159039,US
2483159040,2483224575,SE
2483224576,2483290111,GB
@@ -84192,22 +40372,25 @@
2486697984,2486763519,AT
2486763520,2486960127,US
2486960128,2487025663,FR
-2487025664,2487877631,US
-2487877632,2487943167,A2
-2487943168,2488205311,US
+2487025664,2488205311,US
2488205312,2488270847,GB
2488270848,2488336383,US
2488336384,2488401919,PL
2488401920,2488532991,NO
2488532992,2488795135,US
2488795136,2488860671,GB
-2488860672,2489995544,US
-2489995545,2489995545,AP
-2489995546,2490007551,US
-2490007552,2490007807,GB
-2490007808,2490041599,US
-2490041600,2490041855,AP
-2490041856,2490043391,US
+2488860672,2489647103,US
+2489647104,2489712639,DO
+2489712640,2489745407,PE
+2489745408,2489778175,HT
+2489778176,2489843711,DO
+2489843712,2489995519,US
+2489995520,2489995544,SG
+2489995545,2489995545,US
+2489995546,2489995775,SG
+2489995776,2490013695,US
+2490013696,2490015743,GB
+2490015744,2490043391,US
2490043392,2490043647,GB
2490043648,2490236927,US
2490236928,2490302463,LU
@@ -84225,60 +40408,59 @@
2492465152,2492530687,US
2492530688,2492596223,AU
2492596224,2492727295,US
-2492727296,2492792831,NL
+2492727296,2492792831,SE
2492792832,2492923903,US
2492923904,2492989439,OM
2492989440,2493513727,US
2493513728,2493579263,SE
2493579264,2493644799,JP
-2493644800,2494103551,US
+2493644800,2493710335,US
+2493751296,2493755391,US
+2493755904,2493756415,US
+2493775872,2494103551,US
2494103552,2494169087,FR
2494169088,2494562303,US
2494562304,2494627839,GB
-2494627840,2494650367,US
-2494650368,2494652415,BR
-2494652416,2494660607,US
-2494660608,2494661119,EU
-2494661120,2494676991,US
-2494676992,2494681087,AU
-2494681088,2494683391,US
-2494683392,2494683647,AP
-2494683648,2494689791,US
+2494627840,2494650623,US
+2494650624,2494650879,BR
+2494650880,2494657535,US
+2494657536,2494657791,CO
+2494657792,2494677247,US
+2494677248,2494677503,AU
+2494677504,2494677759,US
+2494677760,2494678015,AU
+2494678016,2494683135,US
+2494683136,2494683391,SG
+2494683392,2494689791,US
2494689792,2494690047,IN
2494690048,2494889983,US
2494889984,2494955519,GB
2494955520,2495021055,AU
2495021056,2495152127,US
-2495152128,2495217663,EU
2495217664,2495283199,US
2495283200,2495348735,CH
-2495348736,2495348991,US
-2495348992,2495349051,DE
-2495349052,2495349052,EU
-2495349053,2495349247,DE
-2495349248,2495351039,US
-2495351040,2495351295,EU
-2495351296,2495353143,US
-2495353144,2495353144,EU
-2495353145,2495410943,US
+2495348736,2495410943,US
2495410944,2495411199,AU
-2495411200,2495412223,US
-2495412224,2495412479,AP
-2495412480,2495807487,US
+2495411200,2495807487,US
2495807488,2495873023,AU
2495873024,2495938559,CH
2495938560,2496004095,GB
2496004096,2496069631,AT
2496069632,2496135167,US
2496135168,2496200703,NL
-2496200704,2498475007,MX
+2496200704,2497682431,MX
+2497682432,2497683455,EC
+2497683456,2498475007,MX
2498475008,2498476031,EC
-2498476032,2499128575,MX
+2498476032,2499110519,MX
+2499110520,2499110527,NI
+2499110528,2499128575,MX
2499128576,2499128831,US
2499128832,2499477503,MX
2499477504,2499543039,DE
2499543040,2499674111,GB
2499674112,2499739647,US
+2499739648,2499805183,DO
2499805184,2499870719,TR
2499870720,2500001791,US
2500001792,2500034559,GE
@@ -84286,46 +40468,50 @@
2500038656,2500040703,IT
2500040704,2500042751,LB
2500042752,2500046847,SA
-2500046848,2500047359,IT
-2500047360,2500047615,DE
-2500047616,2500047871,GR
-2500047872,2500048895,IT
+2500046848,2500048895,IT
2500048896,2500050943,MD
2500050944,2500067327,KZ
-2500067328,2500141055,US
+2500067328,2500132991,US
+2500132992,2500133023,NL
+2500133024,2500141055,US
2500141056,2500141311,IE
2500141312,2500141471,US
2500141472,2500141503,IE
2500141504,2500141823,US
-2500141824,2500142847,IE
-2500142848,2500142975,US
-2500142976,2500144127,IE
+2500141824,2500144127,IE
2500144128,2500144895,US
2500144896,2500145151,IE
-2500145152,2500149247,US
-2500149248,2500149759,GB
-2500149760,2500150655,US
-2500150656,2500150719,GB
-2500150720,2500157439,US
-2500157440,2500165631,GB
-2500165632,2500175871,US
+2500145152,2500149503,US
+2500149504,2500149759,GB
+2500149760,2500150527,US
+2500150528,2500150783,GB
+2500150784,2500158463,US
+2500158464,2500158719,GB
+2500158720,2500161023,US
+2500161024,2500161535,GB
+2500161536,2500162175,US
+2500162176,2500162815,GB
+2500162816,2500166207,US
+2500166208,2500166223,GB
+2500166224,2500175871,US
2500175872,2500175879,RO
-2500175880,2500198911,US
+2500175880,2500188159,US
+2500188160,2500188415,CH
+2500188416,2500198911,US
2500198912,2500199167,GB
2500199168,2500199423,US
-2500199424,2500199935,IE
-2500199936,2500218879,US
-2500218880,2500220927,DE
-2500220928,2500225553,US
-2500225554,2500225561,ES
-2500225562,2500227071,US
-2500227072,2500229119,FR
-2500229120,2500231167,GB
-2500231168,2500231679,US
-2500231680,2500231935,ES
-2500231936,2500235775,US
-2500235776,2500236031,GB
-2500236032,2500236837,US
+2500199424,2500199679,IE
+2500199680,2500201535,US
+2500201536,2500201543,GB
+2500201544,2500219135,US
+2500219136,2500219391,DE
+2500219392,2500225551,US
+2500225552,2500225559,ES
+2500225560,2500228607,US
+2500228608,2500228863,FR
+2500228864,2500235775,US
+2500235776,2500236543,GB
+2500236544,2500236837,US
2500236838,2500236838,ES
2500236839,2500238047,US
2500238048,2500238055,FR
@@ -84335,40 +40521,69 @@
2500238384,2500238399,DE
2500238400,2500238463,US
2500238464,2500238527,DE
-2500238528,2500240383,US
-2500240384,2500240639,FR
-2500240640,2500240895,RE
-2500240896,2500241407,FR
-2500241408,2500245503,US
+2500238528,2500245503,US
2500245504,2500245759,GB
-2500245760,2500272127,US
-2500272128,2500280319,GB
-2500280320,2500288511,US
-2500288512,2500288767,FR
-2500288768,2500296703,DE
-2500296704,2500392959,US
+2500245760,2500246015,US
+2500246016,2500246527,GB
+2500246528,2500272127,US
+2500272128,2500272639,GB
+2500272640,2500274431,US
+2500274432,2500274687,GB
+2500274688,2500275199,US
+2500275200,2500275711,GB
+2500275712,2500276223,US
+2500276224,2500276735,GB
+2500276736,2500276991,US
+2500276992,2500277247,GB
+2500277248,2500289023,US
+2500289024,2500289279,FR
+2500289280,2500292607,US
+2500292608,2500292863,DE
+2500292864,2500293375,US
+2500293376,2500293631,DE
+2500293632,2500319231,US
+2500319232,2500319743,ES
+2500319744,2500392959,US
2500392960,2500393215,IN
2500393216,2500393983,US
2500393984,2500394239,GB
-2500394240,2500535295,US
+2500394240,2500532749,US
+2500532750,2500532750,GR
+2500532751,2500535295,US
2500535296,2500535551,IE
-2500535552,2500537343,US
-2500537344,2500537599,GB
-2500537600,2500555263,US
+2500535552,2500537687,US
+2500537688,2500537695,GB
+2500537696,2500551679,US
+2500551680,2500551935,FR
+2500551936,2500553759,US
+2500553760,2500553767,GB
+2500553768,2500555263,US
2500555264,2500555519,FR
-2500555520,2500616191,US
+2500555520,2500558847,US
+2500558848,2500559103,FR
+2500559104,2500591615,US
+2500591616,2500595711,GB
+2500595712,2500608511,US
+2500608512,2500608767,ES
+2500608768,2500609023,US
+2500609024,2500609535,ES
+2500609536,2500616191,US
2500616192,2500616703,IT
2500616704,2500636735,US
2500636736,2500636799,GB
-2500636800,2500644863,US
-2500644864,2500646911,FR
+2500636800,2500638719,US
+2500638720,2500639743,GB
+2500639744,2500644863,US
+2500644864,2500645119,FR
+2500645120,2500646911,US
2500646912,2500647935,ES
-2500647936,2500648959,FR
-2500648960,2500719615,US
-2500719616,2500720639,IE
-2500720640,2500723711,US
-2500723712,2500723967,ES
-2500723968,2501574655,US
+2500647936,2500687871,US
+2500687872,2500689919,FR
+2500689920,2500694271,US
+2500694272,2500694527,IT
+2500694528,2500719103,US
+2500719104,2500720639,IE
+2500720640,2501574655,US
2501574656,2501640191,KZ
2501640192,2503016447,US
2503016448,2503081983,IL
@@ -84383,17 +40598,26 @@
2503901184,2503905279,IT
2503905280,2503907327,CZ
2503907328,2503909375,FR
-2503909376,2503911343,RU
-2503911344,2503911359,NL
-2503911360,2503911423,RU
+2503909376,2503911423,RU
2503911424,2503915519,ES
2503915520,2503917567,IT
2503917568,2503933951,BG
-2503933952,2506293247,US
+2503933952,2504470527,US
+2504470528,2504470783,ES
+2504470784,2504474623,US
+2504474624,2504482815,HR
+2504482816,2504491007,US
+2504491008,2504499199,IT
+2504499200,2504916991,US
+2504916992,2504982527,IL
+2504982528,2506293247,US
2506293248,2506358783,CA
-2506358784,2507124735,US
+2506358784,2506360831,US
+2506360832,2506361087,ES
+2506361088,2507124735,US
2507124736,2507124991,IN
-2507124992,2508062719,US
+2507124992,2507145215,US
+2507210752,2508062719,US
2508062720,2508064767,CH
2508064768,2508066815,ES
2508066816,2508068863,RU
@@ -84402,10 +40626,8 @@
2508075008,2508077055,CH
2508077056,2508079103,BE
2508079104,2508081151,DE
-2508081152,2508081407,NL
-2508081408,2508081663,IL
-2508081664,2508081919,SG
-2508081920,2508083199,GB
+2508081152,2508082175,US
+2508082176,2508083199,GB
2508083200,2508085247,IS
2508085248,2508087295,PS
2508087296,2508089343,RU
@@ -84443,20 +40665,12 @@
2509928448,2509930495,FI
2509930496,2509934591,RU
2509934592,2509936639,DE
-2509936640,2509937681,AT
-2509937682,2509937682,SX
-2509937683,2509937683,CW
-2509937684,2509937684,SS
-2509937685,2509937713,AT
-2509937714,2509937729,LI
-2509937730,2509937919,AT
+2509936640,2509937919,AT
2509937920,2509938175,IT
2509938176,2509938431,US
-2509938432,2509938557,DE
-2509938558,2509938558,FR
-2509938559,2509938559,NL
-2509938560,2509938687,DE
-2509938688,2509946879,UA
+2509938432,2509938687,DE
+2509938688,2509942783,GB
+2509942784,2509946879,UA
2509946880,2509963263,BE
2509963264,2510028799,GB
2510028800,2510094335,PL
@@ -84477,16 +40691,18 @@
2512977920,2513502207,DE
2513502208,2513567743,NO
2513567744,2513600511,GR
-2513600512,2513633279,RO
+2513600512,2513633279,NL
2513633280,2513698815,DE
2513698816,2513764351,DK
2513764352,2514419711,DE
2514419712,2514485247,GB
-2514485248,2514681599,DE
-2514681600,2514681855,EU
-2514681856,2515599359,DE
+2514485248,2515205119,DE
+2515205120,2515206143,US
+2515206144,2515599359,DE
2515599360,2515664895,GB
-2515664896,2516058111,DE
+2515664896,2516037631,DE
+2516037632,2516038143,DK
+2516038144,2516058111,DE
2516123648,2516254719,DE
2516254720,2516320255,FR
2516320256,2516451327,US
@@ -84494,12 +40710,27 @@
2516516864,2516520959,RU
2516520960,2516523007,SA
2516523008,2516525055,RU
-2516525056,2516525727,US
+2516525056,2516525183,US
+2516525184,2516525247,NL
+2516525248,2516525391,US
+2516525392,2516525407,NL
+2516525408,2516525423,US
+2516525424,2516525431,NL
+2516525432,2516525439,US
+2516525440,2516525447,NL
+2516525448,2516525519,US
+2516525520,2516525551,NL
+2516525552,2516525727,US
2516525728,2516525823,NL
-2516525824,2516526335,US
+2516525824,2516526079,US
+2516526080,2516526143,NL
+2516526144,2516526335,US
2516526336,2516527103,NL
2516527104,2516529151,GB
-2516529152,2516531199,CH
+2516529152,2516529279,CH
+2516529280,2516529343,FR
+2516529344,2516529375,BE
+2516529376,2516531199,CH
2516531200,2516533247,GB
2516533248,2516541439,CZ
2516541440,2516545535,GB
@@ -84531,8 +40762,7 @@
2524512256,2524643327,CN
2524643328,2524963071,US
2524963072,2524963311,GB
-2524963312,2524963327,EU
-2524963328,2524971007,US
+2524963312,2524971007,US
2524971008,2525036543,ES
2525102080,2525233151,US
2525233152,2525298687,SE
@@ -84602,7 +40832,7 @@
2540961792,2541223935,US
2541223936,2541289471,CH
2541289472,2541682687,US
-2541682688,2541748223,CH
+2541682688,2541748223,PL
2541748224,2541813759,US
2541813760,2541879295,GB
2541879296,2541944831,AU
@@ -84615,11 +40845,12 @@
2543583232,2543648767,SE
2543648768,2543714303,NO
2543714304,2543779839,JP
-2543779840,2544500735,US
+2543779840,2544154840,US
+2544154841,2544154842,CA
+2544154843,2544500735,US
2544500736,2544566271,GB
2544566272,2544631807,US
2544697344,2544828415,US
-2544828416,2544893951,EU
2544893952,2544959487,GB
2544959488,2545025023,SE
2545025024,2545090559,AU
@@ -84634,33 +40865,30 @@
2545614848,2545680383,NO
2545680384,2545745919,US
2545745920,2545811455,DE
-2545811456,2546038783,US
-2546038784,2546039039,EU
-2546039040,2547187711,US
+2545811456,2547187711,US
2547187712,2547318783,GB
2547318784,2547515391,US
-2547523584,2547531775,IT
-2547548160,2547580927,RU
+2547531776,2547539967,UA
+2547542016,2547542271,ES
+2547553024,2547553279,RU
2548039680,2548563967,GB
2548563968,2548826111,IR
-2548826112,2548827630,AT
-2548827631,2548827632,BR
-2548827633,2548827634,AR
-2548827635,2548827636,VE
-2548827637,2548827638,MX
-2548827639,2548827639,CO
-2548827640,2548827640,PE
-2548827641,2548827641,CA
-2548827642,2548827642,ZA
-2548827643,2548827644,IN
-2548827645,2548827645,ID
-2548827646,2548827646,TH
-2548827647,2548829695,AT
+2548826112,2548829695,AT
2548829696,2548829951,NL
-2548829952,2548830207,AT
+2548829952,2548830207,DE
2548830208,2548830463,US
2548830464,2548830719,DE
-2548830720,2548834303,AT
+2548830720,2548830975,IT
+2548830976,2548831231,GB
+2548831232,2548831487,HK
+2548831488,2548831743,FR
+2548831744,2548831999,US
+2548832000,2548832255,ES
+2548832256,2548832511,IS
+2548832512,2548832767,PL
+2548832768,2548833279,CH
+2548833280,2548833791,NL
+2548833792,2548834303,AT
2548834304,2548842495,GB
2548842496,2548858879,RU
2548858880,2548867071,NL
@@ -84674,103 +40902,33 @@
2548928512,2548932607,KZ
2548932608,2548934655,NL
2548934656,2548936703,RU
-2548936704,2548936959,SE
-2548936960,2548937215,NL
-2548937216,2548937471,EE
-2548937472,2548937727,NO
-2548937728,2548937983,DK
-2548937984,2548938239,LU
-2548938240,2548938495,FR
-2548938496,2548940543,SE
-2548940544,2548940799,US
+2548936704,2548936959,US
+2548936960,2548940799,SE
2548940800,2548948991,ES
2548948992,2548951039,CZ
2548951040,2548953087,GB
2548953088,2548955135,RU
2548955136,2548957183,DE
2548957184,2549612543,IR
-2549612544,2549612863,SE
-2549612864,2549612879,DK
-2549612880,2549612927,SE
-2549612928,2549612943,NL
-2549612944,2549612959,DK
-2549612960,2549612975,DE
-2549612976,2549612991,DK
-2549612992,2549613007,ES
-2549613008,2549613023,SE
-2549613024,2549613039,FR
-2549613040,2549613055,FI
-2549613056,2549613071,DK
-2549613072,2549613183,SE
-2549613184,2549613199,DE
-2549613200,2549613215,NL
-2549613216,2549613247,SE
-2549613248,2549613279,TR
-2549613280,2549613295,SE
-2549613296,2549613303,FI
-2549613304,2549613439,SE
-2549613440,2549613455,NL
-2549613456,2549613471,SE
-2549613472,2549613503,DE
-2549613504,2549613519,SE
-2549613520,2549613535,FR
-2549613536,2549613551,DK
-2549613552,2549613663,SE
-2549613664,2549613679,NL
-2549613680,2549613751,SE
-2549613752,2549613759,ES
-2549613760,2549613767,SE
-2549613768,2549613775,FR
-2549613776,2549613791,SE
-2549613792,2549613807,DE
-2549613808,2549613823,TR
-2549613824,2549613839,SE
-2549613840,2549613855,DK
-2549613856,2549613919,SE
-2549613920,2549613935,NL
-2549613936,2549613975,SE
-2549613976,2549613983,ES
-2549613984,2549613999,FR
-2549614000,2549614047,SE
-2549614048,2549614063,DE
-2549614064,2549614111,SE
-2549614112,2549614127,DK
-2549614128,2549614223,SE
-2549614224,2549614239,DE
-2549614240,2549614255,ES
-2549614256,2549614271,SE
-2549614272,2549614287,FR
-2549614288,2549614319,SE
-2549614320,2549614335,NL
-2549614336,2549614415,SE
-2549614416,2549614431,DK
-2549614432,2549614447,SE
-2549614448,2549614463,NL
-2549614464,2549614495,SE
-2549614496,2549614511,DE
-2549614512,2549614527,SE
-2549614528,2549614543,TR
-2549614544,2549614559,SE
-2549614560,2549614575,ES
-2549614576,2549614591,FR
+2549612544,2549614591,SE
2549614592,2549616639,IT
2549616640,2549618687,BE
-2549618688,2549619455,A2
-2549619456,2549619711,US
-2549619712,2549620735,A2
+2549618688,2549620735,DE
2549620736,2549624831,PL
2549624832,2549626879,BE
2549626880,2549628927,PL
2549628928,2549637119,RO
2549637120,2549641215,KW
2549641216,2549645311,RU
-2549645312,2549678079,RO
+2549645312,2549678079,CH
2549678080,2549698559,GB
2549698560,2549700607,PL
-2549700608,2549701119,DE
-2549701120,2549701375,EU
+2549700608,2549701375,DE
2549701376,2549701631,SE
-2549701632,2549702655,EU
+2549701632,2549701887,PL
+2549701888,2549702143,FR
+2549702144,2549702399,GB
+2549702400,2549702655,FR
2549702656,2549704703,UA
2549704704,2549706751,CZ
2549706752,2549710847,NO
@@ -84780,106 +40938,28 @@
2549874688,2549876735,GB
2549876736,2549878783,NO
2549878784,2549880831,DE
-2549880832,2549880959,SE
-2549880960,2549880975,RS
-2549880976,2549880991,AU
-2549880992,2549881007,SE
-2549881008,2549881023,NO
-2549881024,2549881039,NL
-2549881040,2549881055,DK
-2549881056,2549881071,FI
-2549881072,2549881119,SE
-2549881120,2549881135,FI
-2549881136,2549881247,SE
-2549881248,2549881263,US
-2549881264,2549881279,LT
-2549881280,2549881295,NO
-2549881296,2549881311,DK
-2549881312,2549881327,FI
-2549881328,2549881343,NL
-2549881344,2549881503,SE
-2549881504,2549881535,US
-2549881536,2549881551,NO
-2549881552,2549881567,DK
-2549881568,2549881575,FI
-2549881576,2549881583,RU
-2549881584,2549881599,NL
-2549881600,2549881615,FI
-2549881616,2549881695,SE
-2549881696,2549881711,NL
-2549881712,2549881759,SE
-2549881760,2549881775,US
-2549881776,2549881791,SE
-2549881792,2549881807,NO
-2549881808,2549881823,DK
-2549881824,2549881839,FI
-2549881840,2549881855,ID
-2549881856,2549881887,SE
-2549881888,2549881903,US
-2549881904,2549881919,SE
-2549881920,2549881935,FI
-2549881936,2549882015,SE
-2549882016,2549882031,NL
-2549882032,2549882047,IN
-2549882048,2549882063,NO
-2549882064,2549882079,DK
-2549882080,2549882095,FI
-2549882096,2549882111,US
-2549882112,2549882207,SE
-2549882208,2549882223,NL
-2549882224,2549882271,SE
-2549882272,2549882287,US
-2549882288,2549882303,SE
-2549882304,2549882319,NO
-2549882320,2549882335,DK
-2549882336,2549882351,FI
-2549882352,2549882367,KR
-2549882368,2549882383,SE
-2549882384,2549882399,FI
-2549882400,2549882431,HU
-2549882432,2549882495,SE
-2549882496,2549882511,NL
-2549882512,2549882527,SE
-2549882528,2549882543,US
-2549882544,2549882559,SE
-2549882560,2549882575,NO
-2549882576,2549882591,DK
-2549882592,2549882607,FI
-2549882608,2549882623,HU
-2549882624,2549882703,SE
-2549882704,2549882719,FI
-2549882720,2549882735,SE
-2549882736,2549882751,NL
-2549882752,2549882783,PT
-2549882784,2549882815,SE
-2549882816,2549882831,NO
-2549882832,2549882847,DK
-2549882848,2549882863,FI
-2549882864,2549882879,US
+2549880832,2549882879,SE
2549882880,2549884927,CH
2549884928,2549891071,DE
2549891072,2549899263,RU
2549899264,2549901311,PS
2549901312,2549903359,RU
2549903360,2549905407,ES
-2549905408,2549907455,NL
+2549905408,2549907455,GB
2549907456,2549923839,DE
2549923840,2549927935,BG
2549927936,2549929983,HR
2549929984,2549932031,DE
2549932032,2549940223,HR
2549940224,2550136831,RO
-2550136832,2554211383,US
-2554211384,2554211387,AP
-2554211388,2554227967,US
-2554227968,2554228223,EU
-2554228224,2554462207,US
+2550136832,2550202367,DO
+2550202368,2553544703,US
+2553544704,2553610239,IN
+2553610240,2554462207,US
2554462208,2554527743,HU
2554527744,2554789887,US
2554789888,2554855423,GB
-2554855424,2554888703,US
-2554888704,2554888959,EU
-2554888960,2554920959,US
+2554855424,2554920959,US
2554920960,2554986495,DK
2554986496,2555052031,CL
2555052032,2555117567,US
@@ -84923,9 +41003,7 @@
2557673472,2557739007,DK
2557739008,2557870079,US
2557870080,2557935615,ID
-2557935616,2558658499,US
-2558658500,2558658500,PR
-2558658501,2558789571,US
+2557935616,2558789571,US
2558789572,2558789572,PR
2558789573,2558918655,US
2558918656,2558984191,GB
@@ -84940,15 +41018,28 @@
2559967232,2560032767,GB
2560032768,2560098303,US
2560098304,2560163839,BE
-2560163840,2560229375,NZ
-2560229376,2560628479,US
+2560229376,2560360447,US
+2560360448,2560425983,UY
+2560425984,2560628479,US
2560628480,2560628735,CA
2560628736,2560644607,US
2560644608,2560644863,CA
2560644864,2561015807,US
-2561671168,2564947967,US
+2561015808,2561146879,DO
+2561146880,2561409023,AR
+2561409024,2561671167,CL
+2561671168,2563244031,US
+2563244032,2563768319,CO
+2563768320,2564947967,US
2564947968,2565013503,SG
2565013504,2565210111,US
+2565210112,2565275647,CL
+2565275648,2565279743,HN
+2565279744,2565281791,AR
+2565281792,2565283839,CO
+2565283840,2565287935,NI
+2565287936,2565292031,AR
+2565341184,2566914047,BR
2566914048,2566979583,CN
2566979584,2567045119,FI
2567045120,2567110655,US
@@ -84969,13 +41060,14 @@
2569666560,2569797631,US
2569797632,2569863167,NO
2569863168,2569994239,CH
-2569994240,2569994495,EU
-2569994496,2570125311,US
+2569994240,2570125311,US
2570125312,2570190847,BE
2570190848,2572681215,US
2572681216,2572746751,SE
2572746752,2572943359,US
-2572943360,2573402111,DE
+2572943360,2573353983,DE
+2573353984,2573354239,BE
+2573354240,2573402111,DE
2573402112,2573467647,CN
2573467648,2573533183,DE
2573533184,2573598719,CN
@@ -84984,13 +41076,24 @@
2573991936,2574123007,CH
2574123008,2574188543,NO
2574188544,2574254079,NZ
-2574254080,2574315007,SE
-2574315008,2574315263,NO
-2574315264,2574319615,SE
+2574254080,2574286847,SE
+2574286848,2574287103,AU
+2574287104,2574319615,SE
2574319616,2574647295,US
2574647296,2574778367,CN
2574778368,2583691263,JP
-2583691264,2584018943,US
+2583691264,2583695359,ZA
+2583695360,2583697407,BW
+2583697408,2583699455,CI
+2583699456,2583707647,GA
+2583707648,2583724031,AO
+2583724032,2583728127,UG
+2583728128,2583730175,NG
+2583730176,2583732223,TZ
+2583732224,2583736319,ZA
+2583736320,2583740415,GA
+2583740416,2583756799,NA
+2583756800,2584018943,US
2584018944,2584084479,CA
2584084480,2584215551,US
2584215552,2584281087,GB
@@ -85004,29 +41107,209 @@
2585067520,2585788415,US
2585788416,2585853951,GB
2585853952,2585985023,JP
-2585985024,2586607615,US
-2586607616,2586610687,GB
-2586610688,2586611199,ES
-2586611200,2586615807,GB
-2586615808,2586619903,US
+2585985024,2586480639,US
+2586480640,2586484735,IL
+2586484736,2586510335,US
+2586510336,2586511359,ES
+2586511360,2586566655,US
+2586566656,2586566687,FR
+2586566688,2586610175,US
+2586610176,2586610431,ES
+2586610432,2586611711,US
+2586611712,2586611967,GB
+2586611968,2586619903,US
2586619904,2586620415,FR
2586620416,2586622463,US
2586622464,2586622975,ES
-2586622976,2586716159,US
-2586716160,2586717183,ES
-2586717184,2586804991,US
-2586804992,2586805247,ES
-2586805248,2586828799,US
-2586828800,2586828863,CH
-2586828864,2587017727,US
-2587017728,2587017983,IE
-2587017984,2587018239,US
+2586622976,2586733567,US
+2586733568,2586733823,LT
+2586733824,2586804223,US
+2586804224,2586804479,ES
+2586804480,2586828799,US
+2586828800,2586829055,CH
+2586829056,2586870783,US
+2586870784,2586874879,ES
+2586874880,2586875135,US
+2586875136,2586875903,ES
+2586875904,2586876927,US
+2586876928,2586877951,ES
+2586877952,2586952191,US
+2586952192,2586952447,FR
+2586952448,2587017215,US
+2587017216,2587017471,IE
+2587017472,2587018239,US
2587018240,2587018495,IE
-2587018496,2587066879,US
+2587018496,2587021823,US
+2587021824,2587022335,IE
+2587022336,2587066879,US
2587066880,2587067135,GB
2587067136,2587067647,US
2587067648,2587067903,GB
-2587067904,2587951103,US
+2587067904,2587068415,US
+2587068416,2587068479,GB
+2587068480,2587071759,US
+2587071760,2587071775,GB
+2587071776,2587131903,US
+2587131904,2587132159,FR
+2587132160,2587197439,US
+2587197440,2587197695,ES
+2587197696,2587240389,US
+2587240390,2587240390,FR
+2587240391,2587249417,US
+2587249418,2587249418,FR
+2587249419,2587394047,US
+2587394048,2587394559,ES
+2587394560,2587398143,US
+2587398144,2587399167,ES
+2587399168,2587443199,US
+2587443200,2587447295,CH
+2587447296,2587476760,US
+2587476761,2587476761,LB
+2587476762,2587492351,US
+2587492352,2587493375,ES
+2587493376,2587508735,US
+2587508736,2587525119,GB
+2587525120,2587926527,US
+2587926528,2587930623,BG
+2587930624,2587951103,US
+2587951104,2587952127,ZA
+2587952128,2587953151,NG
+2587953152,2587954175,MU
+2587954176,2587955199,ZA
+2587955200,2587959295,KE
+2587959296,2587961343,SN
+2587961344,2587962367,ZA
+2587962368,2587963391,SS
+2587963392,2587964415,SD
+2587964416,2587965439,ZA
+2587965440,2587966463,KE
+2587966464,2587967487,BF
+2587967488,2587975679,ZA
+2587975680,2587983871,GH
+2587983872,2588016639,AO
+2588016640,2588033023,NG
+2588033024,2588037119,ZA
+2588037120,2588038143,AO
+2588038144,2588039167,GN
+2588039168,2588041215,ZA
+2588041216,2588042239,DZ
+2588042240,2588043263,SD
+2588043264,2588044287,AO
+2588044288,2588045311,LS
+2588046336,2588047359,TD
+2588047360,2588049407,MW
+2588049408,2588053503,BJ
+2588053504,2588057599,ZA
+2588057600,2588061695,BF
+2588061696,2588070911,ZA
+2588070912,2588071935,TZ
+2588071936,2588072959,UG
+2588072960,2588073983,NE
+2588073984,2588075007,TZ
+2588075008,2588076031,MU
+2588076032,2588078079,GA
+2588078080,2588080127,MU
+2588080128,2588082175,ZA
+2588082176,2588147711,RE
+2588147712,2588164095,CI
+2588164096,2588180479,RW
+2588196864,2588213247,NG
+2588213248,2588278783,ZA
+2588278784,2588295167,KE
+2588295168,2588299263,GH
+2588303360,2588311551,CM
+2588311552,2588315647,ZA
+2588315648,2588317695,BW
+2588317696,2588318207,MU
+2588318208,2588318719,ZA
+2588318720,2588319743,UG
+2588319744,2588327935,SC
+2588327936,2588328959,ML
+2588328960,2588329983,BI
+2588329984,2588332031,MA
+2588332032,2588344319,ZA
+2588344320,2588409855,MU
+2588409856,2588410879,KE
+2588410880,2588412927,ZA
+2588412928,2588413951,ST
+2588413952,2588414975,UG
+2588414976,2588415999,TZ
+2588416000,2588417023,SO
+2588417024,2588418047,KE
+2588418048,2588420095,NG
+2588420096,2588422143,ZA
+2588422144,2588423167,SO
+2588423168,2588424191,CD
+2588424192,2588426239,ZA
+2588426240,2588434431,TZ
+2588434432,2588438527,ZA
+2588438528,2588442623,BJ
+2588442624,2588459007,CM
+2588459008,2588467199,UG
+2588467200,2588471295,TN
+2588471296,2588476415,ZA
+2588477440,2588478463,NG
+2588478464,2588479487,UG
+2588479488,2588480511,ZA
+2588480512,2588481535,CD
+2588482560,2588483583,LY
+2588484608,2588485631,BW
+2588485632,2588486655,BI
+2588487680,2588487711,SC
+2588487712,2588487743,FR
+2588487744,2588487807,BF
+2588487808,2588487839,NE
+2588487840,2588487871,SC
+2588487872,2588487935,MW
+2588487936,2588488703,SC
+2588488704,2588489727,LY
+2588490752,2588491775,GW
+2588493824,2588494847,ZA
+2588495872,2588496895,ZW
+2588500992,2588502015,CI
+2588503040,2588504063,LY
+2588504064,2588505087,TD
+2588505088,2588506111,CG
+2588506112,2588507135,ZA
+2588507136,2588508159,SO
+2588508160,2588510207,LY
+2588526592,2588528639,CM
+2588528640,2588530687,ZA
+2588532736,2588534783,ZA
+2588536832,2588538879,ZA
+2588672000,2588934143,KE
+2588934144,2589982719,SC
+2589982720,2590507007,SD
+2591547392,2591555583,ZA
+2591571968,2591588351,NG
+2591588352,2591604735,MG
+2591604736,2591612927,MU
+2591612928,2591621119,ZW
+2591621120,2591686655,DZ
+2591686656,2591817727,KE
+2591948800,2591981567,MG
+2591981568,2591997951,CM
+2591997952,2592006143,ZA
+2592006144,2592022527,TZ
+2592026624,2592026879,US
+2592026880,2592027391,MU
+2592027392,2592027647,GB
+2592027648,2592028159,MU
+2592028160,2592028415,CA
+2592028416,2592028671,MU
+2592028672,2592028799,NG
+2592028800,2592028927,KE
+2592028928,2592029183,MU
+2592029184,2592029311,CI
+2592029312,2592029695,MU
+2592029696,2592030207,ZA
+2592030208,2592030335,GH
+2592030336,2592030463,CM
+2592030464,2592030591,UG
+2592030592,2592030719,MU
+2592034816,2592038911,NE
+2592043008,2592047103,ZA
+2592047104,2592079871,AO
2600534016,2600665087,US
2600665088,2600730623,CA
2600730624,2600796159,NO
@@ -85046,14 +41329,12 @@
2604007424,2604072959,ES
2604072960,2604138495,NO
2604138496,2604204031,DE
-2604204032,2604243711,US
-2604243712,2604243967,AP
-2604243968,2604244991,US
-2604244992,2604245247,EU
-2604245248,2604335103,US
+2604204032,2604335103,US
2604335104,2604400639,NZ
2604400640,2604466175,AU
-2604466176,2604793855,US
+2604466176,2604648447,US
+2604648448,2604648959,NZ
+2604648960,2604793855,US
2604793856,2604859391,CH
2604859392,2604990463,US
2604990464,2605055999,SG
@@ -85062,31 +41343,23 @@
2605187072,2605252607,US
2605252608,2605318143,AT
2605318144,2606301183,US
-2606366720,2606448649,US
-2606448650,2606448651,EU
-2606448652,2606467071,US
-2606467072,2606467327,AP
-2606467328,2606563327,US
-2606628864,2606646783,US
-2606646784,2606647039,EU
-2606647040,2606648831,US
+2606366720,2606563327,US
+2606628864,2606645247,US
+2606646784,2606647039,US
2606648832,2606649087,IE
-2606649088,2607349759,US
+2606694400,2607349759,US
2607349760,2607415295,CH
-2607415296,2608728063,US
-2608728064,2608728319,AP
-2608728320,2609053695,US
+2607415296,2609053695,US
2609053696,2609119231,GB
2609119232,2609184767,FR
-2609184768,2609250303,DE
+2609184768,2609250303,PL
2609250304,2609381375,US
-2609381376,2609446911,GB
+2609381376,2609428479,GB
+2609428480,2609428735,IN
+2609428736,2609446911,GB
2609446912,2609512447,DK
2609512448,2609643519,US
-2609643520,2609677815,GB
-2609677816,2609677817,EU
-2609677818,2609708799,GB
-2609708800,2609709055,AP
+2609643520,2609709055,GB
2609709056,2609840127,US
2609840128,2609971199,AU
2609971200,2610036735,GB
@@ -85116,13 +41389,13 @@
2613903360,2613968895,AU
2613968896,2614034431,US
2614034432,2614099967,GR
-2614099968,2614164991,US
-2614164992,2614165247,EU
-2614165248,2614165503,US
+2614099968,2614165503,US
2614165504,2614231039,NO
2614231040,2614296575,ES
2614296576,2614362111,BR
-2614362112,2615083007,US
+2614362112,2614386431,US
+2614386432,2614386559,PR
+2614386560,2615083007,US
2615083008,2615148543,TR
2615148544,2615345151,US
2615345152,2615410687,NO
@@ -85133,26 +41406,24 @@
2615672832,2616262655,ZA
2616262656,2616524799,US
2616524800,2616590335,GB
-2616590336,2616770303,US
-2616770304,2616770559,EU
-2616770560,2616786943,US
+2616590336,2616786943,US
2616786944,2616852479,GB
-2616852480,2616885247,DE
-2616885248,2616885503,FR
-2616885504,2616885527,DE
-2616885528,2616885529,EU
-2616885530,2616918015,DE
+2616852480,2616917759,DE
+2616917760,2616918015,FR
2616983552,2617049087,US
2617049088,2617114623,IT
-2617114624,2617180159,US
-2617245696,2617769983,US
+2617114880,2617115135,US
+2617118720,2617131007,US
+2617147392,2617148159,US
+2617151488,2617155583,CA
+2617311232,2617769983,US
2617769984,2617835519,ZA
2617835520,2617901055,US
2617901056,2617966591,FI
2617966592,2618032127,CA
2618032128,2618097663,US
2618097664,2618163199,NZ
-2618163200,2618228735,IT
+2618163200,2618228735,SI
2618228736,2618294271,US
2618359808,2618425343,PL
2618425344,2618490879,FR
@@ -85167,15 +41438,11 @@
2619342848,2619473919,US
2619473920,2619539455,CA
2619539456,2619604991,ES
-2619604992,2619735295,US
-2619735296,2619735551,EU
-2619735552,2619736063,US
+2619604992,2619736063,US
2619801600,2620063743,US
2620063744,2620129279,GB
2620129280,2620194815,CA
-2620194816,2620315039,US
-2620315040,2620315063,DE
-2620315064,2620391423,US
+2620194816,2620391423,US
2620391424,2620456959,GB
2620456960,2620522495,SE
2620522496,2620588031,AU
@@ -85194,19 +41461,15 @@
2621636608,2621702143,DE
2621702144,2621767679,US
2621767680,2621833215,NZ
-2621833216,2622685183,US
+2621833216,2621936895,US
+2621936896,2621937151,SG
+2621937152,2622685183,US
2622685184,2622750719,NL
2622750720,2623602687,US
2623602688,2623668223,CL
2623668224,2624192511,US
2624192512,2624258047,CH
-2624258048,2624266495,US
-2624266496,2624266751,AP
-2624266752,2624391696,US
-2624391697,2624391697,EU
-2624391698,2624393727,US
-2624393728,2624393983,EU
-2624393984,2624716799,US
+2624258048,2624716799,US
2624716800,2624782335,NL
2624782336,2624847871,CH
2624847872,2624913407,NO
@@ -85218,10 +41481,10 @@
2626093056,2626158591,CH
2626158592,2626879487,US
2626879488,2626945023,KR
-2626945024,2627010559,IT
+2626945024,2627010559,SI
2627010560,2627076095,NZ
2627076096,2627141631,NL
-2627141632,2627469311,US
+2627141632,2627403775,US
2634022912,2634088447,CN
2634088448,2635202559,JP
2635202560,2635268095,CN
@@ -85254,7 +41517,8 @@
2640445440,2640510975,US
2640510976,2640576511,FR
2640576512,2640642047,EC
-2640642048,2641952767,JP
+2640642048,2641821695,JP
+2641887232,2641952767,JP
2641952768,2642018303,US
2642018304,2642083839,CN
2642083840,2642149375,US
@@ -85323,9 +41587,7 @@
2647916544,2648899583,US
2648899584,2648965119,IN
2648965120,2649030655,GB
-2649030656,2649413631,US
-2649413632,2649413887,AP
-2649413888,2649489407,US
+2649030656,2649489407,US
2649489408,2649554943,GB
2649554944,2649620479,NO
2649620480,2649948159,US
@@ -85335,13 +41597,13 @@
2650210304,2650275839,AT
2650275840,2650341375,US
2650341376,2650406911,NO
-2650406912,2650603519,US
+2650406912,2650423295,US
+2650423296,2650472447,JP
+2650472448,2650603519,US
2650603520,2650669055,CO
2650669056,2650734591,US
2650734592,2650800127,CN
-2650800128,2653089791,US
-2653089792,2653090047,AP
-2653090048,2653159423,US
+2650800128,2653159423,US
2653159424,2653421567,NO
2653421568,2653487103,AU
2653487104,2653552639,GB
@@ -85369,17 +41631,12 @@
2654642176,2654644223,GB
2654644224,2654646271,IT
2654646272,2654648319,FR
-2654648320,2654648655,IR
-2654648656,2654648656,SE
-2654648657,2654648665,IR
-2654648666,2654648666,SE
-2654648667,2654650367,IR
+2654648320,2654650367,IR
2654650368,2654666751,BG
2654666752,2654994431,US
2654994432,2655059967,LU
2655059968,2655125503,US
2655125504,2655191039,PL
-2655191040,2655256575,EU
2655256576,2655715327,US
2655715328,2655780863,PL
2655780864,2656632831,US
@@ -85405,9 +41662,7 @@
2658009088,2658074623,IT
2658074624,2658140159,US
2658140160,2658205695,NO
-2658205696,2658459648,US
-2658459649,2658459649,EU
-2658459650,2658598911,US
+2658205696,2658598911,US
2658598912,2658664447,GB
2658664448,2658926591,US
2658926592,2659057663,GB
@@ -85437,11 +41692,13 @@
2661416960,2661482495,PT
2661482496,2661548031,CA
2661548032,2661679103,US
-2661679104,2661878015,LU
-2661878016,2661878271,BE
-2661878272,2661909247,LU
+2661679104,2661885951,LU
+2661885952,2661886207,BE
+2661886208,2661909247,LU
2661909248,2661909503,BE
-2661909504,2661941247,LU
+2661909504,2661914111,LU
+2661914112,2661914367,BE
+2661914368,2661941247,LU
2661941248,2662006783,CL
2662006784,2662072319,US
2662072320,2662137855,ES
@@ -85466,7 +41723,9 @@
2665086976,2665152511,GB
2665152512,2665218047,US
2665218048,2665283583,CH
-2665283584,2665381887,US
+2665283584,2665349119,US
+2665359360,2665361407,US
+2665365504,2665381887,US
2665414656,2665480191,GB
2665480192,2665545727,US
2665545728,2665611263,DE
@@ -85487,9 +41746,7 @@
2667511808,2667513855,RU
2667513856,2667515903,GB
2667515904,2667517951,CZ
-2667517952,2667519103,SK
-2667519104,2667519231,CZ
-2667519232,2667519999,SK
+2667517952,2667519999,SK
2667520000,2667522047,CZ
2667522048,2667524095,GB
2667524096,2667526143,RU
@@ -85497,38 +41754,27 @@
2667528192,2667532287,FR
2667532288,2667534335,RU
2667534336,2667536383,PL
-2667536384,2667536895,FR
-2667536896,2667536959,AT
-2667536960,2667537087,FR
-2667537088,2667537119,AT
-2667537120,2667537135,FR
-2667537136,2667537151,AT
-2667537152,2667537791,FR
-2667537792,2667537919,AT
-2667537920,2667537943,FR
-2667537944,2667537951,AT
-2667537952,2667538431,FR
-2667538432,2667544575,AT
+2667536384,2667536639,FR
+2667536640,2667537087,AT
+2667537088,2667537119,FR
+2667537120,2667537151,AT
+2667537152,2667541503,FR
+2667541504,2667542527,AT
+2667542528,2667544575,FR
2667544576,2667560959,RU
2667560960,2667565055,IT
2667565056,2667565311,HK
-2667565312,2667565348,AT
-2667565349,2667565349,TR
-2667565350,2667565350,PT
-2667565351,2667565351,GR
-2667565352,2667565352,IE
-2667565353,2667565353,DK
-2667565354,2667565354,NO
-2667565355,2667565355,NL
-2667565356,2667565356,EG
-2667565357,2667565357,LU
-2667565358,2667565358,CZ
-2667565359,2667565359,BE
-2667565360,2667565360,AU
-2667565361,2667565362,PH
-2667565363,2667565363,MY
-2667565364,2667565364,NZ
-2667565365,2667566335,AT
+2667565312,2667565421,AT
+2667565422,2667565422,PT
+2667565423,2667565423,ES
+2667565424,2667565424,US
+2667565425,2667565425,CR
+2667565426,2667565426,KN
+2667565427,2667565427,BR
+2667565428,2667565428,FI
+2667565429,2667565429,CH
+2667565430,2667565430,GB
+2667565431,2667566335,AT
2667566336,2667566591,US
2667566592,2667566847,DE
2667566848,2667567103,FR
@@ -85578,9 +41824,7 @@
2670592000,2670657535,NL
2670657536,2670854143,US
2670854144,2670919679,FR
-2670919680,2670980095,DE
-2670980096,2670980351,EU
-2670980352,2670985215,DE
+2670919680,2670985215,DE
2670985216,2671050751,AU
2671050752,2671181823,US
2671181824,2671247359,CA
@@ -85588,11 +41832,9 @@
2671378432,2671443967,NO
2671443968,2671509503,US
2671509504,2671575039,NL
-2671575040,2671719167,US
-2671719168,2671719324,GB
-2671719325,2671719328,US
-2671719329,2671719423,GB
-2671719424,2671749119,US
+2671575040,2671720191,US
+2671720192,2671720447,VE
+2671720448,2671749119,US
2671749120,2671750143,CA
2671750144,2672295935,US
2672295936,2672361471,SE
@@ -85613,7 +41855,12 @@
2673737728,2673803263,US
2673803264,2673868799,FR
2673868800,2674130943,US
-2674130944,2674249727,GB
+2674130944,2674163711,GB
+2674163712,2674171903,CA
+2674171904,2674175999,GB
+2674176000,2674192383,US
+2674192384,2674196479,CH
+2674196480,2674249727,GB
2674249728,2674251775,US
2674251776,2674262015,GB
2674262016,2674327551,US
@@ -85637,9 +41884,7 @@
2676097024,2676162559,NO
2676162560,2676359167,US
2676359168,2676424703,IE
-2676424704,2676618239,US
-2676618240,2676618495,GB
-2676618496,2677014527,US
+2676424704,2677014527,US
2677014528,2677080063,CH
2677080064,2677145599,US
2677145600,2677178367,TR
@@ -85650,13 +41895,15 @@
2677407744,2677473279,US
2677473280,2677538815,FR
2677538816,2677604351,FI
-2677604352,2677639167,US
-2677639168,2677640191,CA
-2677640192,2677644287,US
-2677644288,2677644347,GB
-2677644348,2677644348,EU
-2677644349,2677644543,GB
-2677644544,2677669887,US
+2677604352,2677622783,US
+2677622784,2677623039,IE
+2677623040,2677639679,US
+2677639680,2677639935,CA
+2677639936,2677642239,US
+2677642240,2677642495,ES
+2677642496,2677650431,US
+2677650432,2677650943,RO
+2677650944,2677669887,US
2677669888,2677735423,DE
2677735424,2677800959,US
2677800960,2677866495,CH
@@ -85702,10 +41949,14 @@
2679177216,2679242751,CA
2679242752,2679308287,US
2679308288,2679373823,CH
-2679373824,2679439359,GB
-2679439360,2679525631,US
-2679525632,2679525887,BR
-2679525888,2680029183,US
+2679373824,2679406591,GB
+2679406592,2679431167,US
+2679431168,2679439359,FR
+2679439360,2679523327,US
+2679523328,2679525375,GB
+2679525376,2679535615,US
+2679535616,2679537663,GB
+2679537664,2680029183,US
2680029184,2680094719,SE
2680094720,2680225791,US
2680225792,2680356863,SE
@@ -85729,9 +41980,11 @@
2681798656,2681864191,FR
2681864192,2681929727,US
2681929728,2681995263,GB
-2681995264,2682107903,US
-2682107904,2682108159,GB
-2682108160,2682257407,US
+2681995264,2682015231,US
+2682015232,2682015487,IN
+2682015488,2682123263,US
+2682123264,2682123519,AU
+2682123520,2682257407,US
2682257408,2682322943,UA
2682322944,2682388479,US
2682388480,2682454015,CN
@@ -85749,21 +42002,15 @@
2683371520,2683437055,CH
2683437056,2683568127,US
2683568128,2683633663,GB
-2683633664,2683637759,EU
2683637760,2683637859,NL
-2683637860,2683637860,EU
2683637861,2683641855,NL
2683641856,2683645951,US
-2683645952,2683646207,AP
2683646208,2683650047,SG
2683650048,2683651071,US
-2683651072,2683699199,EU
2683699200,2683830271,US
2683830272,2683895807,AU
2683895808,2684157951,US
-2684157952,2684158463,NL
-2684158464,2684158719,BE
-2684158720,2684159999,NL
+2684157952,2684159999,NL
2684160000,2684162047,NO
2684162048,2684164095,EE
2684164096,2684166143,SE
@@ -85775,796 +42022,143 @@
2684184576,2684186623,SK
2684186624,2684188671,DE
2684188672,2684190719,RU
-2684190720,2684190739,US
-2684190740,2684190743,TR
-2684190744,2684190751,GB
-2684190752,2684190783,US
-2684190784,2684190799,NL
-2684190800,2684190807,GB
-2684190808,2684190815,US
-2684190816,2684190831,NL
-2684190832,2684190847,HR
-2684190848,2684190879,TR
-2684190880,2684190923,NL
-2684190924,2684190927,US
-2684190928,2684190935,NL
-2684190936,2684190943,US
-2684190944,2684190959,NL
-2684190960,2684190967,US
-2684190968,2684190971,IN
+2684190720,2684190735,US
+2684190736,2684190783,NL
+2684190784,2684190787,US
+2684190788,2684190971,NL
2684190972,2684190975,US
-2684190976,2684191039,CY
-2684191040,2684191071,TR
-2684191072,2684191103,NL
-2684191104,2684191167,CY
-2684191168,2684191175,NO
-2684191176,2684191183,US
-2684191184,2684191191,NO
-2684191192,2684191199,IT
-2684191200,2684191207,GB
-2684191208,2684191215,NO
-2684191216,2684191223,US
-2684191224,2684191231,CA
-2684191232,2684191239,HR
-2684191240,2684191247,IT
-2684191248,2684191259,AU
-2684191260,2684191263,US
-2684191264,2684191271,GB
-2684191272,2684191279,US
-2684191280,2684191287,GB
-2684191288,2684191295,EG
-2684191296,2684191303,HR
-2684191304,2684191307,EG
-2684191308,2684191311,DK
-2684191312,2684191319,US
-2684191320,2684191327,CA
-2684191328,2684191335,US
-2684191336,2684191343,IE
-2684191344,2684191351,HR
-2684191352,2684191359,RU
-2684191360,2684191367,SG
-2684191368,2684191375,HR
-2684191376,2684191383,AU
-2684191384,2684191391,GB
-2684191392,2684191399,NO
-2684191400,2684191407,US
-2684191408,2684191411,HK
-2684191412,2684191415,ZA
-2684191416,2684191423,US
-2684191424,2684191439,AU
-2684191440,2684191455,CN
-2684191456,2684191487,NL
-2684191488,2684191615,US
-2684191616,2684191743,DK
-2684191744,2684191751,US
-2684191752,2684191759,NL
+2684190976,2684191487,NL
+2684191488,2684191495,US
+2684191496,2684191551,NL
+2684191552,2684191615,US
+2684191616,2684191759,NL
2684191760,2684191767,US
-2684191768,2684191775,NL
-2684191776,2684191807,US
-2684191808,2684191815,KE
-2684191816,2684191839,US
-2684191840,2684191843,NL
+2684191768,2684191807,NL
+2684191808,2684191815,US
+2684191816,2684191843,NL
2684191844,2684191847,US
-2684191848,2684191855,GB
-2684191856,2684191871,US
-2684191872,2684191873,ES
-2684191874,2684191874,US
-2684191875,2684191875,SA
-2684191876,2684191879,NL
-2684191880,2684191887,LT
-2684191888,2684191899,IT
-2684191900,2684191911,US
-2684191912,2684191919,KW
-2684191920,2684191927,TR
-2684191928,2684191935,US
-2684191936,2684191939,TR
-2684191940,2684191943,US
-2684191944,2684191951,ES
-2684191952,2684191967,US
-2684191968,2684191975,NL
-2684191976,2684191999,US
-2684192000,2684192007,ES
-2684192008,2684192015,AE
-2684192016,2684192023,US
-2684192024,2684192031,IN
-2684192032,2684192039,US
-2684192040,2684192047,AL
-2684192048,2684192055,US
-2684192056,2684192063,IN
-2684192064,2684192071,AL
-2684192072,2684192079,US
-2684192080,2684192087,IN
-2684192088,2684192095,SG
-2684192096,2684192103,CY
+2684191848,2684191859,NL
+2684191860,2684191863,US
+2684191864,2684191987,NL
+2684191988,2684191999,US
+2684192000,2684192103,NL
2684192104,2684192107,US
-2684192108,2684192108,AU
-2684192109,2684192111,NL
-2684192112,2684192119,CH
-2684192120,2684192127,DO
-2684192128,2684192135,IN
-2684192136,2684192159,US
-2684192160,2684192163,HK
-2684192164,2684192175,TR
-2684192176,2684192191,JO
-2684192192,2684192199,US
-2684192200,2684192207,QA
-2684192208,2684192215,US
-2684192216,2684192223,CA
-2684192224,2684192231,TR
-2684192232,2684192239,US
-2684192240,2684192247,IN
-2684192248,2684192263,US
-2684192264,2684192265,TR
-2684192266,2684192266,EG
-2684192267,2684192271,GB
-2684192272,2684192279,US
-2684192280,2684192287,RU
-2684192288,2684192295,DK
-2684192296,2684192303,US
-2684192304,2684192311,CA
-2684192312,2684192327,US
-2684192328,2684192335,AE
-2684192336,2684192343,US
-2684192344,2684192347,AE
-2684192348,2684192351,SA
-2684192352,2684192371,US
-2684192372,2684192375,GB
-2684192376,2684192383,BM
-2684192384,2684192387,CA
+2684192108,2684192303,NL
+2684192304,2684192311,US
+2684192312,2684192387,NL
2684192388,2684192391,US
-2684192392,2684192399,NL
-2684192400,2684192407,AU
-2684192408,2684192415,US
-2684192416,2684192423,CA
-2684192424,2684192427,CH
-2684192428,2684192431,TR
-2684192432,2684192447,NL
-2684192448,2684192459,TR
-2684192460,2684192471,US
-2684192472,2684192479,CN
-2684192480,2684192495,US
-2684192496,2684192503,GB
-2684192504,2684192507,HR
-2684192508,2684192509,CA
-2684192510,2684192510,BH
-2684192511,2684192511,RU
+2684192392,2684192459,NL
+2684192460,2684192463,US
+2684192464,2684192511,NL
2684192512,2684192519,US
2684192520,2684192523,NL
2684192524,2684192535,US
-2684192536,2684192543,NL
-2684192544,2684192545,US
-2684192546,2684192547,EG
-2684192548,2684192551,CN
-2684192552,2684192559,GB
-2684192560,2684192567,NL
-2684192568,2684192583,US
-2684192584,2684192591,DE
-2684192592,2684192599,US
-2684192600,2684192607,AE
+2684192536,2684192607,NL
2684192608,2684192611,US
-2684192612,2684192615,ES
-2684192616,2684192627,US
-2684192628,2684192631,NL
-2684192632,2684192639,SE
-2684192640,2684192655,GR
-2684192656,2684192663,GB
-2684192664,2684192667,AE
-2684192668,2684192671,RU
-2684192672,2684192687,US
-2684192688,2684192695,NL
-2684192696,2684192703,US
-2684192704,2684192711,BE
-2684192712,2684192715,AU
-2684192716,2684192719,CA
-2684192720,2684192727,NL
-2684192728,2684192731,BE
-2684192732,2684192735,IT
+2684192612,2684192623,NL
+2684192624,2684192627,US
+2684192628,2684192735,NL
2684192736,2684192767,US
-2684192768,2684192775,TR
-2684192776,2684192799,US
-2684192800,2684192807,NL
-2684192808,2684192823,PL
-2684192824,2684192831,NL
-2684192832,2684192839,NO
-2684192840,2684192847,TR
-2684192848,2684192855,PK
-2684192856,2684192867,US
-2684192868,2684192871,AE
-2684192872,2684192879,CN
-2684192880,2684192895,US
-2684192896,2684192927,LT
-2684192928,2684192939,ES
-2684192940,2684192951,US
-2684192952,2684192959,CY
-2684192960,2684192967,NL
-2684192968,2684192971,GB
-2684192972,2684192975,MA
-2684192976,2684192983,US
-2684192984,2684192991,TR
-2684192992,2684192999,BR
-2684193000,2684193007,SA
-2684193008,2684193015,GB
-2684193016,2684193019,US
-2684193020,2684193020,BH
-2684193021,2684193021,US
-2684193022,2684193022,GB
-2684193023,2684193023,IT
-2684193024,2684193031,TR
-2684193032,2684193039,GR
-2684193040,2684193055,NL
-2684193056,2684193059,TR
-2684193060,2684193063,NL
-2684193064,2684193071,US
-2684193072,2684193079,EG
-2684193080,2684193087,HR
-2684193088,2684193119,GB
-2684193120,2684193127,CN
-2684193128,2684193151,US
-2684193152,2684193159,NZ
-2684193160,2684193167,SA
-2684193168,2684193175,US
-2684193176,2684193183,BH
-2684193184,2684193195,TR
-2684193196,2684193199,CN
-2684193200,2684193215,BE
-2684193216,2684193231,US
-2684193232,2684193235,BM
-2684193236,2684193239,AE
-2684193240,2684193247,PK
-2684193248,2684193251,IN
-2684193252,2684193255,AE
-2684193256,2684193263,US
-2684193264,2684193271,NO
-2684193272,2684193287,US
-2684193288,2684193295,NL
-2684193296,2684193303,IT
-2684193304,2684193311,NL
-2684193312,2684193319,IN
-2684193320,2684193327,US
-2684193328,2684193335,GR
-2684193336,2684193375,US
-2684193376,2684193383,LB
-2684193384,2684193391,US
-2684193392,2684193399,JO
-2684193400,2684193407,US
-2684193408,2684193439,NL
-2684193440,2684193447,US
-2684193448,2684193455,HU
-2684193456,2684193467,US
-2684193468,2684193471,LT
-2684193472,2684193479,MX
-2684193480,2684193487,IN
-2684193488,2684193511,US
-2684193512,2684193519,AE
-2684193520,2684193527,TR
-2684193528,2684193535,GB
-2684193536,2684193551,NL
-2684193552,2684193559,SA
-2684193560,2684193567,CN
-2684193568,2684193575,US
-2684193576,2684193583,EG
-2684193584,2684193591,RU
-2684193592,2684193599,ES
-2684193600,2684193607,IN
-2684193608,2684193611,PT
-2684193612,2684193615,NL
-2684193616,2684193623,IN
-2684193624,2684193631,TR
-2684193632,2684193639,MX
-2684193640,2684193647,TR
-2684193648,2684193655,AU
-2684193656,2684193659,ES
-2684193660,2684193663,US
-2684193664,2684193671,CH
-2684193672,2684193675,US
-2684193676,2684193679,AU
-2684193680,2684193687,DE
-2684193688,2684193691,US
-2684193692,2684193695,GR
-2684193696,2684193711,GB
-2684193712,2684193719,NL
-2684193720,2684193727,CN
-2684193728,2684193759,NL
-2684193760,2684193767,GB
-2684193768,2684193775,AR
-2684193776,2684193783,NL
-2684193784,2684193789,US
-2684193790,2684193790,TR
-2684193791,2684193791,CH
-2684193792,2684193799,NL
-2684193800,2684193807,FR
-2684193808,2684193815,GB
-2684193816,2684193823,US
-2684193824,2684193831,NL
-2684193832,2684193855,US
-2684193856,2684193871,GB
-2684193872,2684193911,US
-2684193912,2684193919,AT
-2684193920,2684193927,US
-2684193928,2684193931,AT
+2684192768,2684192775,NL
+2684192776,2684192783,US
+2684192784,2684192979,NL
+2684192980,2684192983,US
+2684192984,2684193147,NL
+2684193148,2684193151,US
+2684193152,2684193275,NL
+2684193276,2684193279,US
+2684193280,2684193447,NL
+2684193448,2684193455,AZ
+2684193456,2684193583,NL
+2684193584,2684193591,IE
+2684193592,2684193735,NL
+2684193736,2684193743,US
+2684193744,2684193887,NL
+2684193888,2684193911,US
+2684193912,2684193931,NL
2684193932,2684193935,US
-2684193936,2684193943,IN
-2684193944,2684193951,US
-2684193952,2684193959,IN
-2684193960,2684193963,CN
-2684193964,2684193967,US
-2684193968,2684193975,IN
-2684193976,2684193983,DK
-2684193984,2684193999,US
-2684194000,2684194007,NL
-2684194008,2684194039,US
-2684194040,2684194047,MT
-2684194048,2684194055,IT
-2684194056,2684194087,US
-2684194088,2684194095,GR
-2684194096,2684194103,US
-2684194104,2684194111,NL
-2684194112,2684194119,US
-2684194120,2684194127,BG
-2684194128,2684194135,GB
-2684194136,2684194143,MX
+2684193936,2684194002,NL
+2684194003,2684194003,BH
+2684194004,2684194007,US
+2684194008,2684194071,NL
+2684194072,2684194079,US
+2684194080,2684194143,NL
2684194144,2684194151,US
-2684194152,2684194159,EG
-2684194160,2684194167,IN
+2684194152,2684194167,NL
2684194168,2684194171,US
-2684194172,2684194175,IL
-2684194176,2684194207,LT
-2684194208,2684194215,CN
-2684194216,2684194223,IL
-2684194224,2684194247,US
-2684194248,2684194251,EG
-2684194252,2684194253,NL
-2684194254,2684194255,AE
-2684194256,2684194271,US
-2684194272,2684194279,GB
-2684194280,2684194287,BZ
-2684194288,2684194295,RU
-2684194296,2684194303,NO
-2684194304,2684194311,SE
-2684194312,2684194319,IL
-2684194320,2684194327,SA
-2684194328,2684194331,TR
-2684194332,2684194335,NL
-2684194336,2684194343,LV
-2684194344,2684194351,IL
-2684194352,2684194367,US
-2684194368,2684194375,TW
-2684194376,2684194383,JO
-2684194384,2684194391,CN
-2684194392,2684194399,NL
-2684194400,2684194407,GR
-2684194408,2684194423,NZ
-2684194424,2684194431,NL
-2684194432,2684194463,SG
-2684194464,2684194471,BR
-2684194472,2684194479,TR
-2684194480,2684194487,ES
+2684194172,2684194351,NL
+2684194352,2684194359,US
+2684194360,2684194487,NL
2684194488,2684194495,GB
-2684194496,2684194503,NG
-2684194504,2684194507,US
-2684194508,2684194511,SE
+2684194496,2684194511,NL
2684194512,2684194519,GB
-2684194520,2684194527,IT
+2684194520,2684194527,NL
2684194528,2684194535,US
-2684194536,2684194539,NG
-2684194540,2684194543,GB
-2684194544,2684194551,US
-2684194552,2684194559,IN
-2684194560,2684194663,US
-2684194664,2684194671,JO
-2684194672,2684194679,US
-2684194680,2684194687,NO
-2684194688,2684194695,US
-2684194696,2684194703,DK
-2684194704,2684194711,TR
-2684194712,2684194719,LV
-2684194720,2684194723,BR
+2684194536,2684194559,NL
+2684194560,2684194623,US
+2684194624,2684194723,NL
2684194724,2684194727,US
-2684194728,2684194751,DK
-2684194752,2684194754,US
-2684194755,2684194755,NL
-2684194756,2684194767,US
-2684194768,2684194815,DK
-2684194816,2684194823,US
-2684194824,2684194831,RO
-2684194832,2684194839,SG
-2684194840,2684194847,US
-2684194848,2684194855,MT
-2684194856,2684194863,UG
-2684194864,2684194871,NL
-2684194872,2684194879,SA
-2684194880,2684194887,AE
-2684194888,2684194895,ES
-2684194896,2684194903,DE
-2684194904,2684194907,TR
-2684194908,2684194911,US
-2684194912,2684194919,PT
-2684194920,2684194927,NL
-2684194928,2684194931,TR
-2684194932,2684194935,BM
-2684194936,2684194943,CN
-2684194944,2684194959,NL
-2684194960,2684194967,MA
-2684194968,2684194975,US
-2684194976,2684194983,NL
-2684194984,2684194991,BR
-2684194992,2684194999,US
-2684195000,2684195007,DK
-2684195008,2684195039,IN
-2684195040,2684195047,NL
-2684195048,2684195055,ES
-2684195056,2684195063,DK
-2684195064,2684195071,GR
-2684195072,2684195079,US
-2684195080,2684195087,ES
-2684195088,2684195095,EG
-2684195096,2684195111,US
-2684195112,2684195119,SA
-2684195120,2684195127,US
-2684195128,2684195151,NL
-2684195152,2684195167,US
-2684195168,2684195199,CY
-2684195200,2684195295,US
-2684195296,2684195303,DE
-2684195304,2684195307,SE
-2684195308,2684195319,US
-2684195320,2684195323,GB
+2684194728,2684195119,NL
+2684195120,2684195123,US
+2684195124,2684195199,NL
+2684195200,2684195263,US
+2684195264,2684195323,NL
2684195324,2684195327,US
-2684195328,2684195335,DE
-2684195336,2684195343,US
-2684195344,2684195351,GT
-2684195352,2684195359,ES
-2684195360,2684195367,CN
-2684195368,2684195371,ES
-2684195372,2684195375,MA
-2684195376,2684195383,BE
-2684195384,2684195391,NL
-2684195392,2684195407,US
-2684195408,2684195415,DE
-2684195416,2684195423,AE
-2684195424,2684195427,IT
-2684195428,2684195431,TR
-2684195432,2684195439,GB
-2684195440,2684195455,DK
-2684195456,2684195495,CN
-2684195496,2684195503,UG
-2684195504,2684195511,SA
-2684195512,2684195527,US
-2684195528,2684195535,RO
-2684195536,2684195543,US
-2684195544,2684195551,NL
-2684195552,2684195559,BA
-2684195560,2684195567,NL
-2684195568,2684195575,US
-2684195576,2684195583,TR
-2684195584,2684195647,US
-2684195648,2684195655,BA
-2684195656,2684195679,US
-2684195680,2684195683,AE
-2684195684,2684195685,SA
-2684195686,2684195686,US
-2684195687,2684195687,GB
-2684195688,2684195695,NL
-2684195696,2684195712,US
-2684195713,2684195713,CN
-2684195714,2684195715,NL
-2684195716,2684195719,US
-2684195720,2684195727,GB
-2684195728,2684195735,NL
-2684195736,2684195743,CA
-2684195744,2684195751,US
-2684195752,2684195759,BE
-2684195760,2684195767,US
-2684195768,2684195775,KW
-2684195776,2684195783,CA
-2684195784,2684195791,EG
-2684195792,2684195799,ES
-2684195800,2684195807,NL
-2684195808,2684195815,AR
-2684195816,2684195823,GB
-2684195824,2684195831,AF
-2684195832,2684195855,US
-2684195856,2684195864,GB
-2684195865,2684195865,NL
-2684195866,2684195867,CY
+2684195328,2684195335,NL
+2684195336,2684195339,US
+2684195340,2684195663,NL
+2684195664,2684195667,US
+2684195668,2684195867,NL
2684195868,2684195871,US
-2684195872,2684195879,AT
-2684195880,2684195887,US
-2684195888,2684195895,IN
-2684195896,2684195903,US
-2684195904,2684195911,IN
-2684195912,2684195919,NL
-2684195920,2684195935,HR
-2684195936,2684195967,AF
-2684195968,2684195975,CH
-2684195976,2684195979,TR
+2684195872,2684195927,NL
+2684195928,2684195935,JP
+2684195936,2684195979,NL
2684195980,2684195983,US
-2684195984,2684195991,BD
-2684195992,2684195999,IE
-2684196000,2684196007,NL
-2684196008,2684196015,FR
-2684196016,2684196023,AU
-2684196024,2684196031,US
-2684196032,2684196047,MA
-2684196048,2684196055,AT
-2684196056,2684196063,ES
-2684196064,2684196071,NL
-2684196072,2684196079,EG
-2684196080,2684196087,CA
-2684196088,2684196095,GB
+2684195984,2684196095,NL
2684196096,2684196159,US
-2684196160,2684196191,AF
-2684196192,2684196199,SA
-2684196200,2684196207,ES
-2684196208,2684196215,US
-2684196216,2684196223,NL
-2684196224,2684196227,TR
-2684196228,2684196229,GB
-2684196230,2684196231,NL
-2684196232,2684196239,IT
-2684196240,2684196255,NL
-2684196256,2684196263,VN
-2684196264,2684196279,EG
-2684196280,2684196303,DK
-2684196304,2684196311,BR
-2684196312,2684196319,NL
-2684196320,2684196327,GB
-2684196328,2684196335,NL
-2684196336,2684196343,CN
-2684196344,2684196347,TR
-2684196348,2684196383,US
-2684196384,2684196391,GB
+2684196160,2684196343,NL
+2684196344,2684196351,US
+2684196352,2684196391,NL
2684196392,2684196399,US
-2684196400,2684196415,TR
-2684196416,2684196423,US
-2684196424,2684196431,BG
-2684196432,2684196439,CZ
-2684196440,2684196447,DK
-2684196448,2684196463,EG
-2684196464,2684196511,DK
-2684196512,2684196527,US
-2684196528,2684196535,DK
-2684196536,2684196543,US
-2684196544,2684196551,DK
-2684196552,2684196567,NL
-2684196568,2684196591,US
-2684196592,2684196599,GB
-2684196600,2684196607,NL
-2684196608,2684196639,US
-2684196640,2684196671,GB
-2684196672,2684196703,CN
-2684196704,2684196711,US
-2684196712,2684196719,NL
-2684196720,2684196727,PT
-2684196728,2684196735,FI
-2684196736,2684196743,US
-2684196744,2684196751,NL
-2684196752,2684196759,US
-2684196760,2684196775,NL
-2684196776,2684196783,US
-2684196784,2684196791,TR
-2684196792,2684196799,BG
-2684196800,2684196831,TR
-2684196832,2684196839,US
-2684196840,2684196847,BR
-2684196848,2684196855,NL
-2684196856,2684196859,GB
-2684196860,2684196863,AR
-2684196864,2684196871,US
-2684196872,2684196879,MX
-2684196880,2684196881,GB
-2684196882,2684196882,US
-2684196883,2684196883,DE
-2684196884,2684196885,SA
-2684196886,2684196886,GB
-2684196887,2684196887,VG
-2684196888,2684196891,TR
-2684196892,2684196893,SA
-2684196894,2684196894,BR
-2684196895,2684196895,MA
-2684196896,2684196903,RU
-2684196904,2684196905,CY
-2684196906,2684196906,EG
-2684196907,2684196907,AU
-2684196908,2684196908,NL
-2684196909,2684196909,AU
-2684196910,2684196910,GB
-2684196911,2684196911,IT
-2684196912,2684196931,US
-2684196932,2684196935,NL
-2684196936,2684196939,EG
+2684196400,2684196419,NL
+2684196420,2684196423,US
+2684196424,2684196517,NL
+2684196518,2684196518,GB
+2684196519,2684196535,NL
+2684196536,2684196539,US
+2684196540,2684196939,NL
2684196940,2684196943,US
-2684196944,2684196951,EG
-2684196952,2684196959,NL
-2684196960,2684196967,US
-2684196968,2684196975,BR
-2684196976,2684196979,ZA
-2684196980,2684196980,TR
-2684196981,2684196981,CN
-2684196982,2684196982,NL
-2684196983,2684196983,US
-2684196984,2684196987,DK
-2684196988,2684196999,US
-2684197000,2684197007,IT
-2684197008,2684197019,US
-2684197020,2684197021,HR
-2684197022,2684197022,RU
-2684197023,2684197023,JO
-2684197024,2684197031,EG
-2684197032,2684197047,US
-2684197048,2684197055,IN
-2684197056,2684197063,US
-2684197064,2684197071,CO
-2684197072,2684197079,MX
-2684197080,2684197083,IT
-2684197084,2684197087,NO
-2684197088,2684197091,US
-2684197092,2684197092,RU
-2684197093,2684197093,US
-2684197094,2684197095,CY
-2684197096,2684197099,IT
-2684197100,2684197103,NL
-2684197104,2684197107,US
-2684197108,2684197111,AR
-2684197112,2684197119,US
-2684197120,2684197120,NL
-2684197121,2684197121,MA
-2684197122,2684197123,CY
-2684197124,2684197135,US
-2684197136,2684197143,SA
+2684196944,2684196959,NL
+2684196960,2684196963,US
+2684196964,2684197099,NL
+2684197100,2684197103,US
+2684197104,2684197115,NL
+2684197116,2684197119,US
+2684197120,2684197123,NL
+2684197124,2684197127,US
+2684197128,2684197143,NL
2684197144,2684197151,GB
-2684197152,2684197167,US
-2684197168,2684197175,NL
-2684197176,2684197179,TR
-2684197180,2684197181,CY
-2684197182,2684197182,MA
-2684197183,2684197183,EG
-2684197184,2684197191,NL
+2684197152,2684197191,NL
2684197192,2684197195,US
-2684197196,2684197196,TR
-2684197197,2684197197,NL
-2684197198,2684197198,BR
-2684197199,2684197199,AU
-2684197200,2684197215,US
-2684197216,2684197227,AT
-2684197228,2684197231,TR
-2684197232,2684197239,US
-2684197240,2684197247,GB
-2684197248,2684197263,US
-2684197264,2684197267,CO
+2684197196,2684197211,NL
+2684197212,2684197215,US
+2684197216,2684197251,NL
+2684197252,2684197255,US
+2684197256,2684197259,NL
+2684197260,2684197263,US
+2684197264,2684197267,NL
2684197268,2684197271,US
-2684197272,2684197279,HR
-2684197280,2684197283,US
-2684197284,2684197287,TR
-2684197288,2684197295,DE
-2684197296,2684197303,HR
+2684197272,2684197303,NL
2684197304,2684197311,US
-2684197312,2684197319,NL
-2684197320,2684197327,SA
-2684197328,2684197335,BR
-2684197336,2684197336,NL
-2684197337,2684197337,MA
-2684197338,2684197338,AU
-2684197339,2684197339,RU
-2684197340,2684197355,US
-2684197356,2684197356,GR
-2684197357,2684197357,NL
-2684197358,2684197358,RU
-2684197359,2684197359,IN
-2684197360,2684197368,TR
-2684197369,2684197369,US
-2684197370,2684197370,NL
-2684197371,2684197371,AU
-2684197372,2684197373,MA
-2684197374,2684197374,DK
-2684197375,2684198911,NL
-2684198912,2684199423,GB
-2684199424,2684199679,EU
-2684199680,2684200959,GB
+2684197312,2684197343,NL
+2684197344,2684197355,US
+2684197356,2684198911,NL
+2684198912,2684200959,GB
2684200960,2684203007,RU
2684203008,2684205055,GB
2684205056,2684207103,IT
2684207104,2684213247,GB
-2684213248,2684213295,SE
-2684213296,2684213311,GB
-2684213312,2684213327,FR
-2684213328,2684213343,DE
-2684213344,2684213359,DK
-2684213360,2684213375,FI
-2684213376,2684213391,NL
-2684213392,2684213407,NO
-2684213408,2684213439,TR
-2684213440,2684213471,US
-2684213472,2684213487,MK
-2684213488,2684213503,DK
-2684213504,2684213519,FR
-2684213520,2684213535,FI
-2684213536,2684213551,SE
-2684213552,2684213567,DK
-2684213568,2684213583,NL
-2684213584,2684213599,DE
-2684213600,2684213615,GB
-2684213616,2684213631,NO
-2684213632,2684213647,DK
-2684213648,2684213663,RO
-2684213664,2684213671,SE
-2684213672,2684213679,IT
-2684213680,2684213695,DE
-2684213696,2684213711,NO
-2684213712,2684213727,DK
-2684213728,2684213743,FI
-2684213744,2684213759,US
-2684213760,2684213783,SE
-2684213784,2684213791,IT
-2684213792,2684213807,FI
-2684213808,2684213823,DK
-2684213824,2684213839,NO
-2684213840,2684213855,DE
-2684213856,2684213871,NO
-2684213872,2684213887,IT
-2684213888,2684213903,DE
-2684213904,2684213919,GB
-2684213920,2684213935,FR
-2684213936,2684213951,NL
-2684213952,2684213983,DK
-2684213984,2684213999,FI
-2684214000,2684214015,ES
-2684214016,2684214031,NL
-2684214032,2684214039,DK
-2684214040,2684214047,FI
-2684214048,2684214063,FR
-2684214064,2684214079,DE
-2684214080,2684214087,GB
-2684214088,2684214095,NO
-2684214096,2684214111,DK
-2684214112,2684214127,IT
-2684214128,2684214399,SE
-2684214400,2684214415,US
-2684214416,2684214431,IT
-2684214432,2684214463,NO
-2684214464,2684214479,PL
-2684214480,2684214487,GB
-2684214488,2684214495,DE
-2684214496,2684214503,FR
-2684214504,2684214511,DK
-2684214512,2684214527,NL
-2684214528,2684214543,DE
-2684214544,2684214559,FR
-2684214560,2684214575,FI
-2684214576,2684214591,DK
-2684214592,2684214607,NL
-2684214608,2684214623,GB
-2684214624,2684214639,NO
-2684214640,2684214655,US
-2684214656,2684214687,IT
-2684214688,2684214719,SE
-2684214720,2684214735,FI
-2684214736,2684214751,DK
-2684214752,2684214783,SE
-2684214784,2684214799,GB
-2684214800,2684214815,FR
-2684214816,2684214831,NL
-2684214832,2684214847,DE
-2684214848,2684214863,DK
-2684214864,2684214879,FI
-2684214880,2684214895,US
-2684214896,2684214911,IT
-2684214912,2684214927,NO
-2684214928,2684214959,SE
-2684214960,2684214975,FI
-2684214976,2684214991,DK
-2684214992,2684215007,SE
-2684215008,2684215023,TR
-2684215024,2684215039,SE
-2684215040,2684215055,NL
-2684215056,2684215071,GB
-2684215072,2684215087,NO
-2684215088,2684215103,US
-2684215104,2684215119,DE
-2684215120,2684215135,FR
-2684215136,2684215151,FI
-2684215152,2684215167,DK
-2684215168,2684215295,SE
+2684213248,2684215295,SE
2684215296,2684217343,BE
2684217344,2684219391,CZ
2684219392,2684221439,PL
@@ -86579,18 +42173,9 @@
2684329984,2684332031,IQ
2684332032,2684334079,DE
2684334080,2684338175,PL
-2684338176,2684338303,NL
-2684338304,2684338367,ES
-2684338368,2684338687,NL
-2684338688,2684339103,ES
-2684339104,2684339199,NL
-2684339200,2684340223,ES
+2684338176,2684340223,ES
2684340224,2684344319,GB
-2684344320,2684345343,NL
-2684345344,2684345471,US
-2684345472,2684345599,NL
-2684345600,2684345855,US
-2684345856,2684346367,NL
+2684344320,2684346367,NL
2684346368,2684354559,FI
2684354560,2684616703,US
2684616704,2684682239,NZ
@@ -86608,12 +42193,7 @@
2687041536,2687238143,US
2687238144,2687297231,DE
2687297232,2687297239,GB
-2687297240,2687297247,SE
-2687297248,2687297791,DE
-2687297792,2687298047,FR
-2687298048,2687299119,DE
-2687299120,2687299127,US
-2687299128,2687301375,DE
+2687297240,2687301375,DE
2687301376,2687301631,NL
2687301632,2687560191,DE
2687560192,2687560447,ZA
@@ -86623,16 +42203,7 @@
2687893504,2688221183,DE
2688221184,2688286719,CH
2688286720,2688352255,DE
-2688352256,2688418825,CH
-2688418826,2688418826,EU
-2688418827,2688420095,CH
-2688420096,2688420351,US
-2688420352,2688420607,CN
-2688420608,2688420863,CH
-2688420864,2688421119,SG
-2688421120,2688421375,AP
-2688421376,2688421887,US
-2688421888,2688548863,CH
+2688352256,2688548863,CH
2688548864,2688614399,AU
2688614400,2688679935,US
2688679936,2688745471,IT
@@ -86658,9 +42229,7 @@
2689566208,2689566719,GB
2689566720,2689568255,US
2689568256,2689568767,GB
-2689568768,2689581823,US
-2689581824,2689582079,GB
-2689582080,2689586687,US
+2689568768,2689586687,US
2689586688,2689587199,GB
2689587200,2689593343,US
2689593344,2689593855,GB
@@ -86670,7 +42239,9 @@
2689597440,2689662975,IT
2689662976,2689794047,US
2689794048,2689802239,DE
-2689802240,2689810431,GB
+2689802240,2689802751,GB
+2689802752,2689803263,TR
+2689803264,2689810431,GB
2689810432,2689818623,US
2689818624,2689819135,IN
2689819136,2689826815,US
@@ -86678,7 +42249,8 @@
2689835008,2689843199,AU
2689843200,2689925119,US
2689925120,2689990655,CH
-2689990656,2690383871,US
+2689990656,2690187263,US
+2690318336,2690383871,US
2690383872,2690449407,FR
2690449408,2690646015,US
2690646016,2690711551,SG
@@ -86692,22 +42264,24 @@
2691301376,2691366911,CA
2691366912,2691760127,US
2691825664,2691891199,HU
-2691891200,2692546559,ZA
-2692546560,2694840319,US
+2691891200,2692218879,ZA
+2692284416,2692546559,ZA
+2692546560,2694316031,US
+2694381568,2694447103,US
2696151040,2696216575,IT
+2696216576,2696282111,ZA
2696413184,2697789439,JP
2697789440,2697854975,US
2697854976,2697889791,AU
2697889792,2697891839,US
-2697891840,2697920511,AU
+2697891840,2697892863,AU
+2697892864,2697894143,US
+2697894144,2697920511,AU
2697920512,2698117119,US
2698117120,2698182655,IS
2698182656,2698248191,DE
2698248192,2698313727,US
-2698313728,2698342399,GB
-2698342400,2698346495,DE
-2698346496,2698375167,GB
-2698375168,2698379263,DE
+2698313728,2698379263,DE
2698379264,2698444799,ES
2698444800,2698510335,JP
2698510336,2698706943,CZ
@@ -86720,8 +42294,24 @@
2699296768,2699362303,FR
2699362304,2699624447,US
2699624448,2699689983,JP
-2699755520,2700935167,JP
+2699755520,2699821055,JP
+2699886592,2700935167,JP
2700935168,2701066239,US
+2701131776,2701139967,HN
+2701139968,2701148159,NI
+2701148160,2701149183,AR
+2701149184,2701150207,HN
+2701150208,2701152255,AR
+2701152256,2701156351,BQ
+2701156352,2701160447,CW
+2701160448,2701162495,TT
+2701162496,2701164543,UY
+2701164544,2701172735,HT
+2701172736,2701176831,CL
+2701176832,2701178879,AR
+2701178880,2701180927,CL
+2701180928,2701189119,HN
+2701189120,2701197311,TT
2701197312,2701262847,US
2701262848,2701328383,GB
2701328384,2701393919,FR
@@ -86730,13 +42320,19 @@
2701524992,2701656063,US
2701656064,2701721599,RU
2701721600,2701787135,TR
+2701787136,2701852671,CO
2701852672,2701918207,US
2701918208,2701983743,GB
2701983744,2702245887,US
2702245888,2702311423,GB
+2702311424,2702376959,CO
2702376960,2702442495,CA
2702442496,2702508031,CH
2702508032,2702573567,US
+2702573568,2702581759,AR
+2702581760,2702585855,VE
+2702589952,2702606335,GF
+2702606336,2702639103,BO
2702639104,2702704639,GB
2702704640,2702770175,BR
2702770176,2702835711,CL
@@ -86751,21 +42347,22 @@
2703818752,2703884287,FI
2703884288,2703949823,DE
2703949824,2704015359,AU
-2704015360,2704064511,US
-2704064512,2704072703,CA
-2704072704,2704277503,US
+2704015360,2704277503,US
2704277504,2704343039,FR
2704343040,2704408575,US
2704408576,2704474111,AU
-2704474112,2704485119,US
+2704474112,2704476927,US
+2704476928,2704476929,GB
+2704476930,2704476930,US
+2704476931,2704477183,GB
+2704477184,2704485119,US
2704485120,2704485375,AU
2704485376,2704539647,US
2704539648,2704605183,SE
-2704605184,2704649215,HR
-2704649216,2704649471,BA
-2704649472,2704670719,HR
+2704605184,2704670719,HR
2704670720,2704736255,SE
2704736256,2704801791,US
+2704801792,2704867327,BO
2704867328,2704998399,US
2704998400,2705063935,BE
2705063936,2705195007,US
@@ -86776,7 +42373,9 @@
2705522688,2705588223,ES
2705588224,2705596159,US
2705596160,2705596415,CA
-2705596416,2705691647,US
+2705596416,2705621247,US
+2705621248,2705621503,CH
+2705621504,2705691647,US
2705691648,2705692671,GB
2705692672,2705710079,US
2705710080,2705711103,IN
@@ -86796,16 +42395,13 @@
2706960384,2706964479,US
2706964480,2707226623,NL
2707226624,2707488767,JP
-2707488768,2707619839,US
-2707619840,2707947519,GB
+2707488768,2707947519,US
2707947520,2708144127,FR
2708144128,2708340735,US
2708340736,2708406271,AT
2708406272,2708471807,ES
2708471808,2708537343,GB
-2708537344,2708635135,US
-2708635136,2708635391,EU
-2708635392,2708661247,US
+2708537344,2708661247,US
2708661248,2708661503,AU
2708661504,2708733951,US
2708733952,2708799487,ES
@@ -86819,7 +42415,9 @@
2709716992,2709782527,CL
2709782528,2709848063,PE
2709848064,2710175743,US
+2710175744,2710241279,BO
2710241280,2710306815,MY
+2710306816,2710372351,VE
2710372352,2710437887,CA
2710437888,2710503423,MY
2710503424,2710568959,AU
@@ -86831,15 +42429,15 @@
2711093248,2711158783,AU
2711158784,2711486463,US
2711486464,2711551999,NL
-2711552000,2711765247,US
-2711765248,2711765503,EU
-2711765504,2713190399,US
+2711552000,2713190399,US
2713190400,2713255935,CA
2713255936,2713387007,US
2713387008,2713452543,CA
2713452544,2713583615,US
2713583616,2713649151,AR
-2713649152,2713976831,US
+2713649152,2713946367,US
+2713946368,2713946623,CA
+2713946624,2713976831,US
2713976832,2714042367,VE
2714042368,2714238975,US
2714238976,2714304511,TH
@@ -86847,27 +42445,30 @@
2714370048,2714435583,CH
2714435584,2714697727,US
2714697728,2714763263,CN
-2714763264,2715287551,US
+2714763264,2715025407,US
+2715025408,2715090943,VE
+2715090944,2715287551,US
2715287552,2715353087,CA
2715353088,2716139519,US
2716139520,2716205055,SG
-2716205056,2716729343,US
+2716205056,2716467199,US
+2716467200,2716532735,VE
+2716532736,2716729343,US
2716729344,2716794879,CL
2716794880,2717253631,US
2717253632,2717319167,TH
2717319168,2717384703,US
-2717384704,2717450239,JP
2717450240,2717646847,US
2717646848,2717712383,KW
2717712384,2717843455,US
+2717843456,2717908991,VE
2717908992,2717974527,CA
-2717974528,2718629887,US
+2717974528,2718171135,US
+2718236672,2718629887,US
2718629888,2718695423,GB
2718695424,2718760959,US
2718760960,2718826495,GB
-2718826496,2719125247,US
-2719125248,2719125503,EU
-2719125504,2719285247,US
+2718826496,2719285247,US
2719285248,2719350783,CH
2719350784,2719416319,US
2719416320,2719481855,CH
@@ -86878,32 +42479,362 @@
2720399360,2720464895,FR
2720464896,2721382399,US
2721382400,2721447935,CA
-2721447936,2722693119,US
-2722693120,2722758655,CA
+2721447936,2721579007,US
+2721579008,2721644543,IN
+2721644544,2722693119,US
+2722693120,2722754559,CA
+2722754560,2722754815,GB
+2722754816,2722758655,CA
2722758656,2723479551,US
2723479552,2723545087,CA
2723545088,2723610623,CH
2723610624,2723832575,US
2723832576,2723832831,GB
-2723832832,2723852287,US
-2723852288,2723852543,GB
-2723852544,2724268287,US
-2724268288,2724268351,MX
-2724268352,2724790271,US
+2723832832,2724268287,US
+2724268288,2724268415,MX
+2724268416,2724790271,US
2724790272,2724855807,CN
2724855808,2724921343,CA
2724921344,2725249023,US
2725249024,2725314559,NZ
-2725314560,2725543423,US
-2725543424,2725543679,EU
-2725543680,2725904383,US
+2725314560,2725904383,US
2725904384,2725969919,VE
2725969920,2727018495,US
2727018496,2727084031,CA
2727084032,2727411711,US
2727411712,2727608319,AU
2727608320,2728132607,US
-2728394752,2731540479,US
+2728132608,2728263679,CA
+2728263680,2731543551,US
+2731543552,2731544575,CA
+2731544576,2731549695,US
+2731549696,2731550719,CA
+2731550720,2731555839,US
+2731555840,2731556863,CA
+2731556864,2731560959,US
+2731560960,2731561983,CA
+2731561984,2731563007,US
+2731563008,2731564031,CA
+2731564032,2731566079,US
+2731566080,2731567103,CA
+2731567104,2731573247,US
+2731573248,2731606015,CA
+2731606016,2731673599,US
+2731673600,2731674623,CA
+2731674624,2731679743,US
+2731679744,2731680767,CA
+2731680768,2731681791,US
+2731681792,2731682815,PR
+2731682816,2731685887,US
+2731685888,2731686911,CA
+2731686912,2731688959,US
+2731688960,2731689983,VG
+2731689984,2731711487,US
+2731711488,2731712511,AG
+2731712512,2731714559,CA
+2731714560,2731717631,US
+2731717632,2731718655,CA
+2731718656,2731728895,US
+2731728896,2731729919,CA
+2731729920,2731761663,US
+2731761664,2731763711,CA
+2731763712,2731765759,US
+2731765760,2731767807,CA
+2731767808,2731771903,US
+2731771904,2731772927,KY
+2731772928,2731784191,US
+2731784192,2731785215,CA
+2731785216,2731786239,US
+2731786240,2731788287,CA
+2731788288,2731790335,US
+2731790336,2731792383,CA
+2731792384,2731795455,US
+2731795456,2731796479,DE
+2731796480,2731797503,CA
+2731797504,2731800575,US
+2731800576,2731801599,CA
+2731801600,2731804671,US
+2731804672,2731805695,CA
+2731805696,2731806719,BB
+2731806720,2731807743,US
+2731807744,2731808767,CA
+2731808768,2731819007,US
+2731819008,2731821055,CA
+2731821056,2731828223,US
+2731828224,2731829247,CA
+2731829248,2731831295,US
+2731831296,2731832319,CA
+2731832320,2731843583,US
+2731843584,2731845631,PR
+2731845632,2731853823,US
+2731853824,2731855871,CA
+2731855872,2731856895,VC
+2731856896,2731862015,US
+2731862016,2731864063,CA
+2731864064,2731870207,US
+2731870208,2731871231,CA
+2731871232,2731894783,US
+2731894784,2731896831,CA
+2731896832,2731902975,US
+2731902976,2731903999,CA
+2731904000,2731908095,US
+2731908096,2731909119,CA
+2731909120,2731911167,US
+2731911168,2731912191,DM
+2731912192,2731921663,US
+2731921664,2731921727,BE
+2731921728,2732086271,US
+2732086272,2732087295,CA
+2732087296,2732105727,US
+2732105728,2732107775,JM
+2732107776,2732111871,US
+2732111872,2732113919,CA
+2732113920,2732189695,US
+2732189696,2732192767,CA
+2732192768,2732201983,US
+2732201984,2732203007,VG
+2732203008,2732204031,US
+2732204032,2732206079,CA
+2732206080,2732220159,US
+2732220160,2732220400,CA
+2732220401,2732220401,US
+2732220402,2732220415,CA
+2732220416,2732227583,US
+2732227584,2732228607,CA
+2732228608,2732261375,US
+2732261376,2732262399,CA
+2732262400,2732263423,US
+2732263424,2732265471,CA
+2732265472,2732273663,US
+2732273664,2732275711,CA
+2732275712,2732278783,US
+2732278784,2732279807,CA
+2732279808,2732302335,US
+2732302336,2732303359,CA
+2732303360,2732306431,US
+2732306432,2732307455,CA
+2732307456,2732308479,US
+2732308480,2732310527,CA
+2732310528,2732320767,US
+2732320768,2732321023,AU
+2732321024,2732321279,BM
+2732321280,2732321535,CA
+2732321536,2732321791,GB
+2732321792,2732322815,CA
+2732322816,2732336127,US
+2732336128,2732337151,CA
+2732337152,2732351487,US
+2732351488,2732353535,PR
+2732353536,2732361727,US
+2732361728,2732363775,BB
+2732363776,2732375039,US
+2732375040,2732376063,CA
+2732376064,2732379135,US
+2732379136,2732380159,CA
+2732380160,2732389887,US
+2732389888,2732390143,IT
+2732390144,2732390399,US
+2732390400,2732391423,CA
+2732391424,2732395519,US
+2732395520,2732396543,CA
+2732396544,2732423167,US
+2732423168,2732425215,CA
+2732425216,2732443647,US
+2732443648,2732445695,CA
+2732445696,2732446719,US
+2732446720,2732447743,BM
+2732447744,2732455935,US
+2732455936,2732457983,CA
+2732457984,2732472319,US
+2732472320,2732474367,CA
+2732474368,2732475391,US
+2732475392,2732476415,CA
+2732476416,2732478463,US
+2732478464,2732479487,CA
+2732479488,2732480511,AG
+2732480512,2732485631,US
+2732485632,2732486655,PR
+2732486656,2732488703,US
+2732488704,2732490751,CA
+2732490752,2732492799,US
+2732492800,2732493823,CA
+2732493824,2732494847,US
+2732494848,2732495871,CA
+2732495872,2732497919,US
+2732497920,2732499967,CA
+2732499968,2732500223,US
+2732500224,2732500479,TW
+2732500480,2732515327,US
+2732515328,2732516351,VG
+2732516352,2732523519,US
+2732523520,2732525567,CA
+2732525568,2732534783,US
+2732534784,2732536831,CA
+2732536832,2732549119,US
+2732549120,2732550143,CA
+2732550144,2732580863,US
+2732580864,2732582911,CA
+2732582912,2733903871,US
+2733903872,2733904895,PR
+2733904896,2733907967,CA
+2733907968,2733911039,US
+2733911040,2733912063,CA
+2733912064,2733922303,US
+2733922304,2733923327,CA
+2733923328,2733930495,US
+2733930496,2733931519,CA
+2733931520,2733942783,US
+2733942784,2733943807,PR
+2733943808,2733953023,US
+2733953024,2733954047,CA
+2733954048,2733958143,US
+2733958144,2733959167,CA
+2733959168,2733963263,US
+2733963264,2733964287,CA
+2733964288,2733977599,US
+2733978624,2733979647,US
+2733979648,2733980671,CA
+2733980672,2733984767,US
+2733984768,2733985791,VC
+2733985792,2734002175,US
+2734002176,2734003199,CA
+2734003200,2734004223,US
+2734004224,2734005247,GD
+2734005248,2734018559,US
+2734018560,2734020607,CA
+2734020608,2734026751,US
+2734026752,2734030847,CA
+2734030848,2734031871,JM
+2734031872,2734032895,US
+2734032896,2734034943,CA
+2734034944,2734044159,US
+2734044160,2734045183,CA
+2734045184,2734057471,US
+2734057472,2734059519,BB
+2734059520,2734063615,US
+2734063616,2734064639,CA
+2734064640,2734070783,US
+2734070784,2734071807,CA
+2734071808,2734074879,US
+2734074880,2734075903,PR
+2734075904,2734077951,US
+2734077952,2734078207,GB
+2734078208,2734099455,US
+2734099456,2734102527,CA
+2734102528,2734104575,VI
+2734104576,2734105599,US
+2734105600,2734106623,CA
+2734106624,2734119935,US
+2734119936,2734120959,CA
+2734120960,2734123007,VG
+2734123008,2734125055,US
+2734125056,2734129151,CA
+2734129152,2734139391,US
+2734139392,2734140415,CA
+2734140416,2734152703,US
+2734152704,2734153727,KY
+2734153728,2734155775,CA
+2734155776,2734163967,US
+2734163968,2734164991,CA
+2734164992,2734170111,US
+2734170112,2734172159,CA
+2734172160,2734173183,US
+2734173184,2734174207,PR
+2734174208,2734192639,US
+2734192640,2734194687,CA
+2734194688,2734197759,US
+2734197760,2734198783,CA
+2734198784,2734200831,US
+2734200832,2734205951,CA
+2734205952,2734206975,US
+2734206976,2734209023,CA
+2734209024,2734229503,US
+2734229504,2734230527,CA
+2734230528,2734237695,US
+2734237696,2734238719,CA
+2734238720,2734249983,US
+2734249984,2734252031,CA
+2734252032,2734260223,US
+2734260224,2734262271,KY
+2734262272,2734268415,US
+2734268416,2734269439,CA
+2734269440,2734287871,US
+2734287872,2734288895,CA
+2734288896,2734296063,US
+2734296064,2734297087,CA
+2734297088,2734304255,US
+2734304256,2734305279,CA
+2734305280,2734335999,US
+2734336000,2734338047,CA
+2734338048,2734341119,US
+2734341120,2734344191,CA
+2734344192,2734349311,US
+2734349312,2734350335,CA
+2734350336,2734362623,US
+2734362624,2734363647,CA
+2734363648,2734364671,VG
+2734364672,2734373887,US
+2734373888,2734374911,CA
+2734374912,2734376959,US
+2734376960,2734379007,CA
+2734379008,2734381055,VG
+2734381056,2734389247,US
+2734389248,2734390271,CA
+2734390272,2734398463,US
+2734398464,2734399487,PR
+2734399488,2734407679,US
+2734407680,2734409727,CA
+2734409728,2734435327,US
+2734435328,2734436351,CA
+2734436352,2734447615,US
+2734447616,2734448639,CA
+2734448640,2734452735,US
+2734452736,2734454783,CA
+2734454784,2734457855,US
+2734457856,2734458879,CA
+2734458880,2734471167,US
+2734471168,2734472191,CA
+2734472192,2734473215,AG
+2734473216,2734479359,US
+2734479360,2734481407,CA
+2734481408,2734485503,US
+2734485504,2734486527,CA
+2734486528,2734488575,US
+2734488576,2734489599,CA
+2734489600,2734491647,US
+2734491648,2734492671,CA
+2734492672,2734502911,US
+2734502912,2734503935,CA
+2734503936,2734515199,US
+2734515200,2734516223,DM
+2734516224,2734522367,US
+2734522368,2734523391,CA
+2734523392,2734524415,US
+2734524416,2734526463,CA
+2734526464,2734532607,US
+2734532608,2734533631,VI
+2734533632,2734542847,US
+2734542848,2734544895,CA
+2734544896,2734553087,US
+2734553088,2734555135,CA
+2734555136,2734565375,US
+2734565376,2734566399,CA
+2734566400,2734588927,US
+2734588928,2734589951,CA
+2734589952,2734599167,US
+2734599168,2734600191,CA
+2734600192,2734603263,US
+2734603264,2734604287,AI
+2734604288,2734633983,US
+2734633984,2734635007,CA
+2734635008,2734649343,US
+2734649344,2734650367,CA
+2734650368,2734657535,US
+2734657536,2734658559,VG
+2734658560,2734659583,CA
+2734659584,2734665727,US
+2734665728,2734666751,CA
+2734666752,2734673919,US
2734686208,2734751743,CN
2734751744,2734817279,GB
2734817280,2734882815,US
@@ -86920,7 +42851,10 @@
2736848896,2736914431,US
2736914432,2736979967,NO
2736979968,2737438719,US
-2737438720,2738749439,JP
+2737438720,2737799167,JP
+2737799168,2737800191,NZ
+2737800192,2738094079,JP
+2738225152,2738749439,JP
2738749440,2742353919,FR
2742353920,2742419455,ES
2742419456,2742484991,US
@@ -86941,9 +42875,7 @@
2744713216,2744844287,US
2744844288,2744909823,CA
2744909824,2744975359,GB
-2744975360,2745040383,SE
-2745040384,2745040639,EU
-2745040640,2745040895,SE
+2744975360,2745040895,SE
2745040896,2745106431,DE
2745106432,2745171967,SI
2745171968,2745237503,GB
@@ -86964,7 +42896,9 @@
2746351616,2746417151,CR
2746417152,2746482687,CN
2746482688,2746548223,KR
-2746548224,2747072511,US
+2746548224,2746824703,US
+2746824704,2746824959,CA
+2746824960,2747072511,US
2747072512,2747138047,AU
2747138048,2747465727,US
2747465728,2748055551,ZA
@@ -86972,7 +42906,8 @@
2748121088,2748317695,US
2748317696,2748645375,JP
2748645376,2748710911,KR
-2748710912,2749235199,JP
+2748710912,2748841983,JP
+2748907520,2749235199,JP
2749235200,2749300735,KR
2749300736,2749628415,JP
2749628416,2749693951,US
@@ -86981,9 +42916,9 @@
2749890560,2750021631,AU
2750021632,2750349311,US
2750349312,2750414847,KR
-2750414848,2750692863,US
-2750692864,2750693375,EU
-2750693376,2750873599,US
+2750414848,2750724351,US
+2750724352,2750724607,TW
+2750724608,2750873599,US
2750873600,2750939135,CL
2750939136,2751070207,US
2751070208,2751135743,CL
@@ -86994,9 +42929,7 @@
2751660032,2751716351,AT
2751716352,2751716607,US
2751716608,2751725567,AT
-2751725568,2751729951,SE
-2751729952,2751729953,EU
-2751729954,2751791103,SE
+2751725568,2751791103,SE
2751791104,2751856639,FI
2751856640,2751922175,GB
2751922176,2751987711,FR
@@ -87016,7 +42949,6 @@
2754125824,2754127871,DE
2754127872,2754129919,SK
2754129920,2754131967,SE
-2754131968,2754134015,PL
2754134016,2754138111,DE
2754138112,2754142207,GB
2754142208,2754144255,BA
@@ -87035,12 +42967,8 @@
2755002368,2755330047,US
2755330048,2755395583,DE
2755395584,2755461119,FR
-2755461120,2755514879,DE
-2755514880,2755515135,EU
-2755515136,2755526655,DE
-2755526656,2755592191,US
-2755592192,2755657727,GB
-2755657728,2755985407,US
+2755461120,2755526655,DE
+2755526656,2755985407,US
2755985408,2756182015,JP
2756182016,2756247551,US
2756247552,2756313087,UY
@@ -87075,18 +43003,8 @@
2759065600,2759589887,US
2759589888,2759720959,KR
2759720960,2759852031,PL
-2759852032,2759883439,CH
-2759883440,2759883443,LI
-2759883444,2759883451,CH
-2759883452,2759883455,LI
-2759883456,2759884111,CH
-2759884112,2759884115,GB
-2759884116,2759894559,CH
-2759894560,2759894563,LI
-2759894564,2759917567,CH
-2759917568,2759917823,FR
-2759917824,2759918079,EU
-2759918080,2759983103,FR
+2759852032,2759917567,CH
+2759917568,2759983103,FR
2759983104,2760048639,IT
2760048640,2760114175,FR
2760114176,2760179711,IT
@@ -87112,9 +43030,7 @@
2760562688,2760564735,BG
2760564736,2760566783,GB
2760566784,2760568831,IQ
-2760568832,2760569351,FR
-2760569352,2760569355,CH
-2760569356,2760570879,FR
+2760568832,2760570879,FR
2760570880,2760572927,NL
2760572928,2760638463,DE
2760638464,2760703999,NL
@@ -87123,14 +43039,12 @@
2760835072,2760898559,GB
2760898560,2760899583,US
2760899584,2760900607,GB
-2760900608,2760932096,US
-2760932097,2760932097,EU
-2760932098,2761031679,US
+2760900608,2761031679,US
2761031680,2761424895,ZA
2761424896,2761621503,US
2761621504,2761687039,ZA
2761687040,2761949183,US
-2761949184,2762211327,JP
+2762014720,2762145791,JP
2762211328,2762276863,IN
2762276864,2762342399,US
2762342400,2762407935,CA
@@ -87144,17 +43058,15 @@
2763128832,2763194367,CA
2763194368,2765553663,US
2765553664,2765561855,CY
-2765561856,2765562031,FI
-2765562032,2765562047,SE
-2765562048,2765562367,FI
-2765562368,2765562383,RU
-2765562384,2765563903,FI
+2765561856,2765563903,FI
2765563904,2765565951,IR
2765565952,2765567999,RU
2765568000,2765570047,IR
2765570048,2765578239,RU
2765578240,2765580287,AZ
-2765580288,2765582335,GB
+2765580288,2765581567,GB
+2765581568,2765581823,ZA
+2765581824,2765582335,GB
2765582336,2765586431,CZ
2765586432,2765619199,IR
2765619200,2768240639,US
@@ -87173,12 +43085,15 @@
2769879040,2769944575,ZA
2769944576,2770272255,US
2770272256,2770337791,AU
-2770337792,2772631551,US
+2770337792,2770993151,US
+2770993152,2771124223,IN
+2771124224,2771451903,US
+2772434944,2772631551,US
2772631552,2772697087,AU
2772697088,2772762623,US
2772762624,2772828159,AU
2772828160,2773010431,US
-2773010432,2773010687,EU
+2773010432,2773010687,CZ
2773010688,2773024767,US
2773090304,2773221375,US
2773221376,2773286911,JP
@@ -87186,7 +43101,8 @@
2773745664,2773811199,NZ
2773811200,2773876735,US
2773876736,2773942271,AU
-2773942272,2774335487,US
+2773942272,2774138879,US
+2774204416,2774335487,US
2774335488,2774401023,JP
2774401024,2774532095,US
2774532096,2774597631,JP
@@ -87197,18 +43113,14 @@
2775318528,2775384063,JP
2775384064,2775711743,US
2775711744,2775777279,NL
-2775777280,2775806207,CA
-2775806208,2775806463,US
-2775806464,2775842815,CA
+2775777280,2775842815,CA
2775842816,2775973887,US
2775973888,2776039423,AU
-2776039424,2776478207,US
-2776478208,2776478463,EU
-2776478464,2776478975,US
+2776039424,2776104959,US
+2776104960,2776170495,GB
+2776170496,2776478975,US
2776478976,2776479231,AU
-2776479232,2776697614,US
-2776697615,2776697615,EU
-2776697616,2776891391,US
+2776479232,2776891391,US
2776891392,2777022463,KR
2777022464,2777481215,US
2777481216,2777546751,KR
@@ -87217,9 +43129,9 @@
2778071040,2778333183,US
2778333184,2778398719,CA
2778398720,2779054079,US
-2779054080,2779070463,SZ
-2779070464,2779119615,ZA
-2779119616,2779906047,US
+2779054080,2779119615,ZA
+2779119616,2779316223,US
+2779381760,2779906047,US
2779906048,2779971583,CA
2779971584,2780037119,US
2780037120,2780102655,ZA
@@ -87231,92 +43143,32 @@
2780495872,2780561407,AU
2780561408,2780758015,US
2780758016,2780823551,AU
-2780823552,2780904159,US
-2780904160,2780904191,CA
-2780904192,2780909887,US
-2780909888,2780909903,CA
-2780909904,2780921359,US
-2780921360,2780921367,GB
-2780921368,2780925951,US
+2780823552,2780925951,US
2780925952,2780926207,GB
-2780926208,2780926271,US
-2780926272,2780926303,FR
-2780926304,2780926319,IT
-2780926320,2780926327,GB
-2780926328,2780926335,US
-2780926336,2780926367,GB
-2780926368,2780926823,US
-2780926824,2780926879,GB
-2780926880,2780926911,US
-2780926912,2780926927,GB
-2780926928,2780926975,US
+2780926208,2780926975,US
2780926976,2780927487,GB
2780927488,2780927743,US
-2780927744,2780928127,GB
-2780928128,2780928287,US
-2780928288,2780928303,GB
-2780928304,2780928383,US
-2780928384,2780928415,GB
-2780928416,2780928447,US
-2780928448,2780928455,GB
-2780928456,2780928463,US
-2780928464,2780928471,DE
-2780928472,2780929023,US
+2780927744,2780927999,GB
+2780928000,2780929023,US
2780929024,2780929279,GB
2780929280,2780929791,FR
2780929792,2780930047,US
2780930048,2780930559,GB
-2780930560,2780930879,US
-2780930880,2780930927,GB
-2780930928,2780930943,US
-2780930944,2780930959,GB
-2780930960,2780930975,FR
-2780930976,2780931007,US
-2780931008,2780931039,GB
-2780931040,2780931071,US
+2780930560,2780931071,US
2780931072,2780932351,GB
2780932352,2780932607,US
2780932608,2780933119,GB
-2780933120,2780933151,US
-2780933152,2780933191,GB
-2780933192,2780933247,US
-2780933248,2780933631,GB
+2780933120,2780933375,US
+2780933376,2780933631,GB
2780933632,2780933887,US
2780933888,2780934143,GB
-2780934144,2780934167,PL
-2780934168,2780934567,US
-2780934568,2780934575,GB
-2780934576,2780934719,US
-2780934720,2780934783,NL
-2780934784,2780940367,US
-2780940368,2780940383,CA
-2780940384,2780941055,US
-2780941056,2780941087,GB
-2780941088,2780941719,US
-2780941720,2780941727,GB
-2780941728,2780943575,US
-2780943576,2780943583,BM
-2780943584,2780945311,US
-2780945312,2780945375,BM
-2780945376,2780945663,US
-2780945664,2780945695,BM
-2780945696,2780946127,US
-2780946128,2780946135,CA
-2780946136,2780947903,US
-2780947904,2780947967,MY
-2780947968,2780948815,US
-2780948816,2780948823,MY
-2780948824,2780952967,US
-2780952968,2780952975,GB
-2780952976,2780954623,US
+2780934144,2780954623,US
2780954624,2781020159,KR
2781020160,2781478911,US
2781478912,2781544447,HK
-2781544448,2781623807,US
-2781623808,2781624319,CA
-2781624320,2781629951,US
-2781629952,2781630207,EU
-2781630208,2781675519,US
+2781544448,2781624063,US
+2781624064,2781624319,CA
+2781624320,2781675519,US
2781675520,2781741055,NZ
2781741056,2781937663,US
2781937664,2782003199,TH
@@ -87328,15 +43180,11 @@
2782658560,2782724095,PH
2782724096,2782789631,US
2782789632,2782855167,CH
-2782855168,2783020735,US
-2783020736,2783020751,IN
-2783020752,2783020863,US
-2783020864,2783020879,GB
-2783020880,2783182847,US
+2782855168,2783182847,US
2783182848,2783248383,AU
2783248384,2783313919,KR
2783313920,2783379455,US
-2783379456,2783444991,ZA
+2783379456,2783444991,SC
2783444992,2783510527,US
2783510528,2783576063,ZA
2783576064,2783969279,US
@@ -87345,87 +43193,20 @@
2784165888,2784296959,KR
2784296960,2784362495,US
2784362496,2784428031,KR
-2784428032,2785542143,US
+2784428032,2784952319,US
+2785017856,2785300735,US
+2785300736,2785300991,PR
+2785300992,2785542143,US
2785542144,2786066431,CH
2786066432,2788163583,US
2788163584,2788229119,CA
-2788229120,2788229935,US
-2788229936,2788229943,GB
-2788229944,2788230663,US
-2788230664,2788230679,GB
-2788230680,2788230703,US
-2788230704,2788230719,GB
-2788230720,2788230727,CH
-2788230728,2788230735,GB
-2788230736,2788231751,US
-2788231752,2788231759,SG
-2788231760,2788232583,US
-2788232584,2788232591,SG
-2788232592,2788232599,US
-2788232600,2788232607,SG
-2788232608,2788232959,US
-2788232960,2788232967,GB
-2788232968,2788233263,US
-2788233264,2788233271,GB
-2788233272,2788234279,US
-2788234280,2788234287,CA
-2788234288,2788234767,US
-2788234768,2788234775,GB
-2788234776,2788235295,US
-2788235296,2788235311,SG
-2788235312,2788235327,US
-2788235328,2788235335,SG
-2788235336,2788238847,US
-2788238848,2788238855,GB
-2788238856,2788238911,US
-2788238912,2788238919,GB
-2788238920,2788241447,US
-2788241448,2788241455,GB
-2788241456,2788243471,US
-2788243472,2788243487,SG
-2788243488,2788243511,US
-2788243512,2788243519,SG
-2788243520,2788245007,US
-2788245008,2788245023,CA
-2788245024,2788247863,US
-2788247864,2788247871,GB
-2788247872,2788249887,US
-2788249888,2788249895,AU
-2788249896,2788253183,US
-2788253184,2788253191,JP
-2788253192,2788261887,US
+2788229120,2788261887,US
2788261888,2788294655,GB
2788294656,2789113855,US
2789113856,2789146623,CA
-2789146624,2789147159,US
-2789147160,2789147167,NG
-2789147168,2789147277,US
-2789147278,2789147279,PH
-2789147280,2789147895,US
-2789147896,2789147903,NG
-2789147904,2789148583,US
-2789148584,2789148591,NG
-2789148592,2789148623,US
-2789148624,2789148631,QA
-2789148632,2789149351,US
-2789149352,2789149359,PA
-2789149360,2789149463,US
-2789149464,2789149471,SA
-2789149472,2789149479,US
-2789149480,2789149487,IN
-2789149488,2789149559,US
-2789149560,2789149567,PK
-2789149568,2789149607,US
-2789149608,2789149615,CA
-2789149616,2789149647,US
-2789149648,2789149655,RU
-2789149656,2789149679,US
-2789149680,2789149687,SA
-2789149688,2789149695,US
-2789149696,2789149703,IT
-2789149704,2789149783,US
-2789149784,2789149791,NG
-2789149792,2789212159,US
+2789146624,2789200895,US
+2789200896,2789201151,GB
+2789201152,2789212159,US
2789212160,2789277695,AU
2789277696,2789343231,NZ
2789343232,2789933055,US
@@ -87439,7 +43220,9 @@
2790588416,2790653951,ZA
2790653952,2790719487,US
2790719488,2790785023,SA
-2790785024,2791571455,US
+2790785024,2791112703,US
+2791170304,2791170559,US
+2791178240,2791571455,US
2791571456,2791636991,JP
2791636992,2791768063,US
2791768064,2791899135,KR
@@ -87457,39 +43240,13 @@
2793209856,2793275391,KR
2793275392,2796748799,US
2796748800,2796814335,NZ
-2796814336,2798393343,US
-2798393344,2798394367,PR
-2798394368,2798412543,US
-2798412544,2798412799,PR
-2798412800,2798429439,US
-2798429440,2798430207,PR
-2798430208,2798452223,US
-2798452224,2798452479,PR
-2798452480,2798784511,US
-2798784512,2798786559,CO
-2798786560,2798821375,US
-2798821376,2798829567,CO
-2798829568,2798838015,US
+2796814336,2797646591,US
+2797646592,2797646847,VI
+2797646848,2798838015,US
2798838016,2798838271,CO
-2798838272,2799086335,US
-2799086336,2799086591,PR
-2799086592,2799097855,US
-2799097856,2799099903,PR
-2799099904,2800567295,US
-2800567296,2800567807,PA
-2800567808,2800600319,US
-2800600320,2800600575,PA
-2800600576,2800607743,US
-2800607744,2800607999,PA
-2800608000,2800609023,US
-2800609024,2800609791,PA
-2800609792,2800610303,US
-2800610304,2800610559,PA
-2800610560,2800637951,US
-2800637952,2800639999,CO
-2800640000,2802386186,US
-2802386187,2802386187,EU
-2802386188,2802515967,US
+2798838272,2801795071,US
+2801795072,2801860607,CO
+2801860608,2802515967,US
2802515968,2802581503,CA
2802581504,2802909183,US
2802909184,2802974719,CA
@@ -87498,25 +43255,46 @@
2803695616,2803761151,US
2803761152,2803826687,AU
2803826688,2803892223,US
-2803892224,2805989375,CA
-2805989376,2806644735,US
+2803892224,2805465087,CA
+2805465088,2805989375,UY
+2805989376,2806012927,US
+2806012928,2806013183,HK
+2806013184,2806644735,US
2806644736,2806710271,CA
2806710272,2807103487,US
2807103488,2807169023,NL
-2807169024,2807236863,US
-2807236864,2807237119,EU
-2807237120,2807259647,US
-2807259648,2807260159,AP
-2807260160,2807267327,US
-2807267328,2807275519,AU
-2807275520,2807824383,US
+2807169024,2807566335,US
+2807566336,2807574527,CA
+2807574528,2807587071,US
+2807587072,2807587327,IT
+2807587328,2807587583,QA
+2807587584,2807587839,IN
+2807587840,2807588095,AE
+2807588096,2807588351,ES
+2807588352,2807588863,CN
+2807588864,2807589119,JP
+2807589120,2807589375,RO
+2807589376,2807589631,FR
+2807589632,2807589887,PT
+2807589888,2807590143,AT
+2807590144,2807590399,MT
+2807590400,2807590655,GR
+2807590656,2807590911,SA
+2807590912,2807595007,US
+2807595008,2807599103,CA
+2807599104,2807607295,US
+2807607296,2807611391,CA
+2807611392,2807824383,US
2807824384,2807889919,CA
2807889920,2808545279,US
2808545280,2808610815,AU
2808610816,2808872959,US
+2808872960,2808938495,UY
2808938496,2809069567,US
2809069568,2809135103,SA
-2809135104,2809855999,US
+2809135104,2809397247,US
+2809397248,2809462783,UY
+2809462784,2809855999,US
2809856000,2809921535,AU
2809921536,2809987071,US
2809987072,2810052607,CA
@@ -87527,7 +43305,9 @@
2810576896,2810642431,VE
2810642432,2810904575,US
2810904576,2810970111,CN
-2810970112,2811559935,US
+2810970112,2811428863,US
+2811428864,2811494399,CA
+2811494400,2811559935,US
2811559936,2811625471,CH
2811625472,2812084223,US
2812084224,2812149759,BO
@@ -87559,12 +43339,10 @@
2813329408,2813526015,US
2813526016,2813591551,NZ
2813591552,2813908479,US
-2813908480,2813908735,SG
+2813908480,2813908735,AU
2813908736,2814181375,US
2814181376,2814246911,AU
-2814246912,2814377215,US
-2814377216,2814377471,EU
-2814377472,2815033343,US
+2814246912,2815033343,US
2815033344,2815098879,NL
2815098880,2815111347,GB
2815111348,2815111348,US
@@ -87573,71 +43351,49 @@
2815139584,2815164415,GB
2815164416,2815229951,US
2815229952,2815295487,ID
-2815295488,2815986687,US
-2815986688,2815986815,GB
-2815986816,2815986831,US
-2815986832,2815987215,GB
-2815987216,2815987231,US
-2815987232,2815987271,GB
-2815987272,2815987327,US
-2815987328,2815987391,GB
-2815987392,2815987711,US
-2815987712,2815988351,FR
-2815988352,2815988383,GB
-2815988384,2815988479,US
-2815988480,2815988543,GB
-2815988544,2815988551,US
-2815988552,2815988559,GB
-2815988560,2816001151,US
-2816001152,2816001183,DE
-2816001184,2816004703,US
-2816004704,2816004711,GB
-2816004712,2816008191,US
-2816008192,2816008207,IE
-2816008208,2816159743,US
+2815295488,2815986943,US
+2815986944,2815987199,GB
+2815987200,2816159743,US
2816159744,2816159999,IN
-2816160000,2816671743,US
+2816160000,2816262143,US
+2816262144,2816263167,IE
+2816263168,2816264191,GB
+2816264192,2816264447,IE
+2816264448,2816264703,GB
+2816264704,2816270335,US
+2816270336,2816271615,SG
+2816271616,2816271871,JP
+2816271872,2816272383,IN
+2816272384,2816273407,JP
+2816273408,2816275455,IN
+2816275456,2816671743,US
2816671744,2816737279,CA
-2816737280,2817059071,US
-2817059072,2817059327,AP
-2817059328,2817060863,US
-2817060864,2817061119,EU
+2816737280,2817061119,US
2817061120,2817062911,LU
-2817062912,2817325055,US
-2817325056,2817325311,EU
-2817325312,2817933055,US
+2817062912,2817933055,US
2817933056,2817933311,CA
-2817933312,2817986303,US
-2817986304,2817986559,AP
-2817986560,2818003711,US
+2817933312,2817933567,PR
+2817933568,2818003711,US
2818003712,2818003722,GB
-2818003723,2818003723,EU
+2818003723,2818003723,US
2818003724,2818003967,GB
-2818003968,2818038537,US
-2818038538,2818038538,AP
-2818038539,2818310143,US
+2818003968,2818113535,US
+2818244608,2818310143,US
2818310144,2818375679,AR
2818375680,2818572287,US
2818637824,2818703359,CH
-2818703360,2822848997,US
-2822848998,2822848998,EU
-2822848999,2823159807,US
+2818703360,2822731894,US
+2822731895,2822731895,GB
+2822731896,2823159807,US
2823159808,2823225343,HK
2823225344,2823553023,US
2823553024,2823618559,ZA
2823618560,2823684095,PA
2823684096,2823749631,KR
-2823749632,2823815167,JP
2823815168,2823946239,ZA
2823946240,2824011775,US
2824011776,2824077311,AR
-2824077312,2824274687,US
-2824274688,2824274720,CH
-2824274721,2824274721,EU
-2824274722,2824274943,CH
-2824274944,2824289279,US
-2824289280,2824289535,GB
-2824289536,2824357375,US
+2824077312,2824357375,US
2824357376,2824357631,GB
2824357632,2824404991,US
2824404992,2824470527,ZA
@@ -87669,19 +43425,7 @@
2827747328,2827812863,AU
2827812864,2827878399,US
2827878400,2827943935,ZA
-2827943936,2827972607,US
-2827972608,2827973631,US
-2827973632,2827974015,US
-2827974016,2827974143,US
-2827974144,2827974655,US
-2827974656,2827974783,US
-2827974784,2827975487,US
-2827975488,2827975551,US
-2827975552,2827991471,US
-2827991472,2827991487,US
-2827991488,2827991503,US
-2827991504,2827991519,US
-2827991520,2828009471,US
+2827943936,2828009471,US
2828009472,2828075007,CA
2828075008,2828533759,US
2828533760,2828664831,AU
@@ -87694,8 +43438,8 @@
2829041920,2829058047,US
2829058048,2829123583,CN
2829123584,2829148159,US
-2829148160,2829148415,HK
-2829148416,2829174783,US
+2829148160,2829148671,HK
+2829148672,2829174783,US
2829174784,2829175807,GB
2829175808,2829176319,US
2829176320,2829176831,DE
@@ -87715,40 +43459,24 @@
2829385728,2829451263,MX
2829451264,2829516799,US
2829516800,2829582335,BW
-2829582336,2829591033,US
-2829591034,2829591034,EU
-2829591035,2829593343,US
-2829593344,2829593599,EU
-2829593600,2829844479,US
+2829582336,2829590783,US
+2829590784,2829591033,GB
+2829591034,2829591034,US
+2829591035,2829591039,GB
+2829591040,2829844479,US
2829844480,2829910015,ZA
2829910016,2830066431,US
2830066432,2830066687,HK
2830066688,2830106623,US
2830106624,2830172159,CO
2830172160,2830434303,US
-2830499840,2830586879,US
-2830586880,2830587135,EU
-2830587136,2830761983,US
+2830499840,2830761983,US
2830761984,2830827519,AU
-2830827520,2830830335,KW
-2830830336,2830830591,US
-2830830592,2830845183,KW
-2830845184,2830845439,US
-2830845440,2830852351,KW
-2830852352,2830853119,US
-2830853120,2830853375,KW
-2830853376,2830853631,US
-2830853632,2830853887,KW
-2830853888,2830854143,US
-2830854144,2830855935,KW
-2830855936,2830856191,US
-2830856192,2830893055,KW
+2830827520,2830893055,KW
2830893056,2830958591,KR
2830958592,2831286271,US
2831548416,2831613951,AU
-2831613952,2831810559,US
-2831810560,2831876095,IT
-2831876096,2832007167,US
+2831613952,2832007167,US
2832072704,2832138239,ZA
2832138240,2832269311,US
2832269312,2832400383,ZA
@@ -87758,9 +43486,7 @@
2832924672,2832990207,KR
2832990208,2833252621,US
2833252622,2833252622,GB
-2833252623,2833293311,US
-2833293312,2833293567,EU
-2833293568,2833383423,US
+2833252623,2833383423,US
2833383424,2833448959,AR
2833580032,2833707007,US
2833707008,2833707263,GB
@@ -87777,49 +43503,57 @@
2835087360,2835152895,AU
2835218432,2835283967,US
2835283968,2835349503,MX
-2835349504,2837446655,US
+2835480576,2837446655,US
2837446656,2839543807,CH
-2839543808,2840015359,US
-2840015360,2840015615,GB
-2840015616,2843803647,US
+2839543808,2843803647,US
2843803648,2843869183,ZA
2843869184,2844524543,US
2844524544,2844590079,KR
2844590080,2844783359,US
2844783360,2844783615,AU
2844783616,2844784639,DE
-2844784640,2844902655,US
+2844784640,2844862975,US
+2844862976,2844863231,CA
+2844863232,2844884991,US
+2844884992,2844885247,FR
+2844885248,2844902655,US
2844902656,2844902911,SG
2844902912,2844912639,US
2844912640,2844912895,JP
2844912896,2845704191,US
-2845704192,2845755391,CU
-2845755392,2845755647,EU
-2845755648,2845769727,CU
-2845835264,2848522239,US
+2845704192,2845769727,CU
+2845835264,2848212991,US
+2848212992,2848215039,GB
+2848215040,2848244735,US
+2848244736,2848245759,GB
+2848245760,2848276479,US
+2848325632,2848522239,US
2848522240,2848587775,AU
2848587776,2848653311,ZA
2848653312,2848980991,US
2848980992,2849964031,KR
2849964032,2850029567,HK
-2850029568,2851995647,US
-2852126720,2852716653,US
+2850029568,2851012607,US
+2851078144,2851995647,US
+2852192256,2852716653,US
2852716654,2852716654,AU
2852716655,2853306367,US
2853306368,2853371903,CL
2853371904,2853765119,US
2853765120,2853830655,MX
-2853830656,2854617087,US
+2853830656,2854289407,US
+2854289408,2854354943,MY
+2854354944,2854617087,US
2854617088,2854682623,MY
2854748160,2855469055,US
-2855469056,2855484415,PY
-2855484416,2855485439,AR
+2855469056,2855484671,PY
+2855484672,2855485439,AR
2855485440,2855501823,UY
2855501824,2855534591,AR
-2855534592,2855706623,US
-2855706624,2855706879,EU
-2855706880,2855811583,US
-2855811584,2855811839,DE
+2855534592,2855811583,US
+2855811584,2855811730,DE
+2855811731,2855811731,US
+2855811732,2855811839,DE
2855811840,2856058879,US
2856058880,2856124415,CH
2856124416,2856184831,US
@@ -87828,17 +43562,16 @@
2856452096,2856517631,BR
2856517632,2856714239,US
2856714240,2856779775,MX
-2856779776,2857369599,US
-2857697280,2857766655,US
-2857766656,2857766911,EU
-2857766912,2859007999,US
+2856779776,2857074687,US
+2857107456,2857238527,US
+2857697280,2858352639,US
+2858418176,2859007999,US
2859008000,2859073535,JP
2859073536,2861069055,US
2861069056,2861069311,GB
-2861069312,2861850623,US
-2861850624,2861850879,AP
+2861069312,2861850879,US
2861850880,2861851391,HK
-2861851392,2861851647,AP
+2861851392,2861851647,US
2861851648,2861861375,HK
2861861376,2861862911,US
2861862912,2861863167,AU
@@ -87851,45 +43584,37 @@
2862284800,2862350335,AR
2862350336,2862415871,US
2862415872,2862481407,AU
-2862481408,2862751999,US
-2862752000,2862752255,EU
-2862752256,2863202303,US
+2862481408,2863202303,US
2863202304,2863267839,MX
2863267840,2863595519,US
2863595520,2863661055,CA
-2863661056,2863857663,US
+2863661056,2863825919,US
+2863828992,2863857663,US
2863857664,2863923199,SG
2863923200,2864844799,US
2864844800,2864845055,NL
2864845056,2864848895,US
2864848896,2864849151,GB
-2864849152,2865417457,US
-2865417458,2865417458,GB
-2865417459,2865577983,US
+2864849152,2865417215,US
+2865417216,2865417471,GB
+2865417472,2865577983,US
2865577984,2865610751,BE
2865610752,2865889279,US
2865889280,2865954815,AR
-2865954816,2867593215,US
-2867593216,2867639295,CH
-2867639296,2867639551,AT
-2867639552,2867724287,CH
+2865954816,2867265535,US
+2867331072,2867396607,US
+2867462144,2867593215,US
+2867593216,2867724287,CH
2867855360,2868117503,US
-2868379648,2868605376,US
-2868605377,2868605377,NO
-2868605378,2868658175,US
-2868658176,2868660223,GB
-2868660224,2868660479,EU
-2868660480,2868662271,US
-2868662272,2868662527,EU
-2868662528,2868673279,US
-2868673280,2868673535,ZA
-2868673536,2868674336,US
-2868674337,2868674337,EU
-2868674338,2868674559,US
-2868674560,2868682751,AU
-2868682752,2868682752,US
-2868682753,2868682753,AP
-2868682754,2868772863,US
+2868379648,2868605183,US
+2868605184,2868605439,NO
+2868605440,2868658175,US
+2868658176,2868658431,GB
+2868658432,2868676607,US
+2868676608,2868676863,AU
+2868676864,2868689407,US
+2868689408,2868689663,AU
+2868689664,2868772863,US
2868838400,2868903935,BE
2868903936,2869035007,SG
2869035008,2869166079,JP
@@ -87897,17 +43622,9 @@
2869428224,2869952511,CN
2869952512,2870018047,FR
2870018048,2870083583,DE
-2870083584,2870087935,FR
-2870087936,2870088191,ES
-2870088192,2870088959,FR
-2870088960,2870088991,ES
-2870088992,2870089727,FR
-2870089728,2870090495,DE
-2870090496,2870090751,BE
-2870090752,2870091775,DE
-2870091776,2870095871,FR
-2870095872,2870096383,SG
-2870096384,2870149119,FR
+2870083584,2870089727,FR
+2870089728,2870091775,DE
+2870091776,2870149119,FR
2870149120,2870214655,HU
2870214656,2870280191,DK
2870280192,2870345727,NL
@@ -87925,8 +43642,7 @@
2870588160,2870588415,NL
2870588416,2870588927,HU
2870588928,2870589439,PL
-2870589440,2870590975,RU
-2870590976,2870591231,LV
+2870589440,2870591231,RU
2870591232,2870591487,IT
2870591488,2870591743,PL
2870591744,2870591999,SE
@@ -87957,7 +43673,7 @@
2870935552,2871001087,HU
2871001088,2871066623,SE
2871066624,2871083007,CH
-2871083008,2871099391,RO
+2871083008,2871099391,FR
2871099392,2871101439,NL
2871101440,2871103487,CZ
2871103488,2871104063,GB
@@ -87972,29 +43688,26 @@
2871130112,2871132159,RU
2871132160,2872049663,CN
2872049664,2873098239,IN
-2873098240,2873368575,US
-2873368576,2873368831,IN
-2873368832,2873369087,US
-2873369088,2873376767,IN
-2873376768,2873884671,US
+2873098240,2873884671,US
2873884672,2874146815,IN
2874146816,2875195391,CN
2875195392,2875719679,TH
2875719680,2877292543,CN
-2877292544,2879332607,US
-2879332608,2879332863,GB
-2879332864,2879336447,US
+2877292544,2879336447,US
2879336448,2879336959,GB
-2879336960,2879467519,US
-2879467520,2879468031,AP
-2879468032,2879469567,US
-2879469568,2879470079,AP
-2879470080,2882469887,US
+2879336960,2879469567,US
+2879469568,2879470079,IN
+2879470080,2881486847,US
+2881486848,2881487103,GB
+2881487104,2882469887,US
2882469888,2882535423,SG
2882535424,2883583999,CN
2883584000,2885681151,VN
-2885681152,2886729727,US
+2885681152,2886667007,US
+2886667008,2886667263,DE
+2886667264,2886729727,US
2887778304,2889875455,US
+2890414080,2890415103,ZA
2894069760,2894921727,US
2894921728,2895118335,GB
2895118336,2895301887,US
@@ -88010,7 +43723,9 @@
2897215488,2897739775,DE
2897739776,2898001919,FR
2898001920,2898132991,GB
-2898132992,2898788351,US
+2898132992,2898264063,US
+2898264064,2898264064,AU
+2898264065,2898788351,US
2898788352,2899050495,GB
2899050496,2899116031,FR
2899116032,2899148799,VN
@@ -88022,39 +43737,7 @@
2899574784,2899902463,GB
2899902464,2899967999,US
2899968000,2900099071,CA
-2900099072,2900361215,US
-2902458368,2902462463,US
-2902462464,2902470775,US
-2902470776,2902470777,BD
-2902470778,2902472018,US
-2902472019,2902472021,AL
-2902472022,2902472725,US
-2902472726,2902472728,BD
-2902472729,2902472788,US
-2902472789,2902472790,LK
-2902472791,2902472813,US
-2902472814,2902472814,LK
-2902472815,2902472834,US
-2902472835,2902472836,BD
-2902472837,2902473028,US
-2902473029,2902473031,IN
-2902473032,2902473107,US
-2902473108,2902473109,BD
-2902473110,2902473556,US
-2902473557,2902473558,LK
-2902473559,2902473649,US
-2902473650,2902473650,BD
-2902473651,2902473652,US
-2902473653,2902473653,BD
-2902473654,2902475263,US
-2902475264,2902475327,CY
-2902475328,2902475399,US
-2902475400,2902475407,UY
-2902475408,2902475503,US
-2902475504,2902475519,CW
-2902475520,2902476287,US
-2902476288,2902476319,BE
-2902476320,2902476543,US
+2900099072,2902476543,US
2902476544,2902476799,CW
2902476800,2902507519,US
2902507520,2902515711,CA
@@ -88064,118 +43747,53 @@
2902564688,2902564703,AU
2902564704,2904555519,US
2904555520,2904817663,CA
-2904817664,2905018367,US
-2905018368,2905022463,IN
-2905022464,2905030655,US
-2905030656,2905034751,IN
-2905034752,2905045247,US
-2905045248,2905045503,SG
-2905045504,2905350729,US
-2905350730,2905350730,US
-2905350731,2905376391,US
-2905376392,2905376399,PK
-2905376400,2905376415,US
-2905376416,2905376423,CN
-2905376424,2905376431,TW
-2905376432,2905376447,US
-2905376448,2905376455,HK
-2905376456,2905376463,PK
-2905376464,2905376607,US
-2905376608,2905376615,CA
-2905376616,2905376855,US
-2905376856,2905376863,CA
-2905376864,2905377503,US
-2905377504,2905377511,ID
-2905377512,2905377519,MY
-2905377520,2905378559,US
-2905378560,2905378607,CA
-2905378608,2905378687,US
-2905378688,2905378815,CA
+2904817664,2905001983,US
+2905001984,2905002152,GB
+2905002153,2905002153,US
+2905002154,2905002495,GB
+2905002496,2905044991,US
+2905044992,2905045503,SG
+2905045504,2905378559,US
+2905378560,2905378815,CA
2905378816,2905379071,US
2905379072,2905379327,CA
2905379328,2905380607,US
2905380608,2905380863,CA
-2905380864,2905382559,US
-2905382560,2905382591,EE
-2905382592,2905385879,US
-2905385880,2905385887,PH
-2905385888,2905385911,US
-2905385912,2905385919,VN
-2905385920,2905385927,US
-2905385928,2905385935,HK
-2905385936,2905385943,PK
-2905385944,2905385951,CN
-2905385952,2905385983,CR
-2905385984,2905387519,US
+2905380864,2905387519,US
2905387520,2905388031,CA
-2905388032,2905390879,US
-2905390880,2905390895,GB
-2905390896,2905390903,CN
-2905390904,2905390911,PK
-2905390912,2905391327,US
-2905391328,2905391335,CR
-2905391336,2905391359,US
-2905391360,2905391391,EG
-2905391392,2905391599,US
-2905391600,2905391615,GB
-2905391616,2905394175,US
+2905388032,2905394175,US
2905394176,2905394687,CA
-2905394688,2905404503,US
-2905404504,2905404511,MY
-2905404512,2905404703,US
-2905404704,2905404759,IN
-2905404760,2905404767,MY
-2905404768,2905404799,IN
-2905404800,2905404943,US
-2905404944,2905404951,MY
-2905404952,2905404975,US
-2905404976,2905404983,MY
-2905404984,2905405055,US
-2905405056,2905405063,CN
-2905405064,2905405071,US
-2905405072,2905405079,HK
-2905405080,2905405095,US
-2905405096,2905405103,CN
-2905405104,2905405167,US
-2905405168,2905405231,MY
-2905405232,2905405439,US
-2905405440,2905405447,MY
-2905405448,2905405679,US
+2905394688,2905401855,US
+2905401856,2905402111,CA
+2905402112,2905405679,US
2905405680,2905405687,CN
2905405688,2905407743,US
2905407744,2905407999,TW
-2905408000,2905412095,US
-2905412096,2905412351,CN
-2905412352,2905415679,US
+2905408000,2905415679,US
2905415680,2905415935,GB
2905415936,2905446655,US
2905446656,2905446911,DE
-2905446912,2905451487,US
-2905451488,2905451503,CW
-2905451504,2905451519,US
-2905451520,2905451647,PA
-2905451648,2905473023,US
+2905446912,2905473023,US
2905473024,2905481215,CA
-2905481216,2913992703,US
+2905481216,2913086719,US
+2913086720,2913086812,CA
+2913086813,2913086813,US
+2913086814,2913086816,CA
+2913086817,2913086817,US
+2913086818,2913086819,CA
+2913086820,2913086820,US
+2913086821,2913086975,CA
+2913086976,2913992703,US
2913992704,2914516991,CA
2914516992,2915092135,US
2915092136,2915092143,SA
-2915092144,2915096014,US
-2915096015,2915096015,US
-2915096016,2915250175,US
+2915092144,2915250175,US
2915250176,2915254271,CA
-2915254272,2915274751,US
-2915274752,2915274815,PL
-2915274816,2915275007,US
-2915275008,2915275071,PL
-2915275072,2915275263,US
-2915275264,2915275327,PL
-2915275328,2915497759,US
-2915497760,2915497761,US
-2915497762,2915516415,US
+2915254272,2915516415,US
2915516416,2915516671,NL
2915516672,2915516927,CA
-2915516928,2915517439,US
+2915516928,2915517183,US
+2915517184,2915517439,RU
2915517440,2915518463,DK
2915518464,2915520511,GB
2915520512,2915521023,AU
@@ -88184,32 +43802,16 @@
2915521536,2915526911,US
2915526912,2915527167,DE
2915527168,2915527679,US
-2915527680,2915528715,NL
-2915528716,2915528719,US
-2915528720,2915528783,NL
+2915527680,2915528711,NL
+2915528712,2915528735,US
+2915528736,2915528751,NL
+2915528752,2915528767,US
+2915528768,2915528783,NL
2915528784,2915795013,US
2915795014,2915795014,MX
2915795015,2915958783,US
2915958784,2916024319,CA
-2916024320,2916098191,US
-2916098192,2916098207,CA
-2916098208,2916104703,US
-2916104704,2916104719,ZA
-2916104720,2916110399,US
-2916110400,2916110407,LK
-2916110408,2916111199,US
-2916111200,2916111215,CA
-2916111216,2916111327,US
-2916111328,2916111343,CA
-2916111344,2916111687,US
-2916111688,2916111695,CA
-2916111696,2916120823,US
-2916120824,2916120831,CA
-2916120832,2916121367,US
-2916121368,2916121375,CA
-2916121376,2916140287,US
-2916140288,2916140543,US
-2916140544,2916163583,US
+2916024320,2916163583,US
2916163584,2916171775,CA
2916171776,2916184063,US
2916184064,2916196351,CA
@@ -88219,236 +43821,27 @@
2916319232,2916335615,PR
2916335616,2916368383,US
2916368384,2916401151,CA
-2916401152,2916434623,US
-2916434624,2916434655,CA
-2916434656,2916436487,US
-2916436488,2916436495,CA
-2916436496,2916436543,US
-2916436544,2916436607,CA
-2916436608,2916437039,US
-2916437040,2916437047,DE
-2916437048,2916437055,CN
-2916437056,2916437207,US
-2916437208,2916437215,TH
-2916437216,2916437231,US
-2916437232,2916437239,SG
-2916437240,2916440143,US
-2916440144,2916440159,CA
-2916440160,2916440175,US
-2916440176,2916440191,CA
-2916440192,2916440287,US
-2916440288,2916440295,CA
-2916440296,2916441119,US
-2916441120,2916441151,CA
-2916441152,2916443151,US
-2916443152,2916443159,GB
-2916443160,2916515839,US
+2916401152,2916515839,US
2916515840,2916519935,CA
-2916519936,2916525087,US
-2916525088,2916525103,PE
-2916525104,2916528569,US
-2916528570,2916528572,IL
-2916528573,2916528690,US
-2916528691,2916528715,CH
-2916528716,2916528953,US
-2916528954,2916528962,MK
-2916528963,2916530193,US
-2916530194,2916530226,FR
-2916530227,2916530552,US
-2916530553,2916530622,AU
-2916530623,2916544927,US
-2916544928,2916544959,BZ
-2916544960,2916547839,US
-2916547840,2916547871,BZ
-2916547872,2916581375,US
-2916581376,2916594687,PR
-2916594688,2916594943,US
-2916594944,2916614143,PR
-2916614144,2917167299,US
-2917167300,2917167302,CA
-2917167303,2917167303,AR
-2917167304,2917167311,US
-2917167312,2917167316,BR
-2917167317,2917167317,US
-2917167318,2917167318,CA
-2917167319,2917167322,BR
-2917167323,2917167325,US
-2917167326,2917167328,BR
-2917167329,2917167329,AT
-2917167330,2917167332,US
-2917167333,2917167335,BR
-2917167336,2917167339,US
-2917167340,2917167340,BR
-2917167341,2917167342,US
-2917167343,2917167351,BR
-2917167352,2917167354,US
-2917167355,2917167358,BR
-2917167359,2917167679,US
-2917167680,2917167711,BR
-2917167712,2917167714,US
-2917167715,2917167717,CA
-2917167718,2917167718,BR
-2917167719,2917167722,CA
-2917167723,2917167744,BR
-2917167745,2917167773,US
-2917167774,2917167775,BR
-2917167776,2917167807,LT
-2917167808,2917167839,US
-2917167840,2917167871,TR
-2917167872,2917167903,US
-2917167904,2917167935,TR
-2917167936,2917167967,US
-2917167968,2917167968,IN
-2917167969,2917167999,US
-2917168000,2917168000,UA
-2917168001,2917168006,US
-2917168007,2917168031,UA
-2917168032,2917168095,US
-2917168096,2917168127,GB
-2917168128,2917168223,US
-2917168224,2917168230,BR
-2917168231,2917168232,US
-2917168233,2917168255,BR
-2917168256,2917168319,US
-2917168320,2917168351,AR
-2917168352,2917168352,US
-2917168353,2917168415,BR
-2917168416,2917168447,US
-2917168448,2917168479,BR
-2917168480,2917168607,US
-2917168608,2917168608,AU
-2917168609,2917168627,BR
-2917168628,2917168632,US
-2917168633,2917168633,BR
-2917168634,2917168959,US
-2917168960,2917169023,DE
-2917169024,2917169096,US
-2917169097,2917169098,CA
-2917169099,2917169100,BR
-2917169101,2917169101,US
-2917169102,2917169102,BR
-2917169103,2917169106,CA
-2917169107,2917169109,US
-2917169110,2917169110,CA
-2917169111,2917169113,BR
-2917169114,2917169114,CA
-2917169115,2917169120,US
-2917169121,2917169123,BR
-2917169124,2917169124,CA
-2917169125,2917169125,US
-2917169126,2917169144,BR
-2917169145,2917169145,US
-2917169146,2917169147,BR
-2917169148,2917169149,US
-2917169150,2917169150,BR
-2917169151,2917169663,US
-2917169664,2917169695,DE
-2917169696,2917170015,US
-2917170016,2917170047,UA
-2917170048,2917170079,BR
-2917170080,2917170111,US
-2917170112,2917170143,TR
-2917170144,2917170239,US
-2917170240,2917170303,BR
-2917170304,2917170758,US
-2917170759,2917170764,BR
-2917170765,2917170771,US
-2917170772,2917170772,BR
-2917170773,2917170774,US
-2917170775,2917170777,BR
-2917170778,2917170783,US
-2917170784,2917170785,AR
-2917170786,2917170800,BR
-2917170801,2917170801,US
-2917170802,2917170806,BR
-2917170807,2917170809,US
-2917170810,2917170812,BR
-2917170813,2917170819,US
-2917170820,2917170820,BR
-2917170821,2917170821,US
-2917170822,2917170822,BD
-2917170823,2917170823,US
-2917170824,2917170824,PH
-2917170825,2917170825,BR
-2917170826,2917170830,US
-2917170831,2917170831,PH
-2917170832,2917170839,US
-2917170840,2917170840,BD
-2917170841,2917170841,PH
-2917170842,2917170843,US
-2917170844,2917170844,EC
-2917170845,2917170846,US
-2917170847,2917170847,PK
-2917170848,2917170848,PH
-2917170849,2917170850,US
-2917170851,2917170851,BR
-2917170852,2917170852,US
-2917170853,2917170853,BR
-2917170854,2917170856,PH
-2917170857,2917170859,US
-2917170860,2917170861,PH
-2917170862,2917170862,CA
-2917170863,2917170863,US
-2917170864,2917170864,PH
-2917170865,2917170869,US
-2917170870,2917170870,BD
-2917170871,2917170871,AU
-2917170872,2917170873,BD
-2917170874,2917170877,US
-2917170878,2917170878,BD
-2917170879,2917170948,US
-2917170949,2917170949,BR
-2917170950,2917170952,US
-2917170953,2917170953,SV
-2917170954,2917170962,US
-2917170963,2917170964,UA
-2917170965,2917170965,CY
-2917170966,2917170969,US
-2917170970,2917170970,IN
-2917170971,2917170979,US
-2917170980,2917170980,NL
-2917170981,2917170999,US
-2917171000,2917171002,DE
-2917171003,2917171003,IN
-2917171004,2917171005,US
-2917171006,2917171006,CA
-2917171007,2917171007,GB
-2917171008,2917171013,US
-2917171014,2917171014,MX
-2917171015,2917171015,CA
-2917171016,2917171025,US
-2917171026,2917171027,NL
-2917171028,2917171031,US
-2917171032,2917171032,BR
-2917171033,2917171034,US
-2917171035,2917171036,BR
-2917171037,2917171050,US
-2917171051,2917171051,BR
-2917171052,2917171055,US
-2917171056,2917171056,IN
-2917171057,2917171093,US
-2917171094,2917171094,BR
-2917171095,2917171120,US
-2917171121,2917171121,BR
-2917171122,2917171167,US
-2917171168,2917171199,BR
-2917171200,2917195775,US
-2917195776,2917196031,A2
-2917196032,2917196415,CA
-2917196416,2917196543,A2
-2917196544,2917196799,CA
-2917196800,2917198847,A2
-2917198848,2917199103,CA
-2917199104,2917199359,A2
-2917199360,2917203967,CA
-2917203968,2917210335,US
-2917210336,2917210367,CA
-2917210368,2917257215,US
+2916519936,2916581375,US
+2916581376,2916614143,PR
+2916614144,2917117951,US
+2917117952,2917122047,NL
+2917122048,2917170822,US
+2917170823,2917170823,UA
+2917170824,2917170854,US
+2917170855,2917170856,UA
+2917170857,2917171086,US
+2917171087,2917171087,UA
+2917171088,2917179391,US
+2917181440,2917181951,US
+2917183488,2917195775,US
+2917195776,2917203967,CA
+2917203968,2917257215,US
2917257216,2917261311,KY
2917261312,2917265407,US
-2917265408,2917267775,JM
-2917267776,2917267839,VG
-2917267840,2917267967,AG
+2917265408,2917267711,JM
+2917267712,2917267967,AG
2917267968,2917268223,JM
2917268224,2917268479,BB
2917268480,2917269503,JM
@@ -88456,326 +43849,86 @@
2917449728,2917466111,PR
2917466112,2917572607,US
2917572608,2917580799,CA
-2917580800,2917591807,US
-2917591808,2917591823,RO
-2917591824,2917591855,US
-2917591856,2917591903,RO
-2917591904,2917597439,US
+2917580800,2917597439,US
2917597440,2917597695,GB
2917597696,2917621759,US
2917621760,2917629951,CA
-2917629952,2917646591,US
-2917646592,2917647231,CN
-2917647232,2917647359,US
-2917647360,2917648511,CN
-2917648512,2917648639,US
-2917648640,2917649279,CN
-2917649280,2917649407,US
-2917649408,2917649535,RU
-2917649536,2917649663,CN
-2917649664,2917649791,GB
-2917649792,2917649919,AZ
-2917649920,2917650047,CN
-2917650048,2917650175,US
-2917650176,2917650303,CN
-2917650304,2917650431,PA
-2917650432,2917650559,CN
-2917650560,2917651071,US
-2917651072,2917651455,CN
-2917651456,2917651711,US
-2917651712,2917651839,CR
-2917651840,2917652095,CN
-2917652096,2917652223,IN
+2917629952,2917646847,US
+2917646848,2917647103,CN
+2917647104,2917647359,US
+2917647360,2917648383,CN
+2917648384,2917648639,US
+2917648640,2917648895,CN
+2917648896,2917652223,US
2917652224,2917652479,AU
-2917652480,2917652735,CN
-2917652736,2917652863,NZ
-2917652864,2917653247,US
-2917653248,2917653375,CN
-2917653376,2917653503,PA
+2917652480,2917653503,US
2917653504,2917654015,GB
-2917654016,2917654143,FI
-2917654144,2917654271,MY
+2917654016,2917654271,US
2917654272,2917654527,CN
-2917654528,2917654655,TH
-2917654656,2917654783,MX
+2917654528,2917654783,US
2917654784,2917655039,DE
-2917655040,2917655167,US
-2917655168,2917655295,SG
-2917655296,2917655423,GB
-2917655424,2917655807,CN
-2917655808,2917655935,US
-2917655936,2917656063,HU
-2917656064,2917656447,CN
-2917656448,2917656575,FR
-2917656576,2917656703,US
-2917656704,2917657087,CN
-2917657088,2917657215,NO
-2917657216,2917657471,US
-2917657472,2917657599,CN
-2917657600,2917657855,US
-2917657856,2917657983,CN
-2917657984,2917658367,US
-2917658368,2917658495,CN
-2917658496,2917659519,US
-2917659520,2917659647,HK
-2917659648,2917659775,US
-2917659776,2917659903,CN
-2917659904,2917660415,US
-2917660416,2917660543,CA
-2917660544,2917660671,GI
+2917655040,2917655551,US
+2917655552,2917655807,CN
+2917655808,2917656063,US
+2917656064,2917656319,CN
+2917656320,2917656831,US
+2917656832,2917657087,CN
+2917657088,2917660671,US
2917660672,2917661183,GB
-2917661184,2917661311,CA
-2917661312,2917661695,CN
-2917661696,2917661823,ZA
-2917661824,2917661951,PK
-2917661952,2917662079,CN
-2917662080,2917663391,US
-2917663392,2917663423,EG
-2917663424,2917663455,US
-2917663456,2917663487,EG
-2917663488,2917663935,US
-2917663936,2917663967,EG
-2917663968,2917664095,US
-2917664096,2917664127,EG
-2917664128,2917664415,US
-2917664416,2917664447,EG
-2917664448,2917664815,US
-2917664816,2917664831,CN
-2917664832,2917665663,US
-2917665664,2917665695,EG
-2917665696,2917667391,US
-2917667392,2917667423,EG
-2917667424,2917667519,US
-2917667520,2917667583,CA
-2917667584,2917672191,US
-2917672192,2917672223,CA
-2917672224,2917672319,US
-2917672320,2917672351,EG
-2917672352,2917672927,US
-2917672928,2917672959,EG
-2917672960,2917676031,US
+2917661184,2917676031,US
2917676032,2917676287,CA
-2917676288,2917681423,US
-2917681424,2917681439,MY
-2917681440,2917697471,US
-2917697472,2917697503,EG
-2917697504,2917697567,US
-2917697568,2917697599,EG
-2917697600,2917697887,US
-2917697888,2917697919,EG
-2917697920,2917698679,US
-2917698680,2917698687,CA
-2917698688,2917699775,US
-2917699776,2917699807,EG
-2917699808,2917699839,US
+2917676288,2917699839,US
2917699840,2917700351,CA
2917700352,2917700959,US
2917700960,2917700967,CN
-2917700968,2917700975,GB
-2917700976,2917700991,US
-2917700992,2917700999,MY
-2917701000,2917704191,US
+2917700968,2917704191,US
2917704192,2917704447,CA
-2917704448,2917706239,US
-2917706240,2917707007,CA
-2917707008,2917707359,US
-2917707360,2917707391,EG
-2917707392,2917707519,US
+2917704448,2917707519,US
2917707520,2917707775,CA
-2917707776,2917710079,US
-2917710080,2917710847,CA
+2917707776,2917709823,US
+2917709824,2917710847,CA
2917710848,2917713919,US
2917713920,2917714431,CA
2917714432,2917715967,US
-2917715968,2917716223,DE
-2917716224,2917724943,US
-2917724944,2917724959,MY
-2917724960,2917724991,US
-2917724992,2917725007,MY
-2917725008,2917726463,US
-2917726464,2917726495,CR
-2917726496,2917795951,US
-2917795952,2917795959,CA
-2917795960,2917796263,US
-2917796264,2917796271,CA
-2917796272,2917801983,US
-2917801984,2917801991,CA
-2917801992,2917802047,US
-2917802048,2917802063,CA
-2917802064,2917802143,US
-2917802144,2917802159,CA
-2917802160,2917802231,US
-2917802232,2917802239,CA
-2917802240,2917802295,US
-2917802296,2917802303,CA
-2917802304,2917802367,US
-2917802368,2917802375,CA
-2917802376,2917804351,US
-2917804352,2917804383,CA
-2917804384,2917804399,US
-2917804400,2917804415,CA
-2917804416,2917804527,US
-2917804528,2917804535,LK
-2917804536,2917804543,US
-2917804544,2917804559,CA
-2917804560,2917804607,US
-2917804608,2917804639,CA
-2917804640,2917804815,US
-2917804816,2917804831,CA
-2917804832,2917804879,US
-2917804880,2917804887,CA
-2917804888,2917804911,US
-2917804912,2917804919,CA
-2917804920,2917804935,US
-2917804936,2917804943,CA
-2917804944,2917804951,US
-2917804952,2917804959,CA
-2917804960,2917805039,US
-2917805040,2917805047,CA
-2917805048,2917809231,US
-2917809232,2917809239,CA
-2917809240,2917809407,US
-2917809408,2917809439,CA
-2917809440,2917809927,US
-2917809928,2917809935,CA
-2917809936,2917811511,US
-2917811512,2917811519,LK
-2917811520,2917811583,US
-2917811584,2917811711,LK
-2917811712,2917813679,US
-2917813680,2917813687,LK
-2917813688,2917813688,US
-2917813689,2917813696,LK
-2917813697,2917815575,US
-2917815576,2917815583,RO
-2917815584,2917823831,US
-2917823832,2917823839,CA
-2917823840,2917823871,US
-2917823872,2917823887,CA
-2917823888,2917823895,US
-2917823896,2917823903,CA
-2917823904,2917823975,US
-2917823976,2917823991,CA
-2917823992,2917828351,US
-2917828352,2917828479,IN
-2917828480,2917829727,US
-2917829728,2917829743,CA
-2917829744,2917835679,US
-2917835680,2917835687,CA
-2917835688,2917835815,US
-2917835816,2917835823,CA
-2917835824,2917842175,US
+2917715968,2917716223,CA
+2917716224,2917720575,US
+2917720576,2917720831,CA
+2917720832,2917842175,US
2917842176,2917842431,CA
-2917842432,2917847063,US
-2917847064,2917847071,CA
-2917847072,2917847935,US
-2917847936,2917847943,CN
-2917847944,2917851207,US
-2917851208,2917851215,CA
-2917851216,2917853471,US
-2917853472,2917853487,CA
-2917853488,2917853519,US
-2917853520,2917853535,CA
-2917853536,2917853567,US
-2917853568,2917853575,CA
-2917853576,2917853615,US
-2917853616,2917853623,CA
-2917853624,2917854591,US
-2917854592,2917854719,LK
-2917854720,2917856511,US
-2917856512,2917856639,IN
-2917856640,2918014975,US
+2917842432,2918014975,US
2918014976,2918023167,CA
2918023168,2918043647,US
-2918043648,2918043711,CA
-2918043712,2918043719,US
-2918043720,2918043775,CA
-2918043776,2918043783,US
-2918043784,2918043799,CA
-2918043800,2918043807,US
-2918043808,2918043823,TH
-2918043824,2918043831,US
-2918043832,2918043839,PH
-2918043840,2918043847,ID
-2918043848,2918043855,IR
-2918043856,2918043863,AU
-2918043864,2918043887,US
-2918043888,2918043895,AU
-2918043896,2918043903,SG
-2918043904,2918044351,CA
-2918044352,2918044367,GB
-2918044368,2918044383,US
-2918044384,2918044399,CA
-2918044400,2918044415,US
-2918044416,2918044447,CA
-2918044448,2918044479,US
-2918044480,2918044575,CA
-2918044576,2918044639,US
-2918044640,2918044991,CA
-2918044992,2918045055,PT
-2918045056,2918045119,CA
-2918045120,2918045183,AU
-2918045184,2918047743,CA
+2918043648,2918047743,CA
2918047744,2918051839,US
2918051840,2918121471,CA
2918121472,2918154239,US
2918154240,2918170623,CA
2918170624,2918187775,US
-2918187776,2918187839,CA
-2918187840,2918199679,US
-2918199680,2918199743,CA
-2918199744,2918201551,US
-2918201552,2918201567,CA
-2918201568,2918202079,US
-2918202080,2918202087,CA
-2918202088,2918202223,US
-2918202224,2918202271,CA
-2918202272,2918212143,US
-2918212144,2918212159,GB
-2918212160,2918212175,US
-2918212176,2918212183,GB
-2918212184,2918212479,US
-2918212480,2918212511,IL
-2918212512,2918212543,US
-2918212544,2918212607,GB
-2918212608,2918213519,US
-2918213520,2918213535,NZ
-2918213536,2918214111,US
-2918214112,2918214127,SG
-2918214128,2918232063,US
+2918187776,2918188031,CA
+2918188032,2918232063,US
2918232064,2918236159,CA
2918236160,2918260735,US
2918260736,2918264831,CA
2918264832,2918277119,US
2918277120,2918281215,CA
2918281216,2918286335,US
-2918286336,2918286719,CA
-2918286720,2918286879,US
-2918286880,2918286895,GB
-2918286896,2918287103,US
+2918286336,2918286591,CA
+2918286592,2918287103,US
2918287104,2918287359,CR
2918287360,2918289407,GB
2918289408,2918314216,US
2918314217,2918314217,GB
-2918314218,2918348114,US
-2918348115,2918348115,US
-2918348116,2918348802,US
-2918348803,2918348831,GB
-2918348832,2918349026,US
-2918349027,2918349032,GB
-2918349033,2918371327,US
+2918314218,2918371327,US
2918371328,2918375423,CA
2918375424,2918391807,US
2918391808,2918395903,CA
2918395904,2918404095,US
2918404096,2918406911,PR
2918406912,2918407167,US
-2918407168,2918408191,PR
-2918408192,2918412903,US
-2918412904,2918412911,ES
-2918412912,2918412927,US
-2918412928,2918412935,ES
-2918412936,2918432767,US
+2918407168,2918407295,PR
+2918407296,2918407423,US
+2918407424,2918408191,PR
+2918408192,2918432767,US
2918432768,2918436863,CA
2918436864,2918469631,US
2918469632,2918471423,CA
@@ -88785,44 +43938,17 @@
2918473216,2918473727,CA
2918473728,2918477823,US
2918477824,2918481919,CA
-2918481920,2918502078,US
-2918502079,2918502079,US
-2918502080,2918514943,US
-2918514944,2918515079,CA
-2918515080,2918515199,US
-2918515200,2918515327,CA
-2918515328,2918515599,US
-2918515600,2918515607,NL
-2918515608,2918532095,US
-2918532096,2918532103,US
-2918532104,2918532111,US
-2918532112,2918532119,CN
-2918532120,2918532143,US
-2918532144,2918532151,PK
-2918532152,2918533119,US
-2918533120,2918533127,CN
-2918533128,2918533143,US
-2918533144,2918533151,CN
-2918533152,2918533159,US
-2918533160,2918533167,CN
-2918533168,2918533191,US
-2918533192,2918533199,AU
-2918533200,2918533215,CN
-2918533216,2918534687,US
-2918534688,2918534695,CN
-2918534696,2918534703,US
-2918534704,2918534719,CN
-2918534720,2918534815,US
-2918534816,2918534879,CN
-2918534880,2918534943,US
-2918534944,2918534975,CN
-2918534976,2918536031,US
-2918536032,2918536063,US
-2918536064,2918536183,US
-2918536184,2918536187,US
-2918536188,2918536447,US
-2918536448,2918536703,US
-2918536704,2918570239,US
+2918481920,2918528255,US
+2918528256,2918528511,NO
+2918528512,2918528767,US
+2918528768,2918528863,CA
+2918528864,2918528883,US
+2918528884,2918528885,CA
+2918528886,2918530559,US
+2918530560,2918530815,PH
+2918530816,2918536719,US
+2918536720,2918536727,CA
+2918536728,2918570239,US
2918570240,2918570495,JP
2918570496,2918580223,US
2918580224,2918588415,CA
@@ -88841,12 +43967,7 @@
2918817024,2918828031,US
2918828032,2918828543,UA
2918828544,2918829055,ES
-2918829056,2918829183,US
-2918829184,2918829311,PL
-2918829312,2918829439,CA
-2918829440,2918829567,JM
-2918829568,2918829695,GR
-2918829696,2918829823,DE
+2918829056,2918829823,US
2918829824,2918830079,CN
2918830080,2918834175,CA
2918834176,2918842367,US
@@ -88854,464 +43975,52 @@
2918875136,2918973439,US
2918973440,2918989823,CA
2918989824,2919010303,US
-2919010304,2919010815,CA
-2919010816,2919020543,US
-2919020544,2919020575,CA
-2919020576,2919020607,US
-2919020608,2919020655,CA
-2919020656,2919020711,US
-2919020712,2919020719,CA
-2919020720,2919020727,US
-2919020728,2919020799,CA
-2919020800,2919021327,US
-2919021328,2919021335,CA
-2919021336,2919021343,US
-2919021344,2919021567,CA
-2919021568,2919022079,US
-2919022080,2919022271,CA
-2919022272,2919022287,US
-2919022288,2919022463,CA
-2919022464,2919055359,US
+2919010304,2919010559,CA
+2919010560,2919020543,US
+2919020544,2919020559,CA
+2919020560,2919020607,US
+2919020608,2919020615,CA
+2919020616,2919021359,US
+2919021360,2919021375,CA
+2919021376,2919021487,US
+2919021488,2919021535,CA
+2919021536,2919022207,US
+2919022208,2919022239,CA
+2919022240,2919022455,US
+2919022456,2919022463,CA
+2919022464,2919022495,US
+2919022496,2919022527,CA
+2919022528,2919055359,US
2919055360,2919057407,CN
2919057408,2919059455,IN
2919059456,2919063551,CN
2919063552,2919064063,MX
-2919064064,2919067655,CN
-2919067656,2919067695,US
-2919067696,2919067703,PK
-2919067704,2919067711,ES
-2919067712,2919067719,CN
-2919067720,2919067727,TR
-2919067728,2919067735,IN
-2919067736,2919067743,US
-2919067744,2919067751,BR
-2919067752,2919067759,IN
-2919067760,2919067767,CA
-2919067768,2919067775,US
-2919067776,2919067783,AU
-2919067784,2919067791,US
-2919067792,2919067799,BR
-2919067800,2919067823,US
-2919067824,2919067831,BR
-2919067832,2919067839,US
-2919067840,2919067847,BR
-2919067848,2919067863,US
-2919067864,2919067871,ES
-2919067872,2919067879,CA
-2919067880,2919067887,TW
-2919067888,2919067895,IE
-2919067896,2919067903,CA
-2919067904,2919067911,US
-2919067912,2919067919,CN
-2919067920,2919067927,US
-2919067928,2919067935,RU
-2919067936,2919067943,BR
-2919067944,2919067951,PL
-2919067952,2919067959,CN
-2919067960,2919067967,IL
-2919067968,2919067975,US
-2919067976,2919067983,CA
-2919067984,2919067999,CN
-2919068000,2919068007,CM
-2919068008,2919068015,BR
-2919068016,2919068023,US
-2919068024,2919068031,HK
-2919068032,2919068039,US
-2919068040,2919068047,IN
-2919068048,2919068055,CA
-2919068056,2919068087,US
-2919068088,2919068095,TR
-2919068096,2919068103,US
-2919068104,2919068111,AE
-2919068112,2919068119,US
-2919068120,2919068127,CN
-2919068128,2919068135,US
-2919068136,2919068143,PK
-2919068144,2919068151,IN
-2919068152,2919068159,JM
-2919068160,2919068167,US
-2919068168,2919068175,CA
-2919068176,2919068183,US
-2919068184,2919068191,CA
-2919068192,2919068199,PR
-2919068200,2919068207,US
-2919068208,2919068215,GB
-2919068216,2919068223,CA
-2919068224,2919068239,US
-2919068240,2919068247,CN
+2919064064,2919067647,CN
+2919067648,2919068247,US
2919068248,2919068255,AU
-2919068256,2919068271,US
-2919068272,2919068279,SG
-2919068280,2919068287,US
-2919068288,2919068295,CN
-2919068296,2919068303,BR
-2919068304,2919068311,RO
-2919068312,2919068319,MY
-2919068320,2919068335,US
-2919068336,2919068343,RU
-2919068344,2919068359,US
-2919068360,2919068367,CM
-2919068368,2919068375,CN
-2919068376,2919068383,US
-2919068384,2919068391,BR
-2919068392,2919068415,US
-2919068416,2919068423,BR
-2919068424,2919068431,CN
-2919068432,2919068495,US
-2919068496,2919068503,BR
-2919068504,2919068511,IN
-2919068512,2919068519,CN
-2919068520,2919068527,US
-2919068528,2919068535,PL
-2919068536,2919068551,IN
-2919068552,2919068559,AU
-2919068560,2919068567,CN
-2919068568,2919068575,IN
-2919068576,2919068583,US
-2919068584,2919068591,CN
-2919068592,2919068599,US
-2919068600,2919068607,CM
-2919068608,2919068615,MY
-2919068616,2919068647,US
-2919068648,2919068655,AU
-2919068656,2919068663,CN
-2919068664,2919068703,US
-2919068704,2919068711,IN
-2919068712,2919068719,JM
-2919068720,2919068727,US
-2919068728,2919068735,RU
-2919068736,2919068743,NO
-2919068744,2919068751,PR
-2919068752,2919068775,US
-2919068776,2919068783,HK
-2919068784,2919068791,IN
-2919068792,2919068799,CR
-2919068800,2919068815,NO
-2919068816,2919068823,US
-2919068824,2919068831,CA
-2919068832,2919068839,CN
-2919068840,2919068871,US
-2919068872,2919068879,CN
-2919068880,2919068887,DO
-2919068888,2919068895,SG
-2919068896,2919068911,US
-2919068912,2919068927,CN
-2919068928,2919068935,US
-2919068936,2919068943,ZA
-2919068944,2919068967,US
-2919068968,2919068975,RU
-2919068976,2919068991,US
-2919068992,2919068999,DO
-2919069000,2919069015,US
-2919069016,2919069031,CN
-2919069032,2919069039,US
-2919069040,2919069047,CN
-2919069048,2919069055,US
-2919069056,2919069063,CN
-2919069064,2919069071,AF
-2919069072,2919069079,CN
-2919069080,2919069087,US
-2919069088,2919069095,IN
-2919069096,2919069103,BZ
-2919069104,2919069111,US
-2919069112,2919069119,CN
-2919069120,2919069127,CA
-2919069128,2919069135,US
-2919069136,2919069143,CN
-2919069144,2919069151,BR
-2919069152,2919069159,US
-2919069160,2919069167,JM
-2919069168,2919069175,GB
-2919069176,2919069183,US
-2919069184,2919069191,PR
-2919069192,2919069199,US
-2919069200,2919069207,GB
-2919069208,2919069215,BR
-2919069216,2919069231,US
-2919069232,2919069239,ES
-2919069240,2919069255,GB
-2919069256,2919069271,CN
-2919069272,2919069295,US
-2919069296,2919069303,BR
-2919069304,2919069327,US
-2919069328,2919069335,BR
-2919069336,2919069343,TR
-2919069344,2919069359,US
-2919069360,2919069367,CN
-2919069368,2919069375,AU
-2919069376,2919069391,US
-2919069392,2919069399,GB
-2919069400,2919069407,US
-2919069408,2919069415,VN
-2919069416,2919069439,US
-2919069440,2919069447,CA
-2919069448,2919069455,US
-2919069456,2919069463,CN
-2919069464,2919069471,US
-2919069472,2919069479,CA
-2919069480,2919069487,CN
-2919069488,2919069495,US
-2919069496,2919069503,CN
-2919069504,2919069511,AR
-2919069512,2919069519,US
-2919069520,2919069527,IN
-2919069528,2919069535,TR
-2919069536,2919069543,US
-2919069544,2919069559,CN
-2919069560,2919069567,AE
-2919069568,2919069575,VN
-2919069576,2919069583,CN
-2919069584,2919069607,US
-2919069608,2919069615,CN
-2919069616,2919069623,QA
-2919069624,2919069631,PK
-2919069632,2919069639,TW
-2919069640,2919069663,US
-2919069664,2919069671,CA
-2919069672,2919069679,US
-2919069680,2919069687,CA
-2919069688,2919069703,US
-2919069704,2919069711,CN
-2919069712,2919069719,UA
-2919069720,2919069735,US
-2919069736,2919069743,BR
-2919069744,2919069775,US
-2919069776,2919069791,CN
-2919069792,2919069799,PK
-2919069800,2919069807,US
-2919069808,2919069815,PK
-2919069816,2919069823,CN
-2919069824,2919069831,IN
-2919069832,2919069839,US
-2919069840,2919069847,BR
-2919069848,2919069855,US
-2919069856,2919069863,GB
-2919069864,2919069871,US
-2919069872,2919069879,IN
-2919069880,2919069895,US
-2919069896,2919069903,BR
-2919069904,2919069943,US
-2919069944,2919069951,BR
-2919069952,2919069975,US
-2919069976,2919069983,IT
-2919069984,2919069991,IN
-2919069992,2919069999,SG
-2919070000,2919070047,US
-2919070048,2919070055,TR
-2919070056,2919070071,US
-2919070072,2919070079,AE
-2919070080,2919070095,US
-2919070096,2919070103,CN
-2919070104,2919070111,AU
-2919070112,2919070119,ES
-2919070120,2919070127,JM
-2919070128,2919070135,GB
-2919070136,2919070159,US
-2919070160,2919070167,GB
-2919070168,2919070199,US
-2919070200,2919070207,ES
-2919070208,2919070223,US
-2919070224,2919070231,CN
-2919070232,2919070239,US
-2919070240,2919070247,AF
-2919070248,2919070255,CA
-2919070256,2919070263,AF
-2919070264,2919070271,CA
-2919070272,2919070279,IN
-2919070280,2919070295,US
-2919070296,2919070303,CN
-2919070304,2919070311,BR
-2919070312,2919070319,NL
-2919070320,2919070327,CN
-2919070328,2919070335,BR
-2919070336,2919070351,US
-2919070352,2919070359,ZA
-2919070360,2919070383,CN
-2919070384,2919070391,US
-2919070392,2919070399,DE
-2919070400,2919070415,US
-2919070416,2919070423,CA
-2919070424,2919070431,US
-2919070432,2919070439,NL
-2919070440,2919070447,BR
-2919070448,2919070463,US
-2919070464,2919070471,IN
-2919070472,2919070479,CN
-2919070480,2919070487,PK
-2919070488,2919070527,US
-2919070528,2919070543,CA
-2919070544,2919070551,CR
-2919070552,2919070559,PR
-2919070560,2919070567,US
-2919070568,2919070575,CA
-2919070576,2919070607,US
-2919070608,2919070615,RO
-2919070616,2919070631,US
-2919070632,2919070639,TR
-2919070640,2919070647,US
-2919070648,2919070655,GB
-2919070656,2919070663,US
-2919070664,2919070671,GB
-2919070672,2919070679,US
-2919070680,2919070687,IN
-2919070688,2919070695,BY
-2919070696,2919070711,US
-2919070712,2919070719,CN
-2919070720,2919070727,GB
-2919070728,2919070735,US
-2919070736,2919070743,PL
-2919070744,2919070751,CN
-2919070752,2919070783,US
-2919070784,2919070791,BR
-2919070792,2919070799,US
-2919070800,2919070807,NO
-2919070808,2919070815,CN
-2919070816,2919070831,US
-2919070832,2919070839,IE
-2919070840,2919070847,CN
-2919070848,2919070879,US
-2919070880,2919070887,IN
-2919070888,2919070903,US
-2919070904,2919070919,CN
-2919070920,2919070927,CA
-2919070928,2919070943,US
-2919070944,2919070951,BR
-2919070952,2919070975,US
-2919070976,2919070983,TR
+2919068256,2919070983,US
2919070984,2919070991,GB
-2919070992,2919071031,US
-2919071032,2919071039,IT
-2919071040,2919071047,IN
-2919071048,2919071055,US
-2919071056,2919071063,CN
-2919071064,2919071143,US
-2919071144,2919071151,CN
-2919071152,2919071159,US
-2919071160,2919071167,CN
-2919071168,2919071175,US
-2919071176,2919071183,GB
-2919071184,2919071199,CA
-2919071200,2919071207,DK
-2919071208,2919071215,MX
-2919071216,2919159873,US
-2919159874,2919159877,US
-2919159878,2919170351,US
-2919170352,2919170359,PE
-2919170360,2919170399,US
-2919170400,2919170407,TR
-2919170408,2919170415,ES
-2919170416,2919170431,US
-2919170432,2919170439,JP
-2919170440,2919170487,US
-2919170488,2919170495,NL
-2919170496,2919170551,US
-2919170552,2919170559,FR
-2919170560,2919170615,US
-2919170616,2919170623,CN
-2919170624,2919170639,US
-2919170640,2919170655,JP
-2919170656,2919170671,US
-2919170672,2919170679,JP
-2919170680,2919170695,US
-2919170696,2919170703,CN
-2919170704,2919170727,US
-2919170728,2919170735,IN
-2919170736,2919170759,US
-2919170760,2919170767,BR
-2919170768,2919170775,AR
-2919170776,2919170799,US
-2919170800,2919170815,SG
-2919170816,2919170903,US
-2919170904,2919170911,GR
-2919170912,2919170919,US
-2919170920,2919170927,BR
-2919170928,2919170935,US
-2919170936,2919170943,PH
-2919170944,2919170967,US
-2919170968,2919170975,NZ
-2919170976,2919171071,US
-2919171072,2919171079,IN
-2919171080,2919171087,US
-2919171088,2919171095,TR
-2919171096,2919171103,US
-2919171104,2919171111,PL
-2919171112,2919171159,US
-2919171160,2919171167,AU
-2919171168,2919171183,US
-2919171184,2919171191,ZA
-2919171192,2919171343,US
-2919171344,2919171351,BR
-2919171352,2919171359,US
-2919171360,2919171367,BR
-2919171368,2919171399,US
-2919171400,2919171407,IT
-2919171408,2919171415,CN
-2919171416,2919171455,US
-2919171456,2919171463,BR
-2919171464,2919171535,US
-2919171536,2919171543,BR
-2919171544,2919171575,US
-2919171576,2919171583,BR
-2919171584,2919171655,US
-2919171656,2919171663,BR
-2919171664,2919171695,US
-2919171696,2919171703,BR
-2919171704,2919173335,US
-2919173336,2919173343,CZ
-2919173344,2919174143,US
+2919070992,2919174143,US
2919174144,2919178239,CA
2919178240,2919186431,US
2919186432,2919190527,CA
-2919190528,2919202079,US
-2919202080,2919202111,BE
-2919202112,2919206911,US
+2919190528,2919204747,US
+2919204748,2919204755,NL
+2919204756,2919205027,US
+2919205028,2919205031,NL
+2919205032,2919206911,US
2919206912,2919211007,CA
-2919211008,2919211263,US
-2919211264,2919211519,US
-2919211520,2919218687,US
-2919218688,2919218943,US
-2919218944,2919235583,US
+2919211008,2919235583,US
2919235584,2919759871,CA
-2919759872,2921496967,US
-2921496968,2921496975,LK
-2921496976,2921497855,US
-2921497856,2921497863,CA
-2921497864,2921498031,US
-2921498032,2921498039,CA
-2921498040,2921498215,US
-2921498216,2921498223,CA
-2921498224,2921498383,US
-2921498384,2921498391,ID
-2921498392,2921498431,US
-2921498432,2921498439,CA
-2921498440,2921501167,US
-2921501168,2921501175,CA
-2921501176,2921504431,US
-2921504432,2921504439,GB
-2921504440,2921506343,US
-2921506344,2921506351,CA
-2921506352,2921506879,US
-2921506880,2921506887,CA
-2921506888,2921506895,US
-2921506896,2921506911,GB
-2921506912,2921507087,US
-2921507088,2921507095,ZA
-2921507096,2921508719,US
-2921508720,2921508727,SE
-2921508728,2921509335,US
-2921509336,2921509343,LK
-2921509344,2921509367,CA
-2921509368,2921509575,US
-2921509576,2921509583,CA
-2921509584,2921511383,US
-2921511384,2921511391,CA
-2921511392,2921512703,US
+2919759872,2921512703,US
2921512704,2921512959,CA
2921512960,2921530367,US
2921530368,2921531391,DE
2921531392,2921541119,US
2921541120,2921541375,DE
-2921541376,2921545727,US
+2921541376,2921542143,US
+2921542144,2921542399,CA
+2921542400,2921545727,US
2921545728,2921545983,NL
2921545984,2921546495,US
2921546496,2921546751,NL
@@ -89327,324 +44036,43 @@
2921553152,2921553407,BR
2921553408,2921553663,CO
2921553664,2921562111,US
-2921562112,2921589759,CA
-2921589760,2921590015,US
-2921590016,2921594879,CA
-2921594880,2921658191,US
-2921658192,2921658199,US
-2921658200,2925002751,US
+2921562112,2921594879,CA
+2921594880,2925002751,US
2925002752,2925527039,CA
2925527040,2926575615,US
-2926575616,2927099903,CA
-2927099904,2927112031,US
-2927112032,2927112039,CH
-2927112040,2927152175,US
-2927152176,2927152183,CH
-2927152184,2927154847,US
-2927154848,2927154855,CH
-2927154856,2927242751,US
+2926575616,2926777343,CA
+2926777344,2926777855,US
+2926777856,2927084799,CA
+2927084800,2927085823,US
+2927085824,2927099903,CA
+2927099904,2927242751,US
2927242752,2927243263,AE
2927243264,2927254783,US
2927254784,2927255039,AE
-2927255040,2927911183,US
-2927911184,2927911191,CH
-2927911192,2927939071,US
-2927939072,2927939327,US
-2927939328,2928173223,US
-2928173224,2928173231,JP
-2928173232,2928173343,US
-2928173344,2928173351,NL
-2928173352,2928173431,US
-2928173432,2928173439,GB
-2928173440,2928173711,US
-2928173712,2928173727,JP
-2928173728,2928173903,US
-2928173904,2928173919,NZ
-2928173920,2928173959,US
-2928173960,2928173967,CA
-2928173968,2928174223,US
-2928174224,2928174231,CA
-2928174232,2928174423,US
-2928174424,2928174431,CA
-2928174432,2928174759,US
-2928174760,2928174767,CA
-2928174768,2928174783,PH
-2928174784,2928174791,US
-2928174792,2928174799,JP
-2928174800,2928174911,US
-2928174912,2928174919,AU
-2928174920,2928175207,US
-2928175208,2928175215,CA
-2928175216,2928175303,US
-2928175304,2928175311,CN
-2928175312,2928175399,US
-2928175400,2928175407,TR
-2928175408,2928175471,US
-2928175472,2928175479,JP
-2928175480,2928175655,US
-2928175656,2928175663,AR
-2928175664,2928175831,US
-2928175832,2928175839,BE
-2928175840,2928175927,US
-2928175928,2928175935,JP
-2928175936,2928175967,US
-2928175968,2928175975,ZA
-2928175976,2928176207,US
-2928176208,2928176223,ZA
-2928176224,2928176231,JP
-2928176232,2928176327,US
-2928176328,2928176335,RU
-2928176336,2928176447,US
-2928176448,2928176455,GB
-2928176456,2928176519,US
-2928176520,2928176527,NL
-2928176528,2928176935,US
-2928176936,2928176943,AU
-2928176944,2928177151,US
+2927255040,2927581183,US
+2927581184,2927581439,SG
+2927581440,2928175551,US
+2928175552,2928175559,VN
+2928175560,2928177151,US
2928177152,2928181247,CA
-2928181248,2928186591,US
-2928186592,2928186623,CA
-2928186624,2928226303,US
+2928181248,2928226303,US
2928226304,2928230399,CA
-2928230400,2928252387,US
-2928252388,2928252388,US
-2928252389,2928252611,US
-2928252612,2928252612,US
-2928252613,2928252987,US
-2928252988,2928252988,US
-2928252989,2928261375,US
+2928230400,2928261375,US
2928261376,2928261887,CA
2928261888,2928263167,US
-2928263168,2928263679,CA
-2928263680,2928263687,US
-2928263688,2928263791,CA
-2928263792,2928263799,US
-2928263800,2928263823,CA
-2928263824,2928263831,US
-2928263832,2928263855,CA
-2928263856,2928263871,US
-2928263872,2928264759,CA
-2928264760,2928264775,US
-2928264776,2928264783,CA
-2928264784,2928264831,US
-2928264832,2928264863,CA
-2928264864,2928264871,US
-2928264872,2928264879,CA
-2928264880,2928264967,US
-2928264968,2928264983,CA
-2928264984,2928265007,US
-2928265008,2928265055,CA
-2928265056,2928265103,US
-2928265104,2928265143,CA
-2928265144,2928265215,US
-2928265216,2928265471,CA
-2928265472,2928265479,US
-2928265480,2928265503,CA
-2928265504,2928265527,US
-2928265528,2928265559,CA
-2928265560,2928265567,US
-2928265568,2928265575,CA
-2928265576,2928265623,US
-2928265624,2928265631,CA
-2928265632,2928265647,US
-2928265648,2928265671,CA
-2928265672,2928265687,US
-2928265688,2928265703,CA
-2928265704,2928265711,US
-2928265712,2928265727,CA
-2928265728,2928265735,US
-2928265736,2928266023,CA
-2928266024,2928266031,US
-2928266032,2928266055,CA
-2928266056,2928266063,US
-2928266064,2928266111,CA
-2928266112,2928266119,US
-2928266120,2928266175,CA
-2928266176,2928266191,US
-2928266192,2928266255,CA
-2928266256,2928266263,US
-2928266264,2928266295,CA
-2928266296,2928266311,US
-2928266312,2928266359,CA
-2928266360,2928266367,US
-2928266368,2928266407,CA
-2928266408,2928266415,US
-2928266416,2928270135,CA
-2928270136,2928270143,US
-2928270144,2928270175,CA
-2928270176,2928270183,US
-2928270184,2928270479,CA
-2928270480,2928270487,NL
-2928270488,2928270551,CA
-2928270552,2928270559,US
-2928270560,2928270583,CA
-2928270584,2928270591,US
-2928270592,2928270607,CA
-2928270608,2928270615,US
-2928270616,2928270623,CA
-2928270624,2928270631,US
-2928270632,2928270647,CA
-2928270648,2928270655,US
-2928270656,2928270727,CA
-2928270728,2928270743,US
-2928270744,2928270751,CA
-2928270752,2928270767,US
-2928270768,2928270791,CA
-2928270792,2928270799,US
-2928270800,2928271143,CA
-2928271144,2928271151,US
-2928271152,2928271183,CA
-2928271184,2928271191,US
-2928271192,2928272775,CA
-2928272776,2928272783,US
-2928272784,2928272839,CA
-2928272840,2928272847,US
-2928272848,2928272903,CA
-2928272904,2928272919,US
-2928272920,2928272951,CA
-2928272952,2928273071,US
-2928273072,2928273079,CA
-2928273080,2928273183,US
-2928273184,2928273191,CA
-2928273192,2928273199,US
-2928273200,2928273295,CA
-2928273296,2928273303,US
-2928273304,2928273311,CA
-2928273312,2928273367,US
-2928273368,2928273383,CA
-2928273384,2928273439,US
-2928273440,2928273447,CA
-2928273448,2928273471,US
-2928273472,2928273479,CA
-2928273480,2928273591,US
-2928273592,2928273599,CA
-2928273600,2928273607,NL
-2928273608,2928273639,CA
-2928273640,2928273647,US
-2928273648,2928273671,CA
-2928273672,2928273703,US
-2928273704,2928273735,CA
-2928273736,2928273799,US
-2928273800,2928273807,CA
-2928273808,2928273919,US
-2928273920,2928274175,CA
-2928274176,2928274199,US
-2928274200,2928274207,CA
-2928274208,2928274247,US
-2928274248,2928274263,CA
-2928274264,2928274295,US
-2928274296,2928274311,CA
-2928274312,2928274319,US
-2928274320,2928274335,CA
-2928274336,2928274359,US
-2928274360,2928274367,CA
-2928274368,2928274391,US
-2928274392,2928274495,CA
-2928274496,2928274503,US
-2928274504,2928274519,CA
-2928274520,2928274527,US
-2928274528,2928274575,CA
-2928274576,2928274583,US
-2928274584,2928274599,CA
-2928274600,2928274607,US
-2928274608,2928274615,CA
-2928274616,2928274623,US
-2928274624,2928274631,CA
-2928274632,2928274639,US
-2928274640,2928275455,CA
-2928275456,2928275463,US
-2928275464,2928275479,CA
-2928275480,2928275495,US
-2928275496,2928275599,CA
-2928275600,2928275607,US
-2928275608,2928276071,CA
-2928276072,2928276079,US
-2928276080,2928276191,CA
-2928276192,2928276231,US
-2928276232,2928276287,CA
-2928276288,2928276319,US
-2928276320,2928276367,CA
-2928276368,2928276455,US
-2928276456,2928276463,CA
-2928276464,2928276535,US
-2928276536,2928276543,CA
-2928276544,2928276599,US
-2928276600,2928276607,CA
-2928276608,2928276679,US
-2928276680,2928276695,CA
-2928276696,2928276711,US
-2928276712,2928276727,CA
-2928276728,2928276735,US
-2928276736,2928276743,CA
-2928276744,2928276903,US
-2928276904,2928276911,CA
-2928276912,2928276919,US
-2928276920,2928277167,CA
-2928277168,2928277183,US
-2928277184,2928277199,CA
-2928277200,2928277215,US
-2928277216,2928277279,CA
-2928277280,2928277303,US
-2928277304,2928277335,CA
-2928277336,2928277343,US
-2928277344,2928278791,CA
-2928278792,2928278799,US
-2928278800,2928278879,CA
-2928278880,2928278887,US
-2928278888,2928278895,CA
-2928278896,2928278911,US
-2928278912,2928279015,CA
-2928279016,2928279023,US
-2928279024,2928279383,CA
-2928279384,2928279391,US
-2928279392,2928279551,CA
+2928263168,2928279551,CA
2928279552,2928312319,US
2928312320,2928316415,CA
-2928316416,2928318719,US
-2928318720,2928318975,DO
-2928318976,2928320519,US
-2928320520,2928320527,BR
-2928320528,2928320583,US
-2928320584,2928320591,QA
-2928320592,2928320607,US
-2928320608,2928320615,PE
-2928320616,2928320967,US
-2928320968,2928320975,MV
-2928320976,2928320999,US
-2928321000,2928321007,QA
-2928321008,2928321063,US
-2928321064,2928321071,AU
-2928321072,2928321311,US
-2928321312,2928321327,GB
-2928321328,2928321679,US
-2928321680,2928321695,PE
-2928321696,2928323175,US
-2928323176,2928323183,AU
-2928323184,2928324519,US
-2928324520,2928324527,TR
-2928324528,2928328703,US
+2928316416,2928320511,HK
+2928320512,2928328703,US
2928328704,2928336895,CA
-2928336896,2928452223,US
-2928452224,2928452351,US
-2928452352,2928455679,US
+2928336896,2928455679,US
2928455680,2928459775,CA
2928459776,2928541695,US
-2928541696,2928553303,CA
-2928553304,2928553311,HU
-2928553312,2928558943,CA
-2928558944,2928558951,PE
-2928558952,2928570671,CA
+2928541696,2928570671,CA
2928570672,2928570687,FR
-2928570688,2928579543,CA
-2928579544,2928579551,HU
-2928579552,2928583735,CA
-2928583736,2928583743,SY
-2928583744,2928595959,CA
-2928595960,2928595967,US
-2928595968,2928607231,CA
-2928607232,2928633199,US
-2928633200,2928633215,CA
-2928633216,2936012799,US
+2928570688,2928607231,CA
+2928607232,2936012799,US
2936012800,2937847807,CN
2937847808,2937848831,KH
2937848832,2937849855,JP
@@ -89676,13 +44104,13 @@
2938710016,2938712063,AU
2938712064,2938716159,TW
2938716160,2938732543,JP
-2938732544,2938733823,SG
-2938733824,2938734079,AP
-2938734080,2938748927,SG
+2938732544,2938748927,SG
2938748928,2938765311,JP
2938765312,2938961919,CN
2938961920,2938978303,HK
-2938978304,2938996735,AU
+2938978304,2938986495,AU
+2938986496,2938986751,NZ
+2938986752,2938996735,AU
2938996736,2938998783,JP
2938998784,2939002879,AU
2939002880,2939004927,KR
@@ -89755,14 +44183,9 @@
2947598336,2947602431,AU
2947602432,2947603455,NZ
2947603456,2947604479,TH
-2947604480,2947609167,HK
-2947609168,2947609175,AF
-2947609176,2947609855,HK
-2947609856,2947610111,US
-2947610112,2947610367,HK
-2947610368,2947610623,PH
-2947610624,2947611647,AU
-2947611648,2947612671,HK
+2947604480,2947609599,HK
+2947609600,2947609855,GB
+2947609856,2947612671,HK
2947612672,2947678207,JP
2947678208,2947743743,CN
2947743744,2947809279,JP
@@ -89778,40 +44201,20 @@
2948595712,2952790015,KR
2952790016,2953314303,DE
2953314304,2953379839,UA
-2953379840,2953424959,DE
-2953424960,2953424975,ES
-2953424976,2953425183,DE
-2953425184,2953425199,ES
-2953425200,2953435071,DE
-2953435072,2953435079,IT
-2953435080,2953438191,DE
-2953438192,2953438199,ES
-2953438200,2953438231,DE
-2953438232,2953438239,CH
-2953438240,2953441263,DE
-2953441264,2953441279,IT
-2953441280,2953442271,DE
-2953442272,2953442287,ES
-2953442288,2953443031,DE
-2953443032,2953443039,IT
-2953443040,2953444183,DE
-2953444184,2953444191,IT
-2953444192,2953445375,DE
+2953379840,2953445375,DE
2953445376,2953453567,IT
2953453568,2953455615,IS
2953455616,2953457663,SK
2953457664,2953459711,DE
2953459712,2953461759,IT
2953461760,2953465855,ES
-2953465856,2953465991,GB
-2953465992,2953466111,EU
2953466112,2953466127,GB
-2953466128,2953466367,EU
-2953466368,2953467135,GB
-2953467136,2953467391,US
-2953467392,2953467903,GB
+2953466368,2953466879,GB
+2953467392,2953467647,GB
2953467904,2953469951,BE
-2953469952,2953478143,CH
+2953469952,2953474815,CH
+2953474816,2953475071,DE
+2953475072,2953478143,CH
2953478144,2953503551,SE
2953503552,2953503559,NO
2953503560,2953510911,SE
@@ -89821,9 +44224,9 @@
2953596928,2953598975,ES
2953598976,2953601023,IT
2953601024,2953603071,RU
-2953603072,2953603327,GB
-2953603328,2953603583,GR
-2953603584,2953605119,GB
+2953603072,2953603977,GB
+2953603978,2953603979,IE
+2953603980,2953605119,GB
2953605120,2953609215,CZ
2953609216,2953707519,IL
2953707520,2953838591,RU
@@ -89837,2590 +44240,135 @@
2954647552,2954657791,ES
2954657792,2954756095,JO
2954756096,2954821631,TR
-2954821632,2954821647,FR
-2954821648,2954821651,ES
-2954821652,2954821655,PL
-2954821656,2954821659,FR
-2954821660,2954821663,ES
-2954821664,2954821695,PL
-2954821696,2954821707,FR
-2954821708,2954821715,DE
-2954821716,2954821719,GB
-2954821720,2954821723,PL
-2954821724,2954821727,FR
-2954821728,2954821775,IE
-2954821776,2954821783,DE
-2954821784,2954821787,ES
-2954821788,2954821791,FR
-2954821792,2954821823,ES
-2954821824,2954821855,GB
-2954821856,2954821887,IT
-2954821888,2954821919,NL
-2954821920,2954821951,FR
-2954821952,2954821983,ES
-2954821984,2954822015,GB
-2954822016,2954822047,IT
-2954822048,2954822063,PL
-2954822064,2954822071,FR
-2954822072,2954822075,PT
-2954822076,2954822079,GB
-2954822080,2954822143,IE
-2954822144,2954822207,FR
-2954822208,2954822271,PL
-2954822272,2954822279,GB
-2954822280,2954822283,ES
-2954822284,2954822287,FR
-2954822288,2954822303,NL
-2954822304,2954822311,FR
-2954822312,2954822319,DE
-2954822320,2954822323,NL
-2954822324,2954822327,FI
-2954822328,2954822335,FR
-2954822336,2954822343,PL
-2954822344,2954822347,ES
-2954822348,2954822351,PL
-2954822352,2954822367,FR
-2954822368,2954822399,IT
-2954822400,2954822431,PL
-2954822432,2954822447,FR
-2954822448,2954822451,PL
-2954822452,2954822455,NL
-2954822456,2954822463,ES
-2954822464,2954822483,FR
-2954822484,2954822487,DE
-2954822488,2954822491,FR
-2954822492,2954822495,DE
-2954822496,2954822531,IE
-2954822532,2954822535,FR
-2954822536,2954822539,PL
-2954822540,2954822543,BE
-2954822544,2954822551,FR
-2954822552,2954822555,PL
-2954822556,2954822575,FR
-2954822576,2954822583,CH
-2954822584,2954822591,FR
-2954822592,2954822599,GB
-2954822600,2954822607,DE
-2954822608,2954822655,FR
-2954822656,2954822687,ES
-2954822688,2954822719,GB
-2954822720,2954822783,FR
-2954822784,2954822791,NL
-2954822792,2954822879,FR
-2954822880,2954822883,ES
-2954822884,2954822887,FR
-2954822888,2954822891,GB
-2954822892,2954822895,IE
-2954822896,2954822911,FR
-2954822912,2954822915,DE
-2954822916,2954822919,PL
-2954822920,2954822927,GB
-2954822928,2954822975,FR
-2954822976,2954822991,PL
-2954822992,2954823035,FR
-2954823036,2954823039,IT
-2954823040,2954823043,FR
-2954823044,2954823047,DE
-2954823048,2954823055,FR
-2954823056,2954823071,IE
-2954823072,2954823103,DE
-2954823104,2954823167,FR
-2954823168,2954823199,IE
-2954823200,2954823203,DE
-2954823204,2954823207,PL
-2954823208,2954823211,GB
-2954823212,2954823215,PL
-2954823216,2954823223,IE
-2954823224,2954823227,PL
-2954823228,2954823231,IT
-2954823232,2954823247,GB
-2954823248,2954823251,ES
-2954823252,2954823255,FR
-2954823256,2954823259,ES
-2954823260,2954823263,GB
-2954823264,2954823295,ES
-2954823296,2954823311,PL
-2954823312,2954823319,ES
-2954823320,2954823383,FR
-2954823384,2954823387,DE
-2954823388,2954823391,PL
-2954823392,2954823395,FR
+2954821632,2954822927,FR
+2954822928,2954822931,DE
+2954822932,2954823395,FR
2954823396,2954823399,GB
-2954823400,2954823403,NL
-2954823404,2954823407,PL
-2954823408,2954823423,IT
-2954823424,2954823551,IE
-2954823552,2954823555,PL
-2954823556,2954823559,GB
-2954823560,2954823563,FI
-2954823564,2954823607,FR
-2954823608,2954823611,CH
-2954823612,2954823619,FR
-2954823620,2954823623,PL
-2954823624,2954823627,LT
-2954823628,2954823631,ES
-2954823632,2954823639,CH
-2954823640,2954823643,FR
-2954823644,2954823647,CH
-2954823648,2954823695,FR
-2954823696,2954823703,PT
-2954823704,2954823707,FR
-2954823708,2954823711,PT
-2954823712,2954823715,FR
-2954823716,2954823719,GB
-2954823720,2954823727,FR
-2954823728,2954823735,PT
-2954823736,2954823743,FR
-2954823744,2954823759,CZ
-2954823760,2954823767,IT
-2954823768,2954823771,FR
-2954823772,2954823775,PL
-2954823776,2954823779,FR
-2954823780,2954823783,CZ
-2954823784,2954823787,ES
-2954823788,2954823791,NL
-2954823792,2954823871,FR
-2954823872,2954823887,PL
-2954823888,2954823891,ES
-2954823892,2954823895,NL
-2954823896,2954823903,PL
-2954823904,2954823911,FR
-2954823912,2954823915,PL
-2954823916,2954823919,FR
-2954823920,2954823927,PT
-2954823928,2954823935,PL
-2954823936,2954823967,FR
-2954823968,2954823999,ES
-2954824000,2954824063,FR
-2954824064,2954824071,GB
-2954824072,2954824075,FI
-2954824076,2954824079,FR
-2954824080,2954824083,PL
-2954824084,2954824087,GB
-2954824088,2954824091,IE
-2954824092,2954824095,PL
-2954824096,2954824127,GB
-2954824128,2954824131,PL
-2954824132,2954824135,BE
-2954824136,2954824139,IE
-2954824140,2954824159,FR
-2954824160,2954824175,IE
-2954824176,2954824179,PL
-2954824180,2954824183,ES
-2954824184,2954824187,PL
-2954824188,2954824191,FR
-2954824192,2954824207,GB
-2954824208,2954824223,FR
-2954824224,2954824255,NL
-2954824256,2954824259,FI
-2954824260,2954824263,IT
-2954824264,2954824271,IE
-2954824272,2954824275,ES
-2954824276,2954824279,FR
-2954824280,2954824283,PL
-2954824284,2954824287,FR
-2954824288,2954824319,ES
-2954824320,2954824351,PT
-2954824352,2954824367,PL
-2954824368,2954824431,FR
-2954824432,2954824447,BE
-2954824448,2954824451,PL
-2954824452,2954824455,DE
-2954824456,2954824463,NL
-2954824464,2954824471,FR
-2954824472,2954824479,PT
-2954824480,2954824511,BE
-2954824512,2954824543,GB
-2954824544,2954824575,PT
-2954824576,2954824607,FR
-2954824608,2954824611,PL
-2954824612,2954824623,FR
-2954824624,2954824627,GB
-2954824628,2954824631,PL
-2954824632,2954824635,FR
-2954824636,2954824639,PL
-2954824640,2954824671,IT
-2954824672,2954824703,ES
-2954824704,2954824707,FR
-2954824708,2954824711,IT
-2954824712,2954824719,FR
-2954824720,2954824767,IE
-2954824768,2954824775,FR
-2954824776,2954824779,NL
-2954824780,2954824783,FI
-2954824784,2954824799,IE
-2954824800,2954824831,PT
-2954824832,2954824863,PL
-2954824864,2954824895,IE
-2954824896,2954824903,FR
-2954824904,2954824907,CH
-2954824908,2954824919,BE
-2954824920,2954824923,GB
-2954824924,2954824927,ES
-2954824928,2954824931,FR
-2954824932,2954824943,ES
-2954824944,2954824959,FR
-2954824960,2954824975,IE
-2954824976,2954824991,ES
-2954824992,2954825023,FR
-2954825024,2954825031,GB
-2954825032,2954825063,FR
+2954823400,2954824255,FR
+2954824256,2954824259,ES
+2954824260,2954825063,FR
2954825064,2954825067,ES
-2954825068,2954825071,GB
-2954825072,2954825087,BE
-2954825088,2954825095,CZ
-2954825096,2954825099,IE
-2954825100,2954825103,PL
-2954825104,2954825119,DE
-2954825120,2954825151,PL
-2954825152,2954825159,FR
-2954825160,2954825163,DE
-2954825164,2954825167,GB
-2954825168,2954825171,DE
-2954825172,2954825175,NL
-2954825176,2954825179,IE
-2954825180,2954825183,GB
-2954825184,2954825187,DE
-2954825188,2954825191,NL
-2954825192,2954825195,FR
-2954825196,2954825199,CZ
-2954825200,2954825203,FR
-2954825204,2954825207,IT
-2954825208,2954825211,GB
-2954825212,2954825215,DE
-2954825216,2954825239,FR
-2954825240,2954825243,PL
-2954825244,2954825247,FR
-2954825248,2954825263,GB
-2954825264,2954825267,IT
-2954825268,2954825271,GB
-2954825272,2954825275,ES
-2954825276,2954825311,FR
-2954825312,2954825315,GB
-2954825316,2954825319,DE
-2954825320,2954825327,ES
-2954825328,2954825331,GB
-2954825332,2954825335,FR
-2954825336,2954825343,NL
-2954825344,2954825351,FR
-2954825352,2954825359,PT
-2954825360,2954825375,DE
-2954825376,2954825383,PT
-2954825384,2954825387,PL
-2954825388,2954825391,ES
-2954825392,2954825455,FR
-2954825456,2954825459,GB
-2954825460,2954825463,NL
-2954825464,2954825467,FR
-2954825468,2954825471,NL
-2954825472,2954825535,MA
-2954825536,2954825539,PL
-2954825540,2954825543,FR
-2954825544,2954825547,BE
-2954825548,2954825551,DE
-2954825552,2954825567,ES
-2954825568,2954825599,FR
-2954825600,2954825631,PL
-2954825632,2954825639,IE
-2954825640,2954825655,FR
-2954825656,2954825663,GB
-2954825664,2954825727,DE
-2954825728,2954825791,FR
-2954825792,2954825823,NL
-2954825824,2954825855,ES
-2954825856,2954825887,FR
-2954825888,2954825919,IT
-2954825920,2954825923,CH
-2954825924,2954825927,IT
-2954825928,2954825931,PL
-2954825932,2954825935,FR
-2954825936,2954825939,BE
-2954825940,2954825943,FI
-2954825944,2954825967,FR
-2954825968,2954825983,ES
-2954825984,2954826015,FR
-2954826016,2954826019,PT
-2954826020,2954826023,PL
-2954826024,2954826031,FR
-2954826032,2954826035,PL
-2954826036,2954826039,ES
-2954826040,2954826043,PL
-2954826044,2954826063,FR
-2954826064,2954826067,BE
-2954826068,2954826071,NL
-2954826072,2954826075,CH
-2954826076,2954826151,FR
-2954826152,2954826159,ES
-2954826160,2954826167,PL
-2954826168,2954826239,FR
-2954826240,2954826243,IT
-2954826244,2954826247,PT
-2954826248,2954826255,CH
-2954826256,2954826259,CZ
-2954826260,2954826263,PL
-2954826264,2954826267,FR
-2954826268,2954826271,NL
-2954826272,2954826279,FR
-2954826280,2954826287,IT
-2954826288,2954826299,FR
-2954826300,2954826303,GB
-2954826304,2954826367,FR
-2954826368,2954826371,DE
-2954826372,2954826375,PL
-2954826376,2954826379,FR
-2954826380,2954826391,PL
-2954826392,2954826403,FR
-2954826404,2954826407,PT
-2954826408,2954826411,ES
-2954826412,2954826415,FR
-2954826416,2954826419,GB
-2954826420,2954826423,PT
-2954826424,2954826427,DE
-2954826428,2954826447,IT
-2954826448,2954826451,GB
-2954826452,2954826471,FR
-2954826472,2954826475,GB
-2954826476,2954826751,FR
-2954826752,2954826755,CH
-2954826756,2954826759,FR
-2954826760,2954826763,PL
-2954826764,2954826767,IE
-2954826768,2954826771,GB
-2954826772,2954826775,PL
-2954826776,2954826779,FR
-2954826780,2954826783,PL
-2954826784,2954826791,FR
-2954826792,2954826799,DE
-2954826800,2954826807,NL
-2954826808,2954826811,FR
-2954826812,2954826815,IT
-2954826816,2954826879,GB
-2954826880,2954827007,DE
-2954827008,2954827263,GB
-2954827264,2954827295,ES
-2954827296,2954827327,DE
-2954827328,2954827391,FR
-2954827392,2954827487,IE
-2954827488,2954827519,PL
-2954827520,2954827647,FR
-2954827648,2954827775,GB
-2954827776,2954827783,PL
-2954827784,2954827799,FR
+2954825068,2954825315,FR
+2954825316,2954825319,ES
+2954825320,2954825403,FR
+2954825404,2954825407,ES
+2954825408,2954825535,FR
+2954825536,2954825539,ES
+2954825540,2954826031,FR
+2954826032,2954826035,ES
+2954826036,2954826159,FR
+2954826160,2954826163,ES
+2954826164,2954826759,FR
+2954826760,2954826763,ES
+2954826764,2954826775,FR
+2954826776,2954826779,ES
+2954826780,2954827799,FR
2954827800,2954827807,DE
-2954827808,2954827815,PL
-2954827816,2954827819,FR
-2954827820,2954827823,ES
-2954827824,2954827827,DE
-2954827828,2954827831,PT
-2954827832,2954827835,IE
-2954827836,2954827839,DE
-2954827840,2954827855,BE
-2954827856,2954827863,PT
-2954827864,2954827883,FR
-2954827884,2954827887,DE
-2954827888,2954827935,FR
-2954827936,2954827939,PL
-2954827940,2954827943,PT
-2954827944,2954827947,NL
-2954827948,2954827971,FR
-2954827972,2954827975,CH
-2954827976,2954827979,FR
-2954827980,2954827983,IE
-2954827984,2954827987,FR
-2954827988,2954827999,PL
-2954828000,2954828031,NL
-2954828032,2954828287,FR
-2954828288,2954828291,CZ
-2954828292,2954828303,DE
-2954828304,2954828307,PL
-2954828308,2954828311,BE
-2954828312,2954828315,FR
-2954828316,2954828319,PL
-2954828320,2954828335,FR
-2954828336,2954828339,ES
-2954828340,2954828343,PL
-2954828344,2954828347,BE
-2954828348,2954828351,DE
-2954828352,2954828415,FR
-2954828416,2954828431,IT
-2954828432,2954828435,FR
-2954828436,2954828439,IE
-2954828440,2954828443,DE
-2954828444,2954828447,PL
-2954828448,2954828463,FR
-2954828464,2954828467,GB
-2954828468,2954828471,PL
-2954828472,2954828479,FR
-2954828480,2954828495,ES
-2954828496,2954828511,IT
-2954828512,2954828799,FR
-2954828800,2954828815,NL
-2954828816,2954828819,FR
-2954828820,2954828823,GB
-2954828824,2954828831,PT
-2954828832,2954828835,ES
-2954828836,2954828839,DE
-2954828840,2954828847,FR
-2954828848,2954828863,GB
-2954828864,2954828895,FR
-2954828896,2954828927,BE
-2954828928,2954828943,IE
-2954828944,2954828955,FR
-2954828956,2954828959,DE
-2954828960,2954828975,FR
-2954828976,2954828983,GB
-2954828984,2954828987,DE
-2954828988,2954828991,IE
-2954828992,2954829007,FR
-2954829008,2954829023,IE
-2954829024,2954829135,FR
-2954829136,2954829139,ES
-2954829140,2954829143,IE
-2954829144,2954829147,FR
-2954829148,2954829151,ES
-2954829152,2954829167,CH
-2954829168,2954829171,NL
-2954829172,2954829175,FR
-2954829176,2954829179,NL
-2954829180,2954829183,GB
-2954829184,2954829263,FR
-2954829264,2954829271,PL
-2954829272,2954829279,DE
-2954829280,2954829303,FR
-2954829304,2954829307,PT
-2954829308,2954829311,PL
-2954829312,2954829319,ES
-2954829320,2954829323,GB
-2954829324,2954829331,FR
-2954829332,2954829335,CZ
-2954829336,2954829343,GB
-2954829344,2954829375,IT
-2954829376,2954829383,GB
-2954829384,2954829387,PL
-2954829388,2954829391,GB
-2954829392,2954829395,FR
-2954829396,2954829399,PL
-2954829400,2954829407,IT
-2954829408,2954829423,ES
-2954829424,2954829431,FR
-2954829432,2954829435,GB
-2954829436,2954829439,DE
-2954829440,2954829455,GB
-2954829456,2954829459,FR
-2954829460,2954829471,GB
-2954829472,2954829495,FR
-2954829496,2954829499,NL
-2954829500,2954829503,IT
-2954829504,2954829559,FR
-2954829560,2954829563,BE
-2954829564,2954829567,FI
-2954829568,2954829607,FR
-2954829608,2954829615,NL
-2954829616,2954829623,GB
-2954829624,2954829631,ES
-2954829632,2954829647,GB
-2954829648,2954829679,FR
-2954829680,2954829695,NL
-2954829696,2954829711,ES
-2954829712,2954829739,FR
-2954829740,2954829743,GB
-2954829744,2954829751,FR
-2954829752,2954829755,DE
-2954829756,2954829823,FR
-2954829824,2954829827,PT
-2954829828,2954829831,NL
-2954829832,2954829843,FR
+2954827808,2954829751,FR
+2954829752,2954829752,ES
+2954829753,2954829759,FR
+2954829760,2954829823,ES
+2954829824,2954829843,FR
2954829844,2954829847,DE
-2954829848,2954829851,BE
-2954829852,2954829855,PL
-2954829856,2954829875,FR
-2954829876,2954829879,GB
-2954829880,2954829887,FR
-2954829888,2954829903,PL
-2954829904,2954829919,GB
-2954829920,2954829951,FR
-2954829952,2954829959,ES
-2954829960,2954829963,PT
-2954829964,2954829967,PL
-2954829968,2954829975,FR
-2954829976,2954829979,ES
-2954829980,2954829983,FR
-2954829984,2954829999,GB
-2954830000,2954830015,IT
-2954830016,2954830079,FR
-2954830080,2954830087,IT
-2954830088,2954830099,FR
-2954830100,2954830103,FI
-2954830104,2954830111,DE
-2954830112,2954830143,FR
-2954830144,2954830147,ES
-2954830148,2954830151,PT
-2954830152,2954830159,IE
-2954830160,2954830163,GB
-2954830164,2954830167,PT
-2954830168,2954830175,DE
-2954830176,2954830271,FR
-2954830272,2954830279,DE
-2954830280,2954830283,PL
-2954830284,2954830303,FR
-2954830304,2954830335,NL
-2954830336,2954830343,FR
-2954830344,2954830351,IE
-2954830352,2954830355,FR
-2954830356,2954830359,GB
-2954830360,2954830367,FR
-2954830368,2954830375,NL
-2954830376,2954830383,ES
-2954830384,2954830387,PL
-2954830388,2954830399,FR
-2954830400,2954830415,IT
-2954830416,2954830431,ES
-2954830432,2954830447,FR
-2954830448,2954830455,GB
-2954830456,2954830463,CH
-2954830464,2954830591,FR
-2954830592,2954830847,GB
-2954830848,2954830859,FR
-2954830860,2954830863,GB
-2954830864,2954830879,FR
-2954830880,2954830887,GB
-2954830888,2954830927,FR
-2954830928,2954830931,CZ
-2954830932,2954830935,IE
-2954830936,2954830943,FR
-2954830944,2954830975,PT
-2954830976,2954831103,FR
-2954831104,2954831167,PT
-2954831168,2954831231,FR
-2954831232,2954831247,ES
-2954831248,2954831251,GB
-2954831252,2954831267,FR
-2954831268,2954831271,PL
-2954831272,2954831275,FR
-2954831276,2954831279,IT
-2954831280,2954831295,CH
-2954831296,2954831327,FR
-2954831328,2954831331,PL
-2954831332,2954831335,FR
-2954831336,2954831339,PL
-2954831340,2954831343,FR
-2954831344,2954831359,PL
-2954831360,2954831391,FR
-2954831392,2954831399,CZ
-2954831400,2954831403,CH
-2954831404,2954831407,DE
-2954831408,2954831411,ES
-2954831412,2954831415,FR
-2954831416,2954831423,DE
-2954831424,2954831511,FR
-2954831512,2954831515,NL
-2954831516,2954831519,FR
-2954831520,2954831523,FI
-2954831524,2954831527,FR
-2954831528,2954831539,PT
-2954831540,2954831543,FR
-2954831544,2954831547,IT
-2954831548,2954831551,FI
-2954831552,2954831583,DE
-2954831584,2954831599,ES
-2954831600,2954831603,GB
-2954831604,2954831607,BE
-2954831608,2954831611,FR
-2954831612,2954831615,ES
-2954831616,2954831631,DE
-2954831632,2954831647,FR
-2954831648,2954831651,GB
-2954831652,2954831667,FR
-2954831668,2954831671,PL
-2954831672,2954831711,FR
-2954831712,2954831743,ES
-2954831744,2954831747,FR
-2954831748,2954831751,DE
-2954831752,2954831759,FR
-2954831760,2954831775,FI
-2954831776,2954831779,CH
-2954831780,2954831783,FR
-2954831784,2954831787,DE
-2954831788,2954831791,CZ
-2954831792,2954831799,NL
-2954831800,2954831807,FR
-2954831808,2954831839,GB
-2954831840,2954831927,FR
-2954831928,2954831931,DE
-2954831932,2954831983,FR
-2954831984,2954831999,BE
-2954832000,2954832003,PL
-2954832004,2954832015,FR
-2954832016,2954832023,GB
-2954832024,2954832063,PL
-2954832064,2954832127,FR
-2954832128,2954832135,GB
-2954832136,2954832143,PL
-2954832144,2954832151,FR
-2954832152,2954832159,GB
-2954832160,2954832167,ES
-2954832168,2954832175,DE
-2954832176,2954832207,FR
-2954832208,2954832211,PT
-2954832212,2954832215,FR
-2954832216,2954832219,DE
-2954832220,2954832223,FR
-2954832224,2954832255,PL
-2954832256,2954832335,FR
-2954832336,2954832343,DE
+2954829848,2954830395,FR
+2954830396,2954830399,ES
+2954830400,2954831247,FR
+2954831248,2954831251,ES
+2954831252,2954832343,FR
2954832344,2954832347,CH
-2954832348,2954832351,ES
-2954832352,2954832383,FR
-2954832384,2954832639,NL
-2954832640,2954832643,DE
-2954832644,2954832647,FR
-2954832648,2954832655,GB
-2954832656,2954832679,FR
-2954832680,2954832687,PL
-2954832688,2954832691,GB
-2954832692,2954832695,FR
-2954832696,2954832699,PL
-2954832700,2954832703,CH
-2954832704,2954832775,FR
-2954832776,2954832779,PL
-2954832780,2954832799,FR
-2954832800,2954832815,ES
-2954832816,2954832823,FR
-2954832824,2954832831,ES
-2954832832,2954832835,GB
-2954832836,2954832839,LT
-2954832840,2954832847,GB
-2954832848,2954832851,IT
-2954832852,2954832855,PL
-2954832856,2954832859,DE
-2954832860,2954832863,ES
-2954832864,2954832887,FR
-2954832888,2954832891,PL
-2954832892,2954832895,CH
-2954832896,2954832927,FR
-2954832928,2954832959,GB
-2954832960,2954832975,IT
-2954832976,2954832991,FR
-2954832992,2954833023,GB
-2954833024,2954833047,FR
-2954833048,2954833055,PT
-2954833056,2954833063,IT
-2954833064,2954833075,FR
-2954833076,2954833079,ES
-2954833080,2954833087,PL
-2954833088,2954833095,FR
-2954833096,2954833099,PL
-2954833100,2954833103,FR
-2954833104,2954833111,CZ
-2954833112,2954833119,FR
-2954833120,2954833151,PL
-2954833152,2954833183,FR
-2954833184,2954833199,PL
-2954833200,2954833207,FR
-2954833208,2954833211,CH
-2954833212,2954833215,PL
-2954833216,2954833219,DE
-2954833220,2954833223,IT
-2954833224,2954833227,FR
-2954833228,2954833231,CH
-2954833232,2954833247,ES
-2954833248,2954833255,FR
-2954833256,2954833259,PL
-2954833260,2954833263,LT
-2954833264,2954833271,FR
-2954833272,2954833279,DE
-2954833280,2954833283,PL
-2954833284,2954833287,FR
-2954833288,2954833295,IE
-2954833296,2954833315,FR
-2954833316,2954833319,CZ
-2954833320,2954833343,FR
-2954833344,2954833391,GB
-2954833392,2954833395,FR
-2954833396,2954833399,PL
-2954833400,2954833415,FR
-2954833416,2954833419,ES
+2954832348,2954832891,FR
+2954832892,2954832895,ES
+2954832896,2954833419,FR
2954833420,2954833423,PL
-2954833424,2954833439,GB
-2954833440,2954833443,FR
-2954833444,2954833447,PL
-2954833448,2954833451,GB
-2954833452,2954833455,DE
-2954833456,2954833471,ES
-2954833472,2954833487,FR
-2954833488,2954833503,BE
-2954833504,2954833535,FR
-2954833536,2954833543,PL
-2954833544,2954833547,FR
-2954833548,2954833551,PL
-2954833552,2954833559,FR
-2954833560,2954833563,IT
-2954833564,2954833567,FR
-2954833568,2954833571,PL
-2954833572,2954833575,FR
-2954833576,2954833583,PL
-2954833584,2954833587,FR
-2954833588,2954833591,IT
-2954833592,2954833595,PL
-2954833596,2954833599,FR
-2954833600,2954833603,NL
-2954833604,2954833607,FR
-2954833608,2954833611,PL
-2954833612,2954833631,ES
-2954833632,2954833635,IT
-2954833636,2954833639,CZ
-2954833640,2954833647,FR
-2954833648,2954833651,IT
-2954833652,2954833659,FR
-2954833660,2954833663,BE
-2954833664,2954833695,FR
-2954833696,2954833699,PL
-2954833700,2954833703,BE
-2954833704,2954833707,FR
-2954833708,2954833711,FI
-2954833712,2954833719,PL
-2954833720,2954833723,DE
-2954833724,2954833727,PL
-2954833728,2954833731,ES
-2954833732,2954833735,FR
-2954833736,2954833743,PL
-2954833744,2954833759,FR
-2954833760,2954833791,BE
-2954833792,2954833807,PL
-2954833808,2954833811,FR
-2954833812,2954833815,DE
-2954833816,2954833823,PT
-2954833824,2954833855,GB
-2954833856,2954833887,ES
-2954833888,2954833919,FR
-2954833920,2954833927,PL
-2954833928,2954833931,ES
-2954833932,2954833935,IT
-2954833936,2954833951,PT
-2954833952,2954833955,PL
-2954833956,2954833959,FR
-2954833960,2954833967,DE
-2954833968,2954833983,ES
-2954833984,2954833999,FR
-2954834000,2954834011,PL
-2954834012,2954834063,FR
-2954834064,2954834067,PL
-2954834068,2954834071,NL
-2954834072,2954834079,PL
-2954834080,2954834095,IT
-2954834096,2954834099,PL
-2954834100,2954834103,CH
-2954834104,2954834107,PL
-2954834108,2954834111,ES
-2954834112,2954834143,FR
-2954834144,2954834151,GB
-2954834152,2954834175,FR
-2954834176,2954834207,LT
-2954834208,2954834223,FR
-2954834224,2954834231,IE
-2954834232,2954834235,PL
-2954834236,2954834255,FR
-2954834256,2954834271,ES
-2954834272,2954834303,CZ
-2954834304,2954834431,IE
-2954834432,2954834435,PL
-2954834436,2954834439,IE
-2954834440,2954834447,BE
-2954834448,2954834451,PL
-2954834452,2954834455,IT
-2954834456,2954834463,NL
-2954834464,2954834467,FR
-2954834468,2954834471,PL
-2954834472,2954834491,ES
-2954834492,2954834495,GB
-2954834496,2954834503,IE
-2954834504,2954834511,IT
-2954834512,2954834519,PL
-2954834520,2954834523,GB
-2954834524,2954834527,ES
-2954834528,2954834531,FR
-2954834532,2954834535,PL
-2954834536,2954834539,FR
-2954834540,2954834575,PL
-2954834576,2954834579,FR
-2954834580,2954834583,IT
-2954834584,2954834603,FR
-2954834604,2954834607,PL
-2954834608,2954834611,PT
-2954834612,2954834615,ES
-2954834616,2954834623,FR
-2954834624,2954834627,NL
-2954834628,2954834631,DE
-2954834632,2954834635,PL
-2954834636,2954834643,FR
-2954834644,2954834647,IE
-2954834648,2954834651,FR
-2954834652,2954834655,CH
-2954834656,2954834663,DE
-2954834664,2954834671,ES
-2954834672,2954834675,NL
-2954834676,2954834679,FR
-2954834680,2954834683,NL
-2954834684,2954834687,GB
-2954834688,2954834695,PL
-2954834696,2954834751,FR
-2954834752,2954834755,PL
-2954834756,2954834759,FR
-2954834760,2954834763,IT
-2954834764,2954834799,FR
-2954834800,2954834803,GB
-2954834804,2954834807,IT
-2954834808,2954834815,FR
-2954834816,2954834879,BE
-2954834880,2954834911,PL
-2954834912,2954835199,FR
-2954835200,2954835207,ES
-2954835208,2954835215,PT
-2954835216,2954835223,IT
-2954835224,2954835227,DE
-2954835228,2954835231,PL
-2954835232,2954835263,FR
-2954835264,2954835279,DE
-2954835280,2954835283,PL
-2954835284,2954835287,ES
-2954835288,2954835295,IT
-2954835296,2954835299,PL
-2954835300,2954835303,LT
-2954835304,2954835307,ES
-2954835308,2954835311,BE
-2954835312,2954835327,FR
-2954835328,2954835335,ES
-2954835336,2954835343,CZ
-2954835344,2954835351,FR
-2954835352,2954835355,ES
-2954835356,2954835359,CH
-2954835360,2954835363,BE
-2954835364,2954835367,NL
-2954835368,2954835371,IT
-2954835372,2954835375,LT
-2954835376,2954835391,CH
-2954835392,2954835399,DE
-2954835400,2954835415,FR
-2954835416,2954835419,CH
-2954835420,2954835423,GB
-2954835424,2954835439,IT
-2954835440,2954835443,DE
-2954835444,2954835447,FR
-2954835448,2954835451,PL
+2954833424,2954833555,FR
+2954833556,2954833559,NL
+2954833560,2954833567,FR
+2954833568,2954833571,ES
+2954833572,2954834519,FR
+2954834520,2954834523,ES
+2954834524,2954834671,FR
+2954834672,2954834675,ES
+2954834676,2954835295,FR
+2954835296,2954835299,ES
+2954835300,2954835443,FR
+2954835444,2954835447,ES
+2954835448,2954835451,FR
2954835452,2954835455,ES
-2954835456,2954835471,PL
-2954835472,2954835475,DE
-2954835476,2954835479,ES
-2954835480,2954835511,FR
-2954835512,2954835519,ES
-2954835520,2954835539,PL
-2954835540,2954835543,FR
-2954835544,2954835547,ES
-2954835548,2954835551,PL
-2954835552,2954835607,FR
-2954835608,2954835611,DE
-2954835612,2954835627,FR
-2954835628,2954835635,ES
-2954835636,2954835639,FR
-2954835640,2954835643,DE
-2954835644,2954835659,ES
-2954835660,2954835663,FR
-2954835664,2954835683,PL
-2954835684,2954835699,FR
-2954835700,2954835707,ES
-2954835708,2954835711,BE
-2954835712,2954836239,FR
-2954836240,2954836255,CZ
-2954836256,2954836259,GB
-2954836260,2954836263,LT
-2954836264,2954836267,GB
-2954836268,2954836335,FR
-2954836336,2954836339,IT
-2954836340,2954836351,FR
-2954836352,2954836355,IE
-2954836356,2954836367,FR
-2954836368,2954836383,CZ
-2954836384,2954836423,FR
-2954836424,2954836427,IT
-2954836428,2954836431,GB
-2954836432,2954836435,IT
-2954836436,2954836439,NL
-2954836440,2954836447,GB
-2954836448,2954836479,CH
-2954836480,2954836735,FR
-2954836736,2954836743,ES
-2954836744,2954836759,FR
-2954836760,2954836767,CH
-2954836768,2954836863,FR
-2954836864,2954836875,ES
-2954836876,2954836879,FR
-2954836880,2954836895,IT
-2954836896,2954836927,FR
-2954836928,2954836935,NL
-2954836936,2954836943,PT
-2954836944,2954836951,NL
-2954836952,2954836955,ES
-2954836956,2954836959,GB
-2954836960,2954836963,ES
-2954836964,2954836967,IE
-2954836968,2954836979,FR
-2954836980,2954836983,NL
-2954836984,2954836991,GB
-2954836992,2954837023,PT
-2954837024,2954837027,NL
-2954837028,2954837031,ES
-2954837032,2954837039,FR
-2954837040,2954837055,PL
-2954837056,2954837071,IT
+2954835456,2954837071,FR
2954837072,2954837075,ES
-2954837076,2954837091,FR
-2954837092,2954837103,NL
-2954837104,2954837123,FR
-2954837124,2954837127,ES
-2954837128,2954837131,FR
-2954837132,2954837135,FI
-2954837136,2954837151,PL
-2954837152,2954837215,FR
-2954837216,2954837247,PL
-2954837248,2954837271,FR
-2954837272,2954837275,DE
-2954837276,2954837279,PL
-2954837280,2954837311,FR
-2954837312,2954837319,FI
-2954837320,2954837327,NL
-2954837328,2954837335,GB
-2954837336,2954837343,LT
-2954837344,2954837351,GB
-2954837352,2954837359,PL
-2954837360,2954837375,FR
-2954837376,2954837383,LT
-2954837384,2954837387,FR
-2954837388,2954837391,PL
-2954837392,2954837407,FR
-2954837408,2954837423,ES
-2954837424,2954837431,FR
-2954837432,2954837435,GB
-2954837436,2954837439,FR
-2954837440,2954837471,GB
-2954837472,2954837479,ES
-2954837480,2954837487,FR
-2954837488,2954837495,CH
-2954837496,2954837499,DE
-2954837500,2954837503,ES
-2954837504,2954837535,FR
-2954837536,2954837543,PT
-2954837544,2954837551,IT
-2954837552,2954837559,GB
-2954837560,2954837563,FR
-2954837564,2954837567,PT
-2954837568,2954837575,BE
-2954837576,2954837579,FR
-2954837580,2954837583,GB
-2954837584,2954837591,IE
-2954837592,2954837599,PL
-2954837600,2954837607,GB
-2954837608,2954837615,BE
-2954837616,2954837619,FR
-2954837620,2954837623,PL
-2954837624,2954837631,GB
-2954837632,2954837639,FR
-2954837640,2954837643,PL
-2954837644,2954837647,GB
-2954837648,2954837651,BE
-2954837652,2954837663,FR
-2954837664,2954837667,IT
-2954837668,2954837671,CZ
-2954837672,2954837687,FR
-2954837688,2954837691,NL
-2954837692,2954837791,FR
-2954837792,2954837823,GB
-2954837824,2954837827,BE
+2954837076,2954837667,FR
+2954837668,2954837671,ES
+2954837672,2954837827,FR
2954837828,2954837831,DE
-2954837832,2954837839,PL
-2954837840,2954837843,ES
-2954837844,2954837851,FR
-2954837852,2954837855,IT
-2954837856,2954837859,FR
-2954837860,2954837863,DE
-2954837864,2954837867,FR
-2954837868,2954837871,DE
-2954837872,2954837879,PL
-2954837880,2954837883,FR
-2954837884,2954837887,ES
-2954837888,2954837903,IT
-2954837904,2954837919,FR
-2954837920,2954837951,PL
-2954837952,2954838015,FR
-2954838016,2954838019,PL
-2954838020,2954838047,FR
-2954838048,2954838055,BE
-2954838056,2954838071,FR
-2954838072,2954838075,PL
-2954838076,2954838079,NL
-2954838080,2954838087,FR
-2954838088,2954838091,IT
-2954838092,2954838095,FR
-2954838096,2954838099,ES
-2954838100,2954838111,FR
-2954838112,2954838115,CZ
-2954838116,2954838119,CH
-2954838120,2954838123,GB
-2954838124,2954838127,IT
-2954838128,2954838131,GB
-2954838132,2954838135,FR
-2954838136,2954838139,ES
-2954838140,2954838143,CH
-2954838144,2954838151,FR
-2954838152,2954838159,BE
-2954838160,2954838163,PT
-2954838164,2954838167,GB
-2954838168,2954838171,NL
-2954838172,2954838175,IT
-2954838176,2954838179,GB
-2954838180,2954838183,FR
-2954838184,2954838191,IT
-2954838192,2954838199,ES
-2954838200,2954838203,CH
-2954838204,2954838207,FR
-2954838208,2954838211,ES
-2954838212,2954838215,IE
-2954838216,2954838219,GB
-2954838220,2954838223,ES
-2954838224,2954838239,FR
-2954838240,2954838255,PL
-2954838256,2954838263,IE
-2954838264,2954838271,FR
-2954838272,2954838279,IE
-2954838280,2954838287,IT
-2954838288,2954838303,BE
-2954838304,2954838319,GB
-2954838320,2954838327,ES
-2954838328,2954838351,FR
-2954838352,2954838367,IE
-2954838368,2954838379,FR
-2954838380,2954838383,PL
-2954838384,2954838387,FR
-2954838388,2954838391,CH
-2954838392,2954838395,FR
-2954838396,2954838399,IE
-2954838400,2954838415,IT
-2954838416,2954838419,ES
-2954838420,2954838423,FR
-2954838424,2954838431,CZ
-2954838432,2954838435,ES
-2954838436,2954838447,FR
-2954838448,2954838455,NL
-2954838456,2954838463,FR
-2954838464,2954838467,ES
-2954838468,2954838475,PL
-2954838476,2954838479,IT
-2954838480,2954838511,FR
-2954838512,2954838519,IT
-2954838520,2954838523,DE
-2954838524,2954838527,IE
-2954838528,2954838531,IT
-2954838532,2954838535,IE
-2954838536,2954838539,PL
-2954838540,2954838543,CH
-2954838544,2954838559,PL
-2954838560,2954838575,FR
-2954838576,2954838583,IT
-2954838584,2954838591,BE
-2954838592,2954838599,DE
+2954837832,2954837867,FR
+2954837868,2954837871,ES
+2954837872,2954838599,FR
2954838600,2954838607,GB
-2954838608,2954838615,NL
-2954838616,2954838623,FR
-2954838624,2954838639,IT
-2954838640,2954838643,ES
-2954838644,2954838647,DE
-2954838648,2954838655,PL
-2954838656,2954838719,IE
-2954838720,2954838751,FR
-2954838752,2954838767,BE
-2954838768,2954838871,FR
-2954838872,2954838879,IT
-2954838880,2954838895,ES
-2954838896,2954838915,FR
-2954838916,2954838927,GB
-2954838928,2954838931,FR
-2954838932,2954838939,GB
-2954838940,2954838943,CH
-2954838944,2954838991,FR
-2954838992,2954838995,DE
-2954838996,2954838999,ES
-2954839000,2954839007,GB
-2954839008,2954839023,PT
-2954839024,2954839039,FR
-2954839040,2954839107,GB
-2954839108,2954839111,BE
-2954839112,2954839119,ES
-2954839120,2954839127,NL
-2954839128,2954839135,GB
-2954839136,2954839167,DE
-2954839168,2954839199,PL
-2954839200,2954839207,FR
-2954839208,2954839211,PT
-2954839212,2954839231,FR
-2954839232,2954839243,PL
-2954839244,2954839247,ES
-2954839248,2954839263,FR
-2954839264,2954839267,PL
-2954839268,2954839303,FR
-2954839304,2954839311,ES
-2954839312,2954839319,PL
-2954839320,2954839343,GB
-2954839344,2954839347,ES
-2954839348,2954839351,IT
-2954839352,2954839355,NL
-2954839356,2954839359,ES
-2954839360,2954839363,DE
-2954839364,2954839367,IT
-2954839368,2954839371,ES
-2954839372,2954839383,FR
-2954839384,2954839395,PL
-2954839396,2954839399,ES
-2954839400,2954839407,FR
-2954839408,2954839423,IE
-2954839424,2954839471,GB
+2954838608,2954839267,FR
+2954839268,2954839271,ES
+2954839272,2954839471,FR
2954839472,2954839479,BE
-2954839480,2954839483,DE
-2954839484,2954839487,FR
-2954839488,2954839519,ES
-2954839520,2954839523,GB
-2954839524,2954839527,PL
-2954839528,2954839535,GB
-2954839536,2954839543,FR
-2954839544,2954839547,GB
-2954839548,2954839551,ES
-2954839552,2954840063,DE
-2954840064,2954840079,CZ
-2954840080,2954840087,PL
-2954840088,2954840095,FR
-2954840096,2954840103,ES
-2954840104,2954840107,GB
-2954840108,2954840111,ES
-2954840112,2954840115,FR
-2954840116,2954840119,PL
-2954840120,2954840123,ES
-2954840124,2954840127,PL
-2954840128,2954840139,FR
-2954840140,2954840143,PL
-2954840144,2954840147,ES
-2954840148,2954840151,BE
-2954840152,2954840155,IE
-2954840156,2954840179,FR
-2954840180,2954840183,IT
-2954840184,2954840223,FR
-2954840224,2954840479,PL
-2954840480,2954840495,FR
-2954840496,2954840499,GB
-2954840500,2954840503,ES
-2954840504,2954840507,FR
-2954840508,2954840519,PL
-2954840520,2954840523,FR
-2954840524,2954840527,ES
-2954840528,2954840543,FR
-2954840544,2954840575,ES
-2954840576,2954840591,FI
-2954840592,2954840607,IT
-2954840608,2954840611,CH
-2954840612,2954840615,GB
-2954840616,2954840619,NL
-2954840620,2954840623,PL
-2954840624,2954840639,ES
-2954840640,2954840647,FR
-2954840648,2954840651,DE
-2954840652,2954840655,PL
-2954840656,2954840663,FR
-2954840664,2954840671,PL
-2954840672,2954840703,IT
-2954840704,2954840719,FR
-2954840720,2954840727,GB
-2954840728,2954840731,ES
-2954840732,2954840735,DE
-2954840736,2954840743,FR
-2954840744,2954840751,GB
-2954840752,2954840759,FR
-2954840760,2954840763,GB
-2954840764,2954840767,PL
-2954840768,2954840775,GB
-2954840776,2954840779,FR
-2954840780,2954840783,NL
-2954840784,2954840799,BE
-2954840800,2954840803,PL
-2954840804,2954840831,FR
-2954840832,2954840847,PL
-2954840848,2954840851,CH
-2954840852,2954840855,BE
-2954840856,2954840859,DE
-2954840860,2954840863,ES
-2954840864,2954840903,FR
-2954840904,2954840907,PL
-2954840908,2954840919,DE
-2954840920,2954840927,FR
-2954840928,2954840931,IT
-2954840932,2954840939,FR
-2954840940,2954840943,ES
-2954840944,2954840959,FR
-2954840960,2954841023,IT
-2954841024,2954841091,ES
-2954841092,2954841095,PL
-2954841096,2954841103,GB
-2954841104,2954841111,ES
-2954841112,2954841151,FR
-2954841152,2954841183,ES
-2954841184,2954841199,FR
-2954841200,2954841203,CZ
-2954841204,2954841215,PL
-2954841216,2954841231,FR
-2954841232,2954841239,DE
-2954841240,2954841247,GB
-2954841248,2954841255,PL
-2954841256,2954841259,ES
-2954841260,2954841263,GB
-2954841264,2954841271,FR
-2954841272,2954841275,IT
-2954841276,2954841295,FR
-2954841296,2954841299,ES
-2954841300,2954841307,PL
-2954841308,2954841311,GB
-2954841312,2954841471,FR
-2954841472,2954841503,PL
-2954841504,2954841507,DE
-2954841508,2954841511,GB
-2954841512,2954841519,FR
-2954841520,2954841523,PL
-2954841524,2954841527,DE
-2954841528,2954841535,CH
-2954841536,2954841543,GB
-2954841544,2954841551,PL
-2954841552,2954841555,FR
-2954841556,2954841559,PL
-2954841560,2954841563,FI
-2954841564,2954841567,PL
-2954841568,2954841591,ES
-2954841592,2954841595,PL
-2954841596,2954841599,ES
-2954841600,2954841631,PL
-2954841632,2954841635,FR
-2954841636,2954841639,ES
-2954841640,2954841643,FR
-2954841644,2954841647,GB
-2954841648,2954841655,FR
-2954841656,2954841659,GB
-2954841660,2954841663,FR
-2954841664,2954841667,IE
-2954841668,2954841671,NL
-2954841672,2954841675,PL
-2954841676,2954841679,FR
-2954841680,2954841683,GB
-2954841684,2954841687,FR
-2954841688,2954841691,PL
-2954841692,2954841695,FR
-2954841696,2954841699,IT
-2954841700,2954841703,FR
-2954841704,2954841711,BE
-2954841712,2954841715,FR
-2954841716,2954841719,CZ
-2954841720,2954841759,FR
-2954841760,2954841775,DE
-2954841776,2954841783,PL
-2954841784,2954841787,PT
-2954841788,2954841795,ES
-2954841796,2954841799,FR
-2954841800,2954841803,PL
-2954841804,2954841807,DE
-2954841808,2954841811,PT
-2954841812,2954841815,GB
-2954841816,2954841819,FR
-2954841820,2954841823,GB
-2954841824,2954841851,FR
-2954841852,2954841855,ES
-2954841856,2954841875,FR
-2954841876,2954841879,NL
-2954841880,2954841887,PL
-2954841888,2954841907,FR
-2954841908,2954841911,PL
-2954841912,2954841919,NL
-2954841920,2954841927,GB
-2954841928,2954841931,PL
-2954841932,2954841935,FI
-2954841936,2954841939,BE
-2954841940,2954841943,PL
-2954841944,2954841951,DE
-2954841952,2954841983,ES
-2954841984,2954842031,FR
-2954842032,2954842039,PL
-2954842040,2954842043,DE
-2954842044,2954842047,GB
-2954842048,2954842067,FR
-2954842068,2954842071,GB
-2954842072,2954842075,FR
-2954842076,2954842079,GB
-2954842080,2954842095,FR
-2954842096,2954842111,IE
-2954842112,2954842239,FR
-2954842240,2954842243,ES
-2954842244,2954842247,FR
-2954842248,2954842251,ES
-2954842252,2954842255,GB
-2954842256,2954842263,FR
-2954842264,2954842267,CZ
-2954842268,2954842271,FR
-2954842272,2954842275,IE
-2954842276,2954842279,FR
-2954842280,2954842291,PL
-2954842292,2954842295,CH
-2954842296,2954842299,GB
-2954842300,2954842367,ES
-2954842368,2954842375,NL
-2954842376,2954842403,FR
-2954842404,2954842407,IT
-2954842408,2954842411,CZ
-2954842412,2954842415,GB
-2954842416,2954842423,FR
-2954842424,2954842427,ES
-2954842428,2954842439,FR
-2954842440,2954842443,IE
-2954842444,2954842447,NL
-2954842448,2954842451,GB
-2954842452,2954842455,CZ
-2954842456,2954842459,FR
-2954842460,2954842463,FI
-2954842464,2954842467,PL
-2954842468,2954842471,FR
-2954842472,2954842479,GB
-2954842480,2954842483,IT
-2954842484,2954842487,PL
-2954842488,2954842491,CH
-2954842492,2954842559,FR
-2954842560,2954842591,GB
-2954842592,2954842623,PT
-2954842624,2954842655,DE
-2954842656,2954842659,ES
-2954842660,2954842663,FI
-2954842664,2954842667,FR
-2954842668,2954842671,IE
-2954842672,2954842703,FR
-2954842704,2954842719,DE
-2954842720,2954842723,FR
-2954842724,2954842727,PL
-2954842728,2954842731,ES
-2954842732,2954842735,LT
-2954842736,2954842743,NL
-2954842744,2954842751,CH
-2954842752,2954842767,FR
-2954842768,2954842771,BE
-2954842772,2954842775,GB
-2954842776,2954842783,FR
-2954842784,2954842791,PT
-2954842792,2954842799,BE
-2954842800,2954842807,ES
-2954842808,2954842811,GB
-2954842812,2954842815,FI
-2954842816,2954842855,FR
-2954842856,2954842863,DE
-2954842864,2954842879,FR
-2954842880,2954842911,PL
-2954842912,2954842919,IT
-2954842920,2954842927,FR
-2954842928,2954842935,BE
-2954842936,2954842943,IE
-2954842944,2954842951,CH
-2954842952,2954842955,PL
-2954842956,2954842959,IT
-2954842960,2954843007,FR
-2954843008,2954843011,DE
-2954843012,2954843015,FR
-2954843016,2954843023,LT
-2954843024,2954843027,DE
-2954843028,2954843031,ES
-2954843032,2954843035,FR
-2954843036,2954843039,IT
-2954843040,2954843043,FR
-2954843044,2954843047,GB
-2954843048,2954843055,FR
-2954843056,2954843071,PL
-2954843072,2954843103,FR
-2954843104,2954843135,NL
-2954843136,2954843183,FR
-2954843184,2954843187,NL
-2954843188,2954843191,GB
-2954843192,2954843195,NL
-2954843196,2954843199,ES
-2954843200,2954843263,FR
-2954843264,2954843271,CZ
-2954843272,2954843275,PL
-2954843276,2954843311,FR
-2954843312,2954843315,ES
-2954843316,2954843319,FR
-2954843320,2954843323,DE
-2954843324,2954843327,NL
-2954843328,2954843335,IT
-2954843336,2954843339,GB
-2954843340,2954843343,NL
-2954843344,2954843347,FR
-2954843348,2954843351,PL
-2954843352,2954843375,FR
-2954843376,2954843391,ES
-2954843392,2954843407,FR
-2954843408,2954843415,CH
-2954843416,2954843419,PL
-2954843420,2954843423,FR
-2954843424,2954843439,NL
-2954843440,2954843459,FR
-2954843460,2954843463,PL
-2954843464,2954843471,FR
-2954843472,2954843487,GB
-2954843488,2954843495,DE
-2954843496,2954843503,FR
-2954843504,2954843507,PT
-2954843508,2954843511,FR
-2954843512,2954843519,PL
-2954843520,2954843591,FR
-2954843592,2954843595,BE
-2954843596,2954843599,CH
-2954843600,2954843603,IT
-2954843604,2954843607,PL
-2954843608,2954843611,FR
-2954843612,2954843615,PL
-2954843616,2954843631,FR
-2954843632,2954843639,CH
-2954843640,2954843643,IE
-2954843644,2954843647,DE
-2954843648,2954843711,PL
-2954843712,2954843715,FR
-2954843716,2954843719,GB
-2954843720,2954843723,BE
-2954843724,2954843727,DE
-2954843728,2954843775,FR
-2954843776,2954843783,PL
-2954843784,2954843791,GB
-2954843792,2954843807,IE
-2954843808,2954843823,PL
-2954843824,2954843839,GB
-2954843840,2954843855,IE
-2954843856,2954843863,PL
-2954843864,2954843867,ES
-2954843868,2954843887,FR
-2954843888,2954843895,BE
-2954843896,2954843899,PT
-2954843900,2954844031,FR
-2954844032,2954844039,PL
-2954844040,2954844047,GB
-2954844048,2954844063,PL
-2954844064,2954844095,BE
-2954844096,2954844119,FR
-2954844120,2954844123,PL
-2954844124,2954844127,IT
-2954844128,2954844143,FR
-2954844144,2954844147,NL
+2954839480,2954840255,FR
+2954840256,2954840447,GB
+2954840448,2954840515,FR
+2954840516,2954840519,NL
+2954840520,2954840927,FR
+2954840928,2954840931,DE
+2954840932,2954841567,FR
+2954841568,2954841583,ES
+2954841584,2954843503,FR
+2954843504,2954843507,ES
+2954843508,2954843767,FR
+2954843768,2954843771,ES
+2954843772,2954844147,FR
2954844148,2954844151,DE
-2954844152,2954844155,ES
-2954844156,2954844175,FR
-2954844176,2954844179,DE
-2954844180,2954844183,NL
-2954844184,2954844187,FR
-2954844188,2954844191,ES
-2954844192,2954844223,IE
-2954844224,2954844263,FR
-2954844264,2954844267,IE
-2954844268,2954844271,ES
-2954844272,2954844275,PL
-2954844276,2954844279,GB
-2954844280,2954844287,PT
-2954844288,2954844351,PL
-2954844352,2954844415,FR
-2954844416,2954844419,IT
-2954844420,2954844423,ES
-2954844424,2954844431,FR
-2954844432,2954844447,BE
-2954844448,2954844455,CH
-2954844456,2954844463,FR
-2954844464,2954844467,ES
-2954844468,2954844471,PL
-2954844472,2954844479,NL
-2954844480,2954844483,DE
-2954844484,2954844487,GB
-2954844488,2954844499,FR
-2954844500,2954844503,PL
-2954844504,2954844507,FR
-2954844508,2954844511,ES
-2954844512,2954844543,DE
-2954844544,2954844551,FR
-2954844552,2954844559,ES
-2954844560,2954844575,FR
-2954844576,2954844591,DE
-2954844592,2954844599,ES
-2954844600,2954844603,FR
-2954844604,2954844607,CZ
-2954844608,2954844687,FR
-2954844688,2954844703,CH
-2954844704,2954844711,PL
-2954844712,2954844719,PT
-2954844720,2954844723,ES
-2954844724,2954844735,FR
-2954844736,2954844767,GB
-2954844768,2954844799,FR
-2954844800,2954844815,ES
-2954844816,2954844819,GB
-2954844820,2954844927,FR
-2954844928,2954844931,PT
-2954844932,2954844943,FR
-2954844944,2954844947,GB
-2954844948,2954844951,IT
-2954844952,2954844959,FR
-2954844960,2954844967,PL
-2954844968,2954844971,FR
-2954844972,2954844975,PL
-2954844976,2954844991,FR
-2954844992,2954844995,PL
-2954844996,2954844999,FR
-2954845000,2954845003,NL
-2954845004,2954845023,FR
-2954845024,2954845039,IE
-2954845040,2954845043,FR
-2954845044,2954845047,IT
-2954845048,2954845055,FI
-2954845056,2954845059,PT
-2954845060,2954845063,FR
-2954845064,2954845067,NL
-2954845068,2954845071,PL
-2954845072,2954845079,BE
-2954845080,2954845083,DE
-2954845084,2954845087,FR
-2954845088,2954845091,FI
-2954845092,2954845099,FR
-2954845100,2954845103,ES
-2954845104,2954845111,FR
-2954845112,2954845119,NL
-2954845120,2954845135,PL
-2954845136,2954845139,GB
-2954845140,2954845143,FR
-2954845144,2954845147,IT
-2954845148,2954845151,GB
-2954845152,2954845159,PL
-2954845160,2954845167,GB
-2954845168,2954845183,BE
-2954845184,2954845199,PL
-2954845200,2954845207,NL
-2954845208,2954845211,ES
-2954845212,2954845215,CH
-2954845216,2954845223,FR
-2954845224,2954845231,NL
-2954845232,2954845239,DE
-2954845240,2954845247,NL
-2954845248,2954845263,CH
-2954845264,2954845279,PL
-2954845280,2954845283,CZ
-2954845284,2954845287,GB
-2954845288,2954845299,FR
-2954845300,2954845303,ES
-2954845304,2954845311,PL
-2954845312,2954845315,CH
-2954845316,2954845319,FR
-2954845320,2954845327,LT
-2954845328,2954845343,FR
-2954845344,2954845359,FI
-2954845360,2954845363,FR
-2954845364,2954845367,ES
-2954845368,2954845371,NL
-2954845372,2954845375,DE
-2954845376,2954845407,PL
-2954845408,2954845439,FR
-2954845440,2954845951,GB
-2954845952,2954845967,ES
-2954845968,2954845999,FR
-2954846000,2954846015,PT
-2954846016,2954846047,FR
-2954846048,2954846055,NL
-2954846056,2954846059,FR
-2954846060,2954846063,GB
-2954846064,2954846079,NL
-2954846080,2954846087,FR
-2954846088,2954846095,DE
-2954846096,2954846099,PL
-2954846100,2954846103,NL
-2954846104,2954846107,FR
-2954846108,2954846111,GB
-2954846112,2954846119,FR
-2954846120,2954846123,IE
-2954846124,2954846127,IT
-2954846128,2954846135,FR
-2954846136,2954846139,DE
-2954846140,2954846143,GB
-2954846144,2954846191,FR
-2954846192,2954846207,FI
-2954846208,2954854403,FR
-2954854404,2954854407,IT
-2954854408,2954854411,FR
-2954854412,2954854415,PL
-2954854416,2954854431,GB
-2954854432,2954854463,ES
-2954854464,2954854471,LT
-2954854472,2954854475,FR
-2954854476,2954854479,BE
-2954854480,2954854495,FR
-2954854496,2954854511,IT
-2954854512,2954854527,ES
-2954854528,2954854559,FR
-2954854560,2954854575,NL
-2954854576,2954854619,FR
-2954854620,2954854623,ES
-2954854624,2954854655,FR
-2954854656,2954854659,PL
-2954854660,2954854663,PT
-2954854664,2954854667,FI
-2954854668,2954854687,FR
-2954854688,2954854691,PL
-2954854692,2954854695,IT
-2954854696,2954854699,PL
-2954854700,2954854703,ES
-2954854704,2954854711,FR
-2954854712,2954854719,DE
-2954854720,2954854783,ES
-2954854784,2954854815,IT
-2954854816,2954854851,FR
-2954854852,2954854855,GB
-2954854856,2954854863,FR
-2954854864,2954854867,PL
-2954854868,2954854871,GB
-2954854872,2954854879,ES
-2954854880,2954854895,IT
-2954854896,2954854899,FR
-2954854900,2954854903,PL
-2954854904,2954854919,FR
-2954854920,2954854927,GB
-2954854928,2954854943,FI
-2954854944,2954855011,FR
-2954855012,2954855015,CZ
-2954855016,2954855027,GB
-2954855028,2954855031,PL
-2954855032,2954855039,GB
-2954855040,2954855043,FR
-2954855044,2954855047,IE
-2954855048,2954855051,FR
-2954855052,2954855055,ES
-2954855056,2954855059,FR
-2954855060,2954855063,ES
-2954855064,2954855067,BE
-2954855068,2954855071,ES
-2954855072,2954855075,FR
-2954855076,2954855079,DE
-2954855080,2954855087,FR
-2954855088,2954855091,PL
-2954855092,2954855095,CH
-2954855096,2954855103,FR
-2954855104,2954855167,IE
-2954855168,2954855191,FR
-2954855192,2954855199,NL
-2954855200,2954855295,FR
-2954855296,2954855359,BE
-2954855360,2954855391,NL
-2954855392,2954855423,FR
-2954855424,2954855431,GB
-2954855432,2954855439,FR
-2954855440,2954855455,LT
-2954855456,2954855479,FR
-2954855480,2954855495,IT
-2954855496,2954855503,GB
-2954855504,2954855507,IT
+2954844152,2954844999,FR
+2954845000,2954845003,ES
+2954845004,2954846107,FR
+2954846108,2954846111,ES
+2954846112,2954846139,FR
+2954846140,2954846143,ES
+2954846144,2954855075,FR
+2954855076,2954855079,ES
+2954855080,2954855507,FR
2954855508,2954855511,DE
2954855512,2954855515,FR
-2954855516,2954855523,PL
-2954855524,2954855527,DE
-2954855528,2954855535,ES
-2954855536,2954855551,FR
-2954855552,2954855567,PL
-2954855568,2954855571,FR
-2954855572,2954855575,BE
-2954855576,2954855579,FR
-2954855580,2954855583,IT
-2954855584,2954855615,FR
-2954855616,2954855619,PL
-2954855620,2954855623,FR
-2954855624,2954855631,IT
-2954855632,2954855639,FR
-2954855640,2954855643,PL
-2954855644,2954855647,GB
-2954855648,2954855651,CZ
-2954855652,2954855655,GB
-2954855656,2954855659,FR
-2954855660,2954855663,DE
-2954855664,2954855679,FR
-2954855680,2954855695,NL
-2954855696,2954855703,FR
-2954855704,2954855707,ES
-2954855708,2954855743,PL
-2954855744,2954855807,FR
-2954855808,2954855871,IE
-2954855872,2954855879,PL
-2954855880,2954855887,ES
-2954855888,2954855903,FR
-2954855904,2954855919,PL
-2954855920,2954855999,FR
-2954856000,2954856071,PL
-2954856072,2954856075,NL
-2954856076,2954856079,FR
-2954856080,2954856083,DE
-2954856084,2954856087,FR
-2954856088,2954856095,ES
-2954856096,2954856111,FR
-2954856112,2954856115,IE
-2954856116,2954856119,DE
-2954856120,2954856123,PL
-2954856124,2954856127,CZ
-2954856128,2954856167,FR
-2954856168,2954856175,ES
-2954856176,2954856179,IT
-2954856180,2954856187,PL
-2954856188,2954856447,FR
-2954856448,2954856511,ES
-2954856512,2954856543,FR
-2954856544,2954856547,PL
-2954856548,2954856551,FR
-2954856552,2954856559,IE
-2954856560,2954856563,ES
-2954856564,2954856567,LT
-2954856568,2954856571,PL
-2954856572,2954856575,BE
-2954856576,2954856583,ES
-2954856584,2954856607,FR
-2954856608,2954856611,BE
-2954856612,2954856615,FR
-2954856616,2954856619,ES
-2954856620,2954856623,GB
-2954856624,2954856627,IT
-2954856628,2954856631,FR
-2954856632,2954856635,GB
-2954856636,2954856639,DE
-2954856640,2954856671,IT
-2954856672,2954856675,ES
-2954856676,2954856679,IT
-2954856680,2954856683,FR
-2954856684,2954856687,IT
-2954856688,2954856691,BE
-2954856692,2954856695,PL
-2954856696,2954856699,FR
-2954856700,2954856959,PL
-2954856960,2954856975,FR
-2954856976,2954856979,PL
-2954856980,2954856983,IE
-2954856984,2954856987,PL
-2954856988,2954856991,FR
-2954856992,2954856995,BE
-2954856996,2954856999,ES
-2954857000,2954857007,PL
-2954857008,2954857087,FR
-2954857088,2954857091,PL
-2954857092,2954857095,CZ
-2954857096,2954857099,PL
-2954857100,2954857111,FR
-2954857112,2954857115,PL
-2954857116,2954857119,IE
-2954857120,2954857135,PT
-2954857136,2954857143,LT
-2954857144,2954857151,FR
-2954857152,2954857215,IE
-2954857216,2954857503,FR
-2954857504,2954857519,IT
-2954857520,2954857523,FR
-2954857524,2954857527,PL
-2954857528,2954857531,GB
-2954857532,2954857535,NL
-2954857536,2954857551,IE
-2954857552,2954857567,DE
-2954857568,2954857571,PL
-2954857572,2954857583,FR
-2954857584,2954857599,ES
-2954857600,2954857663,IE
-2954857664,2954857695,FR
-2954857696,2954857699,IE
-2954857700,2954857703,ES
-2954857704,2954857707,PL
-2954857708,2954857711,ES
-2954857712,2954857727,FR
-2954857728,2954857743,FI
-2954857744,2954857755,FR
-2954857756,2954857759,NL
-2954857760,2954857823,FR
-2954857824,2954857855,ES
-2954857856,2954857983,IE
-2954857984,2954857999,IT
-2954858000,2954858015,IE
-2954858016,2954858023,PL
-2954858024,2954858027,ES
-2954858028,2954858031,IT
-2954858032,2954858035,GB
-2954858036,2954858039,PL
-2954858040,2954858043,FR
-2954858044,2954858047,PT
-2954858048,2954858051,ES
-2954858052,2954858059,FR
-2954858060,2954858063,PL
-2954858064,2954858079,IE
-2954858080,2954858111,ES
-2954858112,2954858143,DE
-2954858144,2954858175,ES
-2954858176,2954858191,FR
-2954858192,2954858207,GB
-2954858208,2954858239,IT
-2954858240,2954858271,NL
-2954858272,2954858303,GB
-2954858304,2954858335,DE
-2954858336,2954858351,FR
-2954858352,2954858359,GB
-2954858360,2954858367,LT
-2954858368,2954858375,PL
-2954858376,2954858379,ES
-2954858380,2954858383,PL
-2954858384,2954858415,FR
-2954858416,2954858423,ES
-2954858424,2954858427,FR
-2954858428,2954858431,BE
-2954858432,2954858439,GB
-2954858440,2954858443,FR
-2954858444,2954858447,GB
-2954858448,2954858463,IT
-2954858464,2954858479,FR
-2954858480,2954858483,NL
-2954858484,2954858487,DE
-2954858488,2954858491,IT
-2954858492,2954858495,NL
-2954858496,2954858751,ES
-2954858752,2954858815,IE
-2954858816,2954858819,ES
-2954858820,2954858823,FR
-2954858824,2954858831,GB
-2954858832,2954858839,PT
-2954858840,2954858843,FR
-2954858844,2954858847,PL
-2954858848,2954858863,FR
-2954858864,2954858871,NL
-2954858872,2954858879,IT
-2954858880,2954858895,FR
-2954858896,2954858899,DE
-2954858900,2954858903,ES
-2954858904,2954858911,IT
-2954858912,2954858943,DE
-2954858944,2954858975,ES
-2954858976,2954859023,FR
-2954859024,2954859027,IT
-2954859028,2954859031,PT
-2954859032,2954859043,FR
-2954859044,2954859047,DE
-2954859048,2954859071,FR
-2954859072,2954859079,PL
-2954859080,2954859083,IE
-2954859084,2954859087,FR
-2954859088,2954859103,BE
-2954859104,2954859123,FR
-2954859124,2954859127,NL
-2954859128,2954859131,GB
-2954859132,2954859135,BE
-2954859136,2954859239,FR
-2954859240,2954859243,ES
-2954859244,2954859247,PL
-2954859248,2954859267,FR
-2954859268,2954859271,ES
-2954859272,2954859275,PL
-2954859276,2954859279,ES
-2954859280,2954859311,FR
-2954859312,2954859319,ES
-2954859320,2954859323,FR
-2954859324,2954859327,CZ
-2954859328,2954859343,GB
-2954859344,2954859391,FR
-2954859392,2954859423,IT
-2954859424,2954859455,GB
-2954859456,2954859487,NL
-2954859488,2954859495,FR
-2954859496,2954859503,IT
-2954859504,2954859519,GB
-2954859520,2954859551,DE
-2954859552,2954859559,FR
-2954859560,2954859575,IT
-2954859576,2954859583,DE
-2954859584,2954859615,IE
-2954859616,2954859647,FR
-2954859648,2954859655,ES
-2954859656,2954859663,NL
-2954859664,2954859679,FR
-2954859680,2954859695,PL
-2954859696,2954859711,FR
-2954859712,2954859727,PL
-2954859728,2954859775,FR
-2954859776,2954859807,PL
-2954859808,2954859823,GB
-2954859824,2954859827,DE
-2954859828,2954859831,PL
-2954859832,2954859839,ES
-2954859840,2954859903,FR
-2954859904,2954859935,DE
-2954859936,2954859951,FR
-2954859952,2954859955,PL
-2954859956,2954859959,GB
-2954859960,2954859963,ES
-2954859964,2954859967,PL
-2954859968,2954860031,FR
-2954860032,2954860063,DE
-2954860064,2954860095,FR
-2954860096,2954860099,IT
-2954860100,2954860111,FR
-2954860112,2954860127,GB
-2954860128,2954860131,ES
-2954860132,2954860135,FR
-2954860136,2954860139,PL
-2954860140,2954860143,CH
-2954860144,2954860151,PL
-2954860152,2954860167,IE
-2954860168,2954860171,PL
-2954860172,2954860175,DE
-2954860176,2954860179,IT
-2954860180,2954860187,FR
-2954860188,2954860191,ES
-2954860192,2954860223,FR
-2954860224,2954860227,ES
-2954860228,2954860231,PL
-2954860232,2954860239,FR
-2954860240,2954860243,NL
-2954860244,2954860247,ES
-2954860248,2954860259,FR
-2954860260,2954860263,PL
-2954860264,2954860271,IE
-2954860272,2954860275,GB
-2954860276,2954860319,FR
-2954860320,2954860327,DE
-2954860328,2954860335,FR
-2954860336,2954860351,CH
-2954860352,2954860415,FR
-2954860416,2954860423,PL
-2954860424,2954860439,FR
-2954860440,2954860443,CH
-2954860444,2954860447,NL
-2954860448,2954860455,ES
-2954860456,2954860459,PL
-2954860460,2954860463,GB
-2954860464,2954860479,DE
-2954860480,2954860483,PL
-2954860484,2954860487,FR
-2954860488,2954860491,GB
-2954860492,2954860527,FR
-2954860528,2954860531,GB
-2954860532,2954860535,FR
-2954860536,2954860539,GB
-2954860540,2954860559,ES
-2954860560,2954860575,FR
-2954860576,2954860607,IT
-2954860608,2954860671,IE
-2954860672,2954860687,FR
-2954860688,2954860695,GB
-2954860696,2954860703,CZ
-2954860704,2954860767,PT
-2954860768,2954860783,ES
-2954860784,2954860791,PL
-2954860792,2954860799,IT
-2954860800,2954860863,IE
-2954860864,2954860991,FR
-2954860992,2954860999,ES
-2954861000,2954861003,PL
-2954861004,2954861023,FR
-2954861024,2954861031,GB
-2954861032,2954861035,NL
-2954861036,2954861039,PT
-2954861040,2954861055,PL
-2954861056,2954861067,FR
-2954861068,2954861071,GB
-2954861072,2954861087,FR
-2954861088,2954861119,CH
-2954861120,2954861135,GB
-2954861136,2954861143,FR
-2954861144,2954861147,DE
-2954861148,2954861151,FR
-2954861152,2954861167,GB
-2954861168,2954861183,PT
-2954861184,2954861191,IT
-2954861192,2954861195,FR
-2954861196,2954861199,CZ
-2954861200,2954861215,DE
-2954861216,2954861231,FR
-2954861232,2954861239,PL
-2954861240,2954861247,FR
-2954861248,2954861311,PL
-2954861312,2954861323,FR
-2954861324,2954861327,IT
-2954861328,2954861343,NL
-2954861344,2954861359,FR
-2954861360,2954861363,IE
-2954861364,2954861367,FR
-2954861368,2954861371,ES
-2954861372,2954861375,PT
-2954861376,2954861407,DE
-2954861408,2954861431,FR
-2954861432,2954861435,ES
-2954861436,2954861567,FR
-2954861568,2954861571,ES
-2954861572,2954861575,GB
-2954861576,2954861591,FR
-2954861592,2954861595,PL
-2954861596,2954861599,NL
-2954861600,2954861619,PL
-2954861620,2954861631,IT
-2954861632,2954861635,NL
-2954861636,2954861639,GB
-2954861640,2954861647,PL
-2954861648,2954861655,GB
-2954861656,2954861663,FR
-2954861664,2954861667,DE
-2954861668,2954861671,ES
-2954861672,2954861675,NL
-2954861676,2954861687,PL
-2954861688,2954861691,GB
-2954861692,2954861695,NL
-2954861696,2954861727,GB
-2954861728,2954861751,FR
-2954861752,2954861767,GB
-2954861768,2954861775,FR
-2954861776,2954861779,ES
-2954861780,2954861783,DE
-2954861784,2954861787,IE
-2954861788,2954861791,PL
-2954861792,2954861823,GB
-2954861824,2954861827,PL
-2954861828,2954861831,GB
-2954861832,2954861835,DE
-2954861836,2954861839,PL
-2954861840,2954861843,GB
-2954861844,2954861847,PL
-2954861848,2954861863,FR
-2954861864,2954861867,PL
-2954861868,2954861871,FR
-2954861872,2954861875,PT
+2954855516,2954855519,ES
+2954855520,2954855527,FR
+2954855528,2954855531,ES
+2954855532,2954856179,FR
+2954856180,2954856183,ES
+2954856184,2954859323,FR
+2954859324,2954859327,ES
+2954859328,2954861875,FR
2954861876,2954861879,CH
-2954861880,2954861887,FR
-2954861888,2954861919,DE
-2954861920,2954861927,PL
-2954861928,2954861935,DE
-2954861936,2954861939,FR
-2954861940,2954861943,DE
-2954861944,2954861947,FR
-2954861948,2954861951,PL
-2954861952,2954861955,FR
-2954861956,2954861967,GB
-2954861968,2954861975,ES
-2954861976,2954861983,DE
-2954861984,2954861987,FR
-2954861988,2954861991,BE
-2954861992,2954861995,PL
-2954861996,2954861999,FR
-2954862000,2954862015,NL
-2954862016,2954862047,FR
-2954862048,2954862063,IT
-2954862064,2954862079,FI
-2954862080,2954862143,FR
-2954862144,2954862207,ES
-2954862208,2954862211,PL
-2954862212,2954862215,PT
-2954862216,2954862219,BE
-2954862220,2954862239,FR
-2954862240,2954862247,IT
-2954862248,2954862251,DE
-2954862252,2954862255,CZ
-2954862256,2954862271,FR
-2954862272,2954862303,FI
-2954862304,2954862335,FR
-2954862336,2954862367,PL
-2954862368,2954862371,FR
-2954862372,2954862375,CH
-2954862376,2954862379,NL
-2954862380,2954862399,FR
-2954862400,2954862415,GB
-2954862416,2954862419,PL
-2954862420,2954862423,FR
-2954862424,2954862431,NL
-2954862432,2954862467,FR
-2954862468,2954862471,NL
-2954862472,2954862479,DE
-2954862480,2954862483,ES
-2954862484,2954862487,FR
-2954862488,2954862495,IT
-2954862496,2954862511,ES
-2954862512,2954862515,DE
-2954862516,2954862519,PT
-2954862520,2954862523,ES
-2954862524,2954862527,IT
-2954862528,2954862559,FR
-2954862560,2954862567,PL
-2954862568,2954862571,DE
-2954862572,2954862575,FR
-2954862576,2954862579,PL
-2954862580,2954862587,FR
-2954862588,2954862591,ES
-2954862592,2954863615,FR
+2954861880,2954862415,FR
+2954862416,2954862419,ES
+2954862420,2954863615,FR
2954863616,2954864639,DE
2954864640,2954865663,IT
2954865664,2954866687,ES
-2954866688,2954870783,FR
-2954870784,2954870787,DE
-2954870788,2954870791,IE
-2954870792,2954870795,FR
-2954870796,2954870799,PL
-2954870800,2954870831,FR
-2954870832,2954870835,PL
-2954870836,2954870839,GB
-2954870840,2954870843,DE
-2954870844,2954870863,FR
-2954870864,2954870867,GB
-2954870868,2954870875,ES
-2954870876,2954870879,PL
-2954870880,2954870895,IE
-2954870896,2954870903,FR
-2954870904,2954870907,PL
-2954870908,2954870911,ES
-2954870912,2954871039,FR
-2954871040,2954871295,GB
-2954871296,2954871551,FR
-2954871552,2954871583,DE
-2954871584,2954871599,GB
-2954871600,2954871603,FR
-2954871604,2954871607,PL
-2954871608,2954871611,BE
-2954871612,2954871615,CZ
-2954871616,2954871631,ES
-2954871632,2954871635,FR
-2954871636,2954871639,ES
-2954871640,2954871643,GB
-2954871644,2954871647,IT
-2954871648,2954871663,FR
-2954871664,2954871667,GB
-2954871668,2954871695,FR
-2954871696,2954871703,DE
-2954871704,2954871707,CH
-2954871708,2954871711,GB
-2954871712,2954871743,FR
-2954871744,2954871759,CH
-2954871760,2954871807,FR
-2954871808,2954871823,ES
-2954871824,2954871831,FR
-2954871832,2954871835,PL
-2954871836,2954871839,GB
-2954871840,2954871903,FR
-2954871904,2954871919,IE
-2954871920,2954871923,ES
-2954871924,2954871935,IE
-2954871936,2954871939,PL
-2954871940,2954871943,GB
-2954871944,2954871947,PL
-2954871948,2954871951,DE
-2954871952,2954871955,ES
-2954871956,2954871959,PT
-2954871960,2954871967,FR
-2954871968,2954871999,PL
-2954872000,2954872063,DE
-2954872064,2954872323,FR
-2954872324,2954872327,PL
-2954872328,2954872331,FR
-2954872332,2954872335,GB
-2954872336,2954872351,FR
-2954872352,2954872383,GB
-2954872384,2954872415,FR
-2954872416,2954872419,ES
-2954872420,2954872435,PL
-2954872436,2954872447,FR
-2954872448,2954872479,PL
-2954872480,2954872551,FR
-2954872552,2954872555,GB
-2954872556,2954872559,FR
-2954872560,2954872567,PL
-2954872568,2954872571,ES
-2954872572,2954872587,FR
-2954872588,2954872591,DE
-2954872592,2954872607,IT
-2954872608,2954872639,ES
-2954872640,2954872671,BE
-2954872672,2954872675,IE
-2954872676,2954872679,ES
-2954872680,2954872683,FR
-2954872684,2954872687,DE
-2954872688,2954872703,CZ
-2954872704,2954872831,DE
-2954872832,2954873347,FR
-2954873348,2954873351,PL
-2954873352,2954873355,GB
-2954873356,2954873359,IT
-2954873360,2954873367,FR
-2954873368,2954873371,PL
-2954873372,2954873375,NL
-2954873376,2954873391,FR
-2954873392,2954873407,PL
-2954873408,2954873447,FR
-2954873448,2954873455,PL
-2954873456,2954873459,FR
-2954873460,2954873463,NL
-2954873464,2954873471,FR
-2954873472,2954873503,PT
-2954873504,2954873583,FR
-2954873584,2954873591,ES
-2954873592,2954873599,FR
-2954873600,2954873631,DE
-2954873632,2954873635,NL
-2954873636,2954873651,FR
-2954873652,2954873655,DE
-2954873656,2954873663,PL
-2954873664,2954873679,IT
-2954873680,2954873695,FR
-2954873696,2954873727,ES
-2954873728,2954873759,FR
-2954873760,2954873783,PL
-2954873784,2954873787,FR
-2954873788,2954873791,BE
-2954873792,2954873799,FR
-2954873800,2954873803,PL
-2954873804,2954873807,NL
-2954873808,2954873815,DE
-2954873816,2954873819,FI
-2954873820,2954873831,FR
-2954873832,2954873835,IT
-2954873836,2954873839,PT
-2954873840,2954873847,IT
-2954873848,2954873851,GB
-2954873852,2954873855,PL
-2954873856,2954873871,FR
-2954873872,2954873879,LT
-2954873880,2954873887,DE
-2954873888,2954873903,FR
-2954873904,2954873911,IT
-2954873912,2954873919,FR
-2954873920,2954873983,IE
-2954873984,2954874111,GB
-2954874112,2954874119,PT
-2954874120,2954874127,PL
-2954874128,2954874135,ES
-2954874136,2954874139,FR
-2954874140,2954874143,PT
-2954874144,2954874159,FR
-2954874160,2954874175,ES
-2954874176,2954874303,PT
-2954874304,2954874307,ES
-2954874308,2954874311,BE
-2954874312,2954874315,IT
-2954874316,2954874319,CZ
-2954874320,2954874343,FR
-2954874344,2954874355,ES
-2954874356,2954874359,FR
-2954874360,2954874367,IE
-2954874368,2954874371,ES
-2954874372,2954874379,FR
-2954874380,2954874383,PL
-2954874384,2954874387,FR
-2954874388,2954874391,PL
-2954874392,2954874403,FR
-2954874404,2954874407,LT
-2954874408,2954874415,NL
-2954874416,2954874419,GB
-2954874420,2954874423,NL
-2954874424,2954874427,GB
-2954874428,2954874495,FR
-2954874496,2954874559,NL
-2954874560,2954874567,BE
-2954874568,2954874591,FR
-2954874592,2954874623,PT
-2954874624,2954874631,FR
-2954874632,2954874635,CZ
-2954874636,2954874639,FR
-2954874640,2954874647,ES
-2954874648,2954874651,FR
-2954874652,2954874655,PL
-2954874656,2954874671,FR
-2954874672,2954874675,PL
-2954874676,2954874679,CZ
-2954874680,2954874687,FR
-2954874688,2954874719,ES
-2954874720,2954874751,FI
-2954874752,2954874799,IE
-2954874800,2954874815,GB
-2954874816,2954874819,DE
-2954874820,2954874823,GB
-2954874824,2954874827,FR
-2954874828,2954874831,GB
-2954874832,2954874859,FR
-2954874860,2954874863,LT
-2954874864,2954874867,FR
-2954874868,2954874871,PL
-2954874872,2954874911,FR
-2954874912,2954874915,CH
-2954874916,2954874919,GB
-2954874920,2954874923,PL
-2954874924,2954874927,FR
-2954874928,2954874943,PL
-2954874944,2954874975,IE
-2954874976,2954874979,FR
-2954874980,2954874983,DE
-2954874984,2954874987,GB
-2954874988,2954874991,PL
-2954874992,2954875007,IE
-2954875008,2954875023,FR
-2954875024,2954875027,ES
-2954875028,2954875031,FR
-2954875032,2954875039,PL
-2954875040,2954875043,PT
-2954875044,2954875047,PL
-2954875048,2954875051,FR
-2954875052,2954875055,NL
-2954875056,2954875063,IT
-2954875064,2954875067,DE
-2954875068,2954875071,FI
-2954875072,2954875075,NL
-2954875076,2954875095,FR
-2954875096,2954875099,GB
-2954875100,2954875103,PL
-2954875104,2954875135,NL
-2954875136,2954875167,PT
-2954875168,2954875183,IT
-2954875184,2954875191,GB
-2954875192,2954875199,FR
-2954875200,2954875203,PL
-2954875204,2954875207,FR
-2954875208,2954875215,ES
-2954875216,2954875231,FR
-2954875232,2954875247,GB
-2954875248,2954875327,FR
-2954875328,2954875359,PL
-2954875360,2954875375,FR
-2954875376,2954875379,PT
-2954875380,2954875383,DE
-2954875384,2954875391,GB
-2954875392,2954875463,ES
-2954875464,2954875467,NL
-2954875468,2954875471,GB
-2954875472,2954875479,FI
-2954875480,2954875483,DE
-2954875484,2954875487,PL
-2954875488,2954875491,LT
-2954875492,2954875495,FR
-2954875496,2954875503,IT
-2954875504,2954875519,FR
-2954875520,2954875543,PL
-2954875544,2954875551,NL
-2954875552,2954875583,PL
-2954875584,2954875587,ES
-2954875588,2954875591,IT
-2954875592,2954875599,FR
-2954875600,2954875615,PT
-2954875616,2954875623,PL
-2954875624,2954875627,DE
-2954875628,2954875631,ES
-2954875632,2954875635,IE
-2954875636,2954875639,FR
-2954875640,2954875647,BE
-2954875648,2954875651,ES
-2954875652,2954875655,BE
-2954875656,2954875659,FR
-2954875660,2954875663,PT
-2954875664,2954875671,ES
-2954875672,2954875695,FR
-2954875696,2954875703,ES
-2954875704,2954875707,PL
-2954875708,2954875711,ES
-2954875712,2954875775,IE
-2954875776,2954875779,BE
-2954875780,2954875783,FR
-2954875784,2954875787,IT
-2954875788,2954875791,FR
-2954875792,2954875807,PL
-2954875808,2954875839,IT
-2954875840,2954875871,FR
-2954875872,2954875879,PL
-2954875880,2954875891,FR
-2954875892,2954875895,ES
-2954875896,2954875903,FR
-2954875904,2954875907,IT
-2954875908,2954875911,CH
-2954875912,2954875919,ES
-2954875920,2954875935,FR
-2954875936,2954875951,PL
-2954875952,2954875999,IE
-2954876000,2954876031,BE
-2954876032,2954876039,FR
-2954876040,2954876043,DE
-2954876044,2954876047,GB
-2954876048,2954876051,ES
-2954876052,2954876055,NL
-2954876056,2954876063,IE
-2954876064,2954876095,FR
-2954876096,2954876111,PT
-2954876112,2954876119,IE
-2954876120,2954876123,FR
-2954876124,2954876127,NL
-2954876128,2954876191,FR
-2954876192,2954876223,PT
-2954876224,2954876231,FR
-2954876232,2954876235,PL
-2954876236,2954876239,IE
-2954876240,2954876243,ES
-2954876244,2954876247,PL
-2954876248,2954876255,ES
-2954876256,2954876287,IE
-2954876288,2954876351,FR
-2954876352,2954876383,ES
-2954876384,2954876391,FR
-2954876392,2954876395,DE
-2954876396,2954876399,IE
-2954876400,2954876411,FR
-2954876412,2954876423,DE
-2954876424,2954876431,PL
-2954876432,2954876435,PT
-2954876436,2954876439,GB
-2954876440,2954876447,FR
-2954876448,2954876451,DE
-2954876452,2954876455,FR
-2954876456,2954876459,PL
-2954876460,2954876463,DE
-2954876464,2954876543,IT
-2954876544,2954876559,PL
-2954876560,2954876575,FR
-2954876576,2954876579,ES
-2954876580,2954876583,FR
-2954876584,2954876587,GB
-2954876588,2954876591,PL
-2954876592,2954876639,IE
-2954876640,2954876643,DE
-2954876644,2954876647,IT
-2954876648,2954876655,FR
-2954876656,2954876671,BE
-2954876672,2954876703,PT
-2954876704,2954876719,FR
-2954876720,2954876727,GB
-2954876728,2954876731,PL
-2954876732,2954876735,DE
-2954876736,2954876767,IT
-2954876768,2954876783,FR
-2954876784,2954876791,IE
-2954876792,2954876795,FR
-2954876796,2954876799,DE
-2954876800,2954876863,IE
-2954876864,2954876891,PL
-2954876892,2954876895,FR
-2954876896,2954876899,GB
-2954876900,2954876903,IT
-2954876904,2954876959,FR
-2954876960,2954876975,DE
-2954876976,2954876983,PL
-2954876984,2954876987,FR
-2954876988,2954876991,ES
-2954876992,2954877007,PL
-2954877008,2954877023,CZ
-2954877024,2954877027,ES
-2954877028,2954877031,IT
-2954877032,2954877035,FR
-2954877036,2954877039,GB
-2954877040,2954877055,FR
-2954877056,2954877059,PL
-2954877060,2954877063,GB
-2954877064,2954877071,DE
-2954877072,2954877087,CH
-2954877088,2954877103,DE
-2954877104,2954877111,PL
-2954877112,2954877119,IE
-2954877120,2954877151,ES
-2954877152,2954877159,NL
-2954877160,2954877163,PL
-2954877164,2954877167,FI
-2954877168,2954877183,DE
-2954877184,2954877455,FR
-2954877456,2954877459,PT
-2954877460,2954877463,FR
-2954877464,2954877471,DE
-2954877472,2954877503,FR
-2954877504,2954877519,ES
-2954877520,2954877523,BE
-2954877524,2954877527,ES
-2954877528,2954877535,PT
-2954877536,2954877539,IT
-2954877540,2954877547,FR
-2954877548,2954877551,PL
-2954877552,2954877583,FR
-2954877584,2954877587,FI
-2954877588,2954877591,PL
-2954877592,2954877595,DE
-2954877596,2954877599,PT
-2954877600,2954877615,PL
-2954877616,2954877631,NL
-2954877632,2954877651,FR
-2954877652,2954877655,PT
-2954877656,2954877663,FR
-2954877664,2954877667,GB
-2954877668,2954877671,PL
-2954877672,2954877675,FR
-2954877676,2954877679,GB
-2954877680,2954877963,FR
-2954877964,2954877967,DE
-2954877968,2954877983,PT
-2954877984,2954877991,DE
-2954877992,2954877995,BE
-2954877996,2954878007,FR
-2954878008,2954878011,IT
-2954878012,2954878015,GB
-2954878016,2954878031,FR
-2954878032,2954878035,NL
-2954878036,2954878039,FR
-2954878040,2954878047,PT
-2954878048,2954878063,FR
-2954878064,2954878079,IT
-2954878080,2954878095,FR
-2954878096,2954878111,ES
-2954878112,2954878143,PT
-2954878144,2954878207,FR
-2954878208,2954878463,IE
-2954878464,2954878471,CH
-2954878472,2954878475,FR
-2954878476,2954878479,GB
-2954878480,2954878495,NL
-2954878496,2954878499,GB
-2954878500,2954878511,FR
-2954878512,2954878527,BE
-2954878528,2954878543,FR
-2954878544,2954878551,PL
-2954878552,2954878555,CH
-2954878556,2954878559,PL
-2954878560,2954878575,FR
-2954878576,2954878579,CH
-2954878580,2954878583,NL
-2954878584,2954878591,GB
-2954878592,2954878607,BE
-2954878608,2954878623,FI
-2954878624,2954878627,CH
-2954878628,2954878631,PL
-2954878632,2954878635,IT
-2954878636,2954878639,PL
-2954878640,2954878655,IT
-2954878656,2954878687,PL
-2954878688,2954878695,FR
-2954878696,2954878703,IE
-2954878704,2954878707,IT
-2954878708,2954878711,PL
-2954878712,2954878719,ES
-2954878720,2954878759,FR
-2954878760,2954878763,PL
-2954878764,2954878783,FR
-2954878784,2954878847,IE
-2954878848,2954878855,FR
-2954878856,2954878863,IE
-2954878864,2954878871,FR
-2954878872,2954878875,PL
-2954878876,2954878879,PT
-2954878880,2954878883,ES
-2954878884,2954878887,PL
-2954878888,2954878891,FR
-2954878892,2954878895,GB
-2954878896,2954878899,DE
-2954878900,2954878903,GB
-2954878904,2954878911,PL
-2954878912,2954878915,DE
-2954878916,2954878919,PL
-2954878920,2954878931,FR
-2954878932,2954878939,GB
-2954878940,2954887167,FR
+2954866688,2954870799,FR
+2954870800,2954870803,ES
+2954870804,2954870843,FR
+2954870844,2954870847,ES
+2954870848,2954870903,FR
+2954870904,2954870907,ES
+2954870908,2954875879,FR
+2954875880,2954875883,ES
+2954875884,2954876871,FR
+2954876872,2954876875,ES
+2954876876,2954876887,FR
+2954876888,2954876891,ES
+2954876892,2954877103,FR
+2954877104,2954877107,PL
+2954877108,2954877163,FR
+2954877164,2954877167,ES
+2954877168,2954877819,FR
+2954877820,2954877823,ES
+2954877824,2954878907,FR
+2954878908,2954878911,ES
+2954878912,2954887167,FR
2954887168,2954891263,UA
2954891264,2954895359,IT
2954895360,2954897407,RU
@@ -92428,30 +44376,22 @@
2954899456,2954901503,ES
2954901504,2954903551,IT
2954903552,2954911743,JP
-2954911744,2954919423,NL
-2954919424,2954919935,IE
+2954911744,2954918911,NL
+2954918912,2954919935,IE
2954919936,2954928127,RU
2954928128,2954932223,PL
2954932224,2954936319,RU
2954936320,2954938367,AM
2954938368,2954940415,HU
-2954940416,2954941955,DE
-2954941956,2954941967,RU
-2954941968,2954942051,DE
-2954942052,2954942055,RU
-2954942056,2954942111,DE
-2954942112,2954942119,UA
-2954942120,2954944099,DE
-2954944100,2954944103,GR
-2954944104,2954944511,DE
+2954940416,2954944511,DE
2954944512,2954946559,GB
-2954946560,2954948095,DE
-2954948096,2954948351,NL
-2954948352,2954948607,DE
+2954946560,2954948607,DE
2954948608,2954950655,RU
2954950656,2954952703,ES
2954952704,2955018239,TR
-2955018240,2955034623,JP
+2955018240,2955027726,JP
+2955027727,2955027727,IE
+2955027728,2955034623,JP
2955034624,2955083775,IE
2955083776,2955149311,GB
2955149312,2955411455,UA
@@ -92478,7 +44418,7 @@
2956259328,2956261375,DE
2956261376,2956263423,ES
2956263424,2956296191,TR
-2956296192,2956328959,RU
+2956312576,2956328959,RU
2956328960,2956460031,TR
2956460032,2956468223,RU
2956468224,2956470271,LV
@@ -92489,38 +44429,30 @@
2956492800,2956496895,CH
2956496896,2956500991,IR
2956500992,2956503039,NL
-2956503040,2956504063,RU
+2956503040,2956504063,CY
2956504064,2956504319,CH
-2956504320,2956504383,NL
-2956504384,2956504575,RU
-2956504576,2956504831,CH
-2956504832,2956505087,GB
+2956504320,2956504575,RU
+2956504576,2956504831,NL
+2956504832,2956505087,RU
2956505088,2956506111,NL
-2956506112,2956506623,GB
-2956506624,2956506879,RU
-2956506880,2956507135,DE
+2956506112,2956507135,RU
2956507136,2956508159,NL
-2956508160,2956508415,RU
-2956508416,2956508671,FR
-2956508672,2956509183,NL
+2956508160,2956509183,RU
2956509184,2956517375,GB
-2956517376,2956518095,NL
-2956518096,2956518111,FI
-2956518112,2956519935,NL
-2956519936,2956520319,GB
-2956520320,2956521471,NL
+2956517376,2956521471,NL
2956521472,2956525567,SE
2956525568,2956533759,JO
2956533760,2956535807,FR
2956535808,2956537855,LV
2956537856,2956541951,UA
-2956541952,2956543999,FR
2956544000,2956546047,RU
2956546048,2956548095,FR
-2956548096,2956550143,ME
+2956548096,2956550143,HR
2956550144,2956554239,ES
2956554240,2956558335,IT
-2956558336,2956574719,DE
+2956558336,2956574527,DE
+2956574528,2956574559,PL
+2956574560,2956574719,DE
2956574720,2956576767,SE
2956576768,2956578815,ES
2956578816,2956582911,RU
@@ -92536,11 +44468,9 @@
2956613632,2956613887,GB
2956613888,2956614143,NL
2956614144,2956614399,FR
-2956614400,2956614655,EU
2956614656,2956614911,GB
2956614912,2956615167,NL
2956615168,2956615423,FR
-2956615424,2956615679,EU
2956615680,2956623871,GB
2956623872,2956656639,GR
2956656640,2956722175,RU
@@ -92550,12 +44480,12 @@
2956822528,2956823039,SE
2956823040,2956823167,GB
2956823168,2956823551,SE
-2956823552,2956823676,US
-2956823677,2956823677,US
-2956823678,2956824575,US
+2956823552,2956824575,US
2956824576,2956826623,PT
2956826624,2956828671,HR
-2956828672,2956836863,BA
+2956828672,2956832767,BA
+2956832768,2956833791,AT
+2956833792,2956836863,BA
2956836864,2956853247,SK
2956853248,2956865535,HR
2956865536,2956869631,IT
@@ -92564,10 +44494,7 @@
2956888064,2956890111,BE
2956890112,2956892159,IR
2956892160,2956894207,IT
-2956894208,2956897279,BE
-2956897280,2956897535,NL
-2956897536,2956898047,BE
-2956898048,2956898303,NL
+2956894208,2956898303,NL
2956898304,2956902399,RU
2956902400,2956904447,NL
2956904448,2956906495,DK
@@ -92583,143 +44510,29 @@
2957068288,2957070335,LU
2957070336,2957074431,IT
2957074432,2957082623,RU
-2957082624,2957088511,DE
-2957088512,2957088767,AT
-2957088768,2957094655,DE
-2957094656,2957095167,CH
-2957095168,2957095423,NL
-2957095424,2957095679,CH
-2957095680,2957096191,DE
-2957096192,2957096959,CH
-2957096960,2957099007,DE
+2957082624,2957090815,DE
+2957090816,2957094911,AT
+2957094912,2957099007,DE
2957099008,2957100031,CH
2957100032,2957104639,DE
2957104640,2957105663,US
-2957105664,2957105919,NL
-2957105920,2957106687,AT
-2957106688,2957106936,NL
-2957106937,2957106943,AT
-2957106944,2957107192,DE
-2957107193,2957107199,AT
-2957107200,2957107448,DE
-2957107449,2957107455,AT
-2957107456,2957107704,DE
-2957107705,2957107711,AT
-2957107712,2957107960,DE
-2957107961,2957107967,AT
-2957107968,2957108216,DE
-2957108217,2957108223,AT
-2957108224,2957108472,DE
-2957108473,2957108479,AT
-2957108480,2957108728,DE
-2957108729,2957108735,AT
-2957108736,2957108984,DE
-2957108985,2957108991,AT
-2957108992,2957109240,DE
-2957109241,2957109247,AT
-2957109248,2957109496,DE
-2957109497,2957109503,AT
-2957109504,2957109752,DE
-2957109753,2957109759,AT
-2957109760,2957110008,DE
-2957110009,2957110015,AT
-2957110016,2957110264,DE
-2957110265,2957110271,AT
-2957110272,2957110520,DE
-2957110521,2957110527,AT
-2957110528,2957110776,DE
-2957110777,2957110783,AT
-2957110784,2957111032,DE
-2957111033,2957111039,AT
-2957111040,2957111288,DE
-2957111289,2957111295,AT
-2957111296,2957111544,DE
-2957111545,2957111551,AT
-2957111552,2957111800,DE
-2957111801,2957111807,AT
-2957111808,2957112056,DE
-2957112057,2957112063,AT
-2957112064,2957112312,DE
-2957112313,2957112319,AT
-2957112320,2957112568,DE
-2957112569,2957112575,AT
-2957112576,2957112824,DE
-2957112825,2957112831,AT
-2957112832,2957113080,DE
-2957113081,2957113087,AT
-2957113088,2957113336,DE
-2957113337,2957113343,AT
-2957113344,2957113592,DE
-2957113593,2957113599,AT
-2957113600,2957113848,DE
-2957113849,2957113855,AT
-2957113856,2957114104,DE
-2957114105,2957114111,AT
-2957114112,2957114360,DE
-2957114361,2957114367,AT
-2957114368,2957114616,DE
-2957114617,2957114623,AT
-2957114624,2957114872,DE
-2957114873,2957114879,AT
-2957114880,2957115128,DE
-2957115129,2957180927,AT
+2957105664,2957115391,DE
+2957115392,2957180927,AT
2957180928,2957189119,UA
2957189120,2957193215,LV
2957193216,2957195263,RU
2957195264,2957197311,PS
2957197312,2957201407,IR
-2957201408,2957202431,US
-2957202432,2957202463,GB
-2957202464,2957202467,PL
-2957202468,2957202471,KR
-2957202472,2957202475,BR
-2957202476,2957202479,EG
-2957202480,2957202483,ZA
-2957202484,2957202487,IS
-2957202488,2957202491,CA
-2957202492,2957202495,IL
-2957202496,2957202499,DE
-2957202500,2957202503,AR
-2957202504,2957202507,NZ
-2957202508,2957202511,DE
-2957202512,2957202527,NO
-2957202528,2957202543,SE
-2957202544,2957202551,FI
-2957202552,2957202559,EE
-2957202560,2957202567,LV
-2957202568,2957202575,LT
-2957202576,2957202583,BY
-2957202584,2957202591,UA
-2957202592,2957202599,RO
-2957202600,2957202607,BG
-2957202608,2957202615,GR
-2957202616,2957202623,TR
-2957202624,2957202627,AT
-2957202628,2957202631,IT
-2957202632,2957202639,CH
-2957202640,2957202643,LU
-2957202644,2957202647,BE
-2957202648,2957202651,NL
-2957202652,2957202667,DK
-2957202668,2957202671,FR
-2957202672,2957202675,US
-2957202676,2957202679,ES
-2957202680,2957202683,PT
-2957202684,2957202687,AU
-2957202688,2957202691,RU
-2957202692,2957202699,IE
-2957202700,2957202703,JP
-2957202704,2957202943,US
-2957202944,2957203455,US
+2957201408,2957202679,US
+2957202680,2957202680,PT
+2957202681,2957203455,US
2957203456,2957205503,FR
2957205504,2957213695,PS
2957213696,2957221887,FR
-2957221888,2957223365,GB
-2957223366,2957223366,GB
-2957223367,2957223641,GB
-2957223642,2957223642,GB
-2957223643,2957223935,GB
-2957223936,2957224191,FR
+2957221888,2957223935,GB
+2957223936,2957223999,FR
+2957224000,2957224063,GB
+2957224064,2957224191,FR
2957224192,2957224447,DE
2957224448,2957224959,GB
2957224960,2957225215,FR
@@ -92744,24 +44557,8 @@
2957654016,2957656063,DE
2957656064,2957672447,GE
2957672448,2957680639,CZ
-2957680640,2957685711,GB
-2957685712,2957685727,IE
-2957685728,2957688831,GB
-2957688832,2957688895,SE
-2957688896,2957689023,US
-2957689024,2957690463,SE
-2957690464,2957690467,DK
-2957690468,2957690471,JP
-2957690472,2957690479,SE
-2957690480,2957690495,US
-2957690496,2957690703,SE
-2957690704,2957690711,NO
-2957690712,2957690719,FI
-2957690720,2957690723,DK
-2957690724,2957690735,SE
-2957690736,2957690751,US
-2957690752,2957690783,PL
-2957690784,2957690879,SE
+2957680640,2957688831,GB
+2957688832,2957690879,SE
2957690880,2957692927,RU
2957692928,2957694975,NO
2957694976,2957697023,CZ
@@ -92797,7 +44594,8 @@
2959151104,2959155199,PL
2959155200,2959159295,RU
2959159296,2959161343,PL
-2959161344,2959167487,UA
+2959161344,2959163391,UA
+2959163392,2959167487,GB
2959167488,2959171583,PL
2959171584,2959175679,RU
2959175680,2959179775,UA
@@ -92805,7 +44603,7 @@
2959181824,2959183871,PL
2959183872,2959185919,RO
2959185920,2959186943,GB
-2959186944,2959187455,NL
+2959186944,2959187455,CY
2959187456,2959187711,AT
2959187712,2959187967,FR
2959187968,2959204351,RU
@@ -92839,8 +44637,7 @@
2959394816,2959398911,ES
2959398912,2959400959,RU
2959400960,2959405055,ES
-2959405056,2959409151,RU
-2959409152,2959413247,UA
+2959405056,2959413247,RU
2959413248,2959417343,ES
2959417344,2959423487,IR
2959423488,2959427583,RU
@@ -92970,16 +44767,9 @@
2960080896,2960084991,RU
2960084992,2960089087,UA
2960089088,2960091135,RU
-2960091136,2960093147,PT
-2960093148,2960093148,GB
-2960093149,2960093149,PT
-2960093150,2960093150,NL
-2960093151,2960093151,FR
-2960093152,2960093152,DE
-2960093153,2960093153,ES
-2960093154,2960093183,PT
+2960091136,2960093183,PT
2960093184,2960105471,PL
-2960105472,2960109567,RO
+2960105472,2960107519,RO
2960109568,2960113663,UA
2960113664,2960117759,NO
2960117760,2960119807,RU
@@ -92997,7 +44787,8 @@
2960162816,2960171007,CZ
2960171008,2960175103,RU
2960175104,2960179199,SK
-2960179200,2960211967,RU
+2960179200,2960205823,RU
+2960207872,2960211967,RU
2960220160,2960224255,RO
2960224256,2960228351,RU
2960228352,2960232447,TJ
@@ -93005,9 +44796,7 @@
2960240640,2960244735,RO
2960244736,2960248831,PL
2960248832,2960265215,UA
-2960265216,2960269311,RU
-2960269312,2960273407,UA
-2960273408,2960275455,RU
+2960265216,2960275455,RU
2960275456,2960277503,RO
2960277504,2960285695,RU
2960285696,2960289791,RO
@@ -93048,7 +44837,6 @@
2960486400,2960498687,RU
2960498688,2960506879,UA
2960506880,2960531455,RU
-2960531456,2960533503,RO
2960533504,2960537599,UA
2960537600,2960539647,RO
2960539648,2960543743,RU
@@ -93059,13 +44847,13 @@
2960560128,2960562175,UA
2960562176,2960564223,BY
2960574464,2960576511,RO
-2960576512,2960580607,CZ
-2960580608,2960588799,RU
+2960576512,2960588799,RU
2960588800,2960592895,UA
2960592896,2960594943,RU
2960594944,2960596991,UA
2960596992,2960605183,PL
-2960605184,2960629759,UA
+2960605184,2960621567,UA
+2960621568,2960629759,CZ
2960629760,2960646143,RU
2960646144,2960648191,KZ
2960648192,2960650239,UA
@@ -93119,7 +44907,7 @@
2960863744,2960863999,GB
2960864000,2960864255,DE
2960864256,2960864767,GB
-2960864768,2960865279,AT
+2960864768,2960865279,DE
2960865280,2960865535,RU
2960865536,2960865791,HR
2960865792,2960866303,GB
@@ -93134,7 +44922,7 @@
2960907776,2960908031,GB
2960908032,2960908287,PL
2960908288,2960916479,KG
-2960916480,2960932863,UA
+2960916480,2960924671,UA
2960932864,2960933887,IR
2960933888,2960934399,GB
2960934400,2960934655,LI
@@ -93172,7 +44960,6 @@
2960982016,2960990207,RO
2960990208,2960998399,UA
2960998400,2961039359,RU
-2961039360,2961047551,UA
2961047552,2961057023,RU
2961057024,2961057279,IE
2961057280,2961057535,GR
@@ -93185,9 +44972,7 @@
2961088512,2961088767,SE
2961088768,2961089535,UA
2961089536,2961090559,KG
-2961090560,2961091839,RO
-2961091840,2961092095,SE
-2961092096,2961113087,RO
+2961090560,2961113087,RO
2961113088,2961178623,CH
2961178624,2965372927,FR
2965372928,2965766143,RU
@@ -93213,11 +44998,10 @@
2967339008,2967343103,BG
2967343104,2967345151,RU
2967345152,2967347199,ES
-2967347200,2967347455,HR
-2967347456,2967347460,GB
-2967347461,2967351295,HR
+2967347200,2967351295,HR
2967351296,2967355391,FR
-2967355392,2967371775,RO
+2967355392,2967363583,RO
+2967363584,2967371775,SE
2967371776,2967388159,KZ
2967388160,2967392255,RU
2967392256,2967394303,FR
@@ -93240,11 +45024,8 @@
2967707648,2967709695,PL
2967709696,2967711743,IT
2967711744,2967715839,RU
-2967715840,2967718721,GB
-2967718722,2967718722,GB
-2967718723,2967724031,GB
+2967715840,2967724031,GB
2967724032,2967728127,CY
-2967728128,2967730175,GB
2967730176,2967732223,CZ
2967732224,2967994367,IL
2967994368,2968584191,TR
@@ -93254,11 +45035,8 @@
2968604672,2968608767,IQ
2968608768,2968610815,RU
2968610816,2968612863,UA
-2968612864,2968613375,IL
-2968613376,2968613630,NL
-2968613631,2968613631,IL
-2968613632,2968614910,US
-2968614911,2968614911,IL
+2968612864,2968614143,IL
+2968614144,2968614911,US
2968614912,2968616959,FR
2968616960,2968625151,UA
2968625152,2968629247,DE
@@ -93267,39 +45045,24 @@
2968633344,2968643583,RU
2968643584,2968645631,NO
2968645632,2968647679,PL
-2968647680,2968647727,FR
-2968647728,2968647743,GB
-2968647744,2968647823,FR
-2968647824,2968647935,GB
-2968647936,2968647983,FR
-2968647984,2968647999,GB
-2968648000,2968648079,FR
-2968648080,2968648191,GB
-2968648192,2968648223,FR
+2968647680,2968648223,FR
2968648224,2968648255,CH
2968648256,2968648287,GB
2968648288,2968648319,BE
-2968648320,2968648383,FR
-2968648384,2968648447,GB
-2968648448,2968648479,FR
+2968648320,2968648479,FR
2968648480,2968648511,CH
2968648512,2968648543,GB
2968648544,2968648575,BE
-2968648576,2968648639,FR
-2968648640,2968648703,GB
-2968648704,2968648751,FR
-2968648752,2968648831,GB
-2968648832,2968648895,FR
-2968648896,2968648959,GB
-2968648960,2968649007,FR
-2968649008,2968649087,GB
-2968649088,2968649151,FR
-2968649152,2968649719,GB
-2968649720,2968649727,FR
+2968648576,2968649727,FR
2968649728,2969042943,IT
2969042944,2969567231,GB
2969567232,2984247295,BR
-2984247296,2984771583,MX
+2984247296,2984935423,MX
+2984935424,2984951807,BR
+2984968192,2985033727,BR
+2985033728,2985951231,MX
+2985951232,2986082303,PY
+2986082304,2986344447,CO
2986344448,2987393023,DE
2987393024,2987397119,IM
2987397120,2987401215,LV
@@ -93309,9 +45072,7 @@
2987413504,2987417599,UA
2987417600,2987425791,PL
2987425792,2987429887,BG
-2987429888,2987433215,RU
-2987433216,2987433471,KZ
-2987433472,2987433983,RU
+2987429888,2987433983,RU
2987433984,2987438079,FR
2987438080,2987442175,FI
2987442176,2987446271,IE
@@ -93322,7 +45083,7 @@
2987462656,2987466751,RS
2987466752,2987470847,GB
2987470848,2987474431,IQ
-2987474432,2987474943,US
+2987474432,2987474943,DE
2987474944,2987479039,GB
2987479040,2987487231,CZ
2987487232,2987491327,HR
@@ -93330,71 +45091,36 @@
2987495424,2987499519,NO
2987499520,2987500199,MD
2987500200,2987500207,AQ
-2987500208,2987500511,MD
-2987500512,2987500519,US
-2987500520,2987500767,MD
-2987500768,2987500799,US
-2987500800,2987502735,MD
-2987502736,2987502743,DE
-2987502744,2987503615,MD
+2987500208,2987503615,MD
2987503616,2987511807,RU
2987511808,2987515903,JO
-2987515904,2987519487,A2
-2987519488,2987519743,KE
-2987519744,2987519999,A2
+2987515904,2987518207,DE
+2987518208,2987519487,US
+2987519488,2987519999,DE
2987520000,2987524095,GB
2987524096,2987528191,RU
2987528192,2987529215,US
-2987529216,2987532287,NL
+2987529216,2987530751,NL
+2987530752,2987531775,US
+2987531776,2987532287,NL
2987532288,2987536383,MD
2987536384,2987540479,FR
2987540480,2987544575,SK
2987544576,2987548671,NL
2987548672,2987552767,RU
2987552768,2987556863,GB
-2987556864,2987557247,NL
-2987557248,2987557279,BE
-2987557280,2987557312,NL
-2987557313,2987557375,BE
-2987557376,2987558431,NL
-2987558432,2987558463,BE
-2987558464,2987559936,NL
-2987559937,2987559951,BE
-2987559952,2987560959,NL
-2987560960,2987560967,CH
-2987560968,2987562495,DE
-2987562496,2987562751,SY
-2987562752,2987563263,DE
-2987563264,2987563519,MD
-2987563520,2987565055,DE
+2987556864,2987560959,NL
+2987560960,2987565055,DE
2987565056,2987569151,AT
2987569152,2987573247,FR
2987573248,2987577343,TR
2987577344,2987585535,RU
-2987585536,2987585791,DE
-2987585792,2987585799,PA
-2987585800,2987585807,CZ
-2987585808,2987585815,ES
-2987585816,2987585823,IT
-2987585824,2987585831,FR
-2987585832,2987585839,US
-2987585840,2987585847,DK
-2987585848,2987585855,SE
-2987585856,2987585863,RU
-2987585864,2987585871,GB
-2987585872,2987585879,MX
-2987585880,2987585887,BR
-2987585888,2987585895,PL
-2987585896,2987587135,DE
-2987587136,2987587143,CN
-2987587144,2987589119,DE
-2987589120,2987589631,US
+2987585536,2987589631,DE
2987589632,2987593727,FR
2987593728,2987597823,LT
2987597824,2987601919,ES
2987601920,2987606015,IS
-2987606016,2987606527,US
-2987606528,2987610111,DE
+2987606016,2987610111,DE
2987610112,2987614207,RU
2987614208,2987618303,PL
2987618304,2987622399,NL
@@ -93404,10 +45130,8 @@
2987638784,2987642879,FO
2987642880,2987651071,DE
2987651072,2987655167,RU
-2987655168,2987658367,DE
-2987658368,2987658383,AT
-2987658384,2987659263,DE
-2987659264,2987661311,BA
+2987655168,2987659263,DE
+2987659264,2987661311,SI
2987661312,2987663359,GB
2987663360,2987665407,IT
2987665408,2987667455,RU
@@ -93461,18 +45185,13 @@
2987769856,2987771903,FI
2987771904,2987773951,IT
2987773952,2987775999,FR
-2987776000,2987776663,NL
-2987776664,2987776671,BE
-2987776672,2987778047,NL
+2987776000,2987778047,NL
2987778048,2987780095,CH
2987780096,2987782143,GB
2987782144,2987784191,EE
2987784192,2987786239,DK
2987786240,2987788287,FR
-2987788288,2987788799,GB
-2987788800,2987789055,US
-2987789056,2987789311,GB
-2987789312,2987790335,TR
+2987788288,2987790335,TR
2987790336,2987792383,GB
2987792384,2987794431,CH
2987794432,2987796479,IQ
@@ -93485,8 +45204,8 @@
2987810816,2987812863,NO
2987812864,2987814911,CH
2987814912,2987816959,CZ
-2987816960,2987817792,NL
-2987817793,2987819007,GB
+2987816960,2987817983,NL
+2987817984,2987819007,GB
2987819008,2987821055,FR
2987821056,2987823103,GB
2987823104,2987827199,FR
@@ -93526,9 +45245,7 @@
2987894784,2987896831,CH
2987896832,2987898879,DK
2987898880,2987900927,NL
-2987900928,2987901439,PL
-2987901440,2987901695,GB
-2987901696,2987902975,PL
+2987900928,2987902975,PL
2987902976,2987905023,IT
2987905024,2987907071,ES
2987907072,2987909119,CZ
@@ -93537,4868 +45254,203 @@
2987913216,2987915263,DK
2987915264,2987917311,IT
2987917312,2988179455,DE
-2988179456,2988441599,SE
-2988441600,2988441603,CH
-2988441604,2988441607,GB
-2988441608,2988441615,CH
-2988441616,2988441647,FR
-2988441648,2988441663,DE
-2988441664,2988441695,IT
-2988441696,2988441791,FR
-2988441792,2988441807,PL
-2988441808,2988441815,FR
-2988441816,2988441819,PT
-2988441820,2988441839,FR
-2988441840,2988441843,IE
-2988441844,2988441855,FR
-2988441856,2988441887,IT
-2988441888,2988441895,FR
-2988441896,2988441899,PL
-2988441900,2988441903,ES
-2988441904,2988441911,IT
-2988441912,2988441915,FR
-2988441916,2988441919,ES
-2988441920,2988441923,GB
-2988441924,2988441931,PL
-2988441932,2988441935,BE
-2988441936,2988441939,FR
-2988441940,2988441943,ES
-2988441944,2988441947,PL
-2988441948,2988441951,FR
-2988441952,2988441967,PL
-2988441968,2988441971,NL
-2988441972,2988441975,CH
-2988441976,2988441979,DE
-2988441980,2988441983,IT
-2988441984,2988441991,GB
-2988441992,2988441995,ES
-2988441996,2988441999,FI
-2988442000,2988442003,GB
-2988442004,2988442067,FR
-2988442068,2988442071,GB
-2988442072,2988442079,FR
-2988442080,2988442083,GB
-2988442084,2988442087,DE
-2988442088,2988442095,FR
-2988442096,2988442099,IT
-2988442100,2988442399,FR
-2988442400,2988442431,NL
-2988442432,2988442439,CZ
-2988442440,2988442447,ES
-2988442448,2988442463,GB
-2988442464,2988442495,FR
-2988442496,2988442503,PL
-2988442504,2988442507,FR
-2988442508,2988442511,NL
-2988442512,2988442519,ES
-2988442520,2988442527,DE
-2988442528,2988442559,FR
-2988442560,2988442583,PL
-2988442584,2988442587,FR
-2988442588,2988442591,ES
-2988442592,2988442607,PL
-2988442608,2988442623,ES
-2988442624,2988442639,PL
-2988442640,2988442647,PT
-2988442648,2988442651,DE
-2988442652,2988442655,GB
-2988442656,2988442671,PL
-2988442672,2988442675,GB
-2988442676,2988442687,FR
-2988442688,2988442695,PL
-2988442696,2988442703,PT
-2988442704,2988442751,FR
-2988442752,2988442847,PT
-2988442848,2988442855,PL
-2988442856,2988442863,FR
-2988442864,2988442871,BE
-2988442872,2988442879,PL
-2988442880,2988442895,FR
-2988442896,2988442899,PL
-2988442900,2988442903,FR
-2988442904,2988442907,IT
-2988442908,2988442911,FR
-2988442912,2988442915,NL
-2988442916,2988442919,IT
-2988442920,2988442923,FR
-2988442924,2988442927,IE
-2988442928,2988442975,FR
-2988442976,2988442991,PL
-2988442992,2988442995,GB
-2988442996,2988442999,IE
-2988443000,2988443007,GB
-2988443008,2988443023,PT
-2988443024,2988443027,CZ
-2988443028,2988443031,BE
-2988443032,2988443035,GB
-2988443036,2988443039,IT
-2988443040,2988443055,PL
-2988443056,2988443071,DE
-2988443072,2988443087,ES
-2988443088,2988443111,PL
-2988443112,2988443119,ES
-2988443120,2988443135,PL
-2988443136,2988443391,GB
-2988443392,2988443407,DE
-2988443408,2988443439,FR
-2988443440,2988443443,CZ
-2988443444,2988443447,DE
-2988443448,2988443487,FR
-2988443488,2988443519,GB
-2988443520,2988443539,FR
-2988443540,2988443547,ES
-2988443548,2988443551,IT
-2988443552,2988443555,CH
-2988443556,2988443559,PL
-2988443560,2988443563,GB
-2988443564,2988443567,PL
-2988443568,2988443647,FR
-2988443648,2988443651,NL
-2988443652,2988443655,FR
-2988443656,2988443659,DE
-2988443660,2988443667,FR
-2988443668,2988443671,IT
-2988443672,2988443675,ES
-2988443676,2988443679,FR
-2988443680,2988443687,BE
-2988443688,2988443695,ES
-2988443696,2988443703,PT
-2988443704,2988443711,FR
-2988443712,2988443719,PL
-2988443720,2988443727,CZ
-2988443728,2988443735,IT
-2988443736,2988443739,FR
-2988443740,2988443743,GB
-2988443744,2988443787,FR
-2988443788,2988443791,IE
-2988443792,2988443831,FR
-2988443832,2988443839,NL
-2988443840,2988443855,FR
-2988443856,2988443859,IT
-2988443860,2988443871,PL
-2988443872,2988443875,GB
-2988443876,2988443879,DE
-2988443880,2988443887,FR
-2988443888,2988443891,PL
-2988443892,2988443895,ES
-2988443896,2988443899,FI
-2988443900,2988443903,FR
-2988443904,2988443919,BE
-2988443920,2988443923,FR
-2988443924,2988443927,PL
-2988443928,2988443935,FR
-2988443936,2988443967,IT
-2988443968,2988444031,FR
-2988444032,2988444095,CZ
-2988444096,2988444159,DE
-2988444160,2988444175,FR
-2988444176,2988444191,PT
-2988444192,2988444199,FR
-2988444200,2988444203,DE
-2988444204,2988444207,NL
-2988444208,2988444208,IT
+2988179456,2988411647,SE
+2988411648,2988411775,DE
+2988411776,2988441599,SE
+2988441600,2988442075,FR
+2988442076,2988442079,ES
+2988442080,2988442847,FR
+2988442848,2988442863,IT
+2988442864,2988444208,FR
2988444209,2988444209,FI
-2988444210,2988444211,IT
-2988444212,2988444215,PL
-2988444216,2988444219,BE
-2988444220,2988444223,FR
-2988444224,2988444287,PT
-2988444288,2988444415,GB
-2988444416,2988444671,IE
+2988444210,2988444671,FR
2988444672,2988444679,ES
-2988444680,2988444687,FR
-2988444688,2988444695,LT
-2988444696,2988444703,FR
-2988444704,2988444719,GB
-2988444720,2988444735,ES
-2988444736,2988444739,GB
-2988444740,2988444743,FR
-2988444744,2988444755,BE
-2988444756,2988444759,PL
-2988444760,2988444767,IE
-2988444768,2988444771,BE
-2988444772,2988444775,GB
-2988444776,2988444783,CZ
-2988444784,2988444791,FI
-2988444792,2988444795,DE
-2988444796,2988444799,FR
-2988444800,2988444927,ES
-2988444928,2988444931,PL
-2988444932,2988444943,DE
-2988444944,2988444967,PL
-2988444968,2988444975,IT
-2988444976,2988444991,IE
-2988444992,2988444999,FR
-2988445000,2988445007,PL
-2988445008,2988445023,FR
-2988445024,2988445027,PL
-2988445028,2988445035,FR
-2988445036,2988445039,PL
-2988445040,2988445119,FR
-2988445120,2988445127,ES
-2988445128,2988445139,FR
-2988445140,2988445143,DE
-2988445144,2988445151,IT
-2988445152,2988445167,FR
-2988445168,2988445183,PL
-2988445184,2988445215,FR
-2988445216,2988445223,DE
-2988445224,2988445231,ES
-2988445232,2988445235,FR
-2988445236,2988445239,PL
-2988445240,2988445343,FR
-2988445344,2988445375,PT
-2988445376,2988445391,GB
-2988445392,2988445395,IT
-2988445396,2988445399,FR
-2988445400,2988445407,PT
-2988445408,2988445439,FR
-2988445440,2988445951,DE
-2988445952,2988446207,IE
-2988446208,2988446271,PL
-2988446272,2988446275,IT
-2988446276,2988446279,FR
-2988446280,2988446287,BE
-2988446288,2988446291,FR
-2988446292,2988446295,ES
-2988446296,2988446299,GB
-2988446300,2988446307,FR
-2988446308,2988446311,PL
-2988446312,2988446319,FR
-2988446320,2988446323,PL
-2988446324,2988446327,FR
-2988446328,2988446399,PL
-2988446400,2988446463,FR
-2988446464,2988446719,PL
-2988446720,2988446975,DE
-2988446976,2988447103,IT
-2988447104,2988447167,GB
-2988447168,2988447231,FR
-2988447232,2988447359,DE
-2988447360,2988447423,PL
-2988447424,2988447495,FR
-2988447496,2988447499,GB
-2988447500,2988447503,NL
-2988447504,2988447507,FR
-2988447508,2988447511,NL
-2988447512,2988447515,PL
-2988447516,2988447519,NL
-2988447520,2988447543,FR
-2988447544,2988447547,DE
-2988447548,2988447551,NL
-2988447552,2988447583,FR
-2988447584,2988447599,NL
-2988447600,2988447615,FR
-2988447616,2988447747,DE
-2988447748,2988447759,ES
-2988447760,2988447775,FR
-2988447776,2988447791,PT
-2988447792,2988447871,FR
-2988447872,2988447903,PL
-2988447904,2988447919,PT
-2988447920,2988447923,PL
-2988447924,2988447927,IT
-2988447928,2988447935,PL
-2988447936,2988447943,DE
-2988447944,2988447947,GB
-2988447948,2988447959,FR
-2988447960,2988447967,IT
-2988447968,2988447999,BE
-2988448000,2988448127,DE
-2988448128,2988448255,ES
-2988448256,2988448287,FR
-2988448288,2988448319,GB
-2988448320,2988448511,DE
-2988448512,2988448515,GB
-2988448516,2988448519,FR
-2988448520,2988448527,PL
-2988448528,2988448543,NL
-2988448544,2988448547,GB
-2988448548,2988448551,FR
-2988448552,2988448559,PL
-2988448560,2988448563,DE
-2988448564,2988448567,ES
-2988448568,2988448607,FR
-2988448608,2988448639,ES
-2988448640,2988448671,NL
-2988448672,2988448691,IT
-2988448692,2988448695,DE
-2988448696,2988448703,FR
-2988448704,2988448767,PT
-2988448768,2988448783,FR
-2988448784,2988448815,PL
-2988448816,2988448895,FR
-2988448896,2988448903,IE
-2988448904,2988448907,ES
-2988448908,2988449055,FR
-2988449056,2988449071,IT
-2988449072,2988449087,FR
-2988449088,2988449103,PL
-2988449104,2988449123,FR
-2988449124,2988449127,DE
-2988449128,2988449135,ES
-2988449136,2988449151,FR
-2988449152,2988449167,PL
-2988449168,2988449175,GB
-2988449176,2988449191,FR
-2988449192,2988449199,CZ
-2988449200,2988449203,FR
-2988449204,2988449207,PL
+2988444680,2988449207,FR
2988449208,2988449215,ES
-2988449216,2988449247,FR
-2988449248,2988449535,GB
-2988449536,2988449631,FR
-2988449632,2988449639,ES
-2988449640,2988449643,BE
-2988449644,2988449647,CZ
-2988449648,2988449747,FR
-2988449748,2988449751,FI
-2988449752,2988449759,BE
-2988449760,2988451839,FR
+2988449216,2988451839,FR
2988451840,2988453887,BE
2988453888,2988457983,GB
-2988457984,2988457987,FR
-2988457988,2988457991,PL
-2988457992,2988457995,CH
-2988457996,2988457999,FR
-2988458000,2988458015,DE
-2988458016,2988458031,FR
-2988458032,2988458047,IT
-2988458048,2988458055,PL
-2988458056,2988458063,FR
-2988458064,2988458067,ES
-2988458068,2988458075,FR
-2988458076,2988458079,PL
-2988458080,2988458247,FR
-2988458248,2988458251,PL
-2988458252,2988458271,FR
-2988458272,2988458275,GB
-2988458276,2988458279,FI
-2988458280,2988458283,ES
-2988458284,2988458287,FR
-2988458288,2988458291,BE
-2988458292,2988458295,DE
-2988458296,2988458299,GB
-2988458300,2988458303,ES
-2988458304,2988458319,FR
-2988458320,2988458323,CZ
-2988458324,2988458331,FR
-2988458332,2988458335,GB
-2988458336,2988458399,FR
-2988458400,2988458431,NL
-2988458432,2988458495,FR
-2988458496,2988458751,GB
-2988458752,2988458755,PL
-2988458756,2988458759,FR
-2988458760,2988458763,NL
-2988458764,2988458767,DE
-2988458768,2988459007,FR
-2988459008,2988459015,PL
-2988459016,2988459019,FR
-2988459020,2988459023,GB
-2988459024,2988459039,IE
-2988459040,2988459047,FR
-2988459048,2988459051,PL
-2988459052,2988459055,ES
-2988459056,2988459071,CH
-2988459072,2988459079,GB
-2988459080,2988459083,DE
-2988459084,2988459087,FR
-2988459088,2988459103,GB
-2988459104,2988459107,FR
-2988459108,2988459111,PL
-2988459112,2988459119,FR
+2988457984,2988459119,FR
2988459120,2988459127,IT
-2988459128,2988459151,PL
-2988459152,2988459167,FR
-2988459168,2988459171,IE
-2988459172,2988459175,FR
-2988459176,2988459179,PL
-2988459180,2988459183,ES
-2988459184,2988459199,PL
-2988459200,2988459223,FR
-2988459224,2988459231,DE
-2988459232,2988459235,GB
-2988459236,2988459243,FR
-2988459244,2988459247,ES
-2988459248,2988459251,LT
-2988459252,2988459259,FR
-2988459260,2988459263,ES
-2988459264,2988459391,BE
-2988459392,2988459423,GB
-2988459424,2988459431,PT
-2988459432,2988459439,FR
-2988459440,2988459455,NL
-2988459456,2988459535,FR
-2988459536,2988459543,PL
-2988459544,2988459547,ES
-2988459548,2988459551,PL
-2988459552,2988459567,FR
-2988459568,2988459583,GB
-2988459584,2988459599,FR
-2988459600,2988459603,GB
-2988459604,2988459615,FR
-2988459616,2988459619,CZ
-2988459620,2988459623,FR
-2988459624,2988459627,NL
-2988459628,2988459631,PL
-2988459632,2988459639,ES
-2988459640,2988459643,IT
-2988459644,2988459647,CH
-2988459648,2988459679,GB
+2988459128,2988459135,PL
+2988459136,2988459535,FR
+2988459536,2988459539,ES
+2988459540,2988459679,FR
2988459680,2988459683,ES
-2988459684,2988459687,DE
-2988459688,2988459691,IT
-2988459692,2988459695,ES
-2988459696,2988459711,FR
-2988459712,2988459715,ES
-2988459716,2988459723,FR
-2988459724,2988459727,DE
-2988459728,2988459731,FR
-2988459732,2988459735,ES
-2988459736,2988459743,PL
-2988459744,2988459747,ES
-2988459748,2988459751,PL
-2988459752,2988459759,FR
-2988459760,2988459767,GB
-2988459768,2988459771,NL
-2988459772,2988459775,GB
-2988459776,2988459839,FR
-2988459840,2988459855,IT
-2988459856,2988459859,GB
-2988459860,2988459863,FR
-2988459864,2988459871,ES
-2988459872,2988459895,PL
-2988459896,2988459967,FR
-2988459968,2988459999,ES
-2988460000,2988460015,NL
-2988460016,2988460023,PL
-2988460024,2988460031,FR
-2988460032,2988460063,DE
-2988460064,2988460095,FR
-2988460096,2988460107,PL
-2988460108,2988460111,DE
-2988460112,2988460119,FR
-2988460120,2988460123,IT
-2988460124,2988460127,FR
-2988460128,2988460131,PL
-2988460132,2988460135,CZ
-2988460136,2988460143,FR
-2988460144,2988460147,GB
-2988460148,2988460159,ES
-2988460160,2988460191,PL
-2988460192,2988460195,FR
-2988460196,2988460199,NL
-2988460200,2988460207,LT
-2988460208,2988460223,PL
-2988460224,2988460239,FR
-2988460240,2988460243,BE
-2988460244,2988460247,PL
-2988460248,2988460255,FR
-2988460256,2988460271,ES
-2988460272,2988460275,FR
-2988460276,2988460279,NL
-2988460280,2988460287,PL
-2988460288,2988460323,FR
-2988460324,2988460327,GB
-2988460328,2988460335,PL
-2988460336,2988460339,FR
-2988460340,2988460351,GB
-2988460352,2988460367,FR
-2988460368,2988460371,PL
-2988460372,2988460375,FR
-2988460376,2988460383,DE
-2988460384,2988460415,PT
-2988460416,2988460543,FR
-2988460544,2988460547,GB
-2988460548,2988460551,DE
-2988460552,2988460559,PL
-2988460560,2988460575,FR
+2988459684,2988459687,FR
+2988459688,2988459691,PL
+2988459692,2988459863,FR
+2988459864,2988459867,ES
+2988459868,2988460575,FR
2988460576,2988460591,PT
-2988460592,2988460615,GB
-2988460616,2988460623,PT
-2988460624,2988460639,FR
-2988460640,2988460647,ES
-2988460648,2988460655,FR
-2988460656,2988460663,GB
-2988460664,2988460679,FR
-2988460680,2988460683,DE
-2988460684,2988460755,FR
-2988460756,2988460759,PT
-2988460760,2988460767,FR
-2988460768,2988460799,PL
-2988460800,2988460863,DE
-2988460864,2988460895,FR
-2988460896,2988460927,PT
-2988460928,2988460931,FR
-2988460932,2988460943,PL
-2988460944,2988460959,ES
-2988460960,2988460991,FR
-2988460992,2988460999,NL
-2988461000,2988461003,FR
-2988461004,2988461007,NL
-2988461008,2988461011,FR
-2988461012,2988461015,PL
-2988461016,2988461023,DE
-2988461024,2988461027,NL
-2988461028,2988461031,FR
-2988461032,2988461035,ES
-2988461036,2988461055,FR
-2988461056,2988461087,PL
-2988461088,2988461103,DE
-2988461104,2988461135,FR
-2988461136,2988461151,DE
-2988461152,2988461183,FR
-2988461184,2988461215,PT
-2988461216,2988461255,FR
-2988461256,2988461259,ES
-2988461260,2988461263,PT
-2988461264,2988461279,ES
-2988461280,2988461295,IT
-2988461296,2988461299,PL
-2988461300,2988461307,FR
-2988461308,2988461311,PL
-2988461312,2988461375,PT
-2988461376,2988461391,GB
-2988461392,2988461399,DE
-2988461400,2988461407,PT
-2988461408,2988461411,FR
-2988461412,2988461415,PL
-2988461416,2988461419,IE
-2988461420,2988461423,FR
-2988461424,2988461431,IT
-2988461432,2988461439,PT
-2988461440,2988461471,FI
-2988461472,2988461479,PT
-2988461480,2988461491,FR
-2988461492,2988461495,PL
-2988461496,2988461499,ES
-2988461500,2988461503,PT
-2988461504,2988461519,PL
-2988461520,2988461523,PT
-2988461524,2988461559,FR
-2988461560,2988461567,PT
-2988461568,2988461583,FR
-2988461584,2988461587,PL
-2988461588,2988461591,IE
-2988461592,2988461615,FR
-2988461616,2988461623,IT
-2988461624,2988461631,FR
-2988461632,2988461695,PL
-2988461696,2988461699,DE
-2988461700,2988461703,GB
+2988460592,2988460651,FR
+2988460652,2988460655,ES
+2988460656,2988461703,FR
2988461704,2988461707,NL
-2988461708,2988461711,BE
-2988461712,2988461719,FR
-2988461720,2988461723,DE
-2988461724,2988461727,FR
-2988461728,2988461731,PL
-2988461732,2988461735,CH
-2988461736,2988461743,PL
-2988461744,2988461747,ES
-2988461748,2988461751,IT
-2988461752,2988461755,FR
-2988461756,2988461759,NL
-2988461760,2988461791,PL
-2988461792,2988461799,FR
-2988461800,2988461807,ES
-2988461808,2988461811,FI
-2988461812,2988461815,FR
-2988461816,2988461819,PL
-2988461820,2988461823,IE
-2988461824,2988461851,FR
-2988461852,2988461855,PL
-2988461856,2988461859,DE
-2988461860,2988461871,FR
-2988461872,2988461879,GB
-2988461880,2988461883,ES
-2988461884,2988461887,IT
-2988461888,2988461907,FR
-2988461908,2988461911,ES
-2988461912,2988461915,IT
-2988461916,2988461919,NL
-2988461920,2988461935,FR
-2988461936,2988461951,GB
-2988461952,2988462079,PL
-2988462080,2988462083,FR
-2988462084,2988462087,PL
-2988462088,2988462091,DE
-2988462092,2988462095,PL
-2988462096,2988462119,FR
-2988462120,2988462123,PL
-2988462124,2988462127,GB
-2988462128,2988462131,ES
-2988462132,2988462143,FR
-2988462144,2988462151,PL
-2988462152,2988462155,IT
-2988462156,2988462159,NL
-2988462160,2988462175,ES
-2988462176,2988462191,PL
-2988462192,2988462199,FR
-2988462200,2988462203,PL
-2988462204,2988462303,FR
-2988462304,2988462307,DE
-2988462308,2988462311,NL
-2988462312,2988462323,PL
-2988462324,2988462327,DE
-2988462328,2988462331,GB
-2988462332,2988462463,ES
-2988462464,2988462495,GB
-2988462496,2988462527,DE
-2988462528,2988462559,NL
-2988462560,2988462587,FR
-2988462588,2988462591,DE
-2988462592,2988462599,FR
-2988462600,2988462603,IT
+2988461708,2988462603,FR
2988462604,2988462607,ES
-2988462608,2988462735,FR
-2988462736,2988462743,IT
-2988462744,2988462751,FR
-2988462752,2988462767,PL
-2988462768,2988462775,GB
-2988462776,2988462779,PL
-2988462780,2988462787,FR
-2988462788,2988462799,PL
-2988462800,2988462815,FR
-2988462816,2988462823,BE
-2988462824,2988462847,FR
-2988462848,2988463103,BE
-2988463104,2988463107,IT
-2988463108,2988463111,FR
-2988463112,2988463119,ES
-2988463120,2988463123,GB
-2988463124,2988463127,ES
-2988463128,2988463131,FR
-2988463132,2988463135,PT
-2988463136,2988463143,FR
-2988463144,2988463151,ES
-2988463152,2988463159,FR
-2988463160,2988463167,ES
-2988463168,2988463199,PL
-2988463200,2988463203,ES
-2988463204,2988463207,DE
-2988463208,2988463211,PL
-2988463212,2988463223,GB
-2988463224,2988463227,ES
-2988463228,2988463251,FR
-2988463252,2988463255,PL
-2988463256,2988463259,IE
-2988463260,2988463279,FR
-2988463280,2988463283,GB
-2988463284,2988463287,FR
-2988463288,2988463291,PL
-2988463292,2988463315,FR
-2988463316,2988463319,PL
-2988463320,2988463327,FR
-2988463328,2988463331,ES
-2988463332,2988463335,IT
-2988463336,2988463339,PT
-2988463340,2988463343,FR
-2988463344,2988463359,BE
-2988463360,2988463615,FR
-2988463616,2988463623,BE
-2988463624,2988463627,PL
-2988463628,2988463631,DE
-2988463632,2988463647,GB
-2988463648,2988463651,PL
-2988463652,2988463659,GB
-2988463660,2988463663,FR
-2988463664,2988463671,PT
-2988463672,2988463695,FR
-2988463696,2988463711,PL
-2988463712,2988463727,FR
-2988463728,2988463735,PT
-2988463736,2988463743,CZ
-2988463744,2988463747,BE
-2988463748,2988463751,GB
-2988463752,2988463791,FR
-2988463792,2988463799,GB
-2988463800,2988463831,FR
-2988463832,2988463835,DE
-2988463836,2988463839,FR
-2988463840,2988463871,PL
-2988463872,2988463907,FR
-2988463908,2988463911,GB
-2988463912,2988463915,FR
-2988463916,2988463919,PL
-2988463920,2988463935,BE
-2988463936,2988463939,FR
-2988463940,2988463943,DE
-2988463944,2988463947,FR
-2988463948,2988463951,GB
-2988463952,2988463999,FR
+2988462608,2988463915,FR
+2988463916,2988463919,ES
+2988463920,2988463999,FR
2988464000,2988464007,IE
2988464008,2988464015,LT
-2988464016,2988464019,PT
-2988464020,2988464023,IT
-2988464024,2988464027,GB
-2988464028,2988464031,PL
-2988464032,2988464059,FR
-2988464060,2988464063,CZ
-2988464064,2988464095,PL
-2988464096,2988464271,FR
-2988464272,2988464275,ES
-2988464276,2988464279,PL
-2988464280,2988464283,FR
-2988464284,2988464287,PL
-2988464288,2988464295,FR
-2988464296,2988464299,IT
-2988464300,2988464303,GB
-2988464304,2988464307,ES
-2988464308,2988464311,PL
-2988464312,2988464351,FR
-2988464352,2988464355,DE
-2988464356,2988464359,FR
-2988464360,2988464363,PL
-2988464364,2988464367,GB
-2988464368,2988464527,FR
-2988464528,2988464543,DE
-2988464544,2988464551,NL
-2988464552,2988464555,FR
-2988464556,2988464559,NL
-2988464560,2988464575,ES
-2988464576,2988464591,FR
-2988464592,2988464595,ES
-2988464596,2988464603,PL
-2988464604,2988464607,IT
-2988464608,2988464611,DE
-2988464612,2988464615,PL
-2988464616,2988464619,IE
-2988464620,2988464623,ES
-2988464624,2988464627,FR
-2988464628,2988464631,IT
-2988464632,2988464779,FR
-2988464780,2988464783,PL
-2988464784,2988464787,IT
-2988464788,2988464791,ES
-2988464792,2988464799,FR
-2988464800,2988464815,DE
-2988464816,2988464819,IE
-2988464820,2988464823,GB
-2988464824,2988464827,CZ
-2988464828,2988464895,FR
-2988464896,2988464911,PL
-2988464912,2988464915,NL
-2988464916,2988464919,DE
-2988464920,2988464923,FI
-2988464924,2988464927,FR
-2988464928,2988464943,ES
-2988464944,2988464947,GB
-2988464948,2988464951,PL
-2988464952,2988464959,FR
-2988464960,2988464967,GB
-2988464968,2988464971,PT
-2988464972,2988464975,PL
-2988464976,2988465215,FR
+2988464016,2988464623,FR
+2988464624,2988464627,ES
+2988464628,2988465215,FR
2988465216,2988465219,ES
-2988465220,2988465227,FR
-2988465228,2988465231,IT
-2988465232,2988465235,FR
-2988465236,2988465239,ES
-2988465240,2988465279,FR
+2988465220,2988465279,FR
2988465280,2988465295,DE
-2988465296,2988465307,FR
-2988465308,2988465311,DE
-2988465312,2988465343,FR
-2988465344,2988465359,DE
-2988465360,2988465363,GB
-2988465364,2988465367,PL
-2988465368,2988465375,FR
-2988465376,2988465391,IT
-2988465392,2988465403,FR
-2988465404,2988465407,DE
-2988465408,2988465423,CH
-2988465424,2988465439,PT
-2988465440,2988465455,GB
-2988465456,2988465479,FR
-2988465480,2988465483,NL
-2988465484,2988465503,FR
-2988465504,2988465507,DE
-2988465508,2988465511,PL
-2988465512,2988465515,PT
-2988465516,2988465519,GB
-2988465520,2988465523,IT
-2988465524,2988465527,ES
-2988465528,2988465539,FR
-2988465540,2988465543,GB
-2988465544,2988465547,CZ
-2988465548,2988465551,IT
-2988465552,2988465559,ES
-2988465560,2988465563,PL
-2988465564,2988465567,IT
-2988465568,2988465571,ES
-2988465572,2988465575,PL
-2988465576,2988465583,DE
-2988465584,2988465587,PL
-2988465588,2988465591,GB
-2988465592,2988465599,FR
-2988465600,2988465615,PL
-2988465616,2988465619,FR
-2988465620,2988465623,DE
-2988465624,2988465647,FR
-2988465648,2988465655,CZ
-2988465656,2988465663,GB
-2988465664,2988466047,FR
-2988466048,2988466111,IE
-2988466112,2988466115,FR
-2988466116,2988466127,PL
-2988466128,2988466139,FR
-2988466140,2988466143,PL
-2988466144,2988466159,NL
-2988466160,2988476415,FR
+2988465296,2988465559,FR
+2988465560,2988465563,ES
+2988465564,2988476415,FR
2988476416,2988478463,IT
-2988478464,2988478487,FR
-2988478488,2988478491,NL
-2988478492,2988478495,GB
-2988478496,2988478499,IT
-2988478500,2988478503,ES
-2988478504,2988478543,FR
-2988478544,2988478559,DE
-2988478560,2988478563,FR
-2988478564,2988478567,BE
-2988478568,2988478571,PT
-2988478572,2988478575,FR
-2988478576,2988478579,PL
+2988478464,2988478579,FR
2988478580,2988478583,DE
2988478584,2988478587,FR
2988478588,2988478591,DE
-2988478592,2988478623,FR
-2988478624,2988478631,GB
-2988478632,2988478639,FR
-2988478640,2988478643,PL
-2988478644,2988478647,FR
-2988478648,2988478655,BE
-2988478656,2988478671,DE
-2988478672,2988478679,FR
-2988478680,2988478683,ES
-2988478684,2988478687,NL
-2988478688,2988478751,FR
-2988478752,2988478783,NL
-2988478784,2988478787,FR
-2988478788,2988478791,PL
-2988478792,2988478795,FR
-2988478796,2988478799,ES
-2988478800,2988478803,NL
-2988478804,2988478807,PL
-2988478808,2988478811,IT
-2988478812,2988478815,FR
-2988478816,2988478847,PL
-2988478848,2988478851,ES
-2988478852,2988478855,FR
-2988478856,2988478859,LT
-2988478860,2988478863,NL
-2988478864,2988478867,CZ
-2988478868,2988478871,FR
-2988478872,2988478879,IT
-2988478880,2988478911,IE
-2988478912,2988478919,FR
-2988478920,2988478927,GB
-2988478928,2988478947,FR
-2988478948,2988478951,GB
-2988478952,2988478955,ES
-2988478956,2988478959,DE
-2988478960,2988478975,FR
-2988478976,2988478979,DE
-2988478980,2988478983,PL
-2988478984,2988478987,DE
-2988478988,2988478991,IT
-2988478992,2988478995,DE
-2988478996,2988478999,IE
-2988479000,2988479003,GB
-2988479004,2988479007,PL
-2988479008,2988479055,FR
-2988479056,2988479071,PL
-2988479072,2988479075,BE
-2988479076,2988479079,FR
-2988479080,2988479087,DE
-2988479088,2988479103,FR
-2988479104,2988479107,IE
-2988479108,2988479119,FR
-2988479120,2988479135,PT
-2988479136,2988479139,DE
-2988479140,2988479143,NL
-2988479144,2988479147,IE
-2988479148,2988479151,NL
-2988479152,2988479155,PL
-2988479156,2988479159,ES
-2988479160,2988479163,PT
-2988479164,2988479167,ES
-2988479168,2988479247,FR
-2988479248,2988479251,PL
-2988479252,2988479255,FR
-2988479256,2988479259,PL
-2988479260,2988479303,FR
-2988479304,2988479311,ES
-2988479312,2988479315,PT
-2988479316,2988479319,IT
-2988479320,2988479323,GB
-2988479324,2988479327,IT
-2988479328,2988479363,FR
-2988479364,2988479379,PL
-2988479380,2988479383,FR
-2988479384,2988479391,PL
-2988479392,2988479407,IE
-2988479408,2988479423,IT
-2988479424,2988479439,ES
-2988479440,2988479447,FR
-2988479448,2988479451,GB
-2988479452,2988479503,FR
-2988479504,2988479511,NL
-2988479512,2988479519,PL
-2988479520,2988479535,FR
-2988479536,2988479543,PL
-2988479544,2988479551,IE
-2988479552,2988479555,DE
-2988479556,2988479559,IE
-2988479560,2988479567,GB
-2988479568,2988479583,FR
-2988479584,2988479599,ES
-2988479600,2988479603,PL
-2988479604,2988479607,GB
-2988479608,2988479743,FR
-2988479744,2988479747,ES
-2988479748,2988479751,FR
-2988479752,2988479755,NL
-2988479756,2988479783,FR
-2988479784,2988479791,ES
+2988478592,2988479791,FR
2988479792,2988479807,GB
-2988479808,2988479839,BE
-2988479840,2988479855,FR
-2988479856,2988479863,PL
-2988479864,2988479999,FR
-2988480000,2988480003,PL
-2988480004,2988480007,GB
-2988480008,2988480011,NL
-2988480012,2988480015,GB
-2988480016,2988480031,FR
-2988480032,2988480047,IE
-2988480048,2988480063,FR
-2988480064,2988480127,ES
-2988480128,2988480155,FR
-2988480156,2988480159,CH
-2988480160,2988480175,IE
-2988480176,2988480191,FR
-2988480192,2988480207,IT
-2988480208,2988480223,FR
-2988480224,2988480227,IT
-2988480228,2988480231,IE
-2988480232,2988480235,FR
-2988480236,2988480239,IT
-2988480240,2988480259,FR
-2988480260,2988480263,GB
-2988480264,2988480267,NL
-2988480268,2988480271,FR
-2988480272,2988480275,PL
-2988480276,2988480279,FR
-2988480280,2988480283,GB
-2988480284,2988480287,PL
-2988480288,2988480383,FR
-2988480384,2988480415,PL
-2988480416,2988480431,DE
-2988480432,2988480435,FR
-2988480436,2988480439,DE
-2988480440,2988480443,NL
-2988480444,2988480447,GB
-2988480448,2988480475,FR
-2988480476,2988480479,PT
-2988480480,2988480487,FR
-2988480488,2988480495,GB
-2988480496,2988480499,NL
-2988480500,2988480503,FR
-2988480504,2988480511,PL
-2988480512,2988480767,GB
-2988480768,2988480771,FR
-2988480772,2988480775,IT
-2988480776,2988480783,FR
-2988480784,2988480799,FI
-2988480800,2988480803,FR
-2988480804,2988480807,PL
-2988480808,2988480811,FR
-2988480812,2988480815,PL
-2988480816,2988480819,FR
-2988480820,2988480823,PT
-2988480824,2988480827,PL
-2988480828,2988480831,ES
-2988480832,2988480895,PL
-2988480896,2988480903,NL
-2988480904,2988480911,FR
-2988480912,2988480915,BE
-2988480916,2988480919,IT
-2988480920,2988480923,FI
-2988480924,2988480959,ES
-2988480960,2988480975,PL
-2988480976,2988480991,CH
-2988480992,2988481007,DE
-2988481008,2988481023,FI
-2988481024,2988481039,FR
-2988481040,2988481047,GB
-2988481048,2988481055,LT
-2988481056,2988481059,FR
-2988481060,2988481063,FI
-2988481064,2988481067,FR
-2988481068,2988481071,DE
-2988481072,2988481079,NL
-2988481080,2988481087,FR
-2988481088,2988481095,CH
-2988481096,2988481111,FR
-2988481112,2988481119,DE
-2988481120,2988481127,PL
-2988481128,2988481131,NL
-2988481132,2988481135,GB
-2988481136,2988481151,LT
-2988481152,2988481159,GB
-2988481160,2988481167,PL
-2988481168,2988481183,FR
-2988481184,2988481187,DE
-2988481188,2988481191,BE
-2988481192,2988481195,ES
-2988481196,2988481199,FR
-2988481200,2988481203,PL
-2988481204,2988481207,ES
-2988481208,2988481215,FR
-2988481216,2988481219,IE
-2988481220,2988481223,FR
-2988481224,2988481227,GB
-2988481228,2988481231,BE
-2988481232,2988481279,FR
-2988481280,2988481535,GB
-2988481536,2988481663,IE
-2988481664,2988481667,BE
-2988481668,2988481671,CH
-2988481672,2988481675,FR
-2988481676,2988481679,NL
-2988481680,2988481695,PL
-2988481696,2988481711,ES
-2988481712,2988481723,FR
-2988481724,2988481727,PL
-2988481728,2988481735,BE
-2988481736,2988481743,FR
-2988481744,2988481759,ES
-2988481760,2988481767,FR
-2988481768,2988481771,GB
-2988481772,2988481775,DE
-2988481776,2988481783,BE
-2988481784,2988481791,PL
-2988481792,2988481855,FR
-2988481856,2988481859,GB
-2988481860,2988481863,ES
-2988481864,2988481867,FR
-2988481868,2988481871,PT
-2988481872,2988481883,FR
-2988481884,2988481887,ES
-2988481888,2988481903,GB
-2988481904,2988481919,BE
-2988481920,2988481935,IT
-2988481936,2988481987,FR
-2988481988,2988481991,CZ
-2988481992,2988481995,FR
-2988481996,2988481999,DE
-2988482000,2988482007,ES
-2988482008,2988482015,DE
-2988482016,2988482023,IT
-2988482024,2988482031,GB
-2988482032,2988482043,FR
-2988482044,2988482047,BE
-2988482048,2988482079,PL
-2988482080,2988482095,BE
-2988482096,2988482099,GB
-2988482100,2988482103,FR
-2988482104,2988482111,GB
+2988479808,2988482111,FR
2988482112,2988482143,DE
-2988482144,2988482159,CH
-2988482160,2988482163,ES
-2988482164,2988482167,PL
-2988482168,2988482175,ES
-2988482176,2988482191,CH
-2988482192,2988482207,GB
-2988482208,2988482223,FR
-2988482224,2988482231,ES
-2988482232,2988482235,FR
-2988482236,2988482239,GB
-2988482240,2988482255,ES
-2988482256,2988482291,FR
-2988482292,2988482295,CH
-2988482296,2988482307,FR
-2988482308,2988482311,PT
-2988482312,2988482315,GB
-2988482316,2988482335,IT
-2988482336,2988482351,ES
-2988482352,2988482367,FR
-2988482368,2988482399,ES
-2988482400,2988482411,FR
-2988482412,2988482415,PT
-2988482416,2988482431,ES
-2988482432,2988482447,FR
-2988482448,2988482455,CZ
-2988482456,2988482479,FR
-2988482480,2988482487,PL
-2988482488,2988482511,FR
-2988482512,2988482515,DE
-2988482516,2988482527,FR
-2988482528,2988482531,DE
-2988482532,2988482543,FR
-2988482544,2988482551,GB
-2988482552,2988482559,CH
-2988482560,2988482567,ES
-2988482568,2988482575,FR
+2988482144,2988482319,FR
+2988482320,2988482335,IT
+2988482336,2988482575,FR
2988482576,2988482579,CZ
-2988482580,2988482583,PL
-2988482584,2988482591,ES
-2988482592,2988482607,PL
-2988482608,2988482631,FR
-2988482632,2988482639,PL
-2988482640,2988482687,FR
-2988482688,2988482695,ES
-2988482696,2988482699,NL
-2988482700,2988482763,FR
-2988482764,2988482767,GB
-2988482768,2988482783,PL
-2988482784,2988482799,FR
-2988482800,2988482807,ES
-2988482808,2988482811,PL
-2988482812,2988482815,FR
-2988482816,2988482819,DE
-2988482820,2988482823,FR
-2988482824,2988482831,PL
-2988482832,2988482835,IE
-2988482836,2988482839,GB
-2988482840,2988482843,FR
-2988482844,2988482847,NL
-2988482848,2988482863,DE
-2988482864,2988482871,ES
-2988482872,2988482875,PT
-2988482876,2988482879,CZ
-2988482880,2988482887,PL
-2988482888,2988482891,BE
-2988482892,2988482895,PL
-2988482896,2988482927,GB
-2988482928,2988482931,FR
-2988482932,2988482935,GB
-2988482936,2988482939,PL
-2988482940,2988482943,LT
-2988482944,2988482959,PL
-2988482960,2988482975,CZ
-2988482976,2988482979,PL
-2988482980,2988482983,ES
-2988482984,2988482987,DE
-2988482988,2988482991,NL
-2988482992,2988483031,FR
-2988483032,2988483035,DE
-2988483036,2988483039,LT
-2988483040,2988483079,FR
-2988483080,2988483087,PL
-2988483088,2988483099,FR
-2988483100,2988483103,PL
-2988483104,2988483107,IE
-2988483108,2988483111,FR
-2988483112,2988483115,ES
-2988483116,2988483119,PL
-2988483120,2988483127,ES
-2988483128,2988483135,PL
-2988483136,2988483151,FR
-2988483152,2988483155,PL
-2988483156,2988483159,NL
-2988483160,2988483167,ES
-2988483168,2988483199,GB
-2988483200,2988483231,FR
-2988483232,2988483235,IE
-2988483236,2988483263,PL
-2988483264,2988483267,FR
-2988483268,2988483271,NL
-2988483272,2988483279,DE
-2988483280,2988483283,ES
-2988483284,2988483295,DE
-2988483296,2988483299,FR
-2988483300,2988483303,NL
-2988483304,2988483311,FR
-2988483312,2988483315,GB
-2988483316,2988483319,NL
-2988483320,2988483327,FR
-2988483328,2988483359,ES
-2988483360,2988483367,BE
-2988483368,2988483371,PL
-2988483372,2988483375,PT
-2988483376,2988483379,GB
-2988483380,2988483383,PL
-2988483384,2988483427,FR
-2988483428,2988483431,GB
-2988483432,2988483435,IT
-2988483436,2988483447,FR
-2988483448,2988483455,DE
-2988483456,2988483519,BE
-2988483520,2988483583,CH
-2988483584,2988483587,PL
-2988483588,2988483591,FR
-2988483592,2988483595,ES
-2988483596,2988483599,FI
-2988483600,2988483603,GB
-2988483604,2988483607,PT
-2988483608,2988483615,NL
-2988483616,2988483619,GB
-2988483620,2988483623,PL
-2988483624,2988483631,IE
-2988483632,2988483639,FR
-2988483640,2988483647,GB
-2988483648,2988483651,CH
-2988483652,2988483655,FR
-2988483656,2988483667,IT
-2988483668,2988483671,PT
-2988483672,2988483675,GB
-2988483676,2988483679,FR
-2988483680,2988483695,PL
-2988483696,2988483711,FR
-2988483712,2988483727,PL
-2988483728,2988483735,FR
-2988483736,2988483739,DE
-2988483740,2988483743,PL
-2988483744,2988483759,DE
-2988483760,2988483767,GB
-2988483768,2988483771,FR
-2988483772,2988483775,DE
-2988483776,2988483871,PL
-2988483872,2988483879,DE
-2988483880,2988483887,ES
-2988483888,2988483895,GB
-2988483896,2988483903,DE
-2988483904,2988483935,PT
-2988483936,2988483951,ES
-2988483952,2988483963,IT
-2988483964,2988483967,FR
-2988483968,2988483983,IE
-2988483984,2988483987,DE
-2988483988,2988483991,FR
-2988483992,2988483995,GB
-2988483996,2988483999,PL
-2988484000,2988484003,DE
-2988484004,2988484007,GB
-2988484008,2988484019,FR
-2988484020,2988484023,ES
-2988484024,2988484031,BE
-2988484032,2988484039,IT
-2988484040,2988484047,NL
-2988484048,2988484051,ES
-2988484052,2988484055,GB
-2988484056,2988484059,PT
-2988484060,2988484063,PL
-2988484064,2988484079,FR
-2988484080,2988484083,GB
-2988484084,2988484091,IT
-2988484092,2988484095,PT
-2988484096,2988484111,DE
-2988484112,2988484127,FR
-2988484128,2988484131,PT
-2988484132,2988484135,PL
-2988484136,2988484163,FR
-2988484164,2988484167,GB
-2988484168,2988484175,ES
-2988484176,2988484187,FR
-2988484188,2988484191,PL
-2988484192,2988484207,DE
-2988484208,2988484223,FR
-2988484224,2988484239,ES
-2988484240,2988484243,PL
-2988484244,2988484287,FR
-2988484288,2988484351,PL
-2988484352,2988484383,GB
-2988484384,2988484391,CZ
-2988484392,2988484395,PT
-2988484396,2988484399,PL
-2988484400,2988484403,PT
-2988484404,2988484427,PL
-2988484428,2988484431,GB
-2988484432,2988484439,PL
-2988484440,2988484443,ES
-2988484444,2988484447,CH
-2988484448,2988484463,SN
-2988484464,2988484471,ES
-2988484472,2988484475,BE
-2988484476,2988484479,FR
-2988484480,2988484511,PL
-2988484512,2988484543,IT
-2988484544,2988484547,BE
-2988484548,2988484551,FR
-2988484552,2988484559,PL
-2988484560,2988484831,FR
+2988482580,2988483027,FR
+2988483028,2988483031,ES
+2988483032,2988484831,FR
2988484832,2988484847,GB
-2988484848,2988484863,FR
-2988484864,2988484879,NL
-2988484880,2988484883,GB
-2988484884,2988484887,DE
-2988484888,2988484891,FR
-2988484892,2988484895,GB
-2988484896,2988484943,FR
-2988484944,2988484955,PL
-2988484956,2988484967,FR
-2988484968,2988484971,PL
-2988484972,2988484991,FR
-2988484992,2988485007,LT
-2988485008,2988485023,PL
-2988485024,2988485039,FR
-2988485040,2988485055,PL
-2988485056,2988485071,FR
-2988485072,2988485087,IE
-2988485088,2988485103,DE
-2988485104,2988485119,PL
-2988485120,2988485135,FR
-2988485136,2988485151,BE
-2988485152,2988485167,IT
-2988485168,2988485183,FR
-2988485184,2988485247,BE
-2988485248,2988485255,IT
-2988485256,2988485263,NL
-2988485264,2988485267,DE
-2988485268,2988485279,FR
-2988485280,2988485327,IT
-2988485328,2988485335,FI
-2988485336,2988485343,PT
-2988485344,2988485351,BE
-2988485352,2988485355,GB
-2988485356,2988485359,PL
-2988485360,2988485439,FR
-2988485440,2988485455,PL
-2988485456,2988485471,ES
-2988485472,2988485479,FR
-2988485480,2988485487,IT
-2988485488,2988485503,FR
-2988485504,2988485519,GB
-2988485520,2988485559,FR
-2988485560,2988485563,NL
-2988485564,2988485567,ES
-2988485568,2988485583,GB
-2988485584,2988485587,FR
-2988485588,2988485591,BE
-2988485592,2988485599,FR
-2988485600,2988485607,PL
-2988485608,2988485631,FR
-2988485632,2988485663,ES
-2988485664,2988485671,PL
-2988485672,2988485675,DE
-2988485676,2988485679,GB
-2988485680,2988485683,FR
+2988484848,2988485683,FR
2988485684,2988485687,PL
-2988485688,2988485691,GB
-2988485692,2988485695,PL
-2988485696,2988485791,FR
-2988485792,2988485799,GB
-2988485800,2988485803,PT
-2988485804,2988485807,FR
-2988485808,2988485823,NL
-2988485824,2988485831,FR
-2988485832,2988485835,NL
-2988485836,2988485839,LT
-2988485840,2988485855,DE
-2988485856,2988485871,FR
-2988485872,2988485875,PL
-2988485876,2988485879,IE
-2988485880,2988485887,FR
-2988485888,2988485903,PL
-2988485904,2988485911,GB
-2988485912,2988485919,PT
-2988485920,2988485951,FR
-2988485952,2988485955,DE
-2988485956,2988485959,CZ
-2988485960,2988485967,FR
-2988485968,2988485983,IE
-2988485984,2988485999,FR
-2988486000,2988486015,PL
-2988486016,2988486031,GB
-2988486032,2988486047,PL
-2988486048,2988486063,GB
-2988486064,2988486067,FR
-2988486068,2988486071,ES
-2988486072,2988486075,FR
-2988486076,2988486079,ES
-2988486080,2988486083,BE
-2988486084,2988486095,FR
-2988486096,2988486099,GB
-2988486100,2988486103,FR
-2988486104,2988486135,PL
-2988486136,2988486139,FR
-2988486140,2988486143,GB
-2988486144,2988486147,FR
-2988486148,2988486151,BE
-2988486152,2988486155,PL
-2988486156,2988486159,DE
-2988486160,2988486175,IE
-2988486176,2988486179,FR
-2988486180,2988486183,PL
-2988486184,2988486191,IE
-2988486192,2988486195,PL
-2988486196,2988486207,PT
-2988486208,2988486215,PL
-2988486216,2988486219,ES
-2988486220,2988486223,FR
-2988486224,2988486231,BE
-2988486232,2988486235,PL
-2988486236,2988486239,ES
-2988486240,2988486287,PL
-2988486288,2988486291,FR
-2988486292,2988486299,GB
-2988486300,2988486303,NL
-2988486304,2988486311,PL
-2988486312,2988486319,CH
-2988486320,2988486323,IT
-2988486324,2988486327,PT
-2988486328,2988486343,ES
-2988486344,2988486347,FR
-2988486348,2988486367,ES
-2988486368,2988486375,FR
-2988486376,2988486379,DE
-2988486380,2988486403,FR
-2988486404,2988486407,BE
-2988486408,2988486423,FR
-2988486424,2988486431,PT
-2988486432,2988486447,FR
-2988486448,2988486463,ES
-2988486464,2988486471,IT
-2988486472,2988486475,ES
-2988486476,2988486479,PL
-2988486480,2988486495,FR
-2988486496,2988486503,DE
-2988486504,2988486511,PL
-2988486512,2988486515,DE
-2988486516,2988486527,PL
-2988486528,2988486575,FR
-2988486576,2988486579,PL
-2988486580,2988486583,GB
-2988486584,2988486595,FR
-2988486596,2988486599,GB
-2988486600,2988486603,DE
-2988486604,2988486607,FR
-2988486608,2988486615,FI
-2988486616,2988486623,ES
-2988486624,2988486643,FR
-2988486644,2988486647,GB
-2988486648,2988486651,ES
-2988486652,2988486655,PL
-2988486656,2988486671,FR
-2988486672,2988486675,DE
-2988486676,2988486679,FR
-2988486680,2988486687,ES
-2988486688,2988486691,FR
-2988486692,2988486695,IT
-2988486696,2988486699,ES
-2988486700,2988486707,PL
-2988486708,2988486711,IT
-2988486712,2988486719,IE
-2988486720,2988486735,FR
-2988486736,2988486743,ES
-2988486744,2988486747,FR
-2988486748,2988486751,GB
-2988486752,2988486759,FR
-2988486760,2988486763,DE
-2988486764,2988486767,FR
-2988486768,2988486775,GB
-2988486776,2988486783,FR
-2988486784,2988486787,DE
-2988486788,2988486791,FR
-2988486792,2988486795,ES
-2988486796,2988486799,PL
-2988486800,2988486807,FR
-2988486808,2988486811,DE
-2988486812,2988486823,FR
-2988486824,2988486831,IT
-2988486832,2988486847,PL
-2988486848,2988486879,FR
-2988486880,2988486883,PL
-2988486884,2988486887,FR
-2988486888,2988486891,PT
-2988486892,2988486895,GB
-2988486896,2988486903,PT
-2988486904,2988486907,DE
-2988486908,2988486911,LT
-2988486912,2988487039,FR
-2988487040,2988487043,PL
-2988487044,2988487047,PT
-2988487048,2988487055,NL
-2988487056,2988487071,FR
+2988485688,2988487071,FR
2988487072,2988487075,ES
-2988487076,2988487079,PL
-2988487080,2988487087,FR
-2988487088,2988487099,PL
-2988487100,2988487103,GB
-2988487104,2988487135,FR
-2988487136,2988487167,NL
-2988487168,2988487679,FR
-2988487680,2988487935,DE
-2988487936,2988487939,BE
-2988487940,2988487947,FR
-2988487948,2988487951,PL
-2988487952,2988487967,FR
-2988487968,2988487975,PL
-2988487976,2988487979,FR
-2988487980,2988487983,ES
-2988487984,2988488011,FR
-2988488012,2988488015,LT
-2988488016,2988488023,FR
-2988488024,2988488031,GB
-2988488032,2988488047,IE
-2988488048,2988488051,IT
-2988488052,2988488095,FR
-2988488096,2988488099,DE
-2988488100,2988488103,PT
-2988488104,2988488111,FR
-2988488112,2988488127,PL
-2988488128,2988488151,FR
-2988488152,2988488159,GB
-2988488160,2988488175,FR
-2988488176,2988488179,GB
-2988488180,2988488191,DE
-2988488192,2988488479,FR
-2988488480,2988488487,PT
-2988488488,2988488491,FR
-2988488492,2988488495,ES
-2988488496,2988488543,FR
-2988488544,2988488555,GB
-2988488556,2988488563,ES
-2988488564,2988488567,FR
-2988488568,2988488571,ES
-2988488572,2988488575,PT
-2988488576,2988488607,FR
-2988488608,2988488639,DE
-2988488640,2988488647,ES
-2988488648,2988488655,IT
-2988488656,2988488663,PL
-2988488664,2988488959,FR
-2988488960,2988488963,NL
-2988488964,2988488967,FR
-2988488968,2988488971,DE
-2988488972,2988488975,IT
-2988488976,2988488983,ES
-2988488984,2988488987,FR
-2988488988,2988488991,NL
-2988488992,2988489023,ES
-2988489024,2988489055,FR
-2988489056,2988489071,IE
-2988489072,2988489095,FR
-2988489096,2988489103,GB
-2988489104,2988489119,FI
-2988489120,2988489123,DE
-2988489124,2988489127,IE
-2988489128,2988489131,IT
-2988489132,2988489167,FR
-2988489168,2988489175,PT
-2988489176,2988489179,PL
-2988489180,2988489183,GB
-2988489184,2988489215,FR
-2988489216,2988489247,IE
-2988489248,2988489251,FR
-2988489252,2988489259,NL
-2988489260,2988489263,FR
-2988489264,2988489279,IT
-2988489280,2988489283,FI
-2988489284,2988489311,FR
-2988489312,2988489327,PL
-2988489328,2988489331,NL
-2988489332,2988489335,PL
-2988489336,2988489339,DE
-2988489340,2988489343,GB
-2988489344,2988489347,FR
-2988489348,2988489351,PT
-2988489352,2988489355,FR
-2988489356,2988489359,PT
-2988489360,2988489363,FI
-2988489364,2988489367,FR
-2988489368,2988489371,GB
-2988489372,2988489375,FR
-2988489376,2988489379,ES
-2988489380,2988489383,GB
-2988489384,2988489391,FR
-2988489392,2988489399,NL
-2988489400,2988489403,PL
-2988489404,2988489407,IT
-2988489408,2988489439,PT
-2988489440,2988489443,IT
-2988489444,2988489447,GB
-2988489448,2988489455,PL
-2988489456,2988489471,FR
-2988489472,2988489475,ES
-2988489476,2988489479,GB
-2988489480,2988489483,PL
-2988489484,2988489487,GB
-2988489488,2988489503,FR
-2988489504,2988489519,GB
-2988489520,2988489527,ES
-2988489528,2988489539,NL
-2988489540,2988489543,CH
-2988489544,2988489663,FR
-2988489664,2988489667,DE
-2988489668,2988489671,GB
-2988489672,2988489675,ES
-2988489676,2988489679,IE
-2988489680,2988489695,FR
-2988489696,2988489711,FI
-2988489712,2988489719,FR
-2988489720,2988489723,IT
-2988489724,2988489727,ES
-2988489728,2988489747,FR
-2988489748,2988489751,GB
-2988489752,2988489755,ES
-2988489756,2988489759,FR
-2988489760,2988489791,NL
-2988489792,2988489855,PL
-2988489856,2988489887,GB
-2988489888,2988489903,FR
-2988489904,2988489919,IE
-2988489920,2988489935,FR
-2988489936,2988489943,ES
-2988489944,2988489947,FR
-2988489948,2988489951,GB
-2988489952,2988489967,FR
-2988489968,2988489983,GB
-2988489984,2988490047,FR
-2988490048,2988490051,ES
-2988490052,2988490055,PL
-2988490056,2988490059,LT
-2988490060,2988490063,FR
-2988490064,2988490079,GB
-2988490080,2988490095,FR
-2988490096,2988490103,PT
-2988490104,2988490107,ES
-2988490108,2988490111,FR
-2988490112,2988490143,PL
-2988490144,2988490175,FR
-2988490176,2988490179,IT
-2988490180,2988490183,PL
-2988490184,2988490191,ES
-2988490192,2988490195,GB
-2988490196,2988490223,FR
-2988490224,2988490227,DE
-2988490228,2988490231,GB
-2988490232,2988490235,ES
-2988490236,2988490239,PL
-2988490240,2988490247,FR
-2988490248,2988490251,ES
-2988490252,2988490255,GB
-2988490256,2988490271,PL
-2988490272,2988490287,ES
-2988490288,2988490295,FR
-2988490296,2988490303,DE
-2988490304,2988490319,ES
-2988490320,2988490351,FR
-2988490352,2988490355,IE
-2988490356,2988490367,DE
-2988490368,2988490371,ES
-2988490372,2988490375,NL
-2988490376,2988490379,FR
-2988490380,2988490383,GB
-2988490384,2988490399,FR
-2988490400,2988490407,GB
-2988490408,2988490411,FR
-2988490412,2988490415,ES
-2988490416,2988490419,FR
-2988490420,2988490423,CH
-2988490424,2988490463,FR
-2988490464,2988490623,PL
-2988490624,2988490751,ES
-2988490752,2988491775,FR
-2988491776,2988492031,TN
-2988492032,2988492799,FR
+2988487076,2988487095,FR
+2988487096,2988487099,ES
+2988487100,2988489479,FR
+2988489480,2988489483,DE
+2988489484,2988489675,FR
+2988489676,2988489679,ES
+2988489680,2988490179,FR
+2988490180,2988490183,ES
+2988490184,2988490686,FR
+2988490687,2988490687,BE
+2988490688,2988492799,FR
2988492800,2988494847,PL
-2988494848,2988498975,FR
-2988498976,2988498983,ES
-2988498984,2988498991,FR
-2988498992,2988499007,PL
-2988499008,2988499031,FR
-2988499032,2988499051,DE
-2988499052,2988499063,FR
-2988499064,2988499067,DE
-2988499068,2988499103,FR
-2988499104,2988499119,IE
-2988499120,2988499135,FR
-2988499136,2988499139,DE
-2988499140,2988499143,FR
-2988499144,2988499151,DE
-2988499152,2988499167,FR
-2988499168,2988499199,ES
-2988499200,2988499343,FR
-2988499344,2988499347,PL
-2988499348,2988499351,GB
-2988499352,2988499359,IE
-2988499360,2988499367,PL
-2988499368,2988499375,FR
-2988499376,2988499379,GB
-2988499380,2988499383,PL
-2988499384,2988499387,BE
-2988499388,2988499407,FR
-2988499408,2988499415,PL
-2988499416,2988499423,DE
-2988499424,2988499455,PL
-2988499456,2988499463,NL
-2988499464,2988499471,DE
-2988499472,2988499551,FR
-2988499552,2988499567,PL
-2988499568,2988499575,IE
-2988499576,2988499579,IT
-2988499580,2988499583,CH
-2988499584,2988499599,PL
-2988499600,2988499615,FR
-2988499616,2988499623,DE
-2988499624,2988499631,ES
-2988499632,2988499635,CH
-2988499636,2988499639,GB
-2988499640,2988499655,FR
-2988499656,2988499659,IT
-2988499660,2988499663,LT
-2988499664,2988499671,FR
-2988499672,2988499675,GB
-2988499676,2988499679,FR
-2988499680,2988499695,BE
-2988499696,2988499699,PL
-2988499700,2988499703,GB
-2988499704,2988499711,DE
-2988499712,2988499731,GB
-2988499732,2988499735,FR
-2988499736,2988499743,NL
-2988499744,2988499747,IE
-2988499748,2988499751,LT
-2988499752,2988499755,PL
-2988499756,2988499759,ES
-2988499760,2988499763,CH
-2988499764,2988499775,FR
-2988499776,2988499791,IT
-2988499792,2988499795,GB
-2988499796,2988499803,IT
-2988499804,2988499807,DE
-2988499808,2988499823,FR
-2988499824,2988499831,PL
-2988499832,2988499839,GB
-2988499840,2988499847,BE
-2988499848,2988499851,DE
-2988499852,2988499855,PL
-2988499856,2988499871,FR
-2988499872,2988499903,IE
-2988499904,2988499907,FR
-2988499908,2988499911,BE
-2988499912,2988499915,FR
-2988499916,2988499919,LT
-2988499920,2988499923,NL
-2988499924,2988499927,BE
-2988499928,2988499935,FR
-2988499936,2988499967,IE
-2988499968,2988500223,FR
-2988500224,2988500255,ES
-2988500256,2988500271,IT
-2988500272,2988500287,BE
-2988500288,2988500303,PL
-2988500304,2988500307,FR
-2988500308,2988500311,GB
-2988500312,2988500315,ES
-2988500316,2988500319,DE
-2988500320,2988500335,FR
-2988500336,2988500339,DE
-2988500340,2988500347,IE
-2988500348,2988500351,ES
-2988500352,2988500367,DE
-2988500368,2988500371,FR
-2988500372,2988500375,CZ
-2988500376,2988500383,PT
-2988500384,2988500399,PL
-2988500400,2988500415,DE
+2988494848,2988499729,FR
+2988499730,2988499730,GB
+2988499731,2988499736,FR
+2988499737,2988499737,NL
+2988499738,2988500415,FR
2988500416,2988500447,CZ
-2988500448,2988500479,ES
-2988500480,2988500495,DE
-2988500496,2988500499,FR
-2988500500,2988500503,DE
-2988500504,2988500511,PL
-2988500512,2988500519,FR
-2988500520,2988500523,ES
-2988500524,2988500527,FR
-2988500528,2988500543,BE
-2988500544,2988500623,PL
-2988500624,2988500639,FR
-2988500640,2988500671,GB
-2988500672,2988500679,IT
-2988500680,2988500687,PL
-2988500688,2988500703,NL
-2988500704,2988500711,PL
-2988500712,2988500767,FR
-2988500768,2988500775,NL
-2988500776,2988500783,GB
-2988500784,2988500787,PL
-2988500788,2988500791,ES
-2988500792,2988500799,IT
-2988500800,2988500815,ES
-2988500816,2988500831,FR
-2988500832,2988500847,ES
-2988500848,2988500851,IE
-2988500852,2988500855,PL
-2988500856,2988500867,FR
-2988500868,2988500871,DE
-2988500872,2988500879,ES
-2988500880,2988500887,BE
-2988500888,2988500903,FR
-2988500904,2988500907,PL
-2988500908,2988500911,PT
-2988500912,2988500919,FR
-2988500920,2988500927,PL
-2988500928,2988500935,FR
-2988500936,2988500959,IT
-2988500960,2988500975,IE
-2988500976,2988500979,PL
-2988500980,2988500987,DE
-2988500988,2988500991,CH
-2988500992,2988501023,IE
-2988501024,2988501119,FR
-2988501120,2988501123,PL
-2988501124,2988501131,FR
-2988501132,2988501135,ES
-2988501136,2988501143,FR
-2988501144,2988501147,GB
-2988501148,2988501183,FR
-2988501184,2988501215,BE
-2988501216,2988501223,FR
-2988501224,2988501227,CZ
-2988501228,2988501327,FR
-2988501328,2988501335,ES
-2988501336,2988501343,PT
-2988501344,2988501359,FR
-2988501360,2988501367,CH
-2988501368,2988501375,ES
-2988501376,2988501383,FR
-2988501384,2988501391,PL
-2988501392,2988501407,FR
-2988501408,2988501415,PL
-2988501416,2988501423,FR
-2988501424,2988501439,NL
-2988501440,2988501471,BE
-2988501472,2988501475,PT
-2988501476,2988501479,BE
-2988501480,2988501487,DE
-2988501488,2988501567,FR
-2988501568,2988501631,PL
-2988501632,2988501663,DE
-2988501664,2988501679,CH
-2988501680,2988501683,PL
-2988501684,2988501687,GB
-2988501688,2988501691,FR
-2988501692,2988501695,GB
-2988501696,2988501727,FI
-2988501728,2988501759,PL
-2988501760,2988502039,FR
-2988502040,2988502047,CZ
-2988502048,2988502051,FR
+2988500448,2988500855,FR
+2988500856,2988500859,ES
+2988500860,2988502051,FR
2988502052,2988502055,PL
-2988502056,2988502059,GB
-2988502060,2988502063,IT
-2988502064,2988502071,FR
-2988502072,2988502075,PL
-2988502076,2988502079,ES
-2988502080,2988502095,IE
-2988502096,2988502099,FI
-2988502100,2988502103,CZ
-2988502104,2988502107,PL
-2988502108,2988502111,IE
-2988502112,2988502127,FR
-2988502128,2988502143,PL
-2988502144,2988502207,FR
-2988502208,2988502223,GB
-2988502224,2988502239,IE
-2988502240,2988502255,FR
-2988502256,2988502263,DE
-2988502264,2988502267,ES
-2988502268,2988502271,DE
-2988502272,2988502399,FR
-2988502400,2988502407,NL
-2988502408,2988502411,FR
-2988502412,2988502415,PL
-2988502416,2988502419,GB
-2988502420,2988502423,IE
-2988502424,2988502431,FI
-2988502432,2988502455,FR
-2988502456,2988502459,PL
-2988502460,2988502463,PT
-2988502464,2988502479,IE
-2988502480,2988502487,PL
-2988502488,2988502491,FR
-2988502492,2988502495,PL
-2988502496,2988502511,ES
-2988502512,2988502519,FR
-2988502520,2988502523,ES
-2988502524,2988502527,PT
-2988502528,2988502535,FR
-2988502536,2988502543,PL
-2988502544,2988502559,FR
-2988502560,2988502591,PL
-2988502592,2988502599,FR
-2988502600,2988502603,DE
-2988502604,2988502607,PL
-2988502608,2988502631,FR
-2988502632,2988502639,IE
-2988502640,2988502655,FR
+2988502056,2988502479,FR
+2988502480,2988502483,ES
+2988502484,2988502655,FR
2988502656,2988502719,DE
-2988502720,2988502723,ES
-2988502724,2988502727,BE
-2988502728,2988502731,FR
-2988502732,2988502735,PL
-2988502736,2988502743,FR
-2988502744,2988502751,PL
-2988502752,2988502783,ES
-2988502784,2988502795,FR
-2988502796,2988502799,PL
-2988502800,2988502811,FR
-2988502812,2988502815,PL
-2988502816,2988502823,FR
-2988502824,2988502831,ES
-2988502832,2988502863,FR
-2988502864,2988502867,IE
-2988502868,2988502871,LT
-2988502872,2988502875,PL
-2988502876,2988502879,ES
-2988502880,2988502883,IT
-2988502884,2988502887,CZ
-2988502888,2988502891,NL
-2988502892,2988502895,PL
-2988502896,2988502911,FR
-2988502912,2988502915,DE
-2988502916,2988502919,FR
-2988502920,2988502927,PL
-2988502928,2988502959,FR
-2988502960,2988502975,DE
-2988502976,2988502983,PL
-2988502984,2988502991,ES
-2988502992,2988503007,DE
-2988503008,2988503011,FR
-2988503012,2988503015,DE
-2988503016,2988503019,PL
-2988503020,2988503031,FR
-2988503032,2988503035,ES
-2988503036,2988503039,GB
-2988503040,2988503295,FR
-2988503296,2988503343,IE
-2988503344,2988503351,FR
-2988503352,2988503359,ES
-2988503360,2988503375,FR
-2988503376,2988503383,PT
-2988503384,2988503391,PL
-2988503392,2988503395,FR
-2988503396,2988503399,BE
-2988503400,2988503415,FR
-2988503416,2988503423,PL
-2988503424,2988503455,FR
-2988503456,2988503463,BE
-2988503464,2988503471,FR
-2988503472,2988503487,ES
-2988503488,2988503495,IT
-2988503496,2988503499,PL
-2988503500,2988503519,FR
-2988503520,2988503535,NL
-2988503536,2988503539,ES
-2988503540,2988503547,FR
-2988503548,2988503551,PL
-2988503552,2988503871,FR
-2988503872,2988503903,DE
-2988503904,2988503919,FR
-2988503920,2988503927,ES
-2988503928,2988503935,NL
-2988503936,2988503939,PT
-2988503940,2988503943,CH
-2988503944,2988503947,PL
-2988503948,2988503951,IE
-2988503952,2988503991,FR
-2988503992,2988504007,PL
-2988504008,2988504015,BE
-2988504016,2988504019,FR
-2988504020,2988504023,ES
-2988504024,2988504031,FR
-2988504032,2988504063,ES
-2988504064,2988504127,IE
-2988504128,2988504143,DE
-2988504144,2988504159,FR
-2988504160,2988504191,PL
-2988504192,2988504223,FR
-2988504224,2988504227,PT
-2988504228,2988504231,FR
-2988504232,2988504239,PL
-2988504240,2988504255,GB
-2988504256,2988504287,ES
-2988504288,2988504303,GB
-2988504304,2988504307,PL
-2988504308,2988504315,FR
-2988504316,2988504319,DE
-2988504320,2988504323,FR
-2988504324,2988504327,NL
-2988504328,2988504335,DE
-2988504336,2988504351,FR
-2988504352,2988504355,GB
-2988504356,2988504359,DE
-2988504360,2988504363,GB
-2988504364,2988504367,FI
-2988504368,2988504371,IE
+2988502720,2988502881,FR
+2988502882,2988502882,IT
+2988502883,2988504371,FR
2988504372,2988504375,PL
-2988504376,2988504415,FR
-2988504416,2988504419,PL
-2988504420,2988504423,DE
-2988504424,2988504427,ES
-2988504428,2988504431,PT
-2988504432,2988504435,FR
-2988504436,2988504439,ES
-2988504440,2988504443,FR
-2988504444,2988504447,GB
-2988504448,2988504451,BE
-2988504452,2988504455,ES
-2988504456,2988504459,PL
-2988504460,2988504463,GB
-2988504464,2988504467,DE
-2988504468,2988504471,ES
-2988504472,2988504479,PL
-2988504480,2988504543,FR
-2988504544,2988504559,PL
-2988504560,2988504563,FI
-2988504564,2988504567,PL
-2988504568,2988504571,CH
-2988504572,2988504575,PL
-2988504576,2988504591,FR
-2988504592,2988504603,PL
-2988504604,2988504639,FR
-2988504640,2988504647,DE
-2988504648,2988504655,IT
-2988504656,2988504675,FR
-2988504676,2988504679,PL
-2988504680,2988504683,FR
-2988504684,2988504703,PL
-2988504704,2988504735,FR
-2988504736,2988504743,PL
-2988504744,2988504751,ES
-2988504752,2988504755,PL
-2988504756,2988504759,CZ
-2988504760,2988504763,CH
-2988504764,2988504767,FR
-2988504768,2988504815,ES
-2988504816,2988504819,BE
-2988504820,2988504863,FR
-2988504864,2988504879,PL
-2988504880,2988504967,FR
-2988504968,2988504975,BE
-2988504976,2988504983,FR
-2988504984,2988504987,ES
-2988504988,2988504991,DE
-2988504992,2988505023,CZ
-2988505024,2988505087,DE
-2988505088,2988505151,NL
-2988505152,2988505167,GB
-2988505168,2988505183,FR
-2988505184,2988505195,PL
-2988505196,2988505199,DE
-2988505200,2988505207,PL
-2988505208,2988505211,ES
-2988505212,2988505215,PT
-2988505216,2988505247,FR
-2988505248,2988505255,PL
-2988505256,2988505263,FR
-2988505264,2988505267,IT
-2988505268,2988505271,FR
-2988505272,2988505275,CZ
-2988505276,2988505311,BE
-2988505312,2988505315,DE
-2988505316,2988505319,ES
-2988505320,2988505323,PL
-2988505324,2988505327,ES
-2988505328,2988505339,PL
-2988505340,2988505343,CH
-2988505344,2988505375,IT
-2988505376,2988505391,FR
-2988505392,2988505399,PL
-2988505400,2988505403,ES
-2988505404,2988505407,GB
-2988505408,2988505439,FR
-2988505440,2988505455,PL
-2988505456,2988505463,CH
-2988505464,2988505471,IT
-2988505472,2988505475,ES
-2988505476,2988505479,NL
-2988505480,2988505487,IE
-2988505488,2988505503,PL
-2988505504,2988505535,FR
-2988505536,2988505567,ES
-2988505568,2988505583,IE
-2988505584,2988505599,FR
-2988505600,2988505603,DE
-2988505604,2988505607,ES
-2988505608,2988505615,FR
-2988505616,2988505631,ES
-2988505632,2988505663,FR
-2988505664,2988505695,PL
-2988505696,2988505703,FR
-2988505704,2988505711,PL
-2988505712,2988505715,DE
-2988505716,2988505719,IE
-2988505720,2988505723,FR
-2988505724,2988505727,GB
-2988505728,2988505735,PL
-2988505736,2988505739,DE
-2988505740,2988505743,ES
-2988505744,2988505747,PT
-2988505748,2988505751,DE
-2988505752,2988505755,CH
-2988505756,2988505759,FR
-2988505760,2988505775,BE
-2988505776,2988505791,DE
-2988505792,2988505807,FR
-2988505808,2988505811,PL
-2988505812,2988505815,DE
-2988505816,2988505819,GB
-2988505820,2988505823,PL
-2988505824,2988505839,FR
-2988505840,2988505843,CH
-2988505844,2988505847,FR
-2988505848,2988505851,PL
-2988505852,2988505855,FR
-2988505856,2988505887,PL
-2988505888,2988505919,IE
-2988505920,2988505935,GB
-2988505936,2988505943,ES
-2988505944,2988505947,PL
-2988505948,2988505951,FR
-2988505952,2988505967,GB
-2988505968,2988505971,PL
-2988505972,2988506127,FR
-2988506128,2988506135,NL
-2988506136,2988506143,DE
-2988506144,2988506151,GB
-2988506152,2988506159,PL
-2988506160,2988506191,FR
-2988506192,2988506207,GB
-2988506208,2988506239,ES
-2988506240,2988506255,BE
-2988506256,2988506271,CH
-2988506272,2988506303,FR
-2988506304,2988506335,DE
-2988506336,2988506367,FR
-2988506368,2988506375,IE
-2988506376,2988506379,IT
-2988506380,2988506383,DE
-2988506384,2988506399,IT
-2988506400,2988506415,FR
-2988506416,2988506431,BE
-2988506432,2988506447,IT
-2988506448,2988506451,ES
-2988506452,2988506455,PT
-2988506456,2988506459,BE
-2988506460,2988506463,PL
-2988506464,2988506495,FR
-2988506496,2988506499,CH
-2988506500,2988506503,IT
-2988506504,2988506507,DE
-2988506508,2988506511,ES
-2988506512,2988506515,GB
-2988506516,2988506519,FR
-2988506520,2988506523,PL
-2988506524,2988506527,IE
-2988506528,2988506543,FR
-2988506544,2988506551,DE
-2988506552,2988506559,FR
-2988506560,2988506563,IT
-2988506564,2988506567,GB
-2988506568,2988506571,PL
-2988506572,2988506575,CH
-2988506576,2988506591,FR
-2988506592,2988506623,PT
-2988506624,2988506639,CH
-2988506640,2988506647,FR
-2988506648,2988506651,CH
-2988506652,2988506655,PL
-2988506656,2988506667,FR
-2988506668,2988506687,GB
-2988506688,2988506695,FR
-2988506696,2988506703,FI
-2988506704,2988506751,FR
-2988506752,2988506763,ES
-2988506764,2988506767,PL
-2988506768,2988506771,PT
-2988506772,2988506783,ES
-2988506784,2988506819,PL
-2988506820,2988506827,FR
-2988506828,2988506831,IE
-2988506832,2988506863,FR
-2988506864,2988506871,DE
-2988506872,2988506875,ES
-2988506876,2988506887,FR
-2988506888,2988506891,ES
-2988506892,2988506895,LT
-2988506896,2988506911,ES
-2988506912,2988506975,FR
-2988506976,2988507007,DE
-2988507008,2988507135,FR
-2988507136,2988507143,NL
-2988507144,2988507147,PL
-2988507148,2988507155,IT
-2988507156,2988507159,PL
-2988507160,2988507163,CH
-2988507164,2988507167,FR
-2988507168,2988507183,DE
-2988507184,2988507199,FR
-2988507200,2988507203,GB
-2988507204,2988507207,DE
-2988507208,2988507211,ES
-2988507212,2988507215,PL
-2988507216,2988507223,IT
-2988507224,2988507231,PL
-2988507232,2988507239,ES
-2988507240,2988507243,FR
-2988507244,2988507247,GB
-2988507248,2988507263,FR
-2988507264,2988507279,ES
-2988507280,2988507283,FR
-2988507284,2988507287,ES
-2988507288,2988507295,GB
-2988507296,2988507327,FR
-2988507328,2988507335,DE
-2988507336,2988507339,ES
-2988507340,2988507343,GB
-2988507344,2988507391,FR
-2988507392,2988507423,DE
-2988507424,2988507431,PL
-2988507432,2988507439,DE
-2988507440,2988507443,IT
-2988507444,2988507447,PL
-2988507448,2988507451,IT
-2988507452,2988507455,PL
-2988507456,2988507459,GB
-2988507460,2988507463,BE
-2988507464,2988507467,CH
-2988507468,2988507471,ES
-2988507472,2988507475,FR
-2988507476,2988507479,GB
-2988507480,2988507483,IE
-2988507484,2988507487,IT
-2988507488,2988507503,FR
-2988507504,2988507519,IT
-2988507520,2988507523,PL
-2988507524,2988507531,FR
-2988507532,2988507535,DE
-2988507536,2988507539,FR
-2988507540,2988507543,PL
-2988507544,2988507547,FR
-2988507548,2988507551,PL
-2988507552,2988507560,GB
-2988507561,2988507561,FR
-2988507562,2988507567,GB
-2988507568,2988507583,IE
-2988507584,2988507591,ES
-2988507592,2988507595,FR
-2988507596,2988507599,DE
-2988507600,2988507603,ES
-2988507604,2988507607,FR
-2988507608,2988507611,ES
-2988507612,2988507615,DE
-2988507616,2988507623,IT
-2988507624,2988507627,GB
-2988507628,2988507631,PT
-2988507632,2988507639,IT
-2988507640,2988507643,FR
-2988507644,2988507647,IT
-2988507648,2988507711,FR
-2988507712,2988507715,GB
-2988507716,2988507719,FR
-2988507720,2988507727,CH
-2988507728,2988507731,FR
-2988507732,2988507735,GB
-2988507736,2988507739,ES
-2988507740,2988507743,IE
-2988507744,2988507759,NL
-2988507760,2988507767,FR
-2988507768,2988507839,PL
-2988507840,2988507855,FR
-2988507856,2988507859,BE
-2988507860,2988507863,PL
-2988507864,2988507875,ES
-2988507876,2988507879,FR
-2988507880,2988507883,ES
-2988507884,2988507887,GB
-2988507888,2988507903,ES
-2988507904,2988507919,PL
-2988507920,2988507927,DE
-2988507928,2988507935,BE
-2988507936,2988507951,FR
-2988507952,2988507955,DE
-2988507956,2988507959,BE
-2988507960,2988507967,PL
-2988507968,2988507971,FR
-2988507972,2988507975,PL
-2988507976,2988507979,FR
-2988507980,2988507983,DE
-2988507984,2988507991,PL
-2988507992,2988507999,FR
-2988508000,2988508031,NL
-2988508032,2988508035,PL
-2988508036,2988508047,FR
-2988508048,2988508055,GB
-2988508056,2988508059,FR
-2988508060,2988508063,DE
-2988508064,2988508067,ES
-2988508068,2988508071,PL
-2988508072,2988508079,FR
-2988508080,2988508095,ES
-2988508096,2988508103,FR
-2988508104,2988508111,IT
-2988508112,2988508127,BE
-2988508128,2988508135,PL
-2988508136,2988508143,GB
-2988508144,2988508151,FR
-2988508152,2988508159,ES
-2988508160,2988508175,FR
-2988508176,2988508191,IE
-2988508192,2988508207,PL
-2988508208,2988508211,FR
-2988508212,2988508215,DE
-2988508216,2988508219,FR
-2988508220,2988508223,DE
-2988508224,2988508255,FR
-2988508256,2988508259,BE
-2988508260,2988508263,FR
-2988508264,2988508267,ES
-2988508268,2988508287,FR
-2988508288,2988508303,PL
-2988508304,2988508307,PT
-2988508308,2988508315,FR
-2988508316,2988508319,ES
-2988508320,2988508343,FR
-2988508344,2988508351,GB
-2988508352,2988508367,ES
-2988508368,2988508391,FR
-2988508392,2988508399,IT
-2988508400,2988508415,GB
-2988508416,2988508423,PL
-2988508424,2988508431,FR
-2988508432,2988508435,CH
-2988508436,2988508439,DE
-2988508440,2988508443,GB
-2988508444,2988508455,PL
-2988508456,2988508479,FR
-2988508480,2988508543,PT
-2988508544,2988508607,GB
-2988508608,2988508671,IT
-2988508672,2988508679,DE
-2988508680,2988508683,LT
-2988508684,2988508687,ES
-2988508688,2988508703,PL
-2988508704,2988508711,FR
-2988508712,2988508719,DE
-2988508720,2988508723,FR
-2988508724,2988508735,GB
-2988508736,2988508767,FR
-2988508768,2988508771,IT
-2988508772,2988508779,FR
-2988508780,2988508783,GB
-2988508784,2988508791,PT
-2988508792,2988508795,FR
-2988508796,2988508799,PL
-2988508800,2988508847,FR
-2988508848,2988508855,GB
-2988508856,2988508879,FR
-2988508880,2988508895,DE
-2988508896,2988508911,FR
-2988508912,2988508919,BE
-2988508920,2988508927,FR
-2988508928,2988508931,NL
-2988508932,2988508935,GB
-2988508936,2988508939,DE
-2988508940,2988508943,PL
-2988508944,2988508951,FR
-2988508952,2988508959,ES
-2988508960,2988508987,FR
-2988508988,2988508991,PL
-2988508992,2988509007,IT
-2988509008,2988509011,PL
-2988509012,2988509015,GB
-2988509016,2988509023,CH
-2988509024,2988509119,FR
-2988509120,2988509151,IT
-2988509152,2988509183,PL
-2988509184,2988509279,FR
-2988509280,2988509283,PL
-2988509284,2988509287,PT
-2988509288,2988509291,BE
-2988509292,2988509295,IE
-2988509296,2988509343,FR
-2988509344,2988509351,BE
-2988509352,2988509355,ES
-2988509356,2988509359,FR
-2988509360,2988509363,CH
-2988509364,2988509367,IT
-2988509368,2988509371,CH
-2988509372,2988509375,PL
-2988509376,2988509403,FR
-2988509404,2988509407,FI
-2988509408,2988509415,PL
-2988509416,2988509443,FR
-2988509444,2988509447,FI
-2988509448,2988509451,GB
-2988509452,2988509459,PL
-2988509460,2988509467,GB
-2988509468,2988509471,NL
-2988509472,2988509491,FR
-2988509492,2988509495,IE
-2988509496,2988509503,FR
-2988509504,2988509519,PL
-2988509520,2988509535,FR
-2988509536,2988509543,ES
-2988509544,2988509551,PL
-2988509552,2988509575,FR
-2988509576,2988509583,PL
-2988509584,2988509615,FR
-2988509616,2988509619,PL
-2988509620,2988509623,DE
-2988509624,2988509627,CZ
-2988509628,2988509631,PT
-2988509632,2988509711,FR
-2988509712,2988509715,IE
-2988509716,2988509719,IT
-2988509720,2988509723,ES
-2988509724,2988509727,PL
-2988509728,2988509735,IE
-2988509736,2988509747,FR
+2988504376,2988505391,FR
+2988505392,2988505395,ES
+2988505396,2988507163,FR
+2988507164,2988507167,ES
+2988507168,2988507975,FR
+2988507976,2988507979,IT
+2988507980,2988509511,FR
+2988509512,2988509515,PL
+2988509516,2988509747,FR
2988509748,2988509751,LT
-2988509752,2988509759,DE
-2988509760,2988509775,PL
-2988509776,2988509779,ES
-2988509780,2988509783,GB
-2988509784,2988509787,FR
-2988509788,2988509791,BE
-2988509792,2988509823,NL
-2988509824,2988509839,FR
-2988509840,2988509855,ES
-2988509856,2988509859,FR
-2988509860,2988509863,DE
-2988509864,2988509871,FR
-2988509872,2988509875,DE
-2988509876,2988509879,PT
-2988509880,2988509883,PL
-2988509884,2988509887,PT
-2988509888,2988509903,FR
-2988509904,2988509907,PL
-2988509908,2988509919,IT
-2988509920,2988509927,FR
-2988509928,2988509935,PL
-2988509936,2988509939,DE
-2988509940,2988509943,IT
-2988509944,2988509951,BE
-2988509952,2988509955,IT
-2988509956,2988509963,PL
-2988509964,2988509967,GB
-2988509968,2988509983,ES
-2988509984,2988509987,DE
-2988509988,2988509991,CZ
-2988509992,2988509995,FR
-2988509996,2988509999,DE
-2988510000,2988510015,GB
-2988510016,2988510031,ES
-2988510032,2988510043,FR
-2988510044,2988510079,PL
-2988510080,2988510087,ES
-2988510088,2988510091,PL
-2988510092,2988510099,FR
-2988510100,2988510103,GB
-2988510104,2988510111,BE
-2988510112,2988510143,CZ
-2988510144,2988510175,NL
-2988510176,2988510207,ES
-2988510208,2988510211,GB
-2988510212,2988510215,PT
-2988510216,2988510239,FR
-2988510240,2988510243,DE
-2988510244,2988510247,FR
-2988510248,2988510251,FI
-2988510252,2988510259,GB
-2988510260,2988510263,FR
-2988510264,2988510271,PL
-2988510272,2988510303,FR
-2988510304,2988510311,FI
-2988510312,2988510319,GB
-2988510320,2988510323,FR
-2988510324,2988510327,GB
-2988510328,2988510331,FR
-2988510332,2988510335,IT
-2988510336,2988510403,FR
-2988510404,2988510407,GB
-2988510408,2988510415,PL
-2988510416,2988510431,FR
-2988510432,2988510435,IT
-2988510436,2988510439,BE
-2988510440,2988510463,FR
-2988510464,2988510495,PL
-2988510496,2988510499,IT
-2988510500,2988510503,PL
-2988510504,2988510507,FR
-2988510508,2988510511,NL
-2988510512,2988510515,PL
-2988510516,2988510519,CZ
-2988510520,2988510527,ES
-2988510528,2988510559,FR
-2988510560,2988510591,IT
-2988510592,2988510623,BE
-2988510624,2988510655,IE
-2988510656,2988510687,PL
-2988510688,2988510703,FR
-2988510704,2988510719,PL
-2988510720,2988510751,FR
-2988510752,2988510759,PT
-2988510760,2988510767,FR
-2988510768,2988510771,NL
-2988510772,2988510775,FR
-2988510776,2988510779,PT
-2988510780,2988510847,FR
-2988510848,2988510911,PL
-2988510912,2988510927,CH
-2988510928,2988510943,FR
-2988510944,2988510975,IT
-2988510976,2988510979,GB
-2988510980,2988510983,IT
-2988510984,2988510987,GB
-2988510988,2988510991,ES
-2988510992,2988511071,FR
-2988511072,2988511079,PL
-2988511080,2988511083,FR
-2988511084,2988511087,PL
-2988511088,2988511091,IT
-2988511092,2988511167,FR
-2988511168,2988511171,IT
-2988511172,2988511175,DE
-2988511176,2988511179,GB
-2988511180,2988511187,FR
-2988511188,2988511191,PL
-2988511192,2988511555,FR
-2988511556,2988511559,CZ
-2988511560,2988511567,IT
-2988511568,2988511575,FR
-2988511576,2988511583,GB
-2988511584,2988511663,FR
-2988511664,2988511671,DE
-2988511672,2988511675,PL
-2988511676,2988511679,DE
-2988511680,2988511695,ES
-2988511696,2988511707,FR
-2988511708,2988511711,PL
-2988511712,2988511719,DE
-2988511720,2988511727,FR
-2988511728,2988511731,NL
-2988511732,2988511739,DE
-2988511740,2988511747,FR
-2988511748,2988511751,GB
-2988511752,2988511759,IT
-2988511760,2988511767,FR
-2988511768,2988511771,IT
-2988511772,2988511775,FR
-2988511776,2988511807,GB
-2988511808,2988511823,ES
-2988511824,2988511831,DE
-2988511832,2988511835,GB
-2988511836,2988511855,FR
-2988511856,2988511871,PL
-2988511872,2988511879,FR
-2988511880,2988511887,PL
-2988511888,2988511903,FR
-2988511904,2988511911,IT
-2988511912,2988511915,FR
-2988511916,2988511919,PL
-2988511920,2988511923,GB
-2988511924,2988511927,ES
-2988511928,2988511931,IT
-2988511932,2988511955,FR
-2988511956,2988511959,ES
-2988511960,2988511967,FR
-2988511968,2988511975,IT
-2988511976,2988511979,BE
-2988511980,2988511983,FR
-2988511984,2988511999,BE
-2988512000,2988512047,FR
-2988512048,2988512055,ES
-2988512056,2988512059,GB
-2988512060,2988512095,FR
-2988512096,2988512127,IE
-2988512128,2988512143,ES
-2988512144,2988512151,FR
-2988512152,2988512155,CH
-2988512156,2988512195,FR
-2988512196,2988512199,DE
-2988512200,2988512207,ES
-2988512208,2988512223,FR
-2988512224,2988512227,BE
-2988512228,2988512239,FR
-2988512240,2988512247,DE
-2988512248,2988512251,GB
-2988512252,2988512255,ES
-2988512256,2988512287,FR
-2988512288,2988512303,PL
-2988512304,2988512307,IT
-2988512308,2988512311,GB
-2988512312,2988512315,FR
-2988512316,2988512319,PL
-2988512320,2988512335,FR
-2988512336,2988512343,PL
-2988512344,2988512351,FR
-2988512352,2988512383,IT
-2988512384,2988512399,FR
-2988512400,2988512403,ES
-2988512404,2988512415,FR
-2988512416,2988512435,PL
-2988512436,2988512439,DE
-2988512440,2988512447,FR
-2988512448,2988512455,IT
-2988512456,2988512459,GB
-2988512460,2988512467,FR
-2988512468,2988512471,GB
-2988512472,2988512479,FR
-2988512480,2988512483,DE
-2988512484,2988512523,FR
-2988512524,2988512527,IT
-2988512528,2988512543,FR
-2988512544,2988512551,PL
-2988512552,2988512559,NL
-2988512560,2988512575,FR
-2988512576,2988512579,NL
-2988512580,2988512583,PL
-2988512584,2988512591,FR
-2988512592,2988512595,BE
-2988512596,2988512599,IT
-2988512600,2988512607,PT
-2988512608,2988512623,PL
-2988512624,2988512631,FR
-2988512632,2988512639,PL
-2988512640,2988512647,GB
-2988512648,2988512655,FR
-2988512656,2988512663,PT
-2988512664,2988512667,FR
-2988512668,2988512671,PL
-2988512672,2988512687,FR
-2988512688,2988512703,PL
-2988512704,2988512735,FR
-2988512736,2988512767,ES
-2988512768,2988512831,IE
-2988512832,2988512835,FR
-2988512836,2988512839,ES
-2988512840,2988512847,FR
-2988512848,2988512851,ES
-2988512852,2988512855,DE
-2988512856,2988512879,FR
-2988512880,2988512887,PL
-2988512888,2988512899,FR
-2988512900,2988512911,ES
-2988512912,2988512943,FR
-2988512944,2988512951,ES
-2988512952,2988512955,FR
-2988512956,2988512959,LT
-2988512960,2988512963,ES
-2988512964,2988512967,PL
-2988512968,2988512971,GB
-2988512972,2988512975,NL
-2988512976,2988512979,FI
-2988512980,2988512983,DE
-2988512984,2988512987,CH
-2988512988,2988512991,CZ
-2988512992,2988512995,FR
-2988512996,2988512999,GB
-2988513000,2988513003,FR
-2988513004,2988513007,PL
-2988513008,2988513015,IT
-2988513016,2988513019,FI
-2988513020,2988513183,FR
-2988513184,2988513191,DE
-2988513192,2988513215,FR
-2988513216,2988513223,NL
-2988513224,2988513235,FR
-2988513236,2988513239,ES
-2988513240,2988513271,FR
-2988513272,2988513275,DE
-2988513276,2988513279,CH
-2988513280,2988513283,FR
-2988513284,2988513287,ES
-2988513288,2988513291,FR
-2988513292,2988513295,PL
-2988513296,2988513303,NL
-2988513304,2988513311,FR
-2988513312,2988513327,PT
-2988513328,2988513331,PL
-2988513332,2988513343,FR
-2988513344,2988513351,ES
-2988513352,2988513359,IT
-2988513360,2988513363,PT
-2988513364,2988513383,FR
-2988513384,2988513391,PT
-2988513392,2988513407,GB
-2988513408,2988513471,PL
-2988513472,2988513503,FR
-2988513504,2988513507,CH
-2988513508,2988513511,DE
-2988513512,2988513515,IE
-2988513516,2988513519,DE
-2988513520,2988513535,GB
-2988513536,2988513551,FR
-2988513552,2988513555,IT
-2988513556,2988513567,FR
-2988513568,2988513575,DE
-2988513576,2988513583,PL
-2988513584,2988513599,IE
-2988513600,2988513663,FR
-2988513664,2988513667,PL
-2988513668,2988513671,FR
-2988513672,2988513675,PL
-2988513676,2988513679,FR
-2988513680,2988513683,ES
-2988513684,2988513687,GB
-2988513688,2988513691,FR
-2988513692,2988513695,DE
-2988513696,2988513703,FR
-2988513704,2988513707,DE
-2988513708,2988513711,GB
-2988513712,2988513723,FR
-2988513724,2988513727,DE
-2988513728,2988513731,FR
-2988513732,2988513735,PL
-2988513736,2988513739,FR
-2988513740,2988513743,ES
-2988513744,2988513759,GB
-2988513760,2988513879,FR
-2988513880,2988513883,ES
-2988513884,2988513887,FR
-2988513888,2988513891,PL
-2988513892,2988513899,IT
-2988513900,2988513903,PL
-2988513904,2988513919,IT
-2988513920,2988513959,FR
-2988513960,2988513963,NL
-2988513964,2988513967,IE
-2988513968,2988513983,NL
-2988513984,2988513999,BE
-2988514000,2988514015,FR
-2988514016,2988514023,ES
-2988514024,2988514027,CH
-2988514028,2988514031,PL
-2988514032,2988514095,FR
-2988514096,2988514099,DE
-2988514100,2988514103,PL
-2988514104,2988514111,FR
-2988514112,2988514115,PL
-2988514116,2988514127,FR
-2988514128,2988514131,IE
-2988514132,2988514135,IT
-2988514136,2988514139,FR
-2988514140,2988514143,LT
-2988514144,2988514159,FR
-2988514160,2988514163,IT
-2988514164,2988514207,FR
-2988514208,2988514215,CH
-2988514216,2988514219,FR
-2988514220,2988514227,GB
-2988514228,2988514231,NL
-2988514232,2988514239,ES
-2988514240,2988514247,FR
-2988514248,2988514251,GB
-2988514252,2988514271,ES
-2988514272,2988514279,FR
-2988514280,2988514287,PL
-2988514288,2988514303,ES
-2988514304,2988514335,FR
-2988514336,2988514339,PT
-2988514340,2988514343,FR
-2988514344,2988514351,PL
-2988514352,2988514367,ES
-2988514368,2988514447,FR
-2988514448,2988514463,NL
-2988514464,2988514527,FR
-2988514528,2988514543,GB
-2988514544,2988514559,PL
-2988514560,2988514623,FR
-2988514624,2988514655,DE
-2988514656,2988514671,FR
-2988514672,2988514675,CH
-2988514676,2988514679,IT
-2988514680,2988514683,GB
-2988514684,2988514687,DE
-2988514688,2988514719,GB
-2988514720,2988514735,ES
-2988514736,2988514739,DE
-2988514740,2988514743,GB
-2988514744,2988514747,ES
-2988514748,2988514751,GB
-2988514752,2988514815,FI
-2988514816,2988514819,FR
-2988514820,2988514823,NL
-2988514824,2988514827,PL
-2988514828,2988514839,FR
-2988514840,2988514879,ES
-2988514880,2988514943,PL
-2988514944,2988514959,ES
-2988514960,2988514975,PL
-2988514976,2988514979,DE
-2988514980,2988514983,PL
-2988514984,2988514991,IT
-2988514992,2988514995,FR
-2988514996,2988515007,PL
-2988515008,2988515027,FR
-2988515028,2988515031,DE
-2988515032,2988515327,FR
+2988509752,2988512903,FR
+2988512904,2988512907,GB
+2988512908,2988513003,FR
+2988513004,2988513007,ES
+2988513008,2988515327,FR
2988515328,2988517375,DE
2988517376,2988519423,FR
2988519424,2988521471,PL
-2988521472,2988523519,FR
-2988523520,2988523523,GB
-2988523524,2988523599,FR
-2988523600,2988523603,ES
-2988523604,2988523607,GB
-2988523608,2988523615,PL
-2988523616,2988523631,FR
-2988523632,2988523651,PL
-2988523652,2988523655,FR
-2988523656,2988523663,FI
-2988523664,2988523667,IE
-2988523668,2988523679,FR
-2988523680,2988523711,ES
-2988523712,2988523727,FR
-2988523728,2988523731,PL
-2988523732,2988523735,IT
-2988523736,2988523739,DE
-2988523740,2988523743,FR
-2988523744,2988523775,CH
-2988523776,2988524031,FR
-2988524032,2988524039,PL
-2988524040,2988524047,ES
-2988524048,2988524055,FR
-2988524056,2988524063,CZ
-2988524064,2988524067,PL
-2988524068,2988524071,GB
-2988524072,2988524075,FR
+2988521472,2988524075,FR
2988524076,2988524079,ES
-2988524080,2988524083,GB
-2988524084,2988524087,IT
-2988524088,2988524111,FR
-2988524112,2988524127,IT
-2988524128,2988524143,FR
-2988524144,2988524147,GB
-2988524148,2988524151,IT
-2988524152,2988524155,PL
-2988524156,2988524159,PT
-2988524160,2988524163,NL
-2988524164,2988524167,FR
-2988524168,2988524175,ES
-2988524176,2988524183,IT
-2988524184,2988524191,PL
-2988524192,2988524195,FI
-2988524196,2988524199,DE
-2988524200,2988524203,IE
-2988524204,2988524207,LT
-2988524208,2988524211,FR
-2988524212,2988524215,FI
-2988524216,2988524219,FR
-2988524220,2988524223,ES
-2988524224,2988524227,DE
-2988524228,2988524231,IT
-2988524232,2988524239,ES
-2988524240,2988524255,FR
-2988524256,2988524259,LT
-2988524260,2988524263,NL
-2988524264,2988524267,CZ
-2988524268,2988524271,GB
+2988524080,2988524271,FR
2988524272,2988524287,DE
-2988524288,2988524295,IT
-2988524296,2988524299,ES
-2988524300,2988524303,FR
-2988524304,2988524307,IT
-2988524308,2988524319,GB
-2988524320,2988524335,PL
-2988524336,2988524351,FR
-2988524352,2988524359,CH
-2988524360,2988524363,ES
-2988524364,2988524367,DE
-2988524368,2988524383,GB
-2988524384,2988524415,FR
-2988524416,2988524447,FI
-2988524448,2988524479,FR
-2988524480,2988524483,CZ
-2988524484,2988524487,IT
-2988524488,2988524495,FR
-2988524496,2988524543,PL
-2988524544,2988524575,IE
-2988524576,2988524599,FR
-2988524600,2988524607,ES
-2988524608,2988524627,GB
-2988524628,2988524631,FR
-2988524632,2988524635,DE
-2988524636,2988524639,FR
-2988524640,2988524671,DE
-2988524672,2988524735,FR
-2988524736,2988524751,GB
-2988524752,2988524911,FR
-2988524912,2988524919,NL
-2988524920,2988525055,FR
-2988525056,2988525567,PL
-2988525568,2988525579,FR
-2988525580,2988525583,GB
-2988525584,2988525631,PL
-2988525632,2988525647,ES
-2988525648,2988525651,GB
-2988525652,2988525659,FR
-2988525660,2988525663,DE
-2988525664,2988525775,FR
-2988525776,2988525779,LT
-2988525780,2988525783,PL
-2988525784,2988525791,FR
-2988525792,2988525807,PL
-2988525808,2988525811,ES
-2988525812,2988525815,PL
-2988525816,2988525819,ES
-2988525820,2988525823,IT
-2988525824,2988525843,FR
-2988525844,2988525847,ES
-2988525848,2988525851,IT
-2988525852,2988525855,DE
-2988525856,2988525887,FR
-2988525888,2988525951,FI
-2988525952,2988525967,IT
-2988525968,2988525983,FR
-2988525984,2988525991,FI
-2988525992,2988526043,FR
-2988526044,2988526047,NL
-2988526048,2988526079,FR
-2988526080,2988526083,GB
-2988526084,2988526087,FR
-2988526088,2988526091,IT
-2988526092,2988526095,GB
-2988526096,2988526135,FR
-2988526136,2988526143,GB
-2988526144,2988526175,BE
-2988526176,2988526239,ES
-2988526240,2988526423,PL
-2988526424,2988526427,GB
-2988526428,2988526431,PL
-2988526432,2988526435,IT
-2988526436,2988526439,FR
-2988526440,2988526443,CH
-2988526444,2988526447,BE
-2988526448,2988526451,FR
-2988526452,2988526455,GB
-2988526456,2988526463,ES
-2988526464,2988526575,FR
-2988526576,2988526583,ES
-2988526584,2988526587,DE
-2988526588,2988526607,FR
-2988526608,2988526615,DE
-2988526616,2988526655,FR
-2988526656,2988526659,IT
-2988526660,2988526663,FI
-2988526664,2988526671,FR
-2988526672,2988526679,DE
-2988526680,2988526683,ES
-2988526684,2988526687,NL
-2988526688,2988526703,FR
-2988526704,2988526707,GB
-2988526708,2988526711,PL
-2988526712,2988526715,ES
-2988526716,2988526719,GB
-2988526720,2988526727,FR
-2988526728,2988526735,DE
-2988526736,2988526751,FR
-2988526752,2988526767,GB
-2988526768,2988526783,FR
-2988526784,2988526847,ES
-2988526848,2988526863,BE
-2988526864,2988526867,GB
-2988526868,2988526871,PT
-2988526872,2988526875,DE
-2988526876,2988526879,PL
-2988526880,2988526927,FR
-2988526928,2988526935,DE
-2988526936,2988526939,PL
-2988526940,2988526951,DE
-2988526952,2988526955,FR
-2988526956,2988526959,IT
-2988526960,2988526975,FR
-2988526976,2988526995,PL
-2988526996,2988527007,ES
-2988527008,2988527055,FR
-2988527056,2988527071,BE
-2988527072,2988527087,FR
-2988527088,2988527095,GB
-2988527096,2988527103,PL
-2988527104,2988527119,FR
-2988527120,2988527167,PL
-2988527168,2988527171,DE
-2988527172,2988527175,ES
-2988527176,2988527179,PT
-2988527180,2988527183,PL
-2988527184,2988527187,IT
-2988527188,2988527191,ES
-2988527192,2988527195,CZ
-2988527196,2988527199,DE
-2988527200,2988527207,NL
-2988527208,2988527211,CZ
-2988527212,2988527215,IE
-2988527216,2988527359,FR
-2988527360,2988527391,DE
-2988527392,2988527399,PL
-2988527400,2988527407,DE
-2988527408,2988527411,FR
-2988527412,2988527419,PL
-2988527420,2988527423,GB
-2988527424,2988527431,FR
-2988527432,2988527439,IT
-2988527440,2988527451,PL
-2988527452,2988527455,PT
-2988527456,2988527459,FR
-2988527460,2988527463,IE
-2988527464,2988527475,FR
-2988527476,2988527479,ES
-2988527480,2988527487,FR
-2988527488,2988527503,GB
-2988527504,2988527523,FR
-2988527524,2988527527,PL
-2988527528,2988527531,DE
-2988527532,2988527535,FR
-2988527536,2988527543,DE
-2988527544,2988527551,FR
-2988527552,2988527583,PL
-2988527584,2988527591,IT
-2988527592,2988527595,IE
-2988527596,2988527599,DE
-2988527600,2988527603,NL
-2988527604,2988527607,FR
-2988527608,2988527611,DE
-2988527612,2988527619,ES
-2988527620,2988527623,PL
-2988527624,2988527631,ES
-2988527632,2988527667,FR
-2988527668,2988527671,IE
-2988527672,2988527675,ES
-2988527676,2988527679,DE
-2988527680,2988527683,ES
-2988527684,2988527687,FR
-2988527688,2988527691,PL
-2988527692,2988527695,FR
-2988527696,2988527711,GB
-2988527712,2988527747,FR
-2988527748,2988527751,ES
-2988527752,2988527755,NL
-2988527756,2988527759,PL
-2988527760,2988527775,ES
-2988527776,2988527823,FR
-2988527824,2988527831,GB
+2988524288,2988525887,FR
+2988525888,2988525951,GB
+2988525952,2988526415,FR
+2988526416,2988526423,ES
+2988526424,2988527527,FR
+2988527528,2988527531,NL
+2988527532,2988527831,FR
2988527832,2988527839,ES
-2988527840,2988527843,FR
-2988527844,2988527847,NL
-2988527848,2988527851,LT
-2988527852,2988527855,GB
-2988527856,2988527871,FR
-2988527872,2988527887,IE
-2988527888,2988527895,FR
-2988527896,2988527899,PL
-2988527900,2988527903,FR
-2988527904,2988527935,ES
-2988527936,2988527967,DE
-2988527968,2988527983,PL
-2988527984,2988527999,FR
-2988528000,2988528007,IT
-2988528008,2988528011,ES
-2988528012,2988528015,FR
-2988528016,2988528063,IE
-2988528064,2988528071,GB
-2988528072,2988528079,FR
-2988528080,2988528095,ES
-2988528096,2988528115,FR
-2988528116,2988528119,PL
-2988528120,2988528123,PT
-2988528124,2988528127,FR
-2988528128,2988528159,GB
-2988528160,2988528179,ES
-2988528180,2988528183,FR
-2988528184,2988528187,PL
-2988528188,2988528191,FR
-2988528192,2988528207,IE
-2988528208,2988528215,FR
-2988528216,2988528219,IE
-2988528220,2988528223,BE
-2988528224,2988528227,FR
-2988528228,2988528231,IE
-2988528232,2988528235,GB
-2988528236,2988528239,FR
-2988528240,2988528259,GB
-2988528260,2988528263,PT
-2988528264,2988528267,PL
-2988528268,2988528271,GB
-2988528272,2988528275,ES
-2988528276,2988528279,IT
-2988528280,2988528287,DE
-2988528288,2988528303,GB
-2988528304,2988528351,FR
-2988528352,2988528383,DE
-2988528384,2988528391,PL
-2988528392,2988528399,CH
-2988528400,2988528419,FR
-2988528420,2988528423,DE
-2988528424,2988528431,NL
-2988528432,2988528435,FR
-2988528436,2988528439,PL
-2988528440,2988528455,FR
-2988528456,2988528459,GB
-2988528460,2988528463,ES
-2988528464,2988528467,DE
-2988528468,2988528471,GB
-2988528472,2988528475,ES
-2988528476,2988528479,DE
-2988528480,2988528483,NL
-2988528484,2988528487,ES
-2988528488,2988528495,FR
-2988528496,2988528511,IT
-2988528512,2988528639,FR
-2988528640,2988528643,BE
-2988528644,2988528647,PL
-2988528648,2988528651,GB
-2988528652,2988528655,FR
-2988528656,2988528659,NL
-2988528660,2988528663,PL
-2988528664,2988528671,FR
-2988528672,2988528679,CH
-2988528680,2988528695,FR
-2988528696,2988528699,NL
-2988528700,2988528735,IE
-2988528736,2988528751,FR
-2988528752,2988528755,CH
-2988528756,2988528759,PL
-2988528760,2988528767,GB
-2988528768,2988528771,PL
-2988528772,2988528783,FR
-2988528784,2988528787,ES
-2988528788,2988528791,FR
-2988528792,2988528795,DE
-2988528796,2988528799,GB
-2988528800,2988528863,FR
-2988528864,2988528867,DE
-2988528868,2988528871,FR
-2988528872,2988528879,GB
-2988528880,2988529151,FR
-2988529152,2988529159,IT
-2988529160,2988529163,PL
-2988529164,2988529167,DE
-2988529168,2988529171,IE
-2988529172,2988529175,PT
-2988529176,2988529179,ES
-2988529180,2988529199,FR
-2988529200,2988529207,PL
-2988529208,2988529247,FR
-2988529248,2988529251,GB
-2988529252,2988529255,DE
-2988529256,2988529263,IT
-2988529264,2988529267,BE
-2988529268,2988529271,PL
-2988529272,2988529275,FR
-2988529276,2988529279,ES
-2988529280,2988529295,LT
-2988529296,2988529311,IT
-2988529312,2988529315,PL
-2988529316,2988529319,DE
-2988529320,2988529323,ES
-2988529324,2988529327,PL
-2988529328,2988529331,DE
-2988529332,2988529335,GB
-2988529336,2988529339,PT
-2988529340,2988529343,DE
-2988529344,2988529351,FR
+2988527840,2988527887,FR
+2988527888,2988527891,ES
+2988527892,2988529351,FR
2988529352,2988529359,GB
-2988529360,2988529375,IT
+2988529360,2988529375,FR
2988529376,2988529383,GB
-2988529384,2988529387,NL
-2988529388,2988529391,FR
-2988529392,2988529407,PL
-2988529408,2988529411,IT
-2988529412,2988529415,NL
-2988529416,2988529419,PT
-2988529420,2988529423,CH
-2988529424,2988529431,DE
-2988529432,2988529435,NL
-2988529436,2988529439,FR
-2988529440,2988529455,PL
-2988529456,2988529535,FR
-2988529536,2988529567,FI
-2988529568,2988529583,FR
-2988529584,2988529591,ES
-2988529592,2988529599,FR
-2988529600,2988529607,IT
-2988529608,2988529631,FR
-2988529632,2988529647,LT
-2988529648,2988529663,CH
-2988529664,2988529667,PL
-2988529668,2988529671,FR
-2988529672,2988529675,CZ
-2988529676,2988529703,FR
-2988529704,2988529707,DE
-2988529708,2988529759,FR
-2988529760,2988529763,PL
-2988529764,2988529767,DE
-2988529768,2988529771,GB
-2988529772,2988529775,DE
-2988529776,2988529783,ES
-2988529784,2988529787,FR
-2988529788,2988529791,PL
-2988529792,2988529799,IE
-2988529800,2988529803,DE
-2988529804,2988529807,CH
-2988529808,2988529823,FR
-2988529824,2988529855,ES
-2988529856,2988529887,FR
-2988529888,2988529891,DE
-2988529892,2988529895,PL
-2988529896,2988529899,FR
-2988529900,2988529903,PT
-2988529904,2988529907,PL
-2988529908,2988529911,PT
-2988529912,2988529915,CZ
-2988529916,2988529919,DE
-2988529920,2988529935,GB
-2988529936,2988529939,CH
-2988529940,2988529943,GB
-2988529944,2988529947,ES
-2988529948,2988529951,DE
-2988529952,2988529955,GB
-2988529956,2988529959,FR
-2988529960,2988529983,GB
-2988529984,2988529999,PL
-2988530000,2988530003,FR
-2988530004,2988530007,GB
-2988530008,2988530031,FR
-2988530032,2988530035,CH
-2988530036,2988530043,DE
-2988530044,2988530047,NL
-2988530048,2988530063,GB
-2988530064,2988530071,BE
-2988530072,2988530079,NL
-2988530080,2988530095,FR
-2988530096,2988530099,PL
-2988530100,2988530191,FR
-2988530192,2988530207,IT
-2988530208,2988530239,PL
-2988530240,2988530271,FR
-2988530272,2988530303,IE
-2988530304,2988530307,DE
-2988530308,2988530311,PL
-2988530312,2988530319,CH
-2988530320,2988530323,FR
-2988530324,2988530327,CZ
-2988530328,2988530335,FR
-2988530336,2988530351,ES
-2988530352,2988530367,FR
-2988530368,2988530371,ES
-2988530372,2988530379,FR
-2988530380,2988530383,CH
-2988530384,2988530391,FR
-2988530392,2988530395,PT
-2988530396,2988530399,GB
-2988530400,2988530403,ES
-2988530404,2988530423,PL
-2988530424,2988530431,ES
-2988530432,2988530687,DE
-2988530688,2988530695,IT
-2988530696,2988530703,PL
-2988530704,2988530735,FR
-2988530736,2988530739,IE
-2988530740,2988530743,NL
-2988530744,2988530751,PL
-2988530752,2988530847,FR
-2988530848,2988530851,DE
-2988530852,2988530863,ES
-2988530864,2988530867,PL
-2988530868,2988530879,FR
-2988530880,2988530895,DE
-2988530896,2988530927,FR
-2988530928,2988530943,FI
-2988530944,2988530975,FR
-2988530976,2988531007,PL
-2988531008,2988531015,DE
-2988531016,2988531019,NL
-2988531020,2988531023,IE
-2988531024,2988531027,ES
-2988531028,2988531031,FR
-2988531032,2988531039,PL
-2988531040,2988531047,FR
-2988531048,2988531051,GB
-2988531052,2988531075,FR
-2988531076,2988531079,GB
-2988531080,2988531083,FR
-2988531084,2988531087,CZ
-2988531088,2988531103,FR
-2988531104,2988531107,DE
-2988531108,2988531135,FR
-2988531136,2988531151,BE
-2988531152,2988531171,PL
-2988531172,2988531175,BE
-2988531176,2988531183,GB
-2988531184,2988531187,CZ
-2988531188,2988531191,IE
-2988531192,2988531199,FR
-2988531200,2988531231,ES
-2988531232,2988531247,IT
-2988531248,2988531259,PL
-2988531260,2988531267,GB
-2988531268,2988531271,FR
-2988531272,2988531279,ES
-2988531280,2988531287,PT
-2988531288,2988531291,FR
-2988531292,2988531295,DE
-2988531296,2988531311,IE
-2988531312,2988531315,FR
-2988531316,2988531319,NL
-2988531320,2988531323,PT
-2988531324,2988531327,GB
-2988531328,2988531343,IE
-2988531344,2988531351,GB
-2988531352,2988531359,PL
-2988531360,2988531391,FR
-2988531392,2988531399,PL
-2988531400,2988531403,DE
-2988531404,2988531407,FR
-2988531408,2988531423,PL
-2988531424,2988531427,BE
-2988531428,2988531451,FR
-2988531452,2988531455,GB
-2988531456,2988535807,FR
+2988529384,2988529387,ES
+2988529388,2988535807,FR
2988535808,2988537855,ES
-2988537856,2988539935,FR
-2988539936,2988539967,GB
-2988539968,2988539971,ES
-2988539972,2988539975,IT
-2988539976,2988539983,FR
-2988539984,2988540003,PL
-2988540004,2988540007,CZ
-2988540008,2988540019,FR
-2988540020,2988540023,GB
-2988540024,2988540207,FR
-2988540208,2988540211,GB
-2988540212,2988540219,FR
-2988540220,2988540223,GB
-2988540224,2988540231,NL
-2988540232,2988540235,GB
-2988540236,2988540239,ES
-2988540240,2988540247,FR
-2988540248,2988540251,GB
-2988540252,2988540255,FR
-2988540256,2988540271,PL
-2988540272,2988540275,DE
-2988540276,2988540279,PL
-2988540280,2988540287,FR
-2988540288,2988540303,BE
-2988540304,2988540363,FR
-2988540364,2988540367,PL
-2988540368,2988540379,FR
-2988540380,2988540383,PL
-2988540384,2988540415,FR
-2988540416,2988540427,PL
-2988540428,2988540431,FR
-2988540432,2988540435,PL
-2988540436,2988540439,FR
-2988540440,2988540447,PL
-2988540448,2988540451,IT
-2988540452,2988540455,FR
-2988540456,2988540463,IT
-2988540464,2988540467,PL
-2988540468,2988540471,GB
-2988540472,2988540483,FR
-2988540484,2988540491,PL
-2988540492,2988540499,FR
-2988540500,2988540503,CZ
-2988540504,2988540507,PL
-2988540508,2988540511,DE
-2988540512,2988540607,FR
-2988540608,2988540623,BE
-2988540624,2988540631,GB
-2988540632,2988540635,DE
-2988540636,2988540639,PT
-2988540640,2988540647,CZ
-2988540648,2988540651,FR
-2988540652,2988540667,PL
-2988540668,2988540671,IT
-2988540672,2988540679,ES
-2988540680,2988540683,PL
-2988540684,2988540707,FR
-2988540708,2988540711,PL
-2988540712,2988540715,FR
-2988540716,2988540719,PL
-2988540720,2988540735,DE
-2988540736,2988540767,ES
-2988540768,2988540775,PL
-2988540776,2988540787,BE
-2988540788,2988540795,FR
-2988540796,2988540799,GB
-2988540800,2988540831,FR
-2988540832,2988540839,PL
-2988540840,2988540847,GB
-2988540848,2988540855,FR
-2988540856,2988540863,IT
-2988540864,2988540931,FR
-2988540932,2988540939,ES
-2988540940,2988540943,FR
-2988540944,2988540959,GB
-2988540960,2988540975,FR
-2988540976,2988540991,GB
-2988540992,2988541087,FR
-2988541088,2988541103,BE
-2988541104,2988541119,ES
-2988541120,2988541131,FR
-2988541132,2988541135,DE
-2988541136,2988541143,GB
-2988541144,2988541215,FR
-2988541216,2988541231,CZ
-2988541232,2988541243,FR
-2988541244,2988541247,GB
-2988541248,2988541255,NL
-2988541256,2988541263,FR
-2988541264,2988541279,IT
-2988541280,2988541311,NL
-2988541312,2988541315,ES
-2988541316,2988541319,IE
-2988541320,2988541327,FR
-2988541328,2988541335,PL
-2988541336,2988541343,FR
-2988541344,2988541347,GB
-2988541348,2988541351,IT
-2988541352,2988541355,IE
-2988541356,2988541363,ES
-2988541364,2988541367,FR
-2988541368,2988541371,PL
-2988541372,2988541375,GB
-2988541376,2988541391,IT
-2988541392,2988541399,FR
-2988541400,2988541403,GB
-2988541404,2988541407,CH
-2988541408,2988541423,BE
-2988541424,2988541439,DE
-2988541440,2988541443,IT
-2988541444,2988541447,FR
-2988541448,2988541455,ES
-2988541456,2988541463,FR
-2988541464,2988541467,ES
-2988541468,2988541503,FR
-2988541504,2988541519,CH
-2988541520,2988541539,FR
-2988541540,2988541543,GB
-2988541544,2988541547,FR
-2988541548,2988541551,ES
-2988541552,2988541575,FR
-2988541576,2988541579,ES
-2988541580,2988541583,FR
-2988541584,2988541587,ES
-2988541588,2988541603,FR
-2988541604,2988541607,NL
-2988541608,2988541611,GB
-2988541612,2988541615,IT
-2988541616,2988541619,BE
-2988541620,2988541655,FR
-2988541656,2988541663,ES
-2988541664,2988541679,FR
-2988541680,2988541683,BE
-2988541684,2988541687,DE
-2988541688,2988541691,ES
-2988541692,2988541695,IT
-2988541696,2988541727,PL
-2988541728,2988541731,NL
-2988541732,2988541735,PL
-2988541736,2988541743,NL
-2988541744,2988541759,FR
-2988541760,2988541763,BE
-2988541764,2988541767,FR
-2988541768,2988541775,PL
-2988541776,2988541779,CH
-2988541780,2988541791,FR
-2988541792,2988541807,GB
-2988541808,2988541815,PL
-2988541816,2988541819,ES
-2988541820,2988541823,CZ
-2988541824,2988541859,FR
-2988541860,2988541863,PL
-2988541864,2988541867,DE
-2988541868,2988541887,FR
-2988541888,2988541895,DE
-2988541896,2988541899,PL
-2988541900,2988541903,BE
-2988541904,2988541907,CZ
-2988541908,2988541911,GB
-2988541912,2988541927,PL
-2988541928,2988541935,LT
-2988541936,2988541943,FR
-2988541944,2988541947,GB
-2988541948,2988541951,ES
-2988541952,2988541955,GB
-2988541956,2988541959,DE
-2988541960,2988541963,CH
-2988541964,2988541967,DE
-2988541968,2988541999,FR
-2988542000,2988542003,PL
-2988542004,2988542007,DE
-2988542008,2988542011,FI
-2988542012,2988542015,CH
-2988542016,2988542019,GB
-2988542020,2988542023,FR
-2988542024,2988542027,NL
-2988542028,2988542031,PL
-2988542032,2988542047,FR
-2988542048,2988542051,DE
-2988542052,2988542055,ES
-2988542056,2988542063,FR
-2988542064,2988542067,GB
-2988542068,2988542071,ES
-2988542072,2988542255,FR
-2988542256,2988542271,IT
-2988542272,2988542343,ES
-2988542344,2988542347,PL
-2988542348,2988542351,IT
-2988542352,2988542359,FR
-2988542360,2988542367,IT
-2988542368,2988542399,CZ
-2988542400,2988542403,FI
-2988542404,2988542407,PL
-2988542408,2988542411,LT
-2988542412,2988542415,PL
-2988542416,2988542431,FR
-2988542432,2988542439,PL
-2988542440,2988542443,ES
-2988542444,2988542459,FR
-2988542460,2988542495,ES
-2988542496,2988542511,FR
-2988542512,2988542515,BE
-2988542516,2988542527,FR
-2988542528,2988542535,DE
-2988542536,2988542539,NL
-2988542540,2988542543,LT
-2988542544,2988542551,DE
-2988542552,2988542559,ES
-2988542560,2988542591,FR
-2988542592,2988542595,PT
-2988542596,2988542599,FI
-2988542600,2988542603,GB
-2988542604,2988542611,FR
-2988542612,2988542615,DE
-2988542616,2988542623,PT
-2988542624,2988542627,DE
-2988542628,2988542651,FR
-2988542652,2988542655,DE
-2988542656,2988542719,BE
-2988542720,2988542783,CH
-2988542784,2988542847,CZ
-2988542848,2988542911,DE
-2988542912,2988542919,PT
-2988542920,2988542923,PL
-2988542924,2988542935,FR
-2988542936,2988542939,IT
-2988542940,2988542943,GB
-2988542944,2988542959,DE
-2988542960,2988542963,PL
-2988542964,2988542967,GB
-2988542968,2988542975,DE
-2988542976,2988542983,CH
-2988542984,2988542987,FR
-2988542988,2988542991,BE
-2988542992,2988543007,NL
-2988543008,2988543011,PL
-2988543012,2988543015,FR
-2988543016,2988543023,IE
-2988543024,2988543039,DE
-2988543040,2988543047,GB
-2988543048,2988543051,PL
-2988543052,2988543055,FR
-2988543056,2988543059,PL
-2988543060,2988543067,FR
-2988543068,2988543071,PL
-2988543072,2988543103,FR
-2988543104,2988543167,GB
-2988543168,2988543171,PL
-2988543172,2988543179,FR
-2988543180,2988543183,ES
-2988543184,2988543191,CH
-2988543192,2988543195,IT
-2988543196,2988543199,PL
-2988543200,2988543203,GB
-2988543204,2988543207,FR
-2988543208,2988543211,PL
-2988543212,2988543215,GB
-2988543216,2988543231,FR
-2988543232,2988543235,GB
-2988543236,2988543239,FR
-2988543240,2988543243,PL
-2988543244,2988543247,IT
-2988543248,2988543251,FR
-2988543252,2988543255,ES
-2988543256,2988543263,PL
-2988543264,2988543279,ES
-2988543280,2988543295,DE
-2988543296,2988543299,ES
-2988543300,2988543303,FR
-2988543304,2988543307,ES
-2988543308,2988543311,PL
-2988543312,2988543315,FR
-2988543316,2988543319,IE
-2988543320,2988543323,FI
-2988543324,2988543327,PL
-2988543328,2988543379,FR
-2988543380,2988543383,PL
-2988543384,2988543399,DE
-2988543400,2988543403,GB
-2988543404,2988543407,ES
-2988543408,2988543411,PL
-2988543412,2988543415,FR
-2988543416,2988543419,CH
-2988543420,2988543423,PL
-2988543424,2988543431,DE
-2988543432,2988543439,GB
-2988543440,2988543447,FR
-2988543448,2988543451,BE
-2988543452,2988543455,PL
-2988543456,2988543459,NL
-2988543460,2988543487,FR
-2988543488,2988543495,DE
-2988543496,2988543499,CH
-2988543500,2988543503,NL
-2988543504,2988543519,ES
-2988543520,2988543527,FR
-2988543528,2988543535,GB
-2988543536,2988543551,DE
-2988543552,2988543555,CH
-2988543556,2988543559,BE
-2988543560,2988543563,PT
-2988543564,2988543575,FR
-2988543576,2988543579,FI
-2988543580,2988543583,FR
-2988543584,2988543615,DE
-2988543616,2988543743,FR
-2988543744,2988543775,CH
-2988543776,2988543839,FR
-2988543840,2988543871,GB
-2988543872,2988543935,ES
-2988543936,2988543947,PL
-2988543948,2988543951,BE
-2988543952,2988543959,GB
-2988543960,2988543999,FR
-2988544000,2988544003,GB
-2988544004,2988544007,PL
-2988544008,2988544011,FR
-2988544012,2988544015,PT
-2988544016,2988544031,FR
-2988544032,2988544035,CH
-2988544036,2988544039,FR
-2988544040,2988544043,DE
-2988544044,2988544047,GB
-2988544048,2988544055,FR
-2988544056,2988544063,FI
-2988544064,2988544127,FR
-2988544128,2988544159,GB
-2988544160,2988544163,FR
-2988544164,2988544167,PL
-2988544168,2988544175,GB
-2988544176,2988544179,CH
-2988544180,2988544187,PL
-2988544188,2988544191,FR
-2988544192,2988544227,ES
-2988544228,2988544231,DE
-2988544232,2988544271,FR
-2988544272,2988544275,PL
-2988544276,2988544279,FR
-2988544280,2988544283,GB
-2988544284,2988544287,CZ
-2988544288,2988544291,PL
-2988544292,2988544295,GB
-2988544296,2988544303,FR
-2988544304,2988544307,IT
-2988544308,2988544311,GB
-2988544312,2988544319,FR
-2988544320,2988544323,PL
-2988544324,2988544327,FR
-2988544328,2988544331,PL
-2988544332,2988544335,ES
-2988544336,2988544355,FR
-2988544356,2988544359,DE
-2988544360,2988544367,FR
-2988544368,2988544371,ES
-2988544372,2988544375,FR
-2988544376,2988544383,ES
-2988544384,2988544447,GB
-2988544448,2988544479,FR
-2988544480,2988544511,PL
-2988544512,2988544527,FR
-2988544528,2988544535,ES
-2988544536,2988544543,FR
-2988544544,2988544639,ES
-2988544640,2988544647,PL
-2988544648,2988544655,FR
-2988544656,2988544663,ES
-2988544664,2988544667,DE
-2988544668,2988544671,ES
+2988537856,2988539971,FR
+2988539972,2988539975,ES
+2988539976,2988540503,FR
+2988540504,2988540507,NL
+2988540508,2988544671,FR
2988544672,2988544687,GB
2988544688,2988544691,NL
-2988544692,2988544767,FR
-2988544768,2988544775,ES
-2988544776,2988544783,NL
-2988544784,2988544787,FR
-2988544788,2988544791,PL
-2988544792,2988544799,PT
-2988544800,2988544831,FI
-2988544832,2988544863,PT
-2988544864,2988544895,PL
-2988544896,2988544927,FR
-2988544928,2988544931,DE
-2988544932,2988544935,FR
-2988544936,2988544943,GB
-2988544944,2988544951,PT
-2988544952,2988544959,GB
-2988544960,2988544979,ES
-2988544980,2988544983,FR
-2988544984,2988544987,ES
-2988544988,2988544991,FR
-2988544992,2988544995,PL
-2988544996,2988544999,FR
-2988545000,2988545007,DE
-2988545008,2988545011,FR
-2988545012,2988545019,DE
-2988545020,2988545027,FR
-2988545028,2988545031,IT
-2988545032,2988545039,PL
-2988545040,2988545047,ES
-2988545048,2988545051,FR
-2988545052,2988545055,PL
-2988545056,2988545067,GB
-2988545068,2988545071,ES
-2988545072,2988545151,FR
-2988545152,2988545167,PL
-2988545168,2988545171,DE
-2988545172,2988545175,FR
-2988545176,2988545183,PL
-2988545184,2988545215,FR
-2988545216,2988545223,PT
-2988545224,2988545227,PL
-2988545228,2988545247,FR
-2988545248,2988545287,PL
-2988545288,2988545291,FR
-2988545292,2988545295,DE
-2988545296,2988545331,FR
-2988545332,2988545343,DE
-2988545344,2988545367,FR
-2988545368,2988545371,DE
-2988545372,2988545375,GB
-2988545376,2988545383,DE
-2988545384,2988545387,ES
-2988545388,2988545391,FR
-2988545392,2988545395,DE
-2988545396,2988545439,FR
-2988545440,2988545443,DE
-2988545444,2988545447,ES
-2988545448,2988545455,PL
-2988545456,2988545503,FR
-2988545504,2988545511,DE
-2988545512,2988545515,IT
-2988545516,2988545519,FR
-2988545520,2988545523,PL
-2988545524,2988545527,FR
-2988545528,2988545531,PL
-2988545532,2988545551,FR
-2988545552,2988545555,ES
-2988545556,2988545559,IT
-2988545560,2988545563,FR
-2988545564,2988545571,DE
-2988545572,2988545579,FR
-2988545580,2988545583,ES
-2988545584,2988545599,IT
-2988545600,2988545631,DE
-2988545632,2988545663,FR
-2988545664,2988545695,ES
-2988545696,2988545795,FR
-2988545796,2988545807,ES
-2988545808,2988545815,FR
-2988545816,2988545823,NL
-2988545824,2988545831,FR
-2988545832,2988545835,GB
-2988545836,2988545839,DE
-2988545840,2988545855,FR
-2988545856,2988545859,ES
-2988545860,2988545863,FR
-2988545864,2988545871,PL
-2988545872,2988545903,FR
-2988545904,2988545919,IT
-2988545920,2988545923,NL
-2988545924,2988545927,PL
-2988545928,2988545931,BE
-2988545932,2988545935,PL
-2988545936,2988545943,GB
-2988545944,2988545947,CZ
-2988545948,2988545971,FR
-2988545972,2988545975,DE
-2988545976,2988545979,NL
-2988545980,2988545983,DE
-2988545984,2988545987,FR
-2988545988,2988545991,PL
-2988545992,2988545995,LT
-2988545996,2988545999,FI
-2988546000,2988546015,GB
-2988546016,2988546031,FR
-2988546032,2988546035,ES
-2988546036,2988546039,BE
-2988546040,2988546047,FR
-2988546048,2988546111,PL
-2988546112,2988546119,FR
-2988546120,2988546123,IE
-2988546124,2988546143,GB
-2988546144,2988546159,PL
-2988546160,2988546175,ES
-2988546176,2988546239,GB
-2988546240,2988546271,LT
-2988546272,2988546279,IT
-2988546280,2988546283,FR
-2988546284,2988546287,BE
-2988546288,2988546291,GB
-2988546292,2988546295,FR
-2988546296,2988546299,PL
-2988546300,2988546307,ES
-2988546308,2988546311,GB
-2988546312,2988546315,FR
-2988546316,2988546319,PL
-2988546320,2988546327,IT
-2988546328,2988546335,ES
-2988546336,2988546351,CH
-2988546352,2988546367,ES
-2988546368,2988546431,PT
-2988546432,2988546439,FR
-2988546440,2988546443,DE
-2988546444,2988546451,FR
-2988546452,2988546463,ES
-2988546464,2988546527,FR
-2988546528,2988546535,BE
-2988546536,2988546543,FR
-2988546544,2988546547,PL
-2988546548,2988546551,FR
-2988546552,2988546555,DE
-2988546556,2988546559,ES
-2988546560,2988546567,PL
-2988546568,2988546571,GB
-2988546572,2988546575,DE
-2988546576,2988546579,ES
-2988546580,2988546583,GB
-2988546584,2988546591,DE
-2988546592,2988546595,PL
-2988546596,2988546599,ES
-2988546600,2988546603,PT
-2988546604,2988546607,GB
-2988546608,2988546615,NL
-2988546616,2988546619,FI
-2988546620,2988546623,IT
-2988546624,2988546687,FI
-2988546688,2988546699,FR
-2988546700,2988546703,IT
-2988546704,2988546719,DE
-2988546720,2988546731,FR
-2988546732,2988546735,DE
-2988546736,2988546815,FR
-2988546816,2988546819,PT
-2988546820,2988546823,NL
-2988546824,2988546831,FR
-2988546832,2988546835,DE
-2988546836,2988546839,ES
-2988546840,2988546847,FR
-2988546848,2988546851,PT
-2988546852,2988546855,FR
-2988546856,2988546863,PL
-2988546864,2988546867,CH
-2988546868,2988546871,PL
-2988546872,2988546875,GB
-2988546876,2988546879,IE
-2988546880,2988546947,ES
-2988546948,2988546951,DE
-2988546952,2988546955,FR
-2988546956,2988546959,NL
-2988546960,2988546963,CH
-2988546964,2988546967,GB
-2988546968,2988546971,FR
-2988546972,2988546975,BE
-2988546976,2988546991,FI
-2988546992,2988546995,DE
-2988546996,2988546999,ES
-2988547000,2988547003,IT
-2988547004,2988547007,ES
-2988547008,2988547011,PL
-2988547012,2988547015,FR
-2988547016,2988547019,NL
-2988547020,2988547023,ES
-2988547024,2988547039,FR
-2988547040,2988547047,ES
-2988547048,2988547055,PL
-2988547056,2988547059,IT
-2988547060,2988547063,FR
-2988547064,2988547067,GB
-2988547068,2988547071,PL
-2988547072,2988547087,IE
-2988547088,2988547095,FR
-2988547096,2988547099,GB
-2988547100,2988547103,IE
-2988547104,2988547111,FR
-2988547112,2988547115,PL
-2988547116,2988547123,FR
-2988547124,2988547127,IT
-2988547128,2988547135,FR
-2988547136,2988547167,IT
-2988547168,2988547179,FR
-2988547180,2988547183,PL
-2988547184,2988547191,ES
-2988547192,2988547195,DE
-2988547196,2988547199,PL
-2988547200,2988547207,IE
-2988547208,2988547211,ES
-2988547212,2988547215,GB
-2988547216,2988547223,FR
-2988547224,2988547227,GB
-2988547228,2988547239,FR
-2988547240,2988547243,PL
-2988547244,2988547247,DE
-2988547248,2988547255,NL
-2988547256,2988547263,FR
-2988547264,2988547267,GB
-2988547268,2988547271,ES
-2988547272,2988547275,BE
-2988547276,2988547311,FR
-2988547312,2988547327,PL
-2988547328,2988547423,FR
-2988547424,2988547431,GB
-2988547432,2988547435,ES
-2988547436,2988547443,PL
-2988547444,2988547447,DE
-2988547448,2988547451,FR
-2988547452,2988547455,PT
-2988547456,2988547471,ES
-2988547472,2988547475,LT
-2988547476,2988547487,GB
-2988547488,2988547507,FR
-2988547508,2988547511,NL
-2988547512,2988547515,FR
-2988547516,2988547519,CH
-2988547520,2988547523,NL
-2988547524,2988547527,CZ
-2988547528,2988547531,IT
-2988547532,2988547535,ES
-2988547536,2988547539,FR
-2988547540,2988547543,DE
-2988547544,2988547547,BE
-2988547548,2988547551,FR
-2988547552,2988547567,NL
-2988547568,2988547583,DE
-2988547584,2988547599,ES
-2988547600,2988547619,FR
-2988547620,2988547623,PT
-2988547624,2988547627,FR
-2988547628,2988547631,PL
-2988547632,2988547655,FR
+2988544692,2988546727,FR
+2988546728,2988546731,ES
+2988546732,2988547067,FR
+2988547068,2988547071,ES
+2988547072,2988547095,FR
+2988547096,2988547099,ES
+2988547100,2988547655,FR
2988547656,2988547663,PL
-2988547664,2988547679,FR
-2988547680,2988547683,PL
-2988547684,2988547687,FR
-2988547688,2988547691,PL
-2988547692,2988547695,CZ
-2988547696,2988547703,ES
-2988547704,2988547711,IT
-2988547712,2988547751,FR
-2988547752,2988547759,ES
-2988547760,2988547775,FR
-2988547776,2988547807,ES
-2988547808,2988547815,GB
-2988547816,2988547823,CH
-2988547824,2988547831,FR
-2988547832,2988547839,ES
-2988547840,2988547855,DE
-2988547856,2988547871,NL
+2988547664,2988547871,FR
2988547872,2988547903,GB
-2988547904,2988547935,FR
-2988547936,2988547967,LT
-2988547968,2988547971,GB
-2988547972,2988547975,DE
-2988547976,2988547983,PL
-2988547984,2988548015,FR
+2988547904,2988548015,FR
2988548016,2988548019,ES
-2988548020,2988548023,GB
-2988548024,2988548047,FR
-2988548048,2988548051,PL
-2988548052,2988548055,FR
-2988548056,2988548063,PL
-2988548064,2988550151,ES
-2988550152,2988550155,NL
-2988550156,2988550159,GB
-2988550160,2988550163,PT
-2988550164,2988550167,GB
-2988550168,2988550171,FR
-2988550172,2988550175,CH
-2988550176,2988550179,ES
-2988550180,2988550191,FR
-2988550192,2988550199,DE
-2988550200,2988550207,FR
-2988550208,2988550231,GB
-2988550232,2988550239,PL
-2988550240,2988550247,FR
-2988550248,2988550251,PL
-2988550252,2988550255,FR
-2988550256,2988550259,ES
-2988550260,2988550319,FR
-2988550320,2988550335,PL
-2988550336,2988550355,FR
-2988550356,2988550359,GB
-2988550360,2988550363,PL
-2988550364,2988550367,NL
-2988550368,2988550399,IT
-2988550400,2988550403,FR
-2988550404,2988550407,NL
-2988550408,2988550411,GB
-2988550412,2988550415,FR
-2988550416,2988550423,DE
-2988550424,2988550431,FR
-2988550432,2988550434,GB
-2988550435,2988550435,GB
-2988550436,2988550447,GB
-2988550448,2988550451,CH
-2988550452,2988550463,FR
-2988550464,2988550495,GB
-2988550496,2988550527,PT
-2988550528,2988550591,FR
-2988550592,2988550595,DE
-2988550596,2988550599,PT
-2988550600,2988550603,PL
-2988550604,2988550607,DE
-2988550608,2988550615,CH
-2988550616,2988550619,FR
-2988550620,2988550623,LT
-2988550624,2988550627,FR
-2988550628,2988550631,CH
-2988550632,2988550643,FR
-2988550644,2988550647,ES
-2988550648,2988550655,PL
-2988550656,2988550671,DE
-2988550672,2988550679,CZ
-2988550680,2988550683,PL
-2988550684,2988550687,FR
-2988550688,2988550695,LT
-2988550696,2988550699,GB
-2988550700,2988550703,ES
-2988550704,2988550719,NL
-2988550720,2988550751,PT
-2988550752,2988550783,NL
-2988550784,2988550847,FR
-2988550848,2988550863,PL
-2988550864,2988550887,FR
-2988550888,2988550895,PT
-2988550896,2988550903,PL
-2988550904,2988550911,FR
-2988550912,2988550927,LT
-2988550928,2988550951,FR
-2988550952,2988550955,PL
-2988550956,2988550959,FR
-2988550960,2988550963,GB
-2988550964,2988550967,FR
-2988550968,2988550975,ES
-2988550976,2988551007,FR
-2988551008,2988551039,PL
-2988551040,2988551087,FR
-2988551088,2988551091,NL
-2988551092,2988551095,PL
-2988551096,2988551099,DE
-2988551100,2988551135,FR
-2988551136,2988551167,CH
-2988551168,2988551171,PL
-2988551172,2988551175,FI
-2988551176,2988551179,ES
-2988551180,2988551183,GB
-2988551184,2988551199,ES
-2988551200,2988551215,IT
-2988551216,2988551231,FR
-2988551232,2988551263,IT
-2988551264,2988551295,FR
-2988551296,2988551299,PL
-2988551300,2988551303,FR
-2988551304,2988551307,NL
-2988551308,2988551319,FR
-2988551320,2988551323,PL
-2988551324,2988551327,GB
-2988551328,2988551343,FR
-2988551344,2988551359,DE
-2988551360,2988551423,FR
-2988551424,2988551427,LT
-2988551428,2988551439,FR
-2988551440,2988551447,GB
-2988551448,2988551451,ES
-2988551452,2988551455,PT
-2988551456,2988551471,GB
-2988551472,2988551475,FR
-2988551476,2988551487,IE
-2988551488,2988551511,PL
-2988551512,2988551535,ES
-2988551536,2988551543,FR
-2988551544,2988551547,GB
-2988551548,2988551551,DE
-2988551552,2988551567,PL
-2988551568,2988551583,IE
-2988551584,2988551603,FR
-2988551604,2988551607,NL
-2988551608,2988551615,IT
-2988551616,2988551631,ES
-2988551632,2988551635,FR
-2988551636,2988551643,IT
-2988551644,2988551647,FR
-2988551648,2988551651,DE
-2988551652,2988551655,FR
-2988551656,2988551663,ES
-2988551664,2988551671,GB
-2988551672,2988551743,FR
-2988551744,2988551759,PT
-2988551760,2988551775,FR
-2988551776,2988551807,PL
-2988551808,2988551903,FR
-2988551904,2988551911,GB
-2988551912,2988551915,IT
-2988551916,2988551919,DE
-2988551920,2988551923,FR
-2988551924,2988551927,PT
-2988551928,2988551935,FR
-2988551936,2988552191,GB
-2988552192,2988552319,NL
-2988552320,2988552447,FR
-2988552448,2988552479,GB
-2988552480,2988552511,CH
-2988552512,2988552551,BE
-2988552552,2988552559,IE
-2988552560,2988552563,FR
-2988552564,2988552567,IE
-2988552568,2988552579,FR
-2988552580,2988552583,DE
-2988552584,2988552587,FR
-2988552588,2988552591,PL
-2988552592,2988552595,FI
-2988552596,2988552599,DE
-2988552600,2988552603,FR
-2988552604,2988552611,GB
-2988552612,2988552615,FR
-2988552616,2988552619,GB
-2988552620,2988552623,PL
-2988552624,2988552627,FR
-2988552628,2988552631,CZ
-2988552632,2988552635,IE
-2988552636,2988552643,FR
-2988552644,2988552647,GB
-2988552648,2988552651,PT
-2988552652,2988552703,FR
-2988552704,2988552711,ES
-2988552712,2988552715,PT
-2988552716,2988552719,FR
-2988552720,2988552735,DE
-2988552736,2988552751,FR
-2988552752,2988552767,ES
-2988552768,2988552771,DE
-2988552772,2988552775,PL
-2988552776,2988552779,FR
-2988552780,2988552783,PL
-2988552784,2988552787,GB
-2988552788,2988552791,FR
-2988552792,2988552795,DE
-2988552796,2988552799,GB
-2988552800,2988552831,FR
-2988552832,2988552839,BE
-2988552840,2988552847,DE
-2988552848,2988552863,FR
-2988552864,2988552879,NL
-2988552880,2988552887,FR
-2988552888,2988552891,PL
-2988552892,2988552895,FR
-2988552896,2988552911,CZ
-2988552912,2988552915,FR
-2988552916,2988552919,DE
-2988552920,2988552959,FR
-2988552960,2988552975,ES
-2988552976,2988552991,FR
-2988552992,2988552995,ES
-2988552996,2988552999,CH
-2988553000,2988553003,FR
-2988553004,2988553007,GB
-2988553008,2988553023,IE
-2988553024,2988553087,LT
-2988553088,2988553119,PL
-2988553120,2988553135,ES
-2988553136,2988553151,FR
-2988553152,2988553159,ES
-2988553160,2988553171,FR
-2988553172,2988553175,NL
-2988553176,2988553179,IT
-2988553180,2988553199,FR
-2988553200,2988553215,BE
-2988553216,2988553235,FR
-2988553236,2988553239,PL
-2988553240,2988553247,FR
-2988553248,2988553251,PL
-2988553252,2988553255,FR
-2988553256,2988553263,CH
-2988553264,2988553279,FR
-2988553280,2988553283,ES
-2988553284,2988553287,NL
-2988553288,2988553295,ES
-2988553296,2988553299,FR
-2988553300,2988553303,PL
-2988553304,2988553311,BE
-2988553312,2988553315,ES
-2988553316,2988553319,PL
-2988553320,2988553327,IT
-2988553328,2988553335,GB
-2988553336,2988553343,FR
-2988553344,2988553359,IE
-2988553360,2988553367,FR
-2988553368,2988553375,DE
-2988553376,2988553399,FR
-2988553400,2988553403,ES
-2988553404,2988553407,GB
-2988553408,2988553411,LT
-2988553412,2988553415,IT
-2988553416,2988553423,BE
-2988553424,2988553439,FR
-2988553440,2988553447,CZ
-2988553448,2988553451,FR
-2988553452,2988553455,ES
-2988553456,2988553487,FR
-2988553488,2988553495,PL
-2988553496,2988553503,CH
-2988553504,2988553511,FR
-2988553512,2988553519,PT
-2988553520,2988553527,GB
-2988553528,2988553531,CH
-2988553532,2988553551,FR
-2988553552,2988553567,PL
-2988553568,2988553575,FR
-2988553576,2988553579,CH
-2988553580,2988553583,ES
-2988553584,2988553599,FR
-2988553600,2988553607,GB
-2988553608,2988553631,FR
-2988553632,2988553639,PL
-2988553640,2988553643,IE
-2988553644,2988553647,FR
-2988553648,2988553651,NL
-2988553652,2988553663,FR
-2988553664,2988553679,LT
-2988553680,2988553695,FR
-2988553696,2988553727,PT
-2988553728,2988553735,PL
-2988553736,2988553739,DE
-2988553740,2988553743,PL
-2988553744,2988553747,ES
-2988553748,2988553751,FI
-2988553752,2988553755,PL
-2988553756,2988553775,FR
-2988553776,2988553783,PT
-2988553784,2988553791,FR
-2988553792,2988553807,GB
-2988553808,2988553823,NL
-2988553824,2988553855,IT
-2988553856,2988553919,BE
-2988553920,2988553923,GB
-2988553924,2988553927,ES
-2988553928,2988553931,FR
-2988553932,2988553935,PL
-2988553936,2988553951,FR
-2988553952,2988553955,ES
-2988553956,2988553959,PL
-2988553960,2988553967,FR
-2988553968,2988553971,PL
-2988553972,2988553975,ES
-2988553976,2988554015,DE
-2988554016,2988554031,BE
-2988554032,2988554035,FR
-2988554036,2988554039,PL
-2988554040,2988554043,BE
-2988554044,2988554075,FR
-2988554076,2988554079,CH
-2988554080,2988554127,FR
-2988554128,2988554131,IT
-2988554132,2988554167,FR
-2988554168,2988554171,PL
-2988554172,2988554175,IE
-2988554176,2988554223,FR
-2988554224,2988554239,IT
-2988554240,2988554495,ES
-2988554496,2988554499,FR
-2988554500,2988554511,PL
-2988554512,2988554519,BE
-2988554520,2988554523,DE
-2988554524,2988554527,FR
-2988554528,2988554531,DE
-2988554532,2988554539,FR
-2988554540,2988554543,GB
-2988554544,2988554555,FR
-2988554556,2988554559,DE
-2988554560,2988554623,IT
-2988554624,2988554687,PL
-2988554688,2988554751,FR
-2988554752,2988554783,FI
-2988554784,2988554787,DE
-2988554788,2988554791,PL
-2988554792,2988554795,FR
-2988554796,2988554799,IT
-2988554800,2988554807,GB
-2988554808,2988554815,FR
-2988554816,2988554879,GB
-2988554880,2988554919,FR
-2988554920,2988554923,PL
-2988554924,2988554927,PT
-2988554928,2988554931,DE
-2988554932,2988554935,ES
-2988554936,2988554939,GB
-2988554940,2988554943,FR
-2988554944,2988555007,GB
-2988555008,2988555047,FR
-2988555048,2988555051,PL
-2988555052,2988555055,FR
-2988555056,2988555063,FI
-2988555064,2988555071,FR
-2988555072,2988555075,CH
-2988555076,2988555079,DE
-2988555080,2988555087,NL
-2988555088,2988555091,FI
-2988555092,2988555099,FR
-2988555100,2988555103,IT
-2988555104,2988555107,GB
-2988555108,2988555111,IT
-2988555112,2988555123,FR
-2988555124,2988555127,IT
-2988555128,2988555131,ES
-2988555132,2988555135,GB
-2988555136,2988555151,FR
-2988555152,2988555159,NL
-2988555160,2988555163,PL
-2988555164,2988555167,IE
-2988555168,2988555183,ES
-2988555184,2988555187,GB
-2988555188,2988555191,NL
-2988555192,2988555199,PL
-2988555200,2988555203,NL
-2988555204,2988555207,FR
-2988555208,2988555211,NL
-2988555212,2988555215,DE
-2988555216,2988555519,FR
-2988555520,2988555527,IE
-2988555528,2988555531,DE
-2988555532,2988555535,FR
-2988555536,2988555543,ES
-2988555544,2988555551,FR
-2988555552,2988555559,DE
-2988555560,2988555647,FR
-2988555648,2988555711,GB
-2988555712,2988555715,PL
-2988555716,2988555719,ES
-2988555720,2988555727,FR
-2988555728,2988555731,PT
-2988555732,2988555735,PL
-2988555736,2988555743,ES
-2988555744,2988556031,FR
-2988556032,2988556095,DE
-2988556096,2988556099,FR
-2988556100,2988556103,PL
-2988556104,2988556111,DE
-2988556112,2988556115,PL
-2988556116,2988556123,FR
-2988556124,2988556127,NL
-2988556128,2988556159,FR
-2988556160,2988556175,NL
-2988556176,2988556179,DE
-2988556180,2988556183,IT
-2988556184,2988556187,GB
-2988556188,2988556191,ES
-2988556192,2988556195,NL
-2988556196,2988556199,CH
-2988556200,2988556203,CZ
-2988556204,2988556207,FI
+2988548020,2988548095,FR
+2988548096,2988550143,ES
+2988550144,2988550359,FR
+2988550360,2988550363,ES
+2988550364,2988550438,FR
+2988550439,2988550439,GB
+2988550440,2988550463,FR
+2988550464,2988550527,DE
+2988550528,2988551443,FR
+2988551444,2988551447,ES
+2988551448,2988551535,FR
+2988551536,2988551551,DE
+2988551552,2988553531,FR
+2988553532,2988553535,ES
+2988553536,2988554035,FR
+2988554036,2988554039,ES
+2988554040,2988555527,FR
+2988555528,2988555531,ES
+2988555532,2988556207,FR
2988556208,2988556211,DE
-2988556212,2988556215,FR
-2988556216,2988556219,DE
-2988556220,2988556223,PL
-2988556224,2988556227,ES
-2988556228,2988556231,FR
-2988556232,2988556239,PL
-2988556240,2988556243,DE
-2988556244,2988556251,FR
-2988556252,2988556255,CZ
-2988556256,2988556259,ES
-2988556260,2988556263,FR
-2988556264,2988556271,GB
-2988556272,2988556275,CH
-2988556276,2988556279,FR
-2988556280,2988556283,PL
-2988556284,2988556287,GB
-2988556288,2988556295,PL
-2988556296,2988556303,FR
-2988556304,2988556311,PL
-2988556312,2988556315,FR
-2988556316,2988556319,DE
-2988556320,2988556351,GB
-2988556352,2988556355,FR
-2988556356,2988556359,CZ
-2988556360,2988556363,DE
-2988556364,2988556383,FR
-2988556384,2988556415,DE
-2988556416,2988556419,IT
-2988556420,2988556427,FR
-2988556428,2988556431,ES
-2988556432,2988556447,PL
-2988556448,2988556451,NL
-2988556452,2988556455,PL
-2988556456,2988556463,FR
-2988556464,2988556479,GB
-2988556480,2988556483,IT
-2988556484,2988556487,FR
-2988556488,2988556491,PL
-2988556492,2988556495,DE
-2988556496,2988556539,FR
-2988556540,2988556543,BE
-2988556544,2988556799,DE
-2988556800,2988556831,FR
-2988556832,2988556839,DE
-2988556840,2988556847,FR
-2988556848,2988556855,ES
-2988556856,2988556871,GB
-2988556872,2988556879,FR
-2988556880,2988556883,ES
-2988556884,2988556887,DE
-2988556888,2988556891,BE
-2988556892,2988556895,FR
-2988556896,2988556911,PL
-2988556912,2988556919,NL
-2988556920,2988556927,PL
-2988556928,2988556943,FR
-2988556944,2988556959,BE
-2988556960,2988556963,PL
-2988556964,2988556967,FR
-2988556968,2988556975,BE
-2988556976,2988556979,PL
-2988556980,2988556999,FR
-2988557000,2988557003,BE
-2988557004,2988557007,ES
-2988557008,2988557015,FR
-2988557016,2988557023,DE
-2988557024,2988557039,IE
-2988557040,2988557043,PT
-2988557044,2988557047,BE
-2988557048,2988557051,PL
-2988557052,2988557055,FR
-2988557056,2988557059,ES
-2988557060,2988557063,FR
-2988557064,2988557071,ES
-2988557072,2988557075,PL
-2988557076,2988557079,FR
-2988557080,2988557087,FI
-2988557088,2988557095,PT
-2988557096,2988557103,ES
-2988557104,2988557111,FR
-2988557112,2988557115,LT
-2988557116,2988557151,NL
-2988557152,2988557215,FR
-2988557216,2988557247,BE
-2988557248,2988557251,FR
-2988557252,2988557255,ES
-2988557256,2988557259,FR
-2988557260,2988557263,DE
-2988557264,2988557279,GB
-2988557280,2988557287,ES
-2988557288,2988557291,PL
-2988557292,2988557295,FR
-2988557296,2988557299,BE
-2988557300,2988557303,PL
-2988557304,2988557311,CZ
-2988557312,2988557327,DE
-2988557328,2988557343,ES
-2988557344,2988557359,FR
-2988557360,2988557375,PL
-2988557376,2988557379,FR
-2988557380,2988557383,PL
-2988557384,2988557387,GB
-2988557388,2988557391,CH
-2988557392,2988557399,PL
-2988557400,2988557403,ES
-2988557404,2988557407,IT
-2988557408,2988557427,ES
-2988557428,2988557431,DE
-2988557432,2988557435,PL
-2988557436,2988557439,ES
-2988557440,2988557471,GB
-2988557472,2988557487,PL
-2988557488,2988557491,FI
-2988557492,2988557495,FR
-2988557496,2988557503,PL
-2988557504,2988557511,FR
-2988557512,2988557515,GB
-2988557516,2988557519,PL
-2988557520,2988557523,FR
-2988557524,2988557531,PL
-2988557532,2988557535,DE
-2988557536,2988557543,PL
-2988557544,2988557551,GB
-2988557552,2988557599,FR
-2988557600,2988557631,IT
-2988557632,2988557635,GB
-2988557636,2988557639,PT
-2988557640,2988557643,IE
-2988557644,2988557647,GB
-2988557648,2988557651,NL
-2988557652,2988557655,FR
-2988557656,2988557663,DE
-2988557664,2988557695,PL
-2988557696,2988557727,FR
-2988557728,2988557759,PL
-2988557760,2988557763,DE
-2988557764,2988557767,ES
-2988557768,2988557771,PL
-2988557772,2988557775,FR
-2988557776,2988557791,BE
-2988557792,2988557951,FR
-2988557952,2988557983,LT
-2988557984,2988557999,NL
-2988558000,2988558015,IE
-2988558016,2988558047,FR
-2988558048,2988558063,PL
-2988558064,2988558067,DE
-2988558068,2988558071,FI
-2988558072,2988558075,DE
-2988558076,2988558079,PL
-2988558080,2988558083,FR
-2988558084,2988558087,PL
-2988558088,2988558095,FR
-2988558096,2988558103,PL
-2988558104,2988558115,IE
-2988558116,2988558123,GB
-2988558124,2988558127,FR
-2988558128,2988558131,DE
-2988558132,2988558135,PL
-2988558136,2988558139,GB
-2988558140,2988558143,DE
-2988558144,2988558191,FR
-2988558192,2988558199,CZ
-2988558200,2988558203,PL
+2988556212,2988556359,FR
+2988556360,2988556363,ES
+2988556364,2988557507,FR
+2988557508,2988557511,ES
+2988557512,2988557539,FR
+2988557540,2988557543,ES
+2988557544,2988558203,FR
2988558204,2988558207,DE
-2988558208,2988558271,ES
-2988558272,2988558335,FI
-2988558336,2988558399,IE
-2988558400,2988558463,LT
-2988558464,2988558527,NL
-2988558528,2988558591,PL
-2988558592,2988558655,GB
-2988558656,2988558719,FR
-2988558720,2988558727,PL
-2988558728,2988558731,IT
-2988558732,2988558735,PT
-2988558736,2988558743,ES
-2988558744,2988558747,FR
-2988558748,2988558767,GB
-2988558768,2988558783,CH
-2988558784,2988558799,FR
-2988558800,2988558803,IT
-2988558804,2988558807,FR
-2988558808,2988558811,BE
-2988558812,2988558815,FR
-2988558816,2988558831,PT
-2988558832,2988558847,IT
-2988558848,2988558863,FR
-2988558864,2988558879,NL
-2988558880,2988558883,FR
-2988558884,2988558887,BE
-2988558888,2988558891,GB
-2988558892,2988558895,NL
-2988558896,2988558899,CH
-2988558900,2988558903,FR
-2988558904,2988558907,NL
-2988558908,2988558911,PT
-2988558912,2988558927,LT
-2988558928,2988558935,GB
-2988558936,2988558939,ES
-2988558940,2988558943,GB
-2988558944,2988558975,FR
-2988558976,2988559007,GB
-2988559008,2988559011,BE
-2988559012,2988559015,PL
-2988559016,2988559023,DE
-2988559024,2988559043,FR
-2988559044,2988559047,NL
-2988559048,2988559051,FR
-2988559052,2988559055,CZ
-2988559056,2988559059,NL
-2988559060,2988559063,LT
-2988559064,2988559071,FR
-2988559072,2988559135,ES
-2988559136,2988559139,DE
-2988559140,2988559147,PL
-2988559148,2988559151,GB
-2988559152,2988559263,FR
-2988559264,2988559295,LT
-2988559296,2988559359,PL
-2988559360,2988559615,FR
-2988559616,2988559619,ES
-2988559620,2988559631,FR
-2988559632,2988559663,IE
-2988559664,2988559679,ES
-2988559680,2988559687,NL
-2988559688,2988559691,FR
-2988559692,2988559695,PL
-2988559696,2988559703,FR
-2988559704,2988559707,DE
-2988559708,2988559723,FR
-2988559724,2988559727,IT
-2988559728,2988559731,DE
-2988559732,2988559735,FR
-2988559736,2988559743,ES
-2988559744,2988559807,FR
-2988559808,2988559871,ES
-2988559872,2988560383,IT
-2988560384,2988560387,FR
-2988560388,2988560391,ES
-2988560392,2988560395,GB
-2988560396,2988560399,FR
-2988560400,2988560415,IE
-2988560416,2988560431,FR
-2988560432,2988560439,CH
-2988560440,2988560443,DE
-2988560444,2988560447,PL
-2988560448,2988560451,FR
-2988560452,2988560455,PL
-2988560456,2988560459,FR
-2988560460,2988560463,CH
-2988560464,2988560479,PL
-2988560480,2988560515,ES
-2988560516,2988560519,FI
-2988560520,2988560527,FR
-2988560528,2988560535,ES
-2988560536,2988560543,IE
-2988560544,2988560575,GB
-2988560576,2988560579,IT
-2988560580,2988560587,ES
-2988560588,2988560595,FR
-2988560596,2988560599,IT
-2988560600,2988560603,PL
-2988560604,2988560623,FR
-2988560624,2988560627,PL
-2988560628,2988560631,FR
-2988560632,2988560635,IE
-2988560636,2988560639,FR
-2988560640,2988560703,GB
-2988560704,2988560711,DE
-2988560712,2988560719,PL
-2988560720,2988560751,DE
-2988560752,2988560759,FR
-2988560760,2988560767,FI
-2988560768,2988560783,FR
-2988560784,2988560799,NL
-2988560800,2988560815,DE
-2988560816,2988560831,FR
-2988560832,2988560863,GB
-2988560864,2988560871,PL
-2988560872,2988560895,GB
-2988560896,2988560911,FR
-2988560912,2988560919,ES
-2988560920,2988560923,DE
-2988560924,2988560935,FR
-2988560936,2988560939,NL
-2988560940,2988560975,FR
-2988560976,2988560991,PL
-2988560992,2988560995,FR
-2988560996,2988560999,PL
-2988561000,2988561031,FR
-2988561032,2988561039,ES
-2988561040,2988561043,GB
-2988561044,2988561047,DE
-2988561048,2988561051,PL
-2988561052,2988561055,GB
-2988561056,2988561059,FR
-2988561060,2988561071,PL
-2988561072,2988561075,ES
-2988561076,2988561079,FR
-2988561080,2988561083,PL
-2988561084,2988561087,GB
-2988561088,2988561091,FR
-2988561092,2988561095,LT
-2988561096,2988561099,NL
-2988561100,2988561103,CZ
-2988561104,2988561119,BE
-2988561120,2988561171,FR
-2988561172,2988561175,PL
-2988561176,2988561179,ES
-2988561180,2988561183,NL
-2988561184,2988561187,GB
-2988561188,2988561191,FR
-2988561192,2988561195,CZ
-2988561196,2988561199,LT
-2988561200,2988561203,BE
-2988561204,2988561207,GB
-2988561208,2988561215,PL
-2988561216,2988561231,FR
-2988561232,2988561235,PT
-2988561236,2988561239,GB
-2988561240,2988561255,PL
-2988561256,2988561259,ES
-2988561260,2988561283,FR
-2988561284,2988561287,NL
-2988561288,2988561291,ES
-2988561292,2988561295,PT
-2988561296,2988561303,GB
-2988561304,2988561343,FR
-2988561344,2988561375,PL
-2988561376,2988561391,FR
-2988561392,2988561403,ES
-2988561404,2988561407,LT
-2988561408,2988561423,IE
-2988561424,2988561431,PL
-2988561432,2988561519,FR
-2988561520,2988561535,PT
-2988561536,2988561543,FR
-2988561544,2988561547,PL
-2988561548,2988561551,FR
-2988561552,2988561567,PL
-2988561568,2988561575,FR
-2988561576,2988561579,PL
-2988561580,2988561583,FR
+2988558208,2988558803,FR
+2988558804,2988558807,ES
+2988558808,2988561583,FR
2988561584,2988561591,GB
-2988561592,2988561595,FR
-2988561596,2988561599,PL
-2988561600,2988561631,NL
-2988561632,2988561663,PL
-2988561664,2988561667,GB
-2988561668,2988561671,DE
-2988561672,2988561675,NL
-2988561676,2988561679,FI
-2988561680,2988561683,FR
-2988561684,2988561687,ES
-2988561688,2988561691,DE
-2988561692,2988561695,LT
-2988561696,2988561727,GB
-2988561728,2988561743,PL
-2988561744,2988561747,FR
-2988561748,2988561751,DE
-2988561752,2988561755,FR
-2988561756,2988561759,PL
-2988561760,2988561763,LT
-2988561764,2988561767,PT
-2988561768,2988561843,FR
-2988561844,2988561847,IT
-2988561848,2988561855,FR
-2988561856,2988561871,IE
-2988561872,2988561875,CH
-2988561876,2988561879,FR
-2988561880,2988561887,FR
-2988561888,2988561903,PL
-2988561904,2988561983,FR
-2988561984,2988562015,DE
-2988562016,2988562023,ES
-2988562024,2988562027,PL
-2988562028,2988562031,LT
-2988562032,2988562047,PL
-2988562048,2988562079,DE
-2988562080,2988562095,FR
-2988562096,2988562111,IE
-2988562112,2988562115,NL
-2988562116,2988562127,FR
-2988562128,2988562143,ES
-2988562144,2988562151,FR
-2988562152,2988562159,IT
-2988562160,2988562163,PL
-2988562164,2988562167,DE
-2988562168,2988562175,IT
-2988562176,2988562431,NL
-2988562432,2988562567,FR
-2988562568,2988562575,CH
-2988562576,2988562583,PL
-2988562584,2988562587,FR
-2988562588,2988562591,IT
-2988562592,2988562599,GB
-2988562600,2988562607,FR
-2988562608,2988562611,PT
-2988562612,2988562623,FR
-2988562624,2988562687,FI
-2988562688,2988562703,NL
-2988562704,2988562707,FR
-2988562708,2988562711,DE
-2988562712,2988562719,FR
-2988562720,2988562815,BE
-2988562816,2988562823,PL
-2988562824,2988562831,PT
-2988562832,2988562835,FR
-2988562836,2988562839,NL
-2988562840,2988562843,IT
-2988562844,2988562847,PL
+2988561592,2988561763,FR
+2988561764,2988561767,IT
+2988561768,2988562847,FR
2988562848,2988562863,GB
-2988562864,2988562911,FR
-2988562912,2988562943,PL
-2988562944,2988563011,FR
-2988563012,2988563015,PT
-2988563016,2988563023,GB
-2988563024,2988563043,FR
-2988563044,2988563047,ES
-2988563048,2988563055,FR
-2988563056,2988563059,NL
-2988563060,2988563063,CH
-2988563064,2988563067,FI
-2988563068,2988563075,PT
-2988563076,2988563079,GB
-2988563080,2988563083,DE
-2988563084,2988563087,FR
-2988563088,2988563091,PL
-2988563092,2988563099,GB
-2988563100,2988563135,FR
-2988563136,2988563151,PL
-2988563152,2988563183,FR
-2988563184,2988563187,CZ
-2988563188,2988563191,PL
-2988563192,2988563199,FR
-2988563200,2988563455,IE
-2988563456,2988563487,FR
-2988563488,2988563499,GB
-2988563500,2988563503,FR
-2988563504,2988563519,PL
-2988563520,2988563523,CZ
-2988563524,2988563527,FI
-2988563528,2988563535,PL
-2988563536,2988563555,FR
-2988563556,2988563559,BE
-2988563560,2988563567,FR
-2988563568,2988563571,NL
-2988563572,2988563583,GB
-2988563584,2988563591,ES
-2988563592,2988563599,GB
-2988563600,2988563607,ES
-2988563608,2988563615,DE
-2988563616,2988563647,FR
-2988563648,2988563663,LT
-2988563664,2988563667,FR
-2988563668,2988563671,PT
-2988563672,2988563675,FR
-2988563676,2988563679,NL
-2988563680,2988563967,FR
-2988563968,2988563999,BE
-2988564000,2988564003,PL
-2988564004,2988564007,BE
-2988564008,2988564011,FR
-2988564012,2988564015,IE
-2988564016,2988564019,ES
-2988564020,2988564031,PL
-2988564032,2988564063,BE
-2988564064,2988564143,FR
+2988562864,2988564143,FR
2988564144,2988564159,ES
-2988564160,2988564175,FR
-2988564176,2988564183,GB
-2988564184,2988564187,PL
-2988564188,2988564191,GB
-2988564192,2988564195,ES
-2988564196,2988564199,LT
-2988564200,2988564203,DE
-2988564204,2988564215,FR
-2988564216,2988564219,GB
-2988564220,2988564223,IT
-2988564224,2988564275,FR
-2988564276,2988564279,CH
-2988564280,2988564287,ES
-2988564288,2988564303,FR
-2988564304,2988564307,IT
-2988564308,2988564311,PL
-2988564312,2988564319,ES
-2988564320,2988564351,FR
-2988564352,2988564367,GB
-2988564368,2988564383,FR
-2988564384,2988564387,IE
-2988564388,2988564391,GB
-2988564392,2988564395,NL
-2988564396,2988564399,CH
-2988564400,2988564403,DE
-2988564404,2988564407,ES
-2988564408,2988564471,FR
-2988564472,2988564479,GB
-2988564480,2988572671,FR
+2988564160,2988572671,FR
2988572672,2988703743,RU
2988703744,2988834815,PL
2988834816,2988965887,CH
@@ -98407,43 +45459,28 @@
2989228032,2989490175,RU
2989490176,2989555711,HU
2989555712,2989621247,RU
-2989621248,2989640447,BE
-2989640448,2989640703,FR
-2989640704,2989752319,BE
+2989621248,2989752319,BE
2989752320,2989817855,SY
2989817856,2989883391,KW
2989883392,2989948927,UA
2989948928,2990014463,FI
2990014464,2990079999,PL
-2990080000,2990145535,RU
+2990080000,2990081023,UA
+2990081024,2990096383,GB
+2990096384,2990104575,RU
+2990104576,2990112767,GB
+2990112768,2990145535,RU
2990145536,2990211071,SI
2990211072,2990276607,GR
2990276608,2990342143,ES
-2990342144,2990385919,KW
-2990385920,2990386175,US
-2990386176,2990386687,KW
-2990386688,2990386943,US
-2990386944,2990407679,KW
-2990407680,2990473215,RU
+2990342144,2990407679,KW
+2990407680,2990440447,GB
+2990440448,2990473215,NL
2990473216,2990475674,DE
2990475675,2990475675,HR
2990475676,2990500113,DE
2990500114,2990500115,PL
-2990500116,2990505535,DE
-2990505536,2990505537,IT
-2990505538,2990505538,DE
-2990505539,2990505599,IT
-2990505600,2990515967,DE
-2990515968,2990515983,IT
-2990515984,2990517655,DE
-2990517656,2990517663,IT
-2990517664,2990518015,DE
-2990518016,2990518079,IT
-2990518080,2990528703,DE
-2990528704,2990528735,RS
-2990528736,2990534655,DE
-2990534656,2990534687,EG
-2990534688,2990538751,DE
+2990500116,2990538751,DE
2990538752,2991063039,RU
2991063040,2991067135,SE
2991067136,2991071231,DK
@@ -98454,185 +45491,9 @@
2991128576,2991144959,PL
2991144960,2991161343,SA
2991161344,2991177727,FR
-2991177728,2991178751,SE
-2991178752,2991179263,SE
-2991179264,2991179327,SE
-2991179328,2991182591,SE
-2991182592,2991182847,SE
-2991182848,2991182943,SE
-2991182944,2991182975,SE
-2991182976,2991183071,SE
-2991183072,2991183103,SE
-2991183104,2991183871,SE
-2991183872,2991185919,SE
-2991185920,2991185951,GB
-2991185952,2991185967,NL
-2991185968,2991185983,DE
-2991185984,2991185999,DK
-2991186000,2991186015,ES
-2991186016,2991186019,FR
-2991186020,2991186175,SE
-2991186176,2991186207,GB
-2991186208,2991186223,NL
-2991186224,2991186239,DE
-2991186240,2991186255,DK
-2991186256,2991186271,ES
-2991186272,2991186275,FR
-2991186276,2991186431,SE
-2991186432,2991186463,GB
-2991186464,2991186479,NL
-2991186480,2991186495,DE
-2991186496,2991186511,DK
-2991186512,2991186527,ES
-2991186528,2991186531,FR
-2991186532,2991186687,SE
-2991186688,2991186719,GB
-2991186720,2991186735,NL
-2991186736,2991186751,DE
-2991186752,2991186767,DK
-2991186768,2991186783,ES
-2991186784,2991186787,FR
-2991186788,2991186943,SE
-2991186944,2991186975,GB
-2991186976,2991186991,NL
-2991186992,2991187007,DE
-2991187008,2991187023,DK
-2991187024,2991187039,ES
-2991187040,2991187043,FR
-2991187044,2991187199,SE
-2991187200,2991187231,GB
-2991187232,2991187247,NL
-2991187248,2991187263,DE
-2991187264,2991187279,DK
-2991187280,2991187295,ES
-2991187296,2991187299,FR
-2991187300,2991187455,SE
-2991187456,2991187487,GB
-2991187488,2991187503,NL
-2991187504,2991187519,DE
-2991187520,2991187535,DK
-2991187536,2991187551,ES
-2991187552,2991187555,FR
-2991187556,2991187711,SE
-2991187712,2991187743,GB
-2991187744,2991187759,NL
-2991187760,2991187775,DE
-2991187776,2991187791,DK
-2991187792,2991187807,ES
-2991187808,2991187811,FR
-2991187812,2991187967,SE
-2991187968,2991187999,GB
-2991188000,2991188015,NL
-2991188016,2991188031,DE
-2991188032,2991188047,DK
-2991188048,2991188063,ES
-2991188064,2991188067,FR
-2991188068,2991188223,SE
-2991188224,2991188255,GB
-2991188256,2991188271,NL
-2991188272,2991188287,DE
-2991188288,2991188303,DK
-2991188304,2991188319,ES
-2991188320,2991188323,FR
-2991188324,2991188479,SE
-2991188480,2991188511,GB
-2991188512,2991188527,NL
-2991188528,2991188543,DE
-2991188544,2991188559,DK
-2991188560,2991188575,ES
-2991188576,2991188579,FR
-2991188580,2991188735,SE
-2991188736,2991188767,GB
-2991188768,2991188783,NL
-2991188784,2991188799,DE
-2991188800,2991188815,DK
-2991188816,2991188831,ES
-2991188832,2991188835,FR
-2991188836,2991188991,SE
-2991188992,2991189023,GB
-2991189024,2991189039,NL
-2991189040,2991189055,DE
-2991189056,2991189071,DK
-2991189072,2991189087,ES
-2991189088,2991189091,FR
-2991189092,2991189247,SE
-2991189248,2991189279,GB
-2991189280,2991189295,NL
-2991189296,2991189311,DE
-2991189312,2991189327,DK
-2991189328,2991189343,ES
-2991189344,2991189347,FR
-2991189348,2991189503,SE
-2991189504,2991189535,GB
-2991189536,2991189551,NL
-2991189552,2991189567,DE
-2991189568,2991189583,DK
-2991189584,2991189599,ES
-2991189600,2991189603,FR
-2991189604,2991189759,SE
-2991189760,2991189791,GB
-2991189792,2991189807,NL
-2991189808,2991189823,DE
-2991189824,2991189839,DK
-2991189840,2991189855,ES
-2991189856,2991189859,FR
-2991189860,2991190015,SE
-2991190016,2991190047,GB
-2991190048,2991190063,NL
-2991190064,2991190079,DE
-2991190080,2991190095,DK
-2991190096,2991190111,ES
-2991190112,2991190115,FR
-2991190116,2991190271,SE
-2991190272,2991190303,GB
-2991190304,2991190319,NL
-2991190320,2991190335,DE
-2991190336,2991190351,DK
-2991190352,2991190367,ES
-2991190368,2991190371,FR
-2991190372,2991190527,SE
-2991190528,2991190559,GB
-2991190560,2991190575,NL
-2991190576,2991190591,DE
-2991190592,2991190607,DK
-2991190608,2991190623,ES
-2991190624,2991190627,FR
-2991190628,2991190783,SE
-2991190784,2991190815,GB
-2991190816,2991190831,NL
-2991190832,2991190847,DE
-2991190848,2991190863,DK
-2991190864,2991190879,ES
-2991190880,2991190883,FR
-2991190884,2991191039,SE
-2991191040,2991191071,GB
-2991191072,2991191087,NL
-2991191088,2991191103,DE
-2991191104,2991191119,DK
-2991191120,2991191135,ES
-2991191136,2991191139,FR
-2991191140,2991191295,SE
-2991191296,2991191327,GB
-2991191328,2991191343,NL
-2991191344,2991191359,DE
-2991191360,2991191375,DK
-2991191376,2991191391,ES
-2991191392,2991191395,FR
-2991191396,2991191551,SE
-2991191552,2991191583,GB
-2991191584,2991191599,NL
-2991191600,2991191615,DE
-2991191616,2991191631,DK
-2991191632,2991191647,ES
-2991191648,2991191651,FR
-2991191652,2991191807,SE
-2991191808,2991192063,FI
-2991192064,2991192255,DK
-2991192256,2991192319,IT
-2991192320,2991193727,SE
-2991193728,2991193791,IT
-2991193792,2991193823,PL
-2991193824,2991194111,SE
+2991177728,2991179503,SE
+2991179504,2991179507,ES
+2991179508,2991194111,SE
2991194112,2991210495,NO
2991210496,2991243263,RU
2991243264,2991259647,UA
@@ -98641,7 +45502,7 @@
2991308800,2991325183,BG
2991325184,2991341567,AZ
2991341568,2991357951,MD
-2991357952,2991374335,US
+2991357952,2991374335,DE
2991374336,2991390719,RU
2991390720,2991407103,BA
2991407104,2991423487,DE
@@ -98654,44 +45515,11 @@
2991521792,2991538175,RS
2991538176,2991554559,SI
2991554560,2991570943,GB
-2991570944,2991571455,IT
-2991571456,2991571967,GB
-2991571968,2991572479,IT
-2991572480,2991572991,IL
-2991572992,2991573503,GB
-2991573504,2991574015,ES
-2991574016,2991574527,DE
-2991574528,2991575039,GB
-2991575040,2991575551,NL
-2991575552,2991576063,GB
-2991576064,2991587071,IT
-2991587072,2991587327,BH
+2991570944,2991587327,IT
2991587328,2991718399,SA
2991718400,2991849471,CH
2991849472,2991980543,NL
-2991980544,2991980807,UA
-2991980808,2991980815,NA
-2991980816,2991981495,UA
-2991981496,2991981503,NA
-2991981504,2991982535,UA
-2991982536,2991982543,GL
-2991982544,2991982592,UA
-2991982593,2991982599,JP
-2991982600,2991982607,UA
-2991982608,2991982751,JP
-2991982752,2991982759,UA
-2991982760,2991982846,JP
-2991982847,2991983103,UA
-2991983104,2991983111,IN
-2991983112,2991983367,UA
-2991983368,2991983615,JP
-2991983616,2991985951,UA
-2991985952,2991985959,JP
-2991985960,2991985983,UA
-2991985984,2991986079,JP
-2991986080,2991986087,UA
-2991986088,2991986175,JP
-2991986176,2992111615,UA
+2991980544,2992111615,UA
2992111616,2992373759,KZ
2992373760,2992635903,UA
2992635904,2993684479,GB
@@ -98708,8 +45536,7 @@
2995007488,2995009535,TR
2995009536,2995011583,ES
2995011584,2995013631,DE
-2995013632,2995013887,MT
-2995013888,2995015679,SE
+2995013632,2995015679,SE
2995015680,2995017727,BG
2995017728,2995019775,IT
2995019776,2995021823,RU
@@ -98718,10 +45545,9 @@
2995044352,2995046399,ES
2995046400,2995048447,RU
2995048448,2995050495,NL
-2995050496,2995050561,AT
-2995050562,2995050562,RS
-2995050563,2995050751,AT
-2995050752,2995052543,AL
+2995050496,2995050561,AL
+2995050562,2995050562,XK
+2995050563,2995052543,AL
2995052544,2995056639,DK
2995056640,2995058687,DE
2995058688,2995060735,SE
@@ -98764,100 +45590,19 @@
2996809728,2996813823,UA
2996813824,2996817919,PL
2996817920,2996826111,UA
-2996826112,2996828160,BY
-2996828161,2996830208,RU
-2996830209,2996862975,HR
+2996826112,2996828159,BY
+2996828160,2996830207,RU
+2996830208,2996862975,HR
2996862976,2996895743,AM
2996895744,2996928511,KW
2996928512,2996994047,RU
-2996994048,2996994943,DE
-2996994944,2996995071,US
-2996995072,2996995327,BZ
-2996995328,2996995647,DE
-2996995648,2996995711,BZ
-2996995712,2996995775,BY
-2996995776,2996995839,RU
-2996995840,2996996073,DE
-2996996074,2996996074,DE
-2996996075,2996996287,DE
-2996996288,2996996351,RU
-2996996352,2996996383,DE
-2996996384,2996996447,RU
-2996996448,2996996575,UA
-2996996576,2996996639,DE
-2996996640,2996996767,UA
-2996996768,2996996831,RU
-2996996832,2996996863,DE
-2996996864,2996997119,CN
-2996997120,2996998143,DE
-2996998144,2996998271,UA
-2996998272,2996998527,DE
-2996998528,2996998655,UA
-2996998656,2996998719,DE
-2996998720,2996998911,RU
-2996998912,2996999359,DE
-2996999360,2996999423,IL
-2996999424,2996999551,IN
-2996999552,2996999679,DE
+2996994048,2996999679,DE
2996999680,2996999935,GB
-2996999936,2997000447,DE
-2997000448,2997000703,RU
-2997000704,2997001471,DE
-2997001472,2997001727,BZ
-2997001728,2997001983,TR
-2997001984,2997003071,DE
-2997003072,2997003135,RU
-2997003136,2997003199,DE
-2997003200,2997003263,RU
-2997003264,2997003287,DE
-2997003288,2997003295,NL
-2997003296,2997003327,DE
-2997003328,2997003391,RU
-2997003392,2997004031,DE
-2997004032,2997004287,BZ
-2997004288,2997004543,CA
-2997004544,2997004607,DE
+2996999936,2997004607,DE
2997004608,2997004671,RU
-2997004672,2997004799,DE
-2997004800,2997005055,BZ
-2997005056,2997005183,GB
-2997005184,2997005375,DE
-2997005376,2997005439,GR
-2997005440,2997005567,GB
-2997005568,2997005823,BZ
-2997005824,2997006335,DE
-2997006336,2997006591,TR
-2997006592,2997006655,DE
-2997006656,2997006719,TR
-2997006720,2997006847,RU
-2997006848,2997008255,DE
-2997008256,2997008383,LT
-2997008384,2997008447,DE
-2997008448,2997008511,RU
-2997008512,2997008639,LT
-2997008640,2997008959,DE
-2997008960,2997009023,RU
-2997009024,2997018623,DE
+2997004672,2997018623,DE
2997018624,2997019135,GB
-2997019136,2997019391,TR
-2997019392,2997019711,DE
-2997019712,2997019903,US
-2997019904,2997020719,DE
-2997020720,2997020735,SE
-2997020736,2997020799,DE
-2997020800,2997020863,CA
-2997020864,2997022079,DE
-2997022080,2997022143,GB
-2997022144,2997022239,DE
-2997022240,2997022303,NL
-2997022304,2997022367,SG
-2997022368,2997022751,DE
-2997022752,2997022783,TR
-2997022784,2997022847,DE
-2997022848,2997023231,BZ
-2997023232,2997024255,DE
-2997024256,2997024511,TR
-2997024512,2997026815,DE
+2997019136,2997026815,DE
2997026816,2997059583,RU
2997059584,2997092351,BY
2997092352,2997125119,NO
@@ -98871,9 +45616,7 @@
2997387264,2997420031,BY
2997420032,2997452799,RU
2997452800,2997485567,BG
-2997485568,2997486847,FR
-2997486848,2997486911,BH
-2997486912,2997506559,FR
+2997485568,2997506559,FR
2997506560,2997506815,GB
2997506816,2997507071,ES
2997507072,2997507327,IT
@@ -98893,60 +45636,16 @@
2997513352,2997513352,AT
2997513353,2997513353,NL
2997513354,2997513354,IE
-2997513355,2997518335,FR
-2997518336,2997528063,RU
-2997528064,2997528319,UA
-2997528320,2997583871,RU
+2997513355,2997515683,FR
+2997515684,2997515684,GB
+2997515685,2997518335,FR
+2997518336,2997583871,RU
2997583872,2997616639,SY
2997616640,2997649407,SI
2997649408,2997682175,BY
2997682176,2997714943,RU
2997714944,2997747711,IR
-2997747712,2997748479,DE
-2997748480,2997748735,AT
-2997748736,2997748991,CH
-2997748992,2997749119,GB
-2997749120,2997749247,IE
-2997749248,2997749375,FR
-2997749376,2997749503,ES
-2997749504,2997749631,PT
-2997749632,2997749759,IT
-2997749760,2997749887,PL
-2997749888,2997750015,CZ
-2997750016,2997750143,SK
-2997750144,2997750271,RU
-2997750272,2997750399,RO
-2997750400,2997750527,HU
-2997750528,2997750655,BA
-2997750656,2997750783,HR
-2997750784,2997750911,GR
-2997750912,2997751039,TR
-2997751040,2997751167,NO
-2997751168,2997751295,FI
-2997751296,2997751423,SE
-2997751424,2997751551,DK
-2997751552,2997751679,LI
-2997751680,2997751807,BE
-2997751808,2997751935,NL
-2997751936,2997752063,LU
-2997752064,2997752191,CA
-2997752192,2997752319,MX
-2997752320,2997752447,EE
-2997752448,2997752575,LV
-2997752576,2997752703,LT
-2997752704,2997752831,CN
-2997752832,2997752959,KR
-2997752960,2997753087,JP
-2997753088,2997753215,AU
-2997753216,2997753343,NZ
-2997753344,2997753471,VN
-2997753472,2997753599,BR
-2997753600,2997753727,TH
-2997753728,2997753855,IN
-2997753856,2997754655,US
-2997754656,2997754879,DE
-2997754880,2997754895,SG
-2997754896,2997780479,DE
+2997747712,2997780479,CH
2997780480,2997813247,SE
2997813248,2997817343,AL
2997817344,2997819391,RS
@@ -98954,44 +45653,28 @@
2997823488,2997825535,RS
2997825536,2997829631,AL
2997829632,2997846015,RS
-2997846016,2997847255,MD
-2997847256,2997847263,DE
-2997847264,2997847743,MD
-2997847744,2997847751,DE
-2997847752,2997847759,US
-2997847760,2997847767,CA
-2997847768,2997847775,KR
-2997847776,2997847783,JP
-2997847784,2997847791,CN
-2997847792,2997847799,RU
-2997847800,2997847807,PA
-2997847808,2997878783,MD
+2997846016,2997878783,MD
2997878784,2998140927,RU
2998140928,2998403071,PL
2998403072,2998665215,RU
2998665216,2998927359,AT
-2998927360,2999451647,CH
+2998927360,2998991615,CH
+2998991616,2998991871,DE
+2998991872,2999026943,CH
+2999026944,2999027071,DE
+2999027072,2999380223,CH
+2999380224,2999380479,DE
+2999380480,2999451647,CH
2999451648,2999713791,DE
2999713792,2999975935,RU
2999975936,2999984127,FR
-2999984128,2999985695,BE
-2999985696,2999985711,GB
-2999985712,2999985727,BE
-2999985728,2999985743,CZ
-2999985744,2999985759,NL
-2999985760,2999988991,BE
-2999988992,2999988999,FR
-2999989000,2999989007,BE
-2999989008,2999989119,NL
-2999989120,2999989247,FR
-2999989248,2999991039,BE
-2999991040,2999992319,NL
+2999984128,2999989005,NL
+2999989006,2999989006,BE
+2999989007,2999992319,NL
2999992320,3000000511,RU
3000000512,3000008703,DE
3000008704,3000016895,RU
-3000016896,3000020991,GB
-3000020992,3000023039,US
-3000023040,3000025087,GB
+3000016896,3000025087,GB
3000025088,3000033279,GI
3000033280,3000041471,RU
3000041472,3000049663,BA
@@ -99040,7 +45723,7 @@
3000301568,3000302591,RU
3000302592,3000303103,LV
3000303104,3000303359,CH
-3000303360,3000303615,DE
+3000303360,3000303615,PL
3000303616,3000305663,UA
3000305664,3000313855,RU
3000313856,3000315903,CZ
@@ -99139,14 +45822,11 @@
3000682496,3000684543,UZ
3000684544,3000688639,RU
3000688640,3000692735,PL
-3000692736,3000696831,UA
3000696832,3000700927,RS
3000700928,3000705023,PL
3000705024,3000709119,RU
3000709120,3000713215,AM
-3000713216,3000715519,IT
-3000715520,3000715775,US
-3000715776,3000717311,IT
+3000713216,3000717311,IT
3000717312,3000721407,UA
3000721408,3000733695,PL
3000733696,3000737791,RU
@@ -99166,57 +45846,14 @@
3001815040,3001819135,RU
3001819136,3001823231,IR
3001823232,3001827327,GE
-3001827328,3001827647,SE
-3001827648,3001827743,GB
-3001827744,3001827775,US
-3001827776,3001828864,SE
-3001828865,3001828896,US
-3001828897,3001828927,SE
-3001828928,3001828991,DE
-3001828992,3001829055,GB
-3001829056,3001829120,SE
-3001829121,3001829152,US
-3001829153,3001829183,SE
-3001829184,3001829247,DE
-3001829248,3001829311,GB
-3001829312,3001830400,SE
-3001830401,3001830432,GB
-3001830433,3001830495,SE
-3001830496,3001830527,GB
-3001830528,3001830559,IT
-3001830560,3001830591,FR
-3001830592,3001830623,US
-3001830624,3001830631,SE
-3001830632,3001830639,IT
-3001830640,3001830656,SE
-3001830657,3001830688,GB
-3001830689,3001830751,SE
-3001830752,3001830783,GB
-3001830784,3001830815,IT
-3001830816,3001830847,FR
-3001830848,3001830879,US
-3001830880,3001830887,SE
-3001830888,3001830895,IT
-3001830896,3001830912,SE
-3001830913,3001830944,GB
-3001830945,3001831007,SE
-3001831008,3001831039,GB
-3001831040,3001831071,IT
-3001831072,3001831103,FR
-3001831104,3001831135,US
-3001831136,3001831167,IT
-3001831168,3001831199,GB
-3001831200,3001831263,SE
-3001831264,3001831295,GB
-3001831296,3001831327,IT
-3001831328,3001831359,FR
-3001831360,3001831391,US
-3001831392,3001831423,SE
+3001827328,3001831423,SE
3001831424,3001835519,BA
3001835520,3001839615,RU
3001839616,3001843711,ES
-3001843712,3001846271,RU
-3001846272,3001846783,GB
+3001843712,3001845759,RU
+3001845760,3001846238,GB
+3001846239,3001846239,RU
+3001846240,3001846783,GB
3001846784,3001847807,RU
3001847808,3001851903,GB
3001851904,3001855999,IT
@@ -99227,112 +45864,13 @@
3001862144,3001863167,EE
3001863168,3001864191,LT
3001864192,3001868287,RU
-3001868288,3001868799,FR
-3001868800,3001868803,US
-3001868804,3001868807,CN
-3001868808,3001868811,JP
-3001868812,3001868815,DE
-3001868816,3001868819,FR
-3001868820,3001868823,GB
-3001868824,3001868827,BR
-3001868828,3001868831,IT
-3001868832,3001868835,FR
-3001868836,3001868839,IN
-3001868840,3001868843,RU
-3001868844,3001868847,ES
-3001868848,3001868851,AU
-3001868852,3001868855,MX
-3001868856,3001868859,KR
-3001868860,3001868863,FR
-3001868864,3001868867,TR
-3001868868,3001868871,ID
-3001868872,3001868875,CH
-3001868876,3001868879,PL
-3001868880,3001868883,BE
-3001868884,3001868887,SE
-3001868888,3001868891,SA
-3001868892,3001868895,TW
-3001868896,3001868899,SJ
-3001868900,3001868903,AT
-3001868904,3001868907,AR
-3001868908,3001868911,ZA
-3001868912,3001868915,IR
-3001868916,3001868919,TH
-3001868920,3001868923,DK
-3001868924,3001868927,GR
-3001868928,3001868931,AE
-3001868932,3001868935,VE
-3001868936,3001868939,CD
-3001868940,3001868943,FI
-3001868944,3001868947,MY
-3001868948,3001868951,PT
-3001868952,3001868955,HK
-3001868956,3001868959,SG
-3001868960,3001868963,EG
-3001868964,3001868967,NG
-3001868968,3001868971,IL
-3001868972,3001868975,IE
-3001868976,3001868979,CL
-3001868980,3001868983,CZ
-3001868984,3001868987,PH
-3001868988,3001868991,PK
-3001868992,3001868995,RO
-3001868996,3001868999,DZ
-3001869000,3001869003,PE
-3001869004,3001869007,NZ
-3001869008,3001869011,KZ
-3001869012,3001869015,UA
-3001869016,3001869019,KW
-3001869020,3001869023,QA
-3001869024,3001869027,HU
-3001869028,3001869031,BD
-3001869032,3001869035,VN
-3001869036,3001869039,MA
-3001869040,3001869043,SK
-3001869044,3001869047,AO
-3001869048,3001869051,IQ
-3001869052,3001869055,LY
-3001869056,3001869311,RU
-3001869312,3001869567,SA
-3001869568,3001869599,US
-3001869600,3001869600,FR
-3001869601,3001869696,IR
-3001869697,3001869823,YE
-3001869824,3001869887,US
-3001869888,3001870079,FR
-3001870080,3001870335,US
-3001870336,3001870591,IT
-3001870592,3001870847,FR
-3001870848,3001871103,DE
-3001871104,3001871359,ES
-3001871360,3001871615,GR
-3001871616,3001871871,PL
-3001871872,3001872127,PT
-3001872128,3001872383,RO
+3001868288,3001872383,FR
3001872384,3001876479,RU
3001876480,3001880575,IT
3001880576,3001884671,RU
-3001884672,3001884927,SE
-3001884928,3001885055,NL
-3001885056,3001885087,US
-3001885088,3001885439,NL
-3001885440,3001886463,BE
-3001886464,3001886511,NL
-3001886512,3001886527,US
-3001886528,3001886543,IE
-3001886544,3001886567,NL
-3001886568,3001886575,CY
-3001886576,3001886583,GE
-3001886584,3001888767,NL
+3001884672,3001888767,NL
3001888768,3001892863,BH
-3001892864,3001893247,AZ
-3001893248,3001893631,RU
-3001893632,3001894399,AZ
-3001894400,3001894655,RU
-3001894656,3001894911,AZ
-3001894912,3001895167,RU
-3001895168,3001896191,AZ
-3001896192,3001896959,RU
+3001892864,3001896959,AZ
3001896960,3001901055,CH
3001901056,3001905151,FR
3001905152,3001909247,GB
@@ -99342,7 +45880,6 @@
3001929728,3001933823,RS
3001933824,3001937919,ES
3001937920,3001942015,RU
-3001942016,3001946111,BY
3001946112,3001950207,RU
3001950208,3001954303,CZ
3001954304,3001958399,IT
@@ -99359,9 +45896,7 @@
3002003456,3002011647,PL
3002011648,3002015743,BA
3002015744,3002019839,IT
-3002019840,3002021567,NL
-3002021568,3002021599,US
-3002021600,3002023935,NL
+3002019840,3002023935,NL
3002023936,3002028031,DE
3002028032,3002036223,GB
3002036224,3002040319,BG
@@ -99371,16 +45906,14 @@
3002052608,3002056703,IT
3002056704,3002060799,FI
3002060800,3002064895,ES
-3002064896,3002065407,BG
-3002065408,3002065919,RS
-3002065920,3002068991,BG
+3002064896,3002065432,BG
+3002065433,3002065688,RS
+3002065689,3002068991,BG
3002068992,3002073087,ES
3002073088,3002597375,TR
3002597376,3002599423,RU
3002599424,3002601471,CZ
-3002601472,3002603055,IS
-3002603056,3002603070,SL
-3002603071,3002603519,IS
+3002601472,3002603519,IS
3002603520,3002605567,SE
3002605568,3002607615,GB
3002607616,3002609663,IR
@@ -99389,13 +45922,9 @@
3002613760,3002615807,RU
3002615808,3002617855,PL
3002617856,3002619903,RU
-3002619904,3002620023,IT
-3002620024,3002620031,GB
-3002620032,3002621951,IT
+3002619904,3002621951,IT
3002621952,3002623999,NO
-3002624000,3002626551,GB
-3002626552,3002626559,US
-3002626560,3002628095,GB
+3002624000,3002628095,GB
3002628096,3002630143,NO
3002630144,3002632191,GB
3002632192,3002634239,EE
@@ -99415,11 +45944,7 @@
3002662912,3002664959,DE
3002664960,3002667007,ES
3002667008,3002669055,GE
-3002669056,3002669199,DE
-3002669200,3002669207,CH
-3002669208,3002669951,DE
-3002669952,3002669983,US
-3002669984,3002671103,DE
+3002669056,3002671103,DE
3002671104,3002673151,LV
3002673152,3002675199,GB
3002675200,3002677247,DK
@@ -99432,9 +45957,7 @@
3002691584,3002693631,MK
3002693632,3002695679,NO
3002695680,3002697727,RU
-3002697728,3002698239,DE
-3002698240,3002698751,NL
-3002698752,3002699775,DE
+3002697728,3002699775,DE
3002699776,3002701823,SE
3002701824,3002703871,NL
3002703872,3002705919,DE
@@ -99450,23 +45973,13 @@
3002728448,3002730495,FR
3002730496,3002732543,DE
3002732544,3002734591,NL
-3002734592,3002735055,CH
-3002735056,3002735063,DE
-3002735064,3002735087,CH
-3002735088,3002735103,DE
-3002735104,3002736639,CH
+3002734592,3002736639,CH
3002736640,3002738687,LT
3002738688,3002740735,PL
3002740736,3002742783,GB
-3002742784,3002742927,LI
-3002742928,3002742943,CH
-3002742944,3002743039,LI
+3002742784,3002743039,LI
3002743040,3002743047,GR
-3002743048,3002743071,LI
-3002743072,3002743103,NL
-3002743104,3002743167,LI
-3002743168,3002743199,CH
-3002743200,3002744831,LI
+3002743048,3002744831,LI
3002744832,3002746879,IT
3002746880,3002748927,GB
3002748928,3002750975,DE
@@ -99479,11 +45992,9 @@
3002763264,3002765311,RS
3002765312,3002767359,NL
3002767360,3002769407,RU
-3002769408,3002771655,DE
-3002771656,3002771663,NL
-3002771664,3002771711,DE
-3002771712,3002771719,NL
-3002771720,3002773503,DE
+3002769408,3002769919,DE
+3002769920,3002770175,ES
+3002770176,3002773503,DE
3002773504,3002775551,GB
3002775552,3002777599,RO
3002777600,3002779647,NL
@@ -99498,8 +46009,8 @@
3002798080,3002800127,FR
3002800128,3002802175,NL
3002802176,3002804223,GB
-3002804224,3002806015,TR
-3002806016,3002808319,DE
+3002804224,3002806271,TR
+3002806272,3002808319,DE
3002808320,3002810367,FI
3002810368,3002812415,AT
3002812416,3002814463,IT
@@ -99512,14 +46023,7 @@
3002826752,3002828799,SE
3002828800,3002830847,RU
3002830848,3002834943,FI
-3002834944,3002834975,CH
-3002834976,3002835887,LU
-3002835888,3002835903,US
-3002835904,3002836383,LU
-3002836384,3002836399,BE
-3002836400,3002836415,LU
-3002836416,3002836431,US
-3002836432,3002836991,LU
+3002834944,3002836991,LU
3002836992,3002841087,GB
3002841088,3002843135,CZ
3002843136,3002845183,NL
@@ -99543,77 +46047,388 @@
3003023360,3003039743,RS
3003039744,3003056127,BG
3003056128,3003058175,DE
-3003058176,3003058431,MT
-3003058432,3003058687,FI
-3003058688,3003058751,EE
-3003058752,3003058943,PH
-3003058944,3003059199,IL
-3003059200,3003059711,EE
-3003059712,3003059967,GI
-3003059968,3003060223,GG
+3003058176,3003060223,EE
3003060224,3003062271,DE
3003062272,3003064319,NL
3003064320,3003066367,RO
-3003066368,3003066895,PL
-3003066896,3003066903,RU
-3003066904,3003068415,PL
+3003066368,3003068415,PL
3003068416,3003070463,NL
3003070464,3003074559,GB
3003074560,3003076607,IT
-3003076608,3003077663,GB
-3003077664,3003077679,US
-3003077680,3003077695,GB
-3003077696,3003077711,US
-3003077712,3003077887,GB
-3003077888,3003077951,US
-3003077952,3003080703,GB
-3003080704,3003081150,FR
-3003081151,3003081156,GB
-3003081157,3003081157,ES
-3003081158,3003082751,FR
+3003076608,3003078143,GB
+3003078144,3003078151,US
+3003078152,3003078155,IN
+3003078156,3003080703,GB
+3003080704,3003082751,FR
3003082752,3003084799,ES
3003086848,3003088895,RU
3003088896,3003090943,FR
3003090944,3003092991,DE
3003092992,3003095039,NO
-3003095040,3003095071,AT
-3003095072,3003095079,DE
-3003095080,3003095167,AT
-3003095168,3003095295,DE
-3003095296,3003095303,AT
-3003095304,3003095551,CH
-3003095552,3003095559,AT
-3003095560,3003095807,CZ
-3003095808,3003095815,AT
-3003095816,3003096063,IT
-3003096064,3003096079,CZ
-3003096080,3003096127,AT
-3003096128,3003096135,DE
-3003096136,3003096367,AT
-3003096368,3003096383,DE
-3003096384,3003097087,AT
+3003095040,3003095295,AT
+3003095296,3003095551,CH
+3003095552,3003095807,CZ
+3003095808,3003096063,IT
+3003096064,3003097087,AT
3003097088,3003099135,FR
3003099136,3003101183,CZ
3003101184,3003103231,UA
3003103232,3003105279,IT
-3003105280,3003107327,NL
-3003107328,3003109375,RU
+3003105280,3003109375,NL
3003109376,3003111423,FR
3003111424,3003113471,IT
-3003113472,3003114255,ES
-3003114256,3003114259,FR
-3003114260,3003114263,IT
-3003114264,3003114267,GB
-3003114268,3003114271,US
-3003114272,3003115519,ES
+3003113472,3003115519,ES
3003115520,3003117567,RU
3003117568,3003119615,IT
3003119616,3003121663,RU
+3003121664,3003122175,AR
+3003122176,3003122687,CL
+3003122688,3003123711,AR
+3003123712,3003123967,CL
+3003123968,3003124479,CO
+3003124480,3003124735,AR
+3003124736,3003125247,SV
+3003125248,3003125503,AR
+3003125504,3003125759,CO
+3003125760,3003126783,CL
+3003126784,3003127807,CR
+3003127808,3003128063,CO
+3003128064,3003128319,AR
+3003128320,3003128575,PY
+3003128576,3003128831,CO
+3003128832,3003129087,TT
+3003129088,3003129343,CO
+3003129344,3003129599,BO
+3003129600,3003129855,HN
+3003129856,3003138559,CR
+3003138560,3003139071,PA
+3003139072,3003139583,CR
+3003139584,3003140351,PA
+3003140352,3003140607,CR
+3003140608,3003141375,PA
+3003141376,3003141631,CR
+3003141632,3003141887,PA
+3003141888,3003143679,CR
+3003143680,3003144447,PA
+3003144448,3003146239,CR
+3003146240,3003146495,PA
+3003146496,3003147007,CR
+3003147008,3003147263,PA
+3003147264,3003148031,CR
+3003148032,3003148543,PA
+3003148544,3003148799,CR
+3003148800,3003149311,PA
+3003149312,3003151871,CR
+3003151872,3003152383,PA
+3003152384,3003152639,CR
+3003152640,3003152895,PA
+3003152896,3003154431,CR
+3003154432,3003154687,CL
+3003154688,3003154943,EC
+3003154944,3003159039,AR
+3003159040,3003159295,CO
+3003159296,3003160575,AR
+3003160576,3003161599,CL
+3003161600,3003162623,UY
+3003162624,3003170815,CR
+3003170816,3003171071,GT
+3003171072,3003171327,AR
+3003171328,3003171839,PA
+3003171840,3003172863,TT
+3003172864,3003173375,PA
+3003173376,3003173631,CR
+3003173632,3003173887,AR
+3003173888,3003174143,EC
+3003174144,3003174399,CO
+3003174912,3003179007,CR
+3003179008,3003187199,AR
+3003187200,3003252735,CO
3003252736,3003449343,CL
-3003580416,3003645951,PE
+3003449344,3003514879,SV
+3003514880,3003645951,PE
+3003645952,3003777023,CL
+3003777024,3003908095,BR
3003908096,3004170239,CO
+3004170240,3004301311,BR
+3004301312,3004432383,CO
+3004432384,3004694527,VE
3004694528,3005218815,UY
-3011510272,3019898879,BR
+3005218816,3005349887,CO
+3005349888,3005480959,BR
+3005480960,3005874175,AR
+3005874176,3005875455,PA
+3005875456,3005875711,CO
+3005875712,3005879807,PA
+3005879808,3005880063,CO
+3005880064,3005881343,PA
+3005881344,3005881599,CO
+3005881600,3005883135,PA
+3005883136,3005883391,CO
+3005883392,3005886975,PA
+3005886976,3005887487,CO
+3005887488,3005887999,PA
+3005888000,3005888255,CO
+3005888256,3005890047,PA
+3005890048,3005890303,CO
+3005890304,3005891071,PA
+3005891072,3005891327,CO
+3005891328,3005893119,PA
+3005893120,3005893631,CO
+3005893632,3005893887,PA
+3005893888,3005894143,CO
+3005894144,3005894655,PA
+3005894656,3005894911,CO
+3005894912,3005896703,PA
+3005896704,3005896959,CO
+3005896960,3005899263,PA
+3005899264,3005899519,CO
+3005899520,3005900031,PA
+3005900032,3005900287,CO
+3005900288,3005902591,PA
+3005902592,3005902847,CO
+3005902848,3005903359,PA
+3005903360,3005903871,CO
+3005903872,3005905151,PA
+3005905152,3005905407,CO
+3005905408,3005905919,PA
+3005905920,3005906943,CO
+3005906944,3005911039,PA
+3005911040,3005911295,CO
+3005911296,3005911551,PA
+3005911552,3005911807,CO
+3005911808,3005913343,PA
+3005913344,3005913599,CO
+3005913600,3005913855,PA
+3005913856,3005914623,CO
+3005914624,3005915135,PA
+3005915136,3005918207,AR
+3005918208,3005919231,CO
+3005919232,3005923327,AR
+3005923328,3005939711,BZ
+3005939712,3005956095,CR
+3005956096,3005960191,AR
+3005960192,3005965311,PE
+3005965312,3005966335,AR
+3005966336,3005968383,CO
+3005968384,3005972479,AR
+3005972480,3005988863,CH
+3005988864,3006005247,DO
+3006005248,3006267391,VE
+3006267392,3006267647,PA
+3006267648,3006267903,NI
+3006267904,3006268671,PA
+3006268672,3006268927,NI
+3006268928,3006271231,PA
+3006271232,3006271487,NI
+3006271488,3006273535,PA
+3006273536,3006273791,NI
+3006273792,3006275583,PA
+3006275584,3006275839,NI
+3006275840,3006276095,PA
+3006276096,3006276351,NI
+3006276352,3006277887,PA
+3006277888,3006278143,NI
+3006278144,3006279167,PA
+3006279168,3006279423,NI
+3006279424,3006283519,PA
+3006283520,3006283775,NI
+3006283776,3006284287,CR
+3006284288,3006284799,PA
+3006284800,3006285055,CR
+3006285056,3006285311,PA
+3006285312,3006285567,CR
+3006285568,3006285823,PA
+3006285824,3006286079,CR
+3006286080,3006287103,PA
+3006287104,3006287359,CR
+3006287360,3006288639,PA
+3006288640,3006289151,CR
+3006289152,3006289663,PA
+3006289664,3006289919,CR
+3006289920,3006291455,PA
+3006291456,3006291711,CR
+3006291712,3006292991,PA
+3006292992,3006293247,CR
+3006293248,3006296575,PA
+3006296576,3006296831,CR
+3006296832,3006308351,PA
+3006308352,3006308863,CR
+3006308864,3006310143,PA
+3006310144,3006310399,CR
+3006310400,3006311167,PA
+3006311168,3006311423,CR
+3006311424,3006311679,PA
+3006311680,3006312191,CR
+3006312192,3006312703,PA
+3006312704,3006312959,CR
+3006312960,3006313727,PA
+3006313728,3006313983,CR
+3006313984,3006314239,PA
+3006314240,3006314495,CR
+3006314496,3006315263,PA
+3006315264,3006315775,CR
+3006315776,3006320895,PA
+3006320896,3006321151,CR
+3006321152,3006321663,PA
+3006321664,3006322175,CR
+3006322176,3006322431,PA
+3006322432,3006323199,CR
+3006323200,3006323455,PA
+3006323456,3006323711,CR
+3006323712,3006329343,PA
+3006329344,3006329855,NI
+3006329856,3006330367,PA
+3006330368,3006330623,NI
+3006330624,3006330879,PA
+3006330880,3006331903,CR
+3006331904,3006332927,AR
+3006332928,3006349311,EC
+3006349312,3006351359,PE
+3006351360,3006353407,AR
+3006353408,3006357503,DO
+3006357504,3006361599,AR
+3006361600,3006363647,HN
+3006363648,3006365695,AR
+3006365696,3006431231,CO
+3006431232,3006463999,CR
+3006464000,3006480383,SV
+3006480384,3006484479,DO
+3006484480,3006488575,AR
+3006488576,3006496767,CO
+3006496768,3006500351,CR
+3006500352,3006500607,MX
+3006500608,3006506239,CR
+3006506240,3006506495,MX
+3006506496,3006506751,CR
+3006506752,3006507007,MX
+3006507008,3006507519,CR
+3006507520,3006507775,MX
+3006507776,3006512895,CR
+3006512896,3006513151,MX
+3006513152,3006513663,PA
+3006513664,3006514431,CR
+3006514432,3006514687,PA
+3006514688,3006517503,CR
+3006517504,3006517759,NI
+3006517760,3006518527,CR
+3006518528,3006519039,NI
+3006519040,3006521343,CR
+3006521344,3006528511,AR
+3006528512,3006529535,BZ
+3006529536,3006660607,DO
+3006660608,3006791679,BR
+3006791680,3006922751,CL
+3006922752,3007053823,BO
+3007053824,3007062015,AR
+3007062016,3007066111,CO
+3007066112,3007070207,EC
+3007070208,3007078399,CL
+3007078400,3007082495,AR
+3007082496,3007086591,BO
+3007086592,3007090687,PA
+3007090688,3007091711,NL
+3007091712,3007092223,RU
+3007092224,3007092735,DE
+3007092736,3007094783,AR
+3007094784,3007096831,CR
+3007096832,3007098879,AR
+3007098880,3007100887,HN
+3007100888,3007100895,PH
+3007100896,3007100927,HN
+3007100928,3007102975,AR
+3007102976,3007103999,US
+3007104000,3007106047,AR
+3007106048,3007107071,PE
+3007107072,3007108095,AR
+3007108096,3007109119,TT
+3007109120,3007111167,AR
+3007111168,3007112191,PE
+3007112192,3007115263,AR
+3007115264,3007116287,CO
+3007116288,3007117311,EC
+3007117312,3007122431,AR
+3007122432,3007123455,CL
+3007123456,3007143935,AR
+3007143936,3007148031,CL
+3007148032,3007152127,CO
+3007152128,3007152383,CL
+3007152384,3007152639,US
+3007152640,3007152895,CL
+3007152896,3007153151,US
+3007153152,3007153407,CL
+3007153408,3007153663,US
+3007153664,3007153919,CL
+3007153920,3007154175,US
+3007154176,3007154431,CL
+3007154432,3007154687,US
+3007154688,3007154943,CL
+3007154944,3007155199,US
+3007155200,3007155455,CL
+3007155456,3007155711,GB
+3007155712,3007155967,CL
+3007155968,3007156223,DE
+3007156224,3007175679,CL
+3007175680,3007175935,GB
+3007175936,3007184895,CL
+3007184896,3007250431,AR
+3007250432,3007268095,CR
+3007268096,3007268607,PA
+3007268608,3007269631,CR
+3007269632,3007270143,PA
+3007270144,3007270911,CR
+3007270912,3007271167,PA
+3007271168,3007272191,CR
+3007272192,3007272447,PA
+3007272448,3007272959,CR
+3007272960,3007273215,PA
+3007273216,3007273727,CR
+3007273728,3007274239,PA
+3007274240,3007274751,CR
+3007274752,3007275007,PA
+3007275008,3007279359,CR
+3007279360,3007279871,PA
+3007279872,3007280639,CR
+3007280640,3007280895,PA
+3007280896,3007281151,CR
+3007281152,3007281919,PA
+3007281920,3007283455,CR
+3007283456,3007283711,PA
+3007283712,3007283967,CR
+3007283968,3007284223,PA
+3007284224,3007286015,CR
+3007286016,3007286271,PA
+3007286272,3007286783,CR
+3007286784,3007287295,PA
+3007287296,3007287551,CR
+3007287552,3007288063,MX
+3007288064,3007289087,CR
+3007289088,3007289343,MX
+3007289344,3007290367,CR
+3007290368,3007290623,PA
+3007290624,3007291135,CR
+3007291136,3007291391,PA
+3007291392,3007292415,CR
+3007292416,3007292671,MX
+3007292672,3007293439,CR
+3007293440,3007293951,MX
+3007293952,3007294207,CR
+3007294208,3007294463,MX
+3007294464,3007294719,CR
+3007294720,3007294975,MX
+3007294976,3007296255,CR
+3007296256,3007296511,MX
+3007296512,3007296767,CR
+3007296768,3007297023,MX
+3007297024,3007299583,CR
+3007299584,3007301631,PA
+3007301632,3007305727,AR
+3007305728,3007307775,BZ
+3007307776,3007310847,CL
+3007310848,3007312895,AR
+3007312896,3007313919,CL
+3007313920,3007314943,AR
+3007314944,3007315967,HN
+3007315968,3019898879,BR
3019898880,3024093183,JP
3024093184,3024617471,KR
3024617472,3024879615,MY
@@ -99622,27 +46437,70 @@
3025403904,3025600511,CN
3025600512,3025603839,IN
3025603840,3025604095,HK
-3025604096,3025604351,IN
-3025604352,3025604637,SG
-3025604638,3025607423,IN
+3025604096,3025604381,IN
+3025604382,3025604637,SG
+3025604638,3025606815,IN
+3025606816,3025606831,SG
+3025606832,3025607167,IN
+3025607168,3025607423,SG
3025607424,3025607679,HK
-3025607680,3025633535,IN
+3025607680,3025608191,IN
+3025608192,3025608203,JP
+3025608204,3025616895,IN
+3025616896,3025617407,SG
+3025617408,3025618943,IN
+3025618944,3025619471,SG
+3025619472,3025620991,IN
+3025620992,3025621247,PH
+3025621248,3025625343,IN
+3025625344,3025625375,SG
+3025625376,3025625391,IN
+3025625392,3025625395,SG
+3025625396,3025625407,IN
+3025625408,3025625471,SG
+3025625472,3025625599,IN
+3025625600,3025625855,SG
+3025625856,3025629439,IN
+3025629440,3025629503,HK
+3025629504,3025629695,IN
+3025629696,3025629951,HK
+3025629952,3025630207,IN
+3025630208,3025630719,AU
+3025630720,3025631239,IN
+3025631240,3025631247,AU
+3025631248,3025632255,IN
+3025632256,3025632271,SG
+3025632272,3025633535,IN
3025633536,3025633791,HK
-3025633792,3025635839,IN
-3025635840,3025636095,SG
-3025636096,3025637375,IN
+3025633792,3025633807,AU
+3025633808,3025637375,IN
3025637376,3025637631,HK
3025637632,3025637887,MY
-3025637888,3025638399,IN
+3025637888,3025638279,IN
+3025638280,3025638287,SG
+3025638288,3025638399,IN
3025638400,3025638655,SG
-3025638656,3025639167,IN
+3025638656,3025638783,IN
+3025638784,3025638791,HK
+3025638792,3025639167,IN
3025639168,3025639175,SG
-3025639176,3025647103,IN
+3025639176,3025639423,IN
+3025639424,3025639679,SG
+3025639680,3025639935,HK
+3025639936,3025640447,IN
+3025640448,3025640799,MY
+3025640800,3025641727,IN
+3025641728,3025641743,HK
+3025641744,3025641759,IN
+3025641760,3025641775,HK
+3025641776,3025647103,IN
3025647104,3025647359,SG
3025647360,3025647615,AU
-3025647616,3025647807,IN
-3025647808,3025647839,SG
-3025647840,3025649151,IN
+3025647616,3025647775,IN
+3025647776,3025647791,SG
+3025647792,3025648079,IN
+3025648080,3025648087,SG
+3025648088,3025649151,IN
3025649152,3025649663,HK
3025649664,3025666047,IN
3025666048,3025928191,CN
@@ -99671,14 +46529,7 @@
3026069504,3026071551,JP
3026071552,3026073599,HK
3026073600,3026075647,CN
-3026075648,3026076927,AF
-3026076928,3026077183,IT
-3026077184,3026079743,US
-3026079744,3026079999,AF
-3026080000,3026080511,US
-3026080512,3026080767,AF
-3026080768,3026081279,US
-3026081280,3026083839,AF
+3026075648,3026083839,AF
3026083840,3026087935,CN
3026087936,3026089983,AU
3026092032,3026108415,MO
@@ -99701,8 +46552,7 @@
3028521984,3028523007,LA
3028523008,3028525055,JP
3028525056,3028533247,HK
-3028533248,3028537343,JP
-3028537344,3028549631,US
+3028533248,3028549631,JP
3028549632,3028811775,KR
3028811776,3029336063,CN
3029336064,3029598207,JP
@@ -99764,7 +46614,9 @@
3031695360,3031760895,TH
3031760896,3031826431,AU
3031826432,3031891967,KR
-3031891968,3031957503,TH
+3031891968,3031913983,TH
+3031913984,3031914239,SG
+3031914240,3031957503,TH
3031957504,3032252415,CN
3032252416,3032271871,HK
3032271872,3032272895,AU
@@ -99832,9 +46684,7 @@
3034472448,3034478591,IN
3034478592,3034480639,JP
3034480640,3034482687,SG
-3034482688,3034483199,AF
-3034483200,3034483967,US
-3034483968,3034484735,AF
+3034482688,3034484735,AF
3034484736,3034488831,TH
3034488832,3034492927,NZ
3034492928,3034497023,JP
@@ -99875,24 +46725,52 @@
3035357184,3035365375,JP
3035365376,3035627519,KR
3035627520,3035660287,ID
-3035660288,3035693055,SG
+3035660288,3035673343,SG
+3035673344,3035673599,US
+3035673600,3035693055,SG
3035693056,3036610559,ID
3036610560,3036676095,SG
3036676096,3037790207,AR
3037790208,3037986815,VE
3037986816,3038773247,AR
+3038773248,3038904319,CO
+3038904320,3039035391,VE
3039035392,3039166463,DO
+3039166464,3039231999,PA
+3039232000,3039297535,EC
3039297536,3039363071,PY
-3039363072,3039395839,BZ
-3039428608,3039494143,CL
-3039690752,3039821823,AR
+3039363072,3039412223,BZ
+3039412224,3039412991,CL
+3039412992,3039413247,BR
+3039413248,3039413503,CL
+3039413504,3039414015,BR
+3039414016,3039414271,CL
+3039414272,3039414527,BR
+3039414528,3039415295,CL
+3039415296,3039415807,BR
+3039415808,3039416831,CL
+3039416832,3039417343,BR
+3039417344,3039417855,CL
+3039417856,3039418111,BR
+3039418112,3039418367,CL
+3039418368,3039418623,BR
+3039418624,3039419391,CL
+3039419392,3039420159,BR
+3039420160,3039420415,CL
+3039420416,3039428607,AR
+3039428608,3039559679,CL
+3039559680,3039821823,AR
3039821824,3040870399,CO
3040870400,3041132543,PE
3041132544,3041394687,CO
3041394688,3041656831,CL
-3041918976,3044016127,AR
+3041656832,3041787903,BR
+3041787904,3044016127,AR
3044016128,3044147199,EC
3044147200,3044155391,GT
+3044155392,3044161535,AR
+3044161536,3044162559,HN
+3044162560,3044163583,AR
3044163584,3044179967,BO
3044179968,3044188159,AR
3044188160,3044196351,BO
@@ -99901,17 +46779,39 @@
3044208640,3044212735,BZ
3044212736,3044245503,HN
3044245504,3044278271,BO
-3044278272,3044505599,AR
-3044505600,3044507647,US
+3044278272,3044417535,AR
+3044417536,3044425727,PA
+3044425728,3044446207,AR
+3044446208,3044450303,CO
+3044450304,3044454399,CL
+3044454400,3044482559,AR
+3044482560,3044482687,CO
+3044482688,3044503551,AR
+3044503552,3044507647,US
3044507648,3044540415,AR
-3044802560,3045064703,PY
+3044540416,3045064703,PY
3045064704,3047161855,CO
3047161856,3047423999,CL
-3047424000,3047686143,AR
+3047424000,3047948287,AR
3047948288,3048079359,CL
+3048079360,3048095743,CO
+3048095744,3048112127,GT
+3048112128,3048120319,AR
+3048120320,3048121343,PY
+3048121344,3048122367,PA
+3048122368,3048123391,CR
+3048123392,3048126463,AR
+3048126464,3048128511,VE
+3048128512,3048132607,AR
+3048132608,3048135935,CR
+3048135936,3048136447,PA
+3048136448,3048144895,CR
+3048144896,3048210431,EC
3048210432,3048275967,PE
3048275968,3048292351,AR
-3048292352,3048308735,BZ
+3048292352,3048292607,BZ
+3048292608,3048293375,HN
+3048293376,3048308735,BZ
3048308736,3048325119,BO
3048325120,3048331263,AR
3048331264,3048332287,GY
@@ -99920,40 +46820,111 @@
3048341504,3048472575,PA
3048472576,3048996863,VE
3048996864,3049029631,TT
+3049029632,3049046015,BO
+3049046016,3049062399,EC
3049062400,3049078271,CR
3049078272,3049078527,MX
3049078528,3049095167,CR
3049095168,3049103359,GT
3049103360,3049107455,AR
+3049107456,3049111551,SV
3049111552,3049119743,AR
3049119744,3049127935,HN
3049127936,3049193471,CL
-3049193472,3049259007,PA
-3049259008,3049521151,CR
-3049652224,3049717759,EC
+3049193472,3049255935,PA
+3049255936,3049256959,US
+3049256960,3049259007,PA
+3049259008,3049283583,AR
+3049283584,3049291775,BZ
+3049291776,3049324543,CO
+3049324544,3049521151,CR
+3049521152,3049586687,EC
+3049586688,3049635839,PA
+3049635840,3049652223,AR
+3049652224,3049750527,EC
+3049750528,3049754623,PE
+3049754624,3049762815,AR
+3049762816,3049766911,HN
+3049766912,3049775103,ES
+3049775104,3049783295,PA
3049783296,3050045439,CL
-3050307584,3050340351,VE
+3050045440,3050307583,CO
+3050307584,3050373119,VE
3050373120,3050405887,AR
+3050405888,3050438655,GT
3050438656,3050504191,HN
-3051356160,3051380735,CR
+3050504192,3050569727,EC
+3050635264,3050700799,BR
+3050700800,3050831871,CL
+3050831872,3051356159,BR
+3051356160,3051373055,CR
+3051373056,3051373311,PA
+3051373312,3051374335,CR
+3051374336,3051374591,PA
+3051374592,3051374847,CR
+3051374848,3051375615,PA
+3051375616,3051376895,CR
+3051376896,3051377151,PA
+3051377152,3051379455,CR
+3051379456,3051379711,PA
+3051379712,3051380735,CR
3051380736,3051388927,AR
-3051388928,3051397119,PA
+3051388928,3051395071,US
+3051395072,3051395583,NL
+3051395584,3051397119,PA
+3051397120,3051398143,CO
+3051398144,3051399167,AR
+3051399168,3051400191,DO
+3051400192,3051401215,EC
+3051401216,3051405311,AR
3051405312,3051407359,CR
3051407360,3051408383,PE
3051408384,3051409407,DO
3051409408,3051411455,AR
3051411456,3051413503,CR
3051413504,3051421695,PE
+3051421696,3051429887,AR
3051429888,3051438079,VE
-3051446272,3051450367,CO
+3051438080,3051450367,CO
3051450368,3051454463,CL
+3051454464,3051456511,SV
+3051456512,3051457535,AR
+3051457536,3051460607,CL
+3051460608,3051462655,AR
+3051462656,3051470847,PE
+3051470848,3051479039,AR
+3051479040,3051487231,CU
3051487232,3051552767,CL
3051552768,3051618303,BO
-3051618304,3051749375,AR
+3051618304,3051880447,AR
3051880448,3051913215,CO
-3051945984,3051978751,CR
+3051913216,3051963135,CR
+3051963136,3051963391,PA
+3051963392,3051964671,CR
+3051964672,3051964927,PA
+3051964928,3051965183,CR
+3051965184,3051965439,PA
+3051965440,3051965695,CR
+3051965696,3051965951,PA
+3051965952,3051968511,CR
+3051968512,3051968767,PA
+3051968768,3051969535,CR
+3051969536,3051969791,PA
+3051969792,3051971071,CR
+3051971072,3051971327,PA
+3051971328,3051971839,CR
+3051971840,3051972351,PA
+3051972352,3051973887,CR
+3051973888,3051974143,PA
+3051974144,3051974399,CR
+3051974400,3051974655,PA
+3051974656,3051976191,CR
+3051976192,3051976447,PA
+3051976448,3051983871,CR
+3051983872,3051984895,BR
+3051984896,3051995135,CR
3051995136,3052011519,PE
-3052142592,3052273663,CO
+3052011520,3052273663,CO
3052273664,3052404735,AR
3052404736,3053453311,CO
3053453312,3054501887,ID
@@ -100020,16 +46991,12 @@
3057041408,3057049599,MY
3057049600,3057050623,AU
3057050624,3057051647,SG
-3057051648,3057051903,AU
-3057051904,3057052159,EU
-3057052160,3057052415,AU
+3057051648,3057052415,AU
3057052416,3057052671,ES
3057052672,3057052927,IL
3057052928,3057053183,GB
3057053184,3057053695,AU
-3057053696,3057054719,JP
-3057054720,3057055743,HK
-3057055744,3057057791,JP
+3057053696,3057057791,JP
3057057792,3057123327,SG
3057123328,3057451007,IN
3057451008,3057516543,CN
@@ -100055,9 +47022,7 @@
3063988224,3064004607,JP
3064004608,3064012799,LK
3064020992,3064023039,JP
-3064023040,3064023551,SG
-3064023552,3064023807,JP
-3064023808,3064024063,SG
+3064023040,3064024063,SG
3064024064,3064025087,JP
3064025088,3064029183,VN
3064029184,3064135679,KR
@@ -100074,9 +47039,7 @@
3064811520,3064823807,KR
3064823808,3064831999,JP
3064832000,3064840191,KR
-3064840192,3064852479,GU
-3064852480,3064854527,US
-3064854528,3064856575,GU
+3064840192,3064856575,GU
3064856576,3064987647,CN
3064987648,3066036223,PK
3066036224,3066560511,KR
@@ -100093,8 +47056,7 @@
3068986368,3068987391,AU
3068987392,3068990463,IN
3068990464,3068991487,VN
-3068991488,3068992511,IN
-3068992512,3068993535,PH
+3068991488,3068991743,IN
3068993536,3069018111,KR
3069018112,3069034495,IN
3069034496,3069050879,KR
@@ -100188,65 +47150,43 @@
3082182656,3082190847,LA
3082190848,3082289151,JP
3082289152,3087007743,CN
-3087007744,3088711167,US
-3088711168,3088711423,AU
-3088711424,3091202047,US
+3087007744,3088629759,US
+3088629760,3088633855,NL
+3088633856,3088998399,US
+3088998400,3089002495,NL
+3089002496,3090325503,US
+3090325504,3090329599,NL
+3090329600,3090389503,US
+3090389504,3090389631,CA
+3090389632,3091202047,US
3091202048,3091726335,CA
3091726336,3091955711,US
3091955712,3091959807,CA
3091959808,3091976191,US
3091976192,3091980287,CA
-3091980288,3092569855,US
-3092569856,3092570111,AU
-3092570112,3092700671,US
-3092700672,3092700927,AU
-3092700928,3093168127,US
+3091980288,3092569343,US
+3092569344,3092569599,AU
+3092569600,3092578303,US
+3092578304,3092582399,NL
+3092582400,3092615167,US
+3092615168,3092619263,NL
+3092619264,3092623359,US
+3092623360,3092631551,NL
+3092631552,3092643839,US
+3092643840,3092647935,NL
+3092647936,3092656127,US
+3092656128,3092660223,NL
+3092660224,3092688895,US
+3092688896,3092692991,NL
+3092692992,3092754431,US
+3092754432,3092758527,NL
+3092758528,3093168127,US
3093168128,3093200895,CA
-3093200896,3093206623,US
-3093206624,3093206655,GB
-3093206656,3093207775,US
-3093207776,3093207807,CA
-3093207808,3093208079,US
-3093208080,3093208095,CA
-3093208096,3093208639,US
-3093208640,3093208671,CA
-3093208672,3093213183,US
+3093200896,3093213183,US
3093213184,3093217279,CA
3093217280,3093233663,US
3093233664,3093237759,PR
-3093237760,3093241863,US
-3093241864,3093241871,AU
-3093241872,3093242287,US
-3093242288,3093242295,AU
-3093242296,3093242719,US
-3093242720,3093242751,CN
-3093242752,3093243223,US
-3093243224,3093243231,AU
-3093243232,3093245575,US
-3093245576,3093245583,BR
-3093245584,3093245719,US
-3093245720,3093245727,AU
-3093245728,3093247327,US
-3093247328,3093247335,AU
-3093247336,3093248375,US
-3093248376,3093248399,AU
-3093248400,3093248415,US
-3093248416,3093248431,AU
-3093248432,3093248479,US
-3093248480,3093248487,AU
-3093248488,3093248727,US
-3093248728,3093248735,AU
-3093248736,3093248831,US
-3093248832,3093248839,AU
-3093248840,3093248887,US
-3093248888,3093248895,AU
-3093248896,3093249071,US
-3093249072,3093249079,GB
-3093249080,3093249599,US
-3093249600,3093249623,AU
-3093249624,3093249679,US
-3093249680,3093249687,AU
-3093249688,3093282815,US
+3093237760,3093282815,US
3093282816,3093299199,CA
3093299200,3093835775,US
3093835776,3093838847,GB
@@ -100262,9 +47202,7 @@
3094032768,3094085631,CA
3094085632,3096444927,US
3096444928,3096969215,CA
-3096969216,3097130139,US
-3097130140,3097130140,US
-3097130141,3097493503,US
+3096969216,3097493503,US
3097493504,3097755647,CA
3097755648,3098095615,US
3098095616,3098099711,CA
@@ -100285,7 +47223,7 @@
3098106624,3098106879,NL
3098106880,3098107135,DE
3098107136,3098107391,FR
-3098107392,3098107647,EU
+3098107392,3098107647,US
3098107648,3098107903,SE
3098107904,3098108159,ES
3098108160,3098108415,IL
@@ -100302,175 +47240,13 @@
3098148864,3098165247,JM
3098165248,3098181631,US
3098181632,3098185727,CA
-3098185728,3098255399,US
-3098255400,3098255407,BR
-3098255408,3098255903,US
-3098255904,3098255911,MV
-3098255912,3098263551,US
+3098185728,3098263551,US
3098263552,3098271743,CA
-3098271744,3098275944,US
-3098275945,3098275945,CL
-3098275946,3098275950,US
-3098275951,3098275953,CL
-3098275954,3098276126,US
-3098276127,3098276130,IN
-3098276131,3098276708,US
-3098276709,3098276709,CL
-3098276710,3098278719,US
-3098278720,3098278751,CA
-3098278752,3098278815,US
-3098278816,3098278911,CA
-3098278912,3098279099,US
-3098279100,3098279103,BR
-3098279104,3098280591,US
-3098280592,3098280599,PA
-3098280600,3098281311,US
-3098281312,3098281343,EG
-3098281344,3098281503,US
-3098281504,3098281511,PA
-3098281512,3098281711,US
-3098281712,3098281719,PA
-3098281720,3098281943,US
-3098281944,3098281951,AU
-3098281952,3098282327,US
-3098282328,3098282335,BR
-3098282336,3098282415,US
-3098282416,3098282431,BR
-3098282432,3098282471,US
-3098282472,3098282479,BR
-3098282480,3098283719,US
-3098283720,3098283727,NL
-3098283728,3098284311,US
-3098284312,3098284319,BR
-3098284320,3098285383,US
-3098285384,3098285391,BR
-3098285392,3098285495,US
-3098285496,3098285503,BR
-3098285504,3098286191,US
-3098286192,3098286199,BR
-3098286200,3098286287,US
-3098286288,3098286295,IN
-3098286296,3098286399,US
-3098286400,3098286431,BR
-3098286432,3098287711,US
-3098287712,3098287719,AU
-3098287720,3098288343,US
-3098288344,3098288351,BR
-3098288352,3098288775,US
-3098288776,3098288783,BR
-3098288784,3098289495,US
-3098289496,3098289503,AU
-3098289504,3098294719,US
-3098294720,3098294775,BR
-3098294776,3098296151,US
-3098296152,3098296159,BR
-3098296160,3098320543,US
-3098320544,3098320559,AR
-3098320560,3098321663,US
-3098321664,3098321695,IN
-3098321696,3098322367,US
-3098322368,3098322375,BD
-3098322376,3098322383,US
-3098322384,3098322391,BD
-3098322392,3098322695,US
-3098322696,3098322703,BD
-3098322704,3098323679,US
-3098323680,3098323711,EG
-3098323712,3098323951,US
-3098323952,3098323959,TR
-3098323960,3098324735,US
-3098324736,3098324743,IN
-3098324744,3098326511,US
-3098326512,3098326519,CN
-3098326520,3098331151,US
-3098331152,3098331159,HK
-3098331160,3098331471,US
-3098331472,3098331479,CL
-3098331480,3098333951,US
-3098333952,3098333959,BD
-3098333960,3098335119,US
-3098335120,3098335127,CA
-3098335128,3098336303,US
-3098336304,3098336311,MY
-3098336312,3098364183,US
-3098364184,3098364191,EG
-3098364192,3098365535,US
-3098365536,3098365551,IN
-3098365552,3098365631,US
-3098365632,3098365639,AU
-3098365640,3098366559,US
-3098366560,3098366575,BR
-3098366576,3098366839,US
-3098366840,3098366847,BR
-3098366848,3098366863,US
-3098366864,3098366879,BR
-3098366880,3098366991,US
-3098366992,3098367007,BR
-3098367008,3098367023,US
-3098367024,3098367063,BR
-3098367064,3098367087,US
-3098367088,3098367103,BR
-3098367104,3098370895,US
-3098370896,3098370903,BR
-3098370904,3098371495,US
-3098371496,3098371503,JO
-3098371504,3098373351,US
-3098373352,3098373359,BR
-3098373360,3098375583,US
-3098375584,3098375615,BR
-3098375616,3098376599,US
-3098376600,3098376607,CA
-3098376608,3098376863,US
-3098376864,3098376895,BR
-3098376896,3098377727,US
-3098377728,3098377759,AR
-3098377760,3098380047,US
-3098380048,3098380063,IN
-3098380064,3098380527,US
-3098380528,3098380535,IN
-3098380536,3098381455,US
-3098381456,3098381471,LT
-3098381472,3098382071,US
-3098382072,3098382079,IN
-3098382080,3098382127,US
-3098382128,3098382135,RO
-3098382136,3098385727,US
-3098385728,3098385791,SE
-3098385792,3098386911,US
-3098386912,3098386919,TR
-3098386920,3098387607,US
-3098387608,3098387615,RO
-3098387616,3098388175,US
-3098388176,3098388183,SA
-3098388184,3098390271,US
-3098390272,3098390279,ES
-3098390280,3098392071,US
-3098392072,3098392079,GB
-3098392080,3098392551,US
-3098392552,3098392559,GB
-3098392560,3098395407,US
-3098395408,3098395415,BR
-3098395416,3098400503,US
-3098400504,3098400511,CA
-3098400512,3098402559,US
-3098402560,3098402575,AR
-3098402576,3098402799,US
-3098402800,3098402807,ES
-3098402808,3098403151,US
-3098403152,3098403159,PK
-3098403160,3098407295,US
-3098407296,3098407303,MX
-3098407304,3098408735,US
-3098408736,3098408743,AR
-3098408744,3098408927,US
-3098408928,3098408935,ES
-3098408936,3098476543,US
+3098271744,3098278847,US
+3098278848,3098278911,CA
+3098278912,3098476543,US
3098476544,3098492927,CA
-3098492928,3098492991,US
-3098492992,3098493023,CA
-3098493024,3098493751,US
-3098493752,3098493759,PH
-3098493760,3098494719,US
+3098492928,3098494719,US
3098494720,3098495743,CA
3098495744,3098495999,US
3098496000,3098496255,CA
@@ -100478,29 +47254,40 @@
3098503424,3098503679,CA
3098503680,3098507263,US
3098507264,3098507519,CA
-3098507520,3098507807,US
-3098507808,3098507823,AU
-3098507824,3098507839,HK
-3098507840,3098507903,US
-3098507904,3098507919,AR
-3098507920,3098507935,US
-3098507936,3098507951,CY
-3098507952,3098507999,US
-3098508000,3098508015,CR
-3098508016,3103784959,US
+3098507520,3103784959,US
3103850496,3103850751,RU
3103850752,3103851007,PS
+3103851008,3103851519,FR
3103851520,3103852543,PL
3103852544,3103852799,AE
-3103852800,3103853055,PL
+3103852800,3103853567,PL
+3103853568,3103853823,NO
+3103853824,3103854079,RU
+3103854080,3103854335,FR
+3103854336,3103854591,AE
+3103854592,3103854847,UA
+3103854848,3103855103,PL
+3103855104,3103855359,DE
+3103855360,3103855615,RU
+3103855616,3103855871,ES
+3103855872,3103856383,PL
+3103856384,3103856639,RU
+3103856640,3103856895,HU
+3103856896,3103857151,CZ
+3103857152,3103857407,FR
+3103857408,3103857663,RS
+3103857664,3103857919,FR
3103916032,3103917055,CH
3103917056,3103918079,IT
3103918080,3103919103,DE
-3103919104,3103920127,US
+3103919104,3103920127,IR
3103920128,3103921151,DE
3103921152,3103922175,CH
-3103922176,3103924223,NL
-3103924224,3103925247,RU
+3103922176,3103923199,NL
+3103923200,3103923455,SE
+3103923456,3103924223,NL
+3103924224,3103924479,DE
+3103924480,3103925247,RU
3103925248,3103926271,PL
3103926272,3103927295,CZ
3103927296,3103929343,NL
@@ -100520,22 +47307,24 @@
3103942656,3103943679,RU
3103943680,3103944703,UA
3103944704,3103945727,PL
-3103945728,3103946751,DE
-3103946752,3103947007,US
-3103947008,3103947775,DE
+3103945728,3103947775,DE
3103947776,3103948799,RU
3103948800,3103949823,ES
3103949824,3103950847,DE
3103950848,3103951871,GB
3103951872,3103952895,DE
3103952896,3103953919,IT
-3103953920,3103954943,NL
+3103953920,3103954431,NL
+3103954432,3103954943,ES
3103954944,3103955967,SE
3103955968,3103956991,AT
3103956992,3103958015,DE
3103958016,3103960063,GB
3103960064,3103961087,NL
-3103961088,3103962111,AT
+3103961088,3103961343,TR
+3103961344,3103961599,AE
+3103961600,3103961855,AR
+3103961856,3103962111,AT
3103962112,3103963135,DE
3103963136,3103964159,RU
3103964160,3103965183,MK
@@ -100544,12 +47333,11 @@
3103968256,3103969279,GB
3103969280,3103970303,BG
3103970304,3103971327,UA
-3103971328,3103972351,GB
-3103972352,3103972863,IE
-3103972864,3103973375,GB
+3103971328,3103973375,GB
3103973376,3103974399,KZ
-3103974400,3103974911,LT
-3103974912,3103975423,SE
+3103974400,3103974911,SE
+3103974912,3103974919,LT
+3103974920,3103975423,SE
3103975424,3103976447,SA
3103976448,3103977471,GB
3103977472,3103978495,NL
@@ -100562,7 +47350,6 @@
3103985664,3103986687,RU
3103986688,3103987711,LB
3103987712,3103988735,FR
-3103988736,3103989759,EU
3103989760,3103990783,RU
3103990784,3103991807,IT
3103991808,3103992831,DE
@@ -100575,11 +47362,9 @@
3103998976,3103999999,RU
3104000000,3104002047,GB
3104002048,3104003071,DE
-3104003072,3104004863,GB
-3104004864,3104005119,EU
-3104005120,3104006143,GB
+3104003072,3104006143,GB
3104006144,3104007167,DE
-3104007168,3104008191,GG
+3104007168,3104008191,GB
3104008192,3104009215,NL
3104009216,3104010239,IT
3104010240,3104011263,PL
@@ -100600,7 +47385,7 @@
3104025600,3104026623,RU
3104026624,3104027647,NL
3104027648,3104028671,RU
-3104028672,3104030719,DE
+3104028672,3104029695,DE
3104030720,3104031743,HR
3104031744,3104032767,FR
3104032768,3104033791,IR
@@ -100646,20 +47431,15 @@
3104075776,3104076799,NL
3104076800,3104077823,GB
3104077824,3104078847,AT
-3104078848,3104079103,LU
-3104079104,3104079871,FR
+3104078848,3104079871,LU
3104079872,3104080895,GB
3104080896,3104081919,GR
-3104081920,3104082431,DK
-3104082432,3104082687,LU
-3104082688,3104082751,DK
-3104082752,3104082767,LU
-3104082768,3104082895,DK
-3104082896,3104082943,LU
+3104081920,3104082943,DK
3104082944,3104083967,IT
3104083968,3104084991,RU
-3104084992,3104085247,DK
-3104085248,3104086015,NL
+3104084992,3104085247,NL
+3104085248,3104085503,HR
+3104085504,3104086015,NL
3104086016,3104087039,IT
3104087040,3104088063,GB
3104088064,3104089087,UZ
@@ -100691,23 +47471,17 @@
3104117760,3104118783,SE
3104118784,3104120831,DE
3104120832,3104121855,CH
-3104121856,3104121856,GB
-3104121857,3104122111,BD
-3104122112,3104122112,GB
-3104122113,3104122367,BD
-3104122368,3104122368,GB
-3104122369,3104122623,BD
-3104122624,3104122624,GB
-3104122625,3104122879,BD
+3104121856,3104122879,GB
3104122880,3104123903,RU
-3104123904,3104124927,SE
+3104123904,3104124159,SE
+3104124160,3104124415,LU
+3104124416,3104124927,SE
3104124928,3104125951,MT
3104125952,3104126975,LT
3104126976,3104127999,CH
3104128000,3104129023,IT
3104129024,3104130047,GB
3104130048,3104131071,CZ
-3104131072,3104132095,EU
3104132096,3104133119,GR
3104133120,3104134143,DE
3104134144,3104135167,ES
@@ -100722,8 +47496,7 @@
3104143360,3104144383,NL
3104144384,3104145407,ES
3104145408,3104146431,RU
-3104146432,3104147199,NL
-3104147200,3104147455,US
+3104146432,3104147455,NL
3104147456,3104149503,RU
3104149504,3104150527,GB
3104150528,3104151551,RU
@@ -100732,18 +47505,10 @@
3104153600,3104154623,RU
3104154624,3104155647,DK
3104155648,3104156671,DE
-3104156672,3104156735,GB
-3104156736,3104156767,RO
-3104156768,3104156775,GB
-3104156776,3104156783,RO
-3104156784,3104156791,GB
-3104156792,3104156959,RO
-3104156960,3104156991,US
-3104156992,3104157695,RO
+3104156672,3104157695,RO
3104157696,3104158719,TR
3104158720,3104159743,IT
-3104159744,3104160255,DE
-3104160256,3104160767,CH
+3104159744,3104160767,CH
3104160768,3104161791,GB
3104161792,3104162815,RU
3104162816,3104164863,IT
@@ -100758,7 +47523,6 @@
3104173056,3104174079,ES
3104174080,3104175103,IE
3104175104,3104176127,IT
-3104176128,3104177151,NO
3104177152,3104178175,UA
3104178176,3104179199,PL
3104179200,3104180223,ES
@@ -100780,7 +47544,7 @@
3104195584,3104196607,DE
3104196608,3104197631,IT
3104197632,3104198655,GR
-3104198656,3104199679,RU
+3104198656,3104199679,GB
3104199680,3104200703,NL
3104200704,3104201727,IT
3104201728,3104202751,FR
@@ -100797,7 +47561,7 @@
3104212992,3104214015,HU
3104214016,3104215039,FR
3104215040,3104216063,DE
-3104216064,3104218111,GB
+3104217088,3104218111,GB
3104218112,3104219135,HU
3104219136,3104220159,NL
3104220160,3104221183,RU
@@ -100828,9 +47592,8 @@
3104247808,3104248831,AT
3104248832,3104250879,CZ
3104250880,3104251903,RU
-3104251904,3104252671,NL
-3104252672,3104252798,LU
-3104252799,3104252927,NL
+3104251904,3104252415,SE
+3104252416,3104252927,NL
3104252928,3104253951,FR
3104253952,3104254975,RU
3104254976,3104255999,CZ
@@ -100842,12 +47605,12 @@
3104261120,3104262143,NL
3104262144,3104263167,FR
3104263168,3104264191,NL
-3104264192,3104265215,TR
+3104264192,3104265215,GB
3104265216,3104266239,RU
3104266240,3104267263,GB
3104267264,3104268287,RU
-3104268288,3104269567,GB
-3104269568,3104270335,FR
+3104268288,3104269311,GB
+3104269312,3104270335,FR
3104270336,3104271359,PL
3104271360,3104272383,FR
3104272384,3104273407,IT
@@ -100908,20 +47671,13 @@
3104331776,3104333823,GB
3104333824,3104334847,ES
3104334848,3104335871,SE
-3104335872,3104335887,LT
-3104335888,3104335935,CN
-3104335936,3104335967,LT
-3104335968,3104335975,CN
-3104335976,3104335983,SC
-3104335984,3104335999,US
-3104336000,3104336111,CN
-3104336112,3104336119,GB
-3104336120,3104336191,LT
-3104336192,3104336223,BD
-3104336224,3104336239,PH
+3104335872,3104336239,LT
3104336240,3104336255,DE
-3104336256,3104336383,US
-3104336384,3104336895,LT
+3104336256,3104336359,LT
+3104336360,3104336367,BE
+3104336368,3104336407,LT
+3104336408,3104336415,CH
+3104336416,3104336895,LT
3104336896,3104337919,GB
3104337920,3104338943,IE
3104338944,3104339967,DE
@@ -100943,9 +47699,7 @@
3104356352,3104357375,AT
3104357376,3104358399,CZ
3104358400,3104359423,IE
-3104359424,3104359551,IT
-3104359552,3104360191,RO
-3104360192,3104360447,IT
+3104359424,3104360447,IT
3104360448,3104361471,RU
3104361472,3104362495,GB
3104362496,3104363519,CH
@@ -100969,8 +47723,7 @@
3104384000,3104385023,TR
3104385024,3104386047,UA
3104386048,3104387071,AL
-3104387072,3104387583,GB
-3104387584,3104388095,US
+3104387072,3104388095,GB
3104388096,3104389119,IT
3104389120,3104390143,PL
3104390144,3104391167,SE
@@ -101040,7 +47793,6 @@
3104463872,3104464895,DE
3104464896,3104465919,NL
3104465920,3104466943,GB
-3104466944,3104467967,EU
3104467968,3104468991,DE
3104468992,3104470015,SA
3104470016,3104471039,IE
@@ -101085,10 +47837,7 @@
3104514048,3104515071,RU
3104515072,3104516095,GB
3104516096,3104517119,CY
-3104517120,3104517630,US
-3104517631,3104517631,IL
-3104517632,3104518142,US
-3104518143,3104518143,IL
+3104517120,3104518143,IL
3104518144,3104519167,RU
3104519168,3104520191,IT
3104520192,3104521215,CH
@@ -101108,7 +47857,7 @@
3104534528,3104535551,SE
3104535552,3104536575,ES
3104536576,3104537599,RO
-3104537600,3104538623,IL
+3104537600,3104538623,US
3104538624,3104539647,PL
3104539648,3104540671,RU
3104540672,3104541695,DE
@@ -101169,7 +47918,7 @@
3104598016,3104599039,ES
3104599040,3104600063,TR
3104600064,3104601087,UA
-3104601088,3104602111,FR
+3104601088,3104602111,PT
3104602112,3104603135,NL
3104603136,3104604159,RU
3104604160,3104605183,CH
@@ -101177,33 +47926,14 @@
3104606208,3104607231,GB
3104607232,3104608255,UA
3104608256,3104609279,NL
-3104609280,3104609407,SE
-3104609408,3104609439,PL
-3104609440,3104609471,US
-3104609472,3104609503,DE
-3104609504,3104609535,NL
-3104609536,3104609663,SE
-3104609664,3104609695,PL
-3104609696,3104609727,US
-3104609728,3104609759,DE
-3104609760,3104609791,NL
-3104609792,3104609919,SE
-3104609920,3104609951,PL
-3104609952,3104609983,US
-3104609984,3104610015,DE
-3104610016,3104610047,NL
-3104610048,3104610175,SE
-3104610176,3104610207,PL
-3104610208,3104610239,US
-3104610240,3104610271,DE
-3104610272,3104610303,NL
+3104609280,3104610303,SE
3104610304,3104611327,RU
3104611328,3104612351,IE
3104612352,3104613375,GB
3104613376,3104614399,SA
3104614400,3104615423,BA
3104615424,3104616447,SA
-3104616448,3104617471,FR
+3104616448,3104617471,DE
3104617472,3104618495,AT
3104618496,3104619519,PS
3104619520,3104621567,GB
@@ -101211,36 +47941,15 @@
3104622592,3104623615,GB
3104623616,3104624639,FR
3104624640,3104625663,RU
-3104625664,3104626687,BY
-3104626688,3104627711,NL
+3104625664,3104627711,NL
3104627712,3104628735,LB
3104628736,3104629759,TR
3104629760,3104630783,RU
3104630784,3104631807,GB
3104631808,3104632831,EE
-3104632832,3104633087,NL
-3104633088,3104633855,AT
+3104632832,3104633855,AT
3104633856,3104634879,JO
-3104634880,3104635031,SE
-3104635032,3104635039,BR
-3104635040,3104635071,PL
-3104635072,3104635103,DE
-3104635104,3104635135,NL
-3104635136,3104635287,SE
-3104635288,3104635295,KW
-3104635296,3104635327,PL
-3104635328,3104635359,DE
-3104635360,3104635391,NL
-3104635392,3104635543,SE
-3104635544,3104635551,MA
-3104635552,3104635583,PL
-3104635584,3104635615,DE
-3104635616,3104635647,NL
-3104635648,3104635799,SE
-3104635800,3104635807,QA
-3104635808,3104635839,PL
-3104635840,3104635871,DE
-3104635872,3104635903,NL
+3104634880,3104635903,SE
3104635904,3104637951,RU
3104637952,3104638975,UA
3104638976,3104639999,RS
@@ -101249,26 +47958,9 @@
3104642048,3104643071,KZ
3104643072,3104644095,RU
3104644096,3104645119,DE
-3104645120,3104646143,RU
+3104645120,3104646143,GB
3104646144,3104647167,FR
-3104647168,3104647319,GB
-3104647320,3104647327,AE
-3104647328,3104647359,PL
-3104647360,3104647391,IT
-3104647392,3104647423,NL
-3104647424,3104647575,GB
-3104647576,3104647583,SA
-3104647584,3104647615,PL
-3104647616,3104647647,IT
-3104647648,3104647679,NL
-3104647680,3104647839,GB
-3104647840,3104647871,PL
-3104647872,3104647903,IT
-3104647904,3104647935,NL
-3104647936,3104648095,GB
-3104648096,3104648127,PL
-3104648128,3104648159,IT
-3104648160,3104648191,NL
+3104647168,3104648191,GB
3104648192,3104649215,RU
3104649216,3104650239,GB
3104650240,3104651263,SI
@@ -101282,14 +47974,7 @@
3104658432,3104659455,JO
3104659456,3104660479,LU
3104660480,3104661503,NO
-3104661504,3104661727,SE
-3104661728,3104661759,PL
-3104661760,3104661983,SE
-3104661984,3104662015,PL
-3104662016,3104662239,SE
-3104662240,3104662271,PL
-3104662272,3104662495,SE
-3104662496,3104662527,PL
+3104661504,3104662527,SE
3104662528,3104663551,FR
3104663552,3104665599,GB
3104665600,3104668671,RU
@@ -101330,7 +48015,7 @@
3104706560,3104707583,UA
3104707584,3104708607,TR
3104708608,3104709631,ES
-3104709632,3104710655,UA
+3104709632,3104710655,NL
3104710656,3104711679,RU
3104711680,3104712703,ES
3104712704,3104714751,RU
@@ -101346,10 +48031,7 @@
3104723968,3104724991,GB
3104724992,3104726015,RU
3104726016,3104727039,DE
-3104727040,3104727295,FR
-3104727296,3104727551,DE
-3104727552,3104727807,ES
-3104727808,3104728063,IT
+3104727040,3104728063,CY
3104728064,3104729087,KZ
3104729088,3104730111,FR
3104730112,3104731135,CH
@@ -101360,7 +48042,6 @@
3104735232,3104736255,FR
3104736256,3104737279,JO
3104737280,3104738303,GB
-3104738304,3104739327,KW
3104739328,3104740351,GB
3104740352,3104741375,PL
3104741376,3104742399,GB
@@ -101401,9 +48082,7 @@
3104778240,3104779263,TR
3104779264,3104780287,PL
3104780288,3104782335,FR
-3104782336,3104783295,US
-3104783296,3104783327,NL
-3104783328,3104783359,US
+3104782336,3104783359,NL
3104783360,3104784383,RU
3104784384,3104785407,BA
3104785408,3104786431,FR
@@ -101432,7 +48111,6 @@
3104809984,3104811007,NL
3104811008,3104812031,IT
3104812032,3104813055,RU
-3104813056,3104814079,IT
3104814080,3104816127,DE
3104816128,3104817151,RU
3104817152,3104818175,DE
@@ -101448,15 +48126,7 @@
3104827392,3104828415,PL
3104828416,3104829439,AT
3104829440,3104830463,DK
-3104830464,3104831135,DE
-3104831136,3104831167,GB
-3104831168,3104831199,YE
-3104831200,3104831359,DE
-3104831360,3104831360,TR
-3104831361,3104831391,DE
-3104831392,3104831423,AT
-3104831424,3104831455,DE
-3104831456,3104831487,TR
+3104830464,3104831487,DE
3104831488,3104832511,NL
3104832512,3104833535,CZ
3104833536,3104834559,GB
@@ -101464,8 +48134,7 @@
3104835584,3104836607,RU
3104836608,3104837631,BA
3104837632,3104838655,DK
-3104838656,3104839423,NL
-3104839424,3104839679,GB
+3104838656,3104839679,NL
3104839680,3104840703,IQ
3104840704,3104841727,UA
3104841728,3104843775,PL
@@ -101475,7 +48144,8 @@
3104847872,3104848895,RU
3104848896,3104849919,DE
3104849920,3104850943,RU
-3104850944,3104851967,GB
+3104850944,3104851199,JE
+3104851200,3104851967,GB
3104851968,3104852991,DE
3104852992,3104854015,AT
3104854016,3104855039,GI
@@ -101505,8 +48175,7 @@
3104879616,3104880639,CZ
3104880640,3104881663,DE
3104881664,3104882687,AT
-3104882688,3104883199,MT
-3104883200,3104883711,DK
+3104882688,3104883711,MT
3104883712,3104884735,DE
3104884736,3104885759,SE
3104885760,3104886783,GB
@@ -101571,6 +48240,7 @@
3104948224,3104949247,DK
3104949248,3104950271,GB
3104950272,3104951295,RU
+3104951296,3104952319,DE
3104952320,3104953343,CH
3104953344,3104954367,CZ
3104954368,3104955391,DK
@@ -101595,8 +48265,7 @@
3104974848,3104975871,AL
3104975872,3104976895,RU
3104976896,3104977919,GB
-3104977920,3104978431,NL
-3104978432,3104978943,DE
+3104977920,3104978943,DE
3104978944,3104979967,BG
3104979968,3104980991,HR
3104980992,3104982015,SK
@@ -101658,10 +48327,7 @@
3105042432,3105043455,FR
3105043456,3105044479,DE
3105044480,3105045503,NL
-3105045504,3105046527,IQ
-3105046528,3105047039,NO
-3105047040,3105047295,SE
-3105047296,3105047551,NO
+3105046528,3105047551,NO
3105047552,3105048575,ES
3105048576,3105049599,SK
3105049600,3105050623,KW
@@ -101681,14 +48347,13 @@
3105064960,3105065983,FR
3105065984,3105067007,IT
3105067008,3105068031,GB
-3105068032,3105069055,CH
3105069056,3105070079,TR
3105070080,3105071103,ES
3105071104,3105072127,FR
3105072128,3105073151,IT
3105073152,3105074175,RU
3105074176,3105075199,DE
-3105075200,3105076223,DK
+3105075200,3105076223,SE
3105076224,3105077247,BE
3105077248,3105078271,IT
3105078272,3105079295,ES
@@ -101703,12 +48368,11 @@
3105087488,3105088511,FR
3105088512,3105089535,JO
3105089536,3105090559,DE
-3105090560,3105090687,NL
-3105090688,3105091583,BE
+3105090560,3105091583,GB
3105091584,3105092607,FR
3105092608,3105093631,UA
3105093632,3105094655,SE
-3105094656,3105097727,GB
+3105095680,3105097727,GB
3105097728,3105098751,FR
3105098752,3105099775,SE
3105099776,3105100799,FR
@@ -101728,7 +48392,2419 @@
3105117184,3105118207,FR
3105118208,3105119231,BG
3105119232,3105120255,IM
-3105120256,3105121279,EU
+3105120256,3105121279,GB
+3105121280,3105122303,EE
+3105122304,3105123327,NO
+3105123328,3105124351,ES
+3105124352,3105125375,BY
+3105125376,3105126399,ES
+3105126400,3105127423,KG
+3105127424,3105128447,KZ
+3105128448,3105129471,GB
+3105129472,3105130495,RU
+3105130496,3105131519,FI
+3105131520,3105132543,DK
+3105132544,3105133567,CH
+3105133568,3105134591,PL
+3105134592,3105135615,SA
+3105135616,3105136639,BG
+3105136640,3105137663,IR
+3105137664,3105138687,GB
+3105138688,3105139711,NO
+3105139712,3105140735,PL
+3105140736,3105142783,RU
+3105142784,3105143807,UA
+3105143808,3105144831,DE
+3105144832,3105145855,ES
+3105145856,3105146879,CZ
+3105146880,3105147903,CH
+3105147904,3105148927,DK
+3105148928,3105149951,CH
+3105149952,3105150975,CY
+3105150976,3105151999,UA
+3105152000,3105153023,NL
+3105153024,3105154047,RU
+3105154048,3105156095,DE
+3105156096,3105157119,AT
+3105157120,3105158143,DK
+3105158144,3105159167,NO
+3105159168,3105161215,GB
+3105161216,3105162239,FI
+3105162240,3105163263,TR
+3105163264,3105164287,IL
+3105164288,3105165311,GB
+3105165312,3105166335,IS
+3105166336,3105167359,GB
+3105167360,3105168383,IT
+3105168384,3105169407,DE
+3105169408,3105170431,ES
+3105170432,3105171455,PL
+3105171456,3105172479,DK
+3105172480,3105173503,ES
+3105173504,3105174527,FR
+3105174528,3105177599,NL
+3105177600,3105178623,RU
+3105178624,3105179647,IR
+3105179648,3105180671,IT
+3105180672,3105181695,IR
+3105181696,3105182719,FR
+3105182720,3105183743,PL
+3105183744,3105184767,SE
+3105184768,3105185791,RO
+3105185792,3105186815,HR
+3105186816,3105187839,DE
+3105187840,3105188863,FR
+3105188864,3105189887,GB
+3105189888,3105190911,FR
+3105190912,3105191935,SM
+3105191936,3105192959,PS
+3105192960,3105193983,DE
+3105193984,3105195007,FR
+3105195008,3105196031,GB
+3105196032,3105197055,IQ
+3105197056,3105198079,RU
+3105198080,3105199103,SE
+3105199104,3105200127,PL
+3105200128,3105201151,FR
+3105201152,3105202175,RU
+3105202176,3105203199,CZ
+3105203200,3105204223,DE
+3105204224,3105205247,NL
+3105205248,3105206271,IT
+3105206272,3105207295,UA
+3105207296,3105208319,RO
+3105208320,3105210367,NL
+3105210368,3105211391,FR
+3105211392,3105212415,CZ
+3105212416,3105213439,NL
+3105213440,3105214463,TR
+3105214464,3105215487,GB
+3105215488,3105216511,FR
+3105216512,3105217535,GB
+3105217536,3105218559,CZ
+3105218560,3105219583,DE
+3105219584,3105220607,FR
+3105220608,3105221631,DK
+3105221632,3105222655,AT
+3105222656,3105223679,NL
+3105223680,3105224703,DE
+3105224704,3105225727,IT
+3105225728,3105226751,AM
+3105226752,3105227775,RO
+3105227776,3105228799,NL
+3105228800,3105229823,PL
+3105229824,3105230847,NL
+3105230848,3105231871,UA
+3105231872,3105232895,AT
+3105232896,3105233919,RU
+3105233920,3105234943,IR
+3105234944,3105235967,LB
+3105235968,3105236991,IT
+3105236992,3105238015,GB
+3105238016,3105239039,DE
+3105239040,3105240063,FR
+3105240064,3105241087,CH
+3105241088,3105242111,TR
+3105242112,3105243135,RU
+3105243136,3105244159,KZ
+3105244160,3105245183,DE
+3105245184,3105246207,DK
+3105246208,3105248255,GB
+3105248256,3105249279,IT
+3105249280,3105250303,RS
+3105250304,3105251327,ES
+3105251328,3105252351,CZ
+3105252352,3105253375,TR
+3105253376,3105254399,CH
+3105254400,3105255423,FR
+3105255424,3105256447,PL
+3105256448,3105257471,FR
+3105257472,3105258495,NO
+3105258496,3105259519,CZ
+3105259520,3105260543,FR
+3105260544,3105261567,FI
+3105261568,3105262591,PL
+3105262592,3105263615,DE
+3105263616,3105264639,RS
+3105264640,3105265663,DE
+3105265664,3105266687,RU
+3105266688,3105267711,IE
+3105267712,3105268735,TR
+3105268736,3105269759,GB
+3105269760,3105270783,FR
+3105270784,3105271807,RU
+3105271808,3105272831,SK
+3105272832,3105273855,RU
+3105273856,3105274879,TR
+3105274880,3105276927,NL
+3105276928,3105277951,FR
+3105277952,3105278975,ES
+3105278976,3105279999,RU
+3105280000,3105281023,GB
+3105281024,3105282047,SK
+3105282048,3105283071,FR
+3105283072,3105284095,DE
+3105284096,3105285119,GB
+3105285120,3105286143,IT
+3105286144,3105287167,RU
+3105287168,3105288191,CZ
+3105288192,3105289215,GB
+3105289216,3105290239,AT
+3105290240,3105291263,TR
+3105291264,3105292287,CH
+3105292288,3105293311,DE
+3105293312,3105294335,GB
+3105294336,3105295359,RU
+3105295360,3105296383,PL
+3105296384,3105297407,LT
+3105297408,3105298431,PL
+3105298432,3105299455,NL
+3105299456,3105300479,IT
+3105300480,3105301503,RU
+3105301504,3105302527,ES
+3105302528,3105303551,FR
+3105303552,3105304575,IE
+3105304576,3105305599,GE
+3105305600,3105308671,GB
+3105308672,3105309695,RU
+3105309696,3105310719,ES
+3105310720,3105311743,TR
+3105311744,3105312767,SA
+3105312768,3105313791,RU
+3105313792,3105314815,IT
+3105314816,3105315839,GR
+3105315840,3105317887,FR
+3105317888,3105318911,GB
+3105318912,3105319935,UA
+3105319936,3105320959,HU
+3105320960,3105321983,SK
+3105321984,3105323007,GB
+3105323008,3105324031,ES
+3105324032,3105324287,SA
+3105324288,3105325055,BH
+3105325056,3105326079,IR
+3105326080,3105328127,FR
+3105328128,3105329151,NL
+3105329152,3105330175,NO
+3105330176,3105331199,PL
+3105331200,3105332223,IQ
+3105332224,3105333247,DE
+3105333248,3105334271,LV
+3105335296,3105336319,GR
+3105336320,3105337343,IL
+3105337344,3105339391,GB
+3105339392,3105340415,SY
+3105340416,3105341439,FR
+3105341440,3105342463,ES
+3105342464,3105343487,AE
+3105343488,3105344511,TJ
+3105344512,3105345535,NO
+3105345536,3105346559,DE
+3105346560,3105347583,NL
+3105347584,3105348607,DK
+3105348608,3105349631,ES
+3105349632,3105350655,DE
+3105350656,3105351679,RU
+3105351680,3105352703,GB
+3105352704,3105354751,DE
+3105354752,3105355775,BE
+3105355776,3105356799,NL
+3105356800,3105357823,GB
+3105357824,3105358847,IS
+3105358848,3105359871,ES
+3105359872,3105360895,CZ
+3105360896,3105361919,GB
+3105361920,3105362943,FR
+3105362944,3105363967,CZ
+3105363968,3105364991,PL
+3105364992,3105366015,FR
+3105366016,3105367039,AL
+3105367040,3105368063,SI
+3105368064,3105370111,RU
+3105370112,3105371135,NL
+3105371136,3105373183,RU
+3105373184,3105374207,SY
+3105374208,3105375231,GB
+3105375232,3105376255,DE
+3105376256,3105377279,GB
+3105377280,3105378303,IL
+3105378304,3105380351,GB
+3105380352,3105381375,PL
+3105381376,3105382399,RU
+3105382400,3105383423,GB
+3105383424,3105383679,BY
+3105383680,3105383935,SK
+3105383936,3105384447,AT
+3105384448,3105385471,IT
+3105385472,3105386495,DE
+3105386496,3105387519,RU
+3105387520,3105388543,IT
+3105388544,3105389567,GB
+3105389568,3105389823,LB
+3105389824,3105390591,TR
+3105390592,3105391615,JO
+3105391616,3105392639,NL
+3105392640,3105393663,IR
+3105393664,3105395711,FR
+3105395712,3105396735,IR
+3105396736,3105398783,FR
+3105398784,3105399807,GB
+3105399808,3105400831,PL
+3105400832,3105401855,DK
+3105401856,3105402879,NL
+3105402880,3105404927,RU
+3105404928,3105405951,FR
+3105405952,3105406975,NO
+3105406976,3105407999,FR
+3105408000,3105410047,PL
+3105410048,3105411071,IL
+3105411072,3105412095,BA
+3105412096,3105413119,RU
+3105413120,3105414143,PL
+3105414144,3105416191,NL
+3105416192,3105417215,IR
+3105417216,3105418239,IE
+3105418240,3105419263,CZ
+3105419264,3105420287,NL
+3105420288,3105421311,RU
+3105421312,3105422335,NL
+3105422336,3105423359,IR
+3105423360,3105424383,LT
+3105424384,3105426431,RU
+3105426432,3105427455,QA
+3105427456,3105428479,RU
+3105428480,3105429503,GR
+3105429504,3105430527,ES
+3105430528,3105431551,CH
+3105431552,3105432575,GB
+3105432576,3105433599,DE
+3105433600,3105434623,FR
+3105434624,3105435647,SE
+3105435648,3105436671,LT
+3105436672,3105437695,GR
+3105437696,3105438719,GB
+3105438720,3105439743,RU
+3105439744,3105440767,GB
+3105440768,3105441791,RU
+3105441792,3105442815,IT
+3105442816,3105443839,FI
+3105443840,3105444863,NL
+3105444864,3105445887,GB
+3105445888,3105446911,RU
+3105446912,3105447935,CH
+3105447936,3105448959,DE
+3105448960,3105449983,TR
+3105449984,3105451007,AE
+3105451008,3105452031,PL
+3105452032,3105453055,ES
+3105453056,3105454079,UA
+3105454080,3105455103,PL
+3105455104,3105456127,AT
+3105456128,3105457151,IT
+3105457152,3105458175,DE
+3105458176,3105459199,IT
+3105459200,3105460223,DK
+3105460224,3105461247,GB
+3105461248,3105462271,PL
+3105462272,3105463295,RU
+3105463296,3105464319,FR
+3105464320,3105465343,BE
+3105465344,3105466367,DE
+3105466368,3105467391,BE
+3105467392,3105468415,GB
+3105468416,3105469439,RU
+3105470464,3105471487,CZ
+3105471488,3105472511,GB
+3105472512,3105473535,CH
+3105473536,3105474559,ES
+3105474560,3105475583,FI
+3105475584,3105476607,IT
+3105476608,3105477631,GB
+3105477632,3105478655,DK
+3105478656,3105479679,PL
+3105479680,3105480703,GB
+3105480704,3105481727,CH
+3105481728,3105482751,NL
+3105482752,3105483775,IT
+3105483776,3105486847,GB
+3105486848,3105487871,SK
+3105487872,3105488895,IS
+3105488896,3105489407,BG
+3105489408,3105489663,FR
+3105489664,3105489919,BG
+3105489920,3105490943,ES
+3105490944,3105491967,SE
+3105491968,3105494015,GB
+3105494016,3105495039,BE
+3105495040,3105496063,AE
+3105496064,3105497087,RU
+3105497088,3105498111,IR
+3105498112,3105499135,DE
+3105499136,3105501183,RU
+3105501184,3105502207,FI
+3105502208,3105503231,RU
+3105503232,3105504255,NL
+3105504256,3105505279,DK
+3105505280,3105506303,IT
+3105506304,3105507327,TR
+3105507328,3105508351,RU
+3105508352,3105510399,DE
+3105510400,3105511423,SA
+3105511424,3105512447,FR
+3105512448,3105513471,GB
+3105513472,3105514495,DE
+3105514496,3105515519,RU
+3105515520,3105516543,FR
+3105516544,3105517567,NL
+3105517568,3105518591,RU
+3105518592,3105519615,GB
+3105519616,3105520639,RU
+3105520640,3105521663,FR
+3105521664,3105522687,NO
+3105522688,3105523711,LT
+3105523712,3105524735,ES
+3105524736,3105525759,IT
+3105525760,3105526783,TR
+3105526784,3105527807,GB
+3105527808,3105528831,JE
+3105528832,3105529855,DE
+3105529856,3105530879,LU
+3105530880,3105531903,NO
+3105531904,3105532927,RU
+3105532928,3105533951,RS
+3105533952,3105534975,BA
+3105534976,3105535231,GB
+3105535232,3105535773,NO
+3105535774,3105535774,RU
+3105535775,3105535999,NO
+3105536000,3105537023,AZ
+3105537024,3105538047,AT
+3105538048,3105539071,RU
+3105539072,3105540095,IT
+3105540096,3105541119,DE
+3105541120,3105542143,RU
+3105542144,3105543167,IR
+3105543168,3105544191,NL
+3105544192,3105545215,RU
+3105545216,3105546239,FR
+3105546240,3105547263,ES
+3105547264,3105548287,GB
+3105548288,3105549311,IR
+3105549312,3105549823,AT
+3105549824,3105550079,NL
+3105550080,3105550335,FR
+3105551360,3105552383,US
+3105552384,3105553407,FR
+3105553408,3105554431,DE
+3105554432,3105555455,DK
+3105555456,3105556479,CH
+3105556480,3105557503,DE
+3105557504,3105558527,UA
+3105558528,3105559551,NL
+3105559552,3105560575,GB
+3105560576,3105561599,NO
+3105561600,3105563647,NL
+3105563648,3105564671,IS
+3105564672,3105565695,NL
+3105565696,3105567743,RU
+3105567744,3105568767,PL
+3105568768,3105569791,MT
+3105569792,3105570815,HU
+3105570816,3105571839,LI
+3105571840,3105572863,KZ
+3105572864,3105573887,IT
+3105573888,3105574911,FR
+3105574912,3105575935,RU
+3105575936,3105576959,DE
+3105576960,3105577983,OM
+3105577984,3105579007,LV
+3105579008,3105580031,SE
+3105580032,3105581055,RU
+3105581056,3105582079,IL
+3105582080,3105583103,CH
+3105583104,3105584127,DK
+3105584128,3105585151,EG
+3105585152,3105586175,AT
+3105586176,3105587199,ES
+3105587200,3105588223,RS
+3105588224,3105589247,GB
+3105589248,3105590271,ES
+3105590272,3105591295,NL
+3105591296,3105592319,GB
+3105592320,3105593343,RU
+3105593344,3105595391,DE
+3105595392,3105596415,RU
+3105596416,3105598463,SE
+3105598464,3105599487,NL
+3105599488,3105600511,GB
+3105600512,3105601535,DE
+3105601536,3105602559,CH
+3105602560,3105603583,PL
+3105603584,3105604607,RU
+3105604608,3105605631,GB
+3105605632,3105606655,ES
+3105606656,3105607679,DK
+3105607680,3105608703,RU
+3105608704,3105609727,DE
+3105609728,3105610751,IQ
+3105610752,3105611775,SA
+3105611776,3105612799,FR
+3105612800,3105613823,US
+3105613824,3105614847,SE
+3105614848,3105615871,NL
+3105615872,3105616895,SE
+3105616896,3105617919,GB
+3105617920,3105618943,NL
+3105618944,3105619967,DE
+3105619968,3105620991,TR
+3105620992,3105622015,DE
+3105622016,3105623039,SI
+3105623040,3105624063,GB
+3105624064,3105625087,PL
+3105625088,3105626111,US
+3105626112,3105629183,GB
+3105629184,3105629695,BE
+3105629696,3105629951,NL
+3105629952,3105630207,BE
+3105630208,3105631231,FR
+3105631232,3105632255,GB
+3105632256,3105633279,ES
+3105633280,3105634303,IT
+3105634304,3105635327,NL
+3105636352,3105637375,IT
+3105637376,3105637631,NL
+3105637632,3105637887,DE
+3105637888,3105638399,US
+3105638400,3105639423,IM
+3105639424,3105640447,DE
+3105640448,3105641471,IT
+3105641472,3105642495,NL
+3105642496,3105644543,GB
+3105644544,3105645567,DE
+3105645568,3105646335,CZ
+3105646336,3105646591,SK
+3105646592,3105647615,MD
+3105647616,3105648639,UA
+3105648640,3105649663,GB
+3105649664,3105650687,PL
+3105650688,3105651199,EE
+3105651200,3105651455,PL
+3105651456,3105651711,EE
+3105651712,3105652735,SK
+3105652736,3105653759,NO
+3105653760,3105654783,TR
+3105654784,3105655807,SE
+3105655808,3105656831,ES
+3105656832,3105657855,SK
+3105657856,3105658879,NL
+3105658880,3105659903,IL
+3105659904,3105660927,DE
+3105660928,3105661951,TR
+3105661952,3105662975,GB
+3105662976,3105663999,ES
+3105664000,3105665023,DE
+3105665024,3105666047,PL
+3105666048,3105667071,GB
+3105667072,3105668095,DE
+3105668096,3105669119,NL
+3105669120,3105670143,CZ
+3105670144,3105671167,IE
+3105671168,3105673215,GB
+3105673216,3105674239,DE
+3105674240,3105675263,GB
+3105675264,3105676287,ES
+3105676288,3105678335,NL
+3105678336,3105679359,DE
+3105679360,3105680383,FR
+3105680384,3105681407,UA
+3105681408,3105682431,GB
+3105682432,3105683455,FI
+3105683456,3105684479,PL
+3105684480,3105686527,GB
+3105686528,3105687551,BE
+3105687552,3105688063,SE
+3105688064,3105688575,LV
+3105688576,3105689599,PL
+3105689600,3105690623,SI
+3105690624,3105691647,SE
+3105691648,3105692671,GR
+3105692672,3105693695,DE
+3105693696,3105696767,FR
+3105696768,3105697791,GB
+3105697792,3105698815,FR
+3105698816,3105700863,RU
+3105700864,3105701887,NL
+3105701888,3105702911,FR
+3105702912,3105703935,ES
+3105703936,3105704959,IT
+3105704960,3105705983,DK
+3105705984,3105707007,HU
+3105707008,3105708031,PL
+3105708032,3105709055,AT
+3105709056,3105710079,SA
+3105710080,3105711103,IT
+3105711104,3105712127,RS
+3105712128,3105713151,IT
+3105713152,3105714175,NL
+3105714176,3105715199,SE
+3105715200,3105716223,DE
+3105716224,3105717247,TR
+3105717248,3105719295,RU
+3105719296,3105721343,GB
+3105721344,3105722367,SI
+3105722368,3105723391,IT
+3105723392,3105724415,FR
+3105724416,3105725439,CH
+3105725440,3105726463,SK
+3105726464,3105727487,IT
+3105727488,3105727743,NO
+3105727744,3105727999,BE
+3105728000,3105728127,AT
+3105728128,3105728191,FI
+3105728192,3105728255,PT
+3105728256,3105728319,TR
+3105728320,3105728383,PL
+3105728384,3105728447,CZ
+3105728448,3105728511,LT
+3105728512,3105729535,DE
+3105729536,3105731583,GB
+3105731584,3105732607,FR
+3105732608,3105733631,KG
+3105733632,3105734655,DE
+3105734656,3105735679,TR
+3105735680,3105736703,IS
+3105736704,3105737727,NL
+3105737728,3105738751,IT
+3105738752,3105739775,GB
+3105739776,3105740799,ES
+3105740800,3105741823,DE
+3105741824,3105742847,IR
+3105742848,3105744895,GB
+3105744896,3105745919,FR
+3105745920,3105746943,UA
+3105746944,3105747967,DE
+3105747968,3105748991,FR
+3105748992,3105750015,IT
+3105750016,3105751039,UA
+3105751040,3105752063,RU
+3105752064,3105753087,IR
+3105753088,3105754111,GB
+3105754112,3105756159,RU
+3105756160,3105757183,US
+3105757184,3105758207,GB
+3105758208,3105759231,FR
+3105759232,3105760255,DE
+3105760256,3105761279,LB
+3105761280,3105762303,RU
+3105762304,3105763327,IT
+3105763328,3105764351,FR
+3105764352,3105765375,BE
+3105765376,3105766399,NL
+3105766400,3105769471,IT
+3105769472,3105770495,IE
+3105770496,3105771519,IR
+3105771520,3105772543,IT
+3105772544,3105773567,UA
+3105773568,3105774591,AZ
+3105774592,3105775615,FR
+3105775616,3105776639,RU
+3105776640,3105777663,DK
+3105777664,3105778687,RU
+3105778688,3105780735,IT
+3105780736,3105781759,RU
+3105781760,3105782783,SK
+3105782784,3105783807,PL
+3105783808,3105785855,FR
+3105785856,3105786879,SI
+3105786880,3105787903,ES
+3105787904,3105788927,AL
+3105788928,3105789951,SA
+3105789952,3105790975,SE
+3105790976,3105791999,DE
+3105792000,3105793023,DK
+3105793024,3105794047,NL
+3105794048,3105795071,GB
+3105795072,3105796095,LU
+3105796096,3105797119,NL
+3105797120,3105798143,IT
+3105798144,3105799167,IS
+3105799168,3105800191,IT
+3105800192,3105801215,RU
+3105801216,3105802239,ES
+3105802240,3105803263,UA
+3105803264,3105804287,NL
+3105804288,3105805311,FR
+3105805312,3105806335,GB
+3105806336,3105807359,FR
+3105807360,3105808383,RU
+3105808384,3105809407,NO
+3105809408,3105810431,RU
+3105810432,3105811455,IL
+3105811456,3105812479,NL
+3105812480,3105814527,ES
+3105814528,3105815551,JO
+3105815552,3105816575,BE
+3105816576,3105817599,FR
+3105817600,3105818623,DE
+3105818624,3105819647,NL
+3105819648,3105820671,GB
+3105821696,3105822719,ES
+3105822720,3105823743,PL
+3105823744,3105824767,AT
+3105824768,3105825791,RS
+3105825792,3105826815,CZ
+3105826816,3105827839,FR
+3105827840,3105828863,LV
+3105828864,3105829887,PL
+3105829888,3105830911,AT
+3105830912,3105831935,IT
+3105831936,3105832959,DE
+3105832960,3105833983,IT
+3105833984,3105835007,FI
+3105835008,3105836031,KZ
+3105836032,3105837055,DK
+3105837056,3105838079,PL
+3105838080,3105839103,UA
+3105839104,3105840127,PL
+3105840128,3105841151,EE
+3105841152,3105842175,IE
+3105842176,3105843199,CH
+3105843200,3105844223,ES
+3105844224,3105847295,RU
+3105847296,3105848319,BG
+3105848320,3105849343,IR
+3105849344,3105850367,US
+3105850368,3105851391,RU
+3105851392,3105852415,FI
+3105852416,3105853439,SE
+3105853440,3105854463,NL
+3105854464,3105855487,FR
+3105855488,3105856511,GB
+3105856512,3105857535,PT
+3105857536,3105859583,RU
+3105859584,3105860607,GB
+3105860608,3105861631,NL
+3105861632,3105862655,DK
+3105862656,3105863679,CH
+3105863680,3105864703,PL
+3105864704,3105865727,AE
+3105865728,3105866239,NL
+3105866240,3105866751,RU
+3105866752,3105867775,SE
+3105867776,3105868799,NL
+3105868800,3105869823,GB
+3105869824,3105870847,DE
+3105870848,3105871871,AT
+3105871872,3105872895,PL
+3105874944,3105875967,NL
+3105875968,3105876991,GB
+3105876992,3105878015,ES
+3105878016,3105879039,EE
+3105879040,3105880063,NL
+3105880064,3105881087,CH
+3105881088,3105882111,GB
+3105882112,3105883135,MD
+3105883136,3105884159,PL
+3105884160,3105885183,SE
+3105885184,3105886207,TR
+3105886208,3105887231,ES
+3105887232,3105888255,AL
+3105888256,3105889279,RO
+3105889280,3105890303,ES
+3105890304,3105891327,DE
+3105891328,3105892351,PT
+3105892352,3105893375,GB
+3105893376,3105894399,AZ
+3105894400,3105895423,PL
+3105895424,3105896447,GB
+3105896448,3105897471,RU
+3105897472,3105898495,UA
+3105898496,3105899007,CZ
+3105899008,3105900543,RU
+3105900544,3105902591,GB
+3105902592,3105903615,DE
+3105903616,3105904639,RU
+3105904640,3105905663,NO
+3105905664,3105906687,IE
+3105906688,3105908735,FR
+3105908736,3105910783,GB
+3105910784,3105911807,IL
+3105911808,3105912831,DE
+3105912832,3105913855,RU
+3105913856,3105914879,CH
+3105914880,3105915903,IR
+3105915904,3105916927,RU
+3105916928,3105917951,ES
+3105917952,3105918975,NL
+3105918976,3105919999,PL
+3105921024,3105922047,IE
+3105922048,3105923071,PL
+3105923072,3105924095,CZ
+3105924096,3105925119,RU
+3105925120,3105926143,BE
+3105926144,3105927167,BA
+3105927168,3105928191,IL
+3105928192,3105928447,ES
+3105928448,3105929215,CZ
+3105929216,3105930239,RU
+3105930240,3105931263,PT
+3105932288,3105933311,SE
+3105933312,3105933343,GB
+3105933344,3105933359,IT
+3105933360,3105933463,GB
+3105933464,3105933471,IT
+3105933472,3105933631,GB
+3105933632,3105933639,IT
+3105933640,3105934007,GB
+3105934008,3105934015,IT
+3105934016,3105934215,GB
+3105934216,3105934223,IT
+3105934224,3105934231,GB
+3105934232,3105934239,IT
+3105934240,3105934335,GB
+3105934336,3105935359,SE
+3105935360,3105936383,FR
+3105936384,3105937407,CH
+3105937408,3105938431,FR
+3105938432,3105939455,CH
+3105939456,3105940479,BY
+3105940480,3105941503,GR
+3105941504,3105942527,NL
+3105942528,3105943551,LU
+3105943552,3105944575,NL
+3105944576,3105945599,DE
+3105945600,3105946623,RU
+3105946624,3105947647,IE
+3105947648,3105948671,DE
+3105948672,3105949695,GB
+3105949696,3105950719,AT
+3105950720,3105951743,FR
+3105951744,3105952767,LU
+3105952768,3105953791,CH
+3105953792,3105954815,FR
+3105954816,3105955839,JO
+3105955840,3105956863,AL
+3105956864,3105957887,PL
+3105957888,3105958911,FR
+3105958912,3105959935,IQ
+3105959936,3105960959,SI
+3105960960,3105961983,HU
+3105961984,3105963007,IT
+3105963008,3105964031,TR
+3105964032,3105965055,ES
+3105965056,3105966079,NL
+3105966080,3105967103,FI
+3105967104,3105968127,GB
+3105968128,3105969151,HU
+3105969152,3105970175,GB
+3105970176,3105971199,FR
+3105971200,3105972223,GB
+3105972224,3105973247,FI
+3105973248,3105974271,US
+3105974272,3105975295,MD
+3105975296,3105976319,TR
+3105976320,3105977343,LB
+3105977344,3105978367,NL
+3105978368,3105979391,RU
+3105979392,3105980415,KW
+3105980416,3105981439,TR
+3105981440,3105982463,ES
+3105982464,3105983487,CZ
+3105983488,3105984511,UA
+3105984512,3105985279,CZ
+3105985280,3105985535,HU
+3105985536,3105986559,GB
+3105986560,3105987583,NL
+3105987584,3105988607,CZ
+3105988608,3105989631,RU
+3105989632,3105990655,NL
+3105990656,3105991679,US
+3105991680,3105992703,SA
+3105992704,3105993727,BH
+3105993728,3105994751,DE
+3105994752,3105995775,GB
+3105995776,3105996799,DE
+3105996800,3105997823,GB
+3105997824,3105999871,RU
+3105999872,3106000895,DE
+3106000896,3106001919,GB
+3106001920,3106002943,FR
+3106002944,3106003967,DE
+3106003968,3106004991,NL
+3106004992,3106006015,CH
+3106006016,3106007039,RU
+3106007040,3106008063,CY
+3106008064,3106009087,RU
+3106009088,3106010111,GB
+3106010112,3106011135,RU
+3106011136,3106012159,CH
+3106012160,3106013183,AT
+3106013184,3106014207,DE
+3106014208,3106015231,NO
+3106015232,3106016255,GB
+3106016256,3106017279,DK
+3106017280,3106018303,IQ
+3106018304,3106019327,RU
+3106019328,3106020351,LV
+3106020352,3106021375,PL
+3106021376,3106022399,FR
+3106022400,3106023423,IT
+3106023424,3106023679,NL
+3106023680,3106024319,US
+3106024320,3106024447,RU
+3106024448,3106025471,GB
+3106025472,3106026495,PL
+3106026496,3106027519,NL
+3106027520,3106027535,PL
+3106027536,3106027551,FR
+3106027552,3106027567,CH
+3106027568,3106027583,DE
+3106027584,3106027599,CZ
+3106027600,3106027615,IT
+3106027616,3106027631,NL
+3106027632,3106029567,GB
+3106029568,3106031615,NL
+3106031616,3106032639,AZ
+3106032640,3106033663,PL
+3106033664,3106034687,GB
+3106034688,3106035711,IT
+3106035712,3106036735,DE
+3106036736,3106037759,RS
+3106037760,3106038783,GB
+3106038784,3106039807,AZ
+3106039808,3106041855,IE
+3106041856,3106042879,DE
+3106042880,3106043903,GB
+3106043904,3106044927,IE
+3106044928,3106045951,GB
+3106045952,3106046975,TR
+3106046976,3106047999,DK
+3106048000,3106049023,IT
+3106049024,3106050047,FR
+3106050048,3106051071,NL
+3106051072,3106052095,LI
+3106052096,3106053119,RU
+3106053120,3106054143,NL
+3106054144,3106055167,IR
+3106055168,3106056191,GB
+3106056192,3106057215,NL
+3106057216,3106058239,GB
+3106058240,3106059263,NL
+3106059264,3106060287,RU
+3106060288,3106061311,DE
+3106061312,3106062335,NL
+3106062336,3106063359,ES
+3106063360,3106064383,DE
+3106064384,3106065407,NL
+3106065408,3106066431,IT
+3106066432,3106067455,GB
+3106067456,3106068479,DE
+3106068480,3106070527,NL
+3106070528,3106071551,UA
+3106071552,3106072575,BH
+3106072576,3106073599,GB
+3106073600,3106074623,PL
+3106074624,3106076671,RU
+3106076672,3106078719,GB
+3106078720,3106080767,RU
+3106080768,3106081791,UA
+3106081792,3106082815,DE
+3106082816,3106083839,KZ
+3106083840,3106084863,TR
+3106084864,3106085887,GB
+3106085888,3106086911,CH
+3106086912,3106087935,NL
+3106087936,3106091007,RU
+3106091008,3106092031,GB
+3106092032,3106093055,BE
+3106093056,3106094079,GB
+3106094080,3106095103,CH
+3106095104,3106096127,FR
+3106096128,3106097151,LV
+3106097152,3106098175,GB
+3106098176,3106098431,NL
+3106098432,3106098687,GB
+3106098688,3106098943,US
+3106098944,3106099199,GB
+3106099200,3106100223,NO
+3106100224,3106101247,SE
+3106101248,3106102271,GB
+3106102272,3106103295,ES
+3106103296,3106104319,NL
+3106104320,3106105343,UA
+3106105344,3106106367,AE
+3106106368,3106107391,CZ
+3106107392,3106108415,NL
+3106108416,3106110463,RU
+3106110464,3106111487,GB
+3106111488,3106112511,RU
+3106112512,3106113535,CZ
+3106113536,3106114559,NL
+3106114560,3106115583,ES
+3106115584,3106116607,DE
+3106116608,3106117631,GB
+3106117632,3106118655,AT
+3106118656,3106119679,BA
+3106119680,3106120703,RU
+3106120704,3106121727,BE
+3106121728,3106122751,RU
+3106122752,3106123775,BE
+3106123776,3106124799,BG
+3106124800,3106125823,AT
+3106125824,3106126847,NO
+3106126848,3106127871,ES
+3106127872,3106128895,RU
+3106128896,3106129919,PL
+3106129920,3106130943,NO
+3106130944,3106131967,FR
+3106131968,3106132991,DE
+3106132992,3106134015,NO
+3106134016,3106135039,DE
+3106135040,3106136063,RU
+3106136064,3106137087,CH
+3106137088,3106138111,GB
+3106138112,3106139135,DE
+3106139136,3106140159,SE
+3106140160,3106141183,DE
+3106141184,3106142207,IS
+3106142208,3106143231,GB
+3106143232,3106144255,CH
+3106144256,3106145279,ES
+3106145280,3106146303,BE
+3106146304,3106147327,GB
+3106147328,3106148351,FR
+3106148352,3106149375,AT
+3106150400,3106151423,GB
+3106151424,3106152447,NO
+3106152448,3106153471,GB
+3106153472,3106154495,AM
+3106154496,3106155519,NL
+3106155520,3106156543,DE
+3106156544,3106157567,NO
+3106157568,3106158591,IT
+3106158592,3106159615,UA
+3106159616,3106160639,RU
+3106160640,3106161663,IT
+3106161664,3106162687,BA
+3106162688,3106163711,IT
+3106163712,3106164735,GB
+3106164736,3106165759,LT
+3106165760,3106166783,BA
+3106166784,3106167807,BH
+3106167808,3106168831,RO
+3106168832,3106169855,FI
+3106169856,3106170879,CZ
+3106170880,3106171903,RU
+3106171904,3106172927,GB
+3106172928,3106173951,NL
+3106173952,3106175999,DE
+3106176000,3106177023,NO
+3106177024,3106178047,IT
+3106178048,3106179071,NL
+3106179072,3106180095,DE
+3106180096,3106181119,NO
+3106181120,3106182143,ES
+3106182144,3106183167,AX
+3106183168,3106184191,PL
+3106184192,3106185215,RU
+3106185216,3106186239,CZ
+3106186240,3106187263,BE
+3106187264,3106188287,PL
+3106188288,3106189311,RU
+3106189312,3106190335,KW
+3106190336,3106191359,LU
+3106191360,3106192383,DK
+3106192384,3106193407,UA
+3106193408,3106194431,IR
+3106194432,3106195455,UA
+3106195456,3106196479,AZ
+3106196480,3106198527,ES
+3106198528,3106199551,NO
+3106199552,3106200575,FR
+3106200576,3106202623,CH
+3106202624,3106203647,RU
+3106203648,3106204671,GR
+3106204672,3106205695,MT
+3106205696,3106206719,NO
+3106206720,3106207743,GE
+3106207744,3106208767,GB
+3106208768,3106209791,RO
+3106209792,3106210815,CH
+3106210816,3106211839,NL
+3106211840,3106212863,BE
+3106212864,3106213887,PS
+3106213888,3106214911,DE
+3106214912,3106215935,NL
+3106215936,3106216959,RS
+3106216960,3106217983,FR
+3106217984,3106219007,ME
+3106219008,3106220031,US
+3106220032,3106221055,FR
+3106221056,3106222079,IT
+3106222080,3106223103,RU
+3106223104,3106224127,IR
+3106224128,3106226175,RU
+3106226176,3106228223,NL
+3106228224,3106229247,CH
+3106229248,3106230271,GB
+3106230272,3106231295,IT
+3106231296,3106232319,DK
+3106232320,3106233343,IQ
+3106233344,3106234367,IT
+3106234368,3106235391,QA
+3106235392,3106235647,BA
+3106235648,3106235903,RU
+3106235904,3106236159,RO
+3106236160,3106236415,TR
+3106236416,3106237439,AT
+3106237440,3106238463,QA
+3106238464,3106239487,PL
+3106239488,3106240511,IT
+3106240512,3106241535,IE
+3106241536,3106242559,NL
+3106243584,3106244607,FI
+3106244608,3106245631,DE
+3106245632,3106246655,SE
+3106246656,3106247679,DE
+3106247680,3106248703,NO
+3106248704,3106249727,DE
+3106249728,3106250751,FR
+3106250752,3106251775,IQ
+3106251776,3106252799,RU
+3106252800,3106253823,RS
+3106253824,3106255871,GB
+3106255872,3106256895,IT
+3106256896,3106257919,TR
+3106257920,3106258943,RU
+3106258944,3106259967,UA
+3106259968,3106260991,GB
+3106260992,3106262015,AT
+3106262016,3106263039,IT
+3106263040,3106264063,PT
+3106264064,3106265087,ES
+3106265088,3106266111,GB
+3106266112,3106267135,FR
+3106267136,3106269183,ES
+3106269184,3106270207,IS
+3106270208,3106271231,GB
+3106271232,3106272255,SK
+3106272256,3106273279,NL
+3106273280,3106274303,DE
+3106274304,3106275327,FR
+3106275328,3106276351,FI
+3106276352,3106277375,AT
+3106277376,3106278399,DE
+3106278400,3106279423,NL
+3106279424,3106280447,RU
+3106280448,3106281471,FR
+3106281472,3106282495,DK
+3106282496,3106283519,LB
+3106283520,3106285567,GB
+3106285568,3106286591,DE
+3106286592,3106287615,GB
+3106287616,3106289663,DE
+3106289664,3106290687,LV
+3106290688,3106291711,IE
+3106291712,3106292735,CH
+3106292736,3106293759,NO
+3106293760,3106294783,UA
+3106294784,3106295807,DE
+3106295808,3106296831,GB
+3106296832,3106297855,RU
+3106297856,3106298879,NL
+3106298880,3106299903,FR
+3106299904,3106300927,GB
+3106300928,3106301951,NL
+3106301952,3106302975,GB
+3106302976,3106303999,CZ
+3106304000,3106305023,GB
+3106305024,3106306047,DE
+3106306048,3106307071,NO
+3106307072,3106308095,HU
+3106308096,3106309119,ES
+3106309120,3106310143,GB
+3106310144,3106311167,IT
+3106311168,3106312191,PT
+3106312192,3106313215,BA
+3106313216,3106314239,GB
+3106314240,3106316287,NL
+3106316288,3106317311,RU
+3106317312,3106318335,LT
+3106318336,3106319359,AT
+3106319360,3106320383,DK
+3106320384,3106321407,HR
+3106321408,3106322431,DK
+3106322432,3106323455,ME
+3106323456,3106324479,CZ
+3106324480,3106325503,AL
+3106325504,3106326527,FR
+3106326528,3106326783,NL
+3106326784,3106327551,IL
+3106327552,3106328575,RU
+3106328576,3106329599,UA
+3106329600,3106330623,IQ
+3106330624,3106331647,UA
+3106331648,3106333695,PL
+3106333696,3106334719,GB
+3106334720,3106335743,NL
+3106335744,3106336767,NO
+3106336768,3106337791,RU
+3106337792,3106338815,GB
+3106338816,3106339839,PL
+3106339840,3106340863,IT
+3106340864,3106341887,BA
+3106341888,3106342911,RU
+3106342912,3106343935,CH
+3106343936,3106344959,DE
+3106344960,3106345983,RU
+3106345984,3106347007,DE
+3106347008,3106348031,IT
+3106348032,3106349055,UA
+3106349056,3106350079,CH
+3106350080,3106351103,SA
+3106351104,3106352127,ES
+3106352128,3106353151,NL
+3106353152,3106354175,DE
+3106354176,3106355199,NL
+3106355200,3106356223,DE
+3106356224,3106357247,ES
+3106357248,3106358271,DE
+3106358272,3106359295,ES
+3106359296,3106360319,UA
+3106360320,3106361343,IQ
+3106361344,3106362367,RU
+3106362368,3106364415,DE
+3106364416,3106365439,CH
+3106365440,3106366463,ES
+3106366464,3106367487,IT
+3106367488,3106369535,DE
+3106369536,3106371583,RU
+3106371584,3106372607,NL
+3106372608,3106373631,SE
+3106373632,3106374655,FI
+3106374656,3106375679,RU
+3106375680,3106376703,SA
+3106376704,3106377727,FR
+3106377728,3106378751,SE
+3106378752,3106379775,RU
+3106379776,3106380799,LU
+3106380800,3106381823,FR
+3106381824,3106382847,PL
+3106382848,3106383871,IE
+3106383872,3106384895,FR
+3106384896,3106385919,AT
+3106385920,3106386943,DE
+3106386944,3106387967,IR
+3106387968,3106388991,FI
+3106388992,3106390015,IT
+3106390016,3106391039,RU
+3106391040,3106392063,UA
+3106392064,3106393087,NO
+3106393088,3106394111,RU
+3106394112,3106395135,PT
+3106395136,3106396159,NO
+3106396160,3106397183,FR
+3106397184,3106398207,DE
+3106398208,3106399231,UA
+3106399232,3106400255,CH
+3106400256,3106402303,GB
+3106402304,3106403327,IT
+3106403328,3106405375,GB
+3106405376,3106406399,DE
+3106406400,3106407423,RU
+3106407424,3106409471,GB
+3106409472,3106411519,IT
+3106411520,3106412543,HU
+3106412544,3106413567,GB
+3106413568,3106414591,RU
+3106414592,3106415615,AZ
+3106415616,3106416639,ES
+3106416640,3106417663,RU
+3106417664,3106418687,DK
+3106418688,3106419711,UA
+3106419712,3106420735,AT
+3106420736,3106421759,NL
+3106421760,3106422783,LU
+3106422784,3106423807,IE
+3106423808,3106424831,BE
+3106424832,3106425855,TR
+3106425856,3106426879,RU
+3106426880,3106427903,CZ
+3106427904,3106428927,TR
+3106428928,3106429951,FI
+3106429952,3106431999,NL
+3106432000,3106433023,FR
+3106433024,3106434047,RU
+3106434048,3106435071,NL
+3106435072,3106436095,PL
+3106436096,3106437119,DE
+3106437120,3106438143,IS
+3106438144,3106439167,GB
+3106439168,3106440191,RU
+3106440192,3106441215,DE
+3106441216,3106442239,HU
+3106442240,3106443263,GB
+3106443264,3106445311,ES
+3106445312,3106446335,RU
+3106446336,3106447359,US
+3106447360,3106448383,DE
+3106448384,3106449407,BG
+3106449408,3106450431,AT
+3106450432,3106451455,DE
+3106451456,3106452479,AZ
+3106452480,3106453503,UA
+3106453504,3106454527,SE
+3106454528,3106455551,ME
+3106455552,3106456575,PS
+3106456576,3106457599,PL
+3106457600,3106458623,FI
+3106458624,3106459647,GB
+3106459648,3106460671,LB
+3106460672,3106461695,IT
+3106461696,3106462719,CH
+3106462720,3106463743,IT
+3106463744,3106464767,IR
+3106464768,3106465791,PL
+3106466816,3106467839,EE
+3106467840,3106468863,IR
+3106468864,3106469887,GB
+3106469888,3106470911,DE
+3106470912,3106471935,NL
+3106471936,3106472959,IR
+3106472960,3106473983,FR
+3106473984,3106475007,GB
+3106475008,3106476031,DE
+3106476032,3106477055,NO
+3106477056,3106478079,UA
+3106478080,3106479103,GB
+3106479104,3106480127,FR
+3106480128,3106481151,IT
+3106481152,3106482175,NL
+3106482176,3106483199,RU
+3106483200,3106484223,GB
+3106484224,3106485247,NL
+3106485248,3106486271,CZ
+3106486272,3106488319,DE
+3106488320,3106489343,NO
+3106489344,3106490367,PL
+3106490368,3106491391,IT
+3106491392,3106492415,CH
+3106492416,3106493439,PL
+3106493440,3106494463,SY
+3106494464,3106495487,SA
+3106495488,3106496511,PL
+3106496512,3106497535,ES
+3106497536,3106498559,RU
+3106498560,3106500607,DE
+3106500608,3106501631,RU
+3106501632,3106502655,PT
+3106502656,3106503679,RU
+3106503680,3106504703,NL
+3106504704,3106505727,PL
+3106505728,3106506751,CH
+3106506752,3106509823,NL
+3106509824,3106510847,SE
+3106510848,3106511871,FR
+3106511872,3106512895,GE
+3106512896,3106513919,RU
+3106513920,3106514943,IT
+3106514944,3106515967,RU
+3106515968,3106516991,SE
+3106516992,3106518015,SI
+3106518016,3106519039,FR
+3106519040,3106520063,RU
+3106520064,3106521087,GB
+3106521088,3106522111,UA
+3106522112,3106523135,RU
+3106523136,3106524159,AZ
+3106524160,3106525183,RU
+3106525184,3106526207,CY
+3106526208,3106527231,IT
+3106527232,3106528255,KW
+3106528256,3106532351,GB
+3106532352,3106533375,BE
+3106533376,3106534399,NO
+3106534400,3106535423,ES
+3106535424,3106536447,FR
+3106536448,3106537471,IT
+3106537472,3106538495,GB
+3106538496,3106539519,SK
+3106539520,3106540543,NL
+3106540544,3106541567,RU
+3106541568,3106542591,GB
+3106542592,3106543615,ES
+3106543616,3106544639,IR
+3106544640,3106545663,FR
+3106545664,3106546687,CY
+3106546688,3106547711,MK
+3106547712,3106548735,UA
+3106548736,3106549759,PL
+3106549760,3106550783,RU
+3106550784,3106551807,GB
+3106551808,3106552831,NL
+3106552832,3106553855,RU
+3106553856,3106554879,GB
+3106554880,3106556927,NL
+3106556928,3106558975,RU
+3106558976,3106559999,NL
+3106560000,3106562047,RU
+3106562048,3106563071,TJ
+3106564096,3106565119,ES
+3106565120,3106566143,RU
+3106566144,3106568191,FR
+3106568192,3106569215,ES
+3106569216,3106570239,RU
+3106570240,3106571263,UA
+3106571264,3106572287,FR
+3106572288,3106573311,SE
+3106573312,3106574335,AE
+3106574336,3106575359,RU
+3106575360,3106577407,GB
+3106577408,3106578431,RU
+3106578432,3106579455,IT
+3106579456,3106580479,RU
+3106580480,3106581503,NO
+3106581504,3106582527,TR
+3106582528,3106583551,FR
+3106583552,3106584575,RU
+3106584576,3106585599,PL
+3106585600,3106586623,FR
+3106586624,3106587647,IQ
+3106587648,3106589695,NL
+3106590720,3106591743,GR
+3106591744,3106592767,IR
+3106592768,3106593791,LU
+3106593792,3106594815,GB
+3106594816,3106595839,IR
+3106595840,3106596863,RU
+3106596864,3106597887,FR
+3106597888,3106598911,GB
+3106598912,3106599935,ES
+3106599936,3106601983,CH
+3106601984,3106603007,DE
+3106603008,3106604031,BE
+3106604032,3106606079,RU
+3106606080,3106607103,AT
+3106607104,3106608127,IT
+3106608128,3106609151,NL
+3106609152,3106611199,DE
+3106611200,3106612223,GB
+3106612224,3106613247,FR
+3106613248,3106614271,GB
+3106614272,3106615295,FR
+3106615296,3106616319,GB
+3106616320,3106617343,DE
+3106617344,3106618367,BG
+3106618368,3106619391,FR
+3106619392,3106620415,NL
+3106620416,3106621439,FR
+3106621440,3106622463,ES
+3106622464,3106623487,GB
+3106623488,3106624511,NL
+3106624512,3106625535,RU
+3106625536,3106626559,FI
+3106626560,3106627583,RU
+3106627584,3106628607,GB
+3106628608,3106629631,RU
+3106629632,3106630655,EE
+3106630656,3106630911,US
+3106630912,3106631679,GB
+3106631680,3106632703,SK
+3106632704,3106633727,DE
+3106633728,3106634751,FI
+3106634752,3106635775,BE
+3106635776,3106636799,GB
+3106636800,3106637823,CZ
+3106637824,3106638847,PL
+3106638848,3106639871,DK
+3106639872,3106640895,GB
+3106640896,3106641919,IT
+3106641920,3106642943,BE
+3106642944,3106643967,GB
+3106643968,3106644991,PL
+3106644992,3106646015,IT
+3106646016,3106647039,DE
+3106647040,3106648063,HU
+3106648064,3106649087,DE
+3106649088,3106650111,ES
+3106650112,3106651135,GB
+3106651136,3106652159,AZ
+3106652160,3106653183,IE
+3106653184,3106654207,RU
+3106654208,3106655231,CH
+3106655232,3106656255,HU
+3106656256,3106657279,GB
+3106657280,3106658303,NL
+3106658304,3106659327,GB
+3106659328,3106660351,NL
+3106660352,3106661375,UA
+3106661376,3106662399,TR
+3106662400,3106663423,IE
+3106663424,3106664447,UA
+3106664448,3106665471,FR
+3106665472,3106666495,CH
+3106666496,3106667519,UA
+3106667520,3106668543,ES
+3106668544,3106669567,RU
+3106669568,3106670591,DE
+3106670592,3106672639,RU
+3106672640,3106673663,ES
+3106673664,3106674687,CH
+3106674688,3106676735,ES
+3106676736,3106677759,DE
+3106677760,3106678783,IR
+3106678784,3106680831,FR
+3106680832,3106682879,AT
+3106682880,3106683903,LU
+3106683904,3106684927,ES
+3106684928,3106685951,IR
+3106685952,3106686975,RU
+3106686976,3106687999,LT
+3106688000,3106689023,GB
+3106689024,3106690047,CH
+3106690048,3106691071,UA
+3106691072,3106692095,FR
+3106692096,3106693119,NL
+3106693120,3106694143,NO
+3106694144,3106695167,IR
+3106695168,3106697215,DE
+3106697216,3106698239,IR
+3106698240,3106699263,BG
+3106699264,3106700287,RU
+3106700288,3106701311,BG
+3106701312,3106702335,NL
+3106702336,3106703359,DE
+3106703360,3106704383,NL
+3106704384,3106705407,FR
+3106705408,3106706431,GR
+3106706432,3106707455,DE
+3106707456,3106708479,LB
+3106708480,3106709503,LI
+3106709504,3106710527,NL
+3106710528,3106711551,RU
+3106711552,3106712575,NL
+3106712576,3106713599,PL
+3106713600,3106714623,DE
+3106714624,3106715647,IT
+3106715648,3106716671,SE
+3106716672,3106717695,CZ
+3106717696,3106718719,TR
+3106718720,3106719743,CH
+3106719744,3106720767,DE
+3106720768,3106722815,AT
+3106722816,3106723839,IT
+3106723840,3106724863,PL
+3106724864,3106725887,IT
+3106725888,3106726911,NL
+3106726912,3106727935,AM
+3106727936,3106728959,ES
+3106728960,3106729983,RU
+3106729984,3106731007,IS
+3106731008,3106732031,NL
+3106732032,3106735103,GB
+3106735104,3106737151,IE
+3106737152,3106738175,RO
+3106738176,3106739199,DE
+3106739200,3106740223,DK
+3106740224,3106741247,GB
+3106741248,3106742271,NL
+3106742272,3106743295,FR
+3106743296,3106744319,NO
+3106744320,3106745343,SM
+3106745344,3106746367,NL
+3106746368,3106747391,DK
+3106747392,3106748415,BE
+3106748416,3106749439,CZ
+3106749440,3106750463,RU
+3106750464,3106751487,BG
+3106751488,3106752511,IT
+3106752512,3106753535,ES
+3106753536,3106754559,IS
+3106754560,3106755583,RU
+3106755584,3106756607,SE
+3106756608,3106757631,DE
+3106757632,3106758655,RU
+3106758656,3106759679,GB
+3106759680,3106760703,RU
+3106760704,3106761727,IE
+3106761728,3106762751,GB
+3106762752,3106763775,DE
+3106763776,3106764799,NL
+3106764800,3106765823,SE
+3106765824,3106766847,CZ
+3106766848,3106767871,SE
+3106767872,3106768895,DE
+3106768896,3106769919,CZ
+3106769920,3106770943,EE
+3106770944,3106771967,RU
+3106771968,3106772991,DK
+3106772992,3106774015,BG
+3106774016,3106775039,AE
+3106775040,3106776063,GB
+3106776064,3106777087,ES
+3106777088,3106778111,GB
+3106778112,3106779135,FR
+3106779136,3106780159,NO
+3106780160,3106781183,FR
+3106781184,3106782207,DK
+3106782208,3106783231,IR
+3106783232,3106783743,NL
+3106783744,3106784255,AE
+3106784256,3106785279,HU
+3106785280,3106786303,CZ
+3106786304,3106787327,DE
+3106787328,3106788351,IT
+3106788352,3106789375,AT
+3106789376,3106790399,PL
+3106790400,3106792447,GB
+3106792448,3106793471,FR
+3106793472,3106794495,AT
+3106794496,3106795519,CH
+3106795520,3106796543,DE
+3106796544,3106797567,UA
+3106797568,3106798591,DE
+3106798592,3106799615,FR
+3106799616,3106800639,IR
+3106800640,3106801663,GR
+3106801664,3106804735,RU
+3106804736,3106805759,EE
+3106805760,3106806783,IT
+3106806784,3106807807,NL
+3106807808,3106808831,HR
+3106808832,3106809855,DK
+3106809856,3106810879,TR
+3106810880,3106812927,RU
+3106812928,3106813951,TR
+3106813952,3106814975,CH
+3106814976,3106815999,MD
+3106816000,3106817023,NL
+3106817024,3106818047,IT
+3106818048,3106819071,IE
+3106819072,3106820095,BE
+3106820096,3106824191,CH
+3106824192,3106825215,RU
+3106825216,3106826239,IT
+3106826240,3106827263,PL
+3106827264,3106828287,IR
+3106828288,3106829311,GB
+3106829312,3106830335,NL
+3106830336,3106831359,US
+3106831360,3106832383,ES
+3106832384,3106833407,DE
+3106833408,3106834431,NO
+3106834432,3106835455,DE
+3106835456,3106836479,IT
+3106836480,3106837503,KW
+3106837504,3106838527,UA
+3106838528,3106838783,KZ
+3106838784,3106839551,RU
+3106839552,3106840575,NL
+3106840576,3106841599,BG
+3106841600,3106842623,FR
+3106842624,3106843647,PL
+3106843648,3106844671,GB
+3106844672,3106845695,GE
+3106845696,3106846719,NL
+3106846720,3106847743,RU
+3106847744,3106848767,UA
+3106848768,3106849791,NL
+3106849792,3106850815,RU
+3106850816,3106851839,GB
+3106851840,3106852863,PL
+3106852864,3106853887,GB
+3106853888,3106854911,CH
+3106854912,3106855935,IR
+3106855936,3106856959,UA
+3106856960,3106857983,NO
+3106857984,3106859007,FR
+3106859008,3106860031,NL
+3106860032,3106861055,UA
+3106861056,3106863103,PL
+3106863104,3106864127,UA
+3106864128,3106865151,IE
+3106865152,3106866175,NL
+3106866176,3106867199,AZ
+3106867200,3106868223,LV
+3106868224,3106869247,NL
+3106869248,3106870271,ES
+3106870272,3106871295,NL
+3106871296,3106872319,CH
+3106872320,3106873343,BE
+3106873344,3106874367,ES
+3106874368,3106875391,RU
+3106875392,3106876415,SE
+3106876416,3106877439,CZ
+3106877440,3106878463,IR
+3106878464,3106879487,RU
+3106879488,3106880511,MK
+3106880512,3106881535,GB
+3106881536,3106882559,PL
+3106882560,3106883583,BE
+3106883584,3106884607,GB
+3106884608,3106885631,FI
+3106885632,3106886655,FR
+3106886656,3106887679,US
+3106887680,3106888703,RS
+3106888704,3106889727,LV
+3106889728,3106890751,IT
+3106890752,3106891775,NL
+3106891776,3106892799,GB
+3106892800,3106893823,IT
+3106893824,3106894847,NL
+3106894848,3106895871,GB
+3106895872,3106896895,NL
+3106896896,3106897919,DE
+3106897920,3106898943,ES
+3106898944,3106899967,NL
+3106899968,3106900991,IT
+3106900992,3106902015,DE
+3106902016,3106903039,IE
+3106903040,3106904063,BE
+3106904064,3106906111,RU
+3106906112,3106907135,HU
+3106907136,3106908159,SE
+3106908160,3106909183,NL
+3106909184,3106910207,IL
+3106910208,3106911231,CZ
+3106911232,3106912255,IQ
+3106912256,3106913279,HU
+3106913280,3106914303,ME
+3106914304,3106915327,SE
+3106915328,3106917375,NL
+3106917376,3106918399,RU
+3106918400,3106919423,RS
+3106919424,3106920447,ES
+3106920448,3106921471,GB
+3106921472,3106922495,CZ
+3106922496,3106923519,NL
+3106923520,3106924543,IT
+3106924544,3106925567,DE
+3106925568,3106926591,NL
+3106926592,3106927615,FR
+3106927616,3106928639,ES
+3106928640,3106929663,NO
+3106929664,3106930687,FR
+3106930688,3106931711,DE
+3106931712,3106932735,AT
+3106932736,3106933759,PL
+3106933760,3106934783,BE
+3106934784,3106935807,RU
+3106935808,3106936831,CZ
+3106936832,3106937855,TR
+3106937856,3106938879,PL
+3106938880,3106939903,IT
+3106939904,3106940927,RU
+3106940928,3106941951,HU
+3106941952,3106943999,FR
+3106944000,3106945023,IT
+3106945024,3106946047,DE
+3106946048,3106947071,GB
+3106947072,3106948095,AE
+3106948096,3106949119,NL
+3106949120,3106950143,RU
+3106950144,3106951167,GB
+3106951168,3106952191,SE
+3106952192,3106954239,ES
+3106954240,3106955263,DE
+3106955264,3106956287,IT
+3106956288,3106957311,NL
+3106957312,3106958335,DE
+3106958336,3106959359,GB
+3106959360,3106960383,RU
+3106960384,3106961407,DE
+3106961408,3106962431,IE
+3106962432,3106963455,KZ
+3106963456,3106964479,PL
+3106964480,3106965503,FR
+3106965504,3106966527,KG
+3106966528,3106967551,IT
+3106967552,3106968575,CH
+3106968576,3106969599,KZ
+3106969600,3106970623,DK
+3106970624,3106971647,DE
+3106971648,3106973695,GB
+3106973696,3106974719,PL
+3106974720,3106975743,BA
+3106975744,3106976767,PL
+3106976768,3106977791,TR
+3106977792,3106978815,RU
+3106978816,3106979839,KW
+3106979840,3106980863,ES
+3106980864,3106981887,UA
+3106981888,3106982911,FR
+3106982912,3106984959,DE
+3106984960,3106985983,TR
+3106985984,3106989055,DE
+3106989056,3106990079,CH
+3106990080,3106991103,PL
+3106991104,3106992127,RU
+3106992128,3106993151,AM
+3106993152,3106994175,DE
+3106994176,3106995199,SK
+3106995200,3106996223,FR
+3106996224,3106997247,SI
+3106997248,3106998271,NO
+3106998272,3106999295,IT
+3106999296,3107000319,PL
+3107000320,3107001343,DE
+3107001344,3107002367,FR
+3107002368,3107003391,AL
+3107003392,3107004415,PL
+3107004416,3107007487,GB
+3107007488,3107008511,TR
+3107008512,3107009535,NL
+3107009536,3107010559,AT
+3107010560,3107011583,IT
+3107011584,3107012607,IE
+3107012608,3107013631,RU
+3107013632,3107014655,DE
+3107014656,3107015679,GB
+3107015680,3107016703,DE
+3107016704,3107017727,NL
+3107017728,3107018751,IR
+3107018752,3107019775,BG
+3107019776,3107020799,GB
+3107020800,3107021823,IR
+3107021824,3107022847,DE
+3107022848,3107023871,IR
+3107023872,3107024895,RU
+3107024896,3107025919,GB
+3107025920,3107026943,SI
+3107026944,3107027967,NL
+3107027968,3107028991,GB
+3107028992,3107030015,TR
+3107030016,3107031039,SE
+3107031040,3107032063,DE
+3107032064,3107034111,NL
+3107034112,3107035135,PL
+3107035136,3107036159,CH
+3107036160,3107037183,ES
+3107037184,3107038207,BH
+3107038208,3107039231,GE
+3107039232,3107040255,ES
+3107040256,3107041279,GB
+3107041280,3107042303,AT
+3107042304,3107043327,BE
+3107043328,3107044351,ES
+3107044352,3107045375,CZ
+3107045376,3107046399,ES
+3107046400,3107047423,NO
+3107047424,3107048447,PL
+3107048448,3107049471,IT
+3107049472,3107050495,FR
+3107050496,3107051519,IT
+3107051520,3107052543,GB
+3107052544,3107053567,CH
+3107053568,3107054591,ES
+3107054592,3107057663,GB
+3107057664,3107058687,RU
+3107058688,3107059711,LU
+3107059712,3107060735,IT
+3107060736,3107061759,DK
+3107061760,3107062783,BY
+3107062784,3107063807,MD
+3107063808,3107064831,RU
+3107064832,3107065855,HR
+3107065856,3107067903,GB
+3107067904,3107068927,RU
+3107068928,3107069951,HU
+3107069952,3107070975,FR
+3107070976,3107073023,SE
+3107073024,3107074047,ES
+3107074048,3107075071,PL
+3107075072,3107076095,FR
+3107076096,3107077119,BA
+3107077120,3107078143,NL
+3107078144,3107079167,FR
+3107079168,3107080191,TR
+3107080192,3107082239,FR
+3107082240,3107083263,RU
+3107083264,3107084287,BE
+3107084288,3107085311,FI
+3107085312,3107086335,NL
+3107086336,3107087359,EE
+3107087360,3107088383,IE
+3107088384,3107089407,NL
+3107089408,3107090431,IT
+3107090432,3107091455,FR
+3107091456,3107092479,ES
+3107092480,3107093503,DE
+3107093504,3107094527,CZ
+3107094528,3107095551,FR
+3107095552,3107096575,CY
+3107096576,3107097599,RU
+3107097600,3107098623,DE
+3107098624,3107099647,ES
+3107099648,3107101695,CZ
+3107101696,3107102719,RU
+3107102720,3107103743,GB
+3107103744,3107104767,PL
+3107104768,3107105791,ES
+3107105792,3107106815,NL
+3107106816,3107107839,ES
+3107107840,3107108863,AL
+3107108864,3107109887,RS
+3107109888,3107110911,CH
+3107110912,3107111935,DE
+3107111936,3107112959,ES
+3107112960,3107113983,RU
+3107113984,3107115007,ES
+3107115008,3107116031,NL
+3107116032,3107117055,SK
+3107117056,3107118079,RU
+3107118080,3107120127,CH
+3107120128,3107121151,CZ
+3107121152,3107122175,AT
+3107122176,3107123199,CH
+3107123200,3107124223,GB
+3107124224,3107125247,FI
+3107125248,3107126271,UA
+3107126272,3107127295,FR
+3107127296,3107128319,SA
+3107128320,3107129343,US
+3107129344,3107130367,AT
+3107130368,3107131391,IT
+3107131392,3107132415,GE
+3107132416,3107133439,RU
+3107133440,3107134463,CY
+3107134464,3107135487,CZ
+3107135488,3107136511,SA
+3107136512,3107137535,TR
+3107137536,3107138559,IR
+3107138560,3107139583,ES
+3107139584,3107142655,NL
+3107142656,3107143679,RU
+3107143680,3107144703,HU
+3107144704,3107145727,CH
+3107145728,3107146751,IE
+3107146752,3107147775,DK
+3107147776,3107148799,GB
+3107148800,3107149823,DE
+3107149824,3107150847,PL
+3107150848,3107151871,PT
+3107151872,3107152895,PL
+3107152896,3107153919,GE
+3107153920,3107154943,IE
+3107154944,3107155967,ES
+3107155968,3107156991,TR
+3107156992,3107158015,PL
+3107158016,3107159039,IT
+3107159040,3107160063,RU
+3107160064,3107161087,AT
+3107161088,3107162111,GR
+3107162112,3107163135,IT
+3107163136,3107164159,RU
+3107164160,3107165183,SA
+3107165184,3107166207,NL
+3107166208,3107167231,AE
+3107167232,3107168255,RU
+3107168256,3107169279,ES
+3107169280,3107170303,TR
+3107170304,3107171327,IT
+3107171328,3107172351,GB
+3107172352,3107173375,FR
+3107173376,3107174399,PL
+3107174400,3107175423,DE
+3107175424,3107176447,HU
+3107176448,3107177471,NL
+3107177472,3107178495,AT
+3107178496,3107179519,IR
+3107179520,3107180543,SA
+3107180544,3107181567,RU
+3107181568,3107182591,JO
+3107182592,3107183615,FR
+3107183616,3107184639,IQ
+3107184640,3107185663,SE
+3107185664,3107186687,CZ
+3107186688,3107187711,GB
+3107187712,3107188735,MT
+3107188736,3107189759,CZ
+3107189760,3107190783,NL
+3107190784,3107191807,CZ
+3107191808,3107192831,GB
+3107192832,3107194879,NL
+3107194880,3107195903,IT
+3107195904,3107196927,NL
+3107196928,3107197951,ES
+3107197952,3107198975,AT
+3107198976,3107199999,GB
+3107200000,3107201023,RU
+3107201024,3107202047,FR
+3107202048,3107203071,GB
+3107203072,3107204095,NO
+3107204096,3107205119,FR
+3107205120,3107206143,BG
+3107206144,3107207167,NL
+3107207168,3107208191,DE
+3107208192,3107209215,NL
+3107209216,3107210239,IT
+3107210240,3107213311,RU
+3107213312,3107214335,GE
+3107214336,3107215359,FR
+3107215360,3107216383,CY
+3107216384,3107217407,IE
+3107217408,3107218431,CZ
+3107218432,3107219455,IQ
+3107219456,3107220479,NL
+3107220480,3107221503,GB
+3107221504,3107222527,IT
+3107222528,3107223551,IQ
+3107223552,3107224575,AT
+3107224576,3107225599,FR
+3107225600,3107226623,AZ
+3107226624,3107227647,RU
+3107227648,3107228671,US
+3107228672,3107229695,RU
+3107229696,3107231743,GB
+3107231744,3107232767,RU
+3107232768,3107233791,SE
+3107233792,3107234815,DE
+3107234816,3107235839,FI
+3107235840,3107236863,PL
+3107236864,3107237887,CZ
+3107237888,3107238911,NL
+3107238912,3107239935,SE
+3107239936,3107241983,AT
+3107241984,3107243007,PL
+3107243008,3107245055,GB
+3107245056,3107246079,BG
+3107246080,3107248127,NL
+3107248128,3107249151,IT
+3107249152,3107250175,GB
+3107250176,3107251199,NL
+3107251200,3107252223,TR
+3107252224,3107253247,SY
+3107253248,3107254271,NL
+3107254272,3107255295,IT
+3107255296,3107256319,DE
+3107256320,3107257343,CZ
+3107257344,3107258367,GB
+3107258368,3107259391,IT
+3107259392,3107260415,CZ
+3107260416,3107261439,NL
+3107261440,3107262463,SI
+3107262464,3107263487,GB
+3107263488,3107264511,RU
+3107264512,3107265535,FR
+3107265536,3107266559,GB
+3107266560,3107267583,IE
+3107267584,3107268607,IT
+3107268608,3107270655,DE
+3107270656,3107271679,NL
+3107271680,3107272703,AE
+3107272704,3107273727,GB
+3107273728,3107274751,TR
+3107274752,3107275775,SE
+3107275776,3107276799,IT
+3107276800,3107277823,BY
+3107277824,3107278847,UA
+3107278848,3107279871,FR
+3107279872,3107280895,FI
+3107280896,3107281919,NL
+3107281920,3107282943,GB
+3107282944,3107283967,PL
+3107283968,3107284991,AL
+3107284992,3107286015,KG
+3107286016,3107287039,AT
+3107287040,3107288063,RS
+3107288064,3107289087,NO
+3107289088,3107290111,IT
+3107290112,3107291135,PL
+3107291136,3107292159,NL
+3107292160,3107293183,PL
+3107293184,3107294207,FR
+3107294208,3107295231,DE
+3107295232,3107296255,PL
+3107296256,3107297279,IT
+3107297280,3107298303,PL
+3107298304,3107299327,DE
+3107299328,3107300351,NL
+3107300352,3107301375,SE
+3107301376,3107303423,GB
+3107303424,3107304447,DE
+3107304448,3107305471,AT
+3107305472,3107306495,FR
+3107306496,3107307519,NO
+3107307520,3107308543,IT
+3107308544,3107310591,RO
+3107310592,3107311615,DE
+3107311616,3107312639,IL
+3107312640,3107313663,SE
+3107313664,3107315711,DE
+3107315712,3107316735,GB
+3107316736,3107317759,KG
+3107317760,3107318783,RU
+3107318784,3107319807,NL
+3107319808,3107320831,OM
+3107320832,3107321855,SA
+3107321856,3107322879,NL
+3107322880,3107323903,IT
+3107323904,3107324927,ES
+3107324928,3107325951,CH
+3107325952,3107326975,FR
+3107326976,3107327999,LT
+3107328000,3107329023,AE
+3107329024,3107330047,RU
+3107330048,3107331071,GE
+3107331072,3107332095,NO
+3107332096,3107333119,IT
+3107333120,3107334143,FR
+3107334144,3107335167,RU
+3107335168,3107336191,NL
+3107336192,3107337215,RU
+3107337216,3107339263,PL
+3107339264,3107340287,LB
+3107340288,3107341311,GB
+3107341312,3107342335,DE
+3107342336,3107343359,GB
+3107343360,3107344383,DE
+3107344384,3107345407,CH
+3107345408,3107346431,GB
+3107346432,3107347455,TR
+3107347456,3107348479,NL
+3107348480,3107349503,LB
+3107349504,3107350527,PL
+3107350528,3107351551,IE
+3107351552,3107352575,DE
+3107352576,3107353599,NL
+3107353600,3107355647,DE
+3107355648,3107356671,GB
+3107356672,3107357695,SI
+3107357696,3107358719,SY
+3107358720,3107359743,RU
+3107359744,3107360767,GB
+3107360768,3107361791,AT
+3107361792,3107362815,DE
+3107362816,3107363839,IT
+3107363840,3107364863,IQ
+3107364864,3107365887,CY
+3107365888,3107366911,IQ
+3107366912,3107367935,GB
+3107367936,3107368959,CH
+3107368960,3107369983,RU
+3107369984,3107371007,NL
+3107371008,3107372031,PL
+3107372032,3107373055,DE
+3107373056,3107374079,ES
+3107374081,3107374100,MT
+3107374101,3107374120,CR
+3107374121,3107374140,IT
+3107374141,3107374160,ES
+3107374161,3107374180,AU
+3107374181,3107374200,SI
+3107374201,3107374220,BR
+3107374221,3107374240,CA
+3107374241,3107374260,BO
+3107374261,3107374280,US
+3107374321,3107374332,MX
+3107374334,3107374335,MX
+3107375104,3107376127,GB
+3107376128,3107377151,NL
+3107377152,3107378175,AT
+3107378176,3107379199,IT
+3107379200,3107380223,NL
+3107380224,3107381247,RU
+3107381248,3107382271,IE
+3107382272,3107383295,FR
+3107383296,3107384319,DE
+3107384320,3107385343,RU
+3107385344,3107386367,DE
+3107386368,3107387391,RU
+3107387392,3107388415,BE
+3107388416,3107389439,KG
+3107389440,3107390463,RU
+3107390464,3107391487,RO
+3107391488,3107392511,SE
+3107392512,3107393535,HU
+3107393536,3107394559,GB
+3107394560,3107395583,NL
+3107395584,3107396607,AT
+3107396608,3107397631,GR
+3107397632,3107398655,FI
+3107398656,3107399679,AZ
+3107399680,3107400703,RU
+3107400704,3107401727,AL
+3107401728,3107402751,EE
+3107402752,3107403775,NL
+3107403776,3107404799,ES
+3107404800,3107405823,GB
+3107405824,3107406847,PL
+3107406848,3107408895,DE
+3107408896,3107409919,GB
+3107409920,3107410943,IT
+3107410944,3107411967,FI
+3107411968,3107412991,IT
+3107412992,3107414015,BE
+3107414016,3107415039,FR
+3107415040,3107416063,DE
+3107416064,3107417087,NO
+3107417088,3107419135,NL
+3107419136,3107422207,DE
+3107422208,3107423231,NL
+3107423232,3107424255,GB
+3107424256,3107425279,NL
+3107425280,3107426303,RO
+3107426304,3107427327,FR
+3107427328,3107428351,AL
+3107428352,3107429375,DE
+3107429376,3107430399,CH
+3107430400,3107431423,GB
+3107431424,3107432447,FR
+3107432448,3107433471,IT
+3107433472,3107434495,RU
+3107434496,3107435519,FI
+3107435520,3107436543,DE
+3107436544,3107437567,IQ
+3107437568,3107438591,GB
+3107438592,3107439615,DE
+3107439616,3107440639,DK
+3107440640,3107442687,IE
+3107443712,3107444735,IT
+3107444736,3107445759,ES
+3107445760,3107446783,DE
+3107446784,3107447807,IR
+3107447808,3107448831,BG
+3107448832,3107449855,DE
+3107449856,3107450879,AT
+3107450880,3107451903,DE
+3107451904,3107452927,FR
+3107452928,3107453951,ES
+3107453952,3107454975,GB
+3107454976,3107455999,IT
+3107456000,3107457023,GB
+3107457024,3107458047,IT
+3107458048,3107459071,IS
+3107459072,3107460095,UA
+3107460096,3107461119,GB
+3107461120,3107462143,CH
+3107462144,3107464191,NL
+3107464192,3107465215,PL
+3107465216,3107467263,GB
+3107467264,3107468287,FR
+3107468288,3107469311,NL
+3107469312,3107470335,DK
+3107470336,3107471359,NL
+3107471360,3107473407,GB
+3107473408,3107474431,IL
+3107474432,3107475455,RO
+3107475456,3107476479,NL
+3107476480,3107477503,BG
+3107477504,3107478527,AE
+3107478528,3107480575,IR
+3107480576,3107481599,DK
+3107481600,3107482623,DE
+3107482624,3107483647,ES
+3107483648,3107484671,DE
+3107484672,3107485695,RU
+3107485696,3107486719,IT
+3107486720,3107487743,AT
+3107487744,3107489791,DE
+3107489792,3107490815,MT
+3107490816,3107491839,DK
+3107491840,3107492863,NL
+3107492864,3107493887,DE
+3107493888,3107494911,FR
+3107494912,3107495935,IT
+3107495936,3107495999,FR
+3107496000,3107496031,BS
+3107496032,3107496063,VG
+3107496064,3107496319,FR
+3107496320,3107496703,NL
+3107496704,3107496719,PE
+3107496720,3107496735,KP
+3107496736,3107496751,FJ
+3107496752,3107496767,AR
+3107496768,3107496783,FR
+3107496784,3107496799,AQ
+3107496800,3107496815,MX
+3107496816,3107496831,CN
+3107496832,3107496847,BR
+3107496848,3107496863,KP
+3107496864,3107496895,FR
+3107496896,3107496911,IS
+3107496912,3107496959,FR
+3107496960,3107497983,DK
+3107497984,3107499007,IT
+3107499008,3107500031,PL
+3107500032,3107501055,FR
+3107501056,3107502079,ES
+3107502080,3107503103,NO
+3107503104,3107504127,PL
+3107504128,3107505151,IQ
+3107505152,3107506175,SA
+3107506176,3107507199,GB
+3107507200,3107508223,FR
+3107508224,3107509247,PL
+3107509248,3107510271,SE
+3107510272,3107511295,IT
+3107511296,3107512319,SI
+3107512320,3107513343,NL
+3107513344,3107514367,DE
+3107514368,3107515391,US
+3107515392,3107516415,TR
+3107516416,3107517439,FR
+3107517440,3107518463,PL
+3107518464,3107519487,MK
+3107519488,3107520511,MT
+3107520512,3107521535,DE
+3107521536,3107522559,SE
+3107522560,3107523583,NL
+3107523584,3107524607,FR
+3107524608,3107525631,SI
+3107525632,3107526655,IT
+3107526656,3107527679,DE
+3107527680,3107528703,RU
+3107528704,3107531775,GB
+3107531776,3107532799,MD
+3107532800,3107533823,AT
+3107533824,3107534847,FR
+3107534848,3107536895,NL
+3107536896,3107537919,TR
+3107537920,3107538943,AM
+3107538944,3107539967,KZ
+3107539968,3107540991,GB
+3107540992,3107542015,RO
+3107542016,3107543039,SE
+3107543040,3107544063,DE
+3107544064,3107545087,IR
+3107545088,3107546111,NL
+3107546112,3107547135,GB
+3107547136,3107548159,SE
+3107548160,3107549183,IT
+3107549184,3107551231,IE
+3107551232,3107552255,JO
+3107552256,3107553279,FR
+3107553280,3107554303,BE
+3107554304,3107555327,IR
+3107555328,3107556351,SE
+3107556352,3107557375,NL
+3107557376,3107558399,SI
+3107558400,3107559423,FR
+3107559424,3107561471,GB
+3107561472,3107562495,GL
+3107562496,3107563519,IR
+3107563520,3107564543,SE
+3107564544,3107565567,ES
+3107565568,3107566591,AT
+3107566592,3107567615,FI
+3107567616,3107568639,DE
+3107568640,3107569663,GB
+3107569664,3107571711,ES
+3107571712,3107572735,IR
+3107572736,3107573759,ES
+3107573760,3107574783,IT
+3107574784,3107575807,JE
+3107575808,3107576831,DE
+3107576832,3107577855,FR
+3107577856,3107578879,SI
+3107578880,3107579903,CZ
+3107579904,3107580927,IT
+3107580928,3107581951,RU
+3107581952,3107582975,DE
+3107582976,3107583999,TR
+3107584000,3107585023,RU
+3107585024,3107586047,NO
+3107586048,3107587071,DE
+3107587072,3107588095,IT
+3107588096,3107589119,FR
+3107589120,3107590143,IQ
+3107590144,3107591167,IE
+3107591168,3107592191,BG
+3107592192,3107593215,NL
+3107593216,3107594239,DE
+3107594240,3107595263,FI
+3107595264,3107596287,DE
+3107596288,3107597311,CZ
+3107597312,3107598335,IT
+3107598336,3107599359,PL
+3107599360,3107600383,AT
+3107600384,3107601407,NL
+3107601408,3107602431,DK
+3107602432,3107603455,LT
+3107603456,3107604479,NO
+3107604480,3107605503,HR
+3107605504,3107606527,SE
+3107606528,3107607551,PT
+3107607552,3107609599,GB
+3107609600,3107610623,BA
+3107610624,3107611647,BE
+3107611648,3107612671,SK
+3107612672,3107613695,IT
+3107613696,3107614719,DE
+3107614720,3107615743,RU
+3107615744,3107617791,IT
+3107617792,3107618815,RU
+3107618816,3107619839,CH
+3107619840,3107620863,IT
+3107620864,3107621887,NO
+3107621888,3107622911,SA
+3107622912,3107623935,SE
+3107623936,3107624959,NL
+3107624960,3107625983,RU
+3107625984,3107627007,DE
+3107627008,3107628031,PL
+3107628032,3107629055,GB
+3107629056,3107630079,DE
+3107630080,3107631103,ES
+3107631104,3107632127,GB
+3107632128,3107633151,SI
+3107633152,3107634175,FR
+3107634176,3107635199,RU
+3107635200,3107636223,IT
+3107636224,3107637247,ES
+3107637248,3107638271,LB
+3107638272,3107639295,RU
+3107639296,3107640319,ES
+3107640320,3107641343,DK
+3107641344,3107643391,RU
+3107643392,3107644415,IT
+3107644416,3107645439,FR
+3107645440,3107646463,IE
+3107646464,3107647487,NL
+3107647488,3107648511,IR
+3107648512,3107649535,TR
+3107649536,3107651583,RU
+3107651584,3107652607,CZ
+3107652608,3107653631,PL
+3107653632,3107654655,FR
+3107654656,3107655679,DE
+3107655680,3107656703,BE
+3107656704,3107657727,IT
+3107657728,3107658751,SI
+3107658752,3107659775,TR
+3107659776,3107660799,EE
+3107660800,3107661823,NL
+3107661824,3107662847,FR
+3107662848,3107663871,TR
+3107663872,3107664895,ES
+3107664896,3107665919,CH
+3107665920,3107666943,RU
+3107666944,3107667967,GB
+3107667968,3107668991,ES
+3107668992,3107670015,AM
+3107670016,3107671039,TR
+3107671040,3107672063,NL
+3107672064,3107673087,IT
+3107673088,3107674111,AE
+3107674112,3107675135,PL
+3107675136,3107676159,GB
+3107676160,3107678207,DE
+3107678208,3107679231,DK
+3107679232,3107680255,PL
+3107680256,3107681279,IR
+3107681280,3107682303,FI
+3107682304,3107683327,CZ
+3107683328,3107684351,GB
+3107684352,3107685375,DE
+3107685376,3107686399,IT
+3107686400,3107688447,RU
+3107688448,3107689471,CZ
+3107689472,3107690495,US
+3107690496,3107691519,IT
+3107691520,3107692543,UA
+3107692544,3107693567,PL
+3107693568,3107694591,IT
+3107694592,3107695615,BE
3120562176,3120594943,CO
3120594944,3120599039,AR
3120599040,3120601087,EC
@@ -101736,7 +50812,9 @@
3120602112,3120603135,BO
3120603136,3120610303,AR
3120610304,3120611327,PY
-3120611328,3120627711,AR
+3120611328,3120617471,AR
+3120617472,3120617727,CL
+3120617728,3120627711,AR
3120627712,3120644095,NI
3120644096,3120660479,DO
3120660480,3120668671,PA
@@ -101758,7 +50836,10 @@
3120824320,3120840703,CR
3120840704,3120857087,AR
3120857088,3120922623,EC
-3120922624,3120930815,PA
+3120922624,3120922879,PA
+3120922880,3120922943,CR
+3120922944,3120930815,PA
+3120930816,3120934911,CR
3120934912,3120949247,AR
3120949248,3120951295,CL
3120951296,3120955391,AR
@@ -101799,13 +50880,17 @@
3122734080,3122734591,US
3122734592,3122735103,AR
3122735104,3122735615,US
-3122735616,3122737407,AR
-3122737408,3122737663,US
-3122737664,3122737919,AR
-3122737920,3122738431,US
+3122735616,3122736127,AR
+3122736128,3122736383,US
+3122736384,3122737407,AR
+3122737408,3122738431,US
3122738432,3122739199,AR
3122739200,3122739455,US
-3122739456,3122741247,AR
+3122739456,3122739711,AR
+3122739712,3122740223,US
+3122740224,3122740479,AR
+3122740480,3122740735,US
+3122740736,3122741247,AR
3122741248,3122757631,DO
3122757632,3122774015,EC
3122774016,3122790399,AR
@@ -101834,20 +50919,31 @@
3124846592,3124848639,AR
3124848640,3124849663,PA
3124849664,3124850687,AR
-3124850688,3124854783,HN
+3124850688,3124853887,HN
+3124853888,3124853903,FR
+3124853904,3124854783,HN
3124854784,3124887551,CL
3124887552,3124953087,EC
3124953088,3125018623,CL
3125018624,3125280767,EC
3125280768,3125542911,PA
-3125542912,3125673983,NI
+3125542912,3125658111,NI
+3125658112,3125658367,MX
+3125658368,3125673983,NI
3125673984,3125805055,CL
3125805056,3126329343,CO
3126329344,3126853631,VE
-3126853632,3126870015,AR
+3126853632,3126855807,AR
+3126855808,3126855935,US
+3126855936,3126857855,AR
+3126857856,3126857983,US
+3126857984,3126858495,AR
+3126858496,3126858623,US
+3126858624,3126870015,AR
3126870016,3126874111,VE
3126874112,3126878207,CR
-3126878208,3126886399,PA
+3126878208,3126882303,PA
+3126882304,3126886399,US
3126886400,3126918143,AR
3126918144,3126919167,HN
3126919168,3127115775,CO
@@ -101864,14 +50960,19 @@
3128557568,3129999359,AR
3129999360,3130261503,CO
3130261504,3130277887,CL
-3130294272,3130302463,AR
+3130277888,3130284031,AR
+3130284032,3130286079,DO
+3130286080,3130290175,PA
+3130290176,3130302463,AR
3130302464,3130312703,PA
3130312704,3130314751,AR
3130314752,3130315775,CL
3130315776,3130316799,CR
3130316800,3130318847,CW
-3130318848,3130327039,AR
-3130327040,3130392575,DO
+3130318848,3130319871,AR
+3130319872,3130320895,RU
+3130320896,3130327039,AR
+3130327040,3130458111,DO
3130458112,3130523647,GT
3130523648,3130654719,AR
3130654720,3130785791,CO
@@ -101887,7 +50988,8 @@
3131310080,3131572223,VE
3131572224,3131834367,CO
3131834368,3132096511,CL
-3132096512,3132227583,CR
+3132096512,3132211199,CR
+3132211200,3132227583,AR
3132227584,3132293119,EC
3132293120,3132309503,HN
3132309504,3132313599,CR
@@ -101896,7 +50998,8 @@
3132321792,3132325887,PA
3132325888,3132358655,SR
3132358656,3132489727,CO
-3132489728,3132555263,AR
+3132489728,3132588031,AR
+3132588032,3132620799,CO
3132620800,3132915711,VE
3132915712,3132948479,PA
3132948480,3133014015,AR
@@ -101906,11 +51009,14 @@
3133073408,3133074431,CW
3133074432,3133075455,CL
3133075456,3133079551,CW
-3133079552,3133083647,AR
-3133083648,3133087743,UY
-3133087744,3133145087,AR
+3133079552,3133145087,AR
3133145088,3145727999,BR
-3145728000,3154116607,MX
+3145728000,3149135871,MX
+3149135872,3149398015,BR
+3149398016,3149881343,MX
+3149881344,3149889535,BR
+3149922304,3154051071,MX
+3154051072,3154116607,BR
3154116608,3154124799,RU
3154124800,3154126847,PL
3154126848,3154128895,RU
@@ -101934,28 +51040,17 @@
3156279296,3156344831,PL
3156344832,3156410367,IR
3156410368,3156475903,RU
-3156475904,3156539391,HU
-3156539392,3156539647,RO
-3156539648,3156541439,HU
+3156475904,3156541439,HU
3156541440,3156606975,PT
3156606976,3156672511,TR
-3156672512,3156676863,GB
-3156676864,3156677119,ES
-3156677120,3156738047,GB
+3156672512,3156738047,GB
3156738048,3156759431,DE
3156759432,3156759432,GB
-3156759433,3156791439,DE
-3156791440,3156791455,NL
-3156791456,3156793751,DE
-3156793752,3156793759,IT
-3156793760,3156800287,DE
-3156800288,3156800295,IT
-3156800296,3156803583,DE
+3156759433,3156803583,DE
3156803584,3156869119,TR
-3156869120,3156901887,LU
-3156901888,3156910079,SG
-3156910080,3156918271,US
-3156918272,3156934655,LU
+3156869120,3156930559,LU
+3156930560,3156933631,US
+3156933632,3156934655,SG
3156934656,3157000191,RU
3157000192,3157008383,MK
3157008384,3157016575,RU
@@ -101967,19 +51062,15 @@
3157196800,3157262335,PL
3157262336,3157786623,SA
3157786624,3158048767,TR
-3158048768,3158310911,CH
+3158048768,3158214911,CH
+3158214912,3158215167,DE
+3158215168,3158310911,CH
3158310912,3158312959,FI
3158312960,3158315007,AZ
3158315008,3158317055,DE
3158317056,3158319103,SI
3158319104,3158321151,GB
-3158321152,3158321407,DE
-3158321408,3158321423,US
-3158321424,3158322687,DE
-3158322688,3158322879,NL
-3158322880,3158322943,DE
-3158322944,3158323071,NL
-3158323072,3158323199,DE
+3158321152,3158323199,DE
3158323200,3158325247,BE
3158325248,3158327295,DE
3158327296,3158329343,NL
@@ -102013,27 +51104,7 @@
3158388736,3158390783,RU
3158390784,3158392831,GB
3158392832,3158394879,RU
-3158394880,3158395007,AT
-3158395008,3158395135,GB
-3158395136,3158395167,AT
-3158395168,3158395175,DE
-3158395176,3158395191,AT
-3158395192,3158395199,DE
-3158395200,3158395247,AT
-3158395248,3158395295,DE
-3158395296,3158395359,AT
-3158395360,3158395367,DE
-3158395368,3158395431,AT
-3158395432,3158395439,DE
-3158395440,3158395647,AT
-3158395648,3158395663,DE
-3158395664,3158395687,AT
-3158395688,3158395695,DE
-3158395696,3158395711,AT
-3158395712,3158395743,DE
-3158395744,3158396287,AT
-3158396288,3158396327,DE
-3158396328,3158396927,AT
+3158394880,3158396927,AT
3158396928,3158398975,IT
3158398976,3158401023,ES
3158401024,3158403071,GB
@@ -102048,15 +51119,7 @@
3158417408,3158419455,NL
3158419456,3158421503,FR
3158421504,3158423551,GB
-3158423552,3158424063,MT
-3158424064,3158424095,NL
-3158424096,3158424127,MT
-3158424128,3158424159,IE
-3158424160,3158425088,MT
-3158425089,3158425119,NL
-3158425120,3158425152,MT
-3158425153,3158425183,IE
-3158425184,3158425567,MT
+3158423552,3158425567,MT
3158425568,3158425599,IE
3158425600,3158427647,NL
3158427648,3158429695,DE
@@ -102070,117 +51133,44 @@
3158446080,3158448127,NL
3158450176,3158452223,RU
3158452224,3158454271,DE
-3158454272,3158458367,EU
3158458368,3158474751,GB
3158474752,3158507519,OM
3158507520,3158573055,FI
-3158573056,3158638591,RU
+3158573056,3158630399,RU
+3158630400,3158638591,PL
3158638592,3158704127,LT
3158704128,3158835199,KW
3158835200,3158851583,IQ
-3158851584,3158867967,RU
+3158851584,3158859775,RU
+3158859776,3158864383,NL
+3158864384,3158864639,RU
+3158864640,3158867967,NL
3158867968,3158884351,AZ
-3158884352,3158884607,DE
-3158884608,3158884863,BE
+3158884352,3158884863,DE
3158884864,3158885119,GB
3158885120,3158885887,TR
-3158885888,3158886143,HK
-3158886144,3158886175,DE
-3158886176,3158886207,BZ
-3158886208,3158886271,DE
-3158886272,3158886335,RO
-3158886336,3158887167,DE
-3158887168,3158887423,CA
-3158887424,3158889983,DE
-3158889984,3158890239,HK
-3158890240,3158891263,DE
-3158891264,3158891519,CA
-3158891520,3158891551,DE
+3158885888,3158891551,DE
3158891552,3158891583,GB
-3158891584,3158891647,RU
-3158891648,3158891711,DE
-3158891712,3158891775,RU
+3158891584,3158891775,DE
3158891776,3158892031,PL
3158892032,3158892415,DE
3158892416,3158892543,GB
-3158892544,3158892671,DE
-3158892672,3158892799,RU
-3158892800,3158893567,DE
+3158892544,3158893567,DE
3158893568,3158893823,GB
-3158893824,3158895167,DE
-3158895168,3158895231,RU
-3158895232,3158895423,DE
-3158895424,3158895487,RU
-3158895488,3158895551,MK
-3158895552,3158895615,AE
-3158895616,3158896255,DE
-3158896256,3158896383,IN
-3158896384,3158897503,DE
-3158897504,3158897567,RU
-3158897568,3158897631,DE
-3158897632,3158897663,BZ
-3158897664,3158897727,DE
+3158893824,3158897727,DE
3158897728,3158897791,RU
3158897792,3158897855,DE
3158897856,3158897919,UA
3158897920,3158898207,DE
3158898208,3158898271,CZ
-3158898272,3158898335,RU
-3158898336,3158898431,DE
+3158898272,3158898431,DE
3158898432,3158898687,US
-3158898688,3158898815,DE
-3158898816,3158898943,BZ
-3158898944,3158899199,ES
-3158899200,3158899455,DE
-3158899456,3158899711,CA
-3158899712,3158900735,DE
+3158898688,3158900735,DE
3158900736,3158917119,FR
3158917120,3158933503,DE
3158933504,3158949887,RU
3158949888,3158966271,GR
-3158966272,3158966687,DE
-3158966688,3158966719,US
-3158966720,3158967327,DE
-3158967328,3158967359,US
-3158967360,3158967551,DE
-3158967552,3158967583,US
-3158967584,3158967807,DE
-3158967808,3158967839,US
-3158967840,3158970495,DE
-3158970496,3158970623,US
-3158970624,3158970751,DE
-3158970752,3158970879,US
-3158970880,3158970975,DE
-3158970976,3158971135,US
-3158971136,3158971231,DE
-3158971232,3158971391,US
-3158971392,3158971487,DE
-3158971488,3158971647,US
-3158971648,3158971775,DE
-3158971776,3158971903,US
-3158971904,3158972031,DE
-3158972032,3158972159,US
-3158972160,3158972287,DE
-3158972288,3158972415,US
-3158972416,3158972543,DE
-3158972544,3158972671,US
-3158972672,3158972799,DE
-3158972800,3158972927,US
-3158972928,3158973055,DE
-3158973056,3158973183,US
-3158973184,3158973311,DE
-3158973312,3158973439,US
-3158973440,3158973567,DE
-3158973568,3158973695,US
-3158973696,3158973823,DE
-3158973824,3158973951,US
-3158973952,3158974079,DE
-3158974080,3158974207,US
-3158974208,3158974239,DE
-3158974240,3158974271,US
-3158974272,3158974335,DE
-3158974336,3158974463,US
-3158974464,3158982655,DE
+3158966272,3158982655,DE
3158982656,3158999039,GB
3158999040,3159031807,RO
3159031808,3159048191,RU
@@ -102213,22 +51203,12 @@
3160186880,3160188927,EE
3160188928,3160190975,SE
3160190976,3160193023,RU
-3160193024,3160193279,A2
-3160193280,3160193535,IT
-3160193536,3160194543,A2
-3160194544,3160194551,IT
-3160194552,3160194687,A2
-3160194688,3160194815,IT
-3160194816,3160195071,A2
+3160193024,3160195071,IT
3160195072,3160197119,RU
3160197120,3160199167,DE
3160199168,3160201215,GE
3160201216,3160203263,RU
-3160203264,3160203775,CH
-3160203776,3160203783,DE
-3160203784,3160203807,CH
-3160203808,3160203815,FR
-3160203816,3160205311,CH
+3160203264,3160205311,CH
3160205312,3160207359,GB
3160207360,3160209407,RU
3160209408,3160211455,SE
@@ -102241,9 +51221,7 @@
3160227840,3160229887,IR
3160229888,3160231935,ES
3160231936,3160233983,BE
-3160233984,3160235519,GE
-3160235520,3160235775,DE
-3160235776,3160236031,GE
+3160233984,3160236031,GE
3160236032,3160238079,BE
3160238080,3160240127,RU
3160240128,3160242175,BE
@@ -102260,16 +51238,7 @@
3160262656,3160264703,HU
3160264704,3160266751,RU
3160266752,3160268799,DE
-3160268800,3160271615,PT
-3160271616,3160271743,ES
-3160271744,3160271807,PT
-3160271808,3160271935,ES
-3160271936,3160271951,PT
-3160271952,3160272127,ES
-3160272128,3160272319,PT
-3160272320,3160272383,ES
-3160272384,3160272638,PT
-3160272639,3160272895,ES
+3160268800,3160272895,PT
3160272896,3160274943,RU
3160274944,3160276991,AT
3160276992,3160279039,FR
@@ -102294,19 +51263,10 @@
3160315904,3160317951,KZ
3160317952,3160322047,RU
3160322048,3160324095,CH
-3160324096,3160328191,IT
+3160326144,3160328191,IT
3160328192,3160330239,FR
3160330240,3160332287,RU
-3160332288,3160332751,NO
-3160332752,3160332759,SE
-3160332760,3160332767,AU
-3160332768,3160333055,NO
-3160333056,3160333087,CO
-3160333088,3160333167,NO
-3160333168,3160333183,PA
-3160333184,3160334063,NO
-3160334064,3160334071,PA
-3160334072,3160334335,NO
+3160332288,3160334335,NO
3160334336,3160336383,RU
3160336384,3160338431,CZ
3160338432,3160340479,GB
@@ -102320,16 +51280,14 @@
3160358912,3160360959,JO
3160360960,3160363007,IT
3160363008,3160365055,GB
-3160365056,3160369151,NL
+3160367104,3160369151,NL
3160369152,3160371199,RU
3160371200,3160373247,ES
3160373248,3160375295,CZ
3160375296,3160377343,GB
3160377344,3160379391,NL
3160379392,3160381439,TR
-3160381440,3160382543,UA
-3160382544,3160382559,DE
-3160382560,3160383487,UA
+3160381440,3160383487,UA
3160383488,3160385535,SA
3160385536,3160387583,NL
3160387584,3160389631,RS
@@ -102351,40 +51309,43 @@
3161571328,3161587711,UZ
3161587712,3161604095,RU
3161604096,3161612287,PL
-3161612288,3161616383,EU
3161616384,3161618431,GB
3161618432,3161620479,IQ
3161620480,3161636863,DK
3161636864,3161653247,RU
3161653248,3161669631,LU
-3161669632,3161669887,RE
-3161669888,3161670143,FR
-3161670144,3161670655,RE
-3161670656,3161670911,FR
-3161670912,3161671167,RE
-3161671168,3161671679,FR
-3161671680,3161672191,RE
-3161672192,3161672959,FR
-3161672960,3161673727,RE
-3161673728,3161674751,FR
-3161674752,3161675263,RE
-3161675264,3161677311,FR
-3161677312,3161677823,RE
+3161669632,3161669887,FR
+3161669888,3161670143,RE
+3161670144,3161670399,FR
+3161670400,3161670655,RE
+3161670656,3161671167,FR
+3161671168,3161671423,RE
+3161671424,3161672063,FR
+3161672064,3161672191,RE
+3161672192,3161672703,FR
+3161672704,3161672959,RE
+3161672960,3161673471,FR
+3161673472,3161673983,RE
+3161673984,3161675775,FR
+3161675776,3161676031,RE
+3161676032,3161677823,FR
3161677824,3161678079,MQ
3161678080,3161678335,FR
-3161678336,3161678847,MQ
-3161678848,3161679103,FR
-3161679104,3161679871,MQ
-3161679872,3161682431,FR
-3161682432,3161682687,GF
-3161682688,3161683199,FR
-3161683200,3161683455,MQ
-3161683456,3161683711,FR
-3161683712,3161683967,MQ
-3161683968,3161684479,FR
-3161684480,3161685247,MQ
-3161685248,3161685759,FR
-3161685760,3161686015,MQ
+3161678336,3161679359,MQ
+3161679360,3161679615,FR
+3161679616,3161679871,MQ
+3161679872,3161680639,GP
+3161680640,3161681151,FR
+3161681152,3161681919,GP
+3161681920,3161682175,GF
+3161682176,3161682431,FR
+3161682432,3161682943,GF
+3161682944,3161683967,MQ
+3161683968,3161684223,FR
+3161684224,3161684479,MQ
+3161684480,3161685503,FR
+3161685504,3161685759,MQ
+3161685760,3161686015,FR
3161686016,3161702399,UA
3161702400,3161718783,AM
3161718784,3161735167,PL
@@ -102394,12 +51355,11 @@
3161784320,3161800703,FI
3161800704,3161817087,SA
3161817088,3161833471,PL
-3161833472,3161835519,MK
-3161835520,3161835775,AT
-3161835776,3161837567,MK
-3161837568,3161837695,AT
-3161837696,3161847551,MK
-3161847552,3161849855,AT
+3161833472,3161840639,AT
+3161840640,3161840895,MK
+3161840896,3161846015,AT
+3161846016,3161847039,MK
+3161847040,3161849855,AT
3161849856,3161866239,BE
3161866240,3161882623,IR
3161882624,3161899007,DE
@@ -102422,18 +51382,26 @@
3162071040,3162087423,IR
3162087424,3162095615,SK
3162095616,3162103807,GE
-3162103808,3162107903,FR
-3162107904,3162108415,NL
-3162108416,3162109951,FR
-3162109952,3162110975,NL
-3162110976,3162111231,FR
-3162111232,3162111999,NL
+3162103808,3162105087,FR
+3162105088,3162105855,NL
+3162105856,3162106111,FR
+3162106112,3162106367,NL
+3162106368,3162106623,FR
+3162106624,3162107391,NL
+3162107392,3162107647,FR
+3162107648,3162108415,NL
+3162108416,3162108671,FR
+3162108672,3162108927,NL
+3162108928,3162109183,FR
+3162109184,3162111103,NL
+3162111104,3162111167,FR
+3162111168,3162111999,NL
3162112000,3162120191,PL
3162120192,3162128383,GB
3162128384,3162129407,NL
3162129408,3162129919,DE
3162129920,3162136575,NL
-3162136576,3162144767,ES
+3162136576,3162144767,IR
3162144768,3162152959,SE
3162152960,3162161151,RU
3162161152,3162169343,CZ
@@ -102452,18 +51420,14 @@
3162267648,3162275839,RU
3162275840,3162284031,NO
3162284032,3162292223,PL
-3162292224,3162297855,BA
-3162297856,3162298111,ME
-3162298112,3162300415,BA
+3162292224,3162300415,BA
3162300416,3162308607,RU
3162308608,3162316799,HR
3162316800,3162324991,PL
3162324992,3162327039,IE
3162327040,3162329087,CH
3162329088,3162331135,IE
-3162331136,3162332671,GB
-3162332672,3162332927,NL
-3162332928,3162333183,DE
+3162331136,3162333183,GB
3162333184,3162341375,IT
3162341376,3162349567,PL
3162349568,3162357759,TR
@@ -102471,11 +51435,7 @@
3162365952,3162374143,PL
3162374144,3162382335,BG
3162382336,3162390527,RU
-3162390528,3162392959,SE
-3162392960,3162393087,SE
-3162393088,3162394623,SE
-3162394624,3162396671,SE
-3162396672,3162398719,SE
+3162390528,3162398719,SE
3162398720,3162406911,BE
3162406912,3162415103,IR
3162415104,3162423295,DE
@@ -102495,114 +51455,9 @@
3162636288,3162669055,FR
3162669056,3162681343,RU
3162681344,3162682367,UA
-3162682368,3162682879,RU
-3162682880,3162683391,LV
-3162683392,3162685439,RU
+3162682368,3162685439,RU
3162685440,3162693631,UA
-3162693632,3162696703,RU
-3162696704,3162696711,BE
-3162696712,3162696719,HR
-3162696720,3162696727,CY
-3162696728,3162696735,DK
-3162696736,3162696743,EG
-3162696744,3162696751,FI
-3162696752,3162696759,FR
-3162696760,3162696767,DE
-3162696768,3162696775,GR
-3162696776,3162696783,HU
-3162696784,3162696791,IN
-3162696792,3162696799,IR
-3162696800,3162696807,IL
-3162696808,3162696815,IT
-3162696816,3162696823,JO
-3162696824,3162696831,LV
-3162696832,3162696839,LB
-3162696840,3162696847,LI
-3162696848,3162696855,MT
-3162696856,3162696863,NO
-3162696864,3162696871,PK
-3162696872,3162696879,PL
-3162696880,3162696887,PT
-3162696888,3162696895,RO
-3162696896,3162696903,RU
-3162696904,3162696911,ZA
-3162696912,3162696919,ES
-3162696920,3162696927,SE
-3162696928,3162696935,CH
-3162696936,3162696943,TR
-3162696944,3162696951,UA
-3162696952,3162696959,GB
-3162696960,3162698751,RU
-3162698752,3162699263,NL
-3162699264,3162699519,UA
-3162699520,3162700031,RU
-3162700032,3162700287,UZ
-3162700288,3162700291,AL
-3162700292,3162700295,AG
-3162700296,3162700299,AR
-3162700300,3162700303,AM
-3162700304,3162700307,AU
-3162700308,3162700311,BS
-3162700312,3162700315,BY
-3162700316,3162700319,BZ
-3162700320,3162700323,BM
-3162700324,3162700327,BA
-3162700328,3162700331,BR
-3162700332,3162700335,VG
-3162700336,3162700339,BN
-3162700340,3162700343,BG
-3162700344,3162700347,CA
-3162700348,3162700351,KY
-3162700352,3162700355,CL
-3162700356,3162700359,CO
-3162700360,3162700363,CR
-3162700364,3162700367,HR
-3162700368,3162700371,CY
-3162700372,3162700375,DK
-3162700376,3162700379,EG
-3162700380,3162700383,FR
-3162700384,3162700387,DE
-3162700388,3162700391,GR
-3162700392,3162700395,HK
-3162700396,3162700399,HU
-3162700400,3162700403,IN
-3162700404,3162700407,ID
-3162700408,3162700411,IL
-3162700412,3162700415,IT
-3162700416,3162700419,JP
-3162700420,3162700423,KR
-3162700424,3162700427,LV
-3162700428,3162700431,LB
-3162700432,3162700435,LI
-3162700436,3162700439,MY
-3162700440,3162700443,MT
-3162700444,3162700447,MX
-3162700448,3162700451,NZ
-3162700452,3162700455,NO
-3162700456,3162700459,PK
-3162700460,3162700463,PA
-3162700464,3162700467,PE
-3162700468,3162700471,PH
-3162700472,3162700475,RO
-3162700476,3162700479,RU
-3162700480,3162700483,RS
-3162700484,3162700487,SG
-3162700488,3162700491,SK
-3162700492,3162700495,ZA
-3162700496,3162700499,ES
-3162700500,3162700503,KN
-3162700504,3162700507,CH
-3162700508,3162700511,TW
-3162700512,3162700515,TH
-3162700516,3162700519,TR
-3162700520,3162700523,UA
-3162700524,3162700527,GB
-3162700528,3162700531,US
-3162700532,3162700535,UY
-3162700536,3162700539,RU
-3162700540,3162700543,VE
-3162700544,3162700799,UA
-3162700800,3162701823,RU
+3162693632,3162701823,RU
3162701824,3162734591,MD
3162734592,3162767359,RU
3162767360,3162800127,SA
@@ -102616,995 +51471,19 @@
3163062272,3163095039,IR
3163095040,3163127807,PL
3163127808,3163160575,BH
-3163160576,3163161631,DE
-3163161632,3163161663,DK
-3163161664,3163161695,US
-3163161696,3163161727,BG
-3163161728,3163161759,DE
-3163161760,3163161823,BR
-3163161824,3163161855,US
-3163161856,3163161887,BR
-3163161888,3163161951,US
-3163161952,3163162015,DE
-3163162016,3163162047,US
-3163162048,3163162079,DE
-3163162080,3163162111,RU
-3163162112,3163162239,DE
-3163162240,3163162271,MA
-3163162272,3163162335,NL
-3163162336,3163162367,RU
-3163162368,3163162431,DE
-3163162432,3163162463,CY
-3163162464,3163162559,DE
-3163162560,3163162623,US
-3163162624,3163163135,DE
-3163163136,3163163136,KZ
-3163163137,3163163145,DE
-3163163146,3163163148,NL
-3163163149,3163163149,HU
-3163163150,3163163151,TR
-3163163152,3163163152,US
-3163163153,3163163155,DE
-3163163156,3163163156,RU
-3163163157,3163163159,DE
-3163163160,3163163160,SE
-3163163161,3163163172,DE
-3163163173,3163163173,RU
-3163163174,3163163174,IL
-3163163175,3163163175,TR
-3163163176,3163163176,DE
-3163163177,3163163177,PK
-3163163178,3163163178,IN
-3163163179,3163163179,US
-3163163180,3163163180,MX
-3163163181,3163163181,DE
-3163163182,3163163182,HR
-3163163183,3163163183,NL
-3163163184,3163163184,IT
-3163163185,3163163187,DE
-3163163188,3163163189,MX
-3163163190,3163163197,DE
-3163163198,3163163198,CZ
-3163163199,3163163239,DE
-3163163240,3163163240,SA
-3163163241,3163163241,AZ
-3163163242,3163163250,DE
-3163163251,3163163251,ZA
-3163163252,3163163252,SA
-3163163253,3163163253,DE
-3163163254,3163163254,ES
-3163163255,3163163255,IT
-3163163256,3163163258,DE
-3163163259,3163163261,CZ
-3163163262,3163163270,DE
-3163163271,3163163271,EG
-3163163272,3163163272,MD
-3163163273,3163163273,IT
-3163163274,3163163274,LT
-3163163275,3163163277,DE
-3163163278,3163163278,LK
-3163163279,3163163279,DE
-3163163280,3163163280,PK
-3163163281,3163163286,DE
-3163163287,3163163287,RU
-3163163288,3163163293,DE
-3163163294,3163163294,AL
-3163163295,3163163296,DE
-3163163297,3163163298,IT
-3163163299,3163163304,DE
-3163163305,3163163305,TR
-3163163306,3163163307,DE
-3163163308,3163163308,AL
-3163163309,3163163309,DE
-3163163310,3163163310,US
-3163163311,3163163312,DE
-3163163313,3163163313,IN
-3163163314,3163163323,DE
-3163163324,3163163324,IN
-3163163325,3163163330,DE
-3163163331,3163163331,UG
-3163163332,3163163332,LT
-3163163333,3163163333,DE
-3163163334,3163163334,US
-3163163335,3163163336,DE
-3163163337,3163163337,NL
-3163163338,3163163338,TR
-3163163339,3163163340,DE
-3163163341,3163163341,BR
-3163163342,3163163342,DE
-3163163343,3163163343,IR
-3163163344,3163163345,DE
-3163163346,3163163347,CA
-3163163348,3163163348,DE
-3163163349,3163163349,BR
-3163163350,3163163350,DE
-3163163351,3163163351,RU
-3163163352,3163163352,DE
-3163163353,3163163353,BR
-3163163354,3163163356,DE
-3163163357,3163163357,HK
-3163163358,3163163358,DE
-3163163359,3163163359,BR
-3163163360,3163163361,DE
-3163163362,3163163362,BR
-3163163363,3163163363,MD
-3163163364,3163163365,DK
-3163163366,3163163366,US
-3163163367,3163163368,DE
-3163163369,3163163369,ES
-3163163370,3163163371,PE
-3163163372,3163163374,DE
-3163163375,3163163375,BR
-3163163376,3163163376,DE
-3163163377,3163163378,NL
-3163163379,3163163379,PE
-3163163380,3163163382,DE
-3163163383,3163163383,UA
-3163163384,3163163385,DE
-3163163386,3163163386,MD
-3163163387,3163163387,DE
-3163163388,3163163388,PE
-3163163389,3163163389,BG
-3163163390,3163163390,LK
-3163163391,3163163647,DE
-3163163648,3163163679,DK
-3163163680,3163163711,RU
-3163163712,3163163743,BR
-3163163744,3163163807,US
-3163163808,3163163839,DE
-3163163840,3163163871,PL
-3163163872,3163163903,DE
-3163163904,3163163935,GR
-3163163936,3163163967,BR
-3163163968,3163163999,US
-3163164000,3163164063,DE
-3163164064,3163164095,AM
-3163164096,3163164127,RU
-3163164128,3163164159,DE
-3163164160,3163164191,US
-3163164192,3163164223,DE
-3163164224,3163164255,LT
-3163164256,3163164287,DE
-3163164288,3163164319,CL
-3163164320,3163164351,RU
-3163164352,3163164383,LT
-3163164384,3163164415,US
-3163164416,3163164447,PL
-3163164448,3163164479,US
-3163164480,3163164511,DE
-3163164512,3163164543,HU
-3163164544,3163164575,RU
-3163164576,3163164607,DE
-3163164608,3163164639,ES
-3163164640,3163164671,US
-3163164672,3163165695,DE
-3163165696,3163165727,US
-3163165728,3163165759,RU
-3163165760,3163165791,PL
-3163165792,3163165823,RU
-3163165824,3163165855,BR
-3163165856,3163165887,DE
-3163165888,3163165919,AR
-3163165920,3163165951,US
-3163165952,3163165983,DE
-3163165984,3163166015,AR
-3163166016,3163166047,US
-3163166048,3163166111,DE
-3163166112,3163166121,AR
-3163166122,3163166122,DE
-3163166123,3163166143,AR
-3163166144,3163166175,DE
-3163166176,3163166207,RU
-3163166208,3163166239,TR
-3163166240,3163166271,IT
-3163166272,3163166335,DE
-3163166336,3163166399,US
-3163166400,3163166463,DE
-3163166464,3163166495,BR
-3163166496,3163166527,RO
-3163166528,3163166591,DE
-3163166592,3163166623,IN
-3163166624,3163166687,DE
-3163166688,3163166719,RU
-3163166720,3163166986,DE
-3163166987,3163166987,CH
-3163166988,3163166988,RU
-3163166989,3163166989,UA
-3163166990,3163166990,AE
-3163166991,3163166991,US
-3163166992,3163166992,DE
-3163166993,3163166993,US
-3163166994,3163166994,TR
-3163166995,3163166995,CH
-3163166996,3163166997,UA
-3163166998,3163167003,DE
-3163167004,3163167004,IR
-3163167005,3163167007,UA
-3163167008,3163167103,DE
-3163167104,3163167107,AE
-3163167108,3163167123,BR
-3163167124,3163167375,DE
-3163167376,3163167376,IN
-3163167377,3163167377,RU
-3163167378,3163167380,DE
-3163167381,3163167381,CH
-3163167382,3163167382,DE
-3163167383,3163167383,IN
-3163167384,3163167384,TR
-3163167385,3163167385,RU
-3163167386,3163167391,DE
-3163167392,3163167392,NL
-3163167393,3163167393,DE
-3163167394,3163167394,CA
-3163167395,3163167396,DE
-3163167397,3163167397,NL
-3163167398,3163167399,CA
-3163167400,3163167401,US
-3163167402,3163167403,BD
-3163167404,3163167404,GR
-3163167405,3163167405,NL
-3163167406,3163167406,CH
-3163167407,3163167426,DE
-3163167427,3163167427,BD
-3163167428,3163167431,DE
-3163167432,3163167432,GR
-3163167433,3163167433,IN
-3163167434,3163167434,DE
-3163167435,3163167435,TR
-3163167436,3163167438,DE
-3163167439,3163167440,IN
-3163167441,3163167441,DE
-3163167442,3163167442,BD
-3163167443,3163167443,RU
-3163167444,3163167445,DE
-3163167446,3163167446,TR
-3163167447,3163167453,DE
-3163167454,3163167454,TR
-3163167455,3163167456,DE
-3163167457,3163167457,IN
-3163167458,3163167458,NL
-3163167459,3163167463,DE
-3163167464,3163167465,NL
-3163167466,3163167467,HR
-3163167468,3163167469,IN
-3163167470,3163167743,DE
-3163167744,3163167775,RU
-3163167776,3163167807,DE
-3163167808,3163167839,US
-3163167840,3163167903,DE
-3163167904,3163167935,UA
-3163167936,3163167967,DE
-3163167968,3163167999,TR
-3163168000,3163168031,BR
-3163168032,3163168095,RU
-3163168096,3163168127,TR
-3163168128,3163168159,DE
-3163168160,3163168191,BR
-3163168192,3163168223,AT
-3163168224,3163168255,DE
-3163168256,3163168287,US
-3163168288,3163168319,BR
-3163168320,3163168351,DK
-3163168352,3163168383,RU
-3163168384,3163168415,DE
-3163168416,3163168447,BR
-3163168448,3163168479,DE
-3163168480,3163168543,US
-3163168544,3163168575,DE
-3163168576,3163168607,US
-3163168608,3163168671,DE
-3163168672,3163168703,US
-3163168704,3163168735,GR
-3163168736,3163169823,DE
-3163169824,3163169855,RU
-3163169856,3163169887,US
-3163169888,3163169951,DE
-3163169952,3163169983,HR
-3163169984,3163170015,DE
-3163170016,3163170047,ES
-3163170048,3163170079,RU
-3163170080,3163170111,DE
-3163170112,3163170143,CZ
-3163170144,3163170207,DE
-3163170208,3163170239,RU
-3163170240,3163170271,DE
-3163170272,3163170303,US
-3163170304,3163170335,IT
-3163170336,3163170367,RO
-3163170368,3163170399,US
-3163170400,3163170431,BR
-3163170432,3163170463,DE
-3163170464,3163170495,US
-3163170496,3163170527,DE
+3163160576,3163164927,DE
+3163164928,3163165183,FR
+3163165184,3163166975,DE
+3163166976,3163167231,FR
+3163167232,3163170527,DE
3163170528,3163170559,AE
-3163170560,3163170623,DE
-3163170624,3163170655,GR
-3163170656,3163170687,BR
-3163170688,3163170751,DE
-3163170752,3163170783,CH
-3163170784,3163170815,US
-3163170816,3163171839,DE
-3163171840,3163171871,NL
-3163171872,3163171903,RO
-3163171904,3163171935,BR
-3163171936,3163171967,DE
-3163171968,3163171999,US
-3163172000,3163172031,DE
-3163172032,3163172063,LT
-3163172064,3163172127,BR
-3163172128,3163172159,US
-3163172160,3163172255,DE
-3163172256,3163172287,US
-3163172288,3163172351,DE
-3163172352,3163172383,FR
-3163172384,3163172415,GB
-3163172416,3163172447,DE
-3163172448,3163172479,US
-3163172480,3163172511,DE
-3163172512,3163172543,RU
-3163172544,3163172607,DE
-3163172608,3163172639,DK
-3163172640,3163172671,DE
-3163172672,3163172703,BR
-3163172704,3163172767,DE
-3163172768,3163172799,US
-3163172800,3163172831,RU
-3163172832,3163172863,BR
-3163172864,3163173951,DE
-3163173952,3163173983,IN
-3163173984,3163174015,GB
-3163174016,3163174047,RU
-3163174048,3163174079,DK
-3163174080,3163174111,BR
-3163174112,3163174143,FR
-3163174144,3163174175,BD
-3163174176,3163174207,DE
-3163174208,3163174239,RU
-3163174240,3163174303,DE
-3163174304,3163174335,US
-3163174336,3163174367,RU
-3163174368,3163174431,DE
-3163174432,3163174463,BR
-3163174464,3163174495,DE
-3163174496,3163174527,US
-3163174528,3163174559,DE
-3163174560,3163174591,PL
-3163174592,3163174623,SE
-3163174624,3163174655,GB
-3163174656,3163174687,RU
-3163174688,3163174751,DE
-3163174752,3163174783,BR
-3163174784,3163174815,DE
-3163174816,3163174847,CA
-3163174848,3163174879,TR
-3163174880,3163174911,RU
-3163174912,3163175967,DE
-3163175968,3163176031,US
-3163176032,3163176063,DE
-3163176064,3163176095,RU
-3163176096,3163176127,CY
-3163176128,3163176159,US
-3163176160,3163176191,DE
-3163176192,3163176223,US
-3163176224,3163176287,DE
-3163176288,3163176319,RU
-3163176320,3163176351,DE
-3163176352,3163176383,BR
-3163176384,3163176415,IN
-3163176416,3163176479,DE
-3163176480,3163176511,FR
-3163176512,3163176543,RU
-3163176544,3163176575,UG
-3163176576,3163176607,GR
-3163176608,3163176671,DE
-3163176672,3163176735,BR
-3163176736,3163176767,DE
-3163176768,3163176799,PL
-3163176800,3163176831,EG
-3163176832,3163176895,BR
-3163176896,3163176927,SE
-3163176928,3163176959,NL
-3163176960,3163177279,DE
-3163177280,3163177280,SE
-3163177281,3163177281,BO
-3163177282,3163177283,DE
-3163177284,3163177286,BR
-3163177287,3163177289,UA
-3163177290,3163177290,DE
-3163177291,3163177293,EE
-3163177294,3163177296,DE
-3163177297,3163177298,TR
-3163177299,3163177299,SI
-3163177300,3163177301,DE
-3163177302,3163177304,BR
-3163177305,3163177307,DE
-3163177308,3163177309,MA
-3163177310,3163177311,BR
-3163177312,3163177805,DE
-3163177806,3163177806,IN
-3163177807,3163177808,KW
-3163177809,3163177809,DE
-3163177810,3163177810,IN
-3163177811,3163177812,DE
-3163177813,3163177813,IN
-3163177814,3163177817,DE
-3163177818,3163177818,IN
-3163177819,3163180671,DE
-3163180672,3163180673,DZ
-3163180674,3163180677,DE
-3163180678,3163180678,PT
-3163180679,3163180679,BD
-3163180680,3163180691,TR
-3163180692,3163180693,DE
-3163180694,3163180694,ES
-3163180695,3163180695,DE
-3163180696,3163180696,CA
-3163180697,3163180698,DE
-3163180699,3163180699,US
-3163180700,3163180700,ES
-3163180701,3163180702,TR
-3163180703,3163180707,DE
-3163180708,3163180708,VE
-3163180709,3163180709,TR
-3163180710,3163180712,DE
-3163180713,3163180713,BR
-3163180714,3163180714,GR
-3163180715,3163180716,DE
-3163180717,3163180717,AE
-3163180718,3163180718,DE
-3163180719,3163180719,ES
-3163180720,3163180720,DE
-3163180721,3163180721,NO
-3163180722,3163180724,TR
-3163180725,3163180725,RO
-3163180726,3163180727,BR
-3163180728,3163180728,TR
-3163180729,3163180729,GB
-3163180730,3163180732,DE
-3163180733,3163180734,TR
-3163180735,3163180735,SG
-3163180736,3163180767,DE
-3163180768,3163180768,TR
-3163180769,3163180769,DE
-3163180770,3163180770,UA
-3163180771,3163180772,DE
-3163180773,3163180773,LT
-3163180774,3163180775,RU
-3163180776,3163180776,MD
-3163180777,3163180777,IL
-3163180778,3163180779,DE
-3163180780,3163180780,SG
-3163180781,3163180781,BD
-3163180782,3163180782,SG
-3163180783,3163180783,MD
-3163180784,3163180786,US
-3163180787,3163180787,DE
-3163180788,3163180788,EG
-3163180789,3163180789,DE
-3163180790,3163180790,BR
-3163180791,3163180791,MX
-3163180792,3163180792,MD
-3163180793,3163180793,GR
-3163180794,3163180927,DE
-3163180928,3163180928,PE
-3163180929,3163180930,DE
-3163180931,3163180931,EE
-3163180932,3163180932,ES
-3163180933,3163180933,CL
-3163180934,3163180934,GR
-3163180935,3163180935,CL
-3163180936,3163180936,ES
-3163180937,3163180937,AE
-3163180938,3163180939,CZ
-3163180940,3163180941,DE
-3163180942,3163180942,CN
-3163180943,3163180947,DE
-3163180948,3163180948,CN
-3163180949,3163180954,DE
-3163180955,3163180955,UA
-3163180956,3163180962,DE
-3163180963,3163180963,IT
-3163180964,3163180964,DZ
-3163180965,3163180969,DE
-3163180970,3163180971,TR
-3163180972,3163180972,PE
-3163180973,3163180973,DE
-3163180974,3163180974,GR
-3163180975,3163180975,DE
-3163180976,3163180976,HU
-3163180977,3163180986,DE
-3163180987,3163180987,IN
-3163180988,3163180988,TR
-3163180989,3163180992,DE
-3163180993,3163180993,US
-3163180994,3163180994,DE
-3163180995,3163180997,TW
-3163180998,3163181001,DE
-3163181002,3163181002,LK
-3163181003,3163181006,DE
-3163181007,3163181007,US
-3163181008,3163181010,DE
-3163181011,3163181011,HR
-3163181012,3163181018,DE
-3163181019,3163181019,EG
-3163181020,3163181022,DE
-3163181023,3163181023,BR
-3163181024,3163181027,DE
-3163181028,3163181028,TR
-3163181029,3163181037,DE
-3163181038,3163181038,EG
-3163181039,3163181040,DE
-3163181041,3163181041,GB
-3163181042,3163181046,DE
-3163181047,3163181047,TR
-3163181048,3163181048,SE
-3163181049,3163181049,DE
-3163181050,3163181050,AU
-3163181051,3163181052,DE
-3163181053,3163181055,RU
-3163181056,3163181702,DE
-3163181703,3163181703,MD
-3163181704,3163181704,US
-3163181705,3163181706,DE
-3163181707,3163181707,US
-3163181708,3163181708,AR
-3163181709,3163181728,DE
-3163181729,3163181729,BR
-3163181730,3163181730,DE
-3163181731,3163181731,UA
-3163181732,3163181732,DE
-3163181733,3163181734,MD
-3163181735,3163181735,DE
-3163181736,3163181736,BD
-3163181737,3163181738,DE
-3163181739,3163181739,CA
-3163181740,3163181740,RU
-3163181741,3163181744,DE
-3163181745,3163181745,BR
-3163181746,3163181749,DE
-3163181750,3163181750,MD
-3163181751,3163181751,DE
-3163181752,3163181753,MD
-3163181754,3163181757,DE
-3163181758,3163181758,PT
-3163181759,3163181767,DE
-3163181768,3163181768,AU
-3163181769,3163181777,DE
-3163181778,3163181778,AU
-3163181779,3163181786,DE
-3163181787,3163181787,BD
-3163181788,3163181790,DE
-3163181791,3163181791,PT
-3163181792,3163181831,DE
-3163181832,3163181833,SI
-3163181834,3163181834,MY
-3163181835,3163181839,DE
-3163181840,3163181840,AE
-3163181841,3163181841,GB
-3163181842,3163181842,NL
-3163181843,3163181843,CH
-3163181844,3163181853,DE
-3163181854,3163181855,TR
-3163181856,3163181856,SI
-3163181857,3163181857,DE
-3163181858,3163181858,IN
-3163181859,3163181861,DE
-3163181862,3163181862,GB
-3163181863,3163181863,DE
-3163181864,3163181864,GR
-3163181865,3163181865,IN
-3163181866,3163181867,DE
-3163181868,3163181869,IN
-3163181870,3163181870,RU
-3163181871,3163181871,IN
-3163181872,3163181872,GR
-3163181873,3163181873,RU
-3163181874,3163181874,DE
-3163181875,3163181875,TR
-3163181876,3163181878,DE
-3163181879,3163181879,US
-3163181880,3163181882,CH
-3163181883,3163181883,IN
-3163181884,3163181885,DE
-3163181886,3163181888,CY
-3163181889,3163181892,DE
-3163181893,3163181893,GB
-3163181894,3163181894,BD
-3163181895,3163181895,DE
-3163181896,3163181896,IN
-3163181897,3163181899,DE
-3163181900,3163181900,HR
-3163181901,3163181901,GR
-3163181902,3163181903,DE
-3163181904,3163181904,HR
-3163181905,3163181905,US
-3163181906,3163181908,BR
-3163181909,3163181910,DE
-3163181911,3163181912,CY
-3163181913,3163181913,DE
-3163181914,3163181914,BR
-3163181915,3163181916,DE
-3163181917,3163181917,CY
-3163181918,3163181918,DE
-3163181919,3163181919,BD
-3163181920,3163181929,DE
-3163181930,3163181930,IN
-3163181931,3163181934,DE
-3163181935,3163181935,UA
-3163181936,3163181938,DE
-3163181939,3163181939,GR
-3163181940,3163181940,DE
-3163181941,3163181941,RU
-3163181942,3163181942,CN
-3163181943,3163181943,US
-3163181944,3163182414,DE
-3163182415,3163182415,MA
-3163182416,3163182419,DE
-3163182420,3163182420,MA
-3163182421,3163182525,DE
-3163182526,3163182526,BG
-3163182527,3163182559,DE
-3163182560,3163182560,BG
-3163182561,3163182561,DE
-3163182562,3163182562,BG
-3163182563,3163182563,DE
-3163182564,3163182564,BG
-3163182565,3163182565,DE
-3163182566,3163182566,BG
-3163182567,3163182567,DE
-3163182568,3163182571,BG
-3163182572,3163182574,DE
-3163182575,3163182575,BG
-3163182576,3163182590,RU
-3163182591,3163184457,DE
-3163184458,3163184458,PL
-3163184459,3163184460,DE
-3163184461,3163184461,US
-3163184462,3163184462,DE
-3163184463,3163184463,BD
-3163184464,3163184469,DE
-3163184470,3163184470,BD
-3163184471,3163184471,DE
-3163184472,3163184472,BE
-3163184473,3163184476,DE
-3163184477,3163184477,ME
-3163184478,3163184478,DK
-3163184479,3163184487,DE
-3163184488,3163184488,MX
-3163184489,3163184489,DE
-3163184490,3163184490,US
-3163184491,3163184496,DE
-3163184497,3163184498,CZ
-3163184499,3163184499,DE
-3163184500,3163184500,BD
-3163184501,3163184502,DE
-3163184503,3163184503,RU
-3163184504,3163184505,DE
-3163184506,3163184506,PL
-3163184507,3163184509,GR
-3163184510,3163184551,DE
-3163184552,3163184553,RU
-3163184554,3163184555,DE
-3163184556,3163184556,RU
-3163184557,3163184557,DE
-3163184558,3163184558,RU
-3163184559,3163184569,DE
-3163184570,3163184574,RU
-3163184575,3163185099,DE
-3163185100,3163185100,RU
-3163185101,3163185112,DE
-3163185113,3163185113,RU
-3163185114,3163185116,DE
-3163185117,3163185117,RU
-3163185118,3163185122,DE
-3163185123,3163185123,RU
-3163185124,3163185136,DE
-3163185137,3163185137,RU
-3163185138,3163185144,DE
-3163185145,3163185150,RU
-3163185151,3163185166,DE
-3163185167,3163185168,TN
-3163185169,3163185170,DE
-3163185171,3163185171,TN
-3163185172,3163185182,DE
-3163185183,3163185183,US
-3163185184,3163185186,DE
-3163185187,3163185187,MD
-3163185188,3163185189,DE
-3163185190,3163185190,LT
-3163185191,3163185191,DE
-3163185192,3163185193,LT
-3163185194,3163185195,GR
-3163185196,3163185196,CZ
-3163185197,3163185225,DE
-3163185226,3163185226,MA
-3163185227,3163185266,DE
-3163185267,3163185268,IN
-3163185269,3163185307,DE
-3163185308,3163185308,UA
-3163185309,3163186002,DE
-3163186003,3163186003,CA
-3163186004,3163186033,DE
-3163186034,3163186034,LT
-3163186035,3163186064,DE
-3163186065,3163186065,RU
-3163186066,3163186098,DE
-3163186099,3163186099,LT
-3163186100,3163186102,DE
-3163186103,3163186103,LT
-3163186104,3163186534,DE
+3163170560,3163186534,DE
3163186535,3163186535,FR
3163186536,3163186673,DE
3163186674,3163186674,FR
-3163186675,3163187346,DE
-3163187347,3163187347,AT
-3163187348,3163188355,DE
-3163188356,3163188356,BD
-3163188357,3163188357,DE
-3163188358,3163188358,GR
-3163188359,3163188359,DE
-3163188360,3163188360,VG
-3163188361,3163188363,DE
-3163188364,3163188364,RU
-3163188365,3163188369,DE
-3163188370,3163188370,NL
-3163188371,3163188371,US
-3163188372,3163188372,DE
-3163188373,3163188374,US
-3163188375,3163188380,DE
-3163188381,3163188382,IT
-3163188383,3163188384,GB
-3163188385,3163188387,DE
-3163188388,3163188388,GB
-3163188389,3163188391,DE
-3163188392,3163188392,LT
-3163188393,3163188394,DE
-3163188395,3163188395,LT
-3163188396,3163188397,DE
-3163188398,3163188400,GB
-3163188401,3163188401,BD
-3163188402,3163188402,BZ
-3163188403,3163188405,NL
-3163188406,3163188406,DE
-3163188407,3163188407,RU
-3163188408,3163188408,TR
-3163188409,3163188410,NL
-3163188411,3163188744,DE
-3163188745,3163188745,BD
-3163188746,3163188751,DE
-3163188752,3163188752,IT
-3163188753,3163188754,DE
-3163188755,3163188755,ME
-3163188756,3163188801,DE
-3163188802,3163188802,US
-3163188803,3163188804,DE
-3163188805,3163188806,AR
-3163188807,3163188807,DE
-3163188808,3163188808,TR
-3163188809,3163188809,DE
-3163188810,3163188810,TR
-3163188811,3163188813,DE
-3163188814,3163188815,GR
-3163188816,3163188831,DE
-3163188832,3163188832,UA
-3163188833,3163188834,DE
-3163188835,3163188835,GB
-3163188836,3163188847,DE
-3163188848,3163188848,FR
-3163188849,3163188849,FI
-3163188850,3163188851,RU
-3163188852,3163188852,GR
-3163188853,3163188854,DE
-3163188855,3163188855,PL
-3163188856,3163188856,US
-3163188857,3163188857,DE
-3163188858,3163188858,CO
-3163188859,3163188859,DE
-3163188860,3163188860,AE
-3163188861,3163188861,US
-3163188862,3163188862,IR
-3163188863,3163188930,DE
-3163188931,3163188931,TR
-3163188932,3163188932,NL
-3163188933,3163188934,DE
-3163188935,3163188935,MA
-3163188936,3163188936,AE
-3163188937,3163188937,GR
-3163188938,3163188938,TR
-3163188939,3163189062,DE
-3163189063,3163189065,GB
-3163189066,3163189071,DE
-3163189072,3163189072,VN
-3163189073,3163189074,DE
-3163189075,3163189076,RU
-3163189077,3163189082,DE
-3163189083,3163189083,HR
-3163189084,3163189086,DE
-3163189087,3163189087,TR
-3163189088,3163189088,DE
-3163189089,3163189089,AE
-3163189090,3163189090,KR
-3163189091,3163189092,DE
-3163189093,3163189094,UA
-3163189095,3163189096,DE
-3163189097,3163189099,GB
-3163189100,3163189100,UA
-3163189101,3163189103,DE
-3163189104,3163189104,CZ
-3163189105,3163189106,DE
-3163189107,3163189107,UA
-3163189108,3163189108,DE
-3163189109,3163189109,IN
-3163189110,3163189110,TR
-3163189111,3163189111,GB
-3163189112,3163189112,BR
-3163189113,3163189116,DE
-3163189117,3163189117,PE
-3163189118,3163189994,DE
-3163189995,3163189999,IN
-3163190000,3163190532,DE
-3163190533,3163190533,TR
-3163190534,3163190535,US
-3163190536,3163190553,DE
-3163190554,3163190554,HU
-3163190555,3163190563,DE
-3163190564,3163190564,US
-3163190565,3163190571,DE
-3163190572,3163190572,RU
-3163190573,3163190573,US
-3163190574,3163190575,DE
-3163190576,3163190576,RU
-3163190577,3163190586,DE
-3163190587,3163190588,US
-3163190589,3163190601,DE
-3163190602,3163190602,US
-3163190603,3163190613,DE
-3163190614,3163190614,LT
-3163190615,3163190615,DE
-3163190616,3163190616,US
-3163190617,3163190619,DE
-3163190620,3163190620,LT
-3163190621,3163190621,DE
-3163190622,3163190626,LT
-3163190627,3163190632,DE
-3163190633,3163190637,LT
-3163190638,3163191246,DE
-3163191247,3163191247,BR
-3163191248,3163191248,IT
-3163191249,3163191250,DE
-3163191251,3163191252,GB
-3163191253,3163191253,BR
-3163191254,3163191256,DE
-3163191257,3163191257,TR
-3163191258,3163191258,RU
-3163191259,3163191259,DE
-3163191260,3163191262,EE
-3163191263,3163191263,DE
-3163191264,3163191264,LT
-3163191265,3163191266,BG
-3163191267,3163191267,NL
-3163191268,3163191268,US
-3163191269,3163191269,DE
-3163191270,3163191272,NL
-3163191273,3163191273,IT
-3163191274,3163191274,DE
-3163191275,3163191275,HK
-3163191276,3163191276,FI
-3163191277,3163191278,DE
-3163191279,3163191279,IN
-3163191280,3163191280,NL
-3163191281,3163191281,DE
-3163191282,3163191282,BR
-3163191283,3163191285,NL
-3163191286,3163191288,DE
-3163191289,3163191293,IN
-3163191294,3163191432,DE
-3163191433,3163191433,IT
-3163191434,3163191440,DE
-3163191441,3163191442,US
-3163191443,3163191448,DE
-3163191449,3163191449,BZ
-3163191450,3163191450,RU
-3163191451,3163191451,IT
-3163191452,3163191454,TR
-3163191455,3163191461,DE
-3163191462,3163191464,NL
-3163191465,3163191465,CN
-3163191466,3163191471,DE
-3163191472,3163191472,NL
-3163191473,3163191473,UA
-3163191474,3163191476,DE
-3163191477,3163191477,HK
-3163191478,3163191478,PK
-3163191479,3163192193,DE
-3163192194,3163192194,BR
-3163192195,3163192196,DE
-3163192197,3163192197,UA
-3163192198,3163192200,DE
-3163192201,3163192202,TR
-3163192203,3163192207,DE
-3163192208,3163192208,TR
-3163192209,3163192210,MX
-3163192211,3163192211,DE
-3163192212,3163192213,UA
-3163192214,3163192214,TR
-3163192215,3163192216,DE
-3163192217,3163192218,GR
-3163192219,3163192219,TR
-3163192220,3163192222,US
-3163192223,3163192224,DE
-3163192225,3163192225,TH
-3163192226,3163192227,DE
-3163192228,3163192228,US
-3163192229,3163192229,DE
-3163192230,3163192230,TR
-3163192231,3163192231,BR
-3163192232,3163192232,DE
-3163192233,3163192233,US
-3163192234,3163192234,BR
-3163192235,3163192235,DE
-3163192236,3163192236,BR
-3163192237,3163192237,VE
-3163192238,3163192241,DE
-3163192242,3163192242,RU
-3163192243,3163192249,DE
-3163192250,3163192250,RU
-3163192251,3163192251,DE
-3163192252,3163192255,TR
-3163192256,3163192840,DE
-3163192841,3163192842,CZ
-3163192843,3163192846,DE
-3163192847,3163192847,CZ
-3163192848,3163192848,KW
-3163192849,3163192850,DE
-3163192851,3163192851,NL
-3163192852,3163192861,DE
-3163192862,3163192863,US
-3163192864,3163192864,DE
-3163192865,3163192865,US
-3163192866,3163192866,DE
-3163192867,3163192868,RO
-3163192869,3163192869,CH
-3163192870,3163192870,RO
-3163192871,3163192872,US
-3163192873,3163192874,DE
-3163192875,3163192876,BD
-3163192877,3163192877,RU
-3163192878,3163192878,KW
-3163192879,3163193216,DE
-3163193217,3163193217,GB
-3163193218,3163193218,DE
-3163193219,3163193219,GB
-3163193220,3163193223,DE
-3163193224,3163193224,BR
-3163193225,3163193227,DE
-3163193228,3163193228,UA
-3163193229,3163193236,DE
-3163193237,3163193237,RU
-3163193238,3163193241,DE
-3163193242,3163193243,TR
-3163193244,3163193246,DE
-3163193247,3163193247,KR
-3163193248,3163193250,DE
-3163193251,3163193251,GB
-3163193252,3163193259,DE
-3163193260,3163193260,TR
-3163193261,3163193261,UA
-3163193262,3163193262,HU
-3163193263,3163193263,DE
-3163193264,3163193264,UA
-3163193265,3163193270,DE
-3163193271,3163193272,AT
-3163193273,3163193278,DE
-3163193279,3163193279,GR
-3163193280,3163193281,DE
-3163193282,3163193283,UA
-3163193284,3163193286,DE
-3163193287,3163193287,LK
-3163193288,3163193319,DE
-3163193320,3163193320,HR
-3163193321,3163193342,DE
-3163193343,3163193343,SA
+3163186675,3163192621,DE
+3163192622,3163192622,EG
+3163192623,3163193343,DE
3163193344,3163226111,MD
3163226112,3163258879,SA
3163258880,3163291647,SY
@@ -103626,7 +51505,9 @@
3164667904,3164733439,PS
3164733440,3164798975,RU
3164798976,3164864511,UA
-3164864512,3164897279,GB
+3164864512,3164864703,GB
+3164864704,3164864735,ZA
+3164864736,3164897279,GB
3164897280,3164899327,IT
3164899328,3164901375,RU
3164901376,3164903423,PL
@@ -103646,1109 +51527,74 @@
3164936192,3164937749,LT
3164937750,3164937750,FR
3164937751,3164938239,LT
-3164938240,3164946431,FR
-3164946432,3164946435,PL
-3164946436,3164946439,PT
-3164946440,3164946447,ES
-3164946448,3164946479,FR
-3164946480,3164946483,ES
-3164946484,3164946495,PL
-3164946496,3164946499,IT
-3164946500,3164946503,GB
-3164946504,3164946507,BE
-3164946508,3164946511,CZ
-3164946512,3164946527,PL
-3164946528,3164946559,GB
-3164946560,3164946655,FR
-3164946656,3164946671,BE
-3164946672,3164946783,FR
-3164946784,3164946799,BE
-3164946800,3164946943,FR
-3164946944,3164947007,DE
-3164947008,3164947039,FR
-3164947040,3164947043,ES
-3164947044,3164947047,GB
-3164947048,3164947063,FR
-3164947064,3164947067,NL
-3164947068,3164947071,IT
-3164947072,3164947519,FR
-3164947520,3164947551,ES
-3164947552,3164947583,DE
-3164947584,3164947587,FR
-3164947588,3164947591,DE
-3164947592,3164947599,GB
-3164947600,3164947619,FR
-3164947620,3164947623,ES
-3164947624,3164947627,GB
-3164947628,3164947635,ES
-3164947636,3164947639,DE
-3164947640,3164947643,IT
-3164947644,3164947647,FR
-3164947648,3164947651,CZ
-3164947652,3164947655,PL
-3164947656,3164947743,FR
-3164947744,3164947747,ES
-3164947748,3164947751,BE
-3164947752,3164947759,PL
-3164947760,3164947839,FR
-3164947840,3164947967,GB
-3164947968,3164948479,BE
-3164948480,3164948735,FR
-3164948736,3164948739,DE
-3164948740,3164948743,CZ
-3164948744,3164948747,GB
-3164948748,3164948751,FR
-3164948752,3164948767,GB
-3164948768,3164948787,FR
-3164948788,3164948791,ES
-3164948792,3164948795,DE
-3164948796,3164948799,PL
-3164948800,3164948843,FR
-3164948844,3164948847,PL
-3164948848,3164948851,PT
-3164948852,3164948855,DE
-3164948856,3164948863,FR
-3164948864,3164948927,GB
-3164948928,3164948991,FR
-3164948992,3164949087,GB
-3164949088,3164949095,FR
-3164949096,3164949103,IT
-3164949104,3164949107,DE
-3164949108,3164949111,PL
-3164949112,3164949119,FR
-3164949120,3164949123,PT
-3164949124,3164949127,FR
-3164949128,3164949131,IT
-3164949132,3164949151,FR
-3164949152,3164949155,NL
-3164949156,3164949159,FR
-3164949160,3164949163,PL
-3164949164,3164949167,FR
-3164949168,3164949171,IT
-3164949172,3164949175,PL
-3164949176,3164949179,ES
-3164949180,3164949183,FR
-3164949184,3164949191,PT
-3164949192,3164949199,DE
-3164949200,3164949215,FR
-3164949216,3164949223,PL
-3164949224,3164949231,FR
-3164949232,3164949247,BE
-3164949248,3164949271,FR
-3164949272,3164949275,GB
-3164949276,3164949279,CH
-3164949280,3164949295,BE
-3164949296,3164949331,FR
-3164949332,3164949335,PL
-3164949336,3164949339,FR
-3164949340,3164949343,GB
-3164949344,3164949363,FR
-3164949364,3164949367,DE
-3164949368,3164949371,NL
-3164949372,3164949375,GB
-3164949376,3164949391,FR
-3164949392,3164949395,PL
-3164949396,3164949439,FR
-3164949440,3164949447,PL
-3164949448,3164949455,FR
-3164949456,3164949471,PL
-3164949472,3164949479,FR
-3164949480,3164949487,PL
-3164949488,3164949503,FR
-3164949504,3164950015,BE
-3164950016,3164950023,FR
-3164950024,3164950031,PT
-3164950032,3164950063,FR
-3164950064,3164950079,IE
-3164950080,3164950143,FR
-3164950144,3164950271,GB
-3164950272,3164950399,FR
-3164950400,3164950407,ES
-3164950408,3164950411,FR
-3164950412,3164950423,PL
-3164950424,3164950431,FR
-3164950432,3164950435,PL
-3164950436,3164950439,ES
-3164950440,3164950447,FR
-3164950448,3164950451,ES
-3164950452,3164950455,CZ
-3164950456,3164950463,FR
-3164950464,3164950479,ES
-3164950480,3164950487,IT
-3164950488,3164950495,FR
-3164950496,3164950511,ES
-3164950512,3164950515,GB
-3164950516,3164950519,ES
-3164950520,3164950523,FR
-3164950524,3164950527,ES
-3164950528,3164950543,BE
-3164950544,3164950559,IE
-3164950560,3164950591,NL
-3164950592,3164950687,FR
-3164950688,3164950707,PL
-3164950708,3164950711,FR
-3164950712,3164950715,FI
-3164950716,3164950723,GB
-3164950724,3164950735,FR
-3164950736,3164950751,ES
-3164950752,3164950759,GB
-3164950760,3164950783,ES
-3164950784,3164951039,FR
-3164951040,3164951231,DE
-3164951232,3164951239,GB
-3164951240,3164951263,FR
-3164951264,3164951295,DE
-3164951296,3164951423,GB
-3164951424,3164951455,ES
-3164951456,3164951471,PL
-3164951472,3164951519,FR
-3164951520,3164951523,ES
-3164951524,3164951527,IT
-3164951528,3164951535,FR
-3164951536,3164951543,BE
-3164951544,3164951547,NL
-3164951548,3164951551,BE
-3164951552,3164951555,IT
-3164951556,3164951559,FR
-3164951560,3164951567,PL
-3164951568,3164951571,BE
-3164951572,3164951575,CZ
-3164951576,3164951583,FR
-3164951584,3164951595,DE
-3164951596,3164951647,FR
-3164951648,3164951663,GB
+3164938240,3164949135,FR
+3164949136,3164949151,NL
+3164949152,3164951663,FR
3164951664,3164951671,PL
-3164951672,3164951675,FR
-3164951676,3164951683,ES
-3164951684,3164951687,GB
-3164951688,3164951691,FR
-3164951692,3164951695,CH
-3164951696,3164951743,FR
-3164951744,3164951775,PL
-3164951776,3164951807,NL
-3164951808,3164952191,FR
-3164952192,3164952207,ES
-3164952208,3164952215,FR
-3164952216,3164952219,NL
-3164952220,3164952223,FR
-3164952224,3164952239,GB
-3164952240,3164952243,DE
-3164952244,3164952247,BE
-3164952248,3164952255,PT
-3164952256,3164952263,BE
-3164952264,3164952271,FR
-3164952272,3164952287,DE
-3164952288,3164952303,FR
-3164952304,3164952319,LT
-3164952320,3164952351,DE
-3164952352,3164952367,NL
-3164952368,3164952399,FR
-3164952400,3164952415,NL
-3164952416,3164952423,DE
-3164952424,3164952431,GB
-3164952432,3164952447,ES
-3164952448,3164952479,FR
-3164952480,3164952511,ES
-3164952512,3164952527,IT
-3164952528,3164952959,FR
-3164952960,3164952975,GB
-3164952976,3164953007,FR
-3164953008,3164953023,ES
-3164953024,3164953087,FR
-3164953088,3164953151,LT
-3164953152,3164953215,PL
-3164953216,3164953247,FR
-3164953248,3164953255,BE
+3164951672,3164952224,FR
+3164952225,3164952231,GB
+3164952232,3164952233,FR
+3164952234,3164952235,GB
+3164952236,3164952236,FR
+3164952237,3164952237,GB
+3164952238,3164953255,FR
3164953256,3164953263,CZ
-3164953264,3164953279,BE
-3164953280,3164953327,FR
-3164953328,3164953375,PL
-3164953376,3164953379,NL
-3164953380,3164953383,PT
-3164953384,3164953391,PL
-3164953392,3164953395,IT
-3164953396,3164953399,NL
-3164953400,3164953403,BE
-3164953404,3164953407,PL
-3164953408,3164953423,BE
-3164953424,3164953439,FR
-3164953440,3164953443,PL
-3164953444,3164953447,DE
-3164953448,3164953455,ES
-3164953456,3164953459,FR
-3164953460,3164953463,GB
-3164953464,3164953467,FR
-3164953468,3164953471,GB
-3164953472,3164953515,FR
-3164953516,3164953519,IE
-3164953520,3164953535,FR
-3164953536,3164953551,PL
-3164953552,3164953571,FR
-3164953572,3164953575,GB
-3164953576,3164953583,IT
-3164953584,3164954111,ES
-3164954112,3164954143,FR
-3164954144,3164954207,NL
-3164954208,3164954215,PL
-3164954216,3164954219,IT
-3164954220,3164954223,DE
-3164954224,3164954231,FR
-3164954232,3164954239,NL
-3164954240,3164954251,PL
-3164954252,3164954255,FR
-3164954256,3164954271,NL
-3164954272,3164954275,IT
-3164954276,3164954279,GB
-3164954280,3164954287,FR
-3164954288,3164954303,NL
-3164954304,3164954367,DE
-3164954368,3164954371,FR
-3164954372,3164954375,DE
-3164954376,3164954383,FI
-3164954384,3164954399,FR
-3164954400,3164954407,PL
-3164954408,3164954431,FR
-3164954432,3164954439,ES
-3164954440,3164954443,NL
-3164954444,3164954447,PL
-3164954448,3164954479,FR
-3164954480,3164954495,GB
-3164954496,3164954499,PL
-3164954500,3164954507,FR
-3164954508,3164954511,ES
-3164954512,3164954515,FR
-3164954516,3164954519,IT
-3164954520,3164954527,CH
-3164954528,3164954543,GB
-3164954544,3164954559,LT
-3164954560,3164954567,PT
-3164954568,3164954571,PL
-3164954572,3164954575,CH
-3164954576,3164954583,FR
-3164954584,3164954591,DE
-3164954592,3164954623,IE
-3164954624,3164956383,FR
-3164956384,3164956399,DE
-3164956400,3164956479,FR
-3164956480,3164956543,GB
-3164956544,3164958847,FR
-3164958848,3164958879,IE
-3164958880,3164958911,FR
-3164958912,3164958927,CH
-3164958928,3164958943,FR
-3164958944,3164958947,PL
-3164958948,3164958955,FR
-3164958956,3164958959,GB
-3164958960,3164958975,CZ
-3164958976,3164959007,FR
-3164959008,3164959023,PL
-3164959024,3164959039,FR
-3164959040,3164959135,DE
-3164959136,3164959231,ES
-3164959232,3164959247,FR
-3164959248,3164959255,ES
-3164959256,3164959263,PL
-3164959264,3164959295,NL
-3164959296,3164959303,IT
-3164959304,3164959307,FR
-3164959308,3164959311,IT
-3164959312,3164959327,ES
-3164959328,3164959343,BE
-3164959344,3164959371,FR
-3164959372,3164959375,IE
-3164959376,3164959383,ES
-3164959384,3164959387,PL
-3164959388,3164959391,GB
-3164959392,3164959455,FR
-3164959456,3164959463,DE
-3164959464,3164959467,PL
-3164959468,3164959471,GB
-3164959472,3164959487,NL
-3164959488,3164959551,DE
-3164959552,3164959631,FR
-3164959632,3164959647,IT
-3164959648,3164959663,FR
-3164959664,3164959671,BE
-3164959672,3164959763,FR
-3164959764,3164959767,PL
-3164959768,3164959775,FR
-3164959776,3164959807,PL
-3164959808,3164959823,IE
-3164959824,3164959839,FI
-3164959840,3164959855,BE
-3164959856,3164959887,FR
-3164959888,3164959891,CH
-3164959892,3164959895,LT
-3164959896,3164959899,ES
-3164959900,3164959903,PL
-3164959904,3164959927,FR
-3164959928,3164959931,GB
-3164959932,3164959935,IE
-3164959936,3164959999,FR
-3164960000,3164960255,DE
-3164960256,3164960263,FR
-3164960264,3164960267,LT
-3164960268,3164960271,NL
-3164960272,3164960295,FR
-3164960296,3164960299,IT
-3164960300,3164960303,GB
-3164960304,3164960319,FR
-3164960320,3164960323,ES
-3164960324,3164960327,IT
-3164960328,3164960331,CZ
-3164960332,3164960339,LT
-3164960340,3164960363,FR
-3164960364,3164960367,PL
-3164960368,3164960383,FR
-3164960384,3164960387,DE
-3164960388,3164960391,PL
-3164960392,3164960395,GB
-3164960396,3164960399,DE
-3164960400,3164960415,PL
-3164960416,3164960435,FR
-3164960436,3164960439,PL
-3164960440,3164960443,CH
-3164960444,3164960447,BE
-3164960448,3164960463,PL
-3164960464,3164960467,NL
-3164960468,3164960471,GB
-3164960472,3164960479,FR
-3164960480,3164960495,GB
-3164960496,3164960507,FR
-3164960508,3164960511,CH
-3164960512,3164960575,PL
-3164960576,3164960591,DE
-3164960592,3164960599,FR
-3164960600,3164960607,DE
-3164960608,3164960623,GB
-3164960624,3164960627,FR
-3164960628,3164960639,PL
-3164960640,3164960643,LT
-3164960644,3164960647,FR
-3164960648,3164960651,CH
-3164960652,3164960655,IT
-3164960656,3164960671,FR
-3164960672,3164960675,ES
-3164960676,3164960679,GB
-3164960680,3164960687,FR
-3164960688,3164960695,PL
-3164960696,3164960703,ES
-3164960704,3164960707,PL
-3164960708,3164960719,FR
-3164960720,3164960723,CH
-3164960724,3164960727,FR
-3164960728,3164960735,PL
-3164960736,3164960751,FR
-3164960752,3164960767,ES
-3164960768,3164960799,GB
-3164960800,3164960831,ES
-3164960832,3164960839,IE
-3164960840,3164960843,FR
-3164960844,3164960847,BE
-3164960848,3164960855,PL
-3164960856,3164960863,ES
-3164960864,3164960879,IE
-3164960880,3164960887,FR
-3164960888,3164960891,PL
-3164960892,3164960895,GB
-3164960896,3164960911,FR
-3164960912,3164960919,PL
-3164960920,3164960927,FR
-3164960928,3164960931,ES
-3164960932,3164960939,FR
-3164960940,3164960943,DE
-3164960944,3164960959,PL
-3164960960,3164960963,ES
-3164960964,3164960967,GB
-3164960968,3164960975,PL
-3164960976,3164960991,GB
-3164960992,3164961003,FR
-3164961004,3164961007,DE
-3164961008,3164961023,PL
-3164961024,3164961151,FR
-3164961152,3164961167,DE
-3164961168,3164961175,PL
-3164961176,3164961319,FR
-3164961320,3164961327,PL
-3164961328,3164961331,CZ
-3164961332,3164961371,FR
-3164961372,3164961375,DE
-3164961376,3164961379,NL
-3164961380,3164961387,IT
-3164961388,3164961395,FR
-3164961396,3164961399,PL
-3164961400,3164961403,FR
-3164961404,3164961407,ES
-3164961408,3164961503,FR
-3164961504,3164961519,GB
-3164961520,3164961527,IT
-3164961528,3164961535,PL
-3164961536,3164961551,ES
-3164961552,3164961559,GB
-3164961560,3164961563,DE
-3164961564,3164961583,FR
-3164961584,3164961599,DE
-3164961600,3164961631,FR
-3164961632,3164961647,IT
-3164961648,3164961655,NL
-3164961656,3164961663,ES
-3164961664,3164961695,DE
-3164961696,3164961727,GB
-3164961728,3164961739,DE
-3164961740,3164961743,GB
-3164961744,3164961763,PL
-3164961764,3164961767,IT
-3164961768,3164961775,BE
-3164961776,3164961783,PL
-3164961784,3164961791,ES
-3164961792,3164961807,PL
-3164961808,3164961815,FR
-3164961816,3164961819,CZ
-3164961820,3164961823,DE
-3164961824,3164961827,ES
-3164961828,3164961855,FR
-3164961856,3164961859,PL
-3164961860,3164961863,ES
-3164961864,3164961871,FR
-3164961872,3164961887,IE
-3164961888,3164961903,ES
-3164961904,3164961951,FR
-3164961952,3164961967,ES
-3164961968,3164961971,IE
-3164961972,3164961975,ES
-3164961976,3164961979,FR
-3164961980,3164961983,CH
-3164961984,3164961999,FR
-3164962000,3164962007,BE
-3164962008,3164962011,DE
-3164962012,3164962015,PT
-3164962016,3164962031,FR
-3164962032,3164962035,DE
-3164962036,3164962079,FR
-3164962080,3164962095,ES
-3164962096,3164962143,FR
-3164962144,3164962151,ES
-3164962152,3164962159,DE
-3164962160,3164962175,FR
-3164962176,3164962183,NL
-3164962184,3164962191,FR
-3164962192,3164962199,DE
-3164962200,3164962203,GB
-3164962204,3164962207,PT
-3164962208,3164962239,FR
-3164962240,3164962247,PL
-3164962248,3164962255,FR
-3164962256,3164962259,BE
-3164962260,3164962263,DE
-3164962264,3164962271,PT
-3164962272,3164962279,GB
-3164962280,3164962283,DE
-3164962284,3164962287,ES
-3164962288,3164962291,FR
-3164962292,3164962295,ES
-3164962296,3164962303,PL
-3164962304,3164962319,IE
-3164962320,3164962335,FR
-3164962336,3164962367,DE
-3164962368,3164962431,FR
-3164962432,3164962439,PT
-3164962440,3164962443,FR
-3164962444,3164962447,PL
-3164962448,3164962451,GB
-3164962452,3164962455,FR
-3164962456,3164962459,IE
-3164962460,3164962463,FR
-3164962464,3164962471,IE
-3164962472,3164962475,GB
-3164962476,3164962479,NL
-3164962480,3164962495,FR
-3164962496,3164962527,GB
-3164962528,3164962535,PL
-3164962536,3164962539,CH
-3164962540,3164962543,CZ
-3164962544,3164962623,FR
-3164962624,3164962627,BE
-3164962628,3164962631,LT
-3164962632,3164962639,FR
-3164962640,3164962647,ES
-3164962648,3164962655,PT
-3164962656,3164962663,NL
-3164962664,3164962671,PT
-3164962672,3164962687,FR
-3164962688,3164962703,PL
-3164962704,3164962715,FR
-3164962716,3164962719,PT
-3164962720,3164962723,FR
-3164962724,3164962727,ES
-3164962728,3164962751,FR
-3164962752,3164962783,PT
-3164962784,3164964863,ES
+3164953264,3164953583,FR
+3164953584,3164953599,ES
+3164953600,3164960439,FR
+3164960440,3164960443,DE
+3164960444,3164960715,FR
+3164960716,3164960719,NL
+3164960720,3164961391,FR
+3164961392,3164961395,ES
+3164961396,3164961511,FR
+3164961512,3164961519,GB
+3164961520,3164961551,FR
+3164961552,3164961555,ES
+3164961556,3164962471,FR
+3164962472,3164962475,ES
+3164962476,3164962815,FR
+3164962816,3164964863,ES
3164964864,3164966911,FI
-3164966912,3164967055,FR
-3164967056,3164967071,GB
-3164967072,3164967087,FR
-3164967088,3164967095,IT
-3164967096,3164967103,PL
-3164967104,3164967135,FR
-3164967136,3164967151,ES
-3164967152,3164967155,FR
-3164967156,3164967159,PL
-3164967160,3164967167,FR
-3164967168,3164967295,PT
-3164967296,3164967303,NL
-3164967304,3164967307,PT
-3164967308,3164967311,DE
-3164967312,3164967327,IT
-3164967328,3164967351,FR
-3164967352,3164967359,PL
-3164967360,3164967375,FR
-3164967376,3164967391,GB
-3164967392,3164967423,IE
-3164967424,3164967679,ES
-3164967680,3164967935,IE
-3164967936,3164967967,DE
-3164967968,3164967971,FR
-3164967972,3164967975,GB
-3164967976,3164967983,FR
-3164967984,3164967991,PL
-3164967992,3164967999,PT
-3164968000,3164968015,GB
-3164968016,3164968031,FR
-3164968032,3164968063,NL
-3164968064,3164968831,FR
-3164968832,3164968835,PL
-3164968836,3164968839,NL
-3164968840,3164968843,ES
-3164968844,3164968847,IT
-3164968848,3164968851,GB
-3164968852,3164968855,FR
-3164968856,3164968859,IE
-3164968860,3164968863,LT
-3164968864,3164968871,CH
-3164968872,3164968895,IE
-3164968896,3164968899,PT
-3164968900,3164968903,CZ
-3164968904,3164968907,PL
-3164968908,3164968911,GB
-3164968912,3164968927,DE
-3164968928,3164968951,FR
-3164968952,3164968955,CZ
-3164968956,3164968959,DE
-3164968960,3164968991,GB
-3164968992,3164969007,IE
-3164969008,3164969015,PT
-3164969016,3164969019,NL
+3164966912,3164968319,FR
+3164968320,3164968447,GB
+3164968448,3164968455,FR
+3164968456,3164968459,NL
+3164968460,3164968835,FR
+3164968836,3164968839,ES
+3164968840,3164969019,FR
3164969020,3164969023,BE
-3164969024,3164969027,GB
-3164969028,3164969031,FR
-3164969032,3164969035,GB
-3164969036,3164969039,PL
-3164969040,3164969043,CH
-3164969044,3164969047,PT
-3164969048,3164969055,GB
-3164969056,3164969079,FR
-3164969080,3164969083,PL
-3164969084,3164969095,ES
-3164969096,3164969099,PL
-3164969100,3164969103,DE
-3164969104,3164969135,FR
-3164969136,3164969143,ES
-3164969144,3164969147,FR
-3164969148,3164969151,GB
-3164969152,3164969167,FR
-3164969168,3164969175,BE
-3164969176,3164969179,DE
-3164969180,3164969183,ES
-3164969184,3164969187,FR
-3164969188,3164969191,GB
-3164969192,3164969199,FR
-3164969200,3164969203,LT
-3164969204,3164969207,ES
-3164969208,3164969211,PL
-3164969212,3164969215,DE
-3164969216,3164969503,FR
-3164969504,3164969535,DE
-3164969536,3164969543,FR
-3164969544,3164969551,NL
-3164969552,3164969655,FR
-3164969656,3164969663,LT
-3164969664,3164969695,FR
-3164969696,3164969727,ES
-3164969728,3164969743,DE
-3164969744,3164969759,FR
-3164969760,3164969767,BE
-3164969768,3164969771,FR
-3164969772,3164969775,IT
-3164969776,3164969823,FR
-3164969824,3164969855,DE
-3164969856,3164969875,FR
-3164969876,3164969879,DE
-3164969880,3164969883,ES
-3164969884,3164969887,PL
-3164969888,3164969895,NL
-3164969896,3164969899,PT
-3164969900,3164969983,FR
-3164969984,3164970047,CH
-3164970048,3164970063,FR
-3164970064,3164970079,PL
-3164970080,3164970095,FR
-3164970096,3164970111,ES
-3164970112,3164970175,FR
-3164970176,3164970207,DE
-3164970208,3164970215,FR
-3164970216,3164970219,BE
-3164970220,3164970223,FR
-3164970224,3164970239,GB
-3164970240,3164970271,IE
-3164970272,3164970287,BE
-3164970288,3164970291,ES
-3164970292,3164970295,DE
-3164970296,3164970299,ES
-3164970300,3164970303,DE
-3164970304,3164970335,ES
-3164970336,3164970339,NL
-3164970340,3164970343,BE
-3164970344,3164970347,FI
-3164970348,3164970351,GB
-3164970352,3164970359,FR
-3164970360,3164970363,DE
-3164970364,3164970367,ES
-3164970368,3164970371,FR
-3164970372,3164970375,ES
-3164970376,3164970379,FR
-3164970380,3164970383,IT
-3164970384,3164970387,PL
-3164970388,3164970391,IT
-3164970392,3164970403,FR
-3164970404,3164970407,CH
-3164970408,3164970411,FR
-3164970412,3164970415,GB
-3164970416,3164970423,FR
-3164970424,3164970427,IE
-3164970428,3164970431,PT
-3164970432,3164970463,FR
-3164970464,3164970495,GB
-3164970496,3164970527,PL
-3164970528,3164970543,NL
-3164970544,3164970551,PL
-3164970552,3164970567,FR
-3164970568,3164970571,GB
-3164970572,3164970575,LT
-3164970576,3164970603,FR
-3164970604,3164970607,DE
-3164970608,3164970615,ES
-3164970616,3164970623,FR
-3164970624,3164970627,BE
-3164970628,3164970631,DE
-3164970632,3164970647,ES
-3164970648,3164970651,GB
-3164970652,3164970655,FR
-3164970656,3164970687,NL
-3164970688,3164970691,GB
-3164970692,3164970695,FR
-3164970696,3164970719,PL
-3164970720,3164970783,FR
-3164970784,3164970791,PL
-3164970792,3164970823,FR
-3164970824,3164970827,BE
-3164970828,3164970831,CH
-3164970832,3164970835,IT
-3164970836,3164970839,BE
-3164970840,3164970847,GB
-3164970848,3164970851,IE
-3164970852,3164970867,FR
-3164970868,3164970871,NL
-3164970872,3164970875,BE
-3164970876,3164970879,NL
-3164970880,3164970883,FR
-3164970884,3164970887,ES
-3164970888,3164970891,GB
-3164970892,3164970911,FR
-3164970912,3164970915,PL
-3164970916,3164970919,FR
-3164970920,3164970923,IT
+3164969024,3164970413,FR
+3164970414,3164970415,IT
+3164970416,3164970923,FR
3164970924,3164970927,LT
-3164970928,3164970991,FR
-3164970992,3164971007,BE
-3164971008,3164971011,DE
-3164971012,3164971015,IE
-3164971016,3164971023,PL
-3164971024,3164971071,FR
-3164971072,3164971135,DE
-3164971136,3164971263,IT
-3164971264,3164971391,GB
-3164971392,3164971455,DE
-3164971456,3164971459,FR
-3164971460,3164971463,IT
-3164971464,3164971467,CH
-3164971468,3164971471,DE
-3164971472,3164971479,FR
-3164971480,3164971483,FI
-3164971484,3164971487,PL
-3164971488,3164971503,ES
-3164971504,3164971511,PL
-3164971512,3164971519,CZ
-3164971520,3164971567,FR
-3164971568,3164971571,CZ
-3164971572,3164971575,FR
-3164971576,3164971579,PL
-3164971580,3164971583,ES
-3164971584,3164971615,FR
-3164971616,3164971619,ES
-3164971620,3164971623,CH
-3164971624,3164971719,FR
-3164971720,3164971727,CH
-3164971728,3164971735,FR
-3164971736,3164971739,PL
-3164971740,3164971743,IT
-3164971744,3164971775,ES
-3164971776,3164971799,FR
-3164971800,3164971803,NL
-3164971804,3164971807,FR
-3164971808,3164971903,BE
-3164971904,3164971967,DE
-3164971968,3164971983,PT
-3164971984,3164971991,ES
-3164971992,3164971999,FR
-3164972000,3164972015,CH
-3164972016,3164972019,GB
-3164972020,3164972023,FR
-3164972024,3164972027,IT
-3164972028,3164972031,CH
-3164972032,3164972287,GB
-3164972288,3164972319,FR
-3164972320,3164972351,DE
-3164972352,3164972367,PL
-3164972368,3164972375,NL
-3164972376,3164972379,IE
-3164972380,3164972383,CZ
-3164972384,3164972399,PL
-3164972400,3164972403,GB
-3164972404,3164972407,LT
-3164972408,3164972447,FR
-3164972448,3164972463,PL
-3164972464,3164972495,FR
-3164972496,3164972511,DE
-3164972512,3164972527,PL
-3164972528,3164972531,DE
-3164972532,3164972535,FR
-3164972536,3164972539,NL
-3164972540,3164972559,FR
-3164972560,3164972575,IT
-3164972576,3164972579,CZ
-3164972580,3164972583,GB
-3164972584,3164972587,NL
-3164972588,3164972591,FR
-3164972592,3164972599,BE
-3164972600,3164972607,FR
-3164972608,3164972639,PL
-3164972640,3164972655,IT
-3164972656,3164972671,FR
-3164972672,3164972679,PL
-3164972680,3164972691,FR
-3164972692,3164972695,FI
-3164972696,3164972699,FR
-3164972700,3164972703,DE
-3164972704,3164972735,FR
-3164972736,3164972751,GB
-3164972752,3164972767,DE
-3164972768,3164972783,IT
-3164972784,3164972799,PL
-3164972800,3164973183,FR
-3164973184,3164973311,CZ
-3164973312,3164973375,DE
-3164973376,3164973391,FR
-3164973392,3164973399,DE
-3164973400,3164973407,FR
-3164973408,3164973415,GB
-3164973416,3164973419,FR
+3164970928,3164973419,FR
3164973420,3164973423,ES
-3164973424,3164973439,DE
-3164973440,3164973503,PL
-3164973504,3164973511,FR
-3164973512,3164973515,ES
-3164973516,3164973519,DE
-3164973520,3164973535,PL
-3164973536,3164973551,CH
-3164973552,3164973555,GB
-3164973556,3164973559,FR
-3164973560,3164973575,CZ
-3164973576,3164973583,PL
-3164973584,3164973599,FR
-3164973600,3164973615,IE
-3164973616,3164973623,BE
-3164973624,3164973627,PL
-3164973628,3164973631,CH
-3164973632,3164973663,IE
-3164973664,3164973695,ES
-3164973696,3164973703,DE
-3164973704,3164973711,PT
-3164973712,3164973727,GB
-3164973728,3164973791,FR
-3164973792,3164973807,IT
-3164973808,3164973839,FR
-3164973840,3164973843,PL
-3164973844,3164973847,IE
-3164973848,3164973855,DE
-3164973856,3164973863,PL
-3164973864,3164973867,FR
-3164973868,3164973871,ES
-3164973872,3164973875,PL
-3164973876,3164973879,GB
-3164973880,3164973883,IT
-3164973884,3164973887,DE
-3164973888,3164973911,FR
-3164973912,3164973915,DE
-3164973916,3164973935,FR
-3164973936,3164973939,PL
-3164973940,3164973943,BE
-3164973944,3164973951,PL
-3164973952,3164974591,FR
-3164974592,3164974623,PL
-3164974624,3164974643,FR
-3164974644,3164974647,PL
-3164974648,3164974651,PT
-3164974652,3164974655,DE
-3164974656,3164974659,FR
-3164974660,3164974667,GB
-3164974668,3164974671,LT
-3164974672,3164974675,FR
-3164974676,3164974679,PL
-3164974680,3164974687,FR
-3164974688,3164974719,PL
-3164974720,3164974727,FR
-3164974728,3164974731,PL
-3164974732,3164974735,IT
-3164974736,3164974783,FR
-3164974784,3164974815,IT
-3164974816,3164974847,FR
-3164974848,3164974879,PL
-3164974880,3164974887,FR
-3164974888,3164974895,BE
-3164974896,3164974943,FR
-3164974944,3164974975,PL
-3164974976,3164975023,FR
-3164975024,3164975031,GB
-3164975032,3164975135,FR
-3164975136,3164975143,PL
-3164975144,3164975151,PT
-3164975152,3164975163,FR
-3164975164,3164975167,IT
-3164975168,3164975199,NL
-3164975200,3164975203,CH
-3164975204,3164975211,PL
-3164975212,3164975215,CZ
-3164975216,3164975223,DE
-3164975224,3164975231,FR
-3164975232,3164975235,CZ
-3164975236,3164975251,FR
-3164975252,3164975267,PL
-3164975268,3164975275,LT
-3164975276,3164975279,GB
-3164975280,3164975295,FR
-3164975296,3164975299,BE
-3164975300,3164975343,ES
-3164975344,3164975351,GB
-3164975352,3164975355,DE
-3164975356,3164975651,FR
-3164975652,3164975655,PL
-3164975656,3164975663,FR
-3164975664,3164975679,PL
-3164975680,3164975687,NL
-3164975688,3164975691,FR
-3164975692,3164975695,GB
-3164975696,3164975699,PL
-3164975700,3164975703,FR
-3164975704,3164975719,PL
-3164975720,3164975727,ES
-3164975728,3164975735,FR
-3164975736,3164975739,BE
-3164975740,3164975743,IT
-3164975744,3164975751,PL
-3164975752,3164975755,NL
-3164975756,3164975759,ES
-3164975760,3164975775,PL
-3164975776,3164975807,FR
-3164975808,3164975823,PL
-3164975824,3164975843,GB
-3164975844,3164975847,PL
-3164975848,3164975855,FR
-3164975856,3164975871,PL
-3164975872,3164975935,FR
-3164975936,3164975939,ES
-3164975940,3164975943,PT
-3164975944,3164975947,PL
-3164975948,3164975951,FR
-3164975952,3164975967,GB
-3164975968,3164975983,NL
-3164975984,3164975991,DE
-3164975992,3164975995,FR
-3164975996,3164975999,NL
-3164976000,3164976023,PL
-3164976024,3164976031,ES
-3164976032,3164976047,FR
-3164976048,3164976063,PL
-3164976064,3164976095,FR
-3164976096,3164976127,PL
-3164976128,3164976131,NL
-3164976132,3164976135,GB
-3164976136,3164976139,FR
-3164976140,3164976143,GB
-3164976144,3164976159,FR
-3164976160,3164976191,GB
-3164976192,3164976215,FR
-3164976216,3164976223,GB
-3164976224,3164976231,FR
-3164976232,3164976239,ES
-3164976240,3164976255,IE
-3164976256,3164976259,GB
-3164976260,3164976263,FR
-3164976264,3164976271,PT
-3164976272,3164976279,FI
-3164976280,3164976287,PL
-3164976288,3164976291,NL
-3164976292,3164976295,PL
+3164973424,3164973663,FR
+3164973664,3164973695,GB
+3164973696,3164974335,FR
+3164974336,3164974463,GB
+3164974464,3164974527,FR
+3164974528,3164974559,ES
+3164974560,3164976143,FR
+3164976144,3164976159,BE
+3164976160,3164976295,FR
3164976296,3164976303,IT
-3164976304,3164976307,FR
-3164976308,3164976311,LT
-3164976312,3164976319,PL
-3164976320,3164976327,ES
-3164976328,3164976331,FR
-3164976332,3164976335,PL
-3164976336,3164976339,LT
-3164976340,3164976343,DE
-3164976344,3164976347,PL
-3164976348,3164976351,ES
-3164976352,3164976383,IE
-3164976384,3164976399,FR
-3164976400,3164976403,CH
-3164976404,3164976407,PL
-3164976408,3164976415,PT
-3164976416,3164976431,FR
-3164976432,3164976447,PT
-3164976448,3164976455,FR
-3164976456,3164976459,LT
-3164976460,3164976463,DE
-3164976464,3164976479,ES
-3164976480,3164976575,FR
-3164976576,3164976583,LT
-3164976584,3164976591,IT
-3164976592,3164976623,FR
-3164976624,3164976631,BE
-3164976632,3164976663,FR
-3164976664,3164976671,GB
-3164976672,3164976687,FR
-3164976688,3164976703,PL
-3164976704,3164976767,FR
-3164976768,3164976783,DE
-3164976784,3164976799,CZ
-3164976800,3164976831,FR
-3164976832,3164976835,IT
-3164976836,3164976839,ES
-3164976840,3164976847,FR
-3164976848,3164976863,CH
-3164976864,3164977151,FR
-3164977152,3164977215,PL
-3164977216,3164977407,FR
-3164977408,3164977415,NL
-3164977416,3164977439,FR
-3164977440,3164977455,PT
-3164977456,3164977471,FR
-3164977472,3164977535,PT
-3164977536,3164977599,FR
-3164977600,3164977631,GB
-3164977632,3164977639,CZ
-3164977640,3164977759,FR
-3164977760,3164977775,NL
-3164977776,3164977823,FR
-3164977824,3164977839,PT
-3164977840,3164977871,FR
-3164977872,3164977875,GB
-3164977876,3164977883,DE
-3164977884,3164977887,GB
-3164977888,3164977903,IT
-3164977904,3164977907,DE
-3164977908,3164977911,BE
-3164977912,3164977915,CH
-3164977916,3164977919,CZ
-3164977920,3164977951,DE
-3164977952,3164977959,FR
-3164977960,3164977963,CZ
-3164977964,3164977967,BE
-3164977968,3164977983,IT
-3164977984,3164977999,FR
-3164978000,3164978003,PL
-3164978004,3164978007,GB
-3164978008,3164978015,FR
-3164978016,3164978047,PT
-3164978048,3164978063,FR
-3164978064,3164978067,BE
-3164978068,3164978071,FR
-3164978072,3164978079,ES
-3164978080,3164978127,GB
-3164978128,3164978147,FR
-3164978148,3164978151,BE
-3164978152,3164978155,GB
-3164978156,3164978159,DE
-3164978160,3164978175,FR
-3164978176,3164978431,IT
-3164978432,3164978559,FR
-3164978560,3164978563,PL
-3164978564,3164978567,FR
-3164978568,3164978571,DE
-3164978572,3164978575,IT
-3164978576,3164978607,FR
-3164978608,3164978615,DE
-3164978616,3164978623,FR
-3164978624,3164978655,ES
-3164978656,3164978659,IT
-3164978660,3164978663,FI
-3164978664,3164978667,PL
-3164978668,3164978671,FR
-3164978672,3164978679,PT
-3164978680,3164978687,PL
-3164978688,3164978695,PT
-3164978696,3164978703,ES
-3164978704,3164978719,BE
-3164978720,3164978783,PT
-3164978784,3164978815,FR
-3164978816,3164978879,IE
-3164978880,3164978951,FR
-3164978952,3164978955,PL
-3164978956,3164978975,FR
-3164978976,3164978983,ES
-3164978984,3164978991,CZ
-3164978992,3164978999,PL
-3164979000,3164979003,GB
-3164979004,3164979007,DE
-3164979008,3164979047,FR
-3164979048,3164979051,BE
-3164979052,3164979103,FR
-3164979104,3164979107,FI
-3164979108,3164979111,IT
-3164979112,3164979119,PL
-3164979120,3164979135,NL
-3164979136,3164979151,FR
-3164979152,3164979155,ES
-3164979156,3164979167,FR
-3164979168,3164979175,DE
-3164979176,3164979183,FR
-3164979184,3164979199,DE
-3164979200,3164995583,FR
+3164976304,3164995583,FR
3164995584,3165061119,RU
3165061120,3165126655,SK
3165126656,3165192191,RU
3165192192,3165257727,GE
3165257728,3165323263,RO
3165323264,3165388799,ES
-3165388800,3165519871,RO
+3165388800,3165417471,RO
+3165417472,3165421567,DE
+3165421568,3165437951,RO
+3165437952,3165454335,AT
+3165454336,3165519871,RO
3165519872,3165585407,DE
3165585408,3165650943,CZ
-3165650944,3165938239,DK
-3165938240,3165938367,US
-3165938368,3165938375,DK
-3165938376,3165938431,US
-3165938432,3166175231,DK
+3165650944,3166175231,DK
3166175232,3166306303,CH
3166306304,3166437375,RU
3166437376,3166568447,BE
@@ -104762,7 +51608,7 @@
3166654464,3166658559,RU
3166658560,3166662655,UA
3166662656,3166666751,RU
-3166666752,3166667263,DE
+3166666752,3166667263,PL
3166667264,3166667775,CZ
3166667776,3166668799,GB
3166668800,3166670847,RO
@@ -104780,111 +51626,119 @@
3166697472,3166699519,RO
3166699520,3166961663,DE
3166961664,3167223807,SI
-3167223808,3167594831,NL
-3167594832,3167594839,A2
-3167594840,3167748095,NL
-3167748096,3167781887,RO
-3167781888,3167782399,A2
-3167782400,3167875071,RO
-3167875072,3167879167,MD
-3167879168,3167940095,RO
-3167940096,3167940351,CY
-3167940352,3167950847,RO
-3167950848,3167951359,A2
-3167951360,3167986687,RO
-3167986688,3167987711,CY
+3167223808,3167748095,NL
+3167748096,3167772671,RO
+3167772672,3167773695,MD
+3167773696,3167774719,RO
+3167774720,3167775743,MD
+3167775744,3167776767,RO
+3167776768,3167777791,MD
+3167777792,3167778815,RO
+3167778816,3167780863,MD
+3167780864,3167797247,RO
+3167797248,3167798271,MD
+3167798272,3167799295,RO
+3167799296,3167801343,MD
+3167801344,3167868927,RO
+3167868928,3167879167,MD
+3167879168,3167938559,RO
+3167938560,3167939583,MD
+3167939584,3167940607,RO
+3167940608,3167943679,MD
+3167943680,3167987711,RO
3167987712,3167989759,MD
-3167989760,3168096255,RO
+3167989760,3168005887,RO
+3168005888,3168006143,NL
+3168006144,3168010239,RO
+3168010240,3168011263,MD
+3168011264,3168012287,RO
+3168012288,3168014335,MD
+3168014336,3168016383,RO
+3168016384,3168018431,MD
+3168018432,3168020479,RO
+3168020480,3168022527,MD
+3168022528,3168050431,RO
+3168050432,3168050687,MD
+3168050688,3168084991,RO
+3168084992,3168086015,MD
+3168086016,3168088063,IT
+3168088064,3168089087,RO
+3168089088,3168090111,MD
+3168090112,3168092159,FR
+3168092160,3168096255,RO
3168096256,3168100351,MD
-3168100352,3168195583,RO
-3168195584,3168196095,DE
-3168196096,3168207103,RO
-3168207104,3168207359,CY
-3168207360,3168214527,RO
-3168214528,3168214783,CY
-3168214784,3168223743,RO
-3168223744,3168224255,MD
-3168224256,3168272383,RO
+3168100352,3168129023,RO
+3168129024,3168130047,MD
+3168130048,3168132095,RO
+3168132096,3168133119,MD
+3168133120,3168136191,RO
+3168136192,3168137215,MD
+3168137216,3168138239,RO
+3168138240,3168139263,MD
+3168139264,3168156671,RO
+3168156672,3168157695,MD
+3168157696,3168176127,RO
+3168176128,3168177151,MD
+3168177152,3168178175,RO
+3168178176,3168179199,MD
+3168179200,3168192511,RO
+3168192512,3168194559,MD
+3168194560,3168199679,RO
+3168199680,3168200703,MD
+3168200704,3168267263,RO
+3168267264,3168269311,MD
+3168269312,3168271359,RO
+3168271360,3168272383,MD
3168272384,3168534527,IT
3168534528,3168796671,GB
3168796672,3168829439,FR
3168829440,3168862207,RO
3168862208,3168894975,RU
3168894976,3168927743,PS
-3168927744,3169026047,RU
+3168927744,3168960511,RU
+3168960512,3168993279,NL
+3168993280,3169026047,RU
3169026048,3169034239,CZ
3169034240,3169042431,GB
3169042432,3169044479,GR
-3169044480,3169045119,NL
-3169045120,3169045135,BE
-3169045136,3169045183,NL
-3169045184,3169045247,BE
-3169045248,3169045375,NL
-3169045376,3169045503,BE
-3169045504,3169046527,NL
+3169044480,3169046527,NL
3169046528,3169050623,AZ
3169050624,3169052671,HU
3169052672,3169054719,PS
3169054720,3169056767,GB
3169056768,3169058815,EE
-3169058816,3169077119,DK
-3169077120,3169077127,NO
-3169077128,3169087375,DK
-3169087376,3169087383,NO
-3169087384,3169087391,DK
-3169087392,3169087415,NO
-3169087416,3169091583,DK
+3169058816,3169091583,DK
3169091584,3169124351,IT
3169124352,3169157119,RO
3169157120,3169189887,SY
3169189888,3169222655,UA
3169222656,3169255423,SI
-3169255424,3169264127,KW
-3169264128,3169264383,US
-3169264384,3169264895,KW
-3169264896,3169264927,OM
-3169264928,3169265167,KW
-3169265168,3169265175,IQ
-3169265176,3169265183,SA
-3169265184,3169265223,KW
-3169265224,3169265231,IQ
-3169265232,3169265295,SA
-3169265296,3169265303,SD
-3169265304,3169265311,SA
-3169265312,3169265567,KW
-3169265568,3169265583,IQ
-3169265584,3169278991,KW
-3169278992,3169279007,SA
-3169279008,3169279231,KW
-3169279232,3169279239,IQ
-3169279240,3169279255,SA
-3169279256,3169279263,KW
-3169279264,3169279295,SA
-3169279296,3169279303,KW
-3169279304,3169279311,SA
-3169279312,3169279319,SD
-3169279320,3169279743,KW
-3169279744,3169279759,IQ
-3169279760,3169281023,KW
-3169281024,3169281279,US
-3169281280,3169288191,KW
+3169255424,3169279999,KW
+3169280000,3169282047,GB
+3169282048,3169288191,KW
3169288192,3169320959,UA
3169320960,3169583103,RU
3169583104,3169648639,KW
3169648640,3169714175,MD
3169714176,3169779711,FI
3169779712,3169845247,UA
-3169845248,3169863679,RO
+3169845248,3169854463,RO
+3169854464,3169855487,IR
+3169855488,3169863167,RO
+3169863168,3169863423,MD
+3169863424,3169863679,RO
3169863680,3169864703,MD
-3169864704,3169867775,RO
-3169867776,3169868031,DE
-3169868032,3169873919,RO
-3169873920,3169878015,MD
-3169878016,3169905151,RO
-3169905152,3169905407,GB
-3169905408,3169920767,RO
-3169920768,3169921023,SE
-3169921024,3169976319,RO
+3169864704,3169869823,RO
+3169869824,3169878015,MD
+3169878016,3169882111,RO
+3169882112,3169886207,MD
+3169886208,3169894399,RO
+3169894400,3169895423,MD
+3169895424,3169896447,RO
+3169896448,3169898495,ES
+3169898496,3169927423,RO
+3169927424,3169927679,NL
+3169927680,3169976319,RO
3169976320,3170111487,RU
3170111488,3170115583,MD
3170115584,3170119679,RU
@@ -104901,17 +51755,13 @@
3170263040,3170271231,CZ
3170271232,3170279423,PL
3170279424,3170287615,RU
-3170287616,3170289151,GB
-3170289152,3170289167,BA
-3170289168,3170295807,GB
+3170287616,3170295807,GB
3170295808,3170303999,RU
3170304000,3170312191,SY
3170312192,3170320383,RU
3170320384,3170328575,JO
3170328576,3170336767,UA
-3170336768,3170363391,RO
-3170363392,3170363647,SK
-3170363648,3170369535,RO
+3170336768,3170369535,RO
3170369536,3170500607,SA
3170500608,3170631679,PT
3170631680,3170664447,PL
@@ -104922,8 +51772,16 @@
3170795520,3170828287,BG
3170828288,3170861055,RU
3170861056,3170893823,RS
-3170893824,3179282431,BR
-3179282432,3187671039,MX
+3170893824,3173887999,BR
+3173892096,3174223871,BR
+3174227968,3179282431,BR
+3179282432,3184116735,MX
+3184116736,3184123903,BR
+3184123904,3184125951,MX
+3184125952,3184127999,BR
+3184128000,3184459775,MX
+3184525312,3184885759,MX
+3184918528,3187671039,MX
3187671040,3187687423,CO
3187687424,3187695615,DO
3187695616,3187703807,AR
@@ -104935,16 +51793,19 @@
3187732480,3187734527,CO
3187734528,3187736575,BO
3187736576,3187752959,AR
-3187752960,3187755007,VE
-3187755008,3187755519,CO
-3187755520,3187761151,VE
+3187752960,3187755519,CO
+3187755520,3187756031,VE
+3187756032,3187761151,CO
3187761152,3187769343,AR
3187769344,3187802111,CO
3187802112,3187818495,AR
+3187820544,3187822591,BR
3187822592,3187824639,AR
3187824640,3187826687,CL
3187826688,3187834879,AR
-3187834880,3187851263,CW
+3187834880,3187843071,CW
+3187843072,3187845119,AW
+3187845120,3187851263,CW
3187851264,3187855359,PY
3187855360,3187857407,PA
3187857408,3187859455,CR
@@ -104954,15 +51815,25 @@
3187910656,3187914751,CL
3187914752,3187916799,BO
3187916800,3187933183,CO
-3187933184,3187935607,GT
+3187933184,3187935519,GT
+3187935520,3187935527,HN
+3187935528,3187935607,GT
3187935608,3187935615,HN
-3187935616,3187936711,GT
+3187935616,3187936047,GT
+3187936048,3187936063,HN
+3187936064,3187936711,GT
3187936712,3187936719,HN
-3187936720,3187937279,GT
-3187937280,3187939327,HN
-3187939328,3187940351,GT
-3187940352,3187941375,HN
-3187941376,3187946111,GT
+3187936720,3187940351,GT
+3187940352,3187940607,HN
+3187940608,3187940963,GT
+3187940964,3187940967,HN
+3187940968,3187943055,GT
+3187943056,3187943063,HN
+3187943064,3187943127,GT
+3187943128,3187943135,HN
+3187943136,3187945971,GT
+3187945972,3187945975,HN
+3187945976,3187946111,GT
3187946112,3187946239,HN
3187946240,3187946639,GT
3187946640,3187946647,HN
@@ -104971,7 +51842,9 @@
3187947988,3187948799,GT
3187948800,3187948927,HN
3187948928,3187949567,GT
-3187949568,3187953663,BQ
+3187949568,3187950126,BQ
+3187950127,3187950127,CW
+3187950128,3187953663,BQ
3187953664,3187955711,CL
3187955712,3187957759,CR
3187957760,3187961855,CL
@@ -104982,6 +51855,7 @@
3188006912,3188015103,CL
3188015104,3188031487,HN
3188031488,3188039679,SV
+3188039680,3188047871,AR
3188047872,3188051967,CO
3188051968,3188054015,CR
3188054016,3188056063,AR
@@ -104995,7 +51869,9 @@
3188113408,3188117503,HN
3188117504,3188121599,AR
3188121600,3188125695,TT
-3188125696,3188146175,AR
+3188125696,3188137175,AR
+3188137176,3188137183,DE
+3188137184,3188146175,AR
3188146176,3188170751,CO
3188170752,3188174847,CR
3188174848,3188178943,AR
@@ -105013,9 +51889,14 @@
3188242432,3188244479,AR
3188244480,3188260863,CO
3188260864,3188269055,AR
-3188269056,3188269439,VE
+3188269056,3188269183,VE
+3188269184,3188269311,MX
+3188269312,3188269439,VE
3188269440,3188269567,CO
-3188269568,3188270847,VE
+3188269568,3188269823,MX
+3188269824,3188270079,VE
+3188270080,3188270335,MX
+3188270336,3188270847,VE
3188270848,3188271103,BR
3188271104,3188273151,VE
3188273152,3188275199,PA
@@ -105035,9 +51916,13 @@
3188473856,3188482047,PE
3188482048,3188490239,AR
3188490240,3188498431,CO
-3188498432,3188517119,AR
+3188498432,3188513407,AR
+3188513408,3188513535,US
+3188513536,3188517119,AR
3188517120,3188517247,US
-3188517248,3188523007,AR
+3188517248,3188518271,AR
+3188518272,3188518399,US
+3188518400,3188523007,AR
3188523008,3188539391,CO
3188539392,3188543487,CL
3188543488,3188545535,PA
@@ -105052,14 +51937,17 @@
3188597760,3188598783,PA
3188598784,3188600831,AR
3188600832,3188604927,CL
+3188604928,3188621311,BO
3188621312,3188625407,GT
3188625408,3188627455,AR
3188627456,3188628479,CR
3188628480,3188637695,AR
3188637696,3188645887,PA
3188645888,3188662271,CO
+3188662272,3188670463,BR
3188670464,3188674559,HN
3188674560,3188678655,AR
+3188678656,3188682751,BR
3188682752,3188686847,AR
3188686848,3188690943,EC
3188690944,3188695039,CU
@@ -105080,7 +51968,12 @@
3191093248,3191095295,AR
3191095296,3191099391,EC
3191099392,3191103487,AR
-3191107584,3191109119,PE
+3191103488,3191107583,VE
+3191107584,3191108607,PE
+3191108608,3191108639,MX
+3191108640,3191108959,PE
+3191108960,3191108991,CO
+3191108992,3191109119,PE
3191109120,3191109631,MX
3191109632,3191111679,PE
3191111680,3191128063,PY
@@ -105088,60 +51981,100 @@
3191132160,3191136255,AR
3191136256,3191144447,DO
3191144448,3191152639,SV
-3191152640,3191154687,NI
-3191154688,3191156735,SV
+3191152640,3191155711,NI
+3191155712,3191156735,SV
3191156736,3191169023,HN
3191169024,3191193599,SV
3191193600,3191209983,HN
3191209984,3191275519,CL
3191275520,3191341055,AR
-3191341056,3191406591,GT
+3191341056,3191405951,GT
+3191405952,3191406335,SV
+3191406336,3191406591,GT
3191406592,3191439359,SV
3191439360,3191455743,EC
3191455744,3191472127,AR
3191472128,3191603199,TT
3191603200,3191607807,CO
3191607808,3191608319,CL
-3191608320,3191611391,CO
+3191608320,3191610623,CO
+3191610624,3191610879,PE
+3191610880,3191611391,CO
3191611392,3191619583,VE
-3191619584,3191649279,CO
-3191649280,3191649791,US
-3191649792,3191650559,CO
-3191650560,3191650815,US
+3191619584,3191624703,CL
+3191624704,3191624959,CO
+3191624960,3191626239,CL
+3191626240,3191626495,CO
+3191626496,3191633663,CL
+3191633664,3191633919,CO
+3191633920,3191635967,CL
+3191635968,3191647743,CO
+3191647744,3191647807,AR
+3191647808,3191648255,CO
+3191648256,3191649791,US
+3191649792,3191650303,CO
+3191650304,3191650815,US
3191650816,3191651071,CO
-3191651072,3191651327,US
-3191651328,3191651583,CO
-3191651584,3191651839,US
+3191651072,3191651839,US
3191651840,3191670015,CO
3191670016,3191670271,AR
-3191670272,3191676927,CO
-3191676928,3191679487,AR
-3191679488,3191679743,US
-3191679744,3191683327,AR
-3191683328,3191683583,US
-3191683584,3191684351,AR
-3191684352,3191684607,US
-3191684608,3191685631,AR
+3191670272,3191670783,CO
+3191670784,3191672831,CL
+3191672832,3191674879,CO
+3191674880,3191676927,CL
+3191676928,3191677951,US
+3191677952,3191678207,AR
+3191678208,3191678719,US
+3191678720,3191678975,AR
+3191678976,3191680255,US
+3191680256,3191680511,AR
+3191680512,3191680767,US
+3191680768,3191681279,AR
+3191681280,3191681535,US
+3191681536,3191683327,AR
+3191683328,3191684607,US
+3191684608,3191684863,AR
+3191684864,3191685119,US
+3191685120,3191685631,AR
3191685632,3191685887,US
-3191685888,3191688703,AR
+3191685888,3191687167,AR
+3191687168,3191688703,CO
3191688704,3191693311,US
-3191693312,3191696383,CO
-3191696384,3191696895,US
-3191696896,3191697407,CO
-3191697408,3191701503,US
-3191701504,3191704063,CO
+3191693312,3191695871,CO
+3191695872,3191696127,US
+3191696128,3191696383,CO
+3191696384,3191701503,US
+3191701504,3191702527,CL
+3191702528,3191703039,US
+3191703040,3191704063,CO
3191704064,3191704575,US
-3191704576,3191705599,CO
+3191704576,3191704831,CO
+3191704832,3191705343,US
+3191705344,3191705599,CO
3191705600,3191705855,US
-3191705856,3191721983,CO
-3191721984,3191722495,AR
-3191722496,3191727103,CO
+3191705856,3191706111,CO
+3191706112,3191706623,US
+3191706624,3191719935,CO
+3191719936,3191721215,AR
+3191721216,3191721471,CO
+3191721472,3191722495,AR
+3191722496,3191725055,CO
+3191725056,3191725311,AR
+3191725312,3191726079,CO
+3191726080,3191726335,AR
+3191726336,3191726591,CO
+3191726592,3191726847,AR
+3191726848,3191727103,CO
3191727104,3191727359,AR
-3191727360,3191730943,CO
+3191727360,3191730431,CO
+3191730432,3191730687,AR
+3191730688,3191730943,CO
3191730944,3191731199,AR
3191731200,3191732479,CO
3191732480,3191732735,AR
-3191732736,3191734271,CO
+3191732736,3191734079,CO
+3191734080,3191734143,US
+3191734144,3191734271,CO
3191734272,3191799807,SV
3191799808,3191865343,EC
3191865344,3191930879,UY
@@ -105154,59 +52087,97 @@
3193143296,3193176063,TT
3193176064,3193307135,CO
3193307136,3193438207,SV
-3193438208,3193569279,CW
-3193569280,3193582847,CO
-3193582848,3193583103,EC
-3193583104,3193606143,CO
+3193438208,3193450495,CW
+3193450496,3193450751,SR
+3193450752,3193569279,CW
+3193569280,3193579263,CO
+3193579264,3193579519,EC
+3193579520,3193582591,CO
+3193582592,3193583103,EC
+3193583104,3193595391,CO
+3193595392,3193595647,EC
+3193595648,3193599999,CO
+3193600000,3193600255,EC
+3193600256,3193605375,CO
+3193605376,3193605631,EC
+3193605632,3193606143,CO
3193606144,3193606399,EC
-3193606400,3193622527,CO
-3193622528,3193623295,EC
-3193623296,3193625599,CO
+3193606400,3193606655,CO
+3193606656,3193607167,EC
+3193607168,3193617151,CO
+3193617152,3193617407,EC
+3193617408,3193622527,CO
+3193622528,3193623551,EC
+3193623552,3193625599,CO
3193625600,3193625855,EC
3193625856,3193626111,CO
-3193626112,3193626367,US
-3193626368,3193634815,CO
+3193626112,3193626623,US
+3193626624,3193629439,CO
+3193629440,3193629695,EC
+3193629696,3193634815,CO
3193634816,3193700351,CL
-3193700352,3193724927,HN
+3193700352,3193722751,HN
+3193722752,3193722879,GT
+3193722880,3193724927,HN
3193724928,3193729023,AR
3193729024,3193733119,CU
-3193733120,3193735423,AR
-3193735424,3193735679,US
+3193733120,3193735167,AR
+3193735168,3193735679,US
3193735680,3193736191,AR
3193736192,3193736447,US
3193736448,3193737471,AR
-3193737472,3193737727,US
-3193737728,3193737983,AR
-3193737984,3193738495,US
-3193738496,3193738751,AR
-3193738752,3193739007,US
+3193737472,3193739007,US
3193739008,3193739263,AR
3193739264,3193739519,US
-3193739520,3193740031,AR
-3193740032,3193740287,US
+3193739520,3193739775,AR
+3193739776,3193740287,US
3193740288,3193741311,AR
-3193741312,3193741567,US
-3193741568,3193743231,AR
+3193741312,3193741823,US
+3193741824,3193742079,AR
+3193742080,3193742335,US
+3193742336,3193742591,AR
+3193742592,3193742847,US
+3193742848,3193743231,AR
3193743232,3193743359,US
-3193743360,3193745279,AR
+3193743360,3193743743,AR
+3193743744,3193743871,US
+3193743872,3193743999,AR
+3193744000,3193744127,US
+3193744128,3193745279,AR
3193745280,3193745407,US
-3193745408,3193746751,AR
+3193745408,3193746431,AR
+3193746432,3193746687,US
+3193746688,3193746751,AR
3193746752,3193746815,US
-3193746816,3193747839,AR
-3193747840,3193748223,US
-3193748224,3193749503,AR
-3193749504,3193749759,US
+3193746816,3193746879,AR
+3193746880,3193746943,US
+3193746944,3193747199,AR
+3193747200,3193747455,US
+3193747456,3193747583,AR
+3193747584,3193748223,US
+3193748224,3193748863,AR
+3193748864,3193748991,US
+3193748992,3193749247,AR
+3193749248,3193749759,US
3193749760,3193750015,AR
3193750016,3193750271,US
3193750272,3193750527,AR
3193750528,3193750783,US
3193750784,3193751807,AR
3193751808,3193752319,US
-3193752320,3193753215,AR
-3193753216,3193753343,US
+3193752320,3193752831,AR
+3193752832,3193752959,US
+3193752960,3193753087,AR
+3193753088,3193753343,US
3193753344,3193754623,AR
3193754624,3193754751,US
-3193754752,3193765887,AR
+3193754752,3193755135,AR
+3193755136,3193755263,US
+3193755264,3193756415,AR
+3193756416,3193756543,US
+3193756544,3193757055,AR
+3193757056,3193757183,US
+3193757184,3193765887,AR
3193765888,3193774079,TT
3193774080,3193775103,PA
3193775104,3193776127,GY
@@ -105233,11 +52204,12 @@
3194028032,3194044415,AR
3194044416,3194052607,CO
3194052608,3194056703,TT
-3194056704,3194058751,CW
+3194056704,3194058495,CW
+3194058496,3194058751,CA
3194058752,3194060799,AR
3194060800,3194068991,CO
3194068992,3194071039,PA
-3194071040,3194073087,CL
+3194071040,3194072063,CL
3194073088,3194077183,HN
3194077184,3194085375,CO
3194085376,3194093567,VE
@@ -105251,8 +52223,8 @@
3194134528,3194135551,AR
3194135552,3194136575,GT
3194136576,3194137087,BR
-3194137088,3194140671,AR
-3194140672,3194142719,CR
+3194137088,3194140159,AR
+3194140160,3194142719,CR
3194142720,3194159103,CL
3194159104,3194165247,HN
3194165248,3194175487,SV
@@ -105272,11 +52244,7 @@
3194368000,3194370047,BO
3194370048,3194372095,PA
3194372096,3194380287,HT
-3194380288,3194381439,BZ
-3194381440,3194381567,US
-3194381568,3194383231,BZ
-3194383232,3194383359,US
-3194383360,3194388479,BZ
+3194380288,3194388479,US
3194388480,3194396671,PE
3194396672,3194413055,CO
3194413056,3194421247,CL
@@ -105287,11 +52255,14 @@
3194445824,3194454015,CO
3194454016,3194458111,AR
3194458112,3194462207,CL
+3194462208,3194466303,BR
3194466304,3194467327,AR
3194467328,3194468351,DO
3194468352,3194469375,US
3194469376,3194469631,CA
-3194469632,3194470399,CR
+3194469632,3194469887,CR
+3194469888,3194470143,US
+3194470144,3194470399,CR
3194470400,3194486783,AR
3194486784,3194494975,BO
3194494976,3194511359,AR
@@ -105299,7 +52270,9 @@
3194515456,3194519551,GT
3194519552,3194535935,PY
3194535936,3194585087,AR
-3194585088,3194589183,HN
+3194585088,3194586623,HN
+3194586624,3194586879,US
+3194586880,3194589183,HN
3194589184,3194591231,AR
3194591232,3194592255,PA
3194592256,3194593279,GY
@@ -105318,15 +52291,21 @@
3194640384,3194642431,BZ
3194642432,3194646527,AR
3194646528,3194648575,DO
-3194648576,3194659839,AR
+3194648576,3194652159,AR
+3194652160,3194652415,MX
+3194652416,3194652671,AR
+3194652672,3194654719,MX
+3194654720,3194659839,AR
3194659840,3194660351,US
-3194660352,3194662143,AR
+3194660352,3194661119,AR
+3194661120,3194661375,US
+3194661376,3194662143,AR
3194662144,3194662399,US
3194662400,3194663167,AR
-3194663168,3194663423,US
-3194663424,3194663679,AR
-3194663680,3194663935,US
-3194663936,3194665471,AR
+3194663168,3194664447,US
+3194664448,3194664959,AR
+3194664960,3194665215,US
+3194665216,3194665471,AR
3194665472,3194665727,US
3194665728,3194665983,AR
3194665984,3194666239,US
@@ -105346,24 +52325,28 @@
3194728448,3194729471,CL
3194729472,3194730495,PE
3194730496,3194732543,AR
+3194732544,3194736639,BR
3194736640,3194737663,NI
3194737664,3194740735,AR
3194740736,3194742783,CL
3194742784,3194744831,EC
3194744832,3194746879,AR
-3194746880,3194748927,US
+3194746880,3194748927,CW
3194748928,3194757119,UY
3194757120,3194765311,AR
3194765312,3194767359,EC
3194767360,3194768383,CR
3194768384,3194769407,AR
3194769408,3194773503,PE
+3194773504,3194781695,BR
3194781696,3194798079,CL
3194798080,3194799103,AR
3194799104,3194804223,GY
3194804224,3194805247,AR
3194805248,3194806271,CR
-3194806272,3194830847,AR
+3194806272,3194814463,AR
+3194814464,3194818559,PA
+3194818560,3194830847,AR
3194830848,3194839039,PA
3194839040,3194863615,CO
3194863616,3194871807,HN
@@ -105390,22 +52373,33 @@
3194982912,3194983039,US
3194983040,3194984191,PA
3194984192,3194984319,US
-3194984320,3194985471,PA
+3194984320,3194984831,PA
+3194984832,3194984959,GB
+3194984960,3194985471,PA
3194985472,3194985599,US
3194985600,3194994687,PA
-3194994688,3195011071,AR
-3195019264,3195023359,AR
+3194994688,3195023359,AR
3195023360,3195024383,CL
3195024384,3195025407,UY
3195025408,3195043839,AR
-3195043840,3195060223,CO
-3195060224,3195064319,UY
+3195043840,3195056127,CO
+3195056128,3195060223,AR
+3195060224,3195061247,US
+3195061248,3195062271,AR
+3195062272,3195062783,US
+3195062784,3195063039,UY
+3195063040,3195063295,US
+3195063296,3195064319,BR
+3195064320,3195066367,PY
3195066368,3195067391,AR
3195067392,3195068415,CR
3195068416,3195076607,CW
3195076608,3195084799,CL
3195084800,3195092991,CR
-3195092992,3195097087,AR
+3195092992,3195097087,DO
+3195097088,3195099135,CR
+3195099136,3195100159,GT
+3195100160,3195101183,PY
3195101184,3195109375,CR
3195109376,3195125759,AR
3195125760,3195133951,PE
@@ -105422,11 +52416,10 @@
3195205632,3195206655,PE
3195206656,3195207679,CL
3195207680,3195211775,GT
+3195211776,3195215871,BZ
3195215872,3195224063,AR
-3195224064,3195232511,PA
-3195232512,3195232767,CR
-3195232768,3195233023,PA
-3195233024,3195234559,CR
+3195224064,3195232255,PA
+3195232256,3195234559,CR
3195234560,3195234815,PA
3195234816,3195235327,CR
3195235328,3195235583,PA
@@ -105436,7 +52429,9 @@
3195256832,3195265023,AR
3195265024,3195273215,CO
3195273216,3195535359,PE
-3195535360,3195543551,SV
+3195535360,3195536639,SV
+3195536640,3195536895,FR
+3195536896,3195543551,SV
3195547648,3195551743,AR
3195551744,3195559935,EC
3195559936,3195568127,AR
@@ -105462,22 +52457,34 @@
3195699200,3195707391,AR
3195707392,3195711487,PA
3195711488,3195712511,SV
-3195715584,3195731967,AR
+3195712512,3195713535,AR
+3195713536,3195714559,GT
+3195714560,3195715583,PA
+3195715584,3195721727,AR
+3195721728,3195723775,VE
+3195723776,3195731967,AR
3195731968,3195736063,EC
3195736064,3195737087,BQ
3195737088,3195738111,CW
3195738112,3195740159,HN
-3195740160,3195741439,PA
-3195741440,3195741951,US
+3195740160,3195740415,US
+3195740416,3195740927,PA
+3195740928,3195741951,US
3195741952,3195744255,PA
3195744256,3195748351,EC
3195748352,3195752447,CL
-3195756544,3195763711,AR
+3195752448,3195763711,AR
3195763712,3195764735,BO
3195764736,3195768831,CR
+3195768832,3195772927,AR
3195772928,3195781119,VE
-3195781120,3195797503,PA
-3195797504,3195801599,AR
+3195781120,3195785215,PA
+3195785216,3195789311,HN
+3195789312,3195793407,PA
+3195793408,3195801599,AR
+3195801600,3195803647,HN
+3195803648,3195804671,CL
+3195804672,3195805695,VE
3195805696,3195807743,NI
3195807744,3195808639,BZ
3195808640,3195808767,CO
@@ -105489,6 +52496,7 @@
3195830272,3195838463,AR
3195838464,3195840511,HN
3195840512,3195842559,AR
+3195842560,3195846655,BR
3195846656,3195852799,AR
3195852800,3195853823,CW
3195853824,3195854847,GY
@@ -105503,7 +52511,9 @@
3196223488,3196305407,EC
3196305408,3196321791,CO
3196321792,3196583935,UY
-3196583936,3196846079,AR
+3196583936,3196690687,AR
+3196690688,3196690943,UY
+3196690944,3196846079,AR
3196846080,3196977151,PA
3196977152,3197042687,VE
3197042688,3197075455,CO
@@ -105528,10 +52538,17 @@
3198681088,3198877695,VE
3198877696,3198894079,CR
3198894080,3198902271,CO
+3198902272,3198910463,CR
3198910464,3198926847,CL
3198926848,3198943231,BO
3198943232,3199467519,AR
+3199467520,3199500287,BO
+3199500288,3199504383,BR
3199504384,3199505407,AR
+3199505408,3199506431,BR
+3199506432,3199508479,AR
+3199508480,3199516671,BR
+3199516672,3199533055,CL
3199533056,3199549439,BO
3199549440,3199565823,AR
3199565824,3199582207,NI
@@ -105558,6 +52575,8 @@
3200565248,3200569343,HT
3200569344,3200573439,CL
3200573440,3200577535,AR
+3200577536,3200579583,EC
+3200579584,3200581631,AR
3200581632,3200614399,BZ
3200614400,3200647167,AR
3200647168,3201302527,VE
@@ -105573,22 +52592,31 @@
3201534976,3201535999,CO
3201536000,3201540095,AR
3201540096,3201544191,CL
+3201544192,3201548287,DO
3201548288,3201556479,AR
3201556480,3201560575,BO
3201560576,3201561599,PY
3201561600,3201562623,AR
3201562624,3201563647,CL
-3201563648,3201564671,PA
+3201563648,3201564287,PA
+3201564288,3201564415,GB
+3201564416,3201564671,PA
3201564672,3201630207,NI
3201630208,3201695743,TT
3201695744,3201761279,EC
3201761280,3201826815,CL
-3201826816,3201859583,AR
+3201826816,3201851391,AR
+3201851392,3201855487,EC
+3201855488,3201859583,PE
3201859584,3201863679,CO
3201863680,3201865727,CL
-3201865728,3201867775,AR
+3201865728,3201867775,CO
3201867776,3201869823,PE
-3201869824,3201871871,AR
+3201869824,3201869855,AR
+3201869856,3201869871,PE
+3201869872,3201871743,AR
+3201871744,3201871807,PE
+3201871808,3201871871,AR
3201871872,3201875967,PE
3201875968,3201880063,CO
3201880064,3201884159,EC
@@ -105620,66 +52648,162 @@
3203538688,3203538943,CO
3203538944,3203539967,BZ
3203539968,3203543551,CO
-3203543552,3203544063,GT
-3203544064,3203547135,CO
+3203543552,3203544575,GT
+3203544576,3203545087,CO
+3203545088,3203545599,GT
+3203545600,3203547135,CO
3203547136,3203549183,PA
-3203549184,3203661823,CO
+3203549184,3203556863,CO
+3203556864,3203557119,DO
+3203557120,3203561471,CO
+3203561472,3203562495,SV
+3203562496,3203564031,CO
+3203564032,3203564287,PA
+3203564288,3203566591,CO
+3203566592,3203566847,PA
+3203566848,3203661823,CO
3203661824,3203923967,AR
3203923968,3204448255,CO
+3204448256,3208642559,BR
+3208642560,3209691135,CO
+3209691136,3210084351,AR
+3210084352,3210215423,BR
+3210215424,3210739711,CO
+3210739712,3210739967,CL
+3210739968,3210740223,MX
+3210740224,3210740479,AR
+3210740480,3210740735,US
+3210740736,3210742271,BR
+3210742272,3210743295,CL
+3210743296,3210743551,US
+3210743552,3210747647,CL
+3210747648,3210747903,US
+3210747904,3210748415,BR
+3210748416,3210751999,CL
+3210752000,3210752255,US
+3210752256,3210757119,CL
+3210757120,3210757375,US
+3210757376,3210763519,CL
+3210763520,3210763775,US
+3210763776,3210769919,CL
+3210769920,3210770175,US
+3210770176,3210772991,CL
+3210772992,3210773247,US
+3210773248,3210776319,CL
+3210776320,3210776575,US
+3210776576,3210776831,CL
+3210776832,3210777087,US
+3210777088,3210778367,CL
+3210778368,3210778623,US
+3210778624,3210803327,CL
+3210803328,3210803455,BR
+3210803456,3210805247,CL
+3210805248,3210809343,PA
+3210809344,3210810367,VE
+3210810368,3210811391,PA
+3210811392,3210817535,AR
+3210817536,3210821631,PE
+3210821632,3210822655,EC
+3210822656,3210825727,AR
+3210825728,3210827775,BZ
+3210827776,3210829823,DO
+3210829824,3210830847,AR
+3210830848,3210831871,PE
+3210831872,3210832895,DO
+3210832896,3210835967,AR
+3210835968,3210838015,PY
+3210838016,3210870783,AR
+3210870784,3210903551,CO
+3210903552,3210919935,PE
+3210919936,3210920959,GT
+3210920960,3210921983,PA
+3210921984,3210924031,CL
+3210924032,3210926079,DO
+3210926080,3210928127,AR
+3210928128,3210936319,NI
+3210936320,3211067391,EC
+3211067392,3211069439,US
+3211069440,3211073023,CL
+3211073024,3211073279,CA
+3211073280,3211129599,CL
+3211129600,3211129855,BR
+3211129856,3211132927,CL
+3211132928,3211137023,CO
+3211137024,3211141119,AR
+3211141120,3211142143,CL
+3211142144,3211143167,CR
+3211143168,3211145215,AR
+3211145216,3211147263,NI
+3211147264,3211148287,CR
+3211148288,3211165695,CO
+3211165696,3211182079,HN
+3211182080,3211194367,CO
+3211194368,3211195391,DO
+3211195392,3211214847,AR
+3211214848,3211223039,HN
+3211223040,3211227135,AR
+3211227136,3211231231,NI
+3211231232,3211788287,CO
+3211788288,3212312575,CL
+3212312576,3212574719,BR
+3212574720,3212836863,CL
+3212836864,3213885439,BR
+3213885440,3214934015,CO
+3214934016,3219796375,BR
+3219796376,3219796376,US
+3219796377,3221225471,BR
+3221225480,3221225727,GB
+3221225728,3221225983,US
+3221226240,3221226495,US
3221226496,3221227519,KY
-3221227520,3221229823,US
-3221229824,3221229855,CN
-3221229856,3221258239,US
+3221227520,3221242879,US
+3221242880,3221243391,GB
+3221243392,3221258239,US
3221258240,3221291007,CA
3221291008,3221334269,US
3221334270,3221334270,DZ
-3221334271,3221422079,US
-3221487616,3221560319,US
-3221560320,3221561343,GB
-3221561344,3221562367,US
+3221334271,3221560319,US
+3221560320,3221561087,GB
+3221561088,3221562367,US
3221562368,3221562623,SE
3221562624,3221565951,US
-3221565952,3221566207,SE
-3221566464,3221567743,US
-3221568256,3221568511,FR
+3221565952,3221566207,NL
+3221566208,3221568255,US
+3221568256,3221568511,NL
+3221568512,3221568767,US
3221568768,3221569279,FR
3221569280,3221576191,US
-3221576192,3221576447,KR
+3221576192,3221576447,AU
3221576448,3221577727,US
3221577728,3221577983,CA
-3221577984,3221578239,IT
+3221577984,3221578239,NL
3221578240,3221589503,US
-3221589504,3221589759,FR
+3221589504,3221589759,NL
3221589760,3221590015,US
3221590016,3221590271,CA
-3221590272,3221590527,DE
+3221590272,3221590527,NL
3221590528,3221594623,US
-3221594624,3221594879,AT
+3221594624,3221594879,NL
3221594880,3221605375,US
3221605376,3221605887,CA
3221605888,3221608447,US
-3221608448,3221608703,JP
+3221608448,3221608703,AU
3221608704,3221614335,US
3221614336,3221614591,GB
3221614592,3221614847,AU
-3221615104,3221616269,US
-3221616270,3221616270,AP
-3221616271,3221618175,US
-3221618176,3221618431,GB
+3221614848,3221618175,US
+3221618176,3221618431,NL
+3221618432,3221618687,US
3221618688,3221618943,GB
-3221618944,3221621247,US
-3221621248,3221621503,GB
-3221621504,3221633791,US
+3221618944,3221633791,US
3221633792,3221634047,FR
-3221634048,3221640191,US
-3221640192,3221640447,NL
-3221640448,3221647103,US
+3221634048,3221647103,US
3221647104,3221647359,FR
3221647360,3221656831,US
3221656832,3221657087,AU
-3221657088,3221664255,US
-3221664256,3221664511,EU
-3221664512,3221801983,US
+3221657088,3221795583,US
+3221795584,3221795839,IN
+3221795840,3221801983,US
3221801984,3221802239,IN
3221802240,3221803775,US
3221803776,3221804031,IN
@@ -105687,51 +52811,49 @@
3221806080,3221806335,IN
3221806336,3221806591,US
3221806592,3221806847,IN
-3221806848,3221843967,US
-3221843968,3221844223,EU
-3221844224,3221993727,US
-3221993728,3221993983,EU
-3221993984,3222003967,US
-3222003968,3222004223,AP
-3222004224,3222011903,US
-3222012160,3222012415,GB
-3222012672,3222023423,US
+3221806848,3222011903,US
+3222011904,3222012159,CA
+3222012160,3222012415,NL
+3222012416,3222023935,US
3222023936,3222024191,IT
3222024192,3222025727,US
3222025728,3222025983,NL
-3222026240,3222027775,US
+3222025984,3222027775,US
3222027776,3222028031,CA
3222028032,3222030335,US
-3222030336,3222030847,GB
+3222030336,3222030591,GB
+3222030592,3222030847,NL
3222030848,3222031359,US
3222031360,3222031615,AU
3222031616,3222031871,IT
3222031872,3222032639,US
-3222032640,3222032895,DE
+3222032640,3222032895,NL
3222032896,3222036479,US
3222036480,3222036735,FR
3222036736,3222036991,US
3222036992,3222037247,CA
-3222037248,3222037503,GB
-3222037504,3222044671,US
+3222037248,3222037503,NL
+3222037504,3222039807,US
+3222042368,3222044927,US
3222044928,3222045183,CA
-3222045184,3222055935,US
-3222056192,3222056447,US
+3222045184,3222049791,US
+3222050304,3222056447,US
3222056448,3222059007,CA
3222059008,3222061055,US
3222061056,3222061823,IT
3222061824,3222066943,US
3222066944,3222067199,CA
3222067200,3222067455,US
-3222067456,3222067967,CH
-3222068224,3222071039,US
-3222071040,3222071295,GB
-3222071296,3222071551,PT
+3222067456,3222067967,NL
+3222067968,3222071039,US
+3222071040,3222071551,NL
3222071552,3222072063,US
3222072064,3222072319,SE
3222072320,3222075135,US
-3222075136,3222075391,CH
-3222075392,3222305535,US
+3222075136,3222075391,NL
+3222075392,3222274559,US
+3222274560,3222274815,AU
+3222274816,3222305535,US
3222305536,3222309119,SE
3222309120,3222309375,DE
3222309376,3222313727,SE
@@ -105745,51 +52867,31 @@
3222326528,3222339583,CA
3222339584,3222405375,US
3222405376,3222405631,GB
-3222405632,3222406143,US
-3222406144,3222406399,EU
-3222406400,3222407167,US
-3222407168,3222407423,EU
-3222407424,3222409471,US
-3222409472,3222409727,AP
-3222409728,3222455039,US
-3222455040,3222455295,GB
-3222455296,3222466559,US
-3222466560,3222466815,EU
-3222466816,3222599167,US
-3222599168,3222599423,AP
-3222599424,3222600447,US
-3222600448,3222600703,AP
-3222600704,3222741759,US
-3222741760,3222742015,AP
-3222742016,3222775807,US
-3222775808,3222776063,AP
-3222776064,3222868735,US
-3222868736,3222868991,EU
-3222868992,3222869503,US
-3222869504,3222869759,GB
-3222869760,3222872319,US
+3222405632,3222455039,US
+3222455040,3222455295,NL
+3222455296,3222866431,US
+3222866944,3222867199,US
+3222867712,3222872319,US
3222872320,3222872575,CA
-3222872576,3222874623,US
-3222874624,3222874848,AP
+3222872576,3222874848,US
3222874849,3222874849,MY
-3222874850,3222874879,AP
-3222874880,3222876159,US
-3222876160,3222876415,AP
-3222876416,3222890751,US
+3222874850,3222890751,US
3222890752,3222891007,CA
3222891008,3222936575,US
3222936576,3222940927,CH
3222940928,3222941183,GB
3222941184,3222941695,CH
3222941696,3222952703,US
-3222952704,3222952959,JP
+3222952704,3222952959,AU
3222952960,3222953215,US
-3222953216,3222953727,JP
+3222953216,3222953727,AU
3222953728,3222953983,US
-3222953984,3222954239,JP
-3222954240,3222954495,US
-3222955008,3222956031,US
-3222956032,3222964223,FI
+3222953984,3222954239,AU
+3222954240,3222956287,US
+3222956288,3222957567,FI
+3222957824,3222962431,FI
+3222962432,3222963455,US
+3222963456,3222964223,FI
3222964224,3222968831,US
3222968832,3222973951,NL
3222973952,3222979071,DE
@@ -105797,84 +52899,104 @@
3222983168,3222983935,CA
3222983936,3222984447,US
3222984704,3222988543,AU
-3222988544,3222988799,PT
+3222988544,3222988799,NL
3222988800,3222989055,AU
3222989056,3222989311,US
-3222989312,3222989567,GB
+3222989312,3222989567,NL
3222989568,3222989823,CA
3222989824,3222990079,PT
-3222990080,3222990591,AT
+3222990080,3222990335,NL
+3222990336,3222990591,AT
3222990592,3222990847,PT
-3222990848,3223077119,US
-3223077120,3223077375,EU
-3223077376,3223201791,US
+3222990848,3223201279,US
3223201792,3223202815,PR
-3223202816,3223203071,US
-3223203840,3223214079,US
-3223214848,3223215103,US
+3223202816,3223204863,US
+3223205120,3223205375,US
+3223205888,3223207423,US
+3223207936,3223214079,US
+3223214592,3223215103,US
3223215104,3223215359,AU
-3223215360,3223215871,US
-3223216128,3223227391,US
+3223215360,3223216383,US
+3223216384,3223216639,CA
+3223217152,3223217663,US
+3223218176,3223219711,US
+3223220224,3223222271,US
+3223222784,3223223295,US
+3223223296,3223223551,AI
+3223223552,3223223807,US
+3223224320,3223227391,US
3223227904,3223228159,CA
-3223229184,3223229695,US
+3223228160,3223228415,US
+3223228928,3223229695,US
3223229696,3223229951,CA
3223230464,3223236607,US
3223236608,3223237631,GB
-3223237632,3223243007,US
+3223237632,3223239679,US
+3223240192,3223243263,US
3223243264,3223243519,CA
-3223244288,3223248895,US
+3223243520,3223243775,US
+3223244288,3223245311,US
+3223245824,3223248895,US
3223249408,3223249663,CA
-3223249920,3223250943,US
+3223249664,3223250943,US
3223250944,3223252991,CA
-3223252992,3223258623,US
+3223252992,3223254015,US
+3223254528,3223255551,US
+3223256064,3223258623,US
3223258624,3223258879,CA
3223258880,3223260671,US
3223260672,3223260927,DE
-3223261184,3223262975,US
+3223260928,3223262975,US
3223262976,3223263231,BE
3223263232,3223263743,US
-3223263744,3223263999,GB
-3223264000,3223264255,FR
-3223264256,3223265023,US
-3223265024,3223265279,GB
+3223263744,3223264255,NL
+3223264256,3223264511,US
+3223264512,3223264767,CA
+3223264768,3223265023,US
+3223265024,3223265279,NL
3223265280,3223266559,US
3223266560,3223266815,AU
3223266816,3223267327,US
3223267328,3223267583,BE
-3223267584,3223269631,US
+3223267584,3223269119,US
+3223269376,3223269887,US
3223270400,3223271423,CA
3223271424,3223272447,US
3223272960,3223273215,GB
3223273216,3223283199,US
-3223283200,3223283455,DE
-3223283712,3223286271,US
-3223286272,3223286527,IN
-3223286528,3223286783,US
-3223286784,3223289855,JP
-3223289856,3223299327,US
+3223283200,3223283455,NL
+3223283456,3223286783,US
+3223286784,3223289087,JP
+3223289088,3223289343,US
+3223289856,3223299583,US
3223299584,3223301119,NL
-3223301120,3223303167,US
+3223301120,3223302399,US
+3223302400,3223302655,CA
3223303168,3223303423,CA
3223303424,3223303679,US
-3223304192,3223307519,US
+3223304192,3223305215,US
+3223305728,3223307519,US
3223307520,3223310079,JP
3223310080,3223310335,US
-3223310592,3223311103,US
-3223311104,3223311359,FR
+3223310848,3223311103,US
+3223311104,3223311359,NL
3223311360,3223314431,US
-3223314432,3223314687,CA
3223314688,3223315455,US
+3223315456,3223315711,CA
3223315712,3223316223,US
3223316224,3223316479,NL
-3223316480,3223321599,US
+3223316480,3223319039,US
+3223319552,3223321343,US
+3223321344,3223321599,CA
3223321600,3223321855,FR
-3223321856,3223322367,US
-3223322624,3223390719,US
-3223390720,3223390975,ZA
-3223391232,3223391999,US
-3223392000,3223392255,FR
-3223392256,3223392511,GB
-3223393024,3223397375,US
+3223321856,3223388159,US
+3223388672,3223390719,US
+3223390720,3223390975,MU
+3223390976,3223391999,US
+3223392000,3223392511,NL
+3223392512,3223392767,US
+3223393024,3223393791,US
+3223394304,3223397375,US
3223397376,3223397631,NL
3223397632,3223410431,US
3223410432,3223416831,CH
@@ -105883,76 +53005,93 @@
3223417600,3223418367,US
3223418368,3223420927,CH
3223420928,3223421439,US
-3223421440,3223421695,GB
-3223421696,3223421951,NL
+3223421440,3223421951,NL
3223422464,3223422719,US
-3223422720,3223422975,JP
+3223422720,3223422975,AU
3223422976,3223424767,US
-3223424768,3223432191,FR
-3223432192,3223433215,A2
+3223424768,3223425535,NL
+3223425536,3223425791,US
+3223425792,3223430911,FR
+3223430912,3223431423,US
+3223431424,3223432191,FR
+3223432192,3223433215,US
3223433216,3223435007,FR
3223435008,3223437311,US
3223437312,3223447551,CH
3223447552,3223447807,US
3223447808,3223448063,NL
3223448064,3223449087,US
-3223449088,3223449599,EU
-3223449600,3223452671,US
-3223452928,3223453183,US
-3223453184,3223453439,DE
-3223453696,3223457791,US
-3223458560,3223458815,GB
-3223458816,3223461887,US
-3223462656,3223462911,US
+3223449088,3223449343,NL
+3223449344,3223453183,US
+3223453184,3223453439,NL
+3223453440,3223457791,US
+3223458304,3223458559,US
+3223458560,3223458815,NL
+3223458816,3223460351,US
+3223460864,3223461887,US
+3223462400,3223462911,US
3223462912,3223463935,CA
3223463936,3223465983,US
-3223466496,3223466751,GB
+3223466496,3223466751,NL
+3223466752,3223467007,US
3223467008,3223468031,CA
3223468032,3223471103,US
3223471616,3223471871,CA
-3223471872,3223472383,US
-3223473152,3223474175,CA
+3223471872,3223472639,US
+3223473152,3223473215,CA
+3223473216,3223473231,US
+3223473232,3223474175,CA
3223474176,3223476223,US
3223476736,3223476991,US
3223477248,3223478271,CA
3223478272,3223480319,US
+3223480832,3223481087,US
3223481088,3223481343,SE
3223481344,3223483391,US
3223483392,3223483647,NL
-3223484416,3223498751,US
+3223483648,3223483903,US
+3223484416,3223490559,US
+3223490816,3223491071,US
+3223491584,3223497215,US
+3223497728,3223498751,US
+3223499264,3223499519,US
3223499520,3223499775,FI
-3223499776,3223504895,CA
+3223499776,3223500031,US
+3223500032,3223503871,CA
+3223504384,3223504639,US
+3223504640,3223504895,CA
3223504896,3223508991,US
3223508992,3223513087,CA
-3223513088,3223519231,US
-3223519232,3223523583,DE
-3223523584,3223523615,EU
-3223523616,3223524351,DE
+3223513088,3223516415,US
+3223516672,3223519231,US
+3223519232,3223524351,DE
3223524352,3223528233,US
3223528234,3223528234,GB
3223528235,3223534335,US
3223534336,3223534591,AU
-3223534592,3223534847,US
-3223535104,3223535359,US
+3223534592,3223535359,US
3223535360,3223537919,DE
-3223537920,3223542271,US
-3223542272,3223542527,DE
+3223537920,3223540991,US
+3223541248,3223542271,US
+3223542272,3223542527,NL
3223542528,3223543295,US
-3223543296,3223543551,GB
-3223543552,3223546879,US
-3223546880,3223547135,GB
+3223543296,3223543551,NL
+3223543552,3223545855,US
+3223546112,3223546879,US
+3223546880,3223547135,NL
3223547136,3223552511,US
3223552512,3223553535,NL
3223553536,3223554559,US
3223554560,3223554815,GB
-3223555072,3223556095,US
+3223555328,3223556095,US
3223556096,3223556351,CA
3223556352,3223556607,US
-3223556608,3223556863,IT
+3223556608,3223556863,NL
3223556864,3223557375,US
3223557376,3223558655,DE
-3223558656,3223563263,US
-3223563264,3223563519,GB
+3223558656,3223559423,US
+3223559936,3223563263,US
+3223563264,3223563519,NL
3223563520,3223565567,US
3223565824,3223566079,US
3223566080,3223568639,NL
@@ -105966,8 +53105,7 @@
3223578112,3223580671,US
3223580672,3223581951,AT
3223581952,3223582207,US
-3223582208,3223582463,PT
-3223582464,3223582719,NL
+3223582208,3223582719,NL
3223582720,3223582975,AU
3223583488,3223584767,US
3223584768,3223585023,GB
@@ -105977,7 +53115,11 @@
3223586304,3223586559,GB
3223586560,3223589119,SE
3223589120,3223589375,US
-3223589376,3223601663,SE
+3223589376,3223594495,SE
+3223594496,3223595007,AT
+3223595008,3223599103,SE
+3223599104,3223599615,AT
+3223599616,3223601663,SE
3223601664,3223602175,GB
3223602176,3223606527,SE
3223606528,3223606783,GB
@@ -106022,11 +53164,12 @@
3223650048,3223650303,GB
3223650304,3223715839,CH
3223715840,3223781375,DK
-3223781376,3223823871,US
-3223823872,3223824127,AT
-3223824128,3223855103,US
+3223781376,3223847935,US
+3223848704,3223855103,US
3223855104,3223857151,CA
-3223857152,3223863295,US
+3223857152,3223859455,US
+3223859968,3223862271,US
+3223862528,3223862783,US
3223863552,3223863807,US
3223864576,3223864831,AE
3223864832,3223865343,HR
@@ -106035,9 +53178,14 @@
3223868416,3223869439,BM
3223869440,3223871487,US
3223871488,3223873535,CA
-3223873536,3223881727,US
+3223873536,3223874559,US
+3223874816,3223875071,US
+3223875584,3223876863,US
+3223877632,3223881727,US
3223881728,3223882751,CA
-3223883520,3223902207,US
+3223883520,3223898111,US
+3223898368,3223898623,US
+3223899136,3223902207,US
3223902464,3223902719,CA
3223903232,3223905279,US
3223905280,3223905535,FI
@@ -106055,7 +53203,7 @@
3223950336,3223950591,CA
3223950592,3223953663,CH
3223953664,3223955967,US
-3223955968,3223956223,TH
+3223955968,3223956223,AU
3223956224,3223957759,US
3223958016,3223963135,JP
3223963136,3223963647,US
@@ -106063,67 +53211,76 @@
3223964160,3223964415,US
3223964416,3223964671,AU
3223964672,3223965183,US
-3223965184,3223965439,ID
+3223965184,3223965439,AU
3223965440,3223966207,US
-3223966208,3223966463,GB
+3223966208,3223966463,NL
3223966464,3223967743,US
-3223967744,3223967999,FR
+3223967744,3223967999,NL
3223968000,3223968255,US
-3223968256,3223968511,IT
+3223968256,3223968511,NL
3223968512,3223970303,US
3223970560,3223970815,DE
-3223970816,3223977983,US
-3223978240,3223978495,DE
+3223971072,3223977983,US
+3223978240,3223978495,NL
3223978752,3223979263,US
3223979264,3223979775,CA
3223979776,3223988735,US
3223988736,3223990271,CH
3223990272,3223991295,US
-3223991552,3223991807,GB
+3223991296,3223991551,AU
+3223991552,3223991807,NL
3223991808,3223992063,CA
3223992064,3223993343,US
3223993344,3223994111,AU
3223994112,3223994623,DE
-3223994624,3223994879,NO
3223994880,3223995391,US
3223995392,3223995647,CA
3223995648,3223996159,US
3223996416,3223999487,US
-3224000256,3224000511,GB
+3224000256,3224000511,NL
3224000512,3224001023,US
3224001024,3224001279,CA
3224001280,3224002559,US
3224002816,3224003327,US
3224003328,3224003583,ZA
-3224003584,3224003839,GB
+3224003584,3224003839,NL
3224003840,3224004095,US
-3224004096,3224004351,FR
+3224004096,3224004351,NL
3224004352,3224005631,JP
3224005632,3224006655,US
-3224006656,3224012031,NL
+3224006912,3224012031,NL
3224012032,3224014591,US
-3224014592,3224014847,DE
-3224014848,3224016639,US
+3224014592,3224014847,NL
+3224014848,3224015615,US
+3224015872,3224016639,US
3224016640,3224016895,AU
-3224016896,3224023039,US
-3224023808,3224024063,US
+3224016896,3224017663,US
+3224017920,3224024063,US
3224024064,3224029695,CH
3224029696,3224030463,CA
3224030720,3224030975,CA
3224030976,3224038655,US
-3224038656,3224038911,JP
-3224038912,3224042751,US
+3224038656,3224038911,AU
+3224038912,3224039679,US
+3224039936,3224040959,US
+3224041216,3224042751,US
3224042752,3224043007,DE
3224043008,3224043263,US
3224043520,3224084991,US
3224084992,3224087551,SE
-3224087552,3224090879,US
+3224087552,3224088063,US
+3224088064,3224088319,AU
+3224088320,3224090879,US
3224090880,3224091135,AU
-3224091648,3224092671,US
+3224091648,3224091903,US
+3224091904,3224092159,AU
+3224092416,3224092671,US
3224092672,3224093951,CH
3224093952,3224094207,US
3224094208,3224094463,AU
-3224094464,3224096255,US
+3224094464,3224094975,US
+3224094976,3224095487,AU
+3224095488,3224096255,US
3224096512,3224097279,AU
3224097280,3224097535,NL
3224097536,3224097791,US
@@ -106134,19 +53291,20 @@
3224099840,3224100863,US
3224101120,3224101375,US
3224101376,3224102399,AU
-3224103424,3224103679,GB
+3224103424,3224103679,NL
3224103680,3224104447,US
3224104704,3224104959,AU
-3224104960,3224109055,US
-3224109056,3224119551,DE
+3224104960,3224105471,US
+3224105728,3224106495,US
+3224106752,3224108799,US
+3224109056,3224109311,NL
+3224109312,3224119551,DE
3224119552,3224129791,FR
3224129792,3224132351,DE
3224132352,3224170495,US
3224170496,3224173567,SE
-3224173568,3224258047,US
-3224258048,3224258303,FI
-3224258304,3224258559,BE
-3224258560,3224288255,US
+3224173568,3224174335,US
+3224174592,3224288255,US
3224288256,3224289023,DE
3224289024,3224302335,US
3224302336,3224302591,CA
@@ -106156,11 +53314,10 @@
3224368128,3224369663,CH
3224369664,3224373247,US
3224373248,3224373503,AU
-3224373504,3224373759,US
-3224373760,3224374015,AU
-3224374016,3224379135,US
-3224379136,3224379391,DE
-3224379392,3224398079,US
+3224373504,3224379135,US
+3224379136,3224379391,NL
+3224379392,3224392191,US
+3224392704,3224398079,US
3224398336,3224398591,US
3224398592,3224398847,DE
3224398848,3224399103,US
@@ -106168,17 +53325,22 @@
3224399616,3224407039,US
3224407296,3224407551,CA
3224407808,3224408319,US
-3224408320,3224408575,DE
-3224408576,3224428543,US
-3224428544,3224428799,DE
+3224408320,3224408575,NL
+3224408576,3224424959,US
+3224425216,3224427007,US
+3224427520,3224428543,US
+3224428544,3224428799,NL
3224428800,3224430079,US
-3224430336,3224430591,DE
+3224430336,3224430591,NL
3224430592,3224430847,US
3224431104,3224431359,CA
3224431360,3224431615,US
3224432128,3224432383,US
-3224432640,3224435967,US
-3224435968,3224436223,ZA
+3224433152,3224433407,US
+3224433664,3224434687,US
+3224434688,3224434943,AU
+3224434944,3224435967,US
+3224435968,3224436223,MU
3224436224,3224436479,US
3224436736,3224502271,FI
3224502272,3224567807,JP
@@ -106189,7 +53351,8 @@
3224651776,3224652287,AU
3224652800,3224660991,US
3224660992,3224661247,CA
-3224661504,3224664063,US
+3224661504,3224662527,US
+3224663040,3224663551,US
3224672000,3224672255,US
3224672256,3224672511,NL
3224672512,3224673791,US
@@ -106198,30 +53361,37 @@
3224675072,3224675839,US
3224676864,3224677119,US
3224677120,3224678655,AU
-3224678656,3224689919,US
+3224678656,3224680703,US
+3224680704,3224680959,AU
+3224680960,3224683519,US
+3224683520,3224684031,AU
+3224684032,3224689919,US
3224689920,3224690687,NL
-3224690688,3224692735,US
-3224692736,3224692991,DZ
+3224690688,3224691455,US
+3224691712,3224692735,US
+3224692736,3224692991,NL
3224692992,3224694527,US
3224694528,3224694783,CA
-3224694784,3224697343,US
+3224694784,3224695039,US
+3224695808,3224697343,US
3224697856,3224698111,US
-3224698112,3224698367,GB
-3224698368,3224698623,FR
+3224698112,3224698623,NL
3224698880,3224699135,US
3224699136,3224699647,BE
3224699648,3224725247,US
3224725248,3224725503,DE
-3224725504,3224725759,CH
+3224725504,3224725759,NL
3224725760,3224739071,US
3224739072,3224739327,FI
3224739328,3224772351,US
-3224772352,3224785151,DE
-3224785152,3224791039,US
-3224791040,3224791295,DE
+3224772352,3224778751,DE
+3224779776,3224785151,DE
+3224785152,3224787967,US
+3224788480,3224791039,US
+3224791040,3224791295,NL
3224791296,3224791807,AU
3224791808,3224793343,US
-3224793344,3224793599,DE
+3224793344,3224793599,NL
3224793600,3224793855,US
3224793856,3224795391,DK
3224795392,3224795647,CA
@@ -106229,46 +53399,44 @@
3224796160,3224796415,US
3224796416,3224797439,DE
3224797440,3224797695,US
-3224797696,3224797951,NZ
+3224797696,3224797951,AU
3224797952,3224798207,US
-3224798208,3224798463,CH
+3224798208,3224798463,NL
3224798464,3224798975,US
3224798976,3224799231,AU
+3224799488,3224799743,AU
3224799744,3224799999,US
-3224800000,3224800255,DE
-3224800256,3224816639,FR
+3224800000,3224800255,NL
+3224800512,3224816639,FR
3224816640,3224816895,IL
3224816896,3224820735,FR
3224820736,3224820991,PL
3224820992,3224821247,DE
3224821248,3224822015,US
-3224822016,3224822271,SE
+3224822016,3224822271,NL
3224822272,3224822527,US
-3224822784,3224826367,US
-3224826368,3224826531,CA
-3224826532,3224826535,CA
-3224826536,3224826623,CA
+3224822784,3224823039,US
+3224823296,3224826367,US
+3224826368,3224826623,CA
3224826624,3224826879,US
-3224827136,3224827391,GB
+3224826880,3224827391,NL
3224827392,3224827647,US
+3224827648,3224827903,AU
3224827904,3224828671,US
3224828672,3224828927,AU
3224829184,3224829439,US
-3224829440,3224829695,DE
-3224829952,3224833535,US
-3224833536,3224833791,SG
-3224833792,3224834047,US
+3224829440,3224829695,NL
+3224829952,3224834047,US
3224834048,3224834303,SG
3224834304,3224834559,US
3224834560,3224834815,TH
-3224834816,3224839423,US
-3224839424,3224839679,EU
-3224839680,3224850175,US
+3224834816,3224850175,US
3224850176,3224850431,IN
-3224850432,3224851455,US
-3224851456,3224851711,DE
+3224850432,3224850943,US
+3224851200,3224851455,US
+3224851456,3224851711,NL
3224851968,3224852735,US
-3224852736,3224852991,DE
+3224852736,3224852991,NL
3224852992,3224854527,US
3224854784,3224855039,US
3224855040,3224855551,AU
@@ -106278,55 +53446,54 @@
3224856832,3224857087,NL
3224857088,3224857855,US
3224857856,3224858111,PL
+3224858112,3224858367,AU
3224858368,3224858623,US
3224858624,3224858879,AU
3224858880,3224859391,US
3224859392,3224859647,NL
3224859648,3224860159,US
-3224860160,3224860415,JP
-3224860672,3224862719,US
+3224860160,3224860415,AU
+3224860928,3224862719,US
3224862976,3224863231,NL
3224863488,3224863743,US
-3224863744,3224863999,GB
-3224864000,3224870143,US
-3224870144,3224870399,EU
-3224870400,3224870655,US
+3224863744,3224863999,NL
+3224864000,3224870655,US
3224870656,3224870911,IT
3224870912,3224878079,US
-3224878080,3224878335,DE
+3224878080,3224878335,NL
3224878336,3224878591,US
3224878592,3224878847,AU
-3224879360,3224879615,GB
+3224879360,3224879615,NL
3224879616,3224879871,CA
3224879872,3224880383,US
-3224880384,3224880639,DE
+3224880384,3224880639,NL
3224880640,3224880895,AU
3224880896,3224882431,US
3224882688,3224882943,CA
-3224882944,3224884223,US
-3224884224,3224884479,GB
+3224882944,3224883455,US
+3224883456,3224883711,AU
+3224883712,3224884223,US
+3224884224,3224884479,NL
3224884480,3224884991,US
3224885248,3224885503,CA
3224885760,3224886015,US
-3224886016,3224886271,AU
-3224886272,3224886527,JP
+3224886016,3224886527,AU
3224886528,3224887295,US
3224887296,3224887551,CA
-3224887808,3224889343,US
+3224887808,3224889087,US
3224889344,3224889599,AU
-3224889600,3224891647,US
+3224889600,3224890879,US
+3224890880,3224891135,AU
+3224891136,3224891647,US
3224892160,3224892415,CA
-3224892416,3224892671,DE
+3224892416,3224892671,NL
3224892928,3224893183,US
-3224893440,3224899071,US
+3224893440,3224893951,US
+3224894464,3224899071,US
3224899072,3224899327,AT
3224899328,3224908543,US
3224908544,3224908799,CA
-3224908800,3224921087,US
-3224921088,3224921343,FI
-3224921344,3224928255,US
-3224928256,3224928511,FI
-3224928512,3224933887,US
+3224908800,3224933887,US
3224933888,3224934143,DE
3224934144,3224957951,US
3224957952,3224958207,CA
@@ -106339,48 +53506,51 @@
3225034752,3225035775,BG
3225035776,3225037055,US
3225037056,3225049599,FI
-3225050112,3225057535,US
+3225050112,3225051135,US
+3225052672,3225056767,US
+3225057024,3225057535,US
3225057536,3225057791,CA
3225057792,3225060351,US
3225060352,3225061631,AU
3225062400,3225063423,VC
-3225063424,3225075967,US
+3225063424,3225064447,US
+3225064704,3225075967,US
3225076224,3225076479,CA
3225076480,3225076991,US
3225076992,3225077247,SE
3225077504,3225081087,US
3225081088,3225081343,CA
3225081600,3225082367,US
-3225082368,3225082623,IT
+3225082368,3225082623,NL
3225082880,3225084671,US
3225084672,3225085183,NL
3225085184,3225085439,ES
3225085440,3225089279,US
3225089280,3225089535,CA
-3225089536,3225090047,US
-3225090048,3225090303,AP
-3225090304,3225091071,US
+3225089536,3225091071,US
3225091584,3225091839,US
3225092096,3225314303,US
3225314304,3225314559,GB
3225314560,3225419775,US
3225420032,3225420287,US
-3225420800,3225422079,CA
-3225422080,3225422095,AE
-3225422096,3225423871,CA
-3225423872,3225426943,US
-3225426944,3225427199,AT
+3225420800,3225423871,CA
+3225423872,3225424383,US
+3225424896,3225426943,US
+3225426944,3225427199,NL
3225427968,3225428991,US
3225429504,3225429759,CA
3225430016,3225431039,CA
-3225431040,3225431551,RU
+3225431040,3225431551,NL
3225431552,3225434111,US
3225434112,3225436159,CA
-3225436160,3225444607,US
+3225436160,3225437695,US
+3225438208,3225442559,US
+3225443328,3225444607,US
3225445376,3225446399,BE
3225446400,3225450495,US
-3225450496,3225451519,AG
-3225451776,3225452031,SE
+3225450496,3225451263,AG
+3225451264,3225451519,MS
+3225451776,3225452031,NL
3225452544,3225456639,CA
3225456640,3225459711,US
3225459968,3225460479,US
@@ -106388,21 +53558,21 @@
3225462784,3225468927,US
3225468928,3225469951,CA
3225470464,3225470719,US
-3225471488,3225471743,DE
+3225471488,3225471743,NL
3225471744,3225472511,US
3225473024,3225498111,US
3225498368,3225503487,NL
-3225503488,3225506047,US
+3225503488,3225505535,US
+3225505792,3225506047,US
3225506304,3225508863,AU
3225508864,3225509631,CH
3225509632,3225509887,US
3225509888,3225510143,NL
3225510144,3225518591,US
3225518592,3225518847,AU
-3225518848,3225519103,IT
-3225519104,3225519359,GB
+3225518848,3225519359,NL
3225519872,3225520639,US
-3225520896,3225521151,DE
+3225520896,3225521151,NL
3225521152,3225522175,US
3225522176,3225522943,GB
3225522944,3225524223,US
@@ -106410,7 +53580,8 @@
3225524480,3225524735,GB
3225525248,3225526271,US
3225526272,3225528319,BB
-3225528320,3225530367,US
+3225529088,3225529343,US
+3225529600,3225530367,US
3225530368,3225530623,PR
3225530624,3225530879,US
3225531136,3225531647,US
@@ -106421,10 +53592,14 @@
3225541120,3225541375,US
3225541376,3225544703,GB
3225544704,3225546751,CA
-3225546752,3225550847,US
+3225546752,3225548543,US
+3225548800,3225549055,AU
+3225549056,3225549311,US
+3225549312,3225549567,AU
+3225549568,3225550591,US
3225550848,3225616383,DK
-3225617152,3225617407,IE
-3225617408,3225617663,GB
+3225616640,3225616895,AU
+3225617152,3225617663,NL
3225617920,3225618175,US
3225618432,3225618687,US
3225618688,3225618943,CA
@@ -106434,55 +53609,62 @@
3225624576,3225625599,CA
3225626368,3225626623,GB
3225626880,3225627391,US
-3225627392,3225627647,GB
+3225627392,3225627647,NL
3225627648,3225627903,US
3225627904,3225628159,CA
3225628160,3225628415,US
-3225628416,3225628671,GB
+3225628416,3225628671,NL
3225628672,3225629183,US
-3225629184,3225629439,GB
+3225629184,3225629439,NL
3225629440,3225629695,US
-3225629696,3225629951,GB
+3225629696,3225629951,NL
3225629952,3225630207,US
-3225630464,3225630719,DE
+3225630464,3225630719,NL
3225630720,3225631231,US
-3225631232,3225631487,SE
-3225631488,3225635839,US
-3225635840,3225636095,PT
+3225631232,3225631487,NL
+3225631488,3225632767,US
+3225633536,3225633791,US
+3225634048,3225634815,US
+3225635072,3225635583,US
+3225635840,3225636095,NL
3225636096,3225636607,US
-3225636608,3225636863,ES
+3225636608,3225636863,NL
3225636864,3225637887,US
-3225637888,3225638143,AU
+3225637888,3225638399,AU
3225638400,3225638655,US
3225638656,3225638911,GB
3225639424,3225640447,US
-3225640448,3225640703,GB
+3225640448,3225640703,NL
3225640704,3225641983,US
3225641984,3225643263,GB
3225643264,3225643775,CA
-3225643776,3225650943,US
+3225643776,3225649919,US
+3225650176,3225650943,US
3225650944,3225651199,GB
3225651200,3225658367,US
-3225658624,3225659135,US
+3225658624,3225658879,US
3225659136,3225659391,DE
+3225659392,3225659647,AU
3225659904,3225660159,DE
3225660160,3225660415,AU
3225660416,3225664511,US
3225664512,3225669887,DE
3225669888,3225671935,US
-3225672192,3225672447,DE
+3225671936,3225672191,AU
+3225672192,3225672447,NL
3225672448,3225672703,US
3225672704,3225673215,NL
3225673472,3225673727,IE
3225673728,3225679871,US
3225679872,3225680127,AU
3225680128,3225680383,GR
-3225680640,3225681919,US
+3225680640,3225681151,US
+3225681408,3225681663,US
3225681920,3225682943,DE
3225682944,3225683199,AT
3225683200,3225687039,DE
3225687040,3225687807,US
-3225687808,3225688063,GB
+3225687808,3225688063,NL
3225688064,3225689343,US
3225689600,3225689855,US
3225689856,3225694975,NL
@@ -106492,30 +53674,36 @@
3225701120,3225701375,US
3225701376,3225709567,NO
3225709568,3225710079,US
-3225710592,3225714687,US
+3225710080,3225710591,AU
+3225710592,3225711615,US
+3225712128,3225715455,US
3225715456,3225715711,CA
3225715712,3225715967,AU
3225715968,3225716991,US
3225716992,3225717247,CA
-3225717248,3225717503,TN
+3225717248,3225717503,MU
+3225717504,3225717759,AU
3225717760,3225720063,US
3225720576,3225721343,GB
-3225721344,3225723903,US
+3225721344,3225722111,US
+3225722624,3225723903,US
3225723904,3225725439,DE
3225725440,3225725695,GB
3225725696,3225726207,AU
3225726208,3225726463,US
-3225726464,3225726719,GB
+3225726464,3225726719,NL
3225726720,3225726975,US
-3225726976,3225727231,IT
+3225726976,3225727231,NL
3225727232,3225727487,US
+3225727744,3225727999,AU
3225728000,3225728511,US
3225728512,3225728767,NL
3225728768,3225729023,US
3225729024,3225729279,CA
3225729280,3225729535,US
-3225729536,3225729791,PT
-3225729792,3225735167,US
+3225729536,3225729791,NL
+3225729792,3225733887,US
+3225734144,3225735167,US
3225735424,3225735679,PT
3225735680,3225735935,US
3225735936,3225737215,DE
@@ -106531,8 +53719,11 @@
3225742080,3225745919,JP
3225745920,3225746687,NL
3225746688,3225746943,US
-3225746944,3225747199,DE
-3225747456,3225757695,US
+3225746944,3225747199,NL
+3225747456,3225747711,US
+3225748480,3225752575,US
+3225752832,3225753087,US
+3225753600,3225757695,US
3225757696,3225758719,CA
3225759232,3225759487,US
3225759744,3225763839,US
@@ -106548,19 +53739,21 @@
3225781248,3225782271,CA
3225782272,3225785343,US
3225785344,3225788415,CA
-3225788416,3225806847,US
+3225788416,3225795583,US
+3225796096,3225796351,US
+3225796608,3225806847,US
3225807360,3225807615,DE
-3225807872,3225812991,US
-3225812992,3225827071,FR
-3225827072,3225827327,US
-3225827328,3225843711,FR
+3225807872,3225809919,US
+3225810688,3225812991,US
+3225812992,3225843711,FR
3225843712,3225847039,US
-3225847040,3225847551,TR
+3225847040,3225847551,NL
3225847552,3225847807,AU
-3225847808,3225848063,IT
+3225847808,3225848063,NL
3225848064,3225848831,US
3225848832,3225853951,DE
-3225853952,3225857023,US
+3225853952,3225854719,US
+3225854976,3225857023,US
3225857024,3225857279,CA
3225857280,3225857535,US
3225857536,3225857791,AU
@@ -106568,7 +53761,8 @@
3225858048,3225858559,CA
3225858560,3225858815,US
3225858816,3225859583,JP
-3225860096,3225868287,US
+3225860096,3225861887,US
+3225862144,3225868287,US
3225868288,3225868543,AU
3225868544,3225869055,US
3225869056,3225869311,AU
@@ -106579,28 +53773,22 @@
3225873920,3225874943,US
3225874944,3225875199,GB
3225875456,3225875967,US
-3225876480,3225878527,US
-3225878528,3225880319,SE
-3225880320,3225880575,US
-3225880576,3225881343,SE
+3225876480,3225878271,US
+3225878528,3225881343,SE
3225881344,3225881599,IT
-3225881600,3225886719,SE
-3225886720,3225886975,NO
-3225886976,3225887231,SE
-3225887232,3225887487,DK
-3225887488,3225887999,SE
+3225881600,3225885183,SE
+3225885184,3225885695,AT
+3225885696,3225887999,SE
3225888000,3225888255,GB
-3225888256,3225892351,SE
-3225892352,3225892863,FR
-3225892864,3225894399,SE
-3225894400,3225895423,GB
-3225895424,3225905407,SE
+3225888256,3225905407,SE
3225905408,3225905663,IT
3225905664,3225913855,SE
3225913856,3225914111,DE
3225914112,3225915135,SE
3225915136,3225915391,DK
-3225915392,3225918463,SE
+3225915392,3225917183,SE
+3225917184,3225917439,NL
+3225917440,3225918463,SE
3225918464,3225918719,GB
3225918720,3225920767,SE
3225920768,3225921023,GB
@@ -106613,11 +53801,11 @@
3225924096,3225930239,SE
3225930240,3225930495,FR
3225930496,3225932543,SE
-3225932544,3225932799,AT
+3225932544,3225932799,IM
3225932800,3225933055,IT
-3225933056,3225933311,AT
+3225933056,3225933311,ES
3225933312,3225934335,SE
-3225934336,3225934591,AT
+3225934336,3225934591,IS
3225934592,3225935359,SE
3225935360,3225935615,US
3225935616,3225936639,SE
@@ -106630,113 +53818,56 @@
3225938688,3225940991,SE
3225940992,3225941247,IL
3225941248,3225941503,IT
-3225941504,3225942038,SE
-3225942039,3225942039,EU
-3225942040,3225942271,SE
+3225941504,3225942271,SE
3225942272,3225942527,HU
3225942528,3225944063,SE
3225944064,3226008831,TW
3226008832,3226009343,US
-3226009600,3226010879,US
+3226009856,3226010879,US
3226010880,3226011135,CA
3226011136,3226012671,US
3226012672,3226012927,AU
3226012928,3226014207,US
-3226014464,3226014975,GB
-3226014976,3226015231,NZ
-3226015232,3226015487,AU
-3226015744,3226016255,ID
+3226014464,3226014975,NL
+3226014976,3226015487,AU
+3226015744,3226016255,AU
3226016256,3226018303,US
3226018304,3226018559,DE
3226018560,3226021119,CH
-3226021120,3226026495,US
+3226021376,3226023423,US
+3226023680,3226026495,US
3226026496,3226026751,AU
-3226026752,3226067455,US
+3226026752,3226064383,US
+3226064640,3226067455,US
3226067456,3226067711,BE
3226067712,3226068223,US
-3226068224,3226068479,GB
-3226068480,3226109951,US
+3226068224,3226068479,NL
+3226068480,3226074879,US
+3226074880,3226075135,AT
+3226075136,3226109951,US
3226110208,3226110719,US
3226110720,3226128639,AU
-3226128640,3226132527,US
-3226132528,3226132543,CN
-3226132544,3226132575,US
-3226132576,3226132607,CN
-3226132608,3226132623,US
-3226132624,3226132711,CN
-3226132712,3226132735,US
-3226132736,3226133183,CN
-3226133184,3226133247,US
-3226133248,3226133743,CN
-3226133744,3226133751,US
-3226133752,3226134279,CN
-3226134280,3226134287,US
-3226134288,3226134415,CN
-3226134416,3226134527,US
-3226134528,3226134719,CN
-3226134720,3226134783,US
-3226134784,3226135231,CN
-3226135232,3226135239,CA
-3226135240,3226135263,CN
-3226135264,3226135271,US
-3226135272,3226135279,CN
-3226135280,3226135295,US
-3226135296,3226135367,CN
-3226135368,3226135375,US
-3226135376,3226135615,CN
-3226135616,3226135631,US
-3226135632,3226135871,CN
-3226135872,3226135935,US
-3226135936,3226136207,CN
-3226136208,3226136215,US
-3226136216,3226136263,CN
-3226136264,3226136271,US
-3226136272,3226136287,CN
-3226136288,3226136295,US
-3226136296,3226136479,CN
-3226136480,3226136487,US
-3226136488,3226136575,CN
-3226136576,3226136607,US
-3226136608,3226136807,CN
-3226136808,3226136815,US
-3226136816,3226136991,CN
-3226136992,3226136999,US
-3226137000,3226137215,CN
-3226137216,3226137223,US
-3226137224,3226137279,CN
-3226137280,3226137343,US
-3226137344,3226137695,CN
-3226137696,3226137703,US
-3226137704,3226137711,CN
-3226137712,3226137855,US
-3226137856,3226137951,CN
-3226137952,3226138111,US
-3226138112,3226138175,CN
-3226138176,3226138183,US
-3226138184,3226138367,CN
-3226138368,3226138623,US
-3226138624,3226138911,CN
-3226138912,3226139007,US
-3226139008,3226139167,CN
-3226139168,3226139183,US
-3226139184,3226139271,CN
-3226139272,3226139327,US
-3226139328,3226139391,CN
-3226139392,3226139647,US
-3226139648,3226139671,CN
-3226139672,3226139711,US
-3226139712,3226139839,CN
-3226139840,3226139903,US
-3226139904,3226140287,CN
-3226140288,3226140415,US
-3226140416,3226140671,CN
-3226140672,3226157567,CA
+3226128640,3226140671,US
+3226140928,3226141695,CA
+3226141696,3226141951,US
+3226141952,3226143487,CA
+3226143744,3226156543,CA
+3226156800,3226157567,CA
3226157568,3226157823,US
-3226157824,3226177535,CA
+3226157824,3226167807,CA
+3226168064,3226175487,CA
+3226175744,3226175999,US
+3226176000,3226177535,CA
3226177536,3226178559,US
-3226178560,3226189823,CA
-3226189824,3226191871,US
-3226191872,3226201087,CA
+3226178560,3226188543,CA
+3226189056,3226189311,CA
+3226189568,3226189823,CA
+3226189824,3226190847,US
+3226191360,3226191615,US
+3226191872,3226194175,CA
+3226194432,3226194687,CA
+3226194944,3226201087,CA
+3226201088,3226201343,US
3226201344,3226201855,CA
3226201856,3226202111,US
3226202112,3226205439,CA
@@ -106744,7 +53875,7 @@
3226205696,3226205951,CA
3226206208,3226207231,US
3226207744,3226215423,GB
-3226215424,3226236927,US
+3226215424,3226236159,US
3226237184,3226237439,US
3226237440,3226237695,AU
3226237696,3226241535,DE
@@ -106752,28 +53883,35 @@
3226241792,3226250495,DE
3226250496,3226251263,US
3226251264,3226251519,DE
-3226251520,3226267903,US
+3226251520,3226252287,US
+3226252544,3226267903,US
3226267904,3226268159,DE
3226268160,3226268415,PT
3226268416,3226268927,AT
3226268928,3226269951,DE
3226269952,3226270719,US
3226271744,3226273791,US
+3226273792,3226274047,AU
3226274048,3226274559,US
-3226274560,3226274815,CH
-3226274816,3226283519,US
+3226274560,3226274815,NL
+3226274816,3226276095,US
+3226276096,3226276351,AU
+3226276352,3226276863,US
+3226277632,3226283519,US
3226283520,3226291199,CA
-3226291200,3226300927,US
+3226291200,3226300159,US
+3226300416,3226300927,US
3226300928,3226301439,DE
3226301440,3226302463,US
3226302464,3226303487,FI
3226303488,3226305535,US
3226305536,3226307327,GB
3226307328,3226307583,US
-3226307584,3226308095,ES
-3226308096,3226365439,US
-3226365440,3226365951,DE
-3226365952,3226366975,US
+3226307584,3226308095,NL
+3226308096,3226317823,US
+3226318080,3226318335,US
+3226319360,3226319615,US
+3226319872,3226366975,US
3226366976,3226367231,CA
3226367232,3226374143,US
3226374144,3226375423,DE
@@ -106785,57 +53923,77 @@
3226393600,3226393855,DE
3226393856,3226397695,US
3226397696,3226400255,DE
-3226400256,3226473471,US
-3226473472,3226473983,PT
+3226400256,3226470399,US
+3226470656,3226473471,US
+3226473472,3226473727,NL
+3226473728,3226473983,PT
3226473984,3226474495,US
3226474496,3226474751,CL
3226475264,3226475519,US
3226475776,3226476287,US
3226476288,3226479359,CH
3226479360,3226479871,US
-3226480128,3226480383,GB
+3226480128,3226480383,NL
3226480384,3226481407,US
-3226481408,3226481663,DE
-3226481664,3226521855,US
+3226481408,3226481663,NL
+3226481664,3226483199,US
+3226483968,3226484479,US
+3226484736,3226488831,US
+3226489088,3226520575,US
+3226521344,3226521855,US
3226521856,3226522111,BR
-3226522112,3226536191,US
+3226522112,3226523135,US
+3226523392,3226536191,US
3226536960,3226542079,CA
3226542080,3226546431,US
3226547200,3226548223,CA
3226548992,3226549247,BE
-3226549248,3226550271,GB
-3226550272,3226555391,US
+3226549248,3226550271,NL
+3226551040,3226551807,US
+3226552832,3226553087,US
+3226553344,3226555391,US
3226555648,3226555903,CA
-3226556416,3226561535,US
-3226561792,3226562047,NO
-3226562560,3226564607,US
-3226564864,3226565119,DE
+3226556416,3226556671,US
+3226557440,3226558463,US
+3226558720,3226558975,US
+3226559488,3226561535,US
+3226561792,3226562047,NL
+3226563072,3226563327,US
+3226563584,3226564607,US
+3226564864,3226565119,NL
3226565376,3226565631,FI
-3226565632,3226574847,US
+3226565632,3226569727,US
+3226569984,3226570239,US
+3226570752,3226574847,US
3226574848,3226575103,FI
3226576384,3226576639,US
3226576896,3226578943,CA
3226578944,3226579967,US
3226580480,3226581247,FI
-3226582528,3226582783,US
-3226583040,3226583295,US
-3226583552,3226583807,SE
-3226584064,3226591231,US
+3226581248,3226583295,US
+3226583552,3226583807,NL
+3226584064,3226584415,US
+3226584416,3226584447,AU
+3226584448,3226591231,US
3226591232,3226592255,CA
-3226592768,3226593023,DE
-3226593792,3226594047,GB
-3226594304,3226626047,US
+3226592768,3226593023,NL
+3226593792,3226594047,NL
+3226594304,3226598911,US
+3226599424,3226625535,US
+3226625792,3226626047,US
3226626048,3226626303,CA
-3226626304,3226629375,US
+3226626304,3226627327,US
+3226627584,3226629375,US
3226629376,3226629631,CA
3226629632,3226630399,US
-3226630400,3226630655,GB
+3226630400,3226630655,NL
3226630912,3226631167,US
-3226631168,3226631423,CH
+3226631168,3226631423,NL
3226631424,3226631935,US
-3226631936,3226632191,PT
+3226631936,3226632191,NL
3226632192,3226633215,CA
-3226635008,3226635263,US
+3226633216,3226633471,AU
+3226633472,3226635263,US
3226635264,3226635519,AU
3226635520,3226635775,US
3226635776,3226636031,ZA
@@ -106843,29 +54001,38 @@
3226637056,3226637823,US
3226637824,3226638079,CA
3226638080,3226638335,US
-3226638592,3226638847,GB
+3226638592,3226638847,NL
3226638848,3226639615,US
3226639616,3226640127,AT
3226640128,3226640639,US
3226640640,3226640895,AU
-3226640896,3226654207,US
-3226654208,3226654463,PT
+3226640896,3226652927,US
+3226653696,3226654207,US
+3226654208,3226654463,NL
3226654464,3226655743,US
-3226655744,3226656255,IT
+3226655744,3226656255,NL
3226656256,3226656511,AU
-3226656512,3226661119,US
-3226661120,3226661375,DE
+3226656512,3226658303,US
+3226658304,3226658559,AU
+3226658560,3226661119,US
+3226661120,3226661375,NL
3226661888,3226662143,US
3226662912,3226664959,US
3226664960,3226690815,FI
3226690816,3226691071,CA
-3226691072,3226691327,GB
-3226691584,3226695167,US
+3226691072,3226691327,NL
+3226691584,3226691839,AU
+3226691840,3226693631,US
+3226694144,3226695167,US
3226695168,3226695679,AU
3226695680,3226695935,US
3226695936,3226696191,CA
-3226696448,3226696703,AU
-3226696704,3226705919,US
+3226696192,3226696703,AU
+3226696704,3226698495,US
+3226698496,3226698751,CA
+3226698752,3226704895,US
+3226705152,3226705407,AU
+3226705408,3226705919,US
3226705920,3226706175,FR
3226706176,3226706943,US
3226707200,3226707455,PL
@@ -106878,183 +54045,180 @@
3226716928,3226718207,US
3226720768,3226721279,JP
3226721280,3226721791,US
-3226722048,3226722303,CH
+3226722048,3226722303,NL
3226722304,3226722559,AU
3226722560,3226723583,US
-3226723584,3226723839,DE
+3226723584,3226723839,NL
3226723840,3226724095,US
3226724096,3226724351,AU
3226724352,3226725631,US
3226725632,3226726143,AU
-3226726144,3226728191,US
+3226726144,3226727679,US
+3226727936,3226728191,US
3226728192,3226728447,CA
-3226728448,3226730495,US
+3226728448,3226729983,US
3226731008,3226731519,US
3226731776,3226732031,GB
3226732288,3226733567,US
3226733568,3226733823,MX
-3226733824,3226734079,PT
+3226733824,3226734079,NL
3226734080,3226734335,US
-3226734336,3226734591,PT
-3226734592,3226737407,US
+3226734336,3226734591,NL
+3226734592,3226736383,US
+3226736896,3226737407,US
3226737408,3226737663,AT
3226737664,3226738175,US
3226738176,3226738431,NL
3226738432,3226738687,US
-3226738688,3226739199,NO
-3226739712,3226746367,US
-3226746368,3226746623,PT
+3226738688,3226739199,NL
+3226739712,3226743807,US
+3226744576,3226746367,US
+3226746368,3226746623,NL
3226746624,3226748927,US
3226749440,3226749695,US
3226749696,3226752255,GB
3226752256,3226752767,US
-3226752768,3226753023,IT
+3226752768,3226753023,NL
3226753024,3226753279,US
3226753280,3226753535,AU
3226753536,3226753791,SI
-3226753792,3226754815,HR
-3226754816,3226755071,SI
-3226755072,3226755327,HR
-3226755328,3226755583,SI
-3226755584,3226755839,HR
-3226755840,3226757375,SI
+3226753792,3226754303,HR
+3226754304,3226757375,SI
3226757376,3226757887,HR
-3226757888,3226758143,SI
-3226758144,3226758399,HR
-3226758400,3226758655,SI
+3226757888,3226758655,SI
3226758912,3226762751,US
3226763008,3226770687,IT
3226770688,3226772991,US
-3226772992,3226773247,CH
+3226772992,3226773247,NL
3226773248,3226774783,US
3226774784,3226775039,GB
3226775040,3226775295,US
-3226775552,3226783743,FI
-3226783744,3226784767,US
+3226775552,3226782463,FI
+3226782720,3226783743,FI
+3226783744,3226783999,US
+3226784256,3226784767,US
3226784768,3226785023,GB
3226785024,3226786559,US
3226786560,3226786815,AU
-3226786816,3226787071,DE
-3226787072,3226787327,AT
+3226786816,3226787327,NL
3226787328,3226788095,US
3226788352,3226789375,HU
3226789376,3226789631,AU
3226789632,3226791167,US
3226791168,3226791679,AU
3226791680,3226792191,US
-3226792448,3226792703,AU
+3226792192,3226792703,AU
3226792704,3226792959,US
3226792960,3226793215,ZA
3226793216,3226793983,DE
3226793984,3226795263,US
-3226795264,3226795519,NZ
+3226795264,3226795519,AU
3226795520,3226795775,US
3226796032,3226800127,US
3226800128,3226800639,DE
3226800640,3226811391,US
3226811392,3226811647,DE
3226811648,3226824191,US
-3226824192,3226824447,EU
+3226824192,3226824291,DE
+3226824292,3226824293,US
+3226824294,3226824447,DE
3226824448,3226861567,US
3226861824,3226862079,CA
3226862080,3226864383,US
3226864384,3226864639,RU
+3226864640,3226864895,AU
3226864896,3226865151,US
-3226865152,3226865407,PL
+3226865152,3226865407,NL
3226865408,3226866175,US
-3226866176,3226866431,GB
+3226866176,3226866431,NL
3226866432,3226867967,US
-3226867968,3226868223,IL
+3226867968,3226868223,NL
3226868224,3226868479,US
3226868480,3226868735,GB
3226868736,3226884351,US
-3226884352,3226884607,IL
-3226884608,3226893567,US
+3226884352,3226884607,NL
+3226884608,3226892799,US
+3226893056,3226893567,US
3226893568,3226894079,NL
3226894080,3226894335,GB
-3226894336,3226895359,US
-3226895872,3226896127,GB
+3226894336,3226894591,US
+3226894592,3226894847,AU
+3226895104,3226895359,US
+3226895360,3226895871,AU
+3226895872,3226896127,NL
3226896128,3226896639,US
-3226896640,3226896895,GB
-3226896896,3226897151,PT
+3226896640,3226897151,NL
3226897152,3226902527,US
3226903040,3226903295,US
-3226903296,3226903551,DE
+3226903296,3226903551,NL
3226903552,3226903807,US
3226903808,3226904063,AU
-3226904064,3226904319,CH
-3226904320,3226904575,FR
+3226904064,3226904575,NL
3226904576,3226904831,US
-3226904832,3226905087,GB
+3226904832,3226905087,NL
3226905088,3226926591,US
-3226926592,3226926847,SE
+3226926592,3226926847,NL
3226927104,3226992639,NL
-3226992896,3226993151,CH
+3226992896,3226993151,NL
3226993152,3226993663,US
-3226993664,3226993919,DE
+3226993664,3226993919,NL
3226993920,3226994175,US
3226994176,3226994687,AU
3226994688,3226994943,US
-3226994944,3226995455,GB
-3226995456,3226996735,US
-3226996992,3226997247,PT
+3226994944,3226995455,NL
+3226995456,3226996479,US
+3226996992,3226997247,NL
3226998016,3226998527,US
-3226998528,3226999039,AT
-3226999040,3227013119,US
+3226998528,3226999039,NL
+3226999040,3227005439,US
+3227005696,3227013119,US
+3227013120,3227013375,AU
3227013376,3227013887,US
-3227013888,3227014399,GB
+3227013888,3227014399,NL
3227014400,3227014655,NZ
-3227014656,3227014911,FI
+3227014656,3227014911,NL
3227014912,3227017215,US
-3227017472,3227017983,DE
+3227017472,3227017983,NL
+3227018496,3227019007,AU
3227019008,3227020287,US
-3227020288,3227020543,DE
+3227020288,3227020543,NL
3227020800,3227022847,US
-3227022848,3227023103,GB
+3227022848,3227023103,NL
+3227023104,3227023359,AU
3227023360,3227023615,US
3227023872,3227024127,US
-3227024128,3227024383,PT
+3227024128,3227024383,NL
3227024384,3227024895,US
-3227025408,3227025663,GB
+3227025408,3227025663,NL
3227025664,3227025919,US
3227025920,3227026175,GB
3227026176,3227026687,US
3227026688,3227026943,GB
-3227027456,3227035135,US
-3227035136,3227035391,EU
-3227035392,3227035647,AP
-3227035648,3227040255,US
+3227027456,3227038207,US
+3227038720,3227040255,US
3227040512,3227040767,AU
3227040768,3227041279,US
-3227041280,3227041535,NZ
+3227041280,3227041535,AU
3227041536,3227042815,US
-3227042816,3227043071,IT
+3227042816,3227043071,NL
3227043072,3227043327,US
3227043584,3227044863,US
-3227044864,3227045119,PL
-3227045120,3227051519,US
-3227051520,3227051775,AP
-3227051776,3227053567,US
-3227053568,3227053823,GB
-3227053824,3227054079,DE
+3227044864,3227045119,NL
+3227045120,3227053567,US
+3227053568,3227054079,NL
3227054080,3227056639,US
3227056640,3227058175,PT
-3227058176,3227083519,FI
-3227083520,3227083775,ES
-3227083776,3227123199,FI
-3227123200,3227123455,AX
-3227123456,3227123711,FI
-3227123712,3227204617,US
-3227204618,3227204619,EU
-3227204620,3227225087,US
-3227225088,3227225599,LU
-3227225600,3227234559,US
-3227234560,3227234815,PT
+3227058176,3227123711,FI
+3227123712,3227224831,US
+3227225088,3227225599,NL
+3227225600,3227226111,US
+3227226368,3227234559,US
+3227234560,3227234815,NL
3227234816,3227235071,US
3227235072,3227235327,AU
3227235328,3227236607,US
3227236608,3227236863,AU
-3227236864,3227237119,RU
+3227236864,3227237119,NL
3227237120,3227237631,US
3227237632,3227237887,NO
3227237888,3227238143,US
@@ -107064,24 +54228,30 @@
3227240704,3227240959,GB
3227240960,3227243007,US
3227243008,3227243263,CA
-3227243264,3227243519,GB
+3227243264,3227243519,NL
3227243520,3227243775,US
+3227243776,3227244031,AU
3227244032,3227249151,SE
3227249408,3227249663,US
3227249664,3227252735,CH
-3227252736,3227273983,US
+3227252736,3227252991,US
+3227253248,3227254271,US
+3227254272,3227254527,AU
+3227254784,3227258623,US
+3227258624,3227258879,AU
+3227258880,3227259135,US
+3227259392,3227273983,US
3227273984,3227274239,FI
3227274240,3227274495,US
3227274496,3227274751,NL
3227274752,3227276543,US
3227276800,3227277055,FR
3227277312,3227278847,US
-3227278848,3227279103,EU
+3227278848,3227279103,IE
3227279104,3227281407,US
3227281408,3227282175,IT
3227282176,3227282431,US
-3227282432,3227282687,NL
-3227282688,3227282943,GB
+3227282432,3227282943,NL
3227282944,3227284479,US
3227284480,3227284735,FI
3227284992,3227286783,US
@@ -107101,118 +54271,163 @@
3227290880,3227291135,AT
3227291136,3227294207,PT
3227294464,3227294975,GR
-3227295232,3227310079,US
-3227310080,3227310335,NO
+3227295232,3227299839,US
+3227300096,3227301375,US
+3227301632,3227302399,US
+3227302656,3227309055,US
+3227309824,3227310079,US
+3227310080,3227310335,NL
3227310336,3227312127,US
3227312128,3227312383,DK
3227312384,3227320319,US
-3227320320,3227361791,FR
-3227361792,3227362303,US
-3227362304,3227363071,GB
-3227363072,3227385855,FR
+3227320320,3227362047,FR
+3227362048,3227362303,US
+3227362304,3227362559,GB
+3227362560,3227385855,FR
3227385856,3227391999,US
-3227392000,3227392255,PT
+3227392000,3227392255,NL
3227392256,3227393023,US
3227393024,3227393279,AT
-3227393280,3227393791,US
-3227393792,3227394047,EU
-3227394048,3227396351,US
+3227393280,3227396351,US
3227396352,3227396607,AU
3227396608,3227400447,US
3227400448,3227400703,AT
3227400704,3227400959,GB
3227400960,3227401471,US
-3227401472,3227401727,ZA
+3227401472,3227401727,MU
3227401728,3227402495,AU
-3227402496,3227403007,US
+3227402496,3227402751,US
3227403008,3227403519,GR
3227403520,3227403775,US
-3227404288,3227405311,US
-3227405312,3227405567,DE
+3227404544,3227405311,US
+3227405312,3227405567,NL
3227405568,3227414015,US
-3227414272,3227415551,GB
-3227415552,3227415807,US
-3227415808,3227416063,GB
+3227414272,3227416063,GB
3227416064,3227417087,US
-3227417088,3227417343,BN
+3227417088,3227417343,AU
3227417344,3227417599,US
3227417856,3227418111,US
3227418112,3227418367,CA
-3227418368,3227425791,US
+3227418368,3227425023,US
+3227425280,3227425791,US
3227425792,3227427583,DK
3227427584,3227427839,ES
3227427840,3227429119,US
3227429120,3227429375,NZ
3227429376,3227429887,US
-3227429888,3227430143,GB
+3227429888,3227430143,NL
3227430144,3227430399,US
-3227430400,3227430655,HK
+3227430400,3227430655,AU
3227430656,3227437055,FR
-3227437056,3227439103,US
+3227437056,3227437311,AU
+3227437312,3227437823,US
+3227438848,3227439103,US
3227439104,3227439615,AU
-3227439616,3227439871,ZA
+3227439616,3227439871,MU
3227439872,3227440127,US
-3227440128,3227440383,IT
+3227440128,3227440383,NL
3227440384,3227442175,US
-3227442432,3227442687,RU
+3227442176,3227442431,AU
+3227442432,3227442687,NL
3227442688,3227443711,US
3227443712,3227443967,AT
3227443968,3227444223,AU
3227444224,3227445503,US
3227445504,3227445759,RU
3227445760,3227446015,US
-3227446016,3227446271,GB
+3227446016,3227446271,NL
3227446272,3227446783,US
-3227447040,3227447295,AT
-3227447296,3227448063,ZA
+3227446784,3227447039,AU
+3227447040,3227447295,NL
+3227447296,3227447807,MU
+3227447808,3227448063,ZA
3227448064,3227448575,AU
3227448576,3227448831,US
-3227448832,3227449087,ZA
-3227449088,3227451455,US
+3227448832,3227449087,MU
+3227449088,3227450111,US
+3227450368,3227451455,US
3227451456,3227452375,CA
3227452376,3227452382,US
-3227452383,3227454687,CA
+3227452383,3227452735,CA
+3227452736,3227452767,US
+3227452768,3227453503,CA
+3227453504,3227453507,US
+3227453508,3227454047,CA
+3227454048,3227454079,US
+3227454080,3227454687,CA
3227454688,3227454719,US
-3227454720,3227455487,CA
+3227454720,3227455047,CA
+3227455048,3227455051,US
+3227455052,3227455487,CA
3227455488,3227456255,US
3227456256,3227457023,CA
-3227457024,3227457279,US
-3227457280,3227459001,CA
+3227457024,3227457535,US
+3227457536,3227459001,CA
3227459002,3227459002,US
-3227459003,3227464447,CA
+3227459003,3227461081,CA
+3227461082,3227461082,US
+3227461083,3227461119,CA
+3227461120,3227461631,US
+3227461632,3227461959,CA
+3227461960,3227461963,US
+3227461964,3227464447,CA
3227464448,3227464575,US
3227464576,3227465147,CA
3227465148,3227465151,US
-3227465152,3227467775,CA
-3227467776,3227475967,US
+3227465152,3227466135,CA
+3227466136,3227466143,US
+3227466144,3227467775,CA
+3227468032,3227468287,US
+3227468800,3227484159,US
3227484160,3227516927,CA
-3227516928,3227533311,ZA
+3227517184,3227517695,ZA
+3227517696,3227519743,MU
+3227519744,3227520255,ZA
+3227520256,3227520767,MU
+3227520768,3227521023,ZA
+3227521024,3227522047,MU
+3227522048,3227522559,ZA
+3227522560,3227522815,MU
+3227523072,3227526143,MU
+3227526400,3227526655,MU
+3227526656,3227526911,ZA
+3227526912,3227533311,MU
3227533312,3227534335,US
-3227534336,3227557887,ZA
+3227534336,3227539455,MU
+3227539456,3227539711,ZA
+3227539712,3227541503,MU
+3227541504,3227541759,ZA
+3227541760,3227557887,MU
3227557888,3227558911,US
-3227558912,3227559935,ZA
+3227558912,3227559935,MU
3227559936,3227561983,US
-3227561984,3227568127,ZA
+3227561984,3227567103,MU
+3227567104,3227568127,ZA
3227568128,3227574271,US
-3227574272,3227582463,ZA
+3227574272,3227579391,MU
+3227579648,3227580159,MU
+3227580160,3227580927,ZA
+3227580928,3227582463,MU
3227582464,3227638271,US
3227638272,3227638527,CA
3227638528,3227647999,US
-3227648000,3227659775,FI
-3227659776,3227660031,JP
-3227660032,3227660543,FI
-3227660544,3227660799,EE
-3227660800,3227713535,FI
-3227779328,3227779583,ZA
-3227779584,3227779839,KR
+3227648000,3227713535,FI
+3227713536,3227722521,CA
+3227722522,3227722522,US
+3227722523,3227748035,CA
+3227748036,3227748039,US
+3227748040,3227779071,CA
+3227779328,3227779583,MU
+3227779584,3227779839,AU
3227779840,3227783679,US
-3227783680,3227783935,FR
+3227783680,3227783935,NL
3227783936,3227784703,US
3227784704,3227784959,AU
3227784960,3227785727,AT
-3227785728,3227792383,US
-3227792384,3227792639,GB
-3227792640,3227792895,NZ
+3227785728,3227786495,US
+3227786752,3227792383,US
+3227792384,3227792639,NL
+3227792640,3227792895,AU
3227792896,3227794687,US
3227794688,3227794943,GB
3227794944,3227795199,US
@@ -107228,100 +54443,107 @@
3227804416,3227804671,GB
3227804672,3227804927,US
3227804928,3227805183,CA
-3227805184,3227805439,SG
-3227805440,3227805695,FI
+3227805184,3227805695,FI
3227805696,3227806463,US
-3227806464,3227806719,GB
-3227806720,3227806975,US
-3227806976,3227807039,SG
-3227807040,3227807743,US
+3227806464,3227806719,FI
+3227806720,3227807743,US
3227807744,3227809023,FI
3227809024,3227809279,IN
-3227809280,3227812351,FI
-3227812352,3227812607,EU
-3227812608,3227813375,FI
+3227809280,3227813375,FI
3227813376,3227813631,US
-3227813632,3227813887,MY
-3227813888,3227815167,GB
+3227813632,3227815167,GB
3227815168,3227815935,US
-3227815936,3227816191,GB
+3227815936,3227816191,NL
3227816192,3227818495,US
3227818496,3227818751,GB
-3227818752,3227844607,MX
+3227818752,3227819263,MX
+3227819264,3227819519,AR
+3227819520,3227822847,MX
+3227822848,3227823103,HN
+3227823104,3227824383,MX
+3227824640,3227825663,MX
+3227825920,3227826687,MX
+3227826688,3227827199,AR
+3227827200,3227829759,MX
+3227830016,3227831807,MX
+3227832064,3227833855,MX
+3227834368,3227837439,MX
+3227837952,3227842303,MX
+3227842816,3227843327,MX
3227844864,3227845119,ES
3227845120,3227845631,US
-3227845632,3227845887,RU
+3227845632,3227845887,NL
3227846144,3227846655,US
-3227846656,3227846911,ES
-3227847424,3227847679,GB
+3227846656,3227847679,NL
3227847680,3227848703,US
-3227848704,3227848959,NZ
+3227848704,3227848959,AU
3227848960,3227851775,US
-3227851776,3227852031,DE
-3227852032,3227853055,US
+3227851776,3227852031,NL
+3227852032,3227852799,US
3227853312,3227853567,GB
-3227853568,3227860991,US
-3227863808,3227864063,DE
+3227853568,3227856127,US
+3227856896,3227860991,US
+3227863808,3227864063,NL
3227864064,3227865343,US
-3227865344,3227867903,NL
-3227867904,3227868159,TH
+3227865344,3227867647,NL
+3227867648,3227867903,BR
+3227867904,3227868159,AU
3227868160,3227872767,US
3227872768,3227873023,GB
3227873024,3227874047,NL
3227874048,3227874815,US
-3227874816,3227875071,PT
+3227874816,3227875071,NL
3227875072,3227878911,US
3227878912,3227879167,AU
3227879168,3227879679,US
-3227879680,3227879935,GB
+3227879680,3227879935,NL
3227880192,3227880959,US
-3227880960,3227881215,EG
-3227881216,3227885567,US
+3227880960,3227881215,MU
+3227881472,3227885567,US
3227885568,3227887871,ES
3227887872,3227888127,PR
-3227888128,3227888383,BE
-3227888384,3227889663,US
-3227889664,3227889919,CH
-3227889920,3227890431,US
-3227890432,3227890943,DE
+3227888128,3227888383,NL
+3227888384,3227889151,US
+3227889408,3227889663,US
+3227889664,3227889919,NL
+3227890176,3227890431,US
+3227890432,3227890943,NL
3227890944,3227891455,US
3227891456,3227891711,AU
3227891712,3227893759,US
-3227893760,3227894015,FI
+3227893760,3227894015,NL
3227894016,3227895039,US
3227895040,3227895551,DE
-3227895552,3227909119,US
+3227895808,3227909119,US
3227909120,3227909375,BE
3227909376,3227909631,US
3227909632,3227909887,AU
-3227910400,3227910655,AT
+3227910400,3227910655,NL
3227910656,3227911679,US
3227911680,3227912191,UA
3227912192,3227912447,GB
-3227912448,3227912703,ZA
+3227912448,3227912703,MU
3227912704,3227912959,US
3227912960,3227913215,CA
3227913216,3227914495,US
3227914496,3227914751,AT
-3227914752,3227918591,FI
-3227918592,3227918847,US
-3227918848,3227931135,FI
+3227914752,3227931135,FI
3227931136,3227931391,US
-3227931392,3227931647,TH
+3227931392,3227931647,AU
3227931648,3227931903,PE
3227932672,3227932927,US
3227932928,3227933183,DE
3227933184,3227933695,US
-3227933696,3227933951,NZ
+3227933696,3227933951,AU
3227933952,3227934463,US
3227934464,3227934719,CH
3227934720,3227947519,US
3227947520,3227955711,DE
3227955712,3227964927,US
3227964928,3227965183,GB
-3227965184,3227967487,US
-3227967488,3227967743,FR
-3227967744,3227967999,PL
+3227965184,3227966975,US
+3227967232,3227967487,US
+3227967488,3227967999,NL
3227968000,3227968255,US
3227968256,3227968767,GB
3227968768,3227969023,RU
@@ -107333,52 +54555,61 @@
3227975936,3227976191,US
3227976192,3227976447,LU
3227976448,3227977471,US
-3227977472,3227977727,FR
+3227977472,3227977727,NL
3227977728,3227978751,US
3227979008,3227979263,US
-3227979264,3227979519,AE
+3227979264,3227979519,NL
3227979520,3227980799,US
-3227980800,3227981055,GR
+3227980800,3227981055,NL
3227981056,3227981567,US
-3227981568,3227981823,DE
-3227981824,3227982591,US
+3227981568,3227981823,NL
+3227981824,3227982335,US
3227982592,3227982847,DE
3227982848,3227985919,GB
3227985920,3227986175,DE
3227986176,3227986431,US
-3227986688,3227997439,US
+3227986432,3227986943,AU
+3227986944,3227987455,US
+3227987456,3227987711,AU
+3227987712,3227997439,US
3227997440,3228005631,FI
3228005632,3228008959,US
3228008960,3228009215,AU
-3228009472,3228010751,US
+3228009472,3228009727,AU
+3228009728,3228010751,US
3228010752,3228011519,GB
3228011520,3228013311,US
-3228013312,3228013567,PT
-3228013568,3228045055,US
-3228045056,3228045311,KR
+3228013312,3228013567,NL
+3228013568,3228039423,US
+3228040192,3228041215,US
+3228041472,3228042239,US
+3228042752,3228045055,US
+3228045056,3228045311,AU
3228045312,3228046335,US
3228046592,3228047103,US
-3228047104,3228047359,IT
+3228047104,3228047359,NL
3228047360,3228048383,US
-3228048384,3228048895,GB
+3228048384,3228048895,NL
3228048896,3228050175,US
3228050176,3228050943,PT
3228051200,3228051455,US
+3228051456,3228051711,AU
3228051712,3228051967,CH
3228051968,3228052223,US
3228052224,3228052991,AU
3228052992,3228053503,US
3228053504,3228053759,PT
3228054016,3228054783,US
-3228054784,3228055039,GB
+3228054784,3228055039,NL
3228055040,3228055295,US
3228055296,3228055807,NL
3228055808,3228056319,NO
3228056320,3228059647,US
3228059648,3228059903,CH
3228060160,3228060927,US
-3228060928,3228061183,DE
+3228060928,3228061183,NL
3228061184,3228061695,US
+3228061696,3228061951,AU
3228061952,3228062207,US
3228062208,3228062463,GB
3228062464,3228077055,US
@@ -107388,27 +54619,28 @@
3228077824,3228078847,US
3228078848,3228079103,GR
3228079104,3228080639,US
-3228080640,3228080895,IE
-3228080896,3228081151,FR
-3228081152,3228082175,US
+3228080640,3228081151,NL
+3228081152,3228081919,US
3228082944,3228083967,US
-3228083968,3228084479,BE
+3228083968,3228084479,NL
3228084480,3228085247,US
-3228085248,3228085503,JP
+3228085248,3228085503,AU
3228085504,3228100607,US
-3228100608,3228101119,JP
+3228100608,3228101119,AU
3228101120,3228102143,US
-3228102144,3228102399,GB
+3228102144,3228102399,NL
3228102400,3228103935,US
3228103936,3228104191,FR
-3228104192,3228104703,JP
-3228104704,3228104959,DK
+3228104192,3228104703,AU
+3228104704,3228104959,NL
3228104960,3228105471,US
-3228105472,3228105727,CH
-3228105728,3228109311,US
-3228109312,3228109567,NZ
+3228105472,3228105727,NL
+3228105728,3228105983,AU
+3228105984,3228106495,US
+3228106752,3228109311,US
+3228109312,3228109567,AU
3228109568,3228125951,US
-3228125952,3228126207,RU
+3228125952,3228126207,NL
3228126208,3228133375,US
3228133376,3228134655,CA
3228134656,3228150271,US
@@ -107419,11 +54651,11 @@
3228171776,3228172031,GB
3228172032,3228172287,US
3228172288,3228237823,IT
-3228238336,3228238591,GB
+3228238080,3228238591,NL
3228238592,3228238847,US
3228238848,3228239359,GB
3228239616,3228240127,US
-3228240128,3228240383,AU
+3228240128,3228240639,AU
3228240640,3228241407,GB
3228241408,3228250367,US
3228250624,3228250879,US
@@ -107433,8 +54665,8 @@
3228264448,3228264703,NI
3228264704,3228265983,US
3228265984,3228266239,IE
-3228266752,3228267007,NZ
-3228267008,3228267263,NO
+3228266496,3228267007,AU
+3228267008,3228267263,NL
3228267264,3228268543,US
3228269056,3228269311,PT
3228269312,3228269567,DE
@@ -107445,11 +54677,11 @@
3228271616,3228271871,DE
3228272128,3228272383,US
3228272640,3228280831,US
-3228280832,3228281087,GB
+3228280832,3228281087,NL
3228281088,3228281599,US
-3228281600,3228282111,NZ
+3228281600,3228282111,AU
3228282112,3228282367,US
-3228282368,3228282623,GB
+3228282368,3228282623,NL
3228282624,3228283135,US
3228283136,3228283391,GR
3228283392,3228283647,GB
@@ -107459,15 +54691,20 @@
3228289024,3228297215,FI
3228297216,3228297727,AT
3228297728,3228297983,US
-3228297984,3228298495,DE
-3228298496,3228309247,US
-3228309248,3228327167,DE
+3228297984,3228298495,NL
+3228298496,3228303103,US
+3228303360,3228309247,US
+3228309248,3228310271,DE
+3228311808,3228312063,DE
+3228312320,3228316159,DE
+3228316416,3228327167,DE
3228327168,3228328703,US
3228328704,3228328959,AU
-3228328960,3228329471,NO
+3228328960,3228329471,NL
3228329472,3228330751,US
3228330752,3228331263,SE
3228331264,3228332287,US
+3228332288,3228332543,AU
3228332544,3228332799,GR
3228332800,3228334079,FR
3228334080,3228334335,GB
@@ -107477,12 +54714,12 @@
3228335616,3228335871,CZ
3228336128,3228336639,CZ
3228336640,3228337663,SK
-3228337664,3228338431,CZ
+3228337664,3228337919,CZ
+3228337920,3228338175,SK
+3228338176,3228338431,CZ
3228338432,3228340735,SK
3228340736,3228341247,CZ
-3228341248,3228341759,SK
-3228341760,3228342271,CZ
-3228342272,3228342783,SK
+3228341248,3228342783,SK
3228342784,3228343039,CZ
3228343040,3228343295,SK
3228343296,3228343551,CZ
@@ -107493,29 +54730,28 @@
3228347392,3228348159,SK
3228348160,3228353279,US
3228353280,3228358399,SE
-3228358400,3228362239,US
-3228362240,3228362495,TH
+3228358400,3228361471,US
+3228361728,3228362239,US
+3228362240,3228362495,AU
3228362496,3228362751,US
3228363008,3228363263,US
3228363264,3228363519,CH
3228363520,3228364287,US
-3228364288,3228364543,AT
+3228364288,3228364543,NL
3228364800,3228368895,US
-3228368896,3228404735,DE
-3228404736,3228404863,FR
-3228404864,3228404895,EU
-3228404896,3228405247,FR
+3228368896,3228373247,DE
+3228373504,3228380415,DE
+3228380672,3228404735,DE
+3228404736,3228405247,FR
3228405248,3228405503,KR
3228405504,3228405759,SG
3228405760,3228406015,IN
3228406016,3228406271,US
3228406272,3228407039,FR
-3228407040,3228421119,DE
-3228421120,3228421375,BE
-3228421376,3228423679,DE
-3228423680,3228424191,CH
-3228424192,3228430847,DE
-3228430848,3228431103,ZA
+3228407040,3228420095,DE
+3228420608,3228426239,DE
+3228426752,3228430847,DE
+3228430848,3228431103,MU
3228431104,3228434431,DE
3228434432,3228456191,US
3228456192,3228456447,CA
@@ -107525,45 +54761,49 @@
3228461568,3228461823,CA
3228461824,3228464127,US
3228464128,3228464383,CA
-3228464384,3228477695,US
+3228464384,3228472831,US
+3228473344,3228477695,US
3228478464,3228479487,CA
-3228479488,3228496127,US
+3228479488,3228490751,US
+3228491520,3228496127,US
3228496128,3228496383,GB
3228496384,3228508159,US
3228508160,3228508415,AU
-3228508416,3228508671,NO
+3228508416,3228508671,NL
3228508672,3228509439,US
-3228509952,3228510207,IE
+3228509952,3228510207,NL
3228510208,3228511231,US
-3228511232,3228511487,CZ
+3228511232,3228511487,NL
3228511488,3228511999,US
-3228512000,3228512255,DE
-3228512256,3228512511,CH
+3228512000,3228512511,NL
3228512512,3228513791,US
-3228514304,3228522495,US
-3228522496,3228522751,GB
+3228514304,3228521471,US
+3228521984,3228522495,US
+3228522496,3228522751,NL
3228522752,3228525823,US
-3228525824,3228526079,PT
-3228526080,3228526335,NZ
-3228526336,3228526591,CH
-3228526592,3228526847,AT
+3228525824,3228526079,NL
+3228526080,3228526335,AU
+3228526336,3228526847,NL
3228526848,3228527103,AU
3228527104,3228531711,US
3228531712,3228532223,NO
3228532224,3228532479,US
-3228532480,3228532735,DE
-3228540928,3228558591,US
-3228558592,3228559103,BR
+3228532480,3228532735,NL
+3228532736,3228554751,US
+3228555008,3228557311,US
+3228557568,3228558591,US
+3228558592,3228558847,BR
3228559104,3228564479,US
3228564480,3228564735,AT
-3228564736,3228565247,US
-3228565504,3228572927,US
+3228564992,3228565247,US
+3228565760,3228572927,US
3228573184,3228573951,PT
3228573952,3228574463,US
-3228574720,3228577023,US
-3228577024,3228577279,PT
+3228574720,3228574975,US
+3228575232,3228577023,US
+3228577024,3228577279,NL
3228577280,3228578047,US
-3228578048,3228578303,GB
+3228578048,3228578303,NL
3228578304,3228581119,US
3228581120,3228581375,AT
3228581376,3228583167,US
@@ -107572,67 +54812,38 @@
3228590592,3228590847,GB
3228590848,3228591103,DK
3228591104,3228591359,GB
-3228591360,3228617727,US
+3228591360,3228603391,US
+3228603648,3228603903,US
+3228604160,3228617727,US
3228617728,3228617983,FI
3228617984,3228618239,US
-3228618240,3228618495,SE
+3228618240,3228618495,NL
3228618496,3228618751,US
3228618752,3228619007,DE
3228619008,3228620031,US
-3228620032,3228620287,DE
-3228620288,3228620543,CH
+3228620032,3228620543,NL
3228620544,3228620799,AU
3228620800,3228628735,US
3228628736,3228628991,ES
3228628992,3228630527,US
-3228630528,3228630783,CH
+3228630528,3228630783,NL
3228631040,3228696575,NL
3228696576,3228826371,IL
3228826372,3228826372,US
-3228826373,3228827647,IL
-3228827648,3228828159,PS
-3228828160,3228829183,IL
-3228829184,3228829695,PS
-3228829696,3228830207,IL
-3228830208,3228833791,PS
-3228833792,3228846335,IL
-3228846336,3228846591,A2
-3228846592,3228849407,IL
-3228849408,3228849663,A2
-3228849664,3228850175,IL
-3228850176,3228850431,A2
-3228850432,3228858111,IL
-3228858112,3228858367,A2
-3228858368,3228864255,IL
-3228864256,3228864511,A2
-3228864512,3229024255,IL
-3229024256,3229061119,US
-3229061120,3229061343,CA
-3229061344,3229061359,US
-3229061360,3229061375,CA
-3229061376,3229061631,US
-3229061632,3229062031,CA
-3229062032,3229062047,US
-3229062048,3229062143,CA
-3229062144,3229062175,US
-3229062176,3229062433,CA
+3228826373,3228830719,IL
+3228830720,3228833791,PS
+3228833792,3229024255,IL
+3229024512,3229024767,US
+3229025280,3229058047,US
+3229058816,3229061119,US
+3229061120,3229062433,CA
3229062434,3229062450,US
-3229062451,3229062527,CA
-3229062528,3229062591,US
-3229062592,3229062655,CA
-3229062656,3229063295,US
-3229063296,3229063423,CA
-3229063424,3229063679,US
-3229063680,3229063935,CA
-3229063936,3229064191,US
-3229064192,3229064951,CA
+3229062451,3229064951,CA
3229064952,3229064955,US
3229064956,3229065215,CA
-3229073408,3229092095,US
+3229065216,3229092095,US
3229092096,3229093887,AU
-3229093888,3229101823,US
-3229101824,3229102591,FI
-3229102592,3229104895,US
+3229093888,3229104895,US
3229104896,3229105151,ES
3229105152,3229120511,US
3229120512,3229120767,SE
@@ -107642,32 +54853,31 @@
3229155328,3229155583,GB
3229155584,3229155839,SE
3229155840,3229156095,ES
-3229156096,3229161727,SE
+3229156096,3229159423,SE
+3229159424,3229159935,AT
+3229159936,3229160959,SE
+3229160960,3229161471,DE
+3229161472,3229161727,SE
3229161728,3229161983,GB
-3229161984,3229163263,SE
-3229163264,3229163519,ES
-3229163520,3229164287,SE
-3229164288,3229164543,DK
+3229161984,3229164543,SE
3229164544,3229165055,GB
-3229165056,3229165311,NO
-3229165312,3229168895,SE
-3229168896,3229169151,JP
-3229169152,3229171455,SE
-3229171456,3229171711,MT
+3229165056,3229167103,SE
+3229167104,3229167615,IT
+3229167616,3229171711,SE
3229171712,3229172223,GB
-3229172224,3229173503,SE
-3229173504,3229173759,IT
-3229173760,3229182463,SE
+3229172224,3229182463,SE
3229182464,3229182975,GB
-3229182976,3229189119,SE
-3229189120,3229189375,GB
-3229189376,3229191167,SE
-3229191168,3229191423,GB
-3229191424,3229192191,SE
-3229192192,3229192447,FI
-3229192448,3229195263,SE
+3229182976,3229183999,SE
+3229184000,3229184511,GB
+3229184512,3229195263,SE
3229195264,3229196287,DE
-3229196288,3229200383,SE
+3229196288,3229196799,SE
+3229196800,3229197311,AT
+3229197312,3229197823,SE
+3229197824,3229198335,GB
+3229198336,3229198847,SE
+3229198848,3229199359,AT
+3229199360,3229200383,SE
3229200384,3229200895,GB
3229200896,3229201151,DE
3229201152,3229201407,SE
@@ -107679,21 +54889,22 @@
3229205504,3229206015,GB
3229206016,3229220863,SE
3229220864,3229245439,GB
-3229245440,3229246719,US
-3229246720,3229250815,GB
-3229250816,3229251071,US
-3229251072,3229254399,GB
+3229245440,3229246463,US
+3229246464,3229254399,GB
3229254400,3229256959,SG
3229256960,3229258495,GB
3229258496,3229259007,US
3229259520,3229264639,GB
-3229264640,3229264895,NZ
+3229264640,3229264895,AU
3229264896,3229265919,US
3229265920,3229266175,AU
3229266176,3229266943,US
3229266944,3229267199,NZ
-3229267200,3229275647,US
-3229275648,3229275903,GB
+3229267200,3229272319,US
+3229273856,3229274623,US
+3229274624,3229274879,AU
+3229274880,3229275647,US
+3229275648,3229275903,NL
3229276160,3229281023,IE
3229281024,3229281791,US
3229281792,3229283071,PT
@@ -107702,156 +54913,166 @@
3229286400,3229354495,US
3229354496,3229355775,AU
3229355776,3229358079,US
-3229358080,3229359359,DE
+3229358080,3229358335,AU
+3229358336,3229359359,DE
3229359872,3229360127,US
3229360128,3229360383,AT
3229360384,3229361919,US
3229361920,3229362175,BE
3229362176,3229363199,US
3229363456,3229363711,US
-3229363712,3229363967,GB
+3229363712,3229363967,NL
3229363968,3229380607,US
-3229380608,3229380863,DE
+3229380608,3229380863,NL
3229380864,3229381375,US
-3229381376,3229381631,DE
-3229381632,3229381887,PL
+3229381376,3229381887,NL
3229381888,3229382143,AU
3229382144,3229382399,US
3229382656,3229390847,US
3229390848,3229391103,AU
3229391104,3229391359,US
-3229391360,3229391615,CN
-3229391616,3229391871,AT
+3229391360,3229391615,AU
+3229391616,3229391871,NL
3229391872,3229392895,US
3229392896,3229393151,NZ
3229393152,3229394175,US
3229394944,3229408255,RU
3229408256,3229412095,US
-3229412096,3229483007,DE
+3229412096,3229412351,NL
+3229412352,3229414911,DE
+3229414912,3229415167,US
+3229415168,3229415679,NL
+3229415936,3229417215,DE
+3229417472,3229483007,DE
3229483008,3229499647,FI
3229499648,3229500671,US
-3229501440,3229507583,US
-3229515776,3229614847,US
+3229501440,3229614847,US
3229614848,3229615103,GB
-3229615104,3229679103,US
-3229679104,3229679359,EU
-3229679360,3229679615,US
-3229679872,3229680383,DE
-3229680384,3229680895,RO
-3229680896,3229695487,DE
-3229695488,3229700095,US
+3229615104,3229679615,US
+3229679616,3229695487,DE
+3229695488,3229697535,US
+3229697792,3229700095,US
3229700096,3229700351,AT
3229700352,3229701887,US
3229701888,3229702143,TR
3229702144,3229704703,US
3229704704,3229704959,DE
3229705216,3229745151,US
-3229745152,3229749759,FI
-3229749760,3229750015,BE
-3229750016,3229810687,FI
+3229745152,3229810687,FI
3229810688,3229814015,US
3229814016,3229814271,AU
3229814272,3229815807,US
-3229815808,3229816063,DE
+3229815808,3229816063,NL
3229816320,3229817087,US
-3229817088,3229817599,SE
+3229817088,3229817599,NL
3229817600,3229818623,AU
3229818624,3229818879,US
3229818880,3229820927,JM
3229820928,3229830911,US
-3229830912,3229831167,GB
+3229830912,3229831167,NL
3229831168,3229833215,US
-3229833472,3229833727,GB
+3229833472,3229833727,NL
3229833728,3229834495,AU
3229834496,3229834751,US
3229834752,3229835007,CA
3229835008,3229835263,US
-3229835264,3229835519,FI
+3229835264,3229835519,NL
3229835520,3229835775,CA
3229835776,3229838335,US
-3229838336,3229838591,GB
+3229838336,3229838591,NL
3229838592,3229838847,US
3229839104,3229844479,US
3229844480,3229844735,BE
3229844736,3229844991,US
3229845248,3229845503,US
3229845504,3229847295,CA
-3229847296,3229864703,US
-3229864704,3229864959,AP
-3229864960,3229874943,US
+3229847296,3229870335,US
+3229870848,3229874943,US
3229874944,3229875455,AU
3229875456,3229875967,US
-3229876224,3229878271,US
+3229876224,3229877503,US
+3229877760,3229878271,US
3229878528,3229878783,GB
3229878784,3229879039,IT
3229879040,3229879295,NO
3229879296,3229880063,US
-3229880064,3229880319,KR
+3229880064,3229880319,AU
3229880320,3229881087,US
3229881088,3229881343,CA
-3229881344,3229883391,US
+3229881344,3229883135,US
3229883648,3229883903,US
-3229884160,3229884415,JP
-3229884928,3229885183,IT
+3229884160,3229884415,AU
+3229884928,3229885183,NL
3229885184,3229885439,BR
3229885440,3229886719,US
3229886720,3229886975,AU
3229886976,3229889791,US
-3229889792,3229890047,PT
+3229889792,3229890047,NL
3229890048,3229890303,US
-3229890304,3229890559,PT
+3229890304,3229890559,NL
3229890560,3229891583,US
3229891584,3229891839,CA
3229892608,3229900031,US
3229900032,3229900287,AU
3229900288,3229901567,US
3229901568,3229901823,GB
-3229901824,3229937407,US
+3229901824,3229902335,US
+3229902336,3229902591,AU
+3229902592,3229928703,US
+3229928960,3229937407,US
3229937408,3229937663,GB
3229937664,3229937919,US
3229937920,3229938175,CA
3229938176,3229938431,US
-3229938688,3229938943,IL
-3229938944,3229939199,AT
+3229938688,3229939199,NL
3229939200,3229939455,US
3229939456,3229940735,KR
3229940736,3229940991,CH
3229940992,3229941247,AU
3229941248,3229941503,US
-3229941760,3229945343,US
-3229945600,3229945855,PT
+3229942272,3229942783,US
+3229943040,3229943295,US
+3229943552,3229944319,US
+3229944320,3229944575,AU
+3229944576,3229945087,US
+3229945344,3229945599,AU
+3229945600,3229945855,NL
3229945856,3229947135,US
3229947136,3229947391,AU
3229947392,3229948927,US
3229948928,3229949183,IT
3229949184,3229949695,US
3229949696,3229949951,NZ
-3229949952,3229950207,NO
+3229949952,3229950207,NL
3229950208,3229950975,US
-3229950976,3229951231,IL
+3229950976,3229951231,NL
3229951232,3229952255,US
3229952256,3229952511,AU
3229952512,3229955327,US
3229955328,3229955583,NL
3229955584,3229956095,PT
3229956096,3229956607,US
-3229956608,3229956863,GB
+3229956608,3229956863,NL
3229956864,3229958143,US
-3229958144,3229958399,NO
+3229958144,3229958399,NL
3229958400,3229958655,US
-3229958912,3229959167,SG
-3229959168,3229968895,US
+3229958656,3229959167,AU
+3229959168,3229962239,US
+3229963008,3229963519,US
+3229963776,3229967615,US
+3229967872,3229968127,US
+3229968384,3229968895,US
3229969408,3229969663,PT
3229969664,3229969919,AT
3229969920,3229970431,FI
3229970432,3229972735,US
-3229972736,3229972991,SE
+3229972736,3229972991,NL
3229972992,3229975295,US
3229975296,3229975551,GB
3229975552,3230004223,US
-3230004224,3230004479,GB
+3230004224,3230004479,NL
3230004480,3230004991,US
-3230005760,3230006015,ZA
+3230005760,3230006015,MU
3230006016,3230007295,US
3230007296,3230072831,FR
3230072832,3230074623,US
@@ -107859,16 +55080,16 @@
3230074880,3230082559,IT
3230082560,3230082815,US
3230083072,3230084607,US
-3230084608,3230084863,NO
+3230084608,3230084863,NL
3230084864,3230085119,US
3230085120,3230085375,CA
3230085376,3230085631,US
3230085888,3230086143,DE
3230086144,3230086655,GB
3230087168,3230088191,US
-3230088960,3230089215,AT
+3230088960,3230089215,NL
3230089216,3230089727,US
-3230089728,3230089983,GB
+3230089728,3230089983,NL
3230089984,3230090239,US
3230090240,3230090495,GB
3230090496,3230092543,US
@@ -107879,44 +55100,45 @@
3230094336,3230095615,US
3230095616,3230095871,JP
3230096384,3230101503,JP
-3230101504,3230105855,US
-3230105856,3230106111,PT
+3230101504,3230104319,US
+3230104576,3230105855,US
+3230105856,3230106111,NL
3230106112,3230106879,US
-3230106880,3230107135,AT
+3230106880,3230107135,NL
3230107136,3230109439,US
-3230109440,3230109695,NO
+3230109440,3230109695,NL
3230109696,3230109951,US
3230109952,3230115071,CH
3230115072,3230115327,IT
3230115328,3230115583,GR
3230115584,3230116095,BE
3230116096,3230117631,US
-3230117632,3230117887,FR
+3230117632,3230117887,NL
3230117888,3230120191,US
+3230120192,3230120447,NL
3230120448,3230120703,US
3230120704,3230120959,PT
-3230120960,3230125055,US
+3230120960,3230122495,US
+3230123008,3230125055,US
3230125312,3230125567,US
3230125824,3230126335,AU
3230126336,3230126591,US
+3230126592,3230126847,AU
3230126848,3230128639,US
-3230128896,3230129151,PT
+3230128896,3230129151,NL
3230129152,3230129663,US
-3230129664,3230129919,JP
-3230130176,3230130431,US
-3230130432,3230130687,IE
-3230130688,3230131967,US
+3230129664,3230129919,AU
+3230130432,3230130687,NL
+3230130688,3230131711,US
3230131968,3230132991,GB
3230132992,3230137599,US
-3230137600,3230137855,NO
-3230137856,3230138111,PL
+3230137600,3230138111,NL
3230138368,3230140159,US
3230140160,3230140415,MT
3230140416,3230140671,US
3230140672,3230140927,FI
3230140928,3230142975,US
-3230142976,3230143231,GB
-3230143232,3230143487,BE
+3230142976,3230143487,NL
3230143488,3230144255,US
3230144256,3230144511,NL
3230144512,3230145279,US
@@ -107928,28 +55150,27 @@
3230146560,3230147583,US
3230147840,3230148351,US
3230148352,3230148607,AU
-3230148608,3230148863,GB
-3230148864,3230149119,CH
+3230148608,3230149119,NL
3230149120,3230150655,NI
3230150656,3230150911,US
-3230150912,3230151167,PT
+3230150912,3230151167,NL
3230151168,3230151423,US
-3230151424,3230151679,NL
-3230151680,3230151935,PT
+3230151424,3230151935,NL
3230152192,3230152447,FR
3230152448,3230153215,BF
3230153216,3230153471,FR
-3230153472,3230153727,PF
+3230153472,3230153727,AU
3230153728,3230153983,US
-3230153984,3230154239,RU
+3230153984,3230154239,NL
3230154240,3230156543,US
3230156544,3230164991,FI
-3230164992,3230167295,US
+3230165504,3230167295,US
3230167552,3230168063,CA
-3230168832,3230177791,US
+3230168832,3230174463,US
+3230175232,3230177791,US
3230177792,3230178303,GB
3230178304,3230178559,CH
-3230187520,3230210047,US
+3230179328,3230210047,US
3230210048,3230210303,CA
3230210304,3230211839,US
3230211840,3230212095,CN
@@ -108013,61 +55234,77 @@
3230267904,3230269439,US
3230269440,3230271743,GB
3230272512,3230291455,US
-3230291456,3230291711,PT
+3230291456,3230291711,NL
3230291712,3230295039,US
3230295040,3230295295,AU
3230295296,3230296319,US
3230296320,3230297343,NO
-3230297344,3230300159,SE
+3230297344,3230299647,SE
3230301696,3230302207,US
-3230302208,3230302975,CA
-3230302976,3230309119,US
+3230302464,3230302719,CA
+3230302976,3230307327,US
+3230307584,3230309119,US
3230309120,3230309375,NO
3230309376,3230310143,GB
-3230310144,3230316287,US
-3230316288,3230316543,IT
+3230310144,3230310655,US
+3230310912,3230316287,US
+3230316288,3230316543,NL
3230316544,3230316799,US
3230316800,3230317311,CA
-3230317312,3230318591,US
-3230318592,3230318847,GB
+3230317312,3230317567,US
+3230317568,3230317823,AU
+3230318080,3230318591,US
+3230318592,3230318847,NL
3230318848,3230321663,US
3230321664,3230321919,PT
3230321920,3230322175,US
-3230322432,3230327807,US
+3230322432,3230322943,US
+3230323968,3230327807,US
3230327808,3230328063,AT
3230328064,3230328319,GB
3230328320,3230329087,CH
3230329088,3230332927,US
-3230332928,3230333183,GB
+3230332928,3230333183,NL
3230333184,3230333695,US
-3230333696,3230333951,NZ
-3230333952,3230334975,US
-3230334976,3230354943,CA
+3230333696,3230333951,AU
+3230333952,3230334719,US
+3230334976,3230336255,CA
+3230336512,3230339583,CA
+3230339840,3230340095,CA
+3230340352,3230350847,CA
+3230351104,3230354943,CA
3230354944,3230355199,FR
3230355200,3230365183,CA
3230365184,3230365439,US
-3230365440,3230368767,CA
+3230365440,3230367743,CA
+3230368000,3230368511,CA
3230368768,3230370303,US
3230370304,3230370559,CA
-3230370816,3230400511,CA
+3230370816,3230372607,CA
+3230372864,3230383359,CA
+3230383616,3230384127,CA
+3230384384,3230387455,CA
+3230387712,3230400255,CA
3230681088,3230683135,FR
-3230785536,3230823679,US
-3230823680,3230823935,DK
-3230824192,3230824447,FR
+3230787584,3230797311,US
+3230797312,3230797567,SG
+3230797568,3230823679,US
+3230823680,3230823935,NL
+3230824192,3230824447,NL
3230824448,3230825215,US
3230825216,3230825471,GB
3230825472,3230826239,ES
3230826240,3230827007,US
-3230827520,3230827775,AT
-3230827776,3230828031,NZ
+3230827520,3230827775,NL
+3230827776,3230828031,AU
3230828032,3230828543,HU
3230828544,3230829055,GB
3230829568,3230830079,RU
3230830080,3230832127,US
-3230832128,3230832383,NZ
+3230832128,3230832383,AU
3230832384,3230832639,US
-3230832640,3230832895,FI
-3230832896,3230833663,US
+3230832640,3230832895,NL
+3230832896,3230833151,US
3230833664,3230833919,CA
3230833920,3230834175,BR
3230834176,3230835455,US
@@ -108077,56 +55314,57 @@
3230838016,3230840319,IT
3230840320,3230840575,FR
3230840576,3230840831,US
-3230840832,3230841087,JP
-3230841088,3230841343,DE
-3230841600,3230841855,ES
-3230841856,3230843135,US
-3230843136,3230843391,NO
-3230843392,3230844927,US
+3230840832,3230841087,AU
+3230841088,3230841343,NL
+3230841600,3230841855,NL
+3230841856,3230842111,US
+3230842112,3230842367,AU
+3230842624,3230843135,US
+3230843136,3230843391,NL
+3230843392,3230844671,US
3230844928,3230845183,AU
3230845184,3230845951,US
3230845952,3230846207,CZ
3230846208,3230849535,US
-3230849536,3230850047,NZ
+3230849536,3230850047,AU
3230850048,3230851839,US
-3230851840,3230852095,NO
-3230852096,3230852351,GB
+3230851840,3230852351,NL
3230852352,3230852607,BR
+3230853120,3230853375,AU
3230853376,3230853887,FR
3230853888,3230854399,US
3230854400,3230854655,UY
3230854656,3230855167,NO
3230855168,3230855679,US
-3230855680,3230855935,IT
+3230855680,3230855935,NL
3230855936,3230857983,US
3230857984,3230858751,AU
3230858752,3230859007,US
3230859264,3230865151,US
-3230865152,3230865407,GB
-3230865408,3230867967,US
-3230867968,3230868223,IS
+3230865152,3230865407,NL
+3230865664,3230867967,US
+3230867968,3230868223,NL
3230868224,3230868479,US
-3230868480,3230868735,GB
+3230868480,3230868735,NL
3230868992,3230870015,US
-3230870016,3230870271,PL
+3230870016,3230870271,NL
3230870272,3230873343,US
3230873344,3230873599,HK
-3230873600,3230878719,US
+3230873600,3230877183,US
+3230877696,3230878719,US
3230878720,3230879487,PT
3230879488,3230879743,FR
3230879744,3230888447,US
3230888448,3230888703,AU
3230888704,3230895359,US
-3230895360,3230895615,PL
+3230895360,3230895615,NL
3230895616,3230897151,US
3230897408,3230897663,US
-3230897664,3230897919,GB
+3230897664,3230897919,NL
3230898688,3230898943,US
-3230898944,3230899199,PT
-3230899200,3230913023,US
-3230913024,3230913279,BR
-3230913280,3230913535,US
-3230913536,3230913791,GB
+3230898944,3230899199,NL
+3230899200,3230913535,US
+3230913536,3230913791,NL
3230913792,3230914047,CA
3230914048,3230914303,US
3230914304,3230914815,FI
@@ -108134,20 +55372,23 @@
3230915072,3230915327,BR
3230915328,3230915583,GB
3230915584,3230917631,US
-3230917632,3230917887,GB
+3230917632,3230917887,NL
3230917888,3230918399,US
3230918656,3230919423,US
3230919424,3230919679,AU
3230919680,3230922239,US
3230922240,3230922495,AU
-3230922496,3230922751,IT
+3230922496,3230922751,NL
3230922752,3230923519,US
-3230923520,3230923775,EU
-3230923776,3230933247,US
+3230923776,3230924031,US
+3230924032,3230924287,AU
+3230924288,3230924543,US
+3230924800,3230933247,US
3230933248,3230948607,SE
3230948608,3230951167,US
-3230951168,3230951423,PT
-3230951424,3230953471,US
+3230951168,3230951423,NL
+3230951680,3230951935,US
+3230952192,3230953471,US
3230953472,3230954495,CA
3230954496,3230967295,AU
3230967296,3230967551,RU
@@ -108168,27 +55409,26 @@
3230980096,3230980351,GB
3230980352,3230980607,CA
3230980608,3230980863,US
-3230981120,3230981375,IT
-3230981376,3230981631,NZ
+3230981120,3230981375,NL
+3230981376,3230981631,AU
3230981632,3230981887,US
3230981888,3230983935,AU
-3230983936,3230990335,US
+3230983936,3230989823,US
3230990592,3230991103,US
3230991104,3230991359,PL
3230991360,3230991615,US
3230991616,3230991871,FI
3230991872,3230994175,US
-3230994176,3230994431,GB
+3230994176,3230994431,NL
3230994432,3230994687,US
3230994944,3230995199,US
-3230995200,3230995455,ES
+3230995200,3230995455,NL
3230995456,3230995711,AU
3230995712,3230996223,US
3230996480,3230997247,US
-3230997248,3230997503,AT
+3230997248,3230997503,NL
3230997504,3230997759,US
-3230997760,3230998015,SE
-3230998016,3230999039,NL
+3230997760,3230999039,SE
3230999040,3230999295,US
3230999296,3230999551,NL
3230999552,3230999807,AU
@@ -108198,7 +55438,7 @@
3231001088,3231003903,US
3231003904,3231004159,CA
3231004160,3231004415,AU
-3231004416,3231004927,US
+3231004672,3231004927,US
3231004928,3231005183,GB
3231005440,3231005695,FR
3231005696,3231005951,GB
@@ -108207,67 +55447,82 @@
3231010048,3231010303,FR
3231010304,3231010815,NO
3231010816,3231011071,CA
-3231011072,3231014911,US
+3231011328,3231011839,US
+3231012096,3231012863,US
+3231013120,3231013375,US
+3231013888,3231014655,US
3231015168,3231015423,US
3231015424,3231015679,CA
3231015680,3231015935,US
3231015936,3231016191,NO
3231016192,3231016447,US
3231016448,3231016703,NO
-3231016704,3231018495,US
-3231018496,3231018751,IT
+3231016704,3231016959,US
+3231017216,3231018495,US
+3231018496,3231018751,NL
3231018752,3231019007,GB
-3231019008,3231020287,US
+3231019008,3231019775,US
+3231020032,3231020287,US
3231020288,3231020543,GB
3231020544,3231020799,NL
3231020800,3231021567,GB
3231021568,3231021823,US
3231021824,3231022079,CA
3231022080,3231022591,US
-3231022592,3231022847,DE
-3231022848,3231042047,US
+3231022592,3231022847,NL
+3231022848,3231028479,US
+3231028480,3231028735,AU
+3231028736,3231042047,US
3231042048,3231042303,GU
3231042304,3231043839,US
-3231043840,3231044095,JP
-3231044352,3231047935,US
-3231047936,3231048191,GB
-3231048192,3231048447,US
+3231043840,3231044095,AU
+3231044352,3231048447,US
3231048448,3231048703,NL
3231048704,3231049727,US
3231049728,3231049983,AT
3231049984,3231050239,US
3231050496,3231051263,US
3231051264,3231051519,GB
-3231051776,3231057919,US
-3231057920,3231058175,EU
-3231058176,3231060991,US
-3231060992,3231061247,EU
-3231061248,3231070463,US
-3231070720,3231077119,SE
+3231051520,3231051775,AU
+3231051776,3231053055,US
+3231053824,3231055103,US
+3231055872,3231057151,US
+3231057152,3231057407,CA
+3231057408,3231070463,US
+3231070720,3231074559,SE
+3231075072,3231075583,NL
+3231075840,3231077119,SE
3231077120,3231077375,PL
3231077376,3231077631,SE
3231078144,3231078655,US
-3231078656,3231078911,GB
+3231078656,3231078911,NL
3231078912,3231079423,CA
-3231079424,3231079679,GB
+3231079424,3231079679,NL
3231079680,3231079935,US
3231079936,3231080191,NL
-3231080192,3231082495,US
-3231082496,3231082751,PL
+3231080192,3231080447,US
+3231080448,3231080703,AU
+3231080704,3231082495,US
+3231082496,3231082751,NL
3231082752,3231083007,US
3231083008,3231083263,GB
+3231083264,3231083519,AU
3231083520,3231087615,US
3231087616,3231087871,NO
3231087872,3231088127,US
3231088128,3231088383,GT
3231088384,3231088895,US
-3231088896,3231091711,AU
-3231091712,3231091967,GB
+3231088896,3231090687,AU
+3231090944,3231091711,AU
+3231091712,3231091967,NL
3231091968,3231092223,US
3231092480,3231092735,US
+3231092736,3231092991,AU
3231092992,3231093247,US
-3231093248,3231093503,IT
-3231093504,3231101183,US
+3231093248,3231093503,NL
+3231093504,3231094527,US
+3231094784,3231100415,US
+3231100672,3231101183,US
3231101184,3231103231,GB
3231103488,3231103999,US
3231104000,3231104255,NO
@@ -108278,6 +55533,7 @@
3231106304,3231106559,NO
3231106560,3231106815,GB
3231106816,3231107071,US
+3231107072,3231107327,AU
3231107328,3231107583,US
3231107584,3231107839,AU
3231107840,3231108095,AT
@@ -108308,10 +55564,12 @@
3231121408,3231149311,US
3231149312,3231149567,CA
3231149568,3231154431,US
+3231154432,3231154687,AU
3231155200,3231155711,US
3231155712,3231156223,CA
-3231156224,3231162367,US
-3231170560,3231186687,US
+3231156224,3231174655,US
+3231174656,3231182847,CN
+3231182848,3231186687,US
3231186688,3231186943,CN
3231186944,3231188479,US
3231188480,3231188735,NO
@@ -108321,7 +55579,7 @@
3231191296,3231191551,GB
3231191552,3231192575,US
3231193600,3231194111,DE
-3231194112,3231197695,US
+3231194368,3231197695,US
3231197696,3231197951,FR
3231197952,3231198207,US
3231198208,3231198463,GB
@@ -108336,10 +55594,11 @@
3231203072,3231203327,AT
3231203328,3231204351,US
3231204352,3231204607,FI
-3231204608,3231204863,JP
+3231204608,3231204863,AU
3231204864,3231207935,US
3231207936,3231208191,DE
3231208192,3231208959,US
+3231208960,3231209471,AU
3231209472,3231211775,US
3231211776,3231212031,CA
3231212032,3231212287,CH
@@ -108356,7 +55615,11 @@
3231218688,3231218943,BE
3231218944,3231223039,US
3231223040,3231223295,IT
-3231223296,3231225599,US
+3231223296,3231223807,US
+3231223808,3231224063,AU
+3231224064,3231224319,US
+3231224320,3231224575,AU
+3231224576,3231225599,US
3231225600,3231225855,DE
3231226368,3231226879,US
3231226880,3231227135,GB
@@ -108367,15 +55630,20 @@
3231229696,3231229951,FR
3231229952,3231231487,US
3231231488,3231231743,PT
-3231231744,3231234047,US
+3231231744,3231233023,US
+3231233536,3231234047,US
3231234048,3231235071,GB
3231235072,3231236095,US
3231236608,3231236863,US
3231236864,3231237119,CA
-3231237120,3231241215,US
-3231241216,3231241471,JP
-3231241984,3231248639,US
-3231248640,3231248895,GB
+3231237120,3231237375,US
+3231237376,3231237631,AU
+3231237632,3231238911,US
+3231239168,3231241215,US
+3231241216,3231241471,AU
+3231241984,3231244287,US
+3231244544,3231248639,US
+3231248640,3231248895,NL
3231248896,3231249407,US
3231249408,3231249663,GB
3231249664,3231250431,US
@@ -108384,191 +55652,123 @@
3231251712,3231251967,GB
3231251968,3231252223,AT
3231252736,3231252991,US
-3231252992,3231253503,GB
-3231253504,3231255551,US
-3231255552,3231255807,GB
+3231252992,3231253503,NL
+3231253504,3231254015,US
+3231254272,3231254783,US
+3231254784,3231255039,AU
+3231255040,3231255551,US
3231255808,3231256063,PT
-3231256064,3231257087,US
+3231256320,3231257087,US
3231257088,3231257599,HU
-3231257600,3231275007,US
+3231257600,3231258879,US
+3231259136,3231275007,US
3231275008,3231275263,BR
-3231275264,3231275519,CH
+3231275264,3231275519,NL
3231275520,3231276287,US
3231276288,3231276543,AU
3231276544,3231276799,US
3231276800,3231281919,JP
3231281920,3231282175,US
3231282176,3231282431,HU
-3231282432,3231282943,US
+3231282688,3231282943,US
3231282944,3231283199,CL
3231283200,3231283455,BR
3231283456,3231284991,US
-3231284992,3231285247,PL
+3231284992,3231285247,NL
3231285248,3231291647,US
-3231291648,3231291903,GB
+3231291648,3231291903,NL
3231291904,3231292159,US
-3231292160,3231292415,BR
3231292416,3231292927,US
3231292928,3231293183,AU
3231293184,3231294975,US
-3231294976,3231295231,GB
+3231294976,3231295231,NL
3231295232,3231295487,CR
-3231295488,3231295743,BE
+3231295488,3231295743,NL
3231295744,3231296255,US
-3231296256,3231296511,RU
+3231296256,3231296511,NL
3231296512,3231296767,US
3231296768,3231299327,AT
3231299328,3231299583,US
3231300352,3231300607,US
-3231300608,3231300863,SE
-3231300864,3231301119,GB
+3231300608,3231301119,NL
3231301120,3231302143,US
3231302144,3231302399,NO
3231302400,3231302655,US
3231302656,3231303167,AU
3231303168,3231307007,US
-3231307008,3231307263,GB
+3231307008,3231307263,NL
3231307264,3231308031,US
3231308032,3231308287,CA
3231308288,3231308799,US
3231308800,3231309055,CA
-3231309824,3231316735,US
-3231316736,3231316991,NZ
-3231316992,3231322111,US
+3231310848,3231316735,US
+3231316736,3231316991,AU
+3231316992,3231317759,US
+3231318272,3231318783,US
+3231319040,3231322111,US
3231322112,3231324671,SG
3231325184,3231326207,CA
3231326208,3231352831,US
3231352832,3231358975,CA
-3231367168,3231383551,US
+3231358976,3231383551,US
3231383552,3231385599,NO
-3231385600,3231408127,US
-3231416320,3231475199,US
-3231475200,3231475455,PL
-3231475456,3231482879,US
+3231385600,3231477759,US
+3231477760,3231478015,CA
+3231478016,3231482879,US
3231482880,3231483135,BE
3231483136,3231484927,US
-3231484928,3231490047,JP
+3231484928,3231487999,JP
+3231488512,3231488767,JP
+3231489536,3231490047,AU
3231490048,3231490559,US
-3231490560,3231490815,GB
+3231490560,3231490815,NL
3231490816,3231491071,US
-3231491328,3231491583,NZ
+3231491328,3231491583,AU
3231491584,3231491839,US
3231491840,3231492095,GB
3231492096,3231493631,US
3231493632,3231493887,CH
-3231493888,3231499263,US
+3231493888,3231497727,US
+3231497984,3231499263,US
3231499520,3231500031,US
3231500032,3231500287,BM
3231500288,3231502079,US
-3231502080,3231502335,AU
+3231502080,3231502591,AU
3231502592,3231502847,US
-3231502848,3231503103,PT
+3231502848,3231503103,NL
3231503104,3231503615,US
3231503616,3231503871,IT
3231503872,3231504383,US
-3231504640,3231504895,RU
-3231504896,3231506687,US
-3231506688,3231506943,NZ
+3231504640,3231504895,NL
+3231505152,3231505407,US
+3231505408,3231505663,AU
+3231505664,3231506687,US
+3231506688,3231506943,AU
3231506944,3231507199,US
3231507200,3231507455,BE
3231507456,3231508479,US
3231508992,3231509247,US
-3231510272,3231510527,GB
+3231510272,3231510527,NL
3231510528,3231512575,US
3231512576,3231512831,LU
+3231512832,3231513087,AU
3231513088,3231513343,US
-3231513600,3231514623,US
+3231513600,3231514367,US
3231514624,3231515647,NO
3231515648,3231516159,US
-3231516672,3231519231,SE
-3231519744,3231526927,US
-3231526928,3231526943,CA
-3231526944,3231526983,US
-3231526984,3231526991,CA
-3231526992,3231527039,US
-3231527040,3231527047,CA
-3231527048,3231527055,US
-3231527056,3231527063,CA
-3231527064,3231527095,US
-3231527096,3231527103,CA
-3231527104,3231527111,US
-3231527112,3231527127,CA
-3231527128,3231527135,US
-3231527136,3231527143,CA
-3231527144,3231527151,US
-3231527152,3231527159,CA
-3231527160,3231527167,US
-3231527168,3231527423,CA
-3231527424,3231527679,US
-3231527680,3231527967,CA
-3231527968,3231527983,US
-3231527984,3231527991,CA
-3231527992,3231527999,US
-3231528000,3231528015,CA
-3231528016,3231528039,US
-3231528040,3231528047,CA
-3231528048,3231528063,US
-3231528064,3231528079,CA
-3231528080,3231528087,SE
-3231528088,3231528103,CA
-3231528104,3231528119,US
-3231528120,3231528127,GB
-3231528128,3231528159,US
-3231528160,3231528167,CA
-3231528168,3231528183,US
-3231528184,3231528191,GB
-3231528192,3231528447,IN
-3231528448,3231528455,US
-3231528456,3231528511,CA
-3231528512,3231528575,IN
-3231528576,3231528703,CA
-3231528704,3231528959,US
+3231516672,3231518719,SE
+3231518720,3231518975,BR
+3231518976,3231519231,SE
+3231519744,3231521791,US
+3231522560,3231528959,US
3231528960,3231528999,CA
-3231529000,3231529007,US
-3231529008,3231529015,PH
-3231529016,3231529031,LV
-3231529032,3231529039,CA
-3231529040,3231529047,PH
-3231529048,3231529055,CA
-3231529056,3231529063,PH
-3231529064,3231529071,US
-3231529072,3231529119,CA
-3231529120,3231529175,US
-3231529176,3231529191,CA
-3231529192,3231529207,US
-3231529208,3231529215,NL
-3231529216,3231529487,CA
-3231529488,3231529495,US
-3231529496,3231529599,CA
-3231529600,3231529727,US
-3231529728,3231529983,CA
-3231529984,3231530007,US
-3231530008,3231530015,CA
-3231530016,3231530031,US
-3231530032,3231530047,CA
-3231530048,3231530127,US
-3231530128,3231530135,CA
-3231530136,3231530143,US
-3231530144,3231530151,CA
-3231530152,3231530159,US
-3231530160,3231530167,CA
-3231530168,3231530191,US
-3231530192,3231530199,CA
-3231530200,3231530215,US
-3231530216,3231530223,CA
-3231530224,3231530231,US
-3231530232,3231530239,CA
-3231530240,3231530271,US
-3231530272,3231530287,CA
-3231530288,3231530295,US
-3231530296,3231530335,CA
-3231530336,3231530343,US
-3231530344,3231530367,CA
-3231530368,3231530375,US
-3231530376,3231530559,CA
-3231530560,3231539199,US
+3231529000,3231529015,US
+3231529016,3231530751,CA
+3231530752,3231533567,US
+3231534080,3231539199,US
+3231539200,3231547391,CA
3231547392,3231547647,US
-3231547648,3231547903,NO
+3231547648,3231547903,NL
3231547904,3231549951,US
3231549952,3231550207,JP
3231550208,3231550719,DE
@@ -108579,71 +55779,74 @@
3231553024,3231553791,JP
3231553792,3231554047,CH
3231554048,3231555327,DE
-3231555328,3231556095,CA
+3231555328,3231555583,CA
+3231555584,3231556095,US
+3231556096,3231556351,AU
3231556352,3231556607,US
3231556608,3231556863,CA
-3231556864,3231557119,AT
-3231557120,3231557887,US
+3231556864,3231557887,AT
3231557888,3231558399,GB
3231558400,3231558655,DE
3231558656,3231558911,GB
3231558912,3231559167,CA
-3231559168,3231559423,GB
+3231559168,3231559423,NL
3231559424,3231559679,US
-3231559680,3231559935,GB
+3231559680,3231559935,NL
3231559936,3231561983,US
-3231561984,3231562239,IT
+3231561984,3231562239,NL
3231562240,3231562495,US
-3231562496,3231562751,GB
+3231562496,3231562751,NL
3231562752,3231563007,US
-3231563008,3231563263,CH
-3231563264,3231563519,ZA
+3231563008,3231563263,NL
+3231563264,3231563519,MU
+3231563520,3231563775,AU
3231563776,3231583231,US
3231583232,3231584255,CA
-3231584256,3231588863,US
+3231584256,3231586559,US
+3231587328,3231588863,US
3231588864,3231589119,GB
3231589120,3231591679,US
3231591680,3231591935,AU
-3231591936,3231594239,US
-3231594240,3231594495,GB
-3231594496,3231649791,US
+3231591936,3231593983,US
+3231593984,3231594495,GB
+3231594496,3231644927,US
+3231645184,3231645439,US
+3231645696,3231649791,US
3231649792,3231653887,SG
3231653888,3231663103,US
-3231663616,3231663871,FI
+3231663616,3231663871,NL
3231663872,3231664127,CA
3231664128,3231664383,US
-3231664384,3231664639,GB
+3231664384,3231664639,NL
3231664640,3231665407,US
-3231665408,3231665663,IT
+3231665408,3231665663,NL
3231665664,3231667199,US
-3231667200,3231667711,ES
+3231667200,3231667711,NL
3231667712,3231668735,US
3231668736,3231668991,BE
3231669248,3231669503,US
3231669760,3231670015,CA
-3231670016,3231670271,DE
+3231670016,3231670271,NL
3231670272,3231671039,US
3231671040,3231672319,GB
3231672320,3231672575,US
3231672576,3231672831,NL
3231672832,3231673343,US
-3231673344,3231673599,NO
-3231673600,3231673855,IE
+3231673344,3231673855,NL
3231673856,3231674111,US
3231674112,3231674367,CA
3231674368,3231675391,US
-3231675392,3231675903,BR
-3231675904,3231676159,IE
-3231676672,3231676927,FR
-3231676928,3231677183,FI
-3231677440,3231686655,US
+3231675392,3231675647,BR
+3231675904,3231676159,NL
+3231676416,3231677439,NL
+3231677440,3231694847,US
3231694848,3231711231,CA
3231711232,3231713023,US
3231713024,3231713279,CA
3231713280,3231713791,US
3231713792,3231714047,GB
3231714048,3231715071,US
-3231715072,3231715327,SI
+3231715072,3231715327,NL
3231715328,3231715583,AU
3231715584,3231716095,US
3231716096,3231716351,AU
@@ -108653,76 +55856,80 @@
3231717120,3231717375,NO
3231717632,3231718143,US
3231718144,3231718399,IT
-3231718400,3231719679,US
-3231719680,3231719935,ES
+3231718400,3231718655,US
+3231718656,3231718911,AU
+3231718912,3231719679,US
+3231719680,3231719935,NL
3231720192,3231720703,US
-3231720704,3231720959,IT
+3231720704,3231720959,NL
3231720960,3231722751,US
3231722752,3231723007,BR
3231723008,3231723519,US
3231723776,3231724031,US
3231724032,3231724287,BR
-3231724288,3231727871,US
-3231727872,3231728127,DE
-3231728384,3231728639,AT
+3231724288,3231725055,US
+3231725312,3231727871,US
+3231727872,3231728127,NL
+3231728384,3231728639,NL
3231728640,3231729407,US
3231729408,3231729663,AU
3231729664,3231735551,US
3231735552,3231736063,CH
-3231736064,3231738367,US
+3231736064,3231737087,US
+3231737600,3231738367,US
3231738368,3231738623,NL
3231738624,3231739135,US
-3231739136,3231739391,GB
-3231739392,3231739647,PL
+3231739136,3231739647,NL
3231739648,3231739903,BR
3231739904,3231742719,US
-3231742720,3231742975,FR
+3231742720,3231742975,NL
3231742976,3231743487,US
-3231743488,3231743743,NO
+3231743488,3231743743,NL
3231743744,3231743999,US
3231744000,3231744255,BR
3231744256,3231747583,US
-3231747584,3231747839,DE
-3231747840,3231748095,GB
+3231747584,3231748095,NL
3231748096,3231750143,US
3231750144,3231750399,NL
3231750400,3231750911,US
+3231750912,3231751167,AU
3231751168,3231751423,IT
3231751424,3231752191,US
-3231752192,3231752447,IT
-3231752448,3231752703,JP
+3231752192,3231752447,NL
+3231752448,3231752703,AU
3231752704,3231753983,US
3231753984,3231754239,CA
3231754240,3231754495,US
3231754496,3231755263,AU
-3231755264,3231755519,HU
+3231755264,3231755519,NL
3231755520,3231755775,US
3231755776,3231756543,PR
3231756544,3231757311,GB
3231757312,3231759359,US
-3231759360,3231759615,BR
3231759616,3231760895,US
-3231760896,3231761407,GB
+3231760896,3231761151,GB
+3231761152,3231761407,NL
3231761408,3231763711,US
3231763712,3231763967,AU
3231763968,3231768575,US
-3231768576,3231768831,RU
-3231768832,3231769087,NO
+3231768576,3231769087,NL
+3231769088,3231769343,AU
3231769344,3231769855,US
3231769856,3231770111,AU
3231770112,3231770367,US
3231770368,3231770879,AT
3231770880,3231771135,RU
3231771136,3231773951,US
-3231773952,3231775743,PT
-3231775744,3231775999,IL
+3231773952,3231775231,PT
+3231775488,3231775999,NL
3231776000,3231776511,US
3231776768,3231793151,US
-3231793152,3231793663,BE
+3231793152,3231793663,NL
3231794176,3231800319,US
3231800320,3231801343,CN
-3231809536,3231810047,NZ
-3231810560,3231817727,US
+3231801344,3231809535,CA
+3231809536,3231810047,AU
+3231810560,3231825919,US
3231825920,3231842303,CA
3231842304,3231843327,RU
3231843328,3231844351,NO
@@ -108766,7 +55973,7 @@
3231886336,3231888383,PL
3231888384,3231889407,RU
3231889408,3231890431,RO
-3231890432,3231893503,RU
+3231890432,3231892479,RU
3231893504,3231894527,UA
3231895552,3231896575,UA
3231896576,3231897599,RU
@@ -108779,11 +55986,10 @@
3231903744,3231905791,RU
3231905792,3231906047,PL
3231906048,3231907839,RU
-3231907840,3231912959,US
-3231912960,3231913215,AP
+3231907840,3231913215,US
3231913984,3231916031,US
3231916032,3231948799,FI
-3231956992,3231973375,US
+3231948800,3231973375,US
3231973376,3232038911,AT
3232038912,3232039167,SE
3232039168,3232039423,DK
@@ -108792,68 +55998,49 @@
3232047360,3232048639,GB
3232048640,3232049151,SE
3232049152,3232049407,GB
-3232049408,3232051199,SE
-3232051200,3232051455,AT
-3232051456,3232051967,SE
+3232049408,3232051967,SE
3232051968,3232052991,GB
3232052992,3232053247,US
3232053248,3232056063,SE
3232056064,3232056319,IT
-3232056320,3232060159,SE
-3232060160,3232060415,GB
+3232056320,3232060415,SE
3232060416,3232060671,IE
-3232060672,3232060927,IT
-3232060928,3232065791,SE
+3232060672,3232065791,SE
3232065792,3232066303,GB
3232066304,3232066559,SE
3232066560,3232066815,NO
-3232066816,3232067839,SE
-3232067840,3232068095,PL
-3232068096,3232069887,SE
-3232069888,3232070143,CH
-3232070144,3232070399,SE
-3232070400,3232070655,ES
-3232070656,3232079871,SE
+3232066816,3232079871,SE
3232079872,3232080895,GB
3232080896,3232082687,SE
3232082688,3232083199,GB
3232083200,3232083455,SE
3232083456,3232083711,DE
-3232083712,3232086271,SE
-3232086272,3232087039,GB
+3232083712,3232086527,SE
+3232086528,3232087039,GB
3232087040,3232089087,SE
3232089088,3232089343,ES
3232089344,3232090367,SE
3232090368,3232090623,IT
-3232090624,3232092671,SE
-3232092672,3232093183,GB
-3232093184,3232093439,US
+3232090624,3232093439,SE
3232093440,3232093675,GB
-3232093676,3232093676,EU
+3232093676,3232093676,SE
3232093677,3232093695,GB
-3232093696,3232093951,AP
-3232093952,3232094207,GB
-3232094208,3232094719,CH
-3232094720,3232095231,US
+3232093696,3232095231,SE
3232095232,3232096255,GB
-3232096256,3232097279,SE
-3232097280,3232097535,IT
-3232097536,3232098047,SE
+3232096256,3232098047,SE
3232098048,3232098303,FR
3232098304,3232100095,SE
3232100096,3232100351,IE
3232100352,3232101119,GB
-3232101120,3232102144,SE
-3232102145,3232102145,EU
-3232102146,3232104447,SE
-3232104448,3232107519,DE
+3232101120,3232104447,SE
+3232104448,3232106495,DE
3232107520,3232108543,RU
-3232108544,3232129023,DE
+3232108544,3232112639,DE
+3232116736,3232129023,DE
3232129024,3232130047,NL
3232130048,3232131071,UA
3232131072,3232133119,DE
3232133120,3232133631,UA
-3232133632,3232134143,DE
3232134144,3232135167,RU
3232135168,3232135679,PL
3232135680,3232135935,RO
@@ -108866,51 +56053,55 @@
3232142336,3232143359,ES
3232143360,3232156159,DE
3232156160,3232156671,PL
-3232156672,3232159743,DE
+3232157696,3232159743,DE
3232159744,3232160767,PL
-3232160768,3232163839,DE
+3232160768,3232161791,DE
3232163840,3232165887,RU
-3232165888,3232169727,DE
+3232167936,3232168959,DE
+3232169216,3232169727,DE
3232169728,3232169983,PL
-3232169984,3232235519,IT
-3232301056,3232309247,US
+3232169984,3232183295,IT
+3232183296,3232184319,SI
+3232184320,3232235519,IT
+3232301056,3232302335,US
+3232303104,3232303615,US
+3232304128,3232309247,US
3232309248,3232311807,SG
-3232312320,3232325631,US
-3232333824,3232407039,US
+3232312320,3232317951,US
+3232318464,3232399615,US
+3232400384,3232407039,US
3232407040,3232407551,SG
-3232415744,3232432127,US
-3232432128,3232433151,EU
-3232433152,3232433407,FR
-3232433408,3232433663,EU
-3232433920,3232440319,US
-3232448512,3232462847,US
+3232407552,3232432127,US
+3232433920,3232435455,US
+3232436224,3232436735,US
+3232437248,3232440319,US
+3232440320,3232448511,CA
+3232448512,3232461311,US
+3232461824,3232462847,US
3232462848,3232464895,BB
3232464896,3232483327,GB
-3232485376,3232489471,US
-3232497664,3232555007,US
-3232555264,3232555640,US
-3232555641,3232555641,US
-3232555642,3232555775,US
-3232555776,3232560127,JP
-3232560384,3232560895,JP
+3232483328,3232555007,US
+3232555264,3232555775,US
+3232555776,3232557055,JP
+3232557056,3232557311,AU
+3232557568,3232560127,JP
3232560896,3232561663,US
3232561664,3232561919,CA
3232561920,3232562431,US
-3232562432,3232562687,LU
+3232562432,3232562687,NL
3232562688,3232562943,CA
-3232563200,3232565247,GB
+3232563456,3232564479,GB
3232565248,3232567295,US
3232567296,3232569599,NZ
3232570368,3232571391,CA
3232571392,3232595967,US
3232595968,3232598015,GB
-3232600064,3232604159,US
-3232612352,3232628735,US
+3232598016,3232628735,US
3232629248,3232629759,US
3232629760,3232630783,CA
3232630784,3232645119,US
-3232645120,3232647167,AT
-3232649216,3232653311,US
+3232645120,3232646399,AT
+3232647168,3232661503,US
3232661504,3232694271,JP
3232694272,3232702463,US
3232702464,3232703743,FI
@@ -108918,8 +56109,11 @@
3232704000,3232704511,CH
3232704512,3232705535,GB
3232705536,3232706559,FI
-3232706560,3232708607,US
-3232710656,3232718847,US
+3232706560,3232706815,US
+3232707584,3232716799,US
+3232716800,3232724151,CA
+3232724152,3232724159,US
+3232724160,3232727039,CA
3232727040,3232759807,US
3232759808,3232772095,SE
3232772096,3232774143,IT
@@ -108940,100 +56134,125 @@
3232813056,3232820223,SE
3232820224,3232820479,IE
3232820480,3232825343,SE
-3232890880,3233286143,US
+3232825344,3233285375,US
+3233286144,3233288191,US
3233288192,3233292287,CA
-3233316864,3233349631,US
-3233480704,3233484799,US
+3233292288,3233431551,US
+3233431552,3233447935,CA
+3233447936,3233449095,US
+3233449096,3233449103,GB
+3233449104,3233449207,US
+3233449208,3233449215,GB
+3233449216,3233449359,US
+3233449360,3233449367,GB
+3233449368,3233450199,US
+3233450200,3233450207,GB
+3233450208,3233451519,US
+3233451520,3233451775,GB
+3233451776,3233453567,US
+3233453568,3233453823,IT
+3233453824,3233456127,US
+3233456128,3233456383,LV
+3233456384,3233456639,UA
+3233456640,3233457151,CA
+3233457152,3233458687,US
+3233458688,3233458943,HU
+3233458944,3233459199,BG
+3233459200,3233484799,US
3233484800,3233487359,ES
3233487872,3233488895,CA
-3233488896,3233505279,US
-3233513472,3233548287,US
-3233548800,3233549055,PT
+3233488896,3233547519,US
+3233547520,3233547775,CA
+3233547776,3233548287,US
+3233548800,3233549055,NL
3233549056,3233549311,BR
3233549312,3233557247,US
-3233557248,3233557503,NZ
+3233557248,3233557503,AU
3233557504,3233561855,EC
3233561856,3233562367,US
3233562368,3233562879,GB
3233562880,3233563135,FR
3233563136,3233563903,US
-3233563904,3233564159,GB
+3233563904,3233564159,NL
3233564160,3233564415,US
-3233564416,3233564671,NZ
+3233564416,3233564671,AU
3233564672,3233564927,US
-3233564928,3233570047,JP
+3233564928,3233566719,JP
+3233567744,3233568767,JP
+3233568768,3233570047,AU
3233570048,3233570559,US
3233570816,3233571071,GB
3233571072,3233572095,US
3233572096,3233572351,AU
3233572352,3233573119,US
-3233573120,3233573375,NO
+3233573120,3233573375,NL
3233573376,3233573631,US
3233573632,3233573887,AU
3233573888,3233575679,US
3233575680,3233575935,AU
3233575936,3233576191,RU
3233576192,3233576447,GB
-3233576448,3233577215,US
-3233577216,3233577471,AT
-3233577472,3233577727,GB
+3233576448,3233576959,US
+3233576960,3233577983,NL
3233577984,3233578239,US
-3233578240,3233578495,GB
+3233578240,3233578495,NL
3233578496,3233578751,US
-3233578752,3233579007,IE
-3233579264,3233579519,GB
+3233578752,3233579007,NL
+3233579008,3233579263,AU
+3233579264,3233579519,NL
3233579520,3233580031,US
-3233580032,3233580287,GB
+3233580032,3233580287,NL
3233580288,3233581055,US
-3233581056,3233581311,DE
+3233581056,3233581311,NL
3233581312,3233583359,US
-3233583360,3233583615,GB
+3233583360,3233583615,NL
3233583616,3233584895,US
3233584896,3233585151,AU
3233585152,3233586431,US
-3233586432,3233586943,GB
+3233586432,3233586943,NL
3233586944,3233588223,US
3233588224,3233589247,GA
3233589248,3233589759,CA
3233589760,3233590015,CN
3233590528,3233590783,PR
-3233590784,3233591039,PH
-3233591040,3233591295,ID
-3233591296,3233593599,US
+3233590784,3233591295,AU
+3233591552,3233593599,US
3233593600,3233593855,NZ
3233593856,3233594111,AU
-3233594112,3233594367,RU
+3233594112,3233594367,NL
3233594368,3233594623,US
-3233594624,3233594879,RU
+3233594624,3233594879,NL
3233594880,3233595903,US
3233595904,3233596927,EC
-3233596928,3233605887,US
+3233596928,3233597695,US
+3233597952,3233605887,US
3233605888,3233607167,PL
3233607168,3233607935,US
-3233607936,3233608191,NZ
+3233607936,3233608191,AU
3233608192,3233609727,HU
-3233609728,3233611775,US
-3233612032,3233612287,GB
+3233609984,3233610495,US
+3233610752,3233611519,US
+3233612032,3233612287,NL
3233612544,3233613823,US
3233613824,3233614847,GB
3233615104,3233615359,US
-3233615360,3233615615,DE
+3233615360,3233615615,NL
3233615616,3233617151,US
3233617408,3233617663,CA
-3233617664,3233617919,GB
-3233617920,3233618175,JP
+3233617664,3233617919,NL
+3233617920,3233618175,AU
3233619456,3233620479,US
-3233620480,3233620735,NZ
+3233620480,3233620735,AU
3233620736,3233620991,US
3233620992,3233622015,CA
-3233622272,3233622527,GB
+3233622272,3233622527,NL
3233622528,3233624831,US
-3233624832,3233625087,AT
-3233625088,3233625343,GB
+3233624832,3233625343,NL
3233625344,3233625599,US
3233625600,3233625855,AU
-3233625856,3233626111,GB
-3233626112,3233628671,US
+3233625856,3233626111,NL
+3233626112,3233626879,US
+3233627136,3233628671,US
3233628672,3233628927,FR
3233628928,3233629439,CA
3233629440,3233629695,GB
@@ -109041,57 +56260,62 @@
3233629952,3233630463,US
3233630464,3233630719,NL
3233630720,3233630975,US
-3233630976,3233631231,ZA
-3233631232,3233631487,DE
+3233630976,3233631231,MU
+3233631232,3233631487,NL
3233631488,3233631743,US
-3233632000,3233642239,US
+3233632000,3233635839,US
+3233635840,3233636095,AU
+3233636096,3233642239,US
3233642240,3233642495,GB
3233642496,3233646591,US
3233646592,3233646847,AU
3233646848,3233647359,US
-3233647360,3233647871,GA
+3233647360,3233647871,MU
3233647872,3233649663,US
3233649664,3233649919,AU
3233649920,3233650431,US
-3233650432,3233650687,DE
-3233651200,3233651455,IT
+3233650432,3233650687,NL
+3233651200,3233651455,NL
3233651456,3233651967,US
-3233651968,3233652223,GB
+3233651968,3233652223,NL
3233652224,3233652479,US
-3233652736,3233652991,GB
+3233652480,3233652735,AU
+3233652736,3233652991,NL
3233652992,3233654271,US
3233654272,3233655551,GB
3233655552,3233662975,US
-3233663488,3233663999,GB
-3233664000,3233665023,US
+3233663488,3233663999,NL
+3233664256,3233665023,US
3233665024,3233666047,AU
3233666048,3233668863,US
-3233668864,3233669119,PH
+3233668864,3233669119,AU
3233669120,3233670399,US
3233670400,3233670655,AU
-3233671168,3233675263,US
+3233671680,3233675263,US
3233675520,3233676031,US
-3233676032,3233676287,DE
-3233676288,3233684991,US
-3233684992,3233685503,BR
-3233685504,3233688063,US
-3233688576,3233688831,GB
+3233676032,3233676287,NL
+3233676288,3233677055,US
+3233677312,3233679103,US
+3233679360,3233682431,US
+3233682944,3233684991,US
+3233685248,3233685503,BR
+3233685760,3233688063,US
+3233688576,3233688831,NL
3233688832,3233692159,US
-3233692160,3233692671,NO
+3233692160,3233692671,NL
3233692672,3233692927,US
3233692928,3233693183,AU
3233693184,3233693695,US
-3233693696,3233693951,GB
+3233693696,3233693951,NL
3233693952,3233694207,US
3233694208,3233694463,AU
-3233694464,3233694719,GB
+3233694464,3233694719,NL
3233694720,3233694975,US
3233694976,3233695231,FR
3233695232,3233696511,US
3233696512,3233696767,CA
-3233696768,3233697791,US
-3233699840,3233700863,US
-3233701632,3233701887,NO
+3233696768,3233700863,US
+3233701632,3233701887,NL
3233701888,3233704959,US
3233704960,3233705215,NZ
3233705216,3233710335,US
@@ -109101,23 +56325,26 @@
3233721856,3233722111,PT
3233722112,3233723391,US
3233723392,3233723903,AU
-3233723904,3233724415,GB
+3233723904,3233724415,NL
3233724416,3233725439,US
3233725952,3233726975,NO
3233726976,3233728767,US
-3233728768,3233729279,GB
+3233728768,3233729279,NL
3233729280,3233729535,US
-3233729536,3233730047,SG
+3233729536,3233729791,SG
+3233729792,3233730047,AU
3233730560,3233732607,AU
-3233732608,3233736959,US
+3233732608,3233734911,US
+3233735680,3233736959,US
3233736960,3233737983,FR
3233737984,3233738751,US
-3233738752,3233739007,GB
+3233738752,3233739007,NL
3233739008,3233739263,US
-3233739264,3233739519,FR
+3233739264,3233739519,NL
3233739520,3233740543,US
3233740544,3233741311,GB
-3233741312,3233743359,US
+3233741312,3233742591,US
+3233742848,3233743359,US
3233743360,3233743615,CA
3233743616,3233744383,US
3233744384,3233744639,PR
@@ -109171,29 +56398,22 @@
3233803008,3233803263,CA
3233803264,3233808383,US
3233808384,3233873919,TW
-3233873920,3233874943,AU
-3233874944,3233903743,US
-3233903744,3233903807,EU
-3233903808,3233907711,US
-3233907712,3233907967,AP
-3233907968,3233914879,US
-3233914880,3233915135,AP
-3233915136,3233915903,US
-3233915904,3233916159,AP
-3233916160,3233926294,US
+3233873920,3233874175,US
+3233874176,3233874687,AU
+3233874688,3233903615,US
+3233903616,3233903743,GB
+3233903744,3233903807,US
+3233903808,3233903871,GB
+3233903872,3233926294,US
3233926295,3233926295,MX
-3233926296,3233936639,US
-3233936640,3233936895,EU
-3233936896,3233939455,US
-3233939456,3233980671,FI
-3233980672,3233980927,GB
-3233980928,3233991167,FI
-3233991168,3233991423,DE
-3233991424,3234004991,FI
-3234005248,3234005503,GB
+3233926296,3233939455,US
+3233939456,3234004991,FI
+3234005248,3234005503,NL
+3234005504,3234005759,AU
3234006528,3234007039,US
-3234007040,3234007295,RU
+3234007040,3234007295,NL
3234007296,3234007551,US
+3234007552,3234007807,AU
3234007808,3234008063,US
3234008064,3234008831,NZ
3234008832,3234013183,US
@@ -109201,23 +56421,23 @@
3234013696,3234013951,AU
3234013952,3234014207,US
3234014464,3234014975,US
-3234014976,3234015487,KR
+3234014976,3234015487,AU
3234015488,3234015743,US
3234015744,3234015999,IE
3234016000,3234016255,GB
3234016256,3234019327,AU
-3234019328,3234023423,US
-3234023424,3234023679,PL
+3234019840,3234023423,US
+3234023424,3234023679,NL
3234023680,3234024703,US
-3234025472,3234030079,US
-3234030080,3234030335,DE
+3234025472,3234026495,US
+3234026752,3234030079,US
+3234030080,3234030335,NL
3234030336,3234031103,US
3234031104,3234031359,AU
3234031360,3234031871,US
-3234031872,3234032127,GB
-3234032128,3234032383,PL
+3234031872,3234032383,NL
3234032384,3234032895,US
-3234033152,3234033407,IT
+3234033152,3234033407,NL
3234033408,3234033663,US
3234033664,3234033919,AU
3234033920,3234034687,US
@@ -109231,121 +56451,165 @@
3234048000,3234048511,US
3234048512,3234048767,AU
3234048768,3234051839,US
-3234051840,3234052095,NL
-3234052096,3234052351,DE
+3234051840,3234052351,NL
3234052352,3234052607,US
+3234052608,3234052863,AU
3234052864,3234054911,US
-3234054912,3234055167,PT
+3234054912,3234055167,NL
3234055168,3234055423,US
3234055424,3234055679,AU
-3234055680,3234061055,US
-3234061056,3234061311,NZ
-3234061312,3234065407,US
-3234065408,3234065663,GB
+3234055680,3234056959,US
+3234057216,3234061055,US
+3234061056,3234061311,AU
+3234061312,3234064639,US
+3234064640,3234064895,AU
+3234064896,3234065407,US
+3234065408,3234065663,NL
3234065664,3234065919,BR
3234065920,3234070527,US
3234070528,3234110463,FR
-3234110464,3234111487,US
-3234136064,3234172927,CA
+3234110464,3234128455,US
+3234128456,3234128463,GB
+3234128464,3234130695,US
+3234130696,3234130703,AU
+3234130704,3234131183,US
+3234131184,3234131191,GB
+3234131192,3234136063,US
+3234136064,3234150911,CA
+3234151424,3234158847,CA
+3234159104,3234159359,CA
+3234160128,3234164991,CA
+3234164992,3234165247,US
+3234165248,3234167295,CA
+3234167808,3234172927,CA
3234172928,3234173951,US
3234173952,3234175999,CA
3234176000,3234177279,US
3234177280,3234187007,CA
3234187008,3234187519,US
-3234187520,3234192383,CA
+3234187520,3234189055,CA
+3234189312,3234192383,CA
3234192384,3234193663,US
-3234193664,3234201599,CA
+3234193664,3234198783,CA
+3234199040,3234201343,CA
3234201600,3234203647,US
-3234203648,3234205695,BR
-3234205696,3234226175,US
-3234234368,3234239231,US
-3234239232,3234239487,MY
-3234239488,3234240255,US
-3234240256,3234240383,EU
+3234203648,3234205183,BR
+3234205184,3234205439,AR
+3234205440,3234205695,BR
+3234205696,3234208255,US
+3234208768,3234226983,US
+3234226984,3234226991,CA
+3234226992,3234227455,US
+3234227456,3234227711,CA
+3234227712,3234230015,US
+3234230016,3234230271,ES
+3234230272,3234232319,US
+3234232320,3234232575,EG
+3234232576,3234232831,US
+3234232832,3234233087,BR
+3234233088,3234238975,US
+3234238976,3234239487,MY
+3234239488,3234240383,US
3234240384,3234240387,IE
-3234240388,3234240511,EU
-3234240512,3234240607,US
+3234240388,3234240607,US
3234240608,3234240611,IL
-3234240612,3234250751,US
-3234267136,3234269695,US
+3234240612,3234247167,US
+3234247680,3234269695,US
3234270208,3234271231,CA
3234271232,3234275327,PT
3234275328,3234279423,AU
3234279424,3234283519,CA
3234283520,3234310367,US
3234310368,3234310371,HK
-3234310372,3234314239,US
-3234332672,3234349055,US
+3234310372,3234312703,US
+3234313216,3234316287,US
+3234316288,3234320383,CA
+3234320384,3234332671,US
+3234332928,3234334975,US
+3234335744,3234349055,US
3234349056,3234353151,NZ
-3234353152,3234357247,US
-3234365440,3234373631,US
-3234398208,3234400679,US
-3234400680,3234400687,NA
-3234400688,3234401511,US
-3234401512,3234401519,NA
-3234401520,3234549759,US
+3234353152,3234549759,US
3234549760,3234550015,RU
-3234553856,3234556415,US
+3234553856,3234554367,US
+3234554624,3234554879,AU
+3234554880,3234556415,US
3234556416,3234556927,CA
3234556928,3234557439,FI
3234557440,3234564607,US
3234564608,3234566911,KR
3234566912,3234568703,US
-3234568704,3234568959,NZ
+3234568704,3234568959,AU
3234568960,3234569215,US
+3234569216,3234569727,AU
3234569728,3234569983,CL
3234569984,3234574335,US
3234574336,3234574591,AU
3234574592,3234574847,MX
-3234574848,3234579711,US
+3234574848,3234576127,US
+3234576896,3234578687,US
+3234578688,3234578943,AU
+3234578944,3234579711,US
3234579712,3234579967,CA
3234579968,3234581247,US
3234581248,3234581503,CA
3234581504,3234582527,US
+3234582528,3234583039,AU
3234583040,3234583807,US
3234583808,3234584063,AU
3234584064,3234584575,US
-3234584576,3234584831,NZ
+3234584576,3234584831,AU
3234584832,3234585343,US
3234585600,3234587391,US
-3234587392,3234587647,SA
-3234587648,3234588671,US
-3234588672,3234588927,MO
+3234587392,3234587647,NL
+3234587648,3234588415,US
+3234588672,3234588927,AU
3234588928,3234589439,US
3234589440,3234589695,AU
3234589696,3234592511,US
-3234592512,3234592767,TH
-3234592768,3234611199,US
-3234611200,3234615295,US
-3234615296,3234645247,US
-3234645248,3234645759,US
-3234645760,3234725887,US
+3234592512,3234592767,AU
+3234592768,3234594047,US
+3234594816,3234725887,US
3234726144,3234726399,CA
3234726400,3234726911,US
3234726912,3234727935,CA
3234727936,3234733055,US
3234733056,3234733311,CA
-3234733312,3234744319,US
+3234733312,3234735103,US
+3234735616,3234737407,US
+3234738176,3234739455,US
+3234740224,3234742015,US
+3234742272,3234743551,US
3234744832,3234745599,US
3234745600,3234746879,GB
3234746880,3234747903,US
-3234747904,3234748159,IL
+3234747904,3234748159,NL
3234748160,3234749439,US
3234749440,3234750463,CA
-3234750464,3234762751,US
+3234750464,3234751999,US
+3234752000,3234752255,AU
+3234752256,3234753535,US
+3234753536,3234753791,AU
+3234753792,3234754047,US
+3234754560,3234755839,US
+3234755840,3234756095,AU
+3234756096,3234762751,US
3234762752,3234764799,CA
3234764800,3234766335,NZ
3234766336,3234772223,US
3234772224,3234772479,CA
3234772480,3234772735,US
-3234772992,3234781439,US
+3234772992,3234777599,US
+3234778112,3234781439,US
3234781440,3234781951,CA
3234781952,3234782719,US
3234782720,3234783999,IL
-3234784000,3234794495,US
+3234784000,3234791167,US
+3234791424,3234794495,US
3234794752,3234795007,US
-3234795008,3234795263,GB
-3234795264,3234799359,US
+3234795008,3234795263,NL
+3234795264,3234795519,US
+3234795776,3234796031,US
+3234796544,3234799359,US
3234799360,3234799615,NL
3234799616,3234799871,US
3234799872,3234800127,AU
@@ -109354,25 +56618,26 @@
3234801664,3234802431,EC
3234802432,3234803711,US
3234803712,3234803967,PR
-3234804224,3234807807,US
-3234807808,3234808063,TH
+3234804224,3234806783,US
+3234807552,3234807807,US
+3234807808,3234808063,AU
3234808064,3234809087,EC
3234809088,3234810879,US
3234810880,3234811135,CA
3234811136,3234814719,US
-3234814720,3234814975,HK
+3234814720,3234814975,AU
3234814976,3234815999,US
3234816000,3234816767,AU
3234816768,3234820351,US
3234820352,3234820607,AU
-3234820608,3234821887,US
+3234820608,3234820863,US
+3234821120,3234821887,US
3234821888,3234822655,AU
3234822656,3234826751,US
3234826752,3234827007,CA
3234827008,3234827519,US
-3234827520,3234827775,GB
-3234827776,3234828031,LU
-3234828032,3234828287,NZ
+3234827520,3234828031,NL
+3234828032,3234828287,AU
3234828288,3234828799,US
3234828800,3234829055,CL
3234829056,3234830079,US
@@ -109388,88 +56653,57 @@
3234839296,3234839551,AU
3234839552,3234841087,US
3234841088,3234841599,BR
-3234841600,3234841855,PT
+3234841600,3234841855,NL
3234841856,3234842367,AU
3234842368,3234842623,US
3234842624,3234844415,BR
3234844416,3234853375,US
-3234853376,3234853631,TH
+3234853376,3234853631,AU
3234853632,3234853887,US
3234853888,3234854143,EC
3234854144,3234854911,US
3234854912,3234855167,AU
3234855168,3234855935,US
3234856192,3234856447,US
+3234856448,3234856703,AU
3234856960,3234861055,CA
-3234861056,3234897919,US
-3234922496,3234988031,US
-3234988032,3234992127,CA
-3234992128,3235004415,US
+3234861056,3234886143,US
+3234886656,3234926847,US
+3234927616,3234988031,US
+3234988032,3234990847,CA
+3234991104,3234998783,US
+3234999296,3235004415,US
3235004416,3235021823,CA
-3235021824,3235022079,US
-3235022080,3235022143,AU
-3235022144,3235022367,US
-3235022368,3235022383,CA
-3235022384,3235022399,US
-3235022400,3235022423,CA
-3235022424,3235024383,US
-3235024384,3235024447,BG
-3235024448,3235024511,US
-3235024512,3235024639,BG
-3235024640,3235025055,US
-3235025056,3235025071,BD
-3235025072,3235025079,CA
-3235025080,3235025135,US
-3235025136,3235025151,BD
-3235025152,3235026047,US
-3235026048,3235026079,CA
-3235026080,3235026095,US
-3235026096,3235026111,CA
-3235026112,3235026127,US
-3235026128,3235026167,CA
-3235026168,3235026687,US
-3235026688,3235026719,CA
-3235026720,3235026735,US
-3235026736,3235026895,CA
-3235026896,3235026911,BD
-3235026912,3235026943,US
+3235021824,3235026943,US
3235026944,3235028991,CA
-3235028992,3235037695,US
-3235037696,3235037743,CA
-3235037744,3235037791,SE
-3235037792,3235038463,US
+3235028992,3235038463,US
3235038464,3235038719,GB
3235038720,3235045375,US
3235045376,3235046143,CA
-3235046144,3235046271,US
-3235046272,3235046335,GB
-3235046336,3235046351,BD
-3235046352,3235047839,US
-3235047840,3235047871,GB
-3235047872,3235085311,US
+3235046144,3235085311,US
3235085312,3235086335,CA
3235086336,3235184639,US
3235184640,3235184895,CA
3235184896,3235275007,US
3235275776,3235276799,CA
+3235276800,3235278847,US
3235278848,3235282943,BB
3235282944,3235315711,CA
3235315712,3235389439,US
3235389440,3235389951,VE
-3235389952,3235417215,US
-3235417216,3235417223,BR
-3235417224,3235512319,US
+3235389952,3235512319,US
3235512320,3235577855,JP
-3235577856,3235643391,CA
+3235577856,3235641855,CA
+3235642112,3235643135,CA
3235643392,3235774463,US
3235774464,3235776767,CA
3235777536,3235807231,US
3235807232,3235839999,CA
-3235840000,3235856383,US
+3235840000,3235842303,US
+3235843072,3235844095,CA
+3235844096,3235856383,US
3235856384,3235872767,BR
-3235872768,3235876607,US
-3235876608,3235876863,AP
-3235876864,3235880447,US
+3235872768,3235880447,US
3235880448,3235880703,GB
3235880704,3235906303,US
3235906304,3235906559,CA
@@ -109535,42 +56769,40 @@
3235968512,3235968767,CA
3235968768,3235970559,US
3235970560,3235970815,CA
-3235970816,3236044799,US
+3235970816,3235977727,US
+3235978240,3235985663,US
+3235986432,3236010239,US
+3236011008,3236044799,US
3236044800,3236052991,CA
3236052992,3236069375,US
3236069376,3236102143,CA
3236102144,3236106239,PH
-3236106240,3236134911,US
-3236134912,3236134975,CA
-3236134976,3236135039,IL
-3236135040,3236135551,US
-3236135552,3236135567,BD
-3236135568,3236137119,US
-3236137120,3236137151,SE
-3236137152,3236139007,US
-3236139008,3236143103,CA
+3236106240,3236139007,US
+3236139008,3236142079,CA
+3236142080,3236142335,US
+3236142336,3236143103,CA
3236143104,3236167679,US
-3236167680,3236172543,CA
-3236172544,3236172799,US
-3236172800,3236175871,CA
-3236175872,3236192255,US
+3236167680,3236175871,CA
+3236175872,3236200447,US
3236200448,3236233215,MY
-3236233216,3236237567,US
-3236237568,3236237936,EU
-3236237937,3236238591,US
-3236241408,3236249599,US
-3236265984,3236315135,US
-3236364288,3236368127,US
-3236368128,3236368383,NZ
+3236233216,3236238591,US
+3236239360,3236241407,CA
+3236241408,3236302847,US
+3236306944,3236364287,US
+3236364544,3236365567,US
+3236365824,3236368127,US
+3236368128,3236368383,AU
3236368384,3236372991,US
3236372992,3236373247,AU
-3236373504,3236379391,US
+3236373760,3236379391,US
3236379392,3236379647,AU
3236379648,3236380927,US
3236381184,3236381439,CA
-3236381440,3236381695,AT
-3236381696,3236385279,US
-3236385280,3236385535,DE
+3236381440,3236381695,NL
+3236381696,3236383999,US
+3236384000,3236384255,AU
+3236384256,3236385279,US
+3236385280,3236385535,NL
3236385536,3236385791,US
3236386304,3236387071,US
3236387072,3236387327,CA
@@ -109586,50 +56818,74 @@
3236398848,3236399359,AU
3236399616,3236400127,US
3236400128,3236400383,CL
-3236400384,3236406783,US
+3236400384,3236401151,US
+3236401152,3236401407,AU
+3236401408,3236406783,US
3236406784,3236407551,AU
3236407552,3236408063,SG
3236408064,3236408319,US
-3236408320,3236409087,CA
-3236409088,3236409599,BR
-3236409600,3236413695,US
+3236408320,3236409343,CA
+3236409600,3236411135,US
+3236411136,3236411391,AU
+3236411392,3236412415,US
+3236412672,3236413695,US
3236413696,3236413951,AU
3236413952,3236416255,US
3236416256,3236416511,AU
-3236416512,3236418559,US
-3236418560,3236418815,AU
-3236418816,3236427519,US
+3236416512,3236418303,US
+3236418304,3236418815,AU
+3236418816,3236419071,US
+3236419328,3236419583,US
+3236419584,3236419839,AU
+3236419840,3236420095,US
+3236420096,3236420351,AU
+3236420352,3236424959,US
+3236424960,3236425215,MU
+3236425216,3236427519,US
3236427520,3236427775,CA
+3236427776,3236428031,AU
3236428800,3236429311,US
-3236429312,3236429567,ZA
+3236429312,3236429567,MU
3236429824,3236438015,US
-3236446208,3236447487,US
-3236447488,3236447743,AP
-3236447744,3236450047,US
-3236450048,3236450303,EU
-3236450304,3236462591,US
+3236446208,3236462591,US
3236462592,3236470783,AU
-3236495360,3236566783,US
+3236470784,3236560895,US
+3236561152,3236566783,US
3236566784,3236567039,CA
-3236567040,3236585983,US
+3236567040,3236568831,US
+3236569856,3236570367,US
+3236571136,3236575743,US
+3236575744,3236575999,AU
+3236576000,3236583423,US
+3236583680,3236585983,US
3236585984,3236586239,CA
-3236586240,3236604671,US
+3236586240,3236587519,US
+3236588032,3236589823,US
+3236590080,3236591103,US
+3236592128,3236601343,US
+3236601600,3236604671,US
3236604672,3236604927,CA
3236604928,3236610047,US
3236610560,3236611071,US
3236611072,3236612095,CA
-3236612096,3236617471,US
+3236612096,3236612607,US
+3236613120,3236617471,US
3236617728,3236617983,US
3236617984,3236619775,CA
3236619776,3236620031,US
+3236620032,3236620287,AU
3236620288,3236623615,US
3236623616,3236623871,AU
3236623872,3236625919,US
3236625920,3236626175,CA
-3236626432,3236642815,US
+3236626432,3236638719,US
+3236638720,3236642815,BB
+3236642816,3236659199,US
+3236659200,3236691967,CA
3236691968,3236694271,US
3236695040,3236696063,CA
-3236696064,3236708351,US
+3236696064,3236698623,US
+3236699136,3236757503,US
3236757504,3236765695,CA
3236765696,3236774911,US
3236774912,3236775423,HK
@@ -109643,17 +56899,9 @@
3236778752,3236780287,US
3236780288,3236780543,FR
3236780544,3236780799,CH
-3236780800,3236781599,US
-3236781600,3236781615,NL
-3236781616,3236781727,US
-3236781728,3236781759,NL
-3236781760,3236781823,US
+3236780800,3236781823,US
3236781824,3236782335,ES
-3236782336,3236782719,US
-3236782720,3236782751,BE
-3236782752,3236782847,US
-3236782848,3236782911,LU
-3236782912,3236784383,US
+3236782336,3236784383,US
3236784384,3236784895,IT
3236784896,3236785663,US
3236785664,3236785919,DE
@@ -109665,114 +56913,120 @@
3236787968,3236788223,JP
3236788224,3236788479,US
3236788480,3236789503,GB
-3236789504,3236790271,US
+3236789504,3236823039,US
3236823040,3236826111,CH
3236826112,3236827135,CA
-3236829184,3236855807,US
-3236888576,3236958207,US
+3236827136,3236958207,US
3236958208,3236962303,AU
-3236962304,3236978687,US
-3236986880,3236995071,US
-3237019648,3237022291,US
-3237022292,3237022335,CA
-3237022336,3237022367,US
-3237022368,3237022399,CA
-3237022400,3237022447,US
-3237022448,3237022719,CA
-3237022720,3237023231,US
-3237023232,3237023263,CA
-3237023264,3237023279,US
-3237023280,3237023487,CA
-3237023488,3237036031,US
-3237085184,3237154815,US
+3236962304,3236966143,US
+3236966400,3237021695,US
+3237021696,3237023743,CA
+3237023744,3237038079,US
+3237038080,3237038335,CA
+3237038336,3237043967,US
+3237043968,3237044223,CH
+3237044224,3237046015,US
+3237046016,3237046271,RO
+3237046272,3237047039,US
+3237047040,3237047295,FR
+3237047296,3237047551,US
+3237047552,3237047807,IE
+3237047808,3237050111,US
+3237050112,3237050367,GB
+3237050368,3237051903,US
+3237051904,3237052159,TR
+3237052160,3237052287,CA
+3237052288,3237154815,US
3237154816,3237155839,ES
3237155840,3237156863,AU
-3237156864,3237160959,US
+3237156864,3237163007,US
3237163008,3237167103,DM
+3237167104,3237182463,US
+3237182464,3237183487,NL
3237183488,3237216255,US
3237216256,3237281791,JP
-3237281792,3237285119,US
+3237282560,3237284607,US
+3237284608,3237284863,AU
+3237284864,3237285119,US
3237285120,3237285631,AU
3237285632,3237287935,US
3237287936,3237288191,CA
-3237288192,3237290495,US
+3237288192,3237289471,US
+3237289728,3237290495,US
3237291008,3237291263,NZ
3237291264,3237294847,US
3237294848,3237295103,CA
3237295104,3237296639,US
-3237296640,3237297151,SG
+3237296640,3237297151,AU
3237297152,3237297407,CL
-3237297408,3237305087,US
+3237297408,3237300479,US
+3237302528,3237305087,US
3237305088,3237305343,CA
-3237305344,3237308671,US
+3237305344,3237305855,US
+3237305856,3237306111,AU
+3237306112,3237308671,US
3237308672,3237310719,AU
3237310720,3237312767,US
3237312768,3237313023,BO
-3237313024,3237319679,US
-3237319680,3237319935,DZ
+3237313024,3237317631,US
+3237317888,3237319679,US
+3237319680,3237319935,MU
3237319936,3237320703,US
3237320704,3237320959,UA
3237320960,3237321471,US
+3237321472,3237321727,AU
3237321728,3237321983,US
-3237322752,3237325055,US
-3237325056,3237325311,PL
+3237323264,3237325055,US
+3237325056,3237325311,NL
3237325312,3237325823,US
3237325824,3237326079,CA
3237326080,3237328127,US
3237328384,3237328639,US
3237328640,3237328895,CA
3237328896,3237329151,US
-3237329152,3237329407,NZ
+3237329152,3237329407,AU
3237329408,3237330943,US
3237330944,3237331199,AU
3237331456,3237331967,US
-3237331968,3237332223,HK
+3237331968,3237332223,AU
3237332224,3237335039,US
-3237335040,3237335295,HK
+3237335040,3237335295,AU
3237335296,3237335551,US
3237335552,3237337599,AU
3237337600,3237337855,US
-3237338112,3237339391,US
-3237339392,3237339647,GB
+3237337856,3237338367,AU
+3237338368,3237339391,US
+3237339392,3237339647,NL
3237339648,3237340159,US
3237340160,3237340415,CA
3237340416,3237345535,US
3237345536,3237346303,KR
-3237346304,3237349119,US
-3237349120,3237349375,AU
-3237349376,3237366015,US
+3237346304,3237347071,US
+3237347328,3237366015,US
3237366016,3237366271,AU
3237366272,3237412863,US
3237412864,3237415935,GB
3237415936,3237416959,CA
-3237416960,3237437439,US
-3237445632,3237478399,US
+3237416960,3237478399,US
3237478400,3237511167,LK
3237511168,3237548031,US
3237548032,3237552127,KR
-3237552128,3237553154,US
-3237553155,3237553155,GB
-3237553156,3237553922,US
-3237553923,3237553923,EU
-3237553924,3237554434,US
-3237554435,3237554435,AP
-3237554436,3237558271,US
+3237552128,3237553151,US
+3237553152,3237553407,GB
+3237553408,3237568511,US
+3237568512,3237572607,CA
+3237572608,3237576703,US
+3237576704,3237609471,CA
3237609472,3237613567,US
3237613568,3237614591,CA
3237615104,3237615615,US
3237615616,3237616895,CA
-3237617152,3237622015,US
-3237622016,3237622271,AP
-3237622272,3237634309,US
+3237617152,3237634309,US
3237634310,3237634310,GB
-3237634311,3237634601,US
-3237634602,3237634603,EU
-3237634604,3237647103,US
+3237634311,3237647103,US
3237647104,3237647359,AU
-3237647360,3237648639,US
-3237648640,3237648895,AU
-3237648896,3237658623,US
-3237675008,3237681663,US
+3237647360,3237679359,US
+3237679872,3237681663,US
3237681664,3237682943,CA
3237682944,3237684991,US
3237684992,3237685247,CL
@@ -109782,7 +57036,8 @@
3237690624,3237691903,SA
3237691904,3237698303,US
3237698304,3237698559,CA
-3237698560,3237712895,US
+3237698560,3237701631,US
+3237702400,3237712895,US
3237712896,3237713151,AU
3237713152,3237716991,US
3237716992,3237717247,CA
@@ -109792,30 +57047,51 @@
3237724928,3237725183,AU
3237725184,3237725439,CA
3237725440,3237725695,US
+3237726464,3237726719,AU
3237726720,3237726975,GH
3237726976,3237727231,US
3237727232,3237728255,AU
3237728256,3237732863,US
-3237732864,3237733068,DE
-3237733069,3237733070,DE
-3237733071,3237733119,DE
+3237732864,3237733119,NL
3237734144,3237734399,CA
3237734400,3237773311,US
+3237773312,3237777407,CA
+3237777408,3237781503,US
+3237781504,3237785599,CA
+3237785600,3237797887,US
+3237797888,3237801983,CA
3237806080,3237857535,US
3237858304,3237863423,CA
-3237871616,3237887999,US
-3238002688,3238006783,NL
-3238006784,3238007039,GB
-3238007040,3238008831,NL
-3238008832,3238010879,IE
+3237863424,3237867519,US
+3237867520,3237867647,HK
+3237867648,3237867775,US
+3237867776,3237868031,GB
+3237868032,3237868287,HK
+3237868288,3237869311,US
+3237869312,3237869567,CA
+3237869568,3237869823,US
+3237869824,3237869951,PH
+3237869952,3237870079,VN
+3237870080,3237870335,IS
+3237870336,3237870591,US
+3237870592,3237870847,DE
+3237870848,3237870975,KR
+3237870976,3237871103,JP
+3237871104,3237871231,TH
+3237871232,3237871359,TW
+3237871360,3237871615,NZ
+3237871616,3237896191,US
+3237896192,3237900287,PR
+3237900288,3238002687,US
+3238002688,3238008831,NL
+3238008832,3238010879,PL
3238010880,3238017023,CH
3238017024,3238018303,DK
3238018304,3238018559,UA
3238018560,3238018815,FR
3238018816,3238019071,DE
3238019072,3238035711,PL
-3238035712,3238035967,DE
-3238035968,3238037503,RU
+3238035712,3238037503,RU
3238037504,3238039039,LV
3238039040,3238039551,UA
3238039552,3238039807,PL
@@ -109842,7 +57118,6 @@
3238053888,3238054911,RU
3238054912,3238055935,UA
3238055936,3238056959,PL
-3238056960,3238057215,MD
3238057216,3238057471,BG
3238057472,3238057983,RU
3238057984,3238059519,UA
@@ -109851,23 +57126,17 @@
3238060032,3238060287,CH
3238060288,3238060543,RO
3238060544,3238060799,HU
-3238060800,3238061311,UA
-3238061312,3238061567,GB
-3238061568,3238061823,AT
+3238061056,3238061311,UA
3238061824,3238062079,CZ
3238062080,3238062591,CH
-3238062592,3238062847,GB
-3238062848,3238063103,SE
3238063104,3238063359,PL
3238063360,3238063615,CH
-3238063616,3238063871,EU
-3238063872,3238064127,GB
+3238063616,3238063871,DE
3238064128,3238064383,UA
3238064384,3238064639,ES
3238064640,3238064895,PL
3238064896,3238065151,DK
3238065152,3238065407,SI
-3238065408,3238065663,FR
3238065664,3238065919,DE
3238065920,3238066175,UA
3238066176,3238066431,DE
@@ -109880,9 +57149,7 @@
3238067968,3238068223,GB
3238068224,3238133759,IE
3238133760,3238199295,SI
-3238199296,3238201855,DK
-3238201856,3238202111,US
-3238202112,3238264831,DK
+3238199296,3238264831,DK
3238264832,3238330367,IS
3238330368,3238337023,CH
3238337024,3238337535,LI
@@ -109892,7 +57159,8 @@
3238502400,3238504447,RU
3238504448,3238526975,DE
3238526976,3238527231,RU
-3238527232,3238535167,CH
+3238527232,3238530047,CH
+3238530560,3238535167,CH
3238535168,3238536191,SE
3238536192,3238537215,DK
3238537216,3238538495,CH
@@ -109902,32 +57170,34 @@
3238541568,3238541823,PL
3238541824,3238542591,CH
3238542592,3238542847,PL
-3238542848,3238545919,CH
+3238542848,3238545407,CH
3238545920,3238546431,RU
3238546432,3238546943,CH
3238546944,3238547455,UA
-3238547456,3238548991,CH
+3238548480,3238548991,CH
3238548992,3238549503,CZ
3238549504,3238559231,CH
3238559232,3238559487,SE
3238559488,3238562559,CH
3238562560,3238562815,IR
-3238562816,3238573567,CH
+3238562816,3238571263,CH
+3238571520,3238573567,CH
3238573568,3238574079,PL
-3238574080,3238578431,CH
+3238574080,3238574591,CH
+3238575104,3238575615,DE
+3238575616,3238578431,CH
3238578432,3238578687,UA
3238578688,3238578943,CH
3238578944,3238579199,RU
3238579200,3238589951,CH
3238589952,3238590207,LT
-3238590208,3238590975,CH
+3238590208,3238590719,CH
3238590976,3238591231,SA
3238591232,3238592511,CH
3238592512,3238594559,GB
3238594560,3238595583,BE
3238595584,3238595839,SI
-3238595840,3238596095,EU
-3238596096,3238596607,GB
+3238595840,3238596607,GB
3238596608,3238596863,BG
3238596864,3238597119,RU
3238597120,3238597375,DE
@@ -109942,26 +57212,13 @@
3238599680,3238599935,UA
3238599936,3238600703,HU
3238600704,3238604799,DE
-3238604800,3238606335,NL
-3238606336,3238606591,SE
-3238606592,3238607359,NL
-3238607360,3238607871,SE
-3238607872,3238608895,NL
3238608896,3238621183,SE
-3238621184,3238621439,FI
-3238621440,3238621695,FR
-3238621696,3238621951,IT
-3238621952,3238622207,NL
-3238622208,3238622463,NO
-3238622464,3238622719,SE
-3238622720,3238622975,DK
-3238622976,3238623231,GB
3238623232,3238623487,LV
3238623488,3238623743,PL
3238623744,3238623999,CH
3238624000,3238624255,PL
3238624256,3238625279,HU
-3238625280,3238630399,EU
+3238625280,3238630399,LU
3238630400,3238631423,GR
3238631424,3238632959,GB
3238632960,3238633215,UA
@@ -109972,16 +57229,66 @@
3238656512,3238657023,UA
3238657024,3238657535,AT
3238657536,3238657791,GB
-3238657792,3238658047,AT
-3238658048,3238675455,SE
-3238675456,3238675711,DK
-3238675712,3238723071,SE
-3238723072,3238723327,DK
-3238723328,3238801279,SE
-3238801280,3238801343,GB
-3238801344,3239051263,SE
-3239051264,3239051519,CH
-3239051520,3239062271,DE
+3238658048,3238802431,SE
+3238802432,3238804479,NL
+3238804480,3238806527,SE
+3238806528,3238807551,NL
+3238807552,3238821887,SE
+3238821888,3238823935,HR
+3238823936,3238832127,SE
+3238832128,3238833151,NL
+3238833152,3238838271,SE
+3238838272,3238839295,NL
+3238839296,3238847487,SE
+3238847488,3238848511,NL
+3238848512,3238860799,SE
+3238860800,3238862847,HR
+3238862848,3238865919,SE
+3238865920,3238867967,NL
+3238867968,3238887423,SE
+3238887424,3238888447,NL
+3238888448,3238893567,SE
+3238893568,3238894591,NL
+3238894592,3238897663,SE
+3238897664,3238899711,NL
+3238899712,3238901759,SE
+3238901760,3238902783,NL
+3238902784,3238903807,SE
+3238903808,3238905855,HR
+3238905856,3238909951,SE
+3238909952,3238910975,NL
+3238910976,3238911999,SE
+3238912000,3238913023,NL
+3238913024,3238914047,SE
+3238914048,3238916095,HR
+3238916096,3238917119,NL
+3238917120,3238919167,SE
+3238919168,3238920191,NL
+3238920192,3238941695,SE
+3238941696,3238942719,NL
+3238942720,3238967295,SE
+3238967296,3238969343,HR
+3238969344,3238975487,SE
+3238975488,3238977535,HR
+3238977536,3238981631,SE
+3238981632,3238983679,HR
+3238983680,3238986751,SE
+3238986752,3238987775,NL
+3238987776,3238993919,SE
+3238993920,3238995967,HR
+3238995968,3239001087,SE
+3239001088,3239002111,NL
+3239002112,3239008255,SE
+3239008256,3239009279,NL
+3239009280,3239018495,SE
+3239018496,3239020543,HR
+3239020544,3239022591,SE
+3239022592,3239024639,HR
+3239024640,3239026687,SE
+3239026688,3239028735,HR
+3239028736,3239051263,SE
+3239051264,3239053311,DE
+3239054336,3239059455,DE
3239062272,3239062527,ES
3239062528,3239062783,CH
3239062784,3239063039,UA
@@ -109989,7 +57296,8 @@
3239063296,3239063551,UA
3239063552,3239075839,DE
3239075840,3239076095,MT
-3239076096,3239076607,DE
+3239076096,3239076351,DE
+3239076352,3239076607,RU
3239076608,3239076863,PL
3239076864,3239077119,NL
3239077120,3239077375,UA
@@ -109997,14 +57305,11 @@
3239077632,3239077887,PT
3239077888,3239078143,CZ
3239078144,3239078399,UA
-3239078400,3239078655,RU
3239078656,3239078911,PL
3239078912,3239079167,GB
3239079168,3239079423,SI
-3239079424,3239079679,FR
3239079680,3239079935,MD
3239079936,3239088127,DE
-3239088128,3239088639,GB
3239088640,3239088895,DK
3239088896,3239089151,IL
3239089152,3239089407,RO
@@ -110014,7 +57319,6 @@
3239090432,3239090687,ES
3239090688,3239090943,NL
3239090944,3239091199,AT
-3239091200,3239091455,FR
3239091456,3239091711,BG
3239091712,3239091967,UA
3239091968,3239092223,FR
@@ -110022,24 +57326,22 @@
3239104512,3239105279,RU
3239105280,3239105535,CH
3239105536,3239105791,DE
-3239105792,3239106047,RO
-3239106048,3239106559,DE
+3239106048,3239106559,AT
3239106560,3239106815,ES
3239106816,3239107071,CH
3239107072,3239107327,RO
3239107328,3239107583,GR
3239107584,3239107839,CH
-3239107840,3239108095,RO
3239108096,3239109887,DE
3239109888,3239110143,PL
3239110144,3239110655,DE
3239110656,3239110911,RU
3239110912,3239111167,UA
3239111168,3239111423,NL
-3239111424,3239111935,DE
+3239111424,3239111679,DE
3239111936,3239112191,AT
3239112192,3239112447,IL
-3239112448,3239112959,PL
+3239112704,3239112959,PL
3239112960,3239113215,CH
3239113216,3239113471,AT
3239113472,3239113727,ES
@@ -110051,13 +57353,16 @@
3239116544,3239116799,PL
3239116800,3239117055,PT
3239117056,3239117311,SI
-3239117312,3239119871,DE
+3239117312,3239117823,DE
+3239118336,3239118591,DE
+3239118848,3239119871,DE
3239119872,3239120127,GB
3239120128,3239120383,CZ
3239120384,3239120639,PL
3239120896,3239121663,DE
3239121664,3239121919,FR
-3239121920,3239127039,DE
+3239121920,3239123967,DE
+3239124992,3239127039,DE
3239127040,3239127295,PT
3239127296,3239127551,PL
3239127552,3239127807,IL
@@ -110070,8 +57375,7 @@
3239130112,3239130367,RU
3239130368,3239130623,JO
3239130624,3239130879,PL
-3239131136,3239133183,DE
-3239133184,3239133439,CH
+3239132160,3239133183,DE
3239133440,3239133695,GB
3239133696,3239133951,ES
3239133952,3239134207,SE
@@ -110090,8 +57394,8 @@
3239138304,3239138559,PL
3239138560,3239138815,CH
3239138816,3239141375,DE
-3239141376,3239143423,US
-3239143424,3239147519,DE
+3239141376,3239145471,US
+3239145472,3239147519,DE
3239147520,3239149567,SG
3239149568,3239160319,GB
3239160320,3239160575,RU
@@ -110102,12 +57406,9 @@
3239161600,3239161855,HU
3239161856,3239162623,DE
3239162624,3239162879,BE
-3239162880,3239163903,DE
3239163904,3239164159,PL
3239164160,3239164671,DE
3239164672,3239164927,GB
-3239164928,3239165183,DK
-3239165184,3239165951,DE
3239165952,3239166207,FR
3239166208,3239166463,DE
3239166464,3239166719,CH
@@ -110133,27 +57434,23 @@
3239172096,3239172607,UA
3239172608,3239172863,SE
3239172864,3239173119,DE
-3239173120,3239173375,RO
3239173376,3239173631,DE
3239173632,3239173887,AT
3239173888,3239174143,PL
3239174400,3239174655,RO
3239174656,3239174911,GB
3239174912,3239175167,SI
-3239175168,3239175423,UA
3239175424,3239175679,BG
3239175680,3239175935,DE
-3239175936,3239176191,FI
3239176192,3239180287,DE
3239180288,3239181311,CZ
3239181312,3239181567,AT
-3239181568,3239181823,UA
-3239181824,3239205887,DE
+3239181824,3239182079,DE
+3239182336,3239205887,DE
3239205888,3239206143,US
3239206144,3239264255,DE
3239264256,3239264767,NO
3239264768,3239266303,RU
-3239266304,3239266815,PL
3239266816,3239267327,UA
3239267328,3239267839,FR
3239267840,3239268351,DE
@@ -110164,12 +57461,10 @@
3239270912,3239271423,SA
3239271424,3239271935,AT
3239271936,3239272447,CH
-3239272448,3239272959,UA
3239272960,3239273471,GB
3239273472,3239273983,UA
3239273984,3239274495,RU
3239274496,3239275007,PL
-3239275008,3239275519,RO
3239275520,3239276543,UA
3239276544,3239277055,LU
3239277056,3239277567,DE
@@ -110178,8 +57473,7 @@
3239278592,3239279103,RU
3239279104,3239280127,PL
3239280128,3239280639,RU
-3239280640,3239281663,IR
-3239281664,3239282687,UA
+3239281664,3239282687,RU
3239282688,3239283711,FI
3239283712,3239284735,PL
3239284736,3239285247,IR
@@ -110199,17 +57493,15 @@
3239296768,3239297023,GB
3239297024,3239298047,RO
3239298048,3239299071,GB
-3239300096,3239301119,UA
3239301120,3239302143,FR
3239302144,3239303167,PL
3239303168,3239304191,FR
-3239304192,3239305215,SI
+3239304192,3239305215,HR
3239305216,3239306239,NL
3239306240,3239307263,UA
3239307264,3239308287,EG
3239308288,3239309311,DE
3239309312,3239311359,UA
-3239311360,3239312383,FR
3239312384,3239313407,UA
3239313408,3239445759,DE
3239445760,3239446015,PL
@@ -110227,7 +57519,6 @@
3239465728,3239465983,PL
3239465984,3239466239,UA
3239466240,3239466495,AT
-3239466496,3239466751,FI
3239466752,3239467007,GB
3239467008,3239467263,RU
3239467264,3239467519,GB
@@ -110240,13 +57531,10 @@
3239469056,3239470591,DE
3239470592,3239470847,CH
3239470848,3239471103,BG
-3239471104,3239471871,DE
3239471872,3239472127,FR
3239472128,3239474943,DE
3239474944,3239475199,ES
-3239475200,3239479807,DE
-3239479808,3239480063,UA
-3239480064,3239480319,FR
+3239475200,3239477247,DE
3239480320,3239480575,UA
3239480576,3239480831,RO
3239480832,3239481087,CH
@@ -110254,7 +57542,6 @@
3239481344,3239486719,DE
3239486720,3239486975,ES
3239486976,3239487487,DE
-3239487488,3239487743,GB
3239487744,3239487999,PL
3239488000,3239488255,AT
3239488256,3239488511,CH
@@ -110262,10 +57549,7 @@
3239488768,3239489023,RO
3239489024,3239489279,DE
3239489280,3239489535,PL
-3239489536,3239496959,DE
-3239496960,3239497215,EU
-3239497216,3239501823,DE
-3239501824,3239505919,BE
+3239489536,3239501823,DE
3239505920,3239506431,DE
3239506432,3239506687,RU
3239506688,3239506943,GB
@@ -110280,22 +57564,20 @@
3239509504,3239509759,CH
3239509760,3239510015,DE
3239510016,3239510271,UA
-3239510272,3239521023,DE
-3239521024,3239521279,AP
-3239521280,3239522303,DE
+3239510272,3239511039,DE
+3239511552,3239511807,DE
+3239512064,3239514111,DE
+3239518208,3239521791,DE
3239522304,3239522559,PL
3239522560,3239522815,SI
-3239522816,3239523071,LT
3239523072,3239523327,PL
3239523328,3239523583,BG
3239523584,3239523839,UA
3239523840,3239524095,PL
-3239524096,3239524351,SE
3239524352,3239524607,DE
3239524608,3239524863,SE
3239524864,3239525119,UA
3239525120,3239525375,LT
-3239525376,3239525631,UA
3239525632,3239525887,PL
3239525888,3239526143,SI
3239526144,3239526399,PL
@@ -110305,7 +57587,6 @@
3239539456,3239539711,BE
3239539712,3239539967,GB
3239539968,3239540223,SE
-3239540224,3239540479,GR
3239540480,3239540735,DE
3239540736,3239540991,GB
3239540992,3239541247,FR
@@ -110314,7 +57595,6 @@
3239541760,3239542015,GB
3239542016,3239542271,PL
3239542272,3239542527,RU
-3239542528,3239542783,FR
3239542784,3239544831,DE
3239544832,3239545087,GB
3239545088,3239545343,SI
@@ -110330,7 +57610,6 @@
3239550720,3239550975,NO
3239550976,3239554047,DE
3239554048,3239554303,SE
-3239554304,3239554559,DK
3239554560,3239554815,PL
3239554816,3239555071,UA
3239555072,3239556095,DE
@@ -110347,10 +57626,11 @@
3239568128,3239568383,FR
3239568384,3239568639,SE
3239568640,3239568895,NO
-3239568896,3239575295,DE
+3239568896,3239573759,DE
+3239574016,3239574783,DE
+3239575040,3239575295,DE
3239575296,3239575551,DK
-3239575552,3239575807,RO
-3239575808,3239579135,DE
+3239575552,3239578879,DE
3239579136,3239579391,PL
3239579392,3239581695,DE
3239581696,3239581951,PL
@@ -110360,39 +57640,35 @@
3239582720,3239582975,GB
3239582976,3239583231,IT
3239583232,3239583487,UA
-3239583488,3239583743,RO
-3239583744,3239591935,DE
+3239583744,3239584767,DE
+3239585024,3239585279,DE
+3239587840,3239591935,DE
3239591936,3239592447,FI
3239592448,3239592703,US
-3239592704,3239592959,FI
-3239592960,3239593215,EU
-3239593216,3239593983,FI
+3239592704,3239593983,FI
3239593984,3239624703,DE
3239624704,3239625727,CH
3239625728,3239626751,RU
3239626752,3239628799,PL
3239628800,3239629823,DE
-3239629824,3239630847,FR
3239630848,3239631871,DE
3239631872,3239632895,UA
-3239632896,3239633919,DE
-3239633920,3239634943,FR
-3239634944,3239635967,RU
-3239635968,3239636991,DE
+3239632896,3239636991,DE
3239636992,3239638015,BG
3239638016,3239639039,PL
-3239639040,3239640063,SI
+3239639040,3239639551,SI
+3239639552,3239639807,CZ
+3239639808,3239640063,SI
3239640064,3239641087,DE
3239641088,3239643135,PL
3239643136,3239645183,RU
-3239645184,3239665663,DE
+3239645184,3239653375,DE
+3239653376,3239657471,NL
+3239657472,3239665663,DE
3239666176,3239666687,AT
3239666688,3239667199,DE
3239667200,3239667711,CH
-3239667712,3239668223,RO
-3239668224,3239668735,UA
-3239668736,3239669247,PL
-3239669248,3239670271,RO
+3239667712,3239670271,RO
3239670272,3239670783,DE
3239670784,3239671295,GB
3239671296,3239671807,DE
@@ -110410,26 +57686,25 @@
3239687168,3239687679,UA
3239687680,3239688191,DE
3239688192,3239688703,PL
-3239688704,3239689727,GB
+3239688704,3239689215,GB
3239689728,3239690239,RU
3239690240,3239690495,ES
3239690496,3239690751,PL
3239691008,3239691263,FR
3239691264,3239691519,IT
3239691520,3239691775,FR
-3239691776,3239692031,EU
+3239691822,3239691822,GB
3239692032,3239692287,AT
-3239692288,3239697407,DE
+3239692288,3239695871,DE
3239697408,3239697663,HR
3239697664,3239697919,RU
-3239697920,3239698431,PL
-3239698432,3239706367,DE
+3239697920,3239698175,PL
+3239698432,3239704575,DE
+3239706112,3239706367,DE
3239706368,3239706623,UA
-3239706624,3239706879,RU
3239706880,3239707135,NL
-3239707136,3239707391,RU
3239707392,3239707647,UA
-3239707648,3239707903,CH
+3239707648,3239707903,GB
3239707904,3239708159,DE
3239708160,3239708415,SE
3239708416,3239708671,RO
@@ -110437,7 +57712,6 @@
3239708928,3239709183,NL
3239709184,3239709439,RO
3239709440,3239709695,FR
-3239709696,3239709951,DE
3239709952,3239710207,UA
3239710464,3239710719,DE
3239710720,3239710975,RU
@@ -110445,8 +57719,6 @@
3239711232,3239711487,BY
3239711488,3239711743,RU
3239711744,3239711999,UA
-3239712000,3239712255,PL
-3239712256,3239712511,DE
3239712512,3239712767,GB
3239712768,3239713023,DE
3239713024,3239713279,PL
@@ -110464,34 +57736,26 @@
3239739904,3239740159,CH
3239740160,3239740415,PL
3239740416,3239740671,DK
-3239740672,3239740927,GB
3239740928,3239741183,UA
3239741184,3239741439,RU
3239741440,3239759871,DE
-3239759872,3239760127,RU
3239760128,3239760383,UA
-3239760384,3239760895,PL
-3239760896,3239761151,RU
-3239761152,3239761407,GB
+3239760640,3239760895,PL
3239761408,3239761663,RU
-3239761664,3239761919,PL
3239761920,3239762175,BG
3239762176,3239762431,RU
3239762432,3239762687,DK
-3239762688,3239762943,RO
3239762944,3239763199,SI
3239763200,3239763455,SE
-3239763456,3239763967,GB
+3239763456,3239763711,GB
3239763968,3239772159,DE
3239772160,3239772415,NL
-3239772416,3239772671,GB
+3239772416,3239772671,IE
3239772672,3239773183,DK
3239773184,3239773439,FR
3239773440,3239773951,PL
3239773952,3239774207,SA
-3239774208,3239774463,PL
3239774464,3239774719,ES
-3239774720,3239774975,FR
3239774976,3239775231,PT
3239775232,3239782399,DE
3239782400,3239782655,AT
@@ -110500,13 +57764,12 @@
3239783168,3239783423,CH
3239783424,3239783679,DK
3239783936,3239784191,DE
-3239784192,3239784447,FR
+3239784192,3239784447,ES
3239784448,3239788543,DE
-3239788544,3239789055,EU
3239789056,3239789567,DE
3239789568,3239790079,FR
3239790080,3239790591,RO
-3239790592,3239791103,LV
+3239790592,3239791103,NL
3239791104,3239791615,CH
3239792128,3239792639,FR
3239792640,3239793151,UA
@@ -110532,22 +57795,20 @@
3239826944,3239827455,RU
3239827456,3239827967,DK
3239827968,3239828479,CH
-3239828480,3239828735,EU
-3239828736,3239828991,DE
-3239828992,3239830015,RU
+3239828480,3239828991,DE
+3239828992,3239829503,RU
3239830016,3239830527,CH
-3239830528,3239831039,SE
-3239831040,3239832063,RU
+3239831040,3239831551,RU
3239832064,3239832575,UA
3239832576,3239834111,RU
3239834112,3239834623,UA
3239834624,3239835135,AT
-3239835648,3239836159,RU
3239836160,3239836671,DK
3239836672,3239837183,DE
3239837184,3239837695,SE
3239837696,3239837951,PL
-3239837952,3239839231,DE
+3239837952,3239838463,DE
+3239838720,3239839231,DE
3239839232,3239839487,RU
3239839488,3239839743,DE
3239839744,3239839999,SK
@@ -110555,7 +57816,7 @@
3239840512,3239840767,DE
3239840768,3239841023,AT
3239841024,3239841279,NL
-3239841280,3239848447,DE
+3239841536,3239848447,DE
3239848448,3239848703,CH
3239848960,3239849215,RU
3239849216,3239849471,GB
@@ -110568,18 +57829,14 @@
3239859968,3239860223,CA
3239860224,3239860479,DE
3239860480,3239860735,FI
-3239860736,3239860991,DE
-3239860992,3239861247,AT
+3239860736,3239861247,DE
3239861248,3239861503,UA
-3239861504,3239861759,PL
3239861760,3239862015,SA
3239862016,3239862271,IT
3239862272,3239874559,DE
-3239874560,3239874815,NL
3239874816,3239875071,DE
3239875072,3239875327,SI
3239875328,3239875583,DK
-3239875584,3239875839,PL
3239875840,3239876095,DK
3239876096,3239876351,DE
3239876352,3239876607,RO
@@ -110594,13 +57851,10 @@
3239878656,3239882751,DE
3239882752,3239883007,GB
3239883008,3239883263,UA
-3239883264,3239883316,EU
-3239883317,3239883317,GB
-3239883318,3239883519,EU
+3239883264,3239883519,GB
3239883520,3239883775,RU
3239883776,3239884031,DE
-3239884032,3239884287,IR
-3239884288,3239884543,GB
+3239884032,3239884287,RU
3239884544,3239884799,FR
3239884800,3239885055,UA
3239885056,3239885311,CH
@@ -110609,43 +57863,40 @@
3239885824,3239886079,CH
3239886080,3239886335,PL
3239886336,3239886591,RU
-3239886592,3239886847,FR
3239886848,3239888895,DE
3239888896,3239889151,UA
3239889152,3239889407,GB
-3239889408,3239889663,CZ
3239889664,3239889919,FI
3239889920,3239890175,AT
3239890176,3239890431,FR
3239890432,3239890687,NL
-3239890688,3239895039,DE
+3239890688,3239894015,DE
3239895040,3239895295,DK
3239895296,3239895551,TR
3239895552,3239895807,PL
3239895808,3239896063,DK
-3239896064,3239896319,DE
-3239896320,3239896575,AT
+3239896064,3239896575,DE
3239896576,3239896831,PL
3239896832,3239897087,HU
-3239897088,3239897343,GB
+3239897088,3239897343,IE
3239897344,3239897599,FR
3239897600,3239897855,RU
3239897856,3239898111,FR
3239898112,3239898367,NO
-3239898368,3239898623,GB
3239898624,3239898879,DE
3239898880,3239899135,RU
3239899136,3239901695,DE
3239901696,3239901951,BG
3239901952,3239902207,DE
-3239902208,3239902463,PL
3239902464,3239902719,RU
3239902720,3239902975,EE
-3239903232,3239907327,DE
+3239903232,3239904767,DE
+3239905024,3239907327,DE
3239907328,3239907583,UA
3239907584,3239908095,DE
3239908096,3239908351,RU
-3239908352,3239913215,DE
+3239908352,3239911423,DE
+3239912960,3239913215,DE
3239913216,3239913471,LT
3239913472,3239915519,DE
3239915520,3239915775,PL
@@ -110656,12 +57907,16 @@
3239916800,3239917055,KZ
3239917056,3239917311,DE
3239917312,3239917567,BG
-3239917568,3239935999,DE
-3239936000,3239936255,UA
+3239919616,3239922687,DE
+3239922688,3239922724,LU
+3239922725,3239922725,DE
+3239922726,3239922943,LU
+3239922944,3239935999,DE
3239936256,3239936511,FR
3239936512,3239938815,DE
3239938816,3239939071,NL
-3239939072,3239951103,DE
+3239939072,3239950335,DE
+3239950848,3239951103,DE
3239951104,3239951359,AT
3239951360,3239954431,DE
3239954432,3239954687,UA
@@ -110676,10 +57931,11 @@
3239959808,3239960063,BE
3239960064,3239960319,FR
3239960320,3239960575,GB
-3239960576,3239968511,DE
+3239960576,3239968255,DE
3239968512,3239968767,PL
3239968768,3239969023,NO
-3239969280,3239974911,DE
+3239969536,3239971839,DE
+3239972864,3239974911,DE
3239974912,3239975935,GB
3239975936,3239976191,RO
3239976192,3239976447,DE
@@ -110688,7 +57944,6 @@
3239978752,3239979007,RU
3239979264,3239979519,GB
3239979520,3239979775,DE
-3239979776,3239980031,SI
3239980032,3239996415,DE
3239996416,3239996671,GB
3239996672,3239996927,PL
@@ -110701,17 +57956,13 @@
3240005632,3240009727,DE
3240009728,3240009983,PL
3240009984,3240010239,IL
-3240010240,3240010495,GB
3240010496,3240010751,AT
3240010752,3240011007,HU
-3240011008,3240011263,DE
3240011520,3240011775,CH
3240011776,3240026111,DE
3240026112,3240027135,FR
3240027136,3240028159,BG
-3240028160,3240028160,GB
-3240028161,3240028161,EU
-3240028162,3240029183,GB
+3240028160,3240029183,GB
3240029184,3240030207,RU
3240030208,3240032255,UA
3240032256,3240033279,RS
@@ -110719,26 +57970,26 @@
3240033536,3240033791,UA
3240033792,3240034303,RO
3240034304,3240034559,RU
-3240034560,3240037887,DE
+3240034560,3240035327,DE
+3240035840,3240037375,DE
3240037888,3240038143,AT
-3240038144,3240038399,DK
-3240038400,3240083455,DE
+3240038400,3240040447,DE
+3240042496,3240048639,DE
+3240049664,3240083455,DE
3240083456,3240085503,RU
3240085504,3240087551,KZ
3240087552,3240098815,DE
3240098816,3240099327,CH
-3240099328,3240099839,DE
-3240099840,3240100690,GB
-3240100691,3240100691,EU
-3240100692,3240102911,GB
+3240099584,3240099839,DE
+3240100096,3240100863,GB
+3240101376,3240101887,GB
+3240102144,3240102399,GB
3240102912,3240103935,UA
-3240103936,3240104703,GB
+3240104192,3240104703,GB
3240104704,3240104959,NL
3240104960,3240105215,RU
3240105216,3240105471,UA
-3240105472,3240107583,GB
-3240107584,3240107599,EU
-3240107600,3240109055,GB
+3240105472,3240109055,GB
3240109056,3240109567,PL
3240109568,3240112639,GB
3240112640,3240112895,PL
@@ -110755,16 +58006,20 @@
3240116224,3240116479,DE
3240116480,3240116735,DK
3240116736,3240117247,RO
-3240117248,3240118271,EU
+3240117248,3240118271,RU
3240118272,3240120319,ES
3240120320,3240120831,IR
-3240120832,3240125439,GB
+3240120832,3240121343,GB
+3240122368,3240124927,GB
3240125440,3240125695,RO
-3240125696,3240165375,GB
+3240125696,3240132607,GB
+3240140800,3240142847,GB
+3240153088,3240159231,GB
+3240161536,3240161791,GB
+3240163840,3240165375,GB
3240165376,3240165887,PL
3240165888,3240166399,ES
3240166400,3240166911,PL
-3240166912,3240167423,RO
3240167424,3240167935,PL
3240167936,3240168447,RU
3240168448,3240168959,FR
@@ -110792,7 +58047,6 @@
3240180736,3240181247,NL
3240181248,3240181759,RU
3240181760,3240182271,UA
-3240182272,3240182783,RO
3240182784,3240183295,RU
3240183296,3240183807,NL
3240183808,3240184319,GB
@@ -110800,7 +58054,6 @@
3240184832,3240185343,GB
3240185344,3240185855,FR
3240185856,3240187391,RU
-3240187392,3240187903,UA
3240187904,3240188415,RU
3240188416,3240188927,RO
3240188928,3240189439,MD
@@ -110810,10 +58063,8 @@
3240190976,3240191487,RU
3240191488,3240191999,AE
3240192000,3240192511,UA
-3240192512,3240193023,RO
3240193024,3240193535,GB
3240193536,3240194047,PL
-3240194048,3240194559,GB
3240194560,3240195071,AT
3240195072,3240195583,GB
3240195584,3240196095,RO
@@ -110821,12 +58072,9 @@
3240197120,3240197631,PL
3240197632,3240198143,CZ
3240198144,3240198655,CH
-3240198656,3240199167,RO
3240199168,3240199679,RU
3240199680,3240200191,NL
-3240200192,3240200703,RO
-3240200704,3240201215,SE
-3240201216,3240201727,RO
+3240200704,3240201215,GB
3240201728,3240202239,CH
3240202240,3240202751,RU
3240202752,3240203263,GB
@@ -110837,7 +58085,7 @@
3240205312,3240205823,GB
3240205824,3240206335,DE
3240206336,3240206847,RU
-3240206848,3240207871,RO
+3240207360,3240207871,RO
3240207872,3240208127,RU
3240208128,3240208895,FR
3240208896,3240209407,GB
@@ -110855,7 +58103,6 @@
3240216064,3240216575,GB
3240216576,3240217087,RO
3240217088,3240217599,UA
-3240217600,3240218111,RU
3240218112,3240218623,UA
3240218624,3240219135,NL
3240219136,3240219647,AT
@@ -110872,11 +58119,11 @@
3240225280,3240225791,IL
3240225792,3240226303,UA
3240226304,3240226815,CH
-3240226816,3240227839,RU
+3240226816,3240227327,RU
3240227840,3240228351,GB
3240228352,3240228863,SE
3240228864,3240229375,GB
-3240229376,3240230399,RO
+3240229376,3240229887,RO
3240230400,3240230911,GB
3240230912,3240231935,PL
3240231936,3240232959,NL
@@ -110886,22 +58133,21 @@
3240237056,3240239103,DE
3240239104,3240240127,FR
3240240128,3240241151,US
-3240241152,3240241407,EU
-3240241408,3240242175,FI
+3240241152,3240242175,FI
3240242176,3240243199,PL
-3240243200,3240244223,GB
+3240243200,3240243711,GB
+3240243712,3240244223,DE
3240244224,3240245247,PL
3240245248,3240246271,IL
3240246272,3240247295,UA
3240247296,3240248319,RS
3240248320,3240249343,DE
-3240249344,3240251391,UA
+3240249344,3240250367,UA
3240251392,3240252415,IE
3240252416,3240253439,LT
3240253440,3240254463,BE
3240254464,3240256511,UA
-3240256512,3240256767,EU
-3240256768,3240257535,DE
+3240256512,3240257535,DE
3240257536,3240258559,FO
3240258560,3240259583,RO
3240259584,3240260607,PL
@@ -110940,8 +58186,6 @@
3240280064,3240280191,DE
3240280192,3240280319,SE
3240280320,3240280447,PL
-3240280448,3240280575,UA
-3240280576,3240280703,GB
3240280704,3240280831,RU
3240280832,3240280959,GB
3240280960,3240281215,PL
@@ -110968,12 +58212,13 @@
3240287232,3240288255,PL
3240288256,3240296447,GB
3240296448,3240296703,RO
-3240296704,3240302847,GB
+3240296704,3240296959,GB
+3240297472,3240300543,GB
3240302848,3240303103,UA
-3240303104,3240304639,GB
+3240303104,3240303359,GB
+3240303616,3240304639,GB
3240304640,3240305663,RU
3240305664,3240305919,PL
-3240305920,3240306175,IE
3240306176,3240306687,RU
3240306688,3240306943,BG
3240306944,3240307199,PL
@@ -110997,9 +58242,13 @@
3240324352,3240324607,RU
3240324608,3240324863,PL
3240324864,3240325119,SI
-3240325120,3240361983,GB
+3240325120,3240334335,GB
+3240336640,3240353791,GB
+3240355840,3240361983,GB
3240361984,3240362239,TR
-3240362240,3240370175,GB
+3240362240,3240362495,DE
+3240362496,3240362751,GB
+3240363008,3240370175,GB
3240370176,3240370431,CH
3240370432,3240370687,DE
3240370688,3240370943,GB
@@ -111014,38 +58263,35 @@
3240373248,3240373503,RO
3240373504,3240373759,FR
3240373760,3240374015,DE
-3240374016,3240374271,IT
-3240374272,3240407039,GB
+3240374016,3240374271,GB
+3240378368,3240394751,GB
+3240395264,3240398847,GB
+3240400896,3240407039,GB
3240407040,3240407295,IL
3240407296,3240407551,NL
3240407552,3240407807,NO
-3240407808,3240408063,NL
-3240408064,3240408319,DE
-3240408320,3240408575,CH
3240408576,3240408831,FR
3240408832,3240409087,PL
3240409088,3240409343,TR
-3240409344,3240409599,GB
3240409600,3240409855,NL
3240409856,3240410367,DE
3240410368,3240410623,AT
3240410624,3240410879,PT
3240410880,3240411135,NO
3240411136,3240419327,RO
-3240419328,3240419839,GB
3240419840,3240420095,AT
-3240420096,3240420351,DE
-3240420352,3240420607,RO
3240420608,3240420863,NL
-3240420864,3240436735,GB
+3240420864,3240421375,GB
+3240423424,3240435711,GB
+3240436224,3240436735,GB
3240436736,3240437759,DE
3240437760,3240454911,GB
3240454912,3240455167,IN
-3240455168,3240460287,GB
+3240456192,3240460287,GB
3240460288,3240461055,IL
3240461056,3240461567,DE
3240461568,3240461823,UA
-3240461824,3240462079,EU
+3240461824,3240462079,RU
3240462080,3240462335,TR
3240462336,3240462591,RO
3240462592,3240462847,RU
@@ -111061,25 +58307,30 @@
3240465408,3240465919,DE
3240465920,3240466175,FR
3240466176,3240466687,DE
-3240466688,3240466943,AO
+3240466688,3240466943,PT
3240466944,3240467199,TR
-3240467200,3240467455,NL
3240467456,3240467711,UA
3240467712,3240467967,RU
-3240467968,3240468223,GB
+3240467968,3240468223,DE
3240468224,3240468479,CH
-3240468480,3240487935,GB
+3240468480,3240486911,GB
+3240487424,3240487935,GB
3240487936,3240488191,CH
3240488192,3240488447,GB
3240488448,3240488703,BG
3240488704,3240488959,NL
3240488960,3240493055,GB
3240493056,3240501247,SE
-3240501248,3240505343,GB
+3240503296,3240504319,GB
+3240505088,3240505343,GB
3240505344,3240505599,PL
-3240505600,3240536640,GB
+3240505600,3240505855,GB
+3240506368,3240506623,GB
+3240507392,3240529919,GB
+3240534016,3240536640,GB
3240536641,3240536641,US
-3240536642,3240575487,GB
+3240536642,3240550399,GB
+3240558592,3240575487,GB
3240575488,3240575743,RO
3240575744,3240575999,GB
3240576000,3240576255,DE
@@ -111104,9 +58355,11 @@
3240589312,3240593407,SE
3240593408,3240594175,GB
3240594176,3240594431,DK
-3240594432,3240609791,GB
+3240594432,3240599551,GB
+3240602624,3240605695,GB
3240609792,3240611839,DE
-3240611840,3240622079,GB
+3240611840,3240613887,GB
+3240615936,3240622079,GB
3240622080,3240622591,RU
3240622592,3240624127,GB
3240624128,3240689663,EE
@@ -111119,13 +58372,9 @@
3240693248,3240693759,ES
3240693760,3240695807,BE
3240695808,3240697855,ES
-3240697856,3240698111,SE
3240698112,3240698367,LV
-3240698368,3240698623,GB
3240698624,3240699135,SI
3240699136,3240699391,DE
-3240699392,3240699647,UA
-3240699648,3240699903,NO
3240699904,3240700159,LT
3240700160,3240700415,AT
3240700416,3240700671,BE
@@ -111134,7 +58383,6 @@
3240701184,3240701439,LV
3240701440,3240701695,ES
3240701952,3240702975,UA
-3240702976,3240703999,DE
3240704000,3240705023,GR
3240705024,3240706047,UA
3240706048,3240707071,BG
@@ -111143,7 +58391,6 @@
3240709120,3240710143,RU
3240710144,3240710399,UA
3240710400,3240710655,LT
-3240710656,3240710911,DE
3240710912,3240711167,FR
3240711168,3240711679,IT
3240711680,3240711935,RU
@@ -111151,19 +58398,15 @@
3240712192,3240712447,UA
3240712448,3240712703,SI
3240712704,3240712959,CH
-3240712960,3240713215,IT
-3240713216,3240713471,GB
3240713472,3240713727,RU
3240713728,3240713983,AT
3240713984,3240714239,FR
3240714240,3240716287,GB
3240716288,3240718335,CH
3240718336,3240718847,PL
-3240718848,3240719359,PT
3240719360,3240719871,DE
3240719872,3240720383,SE
3240720384,3240720895,DE
-3240720896,3240721407,RO
3240721408,3240721919,DE
3240721920,3240722431,RO
3240722432,3240723455,UA
@@ -111175,7 +58418,7 @@
3240727040,3240727551,DZ
3240727552,3240728063,CH
3240728064,3240728575,GR
-3240728576,3240729599,GB
+3240728576,3240729087,GB
3240729600,3240730111,DK
3240730112,3240730623,BE
3240730624,3240731647,ES
@@ -111190,14 +58433,13 @@
3240739072,3240739327,CH
3240739328,3240739583,FR
3240739584,3240739839,LV
-3240739840,3240740095,US
+3240739840,3240740095,DE
3240740096,3240740351,LT
3240740352,3240740607,IT
3240740608,3240741119,DE
3240741120,3240741375,AT
3240741376,3240741631,IL
3240741632,3240741887,RU
-3240741888,3240742143,LV
3240742144,3240742399,IT
3240742400,3240742655,RO
3240742656,3240742911,AT
@@ -111211,7 +58453,6 @@
3240746496,3240747007,FR
3240747008,3240747263,SE
3240747264,3240747519,TR
-3240747520,3240747775,RU
3240747776,3240748031,ES
3240748032,3240748287,AT
3240748288,3240748543,GR
@@ -111220,14 +58461,14 @@
3240749312,3240749567,BE
3240749568,3240749823,ES
3240749824,3240750335,IT
-3240750336,3240750591,LU
3240750592,3240750847,FR
3240750848,3240751103,UA
3240751104,3240752127,ES
3240752128,3240754175,RO
3240754176,3240755199,DE
-3240755200,3240755455,IE
-3240755456,3240791551,IT
+3240755200,3240759295,IT
+3240771584,3240779775,IT
+3240788992,3240791551,IT
3240791552,3240791807,RU
3240791808,3240792063,ES
3240792064,3240792319,GB
@@ -111235,7 +58476,6 @@
3240792576,3240792831,CH
3240792832,3240793087,PL
3240793088,3240793343,UA
-3240793344,3240793599,RU
3240793600,3240794111,FR
3240794112,3240794367,GB
3240794368,3240794879,PL
@@ -111244,62 +58484,58 @@
3240795648,3240795903,CH
3240795904,3240796159,SE
3240796160,3240808959,IT
-3240808960,3240809215,GB
3240809216,3240809471,PL
3240809472,3240809727,NL
3240809728,3240809983,FR
-3240809984,3240810239,GR
3240810240,3240810495,SE
3240810496,3240810751,TR
-3240810752,3240811007,GB
3240811008,3240811263,PL
-3240811264,3240811519,FR
3240811520,3240811775,SA
3240811776,3240812031,DE
3240812032,3240812287,HU
3240812288,3240812543,KW
-3240812544,3240813567,IT
3240813568,3240814591,PL
-3240814592,3240818687,IT
-3240818688,3240819715,NL
-3240819716,3240819716,EU
-3240819717,3240820735,NL
+3240814592,3240816639,IT
+3240818688,3240819711,NL
+3240819712,3240819715,GB
+3240819716,3240819716,NL
+3240819717,3240819967,GB
+3240819968,3240820735,NL
3240820736,3240820799,FR
3240820800,3240820831,CY
3240820832,3240820863,GB
3240820864,3240820991,PL
-3240820992,3240823807,IT
+3240820992,3240822783,IT
3240823808,3240824319,PL
-3240824320,3240827135,IT
+3240824320,3240825855,IT
+3240826880,3240827135,IT
3240827136,3240827391,FR
3240827392,3240827647,BG
3240827648,3240827903,CH
-3240827904,3240828159,IT
3240828160,3240828415,DE
3240828416,3240837119,IT
-3240837120,3240837375,GB
-3240837376,3240840447,IT
+3240839424,3240839679,IT
+3240840192,3240840447,IT
3240840448,3240840703,PL
3240840704,3240840959,RU
-3240840960,3240841215,GB
3240841216,3240843263,IT
3240843264,3240843775,NL
3240843776,3240844031,PL
-3240844032,3240844543,NL
+3240844288,3240844543,NL
3240844544,3240844799,CH
3240845056,3240845311,UA
-3240845312,3240846847,IT
+3240845312,3240845823,IT
+3240846336,3240846847,IT
3240846848,3240847359,VA
3240847360,3240852735,IT
3240852736,3240852991,GB
-3240852992,3240853247,IT
3240853248,3240853503,RU
3240853504,3240854527,VA
3240854528,3240855039,IT
3240855040,3240855295,RU
-3240855296,3240857599,IT
+3240855552,3240857599,IT
3240857600,3240857855,PL
-3240857856,3240858623,IT
+3240857856,3240858367,IT
3240858624,3240858879,PL
3240859136,3240859391,NL
3240859392,3240859647,SE
@@ -111321,47 +58557,23 @@
3240877568,3240879103,UA
3240879104,3240880127,PL
3240880128,3240881151,RU
-3240881152,3240882175,EU
3240882176,3240883199,PL
3240883200,3240884223,IL
3240884224,3240886271,UA
-3240886272,3240952071,SE
-3240952072,3240952079,IE
-3240952080,3240952087,SE
-3240952088,3240952095,GB
-3240952096,3240952127,US
-3240952128,3240953343,SE
-3240953344,3240953375,RU
-3240953376,3240953415,SE
-3240953416,3240953423,GB
-3240953424,3240954495,SE
-3240954496,3240954623,DE
-3240954624,3240955647,SE
-3240955648,3240955903,GB
-3240955904,3240961151,SE
-3240961152,3240961279,GB
-3240961280,3240961791,SE
-3240961792,3240961799,FI
-3240961800,3240969087,SE
-3240969088,3240969215,CA
-3240969216,3240988159,SE
-3240988160,3240988167,PL
-3240988168,3240988223,SE
-3240988224,3240988287,CA
-3240988288,3241017343,SE
+3240886272,3241017343,SE
3241017344,3241017855,AT
3241017856,3241018111,RU
3241018112,3241029119,AT
3241029120,3241029375,UA
3241029376,3241029631,PL
-3241029632,3241032703,AT
+3241029632,3241031679,AT
+3241032192,3241032703,AT
3241032704,3241032959,RU
3241032960,3241033215,GB
3241033216,3241033727,DE
3241033728,3241033983,IL
3241033984,3241034239,RU
3241034240,3241034495,UA
-3241034496,3241034751,DE
3241034752,3241035007,PL
3241035008,3241035263,DK
3241035264,3241035519,RO
@@ -111372,8 +58584,6 @@
3241036544,3241036799,SI
3241036800,3241037055,GB
3241037056,3241037311,RU
-3241037312,3241037567,BE
-3241037568,3241037823,DK
3241037824,3241038079,NL
3241038080,3241038335,UA
3241038336,3241038591,DE
@@ -111385,15 +58595,14 @@
3241040128,3241040383,UA
3241040384,3241040639,GB
3241040640,3241040895,RO
-3241040896,3241063423,AT
+3241040896,3241062399,AT
3241063424,3241063679,IT
3241063680,3241063935,PL
3241063936,3241064191,DE
3241064192,3241064447,GB
3241064448,3241064703,DE
3241064704,3241065471,PL
-3241065472,3241068543,AT
-3241068544,3241068799,GB
+3241065472,3241066495,AT
3241068800,3241069311,UA
3241069312,3241069567,FR
3241069568,3241070079,GB
@@ -111401,31 +58610,25 @@
3241070336,3241070847,RU
3241070848,3241071103,AT
3241071104,3241071359,UA
-3241071360,3241071615,RU
3241071616,3241071871,PL
3241071872,3241072127,RU
3241072128,3241072383,BE
3241072384,3241072639,DE
-3241072640,3241073919,AT
+3241073664,3241073919,AT
3241073920,3241074175,GB
-3241074176,3241076735,AT
-3241076736,3241076991,GR
-3241076992,3241077759,AT
+3241074432,3241076735,AT
+3241077248,3241077759,AT
3241077760,3241078015,LV
3241078016,3241078271,PL
3241078272,3241078527,ES
3241078528,3241078783,DE
3241078784,3241082879,AT
3241082880,3241083135,FR
-3241083136,3241084927,CH
-3241084928,3241085183,AP
-3241085184,3241100799,CH
-3241100800,3241101055,UA
+3241083136,3241100287,CH
3241101056,3241101311,DK
3241101312,3241101567,RO
3241101568,3241101823,DE
3241101824,3241102079,BG
-3241102080,3241102335,RO
3241102336,3241102591,ES
3241102592,3241102847,DE
3241102848,3241103359,NL
@@ -111435,7 +58638,6 @@
3241104128,3241104383,GB
3241104384,3241104639,ES
3241104640,3241104895,UA
-3241104896,3241105151,ES
3241105152,3241105407,RU
3241105408,3241108223,CH
3241108224,3241108735,DE
@@ -111449,7 +58651,7 @@
3241118720,3241118975,CH
3241118976,3241119231,FR
3241119232,3241119487,DK
-3241119488,3241119743,EU
+3241119488,3241119743,LT
3241119744,3241119999,RO
3241120000,3241120255,ES
3241120256,3241120511,RU
@@ -111484,40 +58686,56 @@
3241146112,3241146367,PL
3241146368,3241146623,IL
3241146624,3241146879,RO
-3241146880,3241148415,CH
+3241146880,3241147903,CH
+3241148160,3241148415,CH
3241148416,3241476095,FR
-3241476096,3241481727,BE
+3241476608,3241477631,BE
+3241478144,3241481727,BE
3241481728,3241481983,PT
3241481984,3241482239,DE
3241482240,3241484799,SE
-3241484800,3241485311,BE
-3241485312,3241485567,GB
-3241485568,3241496575,BE
+3241484800,3241496575,BE
3241496576,3241496831,AT
3241496832,3241497343,BE
3241497344,3241497599,UA
3241497600,3241497855,SE
3241497856,3241498111,DK
3241498112,3241498367,BE
-3241498368,3241498623,RO
3241498624,3241498879,NO
3241498880,3241499135,UA
-3241499136,3241499903,BE
+3241499648,3241499903,BE
3241499904,3241500159,DE
3241500160,3241500671,GB
3241500672,3241501439,BE
-3241501440,3241501951,GB
-3241501952,3241502975,BE
+3241501440,3241501440,GB
+3241501696,3241501696,GB
+3241501697,3241502463,BE
3241503232,3241503487,RS
3241503488,3241508095,BE
3241508096,3241508351,NL
3241508352,3241541375,BE
3241541376,3241541631,PL
-3241541632,3241724415,FR
+3241541632,3241672703,FR
+3241673472,3241689087,FR
+3241691136,3241699327,FR
+3241699584,3241699839,FR
+3241699840,3241700095,SE
+3241700096,3241723903,FR
+3241724160,3241724415,FR
3241724416,3241724671,RU
-3241724672,3241803775,FR
+3241724672,3241724927,FR
+3241725952,3241740287,FR
+3241740544,3241748479,FR
+3241750528,3241752831,FR
+3241754368,3241758719,FR
+3241759744,3241763071,FR
+3241763072,3241763327,DE
+3241763328,3241771007,FR
+3241772032,3241789439,FR
+3241789696,3241789951,FR
+3241790464,3241790975,FR
+3241793536,3241803775,FR
3241803776,3241803823,CY
-3241803824,3241803831,EU
3241803832,3241803839,GB
3241803840,3241804031,CY
3241804032,3241820159,BE
@@ -111528,7 +58746,6 @@
3241843456,3241843711,CH
3241843712,3241848063,BE
3241848064,3241851391,CH
-3241851392,3241851903,GR
3241851904,3241852927,GB
3241852928,3241854463,SK
3241854464,3241854975,GB
@@ -111548,71 +58765,48 @@
3241864192,3241864447,TR
3241864704,3241864959,SE
3241864960,3241865215,IT
-3241865216,3241865471,DE
3241865472,3241865727,NO
3241865728,3241865983,CH
3241865984,3241866239,RO
3241866240,3241866751,DE
3241866752,3241867007,UA
3241867008,3241867263,FR
-3241867520,3241867775,PL
3241867776,3241868031,NO
3241868032,3241868287,RU
3241868288,3241868543,HR
3241868544,3241868799,DE
-3241868800,3241869055,UA
3241869056,3241869311,BY
3241869312,3241934847,PL
3241934848,3242196991,GB
3242196992,3242393599,FI
-3242393600,3242394471,NL
-3242394472,3242394479,DE
-3242394480,3242403583,NL
-3242403584,3242403591,GB
-3242403592,3242419967,NL
-3242419968,3242420223,EU
-3242420224,3242426113,NL
-3242426114,3242426114,EU
-3242426115,3242459135,NL
+3242393600,3242459135,NL
3242459136,3242467327,BG
3242467328,3242475519,HU
3242475520,3242483711,LV
-3242483712,3242493029,BG
-3242493030,3242493030,BG
-3242493031,3242524671,BG
+3242483712,3242524671,BG
3242524672,3242590207,NO
3242590208,3242655743,IT
3242655744,3242721279,NO
3242721280,3242852351,CH
-3242852352,3242911231,BE
-3242911232,3242911743,NL
-3242911744,3242917887,BE
+3242852352,3242917887,BE
3242917888,3242950655,NO
3242950656,3242983423,BE
3242983424,3243048959,IT
3243048960,3243114495,SI
-3243114496,3243150847,NL
-3243150848,3243151103,IT
-3243151104,3243223615,NL
-3243223616,3243223623,NO
-3243223624,3243223695,NL
-3243223696,3243223703,PT
-3243223704,3243245567,NL
-3243245568,3243297791,AT
-3243297792,3243298047,SI
-3243298048,3243376639,AT
-3243376640,3243441919,GB
-3243441920,3243442175,MT
+3243114496,3243238143,NL
+3243238144,3243238399,US
+3243238400,3243245567,NL
+3243245568,3243376639,AT
+3243376640,3243442175,GB
3243442176,3243507711,AT
3243507712,3243507967,GB
-3243507968,3243509759,CZ
+3243509248,3243509759,CZ
3243509760,3243510015,RU
3243510016,3243510271,NL
-3243510272,3243511807,CZ
-3243511808,3243512063,GB
+3243510272,3243510527,CZ
+3243510784,3243511807,CZ
3243512064,3243512319,UA
3243512320,3243512575,FR
-3243512576,3243512831,UA
3243512832,3243513087,DE
3243513088,3243513343,GR
3243513344,3243513855,UA
@@ -111621,10 +58815,9 @@
3243514368,3243514623,IE
3243514624,3243514879,DK
3243514880,3243515135,AT
-3243515136,3243515391,CH
-3243515392,3243515647,DE
+3243515136,3243515391,PL
3243515648,3243515903,RU
-3243515904,3243520511,CZ
+3243515904,3243519999,CZ
3243520512,3243520767,UA
3243520768,3243521023,GB
3243521024,3243521279,AT
@@ -111637,54 +58830,48 @@
3243524864,3243525119,NL
3243525120,3243525375,CZ
3243525376,3243525631,RO
-3243525632,3243525887,CZ
3243525888,3243526143,PL
3243526144,3243526399,UA
3243526400,3243526655,FR
-3243526656,3243526911,PL
3243526912,3243527167,SE
-3243527168,3243527679,UA
-3243527680,3243527935,GB
+3243527168,3243527423,RU
+3243527424,3243527679,UA
3243527936,3243528191,PL
3243528192,3243529215,CZ
3243529216,3243529471,BE
-3243529472,3243529727,GB
3243529728,3243529983,BG
3243529984,3243530239,GB
-3243530240,3243530495,RU
3243530496,3243530751,FR
3243531008,3243531263,DE
-3243531264,3243531775,CZ
3243531776,3243532031,AT
3243532032,3243532287,DE
3243532288,3243536383,CZ
3243536384,3243536639,AT
-3243536640,3243536895,CH
3243536896,3243537151,CZ
-3243537152,3243537407,RO
-3243537408,3243544063,CZ
+3243537408,3243537919,CZ
+3243538432,3243540991,CZ
+3243542528,3243543551,CZ
3243544064,3243544319,GB
3243544320,3243544575,NL
3243544576,3243552767,CZ
3243552768,3243553023,NL
3243553024,3243553279,FR
3243553280,3243553535,DE
-3243553536,3243553791,PL
-3243553792,3243554303,DE
+3243554048,3243554303,DE
3243554304,3243554559,PL
3243554560,3243554815,MD
3243554816,3243555071,LV
3243555072,3243555327,RO
3243555328,3243555583,CZ
-3243555584,3243555839,FR
-3243555840,3243565055,CZ
+3243556864,3243565055,CZ
3243565056,3243569151,GB
-3243569152,3243570687,CZ
+3243570432,3243570687,CZ
3243570688,3243570943,PL
-3243570944,3243571711,CZ
-3243571712,3243571967,GB
+3243570944,3243571199,CZ
+3243571456,3243571711,CZ
3243571968,3243572223,GR
-3243572224,3243572991,CZ
+3243572224,3243572479,CZ
+3243572736,3243572991,CZ
3243572992,3243573247,RU
3243573248,3243704319,CZ
3243704320,3243769855,SK
@@ -111696,16 +58883,12 @@
3243982848,3243991039,HU
3243991040,3243999231,BE
3243999232,3244031999,NO
-3244032000,3244034047,GR
-3244034048,3244035071,CY
-3244035072,3244097535,GR
+3244032000,3244097535,GR
3244097536,3244098559,DE
-3244098560,3244099583,GB
3244099584,3244100607,FR
3244100608,3244102655,UA
3244102656,3244103679,CH
3244103680,3244104703,BG
-3244104704,3244105727,DE
3244105728,3244107775,GB
3244107776,3244108799,RO
3244108800,3244109823,GB
@@ -111716,9 +58899,8 @@
3244114944,3244115967,PL
3244115968,3244116991,SK
3244116992,3244118015,UA
-3244118016,3244120063,GB
+3244119040,3244120063,GB
3244120064,3244122111,PL
-3244122112,3244123135,A2
3244123136,3244124159,UA
3244124160,3244125183,PL
3244125184,3244126207,UA
@@ -111754,31 +58936,9 @@
3244161024,3244163071,NO
3244163072,3244228607,FI
3244228608,3244261375,TN
-3244261376,3244268031,IE
-3244268032,3244268159,LU
-3244268160,3244277359,IE
-3244277360,3244277367,GB
-3244277368,3244277631,IE
-3244277632,3244277695,US
-3244277696,3244277759,IE
+3244261376,3244277759,IE
3244277760,3244294143,SI
-3244294144,3244343807,DE
-3244343808,3244344063,EU
-3244344064,3244408575,DE
-3244408576,3244408831,GB
-3244408832,3244452863,DE
-3244452864,3244453119,EU
-3244453120,3244545279,DE
-3244545280,3244545535,EU
-3244545536,3244592127,DE
-3244592128,3244592639,CH
-3244592640,3244624895,DE
-3244624896,3244625919,CH
-3244625920,3244794367,DE
-3244794368,3244794879,CA
-3244794880,3244813311,DE
-3244813312,3244813823,CA
-3244813824,3244818431,DE
+3244294144,3244818431,DE
3244818432,3244818687,ES
3244818688,3244818943,AT
3244818944,3244819199,PL
@@ -111791,7 +58951,7 @@
3244820736,3244820991,DE
3244820992,3244821247,SI
3244821248,3244821503,RU
-3244821504,3244821759,PA
+3244821504,3244821759,UA
3244821760,3244822015,TR
3244822016,3244822271,RU
3244822272,3244822527,GB
@@ -111864,7 +59024,7 @@
3244840960,3244841215,PL
3244841216,3244841471,GB
3244841472,3244841727,DE
-3244841728,3244842495,GB
+3244841728,3244842239,GB
3244842496,3244842751,RU
3244842752,3244843007,DE
3244843008,3244843263,UA
@@ -111970,18 +59130,16 @@
3244871168,3244871423,LT
3244871424,3244871679,RU
3244871680,3244872447,UA
-3244872448,3244872703,CH
3244872704,3244872959,IR
3244872960,3244873215,UA
3244873216,3244873471,SE
-3244873472,3244873727,EU
+3244873472,3244873727,IE
3244873728,3244873983,DE
-3244873984,3244874239,FI
+3244873984,3244874239,SE
3244874240,3244874495,ES
3244874496,3244874751,FR
3244874752,3244875007,DE
3244875008,3244875263,PL
-3244875264,3244875519,LI
3244875520,3244875775,IT
3244875776,3244876799,RU
3244876800,3244877055,GB
@@ -112009,7 +59167,7 @@
3244882432,3244882687,IT
3244882688,3244882943,PL
3244882944,3244883199,NL
-3244883200,3244883455,KZ
+3244883200,3244883455,RU
3244883456,3244883711,CZ
3244883712,3244883967,NL
3244883968,3244884223,DE
@@ -112033,7 +59191,7 @@
3244888576,3244888831,FR
3244888832,3244889087,DE
3244889088,3244889343,PL
-3244889344,3244889599,RO
+3244889344,3244889599,US
3244889600,3244889855,SI
3244889856,3244890111,HR
3244890112,3244890367,PL
@@ -112156,7 +59314,6 @@
3244922368,3244922623,GB
3244922880,3244923135,UA
3244923136,3244923391,AT
-3244923392,3244923647,EU
3244923648,3244923903,LV
3244923904,3244924159,RU
3244924160,3244924927,CZ
@@ -112251,9 +59408,8 @@
3244951552,3244952575,FI
3244952576,3244953599,GB
3244953600,3244954623,DE
-3244954624,3244955647,PL
-3244955648,3244957695,UA
-3244957696,3244958719,EU
+3244955648,3244956671,UA
+3244956672,3244957695,LT
3244958720,3244959743,FR
3244959744,3244960767,RU
3244960768,3244961791,RO
@@ -112278,7 +59434,7 @@
3244986368,3244987391,UA
3244987392,3244988415,RU
3244988416,3244990463,PL
-3244990464,3244991487,UA
+3244990464,3244991487,RU
3244991488,3244992511,DK
3244992512,3244994559,RU
3244994560,3244995583,ES
@@ -112303,12 +59459,16 @@
3245010688,3245010943,FR
3245010944,3245011967,RU
3245011968,3245012991,PL
-3245012992,3245014015,RU
+3245012992,3245014015,UA
3245014016,3245015039,GR
3245015040,3245016063,RU
3245016064,3245017087,RS
3245017088,3245018111,PL
-3245018112,3245021183,RU
+3245018112,3245019391,RU
+3245019392,3245019462,SC
+3245019463,3245019463,RU
+3245019464,3245019647,SC
+3245019648,3245021183,RU
3245021184,3245022207,UA
3245022208,3245023231,NO
3245023232,3245024255,PL
@@ -112320,7 +59480,6 @@
3245030400,3245032447,RU
3245032448,3245033471,BG
3245033472,3245034495,UA
-3245034496,3245035519,SE
3245035520,3245036543,UA
3245036544,3245037567,IS
3245037568,3245038591,PL
@@ -112340,7 +59499,6 @@
3245057024,3245058047,PL
3245058048,3245061119,UA
3245061120,3245062143,RU
-3245062144,3245063167,UA
3245063168,3245065215,RU
3245065216,3245066239,PL
3245066240,3245067263,UA
@@ -112363,7 +59521,6 @@
3245086208,3245086463,AT
3245086464,3245086719,GH
3245086720,3245086975,BG
-3245086976,3245087231,IT
3245087488,3245087743,NL
3245087744,3245087999,GH
3245088000,3245088255,LV
@@ -112375,13 +59532,13 @@
3245090304,3245090815,UA
3245090816,3245091327,AT
3245091328,3245091839,SE
-3245091840,3245093887,UA
+3245091840,3245092351,UA
+3245092864,3245093887,UA
3245093888,3245094911,RO
3245094912,3245095935,UA
3245095936,3245096959,IT
-3245096960,3245099007,EU
+3245096960,3245099007,CZ
3245099008,3245103103,GB
-3245103104,3245105151,EU
3245105152,3245105663,GB
3245105664,3245106175,NL
3245106176,3245106687,AT
@@ -112400,7 +59557,6 @@
3245116928,3245117439,KW
3245117440,3245118463,LV
3245118464,3245119487,GB
-3245119488,3245120511,EU
3245120512,3245121093,GB
3245121094,3245121095,US
3245121096,3245121535,GB
@@ -112414,13 +59570,14 @@
3245125120,3245125631,ES
3245125632,3245125887,DE
3245125888,3245126143,PL
-3245126144,3245126399,FR
3245126400,3245126655,DE
3245126656,3245126911,FR
3245126912,3245127167,DE
3245127168,3245127423,RU
3245127424,3245127679,AT
-3245127680,3245127935,DE
+3245127680,3245127742,US
+3245127743,3245127743,DE
+3245127744,3245127935,US
3245127936,3245128191,LV
3245128192,3245128447,IT
3245128448,3245128703,CH
@@ -112430,15 +59587,13 @@
3245130240,3245130495,PL
3245130496,3245130751,IL
3245130752,3245131007,SE
-3245131008,3245131519,FR
+3245131008,3245131263,FR
3245131520,3245132031,GB
3245132032,3245132287,BE
3245132288,3245132543,PL
3245132544,3245132799,FR
3245132800,3245133311,IT
3245133312,3245133567,PL
-3245133568,3245133823,RU
-3245133824,3245134079,NO
3245134080,3245134335,UA
3245134336,3245134591,NL
3245134592,3245134847,IL
@@ -112456,9 +59611,7 @@
3245137920,3245138431,DK
3245138432,3245138943,UA
3245138944,3245139455,PL
-3245139456,3245139967,RU
3245139968,3245140479,CH
-3245140480,3245140991,RO
3245140992,3245141503,UA
3245141504,3245141759,NL
3245141760,3245142015,SE
@@ -112469,7 +59622,6 @@
3245146112,3245147135,FR
3245147136,3245148159,DE
3245148160,3245149183,UA
-3245149184,3245150207,RU
3245150208,3245154303,IS
3245154304,3245158399,IT
3245158400,3245158911,CH
@@ -112481,11 +59633,9 @@
3245161472,3245161727,RU
3245161728,3245161983,BG
3245161984,3245162495,BE
-3245162496,3245163007,DE
3245163008,3245163519,KE
3245163520,3245164543,RU
-3245164544,3245164799,BE
-3245164800,3245165055,DE
+3245164544,3245165055,BE
3245165056,3245165567,AT
3245165568,3245166079,RU
3245166080,3245166591,TZ
@@ -112493,21 +59643,17 @@
3245166848,3245167103,GB
3245167104,3245167359,IL
3245167360,3245167615,GB
-3245167616,3245167871,UA
-3245167872,3245168127,LV
3245168128,3245168383,SE
3245168384,3245168639,FR
3245168640,3245168895,AT
3245168896,3245169151,RU
3245169152,3245169407,IT
-3245169408,3245169919,PL
+3245169408,3245169663,PL
3245169920,3245170175,PT
3245170176,3245170431,GB
3245170432,3245170687,CH
3245170688,3245171711,DE
-3245171712,3245172735,UA
3245172736,3245173759,IT
-3245173760,3245174783,UA
3245174784,3245175039,IT
3245175040,3245175295,DE
3245175296,3245175551,RU
@@ -112516,7 +59662,7 @@
3245176064,3245176319,SK
3245176320,3245176575,UA
3245176576,3245176831,FR
-3245176832,3245177343,ES
+3245177088,3245177343,ES
3245177344,3245177599,NL
3245177600,3245177855,PL
3245177856,3245178111,SI
@@ -112524,9 +59670,7 @@
3245178624,3245178879,PL
3245178880,3245179391,UA
3245179392,3245179903,LU
-3245179904,3245180415,DE
3245180416,3245180927,TR
-3245180928,3245181439,NL
3245181440,3245181951,DE
3245181952,3245182463,AT
3245182464,3245182975,FR
@@ -112543,19 +59687,16 @@
3245199872,3245200127,NO
3245200128,3245200383,LV
3245200384,3245200639,PL
-3245200640,3245200895,GR
3245200896,3245201151,DE
3245201152,3245201407,KW
3245201408,3245201663,UA
-3245201664,3245201919,NO
3245201920,3245202175,SA
3245202432,3245202687,GB
-3245202688,3245203455,DE
-3245203456,3245203711,FR
+3245202944,3245203455,DE
3245203712,3245204223,PL
3245204224,3245204479,SI
3245204480,3245204735,BE
-3245204736,3245205247,ES
+3245204736,3245204991,ES
3245205248,3245205503,DE
3245205504,3245205759,AT
3245205760,3245206015,IT
@@ -112571,7 +59712,6 @@
3245210112,3245210623,FR
3245210624,3245211135,HU
3245211136,3245211647,GB
-3245212160,3245212671,NG
3245212672,3245213183,GB
3245213184,3245213695,DE
3245213696,3245214207,LV
@@ -112584,7 +59724,7 @@
3245219840,3245221887,FI
3245221888,3245223935,DE
3245223936,3245225471,NL
-3245225472,3245225727,EU
+3245225472,3245225727,GB
3245225728,3245225983,NL
3245225984,3245228031,HU
3245228032,3245229055,FI
@@ -112592,12 +59732,9 @@
3245230080,3245232127,UA
3245232128,3245232383,PL
3245232384,3245232639,BE
-3245232640,3245232895,BG
3245232896,3245233151,IT
3245233152,3245233407,DK
-3245233408,3245233452,CH
-3245233453,3245233453,EU
-3245233454,3245233663,CH
+3245233408,3245233663,CH
3245233664,3245233919,GR
3245233920,3245234175,DK
3245234176,3245234431,GB
@@ -112620,23 +59757,17 @@
3245244416,3245244671,ES
3245244672,3245244927,AT
3245244928,3245245183,BE
-3245245184,3245245439,CH
3245245440,3245245695,BG
3245245696,3245245951,DE
-3245245952,3245246207,UA
3245246208,3245246463,GB
-3245246464,3245246719,AT
3245246720,3245246975,PL
3245246976,3245247231,GB
3245247232,3245247487,DE
-3245247488,3245247999,FR
+3245247488,3245247743,FR
3245248000,3245248255,PL
-3245248256,3245248511,GB
3245248512,3245248767,UA
3245248768,3245249023,SI
-3245249024,3245249279,FR
-3245249280,3245249535,NL
-3245249536,3245249791,FR
+3245249024,3245249535,NL
3245249792,3245250047,GB
3245250048,3245250303,DE
3245250304,3245250559,IT
@@ -112646,7 +59777,6 @@
3245251328,3245251583,MT
3245251584,3245251839,UA
3245251840,3245252095,NL
-3245252096,3245252351,BE
3245252352,3245252607,BG
3245252608,3245253631,UA
3245253632,3245254143,LV
@@ -112663,7 +59793,6 @@
3245260288,3245260799,BE
3245260800,3245261823,DE
3245261824,3245262847,DK
-3245262848,3245263871,IT
3245263872,3245264895,DE
3245264896,3245266943,TR
3245266944,3245268991,BG
@@ -112675,7 +59804,6 @@
3245275136,3245277183,BE
3245277184,3245277695,UA
3245277696,3245278207,RU
-3245278208,3245278719,GB
3245278720,3245279743,UA
3245279744,3245280255,TJ
3245280256,3245280767,BE
@@ -112687,7 +59815,6 @@
3245283328,3245283839,GB
3245283840,3245284351,PL
3245284352,3245284863,GB
-3245284864,3245285375,PL
3245285376,3245285631,NL
3245285632,3245285887,GB
3245285888,3245286143,DE
@@ -112697,11 +59824,9 @@
3245287680,3245287935,PL
3245287936,3245288191,PT
3245288192,3245288703,DE
-3245288704,3245288959,FI
3245288960,3245289215,IT
3245289216,3245289471,AT
3245289472,3245290495,UA
-3245290496,3245291519,LU
3245291520,3245292543,DE
3245292544,3245293567,UA
3245293568,3245294079,FI
@@ -112709,20 +59834,15 @@
3245294592,3245295103,RO
3245295104,3245296127,IT
3245296128,3245296639,GB
-3245296640,3245297151,TJ
-3245297152,3245297663,IT
-3245297664,3245297919,FR
3245297920,3245298175,NL
-3245298176,3245298431,GB
+3245298176,3245298431,IE
3245298432,3245298687,UA
3245298688,3245298943,GB
3245298944,3245299199,UA
-3245299200,3245299455,GB
3245299456,3245299711,AT
3245299712,3245299967,DE
3245299968,3245300223,BG
-3245300224,3245300479,FR
-3245300480,3245300991,RU
+3245300736,3245300991,RU
3245300992,3245301247,FI
3245301248,3245301503,DK
3245301504,3245301759,BE
@@ -112731,17 +59851,13 @@
3245303808,3245304831,SE
3245304832,3245306367,DE
3245306368,3245306879,UA
-3245306880,3245307391,RU
3245307392,3245307903,FI
3245307904,3245308415,RO
3245308416,3245308927,ES
-3245308928,3245309439,SE
3245309440,3245309951,UA
3245309952,3245311999,CZ
3245312000,3245314047,DE
3245314048,3245315071,PL
-3245315072,3245316095,IT
-3245316096,3245317119,SE
3245317120,3245318143,UA
3245318144,3245318399,IT
3245318400,3245318655,RO
@@ -112750,15 +59866,12 @@
3245319168,3245319423,HR
3245319424,3245319679,SE
3245319680,3245319935,PL
-3245319936,3245320191,DE
-3245320448,3245320959,DE
-3245320960,3245321215,IE
+3245319936,3245321215,DE
3245321216,3245321471,NL
3245321472,3245321727,UA
-3245321728,3245321983,PL
3245321984,3245322239,DE
3245322240,3245323263,RU
-3245323264,3245325311,GB
+3245324288,3245325311,GB
3245325312,3245326335,UA
3245326336,3245326847,SI
3245326848,3245327359,BG
@@ -112771,146 +59884,49 @@
3245333504,3245334527,SI
3245334528,3245334783,HU
3245334784,3245335039,BE
-3245335040,3245335551,GB
-3245335552,3245335807,BE
-3245335808,3245336063,RO
+3245335296,3245335551,GB
+3245335552,3245335807,NL
3245336064,3245336575,GB
3245336576,3245336831,RO
-3245336832,3245337087,DE
-3245337088,3245337343,GB
-3245337344,3245337599,BE
3245337600,3245337855,PL
3245337856,3245338367,DE
3245338368,3245339647,UA
3245339648,3245340671,LV
3245340672,3245341695,UA
3245341696,3245342719,RU
-3245342720,3245442685,GB
-3245442686,3245442686,FR
-3245442687,3245867007,GB
-3245867008,3245868543,IE
-3245868544,3245868575,GB
-3245868576,3245878303,IE
-3245878304,3245878335,US
-3245878336,3245888703,IE
-3245888704,3245888767,US
-3245888768,3245892639,IE
-3245892640,3245892647,US
-3245892648,3245892719,IE
-3245892720,3245892727,US
-3245892728,3245892823,IE
-3245892824,3245892832,GB
-3245892833,3245894391,IE
-3245894392,3245894399,GB
-3245894400,3245894719,IE
-3245894720,3245894751,US
-3245894752,3245896311,IE
-3245896312,3245896319,GB
-3245896320,3245896991,IE
-3245896992,3245897007,US
-3245897008,3245898951,IE
-3245898952,3245898959,GB
-3245898960,3245898967,IE
-3245898968,3245898975,GB
-3245898976,3245899343,IE
-3245899344,3245899351,GB
-3245899352,3245901831,IE
-3245901832,3245901839,GB
-3245901840,3245902127,IE
-3245902128,3245902135,GB
-3245902136,3245902887,IE
-3245902888,3245902895,GB
-3245902896,3245902903,IE
-3245902904,3245902911,GB
-3245902912,3245903031,IE
-3245903032,3245903039,GB
-3245903040,3245903959,IE
-3245903960,3245903967,FR
-3245903968,3245904087,IE
-3245904088,3245904095,GB
-3245904096,3245904543,IE
-3245904544,3245904559,GB
-3245904560,3245906367,IE
-3245906368,3245906431,GB
-3245906432,3245909567,IE
-3245909568,3245909631,US
-3245909632,3245910831,IE
-3245910832,3245910847,GB
-3245910848,3245911319,IE
-3245911320,3245911327,BM
-3245911328,3245914879,IE
-3245914880,3245915135,LU
-3245915136,3245916159,IE
-3245916160,3245916671,GB
-3245916672,3245916927,IE
-3245916928,3245917183,GB
-3245917184,3245917951,IE
-3245917952,3245918207,LU
-3245918208,3245921279,IE
-3245921280,3245921535,BE
-3245921536,3245922959,IE
-3245922960,3245922975,US
-3245922976,3245924647,IE
-3245924648,3245924655,GB
-3245924656,3245924671,IE
-3245924672,3245924679,GB
-3245924680,3245924687,IE
-3245924688,3245924695,GB
-3245924696,3245924751,IE
-3245924752,3245924767,GB
-3245924768,3245927583,IE
-3245927584,3245927647,GB
-3245927648,3245927959,IE
-3245927960,3245927967,US
-3245927968,3245931263,IE
+3245342720,3245867007,GB
+3245867008,3245916159,IE
+3245916160,3245917183,GB
+3245917184,3245931263,IE
3245931264,3245931519,GB
3245931520,3245932543,IE
3245932544,3245998079,BE
-3245998080,3246100351,GB
-3246100352,3246100367,DE
-3246100368,3246129151,GB
-3246129152,3246141439,RU
-3246141440,3246141695,UA
-3246141696,3246142975,RU
-3246142976,3246143231,UA
-3246143232,3246147839,RU
-3246147840,3246148095,UA
-3246148096,3246260223,RU
+3245998080,3246129151,GB
+3246129152,3246260223,RU
3246260224,3246325759,PT
-3246325760,3246328831,ES
-3246328832,3246329087,EU
-3246329088,3246329855,ES
-3246329856,3246350847,EU
-3246350848,3246351103,ES
-3246351104,3246351615,EU
3246351616,3246352639,ES
-3246352640,3246375159,EU
-3246375160,3246375423,GB
-3246375424,3246378495,EU
-3246378496,3246379007,ES
+3246374400,3246374655,ES
+3246376960,3246377215,ES
+3246378752,3246379007,ES
3246379008,3246381055,GB
-3246381056,3246381567,EU
-3246381568,3246381823,ES
-3246381824,3246391295,EU
-3246391296,3246417959,GB
-3246417960,3246417967,LV
-3246417968,3246537887,GB
-3246537888,3246537903,A2
-3246537904,3246547199,GB
-3246547200,3246547455,EU
-3246547456,3246613503,GB
+3246391296,3246613503,GB
3246613504,3246614527,HU
3246614528,3246744543,GB
3246744544,3246744559,NG
3246744560,3246784511,GB
-3246784512,3246915583,CH
+3246784512,3246825727,CH
+3246825728,3246825983,GB
+3246825984,3246826239,US
+3246826240,3246874623,CH
+3246874624,3246875647,DE
+3246875648,3246915583,CH
3246915584,3247046655,PT
3247046656,3247046911,AT
3247046912,3247048191,SI
3247048192,3247048703,NO
3247048704,3247048959,EE
3247048960,3247049215,SI
-3247049216,3247054079,DE
+3247049216,3247053823,DE
3247054080,3247054335,CH
3247054336,3247054591,LT
3247054592,3247054847,DE
@@ -112926,7 +59942,6 @@
3247065088,3247065343,US
3247065344,3247065599,CH
3247065600,3247065855,SE
-3247065856,3247066111,GB
3247066112,3247066367,DK
3247066368,3247066623,LV
3247066624,3247066879,CZ
@@ -112935,12 +59950,11 @@
3247067648,3247067903,RU
3247067904,3247068159,CH
3247068160,3247068415,UA
-3247068416,3247068671,RO
3247068672,3247068927,GB
3247068928,3247069183,UA
3247069184,3247069439,DE
3247069440,3247069695,RU
-3247069696,3247069951,FR
+3247069696,3247069951,NL
3247069952,3247070207,DE
3247070208,3247070463,IL
3247070464,3247070719,UA
@@ -112948,7 +59962,7 @@
3247070976,3247071231,GB
3247071232,3247071487,DE
3247071488,3247072255,RO
-3247072256,3247072511,DE
+3247072256,3247072511,IE
3247072512,3247072767,BE
3247072768,3247073023,SE
3247073024,3247073279,RO
@@ -112959,16 +59973,12 @@
3247074304,3247074559,DE
3247074560,3247074815,SE
3247074816,3247075071,PL
-3247075072,3247075327,IE
3247075328,3247076095,DE
3247076096,3247076351,DK
3247076352,3247076607,TR
3247076608,3247076863,DE
3247076864,3247077119,PL
3247077120,3247077375,DE
-3247077376,3247077631,GB
-3247077632,3247077887,NL
-3247077888,3247078143,UA
3247078144,3247078399,AT
3247078400,3247078655,DK
3247078656,3247078911,HU
@@ -112983,8 +59993,6 @@
3247086592,3247087615,DE
3247087616,3247088639,IT
3247088640,3247089663,DE
-3247089664,3247090687,RO
-3247090688,3247091711,LV
3247091712,3247092735,RU
3247092736,3247093759,DE
3247093760,3247094783,UA
@@ -113001,697 +60009,25 @@
3247108096,3247109119,PL
3247109120,3247110143,UA
3247110144,3247111167,NL
-3247111168,3247112191,DE
3247112192,3247177727,FR
3247177728,3247243263,TR
3247243264,3247244287,DE
-3247244288,3247244351,NL
-3247244352,3247244359,DE
-3247244360,3247244367,NL
-3247244368,3247244375,DE
-3247244376,3247244391,NL
-3247244392,3247244399,DE
-3247244400,3247244767,NL
-3247244768,3247244775,DE
-3247244776,3247244927,NL
-3247244928,3247244935,DE
-3247244936,3247245047,NL
-3247245048,3247245055,DE
-3247245056,3247245063,NL
-3247245064,3247245071,DE
-3247245072,3247245175,NL
-3247245176,3247245183,DE
-3247245184,3247245471,NL
-3247245472,3247245479,DE
-3247245480,3247245519,NL
-3247245520,3247245527,DE
-3247245528,3247245583,NL
-3247245584,3247245591,DE
-3247245592,3247245599,NL
-3247245600,3247245607,DE
-3247245608,3247245639,NL
-3247245640,3247245647,DE
-3247245648,3247245655,NL
-3247245656,3247245663,DE
-3247245664,3247245791,NL
-3247245792,3247245799,DE
-3247245800,3247245959,NL
-3247245960,3247245967,DE
-3247245968,3247246007,NL
-3247246008,3247246023,DE
-3247246024,3247246039,NL
-3247246040,3247246047,DE
-3247246048,3247246175,NL
-3247246176,3247246183,DE
-3247246184,3247246271,NL
-3247246272,3247246279,DE
-3247246280,3247246503,NL
-3247246504,3247246511,DE
-3247246512,3247246527,NL
-3247246528,3247246535,DE
-3247246536,3247246559,NL
-3247246560,3247246567,DE
-3247246568,3247246639,NL
-3247246640,3247246655,DE
-3247246656,3247246839,NL
-3247246840,3247246847,DE
-3247246848,3247246943,NL
-3247246944,3247246951,DE
-3247246952,3247246967,NL
-3247246968,3247246975,DE
-3247246976,3247246991,NL
-3247246992,3247246999,DE
-3247247000,3247247111,NL
-3247247112,3247247119,DE
-3247247120,3247247175,NL
-3247247176,3247247183,DE
-3247247184,3247247367,NL
-3247247368,3247247375,DE
-3247247376,3247247407,NL
-3247247408,3247247415,DE
-3247247416,3247247535,NL
-3247247536,3247247551,DE
-3247247552,3247247671,NL
-3247247672,3247247679,DE
-3247247680,3247247791,NL
-3247247792,3247247799,DE
-3247247800,3247247807,NL
-3247247808,3247247815,DE
-3247247816,3247247871,NL
-3247247872,3247247887,DE
-3247247888,3247247975,NL
-3247247976,3247247983,DE
-3247247984,3247247999,NL
-3247248000,3247248015,DE
-3247248016,3247248055,NL
-3247248056,3247248063,DE
-3247248064,3247248095,NL
-3247248096,3247248103,DE
-3247248104,3247248159,NL
-3247248160,3247248167,DE
-3247248168,3247248175,NL
-3247248176,3247248183,DE
-3247248184,3247248199,NL
-3247248200,3247248207,DE
-3247248208,3247248359,NL
-3247248360,3247248367,DE
-3247248368,3247248383,NL
-3247248384,3247250431,DE
-3247250432,3247250583,NL
-3247250584,3247250591,DE
-3247250592,3247250663,NL
-3247250664,3247250679,DE
-3247250680,3247250847,NL
-3247250848,3247250855,DE
-3247250856,3247250863,NL
-3247250864,3247250871,DE
-3247250872,3247250927,NL
-3247250928,3247250935,DE
-3247250936,3247251047,NL
-3247251048,3247251055,DE
-3247251056,3247251143,NL
-3247251144,3247251151,DE
-3247251152,3247251191,NL
-3247251192,3247251199,DE
-3247251200,3247251319,NL
-3247251320,3247251327,DE
-3247251328,3247251487,NL
-3247251488,3247251495,DE
-3247251496,3247251583,NL
-3247251584,3247251591,DE
-3247251592,3247251615,NL
-3247251616,3247251623,DE
-3247251624,3247251631,NL
-3247251632,3247251639,DE
-3247251640,3247251647,NL
-3247251648,3247251655,DE
-3247251656,3247251759,NL
-3247251760,3247251767,DE
-3247251768,3247251791,NL
-3247251792,3247251799,DE
-3247251800,3247251871,NL
-3247251872,3247251879,DE
-3247251880,3247251887,NL
-3247251888,3247251895,DE
-3247251896,3247251943,NL
-3247251944,3247251951,DE
-3247251952,3247251975,NL
-3247251976,3247251983,DE
-3247251984,3247252023,NL
-3247252024,3247252031,DE
-3247252032,3247252111,NL
-3247252112,3247252119,DE
-3247252120,3247252199,NL
-3247252200,3247252207,DE
-3247252208,3247252327,NL
-3247252328,3247252335,DE
-3247252336,3247252463,NL
-3247252464,3247252471,DE
-3247252472,3247252479,NL
-3247252480,3247252487,DE
-3247252488,3247252623,NL
-3247252624,3247252631,DE
-3247252632,3247252687,NL
-3247252688,3247252695,DE
-3247252696,3247252959,NL
-3247252960,3247252967,DE
-3247252968,3247252999,NL
-3247253000,3247253007,DE
-3247253008,3247253111,NL
-3247253112,3247253119,DE
-3247253120,3247253143,NL
-3247253144,3247253151,DE
-3247253152,3247253215,NL
-3247253216,3247253223,DE
-3247253224,3247253479,NL
-3247253480,3247253487,DE
-3247253488,3247253503,NL
-3247253504,3247255295,DE
-3247255296,3247255367,NL
-3247255368,3247255375,DE
-3247255376,3247255559,NL
-3247255560,3247255567,DE
-3247255568,3247255655,NL
-3247255656,3247255663,DE
-3247255664,3247255671,NL
-3247255672,3247255679,DE
-3247255680,3247255711,NL
-3247255712,3247255719,DE
-3247255720,3247255759,NL
-3247255760,3247255767,DE
-3247255768,3247255823,NL
-3247255824,3247255831,DE
-3247255832,3247256071,NL
-3247256072,3247256079,DE
-3247256080,3247256279,NL
-3247256280,3247256287,DE
-3247256288,3247256367,NL
-3247256368,3247256375,DE
-3247256376,3247256415,NL
-3247256416,3247256423,DE
-3247256424,3247256607,NL
-3247256608,3247256615,DE
-3247256616,3247256623,NL
-3247256624,3247256631,DE
-3247256632,3247256799,NL
-3247256800,3247256807,DE
-3247256808,3247256831,NL
-3247256832,3247260671,DE
-3247260672,3247260679,NL
-3247260680,3247260687,DE
-3247260688,3247260879,NL
-3247260880,3247260887,DE
-3247260888,3247260983,NL
-3247260984,3247260991,DE
-3247260992,3247261039,NL
-3247261040,3247261047,DE
-3247261048,3247261207,NL
-3247261208,3247261223,DE
-3247261224,3247261303,NL
-3247261304,3247261311,DE
-3247261312,3247261791,NL
-3247261792,3247261799,DE
-3247261800,3247261935,NL
-3247261936,3247261943,DE
-3247261944,3247261951,NL
-3247261952,3247261959,DE
-3247261960,3247261991,NL
-3247261992,3247261999,DE
-3247262000,3247262015,NL
-3247262016,3247262023,DE
-3247262024,3247262047,NL
-3247262048,3247262055,DE
-3247262056,3247262095,NL
-3247262096,3247262111,DE
-3247262112,3247262151,NL
-3247262152,3247262159,DE
-3247262160,3247262223,NL
-3247262224,3247262231,DE
-3247262232,3247262439,NL
-3247262440,3247262447,DE
-3247262448,3247262615,NL
-3247262616,3247262623,DE
-3247262624,3247262663,NL
-3247262664,3247262671,DE
-3247262672,3247262839,NL
-3247262840,3247262847,DE
-3247262848,3247262855,NL
-3247262856,3247262863,DE
-3247262864,3247262975,NL
-3247262976,3247262983,DE
-3247262984,3247263047,NL
-3247263048,3247263055,DE
-3247263056,3247263231,NL
-3247263232,3247263239,DE
-3247263240,3247263255,NL
-3247263256,3247263263,DE
-3247263264,3247263303,NL
-3247263304,3247263311,DE
-3247263312,3247263335,NL
-3247263336,3247263359,DE
-3247263360,3247263551,NL
-3247263552,3247263559,DE
-3247263560,3247263599,NL
-3247263600,3247263607,DE
-3247263608,3247263623,NL
-3247263624,3247263631,DE
-3247263632,3247263855,NL
-3247263856,3247263863,DE
-3247263864,3247263887,NL
-3247263888,3247263895,DE
-3247263896,3247263911,NL
-3247263912,3247263919,DE
-3247263920,3247263927,NL
-3247263928,3247263935,DE
-3247263936,3247264359,NL
-3247264360,3247264367,DE
-3247264368,3247264447,NL
-3247264448,3247264455,DE
-3247264456,3247264615,NL
-3247264616,3247264623,DE
-3247264624,3247264719,NL
-3247264720,3247264727,DE
-3247264728,3247265095,NL
-3247265096,3247265103,DE
-3247265104,3247265175,NL
-3247265176,3247265183,DE
-3247265184,3247265199,NL
-3247265200,3247265207,DE
-3247265208,3247265239,NL
-3247265240,3247265247,DE
-3247265248,3247265319,NL
-3247265320,3247265327,DE
-3247265328,3247265535,NL
-3247265536,3247265543,DE
-3247265544,3247265663,NL
-3247265664,3247265671,DE
-3247265672,3247265799,NL
-3247265800,3247265807,DE
-3247265808,3247265815,NL
-3247265816,3247265823,DE
-3247265824,3247265839,NL
-3247265840,3247265847,DE
-3247265848,3247265871,NL
-3247265872,3247265879,DE
-3247265880,3247265895,NL
-3247265896,3247265903,DE
-3247265904,3247265935,NL
-3247265936,3247265943,DE
-3247265944,3247266175,NL
-3247266176,3247266183,DE
-3247266184,3247266287,NL
-3247266288,3247266295,DE
-3247266296,3247266559,NL
-3247266560,3247271679,DE
-3247271680,3247271687,NL
-3247271688,3247271695,DE
-3247271696,3247271807,NL
-3247271808,3247271815,DE
-3247271816,3247271935,NL
-3247271936,3247271943,DE
-3247271944,3247271999,NL
-3247272000,3247272007,DE
-3247272008,3247272071,NL
-3247272072,3247272079,DE
-3247272080,3247272087,NL
-3247272088,3247272095,DE
-3247272096,3247272151,NL
-3247272152,3247272159,DE
-3247272160,3247272367,NL
-3247272368,3247272383,DE
-3247272384,3247272591,NL
-3247272592,3247272599,DE
-3247272600,3247272671,NL
-3247272672,3247272679,DE
-3247272680,3247272727,NL
-3247272728,3247272735,DE
-3247272736,3247272935,NL
-3247272936,3247272943,DE
-3247272944,3247272983,NL
-3247272984,3247272991,DE
-3247272992,3247273031,NL
-3247273032,3247273039,DE
-3247273040,3247273063,NL
-3247273064,3247273079,DE
-3247273080,3247273111,NL
-3247273112,3247273119,DE
-3247273120,3247273415,NL
-3247273416,3247273431,DE
-3247273432,3247273503,NL
-3247273504,3247273511,DE
-3247273512,3247273527,NL
-3247273528,3247273535,DE
-3247273536,3247273591,NL
-3247273592,3247273599,DE
-3247273600,3247273671,NL
-3247273672,3247273679,DE
-3247273680,3247273711,NL
-3247273712,3247273719,DE
-3247273720,3247273751,NL
-3247273752,3247273759,DE
-3247273760,3247273791,NL
-3247273792,3247273799,DE
-3247273800,3247274167,NL
-3247274168,3247274175,DE
-3247274176,3247274239,NL
-3247274240,3247274503,DE
-3247274504,3247274519,NL
-3247274520,3247274535,DE
-3247274536,3247274567,NL
-3247274568,3247274583,DE
-3247274584,3247274615,NL
-3247274616,3247274623,DE
-3247274624,3247274647,NL
-3247274648,3247274655,DE
-3247274656,3247274863,NL
-3247274864,3247274871,DE
-3247274872,3247275239,NL
-3247275240,3247275247,DE
-3247275248,3247275263,NL
-3247275264,3247276031,DE
-3247276032,3247276079,NL
-3247276080,3247276087,DE
-3247276088,3247276127,NL
-3247276128,3247276135,DE
-3247276136,3247276415,NL
-3247276416,3247276423,DE
-3247276424,3247276471,NL
-3247276472,3247276479,DE
-3247276480,3247276503,NL
-3247276504,3247276511,DE
-3247276512,3247276615,NL
-3247276616,3247276631,DE
-3247276632,3247276759,NL
-3247276760,3247276775,DE
-3247276776,3247276807,NL
-3247276808,3247276815,DE
-3247276816,3247276831,NL
-3247276832,3247276839,DE
-3247276840,3247276855,NL
-3247276856,3247276863,DE
-3247276864,3247276871,NL
-3247276872,3247276879,DE
-3247276880,3247276927,NL
-3247276928,3247276935,DE
-3247276936,3247276951,NL
-3247276952,3247276959,DE
-3247276960,3247277319,NL
-3247277320,3247277327,DE
-3247277328,3247277479,NL
-3247277480,3247277487,DE
-3247277488,3247277743,NL
-3247277744,3247277751,DE
-3247277752,3247277847,NL
-3247277848,3247277855,DE
-3247277856,3247277935,NL
-3247277936,3247277943,DE
-3247277944,3247278047,NL
-3247278048,3247278055,DE
-3247278056,3247278103,NL
-3247278104,3247278111,DE
-3247278112,3247278495,NL
-3247278496,3247278503,DE
-3247278504,3247278591,NL
-3247278592,3247278599,DE
-3247278600,3247278751,NL
-3247278752,3247278759,DE
-3247278760,3247278783,NL
-3247278784,3247278791,DE
-3247278792,3247278847,NL
-3247278848,3247280127,DE
-3247280128,3247280191,NL
-3247280192,3247280199,DE
-3247280200,3247280255,NL
-3247280256,3247280263,DE
-3247280264,3247280279,NL
-3247280280,3247280287,DE
-3247280288,3247280487,NL
-3247280488,3247280495,DE
-3247280496,3247281159,NL
-3247281160,3247281167,DE
-3247281168,3247281239,NL
-3247281240,3247281247,DE
-3247281248,3247281351,NL
-3247281352,3247281359,DE
-3247281360,3247281447,NL
-3247281448,3247281455,DE
-3247281456,3247281519,NL
-3247281520,3247281535,DE
-3247281536,3247281543,NL
-3247281544,3247281551,DE
-3247281552,3247281567,NL
-3247281568,3247281575,DE
-3247281576,3247281655,NL
-3247281656,3247281671,DE
-3247281672,3247281703,NL
-3247281704,3247281711,DE
-3247281712,3247281791,NL
-3247281792,3247281799,DE
-3247281800,3247281855,NL
-3247281856,3247281863,DE
-3247281864,3247281903,NL
-3247281904,3247281911,DE
-3247281912,3247281983,NL
-3247281984,3247281991,DE
-3247281992,3247282063,NL
-3247282064,3247282071,DE
-3247282072,3247282095,NL
-3247282096,3247282103,DE
-3247282104,3247282271,NL
-3247282272,3247282279,DE
-3247282280,3247282311,NL
-3247282312,3247282319,DE
-3247282320,3247282335,NL
-3247282336,3247282343,DE
-3247282344,3247282479,NL
-3247282480,3247282487,DE
-3247282488,3247282575,NL
-3247282576,3247282583,DE
-3247282584,3247282799,NL
-3247282800,3247282807,DE
-3247282808,3247282999,NL
-3247283000,3247283007,DE
-3247283008,3247283103,NL
-3247283104,3247283111,DE
-3247283112,3247283143,NL
-3247283144,3247283151,DE
-3247283152,3247283263,NL
-3247283264,3247283271,DE
-3247283272,3247283311,NL
-3247283312,3247283319,DE
-3247283320,3247283391,NL
-3247283392,3247283399,DE
-3247283400,3247283415,NL
-3247283416,3247283423,DE
-3247283424,3247283447,NL
-3247283448,3247283455,DE
-3247283456,3247283567,NL
-3247283568,3247283575,DE
-3247283576,3247283759,NL
-3247283760,3247283767,DE
-3247283768,3247283799,NL
-3247283800,3247283807,DE
-3247283808,3247283927,NL
-3247283928,3247283935,DE
-3247283936,3247283943,NL
-3247283944,3247283951,DE
-3247283952,3247283983,NL
-3247283984,3247283999,DE
-3247284000,3247284015,NL
-3247284016,3247284023,DE
-3247284024,3247284263,NL
-3247284264,3247284271,DE
-3247284272,3247284319,NL
-3247284320,3247284327,DE
-3247284328,3247284367,NL
-3247284368,3247284375,DE
-3247284376,3247284447,NL
-3247284448,3247284455,DE
-3247284456,3247284647,NL
-3247284648,3247284655,DE
-3247284656,3247284727,NL
-3247284728,3247284735,DE
-3247284736,3247284887,NL
-3247284888,3247284895,DE
-3247284896,3247285127,NL
-3247285128,3247285135,DE
-3247285136,3247285183,NL
-3247285184,3247285191,DE
-3247285192,3247285375,NL
-3247285376,3247285383,DE
-3247285384,3247285391,NL
-3247285392,3247285399,DE
-3247285400,3247285471,NL
-3247285472,3247285479,DE
-3247285480,3247285623,NL
-3247285624,3247285631,DE
-3247285632,3247285711,NL
-3247285712,3247285719,DE
-3247285720,3247285807,NL
-3247285808,3247285815,DE
-3247285816,3247285855,NL
-3247285856,3247285863,DE
-3247285864,3247285871,NL
-3247285872,3247285879,DE
-3247285880,3247285943,NL
-3247285944,3247285959,DE
-3247285960,3247286007,NL
-3247286008,3247286015,DE
-3247286016,3247286047,NL
-3247286048,3247286055,DE
-3247286056,3247286087,NL
-3247286088,3247286095,DE
-3247286096,3247286135,NL
-3247286136,3247286143,DE
-3247286144,3247286327,NL
-3247286328,3247286343,DE
-3247286344,3247286359,NL
-3247286360,3247286367,DE
-3247286368,3247286455,NL
-3247286456,3247286463,DE
-3247286464,3247286503,NL
-3247286504,3247286511,DE
-3247286512,3247287167,NL
-3247287168,3247287175,DE
-3247287176,3247287503,NL
-3247287504,3247287511,DE
-3247287512,3247287895,NL
-3247287896,3247287903,DE
-3247287904,3247287959,NL
-3247287960,3247287967,DE
-3247287968,3247287975,NL
-3247287976,3247287983,DE
-3247287984,3247288055,NL
-3247288056,3247288063,DE
-3247288064,3247288231,NL
-3247288232,3247288239,DE
-3247288240,3247288247,NL
-3247288248,3247288255,DE
-3247288256,3247288319,NL
-3247288320,3247299363,DE
-3247299364,3247299364,EU
-3247299365,3247301119,DE
-3247301120,3247301375,NL
-3247301376,3247302655,DE
-3247302656,3247302783,NL
-3247302784,3247302807,DE
-3247302808,3247302871,NL
-3247302872,3247302879,DE
-3247302880,3247302951,NL
-3247302952,3247302959,DE
-3247302960,3247303047,NL
-3247303048,3247303071,DE
-3247303072,3247303151,NL
-3247303152,3247303159,DE
-3247303160,3247303343,NL
-3247303344,3247303359,DE
-3247303360,3247303615,NL
-3247303616,3247303623,DE
-3247303624,3247303671,NL
-3247303672,3247303679,DE
-3247303680,3247304007,NL
-3247304008,3247304015,DE
-3247304016,3247304351,NL
-3247304352,3247304359,DE
-3247304360,3247304751,NL
-3247304752,3247304759,DE
-3247304760,3247304879,NL
-3247304880,3247304887,DE
-3247304888,3247305247,NL
-3247305248,3247305255,DE
-3247305256,3247305455,NL
-3247305456,3247305463,DE
-3247305464,3247305471,NL
-3247305472,3247305479,DE
-3247305480,3247305583,NL
-3247305584,3247305591,DE
-3247305592,3247305623,NL
-3247305624,3247305631,DE
-3247305632,3247305823,NL
-3247305824,3247305831,DE
-3247305832,3247305959,NL
-3247305960,3247305975,DE
-3247305976,3247305991,NL
-3247305992,3247306007,DE
-3247306008,3247306151,NL
-3247306152,3247306159,DE
-3247306160,3247306199,NL
-3247306200,3247306215,DE
-3247306216,3247306295,NL
-3247306296,3247306327,DE
-3247306328,3247306335,NL
-3247306336,3247306343,DE
-3247306344,3247306423,NL
-3247306424,3247306431,DE
-3247306432,3247306447,NL
-3247306448,3247306455,DE
-3247306456,3247306567,NL
-3247306568,3247306575,DE
-3247306576,3247306583,NL
-3247306584,3247306599,DE
-3247306600,3247306631,NL
-3247306632,3247306639,DE
-3247306640,3247306671,NL
-3247306672,3247306679,DE
-3247306680,3247306783,NL
-3247306784,3247306791,DE
-3247306792,3247306799,NL
-3247306800,3247306807,DE
-3247306808,3247306919,NL
-3247306920,3247306943,DE
-3247306944,3247306959,NL
-3247306960,3247306967,DE
-3247306968,3247306999,NL
-3247307000,3247307007,DE
-3247307008,3247307071,NL
-3247307072,3247307079,DE
-3247307080,3247307303,NL
-3247307304,3247307311,DE
-3247307312,3247307375,NL
-3247307376,3247307383,DE
-3247307384,3247307415,NL
-3247307416,3247307423,DE
-3247307424,3247307543,NL
-3247307544,3247307551,DE
-3247307552,3247307575,NL
-3247307576,3247307583,DE
-3247307584,3247307591,NL
-3247307592,3247307599,DE
-3247307600,3247307687,NL
-3247307688,3247307695,DE
-3247307696,3247307871,NL
-3247307872,3247307879,DE
-3247307880,3247307959,NL
-3247307960,3247307967,DE
-3247307968,3247307991,NL
-3247307992,3247307999,DE
-3247308000,3247308087,NL
-3247308088,3247308095,DE
-3247308096,3247308111,NL
-3247308112,3247308127,DE
-3247308128,3247308159,NL
-3247308160,3247308175,DE
-3247308176,3247308183,NL
-3247308184,3247308191,DE
-3247308192,3247308207,NL
-3247308208,3247308215,DE
-3247308216,3247308223,NL
-3247308224,3247308231,DE
-3247308232,3247308415,NL
-3247308416,3247308423,DE
-3247308424,3247308479,NL
-3247308480,3247308487,DE
-3247308488,3247308727,NL
-3247308728,3247308735,DE
-3247308736,3247308783,NL
-3247308784,3247308791,DE
-3247308792,3247308799,NL
+3247244288,3247253503,NL
+3247253504,3247254527,DE
+3247254528,3247267839,NL
+3247267840,3247268351,DE
+3247268352,3247290367,NL
+3247290368,3247291391,DE
+3247291392,3247292415,NL
+3247292416,3247300607,DE
+3247300608,3247308799,NL
3247308800,3247309055,BG
-3247309056,3247313663,FI
+3247309056,3247309567,FI
+3247309824,3247313663,FI
3247313664,3247313919,AM
3247313920,3247316479,FI
3247316480,3247316991,RU
-3247316992,3247322367,FI
+3247321600,3247322111,FI
3247322368,3247322623,DE
3247322624,3247323135,FI
3247323136,3247323647,RU
@@ -113704,20 +60040,19 @@
3247334400,3247334655,NO
3247334656,3247335167,FI
3247335168,3247335423,DK
-3247335424,3247336447,FI
+3247335424,3247336447,DE
3247336448,3247337215,NO
3247337216,3247337471,CH
3247337472,3247337983,PL
3247337984,3247338239,UA
3247338240,3247338495,PL
3247338496,3247338751,SI
-3247338752,3247339519,GB
+3247339008,3247339519,GB
3247339520,3247340543,FI
3247340544,3247340799,UA
3247340800,3247341055,CH
-3247341056,3247341311,FI
3247341312,3247341567,DE
-3247341568,3247345919,FI
+3247343616,3247345919,FI
3247345920,3247346175,HU
3247346176,3247346943,FI
3247346944,3247347199,SI
@@ -113725,12 +60060,14 @@
3247347456,3247347711,IL
3247347712,3247347967,FI
3247347968,3247348223,HU
-3247348224,3247348991,FI
+3247348224,3247348479,FI
3247348992,3247349247,DE
3247349248,3247349503,FR
3247349504,3247349759,UA
3247349760,3247353855,SE
-3247353856,3247362047,FI
+3247353856,3247357951,FI
+3247358464,3247359231,FI
+3247359488,3247362047,FI
3247362048,3247362303,RO
3247362304,3247362559,HU
3247362560,3247362815,PL
@@ -113745,21 +60082,19 @@
3247365120,3247365375,GB
3247365376,3247365631,UA
3247365632,3247365887,SA
-3247365888,3247366143,DE
-3247366144,3247371007,FI
+3247366144,3247370751,FI
3247371008,3247371263,PL
3247371264,3247371519,SE
3247371520,3247371775,GB
3247371776,3247372031,RU
3247372032,3247372287,FI
3247372288,3247372543,RO
-3247372544,3247372799,RU
3247372800,3247373055,RO
-3247373056,3247374335,FI
+3247373056,3247373567,FI
3247374336,3247374591,RU
-3247374592,3247382527,FI
-3247382528,3247382783,EU
-3247382784,3247394047,FI
+3247375360,3247380479,FI
+3247382528,3247390719,FI
+3247391744,3247394047,FI
3247394048,3247394303,PL
3247394304,3247397887,FI
3247397888,3247398143,RU
@@ -113770,51 +60105,39 @@
3247405056,3247405311,RO
3247405312,3247405567,PL
3247405568,3247405823,DE
-3247405824,3247432191,FI
+3247406080,3247432191,FI
3247432192,3247432447,TR
3247432448,3247438079,FI
3247438080,3247438335,IT
3247438336,3247439871,FI
3247439872,3247702015,ES
3247702016,3247702271,RO
-3247702272,3247703551,ES
+3247702528,3247703551,ES
3247703552,3247704063,FR
-3247704064,3247704831,ES
3247704832,3247705087,GB
3247705088,3247705855,ES
3247705856,3247706111,RU
3247706112,3247711743,ES
3247711744,3247712255,IT
-3247712256,3247713279,ES
+3247712768,3247713023,ES
3247713280,3247713535,RU
3247713536,3247713791,BE
3247713792,3247714047,SK
-3247714048,3247714303,RU
3247714304,3247716351,CH
-3247716352,3247717887,ES
-3247717888,3247718399,CH
-3247718400,3247742975,ES
+3247717376,3247717631,ES
+3247726592,3247742975,ES
3247742976,3247751167,DE
-3247751168,3247769599,ES
+3247751168,3247764479,ES
+3247764992,3247765247,ES
+3247765504,3247769599,ES
3247769600,3247771647,DE
3247771648,3247775743,ES
-3247775744,3247779647,DE
-3247779648,3247779839,IE
-3247779840,3247783935,DE
+3247775744,3247783935,DE
3247783936,3247792127,GB
-3247792128,3247794438,FR
-3247794439,3247794439,EU
-3247794440,3247800319,FR
+3247792128,3247800319,FR
3247800320,3247816703,DK
-3247816704,3247817471,BE
-3247817472,3247817727,CH
-3247817728,3247820799,BE
-3247820800,3247822335,CH
-3247822336,3247823103,DE
-3247823104,3247823871,AT
-3247823872,3247825151,BE
-3247825152,3247825919,CH
-3247825920,3247826943,BE
+3247818752,3247820799,BE
+3247820800,3247821823,CH
3247826944,3247828991,CH
3247828992,3247833087,BE
3247833088,3247833599,RU
@@ -113836,8 +60159,8 @@
3247842304,3247842815,PL
3247842816,3247843327,CZ
3247843328,3247843583,LT
-3247843584,3247845376,PL
-3247845377,3247845631,CH
+3247843584,3247845375,PL
+3247845376,3247845631,CH
3247845632,3247845887,UA
3247845888,3247846399,PL
3247846400,3247847423,RU
@@ -113845,7 +60168,7 @@
3247848448,3247849471,IT
3247849472,3247849727,DE
3247849728,3247849983,RU
-3247849984,3247850239,GB
+3247849984,3247850239,SE
3247850240,3247850495,BG
3247850496,3247850751,RU
3247850752,3247851007,PL
@@ -113858,7 +60181,6 @@
3247856128,3247856639,ES
3247856640,3247857663,RU
3247857664,3247858175,UA
-3247858176,3247858687,EU
3247858688,3247859711,RU
3247859712,3247859967,SE
3247859968,3247861759,RU
@@ -113875,10 +60197,7 @@
3247872000,3247875327,NL
3247875328,3247875583,PL
3247875584,3247876095,DE
-3247876096,3247876351,PL
3247876352,3247876607,FR
-3247876608,3247876863,ES
-3247876864,3247877119,DE
3247877120,3247877631,GR
3247877632,3247879167,AT
3247879168,3247882239,GB
@@ -113912,67 +60231,61 @@
3247928320,3247929343,HU
3247929344,3247931391,GB
3247931392,3247939583,IR
-3247939584,3247947775,UA
3247947776,3247960063,RU
3247960064,3247962111,UA
3247962112,3247963135,DE
3247963136,3247964159,UA
3247964160,3248095231,ES
-3248095232,3248095823,AT
-3248095824,3248095831,HU
-3248095832,3248160767,AT
-3248160768,3248221215,DE
-3248221216,3248221223,PL
-3248221224,3248226303,DE
+3248095232,3248160767,AT
+3248160768,3248226303,DE
3248226304,3248357375,NO
3248357376,3248488447,DE
3248488448,3248488703,FR
3248488704,3248491519,NO
3248491520,3248492031,RU
-3248492032,3248496895,NO
-3248496896,3248497151,US
+3248492032,3248492543,NO
+3248493568,3248496895,NO
+3248496896,3248497151,IL
3248497152,3248498431,NO
3248498432,3248498687,DE
-3248498688,3248513279,NO
+3248498688,3248504831,NO
3248513280,3248513535,UA
3248513536,3248514047,AT
-3248514048,3248521983,NO
+3248514048,3248521215,NO
3248521984,3248522239,RU
-3248522240,3248525311,NO
+3248522240,3248524287,NO
3248525312,3248525567,DE
-3248525568,3248525823,DK
-3248525824,3248528895,NO
+3248526336,3248527359,NO
+3248528384,3248528895,NO
3248528896,3248529151,RU
-3248529152,3248529407,BG
3248529408,3248540671,NO
3248540672,3248541183,RU
-3248541184,3248545791,NO
+3248541184,3248541695,SE
3248545792,3248546815,UA
3248546816,3248547839,RU
-3248547840,3248553727,NO
+3248547840,3248548351,NO
+3248549632,3248549887,SE
+3248549888,3248553215,NO
3248553728,3248553983,RU
3248553984,3248554239,RO
-3248554240,3248557055,NO
+3248554496,3248557055,NO
3248557056,3248558079,UA
3248558080,3248575487,NO
3248575488,3248576511,CZ
-3248576512,3248603135,NO
+3248576512,3248591871,NO
+3248592384,3248599039,NO
+3248599040,3248603135,SE
3248603136,3248603391,BG
3248603392,3248603647,RU
-3248603648,3248619519,NO
-3248619520,3248638463,DK
-3248638464,3248638719,GB
-3248638720,3248719871,DK
-3248719872,3248720127,EU
-3248720128,3248748543,DK
-3248748544,3248748799,EU
-3248748800,3248750591,DK
+3248603648,3248604159,NO
+3248604928,3248608767,NO
+3248609280,3248619519,NO
+3248619520,3248750591,DK
3248750592,3248750847,PT
-3248750848,3248752383,PL
-3248752384,3248752639,NL
+3248751616,3248752127,PL
3248752640,3248752895,DE
3248752896,3248753151,TR
-3248753152,3248753663,GB
+3248753408,3248753663,GB
3248753664,3248753919,FR
3248753920,3248754431,GB
3248754432,3248754687,AT
@@ -113983,18 +60296,16 @@
3248783616,3248783871,PL
3248783872,3248784127,UA
3248784128,3248785407,DE
-3248785408,3248785663,RO
+3248785408,3248785535,SI
+3248785536,3248785663,RO
3248785664,3248786943,SI
3248786944,3248787199,PL
-3248787200,3248787455,GB
+3248787200,3248787455,DE
3248787456,3248787711,NL
3248787712,3248787967,CH
3248787968,3248788223,RU
3248788224,3248788479,ES
-3248788480,3248788735,FR
-3248788736,3248788991,UA
-3248788992,3248789503,FR
-3248789504,3248789759,RO
+3248788480,3248789503,FR
3248789760,3248790015,FR
3248790016,3248790271,DE
3248790272,3248790527,DK
@@ -114003,15 +60314,9 @@
3248791040,3248791295,BE
3248791296,3248791551,DE
3248791552,3248792063,GB
-3248792064,3248792319,EU
-3248792320,3248792343,GB
-3248792344,3248792351,EU
-3248792352,3248792575,GB
-3248792576,3248796607,EU
+3248792320,3248792575,GB
3248796608,3248796863,GB
-3248796864,3248798975,EU
3248798976,3248799231,GB
-3248799232,3248799735,EU
3248799736,3248799743,GB
3248799744,3248800255,NL
3248800256,3248800767,RU
@@ -114020,8 +60325,8 @@
3248801792,3248802303,RU
3248802304,3248802815,FR
3248802816,3248803327,RU
-3248803328,3248804351,GB
-3248804352,3248804863,EU
+3248803328,3248803839,GB
+3248804352,3248804863,LV
3248804864,3248805375,DE
3248805376,3248805887,RU
3248805888,3248806399,NL
@@ -114029,8 +60334,7 @@
3248806912,3248807423,US
3248807936,3248808447,AT
3248808448,3248808959,GR
-3248808960,3248810079,FR
-3248810080,3248810111,UA
+3248808960,3248810111,FR
3248810112,3248810143,RU
3248810144,3248810175,CY
3248810176,3248810207,FR
@@ -114047,9 +60351,8 @@
3249012736,3249012991,DE
3249012992,3249014271,LU
3249014272,3249014783,DE
-3249014784,3249025535,LU
+3249014784,3249025023,LU
3249025536,3249025791,FR
-3249025792,3249026559,LU
3249026560,3249026815,PL
3249026816,3249045503,LU
3249045504,3249078271,DE
@@ -114099,7 +60402,6 @@
3249103872,3249104383,FI
3249104384,3249104895,RU
3249104896,3249105407,IL
-3249105408,3249105919,RU
3249105920,3249106431,NL
3249106432,3249106943,RU
3249106944,3249108479,PL
@@ -114160,32 +60462,17 @@
3249142784,3249143295,UA
3249143296,3249143807,GB
3249143808,3249274879,AT
-3249274880,3249277759,NL
-3249277760,3249277775,BG
-3249277776,3249279743,NL
-3249279744,3249279999,EU
-3249280000,3249290143,NL
-3249290144,3249290159,BG
-3249290160,3249313279,NL
-3249313280,3249313535,EU
-3249313536,3249330111,NL
-3249330112,3249330143,BG
-3249330144,3249350095,NL
-3249350096,3249350111,BG
-3249350112,3249369855,NL
-3249369856,3249370111,EU
-3249370112,3249405951,NL
-3249405952,3249406975,DE
-3249406976,3249407231,IT
-3249407232,3249521279,DE
+3249274880,3249405951,NL
+3249405952,3249521279,DE
3249521280,3249521343,UA
3249521344,3249537023,DE
3249537024,3249537279,PT
-3249537280,3249537791,NL
+3249537536,3249537791,NL
3249537792,3249538047,GB
3249538048,3249551359,NL
3249551360,3249552639,GB
-3249552640,3249574143,NL
+3249552640,3249565695,NL
+3249569792,3249574143,NL
3249574144,3249574399,RU
3249574400,3249574655,GB
3249574656,3249574911,UA
@@ -114195,13 +60482,14 @@
3249600256,3249600511,AT
3249600512,3249601535,UA
3249601536,3249601791,RU
-3249601792,3249668095,NL
+3249601792,3249655807,NL
+3249659904,3249668095,NL
3249668096,3249676287,IE
3249676288,3249676543,GB
3249676544,3249676799,IE
3249676800,3249677055,UA
3249677056,3249677311,SE
-3249677312,3249679103,IE
+3249677312,3249678847,IE
3249679104,3249679359,CH
3249679360,3249683455,IE
3249683456,3249684479,SE
@@ -114209,7 +60497,6 @@
3249698048,3249698303,PL
3249698304,3249698559,RU
3249698560,3249698815,HU
-3249698816,3249699839,GB
3249699840,3249700863,UA
3249701120,3249701631,SE
3249701632,3249701887,RU
@@ -114221,7 +60508,6 @@
3249703680,3249703935,GB
3249703936,3249704191,FR
3249704192,3249704447,RO
-3249704448,3249704703,DE
3249704704,3249704959,PL
3249704960,3249705983,UA
3249705984,3249706495,AT
@@ -114253,17 +60539,15 @@
3249716480,3249716735,NL
3249716736,3249717247,UA
3249717248,3249718271,LV
-3249718272,3249719295,DE
3249719296,3249720319,IR
3249720320,3249721343,IT
3249721344,3249721599,AT
3249721600,3249721855,BE
-3249721856,3249722623,FR
+3249721856,3249722367,FR
3249722624,3249723135,PL
3249723136,3249723391,RU
3249723392,3249723647,IT
3249723648,3249723903,GB
-3249723904,3249724159,TR
3249724160,3249724415,LU
3249724416,3249724671,IL
3249724672,3249724927,RU
@@ -114272,7 +60556,6 @@
3249725440,3249725951,RO
3249725952,3249726463,DE
3249726464,3249726975,UA
-3249726976,3249727487,IT
3249727488,3249727999,LV
3249728000,3249728511,IT
3249728512,3249729023,UA
@@ -114292,35 +60575,30 @@
3249829888,3249830143,GB
3249830144,3249830399,SE
3249830400,3249830655,IT
-3249830656,3249830911,DK
-3249830912,3249843711,SE
-3249843712,3249843839,GB
-3249843840,3249843967,US
-3249843968,3249844479,SE
+3249830656,3249844479,SE
3249844480,3249844735,AT
3249844736,3249844991,AU
3249844992,3249845759,SE
3249845760,3249846271,DE
3249846272,3249850623,SE
3249850624,3249850879,GB
-3249850880,3249855487,SE
+3249850880,3249854719,SE
+3249854720,3249854975,US
+3249854976,3249855487,SE
3249855488,3249856511,NL
3249856512,3249859583,SE
3249859584,3249860095,DE
3249860096,3249861375,SE
3249861376,3249861631,BE
3249861632,3249862143,DE
-3249862144,3249862399,BE
-3249862400,3249862655,SE
+3249862144,3249862655,SE
3249862656,3249863167,DE
3249863168,3249863423,BE
3249863424,3249863679,SE
3249863680,3249863935,ES
3249863936,3249865471,SE
3249865472,3249866751,GB
-3249866752,3249868031,SE
-3249868032,3249868287,DK
-3249868288,3249868543,SE
+3249866752,3249868543,SE
3249868544,3249868799,DE
3249868800,3249869823,NL
3249869824,3249871103,SE
@@ -114330,30 +60608,23 @@
3249871872,3249872383,SE
3249872384,3249872639,GB
3249872640,3249910783,SE
-3249910784,3249912319,GB
-3249912320,3249924607,SE
-3249924608,3249924863,NO
-3249924864,3249926143,SE
+3249910784,3249911807,GB
+3249911808,3249926143,SE
3249926144,3249926399,AU
3249926400,3249926655,SE
3249926656,3249926911,AU
3249926912,3249929471,SE
3249929472,3249929983,CA
-3249929984,3249930239,NO
-3249930240,3249931007,SE
-3249931008,3249931263,GB
-3249931264,3249931775,NL
-3249931776,3249932031,SE
-3249932032,3249932287,GB
+3249929984,3249932287,SE
3249932288,3249934335,US
-3249934336,3249935103,SE
-3249935104,3249935359,IT
-3249935360,3249960447,SE
+3249934336,3249934847,IT
+3249934848,3249960447,SE
3249960448,3249960959,DE
3249960960,3249961215,CA
3249961216,3249961471,SE
3249961472,3249961727,NL
-3249961728,3249967615,SE
+3249961728,3249967103,SE
+3249967104,3249967615,IL
3249967616,3249967871,GB
3249967872,3249968127,SE
3249968128,3249969151,FR
@@ -114363,10 +60634,7 @@
3249971200,3249971455,IT
3249971456,3249971711,SE
3249971712,3249972735,DE
-3249972736,3249972991,DK
-3249972992,3249973759,SE
-3249973760,3249974015,NL
-3249974016,3249974527,SE
+3249972736,3249974527,SE
3249974528,3249974783,ES
3249974784,3249976063,SE
3249976064,3249976319,FR
@@ -114383,8 +60651,7 @@
3249995264,3249995519,GB
3249995520,3249997055,SE
3249997056,3249997311,US
-3249997312,3249997567,IT
-3249997568,3250000127,SE
+3249997312,3250000127,SE
3250000128,3250000383,GB
3250000384,3250007295,SE
3250007296,3250007551,GB
@@ -114392,20 +60659,7 @@
3250010368,3250010879,CH
3250010880,3250012159,SE
3250012160,3250013183,DE
-3250013184,3250014207,SE
-3250014208,3250014719,DE
-3250014720,3250015231,SE
-3250015232,3250015743,FI
-3250015744,3250016767,SE
-3250016768,3250017279,NL
-3250017280,3250017535,CH
-3250017536,3250017791,SE
-3250017792,3250018303,DE
-3250018304,3250018815,FR
-3250018816,3250019071,AT
-3250019072,3250020095,SE
-3250020096,3250020351,CH
-3250020352,3250020863,SE
+3250013184,3250020863,SE
3250020864,3250021375,IT
3250021376,3250022399,FR
3250022400,3250023423,SE
@@ -114417,20 +60671,14 @@
3250030592,3250031103,DE
3250031104,3250031359,DK
3250031360,3250031615,US
-3250031616,3250032639,SE
-3250032640,3250032895,AP
-3250032896,3250035455,SE
+3250031616,3250035455,SE
3250035456,3250035711,US
3250035712,3250038271,SE
3250038272,3250039295,ES
3250039296,3250042623,SE
3250042624,3250043135,FR
-3250043136,3250043391,SE
-3250043392,3250043647,ES
-3250043648,3250061311,SE
-3250061312,3250183199,FI
-3250183200,3250183215,SE
-3250183216,3250192383,FI
+3250043136,3250061311,SE
+3250061312,3250192383,FI
3250192384,3250192639,AT
3250192640,3250192895,RU
3250192896,3250193151,IL
@@ -114440,7 +60688,7 @@
3250194176,3250194431,DE
3250194432,3250194687,FR
3250194688,3250194943,UA
-3250194944,3250195455,RO
+3250194944,3250195199,RO
3250195456,3250195711,DE
3250195712,3250196223,GB
3250196224,3250196479,UA
@@ -114452,18 +60700,17 @@
3250201600,3250202111,NL
3250202112,3250202367,BG
3250202368,3250202623,PL
-3250202624,3250233855,AT
+3250202624,3250233343,AT
+3250233600,3250233855,AT
3250233856,3250234111,GB
3250234112,3250234367,GR
-3250234368,3250245631,AT
+3250234368,3250241535,AT
3250245632,3250245887,TR
3250245888,3250246143,AT
3250246144,3250246399,GB
-3250246400,3250256895,AT
-3250256896,3250257151,CH
-3250257152,3250257663,AT
+3250246656,3250247423,AT
+3250247680,3250257663,AT
3250257664,3250257919,PL
-3250257920,3250258175,EU
3250258176,3250271231,AT
3250271232,3250271743,PL
3250271744,3250271999,LB
@@ -114473,18 +60720,20 @@
3250276352,3250276607,GB
3250276608,3250276863,RU
3250276864,3250277375,IT
-3250277376,3250278399,UA
+3250277376,3250277631,UA
+3250277632,3250277887,DE
+3250277888,3250278399,UA
3250278400,3250279423,RU
-3250279424,3250323199,AT
+3250279424,3250298879,AT
+3250308096,3250323199,AT
3250323200,3250323455,RU
3250323456,3250323711,PL
-3250323712,3250324479,SA
3250324480,3250324991,GB
3250324992,3250325247,AE
3250325248,3250325503,MA
3250325504,3250326527,OM
3250326528,3250327039,BH
-3250327040,3250331647,SA
+3250327040,3250327551,SA
3250331648,3250335743,MT
3250335744,3250339839,KW
3250339840,3250348031,JO
@@ -114499,32 +60748,27 @@
3250357904,3250357919,FR
3250357920,3250357927,PL
3250357928,3250357959,CY
-3250357960,3250358015,GB
+3250357960,3250357967,GB
+3250357976,3250358015,GB
3250358016,3250358527,LB
3250358528,3250358783,HU
-3250358784,3250359295,LB
3250359296,3250359807,HU
3250359808,3250362879,KW
3250362880,3250363391,DE
3250363392,3250363903,SE
3250363904,3250364415,DE
3250364416,3250372607,KW
-3250372608,3250373375,HU
-3250373376,3250373631,GB
+3250372608,3250373631,HU
3250373632,3250374143,DE
3250374144,3250374655,PL
3250374656,3250374911,SA
3250374912,3250375679,SE
3250375680,3250376703,GB
-3250376704,3250377983,AT
-3250377984,3250378239,AP
-3250378240,3250380799,AT
+3250376704,3250380799,AT
3250380800,3250386943,CH
3250386944,3250387199,SE
3250387200,3250387455,FR
3250387456,3250387711,DE
-3250387712,3250387967,FR
-3250387968,3250388223,JO
3250388224,3250388479,PL
3250388480,3250388735,UA
3250388736,3250388991,FR
@@ -114538,10 +60782,8 @@
3250408960,3250409471,DE
3250409472,3250409983,GB
3250409984,3250410495,DE
-3250410496,3250411007,AT
3250411008,3250411519,LT
3250411520,3250412031,RU
-3250412032,3250412543,FR
3250412544,3250413055,DK
3250413056,3250413567,DE
3250413568,3250414079,UA
@@ -114553,7 +60795,6 @@
3250417664,3250418175,IT
3250418176,3250418687,DE
3250418688,3250419199,PL
-3250419200,3250419711,NO
3250419712,3250420223,RU
3250420224,3250420735,IR
3250420736,3250421247,FR
@@ -114570,30 +60811,20 @@
3250425344,3250425599,TR
3250425600,3250425855,FR
3250425856,3250426111,LT
-3250426112,3250426367,NO
3250426368,3250426623,AT
3250426624,3250426879,BE
3250426880,3250427135,JO
3250427136,3250427391,NL
3250427392,3250429951,DE
-3250429952,3250434335,SI
-3250434336,3250434351,AT
-3250434352,3250438143,SI
-3250438144,3250443519,CH
-3250443520,3250443527,DE
-3250443528,3250446335,CH
-3250446336,3250451583,DE
-3250451584,3250451599,AT
-3250451600,3250454527,DE
+3250429952,3250438143,SI
+3250438144,3250446335,CH
+3250446336,3250454527,DE
3250454528,3250585599,BE
3250585600,3250585855,NL
-3250585856,3250588671,PT
-3250588672,3250588799,IE
+3250586624,3250588671,PT
3250588800,3250588927,CY
3250588928,3250589183,GB
3250589184,3250589439,DE
-3250589440,3250589471,IE
-3250589472,3250589503,NL
3250589504,3250589567,HR
3250589568,3250589631,RU
3250589632,3250589695,NO
@@ -114613,19 +60844,17 @@
3250601984,3250610175,GB
3250610176,3250618367,TR
3250618368,3250626559,RU
-3250626560,3250633983,PL
-3250633984,3250634239,US
-3250634240,3250634751,PL
+3250626560,3250634751,PL
3250634752,3250642943,GB
3250642944,3250651135,CH
3250651136,3250659327,IT
-3250659328,3250667519,EU
+3250659328,3250660607,GB
3250667520,3250675711,PL
3250675712,3250683903,GB
3250683904,3250692095,CH
3250692096,3250692351,NO
3250692352,3250692607,NL
-3250693376,3250693631,NL
+3250693376,3250693631,UA
3250693632,3250694143,DE
3250694144,3250694399,PL
3250694400,3250694655,GB
@@ -114659,19 +60888,15 @@
3250748160,3250748415,PL
3250748416,3250749439,UA
3250749440,3250749695,GH
-3250749696,3250749951,EU
-3250749952,3250750463,RO
-3250750464,3250750537,FR
-3250750538,3250750541,EU
-3250750542,3250751487,FR
+3250749696,3250749951,IT
+3250750208,3250750463,RO
+3250750464,3250751487,FR
3250751488,3250751999,DE
3250752000,3250752511,CH
3250752512,3250753023,BG
3250753024,3250754047,DE
3250754048,3250754303,AT
-3250754304,3250754559,GB
3250754560,3250755071,DE
-3250755072,3250755583,GB
3250755584,3250755839,FR
3250755840,3250756351,RU
3250756608,3250756863,BG
@@ -114684,7 +60909,6 @@
3250847744,3250978815,DE
3250978816,3251044351,HR
3251044352,3251109887,FI
-3251109888,3251110143,SI
3251110144,3251110655,BG
3251110656,3251110911,IT
3251110912,3251111167,FR
@@ -114695,19 +60919,14 @@
3251112192,3251112447,SK
3251112448,3251112703,RU
3251112704,3251112959,SE
-3251112960,3251113215,BG
-3251113216,3251113471,VG
-3251113472,3251113983,BG
+3251112960,3251113983,BG
3251114496,3251114751,RU
3251114752,3251115007,RO
3251115008,3251115263,PL
3251115264,3251115519,RU
3251115520,3251115775,UA
3251115776,3251116031,BE
-3251116032,3251116287,BG
3251116288,3251116543,GB
-3251116544,3251116799,DK
-3251116800,3251117055,GB
3251117056,3251117311,BG
3251117312,3251117567,FR
3251117568,3251117823,IL
@@ -114725,12 +60944,10 @@
3251123712,3251124223,RU
3251124736,3251125247,FR
3251125248,3251125759,BE
-3251125760,3251126271,RU
3251126272,3251126783,UA
3251126784,3251127295,PL
3251127296,3251127807,UA
3251127808,3251128319,NL
-3251128320,3251128831,DE
3251128832,3251129343,SE
3251129344,3251129855,UA
3251129856,3251130367,CH
@@ -114744,7 +60961,6 @@
3251133952,3251134463,RU
3251134464,3251134975,DE
3251134976,3251135999,GB
-3251136000,3251136511,RO
3251136512,3251137023,DK
3251137024,3251137535,DE
3251137536,3251138047,PL
@@ -114761,7 +60977,6 @@
3251143424,3251143679,LV
3251143680,3251143935,NL
3251143936,3251144191,PL
-3251144192,3251144447,TR
3251144448,3251144703,BE
3251144704,3251144959,HU
3251144960,3251145471,DE
@@ -114776,9 +60991,7 @@
3251147520,3251147775,NL
3251147776,3251148031,SE
3251148032,3251148287,RU
-3251148288,3251148543,EU
3251148544,3251148799,UA
-3251148800,3251149055,HU
3251149056,3251149311,NL
3251149312,3251149567,DE
3251149568,3251149823,IE
@@ -114788,7 +61001,6 @@
3251150848,3251151103,DE
3251151104,3251151359,UA
3251151360,3251151615,DE
-3251151616,3251151871,PL
3251151872,3251152127,NL
3251152128,3251152639,RO
3251152640,3251152895,UA
@@ -114835,11 +61047,9 @@
3251164416,3251164671,IT
3251164672,3251164927,NL
3251164928,3251165439,PL
-3251165440,3251165695,CH
3251165696,3251165951,DE
3251165952,3251166207,UA
3251166208,3251166463,CH
-3251166464,3251166719,RU
3251166720,3251166975,FR
3251166976,3251167231,CH
3251167232,3251167487,LV
@@ -114853,23 +61063,20 @@
3251170048,3251170303,NO
3251170304,3251170559,CH
3251170560,3251170815,BG
-3251170816,3251171327,RU
+3251171072,3251171327,RU
3251171328,3251171839,DE
3251171840,3251172095,RO
3251172096,3251172351,ES
-3251172352,3251172607,RO
3251172608,3251172863,GB
3251172864,3251173119,UA
3251173120,3251173375,SA
3251173376,3251173631,UA
3251173632,3251173887,DE
3251173888,3251174143,DK
-3251174144,3251174399,RU
-3251174400,3251174655,RO
3251174656,3251174911,DE
3251174912,3251175167,RO
3251175168,3251175423,UA
-3251175424,3251177471,IT
+3251175424,3251177471,FR
3251177472,3251179519,DE
3251179520,3251180031,SE
3251180032,3251180543,PL
@@ -114882,7 +61089,6 @@
3251183616,3251183871,LT
3251183872,3251184127,CH
3251184128,3251184383,PL
-3251184384,3251184639,DK
3251184640,3251184895,PL
3251184896,3251185151,DE
3251185408,3251185663,DK
@@ -114896,7 +61102,6 @@
3251187456,3251187711,GB
3251187712,3251188735,NL
3251188736,3251189759,DE
-3251189760,3251190783,IT
3251190784,3251191807,UA
3251191808,3251192319,GB
3251192320,3251192831,LV
@@ -114910,7 +61115,8 @@
3251197952,3251198975,RU
3251198976,3251199999,DE
3251200000,3251200511,SE
-3251200512,3251201279,UA
+3251200512,3251200767,UA
+3251201024,3251201279,UA
3251201280,3251201535,SI
3251201536,3251201791,AT
3251201792,3251202047,FR
@@ -114921,20 +61127,17 @@
3251203328,3251203583,SI
3251203584,3251203839,CZ
3251203840,3251204095,RU
-3251204096,3251204607,DE
3251205120,3251205631,UA
3251205632,3251206143,RU
3251206144,3251206655,GB
3251206656,3251207167,CH
3251207168,3251207679,GB
-3251207680,3251208191,RU
3251208192,3251209215,CY
3251209216,3251210239,GB
3251210240,3251211263,PL
3251211264,3251212287,UA
3251212288,3251212415,PL
3251212416,3251212671,FI
-3251212672,3251212799,SE
3251212800,3251212927,FR
3251212928,3251213055,RO
3251213056,3251213119,SE
@@ -114942,33 +61145,27 @@
3251213152,3251213183,FR
3251213184,3251213215,UA
3251213216,3251213247,CY
-3251213248,3251213311,GB
+3251213280,3251213311,GB
3251213312,3251213375,CY
3251213376,3251213439,DE
-3251213440,3251213503,GB
3251213504,3251213567,NL
3251213568,3251213631,FR
3251213632,3251213695,PL
3251213760,3251213823,CY
3251213824,3251213887,GB
3251213888,3251214015,CY
-3251214016,3251214079,UA
3251214080,3251214143,CY
3251214144,3251214207,AF
-3251214208,3251214271,RU
3251214272,3251214335,DE
3251214336,3251214463,RU
3251214464,3251214591,UA
3251214592,3251214975,GB
3251214976,3251215103,RO
-3251215104,3251215231,SI
3251215232,3251215359,IL
3251215360,3251215487,UA
3251215488,3251215615,SE
3251215616,3251215743,CY
-3251215744,3251215871,GB
3251215872,3251216127,RO
-3251216128,3251216255,FI
3251216256,3251216383,RU
3251216384,3251216639,GB
3251216640,3251216895,RO
@@ -114985,14 +61182,13 @@
3251220224,3251220479,UA
3251220480,3251222527,DE
3251222528,3251224575,GB
-3251224576,3251225087,UA
3251225088,3251225599,FR
3251225600,3251226111,GB
3251226112,3251226623,UA
3251226624,3251227135,GB
3251227136,3251227647,DE
3251227648,3251228159,GB
-3251228160,3251229695,UA
+3251228160,3251228671,UA
3251229696,3251230719,SI
3251230720,3251231743,UA
3251231744,3251232767,NO
@@ -115001,12 +61197,9 @@
3251234816,3251235839,RO
3251235840,3251236863,DE
3251236864,3251237887,BG
-3251237888,3251238911,DK
3251238912,3251239935,FR
-3251239936,3251240959,US
3251240960,3251241215,BE
3251241216,3251243007,GB
-3251243008,3251245055,BE
3251245056,3251245311,DE
3251245312,3251245567,BE
3251245568,3251245823,TR
@@ -115017,11 +61210,10 @@
3251246848,3251247103,NL
3251247104,3251249151,DE
3251249152,3251251199,NL
-3251251200,3251252735,EU
3251252736,3251256831,CH
3251256832,3251257343,GB
3251257344,3251259903,BE
-3251259904,3251261439,FR
+3251260672,3251261439,FR
3251261440,3251264255,CH
3251264256,3251265535,FR
3251265536,3251267839,NL
@@ -115032,8 +61224,7 @@
3251269120,3251269215,DK
3251269216,3251269270,NL
3251269271,3251269271,DK
-3251269272,3251269727,NL
-3251269728,3251269887,DE
+3251269272,3251269759,NL
3251269888,3251270143,GB
3251270144,3251270399,PL
3251270400,3251270655,NO
@@ -115049,39 +61240,31 @@
3251272960,3251273471,FR
3251273472,3251290111,DE
3251290112,3251302399,GB
-3251302400,3251306239,LI
-3251306240,3251306495,EU
+3251302400,3251306495,LI
3251306496,3251306751,AT
3251306752,3251307007,MK
3251307008,3251307519,RS
3251307520,3251307775,MK
3251307776,3251308031,GB
3251308032,3251308543,RS
-3251308544,3251310591,US
3251310592,3251311103,SI
3251311104,3251311615,RS
3251311616,3251312127,GB
-3251312128,3251312383,RS
3251312384,3251312639,CH
-3251312640,3251314175,RS
-3251314176,3251314687,CH
+3251312640,3251314687,RS
3251314688,3251315711,FR
3251315712,3251317759,RU
3251317760,3251318783,PL
3251318784,3251319807,UA
-3251319808,3251320831,HU
3251320832,3251321855,PL
3251321856,3251322879,RU
-3251322880,3251329727,GB
-3251329728,3251329791,FR
-3251329792,3251331071,GB
-3251331072,3251331583,FR
+3251322880,3251331327,GB
+3251331328,3251331583,FR
3251331584,3251332095,PL
3251332096,3251333119,RU
3251333120,3251333631,CH
3251333632,3251334143,PT
3251334144,3251334655,FR
-3251334656,3251335167,UA
3251335168,3251335679,RU
3251335680,3251336191,RO
3251336192,3251336703,GB
@@ -115093,8 +61276,7 @@
3251347456,3251355647,DE
3251355648,3251356159,GB
3251356160,3251356671,AT
-3251356672,3251356927,LV
-3251356928,3251357183,EE
+3251356672,3251357183,EE
3251357184,3251357695,BG
3251357696,3251358207,ES
3251358208,3251358719,RU
@@ -115102,7 +61284,6 @@
3251359232,3251360255,PL
3251360256,3251360767,GB
3251360768,3251361279,FR
-3251361280,3251361791,RO
3251361792,3251362303,AT
3251362304,3251362815,UA
3251362816,3251363327,NL
@@ -115114,110 +61295,76 @@
3251366912,3251367423,UA
3251367424,3251367935,DE
3251367936,3251372031,GB
-3251372032,3251604447,IT
-3251604448,3251604455,CH
-3251604456,3251634175,IT
-3251634176,3251661311,FI
-3251661312,3251661567,NO
-3251661568,3251672575,FI
-3251672576,3251672831,NL
-3251672832,3251674879,FI
-3251674880,3251675135,BE
-3251675136,3251705343,FI
-3251705344,3251705599,DK
-3251705600,3251707391,FI
-3251707392,3251707647,SE
-3251707648,3251710207,FI
-3251710208,3251710215,NL
-3251710216,3251710223,FI
-3251710224,3251710239,NL
-3251710240,3251734271,FI
-3251734272,3251734527,CH
-3251734528,3251734783,NL
-3251734784,3251765247,FI
-3251765248,3251765503,NL
-3251765504,3251774207,FI
-3251774208,3251774463,DE
-3251774464,3251783423,FI
-3251783424,3251783679,GB
-3251783680,3251795455,FI
-3251795456,3251795711,GB
-3251795712,3251802879,FI
-3251802880,3251803135,BE
-3251803136,3251806207,FI
-3251806208,3251815167,BE
-3251815168,3251815679,LU
-3251815680,3251818495,BE
-3251818496,3251850495,FI
-3251850496,3251850751,FR
-3251850752,3251851007,CH
-3251851008,3251896319,FI
-3251896320,3252015687,NO
-3252015688,3252015695,SE
-3252015696,3252166655,NO
-3252166656,3252167423,SE
-3252167424,3252167679,NO
+3251372032,3251376127,IT
+3251376128,3251378175,SI
+3251378176,3251406847,IT
+3251406848,3251407871,SI
+3251407872,3251460095,IT
+3251460096,3251462143,SI
+3251462144,3251470335,IT
+3251470336,3251472383,SI
+3251472384,3251634175,IT
+3251634176,3251896319,FI
+3251896320,3252166655,NO
+3252166656,3252167679,SE
3252167680,3252176127,NL
-3252176128,3252176383,NO
-3252176384,3252176895,HR
-3252176896,3252177151,NO
-3252177152,3252178943,HR
-3252178944,3252179199,NO
-3252179200,3252179455,SE
+3252176128,3252177919,SE
+3252177920,3252178943,HR
+3252178944,3252179455,SE
3252179456,3252189183,NL
-3252189184,3252191231,NO
-3252191232,3252197119,HR
-3252197120,3252197375,NO
-3252197376,3252203519,HR
-3252203520,3252207615,NO
+3252189184,3252190719,SE
+3252190720,3252190975,NO
+3252190976,3252191231,SE
+3252191232,3252196351,HR
+3252196352,3252197375,SE
+3252197376,3252202495,HR
+3252202496,3252203007,SE
+3252203008,3252205567,HR
+3252205568,3252205823,SE
+3252205824,3252207615,NO
3252207616,3252211711,NL
-3252211712,3252211967,SE
-3252211968,3252214527,NO
-3252214528,3252214783,SE
-3252214784,3252219135,NO
-3252219136,3252219391,SE
-3252219392,3252221183,NO
-3252221184,3252221439,SE
-3252221440,3252222463,HR
-3252222464,3252223231,NO
-3252223232,3252223743,SE
-3252223744,3252223999,NO
+3252211712,3252214271,NO
+3252214272,3252214783,SE
+3252214784,3252220927,NO
+3252220928,3252223999,SE
3252224000,3252232320,NL
3252232321,3252233215,SE
3252233216,3252248575,NO
3252248576,3252256767,NL
-3252256768,3252277759,NO
-3252277760,3252279295,HR
-3252279296,3252279807,NO
-3252279808,3252286463,HR
-3252286464,3252289535,NO
+3252256768,3252277247,NO
+3252277248,3252277759,SE
+3252277760,3252286463,HR
+3252286464,3252287487,SE
+3252287488,3252289535,LT
3252289536,3252289791,BG
3252289792,3252291327,GR
-3252291328,3252291583,SK
3252291584,3252293631,FR
-3252293632,3252297983,DE
-3252297984,3252313599,GR
+3252293632,3252297727,DE
+3252297984,3252298239,GR
+3252298752,3252308223,GR
+3252308224,3252308479,DE
+3252308480,3252310527,GR
+3252311040,3252313599,GR
3252313600,3252313855,SI
3252313856,3252314111,DE
3252314112,3252314623,GR
3252314624,3252314879,HU
3252314880,3252315135,GB
3252315136,3252316415,CH
-3252316416,3252316671,FR
3252316672,3252318463,GR
3252318464,3252318719,TR
-3252318720,3252318975,MQ
+3252318720,3252318975,GP
3252318976,3252319231,PL
3252319232,3252319743,AT
-3252319744,3252319999,UA
+3252319744,3252319999,RU
3252320000,3252320255,GR
3252320256,3252320511,CZ
-3252320512,3252321791,GR
+3252320768,3252321791,GR
3252321792,3252322303,PL
3252322304,3252323327,NO
3252323328,3252324351,PL
3252324352,3252326399,RU
-3252326400,3252327423,UA
+3252326400,3252327423,DE
3252327424,3252329471,PL
3252329472,3252330495,UA
3252330496,3252334591,GB
@@ -115227,15 +61374,14 @@
3252337664,3252338687,RU
3252338688,3252340735,BE
3252340736,3252340991,TR
-3252340992,3252341247,GR
3252341248,3252341503,DE
-3252341504,3252342015,GR
+3252341504,3252341759,GR
3252342016,3252342079,GB
3252342080,3252342239,CY
3252342240,3252342271,CH
3252342272,3252342527,SE
3252342528,3252342543,NO
-3252342544,3252342591,DE
+3252342544,3252342591,CH
3252342592,3252342607,IE
3252342608,3252342655,CY
3252342656,3252342783,IL
@@ -115243,7 +61389,8 @@
3252346368,3252346623,GB
3252346624,3252355071,GR
3252355072,3252355327,GB
-3252355328,3252358911,LT
+3252355328,3252356351,LT
+3252357120,3252358911,LT
3252358912,3252359167,DE
3252359168,3252362239,DK
3252362240,3252362495,PL
@@ -115255,7 +61402,6 @@
3252380160,3252380415,BE
3252380416,3252380671,UA
3252380672,3252380927,SI
-3252380928,3252381183,RU
3252381184,3252381439,IT
3252381440,3252381695,ES
3252381696,3252381951,RU
@@ -115273,7 +61419,6 @@
3252385280,3252385535,GB
3252385536,3252385791,RO
3252385792,3252386047,GB
-3252386048,3252386303,SI
3252386304,3252386559,GB
3252386560,3252386815,BE
3252386816,3252387071,UA
@@ -115281,368 +61426,32 @@
3252387328,3252387583,PL
3252387584,3252387839,RU
3252387840,3252404223,LT
-3252404224,3252406783,NO
-3252406784,3252407295,LT
-3252407296,3252407551,ZA
-3252407552,3252407759,LT
-3252407760,3252407775,CD
-3252407776,3252408319,LT
-3252408320,3252408327,MW
-3252408328,3252408335,LT
-3252408336,3252408339,CD
-3252408340,3252408359,LT
-3252408360,3252408367,GN
-3252408368,3252408375,LT
-3252408376,3252408383,GN
-3252408384,3252408391,BI
-3252408392,3252408511,LT
-3252408512,3252408527,AF
-3252408528,3252408575,LT
-3252408576,3252408607,GQ
-3252408608,3252408639,LT
-3252408640,3252408671,CF
-3252408672,3252408703,SO
-3252408704,3252408735,NG
-3252408736,3252408751,SO
-3252408752,3252408831,LT
-3252408832,3252408839,NG
-3252408840,3252408847,KE
-3252408848,3252408855,LR
-3252408856,3252408863,LT
-3252408864,3252408871,LR
-3252408872,3252408879,CI
-3252408880,3252409023,LT
-3252409024,3252409039,TZ
-3252409040,3252409047,MR
-3252409048,3252409151,LT
-3252409152,3252409167,KE
-3252409168,3252409175,UG
-3252409176,3252409183,LT
-3252409184,3252409191,UG
-3252409192,3252409207,LT
-3252409208,3252409215,TZ
-3252409216,3252409223,BW
-3252409224,3252409231,LT
-3252409232,3252409247,UG
-3252409248,3252409263,CD
-3252409264,3252409271,SS
-3252409272,3252409279,LT
-3252409280,3252409295,SO
-3252409296,3252409303,LT
-3252409304,3252409343,SO
-3252409344,3252409375,TD
-3252409376,3252409407,LT
-3252409408,3252409439,BI
-3252409440,3252409471,LT
-3252409472,3252409503,MR
-3252409504,3252409511,GH
-3252409512,3252409519,BF
-3252409520,3252409535,CD
-3252409536,3252409599,LT
-3252409600,3252409615,MA
-3252409616,3252409631,LT
-3252409632,3252409647,AO
-3252409648,3252409663,LT
+3252404224,3252405759,NO
+3252405760,3252409663,LT
3252409664,3252409679,CD
-3252409680,3252409727,LT
-3252409728,3252409735,LR
-3252409736,3252409751,NG
-3252409752,3252409759,BJ
-3252409760,3252409775,BI
-3252409776,3252409791,LT
-3252409792,3252409823,BI
-3252409824,3252410431,LT
-3252410432,3252410463,BI
-3252410464,3252410495,LT
-3252410496,3252410623,BI
-3252410624,3252410751,ZW
-3252410752,3252410783,SL
-3252410784,3252411327,LT
-3252411328,3252411367,CD
-3252411368,3252411375,LT
-3252411376,3252411391,CD
-3252411392,3252411647,LT
-3252411648,3252411679,BI
-3252411680,3252411807,LT
-3252411808,3252411823,NG
-3252411824,3252411839,SO
-3252411840,3252411879,LT
-3252411880,3252411887,CD
-3252411888,3252411895,LT
-3252411896,3252411903,CD
-3252411904,3252411967,GN
-3252411968,3252412159,LT
-3252412160,3252412415,GN
-3252412416,3252414463,LT
-3252414464,3252414471,GH
-3252414472,3252414479,LT
-3252414480,3252414487,TZ
-3252414488,3252414495,LT
-3252414496,3252414511,ML
-3252414512,3252414527,MR
-3252414528,3252414607,LT
-3252414608,3252414623,ER
-3252414624,3252414639,TZ
-3252414640,3252414647,GH
-3252414648,3252414655,NE
-3252414656,3252414719,ER
-3252414720,3252414983,LT
-3252414984,3252415007,IQ
-3252415008,3252415015,LT
-3252415016,3252415039,IQ
-3252415040,3252415055,LT
-3252415056,3252415063,IQ
-3252415064,3252415079,LT
-3252415080,3252415111,IQ
-3252415112,3252415119,LT
-3252415120,3252415159,IQ
-3252415160,3252415167,LT
-3252415168,3252415191,IQ
-3252415192,3252415199,LT
-3252415200,3252415231,IQ
-3252415232,3252415487,LT
-3252415488,3252415743,US
-3252415744,3252415967,LT
-3252415968,3252415999,CM
-3252416000,3252416895,LT
-3252416896,3252416927,GN
-3252416928,3252417279,LT
-3252417280,3252417287,IQ
-3252417288,3252417295,LT
-3252417296,3252417311,AF
-3252417312,3252417327,LT
-3252417328,3252417375,AF
-3252417376,3252417391,LT
-3252417392,3252417439,AF
-3252417440,3252417455,LT
-3252417456,3252417527,AF
-3252417528,3252417935,LT
-3252417936,3252417951,ZM
-3252417952,3252418559,LT
-3252418560,3252418623,JO
-3252418624,3252418687,LT
-3252418688,3252418719,JO
-3252418720,3252418815,LT
-3252418816,3252418847,KE
-3252418848,3252419103,LT
-3252419104,3252419119,SL
-3252419120,3252419127,GH
-3252419128,3252419135,LT
-3252419136,3252419167,SL
-3252419168,3252419199,CD
-3252419200,3252419215,LT
-3252419216,3252419247,GN
-3252419248,3252419311,LT
-3252419312,3252419327,ZM
-3252419328,3252419359,LT
-3252419360,3252419423,GH
-3252419424,3252419839,LT
-3252419840,3252419879,IQ
-3252419880,3252419919,LT
-3252419920,3252419927,IQ
-3252419928,3252420031,LT
-3252420032,3252420047,IQ
-3252420048,3252420095,LT
-3252420096,3252420111,IQ
-3252420112,3252420119,GB
-3252420120,3252420143,IQ
-3252420144,3252420367,LT
-3252420368,3252420383,IQ
-3252420384,3252420415,LT
-3252420416,3252420431,GB
-3252420432,3252420455,LT
-3252420456,3252420463,IQ
-3252420464,3252420471,AF
-3252420472,3252420583,LT
-3252420584,3252420591,IQ
-3252420592,3252421631,LT
+3252409680,3252421631,LT
3252421632,3252423679,NO
-3252423680,3252424703,LT
-3252424704,3252424719,GN
-3252424720,3252424735,LT
-3252424736,3252424751,GA
-3252424752,3252424799,LT
-3252424800,3252424823,SS
-3252424824,3252424831,AF
-3252424832,3252424895,LT
-3252424896,3252424928,KE
-3252424929,3252425023,LT
-3252425024,3252425215,SO
-3252425216,3252425343,TD
-3252425344,3252425471,LT
-3252425472,3252425535,AO
-3252425536,3252425551,LT
-3252425552,3252425567,AO
-3252425568,3252425727,LT
-3252425728,3252425983,A2
-3252425984,3252427775,LT
-3252427776,3252428287,MW
-3252428288,3252428303,AO
-3252428304,3252428319,LT
-3252428320,3252428335,AO
-3252428336,3252428351,LT
-3252428352,3252428383,AO
-3252428384,3252428391,LT
-3252428392,3252428415,AO
-3252428416,3252428447,KE
-3252428448,3252428543,LT
-3252428544,3252428799,NG
-3252428800,3252430463,LT
-3252430464,3252430479,BJ
-3252430480,3252430543,LT
-3252430544,3252430559,BJ
-3252430560,3252430847,LT
-3252430848,3252431359,MW
-3252431360,3252431871,LT
-3252431872,3252432127,SO
-3252432128,3252432383,LR
-3252432384,3252432575,LT
-3252432576,3252432591,MW
-3252432592,3252434687,LT
-3252434688,3252434703,GH
-3252434704,3252434711,TZ
-3252434712,3252434719,LT
-3252434720,3252434743,GH
-3252434744,3252434751,ML
-3252434752,3252434759,GN
-3252434760,3252434767,SL
-3252434768,3252434775,BF
-3252434776,3252434783,SL
-3252434784,3252434791,ZM
-3252434792,3252434807,ML
-3252434808,3252435199,LT
-3252435200,3252435231,TZ
-3252435232,3252435247,LT
-3252435248,3252435263,BW
-3252435264,3252435279,ML
-3252435280,3252435287,GN
-3252435288,3252435295,GH
-3252435296,3252435303,LR
-3252435304,3252435311,LT
-3252435312,3252435319,CF
-3252435320,3252435327,MZ
-3252435328,3252435343,CD
-3252435344,3252435375,BF
-3252435376,3252435415,GN
-3252435416,3252435455,CD
-3252435456,3252435711,TZ
-3252435712,3252435855,GH
-3252435856,3252435871,MR
-3252435872,3252435887,GH
-3252435888,3252435903,CD
-3252435904,3252435919,BW
-3252435920,3252435935,BF
-3252435936,3252435959,CD
-3252435960,3252435967,ZM
-3252435968,3252436223,TZ
-3252436224,3252436239,GN
-3252436240,3252436271,ML
-3252436272,3252436287,BF
-3252436288,3252436303,CD
-3252436304,3252436319,ZM
-3252436320,3252436351,LT
-3252436352,3252436383,GN
-3252436384,3252436399,LR
-3252436400,3252436415,SL
-3252436416,3252436447,LT
-3252436448,3252436479,ER
-3252436480,3252436991,LT
-3252436992,3252437503,NG
-3252437504,3252439263,LT
-3252439264,3252439271,SN
-3252439272,3252439295,LT
-3252439296,3252439391,SO
-3252439392,3252439807,LT
-3252439808,3252439871,SO
-3252439872,3252444287,LT
-3252444288,3252444351,TZ
-3252444352,3252445183,LT
-3252445184,3252445263,GN
-3252445264,3252446711,LT
-3252446712,3252446719,NO
-3252446720,3252447231,LT
-3252447232,3252448255,NO
-3252448256,3252448511,SE
+3252423680,3252448511,LT
3252448512,3252448767,NO
-3252448768,3252449279,SE
-3252449280,3252449535,CN
-3252449536,3252449607,LT
-3252449608,3252449615,CH
-3252449616,3252449623,DK
-3252449624,3252449791,LT
+3252448768,3252449791,LT
3252449792,3252450047,DK
-3252450048,3252450303,LT
-3252450304,3252450815,NO
-3252450816,3252450823,ET
-3252450824,3252450847,LT
-3252450848,3252450863,IQ
-3252450864,3252450879,LT
-3252450880,3252450911,NO
-3252450912,3252450943,LT
-3252450944,3252450959,CH
-3252450960,3252451071,LT
-3252451072,3252451327,CH
-3252451328,3252451359,SL
-3252451360,3252451591,LT
-3252451592,3252451607,GM
-3252451608,3252451631,GW
-3252451632,3252451655,GN
-3252451656,3252451679,SL
-3252451680,3252451695,LR
-3252451696,3252452095,LT
-3252452096,3252452127,NO
-3252452128,3252452175,LT
-3252452176,3252452191,NO
-3252452192,3252452223,LT
-3252452224,3252452227,NL
-3252452228,3252452271,LT
-3252452272,3252452351,NO
-3252452352,3252452487,LT
-3252452488,3252452495,MW
-3252452496,3252452503,ZM
-3252452504,3252452511,SD
-3252452512,3252452543,LT
+3252450048,3252452543,LT
3252452544,3252452551,SS
-3252452552,3252452607,LT
-3252452608,3252452735,TD
-3252452736,3252453263,LT
-3252453264,3252453271,NG
-3252453272,3252454399,LT
-3252454400,3252454431,CD
-3252454432,3252454655,LT
-3252454656,3252454911,IQ
-3252454912,3252455679,LT
-3252455680,3252455935,BI
-3252455936,3252456447,LT
-3252456448,3252456959,BJ
-3252456960,3252460287,LT
-3252460288,3252460319,US
-3252460320,3252460543,LT
-3252460544,3252460671,US
-3252460672,3252460767,LT
-3252460768,3252460799,US
-3252460800,3252460831,AF
-3252460832,3252461055,US
-3252461056,3252461567,NO
-3252461568,3252469759,LT
+3252452552,3252455679,LT
+3252455680,3252455807,BI
+3252455808,3252469759,LT
3252469760,3252473855,NL
-3252473856,3252475903,LT
-3252475904,3252476159,US
-3252476160,3252486143,LT
+3252473856,3252486143,LT
3252486144,3252490239,BE
3252490240,3252496127,SE
3252496128,3252496383,AU
3252496384,3252500223,SE
3252500224,3252500479,GB
-3252500480,3252501247,SE
-3252501248,3252501503,EU
-3252501504,3252505343,SE
+3252500480,3252505343,SE
3252505344,3252505599,US
3252505600,3252507135,SE
3252507136,3252507647,RO
-3252507648,3252509183,GB
-3252509184,3252509439,AP
-3252509440,3252509951,GB
+3252507648,3252509951,GB
3252509952,3252510719,CH
3252510720,3252514815,FR
3252514816,3252515071,SI
@@ -115653,18 +61462,13 @@
3252516096,3252516351,FR
3252516352,3252516607,GB
3252516608,3252516863,SE
-3252516864,3252517119,FR
-3252517120,3252517375,EU
3252517376,3252517631,PL
-3252517632,3252517887,BE
3252517888,3252518143,DK
3252518144,3252518399,NL
3252518400,3252518655,PL
3252518656,3252518911,DE
3252518912,3252527103,NL
3252527104,3252535295,BE
-3252535296,3252539391,GB
-3252539392,3252540415,IE
3252540416,3252541951,NL
3252541952,3252542207,CI
3252542208,3252551679,BE
@@ -115707,9 +61511,8 @@
3252616704,3252616959,ES
3252616960,3252617215,CH
3252617216,3252617471,PL
-3252617472,3252634623,CH
+3252617472,3252633599,CH
3252634624,3252634879,RU
-3252634880,3252636671,CH
3252636672,3252636927,TR
3252636928,3252637183,DE
3252637184,3252637695,GB
@@ -115719,14 +61522,11 @@
3252642816,3252643071,NL
3252643072,3252643327,RO
3252643328,3252643583,CH
-3252643584,3252643839,AT
3252643840,3252682751,CH
3252682752,3252813823,HU
3252813824,3252830207,RO
-3252830208,3252832255,MD
-3252832256,3252832767,RO
-3252832768,3252834303,MD
-3252834304,3252862975,RO
+3252830208,3252830719,MD
+3252830720,3252862975,RO
3252862976,3252879359,HU
3252879360,3252895743,EG
3252895744,3252903935,IT
@@ -115736,30 +61536,25 @@
3252904960,3252905215,PL
3252905216,3252905471,CH
3252905472,3252905727,LT
-3252905728,3252905983,BE
3252905984,3252906239,IT
3252906240,3252906495,PL
3252906496,3252906751,GB
3252906752,3252907007,FR
3252907008,3252907263,AT
-3252907264,3252907775,RO
+3252907520,3252907775,RO
3252907776,3252908031,GB
3252908032,3252908287,PL
3252908288,3252908543,AT
-3252908544,3252908799,MT
3252908800,3252909055,UA
3252909056,3252909311,PL
3252909312,3252909567,DE
3252909568,3252909823,GB
3252909824,3252910335,UA
-3252910336,3252910591,NL
3252910848,3252911103,PL
3252911104,3252911359,DE
-3252911360,3252911615,RU
3252911616,3252911871,SE
3252911872,3252912127,SA
3252912128,3252912383,EG
-3252912384,3252912639,HU
3252912640,3252912895,FR
3252912896,3252913151,PL
3252913152,3252913407,ES
@@ -115782,8 +61577,7 @@
3252937728,3252938239,FR
3252938240,3252938751,UA
3252938752,3252939263,RU
-3252939264,3252939775,EU
-3252939776,3252940287,RO
+3252939264,3252939775,DE
3252940288,3252940799,PT
3252940800,3252941311,RU
3252941312,3252941823,RO
@@ -115796,15 +61590,12 @@
3252945152,3252945407,GB
3252945408,3252945663,UA
3252945664,3252980735,AT
-3252980736,3252980991,PL
3252980992,3252981247,GB
3252981248,3252981503,RU
3252981504,3252981759,SE
3252981760,3252982015,DE
-3252982016,3252982271,RO
3252982272,3252982527,DE
3252982528,3252982783,FR
-3252982784,3252983039,UA
3252983040,3252983551,DE
3252983552,3252983807,SI
3252983808,3252984063,BG
@@ -115821,15 +61612,7 @@
3253005056,3253010431,AT
3253010432,3253075967,FI
3253075968,3253207039,RO
-3253207040,3253223679,RU
-3253223680,3253223935,UA
-3253223936,3253230591,RU
-3253230592,3253230847,BY
-3253230848,3253247999,RU
-3253248000,3253248255,DE
-3253248256,3253265407,RU
-3253265408,3253265919,AM
-3253265920,3253270527,RU
+3253207040,3253270527,RU
3253270528,3253271551,BY
3253271552,3253338111,RU
3253338112,3253338367,PL
@@ -115837,44 +61620,36 @@
3253380864,3253381119,IT
3253381120,3253383935,SE
3253383936,3253384191,NO
-3253384192,3253384447,SE
-3253384448,3253384703,IT
-3253384704,3253388287,SE
+3253384192,3253388287,SE
3253388288,3253388799,FR
-3253388800,3253389055,CY
+3253388800,3253389055,SE
3253389056,3253389823,FR
-3253389824,3253398271,SE
+3253389824,3253395455,SE
+3253395456,3253395967,IT
+3253395968,3253398271,SE
3253398272,3253398783,FR
3253398784,3253399039,SE
3253399040,3253399295,FR
3253399296,3253399551,IT
3253399552,3253400575,SE
3253400576,3253401087,IT
-3253401088,3253401343,SE
-3253401344,3253401599,EU
-3253401600,3253402111,SE
+3253401088,3253402111,SE
3253402112,3253402367,IT
3253402368,3253402623,JP
3253402624,3253403647,SE
3253403648,3253403903,PL
-3253403904,3253405563,SE
-3253405564,3253405564,EU
-3253405565,3253409279,SE
-3253409280,3253409791,AT
+3253403904,3253409791,SE
3253409792,3253410047,GB
-3253410048,3253411327,SE
-3253411328,3253411583,NO
-3253411584,3253412351,SE
+3253410048,3253412351,SE
3253412352,3253412607,US
3253412608,3253416447,SE
-3253416448,3253416959,GB
-3253416960,3253428223,SE
+3253416448,3253416703,GB
+3253416704,3253428223,SE
3253428224,3253428479,DE
3253428480,3253429247,SE
3253429248,3253429759,JP
3253429760,3253430015,ES
-3253430016,3253432831,SE
-3253432832,3253433087,IT
+3253430016,3253433087,SE
3253433088,3253433343,DE
3253433344,3253434111,SE
3253434112,3253434367,GB
@@ -115886,32 +61661,24 @@
3253436160,3253436415,NO
3253436416,3253440511,SE
3253440512,3253440767,FR
-3253440768,3253443839,SE
+3253440768,3253441023,SE
+3253441024,3253441535,AT
+3253441536,3253443839,SE
3253443840,3253444351,NO
3253444352,3253453311,SE
3253453312,3253453567,NO
3253453568,3253454079,SE
3253454080,3253454335,GB
-3253454336,3253454591,EU
-3253454592,3253455615,SE
-3253455616,3253455871,US
-3253455872,3253456383,SE
-3253456384,3253456639,US
-3253456640,3253460735,SE
+3253454336,3253460735,SE
3253460736,3253460991,IT
-3253460992,3253461247,US
-3253461248,3253461759,SE
+3253460992,3253461759,SE
3253461760,3253462015,PL
3253462016,3253462527,SE
3253462528,3253463039,US
3253463040,3253464063,GB
-3253464064,3253464575,SE
-3253464576,3253465087,NL
-3253465088,3253469183,SE
-3253469184,3253471231,AO
-3253471232,3253534719,PT
+3253464064,3253469183,SE
+3253469184,3253534719,PT
3253534720,3253600255,GB
-3253600256,3253601279,RO
3253601280,3253602303,FI
3253602304,3253603327,DE
3253603328,3253605375,PL
@@ -115922,7 +61689,6 @@
3253607424,3253608447,NG
3253608448,3253610495,UA
3253610496,3253611519,PL
-3253611520,3253612543,UA
3253612544,3253613567,RU
3253613568,3253614591,ES
3253614592,3253615615,RO
@@ -115956,7 +61722,6 @@
3253646336,3253647359,PL
3253647360,3253648383,DK
3253648384,3253649407,IL
-3253649408,3253650431,UA
3253650432,3253651455,DE
3253651456,3253652479,PL
3253652480,3253653503,LI
@@ -115965,7 +61730,6 @@
3253657600,3253658623,UA
3253658624,3253659647,DE
3253659648,3253660671,GB
-3253660672,3253661695,NO
3253661696,3253662719,NL
3253662720,3253663743,RO
3253663744,3253664767,NL
@@ -116008,29 +61772,24 @@
3253701120,3253702143,RO
3253702144,3253702655,UA
3253702656,3253703167,PL
-3253703168,3253703679,RO
3253703680,3253704191,HU
-3253704192,3253704703,RU
3253704704,3253705215,UA
3253705728,3253706239,DE
3253706240,3253706751,RO
-3253707264,3253708287,DE
-3253708288,3253708799,RO
+3253706752,3253708799,DE
3253708800,3253709311,DK
3253709312,3253709823,UA
3253709824,3253710335,RO
3253710336,3253710847,GB
3253710848,3253711359,DK
-3253711360,3253712383,UA
+3253711872,3253712383,UA
3253712384,3253712895,MD
3253712896,3253713151,PL
3253713152,3253713407,DE
3253713408,3253713919,NL
3253713920,3253714431,AT
-3253714432,3253714943,RO
3253714944,3253715455,FR
3253715456,3253715967,RO
-3253715968,3253716479,DE
3253716480,3253716991,FR
3253716992,3253717503,CH
3253717504,3253718015,NL
@@ -116049,17 +61808,54 @@
3253725184,3253725439,SE
3253725440,3253725695,RU
3253725696,3253726207,UA
-3253726208,3253726719,RO
3253726720,3253727231,UA
3253727232,3253727743,FR
3253727744,3253728255,RU
-3253728256,3253728767,PL
3253728768,3253729279,RO
3253729280,3253729791,AT
3253729792,3253730303,UA
3253730304,3253730815,RO
3253730816,3253731327,UA
-3253731328,3253796863,GB
+3253731328,3253731583,DE
+3253731584,3253737823,GB
+3253737824,3253737831,PL
+3253737832,3253737839,AT
+3253737840,3253737847,GB
+3253737848,3253737855,HU
+3253737856,3253738559,GB
+3253738560,3253738567,CZ
+3253738568,3253738575,BE
+3253738576,3253741679,GB
+3253741680,3253741695,RU
+3253741696,3253745151,GB
+3253745152,3253745279,NO
+3253745280,3253745983,GB
+3253745984,3253745999,SE
+3253746000,3253746007,DK
+3253746008,3253746015,IE
+3253746016,3253746023,AT
+3253746024,3253746031,CH
+3253746032,3253746039,FI
+3253746040,3253746047,GB
+3253746048,3253746111,IT
+3253746112,3253746175,DE
+3253746176,3253760511,GB
+3253760512,3253760767,FR
+3253760768,3253761407,GB
+3253761408,3253761471,ES
+3253761472,3253762559,GB
+3253762560,3253762815,IT
+3253762816,3253762943,CH
+3253762944,3253763071,GB
+3253763072,3253763327,SE
+3253763328,3253765119,GB
+3253765120,3253765183,ES
+3253765184,3253765247,FR
+3253765248,3253765279,GB
+3253765280,3253765295,NL
+3253765296,3253765311,BE
+3253765312,3253765375,TR
+3253765376,3253796863,GB
3253796864,3253862399,SE
3253862400,3253862655,GB
3253862656,3253882879,FR
@@ -116077,7 +61873,6 @@
3253889536,3253889791,DE
3253889792,3253890047,DK
3253890048,3253890303,NL
-3253890304,3253890559,SE
3253890560,3253890815,GB
3253890816,3253891071,IE
3253891072,3253891327,DE
@@ -116110,7 +61905,7 @@
3253901824,3253902079,SI
3253902080,3253902335,DK
3253902336,3253904383,UA
-3253904384,3253904895,ES
+3253904384,3253904895,GB
3253904896,3253905151,UA
3253905152,3253905407,RU
3253905408,3253905919,PL
@@ -116136,20 +61931,18 @@
3253917184,3253917439,CY
3253917440,3253917695,PL
3253917696,3253918207,RU
-3253918208,3253918719,DE
+3253918208,3253918719,CH
3253918720,3253919743,IL
3253919744,3253923839,GB
3253923840,3253927935,GR
3253927936,3253961727,GB
3253961728,3253962239,MD
-3253962240,3253962751,SE
3253962752,3253963263,BE
3253963264,3253963775,RU
3253963776,3253964287,SI
3253964288,3253964799,PL
3253964800,3253965311,SE
3253965312,3253966335,PL
-3253966336,3253966847,DE
3253966848,3253967359,UA
3253967360,3253967871,PL
3253967872,3253968895,UA
@@ -116167,153 +61960,44 @@
3253975040,3253977087,DE
3253977088,3253985279,TR
3253985280,3253993471,GB
-3253993472,3254067711,BE
-3254067712,3254067967,CZ
-3254067968,3254124543,BE
-3254124544,3254156799,CH
-3254156800,3254157055,LI
-3254157056,3254177279,CH
-3254177280,3254177535,LI
-3254177536,3254255615,CH
-3254255616,3254255871,FR
-3254255872,3254256127,RE
-3254256128,3254256639,GP
-3254256640,3254261247,FR
-3254261248,3254261503,YT
-3254261504,3254261759,FR
-3254261760,3254262015,YT
-3254262016,3254275327,FR
-3254275328,3254275583,MQ
-3254275584,3254276607,FR
-3254276608,3254278143,YT
-3254278144,3254291711,FR
-3254291712,3254291967,RE
-3254291968,3254485503,FR
-3254485504,3254485799,CI
-3254485800,3254485807,FR
-3254485808,3254485819,CI
-3254485820,3254485820,FR
-3254485821,3254485821,CI
-3254485822,3254485822,FR
-3254485823,3254485855,CI
-3254485856,3254485859,FR
-3254485860,3254485887,CI
-3254485888,3254486527,FR
-3254486528,3254486543,CH
-3254486544,3254486559,US
-3254486560,3254486591,GB
-3254486592,3254486655,FR
-3254486656,3254486671,CH
-3254486672,3254486687,FR
-3254486688,3254486719,CH
-3254486720,3254486735,FR
-3254486736,3254486767,US
-3254486768,3254486783,HK
-3254486784,3254487039,A2
-3254487040,3254487199,KM
-3254487200,3254487263,FR
-3254487264,3254487295,KM
-3254487296,3254487419,CF
-3254487420,3254487551,FR
-3254487552,3254487803,CI
-3254487804,3254487807,FR
-3254487808,3254487855,LB
-3254487856,3254487863,FR
-3254487864,3254488063,LB
-3254488064,3254488431,FR
+3253993472,3254124543,BE
+3254124544,3254255615,CH
+3254255616,3254263807,FR
+3254263808,3254264063,GF
+3254264064,3254488431,FR
3254488432,3254488447,MG
-3254488448,3254488831,FR
-3254488832,3254489087,DJ
-3254489088,3254489343,DZ
-3254489344,3254489365,FR
-3254489366,3254489367,MR
-3254489368,3254489369,FR
-3254489370,3254489370,MR
-3254489371,3254489373,FR
-3254489374,3254489375,MR
-3254489376,3254489407,FR
+3254488448,3254489407,FR
3254489408,3254489439,MR
-3254489440,3254489443,FR
-3254489444,3254489455,MR
-3254489456,3254489463,FR
-3254489464,3254489519,MR
-3254489520,3254489535,FR
-3254489536,3254489567,MR
-3254489568,3254489599,FR
-3254489600,3254489855,MR
-3254489856,3254490111,TD
-3254490112,3254490367,FR
-3254490368,3254490623,CF
-3254490624,3254491135,FR
-3254491136,3254491391,DZ
-3254491392,3254491647,GQ
-3254491648,3254491903,FR
+3254489440,3254489447,FR
+3254489448,3254489455,MR
+3254489456,3254489487,FR
+3254489488,3254489503,MR
+3254489504,3254491903,FR
3254491904,3254492031,CM
-3254492032,3254492159,FR
-3254492160,3254492671,LB
-3254492672,3254492927,FR
-3254492928,3254493183,CI
-3254493184,3254493323,GP
-3254493324,3254493327,FR
-3254493328,3254493335,GP
-3254493336,3254493343,FR
-3254493344,3254493439,GP
-3254493440,3254493695,CI
+3254492032,3254493183,FR
+3254493184,3254493253,GP
+3254493254,3254493311,FR
+3254493312,3254493323,GP
+3254493324,3254493343,FR
+3254493344,3254493354,GP
+3254493355,3254493375,FR
+3254493376,3254493410,GP
+3254493411,3254493695,FR
3254493696,3254493951,GP
3254493952,3254494207,MQ
3254494208,3254494527,GP
-3254494528,3254494719,FR
-3254494720,3254494735,LB
-3254494736,3254494743,FR
-3254494744,3254494803,LB
-3254494804,3254494807,FR
-3254494808,3254494975,LB
-3254494976,3254495087,DJ
-3254495088,3254495231,FR
-3254495232,3254495487,CI
+3254494528,3254494975,FR
+3254494976,3254494983,DJ
+3254494984,3254495055,FR
+3254495056,3254495063,DJ
+3254495064,3254495487,FR
3254495488,3254495743,DZ
-3254495744,3254496255,LB
-3254496256,3254496511,FR
-3254496512,3254496527,CI
-3254496528,3254496767,FR
-3254496768,3254497247,DZ
-3254497248,3254508031,FR
-3254508032,3254508543,GQ
-3254508544,3254508799,FR
+3254495744,3254508799,FR
3254508800,3254508831,MQ
-3254508832,3254509055,FR
-3254509056,3254509567,GQ
-3254509568,3254509783,DJ
-3254509784,3254521855,FR
-3254521856,3254522367,GB
-3254522368,3254523739,FR
-3254523740,3254523740,UG
-3254523741,3254523741,CH
-3254523742,3254523742,RO
-3254523743,3254550527,FR
-3254550528,3254550783,US
-3254550784,3254551039,IR
-3254551040,3254551295,US
-3254551296,3254551551,IR
-3254551552,3254551807,US
-3254551808,3254552063,FR
-3254552064,3254552319,US
-3254552320,3254552831,IR
-3254552832,3254553087,HK
-3254553088,3254553343,FR
-3254553344,3254553599,HK
-3254553600,3254554879,FR
-3254554880,3254555135,HK
-3254555136,3254555391,FR
-3254555392,3254555647,HK
-3254555648,3254557439,FR
-3254557440,3254557695,AT
-3254557696,3254576383,FR
-3254576384,3254576543,DO
-3254576544,3254607871,FR
-3254607872,3254608383,RE
-3254608384,3254608639,FR
-3254608640,3254610175,RE
+3254508832,3254521855,FR
+3254521856,3254522111,GB
+3254522112,3254607871,FR
+3254607872,3254610175,RE
3254610176,3254610431,FR
3254610432,3254610687,RE
3254610688,3254611455,FR
@@ -116321,42 +62005,40 @@
3254611457,3254611711,FR
3254611712,3254611712,YT
3254611713,3254611967,FR
-3254611968,3254613503,RE
-3254613504,3254615551,FR
+3254611968,3254612991,RE
+3254612992,3254613247,FR
+3254613248,3254614015,RE
+3254614016,3254614527,FR
+3254614528,3254615039,RE
+3254615040,3254615551,FR
3254615552,3254615552,YT
3254615553,3254615807,FR
3254615808,3254615808,YT
-3254615809,3254623743,FR
-3254623744,3254624255,US
-3254624256,3254648831,FR
-3254648832,3254648895,DK
-3254648896,3254649087,GB
+3254615809,3254648831,FR
+3254648832,3254649087,GB
3254649088,3254649855,AL
3254649856,3254650879,SE
3254650880,3254653439,CH
3254653440,3254654847,DE
3254654848,3254654975,DK
-3254654976,3254655743,IT
-3254655744,3254656255,GB
+3254654976,3254655999,IT
3254656256,3254656511,BG
3254656512,3254656767,DE
3254656768,3254657023,GB
3254657024,3254665215,RO
-3254665216,3254681599,EU
3254681600,3254697983,DE
3254697984,3254698495,SE
3254698496,3254699007,GB
3254699008,3254699519,UA
-3254699520,3254700031,US
3254700032,3254700543,GR
3254700544,3254701055,DE
-3254701056,3254701567,RU
3254701568,3254702079,IL
3254702080,3254702591,RU
3254702592,3254703103,GB
3254703104,3254703615,DE
3254703616,3254704127,NL
-3254704128,3254705663,UA
+3254704128,3254704639,UA
+3254705152,3254705663,UA
3254705664,3254706175,GR
3254706176,3254707199,RU
3254707200,3254707711,TR
@@ -116397,7 +62079,6 @@
3254788352,3254789119,ES
3254789120,3254789375,FR
3254789376,3254789631,BE
-3254789632,3254790655,TK
3254790656,3254790911,LU
3254790912,3254791423,BE
3254791424,3254791679,SK
@@ -116422,7 +62103,6 @@
3254804480,3254806527,PL
3254807552,3254808575,KZ
3254808576,3254809599,RU
-3254809600,3254810623,UA
3254810624,3254811647,RU
3254811648,3254812671,RO
3254812672,3254812927,PL
@@ -116430,7 +62110,6 @@
3254813184,3254813439,TR
3254813440,3254813695,UA
3254813696,3254813951,DK
-3254813952,3254814207,IT
3254814208,3254814463,SE
3254814464,3254814719,DE
3254814720,3254814975,RU
@@ -116438,7 +62117,6 @@
3254815232,3254815487,UA
3254815488,3254815743,GB
3254815744,3254815999,IT
-3254816000,3254816255,RU
3254816256,3254816511,TR
3254816512,3254816767,DE
3254816768,3254817279,RU
@@ -116453,7 +62131,7 @@
3254819584,3254819839,DK
3254819840,3254820095,GB
3254820096,3254820351,UA
-3254820352,3254820863,GB
+3254820352,3254820607,GB
3254820864,3254821119,LT
3254821120,3254821375,DK
3254821376,3254821631,RU
@@ -116473,14 +62151,11 @@
3254825216,3254825471,RO
3254825472,3254825727,TR
3254825728,3254825983,FR
-3254825984,3254826239,DE
3254826240,3254826495,PL
3254826496,3254827263,DE
3254827264,3254827519,GR
-3254827520,3254827775,PL
3254827776,3254828031,UA
-3254828032,3254828287,DE
-3254828288,3254828799,RO
+3254828544,3254828799,RO
3254828800,3254829055,SI
3254829056,3254829311,NO
3254829312,3254829567,GB
@@ -116502,8 +62177,7 @@
3254833408,3254833663,RU
3254833664,3254833919,GB
3254833920,3254834175,PL
-3254834176,3254834431,CH
-3254834432,3254834687,FR
+3254834176,3254834687,CH
3254834688,3254834943,GB
3254834944,3254835199,NL
3254835200,3254835455,DE
@@ -116512,27 +62186,22 @@
3254835968,3254836223,RU
3254836224,3254836479,PL
3254836736,3254836991,AT
-3254836992,3254837247,GB
3254837248,3254837503,HR
3254837504,3254837759,RU
3254837760,3254838015,IE
3254838016,3254838271,GE
-3254838272,3254838527,DE
3254838528,3254838783,CH
3254838784,3254839039,AT
-3254839040,3254839295,RU
3254839296,3254839551,DE
3254839552,3254839807,PL
3254839808,3254840063,BE
3254840064,3254840319,BG
-3254840320,3254840575,EU
+3254840320,3254840575,DK
3254840576,3254840831,UA
3254840832,3254841343,GB
3254841344,3254841599,PL
3254841600,3254841855,IE
3254841856,3254842111,LV
-3254842112,3254842367,GB
-3254842368,3254842623,PL
3254842624,3254842879,RU
3254842880,3254843135,SE
3254843136,3254843391,DE
@@ -116568,14 +62237,13 @@
3254888960,3254889471,RU
3254889472,3254890495,SK
3254890496,3254890751,DE
-3254890752,3254891007,UA
-3254891008,3254891519,RO
+3254891008,3254891263,RO
3254891520,3254891775,GB
3254891776,3254892031,DE
3254892032,3254892287,GB
3254892288,3254892543,BE
3254892544,3254892799,RU
-3254892800,3254893567,SK
+3254892800,3254893055,SK
3254893568,3254894079,CZ
3254894080,3254894335,CH
3254894336,3254894591,SK
@@ -116602,7 +62270,6 @@
3254899968,3254900479,RU
3254900480,3254900991,SK
3254900992,3254901247,PL
-3254901248,3254901503,SK
3254901504,3254901759,DK
3254901760,3254902271,UA
3254902272,3254904831,SK
@@ -116614,81 +62281,61 @@
3254908928,3254909951,RU
3254909952,3254910719,PL
3254910720,3254910975,HR
-3254910976,3254937999,FR
-3254938000,3254938007,GB
-3254938008,3254959623,FR
-3254959624,3254959631,A2
-3254959632,3254994734,FR
-3254994735,3254994735,BE
-3254994736,3255006719,FR
-3255006720,3255006975,A2
-3255006976,3255120639,FR
+3254910976,3255044095,FR
+3255044608,3255056383,FR
+3255058432,3255117823,FR
+3255118336,3255120639,FR
3255120640,3255120895,DE
3255120896,3255123711,FR
3255123712,3255123967,DE
-3255123968,3255129855,FR
+3255123968,3255127551,FR
+3255127808,3255128575,FR
3255129856,3255130111,HR
-3255130112,3255172351,FR
+3255130112,3255146495,FR
+3255148544,3255153151,FR
+3255153664,3255166975,FR
+3255167488,3255172351,FR
3255172352,3255172607,DE
3255172608,3255173119,FR
3255173120,3255173631,SH
-3255173632,3255173647,EU
3255173648,3255173711,GB
-3255173712,3255173759,EU
3255173760,3255173823,GB
-3255173824,3255173839,EU
-3255173840,3255175167,GB
-3255175168,3255175199,EU
+3255173840,3255174151,GB
+3255174160,3255174167,GB
+3255174200,3255174207,GB
+3255174216,3255174247,GB
+3255174272,3255174279,GB
+3255174312,3255174319,GB
+3255174328,3255174335,GB
+3255174376,3255174383,GB
+3255174400,3255175167,GB
3255175200,3255175231,GB
-3255175232,3255175247,EU
3255175248,3255175263,GB
-3255175264,3255175279,EU
3255175280,3255175295,GB
-3255175296,3255175311,EU
3255175312,3255175327,GB
-3255175328,3255175431,EU
3255175432,3255175447,GB
-3255175448,3255175455,EU
3255175456,3255175503,GB
-3255175504,3255175511,EU
3255175512,3255175535,GB
-3255175536,3255175551,EU
3255175552,3255175559,GB
-3255175560,3255175591,EU
3255175592,3255175607,GB
-3255175608,3255175679,EU
3255175680,3255175935,GB
-3255175936,3255176191,EU
3255176192,3255177215,GB
-3255177216,3255177471,EU
3255177472,3255177855,GB
-3255177856,3255177983,EU
3255177984,3255187199,GB
3255187200,3255187455,DE
3255187456,3255187711,GB
-3255187712,3255188479,EU
3255188480,3255191807,GB
-3255191808,3255192319,EU
3255192320,3255193863,GB
-3255193864,3255193887,EU
3255193888,3255193959,GB
-3255193960,3255193967,EU
3255193968,3255193975,GB
3255193976,3255193983,GI
3255193984,3255193999,GB
-3255194000,3255194015,EU
3255194016,3255194039,GB
-3255194040,3255194055,EU
3255194056,3255194063,GB
-3255194064,3255194071,EU
3255194072,3255194431,GB
-3255194432,3255194495,EU
3255194496,3255194559,GB
-3255194560,3255194623,EU
3255194624,3255194703,GB
-3255194704,3255194719,EU
3255194720,3255194815,GB
-3255194816,3255194879,EU
3255194880,3255205887,GB
3255205888,3255214079,FR
3255214080,3255222271,CH
@@ -116707,7 +62354,6 @@
3255231744,3255231999,PT
3255232000,3255232255,RO
3255232256,3255233023,UA
-3255233024,3255233279,DE
3255233280,3255233535,GB
3255233536,3255233791,SE
3255233792,3255234047,SI
@@ -116719,140 +62365,14 @@
3255235328,3255235583,SE
3255235584,3255235839,GB
3255235840,3255236351,PL
-3255236352,3255236607,IT
3255236608,3255236863,GB
3255236864,3255237119,DE
3255237120,3255237375,AT
-3255237376,3255237887,SE
3255237888,3255238143,ES
-3255238144,3255238399,GB
3255238400,3255238655,QA
-3255238656,3255243679,BE
-3255243680,3255243711,LU
-3255243712,3255245567,BE
-3255245568,3255245583,LU
-3255245584,3255245599,BE
-3255245600,3255245631,LU
-3255245632,3255245687,BE
-3255245688,3255245695,LU
-3255245696,3255246591,BE
-3255246592,3255246623,LU
-3255246624,3255247615,BE
-3255247616,3255247631,LU
-3255247632,3255247647,BE
-3255247648,3255247663,LU
-3255247664,3255248127,BE
-3255248128,3255248383,LU
-3255248384,3255250079,BE
-3255250080,3255250111,LU
-3255250112,3255250815,BE
-3255250816,3255250879,LU
-3255250880,3255252487,BE
-3255252488,3255252495,FR
-3255252496,3255252527,BE
-3255252528,3255252543,LU
-3255252544,3255252799,BE
-3255252800,3255252863,LU
-3255252864,3255254847,BE
-3255254848,3255254879,LU
-3255254880,3255255751,BE
-3255255752,3255255759,DK
-3255255760,3255256319,BE
-3255256320,3255256575,LU
-3255256576,3255259919,BE
-3255259920,3255259927,LU
-3255259928,3255260095,BE
-3255260096,3255260127,LU
-3255260128,3255260319,BE
-3255260320,3255260335,LU
-3255260336,3255260343,BE
-3255260344,3255260347,LU
-3255260348,3255261471,BE
-3255261472,3255261535,LU
-3255261536,3255262799,BE
-3255262800,3255262815,LU
-3255262816,3255263295,BE
-3255263296,3255263327,US
-3255263328,3255264543,BE
-3255264544,3255264575,LU
-3255264576,3255264703,BE
-3255264704,3255264735,LU
-3255264736,3255265007,BE
-3255265008,3255265023,LU
-3255265024,3255270431,BE
-3255270432,3255270463,FR
-3255270464,3255271807,BE
-3255271808,3255271839,LU
-3255271840,3255274015,BE
-3255274016,3255274047,US
-3255274048,3255274335,BE
-3255274336,3255274367,LU
-3255274368,3255274847,BE
-3255274848,3255274879,LU
-3255274880,3255274911,BE
-3255274912,3255274943,LU
-3255274944,3255276223,BE
-3255276224,3255276255,FR
-3255276256,3255276575,BE
-3255276576,3255276607,LU
-3255276608,3255276671,BE
-3255276672,3255276703,LU
-3255276704,3255276783,BE
-3255276784,3255276799,LU
-3255276800,3255277247,BE
-3255277248,3255277255,LU
-3255277256,3255278607,BE
-3255278608,3255278623,LU
-3255278624,3255279007,BE
-3255279008,3255279039,LU
-3255279040,3255279087,BE
-3255279088,3255279103,LU
-3255279104,3255279639,BE
-3255279640,3255279647,LU
-3255279648,3255280018,BE
-3255280019,3255280019,EU
-3255280020,3255280047,BE
-3255280048,3255280055,LU
-3255280056,3255281407,BE
-3255281408,3255281439,LU
-3255281440,3255281759,BE
-3255281760,3255281791,LU
-3255281792,3255283415,BE
-3255283416,3255283423,LU
-3255283424,3255283927,BE
-3255283928,3255283931,LU
-3255283932,3255284239,BE
-3255284240,3255284255,LU
-3255284256,3255285535,BE
-3255285536,3255285567,LU
-3255285568,3255286095,BE
-3255286096,3255286103,DK
-3255286104,3255286111,LU
-3255286112,3255286279,BE
-3255286280,3255286287,LU
-3255286288,3255288735,BE
-3255288736,3255288799,LU
-3255288800,3255288831,BE
-3255288832,3255289087,LU
-3255289088,3255290143,BE
-3255290144,3255290175,LU
-3255290176,3255290271,BE
-3255290272,3255290287,LU
-3255290288,3255290879,BE
-3255290880,3255291391,LU
-3255291392,3255291399,BE
-3255291400,3255291423,LU
-3255291424,3255291615,BE
-3255291616,3255291623,LU
-3255291624,3255291983,BE
-3255291984,3255291999,LU
-3255292000,3255292311,BE
+3255238656,3255292311,BE
3255292312,3255292319,LU
-3255292320,3255297015,BE
-3255297016,3255297023,HU
-3255297024,3255300803,BE
-3255300804,3255300807,LU
-3255300808,3255304191,BE
+3255292320,3255304191,BE
3255304192,3255304447,DE
3255304448,3255305215,LV
3255305216,3255305471,BG
@@ -116860,14 +62380,13 @@
3255307776,3255308031,PL
3255308032,3255308287,CH
3255308288,3255311359,LV
-3255311360,3255311615,GB
3255311616,3255311871,SE
3255311872,3255312127,PT
3255312128,3255312383,SE
3255312384,3255315711,LV
3255315712,3255316223,PL
3255316224,3255316479,RU
-3255316736,3255316991,EU
+3255316736,3255316991,GB
3255316992,3255317247,FR
3255317248,3255317503,UA
3255317504,3255317759,BE
@@ -116876,7 +62395,6 @@
3255318272,3255318527,RU
3255318528,3255318783,UA
3255318784,3255319295,DE
-3255319296,3255319551,UA
3255319552,3255319807,BG
3255319808,3255320063,AT
3255320064,3255320319,BE
@@ -116913,11 +62431,9 @@
3255368192,3255368703,FR
3255368704,3255369215,CZ
3255369216,3255369727,GB
-3255369728,3255370239,LU
3255370240,3255370751,RU
3255370752,3255371263,DE
3255371264,3255371775,BG
-3255371776,3255372287,SE
3255372288,3255372799,DE
3255372800,3255373311,MC
3255373312,3255373823,UA
@@ -116940,7 +62456,6 @@
3255382528,3255383039,UA
3255383040,3255383551,PL
3255383552,3255384063,CH
-3255384064,3255384575,RO
3255384576,3255385087,AT
3255385088,3255385599,RO
3255385600,3255386111,FR
@@ -116952,140 +62467,63 @@
3255388672,3255389183,SE
3255389184,3255389695,GB
3255389696,3255390207,PL
-3255390208,3255390719,GB
3255390720,3255391231,KE
3255391232,3255391743,NL
3255391744,3255392767,DE
3255392768,3255393791,RO
3255393792,3255399679,SE
3255399680,3255400447,DE
-3255400448,3255400703,CH
-3255400704,3255400959,EU
-3255400960,3255401471,CH
+3255400448,3255401471,CH
3255401472,3255412479,DE
3255412480,3255412735,RO
3255412736,3255413247,DE
3255413248,3255413503,LV
3255413504,3255413759,UZ
-3255413760,3255414271,GB
-3255414272,3255414527,TR
3255414528,3255414783,LV
-3255414784,3255415807,BE
3255415808,3255416319,AT
3255416320,3255416831,DE
3255417856,3255418879,GB
3255418880,3255422975,DE
-3255422976,3255423999,RO
3255424000,3255425023,LV
3255426048,3255426559,IT
3255426816,3255427071,PL
3255427072,3255431167,RU
-3255431168,3255434464,GB
-3255434465,3255434465,EU
-3255434466,3255434720,GB
-3255434721,3255434721,EU
-3255434722,3255436543,GB
-3255436544,3255436799,NL
-3255436800,3255437055,DE
-3255437056,3255437311,GB
-3255437312,3255446527,EU
-3255446528,3255446783,GB
-3255446784,3255449599,EU
-3255449600,3255450111,BE
-3255450112,3255450367,GB
-3255450368,3255450623,FR
-3255450624,3255451135,DE
-3255451136,3255452671,FR
-3255452672,3255468031,EU
-3255468032,3255468543,GB
-3255468544,3255469055,EU
-3255469056,3255469567,GB
-3255469568,3255469823,DE
-3255469824,3255470079,DK
-3255470080,3255470591,AT
-3255470592,3255470847,DE
-3255470848,3255471103,HU
-3255471104,3255471359,BE
-3255471360,3255471615,EU
-3255471616,3255471871,GB
-3255471872,3255472127,BE
-3255472128,3255472383,GB
-3255472384,3255472639,BE
-3255472640,3255472895,NL
-3255472896,3255473151,BE
-3255473152,3255473407,GB
-3255473408,3255473663,CH
-3255473664,3255473919,BE
-3255473920,3255474175,NO
-3255474176,3255476735,GB
-3255476736,3255476991,IE
-3255476992,3255477247,NL
-3255477248,3255477503,GB
-3255477504,3255477759,CH
-3255477760,3255478271,GB
-3255478272,3255482367,EU
-3255482368,3255482623,GB
-3255482624,3255482815,BE
-3255482816,3255482831,FR
-3255482832,3255482839,BE
-3255482840,3255482847,FR
-3255482848,3255482871,BE
-3255482872,3255482879,EU
-3255482880,3255483135,GB
-3255483136,3255484415,DE
-3255484416,3255484671,PL
-3255484672,3255484927,NL
-3255484928,3255485183,CH
-3255485184,3255485439,AT
+3255431168,3255436287,GB
+3255451648,3255452671,FR
+3255474176,3255476223,GB
+3255483392,3255484415,DE
3255485440,3255486463,FR
-3255486464,3255486719,BE
-3255486720,3255486975,EU
-3255486976,3255487487,GB
-3255487488,3255487743,BE
-3255487744,3255487999,GB
-3255488000,3255488255,BE
-3255488256,3255488511,GB
3255488512,3255489535,AT
-3255489536,3255489887,DE
-3255489888,3255490047,GB
-3255490048,3255490559,DE
-3255490560,3255492607,EU
3255492608,3255496703,GB
-3255496704,3255497727,EU
-3255497728,3255497983,BE
-3255497984,3255498239,DE
-3255498240,3255498495,FR
-3255498496,3255498751,GB
3255498752,3255500799,FR
3255500800,3255504895,CH
3255504896,3255505151,RU
-3255505152,3255505919,GB
+3255505152,3255505663,GB
3255505920,3255506431,RU
3255506432,3255506687,PL
3255506688,3255506943,PT
3255506944,3255507199,PL
-3255507200,3255507455,PT
3255507456,3255507711,FR
3255507712,3255507967,AT
3255507968,3255508223,UA
3255508224,3255508479,RU
-3255508480,3255521023,CH
-3255521024,3255521279,EU
-3255521280,3255544319,CH
+3255508480,3255544319,CH
3255544320,3255544575,DE
3255544576,3255544831,AT
3255544832,3255558143,CH
3255558144,3255558399,BE
3255558400,3255558655,UA
-3255558656,3255564031,CH
+3255558656,3255563263,CH
+3255563776,3255564031,CH
3255564032,3255564287,RU
-3255564288,3255565955,CH
-3255565956,3255565956,EU
-3255565957,3255566335,CH
+3255564288,3255565311,CH
+3255565312,3255565955,DE
+3255565956,3255565956,CH
+3255565957,3255566079,DE
3255566336,3255570431,GB
3255570432,3255574527,CH
3255574528,3255578623,CZ
-3255578624,3255582719,IT
+3255578624,3255582719,CY
3255582720,3255599103,UA
3255599104,3255615487,CH
3255615488,3255623679,DE
@@ -117095,86 +62533,57 @@
3255660544,3255666431,NL
3255666432,3255666687,DE
3255666688,3255697407,NL
-3255697408,3255698687,SE
-3255698688,3255698943,GB
-3255698944,3255710719,SE
+3255697408,3255710719,SE
3255710720,3255710975,ES
-3255710976,3255716351,SE
-3255716352,3255716863,CH
-3255716864,3255724543,SE
+3255710976,3255724543,SE
3255724544,3255725055,US
3255725056,3255725311,ES
3255725312,3255730943,SE
3255730944,3255731199,GB
-3255731200,3255739647,SE
-3255739648,3255739903,GB
-3255739904,3255742719,SE
-3255742720,3255742975,SG
-3255742976,3255743231,SE
+3255731200,3255743231,SE
3255743232,3255743487,IT
3255743488,3255743743,DE
3255743744,3255743999,US
-3255744000,3255745535,SE
-3255745536,3255746047,DK
-3255746048,3255762431,SE
-3255762432,3255762943,BE
-3255762944,3255791615,DE
+3255744000,3255762943,SE
+3255762944,3255771135,DE
+3255779328,3255791615,DE
3255791616,3255792639,UA
3255792640,3255793663,RU
3255793664,3255794943,PL
-3255794944,3255795199,RU
-3255795200,3255795711,UA
+3255794944,3255795711,RU
3255795712,3255799039,DE
3255799040,3255799295,SE
3255799296,3255800575,DE
3255800576,3255800831,UA
-3255800832,3255817215,DE
+3255800832,3255801855,DE
+3255802368,3255817215,DE
3255817216,3255817471,SE
3255817472,3255817727,ES
-3255817728,3255821311,DE
-3255821312,3255821823,CH
-3255821824,3255822079,DE
-3255822080,3255822335,CH
+3255817728,3255820287,DE
+3255821312,3255822335,CH
3255822336,3255828479,DE
-3255828480,3255947484,SE
-3255947485,3255947485,EU
-3255947486,3256025087,SE
+3255828480,3256025087,SE
3256025088,3256057855,NO
-3256057856,3256076287,DK
-3256076288,3256076799,SE
-3256076800,3256082431,DK
-3256082432,3256088063,LV
-3256088064,3256088095,RU
-3256088096,3256088103,LV
-3256088104,3256088319,RU
-3256088320,3256090623,LV
-3256090624,3256164863,IT
-3256164864,3256165375,SE
-3256165376,3256187391,IT
-3256187392,3256187647,SM
-3256187648,3256221695,IT
-3256221696,3256222207,SE
-3256222208,3256222463,NL
-3256222464,3256223743,SE
-3256223744,3256226047,NL
-3256226048,3256229887,SE
+3256057856,3256082431,DK
+3256082432,3256090623,LV
+3256090624,3256221695,IT
+3256221696,3256223743,SE
+3256223744,3256225791,NL
+3256225792,3256229887,SE
3256229888,3256233983,DE
3256233984,3256238079,SE
3256238080,3256246271,NO
3256246272,3256352767,SE
-3256352768,3256353279,CH
-3256353280,3256353535,EU
-3256353536,3256385535,CH
+3256352768,3256385535,CH
3256385536,3256393727,AT
3256393728,3256394239,DE
-3256394240,3256394751,UA
3256394752,3256395263,PL
3256395264,3256395775,GB
3256395776,3256396287,TR
3256396288,3256396799,GR
3256396800,3256397311,DE
3256397312,3256397823,PL
-3256397824,3256398847,RO
+3256398336,3256398847,RO
3256398848,3256399359,PL
3256399360,3256400895,UA
3256400896,3256401407,GB
@@ -117184,7 +62593,6 @@
3256410624,3256411135,GR
3256411136,3256411647,FR
3256411648,3256412159,DE
-3256412160,3256412671,GB
3256412672,3256413183,RO
3256413184,3256413695,UA
3256413696,3256414207,PL
@@ -117193,28 +62601,19 @@
3256415232,3256415743,PL
3256415744,3256416255,UA
3256416256,3256416767,RS
-3256416768,3256417279,GB
+3256417024,3256417279,GB
3256417280,3256417791,NO
3256417792,3256418303,GB
-3256418304,3256444415,DE
-3256444416,3256444671,EU
-3256444672,3256446855,DE
-3256446856,3256446863,US
-3256446864,3256448575,DE
-3256448576,3256448591,ES
-3256448592,3256448935,DE
-3256448936,3256448943,IT
-3256448944,3256483839,DE
+3256418304,3256483839,DE
3256483840,3256489471,NL
3256489472,3256489983,GR
3256489984,3256490239,BE
-3256490240,3256490495,DE
-3256490496,3256513791,NL
-3256513792,3256514047,GB
-3256514048,3256524287,NL
+3256490496,3256490751,CH
+3256490752,3256513023,NL
+3256513280,3256524287,NL
3256524288,3256524799,DE
3256524800,3256528895,NL
-3256528896,3256530943,DE
+3256530688,3256530943,DE
3256530944,3256549375,NL
3256549376,3256614911,TR
3256614912,3256615935,FI
@@ -117271,34 +62670,12 @@
3256680448,3256688639,CH
3256688640,3256692735,IL
3256692736,3256693759,GR
-3256693760,3256694783,IT
3256694784,3256695807,DE
3256695808,3256696831,UA
-3256696832,3256697087,BE
-3256697088,3256697599,EU
-3256697600,3256697855,GB
-3256697856,3256698367,IT
-3256698368,3256698623,NL
-3256698624,3256698879,GB
-3256698880,3256699135,DE
-3256699136,3256699391,NL
-3256699392,3256700415,GB
-3256700416,3256700671,NL
-3256700672,3256701183,DE
-3256701184,3256701439,BE
-3256701440,3256701951,GB
-3256701952,3256705023,EU
+3256699392,3256699647,GB
3256705024,3256705279,IE
-3256705280,3256705791,BE
-3256705792,3256706047,AT
-3256706048,3256706559,GR
-3256706560,3256709631,EU
-3256709632,3256709887,AT
-3256709888,3256710143,EU
-3256710144,3256710655,AT
-3256710656,3256711167,SE
-3256711168,3256711423,DE
-3256711424,3256713215,EU
+3256705536,3256705791,BE
+3256710656,3256710911,SE
3256713216,3256727551,PL
3256727552,3256727807,DE
3256727808,3256728063,HU
@@ -117320,7 +62697,6 @@
3256787456,3256787711,DE
3256787712,3256787967,UA
3256787968,3256788223,PL
-3256788224,3256788479,RU
3256788480,3256788735,GB
3256788736,3256788991,DE
3256788992,3256789247,RO
@@ -117330,21 +62706,17 @@
3256790016,3256790271,UA
3256790272,3256790783,DE
3256790784,3256791039,NL
-3256791296,3256791551,RO
3256791552,3256791807,GR
3256791808,3256792063,PL
3256792064,3256792319,DE
-3256792320,3256792489,CH
-3256792490,3256792490,EU
-3256792491,3256792575,CH
+3256792320,3256792575,CH
3256792576,3256792831,NL
-3256792832,3256793087,DE
3256793088,3256793343,GB
3256793344,3256793599,DE
3256793600,3256793855,GB
3256793856,3256794111,SK
3256794112,3256794367,NL
-3256794368,3256794623,DK
+3256794368,3256794623,GB
3256794624,3256794879,RU
3256794880,3256795135,AT
3256795136,3256811519,GR
@@ -117369,7 +62741,9 @@
3256864512,3256864767,CH
3256864768,3256870911,DE
3256870912,3256871167,RU
-3256871168,3256875007,DE
+3256871168,3256871935,DE
+3256872448,3256874239,DE
+3256874496,3256875007,DE
3256875008,3256875519,UA
3256875520,3256876031,RU
3256876032,3256876287,PL
@@ -117387,8 +62761,7 @@
3256946176,3256946431,RO
3256946432,3256946687,UA
3256946688,3256946943,GB
-3256946944,3256947199,EU
-3256947200,3256947711,DE
+3256946944,3256947711,DE
3256947712,3256958975,GB
3256958976,3256959999,RO
3256960000,3256960255,SA
@@ -117408,7 +62781,7 @@
3256968192,3256969215,RO
3256969216,3256970239,IR
3256970240,3256970495,AT
-3256970496,3256970751,UA
+3256970496,3256970751,GB
3256970752,3256971007,RU
3256971008,3256971263,PL
3256971264,3256971775,NL
@@ -117431,20 +62804,28 @@
3256991488,3256991743,RU
3256991744,3257011199,GB
3257011200,3257011455,BG
-3257011456,3257058815,GB
+3257011456,3257024511,GB
+3257024512,3257032703,AU
+3257032704,3257051135,GB
+3257051648,3257057279,GB
3257058816,3257059071,PL
3257059072,3257092607,GB
3257092608,3257092863,RO
-3257092864,3257139199,GB
+3257092864,3257121535,GB
+3257121792,3257139199,GB
3257139200,3257139455,DK
3257139456,3257143295,GB
3257143296,3257143807,RU
3257143808,3257144063,DE
3257144064,3257144319,RU
-3257144320,3257144575,AT
+3257144320,3257144575,DE
3257144576,3257144831,GB
3257144832,3257145087,FR
-3257145088,3257180159,GB
+3257145088,3257146367,GB
+3257147392,3257163775,GB
+3257167872,3257169919,GB
+3257170176,3257176063,GB
+3257178112,3257180159,GB
3257180160,3257180415,TR
3257180416,3257180671,RU
3257180672,3257180927,EE
@@ -117454,10 +62835,13 @@
3257181696,3257181951,FR
3257181952,3257182207,BG
3257182208,3257182463,PL
-3257182464,3257196543,GB
+3257182464,3257186303,GB
+3257188352,3257196543,GB
3257196544,3257200639,LU
3257200640,3257204735,GB
-3257204736,3257268223,AT
+3257204736,3257225215,AT
+3257226240,3257227263,AT
+3257229312,3257268223,AT
3257268224,3257268479,UA
3257268480,3257268735,SE
3257268736,3257269247,AT
@@ -117468,19 +62852,20 @@
3257294848,3257303039,HU
3257303040,3257311231,PT
3257311232,3257335807,CH
-3257335808,3257357311,DE
+3257335808,3257355775,DE
+3257356288,3257357311,DE
3257357312,3257357567,PT
3257357568,3257357823,SI
3257357824,3257371903,DE
-3257371904,3257372159,EU
-3257372160,3257372671,GB
-3257372672,3257383679,DE
-3257383680,3257383935,CH
+3257371904,3257372159,BE
+3257372416,3257372671,GB
+3257372672,3257382911,DE
+3257382912,3257383167,NL
+3257383168,3257383679,DE
3257383936,3257388799,DE
3257388800,3257389055,FR
-3257389056,3257391615,DE
-3257391616,3257391871,EU
-3257391872,3257401343,DE
+3257389056,3257390079,DE
+3257390592,3257401343,DE
3257401344,3257453567,CH
3257453568,3257454591,RO
3257454592,3257455103,IT
@@ -117490,20 +62875,18 @@
3257466880,3257467135,DE
3257467392,3257467903,SE
3257467904,3257468927,IT
-3257468928,3257469183,EU
3257469184,3257469439,IT
3257469440,3257469951,GB
3257469952,3257470975,PL
-3257470976,3257475071,FI
+3257470976,3257471999,FI
+3257472000,3257472511,SG
+3257472512,3257475071,FI
3257475072,3257475327,ES
3257475328,3257475583,FI
3257475584,3257477119,DE
3257477120,3257477375,NL
3257477376,3257477887,SE
-3257477888,3257480447,GB
-3257480448,3257480959,NL
-3257480960,3257481215,SE
-3257481216,3257481471,GB
+3257479168,3257481471,GB
3257481472,3257481727,DE
3257481728,3257481983,FI
3257481984,3257482239,FR
@@ -117511,9 +62894,7 @@
3257482752,3257483007,NL
3257483008,3257491455,CH
3257491456,3257495551,BE
-3257495552,3257497855,CH
-3257497856,3257499647,NL
-3257499648,3257532415,CH
+3257495552,3257532415,CH
3257532416,3257542655,CY
3257542656,3257542911,PL
3257542912,3257543423,IT
@@ -117531,28 +62912,11 @@
3257546688,3257546719,DE
3257546720,3257546751,DK
3257546752,3257548799,IE
-3257548800,3257549623,GB
-3257549624,3257549631,FR
-3257549632,3257549823,GB
-3257549824,3257550079,US
-3257550080,3257550847,GB
-3257550848,3257551103,HK
-3257551104,3257551359,GB
-3257551360,3257551871,BE
-3257551872,3257552127,GB
-3257552128,3257552415,SE
-3257552416,3257554687,GB
-3257554688,3257554943,DE
-3257554944,3257555295,CH
-3257555296,3257555327,RO
-3257555328,3257555343,GB
-3257555344,3257555391,CH
-3257555392,3257555423,GB
-3257555424,3257555967,CH
-3257555968,3257556991,DE
-3257556992,3257557503,MW
+3257548800,3257554943,GB
+3257554944,3257555455,CH
+3257555456,3257556991,GB
3257557504,3257558015,LU
-3257558016,3257559551,RO
+3257558016,3257559039,RO
3257559552,3257560063,UA
3257560064,3257560575,DE
3257560576,3257561087,PL
@@ -117562,19 +62926,9 @@
3257563648,3257564159,NL
3257564160,3257564671,GB
3257564672,3257565183,RO
-3257565184,3257570303,CY
-3257570304,3257570307,GR
-3257570308,3257570311,CY
-3257570312,3257570327,GR
-3257570328,3257570367,CY
-3257570368,3257570431,GR
-3257570432,3257573375,CY
+3257565184,3257573375,CY
3257573376,3257574015,CH
-3257574016,3257574143,BE
-3257574144,3257574399,GB
-3257574400,3257574655,IT
-3257574656,3257576191,BE
-3257576192,3257577471,AT
+3257576448,3257577471,AT
3257577472,3257581567,DE
3257581568,3257585663,UA
3257585664,3257586175,BE
@@ -117588,1116 +62942,28 @@
3257588736,3257589759,NL
3257589760,3257663487,GB
3257663488,3257729023,UA
-3257729024,3257731071,DE
-3257731072,3257731375,NL
-3257731376,3257731383,DE
-3257731384,3257731439,NL
-3257731440,3257731447,DE
-3257731448,3257731551,NL
-3257731552,3257731559,DE
-3257731560,3257731567,NL
-3257731568,3257731575,DE
-3257731576,3257731823,NL
-3257731824,3257731831,DE
-3257731832,3257732023,NL
-3257732024,3257732031,DE
-3257732032,3257732095,NL
-3257732096,3257732607,DE
-3257732608,3257732703,NL
-3257732704,3257732719,DE
-3257732720,3257732727,NL
-3257732728,3257732735,DE
-3257732736,3257732815,NL
-3257732816,3257732823,DE
-3257732824,3257732903,NL
-3257732904,3257732911,DE
-3257732912,3257733303,NL
-3257733304,3257733311,DE
-3257733312,3257733431,NL
-3257733432,3257733439,DE
-3257733440,3257733903,NL
-3257733904,3257733911,DE
-3257733912,3257734135,NL
-3257734136,3257736191,DE
-3257736192,3257736575,NL
-3257736576,3257736583,DE
-3257736584,3257736631,NL
-3257736632,3257736639,DE
-3257736640,3257736671,NL
-3257736672,3257736679,DE
-3257736680,3257736887,NL
-3257736888,3257736895,DE
-3257736896,3257736943,NL
-3257736944,3257736951,DE
-3257736952,3257736975,NL
-3257736976,3257736983,DE
-3257736984,3257737023,NL
-3257737024,3257737031,DE
-3257737032,3257737039,NL
-3257737040,3257737047,DE
-3257737048,3257737119,NL
-3257737120,3257737127,DE
-3257737128,3257737175,NL
-3257737176,3257737183,DE
-3257737184,3257737279,NL
-3257737280,3257737287,DE
-3257737288,3257737295,NL
-3257737296,3257737303,DE
-3257737304,3257737447,NL
-3257737448,3257737455,DE
-3257737456,3257737471,NL
-3257737472,3257743615,DE
-3257743616,3257743623,NL
-3257743624,3257743631,DE
-3257743632,3257743703,NL
-3257743704,3257743711,DE
-3257743712,3257743743,NL
-3257743744,3257743751,DE
-3257743752,3257743775,NL
-3257743776,3257743783,DE
-3257743784,3257743943,NL
-3257743944,3257743959,DE
-3257743960,3257744111,NL
-3257744112,3257744119,DE
-3257744120,3257744159,NL
-3257744160,3257744167,DE
-3257744168,3257744175,NL
-3257744176,3257744183,DE
-3257744184,3257744247,NL
-3257744248,3257744255,DE
-3257744256,3257744671,NL
-3257744672,3257744679,DE
-3257744680,3257744775,NL
-3257744776,3257744783,DE
-3257744784,3257744871,NL
-3257744872,3257744887,DE
-3257744888,3257744951,NL
-3257744952,3257744959,DE
-3257744960,3257744999,NL
-3257745000,3257745007,DE
-3257745008,3257745119,NL
-3257745120,3257745127,DE
-3257745128,3257745255,NL
-3257745256,3257745263,DE
-3257745264,3257745823,NL
-3257745824,3257745831,DE
-3257745832,3257745879,NL
-3257745880,3257745887,DE
-3257745888,3257745935,NL
-3257745936,3257745943,DE
-3257745944,3257746047,NL
-3257746048,3257746055,DE
-3257746056,3257746079,NL
-3257746080,3257746087,DE
-3257746088,3257746167,NL
-3257746168,3257746175,DE
-3257746176,3257746455,NL
-3257746456,3257746463,DE
-3257746464,3257746487,NL
-3257746488,3257746495,DE
-3257746496,3257746527,NL
-3257746528,3257746535,DE
-3257746536,3257746647,NL
-3257746648,3257746655,DE
-3257746656,3257746671,NL
-3257746672,3257746679,DE
-3257746680,3257746847,NL
-3257746848,3257746855,DE
-3257746856,3257746919,NL
-3257746920,3257746927,DE
-3257746928,3257746943,NL
-3257746944,3257747455,DE
-3257747456,3257747471,NL
-3257747472,3257747479,DE
-3257747480,3257747607,NL
-3257747608,3257747615,DE
-3257747616,3257747655,NL
-3257747656,3257747663,DE
-3257747664,3257747719,NL
-3257747720,3257747727,DE
-3257747728,3257747847,NL
-3257747848,3257747855,DE
-3257747856,3257747903,NL
-3257747904,3257747911,DE
-3257747912,3257747991,NL
-3257747992,3257747999,DE
-3257748000,3257748015,NL
-3257748016,3257748023,DE
-3257748024,3257748063,NL
-3257748064,3257748071,DE
-3257748072,3257748119,NL
-3257748120,3257748127,DE
-3257748128,3257748303,NL
-3257748304,3257748311,DE
-3257748312,3257748383,NL
-3257748384,3257748391,DE
-3257748392,3257748423,NL
-3257748424,3257748431,DE
-3257748432,3257748455,NL
-3257748456,3257748463,DE
-3257748464,3257748479,NL
-3257748480,3257749527,DE
-3257749528,3257749551,NL
-3257749552,3257749559,DE
-3257749560,3257749663,NL
-3257749664,3257749687,DE
-3257749688,3257749727,NL
-3257749728,3257749735,DE
-3257749736,3257749743,NL
-3257749744,3257749751,DE
-3257749752,3257749759,NL
-3257749760,3257749767,DE
-3257749768,3257749783,NL
-3257749784,3257749791,DE
-3257749792,3257749839,NL
-3257749840,3257749879,DE
-3257749880,3257749887,NL
-3257749888,3257749903,DE
-3257749904,3257749943,NL
-3257749944,3257749951,DE
-3257749952,3257749959,NL
-3257749960,3257749967,DE
-3257749968,3257750015,NL
-3257750016,3257750023,DE
-3257750024,3257750071,NL
-3257750072,3257750079,DE
-3257750080,3257750119,NL
-3257750120,3257750127,DE
-3257750128,3257750151,NL
-3257750152,3257750167,DE
-3257750168,3257750191,NL
-3257750192,3257750199,DE
-3257750200,3257750231,NL
-3257750232,3257750247,DE
-3257750248,3257750359,NL
-3257750360,3257750367,DE
-3257750368,3257750391,NL
-3257750392,3257750399,DE
-3257750400,3257750471,NL
-3257750472,3257750479,DE
-3257750480,3257750615,NL
-3257750616,3257750623,DE
-3257750624,3257750631,NL
-3257750632,3257750639,DE
-3257750640,3257750655,NL
-3257750656,3257750663,DE
-3257750664,3257750671,NL
-3257750672,3257750687,DE
-3257750688,3257750735,NL
-3257750736,3257750751,DE
-3257750752,3257750759,NL
-3257750760,3257750767,DE
-3257750768,3257751087,NL
-3257751088,3257751103,DE
-3257751104,3257751183,NL
-3257751184,3257751191,DE
-3257751192,3257751199,NL
-3257751200,3257751207,DE
-3257751208,3257751215,NL
-3257751216,3257751223,DE
-3257751224,3257751247,NL
-3257751248,3257751263,DE
-3257751264,3257751279,NL
-3257751280,3257751287,DE
-3257751288,3257751351,NL
-3257751352,3257751359,DE
-3257751360,3257751391,NL
-3257751392,3257751399,DE
-3257751400,3257751519,NL
-3257751520,3257751527,DE
-3257751528,3257751591,NL
-3257751592,3257751599,DE
-3257751600,3257751623,NL
-3257751624,3257751631,DE
-3257751632,3257751639,NL
-3257751640,3257751647,DE
-3257751648,3257751711,NL
-3257751712,3257751719,DE
-3257751720,3257751775,NL
-3257751776,3257751783,DE
-3257751784,3257751823,NL
-3257751824,3257751831,DE
-3257751832,3257751871,NL
-3257751872,3257751887,DE
-3257751888,3257751903,NL
-3257751904,3257751911,DE
-3257751912,3257751975,NL
-3257751976,3257751983,DE
-3257751984,3257752007,NL
-3257752008,3257752015,DE
-3257752016,3257752023,NL
-3257752024,3257752031,DE
-3257752032,3257752047,NL
-3257752048,3257752055,DE
-3257752056,3257752071,NL
-3257752072,3257752079,DE
-3257752080,3257752103,NL
-3257752104,3257752111,DE
-3257752112,3257752135,NL
-3257752136,3257752143,DE
-3257752144,3257752167,NL
-3257752168,3257752183,DE
-3257752184,3257752343,NL
-3257752344,3257752351,DE
-3257752352,3257752399,NL
-3257752400,3257752407,DE
-3257752408,3257752447,NL
-3257752448,3257752455,DE
-3257752456,3257752495,NL
-3257752496,3257752503,DE
-3257752504,3257752527,NL
-3257752528,3257752543,DE
-3257752544,3257752583,NL
-3257752584,3257752591,DE
-3257752592,3257752607,NL
-3257752608,3257752615,DE
-3257752616,3257752623,NL
-3257752624,3257752631,DE
-3257752632,3257752655,NL
-3257752656,3257752663,DE
-3257752664,3257752727,NL
-3257752728,3257752735,DE
-3257752736,3257752783,NL
-3257752784,3257752791,DE
-3257752792,3257752799,NL
-3257752800,3257752807,DE
-3257752808,3257752919,NL
-3257752920,3257752935,DE
-3257752936,3257752959,NL
-3257752960,3257752967,DE
-3257752968,3257752983,NL
-3257752984,3257752991,DE
-3257752992,3257753071,NL
-3257753072,3257753079,DE
-3257753080,3257753087,NL
-3257753088,3257756671,DE
-3257756672,3257756735,NL
-3257756736,3257756743,DE
-3257756744,3257756783,NL
-3257756784,3257756791,DE
-3257756792,3257756807,NL
-3257756808,3257756823,DE
-3257756824,3257756887,NL
-3257756888,3257756895,DE
-3257756896,3257756919,NL
-3257756920,3257756935,DE
-3257756936,3257757007,NL
-3257757008,3257757015,DE
-3257757016,3257757079,NL
-3257757080,3257757087,DE
-3257757088,3257757247,NL
-3257757248,3257757255,DE
-3257757256,3257757263,NL
-3257757264,3257757271,DE
-3257757272,3257757343,NL
-3257757344,3257757351,DE
-3257757352,3257757375,NL
-3257757376,3257757383,DE
-3257757384,3257757407,NL
-3257757408,3257757423,DE
-3257757424,3257757471,NL
-3257757472,3257757479,DE
-3257757480,3257757511,NL
-3257757512,3257757519,DE
-3257757520,3257757583,NL
-3257757584,3257757591,DE
-3257757592,3257757639,NL
-3257757640,3257757655,DE
-3257757656,3257757703,NL
-3257757704,3257757711,DE
-3257757712,3257757735,NL
-3257757736,3257757751,DE
-3257757752,3257757799,NL
-3257757800,3257757807,DE
-3257757808,3257757815,NL
-3257757816,3257757831,DE
-3257757832,3257757919,NL
-3257757920,3257757943,DE
-3257757944,3257758143,NL
-3257758144,3257758151,DE
-3257758152,3257758239,NL
-3257758240,3257758247,DE
-3257758248,3257758271,NL
-3257758272,3257758279,DE
-3257758280,3257758335,NL
-3257758336,3257758343,DE
-3257758344,3257758375,NL
-3257758376,3257758383,DE
-3257758384,3257758423,NL
-3257758424,3257758431,DE
-3257758432,3257758511,NL
-3257758512,3257758519,DE
-3257758520,3257758567,NL
-3257758568,3257758575,DE
-3257758576,3257758591,NL
-3257758592,3257758599,DE
-3257758600,3257758623,NL
-3257758624,3257758639,DE
-3257758640,3257758647,NL
-3257758648,3257758655,DE
-3257758656,3257758703,NL
-3257758704,3257758711,DE
-3257758712,3257758775,NL
-3257758776,3257758783,DE
-3257758784,3257758855,NL
-3257758856,3257758863,DE
-3257758864,3257758879,NL
-3257758880,3257758887,DE
-3257758888,3257758927,NL
-3257758928,3257758935,DE
-3257758936,3257759087,NL
-3257759088,3257759095,DE
-3257759096,3257759135,NL
-3257759136,3257759167,DE
-3257759168,3257759215,NL
-3257759216,3257759223,DE
-3257759224,3257759231,NL
-3257759232,3257759239,DE
-3257759240,3257759255,NL
-3257759256,3257759279,DE
-3257759280,3257759287,NL
-3257759288,3257759295,DE
-3257759296,3257759415,NL
-3257759416,3257759431,DE
-3257759432,3257759575,NL
-3257759576,3257759583,DE
-3257759584,3257759591,NL
-3257759592,3257759599,DE
-3257759600,3257759647,NL
-3257759648,3257759671,DE
-3257759672,3257759695,NL
-3257759696,3257759703,DE
-3257759704,3257759735,NL
-3257759736,3257759743,DE
-3257759744,3257759791,NL
-3257759792,3257759799,DE
-3257759800,3257759823,NL
-3257759824,3257759831,DE
-3257759832,3257759847,NL
-3257759848,3257759879,DE
-3257759880,3257759887,NL
-3257759888,3257759903,DE
-3257759904,3257759911,NL
-3257759912,3257759919,DE
-3257759920,3257759975,NL
-3257759976,3257759983,DE
-3257759984,3257759999,NL
-3257760000,3257760007,DE
-3257760008,3257760015,NL
-3257760016,3257760023,DE
-3257760024,3257760039,NL
-3257760040,3257760047,DE
-3257760048,3257760095,NL
-3257760096,3257760103,DE
-3257760104,3257760119,NL
-3257760120,3257760127,DE
-3257760128,3257760167,NL
-3257760168,3257760175,DE
-3257760176,3257760231,NL
-3257760232,3257760239,DE
-3257760240,3257760263,NL
-3257760264,3257760271,DE
-3257760272,3257760303,NL
-3257760304,3257760311,DE
-3257760312,3257760335,NL
-3257760336,3257760343,DE
-3257760344,3257760359,NL
-3257760360,3257760367,DE
-3257760368,3257760431,NL
-3257760432,3257760439,DE
-3257760440,3257760487,NL
-3257760488,3257760503,DE
-3257760504,3257760559,NL
-3257760560,3257760575,DE
-3257760576,3257760655,NL
-3257760656,3257760663,DE
-3257760664,3257760791,NL
-3257760792,3257760799,DE
-3257760800,3257760839,NL
-3257760840,3257760847,DE
-3257760848,3257760863,NL
-3257760864,3257760871,DE
-3257760872,3257760927,NL
-3257760928,3257760935,DE
-3257760936,3257760959,NL
-3257760960,3257760967,DE
-3257760968,3257761055,NL
-3257761056,3257761071,DE
-3257761072,3257761151,NL
-3257761152,3257761159,DE
-3257761160,3257761183,NL
-3257761184,3257761191,DE
-3257761192,3257761279,NL
-3257761280,3257761791,DE
-3257761792,3257761839,NL
-3257761840,3257761847,DE
-3257761848,3257761879,NL
-3257761880,3257761887,DE
-3257761888,3257761903,NL
-3257761904,3257761919,DE
-3257761920,3257761951,NL
-3257761952,3257761959,DE
-3257761960,3257762023,NL
-3257762024,3257762031,DE
-3257762032,3257762175,NL
-3257762176,3257762183,DE
-3257762184,3257762215,NL
-3257762216,3257762223,DE
-3257762224,3257762247,NL
-3257762248,3257762263,DE
-3257762264,3257762583,NL
-3257762584,3257762599,DE
-3257762600,3257762655,NL
-3257762656,3257762663,DE
-3257762664,3257762679,NL
-3257762680,3257762695,DE
-3257762696,3257762711,NL
-3257762712,3257762719,DE
-3257762720,3257762807,NL
-3257762808,3257762815,DE
-3257762816,3257762863,NL
-3257762864,3257762871,DE
-3257762872,3257762895,NL
-3257762896,3257762903,DE
-3257762904,3257762951,NL
-3257762952,3257762959,DE
-3257762960,3257763023,NL
-3257763024,3257763031,DE
-3257763032,3257763055,NL
-3257763056,3257763063,DE
-3257763064,3257763151,NL
-3257763152,3257763159,DE
-3257763160,3257763247,NL
-3257763248,3257763255,DE
-3257763256,3257763327,NL
-3257763328,3257763839,DE
-3257763840,3257763855,NL
-3257763856,3257763871,DE
-3257763872,3257763887,NL
-3257763888,3257763895,DE
-3257763896,3257763927,NL
-3257763928,3257763935,DE
-3257763936,3257763943,NL
-3257763944,3257763959,DE
-3257763960,3257763999,NL
-3257764000,3257764007,DE
-3257764008,3257764015,NL
-3257764016,3257764023,DE
-3257764024,3257764095,NL
-3257764096,3257764103,DE
-3257764104,3257764143,NL
-3257764144,3257764151,DE
-3257764152,3257764175,NL
-3257764176,3257764183,DE
-3257764184,3257764247,NL
-3257764248,3257764255,DE
-3257764256,3257764287,NL
-3257764288,3257764295,DE
-3257764296,3257764487,NL
-3257764488,3257764511,DE
-3257764512,3257764543,NL
-3257764544,3257764551,DE
-3257764552,3257764559,NL
-3257764560,3257764567,DE
-3257764568,3257764575,NL
-3257764576,3257764583,DE
-3257764584,3257764591,NL
-3257764592,3257764599,DE
-3257764600,3257764647,NL
-3257764648,3257764655,DE
-3257764656,3257764799,NL
-3257764800,3257764807,DE
-3257764808,3257764855,NL
-3257764856,3257764863,DE
-3257764864,3257764879,NL
-3257764880,3257764887,DE
-3257764888,3257764927,NL
-3257764928,3257764935,DE
-3257764936,3257764983,NL
-3257764984,3257764991,DE
-3257764992,3257765039,NL
-3257765040,3257765047,DE
-3257765048,3257765055,NL
-3257765056,3257765071,DE
-3257765072,3257765079,NL
-3257765080,3257765087,DE
-3257765088,3257765103,NL
-3257765104,3257765111,DE
-3257765112,3257765167,NL
-3257765168,3257765175,DE
-3257765176,3257765247,NL
-3257765248,3257765255,DE
-3257765256,3257765263,NL
-3257765264,3257765279,DE
-3257765280,3257765375,NL
-3257765376,3257768959,DE
-3257768960,3257769071,NL
-3257769072,3257769079,DE
-3257769080,3257769215,NL
-3257769216,3257769223,DE
-3257769224,3257769543,NL
-3257769544,3257769551,DE
-3257769552,3257769567,NL
-3257769568,3257769575,DE
-3257769576,3257769687,NL
-3257769688,3257769695,DE
-3257769696,3257769703,NL
-3257769704,3257769711,DE
-3257769712,3257769719,NL
-3257769720,3257769727,DE
-3257769728,3257770023,NL
-3257770024,3257770031,DE
-3257770032,3257770039,NL
-3257770040,3257770047,DE
-3257770048,3257770071,NL
-3257770072,3257770079,DE
-3257770080,3257770095,NL
-3257770096,3257770103,DE
-3257770104,3257770151,NL
-3257770152,3257770159,DE
-3257770160,3257770191,NL
-3257770192,3257770199,DE
-3257770200,3257770279,NL
-3257770280,3257770287,DE
-3257770288,3257770295,NL
-3257770296,3257770303,DE
-3257770304,3257770359,NL
-3257770360,3257770367,DE
-3257770368,3257770455,NL
-3257770456,3257770463,DE
-3257770464,3257770511,NL
-3257770512,3257770519,DE
-3257770520,3257770599,NL
-3257770600,3257770615,DE
-3257770616,3257770623,NL
-3257770624,3257770631,DE
-3257770632,3257770687,NL
-3257770688,3257770695,DE
-3257770696,3257770767,NL
-3257770768,3257770775,DE
-3257770776,3257770823,NL
-3257770824,3257770831,DE
-3257770832,3257770879,NL
-3257770880,3257770887,DE
-3257770888,3257770911,NL
-3257770912,3257770919,DE
-3257770920,3257771007,NL
-3257771008,3257772551,DE
-3257772552,3257772575,NL
-3257772576,3257772583,DE
-3257772584,3257772631,NL
-3257772632,3257772639,DE
-3257772640,3257772679,NL
-3257772680,3257772687,DE
-3257772688,3257772711,NL
-3257772712,3257772743,DE
-3257772744,3257772783,NL
-3257772784,3257772791,DE
-3257772792,3257772815,NL
-3257772816,3257772831,DE
-3257772832,3257772847,NL
-3257772848,3257772855,DE
-3257772856,3257772895,NL
-3257772896,3257772903,DE
-3257772904,3257772935,NL
-3257772936,3257772951,DE
-3257772952,3257772967,NL
-3257772968,3257772975,DE
-3257772976,3257772991,NL
-3257772992,3257772999,DE
-3257773000,3257773095,NL
-3257773096,3257773103,DE
-3257773104,3257773199,NL
-3257773200,3257773223,DE
-3257773224,3257773303,NL
-3257773304,3257773311,DE
-3257773312,3257773391,NL
-3257773392,3257773399,DE
-3257773400,3257773415,NL
-3257773416,3257773423,DE
-3257773424,3257773439,NL
-3257773440,3257773447,DE
-3257773448,3257773591,NL
-3257773592,3257773599,DE
-3257773600,3257773759,NL
-3257773760,3257773775,DE
-3257773776,3257773799,NL
-3257773800,3257773807,DE
-3257773808,3257773831,NL
-3257773832,3257773855,DE
-3257773856,3257773903,NL
-3257773904,3257773919,DE
-3257773920,3257773927,NL
-3257773928,3257773935,DE
-3257773936,3257773951,NL
-3257773952,3257773959,DE
-3257773960,3257774007,NL
-3257774008,3257774015,DE
-3257774016,3257774055,NL
-3257774056,3257774063,DE
-3257774064,3257774263,NL
-3257774264,3257774279,DE
-3257774280,3257774287,NL
-3257774288,3257774295,DE
-3257774296,3257774335,NL
-3257774336,3257774343,DE
-3257774344,3257774359,NL
-3257774360,3257774367,DE
-3257774368,3257774375,NL
-3257774376,3257774383,DE
-3257774384,3257774487,NL
-3257774488,3257774495,DE
-3257774496,3257774527,NL
-3257774528,3257774535,DE
-3257774536,3257774703,NL
-3257774704,3257774711,DE
-3257774712,3257774775,NL
-3257774776,3257774791,DE
-3257774792,3257774871,NL
-3257774872,3257774879,DE
-3257774880,3257774951,NL
-3257774952,3257774959,DE
-3257774960,3257774983,NL
-3257774984,3257774999,DE
-3257775000,3257775015,NL
-3257775016,3257775023,DE
-3257775024,3257775047,NL
-3257775048,3257775055,DE
-3257775056,3257775063,NL
-3257775064,3257775071,DE
-3257775072,3257775103,NL
-3257775104,3257776639,DE
-3257776640,3257776663,NL
-3257776664,3257776671,DE
-3257776672,3257776727,NL
-3257776728,3257776735,DE
-3257776736,3257776767,NL
-3257776768,3257776775,DE
-3257776776,3257776983,NL
-3257776984,3257776991,DE
-3257776992,3257777047,NL
-3257777048,3257777055,DE
-3257777056,3257777111,NL
-3257777112,3257777119,DE
-3257777120,3257777127,NL
-3257777128,3257777135,DE
-3257777136,3257777151,NL
-3257777152,3257777159,DE
-3257777160,3257777175,NL
-3257777176,3257777183,DE
-3257777184,3257777223,NL
-3257777224,3257777239,DE
-3257777240,3257777279,NL
-3257777280,3257777287,DE
-3257777288,3257777303,NL
-3257777304,3257777311,DE
-3257777312,3257777335,NL
-3257777336,3257777343,DE
-3257777344,3257777487,NL
-3257777488,3257777495,DE
-3257777496,3257777551,NL
-3257777552,3257777567,DE
-3257777568,3257777575,NL
-3257777576,3257777583,DE
-3257777584,3257777751,NL
-3257777752,3257777767,DE
-3257777768,3257777783,NL
-3257777784,3257777791,DE
-3257777792,3257777799,NL
-3257777800,3257777807,DE
-3257777808,3257777855,NL
-3257777856,3257777863,DE
-3257777864,3257777935,NL
-3257777936,3257777943,DE
-3257777944,3257777975,NL
-3257777976,3257777983,DE
-3257777984,3257777991,NL
-3257777992,3257777999,DE
-3257778000,3257778023,NL
-3257778024,3257778031,DE
-3257778032,3257778047,NL
-3257778048,3257778055,DE
-3257778056,3257778071,NL
-3257778072,3257778079,DE
-3257778080,3257778087,NL
-3257778088,3257778103,DE
-3257778104,3257778159,NL
-3257778160,3257778167,DE
-3257778168,3257778439,NL
-3257778440,3257778447,DE
-3257778448,3257778479,NL
-3257778480,3257778487,DE
-3257778488,3257778503,NL
-3257778504,3257778511,DE
-3257778512,3257778543,NL
-3257778544,3257778551,DE
-3257778552,3257778583,NL
-3257778584,3257778591,DE
-3257778592,3257778663,NL
-3257778664,3257778671,DE
-3257778672,3257778727,NL
-3257778728,3257778735,DE
-3257778736,3257778815,NL
-3257778816,3257778823,DE
-3257778824,3257778895,NL
-3257778896,3257778903,DE
-3257778904,3257778943,NL
-3257778944,3257778951,DE
-3257778952,3257778959,NL
-3257778960,3257778975,DE
-3257778976,3257779055,NL
-3257779056,3257779063,DE
-3257779064,3257779079,NL
-3257779080,3257779087,DE
-3257779088,3257779095,NL
-3257779096,3257779103,DE
-3257779104,3257779111,NL
-3257779112,3257779127,DE
-3257779128,3257779199,NL
-3257779200,3257780735,DE
-3257780736,3257780743,NL
-3257780744,3257780751,DE
-3257780752,3257780775,NL
-3257780776,3257780783,DE
-3257780784,3257780967,NL
-3257780968,3257780983,DE
-3257780984,3257780999,NL
-3257781000,3257781007,DE
-3257781008,3257781111,NL
-3257781112,3257781119,DE
-3257781120,3257781135,NL
-3257781136,3257781143,DE
-3257781144,3257781191,NL
-3257781192,3257781199,DE
-3257781200,3257781215,NL
-3257781216,3257781223,DE
-3257781224,3257781255,NL
-3257781256,3257781263,DE
-3257781264,3257781279,NL
-3257781280,3257781287,DE
-3257781288,3257781391,NL
-3257781392,3257781399,DE
-3257781400,3257781431,NL
-3257781432,3257781439,DE
-3257781440,3257781479,NL
-3257781480,3257781487,DE
-3257781488,3257781567,NL
-3257781568,3257781575,DE
-3257781576,3257781591,NL
-3257781592,3257781599,DE
-3257781600,3257781615,NL
-3257781616,3257781623,DE
-3257781624,3257781639,NL
-3257781640,3257781647,DE
-3257781648,3257781711,NL
-3257781712,3257781719,DE
-3257781720,3257781791,NL
-3257781792,3257781799,DE
-3257781800,3257781807,NL
-3257781808,3257781815,DE
-3257781816,3257781839,NL
-3257781840,3257781847,DE
-3257781848,3257781863,NL
-3257781864,3257781871,DE
-3257781872,3257781895,NL
-3257781896,3257781903,DE
-3257781904,3257781919,NL
-3257781920,3257781927,DE
-3257781928,3257781943,NL
-3257781944,3257781951,DE
-3257781952,3257781975,NL
-3257781976,3257781999,DE
-3257782000,3257782015,NL
-3257782016,3257782023,DE
-3257782024,3257782031,NL
-3257782032,3257782047,DE
-3257782048,3257782103,NL
-3257782104,3257782111,DE
-3257782112,3257782191,NL
-3257782192,3257782207,DE
-3257782208,3257782239,NL
-3257782240,3257782255,DE
-3257782256,3257782271,NL
-3257782272,3257784831,DE
-3257784832,3257784855,NL
-3257784856,3257784863,DE
-3257784864,3257784871,NL
-3257784872,3257784879,DE
-3257784880,3257784903,NL
-3257784904,3257784911,DE
-3257784912,3257784959,NL
-3257784960,3257784967,DE
-3257784968,3257785071,NL
-3257785072,3257785079,DE
-3257785080,3257785087,NL
-3257785088,3257785095,DE
-3257785096,3257785151,NL
-3257785152,3257785159,DE
-3257785160,3257785167,NL
-3257785168,3257785175,DE
-3257785176,3257785183,NL
-3257785184,3257785191,DE
-3257785192,3257785199,NL
-3257785200,3257785215,DE
-3257785216,3257785247,NL
-3257785248,3257785255,DE
-3257785256,3257785343,NL
-3257785344,3257785359,DE
-3257785360,3257785375,NL
-3257785376,3257785383,DE
-3257785384,3257785415,NL
-3257785416,3257785431,DE
-3257785432,3257785471,NL
-3257785472,3257785479,DE
-3257785480,3257785623,NL
-3257785624,3257785631,DE
-3257785632,3257785663,NL
-3257785664,3257785695,DE
-3257785696,3257785719,NL
-3257785720,3257785727,DE
-3257785728,3257785735,NL
-3257785736,3257785743,DE
-3257785744,3257785807,NL
-3257785808,3257785823,DE
-3257785824,3257785983,NL
-3257785984,3257785991,DE
-3257785992,3257786079,NL
-3257786080,3257786087,DE
-3257786088,3257786191,NL
-3257786192,3257786199,DE
-3257786200,3257786255,NL
-3257786256,3257786263,DE
-3257786264,3257786271,NL
-3257786272,3257786279,DE
-3257786280,3257786335,NL
-3257786336,3257786343,DE
-3257786344,3257786359,NL
-3257786360,3257786367,DE
-3257786368,3257786383,NL
-3257786384,3257786391,DE
-3257786392,3257786415,NL
-3257786416,3257786423,DE
-3257786424,3257786431,NL
-3257786432,3257786439,DE
-3257786440,3257786559,NL
-3257786560,3257786567,DE
-3257786568,3257786623,NL
-3257786624,3257786631,DE
-3257786632,3257786647,NL
-3257786648,3257786655,DE
-3257786656,3257786703,NL
-3257786704,3257786711,DE
-3257786712,3257786719,NL
-3257786720,3257786727,DE
-3257786728,3257786807,NL
-3257786808,3257786823,DE
-3257786824,3257786839,NL
-3257786840,3257786847,DE
-3257786848,3257786863,NL
-3257786864,3257787391,DE
-3257787392,3257787503,NL
-3257787504,3257787511,DE
-3257787512,3257787695,NL
-3257787696,3257787703,DE
-3257787704,3257787727,NL
-3257787728,3257787735,DE
-3257787736,3257787751,NL
-3257787752,3257787759,DE
-3257787760,3257787879,NL
-3257787880,3257787887,DE
-3257787888,3257787895,NL
-3257787896,3257787903,DE
-3257787904,3257787911,NL
-3257787912,3257787919,DE
-3257787920,3257787967,NL
-3257787968,3257787975,DE
-3257787976,3257787999,NL
-3257788000,3257788015,DE
-3257788016,3257788071,NL
-3257788072,3257788079,DE
-3257788080,3257788095,NL
-3257788096,3257788103,DE
-3257788104,3257788119,NL
-3257788120,3257788127,DE
-3257788128,3257788175,NL
-3257788176,3257788183,DE
-3257788184,3257788231,NL
-3257788232,3257788239,DE
-3257788240,3257788247,NL
-3257788248,3257788255,DE
-3257788256,3257788303,NL
-3257788304,3257788311,DE
-3257788312,3257788415,NL
-3257788416,3257789951,DE
-3257789952,3257789975,NL
-3257789976,3257789983,DE
-3257789984,3257789999,NL
-3257790000,3257790007,DE
-3257790008,3257790039,NL
-3257790040,3257790047,DE
-3257790048,3257790103,NL
-3257790104,3257790111,DE
-3257790112,3257790135,NL
-3257790136,3257790143,DE
-3257790144,3257790159,NL
-3257790160,3257790167,DE
-3257790168,3257790191,NL
-3257790192,3257790199,DE
-3257790200,3257790239,NL
-3257790240,3257790263,DE
-3257790264,3257790319,NL
-3257790320,3257790327,DE
-3257790328,3257790391,NL
-3257790392,3257790407,DE
-3257790408,3257790415,NL
-3257790416,3257790423,DE
-3257790424,3257790479,NL
-3257790480,3257790503,DE
-3257790504,3257790559,NL
-3257790560,3257790567,DE
-3257790568,3257790623,NL
-3257790624,3257790639,DE
-3257790640,3257790663,NL
-3257790664,3257790671,DE
-3257790672,3257790711,NL
-3257790712,3257790719,DE
-3257790720,3257790847,NL
-3257790848,3257790855,DE
-3257790856,3257790879,NL
-3257790880,3257790887,DE
-3257790888,3257790903,NL
-3257790904,3257790919,DE
-3257790920,3257790975,NL
-3257790976,3257790991,DE
-3257790992,3257790999,NL
-3257791000,3257791023,DE
-3257791024,3257791047,NL
-3257791048,3257791055,DE
-3257791056,3257791095,NL
-3257791096,3257791103,DE
-3257791104,3257791151,NL
-3257791152,3257791159,DE
-3257791160,3257791223,NL
-3257791224,3257791231,DE
-3257791232,3257791255,NL
-3257791256,3257791263,DE
-3257791264,3257791271,NL
-3257791272,3257791287,DE
-3257791288,3257791327,NL
-3257791328,3257791343,DE
-3257791344,3257791359,NL
-3257791360,3257791375,DE
-3257791376,3257791503,NL
-3257791504,3257791511,DE
-3257791512,3257791527,NL
-3257791528,3257791535,DE
-3257791536,3257791583,NL
-3257791584,3257791591,DE
-3257791592,3257791615,NL
-3257791616,3257791631,DE
-3257791632,3257791639,NL
-3257791640,3257791647,DE
-3257791648,3257791703,NL
-3257791704,3257791711,DE
-3257791712,3257791727,NL
-3257791728,3257791743,DE
-3257791744,3257791831,NL
-3257791832,3257791839,DE
-3257791840,3257791863,NL
-3257791864,3257791871,DE
-3257791872,3257791879,NL
-3257791880,3257791903,DE
-3257791904,3257791951,NL
-3257791952,3257791959,DE
-3257791960,3257792007,NL
-3257792008,3257792015,DE
-3257792016,3257792095,NL
-3257792096,3257792111,DE
-3257792112,3257792119,NL
-3257792120,3257792135,DE
-3257792136,3257792143,NL
-3257792144,3257792159,DE
-3257792160,3257792167,NL
-3257792168,3257792175,DE
-3257792176,3257792191,NL
-3257792192,3257792199,DE
-3257792200,3257792207,NL
-3257792208,3257792215,DE
-3257792216,3257792383,NL
-3257792384,3257792391,DE
-3257792392,3257792399,NL
-3257792400,3257792407,DE
-3257792408,3257792487,NL
-3257792488,3257792495,DE
-3257792496,3257792503,NL
-3257792504,3257792511,DE
-3257792512,3257792607,NL
-3257792608,3257792615,DE
-3257792616,3257792719,NL
-3257792720,3257792727,DE
-3257792728,3257792783,NL
-3257792784,3257792791,DE
-3257792792,3257792927,NL
-3257792928,3257792935,DE
-3257792936,3257793087,NL
-3257793088,3257793095,DE
-3257793096,3257793119,NL
-3257793120,3257793127,DE
-3257793128,3257793167,NL
-3257793168,3257793175,DE
-3257793176,3257793215,NL
-3257793216,3257793223,DE
-3257793224,3257793231,NL
-3257793232,3257793239,DE
-3257793240,3257793351,NL
-3257793352,3257793359,DE
-3257793360,3257793391,NL
-3257793392,3257793399,DE
-3257793400,3257793415,NL
-3257793416,3257793431,DE
-3257793432,3257793439,NL
-3257793440,3257793447,DE
-3257793448,3257793519,NL
-3257793520,3257793527,DE
-3257793528,3257793551,NL
-3257793552,3257793559,DE
-3257793560,3257793583,NL
-3257793584,3257793591,DE
-3257793592,3257793727,NL
-3257793728,3257793735,DE
-3257793736,3257793839,NL
-3257793840,3257793847,DE
-3257793848,3257793919,NL
-3257793920,3257793927,DE
-3257793928,3257793951,NL
-3257793952,3257793959,DE
-3257793960,3257794079,NL
-3257794080,3257794087,DE
-3257794088,3257794095,NL
-3257794096,3257794103,DE
-3257794104,3257794279,NL
-3257794280,3257794287,DE
-3257794288,3257794327,NL
-3257794328,3257794335,DE
-3257794336,3257794351,NL
-3257794352,3257794359,DE
-3257794360,3257794511,NL
-3257794512,3257794519,DE
-3257794520,3257794559,NL
-3257794560,3257827327,GB
-3257827328,3257827839,IE
-3257827840,3257829375,GB
-3257829376,3257830399,IE
-3257830400,3257835519,GB
-3257835520,3257844223,IE
-3257844224,3257844735,GB
+3257729024,3257730047,DE
+3257730048,3257740799,NL
+3257740800,3257741055,FR
+3257741056,3257742335,NL
+3257742336,3257743359,DE
+3257743360,3257748479,NL
+3257748480,3257749503,DE
+3257749504,3257753087,NL
+3257753088,3257753343,DE
+3257753344,3257765887,NL
+3257765888,3257767935,DE
+3257767936,3257782271,NL
+3257782272,3257784319,DE
+3257784320,3257794559,NL
+3257794560,3257835519,GB
+3257835520,3257843711,IE
+3257843712,3257844735,GB
3257844736,3257860095,IE
3257860096,3257925631,SE
3257925632,3257925887,AT
3257925888,3257926143,SE
-3257926144,3257970431,AT
-3257970432,3257970687,UA
-3257970688,3257977855,AT
+3257926144,3257977855,AT
3257977856,3257978111,GB
3257978112,3257978367,SE
3257978368,3257978623,BG
@@ -118716,24 +62982,25 @@
3257981696,3257981951,PL
3257981952,3257987327,AT
3257987328,3257987583,CZ
-3257987584,3257991167,AT
-3257991168,3258003967,DE
+3257987584,3257988095,AT
+3257989120,3257991167,AT
+3257991168,3257995519,DE
+3257995776,3258003967,DE
3258003968,3258004479,RU
-3258004480,3258021887,DE
+3258004480,3258018815,DE
+3258019328,3258021887,DE
3258021888,3258022911,RU
3258022912,3258023167,PL
3258023168,3258023423,DE
3258023424,3258023679,TR
3258023680,3258023935,RU
3258023936,3258056703,DE
-3258056704,3258056959,UA
-3258056960,3258058239,CZ
+3258057216,3258057727,CZ
3258058240,3258058495,RU
3258058496,3258059007,RO
3258059008,3258059263,UA
3258059264,3258059519,RU
3258059520,3258059775,RO
-3258059776,3258062847,CZ
3258062848,3258063103,RU
3258063104,3258063871,CZ
3258063872,3258064127,AT
@@ -118751,11 +63018,9 @@
3258067968,3258068223,RO
3258068224,3258068479,CH
3258068736,3258068991,DE
-3258068992,3258069247,NL
3258069248,3258069503,PL
3258069504,3258069759,RO
3258069760,3258070015,UA
-3258070016,3258070271,GB
3258070272,3258070527,PL
3258070528,3258071295,GB
3258071296,3258071551,DK
@@ -118769,15 +63034,12 @@
3258074112,3258074879,DE
3258074880,3258075135,IL
3258075136,3258075391,RO
-3258075392,3258075647,BG
-3258075648,3258075903,FR
3258075904,3258076159,PL
3258076160,3258076415,BG
3258076416,3258076927,FR
3258076928,3258077183,UA
3258077184,3258077439,GB
3258077440,3258077695,UA
-3258077696,3258077951,NL
3258077952,3258078207,PL
3258078208,3258078463,TR
3258078464,3258078719,UA
@@ -118787,9 +63049,7 @@
3258079488,3258079743,PL
3258079744,3258079999,GB
3258080000,3258080255,BE
-3258080256,3258080511,FR
3258080512,3258080767,DE
-3258080768,3258081023,GB
3258081024,3258081279,FR
3258081280,3258081535,NL
3258081536,3258081791,BE
@@ -118843,7 +63103,6 @@
3258099456,3258099711,UA
3258099712,3258099967,FI
3258099968,3258100223,UA
-3258100480,3258100735,DK
3258100736,3258100991,CH
3258100992,3258101247,AT
3258101248,3258101503,RO
@@ -118856,11 +63115,10 @@
3258103040,3258103295,SE
3258103296,3258103551,DE
3258103552,3258103807,AE
-3258103808,3258104063,SE
3258104064,3258104319,GB
3258104320,3258104575,PL
3258104576,3258104831,DE
-3258104832,3258105599,CZ
+3258105088,3258105599,CZ
3258105600,3258105855,DE
3258105856,3258109951,CZ
3258109952,3258110207,DK
@@ -118868,28 +63126,22 @@
3258111488,3258111743,PL
3258111744,3258118399,CZ
3258118400,3258118655,UA
-3258118656,3258121215,CZ
+3258118656,3258119679,CZ
+3258120192,3258121215,CZ
3258121216,3258121471,PL
-3258121472,3258121727,AT
3258121728,3258121983,UA
3258121984,3258122239,RU
-3258122240,3258128895,FR
-3258128896,3258129151,MC
-3258129152,3258163967,FR
-3258163968,3258164223,BJ
-3258164224,3258167551,FR
-3258167552,3258167807,ES
-3258167808,3258187775,FR
-3258187776,3258231551,SE
-3258231552,3258232831,NO
-3258232832,3258250495,SE
-3258250496,3258250751,NO
-3258250752,3258251007,SE
-3258251008,3258251775,NO
-3258251776,3258253311,SE
+3258122240,3258187775,FR
+3258187776,3258230783,SE
+3258230784,3258232831,NO
+3258232832,3258249215,SE
+3258249216,3258253311,NO
3258253312,3258272767,NL
3258272768,3258273791,FR
-3258273792,3258297343,NL
+3258273792,3258279935,NL
+3258281984,3258284031,NL
+3258284288,3258290175,NL
+3258294272,3258297343,NL
3258297344,3258297599,BE
3258297600,3258298111,NL
3258298112,3258298367,GB
@@ -118903,7 +63155,7 @@
3258335232,3258336255,RU
3258336256,3258337279,NO
3258337280,3258338303,DE
-3258338304,3258340351,UA
+3258339328,3258340351,UA
3258340352,3258341375,PL
3258341376,3258342399,UA
3258342400,3258343423,DE
@@ -118919,13 +63171,15 @@
3258361856,3258362879,IL
3258362880,3258363903,IM
3258363904,3258364927,RU
-3258364928,3258365951,RS
+3258364928,3258365951,XK
3258365952,3258366975,UA
3258366976,3258367999,PL
3258368000,3258384383,KW
-3258384384,3258427647,DE
+3258384384,3258411007,DE
+3258411520,3258427647,DE
3258427648,3258427903,RO
-3258427904,3258449919,DE
+3258427904,3258428159,DE
+3258428416,3258449919,DE
3258449920,3258503935,CH
3258503936,3258504191,PL
3258504192,3258504703,CH
@@ -118933,13 +63187,10 @@
3258504960,3258505215,IL
3258505216,3258506495,CH
3258506496,3258506751,DE
-3258506752,3258515455,CH
+3258507008,3258515455,CH
3258515456,3258580991,FR
3258580992,3258646527,RU
-3258646528,3258690559,DE
-3258690560,3258690815,EU
-3258690816,3258691583,DE
-3258691584,3258691839,RU
+3258646528,3258691583,DE
3258691840,3258692351,AT
3258692352,3258692607,DE
3258692608,3258692863,FR
@@ -118949,7 +63200,6 @@
3258693632,3258693887,RU
3258693888,3258694143,SI
3258694144,3258694399,RU
-3258694400,3258694655,DE
3258694656,3258694911,GB
3258694912,3258712063,DE
3258712064,3258728447,GB
@@ -118969,9 +63219,10 @@
3258732544,3258732799,SE
3258732800,3258733055,CH
3258733056,3258733311,RO
-3258733312,3258746879,GB
-3258746880,3258748927,DE
-3258748928,3258764287,GB
+3258733312,3258734591,GB
+3258735104,3258735359,GB
+3258736640,3258762751,GB
+3258763264,3258764287,GB
3258764288,3258764543,DE
3258764800,3258765055,BE
3258765056,3258765311,NL
@@ -118983,7 +63234,7 @@
3258771456,3258772479,KZ
3258772480,3258773503,RU
3258773504,3258774015,FR
-3258774016,3258774271,MD
+3258774016,3258774271,UA
3258774272,3258774527,DK
3258774528,3258776063,RU
3258776064,3258776319,GE
@@ -119002,17 +63253,19 @@
3258795008,3258796031,PL
3258796032,3258802175,GB
3258802176,3258806271,LU
-3258806272,3258818047,GB
+3258806272,3258813439,GB
+3258814464,3258818047,GB
3258818048,3258818303,SE
-3258818304,3258843135,GB
+3258818560,3258843135,GB
3258843136,3258843391,RU
-3258843392,3258848767,GB
+3258843392,3258847231,GB
+3258848256,3258848767,GB
3258848768,3258849023,RO
3258849024,3258849279,DE
3258849280,3258859519,GB
3258859520,3258859775,BY
-3258859776,3258902783,GB
-3258902784,3258903039,RU
+3258859776,3258900479,GB
+3258901504,3258902783,GB
3258903040,3258903295,FR
3258903296,3258903551,GB
3258903552,3258903807,DE
@@ -119020,75 +63273,45 @@
3258904064,3258941439,GB
3258941440,3258943487,PL
3258943488,3258944511,BG
-3258944512,3258946559,RU
+3258944512,3258945535,RU
3258946560,3258947583,CH
-3258947584,3258948607,RO
3258948608,3258949631,RU
3258949632,3258972159,GR
3258972160,3258974207,NO
-3258974208,3259006079,DE
-3259006080,3259006111,BE
-3259006112,3259023103,DE
-3259023104,3259023107,ES
-3259023108,3259031895,DE
-3259031896,3259031899,ES
-3259031900,3259032151,DE
-3259032152,3259032159,GB
-3259032160,3259032199,DE
-3259032200,3259032203,ES
-3259032204,3259034319,DE
-3259034320,3259034327,GB
-3259034328,3259035535,DE
-3259035536,3259035551,FR
-3259035552,3259036031,DE
-3259036032,3259036035,ES
-3259036036,3259039743,DE
+3258974208,3259039743,DE
3259039744,3259105279,PT
3259105280,3259170815,GB
-3259170816,3259219967,RU
-3259219968,3259220479,BY
-3259220480,3259223295,RU
-3259223296,3259223807,TM
+3259170816,3259223807,RU
3259223808,3259224831,KZ
-3259224832,3259225343,TJ
+3259224832,3259225343,RU
3259225344,3259226111,AZ
-3259226112,3259226623,UZ
-3259226624,3259227135,AM
-3259227136,3259227391,RU
-3259227392,3259227903,KZ
-3259227904,3259228159,DE
-3259228160,3259236351,RU
+3259226112,3259227391,RU
+3259227392,3259227647,KZ
+3259227648,3259236351,RU
3259236352,3259236863,SE
3259236864,3259237119,CH
3259237120,3259237887,SE
3259237888,3259238143,FR
-3259238144,3259243519,SE
+3259238144,3259243007,SE
+3259243008,3259243519,AT
3259243520,3259244543,US
-3259244544,3259248127,SE
+3259244544,3259246591,SE
+3259246592,3259247615,IT
+3259247616,3259248127,SE
3259248128,3259248383,GB
-3259248384,3259250722,SE
-3259250723,3259250723,EU
-3259250724,3259252479,SE
-3259252480,3259252735,EU
-3259252736,3259258623,SE
+3259248384,3259248895,SE
+3259248896,3259249151,GB
+3259249152,3259258623,SE
3259258624,3259258879,ES
3259258880,3259262719,SE
3259262720,3259262975,DK
-3259262976,3259266047,SE
-3259266048,3259266303,SG
-3259266304,3259269375,SE
-3259269376,3259269631,FR
-3259269632,3259276287,SE
+3259262976,3259276287,SE
3259276288,3259276543,ES
-3259276544,3259279615,SE
-3259279616,3259279871,JP
-3259279872,3259280639,SE
+3259276544,3259280639,SE
3259280640,3259280895,US
3259280896,3259281407,SE
3259281408,3259282431,US
-3259282432,3259282687,SE
-3259282688,3259282943,JP
-3259282944,3259283711,SE
+3259282432,3259283711,SE
3259283712,3259283967,US
3259283968,3259284479,SE
3259284480,3259284735,US
@@ -119096,9 +63319,7 @@
3259285760,3259286015,GB
3259286016,3259290879,SE
3259290880,3259291135,US
-3259291136,3259292415,SE
-3259292416,3259292671,IT
-3259292672,3259297535,SE
+3259291136,3259297535,SE
3259297536,3259297791,GB
3259297792,3259301887,SE
3259301888,3259302143,DE
@@ -119106,86 +63327,17 @@
3259302400,3259303423,CH
3259303424,3259305983,SE
3259305984,3259310079,NL
-3259310080,3259310335,FR
-3259310336,3259311103,DK
-3259311104,3259311615,DE
-3259311616,3259312639,EU
-3259312640,3259313151,GB
-3259313152,3259317247,EU
3259317248,3259318271,CH
-3259318272,3259318343,GB
-3259318344,3259318351,FR
-3259318352,3259318599,GB
-3259318600,3259318607,AT
-3259318608,3259318663,GB
-3259318664,3259318671,DK
-3259318672,3259318679,GB
-3259318680,3259318687,IT
-3259318688,3259318727,GB
-3259318728,3259318735,FR
-3259318736,3259319055,GB
-3259319056,3259319071,IT
-3259319072,3259319087,GB
-3259319088,3259319095,SE
-3259319096,3259319103,DK
-3259319104,3259319111,FR
-3259319112,3259319199,GB
-3259319200,3259319215,DE
-3259319216,3259319255,GB
-3259319256,3259319263,DK
-3259319264,3259319287,GB
-3259319288,3259319295,BE
-3259319296,3259319303,GB
-3259319304,3259319311,BE
-3259319312,3259319319,DK
-3259319320,3259319367,GB
-3259319368,3259319375,BE
-3259319376,3259319407,GB
-3259319408,3259319423,LU
-3259319424,3259319439,GB
-3259319440,3259319447,CH
-3259319448,3259319463,GB
-3259319464,3259319471,DK
-3259319472,3259319587,GB
-3259319588,3259319591,NL
-3259319592,3259319663,GB
-3259319664,3259319667,FR
-3259319668,3259319823,GB
-3259319824,3259319831,FR
-3259319832,3259319879,GB
-3259319880,3259319887,BY
-3259319888,3259319987,GB
-3259319988,3259319991,NL
-3259319992,3259320011,GB
-3259320012,3259320015,BE
-3259320016,3259320055,GB
-3259320056,3259320063,AT
-3259320064,3259320575,GB
-3259320576,3259320583,FR
-3259320584,3259334655,GB
+3259318272,3259334655,GB
3259334656,3259338751,DE
3259338752,3259339263,GB
-3259339264,3259339519,EU
-3259339520,3259339775,JP
-3259339776,3259340031,US
-3259340032,3259342847,GB
+3259339520,3259342847,GB
3259342848,3259344895,CH
-3259344896,3259345151,GB
-3259345152,3259345407,IE
-3259345408,3259345663,CH
-3259345664,3259346943,EU
-3259346944,3259347199,SE
-3259347200,3259347455,DE
-3259347456,3259347967,CH
-3259347968,3259348223,SE
-3259348224,3259348991,CH
3259348992,3259351039,NL
3259351040,3259351551,IT
3259351552,3259352063,FR
3259352064,3259352575,CH
3259352576,3259353087,IE
-3259353088,3259353855,NO
-3259353856,3259354111,GB
3259354112,3259354367,NL
3259354368,3259354623,DE
3259354880,3259355135,PL
@@ -119196,132 +63348,32 @@
3259435264,3259435519,IT
3259435520,3259438079,SE
3259438080,3259438335,ES
-3259438336,3259438591,SE
-3259438592,3259439103,NO
-3259439104,3259454719,SE
-3259454720,3259454975,EU
-3259454976,3259457279,SE
+3259438336,3259457279,SE
3259457280,3259457535,IT
-3259457536,3259460351,SE
-3259460352,3259460607,DE
-3259460608,3259465215,SE
-3259465216,3259465471,KH
-3259465472,3259470847,SE
+3259457536,3259470847,SE
3259470848,3259471871,US
-3259471872,3259479551,SE
-3259479552,3259479807,IT
+3259471872,3259479807,SE
3259479808,3259480063,DK
3259480064,3259480831,SE
3259480832,3259481087,ES
-3259481088,3259484671,SE
-3259484672,3259485183,ES
-3259485184,3259495935,SE
-3259495936,3259496447,DK
-3259496448,3259498495,SE
-3259498496,3259506943,GB
-3259506944,3259507199,ES
-3259507200,3259507711,GB
-3259507712,3259507967,CH
-3259507968,3259508223,GB
-3259508224,3259508479,ES
-3259508480,3259511807,GB
-3259511808,3259512063,IM
-3259512064,3259515647,GB
-3259515648,3259515903,ES
-3259515904,3259518207,GB
-3259518208,3259518463,ES
-3259518464,3259518719,GB
-3259518720,3259518975,ES
-3259518976,3259521023,GB
-3259521024,3259521535,NL
-3259521536,3259541503,GB
+3259481088,3259490303,SE
+3259490304,3259490815,IN
+3259490816,3259498495,SE
+3259498496,3259541503,GB
3259541504,3259543551,NL
-3259543552,3259545599,GB
-3259545600,3259546111,LB
-3259546112,3259555839,GB
-3259555840,3259556095,ES
-3259556096,3259562495,GB
-3259562496,3259562751,ES
-3259562752,3259576799,GB
-3259576800,3259576831,ES
-3259576832,3259581439,GB
-3259581440,3259581951,ES
-3259581952,3259587583,GB
-3259587584,3259588095,ES
-3259588096,3259588607,IT
-3259588608,3259596799,GB
-3259596800,3259597055,ES
-3259597056,3259599359,GB
-3259599360,3259599615,FR
-3259599616,3259600639,GB
-3259600640,3259600895,IM
-3259600896,3259601151,GB
-3259601152,3259601407,IE
-3259601408,3259614463,GB
-3259614464,3259614719,DE
-3259614720,3259614975,GB
-3259614976,3259615231,DE
-3259615232,3259615743,GB
-3259615744,3259615999,FR
-3259616000,3259620095,GB
-3259620096,3259620351,DE
-3259620352,3259628031,GB
-3259628032,3259628543,CH
-3259628544,3259630335,GB
-3259630336,3259630591,ES
-3259630592,3259632127,GB
-3259632128,3259632383,IM
-3259632384,3259633407,GB
-3259633408,3259633663,DE
-3259633664,3259635711,GB
-3259635712,3259635967,ES
-3259635968,3259637759,GB
-3259637760,3259638015,ES
-3259638016,3259638783,GB
-3259638784,3259639039,BE
-3259639040,3259639551,GB
-3259639552,3259639807,DE
-3259639808,3259640319,GB
-3259640320,3259640575,ES
-3259640576,3259640831,GB
-3259640832,3259641343,ES
-3259641344,3259642367,GB
-3259642368,3259642623,BE
-3259642624,3259650047,GB
-3259650048,3259650559,NL
-3259650560,3259650815,GB
-3259650816,3259652095,NL
-3259652096,3259656959,GB
-3259656960,3259657215,BE
-3259657216,3259657727,GB
-3259657728,3259657887,BE
-3259657888,3259657919,GB
-3259657920,3259657983,BE
-3259657984,3259660543,GB
-3259660544,3259660799,CH
-3259660800,3259695871,GB
-3259695872,3259695903,ES
-3259695904,3259696639,GB
-3259696640,3259696895,ES
-3259696896,3259701759,GB
-3259701760,3259702303,DE
-3259702304,3259752191,GB
-3259752192,3259752447,FR
-3259752448,3259760639,GB
+3259543552,3259760639,GB
3259760640,3259814399,DE
3259814400,3259814655,AT
-3259814656,3259821823,DE
+3259814656,3259816447,DE
+3259816704,3259821823,DE
3259821824,3259822079,AT
3259822080,3259823103,DE
3259823104,3259823615,RO
3259823616,3259823871,NO
3259823872,3259824127,IE
-3259824128,3259891711,DE
-3259891712,3259893503,BE
-3259893504,3259893759,EU
-3259893760,3259900866,BE
-3259900867,3259900867,EU
-3259900868,3259957247,BE
+3259824128,3259825919,DE
+3259826176,3259891711,DE
+3259891712,3259957247,BE
3259957248,3259958271,DE
3259958272,3259959295,RU
3259959296,3259960319,UA
@@ -119331,10 +63383,8 @@
3259963392,3259964415,PL
3259964416,3259965439,GB
3259965440,3259966463,RU
-3259966464,3259967487,DE
3259967488,3259968511,RS
3259968512,3259969535,RU
-3259969536,3259970559,FR
3259970560,3259971583,CZ
3259971584,3259972607,IT
3259972608,3259973631,UA
@@ -119351,15 +63401,7 @@
3260021760,3260022271,GR
3260022272,3260022783,NL
3260022784,3260284927,GB
-3260284928,3260288767,RU
-3260288768,3260289023,KZ
-3260289024,3260303935,RU
-3260303936,3260304127,BY
-3260304128,3260322047,RU
-3260322048,3260322303,BY
-3260322304,3260353535,RU
-3260353536,3260353791,AZ
-3260353792,3260415487,RU
+3260284928,3260415487,RU
3260415488,3260415999,BY
3260416000,3260481535,FI
3260481536,3260547071,RU
@@ -119369,23 +63411,16 @@
3260547840,3260548095,PL
3260548096,3260548351,IE
3260548352,3260548607,DK
-3260548608,3260548863,RO
-3260548864,3260549119,CH
3260549120,3260549375,AT
3260549376,3260549631,CH
3260549632,3260549887,DE
-3260549888,3260550143,RU
3260550144,3260550399,PL
3260550400,3260550655,DE
3260550656,3260551167,RU
3260551168,3260553983,DE
3260553984,3260554239,GB
3260554240,3260555263,SE
-3260555264,3260559615,HU
-3260559616,3260559647,RO
-3260559648,3260559711,HU
-3260559712,3260559719,RO
-3260559720,3260563455,HU
+3260555264,3260563455,HU
3260563456,3260571647,GB
3260571648,3260579839,BE
3260579840,3260580351,PL
@@ -119417,7 +63452,6 @@
3260602880,3260603903,UA
3260603904,3260604415,FR
3260604416,3260604927,PL
-3260604928,3260605439,RO
3260605440,3260605951,BG
3260605952,3260606463,NL
3260606464,3260607487,SE
@@ -119429,24 +63463,10 @@
3260610048,3260610559,FR
3260610560,3260611071,RO
3260611072,3260611583,BG
-3260611584,3260612095,RU
3260612096,3260612607,SE
-3260612608,3260613631,FI
-3260613632,3260613887,DE
-3260613888,3260614143,DK
-3260614144,3260626175,FI
-3260626176,3260626431,ES
-3260626432,3260668415,FI
-3260668416,3260668671,ES
-3260668672,3260668927,GB
-3260668928,3260669183,FI
-3260669184,3260669695,DE
-3260669696,3260669951,IT
-3260669952,3260678143,FI
+3260612608,3260678143,FI
3260678144,3260743679,IL
-3260743680,3260800255,IT
-3260800256,3260800271,BE
-3260800272,3260809215,IT
+3260743680,3260809215,IT
3260809216,3260874751,PL
3260874752,3260893439,DK
3260893440,3260894207,SE
@@ -119469,71 +63489,44 @@
3261071360,3261136895,AT
3261136896,3261150143,DE
3261150144,3261150207,US
-3261150208,3261170687,DE
-3261170688,3261170943,CH
-3261170944,3261173987,DE
-3261173988,3261173991,AT
-3261173992,3261174007,DE
-3261174008,3261174015,AT
-3261174016,3261177599,DE
-3261177600,3261177607,AT
-3261177608,3261202431,DE
-3261202432,3261205503,FR
-3261205504,3261205759,EU
-3261205760,3261212671,FR
-3261212672,3261212927,EU
-3261212928,3261213202,FR
-3261213203,3261213203,EU
-3261213204,3261213439,FR
+3261150208,3261202431,DE
+3261202432,3261213439,FR
3261213440,3261213695,AF
-3261213696,3261225503,FR
-3261225504,3261225511,GB
-3261225512,3261239237,FR
-3261239238,3261239238,EU
-3261239239,3261267967,FR
-3261267968,3261280512,DE
-3261280513,3261280513,EU
-3261280514,3261297663,DE
+3261213696,3261267967,FR
+3261267968,3261297663,DE
3261297664,3261297919,RU
3261297920,3261298175,PL
3261298176,3261333503,DE
3261333504,3261399039,FI
3261399040,3261472767,GB
-3261472768,3261503487,RO
-3261503488,3261503935,MD
-3261503936,3261530111,RO
+3261472768,3261530111,RO
3261530112,3261531903,SE
3261531904,3261532159,GB
-3261532160,3261532671,SE
-3261532672,3261532927,US
-3261532928,3261533439,SE
-3261533440,3261533695,US
-3261533696,3261539327,SE
+3261532160,3261534207,SE
+3261534208,3261534463,NL
+3261534464,3261534719,SE
+3261534720,3261534975,US
+3261534976,3261539327,SE
3261539328,3261540351,SG
-3261540352,3261570303,SE
-3261570304,3261570559,IT
-3261570560,3261583103,SE
-3261583104,3261583359,DK
-3261583360,3261584127,SE
-3261584128,3261584383,ES
-3261584384,3261595647,SE
-3261595648,3261661183,NL
+3261540352,3261595647,SE
+3261595648,3261599743,NL
+3261600768,3261627903,NL
+3261628160,3261632511,NL
+3261633536,3261636095,NL
+3261636352,3261643775,NL
+3261644800,3261661183,NL
3261661184,3261669375,RO
3261669376,3261673471,MT
3261673472,3261675519,IT
3261675520,3261675775,LV
3261675776,3261676031,IT
-3261676032,3261676287,GB
-3261676288,3261676543,IT
3261676800,3261677055,IT
3261677056,3261685759,GB
3261685760,3261687807,DE
3261687808,3261689855,RO
-3261689856,3261690351,GB
-3261690352,3261690352,EU
-3261690353,3261690354,SG
-3261690355,3261690355,EU
-3261690356,3261691903,GB
+3261689856,3261690623,GB
+3261690624,3261690879,AU
+3261690880,3261691903,GB
3261691904,3261692997,NL
3261692998,3261692998,US
3261692999,3261694463,NL
@@ -119562,10 +63555,11 @@
3261767680,3261775871,RS
3261775872,3261776383,PL
3261776384,3261777407,RU
-3261777408,3261777663,NL
+3261777408,3261777449,IR
+3261777450,3261777451,NL
+3261777452,3261777663,IR
3261777664,3261777919,GB
3261777920,3261778431,PL
-3261778432,3261778943,RU
3261778944,3261779455,RO
3261779456,3261779967,DE
3261779968,3261780479,UA
@@ -119574,7 +63568,9 @@
3261781504,3261782015,PL
3261782016,3261783039,UA
3261783040,3261784063,GB
-3261784064,3261796351,AT
+3261784064,3261787647,AT
+3261787648,3261788159,FR
+3261788160,3261796351,AT
3261796352,3261796607,GB
3261796608,3261796863,RU
3261796864,3261797119,PL
@@ -119600,10 +63596,11 @@
3261823232,3261823487,NL
3261823488,3261823743,RO
3261823744,3261823999,BE
-3261824000,3261824511,RU
+3261824000,3261824255,RU
3261824512,3261824767,FR
3261824768,3261825023,PT
-3261825024,3261857791,AT
+3261825024,3261837311,AT
+3261839360,3261855743,AT
3261857792,3261923327,CZ
3261923328,3261988863,NL
3261988864,3261989119,SE
@@ -119614,9 +63611,7 @@
3261993728,3261995263,FI
3261995264,3261995519,DE
3261995520,3261995775,PL
-3261995776,3261996031,FI
-3261996032,3261996287,NL
-3261996288,3262005247,FI
+3261995776,3262005247,FI
3262005248,3262005759,PL
3262005760,3262006015,RU
3262006016,3262006271,NL
@@ -119625,39 +63620,38 @@
3262006784,3262007039,SE
3262007040,3262007295,IT
3262007552,3262007807,GR
-3262007808,3262008063,RO
3262008064,3262008319,GB
3262008320,3262008575,PT
3262008576,3262008831,PL
3262008832,3262009087,AT
3262009088,3262009343,UA
-3262009344,3262013439,FI
+3262009344,3262013183,FI
3262013440,3262017535,SE
3262017536,3262018559,FI
3262018560,3262018815,PL
-3262018816,3262021119,FI
+3262018816,3262019071,FI
+3262019328,3262021119,FI
3262021120,3262021375,UA
3262021376,3262021631,PL
3262021632,3262021887,CH
3262021888,3262022143,UA
3262022144,3262022911,FI
3262022912,3262023167,DE
-3262023168,3262023679,FI
3262023680,3262023935,DK
-3262023936,3262027263,FI
+3262023936,3262026239,FI
3262027264,3262027519,TR
3262027520,3262027775,BE
3262027776,3262028287,RU
3262028288,3262028543,FR
3262028544,3262028799,AE
3262028800,3262029823,DE
-3262029824,3262030847,US
+3262029824,3262030847,NL
3262030848,3262031871,FR
3262031872,3262033919,FI
3262033920,3262038015,AX
3262038016,3262038271,FR
3262038272,3262038527,RU
-3262038528,3262038783,GB
+3262038528,3262038783,IL
3262038784,3262039039,NO
3262039040,3262039295,DE
3262039296,3262039551,GB
@@ -119670,7 +63664,6 @@
3262041600,3262041855,DK
3262041856,3262042367,FR
3262042368,3262042623,GB
-3262042624,3262042879,UA
3262042880,3262043135,NL
3262043136,3262043391,RO
3262043392,3262043647,TR
@@ -119692,7 +63685,6 @@
3262050816,3262051071,CH
3262051072,3262051583,GB
3262051584,3262051839,FR
-3262051840,3262052351,DE
3262052352,3262052607,UA
3262052608,3262052863,IL
3262052864,3262053119,GB
@@ -119700,108 +63692,52 @@
3262053376,3262053631,UA
3262053632,3262053887,RU
3262054144,3262054399,RU
-3262054400,3262096127,FI
-3262096128,3262096383,AX
-3262096384,3262099199,FI
-3262099200,3262099455,NL
-3262099456,3262108671,FI
-3262108672,3262108927,RU
-3262108928,3262114047,FI
-3262114048,3262114303,SE
-3262114304,3262115071,FI
-3262115072,3262115327,RU
-3262115328,3262119935,FI
-3262119936,3262120447,AX
-3262120448,3262120703,FI
-3262120704,3262121599,AX
-3262121600,3262121663,FI
-3262121664,3262122007,AX
-3262122008,3262122015,FI
-3262122016,3262122031,AX
-3262122032,3262122039,FI
-3262122040,3262122047,AX
-3262122048,3262122143,FI
-3262122144,3262122159,AX
-3262122160,3262122167,FI
-3262122168,3262122183,AX
-3262122184,3262122199,FI
-3262122200,3262122207,AX
-3262122208,3262122239,FI
-3262122240,3262122367,AX
-3262122368,3262122431,FI
-3262122432,3262122623,AX
-3262122624,3262122631,FI
-3262122632,3262122655,AX
-3262122656,3262122751,FI
-3262122752,3262123007,AX
-3262123008,3262123263,FI
-3262123264,3262123295,AX
-3262123296,3262123311,FI
-3262123312,3262123327,AX
-3262123328,3262123391,FI
-3262123392,3262123519,AX
-3262123520,3262123527,FI
-3262123528,3262123775,AX
-3262123776,3262124031,FI
+3262054400,3262119935,FI
+3262119936,3262122175,AX
+3262122176,3262122183,SE
+3262122184,3262124031,AX
3262124032,3262128127,DE
3262128128,3262136319,GB
-3262136320,3262137599,EU
3262137600,3262137855,DE
-3262137856,3262139391,EU
3262139392,3262140415,GB
3262140416,3262140671,DE
-3262140672,3262141183,EU
3262141184,3262141439,DE
3262141440,3262142463,ES
3262142464,3262142719,DE
-3262142720,3262143487,EU
3262143488,3262143743,GB
-3262143744,3262143999,EU
3262144000,3262144047,DE
-3262144048,3262145023,EU
3262145024,3262145279,DE
-3262145280,3262145551,EU
3262145552,3262145567,DE
-3262145568,3262145615,EU
3262145616,3262145631,DE
-3262145632,3262145663,EU
3262145664,3262145791,DE
3262145792,3262146047,GB
3262146048,3262146815,DE
-3262146816,3262147583,EU
3262147584,3262147839,DE
-3262147840,3262148607,EU
3262148608,3262148863,DE
-3262148864,3262148879,EU
3262148880,3262148919,DE
-3262148920,3262148927,EU
3262148928,3262149119,DE
3262149120,3262149151,FR
3262149152,3262149159,DE
-3262149160,3262149375,FR
-3262149376,3262149631,EU
+3262149168,3262149375,FR
3262149632,3262149887,DE
-3262149888,3262150911,EU
3262150912,3262151047,DE
-3262151048,3262151071,EU
3262151072,3262151103,DE
-3262151104,3262151135,EU
3262151136,3262151151,DE
-3262151152,3262151167,EU
3262151168,3262151423,DE
-3262151424,3262151935,EU
3262151936,3262152191,DE
-3262152192,3262152663,EU
3262152664,3262152671,DE
-3262152672,3262152703,EU
3262152704,3262185471,AT
-3262185472,3262200575,DE
-3262200576,3262200831,EU
-3262200832,3262224895,DE
+3262185472,3262191615,DE
+3262192128,3262192383,DE
+3262192640,3262196479,DE
+3262196736,3262203903,DE
+3262204928,3262224383,DE
3262224896,3262225151,AT
3262225152,3262227711,DE
3262227712,3262227967,RO
-3262227968,3262283775,DE
+3262227968,3262229247,DE
+3262229248,3262229503,NL
+3262229504,3262283775,DE
3262283776,3262284799,RU
3262284800,3262286847,UA
3262286848,3262287871,SE
@@ -119810,9 +63746,7 @@
3262288384,3262288895,IL
3262288896,3262289919,PL
3262289920,3262316543,SE
-3262316544,3262348799,DE
-3262348800,3262349055,NL
-3262349056,3262382079,DE
+3262316544,3262382079,DE
3262382080,3262414847,IT
3262414848,3262415359,DE
3262415360,3262416895,PL
@@ -119824,7 +63758,6 @@
3262419968,3262420479,FR
3262420480,3262420991,CH
3262420992,3262421503,ES
-3262421504,3262422015,DE
3262422016,3262422527,SE
3262422528,3262423039,AT
3262423040,3262423551,GB
@@ -119835,7 +63768,6 @@
3262425088,3262425343,GR
3262425344,3262425599,RU
3262425600,3262426111,UA
-3262426112,3262426623,DE
3262426624,3262427135,GB
3262427136,3262427647,FR
3262427648,3262428159,DK
@@ -119844,7 +63776,6 @@
3262429184,3262429695,ES
3262429696,3262430207,DE
3262430208,3262430719,EE
-3262430720,3262431231,RO
3262431232,3262431743,PL
3262431744,3262432255,UA
3262432256,3262432767,CH
@@ -119855,8 +63786,6 @@
3262434816,3262435839,DE
3262435840,3262436351,CH
3262436352,3262436863,SE
-3262436864,3262437375,GB
-3262437376,3262437887,RO
3262437888,3262438399,FR
3262438400,3262438911,NL
3262438912,3262439423,DK
@@ -119865,13 +63794,11 @@
3262440960,3262441471,IL
3262441472,3262441983,UA
3262441984,3262442495,DE
-3262442496,3262443007,RO
3262443008,3262443519,UA
3262443520,3262444031,ES
3262444032,3262444543,AT
3262444544,3262445055,UA
3262445056,3262445567,RO
-3262445568,3262446079,PL
3262446592,3262447103,PL
3262447104,3262447615,GB
3262447616,3262460415,PT
@@ -119888,2392 +63815,115 @@
3262461824,3262461951,RO
3262461952,3262463999,IQ
3262464000,3262472191,RU
-3262472192,3262472207,DE
-3262472208,3262472211,FR
-3262472212,3262472215,DE
-3262472216,3262472219,NL
-3262472220,3262472223,AT
-3262472224,3262472231,DE
-3262472232,3262472235,AT
-3262472236,3262472247,DE
-3262472248,3262472251,IT
-3262472252,3262472267,DE
-3262472268,3262472271,AT
-3262472272,3262472275,IT
-3262472276,3262472279,BE
-3262472280,3262472311,DE
-3262472312,3262472315,NL
-3262472316,3262472335,DE
-3262472336,3262472339,US
-3262472340,3262472351,DE
-3262472352,3262472355,NL
-3262472356,3262472359,DE
-3262472360,3262472363,NL
-3262472364,3262472367,GB
-3262472368,3262472371,NL
-3262472372,3262472375,FR
-3262472376,3262472379,GB
-3262472380,3262472387,DE
-3262472388,3262472391,FR
-3262472392,3262472395,GB
-3262472396,3262472399,DE
-3262472400,3262472403,NL
-3262472404,3262472407,DE
-3262472408,3262472411,US
-3262472412,3262472415,DE
-3262472416,3262472419,ES
-3262472420,3262472423,DE
-3262472424,3262472427,BE
-3262472428,3262472431,CH
-3262472432,3262472435,AE
-3262472436,3262472443,DE
-3262472444,3262472447,LU
-3262472448,3262472459,DE
-3262472460,3262472463,CH
-3262472464,3262472479,DE
-3262472480,3262472483,IT
-3262472484,3262472495,DE
-3262472496,3262472499,CH
-3262472500,3262472511,DE
-3262472512,3262472515,CA
-3262472516,3262472519,GB
-3262472520,3262472527,DE
-3262472528,3262472531,CH
-3262472532,3262472539,DE
-3262472540,3262472543,US
-3262472544,3262472547,DE
-3262472548,3262472551,NL
-3262472552,3262472555,HU
-3262472556,3262472563,DE
-3262472564,3262472567,DK
-3262472568,3262472575,DE
-3262472576,3262472579,CA
-3262472580,3262472583,AT
-3262472584,3262472591,US
-3262472592,3262472595,DE
-3262472596,3262472599,CH
-3262472600,3262472603,FR
-3262472604,3262472607,CH
-3262472608,3262472615,US
-3262472616,3262472619,CA
-3262472620,3262472623,TR
-3262472624,3262472631,DE
-3262472632,3262472635,ES
-3262472636,3262472655,DE
-3262472656,3262472659,GB
-3262472660,3262472663,IT
-3262472664,3262472667,ES
-3262472668,3262472675,DE
-3262472676,3262472679,FR
-3262472680,3262472683,CL
-3262472684,3262472691,US
-3262472692,3262472695,DE
-3262472696,3262472699,IT
-3262472700,3262472703,AT
-3262472704,3262472707,US
-3262472708,3262472711,DE
-3262472712,3262472715,US
-3262472716,3262472727,NL
-3262472728,3262472735,DE
+3262472192,3262472735,DE
3262472736,3262472739,IT
-3262472740,3262472743,PT
-3262472744,3262472747,DE
-3262472748,3262472751,GB
-3262472752,3262472763,DE
-3262472764,3262472767,CA
-3262472768,3262472771,DE
-3262472772,3262472775,US
-3262472776,3262472779,DE
-3262472780,3262472783,US
-3262472784,3262472791,DE
-3262472792,3262472795,GB
-3262472796,3262472799,AT
-3262472800,3262472807,DE
-3262472808,3262472811,CH
-3262472812,3262472819,DE
-3262472820,3262472823,CH
-3262472824,3262472827,US
-3262472828,3262472835,DE
-3262472836,3262472839,DK
-3262472840,3262472843,DE
-3262472844,3262472847,AT
-3262472848,3262472851,DE
-3262472852,3262472855,IT
-3262472856,3262472859,FR
-3262472860,3262472863,US
-3262472864,3262472867,FR
-3262472868,3262472871,GB
-3262472872,3262472875,DE
-3262472876,3262472879,FR
-3262472880,3262472883,DE
-3262472884,3262472891,CA
-3262472892,3262472899,DE
-3262472900,3262472903,AT
-3262472904,3262472907,US
-3262472908,3262472911,DE
-3262472912,3262472915,IT
-3262472916,3262472923,DE
-3262472924,3262472927,IT
-3262472928,3262472931,NL
-3262472932,3262472935,LB
-3262472936,3262472939,DE
-3262472940,3262472943,CH
-3262472944,3262472947,PT
-3262472948,3262472951,LU
-3262472952,3262472955,DE
-3262472956,3262472959,CA
-3262472960,3262472963,DE
-3262472964,3262472967,AT
-3262472968,3262472975,DE
-3262472976,3262472979,LU
-3262472980,3262472983,AT
-3262472984,3262472987,PT
-3262472988,3262472991,US
-3262472992,3262472995,DE
-3262472996,3262472999,FR
-3262473000,3262473003,HU
-3262473004,3262473007,DE
-3262473008,3262473011,US
-3262473012,3262473015,DE
-3262473016,3262473019,AR
-3262473020,3262473023,US
-3262473024,3262473027,ES
-3262473028,3262473031,BM
-3262473032,3262473035,DE
-3262473036,3262473039,IT
-3262473040,3262473043,GB
-3262473044,3262473047,US
-3262473048,3262473051,DE
-3262473052,3262473055,AT
-3262473056,3262473075,DE
-3262473076,3262473079,GB
-3262473080,3262473083,DE
-3262473084,3262473087,US
-3262473088,3262473091,NL
-3262473092,3262473099,DE
-3262473100,3262473103,BE
-3262473104,3262473107,DE
-3262473108,3262473115,ES
-3262473116,3262473119,DE
-3262473120,3262473127,FR
-3262473128,3262473135,DE
-3262473136,3262473139,US
-3262473140,3262473143,ES
-3262473144,3262473151,DE
-3262473152,3262473155,FR
-3262473156,3262473159,IT
-3262473160,3262473163,NL
-3262473164,3262473167,CH
-3262473168,3262473171,DE
-3262473172,3262473175,US
-3262473176,3262473195,DE
-3262473196,3262473199,AT
-3262473200,3262473203,ES
-3262473204,3262473207,US
-3262473208,3262473211,DE
-3262473212,3262473215,FR
-3262473216,3262473323,JP
-3262473324,3262473327,KR
-3262473328,3262473471,JP
-3262473472,3262473473,DE
-3262473474,3262473478,US
-3262473479,3262473480,CA
-3262473481,3262473483,US
-3262473484,3262473484,VE
-3262473485,3262473485,US
-3262473486,3262473486,CA
-3262473487,3262473516,US
-3262473517,3262473517,CN
-3262473518,3262473526,US
-3262473527,3262473527,CN
-3262473528,3262473538,US
-3262473539,3262473539,DE
-3262473540,3262473540,US
-3262473541,3262473541,DE
-3262473542,3262473543,US
-3262473544,3262473544,CA
-3262473545,3262473548,US
-3262473549,3262473549,CA
-3262473550,3262473557,US
-3262473558,3262473558,DE
-3262473559,3262473567,US
-3262473568,3262473568,CA
-3262473569,3262473570,US
-3262473571,3262473571,DE
-3262473572,3262473582,US
-3262473583,3262473583,CA
-3262473584,3262473586,US
-3262473587,3262473587,CA
-3262473588,3262473658,US
-3262473659,3262473659,DE
-3262473660,3262473663,US
-3262473664,3262473664,CA
-3262473665,3262473688,US
-3262473689,3262473689,CA
-3262473690,3262473691,AR
-3262473692,3262473692,CA
-3262473693,3262473729,DE
-3262473730,3262473735,US
-3262473736,3262473736,CA
-3262473737,3262473771,US
-3262473772,3262473772,DE
-3262473773,3262473785,US
-3262473786,3262473855,DE
+3262472740,3262473476,DE
+3262473477,3262473477,US
+3262473478,3262473596,DE
+3262473597,3262473597,US
+3262473598,3262473685,DE
+3262473686,3262473686,US
+3262473687,3262473730,DE
+3262473731,3262473731,US
+3262473732,3262473732,DE
+3262473733,3262473733,US
+3262473734,3262473752,DE
+3262473753,3262473753,US
+3262473754,3262473777,DE
+3262473778,3262473778,US
+3262473779,3262473781,DE
+3262473782,3262473782,US
+3262473783,3262473855,DE
3262473856,3262473859,US
-3262473860,3262473903,DE
-3262473904,3262473907,US
-3262473908,3262473931,DE
-3262473932,3262473935,US
-3262473936,3262473963,DE
-3262473964,3262473967,US
-3262473968,3262473971,DE
-3262473972,3262473983,US
-3262473984,3262473985,DE
-3262473986,3262473986,TW
-3262473987,3262473987,IN
-3262473988,3262473988,SG
-3262473989,3262473989,IN
-3262473990,3262473990,SG
-3262473991,3262473991,DE
-3262473992,3262473992,SG
-3262473993,3262473993,IN
-3262473994,3262473995,TW
-3262473996,3262473996,MY
-3262473997,3262473998,ID
-3262473999,3262473999,TW
-3262474000,3262474000,SG
-3262474001,3262474001,TW
-3262474002,3262474002,MY
-3262474003,3262474003,TW
-3262474004,3262474004,SG
-3262474005,3262474005,TW
-3262474006,3262474007,SG
-3262474008,3262474009,TW
-3262474010,3262474010,SG
-3262474011,3262474011,ID
-3262474012,3262474013,SG
-3262474014,3262474014,HK
-3262474015,3262474016,SG
-3262474017,3262474018,MY
-3262474019,3262474026,SG
-3262474027,3262474027,CN
-3262474028,3262474030,SG
-3262474031,3262474031,IN
-3262474032,3262474032,MY
-3262474033,3262474033,SG
-3262474034,3262474034,MY
-3262474035,3262474035,SG
-3262474036,3262474036,MY
-3262474037,3262474037,SG
-3262474038,3262474038,MY
-3262474039,3262474039,TW
-3262474040,3262474041,MY
-3262474042,3262474042,CN
-3262474043,3262474043,SG
+3262473860,3262474043,DE
3262474044,3262474044,GB
-3262474045,3262474048,SG
-3262474049,3262474049,IN
-3262474050,3262474061,SG
-3262474062,3262474063,CN
-3262474064,3262474064,TW
-3262474065,3262474065,IN
-3262474066,3262474066,SG
-3262474067,3262474067,MY
-3262474068,3262474068,SG
-3262474069,3262474069,MY
-3262474070,3262474070,SG
-3262474071,3262474071,TW
-3262474072,3262474072,IN
-3262474073,3262474075,SG
-3262474076,3262474076,MY
-3262474077,3262474077,SG
-3262474078,3262474078,IN
-3262474079,3262474079,MY
-3262474080,3262474083,SG
-3262474084,3262474084,TW
-3262474085,3262474087,SG
-3262474088,3262474088,MY
-3262474089,3262474089,SG
-3262474090,3262474091,MY
-3262474092,3262474094,SG
-3262474095,3262474095,HK
-3262474096,3262474097,SG
-3262474098,3262474098,MY
-3262474099,3262474102,SG
-3262474103,3262474103,MY
-3262474104,3262474104,CN
-3262474105,3262474105,IN
-3262474106,3262474106,MY
-3262474107,3262474107,CN
-3262474108,3262474108,HK
-3262474109,3262474110,MY
-3262474111,3262474111,TH
-3262474112,3262474112,SG
-3262474113,3262474113,PH
-3262474114,3262474114,IN
+3262474045,3262474051,DE
+3262474052,3262474052,SG
+3262474053,3262474060,DE
+3262474061,3262474061,SG
+3262474062,3262474114,DE
3262474115,3262474115,SG
-3262474116,3262474116,TW
-3262474117,3262474117,IN
-3262474118,3262474118,TH
-3262474119,3262474119,TW
-3262474120,3262474120,BN
-3262474121,3262474121,TW
-3262474122,3262474122,SG
-3262474123,3262474125,MY
-3262474126,3262474126,IN
-3262474127,3262474128,SG
-3262474129,3262474130,MY
-3262474131,3262474131,IN
-3262474132,3262474133,MY
-3262474134,3262474134,CN
-3262474135,3262474136,SG
-3262474137,3262474137,TW
-3262474138,3262474139,CN
-3262474140,3262474140,TW
-3262474141,3262474142,SG
-3262474143,3262474143,PH
-3262474144,3262474150,SG
-3262474151,3262474151,MY
-3262474152,3262474152,SG
-3262474153,3262474153,IN
-3262474154,3262474154,SG
-3262474155,3262474155,MY
-3262474156,3262474156,IN
+3262474116,3262474145,DE
+3262474146,3262474146,SG
+3262474147,3262474156,DE
3262474157,3262474157,SG
-3262474158,3262474159,MY
-3262474160,3262474162,SG
-3262474163,3262474163,MY
-3262474164,3262474164,IN
-3262474165,3262474165,CN
-3262474166,3262474166,SG
-3262474167,3262474167,HK
-3262474168,3262474168,TW
-3262474169,3262474169,DE
-3262474170,3262474170,SG
-3262474171,3262474171,MY
-3262474172,3262474172,SG
-3262474173,3262474173,CN
-3262474174,3262474174,TW
-3262474175,3262474175,SG
-3262474176,3262474176,MY
+3262474158,3262474176,DE
3262474177,3262474177,SG
-3262474178,3262474178,TW
-3262474179,3262474179,CN
-3262474180,3262474180,MY
-3262474181,3262474181,SG
-3262474182,3262474182,MY
-3262474183,3262474185,SG
-3262474186,3262474186,MY
-3262474187,3262474187,SG
-3262474188,3262474188,MY
-3262474189,3262474189,SG
-3262474190,3262474190,CN
-3262474191,3262474192,SG
-3262474193,3262474193,PH
-3262474194,3262474194,SG
-3262474195,3262474195,MY
-3262474196,3262474196,IN
-3262474197,3262474198,SG
-3262474199,3262474199,CN
-3262474200,3262474200,MY
-3262474201,3262474201,SG
-3262474202,3262474203,CN
-3262474204,3262474204,IN
+3262474178,3262474183,DE
+3262474184,3262474184,SG
+3262474185,3262474204,DE
3262474205,3262474205,SG
-3262474206,3262474206,IN
-3262474207,3262474207,MY
-3262474208,3262474208,SG
-3262474209,3262474209,MY
-3262474210,3262474210,TW
-3262474211,3262474211,SG
-3262474212,3262474212,MY
-3262474213,3262474213,SG
-3262474214,3262474214,CN
-3262474215,3262474215,IN
-3262474216,3262474216,SG
-3262474217,3262474217,MY
-3262474218,3262474218,SG
-3262474219,3262474219,MY
-3262474220,3262474222,IN
-3262474223,3262474223,SG
-3262474224,3262474224,MY
-3262474225,3262474225,SG
-3262474226,3262474226,MY
-3262474227,3262474227,IN
-3262474228,3262474228,SG
-3262474229,3262474230,IN
-3262474231,3262474231,SG
-3262474232,3262474234,IN
-3262474235,3262474236,MY
-3262474237,3262474238,SG
-3262474239,3262474239,DE
-3262474240,3262474255,AU
-3262474256,3262474259,NZ
-3262474260,3262474263,AU
-3262474264,3262474267,NZ
-3262474268,3262474271,AU
-3262474272,3262474275,NZ
-3262474276,3262474367,AU
-3262474368,3262474371,NZ
-3262474372,3262474395,AU
-3262474396,3262474399,NZ
-3262474400,3262474463,AU
-3262474464,3262474467,NZ
-3262474468,3262474495,AU
-3262474496,3262474631,DE
-3262474632,3262474635,DK
-3262474636,3262474791,DE
-3262474792,3262474815,JP
-3262474816,3262474895,DE
-3262474896,3262475007,JP
-3262475008,3262475009,DE
-3262475010,3262475023,US
-3262475024,3262475024,CO
-3262475025,3262475025,US
-3262475026,3262475027,DE
-3262475028,3262475029,US
-3262475030,3262475033,DE
-3262475034,3262475036,US
-3262475037,3262475037,DE
-3262475038,3262475042,US
-3262475043,3262475043,DE
-3262475044,3262475044,US
-3262475045,3262475045,BR
-3262475046,3262475065,US
-3262475066,3262475068,MX
-3262475069,3262475072,US
-3262475073,3262475075,BR
-3262475076,3262475076,US
-3262475077,3262475077,BR
-3262475078,3262475079,US
-3262475080,3262475080,CA
-3262475081,3262475081,US
-3262475082,3262475082,BR
-3262475083,3262475083,US
-3262475084,3262475084,MX
-3262475085,3262475085,BR
-3262475086,3262475087,US
-3262475088,3262475088,BR
-3262475089,3262475090,US
-3262475091,3262475092,DE
-3262475093,3262475094,BR
-3262475095,3262475095,MX
-3262475096,3262475140,US
-3262475141,3262475141,BR
-3262475142,3262475167,US
-3262475168,3262475168,DE
-3262475169,3262475174,US
-3262475175,3262475175,DE
-3262475176,3262475185,US
-3262475186,3262475186,DE
-3262475187,3262475189,US
-3262475190,3262475190,MX
-3262475191,3262475191,BR
-3262475192,3262475192,MX
-3262475193,3262475201,US
-3262475202,3262475205,BR
-3262475206,3262475209,US
-3262475210,3262475210,BR
-3262475211,3262475213,US
-3262475214,3262475214,DE
-3262475215,3262475222,US
-3262475223,3262475263,DE
-3262475264,3262475267,MU
-3262475268,3262475271,US
-3262475272,3262475275,IT
-3262475276,3262475279,US
-3262475280,3262475283,DE
-3262475284,3262475287,NL
-3262475288,3262475295,DE
-3262475296,3262475303,NL
-3262475304,3262475307,FR
-3262475308,3262475311,AR
-3262475312,3262475315,FR
-3262475316,3262475319,SE
-3262475320,3262475323,DE
-3262475324,3262475327,MX
-3262475328,3262475331,US
-3262475332,3262475335,BR
-3262475336,3262475339,DE
-3262475340,3262475343,FR
-3262475344,3262475347,CH
-3262475348,3262475351,DE
-3262475352,3262475355,ES
-3262475356,3262475359,DE
-3262475360,3262475363,IT
-3262475364,3262475367,DE
-3262475368,3262475371,FR
-3262475372,3262475375,NL
-3262475376,3262475383,DE
-3262475384,3262475387,US
-3262475388,3262475395,AT
-3262475396,3262475399,NL
-3262475400,3262475403,US
-3262475404,3262475407,SE
-3262475408,3262475415,DE
-3262475416,3262475419,CH
-3262475420,3262475423,DE
-3262475424,3262475427,US
-3262475428,3262475431,ES
-3262475432,3262475435,IT
-3262475436,3262475439,GB
-3262475440,3262475443,DE
-3262475444,3262475447,US
-3262475448,3262475451,FR
-3262475452,3262475459,DE
-3262475460,3262475463,FR
-3262475464,3262475479,DE
+3262474206,3262474236,DE
+3262474237,3262474237,SG
+3262474238,3262474347,DE
+3262474348,3262474351,AU
+3262474352,3262474435,DE
+3262474436,3262474439,AU
+3262474440,3262474475,DE
+3262474476,3262474479,AU
+3262474480,3262475057,DE
+3262475058,3262475058,US
+3262475059,3262475109,DE
+3262475110,3262475110,US
+3262475111,3262475205,DE
+3262475206,3262475206,US
+3262475207,3262475479,DE
3262475480,3262475483,US
-3262475484,3262475487,IT
-3262475488,3262475491,MX
-3262475492,3262475495,CH
-3262475496,3262475499,NL
-3262475500,3262475503,DE
-3262475504,3262475507,FR
-3262475508,3262475511,DE
-3262475512,3262475515,US
-3262475516,3262475519,DE
-3262475520,3262475527,US
-3262475528,3262475531,DE
-3262475532,3262475559,US
-3262475560,3262475575,DE
-3262475576,3262475591,US
-3262475592,3262475595,BR
-3262475596,3262475607,US
-3262475608,3262475611,IE
-3262475612,3262475631,DE
-3262475632,3262475635,US
-3262475636,3262475639,DE
-3262475640,3262475683,US
-3262475684,3262475687,BR
-3262475688,3262475691,DE
-3262475692,3262475695,BR
-3262475696,3262475715,US
-3262475716,3262475719,DE
-3262475720,3262475723,BR
-3262475724,3262475775,US
-3262475776,3262475783,DE
-3262475784,3262475787,BE
-3262475788,3262475791,DE
-3262475792,3262475807,AE
-3262475808,3262475811,US
-3262475812,3262475815,IE
-3262475816,3262475819,FR
-3262475820,3262475823,DE
-3262475824,3262475839,RO
-3262475840,3262475855,DE
-3262475856,3262475871,TR
-3262475872,3262475875,BE
-3262475876,3262475879,NL
-3262475880,3262475883,PL
-3262475884,3262475887,BE
-3262475888,3262475891,DE
-3262475892,3262475895,SA
-3262475896,3262475903,CY
-3262475904,3262475919,GR
-3262475920,3262475935,DE
-3262475936,3262475951,FR
-3262475952,3262475963,US
-3262475964,3262475967,HU
-3262475968,3262475975,DE
-3262475976,3262475983,BG
-3262475984,3262475991,SG
-3262475992,3262476015,DE
-3262476016,3262476019,ES
-3262476020,3262476023,FR
-3262476024,3262476027,DE
-3262476028,3262476031,FR
-3262476032,3262476039,DE
-3262476040,3262476043,CH
-3262476044,3262476047,DE
-3262476048,3262476055,IL
-3262476056,3262476059,PE
-3262476060,3262476063,US
-3262476064,3262476067,DE
-3262476068,3262476071,PL
-3262476072,3262476075,US
-3262476076,3262476079,DE
-3262476080,3262476083,FR
-3262476084,3262476087,DE
-3262476088,3262476091,DK
-3262476092,3262476095,NL
-3262476096,3262476103,US
-3262476104,3262476107,DE
-3262476108,3262476111,BE
-3262476112,3262476115,NL
-3262476116,3262476119,DE
-3262476120,3262476123,FR
-3262476124,3262476127,DE
-3262476128,3262476131,GB
-3262476132,3262476135,AR
-3262476136,3262476139,US
-3262476140,3262476143,BE
-3262476144,3262476147,CH
-3262476148,3262476155,US
-3262476156,3262476159,BE
-3262476160,3262476163,GR
-3262476164,3262476171,DE
-3262476172,3262476175,GB
-3262476176,3262476179,ES
-3262476180,3262476183,DE
-3262476184,3262476187,AT
-3262476188,3262476191,PT
-3262476192,3262476195,DE
-3262476196,3262476199,US
-3262476200,3262476203,GB
-3262476204,3262476207,NA
-3262476208,3262476211,US
-3262476212,3262476215,CL
-3262476216,3262476223,FR
-3262476224,3262476227,GR
-3262476228,3262476231,SE
-3262476232,3262476235,FR
+3262475484,3262475523,DE
+3262475524,3262475527,US
+3262475528,3262475555,DE
+3262475556,3262475559,US
+3262475560,3262476235,DE
3262476236,3262476239,US
-3262476240,3262476243,IT
-3262476244,3262476247,ES
-3262476248,3262476251,NL
-3262476252,3262476255,DE
-3262476256,3262476259,US
-3262476260,3262476267,DE
-3262476268,3262476271,US
-3262476272,3262476275,DE
+3262476240,3262476275,DE
3262476276,3262476279,CA
-3262476280,3262476283,BE
-3262476284,3262476291,DE
-3262476292,3262476295,ZA
-3262476296,3262476299,US
-3262476300,3262476303,DO
-3262476304,3262476307,US
-3262476308,3262476315,DE
-3262476316,3262476319,BE
-3262476320,3262476323,DE
-3262476324,3262476327,IT
-3262476328,3262476331,NL
-3262476332,3262476339,DE
-3262476340,3262476343,ES
-3262476344,3262476351,DE
-3262476352,3262476355,AR
-3262476356,3262476363,US
-3262476364,3262476367,PT
-3262476368,3262476371,US
-3262476372,3262476375,DE
-3262476376,3262476387,US
-3262476388,3262476391,SK
-3262476392,3262476395,DE
-3262476396,3262476399,AT
-3262476400,3262476403,ES
-3262476404,3262476411,DE
-3262476412,3262476415,US
-3262476416,3262476419,DE
-3262476420,3262476423,CH
-3262476424,3262476427,ES
-3262476428,3262476431,US
-3262476432,3262476435,IT
-3262476436,3262476439,AT
-3262476440,3262476443,DE
-3262476444,3262476447,AT
-3262476448,3262476455,DE
-3262476456,3262476459,CA
-3262476460,3262476463,DK
-3262476464,3262476467,SK
-3262476468,3262476471,DE
+3262476280,3262476471,DE
3262476472,3262476475,CA
-3262476476,3262476483,US
-3262476484,3262476487,DE
-3262476488,3262476491,US
-3262476492,3262476495,BE
-3262476496,3262476499,US
-3262476500,3262476503,DE
-3262476504,3262476507,CH
-3262476508,3262476511,DE
-3262476512,3262476515,US
-3262476516,3262476519,DE
-3262476520,3262476523,GB
-3262476524,3262476527,MX
-3262476528,3262476531,DE
-3262476532,3262476535,IL
-3262476536,3262476539,US
-3262476540,3262476543,DE
-3262476544,3262476547,DK
-3262476548,3262476551,AR
-3262476552,3262476555,IT
-3262476556,3262476559,FR
-3262476560,3262476567,DE
-3262476568,3262476571,US
-3262476572,3262476575,DE
-3262476576,3262476587,US
-3262476588,3262476591,ES
+3262476476,3262476591,DE
3262476592,3262476595,GB
-3262476596,3262476603,DE
-3262476604,3262476607,NL
-3262476608,3262476611,SK
-3262476612,3262476615,GB
-3262476616,3262476619,TR
-3262476620,3262476623,NL
-3262476624,3262476627,US
-3262476628,3262476635,DE
-3262476636,3262476639,DK
-3262476640,3262476643,DE
-3262476644,3262476647,ZA
-3262476648,3262476651,US
-3262476652,3262476655,FR
-3262476656,3262476667,US
-3262476668,3262476671,GB
-3262476672,3262476675,SE
-3262476676,3262476679,DE
-3262476680,3262476683,NL
-3262476684,3262476687,IT
-3262476688,3262476691,DE
-3262476692,3262476695,FR
-3262476696,3262476699,ES
-3262476700,3262476707,DE
-3262476708,3262476715,US
-3262476716,3262476719,FR
-3262476720,3262476723,IT
-3262476724,3262476727,FR
-3262476728,3262476731,US
-3262476732,3262476735,DE
-3262476736,3262476739,CA
-3262476740,3262476743,DE
-3262476744,3262476747,CH
-3262476748,3262476751,BE
-3262476752,3262476755,ES
-3262476756,3262476759,DE
-3262476760,3262476763,US
-3262476764,3262476767,ES
-3262476768,3262476771,DE
-3262476772,3262476779,US
-3262476780,3262476783,DE
-3262476784,3262476787,IT
-3262476788,3262476791,US
-3262476792,3262476795,ES
-3262476796,3262476799,DE
-3262476800,3262476803,CA
-3262476804,3262476807,TR
-3262476808,3262476827,DE
-3262476828,3262476831,LU
-3262476832,3262476839,DE
-3262476840,3262476843,IT
-3262476844,3262476847,DE
-3262476848,3262476851,CH
-3262476852,3262476855,US
-3262476856,3262476859,ES
-3262476860,3262476863,DE
-3262476864,3262476867,US
-3262476868,3262476883,DE
-3262476884,3262476887,FR
-3262476888,3262476891,DE
-3262476892,3262476895,HU
-3262476896,3262476899,SK
-3262476900,3262476903,FR
-3262476904,3262476907,DE
-3262476908,3262476911,NL
-3262476912,3262476915,CH
-3262476916,3262476919,DE
-3262476920,3262476923,US
-3262476924,3262476927,AT
-3262476928,3262476935,DE
-3262476936,3262476939,AT
-3262476940,3262476951,DE
-3262476952,3262476955,NL
-3262476956,3262476971,DE
-3262476972,3262476975,US
-3262476976,3262476979,BE
-3262476980,3262476995,DE
-3262476996,3262476999,IT
-3262477000,3262477003,GB
-3262477004,3262477007,DE
-3262477008,3262477011,CA
-3262477012,3262477015,DE
-3262477016,3262477019,CH
-3262477020,3262477023,DE
-3262477024,3262477035,FR
-3262477036,3262477039,DK
-3262477040,3262477043,US
-3262477044,3262477047,GB
-3262477048,3262477059,DE
-3262477060,3262477063,US
-3262477064,3262477067,DE
-3262477068,3262477071,AT
-3262477072,3262477075,PT
-3262477076,3262477083,FR
-3262477084,3262477087,NL
-3262477088,3262477091,DE
-3262477092,3262477095,BE
-3262477096,3262477107,DE
-3262477108,3262477111,ES
-3262477112,3262477131,DE
-3262477132,3262477135,SK
-3262477136,3262477147,DE
-3262477148,3262477151,FR
-3262477152,3262477155,CH
-3262477156,3262477159,ES
-3262477160,3262477163,US
-3262477164,3262477167,FR
-3262477168,3262477171,NL
-3262477172,3262477175,DE
-3262477176,3262477187,US
-3262477188,3262477191,IT
-3262477192,3262477195,GB
-3262477196,3262477199,PL
-3262477200,3262477203,GB
-3262477204,3262477207,US
-3262477208,3262477211,ES
-3262477212,3262477215,AT
-3262477216,3262477219,US
-3262477220,3262477223,KW
-3262477224,3262477227,BE
-3262477228,3262477231,GB
-3262477232,3262477239,DE
-3262477240,3262477243,CA
-3262477244,3262477247,US
-3262477248,3262477251,AR
-3262477252,3262477255,ES
-3262477256,3262477259,DE
-3262477260,3262477263,GB
-3262477264,3262477267,GR
-3262477268,3262477271,NL
-3262477272,3262477275,US
-3262477276,3262477279,NL
-3262477280,3262477283,DE
-3262477284,3262477287,FR
-3262477288,3262477291,BM
-3262477292,3262477295,US
-3262477296,3262477299,DK
-3262477300,3262477303,IT
-3262477304,3262477307,FR
-3262477308,3262477311,DE
+3262476596,3262477311,DE
3262477312,3262477315,ES
-3262477316,3262477319,HU
-3262477320,3262477327,US
-3262477328,3262477331,HU
-3262477332,3262477335,DE
-3262477336,3262477339,CA
-3262477340,3262477343,US
-3262477344,3262477347,CH
-3262477348,3262477355,DE
-3262477356,3262477359,PL
-3262477360,3262477363,LU
-3262477364,3262477367,ES
+3262477316,3262477367,DE
3262477368,3262477371,US
-3262477372,3262477375,FR
-3262477376,3262477379,AT
-3262477380,3262477383,US
-3262477384,3262477387,FR
-3262477388,3262477399,DE
-3262477400,3262477403,CH
-3262477404,3262477407,DE
-3262477408,3262477411,US
-3262477412,3262477415,SA
-3262477416,3262477419,DK
-3262477420,3262477427,DE
-3262477428,3262477431,US
-3262477432,3262477439,DE
-3262477440,3262477443,CH
-3262477444,3262477447,BE
-3262477448,3262477451,AR
-3262477452,3262477455,PT
-3262477456,3262477467,DE
-3262477468,3262477471,AT
-3262477472,3262477475,HU
-3262477476,3262477479,FR
-3262477480,3262477483,SE
-3262477484,3262477487,NL
-3262477488,3262477499,DE
-3262477500,3262477503,ES
-3262477504,3262477507,FR
-3262477508,3262477511,CH
-3262477512,3262477519,US
-3262477520,3262477523,DE
-3262477524,3262477527,IT
-3262477528,3262477543,DE
-3262477544,3262477547,US
-3262477548,3262477551,DE
-3262477552,3262477555,BR
-3262477556,3262477559,US
-3262477560,3262477563,CA
-3262477564,3262477571,BE
-3262477572,3262477575,NL
-3262477576,3262477579,DE
-3262477580,3262477583,NO
-3262477584,3262477587,CA
-3262477588,3262477591,FR
-3262477592,3262477595,GB
-3262477596,3262477599,CH
-3262477600,3262477603,DE
-3262477604,3262477607,IT
-3262477608,3262477611,DE
-3262477612,3262477615,US
-3262477616,3262477619,IT
-3262477620,3262477623,DE
-3262477624,3262477627,FR
-3262477628,3262477631,CH
-3262477632,3262477635,AT
-3262477636,3262477639,VE
-3262477640,3262477643,DE
-3262477644,3262477647,GB
-3262477648,3262477655,DE
-3262477656,3262477659,NL
-3262477660,3262477671,US
-3262477672,3262477675,NL
-3262477676,3262477687,DE
-3262477688,3262477691,FR
-3262477692,3262477695,DE
-3262477696,3262477699,NL
-3262477700,3262477703,FR
-3262477704,3262477707,IT
-3262477708,3262477711,GB
-3262477712,3262477727,DE
-3262477728,3262477731,AT
-3262477732,3262477735,NL
-3262477736,3262477739,BR
-3262477740,3262477743,NL
-3262477744,3262477751,CH
-3262477752,3262477759,DE
-3262477760,3262477763,US
-3262477764,3262477767,VE
-3262477768,3262477771,DE
+3262477372,3262477771,DE
3262477772,3262477775,CA
-3262477776,3262477779,CZ
-3262477780,3262477783,GB
-3262477784,3262477787,DE
-3262477788,3262477791,US
-3262477792,3262477795,GB
-3262477796,3262477799,FR
-3262477800,3262477803,BE
-3262477804,3262477807,CH
-3262477808,3262477811,CA
-3262477812,3262477819,US
-3262477820,3262477823,DE
-3262477824,3262477827,GB
-3262477828,3262477831,US
-3262477832,3262477835,DE
-3262477836,3262477839,ES
-3262477840,3262477843,GB
-3262477844,3262477847,DE
-3262477848,3262477851,GB
-3262477852,3262477855,DE
-3262477856,3262477859,CA
+3262477776,3262477859,DE
3262477860,3262477863,US
-3262477864,3262477867,TR
-3262477868,3262477871,HU
-3262477872,3262477883,DE
-3262477884,3262477891,US
-3262477892,3262477895,IT
-3262477896,3262477899,US
-3262477900,3262477903,DE
-3262477904,3262477907,GB
-3262477908,3262477911,CH
-3262477912,3262477915,US
-3262477916,3262477919,DE
-3262477920,3262477923,US
-3262477924,3262477927,HU
-3262477928,3262477931,DE
-3262477932,3262477935,US
-3262477936,3262477939,DE
-3262477940,3262477943,CA
-3262477944,3262477955,DE
-3262477956,3262477959,US
-3262477960,3262477963,CA
-3262477964,3262477967,DE
-3262477968,3262477971,IT
-3262477972,3262477987,DE
-3262477988,3262477991,NL
-3262477992,3262477999,DE
-3262478000,3262478003,US
-3262478004,3262478007,FR
-3262478008,3262478011,IT
-3262478012,3262478015,PE
-3262478016,3262478019,CH
-3262478020,3262478027,DE
-3262478028,3262478031,SE
-3262478032,3262478035,AT
-3262478036,3262478039,DE
-3262478040,3262478043,NL
-3262478044,3262478047,IS
-3262478048,3262478055,DE
-3262478056,3262478063,CH
-3262478064,3262478067,DE
-3262478068,3262478071,KE
-3262478072,3262478081,DE
-3262478082,3262478082,ES
-3262478083,3262478083,SA
-3262478084,3262478084,TR
-3262478085,3262478085,FR
-3262478086,3262478088,DE
-3262478089,3262478089,AT
-3262478090,3262478090,DE
-3262478091,3262478091,HU
-3262478092,3262478092,PT
-3262478093,3262478093,SA
-3262478094,3262478094,PT
-3262478095,3262478095,DE
-3262478096,3262478096,PL
-3262478097,3262478097,KE
-3262478098,3262478098,TR
-3262478099,3262478099,DE
-3262478100,3262478100,TR
-3262478101,3262478101,ZW
-3262478102,3262478102,TR
-3262478103,3262478103,DE
-3262478104,3262478104,TR
-3262478105,3262478105,PL
-3262478106,3262478106,IT
-3262478107,3262478107,TR
-3262478108,3262478108,DE
-3262478109,3262478109,AE
-3262478110,3262478113,DE
-3262478114,3262478114,TR
-3262478115,3262478115,DE
-3262478116,3262478116,NO
-3262478117,3262478117,NA
-3262478118,3262478118,DE
-3262478119,3262478119,SA
-3262478120,3262478120,NA
-3262478121,3262478121,AO
-3262478122,3262478122,NA
-3262478123,3262478123,CY
-3262478124,3262478124,DE
-3262478125,3262478125,PT
-3262478126,3262478126,CY
-3262478127,3262478127,GR
-3262478128,3262478128,CH
-3262478129,3262478129,HU
-3262478130,3262478130,FR
-3262478131,3262478131,SK
-3262478132,3262478132,ES
-3262478133,3262478133,TR
-3262478134,3262478134,ES
-3262478135,3262478135,TR
-3262478136,3262478137,HU
-3262478138,3262478138,TR
-3262478139,3262478139,DE
-3262478140,3262478140,FR
-3262478141,3262478143,TR
-3262478144,3262478145,DE
-3262478146,3262478146,GR
-3262478147,3262478147,FR
-3262478148,3262478148,KZ
-3262478149,3262478149,UA
-3262478150,3262478151,DE
-3262478152,3262478152,PL
-3262478153,3262478153,TR
-3262478154,3262478154,DE
-3262478155,3262478155,CU
-3262478156,3262478156,TR
-3262478157,3262478157,DE
-3262478158,3262478158,IT
-3262478159,3262478159,IL
-3262478160,3262478160,TR
-3262478161,3262478161,ZW
-3262478162,3262478162,SA
-3262478163,3262478163,FR
-3262478164,3262478164,ZW
-3262478165,3262478165,SK
-3262478166,3262478166,TR
-3262478167,3262478167,KZ
-3262478168,3262478168,ES
-3262478169,3262478169,PL
-3262478170,3262478171,FR
-3262478172,3262478172,GR
-3262478173,3262478174,TR
-3262478175,3262478175,DE
-3262478176,3262478176,TR
-3262478177,3262478177,DE
-3262478178,3262478178,MZ
-3262478179,3262478180,TR
-3262478181,3262478181,CN
-3262478182,3262478182,ES
-3262478183,3262478183,PL
-3262478184,3262478184,MZ
-3262478185,3262478185,PL
-3262478186,3262478186,ES
-3262478187,3262478187,PT
-3262478188,3262478188,TR
-3262478189,3262478189,NA
-3262478190,3262478191,DE
-3262478192,3262478192,ZA
-3262478193,3262478194,NA
-3262478195,3262478211,DE
-3262478212,3262478215,NL
-3262478216,3262478219,FR
-3262478220,3262478223,SE
-3262478224,3262478227,GB
-3262478228,3262478231,ES
-3262478232,3262478235,FR
-3262478236,3262478239,IT
-3262478240,3262478243,FR
-3262478244,3262478247,DE
-3262478248,3262478251,IT
-3262478252,3262478255,CH
-3262478256,3262478259,ES
-3262478260,3262478263,DE
-3262478264,3262478267,IT
-3262478268,3262478271,ES
-3262478272,3262478275,CH
-3262478276,3262478299,DE
-3262478300,3262478303,ES
-3262478304,3262478307,PT
+3262477864,3262478307,DE
3262478308,3262478311,ES
3262478312,3262478319,DE
3262478320,3262478323,GB
-3262478324,3262478327,BE
-3262478328,3262478331,ES
-3262478332,3262478335,GB
-3262478336,3262478337,DE
-3262478338,3262478338,PL
-3262478339,3262478343,DE
-3262478344,3262478344,IT
-3262478345,3262478345,CH
-3262478346,3262478346,PT
-3262478347,3262478347,DE
-3262478348,3262478348,DK
-3262478349,3262478349,BE
-3262478350,3262478350,AT
-3262478351,3262478351,TR
-3262478352,3262478352,CH
-3262478353,3262478353,DK
-3262478354,3262478355,DE
-3262478356,3262478356,FR
-3262478357,3262478358,DE
-3262478359,3262478360,FR
-3262478361,3262478361,DE
-3262478362,3262478362,FR
-3262478363,3262478363,CH
-3262478364,3262478364,PT
-3262478365,3262478366,DE
-3262478367,3262478367,HU
-3262478368,3262478368,DE
-3262478369,3262478369,NO
-3262478370,3262478370,CH
-3262478371,3262478371,DE
-3262478372,3262478373,CH
-3262478374,3262478374,PT
-3262478375,3262478376,FR
-3262478377,3262478377,DE
-3262478378,3262478378,CH
-3262478379,3262478379,DE
-3262478380,3262478381,FR
-3262478382,3262478382,AE
-3262478383,3262478383,DE
-3262478384,3262478384,AE
-3262478385,3262478385,ZA
-3262478386,3262478386,DE
-3262478387,3262478387,IT
-3262478388,3262478388,DE
-3262478389,3262478389,CH
+3262478324,3262478389,DE
3262478390,3262478390,ES
-3262478391,3262478391,HU
-3262478392,3262478393,DE
-3262478394,3262478394,IT
-3262478395,3262478396,DE
-3262478397,3262478397,PT
-3262478398,3262478398,HU
-3262478399,3262478399,DE
-3262478400,3262478400,GB
-3262478401,3262478401,DE
-3262478402,3262478402,IT
-3262478403,3262478403,CZ
-3262478404,3262478404,FI
-3262478405,3262478406,GB
-3262478407,3262478412,DE
-3262478413,3262478413,ES
-3262478414,3262478414,PL
-3262478415,3262478415,SE
-3262478416,3262478416,SA
-3262478417,3262478417,DE
-3262478418,3262478418,AT
-3262478419,3262478419,FR
-3262478420,3262478421,DE
-3262478422,3262478422,CH
-3262478423,3262478423,SA
-3262478424,3262478424,FR
-3262478425,3262478425,IT
-3262478426,3262478426,NO
-3262478427,3262478428,FR
-3262478429,3262478429,PT
-3262478430,3262478430,CH
-3262478431,3262478431,HU
-3262478432,3262478432,RE
-3262478433,3262478433,AT
-3262478434,3262478434,PT
-3262478435,3262478435,IT
-3262478436,3262478437,DE
-3262478438,3262478438,ZA
-3262478439,3262478439,DE
-3262478440,3262478440,SE
-3262478441,3262478441,FR
-3262478442,3262478442,IT
-3262478443,3262478443,DE
-3262478444,3262478444,AT
-3262478445,3262478445,PT
-3262478446,3262478449,DE
-3262478450,3262478450,TR
-3262478451,3262478451,FR
-3262478452,3262478452,IL
-3262478453,3262478453,DE
-3262478454,3262478454,SE
-3262478455,3262478455,IT
-3262478456,3262478456,DE
-3262478457,3262478457,GB
-3262478458,3262478458,HU
-3262478459,3262478459,ES
-3262478460,3262478460,CY
-3262478461,3262478465,DE
-3262478466,3262478466,FR
-3262478467,3262478467,HU
-3262478468,3262478468,DE
-3262478469,3262478469,FR
-3262478470,3262478470,DE
-3262478471,3262478471,ES
-3262478472,3262478472,DE
-3262478473,3262478473,FR
-3262478474,3262478474,HU
-3262478475,3262478476,DE
-3262478477,3262478478,CH
-3262478479,3262478479,DK
-3262478480,3262478480,DE
-3262478481,3262478481,DK
-3262478482,3262478482,IT
-3262478483,3262478483,FR
-3262478484,3262478484,DE
-3262478485,3262478485,CH
-3262478486,3262478487,FR
-3262478488,3262478488,HU
-3262478489,3262478489,HR
-3262478490,3262478490,SE
-3262478491,3262478491,DE
-3262478492,3262478492,CH
-3262478493,3262478493,DE
+3262478391,3262478404,DE
+3262478405,3262478405,GB
+3262478406,3262478493,DE
3262478494,3262478494,FR
-3262478495,3262478495,DE
-3262478496,3262478496,PT
-3262478497,3262478500,DE
-3262478501,3262478501,CH
-3262478502,3262478502,SE
-3262478503,3262478503,ZA
-3262478504,3262478504,FR
-3262478505,3262478505,IT
-3262478506,3262478506,PT
-3262478507,3262478507,IT
-3262478508,3262478508,PT
-3262478509,3262478509,NL
-3262478510,3262478513,DE
-3262478514,3262478514,SE
-3262478515,3262478515,PT
-3262478516,3262478519,DE
-3262478520,3262478520,CH
-3262478521,3262478521,NL
-3262478522,3262478522,DE
-3262478523,3262478523,FR
-3262478524,3262478524,ES
-3262478525,3262478526,DE
-3262478527,3262478527,ES
-3262478528,3262478528,NL
-3262478529,3262478529,ES
-3262478530,3262478530,DE
-3262478531,3262478531,FR
-3262478532,3262478536,DE
-3262478537,3262478537,HU
-3262478538,3262478538,DE
-3262478539,3262478539,FI
-3262478540,3262478540,HU
-3262478541,3262478542,DE
-3262478543,3262478543,AT
-3262478544,3262478544,NL
-3262478545,3262478546,DE
-3262478547,3262478547,FR
-3262478548,3262478548,ES
-3262478549,3262478549,FR
-3262478550,3262478550,DE
-3262478551,3262478551,PL
-3262478552,3262478552,HU
-3262478553,3262478553,PL
-3262478554,3262478554,SE
-3262478555,3262478555,DE
-3262478556,3262478556,GB
-3262478557,3262478557,DE
+3262478495,3262478557,DE
3262478558,3262478558,IT
-3262478559,3262478560,DE
-3262478561,3262478562,FR
-3262478563,3262478563,DK
-3262478564,3262478564,RU
-3262478565,3262478566,FR
-3262478567,3262478567,HU
-3262478568,3262478568,DE
-3262478569,3262478569,TR
-3262478570,3262478570,FR
-3262478571,3262478594,DE
-3262478595,3262478595,CH
-3262478596,3262478596,PT
-3262478597,3262478597,SE
-3262478598,3262478599,DE
-3262478600,3262478600,IT
-3262478601,3262478601,KW
-3262478602,3262478602,FR
-3262478603,3262478604,DE
-3262478605,3262478605,ES
-3262478606,3262478606,FI
-3262478607,3262478607,GR
-3262478608,3262478608,DE
-3262478609,3262478609,IT
-3262478610,3262478610,ES
-3262478611,3262478611,HU
-3262478612,3262478620,DE
-3262478621,3262478621,SE
-3262478622,3262478622,TR
-3262478623,3262478623,ES
-3262478624,3262478624,FR
-3262478625,3262478625,DE
-3262478626,3262478626,HU
-3262478627,3262478627,DE
-3262478628,3262478628,HU
-3262478629,3262478629,DE
-3262478630,3262478630,FR
-3262478631,3262478631,PL
-3262478632,3262478632,CW
-3262478633,3262478633,AT
-3262478634,3262478634,ES
-3262478635,3262478635,SA
-3262478636,3262478636,CH
-3262478637,3262478637,GB
-3262478638,3262478639,DE
-3262478640,3262478640,PT
-3262478641,3262478641,DE
-3262478642,3262478642,CH
-3262478643,3262478643,DE
-3262478644,3262478644,ES
-3262478645,3262478645,DE
-3262478646,3262478646,AT
-3262478647,3262478647,FR
-3262478648,3262478648,PT
-3262478649,3262478649,CZ
-3262478650,3262478650,ES
-3262478651,3262478651,FR
-3262478652,3262478653,ES
-3262478654,3262478655,DE
-3262478656,3262478656,PL
-3262478657,3262478657,DE
-3262478658,3262478658,ES
-3262478659,3262478659,DE
-3262478660,3262478660,SK
-3262478661,3262478661,BE
-3262478662,3262478662,TR
-3262478663,3262478663,AT
-3262478664,3262478664,ES
-3262478665,3262478665,DE
-3262478666,3262478666,AT
-3262478667,3262478667,DE
-3262478668,3262478668,IT
-3262478669,3262478670,DE
-3262478671,3262478671,FR
-3262478672,3262478673,DE
-3262478674,3262478674,SK
-3262478675,3262478675,PL
-3262478676,3262478676,CH
-3262478677,3262478677,HU
-3262478678,3262478678,IT
-3262478679,3262478679,FR
-3262478680,3262478680,GB
-3262478681,3262478681,ES
-3262478682,3262478682,CH
-3262478683,3262478683,IT
-3262478684,3262478684,BE
-3262478685,3262478685,DE
-3262478686,3262478686,FR
-3262478687,3262478687,ES
-3262478688,3262478688,TR
-3262478689,3262478689,GB
-3262478690,3262478690,AT
-3262478691,3262478691,CH
-3262478692,3262478692,PL
-3262478693,3262478693,TR
-3262478694,3262478694,CH
-3262478695,3262478695,DE
-3262478696,3262478696,LI
+3262478559,3262478696,DE
3262478697,3262478697,ES
-3262478698,3262478698,IT
-3262478699,3262478699,ES
-3262478700,3262478700,IT
-3262478701,3262478701,DE
-3262478702,3262478702,CH
-3262478703,3262478703,FR
-3262478704,3262478704,IT
-3262478705,3262478706,PT
-3262478707,3262478707,ES
-3262478708,3262478721,DE
-3262478722,3262478722,FR
-3262478723,3262478724,DE
-3262478725,3262478725,IT
-3262478726,3262478726,FR
-3262478727,3262478727,AT
-3262478728,3262478728,NL
-3262478729,3262478729,SK
-3262478730,3262478730,IT
-3262478731,3262478731,PT
-3262478732,3262478732,PL
-3262478733,3262478733,SK
-3262478734,3262478735,DE
-3262478736,3262478736,HU
-3262478737,3262478737,ES
-3262478738,3262478738,SK
-3262478739,3262478739,SE
-3262478740,3262478740,FR
-3262478741,3262478741,DK
-3262478742,3262478742,CH
-3262478743,3262478743,FR
-3262478744,3262478744,GR
-3262478745,3262478745,IT
-3262478746,3262478746,SE
-3262478747,3262478748,DE
-3262478749,3262478751,FR
-3262478752,3262478752,PT
-3262478753,3262478753,IE
-3262478754,3262478754,DE
-3262478755,3262478755,DK
-3262478756,3262478756,DE
-3262478757,3262478757,AT
-3262478758,3262478758,FR
-3262478759,3262478759,CH
-3262478760,3262478760,TR
-3262478761,3262478761,HU
-3262478762,3262478762,CY
-3262478763,3262478763,ES
-3262478764,3262478764,DE
-3262478765,3262478766,ES
-3262478767,3262478767,PT
-3262478768,3262478768,PL
-3262478769,3262478769,ES
-3262478770,3262478770,IT
-3262478771,3262478771,SK
-3262478772,3262478772,FR
-3262478773,3262478773,CZ
-3262478774,3262478774,DE
-3262478775,3262478775,CH
-3262478776,3262478776,ES
-3262478777,3262478778,IT
-3262478779,3262478779,ES
-3262478780,3262478780,PT
-3262478781,3262478781,PL
-3262478782,3262478782,MA
-3262478783,3262478783,ES
-3262478784,3262478785,TR
-3262478786,3262478786,DE
-3262478787,3262478787,PT
-3262478788,3262478788,NO
-3262478789,3262478789,GR
-3262478790,3262478790,DE
-3262478791,3262478791,GB
-3262478792,3262478792,PT
-3262478793,3262478793,FR
-3262478794,3262478794,PT
-3262478795,3262478795,PL
-3262478796,3262478796,HU
-3262478797,3262478797,CY
-3262478798,3262478798,IT
-3262478799,3262478799,HU
-3262478800,3262478800,PL
-3262478801,3262478801,DE
-3262478802,3262478802,IT
-3262478803,3262478803,ES
-3262478804,3262478804,DE
-3262478805,3262478806,GR
-3262478807,3262478807,CH
-3262478808,3262478808,HU
-3262478809,3262478809,TR
-3262478810,3262478810,CH
-3262478811,3262478811,FR
-3262478812,3262478812,PL
-3262478813,3262478813,LB
-3262478814,3262478851,DE
-3262478852,3262478853,CH
-3262478854,3262478855,DE
-3262478856,3262478856,FR
-3262478857,3262478857,LI
-3262478858,3262478860,DE
-3262478861,3262478861,FR
-3262478862,3262478862,DE
-3262478863,3262478863,AT
-3262478864,3262478864,NL
-3262478865,3262478865,DE
-3262478866,3262478866,CH
-3262478867,3262478867,GB
-3262478868,3262478868,IT
-3262478869,3262478870,FR
-3262478871,3262478872,DE
-3262478873,3262478873,NL
-3262478874,3262478874,AT
-3262478875,3262478875,DE
-3262478876,3262478876,GB
-3262478877,3262478877,DE
-3262478878,3262478878,AT
-3262478879,3262478881,DE
-3262478882,3262478882,GR
-3262478883,3262478886,DE
-3262478887,3262478887,NL
-3262478888,3262478888,DK
-3262478889,3262478890,FR
-3262478891,3262478893,DE
-3262478894,3262478894,AT
-3262478895,3262478895,DE
-3262478896,3262478896,NL
-3262478897,3262478897,FR
-3262478898,3262478898,GB
-3262478899,3262478899,SE
-3262478900,3262478900,GB
-3262478901,3262478901,DE
-3262478902,3262478902,IT
-3262478903,3262478904,DE
-3262478905,3262478905,SE
-3262478906,3262478909,DE
-3262478910,3262478910,DK
-3262478911,3262478911,BH
-3262478912,3262478912,NL
-3262478913,3262478913,FR
-3262478914,3262478914,DE
-3262478915,3262478915,NL
-3262478916,3262478920,DE
-3262478921,3262478921,AT
-3262478922,3262478924,DE
-3262478925,3262478925,NL
-3262478926,3262478926,AT
-3262478927,3262478927,DE
-3262478928,3262478928,DK
-3262478929,3262478929,GB
-3262478930,3262478931,DE
-3262478932,3262478932,CH
-3262478933,3262478935,DE
-3262478936,3262478937,CH
-3262478938,3262478938,NL
-3262478939,3262478939,GB
-3262478940,3262478940,NL
-3262478941,3262478941,DE
-3262478942,3262478942,BE
-3262478943,3262478943,SI
-3262478944,3262478945,DE
-3262478946,3262478946,IE
-3262478947,3262478947,DE
-3262478948,3262478948,IT
-3262478949,3262478949,SE
-3262478950,3262478954,DE
-3262478955,3262478955,FR
-3262478956,3262478956,DE
-3262478957,3262478957,PT
-3262478958,3262478958,SE
-3262478959,3262478961,NL
-3262478962,3262478963,DE
-3262478964,3262478964,CH
-3262478965,3262478966,DE
-3262478967,3262478967,NL
-3262478968,3262478968,ES
-3262478969,3262478969,DE
-3262478970,3262478970,BE
-3262478971,3262478971,DE
-3262478972,3262478972,NO
-3262478973,3262478973,CH
-3262478974,3262478974,GB
-3262478975,3262478980,DE
-3262478981,3262478981,IT
-3262478982,3262478982,DE
-3262478983,3262478983,NL
-3262478984,3262478984,CH
-3262478985,3262478985,PT
-3262478986,3262478986,DE
-3262478987,3262478987,GB
-3262478988,3262478988,IE
-3262478989,3262478989,NL
-3262478990,3262478990,DE
-3262478991,3262478992,FR
-3262478993,3262478993,NL
-3262478994,3262478997,DE
-3262478998,3262478998,GB
+3262478698,3262478998,DE
3262478999,3262478999,AT
3262479000,3262479000,CH
-3262479001,3262479001,AT
-3262479002,3262479002,DE
-3262479003,3262479003,FR
-3262479004,3262479007,DE
-3262479008,3262479008,NL
-3262479009,3262479009,NO
-3262479010,3262479011,NL
-3262479012,3262479012,DE
-3262479013,3262479013,NL
-3262479014,3262479014,DE
-3262479015,3262479015,CH
-3262479016,3262479016,SE
-3262479017,3262479017,DK
-3262479018,3262479018,IT
-3262479019,3262479019,DE
-3262479020,3262479022,CH
-3262479023,3262479024,DE
-3262479025,3262479025,NL
-3262479026,3262479027,DE
-3262479028,3262479028,CH
-3262479029,3262479029,DE
-3262479030,3262479030,ES
-3262479031,3262479031,AT
-3262479032,3262479036,DE
-3262479037,3262479037,AT
-3262479038,3262479038,DK
-3262479039,3262479039,DE
-3262479040,3262479040,NL
-3262479041,3262479041,CH
-3262479042,3262479042,DK
-3262479043,3262479043,FR
-3262479044,3262479044,DE
-3262479045,3262479045,IT
-3262479046,3262479046,DE
-3262479047,3262479047,AT
-3262479048,3262479048,NL
-3262479049,3262479050,DE
-3262479051,3262479051,GB
-3262479052,3262479052,DE
-3262479053,3262479053,NL
-3262479054,3262479056,DE
-3262479057,3262479057,GB
-3262479058,3262479058,FR
-3262479059,3262479059,IT
-3262479060,3262479062,DE
-3262479063,3262479063,CH
-3262479064,3262479064,FR
-3262479065,3262479065,DE
-3262479066,3262479066,IT
-3262479067,3262479067,DE
-3262479068,3262479068,ES
-3262479069,3262479069,FR
-3262479070,3262479070,ES
-3262479071,3262479074,DE
-3262479075,3262479075,CH
-3262479076,3262479076,BE
-3262479077,3262479077,DE
-3262479078,3262479078,IT
-3262479079,3262479079,ES
-3262479080,3262479080,LU
-3262479081,3262479081,CH
-3262479082,3262479082,IT
-3262479083,3262479083,NL
-3262479084,3262479084,CH
-3262479085,3262479085,IT
-3262479086,3262479086,FR
-3262479087,3262479088,DE
-3262479089,3262479089,CH
-3262479090,3262479090,FR
-3262479091,3262479091,DE
-3262479092,3262479092,IT
-3262479093,3262479093,FR
-3262479094,3262479095,GB
-3262479096,3262479096,ES
-3262479097,3262479097,FR
-3262479098,3262479098,GB
-3262479099,3262479099,DE
-3262479100,3262479100,DK
-3262479101,3262479101,CH
-3262479102,3262479102,IT
-3262479103,3262479105,DE
-3262479106,3262479106,ES
-3262479107,3262479107,IT
-3262479108,3262479108,AT
-3262479109,3262479109,FR
-3262479110,3262479110,DE
-3262479111,3262479111,LU
-3262479112,3262479115,DE
-3262479116,3262479116,IT
-3262479117,3262479117,CH
-3262479118,3262479118,GR
-3262479119,3262479120,DE
-3262479121,3262479121,ES
-3262479122,3262479122,FR
-3262479123,3262479123,DE
-3262479124,3262479124,FR
-3262479125,3262479125,IL
-3262479126,3262479130,DE
-3262479131,3262479131,NL
-3262479132,3262479132,AT
-3262479133,3262479133,NL
-3262479134,3262479134,ES
-3262479135,3262479139,DE
-3262479140,3262479140,NL
-3262479141,3262479142,DE
-3262479143,3262479143,GB
-3262479144,3262479144,CH
-3262479145,3262479145,NO
-3262479146,3262479146,DE
-3262479147,3262479147,IT
-3262479148,3262479149,ES
-3262479150,3262479151,DE
-3262479152,3262479152,NL
-3262479153,3262479153,DE
-3262479154,3262479154,FR
-3262479155,3262479155,NL
-3262479156,3262479156,DE
-3262479157,3262479157,ES
-3262479158,3262479158,DE
-3262479159,3262479159,FR
-3262479160,3262479160,DE
-3262479161,3262479161,FR
-3262479162,3262479162,DE
-3262479163,3262479163,FR
-3262479164,3262479164,DE
-3262479165,3262479167,CH
-3262479168,3262479168,DE
-3262479169,3262479169,IT
-3262479170,3262479170,CH
-3262479171,3262479171,ES
-3262479172,3262479174,DE
-3262479175,3262479175,FR
-3262479176,3262479178,DE
-3262479179,3262479179,AT
-3262479180,3262479180,NL
-3262479181,3262479181,DE
-3262479182,3262479182,LU
-3262479183,3262479183,DK
-3262479184,3262479184,CH
+3262479001,3262479184,DE
3262479185,3262479185,IT
-3262479186,3262479186,ES
-3262479187,3262479187,DE
-3262479188,3262479188,CH
-3262479189,3262479189,ES
-3262479190,3262479191,IT
-3262479192,3262479192,FR
-3262479193,3262479193,GB
-3262479194,3262479194,DE
-3262479195,3262479195,BE
-3262479196,3262479196,DE
-3262479197,3262479197,GB
-3262479198,3262479199,DE
-3262479200,3262479200,NL
-3262479201,3262479201,HU
-3262479202,3262479202,FR
-3262479203,3262479208,DE
-3262479209,3262479209,ES
-3262479210,3262479212,DE
-3262479213,3262479213,NO
-3262479214,3262479214,DE
-3262479215,3262479215,IT
-3262479216,3262479219,DE
-3262479220,3262479220,NL
-3262479221,3262479223,DE
-3262479224,3262479224,BE
-3262479225,3262479225,FR
-3262479226,3262479226,DE
-3262479227,3262479227,NL
-3262479228,3262479228,DK
-3262479229,3262479233,DE
-3262479234,3262479234,GB
-3262479235,3262479236,DE
-3262479237,3262479238,NL
-3262479239,3262479239,FR
-3262479240,3262479240,DE
-3262479241,3262479242,FR
-3262479243,3262479243,NL
-3262479244,3262479244,IT
-3262479245,3262479249,DE
-3262479250,3262479250,AT
-3262479251,3262479252,DE
-3262479253,3262479253,NL
-3262479254,3262479254,FR
-3262479255,3262479255,DE
-3262479256,3262479256,IT
-3262479257,3262479257,US
-3262479258,3262479261,DE
-3262479262,3262479262,CH
-3262479263,3262479264,DE
-3262479265,3262479265,CH
-3262479266,3262479266,FR
-3262479267,3262479267,DE
+3262479186,3262479267,DE
3262479268,3262479268,NL
-3262479269,3262479269,DE
-3262479270,3262479271,DK
-3262479272,3262479272,IT
-3262479273,3262479273,DE
-3262479274,3262479274,ES
-3262479275,3262479275,IT
-3262479276,3262479276,DE
-3262479277,3262479277,NL
-3262479278,3262479278,DE
-3262479279,3262479279,ES
-3262479280,3262479280,DE
-3262479281,3262479281,FR
-3262479282,3262479282,DE
-3262479283,3262479283,IT
-3262479284,3262479284,NO
-3262479285,3262479289,DE
-3262479290,3262479290,BE
-3262479291,3262479293,DE
-3262479294,3262479294,FR
-3262479295,3262479295,DE
-3262479296,3262479296,IT
-3262479297,3262479300,DE
-3262479301,3262479301,ES
-3262479302,3262479303,DE
-3262479304,3262479304,AT
-3262479305,3262479307,DE
-3262479308,3262479308,DK
-3262479309,3262479309,SE
-3262479310,3262479312,DE
-3262479313,3262479313,FR
-3262479314,3262479318,DE
-3262479319,3262479319,DK
-3262479320,3262479320,DE
-3262479321,3262479321,GR
-3262479322,3262479323,CH
+3262479269,3262479323,DE
3262479324,3262479324,NL
-3262479325,3262479325,ES
-3262479326,3262479327,DE
-3262479328,3262479328,DK
-3262479329,3262479329,ES
-3262479330,3262479330,NL
-3262479331,3262479332,FR
-3262479333,3262479333,HU
-3262479334,3262479334,NL
-3262479335,3262479335,DE
-3262479336,3262479336,FR
-3262479337,3262479337,ES
-3262479338,3262479338,DE
-3262479339,3262479339,NL
-3262479340,3262479340,CH
-3262479341,3262479341,DE
-3262479342,3262479342,PT
-3262479343,3262479343,NO
-3262479344,3262479344,NL
-3262479345,3262479345,DE
-3262479346,3262479346,DK
-3262479347,3262479347,NO
-3262479348,3262479350,IT
-3262479351,3262479351,DE
-3262479352,3262479352,IT
-3262479353,3262479353,CH
-3262479354,3262479355,DE
-3262479356,3262479356,CH
-3262479357,3262479357,FR
-3262479358,3262479361,DE
-3262479362,3262479362,PT
-3262479363,3262479366,DE
-3262479367,3262479367,CH
-3262479368,3262479368,DE
-3262479369,3262479369,FR
-3262479370,3262479370,CH
-3262479371,3262479371,GB
-3262479372,3262479372,DE
-3262479373,3262479373,IT
-3262479374,3262479374,DE
-3262479375,3262479375,NL
-3262479376,3262479377,FR
-3262479378,3262479378,DE
-3262479379,3262479379,CH
-3262479380,3262479380,AT
-3262479381,3262479381,FR
-3262479382,3262479385,DE
-3262479386,3262479386,NL
-3262479387,3262479387,DK
-3262479388,3262479389,DE
-3262479390,3262479390,DK
-3262479391,3262479391,NO
-3262479392,3262479393,DE
-3262479394,3262479394,FR
-3262479395,3262479395,NL
-3262479396,3262479396,CH
-3262479397,3262479397,IT
-3262479398,3262479399,DE
-3262479400,3262479400,NL
-3262479401,3262479402,DE
-3262479403,3262479403,GB
-3262479404,3262479404,DE
-3262479405,3262479405,IE
-3262479406,3262479406,GB
-3262479407,3262479410,DE
-3262479411,3262479411,ES
-3262479412,3262479413,DE
-3262479414,3262479414,CH
-3262479415,3262479415,DE
-3262479416,3262479416,DK
-3262479417,3262479419,DE
-3262479420,3262479420,ES
-3262479421,3262479421,DE
-3262479422,3262479422,SE
-3262479423,3262479426,DE
-3262479427,3262479427,IT
-3262479428,3262479429,FR
-3262479430,3262479430,GB
-3262479431,3262479433,DE
-3262479434,3262479434,IT
-3262479435,3262479437,DE
-3262479438,3262479438,IT
-3262479439,3262479439,DE
-3262479440,3262479440,AT
-3262479441,3262479441,DK
-3262479442,3262479442,IT
-3262479443,3262479443,GR
-3262479444,3262479444,ES
-3262479445,3262479445,DE
-3262479446,3262479446,IT
-3262479447,3262479448,DE
-3262479449,3262479449,GB
-3262479450,3262479452,DE
-3262479453,3262479453,CH
-3262479454,3262479455,DE
-3262479456,3262479456,IT
-3262479457,3262479462,DE
-3262479463,3262479463,IT
-3262479464,3262479464,NL
-3262479465,3262479465,DE
-3262479466,3262479466,GB
-3262479467,3262479467,CH
-3262479468,3262479469,DE
-3262479470,3262479471,GB
-3262479472,3262479472,DE
-3262479473,3262479473,CH
-3262479474,3262479474,BE
-3262479475,3262479475,CH
-3262479476,3262479476,GB
-3262479477,3262479477,BE
-3262479478,3262479478,IT
-3262479479,3262479480,DE
-3262479481,3262479481,LI
-3262479482,3262479482,IT
-3262479483,3262479483,DE
-3262479484,3262479484,AT
-3262479485,3262479489,DE
-3262479490,3262479490,IT
-3262479491,3262479492,DE
-3262479493,3262479493,CH
-3262479494,3262479494,DE
-3262479495,3262479495,BE
-3262479496,3262479498,DE
-3262479499,3262479499,ES
-3262479500,3262479502,IT
-3262479503,3262479503,DE
-3262479504,3262479504,GB
-3262479505,3262479507,DE
-3262479508,3262479508,HU
-3262479509,3262479509,FR
-3262479510,3262479513,DE
-3262479514,3262479514,FR
-3262479515,3262479515,ES
-3262479516,3262479517,DE
-3262479518,3262479518,GB
-3262479519,3262479519,GR
-3262479520,3262479521,DE
-3262479522,3262479522,CH
-3262479523,3262479526,DE
-3262479527,3262479528,NL
-3262479529,3262479529,DE
-3262479530,3262479530,BE
-3262479531,3262479535,DE
-3262479536,3262479536,GB
-3262479537,3262479538,DE
-3262479539,3262479539,IT
-3262479540,3262479540,DE
-3262479541,3262479541,CH
-3262479542,3262479543,DE
-3262479544,3262479544,IT
-3262479545,3262479545,BE
-3262479546,3262479546,GB
-3262479547,3262479547,AT
-3262479548,3262479548,CH
-3262479549,3262479549,IT
-3262479550,3262479552,DE
-3262479553,3262479553,IL
-3262479554,3262479554,DK
-3262479555,3262479555,FR
-3262479556,3262479556,IE
-3262479557,3262479558,DE
-3262479559,3262479559,SE
-3262479560,3262479560,DE
-3262479561,3262479561,BE
-3262479562,3262479562,GB
-3262479563,3262479563,DE
-3262479564,3262479564,GB
-3262479565,3262479565,SE
-3262479566,3262479566,NL
-3262479567,3262479567,CH
-3262479568,3262479568,NO
-3262479569,3262479573,DE
-3262479574,3262479574,CH
-3262479575,3262479575,DE
-3262479576,3262479576,NL
-3262479577,3262479577,FR
-3262479578,3262479578,DE
-3262479579,3262479579,ZA
-3262479580,3262479580,DE
-3262479581,3262479581,IT
-3262479582,3262479583,DE
-3262479584,3262479584,NL
-3262479585,3262479585,DE
-3262479586,3262479586,GR
-3262479587,3262479588,DE
-3262479589,3262479589,IT
-3262479590,3262479590,GB
-3262479591,3262479591,NL
-3262479592,3262479592,DE
-3262479593,3262479593,FR
-3262479594,3262479594,DE
-3262479595,3262479596,FR
-3262479597,3262479598,DE
-3262479599,3262479600,IT
-3262479601,3262479601,DE
-3262479602,3262479602,GB
-3262479603,3262479604,DE
-3262479605,3262479605,SE
-3262479606,3262479606,FR
-3262479607,3262479607,NL
-3262479608,3262479609,DE
-3262479610,3262479610,SI
-3262479611,3262479611,DE
-3262479612,3262479612,ES
-3262479613,3262479613,NL
-3262479614,3262479617,DE
-3262479618,3262479618,NO
-3262479619,3262479619,ES
-3262479620,3262479620,GB
-3262479621,3262479622,DE
-3262479623,3262479623,CH
-3262479624,3262479624,ES
-3262479625,3262479625,NL
-3262479626,3262479626,AT
-3262479627,3262479628,DE
-3262479629,3262479629,SI
-3262479630,3262479630,NL
-3262479631,3262479631,HU
-3262479632,3262479632,DE
-3262479633,3262479633,LU
-3262479634,3262479634,DE
-3262479635,3262479636,GB
-3262479637,3262479637,ES
-3262479638,3262479638,DE
-3262479639,3262479639,AT
-3262479640,3262479640,FR
-3262479641,3262479641,IT
-3262479642,3262479642,GB
-3262479643,3262479643,DE
-3262479644,3262479644,NL
-3262479645,3262479645,DE
-3262479646,3262479646,GB
-3262479647,3262479647,DE
-3262479648,3262479648,NO
-3262479649,3262479653,DE
-3262479654,3262479654,ES
+3262479325,3262479427,DE
+3262479428,3262479428,FR
+3262479429,3262479654,DE
3262479655,3262479655,NL
-3262479656,3262479656,CH
-3262479657,3262479657,NL
-3262479658,3262479658,DE
-3262479659,3262479659,NL
-3262479660,3262479660,PT
-3262479661,3262479662,FR
-3262479663,3262479664,DE
-3262479665,3262479665,DK
-3262479666,3262479667,DE
-3262479668,3262479668,NL
-3262479669,3262479669,IT
-3262479670,3262479670,DK
-3262479671,3262479671,IT
-3262479672,3262479673,DE
-3262479674,3262479674,BE
-3262479675,3262479676,DE
-3262479677,3262479677,ES
-3262479678,3262479678,IT
-3262479679,3262479679,AT
-3262479680,3262479680,IT
-3262479681,3262479681,DE
-3262479682,3262479682,IT
-3262479683,3262479683,HU
-3262479684,3262479685,DE
-3262479686,3262479687,FR
-3262479688,3262479688,DE
-3262479689,3262479689,NL
-3262479690,3262479690,LU
-3262479691,3262479691,DE
-3262479692,3262479692,LU
-3262479693,3262479693,DE
-3262479694,3262479694,CH
-3262479695,3262479695,ES
-3262479696,3262479696,CH
-3262479697,3262479697,GB
-3262479698,3262479698,FR
-3262479699,3262479699,NL
-3262479700,3262479700,DE
-3262479701,3262479701,NL
-3262479702,3262479702,AT
-3262479703,3262479703,FR
-3262479704,3262479707,DE
-3262479708,3262479708,CH
-3262479709,3262479709,NL
-3262479710,3262479711,DE
-3262479712,3262479712,GB
-3262479713,3262479713,DE
-3262479714,3262479714,AT
-3262479715,3262479715,ES
-3262479716,3262479716,DE
-3262479717,3262479717,BE
-3262479718,3262479720,DE
-3262479721,3262479721,AT
-3262479722,3262479724,DE
-3262479725,3262479725,AT
-3262479726,3262479727,DE
-3262479728,3262479728,BE
-3262479729,3262479730,ES
-3262479731,3262479731,CH
-3262479732,3262479732,IT
-3262479733,3262479734,DE
-3262479735,3262479736,CH
-3262479737,3262479737,DE
-3262479738,3262479738,AT
-3262479739,3262479739,DK
-3262479740,3262479740,DE
-3262479741,3262479741,NL
-3262479742,3262479742,FR
-3262479743,3262479745,DE
-3262479746,3262479746,GB
-3262479747,3262479747,CH
-3262479748,3262479748,DE
-3262479749,3262479749,FR
-3262479750,3262479750,AT
-3262479751,3262479751,DE
+3262479656,3262479751,DE
3262479752,3262479752,CH
-3262479753,3262479753,DE
-3262479754,3262479754,FR
-3262479755,3262479755,NL
-3262479756,3262479756,FR
-3262479757,3262479757,SE
-3262479758,3262479762,DE
-3262479763,3262479763,NO
-3262479764,3262479764,FR
-3262479765,3262479765,DE
-3262479766,3262479766,CH
-3262479767,3262479770,DE
-3262479771,3262479771,IT
-3262479772,3262479775,DE
-3262479776,3262479776,IT
-3262479777,3262479777,BE
-3262479778,3262479778,NL
-3262479779,3262479782,DE
-3262479783,3262479783,GB
-3262479784,3262479784,AT
-3262479785,3262479785,FR
-3262479786,3262479786,CH
-3262479787,3262479788,DE
-3262479789,3262479789,IT
-3262479790,3262479790,DE
-3262479791,3262479792,IT
-3262479793,3262479793,DE
-3262479794,3262479794,FR
-3262479795,3262479795,CH
-3262479796,3262479797,AT
-3262479798,3262479799,GB
-3262479800,3262479808,DE
-3262479809,3262479809,FR
-3262479810,3262479810,NL
-3262479811,3262479811,ES
-3262479812,3262479816,DE
-3262479817,3262479817,HU
-3262479818,3262479818,DE
-3262479819,3262479819,NL
-3262479820,3262479820,DE
-3262479821,3262479822,NL
-3262479823,3262479823,ES
-3262479824,3262479824,GB
-3262479825,3262479825,DE
-3262479826,3262479826,BE
-3262479827,3262479827,DE
-3262479828,3262479829,CH
-3262479830,3262479830,GB
-3262479831,3262479832,DE
-3262479833,3262479833,ES
-3262479834,3262479834,DE
-3262479835,3262479835,AT
-3262479836,3262479836,NL
-3262479837,3262479837,HU
-3262479838,3262479838,CH
-3262479839,3262479839,NL
-3262479840,3262479840,DE
-3262479841,3262479841,FR
-3262479842,3262479842,DK
-3262479843,3262479843,GB
-3262479844,3262479844,DE
-3262479845,3262479845,CH
-3262479846,3262479846,DE
-3262479847,3262479847,LU
-3262479848,3262479852,DE
-3262479853,3262479853,IS
-3262479854,3262479855,DE
-3262479856,3262479856,CH
-3262479857,3262479859,DE
-3262479860,3262479860,NL
-3262479861,3262479861,NO
-3262479862,3262479862,BE
-3262479863,3262479863,NL
-3262479864,3262479864,DE
-3262479865,3262479865,FR
-3262479866,3262479866,DE
-3262479867,3262479867,SE
-3262479868,3262479868,DE
-3262479869,3262479869,GB
-3262479870,3262479871,DE
-3262479872,3262479881,EU
-3262479882,3262479882,DE
-3262479883,3262480127,EU
-3262480128,3262480133,DE
-3262480134,3262480134,AT
-3262480135,3262480135,NL
-3262480136,3262480136,FR
-3262480137,3262480139,DE
-3262480140,3262480140,FR
-3262480141,3262480141,AT
-3262480142,3262480146,DE
-3262480147,3262480147,IT
-3262480148,3262480148,GB
-3262480149,3262480150,DE
-3262480151,3262480151,GB
-3262480152,3262480154,DE
-3262480155,3262480155,ES
-3262480156,3262480158,DE
-3262480159,3262480159,IT
-3262480160,3262480161,DE
-3262480162,3262480162,NO
-3262480163,3262480164,DE
-3262480165,3262480165,FR
-3262480166,3262480172,DE
-3262480173,3262480173,NL
-3262480174,3262480174,DE
-3262480175,3262480175,NL
-3262480176,3262480176,DE
-3262480177,3262480177,CH
-3262480178,3262480178,IT
-3262480179,3262480179,DE
-3262480180,3262480180,FR
-3262480181,3262480181,ES
-3262480182,3262480184,DE
-3262480185,3262480185,FR
-3262480186,3262480186,PT
-3262480187,3262480187,DE
-3262480188,3262480188,FI
-3262480189,3262480189,CH
-3262480190,3262480190,DE
-3262480191,3262480191,NO
-3262480192,3262480193,DE
-3262480194,3262480194,NL
-3262480195,3262480195,GB
-3262480196,3262480197,DE
-3262480198,3262480198,NL
-3262480199,3262480199,GB
-3262480200,3262480201,DE
-3262480202,3262480202,GB
-3262480203,3262480205,DE
-3262480206,3262480206,CH
-3262480207,3262480212,DE
-3262480213,3262480213,FR
-3262480214,3262480215,DE
-3262480216,3262480216,HU
-3262480217,3262480218,DE
-3262480219,3262480219,ES
-3262480220,3262480220,NL
-3262480221,3262480221,BE
-3262480222,3262480226,DE
-3262480227,3262480227,IE
-3262480228,3262480229,DE
-3262480230,3262480230,SE
-3262480231,3262480232,DE
-3262480233,3262480233,SE
-3262480234,3262480234,DE
-3262480235,3262480235,HU
-3262480236,3262480236,DE
-3262480237,3262480237,PL
-3262480238,3262480238,DE
-3262480239,3262480239,NL
-3262480240,3262480243,DE
-3262480244,3262480244,CH
-3262480245,3262480246,DE
-3262480247,3262480247,NL
-3262480248,3262480248,DE
-3262480249,3262480249,NL
-3262480250,3262480250,DE
-3262480251,3262480251,NL
-3262480252,3262480253,DE
-3262480254,3262480254,CH
-3262480255,3262480260,DE
-3262480261,3262480261,BE
-3262480262,3262480264,DE
-3262480265,3262480265,GB
-3262480266,3262480267,DE
-3262480268,3262480268,FR
-3262480269,3262480269,NL
-3262480270,3262480270,DE
-3262480271,3262480271,CH
-3262480272,3262480272,DK
-3262480273,3262480273,DE
-3262480274,3262480274,IT
-3262480275,3262480275,BE
-3262480276,3262480276,ES
-3262480277,3262480277,DE
-3262480278,3262480278,CH
-3262480279,3262480282,DE
+3262479753,3262480282,DE
3262480283,3262480283,GB
-3262480284,3262480293,DE
-3262480294,3262480294,FR
-3262480295,3262480295,CH
-3262480296,3262480296,NO
-3262480297,3262480302,DE
-3262480303,3262480304,IT
-3262480305,3262480305,DE
-3262480306,3262480306,AT
-3262480307,3262480311,DE
-3262480312,3262480312,NL
-3262480313,3262480313,FR
-3262480314,3262480314,NL
-3262480315,3262480315,DE
-3262480316,3262480316,IT
+3262480284,3262480316,DE
3262480317,3262480317,NL
3262480318,3262480318,IT
-3262480319,3262480319,AT
-3262480320,3262480320,DK
-3262480321,3262480321,DE
-3262480322,3262480322,GB
-3262480323,3262480324,DE
-3262480325,3262480325,ES
-3262480326,3262480329,DE
-3262480330,3262480330,FR
-3262480331,3262480331,IT
-3262480332,3262480332,DE
-3262480333,3262480333,CH
-3262480334,3262480334,DE
-3262480335,3262480335,GB
-3262480336,3262480336,DE
-3262480337,3262480337,NL
-3262480338,3262480340,DE
-3262480341,3262480341,CH
-3262480342,3262480342,DE
-3262480343,3262480343,DK
-3262480344,3262480344,DE
-3262480345,3262480345,CH
-3262480346,3262480346,DE
-3262480347,3262480347,NL
-3262480348,3262480348,IS
-3262480349,3262480349,AT
-3262480350,3262480352,DE
-3262480353,3262480353,CH
-3262480354,3262480354,DE
-3262480355,3262480355,GB
-3262480356,3262480356,DE
-3262480357,3262480357,GB
-3262480358,3262480359,CH
-3262480360,3262480365,DE
-3262480366,3262480366,AT
-3262480367,3262480367,DE
-3262480368,3262480368,GB
-3262480369,3262480369,FR
-3262480370,3262480370,ES
-3262480371,3262480371,GB
-3262480372,3262480372,DE
-3262480373,3262480373,AT
-3262480374,3262480374,ES
-3262480375,3262480375,NL
-3262480376,3262480376,DE
-3262480377,3262480378,IT
-3262480379,3262480379,CH
-3262480380,3262480380,GB
-3262480381,3262480381,IT
-3262480382,3262480382,ES
-3262480383,3262480383,DE
+3262480319,3262480383,DE
3262480384,3262488575,GB
3262488576,3262496767,SE
3262496768,3262504959,FR
@@ -122282,12 +63932,11 @@
3262505984,3262506495,PL
3262506496,3262507007,RO
3262507008,3262507519,DK
-3262507520,3262509055,RO
+3262507520,3262508543,RO
3262509056,3262509567,PL
3262509568,3262510079,RO
3262510080,3262511103,FR
3262511104,3262511615,GB
-3262511616,3262512127,DE
3262512128,3262512639,UA
3262512640,3262513151,DE
3262513152,3262578687,AT
@@ -122296,153 +63945,51 @@
3262627840,3262636031,IT
3262636032,3262644223,BE
3262644224,3262648319,NL
-3262648320,3262648575,EU
-3262648576,3262648831,DE
-3262648832,3262649855,NL
-3262649856,3262650623,DE
-3262650624,3262654463,NL
+3262648320,3262648575,DE
+3262648576,3262654463,NL
3262654464,3262654719,DE
-3262654720,3262655231,NL
-3262655232,3262655487,DE
-3262655488,3262658303,NL
-3262658304,3262658559,DE
-3262658560,3262661119,NL
-3262661120,3262661375,DE
-3262661376,3262664703,NL
-3262664704,3262665727,DE
-3262665728,3262665983,EU
-3262665984,3262666751,DE
-3262666752,3262667007,EU
-3262667008,3262671359,DE
-3262671360,3262672127,NL
-3262672128,3262672895,DE
-3262672896,3262673919,NL
-3262673920,3262674175,DE
-3262674176,3262674687,NL
-3262674688,3262674943,DE
-3262674944,3262676479,NL
-3262676480,3262676735,DE
-3262676736,3262678271,NL
-3262678272,3262678527,DE
-3262678528,3262681087,NL
-3262681088,3262681343,DE
-3262681344,3262682623,NL
-3262682624,3262682879,DE
-3262682880,3262685951,NL
-3262685952,3262686463,DE
-3262686464,3262687743,NL
-3262687744,3262688255,DE
-3262688256,3262688511,NL
-3262688512,3262688767,DE
-3262688768,3262690815,NL
+3262654720,3262664703,NL
+3262664704,3262670847,DE
+3262670848,3262690815,NL
3262690816,3262691583,DE
-3262691584,3262692607,NL
-3262692608,3262692863,DE
-3262692864,3262693375,NL
+3262691584,3262693375,NL
3262693376,3262701567,DE
-3262701568,3262703103,NL
-3262703104,3262703615,DE
-3262703616,3262704127,NL
-3262704128,3262704383,DE
-3262704384,3262707807,NL
-3262707808,3262707839,DE
-3262707840,3262707967,NL
-3262707968,3262708223,DE
-3262708224,3262709759,NL
-3262709760,3262710015,DE
-3262710016,3262710271,NL
-3262710272,3262710527,DE
-3262710528,3262712575,NL
-3262712576,3262712831,DE
-3262712832,3262715135,NL
+3262701568,3262715135,NL
3262715136,3262715391,DE
-3262715392,3262716415,NL
-3262716416,3262716671,DE
-3262716672,3262721535,NL
-3262721536,3262721791,DE
-3262721792,3262722047,NL
-3262722048,3262723071,DE
-3262723072,3262724095,NL
-3262724096,3262724351,DE
-3262724352,3262724863,NL
-3262724864,3262725119,DE
-3262725120,3262725631,NL
-3262725632,3262726143,DE
-3262726144,3262726655,NL
-3262726656,3262726911,DE
-3262726912,3262732799,NL
+3262715392,3262722815,NL
+3262722816,3262723071,DE
+3262723072,3262732799,NL
3262732800,3262733055,DE
-3262733056,3262736383,NL
-3262736384,3262736895,DE
-3262736896,3262741247,NL
-3262741248,3262741503,DE
-3262741504,3262753791,NL
+3262733056,3262753791,NL
3262753792,3262754815,DE
-3262754816,3262761727,NL
-3262761728,3262761983,DE
-3262761984,3262766079,NL
-3262766080,3262766087,DE
-3262766088,3262774783,NL
-3262774784,3262775039,DE
-3262775040,3262794815,NL
-3262794816,3262795007,DE
-3262795008,3262796799,NL
-3262796800,3262797055,DE
-3262797056,3262808831,NL
-3262808832,3262809087,DE
-3262809088,3262832639,NL
+3262754816,3262832639,NL
3262832640,3262840319,DE
-3262840320,3262842624,NL
-3262842625,3262842625,DE
-3262842626,3262872063,NL
-3262872064,3262872127,DE
-3262872128,3262872159,NL
-3262872160,3262872191,DE
-3262872192,3262872255,NL
-3262872256,3262872271,DE
-3262872272,3262872275,NL
-3262872276,3262872279,DE
-3262872280,3262872307,NL
-3262872308,3262872308,DE
-3262872309,3262872309,NL
-3262872310,3262872313,DE
-3262872314,3262882815,NL
-3262882816,3262883071,DE
-3262883072,3262906367,NL
+3262840320,3262906367,NL
3262906368,3262964991,CH
3262964992,3262965247,DE
3262965248,3262971903,CH
3262971904,3263029247,IE
3263029248,3263030271,UA
-3263030272,3263031295,GB
3263031296,3263032319,TR
3263032320,3263033343,RU
3263033344,3263033855,LV
3263033856,3263034367,IT
3263034368,3263034879,UA
3263034880,3263035391,GB
-3263035392,3263035903,UA
-3263035904,3263036415,CH
3263036416,3263036927,GR
3263036928,3263037439,RU
3263037440,3263045631,LB
-3263045632,3263046847,KW
-3263046848,3263046911,IQ
-3263046912,3263047935,KW
-3263047936,3263048191,LB
-3263048192,3263053823,KW
+3263045632,3263053823,KW
3263053824,3263062015,GB
3263062016,3263070207,EE
3263070208,3263070719,FR
3263070720,3263070975,NL
3263070976,3263071487,DE
-3263071488,3263072255,NL
3263072256,3263074303,LB
3263074304,3263074815,CH
3263074816,3263075327,RO
3263075328,3263075839,IT
3263075840,3263076351,SE
-3263076352,3263076863,RO
3263077376,3263077887,FR
3263077888,3263078399,DE
3263079424,3263080447,PL
@@ -122458,7 +64005,6 @@
3263088128,3263088383,DE
3263088384,3263088639,LV
3263088640,3263089151,CH
-3263089152,3263089407,RO
3263089408,3263089663,RU
3263089664,3263089919,UA
3263089920,3263090175,RO
@@ -122474,20 +64020,18 @@
3263092736,3263092991,PL
3263092992,3263093247,FR
3263093248,3263093503,CH
-3263093504,3263093759,RU
3263093760,3263094015,RO
3263094016,3263094527,PL
3263094528,3263094783,DK
3263094784,3263095039,UA
3263095040,3263095295,ES
-3263095296,3263095551,EU
+3263095296,3263095551,FR
3263095552,3263095807,RO
3263095808,3263096063,DE
3263096064,3263096319,PL
3263096320,3263096575,TR
3263096576,3263096831,SA
3263096832,3263097087,PL
-3263097088,3263097343,FR
3263097344,3263097599,DK
3263097600,3263097855,NL
3263097856,3263098111,FR
@@ -122498,7 +64042,6 @@
3263099136,3263099391,NL
3263099392,3263099903,DE
3263099904,3263100159,RO
-3263100160,3263100415,FR
3263100416,3263100671,DE
3263100672,3263100927,GB
3263100928,3263101183,AT
@@ -122509,180 +64052,65 @@
3263102208,3263102463,RO
3263102464,3263102719,PL
3263102720,3263102975,GR
-3263102976,3263121407,DE
-3263121408,3263121420,EU
+3263102976,3263104030,DE
+3263104031,3263104031,FR
+3263104032,3263104040,DE
+3263104041,3263104041,GB
+3263104042,3263121420,DE
3263121421,3263121421,BE
-3263121422,3263121663,EU
-3263121664,3263137791,DE
+3263121422,3263131647,DE
+3263132672,3263137791,DE
3263137792,3263138303,PL
3263138304,3263138551,DE
3263138552,3263138815,AT
3263138816,3263168511,DE
3263168512,3263430655,GB
-3263430656,3263433471,SE
-3263433472,3263433727,NO
-3263433728,3263436543,SE
+3263430656,3263436543,SE
3263436544,3263436799,ES
-3263436800,3263437311,GB
-3263437312,3263438591,SE
-3263438592,3263438847,IT
-3263438848,3263439103,CY
-3263439104,3263443199,SE
-3263443200,3263443455,AT
-3263443456,3263443967,NL
-3263443968,3263446271,SE
-3263446272,3263446527,CH
-3263446528,3263447039,DE
-3263447040,3263458047,SE
-3263458048,3263458559,DE
-3263458560,3263458815,SE
-3263458816,3263459327,FR
-3263459328,3263459583,AT
+3263436800,3263458047,SE
+3263458048,3263458303,DE
+3263458304,3263459583,SE
3263459584,3263459839,FR
-3263459840,3263461631,SE
-3263461632,3263461887,AE
-3263461888,3263467519,SE
-3263467520,3263468031,IT
-3263468032,3263469567,SE
+3263459840,3263469567,SE
3263469568,3263470591,SG
-3263470592,3263472127,SE
-3263472128,3263472383,SG
-3263472384,3263475711,SE
+3263470592,3263475711,SE
3263475712,3263476735,JP
-3263476736,3263477759,SE
-3263477760,3263478015,JP
-3263478016,3263478271,AU
-3263478272,3263478527,SE
+3263476736,3263478527,SE
3263478528,3263478783,ES
3263478784,3263480831,SE
3263480832,3263481855,JP
3263481856,3263482879,SE
3263482880,3263483903,IT
3263483904,3263496191,SE
-3263496192,3263497983,EU
-3263497984,3263498239,GB
-3263498240,3263498751,EU
-3263498752,3263498879,US
-3263498880,3263498943,GB
-3263498944,3263498959,EU
-3263498960,3263499007,GB
-3263499008,3263499775,EU
-3263499776,3263500031,FR
-3263500032,3263500287,GB
-3263500288,3263501311,EU
-3263501312,3263501341,GB
-3263501342,3263501343,EU
-3263501344,3263501439,GB
-3263501440,3263501503,US
-3263501504,3263501519,GB
+3263496192,3263501519,GB
3263501520,3263501527,IE
-3263501528,3263501535,GB
-3263501536,3263501551,DE
-3263501552,3263501823,GB
-3263501824,3263503135,EU
-3263503136,3263503167,DE
-3263503168,3263503199,EU
-3263503200,3263503267,DE
-3263503268,3263503271,EU
-3263503272,3263503279,DE
-3263503280,3263503295,EU
-3263503296,3263503359,DE
-3263503360,3263504127,EU
-3263504128,3263504255,EG
-3263504256,3263506687,EU
-3263506688,3263506815,DE
-3263506816,3263506943,US
-3263506944,3263507199,EU
-3263507200,3263507455,US
-3263507456,3263509759,EU
-3263509760,3263509791,GB
-3263509792,3263509807,IE
-3263509808,3263509831,GB
-3263509832,3263509839,FR
-3263509840,3263509847,GB
-3263509848,3263509887,US
-3263509888,3263510023,GB
-3263510024,3263510031,BE
-3263510032,3263510063,GB
-3263510064,3263510079,US
-3263510080,3263510271,GB
-3263510272,3263511295,EU
-3263511296,3263511551,GB
-3263511552,3263512063,EU
-3263512064,3263512319,GB
-3263512320,3263513343,EU
-3263513344,3263513599,US
-3263513600,3263516671,EU
-3263516672,3263516927,US
-3263516928,3263517183,GB
-3263517184,3263517695,EU
-3263517696,3263517951,US
-3263517952,3263518463,GB
-3263518464,3263518719,FR
+3263501528,3263503103,GB
+3263503104,3263503359,DE
+3263503360,3263511551,GB
+3263511552,3263512063,BE
+3263512064,3263512575,GB
+3263512576,3263512831,ES
+3263512832,3263513855,GB
+3263513856,3263514111,RU
+3263514112,3263518719,GB
3263518720,3263518751,IE
-3263518752,3263519743,EU
-3263519744,3263519759,GB
-3263519760,3263520255,EU
-3263520256,3263520511,FR
-3263520512,3263520767,US
-3263520768,3263523071,EU
-3263523072,3263523583,DE
-3263523584,3263525759,EU
-3263525760,3263525887,DE
+3263518752,3263520767,GB
+3263520768,3263525887,DE
3263525888,3263526143,ZA
-3263526144,3263527423,EU
-3263527424,3263527679,ZW
-3263527680,3263527935,DE
-3263527936,3263528191,EU
-3263528192,3263528447,FR
-3263528448,3263530495,EU
-3263530496,3263530751,GB
-3263530752,3263531519,EU
-3263531520,3263531535,DE
-3263531536,3263531551,EU
-3263531552,3263531775,DE
-3263531776,3263538175,EU
-3263538176,3263538431,TR
-3263538432,3263540223,EU
-3263540224,3263540479,TR
-3263540480,3263540735,GB
-3263540736,3263541503,EU
-3263541504,3263541535,GB
-3263541536,3263557631,EU
-3263557632,3263557887,TR
-3263557888,3263558655,EU
-3263558656,3263558911,TR
-3263558912,3263559679,GB
-3263559680,3263560447,EU
-3263560448,3263560703,TR
-3263560704,3263561215,EU
-3263561216,3263561231,TR
-3263561232,3263561727,EU
+3263526144,3263545343,DE
+3263545344,3263561727,US
3263561728,3263627263,NL
-3263627264,3263692799,RU
-3263692800,3263760127,FI
-3263760128,3263760383,SE
-3263760384,3263764991,FI
-3263764992,3263765503,BE
-3263765504,3263766975,FI
-3263766976,3263767039,RU
-3263767040,3263773951,FI
-3263773952,3263774207,BE
-3263774208,3263774463,FI
-3263774464,3263774719,BE
-3263774720,3263792351,FI
-3263792352,3263792367,SE
-3263792368,3263793151,FI
-3263793152,3263793407,BE
-3263793408,3263816703,FI
-3263816704,3263816959,ES
-3263816960,3263817215,NL
-3263817216,3263823871,FI
+3263627264,3263647743,RU
+3263647744,3263651839,LT
+3263651840,3263666175,RU
+3263666176,3263676415,AZ
+3263676416,3263678463,RU
+3263678464,3263680511,DE
+3263680512,3263692799,RU
+3263692800,3263823871,FI
3263823872,3263826943,DE
3263826944,3263827199,AT
-3263827200,3263833903,DE
-3263833904,3263833919,EU
-3263833920,3263878145,DE
+3263827200,3263878145,DE
3263878146,3263878146,US
3263878147,3263886079,DE
3263886080,3263886335,SG
@@ -122691,12 +64119,9 @@
3263979520,3263987711,DE
3263987712,3264004095,ES
3264004096,3264012287,HU
-3264012288,3264012543,AT
-3264012544,3264012799,FR
-3264012800,3264013055,GB
+3264012544,3264013055,GB
3264013056,3264013311,TR
3264013312,3264013567,UA
-3264013568,3264013823,RU
3264013824,3264014079,NL
3264014080,3264014335,DE
3264014336,3264014591,PT
@@ -122714,22 +64139,12 @@
3264017920,3264018175,NL
3264018176,3264018431,FR
3264018432,3264018687,HU
-3264018688,3264018943,GB
3264018944,3264019199,PL
3264019200,3264019967,GB
3264019968,3264020223,AT
3264020224,3264020479,PL
3264020480,3264086015,BG
-3264086016,3264099839,FI
-3264099840,3264100095,GB
-3264100096,3264124927,FI
-3264124928,3264125183,DE
-3264125184,3264125439,NL
-3264125440,3264125695,FI
-3264125696,3264125951,BE
-3264125952,3264133375,FI
-3264133376,3264133631,SE
-3264133632,3264151551,FI
+3264086016,3264151551,FI
3264151552,3264184319,NO
3264184320,3264184831,MD
3264184832,3264185343,NL
@@ -122751,15 +64166,15 @@
3264282624,3264290815,GB
3264290816,3264296191,FI
3264296192,3264297727,FR
-3264297728,3264298239,PT
-3264298240,3264298495,DE
-3264298496,3264298751,PT
+3264297728,3264297983,DE
+3264297984,3264298239,PT
+3264298240,3264298751,DE
3264298752,3264299007,BG
3264299008,3264307199,DE
3264307200,3264311295,PL
3264311296,3264311551,FR
3264311808,3264312063,DE
-3264312064,3264312319,EU
+3264312064,3264312319,CH
3264312320,3264312575,PL
3264312576,3264312831,UA
3264312832,3264313087,DE
@@ -122769,9 +64184,7 @@
3264313856,3264314623,DE
3264314624,3264314879,SE
3264314880,3264315135,GB
-3264315136,3264315391,GR
3264315392,3264317439,IE
-3264317440,3264318463,SK
3264318464,3264318975,ES
3264318976,3264319487,DE
3264319488,3264319743,FR
@@ -122779,7 +64192,6 @@
3264320000,3264320255,DE
3264320256,3264321023,GB
3264321024,3264321535,DE
-3264321536,3264321791,GB
3264321792,3264322047,RS
3264322048,3264322303,FR
3264322304,3264322559,RO
@@ -122803,9 +64215,7 @@
3264334336,3264334847,UA
3264334848,3264335359,PL
3264335360,3264335871,SK
-3264335872,3264336383,NL
-3264336384,3264336895,GB
-3264336896,3264337407,RU
+3264335872,3264336383,GB
3264337408,3264338431,UA
3264338432,3264338943,DE
3264338944,3264339455,UA
@@ -122827,8 +64237,8 @@
3264345088,3264346111,NL
3264346112,3264347135,SE
3264347136,3264348159,DE
-3264348160,3264372223,FR
-3264372224,3264372735,GB
+3264348672,3264358143,FR
+3264358400,3264372223,FR
3264372736,3264375039,FR
3264375040,3264376063,SE
3264376064,3264376319,HR
@@ -122836,8 +64246,7 @@
3264376576,3264376831,CH
3264376832,3264377087,UA
3264377088,3264377343,RU
-3264377344,3264377599,IT
-3264377600,3264378111,RU
+3264377600,3264377855,RU
3264378112,3264378367,SE
3264378368,3264378623,DE
3264378624,3264378879,RU
@@ -122845,32 +64254,25 @@
3264379136,3264379391,BE
3264379392,3264379647,RU
3264379648,3264379903,PL
-3264379904,3264380159,DE
3264380160,3264380415,RO
-3264380416,3264380671,CH
3264380672,3264380927,NL
3264380928,3264381951,PL
3264381952,3264385023,UA
3264385024,3264386047,DE
3264386048,3264387071,IR
3264387072,3264388095,LB
-3264388096,3264389119,UA
3264389120,3264390143,RU
-3264390144,3264391167,IR
3264391168,3264392191,SE
3264392192,3264393215,FR
3264393216,3264394239,DE
3264394240,3264395263,UA
3264395264,3264396287,AT
3264396288,3264397311,UA
-3264397312,3264398335,GB
3264398336,3264399359,UA
3264399360,3264400383,RU
-3264400384,3264401407,PA
3264401408,3264402431,DE
3264402432,3264403455,CH
3264403456,3264404479,PL
-3264404480,3264405503,UA
3264405504,3264406527,FR
3264406528,3264407551,UA
3264407552,3264408575,BG
@@ -122878,34 +64280,31 @@
3264409600,3264410623,RU
3264410624,3264411647,NO
3264411648,3264413695,PL
-3264413696,3264431103,CH
+3264417536,3264431103,CH
3264431104,3264431615,LI
-3264431616,3264441343,CH
+3264431616,3264431871,CH
+3264432128,3264441343,CH
3264441344,3264441599,PL
-3264441600,3264446207,CH
-3264446208,3264446463,FR
-3264446464,3264447743,CH
+3264442112,3264444927,CH
+3264444928,3264445183,DE
+3264445184,3264445439,CH
+3264447488,3264447743,CH
3264447744,3264447999,DE
-3264448000,3264463871,CH
+3264448000,3264452607,CH
+3264454656,3264456191,CH
+3264456704,3264463871,CH
3264463872,3264466943,LI
3264466944,3264476671,CH
3264476672,3264477183,RU
3264477184,3264477439,PL
3264477440,3264477695,RU
-3264477696,3264483071,CH
-3264483072,3264483327,LI
-3264483328,3264486527,CH
-3264486528,3264486559,LI
-3264486560,3264494079,CH
-3264494080,3264494335,US
-3264494336,3264544767,CH
+3264477696,3264544767,CH
3264544768,3264561151,HU
3264561152,3264563199,RU
3264563200,3264564223,ES
3264564224,3264565247,IE
3264565248,3264567295,NL
3264567296,3264567551,PL
-3264567552,3264567807,GB
3264567808,3264568063,RU
3264568320,3264568575,UA
3264568832,3264569087,FR
@@ -122926,83 +64325,32 @@
3264606976,3264607231,BE
3264607232,3264607487,IT
3264607488,3264610303,DE
-3264610304,3264612351,GB
-3264612352,3264613375,FR
-3264613376,3264613887,NL
-3264613888,3264613895,GB
-3264613896,3264613919,NL
-3264613920,3264613935,GB
-3264613936,3264613943,NL
-3264613944,3264613951,GB
-3264613952,3264614131,NL
-3264614132,3264614135,GB
-3264614136,3264614143,NL
-3264614144,3264614399,GB
-3264614400,3264614655,NL
-3264614656,3264615423,SE
-3264615424,3264615935,CH
-3264615936,3264616191,GB
-3264616192,3264616447,CH
-3264616448,3264616479,DE
-3264616480,3264616503,GB
-3264616504,3264616511,DE
-3264616512,3264616575,GB
-3264616576,3264616703,DE
-3264616704,3264616959,GB
-3264616960,3264617471,DE
-3264617472,3264617727,GB
-3264617728,3264617983,US
-3264617984,3264618239,GB
-3264618240,3264618495,US
-3264618496,3264619007,PL
-3264619008,3264619311,BE
-3264619312,3264619327,GB
-3264619328,3264619359,BE
-3264619360,3264619391,GB
+3264610304,3264614911,GB
+3264614912,3264615167,SE
+3264615168,3264617983,GB
+3264617984,3264618239,US
+3264618240,3264619391,GB
3264619392,3264619519,BE
-3264619520,3264620543,GB
-3264620544,3264620607,FR
-3264620608,3264620639,GB
-3264620640,3264620679,FR
-3264620680,3264620687,ES
-3264620688,3264620703,FR
-3264620704,3264620719,GB
-3264620720,3264620751,FR
-3264620752,3264620759,GB
-3264620760,3264621567,FR
-3264621568,3264621663,DE
-3264621664,3264621695,GB
-3264621696,3264622591,DE
-3264622592,3264622847,GB
-3264622848,3264623103,FR
-3264623104,3264623615,BG
-3264623616,3264624127,BE
-3264624128,3264624143,GI
-3264624144,3264624383,GB
-3264624384,3264624639,MT
+3264619520,3264624639,GB
3264624640,3264624671,US
-3264624672,3264624767,GB
-3264624768,3264626303,NL
-3264626304,3264626431,GB
-3264626432,3264626687,NL
+3264624672,3264626687,GB
3264626688,3264627711,EE
3264627712,3264628735,GR
3264628736,3264630783,UA
3264630784,3264631807,DE
3264631808,3264632831,RO
3264632832,3264633855,RU
-3264633856,3264634879,UA
3264634880,3264636927,PL
3264636928,3264637951,RU
3264637952,3264639999,DK
3264640000,3264641023,BG
3264641024,3264642047,GB
-3264642048,3264651263,RU
+3264643072,3264651263,RU
3264651264,3264651775,CH
3264651776,3264652287,IT
3264652288,3264652799,RU
3264652800,3264653311,PL
-3264653312,3264653823,EU
+3264653312,3264653823,DE
3264653824,3264654335,PL
3264654336,3264654847,DE
3264654848,3264655359,UA
@@ -123023,7 +64371,6 @@
3264663552,3264664063,NL
3264664064,3264664575,DE
3264664576,3264665087,NO
-3264665088,3264665599,SE
3264665600,3264666111,RO
3264666112,3264666623,IL
3264666624,3264667135,UA
@@ -123032,7 +64379,6 @@
3264668160,3264669183,DE
3264669184,3264669695,PL
3264669696,3264670207,UA
-3264670208,3264670719,RU
3264670720,3264671231,FR
3264671232,3264671743,PL
3264671744,3264672255,DE
@@ -123043,11 +64389,7 @@
3264674304,3264674815,PL
3264674816,3264675327,GB
3264675328,3264675839,RU
-3264675840,3264695039,NL
-3264695040,3264695295,EU
-3264695296,3264697924,NL
-3264697925,3264697925,EU
-3264697926,3264741375,NL
+3264675840,3264741375,NL
3264741376,3264749567,SI
3264749568,3264750079,LV
3264750080,3264750591,RU
@@ -123073,11 +64415,12 @@
3264806912,3264815103,GB
3264815104,3264825343,SE
3264825344,3264825599,NO
-3264825856,3264826879,GB
+3264825856,3264826111,NL
+3264826112,3264826367,GB
3264826880,3264827135,NL
3264827136,3264827391,LV
3264827648,3264828159,GR
-3264828160,3264828415,EU
+3264828160,3264828415,CH
3264828416,3264828671,SE
3264828672,3264828927,MT
3264828928,3264829439,DE
@@ -123118,7 +64461,6 @@
3264844800,3264845311,UA
3264845312,3264845951,DE
3264845952,3264846079,GB
-3264846080,3264846207,UG
3264846208,3264846335,AE
3264846336,3264846463,GB
3264846464,3264846591,NO
@@ -123126,13 +64468,11 @@
3264846720,3264846847,RU
3264846848,3264846911,DK
3264846912,3264847103,CY
-3264847104,3264847135,FR
3264847168,3264847199,IE
3264847200,3264847231,NO
3264847232,3264847263,CH
3264847264,3264847295,LI
3264847296,3264847359,CY
-3264847360,3264847487,FR
3264847488,3264847615,RU
3264847616,3264847679,PL
3264847680,3264847743,FI
@@ -123140,12 +64480,11 @@
3264847808,3264847871,SE
3264847872,3264849919,DE
3264849920,3264850431,GB
-3264850432,3264850687,PL
3264850688,3264850943,LV
3264850944,3264851967,IT
3264851968,3264854015,CH
3264854016,3264854271,GB
-3264854528,3264854783,EU
+3264854528,3264854783,DE
3264854784,3264855039,IT
3264855040,3264855551,CH
3264855552,3264856063,DE
@@ -123160,43 +64499,36 @@
3264872448,3264888831,GB
3264888832,3264897023,RU
3264897024,3264905215,GB
-3264905216,3264908799,CY
-3264908800,3264909055,GB
-3264909056,3264913407,CY
+3264905216,3264913407,CY
3264913408,3264921599,GB
-3264921600,3264922303,LU
-3264922304,3264922319,SA
-3264922320,3264929791,LU
+3264921600,3264929791,LU
3264929792,3264937983,SK
3264937984,3265003519,GB
-3265003520,3265015807,DE
-3265015808,3265016063,EU
-3265016064,3265045759,DE
+3265003520,3265018879,DE
+3265018880,3265019903,HK
+3265019904,3265043199,DE
+3265043456,3265045759,DE
3265045760,3265046015,TR
-3265046016,3265055231,DE
+3265046016,3265049087,DE
+3265049600,3265055231,DE
3265055232,3265055743,FR
3265055744,3265069055,DE
3265069056,3265134591,FI
-3265134592,3265134863,BE
-3265134864,3265135615,CH
-3265135616,3265136127,FR
-3265136128,3265136639,CH
-3265136640,3265136895,NL
-3265136896,3265136927,CH
-3265136928,3265136975,NL
-3265136976,3265136991,CH
-3265136992,3265137150,NL
-3265137151,3265137407,CH
-3265137408,3265137663,NL
-3265137664,3265139711,CH
-3265139712,3265139967,BE
-3265139968,3265140735,CH
-3265140736,3265141043,GB
-3265141044,3265141055,CH
-3265141056,3265141151,GB
-3265141152,3265141167,CH
-3265141168,3265141759,GB
-3265141760,3265142783,CH
+3265134592,3265137983,CH
+3265137984,3265138047,NL
+3265138048,3265138863,CH
+3265138864,3265138879,SE
+3265138880,3265139999,CH
+3265140000,3265140015,BE
+3265140016,3265140991,CH
+3265140992,3265141247,GB
+3265141248,3265141551,CH
+3265141552,3265141555,IE
+3265141556,3265141759,CH
+3265141760,3265141775,GB
+3265141776,3265141791,CH
+3265141792,3265141887,GB
+3265141888,3265142783,CH
3265142784,3265150975,MT
3265150976,3265159167,AD
3265159168,3265167359,FR
@@ -123204,95 +64536,38 @@
3265175552,3265183743,NL
3265183744,3265191935,BY
3265191936,3265200127,CH
-3265200128,3265216767,GB
-3265216768,3265217023,FR
-3265217024,3265218559,GB
-3265218560,3265219071,NL
-3265219072,3265265663,GB
+3265200128,3265265663,GB
3265265664,3265331199,SK
-3265331200,3265340415,GB
-3265340416,3265340671,DE
-3265340672,3265340927,GB
-3265340928,3265341183,CH
-3265341184,3265341279,AT
-3265341280,3265341311,EU
-3265341312,3265341439,FR
-3265341440,3265341695,GB
-3265341696,3265341951,DE
-3265341952,3265343487,GB
-3265343488,3265347583,DE
-3265347584,3265352703,FR
-3265352704,3265352959,BE
-3265352960,3265353215,FR
-3265353216,3265355263,DE
-3265355264,3265355775,FR
-3265355776,3265357055,BE
-3265357056,3265357311,FR
-3265357312,3265357567,DE
-3265357568,3265357823,BE
-3265357824,3265358847,NL
-3265358848,3265359103,BE
-3265359104,3265359871,NL
-3265359872,3265360127,CH
-3265360128,3265360383,GB
-3265360384,3265360895,CH
+3265331200,3265334271,GB
+3265336320,3265337343,GB
+3265338368,3265340415,GB
+3265342464,3265343487,GB
+3265345536,3265347583,DE
+3265347584,3265348607,FR
+3265349632,3265351679,FR
3265360896,3265361919,GB
3265361920,3265363967,IT
3265363968,3265366015,ES
-3265366016,3265366079,EU
-3265366080,3265366271,BE
-3265366272,3265366527,HU
-3265366528,3265367039,DK
-3265367040,3265367295,AT
-3265367296,3265367551,ES
-3265367552,3265367807,SE
-3265367808,3265369343,DK
-3265369344,3265369599,IL
-3265369600,3265369855,SE
-3265369856,3265370111,DE
-3265370112,3265370623,DK
-3265370624,3265370879,GB
-3265370880,3265376255,DE
-3265376256,3265376511,IT
-3265376512,3265378303,GB
-3265378304,3265380095,NL
-3265380096,3265382399,GB
-3265382400,3265382911,CH
-3265382912,3265384447,GB
-3265384448,3265386495,DE
+3265368064,3265369087,DK
+3265371136,3265376255,DE
+3265377280,3265378303,GB
+3265378304,3265379327,NL
+3265380352,3265382399,GB
3265386496,3265386751,NL
-3265386752,3265387007,EU
3265387008,3265387263,NL
-3265387264,3265388543,EU
-3265388544,3265396735,GB
-3265396736,3265464847,DE
-3265464848,3265464863,AT
-3265464864,3265465343,DE
-3265465344,3265465599,AT
-3265465600,3265467519,DE
-3265467520,3265467523,ES
-3265467524,3265527055,DE
-3265527056,3265527059,ES
-3265527060,3265527063,DE
-3265527064,3265527071,SE
-3265527072,3265527087,DE
-3265527088,3265527095,SE
-3265527096,3265527807,DE
-3265527808,3265569279,GB
-3265569280,3265569791,AE
-3265569792,3265582335,GB
-3265582336,3265582476,A2
+3265388544,3265392639,GB
+3265394688,3265396735,GB
+3265396736,3265527807,DE
+3265527808,3265582476,GB
3265582477,3265582477,LB
-3265582478,3265582591,A2
-3265582592,3265593343,GB
+3265582478,3265593343,GB
3265593344,3265594367,RU
-3265594368,3265595391,UA
+3265594880,3265595391,UA
3265595392,3265595903,PL
3265595904,3265596415,RU
3265596416,3265596927,GB
3265596928,3265597439,FR
-3265597440,3265597951,MC
-3265597952,3265599999,RU
+3265597440,3265599999,RU
3265600000,3265600511,HU
3265600512,3265601023,GB
3265601024,3265601535,RU
@@ -123318,9 +64593,8 @@
3265606656,3265606911,AT
3265606912,3265607167,RU
3265607168,3265607423,PL
-3265607424,3265607935,DK
+3265607424,3265607679,DK
3265607936,3265608191,CZ
-3265608192,3265608447,RU
3265608448,3265608703,SE
3265608704,3265608959,GB
3265608960,3265609215,RU
@@ -123328,24 +64602,21 @@
3265609728,3265617919,NL
3265617920,3265626111,SI
3265626112,3265634303,JO
-3265634304,3265642287,IE
-3265642288,3265642303,US
-3265642304,3265642495,IE
+3265634304,3265642495,IE
3265642496,3265650687,GB
3265650688,3265658879,SE
3265658880,3265724415,AT
3265724416,3265789951,FR
3265789952,3265824767,GB
3265824768,3265825023,US
-3265825024,3265887487,GB
+3265825024,3265879039,GB
+3265880064,3265887487,GB
3265887488,3265887743,PT
3265887744,3265888255,PL
3265888256,3265902335,GB
3265902336,3265902591,FR
-3265902592,3265904383,GB
3265904384,3265904639,RO
3265904640,3265904895,DE
-3265904896,3265905151,UA
3265905152,3265905663,GB
3265905664,3265905919,IE
3265905920,3265906175,GB
@@ -123361,11 +64632,10 @@
3265909248,3265909503,UA
3265909504,3265909759,DE
3265909760,3265910015,RO
-3265910016,3265910271,PL
3265910272,3265910527,FR
3265910528,3265910783,PT
-3265910784,3265911039,DE
-3265911040,3265911551,GB
+3265910784,3265911295,DE
+3265911296,3265911551,GB
3265911552,3265911807,CH
3265911808,3265912063,PL
3265912064,3265912319,GB
@@ -123374,21 +64644,18 @@
3265912832,3265913087,CZ
3265913088,3265913343,SE
3265913344,3265914367,PL
-3265914368,3265914623,RU
3265914624,3265914879,BG
3265914880,3265915135,GR
3265915136,3265915391,RO
3265915392,3265915647,GB
3265915648,3265915903,RO
-3265915904,3265916415,PL
+3265915904,3265916159,PL
3265916416,3265916671,UA
3265916672,3265916927,DE
3265916928,3265917183,FR
3265917184,3265917439,PL
-3265917440,3265917695,RU
3265917696,3265917951,SE
3265917952,3265918207,GB
-3265918208,3265918463,EU
3265918464,3265918719,AT
3265918720,3265918975,RU
3265918976,3265919231,NL
@@ -123396,32 +64663,21 @@
3265919488,3265919743,RU
3265919744,3265919999,DE
3265920000,3265920255,CZ
-3265920256,3265920511,TR
3265920512,3265920767,GB
3265920768,3265921023,RU
3265921024,3265986559,AE
3265986560,3266052095,NL
-3266052096,3266073823,DE
-3266073824,3266073839,GB
-3266073840,3266122751,DE
-3266122752,3266123007,EU
-3266123008,3266199807,DE
-3266199808,3266200063,EU
-3266200064,3266310911,DE
-3266310912,3266311167,EU
-3266311168,3266322431,DE
+3266052096,3266322431,DE
3266322432,3266330623,LT
3266330624,3266338815,GB
3266338816,3266339071,RU
3266339072,3266339327,UA
-3266339328,3266339583,ES
3266339840,3266340095,RU
3266340096,3266340607,PL
3266340608,3266340863,FI
3266340864,3266341119,CH
3266341120,3266341375,GB
3266341376,3266341631,DE
-3266341632,3266341887,GB
3266341888,3266342143,KW
3266342144,3266342399,CH
3266342400,3266342655,BE
@@ -123431,35 +64687,23 @@
3266343424,3266343679,RU
3266343680,3266343935,RO
3266343936,3266344191,CH
-3266344192,3266344447,UA
3266344448,3266344703,RU
3266344704,3266344959,ES
-3266344960,3266345727,DE
-3266345728,3266345983,DK
+3266344960,3266345983,DE
3266345984,3266346495,GB
3266346496,3266346751,IT
3266346752,3266347007,FR
-3266347008,3266347263,GB
-3266347264,3266351359,EU
-3266351360,3266352639,GB
-3266352640,3266352895,EU
+3266351360,3266352607,GB
3266352896,3266353567,GB
-3266353568,3266353583,EU
3266353584,3266353591,GB
-3266353592,3266353663,EU
3266353664,3266353671,GB
-3266353672,3266353679,EU
3266353680,3266353687,GB
-3266353688,3266353775,EU
3266353776,3266353783,US
-3266353784,3266353855,EU
3266353856,3266353863,GB
-3266353864,3266353879,EU
3266353880,3266353887,GB
-3266353888,3266353895,EU
3266353896,3266353903,GB
-3266353904,3266353919,EU
-3266353920,3266355199,GB
+3266353920,3266354175,GB
+3266354688,3266355199,GB
3266355200,3266363391,RO
3266363392,3266371583,GB
3266371584,3266379775,HU
@@ -123471,11 +64715,9 @@
3266384896,3266385919,RU
3266385920,3266386943,UA
3266386944,3266387967,PL
-3266387968,3266389247,FR
-3266389248,3266389327,LU
-3266389328,3266395135,FR
-3266395136,3266395647,NL
-3266395648,3266396159,FR
+3266387968,3266395647,FR
+3266395648,3266395903,NL
+3266395904,3266396159,FR
3266396160,3266412543,IT
3266412544,3266420735,AT
3266420736,3266428927,GB
@@ -123483,41 +64725,24 @@
3266437120,3266445311,GL
3266445312,3266472959,NL
3266472960,3266473215,SE
-3266473216,3266473807,NL
-3266473808,3266473823,GB
-3266473824,3266510847,NL
+3266473216,3266510847,NL
3266510848,3266543615,ES
3266543616,3266576383,IT
-3266576384,3266617327,DE
+3266576384,3266582783,DE
+3266583040,3266603519,DE
+3266604032,3266617327,DE
3266617328,3266617343,GB
-3266617344,3266634391,DE
+3266617344,3266634383,DE
3266634392,3266634399,EE
3266634400,3266641919,DE
3266641920,3266707455,PL
3266707456,3266772991,DK
3266772992,3266781183,IT
3266781184,3266789375,PL
-3266789376,3266796543,SM
-3266796544,3266796799,IT
-3266796800,3266797567,SM
-3266797568,3266798335,ES
-3266798336,3266798591,GB
-3266798592,3266798847,CZ
-3266798848,3266799103,GB
-3266799104,3266799615,NL
-3266799616,3266800639,GB
-3266800640,3266800895,CH
-3266800896,3266801663,GB
-3266801664,3266802215,BG
-3266802216,3266802687,GB
-3266802688,3266803711,FR
-3266803712,3266803815,GB
-3266803816,3266803823,NL
-3266803824,3266804223,GB
-3266804224,3266804479,NL
-3266804480,3266804735,GB
-3266804736,3266805247,DK
-3266805248,3266805759,GB
+3266789376,3266797567,SM
+3266797568,3266797823,GB
+3266797824,3266798079,ES
+3266798080,3266805759,GB
3266805760,3266813951,AT
3266813952,3266822143,UA
3266822144,3266830335,FR
@@ -123525,15 +64750,11 @@
3266836480,3266837503,LU
3266837504,3266838527,BE
3266838528,3266969599,IT
-3266969600,3267030095,RU
-3267030096,3267030103,KZ
-3267030104,3267032575,RU
-3267032576,3267032831,KZ
-3267032832,3267035135,RU
+3266969600,3267035135,RU
3267035136,3267039231,NO
3267039232,3267040255,DE
3267040256,3267041279,RO
-3267041280,3267043327,UA
+3267042304,3267043327,UA
3267043328,3267044351,GB
3267044352,3267045375,RU
3267045376,3267046399,PL
@@ -123554,7 +64775,7 @@
3267060736,3267061759,LV
3267061760,3267063807,UA
3267063808,3267064576,BE
-3267064577,3267064577,EU
+3267064577,3267064577,DE
3267064578,3267064831,BE
3267064832,3267065855,PL
3267066880,3267067903,IT
@@ -123588,756 +64809,183 @@
3267097600,3267098623,KZ
3267098624,3267099647,GB
3267099648,3267100671,IT
-3267100672,3267117311,FI
-3267117312,3267118079,AX
-3267118080,3267166207,FI
+3267100672,3267166207,FI
3267166208,3267231743,GB
3267231744,3267297279,RU
3267297280,3267362815,CH
-3267362816,3267368480,DK
-3267368481,3267368481,EU
-3267368482,3267426879,DK
-3267426880,3267426943,CH
-3267426944,3267428351,DK
+3267362816,3267428351,DK
3267428352,3267493887,GB
-3267493888,3267494143,DE
-3267494144,3267498239,GB
-3267498240,3267498495,IE
-3267498496,3267498751,DE
-3267498752,3267504383,GB
-3267504384,3267504639,AT
-3267504640,3267505151,FR
-3267505152,3267507711,DE
-3267507712,3267507743,GB
-3267507744,3267507775,DE
-3267507776,3267507807,GB
-3267507808,3267507839,ZA
-3267507840,3267508223,GB
-3267508224,3267508735,DE
-3267508736,3267508991,IL
-3267508992,3267509247,GB
-3267509248,3267509503,AT
-3267509504,3267509695,CH
-3267509696,3267509727,EU
-3267509728,3267509759,CH
-3267509760,3267510271,GB
-3267510272,3267512831,FR
-3267512832,3267513343,GB
+3267501056,3267504127,GB
+3267511296,3267512319,FR
3267513344,3267514367,FR
-3267514368,3267517951,DE
-3267517952,3267518463,GB
-3267518464,3267524607,DE
-3267524608,3267526655,EU
-3267526656,3267527679,DE
-3267527680,3267529215,FR
-3267529216,3267529471,GB
-3267529472,3267529727,FR
+3267514368,3267515391,DE
+3267516416,3267517439,DE
+3267520512,3267521535,DE
+3267522560,3267523583,DE
+3267527680,3267528703,FR
3267529728,3267530751,AT
-3267530752,3267534335,FR
-3267534336,3267534527,RS
-3267534528,3267534559,EU
-3267534560,3267534575,FR
-3267534576,3267534591,AT
-3267534592,3267538943,FR
-3267538944,3267540223,NL
-3267540224,3267540479,GB
-3267540480,3267541759,NL
-3267541760,3267542527,GB
-3267542528,3267542783,CH
-3267542784,3267543039,DE
-3267543040,3267543295,IT
-3267543296,3267543551,AT
-3267543552,3267544319,GB
-3267544320,3267544575,DE
-3267544576,3267544703,IT
-3267544704,3267544831,DE
-3267544832,3267545087,FR
-3267545088,3267545855,ES
-3267545856,3267546111,DE
-3267546112,3267546623,ES
-3267546624,3267547135,FR
-3267547136,3267547391,BE
-3267547392,3267547647,DE
-3267547648,3267549183,GB
-3267549184,3267550463,DK
-3267550464,3267550719,NL
-3267550720,3267551231,DK
-3267551232,3267551743,AT
-3267551744,3267551999,SE
-3267552000,3267552255,NO
-3267552256,3267553023,AT
-3267553024,3267553279,NL
-3267553280,3267554303,DK
-3267554304,3267554815,DE
-3267554816,3267555071,FR
-3267555072,3267555199,EU
-3267555200,3267555327,ZA
-3267555328,3267555583,FI
-3267555584,3267556095,GB
-3267556096,3267556351,NO
-3267556352,3267556607,GB
-3267556608,3267556863,NO
-3267556864,3267557375,IL
-3267557376,3267557631,NO
-3267557632,3267557887,AT
-3267557888,3267558399,IL
-3267558400,3267558911,CH
-3267558912,3267559423,AT
-3267559424,3267560703,DE
-3267560704,3267560711,GB
-3267560712,3267561407,DE
-3267561408,3267561471,CH
-3267561472,3267561727,DE
-3267561728,3267561759,GB
-3267561760,3267622527,DE
-3267622528,3267622559,GB
-3267622560,3267624959,DE
-3267624960,3267625471,GB
-3267625472,3267625727,FR
-3267625728,3267625983,BE
-3267625984,3267626239,NL
-3267626240,3267626495,BE
-3267626496,3267626751,ES
-3267626752,3267627007,RU
-3267627008,3267627263,EU
-3267627264,3267627347,DE
-3267627348,3267627351,EU
-3267627352,3267627391,DE
-3267627392,3267627423,EU
-3267627424,3267627519,DE
-3267627520,3267627775,EU
-3267627776,3267627807,DE
-3267627808,3267627871,EU
-3267627872,3267628031,DE
-3267628032,3267628287,IT
-3267628288,3267628327,FR
-3267628328,3267628543,EU
-3267628544,3267628799,IT
-3267628800,3267629055,HU
-3267629056,3267629311,CZ
-3267629312,3267629567,DK
-3267629568,3267629711,BE
-3267629712,3267629719,EU
-3267629720,3267629759,BE
-3267629760,3267629791,EU
-3267629792,3267629823,BE
-3267629824,3267630079,GR
-3267630080,3267630591,GB
-3267630592,3267630847,SK
-3267630848,3267630863,IT
-3267630864,3267630943,FR
-3267630944,3267630959,GB
-3267630960,3267631055,IT
-3267631056,3267631087,GB
-3267631088,3267631103,IT
+3267531776,3267532799,FR
+3267534848,3267536895,FR
+3267537920,3267538943,FR
+3267549184,3267550207,DK
+3267559424,3267624959,DE
+3267630080,3267631095,GB
+3267631096,3267631103,IT
3267631104,3267631615,GB
-3267631616,3267632127,DE
-3267632128,3267632383,EU
-3267632384,3267632511,BE
-3267632512,3267632639,EU
-3267632640,3267632895,IT
-3267632896,3267633151,BE
-3267633152,3267633679,NO
-3267633680,3267633727,EU
-3267633728,3267633855,NO
-3267633856,3267634175,EU
-3267634176,3267635711,GB
-3267635712,3267635967,EU
-3267635968,3267636223,BE
-3267636224,3267636735,EU
-3267636736,3267636783,ZA
-3267636784,3267636799,EU
-3267636800,3267636815,ZA
-3267636816,3267636831,EU
-3267636832,3267636991,ZA
-3267636992,3267637247,AT
-3267637248,3267637503,EU
-3267637504,3267637723,IT
-3267637724,3267637727,EU
-3267637728,3267637731,IT
-3267637732,3267637735,EU
-3267637736,3267637759,IT
-3267637760,3267637823,ES
-3267637824,3267638015,EU
-3267638016,3267638271,ES
-3267638272,3267638527,BE
-3267638528,3267638783,DK
-3267638784,3267639295,CZ
-3267639296,3267639551,NL
-3267639552,3267639807,GB
-3267639808,3267640063,CH
-3267640064,3267640319,GB
-3267640320,3267640575,CH
-3267640576,3267640831,IT
-3267640832,3267641087,GR
-3267641088,3267641343,EU
-3267641344,3267641855,IE
-3267641856,3267642111,GB
-3267642112,3267642367,SE
-3267642368,3267642623,GB
-3267642624,3267642879,NO
-3267642880,3267643135,SI
-3267643136,3267643391,BE
-3267643392,3267643407,RU
-3267643408,3267643423,EU
-3267643424,3267643439,RU
-3267643440,3267643455,EU
-3267643456,3267643487,RU
-3267643488,3267643519,EU
-3267643520,3267643647,RU
-3267643648,3267643903,GB
-3267643904,3267644159,EU
-3267644160,3267644415,BE
-3267644416,3267644671,DE
-3267644672,3267644927,SI
-3267644928,3267644935,EU
-3267644936,3267644943,BE
-3267644944,3267644951,EU
-3267644952,3267644959,BE
-3267644960,3267644975,FR
-3267644976,3267644983,GB
-3267644984,3267645055,BE
-3267645056,3267645439,EU
-3267645440,3267645695,GB
-3267645696,3267645951,DE
-3267645952,3267647487,EU
-3267647488,3267647743,GB
-3267647744,3267647999,SI
-3267648000,3267648255,DE
-3267648256,3267648511,GB
-3267648512,3267648767,DE
-3267648768,3267649023,NL
-3267649024,3267649279,RU
-3267649280,3267649535,DE
-3267649536,3267649791,EU
-3267649792,3267650303,NL
-3267650304,3267650319,EU
-3267650320,3267650367,AT
-3267650368,3267650463,EU
-3267650464,3267650495,AT
-3267650496,3267650527,EU
-3267650528,3267650559,AT
-3267650560,3267651071,GB
-3267651072,3267651327,DE
-3267651328,3267651583,EU
-3267651584,3267651839,FR
-3267651840,3267652095,EU
-3267652096,3267652351,GB
-3267652352,3267652607,EU
-3267652608,3267652863,DE
-3267652864,3267653119,PT
-3267653120,3267653375,GB
-3267653376,3267653887,EU
-3267653888,3267654143,GB
-3267654144,3267654911,EU
-3267654912,3267655167,SK
-3267655168,3267655679,GB
-3267655680,3267656191,IT
-3267656192,3267656447,DK
-3267656448,3267657215,EU
-3267657216,3267657471,HU
-3267657472,3267657487,RO
-3267657488,3267657503,EU
-3267657504,3267657575,RO
-3267657576,3267657663,EU
-3267657664,3267657695,RO
-3267657696,3267657703,EU
-3267657704,3267657711,RO
-3267657712,3267657983,EU
-3267657984,3267658239,GB
-3267658240,3267658495,IT
-3267658496,3267658751,EU
-3267658752,3267659263,CH
-3267659264,3267659519,EU
-3267659520,3267659775,IT
-3267659776,3267660287,EU
-3267660288,3267660543,CH
-3267660544,3267660695,ES
-3267660696,3267660719,EU
-3267660720,3267660791,ES
-3267660792,3267661311,EU
-3267661312,3267661567,SK
-3267661568,3267661679,GB
-3267661680,3267661687,EU
-3267661688,3267661823,GB
-3267661824,3267661851,ES
-3267661852,3267661855,EU
-3267661856,3267661887,ES
-3267661888,3267662015,EU
-3267662016,3267662079,ES
-3267662080,3267662847,EU
-3267662848,3267662879,IE
-3267662880,3267662887,EU
-3267662888,3267662895,GB
-3267662896,3267662911,EU
-3267662912,3267662951,IE
-3267662952,3267662959,GB
-3267662960,3267662991,IE
-3267662992,3267663007,EU
-3267663008,3267663103,IE
-3267663104,3267663327,IT
-3267663328,3267663359,EU
-3267663360,3267663871,GB
-3267663872,3267664127,DE
-3267664128,3267664383,EU
-3267664384,3267664639,GB
-3267664640,3267664671,SK
-3267664672,3267664799,EU
-3267664800,3267664815,SK
-3267664816,3267664831,EU
-3267664832,3267664879,SK
-3267664880,3267664887,EU
-3267664888,3267664895,SK
-3267664896,3267665919,EU
-3267665920,3267666191,GB
-3267666192,3267666207,GR
-3267666208,3267666255,GB
-3267666256,3267666263,GR
-3267666264,3267666271,GB
-3267666272,3267666431,GR
-3267666432,3267667199,GB
-3267667200,3267667455,NL
+3267634176,3267635199,GB
+3267636864,3267636991,ZA
+3267648320,3267648335,GB
+3267650320,3267650335,AT
+3267660608,3267660671,ES
+3267665920,3267666943,GB
3267667456,3267667967,GB
-3267667968,3267670015,EU
-3267670016,3267671551,ZA
-3267671552,3267671583,DE
-3267671584,3267671615,EU
-3267671616,3267671807,DE
-3267671808,3267672063,NO
-3267672064,3267672223,DE
-3267672224,3267672255,EU
-3267672256,3267672319,DE
-3267672320,3267672575,EU
-3267672576,3267672831,AT
-3267672832,3267672847,FR
-3267672848,3267672855,EU
-3267672856,3267673015,FR
-3267673016,3267673023,EU
-3267673024,3267673087,FR
-3267673088,3267673487,DE
-3267673488,3267673495,EU
-3267673496,3267673543,DE
-3267673544,3267673599,EU
-3267673600,3267673759,DE
-3267673760,3267673807,EU
-3267673808,3267673855,DE
-3267673856,3267674111,EU
-3267674112,3267674127,NL
-3267674128,3267674159,EU
-3267674160,3267674167,BE
-3267674168,3267674175,EU
-3267674176,3267674207,BE
+3267670016,3267671039,ZA
3267674208,3267674239,GB
-3267674240,3267674303,BE
-3267674304,3267674335,EU
-3267674336,3267674367,GB
-3267674368,3267674879,BE
-3267674880,3267675135,EU
-3267675136,3267675391,AT
-3267675392,3267675619,CH
-3267675620,3267675623,EU
-3267675624,3267675647,CH
-3267675648,3267675775,CY
-3267675776,3267675903,CH
-3267675904,3267676159,EU
-3267676160,3267676415,GB
-3267676416,3267676671,EU
-3267676672,3267676679,HU
-3267676680,3267676687,EU
-3267676688,3267676711,HU
-3267676712,3267676735,EU
-3267676736,3267676767,HU
-3267676768,3267676783,EU
-3267676784,3267676799,HU
-3267676800,3267676863,EU
-3267676864,3267676879,HU
-3267676880,3267676927,EU
-3267676928,3267677367,GB
-3267677368,3267677375,EU
-3267677376,3267677695,GB
-3267677696,3267678207,EU
-3267678208,3267678719,FR
-3267678720,3267678975,EU
-3267678976,3267679231,NL
-3267679232,3267679487,EU
-3267679488,3267679743,BE
-3267679744,3267679999,EU
-3267680000,3267680255,CZ
-3267680256,3267680767,SK
-3267680768,3267681279,EU
-3267681280,3267681535,FR
-3267681536,3267681791,EU
-3267681792,3267681887,FR
-3267681888,3267681903,EU
-3267681904,3267681975,FR
-3267681976,3267682015,EU
-3267682016,3267682047,FR
-3267682048,3267682303,EU
-3267682304,3267682559,BE
-3267682560,3267683335,EU
-3267683336,3267683359,PL
-3267683360,3267683391,EU
-3267683392,3267683463,PL
-3267683464,3267683519,EU
-3267683520,3267683527,PL
-3267683528,3267683535,EU
-3267683536,3267683551,PL
-3267683552,3267683567,EU
-3267683568,3267683575,PL
-3267683576,3267683911,EU
-3267683912,3267683935,PL
-3267683936,3267684351,EU
-3267684352,3267685119,GB
-3267685120,3267685375,DE
-3267685376,3267685887,NL
-3267685888,3267686399,CH
-3267686400,3267687935,EU
-3267687936,3267687999,IE
-3267688000,3267688063,EU
-3267688064,3267688191,IE
-3267688192,3267688703,DE
-3267688704,3267688959,SE
-3267688960,3267689215,EU
-3267689216,3267689247,CZ
-3267689248,3267689327,EU
-3267689328,3267689471,CZ
-3267689472,3267689727,EU
-3267689728,3267689983,GB
-3267689984,3267690239,FR
-3267690240,3267690271,EU
-3267690272,3267690495,FR
+3267684352,3267684863,GB
3267690496,3267691519,FI
3267691520,3267692543,SE
-3267692544,3267710847,FI
-3267710848,3267710975,SE
-3267710976,3267741439,FI
-3267741440,3267741695,BE
-3267741696,3267741759,FI
+3267692544,3267741759,FI
3267741760,3267741791,SE
-3267741792,3267741855,FI
-3267741856,3267741919,SE
-3267741920,3267743743,FI
-3267743744,3267743999,AX
-3267744000,3267744255,DE
-3267744256,3267744511,BE
-3267744512,3267746303,FI
-3267746304,3267746559,NL
-3267746560,3267756031,FI
-3267756032,3267760639,SE
-3267760640,3267761151,NO
-3267761152,3267761919,SE
-3267761920,3267762175,NO
-3267762176,3267763711,SE
-3267763712,3267763967,NO
-3267763968,3267764223,SE
-3267764224,3267764479,NO
-3267764480,3267765775,SE
-3267765776,3267765791,NO
-3267765792,3267765823,SE
-3267765824,3267765855,NO
-3267765856,3267766031,SE
-3267766032,3267766047,NO
-3267766048,3267766303,SE
-3267766304,3267766319,NO
-3267766320,3267766351,SE
-3267766352,3267766367,NO
-3267766368,3267766383,SE
-3267766384,3267766415,NO
-3267766416,3267787007,SE
-3267787008,3267787263,NO
-3267787264,3267787519,SE
-3267787520,3267787775,NO
-3267787776,3267793919,SE
-3267793920,3267794175,DK
-3267794176,3267821567,SE
-3267821568,3267824639,FR
-3267824640,3267824895,MQ
-3267824896,3267845375,FR
+3267741792,3267756031,FI
+3267756032,3267821567,SE
+3267821568,3267845375,FR
3267845376,3267845631,GP
3267845632,3267846655,FR
3267846656,3267846911,MQ
3267846912,3267887103,FR
-3267887104,3268017407,GB
-3268017408,3268017663,KE
-3268017664,3268078591,GB
-3268078592,3268078847,EU
-3268078848,3268139005,GB
-3268139006,3268139006,EU
-3268139007,3268149247,GB
+3267887104,3268149247,GB
3268149248,3268165631,EE
-3268165632,3268167170,CH
-3268167171,3268167171,EU
-3268167172,3268173823,CH
+3268165632,3268173823,CH
3268173824,3268182015,MT
3268182016,3268198399,PL
3268198400,3268214783,MA
-3268214784,3268215583,EU
3268215584,3268215615,GB
-3268215616,3268215647,EU
3268215648,3268215679,GB
-3268215680,3268215711,EU
3268215712,3268215743,GB
-3268215744,3268215807,EU
3268215808,3268216063,GB
-3268216064,3268218111,EU
3268218112,3268218367,GB
-3268218368,3268219807,EU
3268219808,3268219823,GB
-3268219824,3268221439,EU
3268221440,3268221471,GB
-3268221472,3268221503,EU
3268221504,3268221599,GB
-3268221600,3268221695,EU
3268221696,3268221951,GB
-3268221952,3268222975,EU
3268222976,3268223167,GB
-3268223168,3268223199,EU
3268223200,3268223231,GB
-3268223232,3268224767,EU
3268224768,3268225023,US
-3268225024,3268226367,EU
-3268226368,3268226815,GB
-3268226816,3268227327,EU
+3268226368,3268226399,GB
+3268226496,3268226663,GB
+3268226688,3268226815,GB
3268227328,3268227391,GB
-3268227392,3268227519,EU
3268227520,3268227615,GB
-3268227616,3268231167,EU
3268231168,3268231199,GB
-3268231200,3268231319,EU
3268231320,3268231359,GB
-3268231360,3268231391,EU
3268231392,3268231423,GB
-3268231424,3268231647,EU
3268231648,3268231679,GB
-3268231680,3268231743,EU
3268231744,3268231807,GB
-3268231808,3268232223,EU
3268232224,3268232243,GB
-3268232244,3268232351,EU
3268232352,3268232367,GB
-3268232368,3268232383,EU
3268232384,3268232415,GB
-3268232416,3268232479,EU
3268232480,3268232575,GB
-3268232576,3268232959,EU
3268232960,3268233087,GB
-3268233088,3268233983,EU
3268233984,3268234047,GB
-3268234048,3268234175,EU
3268234176,3268234239,GB
-3268234240,3268234559,EU
3268234560,3268234623,GB
-3268234624,3268235007,EU
3268235008,3268235263,GB
3268235264,3268235519,DE
3268235520,3268235775,GB
-3268235776,3268235935,EU
3268235936,3268236031,GB
-3268236032,3268236191,EU
3268236192,3268236207,GB
-3268236208,3268236543,EU
3268236544,3268236607,GB
-3268236608,3268236671,EU
3268236672,3268236799,GB
-3268236800,3268237855,EU
-3268237856,3268237887,GB
-3268237888,3268238335,EU
-3268238336,3268238847,GB
-3268238848,3268239103,EU
-3268239104,3268239359,GB
-3268239360,3268239583,EU
+3268238336,3268238359,GB
+3268238368,3268238399,GB
+3268238472,3268238543,GB
+3268238552,3268238847,GB
3268239584,3268240127,GB
-3268240128,3268240159,EU
3268240160,3268240191,GB
-3268240192,3268240383,EU
3268240384,3268240399,GB
-3268240400,3268240479,EU
3268240480,3268240487,GB
-3268240488,3268240687,EU
3268240688,3268240695,GB
-3268240696,3268240711,EU
3268240712,3268240735,GB
-3268240736,3268240743,EU
3268240744,3268240751,GB
-3268240752,3268240975,EU
3268240976,3268240991,GB
-3268240992,3268241007,EU
3268241008,3268241023,GB
-3268241024,3268241543,EU
3268241544,3268241551,GB
-3268241552,3268241639,EU
3268241640,3268241655,GB
-3268241656,3268242495,EU
3268242496,3268242523,GB
-3268242524,3268242879,EU
3268242880,3268243071,GB
-3268243072,3268243327,EU
3268243328,3268243391,GB
-3268243392,3268243743,EU
-3268243744,3268243775,GB
-3268243776,3268243967,EU
-3268243968,3268244031,GB
-3268244032,3268244775,EU
3268244776,3268244783,GB
-3268244784,3268244791,EU
3268244792,3268244799,GB
-3268244800,3268245503,EU
3268245504,3268245759,GB
-3268245760,3268246271,EU
3268246272,3268246783,GB
-3268246784,3268246799,EU
-3268246800,3268246807,GB
-3268246808,3268246975,EU
3268246976,3268246991,GB
-3268246992,3268248319,EU
3268248320,3268248447,GB
-3268248448,3268248511,EU
3268248512,3268248543,GB
-3268248544,3268249599,EU
-3268249600,3268251647,GB
-3268251648,3268254463,EU
+3268249600,3268251311,GB
+3268251312,3268251327,IE
+3268251328,3268251647,GB
3268254464,3268254543,GB
-3268254544,3268254591,EU
3268254592,3268254607,GB
-3268254608,3268254623,EU
3268254624,3268254639,GB
-3268254640,3268254895,EU
3268254896,3268254903,GB
-3268254904,3268255823,EU
3268255824,3268255863,GB
-3268255864,3268255871,EU
-3268255872,3268255887,GB
-3268255888,3268255895,EU
3268255896,3268255919,GB
-3268255920,3268255951,EU
3268255952,3268255959,GB
-3268255960,3268255967,EU
3268255968,3268255983,GB
-3268255984,3268256895,EU
3268256896,3268256959,GB
-3268256960,3268257023,EU
3268257024,3268257055,GB
-3268257056,3268257087,EU
3268257088,3268257119,GB
-3268257120,3268257415,EU
3268257416,3268257419,GB
-3268257420,3268257431,EU
3268257432,3268257439,IT
-3268257440,3268257463,EU
3268257464,3268257471,GB
-3268257472,3268257487,EU
3268257488,3268257527,GB
-3268257528,3268258559,EU
3268258560,3268258623,GB
-3268258624,3268258687,EU
3268258688,3268258751,GB
-3268258752,3268259519,EU
3268259520,3268259527,GB
-3268259528,3268259543,EU
3268259544,3268259551,GB
-3268259552,3268259559,EU
3268259560,3268259575,GB
-3268259576,3268259807,EU
3268259808,3268259815,GB
-3268259816,3268259817,EU
-3268259818,3268259819,GB
-3268259820,3268259831,EU
3268259832,3268260095,GB
-3268260096,3268260351,EU
3268260352,3268260383,GB
-3268260384,3268260415,EU
3268260416,3268260447,GB
-3268260448,3268260511,EU
3268260512,3268260607,GB
-3268260608,3268260639,EU
3268260640,3268260647,GB
-3268260648,3268260655,EU
-3268260656,3268260671,GB
-3268260672,3268261935,EU
3268261936,3268261951,GB
-3268261952,3268262767,EU
3268262768,3268262783,GB
-3268262784,3268262879,EU
3268262880,3268262887,GB
-3268262888,3268263231,EU
3268263232,3268263263,GB
-3268263264,3268263775,EU
3268263776,3268263783,GB
-3268263784,3268264735,EU
3268264736,3268264767,GB
-3268264768,3268265415,EU
3268265416,3268265431,GB
-3268265432,3268265983,EU
3268265984,3268266495,GB
-3268266496,3268266983,EU
3268266984,3268266991,GB
-3268266992,3268267535,EU
3268267536,3268267551,GB
-3268267552,3268267583,EU
3268267584,3268267599,GB
-3268267600,3268267615,EU
3268267616,3268267647,GB
-3268267648,3268267743,EU
3268267744,3268267775,GB
-3268267776,3268267951,EU
3268267952,3268267959,GB
-3268267960,3268268543,EU
-3268268544,3268268799,GB
-3268268800,3268270351,EU
-3268270352,3268270367,GB
-3268270368,3268270495,EU
-3268270496,3268270511,GB
-3268270512,3268270847,EU
-3268270848,3268271359,GB
-3268271360,3268271911,EU
-3268271912,3268271919,GB
-3268271920,3268271927,EU
-3268271928,3268271935,GB
-3268271936,3268272703,EU
+3268268032,3268272127,GB
+3268272640,3268272671,GB
3268272704,3268272711,GB
-3268272712,3268272727,EU
3268272728,3268272735,GB
-3268272736,3268273023,EU
3268273024,3268273151,GB
-3268273152,3268274111,EU
3268274112,3268274175,GB
-3268274176,3268274455,EU
3268274456,3268274459,GB
-3268274460,3268274527,EU
3268274528,3268274543,GB
-3268274544,3268274559,EU
3268274560,3268274591,GB
-3268274592,3268275983,EU
3268275984,3268275999,GB
-3268276000,3268276639,EU
3268276640,3268276655,GB
-3268276656,3268276671,EU
3268276672,3268276687,GB
-3268276688,3268276863,EU
3268276864,3268276895,GB
-3268276896,3268277055,EU
3268277056,3268277119,GB
-3268277120,3268277759,EU
3268277760,3268278015,GB
-3268278016,3268278463,EU
3268278464,3268278495,GB
-3268278496,3268280063,EU
3268280064,3268280319,GB
-3268280320,3268335615,FR
-3268335616,3268335871,CH
-3268335872,3268345855,FR
+3268280320,3268345855,FR
3268345856,3268411391,GB
-3268411392,3268424959,AT
-3268424960,3268425727,CH
-3268425728,3268426495,AT
-3268426496,3268428031,CH
-3268428032,3268428287,AT
-3268428288,3268428543,CH
-3268428544,3268429055,AT
-3268429056,3268429311,CH
-3268429312,3268429567,AT
-3268429568,3268430079,CH
-3268430080,3268464127,AT
+3268411392,3268426751,AT
+3268426752,3268427775,CH
+3268427776,3268464127,AT
3268464128,3268464383,LI
3268464384,3268476927,AT
3268476928,3268537087,CH
@@ -124345,11 +64993,7 @@
3268537344,3268542463,CH
3268542464,3268607999,PT
3268608000,3268673535,FI
-3268673536,3268703799,CZ
-3268703800,3268703807,CR
-3268703808,3268728287,CZ
-3268728288,3268728299,CR
-3268728300,3268739071,CZ
+3268673536,3268739071,CZ
3268739072,3268739327,DE
3268739328,3268739583,PL
3268739584,3268739839,DE
@@ -124358,17 +65002,14 @@
3268740352,3268740607,DE
3268740608,3268740863,RO
3268740864,3268741119,CH
-3268741120,3268741375,FR
3268741376,3268741631,LV
3268741888,3268742143,AT
3268742144,3268742399,RU
-3268742400,3268742655,CZ
3268742656,3268742911,BE
3268742912,3268743167,NL
3268743168,3268743423,RO
3268743680,3268743935,GB
3268743936,3268744191,ES
-3268744192,3268744447,DE
3268744448,3268744703,RU
3268744704,3268744959,PL
3268744960,3268745215,UA
@@ -124387,7 +65028,7 @@
3268765184,3268765695,RU
3268765696,3268766719,UA
3268766720,3268767231,IL
-3268767232,3268767743,UA
+3268767232,3268767743,RU
3268767744,3268768255,NL
3268768256,3268768767,BE
3268768768,3268769279,RU
@@ -124399,375 +65040,132 @@
3268771840,3268788223,NO
3268788224,3268804607,CZ
3268804608,3268869375,FR
-3268869376,3268870143,PF
-3268870144,3268876063,FI
-3268876064,3268876127,SE
-3268876128,3268876191,FI
-3268876192,3268876223,SE
-3268876224,3268881151,FI
-3268881152,3268881407,SE
-3268881408,3268881919,FI
-3268881920,3268882175,SE
-3268882176,3268916223,FI
-3268916224,3268916479,GB
-3268916480,3268920575,FI
-3268920576,3268920831,SE
-3268920832,3268932351,FI
-3268932352,3268932607,RU
-3268932608,3268935679,FI
+3268869376,3268869631,PF
+3268869632,3268870143,FR
+3268870144,3268935679,FI
3268935680,3269066751,GB
-3269066752,3269118087,SE
-3269118088,3269118091,GB
-3269118092,3269131555,SE
-3269131556,3269131559,NO
-3269131560,3269132287,SE
+3269066752,3269132287,SE
3269132288,3269197823,GR
3269197824,3269263359,RU
-3269263360,3269264639,EU
3269264640,3269264895,DE
-3269264896,3269265855,EU
3269265856,3269265919,DE
3269265920,3269266175,GB
-3269266176,3269266687,EU
3269266688,3269266943,DE
3269266944,3269267455,GB
-3269267456,3269272575,EU
3269272576,3269272583,DE
-3269272584,3269272703,EU
3269272704,3269272831,DE
3269272832,3269272847,GB
3269272848,3269272863,NL
3269272864,3269272887,GB
-3269272888,3269272895,EU
3269272896,3269273087,NL
3269273088,3269273343,DE
-3269273344,3269273599,EU
3269273600,3269273855,GB
3269273856,3269275647,DE
-3269275648,3269275903,GB
3269275904,3269276159,DE
3269276160,3269276415,GB
-3269276416,3269277183,EU
3269277184,3269277695,FR
3269277696,3269277759,GB
3269277760,3269278719,NL
-3269278720,3269279231,EU
3269279232,3269279487,NL
-3269279488,3269279671,EU
3269279672,3269279679,CH
-3269279680,3269279743,EU
3269279744,3269280255,GB
3269280256,3269280271,DE
3269280272,3269280767,NL
3269280768,3269281023,GB
3269281024,3269281279,DE
3269281280,3269281535,FR
-3269281536,3269282047,EU
3269282048,3269282303,DE
3269282304,3269282559,GB
3269282560,3269282815,FR
-3269282816,3269283327,EU
3269283328,3269283583,DE
-3269283584,3269283871,EU
3269283872,3269283903,DE
-3269283904,3269284095,EU
3269284096,3269284351,GB
-3269284352,3269284863,EU
-3269284864,3269285055,FR
-3269285056,3269285087,EU
+3269284864,3269285079,FR
3269285088,3269285135,DE
3269285136,3269285151,GB
3269285152,3269285215,DE
-3269285216,3269285311,EU
3269285312,3269285327,DE
-3269285328,3269285335,EU
3269285336,3269285343,FR
3269285344,3269285344,GB
-3269285345,3269285345,EU
-3269285346,3269285375,GB
-3269285376,3269285631,FR
+3269285346,3269285631,GB
3269285632,3269285887,DE
-3269285888,3269286399,EU
3269286400,3269286463,DE
-3269286464,3269288687,EU
3269288688,3269288959,DE
-3269288960,3269290559,EU
3269290560,3269290575,DE
-3269290576,3269290591,EU
3269290592,3269290687,DE
-3269290688,3269290735,EU
3269290736,3269290743,DE
-3269290744,3269291263,EU
3269291264,3269291519,DE
3269291520,3269291575,GB
-3269291576,3269291583,EU
3269291584,3269291647,GB
-3269291648,3269291775,EU
3269291776,3269292287,ES
-3269292288,3269293119,EU
3269293120,3269293151,DE
-3269293152,3269293207,EU
3269293208,3269293215,DE
-3269293216,3269293247,EU
3269293248,3269293279,DE
-3269293280,3269293375,EU
3269293376,3269293391,DE
-3269293392,3269293855,EU
3269293856,3269293887,DE
-3269293888,3269293919,EU
3269293920,3269293951,DE
-3269293952,3269296231,EU
+3269294080,3269295103,GB
3269296232,3269296235,DE
-3269296236,3269296367,EU
3269296368,3269296375,DE
-3269296376,3269297151,EU
3269297152,3269297663,GB
-3269297664,3269298663,EU
3269298664,3269298671,DE
-3269298672,3269303039,EU
3269303040,3269303295,DE
3269303296,3269303423,GB
-3269303424,3269303551,EU
3269303552,3269303679,DE
-3269303680,3269305343,EU
3269305344,3269305351,DE
-3269305352,3269305855,EU
3269305856,3269306879,DE
-3269306880,3269307647,EU
3269307648,3269307903,DE
-3269307904,3269310655,EU
3269310656,3269310671,DE
-3269310672,3269310975,EU
3269310976,3269311231,DE
-3269311232,3269311871,EU
3269311872,3269311999,DE
-3269312000,3269313791,EU
3269313792,3269314175,DE
-3269314176,3269314191,EU
3269314192,3269314199,DE
-3269314200,3269315583,EU
3269315584,3269315591,DE
-3269315592,3269317631,EU
3269317632,3269317663,GB
3269317664,3269317671,IE
3269317672,3269317887,GB
3269317888,3269318399,DE
3269318400,3269318655,GB
3269318656,3269318983,DE
-3269318984,3269319007,EU
3269319008,3269319047,DE
-3269319048,3269319055,EU
3269319056,3269319071,DE
-3269319072,3269319135,EU
3269319136,3269320447,DE
-3269320448,3269320703,EU
3269320704,3269321727,GB
-3269321728,3269322239,EU
3269322240,3269322495,DE
-3269322496,3269322655,EU
3269322656,3269322671,DE
-3269322672,3269322751,EU
3269322752,3269323263,DE
-3269323264,3269326847,EU
3269326848,3269326855,DE
-3269326856,3269326959,EU
3269326960,3269326971,DE
-3269326972,3269326991,EU
3269326992,3269326999,DE
-3269327000,3269327023,EU
3269327024,3269327039,DE
-3269327040,3269327055,EU
3269327056,3269327103,DE
-3269327104,3269327759,EU
3269327760,3269327767,DE
-3269327768,3269327863,EU
3269327864,3269328383,DE
-3269328384,3269328895,EU
3269328896,3269459967,GB
3269459968,3269525503,ES
-3269525504,3269556223,IR
-3269556224,3269556479,AE
-3269556480,3269591039,IR
+3269525504,3269591039,IR
3269591040,3269621759,RU
-3269621760,3269623551,BY
-3269623552,3269656575,RU
+3269621760,3269623295,BY
+3269623296,3269656575,RU
3269656576,3269722111,GB
-3269722112,3269750799,CZ
-3269750800,3269750815,CR
-3269750816,3269771007,CZ
-3269771008,3269771263,GB
-3269771264,3269787647,CZ
+3269722112,3269787647,CZ
3269787648,3269853183,NL
3269853184,3269918719,CH
3269918720,3269984255,DE
3269984256,3270049791,AT
-3270049792,3270062191,DE
-3270062192,3270062195,ES
-3270062196,3270078391,DE
-3270078392,3270078395,ES
-3270078396,3270100735,DE
-3270100736,3270100767,GB
-3270100768,3270115327,DE
-3270115328,3270117503,EU
-3270117504,3270117631,DK
-3270117632,3270122239,EU
-3270122240,3270122495,DK
-3270122496,3270123715,EU
-3270123716,3270123719,DK
-3270123720,3270123775,EU
-3270123776,3270124031,DK
-3270124032,3270124543,EU
-3270124544,3270124799,DK
-3270124800,3270125055,EU
-3270125056,3270125567,DK
-3270125568,3270126079,EU
-3270126080,3270126335,DK
-3270126336,3270126623,EU
-3270126624,3270126655,DK
-3270126656,3270131967,EU
-3270131968,3270132223,NO
-3270132224,3270132991,EU
-3270132992,3270133023,NO
-3270133024,3270136927,EU
-3270136928,3270136959,NO
-3270136960,3270136991,EU
-3270136992,3270137055,NO
-3270137056,3270140927,EU
-3270140928,3270141439,NO
-3270141440,3270142207,EU
-3270142208,3270142463,NO
-3270142464,3270143999,EU
-3270144000,3270144767,NO
-3270144768,3270146815,EU
-3270146816,3270147327,NO
-3270147328,3270147583,EU
-3270147584,3270148095,NO
-3270148096,3270151423,FI
-3270151424,3270151935,EU
-3270151936,3270154527,FI
-3270154528,3270155007,EU
-3270155008,3270155775,FI
-3270155776,3270156287,EU
-3270156288,3270156799,DK
-3270156800,3270159615,EU
-3270159616,3270159871,DK
-3270159872,3270164991,EU
-3270164992,3270165247,NO
-3270165248,3270166527,EU
-3270166528,3270167807,NO
-3270167808,3270169087,EU
-3270169088,3270169343,NO
-3270169344,3270170111,EU
-3270170112,3270170623,NO
-3270170624,3270174719,EU
-3270174720,3270174975,NO
-3270174976,3270175743,EU
-3270175744,3270175999,NO
-3270176000,3270181119,EU
-3270181120,3270181375,CH
-3270181376,3270181631,EU
-3270181632,3270181887,CH
-3270181888,3270182143,EU
-3270182144,3270182399,CH
-3270182400,3270182655,EU
-3270182656,3270183679,CH
-3270183680,3270189055,EU
-3270189056,3270189311,BE
-3270189312,3270190079,EU
-3270190080,3270190591,IT
-3270190592,3270191103,CH
-3270191104,3270191935,EU
-3270191936,3270192047,CH
-3270192048,3270196991,EU
-3270196992,3270197247,CH
-3270197248,3270200063,EU
-3270200064,3270200319,NL
-3270200320,3270201343,EU
-3270201344,3270201599,NL
-3270201600,3270202879,EU
-3270202880,3270203135,NL
-3270203136,3270205439,EU
-3270205440,3270205695,NL
-3270205696,3270205983,EU
-3270205984,3270205999,ES
-3270206000,3270206063,EU
-3270206064,3270206079,ES
-3270206080,3270206975,EU
-3270206976,3270207231,ES
-3270207232,3270207487,CH
-3270207488,3270207743,EU
-3270207744,3270207903,IT
-3270207904,3270207999,EU
-3270208000,3270208255,CH
-3270208256,3270208511,LU
-3270208512,3270208767,EU
-3270208768,3270209023,RO
-3270209024,3270209279,NL
-3270209280,3270212351,EU
-3270212352,3270212863,NL
-3270212864,3270213119,EU
-3270213120,3270213375,NL
-3270213376,3270213887,EU
-3270213888,3270214279,PT
-3270214280,3270214287,US
-3270214288,3270214303,PT
-3270214304,3270214319,EU
-3270214320,3270215439,PT
-3270215440,3270215519,EU
-3270215520,3270215935,PT
-3270215936,3270216191,EU
-3270216192,3270216351,PT
-3270216352,3270216383,EU
-3270216384,3270216703,PT
-3270216704,3270216735,EU
-3270216736,3270216751,IT
-3270216752,3270216799,EU
-3270216800,3270216815,IT
-3270216816,3270216831,EU
-3270216832,3270216879,IT
-3270216880,3270217471,EU
-3270217472,3270217727,CH
-3270217728,3270218495,EU
-3270218496,3270218751,CH
-3270218752,3270224639,EU
-3270224640,3270224895,CH
-3270224896,3270230271,EU
-3270230272,3270230783,LU
-3270230784,3270231295,EU
-3270231296,3270231647,LU
-3270231648,3270232575,EU
-3270232576,3270232831,LU
-3270232832,3270234111,EU
-3270234112,3270234367,LU
-3270234368,3270234623,NL
-3270234624,3270235135,EU
-3270235136,3270236159,NL
-3270236160,3270238207,EU
-3270238208,3270238719,NL
-3270238720,3270238975,EU
-3270238976,3270239487,CH
-3270239488,3270241791,EU
-3270241792,3270242559,RO
-3270242560,3270243327,EU
-3270243328,3270243839,RO
-3270243840,3270244095,EU
-3270244096,3270244351,NL
-3270244352,3270244863,CH
-3270244864,3270245887,EU
-3270245888,3270246143,RO
-3270246144,3270246399,CH
-3270246400,3270247951,SE
-3270247952,3270247955,NO
-3270247956,3270348287,SE
-3270348288,3270348543,EU
-3270348544,3270369919,SE
-3270369920,3270369927,NO
-3270369928,3270377471,SE
+3270049792,3270115327,DE
+3270140928,3270141183,NO
+3270148352,3270149887,FI
+3270150656,3270151423,FI
+3270152704,3270153727,FI
+3270166528,3270167551,NO
+3270205440,3270207487,ES
+3270208512,3270209535,NL
+3270234112,3270242303,NL
+3270246400,3270377471,SE
3270377472,3270443007,GB
3270443008,3270508543,DK
-3270508544,3270522367,FI
-3270522368,3270522623,AX
-3270522624,3270639615,FI
+3270508544,3270639615,FI
3270639616,3270640127,PL
3270640128,3270642175,RU
3270642176,3270642687,NO
@@ -124789,10 +65187,8 @@
3270649856,3270650111,DK
3270650112,3270650367,AT
3270650368,3270650623,DK
-3270650624,3270651391,FR
-3270651392,3270651647,DE
+3270650624,3270651135,FR
3270651648,3270651903,FR
-3270651904,3270652415,IT
3270652416,3270652671,DK
3270652672,3270652927,CH
3270652928,3270653183,PL
@@ -124814,35 +65210,26 @@
3270670336,3270672383,RU
3270672384,3270680575,GB
3270680576,3270688767,FR
-3270688768,3270781343,IT
-3270781344,3270781359,RO
-3270781360,3270808127,IT
-3270808128,3270808159,LU
-3270808160,3270836223,IT
+3270688768,3270836223,IT
3270836224,3270901759,DE
-3270901760,3270905855,IT
-3270905856,3270906111,EU
-3270906112,3270909951,IT
-3270909952,3270911839,DE
+3270901760,3270909951,IT
+3270909952,3270911807,DE
3270911840,3270911871,PL
3270911872,3270911935,DE
3270911936,3270911967,PL
3270911968,3270911999,NL
-3270912000,3270913535,DE
-3270913536,3270913791,EU
-3270913792,3270920703,DE
+3270913024,3270920703,DE
3270920704,3270921215,UA
3270921216,3270921471,DK
3270921472,3270921727,UA
3270921728,3270922239,GB
-3270922240,3270926335,DE
-3270926336,3270926591,US
+3270922240,3270924287,DE
+3270926336,3270926591,AT
3270926592,3270926847,CH
3270926848,3270927103,PL
3270927104,3270927359,UA
3270927616,3270927871,FR
3270927872,3270928127,HU
-3270928128,3270928383,RO
3270928384,3270928895,UA
3270928896,3270929407,PL
3270929408,3270929919,GB
@@ -124909,190 +65296,30 @@
3271014400,3271014911,RU
3271015424,3271015935,DK
3271015936,3271016447,RU
-3271016448,3271024447,RS
-3271024448,3271024451,BA
-3271024452,3271024639,RS
+3271016448,3271024639,RS
3271024640,3271032831,GB
3271032832,3271098367,NO
3271098368,3271163903,SI
-3271163904,3271200767,FR
-3271200768,3271200775,GB
-3271200776,3271224319,FR
-3271224320,3271224575,MQ
-3271224576,3271229439,FR
-3271229440,3271249919,FI
-3271249920,3271250175,SE
-3271250176,3271280351,FI
-3271280352,3271280383,RU
-3271280384,3271280687,FI
+3271163904,3271229439,FR
+3271229440,3271280687,FI
3271280688,3271280703,SE
-3271280704,3271280719,FI
-3271280720,3271280735,SE
-3271280736,3271290623,FI
-3271290624,3271290879,BE
-3271290880,3271301631,FI
-3271301632,3271302143,AX
-3271302144,3271310079,FI
-3271310080,3271310335,DE
-3271310336,3271360511,FI
-3271360512,3271363407,GB
-3271363408,3271363415,AT
-3271363416,3271363423,GB
-3271363424,3271363455,IT
-3271363456,3271363471,GB
-3271363472,3271363487,ZA
-3271363488,3271363519,IT
-3271363520,3271363551,EU
-3271363552,3271363583,FR
-3271363584,3271365887,GB
-3271365888,3271366143,DE
-3271366144,3271366399,GB
-3271366400,3271366655,NL
-3271366656,3271371263,GB
-3271371264,3271371519,IE
-3271371520,3271371679,ZA
-3271371680,3271371711,DE
-3271371712,3271371775,CH
-3271371776,3271372031,GB
-3271372032,3271372287,BE
-3271372288,3271372799,FR
-3271372800,3271373055,SE
-3271373056,3271373311,BE
-3271373312,3271373567,GB
-3271373568,3271373823,FR
-3271373824,3271374079,DE
-3271374080,3271374335,BE
-3271374336,3271374847,DE
-3271374848,3271375359,GB
-3271375360,3271375871,CH
-3271375872,3271376383,BE
-3271376384,3271376447,GB
-3271376448,3271376463,FR
-3271376464,3271376479,IT
-3271376480,3271376511,FR
-3271376512,3271376639,DE
-3271376640,3271376895,AT
-3271376896,3271377407,ES
-3271377408,3271377919,NL
-3271377920,3271378687,BE
-3271378688,3271378943,SE
+3271280704,3271360511,FI
3271378944,3271380991,GB
-3271380992,3271381247,BE
-3271381248,3271381503,NO
-3271381504,3271381759,SE
-3271381760,3271382527,IT
-3271382528,3271383039,IL
-3271383040,3271383295,CH
-3271383296,3271383551,BE
-3271383552,3271384063,GB
-3271384064,3271384319,CH
-3271384320,3271384575,BE
-3271384576,3271384831,GB
-3271384832,3271385087,BE
-3271385088,3271385159,DE
-3271385160,3271385183,GB
-3271385184,3271385215,ES
-3271385216,3271385343,NL
-3271385344,3271391231,DE
-3271391232,3271391743,NL
-3271391744,3271391999,NO
-3271392000,3271392255,DE
-3271392256,3271392511,FR
-3271392512,3271392767,BE
-3271392768,3271393279,FR
-3271393280,3271393791,AT
-3271393792,3271394047,DK
-3271394048,3271394303,DE
-3271394304,3271394559,BE
-3271394560,3271394815,GB
-3271394816,3271395071,DE
-3271395072,3271395327,GB
-3271395328,3271396863,IT
-3271396864,3271397119,GB
-3271397120,3271397375,NL
-3271397376,3271397887,CH
-3271397888,3271397951,FR
-3271397952,3271397983,IT
-3271397984,3271397999,NL
-3271398000,3271398015,FR
-3271398016,3271398047,NL
-3271398048,3271398079,ZA
-3271398080,3271398143,GB
-3271398144,3271398303,NL
-3271398304,3271398335,DE
-3271398336,3271398399,IT
-3271398400,3271398911,DE
-3271398912,3271399167,GB
-3271399168,3271400959,BE
-3271400960,3271401215,CH
-3271401216,3271401471,DE
-3271401472,3271403263,DK
-3271403264,3271403519,DE
-3271403520,3271403775,NL
-3271403776,3271403903,ZA
-3271403904,3271403919,GB
-3271403920,3271403935,IE
-3271403936,3271403967,GB
-3271403968,3271403983,ZA
-3271403984,3271403991,GB
-3271403992,3271403999,ZA
-3271404000,3271404031,DE
-3271404032,3271405311,NL
-3271405312,3271405567,FR
-3271405568,3271405823,ES
-3271405824,3271406079,AT
-3271406080,3271406335,ZA
-3271406336,3271406591,RO
-3271406592,3271406847,GB
-3271406848,3271407615,AT
-3271407616,3271407871,DE
-3271407872,3271408127,AT
-3271408128,3271408383,DE
-3271408384,3271408639,FR
-3271408640,3271408895,BE
-3271408896,3271409151,ES
-3271409152,3271409407,IT
-3271409408,3271409663,GB
+3271389184,3271391231,DE
+3271395328,3271396351,IT
3271409664,3271417855,BE
-3271417856,3271424071,FR
-3271424072,3271424079,IT
-3271424080,3271424095,IE
-3271424096,3271424111,GB
-3271424112,3271424127,BE
-3271424128,3271424191,GB
-3271424192,3271424511,FR
-3271424512,3271425023,GB
-3271425024,3271425279,DE
-3271425280,3271425535,DK
-3271425536,3271426047,DE
-3271426048,3271426303,PF
-3271426304,3271491583,FR
-3271491584,3271497087,DK
-3271497088,3271497215,SE
-3271497216,3271501567,DK
-3271501568,3271501575,SE
-3271501576,3271501663,DK
-3271501664,3271501679,DE
-3271501680,3271501695,SE
-3271501696,3271501783,DK
-3271501784,3271501791,SE
-3271501792,3271513343,DK
-3271513344,3271513599,EU
-3271513600,3271557119,DK
+3271419904,3271421951,FR
+3271426048,3271491583,FR
+3271491584,3271557119,DK
3271557120,3271589887,BE
3271589888,3271688191,NO
-3271688192,3271691775,EU
3271691776,3271692031,US
3271692032,3271692287,GB
-3271692288,3271694591,EU
+3271694080,3271694335,IE
3271694592,3271695103,GB
-3271695104,3271696383,EU
3271696384,3271698431,GB
-3271698432,3271704575,EU
3271704576,3271712767,RU
-3271712768,3271716863,LV
-3271716864,3271717119,RU
-3271717120,3271720959,LV
+3271712768,3271720959,LV
3271720960,3271729151,GB
3271729152,3271737343,DE
3271737344,3271738367,RU
@@ -125103,7 +65330,8 @@
3271740416,3271740927,UA
3271740928,3271741439,RU
3271741440,3271741951,PL
-3271741952,3271743999,RU
+3271741952,3271742463,RU
+3271742976,3271743999,RU
3271744000,3271744511,RO
3271744512,3271745023,AT
3271745024,3271745535,PL
@@ -125115,7 +65343,6 @@
3271748096,3271748607,GR
3271748608,3271749119,UA
3271749120,3271750143,RU
-3271750144,3271750655,UA
3271750656,3271751167,GB
3271751168,3271751679,RO
3271751680,3271752191,NL
@@ -125143,7 +65370,6 @@
3271803904,3271804927,UA
3271804928,3271805951,PL
3271805952,3271806975,UA
-3271806976,3271807999,EU
3271808000,3271810047,DE
3271810048,3271811071,PL
3271811072,3271812095,UA
@@ -125168,7 +65394,7 @@
3271913984,3271914495,RO
3271914496,3271915007,ES
3271915008,3271915519,SE
-3271915520,3271916031,NL
+3271915520,3271916031,DE
3271916032,3271916543,GB
3271916544,3271917311,UA
3271917312,3271925759,RU
@@ -125179,9 +65405,7 @@
3271926784,3271927295,SI
3271927296,3271927551,NO
3271927552,3271927807,GB
-3271927808,3271928063,TR
3271928064,3271928319,GB
-3271928320,3271928575,RU
3271928576,3271928831,CH
3271928832,3271929087,IE
3271929088,3271929343,LB
@@ -125201,54 +65425,29 @@
3271933184,3271933439,GB
3271933440,3271933695,SE
3271933696,3271933951,DE
-3271933952,3271977533,FR
-3271977534,3271977534,US
-3271977535,3272015871,FR
-3272015872,3272019967,RO
+3271933952,3272015871,FR
+3272015872,3272017407,RO
+3272017664,3272018943,RO
3272019968,3272020991,IT
3272020992,3272024063,DK
3272024064,3272032255,IE
3272032256,3272040447,SE
-3272040448,3272041885,FR
-3272041886,3272041886,EU
-3272041887,3272048639,FR
+3272040448,3272048639,FR
3272048640,3272056831,NL
3272056832,3272065023,RU
-3272065024,3272065631,GB
-3272065632,3272065663,NL
-3272065664,3272069503,GB
-3272069504,3272069567,NL
-3272069568,3272070143,GB
-3272070144,3272070175,NL
-3272070176,3272070239,GB
-3272070240,3272070255,NL
-3272070256,3272081407,GB
-3272081408,3272081919,PT
-3272081920,3272082687,CV
-3272082688,3272082943,AO
-3272082944,3272083455,PT
-3272083456,3272083711,ST
-3272083712,3272084025,PT
+3272065024,3272073727,GB
+3272073728,3272073855,IE
+3272073856,3272081407,GB
+3272081408,3272084025,PT
3272084026,3272084026,AO
-3272084027,3272084735,PT
-3272084736,3272084991,CV
-3272084992,3272086015,PT
-3272086016,3272086527,ST
-3272086528,3272086655,AO
-3272086656,3272086975,PT
-3272086976,3272087039,CW
-3272087040,3272087551,PT
+3272084027,3272087551,PT
3272087552,3272088575,MR
-3272088576,3272089343,PT
-3272089344,3272089479,ST
-3272089480,3272089535,PT
-3272089536,3272089551,ST
-3272089552,3272089599,PT
+3272088576,3272089599,PT
3272089600,3272090111,NO
3272090112,3272091647,RU
3272091648,3272092671,UA
3272092672,3272093183,RU
-3272093184,3272094207,RO
+3272093184,3272093695,RO
3272094208,3272094719,AM
3272094720,3272095231,PL
3272095232,3272095743,FI
@@ -125256,29 +65455,23 @@
3272096256,3272096767,PT
3272096768,3272097279,FI
3272097280,3272097791,RU
-3272097792,3272098519,GB
-3272098520,3272098527,FR
-3272098528,3272106239,GB
+3272097792,3272106239,GB
3272106240,3272106495,PL
3272106496,3272106751,SE
3272106752,3272107007,PL
3272107008,3272107263,GB
3272107264,3272107519,PL
-3272107520,3272107775,RU
3272107776,3272108031,GB
3272108032,3272108287,DE
3272108288,3272108543,RO
3272108544,3272109055,PL
3272109056,3272109311,CH
3272109312,3272109567,TR
-3272109568,3272109823,GB
3272109824,3272110079,FR
-3272110080,3272110335,SE
3272110336,3272110591,CH
-3272110592,3272110847,AT
3272110848,3272111103,LV
-3272111104,3272111871,GB
-3272111872,3272112383,RO
+3272111104,3272111615,GB
+3272112128,3272112383,RO
3272112384,3272113151,DE
3272113152,3272113407,FR
3272113408,3272113919,GB
@@ -125319,88 +65512,58 @@
3272213568,3272213575,GB
3272213576,3272213583,IE
3272213584,3272213599,DE
-3272213600,3272213631,EU
3272213632,3272213639,NL
-3272213640,3272213655,EU
3272213656,3272213663,IT
-3272213664,3272213671,EU
3272213672,3272213679,IT
-3272213680,3272213695,EU
3272213696,3272213735,IT
-3272213736,3272213751,EU
3272213752,3272213759,IT
-3272213760,3272213823,NL
-3272213824,3272213831,DE
-3272213832,3272213839,NL
-3272213840,3272213855,RU
-3272213856,3272213887,NL
-3272213888,3272214015,GB
+3272213760,3272214015,NL
3272214016,3272214271,ES
-3272214272,3272214527,GB
+3272214272,3272214351,GB
+3272214352,3272214407,FR
+3272214432,3272214463,SE
3272214528,3272215039,FR
3272215040,3272215295,ES
3272215296,3272215551,NL
3272215552,3272215807,CH
3272215808,3272215823,NL
-3272215824,3272215871,EU
3272215872,3272215879,BE
-3272215880,3272215883,EU
3272215884,3272215919,CH
3272215920,3272215935,NL
3272215936,3272215999,GB
-3272216000,3272216015,EU
3272216016,3272216031,DE
-3272216032,3272216039,EU
3272216040,3272216047,GB
-3272216048,3272216191,EU
3272216192,3272216207,BE
-3272216208,3272216215,EU
3272216216,3272216223,FR
3272216224,3272216231,DE
-3272216232,3272216239,EU
3272216240,3272216255,NL
3272216256,3272216287,CH
-3272216288,3272216303,EU
3272216304,3272216311,ES
-3272216312,3272216319,EU
3272216320,3272216351,NL
3272216352,3272216383,DE
3272216384,3272216447,CH
-3272216448,3272216451,EU
3272216452,3272216455,NL
-3272216456,3272216463,EU
3272216464,3272216479,FR
3272216480,3272216495,IR
-3272216496,3272216511,EU
3272216512,3272216575,IT
3272216576,3272216895,GB
3272216896,3272216911,FR
3272216912,3272216927,DE
-3272216928,3272216959,EU
3272216960,3272217007,GB
-3272217008,3272217087,EU
3272217088,3272217151,GB
-3272217152,3272217215,EU
3272217216,3272217279,BE
3272217280,3272217303,DE
3272217304,3272217311,BE
-3272217312,3272217599,EU
+3272217344,3272217599,GB
3272217600,3272217631,CH
-3272217632,3272217855,EU
3272217856,3272217875,ES
-3272217876,3272217879,EU
3272217880,3272217895,IT
3272217896,3272217911,ES
-3272217912,3272217919,EU
3272217920,3272217983,DE
3272217984,3272218079,ES
-3272218080,3272218111,EU
3272218112,3272218623,GB
-3272218624,3272218639,RU
-3272218640,3272218671,DE
-3272218672,3272218687,EU
3272218688,3272218719,DE
-3272218720,3272218879,EU
+3272218752,3272218879,GB
3272218880,3272219135,BE
3272219136,3272219391,NL
3272219392,3272219647,GB
@@ -125412,40 +65575,27 @@
3272221440,3272221447,SE
3272221448,3272221455,NO
3272221456,3272221463,SE
-3272221464,3272221695,EU
+3272221472,3272221495,SE
3272221696,3272221951,NL
3272221952,3272222207,GB
3272222208,3272222463,ES
3272222464,3272222719,NL
-3272222720,3272222975,DE
-3272222976,3272223015,GB
-3272223016,3272223023,EU
+3272222720,3272223015,GB
3272223024,3272223039,GB
-3272223040,3272223231,EU
3272223232,3272223487,NL
3272223488,3272223503,SG
-3272223504,3272223743,EU
-3272223744,3272223775,GI
-3272223776,3272223807,EU
-3272223808,3272223815,CY
-3272223816,3272223823,EU
-3272223824,3272223839,GB
-3272223840,3272223999,EU
-3272224000,3272224255,GB
-3272224256,3272224383,GI
-3272224384,3272224511,EU
-3272224512,3272225279,GB
+3272223520,3272223551,HK
+3272223744,3272224255,GB
+3272224768,3272225023,GB
3272225280,3272225535,IT
3272225536,3272225791,GB
-3272225792,3272225855,EU
3272225856,3272225919,GB
-3272225920,3272226047,EU
+3272225920,3272226047,IT
3272226048,3272226815,FR
3272226816,3272227071,GB
-3272227072,3272227327,FR
+3272227072,3272227327,PT
3272227328,3272227359,US
3272227360,3272227511,GB
-3272227512,3272227519,EU
3272227520,3272227583,GB
3272227584,3272227839,FR
3272227840,3272228095,ES
@@ -125461,66 +65611,7 @@
3272228736,3272228799,NL
3272228800,3272228863,CH
3272228864,3272237055,LU
-3272237056,3272237823,GB
-3272237824,3272238079,IM
-3272238080,3272238591,GB
-3272238592,3272238847,IM
-3272238848,3272238919,GB
-3272238920,3272238975,IM
-3272238976,3272239039,GB
-3272239040,3272239103,IM
-3272239104,3272239687,GB
-3272239688,3272239695,IM
-3272239696,3272239703,GB
-3272239704,3272239711,IM
-3272239712,3272239775,GB
-3272239776,3272239799,IM
-3272239800,3272240127,GB
-3272240128,3272240367,IM
-3272240368,3272240575,GB
-3272240576,3272240639,GH
-3272240640,3272240703,IM
-3272240704,3272240767,GB
-3272240768,3272240895,IM
-3272240896,3272241159,GB
-3272241160,3272241167,IM
-3272241168,3272241215,GB
-3272241216,3272241247,IM
-3272241248,3272241279,GB
-3272241280,3272241295,IM
-3272241296,3272241391,GB
-3272241392,3272241919,IM
-3272241920,3272242215,GB
-3272242216,3272242223,IM
-3272242224,3272242239,GB
-3272242240,3272242591,IM
-3272242592,3272242607,GB
-3272242608,3272242623,IM
-3272242624,3272242655,GB
-3272242656,3272242719,IM
-3272242720,3272242735,GB
-3272242736,3272242751,IM
-3272242752,3272242783,GB
-3272242784,3272242943,IM
-3272242944,3272243207,GB
-3272243208,3272243215,IM
-3272243216,3272243231,GB
-3272243232,3272243263,IM
-3272243264,3272243327,GB
-3272243328,3272243455,IM
-3272243456,3272244015,GB
-3272244016,3272244031,IM
-3272244032,3272244039,GB
-3272244040,3272244047,IM
-3272244048,3272244071,GB
-3272244072,3272244079,IM
-3272244080,3272244111,GB
-3272244112,3272244127,IM
-3272244128,3272244151,GB
-3272244152,3272244159,IM
-3272244160,3272244175,GB
-3272244176,3272244215,IM
-3272244216,3272245247,GB
+3272237056,3272245247,IM
3272245248,3272261631,FI
3272261632,3272261887,MT
3272261888,3272262143,BG
@@ -125538,25 +65629,18 @@
3272265216,3272265471,AT
3272265472,3272265727,DK
3272265728,3272265983,DE
-3272265984,3272266239,GB
3272266240,3272266495,UA
3272266496,3272266751,SE
3272266752,3272267007,NL
3272267008,3272267263,GB
3272267264,3272267519,RU
-3272267520,3272267775,GB
3272267776,3272268031,LV
3272268032,3272268287,MT
3272268288,3272268543,UA
-3272268544,3272268799,RO
3272268800,3272269055,IL
3272269056,3272269311,GB
3272269312,3272269567,IL
-3272269568,3272293631,GB
-3272293632,3272293887,AU
-3272293888,3272339711,GB
-3272339712,3272339775,NL
-3272339776,3272351743,GB
+3272269568,3272351743,GB
3272351744,3272352767,PL
3272352768,3272353791,UA
3272353792,3272355839,CH
@@ -125566,68 +65650,22 @@
3272358912,3272359935,NL
3272359936,3272368127,RU
3272368128,3272376319,KZ
-3272376320,3272376463,SK
-3272376464,3272376479,SR
-3272376480,3272376495,SK
-3272376496,3272376527,SR
-3272376528,3272376535,SK
-3272376536,3272376543,SR
-3272376544,3272376607,SK
-3272376608,3272376639,SR
-3272376640,3272376735,SK
-3272376736,3272376751,SR
-3272376752,3272376767,SK
-3272376768,3272376831,SR
-3272376832,3272378183,SK
-3272378184,3272378201,SR
-3272378202,3272384511,SK
+3272376320,3272384511,SK
3272384512,3272392703,LT
3272392704,3272400895,AT
-3272400896,3272400911,EU
-3272400912,3272400935,GB
-3272400936,3272401007,EU
-3272401008,3272401023,SE
-3272401024,3272401087,GB
-3272401088,3272401215,EU
-3272401216,3272401247,PL
-3272401248,3272401279,EU
-3272401280,3272401407,NL
-3272401408,3272401951,EU
-3272401952,3272401967,SE
-3272401968,3272401983,GB
-3272401984,3272402031,DE
-3272402032,3272402039,EU
-3272402040,3272402047,US
-3272402048,3272402079,EU
-3272402080,3272402111,SE
-3272402112,3272402175,EU
-3272402176,3272402191,GB
-3272402192,3272402303,EU
-3272402304,3272402431,FR
-3272402432,3272402447,EU
-3272402448,3272402455,FR
-3272402456,3272402559,EU
-3272402560,3272402623,GB
-3272402624,3272402687,EU
+3272400912,3272400919,GB
+3272402432,3272402687,GB
3272402688,3272402815,SE
-3272402816,3272403007,EU
-3272403008,3272403023,FR
-3272403024,3272403039,EU
-3272403040,3272403055,DE
-3272403056,3272403071,NL
-3272403072,3272403199,EU
-3272403200,3272403455,SE
-3272403456,3272404991,FR
+3272403968,3272404991,FR
3272404992,3272406015,DE
3272406016,3272407039,NL
-3272407040,3272409087,EU
3272409088,3272417279,BE
3272417280,3272418687,FR
3272418688,3272419327,PL
-3272419328,3272420863,DE
+3272419328,3272420351,DE
+3272420608,3272420863,DE
3272420864,3272420991,PL
3272420992,3272421119,DK
-3272421120,3272421375,UA
3272421376,3272421887,RO
3272421888,3272422143,RU
3272422144,3272422399,GB
@@ -125635,19 +65673,18 @@
3272422912,3272423423,SE
3272423424,3272423935,BE
3272423936,3272424447,FR
-3272424448,3272426655,GB
-3272426656,3272426671,IL
-3272426672,3272441855,GB
+3272424448,3272424703,GB
+3272424704,3272425471,DE
+3272425472,3272441855,GB
3272441856,3272474623,LV
3272474624,3272474879,FR
3272474880,3272475135,NL
3272475136,3272475391,RU
3272475392,3272475903,PL
3272475904,3272476159,FR
-3272476160,3272476671,RO
+3272476160,3272476415,RO
3272476672,3272476927,DE
3272476928,3272477183,GR
-3272477184,3272477439,GB
3272477440,3272477695,PL
3272477696,3272477951,RU
3272477952,3272478207,RO
@@ -125659,10 +65696,9 @@
3272479488,3272479743,SA
3272479744,3272480255,SE
3272480256,3272480511,FR
-3272480512,3272480767,GB
+3272480512,3272480767,CH
3272480768,3272481023,DE
3272481024,3272481279,SE
-3272481280,3272481535,CH
3272481536,3272481791,FR
3272481792,3272482047,IT
3272482048,3272482303,NL
@@ -125676,7 +65712,6 @@
3272500736,3272501247,IT
3272501248,3272502783,RU
3272502784,3272503295,KW
-3272503296,3272503807,UA
3272503808,3272504319,RU
3272504320,3272504831,PL
3272504832,3272505343,RU
@@ -125686,106 +65721,23 @@
3272507392,3272515583,CY
3272515584,3272523775,LT
3272523776,3272540159,DE
-3272540160,3272552735,CH
-3272552736,3272552743,FR
-3272552744,3272552879,CH
-3272552880,3272552887,FR
-3272552888,3272553471,CH
-3272553472,3272553487,FR
-3272553488,3272554779,CH
-3272554780,3272554783,FR
-3272554784,3272555247,CH
-3272555248,3272555255,FR
-3272555256,3272555407,CH
-3272555408,3272555423,FR
-3272555424,3272556599,CH
-3272556600,3272556607,FR
-3272556608,3272568079,CH
-3272568080,3272568095,FR
-3272568096,3272572879,CH
-3272572880,3272572895,FR
-3272572896,3272605695,CH
+3272540160,3272605695,CH
3272605696,3272613887,BE
3272613888,3272622079,RU
-3272622080,3272623103,RO
3272623104,3272624127,DE
3272624128,3272625151,RU
3272625152,3272626175,UA
3272626176,3272627199,DE
3272627200,3272628223,NL
3272628224,3272629247,UA
-3272629248,3272633983,RU
-3272633984,3272634047,KZ
-3272634048,3272638463,RU
+3272629248,3272638463,RU
3272638464,3272646655,ES
-3272646656,3272646784,DE
-3272646785,3272646911,GB
-3272646912,3272647423,DE
-3272647424,3272649215,GB
-3272649216,3272649471,IE
-3272649472,3272649727,SA
-3272649728,3272650623,GB
-3272650624,3272650639,FR
-3272650640,3272650655,GB
-3272650656,3272650751,DE
-3272650752,3272651135,GB
-3272651136,3272651151,CH
-3272651152,3272651183,GB
-3272651184,3272651191,NL
-3272651192,3272651231,GB
-3272651232,3272651239,UZ
-3272651240,3272652287,GB
-3272652288,3272652799,FR
-3272652800,3272653055,GB
-3272653056,3272653087,CH
-3272653088,3272653247,GB
-3272653248,3272653279,FR
-3272653280,3272653311,GB
-3272653312,3272653439,SE
-3272653440,3272653447,GB
-3272653448,3272653455,IE
-3272653456,3272653463,DE
-3272653464,3272653543,GB
-3272653544,3272653551,NL
-3272653552,3272653567,GB
-3272653568,3272653631,SE
-3272653632,3272653663,FR
-3272653664,3272653695,DE
-3272653696,3272653727,IT
-3272653728,3272653759,NL
-3272653760,3272653791,DK
-3272653792,3272653823,GB
-3272653824,3272653951,FR
-3272653952,3272654207,DE
-3272654208,3272654335,FR
-3272654336,3272654463,ES
-3272654464,3272654591,GB
-3272654592,3272654719,NO
-3272654720,3272654783,IT
-3272654784,3272654847,NL
+3272646656,3272647385,GB
+3272647386,3272647386,DE
+3272647387,3272654847,GB
3272654848,3272663039,FI
3272663040,3272671231,AT
-3272671232,3272704255,SE
-3272704256,3272705279,IE
-3272705280,3272705535,SE
-3272705536,3272707071,IE
-3272707072,3272707327,SE
-3272707328,3272707583,IE
-3272707584,3272712191,SE
-3272712192,3272712447,GB
-3272712448,3272712703,SE
-3272712704,3272712959,GB
-3272712960,3272713215,SE
-3272713216,3272713983,GB
-3272713984,3272714495,SE
-3272714496,3272714751,GB
-3272714752,3272715015,SE
-3272715016,3272715023,GB
-3272715024,3272715135,SE
-3272715136,3272715263,GB
-3272715264,3272733983,SE
-3272733984,3272733991,RU
-3272733992,3272736767,SE
+3272671232,3272736767,SE
3272736768,3272737791,IT
3272737792,3272738815,GB
3272738816,3272739839,IL
@@ -125806,10 +65758,8 @@
3272876032,3272884223,NL
3272884224,3272892415,DE
3272892416,3272892927,UA
-3272892928,3272893439,DE
3272893440,3272893951,SE
3272893952,3272894463,UA
-3272894464,3272894975,FR
3272894976,3272895487,RO
3272895488,3272895999,GB
3272896000,3272896511,PL
@@ -125832,10 +65782,8 @@
3272902912,3272903167,RU
3272903168,3272903423,PL
3272903424,3272903679,AT
-3272903680,3272903935,RU
-3272903936,3272904191,DK
+3272903680,3272904191,RU
3272904192,3272904447,SI
-3272904448,3272904703,BE
3272904704,3272904959,NL
3272904960,3272905215,RO
3272905216,3272905727,CH
@@ -125851,12 +65799,7 @@
3272908032,3272908287,CH
3272908288,3272908543,AT
3272908544,3272908799,DE
-3272908800,3272909055,NO
-3272909056,3272909823,SK
-3272909824,3272910335,NO
-3272910336,3272911871,SK
-3272911872,3272912383,CZ
-3272912384,3272916991,SK
+3272908800,3272916991,SK
3272916992,3272917503,MC
3272917504,3272918527,RU
3272918528,3272919039,FR
@@ -125872,13 +65815,8 @@
3272923648,3272924159,PL
3272924160,3272924671,DE
3272924672,3272925183,GB
-3272925184,3272931135,DE
-3272931136,3272931151,GB
-3272931152,3272933375,DE
-3272933376,3272934399,FI
-3272934400,3272940287,GB
-3272940288,3272940543,DE
-3272940544,3272998911,GB
+3272925184,3272933375,DE
+3272933376,3272998911,GB
3272998912,3273007103,PT
3273007104,3273015295,CZ
3273015296,3273023487,SE
@@ -125888,10 +65826,8 @@
3273026560,3273028607,UA
3273028608,3273029631,PL
3273029632,3273029887,CH
-3273029888,3273029897,GB
-3273029898,3273029898,EU
-3273029899,3273030143,GB
-3273030144,3273030655,RU
+3273029888,3273030143,GB
+3273030400,3273030655,RU
3273030656,3273031679,PL
3273031680,3273032191,GB
3273032192,3273033215,UA
@@ -125902,45 +65838,11 @@
3273035264,3273035775,DE
3273035776,3273036287,FR
3273036288,3273036799,BG
-3273036800,3273037311,IL
3273037312,3273037823,GB
-3273037824,3273038335,UA
3273038336,3273038847,GR
3273038848,3273039871,GB
3273039872,3273048063,LT
-3273048064,3273048319,IT
-3273048320,3273048575,GR
-3273048576,3273048831,IT
-3273048832,3273049087,US
-3273049088,3273049855,IT
-3273049856,3273050111,US
-3273050112,3273050783,IT
-3273050784,3273050879,GR
-3273050880,3273051647,IT
-3273051648,3273051903,US
-3273051904,3273051967,IE
-3273051968,3273052039,IT
-3273052040,3273052047,NL
-3273052048,3273052063,GR
-3273052064,3273052095,IT
-3273052096,3273052127,GR
-3273052128,3273052415,IT
-3273052416,3273052671,GB
-3273052672,3273052927,FR
-3273052928,3273053183,DE
-3273053184,3273053439,CH
-3273053440,3273053695,NL
-3273053696,3273053951,BE
-3273053952,3273054207,AT
-3273054208,3273054463,US
-3273054464,3273054719,ES
-3273054720,3273054975,IT
-3273054976,3273055231,BR
-3273055232,3273055487,AR
-3273055488,3273055743,CL
-3273055744,3273055999,US
-3273056000,3273056127,IT
-3273056128,3273056255,HK
+3273048064,3273056255,IT
3273056256,3273064447,MD
3273064448,3273129983,PT
3273129984,3273138175,DK
@@ -125963,17 +65865,13 @@
3273192448,3273192959,DK
3273192960,3273193471,FR
3273193472,3273193983,PL
-3273193984,3273194495,EU
3273194496,3273195007,UA
3273195008,3273195519,RU
-3273195520,3273225727,FR
-3273225728,3273225983,GF
-3273225984,3273261055,FR
+3273195520,3273261055,FR
3273261056,3273261567,NO
3273261568,3273262079,BE
3273262080,3273262591,LU
3273262592,3273263103,RU
-3273263104,3273263615,FR
3273263616,3273264127,SE
3273264128,3273264639,PL
3273264640,3273265151,AT
@@ -125984,11 +65882,8 @@
3273267712,3273268223,GB
3273268224,3273268735,SE
3273268736,3273269247,RU
-3273269248,3273276119,GB
-3273276120,3273276127,US
-3273276128,3273277439,GB
+3273269248,3273277439,GB
3273277440,3273278463,UA
-3273278464,3273279487,RU
3273279488,3273281535,PL
3273281536,3273283583,UA
3273283584,3273284607,GB
@@ -125999,221 +65894,137 @@
3273310208,3273318399,AT
3273318400,3273326591,GB
3273326592,3273326847,IE
-3273326848,3273326983,EU
3273326984,3273326987,DE
-3273326988,3273326991,EU
3273326992,3273327047,DE
-3273327048,3273327263,EU
3273327264,3273327287,DE
-3273327288,3273327359,EU
-3273327360,3273327615,IE
-3273327616,3273328511,EU
+3273327376,3273327423,IE
+3273327424,3273327511,GB
+3273327520,3273327551,IE
+3273327552,3273327583,GB
+3273327584,3273327615,IE
3273328512,3273328639,DE
-3273328640,3273329191,GB
-3273329192,3273329199,EU
-3273329200,3273329215,DE
-3273329216,3273329279,GB
-3273329280,3273329311,EU
-3273329312,3273329327,GB
-3273329328,3273329407,EU
-3273329408,3273329423,GB
+3273328640,3273329423,GB
3273329424,3273329439,DE
3273329440,3273330175,GB
3273330176,3273330183,IR
-3273330184,3273330191,IE
-3273330192,3273330199,GB
+3273330184,3273330199,GB
3273330200,3273330223,IE
3273330224,3273330271,GB
3273330272,3273330431,IE
3273330432,3273331199,GB
-3273331200,3273331711,EU
-3273331712,3273331967,GB
+3273331712,3273331743,GB
+3273331752,3273331791,GB
+3273331808,3273331823,GB
+3273331832,3273331887,GB
+3273331904,3273331967,GB
3273331968,3273332031,DE
3273332032,3273332095,GB
3273332096,3273332223,DE
3273332224,3273332479,GB
-3273332480,3273332543,EU
3273332544,3273332575,DE
-3273332576,3273332607,EU
3273332608,3273332671,DE
-3273332672,3273333055,EU
3273333056,3273333119,DE
-3273333120,3273334271,EU
3273334272,3273334783,DE
-3273334784,3273335039,EU
+3273334784,3273335039,AE
3273335040,3273335295,DE
-3273335296,3273335807,GB
-3273335808,3273335935,EU
3273335936,3273335999,DE
-3273336000,3273336847,EU
3273336848,3273336863,DE
3273336864,3273336871,GB
3273336872,3273336895,DE
-3273336896,3273336959,EU
3273336960,3273337087,DE
-3273337088,3273337855,EU
3273337856,3273338111,DE
-3273338112,3273338623,EU
3273338624,3273338879,DE
-3273338880,3273339135,EU
-3273339136,3273339903,DE
-3273339904,3273340415,GB
-3273340416,3273340927,EU
+3273339136,3273339391,DE
+3273339392,3273340415,GB
3273340928,3273341695,FR
3273341696,3273341951,DE
-3273341952,3273342463,EU
+3273341952,3273342207,GB
+3273342208,3273342231,AE
3273342464,3273342975,DE
3273342976,3273343999,GB
3273344000,3273344767,DE
-3273344768,3273345023,EU
3273345024,3273345279,DE
-3273345280,3273346815,EU
+3273346560,3273346815,OM
3273346816,3273347071,DE
-3273347072,3273347839,EU
3273347840,3273348351,DE
-3273348352,3273349119,EU
3273349120,3273349631,DE
-3273349632,3273350271,EU
3273350272,3273350287,DE
-3273350288,3273350335,EU
3273350336,3273350351,DE
-3273350352,3273351423,EU
3273351424,3273351455,DE
-3273351456,3273351503,EU
3273351504,3273351519,DE
-3273351520,3273351871,EU
3273351872,3273351903,DE
-3273351904,3273351935,EU
3273351936,3273352191,DE
-3273352192,3273352927,EU
3273352928,3273352959,DE
-3273352960,3273352991,EU
3273352992,3273353023,DE
-3273353024,3273355519,EU
-3273355520,3273356287,DE
-3273356288,3273359887,EU
+3273357312,3273358335,GB
3273359888,3273359903,DE
-3273359904,3273360015,EU
3273360016,3273360079,DE
-3273360080,3273361471,EU
3273361472,3273361535,DE
-3273361536,3273361631,EU
3273361632,3273361663,DE
-3273361664,3273361791,EU
3273361792,3273361823,DE
-3273361824,3273361855,EU
3273361856,3273361919,DE
-3273361920,3273362047,EU
3273362048,3273362175,DE
-3273362176,3273362239,EU
3273362240,3273362255,DE
-3273362256,3273363207,EU
3273363208,3273363211,DE
-3273363212,3273363327,EU
3273363328,3273363391,DE
-3273363392,3273364607,EU
3273364608,3273364735,DE
-3273364736,3273364991,EU
3273364992,3273365247,DE
-3273365248,3273365503,EU
3273365504,3273365519,NL
3273365520,3273365543,GB
3273365544,3273365759,NL
3273365760,3273365767,GB
-3273365768,3273365887,EU
3273365888,3273366015,FR
3273366016,3273366527,DE
-3273366528,3273367295,EU
3273367296,3273367423,DE
-3273367424,3273367551,EU
3273367552,3273367567,DE
-3273367568,3273368063,EU
3273368064,3273368575,DE
-3273368576,3273369343,EU
3273369344,3273369855,DE
-3273369856,3273370623,EU
3273370624,3273371135,DE
-3273371136,3273371711,EU
3273371712,3273371743,DE
-3273371744,3273371759,EU
3273371760,3273371775,DE
-3273371776,3273371807,EU
3273371808,3273371823,DE
-3273371824,3273371871,EU
3273371872,3273371875,DE
-3273371876,3273371999,EU
3273372000,3273372055,DE
-3273372056,3273372671,EU
3273372672,3273372927,GB
3273372928,3273373183,NL
3273373184,3273373455,GB
3273373456,3273373567,DE
3273373568,3273373695,GB
-3273373696,3273375231,EU
3273375232,3273375551,DE
-3273375552,3273375743,EU
3273375744,3273375871,DE
-3273375872,3273375999,EU
3273376000,3273376255,DE
-3273376256,3273376535,EU
3273376536,3273376543,DE
-3273376544,3273377791,EU
3273377792,3273378095,DE
-3273378096,3273378559,EU
3273378560,3273378815,DE
-3273378816,3273381887,EU
3273381888,3273382143,DE
3273382144,3273382399,GB
3273382400,3273382463,DE
-3273382464,3273382479,EU
3273382480,3273382591,DE
-3273382592,3273382639,EU
3273382640,3273382687,DE
-3273382688,3273384191,EU
3273384192,3273384703,DE
-3273384704,3273384959,EU
3273384960,3273385215,DE
-3273385216,3273385279,EU
3273385280,3273385343,DE
-3273385344,3273385471,EU
3273385472,3273385727,DE
-3273385728,3273385759,EU
3273385760,3273385791,DE
-3273385792,3273385855,EU
3273385856,3273385919,DE
-3273385920,3273387055,EU
3273387056,3273387071,DE
-3273387072,3273387215,EU
3273387216,3273387231,DE
-3273387232,3273387263,EU
3273387264,3273387519,DE
-3273387520,3273387551,EU
3273387552,3273387583,DE
-3273387584,3273388159,EU
3273388160,3273388223,DE
-3273388224,3273388543,EU
3273388544,3273388807,DE
-3273388808,3273388815,EU
3273388816,3273388863,DE
-3273388864,3273388871,EU
3273388872,3273388879,DE
-3273388880,3273388903,EU
3273388904,3273388911,DE
3273388912,3273388927,GB
3273388928,3273389055,DE
-3273389056,3273390079,EU
3273390080,3273390207,DE
-3273390208,3273390335,EU
-3273390336,3273390463,DE
-3273390464,3273391103,EU
+3273390368,3273390463,DE
3273391104,3273391359,DE
-3273391360,3273391871,EU
3273391872,3273392127,DE
3273392128,3273392639,PL
3273392640,3273393663,RO
-3273393664,3273394175,BG
3273394176,3273394687,RO
-3273394688,3273395199,RU
3273395200,3273395711,DE
3273395712,3273396223,RU
3273396224,3273396735,PL
@@ -126230,102 +66041,49 @@
3273433600,3273434111,RO
3273434112,3273434623,BE
3273434624,3273435135,IL
-3273435136,3273435647,GB
3273435648,3273436159,PL
3273436160,3273436671,NO
3273436672,3273437183,DE
3273437184,3273437695,RO
-3273437696,3273438207,PL
3273438208,3273438719,IL
3273438720,3273439231,RU
3273439232,3273439743,RO
3273439744,3273440255,DE
3273440256,3273440767,RO
-3273440768,3273441279,AT
-3273441280,3273445375,FR
-3273445376,3273447423,GB
-3273447424,3273449471,FR
-3273449472,3273449727,GB
-3273449728,3273457663,CH
+3273440768,3273441023,AT
+3273441024,3273441279,PL
+3273441280,3273449471,FR
+3273449472,3273457663,CH
3273457664,3273523199,HR
3273523200,3273588735,DE
3273588736,3273687039,IT
3273687040,3273719807,DE
-3273719808,3273719879,NL
-3273719880,3273719887,GB
-3273719888,3273719935,NL
-3273719936,3273719999,GB
-3273720000,3273720127,NL
-3273720128,3273720159,GB
-3273720160,3273720831,NL
+3273719808,3273720831,NL
3273720832,3273720847,IE
-3273720848,3273721855,NL
-3273721856,3273722367,GB
-3273722368,3273726399,NL
-3273726400,3273726431,GB
-3273726432,3273726719,NL
+3273720848,3273726719,NL
3273726720,3273726975,GB
-3273726976,3273727071,NL
-3273727072,3273727079,DK
-3273727080,3273727087,FR
+3273726976,3273727087,DK
3273727088,3273727088,GB
3273727089,3273727095,ES
-3273727096,3273727103,DE
-3273727104,3273727119,NL
+3273727096,3273727119,DK
3273727120,3273727127,PT
-3273727128,3273727135,FI
-3273727136,3273727143,NO
-3273727144,3273727151,CZ
-3273727152,3273727183,IT
-3273727184,3273727231,NL
-3273727232,3273727239,GB
-3273727240,3273728255,NL
-3273728256,3273728511,GB
-3273728512,3273728590,NL
-3273728591,3273728592,EU
-3273728593,3273732095,NL
+3273727128,3273727135,DK
+3273727136,3273727167,IT
+3273727168,3273727231,DK
+3273727232,3273732095,NL
3273732096,3273736191,GB
-3273736192,3273743359,FR
-3273743360,3273743615,JO
-3273743616,3273744383,FR
-3273744384,3273744799,GB
-3273744800,3273744807,DE
-3273744808,3273746943,GB
-3273746944,3273747199,EU
-3273747200,3273748751,GB
-3273748752,3273748767,DE
-3273748768,3273749631,GB
-3273749632,3273749759,FR
-3273749760,3273751455,GB
-3273751456,3273751471,AU
-3273751472,3273751487,FI
-3273751488,3273751951,GB
-3273751952,3273751959,FI
-3273751960,3273751999,GB
-3273752000,3273752015,AU
-3273752016,3273752063,GB
-3273752064,3273752071,IE
-3273752072,3273752239,GB
-3273752240,3273752255,AU
-3273752256,3273752335,GB
-3273752336,3273752343,IE
-3273752344,3273752575,GB
-3273752576,3273752831,NL
-3273752832,3273753087,EU
-3273753088,3273753343,NL
-3273753344,3273753599,EU
-3273753600,3273755647,NL
-3273755648,3273755903,EU
-3273755904,3273760767,NL
+3273736192,3273744383,FR
+3273744384,3273746943,GB
+3273746944,3273747199,NL
+3273747200,3273752575,GB
+3273752576,3273760767,NL
3273760768,3273762303,DE
-3273762304,3273762559,EU
+3273762304,3273762559,NL
3273762560,3273768959,DE
3273768960,3273785343,TR
3273785344,3273801727,RU
3273801728,3273802239,DE
-3273802240,3273802751,RO
3273802752,3273803263,SA
-3273803264,3273803775,ES
3273803776,3273804287,CH
3273804288,3273804799,UA
3273804800,3273805311,RO
@@ -126340,12 +66098,10 @@
3273809408,3273809919,UA
3273809920,3273818111,BG
3273818112,3273826303,AT
-3273826304,3273831231,DE
-3273831232,3273831247,PL
-3273831248,3273831263,LV
-3273831264,3273834495,DE
+3273826304,3273834495,DE
3273834496,3273835519,RU
-3273835520,3273838591,UA
+3273835520,3273836543,UA
+3273837568,3273838591,UA
3273838592,3273839615,PL
3273839616,3273840639,LT
3273840640,3273841663,PL
@@ -126384,7 +66140,6 @@
3273879552,3273880063,GB
3273880064,3273880575,NL
3273880576,3273881087,RU
-3273881088,3273881343,RO
3273881600,3273881855,GB
3273881856,3273882111,CH
3273882112,3273882367,SI
@@ -126396,8 +66151,6 @@
3273932800,3273949183,DE
3273949184,3273981951,FR
3273981952,3274047487,DE
-3274047488,3274049535,SE
-3274049536,3274050559,DE
3274050560,3274051583,PL
3274051584,3274052351,UA
3274052352,3274052607,GB
@@ -126416,24 +66169,19 @@
3274088448,3274096639,KG
3274096640,3274113023,NL
3274113024,3274145791,CZ
-3274145792,3274150911,KW
-3274150912,3274151167,US
-3274151168,3274152447,KW
-3274152448,3274152703,US
-3274152704,3274162175,KW
+3274145792,3274162175,KW
3274162176,3274162687,GB
-3274162688,3274163199,DE
3274163200,3274163711,UA
3274163712,3274164223,BG
3274164224,3274164735,AT
3274165248,3274165759,GB
3274165760,3274166271,RU
-3274166272,3274166783,RO
+3274166272,3274166783,AT
3274166784,3274167295,UA
3274167296,3274167807,BG
3274168320,3274168831,PL
3274168832,3274169343,DZ
-3274169344,3274170367,DE
+3274169856,3274170367,DE
3274170368,3274170879,TR
3274170880,3274171391,DE
3274171392,3274171903,RU
@@ -126447,17 +66195,9 @@
3274175488,3274175999,BE
3274176000,3274176511,DE
3274176512,3274177023,UA
-3274177024,3274177535,FR
-3274177536,3274178047,UA
3274178048,3274178559,NL
-3274178560,3274204063,GB
-3274204064,3274204095,FR
-3274204096,3274227199,GB
-3274227200,3274227455,A2
-3274227456,3274244095,GB
-3274244096,3274255106,DK
-3274255107,3274255107,EU
-3274255108,3274309631,DK
+3274178560,3274244095,GB
+3274244096,3274309631,DK
3274309632,3274326015,FR
3274326016,3274334719,RU
3274334720,3274335231,PL
@@ -126488,12 +66228,12 @@
3274347520,3274348031,FR
3274348032,3274348543,DK
3274348544,3274349055,PL
-3274349056,3274358783,RU
+3274349056,3274350079,RU
+3274350592,3274358783,RU
3274358784,3274366975,SE
3274366976,3274368511,NL
3274368512,3274368767,AT
3274368768,3274369023,FR
-3274369024,3274370047,DE
3274370048,3274371071,GB
3274371072,3274373375,NL
3274373376,3274373631,PL
@@ -126519,8 +66259,7 @@
3274396672,3274397183,PL
3274397184,3274397695,EE
3274397696,3274398207,DE
-3274398208,3274399231,RU
-3274399232,3274399743,EU
+3274398208,3274399743,RU
3274399744,3274407935,LU
3274408192,3274408447,IT
3274408448,3274408703,NL
@@ -126534,7 +66273,7 @@
3274410496,3274410751,NL
3274410752,3274411007,AT
3274411008,3274411263,CH
-3274411264,3274411519,LI
+3274411264,3274411519,DE
3274411520,3274412031,PL
3274412032,3274412287,RU
3274412288,3274412543,NO
@@ -126556,159 +66295,84 @@
3274424320,3274435711,SE
3274435712,3274435839,US
3274435840,3274440703,SE
-3274440704,3274442751,EU
3274442752,3274443263,GB
-3274443264,3274443519,EU
3274443520,3274443647,GB
-3274443648,3274443711,EU
3274443712,3274443775,GB
-3274443776,3274443807,EU
3274443808,3274444031,GB
-3274444032,3274446335,EU
3274446336,3274447871,GB
-3274447872,3274448383,EU
3274448384,3274448639,GB
-3274448640,3274448895,EU
3274448896,3274449663,GB
-3274449664,3274449919,EU
3274449920,3274450623,GB
-3274450624,3274450655,EU
3274450656,3274450687,GB
-3274450688,3274451199,EU
3274451200,3274452255,GB
-3274452256,3274452263,EU
3274452264,3274452311,GB
-3274452312,3274452319,EU
3274452320,3274452335,GB
-3274452336,3274452343,EU
3274452344,3274452367,GB
-3274452368,3274452383,EU
3274452384,3274452391,GB
-3274452392,3274452399,EU
3274452400,3274452423,GB
-3274452424,3274452431,EU
3274452432,3274452439,GB
-3274452440,3274452447,EU
3274452448,3274452455,GB
-3274452456,3274452463,EU
3274452464,3274452471,GB
-3274452472,3274452495,EU
3274452496,3274452543,GB
-3274452544,3274452559,EU
3274452560,3274452575,GB
-3274452576,3274452655,EU
3274452656,3274452703,GB
-3274452704,3274452735,EU
3274452736,3274452927,GB
-3274452928,3274452991,EU
3274452992,3274453767,GB
-3274453768,3274453783,EU
3274453784,3274453791,GB
-3274453792,3274453799,EU
3274453800,3274453847,GB
-3274453848,3274453863,EU
3274453864,3274453871,GB
-3274453872,3274453887,EU
3274453888,3274453903,GB
-3274453904,3274453919,EU
3274453920,3274453935,GB
-3274453936,3274453943,EU
3274453944,3274453951,GB
-3274453952,3274453959,EU
3274453960,3274453975,GB
-3274453976,3274453983,EU
3274453984,3274453991,GB
-3274453992,3274453999,EU
3274454000,3274454271,GB
-3274454272,3274454655,EU
3274454656,3274455311,GB
-3274455312,3274455327,EU
3274455328,3274455335,GB
-3274455336,3274455343,EU
3274455344,3274455351,GB
-3274455352,3274455359,EU
3274455360,3274455375,GB
-3274455376,3274455383,EU
3274455384,3274455391,GB
-3274455392,3274455399,EU
3274455400,3274455423,GB
-3274455424,3274455431,EU
3274455432,3274455439,GB
-3274455440,3274455447,EU
3274455448,3274455503,GB
-3274455504,3274455519,EU
3274455520,3274455535,GB
-3274455536,3274455743,EU
3274455744,3274455807,GB
-3274455808,3274455871,EU
3274455872,3274455935,GB
-3274455936,3274455967,EU
3274455968,3274456359,GB
-3274456360,3274456367,EU
3274456368,3274456375,GB
-3274456376,3274456383,EU
3274456384,3274456391,GB
-3274456392,3274456399,EU
3274456400,3274456407,GB
-3274456408,3274456415,EU
3274456416,3274456447,GB
-3274456448,3274456455,EU
3274456456,3274456511,GB
-3274456512,3274456527,EU
3274456528,3274456535,GB
-3274456536,3274456543,EU
3274456544,3274456559,GB
-3274456560,3274456567,EU
3274456568,3274460223,GB
-3274460224,3274460415,EU
3274460416,3274462207,GB
-3274462208,3274462463,EU
3274462464,3274465023,GB
-3274465024,3274465151,EU
3274465152,3274466351,GB
-3274466352,3274466367,EU
3274466368,3274466399,GB
-3274466400,3274466415,EU
3274466416,3274466463,GB
-3274466464,3274466559,EU
3274466560,3274466735,GB
-3274466736,3274466743,EU
3274466744,3274466763,GB
-3274466764,3274466767,EU
3274466768,3274466783,GB
-3274466784,3274466815,EU
3274466816,3274467099,GB
-3274467100,3274467103,EU
3274467104,3274467307,GB
-3274467308,3274467327,EU
3274467328,3274470383,GB
-3274470384,3274470399,EU
3274470400,3274470535,GB
-3274470536,3274470655,EU
3274470656,3274471423,GB
-3274471424,3274471535,EU
3274471536,3274471615,GB
-3274471616,3274471679,EU
3274471680,3274471935,GB
-3274471936,3274472959,EU
3274472960,3274483711,GB
-3274483712,3274489599,EU
3274489600,3274489855,GB
-3274489856,3274490175,EU
-3274490176,3274491247,GB
-3274491248,3274491255,EU
+3274490176,3274490895,GB
+3274490912,3274491199,GB
+3274491208,3274491247,GB
3274491256,3274491295,GB
-3274491296,3274491303,EU
3274491304,3274491319,GB
-3274491320,3274491327,EU
3274491328,3274491383,GB
-3274491384,3274491391,EU
3274491392,3274504447,GB
-3274504448,3274505727,EU
3274505728,3274505791,GB
-3274505792,3274505792,EU
3274505793,3274505855,GB
-3274505856,3274506239,EU
3274506240,3274571775,IT
3274571776,3274579967,GR
3274579968,3274580991,UA
@@ -126726,9 +66390,7 @@
3274604544,3274612735,TR
3274612736,3274620927,RU
3274620928,3274629119,FR
-3274629120,3274637175,LU
-3274637176,3274637183,A2
-3274637184,3274637311,LU
+3274629120,3274637311,LU
3274637312,3274670079,CZ
3274670080,3274686463,DK
3274686464,3274686719,RU
@@ -126751,15 +66413,12 @@
3274690816,3274691071,ES
3274691072,3274691327,DK
3274691328,3274691583,SI
-3274691584,3274691839,UA
3274691840,3274692095,SI
3274692096,3274692351,RO
3274692352,3274692607,BE
-3274692608,3274692863,DK
3274692864,3274693119,AT
-3274693120,3274693375,LT
3274693376,3274693631,UA
-3274693632,3274693887,KZ
+3274693632,3274693887,RU
3274693888,3274694143,IT
3274694144,3274694399,DK
3274694400,3274694655,GB
@@ -126778,10 +66437,8 @@
3274697728,3274697983,ES
3274697984,3274698239,GB
3274698240,3274698495,SE
-3274698496,3274698751,PL
3274698752,3274699007,GB
3274699008,3274699263,FR
-3274699264,3274699519,RO
3274699520,3274699775,SI
3274699776,3274700031,GB
3274700032,3274700287,CH
@@ -126789,14 +66446,12 @@
3274700544,3274700799,DK
3274700800,3274701055,UA
3274701056,3274701311,DE
-3274701312,3274701567,TJ
3274701568,3274701823,IT
3274701824,3274702079,IL
3274702080,3274702335,UA
3274702336,3274702591,SE
3274702592,3274702847,KZ
3274702848,3274801151,CH
-3274801152,3274802175,UA
3274802176,3274803199,FR
3274803200,3274804223,DE
3274804224,3274805247,FR
@@ -126811,8 +66466,11 @@
3274814464,3274815487,GB
3274815488,3274816511,RU
3274816512,3274817535,SK
-3274817536,3274819583,RU
-3274819584,3274821631,UA
+3274817536,3274819839,RU
+3274819840,3274820095,UA
+3274820096,3274821119,RU
+3274821120,3274821375,UA
+3274821376,3274821631,RU
3274821632,3274823679,KZ
3274823680,3274825727,TR
3274825728,3274827775,DE
@@ -126823,185 +66481,18 @@
3274850304,3274866687,GB
3274866688,3274883071,DE
3274883072,3274899455,EE
-3274899456,3274902399,DE
-3274902400,3274902423,AT
-3274902424,3274902527,EU
-3274902528,3274909695,DE
-3274909696,3274910207,EU
-3274910208,3274910975,DE
-3274910976,3274911231,EU
-3274911232,3274911743,DE
-3274911744,3274911999,FR
-3274912000,3274912031,GB
-3274912032,3274912063,DE
-3274912064,3274912191,FR
-3274912192,3274912287,DE
-3274912288,3274912295,LU
-3274912296,3274912303,GB
-3274912304,3274912447,FR
-3274912448,3274912511,NL
-3274912512,3274912767,FR
-3274912768,3274912799,DE
-3274912800,3274912831,IT
-3274912832,3274912895,FR
-3274912896,3274913023,RO
-3274913024,3274913279,FR
-3274913280,3274914815,DE
-3274914816,3274915071,EU
-3274915072,3274915839,DE
-3274915840,3274916735,NL
-3274916736,3274916863,DE
-3274916864,3274917215,NL
-3274917216,3274917311,GB
-3274917312,3274917327,ZA
-3274917328,3274917335,CH
-3274917336,3274917343,GB
-3274917344,3274917375,SE
-3274917376,3274917887,NL
-3274917888,3274918399,BE
-3274918400,3274918655,IT
-3274918656,3274918911,BE
-3274918912,3274919359,CH
-3274919360,3274919391,EU
-3274919392,3274919423,CH
-3274919424,3274919935,GB
-3274919936,3274921983,BE
-3274921984,3274922847,ZA
-3274922848,3274922863,BE
-3274922864,3274922871,GB
-3274922872,3274922879,IT
-3274922880,3274922943,ZA
-3274922944,3274923007,NL
-3274923008,3274923263,EU
+3274903552,3274908671,DE
+3274913792,3274914815,DE
+3274920960,3274921983,BE
3274923264,3274924031,NL
-3274924032,3274928127,FR
-3274928128,3274928511,ES
-3274928512,3274928575,RU
-3274928576,3274928639,GB
-3274928640,3274929151,ES
-3274929152,3274929407,EU
-3274929408,3274929663,FR
-3274929664,3274930175,BE
-3274930176,3274932223,IT
-3274932224,3274932991,GB
-3274932992,3274933151,DE
-3274933152,3274933183,CH
-3274933184,3274933215,ZA
-3274933216,3274933247,BE
-3274933248,3274936063,GB
-3274936064,3274936159,SE
-3274936160,3274936175,GB
-3274936176,3274936191,EU
-3274936192,3274936863,GB
-3274936864,3274936871,BE
-3274936872,3274936879,CH
-3274936880,3274936895,SE
-3274936896,3274938367,GB
-3274938368,3274938495,EU
-3274938496,3274938535,GB
-3274938536,3274938543,FR
-3274938544,3274938559,GB
-3274938560,3274938623,EU
-3274938624,3274938879,GB
-3274938880,3274939135,DE
-3274939136,3274939391,IT
+3274926080,3274928127,FR
3274939392,3274940415,ZA
-3274940416,3274941055,DE
-3274941056,3274941087,NL
-3274941088,3274941095,EU
-3274941096,3274941103,IT
-3274941104,3274942463,DE
-3274942464,3274944511,FR
+3274941440,3274942463,DE
+3274942464,3274943487,FR
3274944512,3274948607,NL
-3274948608,3274952447,DK
-3274952448,3274952479,SE
-3274952480,3274952511,FR
-3274952512,3274952527,GB
-3274952528,3274952543,BE
-3274952544,3274952575,GB
-3274952576,3274952703,IT
-3274952704,3274954239,AT
-3274954240,3274954399,NL
-3274954400,3274954415,BE
-3274954416,3274954431,GB
-3274954432,3274954495,PT
-3274954496,3274954623,AT
-3274954624,3274954751,NL
-3274954752,3274955007,SE
-3274955008,3274955263,EU
-3274955264,3274956287,SE
-3274956288,3274956543,GB
-3274956544,3274956615,BE
-3274956616,3274956623,AT
-3274956624,3274956639,DE
-3274956640,3274956655,GB
-3274956656,3274956671,FR
-3274956672,3274956735,DE
-3274956736,3274956767,DK
-3274956768,3274956799,SE
-3274956800,3274957055,CH
-3274957056,3274957567,AT
-3274957568,3274957823,CH
-3274957824,3274957831,GR
-3274957832,3274957951,EU
-3274957952,3274957959,BE
-3274957960,3274957967,EU
-3274957968,3274957983,FR
-3274957984,3274957999,BE
-3274958000,3274958007,GB
-3274958008,3274958015,BE
-3274958016,3274958079,EU
-3274958080,3274958279,IE
-3274958280,3274958287,EU
-3274958288,3274958335,IE
-3274958336,3274959231,AT
-3274959232,3274959247,IT
-3274959248,3274959255,GB
-3274959256,3274959263,ZA
-3274959264,3274959271,EU
-3274959272,3274959279,GB
-3274959280,3274959287,DE
-3274959288,3274959295,GB
-3274959296,3274959327,ES
-3274959328,3274959615,DE
-3274959616,3274960383,EU
-3274960384,3274960447,BE
-3274960448,3274960511,ES
-3274960512,3274960575,GB
-3274960576,3274960639,IT
-3274960640,3274961407,AT
-3274961408,3274961503,CH
-3274961504,3274961535,DK
-3274961536,3274961559,CH
-3274961560,3274961567,EU
-3274961568,3274961663,CH
-3274961664,3274961727,BY
-3274961728,3274961919,EU
-3274961920,3274962111,AT
-3274962112,3274962175,GB
-3274962176,3274962431,ZA
-3274962432,3274962687,BE
-3274962688,3274962879,GR
-3274962880,3274963167,GB
-3274963168,3274963183,IE
-3274963184,3274963191,GB
-3274963192,3274963199,NL
-3274963200,3274963455,DE
-3274963456,3274963711,CH
-3274963712,3274963743,DE
-3274963744,3274963775,FR
-3274963776,3274963783,GB
-3274963784,3274963791,BE
-3274963792,3274963807,NL
-3274963808,3274963839,IT
-3274963840,3274963967,DE
-3274963968,3274964223,FR
-3274964224,3274964735,BE
-3274964736,3274964863,GB
-3274964864,3274964879,HU
-3274964880,3274964895,FR
-3274964896,3274964927,NL
-3274964928,3274964991,GB
+3274948608,3274951679,DK
+3274952704,3274953727,AT
+3274958080,3274958207,IE
3274964992,3275030527,DE
3275030528,3275096063,ES
3275096064,3275104767,RU
@@ -127020,13 +66511,8 @@
3275110912,3275111423,GB
3275111424,3275111935,IT
3275111936,3275112447,FR
-3275112448,3275117581,DK
-3275117582,3275117582,EU
-3275117583,3275120639,DK
-3275120640,3275136639,SE
-3275136640,3275136767,DK
-3275136768,3275137023,SE
-3275137024,3275137535,DE
+3275112448,3275120639,DK
+3275120640,3275137023,SE
3275137536,3275138047,UA
3275138048,3275138559,DE
3275138560,3275139071,UA
@@ -127042,15 +66528,9 @@
3275145216,3275153407,RU
3275153408,3275161599,GB
3275161600,3275227135,ES
-3275227136,3275246847,HU
-3275246848,3275247103,EU
-3275247104,3275262975,HU
-3275262976,3275263231,EU
-3275263232,3275292671,HU
+3275227136,3275292671,HU
3275292672,3275358207,ES
-3275358208,3275371775,RU
-3275371776,3275372031,TJ
-3275372032,3275374591,RU
+3275358208,3275374591,RU
3275374592,3275382783,GB
3275382784,3275390975,SE
3275390976,3275399167,GB
@@ -127058,87 +66538,82 @@
3275407360,3275415551,GB
3275415552,3275423743,UA
3275423744,3275423751,GB
-3275423752,3275423775,EU
-3275423776,3275423839,GB
-3275423840,3275423871,EU
-3275423872,3275424743,GB
-3275424744,3275424751,EU
+3275423808,3275423839,GB
+3275423872,3275424735,GB
3275424752,3275425343,GB
-3275425344,3275425535,EU
3275425536,3275425559,GB
-3275425560,3275425791,EU
-3275425792,3275428407,GB
-3275428408,3275428415,EU
+3275425568,3275425583,GB
+3275425792,3275426559,GB
+3275426576,3275428367,GB
+3275428376,3275428407,GB
3275428416,3275428447,GB
-3275428448,3275429887,EU
3275429888,3275430143,GB
-3275430144,3275430271,EU
3275430272,3275430399,GB
-3275430400,3275430591,EU
3275430592,3275430631,GB
-3275430632,3275430655,EU
3275430656,3275430911,GB
-3275430912,3275431935,EU
3275431936,3275432959,GB
-3275432960,3275433983,EU
3275433984,3275436543,GB
-3275436544,3275436799,EU
-3275436800,3275441407,GB
-3275441408,3275442175,EU
-3275442176,3275442723,GB
-3275442724,3275443199,EU
-3275443200,3275443727,GB
-3275443728,3275443759,EU
+3275436800,3275438655,GB
+3275438672,3275438847,GB
+3275439104,3275441407,GB
+3275441424,3275441439,GB
+3275441472,3275441535,GB
+3275441600,3275441823,GB
+3275441832,3275441835,GB
+3275441840,3275442723,GB
+3275443200,3275443227,GB
+3275443232,3275443239,GB
+3275443248,3275443407,GB
+3275443424,3275443727,GB
3275443760,3275443775,GB
-3275443776,3275443967,EU
-3275443968,3275444735,GB
-3275444736,3275446271,EU
-3275446272,3275447039,GB
-3275447040,3275447055,EU
+3275443840,3275443967,GB
+3275444224,3275444735,GB
+3275446272,3275446783,GB
+3275446800,3275446823,GB
+3275446848,3275447039,GB
3275447056,3275447151,GB
-3275447152,3275448319,EU
-3275448320,3275449927,GB
-3275449928,3275449935,EU
-3275449936,3275450879,GB
-3275450880,3275451231,EU
+3275448320,3275450207,GB
+3275450224,3275450879,GB
3275451232,3275451263,GB
-3275451264,3275451391,EU
3275451392,3275451663,GB
-3275451664,3275452415,EU
-3275452416,3275457023,GB
-3275457024,3275457791,FK
+3275451680,3275451711,GB
+3275451720,3275451727,GB
+3275451744,3275451767,GB
+3275452416,3275455231,GB
+3275455248,3275456407,GB
+3275456416,3275457535,GB
+3275457536,3275457791,FK
3275457792,3275458559,GB
3275458560,3275460095,IE
3275460096,3275460223,GB
3275460224,3275460239,IE
-3275460240,3275460607,EU
+3275460288,3275460295,GB
+3275460352,3275460607,IE
3275460608,3275460863,HK
-3275460864,3275463199,GB
-3275463200,3275463215,EU
-3275463216,3275468655,GB
+3275460864,3275468655,GB
3275468656,3275468671,IE
3275468672,3275468735,GB
3275468736,3275468751,IE
3275468752,3275468767,GB
3275468768,3275468799,IE
-3275468800,3275475043,GB
-3275475044,3275475047,EU
-3275475048,3275475327,GB
-3275475328,3275475359,EU
-3275475360,3275475839,GB
-3275475840,3275475967,EU
-3275475968,3275476223,GB
-3275476224,3275476991,EU
+3275468800,3275474951,GB
+3275474960,3275475039,GB
+3275475044,3275475071,GB
+3275475200,3275476223,GB
+3275476288,3275476479,GB
+3275476656,3275476687,GB
+3275476704,3275476735,GB
3275476992,3275477567,GB
-3275477568,3275477759,EU
-3275477760,3275481087,GB
-3275481088,3275483135,EU
+3275477760,3275478271,GB
+3275478528,3275481087,GB
3275483136,3275483647,GB
-3275483648,3275485183,EU
+3275484160,3275484415,GB
3275485184,3275485215,GB
-3275485216,3275485247,EU
+3275485224,3275485231,GB
3275485248,3275485375,GB
-3275485376,3275489279,EU
+3275485408,3275485423,GB
+3275485440,3275485759,GB
+3275488768,3275489279,CZ
3275489280,3275497471,GB
3275497472,3275505663,DE
3275505664,3275506175,PL
@@ -127146,7 +66621,6 @@
3275506688,3275507199,SE
3275507200,3275507711,UA
3275507712,3275509759,RO
-3275509760,3275509855,IT
3275509856,3275509887,PL
3275509888,3275509919,AM
3275509920,3275509951,PL
@@ -127168,8 +66642,7 @@
3275510720,3275510751,GB
3275510752,3275510783,NL
3275510784,3275510911,CY
-3275510912,3275511167,GB
-3275511168,3275511295,LV
+3275511040,3275511167,GB
3275511296,3275511551,GB
3275511552,3275511679,NL
3275511680,3275511807,CY
@@ -127185,11 +66658,9 @@
3275512960,3275513023,PL
3275513024,3275513087,UA
3275513088,3275513151,CY
-3275513152,3275513215,ES
3275513216,3275513279,CH
3275513280,3275513343,CY
3275513344,3275513471,PL
-3275513472,3275513599,FR
3275513600,3275513727,CY
3275513728,3275513855,GB
3275513856,3275522047,DE
@@ -127199,7 +66670,7 @@
3275531264,3275531775,GB
3275531776,3275532287,IE
3275532288,3275532799,UA
-3275532800,3275533823,GB
+3275532800,3275533311,GB
3275533824,3275534335,UA
3275534848,3275535359,RO
3275535360,3275535871,DE
@@ -127210,7 +66681,7 @@
3275537920,3275538431,IT
3275538432,3275539455,CH
3275539456,3275540479,GB
-3275540480,3275542527,UA
+3275540480,3275541503,UA
3275542528,3275543551,DE
3275543552,3275544575,NL
3275544576,3275545599,PL
@@ -127222,173 +66693,8 @@
3275551744,3275552767,RU
3275552768,3275553791,LV
3275553792,3275554815,FI
-3275554816,3275555391,EU
-3275555392,3275555455,ES
-3275555456,3275555591,EU
-3275555592,3275555647,ES
-3275555648,3275555743,EU
-3275555744,3275555759,ES
-3275555760,3275555767,EU
-3275555768,3275555776,ES
-3275555777,3275560959,EU
-3275560960,3275561215,ES
-3275561216,3275561471,EU
-3275561472,3275561727,ES
-3275561728,3275562495,EU
-3275562496,3275562751,ES
-3275562752,3275563007,EU
-3275563008,3275563519,CH
-3275563520,3275563583,EU
-3275563584,3275563647,CH
-3275563648,3275563775,DE
-3275563776,3275564031,CH
-3275564032,3275564415,EU
-3275564416,3275564495,CH
-3275564496,3275564799,EU
-3275564800,3275565055,CH
-3275565056,3275565311,EU
-3275565312,3275565567,CH
-3275565568,3275565823,EU
-3275565824,3275566079,CH
-3275566080,3275566847,EU
-3275566848,3275567359,CH
-3275567360,3275567615,EU
-3275567616,3275568127,CH
-3275568128,3275568383,EU
-3275568384,3275569407,CH
-3275569408,3275569919,EU
-3275569920,3275570687,CH
-3275570688,3275571199,EU
-3275571200,3275571455,PT
-3275571456,3275571967,EU
-3275571968,3275572095,PT
-3275572096,3275572767,EU
-3275572768,3275572863,PT
-3275572864,3275572991,EU
-3275572992,3275573055,PT
-3275573056,3275573119,EU
-3275573120,3275574015,PT
-3275574016,3275574031,EU
-3275574032,3275574047,PT
-3275574048,3275574143,EU
-3275574144,3275574147,PT
-3275574148,3275574151,EU
-3275574152,3275574159,PT
-3275574160,3275574175,EU
-3275574176,3275574191,PT
-3275574192,3275574783,EU
-3275574784,3275575103,PT
-3275575104,3275575167,EU
-3275575168,3275575231,PT
-3275575232,3275575423,EU
-3275575424,3275575727,PT
-3275575728,3275575871,EU
-3275575872,3275575935,PT
-3275575936,3275576063,EU
-3275576064,3275576319,PT
-3275576320,3275577343,EU
-3275577344,3275577407,PT
-3275577408,3275577471,EU
-3275577472,3275577495,PT
-3275577496,3275577519,EU
-3275577520,3275577567,PT
-3275577568,3275577599,EU
-3275577600,3275577727,PT
-3275577728,3275577791,EU
-3275577792,3275577807,PT
-3275577808,3275577839,EU
-3275577840,3275578623,PT
-3275578624,3275579135,EU
-3275579136,3275579391,PT
-3275579392,3275579519,FR
-3275579520,3275579583,NL
-3275579584,3275579599,EU
-3275579600,3275579615,NL
-3275579616,3275579647,EU
-3275579648,3275580159,NL
-3275580160,3275580927,EU
-3275580928,3275580948,NL
-3275580949,3275580949,EU
-3275580950,3275581311,NL
-3275581312,3275581535,EU
-3275581536,3275581671,NL
-3275581672,3275581679,EU
-3275581680,3275581695,NL
-3275581696,3275582223,EU
-3275582224,3275582247,NL
-3275582248,3275582279,EU
-3275582280,3275582287,NL
-3275582288,3275582655,EU
-3275582656,3275582719,NL
-3275582720,3275582975,EU
-3275582976,3275583231,NL
-3275583232,3275584255,EU
-3275584256,3275584287,NL
-3275584288,3275584511,EU
-3275584512,3275584527,NL
-3275584528,3275585023,EU
-3275585024,3275585279,NL
-3275585280,3275587583,EU
-3275587584,3275587855,BE
-3275587856,3275588095,EU
-3275588096,3275588287,BE
-3275588288,3275588319,NL
-3275588320,3275588351,EU
-3275588352,3275588607,BE
-3275588608,3275588639,EU
-3275588640,3275588655,BE
-3275588656,3275588711,EU
-3275588712,3275588719,CH
-3275588720,3275588735,EU
-3275588736,3275588799,BE
-3275588800,3275588847,EU
-3275588848,3275588855,BE
-3275588856,3275588863,EU
-3275588864,3275589119,IT
-3275589120,3275589271,EU
-3275589272,3275589279,BE
-3275589280,3275589375,EU
-3275589376,3275589471,BE
-3275589472,3275589887,EU
-3275589888,3275590655,BE
-3275590656,3275590911,EU
-3275590912,3275591167,BE
-3275591168,3275591423,EU
-3275591424,3275591679,BE
-3275591680,3275592063,RO
-3275592064,3275592447,EU
-3275592448,3275592959,RO
-3275592960,3275593343,EU
-3275593344,3275593855,RO
-3275593856,3275593983,EU
-3275593984,3275595007,RO
-3275595008,3275595039,BE
-3275595040,3275595263,EU
-3275595264,3275595519,US
-3275595520,3275596167,EU
-3275596168,3275596175,AT
-3275596176,3275599103,EU
-3275599104,3275599231,AT
-3275599232,3275599871,EU
-3275599872,3275600127,AT
-3275600128,3275603967,EU
-3275603968,3275604735,IT
-3275604736,3275604767,IL
-3275604768,3275604991,EU
-3275604992,3275605759,IT
-3275605760,3275606015,EU
-3275606016,3275606271,IT
-3275606272,3275606527,EU
-3275606528,3275606783,IT
-3275606784,3275608831,EU
-3275608832,3275610063,IT
-3275610064,3275610111,EU
-3275610112,3275610623,IT
-3275610624,3275612159,EU
-3275612160,3275612287,LU
-3275612288,3275612927,EU
-3275612928,3275613951,LU
-3275613952,3275620351,EU
+3275588448,3275588463,BE
+3275612928,3275613183,LU
3275620352,3275622399,RU
3275622400,3275623423,GB
3275623424,3275623935,PL
@@ -127396,7 +66702,6 @@
3275624448,3275624959,SK
3275624960,3275625471,IL
3275625472,3275625983,DE
-3275625984,3275626495,BG
3275626496,3275627007,UA
3275627008,3275627519,AT
3275627520,3275628031,GB
@@ -127423,7 +66728,6 @@
3275640832,3275641343,DE
3275641344,3275641855,NL
3275641856,3275642367,AT
-3275642368,3275642879,RU
3275642880,3275643391,RO
3275643392,3275643903,BE
3275643904,3275644415,RU
@@ -127434,12 +66738,9 @@
3275669504,3275677695,GB
3275677696,3275685887,IT
3275685888,3275751423,DE
-3275751424,3275751679,AT
-3275751680,3275751935,EU
-3275751936,3275759615,AT
+3275751424,3275759615,AT
3275759616,3275775999,NL
3275776000,3275784191,DE
-3275784192,3275784703,RO
3275784704,3275785215,PL
3275785216,3275785727,RO
3275785728,3275786239,CH
@@ -127451,7 +66752,6 @@
3275788800,3275789311,AT
3275789312,3275789823,UA
3275789824,3275790335,PL
-3275790336,3275790847,MD
3275790848,3275791359,UA
3275791360,3275791871,RU
3275791872,3275792383,PL
@@ -127472,11 +66772,7 @@
3275800064,3275800575,UA
3275800576,3275808767,RU
3275808768,3275816959,UA
-3275816960,3275818207,CH
-3275818208,3275818215,DE
-3275818216,3275839231,CH
-3275839232,3275839487,EU
-3275839488,3275882495,CH
+3275816960,3275882495,CH
3275882496,3275884543,DE
3275884544,3275886591,IT
3275886592,3275888639,PL
@@ -127502,7 +66798,6 @@
3275904000,3275904255,RU
3275904256,3275904511,CH
3275904512,3275904767,PL
-3275904768,3275905023,RU
3275905024,3275905279,PL
3275905280,3275905535,RU
3275905536,3275905791,NL
@@ -127515,9 +66810,8 @@
3275907840,3275908095,DE
3275908096,3275908351,SA
3275908352,3275908607,SE
-3275908608,3275908863,US
+3275908608,3275908863,DE
3275908864,3275909119,PL
-3275909120,3275909375,RU
3275909376,3275909631,UA
3275909632,3275909887,EE
3275909888,3275910143,SI
@@ -127527,13 +66821,11 @@
3275910912,3275911167,DE
3275911168,3275911423,FR
3275911424,3275911679,RO
-3275911680,3275911935,UA
3275911936,3275912191,BE
3275912192,3275912447,PL
3275912448,3275912703,RU
3275912704,3275912959,IL
3275912960,3275913215,FR
-3275913216,3275913471,UA
3275913472,3275913983,DE
3275913984,3275914239,CH
3275914240,3275914495,RO
@@ -127550,385 +66842,56 @@
3275919872,3275920383,UA
3275920384,3275920895,GB
3275920896,3275921407,ES
-3275921408,3275921919,UA
3275921920,3275922431,DE
3275922432,3275922943,UA
3275922944,3275923455,GR
3275923456,3275931647,ME
3275931648,3275939839,UA
3275939840,3275948031,GB
-3275948032,3275984007,SE
-3275984008,3275984011,DK
-3275984012,3275984043,SE
-3275984044,3275984047,DK
-3275984048,3276013567,SE
-3276013568,3276014087,FR
-3276014088,3276014095,GB
-3276014096,3276014151,FR
-3276014152,3276014167,GB
-3276014168,3276014191,FR
-3276014192,3276014207,GB
-3276014208,3276014255,FR
-3276014256,3276014263,GB
-3276014264,3276015103,FR
-3276015104,3276015119,GB
-3276015120,3276015191,FR
-3276015192,3276015231,GB
-3276015232,3276015247,FR
-3276015248,3276015263,GB
-3276015264,3276015295,FR
-3276015296,3276015327,GB
-3276015328,3276016391,FR
-3276016392,3276016399,GB
-3276016400,3276016415,FR
-3276016416,3276016463,GB
-3276016464,3276016511,FR
-3276016512,3276016591,GB
-3276016592,3276016895,FR
-3276016896,3276016927,GB
-3276016928,3276016943,FR
-3276016944,3276016959,GB
-3276016960,3276016975,FR
-3276016976,3276016991,GB
-3276016992,3276017039,FR
-3276017040,3276017043,GB
-3276017044,3276017047,FR
-3276017048,3276017055,GB
-3276017056,3276017119,FR
-3276017120,3276017151,GB
-3276017152,3276017327,FR
-3276017328,3276017343,GB
-3276017344,3276017551,FR
-3276017552,3276017567,GB
-3276017568,3276017607,FR
-3276017608,3276017663,GB
-3276017664,3276018431,FR
-3276018432,3276018447,GB
-3276018448,3276018495,FR
-3276018496,3276018527,GB
-3276018528,3276018543,FR
-3276018544,3276018623,GB
-3276018624,3276018943,FR
-3276018944,3276018975,GB
-3276018976,3276018985,FR
-3276018986,3276019007,GB
-3276019008,3276019023,FR
-3276019024,3276019071,GB
-3276019072,3276019135,FR
-3276019136,3276019151,GB
-3276019152,3276019575,FR
-3276019576,3276019599,GB
-3276019600,3276019639,FR
-3276019640,3276019671,GB
-3276019672,3276019679,FR
-3276019680,3276019687,GB
-3276019688,3276019695,FR
-3276019696,3276019703,GB
-3276019704,3276019719,FR
-3276019720,3276019727,GB
-3276019728,3276019823,FR
-3276019824,3276019831,GB
-3276019832,3276019839,FR
-3276019840,3276019855,GB
-3276019856,3276019863,FR
-3276019864,3276019871,GB
-3276019872,3276019919,FR
-3276019920,3276019927,GB
-3276019928,3276019959,FR
-3276019960,3276019967,GB
-3276019968,3276020503,FR
-3276020504,3276020511,GB
-3276020512,3276020623,FR
-3276020624,3276020631,GB
-3276020632,3276020679,FR
-3276020680,3276020687,GB
-3276020688,3276022127,FR
-3276022128,3276022143,GB
-3276022144,3276022215,FR
-3276022216,3276022223,GB
-3276022224,3276022255,FR
-3276022256,3276022271,GB
-3276022272,3276022399,FR
-3276022400,3276022407,GB
-3276022408,3276022455,FR
-3276022456,3276022463,GB
-3276022464,3276022479,FR
-3276022480,3276022495,GB
-3276022496,3276023071,FR
-3276023072,3276023079,GB
-3276023080,3276023087,FR
-3276023088,3276023167,GB
-3276023168,3276023207,FR
-3276023208,3276023215,BE
-3276023216,3276023743,FR
-3276023744,3276023767,GB
-3276023768,3276023847,FR
-3276023848,3276023855,GB
-3276023856,3276023871,FR
-3276023872,3276023887,GB
-3276023888,3276023943,FR
-3276023944,3276023967,GB
-3276023968,3276025111,FR
-3276025112,3276025135,GB
-3276025136,3276025151,FR
-3276025152,3276025159,GB
+3275948032,3276013567,SE
+3276013568,3276014239,GB
+3276014240,3276014247,FR
+3276014248,3276014799,GB
+3276014800,3276014815,FR
+3276014816,3276014951,GB
+3276014952,3276014959,ES
+3276014960,3276018175,GB
+3276018176,3276018431,FR
+3276018432,3276019495,GB
+3276019496,3276019503,FR
+3276019504,3276019631,GB
+3276019632,3276019639,FR
+3276019640,3276020129,GB
+3276020130,3276020130,FR
+3276020131,3276020735,GB
+3276020736,3276020991,FR
+3276020992,3276025159,GB
3276025160,3276025167,FR
-3276025168,3276025175,GB
-3276025176,3276025183,FR
-3276025184,3276025191,GB
-3276025192,3276025207,FR
-3276025208,3276025215,GB
-3276025216,3276026167,FR
-3276026168,3276026175,GB
-3276026176,3276026191,FR
-3276026192,3276026199,GB
-3276026200,3276026215,FR
-3276026216,3276026223,GB
-3276026224,3276026319,FR
-3276026320,3276026351,GB
-3276026352,3276026703,FR
-3276026704,3276026719,GB
-3276026720,3276026727,FR
-3276026728,3276026783,GB
-3276026784,3276026815,FR
-3276026816,3276026823,GB
-3276026824,3276026847,FR
-3276026848,3276026927,GB
-3276026928,3276026943,FR
-3276026944,3276026991,GB
-3276026992,3276027311,FR
-3276027312,3276027327,GB
-3276027328,3276027671,FR
-3276027672,3276027679,GB
-3276027680,3276027695,FR
-3276027696,3276027743,GB
-3276027744,3276027791,FR
-3276027792,3276027807,GB
-3276027808,3276027855,FR
-3276027856,3276027871,GB
-3276027872,3276027951,FR
-3276027952,3276027967,GB
-3276027968,3276028047,FR
-3276028048,3276028063,GB
-3276028064,3276028079,FR
-3276028080,3276028111,GB
-3276028112,3276028127,FR
-3276028128,3276028143,GB
-3276028144,3276028159,FR
-3276028160,3276028231,GB
-3276028232,3276028247,FR
-3276028248,3276028255,GB
-3276028256,3276028263,FR
-3276028264,3276028287,GB
-3276028288,3276028479,FR
-3276028480,3276028511,GB
-3276028512,3276028743,FR
-3276028744,3276028751,GB
-3276028752,3276028759,FR
-3276028760,3276028767,GB
-3276028768,3276028791,FR
-3276028792,3276028799,GB
-3276028800,3276028807,FR
-3276028808,3276028815,GB
-3276028816,3276028863,FR
-3276028864,3276028871,GB
-3276028872,3276028879,FR
-3276028880,3276028887,GB
-3276028888,3276028895,FR
-3276028896,3276028927,GB
-3276028928,3276029183,FR
-3276029184,3276029199,GB
-3276029200,3276029343,FR
-3276029344,3276029359,GB
-3276029360,3276029375,FR
-3276029376,3276029407,GB
-3276029408,3276029423,FR
-3276029424,3276029439,GB
-3276029440,3276029583,FR
-3276029584,3276029599,GB
-3276029600,3276029727,FR
-3276029728,3276029791,GB
-3276029792,3276029855,FR
-3276029856,3276029887,GB
-3276029888,3276029919,FR
-3276029920,3276029951,GB
-3276029952,3276029983,FR
-3276029984,3276029999,GB
-3276030000,3276030079,FR
-3276030080,3276030095,GB
-3276030096,3276030191,FR
-3276030192,3276030207,GB
-3276030208,3276030719,FR
-3276030720,3276030975,GB
-3276030976,3276031527,FR
-3276031528,3276031551,GB
-3276031552,3276031559,FR
-3276031560,3276031591,GB
-3276031592,3276031631,FR
-3276031632,3276031679,GB
-3276031680,3276031719,FR
-3276031720,3276031743,GB
-3276031744,3276032007,FR
-3276032008,3276032015,GB
-3276032016,3276032023,FR
-3276032024,3276032047,GB
-3276032048,3276032055,FR
-3276032056,3276032063,GB
-3276032064,3276032103,FR
-3276032104,3276032111,GB
-3276032112,3276032191,FR
-3276032192,3276032207,GB
-3276032208,3276032223,FR
-3276032224,3276032255,GB
-3276032256,3276032263,FR
-3276032264,3276032271,GB
-3276032272,3276032279,FR
-3276032280,3276032303,GB
-3276032304,3276032319,FR
-3276032320,3276032343,GB
-3276032344,3276032367,FR
-3276032368,3276032415,GB
-3276032416,3276032431,FR
-3276032432,3276032479,GB
-3276032480,3276032543,FR
-3276032544,3276032559,GB
-3276032560,3276032591,FR
-3276032592,3276032607,GB
-3276032608,3276032719,FR
-3276032720,3276032735,GB
-3276032736,3276033039,FR
-3276033040,3276033119,GB
-3276033120,3276033151,FR
-3276033152,3276033167,GB
-3276033168,3276033215,FR
-3276033216,3276033231,GB
-3276033232,3276033247,FR
-3276033248,3276033279,GB
-3276033280,3276033535,FR
-3276033536,3276033655,GB
-3276033656,3276033663,FR
-3276033664,3276033695,GB
-3276033696,3276033791,FR
-3276033792,3276033823,GB
-3276033824,3276033839,FR
-3276033840,3276033855,GB
-3276033856,3276033863,FR
-3276033864,3276033887,GB
-3276033888,3276036383,FR
-3276036384,3276036415,GB
-3276036416,3276036671,FR
-3276036672,3276036863,GB
-3276036864,3276037703,FR
-3276037704,3276037759,GB
-3276037760,3276037887,FR
-3276037888,3276037903,GB
-3276037904,3276037959,FR
-3276037960,3276037983,GB
-3276037984,3276038047,FR
-3276038048,3276038111,GB
-3276038112,3276038159,FR
-3276038160,3276038399,GB
-3276038400,3276038663,FR
-3276038664,3276038671,GB
-3276038672,3276038703,FR
-3276038704,3276038719,GB
-3276038720,3276038735,FR
-3276038736,3276038767,GB
-3276038768,3276038799,FR
-3276038800,3276038815,GB
-3276038816,3276038847,FR
-3276038848,3276038911,GB
-3276038912,3276038919,FR
-3276038920,3276039167,GB
-3276039168,3276039975,FR
-3276039976,3276039999,GB
-3276040000,3276040063,FR
-3276040064,3276040095,GB
-3276040096,3276040159,FR
-3276040160,3276040175,GB
-3276040176,3276040231,FR
-3276040232,3276040239,GB
-3276040240,3276040319,FR
-3276040320,3276040335,GB
-3276040336,3276040439,FR
-3276040440,3276040495,GB
-3276040496,3276040543,FR
-3276040544,3276040575,GB
-3276040576,3276040591,FR
-3276040592,3276040607,GB
-3276040608,3276040639,FR
-3276040640,3276040671,GB
-3276040672,3276040879,FR
-3276040880,3276040895,GB
-3276040896,3276040975,FR
-3276040976,3276041007,GB
-3276041008,3276041071,FR
-3276041072,3276041087,GB
-3276041088,3276041199,FR
-3276041200,3276041215,GB
-3276041216,3276041279,FR
-3276041280,3276041311,GB
-3276041312,3276041391,FR
-3276041392,3276041407,GB
-3276041408,3276041503,FR
-3276041504,3276041535,GB
-3276041536,3276041551,FR
-3276041552,3276041599,GB
-3276041600,3276041759,FR
-3276041760,3276041775,GB
-3276041776,3276041839,FR
-3276041840,3276041887,GB
-3276041888,3276041919,FR
-3276041920,3276041951,GB
-3276041952,3276041967,FR
-3276041968,3276041983,GB
-3276041984,3276042223,FR
-3276042224,3276042239,GB
-3276042240,3276044351,FR
-3276044352,3276044359,GB
-3276044360,3276044367,FR
-3276044368,3276044383,GB
-3276044384,3276044447,FR
-3276044448,3276044495,GB
-3276044496,3276044511,FR
-3276044512,3276044543,GB
-3276044544,3276044559,FR
-3276044560,3276044575,GB
-3276044576,3276044607,FR
-3276044608,3276044639,GB
-3276044640,3276044671,FR
-3276044672,3276044703,GB
-3276044704,3276044735,FR
-3276044736,3276044799,GB
-3276044800,3276045191,FR
-3276045192,3276045199,GB
-3276045200,3276045223,FR
-3276045224,3276045239,GB
-3276045240,3276045255,FR
-3276045256,3276045271,GB
-3276045272,3276045287,FR
-3276045288,3276045311,GB
-3276045312,3276045351,FR
-3276045352,3276045359,GB
-3276045360,3276045391,FR
-3276045392,3276045407,GB
-3276045408,3276045455,FR
-3276045456,3276045487,GB
-3276045488,3276045543,FR
-3276045544,3276045551,GB
-3276045552,3276045567,FR
-3276045568,3276045575,GB
-3276045576,3276045583,FR
-3276045584,3276045607,GB
-3276045608,3276045631,FR
-3276045632,3276045647,GB
-3276045648,3276045767,FR
-3276045768,3276045783,GB
-3276045784,3276045815,FR
-3276045816,3276045855,GB
-3276045856,3276045919,FR
-3276045920,3276045951,GB
-3276045952,3276046335,FR
+3276025168,3276026367,GB
+3276026368,3276026623,FR
+3276026624,3276027647,GB
+3276027648,3276027903,FR
+3276027904,3276029375,GB
+3276029376,3276029439,FR
+3276029440,3276030591,GB
+3276030592,3276030607,FR
+3276030608,3276031479,GB
+3276031480,3276031487,FR
+3276031488,3276032311,GB
+3276032312,3276032319,FR
+3276032320,3276039263,GB
+3276039264,3276039279,FR
+3276039280,3276040351,GB
+3276040352,3276040367,FR
+3276040368,3276042015,GB
+3276042016,3276042031,FR
+3276042032,3276042079,GB
+3276042080,3276042095,FR
+3276042096,3276042495,GB
+3276042496,3276042751,FR
+3276042752,3276045247,GB
+3276045248,3276045255,FR
+3276045256,3276046335,GB
3276046336,3276062719,RU
3276062720,3276063231,PL
3276063232,3276063743,FR
@@ -127945,8 +66908,6 @@
3276068864,3276069887,UA
3276069888,3276070399,GB
3276070400,3276070911,UA
-3276070912,3276071423,GB
-3276071424,3276071935,PL
3276071936,3276072447,GB
3276072448,3276072959,SK
3276072960,3276073471,PL
@@ -127958,10 +66919,8 @@
3276076032,3276076287,NL
3276076288,3276076543,RU
3276076544,3276077055,DE
-3276077056,3276077567,UA
3276077568,3276078079,FR
3276078080,3276078591,RU
-3276078592,3276079103,GB
3276079104,3276095487,NO
3276095488,3276096511,RU
3276096512,3276097535,IT
@@ -127972,7 +66931,6 @@
3276101632,3276102655,LV
3276102656,3276103679,GB
3276103680,3276104703,SI
-3276104704,3276105727,RU
3276105728,3276106751,AT
3276106752,3276107775,BG
3276107776,3276108799,DE
@@ -127981,7 +66939,6 @@
3276110848,3276111871,PL
3276111872,3276112895,DK
3276112896,3276114943,UA
-3276114944,3276115967,KW
3276115968,3276116991,NL
3276116992,3276118015,RU
3276118016,3276119039,GB
@@ -128002,12 +66959,10 @@
3276134400,3276135423,RU
3276135424,3276136447,UA
3276136448,3276137471,NL
-3276137472,3276138495,PL
3276138496,3276139519,NL
3276139520,3276140543,RU
3276140544,3276141567,DE
3276141568,3276143615,UA
-3276143616,3276144639,GB
3276144640,3276152831,CH
3276152832,3276161023,HU
3276161024,3276169215,GB
@@ -128018,17 +66973,7 @@
3276201984,3276210175,AT
3276210176,3276234303,DE
3276234304,3276234367,GB
-3276234368,3276241759,DE
-3276241760,3276241767,FR
-3276241768,3276244447,DE
-3276244448,3276244479,RO
-3276244480,3276249279,DE
-3276249280,3276249287,FR
-3276249288,3276249855,DE
-3276249856,3276249983,GB
-3276249984,3276250079,DE
-3276250080,3276250095,FR
-3276250096,3276275711,DE
+3276234368,3276275711,DE
3276275712,3276283903,SK
3276283904,3276292095,GB
3276292096,3276300287,BE
@@ -128088,430 +67033,25 @@
3276431104,3276431359,RU
3276431360,3276447743,GB
3276447744,3276451583,DE
-3276451584,3276455935,EU
3276455936,3276464127,BE
3276464128,3276472319,GR
-3276472320,3276472575,EU
-3276472576,3276472831,AT
-3276472832,3276472863,EU
-3276472864,3276472879,AT
-3276472880,3276473103,EU
-3276473104,3276473111,AT
-3276473112,3276473119,EU
-3276473120,3276473135,AT
-3276473136,3276473143,EU
-3276473144,3276473199,AT
-3276473200,3276473215,EU
-3276473216,3276473279,AT
-3276473280,3276473295,EU
-3276473296,3276473311,AT
-3276473312,3276473343,EU
-3276473344,3276473855,AT
-3276473856,3276474271,EU
-3276474272,3276474295,AT
-3276474296,3276474319,EU
-3276474320,3276474367,AT
-3276474368,3276474623,EU
-3276474624,3276474879,GB
-3276474880,3276475007,EU
-3276475008,3276475023,IT
-3276475024,3276475039,FR
-3276475040,3276475055,EU
-3276475056,3276475071,IT
-3276475072,3276475903,EU
-3276475904,3276476111,IT
-3276476112,3276476119,GB
-3276476120,3276476159,IT
-3276476160,3276476415,GB
-3276476416,3276476671,CH
-3276476672,3276477439,EU
-3276477440,3276477999,CH
-3276478000,3276478015,EU
-3276478016,3276478039,CH
-3276478040,3276478319,EU
-3276478320,3276478335,CH
-3276478336,3276478463,EU
-3276478464,3276479279,FR
-3276479280,3276479343,EU
-3276479344,3276479351,GB
-3276479352,3276479359,EU
-3276479360,3276479615,FR
-3276479616,3276479647,EU
-3276479648,3276479743,FR
-3276479744,3276479999,EU
-3276480000,3276480331,FR
-3276480332,3276480335,EU
-3276480336,3276480375,FR
-3276480376,3276480383,EU
-3276480384,3276480439,FR
-3276480440,3276480455,EU
-3276480456,3276480499,FR
-3276480500,3276480511,EU
-3276480512,3276480767,RU
-3276480768,3276481023,EU
-3276481024,3276481535,RU
-3276481536,3276482559,EU
-3276482560,3276482815,GR
-3276482816,3276483071,EU
-3276483072,3276483359,GR
-3276483360,3276483391,EU
-3276483392,3276483519,GR
-3276483520,3276483583,EU
-3276483584,3276483711,GR
-3276483712,3276483839,EU
-3276483840,3276484351,GR
-3276484352,3276484383,EU
-3276484384,3276484479,GR
-3276484480,3276484607,EU
-3276484608,3276484863,SK
-3276484864,3276485631,EU
+3276473304,3276473311,AT
+3276480256,3276480511,FR
3276485632,3276486655,GB
-3276486656,3276486911,EU
-3276486912,3276487167,GR
-3276487168,3276488959,EU
-3276488960,3276489215,CZ
-3276489216,3276491263,EU
-3276491264,3276491327,CZ
-3276491328,3276491359,EU
-3276491360,3276491391,NO
-3276491392,3276491775,CZ
-3276491776,3276491847,GB
-3276491848,3276491855,EU
-3276491856,3276492047,GB
-3276492048,3276492063,EU
-3276492064,3276492127,GB
-3276492128,3276492143,EU
-3276492144,3276492151,GB
-3276492152,3276492159,EU
-3276492160,3276492191,GB
-3276492192,3276492287,EU
-3276492288,3276492831,GB
-3276492832,3276492839,EU
-3276492840,3276493135,GB
-3276493136,3276493151,EU
-3276493152,3276493215,GB
-3276493216,3276493247,EU
-3276493248,3276495543,GB
-3276495544,3276495551,EU
-3276495552,3276495763,GB
-3276495764,3276495767,EU
-3276495768,3276495831,GB
-3276495832,3276495839,EU
-3276495840,3276496639,GB
-3276496640,3276496895,EU
-3276496896,3276497279,DE
-3276497280,3276497295,EU
-3276497296,3276497311,DE
-3276497312,3276497343,EU
-3276497344,3276497603,DE
-3276497604,3276497607,EU
-3276497608,3276497919,DE
-3276497920,3276498047,GB
-3276498048,3276498175,EU
-3276498176,3276498431,GB
-3276498432,3276499199,DE
-3276499200,3276499455,EU
-3276499456,3276499503,DE
-3276499504,3276499519,EU
-3276499520,3276499655,DE
-3276499656,3276499679,EU
-3276499680,3276499759,DE
-3276499760,3276499791,EU
-3276499792,3276499823,DE
-3276499824,3276499839,EU
-3276499840,3276499999,DE
-3276500000,3276500031,CH
-3276500032,3276500095,DE
-3276500096,3276500127,EU
-3276500128,3276500223,DE
-3276500224,3276500479,EU
-3276500480,3276500735,DE
-3276500736,3276500991,EU
-3276500992,3276501023,DE
-3276501024,3276501055,FR
-3276501056,3276501119,EU
-3276501120,3276501151,DE
-3276501152,3276501167,EU
-3276501168,3276501183,DE
-3276501184,3276501247,EU
-3276501248,3276501503,DE
-3276501504,3276502271,EU
-3276502272,3276505087,DE
-3276505088,3276505231,ZA
-3276505232,3276505247,EU
-3276505248,3276505599,ZA
-3276505600,3276505855,EU
-3276505856,3276505887,ZA
-3276505888,3276505903,EU
-3276505904,3276505919,ZA
-3276505920,3276505983,EU
-3276505984,3276506047,ZA
-3276506048,3276506071,EU
-3276506072,3276506079,ZA
-3276506080,3276506095,EU
-3276506096,3276506159,ZA
-3276506160,3276506175,EU
-3276506176,3276506191,ZA
-3276506192,3276506207,EU
-3276506208,3276506367,ZA
-3276506368,3276506623,EU
-3276506624,3276507135,ZA
-3276507136,3276507231,CH
-3276507232,3276507391,EU
-3276507392,3276507647,CH
-3276507648,3276508159,EU
-3276508160,3276508327,GB
-3276508328,3276508351,EU
-3276508352,3276508415,FR
-3276508416,3276508671,GB
-3276508672,3276508679,EU
-3276508680,3276508975,GB
-3276508976,3276508983,EU
-3276508984,3276509047,GB
-3276509048,3276509055,EU
-3276509056,3276509087,GB
-3276509088,3276509103,EU
-3276509104,3276509107,GB
-3276509108,3276509119,EU
-3276509120,3276509155,GB
-3276509156,3276509183,EU
+3276503040,3276505087,DE
+3276508680,3276508687,GB
+3276508928,3276509183,GB
3276509184,3276510207,IT
-3276510208,3276510719,EU
-3276510720,3276510751,IT
-3276510752,3276510783,EU
-3276510784,3276510815,IT
-3276510816,3276510847,EU
-3276510848,3276510911,GB
-3276510912,3276511487,EU
-3276511488,3276511775,ZA
-3276511776,3276511823,EU
-3276511824,3276511839,ZA
-3276511840,3276511871,EU
-3276511872,3276511919,ZA
-3276511920,3276511935,EU
-3276511936,3276511951,ZA
-3276511952,3276511967,EU
-3276511968,3276512191,ZA
-3276512192,3276512199,EU
-3276512200,3276512207,ZA
-3276512208,3276512255,EU
3276512256,3276513023,ZA
-3276513024,3276513535,EU
-3276513536,3276513551,CH
-3276513552,3276513559,EU
-3276513560,3276513567,CH
-3276513568,3276514335,EU
-3276514336,3276514367,CH
-3276514368,3276514559,EU
-3276514560,3276514815,CH
-3276514816,3276515327,EU
-3276515328,3276515583,ES
-3276515584,3276517375,EU
-3276517376,3276517503,NL
-3276517504,3276517631,EU
-3276517632,3276517647,NL
-3276517648,3276517655,EU
-3276517656,3276517759,NL
-3276517760,3276517791,EU
-3276517792,3276517887,NL
-3276517888,3276517903,EU
-3276517904,3276517951,NL
-3276517952,3276518015,EU
-3276518016,3276518023,NL
-3276518024,3276518095,EU
-3276518096,3276518111,NL
-3276518112,3276518127,EU
-3276518128,3276518191,NL
-3276518192,3276518207,EU
-3276518208,3276518271,NL
-3276518272,3276518303,EU
-3276518304,3276518335,NL
-3276518336,3276518351,EU
-3276518352,3276518367,NL
-3276518368,3276518911,EU
-3276518912,3276519423,BE
-3276519424,3276519679,EU
-3276519680,3276520191,DK
-3276520192,3276520223,BE
-3276520224,3276520255,GB
-3276520256,3276520407,BE
-3276520408,3276520423,EU
-3276520424,3276520447,BE
-3276520448,3276520463,EU
-3276520464,3276520591,SE
-3276520592,3276520607,EU
-3276520608,3276520623,SE
-3276520624,3276520639,EU
-3276520640,3276520703,SE
-3276520704,3276520767,EU
-3276520768,3276520815,SE
-3276520816,3276520831,EU
-3276520832,3276520927,SE
-3276520928,3276520943,EU
-3276520944,3276521215,SE
-3276521216,3276521471,EU
-3276521472,3276521487,RO
-3276521488,3276521983,EU
-3276521984,3276523519,NL
-3276523520,3276523791,EU
-3276523792,3276523911,NO
-3276523912,3276523919,EU
-3276523920,3276523951,NO
-3276523952,3276523967,EU
-3276523968,3276524031,NO
-3276524032,3276524063,EU
-3276524064,3276524095,TR
-3276524096,3276524191,EU
-3276524192,3276524287,TR
-3276524288,3276524543,EU
-3276524544,3276524799,GB
-3276524800,3276524863,PT
-3276524864,3276525039,EU
-3276525040,3276525055,PT
-3276525056,3276525311,FI
-3276525312,3276525503,EU
-3276525504,3276525527,HR
-3276525528,3276525535,PL
-3276525536,3276525567,HR
-3276525568,3276526079,EU
-3276526080,3276526087,CH
-3276526088,3276526095,EU
-3276526096,3276526111,CH
-3276526112,3276526143,EU
-3276526144,3276526159,CH
-3276526160,3276526335,EU
-3276526336,3276526591,CH
-3276526592,3276527103,EU
-3276527104,3276527135,SI
-3276527136,3276527167,EU
-3276527168,3276527199,SI
-3276527200,3276527215,EU
-3276527216,3276527231,SI
-3276527232,3276527359,EU
-3276527360,3276527615,SI
+3276517632,3276517887,NL
+3276518368,3276518383,NL
+3276522496,3276523519,NL
3276527616,3276527743,PK
-3276527744,3276527871,EU
-3276527872,3276527999,PK
-3276528000,3276528127,EU
-3276528128,3276528223,BE
-3276528224,3276528239,EU
-3276528240,3276528247,BE
-3276528248,3276528255,GB
-3276528256,3276528351,BE
3276528352,3276528359,GB
-3276528360,3276528367,FR
-3276528368,3276528399,BE
-3276528400,3276528447,EU
-3276528448,3276528503,BE
-3276528504,3276528511,EU
-3276528512,3276528519,BE
-3276528520,3276528527,EU
-3276528528,3276528543,BE
-3276528544,3276528559,EU
-3276528560,3276528567,BE
-3276528568,3276528575,EU
-3276528576,3276528719,BE
-3276528720,3276528727,EU
-3276528728,3276528735,BE
-3276528736,3276528767,EU
-3276528768,3276528799,BE
-3276528800,3276528815,GB
-3276528816,3276528831,EU
-3276528832,3276528895,BE
-3276528896,3276528927,IE
-3276528928,3276528935,EU
-3276528936,3276529151,IE
-3276529152,3276529167,TR
-3276529168,3276529183,EU
-3276529184,3276529279,TR
-3276529280,3276529327,EU
-3276529328,3276529351,TR
-3276529352,3276529359,EU
-3276529360,3276529375,TR
-3276529376,3276529391,EU
-3276529392,3276529407,TR
-3276529408,3276529663,EU
-3276529664,3276530439,NL
-3276530440,3276530447,EU
-3276530448,3276530495,NL
-3276530496,3276530559,EU
-3276530560,3276532639,NL
-3276532640,3276532640,EU
-3276532641,3276532735,NL
-3276532736,3276532775,TR
-3276532776,3276532783,EU
-3276532784,3276532791,TR
-3276532792,3276532855,EU
-3276532856,3276532991,TR
-3276532992,3276533023,HU
-3276533024,3276533071,EU
-3276533072,3276533087,HU
-3276533088,3276533119,EU
-3276533120,3276533183,HU
-3276533184,3276533247,EU
-3276533248,3276533375,TR
-3276533376,3276533775,EU
-3276533776,3276533791,GB
-3276533792,3276533823,EU
-3276533824,3276533887,IE
-3276533888,3276533927,EU
-3276533928,3276533951,IE
-3276533952,3276533983,EU
-3276533984,3276534015,IE
-3276534016,3276534271,EU
-3276534272,3276534415,GB
-3276534416,3276534431,NL
-3276534432,3276534463,GB
-3276534464,3276534495,FR
-3276534496,3276534527,EU
-3276534528,3276534783,AU
-3276534784,3276534879,NL
-3276534880,3276534887,EU
-3276534888,3276534895,NL
-3276534896,3276534911,EU
-3276534912,3276534919,NL
-3276534920,3276535015,EU
-3276535016,3276535039,GB
-3276535040,3276535063,RU
-3276535064,3276535071,LV
-3276535072,3276535103,RU
-3276535104,3276535311,EU
-3276535312,3276535319,FI
-3276535320,3276535335,EU
-3276535336,3276535343,FI
-3276535344,3276535351,EU
-3276535352,3276535359,FI
-3276535360,3276535375,EU
-3276535376,3276535455,FI
-3276535456,3276535551,EU
-3276535552,3276535807,PK
-3276535808,3276536063,FI
-3276536064,3276536319,EU
-3276536320,3276536430,ES
-3276536431,3276536431,EU
-3276536432,3276536511,ES
-3276536512,3276536583,EU
-3276536584,3276536591,HR
-3276536592,3276536607,HU
-3276536608,3276536639,EU
-3276536640,3276536675,HU
-3276536676,3276536687,EU
-3276536688,3276536711,HU
-3276536712,3276536735,EU
-3276536736,3276536751,HU
-3276536752,3276536831,EU
-3276536832,3276536895,ES
-3276536896,3276536959,EU
-3276536960,3276537007,ES
-3276537008,3276537151,EU
-3276537152,3276537215,AT
-3276537216,3276537343,EU
+3276530688,3276531711,NL
+3276536688,3276536695,HU
3276537344,3276537599,AT
-3276537600,3276537663,GR
-3276537664,3276537855,EU
-3276537856,3276627711,ES
-3276627712,3276627967,PT
-3276627968,3276668927,ES
+3276537856,3276668927,ES
3276668928,3276677119,MC
3276677120,3276678143,HR
3276678144,3276678655,SE
@@ -128520,10 +67060,8 @@
3276679680,3276680191,UA
3276680192,3276680703,SK
3276680704,3276681215,AT
-3276681216,3276681727,PL
3276681728,3276682239,BE
3276682240,3276682751,AT
-3276682752,3276683263,GB
3276683264,3276684287,UA
3276684288,3276684799,RU
3276684800,3276685311,DE
@@ -128548,7 +67086,6 @@
3276695040,3276695551,RU
3276695552,3276696063,UA
3276696064,3276696575,RO
-3276696576,3276697087,EU
3276697088,3276697599,GB
3276697600,3276698111,UA
3276698112,3276699647,RU
@@ -128567,375 +67104,15 @@
3276731392,3276732415,UA
3276732416,3276733439,DE
3276733440,3276734463,UA
-3276734464,3276734735,AT
-3276734736,3276734751,DK
-3276734752,3276734815,AT
-3276734816,3276734847,DE
-3276734848,3276734879,EU
-3276734880,3276734895,GB
-3276734896,3276734911,NL
-3276734912,3276734943,FR
-3276734944,3276735455,AT
-3276735456,3276735487,NL
-3276735488,3276735871,AT
-3276735872,3276735935,EU
-3276735936,3276735999,ES
-3276736000,3276736511,AT
-3276736512,3276736575,IT
-3276736576,3276736735,GB
-3276736736,3276736767,EU
-3276736768,3276736799,IT
-3276736800,3276736815,DE
-3276736816,3276736831,CZ
-3276736832,3276736863,NL
-3276736864,3276736871,DE
-3276736872,3276736879,NL
-3276736880,3276736959,DK
-3276736960,3276736991,CH
-3276736992,3276737015,GB
-3276737016,3276737023,BE
-3276737024,3276737343,IT
-3276737344,3276737407,DE
-3276737408,3276737535,ES
-3276737536,3276737615,IT
-3276737616,3276737631,DE
-3276737632,3276737791,RU
-3276737792,3276737935,NL
-3276737936,3276737943,DE
-3276737944,3276737991,GB
-3276737992,3276737999,IT
-3276738000,3276738015,GB
-3276738016,3276738047,BE
-3276738048,3276738079,GB
-3276738080,3276738111,ES
-3276738112,3276738143,GB
-3276738144,3276738175,IT
-3276738176,3276738559,GB
-3276738560,3276738847,CH
-3276738848,3276739071,EU
-3276739072,3276739151,CH
-3276739152,3276739167,EU
-3276739168,3276740127,CH
-3276740128,3276740167,GB
-3276740168,3276740175,DE
-3276740176,3276740191,NL
-3276740192,3276740223,EU
-3276740224,3276740351,CH
-3276740352,3276740703,FR
-3276740704,3276740719,IT
-3276740720,3276740735,CZ
-3276740736,3276740799,PT
-3276740800,3276740815,SI
-3276740816,3276740831,SK
-3276740832,3276740863,DE
-3276740864,3276741375,FR
-3276741376,3276741631,EU
-3276741632,3276742655,FR
-3276742656,3276742735,RU
-3276742736,3276742751,NL
-3276742752,3276742783,GR
-3276742784,3276742911,HU
-3276742912,3276743071,AT
-3276743072,3276743103,DE
-3276743104,3276743135,HU
-3276743136,3276743167,NL
-3276743168,3276743423,EU
-3276743424,3276743903,AT
-3276743904,3276743935,BE
-3276743936,3276744191,AT
-3276744192,3276744703,BE
-3276744704,3276744959,IT
-3276744960,3276745215,GR
-3276745216,3276745295,DK
-3276745296,3276745311,NL
-3276745312,3276745343,DK
-3276745344,3276745407,DE
-3276745408,3276745655,DK
-3276745656,3276745663,EU
-3276745664,3276745727,DK
-3276745728,3276746047,GB
-3276746048,3276746111,DE
-3276746112,3276746239,IT
-3276746240,3276746335,GB
-3276746336,3276746351,BE
-3276746352,3276746367,NL
-3276746368,3276746751,GB
-3276746752,3276748287,CH
-3276748288,3276748799,GB
-3276748800,3276748951,AT
-3276748952,3276748959,GB
-3276748960,3276749023,AT
-3276749024,3276749055,IT
-3276749056,3276749087,AT
-3276749088,3276749103,FR
-3276749104,3276749119,EU
-3276749120,3276749183,NL
-3276749184,3276749311,DE
-3276749312,3276749343,BE
-3276749344,3276749375,DE
-3276749376,3276749823,BE
-3276749824,3276750151,NL
-3276750152,3276750159,GB
-3276750160,3276750175,FR
-3276750176,3276750207,BE
-3276750208,3276750335,FR
-3276750336,3276750431,GB
-3276750432,3276750463,EU
-3276750464,3276751039,GB
-3276751040,3276751071,FR
-3276751072,3276751087,GB
-3276751088,3276751103,NL
-3276751104,3276751175,GB
-3276751176,3276751199,SE
-3276751200,3276751231,EU
-3276751232,3276751295,IL
-3276751296,3276751359,AT
-3276751360,3276753055,GB
-3276753056,3276753071,NO
-3276753072,3276753119,GB
-3276753120,3276753151,IT
-3276753152,3276753375,GB
-3276753376,3276753407,FI
-3276753408,3276753951,GB
-3276753952,3276753983,HU
-3276753984,3276754991,GB
-3276754992,3276755007,DE
-3276755008,3276755071,HU
-3276755072,3276755199,DE
-3276755200,3276755775,GB
-3276755776,3276755791,NO
-3276755792,3276755807,RU
-3276755808,3276755839,GB
-3276755840,3276755967,ES
-3276755968,3276756031,GB
-3276756032,3276756063,NL
-3276756064,3276756095,BE
-3276756096,3276756287,GB
-3276756288,3276756319,SE
-3276756320,3276756351,FR
-3276756352,3276756671,GB
-3276756672,3276756735,DE
-3276756736,3276757119,GB
-3276757120,3276757135,NO
-3276757136,3276757151,NL
-3276757152,3276757183,GB
-3276757184,3276757247,EU
-3276757248,3276757503,GB
-3276757504,3276757759,EU
-3276757760,3276757823,GB
-3276757824,3276757839,DE
-3276757840,3276757855,ES
-3276757856,3276757887,CH
-3276757888,3276759039,GB
-3276759040,3276759695,DE
-3276759696,3276759711,NL
-3276759712,3276759743,DE
-3276759744,3276759775,CH
-3276759776,3276759807,EU
-3276759808,3276761215,DE
-3276761216,3276761279,ES
-3276761280,3276761919,DE
-3276761920,3276761983,GB
-3276761984,3276762015,DK
-3276762016,3276762111,FR
-3276762112,3276762623,DE
-3276762624,3276762879,EU
-3276762880,3276762943,DE
-3276762944,3276762959,GB
-3276762960,3276762975,IT
-3276762976,3276763007,NO
-3276763008,3276763327,DE
-3276763328,3276763391,SE
-3276763392,3276763519,DE
-3276763520,3276763551,IT
-3276763552,3276763567,CH
-3276763568,3276763583,GR
-3276763584,3276763647,GB
-3276763648,3276763967,DE
-3276763968,3276763983,DK
-3276763984,3276763991,GB
-3276763992,3276763999,BE
-3276764000,3276764031,IT
-3276764032,3276764159,EU
-3276764160,3276765183,DE
-3276765184,3276766975,GB
-3276766976,3276766983,FR
-3276766984,3276766991,EU
-3276766992,3276767015,FR
-3276767016,3276767023,DK
-3276767024,3276767039,BE
-3276767040,3276767079,FR
-3276767080,3276767087,GB
-3276767088,3276767103,NL
-3276767104,3276767231,FR
-3276767232,3276767743,ZA
-3276767744,3276767807,NL
-3276767808,3276767871,DK
-3276767872,3276767935,NL
-3276767936,3276767967,FR
-3276767968,3276767999,AT
-3276768000,3276768511,NL
-3276768512,3276768767,DE
-3276768768,3276768863,ES
-3276768864,3276768895,AT
-3276768896,3276769023,HU
-3276769024,3276769279,DE
-3276769280,3276769295,ES
-3276769296,3276769311,DE
-3276769312,3276769343,CH
-3276769344,3276769407,NL
-3276769408,3276769919,ES
-3276769920,3276769983,EU
-3276769984,3276770015,AT
-3276770016,3276770031,IT
-3276770032,3276770047,CH
-3276770048,3276770143,ES
-3276770144,3276770175,FI
-3276770176,3276770239,ES
-3276770240,3276770303,DK
-3276770304,3276770815,ES
-3276770816,3276770943,EU
-3276770944,3276771135,ES
-3276771136,3276771199,EU
-3276771200,3276771327,ES
-3276771328,3276771455,NL
-3276771456,3276771583,GB
-3276771584,3276772287,NL
-3276772288,3276772351,AT
-3276772352,3276772567,BE
-3276772568,3276772575,EU
-3276772576,3276773375,BE
-3276773376,3276774047,DK
-3276774048,3276774079,FI
-3276774080,3276774095,DK
-3276774096,3276774111,EU
-3276774112,3276774143,IE
-3276774144,3276774271,DK
-3276774272,3276774303,DE
-3276774304,3276774335,FR
-3276774336,3276774399,GB
-3276774400,3276774543,SE
-3276774544,3276774559,GB
-3276774560,3276774591,DE
-3276774592,3276774655,CH
-3276774656,3276775103,SE
-3276775104,3276775167,NL
-3276775168,3276775295,SE
-3276775296,3276775359,FR
-3276775360,3276775391,DK
-3276775392,3276775423,DE
-3276775424,3276781151,NL
-3276781152,3276781247,FR
-3276781248,3276781311,BE
-3276781312,3276781503,NL
-3276781504,3276781567,FR
-3276781568,3276782719,BE
-3276782720,3276782783,EU
-3276782784,3276782799,FR
-3276782800,3276782815,CZ
-3276782816,3276782847,ES
-3276782848,3276782975,BE
-3276782976,3276783039,GR
-3276783040,3276783055,DK
-3276783056,3276783071,GB
-3276783072,3276783087,PT
-3276783088,3276783103,CH
-3276783104,3276783615,IT
-3276783616,3276784383,FR
-3276784384,3276784639,EU
-3276784640,3276784895,FR
-3276784896,3276785151,NO
-3276785152,3276785407,IE
-3276785408,3276785439,PT
-3276785440,3276785455,GR
-3276785456,3276785463,GB
-3276785464,3276785471,IE
-3276785472,3276785535,PT
-3276785536,3276785567,BE
-3276785568,3276785599,PT
-3276785600,3276785607,TR
-3276785608,3276785615,PL
-3276785616,3276785631,CZ
-3276785632,3276785663,IT
-3276785664,3276785791,IL
-3276785792,3276785823,NL
-3276785824,3276785855,EU
-3276785856,3276785919,GB
-3276785920,3276786175,AT
-3276786176,3276786431,NO
-3276786432,3276786687,EU
-3276786688,3276786815,HU
-3276786816,3276786879,SE
-3276786880,3276786911,TR
-3276786912,3276786943,BE
-3276786944,3276787359,AT
-3276787360,3276787391,DE
-3276787392,3276787455,BE
-3276787456,3276787775,FR
-3276787776,3276787967,EU
-3276787968,3276788735,FR
-3276788736,3276788863,IE
-3276788864,3276788895,DE
-3276788896,3276788927,EU
-3276788928,3276788991,NL
-3276788992,3276789247,NO
-3276789248,3276789439,FI
-3276789440,3276789503,EU
-3276789504,3276789567,FR
-3276789568,3276789583,ES
-3276789584,3276789599,FR
-3276789600,3276789615,ES
-3276789616,3276789631,NL
-3276789632,3276789759,FR
-3276789760,3276790015,IT
-3276790016,3276790111,ES
-3276790112,3276790127,FR
-3276790128,3276790143,NL
-3276790144,3276790175,IT
-3276790176,3276790199,NL
-3276790200,3276790207,DE
-3276790208,3276790223,NL
-3276790224,3276790271,GB
-3276790272,3276790527,IE
-3276790528,3276790783,HU
-3276790784,3276790943,PK
-3276790944,3276791007,IT
-3276791008,3276791039,NL
-3276791040,3276791295,GB
-3276791296,3276791327,PT
-3276791328,3276791551,EU
-3276791552,3276792831,GB
-3276792832,3276793087,FR
-3276793088,3276793279,GB
-3276793280,3276793343,IE
-3276793344,3276793735,FR
-3276793736,3276793743,NL
-3276793744,3276793751,BE
-3276793752,3276793759,FR
-3276793760,3276793791,PL
-3276793792,3276793855,FR
-3276793856,3276794111,EU
-3276794112,3276794255,NL
-3276794256,3276794271,DE
-3276794272,3276794303,EU
-3276794304,3276794335,DK
-3276794336,3276794367,NL
-3276794368,3276795903,BE
+3276746752,3276747775,CH
+3276758016,3276759039,GB
+3276760064,3276761087,DE
+3276765184,3276766207,GB
+3276775424,3276780543,NL
+3276781568,3276782591,BE
+3276789280,3276789295,FI
+3276794880,3276795903,BE
3276795904,3276797951,AT
-3276797952,3276799103,EU
-3276799104,3276799231,GB
-3276799232,3276799295,EU
-3276799296,3276799359,GB
-3276799360,3276799391,NL
-3276799392,3276799455,AT
-3276799456,3276799471,PL
-3276799472,3276799487,NL
-3276799488,3276799743,DE
-3276799744,3276799775,NL
-3276799776,3276799807,GB
-3276799808,3276799839,FR
-3276799840,3276799871,ES
-3276799872,3276799999,NL
3276800000,3276824575,GB
3276824576,3276832767,EE
3276832768,3276834815,PL
@@ -128953,233 +67130,72 @@
3276858112,3276858367,KW
3276858368,3276858623,RU
3276858624,3276858879,PL
-3276859136,3276859647,UA
+3276859392,3276859647,UA
3276859648,3276859903,CH
3276859904,3276860159,AT
-3276860160,3276860415,EU
+3276860160,3276860415,CH
3276860416,3276860927,PL
3276860928,3276861183,BE
3276861184,3276861439,DE
3276861440,3276865535,DK
3276865536,3276866303,NL
-3276866304,3276866559,EU
+3276866304,3276866559,GB
3276866560,3276866815,IT
-3276866816,3276867071,EU
-3276867072,3276868607,IT
-3276868608,3276868863,NL
-3276868864,3276869119,IT
-3276869120,3276869631,GB
-3276869632,3276869695,IT
-3276869696,3276869727,GB
-3276869728,3276869855,IT
-3276869856,3276869887,GB
-3276869888,3276870143,NL
-3276870144,3276871679,IT
-3276871680,3276872255,DE
-3276872256,3276872319,CZ
-3276872320,3276872479,DE
-3276872480,3276872511,GB
-3276872512,3276872543,DE
-3276872544,3276872559,GB
-3276872560,3276872703,DE
-3276872704,3276873727,GB
-3276873728,3276874367,ES
-3276874368,3276874383,GB
-3276874384,3276874423,ES
-3276874424,3276874431,GB
-3276874432,3276874447,ES
-3276874448,3276874463,GB
-3276874464,3276874559,ES
-3276874560,3276874751,GB
-3276874752,3276875007,NL
-3276875008,3276875263,CH
-3276875264,3276875775,NL
-3276875776,3276876031,GB
-3276876032,3276876287,DK
-3276876288,3276876415,NL
-3276876416,3276876431,GB
-3276876432,3276876479,NL
-3276876480,3276877055,GB
-3276877056,3276877063,AT
-3276877064,3276877535,GB
-3276877536,3276877551,AT
-3276877552,3276877567,GB
-3276877568,3276877823,AT
-3276877824,3276878079,GB
-3276878080,3276878335,BG
-3276878336,3276878399,GB
-3276878400,3276878431,FR
-3276878432,3276878463,ES
-3276878464,3276878575,FR
-3276878576,3276878591,GB
-3276878592,3276878847,FR
-3276878848,3276879359,ES
-3276879360,3276879431,TR
-3276879432,3276879615,GB
-3276879616,3276879871,TR
-3276879872,3276880895,DK
-3276880896,3276881215,DE
-3276881216,3276881279,GB
-3276881280,3276881407,DE
-3276881408,3276881919,FR
-3276881920,3276883327,IT
-3276883328,3276883391,GB
-3276883392,3276883967,IT
-3276883968,3276884519,PL
-3276884520,3276884735,GB
-3276884736,3276884991,PL
-3276884992,3276886015,GB
-3276886016,3276886271,RO
-3276886272,3276887039,DE
-3276887040,3276887047,GB
-3276887048,3276888063,DE
-3276888064,3276888575,GB
-3276888576,3276889215,IT
-3276889216,3276890111,GB
-3276890112,3276890623,US
-3276890624,3276891135,IT
-3276891136,3276891391,BE
-3276891392,3276892159,US
-3276892160,3276895487,IT
-3276895488,3276895743,GB
-3276895744,3276895999,IT
-3276896000,3276896255,CZ
-3276896256,3276896767,BE
-3276896768,3276896775,GB
-3276896776,3276896831,BE
-3276896832,3276896847,SE
-3276896848,3276896863,BE
-3276896864,3276896879,GB
-3276896880,3276896959,BE
-3276896960,3276897023,GB
-3276897024,3276897663,BE
-3276897664,3276897727,GB
-3276897728,3276897759,BE
-3276897760,3276897919,GB
-3276897920,3276898303,CZ
-3276898304,3276898383,CH
-3276898384,3276898407,GB
-3276898408,3276898463,CH
-3276898464,3276898479,GB
-3276898480,3276900351,CH
-3276900352,3276900607,GB
-3276900608,3276901503,CH
-3276901504,3276901519,ES
-3276901520,3276901551,CH
-3276901552,3276901559,GB
-3276901560,3276902151,CH
-3276902152,3276902159,GB
-3276902160,3276902399,CH
-3276902400,3276902583,SE
-3276902584,3276902615,GB
-3276902616,3276902639,SE
-3276902640,3276902655,GB
-3276902656,3276903935,SE
-3276903936,3276903999,GB
-3276904000,3276904079,SE
-3276904080,3276904095,GB
-3276904096,3276904143,SE
-3276904144,3276904191,GB
-3276904192,3276904447,SE
-3276904448,3276905311,GB
-3276905312,3276905319,ES
-3276905320,3276905327,BE
-3276905328,3276905335,NL
-3276905336,3276905471,GB
-3276905472,3276905727,SE
-3276905728,3276905983,BE
-3276905984,3276905999,GB
-3276906000,3276906003,BE
-3276906004,3276906239,GB
-3276906240,3276906279,SE
-3276906280,3276906287,GB
-3276906288,3276906319,SE
-3276906320,3276906335,GB
-3276906336,3276906391,SE
-3276906392,3276906399,FI
-3276906400,3276906447,SE
-3276906448,3276906455,NO
-3276906456,3276906471,GB
-3276906472,3276906487,SE
-3276906488,3276906495,GB
-3276906496,3276906623,NL
-3276906624,3276906751,GB
-3276906752,3276906823,NL
-3276906824,3276906831,CH
-3276906832,3276907339,NL
-3276907340,3276907343,GB
-3276907344,3276908159,NL
-3276908160,3276908175,CH
-3276908176,3276908183,NL
-3276908184,3276908191,GB
-3276908192,3276908543,NL
-3276908544,3276908671,SE
-3276908672,3276908687,NL
-3276908688,3276908703,GB
-3276908704,3276908799,SE
-3276908800,3276909055,NL
-3276909056,3276909567,GB
-3276909568,3276910591,NL
-3276910592,3276911359,IT
-3276911360,3276911615,GB
-3276911616,3276912607,IT
-3276912608,3276912623,GB
-3276912624,3276912799,IT
-3276912800,3276912831,GB
-3276912832,3276912863,IT
-3276912864,3276912895,GB
-3276912896,3276913279,IT
-3276913280,3276913295,GB
-3276913296,3276913359,IT
-3276913360,3276913360,GB
-3276913361,3276913374,IT
-3276913375,3276913407,GB
-3276913408,3276913919,IT
-3276913920,3276913983,US
-3276913984,3276914079,IT
-3276914080,3276914095,GB
-3276914096,3276914687,IT
-3276914688,3276915567,ES
-3276915568,3276915583,NL
-3276915584,3276915711,GB
-3276915712,3276916047,ES
-3276916048,3276916055,GB
-3276916056,3276916087,ES
-3276916088,3276916095,GB
-3276916096,3276916167,ES
-3276916168,3276916183,GB
-3276916184,3276917151,ES
-3276917152,3276917167,GI
-3276917168,3276917183,GB
-3276917184,3276917231,ES
+3276866816,3276873983,GB
+3276873984,3276874239,ES
+3276874240,3276876383,GB
+3276876384,3276876415,NL
+3276876416,3276882431,GB
+3276882432,3276882943,IT
+3276882944,3276883711,GB
+3276883712,3276883967,IT
+3276883968,3276886363,GB
+3276886364,3276886367,DE
+3276886368,3276890111,GB
+3276890112,3276890367,US
+3276890368,3276892159,GB
+3276892160,3276893183,IT
+3276893184,3276893695,GB
+3276893696,3276893951,IT
+3276893952,3276898671,GB
+3276898672,3276898687,CH
+3276898688,3276903167,GB
+3276903168,3276903679,SE
+3276903680,3276907519,GB
+3276907520,3276907775,NL
+3276907776,3276908287,GB
+3276908288,3276908543,BE
+3276908544,3276908799,SE
+3276908800,3276909823,GB
+3276909824,3276910079,SE
+3276910080,3276911615,GB
+3276911616,3276911871,IT
+3276911872,3276912207,GB
+3276912208,3276912215,IT
+3276912216,3276912383,GB
+3276912384,3276912511,IT
+3276912512,3276912879,GB
+3276912880,3276912895,IT
+3276912896,3276917231,GB
3276917232,3276917247,FR
-3276917248,3276917279,ES
-3276917280,3276917295,GB
-3276917296,3276917327,ES
-3276917328,3276917343,GB
-3276917344,3276918783,ES
-3276918784,3276920447,DE
-3276920448,3276920479,GB
-3276920480,3276920551,DE
-3276920552,3276920559,GB
-3276920560,3276921183,DE
-3276921184,3276921187,GB
-3276921188,3276921239,DE
-3276921240,3276921247,GB
-3276921248,3276921279,DE
-3276921280,3276921303,GB
-3276921304,3276921343,DE
-3276921344,3276921399,GB
-3276921400,3276921403,DK
-3276921404,3276921599,GB
-3276921600,3276922623,DE
-3276922624,3276926847,FR
-3276926848,3276931071,GB
+3276917248,3276919375,GB
+3276919376,3276919391,DE
+3276919392,3276919471,GB
+3276919472,3276919479,DE
+3276919480,3276919487,GB
+3276919488,3276919535,DE
+3276919536,3276922879,GB
+3276922880,3276923135,FR
+3276923136,3276923647,GB
+3276923648,3276924159,FR
+3276924160,3276925951,GB
+3276925952,3276926207,FR
+3276926208,3276931071,GB
3276931072,3276939263,KZ
3276939264,3276955647,DE
3276955648,3276963839,GB
3276963840,3276964351,IL
-3276964352,3276965375,RO
+3276964352,3276964863,RO
3276965376,3276966399,RU
3276966400,3276966911,BH
3276966912,3276968959,RU
@@ -129197,17 +67213,14 @@
3277160448,3277176831,NL
3277176832,3277177087,SI
3277177088,3277177343,GB
-3277177344,3277177599,RO
3277177600,3277178111,PL
-3277178112,3277178623,UA
+3277178368,3277178623,UA
3277178624,3277178879,PL
3277178880,3277179135,ES
-3277179136,3277179391,RO
3277179392,3277179647,DE
3277179648,3277180159,BE
3277180160,3277180415,NL
3277180416,3277180671,RU
-3277180672,3277180927,FR
3277180928,3277181183,UA
3277181184,3277181439,PL
3277181440,3277181695,DE
@@ -129218,15 +67231,12 @@
3277182720,3277182975,BG
3277182976,3277183231,UA
3277183232,3277183487,DE
-3277183488,3277183743,DK
3277183744,3277183999,UA
3277184000,3277184255,DE
3277184256,3277184511,PT
3277184512,3277184767,DE
-3277184768,3277185023,UA
3277185024,3277185279,SA
3277185280,3277185535,RU
-3277185536,3277185791,DE
3277185792,3277186047,PL
3277186048,3277186303,IT
3277186304,3277186559,DE
@@ -129251,14 +67261,13 @@
3277191936,3277192191,DK
3277192192,3277192447,PL
3277192448,3277192703,DK
-3277192704,3277192959,GG
+3277192704,3277192959,DE
3277192960,3277193215,TR
-3277193216,3277254727,NL
-3277254728,3277254735,DE
-3277254736,3277258751,NL
+3277193216,3277258751,NL
3277258752,3277324287,TR
3277324288,3277324799,RU
-3277324800,3277325311,KZ
+3277324800,3277325055,KZ
+3277325056,3277325311,RU
3277325312,3277326335,IT
3277326336,3277326847,GB
3277326848,3277327359,AT
@@ -129268,7 +67277,6 @@
3277328896,3277329407,NL
3277329408,3277329919,GB
3277329920,3277330431,RU
-3277330432,3277330943,RO
3277330944,3277331455,UA
3277331456,3277332479,PL
3277332480,3277332991,NL
@@ -129283,7 +67291,7 @@
3277337088,3277337599,PL
3277337600,3277338111,UA
3277338112,3277338623,NO
-3277338624,3277339647,RU
+3277339136,3277339647,RU
3277339648,3277340159,DE
3277340160,3277340671,RU
3277340672,3277341183,RO
@@ -129303,7 +67311,7 @@
3277348352,3277348863,FR
3277348864,3277349887,RO
3277349888,3277350399,GB
-3277350400,3277351423,RU
+3277350400,3277350911,RU
3277351424,3277351935,NO
3277351936,3277352447,DE
3277352448,3277352959,SE
@@ -129327,13 +67335,12 @@
3277362176,3277362687,ES
3277363200,3277363711,ES
3277363712,3277364223,RU
-3277364224,3277364735,NL
+3277364224,3277364735,GB
3277364736,3277365247,UA
3277365248,3277365759,NL
3277365760,3277366271,GR
3277366272,3277366783,CZ
3277366784,3277367295,AT
-3277367296,3277367807,PL
3277367808,3277368319,RU
3277368320,3277369343,RO
3277369344,3277369855,CY
@@ -129357,9 +67364,7 @@
3277380608,3277381119,RU
3277381120,3277381631,KW
3277381632,3277382143,RU
-3277382144,3277382655,MD
3277382656,3277383167,GB
-3277383168,3277383679,UA
3277383680,3277384191,PL
3277384704,3277385215,GB
3277385216,3277385727,AT
@@ -129373,45 +67378,53 @@
3277389312,3277389823,AM
3277389824,3277394943,GB
3277394944,3277395455,US
-3277395456,3277403135,GB
-3277403136,3277403647,FR
-3277403648,3277404159,ES
+3277395456,3277402591,GB
+3277402592,3277402607,ES
+3277402608,3277403135,GB
+3277403136,3277403215,FR
+3277403216,3277403231,GB
+3277403232,3277403279,FR
+3277403280,3277403295,DE
+3277403296,3277403311,FR
+3277403312,3277403327,GB
+3277403328,3277403359,FR
+3277403360,3277403391,GB
+3277403392,3277403455,FR
+3277403456,3277403647,GB
+3277403648,3277403807,ES
+3277403808,3277404159,GB
3277404160,3277404415,DE
-3277404416,3277404671,IT
-3277404672,3277404927,CH
-3277404928,3277405183,NL
-3277405184,3277405439,SE
-3277405440,3277452639,GB
+3277404416,3277404511,IT
+3277404512,3277404527,GB
+3277404528,3277404649,IT
+3277404650,3277404671,GB
+3277404672,3277404735,CH
+3277404736,3277404927,GB
+3277404928,3277404975,NL
+3277404976,3277405183,GB
+3277405184,3277405263,SE
+3277405264,3277405439,GB
+3277405440,3277405471,DE
+3277405472,3277452639,GB
3277452640,3277452647,IE
3277452648,3277452655,DK
3277452656,3277455359,GB
-3277455360,3277456895,DE
-3277456896,3277457151,CH
-3277457152,3277463551,DE
-3277463552,3277463807,GB
-3277463808,3277464063,US
-3277464064,3277464575,FR
-3277464576,3277464831,BE
-3277464832,3277467471,US
-3277467472,3277467551,CA
-3277467552,3277471743,US
-3277471744,3277472607,NL
-3277472608,3277472623,IL
-3277472624,3277474815,NL
+3277455360,3277463551,DE
+3277463552,3277471743,US
+3277471744,3277474815,NL
3277474816,3277475711,BE
3277475712,3277476607,NL
3277476608,3277477631,BE
3277477632,3277479935,NL
-3277479936,3277480959,GB
+3277479936,3277480447,GB
3277480960,3277481471,DK
3277481472,3277481983,PL
3277481984,3277482495,SE
3277482496,3277483007,PL
3277483008,3277483519,IT
3277483520,3277484031,RO
-3277484032,3277484543,CH
-3277485056,3277485567,CH
-3277485568,3277486591,GB
+3277484032,3277486079,CH
+3277486080,3277486591,GB
3277486592,3277487103,UA
3277487104,3277487615,RO
3277487616,3277488127,PL
@@ -129446,21 +67459,17 @@
3277695488,3277695999,ES
3277696000,3277696511,UA
3277696512,3277697023,AT
-3277697024,3277697535,RO
3277697536,3277698047,PL
3277698048,3277698559,RU
3277698560,3277699071,DE
-3277699072,3277699583,UA
3277699584,3277700607,RU
3277700608,3277701119,UA
3277701120,3277701631,DK
3277701632,3277702143,AT
-3277702144,3277702655,EU
3277702656,3277703679,DE
3277703680,3277704191,PL
3277704192,3277704703,UA
3277704704,3277705215,RU
-3277705216,3277705727,KZ
3277705728,3277706239,ES
3277706240,3277707263,UA
3277707264,3277707775,CZ
@@ -129484,7 +67493,8 @@
3277717504,3277725695,YE
3277725696,3277733887,CH
3277733888,3277742079,DE
-3277742080,3277750271,FI
+3277742080,3277746175,FI
+3277746176,3277750271,GB
3277750272,3277766655,IT
3277766656,3277774847,PL
3277774848,3277783039,RU
@@ -129494,7 +67504,7 @@
3277816576,3277816831,GB
3277816832,3277817087,CH
3277817088,3277817343,GB
-3277817344,3277817855,FR
+3277817600,3277817855,FR
3277817856,3277818111,BE
3277818112,3277818367,DE
3277818368,3277818623,CY
@@ -129509,12 +67519,11 @@
3277820672,3277820927,UA
3277820928,3277821183,CH
3277821184,3277821439,TR
-3277821440,3277821695,GB
+3277821440,3277821695,NL
3277821696,3277821951,UA
3277821952,3277822207,RO
3277822208,3277822463,ES
3277822464,3277822719,PL
-3277822720,3277822975,RU
3277822976,3277823231,SG
3277823232,3277823487,UA
3277823488,3277823743,SI
@@ -129540,23 +67549,20 @@
3277829632,3277829887,PL
3277829888,3277830143,IL
3277830144,3277830399,SE
-3277830400,3277830655,UA
3277830656,3277830911,PL
3277830912,3277831167,GB
3277831168,3277831423,PL
3277831424,3277831679,UA
3277831680,3277832191,IE
-3277832192,3277833215,EU
3277833216,3277833727,BE
3277833728,3277834239,NL
-3277834240,3277834751,RU
3277834752,3277835263,UA
3277835264,3277835775,SK
3277835776,3277836287,UA
3277836288,3277836799,FI
3277836800,3277837311,UA
3277837312,3277839103,RU
-3277839104,3277839359,CH
+3277839104,3277839359,AE
3277839360,3277839871,DE
3277839872,3277840383,UA
3277840384,3277840895,FR
@@ -129575,19 +67581,11 @@
3277856768,3277864959,DE
3277864960,3277873151,RU
3277873152,3277881343,NL
-3277881344,3277881375,A2
-3277881376,3277881407,IT
-3277881408,3277884175,A2
-3277884176,3277884191,IR
-3277884192,3277885439,A2
-3277885440,3277885695,IQ
-3277885696,3277885727,LB
-3277885728,3277885951,A2
-3277885952,3277886463,LB
+3277881344,3277886463,IT
3277886464,3277887487,IQ
-3277887488,3277888255,A2
+3277887488,3277888255,IT
3277888256,3277888767,LB
-3277888768,3277889535,A2
+3277888768,3277889535,IT
3277889536,3277897727,RU
3277897728,3277905919,IT
3277905920,3277914111,BG
@@ -129601,51 +67599,17 @@
3278020608,3278028799,RU
3278028800,3278036991,DE
3278036992,3278045183,FR
-3278045184,3278054911,GB
-3278054912,3278055423,NL
-3278055424,3278061567,GB
+3278045184,3278061567,GB
3278061568,3278065663,NL
-3278065664,3278103039,GB
-3278103040,3278103295,FR
-3278103296,3278110719,GB
-3278110720,3278110751,SE
-3278110752,3278110767,ES
-3278110768,3278115327,SE
-3278115328,3278116607,ES
-3278116608,3278116863,SE
-3278116864,3278118399,ES
-3278118400,3278118911,SE
-3278118912,3278118975,NL
-3278118976,3278119935,SE
-3278119936,3278119943,DE
-3278119944,3278120151,SE
-3278120152,3278120159,DE
-3278120160,3278125055,SE
-3278125056,3278125567,NL
-3278125568,3278161631,SE
-3278161632,3278161647,DE
-3278161648,3278168111,SE
-3278168112,3278168119,DK
-3278168120,3278168175,SE
-3278168176,3278168191,DK
-3278168192,3278176255,SE
-3278176256,3278220799,FR
-3278220800,3278221055,GB
-3278221056,3278221091,FR
-3278221092,3278221093,GB
-3278221094,3278241791,FR
+3278065664,3278110719,GB
+3278110720,3278176255,SE
+3278176256,3278210559,FR
+3278210560,3278210815,MQ
+3278210816,3278241791,FR
3278241792,3278307327,GB
-3278307328,3278358527,IT
-3278358528,3278358783,US
-3278358784,3278372863,IT
+3278307328,3278372863,IT
3278372864,3278635007,GB
-3278635008,3278635263,NL
-3278635264,3278635519,EU
-3278635520,3278744791,NL
-3278744792,3278744799,A2
-3278744800,3278766079,NL
-3278766080,3278766591,RO
-3278766592,3278767103,RU
+3278635008,3278766079,NL
3278767104,3278767615,RO
3278767616,3278768127,UA
3278768128,3278769151,GB
@@ -129653,7 +67617,6 @@
3278769664,3278770175,DE
3278770176,3278770687,DK
3278770688,3278771711,DE
-3278771712,3278772223,NL
3278772224,3278772735,BG
3278772736,3278773247,DE
3278773248,3278773759,NO
@@ -129673,2452 +67636,148 @@
3278780928,3278781439,LT
3278781440,3278781951,DE
3278781952,3278782463,RU
-3278782464,3278782975,GB
-3278782976,3278783231,DE
-3278783232,3278784703,GB
-3278784704,3278784735,NL
-3278784736,3278786911,GB
-3278786912,3278786943,LU
-3278786944,3278787567,GB
-3278787568,3278787583,FR
-3278787584,3278789935,GB
-3278789936,3278789951,US
-3278789952,3278790095,GB
+3278782464,3278790095,GB
3278790096,3278790111,ES
3278790112,3278790655,GB
3278790656,3278807039,IT
3278807040,3278815231,GB
3278815232,3278823423,AT
3278823424,3278831615,FR
-3278831616,3278865663,HU
-3278865664,3278865919,SK
-3278865920,3278897151,HU
+3278831616,3278897151,HU
3278897152,3278913535,GB
3278913536,3278921727,CH
3278921728,3278929919,RU
3278929920,3278938111,TR
-3278938112,3278938119,DE
-3278938120,3278938123,DK
-3278938124,3278938127,DE
-3278938128,3278938131,TR
-3278938132,3278938151,DE
-3278938152,3278938155,GB
-3278938156,3278938159,DE
-3278938160,3278938163,ES
-3278938164,3278938167,CH
-3278938168,3278938171,DE
-3278938172,3278938175,NL
-3278938176,3278938179,FR
-3278938180,3278938183,NL
-3278938184,3278938187,DE
-3278938188,3278938191,PT
-3278938192,3278938195,ES
-3278938196,3278938199,NL
-3278938200,3278938203,CH
-3278938204,3278938207,DE
-3278938208,3278938219,IT
-3278938220,3278938223,FR
-3278938224,3278938227,DE
-3278938228,3278938231,FR
-3278938232,3278938235,DE
-3278938236,3278938239,FR
-3278938240,3278938243,LI
-3278938244,3278938247,IT
-3278938248,3278938251,AT
-3278938252,3278938255,GR
-3278938256,3278938263,CH
-3278938264,3278938267,PL
-3278938268,3278938275,FR
-3278938276,3278938279,NL
-3278938280,3278938283,AT
-3278938284,3278938287,FR
-3278938288,3278938291,ES
-3278938292,3278938299,DE
-3278938300,3278938303,ES
-3278938304,3278938307,DE
-3278938308,3278938311,GB
-3278938312,3278938315,DE
-3278938316,3278938323,FR
-3278938324,3278938335,DE
-3278938336,3278938339,CH
-3278938340,3278938343,DE
-3278938344,3278938347,NL
-3278938348,3278938351,FR
-3278938352,3278938359,DE
-3278938360,3278938363,DK
-3278938364,3278938367,BH
-3278938368,3278938375,FR
-3278938376,3278938379,DE
-3278938380,3278938383,FR
-3278938384,3278938399,DE
-3278938400,3278938403,AT
-3278938404,3278938407,GB
-3278938408,3278938411,CH
-3278938412,3278938415,DE
-3278938416,3278938419,CH
-3278938420,3278938423,GB
-3278938424,3278938427,DE
-3278938428,3278938431,FR
-3278938432,3278938435,SI
-3278938436,3278938439,DE
-3278938440,3278938443,IT
-3278938444,3278938447,DE
-3278938448,3278938451,IT
-3278938452,3278938455,GB
-3278938456,3278938459,ES
-3278938460,3278938463,FR
-3278938464,3278938467,DE
-3278938468,3278938471,NL
-3278938472,3278938479,DE
-3278938480,3278938483,CH
-3278938484,3278938487,DE
-3278938488,3278938491,NL
-3278938492,3278938495,ES
-3278938496,3278938499,NL
-3278938500,3278938503,DE
-3278938504,3278938507,SE
-3278938508,3278938511,IT
-3278938512,3278938515,DE
-3278938516,3278938523,NL
-3278938524,3278938527,FR
-3278938528,3278938531,NO
-3278938532,3278938535,DK
-3278938536,3278938555,DE
-3278938556,3278938559,HU
-3278938560,3278938563,CY
-3278938564,3278938567,FR
-3278938568,3278938575,DE
-3278938576,3278938579,CZ
-3278938580,3278938583,DE
-3278938584,3278938587,GB
-3278938588,3278938591,CH
-3278938592,3278938595,DE
-3278938596,3278938599,DK
-3278938600,3278938603,DE
-3278938604,3278938607,IT
-3278938608,3278938611,AT
-3278938612,3278938615,NL
-3278938616,3278938619,DK
-3278938620,3278938627,FR
-3278938628,3278938631,DE
-3278938632,3278938635,NL
-3278938636,3278938639,GB
-3278938640,3278938643,DE
-3278938644,3278938647,GB
-3278938648,3278938659,DE
-3278938660,3278938663,CH
-3278938664,3278938667,GB
-3278938668,3278938671,AT
-3278938672,3278938675,IT
-3278938676,3278938679,FR
-3278938680,3278938683,NO
-3278938684,3278938687,DE
-3278938688,3278938691,CH
-3278938692,3278938695,DE
-3278938696,3278938699,IT
-3278938700,3278938703,ES
-3278938704,3278938707,FR
-3278938708,3278938715,DE
-3278938716,3278938719,CH
-3278938720,3278938723,NL
-3278938724,3278938727,BE
-3278938728,3278938731,ES
-3278938732,3278938735,CH
-3278938736,3278938739,IT
-3278938740,3278938743,FR
-3278938744,3278938751,DE
-3278938752,3278938755,CH
-3278938756,3278938759,DE
-3278938760,3278938763,GB
-3278938764,3278938767,FR
-3278938768,3278938771,GB
-3278938772,3278938775,SE
-3278938776,3278938779,GB
-3278938780,3278938783,IT
-3278938784,3278938787,BE
-3278938788,3278938791,ES
-3278938792,3278938795,DE
-3278938796,3278938799,GR
-3278938800,3278938803,DE
-3278938804,3278938807,IT
-3278938808,3278938815,GB
-3278938816,3278938819,ES
-3278938820,3278938827,DE
-3278938828,3278938831,GB
-3278938832,3278938835,IT
-3278938836,3278938839,FR
-3278938840,3278938843,DE
-3278938844,3278938847,HU
-3278938848,3278938851,CH
-3278938852,3278938855,DE
-3278938856,3278938859,PT
-3278938860,3278938863,DE
-3278938864,3278938871,IT
-3278938872,3278938875,DE
-3278938876,3278938879,NL
-3278938880,3278938887,FR
-3278938888,3278938891,ES
-3278938892,3278938895,DE
-3278938896,3278938903,FR
-3278938904,3278938911,GB
-3278938912,3278938919,DE
-3278938920,3278938923,SK
-3278938924,3278938927,DE
-3278938928,3278938935,GB
-3278938936,3278938939,CH
-3278938940,3278938943,GR
-3278938944,3278938947,IT
-3278938948,3278938951,DE
-3278938952,3278938955,FR
-3278938956,3278938959,GB
-3278938960,3278938967,DE
-3278938968,3278938971,BE
-3278938972,3278938975,DE
-3278938976,3278938979,NL
-3278938980,3278938987,FR
-3278938988,3278938991,AT
-3278938992,3278938995,FR
-3278938996,3278938999,DE
-3278939000,3278939003,ES
-3278939004,3278939007,NL
-3278939008,3278939011,IE
-3278939012,3278939015,RU
-3278939016,3278939019,ES
-3278939020,3278939023,NL
-3278939024,3278939027,IT
-3278939028,3278939031,CY
-3278939032,3278939035,DE
-3278939036,3278939039,HU
-3278939040,3278939047,DE
-3278939048,3278939055,FR
-3278939056,3278939075,DE
-3278939076,3278939079,CH
-3278939080,3278939083,DE
-3278939084,3278939087,IT
-3278939088,3278939091,IS
-3278939092,3278939095,DE
-3278939096,3278939099,IT
-3278939100,3278939103,DE
-3278939104,3278939107,CH
-3278939108,3278939111,FR
-3278939112,3278939115,DE
-3278939116,3278939119,NL
-3278939120,3278939131,DE
-3278939132,3278939135,NL
-3278939136,3278939147,US
-3278939148,3278939151,AR
-3278939152,3278939155,ES
-3278939156,3278939195,US
-3278939196,3278939199,CL
-3278939200,3278939259,US
-3278939260,3278939263,BR
-3278939264,3278939271,AR
-3278939272,3278939279,US
-3278939280,3278939283,CO
-3278939284,3278939291,US
-3278939292,3278939295,AR
-3278939296,3278939307,US
-3278939308,3278939311,MX
-3278939312,3278939315,US
-3278939316,3278939319,AR
-3278939320,3278939323,US
-3278939324,3278939327,CA
-3278939328,3278939331,US
-3278939332,3278939335,BR
-3278939336,3278939339,CA
-3278939340,3278939351,US
-3278939352,3278939355,BR
-3278939356,3278939379,US
-3278939380,3278939383,BR
-3278939384,3278939391,US
-3278939392,3278939395,DE
-3278939396,3278939399,GB
-3278939400,3278939403,DE
-3278939404,3278939407,CH
-3278939408,3278939415,DE
-3278939416,3278939419,ZW
-3278939420,3278939423,IE
-3278939424,3278939427,GB
-3278939428,3278939439,DE
-3278939440,3278939443,IT
-3278939444,3278939447,DE
-3278939448,3278939451,PL
-3278939452,3278939459,DE
-3278939460,3278939463,DK
-3278939464,3278939467,CY
-3278939468,3278939471,DE
-3278939472,3278939475,PL
-3278939476,3278939479,BE
-3278939480,3278939483,IT
-3278939484,3278939491,NL
-3278939492,3278939495,DE
-3278939496,3278939499,CH
-3278939500,3278939503,ES
-3278939504,3278939511,DE
-3278939512,3278939515,LU
-3278939516,3278939523,NL
-3278939524,3278939527,LU
-3278939528,3278939531,FR
-3278939532,3278939535,DE
-3278939536,3278939539,BE
-3278939540,3278939555,DE
-3278939556,3278939559,IT
-3278939560,3278939563,DE
-3278939564,3278939567,FR
-3278939568,3278939571,PT
-3278939572,3278939575,ES
-3278939576,3278939579,DE
-3278939580,3278939583,NL
-3278939584,3278939587,IT
-3278939588,3278939591,LU
-3278939592,3278939595,AO
-3278939596,3278939599,NL
-3278939600,3278939603,GB
-3278939604,3278939607,DE
-3278939608,3278939611,DK
+3278938112,3278939611,DE
3278939612,3278939615,FR
-3278939616,3278939631,DE
-3278939632,3278939635,GB
-3278939636,3278939639,DK
-3278939640,3278939643,DE
-3278939644,3278939647,UA
-3278939648,3278939651,FR
-3278939652,3278939655,DE
-3278939656,3278939659,FR
-3278939660,3278939663,TR
-3278939664,3278939667,IT
-3278939668,3278939671,GB
-3278939672,3278939679,FR
-3278939680,3278939683,GR
-3278939684,3278939687,FR
-3278939688,3278939691,DE
-3278939692,3278939695,FR
-3278939696,3278939699,GR
-3278939700,3278939703,TR
-3278939704,3278939707,KE
-3278939708,3278939711,TR
-3278939712,3278939715,CY
-3278939716,3278939723,TR
-3278939724,3278939727,MC
-3278939728,3278939731,DE
-3278939732,3278939735,AT
-3278939736,3278939739,RU
-3278939740,3278939743,HU
-3278939744,3278939747,GB
-3278939748,3278939751,ES
-3278939752,3278939755,GR
-3278939756,3278939759,DE
-3278939760,3278939763,FR
-3278939764,3278939767,DE
-3278939768,3278939771,ES
-3278939772,3278939775,IT
-3278939776,3278939779,DE
-3278939780,3278939783,FR
-3278939784,3278939787,BE
-3278939788,3278939791,DE
-3278939792,3278939795,ES
-3278939796,3278939799,DE
-3278939800,3278939803,ES
-3278939804,3278939807,GB
-3278939808,3278939815,DE
-3278939816,3278939819,NL
-3278939820,3278939823,DE
-3278939824,3278939827,HU
-3278939828,3278939835,DE
-3278939836,3278939839,FR
-3278939840,3278939843,IT
-3278939844,3278939847,BE
-3278939848,3278939851,CH
-3278939852,3278939855,DE
-3278939856,3278939859,FR
-3278939860,3278939863,GB
-3278939864,3278939867,IT
-3278939868,3278939871,CH
-3278939872,3278939875,ES
-3278939876,3278939879,IT
-3278939880,3278939883,ES
-3278939884,3278939887,DE
-3278939888,3278939891,PL
-3278939892,3278939899,ES
-3278939900,3278939903,IT
-3278939904,3278939907,HK
-3278939908,3278939911,MY
-3278939912,3278939915,TH
-3278939916,3278939923,SG
-3278939924,3278939927,CN
-3278939928,3278939931,SG
-3278939932,3278939935,IN
-3278939936,3278939939,MY
-3278939940,3278939943,SG
-3278939944,3278939947,TW
-3278939948,3278939951,SG
-3278939952,3278939955,MY
-3278939956,3278939959,SG
-3278939960,3278939963,CN
-3278939964,3278939967,MY
-3278939968,3278939971,TW
-3278939972,3278939979,MY
-3278939980,3278939983,TH
-3278939984,3278939987,DE
-3278939988,3278939991,CN
-3278939992,3278939995,SG
-3278939996,3278939999,MY
-3278940000,3278940011,SG
-3278940012,3278940015,ID
-3278940016,3278940059,SG
-3278940060,3278940067,CN
-3278940068,3278940071,TW
-3278940072,3278940083,SG
-3278940084,3278940091,MY
-3278940092,3278940095,SG
-3278940096,3278940099,IN
-3278940100,3278940103,SG
-3278940104,3278940107,MY
-3278940108,3278940127,SG
-3278940128,3278940131,TW
-3278940132,3278940135,BD
-3278940136,3278940139,SG
-3278940140,3278940143,IN
-3278940144,3278940151,MY
-3278940152,3278940155,IN
-3278940156,3278940159,PH
-3278940160,3278940163,GR
-3278940164,3278940167,CH
-3278940168,3278940171,DK
-3278940172,3278940175,FR
-3278940176,3278940179,GB
-3278940180,3278940183,CH
-3278940184,3278940187,DE
-3278940188,3278940195,GB
-3278940196,3278940211,DE
-3278940212,3278940215,PT
-3278940216,3278940219,NL
-3278940220,3278940223,GB
-3278940224,3278940227,CH
-3278940228,3278940231,DE
-3278940232,3278940235,CH
-3278940236,3278940239,ES
-3278940240,3278940243,CY
-3278940244,3278940247,DE
-3278940248,3278940251,FR
-3278940252,3278940255,IT
-3278940256,3278940259,BE
-3278940260,3278940263,DE
-3278940264,3278940267,ES
-3278940268,3278940275,DE
-3278940276,3278940279,GB
-3278940280,3278940283,CH
-3278940284,3278940291,NL
-3278940292,3278940295,DE
-3278940296,3278940299,IT
-3278940300,3278940303,FR
-3278940304,3278940307,DE
-3278940308,3278940311,CH
-3278940312,3278940315,IT
-3278940316,3278940319,DE
-3278940320,3278940323,NL
-3278940324,3278940327,ES
-3278940328,3278940335,DE
-3278940336,3278940339,NL
-3278940340,3278940347,DE
-3278940348,3278940355,GB
+3278939616,3278940055,DE
+3278940056,3278940059,SG
+3278940060,3278940355,DE
3278940356,3278940359,NL
-3278940360,3278940363,GR
-3278940364,3278940367,IT
-3278940368,3278940371,FR
-3278940372,3278940375,GB
-3278940376,3278940379,PT
-3278940380,3278940383,FR
-3278940384,3278940387,NL
-3278940388,3278940391,IE
-3278940392,3278940395,FR
-3278940396,3278940399,NL
-3278940400,3278940403,DE
-3278940404,3278940407,FR
-3278940408,3278940411,IT
-3278940412,3278940412,CH
-3278940413,3278940415,DE
-3278940416,3278940419,BE
-3278940420,3278940423,DE
-3278940424,3278940427,CH
-3278940428,3278940431,DE
-3278940432,3278940443,CH
-3278940444,3278940447,DE
-3278940448,3278940451,GB
-3278940452,3278940455,DE
-3278940456,3278940459,GB
-3278940460,3278940463,DE
-3278940464,3278940467,FR
-3278940468,3278940471,DE
-3278940472,3278940475,ES
-3278940476,3278940479,FR
-3278940480,3278940483,CH
-3278940484,3278940487,FR
-3278940488,3278940491,ES
-3278940492,3278940495,IT
-3278940496,3278940499,NL
-3278940500,3278940503,FR
-3278940504,3278940507,DK
-3278940508,3278940511,FR
-3278940512,3278940515,DE
-3278940516,3278940523,CH
-3278940524,3278940531,ES
-3278940532,3278940535,DE
-3278940536,3278940539,CH
-3278940540,3278940543,ES
-3278940544,3278940551,DE
-3278940552,3278940555,GB
-3278940556,3278940559,DE
-3278940560,3278940563,AT
-3278940564,3278940571,FR
-3278940572,3278940579,CH
-3278940580,3278940587,DE
-3278940588,3278940591,IT
-3278940592,3278940595,FR
-3278940596,3278940599,BE
-3278940600,3278940603,DE
-3278940604,3278940607,FR
-3278940608,3278940611,ES
-3278940612,3278940615,PT
-3278940616,3278940619,IT
-3278940620,3278940623,DE
-3278940624,3278940631,IT
-3278940632,3278940635,GB
-3278940636,3278940639,BE
-3278940640,3278940643,CH
-3278940644,3278940647,IT
-3278940648,3278940651,DE
-3278940652,3278940655,FR
-3278940656,3278940663,IT
-3278940664,3278940671,FR
-3278940672,3278940679,DE
-3278940680,3278940683,CH
-3278940684,3278940691,NL
-3278940692,3278940695,SE
-3278940696,3278940707,DE
-3278940708,3278940711,ES
-3278940712,3278940715,BE
-3278940716,3278940723,ES
-3278940724,3278940727,FR
-3278940728,3278940731,DE
-3278940732,3278940739,FR
-3278940740,3278940743,GB
-3278940744,3278940747,ES
-3278940748,3278940751,DE
-3278940752,3278940759,FR
-3278940760,3278940763,NL
-3278940764,3278940767,DE
-3278940768,3278940771,GB
-3278940772,3278940783,DE
-3278940784,3278940787,CH
-3278940788,3278940791,GB
-3278940792,3278940795,NL
-3278940796,3278940803,DE
-3278940804,3278940807,DK
-3278940808,3278940815,DE
-3278940816,3278940819,IT
-3278940820,3278940823,DE
-3278940824,3278940827,IT
-3278940828,3278940831,DE
-3278940832,3278940835,CH
-3278940836,3278940839,IT
-3278940840,3278940847,DE
-3278940848,3278940851,CH
-3278940852,3278940855,DE
-3278940856,3278940859,PT
-3278940860,3278940863,NL
-3278940864,3278940867,CH
+3278940360,3278940867,DE
3278940868,3278940871,GB
-3278940872,3278940875,DE
-3278940876,3278940879,IT
-3278940880,3278940883,CH
-3278940884,3278940887,ES
-3278940888,3278940891,BE
-3278940892,3278940895,DE
-3278940896,3278940899,IT
-3278940900,3278940903,FR
-3278940904,3278940911,ES
-3278940912,3278940915,IT
-3278940916,3278940919,DE
-3278940920,3278940923,PT
-3278940924,3278940931,DE
-3278940932,3278940935,NL
-3278940936,3278940939,ES
-3278940940,3278940943,FR
-3278940944,3278940947,NL
-3278940948,3278940951,FR
-3278940952,3278940955,IT
-3278940956,3278940959,DK
-3278940960,3278940963,FR
-3278940964,3278940967,IT
-3278940968,3278940971,FR
-3278940972,3278940983,DE
-3278940984,3278940987,IT
-3278940988,3278940991,NL
-3278940992,3278940995,PT
-3278940996,3278940999,DE
-3278941000,3278941003,NL
-3278941004,3278941007,CH
-3278941008,3278941011,ES
-3278941012,3278941015,GB
-3278941016,3278941023,DE
-3278941024,3278941027,IT
-3278941028,3278941031,FR
-3278941032,3278941035,DE
-3278941036,3278941039,IT
-3278941040,3278941043,DE
-3278941044,3278941047,FR
-3278941048,3278941051,ES
-3278941052,3278941059,DE
-3278941060,3278941063,GB
-3278941064,3278941067,IT
-3278941068,3278941071,ES
-3278941072,3278941075,IT
-3278941076,3278941083,DE
-3278941084,3278941087,GB
-3278941088,3278941091,BE
-3278941092,3278941095,DK
-3278941096,3278941099,FR
-3278941100,3278941107,DE
-3278941108,3278941111,DK
-3278941112,3278941119,FR
-3278941120,3278941127,DE
-3278941128,3278941131,BE
-3278941132,3278941135,NL
-3278941136,3278941139,GB
-3278941140,3278941143,DE
-3278941144,3278941151,IT
-3278941152,3278941155,DE
-3278941156,3278941159,SE
-3278941160,3278941167,DE
-3278941168,3278941171,GB
-3278941172,3278941175,AT
-3278941176,3278941179,IT
-3278941180,3278941183,FR
-3278941184,3278941191,US
-3278941192,3278941195,BR
-3278941196,3278941215,US
-3278941216,3278941219,BR
-3278941220,3278941243,US
-3278941244,3278941247,CO
-3278941248,3278941255,US
-3278941256,3278941259,MX
-3278941260,3278941279,US
-3278941280,3278941283,BR
-3278941284,3278941287,AR
-3278941288,3278941303,US
-3278941304,3278941307,CO
-3278941308,3278941319,US
-3278941320,3278941323,CA
-3278941324,3278941331,US
-3278941332,3278941335,BR
-3278941336,3278941343,US
-3278941344,3278941347,AR
-3278941348,3278941371,US
-3278941372,3278941375,CA
-3278941376,3278941399,US
-3278941400,3278941403,VE
-3278941404,3278941407,BR
-3278941408,3278941419,US
-3278941420,3278941423,DE
-3278941424,3278941427,CL
-3278941428,3278941431,PE
-3278941432,3278941439,US
-3278941440,3278941443,AR
-3278941444,3278941455,US
-3278941456,3278941459,JM
-3278941460,3278941475,US
-3278941476,3278941479,BR
-3278941480,3278941491,US
-3278941492,3278941495,MX
-3278941496,3278941499,US
-3278941500,3278941503,CA
-3278941504,3278941587,US
-3278941588,3278941591,DE
-3278941592,3278941595,US
-3278941596,3278941599,PE
-3278941600,3278941615,US
-3278941616,3278941619,CA
-3278941620,3278941639,US
-3278941640,3278941643,BR
-3278941644,3278941651,US
-3278941652,3278941655,VE
-3278941656,3278941659,US
-3278941660,3278941663,BR
-3278941664,3278941667,CA
-3278941668,3278941671,US
-3278941672,3278941675,VE
-3278941676,3278941691,US
-3278941692,3278941695,MX
-3278941696,3278941735,US
-3278941736,3278941739,CA
-3278941740,3278941743,US
-3278941744,3278941747,CA
-3278941748,3278941819,US
-3278941820,3278941823,CL
-3278941824,3278941847,US
-3278941848,3278941855,AR
-3278941856,3278941891,US
-3278941892,3278941895,CA
-3278941896,3278941911,US
-3278941912,3278941915,MX
-3278941916,3278941943,US
-3278941944,3278941947,CO
-3278941948,3278941951,US
-3278941952,3278941955,GB
-3278941956,3278941959,FR
-3278941960,3278941963,DE
-3278941964,3278941971,GB
-3278941972,3278941979,DE
-3278941980,3278941987,ES
-3278941988,3278941995,FR
-3278941996,3278941999,ES
-3278942000,3278942003,DE
-3278942004,3278942011,IT
-3278942012,3278942015,DE
-3278942016,3278942019,FR
-3278942020,3278942023,DE
-3278942024,3278942027,FR
-3278942028,3278942031,CH
-3278942032,3278942035,GR
-3278942036,3278942039,CH
-3278942040,3278942043,ES
-3278942044,3278942047,FR
-3278942048,3278942051,DE
-3278942052,3278942055,CH
-3278942056,3278942059,ES
-3278942060,3278942063,DE
-3278942064,3278942071,ES
-3278942072,3278942075,FR
-3278942076,3278942079,DE
-3278942080,3278942083,ES
-3278942084,3278942087,BE
-3278942088,3278942091,ES
-3278942092,3278942095,BE
-3278942096,3278942099,PL
-3278942100,3278942103,GB
-3278942104,3278942107,CH
-3278942108,3278942111,DE
-3278942112,3278942115,FR
-3278942116,3278942119,DE
-3278942120,3278942123,GB
-3278942124,3278942127,AT
-3278942128,3278942131,DE
-3278942132,3278942135,GB
-3278942136,3278942139,UA
+3278940872,3278941251,DE
+3278941252,3278941255,US
+3278941256,3278941295,DE
+3278941296,3278941299,US
+3278941300,3278942139,DE
3278942140,3278942143,NL
-3278942144,3278942147,GB
-3278942148,3278942155,DE
-3278942156,3278942159,FR
-3278942160,3278942163,DE
-3278942164,3278942167,IT
-3278942168,3278942171,CH
-3278942172,3278942175,GB
-3278942176,3278942179,DE
-3278942180,3278942183,FR
-3278942184,3278942187,DK
-3278942188,3278942191,IT
-3278942192,3278942203,DE
-3278942204,3278942207,CH
-3278942208,3278942211,TW
-3278942212,3278942227,AU
-3278942228,3278942231,NZ
-3278942232,3278942243,AU
-3278942244,3278942247,NZ
-3278942248,3278942255,AU
+3278942144,3278942255,DE
3278942256,3278942259,NZ
-3278942260,3278942271,AU
-3278942272,3278942275,NZ
-3278942276,3278942291,AU
-3278942292,3278942295,NZ
-3278942296,3278942299,PG
-3278942300,3278942355,AU
-3278942356,3278942359,NZ
-3278942360,3278942383,AU
-3278942384,3278942387,NZ
-3278942388,3278942399,AU
-3278942400,3278942403,NZ
-3278942404,3278942435,AU
-3278942436,3278942439,DE
-3278942440,3278942443,AU
-3278942444,3278942447,NZ
-3278942448,3278942455,AU
-3278942456,3278942463,DE
-3278942464,3278942467,SG
-3278942468,3278942471,MY
-3278942472,3278942475,IN
-3278942476,3278942483,SG
-3278942484,3278942487,CN
-3278942488,3278942491,IN
-3278942492,3278942495,MY
-3278942496,3278942499,CN
-3278942500,3278942507,MY
-3278942508,3278942511,TH
-3278942512,3278942515,SG
-3278942516,3278942519,PH
-3278942520,3278942539,IN
-3278942540,3278942543,TW
-3278942544,3278942547,PK
-3278942548,3278942551,MY
-3278942552,3278942555,TW
-3278942556,3278942559,IN
-3278942560,3278942571,MY
-3278942572,3278942575,IN
-3278942576,3278942579,MY
-3278942580,3278942583,TW
-3278942584,3278942587,SG
-3278942588,3278942591,CN
-3278942592,3278942595,TW
-3278942596,3278942599,IN
-3278942600,3278942603,SG
-3278942604,3278942607,TW
-3278942608,3278942611,TH
-3278942612,3278942615,PH
-3278942616,3278942627,SG
-3278942628,3278942635,MY
-3278942636,3278942643,SG
-3278942644,3278942647,MY
-3278942648,3278942651,IN
-3278942652,3278942655,MY
-3278942656,3278942667,SG
-3278942668,3278942671,MY
-3278942672,3278942675,SG
-3278942676,3278942679,HK
-3278942680,3278942683,TW
-3278942684,3278942687,DE
-3278942688,3278942691,SG
-3278942692,3278942695,IN
+3278942260,3278942359,DE
+3278942360,3278942363,AU
+3278942364,3278942523,DE
+3278942524,3278942527,IN
+3278942528,3278942695,DE
3278942696,3278942699,SG
-3278942700,3278942703,TW
-3278942704,3278942707,MY
-3278942708,3278942719,SG
-3278942720,3278942721,DE
-3278942722,3278942722,GB
-3278942723,3278942724,DE
-3278942725,3278942725,GB
-3278942726,3278942726,IT
-3278942727,3278942727,DE
-3278942728,3278942728,CH
-3278942729,3278942730,BE
-3278942731,3278942731,DE
-3278942732,3278942732,ES
-3278942733,3278942733,LU
-3278942734,3278942734,GB
-3278942735,3278942735,DE
-3278942736,3278942736,IT
-3278942737,3278942737,GB
-3278942738,3278942739,DE
-3278942740,3278942740,NL
-3278942741,3278942741,GB
-3278942742,3278942742,DE
-3278942743,3278942743,ES
-3278942744,3278942748,DE
-3278942749,3278942749,GB
-3278942750,3278942750,IT
-3278942751,3278942751,FR
-3278942752,3278942753,CH
-3278942754,3278942754,DE
-3278942755,3278942755,GB
-3278942756,3278942756,DE
-3278942757,3278942757,GB
-3278942758,3278942759,IT
-3278942760,3278942761,DE
-3278942762,3278942762,GB
-3278942763,3278942763,NL
-3278942764,3278942764,FR
-3278942765,3278942765,CH
-3278942766,3278942766,PL
-3278942767,3278942767,FR
-3278942768,3278942768,NO
-3278942769,3278942769,GB
-3278942770,3278942771,DE
-3278942772,3278942772,BE
-3278942773,3278942773,DE
-3278942774,3278942774,CH
-3278942775,3278942775,FR
-3278942776,3278942776,DE
-3278942777,3278942778,GB
-3278942779,3278942779,SE
-3278942780,3278942781,DE
-3278942782,3278942782,ES
-3278942783,3278942784,DE
-3278942785,3278942785,GR
-3278942786,3278942786,SI
-3278942787,3278942787,IT
-3278942788,3278942789,DE
-3278942790,3278942790,ES
-3278942791,3278942791,IT
-3278942792,3278942792,US
-3278942793,3278942793,CH
-3278942794,3278942794,DE
-3278942795,3278942795,GB
-3278942796,3278942796,IT
-3278942797,3278942797,GB
-3278942798,3278942798,DE
-3278942799,3278942799,IT
-3278942800,3278942800,FR
-3278942801,3278942801,GB
-3278942802,3278942803,DE
-3278942804,3278942804,IT
-3278942805,3278942805,DE
-3278942806,3278942806,BE
-3278942807,3278942807,AT
-3278942808,3278942809,DE
-3278942810,3278942810,ES
-3278942811,3278942811,NL
-3278942812,3278942813,DE
-3278942814,3278942814,CH
-3278942815,3278942815,DE
-3278942816,3278942816,AT
-3278942817,3278942817,FR
-3278942818,3278942818,DK
-3278942819,3278942819,DE
-3278942820,3278942820,IT
-3278942821,3278942821,NL
-3278942822,3278942824,DE
-3278942825,3278942825,NL
-3278942826,3278942826,RU
-3278942827,3278942827,FR
-3278942828,3278942828,ES
-3278942829,3278942829,NL
-3278942830,3278942830,IT
-3278942831,3278942831,CH
-3278942832,3278942832,IT
-3278942833,3278942833,DE
-3278942834,3278942834,NL
-3278942835,3278942835,AT
-3278942836,3278942837,DE
-3278942838,3278942838,ES
-3278942839,3278942839,FR
-3278942840,3278942843,DE
-3278942844,3278942844,ES
-3278942845,3278942850,DE
-3278942851,3278942851,HU
-3278942852,3278942852,DE
-3278942853,3278942853,ES
-3278942854,3278942854,GB
-3278942855,3278942855,DE
-3278942856,3278942856,NO
-3278942857,3278942857,DE
-3278942858,3278942858,IT
-3278942859,3278942859,DE
-3278942860,3278942860,IT
-3278942861,3278942861,FR
-3278942862,3278942863,DE
-3278942864,3278942864,ES
-3278942865,3278942865,GB
-3278942866,3278942867,NL
-3278942868,3278942868,DE
-3278942869,3278942869,IT
-3278942870,3278942870,CH
-3278942871,3278942871,IS
-3278942872,3278942872,ES
-3278942873,3278942873,IT
-3278942874,3278942875,DE
-3278942876,3278942876,PL
-3278942877,3278942877,DE
-3278942878,3278942878,NL
-3278942879,3278942879,DK
-3278942880,3278942881,DE
-3278942882,3278942882,CH
-3278942883,3278942883,GB
-3278942884,3278942884,DE
-3278942885,3278942885,NL
-3278942886,3278942886,DE
-3278942887,3278942887,IT
-3278942888,3278942889,DE
-3278942890,3278942890,ES
-3278942891,3278942894,DE
-3278942895,3278942895,NL
-3278942896,3278942896,GB
-3278942897,3278942897,CH
-3278942898,3278942899,NL
-3278942900,3278942903,DE
-3278942904,3278942904,BE
-3278942905,3278942905,IE
-3278942906,3278942907,DE
-3278942908,3278942908,GB
-3278942909,3278942910,DE
-3278942911,3278942911,IT
-3278942912,3278942913,DE
-3278942914,3278942914,CH
-3278942915,3278942915,DE
-3278942916,3278942916,CH
-3278942917,3278942922,DE
-3278942923,3278942923,NL
-3278942924,3278942924,DE
-3278942925,3278942925,GB
-3278942926,3278942930,DE
-3278942931,3278942931,CH
-3278942932,3278942932,NL
-3278942933,3278942933,BE
-3278942934,3278942934,IT
-3278942935,3278942936,NL
-3278942937,3278942937,DE
-3278942938,3278942938,CH
-3278942939,3278942939,ES
-3278942940,3278942940,DE
-3278942941,3278942941,IT
-3278942942,3278942942,DE
-3278942943,3278942944,NL
-3278942945,3278942946,DE
-3278942947,3278942947,BE
-3278942948,3278942948,AT
-3278942949,3278942949,CH
-3278942950,3278942950,DE
-3278942951,3278942951,IT
-3278942952,3278942953,DE
-3278942954,3278942954,AT
-3278942955,3278942955,DE
-3278942956,3278942956,IT
-3278942957,3278942957,DE
-3278942958,3278942958,CH
-3278942959,3278942959,DE
-3278942960,3278942960,FR
-3278942961,3278942961,PT
-3278942962,3278942963,NL
-3278942964,3278942966,DE
-3278942967,3278942967,NO
-3278942968,3278942968,NL
-3278942969,3278942969,AT
-3278942970,3278942970,ES
-3278942971,3278942972,IT
-3278942973,3278942977,DE
-3278942978,3278942978,BE
-3278942979,3278942979,FR
-3278942980,3278942980,IT
-3278942981,3278942983,DE
-3278942984,3278942984,IT
-3278942985,3278942985,ES
-3278942986,3278942986,CH
-3278942987,3278942987,BE
-3278942988,3278942990,CH
-3278942991,3278942991,GB
-3278942992,3278942992,DE
-3278942993,3278942993,GB
-3278942994,3278942994,CH
-3278942995,3278942997,DE
-3278942998,3278942998,CH
-3278942999,3278942999,GB
-3278943000,3278943002,DE
-3278943003,3278943003,CH
-3278943004,3278943005,DE
-3278943006,3278943006,FR
-3278943007,3278943007,DE
-3278943008,3278943008,IT
-3278943009,3278943009,DE
-3278943010,3278943010,NL
-3278943011,3278943011,DE
-3278943012,3278943012,CZ
-3278943013,3278943013,IT
-3278943014,3278943014,DE
-3278943015,3278943016,ES
-3278943017,3278943017,FR
-3278943018,3278943018,CH
-3278943019,3278943019,DE
-3278943020,3278943020,CH
-3278943021,3278943021,BE
-3278943022,3278943022,ES
-3278943023,3278943023,BE
-3278943024,3278943024,FR
-3278943025,3278943025,DE
-3278943026,3278943026,DK
-3278943027,3278943027,DE
-3278943028,3278943029,GB
-3278943030,3278943030,ES
-3278943031,3278943031,NL
-3278943032,3278943032,FR
-3278943033,3278943033,IT
-3278943034,3278943034,DE
-3278943035,3278943035,ES
-3278943036,3278943036,DE
-3278943037,3278943037,FR
-3278943038,3278943038,DE
-3278943039,3278943039,CH
-3278943040,3278943040,IT
-3278943041,3278943041,DE
-3278943042,3278943042,BE
-3278943043,3278943043,SI
-3278943044,3278943044,FR
-3278943045,3278943048,DE
-3278943049,3278943049,GB
-3278943050,3278943050,IT
-3278943051,3278943052,DE
-3278943053,3278943053,IT
-3278943054,3278943056,DE
-3278943057,3278943057,CH
-3278943058,3278943058,FR
-3278943059,3278943059,CH
-3278943060,3278943065,DE
-3278943066,3278943066,GB
-3278943067,3278943069,DE
-3278943070,3278943070,PL
-3278943071,3278943072,DE
-3278943073,3278943073,AT
-3278943074,3278943074,ES
-3278943075,3278943076,FR
-3278943077,3278943077,DE
-3278943078,3278943079,CH
-3278943080,3278943080,BE
-3278943081,3278943081,FR
-3278943082,3278943082,CH
-3278943083,3278943084,DE
-3278943085,3278943085,NL
-3278943086,3278943087,DE
-3278943088,3278943088,NL
-3278943089,3278943090,DE
-3278943091,3278943091,IT
-3278943092,3278943092,ES
-3278943093,3278943096,DE
-3278943097,3278943097,BE
-3278943098,3278943098,DE
-3278943099,3278943099,AT
-3278943100,3278943100,SE
-3278943101,3278943101,AT
-3278943102,3278943102,ZA
-3278943103,3278943105,DE
-3278943106,3278943106,FR
-3278943107,3278943107,DE
-3278943108,3278943108,FR
-3278943109,3278943109,IT
-3278943110,3278943110,DK
-3278943111,3278943111,GB
-3278943112,3278943112,PT
-3278943113,3278943113,ES
-3278943114,3278943114,CH
-3278943115,3278943115,PT
-3278943116,3278943116,CH
-3278943117,3278943117,DE
-3278943118,3278943119,IT
-3278943120,3278943120,FR
-3278943121,3278943121,AT
-3278943122,3278943122,GB
-3278943123,3278943123,FR
-3278943124,3278943124,BE
-3278943125,3278943125,CH
-3278943126,3278943126,IT
-3278943127,3278943127,DE
-3278943128,3278943128,GB
-3278943129,3278943130,DE
-3278943131,3278943131,BE
-3278943132,3278943132,FR
-3278943133,3278943133,IT
-3278943134,3278943135,NL
-3278943136,3278943136,FR
-3278943137,3278943137,CH
-3278943138,3278943138,BE
-3278943139,3278943139,IT
-3278943140,3278943140,ES
-3278943141,3278943141,NL
-3278943142,3278943142,FR
-3278943143,3278943143,ES
-3278943144,3278943145,DE
-3278943146,3278943146,CH
-3278943147,3278943147,NL
-3278943148,3278943148,FR
-3278943149,3278943149,BE
-3278943150,3278943150,DE
-3278943151,3278943151,NL
-3278943152,3278943153,DE
-3278943154,3278943154,SE
-3278943155,3278943159,DE
-3278943160,3278943160,ES
-3278943161,3278943161,BE
-3278943162,3278943162,ES
-3278943163,3278943163,DE
-3278943164,3278943164,NL
-3278943165,3278943165,SE
-3278943166,3278943168,DE
-3278943169,3278943169,BE
-3278943170,3278943172,FR
-3278943173,3278943173,NL
-3278943174,3278943174,DE
-3278943175,3278943177,ES
-3278943178,3278943178,DE
-3278943179,3278943179,CH
-3278943180,3278943181,DE
-3278943182,3278943182,SE
-3278943183,3278943183,FR
-3278943184,3278943184,DE
-3278943185,3278943185,BE
-3278943186,3278943186,NL
-3278943187,3278943187,DE
-3278943188,3278943188,GB
-3278943189,3278943191,DE
-3278943192,3278943192,LU
-3278943193,3278943193,DE
-3278943194,3278943194,IT
-3278943195,3278943195,DE
-3278943196,3278943196,CH
-3278943197,3278943197,NL
-3278943198,3278943198,GR
-3278943199,3278943199,GB
-3278943200,3278943200,DE
-3278943201,3278943202,CH
-3278943203,3278943203,SE
-3278943204,3278943206,DE
-3278943207,3278943207,IT
-3278943208,3278943208,DE
-3278943209,3278943209,ES
-3278943210,3278943212,IT
-3278943213,3278943213,DE
-3278943214,3278943214,IT
-3278943215,3278943215,GB
-3278943216,3278943216,CH
-3278943217,3278943217,GB
-3278943218,3278943218,IT
-3278943219,3278943220,DE
-3278943221,3278943221,CH
-3278943222,3278943222,DE
-3278943223,3278943223,NL
-3278943224,3278943225,DE
-3278943226,3278943226,FR
-3278943227,3278943227,GB
-3278943228,3278943228,ES
-3278943229,3278943235,DE
-3278943236,3278943236,ES
-3278943237,3278943237,FR
-3278943238,3278943239,DE
-3278943240,3278943240,NL
-3278943241,3278943242,DE
-3278943243,3278943243,ES
-3278943244,3278943244,FR
-3278943245,3278943245,DE
-3278943246,3278943246,NL
-3278943247,3278943247,CH
-3278943248,3278943248,DE
-3278943249,3278943249,ES
-3278943250,3278943251,FR
-3278943252,3278943252,IT
-3278943253,3278943253,DE
-3278943254,3278943254,DK
-3278943255,3278943255,DE
-3278943256,3278943256,FR
-3278943257,3278943257,IT
-3278943258,3278943260,DE
-3278943261,3278943261,ES
-3278943262,3278943262,NL
-3278943263,3278943263,FR
-3278943264,3278943265,DE
-3278943266,3278943266,FR
-3278943267,3278943267,NL
-3278943268,3278943268,DE
-3278943269,3278943270,CH
-3278943271,3278943271,ES
-3278943272,3278943274,DE
-3278943275,3278943275,IT
-3278943276,3278943277,DE
-3278943278,3278943278,GB
-3278943279,3278943279,DE
-3278943280,3278943280,FR
-3278943281,3278943281,IT
-3278943282,3278943283,DE
-3278943284,3278943284,IT
-3278943285,3278943287,DE
-3278943288,3278943288,FR
-3278943289,3278943289,DE
-3278943290,3278943290,IT
-3278943291,3278943292,DE
-3278943293,3278943293,GB
-3278943294,3278943294,IT
-3278943295,3278943296,ES
-3278943297,3278943297,IT
-3278943298,3278943298,PT
-3278943299,3278943299,DK
-3278943300,3278943300,GB
-3278943301,3278943301,CH
-3278943302,3278943302,BE
-3278943303,3278943303,DK
-3278943304,3278943304,FR
-3278943305,3278943305,LU
-3278943306,3278943306,AT
-3278943307,3278943308,DE
-3278943309,3278943309,PT
-3278943310,3278943310,ES
+3278942700,3278943027,DE
+3278943028,3278943028,GB
+3278943029,3278943310,DE
3278943311,3278943311,BE
-3278943312,3278943314,DE
-3278943315,3278943316,FR
-3278943317,3278943318,DE
-3278943319,3278943319,NL
-3278943320,3278943320,BE
-3278943321,3278943321,DE
-3278943322,3278943322,NL
-3278943323,3278943323,FR
-3278943324,3278943324,GB
-3278943325,3278943326,DE
-3278943327,3278943328,IT
-3278943329,3278943329,DE
-3278943330,3278943330,ES
-3278943331,3278943331,PL
-3278943332,3278943333,DE
-3278943334,3278943334,FR
-3278943335,3278943335,AT
-3278943336,3278943337,IT
-3278943338,3278943338,DE
-3278943339,3278943339,PT
-3278943340,3278943340,ES
-3278943341,3278943341,CH
-3278943342,3278943343,DE
-3278943344,3278943344,GB
-3278943345,3278943345,DE
-3278943346,3278943346,FR
-3278943347,3278943347,DE
-3278943348,3278943349,GB
-3278943350,3278943351,DE
-3278943352,3278943352,NL
-3278943353,3278943353,DE
-3278943354,3278943355,ES
-3278943356,3278943356,FR
-3278943357,3278943357,ES
-3278943358,3278943358,FR
-3278943359,3278943359,ES
-3278943360,3278943360,CH
-3278943361,3278943361,DE
-3278943362,3278943362,IT
-3278943363,3278943363,DE
-3278943364,3278943364,IT
-3278943365,3278943366,DE
-3278943367,3278943367,FR
-3278943368,3278943369,DE
-3278943370,3278943370,FR
-3278943371,3278943371,DE
-3278943372,3278943372,CH
-3278943373,3278943374,GR
-3278943375,3278943375,ES
-3278943376,3278943376,NO
-3278943377,3278943377,IT
-3278943378,3278943378,DE
-3278943379,3278943379,CH
-3278943380,3278943380,ES
-3278943381,3278943381,GB
-3278943382,3278943382,ES
-3278943383,3278943383,PL
-3278943384,3278943384,IT
-3278943385,3278943385,DE
-3278943386,3278943387,FR
-3278943388,3278943388,ES
-3278943389,3278943389,BE
-3278943390,3278943390,ES
-3278943391,3278943391,DE
-3278943392,3278943392,PL
-3278943393,3278943393,CH
-3278943394,3278943394,FR
-3278943395,3278943395,IT
-3278943396,3278943396,NL
-3278943397,3278943399,DE
-3278943400,3278943400,FR
-3278943401,3278943401,DE
-3278943402,3278943402,FR
-3278943403,3278943403,GB
-3278943404,3278943404,DE
-3278943405,3278943405,GB
-3278943406,3278943406,AT
-3278943407,3278943407,DE
-3278943408,3278943408,FR
-3278943409,3278943409,IT
-3278943410,3278943410,NL
-3278943411,3278943411,ES
-3278943412,3278943412,GB
-3278943413,3278943413,NL
-3278943414,3278943414,ES
-3278943415,3278943415,UA
+3278943312,3278943415,DE
3278943416,3278943416,NL
-3278943417,3278943417,DE
-3278943418,3278943418,GB
-3278943419,3278943419,ES
-3278943420,3278943420,BE
-3278943421,3278943422,DE
-3278943423,3278943423,IT
-3278943424,3278943424,DE
-3278943425,3278943425,GB
-3278943426,3278943426,DE
-3278943427,3278943427,AT
-3278943428,3278943428,DE
-3278943429,3278943430,IT
-3278943431,3278943431,CH
-3278943432,3278943432,DE
-3278943433,3278943433,GB
-3278943434,3278943435,DE
-3278943436,3278943436,ES
-3278943437,3278943437,FR
-3278943438,3278943438,DE
-3278943439,3278943439,SE
-3278943440,3278943440,DK
-3278943441,3278943441,IT
-3278943442,3278943442,FR
-3278943443,3278943445,DE
-3278943446,3278943446,CH
-3278943447,3278943447,DE
-3278943448,3278943448,FR
-3278943449,3278943449,DE
-3278943450,3278943450,CH
-3278943451,3278943451,AT
-3278943452,3278943452,DE
-3278943453,3278943453,PT
-3278943454,3278943455,DE
-3278943456,3278943456,IT
-3278943457,3278943457,GB
-3278943458,3278943459,DE
-3278943460,3278943460,FR
-3278943461,3278943464,DE
-3278943465,3278943465,ES
-3278943466,3278943466,DE
-3278943467,3278943467,ES
-3278943468,3278943468,DE
-3278943469,3278943469,NL
-3278943470,3278943471,ES
-3278943472,3278943472,BE
-3278943473,3278943473,DE
-3278943474,3278943474,BE
-3278943475,3278943477,DE
-3278943478,3278943478,NL
-3278943479,3278943481,DE
-3278943482,3278943482,IT
-3278943483,3278943489,DE
-3278943490,3278943490,BE
-3278943491,3278943491,DE
-3278943492,3278943492,CH
-3278943493,3278943494,DE
-3278943495,3278943495,FR
-3278943496,3278943496,GB
-3278943497,3278943497,AT
-3278943498,3278943499,DE
-3278943500,3278943500,IT
-3278943501,3278943501,FR
-3278943502,3278943504,DE
-3278943505,3278943505,LI
-3278943506,3278943506,AT
-3278943507,3278943507,FR
-3278943508,3278943509,IT
-3278943510,3278943510,DE
-3278943511,3278943512,IT
-3278943513,3278943513,ES
-3278943514,3278943514,BE
-3278943515,3278943515,DE
-3278943516,3278943517,ES
-3278943518,3278943518,FR
-3278943519,3278943519,HU
-3278943520,3278943520,AT
-3278943521,3278943521,ES
-3278943522,3278943523,DE
-3278943524,3278943524,AT
-3278943525,3278943525,BE
-3278943526,3278943526,FR
-3278943527,3278943527,DE
-3278943528,3278943528,CH
-3278943529,3278943529,DE
-3278943530,3278943530,AT
-3278943531,3278943531,DE
-3278943532,3278943532,NL
-3278943533,3278943533,ES
-3278943534,3278943534,GB
-3278943535,3278943535,BR
-3278943536,3278943537,ES
-3278943538,3278943538,RE
-3278943539,3278943539,IT
-3278943540,3278943540,ES
-3278943541,3278943542,DE
-3278943543,3278943543,IT
-3278943544,3278943545,DE
-3278943546,3278943546,NL
-3278943547,3278943547,CH
-3278943548,3278943548,GB
-3278943549,3278943549,IL
-3278943550,3278943550,IT
-3278943551,3278943551,DE
-3278943552,3278943552,IT
-3278943553,3278943553,DE
-3278943554,3278943554,FR
-3278943555,3278943555,DE
-3278943556,3278943556,FR
-3278943557,3278943557,DE
-3278943558,3278943558,AT
-3278943559,3278943560,DE
-3278943561,3278943561,FR
-3278943562,3278943564,DE
-3278943565,3278943565,GB
-3278943566,3278943566,BE
-3278943567,3278943567,AE
-3278943568,3278943568,NL
-3278943569,3278943569,ES
-3278943570,3278943570,DE
-3278943571,3278943571,BE
-3278943572,3278943572,GB
-3278943573,3278943573,DE
-3278943574,3278943574,DK
-3278943575,3278943575,BE
-3278943576,3278943576,NL
-3278943577,3278943577,FR
-3278943578,3278943578,DE
-3278943579,3278943579,BE
-3278943580,3278943580,IT
-3278943581,3278943581,CH
-3278943582,3278943582,DE
-3278943583,3278943583,NL
-3278943584,3278943585,DE
-3278943586,3278943586,NL
-3278943587,3278943587,ES
-3278943588,3278943588,DE
-3278943589,3278943589,IT
-3278943590,3278943590,DE
-3278943591,3278943591,NL
-3278943592,3278943592,DE
-3278943593,3278943593,PL
-3278943594,3278943594,ES
-3278943595,3278943595,GB
-3278943596,3278943596,GR
-3278943597,3278943598,DE
-3278943599,3278943599,ES
-3278943600,3278943601,DE
-3278943602,3278943602,PL
-3278943603,3278943603,FR
-3278943604,3278943604,ES
-3278943605,3278943605,DE
-3278943606,3278943606,AT
-3278943607,3278943607,DE
-3278943608,3278943608,ES
-3278943609,3278943609,DE
-3278943610,3278943610,BE
-3278943611,3278943611,NL
-3278943612,3278943613,DE
-3278943614,3278943614,IT
-3278943615,3278943615,CH
-3278943616,3278943616,DE
-3278943617,3278943617,ES
-3278943618,3278943619,DE
-3278943620,3278943620,IT
-3278943621,3278943621,CH
-3278943622,3278943622,DE
-3278943623,3278943623,DK
-3278943624,3278943624,DE
-3278943625,3278943625,FR
-3278943626,3278943628,DE
-3278943629,3278943630,FR
-3278943631,3278943632,DE
-3278943633,3278943633,GB
-3278943634,3278943634,DE
-3278943635,3278943635,IT
-3278943636,3278943636,CH
-3278943637,3278943638,IT
-3278943639,3278943639,HU
-3278943640,3278943641,DE
-3278943642,3278943642,FR
-3278943643,3278943643,NL
-3278943644,3278943645,FR
-3278943646,3278943646,IT
-3278943647,3278943647,DE
-3278943648,3278943648,DK
-3278943649,3278943649,DE
-3278943650,3278943650,ES
-3278943651,3278943651,FR
-3278943652,3278943653,IT
-3278943654,3278943654,BE
-3278943655,3278943655,FR
-3278943656,3278943656,AT
-3278943657,3278943658,DE
-3278943659,3278943659,NL
-3278943660,3278943660,CY
-3278943661,3278943661,DE
-3278943662,3278943662,ES
-3278943663,3278943663,CH
-3278943664,3278943666,ES
+3278943417,3278943428,DE
+3278943429,3278943429,IT
+3278943430,3278943666,DE
3278943667,3278943667,IT
-3278943668,3278943669,DE
-3278943670,3278943670,IT
-3278943671,3278943672,DE
-3278943673,3278943673,ES
-3278943674,3278943676,DE
-3278943677,3278943677,IT
-3278943678,3278943678,BE
-3278943679,3278943679,FR
-3278943680,3278943680,GB
-3278943681,3278943681,CH
-3278943682,3278943682,DE
-3278943683,3278943683,PT
-3278943684,3278943684,AD
-3278943685,3278943686,DE
-3278943687,3278943687,CH
-3278943688,3278943689,IT
-3278943690,3278943690,ES
-3278943691,3278943692,DE
-3278943693,3278943693,PL
-3278943694,3278943694,GB
-3278943695,3278943695,DE
-3278943696,3278943696,GB
-3278943697,3278943697,DE
-3278943698,3278943698,IT
-3278943699,3278943699,FR
-3278943700,3278943700,CH
-3278943701,3278943701,AT
-3278943702,3278943702,FR
-3278943703,3278943703,PL
-3278943704,3278943705,DE
-3278943706,3278943706,ES
-3278943707,3278943707,CH
-3278943708,3278943710,DE
-3278943711,3278943711,IT
-3278943712,3278943713,DE
-3278943714,3278943714,ES
-3278943715,3278943715,DE
-3278943716,3278943716,ES
-3278943717,3278943719,DE
-3278943720,3278943720,CH
-3278943721,3278943726,DE
-3278943727,3278943727,PL
-3278943728,3278943729,DE
-3278943730,3278943730,FR
-3278943731,3278943731,DK
-3278943732,3278943733,CH
-3278943734,3278943734,DE
-3278943735,3278943735,AD
-3278943736,3278943736,DE
-3278943737,3278943737,ES
-3278943738,3278943740,DE
-3278943741,3278943741,PT
-3278943742,3278943742,IL
-3278943743,3278943745,DE
-3278943746,3278943746,CH
-3278943747,3278943747,DE
-3278943748,3278943749,ES
-3278943750,3278943751,DE
-3278943752,3278943752,GR
-3278943753,3278943753,DE
-3278943754,3278943754,FR
-3278943755,3278943755,SL
-3278943756,3278943756,DE
-3278943757,3278943757,FR
-3278943758,3278943758,DE
-3278943759,3278943759,NL
-3278943760,3278943761,DE
-3278943762,3278943762,CY
-3278943763,3278943763,DE
-3278943764,3278943764,FR
-3278943765,3278943765,CH
-3278943766,3278943766,BE
-3278943767,3278943767,ES
-3278943768,3278943768,DE
-3278943769,3278943769,CZ
-3278943770,3278943770,FR
-3278943771,3278943771,CH
-3278943772,3278943772,ES
-3278943773,3278943773,IT
-3278943774,3278943774,DE
-3278943775,3278943776,PT
-3278943777,3278943777,FR
-3278943778,3278943778,CH
-3278943779,3278943780,DE
-3278943781,3278943781,GB
-3278943782,3278943782,IT
-3278943783,3278943786,DE
-3278943787,3278943787,IT
-3278943788,3278943788,DE
-3278943789,3278943789,ES
-3278943790,3278943790,DE
-3278943791,3278943791,IT
-3278943792,3278943792,FR
-3278943793,3278943793,IT
-3278943794,3278943794,HU
-3278943795,3278943796,DE
-3278943797,3278943797,ES
-3278943798,3278943798,DE
-3278943799,3278943799,IE
-3278943800,3278943800,DE
-3278943801,3278943801,LU
-3278943802,3278943802,DE
-3278943803,3278943803,GB
-3278943804,3278943804,DE
-3278943805,3278943805,DK
-3278943806,3278943806,ES
-3278943807,3278943807,DE
-3278943808,3278943808,IT
-3278943809,3278943809,FR
-3278943810,3278943810,DE
-3278943811,3278943811,GR
-3278943812,3278943812,IT
-3278943813,3278943813,IN
-3278943814,3278943814,ES
-3278943815,3278943815,MA
-3278943816,3278943816,GB
-3278943817,3278943817,FR
-3278943818,3278943818,DE
-3278943819,3278943819,AT
-3278943820,3278943820,DE
-3278943821,3278943821,SM
-3278943822,3278943822,PL
-3278943823,3278943823,DE
-3278943824,3278943824,CH
-3278943825,3278943826,DE
-3278943827,3278943827,AT
-3278943828,3278943828,ES
-3278943829,3278943829,CH
-3278943830,3278943830,ES
-3278943831,3278943831,US
-3278943832,3278943832,BE
-3278943833,3278943833,IT
-3278943834,3278943835,GB
-3278943836,3278943836,DE
-3278943837,3278943837,ES
-3278943838,3278943838,DE
-3278943839,3278943839,IT
-3278943840,3278943845,DE
-3278943846,3278943846,GB
-3278943847,3278943847,FR
-3278943848,3278943848,IT
-3278943849,3278943849,DE
-3278943850,3278943851,FR
-3278943852,3278943852,BE
-3278943853,3278943853,GB
-3278943854,3278943854,ES
-3278943855,3278943855,BE
-3278943856,3278943856,DE
-3278943857,3278943857,PL
-3278943858,3278943858,NL
-3278943859,3278943859,DE
-3278943860,3278943860,FR
-3278943861,3278943862,DE
-3278943863,3278943863,IT
-3278943864,3278943864,DK
-3278943865,3278943865,GB
-3278943866,3278943866,IT
-3278943867,3278943867,ES
-3278943868,3278943868,IT
-3278943869,3278943869,IE
-3278943870,3278943870,NL
-3278943871,3278943871,FR
-3278943872,3278943872,DE
-3278943873,3278943873,IT
-3278943874,3278943874,CH
-3278943875,3278943875,IL
-3278943876,3278943881,DE
-3278943882,3278943882,PL
-3278943883,3278943883,CH
-3278943884,3278943884,DE
-3278943885,3278943885,IT
-3278943886,3278943888,DE
-3278943889,3278943889,BE
-3278943890,3278943890,NL
-3278943891,3278943891,ES
-3278943892,3278943893,DE
-3278943894,3278943894,IT
-3278943895,3278943895,DE
-3278943896,3278943896,PL
-3278943897,3278943897,ES
-3278943898,3278943898,IT
-3278943899,3278943899,GB
-3278943900,3278943900,ES
-3278943901,3278943901,DE
-3278943902,3278943902,GB
-3278943903,3278943903,IT
-3278943904,3278943904,DE
-3278943905,3278943905,FR
-3278943906,3278943907,IT
-3278943908,3278943908,GB
-3278943909,3278943909,HU
-3278943910,3278943910,FR
-3278943911,3278943911,DE
-3278943912,3278943913,IT
-3278943914,3278943914,DE
-3278943915,3278943915,PL
-3278943916,3278943916,DE
-3278943917,3278943917,FR
-3278943918,3278943918,ES
-3278943919,3278943920,FR
-3278943921,3278943921,DE
-3278943922,3278943922,ES
-3278943923,3278943923,DE
-3278943924,3278943924,IT
-3278943925,3278943926,ES
-3278943927,3278943927,GB
-3278943928,3278943928,DE
-3278943929,3278943929,PT
-3278943930,3278943930,IT
-3278943931,3278943932,DE
-3278943933,3278943933,ES
-3278943934,3278943934,DE
-3278943935,3278943935,GR
-3278943936,3278943939,DE
-3278943940,3278943940,DK
+3278943668,3278943940,DE
3278943941,3278943941,GB
-3278943942,3278943942,NL
-3278943943,3278943943,AT
-3278943944,3278943944,IT
-3278943945,3278943945,NL
-3278943946,3278943946,LU
-3278943947,3278943947,DE
-3278943948,3278943948,ES
-3278943949,3278943949,DE
+3278943942,3278943949,DE
3278943950,3278943950,BE
-3278943951,3278943951,LU
-3278943952,3278943953,DE
-3278943954,3278943954,FR
-3278943955,3278943956,DE
-3278943957,3278943957,GB
-3278943958,3278943958,DK
-3278943959,3278943959,DE
-3278943960,3278943960,FR
-3278943961,3278943964,DE
-3278943965,3278943965,CH
-3278943966,3278943967,DE
-3278943968,3278943968,ES
-3278943969,3278943969,PL
-3278943970,3278943970,ES
-3278943971,3278943971,BE
-3278943972,3278943972,IT
-3278943973,3278943973,DE
-3278943974,3278943974,GR
-3278943975,3278943975,CH
-3278943976,3278943976,DE
-3278943977,3278943977,DK
-3278943978,3278943978,DE
-3278943979,3278943979,ES
-3278943980,3278943980,GB
-3278943981,3278943981,DE
-3278943982,3278943982,ES
-3278943983,3278943983,DE
-3278943984,3278943984,AT
-3278943985,3278943985,NL
-3278943986,3278943987,IT
-3278943988,3278943988,ES
-3278943989,3278943990,DE
-3278943991,3278943991,NL
-3278943992,3278943992,IT
-3278943993,3278943993,AT
-3278943994,3278943995,DE
-3278943996,3278943997,CH
-3278943998,3278943998,FR
-3278943999,3278944001,DE
-3278944002,3278944002,GB
-3278944003,3278944003,LU
-3278944004,3278944006,DE
-3278944007,3278944007,NL
-3278944008,3278944008,IT
-3278944009,3278944009,CH
-3278944010,3278944010,NL
-3278944011,3278944012,DE
-3278944013,3278944013,DK
-3278944014,3278944014,IT
-3278944015,3278944015,IS
-3278944016,3278944016,PL
-3278944017,3278944017,DE
-3278944018,3278944018,BE
-3278944019,3278944020,DE
-3278944021,3278944021,IT
-3278944022,3278944022,FR
+3278943951,3278944022,DE
3278944023,3278944023,AT
-3278944024,3278944025,CH
-3278944026,3278944027,FR
-3278944028,3278944028,DE
-3278944029,3278944029,IT
-3278944030,3278944030,DE
-3278944031,3278944031,FR
-3278944032,3278944033,DE
-3278944034,3278944034,GR
-3278944035,3278944035,FR
-3278944036,3278944036,US
-3278944037,3278944037,FR
-3278944038,3278944038,GB
-3278944039,3278944039,DE
-3278944040,3278944040,FR
-3278944041,3278944041,DE
-3278944042,3278944042,FR
-3278944043,3278944043,DE
-3278944044,3278944045,FR
-3278944046,3278944046,NL
-3278944047,3278944047,GB
-3278944048,3278944048,BE
-3278944049,3278944049,IT
-3278944050,3278944050,DE
-3278944051,3278944051,BE
-3278944052,3278944052,AT
-3278944053,3278944053,IT
-3278944054,3278944054,DE
-3278944055,3278944055,IT
-3278944056,3278944058,DE
-3278944059,3278944059,ES
-3278944060,3278944060,BE
-3278944061,3278944061,FR
-3278944062,3278944063,DE
-3278944064,3278944064,FR
-3278944065,3278944065,IT
-3278944066,3278944066,GB
-3278944067,3278944067,DE
-3278944068,3278944068,ES
-3278944069,3278944069,PL
-3278944070,3278944070,DE
-3278944071,3278944071,DK
-3278944072,3278944072,AT
-3278944073,3278944073,FR
-3278944074,3278944075,ES
-3278944076,3278944076,DE
-3278944077,3278944077,GB
-3278944078,3278944078,DE
-3278944079,3278944079,GB
-3278944080,3278944080,DE
+3278944024,3278944080,DE
3278944081,3278944081,GB
-3278944082,3278944082,IT
-3278944083,3278944084,ES
-3278944085,3278944085,PT
-3278944086,3278944086,NL
-3278944087,3278944087,CH
-3278944088,3278944088,IT
-3278944089,3278944089,DE
-3278944090,3278944090,IT
-3278944091,3278944091,MA
-3278944092,3278944092,GR
-3278944093,3278944094,DE
-3278944095,3278944095,AT
-3278944096,3278944096,GB
-3278944097,3278944097,DE
-3278944098,3278944098,SE
+3278944082,3278944098,DE
3278944099,3278944099,GB
-3278944100,3278944102,DE
-3278944103,3278944104,IT
-3278944105,3278944105,FR
-3278944106,3278944106,AT
-3278944107,3278944108,DE
-3278944109,3278944109,ES
-3278944110,3278944111,DE
-3278944112,3278944112,NL
-3278944113,3278944113,DE
-3278944114,3278944114,IT
-3278944115,3278944116,ES
-3278944117,3278944118,IT
-3278944119,3278944119,ES
-3278944120,3278944121,DE
-3278944122,3278944122,FR
-3278944123,3278944123,IT
-3278944124,3278944124,DE
-3278944125,3278944125,SE
-3278944126,3278944126,ES
-3278944127,3278944127,IT
-3278944128,3278944128,PT
-3278944129,3278944129,BE
-3278944130,3278944130,DE
-3278944131,3278944131,FR
-3278944132,3278944132,IE
-3278944133,3278944133,IT
-3278944134,3278944134,ES
-3278944135,3278944135,NL
-3278944136,3278944137,DE
+3278944100,3278944137,DE
3278944138,3278944138,GB
-3278944139,3278944139,FR
-3278944140,3278944140,PT
-3278944141,3278944141,FR
-3278944142,3278944142,GB
-3278944143,3278944143,AT
-3278944144,3278944144,DE
-3278944145,3278944145,SE
-3278944146,3278944147,DE
-3278944148,3278944148,ES
-3278944149,3278944149,DE
-3278944150,3278944150,IE
-3278944151,3278944151,IT
-3278944152,3278944152,IS
-3278944153,3278944158,DE
-3278944159,3278944159,CH
-3278944160,3278944160,FR
-3278944161,3278944161,DE
+3278944139,3278944161,DE
3278944162,3278944162,GB
-3278944163,3278944163,HU
-3278944164,3278944164,IT
-3278944165,3278944166,DE
-3278944167,3278944167,IT
-3278944168,3278944168,CH
-3278944169,3278944169,DE
-3278944170,3278944171,CH
-3278944172,3278944172,DE
-3278944173,3278944173,FR
-3278944174,3278944174,GB
-3278944175,3278944175,DE
-3278944176,3278944176,ES
-3278944177,3278944177,LU
-3278944178,3278944179,DE
-3278944180,3278944180,GB
-3278944181,3278944181,IT
-3278944182,3278944182,FR
-3278944183,3278944184,ES
-3278944185,3278944185,NL
-3278944186,3278944192,DE
-3278944193,3278944193,FR
-3278944194,3278944194,GB
-3278944195,3278944195,IT
-3278944196,3278944197,DE
-3278944198,3278944198,IT
-3278944199,3278944199,AT
-3278944200,3278944200,DE
-3278944201,3278944201,SE
-3278944202,3278944202,NO
+3278944163,3278944202,DE
3278944203,3278944203,NL
-3278944204,3278944207,DE
-3278944208,3278944208,NL
-3278944209,3278944209,PL
-3278944210,3278944210,AT
-3278944211,3278944211,DE
-3278944212,3278944212,FR
-3278944213,3278944213,DK
-3278944214,3278944214,GB
-3278944215,3278944215,IT
-3278944216,3278944216,DE
-3278944217,3278944217,IT
-3278944218,3278944219,DE
-3278944220,3278944220,GB
-3278944221,3278944221,GR
-3278944222,3278944222,IT
-3278944223,3278944224,DE
-3278944225,3278944225,NL
-3278944226,3278944226,RU
-3278944227,3278944227,IT
-3278944228,3278944230,DE
-3278944231,3278944231,CH
-3278944232,3278944232,NL
-3278944233,3278944233,GB
-3278944234,3278944234,AT
-3278944235,3278944235,DE
-3278944236,3278944236,IT
-3278944237,3278944238,DE
-3278944239,3278944239,SE
-3278944240,3278944240,FR
-3278944241,3278944241,IT
-3278944242,3278944242,ES
-3278944243,3278944243,DE
-3278944244,3278944244,ES
-3278944245,3278944245,BE
-3278944246,3278944246,NL
-3278944247,3278944247,ES
-3278944248,3278944248,NL
-3278944249,3278944249,ES
-3278944250,3278944250,IT
-3278944251,3278944251,AT
-3278944252,3278944252,IT
-3278944253,3278944254,GB
-3278944255,3278944256,DE
-3278944257,3278944272,US
-3278944273,3278944273,CA
-3278944274,3278944274,US
-3278944275,3278944275,CA
-3278944276,3278944277,US
-3278944278,3278944278,VE
-3278944279,3278944279,DE
-3278944280,3278944284,US
-3278944285,3278944285,DE
-3278944286,3278944286,US
-3278944287,3278944288,CA
-3278944289,3278944293,US
-3278944294,3278944294,CA
-3278944295,3278944346,US
-3278944347,3278944347,AR
-3278944348,3278944360,US
-3278944361,3278944361,AR
-3278944362,3278944365,US
-3278944366,3278944366,MX
-3278944367,3278944367,US
-3278944368,3278944368,CA
-3278944369,3278944379,US
-3278944380,3278944380,DE
-3278944381,3278944385,US
-3278944386,3278944386,DE
-3278944387,3278944388,US
-3278944389,3278944389,CA
-3278944390,3278944390,AR
-3278944391,3278944391,CA
-3278944392,3278944395,US
-3278944396,3278944396,CA
-3278944397,3278944399,US
-3278944400,3278944400,BR
-3278944401,3278944401,US
-3278944402,3278944402,CA
-3278944403,3278944412,US
-3278944413,3278944413,CA
-3278944414,3278944418,US
-3278944419,3278944419,DE
-3278944420,3278944420,CA
-3278944421,3278944421,DE
-3278944422,3278944432,US
-3278944433,3278944433,DE
-3278944434,3278944444,US
-3278944445,3278944449,DE
-3278944450,3278944451,CA
-3278944452,3278944460,DE
-3278944461,3278944461,US
-3278944462,3278944470,DE
-3278944471,3278944471,US
-3278944472,3278944513,DE
-3278944514,3278944517,US
-3278944518,3278944518,DE
-3278944519,3278944520,US
-3278944521,3278944521,CA
-3278944522,3278944522,US
-3278944523,3278944523,CA
-3278944524,3278944524,US
-3278944525,3278944525,CL
-3278944526,3278944526,US
-3278944527,3278944527,CA
-3278944528,3278944528,US
-3278944529,3278944529,CA
-3278944530,3278944537,US
-3278944538,3278944538,AR
-3278944539,3278944544,US
-3278944545,3278944545,CA
-3278944546,3278944555,US
-3278944556,3278944556,CL
-3278944557,3278944559,US
-3278944560,3278944560,AR
-3278944561,3278944561,US
-3278944562,3278944562,CA
-3278944563,3278944563,US
-3278944564,3278944564,CA
-3278944565,3278944569,US
-3278944570,3278944570,DE
-3278944571,3278944572,US
-3278944573,3278944573,DE
-3278944574,3278944574,US
-3278944575,3278944575,DE
-3278944576,3278944578,US
-3278944579,3278944579,DE
-3278944580,3278944580,AR
-3278944581,3278944581,US
-3278944582,3278944583,DE
-3278944584,3278944588,US
-3278944589,3278944589,DE
-3278944590,3278944599,US
-3278944600,3278944600,SA
-3278944601,3278944606,US
-3278944607,3278944608,DE
-3278944609,3278944611,US
-3278944612,3278944612,DE
-3278944613,3278944626,US
-3278944627,3278944627,DE
-3278944628,3278944633,US
-3278944634,3278944634,DE
-3278944635,3278944638,US
-3278944639,3278944640,DE
-3278944641,3278944642,US
-3278944643,3278944643,CL
-3278944644,3278944650,US
-3278944651,3278944651,DE
-3278944652,3278944654,US
-3278944655,3278944657,AR
-3278944658,3278944659,US
-3278944660,3278944660,AR
+3278944204,3278944286,DE
+3278944287,3278944287,CA
+3278944288,3278944294,DE
+3278944295,3278944295,US
+3278944296,3278944305,DE
+3278944306,3278944306,US
+3278944307,3278944375,DE
+3278944376,3278944376,US
+3278944377,3278944417,DE
+3278944418,3278944418,US
+3278944419,3278944612,DE
+3278944613,3278944613,US
+3278944614,3278944616,DE
+3278944617,3278944617,US
+3278944618,3278944628,DE
+3278944629,3278944629,US
+3278944630,3278944643,DE
+3278944644,3278944644,US
+3278944645,3278944660,DE
3278944661,3278944661,US
-3278944662,3278944663,DE
-3278944664,3278944665,AR
-3278944666,3278944667,US
-3278944668,3278944668,AR
-3278944669,3278944670,US
-3278944671,3278944671,CL
-3278944672,3278944672,DE
-3278944673,3278944673,PE
-3278944674,3278944674,DE
-3278944675,3278944677,US
+3278944662,3278944666,DE
+3278944667,3278944667,US
+3278944668,3278944677,DE
3278944678,3278944678,CA
-3278944679,3278944679,US
-3278944680,3278944680,CA
-3278944681,3278944683,US
-3278944684,3278944686,DE
-3278944687,3278944687,US
-3278944688,3278944688,AR
-3278944689,3278944693,US
-3278944694,3278944695,DE
-3278944696,3278944696,US
+3278944679,3278944680,DE
+3278944681,3278944681,US
+3278944682,3278944696,DE
3278944697,3278944697,CA
-3278944698,3278944706,US
-3278944707,3278944707,DE
-3278944708,3278944708,PE
+3278944698,3278944708,DE
3278944709,3278944709,US
-3278944710,3278944710,DE
-3278944711,3278944712,CL
-3278944713,3278944713,DE
-3278944714,3278944714,JM
+3278944710,3278944714,DE
3278944715,3278944715,CA
-3278944716,3278944716,DE
-3278944717,3278944718,US
-3278944719,3278944719,CA
-3278944720,3278944720,US
-3278944721,3278944721,CA
-3278944722,3278944727,US
-3278944728,3278944728,DE
-3278944729,3278944730,US
-3278944731,3278944731,DE
-3278944732,3278944734,US
-3278944735,3278944735,DE
-3278944736,3278944736,AR
-3278944737,3278944739,US
-3278944740,3278944740,CA
-3278944741,3278944741,DE
-3278944742,3278944743,US
-3278944744,3278944745,DE
-3278944746,3278944749,US
-3278944750,3278944750,DE
-3278944751,3278944751,US
-3278944752,3278944752,DE
-3278944753,3278944753,US
-3278944754,3278944754,BR
-3278944755,3278944755,AR
-3278944756,3278944758,US
-3278944759,3278944760,DE
-3278944761,3278944761,UY
-3278944762,3278944763,DE
-3278944764,3278944764,AR
-3278944765,3278944765,US
-3278944766,3278944767,DE
-3278944768,3278944771,DO
-3278944772,3278944819,US
-3278944820,3278944823,AR
-3278944824,3278944827,BR
-3278944828,3278944851,US
-3278944852,3278944855,CA
-3278944856,3278944863,US
-3278944864,3278944867,MX
-3278944868,3278944871,US
-3278944872,3278944875,DE
-3278944876,3278944887,US
-3278944888,3278944891,CO
-3278944892,3278944903,US
-3278944904,3278944907,BR
-3278944908,3278944919,US
-3278944920,3278944923,CO
-3278944924,3278944935,US
-3278944936,3278944939,BR
-3278944940,3278944947,US
-3278944948,3278944951,CO
-3278944952,3278944963,US
-3278944964,3278944971,CA
-3278944972,3278944975,US
-3278944976,3278944995,CA
-3278944996,3278944999,CO
-3278945000,3278945007,US
-3278945008,3278945011,CO
-3278945012,3278945015,PE
-3278945016,3278945023,US
-3278945024,3278945027,BR
-3278945028,3278945031,CW
-3278945032,3278945087,US
-3278945088,3278945091,BR
-3278945092,3278945099,US
-3278945100,3278945107,BR
-3278945108,3278945111,DO
-3278945112,3278945127,US
-3278945128,3278945131,AR
-3278945132,3278945135,BR
-3278945136,3278945151,US
-3278945152,3278945155,CA
-3278945156,3278945159,BR
-3278945160,3278945171,US
-3278945172,3278945175,AR
-3278945176,3278945191,US
-3278945192,3278945199,CA
-3278945200,3278945203,US
-3278945204,3278945207,AR
-3278945208,3278945227,US
-3278945228,3278945235,CA
-3278945236,3278945247,US
-3278945248,3278945255,CA
-3278945256,3278945267,US
-3278945268,3278945271,AR
-3278945272,3278945275,US
-3278945276,3278945279,CL
-3278945280,3278945283,CA
-3278945284,3278945299,US
-3278945300,3278945303,DE
-3278945304,3278945307,CO
-3278945308,3278945311,CA
-3278945312,3278945319,US
-3278945320,3278945323,MX
-3278945324,3278945327,AR
-3278945328,3278945331,CA
-3278945332,3278945335,US
-3278945336,3278945339,CA
-3278945340,3278945343,US
-3278945344,3278945347,BR
-3278945348,3278945363,US
-3278945364,3278945367,PR
-3278945368,3278945395,US
-3278945396,3278945399,AR
-3278945400,3278945403,MX
-3278945404,3278945427,US
-3278945428,3278945431,CA
-3278945432,3278945435,AR
-3278945436,3278945439,MX
-3278945440,3278945451,US
-3278945452,3278945455,BR
-3278945456,3278945459,US
-3278945460,3278945463,MX
-3278945464,3278945479,US
-3278945480,3278945483,CL
-3278945484,3278945491,BR
-3278945492,3278945503,US
-3278945504,3278945507,MX
-3278945508,3278945515,AR
-3278945516,3278945519,BR
-3278945520,3278945523,US
-3278945524,3278945527,CA
+3278944716,3278944726,DE
+3278944727,3278944727,US
+3278944728,3278944732,DE
+3278944733,3278944733,US
+3278944734,3278944747,DE
+3278944748,3278944748,US
+3278944749,3278944755,DE
+3278944756,3278944756,US
+3278944757,3278944983,DE
+3278944984,3278944987,CA
+3278944988,3278945063,DE
+3278945064,3278945067,US
+3278945068,3278945287,DE
+3278945288,3278945291,US
+3278945292,3278945315,DE
+3278945316,3278945319,US
+3278945320,3278945407,DE
+3278945408,3278945411,US
+3278945412,3278945527,DE
3278945528,3278945531,US
-3278945532,3278945535,CW
-3278945536,3278945539,AR
-3278945540,3278945579,US
-3278945580,3278945583,AR
-3278945584,3278945587,US
-3278945588,3278945591,DO
-3278945592,3278945659,US
-3278945660,3278945663,AR
-3278945664,3278945667,US
-3278945668,3278945671,UY
-3278945672,3278945675,DE
-3278945676,3278945687,US
-3278945688,3278945691,BR
-3278945692,3278945699,US
-3278945700,3278945703,AR
-3278945704,3278945715,US
-3278945716,3278945719,CO
-3278945720,3278945723,US
-3278945724,3278945727,AR
-3278945728,3278945743,US
-3278945744,3278945747,MX
-3278945748,3278945763,US
-3278945764,3278945767,MX
-3278945768,3278945771,CO
-3278945772,3278945779,US
-3278945780,3278945783,PE
-3278945784,3278945791,US
-3278945792,3278945794,DE
-3278945795,3278945795,CH
-3278945796,3278945796,DE
-3278945797,3278945797,BE
-3278945798,3278945798,NL
-3278945799,3278945799,LU
-3278945800,3278945800,DE
-3278945801,3278945801,NL
-3278945802,3278945802,PT
-3278945803,3278945803,GB
-3278945804,3278945804,DE
-3278945805,3278945805,DK
+3278945532,3278945571,DE
+3278945572,3278945575,US
+3278945576,3278945775,DE
+3278945776,3278945779,US
+3278945780,3278945805,DE
3278945806,3278945806,FR
-3278945807,3278945807,DE
-3278945808,3278945808,RU
-3278945809,3278945809,DE
-3278945810,3278945810,CH
-3278945811,3278945815,DE
-3278945816,3278945816,GB
-3278945817,3278945821,DE
-3278945822,3278945822,GR
-3278945823,3278945823,CH
-3278945824,3278945826,DE
-3278945827,3278945827,DK
-3278945828,3278945828,FR
-3278945829,3278945829,DE
-3278945830,3278945831,NL
-3278945832,3278945832,DE
-3278945833,3278945833,GB
+3278945807,3278945833,DE
3278945834,3278945834,NL
-3278945835,3278945835,CH
-3278945836,3278945840,DE
-3278945841,3278945841,CH
-3278945842,3278945844,DE
-3278945845,3278945845,ES
-3278945846,3278945846,CH
-3278945847,3278945847,DE
-3278945848,3278945848,GB
-3278945849,3278945849,DE
-3278945850,3278945850,NL
-3278945851,3278945852,DE
-3278945853,3278945853,CH
-3278945854,3278945854,FR
-3278945855,3278945855,DE
-3278945856,3278945856,DK
-3278945857,3278945858,DE
-3278945859,3278945859,GB
-3278945860,3278945860,FR
-3278945861,3278945861,IT
-3278945862,3278945862,BE
-3278945863,3278945863,ES
-3278945864,3278945864,IE
-3278945865,3278945866,DE
-3278945867,3278945867,FR
-3278945868,3278945868,NO
-3278945869,3278945870,DE
-3278945871,3278945871,IT
-3278945872,3278945872,FR
-3278945873,3278945873,DE
-3278945874,3278945874,IT
-3278945875,3278945875,ES
-3278945876,3278945876,NL
-3278945877,3278945877,SE
-3278945878,3278945878,FR
-3278945879,3278945880,DE
-3278945881,3278945881,BE
-3278945882,3278945886,DE
-3278945887,3278945888,IT
-3278945889,3278945890,DE
-3278945891,3278945891,CH
-3278945892,3278945892,BE
-3278945893,3278945893,DE
-3278945894,3278945894,AT
-3278945895,3278945895,ES
-3278945896,3278945896,GB
-3278945897,3278945897,IT
-3278945898,3278945898,ES
-3278945899,3278945899,DE
-3278945900,3278945900,FR
-3278945901,3278945904,DE
-3278945905,3278945905,PT
-3278945906,3278945906,FR
-3278945907,3278945907,GB
-3278945908,3278945908,DE
-3278945909,3278945909,FR
-3278945910,3278945910,DE
-3278945911,3278945911,NL
-3278945912,3278945917,DE
-3278945918,3278945918,IT
-3278945919,3278946049,DE
-3278946050,3278946054,US
-3278946055,3278946055,CA
-3278946056,3278946059,US
-3278946060,3278946060,CN
-3278946061,3278946061,US
-3278946062,3278946062,DE
-3278946063,3278946067,US
-3278946068,3278946068,DE
-3278946069,3278946084,US
-3278946085,3278946085,DE
-3278946086,3278946091,US
-3278946092,3278946092,DE
-3278946093,3278946108,US
-3278946109,3278946109,GB
-3278946110,3278946142,US
-3278946143,3278946143,DE
-3278946144,3278946166,US
-3278946167,3278946167,DE
-3278946168,3278946208,US
-3278946209,3278946213,DE
-3278946214,3278946214,US
-3278946215,3278946221,DE
-3278946222,3278946222,US
-3278946223,3278946224,DE
-3278946225,3278946225,US
-3278946226,3278946229,DE
-3278946230,3278946231,US
-3278946232,3278946239,DE
-3278946240,3278946263,US
-3278946264,3278946267,DE
-3278946268,3278946271,US
-3278946272,3278946275,SV
-3278946276,3278946279,DO
-3278946280,3278946283,DE
-3278946284,3278946287,US
-3278946288,3278946291,DE
-3278946292,3278946299,US
-3278946300,3278946303,DE
+3278945835,3278946074,DE
+3278946075,3278946075,US
+3278946076,3278946081,DE
+3278946082,3278946082,US
+3278946083,3278946093,DE
+3278946094,3278946094,US
+3278946095,3278946147,DE
+3278946148,3278946148,US
+3278946149,3278946158,DE
+3278946159,3278946159,US
+3278946160,3278946167,DE
+3278946168,3278946168,US
+3278946169,3278946303,DE
3278946304,3278954495,LB
3278954496,3278962687,RU
3278962688,3279028223,CZ
3279028224,3279028735,PL
3279028736,3279029247,RU
-3279029248,3279030271,UA
+3279029760,3279030271,UA
3279030272,3279030783,RU
3279030784,3279031295,DE
3279031296,3279031807,NL
-3279031808,3279032319,RO
3279032320,3279032831,HU
3279032832,3279033343,FR
3279033344,3279033855,RU
@@ -132127,284 +67786,74 @@
3279035392,3279035903,PS
3279035904,3279036415,UA
3279036416,3279044607,LV
-3279044608,3279050455,FR
-3279050456,3279050463,A2
-3279050464,3279052799,FR
+3279044608,3279052799,FR
3279052800,3279053311,UA
3279053312,3279053823,DE
3279053824,3279054335,NL
3279054336,3279054847,GB
3279054848,3279055359,RU
3279055360,3279055871,SA
-3279055872,3279056383,TR
-3279056384,3279056895,GB
3279056896,3279057151,RU
3279057152,3279057407,GB
3279057408,3279057919,FR
-3279057920,3279058431,RO
-3279058432,3279058943,RU
3279058944,3279059455,UA
3279059456,3279060479,RU
3279060480,3279060991,PL
3279060992,3279069183,UA
3279069184,3279077375,PL
-3279077376,3279078399,ES
-3279078400,3279078655,IT
-3279078656,3279078911,FR
-3279078912,3279084543,ES
-3279084544,3279085567,IT
+3279077376,3279085567,ES
3279085568,3279089663,NL
3279089664,3279093759,KG
-3279093760,3279103103,FR
-3279103104,3279103135,GB
-3279103136,3279123455,FR
-3279123456,3279123711,RE
-3279123712,3279159295,FR
+3279093760,3279123455,FR
+3279123456,3279123967,RE
+3279123968,3279159295,FR
3279159296,3279290367,PL
-3279290368,3279291391,NL
-3279291392,3279291647,GB
-3279291648,3279294463,NL
-3279294464,3279294719,EU
-3279294720,3279294975,IE
-3279294976,3279295231,SE
-3279295232,3279295487,ES
-3279295488,3279295743,PT
-3279295744,3279295999,IL
+3279292416,3279294463,NL
3279296000,3279296511,ZA
-3279296512,3279297279,ES
-3279297280,3279297535,ZA
-3279297536,3279298047,SE
3279298048,3279298559,ZA
-3279298560,3279305471,DE
-3279305472,3279305487,EU
-3279305488,3279305503,DE
-3279305504,3279305535,GB
-3279305536,3279305631,DE
-3279305632,3279305663,GB
-3279305664,3279305727,ES
-3279305728,3279306751,DE
-3279306752,3279310847,FR
+3279301632,3279304703,DE
3279310848,3279311871,DE
-3279311872,3279312895,EU
-3279312896,3279313415,DE
-3279313416,3279313423,EU
-3279313424,3279313919,DE
-3279313920,3279314943,GB
-3279314944,3279315711,CH
-3279315712,3279315967,BE
-3279315968,3279316223,DE
-3279316224,3279316479,BE
-3279316480,3279317759,IT
-3279317760,3279317887,DE
-3279317888,3279317951,IT
-3279317952,3279317967,DE
-3279317968,3279317983,IT
-3279317984,3279318015,NL
-3279318016,3279318271,DE
-3279318272,3279318527,GB
-3279318528,3279318559,CZ
-3279318560,3279318655,FR
-3279318656,3279318687,CZ
-3279318688,3279318719,FR
-3279318720,3279318751,ZA
-3279318752,3279318783,GB
-3279318784,3279319039,NL
-3279319040,3279320063,AT
+3279319296,3279319423,AT
3279320064,3279321087,FR
-3279321088,3279322623,DK
-3279322624,3279322663,NL
-3279322664,3279322671,AT
-3279322672,3279322687,GB
-3279322688,3279322879,DE
-3279322880,3279322975,NL
-3279322976,3279323071,DE
-3279323072,3279330079,GB
-3279330080,3279330111,DK
-3279330112,3279330815,GB
-3279330816,3279331071,EU
-3279331072,3279335295,GB
-3279335296,3279335423,BE
-3279335424,3279339519,GB
-3279339520,3279340031,ES
-3279340032,3279340543,IT
-3279340544,3279340671,FR
-3279340672,3279340799,EU
-3279340800,3279341055,FR
-3279341056,3279341567,IT
-3279341568,3279341823,SE
-3279341824,3279342079,ZA
-3279342080,3279342335,IT
-3279342336,3279342591,ZA
-3279342592,3279342847,SE
-3279342848,3279343103,HR
-3279343104,3279343359,SI
-3279343360,3279343615,ZA
-3279343616,3279345151,BE
-3279345152,3279345663,SE
-3279345664,3279346943,GB
-3279346944,3279347711,FR
-3279347712,3279348223,SE
-3279348224,3279348735,IT
-3279348736,3279348991,GB
-3279348992,3279349247,ES
-3279349248,3279349503,IT
-3279349504,3279349759,FR
-3279349760,3279351039,DE
-3279351040,3279351295,FR
-3279351296,3279351807,GB
-3279351808,3279352319,DK
-3279352320,3279352575,GB
-3279352576,3279352831,BE
-3279352832,3279352855,SE
-3279352856,3279353087,EU
-3279353088,3279353343,GB
-3279353344,3279354879,DK
-3279354880,3279355647,AT
-3279355648,3279355903,BE
-3279355904,3279356039,EU
-3279356040,3279356047,NO
-3279356048,3279356063,EU
-3279356064,3279356127,NO
-3279356128,3279356159,EU
-3279356160,3279356415,NO
-3279356416,3279356927,EU
-3279356928,3279357439,NO
-3279357440,3279372287,EU
-3279372288,3279372799,FI
-3279372800,3279373055,EU
-3279373056,3279375359,FI
-3279375360,3279380479,EU
-3279380480,3279380991,CH
-3279380992,3279382783,EU
-3279382784,3279383807,CH
-3279383808,3279384063,EU
-3279384064,3279385343,CH
-3279385344,3279386367,EU
-3279386368,3279386495,CH
-3279386496,3279387135,EU
-3279387136,3279387391,CH
-3279387392,3279388671,EU
-3279388672,3279388927,GR
-3279388928,3279389183,EU
-3279389184,3279389243,GR
-3279389244,3279389247,EU
-3279389248,3279389255,GR
-3279389256,3279389259,EU
-3279389260,3279389275,GR
-3279389276,3279389279,EU
-3279389280,3279389359,GR
-3279389360,3279389363,EU
-3279389364,3279389379,GR
-3279389380,3279389383,EU
-3279389384,3279389439,GR
-3279389440,3279389711,EU
-3279389712,3279389727,GR
-3279389728,3279390015,EU
-3279390016,3279390143,GR
-3279390144,3279393791,EU
-3279393792,3279394047,GR
-3279394048,3279394303,EU
-3279394304,3279394559,GR
-3279394560,3279402751,EU
-3279402752,3279403007,CZ
-3279403008,3279403263,EU
-3279403264,3279403903,CZ
-3279403904,3279404287,EU
-3279404288,3279404415,CZ
-3279404416,3279404799,EU
-3279404800,3279405055,CZ
-3279405056,3279421439,EU
+3279327232,3279329279,GB
+3279331328,3279332351,GB
+3279337472,3279339519,GB
+3279343872,3279344127,BE
+3279353856,3279354879,DK
+3279373312,3279374335,FI
+3279374592,3279375359,FI
+3279388672,3279396863,GR
3279421440,3279486975,IT
3279486976,3279552511,NL
3279552512,3279560703,LV
3279560704,3279568895,GB
3279568896,3279577087,IT
3279577088,3279585279,BE
-3279585280,3279585919,DE
-3279585920,3279585935,GB
-3279585936,3279585951,NL
-3279585952,3279585991,DE
-3279585992,3279585999,GB
-3279586000,3279586303,DE
-3279586304,3279586559,GB
-3279586560,3279588095,DE
-3279588096,3279588159,GB
-3279588160,3279588191,DE
-3279588192,3279588255,GB
-3279588256,3279588287,DE
-3279588288,3279588607,GB
-3279588608,3279588863,DE
-3279588864,3279589375,GB
-3279589376,3279589887,DE
-3279589888,3279590399,GB
-3279590400,3279590655,DE
-3279590656,3279590911,GB
-3279590912,3279590935,DE
-3279590936,3279591167,GB
-3279591168,3279591423,DE
-3279591424,3279591679,GB
-3279591680,3279591935,DE
-3279591936,3279592959,GB
-3279592960,3279593215,DE
-3279593216,3279593247,GB
-3279593248,3279593267,DE
-3279593268,3279593271,GB
-3279593272,3279593275,DE
-3279593276,3279593407,GB
+3279585280,3279587583,GB
+3279587584,3279588095,DE
+3279588096,3279590911,GB
+3279590912,3279591167,DE
+3279591168,3279593407,GB
3279593408,3279593440,DE
-3279593441,3279593471,GB
-3279593472,3279593503,DE
-3279593504,3279593535,GB
-3279593536,3279593567,DE
-3279593568,3279593599,GB
-3279593600,3279594495,DE
-3279594496,3279595775,GB
-3279595776,3279595839,DE
-3279595840,3279595903,GB
-3279595904,3279595999,DE
-3279596000,3279596023,GB
-3279596024,3279596031,DE
-3279596032,3279596543,GB
+3279593441,3279593599,GB
+3279593600,3279593727,DE
+3279593728,3279596543,GB
3279596544,3279597311,DE
3279597312,3279598591,GB
3279598592,3279599615,DE
-3279599616,3279600383,GB
-3279600384,3279600479,DE
-3279600480,3279600487,GB
-3279600488,3279600639,DE
-3279600640,3279601663,GB
+3279599616,3279601663,GB
3279601664,3279609855,CZ
3279609856,3279618047,RU
3279618048,3279683583,UA
-3279683584,3279688191,DE
-3279688192,3279688447,EU
-3279688448,3279723215,DE
-3279723216,3279723223,A2
-3279723224,3279727615,DE
-3279727616,3279727647,GB
-3279727648,3279744391,DE
-3279744392,3279744399,PL
-3279744400,3279752959,DE
-3279752960,3279753215,CH
-3279753216,3279789439,DE
-3279789440,3279789455,PL
-3279789456,3279837919,DE
-3279837920,3279837927,RU
-3279837928,3279895295,DE
-3279895296,3279895551,EU
-3279895552,3279897583,DE
-3279897584,3279897591,GB
-3279897592,3279946751,DE
+3279683584,3279946751,DE
3279946752,3279947775,SE
3279947776,3279948799,NL
-3279948800,3279949823,GB
3279949824,3279950847,UA
3279950848,3279951871,DE
-3279951872,3279952895,IQ
3279952896,3279953919,PL
3279953920,3279955967,TR
3279955968,3279958015,DE
-3279958016,3279972351,RU
+3279958016,3279970303,RU
3279972352,3279974399,AT
3279974400,3279976447,PL
3279976448,3279978495,RU
@@ -132437,7 +67886,6 @@
3279985664,3279985919,DE
3279985920,3279986687,RU
3279986688,3279987199,NL
-3279987200,3279987711,RU
3279987712,3279988223,RO
3279988224,3279988735,AM
3279988736,3279989247,RO
@@ -132445,7 +67893,6 @@
3279989760,3279990271,PL
3279990272,3279990783,DK
3279990784,3279991295,IL
-3279991296,3279991807,UA
3279991808,3279992319,PL
3279992320,3279992831,UA
3279992832,3279993855,NL
@@ -132460,81 +67907,12 @@
3280005632,3280006143,IT
3280006144,3280006655,DK
3280006656,3280007167,GB
-3280007168,3280007679,SE
3280007680,3280008191,PL
3280008192,3280009215,RU
3280009216,3280009727,UA
3280009728,3280010239,GB
3280010240,3280010751,UA
-3280010752,3280011263,TR
-3280011264,3280011327,DE
-3280011328,3280011391,NL
-3280011392,3280011407,EU
-3280011408,3280011415,GB
-3280011416,3280011551,EU
-3280011552,3280011567,GB
-3280011568,3280011647,EU
-3280011648,3280011775,IT
-3280011776,3280011783,NL
-3280011784,3280011791,BE
-3280011792,3280011903,EU
-3280011904,3280011951,BE
-3280011952,3280015103,EU
-3280015104,3280015359,GB
-3280015360,3280015871,EU
-3280015872,3280016383,GB
-3280016384,3280016447,EU
-3280016448,3280016463,BE
-3280016464,3280016543,EU
-3280016544,3280016559,BE
-3280016560,3280016575,GR
-3280016576,3280016607,NO
-3280016608,3280016623,CH
-3280016624,3280016959,EU
-3280016960,3280016991,BE
-3280016992,3280017023,FR
-3280017024,3280017055,IT
-3280017056,3280017087,EU
-3280017088,3280017151,IE
-3280017152,3280017919,EU
-3280017920,3280018431,IT
-3280018432,3280019455,GB
-3280019456,3280019711,EU
-3280019712,3280020479,CH
-3280020480,3280020735,IE
-3280020736,3280020991,BE
-3280020992,3280021087,GB
-3280021088,3280021119,EU
-3280021120,3280021183,NL
-3280021184,3280021247,EU
-3280021248,3280021503,CH
-3280021504,3280021759,EU
-3280021760,3280021823,BE
-3280021824,3280022783,EU
-3280022784,3280023039,IT
-3280023040,3280023551,EU
3280023552,3280024575,IT
-3280024576,3280024831,SE
-3280024832,3280027647,EU
-3280027648,3280027903,CH
-3280027904,3280028159,EU
-3280028160,3280028415,IT
-3280028416,3280028671,BE
-3280028672,3280030207,EU
-3280030208,3280030463,CH
-3280030464,3280031743,EU
-3280031744,3280031999,IE
-3280032000,3280032127,EU
-3280032128,3280032255,CH
-3280032256,3280035327,EU
-3280035328,3280035583,CH
-3280035584,3280036607,EU
-3280036608,3280036863,CH
-3280036864,3280037887,EU
-3280037888,3280038399,CH
-3280038400,3280041471,EU
-3280041472,3280041727,CH
-3280041728,3280076799,EU
3280076800,3280084991,GB
3280084992,3280093183,BA
3280093184,3280109567,GR
@@ -132547,15 +67925,13 @@
3280126976,3280127231,CH
3280127232,3280127487,PL
3280127488,3280127743,AT
-3280127744,3280127999,NL
3280128000,3280128255,SE
3280128256,3280128511,GB
3280128512,3280129023,HU
-3280129024,3280129279,RU
3280129280,3280129535,LV
3280129536,3280129791,SA
3280129792,3280130047,FR
-3280130048,3280130559,RU
+3280130304,3280130559,RU
3280130560,3280130815,GB
3280130816,3280131071,IS
3280131072,3280131327,PL
@@ -132571,9 +67947,7 @@
3280133632,3280133887,FR
3280133888,3280134143,NL
3280134144,3280142335,IT
-3280142336,3280144815,RU
-3280144816,3280144823,RO
-3280144824,3280207871,RU
+3280142336,3280207871,RU
3280207872,3280273407,FR
3280273408,3280338943,RU
3280338944,3280347135,GB
@@ -132584,13 +67958,7 @@
3280381952,3280383999,NL
3280384000,3280386047,IT
3280386048,3280388095,SA
-3280388096,3280390719,GB
-3280390720,3280390751,FR
-3280390752,3280392703,GB
-3280392704,3280392831,FR
-3280392832,3280395263,GB
-3280395264,3280395519,FR
-3280395520,3280396287,GB
+3280388096,3280396287,GB
3280396288,3280404479,FI
3280404480,3280437247,IT
3280437248,3280453631,DE
@@ -132604,7 +67972,6 @@
3280460800,3280462847,DE
3280462848,3280463871,PL
3280463872,3280466943,RU
-3280466944,3280467967,UA
3280467968,3280468991,ES
3280470016,3280535551,PL
3280535552,3280568319,GB
@@ -132634,9 +68001,7 @@
3280582400,3280582655,DK
3280582656,3280582911,FR
3280582912,3280583167,UA
-3280583168,3280583423,RO
3280583424,3280583679,RU
-3280583680,3280583935,PS
3280583936,3280584191,PL
3280584192,3280584447,KW
3280584448,3280584703,DE
@@ -132646,7 +68011,6 @@
3280586240,3280586751,DE
3280586752,3280587263,RU
3280587264,3280587775,UA
-3280587776,3280588287,RO
3280588288,3280588799,UA
3280588800,3280589311,PL
3280589312,3280590335,DE
@@ -132658,8 +68022,7 @@
3280592896,3280593407,DE
3280593408,3280593919,UA
3280593920,3280594431,LU
-3280594432,3280594687,NL
-3280594688,3280594943,EU
+3280594432,3280594943,NL
3280594944,3280595455,UA
3280595456,3280595967,DE
3280595968,3280596479,DK
@@ -132677,9 +68040,7 @@
3280609280,3280617471,DE
3280617472,3280625663,UA
3280625664,3280633855,MD
-3280633856,3280635935,BG
-3280635936,3280635943,MK
-3280635944,3280642047,BG
+3280633856,3280642047,BG
3280642048,3280650239,UA
3280650240,3280650495,RO
3280650496,3280650751,UA
@@ -132703,31 +68064,14 @@
3280655872,3280656127,RO
3280656128,3280656639,CH
3280656640,3280657407,UA
-3280657408,3280657663,RU
3280657664,3280657919,SE
3280657920,3280658175,RO
3280658176,3280658431,DE
3280658432,3280660479,MT
3280660480,3280662527,RU
-3280662528,3280662543,IN
-3280662544,3280662559,DE
-3280662560,3280662607,IT
-3280662608,3280662655,DE
-3280662656,3280662687,AR
-3280662688,3280662783,DE
-3280662784,3280663295,CZ
-3280663296,3280663327,AR
-3280663328,3280663391,DE
-3280663392,3280663407,HK
-3280663408,3280664575,DE
-3280664576,3280664703,GB
-3280664704,3280664831,IN
-3280664832,3280665087,JO
-3280665088,3280665855,US
-3280665856,3280666623,DE
+3280662528,3280666623,DE
3280666624,3280732159,NO
3280732160,3280764927,DE
-3280764928,3280765951,TJ
3280765952,3280766975,DK
3280766976,3280767999,AT
3280768000,3280769023,FR
@@ -132750,7 +68094,7 @@
3280785408,3280787455,DE
3280787456,3280788479,GB
3280788480,3280789503,PL
-3280789504,3280791551,UA
+3280790528,3280791551,UA
3280791552,3280792575,DE
3280792576,3280793599,PL
3280793600,3280794623,NL
@@ -132759,265 +68103,19 @@
3280796672,3280797695,CZ
3280797696,3280863231,CH
3280863232,3280928767,TR
-3280928768,3280928831,RU
-3280928832,3280930303,GB
-3280930304,3280930559,DE
-3280930560,3280930959,GB
-3280930960,3280930975,DE
-3280930976,3280933175,GB
-3280933176,3280933183,DE
-3280933184,3280933359,GB
-3280933360,3280933375,DE
-3280933376,3280933631,GB
-3280933632,3280934399,DE
-3280934400,3280936191,GB
-3280936192,3280936447,DE
-3280936448,3280938767,GB
-3280938768,3280938783,DE
-3280938784,3280938799,GB
-3280938800,3280938815,DE
-3280938816,3280950655,GB
-3280950656,3280950687,DE
-3280950688,3280951039,GB
-3280951040,3280951295,DE
-3280951296,3280951807,GB
-3280951808,3280952323,DE
-3280952324,3280952327,GB
-3280952328,3280952335,DE
-3280952336,3280952351,GB
-3280952352,3280952375,DE
-3280952376,3280952383,GB
-3280952384,3280952455,DE
-3280952456,3280952463,GB
-3280952464,3280952575,DE
-3280952576,3280952615,GB
-3280952616,3280952623,DE
-3280952624,3280952631,GB
-3280952632,3280952643,DE
-3280952644,3280952671,GB
-3280952672,3280952687,DE
-3280952688,3280952695,GB
-3280952696,3280952767,DE
-3280952768,3280952783,GB
-3280952784,3280952791,DE
-3280952792,3280952799,GB
-3280952800,3280952831,DE
-3280952832,3280955407,GB
-3280955408,3280955419,DE
-3280955420,3280955503,GB
-3280955504,3280955646,DE
-3280955647,3280955647,GB
-3280955648,3280955703,DE
-3280955704,3280955707,GB
-3280955708,3280955791,DE
-3280955792,3280955799,GB
-3280955800,3280955999,DE
-3280956000,3280956007,GB
-3280956008,3280956015,DE
-3280956016,3280956023,GB
-3280956024,3280956039,DE
-3280956040,3280956047,GB
-3280956048,3280956095,DE
-3280956096,3280956103,GB
-3280956104,3280956143,DE
-3280956144,3280956415,GB
-3280956416,3280956927,DE
-3280956928,3280957255,GB
-3280957256,3280957263,DE
-3280957264,3280957311,GB
-3280957312,3280957503,DE
-3280957504,3280957831,GB
-3280957832,3280957839,DE
-3280957840,3280958463,GB
-3280958464,3280958807,DE
-3280958808,3280958863,GB
-3280958864,3280958871,DE
-3280958872,3280958879,GB
-3280958880,3280958911,DE
-3280958912,3280958919,GB
-3280958920,3280959111,DE
-3280959112,3280959119,GB
-3280959120,3280959279,DE
-3280959280,3280959487,GB
-3280959488,3280959775,DE
-3280959776,3280960015,GB
-3280960016,3280960023,DE
-3280960024,3280960031,GB
-3280960032,3280960039,DE
-3280960040,3280962815,GB
-3280962816,3280962831,DE
-3280962832,3280963343,GB
-3280963344,3280963367,DE
-3280963368,3280963375,GB
-3280963376,3280963391,DE
-3280963392,3280963407,GB
-3280963408,3280963423,DE
-3280963424,3280963487,GB
-3280963488,3280963495,DE
-3280963496,3280963519,GB
-3280963520,3280963527,DE
-3280963528,3280963535,GB
-3280963536,3280963551,DE
-3280963552,3280968447,GB
-3280968448,3280968703,DE
-3280968704,3280970239,GB
-3280970240,3280970495,DE
-3280970496,3280971039,GB
-3280971040,3280971055,DE
-3280971056,3280974079,GB
-3280974080,3280974335,DE
-3280974336,3280974399,GB
-3280974400,3280974415,DE
-3280974416,3280974591,GB
-3280974592,3280974847,DE
-3280974848,3280976911,GB
-3280976912,3280976927,DE
-3280976928,3280976935,GB
-3280976936,3280976951,DE
-3280976952,3280976991,GB
-3280976992,3280977023,DE
-3280977024,3280977031,GB
-3280977032,3280977111,DE
-3280977112,3280977119,GB
-3280977120,3280977407,DE
-3280977408,3280977951,GB
-3280977952,3280977955,DE
-3280977956,3280977999,GB
-3280978000,3280978007,DE
-3280978008,3280978191,GB
-3280978192,3280978195,DE
-3280978196,3280978231,GB
-3280978232,3280978239,DE
-3280978240,3280978335,GB
-3280978336,3280978367,DE
-3280978368,3280978383,GB
-3280978384,3280978399,DE
-3280978400,3280978495,GB
-3280978496,3280978499,DE
-3280978500,3280978623,GB
-3280978624,3280978631,DE
-3280978632,3280979023,GB
-3280979024,3280979039,DE
-3280979040,3280979103,GB
-3280979104,3280979111,DE
-3280979112,3280979151,GB
-3280979152,3280979159,DE
-3280979160,3280979167,GB
-3280979168,3280979183,DE
-3280979184,3280979555,GB
-3280979556,3280979559,DE
-3280979560,3280979576,GB
-3280979577,3280979577,DE
-3280979578,3280979839,GB
-3280979840,3280979975,DE
-3280979976,3280980080,GB
-3280980081,3280980081,DE
-3280980082,3280980351,GB
-3280980352,3280980367,DE
-3280980368,3280980423,GB
-3280980424,3280980431,DE
-3280980432,3280980471,GB
-3280980472,3280980479,DE
-3280980480,3280981039,GB
-3280981040,3280981055,DE
-3280981056,3280981215,GB
-3280981216,3280981231,DE
-3280981232,3280981487,GB
-3280981488,3280981503,DE
-3280981504,3280981607,GB
-3280981608,3280981615,DE
-3280981616,3280981839,GB
-3280981840,3280981847,DE
-3280981848,3280981983,GB
-3280981984,3280981999,DE
-3280982000,3280982015,GB
-3280982016,3280982023,DE
-3280982024,3280982255,GB
-3280982256,3280982263,DE
-3280982264,3280982607,GB
-3280982608,3280982623,DE
-3280982624,3280982655,GB
-3280982656,3280982671,DE
-3280982672,3280982951,GB
-3280982952,3280982959,DE
-3280982960,3280983112,GB
-3280983113,3280983113,DE
-3280983114,3280983119,GB
-3280983120,3280983167,DE
-3280983168,3280983359,GB
-3280983360,3280983375,DE
-3280983376,3280983423,GB
-3280983424,3280983431,DE
-3280983432,3280983887,GB
-3280983888,3280983895,DE
-3280983896,3280984495,GB
-3280984496,3280984503,DE
-3280984504,3280985087,GB
-3280985088,3280985343,CH
-3280985344,3280985639,GB
-3280985640,3280985647,DE
-3280985648,3280986263,GB
-3280986264,3280986267,DE
-3280986268,3280987135,GB
-3280987136,3280987391,CH
-3280987392,3280987647,NL
-3280987648,3280987983,GB
-3280987984,3280987999,DE
-3280988000,3280988303,GB
-3280988304,3280988311,DE
-3280988312,3280988383,GB
-3280988384,3280988391,DE
-3280988392,3280988399,GB
-3280988400,3280988431,DE
-3280988432,3280988815,GB
-3280988816,3280988831,DE
-3280988832,3280988855,GB
-3280988856,3280988863,DE
-3280988864,3280989015,GB
-3280989016,3280989039,DE
-3280989040,3280989063,GB
-3280989064,3280989067,DE
-3280989068,3280989335,GB
-3280989336,3280989343,DE
-3280989344,3280989375,GB
-3280989376,3280989391,DE
-3280989392,3280989463,GB
-3280989464,3280989471,DE
-3280989472,3280989535,GB
-3280989536,3280989551,DE
-3280989552,3280989631,GB
-3280989632,3280989647,DE
-3280989648,3280989820,GB
-3280989821,3280989821,DE
-3280989822,3280990047,GB
-3280990048,3280990063,DE
-3280990064,3280990191,GB
-3280990192,3280990223,DE
-3280990224,3280990231,GB
-3280990232,3280990239,DE
-3280990240,3280990271,GB
-3280990272,3280990287,DE
-3280990288,3280990479,GB
-3280990480,3280990487,DE
-3280990488,3280990575,GB
-3280990576,3280990591,DE
-3280990592,3280990703,GB
-3280990704,3280990719,DE
-3280990720,3280990863,GB
-3280990864,3280990871,DE
-3280990872,3280991231,GB
+3280928768,3280928831,GB
+3280928832,3280928847,RU
+3280928848,3280928855,GB
+3280928856,3280928863,RU
+3280928864,3280955707,GB
+3280955708,3280955711,DE
+3280955712,3280958919,GB
+3280958920,3280958927,DE
+3280958928,3280963375,GB
+3280963376,3280963383,DE
+3280963384,3280991231,GB
3280991232,3280991743,DE
-3280991744,3280992231,GB
-3280992232,3280992239,DE
-3280992240,3280992399,GB
-3280992400,3280992415,DE
-3280992416,3280992799,GB
-3280992800,3280992815,DE
-3280992816,3280992847,GB
-3280992848,3280992863,DE
-3280992864,3280993535,GB
-3280993536,3280993791,DE
-3280993792,3280994559,GB
+3280991744,3280994559,GB
3280994560,3280994815,RU
3280994816,3280995071,NL
3280995072,3280995327,DE
@@ -133041,7 +68139,6 @@
3281000448,3281000703,FR
3281000704,3281000959,UA
3281000960,3281001215,SI
-3281001216,3281001471,RO
3281001472,3281001727,UA
3281001728,3281001983,RU
3281001984,3281002239,CH
@@ -133050,45 +68147,17 @@
3281010688,3281018879,BE
3281018880,3281027071,CZ
3281027072,3281027327,GB
-3281027328,3281027583,EU
3281027584,3281027615,GB
-3281027616,3281027631,EU
3281027632,3281027679,GB
-3281027680,3281027695,EU
3281027696,3281027743,GB
-3281027744,3281027775,EU
3281027776,3281027807,GB
-3281027808,3281027839,EU
3281027840,3281027903,GB
-3281027904,3281028063,EU
3281028064,3281028159,GB
-3281028160,3281028991,EU
3281028992,3281029055,GB
-3281029056,3281030399,EU
3281030400,3281035263,GB
3281035264,3281043455,CH
3281043456,3281059839,RU
-3281059840,3281062911,DE
-3281062912,3281063167,EU
-3281063168,3281068543,DE
-3281068544,3281068647,US
-3281068648,3281068655,DE
-3281068656,3281068751,US
-3281068752,3281068759,DE
-3281068760,3281068799,US
-3281068800,3281074671,DE
-3281074672,3281074679,ES
-3281074680,3281103935,DE
-3281103936,3281103943,AT
-3281103944,3281104127,DE
-3281104128,3281104383,FR
-3281104384,3281116927,DE
-3281116928,3281117007,PL
-3281117008,3281117023,DE
-3281117024,3281117119,PL
-3281117120,3281117135,DE
-3281117136,3281117183,PL
-3281117184,3281125375,DE
+3281059840,3281125375,DE
3281125376,3281133567,SK
3281133568,3281141759,IR
3281141760,3281149951,RU
@@ -133102,7 +68171,6 @@
3281338368,3281338623,PL
3281338624,3281338879,SA
3281338880,3281339135,FR
-3281339136,3281339391,RO
3281339392,3281339647,PL
3281339648,3281339903,GB
3281339904,3281340159,UA
@@ -133123,7 +68191,6 @@
3281344768,3281345279,RU
3281345280,3281345535,SA
3281345536,3281345791,CH
-3281345792,3281346047,RU
3281346048,3281346303,SI
3281346304,3281346559,PL
3281346560,3281346815,UA
@@ -133146,17 +68213,14 @@
3281351680,3281351935,TR
3281351936,3281352191,UA
3281352192,3281352447,PL
-3281352448,3281352703,RO
-3281352704,3281352959,EU
+3281352704,3281352959,DE
3281352960,3281353215,GB
3281353216,3281353471,DE
3281353472,3281353727,SE
3281353728,3281353983,PL
3281353984,3281354239,UA
3281354240,3281354751,GB
-3281354752,3281359071,SE
-3281359072,3281359103,CW
-3281359104,3281371135,SE
+3281354752,3281371135,SE
3281371136,3281372159,RS
3281372160,3281372671,RU
3281372672,3281373183,PL
@@ -133167,30 +68231,12 @@
3281383424,3281385471,AT
3281385472,3281387519,BG
3281387520,3281453055,PL
-3281453056,3281470975,RU
-3281470976,3281471231,UZ
-3281471232,3281518591,RU
-3281518592,3281578431,GB
-3281578432,3281578447,IE
-3281578448,3281640959,GB
-3281640960,3281640983,SE
-3281640984,3281641023,GB
-3281641024,3281641039,SE
-3281641040,3281641087,GB
-3281641088,3281641119,SE
-3281641120,3281649663,GB
+3281453056,3281518591,RU
+3281518592,3281649663,GB
3281649664,3281715199,FR
3281715200,3281780735,TR
-3281780736,3281836543,FI
-3281836544,3281836799,AX
-3281836800,3281846271,FI
-3281846272,3281868271,GB
-3281868272,3281868287,FR
-3281868288,3281880191,GB
-3281880192,3281880223,FR
-3281880224,3281886207,GB
-3281886208,3281886335,FR
-3281886336,3281911807,GB
+3281780736,3281846271,FI
+3281846272,3281911807,GB
3281911808,3281919999,UZ
3281920000,3281928191,DE
3281928192,3281944575,MT
@@ -133199,14 +68245,13 @@
3281969152,3281969663,RU
3281969664,3281970175,PL
3281970176,3281970687,RU
-3281970688,3281971199,LI
+3281970688,3281971199,CH
3281971200,3281971711,RU
3281971712,3281972223,RO
3281972224,3281972735,DE
3281972736,3281973247,RU
3281973248,3281973759,FR
3281973760,3281974271,DK
-3281974272,3281974783,RU
3281974784,3281975295,PL
3281975296,3281976319,RU
3281976320,3281976831,DE
@@ -133225,7 +68270,6 @@
3282088448,3282089471,PL
3282089472,3282089983,SK
3282089984,3282090495,PL
-3282090496,3282091007,GB
3282091008,3282091519,FR
3282091520,3282092031,CH
3282092032,3282093055,UA
@@ -133242,16 +68286,12 @@
3282104320,3282105343,IL
3282105344,3282106367,RU
3282106368,3282107391,DE
-3282107392,3282108415,EU
-3282108416,3282119423,RU
-3282119424,3282119679,KZ
-3282119680,3282149455,RU
-3282149456,3282149471,KG
-3282149472,3282173951,RU
+3282107392,3282108415,NL
+3282108416,3282173951,RU
3282173952,3282174463,UA
3282174464,3282174975,GB
3282174976,3282175487,DE
-3282175488,3282177023,RU
+3282176000,3282177023,RU
3282177024,3282177535,GB
3282177536,3282178047,KZ
3282178048,3282178559,PL
@@ -133279,53 +68319,10 @@
3282206720,3282223103,CH
3282223104,3282231295,BE
3282231296,3282239487,DE
-3282239488,3282284559,SE
-3282284560,3282284579,FI
-3282284580,3282284591,SE
-3282284592,3282284595,FI
-3282284596,3282284599,SE
-3282284600,3282284603,FI
-3282284604,3282284735,SE
-3282284736,3282284783,FI
-3282284784,3282287615,SE
-3282287616,3282287871,FI
-3282287872,3282305023,SE
+3282239488,3282305023,SE
3282305024,3282370559,PL
-3282370560,3282388175,FI
-3282388176,3282388191,SE
-3282388192,3282390015,FI
-3282390016,3282390271,NL
-3282390272,3282416383,FI
-3282416384,3282416511,RU
-3282416512,3282429279,FI
-3282429280,3282429311,SE
-3282429312,3282429343,NO
-3282429344,3282436095,FI
-3282436096,3282444159,GB
-3282444160,3282444223,US
-3282444224,3282449023,GB
-3282449024,3282449151,NL
-3282449152,3282452479,GB
-3282452480,3282452735,DE
-3282452736,3282456023,GB
-3282456024,3282456031,IT
-3282456032,3282461439,GB
-3282461440,3282461695,CH
-3282461696,3282464767,GB
-3282464768,3282465023,SE
-3282465024,3282465279,DE
-3282465280,3282465535,IT
-3282465536,3282466047,GB
-3282466048,3282466111,US
-3282466112,3282466643,GB
-3282466644,3282466655,IT
-3282466656,3282466687,GB
-3282466688,3282466727,IT
-3282466728,3282466815,GB
-3282466816,3282467071,US
-3282467072,3282467327,GB
-3282467328,3282467359,DE
-3282467360,3282477055,GB
+3282370560,3282436095,FI
+3282436096,3282477055,GB
3282477056,3282485247,RU
3282485248,3282493439,GI
3282493440,3282501631,NG
@@ -133347,9 +68344,7 @@
3282739712,3282739967,FR
3282739968,3282740223,IR
3282740224,3282740479,FR
-3282740480,3282740735,AT
3282740736,3282740991,BG
-3282740992,3282741247,DE
3282741248,3282741503,PT
3282741504,3282741759,GB
3282741760,3282742015,ES
@@ -133374,18 +68369,12 @@
3282746880,3282747135,RO
3282747136,3282747391,PL
3282747392,3282763775,RU
-3282763776,3282772991,GB
-3282772992,3282773247,EU
-3282773248,3282844855,GB
-3282844856,3282844863,A2
-3282844864,3282960383,GB
+3282763776,3282960383,GB
3282960384,3283091455,TR
3283091456,3283111935,CH
3283111936,3283113471,LI
3283113472,3283156991,CH
-3283156992,3283158215,DE
-3283158216,3283158219,EE
-3283158220,3283173375,DE
+3283156992,3283173375,DE
3283173376,3283174399,PL
3283174400,3283176447,UA
3283176448,3283177471,GB
@@ -133396,7 +68385,7 @@
3283181568,3283182591,NO
3283182592,3283183615,PL
3283183616,3283184639,RU
-3283185664,3283187711,UA
+3283186688,3283187711,UA
3283187712,3283188735,RU
3283188736,3283189759,UA
3283189760,3283206143,DE
@@ -133409,9 +68398,7 @@
3283209728,3283210239,TR
3283210240,3283210751,UA
3283210752,3283211263,PL
-3283211264,3283211488,GB
-3283211489,3283211489,EU
-3283211490,3283211775,GB
+3283211264,3283211775,GB
3283211776,3283212287,NL
3283212288,3283212799,PL
3283212800,3283213311,BG
@@ -133420,7 +68407,6 @@
3283214336,3283214847,RO
3283214848,3283215359,RU
3283215360,3283215871,AT
-3283215872,3283216383,TR
3283216384,3283216895,DE
3283216896,3283217407,CH
3283217408,3283218943,UA
@@ -133433,7 +68419,6 @@
3283222016,3283223039,DE
3283223040,3283223551,RU
3283223552,3283224063,NL
-3283224064,3283224575,EU
3283224576,3283225087,BG
3283225088,3283225599,UA
3283225600,3283226111,RU
@@ -133451,60 +68436,26 @@
3283248128,3283248639,DE
3283248640,3283249151,RO
3283249152,3283249663,UA
-3283249664,3283249919,MD
-3283249920,3283250175,RO
+3283249664,3283250175,RO
3283250176,3283250687,RU
3283250688,3283251199,RO
3283251200,3283251711,FR
3283251712,3283252223,PL
3283252224,3283252735,BG
3283252736,3283253247,SI
-3283253248,3283253759,RO
3283253760,3283254271,PL
-3283254272,3283255295,RO
3283255296,3283263487,UA
3283263488,3283271679,SE
3283271680,3283279871,RU
3283279872,3283288063,SE
-3283288064,3283288575,DE
-3283288576,3283288579,BE
-3283288580,3283291487,DE
-3283291488,3283291491,ES
-3283291492,3283304919,DE
-3283304920,3283304923,ES
-3283304924,3283304959,DE
-3283304960,3283305023,GB
-3283305024,3283305087,DE
-3283305088,3283305127,FR
-3283305128,3283305711,DE
-3283305712,3283305715,ES
-3283305716,3283318687,DE
-3283318688,3283318691,ES
-3283318692,3283318975,DE
-3283318976,3283318991,NL
-3283318992,3283318999,ES
-3283319000,3283319167,DE
-3283319168,3283319171,ES
-3283319172,3283321087,DE
-3283321088,3283321119,GB
-3283321120,3283321151,DE
-3283321152,3283321155,ES
-3283321156,3283321711,DE
-3283321712,3283321715,ES
-3283321716,3283321871,DE
-3283321872,3283321875,ES
-3283321876,3283329923,DE
-3283329924,3283329927,ES
-3283329928,3283419135,DE
+3283288064,3283419135,DE
3283419136,3283484671,DK
3283484672,3283484927,UA
3283484928,3283485183,NL
3283485184,3283485439,DE
3283485440,3283485695,RU
3283485696,3283485951,GB
-3283485952,3283486128,US
-3283486129,3283486129,SE
-3283486130,3283486207,US
+3283485952,3283486207,SE
3283486208,3283486463,AT
3283486464,3283486719,UA
3283486720,3283486975,RU
@@ -133514,7 +68465,6 @@
3283487744,3283487999,CH
3283488000,3283488255,NL
3283488256,3283488511,PL
-3283488512,3283488767,RU
3283488768,3283489279,FR
3283489280,3283489535,DE
3283489536,3283489791,PL
@@ -133533,7 +68483,6 @@
3283493120,3283493375,IL
3283493376,3283493887,PL
3283493888,3283494143,DK
-3283494144,3283494399,GB
3283494400,3283494655,PL
3283494656,3283494911,DK
3283494912,3283495167,PL
@@ -133565,10 +68514,7 @@
3283525632,3283533823,GB
3283533824,3283534847,UA
3283534848,3283535359,DE
-3283535360,3283535871,RO
-3283535872,3283536383,GI
3283536384,3283536895,UA
-3283536896,3283537407,DK
3283537408,3283537919,PL
3283537920,3283538431,RO
3283538432,3283538943,IT
@@ -133579,344 +68525,11 @@
3283540992,3283541503,RO
3283541504,3283542015,CH
3283542016,3283550207,IT
-3283550208,3283550287,EU
-3283550288,3283550319,AT
-3283550320,3283550463,EU
-3283550464,3283550623,AT
-3283550624,3283550655,FR
-3283550656,3283550719,GB
-3283550720,3283552255,AT
-3283552256,3283552343,IT
-3283552344,3283552351,EU
-3283552352,3283552575,IT
-3283552576,3283552639,DE
-3283552640,3283552671,IT
-3283552672,3283552703,CH
-3283552704,3283552735,DE
-3283552736,3283552751,FR
-3283552752,3283553047,IT
-3283553048,3283553055,GB
-3283553056,3283553071,ZA
-3283553072,3283553079,SE
-3283553080,3283553087,EU
-3283553088,3283553119,DE
-3283553120,3283553151,GR
-3283553152,3283553279,GB
-3283553280,3283553535,IT
-3283553536,3283553791,EU
-3283553792,3283554047,GB
-3283554048,3283554079,IT
-3283554080,3283554095,ES
-3283554096,3283554111,NL
-3283554112,3283554175,IT
-3283554176,3283554239,FR
-3283554240,3283554255,ZA
-3283554256,3283554271,RU
-3283554272,3283554303,GB
-3283554304,3283554327,CH
-3283554328,3283554335,EU
-3283554336,3283554367,CH
-3283554368,3283554431,EU
-3283554432,3283555743,CH
-3283555744,3283555759,SE
-3283555760,3283555775,DE
-3283555776,3283555807,NL
-3283555808,3283555839,DE
-3283555840,3283556351,CH
-3283556352,3283556391,FR
-3283556392,3283556399,EU
-3283556400,3283556623,FR
-3283556624,3283556671,EU
-3283556672,3283556735,FR
-3283556736,3283556863,EU
-3283556864,3283558303,FR
-3283558304,3283558335,DE
-3283558336,3283558367,IT
-3283558368,3283558383,ZA
-3283558384,3283558399,GB
-3283558400,3283558431,RU
-3283558432,3283558463,DE
-3283558464,3283558535,RU
-3283558536,3283558655,EU
-3283558656,3283558751,FR
-3283558752,3283558783,BE
-3283558784,3283558799,GB
-3283558800,3283558815,BE
-3283558816,3283558847,NL
-3283558848,3283558863,ZA
-3283558864,3283558871,GB
-3283558872,3283558879,ZA
-3283558880,3283558895,GB
-3283558896,3283558911,BE
-3283558912,3283559039,DE
-3283559040,3283559167,IE
-3283559168,3283559231,DE
-3283559232,3283559263,GB
-3283559264,3283559295,ZA
-3283559296,3283559423,DE
-3283559424,3283559679,NL
-3283559680,3283559935,IT
-3283559936,3283560191,GB
-3283560192,3283560447,NO
-3283560448,3283560703,EU
-3283560704,3283560847,ZA
-3283560848,3283560863,EU
-3283560864,3283560895,SE
-3283560896,3283560959,GB
-3283560960,3283561215,BE
-3283561216,3283561375,EU
-3283561376,3283561407,GB
-3283561408,3283561471,ES
3283561472,3283562495,GB
-3283562496,3283562751,DE
-3283562752,3283562895,GB
-3283562896,3283562903,NL
-3283562904,3283562911,CH
-3283562912,3283562943,DE
-3283562944,3283563007,IT
-3283563008,3283566015,GB
-3283566016,3283566079,ZA
-3283566080,3283566591,GB
-3283566592,3283566719,PL
-3283566720,3283566847,EU
-3283566848,3283567103,NO
-3283567104,3283567423,GB
-3283567424,3283567455,DE
-3283567456,3283567471,GB
-3283567472,3283567487,ES
-3283567488,3283567615,ZA
-3283567616,3283567967,GB
-3283567968,3283567999,IT
-3283568000,3283568031,GB
-3283568032,3283568063,DE
-3283568064,3283568079,NL
-3283568080,3283568095,ZA
-3283568096,3283568127,DK
-3283568128,3283569991,GB
-3283569992,3283570015,SE
-3283570016,3283570047,DK
-3283570048,3283570175,DE
-3283570176,3283570439,GB
-3283570440,3283570447,SE
-3283570448,3283570463,IT
-3283570464,3283570495,GB
-3283570496,3283570559,DE
-3283570560,3283570623,FR
-3283570624,3283571167,GB
-3283571168,3283571199,DE
-3283571200,3283571711,GB
-3283571712,3283571719,HU
-3283571720,3283571743,EU
-3283571744,3283571775,DE
-3283571776,3283571839,GB
-3283571840,3283571903,SE
-3283571904,3283571967,DE
-3283571968,3283572111,GB
-3283572112,3283572127,BE
-3283572128,3283572159,SE
-3283572160,3283572175,GB
-3283572176,3283572191,ZA
-3283572192,3283572223,CH
-3283572224,3283572615,GB
-3283572616,3283572623,FR
-3283572624,3283572631,GB
-3283572632,3283572639,CH
-3283572640,3283572671,GB
-3283572672,3283572735,DE
-3283572736,3283573247,EU
-3283573248,3283574527,GB
-3283574528,3283574591,EU
-3283574592,3283574607,GB
-3283574608,3283574615,NL
-3283574616,3283574623,GB
-3283574624,3283574639,ZA
-3283574640,3283574655,GB
-3283574656,3283575071,DE
-3283575072,3283575087,NL
-3283575088,3283575103,EU
-3283575104,3283575295,DE
-3283575296,3283575327,EU
-3283575328,3283576415,DE
-3283576416,3283576447,ZA
-3283576448,3283580159,DE
-3283580160,3283580415,EU
-3283580416,3283580455,DE
-3283580456,3283580463,EU
-3283580464,3283582975,DE
-3283582976,3283582979,ZA
-3283582980,3283582991,EU
-3283582992,3283583359,ZA
-3283583360,3283583487,EU
-3283583488,3283583503,ZA
-3283583504,3283583519,EU
-3283583520,3283583615,ZA
-3283583616,3283583743,EU
-3283583744,3283583839,ZA
-3283583840,3283583847,IT
-3283583848,3283583871,GB
-3283583872,3283583999,BE
-3283584000,3283584031,ZA
-3283584032,3283584063,DE
-3283584064,3283584127,IE
-3283584128,3283585023,ZA
-3283585024,3283585279,ES
-3283585280,3283585535,ZA
-3283585536,3283585679,ES
-3283585680,3283585695,IE
-3283585696,3283585727,FR
-3283585728,3283585791,ES
-3283585792,3283586047,IE
-3283586048,3283586351,ES
-3283586352,3283586367,EU
-3283586368,3283586407,ES
-3283586408,3283586415,EU
-3283586416,3283586503,ES
-3283586504,3283586511,EU
-3283586512,3283586519,ES
-3283586520,3283586559,EU
-3283586560,3283586815,FR
-3283586816,3283587071,DE
-3283587072,3283587199,EU
-3283587200,3283587231,NL
-3283587232,3283587263,EU
-3283587264,3283587335,NL
-3283587336,3283587343,GB
-3283587344,3283587359,NL
-3283587360,3283587391,SE
-3283587392,3283587423,NL
-3283587424,3283587431,SE
-3283587432,3283587439,EU
-3283587440,3283587447,GB
-3283587448,3283587455,DE
-3283587456,3283587487,CH
-3283587488,3283587519,EU
-3283587520,3283587551,CH
-3283587552,3283587583,EU
-3283587584,3283587647,NL
-3283587648,3283587679,DE
-3283587680,3283587711,CH
-3283587712,3283587839,DE
-3283587840,3283587871,NL
-3283587872,3283587887,ZA
-3283587888,3283587895,SE
-3283587896,3283587903,CH
-3283587904,3283587967,IE
-3283587968,3283588095,DE
-3283588096,3283588191,BE
-3283588192,3283588223,EU
-3283588224,3283588479,BE
-3283588480,3283588543,AT
-3283588544,3283588607,GB
-3283588608,3283589119,BE
-3283589120,3283589791,DK
-3283589792,3283589823,DE
-3283589824,3283589839,EU
-3283589840,3283589887,DE
-3283589888,3283590143,DK
-3283590144,3283590223,SE
-3283590224,3283590271,EU
-3283590272,3283590319,SE
-3283590320,3283590335,EU
-3283590336,3283590359,SE
-3283590360,3283590367,EU
-3283590368,3283590527,SE
-3283590528,3283590543,ZA
-3283590544,3283590591,DE
-3283590592,3283590623,CH
-3283590624,3283590655,GB
-3283590656,3283590847,SE
-3283590848,3283590879,ZA
-3283590880,3283590911,DE
-3283590912,3283591167,SE
-3283591168,3283591359,DE
-3283591360,3283591367,GB
-3283591368,3283591375,ZA
-3283591376,3283591423,CH
-3283591424,3283592191,DE
-3283592192,3283592847,CH
-3283592848,3283592863,GB
-3283592864,3283592895,DE
-3283592896,3283592903,SE
-3283592904,3283592911,GB
-3283592912,3283592927,ZA
-3283592928,3283593023,CH
-3283593024,3283593055,BE
-3283593056,3283593087,IT
-3283593088,3283593215,CH
+3283563520,3283564543,GB
+3283568640,3283569663,GB
+3283576832,3283579903,DE
3283593216,3283595263,IT
-3283595264,3283595775,DE
-3283595776,3283596287,EU
-3283596288,3283598127,GB
-3283598128,3283598143,EU
-3283598144,3283598175,DE
-3283598176,3283598207,EU
-3283598208,3283598335,DE
-3283598336,3283598639,GB
-3283598640,3283598655,CH
-3283598656,3283598687,IE
-3283598688,3283598719,SE
-3283598720,3283598735,DE
-3283598736,3283598743,DK
-3283598744,3283598847,DE
-3283598848,3283598879,GB
-3283598880,3283598911,CH
-3283598912,3283598975,GB
-3283598976,3283599103,DK
-3283599104,3283599295,GB
-3283599296,3283599311,DE
-3283599312,3283599327,NL
-3283599328,3283599359,GB
-3283599360,3283599615,SE
-3283599616,3283599871,IE
-3283599872,3283600527,ZA
-3283600528,3283600543,FR
-3283600544,3283600575,DE
-3283600576,3283600607,IT
-3283600608,3283600639,EU
-3283600640,3283600671,ZA
-3283600672,3283600703,DE
-3283600704,3283600767,IT
-3283600768,3283600895,ZA
-3283600896,3283601343,AT
-3283601344,3283601375,IT
-3283601376,3283601391,IE
-3283601392,3283601399,NL
-3283601400,3283601919,AT
-3283601920,3283602239,ZA
-3283602240,3283602271,GB
-3283602272,3283602287,IT
-3283602288,3283602303,ZA
-3283602304,3283602367,GB
-3283602368,3283602431,BE
-3283602432,3283602943,ZA
-3283602944,3283603007,CH
-3283603008,3283603071,IT
-3283603072,3283603199,CH
-3283603200,3283603455,EU
-3283603456,3283604479,GB
-3283604480,3283604735,EU
-3283604736,3283605503,GB
-3283605504,3283606783,DE
-3283606784,3283607359,BE
-3283607360,3283607423,NO
-3283607424,3283607551,AT
-3283607552,3283608575,BE
-3283608576,3283608831,DE
-3283608832,3283608895,EU
-3283608896,3283608959,DE
-3283608960,3283609087,IT
-3283609088,3283610783,DE
-3283610784,3283610815,CH
-3283610816,3283610879,TR
-3283610880,3283611903,DE
-3283611904,3283613247,IT
-3283613248,3283613311,DE
-3283613312,3283613695,IT
-3283613696,3283614079,CH
-3283614080,3283614207,FR
-3283614208,3283614975,CH
-3283614976,3283615231,EU
-3283615232,3283615743,CH
3283615744,3283623935,HU
3283623936,3283632127,DK
3283632128,3283632639,NL
@@ -133928,101 +68541,20 @@
3283635712,3283636223,RU
3283636224,3283636735,UA
3283636736,3283637759,PL
-3283637760,3283638271,UA
3283638272,3283638783,PL
3283638784,3283639295,RU
3283639296,3283639807,CH
3283639808,3283640319,DE
3283640320,3283648511,DK
-3283648512,3283649023,BE
-3283649024,3283649535,GB
-3283649536,3283649791,DE
-3283649792,3283650047,FR
-3283650048,3283650559,DE
-3283650560,3283650687,SE
-3283650688,3283650815,CH
-3283650816,3283650879,SE
-3283650880,3283650911,GB
-3283650912,3283650927,SE
+3283648512,3283650927,BE
3283650928,3283650943,GB
-3283650944,3283650959,RU
-3283650960,3283650975,CH
-3283650976,3283651071,GB
-3283651072,3283651135,IT
-3283651136,3283651167,BE
-3283651168,3283651183,ES
-3283651184,3283651199,BE
-3283651200,3283651263,HU
-3283651264,3283651327,ZA
-3283651328,3283651423,BE
-3283651424,3283651439,DE
-3283651440,3283651463,BE
-3283651464,3283651471,DE
-3283651472,3283651487,BE
-3283651488,3283651519,FR
-3283651520,3283651583,IL
-3283651584,3283651591,GB
-3283651592,3283651599,BE
-3283651600,3283651615,DE
-3283651616,3283651647,BE
-3283651648,3283651663,SE
-3283651664,3283651671,RO
-3283651672,3283651687,BE
-3283651688,3283651695,IT
-3283651696,3283651711,GB
-3283651712,3283651727,CH
-3283651728,3283651735,FR
-3283651736,3283651743,CH
-3283651744,3283651775,FR
-3283651776,3283651839,SE
-3283651840,3283651967,NL
-3283651968,3283652031,DK
-3283652032,3283652063,DE
-3283652064,3283652071,BE
-3283652072,3283652079,GB
-3283652080,3283652095,BE
-3283652096,3283652351,GB
-3283652352,3283652479,IT
-3283652480,3283652519,BE
-3283652520,3283652527,SE
-3283652528,3283652543,BE
-3283652544,3283652575,FR
-3283652576,3283652607,DE
-3283652608,3283652863,NO
-3283652864,3283653247,BE
-3283653248,3283653311,NO
-3283653312,3283653503,BE
-3283653504,3283653631,GB
-3283653632,3283653887,FR
-3283653888,3283654015,SE
-3283654016,3283654143,FR
-3283654144,3283654399,DE
-3283654400,3283654655,CH
-3283654656,3283654911,DK
-3283654912,3283655039,BE
-3283655040,3283655167,DK
-3283655168,3283655295,DE
-3283655296,3283655423,BE
-3283655424,3283655679,FR
-3283655680,3283655935,ES
-3283655936,3283656191,ZA
-3283656192,3283656223,GB
-3283656224,3283656255,BE
-3283656256,3283656271,GB
-3283656272,3283656303,BE
-3283656304,3283656311,GB
-3283656312,3283656447,BE
-3283656448,3283656559,ES
-3283656560,3283656575,FR
-3283656576,3283656591,BE
-3283656592,3283656599,FR
-3283656600,3283656703,BE
+3283650944,3283650975,BE
+3283650976,3283651007,GB
+3283651008,3283656703,BE
3283656704,3283664895,HU
3283664896,3283673087,UA
3283673088,3283681279,GB
-3283681280,3283729023,DE
-3283729024,3283729151,US
-3283729152,3283746815,DE
+3283681280,3283746815,DE
3283746816,3283812351,CH
3283812352,3283877887,PL
3283877888,3283943423,GB
@@ -134030,7 +68562,8 @@
3283944448,3283945471,AT
3283945472,3283946495,UA
3283946496,3283947519,GB
-3283947520,3283948543,UA
+3283947520,3283947775,UA
+3283947776,3283948543,RU
3283948544,3283949567,NL
3283949568,3283950591,SE
3283950592,3283951615,KZ
@@ -134064,24 +68597,23 @@
3283977728,3283978751,RU
3283978752,3283979263,RO
3283979264,3283979775,IL
-3283979776,3283980287,EU
+3283979776,3283980287,NO
3283980288,3283980799,RO
3283980800,3283981823,CH
-3283981824,3283983359,RO
+3283981824,3283982335,RO
+3283982848,3283983359,RO
3283983360,3283983871,CY
3283983872,3283984383,GB
3283984384,3283984895,SE
3283984896,3283985407,GR
-3283985408,3283985919,RO
3283985920,3283986431,AT
-3283986432,3283986943,RU
3283986944,3283987455,AT
3283987456,3283987967,GB
-3283987968,3283988991,RO
+3283988480,3283988991,RO
3283988992,3283989503,FR
3283989504,3283990015,RU
3283990016,3283990527,SE
-3283990528,3283991551,RO
+3283991040,3283991551,RO
3283991552,3283992063,SE
3283992064,3283992575,RO
3283992576,3283993087,IL
@@ -134134,7 +68666,7 @@
3284014336,3284014591,IT
3284014592,3284014847,GB
3284014848,3284015103,IL
-3284015104,3284015359,PL
+3284015104,3284015359,US
3284015360,3284015615,DK
3284015616,3284015871,AT
3284015872,3284016127,FR
@@ -134142,23 +68674,9 @@
3284016384,3284016639,CH
3284016640,3284017151,DK
3284017152,3284025343,GR
-3284025344,3284025439,GB
-3284025440,3284025471,DE
-3284025472,3284027327,GB
-3284027328,3284027343,DE
-3284027344,3284028415,GB
-3284028416,3284028671,DE
-3284028672,3284028879,GB
-3284028880,3284028895,DE
-3284028896,3284031743,GB
-3284031744,3284031999,DE
-3284032000,3284032063,GB
-3284032064,3284032095,DE
-3284032096,3284032159,GB
-3284032160,3284032191,DE
-3284032192,3284032671,GB
-3284032672,3284032703,DE
-3284032704,3284033535,GB
+3284025344,3284030479,GB
+3284030480,3284030495,FR
+3284030496,3284033535,GB
3284033536,3284041727,RU
3284041728,3284041983,DK
3284041984,3284042239,SI
@@ -134170,24 +68688,19 @@
3284043520,3284043775,DE
3284043776,3284044031,HR
3284044032,3284044287,FR
-3284044288,3284044799,DE
+3284044288,3284044543,DE
3284044800,3284045055,CZ
-3284045056,3284045311,EE
+3284045056,3284045311,LT
3284045312,3284045567,DE
3284045568,3284045823,AT
-3284045824,3284046079,UA
3284046080,3284046335,DE
3284046336,3284046591,NL
3284046592,3284046847,SE
3284046848,3284047103,DE
-3284047104,3284047359,DK
-3284047360,3284047615,EU
3284047616,3284047871,NL
3284047872,3284048127,UA
3284048128,3284048383,DK
-3284048384,3284048639,GB
3284048640,3284049151,FR
-3284049152,3284049407,UA
3284049408,3284049663,SI
3284049664,3284049919,RO
3284049920,3284058111,CH
@@ -134203,7 +68716,6 @@
3284078592,3284079103,NL
3284079104,3284079615,RU
3284079616,3284080127,DE
-3284080128,3284080639,BE
3284080640,3284081151,UA
3284081152,3284081663,DE
3284081664,3284082175,IE
@@ -134241,11 +68753,9 @@
3284099328,3284099583,HU
3284099584,3284100095,GR
3284100096,3284100607,AM
-3284100608,3284101119,US
3284101120,3284101631,UA
3284101632,3284102143,GB
-3284102144,3284102399,DK
-3284102400,3284102655,EU
+3284102144,3284102655,DK
3284102656,3284103167,AT
3284103168,3284103679,NL
3284103680,3284104191,DE
@@ -134289,7 +68799,6 @@
3284124672,3284125183,DE
3284125696,3284126207,UA
3284126208,3284127231,CZ
-3284127232,3284127743,HK
3284127744,3284128255,RU
3284128256,3284128767,GB
3284128768,3284129279,SE
@@ -134313,16 +68822,12 @@
3284138496,3284139007,RU
3284139008,3284140031,AT
3284140032,3284205567,DK
-3284205568,3284206335,NL
-3284206336,3284206591,EU
-3284206592,3284257535,NL
+3284205568,3284257535,NL
3284257536,3284257791,GB
3284257792,3284271103,NL
3284271104,3284402175,GB
3284402176,3284467711,SE
-3284467712,3284531775,FI
-3284531776,3284531779,NL
-3284531780,3284533247,FI
+3284467712,3284533247,FI
3284533248,3284598783,SE
3284598784,3284664319,HU
3284664320,3284672511,GB
@@ -134341,12 +68846,10 @@
3284686336,3284686847,RO
3284686848,3284687359,PL
3284687360,3284687871,UA
-3284687872,3284688383,NG
+3284687872,3284688383,IL
3284688384,3284688895,IT
3284688896,3284697087,FR
-3284697088,3284697215,GB
-3284697216,3284697279,FR
-3284697280,3284705279,GB
+3284697088,3284705279,GB
3284705280,3284713471,FR
3284713472,3284713727,DE
3284713728,3284713983,GR
@@ -134357,9 +68860,7 @@
3284715008,3284715263,GB
3284715264,3284715519,PL
3284715520,3284715775,SI
-3284715776,3284715816,BE
-3284715817,3284715817,EU
-3284715818,3284716031,BE
+3284715776,3284716031,BE
3284716032,3284716287,IT
3284716288,3284716543,RU
3284716544,3284716799,GR
@@ -134372,12 +68873,10 @@
3284718592,3284718847,PL
3284718848,3284719103,RU
3284719104,3284719359,PL
-3284719360,3284719615,DE
3284719616,3284719871,RU
3284719872,3284720127,FR
3284720128,3284720383,CH
3284720384,3284720895,SE
-3284720896,3284721151,UA
3284721152,3284721407,TR
3284721408,3284721663,NL
3284721664,3284722175,BE
@@ -134402,38 +68901,16 @@
3284811776,3284819967,KE
3284819968,3284828159,GB
3284828160,3284844543,AT
-3284844544,3284860927,CH
-3284860928,3284863743,DE
-3284863744,3284863999,FR
-3284864000,3284868863,DE
-3284868864,3284869375,FR
-3284869376,3284869631,DE
-3284869632,3284869887,IT
-3284869888,3284872959,DE
-3284872960,3284873471,IT
-3284873472,3284913919,DE
-3284913920,3284914175,GB
-3284914176,3284926463,DE
+3284844544,3284856063,CH
+3284856064,3284856191,DE
+3284856192,3284860927,CH
+3284860928,3284926463,DE
3284926464,3284991999,NO
3284992000,3285057535,PL
3285057536,3285065727,IT
3285065728,3285073919,RU
-3285073920,3285074687,GB
-3285074688,3285076479,NL
-3285076480,3285076735,EU
-3285076736,3285076767,BE
-3285076768,3285078111,NL
-3285078112,3285078143,GB
-3285078144,3285078175,NL
-3285078176,3285078191,GB
-3285078192,3285079423,NL
-3285079424,3285079551,DE
-3285079552,3285079967,NL
-3285079968,3285079999,DE
-3285080000,3285082111,NL
+3285073920,3285082111,NL
3285082112,3285084159,AT
-3285084160,3285085183,LU
-3285085184,3285086207,GB
3285086208,3285088255,PL
3285088256,3285088511,RO
3285088512,3285088767,DK
@@ -134443,7 +68920,7 @@
3285098496,3285114879,GB
3285114880,3285115903,RU
3285115904,3285116415,PL
-3285116416,3285116927,RU
+3285116416,3285116927,CZ
3285116928,3285117439,UA
3285117440,3285117951,RU
3285117952,3285118463,FR
@@ -134455,14 +68932,8 @@
3285121024,3285121535,SE
3285121536,3285122047,CY
3285122048,3285123071,RU
-3285123072,3285158639,BE
-3285158640,3285158647,FR
-3285158648,3285164367,BE
-3285164368,3285164375,NL
-3285164376,3285188607,BE
-3285188608,3285265999,RU
-3285266000,3285266007,CH
-3285266008,3285319679,RU
+3285123072,3285188607,BE
+3285188608,3285319679,RU
3285319680,3285320191,HU
3285320192,3285320703,RU
3285320704,3285321215,RO
@@ -134543,1206 +69014,54 @@
3285446656,3285447679,UA
3285447680,3285449727,RU
3285449728,3285450751,UA
-3285450752,3285453055,GB
-3285453056,3285453119,EU
-3285453120,3285454847,GB
-3285454848,3285455103,EU
-3285455104,3285455743,DE
-3285455744,3285455871,EU
-3285455872,3285455887,DE
-3285455888,3285455895,EU
-3285455896,3285455903,GB
-3285455904,3285455935,EU
-3285455936,3285456255,DE
-3285456256,3285456287,EU
-3285456288,3285456351,DE
-3285456352,3285456383,EU
-3285456384,3285456639,DE
-3285456640,3285456703,DK
-3285456704,3285456735,EU
-3285456736,3285456767,DK
-3285456768,3285456831,EU
-3285456832,3285456871,DK
-3285456872,3285456879,EU
-3285456880,3285456895,DK
-3285456896,3285456959,GB
-3285456960,3285456975,EU
-3285456976,3285457151,GB
-3285457152,3285457167,EU
-3285457168,3285457183,SE
-3285457184,3285457231,EU
-3285457232,3285457247,SE
-3285457248,3285457279,EU
-3285457280,3285457407,SE
-3285457408,3285457663,GB
-3285457664,3285457759,IT
-3285457760,3285457791,EU
-3285457792,3285457919,IT
-3285457920,3285458175,GB
-3285458176,3285458431,EU
-3285458432,3285458943,GB
-3285458944,3285458975,DK
-3285458976,3285459007,EU
-3285459008,3285459079,DK
-3285459080,3285459119,EU
-3285459120,3285459327,DK
-3285459328,3285459391,EU
-3285459392,3285459535,DK
-3285459536,3285459543,EU
-3285459544,3285459711,DK
-3285459712,3285459967,NO
-3285459968,3285460479,FI
-3285460480,3285460991,DK
-3285460992,3285461031,NL
-3285461032,3285461055,EU
-3285461056,3285461111,NL
-3285461112,3285461119,EU
-3285461120,3285461263,NL
-3285461264,3285461279,BE
-3285461280,3285461311,EU
-3285461312,3285461375,CH
-3285461376,3285461415,NL
-3285461416,3285461423,EU
-3285461424,3285461447,NL
-3285461448,3285461455,DE
-3285461456,3285461535,NL
-3285461536,3285461567,EU
-3285461568,3285461791,NL
-3285461792,3285461799,EU
-3285461800,3285461807,NL
-3285461808,3285461855,EU
-3285461856,3285461877,NL
-3285461878,3285461879,EU
-3285461880,3285461967,NL
-3285461968,3285461975,EU
-3285461976,3285461991,NL
-3285461992,3285461999,GB
-3285462000,3285462007,NL
-3285462008,3285462015,EU
-3285462016,3285462207,DE
-3285462208,3285462223,GB
-3285462224,3285462383,DE
-3285462384,3285462399,EU
-3285462400,3285462527,DE
-3285462528,3285462543,EU
-3285462544,3285462655,DE
-3285462656,3285462783,EU
-3285462784,3285462831,AT
-3285462832,3285462951,EU
-3285462952,3285462959,AT
-3285462960,3285463007,EU
-3285463008,3285463039,AT
-3285463040,3285463087,LU
-3285463088,3285463103,EU
-3285463104,3285463143,LU
-3285463144,3285463295,EU
-3285463296,3285463311,FR
-3285463312,3285463319,BE
-3285463320,3285463359,EU
-3285463360,3285463455,BE
-3285463456,3285463487,EU
-3285463488,3285463503,GB
-3285463504,3285463519,EU
-3285463520,3285463615,BE
-3285463616,3285463647,FR
-3285463648,3285463663,BE
-3285463664,3285463671,EU
-3285463672,3285463743,BE
-3285463744,3285463775,EU
-3285463776,3285463807,BE
-3285463808,3285464071,EU
-3285464072,3285464095,BE
-3285464096,3285464127,GB
-3285464128,3285464319,EU
-3285464320,3285464383,BE
-3285464384,3285464415,GB
-3285464416,3285464431,BE
-3285464432,3285464447,DE
-3285464448,3285465087,BE
-3285465088,3285465103,DK
-3285465104,3285465151,EU
-3285465152,3285465175,DK
-3285465176,3285465215,EU
-3285465216,3285465231,DK
-3285465232,3285465247,EU
-3285465248,3285465343,DK
-3285465344,3285465631,EU
-3285465632,3285465727,DE
-3285465728,3285465855,EU
-3285465856,3285465951,DE
-3285465952,3285465983,EU
-3285465984,3285466367,DE
-3285466368,3285466447,CH
-3285466448,3285466455,EU
-3285466456,3285466463,CH
-3285466464,3285466527,EU
-3285466528,3285466559,CH
-3285466560,3285466623,EU
-3285466624,3285466879,AT
-3285466880,3285466895,BG
-3285466896,3285466911,EU
-3285466912,3285466959,BG
-3285466960,3285466975,EU
-3285466976,3285467007,BG
-3285467008,3285467015,EU
-3285467016,3285467023,BG
-3285467024,3285467135,EU
-3285467136,3285467391,DE
-3285467392,3285467663,EU
-3285467664,3285467679,DE
-3285467680,3285467711,EU
-3285467712,3285467823,DE
-3285467824,3285467831,EU
-3285467832,3285467839,DE
-3285467840,3285467871,EU
-3285467872,3285467903,DE
-3285467904,3285467935,EU
-3285467936,3285467951,DE
-3285467952,3285467959,GB
-3285467960,3285467967,EU
-3285467968,3285468511,DE
-3285468512,3285468575,EU
-3285468576,3285468599,DE
-3285468600,3285468607,EU
-3285468608,3285468615,DE
-3285468616,3285468623,EU
-3285468624,3285469695,DE
-3285469696,3285469727,EU
-3285469728,3285470975,DE
-3285470976,3285471231,IN
-3285471232,3285471743,DE
-3285471744,3285471807,EU
-3285471808,3285471871,DE
-3285471872,3285471935,EU
-3285471936,3285472127,DE
-3285472128,3285472159,EU
-3285472160,3285472175,DE
-3285472176,3285472183,EU
-3285472184,3285472223,DE
-3285472224,3285472255,EU
-3285472256,3285472511,US
-3285472512,3285473315,EU
-3285473316,3285473411,DE
-3285473412,3285473415,EU
-3285473416,3285473423,DE
-3285473424,3285473439,EU
-3285473440,3285473583,DE
-3285473584,3285473591,GB
-3285473592,3285473599,DE
-3285473600,3285473631,EU
-3285473632,3285473663,DE
-3285473664,3285473791,EU
-3285473792,3285474047,DE
-3285474048,3285474095,EU
-3285474096,3285474111,DE
-3285474112,3285474175,EU
-3285474176,3285474271,DE
-3285474272,3285474303,EU
-3285474304,3285474319,DE
-3285474320,3285474335,EU
-3285474336,3285474367,DE
-3285474368,3285474383,EU
-3285474384,3285474559,DE
-3285474560,3285474815,EU
-3285474816,3285475135,DE
-3285475136,3285475143,EU
-3285475144,3285475167,DE
-3285475168,3285475199,EU
-3285475200,3285475207,DE
-3285475208,3285475215,EU
-3285475216,3285475327,DE
-3285475328,3285475623,EU
-3285475624,3285475647,AT
-3285475648,3285475703,EU
-3285475704,3285475711,AT
-3285475712,3285475775,EU
-3285475776,3285475783,AT
-3285475784,3285475807,EU
-3285475808,3285475823,AT
-3285475824,3285475903,EU
-3285475904,3285475951,AT
-3285475952,3285475967,EU
-3285475968,3285476031,AT
-3285476032,3285476351,EU
-3285476352,3285476607,DE
-3285476608,3285476735,EU
-3285476736,3285476863,GB
-3285476864,3285476895,AT
-3285476896,3285477023,EU
-3285477024,3285477087,AT
-3285477088,3285477151,EU
-3285477152,3285477343,IT
-3285477344,3285477359,EU
-3285477360,3285477375,IT
-3285477376,3285477919,FR
-3285477920,3285477951,EU
-3285477952,3285477983,FR
-3285477984,3285477999,EU
-3285478000,3285478655,FR
-3285478656,3285478911,EU
-3285478912,3285479391,FR
-3285479392,3285479399,EU
-3285479400,3285479407,GB
-3285479408,3285479423,FR
-3285479424,3285479807,CH
-3285479808,3285480447,EU
-3285480448,3285480575,CH
-3285480576,3285480719,EU
-3285480720,3285480767,CH
-3285480768,3285480775,EU
-3285480776,3285480895,CH
-3285480896,3285480959,EU
+3285451456,3285451471,GB
+3285451608,3285451615,GB
+3285452496,3285452511,GB
+3285453440,3285453567,GB
+3285457072,3285457079,GB
+3285461184,3285461215,NL
+3285472256,3285472271,US
+3285472272,3285472287,DE
+3285472288,3285472511,US
3285480960,3285481215,CH
-3285481216,3285481471,EU
-3285481472,3285481727,IT
-3285481728,3285481743,CH
-3285481744,3285481751,EU
-3285481752,3285481791,CH
-3285481792,3285481983,EU
-3285481984,3285481999,FR
-3285482000,3285482007,CY
-3285482008,3285482087,FR
-3285482088,3285482095,EU
-3285482096,3285482239,FR
-3285482240,3285482495,EU
-3285482496,3285482527,CH
-3285482528,3285482751,EU
-3285482752,3285482783,CH
-3285482784,3285483007,EU
-3285483008,3285483519,CH
-3285483520,3285484543,EU
-3285484544,3285485055,IE
-3285485056,3285485103,EU
-3285485104,3285485119,SK
-3285485120,3285485639,EU
-3285485640,3285485647,SK
-3285485648,3285485727,EU
-3285485728,3285485743,SK
-3285485744,3285485751,EU
-3285485752,3285485759,SK
-3285485760,3285485799,EU
-3285485800,3285485815,SK
-3285485816,3285486591,EU
-3285486592,3285487103,IT
-3285487104,3285487359,HU
-3285487360,3285487375,NL
-3285487376,3285487423,EU
-3285487424,3285487487,GB
-3285487488,3285487615,EU
-3285487616,3285487679,NL
-3285487680,3285487743,EU
-3285487744,3285488127,NL
-3285488128,3285488639,EU
-3285488640,3285489663,GB
-3285489664,3285490175,EU
-3285490176,3285490319,RU
-3285490320,3285490335,EU
-3285490336,3285490463,RU
-3285490464,3285490495,EU
-3285490496,3285490519,RU
-3285490520,3285490527,LT
-3285490528,3285490535,LV
-3285490536,3285490543,RU
-3285490544,3285490559,EU
-3285490560,3285490687,RU
-3285490688,3285490943,EU
-3285490944,3285491007,RU
-3285491008,3285491455,EU
-3285491456,3285491711,RU
-3285491712,3285492223,EU
-3285492224,3285492479,FR
-3285492480,3285492687,GB
-3285492688,3285492695,EU
-3285492696,3285492735,GB
-3285492736,3285493759,EU
-3285493760,3285493775,ES
-3285493776,3285493791,EU
-3285493792,3285493887,ES
-3285493888,3285493951,EU
-3285493952,3285493983,ES
-3285493984,3285493999,EU
-3285494000,3285494015,ES
-3285494016,3285494079,IT
-3285494080,3285494111,EU
-3285494112,3285494783,IT
-3285494784,3285495807,EU
-3285495808,3285496319,DE
-3285496320,3285496383,ES
-3285496384,3285496447,EU
-3285496448,3285496471,ES
-3285496472,3285496495,EU
-3285496496,3285496527,FR
-3285496528,3285496543,ES
-3285496544,3285496575,FR
-3285496576,3285496607,EU
-3285496608,3285497855,DE
-3285497856,3285497887,EU
-3285497888,3285498079,DE
-3285498080,3285498095,EU
-3285498096,3285498111,DE
-3285498112,3285498367,IT
-3285498368,3285498623,DE
-3285498624,3285498879,CH
-3285498880,3285499391,EU
-3285499392,3285499455,FR
-3285499456,3285499487,EU
-3285499488,3285499647,FR
-3285499648,3285499903,DE
-3285499904,3285500159,CZ
-3285500160,3285500287,EU
-3285500288,3285500415,CZ
-3285500416,3285500927,GB
-3285500928,3285501183,DK
-3285501184,3285501327,CZ
-3285501328,3285501335,EU
-3285501336,3285501343,CZ
-3285501344,3285501375,GB
-3285501376,3285501407,CZ
-3285501408,3285501439,EU
-3285501440,3285501567,CZ
-3285501568,3285501695,EU
-3285501696,3285501823,GB
-3285501824,3285501887,CZ
-3285501888,3285501951,GB
-3285501952,3285502207,EU
-3285502208,3285502463,CZ
-3285502464,3285502495,IL
-3285502496,3285502503,CY
-3285502504,3285502511,IL
-3285502512,3285502527,CY
-3285502528,3285502591,BY
-3285502592,3285502655,GB
-3285502656,3285502719,IL
-3285502720,3285503391,EU
-3285503392,3285503423,CZ
-3285503424,3285503487,EU
-3285503488,3285503551,ES
-3285503552,3285503743,EU
-3285503744,3285503999,FI
-3285504000,3285504511,EU
-3285504512,3285504607,CZ
-3285504608,3285505215,EU
-3285505216,3285505279,CZ
-3285505280,3285505439,EU
-3285505440,3285505471,CZ
-3285505472,3285506047,EU
-3285506048,3285506079,CZ
-3285506080,3285507327,EU
-3285507328,3285507391,GR
-3285507392,3285507663,EU
-3285507664,3285507711,CZ
-3285507712,3285507839,EU
-3285507840,3285508095,CZ
-3285508096,3285508607,DE
-3285508608,3285508623,RU
-3285508624,3285508639,EU
-3285508640,3285508671,RU
-3285508672,3285508735,EU
-3285508736,3285508863,RU
-3285508864,3285508871,EU
-3285508872,3285508927,PT
-3285508928,3285509119,EU
-3285509120,3285509247,SE
-3285509248,3285509279,EU
-3285509280,3285509311,SE
-3285509312,3285510015,EU
-3285510016,3285510047,HU
-3285510048,3285510111,EU
-3285510112,3285510143,HU
+3285501696,3285501951,GB
3285510144,3285512191,GB
-3285512192,3285512319,GR
-3285512320,3285512383,EU
-3285512384,3285512511,GR
-3285512512,3285512575,EU
-3285512576,3285512719,GR
-3285512720,3285512767,EU
-3285512768,3285512831,GR
-3285512832,3285513215,EU
-3285513216,3285513223,GB
-3285513224,3285513231,EU
-3285513232,3285513247,GR
-3285513248,3285513279,EU
-3285513280,3285513343,GR
-3285513344,3285513727,EU
-3285513728,3285514239,GR
-3285514240,3285515263,EU
-3285515264,3285515519,AT
-3285515520,3285515791,EU
-3285515792,3285515803,GR
-3285515804,3285515807,EU
-3285515808,3285515815,GR
-3285515816,3285516159,EU
-3285516160,3285516191,GR
-3285516192,3285516223,EU
-3285516224,3285516287,GR
-3285516288,3285516543,DK
-3285516544,3285516671,NO
-3285516672,3285516687,BE
+3285516288,3285516687,BE
3285516688,3285516691,NL
-3285516692,3285516695,IT
-3285516696,3285516703,NL
-3285516704,3285516719,GB
-3285516720,3285516735,IL
-3285516736,3285516799,DE
-3285516800,3285516927,GB
-3285516928,3285516991,PL
-3285516992,3285517023,BE
-3285517024,3285517055,SE
-3285517056,3285517215,GB
-3285517216,3285517247,AT
-3285517248,3285518335,GB
-3285518336,3285518351,NL
-3285518352,3285518367,ES
-3285518368,3285518463,BE
-3285518464,3285518591,ES
-3285518592,3285518847,CH
-3285518848,3285519103,BE
-3285519104,3285519359,FR
-3285519360,3285519615,DE
-3285519616,3285520127,GB
-3285520128,3285520383,NL
-3285520384,3285520527,GB
-3285520528,3285520543,CH
-3285520544,3285520575,GB
-3285520576,3285520639,DE
-3285520640,3285520767,NL
-3285520768,3285520895,GB
-3285520896,3285521167,BE
-3285521168,3285521407,GB
-3285521408,3285521695,BE
-3285521696,3285521791,GB
-3285521792,3285522175,BE
-3285522176,3285523071,GB
-3285523072,3285523079,BE
-3285523080,3285523087,ES
-3285523088,3285523199,CH
-3285523200,3285523231,ZA
-3285523232,3285523327,BE
-3285523328,3285523335,FI
-3285523336,3285523359,BE
-3285523360,3285523391,GB
-3285523392,3285523711,FR
-3285523712,3285523967,CH
-3285523968,3285524063,GB
-3285524064,3285524095,LU
-3285524096,3285524159,ZA
-3285524160,3285524175,GB
-3285524176,3285524191,CH
-3285524192,3285524223,BE
+3285516692,3285517311,BE
+3285517312,3285518335,GB
+3285518336,3285524223,BE
3285524224,3285524351,GB
-3285524352,3285524479,BE
-3285524480,3285524735,DK
-3285524736,3285524863,GB
-3285524864,3285524895,BE
-3285524896,3285524927,ES
-3285524928,3285524991,GB
-3285524992,3285525247,BE
-3285525248,3285525503,CH
-3285525504,3285526015,BE
-3285526016,3285526023,IL
-3285526024,3285526035,BE
-3285526036,3285526039,FR
-3285526040,3285526047,BE
-3285526048,3285526079,CZ
-3285526080,3285526143,BE
-3285526144,3285526175,HU
-3285526176,3285526383,BE
-3285526384,3285526399,PT
-3285526400,3285526527,CH
-3285526528,3285526783,ES
-3285526784,3285526815,CH
-3285526816,3285526847,BE
-3285526848,3285526911,CH
-3285526912,3285527295,GB
-3285527296,3285527423,BE
-3285527424,3285527427,GB
-3285527428,3285527431,BE
-3285527432,3285527439,FR
-3285527440,3285527455,LU
+3285524352,3285527455,BE
3285527456,3285527487,IL
-3285527488,3285527495,BE
-3285527496,3285527503,DE
-3285527504,3285527519,JP
-3285527520,3285527551,BE
-3285527552,3285527615,IL
-3285527616,3285527679,GB
-3285527680,3285527807,BE
-3285527808,3285527811,GB
-3285527812,3285527815,PL
-3285527816,3285527855,BE
-3285527856,3285527871,FR
-3285527872,3285527967,BE
-3285527968,3285527999,DE
-3285528000,3285528319,BE
-3285528320,3285528447,DE
-3285528448,3285528575,FR
-3285528576,3285528799,BE
-3285528800,3285528831,GB
-3285528832,3285528847,BE
-3285528848,3285528863,ZA
-3285528864,3285528883,BE
-3285528884,3285528887,FR
-3285528888,3285528895,BE
-3285528896,3285528911,GB
-3285528912,3285528931,BE
-3285528932,3285528935,FR
-3285528936,3285528943,BE
-3285528944,3285529071,GB
-3285529072,3285529151,BE
-3285529152,3285529183,DE
-3285529184,3285529199,NL
+3285527488,3285529199,BE
3285529200,3285529215,IL
-3285529216,3285529247,CH
-3285529248,3285529263,GB
-3285529264,3285529343,BE
-3285529344,3285529599,IT
-3285529600,3285529631,NO
-3285529632,3285529663,IE
-3285529664,3285529679,LI
-3285529680,3285529687,FI
-3285529688,3285529695,IT
-3285529696,3285529727,BE
+3285529216,3285529727,BE
3285529728,3285529855,GB
-3285529856,3285529951,LU
-3285529952,3285529983,GR
-3285529984,3285529999,CZ
-3285530000,3285530143,BE
-3285530144,3285530175,GB
-3285530176,3285530183,NL
-3285530184,3285530215,BE
-3285530216,3285530223,GB
-3285530224,3285530271,FR
-3285530272,3285530399,BE
-3285530400,3285530431,NL
-3285530432,3285530463,IT
-3285530464,3285530495,DE
-3285530496,3285530559,AT
-3285530560,3285530575,BE
-3285530576,3285530583,GB
-3285530584,3285530591,BE
-3285530592,3285530607,GB
-3285530608,3285530655,BE
-3285530656,3285530687,ZA
-3285530688,3285530719,GB
-3285530720,3285530723,BE
-3285530724,3285530727,GB
-3285530728,3285530735,DE
-3285530736,3285530739,GB
-3285530740,3285530743,BE
-3285530744,3285530751,GB
-3285530752,3285530767,IT
-3285530768,3285530783,DE
-3285530784,3285530815,BE
-3285530816,3285530831,GB
-3285530832,3285530879,BE
-3285530880,3285530911,CH
-3285530912,3285530975,GB
-3285530976,3285530983,BE
-3285530984,3285530991,IE
-3285530992,3285531007,GB
-3285531008,3285531023,FR
-3285531024,3285531039,LU
-3285531040,3285531071,ES
-3285531072,3285531103,NL
-3285531104,3285531119,FR
-3285531120,3285531263,BE
-3285531264,3285531311,GB
-3285531312,3285531327,DK
-3285531328,3285531343,BE
-3285531344,3285531351,GB
-3285531352,3285531355,FR
-3285531356,3285531359,ES
-3285531360,3285531367,BE
-3285531368,3285531375,DE
-3285531376,3285531383,BE
-3285531384,3285531391,DE
-3285531392,3285531423,BE
-3285531424,3285531455,DE
-3285531456,3285531495,BE
-3285531496,3285531503,NL
-3285531504,3285531519,FR
-3285531520,3285531535,BE
-3285531536,3285531551,DE
-3285531552,3285531567,IL
-3285531568,3285531615,BE
-3285531616,3285531647,NL
-3285531648,3285531903,BE
-3285531904,3285532159,GB
-3285532160,3285532223,BE
-3285532224,3285532231,ES
-3285532232,3285532415,BE
-3285532416,3285532687,IT
-3285532688,3285532703,DE
-3285532704,3285532711,BE
-3285532712,3285532719,RU
-3285532720,3285532735,IT
-3285532736,3285532799,CH
-3285532800,3285532831,DE
-3285532832,3285532847,FI
-3285532848,3285532863,IT
-3285532864,3285532895,BE
-3285532896,3285532959,IT
-3285532960,3285533039,BE
-3285533040,3285533047,NL
-3285533048,3285533055,BE
-3285533056,3285533059,NL
-3285533060,3285533087,BE
-3285533088,3285533103,IT
-3285533104,3285533119,LU
-3285533120,3285533127,BE
-3285533128,3285533135,SE
-3285533136,3285533151,GB
-3285533152,3285533183,FR
-3285533184,3285533311,IT
-3285533312,3285533343,SE
-3285533344,3285533367,BE
-3285533368,3285533375,CH
-3285533376,3285533471,GB
-3285533472,3285533503,BE
+3285529856,3285533503,BE
3285533504,3285533519,GB
-3285533520,3285533535,SE
-3285533536,3285533543,BE
-3285533544,3285533551,DE
+3285533520,3285533551,BE
3285533552,3285533567,GB
-3285533568,3285533951,IT
-3285533952,3285534079,IL
-3285534080,3285534095,IT
-3285534096,3285534111,TR
-3285534112,3285534143,BE
-3285534144,3285534207,IT
-3285534208,3285534463,PT
-3285534464,3285534479,NL
-3285534480,3285534527,BE
-3285534528,3285534559,FR
-3285534560,3285534591,IT
-3285534592,3285534627,GB
-3285534628,3285534639,BE
-3285534640,3285534655,GB
-3285534656,3285534719,IT
-3285534720,3285534751,GB
-3285534752,3285534767,BE
-3285534768,3285534783,GB
-3285534784,3285534799,DK
-3285534800,3285534815,ES
-3285534816,3285534831,HU
-3285534832,3285534927,IE
-3285534928,3285534943,GB
-3285534944,3285534975,BE
-3285534976,3285535103,IT
-3285535104,3285535123,BE
-3285535124,3285535127,ES
-3285535128,3285535131,BE
-3285535132,3285535135,NL
-3285535136,3285535139,FR
-3285535140,3285535143,BE
-3285535144,3285535147,GR
-3285535148,3285535151,CZ
-3285535152,3285535155,SE
-3285535156,3285535231,BE
-3285535232,3285535743,NO
-3285535744,3285535871,IT
-3285535872,3285535903,FR
-3285535904,3285535907,DK
-3285535908,3285535911,NO
-3285535912,3285535919,BE
-3285535920,3285535927,NL
-3285535928,3285535951,BE
-3285535952,3285535967,GB
-3285535968,3285535999,BE
-3285536000,3285536063,GB
-3285536064,3285536079,BE
-3285536080,3285536095,IT
-3285536096,3285536111,GB
-3285536112,3285536255,BE
-3285536256,3285536511,GB
-3285536512,3285536543,LU
-3285536544,3285536575,DE
-3285536576,3285536607,IL
-3285536608,3285536703,BE
-3285536704,3285536735,GB
-3285536736,3285536739,IT
-3285536740,3285536743,GB
-3285536744,3285536747,DE
-3285536748,3285536751,AT
-3285536752,3285536755,BE
-3285536756,3285536759,IL
-3285536760,3285536767,BE
-3285536768,3285536959,DK
-3285536960,3285536991,ES
-3285536992,3285537023,GB
-3285537024,3285537087,IL
-3285537088,3285537127,GB
-3285537128,3285537135,BE
-3285537136,3285537143,DK
-3285537144,3285537151,GB
-3285537152,3285537167,DK
-3285537168,3285537175,CH
-3285537176,3285537183,BE
-3285537184,3285537215,DE
-3285537216,3285537231,GB
-3285537232,3285537535,BE
-3285537536,3285537599,RU
-3285537600,3285537615,FR
-3285537616,3285537631,BE
-3285537632,3285537663,SE
-3285537664,3285537727,DE
-3285537728,3285537759,IT
-3285537760,3285537791,LU
-3285537792,3285537919,NL
-3285537920,3285538047,LU
-3285538048,3285538175,NL
-3285538176,3285538183,DE
-3285538184,3285538187,LU
-3285538188,3285538207,BE
-3285538208,3285538239,LU
-3285538240,3285538271,NO
-3285538272,3285538287,FI
-3285538288,3285538295,CH
-3285538296,3285538299,BE
-3285538300,3285538319,GB
-3285538320,3285538327,LU
-3285538328,3285538335,BE
-3285538336,3285538351,GB
-3285538352,3285538367,LU
-3285538368,3285538375,BE
-3285538376,3285538383,AT
-3285538384,3285538399,BE
-3285538400,3285538431,DK
-3285538432,3285538623,BE
-3285538624,3285538687,LU
-3285538688,3285538719,BE
-3285538720,3285538751,DE
-3285538752,3285538755,IT
-3285538756,3285538759,FR
-3285538760,3285538763,IE
-3285538764,3285538767,BE
-3285538768,3285538783,CZ
-3285538784,3285538815,BE
-3285538816,3285538847,CH
-3285538848,3285538879,BE
-3285538880,3285539071,ES
-3285539072,3285539327,NL
-3285539328,3285539583,BE
-3285539584,3285539711,IE
-3285539712,3285539839,GB
-3285539840,3285539967,IT
-3285539968,3285540031,GB
-3285540032,3285540095,ZA
-3285540096,3285540103,GB
-3285540104,3285540107,IT
-3285540108,3285540111,BE
-3285540112,3285540127,IL
-3285540128,3285540159,ZA
-3285540160,3285540191,FI
-3285540192,3285540207,CH
-3285540208,3285540215,IE
-3285540216,3285540219,BE
-3285540220,3285540223,ZA
-3285540224,3285540351,CZ
-3285540352,3285540415,PT
-3285540416,3285540423,ZA
-3285540424,3285540447,BE
-3285540448,3285540479,DE
-3285540480,3285540607,NL
-3285540608,3285540671,BE
-3285540672,3285540735,DE
-3285540736,3285540863,BE
-3285540864,3285540871,FR
-3285540872,3285540879,BE
-3285540880,3285541375,FR
-3285541376,3285541391,GB
-3285541392,3285541439,FR
-3285541440,3285541519,GB
-3285541520,3285541535,BE
-3285541536,3285541551,FR
-3285541552,3285541567,BE
-3285541568,3285541599,GB
-3285541600,3285541631,BE
-3285541632,3285541663,ES
-3285541664,3285541695,FR
-3285541696,3285541759,BE
-3285541760,3285541887,FR
-3285541888,3285541919,GB
-3285541920,3285541951,FR
-3285541952,3285542079,DE
-3285542080,3285542143,FR
-3285542144,3285542399,BE
-3285542400,3285542655,GB
-3285542656,3285542911,ZA
-3285542912,3285543167,IT
-3285543168,3285543423,NL
-3285543424,3285543679,SE
-3285543680,3285543743,AT
-3285543744,3285543759,FR
-3285543760,3285543775,BE
-3285543776,3285543791,IT
-3285543792,3285543795,ES
-3285543796,3285543799,BE
-3285543800,3285543807,FR
-3285543808,3285543871,NL
-3285543872,3285543935,FR
-3285543936,3285544191,BE
-3285544192,3285544255,IL
-3285544256,3285544319,DE
-3285544320,3285544335,ES
-3285544336,3285544351,NL
-3285544352,3285544383,BE
-3285544384,3285544479,FR
-3285544480,3285544511,ES
-3285544512,3285544639,FR
-3285544640,3285544703,BE
-3285544704,3285544959,FR
-3285544960,3285545215,EU
-3285545216,3285545343,BE
-3285545344,3285545379,GB
-3285545380,3285545471,BE
-3285545472,3285545727,SE
-3285545728,3285545983,FI
-3285545984,3285545999,IT
-3285546000,3285546015,BE
-3285546016,3285546063,ES
-3285546064,3285546071,IT
-3285546072,3285546111,ES
-3285546112,3285546239,AT
-3285546240,3285546367,ZA
-3285546368,3285546495,FR
-3285546496,3285546559,NL
-3285546560,3285546623,BE
-3285546624,3285546671,FR
-3285546672,3285546687,SE
+3285533568,3285536991,BE
+3285536992,3285537007,GB
+3285537008,3285546687,BE
3285546688,3285546751,GB
-3285546752,3285547007,DK
-3285547008,3285547023,AT
-3285547024,3285547039,FR
-3285547040,3285547071,AT
-3285547072,3285547135,AU
-3285547136,3285547167,RU
-3285547168,3285547199,LU
-3285547200,3285547263,SE
-3285547264,3285547519,LU
-3285547520,3285547775,NL
-3285547776,3285547903,ES
-3285547904,3285548031,BE
-3285548032,3285548287,FR
-3285548288,3285548543,DE
-3285548544,3285548607,FR
-3285548608,3285548639,LI
-3285548640,3285548647,BE
-3285548648,3285548655,LI
-3285548656,3285548735,GB
-3285548736,3285548767,BE
-3285548768,3285548799,LU
-3285548800,3285548831,IT
-3285548832,3285548839,GB
-3285548840,3285548847,IL
-3285548848,3285548959,IT
-3285548960,3285549023,FR
-3285549024,3285549039,PT
-3285549040,3285549055,FR
-3285549056,3285549183,DE
-3285549184,3285549215,BE
-3285549216,3285549247,CH
-3285549248,3285549279,DE
-3285549280,3285549311,GB
-3285549312,3285549695,DE
-3285549696,3285549719,BE
-3285549720,3285549727,GB
-3285549728,3285549735,SE
-3285549736,3285549767,BE
-3285549768,3285549775,FI
-3285549776,3285549791,DE
-3285549792,3285549823,LU
-3285549824,3285549871,DE
-3285549872,3285549887,DK
-3285549888,3285549951,DE
-3285549952,3285550335,BE
+3285546752,3285550335,BE
3285550336,3285550463,GB
-3285550464,3285550527,DE
-3285550528,3285550591,IT
-3285550592,3285550847,FR
-3285550848,3285550943,IT
-3285550944,3285550975,NL
-3285550976,3285551007,BE
-3285551008,3285551039,CH
-3285551040,3285551071,DE
-3285551072,3285551103,BE
-3285551104,3285551359,DE
-3285551360,3285551391,BE
-3285551392,3285551423,DE
-3285551424,3285551487,DK
-3285551488,3285551551,BE
-3285551552,3285551615,DE
-3285551616,3285551647,GB
-3285551648,3285551679,FR
-3285551680,3285551807,GB
-3285551808,3285551839,RU
-3285551840,3285552127,BE
-3285552128,3285552191,DE
-3285552192,3285552255,ZA
-3285552256,3285552287,CZ
-3285552288,3285552319,HU
-3285552320,3285552383,GB
-3285552384,3285552511,DE
+3285550464,3285552511,BE
3285552512,3285552639,GB
-3285552640,3285552927,DE
-3285552928,3285552959,BE
-3285552960,3285553023,FR
-3285553024,3285553039,BE
-3285553040,3285553055,EG
-3285553056,3285553087,BE
-3285553088,3285553151,IT
-3285553152,3285553215,DE
-3285553216,3285553247,BE
-3285553248,3285553263,PL
-3285553264,3285553727,DE
-3285553728,3285553759,CH
-3285553760,3285553767,GB
-3285553768,3285553775,ZA
-3285553776,3285553791,FR
-3285553792,3285553855,BE
-3285553856,3285553887,ZA
-3285553888,3285553919,DE
-3285553920,3285554047,CH
-3285554048,3285554127,DE
-3285554128,3285554143,BE
-3285554144,3285554175,GB
-3285554176,3285554431,AT
-3285554432,3285554687,BE
-3285554688,3285554703,DE
-3285554704,3285554719,BE
-3285554720,3285554751,FR
-3285554752,3285554815,BE
-3285554816,3285554943,CH
-3285554944,3285555199,LU
-3285555200,3285555231,AT
-3285555232,3285555263,NL
-3285555264,3285555327,FR
-3285555328,3285555455,IL
-3285555456,3285555711,BE
-3285555712,3285555967,LU
-3285555968,3285556223,IT
-3285556224,3285556479,BE
-3285556480,3285556735,DE
-3285556736,3285556767,CH
-3285556768,3285556775,BE
-3285556776,3285556779,NL
-3285556780,3285556799,BE
-3285556800,3285556863,DE
-3285556864,3285556991,BE
-3285556992,3285557055,GB
-3285557056,3285557119,NL
-3285557120,3285557247,DE
-3285557248,3285557363,NL
-3285557364,3285557375,BE
-3285557376,3285557519,NL
-3285557520,3285557535,FI
-3285557536,3285557575,NL
-3285557576,3285557579,SE
-3285557580,3285557583,BE
-3285557584,3285557599,NL
-3285557600,3285557631,BE
-3285557632,3285557791,NL
-3285557792,3285557823,NO
-3285557824,3285557887,SE
-3285557888,3285557911,CH
-3285557912,3285557919,CZ
-3285557920,3285557951,FR
-3285557952,3285558015,DE
-3285558016,3285558271,NL
-3285558272,3285558463,BE
-3285558464,3285558591,NL
-3285558592,3285558655,BE
-3285558656,3285558783,IT
-3285558784,3285559039,GB
-3285559040,3285559167,BE
-3285559168,3285559231,NL
-3285559232,3285559295,BE
-3285559296,3285559807,SE
-3285559808,3285559839,IE
-3285559840,3285559871,CH
-3285559872,3285559887,BE
-3285559888,3285559903,SE
-3285559904,3285559919,NL
-3285559920,3285559935,SE
-3285559936,3285560063,NO
-3285560064,3285560351,SE
-3285560352,3285560383,ES
-3285560384,3285560447,SE
-3285560448,3285560479,LI
-3285560480,3285560511,CH
-3285560512,3285560575,BE
-3285560576,3285560831,DE
-3285560832,3285561215,SE
-3285561216,3285561343,NO
-3285561344,3285561407,GB
-3285561408,3285561471,PL
-3285561472,3285561599,DK
-3285561600,3285561619,NO
-3285561620,3285561623,DE
-3285561624,3285561647,BE
-3285561648,3285561663,NO
-3285561664,3285561727,BE
-3285561728,3285561791,NO
-3285561792,3285561919,BE
-3285561920,3285561951,CH
-3285561952,3285561967,NO
-3285561968,3285561983,BE
-3285561984,3285562111,FI
-3285562112,3285562367,NO
-3285562368,3285562751,FI
-3285562752,3285562783,NL
-3285562784,3285562815,BE
-3285562816,3285562879,IT
-3285562880,3285562911,FI
-3285562912,3285562943,BE
-3285562944,3285562975,DE
-3285562976,3285562991,FI
-3285562992,3285562999,BE
-3285563000,3285563007,GB
-3285563008,3285563135,SE
-3285563136,3285563391,FI
-3285563392,3285563455,BE
-3285563456,3285563471,NL
-3285563472,3285563487,BE
-3285563488,3285563519,SE
-3285563520,3285563647,PL
-3285563648,3285563903,CH
-3285563904,3285564031,SE
-3285564032,3285564159,FI
-3285564160,3285564415,GB
-3285564416,3285564511,CH
-3285564512,3285564543,NO
-3285564544,3285564671,BE
-3285564672,3285564735,CH
-3285564736,3285564751,FR
-3285564752,3285564767,BE
-3285564768,3285564799,SE
-3285564800,3285564927,BE
-3285564928,3285565183,FR
-3285565184,3285565439,NL
-3285565440,3285565951,GB
-3285565952,3285566015,FR
-3285566016,3285566031,IT
-3285566032,3285566047,BE
-3285566048,3285566079,CH
-3285566080,3285566143,FR
-3285566144,3285566207,BE
-3285566208,3285566495,RU
-3285566496,3285566511,SE
-3285566512,3285566527,FI
-3285566528,3285566559,CH
-3285566560,3285566575,BE
-3285566576,3285566591,CH
-3285566592,3285566655,NL
-3285566656,3285566847,BE
-3285566848,3285566975,FR
-3285566976,3285567231,GB
-3285567232,3285567487,PT
+3285552640,3285553663,BE
+3285553664,3285553727,DE
+3285553728,3285561087,BE
+3285561088,3285561103,SE
+3285561104,3285567487,BE
3285567488,3285568511,NL
-3285568512,3285568671,DE
-3285568672,3285568703,CH
-3285568704,3285568751,BE
-3285568752,3285569023,DE
-3285569024,3285569407,BE
-3285569408,3285569535,GB
-3285569536,3285569791,DE
-3285569792,3285570047,FI
-3285570048,3285570175,FR
-3285570176,3285570207,BE
-3285570208,3285570223,PL
-3285570224,3285570239,NL
-3285570240,3285570559,BE
-3285570560,3285570815,SE
-3285570816,3285571071,IT
-3285571072,3285571327,DE
-3285571328,3285571583,FI
-3285571584,3285571711,FR
-3285571712,3285571775,SE
-3285571776,3285571807,BE
-3285571808,3285571839,DE
-3285571840,3285571903,BE
-3285571904,3285571967,SE
-3285571968,3285572095,BE
-3285572096,3285572223,DE
-3285572224,3285572335,BE
-3285572336,3285572351,ES
-3285572352,3285572367,IR
-3285572368,3285572383,ES
-3285572384,3285572447,BE
-3285572448,3285572479,CH
-3285572480,3285572607,FR
-3285572608,3285572863,DK
-3285572864,3285573119,IT
-3285573120,3285573375,SE
-3285573376,3285573535,BE
-3285573536,3285573567,CH
-3285573568,3285573631,FR
-3285573632,3285573887,NL
-3285573888,3285573951,IL
-3285573952,3285574143,BE
-3285574144,3285574399,RU
-3285574400,3285574655,IL
-3285574656,3285574911,GB
-3285574912,3285575167,EU
-3285575168,3285575423,ES
-3285575424,3285575679,IL
-3285575680,3285575935,BE
-3285575936,3285575999,DK
-3285576000,3285576063,BE
-3285576064,3285576127,FR
-3285576128,3285576159,BE
-3285576160,3285576191,DK
-3285576192,3285576447,BE
-3285576448,3285576703,CZ
-3285576704,3285576959,HU
-3285576960,3285577215,BE
-3285577216,3285577471,ZA
-3285577472,3285577599,IT
-3285577600,3285577983,BE
+3285568512,3285577983,BE
3285577984,3285578111,IT
-3285578112,3285578239,DE
-3285578240,3285578367,BE
-3285578368,3285578431,FR
-3285578432,3285578495,BE
-3285578496,3285578751,DE
-3285578752,3285579007,BE
-3285579008,3285579519,ES
-3285579520,3285579775,FR
-3285579776,3285580031,US
-3285580032,3285580287,HU
+3285578112,3285580287,BE
3285580288,3285580415,DE
-3285580416,3285580543,BE
-3285580544,3285580547,NL
-3285580548,3285580651,BE
-3285580652,3285580655,SE
-3285580656,3285580799,BE
-3285580800,3285580831,SE
-3285580832,3285580847,PL
-3285580848,3285580927,BE
-3285580928,3285581055,ZA
-3285581056,3285581503,BE
-3285581504,3285581567,AT
-3285581568,3285581599,FR
-3285581600,3285581615,GB
-3285581616,3285581695,FR
-3285581696,3285581759,LV
-3285581760,3285581823,FR
-3285581824,3285595135,DE
-3285595136,3285595167,CZ
-3285595168,3285595175,US
-3285595176,3285595263,DE
-3285595264,3285595423,US
-3285595424,3285596159,DE
-3285596160,3285596191,US
-3285596192,3285596223,DE
-3285596224,3285596255,US
-3285596256,3285596287,DE
-3285596288,3285596319,US
-3285596320,3285596351,DE
-3285596352,3285596383,FR
-3285596384,3285597183,DE
-3285597184,3285597215,US
-3285597216,3285606399,DE
+3285580416,3285581823,BE
+3285581824,3285606399,DE
3285606400,3285614591,GB
3285614592,3285630975,TR
3285630976,3285633023,UA
@@ -135758,13 +69077,7 @@
3285647360,3285712895,DK
3285712896,3285721087,GB
3285721088,3285729279,SE
-3285729280,3285734143,CH
-3285734144,3285734159,GB
-3285734160,3285734335,CH
-3285734336,3285734351,LI
-3285734352,3285734399,CH
-3285734400,3285734655,LI
-3285734656,3285737471,CH
+3285729280,3285737471,CH
3285737472,3285745663,PL
3285745664,3285753855,IT
3285753856,3285762047,LV
@@ -135772,11 +69085,11 @@
3285762560,3285763071,RU
3285763072,3285763583,GB
3285763584,3285764095,DE
-3285764096,3285765119,RU
+3285764096,3285764607,RU
3285765120,3285766143,UA
3285766144,3285766655,DE
3285766656,3285767679,UA
-3285767680,3285768191,EU
+3285767680,3285768191,FR
3285768192,3285768703,RU
3285768704,3285768959,RO
3285768960,3285769215,PL
@@ -135792,7 +69105,6 @@
3285772032,3285772287,SE
3285772288,3285772543,TR
3285772544,3285772799,LT
-3285772800,3285773055,MT
3285773056,3285773311,DE
3285773312,3285773567,LV
3285773568,3285773823,KG
@@ -135803,9 +69115,7 @@
3285774848,3285775103,FR
3285775104,3285775359,GB
3285775360,3285775615,RU
-3285775616,3285775871,NG
3285775872,3285776127,NL
-3285776128,3285776383,RO
3285776384,3285776639,UA
3285776640,3285776895,FR
3285776896,3285777151,PL
@@ -135820,259 +69130,35 @@
3285860352,3285868543,FI
3285868544,3285876735,IE
3285876736,3285909503,RU
-3285909504,3285910271,GB
-3285910272,3285910303,ES
-3285910304,3285910319,GB
-3285910320,3285910327,EU
-3285910328,3285910331,GB
-3285910332,3285910335,EU
3285910336,3285910399,ES
-3285910400,3285910407,IT
-3285910408,3285910415,GB
-3285910416,3285910431,EU
-3285910432,3285910463,NG
-3285910464,3285910527,ES
-3285910528,3285911551,GB
-3285911552,3285912575,EU
-3285912576,3285913087,GB
-3285913088,3285913215,ES
-3285913216,3285913279,GB
-3285913280,3285913343,ES
-3285913344,3285913599,GB
-3285913600,3285915647,EU
-3285915648,3285915903,GB
-3285915904,3285916159,AT
-3285916160,3285916415,FR
-3285916416,3285916671,YE
-3285916672,3285916703,BH
-3285916704,3285916711,DE
-3285916712,3285916719,CY
-3285916720,3285916735,ES
-3285916736,3285916799,GB
-3285916800,3285916815,EU
-3285916816,3285916831,GB
-3285916832,3285916845,DE
-3285916846,3285916847,EU
-3285916848,3285916855,IT
-3285916856,3285916863,GB
-3285916864,3285916927,EU
-3285916928,3285917183,GB
-3285917184,3285917439,ES
-3285917440,3285917695,YE
-3285917696,3285918719,EU
-3285918720,3285918975,SE
-3285918976,3285919231,YE
-3285919232,3285919487,GB
-3285919488,3285919743,UA
+3285911552,3285912447,GB
+3285913648,3285913655,IE
+3285913656,3285913695,GB
+3285917696,3285917703,GB
+3285917728,3285917759,GB
3285919744,3285921791,QA
-3285921792,3285921823,CZ
-3285921824,3285922047,GB
3285922048,3285922303,FR
-3285922304,3285922559,DE
-3285922560,3285922815,GB
-3285922816,3285923327,KW
-3285923328,3285924415,ES
-3285924416,3285924431,DE
-3285924432,3285924479,GB
-3285924480,3285924863,ES
-3285924864,3285925887,EU
-3285925888,3285926143,NL
-3285926144,3285926399,YE
-3285926400,3285926407,GB
-3285926408,3285926415,ES
-3285926416,3285926431,GB
3285926432,3285926463,CH
-3285926464,3285926527,GB
-3285926528,3285926591,EU
-3285926592,3285926623,FR
-3285926624,3285926631,US
-3285926632,3285926671,GB
-3285926672,3285926687,EU
-3285926688,3285926719,IN
-3285926720,3285926783,NL
-3285926784,3285926911,GB
-3285926912,3285927423,DE
-3285927424,3285927679,GB
-3285927680,3285927935,IR
-3285927936,3285927951,EU
-3285927952,3285927999,GB
-3285928000,3285928063,EU
-3285928064,3285928191,ES
-3285928192,3285928207,PL
-3285928208,3285928223,GB
-3285928224,3285928255,DE
-3285928256,3285928271,GB
-3285928272,3285928287,DE
-3285928288,3285928383,GB
-3285928384,3285928447,EU
-3285928448,3285928959,ES
-3285928960,3285929983,EU
-3285929984,3285930511,GB
-3285930512,3285930527,EU
-3285930528,3285930559,GB
-3285930560,3285930575,ES
-3285930576,3285930623,GB
-3285930624,3285930631,BE
-3285930632,3285930639,GB
-3285930640,3285930655,ES
-3285930656,3285930671,NL
-3285930672,3285930679,BE
-3285930680,3285930687,DE
-3285930688,3285930703,GB
-3285930704,3285930719,EU
-3285930720,3285931263,GB
-3285931264,3285932031,EU
-3285932032,3285932287,NL
-3285932288,3285932799,GB
-3285932800,3285933055,ES
-3285933056,3285933311,DE
-3285933312,3285933567,ES
-3285933568,3285934079,DE
-3285934080,3285934591,GB
-3285934592,3285934847,ES
-3285934848,3285935679,GB
-3285935680,3285935743,EU
-3285935744,3285936127,GB
-3285936128,3285938175,EU
-3285938176,3285938431,ES
-3285938432,3285938511,GB
-3285938512,3285938559,EU
-3285938560,3285938607,GB
-3285938608,3285938623,FR
-3285938624,3285938631,NG
-3285938632,3285938639,ES
-3285938640,3285938655,GB
-3285938656,3285938687,DE
-3285938688,3285938943,ES
-3285938944,3285938951,NG
-3285938952,3285938959,NL
-3285938960,3285938975,US
-3285938976,3285939007,GB
-3285939008,3285939071,ES
-3285939072,3285939087,GB
-3285939088,3285939103,FR
-3285939104,3285939119,GB
-3285939120,3285939127,ES
-3285939128,3285939135,EU
+3285926592,3285926623,DE
+3285928304,3285928311,GB
+3285931528,3285931535,DE
+3285935872,3285936127,GB
3285939136,3285939175,GB
-3285939176,3285939183,EU
3285939184,3285939191,GB
-3285939192,3285939199,EU
-3285939200,3285939711,ES
-3285939712,3285939775,GB
-3285939776,3285939839,EU
+3285939744,3285939759,GB
3285939840,3285939967,GB
-3285939968,3285939975,NL
-3285939976,3285939983,ES
-3285939984,3285939999,GB
-3285940000,3285940223,EU
-3285940224,3285940479,ES
-3285940480,3285941247,GB
-3285941248,3285941503,EU
-3285941504,3285942287,GB
-3285942288,3285942303,NL
-3285942304,3285942319,FR
-3285942320,3285942527,EU
-3285942528,3285942783,PT
-3285942784,3285943039,ES
-3285943040,3285943295,SE
-3285943296,3285943551,ES
-3285943552,3285943647,GB
-3285943648,3285943679,NG
-3285943680,3285944319,GB
-3285944320,3285944831,US
-3285944832,3285945343,DK
-3285945344,3285945599,ES
-3285945600,3285945615,GB
-3285945616,3285945663,EU
-3285945664,3285945695,FR
-3285945696,3285945759,GB
-3285945760,3285945855,EU
-3285945856,3285946111,GB
+3285941248,3285941503,ES
3285946112,3285946367,ES
-3285946368,3285946879,GB
-3285946880,3285947391,NL
-3285947392,3285947647,DE
-3285947648,3285947903,ES
-3285947904,3285948159,NL
-3285948160,3285948671,GB
-3285948672,3285948927,SA
-3285948928,3285949183,NG
-3285949184,3285949439,ES
-3285949440,3285949695,DE
-3285949696,3285949823,ES
-3285949824,3285949855,EU
3285949856,3285949887,ES
-3285949888,3285949903,GB
-3285949904,3285949951,EU
-3285949952,3285950463,ES
-3285950464,3285950719,GB
-3285950720,3285950783,US
-3285950784,3285950799,GB
-3285950800,3285950943,EU
-3285950944,3285950975,GB
-3285950976,3285951231,NL
-3285951232,3285951487,IT
-3285951488,3285951999,GB
-3285952000,3285952255,IT
-3285952256,3285952511,SA
-3285952512,3285953535,CA
+3285950208,3285950463,IT
+3285951648,3285951679,ES
3285953536,3285954047,PK
-3285954048,3285954559,GB
-3285954560,3285954815,SA
-3285954816,3285955583,GB
-3285955584,3285955839,DE
-3285955840,3285956095,ES
-3285956096,3285956351,FR
-3285956352,3285956607,DE
-3285956608,3285956863,GB
-3285956864,3285957631,PT
-3285957632,3285957887,PL
-3285957888,3285958143,GB
-3285958144,3285958399,DE
-3285958400,3285958655,NL
-3285958656,3285958671,GB
-3285958672,3285958783,EU
-3285958784,3285958799,GB
-3285958800,3285958847,EU
-3285958848,3285958895,NL
-3285958896,3285959039,GB
-3285959040,3285959167,DE
-3285959168,3285959423,NL
-3285959424,3285959935,GB
-3285959936,3285960191,ES
-3285960192,3285960447,FR
-3285960448,3285960703,GB
-3285960704,3285961727,CA
-3285961728,3285961983,NL
-3285961984,3285962495,ES
-3285962496,3285963775,DE
-3285963776,3285964287,GB
-3285964288,3285964799,FR
-3285964800,3285966335,GB
-3285966336,3285966847,EU
-3285966848,3285967103,FR
-3285967104,3285967359,PL
-3285967360,3285967615,ES
-3285967616,3285968383,BE
-3285968384,3285968639,ES
-3285968640,3285968895,PL
-3285968896,3285970943,CA
-3285970944,3285971199,EU
-3285971200,3285971455,FR
-3285971456,3285971711,DE
-3285971712,3285971967,GB
-3285971968,3285972223,ES
-3285972224,3285972479,GB
-3285972480,3285972735,PL
-3285972736,3285972991,FR
-3285972992,3285973095,GB
-3285973096,3285973247,EU
-3285973248,3285973767,GB
-3285973768,3285973791,EU
-3285973792,3285973823,GB
-3285973824,3285974015,EU
-3285974016,3285975039,GB
+3285954048,3285954303,AE
+3285954560,3285954567,GB
+3285954568,3285954575,PL
+3285954576,3285954815,GB
+3285962752,3285963775,DE
+3285964800,3285964927,DE
3285975040,3286013695,FR
3286013696,3286013951,RE
3286013952,3286106111,FR
@@ -136090,17 +69176,7 @@
3286138880,3286155263,RU
3286155264,3286171647,DE
3286171648,3286237183,IT
-3286237184,3286243583,GB
-3286243584,3286243839,US
-3286243840,3286245887,GB
-3286245888,3286246143,US
-3286246144,3286254167,GB
-3286254168,3286254175,NL
-3286254176,3286279423,GB
-3286279424,3286279679,US
-3286279680,3286291807,GB
-3286291808,3286291823,US
-3286291824,3286302719,GB
+3286237184,3286302719,GB
3286302720,3286310911,NO
3286310912,3286311423,CH
3286311424,3286311935,NL
@@ -136117,8 +69193,6 @@
3286317056,3286317567,RU
3286317568,3286318079,RO
3286318080,3286318591,CH
-3286318592,3286319103,A2
-3286319104,3286320127,RO
3286320128,3286321151,PL
3286321152,3286322175,CZ
3286322176,3286323199,PL
@@ -136145,7 +69219,6 @@
3286345728,3286346751,IT
3286346752,3286347775,UA
3286347776,3286348799,PA
-3286348800,3286349823,PL
3286349824,3286350847,SE
3286350848,3286351871,GB
3286351872,3286352895,CH
@@ -136165,22 +69238,16 @@
3286367232,3286368255,BG
3286368256,3286376447,CH
3286376448,3286384639,GB
-3286384640,3286397607,DE
-3286397608,3286397615,A2
-3286397616,3286399759,DE
-3286399760,3286399807,GB
-3286399808,3286399815,DE
-3286399816,3286399831,GB
-3286399832,3286399839,DE
-3286399840,3286399999,GB
-3286400000,3286401023,DE
-3286401024,3286404095,GB
-3286404096,3286405375,GG
+3286384640,3286401023,DE
+3286401024,3286403071,GB
+3286403072,3286403327,GG
+3286403328,3286404863,GB
+3286404864,3286405375,GG
3286405376,3286405887,GB
-3286405888,3286407167,GG
-3286407168,3286407679,GB
-3286407680,3286407935,GG
-3286407936,3286409215,GB
+3286405888,3286406143,GG
+3286406144,3286406399,GB
+3286406400,3286406655,GG
+3286406656,3286409215,GB
3286409216,3286417407,DE
3286417408,3286417663,UA
3286417664,3286417919,IT
@@ -136208,22 +69275,16 @@
3286423808,3286424063,CZ
3286424064,3286424319,LV
3286424320,3286424575,FR
-3286424576,3286424831,RU
+3286424576,3286424831,UA
3286424832,3286425087,TR
3286425088,3286425343,RU
3286425344,3286425599,IT
3286425600,3286433791,KW
3286433792,3286499327,DE
-3286499328,3286519039,HU
-3286519040,3286519295,RO
-3286519296,3286564863,HU
-3286564864,3286566143,AE
-3286566144,3286566271,TZ
-3286566272,3286566655,AE
+3286499328,3286564863,HU
+3286564864,3286566655,AE
3286566656,3286567423,KW
-3286567424,3286571007,AE
-3286571008,3286571775,KW
-3286571776,3286630399,AE
+3286567424,3286630399,AE
3286630400,3286638591,BG
3286638592,3286646783,AT
3286646784,3286654975,RU
@@ -136238,7 +69299,6 @@
3286657024,3286657279,BE
3286657280,3286657535,ES
3286657536,3286657791,HU
-3286657792,3286658047,RU
3286658048,3286658303,US
3286658304,3286658559,RU
3286658560,3286658815,NL
@@ -136260,65 +69320,13 @@
3286662656,3286662911,DE
3286662912,3286671359,UA
3286671360,3286679551,AT
-3286679552,3286680063,IT
-3286680064,3286680071,US
-3286680072,3286680079,AR
-3286680080,3286681631,IT
-3286681632,3286681647,DE
-3286681648,3286681651,IT
-3286681652,3286681655,TN
-3286681656,3286681659,IT
-3286681660,3286681663,ES
-3286681664,3286681695,FR
-3286681696,3286681699,ES
-3286681700,3286681711,IT
-3286681712,3286681727,CH
-3286681728,3286681743,HK
-3286681744,3286681751,CH
-3286681752,3286681767,IT
-3286681768,3286681775,DE
-3286681776,3286681815,IT
-3286681816,3286681823,FR
-3286681824,3286681839,IT
-3286681840,3286681847,GR
-3286681848,3286682463,IT
-3286682464,3286682495,RO
-3286682496,3286682623,IT
-3286682624,3286682879,SM
-3286682880,3286695935,IT
+3286679552,3286695935,IT
3286695936,3286761471,DK
-3286761472,3286761727,DE
-3286761728,3286769663,GB
-3286769664,3286769919,DE
-3286769920,3286773759,GB
+3286761472,3286773759,GB
3286773760,3286777855,DE
-3286777856,3286781951,FR
-3286781952,3286782207,GB
-3286782208,3286782463,DE
-3286782464,3286782535,GB
-3286782536,3286782543,FR
-3286782544,3286782575,GB
-3286782576,3286782583,DE
-3286782584,3286783599,GB
-3286783600,3286783615,CH
-3286783616,3286783679,DE
-3286783680,3286784511,GB
-3286784512,3286784767,CH
-3286784768,3286785023,DE
-3286785024,3286787071,GB
-3286787072,3286787327,FR
-3286787328,3286787583,DE
-3286787584,3286788095,GB
-3286788096,3286788351,DE
-3286788352,3286788607,FR
-3286788608,3286789119,GB
-3286789120,3286789631,DE
-3286789632,3286790143,FR
-3286790144,3286790655,GB
-3286790656,3286790911,DE
-3286790912,3286791679,GB
-3286791680,3286791935,AT
-3286791936,3286794239,GB
+3286777856,3286778111,GB
+3286778112,3286781951,FR
+3286781952,3286794239,GB
3286794240,3286888447,DE
3286888448,3286889471,IE
3286889472,3286892543,DE
@@ -136333,7 +69341,6 @@
3286897152,3286897663,AT
3286897664,3286898175,PL
3286898176,3286898687,HR
-3286898688,3286899199,EU
3286899200,3286899711,IL
3286899712,3286900223,DE
3286900224,3286900735,RO
@@ -136362,23 +69369,20 @@
3286907648,3286907903,ES
3286907904,3286908159,CH
3286908160,3286908415,ES
-3286908416,3286908671,FR
3286908672,3286908927,PL
3286908928,3286909951,CH
3286909952,3286913023,UA
-3286913024,3286913535,DE
+3286913024,3286913535,GB
3286914048,3286915071,BG
3286915072,3286916095,FR
3286917120,3286918143,RU
3286918144,3286919167,AT
3286919168,3286920191,DE
-3286920192,3286921215,RU
+3286920192,3286920447,RU
3286921216,3286922239,UA
3286922240,3286923263,GB
3286923264,3286924287,CM
-3286924288,3286925311,UA
3286925312,3286925823,DE
-3286925824,3286926079,RO
3286926080,3286926335,LV
3286926336,3286926591,UA
3286926592,3286926847,DE
@@ -136390,7 +69394,6 @@
3286928128,3286928383,DE
3286928640,3286928895,PL
3286928896,3286929151,FI
-3286929152,3286929407,DE
3286929408,3286929663,LV
3286929664,3286929919,BE
3286929920,3286930175,SE
@@ -136403,9 +69406,8 @@
3286931712,3286931967,GB
3286931968,3286932223,FR
3286932224,3286932479,DK
-3286932480,3286932735,GB
3286932736,3286932991,AT
-3286932992,3286933503,IL
+3286932992,3286933247,IL
3286933504,3286933759,DK
3286933760,3286934015,RO
3286934016,3286934271,BE
@@ -136414,7 +69416,6 @@
3286934784,3286935039,TR
3286935040,3286935551,ES
3286935552,3286935807,EG
-3286935808,3286936063,RO
3286936064,3286936319,RU
3286936320,3286936575,IT
3286936576,3286936831,RO
@@ -136426,16 +69427,14 @@
3286938112,3286938367,DE
3286938368,3286938623,ES
3286938624,3286938879,CH
-3286938880,3286939391,RO
+3286939136,3286939391,RO
3286939392,3286939647,DE
3286939648,3286939903,BE
3286939904,3286940159,EG
3286940160,3286940415,BE
3286940416,3286940671,NL
3286940672,3286940927,RO
-3286940928,3286941183,PL
3286941184,3286941439,RU
-3286941440,3286941695,RO
3286941696,3286942719,DE
3286942720,3286943743,FI
3286943744,3286944767,UA
@@ -136450,29 +69449,22 @@
3286952960,3286953983,BG
3286953984,3286955007,GB
3286955008,3286956031,DE
-3286956032,3286957055,A2
+3286956032,3286957055,FR
3286957056,3286958079,EG
3286958080,3287023615,ES
-3287023616,3287097343,FI
-3287097344,3287097599,AX
-3287097600,3287154687,FI
+3287023616,3287154687,FI
3287154688,3287162879,BE
-3287162880,3287164927,US
-3287164928,3287165183,DE
-3287165184,3287165439,US
+3287162880,3287165439,DE
3287165440,3287165695,SA
-3287165696,3287165951,US
+3287165696,3287165951,DE
3287165952,3287166207,SA
-3287166208,3287166975,US
-3287166976,3287167999,SA
-3287168000,3287168511,US
-3287168512,3287168767,EU
+3287166208,3287166975,DE
+3287166976,3287167743,SA
+3287167744,3287168767,DE
3287168768,3287169279,SA
-3287169280,3287169535,US
+3287169280,3287169535,DE
3287169536,3287169791,SA
-3287169792,3287170303,US
-3287170304,3287170559,DE
-3287170560,3287170815,US
+3287169792,3287170815,DE
3287170816,3287171071,GB
3287171072,3287171583,LT
3287171584,3287172095,PL
@@ -136481,35 +69473,27 @@
3287173120,3287173631,RU
3287173632,3287174143,NL
3287174144,3287174655,SE
-3287174656,3287175167,GB
3287175168,3287176191,RO
3287176192,3287176703,BG
3287176704,3287177215,NL
3287177216,3287178239,RO
3287178240,3287178751,UA
-3287178752,3287179263,RO
3287179264,3287180287,FR
3287180288,3287181311,RU
3287181312,3287182335,UZ
3287182336,3287185407,UA
-3287185408,3287186431,SE
-3287186432,3287187455,FI
3287187456,3287196671,DE
3287196672,3287198719,PL
3287198720,3287199743,GB
3287199744,3287201791,UA
3287201792,3287202815,PL
3287202816,3287203839,UA
-3287203840,3287204895,FI
-3287204896,3287204951,EE
-3287204952,3287204959,FI
-3287204960,3287204991,EE
-3287204992,3287212031,FI
+3287203840,3287212031,FI
3287212032,3287212543,DE
3287212544,3287212799,FR
3287212800,3287213311,PL
3287213312,3287213567,FR
-3287213568,3287214079,RU
+3287213568,3287213823,RU
3287214080,3287214335,GB
3287214336,3287214591,DE
3287214592,3287214847,NO
@@ -136519,28 +69503,19 @@
3287215616,3287215871,DE
3287215872,3287216127,RU
3287216128,3287216639,GB
-3287216640,3287216895,MD
3287217152,3287217407,NL
3287217408,3287217663,PL
3287217664,3287217919,RU
-3287217920,3287218175,PL
-3287218176,3287218431,DE
3287218432,3287218687,GB
3287218688,3287218943,RU
3287218944,3287219199,FR
3287219200,3287219455,DE
3287219456,3287219711,CH
3287219712,3287220223,SE
-3287220224,3287259375,RU
-3287259376,3287259383,DK
-3287259384,3287271119,RU
-3287271120,3287271127,UZ
-3287271128,3287285759,RU
+3287220224,3287285759,RU
3287285760,3287416831,NL
3287416832,3287425023,RU
-3287425024,3287427759,SE
-3287427760,3287427775,GB
-3287427776,3287433215,SE
+3287425024,3287433215,SE
3287433216,3287433727,PL
3287433728,3287434239,DE
3287434240,3287434751,PL
@@ -136557,13 +69532,10 @@
3287439872,3287440895,PL
3287440896,3287441407,UA
3287441408,3287442431,NL
-3287442432,3287442943,PL
-3287442944,3287443967,DE
+3287443456,3287443967,DE
3287443968,3287444479,BG
3287444480,3287444991,PL
-3287444992,3287445503,DE
-3287445504,3287446015,GB
-3287446016,3287446527,UA
+3287445504,3287446527,UA
3287446528,3287447039,PL
3287447040,3287447551,IL
3287447552,3287448063,DK
@@ -136598,12 +69570,10 @@
3287461376,3287461631,CH
3287461632,3287461887,AT
3287461888,3287462143,PL
-3287462144,3287462399,SA
3287462400,3287462655,BE
3287462656,3287462911,UA
3287462912,3287463167,FR
3287463168,3287463423,IT
-3287463424,3287463679,RO
3287463680,3287463935,PL
3287463936,3287464191,AT
3287464192,3287464447,SK
@@ -136626,26 +69596,13 @@
3287479296,3287480319,RO
3287480320,3287481343,AT
3287481344,3287482367,PL
-3287482368,3287499439,DE
-3287499440,3287499471,GB
-3287499472,3287499487,DE
-3287499488,3287499503,GB
-3287499504,3287507983,DE
-3287507984,3287507991,FR
-3287507992,3287515375,DE
-3287515376,3287515383,CZ
-3287515384,3287524095,DE
-3287524096,3287524351,GB
-3287524352,3287542815,DE
-3287542816,3287542831,US
-3287542832,3287548927,DE
+3287482368,3287548927,DE
3287548928,3287549439,UA
3287549440,3287549951,SE
3287549952,3287550463,UA
3287550464,3287550975,DE
3287550976,3287551487,LT
3287552000,3287552511,GB
-3287552512,3287553023,RO
3287553024,3287553535,FR
3287553536,3287554047,IL
3287554048,3287554559,RU
@@ -136654,9 +69611,7 @@
3287555584,3287556095,FR
3287556096,3287564287,TR
3287564288,3287572479,FI
-3287572480,3287580575,DE
-3287580576,3287580607,LI
-3287580608,3287580671,DE
+3287572480,3287580671,DE
3287580672,3287588863,LV
3287588864,3287597055,BE
3287597056,3287605247,GI
@@ -136667,32 +69622,26 @@
3287632384,3287632895,SE
3287632896,3287633407,RU
3287633408,3287633919,SK
-3287633920,3287634431,GB
+3287633920,3287634431,UA
3287634432,3287634943,RO
3287634944,3287635455,PL
3287635456,3287635967,DE
-3287635968,3287636479,RO
3287636480,3287636991,IE
3287636992,3287637503,AT
3287637504,3287638015,PL
3287638528,3287639039,DE
3287639040,3287639551,GB
-3287639552,3287640063,RU
3287640064,3287640575,PL
3287640576,3287641087,SI
-3287641088,3287641599,A2
-3287641600,3287642111,FI
3287642112,3287642623,UA
3287642624,3287643135,BE
3287643136,3287643647,IT
3287643648,3287644671,UA
3287644672,3287645183,NL
-3287645184,3287646207,EU
3287646208,3287662591,PT
3287662592,3287662847,DE
3287662848,3287663103,DK
3287663104,3287663359,LV
-3287663360,3287663615,GB
3287663616,3287663871,ES
3287663872,3287664127,PT
3287664128,3287664383,PL
@@ -136702,7 +69651,6 @@
3287665152,3287665407,NO
3287665408,3287665919,PL
3287665920,3287666431,RU
-3287666432,3287666687,DK
3287666688,3287666943,SI
3287666944,3287667199,CZ
3287667200,3287667455,DK
@@ -136733,11 +69681,7 @@
3287673600,3287673855,GB
3287673856,3287674111,NL
3287674112,3287674367,CH
-3287674368,3287674623,DE
-3287674624,3287674879,RO
3287674880,3287675135,SE
-3287675136,3287675391,GB
-3287675392,3287675647,SE
3287675648,3287675903,DE
3287675904,3287676159,BE
3287676160,3287676415,DE
@@ -136761,28 +69705,19 @@
3287705600,3287706111,SA
3287706112,3287706623,RU
3287706624,3287707135,GB
-3287707136,3287707647,FR
3287707648,3287708159,BE
3287708160,3287708671,NL
-3287708672,3287709183,EU
3287709184,3287709695,RU
3287709696,3287710207,SE
3287710208,3287710719,RU
3287710720,3287711231,UA
3287711232,3287711743,PL
-3287711744,3287718911,GB
-3287718912,3287719167,FR
-3287719168,3287719423,GB
-3287719424,3287719679,FR
-3287719680,3287719935,GB
+3287711744,3287719935,GB
3287719936,3287728127,DE
3287728128,3287729407,IT
-3287729408,3287729663,SE
3287729664,3287729919,DK
3287729920,3287730175,HU
-3287730176,3287730431,PL
-3287730432,3287730687,GB
-3287730688,3287732223,DE
+3287730176,3287732223,DE
3287732224,3287734271,IT
3287734272,3287734527,PL
3287734528,3287734783,UA
@@ -136792,18 +69727,15 @@
3287736832,3287737343,LV
3287737344,3287737855,GB
3287737856,3287738367,FR
-3287738368,3287738879,CH
+3287738368,3287738879,GB
3287738880,3287739391,DE
3287739392,3287739903,NL
3287739904,3287740415,PT
3287740416,3287740927,BG
3287740928,3287741439,RO
3287741440,3287741951,CH
-3287741952,3287742463,RO
-3287742464,3287742975,RU
3287742976,3287743487,RO
3287743488,3287743999,DE
-3287744000,3287744511,FR
3287744512,3287810047,DE
3287810048,3287818239,FR
3287818240,3287826431,AT
@@ -136843,19 +69775,12 @@
3287851008,3287859199,UA
3287859200,3287859455,GB
3287859456,3287859711,FK
-3287859712,3287859967,EU
3287859968,3287860479,GB
-3287860480,3287861247,EU
3287861248,3287862015,GB
-3287862016,3287863807,EU
3287863808,3287864063,GB
-3287864064,3287866383,EU
3287866384,3287866439,GB
-3287866440,3287866495,EU
3287866496,3287866591,GB
-3287866592,3287866607,EU
3287866608,3287866623,GB
-3287866624,3287867391,EU
3287867392,3287867903,UA
3287867904,3287868415,PL
3287868416,3287868927,RO
@@ -136864,7 +69789,6 @@
3287869952,3287870463,UA
3287870464,3287870975,RU
3287870976,3287871487,NL
-3287872000,3287872511,RU
3287872512,3287873023,GB
3287873024,3287873535,PL
3287873536,3287874047,RU
@@ -136900,7 +69824,6 @@
3287956480,3287956735,BG
3287956736,3287956991,SE
3287956992,3287957247,UA
-3287957248,3287957503,GB
3287957504,3287965695,AM
3287965696,3287973887,RS
3287973888,3287982079,CZ
@@ -136909,32 +69832,13 @@
3287998464,3288006655,IT
3288006656,3288072191,GR
3288072192,3288088575,SE
-3288088576,3288102543,RS
-3288102544,3288102551,DK
-3288102552,3288104959,RS
-3288104960,3288143615,DE
-3288143616,3288143871,CH
-3288143872,3288145663,DE
-3288145664,3288146175,CH
-3288146176,3288150015,DE
-3288150016,3288150103,NL
-3288150104,3288150271,DE
-3288150272,3288150359,NL
-3288150360,3288150495,DE
-3288150496,3288150591,NL
-3288150592,3288150783,DE
-3288150784,3288150871,NL
-3288150872,3288150911,DE
-3288150912,3288150975,NL
-3288150976,3288151039,DE
-3288151040,3288151551,NL
-3288151552,3288236031,DE
+3288088576,3288104959,RS
+3288104960,3288236031,DE
3288236032,3288236543,LI
3288236544,3288237055,FR
3288237056,3288238591,RO
3288238592,3288239103,PL
3288239104,3288239615,RO
-3288239616,3288240127,UA
3288240128,3288240639,CH
3288240640,3288241151,FR
3288241152,3288241663,ES
@@ -136988,7 +69892,7 @@
3288428544,3288428799,CU
3288428800,3288429311,IN
3288429312,3288429567,ZA
-3288429568,3288430335,GH
+3288430080,3288430335,GH
3288430336,3288430591,EG
3288430592,3288432639,SC
3288432640,3288433407,ZA
@@ -137018,23 +69922,24 @@
3288467456,3288469503,BI
3288469504,3288481791,ZA
3288481792,3288482303,ZW
-3288482304,3288485631,ZA
+3288482304,3288483071,ZA
+3288483072,3288483327,ZW
+3288483328,3288485631,ZA
3288485632,3288485887,ZW
3288485888,3288489983,MA
3288489984,3288514559,ZA
3288514560,3288522751,EG
3288530944,3288532991,JM
3288532992,3288534527,PR
-3288534528,3288535039,EG
+3288534528,3288535039,MG
3288535040,3288539135,CW
-3288539136,3288543487,US
-3288543488,3288543743,AP
+3288539136,3288540415,US
+3288540416,3288540671,BR
+3288540672,3288543743,US
3288543744,3288543996,CH
-3288543997,3288543997,EU
+3288543997,3288543997,US
3288543998,3288543999,CH
-3288544000,3288544498,US
-3288544499,3288544499,EU
-3288544500,3288544767,US
+3288544000,3288544767,US
3288544768,3288545023,MX
3288545024,3288545279,FR
3288545280,3288545535,AU
@@ -137065,7 +69970,6 @@
3288569856,3288570111,CU
3288570112,3288570367,JM
3288570368,3288577023,ZA
-3288577024,3288578047,NG
3288578048,3288580095,JM
3288580096,3288588287,BB
3288588288,3288608255,ZA
@@ -137081,15 +69985,78 @@
3288758272,3288758527,EG
3288758528,3288772607,ZA
3288774656,3288774911,ZA
-3288775168,3288775679,NG
-3288776704,3289063423,ZA
-3289069568,3289070335,ZA
-3289070336,3289070591,ZW
-3289070592,3289070847,NA
-3289070848,3289071103,ZA
-3289071616,3289086975,ZA
+3288774912,3288775167,EG
+3288775168,3288777727,NG
+3288777728,3288778239,TZ
+3288778240,3288778495,ZA
+3288778496,3288778751,MU
+3288778752,3288779007,EG
+3288779008,3288779263,ZA
+3288779264,3288779775,KE
+3288779776,3288780799,NG
+3288781824,3288782591,ZA
+3288782592,3288782847,KE
+3288783872,3288784127,KE
+3288784128,3288784895,ZA
+3288787968,3288788223,EG
+3288788224,3288792831,ZA
+3288792832,3288793087,AO
+3288793088,3289004031,ZA
+3289004032,3289005055,NG
+3289005056,3289005311,TZ
+3289005312,3289014527,ZA
+3289014528,3289014783,EG
+3289014784,3289015295,ZA
+3289015296,3289015551,CM
+3289015552,3289020159,ZA
+3289020160,3289020415,UG
+3289020416,3289020671,EG
+3289020672,3289020927,ZA
+3289020928,3289021439,CI
+3289021440,3289024767,ZA
+3289024768,3289025023,GH
+3289025024,3289025535,UG
+3289026048,3289027327,ZA
+3289027328,3289027583,TZ
+3289027584,3289027839,MZ
+3289027840,3289041407,ZA
+3289041408,3289041663,NG
+3289041664,3289044991,ZA
+3289044992,3289047039,ML
+3289047040,3289048063,ZA
+3289048064,3289048319,UG
+3289048320,3289048831,ZA
+3289048832,3289049087,NG
+3289049088,3289053951,ZA
+3289053952,3289055231,NG
+3289055232,3289063423,ZA
+3289067520,3289071103,ZA
+3289071104,3289071359,SO
+3289071616,3289074431,ZA
+3289074432,3289074687,DZ
+3289074688,3289075711,ZA
+3289077760,3289078271,KE
+3289078272,3289078527,GH
+3289078528,3289081599,ZA
+3289081856,3289082111,NG
+3289082112,3289086975,ZA
3289086976,3289087231,SZ
-3289087232,3289120767,ZA
+3289087232,3289089791,ZA
+3289089792,3289090047,MZ
+3289090048,3289093631,ZA
+3289093632,3289094143,NG
+3289096192,3289100031,ZA
+3289100032,3289100287,LS
+3289102336,3289103359,NG
+3289103360,3289103615,ZA
+3289103616,3289103871,AO
+3289103872,3289104383,KE
+3289104384,3289107967,ZA
+3289108480,3289114367,ZA
+3289114368,3289114623,NG
+3289114624,3289115135,ZA
+3289115392,3289120511,ZA
+3289120512,3289120767,TZ
3289120768,3289123327,PR
3289123328,3289123583,NA
3289123584,3289123839,EG
@@ -137100,14 +70067,19 @@
3289153536,3289161727,RW
3289161728,3289169919,PR
3289169920,3289186303,MA
-3289186304,3289229311,ZA
+3289186304,3289212159,ZA
+3289212160,3289212415,MZ
+3289214976,3289215231,NG
+3289215232,3289220351,ZA
+3289221632,3289229311,ZA
3289229312,3289229567,SZ
3289229824,3289230591,ZA
-3289233408,3289319423,ZA
-3289319424,3289319679,A2
-3289319680,3289319935,ZA
-3289319936,3289320447,A2
-3289320448,3289321471,ZA
+3289233408,3289233919,ZA
+3289234176,3289235199,ZA
+3289235200,3289235455,KE
+3289237504,3289243391,ZA
+3289243392,3289243647,BI
+3289243648,3289321471,ZA
3289321472,3289325567,IN
3289325568,3289333759,SA
3289333760,3289645055,ZA
@@ -137137,64 +70109,35 @@
3290031360,3290060287,ZA
3290060288,3290060543,SZ
3290060544,3290103807,ZA
-3290103808,3290104319,JO
-3290104320,3290104831,EG
-3290104832,3290106879,VE
-3290106880,3290107135,CL
-3290107136,3290107151,CA
-3290107152,3290107167,US
-3290107168,3290107231,CA
-3290107232,3290107263,US
-3290107264,3290107311,CA
-3290107312,3290107343,US
-3290107344,3290107359,CA
-3290107360,3290107375,US
-3290107376,3290107383,CA
-3290107384,3290107391,US
-3290107392,3290107647,CA
-3290107648,3290108415,US
-3290108416,3290108671,CA
-3290108672,3290108927,US
-3290108928,3290109183,GH
-3290109184,3290109439,MU
-3290109440,3290109695,ET
-3290109696,3290110207,PR
-3290110208,3290110463,US
-3290110464,3290110719,ES
-3290110720,3290110975,DO
-3290110976,3290111487,US
-3290111488,3290111743,MX
-3290111744,3290111999,US
-3290112000,3290112143,CA
-3290112144,3290116095,US
-3290116096,3290118399,PE
-3290118400,3290120191,US
+3290103808,3290107647,US
+3290107648,3290107903,CA
+3290107904,3290111999,US
+3290112000,3290112255,CA
+3290112256,3290120191,US
3290120192,3290128383,MU
3290128384,3290136575,ZW
3290136576,3290169343,NG
3290169344,3290171135,ZA
3290171136,3290171391,SZ
-3290171392,3290171647,ZA
+3290171392,3290171903,ZA
3290171904,3290172159,NG
3290172160,3290172415,KE
3290172416,3290181631,ZA
-3290181632,3290181951,PR
-3290181952,3290181959,US
-3290181960,3290181967,PR
-3290181968,3290182031,US
-3290182032,3290182032,PR
-3290182033,3290182047,US
-3290182048,3290182078,PR
-3290182079,3290182143,US
-3290182144,3290182335,PR
-3290182336,3290182399,US
-3290182400,3290185727,PR
+3290181632,3290181887,US
+3290181888,3290182911,PR
+3290182912,3290183167,US
+3290183168,3290183423,PR
+3290183424,3290183679,US
+3290183680,3290184959,PR
+3290184960,3290185215,US
+3290185216,3290185727,PR
3290185728,3290226687,ZA
3290226688,3290230783,MZ
3290230784,3290234879,BF
3290234880,3290243071,ZA
3290243072,3290245119,ZW
3290245120,3290246143,DZ
+3290246144,3290247167,NG
3290247168,3290249215,TZ
3290249216,3290251263,ZA
3290251264,3290259455,TT
@@ -137210,9 +70153,7 @@
3290447872,3290456063,AR
3290456064,3290460159,MZ
3290460160,3290464255,ML
-3290464256,3290471487,PR
-3290471488,3290471551,DO
-3290471552,3290472447,PR
+3290464256,3290472447,PR
3290472448,3290480639,ZA
3290480640,3290482687,AO
3290482688,3290484735,CF
@@ -137228,14 +70169,15 @@
3290955776,3290980351,CR
3290980352,3290984447,ZA
3290988544,3290992639,KE
+3290992640,3290996735,GH
+3290996736,3291000831,NG
3291004928,3291021311,NG
3291021312,3291029503,ZA
-3291029504,3291033343,TZ
-3291033344,3291033599,KE
-3291033600,3291037695,TZ
+3291029504,3291037695,TZ
3291045888,3291078655,ZA
3291078656,3291086847,DZ
3291086848,3291103231,PR
+3291103232,3291119615,ZA
3291152384,3291168767,ZA
3291168768,3291176959,TZ
3291176960,3291185151,ZW
@@ -137291,7 +70233,6 @@
3291215616,3291215871,BF
3291215872,3291216127,KE
3291216128,3291216383,LS
-3291216384,3291216639,AO
3291216640,3291216895,NG
3291217920,3291230207,ZA
3291230208,3291234303,GH
@@ -137304,22 +70245,17 @@
3291279360,3291283455,RW
3291283456,3291287551,NA
3291287552,3291291647,ZA
-3291291648,3291293375,TZ
-3291293376,3291293439,NG
-3291293440,3291293951,TZ
-3291293952,3291294079,KE
-3291294080,3291295743,TZ
+3291291648,3291295743,TZ
3291295744,3291299839,NG
-3291299840,3291316223,ZA
+3291299840,3291315199,ZA
+3291315200,3291316223,UG
3291316224,3291324415,TZ
3291324416,3291325439,AO
3291325440,3291326463,BW
3291326464,3291330559,ZA
3291330560,3291331583,TZ
3291331584,3291332607,MW
-3291332608,3291332615,ZA
-3291332616,3291332863,NG
-3291332864,3291348991,ZA
+3291332608,3291348991,ZA
3291348992,3291353087,MZ
3291353088,3291353343,KE
3291353344,3291353599,EG
@@ -137357,82 +70293,62 @@
3291408384,3291410431,GM
3291410432,3291412479,NG
3291412480,3291414527,DZ
-3291414528,3291431423,ZA
-3291431424,3291431551,NA
-3291431552,3291432191,ZA
-3291432192,3291432447,NA
-3291432448,3291432703,ZA
+3291414528,3291426815,ZA
+3291426816,3291430911,NA
+3291430912,3291432703,ZA
3291432704,3291432959,NA
-3291432960,3291433471,ZA
-3291433472,3291433727,NA
-3291433728,3291434239,ZA
-3291434240,3291434751,A2
-3291434752,3291435007,ZA
-3291435008,3291439103,A2
+3291432960,3291439103,ZA
+3291439104,3291447295,NG
3291447296,3291463679,CI
-3291480064,3291545599,SC
-3291742208,3292004351,ZA
+3291480064,3291488255,DE
+3291488256,3291496447,SC
+3291496448,3291512831,US
+3291512832,3291529215,SC
+3291529216,3291545599,US
+3291545600,3291545855,CI
+3291545856,3291546111,GM
+3291546112,3291546367,NA
+3291546368,3291546623,BI
+3291546624,3291546879,SZ
+3291546880,3291547135,TZ
+3291742208,3292004351,US
3292004352,3292266495,SC
+3292397568,3292528639,ZA
3300917248,3300921343,MU
+3300921344,3300925439,BJ
3300925440,3300929535,MG
-3300933632,3300950015,MU
-3300982784,3301179391,ZA
-3301179392,3301441535,SC
-3301441536,3301441567,ZA
-3301441568,3301441575,NG
-3301441576,3301441655,ZA
-3301441656,3301441663,NG
-3301441664,3301441815,ZA
-3301441816,3301441823,NG
-3301441824,3301441879,ZA
-3301441880,3301441887,NG
-3301441888,3301441911,ZA
-3301441912,3301441919,NG
-3301441920,3301441999,ZA
-3301442000,3301442007,NG
-3301442008,3301442351,ZA
-3301442352,3301442359,NG
-3301442360,3301442391,ZA
-3301442392,3301442399,NG
-3301442400,3301442415,ZA
-3301442416,3301442423,NG
-3301442424,3301442599,ZA
-3301442600,3301442607,NG
-3301442608,3301442679,ZA
-3301442680,3301442687,NG
-3301442688,3301442727,ZA
-3301442728,3301442735,NG
-3301442736,3301442823,ZA
-3301442824,3301442831,NG
-3301442832,3301443007,ZA
-3301443008,3301443015,NG
-3301443016,3301443295,ZA
-3301443296,3301443303,NG
-3301443304,3301443519,ZA
-3301443520,3301443527,NG
-3301443528,3301443591,ZA
-3301443592,3301443599,NG
-3301443600,3301443655,ZA
-3301443656,3301443663,NG
-3301443664,3301443695,ZA
-3301443696,3301443703,NG
-3301443704,3301443847,ZA
-3301443848,3301443855,NG
-3301443856,3301444383,ZA
-3301444384,3301444391,NG
-3301444392,3301444415,ZA
-3301444416,3301444431,NG
-3301444432,3301444599,ZA
-3301444600,3301444607,NG
-3301444608,3301445047,ZA
-3301445048,3301445055,NG
-3301445056,3301445063,ZA
-3301445064,3301445071,NG
-3301445072,3301445175,ZA
-3301445176,3301445183,NG
-3301445184,3301445255,ZA
-3301445256,3301445263,NG
-3301445264,3301445631,ZA
+3300933632,3300935679,MU
+3300937728,3300938751,MU
+3300941824,3300950015,MU
+3300953088,3300954111,MU
+3300982784,3301113855,ZA
+3301113856,3301146623,NG
+3301146624,3301175295,ZA
+3301175296,3301177343,AF
+3301177344,3301177599,ZA
+3301177600,3301179391,AF
+3301179392,3301181439,SC
+3301181440,3301182463,SE
+3301182464,3301212159,SC
+3301212160,3301214207,SE
+3301214208,3301215231,SC
+3301215232,3301216255,SE
+3301216256,3301244927,SC
+3301244928,3301246975,SE
+3301246976,3301311487,SC
+3301311488,3301313535,SA
+3301313536,3301314559,SC
+3301314560,3301315583,SE
+3301315584,3301318655,SC
+3301318656,3301322751,DE
+3301322752,3301330943,SA
+3301330944,3301335039,SE
+3301335040,3301339135,SA
+3301339136,3301347327,SE
+3301347328,3301351423,PL
+3301351424,3301375999,SE
+3301376000,3301441535,SC
+3301441536,3301445631,ZA
3301445632,3301453823,KE
3301453824,3301457919,ML
3301457920,3301462015,NG
@@ -137443,21 +70359,20 @@
3301471488,3301474047,NG
3301474048,3301474303,GH
3301474304,3301490687,MA
-3301494784,3301498879,TZ
+3301494784,3301498879,ZM
3301507328,3301507583,ZW
3301507584,3301507839,GH
3301507840,3301508095,EG
-3301508096,3301508607,MW
3301508608,3301509119,ZA
3301510144,3301511167,MW
-3301511168,3301513215,ZW
+3301511168,3301512191,ZW
+3301512192,3301513215,MU
3301513216,3301515263,EG
3301515264,3301523455,GH
3301523456,3301531647,CI
-3301539840,3301543935,A2
-3301543936,3301544959,KE
-3301544960,3301545215,A2
-3301545216,3301548031,KE
+3301539840,3301544191,KE
+3301544192,3301544959,DE
+3301544960,3301548031,KE
3301548032,3301556223,GH
3301556224,3301557759,DJ
3301557760,3301558015,US
@@ -137475,9 +70390,7 @@
3301638144,3301703679,TN
3301703680,3301834751,EG
3301834752,3301900287,MA
-3301900288,3301902663,NG
-3301902664,3301902671,CM
-3301902672,3301904383,NG
+3301900288,3301904383,NG
3301904384,3301908479,KE
3301908480,3301912575,ZA
3301912576,3301916671,MU
@@ -137516,6 +70429,10 @@
3302540800,3302541311,AO
3302541312,3302542335,NG
3302543360,3302544383,NG
+3302544384,3302544639,CM
+3302544640,3302544895,MU
+3302544896,3302545151,GH
+3302545152,3302545407,ZA
3302548480,3302548991,GH
3302548992,3302549503,ZA
3302549504,3302550015,KE
@@ -137524,7 +70441,6 @@
3302551040,3302551551,MU
3302551552,3302552063,EG
3302552064,3302552575,KE
-3302552576,3302552831,TZ
3302552832,3302553087,KE
3302553088,3302553343,EG
3302553344,3302553599,TZ
@@ -137538,12 +70454,9 @@
3302555648,3302621183,MA
3302621184,3302684671,EG
3302684672,3302686719,JO
-3302686720,3302752255,EG
-3302752256,3302753359,NG
-3302753360,3302753363,CM
-3302753364,3302753607,NG
-3302753608,3302753615,GH
-3302753616,3302760447,NG
+3302686720,3302750207,EG
+3302750208,3302752255,JO
+3302752256,3302760447,NG
3302760448,3302762495,ZA
3302762496,3302766591,US
3302766592,3302768639,ZA
@@ -137580,11 +70493,22 @@
3302956032,3302956287,CD
3302956544,3302957055,ZA
3302957056,3302957311,CG
+3302957312,3302957567,MZ
+3302957568,3302957823,GM
+3302957824,3302958079,NA
+3302958080,3302958335,BI
+3302958336,3302958591,SZ
+3302985728,3302987775,MU
3304062976,3304456191,SC
-3304456192,3304521727,ZA
+3304456192,3304521727,NG
3304521728,3304587263,SC
-3304587264,3305111551,ZA
-3305111552,3307208703,TN
+3304587264,3304718335,ZA
+3304849408,3305111551,ZA
+3305111552,3305130239,TN
+3305130240,3305130495,GP
+3305130496,3305362687,TN
+3305362688,3305362943,GP
+3305362944,3307208703,TN
3307208704,3309305855,EG
3309305856,3312451583,ZA
3312451584,3312975871,DZ
@@ -137593,7 +70517,9 @@
3313762304,3314024447,EG
3314024448,3314286591,KE
3314286592,3314548735,DZ
-3314548736,3314810879,MA
+3314548736,3314750463,MA
+3314750464,3314751487,US
+3314751488,3314810879,MA
3314810880,3314827263,AO
3314827264,3314829311,ZA
3314829312,3314831359,GM
@@ -137657,8 +70583,10 @@
3315462144,3315463167,ZA
3315463168,3315464191,SO
3315464192,3315465215,CD
-3315465216,3315466239,MU
-3315466240,3315482623,MZ
+3315465216,3315466239,CG
+3315466240,3315467263,MZ
+3315467264,3315467519,ZA
+3315467520,3315482623,MZ
3315482624,3315499007,MG
3315499008,3315515391,ZM
3315515392,3315531775,SC
@@ -137678,9 +70606,17 @@
3316645888,3317170175,KE
3317170176,3317301247,ZA
3317301248,3317432319,TZ
+3317432320,3317497855,NA
+3317497856,3317530623,CD
+3317530624,3317538815,LS
+3317538816,3317539071,ZA
+3317539072,3317547007,LS
+3317547008,3317563391,ZA
+3317563392,3317694463,GH
3317694464,3318218751,EG
3318218752,3318743039,DZ
3318743040,3318874111,SD
+3318874112,3318939647,NG
3318939648,3318947839,KE
3318947840,3318956031,NG
3318956032,3318964223,ZA
@@ -137693,11 +70629,17 @@
3319156736,3319160831,GW
3319160832,3319164927,NG
3319164928,3319166975,ZA
+3319166976,3319169023,ZW
3319169024,3319201791,CG
3319201792,3319234559,SL
3319234560,3319242751,LY
3319242752,3319250943,ZA
3319250944,3319255039,MG
+3319255040,3319257087,ZA
+3319257088,3319258111,LR
+3319258112,3319259135,CD
+3319259136,3319263231,ZA
+3319263232,3319267327,TZ
3319267328,3319398399,AO
3319398400,3319529471,MZ
3319529472,3319537663,ZM
@@ -137717,7 +70659,10 @@
3319660544,3319791615,EG
3319791616,3320053759,MU
3320053760,3320184831,ZA
+3320184832,3320250367,MA
3320250368,3320258559,MR
+3320258560,3320266751,LS
+3320266752,3320283135,GA
3320283136,3320285183,GM
3320285184,3320287231,GA
3320287232,3320289279,ZA
@@ -137736,10 +70681,17 @@
3320307712,3320308735,CV
3320308736,3320309759,LY
3320309760,3320310783,ZA
-3320310784,3320311807,SD
+3320310784,3320311807,SS
3320311808,3320312831,BJ
3320312832,3320313855,ZM
+3320313856,3320314879,BI
+3320314880,3320315903,CD
+3320315904,3320381439,KE
3320381440,3320446975,NA
+3320446976,3320451071,SC
+3320451072,3320455167,ZA
+3320455168,3320463359,NG
+3320463360,3320479743,NA
3320479744,3320500223,ZA
3320500224,3320502271,BW
3320502272,3320504319,BJ
@@ -137749,6 +70701,8 @@
3320507392,3320508415,KE
3320508416,3320509439,SC
3320509440,3320510463,RW
+3320510464,3320511487,LY
+3320511488,3320512511,ZA
3320512512,3320578047,MZ
3320578048,3320643583,ZA
3320643584,3320709119,KE
@@ -137792,10 +70746,7 @@
3321790464,3321806847,LS
3321806848,3321823231,SD
3321823232,3321839615,NG
-3321839616,3321843711,GH
-3321843712,3321853695,MU
-3321853696,3321853951,GH
-3321853952,3321855999,MU
+3321839616,3321855999,GH
3321856000,3321860095,CV
3321860096,3321864191,ZA
3321864192,3321868287,NG
@@ -137807,349 +70758,188 @@
3321885696,3321886719,NG
3321886720,3321887743,GA
3321887744,3321888767,NG
-3321954304,3321968639,US
+3321888768,3321968639,US
3321968640,3321970687,CA
-3321970688,3321987071,US
+3321970688,3322003455,US
+3322003456,3322019839,CA
3322019840,3322023935,US
3322023936,3322028031,CL
3322028032,3322036223,US
3322036224,3322052607,CA
-3322085376,3322167551,US
-3322167552,3322167807,GB
-3322167808,3322202111,US
+3322052608,3322202111,US
3322202112,3322203135,GB
-3322203136,3322250975,US
-3322250976,3322251007,IL
-3322251008,3322251335,US
-3322251336,3322251343,IL
-3322251344,3322254719,US
-3322254720,3322254783,CA
-3322254784,3322339583,US
+3322203136,3322339583,US
3322339584,3322339839,GB
-3322339840,3322361856,US
-3322361857,3322361864,AT
-3322361865,3322361870,US
-3322361871,3322361882,CY
-3322361883,3322361890,US
-3322361891,3322361906,RS
-3322361907,3322361914,GB
-3322361915,3322362047,US
-3322362048,3322362063,CN
-3322362064,3322362079,US
-3322362080,3322362111,VG
-3322362112,3322362367,US
-3322362368,3322362431,DE
-3322362432,3322363039,US
-3322363040,3322363071,BR
-3322363072,3322363327,US
-3322363328,3322363359,GB
-3322363360,3322609663,US
+3322339840,3322354175,US
+3322354176,3322354431,JP
+3322354432,3322609663,US
3322609664,3322610687,SA
-3322610688,3322642431,US
-3322675200,3322683391,US
+3322610688,3322683391,US
3322683392,3322691583,BR
-3322691584,3322691647,US
-3322691648,3322691655,KW
-3322691656,3322691791,US
-3322691792,3322691807,CA
-3322691808,3322691823,GB
-3322691824,3322691839,US
+3322691584,3322691839,US
3322691840,3322692095,SE
-3322692096,3322692223,US
-3322692224,3322692351,CA
-3322692352,3322692927,US
-3322692928,3322692935,KW
-3322692936,3322692943,US
-3322692944,3322692959,CA
-3322692960,3322692991,US
-3322692992,3322693119,CA
-3322693120,3322693183,US
-3322693184,3322693215,CA
-3322693216,3322693343,US
-3322693344,3322693375,CA
-3322693376,3322695775,US
-3322695776,3322695783,CA
-3322695784,3322695807,US
-3322695808,3322695871,AU
-3322695872,3322695903,US
-3322695904,3322695919,GB
-3322695920,3322706271,US
-3322706272,3322706303,CA
-3322706304,3322706959,US
-3322706960,3322706975,CA
-3322706976,3322707151,US
-3322707152,3322707167,CA
-3322707168,3322707327,US
-3322707328,3322707343,GB
-3322707344,3322707487,US
-3322707488,3322707519,CA
-3322707520,3322707551,US
-3322707552,3322707583,CA
-3322707584,3322707615,ID
-3322707616,3322707719,US
-3322707720,3322707727,ID
-3322707728,3322707967,US
-3322740736,3322773503,US
+3322692096,3322773503,US
+3322773504,3322806271,CA
3322806272,3322875903,US
3322880000,3322888191,AU
-3322888192,3322889199,US
-3322889200,3322889207,CN
-3322889208,3322889535,US
-3322889536,3322889599,CN
-3322889600,3322889607,PE
-3322889608,3322889839,US
-3322889840,3322889855,PE
-3322889856,3322890223,US
-3322890224,3322890239,BG
-3322890240,3322890423,US
-3322890424,3322890431,QA
-3322890432,3322890439,US
-3322890440,3322890447,QA
-3322890448,3322890719,US
-3322890720,3322890727,QA
-3322890728,3322892631,US
-3322892632,3322892639,IN
-3322892640,3322893063,US
-3322893064,3322893071,BR
-3322893072,3322893087,US
-3322893088,3322893119,BR
-3322893120,3322894207,US
-3322894208,3322894215,CN
-3322894216,3322894335,US
-3322894336,3322894399,CN
-3322894400,3322894703,US
-3322894704,3322894719,IN
-3322894720,3322897063,US
-3322897064,3322897071,QA
-3322897072,3322898839,US
-3322898840,3322898847,BR
-3322898848,3322899135,US
-3322899136,3322899143,IN
-3322899144,3322902831,US
-3322902832,3322902847,IN
-3322902848,3322903375,US
-3322903376,3322903383,GB
-3322903384,3322903423,US
-3322903424,3322903455,GB
-3322903456,3322903487,US
-3322903488,3322903495,GB
-3322903496,3322903519,US
-3322903520,3322903535,GB
-3322903536,3322904575,US
-3322937344,3322940671,US
-3322940672,3322940927,AP
-3322940928,3322945535,US
+3322888192,3322945535,US
3322945536,3322951679,CN
3322951680,3322970111,US
-3323003136,3323003391,JP
-3323003392,3323003647,US
-3323003904,3323013631,US
+3322970112,3323002879,CA
+3323002880,3323004671,US
+3323004928,3323013887,US
3323013888,3323014143,CA
3323014144,3323017727,US
3323017728,3323017983,CA
-3323017984,3323018239,US
-3323018752,3323020799,US
-3323020800,3323021055,AP
+3323017984,3323020799,US
+3323020800,3323021055,SG
3323021056,3323022591,US
3323022592,3323022847,GB
-3323022848,3323023103,US
-3323023360,3323031551,US
+3323022848,3323027455,US
+3323027456,3323027711,CA
+3323027712,3323030015,US
+3323030272,3323031807,US
3323032576,3323032831,US
3323032832,3323033087,IT
3323033088,3323033343,JP
+3323033344,3323033599,US
3323033600,3323034111,BR
3323034112,3323038719,US
3323038720,3323038975,CA
3323038976,3323048959,US
3323048960,3323049727,NL
-3323049728,3323061247,US
-3323061504,3323062015,US
-3323062016,3323062527,BR
-3323062784,3323068415,US
+3323049728,3323062271,US
+3323062272,3323062527,BR
+3323062528,3323064319,US
+3323064832,3323068415,US
3323199488,3323201535,US
3323201536,3323203583,CA
3323203584,3323207679,US
3323207680,3323215871,CA
-3323215872,3323232255,US
-3323267072,3323270420,US
+3323215872,3323224063,US
+3323224064,3323232255,NL
+3323232256,3323241727,US
+3323241728,3323241983,CA
+3323241984,3323244543,US
+3323244544,3323244671,CA
+3323244672,3323245319,US
+3323245320,3323245327,CA
+3323245328,3323270420,US
3323270421,3323270421,CH
-3323270422,3323330559,US
-3323330816,3323331071,US
-3323331072,3323331839,CA
-3323331840,3323342335,US
+3323270422,3323331583,US
+3323331584,3323331839,CA
+3323331840,3323339263,US
+3323339776,3323340031,CA
+3323340288,3323342591,US
3323342592,3323342847,AU
3323343616,3323343871,DE
-3323343872,3323345919,US
+3323343872,3323346175,US
3323346176,3323346431,AU
3323346432,3323354111,US
3323354112,3323354367,GB
3323354368,3323355647,DE
-3323355904,3323356671,US
+3323355648,3323356671,US
3323356672,3323356927,CA
3323356928,3323378687,US
3323378688,3323378943,CA
-3323378944,3323391231,US
+3323378944,3323382783,US
+3323382784,3323383295,CA
+3323383296,3323391231,US
3323391232,3323391487,CA
3323391488,3323394559,US
3323394560,3323395071,CL
-3323395072,3323430015,US
-3323430016,3323430079,CA
-3323430080,3323430143,US
-3323430144,3323430399,CA
-3323430400,3323431943,US
-3323431944,3323431951,GB
-3323431952,3323432143,US
-3323432144,3323432151,GB
-3323432152,3323432255,US
-3323432256,3323432319,AU
-3323432320,3323432415,US
-3323432416,3323432447,IL
-3323432448,3323432703,US
-3323432704,3323432959,SE
-3323432960,3323432991,US
-3323432992,3323433023,MA
-3323433024,3323434239,US
-3323434240,3323434367,BG
-3323434368,3323434399,US
-3323434400,3323434431,BG
-3323434432,3323434463,US
-3323434464,3323434485,BG
-3323434486,3323434486,US
-3323434487,3323434495,BG
-3323434496,3323436031,US
-3323436032,3323436039,ES
-3323436040,3323436223,US
-3323436224,3323436255,IL
-3323436256,3323436559,US
-3323436560,3323436575,KW
-3323436576,3323436927,US
-3323436928,3323436935,ID
-3323436936,3323436991,US
-3323436992,3323437055,ID
-3323437056,3323437567,US
-3323437568,3323438079,CA
-3323438080,3323438111,AU
-3323438112,3323438911,US
-3323438912,3323438943,MA
-3323438944,3323460223,US
-3323460224,3323460287,BG
-3323460288,3323461119,US
+3323395072,3323402751,US
+3323403264,3323416399,US
+3323416400,3323416479,GB
+3323416480,3323437823,US
+3323437824,3323438079,CA
+3323438080,3323461119,US
3323461120,3323461375,GB
-3323461376,3323461503,CA
-3323461504,3323462655,US
+3323461376,3323462655,US
3323462656,3323463167,BR
-3323463168,3323494895,US
-3323494896,3323494911,GB
-3323494912,3323495015,US
-3323495016,3323495023,QA
-3323495024,3323497519,US
-3323497520,3323497527,QA
-3323497528,3323659263,US
+3323463168,3323477983,US
+3323477984,3323478015,GB
+3323478016,3323659263,US
3323659264,3323660543,NZ
+3323660544,3323661311,US
3323661312,3323662335,CA
3323662336,3323674623,US
-3323674624,3323678015,CA
-3323678016,3323678031,US
-3323678032,3323678047,CA
-3323678048,3323678055,US
-3323678056,3323678063,CA
-3323678064,3323678111,US
-3323678112,3323678127,CA
-3323678128,3323678135,US
-3323678136,3323678143,CA
-3323678144,3323678147,US
-3323678148,3323678151,CA
-3323678152,3323678159,US
-3323678160,3323678167,CA
-3323678168,3323678171,US
-3323678172,3323678207,CA
-3323678208,3323678511,US
-3323678512,3323678519,CA
-3323678520,3323678527,US
-3323678528,3323678607,CA
-3323678608,3323678635,US
-3323678636,3323678687,CA
-3323678688,3323678695,US
-3323678696,3323680255,CA
-3323680256,3323741439,US
+3323674624,3323678207,CA
+3323678208,3323678463,US
+3323678464,3323678523,CA
+3323678524,3323678527,US
+3323678528,3323678583,CA
+3323678584,3323678587,US
+3323678588,3323680327,CA
+3323680328,3323680328,US
+3323680329,3323680413,CA
+3323680414,3323680414,US
+3323680415,3323680511,CA
+3323680512,3323680767,US
+3323680768,3323681023,CA
+3323681024,3323681279,US
+3323681280,3323682955,CA
+3323682956,3323682959,US
+3323682960,3323684863,CA
+3323684864,3323685375,US
+3323685376,3323685887,CA
+3323685888,3323687423,US
+3323687424,3323688959,CA
+3323688960,3323689471,US
+3323689472,3323690495,CA
+3323690496,3323741439,US
3323741440,3323741695,GB
3323741696,3323747327,US
3323747328,3323747583,GB
-3323747584,3324031999,US
+3323747584,3323987967,US
+3323987968,3323988223,KN
+3323988224,3324011007,US
+3324011008,3324011263,KN
+3324011264,3324023039,US
+3324023040,3324023295,KN
+3324023296,3324030463,US
+3324030464,3324030719,KN
+3324030720,3324031999,US
3324032000,3324032255,KN
3324032256,3324033791,US
3324033792,3324034047,KN
3324034048,3324035327,US
-3324035328,3324035839,KN
-3324035840,3324040191,US
+3324035328,3324035583,KN
+3324035584,3324040191,US
3324040192,3324040447,AU
3324040448,3324047359,US
3324047360,3324047615,KN
3324047616,3324051455,US
3324051456,3324182527,CA
3324182528,3324193279,US
-3324193792,3324194815,CA
-3324194816,3324195167,US
-3324195168,3324195199,GB
-3324195200,3324195775,US
-3324195776,3324195807,CA
-3324195808,3324196319,US
-3324196320,3324196335,GB
-3324196336,3324196639,US
-3324196640,3324196671,DO
-3324196672,3324255231,US
+3324193280,3324193791,CA
+3324193792,3324255231,US
3324255232,3324256255,VI
-3324256256,3324259327,SA
-3324259328,3324259583,US
-3324259584,3324259839,SA
-3324259840,3324266495,US
-3324266496,3324266751,AP
-3324266752,3324270079,US
-3324270080,3324270591,EU
-3324270592,3324277247,US
+3324256256,3324260095,SA
+3324260096,3324277759,US
3324277760,3324278783,CA
-3324280832,3324354559,US
+3324278784,3324354559,US
3324354560,3324362751,CA
3324362752,3324379135,US
3324379136,3324380159,CA
-3324380160,3324470271,US
+3324380160,3324380927,US
+3324380928,3324381183,CA
+3324381184,3324470271,US
3324470272,3324474367,GB
3324474368,3324522495,US
3324522496,3324522751,CN
3324522752,3324523007,US
-3324523008,3324523431,CN
-3324523432,3324523455,US
-3324523456,3324523559,CN
-3324523560,3324523567,US
-3324523568,3324523575,CN
-3324523576,3324523583,US
-3324523584,3324524047,CN
-3324524048,3324524055,US
-3324524056,3324524255,CN
-3324524256,3324524287,US
-3324524288,3324524439,CN
-3324524440,3324524447,US
-3324524448,3324524543,CN
-3324524544,3324524551,US
-3324524552,3324524783,CN
-3324524784,3324524791,US
-3324524792,3324524991,CN
-3324524992,3324525055,US
-3324525056,3324525095,CN
-3324525096,3324525103,US
-3324525104,3324525111,CN
-3324525112,3324525119,US
-3324525120,3324525583,CN
-3324525584,3324525631,US
-3324525632,3324525695,CN
-3324525696,3324525791,US
-3324525792,3324526015,CN
-3324526016,3324526335,US
+3324523008,3324523263,CN
+3324523264,3324525311,US
+3324525312,3324525567,CN
+3324525568,3324526335,US
3324526336,3324526591,CN
-3324526592,3324579839,US
+3324526592,3324533247,US
+3324533248,3324533503,DE
+3324533504,3324579839,US
3324582912,3324583935,CA
-3324583936,3324588031,CL
-3324588032,3324642303,US
+3324583936,3324587775,CL
+3324587776,3324642303,US
3324642304,3324642559,CA
3324642560,3324645887,US
3324645888,3324646143,CA
@@ -138219,104 +71009,190 @@
3324704000,3324704255,CA
3324704256,3324706303,US
3324706304,3324706559,CA
-3324706560,3324732415,US
-3324732416,3324732671,EU
-3324732672,3324772351,US
-3324837888,3324843799,US
-3324843800,3324843801,AP
-3324843802,3324844543,US
-3324844544,3324844799,EU
-3324844800,3324936191,US
-3324968960,3324980223,US
+3324706560,3324811047,US
+3324811048,3324811055,AU
+3324811056,3324843775,US
+3324843776,3324843799,AU
+3324843800,3324843801,US
+3324843802,3324844031,AU
+3324844032,3324980223,US
3324980224,3324981247,CA
-3324981248,3325001727,US
+3324981248,3325034495,US
3325034496,3325035519,NZ
3325035520,3325067263,US
-3325100032,3325128703,US
+3325067264,3325100287,CA
+3325100288,3325100543,US
+3325101056,3325108223,US
+3325110272,3325128703,US
3325128704,3325129215,TH
3325129216,3325131775,US
3325131776,3325132031,AU
3325132032,3325132799,US
-3325132800,3325134335,BR
-3325134336,3325134591,US
-3325134848,3325135359,US
+3325132800,3325133823,BR
+3325134336,3325136127,US
3325136128,3325136383,CA
-3325136384,3325136639,US
-3325136896,3325142015,US
+3325136384,3325142015,US
3325142016,3325142271,CR
3325142272,3325144831,US
3325144832,3325145087,CA
3325145088,3325169663,US
3325169664,3325171711,BR
3325171712,3325190143,US
-3325190144,3325198335,CA
+3325190144,3325191687,CA
+3325191688,3325191695,US
+3325191696,3325202047,CA
+3325202048,3325202079,US
+3325202080,3325204479,CA
+3325204480,3325205503,US
+3325205504,3325206428,CA
+3325206429,3325206429,US
+3325206430,3325206639,CA
+3325206640,3325206655,US
+3325206656,3325207807,CA
+3325207808,3325207935,US
+3325207936,3325211419,CA
+3325211420,3325211423,US
+3325211424,3325211647,CA
+3325211648,3325211775,US
+3325211776,3325213687,CA
+3325213688,3325213695,US
+3325213696,3325216527,CA
+3325216528,3325216531,US
+3325216532,3325217939,CA
+3325217940,3325217943,US
+3325217944,3325218207,CA
+3325218208,3325218239,US
+3325218240,3325220635,CA
+3325220636,3325220636,US
+3325220637,3325220863,CA
+3325220864,3325220879,US
+3325220880,3325221451,CA
+3325221452,3325221455,US
+3325221456,3325221791,CA
+3325221792,3325221795,FR
+3325221796,3325224671,CA
+3325224672,3325224675,US
+3325224676,3325225671,CA
+3325225672,3325225675,US
+3325225676,3325226592,CA
+3325226593,3325226593,US
+3325226594,3325226751,CA
+3325226752,3325227007,US
+3325227008,3325229591,CA
+3325229592,3325229599,US
+3325229600,3325230319,CA
+3325230320,3325230323,US
+3325230324,3325231103,CA
3325231104,3325232127,US
3325233152,3325234175,US
3325234176,3325234431,SA
3325234432,3325249279,US
3325249280,3325249535,CO
-3325249536,3325257727,US
+3325249536,3325250303,US
+3325250304,3325250559,CA
+3325250560,3325256703,US
+3325257216,3325257727,US
3325257728,3325258751,CA
3325258752,3325259775,US
3325259776,3325261311,CA
3325261312,3325265919,US
3325265920,3325266943,CA
-3325267200,3325267711,US
+3325266944,3325267711,US
3325267712,3325268735,SY
3325268736,3325269759,US
3325269760,3325270015,CA
3325270016,3325271039,US
3325271040,3325271295,CA
-3325271296,3325271551,US
-3325271808,3325281023,US
+3325271296,3325278719,US
+3325278976,3325281023,US
3325281024,3325281279,NZ
-3325281280,3325284863,US
+3325281536,3325284863,US
3325284864,3325285119,AU
-3325285376,3325304831,US
+3325285376,3325296383,US
+3325296384,3325296639,CA
+3325296640,3325304063,US
+3325304064,3325304319,AS
+3325304320,3325304831,US
3325304832,3325307647,CA
3325307648,3325307903,BB
3325307904,3325313023,CA
-3325313024,3325323687,US
-3325323688,3325323695,GB
-3325323696,3325329407,US
+3325313024,3325337599,US
+3325337600,3325338111,GB
+3325338112,3325362175,US
3325362176,3325427711,CA
-3325427712,3325450239,ZA
-3325451008,3325451263,ZA
-3325451264,3325452287,US
-3325452800,3325453311,ZA
+3325427712,3325427967,US
+3325427968,3325430527,MU
+3325430528,3325431551,US
+3325431552,3325433343,MU
+3325433344,3325438975,ZA
+3325438976,3325442559,MU
+3325442560,3325443583,ZA
+3325443584,3325444095,US
+3325444096,3325444351,MU
+3325444352,3325444607,ZA
+3325444608,3325448447,MU
+3325448448,3325448959,US
+3325448960,3325450239,MU
+3325450240,3325451007,US
+3325451008,3325451263,MU
+3325451264,3325452799,US
+3325452800,3325453311,MU
3325453312,3325454335,CA
-3325456384,3325456751,US
-3325456752,3325456759,CA
-3325456760,3325456855,US
-3325456856,3325456863,PH
-3325456864,3325457015,US
-3325457016,3325457023,PH
-3325457024,3325457975,US
-3325457976,3325457983,CA
-3325457984,3325459679,US
-3325459680,3325459687,CA
-3325459688,3325459983,US
-3325459984,3325459999,CA
-3325460000,3325460079,US
-3325460080,3325460095,CA
-3325460096,3325460479,US
-3325463808,3325464063,ZA
-3325464064,3325465087,NA
-3325465088,3325493247,ZA
-3325493248,3325497343,US
-3325497344,3325501439,PR
-3325501440,3325505535,US
+3325454336,3325463807,US
+3325463808,3325466623,MU
+3325466624,3325467135,US
+3325467136,3325469695,MU
+3325469696,3325469951,US
+3325469952,3325470207,MU
+3325470208,3325471231,US
+3325471232,3325471487,MU
+3325471488,3325471999,US
+3325472000,3325472255,ZA
+3325472256,3325474303,MU
+3325474304,3325474559,US
+3325474560,3325478655,MU
+3325478656,3325478911,ZA
+3325478912,3325479423,US
+3325479424,3325481471,ZA
+3325481472,3325481727,MU
+3325481728,3325481983,US
+3325481984,3325483007,CA
+3325483008,3325483775,US
+3325483776,3325484287,MU
+3325484288,3325484799,US
+3325484800,3325485055,ZA
+3325485056,3325485311,US
+3325485312,3325486591,MU
+3325486592,3325486847,US
+3325486848,3325487103,ZA
+3325487104,3325487359,MU
+3325487360,3325487615,US
+3325487616,3325487871,ZA
+3325487872,3325490943,US
+3325490944,3325492991,MU
+3325492992,3325497343,US
+3325497344,3325499903,PR
+3325499904,3325505535,US
3325505536,3325509631,CA
-3325509632,3325591551,US
-3325624320,3325640703,US
+3325509632,3325551615,US
+3325551616,3325552639,CA
+3325552640,3325562879,US
+3325565440,3325573119,US
+3325573120,3325575167,BB
+3325575168,3325630975,US
+3325630976,3325631487,CA
+3325631488,3325640703,US
3325640704,3325644799,CA
3325644800,3325689855,US
3325689856,3325690367,JM
-3325690368,3325691903,US
-3325691904,3325693951,BR
-3325693952,3325722623,US
+3325690368,3325691647,US
+3325691648,3325691903,CA
+3325691904,3325693183,BR
+3325693184,3325722623,US
3325722624,3325755391,CA
-3325755392,3325956095,US
+3325755392,3325886719,US
+3325887488,3325888511,US
+3325890560,3325956095,US
3325956096,3325960191,CA
3325960192,3325976063,US
3325976064,3325976319,CA
@@ -138324,31 +71200,19 @@
3325980672,3325980927,CA
3325980928,3325992447,US
3325992448,3325992959,CA
-3325992960,3325996799,US
+3325992960,3325993983,US
+3325993984,3325994239,CA
+3325994240,3325996799,US
3325996800,3325997055,CA
-3325997056,3326189567,US
-3326189568,3326189823,US
-3326189824,3326190591,US
-3326190592,3326190719,US
-3326190720,3326190847,US
-3326190848,3326190975,US
-3326190976,3326191295,US
-3326191296,3326191359,US
-3326191360,3326191551,US
-3326191552,3326191583,US
-3326191584,3326349823,US
+3325997056,3326349823,US
3326349824,3326350335,EC
-3326350336,3326390527,US
-3326390528,3326390535,CA
-3326390536,3326406655,US
+3326350336,3326406655,US
3326406656,3326408703,CO
3326408704,3326413823,US
3326413824,3326414335,YE
3326414336,3326420991,US
3326420992,3326423039,PR
-3326423040,3326492239,US
-3326492240,3326492255,CA
-3326492256,3326526463,US
+3326423040,3326526463,US
3326526464,3326526719,CA
3326526720,3326613503,US
3326613504,3326615551,CA
@@ -138356,27 +71220,32 @@
3326619648,3326623743,CA
3326623744,3326631935,US
3326631936,3326640127,CA
-3326640128,3326676991,US
-3326680832,3326682623,CA
+3326640128,3326680831,US
+3326680832,3326681087,CA
+3326681088,3326681343,US
+3326681344,3326682623,CA
3326682624,3326682879,US
-3326682880,3326713343,CA
+3326682880,3326697215,CA
+3326697216,3326699519,US
+3326699520,3326713343,CA
3326713344,3326714111,US
3326714112,3326716927,CA
3326716928,3326717951,US
-3326717952,3326729215,CA
+3326717952,3326726399,CA
+3326726400,3326726655,US
+3326726656,3326729215,CA
3326729216,3326729471,JP
3326729472,3326729727,CA
3326729728,3326734335,US
3326734336,3326737663,CA
3326737664,3326737919,US
3326737920,3326738175,CA
-3326738432,3326764863,US
-3326764864,3326764871,GB
-3326764872,3326768887,US
-3326768888,3326768895,GB
-3326768896,3326770863,US
-3326770864,3326770871,GB
-3326770872,3326952191,US
+3326738176,3326740479,US
+3326741760,3326742015,US
+3326742528,3326746623,US
+3326749184,3326796863,US
+3326796864,3326796927,GB
+3326796928,3326952191,US
3326952192,3326952447,AS
3326952448,3326953983,US
3326953984,3326954495,AS
@@ -138386,46 +71255,65 @@
3327162368,3327162623,GB
3327162624,3327162879,US
3327162880,3327163391,GB
-3327163392,3327172863,US
-3327172864,3327173119,AP
-3327173120,3327197183,US
+3327163392,3327197183,US
3327197184,3327198207,JP
3327198208,3327199231,US
3327199232,3327200255,BR
3327200256,3327256831,US
3327256832,3327257087,GU
-3327257088,3327426559,US
+3327257088,3327397375,US
+3327397376,3327397887,CA
+3327397888,3327426559,US
3327426560,3327459327,CA
-3327459328,3327591237,US
-3327591238,3327591238,US
-3327591239,3327723519,US
-3327723520,3327725567,CA
-3327725568,3327803647,US
-3327803648,3327803903,AP
-3327803904,3327805695,US
-3327807488,3327811583,CA
+3327459328,3327723519,US
+3327723520,3327725311,CA
+3327725312,3327788287,US
+3327788288,3327789055,CA
+3327789056,3327806463,US
+3327806464,3327811583,CA
3327811584,3327885311,US
3327885312,3327918079,CA
3327918080,3327995903,US
3327995904,3327996927,CW
3327996928,3328028671,US
3328028672,3328030719,CW
-3328030720,3328180223,US
-3328180224,3328202751,CA
+3328030720,3328180479,US
+3328180480,3328181247,CA
+3328181248,3328181759,US
+3328181760,3328185855,CA
+3328185856,3328186111,US
+3328186112,3328187647,CA
+3328187648,3328187903,US
+3328187904,3328196351,CA
+3328196352,3328196607,US
+3328196608,3328202751,CA
3328202752,3328204799,US
3328204800,3328214783,CA
3328214784,3328215295,GB
-3328215296,3328223231,CA
-3328223232,3328225279,US
-3328225280,3328235007,CA
-3328235008,3328235263,US
-3328235520,3328241663,CA
+3328215296,3328224255,CA
+3328224256,3328224511,US
+3328224512,3328235007,CA
+3328235008,3328235519,US
+3328235520,3328236543,CA
+3328236544,3328237311,US
+3328237312,3328241663,CA
3328241664,3328242943,US
3328242944,3328243199,GB
3328243200,3328245759,CA
-3328245760,3328393727,US
-3328393728,3328393983,GB
-3328393984,3328394239,US
+3328245760,3328265471,US
+3328265728,3328271871,US
+3328272128,3328297471,US
+3328297984,3328299775,US
+3328299776,3328301055,CA
+3328301056,3328306431,US
+3328306432,3328306687,CA
+3328306688,3328307455,US
+3328307968,3328309247,US
+3328309504,3328358399,US
+3328358400,3328360447,CA
+3328360448,3328383999,US
+3328384000,3328385023,CA
+3328385024,3328394239,US
3328394240,3328394495,GB
3328394496,3328414719,US
3328414720,3328414975,CH
@@ -138440,29 +71328,31 @@
3328475136,3328477183,CA
3328477184,3328479231,US
3328479232,3328481279,CA
-3328481280,3328617983,US
+3328481280,3328481791,US
+3328481792,3328482303,CA
+3328482304,3328510064,US
+3328510065,3328510077,AE
+3328510078,3328515071,US
+3328515072,3328516095,DM
+3328516096,3328617983,US
3328617984,3328618239,CA
-3328618240,3328629503,US
-3328629504,3328629759,EU
-3328629760,3328630783,US
+3328618240,3328630015,US
+3328630016,3328630271,CA
+3328630272,3328630783,US
3328630784,3328631807,CA
3328631808,3328638975,US
3328638976,3328704511,CA
3328704512,3328774399,US
3328774400,3328775935,CA
-3328775936,3328776703,US
-3328778240,3328788479,US
+3328775936,3328788479,US
3328788480,3328789503,FR
-3328789504,3328790015,AP
-3328790016,3328794623,US
+3328789504,3328794623,US
3328794624,3328802815,CA
3328802816,3328826813,US
3328826814,3328826814,SG
3328826815,3329230335,US
3329230336,3329230591,JP
-3329230592,3329497343,US
-3329497344,3329497599,KE
-3329497600,3329498623,US
+3329230592,3329498623,US
3329498624,3329498879,ES
3329498880,3330613247,US
3330613248,3330614783,CA
@@ -138471,15 +71361,15 @@
3330617344,3330621183,US
3330621184,3330623743,CA
3330623744,3330624255,US
+3330624256,3330624511,CA
3330624512,3330625535,US
3330625536,3330627071,GB
3330627072,3330640895,US
3330640896,3330641151,CH
-3330641152,3330641663,US
-3330641920,3330646527,US
+3330641152,3330646527,US
3330646528,3330647295,CA
3330647296,3330647807,US
-3330648064,3330649343,US
+3330648064,3330649599,US
3330649600,3330649855,CA
3330649856,3330662911,US
3330662912,3330663167,GB
@@ -138487,16 +71377,13 @@
3330664192,3330664447,CA
3330664448,3330677759,US
3330677760,3330678783,CA
-3330678784,3330684927,US
-3330684928,3330685183,IN
-3330685184,3330714367,US
+3330678784,3330714367,US
3330714368,3330714623,CA
3330714624,3330726655,US
3330726656,3330726911,CA
3330726912,3330754559,US
3330754560,3330754815,CA
-3330754816,3330755071,US
-3330755328,3330763519,US
+3330754816,3330763519,US
3330763520,3330763775,CA
3330763776,3330765823,US
3330765824,3330766335,CA
@@ -138504,20 +71391,21 @@
3330771200,3330771711,CH
3330771712,3330778879,US
3330778880,3330779135,GB
-3330779136,3330791423,US
+3330779136,3330785279,US
+3330785280,3330785791,CA
+3330785792,3330791423,US
3330791424,3330791679,CA
-3330791680,3330815743,US
+3330791680,3330812927,US
+3330812928,3330813951,CA
+3330813952,3330815743,US
3330815744,3330815999,CA
-3330816000,3330817882,US
-3330817883,3330817887,CL
-3330817888,3330817899,ES
-3330817900,3330883583,US
+3330816000,3330866943,US
+3330866944,3330867199,CA
+3330867200,3330883583,US
3330883584,3330884351,NL
3330884352,3330884863,US
3330884864,3330885119,GB
-3330885120,3330888063,US
-3330888064,3330888127,NL
-3330888128,3330888191,US
+3330885120,3330888191,US
3330888192,3330888703,AU
3330888704,3330888959,US
3330888960,3330889215,CH
@@ -138536,149 +71424,113 @@
3330897920,3330898175,CA
3330898176,3330898431,DE
3330898432,3330898943,FR
-3330898944,3331102463,US
+3330898944,3330904575,US
+3330904576,3330904831,CA
+3330904832,3331098111,US
+3331098112,3331098367,CA
+3331098368,3331102463,US
3331102464,3331102719,CA
3331102720,3331194879,US
3331194880,3331260415,AU
-3331260416,3331352919,US
-3331352920,3331352920,US
-3331352921,3331356671,US
+3331260416,3331356671,US
3331356672,3331357183,BZ
3331357184,3331362815,US
3331362816,3331366911,CA
-3331366912,3331371279,US
-3331371280,3331371295,SE
-3331371296,3331371327,US
-3331371328,3331371343,SE
-3331371344,3331371375,US
-3331371376,3331371391,SE
-3331371392,3331371455,US
-3331371456,3331371471,ES
-3331371472,3331371775,US
-3331371776,3331371823,GB
-3331371824,3331371999,US
-3331372000,3331372031,GB
-3331372032,3331372351,US
-3331372352,3331372367,ES
-3331372368,3331374079,US
-3331374080,3331374335,CA
-3331374336,3331527167,US
+3331366912,3331523583,US
+3331523584,3331523839,GB
+3331523840,3331524095,US
+3331524096,3331524607,SG
+3331524608,3331527167,US
3331527168,3331527679,GB
3331527680,3331563519,US
3331563520,3331563775,CH
-3331563776,3331617855,US
-3331617856,3331617919,GB
-3331617920,3331620079,US
-3331620080,3331620095,GB
-3331620096,3331620527,US
-3331620528,3331620543,GB
-3331620544,3331633407,US
+3331563776,3331565567,US
+3331565568,3331566079,CA
+3331566080,3331575807,US
+3331575808,3331576831,KY
+3331576832,3331632639,US
+3331632640,3331632895,CA
+3331632896,3331633407,US
3331633408,3331633919,CH
3331633920,3331647231,US
3331647232,3331647487,CA
3331647488,3331649279,US
3331649280,3331649535,CA
-3331649536,3331818495,US
+3331649536,3331798271,US
+3331798272,3331798527,AU
+3331798528,3331818495,US
3331818496,3331818751,MX
-3331818752,3331853823,US
-3331853824,3331854079,AP
-3331854080,3331868161,US
-3331868162,3331868162,EU
-3331868163,3332002303,US
-3332002304,3332002304,CA
-3332002305,3332002558,US
-3332002559,3332002559,CA
-3332002560,3332002879,US
-3332002880,3332002943,CA
-3332002944,3332003071,US
-3332003072,3332003079,NO
-3332003080,3332003327,CA
-3332003328,3332003359,US
-3332003360,3332003455,CA
-3332003456,3332003583,UA
-3332003584,3332003584,US
-3332003585,3332003838,IN
-3332003839,3332003847,US
-3332003848,3332003855,CA
-3332003856,3332003903,US
-3332003904,3332003905,CA
-3332003906,3332003909,MY
-3332003910,3332003911,CA
-3332003912,3332003919,CN
-3332003920,3332003920,CA
-3332003921,3332003924,MY
-3332003925,3332003929,CA
-3332003930,3332003934,US
-3332003935,3332004096,CA
-3332004097,3332004158,US
-3332004159,3332004160,CA
-3332004161,3332004222,US
-3332004223,3332004275,CA
-3332004276,3332004282,US
-3332004283,3332004303,CA
-3332004304,3332004335,US
-3332004336,3332004352,CA
-3332004353,3332004479,US
-3332004480,3332004480,CA
-3332004481,3332004542,US
-3332004543,3332004736,CA
-3332004737,3332004798,US
-3332004799,3332004800,CA
-3332004801,3332004830,US
-3332004831,3332004831,CA
-3332004832,3332004863,US
-3332004864,3332005119,CA
-3332005120,3332005182,UA
-3332005183,3332005190,DK
-3332005191,3332005206,CA
-3332005207,3332005214,US
-3332005215,3332005222,PH
-3332005223,3332005230,BR
-3332005231,3332005246,US
-3332005247,3332005254,CA
-3332005255,3332005262,DE
-3332005263,3332005278,US
-3332005279,3332005286,GB
-3332005287,3332005375,CA
-3332005376,3332005438,US
-3332005439,3332005503,IN
-3332005504,3332005632,CA
-3332005633,3332005886,US
-3332005887,3332005887,CA
-3332005888,3332026879,US
-3332028416,3332030463,CA
+3331818752,3331840111,US
+3331840112,3331840115,CA
+3331840116,3331935231,US
+3331935232,3331936255,CA
+3331936256,3331983103,US
+3331983104,3331983359,CA
+3331983360,3331988479,US
+3331988480,3331989503,CA
+3331989504,3332002047,US
+3332002048,3332002559,CA
+3332002560,3332002815,US
+3332002816,3332003583,CA
+3332003584,3332028415,US
+3332028416,3332028927,CA
+3332028928,3332029183,US
+3332029184,3332030463,CA
3332030464,3332083967,US
-3332083968,3332084223,AP
-3332084224,3332095231,US
-3332095232,3332095487,EU
-3332095488,3332440063,US
-3332440064,3332460543,CA
+3332083968,3332084223,AU
+3332084224,3332423423,US
+3332423424,3332423679,CA
+3332423680,3332440319,US
+3332440320,3332460543,CA
3332460544,3332460799,US
3332460800,3332461311,CA
-3332461568,3332473855,CA
+3332461312,3332461567,US
+3332461568,3332462335,CA
+3332462336,3332462591,US
+3332462592,3332473855,CA
3332473856,3332477951,US
3332477952,3332482303,CA
-3332482560,3332483071,US
-3332483072,3332484095,A2
+3332482304,3332484095,US
3332484096,3332491263,CA
-3332491264,3332491775,US
-3332492032,3332503039,CA
+3332491264,3332492031,US
+3332492032,3332500735,CA
+3332500736,3332500991,US
+3332500992,3332503039,CA
3332503040,3332503551,US
-3332503552,3332528127,CA
+3332503552,3332505343,CA
+3332505344,3332505855,US
+3332505856,3332508671,CA
+3332508672,3332508927,US
+3332508928,3332528127,CA
3332528128,3332529663,US
3332529664,3332554751,CA
3332554752,3332558847,US
3332558848,3332562943,CA
3332562944,3332563455,US
-3332563456,3332579327,CA
+3332563456,3332564479,CA
+3332564480,3332564735,US
+3332564736,3332570879,CA
+3332570880,3332571391,US
+3332571392,3332579327,CA
3332579328,3332581375,US
3332581376,3332590079,CA
3332590080,3332590591,US
-3332590592,3332616191,CA
+3332590592,3332594687,CA
+3332594688,3332594943,US
+3332594944,3332595455,CA
+3332595456,3332595711,US
+3332595712,3332610559,CA
+3332610560,3332611071,US
+3332611072,3332611327,CA
+3332611328,3332611583,US
+3332611584,3332616191,CA
3332616192,3332616959,US
-3332616960,3332617471,CA
-3332618240,3332624383,US
-3332624384,3332724735,CA
+3332616960,3332617727,CA
+3332617728,3332624383,US
+3332624384,3332625919,CA
+3332626688,3332636415,CA
+3332636416,3332636671,US
+3332636672,3332724735,CA
3332724736,3332726783,PM
3332726784,3332737023,CA
3332737024,3332738047,PM
@@ -138686,67 +71538,77 @@
3332744192,3332745215,PM
3332745216,3332752127,CA
3332752128,3332752383,PM
-3332752384,3332866303,CA
-3332867072,3332874239,US
-3332874240,3332876287,CA
-3332878336,3332882431,US
+3332752384,3332833279,CA
+3332833280,3332833535,US
+3332833536,3332841471,CA
+3332841472,3332841727,US
+3332841728,3332866303,CA
+3332866304,3332874239,US
+3332874240,3332875007,CA
+3332875008,3332875263,US
+3332875264,3332876287,CA
+3332876288,3332882431,US
3332882432,3332890623,KN
-3332890624,3332894719,US
-3332896768,3332906495,CA
-3332906496,3332906751,US
-3332907008,3332925695,CA
-3332926464,3332927487,US
-3332927488,3332947967,CA
+3332890624,3332897279,US
+3332897280,3332898559,CA
+3332898560,3332899071,US
+3332899072,3332906495,CA
+3332906496,3332909567,US
+3332909568,3332909823,CA
+3332909824,3332910079,US
+3332910080,3332922879,CA
+3332922880,3332923391,US
+3332923392,3332925695,CA
+3332925696,3332929023,US
+3332929024,3332930047,CA
+3332930560,3332931327,US
+3332931328,3332947967,CA
3332947968,3332948223,US
3332948224,3332966143,CA
3332966144,3332966399,US
-3332966400,3332988927,CA
+3332966400,3332979967,CA
+3332979968,3332980735,US
+3332980736,3332988927,CA
3332988928,3332989951,US
-3332989952,3333012479,CA
+3332989952,3332997119,CA
+3332997120,3332997375,US
+3332997376,3333008383,CA
+3333008384,3333008895,US
+3333008896,3333012479,CA
3333012480,3333012991,US
-3333012992,3333023743,CA
-3333023744,3333024767,US
-3333025280,3333029887,CA
-3333029888,3333212415,US
-3333212416,3333212927,US
-3333212928,3333213055,US
-3333213056,3333213439,US
-3333213440,3333213695,US
-3333213696,3333214079,US
-3333214080,3333246505,US
-3333246506,3333246506,US
-3333246507,3333385983,US
+3333012992,3333014015,CA
+3333014016,3333014527,US
+3333014528,3333017599,CA
+3333017600,3333018111,US
+3333018112,3333023231,CA
+3333023232,3333025279,US
+3333025280,3333029631,CA
+3333029632,3333374975,US
+3333374976,3333375231,IN
+3333375232,3333385983,US
3333385984,3333386239,JP
-3333386240,3333396689,US
-3333396690,3333396691,EU
-3333396692,3333427967,US
+3333386240,3333427967,US
3333427968,3333428007,GB
-3333428008,3333428008,EU
+3333428008,3333428008,US
3333428009,3333428223,GB
-3333428224,3333429759,US
-3333431296,3333480191,US
+3333428224,3333476607,US
+3333477376,3333480191,US
3333480192,3333481471,DE
-3333481472,3333502975,US
-3333502976,3333503135,CN
-3333503136,3333503167,US
-3333503168,3333503359,CN
-3333503360,3333503391,US
-3333503392,3333503783,CN
-3333503784,3333503791,US
-3333503792,3333504095,CN
-3333504096,3333504127,US
-3333504128,3333504431,CN
-3333504432,3333504447,US
-3333504448,3333505023,CN
-3333505024,3333593855,US
+3333481472,3333517823,US
+3333517824,3333518335,CA
+3333518336,3333583871,US
+3333583872,3333584895,CA
+3333584896,3333593855,US
3333593856,3333594111,CA
-3333594112,3333603327,US
-3333603328,3333603328,GB
-3333603329,3333603329,EU
-3333603330,3333603583,GB
-3333603584,3333609733,US
+3333594112,3333609733,US
3333609734,3333609734,AU
-3333609735,3333701887,US
+3333609735,3333614591,US
+3333614592,3333614847,GB
+3333614848,3333624319,US
+3333624320,3333624575,CA
+3333624576,3333675775,US
+3333675776,3333676031,CA
+3333676032,3333701887,US
3333701888,3333702143,GB
3333702144,3333702399,US
3333702400,3333702655,CH
@@ -138769,9 +71631,7 @@
3333781504,3333783551,CA
3333783552,3333801727,US
3333801728,3333801983,CA
-3333801984,3333825791,US
-3333825792,3333826047,EU
-3333826048,3333829657,US
+3333801984,3333829657,US
3333829658,3333829658,IN
3333829659,3333859839,US
3333859840,3333860095,BM
@@ -138785,9 +71645,7 @@
3333997824,3333998079,CA
3333998080,3334006781,US
3334006782,3334006782,NL
-3334006783,3334007551,US
-3334007552,3334007807,EU
-3334007808,3334019583,US
+3334006783,3334020095,US
3334020096,3334021119,CA
3334021120,3334138623,US
3334138624,3334138879,BM
@@ -138797,10 +71655,14 @@
3334932224,3334932479,CA
3334932480,3334934015,US
3334934016,3334934527,CA
-3334934528,3334946815,US
+3334934528,3334962431,US
+3334962432,3334963199,NL
3334963200,3334995967,US
3334995968,3334998527,PH
-3334998528,3335012351,US
+3334998528,3335004655,US
+3335004656,3335004671,CN
+3335004672,3335012351,US
+3335012352,3335028735,CA
3335028736,3335057919,US
3335057920,3335058175,CA
3335058176,3335160319,US
@@ -138817,17 +71679,11 @@
3335458816,3335460863,BM
3335460864,3335475199,US
3335475200,3335475455,DE
-3335475456,3335480191,US
-3335480192,3335480319,IT
-3335480320,3335524351,US
+3335475456,3335524351,US
3335524352,3335524607,AU
3335524608,3335573759,US
3335573760,3335574015,IN
-3335574016,3335581695,US
-3335581696,3335581951,EU
-3335581952,3335582463,US
-3335582464,3335582719,EU
-3335582720,3335784191,US
+3335574016,3335784191,US
3335784192,3335784447,CA
3335784448,3335860991,US
3335860992,3335861247,MX
@@ -138835,9 +71691,13 @@
3336139776,3336140799,CA
3336140800,3336854015,US
3336854016,3336854271,CO
-3336854272,3336990719,US
-3336990720,3336994815,CA
-3336994816,3337044479,US
+3336854272,3336991231,US
+3336991232,3336991487,CA
+3336991488,3336993023,US
+3336993024,3336993535,CA
+3336993536,3337030655,US
+3337030656,3337030911,GB
+3337030912,3337044479,US
3337044480,3337044735,CA
3337044736,3337044991,US
3337044992,3337046015,CA
@@ -138854,8 +71714,8 @@
3337060352,3337069055,US
3337069056,3337069119,GB
3337069120,3337289983,US
-3337289984,3337292799,CA
-3337292800,3337293823,US
+3337289984,3337293567,CA
+3337293568,3337293823,US
3337293824,3337297919,CA
3337297920,3337302015,US
3337302016,3337303551,CA
@@ -138872,34 +71732,18 @@
3337341952,3337342463,US
3337342464,3337355007,CA
3337355008,3337650175,US
-3337650176,3337650250,GB
-3337650251,3337650251,EU
-3337650252,3337650687,GB
-3337650688,3337651199,US
-3337651200,3337651455,CH
+3337650176,3337650431,GB
+3337650432,3337650943,US
+3337650944,3337651455,CH
3337651456,3337651711,SG
-3337651712,3337653503,CH
-3337653504,3337653759,JP
-3337653760,3337654783,CH
+3337651712,3337654783,CH
3337654784,3337655039,AU
3337655040,3337682943,CH
-3337682944,3337891839,US
-3337891840,3337892127,IN
-3337892128,3337892159,US
-3337892160,3337892255,IN
-3337892256,3337892607,US
+3337682944,3337892607,US
3337892608,3337892671,HK
3337892672,3337893119,US
3337893120,3337893631,CN
-3337893632,3337894655,US
-3337894656,3337894719,CN
-3337894720,3337894783,US
-3337894784,3337894911,CN
-3337894912,3337895167,US
-3337895168,3337895295,CN
-3337895296,3337895423,US
-3337895424,3337895615,CN
-3337895616,3337895679,US
+3337893632,3337895679,US
3337895680,3337895935,CN
3337895936,3337900031,PR
3337900032,3337948671,US
@@ -138908,7 +71752,11 @@
3337957376,3337958399,CA
3337958400,3337960447,US
3337960448,3337961471,CA
-3337961472,3337969663,US
+3337961472,3337961727,US
+3337961728,3337961983,CA
+3337961984,3337963391,US
+3337963392,3337963519,CA
+3337963520,3337969663,US
3337969664,3337973759,PR
3337973760,3337977855,CA
3337977856,3337980671,US
@@ -139014,12 +71862,16 @@
3338354688,3338371071,US
3338371072,3338403839,CA
3338403840,3338424319,US
-3338424320,3338432511,CA
+3338424320,3338428415,CA
+3338428416,3338429439,US
+3338429440,3338429951,CA
+3338429952,3338430719,US
+3338430720,3338432511,CA
3338432512,3338455039,US
3338455040,3338455295,GB
3338455296,3338567679,US
3338567680,3338600447,CA
-3338665984,3338686463,US
+3338600448,3338686463,US
3338686464,3338688511,AW
3338688512,3338770431,US
3338770432,3338772479,PR
@@ -139027,18 +71879,22 @@
3338825728,3338827775,AW
3338827776,3338912767,US
3338912768,3338913023,EC
-3338913024,3338916351,US
-3338916352,3338916479,CN
-3338916480,3338934015,US
-3338934016,3338934271,GB
-3338934272,3338935039,US
+3338913024,3338935039,US
3338935040,3338935295,GB
-3338935296,3339059629,US
+3338935296,3338964991,US
+3338964992,3338965247,CA
+3338965248,3338969343,US
+3338969600,3339000319,US
+3339000832,3339028735,US
+3339028992,3339031295,US
+3339031552,3339045119,US
+3339045376,3339050751,US
+3339051008,3339059629,US
3339059630,3339059885,NL
-3339059886,3339075583,US
+3339059886,3339063039,US
+3339063296,3339075583,US
3339075584,3339076863,GB
-3339076864,3339077119,NO
-3339077120,3339077631,JP
+3339076864,3339077631,NO
3339077632,3339077887,SG
3339077888,3339079167,US
3339079168,3339079423,DK
@@ -139075,27 +71931,24 @@
3339179008,3339180031,US
3339180032,3339181055,CA
3339181056,3339184127,US
-3339184128,3339185839,CA
-3339185840,3339185843,US
-3339185844,3339186175,CA
-3339186176,3339327999,US
+3339184128,3339186175,CA
+3339186176,3339270399,US
+3339271168,3339327999,US
3339328512,3339329535,CA
3339329536,3339337727,US
3339337984,3339338239,US
3339338240,3339338495,CA
-3339338496,3339669503,US
+3339338496,3339342847,US
+3339343104,3339343615,US
+3339343872,3339348223,US
+3339348480,3339373055,US
+3339373568,3339655679,US
+3339656192,3339667967,US
+3339668480,3339669503,US
3339669504,3339671807,CA
-3339672576,3339678721,US
-3339678722,3339678782,CN
-3339678783,3339678785,US
-3339678786,3339678846,CN
-3339678847,3339679487,US
+3339672576,3339679487,US
3339679488,3339679743,CN
-3339679744,3339727343,US
-3339727344,3339727351,CA
-3339727352,3339728319,US
-3339728320,3339728351,IN
-3339728352,3339728591,US
+3339679744,3339728591,US
3339728592,3339728599,IN
3339728600,3339728895,US
3339728896,3339729919,AG
@@ -139109,129 +71962,28 @@
3339753472,3339754495,CA
3339754496,3339760639,US
3339760640,3339761663,CA
-3339761664,3339766023,US
-3339766024,3339766031,UA
-3339766032,3339766047,US
-3339766048,3339766055,RO
-3339766056,3339766079,US
-3339766080,3339766087,AF
-3339766088,3339766095,US
-3339766096,3339766103,GB
-3339766104,3339766151,US
-3339766152,3339766159,RU
-3339766160,3339766183,US
-3339766184,3339766191,RO
-3339766192,3339766231,US
-3339766232,3339766239,RO
-3339766240,3339766247,OM
-3339766248,3339766271,US
-3339766272,3339766287,CA
-3339766288,3339766319,US
-3339766320,3339766335,CH
-3339766336,3339766351,US
-3339766352,3339766367,GB
-3339766368,3339766399,US
-3339766400,3339766415,RU
-3339766416,3339766551,US
-3339766552,3339766559,RO
-3339766560,3339766583,US
-3339766584,3339766591,AU
-3339766592,3339766623,US
-3339766624,3339766631,NO
-3339766632,3339766679,US
-3339766680,3339766687,RO
-3339766688,3339766695,US
-3339766696,3339766703,PT
-3339766704,3339766719,US
-3339766720,3339766727,CA
-3339766728,3339766751,US
-3339766752,3339766759,BE
-3339766760,3339766767,US
-3339766768,3339766775,HU
-3339766776,3339766823,US
-3339766824,3339766831,GP
-3339766832,3339766839,US
-3339766840,3339766847,NL
-3339766848,3339766855,US
-3339766856,3339766863,OM
-3339766864,3339766879,US
-3339766880,3339766887,IL
-3339766888,3339766903,US
-3339766904,3339766911,NZ
-3339766912,3339766943,US
-3339766944,3339766951,RU
-3339766952,3339766975,US
-3339766976,3339766983,DE
-3339766984,3339767071,US
-3339767072,3339767079,CA
-3339767080,3339767103,US
-3339767104,3339767111,CA
-3339767112,3339767119,GB
-3339767120,3339767127,RU
-3339767128,3339767135,RO
-3339767136,3339767143,GB
-3339767144,3339767167,US
-3339767168,3339767175,RU
-3339767176,3339767199,US
-3339767200,3339767207,IT
-3339767208,3339767215,GB
-3339767216,3339767231,US
-3339767232,3339767239,RU
-3339767240,3339767247,BR
-3339767248,3339767255,DE
-3339767256,3339767263,US
-3339767264,3339767271,AR
-3339767272,3339767423,US
-3339767424,3339767431,GB
-3339767432,3339767439,CN
-3339767440,3339767455,US
-3339767456,3339767463,IL
-3339767464,3339767519,US
-3339767520,3339767527,OM
-3339767528,3339767535,US
-3339767536,3339767543,GB
-3339767544,3339767551,DE
-3339767552,3339767679,US
-3339767680,3339767711,BR
-3339767712,3339923455,US
-3339923456,3339927551,CA
+3339761664,3339766047,US
+3339766048,3339766055,DE
+3339766056,3339766183,US
+3339766184,3339766191,AU
+3339766192,3339767007,US
+3339767008,3339767015,DE
+3339767016,3339923455,US
+3339923456,3339926015,CA
+3339926528,3339927551,CA
3339927552,3339934719,US
3339934720,3339935743,CA
3339935744,3339937279,US
3339937280,3339937535,MX
-3339937536,3339937816,US
-3339937817,3339937879,CN
-3339937880,3339937922,US
-3339937923,3339937983,PL
-3339937984,3339938595,US
-3339938596,3339938622,ID
-3339938623,3339938652,TH
-3339938653,3339938817,US
-3339938818,3339938830,IN
-3339938831,3339939130,US
-3339939131,3339939191,BR
-3339939192,3339939396,US
-3339939397,3339939426,GB
-3339939427,3339939440,US
-3339939441,3339939446,TR
-3339939447,3339939473,US
-3339939474,3339939534,GB
-3339939535,3339939582,TR
-3339939583,3339941650,US
-3339941651,3339941651,BR
-3339941652,3339941664,US
-3339941665,3339941665,BR
-3339941666,3339941790,US
-3339941791,3339941791,BR
-3339941792,3339952127,US
+3339937536,3339952127,US
3339952128,3339956223,CA
3339956224,3339965439,US
3339965440,3339968511,CA
-3339968512,3340059343,US
-3340059344,3340059359,CA
-3340059360,3340071679,US
-3340071680,3340071743,ES
-3340071744,3340080127,US
+3339968512,3339975935,US
+3339975936,3339976191,CA
+3339976192,3339991807,US
+3339991808,3339992063,CA
+3339992064,3340080127,US
3340080128,3340081151,CA
3340081152,3340084223,US
3340084224,3340085247,KN
@@ -139246,22 +71998,19 @@
3340387328,3340388351,CA
3340388352,3340390399,US
3340390400,3340391423,CA
-3340391424,3340391777,US
-3340391778,3340391785,LK
-3340391786,3340391793,EG
-3340391794,3340391825,US
-3340391826,3340391833,EG
-3340391834,3340391841,VE
-3340391842,3340391849,IN
-3340391850,3340429823,US
+3340391424,3340411903,US
+3340412160,3340417023,US
+3340417280,3340418559,US
+3340419328,3340425983,US
+3340426752,3340429823,US
3340429824,3340430079,PA
-3340430080,3340452863,US
+3340430080,3340431871,US
+3340432384,3340435199,US
+3340435456,3340452863,US
3340452864,3340453887,CA
3340453888,3340460031,US
3340460032,3340462079,PR
-3340462080,3340466175,US
-3340466176,3340467199,A2
-3340467200,3340481535,US
+3340462080,3340481535,US
3340481536,3340482559,CA
3340482560,3340490751,US
3340490752,3340492799,CA
@@ -139269,197 +72018,48 @@
3340493568,3340493823,HK
3340493824,3340584703,US
3340584704,3340584959,KW
-3340584960,3340648959,US
-3340648960,3340649215,US
-3340649216,3340664831,US
+3340584960,3340664831,US
3340664832,3340665855,CA
3340665856,3340677119,US
3340677120,3340679167,CA
3340679168,3340694783,US
3340694784,3340695039,CA
-3340695040,3340857343,US
-3340857344,3340858015,CA
-3340858016,3340858047,US
-3340858048,3340858367,CA
-3340858368,3340925095,US
-3340925096,3340925103,CA
-3340925104,3340925159,US
-3340925160,3340925167,FR
-3340925168,3340925175,BE
-3340925176,3340925335,US
-3340925336,3340925343,DK
-3340925344,3340925383,US
-3340925384,3340925391,RU
-3340925392,3340925439,US
-3340925440,3340925447,GB
-3340925448,3340925471,US
-3340925472,3340925479,CH
-3340925480,3340925495,US
-3340925496,3340925503,BR
-3340925504,3340925519,US
-3340925520,3340925527,GB
-3340925528,3340925535,US
-3340925536,3340925543,RU
-3340925544,3340925551,GB
-3340925552,3340925631,US
-3340925632,3340925639,FR
-3340925640,3340925647,CO
-3340925648,3340925695,US
-3340925696,3340925703,AU
-3340925704,3340925711,FR
-3340925712,3340925719,NZ
-3340925720,3340925727,CA
-3340925728,3340925735,US
-3340925736,3340925743,UA
-3340925744,3340925759,US
-3340925760,3340925767,FR
-3340925768,3340925783,US
-3340925784,3340925791,BR
-3340925792,3340925807,US
-3340925808,3340925815,RU
+3340695040,3340835327,US
+3340835840,3340845567,US
+3340846080,3340848127,US
+3340848896,3340849151,US
+3340849408,3340849663,US
+3340850176,3340857343,US
+3340857344,3340858367,CA
+3340859136,3340865279,US
+3340865536,3340923391,US
+3340923904,3340925815,US
3340925816,3340925823,AU
-3340925824,3340925887,GB
-3340925888,3340925895,CA
-3340925896,3340925903,GR
-3340925904,3340925919,US
-3340925920,3340925927,PT
-3340925928,3340925935,US
-3340925936,3340925943,BR
-3340925944,3340925951,CA
-3340925952,3340925959,BE
-3340925960,3340925999,US
-3340926000,3340926007,RU
-3340926008,3340926015,US
-3340926016,3340926023,RU
-3340926024,3340926063,US
-3340926064,3340926071,CA
-3340926072,3340926143,US
-3340926144,3340926151,FR
-3340926152,3340926159,CN
-3340926160,3340926175,AR
-3340926176,3340926191,US
-3340926192,3340926199,BR
-3340926200,3340926215,US
-3340926216,3340926223,SE
-3340926224,3340926231,PT
-3340926232,3340926247,US
-3340926248,3340926255,AR
-3340926256,3340926263,AU
-3340926264,3340926271,US
-3340926272,3340926279,CA
-3340926280,3340926295,US
-3340926296,3340926303,AR
-3340926304,3340926319,US
-3340926320,3340926327,RU
-3340926328,3340926343,US
-3340926344,3340926351,DE
-3340926352,3340926439,US
-3340926440,3340926447,NO
-3340926448,3340926455,DE
-3340926456,3340926463,US
-3340926464,3340926479,MX
-3340926480,3340926487,BR
-3340926488,3340926495,US
-3340926496,3340926503,DE
-3340926504,3340926511,MX
-3340926512,3340926527,SE
-3340926528,3340926543,US
-3340926544,3340926559,GB
-3340926560,3340926599,US
-3340926600,3340926607,BR
-3340926608,3340926623,US
-3340926624,3340926655,BR
-3340926656,3340926663,RU
-3340926664,3340926679,US
-3340926680,3340926687,HU
-3340926688,3340926807,US
-3340926808,3340926815,IN
-3340926816,3340926823,CA
-3340926824,3340926887,US
-3340926888,3340926895,BR
-3340926896,3340926903,US
-3340926904,3340926911,IL
-3340926912,3340926927,US
-3340926928,3340926935,ES
-3340926936,3341056079,US
-3341056080,3341056095,CH
-3341056096,3341056223,IN
-3341056224,3341056239,AU
-3341056240,3341056255,US
-3341056256,3341056271,IN
-3341056272,3341056287,US
-3341056288,3341056346,IN
-3341056347,3341056347,US
-3341056348,3341056415,IN
-3341056416,3341082623,US
+3340925824,3340926295,US
+3340926296,3340926303,DE
+3340926304,3341027839,US
+3341028352,3341031935,US
+3341032448,3341082623,US
3341082624,3341084671,CA
-3341084672,3341180927,US
+3341084672,3341162751,US
+3341163520,3341180927,US
3341180928,3341182975,CA
-3341182976,3341205503,US
-3341205504,3341207551,VC
+3341182976,3341196799,US
+3341197312,3341205503,US
+3341205504,3341207551,BB
3341207552,3341216255,US
3341216256,3341216511,JP
3341216512,3341216767,US
3341216768,3341217791,CA
-3341217792,3341217807,US
-3341217808,3341217823,IN
-3341217824,3341217839,PH
-3341217840,3341217847,US
-3341217848,3341217855,PH
-3341217856,3341217863,US
-3341217864,3341217871,AU
-3341217872,3341217887,PH
-3341217888,3341217895,US
-3341217896,3341217903,PH
-3341217904,3341217935,US
-3341217936,3341217951,AU
-3341217952,3341217967,NL
-3341217968,3341217983,EG
-3341217984,3341218015,US
-3341218016,3341218023,PH
-3341218024,3341218039,US
-3341218040,3341218047,PH
-3341218048,3341218055,JP
-3341218056,3341218063,US
-3341218064,3341218071,SG
-3341218072,3341218151,US
-3341218152,3341218167,PH
-3341218168,3341218207,US
-3341218208,3341218215,JP
-3341218216,3341218223,US
-3341218224,3341218231,AU
-3341218232,3341218247,US
-3341218248,3341218255,PH
-3341218256,3341218271,US
-3341218272,3341218279,CN
-3341218280,3341218287,NZ
-3341218288,3341218319,US
-3341218320,3341218335,SG
-3341218336,3341218351,US
-3341218352,3341218367,PH
-3341218368,3341218431,US
-3341218432,3341218463,CN
-3341218464,3341218495,US
-3341218496,3341218527,CL
-3341218528,3341218559,CN
-3341218560,3341218591,US
-3341218592,3341218623,CN
-3341218624,3341218687,CA
-3341218688,3341218815,US
-3341218816,3341219007,CA
-3341219008,3341219071,US
-3341219072,3341219103,JP
-3341219104,3341219199,US
-3341219200,3341219231,IN
-3341219232,3341219647,US
-3341219648,3341219711,CA
-3341219712,3341339647,US
-3341339648,3341339903,AP
+3341217792,3341218623,US
+3341218624,3341218655,CA
+3341218656,3341339647,US
+3341339648,3341339903,CZ
3341339904,3341340159,US
-3341340160,3341340415,AP
-3341340416,3341438975,US
-3341438976,3341439231,CA
-3341439232,3341444863,US
+3341340160,3341340415,CZ
+3341340416,3341439200,US
+3341439201,3341439201,CA
+3341439202,3341444863,US
3341444864,3341445631,DE
3341445632,3341464575,US
3341464576,3341464831,GB
@@ -139471,14 +72071,21 @@
3341484288,3341485055,CA
3341485056,3341488639,US
3341488640,3341488895,JP
-3341488896,3341489151,AP
-3341489152,3341511679,US
-3341511680,3341517823,CA
+3341488896,3341489151,HK
+3341489152,3341495551,US
+3341495552,3341495807,HK
+3341495808,3341500159,US
+3341500160,3341500415,HK
+3341500416,3341511679,US
+3341511680,3341513215,CA
+3341513728,3341517823,CA
3341517824,3341518847,US
3341518848,3341520895,CA
3341520896,3341521663,US
3341521664,3341531135,CA
-3341531136,3341534207,US
+3341531392,3341531647,US
+3341531648,3341531903,IN
+3341531904,3341534207,US
3341534976,3341537279,CA
3341537280,3341546239,US
3341546240,3341547007,CA
@@ -139502,17 +72109,7 @@
3341646080,3341646591,CA
3341646592,3341709311,US
3341709312,3341710335,CA
-3341710336,3341712639,US
-3341712640,3341712767,CN
-3341712768,3341712847,US
-3341712848,3341712855,CN
-3341712856,3341712983,US
-3341712984,3341712991,CN
-3341712992,3341713063,US
-3341713064,3341713071,CN
-3341713072,3341713103,US
-3341713104,3341713111,CA
-3341713112,3341727999,US
+3341710336,3341727999,US
3341728000,3341728255,AU
3341728256,3341758463,US
3341758464,3341759487,CA
@@ -139523,64 +72120,25 @@
3341778944,3341796863,US
3341796864,3341797375,JP
3341797376,3341807615,US
-3341807616,3341807652,CA
-3341807653,3341807653,US
-3341807654,3341807706,CA
-3341807707,3341807815,US
-3341807816,3341807822,CA
-3341807823,3341807844,US
-3341807845,3341807855,CA
-3341807856,3341807865,US
-3341807866,3341808192,CA
-3341808193,3341808206,ID
-3341808207,3341808607,CA
-3341808608,3341808638,US
-3341808639,3341808639,CA
-3341808640,3341828095,US
+3341807616,3341808639,CA
+3341808640,3341815039,US
+3341815808,3341828095,US
3341828096,3341829119,CA
3341829120,3341837311,US
3341837312,3341838335,CA
-3341838336,3341849375,US
-3341849376,3341853471,US
-3341853472,3341854551,US
-3341854552,3341854559,SG
-3341854560,3341863963,US
-3341863964,3341864959,AG
+3341838336,3341863935,US
+3341863936,3341864959,AG
3341864960,3341867007,US
3341867008,3341869055,CA
-3341869056,3341873151,US
-3341873152,3341875199,US
-3341875200,3342139391,US
+3341869056,3341881087,US
+3341881088,3341881343,SG
+3341881344,3341891071,US
+3341891072,3341891327,AU
+3341891328,3342139391,US
3342139392,3342204927,CH
3342204928,3342487551,US
3342487552,3342488575,CA
-3342488576,3342488831,US
-3342488832,3342488863,GB
-3342488864,3342488872,US
-3342488873,3342488882,BG
-3342488883,3342488896,US
-3342488897,3342488908,GB
-3342488909,3342488909,US
-3342488910,3342488925,GB
-3342488926,3342488959,US
-3342488960,3342489215,SC
-3342489216,3342489279,GB
-3342489280,3342489301,US
-3342489302,3342489311,AR
-3342489312,3342489376,US
-3342489377,3342489391,HK
-3342489392,3342489450,US
-3342489451,3342489463,IL
-3342489464,3342489474,US
-3342489475,3342489482,GB
-3342489483,3342489490,US
-3342489491,3342489501,IL
-3342489502,3342489503,US
-3342489504,3342489567,GB
-3342489568,3342489599,AR
-3342489600,3342493759,US
-3342493760,3342493791,CA
-3342493792,3342496767,US
+3342488576,3342496767,US
3342496768,3342497791,CA
3342497792,3342499839,GD
3342499840,3342505983,US
@@ -139591,19 +72149,10 @@
3342516224,3342517247,CA
3342517248,3342526463,US
3342526464,3342528511,CA
-3342528512,3342548167,US
-3342548168,3342548175,GB
-3342548176,3342548183,US
-3342548184,3342548191,TN
-3342548192,3342548575,US
-3342548576,3342548607,GB
-3342548608,3342552063,US
+3342528512,3342543359,US
+3342543872,3342552063,US
3342552064,3342553087,CA
-3342553088,3342556127,US
-3342556128,3342556159,CA
-3342556160,3342556207,US
-3342556208,3342556223,CA
-3342556224,3342565375,US
+3342553088,3342565375,US
3342565376,3342567423,CA
3342567424,3342579711,US
3342579712,3342581759,CA
@@ -139617,95 +72166,59 @@
3342603264,3342604799,US
3342604800,3342605311,CA
3342605312,3342605567,US
-3342605568,3342663679,CA
-3342663680,3342795007,US
-3342795008,3342795263,AP
-3342795264,3342831103,US
+3342605568,3342614271,CA
+3342614528,3342623743,CA
+3342624256,3342627839,CA
+3342628096,3342663423,CA
+3342663680,3342831103,US
3342831104,3342831359,IN
-3342831360,3342878971,US
-3342878972,3342878972,EU
-3342878973,3343013887,US
+3342831360,3343013887,US
3343013888,3343015935,CA
-3343015936,3343046919,US
-3343046920,3343046923,IT
-3343046924,3343046939,US
-3343046940,3343046943,RU
-3343046944,3343046955,US
-3343046956,3343046959,IT
-3343046960,3343046963,BE
-3343046964,3343046967,US
-3343046968,3343046971,NL
-3343046972,3343046987,US
-3343046988,3343046991,CA
-3343046992,3343047111,US
-3343047112,3343047127,SG
-3343047128,3343047143,US
-3343047144,3343047151,IT
-3343047152,3343047327,US
-3343047328,3343047343,IT
-3343047344,3343047423,US
-3343047424,3343047439,RU
-3343047440,3343047455,UA
-3343047456,3343047519,US
-3343047520,3343047535,IN
-3343047536,3343047751,US
-3343047752,3343047759,BR
-3343047760,3343047791,US
-3343047792,3343047799,PL
-3343047800,3343047847,US
-3343047848,3343047855,IT
-3343047856,3343047863,US
-3343047864,3343047871,RU
-3343047872,3343047935,US
-3343047936,3343047967,CA
-3343047968,3343055871,US
+3343015936,3343055871,US
3343055872,3343056895,CA
-3343056896,3343108863,US
-3343108864,3343109119,EU
-3343109120,3343153151,US
-3343153152,3343153167,CA
-3343153168,3343153175,US
-3343153176,3343155199,CA
-3343155200,3343167487,US
+3343056896,3343129087,US
+3343129600,3343153151,US
+3343153152,3343154943,CA
+3343154944,3343167487,US
3343167488,3343169535,CA
3343169536,3343171583,US
3343171584,3343172607,BM
-3343172608,3343172695,US
-3343172696,3343172703,NL
-3343172704,3343319295,US
-3343319296,3343346175,CA
+3343172608,3343319295,US
+3343319296,3343342847,CA
+3343343104,3343346175,CA
3343346176,3343346687,US
3343346688,3343355391,CA
3343355392,3343355903,US
-3343355904,3343364095,CA
+3343355904,3343359743,CA
+3343360000,3343364095,CA
3343364096,3343365631,US
-3343365632,3343372543,CA
-3343372800,3343378431,US
-3343378432,3343378447,BR
-3343378448,3343380479,US
-3343380480,3343384575,CA
-3343384576,3343457607,US
-3343457608,3343457615,AU
-3343457616,3343457743,US
-3343457744,3343457759,CA
-3343457760,3343457807,US
-3343457808,3343457815,GB
-3343457816,3343460863,US
+3343365632,3343366655,CA
+3343366912,3343372543,CA
+3343372800,3343378511,US
+3343378512,3343378519,GB
+3343378520,3343378535,US
+3343378536,3343378543,GB
+3343378544,3343378575,US
+3343378576,3343378583,GB
+3343378584,3343378823,US
+3343378824,3343378839,SE
+3343378840,3343379079,US
+3343379080,3343379087,SE
+3343379088,3343380479,US
+3343380480,3343384319,CA
+3343384576,3343456511,US
+3343456768,3343460863,US
3343460864,3343461375,CA
3343461376,3343465471,US
3343465472,3343466495,JM
-3343466496,3343858687,US
+3343466496,3343470847,US
+3343471104,3343557119,US
+3343557376,3343858687,US
3343858688,3343859199,VG
-3343859200,3343922975,US
-3343922976,3343923007,PA
-3343923008,3343923071,US
-3343923072,3343923135,CY
-3343923136,3343923199,HK
-3343923200,3344116223,US
+3343859200,3344111871,US
+3344112128,3344116223,US
3344116224,3344116735,CA
-3344116736,3344118527,US
-3344118528,3344118783,HK
-3344118784,3344126975,US
+3344116736,3344126975,US
3344126976,3344127999,CA
3344128000,3344138751,US
3344138752,3344139007,GB
@@ -139716,14 +72229,13 @@
3344146432,3344154623,US
3344154624,3344156671,GD
3344156672,3344158719,CA
-3344158720,3344165631,US
-3344165632,3344165663,MX
-3344165664,3344166911,US
+3344158720,3344166911,US
3344166912,3344168959,CA
3344168960,3344171263,US
-3344171264,3344236543,CA
+3344171264,3344236287,CA
3344236544,3344237055,US
-3344237056,3344242175,CA
+3344237056,3344238335,CA
+3344238592,3344242175,CA
3344242176,3344242687,US
3344242688,3344255999,CA
3344256000,3344261631,US
@@ -139732,7 +72244,8 @@
3344266752,3344268543,CA
3344268544,3344268799,GB
3344268800,3344269311,US
-3344269312,3344288767,CA
+3344269312,3344287743,CA
+3344288000,3344288767,CA
3344288768,3344289791,PR
3344289792,3344292863,US
3344292864,3344296447,CA
@@ -139743,52 +72256,38 @@
3344299520,3344299775,US
3344299776,3344300543,CA
3344300544,3344300799,US
-3344300800,3344302079,CA
-3344302080,3344379903,US
+3344300800,3344301823,CA
+3344302080,3344367871,US
+3344368128,3344379903,US
3344379904,3344380927,CA
-3344380928,3344380951,US
-3344380952,3344380959,GB
-3344380960,3344381047,US
-3344381048,3344381055,BR
-3344381056,3344381087,US
-3344381088,3344381095,CA
-3344381096,3344381151,US
-3344381152,3344381159,MX
-3344381160,3344381167,US
-3344381168,3344381175,NZ
-3344381176,3344381199,US
-3344381200,3344381207,AU
-3344381208,3344381215,US
-3344381216,3344381223,NG
-3344381224,3344381255,US
-3344381256,3344381263,CA
-3344381264,3344381271,MX
-3344381272,3344406527,US
+3344380928,3344406527,US
3344406528,3344408575,CA
-3344408576,3344415679,US
-3344415680,3344415743,AR
-3344415744,3344426239,US
-3344426240,3344426495,US
-3344426496,3344429055,US
-3344429056,3344429343,CA
-3344429344,3344429375,US
-3344429376,3344431103,CA
-3344431104,3344486399,US
+3344408576,3344429055,US
+3344429056,3344431103,CA
+3344431104,3344446463,US
+3344447488,3344469247,US
+3344469504,3344486399,US
3344486400,3344488447,NL
-3344488448,3344552959,US
+3344488448,3344495871,US
+3344496128,3344511231,US
+3344511488,3344531711,US
+3344531968,3344536831,US
+3344537088,3344552959,US
3344552960,3344553215,GB
3344553216,3344633855,US
3344633856,3344637951,CH
3344637952,3344649215,US
3344649216,3344650239,PR
3344650240,3344652287,CA
-3344652288,3344658431,US
+3344652288,3344654335,US
+3344654336,3344656383,VG
+3344656384,3344658431,US
3344658432,3344660479,CA
3344660480,3344670719,US
-3344670720,3344671743,GP
-3344671744,3344673983,US
-3344673984,3344673991,SC
-3344673992,3344676863,US
+3344670720,3344671231,GP
+3344671232,3344671487,MF
+3344671488,3344671743,GP
+3344671744,3344676863,US
3344676864,3344677407,CA
3344677408,3344677423,US
3344677424,3344678911,CA
@@ -139806,81 +72305,24 @@
3344964608,3344965631,CA
3344965632,3344973823,US
3344973824,3344974847,BM
-3344974848,3344979839,US
-3344979840,3344979967,US
+3344974848,3344979967,US
3344979968,3344982015,CA
3344982016,3345007615,US
3345007616,3345008639,CA
3345008640,3345010687,US
3345010688,3345011711,CA
-3345011712,3345299455,US
+3345011712,3345295871,US
+3345296384,3345299455,US
3345299456,3345301503,CA
-3345301504,3345309855,US
-3345309856,3345309871,BR
-3345309872,3345310207,US
-3345310208,3345310231,CA
-3345310232,3345310287,US
-3345310288,3345310295,AR
-3345310296,3345310319,US
-3345310320,3345310321,IN
-3345310322,3345310323,US
-3345310324,3345310335,IN
-3345310336,3345310351,US
-3345310352,3345310367,BR
-3345310368,3345310383,ID
-3345310384,3345310399,BR
-3345310400,3345310559,US
-3345310560,3345310575,IN
-3345310576,3345310591,US
-3345310592,3345310599,HK
-3345310600,3345310615,US
-3345310616,3345310623,GB
-3345310624,3345310751,US
-3345310752,3345310783,CN
-3345310784,3345310799,BR
-3345310800,3345310975,US
-3345310976,3345311039,PL
-3345311040,3345311103,CN
-3345311104,3345311119,BR
-3345311120,3345311135,GB
-3345311136,3345311167,RO
-3345311168,3345311175,US
-3345311176,3345311183,BR
-3345311184,3345311199,US
-3345311200,3345311207,BR
-3345311208,3345311215,SK
-3345311216,3345311223,BR
-3345311224,3345311231,SK
-3345311232,3345318943,US
-3345318944,3345318975,CY
-3345318976,3345321471,US
+3345301504,3345315071,US
+3345315072,3345315327,TW
+3345315328,3345315583,US
+3345315584,3345315839,TW
+3345315840,3345321471,US
3345321472,3345321727,CA
-3345321728,3345322039,US
-3345322040,3345322047,CN
-3345322048,3345322319,US
-3345322320,3345322327,HK
-3345322328,3345322495,US
-3345322496,3345322503,BR
-3345322504,3345322711,US
-3345322712,3345322719,CN
-3345322720,3345322911,US
-3345322912,3345322919,CN
-3345322920,3345327103,US
+3345321728,3345327103,US
3345327104,3345328127,CA
-3345328128,3345332255,US
-3345332256,3345332287,GB
-3345332288,3345332295,US
-3345332296,3345332303,KW
-3345332304,3345332311,US
-3345332312,3345332319,TR
-3345332320,3345332327,US
-3345332328,3345332335,ID
-3345332336,3345332375,US
-3345332376,3345332383,MX
-3345332384,3345332423,US
-3345332424,3345332431,MY
-3345332432,3345332435,ID
-3345332436,3345333247,US
+3345328128,3345333247,US
3345333248,3345334271,MF
3345334272,3345339391,US
3345339392,3345340415,CA
@@ -139890,103 +72332,11 @@
3345383424,3345384447,CA
3345384448,3345390591,US
3345390592,3345391615,CA
-3345391616,3345393151,US
-3345393152,3345393279,AU
-3345393280,3345393407,US
-3345393408,3345393535,AU
-3345393536,3345398783,US
+3345391616,3345398783,US
3345398784,3345399807,BS
3345399808,3345401855,PR
3345401856,3345403903,CA
-3345403904,3345408005,US
-3345408006,3345408009,CZ
-3345408010,3345408017,US
-3345408018,3345408021,GB
-3345408022,3345408092,US
-3345408093,3345408094,GB
-3345408095,3345408098,VE
-3345408099,3345408110,US
-3345408111,3345408114,AU
-3345408115,3345408161,US
-3345408162,3345408165,CA
-3345408166,3345408189,US
-3345408190,3345408193,AR
-3345408194,3345408197,US
-3345408198,3345408225,IN
-3345408226,3345408227,GB
-3345408228,3345408235,US
-3345408236,3345408239,CN
-3345408240,3345408319,US
-3345408320,3345408323,GB
-3345408324,3345408386,US
-3345408387,3345408394,GB
-3345408395,3345408415,US
-3345408416,3345408420,AU
-3345408421,3345408424,US
-3345408425,3345408428,GB
-3345408429,3345408460,US
-3345408461,3345408464,IN
-3345408465,3345408534,US
-3345408535,3345408538,AU
-3345408539,3345408542,CA
-3345408543,3345408569,US
-3345408570,3345408573,CA
-3345408574,3345408577,US
-3345408578,3345408589,GB
-3345408590,3345408634,US
-3345408635,3345408639,CA
-3345408640,3345408651,US
-3345408652,3345408655,CA
-3345408656,3345408667,US
-3345408668,3345408671,CA
-3345408672,3345408697,US
-3345408698,3345408701,GB
-3345408702,3345408784,US
-3345408785,3345408788,CA
-3345408789,3345408888,US
-3345408889,3345408892,MX
-3345408893,3345408903,US
-3345408904,3345408907,GB
-3345408908,3345408949,US
-3345408950,3345408993,IN
-3345408994,3345409033,US
-3345409034,3345409037,CA
-3345409038,3345409085,US
-3345409086,3345409089,CA
-3345409090,3345409093,US
-3345409094,3345409097,CA
-3345409098,3345409175,US
-3345409176,3345409179,CN
-3345409180,3345409204,US
-3345409205,3345409212,AU
-3345409213,3345409217,US
-3345409218,3345409221,AU
-3345409222,3345409245,US
-3345409246,3345409255,GB
-3345409256,3345409558,US
-3345409559,3345409562,CA
-3345409563,3345409576,US
-3345409577,3345409580,GB
-3345409581,3345409706,US
-3345409707,3345409718,IN
-3345409719,3345409782,US
-3345409783,3345409786,SG
-3345409787,3345409816,US
-3345409817,3345409820,GB
-3345409821,3345409871,US
-3345409872,3345409875,CA
-3345409876,3345409887,US
-3345409888,3345409891,GB
-3345409892,3345409899,US
-3345409900,3345409903,CA
-3345409904,3345409911,US
-3345409912,3345409915,CA
-3345409916,3345409919,AU
-3345409920,3345409945,US
-3345409946,3345409949,SG
-3345409950,3345410032,US
-3345410033,3345410036,GB
-3345410037,3345418239,US
+3345403904,3345418239,US
3345418240,3345419519,NL
3345419520,3345422847,US
3345423360,3345424383,TC
@@ -140016,7 +72366,9 @@
3345443328,3345443583,CH
3345443584,3345443839,DE
3345443840,3345444607,US
-3345444608,3345444676,CH
+3345444608,3345444627,CH
+3345444628,3345444629,US
+3345444630,3345444676,CH
3345444677,3345444678,US
3345444679,3345445119,CH
3345445120,3345445375,US
@@ -140024,89 +72376,24 @@
3345446400,3345446655,US
3345446656,3345446911,IT
3345446912,3345447679,US
-3345447680,3345447935,BE
-3345447936,3345448447,FR
+3345447680,3345448447,FR
3345448448,3345448703,BE
3345448704,3345448959,DE
-3345448960,3345666567,US
-3345666568,3345666591,IN
-3345666592,3345666623,US
-3345666624,3345666639,NO
-3345666640,3345667103,US
-3345667104,3345667119,IN
-3345667120,3346193919,US
-3346193920,3346194431,US
-3346194432,3346196479,US
+3345448960,3346140671,US
+3346141184,3346188799,US
+3346189312,3346196479,US
3346196480,3346197503,CA
3346197504,3346201599,US
3346201600,3346202623,CA
-3346202624,3346219007,US
+3346202624,3346209279,US
+3346209792,3346210241,US
+3346210242,3346210242,CA
+3346210243,3346219007,US
3346219008,3346221055,CA
-3346221056,3346221583,US
-3346221584,3346221591,IT
-3346221592,3346221623,US
-3346221624,3346221631,RU
-3346221632,3346221655,US
-3346221656,3346221663,IT
-3346221664,3346221671,BE
-3346221672,3346221679,US
-3346221680,3346221687,NL
-3346221688,3346221719,US
-3346221720,3346221727,CA
-3346221728,3346221871,US
-3346221872,3346221887,SG
-3346221888,3346221903,US
-3346221904,3346221911,IT
-3346221912,3346221999,US
-3346222000,3346222007,BR
-3346222008,3346222039,US
-3346222040,3346222047,PL
-3346222048,3346222095,US
-3346222096,3346222103,IT
-3346222104,3346222111,US
-3346222112,3346222119,RU
-3346222120,3346222335,US
-3346222336,3346222351,IT
-3346222352,3346222431,US
-3346222432,3346222447,RU
-3346222448,3346222463,UA
-3346222464,3346222527,US
-3346222528,3346222543,IN
-3346222544,3346225151,US
+3346221056,3346225151,US
3346225152,3346227199,CA
-3346227200,3346231615,US
-3346231616,3346231647,GB
-3346231648,3346231743,US
-3346231744,3346231807,SC
-3346231808,3346231810,US
-3346231811,3346231827,AR
-3346231828,3346231846,US
-3346231847,3346231854,GB
-3346231855,3346231916,US
-3346231917,3346231924,GB
-3346231925,3346232383,US
-3346232384,3346232447,VG
-3346232448,3346232608,US
-3346232609,3346232617,AR
-3346232618,3346232703,US
-3346232704,3346232767,GB
-3346232768,3346232831,US
-3346232832,3346232895,GB
-3346232896,3346232911,UA
-3346232912,3346232959,US
-3346232960,3346232991,GB
-3346232992,3346233023,US
-3346233024,3346233087,GB
-3346233088,3346233256,US
-3346233257,3346233268,AR
-3346233269,3346233279,US
-3346233280,3346233311,GB
-3346233312,3346234367,US
-3346234368,3346234687,CA
-3346234688,3346234695,US
-3346234696,3346234911,CA
-3346234912,3346234919,FR
-3346234920,3346235391,CA
+3346227200,3346234367,US
+3346234368,3346235391,CA
3346235392,3346241535,US
3346241536,3346243327,CA
3346243328,3346282495,US
@@ -140115,62 +72402,14 @@
3346323456,3346325503,CA
3346325504,3346327551,US
3346327552,3346328575,CA
-3346328576,3346332103,US
-3346332104,3346332111,GB
-3346332112,3346497535,US
+3346328576,3346329599,US
+3346329600,3346330623,CA
+3346330624,3346471423,US
+3346471936,3346497535,US
3346497536,3346498559,CA
-3346498560,3346505783,US
-3346505784,3346505791,GB
-3346505792,3346505895,US
-3346505896,3346505903,AU
-3346505904,3346505951,US
-3346505952,3346505959,CA
-3346505960,3346506007,US
-3346506008,3346506015,EG
-3346506016,3346506023,US
-3346506024,3346506031,CA
-3346506032,3346506039,US
-3346506040,3346506047,CA
-3346506048,3346506111,US
-3346506112,3346506119,JM
-3346506120,3346506127,MX
-3346506128,3346506159,US
-3346506160,3346506167,VE
-3346506168,3346506271,US
-3346506272,3346506279,GB
-3346506280,3346506287,CA
-3346506288,3346506311,US
-3346506312,3346506319,CO
-3346506320,3346506415,US
-3346506416,3346506423,IN
-3346506424,3346506447,US
-3346506448,3346506455,CA
-3346506456,3346506487,US
-3346506488,3346506495,CA
-3346506496,3346506527,US
-3346506528,3346506535,GB
-3346506536,3346506559,US
-3346506560,3346506567,CA
-3346506568,3346506575,TR
-3346506576,3346506743,US
-3346506744,3346506751,GB
-3346506752,3346520063,US
+3346498560,3346520063,US
3346520064,3346521087,CA
-3346521088,3346522347,US
-3346522348,3346522350,BD
-3346522351,3346522401,US
-3346522402,3346522404,IN
-3346522405,3346522411,US
-3346522412,3346522413,AE
-3346522414,3346522523,US
-3346522524,3346522525,BD
-3346522526,3346522787,US
-3346522788,3346522788,FR
-3346522789,3346522840,US
-3346522841,3346522841,FR
-3346522842,3346523113,US
-3346523114,3346523121,TH
-3346523122,3346523135,US
+3346521088,3346523135,US
3346523136,3346523391,BO
3346523392,3346523647,RU
3346523648,3346523903,US
@@ -140179,24 +72418,25 @@
3346525184,3346528255,US
3346528256,3346529279,PR
3346529280,3346530303,CA
-3346530304,3346591487,US
+3346530304,3346545151,US
+3346545664,3346591487,US
3346591488,3346591743,CA
3346591744,3346663167,US
3346663168,3346663423,CA
3346663424,3346691071,US
3346691072,3346692095,CA
-3346692096,3346793215,US
+3346692096,3346730495,US
+3346731008,3346793215,US
3346793216,3346793471,CA
3346793472,3346793983,US
-3346794496,3346923519,US
+3346794496,3346799103,US
+3346799616,3346807295,US
+3346807808,3346923519,US
3346923520,3346989055,CA
-3346989056,3347014255,US
-3347014256,3347014271,CY
-3347014272,3347014367,US
-3347014368,3347014399,CA
-3347014400,3347015615,US
-3347015616,3347015631,AE
-3347015632,3347015647,RU
+3346989056,3346998527,US
+3346998528,3346998783,CA
+3346998784,3346999807,US
+3347000320,3347015647,US
3347015648,3347015663,AE
3347015664,3347016703,US
3347016704,3347017727,CA
@@ -140220,22 +72460,24 @@
3349463040,3349463295,CA
3349463296,3349479167,US
3349479168,3349479423,CA
-3349479424,3349532671,US
-3349532672,3349533695,GB
+3349479424,3349533695,US
3349533696,3349533951,CA
3349533952,3349545215,US
3349545216,3349545727,CA
3349545728,3349545983,US
-3349545984,3349551103,CA
+3349545984,3349549567,CA
+3349550080,3349551103,CA
3349551104,3349553663,US
-3349553664,3349608447,CA
-3349608448,3349609215,US
-3349609216,3349610239,CA
+3349553664,3349605375,CA
+3349605632,3349607423,CA
+3349607936,3349608447,CA
+3349608448,3349609471,US
+3349609472,3349610239,CA
3349610240,3349614591,US
-3349614592,3349617663,CA
-3349617664,3349621243,US
-3349621244,3349621245,IN
-3349621246,3349637119,US
+3349614592,3349616127,CA
+3349616128,3349616639,US
+3349616640,3349617663,CA
+3349617664,3349637119,US
3349637120,3349639167,CA
3349639168,3349640191,US
3349640192,3349641215,CA
@@ -140245,22 +72487,13 @@
3349645312,3349647359,CA
3349647360,3349649407,US
3349649408,3349653503,CA
-3349653504,3349711539,US
-3349711540,3349711547,GB
-3349711548,3349723260,US
-3349723261,3349723265,CA
-3349723266,3349723360,US
-3349723361,3349723367,CA
-3349723368,3349723996,US
-3349723997,3349724000,LK
-3349724001,3349724985,US
-3349724986,3349724999,PK
-3349725000,3349731327,US
+3349653504,3349678591,US
+3349679104,3349682687,US
+3349683200,3349686783,US
+3349687296,3349731327,US
3349731328,3349733375,CA
3349733376,3349739519,US
-3349739520,3349739551,CA
-3349739552,3349739559,US
-3349739560,3349740543,CA
+3349739520,3349740543,CA
3349740544,3349987327,US
3349987328,3349996543,BM
3349996544,3349997055,KY
@@ -140272,7 +72505,8 @@
3350146048,3350150143,US
3350150144,3350160639,CA
3350160640,3350160895,US
-3350160896,3350181887,CA
+3350160896,3350175743,CA
+3350176256,3350181887,CA
3350181888,3350183167,US
3350183168,3350200063,CA
3350200064,3350469119,US
@@ -140281,62 +72515,24 @@
3350475776,3350476799,CA
3350476800,3350487039,US
3350487040,3350488063,CA
-3350488064,3350488111,US
-3350488112,3350488127,CN
-3350488128,3350488215,US
-3350488216,3350488223,CN
-3350488224,3350488247,US
-3350488248,3350488255,CN
-3350488256,3350488271,US
-3350488272,3350488279,CN
-3350488280,3350488359,US
-3350488360,3350488367,CN
-3350488368,3350488455,US
-3350488456,3350488463,CN
-3350488464,3350488471,US
-3350488472,3350488479,CN
-3350488480,3350488495,US
-3350488496,3350488511,CN
-3350488512,3350488575,US
-3350488576,3350488607,CN
-3350488608,3350488743,US
-3350488744,3350488751,CN
-3350488752,3350488847,US
-3350488848,3350488855,CN
-3350488856,3350488959,US
-3350488960,3350489023,CN
-3350489024,3350489063,US
-3350489064,3350489071,CN
-3350489072,3350491391,US
-3350491392,3350491647,PH
+3350488064,3350491647,US
3350491648,3350491903,PL
-3350491904,3350492961,US
-3350492962,3350492990,GB
-3350492991,3350496532,US
-3350496533,3350496533,IN
-3350496534,3350496721,US
-3350496722,3350496723,IN
-3350496724,3350514639,US
-3350514640,3350514655,GB
-3350514656,3350514879,US
-3350514880,3350514911,GB
-3350514912,3350515135,US
-3350515136,3350515167,GB
-3350515168,3350548735,US
+3350491904,3350501631,US
+3350501632,3350501887,MX
+3350501888,3350505471,US
+3350505472,3350507519,CA
+3350507520,3350548735,US
3350548736,3350548991,CA
-3350548992,3350561279,US
-3350561280,3350561535,AP
-3350561536,3350593535,US
+3350548992,3350574591,US
+3350575104,3350577151,US
+3350577664,3350588927,US
+3350589440,3350593535,US
3350593536,3350605823,CA
3350605824,3350606847,US
3350606848,3350607871,CA
3350607872,3350618111,US
3350618112,3350619135,CA
-3350619136,3350620383,US
-3350620384,3350620415,GB
-3350620416,3350620991,US
-3350620992,3350621023,KY
-3350621024,3350623231,US
+3350619136,3350623231,US
3350623232,3350624255,CA
3350624256,3350626303,US
3350626304,3350628351,CA
@@ -140348,97 +72544,36 @@
3350648832,3350650623,CA
3350650624,3350650631,US
3350650632,3350650879,CA
-3350650880,3350790399,US
+3350650880,3350756863,US
+3350757376,3350760959,US
+3350761472,3350790399,US
3350790400,3350814975,CA
3350814976,3350815231,US
-3350815232,3350825727,CA
+3350815232,3350823423,CA
+3350823936,3350825727,CA
3350825728,3350825983,GB
-3350825984,3350836223,CA
+3350825984,3350834687,CA
+3350835200,3350836223,CA
3350836736,3350836991,US
-3350836992,3350843391,CA
+3350836992,3350837247,CA
+3350837760,3350843391,CA
3350843392,3350843647,US
3350843648,3350855679,CA
3350855680,3350862079,US
3350862080,3350864639,CL
-3350864640,3350952495,US
-3350952496,3350952511,PE
-3350952512,3350952583,US
-3350952584,3350952591,BA
-3350952592,3350952799,US
-3350952800,3350952815,AZ
-3350952816,3350953135,US
-3350953136,3350953143,AZ
-3350953144,3350953615,US
-3350953616,3350953623,AR
-3350953624,3350953631,NZ
-3350953632,3350953855,US
-3350953856,3350953871,AZ
-3350953872,3350970367,US
+3350864640,3350950399,US
+3350950912,3350970367,US
3350970368,3350971391,CA
3350971392,3350979583,US
3350979584,3350980607,CA
-3350980608,3350994943,US
+3350980608,3350988287,US
+3350988800,3350994943,US
3350994944,3350998015,CA
3350998016,3351002111,US
3351002112,3351003135,CA
3351003136,3351004159,US
3351004160,3351005183,CA
-3351005184,3351012351,US
-3351012352,3351012359,CA
-3351012360,3351012543,US
-3351012544,3351012575,SE
-3351012576,3351012591,GB
-3351012592,3351012607,CA
-3351012608,3351012735,US
-3351012736,3351012767,GB
-3351012768,3351013151,US
-3351013152,3351013167,KW
-3351013168,3351013183,ID
-3351013184,3351013343,US
-3351013344,3351013375,CA
-3351013376,3351013383,US
-3351013384,3351013391,CN
-3351013392,3351013407,US
-3351013408,3351013439,CN
-3351013440,3351013447,US
-3351013448,3351013567,CN
-3351013568,3351013631,CA
-3351013632,3351013679,CN
-3351013680,3351013695,US
-3351013696,3351014063,CN
-3351014064,3351014079,US
-3351014080,3351014183,CN
-3351014184,3351014207,US
-3351014208,3351014271,CN
-3351014272,3351014335,US
-3351014336,3351014375,CN
-3351014376,3351014399,US
-3351014400,3351014591,CN
-3351014592,3351014655,US
-3351014656,3351014663,CN
-3351014664,3351014671,US
-3351014672,3351014751,CN
-3351014752,3351014783,US
-3351014784,3351014799,CN
-3351014800,3351014807,CA
-3351014808,3351014847,CN
-3351014848,3351014911,US
-3351014912,3351014943,CN
-3351014944,3351015039,US
-3351015040,3351015151,CN
-3351015152,3351015159,US
-3351015160,3351015167,CN
-3351015168,3351015231,US
-3351015232,3351015239,CN
-3351015240,3351015255,US
-3351015256,3351015263,CN
-3351015264,3351015279,US
-3351015280,3351015295,CN
-3351015296,3351015303,US
-3351015304,3351015327,CN
-3351015328,3351015343,US
-3351015344,3351015359,CN
-3351015360,3351015423,US
+3351005184,3351015423,US
3351015424,3351016447,CA
3351016448,3351030783,US
3351030784,3351031807,CA
@@ -140449,69 +72584,17 @@
3351037952,3351043071,US
3351043072,3351043583,FR
3351043584,3351044095,CA
-3351044096,3351045311,US
-3351045312,3351045343,RU
-3351045344,3351045439,US
-3351045440,3351045471,CA
-3351045472,3351045631,US
-3351045632,3351045695,TW
-3351045696,3351071743,US
+3351044096,3351058943,US
+3351059456,3351071743,US
3351071744,3351072767,CA
-3351072768,3351074217,US
-3351074218,3351074218,AR
-3351074219,3351074221,US
-3351074222,3351074231,IN
-3351074232,3351074688,US
-3351074689,3351074689,AR
-3351074690,3351074690,DE
-3351074691,3351074692,US
-3351074693,3351074693,UY
-3351074694,3351074696,US
-3351074697,3351074697,BR
-3351074698,3351074698,US
-3351074699,3351074701,GB
-3351074702,3351074703,US
-3351074704,3351074704,MX
-3351074705,3351074705,US
-3351074706,3351074706,AF
-3351074707,3351074707,US
-3351074708,3351074709,MX
-3351074710,3351074710,AF
-3351074711,3351074711,DE
-3351074712,3351074712,BR
-3351074713,3351074718,US
-3351074719,3351074719,UA
-3351074720,3351074720,MX
-3351074721,3351074724,US
-3351074725,3351074725,PK
-3351074726,3351074726,EE
-3351074727,3351074727,US
-3351074728,3351074729,CA
-3351074730,3351074730,US
-3351074731,3351074731,IL
-3351074732,3351074732,BR
-3351074733,3351074733,EG
-3351074734,3351074734,US
-3351074735,3351074735,BR
-3351074736,3351074736,PE
-3351074737,3351074738,CA
-3351074739,3351074740,US
-3351074741,3351074741,CA
-3351074742,3351074742,US
-3351074743,3351074743,AU
-3351074744,3351074745,LK
-3351074746,3351074746,AU
-3351074747,3351074750,US
-3351074751,3351074751,BR
-3351074752,3351074783,DE
-3351074784,3351074815,BR
+3351072768,3351074815,US
3351074816,3351076863,CA
3351076864,3351080959,US
3351080960,3351081983,AG
3351081984,3351086079,US
3351086080,3351087103,CA
-3351087104,3351094271,US
-3351094272,3351095295,CA
+3351087104,3351094527,US
+3351094528,3351095295,CA
3351095296,3351103487,US
3351103488,3351104511,CA
3351104512,3351104639,JP
@@ -140524,69 +72607,11 @@
3351105024,3351105151,CA
3351105152,3351112703,US
3351112704,3351113727,CA
-3351113728,3351197711,US
-3351197712,3351197719,RO
-3351197720,3351197735,US
-3351197736,3351197739,CA
-3351197740,3351197811,US
-3351197812,3351197815,GB
-3351197816,3351197827,US
-3351197828,3351197831,TR
-3351197832,3351197839,US
-3351197840,3351197843,MX
-3351197844,3351197847,TR
-3351197848,3351197859,US
-3351197860,3351197887,GB
-3351197888,3351197911,US
-3351197912,3351197919,SG
-3351197920,3351197951,GB
-3351197952,3351197983,US
-3351197984,3351198015,MX
-3351198016,3351198047,US
-3351198048,3351198063,GB
-3351198064,3351198095,US
-3351198096,3351198103,CA
-3351198104,3351198131,US
-3351198132,3351198135,VN
-3351198136,3351198139,US
-3351198140,3351198143,PK
-3351198144,3351198147,CA
-3351198148,3351198159,US
-3351198160,3351198163,PT
-3351198164,3351198183,US
-3351198184,3351198187,DE
-3351198188,3351198255,US
-3351198256,3351198259,ID
-3351198260,3351198303,US
-3351198304,3351198335,ID
-3351198336,3351198351,US
-3351198352,3351198359,CA
-3351198360,3351198371,US
-3351198372,3351198383,CA
-3351198384,3351198391,US
-3351198392,3351198395,DK
-3351198396,3351198399,BR
-3351198400,3351198415,US
-3351198416,3351198419,DE
-3351198420,3351198423,BR
-3351198424,3351198427,US
-3351198428,3351198447,BR
-3351198448,3351198479,US
-3351198480,3351198487,TH
-3351198488,3351198503,US
-3351198504,3351198511,FR
-3351198512,3351198515,US
-3351198516,3351198527,NL
-3351198528,3351198543,US
-3351198544,3351198551,SG
-3351198552,3351198559,US
-3351198560,3351198567,CY
-3351198568,3351198575,CA
-3351198576,3351198607,US
-3351198608,3351198615,GR
-3351198616,3351198703,US
-3351198704,3351198719,BR
-3351198720,3351232511,US
+3351113728,3351167487,US
+3351168512,3351171327,US
+3351171584,3351196159,US
+3351196672,3351197183,US
+3351197696,3351232511,US
3351232512,3351232767,IL
3351232768,3351275519,US
3351275520,3351276543,CA
@@ -140598,13 +72623,10 @@
3351303168,3351304191,CA
3351304192,3351306239,US
3351306240,3351307263,VC
-3351307264,3351307295,US
-3351307296,3351307311,MX
-3351307312,3351308287,US
+3351307264,3351308287,US
3351308288,3351310335,CA
-3351310336,3351310895,US
-3351310896,3351310911,GB
-3351310912,3351326719,US
+3351310336,3351318015,US
+3351318528,3351326719,US
3351326720,3351328767,CA
3351328768,3351336959,US
3351336960,3351339007,CA
@@ -140626,9 +72648,7 @@
3351384320,3351384575,CA
3351384576,3351385343,US
3351385344,3351385599,CA
-3351385600,3351386111,US
-3351386112,3351386367,PR
-3351386368,3351386623,US
+3351385600,3351386623,US
3351386624,3351386879,CA
3351386880,3351387135,US
3351387136,3351387391,CA
@@ -140712,25 +72732,34 @@
3351441152,3351441407,CA
3351441408,3351441919,US
3351441920,3351442175,CA
-3351442176,3351483391,US
+3351442176,3351447039,US
+3351447552,3351449087,US
+3351449600,3351474687,US
+3351475200,3351475711,US
+3351475712,3351475967,IS
+3351475968,3351483391,US
3351483392,3351484415,CA
3351484416,3351485439,US
-3351485440,3351485567,CA
-3351485568,3351485575,US
-3351485576,3351485695,CA
+3351485440,3351485695,CA
3351485696,3351486463,US
3351486464,3351488511,CA
-3351488512,3351494655,US
-3351494656,3351496703,SG
+3351488512,3351494911,US
+3351494912,3351495679,SG
+3351495680,3351495935,US
+3351495936,3351496191,SG
+3351496192,3351496447,US
+3351496448,3351496703,SG
3351496704,3351497727,US
3351497728,3351498751,CA
3351498752,3351501823,US
3351501824,3351502847,JM
3351502848,3351503871,US
3351503872,3351504895,CA
-3351504896,3351524095,US
+3351504896,3351512575,US
+3351513088,3351524095,US
3351524096,3351524351,GB
-3351524352,3351642111,US
+3351524352,3351579135,US
+3351579648,3351642111,US
3351642112,3351695871,CA
3351696384,3351696639,CA
3351696640,3351696895,US
@@ -140739,20 +72768,22 @@
3351699200,3351699455,CA
3351699456,3351706367,US
3351706368,3351706623,CA
-3351706624,3351850239,US
-3351850240,3351850495,AP
-3351850496,3351860223,US
+3351706624,3351774719,US
+3351775232,3351860223,US
3351860224,3351861247,KY
3351861248,3351869439,US
3351869440,3351871487,CA
3351871488,3351895551,US
3351895552,3351895807,CA
3351895808,3351904255,US
-3351912448,3351927551,CA
+3351904256,3351927551,CA
3351927552,3351927807,US
3351927808,3351959551,CA
3351959552,3351961599,US
-3351961600,3351969791,CA
+3351961600,3351963647,CA
+3351963648,3351969279,US
+3351969280,3351969535,CA
+3351969536,3351969791,US
3351969792,3352035327,IL
3352035328,3352036351,CA
3352036352,3352046591,US
@@ -140763,13 +72794,7 @@
3352066048,3352067071,CA
3352067072,3352068095,US
3352068096,3352069119,CA
-3352069120,3352069919,US
-3352069920,3352069935,CO
-3352069936,3352069943,US
-3352069944,3352069951,BD
-3352069952,3352082431,US
-3352082432,3352083455,JM
-3352083456,3352088575,US
+3352069120,3352088575,US
3352088576,3352090623,CA
3352090624,3352094719,US
3352094720,3352096767,VG
@@ -140777,129 +72802,19 @@
3352559872,3352563199,CA
3352563200,3352563455,US
3352563456,3352573951,CA
-3352573952,3352574207,US
-3352574464,3352583935,CA
+3352573952,3352574463,US
+3352574464,3352581631,CA
+3352582144,3352583935,CA
3352583936,3352584191,US
3352584192,3352591359,CA
3352591360,3352591615,US
3352591616,3352615423,CA
3352615424,3352616959,US
3352616960,3352887295,CA
-3352887296,3352916479,US
-3352916480,3352916486,BR
-3352916487,3352916512,US
-3352916513,3352916516,BM
-3352916517,3352916524,US
-3352916525,3352916532,BM
-3352916533,3352916533,IN
-3352916534,3352916544,US
-3352916545,3352916552,BR
-3352916553,3352916553,US
-3352916554,3352916558,BR
-3352916559,3352916565,US
-3352916566,3352916567,AT
-3352916568,3352916568,BR
-3352916569,3352916569,US
-3352916570,3352916570,AR
-3352916571,3352916583,US
-3352916584,3352916584,AR
-3352916585,3352916648,US
-3352916649,3352916649,BR
-3352916650,3352916657,US
-3352916658,3352916668,BR
-3352916669,3352916669,US
-3352916670,3352916718,BR
-3352916719,3352916728,US
-3352916729,3352916735,BR
-3352916736,3352918015,US
+3352887296,3352918015,US
3352918016,3352919039,CA
-3352919040,3353335303,US
-3353335304,3353335309,NL
-3353335310,3353335311,US
-3353335312,3353335313,NL
-3353335314,3353335315,US
-3353335316,3353335323,NL
-3353335324,3353335325,US
-3353335326,3353335333,NL
-3353335334,3353335335,US
-3353335336,3353335339,NL
-3353335340,3353335341,US
-3353335342,3353335349,NL
-3353335350,3353335353,IN
-3353335354,3353335359,NL
-3353335360,3353335361,US
-3353335362,3353335363,NL
-3353335364,3353335366,US
-3353335367,3353335376,NL
-3353335377,3353335378,US
-3353335379,3353335380,NL
-3353335381,3353335382,US
-3353335383,3353335390,NL
-3353335391,3353335392,US
-3353335393,3353335406,NL
-3353335407,3353335407,US
-3353335408,3353335411,NL
-3353335412,3353335412,US
-3353335413,3353335420,NL
-3353335421,3353335422,US
-3353335423,3353335435,NL
-3353335436,3353335437,US
-3353335438,3353335457,NL
-3353335458,3353335458,US
-3353335459,3353335460,NL
-3353335461,3353335462,US
-3353335463,3353335468,NL
-3353335469,3353335471,US
-3353335472,3353335473,NL
-3353335474,3353335474,US
-3353335475,3353335476,NL
-3353335477,3353335481,US
-3353335482,3353335483,NL
-3353335484,3353335485,US
-3353335486,3353335487,NL
-3353335488,3353335489,US
-3353335490,3353335493,NL
-3353335494,3353335505,US
-3353335506,3353335507,NL
-3353335508,3353335508,US
-3353335509,3353335510,NL
-3353335511,3353335513,US
-3353335514,3353335515,NL
-3353335516,3353335517,US
-3353335518,3353335519,NL
-3353335520,3353335521,US
-3353335522,3353335529,NL
-3353335530,3353335559,US
-3353335560,3353335594,NL
-3353335595,3353335596,US
-3353335597,3353335598,NL
-3353335599,3353335600,US
-3353335601,3353335606,NL
-3353335607,3353335608,US
-3353335609,3353335616,NL
-3353335617,3353335619,US
-3353335620,3353335655,NL
-3353335656,3353335658,US
-3353335659,3353335664,NL
-3353335665,3353335666,US
-3353335667,3353335668,NL
-3353335669,3353335670,US
-3353335671,3353335676,NL
-3353335677,3353335681,US
-3353335682,3353335685,NL
-3353335686,3353335686,US
-3353335687,3353335688,NL
-3353335689,3353335690,US
-3353335691,3353335706,NL
-3353335707,3353335708,US
-3353335709,3353335743,NL
-3353335744,3353335767,US
-3353335768,3353335791,NL
-3353335792,3353335792,US
-3353335793,3353335794,NL
-3353335795,3353652735,US
-3353652736,3353652863,DE
-3353652864,3353653503,US
+3352919040,3353309695,US
+3353310208,3353653503,US
3353653504,3353653759,GB
3353653760,3353722367,US
3353722368,3353722623,GB
@@ -140909,104 +72824,28 @@
3353730048,3353731071,CA
3353731072,3353731487,US
3353731488,3353731503,AU
-3353731504,3353731775,US
-3353731776,3353731823,IL
-3353731824,3353731999,US
-3353732000,3353732031,CN
-3353732032,3353732063,US
-3353732064,3353732071,RU
-3353732072,3353732127,US
-3353732128,3353732143,RU
-3353732144,3353732159,US
-3353732160,3353732191,CA
-3353732192,3353732607,US
+3353731504,3353732607,US
3353732608,3353732863,DE
-3353732864,3353752581,US
-3353752582,3353752585,FR
-3353752586,3353752589,BE
-3353752590,3353752677,US
-3353752678,3353752681,ES
-3353752682,3353752829,US
-3353752830,3353752830,GB
-3353752831,3353752916,US
-3353752917,3353752917,GB
-3353752918,3353752969,US
-3353752970,3353752970,GB
-3353752971,3353752987,US
-3353752988,3353752991,GB
-3353752992,3353753055,US
-3353753056,3353753059,BR
-3353753060,3353753097,US
-3353753098,3353753098,GB
-3353753099,3353780223,US
+3353732864,3353736191,US
+3353736192,3353736703,PR
+3353736704,3353737215,US
+3353737216,3353737471,GB
+3353737472,3353741823,US
+3353742336,3353780223,US
3353780224,3353780479,GB
-3353780480,3353821183,US
-3353821184,3353821199,CN
-3353821200,3353821215,US
-3353821216,3353821279,CN
-3353821280,3353821284,US
-3353821285,3353821286,CN
-3353821287,3353821287,US
-3353821288,3353821295,CN
-3353821296,3353821296,US
-3353821297,3353821300,CN
-3353821301,3353821301,US
-3353821302,3353821302,CN
-3353821303,3353821303,US
-3353821304,3353821306,CN
-3353821307,3353821308,US
-3353821309,3353821309,CN
-3353821310,3353821311,US
-3353821312,3353821375,CN
-3353821376,3353821439,US
-3353821440,3353821663,CN
-3353821664,3353821695,US
-3353821696,3353821719,CN
-3353821720,3353821727,US
-3353821728,3353821887,CN
-3353821888,3353821983,US
-3353821984,3353822111,CN
-3353822112,3353822207,US
-3353822208,3353822215,CN
-3353822216,3353822223,US
-3353822224,3353822231,CN
-3353822232,3353822239,US
-3353822240,3353822375,CN
-3353822376,3353822383,US
-3353822384,3353822687,CN
-3353822688,3353822719,US
-3353822720,3353822967,CN
-3353822968,3353822975,US
-3353822976,3353822983,CN
-3353822984,3353822991,US
-3353822992,3353823231,CN
-3353823232,3353828703,US
-3353828704,3353828735,RU
-3353828736,3353836543,US
-3353836544,3353837567,CA
-3353837568,3353855999,US
+3353780480,3353855999,US
3353856000,3353858047,CA
3353858048,3353861119,US
3353861120,3353862143,CA
3353862144,3353862719,US
3353862720,3353862751,CA
-3353862752,3353863279,US
-3353863280,3353863287,IL
-3353863288,3353863319,US
-3353863320,3353863327,CN
-3353863328,3353863415,US
-3353863416,3353863423,CN
-3353863424,3353863631,US
-3353863632,3353863639,KW
-3353863640,3353863727,US
-3353863728,3353863751,IL
-3353863752,3353863967,US
-3353863968,3353863975,CN
-3353863976,3353864447,US
+3353862752,3353864447,US
3353864448,3353864703,CA
3353864704,3353864959,US
3353864960,3353865215,CA
-3353865216,3353942527,US
+3353865216,3353884927,US
+3353884928,3353885183,GB
+3353885184,3353942527,US
3353942528,3353943039,CA
3353943040,3353960191,US
3353960192,3353960447,CA
@@ -141014,156 +72853,31 @@
3353979648,3353979903,CA
3353979904,3353982719,US
3353982720,3353983231,CA
-3353983232,3353995639,US
-3353995640,3353995647,ID
-3353995648,3353995711,GB
-3353995712,3353995775,US
-3353995776,3353995783,BR
-3353995784,3353995815,US
-3353995816,3353995823,BR
-3353995824,3354066943,US
+3353983232,3354066943,US
3354066944,3354132479,CA
-3354132480,3354484911,US
-3354484912,3354484927,GB
-3354484928,3354485375,US
-3354485376,3354485439,GB
-3354485440,3354492927,US
+3354132480,3354466815,US
+3354467328,3354492927,US
3354492928,3354494975,CA
-3354494976,3354501119,US
+3354494976,3354499071,US
+3354499072,3354501119,AU
3354501120,3354503167,CA
-3354503168,3354507327,US
-3354507328,3354507335,CY
-3354507336,3354507367,US
-3354507368,3354507375,CA
-3354507376,3354507403,US
-3354507404,3354507407,TH
-3354507408,3354507439,US
-3354507440,3354507443,ID
-3354507444,3354507471,US
-3354507472,3354507475,SG
-3354507476,3354507515,US
-3354507516,3354507519,CN
-3354507520,3354507535,US
-3354507536,3354507551,IE
-3354507552,3354507599,US
-3354507600,3354507607,BR
-3354507608,3354507615,US
-3354507616,3354507631,MY
-3354507632,3354507687,US
-3354507688,3354507691,CA
-3354507692,3354507759,US
-3354507760,3354507775,AU
-3354507776,3354507795,US
-3354507796,3354507799,BG
-3354507800,3354507803,CN
-3354507804,3354507807,CH
-3354507808,3354507815,CN
-3354507816,3354507823,CY
-3354507824,3354507879,US
-3354507880,3354507887,ID
-3354507888,3354507915,US
-3354507916,3354507919,CA
-3354507920,3354507927,US
-3354507928,3354507931,CA
-3354507932,3354507983,US
-3354507984,3354507999,CN
-3354508000,3354508031,US
-3354508032,3354508035,AU
-3354508036,3354508043,US
-3354508044,3354508047,VN
-3354508048,3354508059,US
-3354508060,3354508063,BR
-3354508064,3354508071,US
-3354508072,3354508075,VN
-3354508076,3354508119,US
-3354508120,3354508123,PT
-3354508124,3354508131,US
-3354508132,3354508135,HR
-3354508136,3354508143,US
-3354508144,3354508147,VN
-3354508148,3354508151,NZ
-3354508152,3354508155,IE
-3354508156,3354508163,US
-3354508164,3354508167,AU
-3354508168,3354508183,US
-3354508184,3354508187,MY
-3354508188,3354508191,US
-3354508192,3354508195,IN
-3354508196,3354508199,US
-3354508200,3354508203,BR
-3354508204,3354508223,US
-3354508224,3354508227,VN
-3354508228,3354508231,TR
-3354508232,3354508235,VN
-3354508236,3354508243,CA
-3354508244,3354508247,US
-3354508248,3354508251,HR
-3354508252,3354508271,US
-3354508272,3354508275,IN
-3354508276,3354508279,BD
-3354508280,3354508287,US
-3354508288,3354508295,FR
-3354508296,3354508303,CY
-3354508304,3354508359,US
-3354508360,3354508367,BR
-3354508368,3354508375,GB
-3354508376,3354508383,MY
-3354508384,3354508391,CA
-3354508392,3354508415,US
-3354508416,3354508423,BR
-3354508424,3354508431,US
-3354508432,3354508439,FR
-3354508440,3354508487,US
-3354508488,3354508495,IN
-3354508496,3354508567,US
-3354508568,3354508575,FR
-3354508576,3354508607,US
-3354508608,3354508623,AU
-3354508624,3354508655,US
-3354508656,3354508671,CY
-3354508672,3354508863,US
-3354508864,3354508895,CY
-3354508896,3354508959,US
-3354508960,3354508991,TR
-3354508992,3354508999,RU
-3354509000,3354509007,CN
-3354509008,3354509015,BR
-3354509016,3354509019,US
-3354509020,3354509023,GR
-3354509024,3354509119,US
-3354509120,3354509183,TR
-3354509184,3354509215,GB
-3354509216,3354513151,US
+3354503168,3354513151,US
3354513152,3354513407,CA
-3354513408,3354515711,US
-3354515712,3354515775,CA
-3354515776,3354515967,US
-3354515968,3354516031,CA
-3354516032,3354516223,US
-3354516224,3354516287,CA
-3354516288,3354591231,US
+3354513408,3354532351,US
+3354532864,3354571775,US
+3354572288,3354591231,US
3354591232,3354656767,CA
-3354656768,3354676223,US
+3354656768,3354663423,US
+3354663936,3354676223,US
3354676224,3354677247,CA
3354677248,3354687487,US
3354687488,3354688511,CA
-3354688512,3354708207,US
-3354708208,3354708223,CA
-3354708224,3354731007,US
-3354731008,3354731018,BE
-3354731019,3354731019,EU
-3354731020,3354731263,BE
-3354731264,3354731519,US
-3354731520,3354731775,AP
-3354731776,3354737663,US
-3354737664,3354737919,HK
-3354737920,3354738175,CN
-3354738176,3354770687,US
+3354688512,3354720767,US
+3354721280,3354758655,US
+3354759168,3354770687,US
3354770688,3354770943,CA
3354770944,3354788095,US
-3354788096,3354806639,CA
-3354806640,3354806655,SE
-3354806656,3354807551,CA
+3354788096,3354807551,CA
3354807552,3354810367,US
3354810368,3354814975,CA
3354814976,3354815231,US
@@ -141176,17 +72890,18 @@
3354955776,3354956031,AR
3354956032,3354972159,US
3354972160,3354972415,CA
-3354972416,3355013119,US
+3354972416,3355012607,US
3355013120,3355017215,CA
-3355017216,3355052287,US
+3355017216,3355052031,US
+3355052032,3355052287,CA
3355052288,3355052543,AU
3355052544,3355053311,CA
3355053312,3355053567,US
-3355054080,3355260927,US
+3355054080,3355249151,US
+3355249664,3355253247,US
+3355253760,3355260927,US
3355260928,3355262719,CA
-3355262720,3355272189,US
-3355272190,3355272190,EU
-3355272191,3355310591,US
+3355262720,3355310591,US
3355310592,3355311103,CA
3355311104,3355319295,US
3355319296,3355320319,CA
@@ -141198,30 +72913,17 @@
3355351040,3355351295,CA
3355351296,3355372287,US
3355372288,3355372543,CA
-3355372544,3355384095,US
-3355384096,3355384127,AR
-3355384128,3355384703,US
-3355384704,3355384831,ES
+3355372544,3355384831,US
3355384832,3355385855,CA
3355385856,3355407359,US
3355407360,3355408383,PR
3355408384,3355412479,US
3355412480,3355412991,BE
-3355412992,3355417791,US
-3355417792,3355417795,CA
-3355417796,3355417799,US
-3355417800,3355417807,KW
-3355417808,3355417999,US
-3355418000,3355418015,BE
-3355418016,3355418023,AE
-3355418024,3355418039,US
-3355418040,3355418047,CA
-3355418048,3355418079,US
-3355418080,3355418111,CN
-3355418112,3355430911,US
-3355430912,3355432959,US
-3355432960,3355443199,US
-3355443200,3355445247,CO
+3355412992,3355432959,US
+3355432960,3355435007,CA
+3355435008,3355443199,US
+3355443200,3355443200,GB
+3355443201,3355445247,CO
3355445248,3355447295,BR
3355447296,3355447551,CU
3355447552,3355447807,AR
@@ -141236,7 +72938,7 @@
3355459584,3355459839,PA
3355459840,3355460095,VE
3355460096,3355460351,CL
-3355460352,3355461887,BR
+3355460864,3355461631,BR
3355461888,3355463423,EC
3355463424,3355463935,AR
3355463936,3355464191,BR
@@ -141244,22 +72946,21 @@
3355464448,3355464959,MX
3355464960,3355465727,BR
3355465728,3355465983,UY
-3355465984,3355467263,BR
+3355466752,3355467007,BR
3355467264,3355467519,US
3355467520,3355467775,MX
3355467776,3355468799,AR
-3355468800,3355469567,BR
+3355469312,3355469567,BR
3355469568,3355470591,MX
3355470592,3355470847,PE
3355470848,3355471103,CL
3355471104,3355471359,MX
3355471360,3355471615,PE
3355471616,3355472383,MX
-3355472384,3355472639,BR
3355472640,3355473407,CL
3355473408,3355473919,PE
3355473920,3355475199,CL
-3355475200,3355478015,MX
+3355475200,3355477503,MX
3355478016,3355478271,PE
3355478272,3355478783,US
3355478784,3355479039,VE
@@ -141317,13 +73018,16 @@
3355557888,3355559935,CO
3355559936,3355561983,PY
3355561984,3355564031,SR
+3355564032,3355566079,BR
3355566080,3355574271,AR
3355574272,3355576319,CL
3355576320,3355578367,VE
3355578368,3355582463,CL
3355582464,3355590655,UY
3355590656,3355592703,CO
-3355592704,3355604991,CL
+3355592704,3355599871,CL
+3355599872,3355600895,BR
+3355600896,3355604991,CL
3355604992,3355607039,AR
3355607040,3355615231,HT
3355615232,3355623423,SR
@@ -141379,8 +73083,7 @@
3355843584,3355844863,EC
3355844864,3355845119,CL
3355845120,3355845375,EC
-3355845376,3355848959,BR
-3355849216,3355849727,AR
+3355845376,3355848703,BR
3355849728,3355849983,PA
3355849984,3355850495,CL
3355850496,3355850751,NI
@@ -141391,13 +73094,15 @@
3355860992,3355869183,CL
3355869184,3355870719,BR
3355870720,3355871231,CR
+3355871232,3355873279,BR
3355873280,3355875327,BQ
-3355875328,3355877375,VE
+3355875328,3355876351,MX
+3355876352,3355877375,VE
3355877376,3355885567,CO
3355885568,3355901951,GT
3355901952,3355902975,BR
3355902976,3355903999,CL
-3355904000,3355905535,BR
+3355904000,3355905023,BR
3355905536,3355905791,PY
3355905792,3355906047,AR
3355906048,3355910143,CL
@@ -141405,6 +73110,7 @@
3355918336,3355923455,EC
3355923456,3355924479,UY
3355924480,3355926527,TT
+3355930624,3355934719,BR
3355934720,3355939839,AR
3355939840,3355940863,SR
3355940864,3355942911,AR
@@ -141413,55 +73119,62 @@
3355949056,3355951103,CW
3355951104,3355967487,EC
3355967488,3356033023,VE
-3356033024,3356033791,BR
+3356033280,3356033791,BR
3356033792,3356034047,CL
3356034048,3356035071,PY
3356035072,3356037119,MX
3356037120,3356041215,CO
3356041216,3356049407,CR
3356049408,3356049663,CL
-3356049664,3356051455,BR
+3356049664,3356050175,BR
+3356050432,3356051455,BR
3356051456,3356051711,CO
3356051712,3356051967,CL
3356051968,3356052223,GT
3356052224,3356052479,AR
-3356052480,3356052991,BR
+3356052480,3356052735,BR
3356053248,3356054015,CL
3356054016,3356054527,US
-3356054528,3356057599,BR
+3356054528,3356056575,BR
+3356056832,3356057087,BR
+3356057344,3356057599,BR
3356057600,3356057855,EC
3356057856,3356059135,CL
3356059136,3356060671,BR
3356060672,3356061695,CL
3356061696,3356062463,BR
3356062464,3356062719,JM
-3356062720,3356064255,BR
+3356062720,3356062975,BR
+3356062976,3356063231,CR
+3356063232,3356063743,BR
+3356064000,3356064255,BR
3356064256,3356064511,CL
-3356064512,3356065791,BR
+3356065024,3356065791,BR
3356065792,3356066047,CL
-3356066048,3356069119,BR
+3356066048,3356067839,BR
+3356068352,3356069119,BR
3356069120,3356069631,CL
-3356069632,3356070143,BR
+3356069888,3356070143,BR
3356070144,3356070655,CL
3356070656,3356070911,AR
3356070912,3356071423,BR
3356071424,3356072447,CL
3356073216,3356073471,AR
-3356073472,3356075263,BR
+3356073472,3356073983,BR
3356075264,3356076287,BO
3356076288,3356078079,BR
3356078080,3356078335,EC
3356078336,3356079359,CL
-3356079360,3356080895,BR
+3356080128,3356080383,BR
3356080896,3356082431,NI
3356082432,3356082687,CL
3356082688,3356082943,AR
3356082944,3356083967,CL
-3356083968,3356084479,BR
+3356083968,3356084223,BR
3356084480,3356084735,CL
3356084736,3356085247,BR
3356085248,3356085759,CL
-3356085760,3356086271,BR
+3356085760,3356086015,BR
3356086272,3356086527,AR
3356086528,3356087295,CR
3356087296,3356087807,AR
@@ -141486,7 +73199,6 @@
3356097792,3356098303,AR
3356098304,3356098559,GT
3356098560,3356099583,CL
-3356099584,3356100607,BR
3356100608,3356102399,CL
3356102400,3356102655,PA
3356102656,3356105727,CL
@@ -141496,9 +73208,8 @@
3356114944,3356123135,PE
3356123136,3356131839,AR
3356131840,3356132351,PE
-3356132352,3356134143,BR
+3356133376,3356134143,BR
3356134144,3356134655,AR
-3356134656,3356134911,BR
3356134912,3356135167,DO
3356135168,3356135423,MX
3356135424,3356135679,BR
@@ -141508,16 +73219,16 @@
3356137472,3356137727,JM
3356137728,3356138239,BR
3356138240,3356138495,US
-3356138496,3356139519,BR
+3356138496,3356138751,BR
+3356139264,3356139519,BR
3356139520,3356139775,US
3356139776,3356140031,AR
3356140032,3356140287,DO
-3356140288,3356140799,BR
3356140800,3356141311,BM
3356141312,3356142847,CL
-3356142848,3356145151,BR
+3356143104,3356143615,BR
+3356144128,3356145151,BR
3356145152,3356145407,CL
-3356145408,3356145663,BR
3356145664,3356145919,CL
3356145920,3356146175,BR
3356146176,3356146431,AR
@@ -141552,9 +73263,7 @@
3356160000,3356160255,MX
3356160256,3356160511,GT
3356160512,3356160767,CL
-3356160768,3356161279,MX
-3356161280,3356161535,BR
-3356161536,3356162559,MX
+3356160768,3356162559,MX
3356162560,3356162815,PE
3356162816,3356163583,CL
3356163584,3356163839,VE
@@ -141577,7 +73286,6 @@
3356237824,3356246015,GT
3356246016,3356262655,MX
3356262656,3356263167,CL
-3356263168,3356263423,BR
3356263424,3356263679,CL
3356263680,3356265215,AR
3356265216,3356265471,BR
@@ -141587,7 +73295,6 @@
3356268800,3356269055,PA
3356269056,3356269311,AR
3356269312,3356269823,UY
-3356269824,3356270079,BR
3356270080,3356272383,MX
3356272384,3356272639,CR
3356272640,3356272895,US
@@ -141603,31 +73310,13 @@
3356280832,3356282879,AR
3356282880,3356284927,PA
3356284928,3356286975,AR
-3356286976,3356286991,US
-3356286992,3356287007,GT
-3356287008,3356287023,HN
-3356287024,3356287039,GT
-3356287040,3356287047,US
-3356287048,3356287071,GT
-3356287072,3356287087,SV
-3356287088,3356287103,US
-3356287104,3356287151,GT
-3356287152,3356287359,US
-3356287360,3356287367,GT
-3356287368,3356287487,US
+3356286976,3356287487,US
3356287488,3356287743,SV
3356287744,3356288255,HN
3356288256,3356288767,SV
3356288768,3356289023,GT
3356289024,3356289791,SV
-3356289792,3356289799,US
-3356289800,3356289807,GT
-3356289808,3356289823,SV
-3356289824,3356289887,US
-3356289888,3356289919,SV
-3356289920,3356289951,US
-3356289952,3356289983,GT
-3356289984,3356290303,US
+3356289792,3356290303,US
3356290304,3356290559,SV
3356290560,3356291071,CR
3356291072,3356293119,TT
@@ -141650,8 +73339,8 @@
3356338176,3356339967,SV
3356339968,3356341247,HN
3356341248,3356341759,SV
-3356341760,3356342015,HN
-3356342016,3356343039,SV
+3356341760,3356342271,HN
+3356342272,3356343039,SV
3356343040,3356343551,HN
3356343552,3356344319,SV
3356344320,3356360703,CO
@@ -141660,7 +73349,7 @@
3356364800,3356368895,MX
3356368896,3356369407,BR
3356369408,3356369663,EC
-3356369664,3356370175,BR
+3356369664,3356369919,BR
3356370176,3356370943,AR
3356370944,3356372991,CO
3356372992,3356375039,CU
@@ -141678,7 +73367,17 @@
3356390400,3356390655,AR
3356390656,3356391167,CL
3356391168,3356391423,PA
-3356393472,3356426239,CL
+3356393472,3356413439,CL
+3356413440,3356413823,CO
+3356413824,3356420607,CL
+3356420608,3356420991,CO
+3356420992,3356421247,CL
+3356421248,3356421375,CO
+3356421376,3356421759,CL
+3356421760,3356422015,CO
+3356422016,3356425471,CL
+3356425472,3356425599,CO
+3356425600,3356426239,CL
3356426240,3356427263,BR
3356427264,3356491775,US
3356491776,3356493823,PE
@@ -141705,8 +73404,23 @@
3356557312,3356819455,BR
3356819456,3356884991,CO
3356884992,3356950527,CL
-3356950528,3357016063,MX
-3357016064,3357048831,CO
+3356950528,3356958463,MX
+3356958720,3356967167,MX
+3356967424,3356967935,MX
+3356968960,3356970495,MX
+3356971520,3356972031,MX
+3356972288,3356979967,MX
+3356980480,3356980735,MX
+3356981248,3356988415,MX
+3356988672,3356989439,MX
+3356989952,3356996607,MX
+3356997632,3357003007,MX
+3357003776,3357007871,MX
+3357007872,3357011967,BR
+3357011968,3357015551,MX
+3357016064,3357018623,CO
+3357020160,3357032447,CO
+3357040640,3357048831,CO
3357057024,3357065215,PE
3357065216,3357073407,EC
3357073408,3357077503,CL
@@ -141730,10 +73444,11 @@
3357409280,3357411327,BR
3357411328,3357412351,VE
3357412352,3357412863,PE
-3357412864,3357413119,US
+3357412864,3357413119,BR
3357413120,3357413375,FR
3357413376,3357414399,US
-3357414400,3357415679,PR
+3357414400,3357415423,PR
+3357415424,3357415679,US
3357415680,3357416447,MX
3357416448,3357417215,VE
3357417216,3357417471,US
@@ -141766,17 +73481,14 @@
3357442960,3357442967,SV
3357442968,3357443007,GT
3357443008,3357443071,SV
-3357443072,3357443583,GT
+3357443072,3357443327,NI
+3357443328,3357443583,GT
3357443584,3357444351,HN
3357444352,3357444479,GT
3357444480,3357444487,HN
-3357444488,3357444623,GT
-3357444624,3357444631,SV
-3357444632,3357444647,GT
-3357444648,3357444655,SV
-3357444656,3357444663,GT
-3357444664,3357444671,SV
-3357444672,3357448407,GT
+3357444488,3357444607,GT
+3357444608,3357444863,SV
+3357444864,3357448407,GT
3357448408,3357448415,SV
3357448416,3357448447,GT
3357448448,3357448703,SV
@@ -141790,10 +73502,8 @@
3357451120,3357451127,HN
3357451128,3357451143,GT
3357451144,3357451151,HN
-3357451152,3357451343,GT
-3357451344,3357451351,HN
-3357451352,3357451503,GT
-3357451504,3357451519,HN
+3357451152,3357451263,GT
+3357451264,3357451519,HN
3357451520,3357451575,GT
3357451576,3357451583,NI
3357451584,3357452287,GT
@@ -141801,12 +73511,21 @@
3357452800,3357453055,NI
3357453056,3357453071,GT
3357453072,3357453079,SV
-3357453080,3357453311,GT
+3357453080,3357453135,GT
+3357453136,3357453151,SV
+3357453152,3357453311,GT
3357453312,3357453567,HN
-3357453568,3357454847,GT
+3357453568,3357454591,GT
+3357454592,3357454847,NI
3357454848,3357455103,HN
3357455104,3357455359,SV
-3357455360,3357458431,GT
+3357455360,3357455871,GT
+3357455872,3357456127,NI
+3357456128,3357456639,GT
+3357456640,3357456895,HN
+3357456896,3357457711,GT
+3357457712,3357457727,CR
+3357457728,3357458431,GT
3357458432,3357474815,CL
3357474816,3357475071,US
3357475072,3357475887,AR
@@ -141821,14 +73540,43 @@
3357476288,3357476351,VE
3357476352,3357476479,AR
3357476480,3357476607,EC
-3357476608,3357476735,AR
+3357476608,3357476687,AR
+3357476688,3357476703,US
+3357476704,3357476735,AR
3357476736,3357476799,US
-3357476800,3357477247,AR
-3357477248,3357477375,EC
+3357476800,3357476863,AR
+3357476864,3357477375,EC
3357477376,3357477423,AR
3357477424,3357477431,EC
-3357477432,3357477887,AR
-3357477888,3357480959,CO
+3357477432,3357477543,AR
+3357477544,3357477551,EC
+3357477552,3357477887,AR
+3357477888,3357478911,CO
+3357478912,3357479063,AR
+3357479064,3357479071,CO
+3357479072,3357479135,AR
+3357479136,3357479151,CO
+3357479152,3357479183,AR
+3357479184,3357479191,CO
+3357479192,3357479215,AR
+3357479216,3357479223,CO
+3357479224,3357479551,AR
+3357479552,3357479679,CO
+3357479680,3357479863,AR
+3357479864,3357479867,CO
+3357479868,3357479871,AR
+3357479872,3357479879,CO
+3357479880,3357480103,AR
+3357480104,3357480111,CO
+3357480112,3357480335,AR
+3357480336,3357480343,CO
+3357480344,3357480359,AR
+3357480360,3357480367,CO
+3357480368,3357480463,AR
+3357480464,3357480479,CO
+3357480480,3357480719,AR
+3357480720,3357480735,CO
+3357480736,3357480959,AR
3357480960,3357483007,EC
3357483008,3357491199,CL
3357491200,3357499391,CO
@@ -141838,7 +73586,8 @@
3357523968,3357532159,CO
3357532160,3357556735,AR
3357556736,3357556991,VE
-3357556992,3357557759,AR
+3357556992,3357557247,AR
+3357557248,3357557759,MX
3357557760,3357558783,EC
3357558784,3357559039,AR
3357559040,3357559295,EC
@@ -141846,7 +73595,9 @@
3357559552,3357559807,US
3357559808,3357559935,AR
3357559936,3357560063,VE
-3357560064,3357560247,AR
+3357560064,3357560199,AR
+3357560200,3357560207,VE
+3357560208,3357560247,AR
3357560248,3357560255,VE
3357560256,3357560263,AR
3357560264,3357560271,VE
@@ -141857,19 +73608,52 @@
3357561856,3357581311,AR
3357581312,3357589503,CL
3357589504,3357605887,BZ
-3357605888,3357736959,MX
+3357605888,3357606911,MX
+3357607168,3357613055,MX
+3357613312,3357616127,MX
+3357616384,3357618943,MX
+3357619200,3357623039,MX
+3357623296,3357626623,MX
+3357627392,3357627647,MX
+3357627904,3357628415,MX
+3357630720,3357633535,MX
+3357633792,3357634815,MX
+3357635072,3357635327,MX
+3357635584,3357635839,MX
+3357636096,3357637887,MX
+3357638656,3357640703,BR
+3357640704,3357644799,MX
+3357644800,3357646847,BR
+3357646848,3357647871,MX
+3357648896,3357650431,MX
+3357650944,3357657855,MX
+3357658112,3357670655,MX
+3357670912,3357712383,MX
+3357713408,3357715199,MX
+3357715456,3357715711,MX
+3357715968,3357723903,MX
+3357724416,3357725183,MX
+3357725440,3357726463,MX
+3357728000,3357728767,MX
+3357728768,3357736959,BR
3357736960,3357745151,VE
3357745152,3357753343,CO
3357753344,3357757487,VE
3357757488,3357757495,BO
3357757496,3357773823,VE
3357773824,3357775871,PA
-3357775872,3357776895,UY
+3357775872,3357776127,US
+3357776128,3357776383,UY
+3357776384,3357776895,US
+3357776896,3357777919,CL
3357777920,3357786111,GT
3357786112,3357802495,VE
3357802496,3357868031,MX
3357868032,3357933567,PE
-3357933568,3358064639,MX
+3357933568,3358015487,MX
+3358015488,3358023679,BR
+3358023680,3358040063,MX
+3358048256,3358064639,MX
3358064640,3358130175,UY
3358130176,3358131199,EC
3358131200,3358131327,AR
@@ -141880,29 +73664,32 @@
3358131984,3358132031,CO
3358132032,3358132087,AR
3358132088,3358132095,CO
-3358132096,3358132607,AR
+3358132096,3358132127,AR
+3358132128,3358132135,CO
+3358132136,3358132607,AR
3358132608,3358132735,CO
3358132736,3358132991,AR
3358132992,3358133119,EC
3358133120,3358133247,AR
3358133248,3358133759,VE
-3358133760,3358142975,AR
+3358133760,3358142719,AR
+3358142720,3358142975,US
3358142976,3358143231,CO
3358143232,3358143487,AR
3358143488,3358143999,US
3358144000,3358144255,AR
3358144256,3358144511,CL
3358144512,3358145023,VE
-3358145024,3358149719,AR
-3358149720,3358149727,CO
-3358149728,3358150015,AR
+3358145024,3358149631,AR
+3358149632,3358149887,CO
+3358149888,3358150015,AR
3358150016,3358150143,CO
3358150144,3358150423,AR
3358150424,3358150431,CO
-3358150432,3358150495,AR
-3358150496,3358150655,CO
-3358150656,3358150783,EC
-3358150784,3358151263,AR
+3358150432,3358150479,AR
+3358150480,3358150655,CO
+3358150656,3358150911,EC
+3358150912,3358151263,AR
3358151264,3358151271,EC
3358151272,3358151423,AR
3358151424,3358151551,EC
@@ -141917,14 +73704,14 @@
3358152960,3358153087,EC
3358153088,3358153279,AR
3358153280,3358153311,US
-3358153312,3358153471,AR
-3358153472,3358153535,US
+3358153312,3358153343,AR
+3358153344,3358153535,US
3358153536,3358153599,AR
3358153600,3358153663,PR
3358153664,3358153703,AR
3358153704,3358153711,PR
-3358153712,3358153855,AR
-3358153856,3358153983,EC
+3358153712,3358153727,AR
+3358153728,3358153983,EC
3358153984,3358154239,US
3358154240,3358154751,CL
3358154752,3358158847,PE
@@ -141943,19 +73730,15 @@
3358326784,3358392319,VE
3358392320,3358457855,AR
3358457856,3358523391,PA
-3358523392,3358525439,VE
-3358525440,3358527487,AR
-3358527488,3358529791,VE
-3358529792,3358530303,AR
-3358530304,3358531071,VE
-3358531072,3358533631,AR
-3358533632,3358534143,VE
-3358534144,3358534655,AR
-3358534656,3358535423,VE
-3358535424,3358535679,AR
-3358535680,3358536703,VE
-3358536704,3358537727,AR
-3358537728,3358539519,VE
+3358523392,3358529535,VE
+3358529536,3358530303,AR
+3358530304,3358532607,VE
+3358532608,3358532863,AR
+3358532864,3358534399,VE
+3358534400,3358534655,AR
+3358534656,3358535167,VE
+3358535168,3358535679,AR
+3358535680,3358539519,VE
3358539520,3358539775,AR
3358539776,3358543871,VE
3358543872,3358544127,MX
@@ -141963,9 +73746,9 @@
3358548224,3358548479,AR
3358548480,3358549759,VE
3358549760,3358550015,AR
-3358550016,3358552063,VE
-3358552064,3358556159,AR
-3358556160,3358558463,VE
+3358550016,3358553599,VE
+3358553600,3358553855,AR
+3358553856,3358558463,VE
3358558464,3358558591,PY
3358558592,3358562303,VE
3358562304,3358563327,PE
@@ -141994,7 +73777,9 @@
3358565568,3358565599,AR
3358565600,3358565791,VE
3358565792,3358565855,AR
-3358565856,3358566047,VE
+3358565856,3358565951,VE
+3358565952,3358566015,AR
+3358566016,3358566047,VE
3358566048,3358566111,AR
3358566112,3358566847,VE
3358566848,3358566879,AR
@@ -142014,17 +73799,14 @@
3358568960,3358570495,VE
3358570496,3358570751,MX
3358570752,3358571263,PE
-3358571264,3358572031,MX
-3358572032,3358573055,VE
+3358571264,3358572543,MX
+3358572544,3358573055,VE
3358573056,3358573311,AR
3358573312,3358574847,VE
-3358574848,3358575103,AR
-3358575104,3358575615,VE
-3358575616,3358576127,AR
+3358574848,3358576127,AR
3358576128,3358577151,VE
3358577152,3358577407,PE
-3358577408,3358577663,VE
-3358577664,3358577919,AR
+3358577408,3358577919,AR
3358577920,3358578175,VE
3358578176,3358578431,AR
3358578432,3358578687,VE
@@ -142043,9 +73825,7 @@
3358717952,3358719999,US
3358720000,3358728191,PR
3358728192,3358736383,CL
-3358736384,3358737111,BB
-3358737112,3358737119,CA
-3358737120,3358738175,BB
+3358736384,3358738175,BB
3358738176,3358738687,GD
3358738688,3358739711,BB
3358739712,3358739967,KN
@@ -142058,7 +73838,15 @@
3358777344,3358779391,CR
3358779392,3358781439,EC
3358781440,3358851071,AR
-3358851072,3358982143,MX
+3358851072,3358855167,MX
+3358855168,3358859263,BR
+3358859264,3358887935,MX
+3358887936,3358892031,HN
+3358892032,3358918655,MX
+3358918656,3358920703,BR
+3358924800,3358965759,MX
+3358966784,3358967039,MX
+3358973952,3358982143,MX
3358982144,3359047679,CL
3359047680,3359080447,AR
3359080448,3359096831,CU
@@ -142067,42 +73855,7 @@
3359109120,3359111167,AR
3359111168,3359113215,EC
3359113216,3359244287,MX
-3359244288,3359248383,US
-3359248384,3359248399,BR
-3359248400,3359249679,US
-3359249680,3359249695,AR
-3359249696,3359249727,BR
-3359249728,3359249759,US
-3359249760,3359249791,BR
-3359249792,3359249887,AR
-3359249888,3359250431,US
-3359250432,3359250815,AR
-3359250816,3359250879,US
-3359250880,3359250943,AR
-3359250944,3359251455,US
-3359251456,3359251711,AR
-3359251712,3359251967,US
-3359251968,3359252031,AR
-3359252032,3359252039,US
-3359252040,3359252047,IT
-3359252048,3359252063,US
-3359252064,3359252095,AR
-3359252096,3359252159,US
-3359252160,3359252223,AR
-3359252224,3359256575,US
-3359256576,3359256639,BR
-3359256640,3359257087,US
-3359257088,3359257103,BR
-3359257104,3359257127,AR
-3359257128,3359257135,BR
-3359257136,3359257151,US
-3359257152,3359257183,BR
-3359257184,3359257215,US
-3359257216,3359257247,AR
-3359257248,3359257263,BR
-3359257264,3359257279,US
-3359257280,3359257311,AR
-3359257312,3359260671,US
+3359244288,3359260671,US
3359260672,3359268863,BO
3359268864,3359277055,AR
3359277056,3359285247,UY
@@ -142114,7 +73867,9 @@
3359315968,3359318015,HN
3359318016,3359356927,AR
3359356928,3359358975,VE
-3359358976,3359375359,AR
+3359358976,3359363071,AR
+3359363072,3359367167,PA
+3359367168,3359375359,AR
3359375360,3359440895,PE
3359440896,3359461951,AR
3359461952,3359462015,HN
@@ -142150,9 +73905,13 @@
3359586304,3359588351,CL
3359588352,3359596543,AR
3359596544,3359598591,CL
-3359600640,3359621119,AR
+3359598592,3359599615,EC
+3359599616,3359621119,AR
3359621120,3359637503,EC
-3359637504,3359899647,MX
+3359637504,3359789583,MX
+3359789584,3359789599,US
+3359789600,3359797247,MX
+3359801344,3359899647,MX
3359899648,3359916031,CL
3359916032,3359932415,AR
3359948800,3359989759,AR
@@ -142173,12 +73932,11 @@
3360161792,3360251903,CL
3360251904,3360253951,BO
3360253952,3360255999,SV
-3360258048,3360260095,CL
+3360256000,3360260095,CL
3360260096,3360276479,AR
3360276480,3360278527,VE
3360278528,3360280575,EC
3360280576,3360282623,CL
-3360282624,3360284671,CO
3360284672,3360325631,CL
3360325632,3360333823,CO
3360333824,3360342015,CL
@@ -142193,27 +73951,45 @@
3360399360,3360403455,BO
3360405504,3360407551,HN
3360407552,3360423935,PA
-3360423936,3360686079,MX
-3360686080,3360705791,AR
-3360705792,3360706047,US
-3360706048,3360707071,AR
-3360707072,3360707327,US
-3360707328,3360708223,AR
+3360423936,3360456447,MX
+3360456448,3360456703,US
+3360456704,3360534527,MX
+3360538624,3360667647,MX
+3360667648,3360669695,BR
+3360669696,3360686079,MX
+3360686080,3360705535,AR
+3360705536,3360706047,US
+3360706048,3360706815,AR
+3360706816,3360707327,US
+3360707328,3360707583,AR
+3360707584,3360708095,US
+3360708096,3360708223,AR
3360708224,3360708351,US
3360708352,3360708991,AR
-3360708992,3360709119,US
-3360709120,3360710271,AR
+3360708992,3360709247,US
+3360709248,3360709631,AR
+3360709632,3360709759,US
+3360709760,3360710271,AR
3360710272,3360710399,US
-3360710400,3360710655,AR
+3360710400,3360710527,AR
+3360710528,3360710655,US
3360710656,3360718847,HT
3360718848,3360760575,AR
3360760576,3360760831,UY
3360760832,3360763903,AR
3360763904,3360765951,GT
3360765952,3360767999,CO
-3360768000,3360788479,AR
+3360768000,3360772351,AR
+3360772352,3360772479,BO
+3360772480,3360781839,AR
+3360781840,3360781847,DO
+3360781848,3360781943,AR
+3360781944,3360781947,MX
+3360781948,3360782167,AR
+3360782168,3360782175,MX
+3360782176,3360788479,AR
3360788480,3360790527,CL
-3360792576,3360849919,AR
+3360790528,3360849919,AR
3360849920,3360882687,VE
3360882688,3360948223,CL
3360948224,3361013759,VE
@@ -142228,16 +74004,26 @@
3361054720,3361058815,NI
3361058816,3361062911,AR
3361062912,3361071103,CL
-3361071104,3361078527,CO
-3361078528,3361078655,VE
-3361078656,3361079295,CO
+3361071104,3361072639,CO
+3361072640,3361072767,VE
+3361072768,3361072895,CO
+3361072896,3361073151,VE
+3361073152,3361074175,CO
+3361074176,3361074431,VE
+3361074432,3361079295,CO
3361079296,3361144831,CL
3361144832,3361210367,BO
3361210368,3361275903,DO
-3361275904,3361281279,PE
-3361281280,3361281791,VE
-3361281792,3361282047,PE
-3361282048,3361284095,VE
+3361275904,3361276415,VE
+3361276416,3361276543,PE
+3361276544,3361278463,VE
+3361278464,3361278591,PE
+3361278592,3361278719,VE
+3361278720,3361278975,PE
+3361278976,3361279615,VE
+3361279616,3361279743,PE
+3361279744,3361279999,VE
+3361280000,3361284095,PE
3361284096,3361296383,CL
3361296384,3361298431,SV
3361298432,3361300479,DO
@@ -142258,24 +74044,28 @@
3361538048,3361570815,VE
3361570816,3361587199,CO
3361587200,3361599487,EC
-3361599488,3361601535,UY
+3361599488,3361601279,UY
3361601536,3361603583,EC
-3361603584,3361734655,MX
+3361603584,3361665023,MX
+3361669120,3361713151,MX
+3361726464,3361734655,MX
3361734656,3362258943,BR
3362258944,3362324479,CL
3362324480,3362324735,AR
3362324736,3362324991,US
3362324992,3362328063,AR
-3362328064,3362328319,US
-3362328320,3362337279,AR
+3362328064,3362328575,US
+3362328576,3362337279,AR
3362337280,3362338047,US
3362338048,3362342143,AR
3362342144,3362342399,PA
-3362342400,3362344447,AR
+3362342400,3362343423,AR
+3362343424,3362343679,US
+3362343680,3362344447,AR
3362344448,3362344703,US
3362344704,3362344959,AR
-3362344960,3362347007,US
-3362347008,3362348799,AR
+3362344960,3362346751,US
+3362346752,3362348799,AR
3362348800,3362349055,US
3362349056,3362351103,CR
3362351104,3362353151,AR
@@ -142288,8 +74078,8 @@
3362426880,3362428927,PA
3362428928,3362430975,CL
3362430976,3362447359,CO
-3362447360,3362448383,SV
-3362448384,3362448895,HN
+3362447360,3362447871,SV
+3362447872,3362448895,HN
3362448896,3362449151,SV
3362449152,3362449407,HN
3362449408,3362451199,SV
@@ -142304,8 +74094,8 @@
3362476032,3362476287,HN
3362476288,3362476543,AR
3362476544,3362477055,CR
-3362477056,3362478079,CW
-3362478080,3362480127,AR
+3362477056,3362478079,BQ
+3362478080,3362484223,AR
3362486272,3362488319,HN
3362488320,3362504703,PE
3362504704,3362506751,VE
@@ -142326,11 +74116,12 @@
3362586624,3362652159,VE
3362652160,3362664447,PE
3362664448,3362668543,BO
-3362668544,3362684927,EC
-3362684928,3362686975,AR
-3362686976,3362687263,CO
-3362687264,3362687304,AR
-3362687305,3362689279,CO
+3362668544,3362676735,EC
+3362680832,3362684927,EC
+3362684928,3362687999,AR
+3362688000,3362688511,CO
+3362688512,3362688767,AR
+3362688768,3362689279,CO
3362689280,3362689311,AR
3362689312,3362690367,CO
3362690368,3362690431,AR
@@ -142342,20 +74133,24 @@
3362692608,3362692863,CO
3362692864,3362695167,AR
3362695168,3362697215,CO
-3362697216,3362711551,AR
+3362697216,3362703359,AR
+3362705408,3362711551,AR
3362711552,3362713599,EC
-3362713600,3362714623,GT
+3362713600,3362714623,VE
3362714624,3362714879,HN
-3362714880,3362717695,GT
+3362714880,3362716415,VE
+3362716416,3362716671,CR
+3362716672,3362717695,VE
3362717696,3362815999,CL
3362816000,3362832383,AR
-3362836480,3362838527,CO
+3362832384,3362838527,CO
3362838528,3362840575,EC
3362840576,3362897919,CL
-3362897920,3362903807,HT
-3362903808,3362904063,MX
+3362897920,3362903551,HT
+3362903552,3362904063,MX
3362904064,3362914303,HT
3362914304,3362930687,CO
+3362930688,3362934783,CL
3362934784,3362936831,AR
3362936832,3362938879,CL
3362938880,3362942975,AR
@@ -142370,7 +74165,9 @@
3362992128,3362996223,AR
3362996224,3363000319,UY
3363000320,3363004415,AR
-3363012608,3363024895,PA
+3363012608,3363013967,PA
+3363013968,3363013975,NI
+3363013976,3363024895,PA
3363024896,3363025151,HN
3363025152,3363025407,PA
3363025408,3363025663,CO
@@ -142394,9 +74191,13 @@
3363504128,3363512319,PE
3363512320,3363554047,AR
3363554048,3363554175,US
-3363554176,3363556095,AR
-3363556096,3363556223,US
-3363556224,3363557375,AR
+3363554176,3363554943,AR
+3363554944,3363555071,US
+3363555072,3363555839,AR
+3363555840,3363556223,US
+3363556224,3363556351,AR
+3363556352,3363556607,US
+3363556608,3363557375,AR
3363557376,3363559423,BZ
3363559424,3363561471,AR
3363565568,3363569663,AR
@@ -142423,14 +74224,88 @@
3363684352,3363708927,EC
3363708928,3363713023,CL
3363713024,3363713279,EC
+3363713536,3363714047,CL
+3363714048,3363717119,PE
3363717120,3363733503,CL
3363733504,3363831807,AR
-3363831808,3378511871,BR
+3363831808,3364794367,BR
+3364798464,3367796735,BR
+3367804928,3368321023,BR
+3368325120,3370487807,BR
+3370491904,3370504191,BR
+3370508288,3372732415,BR
+3372736512,3375874047,BR
+3375878144,3376873471,BR
+3376881664,3376922623,BR
+3376926720,3377291263,BR
+3377295360,3377303551,BR
+3377307648,3378511871,BR
3378511872,3380506879,MX
3380506880,3380507135,BR
-3380507136,3383754751,MX
+3380507136,3380744191,MX
+3380748288,3380760831,MX
+3380762624,3380764671,BR
+3380764672,3380807167,MX
+3380807680,3380808191,MX
+3380808704,3380811775,MX
+3380813824,3380815103,MX
+3380815872,3380816127,MX
+3380816896,3380817151,MX
+3380817920,3380818175,MX
+3380818944,3380822527,MX
+3380824064,3380826111,MX
+3380828160,3380828671,MX
+3380830208,3380830463,MX
+3380831232,3380831743,MX
+3380832256,3380832767,MX
+3380833280,3380833791,MX
+3380834304,3380834815,MX
+3380835328,3380835839,MX
+3380836352,3380836607,MX
+3380837376,3380840447,MX
+3380854784,3380858879,MX
+3380865024,3380867071,MX
+3380869120,3381350399,MX
+3381354496,3381373951,MX
+3381374976,3381377023,MX
+3381379072,3381448703,MX
+3381460992,3381559295,MX
+3381592064,3381944319,MX
+3381952512,3381960703,MX
+3381968896,3381972991,MX
+3381985280,3382009855,MX
+3382018048,3382054911,MX
+3382059008,3382063103,MX
+3382067200,3382071295,MX
+3382083584,3382087679,MX
+3382099968,3382558719,MX
+3382575104,3382577151,MX
+3382579200,3382580223,MX
+3382583296,3382585343,MX
+3382591488,3382602751,MX
+3382603776,3382605823,MX
+3382607872,3382642687,MX
+3382644736,3382646783,MX
+3382648832,3382651903,MX
+3382652928,3382653951,MX
+3382657024,3382659071,MX
+3382661120,3382662143,MX
+3382665216,3382669311,MX
+3382673408,3382677503,MX
+3382681600,3382683647,MX
+3382685696,3382686719,MX
+3382689792,3382695935,MX
+3382697984,3382853631,MX
+3382902784,3383148543,MX
+3383164928,3383295999,MX
+3383361536,3383630843,MX
+3383630844,3383630847,US
+3383630848,3383701503,MX
+3383721984,3383754751,MX
3383754752,3384147967,AR
-3384147968,3384156159,US
+3384147968,3384154879,US
+3384154880,3384155135,HN
+3384155136,3384156159,US
3384156160,3384160255,PA
3384160256,3384164351,US
3384164352,3384183807,PA
@@ -142443,10 +74318,12 @@
3384688640,3384705023,CO
3384705024,3384705535,US
3384705536,3384706047,PA
-3384706048,3384706559,US
-3384706560,3384721407,PA
+3384706048,3384707071,US
+3384707072,3384721407,PA
3384721408,3384725503,US
-3384725504,3384737791,PA
+3384725504,3384732415,PA
+3384732416,3384732671,BR
+3384732672,3384737791,PA
3384737792,3385851903,CR
3385851904,3386114047,VE
3386114048,3386245119,AR
@@ -142477,21 +74354,19 @@
3386613760,3386621951,AR
3386621952,3386630143,CO
3386630144,3386632191,UY
+3386632192,3386634239,CL
+3386634240,3386636287,CO
+3386637312,3386638335,UY
3386638336,3386640895,CW
3386640896,3386641151,US
-3386641152,3386642175,CW
-3386642176,3386642431,CA
+3386641152,3386642431,CW
3386642432,3386644735,AR
3386644736,3386644991,PY
-3386646528,3386647551,CO
-3386647552,3386647679,VE
-3386647680,3386647743,CO
-3386647744,3386649599,VE
-3386649600,3386649855,CO
-3386649856,3386650111,VE
-3386650112,3386650623,CO
-3386650624,3386654719,VE
-3386654720,3386662911,CO
+3386644992,3386645247,CR
+3386645248,3386645503,CL
+3386645504,3386645759,AR
+3386645760,3386646015,CR
+3386646016,3386662911,CO
3386662912,3386671103,CL
3386671104,3386675199,HN
3386675200,3386687487,AR
@@ -142515,6 +74390,7 @@
3386777600,3386781695,CW
3386781696,3386783743,PY
3386783744,3386784767,AR
+3386784768,3386785791,GT
3386785792,3386802175,BO
3386802176,3386900479,CL
3386900480,3387162623,PA
@@ -142527,23 +74403,22 @@
3387555840,3387568127,AR
3387568128,3387572223,PE
3387572224,3387573375,AR
-3387573376,3387573631,CO
-3387573632,3387574015,AR
+3387573376,3387573759,CO
+3387573760,3387574015,AR
3387574016,3387574143,CO
-3387574144,3387575807,AR
+3387574144,3387574783,AR
+3387574784,3387575039,CO
+3387575040,3387575295,AR
+3387575296,3387575423,CO
+3387575424,3387575807,AR
3387575808,3387576063,CO
-3387576064,3387577599,AR
-3387577600,3387577855,EC
-3387577856,3387584511,AR
+3387576064,3387576319,AR
+3387576320,3387578367,EC
+3387578368,3387584511,AR
3387584512,3387588607,PE
3387588608,3387600895,AR
3387600896,3387604991,CO
-3387604992,3387608319,AR
-3387608320,3387608447,EC
-3387608448,3387608575,AR
-3387608576,3387608831,EC
-3387608832,3387609087,AR
-3387609088,3387613183,EC
+3387604992,3387613183,EC
3387613184,3387617279,VE
3387617280,3387619327,CO
3387619328,3387686911,AR
@@ -142572,7 +74447,7 @@
3389016064,3389016575,JP
3389016576,3389017087,AU
3389017088,3389017343,JP
-3389017344,3389017599,IN
+3389017344,3389017599,HK
3389017600,3389017855,AU
3389017856,3389018111,VN
3389018112,3389018367,PG
@@ -142594,8 +74469,10 @@
3389025536,3389025791,IN
3389025792,3389026047,PK
3389026048,3389026303,TH
-3389026304,3389028351,IN
-3389028352,3389028607,TH
+3389026304,3389026559,IN
+3389026560,3389027071,AU
+3389027072,3389027583,IN
+3389027584,3389028607,TH
3389028608,3389028863,NZ
3389028864,3389029375,CN
3389029376,3389029887,NZ
@@ -142647,10 +74524,15 @@
3389161472,3389194239,JP
3389194240,3389195775,AU
3389195776,3389196287,HK
-3389196288,3389198335,AU
+3389196288,3389197567,AU
+3389197568,3389197823,IN
+3389197824,3389198079,ID
+3389198080,3389198335,IN
3389198336,3389202431,KR
3389202432,3389203455,NZ
-3389203456,3389204479,AU
+3389203456,3389203967,AU
+3389203968,3389204223,NZ
+3389204224,3389204479,AU
3389204480,3389210623,NZ
3389210624,3389210879,IN
3389210880,3389211135,AU
@@ -142664,7 +74546,10 @@
3389214720,3389218815,NZ
3389218816,3389222911,AU
3389222912,3389223935,US
-3389223936,3389227007,IN
+3389223936,3389225983,IN
+3389225984,3389226239,SG
+3389226240,3389226495,AU
+3389226496,3389227007,IN
3389227008,3389227519,CN
3389227520,3389228031,PK
3389228032,3389228799,AU
@@ -142706,9 +74591,7 @@
3389306624,3389306879,AU
3389306880,3389307135,SG
3389307136,3389307647,ID
-3389307648,3389307903,JP
3389307904,3389308159,AU
-3389308160,3389308415,KH
3389308416,3389308671,AU
3389308672,3389308927,PH
3389308928,3389317119,HK
@@ -142728,9 +74611,7 @@
3389358080,3389366271,PK
3389366272,3389370177,AU
3389370178,3389370178,PG
-3389370179,3389372415,AU
-3389372416,3389373439,US
-3389373440,3389374463,AU
+3389370179,3389374463,AU
3389374464,3389378559,MN
3389382656,3389390847,TW
3389390848,3389391359,HK
@@ -142806,8 +74687,7 @@
3389525504,3389526015,TW
3389526016,3389528063,JP
3389528064,3389528319,CN
-3389528576,3389528831,JP
-3389528832,3389529087,AP
+3389528576,3389529087,JP
3389529088,3389529599,ID
3389529600,3389529855,PH
3389529856,3389530111,HK
@@ -142847,7 +74727,8 @@
3389604352,3389604863,SG
3389604864,3389605119,HK
3389605120,3389605375,ID
-3389605376,3389605887,AU
+3389605376,3389605631,AU
+3389605632,3389605887,SG
3389605888,3389606399,ID
3389606400,3389606655,AU
3389606656,3389606911,IN
@@ -142868,7 +74749,8 @@
3389612032,3389616127,MY
3389620224,3389640703,IN
3389640704,3389644799,JP
-3389644800,3389661183,AU
+3389644800,3389645823,NZ
+3389645824,3389661183,AU
3389661184,3389669375,ID
3389669376,3389673471,CN
3389673472,3389677567,AU
@@ -142918,8 +74800,8 @@
3389812736,3389813759,AU
3389813760,3389814015,CN
3389814016,3389814527,TH
-3389814528,3389846271,AU
-3389846272,3389847551,JP
+3389814528,3389846527,AU
+3389846528,3389847551,JP
3389847552,3389849599,NZ
3389849600,3389915135,JP
3389915136,3389916159,AU
@@ -143011,8 +74893,11 @@
3389980672,3390308351,JP
3390308352,3390310399,NZ
3390310400,3390316543,AU
-3390316544,3390324735,NZ
-3390324736,3390328831,AU
+3390316544,3390325247,NZ
+3390325248,3390325503,CN
+3390325504,3390327807,AU
+3390327808,3390328575,NZ
+3390328576,3390328831,CN
3390328832,3390329087,NZ
3390329088,3390329343,AU
3390329344,3390330623,KR
@@ -143068,9 +74953,7 @@
3390414336,3390414847,SG
3390414848,3390418943,JP
3390418944,3390423039,MV
-3390423040,3390423807,SG
-3390423808,3390424063,AP
-3390424064,3390439423,SG
+3390423040,3390439423,SG
3390439424,3390441471,NZ
3390441472,3390443519,TH
3390443520,3390447359,NZ
@@ -143089,19 +74972,18 @@
3390767104,3390769407,NZ
3390769408,3390769663,IN
3390769664,3390770175,TH
-3390770176,3390771199,AU
+3390770432,3390770687,AU
+3390770944,3390771199,AU
3390771200,3390775295,SG
-3390775296,3390790399,NZ
-3390790400,3390790655,AU
-3390790656,3390801919,NZ
+3390775296,3390801919,NZ
3390801920,3390802431,CN
3390802432,3390832639,NZ
3390832640,3390963711,TH
3390963712,3391094783,KR
-3391094784,3391192063,JP
-3391192064,3391192319,AP
-3391192320,3391356927,JP
-3391356928,3391441407,NZ
+3391094784,3391356927,JP
+3391356928,3391388159,NZ
+3391388672,3391414783,NZ
+3391415040,3391441407,NZ
3391441408,3391441663,PH
3391441664,3391444479,NZ
3391444480,3391444991,VN
@@ -143177,16 +75059,85 @@
3391725568,3391733759,TH
3391733760,3391734015,CN
3391734016,3391734783,AU
-3391735808,3391736831,JP
3391736832,3391737855,IN
3391737856,3391741951,JP
-3391741952,3391746047,HK
+3391741952,3391742207,HK
+3391742208,3391742211,IN
+3391742212,3391742223,HK
+3391742224,3391742227,IN
+3391742228,3391742231,HK
+3391742232,3391742243,IN
+3391742244,3391742287,HK
+3391742288,3391742291,IN
+3391742292,3391742319,HK
+3391742320,3391742323,IN
+3391742324,3391742327,HK
+3391742328,3391742331,IN
+3391742332,3391742335,HK
+3391742336,3391742343,IN
+3391742344,3391742347,HK
+3391742348,3391742351,IN
+3391742352,3391742399,HK
+3391742400,3391742403,IN
+3391742404,3391742423,HK
+3391742424,3391742427,IN
+3391742428,3391742443,HK
+3391742444,3391742447,IN
+3391742448,3391742471,HK
+3391742472,3391742475,IN
+3391742476,3391742523,HK
+3391742524,3391742531,IN
+3391742532,3391742571,HK
+3391742572,3391742575,IN
+3391742576,3391742591,HK
+3391742592,3391742595,IN
+3391742596,3391742687,HK
+3391742688,3391742691,IN
+3391742692,3391742719,HK
+3391742720,3391742727,IN
+3391742728,3391742731,HK
+3391742732,3391742735,IN
+3391742736,3391742847,HK
+3391742848,3391742879,IN
+3391742880,3391742903,HK
+3391742904,3391742919,IN
+3391742920,3391742927,HK
+3391742928,3391742935,IN
+3391742936,3391742943,HK
+3391742944,3391742951,IN
+3391742952,3391742983,HK
+3391742984,3391742991,IN
+3391742992,3391743135,HK
+3391743136,3391743151,IN
+3391743152,3391743175,HK
+3391743176,3391743199,IN
+3391743200,3391743359,HK
+3391743360,3391743391,IN
+3391743392,3391743743,HK
+3391743744,3391743759,IN
+3391743760,3391744039,HK
+3391744040,3391744063,IN
+3391744064,3391744111,HK
+3391744112,3391744119,IN
+3391744120,3391744271,HK
+3391744272,3391744367,IN
+3391744368,3391744383,HK
+3391744384,3391744447,IN
+3391744448,3391744511,HK
+3391744512,3391744519,IN
+3391744520,3391744535,HK
+3391744536,3391744543,IN
+3391744544,3391744791,HK
+3391744792,3391744799,IN
+3391744800,3391744823,HK
+3391744824,3391744831,IN
+3391744832,3391745055,HK
+3391745056,3391745087,IN
+3391745088,3391745279,HK
+3391745280,3391745295,IN
+3391745296,3391746047,HK
3391746048,3391750143,CN
-3391750144,3391766783,SG
-3391766784,3391767039,AP
-3391767040,3391810047,SG
-3391810048,3391810303,AP
-3391810304,3391815679,SG
+3391750144,3391815679,SG
3391815680,3391817727,AU
3391817728,3391819775,TO
3391819776,3391823871,JP
@@ -143211,10 +75162,7 @@
3391843328,3391844351,VN
3391844352,3391845887,ID
3391845888,3391846399,PK
-3391847424,3391848447,PK
-3391848448,3391851007,AU
-3391851008,3391851263,AP
-3391851264,3391852543,AU
+3391848448,3391852543,AU
3391852544,3391856639,CN
3391856640,3391864831,ID
3391864832,3391866879,TW
@@ -143238,8 +75186,7 @@
3391906304,3391906815,AU
3391906816,3391907839,PH
3391907840,3391909887,BD
-3391909888,3391910399,US
-3391910400,3391910911,IO
+3391909888,3391910911,IO
3391910912,3391911935,AU
3391911936,3391913983,HK
3391913984,3391914239,TH
@@ -143267,9 +75214,7 @@
3391954944,3391971327,HK
3391971328,3391979519,AU
3391979520,3391979775,HK
-3391979776,3391979955,JP
-3391979956,3391979957,AP
-3391979958,3391980031,JP
+3391979776,3391980031,JP
3391980032,3391980543,HK
3391980544,3391983615,MY
3391983616,3391984639,NP
@@ -143311,7 +75256,6 @@
3392100864,3392101887,ID
3392101888,3392102143,PK
3392102144,3392102399,AU
-3392102400,3392106495,KH
3392106496,3392108543,IN
3392108544,3392109567,AU
3392109824,3392110079,PH
@@ -143328,12 +75272,15 @@
3392114432,3392114687,KR
3392114688,3392118783,GU
3392118784,3392126975,MY
-3392126976,3392135167,ID
+3392126976,3392127847,ID
+3392127848,3392127851,HK
+3392127852,3392128423,ID
+3392128424,3392128431,HK
+3392128432,3392135167,ID
3392135168,3392143359,TH
3392143360,3392208895,JP
-3392208896,3392286975,NZ
-3392286976,3392287231,AP
-3392287232,3392287743,NZ
+3392208896,3392217343,NZ
+3392217600,3392287743,NZ
3392287744,3392288767,NP
3392288768,3392324607,NZ
3392324608,3392325119,AU
@@ -143352,7 +75299,6 @@
3392385024,3392389119,BD
3392389120,3392401407,ID
3392401408,3392403455,SG
-3392403456,3392404479,AU
3392404480,3392405503,ID
3392405504,3392406015,NP
3392406016,3392406527,IN
@@ -143360,7 +75306,6 @@
3392407552,3392409599,ID
3392409600,3392413695,JP
3392413696,3392413951,PK
-3392414208,3392414463,PH
3392414464,3392414719,HK
3392414720,3392415231,AU
3392415232,3392415487,JP
@@ -143452,11 +75397,11 @@
3392692224,3392700415,IN
3392700416,3392708607,SG
3392708608,3392712703,ID
-3392712704,3392716799,AF
-3392716800,3392733439,IN
-3392733440,3392733695,ID
-3392733696,3392734207,IN
-3392734208,3392741375,ID
+3392712704,3392714751,AF
+3392714752,3392715007,FR
+3392715008,3392716799,AF
+3392716800,3392733183,IN
+3392733184,3392741375,ID
3392741376,3392765951,PH
3392765952,3392782335,TH
3392789504,3392790527,HK
@@ -143474,13 +75419,11 @@
3392823296,3392824319,KH
3392824320,3392824831,AU
3392824832,3392825343,IN
-3392825344,3392826367,JP
3392828416,3392829439,JP
3392829440,3392830463,IN
3392830464,3392830719,ID
3392830720,3392830975,IN
3392830976,3392831231,TH
-3392831232,3392831487,IN
3392831488,3392832511,PG
3392832512,3392833535,IN
3392833536,3392835583,AU
@@ -143504,7 +75447,6 @@
3392861696,3392861951,PH
3392861952,3392862207,AU
3392864256,3392864511,CN
-3392864512,3392864767,AU
3392864768,3392865279,IN
3392865280,3392866303,NU
3392866304,3392880639,AU
@@ -143531,7 +75473,7 @@
3392924672,3392924927,CN
3392924928,3392925183,AU
3392925184,3392925695,VN
-3392925696,3392926719,AU
+3392925952,3392926719,AU
3392926720,3392927231,IN
3392927232,3392927743,AU
3392927744,3392927999,IN
@@ -143546,9 +75488,7 @@
3392942080,3392944127,CN
3392944128,3392945151,MY
3392945152,3392946175,IN
-3392946176,3392946719,AU
-3392946720,3392946720,AU
-3392946721,3392954367,AU
+3392946176,3392954367,AU
3392954368,3392956415,CN
3392956416,3392958463,VN
3392958464,3392962559,CN
@@ -143608,26 +75548,26 @@
3393126144,3393126399,CN
3393126400,3393134591,HK
3393134592,3393146879,AU
-3393146880,3393147135,PK
-3393147136,3393150975,CN
+3393146880,3393150975,CN
3393150976,3393159167,IN
3393159168,3393167359,SG
3393167360,3393175551,CN
3393175552,3393183743,PK
3393183744,3393183999,ID
-3393184000,3393184255,AP
+3393184000,3393184255,SG
3393184256,3393184767,PK
3393184768,3393187839,SG
3393187840,3393189887,NP
3393189888,3393190911,CN
3393190912,3393191167,IN
3393191424,3393191935,SB
-3393191936,3393257471,HK
+3393191936,3393222911,HK
+3393222912,3393223167,MY
+3393223168,3393257471,HK
3393257472,3393260031,CN
3393260032,3393260543,BD
3393260544,3393265663,AU
-3393265664,3393267711,NZ
-3393267712,3393273855,CK
+3393265664,3393273855,CK
3393273856,3393282047,AU
3393286144,3393290239,ID
3393290240,3393298431,IN
@@ -143637,7 +75577,8 @@
3393306624,3393314815,HK
3393314816,3393318911,ID
3393318912,3393320959,SG
-3393320960,3393388543,HK
+3393320960,3393363967,HK
+3393372160,3393388543,HK
3393388544,3393389567,CN
3393389568,3393390591,IN
3393390592,3393392639,ID
@@ -143693,7 +75634,6 @@
3393634304,3393638399,CN
3393638400,3393650687,JP
3393650688,3393658879,IN
-3393658880,3393662975,KH
3393662976,3393675263,JP
3393675264,3393679359,MY
3393679360,3393683455,TH
@@ -143709,9 +75649,7 @@
3393741568,3393741823,MG
3393741824,3393742847,US
3393742848,3393743871,TL
-3393743872,3393744639,US
-3393744640,3393744895,KH
-3393744896,3393748991,PH
+3393743872,3393744895,US
3393748992,3393765375,AU
3393765376,3393773567,ID
3393775616,3393777663,BD
@@ -143740,12 +75678,10 @@
3393855744,3393855999,NZ
3393856000,3393856255,AU
3393856256,3393856511,HK
-3393856768,3393856896,AU
-3393856897,3393856897,AP
-3393856898,3393857023,AU
+3393856768,3393857023,SG
3393857024,3393857535,NZ
3393857536,3393858047,HK
-3393858048,3393858559,ID
+3393858304,3393858559,ID
3393858560,3393858815,AU
3393858816,3393859071,ID
3393859072,3393859327,AU
@@ -143758,13 +75694,15 @@
3393862144,3393862655,VN
3393862656,3393862911,NZ
3393862912,3393863167,AU
-3393863168,3393863679,HK
+3393863168,3393863679,SG
3393863680,3393865727,AU
3393865728,3393867775,ID
3393867776,3393871871,CN
-3393871872,3393878015,HK
-3393878016,3393878271,IN
-3393878272,3393880063,HK
+3393871872,3393874943,HK
+3393874944,3393875967,AU
+3393875968,3393878271,HK
+3393878272,3393878527,IN
+3393878528,3393880063,HK
3393880064,3393896447,AU
3393896448,3393906687,NZ
3393908736,3393910783,BD
@@ -143808,12 +75746,9 @@
3394078720,3394078975,AU
3394078976,3394079231,IN
3394079232,3394079743,PH
-3394079744,3394092543,HK
-3394092544,3394092799,AP
-3394092800,3394111487,HK
+3394079744,3394111487,HK
3394111488,3394113535,CN
-3394113536,3394113791,AP
-3394113792,3394117631,SG
+3394113536,3394117631,SG
3394117632,3394121727,AU
3394121728,3394125823,SG
3394125824,3394142207,PH
@@ -143835,9 +75770,9 @@
3394191360,3394207743,SG
3394207744,3394215935,JP
3394215936,3394220031,AU
-3394220032,3394226943,SG
-3394226944,3394227199,AP
-3394227200,3394232319,SG
+3394220032,3394230271,SG
+3394230272,3394230527,AU
+3394230528,3394232319,SG
3394232320,3394234367,CN
3394234368,3394236415,VN
3394236416,3394238463,JP
@@ -143852,15 +75787,13 @@
3394273280,3394277375,HK
3394277376,3394279423,AU
3394279424,3394281471,PH
-3394281472,3394282239,SG
-3394282240,3394282495,US
-3394282496,3394285567,SG
+3394281472,3394285567,SG
3394285568,3394289663,AU
3394289664,3394293759,CN
3394293760,3394297855,ID
3394297856,3394306047,TH
3394306048,3394307071,CN
-3394307072,3394308095,SG
+3394307072,3394308095,AU
3394308096,3394310143,JP
3394310144,3394313727,AU
3394313728,3394313983,PH
@@ -143873,9 +75806,7 @@
3394347008,3394351103,PH
3394355200,3394359295,IN
3394359296,3394363391,AU
-3394363392,3394418431,HK
-3394418432,3394418687,AP
-3394418688,3394441215,HK
+3394363392,3394441215,HK
3394441216,3394453503,IN
3394453504,3394461695,AU
3394461696,3394465791,SG
@@ -143884,16 +75815,13 @@
3394478080,3394482175,PK
3394482176,3394484223,AU
3394484224,3394486271,JP
-3394486272,3394489599,HK
-3394489600,3394489631,AP
-3394489632,3394494463,HK
+3394486272,3394494463,HK
3394494464,3394498559,JP
3394498560,3394500607,HK
3394500608,3394501631,SG
3394501632,3394502655,CN
3394502656,3394503679,HK
-3394503680,3394506751,CN
-3394506752,3394507263,HK
+3394503680,3394507263,CN
3394507264,3394507775,JP
3394508544,3394508799,PH
3394508800,3394510847,CN
@@ -143903,9 +75831,7 @@
3394521088,3394523135,KH
3394523136,3394527231,JP
3394527232,3394535423,PH
-3394535424,3394544895,HK
-3394544896,3394545151,AP
-3394545152,3394621439,HK
+3394535424,3394621439,HK
3394621440,3394625535,CN
3394625536,3394629631,HK
3394629632,3394631679,AU
@@ -143946,8 +75872,7 @@
3394764800,3394772991,HK
3394772992,3394775039,PK
3394777088,3394781183,JP
-3394781184,3394783231,US
-3394783232,3394789375,MP
+3394781184,3394789375,MP
3394789376,3394797567,HK
3394797568,3394813951,IN
3394813952,3394815999,JP
@@ -143956,20 +75881,19 @@
3394830336,3394831359,HK
3394831360,3394832383,NZ
3394832384,3394834431,CN
-3394834432,3394835967,HK
-3394835968,3394836223,AP
-3394836224,3394836479,HK
+3394834432,3394836479,HK
3394836480,3394838527,BT
-3394838528,3394841087,NZ
-3394841088,3394841599,AU
-3394841600,3394846719,NZ
+3394838528,3394844671,NZ
+3394844672,3394845695,AU
+3394845696,3394846207,NZ
+3394846208,3394846719,AU
3394846720,3394850815,IN
3394850816,3394854911,JP
3394855936,3394856959,AU
3394856960,3394859007,IN
3394859008,3394860031,JP
3394860032,3394860543,ID
-3394860544,3394861055,IN
+3394860544,3394860799,IN
3394861056,3394862079,HK
3394862080,3394863103,KR
3394863104,3394871295,NZ
@@ -143990,8 +75914,8 @@
3394906112,3394906367,IN
3394906368,3394906623,AU
3394906624,3394907135,IN
-3394907136,3394909183,NZ
-3394909184,3394910207,AU
+3394907136,3394908159,NZ
+3394908160,3394910207,AU
3394910208,3394912255,NZ
3394912256,3394920447,PF
3394920448,3394924543,IN
@@ -144006,7 +75930,6 @@
3394946560,3394947071,ID
3394947072,3394948095,BD
3394948096,3394948351,IN
-3394948352,3394948607,PH
3394948608,3394949119,AU
3394949120,3394953215,JP
3394953216,3394957311,CN
@@ -144075,7 +75998,6 @@
3395175936,3395176191,SG
3395176192,3395176703,AU
3395176704,3395176959,TH
-3395176960,3395177215,IN
3395177216,3395177471,HK
3395177472,3395177983,TH
3395177984,3395178495,AU
@@ -144085,10 +76007,8 @@
3395180032,3395180287,JP
3395180288,3395180543,HK
3395180544,3395181055,VN
-3395181056,3395181567,HK
3395181568,3395182591,CN
-3395182592,3395182847,AP
-3395182848,3395190783,SG
+3395182592,3395190783,SG
3395190784,3395198975,JP
3395198976,3395203071,MY
3395203072,3395215359,JP
@@ -144096,9 +76016,7 @@
3395219456,3395223551,TH
3395223552,3395231743,CN
3395231744,3395239935,JP
-3395239936,3395243007,SG
-3395243008,3395243263,AP
-3395243264,3395254783,SG
+3395239936,3395254783,SG
3395254784,3395255039,IN
3395255040,3395256319,SG
3395256320,3395264511,ID
@@ -144126,9 +76044,7 @@
3397027072,3397027327,PH
3397027328,3397027839,IN
3397027840,3397029887,JP
-3397029888,3397031423,MY
-3397031424,3397031679,AP
-3397031680,3397033983,MY
+3397029888,3397033983,MY
3397033984,3397038079,ID
3397038080,3397058559,JP
3397058560,3397066751,MU
@@ -144136,7 +76052,9 @@
3397070848,3397074943,PH
3397074944,3397083135,HK
3397083136,3397087231,CN
-3397091328,3397099519,GU
+3397091328,3397097471,GU
+3397097472,3397097855,MP
+3397097856,3397099519,GU
3397099520,3397103615,HK
3397103616,3397105663,LA
3397105664,3397107711,JP
@@ -144185,7 +76103,7 @@
3397216256,3397216767,AU
3397216768,3397217023,IN
3397217024,3397217279,SG
-3397217280,3397217791,AU
+3397217280,3397217535,AU
3397217792,3397218047,NZ
3397218048,3397218303,AU
3397218304,3397222399,CN
@@ -144202,10 +76120,44 @@
3397279744,3397283839,AU
3397283840,3397285887,KR
3397285888,3397287935,BD
-3397287936,3397296127,SG
-3397296128,3397298687,HK
-3397298688,3397299455,SG
-3397299456,3397304319,HK
+3397287936,3397296175,SG
+3397296176,3397296191,HK
+3397296192,3397296271,SG
+3397296272,3397296279,HK
+3397296280,3397296479,SG
+3397296480,3397297263,HK
+3397297264,3397297271,SG
+3397297272,3397297295,HK
+3397297296,3397297311,SG
+3397297312,3397297407,HK
+3397297408,3397297439,SG
+3397297440,3397297919,HK
+3397297920,3397297983,SG
+3397297984,3397298015,HK
+3397298016,3397298071,SG
+3397298072,3397298079,HK
+3397298080,3397298431,SG
+3397298432,3397298495,HK
+3397298496,3397298511,SG
+3397298512,3397298559,HK
+3397298560,3397298943,SG
+3397298944,3397298959,HK
+3397298960,3397299047,SG
+3397299048,3397299055,HK
+3397299056,3397299183,SG
+3397299184,3397299191,HK
+3397299192,3397299359,SG
+3397299360,3397299375,IN
+3397299376,3397299455,SG
+3397299456,3397299483,HK
+3397299484,3397299487,SG
+3397299488,3397299599,HK
+3397299600,3397299603,SG
+3397299604,3397304211,HK
+3397304212,3397304215,SG
+3397304216,3397304299,HK
+3397304300,3397304303,SG
+3397304304,3397304319,HK
3397304320,3397308415,NZ
3397308416,3397312511,HK
3397312512,3397320703,JP
@@ -144214,7 +76166,11 @@
3397323776,3397328895,CN
3397328896,3397330943,ID
3397330944,3397337087,CN
-3397337088,3397341183,HK
+3397337088,3397338375,HK
+3397338376,3397338379,JP
+3397338380,3397339647,HK
+3397339648,3397339687,SG
+3397339688,3397341183,HK
3397341184,3397345279,JP
3397345280,3397349375,ID
3397349376,3397363711,CN
@@ -144223,12 +76179,10 @@
3397369856,3397374463,CN
3397374464,3397374975,AU
3397374976,3397386239,CN
-3397386240,3397387775,GU
-3397387776,3397388031,US
-3397388032,3397394431,GU
+3397386240,3397394431,GU
3397394432,3397402623,PH
3397402624,3397410815,GU
-3397410816,3397411327,IN
+3397410816,3397411327,AU
3397411328,3397411583,SG
3397411584,3397411839,HK
3397411840,3397412351,KR
@@ -144239,7 +76193,15 @@
3397413888,3397414399,NZ
3397414400,3397414911,IN
3397414912,3397419007,AU
-3397419008,3397427199,HK
+3397419008,3397419583,HK
+3397419584,3397419599,KR
+3397419600,3397419607,HK
+3397419608,3397419615,KR
+3397419616,3397419647,HK
+3397419648,3397419671,KR
+3397419672,3397419711,HK
+3397419712,3397419719,KR
+3397419720,3397427199,HK
3397427200,3397443583,SG
3397443584,3397451775,HK
3397451776,3397468159,TH
@@ -144258,9 +76220,8 @@
3397507840,3397508095,IN
3397508096,3397509119,PH
3397509120,3397510143,ID
-3397510144,3397510399,FJ
-3397510400,3397510655,VU
-3397510656,3397511167,FJ
+3397510144,3397510911,FJ
+3397510912,3397511167,AU
3397511168,3397512191,LK
3397512192,3397512447,KH
3397512448,3397512703,AU
@@ -144282,11 +76243,7 @@
3397530624,3397531647,ID
3397531648,3397532671,SG
3397532672,3397533695,JP
-3397533696,3397551359,HK
-3397551360,3397551615,AP
-3397551616,3397557247,HK
-3397557248,3397557503,AP
-3397557504,3397566463,HK
+3397533696,3397566463,HK
3397566464,3397574655,AU
3397574656,3397582847,CN
3397582848,3397584895,MN
@@ -144331,16 +76288,11 @@
3397794816,3397812223,HK
3397812224,3397816319,CN
3397816320,3397832703,IN
-3397832704,3397836799,JP
3397836800,3397844991,AU
3397844992,3397869823,JP
3397869824,3397870079,AU
-3397870080,3397908735,JP
-3397908736,3397908991,AU
-3397908992,3397910527,JP
-3397910528,3397914111,SG
-3397914112,3397914367,AP
-3397914368,3397918719,SG
+3397870080,3397910527,JP
+3397910528,3397918719,SG
3397918720,3397922815,AU
3397922816,3397926911,CN
3397935104,3397939199,AU
@@ -144442,10 +76394,18 @@
3398637120,3398637183,HK
3398637184,3398637823,JP
3398637824,3398638079,PH
-3398638080,3398640639,JP
-3398640640,3398640895,AU
-3398640896,3398641663,JP
-3398641664,3398668287,AU
+3398638080,3398639903,JP
+3398639904,3398639907,MY
+3398639908,3398641407,JP
+3398641408,3398641663,MY
+3398641664,3398641919,JP
+3398641920,3398642175,AU
+3398642176,3398642431,JP
+3398642432,3398642943,AU
+3398642944,3398643199,JP
+3398643200,3398643455,AU
+3398643456,3398647807,JP
+3398647808,3398668287,AU
3398668288,3398672383,CN
3398672384,3398680575,PK
3398680576,3398684671,ID
@@ -144474,7 +76434,8 @@
3398830080,3398831103,KH
3398831104,3398831359,JP
3398831360,3398831615,HK
-3398831616,3398832127,JP
+3398831616,3398831871,SG
+3398831872,3398832127,JP
3398832128,3398840319,CN
3398840320,3398842367,JP
3398842368,3398843391,CN
@@ -144494,9 +76455,7 @@
3398902784,3398903807,AU
3398903808,3398905855,TH
3398905856,3398909951,TW
-3398909952,3398913535,GU
-3398913536,3398913791,US
-3398913792,3398918143,GU
+3398909952,3398918143,GU
3398918144,3398926335,JP
3398926336,3398934527,CN
3398934528,3398938623,VN
@@ -144548,7 +76507,6 @@
3399414016,3399414271,AU
3399414528,3399414783,AU
3399414784,3399415807,VN
-3399415808,3399416831,SG
3399416832,3399417087,ID
3399417088,3399417855,AU
3399417856,3399450623,ID
@@ -144569,8 +76527,7 @@
3399557120,3399565311,SG
3399565312,3399581695,AU
3399581696,3399581951,HK
-3399581952,3399589631,US
-3399589632,3399589887,NP
+3399581952,3399589887,US
3399589888,3399593983,HK
3399593984,3399598079,BD
3399598080,3399614463,JP
@@ -144601,8 +76558,7 @@
3399729152,3399745535,PH
3399745536,3399749631,CN
3399749632,3399751679,AU
-3399751680,3399751935,IN
-3399751936,3399752191,CN
+3399751680,3399752191,IN
3399752192,3399752447,AU
3399752448,3399752703,HK
3399752704,3399753727,NZ
@@ -144622,16 +76578,12 @@
3399826432,3399826943,PH
3399826944,3399827455,IN
3399827456,3399835647,AU
-3399835648,3399839743,AP
+3399835648,3399839743,CN
3399839744,3399841791,JP
3399841792,3399852031,TW
3399852032,3399856127,JP
3399856128,3399860223,CN
-3399860224,3399863551,PG
-3399863552,3399863615,AU
-3399863616,3399863647,PG
-3399863648,3399863807,AU
-3399863808,3399864319,PG
+3399860224,3399864319,PG
3399864320,3399868415,CN
3399868416,3399872255,PK
3399872256,3399873023,CN
@@ -144653,17 +76605,20 @@
3399942144,3399945983,HK
3399945984,3399946239,AU
3399946240,3399950335,HK
-3399950336,3399954175,US
-3399954176,3399954431,AU
-3399954432,3399974911,US
-3399974912,3399995391,MY
+3399950336,3399954943,AU
+3399954944,3399974911,US
+3399974912,3399983744,MY
+3399983745,3399983745,SG
+3399983746,3399991295,MY
+3399991296,3399995391,IN
3399995392,3399999487,KR
-3399999488,3400001535,AU
-3400001536,3400004607,SG
-3400004608,3400005631,AU
-3400005632,3400006143,SG
-3400006144,3400006399,HK
-3400006400,3400006911,SG
+3399999488,3400000255,SG
+3400000256,3400000511,AU
+3400000512,3400004607,SG
+3400004608,3400004863,AU
+3400004864,3400005119,SG
+3400005120,3400005375,AU
+3400005376,3400006911,SG
3400006912,3400006927,AU
3400006928,3400007679,SG
3400007680,3400024063,AU
@@ -144719,9 +76674,7 @@
3400264704,3400265215,ID
3400265216,3400265471,AU
3400265472,3400265727,IN
-3400265728,3400265983,PG
-3400265984,3400266239,AU
-3400266240,3400267775,PG
+3400265728,3400267775,PG
3400267776,3400268799,KR
3400268800,3400269823,MO
3400269824,3400270847,CN
@@ -144766,15 +76719,9 @@
3400431872,3400432127,HK
3400432128,3400432639,IN
3400433664,3400435711,HK
-3400435712,3400436223,BD
-3400436224,3400438201,HK
-3400438202,3400438202,US
-3400438203,3400438527,HK
-3400438528,3400438783,AF
-3400438784,3400441599,HK
-3400441600,3400441855,AU
-3400441856,3400445951,NZ
-3400445952,3400450047,AU
+3400435712,3400435967,BD
+3400435968,3400441855,HK
+3400441856,3400450047,NZ
3400450048,3400458239,JP
3400458240,3400466431,AU
3400466432,3400499199,MO
@@ -144795,9 +76742,12 @@
3400608768,3400609791,IN
3400609792,3400630271,JP
3400630272,3400646655,IN
-3400646656,3400648815,AU
+3400646656,3400647935,SG
+3400647936,3400648191,AU
+3400648192,3400648815,SG
3400648816,3400648831,HK
-3400648832,3400654847,AU
+3400648832,3400650239,SG
+3400650240,3400654847,AU
3400654848,3400663039,IN
3400663040,3400683519,MY
3400683520,3400691711,JP
@@ -144806,9 +76756,7 @@
3400728576,3400736767,MN
3400736768,3400744959,JP
3400744960,3400753151,IN
-3400753152,3400753407,MY
-3400753408,3400753663,AP
-3400753664,3400761343,MY
+3400753152,3400761343,MY
3400773632,3400775679,KR
3400775680,3400777727,ID
3400777728,3400790015,JP
@@ -144871,17 +76819,7 @@
3401545728,3401547775,BD
3401547776,3401580543,IN
3401580544,3402629119,CN
-3402629120,3404506879,JP
-3404506880,3404507135,US
-3404507136,3404630015,JP
-3404630016,3404633087,US
-3404633088,3404693503,JP
-3404693504,3404697599,US
-3404697600,3404857954,JP
-3404857955,3404857955,ID
-3404857956,3404857966,JP
-3404857967,3404857967,IN
-3404857968,3405774847,JP
+3402629120,3405774847,JP
3405774848,3405775871,AU
3405775872,3405776895,CN
3405776896,3405777407,AU
@@ -145161,8 +77099,7 @@
3406382592,3406383359,CN
3406383360,3406383871,AU
3406383872,3406384639,CN
-3406384640,3406384895,AP
-3406384896,3406385151,SG
+3406384640,3406385151,SG
3406385152,3406389247,AU
3406389248,3406390783,CN
3406390784,3406392319,AU
@@ -145210,19 +77147,17 @@
3406527232,3406527999,AU
3406528000,3406528255,CN
3406528256,3406528511,AU
-3406528512,3406528767,AP
-3406528768,3406529535,HK
-3406529536,3406529791,IN
-3406529792,3406530047,HK
-3406530048,3406530303,SG
-3406530304,3406530559,HK
+3406528512,3406528767,HK
+3406528768,3406529023,AU
+3406529024,3406529535,HK
+3406529536,3406529791,IL
+3406529792,3406530559,HK
3406530560,3406531583,CN
3406531584,3406531839,AU
3406531840,3406532607,CN
3406532608,3406541823,AU
3406541824,3406542847,CN
-3406542848,3406543103,AP
-3406543104,3406548991,AU
+3406542848,3406548991,AU
3406548992,3406550015,CN
3406550016,3406565375,AU
3406565376,3406565631,CN
@@ -145238,7 +77173,7 @@
3406577920,3406578431,CN
3406578432,3406579199,AU
3406579200,3406579711,CN
-3406579712,3406583551,AU
+3406579712,3406583295,AU
3406583552,3406585855,CN
3406585856,3406586879,AU
3406586880,3406587391,CN
@@ -145367,7 +77302,8 @@
3406835968,3406836735,CN
3406836736,3406838271,AU
3406838272,3406838527,CN
-3406838528,3406857471,AU
+3406838528,3406839551,AU
+3406839808,3406857471,AU
3406857472,3406857727,CN
3406857728,3406864639,AU
3406864640,3406865151,CN
@@ -145407,7 +77343,7 @@
3406930944,3406931199,CN
3406931200,3406936831,AU
3406936832,3406937087,CN
-3406937088,3406937599,AU
+3406937088,3406937343,AU
3406937600,3406938111,CN
3406938112,3406938623,AU
3406938624,3406938879,IN
@@ -145417,11 +77353,10 @@
3406948096,3406948351,CN
3406948352,3406948607,AU
3406948608,3406948863,CN
-3406948864,3406950399,AU
-3406950400,3406951423,NF
+3406948864,3406950655,AU
+3406950656,3406951423,NF
3406951424,3406952447,AU
3406952448,3406952703,CN
-3406952704,3406952959,PH
3406952960,3406954239,AU
3406954240,3406954495,CN
3406954496,3406955007,AU
@@ -145533,19 +77468,20 @@
3407089920,3407090175,CN
3407090176,3407095807,AU
3407095808,3407096319,CN
-3407096320,3407097855,AU
+3407096576,3407097855,AU
3407097856,3407098111,CN
3407098112,3407101183,AU
3407101184,3407101439,CN
3407101440,3407101695,AU
3407101952,3407102207,AU
3407102208,3407102463,CN
-3407102464,3407107071,AU
+3407102464,3407104255,AU
+3407104512,3407107071,AU
3407107072,3407107583,CN
3407107584,3407108351,AU
3407108352,3407108607,CN
3407108608,3407112447,AU
-3407112448,3407112703,AP
+3407112448,3407112703,SG
3407112704,3407113215,CN
3407113216,3407115007,AU
3407115008,3407115263,CN
@@ -145559,7 +77495,11 @@
3407120128,3407122431,CN
3407122432,3407123967,AU
3407123968,3407124223,CN
-3407124224,3407144447,AU
+3407124224,3407124479,AU
+3407124480,3407126015,HK
+3407126016,3407126271,AU
+3407126272,3407126527,HK
+3407126528,3407144447,AU
3407144448,3407144703,CN
3407144704,3407144959,AU
3407144960,3407145215,CN
@@ -145620,7 +77560,8 @@
3407241984,3407242239,CN
3407242240,3407243775,AU
3407243776,3407244031,CN
-3407244032,3407247871,AU
+3407244032,3407244543,AU
+3407244800,3407247871,AU
3407247872,3407248383,CN
3407248384,3407250175,AU
3407250176,3407250431,CN
@@ -145676,8 +77617,8 @@
3407334400,3407335423,CN
3407335424,3407339519,AU
3407339520,3407339775,CN
-3407339776,3407340543,AU
-3407340544,3407341567,CN
+3407339776,3407340031,AU
+3407340032,3407341567,CN
3407341568,3407345919,AU
3407345920,3407346175,CN
3407346176,3407346431,AU
@@ -145763,7 +77704,8 @@
3407450880,3407451135,CN
3407451136,3407452415,AU
3407452416,3407453183,CN
-3407453184,3407455231,AU
+3407453184,3407454463,AU
+3407454720,3407455231,AU
3407455232,3407455487,CN
3407455488,3407455743,AU
3407455744,3407455999,CN
@@ -145830,9 +77772,7 @@
3407523072,3407523327,CN
3407523328,3407523839,AU
3407523840,3407524095,CN
-3407524096,3407524607,AU
-3407524608,3407524863,NZ
-3407524864,3407526143,AU
+3407524096,3407526143,AU
3407526144,3407526399,CN
3407526400,3407530495,AU
3407530496,3407531007,CN
@@ -145860,7 +77800,8 @@
3407549440,3407549695,CN
3407549696,3407549951,AU
3407549952,3407550463,CN
-3407550464,3407554559,AU
+3407550464,3407553023,AU
+3407553280,3407554559,AU
3407554560,3407554815,CN
3407554816,3407555839,AU
3407555840,3407556095,CN
@@ -146013,7 +77954,7 @@
3407748608,3407750655,AU
3407750656,3407751167,SG
3407751168,3407753215,AU
-3407753216,3407753727,HK
+3407753216,3407753727,SG
3407753728,3407757823,AU
3407757824,3407758079,CN
3407758080,3407761663,AU
@@ -146255,7 +78196,8 @@
3408032768,3408033023,LK
3408033024,3408033279,IN
3408033280,3408033791,ID
-3408033792,3408039935,AU
+3408033792,3408035071,AU
+3408035328,3408039935,AU
3408039936,3408040191,VN
3408040192,3408040703,AU
3408040704,3408040959,CN
@@ -146263,7 +78205,6 @@
3408041472,3408041727,CN
3408041728,3408041983,AU
3408041984,3408042495,CN
-3408042496,3408042751,HK
3408042752,3408044287,AU
3408044288,3408044799,CN
3408044800,3408050943,AU
@@ -146322,9 +78263,7 @@
3409435904,3409436159,CN
3409436160,3409436671,AU
3409436672,3409436927,CN
-3409436928,3409438563,AU
-3409438564,3409438564,AU
-3409438565,3409445119,AU
+3409436928,3409445119,AU
3409445120,3409445375,CN
3409445376,3409445887,AU
3409445888,3409446143,CN
@@ -146346,7 +78285,11 @@
3409462272,3409462783,CN
3409462784,3409465855,AU
3409465856,3409466879,CN
-3409466880,3409469183,AU
+3409466880,3409467135,AU
+3409467136,3409467391,HK
+3409467392,3409467903,AU
+3409467904,3409468415,HK
+3409468416,3409469183,AU
3409469184,3409469439,CN
3409469440,3409473023,AU
3409473024,3409473279,CN
@@ -146453,7 +78396,7 @@
3409879552,3409882111,AU
3409882112,3409883135,IN
3409883136,3409887999,AU
-3409888000,3409888255,SG
+3409888000,3409888255,HK
3409888256,3409888511,AU
3409888512,3409888767,CN
3409888768,3409896447,AU
@@ -146565,7 +78508,6 @@
3411204608,3411204863,IN
3411204864,3411205631,KR
3411205632,3411206143,HK
-3411206144,3411210239,KH
3411210240,3411212287,KR
3411212288,3411213311,IN
3411213312,3411214335,HK
@@ -146573,7 +78515,7 @@
3411215360,3411216383,AU
3411218432,3411220479,PG
3411220480,3411226623,ID
-3411226624,3411228671,US
+3411226624,3411228671,IO
3411228672,3411230719,CN
3411230720,3411247103,HK
3411247104,3411255295,KR
@@ -146585,7 +78527,8 @@
3411270656,3411271679,SG
3411271680,3411275775,CN
3411275776,3411277823,JP
-3411277824,3411278335,IN
+3411277824,3411278079,IN
+3411278080,3411278335,HK
3411278336,3411278591,SG
3411278592,3411278847,FJ
3411278848,3411296255,HK
@@ -146619,13 +78562,7 @@
3411509248,3411542015,PH
3411542016,3411550207,IN
3411550208,3411558399,CN
-3411558400,3411559935,HK
-3411559936,3411560191,US
-3411560192,3411561727,HK
-3411561728,3411561983,AU
-3411561984,3411564311,HK
-3411564312,3411564319,AU
-3411564320,3411565257,HK
+3411558400,3411565257,HK
3411565258,3411565258,US
3411565259,3411566591,HK
3411566592,3411570687,BD
@@ -146651,9 +78588,15 @@
3411644928,3411645951,ID
3411645952,3411646207,SG
3411646208,3411647487,IN
-3411647488,3411648511,AU
-3411648512,3411656703,NZ
-3411656704,3411673087,AU
+3411647488,3411648767,AU
+3411648768,3411649023,NZ
+3411649024,3411649279,AU
+3411649280,3411649535,NZ
+3411649536,3411649791,AU
+3411649792,3411650303,NZ
+3411650304,3411654399,AU
+3411654400,3411654655,NZ
+3411654656,3411673087,AU
3411673088,3411674111,CN
3411674112,3411674623,IN
3411674624,3411675135,HK
@@ -146670,11 +78613,7 @@
3411763200,3411767295,CN
3411767296,3411769343,MN
3411769344,3411771391,CN
-3411771392,3411773951,HK
-3411773952,3411774207,BD
-3411774208,3411775811,HK
-3411775812,3411775813,US
-3411775814,3411777023,HK
+3411771392,3411777023,HK
3411777024,3411777279,ID
3411777280,3411779327,HK
3411779328,3411779583,ID
@@ -146683,28 +78622,22 @@
3411795968,3411804159,AU
3411804160,3411805183,CN
3411805184,3411805695,PK
-3411805696,3411805951,JP
3411805952,3411806207,AU
3411806208,3411808255,PH
3411808256,3411810303,JP
-3411810304,3411810559,MN
-3411810560,3411810815,NZ
+3411810304,3411810815,NZ
3411810816,3411812351,AU
3411812352,3411820543,IN
3411820544,3411836927,SG
3411836928,3411845119,MY
3411845120,3411853311,CN
3411853312,3411857407,IN
-3411857408,3411858687,JP
-3411858688,3411858943,NZ
-3411858944,3411859249,JP
+3411857408,3411859249,JP
3411859250,3411859251,AU
-3411859252,3411859711,JP
-3411859712,3411859967,AP
-3411859968,3411861503,JP
+3411859252,3411861503,JP
3411861504,3411869695,AU
3411869696,3411943423,CN
-3411943424,3411951615,AU
+3411943424,3411951615,NZ
3411951616,3411967999,LK
3411968000,3411984383,AU
3411984384,3412000767,IN
@@ -146712,7 +78645,8 @@
3412002816,3412004863,GU
3412004864,3412017151,JP
3412017152,3412025343,SG
-3412025344,3412066303,CN
+3412025344,3412049919,CN
+3412058112,3412066303,CN
3412066304,3412213759,NZ
3412213760,3412221951,AU
3412221952,3412230143,IN
@@ -146749,20 +78683,27 @@
3412328448,3412336639,AU
3412336640,3412342783,CN
3412342784,3412343039,AU
-3412343040,3412343295,IN
-3412343296,3412343807,AU
+3412343040,3412343295,HK
+3412343552,3412343807,AU
3412344064,3412344319,AU
3412344320,3412344575,SG
3412344576,3412344831,CN
3412344832,3412348927,IN
3412348928,3412361215,CN
-3412361216,3412369407,AP
+3412361216,3412369407,HK
3412369408,3412377599,KR
3412377600,3412381695,CN
3412381696,3412385791,NZ
3412385792,3412393983,AU
3412393984,3412426751,IN
-3412426752,3412434943,HK
+3412426752,3412431487,HK
+3412431488,3412431551,TH
+3412431552,3412433679,HK
+3412433680,3412433695,TH
+3412433696,3412433759,HK
+3412433760,3412433775,ID
+3412433776,3412433783,TH
+3412433784,3412434943,HK
3412434944,3412443135,PK
3412443136,3412451327,SG
3412451328,3412526079,AU
@@ -146777,8 +78718,9 @@
3412656128,3412672511,HK
3412672512,3412675071,JP
3412675072,3412675327,US
-3412675328,3412678655,JP
-3412678656,3412680703,US
+3412675328,3412680191,JP
+3412680192,3412680447,US
+3412680448,3412680703,JP
3412680704,3412697087,CN
3412697088,3412705279,IN
3412705280,3412713471,AU
@@ -146796,17 +78738,12 @@
3413008384,3413016575,JP
3413016576,3413024767,AU
3413024768,3413032959,CN
-3413032960,3413033471,AU
-3413033472,3413033727,US
-3413033728,3413036287,AU
-3413036288,3413037055,US
+3413032960,3413037055,AU
3413037056,3413041151,CN
3413041152,3413043199,JP
3413043200,3413043967,CN
3413043968,3413044223,AU
-3413044224,3413044735,HK
-3413044736,3413044991,IN
-3413044992,3413045247,HK
+3413044224,3413045247,HK
3413045248,3413047295,IN
3413047296,3413098495,AU
3413098496,3413102591,JP
@@ -146814,14 +78751,9 @@
3413106688,3413110783,PH
3413110784,3413112831,JP
3413112832,3413113855,IN
-3413113856,3413133311,JP
+3413114880,3413133311,JP
3413133312,3413135359,BD
-3413135360,3413135615,AP
-3413135616,3413135871,HK
-3413135872,3413136127,AP
-3413136128,3413136383,HK
-3413136384,3413136639,AP
-3413136640,3413139455,HK
+3413135360,3413139455,HK
3413139456,3413147647,AU
3413147648,3413155839,IN
3413155840,3413164031,SG
@@ -146830,9 +78762,7 @@
3413180416,3413213183,TH
3413213184,3413229567,VN
3413229568,3413245951,AU
-3413245952,3413246335,SG
-3413246336,3413246463,MY
-3413246464,3413262335,SG
+3413245952,3413262335,SG
3413262336,3413270527,PH
3413270528,3413278719,TH
3413278720,3413295103,NZ
@@ -146849,11 +78779,11 @@
3413327872,3413344255,IN
3413344256,3413360639,PH
3413360640,3413377023,MY
-3413377024,3413387519,SG
-3413387520,3413387775,AP
-3413387776,3413437951,SG
-3413437952,3413438207,AP
-3413438208,3413524479,SG
+3413377024,3413395199,SG
+3413395200,3413395455,AU
+3413395456,3413415935,SG
+3413415936,3413416191,AU
+3413416192,3413524479,SG
3413524480,3413540863,TH
3413540864,3413557247,NZ
3413557248,3413565439,CN
@@ -146915,7 +78845,6 @@
3413835776,3413843967,SG
3413843968,3413848063,IN
3413848064,3413850111,SG
-3413850112,3413850879,JP
3413850880,3413851135,AU
3413851136,3413852159,ID
3413852160,3413868543,AU
@@ -146932,11 +78861,9 @@
3413934080,3413946367,IN
3413946368,3413950463,AU
3413950464,3413966847,IN
-3413966848,3414040063,SG
-3414040064,3414040319,AP
-3414040320,3414067199,SG
-3414067200,3414067455,AP
-3414067456,3414163455,SG
+3413966848,3414155519,SG
+3414155520,3414155775,PH
+3414155776,3414163455,SG
3414163456,3414171647,PK
3414171648,3414179839,CN
3414179840,3414188031,ID
@@ -147001,8 +78928,8 @@
3414670848,3414671359,MY
3414671360,3415080959,JP
3415080960,3415083007,SG
-3415083008,3415083519,AU
-3415083520,3415084031,SG
+3415083008,3415083023,AU
+3415083024,3415084031,SG
3415084032,3415084159,CN
3415084160,3415089151,SG
3415089152,3415097343,MY
@@ -147060,9 +78987,7 @@
3415568384,3415572479,KR
3415572480,3415605247,SG
3415605248,3415736319,TH
-3415736320,3415740927,SG
-3415740928,3415741183,TH
-3415741184,3415752703,SG
+3415736320,3415752703,SG
3415752704,3415760895,CN
3415760896,3415769087,NZ
3415769088,3415777279,CN
@@ -147072,14 +78997,12 @@
3415801856,3415802879,CN
3415802880,3415803391,HK
3415803392,3415805951,PH
-3415805952,3415807999,MY
3415808000,3415810047,ID
3415810048,3415814399,IN
3415814400,3415814655,ID
3415814656,3415815167,TH
3415815168,3415816191,IN
3415816192,3415817215,JP
-3415817216,3415817727,ID
3415818240,3415822335,JP
3415822336,3415826431,MY
3415826432,3415834623,ID
@@ -147087,7 +79010,6 @@
3415838720,3415842815,KR
3415842816,3415851007,TH
3415851008,3415855103,AU
-3415855104,3415855615,HK
3415855616,3415856127,IN
3415856128,3415858175,ID
3415858176,3415859199,LK
@@ -147134,7 +79056,7 @@
3416371712,3416371967,VN
3416371968,3416372223,IN
3416372224,3416372479,CN
-3416372480,3416372735,AP
+3416372480,3416372735,SG
3416372736,3416372991,AU
3416373248,3416373503,AU
3416373504,3416373759,SG
@@ -147147,8 +79069,10 @@
3416391680,3416457215,VN
3416457216,3416475391,JP
3416475392,3416475647,NZ
-3416475648,3416489471,JP
-3416489472,3416489983,AU
+3416475648,3416482047,JP
+3416482048,3416482303,SG
+3416482304,3416489727,JP
+3416489728,3416489983,AU
3416489984,3416506367,VN
3416506368,3416514559,TW
3416514560,3416522751,IN
@@ -147162,9 +79086,7 @@
3416709120,3416709375,AU
3416709376,3416709631,ID
3416709632,3416710143,AU
-3416710144,3416710655,HK
-3416710656,3416710911,JP
-3416710912,3416711167,HK
+3416710144,3416711167,HK
3416711168,3416719359,AU
3416719360,3416727551,PH
3416727552,3416735743,JP
@@ -147218,8 +79140,7 @@
3417014272,3417022463,JP
3417022464,3417030655,KR
3417030656,3417034751,AU
-3417034752,3417035007,NZ
-3417035008,3417035775,IN
+3417034752,3417035775,IN
3417035776,3417036799,JP
3417036800,3417037823,ID
3417037824,3417038079,AU
@@ -147242,13 +79163,16 @@
3417179904,3417180159,CN
3417180160,3417182207,ID
3417182208,3417184767,AU
-3417184768,3417185023,NZ
+3417184768,3417185023,MN
3417185024,3417185279,AF
-3417185280,3417185791,SG
+3417185280,3417185535,AU
+3417185536,3417185791,SG
3417185792,3417186303,NZ
3417186304,3417194495,HK
3417194496,3417198591,JP
-3417198592,3417200639,SG
+3417198592,3417200127,SG
+3417200128,3417200383,AU
+3417200384,3417200639,SG
3417200640,3417202687,JP
3417202688,3417210879,CN
3417210880,3417227263,AU
@@ -147276,10 +79200,11 @@
3417338368,3417338879,HK
3417338880,3417339903,PH
3417339904,3417340415,AU
-3417340416,3417341951,NZ
+3417340416,3417340927,NZ
3417341952,3417346047,KH
3417346048,3417348095,MY
-3417348096,3417348607,AU
+3417348096,3417348351,AU
+3417348352,3417348607,IN
3417348608,3417349119,NZ
3417349120,3417349631,IN
3417349632,3417350143,AU
@@ -147292,11 +79217,7 @@
3417357824,3417358335,PK
3417358336,3417374719,HK
3417374720,3417440255,PH
-3417440256,3417664511,JP
-3417664512,3417665279,US
-3417665280,3417706095,JP
-3417706096,3417706099,HK
-3417706100,3417833471,JP
+3417440256,3417833471,JP
3417833472,3417849855,NZ
3417849856,3417853951,AU
3417853952,3417858047,CN
@@ -147304,7 +79225,9 @@
3417866240,3417915391,HK
3417915392,3417939967,TH
3417939968,3417946111,PF
-3417946112,3417947135,AU
+3417946112,3417946137,AU
+3417946138,3417946138,HK
+3417946139,3417947135,AU
3417947136,3417947391,IN
3417947648,3417947903,AU
3417947904,3417948159,IN
@@ -147342,7 +79265,6 @@
3418184960,3418185727,AU
3418185728,3418189823,JP
3418189824,3418190847,CN
-3418190848,3418191871,TH
3418191872,3418192895,ID
3418192896,3418193919,AU
3418193920,3418202111,KH
@@ -147365,8 +79287,7 @@
3418243072,3418251263,PH
3418251264,3418255359,CN
3418255360,3418257407,ID
-3418257408,3418259199,HK
-3418259200,3418259455,MY
+3418257408,3418259455,HK
3418259456,3418267647,IN
3418267648,3418271743,VN
3418271744,3418273791,SG
@@ -147387,17 +79308,16 @@
3418291200,3418291711,AU
3418291712,3418292223,BD
3418292224,3418292735,CN
-3418292736,3418292991,AU
3418292992,3418293503,HK
3418293760,3418294015,AU
3418294272,3418296319,VN
-3418296320,3418300415,CN
+3418296320,3418300415,HK
3418300416,3418300927,BD
3418300928,3418301439,IN
3418301440,3418302463,AU
3418302464,3418304511,ID
3418304512,3418306559,VN
-3418306560,3418308607,MN
+3418306560,3418307583,MN
3418308608,3418324991,CN
3418324992,3418326015,VU
3418326016,3418326271,AU
@@ -147410,24 +79330,24 @@
3418365952,3418374143,TH
3418374144,3418382335,AU
3418382336,3418390527,JP
-3418390528,3418394623,AU
-3418394624,3418397183,AP
+3418390528,3418392831,AU
+3418392832,3418393919,JP
+3418393920,3418393927,AU
+3418393928,3418397183,JP
3418397184,3418397439,MY
-3418397440,3418399231,AP
+3418397440,3418399231,JP
3418399232,3418399247,PH
-3418399248,3418400255,AP
-3418400256,3418400767,AU
-3418400768,3418402815,AP
-3418402816,3418404863,AU
-3418404864,3418405439,AP
-3418405440,3418405471,AU
-3418405472,3418406911,AP
+3418399248,3418400255,JP
+3418400256,3418400511,AU
+3418400512,3418401455,JP
+3418401456,3418401459,TW
+3418401460,3418403583,JP
+3418403584,3418403839,AU
+3418403840,3418406911,JP
3418406912,3418423295,IN
3418423296,3418444091,HK
3418444092,3418444095,CN
-3418444096,3418448639,HK
-3418448640,3418448895,SG
-3418448896,3418456063,HK
+3418444096,3418456063,HK
3418456064,3418472447,IN
3418472448,3418480639,AU
3418480640,3418488831,CN
@@ -147452,21 +79372,7 @@
3418642944,3418643199,ID
3418643200,3418643455,JP
3418643456,3418644479,AU
-3418644480,3418644735,JP
-3418644736,3418644991,AU
-3418644992,3418645247,TW
-3418645248,3418645503,SG
-3418645504,3418645759,JP
-3418645760,3418646271,NZ
-3418646272,3418646527,HK
-3418646528,3418646783,JP
-3418646784,3418647039,TW
-3418647040,3418648063,JP
-3418648064,3418648575,SG
-3418648576,3418648591,AU
-3418648592,3418649343,JP
-3418649344,3418649599,AP
-3418649600,3418652671,JP
+3418644480,3418652671,JP
3418652672,3418750975,IN
3418750976,3418816511,HK
3418816512,3418947583,IN
@@ -147495,8 +79401,7 @@
3419078656,3419209727,TW
3419209728,3419226111,VN
3419226112,3419234303,CN
-3419234304,3419238399,JP
-3419238400,3419242495,US
+3419234304,3419242495,JP
3419242496,3419275263,CN
3419275264,3419340799,AU
3419340800,3419344895,TW
@@ -147514,15 +79419,11 @@
3419412480,3419414527,PH
3419414528,3419422719,CN
3419422720,3419439103,AU
-3419439104,3419456767,SG
-3419456768,3419457023,US
-3419457024,3419459407,SG
+3419439104,3419459407,SG
3419459408,3419459423,GB
3419459424,3419459551,SG
3419459552,3419459583,HK
-3419459584,3419470591,SG
-3419470592,3419470847,AP
-3419470848,3419471871,SG
+3419459584,3419471871,SG
3419471872,3419504639,TH
3419504640,3419508735,HK
3419508736,3419512831,JP
@@ -147536,8 +79437,7 @@
3419529216,3419537407,CN
3419537408,3419541503,HK
3419541504,3419553791,KR
-3419553792,3419557631,AU
-3419557632,3419557887,AP
+3419553792,3419557887,AU
3419557888,3419558399,ID
3419558400,3419558655,AU
3419558656,3419559935,ID
@@ -147555,7 +79455,6 @@
3419668480,3419672575,CN
3419672576,3419674623,AU
3419674624,3419675647,IN
-3419675648,3419676671,MN
3419676672,3419684863,JP
3419684864,3419688959,IN
3419688960,3419693055,CN
@@ -147566,9 +79465,7 @@
3419734016,3419774975,AU
3419774976,3419783167,JP
3419783168,3419791359,PH
-3419791360,3419844607,AU
-3419844608,3419844863,MY
-3419844864,3419873279,AU
+3419791360,3419873279,AU
3419873280,3419877375,AF
3419877376,3419877631,ID
3419877632,3419877887,KH
@@ -147622,13 +79519,11 @@
3420061696,3420127231,HK
3420127232,3420323839,AU
3420323840,3420332031,TW
-3420332032,3420336127,AU
-3420336128,3420336383,SG
-3420336384,3420367359,AU
-3420367360,3420367615,AP
-3420367616,3420369007,AU
+3420332032,3420369007,AU
3420369008,3420369023,HK
-3420369024,3420372991,AU
+3420369024,3420370559,AU
+3420370560,3420370575,JP
+3420370576,3420372991,AU
3420372992,3420374527,CN
3420374528,3420374783,ID
3420374784,3420375551,CN
@@ -147646,25 +79541,19 @@
3420413952,3420422143,KR
3420422144,3420430335,MY
3420430336,3420434431,PK
-3420434432,3420435455,IN
+3420434432,3420434687,IN
+3420434688,3420434943,KR
+3420434944,3420435199,HK
+3420435200,3420435455,AU
3420435456,3420436479,JP
3420436480,3420437503,AU
3420437504,3420438527,IN
3420438528,3420454911,HK
3420454912,3420463103,LK
-3420463104,3422000533,KR
-3422000534,3422000535,AP
+3420463104,3422000535,KR
3422000536,3422000536,IN
-3422000537,3422000537,AP
-3422000538,3422552063,KR
-3422552064,3422717439,US
-3422717440,3422717695,US
-3422717696,3422847487,US
-3422847488,3422847743,GB
-3422847744,3422847999,FR
-3422848000,3422848511,US
-3422848512,3422848767,GB
-3422848768,3422850559,US
+3422000537,3422552063,KR
+3422552064,3422850559,US
3422850560,3422851071,GB
3422851072,3422955519,US
3422955520,3422956799,FR
@@ -147676,457 +79565,88 @@
3423092848,3423093759,VI
3423093760,3423094783,US
3423094784,3423095807,CA
-3423095808,3423143935,US
+3423095808,3423128575,US
+3423129600,3423143935,US
3423143936,3423145983,CA
-3423145984,3423161031,US
-3423161032,3423161039,CA
-3423161040,3423161613,US
-3423161614,3423161621,CA
-3423161622,3423162159,US
-3423162160,3423162167,MX
-3423162168,3423162367,US
+3423145984,3423149055,US
+3423150080,3423162367,US
3423162368,3423163391,CA
-3423163392,3423182847,US
-3423182848,3423183199,CA
-3423183200,3423183231,BM
-3423183232,3423183263,CA
-3423183264,3423183279,EE
-3423183280,3423183743,CA
-3423183744,3423183871,EE
-3423183872,3423183935,CA
-3423183936,3423183967,EE
-3423183968,3423184175,CA
-3423184176,3423184191,US
-3423184192,3423184207,CA
-3423184208,3423184215,EE
-3423184216,3423184895,CA
+3423163392,3423171583,US
+3423172608,3423182847,US
+3423182848,3423184895,CA
3423184896,3423204095,US
3423204096,3423204351,CA
3423204352,3423221759,US
3423221760,3423222783,CA
-3423222784,3423235543,US
-3423235544,3423235551,TR
-3423235552,3423235559,US
-3423235560,3423235563,TR
-3423235564,3423235711,US
-3423235712,3423235743,CA
-3423235744,3423235807,US
-3423235808,3423235823,IN
-3423235824,3423235975,US
-3423235976,3423235983,IL
-3423235984,3423236095,US
-3423236096,3423238143,JM
-3423238144,3423258623,US
+3423222784,3423229951,US
+3423232000,3423236095,US
+3423238144,3423248383,US
+3423250432,3423258623,US
3423258624,3423260671,CA
3423260672,3423264831,US
3423264832,3423264863,NG
-3423264864,3423265025,US
-3423265026,3423265026,A2
-3423265027,3423265247,US
-3423265248,3423265263,EC
-3423265264,3423268863,US
+3423264864,3423268863,US
3423268864,3423269887,CA
-3423269888,3423285247,US
-3423285248,3423285535,CA
-3423285536,3423285543,JP
-3423285544,3423285583,CA
-3423285584,3423285591,US
-3423285592,3423285647,CA
-3423285648,3423285655,US
-3423285656,3423285671,CA
-3423285672,3423285679,JP
-3423285680,3423285703,CA
-3423285704,3423285711,TL
-3423285712,3423285791,CA
-3423285792,3423285807,CR
-3423285808,3423285887,CA
-3423285888,3423285903,US
-3423285904,3423286175,CA
-3423286176,3423286207,US
-3423286208,3423287295,CA
+3423269888,3423272959,US
+3423273984,3423285247,US
+3423285248,3423287295,CA
3423287296,3423288319,VG
-3423288320,3423303679,US
+3423288320,3423301631,US
+3423302656,3423303679,US
3423303680,3423304703,CA
3423304704,3423311871,US
3423311872,3423313151,VI
3423313152,3423313407,US
3423313408,3423313919,VI
-3423313920,3423329567,US
-3423329568,3423329599,IL
-3423329600,3423338527,US
-3423338528,3423338535,AE
-3423338536,3423338927,US
-3423338928,3423338943,DE
-3423338944,3423339375,US
-3423339376,3423339383,DE
-3423339384,3423340399,US
-3423340400,3423340407,AU
-3423340408,3423341015,US
-3423341016,3423341023,CA
-3423341024,3423341511,US
-3423341512,3423341519,PE
-3423341520,3423341543,US
-3423341544,3423341551,GB
-3423341552,3423341567,US
-3423341568,3423341599,GB
-3423341600,3423342279,US
-3423342280,3423342287,IL
-3423342288,3423342631,US
-3423342632,3423342639,IN
-3423342640,3423342759,US
-3423342760,3423342775,GB
-3423342776,3423342967,US
-3423342968,3423342975,AU
-3423342976,3423343039,US
-3423343040,3423343055,IN
-3423343056,3423343135,US
-3423343136,3423343151,PK
-3423343152,3423343167,RO
-3423343168,3423343327,US
-3423343328,3423343343,AU
-3423343344,3423344007,US
-3423344008,3423344023,CA
-3423344024,3423344767,US
-3423344768,3423344791,PK
-3423344792,3423344807,CA
-3423344808,3423344991,US
-3423344992,3423344999,IE
-3423345000,3423345087,US
-3423345088,3423345095,CA
-3423345096,3423345111,US
-3423345112,3423345119,IE
-3423345120,3423345399,US
-3423345400,3423345407,IE
-3423345408,3423345431,US
-3423345432,3423345439,GT
-3423345440,3423345503,US
-3423345504,3423345535,AU
-3423345536,3423345551,CA
-3423345552,3423345583,US
-3423345584,3423345591,JO
-3423345592,3423345623,US
-3423345624,3423345631,GB
-3423345632,3423345695,US
-3423345696,3423345719,CA
-3423345720,3423346127,US
-3423346128,3423346143,CA
-3423346144,3423346319,US
-3423346320,3423346327,DK
-3423346328,3423346431,US
-3423346432,3423346447,GB
-3423346448,3423346487,US
-3423346488,3423346495,AE
-3423346496,3423346503,SA
-3423346504,3423346831,US
-3423346832,3423346847,IM
-3423346848,3423346943,US
-3423346944,3423346951,CA
-3423346952,3423346983,US
-3423346984,3423346991,AE
-3423346992,3423346999,AU
-3423347000,3423347207,US
-3423347208,3423347231,CA
-3423347232,3423347447,US
-3423347448,3423347455,CA
-3423347456,3423347503,US
-3423347504,3423347519,DE
-3423347520,3423347639,US
-3423347640,3423347663,GB
-3423347664,3423347783,US
-3423347784,3423347791,SA
-3423347792,3423347823,US
-3423347824,3423347831,FR
-3423347832,3423347879,US
-3423347880,3423347903,CA
-3423347904,3423347919,US
-3423347920,3423347927,AU
-3423347928,3423347951,US
-3423347952,3423347959,TH
-3423347960,3423348007,US
-3423348008,3423348023,GB
-3423348024,3423348071,US
-3423348072,3423348095,AU
-3423348096,3423349119,US
-3423349120,3423349135,IT
-3423349136,3423349247,US
-3423349248,3423349263,AU
-3423349264,3423349295,US
-3423349296,3423349303,AU
-3423349304,3423349327,US
-3423349328,3423349335,DE
-3423349336,3423349359,US
-3423349360,3423349383,DE
-3423349384,3423349679,US
-3423349680,3423349687,IL
-3423349688,3423350663,US
-3423350664,3423350671,AU
-3423350672,3423350719,US
-3423350720,3423350727,CA
-3423350728,3423350735,US
-3423350736,3423350743,SA
-3423350744,3423351551,US
-3423351552,3423351615,PR
-3423351616,3423351831,US
-3423351832,3423351839,AU
-3423351840,3423352023,US
-3423352024,3423352047,CA
-3423352048,3423352063,GB
-3423352064,3423352071,US
-3423352072,3423352079,CA
-3423352080,3423352255,US
-3423352256,3423352271,CA
-3423352272,3423352439,US
-3423352440,3423352447,IL
-3423352448,3423352495,US
-3423352496,3423352503,CA
-3423352504,3423352511,IL
-3423352512,3423352679,US
-3423352680,3423352687,NL
-3423352688,3423352695,US
-3423352696,3423352703,MX
-3423352704,3423352711,BR
-3423352712,3423353031,US
-3423353032,3423353039,AU
-3423353040,3423353143,US
-3423353144,3423353151,KH
-3423353152,3423353295,US
-3423353296,3423353303,BR
-3423353304,3423353351,US
-3423353352,3423353367,PA
-3423353368,3423353471,US
-3423353472,3423353479,KH
-3423353480,3423353503,US
-3423353504,3423353511,GB
-3423353512,3423353543,US
-3423353544,3423353551,IN
-3423353552,3423353791,US
-3423353792,3423353807,GB
-3423353808,3423353855,US
-3423353856,3423353871,CA
-3423353872,3423353919,US
-3423353920,3423353927,BB
-3423353928,3423354031,US
-3423354032,3423354039,IL
-3423354040,3423354047,PT
-3423354048,3423354063,PK
-3423354064,3423354095,US
-3423354096,3423354103,CA
-3423354104,3423354143,US
-3423354144,3423354207,CA
-3423354208,3423354335,US
-3423354336,3423354359,PE
-3423354360,3423354583,US
-3423354584,3423354591,AU
-3423354592,3423354623,GB
-3423354624,3423354655,US
-3423354656,3423354663,AE
-3423354664,3423354719,US
-3423354720,3423354727,BR
-3423354728,3423354783,US
-3423354784,3423354791,PA
-3423354792,3423356087,US
-3423356088,3423356119,BR
-3423356120,3423356287,US
-3423356288,3423356319,CA
-3423356320,3423356383,US
-3423356384,3423356399,IN
-3423356400,3423357111,US
-3423357112,3423357127,AE
-3423357128,3423361023,US
-3423361024,3423361279,AU
-3423361280,3423363463,US
-3423363464,3423363471,AU
-3423363472,3423363487,CA
-3423363488,3423363511,US
-3423363512,3423363519,MX
-3423363520,3423363567,US
-3423363568,3423363583,ZA
-3423363584,3423363615,US
-3423363616,3423363631,AU
-3423363632,3423365775,US
-3423365776,3423365783,CA
-3423365784,3423365903,US
-3423365904,3423365911,AE
-3423365912,3423366127,US
-3423366128,3423366135,SA
-3423366136,3423366223,US
-3423366224,3423366239,AU
-3423366240,3423366295,US
-3423366296,3423366303,CA
-3423366304,3423366351,US
-3423366352,3423366367,AU
-3423366368,3423366479,US
+3423313920,3423366479,US
3423366480,3423366495,IT
-3423366496,3423366703,US
-3423366704,3423366711,GB
-3423366712,3423366855,US
-3423366856,3423366871,BR
-3423366872,3423366991,US
-3423366992,3423366999,CA
-3423367000,3423367223,US
-3423367224,3423367231,AU
-3423367232,3423367279,US
-3423367280,3423367303,BR
-3423367304,3423367311,AU
-3423367312,3423367343,US
-3423367344,3423367359,NL
-3423367360,3423367367,US
-3423367368,3423367375,GB
-3423367376,3423367807,US
-3423367808,3423367823,IT
-3423367824,3423367831,US
-3423367832,3423367847,MX
-3423367848,3423367903,US
-3423367904,3423367919,IL
-3423367920,3423367983,US
-3423367984,3423368007,CA
-3423368008,3423368103,US
-3423368104,3423368111,CA
-3423368112,3423368143,US
-3423368144,3423368167,IL
-3423368168,3423368255,US
-3423368256,3423368287,CA
-3423368288,3423368319,US
-3423368320,3423368327,CA
-3423368328,3423369071,US
-3423369072,3423369159,CA
-3423369160,3423369327,US
-3423369328,3423369343,BR
-3423369344,3423369591,US
-3423369592,3423369599,BR
-3423369600,3423369719,US
-3423369720,3423369727,AU
-3423369728,3423369991,US
-3423369992,3423369999,CA
-3423370000,3423370015,US
-3423370016,3423370031,CA
-3423370032,3423370303,US
-3423370304,3423370319,IL
-3423370320,3423370551,US
-3423370552,3423370559,IE
-3423370560,3423370719,US
-3423370720,3423370727,VG
-3423370728,3423370775,US
-3423370776,3423370783,LB
-3423370784,3423370855,US
-3423370856,3423370863,BR
-3423370864,3423370871,US
-3423370872,3423370879,VG
-3423370880,3423371263,US
+3423366496,3423371263,US
3423371264,3423375359,ZA
-3423375360,3423377151,CA
-3423377152,3423377407,US
-3423377408,3423378175,CA
-3423378176,3423378303,US
-3423378304,3423378431,CA
-3423378432,3423378943,US
-3423378944,3423379455,CA
-3423379456,3423389047,US
-3423389048,3423389055,MX
-3423389056,3423393903,US
-3423393904,3423393911,RU
-3423393912,3423396487,US
-3423396488,3423396495,RU
-3423396496,3423398839,US
-3423398840,3423398847,RU
-3423398848,3423400863,US
-3423400864,3423400871,RU
-3423400872,3423401151,US
-3423401152,3423401159,RU
-3423401160,3423401191,US
-3423401192,3423401199,RU
-3423401200,3423402943,US
-3423402944,3423402951,RU
-3423402952,3423416319,US
+3423375360,3423379455,CA
+3423379456,3423416319,US
3423416320,3423417343,CA
3423417344,3423430655,US
3423430656,3423431167,TC
-3423431168,3423462655,US
-3423462656,3423462671,CA
-3423462672,3423469567,US
+3423431168,3423458303,US
+3423459328,3423468543,US
3423471616,3423473663,US
-3423473664,3423474655,CA
-3423474656,3423474671,CY
-3423474672,3423474687,CA
-3423474688,3423479807,US
-3423479808,3423480831,A2
+3423473664,3423474687,CA
+3423474688,3423480063,US
+3423480064,3423480319,AU
+3423480320,3423480831,US
3423480832,3423480987,NG
3423480988,3423480988,US
3423480989,3423481343,NG
-3423481344,3423481855,A2
-3423481856,3423493631,US
+3423481344,3423489023,US
+3423489024,3423490047,CA
+3423491072,3423493631,US
3423493632,3423493887,RU
-3423493888,3423493903,ID
-3423493904,3423493911,US
-3423493912,3423493919,TT
-3423493920,3423493967,US
-3423493968,3423493975,AT
-3423493976,3423533055,US
+3423493888,3423533055,US
3423533056,3423535103,AI
3423535104,3423543295,US
3423543296,3423545343,CA
-3423545344,3423554183,US
-3423554184,3423554191,CA
-3423554192,3423554271,US
-3423554272,3423554279,GB
-3423554280,3423554759,US
-3423554760,3423554767,CA
-3423554768,3423571967,US
+3423545344,3423571967,US
3423571968,3423574015,PR
3423574016,3423579135,US
3423579136,3423580159,CA
3423580160,3423582207,US
-3423582208,3423584271,CA
-3423584272,3423584279,US
-3423584280,3423584303,CA
-3423584304,3423584311,AU
-3423584312,3423584327,CA
-3423584328,3423584351,US
-3423584352,3423584359,AU
-3423584360,3423584367,CA
-3423584368,3423584375,US
-3423584376,3423584407,CA
-3423584408,3423584415,US
-3423584416,3423584423,CA
-3423584424,3423584431,US
-3423584432,3423584447,CA
-3423584448,3423584455,US
-3423584456,3423584527,CA
-3423584528,3423584543,US
-3423584544,3423584719,CA
-3423584720,3423584735,US
-3423584736,3423586303,CA
-3423586304,3423589151,US
-3423589152,3423589159,GB
-3423589160,3423590871,US
-3423590872,3423590879,HT
-3423590880,3423591143,US
-3423591144,3423591151,HN
-3423591152,3423592599,US
-3423592600,3423592607,ES
-3423592608,3423592687,US
-3423592688,3423592703,CA
-3423592704,3423592739,US
-3423592740,3423592755,CA
-3423592756,3423592895,US
-3423592896,3423592911,IL
-3423592912,3423602687,US
+3423582208,3423586303,CA
+3423586304,3423588351,US
+3423590400,3423602687,US
3423602688,3423603711,KN
-3423603712,3423604967,US
-3423604968,3423604975,BZ
-3423604976,3423626239,US
+3423603712,3423626239,US
3423626240,3423627263,CA
3423627264,3423629311,US
3423629312,3423630335,AG
-3423630336,3423632383,US
-3423632384,3423633407,A2
-3423633408,3423637503,US
+3423630336,3423637503,US
3423637504,3423639551,CA
3423639552,3423651839,US
3423651840,3423653887,CA
3423653888,3423705599,US
3423705600,3423705855,CA
-3423705856,3423797503,US
+3423705856,3423725423,US
+3423725424,3423725427,CA
+3423725428,3423797503,US
3423797504,3423801087,CA
3423801088,3423801343,US
3423801344,3423823359,CA
@@ -148157,60 +79677,26 @@
3424378880,3424379135,PR
3424379136,3424412415,US
3424412416,3424412671,CA
-3424412672,3424493823,US
+3424412672,3424413695,US
+3424415744,3424493823,US
3424493824,3424494079,CA
3424494080,3424507135,US
3424507136,3424507391,CA
3424507392,3425173503,US
3425173504,3425304575,CA
-3425304576,3425484543,US
-3425484544,3425484799,GU
-3425484800,3425529504,US
-3425529505,3425529510,US
-3425529511,3425564159,US
-3425564160,3425564415,US
-3425564416,3425697791,US
+3425304576,3425471487,US
+3425472512,3425697791,US
3425697792,3425699839,CA
-3425699840,3425714175,US
+3425699840,3425711615,US
+3425713152,3425714175,US
3425714176,3425722367,CA
-3425722368,3425828863,US
-3425828864,3425846783,CA
-3425846784,3425847039,EU
-3425847040,3425850519,CA
-3425850520,3425850527,US
-3425850528,3425864583,CA
-3425864584,3425864591,US
-3425864592,3425864711,CA
-3425864712,3425864719,US
-3425864720,3425865327,CA
-3425865328,3425865335,US
-3425865336,3425894399,CA
-3425894400,3425911967,US
-3425911968,3425911983,IL
-3425911984,3425911999,US
-3425912000,3425912031,CA
-3425912032,3425912575,US
-3425912576,3425912591,IL
-3425912592,3425912815,US
-3425912816,3425912831,DO
-3425912832,3425912847,US
-3425912848,3425912863,BB
-3425912864,3425914127,US
-3425914128,3425914143,IL
-3425914144,3425914159,US
-3425914160,3425914239,A2
-3425914240,3425916479,US
-3425916480,3425916543,DK
-3425916544,3426007807,US
-3426007808,3426008063,EU
-3426008064,3426013183,US
+3425722368,3425726463,US
+3425728512,3425828863,US
+3425828864,3425894399,CA
+3425894400,3426013183,US
3426013184,3426013439,IL
3426013440,3426306559,US
-3426306560,3426306567,IN
-3426306568,3426306591,US
-3426306592,3426306623,IN
-3426306624,3426306687,US
-3426306688,3426306815,IN
+3426306560,3426306815,IN
3426306816,3426369023,US
3426369024,3426369535,CA
3426369536,3426387967,US
@@ -148219,23 +79705,25 @@
3426400256,3426400511,CA
3426400512,3426415871,US
3426415872,3426416127,GB
-3426416128,3426617855,US
+3426416128,3426418687,US
+3426418688,3426435071,GB
+3426435072,3426439167,SG
+3426439168,3426441215,AU
+3426441216,3426441727,HK
+3426441728,3426445823,US
+3426445824,3426446335,DE
+3426446336,3426482687,US
+3426482688,3426484223,CA
+3426484224,3426617855,US
3426617856,3426618367,CA
-3426618368,3426618911,US
-3426618912,3426619071,NZ
-3426619072,3426619103,US
-3426619104,3426619135,NZ
-3426619136,3426619167,US
-3426619168,3426619247,NZ
-3426619248,3426619263,US
-3426619264,3426619295,NZ
-3426619296,3426619335,US
-3426619336,3426619359,NZ
-3426619360,3426679039,US
+3426618368,3426628607,US
+3426629632,3426679039,US
3426679040,3426679295,ES
-3426679296,3426729471,US
+3426679296,3426717695,US
+3426719744,3426729471,US
3426729472,3426729983,CA
-3426729984,3426744319,US
+3426729984,3426735615,US
+3426736128,3426744319,US
3426744320,3426746367,CA
3426746368,3427112447,US
3427112448,3427112703,CN
@@ -148243,9 +79731,7 @@
3427117056,3427117311,CA
3427117312,3427127295,US
3427127296,3427127551,CA
-3427127552,3427132927,US
-3427132928,3427133183,EU
-3427133184,3427426303,US
+3427127552,3427426303,US
3427426304,3427426559,HK
3427426560,3427428863,US
3427428864,3427429119,GB
@@ -148253,7 +79739,8 @@
3427487744,3427487999,GB
3427488000,3427618303,US
3427618304,3427618559,CA
-3427618560,3427647999,US
+3427618560,3427631103,US
+3427632128,3427647999,US
3427648000,3427648511,CA
3427648512,3427651071,US
3427651072,3427651327,CA
@@ -148274,8 +79761,8 @@
3427741952,3427742207,DE
3427742208,3427742463,US
3427742464,3427742719,AT
-3427742720,3427742975,CH
-3427742976,3427743487,GB
+3427742720,3427743231,CH
+3427743232,3427743487,GB
3427743488,3427743743,DE
3427743744,3427743999,CA
3427744000,3427744255,SE
@@ -148296,10 +79783,7 @@
3427749632,3427749887,NL
3427749888,3427750655,DE
3427750656,3427750911,GB
-3427750912,3427751423,US
-3427751424,3427751519,BE
-3427751520,3427752447,US
-3427752448,3427752703,EU
+3427750912,3427752703,US
3427752704,3427752959,GB
3427752960,3427753215,US
3427753216,3427753471,JP
@@ -148384,7 +79868,7 @@
3427782656,3427783423,FR
3427783424,3427783679,GB
3427783680,3427783935,US
-3427783936,3427784703,GB
+3427783936,3427784703,FR
3427784704,3427785215,US
3427785216,3427785471,JP
3427785472,3427785727,NO
@@ -148413,17 +79897,20 @@
3427860480,3428025343,CA
3428025344,3428025855,US
3428025856,3428057087,CA
-3428057088,3428286719,US
+3428057088,3428217855,US
+3428218880,3428286719,US
3428286720,3428286975,CA
3428286976,3428296959,US
3428296960,3428297215,CL
3428297216,3428299519,US
-3428299520,3428299775,ZA
+3428299520,3428299775,MU
3428299776,3428302079,US
3428302080,3428302335,CA
-3428302336,3428318975,US
+3428302336,3428306175,US
+3428306432,3428318975,US
3428318976,3428319231,CA
-3428319232,3428399359,US
+3428319232,3428388863,US
+3428391936,3428399359,US
3428399360,3428399615,CA
3428399616,3428433919,US
3428433920,3428434175,CA
@@ -148431,171 +79918,55 @@
3428434944,3428435199,CA
3428435200,3428437503,US
3428437504,3428437759,MX
-3428437760,3428496639,US
-3428496640,3428497151,NL
-3428497152,3428581375,US
-3428581376,3428581567,CA
-3428581568,3428581695,US
-3428581696,3428581759,CA
-3428581760,3428581823,US
-3428581824,3428581887,CA
-3428581888,3428581951,US
-3428581952,3428582231,CA
-3428582232,3428582239,US
-3428582240,3428582279,CA
-3428582280,3428582287,DK
-3428582288,3428582303,CA
-3428582304,3428582311,US
-3428582312,3428582319,CA
-3428582320,3428582327,US
-3428582328,3428582399,CA
-3428582400,3428582655,US
+3428437760,3428582655,US
3428582656,3428582911,CA
-3428582912,3428583167,US
-3428583168,3428583455,CA
-3428583456,3428583487,US
-3428583488,3428583551,CA
-3428583552,3428583583,US
-3428583584,3428583743,CA
-3428583744,3428583871,US
-3428583872,3428583935,CA
-3428583936,3428584127,US
-3428584128,3428584191,CA
-3428584192,3428584511,US
-3428584512,3428584703,CA
-3428584704,3428584767,US
-3428584768,3428584895,CA
-3428584896,3428584959,US
-3428584960,3428585471,CA
-3428585472,3428585599,US
-3428585600,3428585727,CA
-3428585728,3428585983,US
+3428582912,3428585215,US
+3428585216,3428585471,CA
+3428585472,3428585983,US
3428585984,3428586495,CA
-3428586496,3428586751,US
-3428586752,3428586879,CA
-3428586880,3428587007,US
+3428586496,3428587007,US
3428587008,3428587519,CA
3428587520,3428587775,US
3428587776,3428588287,CA
3428588288,3428588543,US
-3428588544,3428589055,CA
-3428589056,3428589311,US
+3428588544,3428588799,CA
+3428588800,3428589311,US
3428589312,3428589567,CA
-3428589568,3428591623,US
-3428591624,3428591663,CA
-3428591664,3428591679,US
-3428591680,3428591695,CA
-3428591696,3428591831,US
-3428591832,3428591847,CA
-3428591848,3428591871,US
-3428591872,3428592135,CA
-3428592136,3428592151,US
-3428592152,3428592191,CA
-3428592192,3428592207,US
-3428592208,3428592247,CA
-3428592248,3428592255,US
-3428592256,3428592271,CA
-3428592272,3428592343,US
-3428592344,3428592359,CA
-3428592360,3428592367,US
-3428592368,3428594303,CA
-3428594304,3428594431,US
-3428594432,3428594495,CA
-3428594496,3428594623,US
-3428594624,3428595199,CA
-3428595200,3428595215,US
-3428595216,3428595247,CA
-3428595248,3428595455,US
-3428595456,3428595743,CA
-3428595744,3428595807,US
-3428595808,3428595871,CA
-3428595872,3428595903,US
-3428595904,3428595967,CA
-3428595968,3428596095,US
-3428596096,3428596783,CA
-3428596784,3428596791,US
-3428596792,3428596799,CA
-3428596800,3428596815,US
-3428596816,3428596823,CA
-3428596824,3428596831,US
-3428596832,3428596839,CA
-3428596840,3428596847,US
-3428596848,3428596887,CA
-3428596888,3428596895,US
-3428596896,3428596991,CA
-3428596992,3428597247,US
-3428597248,3428597511,CA
-3428597512,3428597519,US
-3428597520,3428597551,CA
-3428597552,3428597559,US
-3428597560,3428597575,CA
-3428597576,3428597583,US
-3428597584,3428597623,CA
-3428597624,3428597631,US
-3428597632,3428597655,CA
-3428597656,3428597663,US
-3428597664,3428597727,CA
-3428597728,3428597759,US
-3428597760,3428598271,CA
-3428598272,3428598527,US
-3428598528,3428598687,CA
-3428598688,3428598719,US
-3428598720,3428598751,CA
-3428598752,3428598783,US
-3428598784,3428599103,CA
-3428599104,3428599231,US
-3428599232,3428599295,CA
-3428599296,3428599551,US
-3428599552,3428601599,CA
+3428589568,3428591871,US
+3428591872,3428592127,CA
+3428592128,3428592383,US
+3428592384,3428594175,CA
+3428594176,3428594687,US
+3428594688,3428595199,CA
+3428595200,3428596223,US
+3428596224,3428596735,CA
+3428596736,3428597247,US
+3428597248,3428597503,CA
+3428597504,3428598015,US
+3428598016,3428598271,CA
+3428598272,3428598591,US
+3428598592,3428598623,CA
+3428598624,3428598783,US
+3428598784,3428599039,CA
+3428599040,3428599551,US
+3428599552,3428600575,CA
+3428600576,3428600831,US
+3428600832,3428601599,CA
3428601600,3428602111,US
3428602112,3428602367,CA
-3428602368,3428602623,US
-3428602624,3428602687,CA
-3428602688,3428602719,US
-3428602720,3428602847,CA
-3428602848,3428603135,US
-3428603136,3428603199,CA
-3428603200,3428603263,US
-3428603264,3428603327,CA
-3428603328,3428603391,US
-3428603392,3428603519,CA
-3428603520,3428603903,US
+3428602368,3428603903,US
3428603904,3428605183,CA
-3428605184,3428605695,US
-3428605696,3428605823,CA
-3428605824,3428605855,US
-3428605856,3428606023,CA
-3428606024,3428606031,US
-3428606032,3428606039,CA
-3428606040,3428606111,US
-3428606112,3428606119,CA
-3428606120,3428606207,US
-3428606208,3428606271,CA
-3428606272,3428606367,US
-3428606368,3428606383,CA
-3428606384,3428606415,US
-3428606416,3428606431,CA
-3428606432,3428606463,US
-3428606464,3428606591,CA
-3428606592,3428606655,US
-3428606656,3428606719,CA
-3428606720,3428606911,US
-3428606912,3428606975,IS
-3428606976,3428607743,US
-3428607744,3428607871,CA
-3428607872,3428607999,US
+3428605184,3428607999,US
3428608000,3428609023,CA
3428609024,3428610047,US
3428610048,3428611071,CA
3428611072,3428612607,US
3428612608,3428613887,CA
3428613888,3428614143,US
-3428614144,3428620095,CA
-3428620096,3428620287,US
-3428620288,3428621887,CA
-3428621888,3428622047,US
-3428622048,3428622095,CA
-3428622096,3428622335,US
+3428614144,3428620031,CA
+3428620032,3428620287,US
+3428620288,3428621823,CA
+3428621824,3428622335,US
3428622336,3428623615,CA
3428623616,3428623871,US
3428623872,3428624639,CA
@@ -148606,83 +79977,41 @@
3428634624,3428634879,US
3428634880,3428635135,CA
3428635136,3428635391,US
-3428635392,3428635679,CA
-3428635680,3428635711,US
-3428635712,3428635775,CA
-3428635776,3428635871,US
-3428635872,3428636927,CA
-3428636928,3428636991,US
-3428636992,3428637055,CA
-3428637056,3428637119,US
-3428637120,3428637215,CA
-3428637216,3428637247,US
-3428637248,3428637375,CA
-3428637376,3428637407,US
-3428637408,3428638015,CA
-3428638016,3428638079,US
-3428638080,3428638143,CA
-3428638144,3428638207,US
-3428638208,3428638591,CA
-3428638592,3428638719,US
+3428635392,3428635647,CA
+3428635648,3428635903,US
+3428635904,3428636927,CA
+3428636928,3428637439,US
+3428637440,3428637951,CA
+3428637952,3428638719,US
3428638720,3428639487,CA
3428639488,3428640255,US
3428640256,3428640511,CA
3428640512,3428640767,US
3428640768,3428643327,CA
3428643328,3428643583,US
-3428643584,3428643855,CA
-3428643856,3428643871,US
-3428643872,3428643903,CA
-3428643904,3428643919,US
-3428643920,3428643935,CA
-3428643936,3428643951,US
-3428643952,3428644015,CA
-3428644016,3428644047,US
-3428644048,3428644063,CA
-3428644064,3428644351,US
+3428643584,3428643839,CA
+3428643840,3428644351,US
3428644352,3428645631,CA
-3428645632,3428645695,US
-3428645696,3428645759,CA
-3428645760,3428645791,US
-3428645792,3428645855,CA
-3428645856,3428645887,US
-3428645888,3428645951,CA
-3428645952,3428646015,US
-3428646016,3428646079,CA
-3428646080,3428646143,US
-3428646144,3428646911,CA
+3428645632,3428646143,US
+3428646144,3428646399,CA
+3428646400,3428646655,US
+3428646656,3428646911,CA
3428646912,3428660735,US
3428660736,3428661503,CA
-3428661504,3428671487,US
-3428679680,3428689646,US
-3428689647,3428689647,US
-3428689648,3428701439,US
-3428701440,3428701567,CA
-3428701568,3428743167,US
+3428661504,3428743167,US
3428743168,3428744191,CA
3428744192,3428752383,US
3428752384,3428753407,GH
-3428753408,3428756479,US
-3428756480,3428756487,SE
-3428756488,3428818727,US
-3428818728,3428818735,GB
-3428818736,3428894039,US
-3428894040,3428894047,CA
-3428894048,3428958207,US
+3428753408,3428958207,US
3428958208,3428962303,CO
3428962304,3429171199,US
3429171200,3429236735,CA
-3429236736,3429381887,US
-3429381888,3429382143,EU
+3429236736,3429382143,US
3429382144,3429382399,DE
-3429382400,3429396223,US
-3429396224,3429396479,DE
-3429396480,3429408511,US
-3429408512,3429408767,DE
-3429408768,3429411583,US
-3429411584,3429411839,DE
-3429411840,3429500927,US
-3429500928,3429502975,A2
+3429382400,3429401855,US
+3429401856,3429402111,CA
+3429402112,3429500927,US
+3429500928,3429502975,CA
3429502976,3429517407,US
3429517408,3429517411,HK
3429517412,3429518763,US
@@ -148693,39 +80022,35 @@
3429739176,3429739179,GB
3429739180,3429775359,US
3429775360,3429777407,TC
-3429777408,3429892095,US
+3429777408,3429809151,US
+3429810176,3429892095,US
3429892096,3429957631,CA
-3429957632,3430073343,US
-3430073344,3430073354,AP
+3429957632,3430073354,US
3430073355,3430073355,AU
-3430073356,3430073599,AP
-3430073600,3430074111,US
+3430073356,3430074111,US
3430074112,3430074367,AU
-3430074368,3430291295,US
-3430291296,3430291327,IS
-3430291328,3430313967,US
-3430313968,3430313983,CA
-3430313984,3430319135,US
-3430319136,3430319143,SE
-3430319144,3430328831,US
+3430074368,3430146047,US
+3430148096,3430328831,US
3430328832,3430329087,GH
3430329088,3430354943,US
3430354944,3430356991,PR
3430356992,3430468607,US
3430468608,3430468863,AQ
3430468864,3430701055,US
-3430701056,3430702079,CA
3430702080,3430703871,US
3430703872,3430704127,PR
3430704128,3430705151,US
3430705152,3430706175,MX
-3430706176,3430722303,US
+3430706176,3430714367,US
+3430715392,3430722303,US
3430722304,3430722559,CA
3430722560,3430729244,US
3430729245,3430729245,GB
3430729246,3430729471,US
3430729472,3430729727,GB
-3430729728,3430747903,US
+3430729728,3430732543,US
+3430732544,3430732799,GB
+3430732800,3430747903,US
3430747904,3430748159,CA
3430748160,3430749951,US
3430749952,3430750207,CA
@@ -148755,9 +80080,7 @@
3430780672,3430780927,CA
3430780928,3430782463,US
3430782464,3430782719,CA
-3430782720,3430793983,US
-3430793984,3430794239,PR
-3430794240,3430795007,US
+3430782720,3430795007,US
3430795008,3430795263,CA
3430795264,3430805759,US
3430805760,3430806015,CA
@@ -148773,15 +80096,12 @@
3430845440,3430845951,MX
3430845952,3430849535,US
3430849536,3430850047,CA
-3430850048,3431114495,US
+3430850048,3430973951,US
+3430974208,3431114495,US
3431114496,3431114751,CA
3431114752,3431468031,US
3431468032,3431469055,CA
-3431469056,3431520767,US
-3431520768,3431521023,AP
-3431521024,3431526921,US
-3431526922,3431526922,EU
-3431526923,3431596287,US
+3431469056,3431596287,US
3431596288,3431602687,CA
3431602688,3431602943,US
3431602944,3431606271,CA
@@ -148803,24 +80123,8 @@
3431642624,3431657471,CA
3431657472,3431658495,US
3431658496,3431661311,CA
-3431661312,3431731199,US
-3431731200,3431731207,ES
-3431731208,3431731211,CO
-3431731212,3431731215,US
-3431731216,3431731231,CO
-3431731232,3431731247,US
-3431731248,3431731263,CO
-3431731264,3431732055,US
-3431732056,3431732063,NL
-3431732064,3431732755,US
-3431732756,3431732759,BE
-3431732760,3431732803,US
-3431732804,3431732807,RO
-3431732808,3431732895,US
-3431732896,3431732927,RO
-3431732928,3431734095,US
-3431734096,3431734103,IL
-3431734104,3431745023,US
+3431661312,3431675903,US
+3431677952,3431745023,US
3431745024,3431745279,BE
3431745280,3431745791,US
3431745792,3431746047,GB
@@ -148839,9 +80143,7 @@
3431755008,3431755775,NL
3431755776,3431759615,CA
3431759616,3431759871,DE
-3431759872,3431783431,US
-3431783432,3431783435,NL
-3431783436,3432004607,US
+3431759872,3432004607,US
3432004608,3432005631,CA
3432005632,3432009215,US
3432009216,3432009471,PR
@@ -148870,64 +80172,43 @@
3432476672,3432493823,US
3432493824,3432495103,DE
3432495104,3432517119,US
-3432517120,3432517631,NA
-3432517632,3432520703,US
-3432520704,3432520959,GB
-3432520960,3432571647,US
+3432517120,3432517631,MU
+3432517632,3432571647,US
3432571648,3432571903,CA
-3432571904,3432572799,US
-3432572800,3432572927,DO
-3432572928,3432585215,US
+3432571904,3432579071,US
+3432580096,3432585215,US
3432585216,3432585727,MX
-3432585728,3432613631,US
+3432585728,3432609791,US
+3432610560,3432611839,US
+3432612864,3432613631,US
3432613632,3432613887,CA
3432613888,3432634111,US
3432634112,3432634367,CA
3432634368,3432660991,US
-3432660992,3432662527,DE
-3432662528,3432662531,PT
-3432662532,3432663039,DE
-3432663040,3432689151,US
+3432660992,3432663039,DE
+3432663040,3432676351,US
+3432677376,3432689151,US
3432689152,3432689663,CA
-3432689664,3432807423,US
+3432689664,3432695807,US
+3432697856,3432708095,US
+3432710144,3432807423,US
3432807424,3432808447,CA
-3432808448,3433090582,US
-3433090583,3433090583,CA
-3433090584,3433581312,US
-3433581313,3433581567,CA
-3433581568,3433824511,US
+3432808448,3433824511,US
3433824512,3433824767,DE
3433824768,3433955583,US
3433955584,3433964799,CA
3433964800,3433965055,US
3433965056,3433967359,CA
3433967360,3433967615,US
-3433967616,3433981951,CA
+3433967616,3433980927,CA
+3433981184,3433981951,CA
3433981952,3433983999,US
3433984000,3434012671,CA
3434012672,3434012927,US
3434012928,3434014719,CA
3434014720,3434015231,US
3434015232,3434020607,CA
-3434020608,3434096063,US
-3434096064,3434096079,AU
-3434096080,3434097919,US
-3434097920,3434097983,GB
-3434097984,3434108639,US
-3434108640,3434108671,IL
-3434108672,3434112239,US
-3434112240,3434112255,IN
-3434112256,3434117631,US
-3434117632,3434117695,CA
-3434117696,3434133551,US
-3434133552,3434133567,IL
-3434133568,3434133759,US
-3434133760,3434133791,IL
-3434133792,3434134015,US
-3434134016,3434134079,CA
-3434134080,3434423295,US
-3434423296,3434423303,CA
-3434423304,3434427391,US
+3434020608,3434427391,US
3434427392,3434428415,HR
3434428416,3434433279,US
3434433280,3434433535,PR
@@ -148940,36 +80221,10 @@
3434575616,3434583039,US
3434583040,3434584063,NL
3434584064,3434807551,US
-3434807552,3434810111,CA
-3434810112,3434810367,US
-3434810368,3434810670,CA
-3434810671,3434810673,US
-3434810674,3434810879,CA
-3434810880,3434810895,GB
-3434810896,3434810911,US
-3434810912,3434810943,CA
-3434810944,3434810959,US
-3434810960,3434810975,AE
-3434810976,3434811007,CA
-3434811008,3434811023,US
-3434811024,3434811039,ZA
-3434811040,3434811071,US
-3434811072,3434811135,CA
-3434811136,3434811151,US
-3434811152,3434811167,CA
-3434811168,3434811199,US
-3434811200,3434811215,AU
-3434811216,3434811311,US
-3434811312,3434811327,GB
-3434811328,3434811359,US
-3434811360,3434811375,CA
-3434811376,3434811383,US
-3434811384,3434831359,CA
+3434807552,3434831359,CA
3434831360,3434831615,US
3434831616,3434872575,CA
-3434872576,3434907647,US
-3434907648,3434909695,PA
-3434909696,3434913791,US
+3434872576,3434913791,US
3434913792,3434914047,AG
3434914048,3434914303,DM
3434914304,3434914559,VG
@@ -148985,15 +80240,11 @@
3434917376,3434917887,AG
3434917888,3435069439,US
3435069440,3435134975,CA
-3435134976,3435216637,US
-3435216638,3435216638,EU
-3435216639,3435271423,US
+3435134976,3435271423,US
3435271424,3435271679,CA
3435271680,3435507711,US
3435507712,3435511807,CA
-3435511808,3435518463,US
-3435518464,3435518527,GI
-3435518528,3436249343,US
+3435511808,3436249343,US
3436249344,3436255743,CA
3436255744,3436256255,US
3436256256,3436278271,CA
@@ -149007,7 +80258,9 @@
3436476416,3436478463,AW
3436478464,3436492799,US
3436492800,3436493055,NL
-3436493056,3436697087,US
+3436493056,3436507135,US
+3436507136,3436509183,BB
+3436509184,3436697087,US
3436697088,3436697343,VE
3436697344,3437232383,US
3437232384,3437232639,CA
@@ -149034,9 +80287,12 @@
3437301760,3437305855,US
3437305856,3437307391,CA
3437307392,3437307903,US
-3437307904,3437310975,CA
+3437307904,3437308415,CA
+3437308416,3437308927,US
+3437308928,3437310975,CA
3437310976,3437311487,US
-3437311488,3437331711,CA
+3437311488,3437326591,CA
+3437326848,3437331711,CA
3437331712,3437331967,US
3437331968,3437332479,CA
3437332480,3437332735,US
@@ -149100,9 +80356,7 @@
3437725696,3437726207,DE
3437726208,3437726463,US
3437726464,3437726975,GB
-3437726976,3437731583,US
-3437731584,3437731615,AF
-3437731616,3437734399,US
+3437726976,3437734399,US
3437734400,3437734655,SG
3437734656,3437736447,US
3437736448,3437737471,CL
@@ -149154,190 +80408,56 @@
3438261760,3438262015,US
3438262016,3438280703,CA
3438280704,3438542847,US
-3438542848,3438544943,CA
-3438544944,3438544959,TC
-3438544960,3438545735,CA
-3438545736,3438545743,US
-3438545744,3438546175,CA
-3438546176,3438546183,US
-3438546184,3438552271,CA
-3438552272,3438552287,US
-3438552288,3438559647,CA
-3438559648,3438559679,US
-3438559680,3438570031,CA
-3438570032,3438570039,MY
-3438570040,3438570495,CA
-3438570496,3438570527,US
-3438570528,3438590975,CA
-3438590976,3438591231,TC
-3438591232,3438600319,CA
-3438600320,3438600351,US
-3438600352,3438608383,CA
+3438542848,3438608383,CA
3438608384,3438614607,US
3438614608,3438614615,BR
3438614616,3438813183,US
3438813184,3438814207,GH
3438814208,3438895103,US
-3438895104,3438896895,HN
-3438896896,3439059711,US
+3438895104,3438896639,HN
+3438896640,3439059711,US
3439059712,3439059967,PR
-3439059968,3439070975,US
-3439070976,3439071135,MX
-3439071136,3439219967,US
-3439219968,3439220079,CL
-3439220080,3439220087,US
-3439220088,3439220159,CL
-3439220160,3439220175,US
-3439220176,3439220191,CL
-3439220192,3448159471,US
-3448159472,3448159487,AG
-3448159488,3448170511,US
-3448170512,3448170527,UY
-3448170528,3448170551,US
-3448170552,3448170559,CA
-3448170560,3448173919,US
-3448173920,3448173935,UY
-3448173936,3448263423,US
-3448263424,3448263431,AG
-3448263432,3448263439,KN
-3448263440,3448263447,AG
-3448263448,3448263471,KN
-3448263472,3448263487,AG
-3448263488,3448263551,AI
-3448263552,3448263655,AG
-3448263656,3448263663,MS
-3448263664,3448263743,AG
-3448263744,3448263871,VG
-3448263872,3448263935,AG
-3448263936,3448303103,US
-3448303104,3448303871,KY
-3448303872,3448338687,US
-3448338688,3448339455,GB
-3448339456,3448377343,US
+3439059968,3439071103,US
+3439071104,3439071135,MX
+3439071136,3448263423,US
+3448263424,3448263935,AG
+3448263936,3448303615,US
+3448303616,3448303871,KY
+3448303872,3448377343,US
3448377344,3448377855,AG
-3448377856,3448379415,US
-3448379416,3448379423,IL
-3448379424,3448379439,US
-3448379440,3448379447,SG
-3448379448,3448379519,US
-3448379520,3448379647,IN
+3448377856,3448379647,US
3448379648,3448379903,SG
-3448379904,3448380063,US
-3448380064,3448380079,JP
-3448380080,3448380095,US
-3448380096,3448380239,SG
-3448380240,3448380255,US
-3448380256,3448380287,SG
-3448380288,3448380415,US
-3448380416,3448380719,SG
-3448380720,3448380735,US
-3448380736,3448380775,SG
-3448380776,3448380783,AE
-3448380784,3448380799,SG
-3448380800,3448380839,US
+3448379904,3448380415,US
+3448380416,3448380671,SG
+3448380672,3448380839,US
3448380840,3448380847,SG
-3448380848,3448380927,US
-3448380928,3448380959,SG
-3448380960,3448380975,US
-3448380976,3448380991,AU
-3448380992,3448381023,US
-3448381024,3448381055,SG
-3448381056,3448381183,US
+3448380848,3448380943,US
+3448380944,3448380959,SG
+3448380960,3448381183,US
3448381184,3448381439,SG
3448381440,3448381695,GB
-3448381696,3448382343,US
-3448382344,3448382351,IE
-3448382352,3448382367,GB
-3448382368,3448382415,US
-3448382416,3448382447,GB
-3448382448,3448382567,US
-3448382568,3448382583,GB
-3448382584,3448397887,US
-3448397888,3448397967,CA
-3448397968,3448398335,US
+3448381696,3448398335,US
3448398336,3448399103,CA
3448399104,3448399359,US
3448399360,3448399871,CA
-3448399872,3448411391,US
-3448411392,3448411455,CA
-3448411456,3448414271,US
-3448414272,3448414295,JP
-3448414296,3448414303,US
-3448414304,3448414335,JP
-3448414336,3448461311,US
-3448461312,3448461391,GB
-3448461392,3448461415,US
-3448461416,3448461423,SG
-3448461424,3448461431,US
-3448461432,3448461439,GB
-3448461440,3448461543,US
-3448461544,3448461551,GB
-3448461552,3448461559,US
-3448461560,3448461567,GB
-3448461568,3448461599,SG
-3448461600,3448461631,US
-3448461632,3448461695,SG
-3448461696,3448461735,US
-3448461736,3448461743,GB
-3448461744,3448462111,US
-3448462112,3448462127,SG
-3448462128,3448462143,US
-3448462144,3448462223,SG
-3448462224,3448462239,GB
-3448462240,3448462255,US
-3448462256,3448462271,GB
-3448462272,3448500479,US
+3448399872,3448500479,US
3448500480,3448500735,SG
-3448500736,3448545599,US
-3448545600,3448545679,AU
-3448545680,3448545695,US
-3448545696,3448545727,AU
-3448545728,3448545791,US
-3448545792,3448545823,SG
-3448545824,3448545855,AU
-3448545856,3448545879,US
-3448545880,3448545919,SG
-3448545920,3448545951,US
-3448545952,3448545967,SG
-3448545968,3448545975,MY
-3448545976,3448546007,AU
-3448546008,3448546047,US
-3448546048,3448546079,MY
-3448546080,3448546119,SG
-3448546120,3448546175,US
-3448546176,3448546207,SG
-3448546208,3448546431,US
-3448546432,3448546455,AU
-3448546456,3448547583,US
-3448547584,3448547599,SG
-3448547600,3448547615,US
-3448547616,3448547639,SG
-3448547640,3448547711,US
-3448547712,3448547743,SG
-3448547744,3448556671,US
-3448556672,3448556735,GB
-3448556736,3448556799,US
-3448556800,3448556815,GB
-3448556816,3448558911,US
-3448558912,3448558919,GB
-3448558920,3448559103,US
+3448500736,3448559103,US
3448559104,3448559359,GB
-3448559360,3448563015,US
-3448563016,3448563031,GB
-3448563032,3448569055,US
-3448569056,3448569087,MX
-3448569088,3448569735,US
-3448569736,3448569743,GB
-3448569744,3448717311,US
+3448559360,3448651775,US
+3448652800,3448673279,US
+3448674304,3448711167,US
+3448713216,3448717311,US
3448717312,3448717567,AU
3448717568,3448838143,US
3448838144,3448838399,CA
-3448838400,3448983807,US
-3448983808,3448983871,GB
-3448983872,3448985599,US
-3448987648,3449001245,US
-3449001246,3449001246,MC
-3449001247,3449159679,US
+3448838400,3448868863,US
+3448870912,3448985599,US
+3448987648,3448989695,IN
+3448989696,3448990719,HK
+3448990720,3448991743,IN
+3448991744,3449096191,US
+3449098240,3449159679,US
3449159680,3449160703,CA
3449160704,3449161471,US
3449161472,3449163519,CA
@@ -149350,153 +80470,71 @@
3449168640,3449168895,US
3449168896,3449169151,CA
3449169152,3449169663,US
-3449169664,3449171199,CA
+3449169664,3449170431,CA
+3449170432,3449170687,US
+3449170688,3449171199,CA
3449171200,3449171711,US
3449171712,3449172991,CA
3449172992,3449173247,US
-3449173248,3449174783,CA
+3449173248,3449173503,CA
+3449173504,3449173759,US
+3449173760,3449174783,CA
3449174784,3449175039,US
3449175040,3449175295,CA
3449175296,3449175551,US
3449175552,3449175807,CA
3449175808,3449176063,US
-3449176064,3449177087,CA
-3449177088,3449177103,US
-3449177104,3449178367,CA
+3449176064,3449178367,CA
3449178368,3449178623,US
-3449178624,3449179967,CA
-3449179968,3449180031,US
-3449180032,3449180095,CA
-3449180096,3449180671,US
+3449178624,3449179903,CA
+3449179904,3449180671,US
3449180672,3449181951,CA
-3449181952,3449181967,US
-3449181968,3449181999,CA
-3449182000,3449182015,US
+3449181952,3449182015,US
3449182016,3449182031,CA
-3449182032,3449182047,US
-3449182048,3449182063,CA
-3449182064,3449182079,US
-3449182080,3449182095,CA
-3449182096,3449182111,US
-3449182112,3449182159,CA
-3449182160,3449182207,US
+3449182032,3449182207,US
3449182208,3449186303,CA
3449186304,3449186559,US
3449186560,3449186815,CA
3449186816,3449187071,US
-3449187072,3449187647,CA
-3449187648,3449187711,US
-3449187712,3449188159,CA
-3449188160,3449188223,US
-3449188224,3449188831,CA
-3449188832,3449188863,US
-3449188864,3449189599,CA
-3449189600,3449189631,US
-3449189632,3449189647,CA
-3449189648,3449189663,US
-3449189664,3449189679,CA
-3449189680,3449189711,US
-3449189712,3449189759,CA
-3449189760,3449189775,US
-3449189776,3449189791,CA
-3449189792,3449189839,US
-3449189840,3449190655,CA
+3449187072,3449187583,CA
+3449187584,3449187839,US
+3449187840,3449188095,CA
+3449188096,3449188351,US
+3449188352,3449188607,CA
+3449188608,3449188671,US
+3449188672,3449188703,CA
+3449188704,3449188863,US
+3449188864,3449189375,CA
+3449189376,3449189887,US
+3449189888,3449190655,CA
3449190656,3449190911,US
3449190912,3449191679,CA
-3449191680,3449191743,US
-3449191744,3449195775,CA
+3449191680,3449192447,US
+3449192448,3449195775,CA
3449195776,3449196031,US
3449196032,3449196287,CA
3449196288,3449198687,US
-3449198688,3449198783,CA
-3449198784,3449198879,US
-3449198880,3449199103,CA
-3449199104,3449199647,US
-3449199648,3449199695,CA
-3449199696,3449199711,US
-3449199712,3449199871,CA
-3449199872,3449202767,US
-3449202768,3449202847,CA
-3449202848,3449202863,US
-3449202864,3449202911,CA
-3449202912,3449202943,US
-3449202944,3449202959,CA
-3449202960,3449202967,US
-3449202968,3449203023,CA
-3449203024,3449203031,US
-3449203032,3449203039,CA
-3449203040,3449203047,US
-3449203048,3449203095,CA
-3449203096,3449203103,US
-3449203104,3449203119,CA
-3449203120,3449203127,US
-3449203128,3449203263,CA
-3449203264,3449203295,US
-3449203296,3449203479,CA
-3449203480,3449203487,US
-3449203488,3449203527,CA
-3449203528,3449203543,US
-3449203544,3449203599,CA
-3449203600,3449203607,US
-3449203608,3449203623,CA
-3449203624,3449203631,US
-3449203632,3449203655,CA
-3449203656,3449203663,US
-3449203664,3449203687,CA
-3449203688,3449203695,US
-3449203696,3449203775,CA
-3449203776,3449203839,GB
-3449203840,3449203903,US
-3449203904,3449203967,CA
-3449203968,3449204031,US
-3449204032,3449204479,CA
+3449198688,3449198719,CA
+3449198720,3449203711,US
+3449203712,3449203775,CA
+3449203776,3449204223,US
+3449204224,3449204479,CA
3449204480,3449204735,US
3449204736,3449205759,CA
-3449205760,3449206271,US
-3449206272,3449206335,CA
-3449206336,3449206367,US
-3449206368,3449206591,CA
-3449206592,3449206655,US
-3449206656,3449206879,CA
-3449206880,3449206911,US
-3449206912,3449207007,CA
-3449207008,3449208575,US
-3449208576,3449208767,CA
-3449208768,3449208831,US
-3449208832,3449208879,CA
-3449208880,3449208895,US
-3449208896,3449208975,CA
-3449208976,3449209007,US
-3449209008,3449209023,CA
-3449209024,3449209039,US
-3449209040,3449209599,CA
-3449209600,3449209855,US
-3449209856,3449209983,CA
-3449209984,3449210015,US
-3449210016,3449210111,CA
-3449210112,3449210367,US
-3449210368,3449212415,CA
-3449212416,3449212671,US
-3449212672,3449212927,CA
+3449205760,3449208927,US
+3449208928,3449208943,CA
+3449208944,3449209343,US
+3449209344,3449209599,CA
+3449209600,3449210367,US
+3449210368,3449212927,CA
3449212928,3449213183,US
3449213184,3449213695,CA
-3449213696,3449213951,US
-3449213952,3449214079,CA
-3449214080,3449214143,US
-3449214144,3449214575,CA
-3449214576,3449214583,US
-3449214584,3449214591,SE
-3449214592,3449214623,CA
-3449214624,3449214647,US
-3449214648,3449214719,CA
-3449214720,3449214735,US
-3449214736,3449214815,CA
-3449214816,3449214831,US
-3449214832,3449214847,CA
-3449214848,3449214863,US
-3449214864,3449215999,CA
-3449216000,3449220351,US
-3449220352,3449221375,CA
+3449213696,3449214975,US
+3449214976,3449215743,CA
+3449215744,3449215871,US
+3449215872,3449215999,CA
+3449216000,3449220607,US
+3449220608,3449221375,CA
3449221376,3449222655,US
3449222656,3449224959,CA
3449224960,3449225471,US
@@ -149507,16 +80545,15 @@
3449273856,3449278975,CA
3449278976,3449279487,US
3449279488,3449290495,CA
-3449290496,3449582848,US
-3449582849,3449582849,EU
-3449582850,3449593855,US
+3449290496,3449409535,US
+3449410560,3449575423,US
+3449575424,3449575679,AU
+3449575680,3449593855,US
3449593856,3449594111,AU
-3449594112,3449598207,US
-3449598208,3449598463,GB
-3449598464,3449598975,US
-3449598976,3449599231,AU
-3449599232,3449638911,US
-3449638912,3449639679,GB
+3449594112,3449638911,US
+3449638912,3449639167,GB
+3449639168,3449639423,US
+3449639424,3449639679,GB
3449639680,3449639935,US
3449639936,3449640191,GB
3449640192,3449640447,NL
@@ -149524,7 +80561,7 @@
3449640960,3449641215,NL
3449641216,3449641471,GB
3449641472,3449769727,US
-3449769728,3449769983,ZA
+3449769728,3449769983,MU
3449769984,3449823231,US
3449823232,3449824255,CO
3449824256,3449835519,US
@@ -149533,22 +80570,13 @@
3449843200,3449843711,YE
3449843712,3449874687,US
3449874688,3449874943,AG
-3449874944,3449884159,US
-3449884160,3449884415,AS
-3449884416,3449910719,US
-3449910720,3449910783,CA
-3449910784,3449923583,US
+3449874944,3449923583,US
3449923584,3449923839,ES
3449923840,3449974783,US
3449974784,3449976831,CA
-3449976832,3449980159,US
-3449980160,3449980415,CW
-3449980416,3449994239,US
+3449976832,3449994239,US
3449994240,3449994495,MX
-3449994496,3450078463,US
-3450078464,3450079487,US
-3450079488,3450213887,US
-3450213888,3450214143,CA
+3449994496,3450213887,US
3450214144,3450217215,US
3450217216,3450217471,LC
3450217472,3450254079,US
@@ -149558,25 +80586,14 @@
3450272768,3450275327,US
3450275328,3450275583,GB
3450275584,3450275839,FR
-3450275840,3450345231,US
-3450345232,3450345247,FR
-3450345248,3450345263,RO
-3450345264,3450345279,US
-3450345280,3450345311,NE
-3450345312,3450345327,GE
-3450345328,3450345359,US
-3450345360,3450345367,GE
-3450345368,3450345375,RO
-3450345376,3450345391,US
-3450345392,3450345399,NO
-3450345400,3450345407,GE
-3450345408,3450345439,US
-3450345440,3450345471,GE
-3450345472,3450612479,US
+3450275840,3450345359,US
+3450345360,3450345367,DE
+3450345368,3450612479,US
3450612480,3450612735,CA
3450612736,3450685183,US
3450685184,3450685439,CA
-3450685440,3450699007,US
+3450685440,3450686975,US
+3450687488,3450699007,US
3450699008,3450699263,CA
3450699776,3450731519,US
3450731520,3450732543,CA
@@ -149584,62 +80601,30 @@
3450773504,3450774783,CA
3450774784,3450775039,US
3450775040,3450777599,CA
-3450777600,3450849791,US
-3450849792,3450850047,EU
-3450850048,3450851839,US
+3450777600,3450851839,US
3450855424,3450935295,US
3450935296,3450935551,MY
-3450935552,3450935807,AP
+3450935552,3450935807,US
3450935808,3450936319,MY
-3450936320,3450936351,HK
-3450936352,3450936383,US
-3450936384,3450936447,DM
-3450936448,3450940415,US
+3450936320,3450940415,US
3450940416,3450941439,SG
3450941440,3450942463,US
3450942464,3450944511,SG
-3450944512,3450947583,US
-3450947584,3450947839,A2
-3450947840,3450949375,US
-3450949376,3450949631,A2
-3450949632,3450950655,US
+3450944512,3450950655,US
3450950656,3450951679,JP
3450951680,3450953727,US
3450953728,3450957823,DE
-3450957824,3450959871,US
-3450959872,3450959879,DM
-3450959880,3450959887,US
-3450959888,3450959999,DM
-3450960000,3450960031,US
-3450960032,3450960095,DM
-3450960096,3450960111,US
-3450960112,3450960127,DM
-3450960128,3450960415,US
-3450960416,3450960431,DM
-3450960432,3450960535,US
-3450960536,3450960543,DM
-3450960544,3450960591,US
-3450960592,3450960623,DM
-3450960624,3450960815,US
-3450960816,3450960839,DM
-3450960840,3450960927,US
-3450960928,3450960943,DM
-3450960944,3450960959,US
-3450960960,3450960975,DM
-3450960976,3450961007,US
-3450961008,3450961015,DM
-3450961016,3450974255,US
-3450974256,3450974271,GB
-3450974272,3450974975,US
-3450974976,3450975231,ZM
+3450957824,3450974207,US
+3450974208,3450974463,GB
+3450974464,3450975231,US
3450975232,3450975743,LB
-3450975744,3450976511,US
-3450976512,3450976767,IL
-3450976768,3450982399,US
+3450975744,3450982399,US
3450982400,3450984447,TW
3450984448,3450986495,PH
3450986496,3450986751,HK
-3450986752,3451170303,US
+3450986752,3450987007,US
+3450987008,3450987263,CN
+3450987264,3451170303,US
3451170304,3451170559,VE
3451170560,3451187967,US
3451187968,3451188223,AU
@@ -149651,13 +80636,12 @@
3451371520,3451371775,GB
3451371776,3451507199,US
3451507200,3451507711,BR
-3451507712,3451507839,US
-3451507840,3451507903,BR
-3451507904,3451715839,US
+3451507712,3451715839,US
3451715840,3451724543,CA
3451724544,3451724799,US
3451725312,3451725567,US
-3451725568,3451737343,CA
+3451725568,3451726847,CA
+3451727360,3451737343,CA
3451737344,3451737599,US
3451737600,3451740927,CA
3451740928,3451741183,US
@@ -149692,9 +80676,7 @@
3451821568,3451821823,PR
3451821824,3451824127,US
3451824128,3451824383,CA
-3451824384,3451827455,US
-3451827456,3451827711,PR
-3451827712,3451828991,US
+3451824384,3451828991,US
3451828992,3451829247,CA
3451829248,3451835903,US
3451835904,3451836159,CA
@@ -149716,53 +80698,135 @@
3451896320,3451896575,DE
3451896576,3451912191,US
3451912192,3452174335,CA
-3452174336,3452436479,US
+3452174336,3452180479,US
+3452181504,3452436479,US
3452436480,3452502015,CA
-3452502016,3452678143,US
-3452678144,3452678399,EU
+3452502016,3452678399,US
3452678400,3452682239,BE
3452682240,3452715007,US
3452715008,3452723199,CA
-3452723200,3452764159,US
-3452764160,3452764439,CA
-3452764440,3452764447,US
-3452764448,3452764487,CA
-3452764488,3452764495,US
-3452764496,3452764615,CA
-3452764616,3452764623,US
-3452764624,3452764639,CA
-3452764640,3452764647,US
-3452764648,3452764655,CA
-3452764656,3452764663,US
-3452764664,3452768399,CA
-3452768400,3452768431,US
-3452768432,3452768751,CA
-3452768752,3452768767,US
-3452768768,3452771647,CA
-3452771648,3452771711,US
-3452771712,3452776895,CA
-3452776896,3452776959,US
-3452776960,3452785399,CA
-3452785400,3452785407,US
-3452785408,3452787519,CA
-3452787520,3452787583,US
-3452787584,3452791039,CA
-3452791040,3452791055,US
-3452791056,3452793215,CA
-3452793216,3452793343,US
-3452793344,3452798951,CA
-3452798952,3452798959,US
-3452798960,3452810239,CA
-3452810240,3452810751,US
-3452810752,3452818527,CA
-3452818528,3452818535,US
-3452818536,3452818599,CA
-3452818600,3452818615,US
-3452818616,3452818639,CA
-3452818640,3452818647,US
-3452818648,3452824575,CA
-3452824576,3452824607,US
-3452824608,3452895231,CA
+3452723200,3452764671,US
+3452764672,3452765183,CA
+3452765184,3452765439,US
+3452765440,3452766463,CA
+3452766464,3452766975,US
+3452766976,3452767487,CA
+3452767488,3452767743,US
+3452767744,3452767999,CA
+3452768000,3452768607,US
+3452768608,3452768639,CA
+3452768640,3452769023,US
+3452769024,3452769535,CA
+3452769536,3452769791,US
+3452769792,3452770047,CA
+3452770048,3452770303,US
+3452770304,3452770559,CA
+3452770560,3452770815,US
+3452770816,3452771071,CA
+3452771072,3452771327,US
+3452771328,3452771583,CA
+3452771584,3452771839,US
+3452771840,3452773119,CA
+3452773120,3452773375,US
+3452773376,3452773887,CA
+3452773888,3452774143,US
+3452774144,3452774911,CA
+3452774912,3452775167,US
+3452775168,3452775935,CA
+3452775936,3452776191,US
+3452776192,3452776703,CA
+3452776704,3452776959,US
+3452776960,3452777471,CA
+3452777472,3452777727,US
+3452777728,3452779007,CA
+3452779008,3452779263,US
+3452779264,3452779519,CA
+3452779520,3452780031,US
+3452780032,3452780543,CA
+3452780544,3452781055,US
+3452781056,3452781567,CA
+3452781568,3452781823,US
+3452781824,3452782079,CA
+3452782080,3452782335,US
+3452782336,3452783359,CA
+3452783360,3452783871,US
+3452783872,3452784639,CA
+3452784640,3452784895,US
+3452784896,3452785151,CA
+3452785152,3452785407,US
+3452785408,3452785919,CA
+3452785920,3452786175,US
+3452786176,3452787455,CA
+3452787456,3452787711,US
+3452787712,3452789503,CA
+3452789504,3452789759,US
+3452789760,3452790271,CA
+3452790272,3452791551,US
+3452791552,3452793087,CA
+3452793088,3452793343,US
+3452793344,3452793599,CA
+3452793600,3452793855,US
+3452793856,3452795135,CA
+3452795136,3452795391,US
+3452795392,3452796159,CA
+3452796160,3452796415,US
+3452796416,3452797183,CA
+3452797184,3452797439,US
+3452797440,3452798719,CA
+3452798720,3452798975,US
+3452798976,3452799487,CA
+3452799488,3452799743,US
+3452799744,3452801535,CA
+3452801536,3452801791,US
+3452801792,3452802559,CA
+3452802560,3452802815,US
+3452802816,3452803327,CA
+3452803328,3452803583,US
+3452803584,3452806143,CA
+3452806144,3452806911,US
+3452806912,3452807167,CA
+3452807168,3452807423,US
+3452807424,3452807679,CA
+3452807680,3452807935,US
+3452807936,3452808191,CA
+3452808192,3452808447,US
+3452808448,3452809727,CA
+3452809728,3452809983,US
+3452809984,3452810239,CA
+3452810240,3452811007,US
+3452811008,3452811519,CA
+3452811520,3452811775,US
+3452811776,3452812287,CA
+3452812288,3452812543,US
+3452812544,3452813311,CA
+3452813312,3452813567,US
+3452813568,3452816127,CA
+3452816128,3452816511,US
+3452816512,3452816527,CA
+3452816528,3452816895,US
+3452816896,3452817663,CA
+3452817664,3452817919,US
+3452817920,3452818431,CA
+3452818432,3452818687,US
+3452818688,3452818943,CA
+3452818944,3452819199,US
+3452819200,3452819711,CA
+3452819712,3452820479,US
+3452820480,3452820735,CA
+3452820736,3452820991,US
+3452820992,3452821503,CA
+3452821504,3452822271,US
+3452822272,3452822527,CA
+3452822528,3452822783,US
+3452822784,3452824063,CA
+3452824064,3452824319,US
+3452824320,3452824575,CA
+3452824576,3452824831,US
+3452824832,3452825599,CA
+3452825600,3452825855,US
+3452825856,3452828927,CA
+3452828928,3452829439,US
+3452829440,3452895231,CA
3452895232,3452895487,US
3452895488,3452902399,CA
3452902400,3452902655,US
@@ -149774,9 +80838,14 @@
3452920832,3452923391,US
3452923392,3452931327,CA
3452931328,3452931583,US
-3452931584,3452934911,CA
+3452931584,3452933119,CA
+3452933632,3452934911,CA
3452934912,3452936191,US
-3452936192,3452942847,CA
+3452936192,3452938839,CA
+3452938840,3452938847,US
+3452938848,3452939066,CA
+3452939067,3452939067,US
+3452939068,3452942847,CA
3452942848,3452943103,US
3452943104,3452953087,CA
3452953088,3452953343,US
@@ -149787,16 +80856,9 @@
3453028352,3453028607,CA
3453028608,3453028863,US
3453028864,3453029375,CA
-3453029376,3453039167,US
-3453039168,3453039183,AU
-3453039184,3453039199,US
-3453039200,3453039215,CA
-3453039216,3453039623,US
-3453039624,3453039631,AU
-3453039632,3453039919,US
-3453039920,3453039935,AU
-3453039936,3453092095,US
-3453092096,3453101055,CA
+3453029376,3453092095,US
+3453092096,3453096959,CA
+3453097984,3453101055,CA
3453101056,3453101311,US
3453101312,3453123839,CA
3453123840,3453124095,US
@@ -149804,7 +80866,8 @@
3453128960,3453129215,US
3453129216,3453129983,CA
3453129984,3453130239,US
-3453130240,3453139455,CA
+3453130240,3453133823,CA
+3453134848,3453139455,CA
3453139456,3453140991,US
3453140992,3453149183,CA
3453149184,3453149439,US
@@ -149818,11 +80881,14 @@
3453159424,3453159935,BM
3453159936,3453163519,CA
3453163520,3453164031,US
-3453164032,3453180671,CA
+3453164032,3453178623,CA
+3453178624,3453178879,US
+3453178880,3453180671,CA
3453180672,3453180927,US
3453180928,3453195263,CA
3453195264,3453195519,US
-3453195520,3453206527,CA
+3453195520,3453199871,CA
+3453200384,3453206527,CA
3453206528,3453207551,HN
3453207552,3453207807,NI
3453207808,3453208575,HN
@@ -149842,71 +80908,7 @@
3453219584,3453219839,SV
3453219840,3453220607,US
3453220608,3453222911,HN
-3453222912,3453241343,US
-3453241344,3453243391,US
-3453243392,3453370583,US
-3453370584,3453370607,CA
-3453370608,3453370703,US
-3453370704,3453370719,CA
-3453370720,3453371191,US
-3453371192,3453371199,CA
-3453371200,3453371215,US
-3453371216,3453371223,MY
-3453371224,3453371639,US
-3453371640,3453371663,CA
-3453371664,3453371671,US
-3453371672,3453371679,CA
-3453371680,3453371767,US
-3453371768,3453371783,SA
-3453371784,3453371807,US
-3453371808,3453371815,SA
-3453371816,3453371831,US
-3453371832,3453371839,JP
-3453371840,3453371967,US
-3453371968,3453371975,AT
-3453371976,3453371983,CA
-3453371984,3453372047,US
-3453372048,3453372063,SA
-3453372064,3453372183,US
-3453372184,3453372191,JP
-3453372192,3453372199,CH
-3453372200,3453372415,US
-3453372416,3453372439,UA
-3453372440,3453372535,US
-3453372536,3453372543,HK
-3453372544,3453372551,LB
-3453372552,3453372711,US
-3453372712,3453372727,SA
-3453372728,3453372735,OM
-3453372736,3453372767,US
-3453372768,3453372775,AE
-3453372776,3453372783,US
-3453372784,3453372791,LB
-3453372792,3453372951,US
-3453372952,3453372967,IN
-3453372968,3453372975,US
-3453372976,3453372991,IN
-3453372992,3453373007,US
-3453373008,3453373023,IN
-3453373024,3453373095,US
-3453373096,3453373127,SA
-3453373128,3453374583,US
-3453374584,3453374591,CY
-3453374592,3453374871,US
-3453374872,3453374879,UA
-3453374880,3453375999,US
-3453376000,3453376255,CA
-3453376256,3453377159,US
-3453377160,3453377167,GB
-3453377168,3453377319,US
-3453377320,3453377327,GB
-3453377328,3453378143,US
-3453378144,3453378151,SA
-3453378152,3453378271,US
-3453378272,3453378279,DK
-3453378280,3453378503,US
-3453378504,3453378511,BE
-3453378512,3453403135,US
+3453222912,3453403135,US
3453403136,3453405951,BB
3453405952,3453406207,KN
3453406208,3453406463,TC
@@ -149917,92 +80919,17 @@
3453408256,3453409023,BB
3453409024,3453409535,KN
3453409536,3453411327,BB
-3453411328,3453488527,US
-3453488528,3453488543,MX
-3453488544,3453490303,US
-3453490304,3453490311,MX
-3453490312,3453493119,US
-3453493120,3453493247,MX
-3453493248,3453503519,US
-3453503520,3453503551,GB
-3453503552,3453504031,US
-3453504032,3453504095,JP
-3453504096,3453504111,US
-3453504112,3453504127,JP
-3453504128,3453506199,US
-3453506200,3453506271,GB
-3453506272,3453551839,US
-3453551840,3453551879,GB
-3453551880,3453551895,US
-3453551896,3453551903,GB
-3453551904,3453551935,US
-3453551936,3453551967,GB
-3453551968,3453552039,US
-3453552040,3453552047,GB
-3453552048,3453552399,US
-3453552400,3453552407,GB
-3453552408,3453552455,US
-3453552456,3453552463,IE
-3453552464,3453552471,GB
-3453552472,3453552511,US
-3453552512,3453552639,IE
+3453411328,3453552127,US
+3453552128,3453552383,GB
+3453552384,3453552639,US
3453552640,3453552895,GB
3453552896,3453553151,US
3453553152,3453553407,GB
-3453553408,3453553631,US
-3453553632,3453553639,GB
-3453553640,3453553919,US
-3453553920,3453553983,GB
-3453553984,3453554063,US
-3453554064,3453554095,GB
-3453554096,3453554207,US
-3453554208,3453554215,GB
-3453554216,3453554239,US
-3453554240,3453554255,GB
-3453554256,3453554431,US
+3453553408,3453554431,US
3453554432,3453554687,GB
-3453554688,3453554863,US
-3453554864,3453554879,NL
-3453554880,3453555711,US
-3453555712,3453555767,GB
-3453555768,3453556903,US
-3453556904,3453556911,GB
-3453556912,3453556927,US
-3453556928,3453556991,GB
-3453556992,3453557255,US
-3453557256,3453557263,GB
-3453557264,3453577855,US
-3453577856,3453577983,IL
-3453577984,3453583615,US
-3453583616,3453583647,SG
-3453583648,3453583655,CA
-3453583656,3453583695,SG
-3453583696,3453583743,US
-3453583744,3453583775,SG
-3453583776,3453583791,US
-3453583792,3453583799,CA
-3453583800,3453583807,US
-3453583808,3453583839,CA
-3453583840,3453584327,US
-3453584328,3453584335,HK
-3453584336,3453595527,US
-3453595528,3453595551,CA
-3453595552,3453595583,US
-3453595584,3453595623,CA
-3453595624,3453595775,US
-3453595776,3453595807,CA
-3453595808,3453595871,US
-3453595872,3453595887,CA
-3453595888,3453599999,US
+3453554688,3453599999,US
3453600000,3453600767,GB
-3453600768,3453601863,US
-3453601864,3453601871,GB
-3453601872,3453601879,CH
-3453601880,3453602175,US
-3453602176,3453602183,GB
-3453602184,3453602207,US
-3453602208,3453602223,GB
-3453602224,3453607935,US
+3453600768,3453607935,US
3453607936,3453608959,KN
3453608960,3453609983,LC
3453609984,3453610495,AG
@@ -150016,21 +80943,13 @@
3453615104,3453615359,AG
3453615360,3453615615,KN
3453615616,3453616127,AG
-3453616128,3453620239,US
-3453620240,3453620255,CA
-3453620256,3453620271,US
-3453620272,3453620287,AR
-3453620288,3453681943,US
-3453681944,3453681951,IN
-3453681952,3453740031,US
-3453740032,3453740159,MX
-3453740160,3454003013,US
+3453616128,3454003013,US
3454003014,3454003014,ES
3454003015,3454004997,US
3454004998,3454004998,GB
-3454004999,3454292479,US
-3454292480,3454292735,GB
-3454292736,3454436351,US
+3454004999,3454287871,US
+3454287872,3454296063,GB
+3454296064,3454436351,US
3454436352,3454436607,GU
3454436608,3454497791,US
3454497792,3454498815,MX
@@ -150066,58 +80985,9 @@
3454662656,3454664447,CA
3454664448,3454672895,US
3454672896,3454681087,CA
-3454681088,3454698823,US
-3454698824,3454698839,CA
-3454698840,3454698887,US
-3454698888,3454698895,HK
-3454698896,3454703135,US
-3454703136,3454703143,IN
-3454703144,3454703255,US
-3454703256,3454703263,CA
-3454703264,3454703647,US
-3454703648,3454703663,CA
-3454703664,3454703951,US
-3454703952,3454703959,AF
-3454703960,3454704063,US
-3454704064,3454704079,CA
-3454704080,3454704087,AE
-3454704088,3454704103,US
-3454704104,3454704111,GB
-3454704112,3454705151,US
-3454705152,3454705215,GB
-3454705216,3454705431,US
-3454705432,3454705439,SE
-3454705440,3454705447,GB
-3454705448,3454705511,US
-3454705512,3454705519,CA
-3454705520,3454705535,US
-3454705536,3454705543,SE
-3454705544,3454708353,US
+3454681088,3454708353,US
3454708354,3454708355,GB
-3454708356,3454708927,US
-3454708928,3454708991,IN
-3454708992,3454710551,US
-3454710552,3454710559,SO
-3454710560,3454710671,US
-3454710672,3454710679,IN
-3454710680,3454711487,US
-3454711488,3454711519,HK
-3454711520,3454717551,US
-3454717552,3454717559,CA
-3454717560,3454718623,US
-3454718624,3454718655,HK
-3454718656,3454718767,US
-3454718768,3454718775,EG
-3454718776,3454718783,BE
-3454718784,3454718959,US
-3454718960,3454718967,TR
-3454718968,3454721183,US
-3454721184,3454721191,EG
-3454721192,3454725759,US
-3454725760,3454725767,DE
-3454725768,3454727799,US
-3454727800,3454727807,CA
-3454727808,3454730239,US
+3454708356,3454730239,US
3454730240,3454732287,EC
3454732288,3454796031,US
3454796032,3454808831,CA
@@ -150154,9 +81024,7 @@
3455126528,3455126783,MX
3455126784,3455132159,US
3455132160,3455133695,BO
-3455133696,3455242407,US
-3455242408,3455242415,CA
-3455242416,3455320063,US
+3455133696,3455320063,US
3455320064,3455322111,FR
3455322112,3455328255,US
3455328256,3455329279,DO
@@ -150216,13 +81084,9 @@
3455616512,3455616767,CA
3455616768,3455617279,US
3455617280,3455619071,GB
-3455619072,3455619263,US
-3455619264,3455619327,AR
-3455619328,3455619839,US
+3455619072,3455619839,US
3455619840,3455620095,GB
-3455620096,3455620287,US
-3455620288,3455620351,VE
-3455620352,3455621631,US
+3455620096,3455621631,US
3455621632,3455622143,GB
3455622144,3455624191,US
3455624192,3455624447,FR
@@ -150269,74 +81133,20 @@
3455647488,3455647743,IT
3455647744,3455713279,US
3455713280,3455778815,CA
-3455778816,3455797375,US
-3455797376,3455797407,FR
-3455797408,3455850255,US
-3455850256,3455850271,DM
-3455850272,3455850287,US
-3455850288,3455850303,DM
-3455850304,3455850399,US
-3455850400,3455850415,DM
-3455850416,3455850447,US
-3455850448,3455850751,DM
-3455850752,3455856639,US
-3455856640,3455856655,DM
-3455856656,3455856751,US
-3455856752,3455856767,DM
-3455856768,3455856967,US
-3455856968,3455856975,DM
-3455856976,3455857039,US
-3455857040,3455857087,DM
-3455857088,3455864831,US
+3455778816,3455864831,US
3455864832,3455866879,TW
3455866880,3455871999,US
3455872000,3455872255,ZM
3455872256,3455873023,GB
-3455873024,3455885695,US
-3455885696,3455885727,DM
-3455885728,3455885791,US
-3455885792,3455885807,DM
-3455885808,3455886847,US
-3455886848,3455887111,DM
-3455887112,3455887119,US
-3455887120,3455887231,DM
-3455887232,3455887359,US
+3455873024,3455887359,US
3455887360,3455889407,MY
-3455889408,3455899967,US
-3455899968,3455899999,HK
-3455900000,3455907895,US
-3455907896,3455907903,DM
-3455907904,3455907935,US
-3455907936,3455907967,DM
-3455907968,3455907983,US
-3455907984,3455907999,DM
-3455908000,3455908015,US
-3455908016,3455908031,DM
-3455908032,3455908063,US
-3455908064,3455908079,DM
-3455908080,3455908239,US
-3455908240,3455908271,DM
-3455908272,3455908335,US
-3455908336,3455908351,DM
-3455908352,3455908527,US
-3455908528,3455908591,DM
-3455908592,3455908607,US
-3455908608,3455908703,DM
-3455908704,3455908767,US
-3455908768,3455908783,DM
-3455908784,3455908831,US
-3455908832,3455908863,DM
-3455908864,3456303103,US
+3455889408,3456303103,US
3456303104,3456311295,JP
-3456311296,3456892927,US
+3456311296,3456360447,US
+3456360448,3456364543,BG
+3456364544,3456892927,US
3456892928,3456958463,CA
-3456958464,3457246367,US
-3457246368,3457246383,SE
-3457246384,3457312191,US
-3457312192,3457312255,IE
-3457312256,3457327663,US
-3457327664,3457327679,NZ
-3457327680,3457551871,US
+3456958464,3457551871,US
3457551872,3457552127,CA
3457552128,3457553151,US
3457553152,3457553663,CA
@@ -150366,68 +81176,22 @@
3457600512,3457600767,CA
3457600768,3457683967,US
3457683968,3457684991,CA
-3457684992,3457723535,US
-3457723536,3457723551,GB
-3457723552,3457808447,US
-3457808448,3457808463,IE
-3457808464,3457859839,US
+3457684992,3457859839,US
3457859840,3457860095,CA
-3457860096,3457862847,US
-3457862848,3457862911,CA
-3457862912,3457892351,US
-3457892352,3457892623,IN
-3457892624,3458084927,US
-3458084928,3458084935,CA
-3458084936,3458141631,US
-3458141632,3458141655,GB
-3458141656,3458142543,US
-3458142544,3458142559,IE
-3458142560,3458143863,US
-3458143864,3458143871,AE
-3458143872,3458143919,US
-3458143920,3458143935,AE
-3458143936,3458143999,US
-3458144000,3458144015,DE
-3458144016,3458144031,US
-3458144032,3458144047,DE
-3458144048,3458144111,US
-3458144112,3458144119,CA
-3458144120,3458144415,US
-3458144416,3458144423,DE
-3458144424,3458145727,US
-3458145728,3458145735,DE
-3458145736,3458145743,US
-3458145744,3458145759,DE
-3458145760,3458195455,US
+3457860096,3457892351,US
+3457892352,3457892607,IN
+3457892608,3458039807,US
+3458039808,3458043903,CA
+3458043904,3458195455,US
3458195456,3458196479,SG
-3458196480,3458765631,US
-3458765632,3458765695,CA
-3458765696,3458811903,US
+3458196480,3458233343,US
+3458233344,3458234367,CA
+3458234368,3458813951,US
3458813952,3458818047,CA
3458818048,3458820095,US
-3458822144,3458823559,US
-3458823560,3458823575,LB
-3458823576,3458823583,US
-3458823584,3458823591,MY
-3458823592,3458823701,US
-3458823702,3458823717,GB
-3458823718,3458823725,US
-3458823726,3458823733,GR
-3458823734,3458823765,US
-3458823766,3458823781,RU
-3458823782,3458823846,US
-3458823847,3458823862,GB
-3458823863,3458823903,US
-3458823904,3458823919,JP
-3458823920,3458823935,US
-3458823936,3458823967,CA
-3458823968,3458823983,JP
-3458823984,3458824087,US
-3458824088,3458824111,GB
-3458824112,3458824159,US
-3458824160,3458824183,ID
-3458824184,3458824191,GB
-3458824192,3459055615,US
+3458820096,3458820351,CA
+3458820352,3458820607,US
+3458822144,3459055615,US
3459055616,3459121151,CA
3459121152,3459186687,US
3459186688,3459252223,CA
@@ -150440,9 +81204,7 @@
3459259392,3459264767,US
3459264768,3459265023,VE
3459265024,3459266559,US
-3459266560,3459266623,AG
-3459266624,3459266655,KN
-3459266656,3459267327,AG
+3459266560,3459267327,AG
3459267328,3459267583,AI
3459267584,3459267839,AG
3459267840,3459268095,DM
@@ -150451,10 +81213,8 @@
3459273728,3459274751,CL
3459274752,3459277823,US
3459277824,3459278847,AW
-3459278848,3459285247,US
-3459285248,3459285311,CL
-3459285312,3459285375,US
-3459285376,3459286271,CL
+3459278848,3459285503,US
+3459285504,3459286271,CL
3459286272,3459287807,US
3459287808,3459288063,CL
3459288064,3459290111,US
@@ -150464,8 +81224,8 @@
3459296256,3459310591,US
3459310592,3459310847,KY
3459310848,3459312639,US
-3459312640,3459312687,MX
-3459312688,3459312767,US
+3459312640,3459312671,MX
+3459312672,3459312767,US
3459312768,3459312895,MX
3459312896,3459325951,US
3459325952,3459326207,VE
@@ -150474,14 +81234,7 @@
3459327488,3459327999,CO
3459328000,3459329023,CL
3459329024,3459330047,VE
-3459330048,3459330559,CL
-3459330560,3459331071,US
-3459331072,3459331583,MX
-3459331584,3459332607,PA
-3459332608,3459333119,US
-3459333120,3459333631,PW
-3459333632,3459333887,MR
-3459333888,3459334399,US
+3459330048,3459334399,US
3459334400,3459334655,CA
3459334656,3459335423,US
3459335424,3459335679,VE
@@ -150513,18 +81266,16 @@
3459342592,3459342847,BY
3459342848,3459343103,VE
3459343104,3459343359,BR
-3459343360,3459343439,CA
-3459343440,3459343455,US
-3459343456,3459343591,CA
-3459343592,3459343599,US
-3459343600,3459343615,CA
+3459343360,3459343615,CA
3459343616,3459344127,OM
3459344128,3459345663,US
3459345664,3459345919,OM
3459345920,3459346431,US
3459346432,3459346687,LK
3459346688,3459346943,US
-3459346944,3459348223,PR
+3459346944,3459347455,PR
+3459347456,3459347711,US
+3459347712,3459348223,PR
3459348224,3459348479,AG
3459348480,3459348735,CO
3459348736,3459348991,BW
@@ -150549,15 +81300,7 @@
3459364864,3459366911,AR
3459366912,3459367167,VE
3459367168,3459367423,US
-3459367424,3459367455,VE
-3459367456,3459367535,VN
-3459367536,3459367551,VE
-3459367552,3459367647,VN
-3459367648,3459367935,VE
-3459367936,3459367999,VN
-3459368000,3459368063,VE
-3459368064,3459368095,VN
-3459368096,3459368703,VE
+3459367424,3459368703,VE
3459368704,3459368959,US
3459368960,3459371007,MX
3459371008,3459373055,PE
@@ -150581,15 +81324,17 @@
3459513856,3459592191,US
3459592192,3459596287,CA
3459596288,3459614719,US
-3459616768,3459617791,US
-3459617792,3459617999,AP
+3459616768,3459617023,CA
+3459617024,3459617791,US
+3459617792,3459617999,CA
3459618000,3459618000,ID
-3459618001,3459618047,AP
+3459618001,3459618047,CA
3459618048,3459618815,US
-3459618816,3459619071,AP
+3459618816,3459619071,CA
3459619072,3459622911,US
3459624960,3459629055,BM
-3459629056,3459731455,US
+3459629056,3459631103,US
+3459633152,3459731455,US
3459731456,3459735551,CA
3459735552,3459745535,US
3459745536,3459745791,IT
@@ -150597,135 +81342,40 @@
3459842816,3459843071,AR
3459843072,3459848959,US
3459848960,3459849215,FR
-3459849216,3459850431,US
-3459850432,3459850495,CA
-3459850496,3459852991,US
-3459852992,3459853007,CA
-3459853008,3459873807,US
-3459873808,3459873823,IT
-3459873824,3460057283,US
+3459849216,3459850239,US
+3459850240,3459850495,CA
+3459850496,3460057283,US
3460057284,3460057287,TH
3460057288,3460061687,US
3460061688,3460061691,HK
3460061692,3460063175,US
3460063176,3460063179,HK
-3460063180,3460104703,US
+3460063180,3460070959,US
+3460070960,3460070963,GB
+3460070964,3460071043,US
+3460071044,3460071047,GB
+3460071048,3460104703,US
3460104704,3460105215,MX
-3460105216,3460108895,US
-3460108896,3460108903,FI
-3460108904,3460111871,US
-3460111872,3460111887,CA
-3460111888,3460114431,US
+3460105216,3460114431,US
3460114432,3460116479,SR
3460116480,3460161535,US
3460161536,3460165631,PR
3460165632,3460374527,US
3460374528,3460375551,MX
-3460375552,3460411149,US
-3460411150,3460411150,EU
-3460411151,3460453631,US
+3460375552,3460453631,US
3460453632,3460453887,BS
3460453888,3460507647,US
3460507648,3460507903,MX
-3460507904,3460854831,US
-3460854832,3460854847,VE
-3460854848,3460854911,US
-3460854912,3460854943,GB
-3460854944,3460855015,US
-3460855016,3460855031,AU
-3460855032,3460855187,US
-3460855188,3460855191,NZ
-3460855192,3460855195,US
-3460855196,3460855199,AU
-3460855200,3460855255,US
-3460855256,3460855263,VE
-3460855264,3460855271,US
-3460855272,3460855279,GB
-3460855280,3460855287,CA
-3460855288,3460855311,US
-3460855312,3460855319,NL
-3460855320,3460855463,US
-3460855464,3460855471,SA
-3460855472,3460855535,US
-3460855536,3460855543,NZ
-3460855544,3460855551,AU
-3460855552,3460855631,US
-3460855632,3460855647,CA
-3460855648,3460855703,US
-3460855704,3460855711,AU
-3460855712,3460855743,US
-3460855744,3460855775,CA
-3460855776,3460855807,US
-3460855808,3460855815,GB
-3460855816,3460855855,US
-3460855856,3460855863,GB
-3460855864,3460855871,US
-3460855872,3460855879,GB
-3460855880,3460855887,GU
-3460855888,3460855991,US
-3460855992,3460855999,GB
-3460856000,3460856007,US
-3460856008,3460856015,CA
-3460856016,3460856119,US
-3460856120,3460856127,GB
-3460856128,3460856135,JP
-3460856136,3460856191,US
-3460856192,3460856199,ZA
-3460856200,3460856215,US
-3460856216,3460856223,GB
-3460856224,3460856287,US
-3460856288,3460856295,IN
-3460856296,3460856351,US
-3460856352,3460856355,TZ
-3460856356,3460856383,US
-3460856384,3460856399,GB
-3460856400,3460856447,US
-3460856448,3460856495,GB
-3460856496,3460856623,US
-3460856624,3460856639,NZ
-3460856640,3460856815,US
-3460856816,3460856831,NZ
-3460856832,3460857055,US
-3460857056,3460857087,NZ
-3460857088,3460857151,US
-3460857152,3460857183,CA
-3460857184,3460857343,US
-3460857344,3460857359,CA
-3460857360,3460857367,US
-3460857368,3460857375,NZ
-3460857376,3460857383,GB
-3460857384,3460857431,US
-3460857432,3460857439,VE
-3460857440,3460857599,US
-3460857600,3460857855,AU
-3460857856,3460878335,US
+3460507904,3460761599,US
+3460763648,3460794367,US
+3460796416,3460878335,US
3460878336,3460878591,CA
-3460878592,3460878847,US
-3460882432,3460891135,US
-3460891136,3460891199,CL
-3460891200,3460891967,US
-3460891968,3460891999,BR
-3460892000,3460892031,CO
-3460892032,3460892095,VE
-3460892096,3460892127,BR
-3460892128,3460892159,US
-3460892160,3460892223,FR
-3460892224,3460892271,BR
-3460892272,3460892287,US
-3460892288,3460892415,FR
-3460892416,3460893439,US
+3460878592,3460879359,US
+3460882432,3460893439,US
3460893440,3460893695,IT
-3460893696,3460894223,US
-3460894224,3460894239,MX
-3460894240,3460894335,US
-3460894336,3460894367,MX
-3460894368,3460894463,US
+3460893696,3460894463,US
3460894464,3460894719,JP
-3460894720,3460894735,NL
-3460894736,3460894751,CA
-3460894752,3460894783,US
-3460894784,3460894975,NL
-3460894976,3460895231,DK
+3460894720,3460895231,US
3460895232,3460895487,BE
3460895488,3460896255,US
3460896256,3460896511,ZA
@@ -150734,127 +81384,38 @@
3460897024,3460897279,GB
3460897280,3460899327,US
3460899328,3460899583,ZA
-3460899584,3460900607,US
-3460900608,3460900671,PE
-3460900672,3460900735,US
-3460900736,3460900799,PR
-3460900800,3460900831,EC
-3460900832,3460901375,US
+3460899584,3460901375,US
3460901376,3460901631,SE
-3460901632,3460902143,US
-3460902144,3460902271,IN
-3460902272,3460903215,US
-3460903216,3460903231,AR
-3460903232,3460903239,BR
-3460903240,3460903263,US
-3460903264,3460903295,VE
-3460903296,3460903359,US
-3460903360,3460903423,MX
-3460903424,3460903807,US
-3460903808,3460903871,BO
-3460903872,3460903935,US
-3460903936,3460904063,VE
-3460904064,3460904079,MX
-3460904080,3460904191,US
-3460904192,3460904223,FI
-3460904224,3460904255,US
-3460904256,3460904319,DE
-3460904320,3460904447,US
-3460904448,3460904479,FI
-3460904480,3460904591,US
-3460904592,3460904607,CA
-3460904608,3460904639,US
-3460904640,3460904703,BR
-3460904704,3460904735,US
-3460904736,3460904751,CA
-3460904752,3460905255,US
-3460905256,3460905263,MX
-3460905264,3460905295,US
-3460905296,3460905311,BR
-3460905312,3460905407,US
-3460905408,3460905471,BR
-3460905472,3460905743,US
-3460905744,3460905759,BR
-3460905760,3460905791,US
-3460905792,3460905823,BR
-3460905824,3460906047,US
-3460906048,3460906079,ID
-3460906080,3460906111,CN
-3460906112,3460906143,HK
-3460906144,3460906495,US
-3460906496,3460906559,ID
-3460906560,3460907263,US
+3460901632,3460907263,US
3460907264,3460907519,SG
-3460907520,3460908159,US
-3460908160,3460908191,CN
-3460908192,3460908287,US
+3460907520,3460908287,US
3460908288,3460908543,FI
3460908544,3460908799,US
3460908800,3460910335,IE
3460910336,3460910591,US
3460910592,3460910847,IE
-3460910848,3460911167,US
-3460911168,3460911199,ID
-3460911200,3460912127,US
+3460910848,3460912127,US
3460912128,3460912383,IT
3460912384,3460912639,FR
3460912640,3460912895,ES
-3460912896,3460913407,US
-3460913408,3460913439,FR
-3460913440,3460913471,US
-3460913472,3460913663,FR
-3460913664,3460913951,US
-3460913952,3460914015,CN
-3460914016,3460914047,US
-3460914048,3460914111,DE
-3460914112,3460916223,US
+3460912896,3460916223,US
3460916224,3460916479,CH
3460916480,3460916735,GB
3460916736,3460916991,AR
-3460916992,3460917023,CA
-3460917024,3460917135,US
-3460917136,3460917151,MX
-3460917152,3460917183,PR
-3460917184,3460917279,US
-3460917280,3460917311,CA
-3460917312,3460917343,US
-3460917344,3460917359,CA
-3460917360,3460917423,US
-3460917424,3460917439,MX
-3460917440,3460917759,US
+3460916992,3460917759,US
3460917760,3460918015,CA
-3460918016,3460918207,US
-3460918208,3460918239,AR
-3460918240,3460918271,US
+3460918016,3460918271,US
3460918272,3460918527,NL
-3460918528,3460918687,US
-3460918688,3460918719,MX
-3460918720,3460918783,US
+3460918528,3460918783,US
3460918784,3460919039,JP
3460919040,3460919295,NL
-3460919296,3460919535,US
-3460919536,3460919543,AR
-3460919544,3460919551,CO
-3460919552,3460920319,US
+3460919296,3460920319,US
3460920320,3460920575,IT
3460920576,3460920831,BE
3460920832,3460921343,US
3460921344,3460921599,DE
3460921600,3460921855,AU
-3460921856,3460923679,US
-3460923680,3460923711,FR
-3460923712,3460923743,DE
-3460923744,3460923775,CH
-3460923776,3460923807,SE
-3460923808,3460923839,GB
-3460923840,3460923871,AT
-3460923872,3460924159,US
-3460924160,3460924175,GB
-3460924176,3460924223,US
-3460924224,3460924287,GB
-3460924288,3460924415,DE
-3460924416,3460924607,GB
-3460924608,3460924671,US
+3460921856,3460924671,US
3460924672,3460925183,GB
3460925184,3460925695,US
3460925696,3460925951,ES
@@ -150862,41 +81423,24 @@
3460926208,3460926463,GB
3460926464,3460926719,US
3460926720,3460926975,DE
-3460926976,3460927103,US
-3460927104,3460927231,ES
+3460926976,3460927231,US
3460927232,3460929023,BE
3460929024,3460929279,US
3460929280,3460929535,DE
3460929536,3460929791,GB
3460929792,3460930047,DK
-3460930048,3460931007,US
-3460931008,3460931071,IT
-3460931072,3460931199,GR
-3460931200,3460931247,US
-3460931248,3460931327,BE
-3460931328,3460931583,US
+3460930048,3460931583,US
3460931584,3460931839,SE
3460931840,3460932095,DE
3460932096,3460932351,GB
3460932352,3460932607,FR
3460932608,3460932863,US
3460932864,3460933119,GB
-3460933120,3460933375,US
-3460933376,3460933439,DE
-3460933440,3460933679,US
-3460933680,3460933695,SE
-3460933696,3460933823,US
-3460933824,3460933887,IL
+3460933120,3460933887,US
3460933888,3460934143,DE
-3460934144,3460934655,US
-3460934656,3460934783,CH
-3460934784,3460934911,IT
+3460934144,3460934911,US
3460934912,3460935167,SG
-3460935168,3460935199,US
-3460935200,3460935231,ES
-3460935232,3460935295,US
-3460935296,3460935423,HU
-3460935424,3460935679,FR
+3460935168,3460935679,US
3460935680,3460935935,FI
3460935936,3460936191,FR
3460936192,3460936447,US
@@ -150908,30 +81452,9 @@
3460937728,3460937983,DK
3460937984,3460938239,IE
3460938240,3460938495,DE
-3460938496,3460939039,US
-3460939040,3460939071,BE
-3460939072,3460939103,IT
-3460939104,3460939263,US
+3460938496,3460939263,US
3460939264,3460939519,HK
-3460939520,3460939711,US
-3460939712,3460939775,CH
-3460939776,3460939903,US
-3460939904,3460939935,AU
-3460939936,3460939967,SG
-3460939968,3460940287,US
-3460940288,3460940351,MX
-3460940352,3460940415,ID
-3460940416,3460940479,US
-3460940480,3460940511,HK
-3460940512,3460940543,TH
-3460940544,3460940559,US
-3460940560,3460940567,GB
-3460940568,3460940607,US
-3460940608,3460940639,CN
-3460940640,3460941311,US
-3460941312,3460941375,MY
-3460941376,3460941439,US
-3460941440,3460941567,TW
+3460939520,3460941567,US
3460941568,3460941823,AU
3460941824,3460942079,US
3460942080,3460942335,GB
@@ -150940,159 +81463,58 @@
3460943616,3460943871,HK
3460943872,3460944127,US
3460944128,3460944383,AU
-3460944384,3460944447,KR
-3460944448,3460944479,US
-3460944480,3460944511,CN
-3460944512,3460944543,TH
-3460944544,3460944575,JP
-3460944576,3460944671,KR
-3460944672,3460944767,US
-3460944768,3460944895,TH
+3460944384,3460944895,US
3460944896,3460945151,DE
3460945152,3460945663,US
3460945664,3460945919,GB
3460945920,3460946687,US
3460946688,3460946943,DE
-3460946944,3460946975,CH
-3460946976,3460947455,US
+3460946944,3460947455,US
3460947456,3460947711,DE
3460947712,3460947967,SE
-3460947968,3460948095,US
-3460948096,3460948159,KR
-3460948160,3460948735,US
-3460948736,3460948799,PH
-3460948800,3460948863,CN
-3460948864,3460948927,US
-3460948928,3460948959,ID
-3460948960,3460949015,US
-3460949016,3460949023,CN
-3460949024,3460949055,JP
-3460949056,3460949183,ID
-3460949184,3460950271,US
+3460947968,3460950271,US
3460950272,3460950527,DE
-3460950528,3460950783,HK
-3460950784,3460950991,US
-3460950992,3460951007,JP
-3460951008,3460951295,US
+3460950528,3460951295,US
3460951296,3460951551,GB
-3460951552,3460951559,JP
-3460951560,3460951567,US
-3460951568,3460951583,HK
-3460951584,3460951743,US
-3460951744,3460951751,HK
-3460951752,3460951759,ID
-3460951760,3460951823,US
-3460951824,3460951831,CA
-3460951832,3460951855,US
-3460951856,3460951871,JP
-3460951872,3460951887,CH
-3460951888,3460951935,US
-3460951936,3460951951,MX
-3460951952,3460952007,US
-3460952008,3460952015,CA
-3460952016,3460952255,US
-3460952256,3460952287,CA
-3460952288,3460952319,US
+3460951552,3460952319,US
3460952320,3460952575,GB
3460952576,3460952831,ES
-3460952832,3460952895,US
-3460952896,3460952927,BR
-3460952928,3460952959,US
-3460952960,3460953023,CA
-3460953024,3460953111,US
-3460953112,3460953119,TW
-3460953120,3460953135,MX
-3460953136,3460953151,US
-3460953152,3460953167,TH
-3460953168,3460953183,JP
-3460953184,3460953199,MX
-3460953200,3460953231,US
-3460953232,3460953247,ID
-3460953248,3460953279,US
-3460953280,3460953343,CA
-3460953344,3460953599,US
-3460953600,3460953615,BR
-3460953616,3460953623,US
-3460953624,3460953631,SG
-3460953632,3460953647,CN
-3460953648,3460953663,SG
-3460953664,3460953727,US
-3460953728,3460953855,HK
+3460952832,3460953855,US
3460953856,3460954111,GB
-3460954112,3460954191,US
-3460954192,3460954207,SG
-3460954208,3460954367,US
-3460954368,3460954431,DO
-3460954432,3460954463,US
-3460954464,3460954479,MY
-3460954480,3460954527,US
+3460954112,3460954527,US
3460954528,3460954559,KR
3460954560,3460954623,US
3460954624,3460954879,DE
3460954880,3460955135,LU
-3460955136,3460955391,US
-3460955392,3460955423,JP
-3460955424,3460955455,US
-3460955456,3460955487,BR
-3460955488,3460955519,CO
-3460955520,3460955583,BR
-3460955584,3461021695,US
+3460955136,3461021695,US
3461021696,3461031935,CA
3461031936,3461032191,US
3461032192,3461087231,CA
-3461087232,3461285903,US
-3461285904,3461285975,GB
-3461285976,3461286143,US
-3461286144,3461286335,FR
-3461286336,3461286399,US
-3461286400,3461286463,FR
-3461286464,3461286471,GB
-3461286472,3461286503,US
-3461286504,3461286511,GB
-3461286512,3461286519,US
-3461286520,3461286543,GB
-3461286544,3461286599,US
-3461286600,3461286623,GB
-3461286624,3461286815,US
-3461286816,3461286847,CA
-3461286848,3461286879,GB
-3461286880,3461330943,US
+3461087232,3461330943,US
3461330944,3461331199,SG
-3461331200,3461331247,US
-3461331248,3461331263,SG
-3461331264,3461331295,US
-3461331296,3461331311,SG
-3461331312,3461331455,US
-3461331456,3461331551,SG
-3461331552,3461331567,US
-3461331568,3461331583,SG
-3461331584,3461331711,US
+3461331200,3461331711,US
3461331712,3461331967,SG
3461331968,3461332223,US
-3461332224,3461332559,SG
-3461332560,3461332735,US
+3461332224,3461332479,SG
+3461332480,3461332735,US
3461332736,3461332991,SG
3461332992,3461356543,US
3461356544,3461357567,AS
3461357568,3461408767,US
3461410816,3461414911,CA
-3461414912,3461513215,US
-3461513216,3461513727,CA
+3461414912,3461441535,US
+3461443584,3461507071,US
+3461509120,3461513727,US
3461513728,3461513983,BF
-3461513984,3461514495,CA
+3461513984,3461514495,US
3461514496,3461514751,QA
-3461514752,3461516287,CA
+3461514752,3461516287,US
3461516288,3461516543,IL
-3461516544,3461517055,CA
-3461517056,3461536959,US
-3461536960,3461536975,CA
-3461536976,3461554175,US
+3461516544,3461548031,US
+3461550080,3461554175,US
3461554176,3461556223,CA
-3461558272,3461597887,US
-3461597888,3461597951,CO
-3461597952,3461598015,US
-3461598016,3461598079,CO
-3461598080,3461808127,US
+3461558272,3461580799,US
+3461582848,3461808127,US
3461808128,3461873663,CA
3461873664,3461897727,US
3461897728,3461897983,CA
@@ -151120,17 +81542,13 @@
3461977856,3461978111,CA
3461978112,3461992703,US
3461992704,3461992959,CA
-3461992960,3461999871,US
-3461999872,3462000127,PR
-3462000128,3462000895,US
+3461992960,3462000895,US
3462000896,3462001151,CA
3462001152,3462001919,US
3462001920,3462002431,CA
3462002432,3462148607,US
3462148608,3462148863,CA
-3462148864,3462160895,US
-3462160896,3462161151,PR
-3462161152,3462163967,US
+3462148864,3462163967,US
3462163968,3462164223,CA
3462164224,3462168319,US
3462168320,3462168575,CA
@@ -151148,9 +81566,7 @@
3462179840,3462180095,CA
3462180096,3462181375,US
3462181376,3462181887,CA
-3462181888,3462191871,US
-3462191872,3462192127,PR
-3462192128,3462194175,US
+3462181888,3462194175,US
3462194176,3462194431,CA
3462194432,3462231039,US
3462231040,3462231295,CA
@@ -151182,21 +81598,11 @@
3462633824,3462633855,SG
3462633856,3462633983,US
3462633984,3462634239,SG
-3462634240,3462634247,US
-3462634248,3462634271,SG
-3462634272,3462634367,AE
-3462634368,3462634495,SG
-3462634496,3462634751,US
+3462634240,3462634751,US
3462634752,3462635007,SG
3462635008,3462635263,US
3462635264,3462635519,SG
-3462635520,3462660175,US
-3462660176,3462660191,SG
-3462660192,3462889479,US
-3462889480,3462889487,GB
-3462889488,3462991183,US
-3462991184,3462991191,CA
-3462991192,3463004159,US
+3462635520,3463004159,US
3463004160,3463006207,CO
3463006208,3463032319,US
3463032320,3463032831,PR
@@ -151208,38 +81614,21 @@
3463116800,3463118847,CO
3463118848,3463156735,US
3463156736,3463157759,BO
-3463157760,3463176191,US
-3463176192,3463176703,CW
-3463176704,3463183943,US
-3463183944,3463183951,CN
-3463183952,3463184383,US
+3463157760,3463176447,US
+3463176448,3463176703,CW
+3463176704,3463184383,US
3463184384,3463194623,CA
3463194624,3463198719,US
3463198720,3463213311,CA
-3463213312,3463213567,US
-3463214080,3463215103,US
-3463215104,3463229327,CA
-3463229328,3463229335,US
-3463229336,3463243775,CA
+3463213312,3463215103,US
+3463215104,3463243775,CA
3463243776,3463245055,US
3463245056,3463249663,CA
-3463249664,3463502335,US
-3463502336,3463502399,GB
-3463502400,3463503423,US
-3463503424,3463503519,GB
-3463503520,3463518207,US
+3463249664,3463518207,US
3463518208,3463520255,NL
3463520256,3463536895,US
3463536896,3463537151,NG
-3463537152,3463583567,US
-3463583568,3463583583,UM
-3463583584,3463602687,US
-3463602688,3463602943,PH
-3463602944,3463632383,US
-3463632384,3463632391,CA
-3463632392,3463632399,US
-3463632400,3463632415,CA
-3463632416,3463708671,US
+3463537152,3463708671,US
3463708672,3463774207,CA
3463774208,3464108031,US
3464108032,3464108287,DE
@@ -151257,117 +81646,61 @@
3464173824,3464174591,CA
3464175104,3464175359,US
3464175360,3464180735,CA
-3464180736,3464191791,US
-3464191792,3464191799,ES
-3464191800,3464191911,US
-3464191912,3464191919,ES
-3464191920,3464195943,US
-3464195944,3464195951,AU
-3464195952,3464195959,IT
-3464195960,3464196151,US
-3464196152,3464196159,AU
-3464196160,3464196175,US
-3464196176,3464196183,AU
-3464196184,3464196191,IT
-3464196192,3464196490,US
+3464180736,3464196490,US
3464196491,3464196491,ZA
3464196492,3464208383,US
3464208384,3464216575,CA
-3464216576,3464309903,US
-3464309904,3464309911,CA
-3464309912,3464310463,US
-3464310464,3464310495,AU
-3464310496,3464310591,US
-3464310592,3464310655,AU
-3464310656,3464340479,US
-3464340480,3464340543,CA
-3464340544,3464340551,MU
-3464340552,3464341503,CA
-3464341504,3464341759,US
-3464341760,3464341775,JP
-3464341776,3464341783,AU
-3464341784,3464341799,US
-3464341800,3464341807,CA
-3464341808,3464341815,JP
-3464341816,3464341911,US
-3464341912,3464341919,IE
-3464341920,3464341927,US
-3464341928,3464341935,CV
-3464341936,3464342351,US
-3464342352,3464342359,TR
-3464342360,3464342879,US
-3464342880,3464342887,GB
-3464342888,3464343055,US
-3464343056,3464343063,CN
-3464343064,3464343159,US
-3464343160,3464343167,MQ
-3464343168,3464343271,US
-3464343272,3464343279,CA
-3464343280,3464343391,US
-3464343392,3464343399,GB
-3464343400,3464343423,US
-3464343424,3464343431,SG
-3464343432,3464382463,US
+3464216576,3464243199,US
+3464245248,3464259583,US
+3464261632,3464340479,US
+3464340480,3464341503,CA
+3464341504,3464342287,US
+3464342288,3464342295,VN
+3464342296,3464349695,US
+3464351744,3464382463,US
3464384512,3464388607,CA
-3464388608,3464394751,US
-3464394752,3464396799,LC
-3464396800,3464548367,US
-3464548368,3464548375,AG
-3464548376,3464548391,US
-3464548392,3464548399,AG
-3464548400,3464548415,US
-3464548416,3464548431,AG
-3464548432,3464548479,US
-3464548480,3464548599,AG
-3464548600,3464548607,US
+3464388608,3464391935,US
+3464391936,3464392191,CA
+3464392192,3464394751,US
+3464394752,3464396799,VC
+3464396800,3464415231,US
+3464417280,3464421631,US
+3464421632,3464421887,CA
+3464422400,3464423423,US
+3464423936,3464425983,US
+3464426496,3464426751,GD
+3464426752,3464427007,US
+3464428032,3464428287,US
+3464428800,3464429311,US
+3464429568,3464464383,US
+3464466432,3464472575,US
+3464474624,3464548607,US
3464548608,3464548863,LC
3464548864,3464549119,KN
3464549120,3464549375,VG
-3464549376,3464549391,US
-3464549392,3464549399,AG
-3464549400,3464549415,US
-3464549416,3464549439,AG
-3464549440,3464549503,MS
-3464549504,3464549519,AG
-3464549520,3464549551,US
-3464549552,3464549567,AG
-3464549568,3464549639,US
-3464549640,3464549679,AG
-3464549680,3464549687,US
-3464549688,3464549727,AG
+3464549376,3464549695,US
+3464549696,3464549727,AG
3464549728,3464549759,KN
-3464549760,3464549855,AG
-3464549856,3464549863,US
-3464549864,3464549871,AG
-3464549872,3464549919,US
-3464549920,3464549927,AG
-3464549928,3464549935,US
-3464549936,3464549943,AG
-3464549944,3464549951,US
-3464549952,3464550015,AG
-3464550016,3464550047,US
-3464550048,3464550127,AG
-3464550128,3464550143,US
+3464549760,3464550143,US
3464550144,3464550399,LC
-3464550400,3464551663,US
-3464551664,3464551671,SG
-3464551672,3464551679,US
-3464551680,3464551711,SG
-3464551712,3464626175,US
+3464550400,3464626175,US
3464626176,3464626687,CA
3464626688,3464627199,US
-3464627968,3464630271,CA
+3464627968,3464628735,CA
+3464628736,3464628991,US
+3464628992,3464630271,CA
3464630272,3464631295,US
-3464631296,3464650751,CA
+3464631296,3464631807,CA
+3464632064,3464642047,CA
+3464642560,3464642815,CA
+3464643072,3464647935,CA
+3464648192,3464648703,CA
+3464649216,3464650239,CA
3464650752,3464664063,US
-3464664064,3464691711,CA
-3464691712,3464766143,US
-3464766144,3464766207,IN
-3464766208,3464768607,US
-3464768608,3464768623,IT
-3464768624,3464768767,US
-3464768768,3464768895,CA
-3464768896,3464769535,US
+3464664320,3464684543,CA
+3464684800,3464688383,CA
+3464688640,3464691711,CA
+3464691712,3464769535,US
3464769536,3464773631,CA
3464773632,3464774079,US
3464774080,3464774111,ES
@@ -151377,250 +81710,59 @@
3464785152,3464785407,AR
3464785408,3464802303,US
3464802304,3464806399,CA
-3464806400,3464818943,US
-3464818944,3464819199,PL
-3464819200,3465154559,US
+3464806400,3465154559,US
3465154560,3465158655,BS
3465158656,3465177087,US
3465177088,3465179135,PE
3465179136,3465412607,US
-3465412608,3465412871,HK
-3465412872,3465412895,GB
-3465412896,3465412927,US
-3465412928,3465413055,HK
-3465413056,3465413119,US
-3465413120,3465413127,HK
-3465413128,3465413375,US
-3465413376,3465413383,HK
-3465413384,3465413775,US
-3465413776,3465413799,HK
-3465413800,3465462783,US
+3465412608,3465412863,HK
+3465412864,3465462783,US
3465462784,3465463039,GB
-3465463040,3465463279,US
-3465463280,3465463295,GB
-3465463296,3465463367,US
-3465463368,3465463391,GB
-3465463392,3465463423,US
-3465463424,3465463487,LU
-3465463488,3465464655,US
-3465464656,3465464671,GB
-3465464672,3465464735,US
-3465464736,3465464767,GB
-3465464768,3465466687,US
-3465466688,3465466703,GB
-3465466704,3465466879,US
-3465466880,3465466975,GB
-3465466976,3465467071,US
-3465467072,3465467079,GB
-3465467080,3465468079,US
-3465468080,3465468087,GB
-3465468088,3465468351,US
-3465468352,3465468367,FI
-3465468368,3465468383,US
-3465468384,3465468399,GB
-3465468400,3465468639,US
-3465468640,3465468671,GB
-3465468672,3465468879,US
-3465468880,3465468911,SG
-3465468912,3465468935,US
-3465468936,3465468943,SG
-3465468944,3465469183,US
-3465469184,3465469215,GB
-3465469216,3465469503,US
-3465469504,3465469519,GB
-3465469520,3465470719,US
-3465470720,3465470751,CA
-3465470752,3465510911,US
+3465463040,3465468159,US
+3465468160,3465468415,GB
+3465468416,3465468671,US
+3465468672,3465468927,GB
+3465468928,3465510911,US
3465510912,3465543679,JP
-3465543680,3465953503,US
-3465953504,3465953535,CA
-3465953536,3465953791,US
-3465953792,3465953823,CA
-3465953824,3465953855,US
-3465953856,3465953887,CA
-3465953888,3465954175,US
-3465954176,3465954303,CA
-3465954304,3465954495,US
-3465954496,3465954511,CA
-3465954512,3465954559,US
-3465954560,3465954575,CA
-3465954576,3465954959,US
-3465954960,3465954975,CA
-3465954976,3465955007,US
-3465955008,3465955199,CA
-3465955200,3465955375,US
-3465955376,3465955391,CA
-3465955392,3465956351,US
-3465956352,3465956367,CA
-3465956368,3465961607,US
-3465961608,3465961615,CA
-3465961616,3465961631,US
-3465961632,3465961671,CA
-3465961672,3465961783,US
-3465961784,3465961791,CA
-3465961792,3465961983,US
-3465961984,3465962015,CA
-3465962016,3465962495,US
+3465543680,3465962495,US
3465962496,3465962751,CA
-3465962752,3465982991,US
-3465982992,3465983007,GB
-3465983008,3465983023,US
-3465983024,3465983127,GB
-3465983128,3465983167,US
-3465983168,3465983199,GB
-3465983200,3465983207,ZA
-3465983208,3465983263,GB
-3465983264,3465983271,US
-3465983272,3465983311,GB
-3465983312,3465983463,US
-3465983464,3465983487,GB
-3465983488,3465983511,NL
-3465983512,3465983519,US
-3465983520,3465983551,NL
-3465983552,3465983647,GB
-3465983648,3465983711,US
-3465983712,3465983743,GB
-3465983744,3466044903,US
-3466044904,3466044911,PH
-3466044912,3466067967,US
-3466067968,3466068247,CA
-3466068248,3466068351,US
-3466068352,3466068383,CA
-3466068384,3466068415,US
-3466068416,3466068423,CA
-3466068424,3466068991,US
-3466068992,3466069055,CA
-3466069056,3466069071,US
-3466069072,3466069119,CA
-3466069120,3466069279,US
-3466069280,3466069295,CA
-3466069296,3466071039,US
-3466071040,3466071103,CA
-3466071104,3466158079,US
+3465962752,3466067967,US
+3466067968,3466068223,CA
+3466068224,3466068991,US
+3466068992,3466069247,CA
+3466069248,3466069343,US
+3466069344,3466069375,CA
+3466069376,3466069447,US
+3466069448,3466069455,CA
+3466069456,3466072431,US
+3466072432,3466072439,CA
+3466072440,3466072775,US
+3466072776,3466072783,CA
+3466072784,3466073055,US
+3466073056,3466073087,CA
+3466073088,3466158079,US
3466158080,3466166271,PA
-3466166272,3466282111,US
-3466282112,3466282119,GB
-3466282120,3466282727,US
-3466282728,3466282743,CA
-3466282744,3466283327,US
-3466283328,3466283391,CA
-3466283392,3466285279,US
-3466285280,3466285295,GB
-3466285296,3466286103,US
-3466286104,3466286111,DE
-3466286112,3466287839,US
-3466287840,3466287847,GB
-3466287848,3466290687,US
+3466166272,3466290687,US
3466290688,3466290943,CH
-3466290944,3466294271,US
-3466294272,3466294319,CA
-3466294320,3466295263,US
-3466295264,3466295279,CA
-3466295280,3466295647,US
-3466295648,3466295679,CA
-3466295680,3466295935,US
-3466295936,3466296063,GB
-3466296064,3466296575,US
+3466290944,3466296575,US
3466296576,3466296831,GB
3466296832,3466313727,US
3466313728,3466317823,CA
3466317824,3466489855,US
3466489856,3466490111,CA
-3466490112,3466555199,US
-3466555200,3466555215,CA
-3466555216,3466558207,US
+3466490112,3466558207,US
3466558208,3466558463,EC
3466558464,3466560255,US
3466560256,3466560511,GH
-3466560512,3466627007,US
-3466627008,3466627039,PR
-3466627040,3466661887,US
+3466560512,3466661887,US
3466661888,3466663935,TW
3466663936,3466683135,US
3466683136,3466683391,NG
-3466683392,3466688511,US
-3466688512,3466688767,A2
-3466688768,3466689119,US
-3466689120,3466689135,DM
-3466689136,3466689143,US
-3466689144,3466689151,DM
-3466689152,3466689215,US
-3466689216,3466689247,DM
-3466689248,3466689375,US
-3466689376,3466689391,DM
-3466689392,3466689423,US
-3466689424,3466689439,DM
-3466689440,3466689455,US
-3466689456,3466689535,DM
-3466689536,3466689647,US
-3466689648,3466689695,DM
-3466689696,3466689711,US
-3466689712,3466689727,DM
-3466689728,3466689743,US
-3466689744,3466689759,DM
-3466689760,3466689903,US
-3466689904,3466689999,DM
-3466690000,3466690031,US
-3466690032,3466690095,DM
-3466690096,3466690175,US
-3466690176,3466690207,DM
-3466690208,3466690223,US
-3466690224,3466690239,DM
-3466690240,3466690303,US
-3466690304,3466690383,DM
-3466690384,3466690463,US
-3466690464,3466690479,DM
-3466690480,3466690495,US
-3466690496,3466690559,DM
-3466690560,3466691231,US
-3466691232,3466691247,DM
-3466691248,3466706975,US
-3466706976,3466707007,DM
-3466707008,3466707199,US
-3466707200,3466707231,DM
-3466707232,3466707311,US
-3466707312,3466707359,DM
-3466707360,3466707375,US
-3466707376,3466707407,DM
-3466707408,3466707415,US
-3466707416,3466707455,DM
-3466707456,3466708991,US
-3466708992,3466709007,DM
-3466709008,3466709023,US
-3466709024,3466709039,DM
-3466709040,3466709087,US
-3466709088,3466709103,DM
-3466709104,3466709183,US
-3466709184,3466709215,DM
-3466709216,3466709247,US
-3466709248,3466709391,DM
-3466709392,3466709407,US
-3466709408,3466709503,DM
-3466709504,3466709631,US
-3466709632,3466709647,DM
-3466709648,3466709727,US
-3466709728,3466709759,DM
-3466709760,3466710271,US
-3466710272,3466710351,DM
-3466710352,3466710431,US
-3466710432,3466710447,DM
-3466710448,3466710463,US
-3466710464,3466710495,DM
-3466710496,3466710751,US
-3466710752,3466710767,DM
-3466710768,3466710783,US
-3466710784,3466710895,DM
-3466710896,3466710975,US
-3466710976,3466710991,DM
-3466710992,3466711007,US
-3466711008,3466711023,DM
-3466711024,3466734847,US
+3466683392,3466734847,US
3466734848,3466735103,RU
3466735104,3466756095,US
3466756096,3466772479,CA
-3466772480,3466784767,US
-3466784768,3466784783,PH
-3466784784,3466846207,US
+3466772480,3466846207,US
3466846208,3466854399,CA
3466854400,3466860799,US
3466860800,3466861311,FR
@@ -151632,41 +81774,24 @@
3466914304,3466914559,FR
3466914560,3466929407,US
3466929408,3466929663,IT
-3466929664,3466937667,US
-3466937668,3466937669,DE
-3466937670,3466937670,EU
-3466937671,3466937731,DE
-3466937732,3466938444,US
+3466929664,3466937663,US
+3466937664,3466937669,DE
+3466937670,3466937670,US
+3466937671,3466937727,DE
+3466937728,3466938444,US
3466938445,3466938448,HK
-3466938449,3466958079,US
+3466938449,3466938807,US
+3466938808,3466938811,GB
+3466938812,3466958079,US
3466958080,3466958335,CA
-3466958336,3466958591,GB
-3466958592,3466976767,US
-3466976768,3466977023,US
-3466977024,3467051007,US
-3467051008,3467116543,CA
-3467116544,3467145351,US
-3467145352,3467145359,DE
-3467145360,3467145743,US
-3467145744,3467145751,DE
-3467145752,3467145815,US
-3467145816,3467145823,DE
-3467145824,3467145831,CH
-3467145832,3467145839,US
-3467145840,3467145847,HK
-3467145848,3467145855,DE
-3467145856,3467146495,US
-3467146496,3467146559,CO
-3467146560,3467146591,DE
-3467146592,3467146655,US
-3467146656,3467146671,CN
-3467146672,3467378687,US
+3466958336,3467051007,US
+3467051008,3467068927,CA
+3467069440,3467116543,CA
+3467116544,3467378687,US
3467378688,3467444223,CA
3467444224,3467554815,US
3467554816,3467567103,CA
-3467567104,3467619935,US
-3467619936,3467619967,CA
-3467619968,3467706367,US
+3467567104,3467706367,US
3467706368,3467902975,CA
3467902976,3467964415,US
3467964416,3467968511,CA
@@ -151686,33 +81811,19 @@
3468041216,3468041471,FI
3468041472,3468041727,US
3468041728,3468041983,TW
-3468041984,3468042367,US
-3468042368,3468042431,IT
-3468042432,3468042495,US
+3468041984,3468042495,US
3468042496,3468042751,AT
-3468042752,3468043135,US
-3468043136,3468043263,DK
-3468043264,3468044799,US
-3468044800,3468044927,GB
-3468044928,3468045055,DK
+3468042752,3468045055,US
3468045056,3468045311,DE
-3468045312,3468045695,US
-3468045696,3468045823,ZA
+3468045312,3468045823,US
3468045824,3468046079,NO
3468046080,3468046335,ZA
3468046336,3468046591,FR
-3468046592,3468046719,US
-3468046720,3468046847,DE
+3468046592,3468046847,US
3468046848,3468047103,IT
3468047104,3468047359,US
3468047360,3468047615,DE
-3468047616,3468047743,US
-3468047744,3468047807,LU
-3468047808,3468047871,US
-3468047872,3468047887,ES
-3468047888,3468047999,US
-3468048000,3468048127,DE
-3468048128,3468048383,US
+3468047616,3468048383,US
3468048384,3468048639,FR
3468048640,3468049407,US
3468049408,3468049663,GB
@@ -151720,12 +81831,7 @@
3468049920,3468050175,IT
3468050176,3468050431,US
3468050432,3468050687,SE
-3468050688,3468050943,US
-3468050944,3468051007,IT
-3468051008,3468051231,US
-3468051232,3468051263,DK
-3468051264,3468051327,AT
-3468051328,3468052479,US
+3468050688,3468052479,US
3468052480,3468052735,ES
3468052736,3468052991,GB
3468052992,3468053759,US
@@ -151735,853 +81841,107 @@
3468055552,3468055807,IT
3468055808,3468056575,US
3468056576,3468056831,NO
-3468056832,3468056959,DK
-3468056960,3468057023,IN
-3468057024,3468057087,US
-3468057088,3468057215,LU
-3468057216,3468057375,GB
-3468057376,3468057599,US
+3468056832,3468057599,US
3468057600,3468057855,IL
-3468057856,3468058111,US
-3468058112,3468058175,BE
-3468058176,3468058239,CH
-3468058240,3468058367,GB
-3468058368,3468058368,US
-3468058369,3468058432,IT
-3468058433,3468058559,US
-3468058560,3468058623,SG
-3468058624,3468058687,US
+3468057856,3468058687,US
3468058688,3468058719,ES
3468058720,3468059647,US
3468059648,3468059903,FR
3468059904,3468060159,DE
3468060160,3468060671,FR
-3468060672,3468060927,US
-3468060928,3468060991,FR
-3468060992,3468061119,US
-3468061120,3468061183,CH
-3468061184,3468061695,US
+3468060672,3468061695,US
3468061696,3468061951,JP
-3468061952,3468062079,US
-3468062080,3468062143,GB
-3468062144,3468062335,US
-3468062336,3468062399,TW
-3468062400,3468062463,DE
+3468061952,3468062463,US
3468062464,3468062719,AT
3468062720,3468063231,NL
-3468063232,3468063359,US
-3468063360,3468063423,RO
-3468063424,3468063487,US
+3468063232,3468063487,US
3468063488,3468063743,BE
3468063744,3468063999,US
3468064000,3468064255,HK
-3468064256,3468064511,US
-3468064512,3468064527,BE
-3468064528,3468064543,US
-3468064544,3468064575,NO
-3468064576,3468064639,US
-3468064640,3468064703,LU
-3468064704,3468064735,US
-3468064736,3468064767,CH
+3468064256,3468064767,US
3468064768,3468065023,DE
3468065024,3468065279,US
3468065280,3468065535,DE
-3468065536,3468065791,US
-3468065792,3468065919,IT
-3468065920,3468065951,GB
-3468065952,3468065983,LU
-3468065984,3468065999,CZ
-3468066000,3468066015,BE
-3468066016,3468066047,DE
-3468066048,3468066239,US
-3468066240,3468066271,IE
-3468066272,3468066319,US
-3468066320,3468066327,FR
-3468066328,3468066463,US
-3468066464,3468066495,SE
-3468066496,3468066527,CH
-3468066528,3468066559,US
-3468066560,3468066623,IT
-3468066624,3468067199,US
-3468067200,3468067231,CA
-3468067232,3468067263,US
-3468067264,3468067295,IL
-3468067296,3468067327,US
-3468067328,3468067359,BR
-3468067360,3468067391,US
-3468067392,3468067399,BR
-3468067400,3468067551,US
-3468067552,3468067567,GB
-3468067568,3468067759,US
-3468067760,3468067775,AR
-3468067776,3468068095,US
+3468065536,3468068095,US
3468068096,3468068351,MC
3468068352,3468068863,US
3468068864,3468069631,CA
-3468069632,3468071791,US
-3468071792,3468071807,MX
-3468071808,3468071871,US
-3468071872,3468071887,MX
-3468071888,3468072351,US
-3468072352,3468072383,CA
-3468072384,3468073727,US
-3468073728,3468073791,CA
-3468073792,3468073855,US
-3468073856,3468073919,CA
-3468073920,3468074463,US
-3468074464,3468074479,GB
-3468074480,3468075919,US
-3468075920,3468075935,BR
-3468075936,3468075967,US
-3468075968,3468075999,MX
-3468076000,3468076031,PH
-3468076032,3468077631,US
-3468077632,3468077663,AR
-3468077664,3468079327,US
-3468079328,3468079359,BR
-3468079360,3468079487,US
-3468079488,3468079551,JP
-3468079552,3468081407,US
+3468069632,3468081407,US
3468081408,3468081663,DE
3468081664,3468081919,AT
3468081920,3468082431,US
3468082432,3468082687,NO
-3468082688,3468083311,US
-3468083312,3468083327,IN
-3468083328,3468083663,US
-3468083664,3468083679,ID
-3468083680,3468083967,US
+3468082688,3468083967,US
3468083968,3468084223,AU
3468084224,3468084735,US
3468084736,3468084991,SG
-3468084992,3468085055,CA
-3468085056,3468085119,US
-3468085120,3468085183,CA
-3468085184,3468085191,JP
-3468085192,3468085199,PH
-3468085200,3468085207,CN
-3468085208,3468085247,US
-3468085248,3468085279,BR
-3468085280,3468085311,US
-3468085312,3468085375,BR
-3468085376,3468085439,CN
-3468085440,3468085503,BR
-3468085504,3468085535,JP
-3468085536,3468085567,US
-3468085568,3468085599,HK
-3468085600,3468085607,US
-3468085608,3468085623,HK
-3468085624,3468085663,US
-3468085664,3468085695,ID
-3468085696,3468085759,US
+3468084992,3468085759,US
3468085760,3468086015,ID
-3468086016,3468086143,US
-3468086144,3468086271,SG
-3468086272,3468086783,US
-3468086784,3468086799,HK
-3468086800,3468086879,US
-3468086880,3468086911,SG
-3468086912,3468087807,US
+3468086016,3468087807,US
3468087808,3468088063,SG
-3468088064,3468088191,US
-3468088192,3468088207,HK
-3468088208,3468088223,US
-3468088224,3468088231,HK
-3468088232,3468088335,US
-3468088336,3468088351,JP
-3468088352,3468088383,ID
-3468088384,3468088415,US
-3468088416,3468088431,TW
-3468088432,3468088959,US
-3468088960,3468088991,JP
-3468088992,3468089023,US
-3468089024,3468089055,HK
-3468089056,3468089663,US
-3468089664,3468089695,JP
-3468089696,3468089823,US
-3468089824,3468089855,SG
-3468089856,3468090623,US
-3468090624,3468090687,IT
-3468090688,3468090719,MY
-3468090720,3468090727,US
-3468090728,3468090735,JP
-3468090736,3468090751,CN
-3468090752,3468090815,US
-3468090816,3468090879,CN
-3468090880,3468091135,US
-3468091136,3468091199,JP
-3468091200,3468091391,US
+3468088064,3468091391,US
3468091392,3468091647,NL
-3468091648,3468091903,US
-3468091904,3468091935,KR
-3468091936,3468092031,US
-3468092032,3468092063,TH
-3468092064,3468092127,US
-3468092128,3468092159,SG
-3468092160,3468093247,US
-3468093248,3468093263,JP
-3468093264,3468093279,US
-3468093280,3468093287,JP
-3468093288,3468093343,US
-3468093344,3468093375,HK
-3468093376,3468093391,SG
-3468093392,3468093407,ID
-3468093408,3468093439,AU
-3468093440,3468093695,US
+3468091648,3468093695,US
3468093696,3468093951,DE
-3468093952,3468094207,US
-3468094208,3468094223,HK
-3468094224,3468094271,US
-3468094272,3468094303,KR
-3468094304,3468094335,ID
-3468094336,3468095135,US
-3468095136,3468095167,JP
-3468095168,3468095231,US
+3468093952,3468095231,US
3468095232,3468095487,SE
-3468095488,3468096255,US
-3468096256,3468096383,CA
-3468096384,3468096447,TW
-3468096448,3468096479,US
-3468096480,3468096511,MY
+3468095488,3468096511,US
3468096512,3468096767,NO
-3468096768,3468096895,PH
-3468096896,3468097023,AU
-3468097024,3468098047,US
-3468098048,3468098079,JP
-3468098080,3468098111,SG
-3468098112,3468098239,US
-3468098240,3468098271,SG
-3468098272,3468099327,US
+3468096768,3468099327,US
3468099328,3468099583,FR
3468099584,3468127743,US
3468127744,3468128255,IN
-3468128256,3468296191,US
+3468128256,3468142591,US
+3468144640,3468296191,US
3468296192,3468361727,CA
-3468361728,3468427359,US
-3468427360,3468427375,IL
-3468427376,3468427935,US
-3468427936,3468427967,AU
-3468427968,3468428191,US
-3468428192,3468428207,BG
-3468428208,3468428415,US
-3468428416,3468428447,GR
-3468428448,3468428543,US
-3468428544,3468428559,CA
-3468428560,3468428607,US
-3468428608,3468428671,CA
-3468428672,3468428927,US
-3468428928,3468428991,SE
-3468428992,3468430495,US
-3468430496,3468430527,CA
-3468430528,3468431999,US
-3468432000,3468432063,CA
-3468432064,3468432671,US
-3468432672,3468432687,ES
-3468432688,3468433167,US
-3468433168,3468433183,CA
-3468433184,3468433215,US
-3468433216,3468433279,SE
-3468433280,3468433439,US
-3468433440,3468433455,AU
-3468433456,3468435359,US
-3468435360,3468435423,AU
-3468435424,3468443647,US
+3468361728,3468443647,US
3468443648,3468460031,CA
3468460032,3468468223,BM
3468468224,3468545791,US
3468545792,3468546047,SG
-3468546048,3468619007,US
+3468546048,3468598527,US
+3468598528,3468598783,SG
+3468598784,3468599039,NL
+3468599040,3468599295,SG
+3468599296,3468619007,US
3468619008,3468619263,CA
3468619264,3468623871,US
-3468623872,3468627663,CA
-3468627664,3468627679,US
-3468627680,3468628119,CA
-3468628120,3468628127,GB
-3468628128,3468628143,CA
-3468628144,3468628159,US
-3468628160,3468628183,CA
-3468628184,3468628191,US
-3468628192,3468631583,CA
-3468631584,3468631615,US
-3468631616,3468631679,CA
-3468631680,3468631695,US
-3468631696,3468632735,CA
-3468632736,3468632743,US
-3468632744,3468632975,CA
-3468632976,3468632991,US
-3468632992,3468633759,CA
-3468633760,3468633791,US
-3468633792,3468635583,CA
-3468635584,3468635647,US
-3468635648,3468635919,CA
-3468635920,3468635935,US
-3468635936,3468637839,CA
-3468637840,3468637847,SK
-3468637848,3468638143,CA
-3468638144,3468638159,US
-3468638160,3468639935,CA
-3468639936,3468639967,US
-3468639968,3468656639,CA
-3468656640,3468799999,US
-3468800000,3468800255,GB
-3468800256,3468978131,US
-3468978132,3468978133,US
-3468978134,3469032191,US
-3469032192,3469032447,AP
-3469032448,3469055743,US
+3468623872,3468656639,CA
+3468656640,3469010687,US
+3469010688,3469010943,AU
+3469010944,3469055743,US
3469055744,3469055999,CA
-3469056000,3469070335,US
+3469056000,3469068287,US
+3469068800,3469070335,US
3469070336,3469070591,CA
3469070592,3469176319,US
3469176320,3469176575,MX
3469176576,3469186303,US
3469186304,3469186559,MX
-3469186560,3469893631,US
+3469186560,3469859583,US
+3469859584,3469859839,CA
+3469859840,3469893631,US
3469893632,3469901823,CA
-3469901824,3470131199,US
+3469901824,3469989887,US
+3469990400,3470131199,US
3470131200,3470135295,AG
3470135296,3470137343,LC
3470137344,3470139391,VG
3470139392,3470148095,US
3470148096,3470148351,CA
-3470148352,3470148543,US
-3470148544,3470148575,EG
-3470148576,3470148607,US
+3470148352,3470148607,US
3470148608,3470148863,CA
-3470148864,3470149055,US
-3470149056,3470149087,EG
-3470149088,3470149375,US
-3470149376,3470149407,EG
-3470149408,3470149887,US
-3470149888,3470149919,BR
-3470149920,3470150015,US
-3470150016,3470150047,EG
-3470150048,3470150079,US
-3470150080,3470150111,EE
-3470150112,3470150303,US
-3470150304,3470150335,EG
-3470150336,3470151295,US
-3470151296,3470151359,CA
-3470151360,3470151679,US
-3470151680,3470151935,CA
+3470148864,3470151807,US
+3470151808,3470151871,CA
+3470151872,3470151935,US
3470151936,3470152191,EG
-3470152192,3470153087,US
-3470153088,3470153119,EG
-3470153120,3470154079,US
-3470154080,3470154111,EG
-3470154112,3470154687,US
-3470154688,3470154719,HK
-3470154720,3470155743,US
-3470155744,3470155775,EE
-3470155776,3470184476,US
-3470184477,3470184480,CN
-3470184481,3470184492,US
-3470184493,3470184496,ID
-3470184497,3470184544,US
-3470184545,3470184545,MY
-3470184546,3470184549,US
-3470184550,3470184550,SI
-3470184551,3470184552,US
-3470184553,3470184553,SI
-3470184554,3470184557,IN
-3470184558,3470184574,US
-3470184575,3470184575,BE
-3470184576,3470184577,CA
-3470184578,3470184581,MX
-3470184582,3470184593,US
-3470184594,3470184597,JP
-3470184598,3470184617,US
-3470184618,3470184619,NZ
-3470184620,3470184639,US
-3470184640,3470184643,TW
-3470184644,3470184671,US
-3470184672,3470184675,MY
-3470184676,3470184683,US
-3470184684,3470184687,BR
-3470184688,3470184691,CA
-3470184692,3470184699,US
-3470184700,3470184701,AU
-3470184702,3470184722,US
-3470184723,3470184723,MY
-3470184724,3470184731,US
-3470184732,3470184733,NZ
-3470184734,3470184737,US
-3470184738,3470184741,SG
-3470184742,3470184746,US
-3470184747,3470184750,MY
-3470184751,3470184769,US
-3470184770,3470184773,ID
-3470184774,3470184785,US
-3470184786,3470184789,NZ
-3470184790,3470184801,US
-3470184802,3470184805,TW
-3470184806,3470184809,US
-3470184810,3470184813,MY
-3470184814,3470184817,CA
-3470184818,3470184821,US
-3470184822,3470184825,AU
-3470184826,3470184829,US
-3470184830,3470184833,JP
-3470184834,3470184837,US
-3470184838,3470184841,GB
-3470184842,3470184849,US
-3470184850,3470184853,JP
-3470184854,3470184857,SG
-3470184858,3470184861,RO
-3470184862,3470184865,US
-3470184866,3470184869,AU
-3470184870,3470184873,HK
-3470184874,3470184881,US
-3470184882,3470184884,AU
-3470184885,3470184905,US
-3470184906,3470184907,SG
-3470184908,3470184919,US
-3470184920,3470184923,MX
-3470184924,3470184929,US
-3470184930,3470184933,AU
-3470184934,3470184957,US
-3470184958,3470184958,LK
-3470184959,3470184975,US
-3470184976,3470184976,MY
-3470184977,3470184990,US
-3470184991,3470184994,NZ
-3470184995,3470185010,US
-3470185011,3470185014,GB
-3470185015,3470185016,AU
-3470185017,3470185020,US
-3470185021,3470185021,BE
-3470185022,3470185050,US
-3470185051,3470185054,IN
-3470185055,3470185062,US
-3470185063,3470185066,BR
-3470185067,3470185070,PL
-3470185071,3470185082,US
-3470185083,3470185086,AU
-3470185087,3470185090,IN
-3470185091,3470185138,US
-3470185139,3470185142,ID
-3470185143,3470185146,US
-3470185147,3470185150,AR
-3470185151,3470185154,AU
-3470185155,3470185166,US
-3470185167,3470185170,CN
-3470185171,3470185199,US
-3470185200,3470185203,ID
-3470185204,3470185207,GB
-3470185208,3470185213,US
-3470185214,3470185214,LK
-3470185215,3470185234,US
-3470185235,3470185238,AE
-3470185239,3470185242,NL
-3470185243,3470185250,US
-3470185251,3470185254,CA
-3470185255,3470185258,SG
-3470185259,3470185262,AU
-3470185263,3470185270,US
-3470185271,3470185274,ID
-3470185275,3470185278,AU
-3470185279,3470185282,CA
-3470185283,3470185286,US
-3470185287,3470185290,CN
-3470185291,3470185294,US
-3470185295,3470185295,MY
-3470185296,3470185312,US
-3470185313,3470185316,TW
-3470185317,3470185336,US
-3470185337,3470185340,AU
-3470185341,3470185344,US
-3470185345,3470185348,EC
-3470185349,3470185352,US
-3470185353,3470185353,NZ
-3470185354,3470185365,US
-3470185366,3470185367,AU
-3470185368,3470185371,PH
-3470185372,3470185379,US
-3470185380,3470185383,AU
-3470185384,3470185399,US
-3470185400,3470185403,ID
-3470185404,3470185415,US
-3470185416,3470185419,BE
-3470185420,3470185423,NL
-3470185424,3470185427,CA
-3470185428,3470185431,US
-3470185432,3470185435,CN
-3470185436,3470185451,US
-3470185452,3470185455,VE
-3470185456,3470185463,US
-3470185464,3470185467,NZ
-3470185468,3470185468,US
-3470185469,3470185469,LK
-3470185470,3470186003,US
-3470186004,3470186007,MX
-3470186008,3470186011,CA
-3470186012,3470186012,CA
-3470186013,3470186015,CA
-3470186016,3470186019,AU
-3470186020,3470186060,US
-3470186061,3470186064,CN
-3470186065,3470186068,AU
-3470186069,3470186072,US
-3470186073,3470186076,IN
-3470186077,3470186084,US
-3470186085,3470186085,BE
-3470186086,3470186089,US
-3470186090,3470186093,SG
-3470186094,3470186097,CA
-3470186098,3470186113,US
-3470186114,3470186117,AU
-3470186118,3470186251,US
-3470186252,3470186255,CN
-3470186256,3470186267,US
-3470186268,3470186271,MX
-3470186272,3470186275,SG
-3470186276,3470186283,US
-3470186284,3470186287,CA
-3470186288,3470186306,US
-3470186307,3470186310,MY
-3470186311,3470186314,TH
-3470186315,3470186318,AU
-3470186319,3470186324,US
-3470186325,3470186328,CN
-3470186329,3470186329,NZ
-3470186330,3470186338,US
-3470186339,3470186342,UA
-3470186343,3470186513,US
-3470186514,3470186517,CA
-3470186518,3470186525,US
-3470186526,3470186529,ID
-3470186530,3470186537,GB
-3470186538,3470186573,US
-3470186574,3470186577,CH
-3470186578,3470186593,US
-3470186594,3470186597,CA
-3470186598,3470186601,DE
-3470186602,3470186605,US
-3470186606,3470186609,CA
-3470186610,3470186613,ES
-3470186614,3470186617,US
-3470186618,3470186621,RO
-3470186622,3470186625,BR
-3470186626,3470186637,US
-3470186638,3470186641,BR
-3470186642,3470186669,US
-3470186670,3470186673,AU
-3470186674,3470186677,US
-3470186678,3470186681,CA
-3470186682,3470186685,US
-3470186686,3470186689,IL
-3470186690,3470186693,IN
-3470186694,3470186697,ES
-3470186698,3470186701,CA
-3470186702,3470186705,AU
-3470186706,3470186721,US
-3470186722,3470186725,IN
-3470186726,3470186729,US
-3470186730,3470186733,IN
-3470186734,3470186737,US
-3470186738,3470186741,CA
-3470186742,3470186745,IL
-3470186746,3470186757,US
-3470186758,3470186761,CA
-3470186762,3470186765,US
-3470186766,3470186769,HU
-3470186770,3470186785,US
-3470186786,3470186789,GB
-3470186790,3470186805,US
-3470186806,3470186809,IN
-3470186810,3470186813,US
-3470186814,3470186817,EE
-3470186818,3470186825,US
-3470186826,3470186829,GB
-3470186830,3470186833,IN
-3470186834,3470186837,US
-3470186838,3470186841,AR
-3470186842,3470186845,CA
-3470186846,3470186849,EG
-3470186850,3470186853,US
-3470186854,3470186857,KW
-3470186858,3470186861,US
-3470186862,3470186865,AR
-3470186866,3470186873,US
-3470186874,3470186877,AE
-3470186878,3470186881,CA
-3470186882,3470186885,US
-3470186886,3470186889,FR
-3470186890,3470186891,CA
-3470186892,3470186895,FR
-3470186896,3470186899,AU
-3470186900,3470186903,US
-3470186904,3470186907,IN
-3470186908,3470186933,US
-3470186934,3470186935,BR
-3470186936,3470186943,US
-3470186944,3470186947,CA
-3470186948,3470186963,US
-3470186964,3470186967,TR
-3470186968,3470186989,US
-3470186990,3470186993,PE
-3470186994,3470186997,US
-3470186998,3470187001,GB
-3470187002,3470187041,US
-3470187042,3470187045,GB
-3470187046,3470187057,US
-3470187058,3470187061,MY
-3470187062,3470187073,US
-3470187074,3470187077,IT
-3470187078,3470187081,CA
-3470187082,3470187085,CZ
-3470187086,3470187089,US
-3470187090,3470187093,TR
-3470187094,3470187097,GB
-3470187098,3470187101,IN
-3470187102,3470187109,US
-3470187110,3470187113,BR
-3470187114,3470187117,VN
-3470187118,3470187125,US
-3470187126,3470187129,GB
-3470187130,3470187133,AR
-3470187134,3470187137,BA
-3470187138,3470187141,US
-3470187142,3470187145,CA
-3470187146,3470187153,IN
-3470187154,3470187157,ID
-3470187158,3470187161,US
-3470187162,3470187165,AU
-3470187166,3470187169,NO
-3470187170,3470187181,US
-3470187182,3470187185,GR
-3470187186,3470187229,US
-3470187230,3470187231,CA
-3470187232,3470187235,GB
-3470187236,3470187247,US
-3470187248,3470187251,GB
-3470187252,3470187255,US
-3470187256,3470187259,ES
-3470187260,3470187269,US
-3470187270,3470187273,AU
-3470187274,3470187309,US
-3470187310,3470187313,ES
-3470187314,3470187317,CA
-3470187318,3470187335,US
-3470187336,3470187339,CA
-3470187340,3470187343,GR
-3470187344,3470187356,US
-3470187357,3470187360,GB
-3470187361,3470187364,BG
-3470187365,3470187368,US
-3470187369,3470187372,GR
-3470187373,3470187380,US
-3470187381,3470187384,AR
-3470187385,3470187388,US
-3470187389,3470187392,GB
-3470187393,3470187396,IN
-3470187397,3470187400,RU
-3470187401,3470187404,GB
-3470187405,3470187408,DO
-3470187409,3470187416,US
-3470187417,3470187420,IN
-3470187421,3470187429,US
-3470187430,3470187431,RU
-3470187432,3470187437,US
-3470187438,3470187441,PH
-3470187442,3470187446,US
-3470187447,3470187450,CA
-3470187451,3470187454,US
-3470187455,3470187458,IT
-3470187459,3470187470,US
-3470187471,3470187474,PT
-3470187475,3470187502,US
-3470187503,3470187503,JP
-3470187504,3470187511,US
-3470187512,3470187515,UA
-3470187516,3470187525,US
-3470187526,3470187529,EC
-3470187530,3470187557,US
-3470187558,3470187561,AE
-3470187562,3470187569,US
-3470187570,3470187573,IN
-3470187574,3470187577,US
-3470187578,3470187581,GB
-3470187582,3470187589,US
-3470187590,3470187593,IT
-3470187594,3470187606,US
-3470187607,3470187610,IL
-3470187611,3470187614,PL
-3470187615,3470187618,US
-3470187619,3470187622,IT
-3470187623,3470187634,US
-3470187635,3470187638,SG
-3470187639,3470187646,US
-3470187647,3470187650,IT
-3470187651,3470187654,AR
-3470187655,3470187666,US
-3470187667,3470187670,IN
-3470187671,3470187674,RS
-3470187675,3470187678,US
-3470187679,3470187682,PT
-3470187683,3470187686,US
-3470187687,3470187690,JP
-3470187691,3470187702,US
-3470187703,3470187706,GB
-3470187707,3470187725,US
-3470187726,3470187729,GB
-3470187730,3470187741,US
-3470187742,3470187745,VN
-3470187746,3470187755,US
-3470187756,3470187759,PH
-3470187760,3470187763,ZA
-3470187764,3470187781,US
-3470187782,3470187785,SI
-3470187786,3470187801,US
-3470187802,3470187805,IN
-3470187806,3470187813,US
-3470187814,3470187817,HK
-3470187818,3470187825,US
-3470187826,3470187829,CA
-3470187830,3470187841,US
-3470187842,3470187845,TR
-3470187846,3470187857,US
-3470187858,3470187861,MX
-3470187862,3470187867,US
-3470187868,3470187871,IL
-3470187872,3470187885,US
-3470187886,3470187889,IN
-3470187890,3470187940,US
-3470187941,3470187944,SA
-3470187945,3470187952,US
-3470187953,3470187956,NO
-3470187957,3470187960,US
-3470187961,3470187964,IN
-3470187965,3470187976,US
-3470187977,3470187980,ES
-3470187981,3470187988,US
-3470187989,3470187992,CA
-3470187993,3470188004,US
-3470188005,3470188008,AU
-3470188009,3470188016,SE
-3470188017,3470188024,US
-3470188025,3470188028,GB
-3470188029,3470188041,US
-3470188042,3470188045,TH
-3470188046,3470188049,GB
-3470188050,3470188069,US
-3470188070,3470188073,NZ
-3470188074,3470188095,US
-3470188096,3470188099,GB
-3470188100,3470188103,US
-3470188104,3470188107,CA
-3470188108,3470188111,US
+3470152192,3470188111,US
3470188112,3470188115,CA
-3470188116,3470188131,US
-3470188132,3470188135,AU
-3470188136,3470188151,US
-3470188152,3470188155,KW
-3470188156,3470188163,US
-3470188164,3470188167,ID
-3470188168,3470188171,US
-3470188172,3470188175,NL
-3470188176,3470188199,US
-3470188200,3470188203,AR
-3470188204,3470188207,US
-3470188208,3470188211,ES
-3470188212,3470188215,TR
-3470188216,3470188227,US
-3470188228,3470188231,GB
-3470188232,3470188243,US
-3470188244,3470188247,CA
-3470188248,3470188251,BE
-3470188252,3470188255,US
-3470188256,3470188259,CA
-3470188260,3470188275,US
-3470188276,3470188279,IN
-3470188280,3470188283,GR
-3470188284,3470188293,US
-3470188294,3470188295,RU
-3470188296,3470188347,US
-3470188348,3470188351,HU
-3470188352,3470188393,US
-3470188394,3470188397,GB
-3470188398,3470188405,US
-3470188406,3470188409,GR
-3470188410,3470188425,US
-3470188426,3470188433,ES
-3470188434,3470188437,AR
-3470188438,3470188483,US
-3470188484,3470188487,PH
-3470188488,3470188491,ID
-3470188492,3470188503,US
-3470188504,3470188507,CA
-3470188508,3470188509,US
-3470188510,3470188510,IL
-3470188511,3470188521,US
-3470188522,3470188541,HK
-3470188542,3470192639,US
-3470192640,3470194915,CA
-3470194916,3470194935,US
-3470194936,3470194939,CA
-3470194940,3470194943,US
-3470194944,3470196463,CA
-3470196464,3470196479,US
-3470196480,3470196735,CA
-3470196736,3470360623,US
-3470360624,3470360631,CA
-3470360632,3470360639,SE
-3470360640,3470360687,US
-3470360688,3470360695,AF
-3470360696,3470360895,US
-3470360896,3470360911,KW
-3470360912,3470360927,US
-3470360928,3470360935,CA
-3470360936,3470361023,US
-3470361024,3470361031,SE
-3470361032,3470361039,US
-3470361040,3470361055,SE
-3470361056,3470361663,US
-3470361664,3470361671,CA
-3470361672,3470361703,US
-3470361704,3470361711,AF
-3470361712,3470361743,US
-3470361744,3470361759,SE
-3470361760,3470361771,US
-3470361772,3470361775,AE
-3470361776,3470361815,US
-3470361816,3470361823,GB
-3470361824,3470362099,US
-3470362100,3470362103,AE
-3470362104,3470362159,US
-3470362160,3470362167,AF
-3470362168,3470362263,US
-3470362264,3470362271,NZ
-3470362272,3470362559,US
-3470362560,3470362591,SE
-3470362592,3470362623,US
-3470362624,3470362687,SE
-3470362688,3470362731,US
-3470362732,3470362735,AE
-3470362736,3470362847,US
-3470362848,3470362855,AF
-3470362856,3470362895,US
-3470362896,3470362911,AU
-3470362912,3470363455,US
-3470363456,3470363519,SE
-3470363520,3470363551,US
-3470363552,3470363555,AF
-3470363556,3470363599,US
-3470363600,3470363615,KW
-3470363616,3470363631,ES
-3470363632,3470363759,US
-3470363760,3470363767,CA
-3470363768,3470363903,US
-3470363904,3470363919,CA
-3470363920,3470363967,US
-3470363968,3470363983,CA
-3470363984,3470364095,US
-3470364096,3470364103,EG
-3470364104,3470364415,US
-3470364416,3470364479,SE
-3470364480,3470364559,US
-3470364560,3470364575,HN
-3470364576,3470458879,US
+3470188116,3470192639,US
+3470192640,3470194927,CA
+3470194928,3470194935,US
+3470194936,3470196735,CA
+3470196736,3470458879,US
3470458880,3470475263,KR
3470475264,3470509311,US
3470509312,3470509567,CA
@@ -152590,154 +81950,14 @@
3470559232,3470573567,US
3470573568,3470575615,CA
3470575616,3470610431,US
-3470610432,3470614527,BR
-3470614528,3470643615,US
-3470643616,3470643631,CA
-3470643632,3470643647,US
-3470643648,3470643711,CA
-3470643712,3470645511,US
-3470645512,3470645519,GB
-3470645520,3470645527,FR
-3470645528,3470645567,US
-3470645568,3470645575,CA
-3470645576,3470645583,US
-3470645584,3470645591,FR
-3470645592,3470645623,US
-3470645624,3470645631,BR
-3470645632,3470645655,US
-3470645656,3470645663,RU
-3470645664,3470645687,US
-3470645688,3470645695,ES
-3470645696,3470645731,US
-3470645732,3470645735,AU
-3470645736,3470645739,CN
-3470645740,3470645743,US
-3470645744,3470645747,ES
-3470645748,3470645751,US
-3470645752,3470645759,BR
-3470645760,3470645791,US
-3470645792,3470645799,CN
-3470645800,3470645863,US
-3470645864,3470645871,IN
-3470645872,3470646015,US
-3470646016,3470646019,BR
-3470646020,3470646055,US
-3470646056,3470646063,ES
-3470646064,3470646087,US
-3470646088,3470646095,ES
-3470646096,3470646103,US
-3470646104,3470646119,BR
-3470646120,3470646135,US
-3470646136,3470646143,AU
-3470646144,3470646151,CA
-3470646152,3470646159,AU
-3470646160,3470646167,US
-3470646168,3470646175,BR
-3470646176,3470646215,US
-3470646216,3470646223,BR
-3470646224,3470646231,IL
-3470646232,3470646239,US
-3470646240,3470646247,IL
-3470646248,3470646255,DE
-3470646256,3470646263,AU
-3470646264,3470646271,AR
-3470646272,3470646279,US
-3470646280,3470646287,CN
-3470646288,3470646359,US
-3470646360,3470646367,ZA
-3470646368,3470646375,US
-3470646376,3470646383,BR
-3470646384,3470646415,US
-3470646416,3470646423,CA
-3470646424,3470646431,FR
-3470646432,3470646487,US
-3470646488,3470646495,PL
-3470646496,3470646503,BR
-3470646504,3470646527,US
-3470646528,3470646543,FR
-3470646544,3470646567,US
-3470646568,3470646575,BR
-3470646576,3470646583,US
-3470646584,3470646591,LK
+3470610432,3470614527,AR
+3470614528,3470646591,US
3470646592,3470646599,CN
-3470646600,3470646607,US
-3470646608,3470646623,ZA
-3470646624,3470646631,DE
-3470646632,3470646639,BR
-3470646640,3470646703,US
-3470646704,3470646711,CN
-3470646712,3470646719,UY
-3470646720,3470646727,US
-3470646728,3470646735,GB
-3470646736,3470646743,US
-3470646744,3470646751,BR
-3470646752,3470646767,FR
-3470646768,3470646775,US
-3470646776,3470646783,IT
-3470646784,3470646831,US
-3470646832,3470646847,IL
-3470646848,3470646983,US
-3470646984,3470646991,AR
-3470646992,3470646999,CN
-3470647000,3470651391,US
+3470646600,3470651391,US
3470651392,3470655487,CA
-3470655488,3470656063,US
-3470656064,3470656095,IL
-3470656096,3470657695,US
-3470657696,3470657711,RU
-3470657712,3470658599,US
-3470658600,3470658607,JP
-3470658608,3470658615,US
-3470658616,3470658623,ZA
-3470658624,3470658751,US
-3470658752,3470658759,IE
-3470658760,3470659183,US
-3470659184,3470659191,BE
-3470659192,3470659471,US
-3470659472,3470659487,ES
-3470659488,3470659567,US
-3470659568,3470659575,BR
-3470659576,3470659735,US
-3470659736,3470659743,AU
-3470659744,3470659951,US
-3470659952,3470659959,MY
-3470659960,3470659967,IN
-3470659968,3470660079,US
-3470660080,3470660087,CA
-3470660088,3470660103,US
-3470660104,3470660111,HK
-3470660112,3470660223,US
-3470660224,3470660239,PH
-3470660240,3470660247,US
-3470660248,3470660255,PH
-3470660256,3470660647,US
+3470655488,3470660647,US
3470660648,3470660655,IE
-3470660656,3470661191,US
-3470661192,3470661199,CA
-3470661200,3470661215,US
-3470661216,3470661223,IN
-3470661224,3470661231,US
-3470661232,3470661239,ES
-3470661240,3470661319,US
-3470661320,3470661327,BD
-3470661328,3470662167,US
-3470662168,3470662175,IL
-3470662176,3470662183,CN
-3470662184,3470662663,US
-3470662664,3470662671,AE
-3470662672,3470662863,US
-3470662864,3470662871,IN
-3470662872,3470662911,US
-3470662912,3470662919,GB
-3470662920,3470663055,US
-3470663056,3470663063,NL
-3470663064,3470663095,US
-3470663096,3470663103,GB
-3470663104,3470663119,US
-3470663120,3470663127,VE
-3470663128,3470663287,US
-3470663288,3470663295,TH
-3470663296,3470671871,US
+3470660656,3470671871,US
3470671872,3470680063,CA
3470680064,3470744063,US
3470744064,3470744575,CA
@@ -152750,24 +81970,16 @@
3470753024,3470754303,US
3470754304,3470754559,PE
3470754560,3470755839,US
-3470755840,3470756095,ZA
+3470755840,3470756095,MU
3470756096,3470761983,US
-3470761984,3470762751,CA
-3470762752,3470762759,NL
-3470762760,3470767871,CA
+3470761984,3470767871,CA
3470767872,3470768127,IE
3470768128,3470770175,CA
3470770176,3470778367,US
3470778368,3470786559,CA
3470786560,3470794751,US
3470794752,3470802943,PA
-3470802944,3470873288,US
-3470873289,3470873296,MX
-3470873297,3470875817,US
-3470875818,3470875827,JP
-3470875828,3470876402,US
-3470876403,3470876410,IN
-3470876411,3470884863,US
+3470802944,3470884863,US
3470884864,3470885887,HK
3470885888,3471057919,US
3471057920,3471058943,VE
@@ -152793,69 +82005,39 @@
3472392192,3472408575,CA
3472408576,3472571647,US
3472571648,3472571903,GH
-3472571904,3472990207,US
-3472990208,3472990463,AS
-3472990464,3473039359,US
+3472571904,3472721919,US
+3472723968,3473039359,US
3473039360,3473040639,BM
3473040640,3473040895,US
3473040896,3473041407,BM
-3473041408,3473096192,US
-3473096193,3473096447,PH
-3473096448,3473276927,US
+3473041408,3473043455,US
+3473047552,3473067007,US
+3473067008,3473068031,CA
+3473068032,3473276927,US
3473276928,3473342463,CA
-3473342464,3473375495,US
-3473375496,3473375503,NZ
-3473375504,3473381311,US
-3473381312,3473381343,DE
-3473381344,3473703551,US
-3473703552,3473703679,CA
-3473703680,3473755391,US
+3473342464,3473755391,US
3473755392,3473755647,HN
3473755648,3473765887,US
3473765888,3473766399,EC
-3473766400,3473786111,US
-3473786112,3473786127,PR
-3473786128,3473813567,US
-3473813568,3473813599,CA
-3473813600,3473901055,US
+3473766400,3473901055,US
3473901056,3473901311,EC
3473901312,3473917439,US
3473917440,3473917695,PR
-3473917696,3474046719,US
-3474046720,3474046975,MX
-3474046976,3474053119,US
+3473917696,3474053119,US
3474053120,3474055167,PE
3474055168,3474193407,US
3474193408,3474193663,PH
3474193664,3474193919,US
3474193920,3474194431,PH
-3474194432,3474362783,US
-3474362784,3474362815,AU
-3474362816,3474363647,US
-3474363648,3474363687,GB
-3474363688,3474363695,US
-3474363696,3474363711,GB
-3474363712,3474391039,US
+3474194432,3474391039,US
3474391040,3474456575,CA
-3474456576,3474463071,US
-3474463072,3474463087,GB
-3474463088,3474463183,US
-3474463184,3474463199,GB
-3474463200,3474463231,US
+3474456576,3474463231,US
3474463232,3474463487,GB
-3474463488,3474463791,US
-3474463792,3474463807,GB
-3474463808,3474463855,US
-3474463856,3474463871,GB
-3474463872,3474463903,US
-3474463904,3474463919,GB
-3474463920,3474464255,US
+3474463488,3474464255,US
3474464256,3474464767,GB
3474464768,3474548223,US
3474548224,3474548479,JP
-3474548480,3474623599,US
-3474623600,3474623615,CA
-3474623616,3475112191,US
+3474548480,3475112191,US
3475112192,3475113215,CA
3475113216,3475115007,US
3475115008,3475120127,CA
@@ -152865,241 +82047,66 @@
3475296462,3475296462,AE
3475296463,3475310847,US
3475310848,3475311103,DE
-3475311104,3475384615,US
-3475384616,3475384623,SV
-3475384624,3475384679,US
-3475384680,3475384687,CA
-3475384688,3475405743,US
-3475405744,3475405751,SV
-3475405752,3475589887,US
+3475311104,3475589887,US
3475589888,3475590143,EC
3475590144,3475670015,US
-3475670016,3475670047,AG
-3475670048,3475670079,KN
-3475670080,3475670175,AG
-3475670176,3475670207,KN
-3475670208,3475670271,AG
+3475670016,3475670271,AG
3475670272,3475670527,AI
3475670528,3475670783,LC
-3475670784,3475671039,DM
+3475670784,3475670847,DM
+3475670848,3475671039,AG
3475671040,3475681279,US
3475681280,3475685375,HN
-3475685376,3475752703,US
-3475752704,3475752959,CW
-3475752960,3475813423,US
-3475813424,3475813679,US
-3475813680,3475881983,US
-3475881984,3475882751,CA
-3475882752,3475882767,US
+3475685376,3475851263,US
+3475853312,3475882767,US
3475882768,3475882783,FR
3475882784,3475882799,US
3475882800,3475882815,FR
-3475882816,3475882831,US
-3475882832,3475882847,CA
-3475882848,3475882863,US
-3475882864,3475883007,CA
-3475883008,3475883039,US
-3475883040,3475883487,CA
-3475883488,3475883519,US
-3475883520,3475884031,CA
-3475884032,3475884287,US
-3475884288,3475884319,CA
-3475884320,3475884327,US
-3475884328,3475885119,CA
-3475885120,3475885135,US
-3475885136,3475888127,CA
-3475888128,3475888383,US
-3475888384,3475890175,CA
-3475890176,3475896319,US
+3475882816,3475896319,US
3475896320,3475896575,FR
-3475896576,3475896831,EU
-3475896832,3475897471,US
+3475896576,3475897471,US
3475897472,3475897503,FR
-3475897504,3475911167,US
-3475911168,3475911237,AP
+3475897504,3475911237,US
3475911238,3475911239,IN
-3475911240,3475911423,AP
-3475911424,3475912447,US
+3475911240,3475912447,US
3475912448,3475912703,IN
3475912704,3475921151,US
3475921152,3475921407,JP
3475921408,3475996671,US
3475996672,3476029439,CA
-3476029440,3476041567,US
-3476041568,3476041583,MX
-3476041584,3476076319,US
-3476076320,3476076351,JO
-3476076352,3476111359,US
+3476029440,3476111359,US
3476111360,3476111871,CA
-3476111872,3476265855,US
-3476265856,3476265919,EG
-3476265920,3476348927,US
+3476111872,3476348927,US
3476348928,3476349183,CA
-3476349184,3476422143,US
-3476422144,3476422655,AZ
-3476422656,3476447231,US
+3476349184,3476447231,US
3476447232,3476455423,CA
-3476455424,3476718616,US
-3476718617,3476718617,IN
-3476718618,3476720363,US
-3476720364,3476720367,LV
-3476720368,3476721159,US
-3476721160,3476721167,IT
-3476721168,3476721319,US
-3476721320,3476721327,GB
-3476721328,3476721679,US
-3476721680,3476721687,IT
-3476721688,3476721743,US
-3476721744,3476721759,CA
-3476721760,3476721823,US
-3476721824,3476721831,GB
-3476721832,3476721895,US
-3476721896,3476721903,CA
-3476721904,3476721911,AU
-3476721912,3476722191,US
-3476722192,3476722207,BE
-3476722208,3476722239,IT
-3476722240,3476722255,SA
-3476722256,3476722287,US
-3476722288,3476722319,IT
-3476722320,3476722495,US
-3476722496,3476722511,AU
-3476722512,3476722527,US
-3476722528,3476722543,AU
-3476722544,3476722591,US
-3476722592,3476722607,GB
-3476722608,3476725151,US
-3476725152,3476725183,AU
-3476725184,3476725215,ZA
-3476725216,3476725247,US
-3476725248,3476725255,CA
-3476725256,3476725295,US
-3476725296,3476725303,CA
-3476725304,3476725351,US
-3476725352,3476725359,NL
-3476725360,3476725367,US
-3476725368,3476725375,CA
-3476725376,3476725399,US
-3476725400,3476725415,CA
-3476725416,3476725423,US
-3476725424,3476725431,GB
-3476725432,3476726600,US
-3476726601,3476726604,SI
-3476726605,3476730319,US
-3476730320,3476730323,FR
-3476730324,3476730453,US
-3476730454,3476730454,FR
-3476730455,3476731909,US
-3476731910,3476731913,IN
-3476731914,3476732049,US
-3476732050,3476732053,IN
-3476732054,3476732073,US
-3476732074,3476732077,IN
-3476732078,3476732113,US
-3476732114,3476732117,IN
-3476732118,3476881407,US
+3476455424,3476881407,US
3476881408,3476946943,CA
-3476946944,3477311871,US
-3477311872,3477312255,US
-3477312256,3477312511,US
-3477312512,3477313023,US
-3477313024,3477313279,US
-3477313280,3477313535,US
-3477313536,3477542143,US
-3477542144,3477542175,IN
-3477542176,3478114303,US
+3476946944,3477542143,US
+3477542144,3477542399,IN
+3477542400,3478114303,US
3478114304,3478118399,PE
3478118400,3478192127,US
3478192128,3478257663,CA
-3478257664,3478261791,US
-3478261792,3478261823,SG
-3478261824,3478261855,US
-3478261856,3478261887,SG
-3478261888,3478261903,US
-3478261904,3478261935,SG
-3478261936,3478261951,AU
-3478261952,3478261959,HK
-3478261960,3478261983,SG
-3478261984,3478262271,US
-3478262272,3478262279,SG
-3478262280,3478262399,US
-3478262400,3478262415,SG
-3478262416,3478262655,US
-3478262656,3478262671,SG
-3478262672,3478262743,US
-3478262744,3478262751,SG
-3478262752,3478262775,US
-3478262776,3478262783,HK
-3478262784,3478274255,US
-3478274256,3478274303,GB
-3478274304,3478274399,US
-3478274400,3478274431,GB
-3478274432,3478274463,US
-3478274464,3478274495,GB
-3478274496,3478274559,US
-3478274560,3478274591,NL
-3478274592,3478274607,US
-3478274608,3478274623,GB
-3478274624,3478274639,US
-3478274640,3478274655,GB
-3478274656,3478274687,US
-3478274688,3478274719,GB
-3478274720,3478274823,US
+3478257664,3478274823,US
3478274824,3478274831,GB
-3478274832,3478274943,US
-3478274944,3478275007,GB
-3478275008,3478285407,US
-3478285408,3478285439,GB
-3478285440,3478285567,US
-3478285568,3478285607,GB
-3478285608,3478285615,US
-3478285616,3478285631,GB
-3478285632,3478294527,US
-3478294528,3478294543,GB
-3478294544,3478323391,US
-3478323392,3478323399,CA
-3478323400,3478331519,US
-3478331520,3478331647,GB
-3478331648,3478332991,US
-3478332992,3478332999,CA
-3478333000,3478347903,US
-3478347904,3478348031,MX
-3478348032,3478351951,US
-3478351952,3478351967,GB
-3478351968,3478352111,US
-3478352112,3478352119,GB
-3478352120,3478364159,US
-3478364160,3478364167,BR
-3478364168,3478364191,US
-3478364192,3478364223,BR
-3478364224,3478364255,US
-3478364256,3478364271,BR
-3478364272,3478372351,US
+3478274832,3478372351,US
3478372352,3478380543,MX
-3478380544,3479207935,US
+3478380544,3478831103,US
+3478847488,3479207935,US
3479207936,3479240703,CA
3479240704,3479568383,US
3479568384,3479633919,CA
-3479633920,3479789343,US
-3479789344,3479789360,UY
-3479789361,3479896063,US
+3479633920,3479896063,US
3479896064,3479956479,CA
3479956480,3479956735,US
3479956736,3479961599,CA
3479961600,3480223743,US
-3480223744,3480226415,CA
-3480226416,3480226423,US
-3480226424,3480251007,CA
-3480251008,3480251071,US
-3480251072,3480256511,CA
+3480223744,3480256511,CA
3480256512,3480284159,US
3480284160,3480284671,CA
3480284672,3480444927,US
-3480444928,3480446231,CA
-3480446232,3480446239,US
-3480446240,3480446335,CA
-3480446336,3480446463,US
-3480446464,3480449023,CA
+3480444928,3480449023,CA
3480453120,3480551423,US
3480551424,3480551679,JP
3480551680,3480551935,DE
@@ -153108,9 +82115,7 @@
3480552448,3480552703,CH
3480552704,3480552959,US
3480552960,3480553215,AT
-3480553216,3480553343,US
-3480553344,3480553470,MX
-3480553471,3480553471,US
+3480553216,3480553471,US
3480553472,3480553727,SG
3480553728,3480553983,HK
3480553984,3480554239,US
@@ -153134,18 +82139,13 @@
3480560896,3480561151,BR
3480561152,3480561919,US
3480561920,3480562175,JP
-3480562176,3480562751,US
-3480562752,3480562815,PR
-3480562816,3480564735,US
+3480562176,3480564735,US
3480564736,3480564991,DE
3480564992,3480567039,US
3480567040,3480567551,GB
3480567552,3480568319,US
3480568320,3480568575,HK
-3480568576,3480568671,IT
-3480568672,3480568703,GB
-3480568704,3480568831,FR
-3480568832,3480569599,US
+3480568576,3480569599,US
3480569600,3480569855,HK
3480569856,3480570111,US
3480570112,3480570367,FR
@@ -153153,43 +82153,24 @@
3480570624,3480570879,JP
3480570880,3480571391,CH
3480571392,3480571647,BE
-3480571648,3480571775,FI
-3480571776,3480573567,US
-3480573568,3480573631,IT
-3480573632,3480573695,DE
-3480573696,3480574527,US
-3480574528,3480574591,NL
-3480574592,3480575231,US
+3480571648,3480575231,US
3480575232,3480575487,IL
3480575488,3480575743,US
3480575744,3480577023,IT
-3480577024,3480579711,US
-3480579712,3480579775,BG
-3480579776,3480579839,AU
-3480579840,3480580607,US
+3480577024,3480580607,US
3480580608,3480580863,SE
3480580864,3480581119,DK
-3480581120,3480581247,US
-3480581248,3480581375,NL
-3480581376,3480581631,US
+3480581120,3480581631,US
3480581632,3480581887,CL
3480581888,3480582143,NO
3480582144,3480582399,US
3480582400,3480582655,RU
3480582656,3480583423,MX
-3480583424,3480585599,US
-3480585600,3480585663,ES
-3480585664,3480587647,US
-3480587648,3480587775,PT
-3480587776,3480588799,US
+3480583424,3480588799,US
3480588800,3480589055,SE
-3480589056,3480590463,US
-3480590464,3480590591,FR
-3480590592,3480591103,US
+3480589056,3480591103,US
3480591104,3480591359,ZA
-3480591360,3480591423,US
-3480591424,3480591487,GR
-3480591488,3480591615,US
+3480591360,3480591615,US
3480591616,3480592127,ID
3480592128,3480592383,NO
3480592384,3480592639,CH
@@ -153234,9 +82215,7 @@
3480607232,3480607487,IT
3480607488,3480610303,US
3480610304,3480610559,ES
-3480610560,3480610815,US
-3480610816,3480610943,AU
-3480610944,3480611327,US
+3480610560,3480611327,US
3480611328,3480611583,JP
3480611584,3480611839,MX
3480611840,3480612095,BR
@@ -153248,122 +82227,142 @@
3480907264,3480907775,FR
3480907776,3480968191,US
3480968192,3480968447,AU
-3480968448,3481164801,US
-3481164802,3481164802,US
-3481164803,3481165057,US
-3481165058,3481165058,US
-3481165059,3481165313,US
-3481165314,3481165314,US
-3481165315,3481165569,US
-3481165570,3481165570,US
-3481165571,3481182503,US
-3481182504,3481182511,CA
-3481182512,3481665535,US
+3480968448,3481176063,US
+3481178112,3481665535,US
3481665536,3481731071,CA
3481731072,3481812991,US
-3481812992,3481822063,CA
-3481822064,3481822079,US
-3481822080,3481829375,CA
+3481812992,3481829375,CA
3481829376,3481843455,US
3481843456,3481843711,GB
-3481843712,3481936895,US
-3481936896,3481937919,VE
-3481937920,3481951395,US
+3481843712,3481951395,US
3481951396,3481951399,GB
-3481951400,3481958143,US
-3481958144,3481958399,NL
-3481958400,3481964575,US
+3481951400,3481964575,US
3481964576,3481964579,IE
-3481964580,3481966719,US
-3481966720,3481966847,CH
-3481966848,3481973247,US
-3481973248,3481973503,CA
-3481973504,3481993215,US
-3481993216,3481993783,CA
-3481993784,3481993791,US
-3481993792,3481995279,CA
-3481995280,3481995287,US
-3481995288,3481995303,CA
-3481995304,3481995311,US
-3481995312,3481995519,CA
-3481995520,3481995527,US
-3481995528,3481995543,CA
-3481995544,3481995551,US
-3481995552,3481998591,CA
+3481964580,3481993791,US
+3481993792,3481993799,CA
+3481993800,3481994239,US
+3481994240,3481994751,CA
+3481994752,3481995007,US
+3481995008,3481995263,CA
+3481995264,3481996031,US
+3481996032,3481996287,CA
+3481996288,3481996543,US
+3481996544,3481997311,CA
+3481997312,3481997567,US
+3481997568,3481998591,CA
3481998592,3481998847,AG
-3481998848,3482014079,CA
-3482014080,3482014207,AG
-3482014208,3482018815,CA
-3482018816,3482019071,US
-3482019072,3482022783,CA
-3482022784,3482022847,US
-3482022848,3482043735,CA
-3482043736,3482043743,US
-3482043744,3482048191,CA
-3482048192,3482048255,US
-3482048256,3482058751,CA
-3482058752,3482583039,US
+3481998848,3481999103,US
+3481999104,3481999359,CA
+3481999360,3481999615,US
+3481999616,3482001663,CA
+3482001664,3482001919,US
+3482001920,3482002175,CA
+3482002176,3482002431,US
+3482002432,3482003455,CA
+3482003456,3482004479,US
+3482004480,3482006015,CA
+3482006016,3482007551,US
+3482007552,3482008063,CA
+3482008064,3482008319,US
+3482008320,3482011135,CA
+3482011136,3482011647,US
+3482011648,3482012159,CA
+3482012160,3482012927,US
+3482012928,3482013951,CA
+3482013952,3482014207,US
+3482014208,3482014719,CA
+3482014720,3482014863,US
+3482014864,3482014879,CA
+3482014880,3482016255,US
+3482016256,3482016767,CA
+3482016768,3482017023,US
+3482017024,3482017279,CA
+3482017280,3482017535,US
+3482017536,3482017791,CA
+3482017792,3482018047,US
+3482018048,3482018303,CA
+3482018304,3482018559,US
+3482018560,3482018815,CA
+3482018816,3482019327,US
+3482019328,3482019583,CA
+3482019584,3482020607,US
+3482020608,3482020863,CA
+3482020864,3482021119,US
+3482021120,3482022143,CA
+3482022144,3482022911,US
+3482022912,3482024703,CA
+3482024704,3482024959,US
+3482024960,3482025215,CA
+3482025216,3482025471,US
+3482025472,3482028543,CA
+3482028544,3482028799,US
+3482028800,3482029311,CA
+3482029312,3482029567,US
+3482029568,3482032895,CA
+3482032896,3482033151,US
+3482033152,3482033663,CA
+3482033664,3482033919,US
+3482033920,3482034431,CA
+3482034432,3482035199,US
+3482035200,3482035711,CA
+3482035712,3482035967,US
+3482035968,3482036223,CA
+3482036224,3482036479,US
+3482036480,3482036735,CA
+3482036736,3482036991,US
+3482036992,3482037247,CA
+3482037248,3482037759,US
+3482037760,3482038015,CA
+3482038016,3482038271,US
+3482038272,3482038783,CA
+3482038784,3482039039,US
+3482039040,3482039295,CA
+3482039296,3482039551,US
+3482039552,3482040319,CA
+3482040320,3482041087,US
+3482041088,3482041343,CA
+3482041344,3482041599,US
+3482041600,3482042367,CA
+3482042368,3482043903,US
+3482043904,3482044927,CA
+3482044928,3482045183,US
+3482045184,3482045695,CA
+3482045696,3482046207,US
+3482046208,3482046463,CA
+3482046464,3482046975,US
+3482046976,3482047487,CA
+3482047488,3482047743,US
+3482047744,3482047999,CA
+3482048000,3482048511,US
+3482048512,3482048767,CA
+3482048768,3482049791,US
+3482049792,3482050559,CA
+3482050560,3482051327,US
+3482051328,3482051583,CA
+3482051584,3482051839,US
+3482051840,3482052863,CA
+3482052864,3482053631,US
+3482053632,3482054655,CA
+3482054656,3482058239,US
+3482058240,3482058495,CA
+3482058496,3482583039,US
3482583040,3482632191,CA
3482632192,3482775551,US
3482775552,3482779647,PR
3482779648,3482910719,US
3482910720,3482927103,CA
-3482927104,3483239423,US
-3483239424,3483239679,US
-3483239680,3483240703,US
-3483240704,3483240959,US
-3483240960,3483247359,US
-3483247360,3483247871,US
-3483247872,3483248639,US
-3483248640,3483248895,US
-3483248896,3483296004,US
-3483296005,3483296005,BE
-3483296006,3483435007,US
+3482927104,3483435007,US
3483435008,3483533311,CA
-3483533312,3483552511,US
-3483552512,3483552607,GB
-3483552608,3483631615,US
+3483533312,3483631615,US
3483631616,3483697151,CA
-3483697152,3483791375,US
-3483791376,3483791407,PR
-3483791408,3483791423,US
-3483791424,3483791431,PR
-3483791432,3483791471,US
-3483791472,3483791479,PR
-3483791480,3483791495,US
-3483791496,3483791503,PR
-3483791504,3483791511,US
-3483791512,3483791519,PR
-3483791520,3483791535,US
-3483791536,3483791543,PR
-3483791544,3483791551,US
-3483791552,3483791599,PR
-3483791600,3483791607,US
-3483791608,3483791623,PR
+3483697152,3483791359,US
+3483791360,3483791623,PR
3483791624,3483791631,US
-3483791632,3483791639,PR
-3483791640,3483791647,US
-3483791648,3483791663,PR
-3483791664,3483791679,US
-3483791680,3483791695,PR
-3483791696,3483791743,US
-3483791744,3483791751,PR
-3483791752,3483791767,US
-3483791768,3483791799,PR
-3483791800,3483791823,US
-3483791824,3483791831,PR
-3483791832,3483791855,US
-3483791856,3483791887,PR
-3483791888,3483791895,US
-3483791896,3483791951,PR
-3483791952,3483791967,US
-3483791968,3483791983,PR
-3483791984,3483791999,US
-3483792000,3483792015,PR
-3483792016,3483792031,IL
-3483792032,3483792047,PR
-3483792048,3483792079,US
-3483792080,3483795455,PR
+3483791632,3483791815,PR
+3483791816,3483791823,US
+3483791824,3483793919,PR
+3483793920,3483794431,US
+3483794432,3483795455,PR
3483795456,3483828223,US
3483828224,3483836415,CA
3483836416,3483877375,US
@@ -153377,126 +82376,67 @@
3484321792,3484322047,PR
3484322048,3484323839,US
3484326912,3484327423,US
-3484327936,3484419583,US
-3484419584,3484419839,A2
-3484419840,3484419847,DM
-3484419848,3484419855,US
-3484419856,3484419967,DM
-3484419968,3484419983,US
-3484419984,3484420031,DM
-3484420032,3484424255,US
-3484424256,3484424287,DM
-3484424288,3484424319,US
-3484424320,3484424447,DM
-3484424448,3484437503,US
+3484331008,3484437503,US
3484437504,3484442623,GB
3484442624,3484450815,US
3484450816,3484451839,CA
-3484451840,3484451871,US
-3484451872,3484453695,CA
-3484453696,3484453759,US
-3484453760,3484455263,CA
-3484455264,3484455295,US
-3484455296,3484455807,CA
-3484455808,3484455871,US
-3484455872,3484456191,CA
+3484451840,3484452095,US
+3484452096,3484453631,CA
+3484453632,3484453887,US
+3484453888,3484455167,CA
+3484455168,3484455423,US
+3484455424,3484455679,CA
+3484455680,3484455935,US
+3484455936,3484456191,CA
3484456192,3484456703,US
3484456704,3484457727,CA
3484457728,3484457983,US
-3484457984,3484459791,CA
-3484459792,3484459807,US
-3484459808,3484459823,CA
-3484459824,3484459839,US
-3484459840,3484459855,CA
-3484459856,3484459871,US
-3484459872,3484459887,CA
-3484459888,3484459919,US
-3484459920,3484459967,CA
-3484459968,3484459999,US
-3484460000,3484460015,CA
-3484460016,3484460031,US
-3484460032,3484460287,CA
-3484460288,3484460543,US
-3484460544,3484460575,CA
-3484460576,3484460591,US
-3484460592,3484460703,CA
-3484460704,3484460719,US
-3484460720,3484460783,CA
-3484460784,3484460799,US
-3484460800,3484461079,CA
-3484461080,3484461095,US
-3484461096,3484461103,CA
-3484461104,3484461111,US
-3484461112,3484461119,CA
-3484461120,3484461135,US
-3484461136,3484461143,CA
-3484461144,3484461199,US
-3484461200,3484461231,CA
-3484461232,3484461263,US
-3484461264,3484461271,CA
-3484461272,3484461279,US
-3484461280,3484461375,CA
-3484461376,3484461439,US
-3484461440,3484461503,CA
-3484461504,3484461631,US
-3484461632,3484461759,CA
-3484461760,3484461823,US
-3484461824,3484462103,CA
-3484462104,3484462143,US
-3484462144,3484462159,CA
-3484462160,3484462175,US
-3484462176,3484462207,CA
-3484462208,3484462215,US
-3484462216,3484462279,CA
-3484462280,3484462295,US
-3484462296,3484462975,CA
-3484462976,3484463039,US
-3484463040,3484463151,CA
-3484463152,3484463183,US
-3484463184,3484464143,CA
-3484464144,3484464159,US
-3484464160,3484464175,CA
-3484464176,3484464191,US
-3484464192,3484464223,CA
-3484464224,3484464287,US
-3484464288,3484464303,CA
-3484464304,3484464319,US
+3484457984,3484458751,CA
+3484458752,3484459007,US
+3484459008,3484459775,CA
+3484459776,3484460687,US
+3484460688,3484460703,CA
+3484460704,3484460735,US
+3484460736,3484460751,CA
+3484460752,3484460799,US
+3484460800,3484461055,CA
+3484461056,3484461823,US
+3484461824,3484462079,CA
+3484462080,3484462335,US
+3484462336,3484462591,CA
+3484462592,3484463359,US
+3484463360,3484464127,CA
+3484464128,3484464319,US
3484464320,3484464335,CA
-3484464336,3484464383,US
-3484464384,3484464703,CA
-3484464704,3484464735,US
-3484464736,3484465151,CA
-3484465152,3484465407,US
-3484465408,3484466431,CA
+3484464336,3484464895,US
+3484464896,3484465151,CA
+3484465152,3484465663,US
+3484465664,3484465919,CA
+3484465920,3484466175,US
+3484466176,3484466431,CA
3484466432,3484466687,US
-3484466688,3484468287,CA
-3484468288,3484468479,US
-3484468480,3484469119,CA
-3484469120,3484469247,US
+3484466688,3484468223,CA
+3484468224,3484468479,US
+3484468480,3484468991,CA
+3484468992,3484469247,US
3484469248,3484469759,CA
-3484469760,3484469791,US
-3484469792,3484469887,CA
-3484469888,3484469951,US
-3484469952,3484470527,CA
-3484470528,3484471295,US
-3484471296,3484471551,CA
-3484471552,3484471807,US
-3484471808,3484472135,CA
-3484472136,3484472167,US
-3484472168,3484472183,CA
-3484472184,3484472199,US
-3484472200,3484472223,CA
-3484472224,3484472279,US
-3484472280,3484473087,CA
-3484473088,3484473151,US
-3484473152,3484473599,CA
-3484473600,3484473727,US
-3484473728,3484473791,CA
-3484473792,3484473855,US
-3484473856,3484477183,CA
+3484469760,3484470015,US
+3484470016,3484470527,CA
+3484470528,3484471807,US
+3484471808,3484472063,CA
+3484472064,3484472319,US
+3484472320,3484472575,CA
+3484472576,3484472967,US
+3484472968,3484472975,CA
+3484472976,3484473343,US
+3484473344,3484473599,CA
+3484473600,3484473855,US
+3484473856,3484474879,CA
+3484474880,3484475135,US
+3484475136,3484477183,CA
3484477184,3484477695,US
-3484477696,3484478207,CA
-3484478208,3484478719,US
+3484477696,3484477951,CA
+3484477952,3484478719,US
3484478720,3484478975,CA
3484478976,3484479231,US
3484479232,3484479487,CA
@@ -153504,64 +82444,39 @@
3484479744,3484479999,CA
3484480000,3484480255,US
3484480256,3484481279,CA
-3484481280,3484481343,US
-3484481344,3484482047,CA
+3484481280,3484481535,US
+3484481536,3484482047,CA
3484482048,3484482559,US
3484482560,3484483583,CA
-3484483584,3484604039,US
-3484604040,3484604047,AU
-3484604048,3484647423,US
+3484483584,3484647423,US
3484647424,3484663807,CA
-3484663808,3484746815,US
-3484746816,3484746943,GB
-3484746944,3484762111,US
-3484762112,3484775743,CA
-3484775744,3484775775,US
-3484775776,3484777663,CA
-3484777664,3484777695,US
-3484777696,3484778495,CA
+3484663808,3484762111,US
+3484762112,3484778495,CA
3484778496,3484884991,US
3484884992,3484893183,CA
3484893184,3485220863,US
3485220864,3485229055,CA
-3485229056,3485290463,US
-3485290464,3485290479,GB
-3485290480,3485327359,US
+3485229056,3485327359,US
3485327360,3485335551,CA
-3485335552,3485458847,US
-3485458848,3485458863,FR
-3485458864,3485460559,US
-3485460560,3485460575,IN
-3485460576,3485462527,US
+3485335552,3485442047,US
+3485446144,3485462527,US
3485462528,3485464575,VC
3485464576,3485466623,LC
3485466624,3485597695,US
-3485597696,3485671583,CA
-3485671584,3485671615,US
-3485671616,3485695999,CA
+3485597696,3485672543,CA
+3485672544,3485672551,US
+3485672552,3485695999,CA
3485696000,3485721056,US
3485721057,3485721057,AE
-3485721058,3485724671,US
-3485724672,3485728767,US
-3485728768,3485885127,US
-3485885128,3485885141,CA
-3485885142,3485887747,US
-3485887748,3485887777,AU
-3485887778,3485891519,US
-3485891520,3485891583,DE
-3485891584,3485959423,US
+3485721058,3485959423,US
3485959424,3485960191,CA
3485960192,3486023679,US
3486023680,3486031871,CA
3486031872,3486269439,US
3486269440,3486285823,JM
-3486285824,3486287359,PR
-3486287360,3486287487,US
-3486287488,3486302207,PR
+3486285824,3486302207,PR
3486302208,3486310399,CA
-3486310400,3486501951,US
-3486501952,3486501967,DE
-3486501968,3486580735,US
+3486310400,3486580735,US
3486580736,3486580991,GB
3486580992,3486581503,DE
3486581504,3486581759,TW
@@ -153586,17 +82501,12 @@
3486587648,3486587903,CL
3486587904,3486588415,GB
3486588416,3486588671,FR
-3486588672,3486589119,US
-3486589120,3486589151,NL
-3486589152,3486589247,US
-3486589248,3486589279,ZA
-3486589280,3486589951,US
+3486588672,3486589951,US
3486589952,3486590207,IT
3486590208,3486590463,US
3486590464,3486591743,GB
3486591744,3486591999,CH
-3486592000,3486592063,FI
-3486592064,3486592255,US
+3486592000,3486592255,US
3486592256,3486592511,NL
3486592512,3486593023,NO
3486593024,3486593279,NL
@@ -153604,27 +82514,19 @@
3486593792,3486594047,FR
3486594048,3486594303,DE
3486594304,3486594559,BE
-3486594560,3486594719,US
-3486594720,3486594751,LU
-3486594752,3486594783,GB
-3486594784,3486594815,US
-3486594816,3486594943,AR
-3486594944,3486595071,US
+3486594560,3486595071,US
3486595072,3486595327,DK
3486595328,3486595583,ID
3486595584,3486595839,PR
3486595840,3486596095,DK
3486596096,3486596351,NL
3486596352,3486596607,NO
-3486596608,3486596735,US
-3486596736,3486596799,CH
-3486596800,3486596863,FR
+3486596608,3486596863,US
3486596864,3486597119,GB
3486597120,3486597375,IE
3486597376,3486597631,IT
3486597632,3486597887,GB
-3486597888,3486598591,US
-3486598592,3486598655,FR
+3486597888,3486598655,US
3486598656,3486598911,BR
3486598912,3486599167,NO
3486599168,3486599423,SE
@@ -153633,30 +82535,16 @@
3486599936,3486600447,BR
3486600448,3486601215,US
3486601216,3486601471,BE
-3486601472,3486601535,TR
-3486601536,3486601727,US
+3486601472,3486601727,US
3486601728,3486601983,BE
3486601984,3486602239,NZ
-3486602240,3486602431,US
-3486602432,3486602495,CO
-3486602496,3486603007,US
+3486602240,3486603007,US
3486603008,3486603263,SG
-3486603264,3486603295,US
-3486603296,3486603327,BR
-3486603328,3486603391,CL
-3486603392,3486603407,US
-3486603408,3486603423,AR
-3486603424,3486603455,US
-3486603456,3486603519,AR
+3486603264,3486603519,US
3486603520,3486603775,JP
3486603776,3486604287,US
3486604288,3486604543,BE
-3486604544,3486604575,US
-3486604576,3486604607,SG
-3486604608,3486604615,MY
-3486604616,3486604671,US
-3486604672,3486604735,CO
-3486604736,3486605055,US
+3486604544,3486605055,US
3486605056,3486605311,ES
3486605312,3486605567,NL
3486605568,3486606079,US
@@ -153675,16 +82563,12 @@
3486610176,3486610431,US
3486610432,3486610687,SE
3486610688,3486610943,NL
-3486610944,3486611199,US
-3486611200,3486611215,BR
-3486611216,3486611455,US
+3486610944,3486611455,US
3486611456,3486611711,SG
-3486611712,3486611775,EC
-3486611776,3486611967,US
+3486611712,3486611967,US
3486611968,3486612223,HK
3486612224,3486612479,SG
-3486612480,3486612607,US
-3486612608,3486612735,FR
+3486612480,3486612735,US
3486612736,3486612991,DE
3486612992,3486613247,US
3486613248,3486613759,GB
@@ -153695,15 +82579,9 @@
3486614784,3486615039,FR
3486615040,3486615295,BE
3486615296,3486615551,PH
-3486615552,3486615871,US
-3486615872,3486615903,LU
-3486615904,3486615935,US
-3486615936,3486615967,CH
-3486615968,3486616319,US
+3486615552,3486616319,US
3486616320,3486616831,NO
-3486616832,3486617215,US
-3486617216,3486617343,SE
-3486617344,3486617599,US
+3486616832,3486617599,US
3486617600,3486617855,CH
3486617856,3486618111,AU
3486618112,3486618367,NO
@@ -153733,20 +82611,13 @@
3486624256,3486624511,SG
3486624512,3486624767,SE
3486624768,3486625023,ES
-3486625024,3486625055,US
-3486625056,3486625087,MX
-3486625088,3486625151,US
-3486625152,3486625183,MX
-3486625184,3486625279,US
+3486625024,3486625279,US
3486625280,3486625535,SE
3486625536,3486625791,NO
3486625792,3486626047,NL
3486626048,3486626303,FI
3486626304,3486626559,IL
-3486626560,3486626567,CH
-3486626568,3486626591,US
-3486626592,3486626623,FI
-3486626624,3486627071,US
+3486626560,3486627071,US
3486627072,3486627327,JP
3486627328,3486627583,US
3486627584,3486627839,BE
@@ -153765,9 +82636,7 @@
3486632704,3486632959,JP
3486632960,3486633215,IT
3486633216,3486633471,GB
-3486633472,3486633599,US
-3486633600,3486633727,CN
-3486633728,3486633983,US
+3486633472,3486633983,US
3486633984,3486634239,HK
3486634240,3486634495,US
3486634496,3486634751,KR
@@ -153784,9 +82653,7 @@
3486637312,3486637823,BE
3486637824,3486638335,SE
3486638336,3486638591,FR
-3486638592,3486638623,US
-3486638624,3486638639,CN
-3486638640,3486638847,US
+3486638592,3486638847,US
3486638848,3486639103,DK
3486639104,3486639359,BE
3486639360,3486639615,SG
@@ -153797,202 +82664,45 @@
3486642176,3486642431,BR
3486642432,3486642687,PT
3486642688,3486642943,DK
-3486642944,3486646015,US
-3486646016,3486646143,JP
-3486646144,3486646271,US
+3486642944,3486646271,US
3486646272,3486662655,CA
-3486662656,3486677055,US
-3486677056,3486677071,CA
-3486677072,3486688255,US
+3486662656,3486688255,US
3486688256,3486688511,GB
3486688512,3486699519,US
3486699520,3486699775,CA
-3486699776,3486700399,US
-3486700400,3486700407,CA
-3486700408,3486700439,US
-3486700440,3486700447,IT
-3486700448,3486707519,US
-3486707520,3486707535,SE
-3486707536,3486707559,US
-3486707560,3486707567,HN
-3486707568,3487039487,US
+3486699776,3486702591,US
+3486702592,3486702847,CA
+3486702848,3487039487,US
3487039488,3487105023,CA
3487105024,3487175935,US
3487175936,3487176191,GB
-3487176192,3487178111,US
-3487178112,3487178239,GB
+3487176192,3487177983,US
+3487177984,3487178239,GB
3487178240,3487181359,US
3487181360,3487181375,GB
3487181376,3487189247,US
3487189248,3487189503,DK
-3487189504,3487194111,US
-3487194112,3487194367,GB
-3487194368,3487197183,US
+3487189504,3487197183,US
3487197184,3487197439,DK
3487197440,3487216383,US
3487216384,3487216639,SE
3487216640,3487236095,US
-3487236096,3487238023,CA
-3487238024,3487238024,CA
-3487238025,3487301631,CA
-3487301632,3487559719,US
-3487559720,3487559727,AU
-3487559728,3487559839,US
-3487559840,3487559871,AU
-3487559872,3487560167,US
-3487560168,3487560183,AU
-3487560184,3487561471,US
+3487236096,3487301631,CA
+3487301632,3487561471,US
3487561472,3487561727,AU
3487561728,3487703039,US
3487703040,3487703073,DE
-3487703074,3487703074,A2
+3487703074,3487703074,US
3487703075,3487704849,DE
3487704850,3487704850,NG
3487704851,3487704851,DE
3487704852,3487704853,NG
3487704854,3487705855,DE
-3487705856,3487706367,A2
+3487705856,3487706367,US
3487706368,3487706623,RU
-3487706624,3487707135,A2
-3487707136,3487725567,US
+3487706624,3487725567,US
3487725568,3487727615,TW
-3487727616,3487735807,US
-3487735808,3487735815,DM
-3487735816,3487735839,US
-3487735840,3487735847,DM
-3487735848,3487736327,US
-3487736328,3487736335,DM
-3487736336,3487736351,US
-3487736352,3487736367,DM
-3487736368,3487736431,US
-3487736432,3487736447,DM
-3487736448,3487736559,US
-3487736560,3487736567,DM
-3487736568,3487736575,US
-3487736576,3487736583,DM
-3487736584,3487736591,US
-3487736592,3487736623,DM
-3487736624,3487736687,US
-3487736688,3487736703,DM
-3487736704,3487736719,US
-3487736720,3487736735,DM
-3487736736,3487736751,US
-3487736752,3487736767,DM
-3487736768,3487736879,US
-3487736880,3487736895,DM
-3487736896,3487736911,US
-3487736912,3487736919,DM
-3487736920,3487736927,US
-3487736928,3487736943,DM
-3487736944,3487736951,US
-3487736952,3487736975,DM
-3487736976,3487736991,US
-3487736992,3487737023,DM
-3487737024,3487737855,US
-3487737856,3487737887,DM
-3487737888,3487737919,US
-3487737920,3487737935,DM
-3487737936,3487737951,US
-3487737952,3487737967,DM
-3487737968,3487738239,US
-3487738240,3487738247,DM
-3487738248,3487738287,US
-3487738288,3487738303,DM
-3487738304,3487738495,US
-3487738496,3487738503,DM
-3487738504,3487738511,US
-3487738512,3487738527,DM
-3487738528,3487738575,US
-3487738576,3487738607,DM
-3487738608,3487738623,US
-3487738624,3487738639,DM
-3487738640,3487738655,US
-3487738656,3487738687,DM
-3487738688,3487738751,US
-3487738752,3487738759,DM
-3487738760,3487738767,US
-3487738768,3487738783,DM
-3487738784,3487738799,US
-3487738800,3487738823,DM
-3487738824,3487738863,US
-3487738864,3487738879,DM
-3487738880,3487738959,US
-3487738960,3487738975,DM
-3487738976,3487739007,US
-3487739008,3487739015,DM
-3487739016,3487739039,US
-3487739040,3487739071,DM
-3487739072,3487739183,US
-3487739184,3487739215,DM
-3487739216,3487739231,US
-3487739232,3487739271,DM
-3487739272,3487739295,US
-3487739296,3487739303,DM
-3487739304,3487739311,US
-3487739312,3487739327,DM
-3487739328,3487739351,US
-3487739352,3487739359,DM
-3487739360,3487739455,US
-3487739456,3487739471,DM
-3487739472,3487739487,US
-3487739488,3487739503,DM
-3487739504,3487739519,US
-3487739520,3487739527,DM
-3487739528,3487739543,US
-3487739544,3487739551,DM
-3487739552,3487739567,US
-3487739568,3487739583,DM
-3487739584,3487739647,US
-3487739648,3487739655,DM
-3487739656,3487739663,US
-3487739664,3487739735,DM
-3487739736,3487739743,US
-3487739744,3487739903,DM
-3487739904,3487740271,US
-3487740272,3487740287,DM
-3487740288,3487740303,US
-3487740304,3487740319,DM
-3487740320,3487740367,US
-3487740368,3487740415,DM
-3487740416,3487740431,US
-3487740432,3487740527,DM
-3487740528,3487740543,US
-3487740544,3487740607,DM
-3487740608,3487740623,US
-3487740624,3487740671,DM
-3487740672,3487740687,US
-3487740688,3487740751,DM
-3487740752,3487740767,US
-3487740768,3487740783,DM
-3487740784,3487740791,US
-3487740792,3487740927,DM
-3487740928,3487740951,US
-3487740952,3487740991,DM
-3487740992,3487741023,US
-3487741024,3487741183,DM
-3487741184,3487741207,US
-3487741208,3487741407,DM
-3487741408,3487741423,US
-3487741424,3487741439,DM
-3487741440,3487741455,US
-3487741456,3487741471,DM
-3487741472,3487741479,US
-3487741480,3487741503,DM
-3487741504,3487741519,US
-3487741520,3487741551,DM
-3487741552,3487741631,US
-3487741632,3487741639,DM
-3487741640,3487741647,US
-3487741648,3487741663,DM
-3487741664,3487741679,US
-3487741680,3487741695,DM
-3487741696,3487741711,US
-3487741712,3487741735,DM
-3487741736,3487741759,US
-3487741760,3487741911,DM
-3487741912,3487741919,US
-3487741920,3487741951,DM
-3487741952,3487766527,US
+3487727616,3487766527,US
3487766528,3487768575,CA
3487768576,3487842303,US
3487842304,3487858687,CA
@@ -154006,50 +82716,47 @@
3487969792,3487970047,KW
3487970048,3488014335,US
3488014336,3488022527,CA
-3488022528,3488071679,US
+3488022528,3488049151,US
+3488051200,3488065535,US
+3488067584,3488071679,US
3488071680,3488072703,CA
3488072704,3488079871,US
3488079872,3488083967,CA
3488083968,3488088063,US
3488088064,3488104447,IL
3488104448,3488112639,US
-3488112640,3488113839,CA
-3488113840,3488113847,US
-3488113848,3488116863,CA
-3488116864,3488116871,US
-3488116872,3488118559,CA
-3488118560,3488118567,US
-3488118568,3488120831,CA
-3488120832,3488291103,US
-3488291104,3488291135,IN
-3488291136,3488291295,US
-3488291296,3488291327,IN
-3488291328,3488291439,US
-3488291440,3488291447,IN
-3488291448,3488291519,US
-3488291520,3488291647,IN
-3488291648,3488300287,US
-3488300288,3488300543,A2
-3488300544,3488350207,US
-3488350208,3488361215,CA
-3488361216,3488361471,US
-3488361472,3488415743,CA
+3488112640,3488120831,CA
+3488120832,3488307711,US
+3488307712,3488308223,IN
+3488308224,3488350207,US
+3488350208,3488415743,CA
3488415744,3488615935,US
3488615936,3488616191,AU
-3488616192,3488718847,US
-3488718848,3488719615,A2
-3488719616,3488720895,US
-3488720896,3488725503,A2
-3488725504,3488725759,US
-3488725760,3488727039,A2
-3488727040,3488901887,US
+3488616192,3488901887,US
3488901888,3488902143,CA
-3488902144,3488940031,US
+3488902144,3488909311,US
+3488911360,3488940031,US
3488940032,3488956415,CA
3488956416,3488989183,US
3488989184,3489005567,CA
3489005568,3489136639,US
-3489136640,3489267711,MX
+3489136640,3489153535,MX
+3489153536,3489154047,HN
+3489154048,3489155583,MX
+3489155584,3489156095,AR
+3489156608,3489157119,MX
+3489157632,3489158399,MX
+3489158400,3489158655,AR
+3489159168,3489160191,MX
+3489160192,3489161215,AR
+3489161216,3489163775,MX
+3489164288,3489166591,MX
+3489166848,3489167615,MX
+3489167872,3489168127,MX
+3489168384,3489169407,AR
+3489169408,3489185791,MX
+3489185792,3489193983,CL
+3489193984,3489267711,MX
3489267712,3489341439,US
3489341440,3489345535,CA
3489345536,3489398783,US
@@ -154057,43 +82764,25 @@
3489399040,3489464319,US
3489464320,3489529855,CA
3489529856,3489562623,US
-3489562624,3489566719,JM
-3489566720,3489575423,US
-3489575424,3489575551,CN
-3489575552,3489575679,US
-3489575680,3489575807,CN
-3489575808,3489575935,US
-3489575936,3489577008,CN
-3489577009,3489577215,US
+3489563136,3489563391,JM
+3489566720,3489575935,US
+3489575936,3489576959,CN
+3489576960,3489577215,US
3489577216,3489578239,CN
-3489578240,3489665481,US
-3489665482,3489665482,PR
-3489665483,3489673471,US
-3489673472,3489673727,PR
-3489673728,3489717759,US
+3489578240,3489685503,US
+3489685504,3489687551,BB
+3489687552,3489717759,US
3489717760,3489718015,PR
3489718016,3489718271,US
3489718272,3489718527,DM
3489718528,3489719039,LC
-3489719040,3489719191,AG
-3489719192,3489719199,VG
-3489719200,3489719551,AG
+3489719040,3489719551,AG
3489719552,3489719807,VG
3489719808,3489720063,DM
3489720064,3489720319,LC
3489720320,3489738751,US
3489738752,3489740799,PH
-3489740800,3489741783,US
-3489741784,3489741791,CA
-3489741792,3489749503,US
-3489749504,3489749519,CA
-3489749520,3489756119,US
-3489756120,3489756127,DE
-3489756128,3489761743,US
-3489761744,3489761759,CA
-3489761760,3489774831,US
-3489774832,3489774839,GB
-3489774840,3489775103,US
+3489740800,3489775103,US
3489775104,3489775359,BO
3489775360,3489969151,US
3489969152,3489969663,PR
@@ -154105,197 +82794,99 @@
3490265344,3490267135,CO
3490267136,3490488319,US
3490488320,3490489343,PR
-3490489344,3490653871,US
-3490653872,3490653887,CA
-3490653888,3490702847,US
-3490702848,3490703103,AS
-3490703104,3490703615,US
+3490489344,3490703615,US
3490703616,3490703871,PR
-3490703872,3490732431,US
-3490732432,3490732447,CA
-3490732448,3490786047,US
+3490703872,3490786047,US
3490786048,3490786303,PR
3490786304,3490879231,US
3490879232,3490879487,PR
-3490879488,3490974719,US
-3490974720,3490975743,PR
-3490975744,3491219183,US
-3491219184,3491219191,PR
-3491219192,3491226687,US
-3491226688,3491226719,CA
-3491226720,3491351455,US
-3491351456,3491351463,HR
-3491351464,3491358183,US
-3491358184,3491358191,PR
-3491358192,3491381247,US
+3490879488,3491381247,US
3491381248,3491389439,BM
3491389440,3491476991,US
3491476992,3491478527,VI
-3491478528,3491478591,US
-3491478592,3491478599,PR
-3491478600,3491506631,US
-3491506632,3491506639,DK
-3491506640,3491508223,US
-3491508224,3491512319,CA
-3491512320,3491637247,US
+3491478528,3491637247,US
3491637248,3491637759,CO
3491637760,3491651583,US
-3491651584,3491659775,VI
-3491659776,3491705023,US
-3491705024,3491705039,SG
-3491705040,3491712927,US
-3491712928,3491712959,TW
-3491712960,3491743743,US
+3491651584,3491654655,VI
+3491654656,3491654911,US
+3491654912,3491659775,VI
+3491659776,3491743743,US
3491743744,3491745791,CO
-3491745792,3491764783,US
-3491764784,3491764791,PR
-3491764792,3491826687,US
-3491826688,3491826943,CW
-3491826944,3491907591,US
-3491907592,3491907592,US
-3491907593,3491921663,US
-3491921664,3491921919,PR
-3491921920,3491951495,US
-3491951496,3491951503,GB
-3491951504,3491951519,US
-3491951520,3491951527,GB
-3491951528,3491968423,US
-3491968424,3491968431,PR
-3491968432,3491968447,AF
-3491968448,3491969023,US
+3491745792,3491969023,US
3491969024,3491970047,PR
-3491970048,3491971607,US
-3491971608,3491971615,IT
-3491971616,3491971751,US
-3491971752,3491971759,AU
-3491971760,3491971951,US
-3491971952,3491971967,HK
-3491971968,3491973151,US
-3491973152,3491973159,VE
-3491973160,3492005375,US
-3492005376,3492005391,DK
-3492005392,3492005439,US
-3492005440,3492005447,DK
-3492005448,3492005463,US
-3492005464,3492005487,AU
-3492005488,3492151295,US
+3491970048,3492151295,US
3492151296,3492167679,CA
-3492167680,3492188799,US
-3492188800,3492188831,CH
-3492188832,3492472039,US
-3492472040,3492472047,GB
-3492472048,3492669695,US
-3492669696,3492671487,PA
-3492671488,3492710167,US
-3492710168,3492710175,CA
-3492710176,3492710191,US
-3492710192,3492710199,CA
-3492710200,3492710223,US
-3492710224,3492710239,CA
-3492710240,3492710255,US
-3492710256,3492710263,CA
-3492710264,3492710375,US
-3492710376,3492710383,CA
-3492710384,3492712191,US
-3492712192,3492712447,CA
-3492712448,3492712511,US
-3492712512,3492712543,CA
-3492712544,3492730415,US
-3492730416,3492730431,CA
-3492730432,3492795775,US
-3492795776,3492795903,AR
-3492795904,3492815359,US
-3492815360,3492815487,GB
-3492815488,3492827391,US
-3492827392,3492827423,CA
-3492827424,3492827431,US
-3492827432,3492827439,DE
-3492827440,3492827455,AU
-3492827456,3492827519,US
-3492827520,3492827647,AU
-3492827648,3492827903,US
-3492827904,3492827967,AU
-3492827968,3492845823,US
+3492167680,3492669951,US
+3492669952,3492671487,PA
+3492671488,3492812759,US
+3492812760,3492812763,JP
+3492812764,3492845823,US
3492845824,3492846079,CH
-3492846080,3492869631,US
-3492869632,3492870143,BR
-3492870144,3492886527,US
+3492846080,3492867071,US
+3492867072,3492867327,FR
+3492867328,3492868607,US
+3492868608,3492868863,MX
+3492868864,3492869631,US
+3492869632,3492869887,BR
+3492869888,3492877954,US
+3492877955,3492877955,CA
+3492877956,3492886527,US
3492886528,3492886559,GB
3492886560,3492886591,US
3492886592,3492886783,GB
-3492886784,3492893951,US
-3492893952,3492893953,GB
-3492893954,3492893954,US
-3492893955,3492893985,GB
-3492893986,3492893986,US
-3492893987,3492894207,GB
-3492894208,3492894975,US
+3492886784,3492894975,US
3492894976,3492895231,BE
-3492895232,3492897023,US
-3492897024,3492897279,GB
-3492897280,3492905983,US
-3492905984,3492906239,FR
-3492906240,3492906495,US
-3492906496,3492906751,EU
-3492906752,3492912127,US
+3492895232,3492912127,US
3492912128,3492912151,GB
3492912152,3492912159,US
3492912160,3492912383,GB
-3492912384,3492917247,US
+3492912384,3492913663,US
+3492913664,3492913919,CA
+3492913920,3492917247,US
3492917248,3492917503,VI
-3492917504,3492924991,US
-3492924992,3492925007,DE
-3492925008,3492926079,US
-3492926080,3492926095,EU
-3492926096,3492934111,US
+3492917504,3492923391,US
+3492923392,3492923647,GB
+3492923648,3492933375,US
+3492933376,3492933376,CA
+3492933377,3492933377,CH
+3492933378,3492933631,CA
+3492933632,3492934111,US
3492934112,3492934143,GB
-3492934144,3492947087,US
-3492947088,3492947103,DE
-3492947104,3492950863,US
+3492934144,3492939022,US
+3492939023,3492939023,DE
+3492939024,3492950863,US
3492950864,3492950879,DE
-3492950880,3492960383,US
-3492960384,3492960511,ES
-3492960512,3492962303,US
-3492962304,3492962893,GB
-3492962894,3492962894,US
-3492962895,3492963327,GB
-3492963328,3492968415,US
-3492968416,3492968447,GB
-3492968448,3492968703,US
-3492968704,3492970239,VI
-3492970240,3492996127,US
+3492950880,3492954623,US
+3492954624,3492955135,GB
+3492955136,3492960255,US
+3492960256,3492960511,ES
+3492960512,3492962815,US
+3492962816,3492963071,GB
+3492963072,3492968191,US
+3492968192,3492968447,GB
+3492968448,3492969505,US
+3492969506,3492969506,VI
+3492969507,3492969535,US
+3492969536,3492969599,VI
+3492969600,3492994815,US
+3492994816,3492995071,GB
+3492995072,3492996127,US
3492996128,3492996136,GB
-3492996137,3493003519,US
-3493003520,3493003775,AU
-3493003776,3493008255,US
-3493008256,3493008383,MX
-3493008384,3493009279,US
-3493009280,3493009407,GB
-3493009408,3493011327,US
+3492996137,3493011327,US
3493011328,3493011455,GB
-3493011456,3493013247,US
-3493013248,3493013503,MX
-3493013504,3493014527,US
-3493014528,3493014560,GB
-3493014561,3493014592,US
-3493014593,3493014783,GB
-3493014784,3493018639,US
-3493018640,3493018655,AE
-3493018656,3493029341,US
+3493011456,3493013759,US
+3493013760,3493014015,GB
+3493014016,3493014627,US
+3493014628,3493014628,GB
+3493014629,3493029341,US
3493029342,3493029342,GB
3493029343,3493039359,US
3493039360,3493039615,AR
-3493039616,3493050367,US
-3493050368,3493050464,FR
-3493050465,3493050496,US
-3493050497,3493050623,FR
-3493050624,3493061119,US
+3493039616,3493061119,US
3493061120,3493061375,BR
-3493061376,3493068543,US
-3493068544,3493068799,GB
-3493068800,3493069055,US
-3493069056,3493069311,A2
-3493069312,3493073151,US
+3493061376,3493062911,US
+3493062912,3493063167,DE
+3493063168,3493073151,US
3493073152,3493073407,BO
3493073408,3493073663,US
3493073664,3493073919,BO
@@ -154312,49 +82903,24 @@
3493140224,3493140479,DE
3493140480,3493142271,US
3493142272,3493142527,ID
-3493142528,3493174877,US
-3493174878,3493174878,US
-3493174879,3493244927,US
+3493142528,3493244927,US
3493244928,3493249023,PR
3493249024,3493866495,US
3493866496,3493867519,VG
3493867520,3493881855,US
3493881856,3493882879,CA
-3493882880,3493886715,US
-3493886716,3493886719,BZ
-3493886720,3493887823,US
-3493887824,3493887831,BR
-3493887832,3493900371,US
+3493882880,3493900371,US
3493900372,3493900375,GB
-3493900376,3493900911,US
-3493900912,3493900927,MX
-3493900928,3493901023,US
+3493900376,3493901023,US
3493901024,3493901031,HK
-3493901032,3493901103,US
-3493901104,3493901119,EC
-3493901120,3493901215,US
-3493901216,3493901231,AE
-3493901232,3493901307,US
-3493901308,3493901311,CA
+3493901032,3493901311,US
3493901312,3493901567,AE
-3493901568,3493901579,US
-3493901580,3493901583,TT
-3493901584,3493901599,VG
-3493901600,3493901759,US
-3493901760,3493901767,AE
-3493901768,3493901791,US
-3493901792,3493901823,AE
-3493901824,3493901847,US
-3493901848,3493901851,CA
-3493901852,3493903551,US
-3493903552,3493903567,KW
-3493903568,3493914239,US
-3493914240,3493914367,CA
-3493914368,3493936127,US
+3493901568,3493928959,US
+3493931008,3493936127,US
3493936128,3493937151,CA
-3493937152,3493939199,US
-3493939200,3493940223,CA
-3493940224,3493980159,US
+3493937152,3493939455,US
+3493939456,3493939711,CA
+3493939712,3493980159,US
3493980160,3493981183,CA
3493981184,3493982207,US
3493982208,3493984255,CA
@@ -154363,58 +82929,28 @@
3493987328,3493990399,US
3493990400,3493991423,CA
3493991424,3493998591,US
-3493998592,3494000639,AI
+3493998592,3493998847,AI
+3493998848,3493999359,KN
+3493999360,3494000639,AI
3494000640,3494003711,US
3494003712,3494004735,CA
3494004736,3494009855,US
3494009856,3494010879,CA
-3494010880,3494011231,US
-3494011232,3494011247,HK
-3494011248,3494014975,US
+3494010880,3494014975,US
3494014976,3494017023,CA
-3494017024,3494044671,US
+3494017024,3494043647,US
3494044672,3494045695,CA
3494045696,3494049791,US
3494049792,3494051839,CA
-3494051840,3494075391,US
+3494051840,3494059007,US
+3494060032,3494075391,US
3494075392,3494076415,CA
3494076416,3494088703,US
3494088704,3494090751,CA
3494090752,3494094847,US
3494094848,3494095871,CA
-3494095872,3494101319,US
-3494101320,3494101327,GB
-3494101328,3494101377,US
-3494101378,3494101385,JM
-3494101386,3494101407,US
-3494101408,3494101415,CO
-3494101416,3494101429,US
-3494101430,3494101437,JM
-3494101438,3494102481,US
-3494102482,3494102489,CA
-3494102490,3494102631,US
-3494102632,3494102639,SB
-3494102640,3494102687,US
-3494102688,3494102701,PE
-3494102702,3494102735,US
-3494102736,3494102743,VI
-3494102744,3494115471,US
-3494115472,3494115487,AU
-3494115488,3494115495,US
-3494115496,3494115503,CA
-3494115504,3494115983,US
-3494115984,3494115991,AU
-3494115992,3494116007,US
-3494116008,3494116015,GB
-3494116016,3494116375,US
-3494116376,3494116383,GB
-3494116384,3494116407,US
-3494116408,3494116415,CA
-3494116416,3494116431,US
-3494116432,3494116439,GB
-3494116440,3494116495,US
-3494116496,3494116519,NL
-3494116520,3494121471,US
+3494095872,3494106111,US
+3494107136,3494121471,US
3494121472,3494122495,CA
3494122496,3494125567,US
3494125568,3494126591,CA
@@ -154428,96 +82964,33 @@
3494168576,3494170623,CA
3494170624,3494181631,US
3494181632,3494181887,SN
-3494181888,3494184959,US
+3494182912,3494184959,US
3494184960,3494187007,CA
3494187008,3494191359,US
3494191360,3494191615,DE
3494191616,3494191871,GB
3494191872,3494192127,NL
3494192128,3494197247,US
-3494197248,3494197391,CA
-3494197392,3494197412,FR
-3494197413,3494197448,CA
-3494197449,3494197456,AE
-3494197457,3494197493,CA
-3494197494,3494197502,FR
-3494197503,3494197536,CA
-3494197537,3494197560,AE
-3494197561,3494197569,FR
-3494197570,3494197604,CA
-3494197605,3494197614,US
-3494197615,3494197760,CA
-3494197761,3494197777,AE
-3494197778,3494197953,CA
-3494197954,3494197967,US
-3494197968,3494198259,CA
-3494198260,3494198260,US
-3494198261,3494198271,CA
-3494198272,3494228031,US
-3494228032,3494228095,AU
-3494228096,3494228319,US
-3494228320,3494228335,RU
-3494228336,3494228863,US
-3494228864,3494228927,IN
-3494228928,3494229375,US
-3494229376,3494229407,BZ
-3494229408,3494229999,US
-3494230000,3494230015,CA
-3494230016,3494241927,US
-3494241928,3494241935,AU
-3494241936,3494241951,US
-3494241952,3494241959,IN
-3494241960,3494242247,US
-3494242248,3494242255,CO
-3494242256,3494244351,US
+3494197248,3494198271,CA
+3494198272,3494244351,US
3494244352,3494246399,CA
3494246400,3494247423,US
3494247424,3494250495,CA
3494250496,3494262783,US
3494262784,3494264831,CA
-3494264832,3494267007,US
-3494267008,3494267023,AE
-3494267024,3494267087,US
-3494267088,3494267103,PK
-3494267104,3494267423,US
-3494267424,3494267439,GB
-3494267440,3494268287,US
-3494268288,3494268319,TH
-3494268320,3494268335,UA
-3494268336,3494268815,US
-3494268816,3494268831,UA
-3494268832,3494271999,US
+3494264832,3494271999,US
3494272000,3494273023,KN
3494273024,3494275071,US
3494275072,3494277119,CA
-3494277120,3494291743,US
-3494291744,3494291751,GB
-3494291752,3494299663,US
-3494299664,3494299679,TH
-3494299680,3494299687,US
-3494299688,3494299695,SC
-3494299696,3494299727,US
-3494299728,3494299735,SC
-3494299736,3494301247,US
-3494301248,3494301311,SG
-3494301312,3494302719,US
+3494277120,3494294527,US
+3494295040,3494302719,US
3494302720,3494303743,CA
3494303744,3494310911,US
3494310912,3494311935,CA
-3494311936,3494313135,US
-3494313136,3494313143,GB
-3494313144,3494313327,US
-3494313328,3494313343,CO
-3494313344,3494313359,US
-3494313360,3494313375,MX
-3494313376,3494316031,US
+3494311936,3494316031,US
3494316032,3494317055,CA
3494317056,3494336511,US
-3494336512,3494337023,CA
-3494337024,3494337087,US
-3494337088,3494337135,CA
-3494337136,3494337151,US
-3494337152,3494337535,CA
+3494336512,3494337535,CA
3494337536,3494342655,US
3494342656,3494344703,CA
3494344704,3494359039,US
@@ -154530,61 +83003,31 @@
3494402560,3494402815,GB
3494402816,3494410239,US
3494410240,3494412287,CA
-3494412288,3494420415,US
-3494420416,3494420447,CA
-3494420448,3494422527,US
+3494412288,3494422527,US
3494422528,3494425599,CA
-3494425600,3494427199,US
-3494427200,3494427215,CA
-3494427216,3494428223,US
-3494428224,3494428239,CA
-3494428240,3494432767,US
+3494425600,3494432767,US
3494432768,3494433791,CA
3494433792,3494437887,US
-3494437888,3494437983,GP
-3494437984,3494437999,KN
-3494438000,3494438023,GP
-3494438024,3494438031,KN
-3494438032,3494438063,GP
-3494438064,3494438071,KN
-3494438072,3494438143,GP
+3494437888,3494438143,GP
3494438144,3494438399,DM
3494438400,3494438655,KN
3494438656,3494438911,DM
3494438912,3494455295,US
3494455296,3494456319,CA
-3494456320,3494457779,US
-3494457780,3494457787,GB
-3494457788,3494457819,US
-3494457820,3494457827,GB
-3494457828,3494459391,US
+3494456320,3494459391,US
3494459392,3494460415,CA
3494460416,3494464511,US
3494464512,3494465535,CA
-3494465536,3494501023,US
-3494501024,3494501039,AU
-3494501040,3494510591,US
+3494465536,3494470655,US
+3494471680,3494510591,US
3494510592,3494512639,CA
3494512640,3494512895,US
3494512896,3494513151,NO
3494513152,3494516735,US
3494516736,3494517759,CA
-3494517760,3494539263,US
-3494539264,3494540031,A2
+3494517760,3494540031,US
3494540032,3494540287,UG
-3494540288,3494554453,US
-3494554454,3494554461,ES
-3494554462,3494554554,US
-3494554555,3494554562,ES
-3494554563,3494554655,US
-3494554656,3494554687,TR
-3494554688,3494555167,US
-3494555168,3494555199,TR
-3494555200,3494555263,US
-3494555264,3494555295,TR
-3494555296,3494555392,US
-3494555393,3494555423,CN
-3494555424,3494563839,US
+3494540288,3494563839,US
3494563840,3494565887,CA
3494565888,3494594559,US
3494594560,3494595583,CA
@@ -154596,141 +83039,55 @@
3494624256,3494625279,CA
3494625280,3494627327,US
3494627328,3494628351,BM
-3494628352,3494651903,US
+3494628352,3494646783,US
+3494647808,3494651903,US
3494651904,3494652927,CA
3494652928,3494660095,US
3494660096,3494661119,CA
3494661120,3494668287,US
-3494668288,3494669375,CA
-3494669376,3494669439,US
-3494669440,3494670207,CA
-3494670208,3494670215,US
-3494670216,3494670335,CA
+3494668288,3494670335,CA
3494670336,3494700031,US
3494700032,3494701055,CA
3494701056,3494712319,US
3494712320,3494712575,CA
-3494712576,3494713091,US
-3494713092,3494713092,US
-3494713093,3494727679,US
+3494712576,3494727679,US
3494727680,3494729727,CA
3494729728,3494730751,US
3494730752,3494731775,CA
3494731776,3494743039,US
-3494743040,3494744063,CA
-3494744064,3494744399,US
-3494744400,3494744407,AU
-3494744408,3494744703,US
-3494744704,3494744711,DE
-3494744712,3494745151,US
-3494745152,3494745159,AU
-3494745160,3494745303,US
-3494745304,3494745311,AU
-3494745312,3494745951,US
-3494745952,3494745959,GB
-3494745960,3494746019,US
-3494746020,3494746023,AU
-3494746024,3494747135,US
+3494744064,3494747135,US
3494747136,3494748159,CA
-3494748160,3494757375,US
+3494748160,3494749439,US
+3494750208,3494757375,US
3494757376,3494758399,CA
-3494758400,3494763047,US
-3494763048,3494763055,JP
-3494763056,3494763063,AU
-3494763064,3494763071,MX
-3494763072,3494763119,US
-3494763120,3494763127,DE
-3494763128,3494763199,US
-3494763200,3494763207,KY
-3494763208,3494763903,US
-3494763904,3494763919,AU
-3494763920,3494763983,US
-3494763984,3494763999,AU
-3494764000,3494764295,US
-3494764296,3494764303,CA
-3494764304,3494764343,US
-3494764344,3494764351,GB
-3494764352,3494764375,US
-3494764376,3494764383,AU
-3494764384,3494764447,US
-3494764448,3494764455,GB
-3494764456,3494764527,US
-3494764528,3494764535,ES
-3494764536,3494776831,US
+3494758400,3494776831,US
3494776832,3494777855,CA
3494777856,3494785023,US
-3494785024,3494785279,GP
-3494785280,3494785535,MF
-3494785536,3494786047,GP
-3494786048,3494786303,MF
-3494786304,3494786559,GP
-3494786560,3494787071,MF
-3494787072,3494787199,A2
-3494787200,3494787231,GB
-3494787232,3494787327,A2
+3494785024,3494787071,MF
+3494787072,3494787327,CA
3494787328,3494787583,NG
-3494787584,3494788095,A2
+3494787584,3494788095,CA
3494788096,3494788351,NG
3494788352,3494788607,LY
-3494788608,3494788863,A2
-3494788864,3494789119,CA
-3494789120,3494852607,US
+3494788608,3494789119,CA
+3494789120,3494830079,US
+3494831104,3494852607,US
3494852608,3494854655,CA
-3494854656,3494861087,US
-3494861088,3494861095,CA
-3494861096,3494861407,US
-3494861408,3494861415,CN
-3494861416,3494861575,US
-3494861576,3494861583,CH
-3494861584,3494861615,US
-3494861616,3494861623,AU
-3494861624,3494861991,US
-3494861992,3494861999,GB
-3494862000,3494862639,US
-3494862640,3494862647,JP
-3494862648,3494862695,US
-3494862696,3494862703,TR
-3494862704,3494862847,US
+3494854656,3494862847,US
3494862848,3494863871,DM
3494863872,3494866943,US
3494866944,3494867967,CA
-3494867968,3494874111,US
+3494867968,3494868991,US
+3494870016,3494874111,US
3494874112,3494874367,ES
-3494874368,3494874879,US
-3494874880,3494874911,ES
-3494874912,3494893567,US
+3494874368,3494879743,US
+3494881280,3494893567,US
3494893568,3494894591,CA
-3494894592,3494906455,US
-3494906456,3494906463,GB
-3494906464,3494917119,US
+3494894592,3494917119,US
3494917120,3494917631,CA
3494917632,3494928383,US
3494928384,3494930431,CA
-3494930432,3494935684,US
-3494935685,3494935685,AU
-3494935686,3494935746,US
-3494935747,3494935747,GB
-3494935748,3494935756,US
-3494935757,3494935757,AU
-3494935758,3494935940,US
-3494935941,3494935941,AU
-3494935942,3494936002,US
-3494936003,3494936003,GB
-3494936004,3494936012,US
-3494936013,3494936013,AU
-3494936014,3494936196,US
-3494936197,3494936197,AU
-3494936198,3494936258,US
-3494936259,3494936259,GB
-3494936260,3494936268,US
-3494936269,3494936269,AU
-3494936270,3494936452,US
-3494936453,3494936453,AU
-3494936454,3494936514,US
-3494936515,3494936515,GB
-3494936516,3494936524,US
-3494936525,3494936525,AU
-3494936526,3494938623,US
+3494930432,3494938623,US
3494938624,3494939647,CA
3494939648,3494950655,US
3494950656,3494950911,PH
@@ -154754,69 +83111,44 @@
3495057408,3495059455,CA
3495059456,3495065599,US
3495065600,3495066623,CA
-3495066624,3495068031,US
-3495068032,3495068047,PL
-3495068048,3495068223,US
-3495068224,3495068239,PL
-3495068240,3495068655,US
-3495068656,3495068671,PL
-3495068672,3495076863,US
+3495066624,3495076863,US
3495076864,3495077887,BM
3495077888,3495090175,US
3495090176,3495091199,KY
3495091200,3495098367,US
3495098368,3495100415,CA
-3495100416,3495120895,US
+3495100416,3495113727,US
+3495114752,3495120895,US
3495120896,3495122943,AG
3495122944,3495123423,US
3495123424,3495123439,IN
3495123440,3495123455,US
3495123456,3495123967,GB
-3495123968,3495127615,US
-3495127616,3495127647,CA
-3495127648,3495128991,US
-3495128992,3495129007,AE
-3495129008,3495136471,US
-3495136472,3495136479,AR
-3495136480,3495136495,US
-3495136496,3495136503,IN
-3495136504,3495153663,US
+3495123968,3495153663,US
3495153664,3495155711,CA
-3495155712,3495157039,US
-3495157040,3495157047,SE
-3495157048,3495164191,US
-3495164192,3495164199,CA
-3495164200,3495164239,US
-3495164240,3495164247,CA
-3495164248,3495164335,US
-3495164336,3495164343,CO
-3495164344,3495187199,US
+3495155712,3495157759,US
+3495159808,3495187199,US
3495187200,3495187455,IM
3495187456,3495192575,US
3495192576,3495193599,CA
3495193600,3495215103,US
3495215104,3495217151,VI
3495217152,3495219199,VC
-3495219200,3495251967,US
+3495219200,3495239679,US
+3495241728,3495251967,US
3495251968,3495254015,CA
3495254016,3495260159,US
3495260160,3495261183,CA
-3495261184,3495276287,US
-3495276288,3495276351,IN
-3495276352,3495286783,US
+3495262208,3495271423,US
+3495272192,3495285759,US
3495286784,3495288831,CA
-3495288832,3495331839,US
-3495331840,3495332863,A2
+3495288832,3495332863,US
3495332864,3495333887,CA
3495333888,3495349247,US
3495349248,3495350271,CA
3495350272,3495358463,US
3495358464,3495359487,CA
-3495359488,3495361023,US
-3495361024,3495361055,CA
-3495361056,3495363019,US
-3495363020,3495363023,AR
-3495363024,3495367679,US
+3495359488,3495367679,US
3495367680,3495368703,CA
3495368704,3495370239,US
3495370240,3495370495,RU
@@ -154828,83 +83160,30 @@
3495399424,3495400447,KN
3495400448,3495412735,US
3495412736,3495413759,CA
-3495413760,3495424033,US
-3495424034,3495424042,IN
-3495424043,3495424286,US
-3495424287,3495424308,IN
-3495424309,3495424321,US
-3495424322,3495424346,IN
-3495424347,3495424355,US
-3495424356,3495424381,IN
-3495424382,3495424629,US
-3495424630,3495424637,IN
-3495424638,3495424789,US
-3495424790,3495424797,IN
-3495424798,3495424865,US
-3495424866,3495424878,IN
-3495424879,3495424913,US
-3495424914,3495424919,IN
-3495424920,3495429119,US
+3495413760,3495429119,US
3495429120,3495430143,CA
-3495430144,3495440799,US
-3495440800,3495440815,PL
-3495440816,3495440831,US
+3495430144,3495440831,US
3495440832,3495440847,IN
-3495440848,3495440895,US
-3495440896,3495440911,PL
-3495440912,3495441151,US
-3495441152,3495441167,PL
-3495441168,3495441407,US
-3495441408,3495441423,PL
-3495441424,3495441663,US
-3495441664,3495441679,PL
-3495441680,3495441919,US
-3495441920,3495441935,PL
-3495441936,3495442319,US
-3495442320,3495442335,PL
-3495442336,3495455743,US
+3495440848,3495455743,US
3495455744,3495456767,CA
3495456768,3495463935,US
3495463936,3495464959,CA
3495464960,3495475199,US
-3495475200,3495475711,CA
-3495475712,3495476223,EE
-3495476224,3495477247,CA
+3495475200,3495477247,CA
3495477248,3495478271,US
3495478272,3495479295,CA
-3495479296,3495485599,US
-3495485600,3495485615,GB
-3495485616,3495485631,US
-3495485632,3495485663,VG
-3495485664,3495486079,US
-3495486080,3495486143,PA
-3495486144,3495486207,US
-3495486208,3495486239,AI
-3495486240,3495486335,US
-3495486336,3495486399,VG
-3495486400,3495505919,US
+3495479296,3495501823,US
+3495502848,3495505919,US
3495505920,3495507967,CA
-3495507968,3495515135,US
+3495507968,3495508991,US
+3495510016,3495515135,US
3495515136,3495516159,CA
-3495516160,3495520375,US
-3495520376,3495520379,SG
-3495520380,3495520571,US
-3495520572,3495520579,KE
-3495520580,3495520667,US
-3495520668,3495520706,BR
-3495520707,3495520787,US
-3495520788,3495520791,CH
-3495520792,3495526399,US
+3495516160,3495521279,US
+3495522304,3495526399,US
3495526400,3495527423,CA
-3495527424,3495542783,US
-3495542784,3495544063,A2
+3495527424,3495544063,US
3495544064,3495544319,NG
-3495544320,3495544831,A2
-3495544832,3495549809,US
-3495549810,3495549813,IN
-3495549814,3495549917,US
-3495549918,3495549923,CA
-3495549924,3495550207,US
+3495544320,3495550207,US
3495550208,3495550463,CA
3495550464,3495551999,US
3495552000,3495553023,BM
@@ -154914,17 +83193,16 @@
3495583744,3495585791,CA
3495585792,3495587839,US
3495587840,3495588863,MS
-3495588864,3495618559,US
+3495588864,3495593983,US
+3495594496,3495595519,US
+3495596032,3495618559,US
3495618560,3495619583,CA
3495619584,3495620607,US
3495620608,3495622655,CA
-3495622656,3495653887,US
-3495653888,3495654399,CA
-3495654400,3495657551,US
-3495657552,3495657567,GB
-3495657568,3495658527,US
-3495658528,3495658559,FR
-3495658560,3495673855,US
+3495622656,3495647231,US
+3495648000,3495653887,US
+3495653888,3495654143,CA
+3495654144,3495673855,US
3495673856,3495674879,MF
3495674880,3495675391,VG
3495675392,3495688191,US
@@ -154934,71 +83212,39 @@
3495696384,3495703551,US
3495703552,3495704063,GB
3495704064,3495704575,CA
-3495704576,3495718911,US
+3495704576,3495712767,US
+3495714816,3495718911,US
3495718912,3495723007,CA
3495723008,3495724031,US
3495724032,3495727103,CA
3495727104,3495749631,US
-3495749632,3495750655,CA
-3495750656,3495781311,US
-3495781312,3495781375,CA
-3495781376,3495815167,US
-3495815168,3495815407,CA
-3495815408,3495815411,US
-3495815412,3495817215,CA
+3495749632,3495749856,CA
+3495749857,3495749861,RU
+3495749862,3495750655,CA
+3495750656,3495792639,US
+3495794688,3495815167,US
+3495815168,3495817215,CA
3495817216,3495828479,US
3495828480,3495829503,CA
3495829504,3495837695,US
-3495837696,3495838463,CA
+3495837696,3495837703,CA
+3495837704,3495837711,US
+3495837712,3495838463,CA
3495838464,3495847935,US
3495847936,3495849983,CA
-3495849984,3495859332,US
-3495859333,3495859333,AU
-3495859334,3495859394,US
-3495859395,3495859395,GB
-3495859396,3495859404,US
-3495859405,3495859405,AU
-3495859406,3495859588,US
-3495859589,3495859589,AU
-3495859590,3495859650,US
-3495859651,3495859651,GB
-3495859652,3495859660,US
-3495859661,3495859661,AU
-3495859662,3495862271,US
+3495849984,3495862271,US
3495862272,3495864319,CA
3495864320,3495864831,DM
3495864832,3495865343,MF
-3495865344,3495865407,US
-3495865408,3495865423,CA
-3495865424,3495865535,US
-3495865536,3495865599,CA
-3495865600,3495865727,US
-3495865728,3495865759,CA
-3495865760,3495865855,US
-3495865856,3495865871,CA
-3495865872,3495865903,US
-3495865904,3495865983,CA
-3495865984,3495866015,US
-3495866016,3495866047,CA
-3495866048,3495866079,US
-3495866080,3495866095,CA
-3495866096,3495866103,US
-3495866104,3495866111,CA
-3495866112,3495866175,US
-3495866176,3495866287,CA
-3495866288,3495866303,US
-3495866304,3495866335,CA
-3495866336,3495866351,BD
-3495866352,3495866355,US
-3495866356,3495866359,CA
-3495866360,3495866363,US
-3495866364,3495866367,CA
-3495866368,3495868415,LC
+3495865344,3495866367,US
+3495866368,3495866623,VC
+3495866624,3495866879,LC
+3495866880,3495867391,VC
+3495867392,3495867647,LC
+3495867648,3495868415,VC
3495868416,3495871487,US
3495871488,3495872511,CA
-3495872512,3495881119,US
-3495881120,3495881151,PA
-3495881152,3495881471,US
+3495872512,3495881471,US
3495881472,3495881727,PA
3495881728,3495896063,US
3495896064,3495897087,PR
@@ -155011,25 +83257,16 @@
3495985152,3495988223,NI
3495988224,3495989247,GT
3495989248,3496034303,US
-3496034304,3496048135,CA
-3496048136,3496048351,US
-3496048352,3496048359,CA
-3496048360,3496048383,US
-3496048384,3496050687,CA
+3496034304,3496050687,CA
3496050688,3496132607,US
3496132608,3496148991,CA
3496148992,3496181759,US
3496181760,3496189951,CA
-3496189952,3496190463,US
-3496190464,3496190975,CA
-3496190976,3496202239,US
-3496202240,3496202303,CA
-3496202304,3496205839,US
-3496205840,3496205855,ID
-3496205856,3496205871,CA
-3496205872,3496217983,US
-3496217984,3496218111,PL
-3496218112,3496296447,US
+3496189952,3496190519,US
+3496190520,3496190527,CA
+3496190528,3496190719,US
+3496190720,3496190975,CA
+3496190976,3496296447,US
3496296448,3496312831,CA
3496312832,3496468479,US
3496468480,3496476671,CA
@@ -155037,288 +83274,51 @@
3496875264,3496875519,BD
3496875520,3496878079,US
3496878080,3496882175,CA
-3496882176,3496886399,US
-3496886400,3496886407,TR
-3496886408,3496886423,US
-3496886424,3496886463,TR
-3496886464,3496886495,US
-3496886496,3496886503,CA
-3496886504,3496886615,US
-3496886616,3496886623,CA
-3496886624,3496886655,US
-3496886656,3496886671,IN
-3496886672,3496886711,US
-3496886712,3496886727,AU
-3496886728,3496886823,US
-3496886824,3496886831,IN
-3496886832,3496886935,US
-3496886936,3496886943,PK
-3496886944,3496887135,US
-3496887136,3496887167,AU
-3496887168,3496887399,US
-3496887400,3496887407,PK
-3496887408,3496887471,US
-3496887472,3496887503,AU
-3496887504,3496887511,US
-3496887512,3496887519,CA
-3496887520,3496887527,AU
-3496887528,3496887535,US
-3496887536,3496887543,PK
-3496887544,3496887575,US
-3496887576,3496887583,AU
-3496887584,3496887631,US
-3496887632,3496887639,RU
-3496887640,3496887655,US
-3496887656,3496887663,AU
-3496887664,3496887703,US
-3496887704,3496887727,AU
-3496887728,3496887807,US
-3496887808,3496887935,AU
-3496887936,3496887975,US
-3496887976,3496887983,AU
-3496887984,3496888063,US
-3496888064,3496888095,AU
-3496888096,3496888127,US
-3496888128,3496888159,TR
-3496888160,3496888207,US
-3496888208,3496888223,AU
-3496888224,3496888231,US
-3496888232,3496888239,BR
-3496888240,3496888319,US
-3496888320,3496888335,AU
-3496888336,3496888343,US
-3496888344,3496888351,AU
-3496888352,3496888367,US
-3496888368,3496888383,AU
-3496888384,3496888399,US
-3496888400,3496888415,AU
-3496888416,3496888431,US
-3496888432,3496888439,AU
-3496888440,3496888583,US
-3496888584,3496888591,AU
-3496888592,3496888599,US
-3496888600,3496888607,PK
-3496888608,3496888623,US
-3496888624,3496888655,AU
-3496888656,3496888671,US
-3496888672,3496888679,NO
-3496888680,3496893695,US
-3496893696,3496893703,RU
-3496893704,3496894463,US
+3496882176,3496894463,US
3496894464,3496902655,CA
3496902656,3496946175,US
3496946176,3496946431,HK
3496946432,3496946943,US
3496946944,3496947199,IN
3496947200,3496947711,US
-3496947712,3496951807,JP
+3496947712,3496949759,JP
+3496949760,3496951807,US
3496951808,3496959999,CA
-3496960000,3497001247,US
-3497001248,3497001263,AU
-3497001264,3497001327,US
-3497001328,3497001343,DE
-3497001344,3497005887,US
-3497005888,3497005951,CA
-3497005952,3497008071,US
-3497008072,3497008079,CA
-3497008080,3497008671,US
-3497008672,3497008687,CA
-3497008688,3497009399,US
-3497009400,3497009407,AE
-3497009408,3497010703,US
-3497010704,3497010711,PK
-3497010712,3497010719,US
-3497010720,3497010727,AE
-3497010728,3497010735,US
-3497010736,3497010751,CA
-3497010752,3497014687,US
-3497014688,3497014695,GB
-3497014696,3497017343,US
-3497017344,3497017375,GB
-3497017376,3497017399,US
-3497017400,3497017439,GB
-3497017440,3497018599,US
-3497018600,3497018607,IL
-3497018608,3497019231,US
-3497019232,3497019247,PK
-3497019248,3497020415,US
+3496960000,3497020415,US
3497020416,3497020671,IL
-3497020672,3497020943,US
-3497020944,3497020959,CA
-3497020960,3497022367,US
-3497022368,3497022399,AU
-3497022400,3497023447,US
-3497023448,3497023455,CA
-3497023456,3497024639,US
-3497024640,3497024655,AU
-3497024656,3497024735,US
-3497024736,3497024751,GB
-3497024752,3497024991,US
-3497024992,3497025007,JP
-3497025008,3497025127,US
-3497025128,3497025135,PK
-3497025136,3497026815,US
-3497026816,3497026847,ES
-3497026848,3497026919,US
-3497026920,3497026927,CA
-3497026928,3497027375,US
-3497027376,3497027383,AE
-3497027384,3497028383,US
-3497028384,3497028391,MX
-3497028392,3497028431,US
-3497028432,3497028439,MX
-3497028440,3497028479,US
-3497028480,3497028495,AE
-3497028496,3497028983,US
-3497028984,3497029055,CA
-3497029056,3497029071,US
-3497029072,3497029087,TH
-3497029088,3497029095,GB
-3497029096,3497029151,US
-3497029152,3497029167,TH
-3497029168,3497029231,US
-3497029232,3497029239,GB
-3497029240,3497030415,US
-3497030416,3497030423,IN
-3497030424,3497030495,US
-3497030496,3497030511,AU
-3497030512,3497030767,US
-3497030768,3497030775,CH
-3497030776,3497030911,US
-3497030912,3497030943,CH
-3497030944,3497031071,US
-3497031072,3497031079,CA
-3497031080,3497032111,US
-3497032112,3497032119,CA
-3497032120,3497033383,US
-3497033384,3497033391,CH
-3497033392,3497033439,US
-3497033440,3497033447,PK
-3497033448,3497066495,US
+3497020672,3497066495,US
3497066496,3497082879,CA
-3497082880,3497156863,US
-3497156864,3497156879,NL
-3497156880,3497156983,US
-3497156984,3497157006,DZ
-3497157007,3497157375,US
-3497157376,3497158143,A2
-3497158144,3497160191,US
-3497160192,3497160351,NL
-3497160352,3497161215,US
-3497161216,3497161343,HK
-3497161344,3497161375,US
-3497161376,3497161407,HK
-3497161408,3497161735,US
+3497082880,3497161735,US
3497161736,3497161743,MT
-3497161744,3497161751,US
-3497161752,3497161759,GB
+3497161744,3497161759,US
3497161760,3497161767,PT
3497161768,3497161775,MT
3497161776,3497161895,US
3497161896,3497161903,MT
-3497161904,3497161911,US
-3497161912,3497161919,TN
-3497161920,3497161927,US
-3497161928,3497161935,GB
+3497161904,3497161935,US
3497161936,3497161943,MT
3497161944,3497162495,US
3497162496,3497162751,GB
3497162752,3497163007,NL
-3497163008,3497163311,US
-3497163312,3497163319,NO
-3497163320,3497163351,US
-3497163352,3497163359,ES
-3497163360,3497163383,GB
-3497163384,3497163399,US
-3497163400,3497163407,NO
-3497163408,3497163447,US
-3497163448,3497163455,ES
-3497163456,3497163463,US
-3497163464,3497163471,ES
-3497163472,3497163519,US
-3497163520,3497163655,DK
-3497163656,3497163663,NO
-3497163664,3497163679,DK
-3497163680,3497163695,US
-3497163696,3497163703,DK
-3497163704,3497163711,ES
-3497163712,3497163723,US
-3497163724,3497163727,GB
-3497163728,3497164287,US
-3497164288,3497164295,GB
-3497164296,3497164463,US
-3497164464,3497164479,ES
-3497164480,3497164487,US
-3497164488,3497164495,ES
-3497164496,3497164799,US
+3497163008,3497163167,US
+3497163168,3497163175,GB
+3497163176,3497164799,US
3497164800,3497181183,CA
-3497181184,3497225583,US
-3497225584,3497225591,AU
-3497225592,3497226295,US
-3497226296,3497226303,SG
-3497226304,3497226391,US
-3497226392,3497226399,IR
-3497226400,3497226687,US
-3497226688,3497226719,GB
-3497226720,3497226943,US
-3497226944,3497226975,CA
-3497226976,3497227311,US
-3497227312,3497227327,CA
-3497227328,3497227599,US
-3497227600,3497227615,CA
-3497227616,3497229687,US
-3497229688,3497229695,AU
-3497229696,3497233407,US
+3497181184,3497233407,US
3497233408,3497233663,CN
-3497233664,3497251915,US
-3497251916,3497251916,US
-3497251917,3497263815,US
-3497263816,3497263823,GB
-3497263824,3497264127,US
-3497264128,3497264159,CA
-3497264160,3497264913,US
-3497264914,3497264950,GB
-3497264951,3497266527,US
-3497266528,3497266535,GB
-3497266536,3497268223,US
-3497268224,3497268287,GB
-3497268288,3497268703,US
-3497268704,3497268719,CA
-3497268720,3497268815,US
-3497268816,3497268831,CA
-3497268832,3497273919,US
-3497273920,3497273927,CA
-3497273928,3497274175,US
-3497274176,3497274207,CA
-3497274208,3497340671,US
-3497340672,3497340799,PL
-3497340800,3497410559,US
+3497233664,3497410559,US
3497410560,3497431039,CA
3497431040,3497447423,US
3497447424,3497451519,CA
-3497451520,3497453119,US
-3497453120,3497453135,GB
-3497453136,3497453695,US
-3497453696,3497453711,GB
-3497453712,3497664255,US
+3497451520,3497664255,US
3497664256,3497664511,NL
-3497664512,3497713415,US
-3497713416,3497713423,EC
-3497713424,3497717759,US
-3497717760,3497719807,A2
-3497719808,3497720063,MR
-3497720064,3497721343,A2
-3497721344,3497721599,NG
-3497721600,3497721855,A2
-3497721856,3497739679,US
-3497739680,3497739687,CA
-3497739688,3497820159,US
+3497664512,3497717759,US
+3497717760,3497721855,CA
+3497721856,3497778943,US
+3497778944,3497779199,CA
+3497779200,3497820159,US
3497820160,3497852927,CA
-3497852928,3498254335,US
-3498254336,3498254367,JM
-3498254368,3498254431,US
-3498254432,3498254447,JM
-3498254448,3498254591,US
+3497852928,3498254591,US
3498254592,3498254847,JM
3498254848,3498287103,US
3498287104,3498295295,JM
@@ -155326,11 +83326,9 @@
3498428416,3498429439,CR
3498429440,3498429951,US
3498429952,3498430207,CR
-3498430208,3498505343,US
-3498505344,3498505375,SG
-3498505376,3498509055,US
-3498509056,3498510335,PR
-3498510336,3498513151,US
+3498430208,3498509055,US
+3498509056,3498509311,PR
+3498509312,3498513151,US
3498513152,3498513407,CL
3498513408,3498513919,US
3498513920,3498514431,CL
@@ -155339,26 +83337,20 @@
3498588160,3498599935,US
3498599936,3498600191,WS
3498600192,3498708991,US
-3498708992,3498712687,JM
-3498712688,3498712703,US
-3498712704,3498717183,JM
+3498708992,3498717183,JM
3498717184,3498760191,US
-3498760192,3498762239,PR
-3498762240,3498812415,US
+3498760192,3498761215,PR
+3498761216,3498761727,US
+3498761728,3498761983,PR
+3498761984,3498812415,US
3498812416,3498812671,PF
-3498812672,3499186591,US
-3499186592,3499186623,MX
-3499186624,3499299327,US
+3498812672,3499299327,US
3499299328,3499299583,WS
3499299584,3499403263,US
3499403264,3499403775,MW
3499403776,3499436031,US
3499436032,3499436287,DE
-3499436288,3499437055,US
-3499437056,3499437151,DE
-3499437152,3499437423,US
-3499437424,3499437431,IT
-3499437432,3499450367,US
+3499436288,3499450367,US
3499450368,3499451391,IN
3499451392,3499705343,US
3499705344,3499705855,TZ
@@ -155376,39 +83368,23 @@
3500018944,3500019199,LC
3500019200,3500019455,AG
3500019456,3500019711,LC
-3500019712,3500076415,US
-3500076416,3500076543,SG
-3500076544,3500126207,US
+3500019712,3500126207,US
3500126208,3500126463,SE
3500126464,3500126719,GB
-3500126720,3500144639,US
-3500144640,3500144895,IT
-3500144896,3500274175,US
-3500274176,3500274239,IE
-3500274240,3500351487,US
-3500351488,3500352607,JM
-3500352608,3500352647,US
-3500352648,3500359679,JM
-3500359680,3500371583,US
-3500371584,3500371599,GB
-3500371600,3500486655,US
+3500126720,3500351487,US
+3500351488,3500359679,JM
+3500359680,3500486655,US
3500486656,3500490751,CR
3500490752,3500613631,US
3500613632,3500614655,MZ
-3500614656,3500664262,US
-3500664263,3500664263,US
-3500664264,3500664575,US
-3500664576,3500664831,US
-3500664832,3500664870,US
+3500614656,3500664870,US
3500664871,3500664871,CA
-3500664872,3500666751,US
-3500666752,3500666879,US
-3500666880,3500689407,US
+3500664872,3500689407,US
3500689408,3500689919,CL
3500689920,3500707327,US
3500707328,3500707839,CA
-3500707840,3500724991,US
-3500724992,3500725503,EC
+3500707840,3500725247,US
+3500725248,3500725503,EC
3500725504,3500725759,HT
3500725760,3500726015,EC
3500726016,3500726271,HT
@@ -155416,43 +83392,17 @@
3500728320,3500736511,KY
3500736512,3500752895,US
3500752896,3500761087,KY
-3500761088,3500809991,US
-3500809992,3500809999,CA
-3500810000,3500810247,US
-3500810248,3500810255,CA
-3500810256,3500811567,US
-3500811568,3500811583,AU
-3500811584,3500811591,US
-3500811592,3500811631,AU
-3500811632,3500812175,US
-3500812176,3500812183,GB
-3500812184,3500921279,US
-3500921280,3500921311,AU
-3500921312,3501146175,US
-3501146176,3501146335,DE
-3501146336,3501146951,US
-3501146952,3501146959,CA
-3501146960,3501146975,GB
-3501146976,3501147039,US
-3501147040,3501147071,CA
-3501147072,3501181703,US
-3501181704,3501181711,AU
-3501181712,3501181727,KR
-3501181728,3501181743,US
-3501181744,3501181951,JP
-3501181952,3501182975,US
-3501182976,3501183007,SG
-3501183008,3501183023,US
-3501183024,3501183047,SG
-3501183048,3501183167,US
-3501183168,3501183231,SG
-3501183232,3501183487,US
+3500761088,3500807019,US
+3500807020,3500807023,GB
+3500807024,3500807195,US
+3500807196,3500807199,GB
+3500807200,3500807299,US
+3500807300,3500807303,GB
+3500807304,3500813219,US
+3500813220,3500813223,GB
+3500813224,3501183487,US
3501183488,3501183743,GB
-3501183744,3501340415,US
-3501340416,3501340471,DE
-3501340472,3501340478,US
-3501340479,3501340671,DE
-3501340672,3501368831,US
+3501183744,3501368831,US
3501368832,3501369087,NL
3501369088,3501376147,US
3501376148,3501376151,NL
@@ -155460,23 +83410,7 @@
3501378048,3501378303,DE
3501378304,3501522943,US
3501522944,3501588479,CA
-3501588480,3501721187,US
-3501721188,3501721188,US
-3501721189,3501728831,US
-3501728832,3501728863,AU
-3501728864,3501732071,US
-3501732072,3501732087,AU
-3501732088,3501747967,US
-3501747968,3501748031,CA
-3501748032,3501789442,US
-3501789443,3501789443,US
-3501789444,3501789695,US
-3501789696,3501789703,GB
-3501789704,3501791751,US
-3501791752,3501791759,TW
-3501791760,3501817983,US
-3501817984,3501818015,HK
-3501818016,3502439167,US
+3501588480,3502439167,US
3502439168,3502439423,PK
3502439424,3502470143,US
3502470144,3502471167,MX
@@ -155490,15 +83424,9 @@
3502683136,3502683391,MC
3502683392,3502993407,US
3502993408,3502993919,NL
-3502993920,3503058431,US
-3503058432,3503058447,CA
-3503058448,3503206399,US
+3502993920,3503206399,US
3503206400,3503206911,CR
-3503206912,3503222695,US
-3503222696,3503222703,CA
-3503222704,3503227391,US
-3503227392,3503227407,CA
-3503227408,3503250431,US
+3503206912,3503250431,US
3503250432,3503250943,PK
3503250944,3503323135,US
3503323136,3503323647,KE
@@ -155510,9 +83438,7 @@
3503478784,3503479039,DE
3503479040,3503738879,US
3503738880,3503740927,CO
-3503740928,3503826087,US
-3503826088,3503826095,PR
-3503826096,3503890431,US
+3503740928,3503890431,US
3503890432,3503894527,CO
3503894528,3503990783,US
3503990784,3503992831,AE
@@ -155526,7 +83452,9 @@
3504207872,3504208127,CA
3504208128,3504223743,US
3504223744,3504223999,RO
-3504224000,3504889343,US
+3504224000,3504521215,US
+3504521216,3504521727,GU
+3504521728,3504889343,US
3504889344,3504889855,PK
3504889856,3504922623,US
3504922624,3504923391,PH
@@ -155540,354 +83468,68 @@
3505006080,3505012735,PR
3505012736,3505112063,US
3505112064,3505112319,EC
-3505112320,3505112335,US
-3505112336,3505113087,EC
-3505113088,3505119231,US
+3505112320,3505112575,US
+3505112576,3505112831,EC
+3505112832,3505119231,US
3505119232,3505119487,PH
3505119488,3505121023,US
3505121024,3505121279,PH
-3505121280,3505201151,US
-3505201152,3505201407,JO
-3505201408,3505220351,US
-3505220352,3505220479,CA
-3505220480,3505227247,US
-3505227248,3505227255,GB
-3505227256,3505270271,US
+3505121280,3505270271,US
3505270272,3505270527,JM
3505270528,3505270783,HT
3505270784,3505416703,US
3505416704,3505417471,MX
3505417472,3505424383,US
3505424384,3505425407,PK
-3505425408,3505432159,US
-3505432160,3505432191,A2
-3505432192,3505446271,US
-3505446272,3505446399,CA
-3505446400,3505474559,US
+3505425408,3505474559,US
3505474560,3505474815,GU
3505474816,3505511679,US
3505511680,3505511935,RO
3505511936,3505661951,US
3505661952,3505662463,JM
-3505662464,3505664799,US
-3505664800,3505664831,UA
-3505664832,3505818623,US
+3505662464,3505818623,US
3505818624,3505819647,BS
-3505819648,3505999359,US
-3505999360,3506000127,PR
-3506000128,3506043135,US
+3505819648,3506043135,US
3506043136,3506044927,PA
-3506044928,3506058815,US
-3506058816,3506058823,AF
-3506058824,3506135263,US
-3506135264,3506135295,GB
-3506135296,3506155751,US
-3506155752,3506155759,AF
-3506155760,3506161975,US
-3506161976,3506161983,AF
-3506161984,3506192639,US
-3506192640,3506192895,A2
-3506192896,3506194535,US
-3506194536,3506194543,AU
-3506194544,3506198007,US
-3506198008,3506198015,NO
-3506198016,3506214159,US
-3506214160,3506214175,CA
-3506214176,3506231807,US
+3506044928,3506231807,US
3506231808,3506232063,IN
-3506232064,3506307631,US
-3506307632,3506307647,GB
-3506307648,3506383999,US
-3506384000,3506384031,CA
-3506384032,3506421983,US
-3506421984,3506422015,PR
-3506422016,3506644727,US
-3506644728,3506644735,CA
-3506644736,3506765823,US
-3506765824,3506806719,CA
-3506806720,3506806727,US
-3506806728,3506831359,CA
+3506232064,3506765823,US
+3506765824,3506831359,CA
3506831360,3506964479,US
3506964480,3506966527,TW
-3506966528,3506967455,US
-3506967456,3506967471,DM
-3506967472,3506967487,US
-3506967488,3506967535,DM
-3506967536,3506967567,US
-3506967568,3506967583,DM
-3506967584,3506967679,US
-3506967680,3506967791,DM
-3506967792,3506967823,US
-3506967824,3506967839,DM
-3506967840,3506967871,US
-3506967872,3506967919,DM
-3506967920,3506967935,US
-3506967936,3506967967,DM
-3506967968,3506968095,US
-3506968096,3506968191,DM
-3506968192,3506968223,US
-3506968224,3506968239,DM
-3506968240,3506968271,US
-3506968272,3506968287,DM
-3506968288,3506968319,US
-3506968320,3506968351,DM
-3506968352,3506968383,US
-3506968384,3506968399,DM
-3506968400,3506968575,US
-3506968576,3506968591,DM
-3506968592,3506968639,US
-3506968640,3506968655,DM
-3506968656,3506968783,US
-3506968784,3506968799,DM
-3506968800,3506968959,US
-3506968960,3506968975,DM
-3506968976,3506969031,US
-3506969032,3506969087,DM
-3506969088,3506969599,US
-3506969600,3506969631,DM
-3506969632,3506969663,US
-3506969664,3506969687,DM
-3506969688,3506969703,US
-3506969704,3506969711,DM
-3506969712,3506969759,US
-3506969760,3506969871,DM
-3506969872,3506969887,US
-3506969888,3506969903,DM
-3506969904,3506969919,US
-3506969920,3506970015,DM
-3506970016,3506970079,US
-3506970080,3506970095,DM
-3506970096,3506970127,US
-3506970128,3506970143,DM
-3506970144,3506970239,US
-3506970240,3506970247,DM
-3506970248,3506970263,US
-3506970264,3506970319,DM
-3506970320,3506970335,US
-3506970336,3506970367,DM
-3506970368,3506972703,US
-3506972704,3506972735,DM
-3506972736,3506972783,US
-3506972784,3506972799,DM
-3506972800,3506972927,US
-3506972928,3506973183,A2
-3506973184,3506973695,US
-3506973696,3506973727,DM
-3506973728,3506973743,US
-3506973744,3506973823,DM
-3506973824,3506973831,US
-3506973832,3506973855,DM
-3506973856,3506973873,US
-3506973874,3506973874,DM
-3506973875,3506973951,US
-3506973952,3506974111,DM
-3506974112,3506974127,US
-3506974128,3506974143,DM
-3506974144,3506974215,US
-3506974216,3506974495,DM
-3506974496,3506974511,US
-3506974512,3506974623,DM
-3506974624,3506974639,US
-3506974640,3506974655,DM
-3506974656,3506977791,US
+3506966528,3506977791,US
3506977792,3506978815,NL
3506978816,3506986751,US
3506986752,3506987007,DE
-3506987008,3507001215,US
-3507001216,3507001343,DM
-3507001344,3507003647,US
-3507003648,3507003663,DM
-3507003664,3507003671,US
-3507003672,3507003687,DM
-3507003688,3507003727,US
-3507003728,3507003743,DM
-3507003744,3507003775,US
-3507003776,3507003815,DM
-3507003816,3507003839,US
-3507003840,3507003855,DM
-3507003856,3507003871,US
-3507003872,3507003903,DM
-3507003904,3507013631,US
+3506987008,3507013631,US
3507013632,3507015679,DE
3507015680,3507019775,US
3507019776,3507021823,GB
-3507021824,3507022079,US
-3507022080,3507022335,A2
-3507022336,3507023871,US
+3507021824,3507023871,US
3507023872,3507024383,GB
3507024384,3507024639,AU
3507024640,3507025919,GB
3507025920,3507038207,US
3507038208,3507040255,TW
-3507040256,3507071231,US
-3507071232,3507071295,DM
-3507071296,3507071311,US
-3507071312,3507071343,DM
-3507071344,3507071375,US
-3507071376,3507071407,DM
-3507071408,3507071423,US
-3507071424,3507071455,DM
-3507071456,3507071471,US
-3507071472,3507071487,DM
-3507071488,3507071535,US
-3507071536,3507071551,DM
-3507071552,3507071567,US
-3507071568,3507071599,DM
-3507071600,3507071615,US
-3507071616,3507071679,DM
-3507071680,3507071711,US
-3507071712,3507071839,DM
-3507071840,3507071855,US
-3507071856,3507071903,DM
-3507071904,3507071935,US
-3507071936,3507071999,DM
-3507072000,3507101919,US
-3507101920,3507101935,IL
-3507101936,3507290111,US
+3507040256,3507290111,US
3507290112,3507355647,AR
3507355648,3507470335,US
-3507470336,3507477124,CA
-3507477125,3507477125,US
-3507477126,3507477129,CA
-3507477130,3507477130,US
-3507477131,3507477131,CA
-3507477132,3507477132,US
-3507477133,3507477144,CA
-3507477145,3507477145,US
-3507477146,3507477165,CA
-3507477166,3507477166,US
-3507477167,3507478046,CA
-3507478047,3507478057,US
-3507478058,3507478130,CA
-3507478131,3507478135,US
-3507478136,3507479188,CA
-3507479189,3507479190,US
-3507479191,3507482196,CA
-3507482197,3507482197,US
-3507482198,3507482198,CA
-3507482199,3507482211,US
-3507482212,3507482212,CA
-3507482213,3507482229,US
-3507482230,3507482235,CA
-3507482236,3507482267,US
-3507482268,3507486719,CA
-3507486720,3507540015,US
-3507540016,3507540031,IN
-3507540032,3507585023,US
+3507470336,3507486719,CA
+3507486720,3507585023,US
3507585024,3507598911,CA
3507598912,3507598943,US
3507598944,3507601407,CA
-3507601408,3507634335,US
-3507634336,3507634351,IQ
-3507634352,3507634383,US
-3507634384,3507634399,ES
-3507634400,3507634623,US
-3507634624,3507634655,CA
-3507634656,3507635391,US
-3507635392,3507635407,AU
-3507635408,3507636959,US
-3507636960,3507636975,CA
-3507636976,3507637551,US
-3507637552,3507637567,IL
-3507637568,3507639189,US
-3507639190,3507639199,IT
-3507639200,3507639385,US
-3507639386,3507639395,BE
-3507639396,3507639671,US
-3507639672,3507639681,SY
-3507639682,3507639711,US
-3507639712,3507639721,BE
-3507639722,3507639741,US
-3507639742,3507639751,NZ
-3507639752,3507642527,US
-3507642528,3507642559,IL
-3507642560,3507642591,CA
-3507642592,3507643007,US
-3507643008,3507643039,GB
-3507643040,3507643175,US
-3507643176,3507643185,FR
-3507643186,3507643265,US
-3507643266,3507643275,IQ
-3507643276,3507643285,US
-3507643286,3507643295,ES
-3507643296,3507643315,US
-3507643316,3507643325,JP
-3507643326,3507643461,US
-3507643462,3507643471,AU
-3507643472,3507643601,US
-3507643602,3507643611,IT
-3507643612,3507644031,US
-3507644032,3507644063,IL
-3507644064,3507644127,US
-3507644128,3507644159,FR
-3507644160,3507644511,US
-3507644512,3507644543,NO
-3507644544,3507644591,US
-3507644592,3507644607,GB
-3507644608,3507645017,US
-3507645018,3507645027,AU
-3507645028,3507645037,UA
-3507645038,3507645117,US
-3507645118,3507645127,NZ
-3507645128,3507645193,US
-3507645194,3507645203,NZ
-3507645204,3507645223,US
-3507645224,3507645233,AU
-3507645234,3507645333,US
-3507645334,3507645343,IR
-3507645344,3507645353,UA
-3507645354,3507645423,US
-3507645424,3507645433,GB
-3507645434,3507645479,US
-3507645480,3507645489,GR
-3507645490,3507646127,US
-3507646128,3507646143,ES
-3507646144,3507647807,US
-3507647808,3507647871,AU
-3507647872,3507649263,US
-3507649264,3507649279,QA
-3507649280,3507650335,US
-3507650336,3507650367,PA
-3507650368,3507650431,US
-3507650432,3507650495,AU
-3507650496,3507748863,US
+3507601408,3507748863,US
3507748864,3507749375,CA
3507749376,3507749631,US
3507749632,3507765247,CA
3507765248,3507809279,US
3507809280,3507809535,BG
-3507809536,3508110015,US
-3508110016,3508110047,CA
-3508110048,3508110207,US
-3508110208,3508110239,ES
-3508110240,3508111359,US
+3507809536,3508111359,US
3508111360,3508111615,CA
3508111616,3508114431,US
3508114432,3508114687,ID
-3508114688,3508115807,US
-3508115808,3508115839,RU
-3508115840,3508117439,US
-3508117440,3508117503,CA
-3508117504,3508118527,US
-3508118528,3508118559,AU
-3508118560,3508118911,US
-3508118912,3508118943,CA
-3508118944,3508123935,US
-3508123936,3508123951,CA
-3508123952,3508126239,US
-3508126240,3508126255,GB
-3508126256,3508130815,US
-3508130816,3508130831,RU
-3508130832,3508131135,US
-3508131136,3508131199,CA
-3508131200,3508133119,US
-3508133120,3508133247,GB
-3508133248,3508137631,US
-3508137632,3508137647,SK
-3508137648,3508137695,US
-3508137696,3508137711,ID
-3508137712,3508219903,US
-3508219904,3508220927,CA
+3508114688,3508219903,US
3508220928,3508221951,KY
3508221952,3508222975,US
3508222976,3508223999,KY
@@ -155896,17 +83538,7 @@
3508243968,3508244223,BM
3508244224,3508273407,US
3508273408,3508273663,MX
-3508273664,3508274719,US
-3508274720,3508274751,AR
-3508274752,3508275199,US
-3508275200,3508275327,IT
-3508275328,3508275455,US
-3508275456,3508275487,ZA
-3508275488,3508277343,US
-3508277344,3508277375,CA
-3508277376,3508277487,US
-3508277488,3508277503,PR
-3508277504,3508278527,US
+3508273664,3508278527,US
3508278528,3508278783,AU
3508278784,3508279039,US
3508279040,3508279295,VE
@@ -155919,182 +83551,53 @@
3508281088,3508281343,KR
3508281344,3508281599,PH
3508281600,3508281855,NZ
-3508281856,3508282047,US
-3508282048,3508282111,SG
+3508281856,3508282111,US
3508282112,3508282367,HK
-3508282368,3508282591,US
-3508282592,3508282623,IT
+3508282368,3508282623,US
3508282624,3508282879,AU
-3508282880,3508282887,KP
-3508282888,3508283135,US
+3508282880,3508283135,US
3508283136,3508283391,HK
3508283392,3508283647,US
3508283648,3508283903,AU
3508283904,3508284159,MY
3508284160,3508284415,SG
3508284416,3508284671,AU
-3508284672,3508284735,JP
-3508284736,3508284927,US
-3508284928,3508284991,ES
-3508284992,3508285087,US
-3508285088,3508285095,ES
-3508285096,3508285119,US
-3508285120,3508285151,ES
-3508285152,3508285823,US
-3508285824,3508285855,ES
-3508285856,3508285887,US
-3508285888,3508285951,GB
-3508285952,3508286015,NL
-3508286016,3508286079,US
-3508286080,3508286111,NL
-3508286112,3508286207,US
+3508284672,3508286207,US
3508286208,3508286463,SE
3508286464,3508286719,HK
-3508286720,3508286847,US
-3508286848,3508286863,TW
-3508286864,3508286911,US
-3508286912,3508286927,PH
-3508286928,3508286943,US
-3508286944,3508286975,ID
-3508286976,3508287039,TH
-3508287040,3508287055,US
-3508287056,3508287063,TH
-3508287064,3508287103,US
-3508287104,3508287167,HK
-3508287168,3508287231,US
-3508287232,3508287263,HK
-3508287264,3508287295,US
-3508287296,3508287359,HK
-3508287360,3508287999,US
-3508288000,3508288127,MY
-3508288128,3508288255,SG
+3508286720,3508288255,US
3508288256,3508288511,JP
3508288512,3508289023,US
3508289024,3508289279,AU
-3508289280,3508289343,BR
-3508289344,3508289407,US
-3508289408,3508289471,BR
-3508289472,3508289535,US
+3508289280,3508289535,US
3508289536,3508289791,CA
-3508289792,3508290847,US
-3508290848,3508290879,MX
-3508290880,3508290895,US
-3508290896,3508290911,BR
-3508290912,3508290927,US
-3508290928,3508290943,BR
-3508290944,3508291263,US
-3508291264,3508291327,IT
+3508289792,3508291327,US
3508291328,3508292095,GB
3508292096,3508292351,CH
-3508292352,3508292415,US
-3508292416,3508292447,CL
-3508292448,3508292863,US
+3508292352,3508292863,US
3508292864,3508294143,DE
-3508294144,3508295439,US
-3508295440,3508295487,BR
-3508295488,3508295519,GB
-3508295520,3508295551,US
-3508295552,3508295615,BR
-3508295616,3508295631,ES
-3508295632,3508295679,US
+3508294144,3508295679,US
3508295680,3508295935,GB
-3508295936,3508295999,US
-3508296000,3508296015,BR
-3508296016,3508296095,US
-3508296096,3508296127,BR
-3508296128,3508296191,US
-3508296192,3508296319,GB
-3508296320,3508296447,US
-3508296448,3508296479,GB
-3508296480,3508296495,BE
-3508296496,3508296543,US
-3508296544,3508296559,SE
-3508296560,3508296671,US
-3508296672,3508296703,GB
-3508296704,3508296767,FR
-3508296768,3508296831,US
-3508296832,3508296959,NO
+3508295936,3508296959,US
3508296960,3508297215,CH
-3508297216,3508297407,GB
-3508297408,3508297471,SG
+3508297216,3508297471,US
3508297472,3508297727,IT
-3508297728,3508297791,CH
-3508297792,3508298047,US
-3508298048,3508298079,BE
-3508298080,3508298111,US
-3508298112,3508298159,BE
-3508298160,3508298207,US
-3508298208,3508298223,BE
-3508298224,3508298239,US
+3508297728,3508298239,US
3508298240,3508298495,DE
-3508298496,3508298559,DK
-3508298560,3508298623,US
-3508298624,3508298655,DK
-3508298656,3508298687,US
-3508298688,3508298751,DK
+3508298496,3508298751,US
3508298752,3508299007,ES
3508299008,3508299263,BE
3508299264,3508299519,GB
-3508299520,3508299647,US
-3508299648,3508299679,CH
-3508299680,3508299775,US
+3508299520,3508299775,US
3508299776,3508300031,SE
3508300032,3508300287,DE
3508300288,3508300543,US
3508300544,3508300799,FR
-3508300800,3508300863,US
-3508300864,3508300879,GB
-3508300880,3508300895,US
-3508300896,3508300911,GB
-3508300912,3508301631,US
-3508301632,3508301663,BR
-3508301664,3508301823,US
-3508301824,3508301951,GB
-3508301952,3508301983,DK
-3508301984,3508301999,IT
-3508302000,3508302079,US
-3508302080,3508302111,DE
-3508302112,3508302207,US
-3508302208,3508302223,DE
-3508302224,3508302239,US
-3508302240,3508302255,GB
-3508302256,3508302335,US
-3508302336,3508302463,SG
-3508302464,3508302527,BE
-3508302528,3508302623,US
-3508302624,3508302687,BE
-3508302688,3508303359,US
-3508303360,3508303391,BE
-3508303392,3508303423,US
-3508303424,3508303439,BE
-3508303440,3508303455,US
-3508303456,3508303471,BE
-3508303472,3508303487,US
-3508303488,3508303551,ES
-3508303552,3508303615,US
+3508300800,3508303615,US
3508303616,3508303871,DE
-3508303872,3508303903,US
-3508303904,3508303935,CL
-3508303936,3508303951,US
-3508303952,3508303967,CO
-3508303968,3508303983,US
-3508303984,3508303999,BR
-3508304000,3508304383,US
+3508303872,3508304383,US
3508304384,3508304639,DE
-3508304640,3508304703,IR
-3508304704,3508304927,US
-3508304928,3508304943,DE
-3508304944,3508305151,US
-3508305152,3508305215,NL
-3508305216,3508305247,US
-3508305248,3508305263,NL
-3508305264,3508305791,US
-3508305792,3508305823,CO
-3508305824,3508305855,US
-3508305856,3508305871,BE
-3508305872,3508306431,US
-3508306432,3508306687,EC
-3508306688,3508306943,US
+3508304640,3508306943,US
3508306944,3508307199,CH
3508307200,3508308991,US
3508308992,3508309247,BE
@@ -156103,25 +83606,17 @@
3508310784,3508311039,BE
3508311040,3508311295,NL
3508311296,3508311807,IE
-3508311808,3508311967,US
-3508311968,3508311983,DE
-3508311984,3508312063,US
+3508311808,3508312063,US
3508312064,3508312319,NL
3508312320,3508312575,CH
-3508312576,3508312591,ES
-3508312592,3508312831,US
+3508312576,3508312831,US
3508312832,3508313343,DE
3508313344,3508313599,SE
3508313600,3508313855,DK
3508313856,3508314367,GB
3508314368,3508314623,US
3508314624,3508314879,DK
-3508314880,3508314911,US
-3508314912,3508314927,FR
-3508314928,3508314943,US
-3508314944,3508314959,CH
-3508314960,3508314975,PT
-3508314976,3508315135,US
+3508314880,3508315135,US
3508315136,3508315391,NO
3508315392,3508315647,US
3508315648,3508315903,FR
@@ -156130,12 +83625,7 @@
3508316416,3508316671,GB
3508316672,3508316927,US
3508316928,3508317183,SE
-3508317184,3508317199,US
-3508317200,3508317207,RU
-3508317208,3508317231,US
-3508317232,3508317247,AT
-3508317248,3508317375,US
-3508317376,3508317439,FR
+3508317184,3508317439,US
3508317440,3508317695,DE
3508317696,3508317951,US
3508317952,3508318463,FI
@@ -156145,27 +83635,13 @@
3508319488,3508319743,RU
3508319744,3508319999,CH
3508320000,3508320255,SE
-3508320256,3508320383,PT
-3508320384,3508320511,US
-3508320512,3508320527,DE
-3508320528,3508320543,PT
-3508320544,3508320767,US
+3508320256,3508320767,US
3508320768,3508321791,BE
-3508321792,3508321823,NL
-3508321824,3508321855,ZA
-3508321856,3508321871,FR
-3508321872,3508321887,SE
-3508321888,3508322111,US
-3508322112,3508322143,PL
-3508322144,3508322175,US
-3508322176,3508322191,CH
-3508322192,3508322239,US
-3508322240,3508322303,CH
+3508321792,3508322303,US
3508322304,3508322559,GB
3508322560,3508322815,FI
3508322816,3508323071,NO
-3508323072,3508323135,DE
-3508323136,3508323327,US
+3508323072,3508323327,US
3508323328,3508323583,NO
3508323584,3508323839,DE
3508323840,3508324095,FI
@@ -156174,10 +83650,7 @@
3508324608,3508324863,NO
3508324864,3508325119,GB
3508325120,3508325375,DE
-3508325376,3508325471,GR
-3508325472,3508325503,US
-3508325504,3508325567,GB
-3508325568,3508325631,US
+3508325376,3508325631,US
3508325632,3508325887,ZA
3508325888,3508326399,SE
3508326400,3508326655,GB
@@ -156189,32 +83662,18 @@
3508328448,3508328703,BE
3508328704,3508329471,IL
3508329472,3508329727,NL
-3508329728,3508329983,FR
+3508329728,3508329983,US
3508329984,3508330495,SE
3508330496,3508331263,GB
3508331264,3508331519,BE
-3508331520,3508331583,FR
-3508331584,3508331711,US
-3508331712,3508331743,FR
-3508331744,3508331775,US
-3508331776,3508331807,IT
-3508331808,3508331839,US
-3508331840,3508331871,AT
-3508331872,3508332031,US
+3508331520,3508332031,US
3508332032,3508332287,GB
3508332288,3508332543,GR
3508332544,3508332799,IE
3508332800,3508333055,NO
-3508333056,3508333183,GB
-3508333184,3508333311,US
+3508333056,3508333311,US
3508333312,3508333823,CH
-3508333824,3508333951,GB
-3508333952,3508334079,US
-3508334080,3508334207,GB
-3508334208,3508334335,US
-3508334336,3508334463,DE
-3508334464,3508334527,GB
-3508334528,3508334591,US
+3508333824,3508334591,US
3508334592,3508334847,AU
3508334848,3508335103,SG
3508335104,3508335359,MY
@@ -156227,435 +83686,197 @@
3508337152,3508337663,PH
3508337664,3508337919,KR
3508337920,3508338175,JP
-3508338176,3508338303,HK
-3508338304,3508338335,ID
-3508338336,3508338367,US
-3508338368,3508338399,SG
-3508338400,3508338431,US
+3508338176,3508338431,US
3508338432,3508338687,KR
3508338688,3508404223,CA
3508404224,3508690943,US
3508690944,3508695039,CA
-3508695040,3508729935,US
-3508729936,3508729951,GB
-3508729952,3508761120,US
-3508761121,3508761136,BE
-3508761137,3508761184,US
-3508761185,3508761200,BE
-3508761201,3508780079,US
-3508780080,3508780111,NL
-3508780112,3508780623,US
-3508780624,3508780639,IT
-3508780640,3509144575,US
+3508695040,3509144575,US
3509144576,3509144831,BR
-3509144832,3509145487,US
-3509145488,3509145495,BR
-3509145496,3509151375,US
-3509151376,3509151391,CA
-3509151392,3509151407,US
-3509151408,3509151423,CA
-3509151424,3509151439,US
-3509151440,3509151455,CA
-3509151456,3509151663,US
-3509151664,3509151679,PA
-3509151680,3509151695,US
-3509151696,3509151727,MX
-3509151728,3509157887,US
+3509144832,3509157887,US
3509157888,3509166079,CA
3509166080,3509215231,US
3509215232,3509223423,CA
3509223424,3509305599,US
3509305600,3509305615,GB
-3509305616,3509326079,US
-3509326080,3509326087,CA
-3509326088,3509346303,US
+3509305616,3509346303,US
3509346304,3509350711,CA
3509350712,3509350719,US
3509350720,3509354495,CA
3509354496,3509387263,US
3509387264,3509420031,PE
-3509420032,3509518591,US
-3509518592,3509518815,CA
-3509518816,3509518831,US
-3509518832,3509519359,CA
-3509519360,3509519423,US
-3509519424,3509519647,CA
-3509519648,3509519679,US
-3509519680,3509519711,CA
-3509519712,3509519727,US
-3509519728,3509520511,CA
-3509520512,3509520639,US
-3509520640,3509520831,CA
-3509520832,3509520895,US
+3509420032,3509518847,US
+3509518848,3509519103,CA
+3509519104,3509519871,US
+3509519872,3509520127,CA
+3509520128,3509520895,US
3509520896,3509521151,CA
3509521152,3509521407,US
-3509521408,3509521791,CA
-3509521792,3509521919,US
-3509521920,3509522431,CA
+3509521408,3509521663,CA
+3509521664,3509522175,US
+3509522176,3509522431,CA
3509522432,3509522687,KW
-3509522688,3509523071,CA
-3509523072,3509523199,US
-3509523200,3509523327,CA
-3509523328,3509523391,US
-3509523392,3509523455,CA
-3509523456,3509523471,US
-3509523472,3509523775,CA
-3509523776,3509523839,US
-3509523840,3509523903,CA
-3509523904,3509524223,US
+3509522688,3509522943,CA
+3509522944,3509523679,US
+3509523680,3509523695,CA
+3509523696,3509524223,US
3509524224,3509524735,CA
3509524736,3509524991,US
-3509524992,3509525823,CA
-3509525824,3509525887,US
-3509525888,3509526815,CA
-3509526816,3509526879,US
-3509526880,3509527071,CA
-3509527072,3509527119,US
-3509527120,3509527199,CA
-3509527200,3509527215,US
-3509527216,3509527551,CA
-3509527552,3509527807,US
-3509527808,3509528319,CA
-3509528320,3509528831,US
-3509528832,3509529343,CA
-3509529344,3509529599,US
-3509529600,3509529727,CA
-3509529728,3509529823,US
-3509529824,3509529887,CA
-3509529888,3509529951,US
-3509529952,3509530239,CA
-3509530240,3509530367,US
-3509530368,3509530559,CA
-3509530560,3509530623,US
+3509524992,3509525759,CA
+3509525760,3509526015,US
+3509526016,3509526271,CA
+3509526272,3509526527,US
+3509526528,3509526783,CA
+3509526784,3509527807,US
+3509527808,3509528063,CA
+3509528064,3509529087,US
+3509529088,3509529215,CA
+3509529216,3509530623,US
3509530624,3509532671,CA
3509532672,3509532927,US
-3509532928,3509533471,CA
-3509533472,3509533535,US
-3509533536,3509533567,CA
-3509533568,3509533599,US
-3509533600,3509533823,CA
-3509533824,3509534335,US
-3509534336,3509534367,CA
-3509534368,3509534719,US
-3509534720,3509535535,CA
-3509535536,3509535551,US
-3509535552,3509535663,CA
-3509535664,3509535679,US
-3509535680,3509536895,CA
-3509536896,3509537023,US
-3509537024,3509538335,CA
-3509538336,3509538351,US
-3509538352,3509538399,CA
-3509538400,3509538415,US
-3509538416,3509538447,CA
-3509538448,3509538463,NO
-3509538464,3509538815,CA
+3509532928,3509533439,CA
+3509533440,3509534719,US
+3509534720,3509535999,CA
+3509536000,3509536255,US
+3509536256,3509536767,CA
+3509536768,3509537279,US
+3509537280,3509538303,CA
+3509538304,3509538559,US
+3509538560,3509538815,CA
3509538816,3509539071,US
3509539072,3509539327,CA
3509539328,3509539583,US
-3509539584,3509539679,CA
-3509539680,3509539695,US
-3509539696,3509539727,CA
-3509539728,3509539743,US
-3509539744,3509539823,CA
-3509539824,3509539839,US
-3509539840,3509539903,CA
-3509539904,3509539967,US
-3509539968,3509540095,CA
-3509540096,3509540127,US
-3509540128,3509540351,CA
-3509540352,3509540607,US
-3509540608,3509541663,CA
-3509541664,3509541695,US
-3509541696,3509541951,CA
-3509541952,3509541999,US
-3509542000,3509542063,CA
-3509542064,3509542079,US
-3509542080,3509542399,CA
-3509542400,3509542655,US
-3509542656,3509544447,CA
+3509539584,3509540095,CA
+3509540096,3509540607,US
+3509540608,3509541503,CA
+3509541504,3509541631,US
+3509541632,3509541887,CA
+3509541888,3509542911,US
+3509542912,3509543167,CA
+3509543168,3509543423,US
+3509543424,3509543935,CA
+3509543936,3509544191,US
+3509544192,3509544447,CA
3509544448,3509544703,US
-3509544704,3509545151,CA
-3509545152,3509545471,US
-3509545472,3509545999,CA
-3509546000,3509546015,US
-3509546016,3509546031,CA
-3509546032,3509546063,US
-3509546064,3509546159,CA
-3509546160,3509546175,US
-3509546176,3509546207,CA
-3509546208,3509546223,US
-3509546224,3509549823,CA
-3509549824,3509550079,US
-3509550080,3509553151,CA
-3509553152,3509553407,US
-3509553408,3509553855,CA
-3509553856,3509553919,US
-3509553920,3509555119,CA
-3509555120,3509555135,US
-3509555136,3509557439,CA
-3509557440,3509557759,US
-3509557760,3509558367,CA
-3509558368,3509558399,US
-3509558400,3509558463,CA
-3509558464,3509558495,US
-3509558496,3509558527,CA
-3509558528,3509558559,US
-3509558560,3509558783,CA
-3509558784,3509559039,US
+3509544704,3509544959,CA
+3509544960,3509546095,US
+3509546096,3509546111,CA
+3509546112,3509546495,US
+3509546496,3509547007,CA
+3509547008,3509551359,US
+3509551360,3509551871,CA
+3509551872,3509552127,US
+3509552128,3509552639,CA
+3509552640,3509553919,US
+3509553920,3509554959,CA
+3509554960,3509555199,US
+3509555200,3509556735,CA
+3509556736,3509557759,US
+3509557760,3509558015,CA
+3509558016,3509559039,US
3509559040,3509559295,KW
-3509559296,3509560319,CA
-3509560320,3509560703,US
-3509560704,3509561215,CA
-3509561216,3509561279,US
-3509561280,3509562623,CA
-3509562624,3509562751,US
-3509562752,3509562879,CA
-3509562880,3509563167,US
-3509563168,3509565087,CA
-3509565088,3509565119,US
-3509565120,3509566799,CA
-3509566800,3509566815,US
-3509566816,3509566847,CA
-3509566848,3509566863,US
-3509566864,3509566927,CA
-3509566928,3509566943,US
-3509566944,3509567151,CA
-3509567152,3509567167,US
-3509567168,3509567199,CA
-3509567200,3509567231,US
+3509559296,3509559807,CA
+3509559808,3509560063,US
+3509560064,3509560319,CA
+3509560320,3509560831,US
+3509560832,3509561087,CA
+3509561088,3509561343,US
+3509561344,3509562623,CA
+3509562624,3509563391,US
+3509563392,3509564159,CA
+3509564160,3509564415,US
+3509564416,3509564927,CA
+3509564928,3509565183,US
+3509565184,3509566463,CA
+3509566464,3509567231,US
3509567232,3509569023,CA
3509569024,3509569535,US
-3509569536,3509569919,CA
-3509569920,3509570047,US
-3509570048,3509570431,CA
-3509570432,3509570687,US
-3509570688,3509571583,CA
-3509571584,3509571647,US
-3509571648,3509571663,CA
-3509571664,3509571839,US
+3509569536,3509569791,CA
+3509569792,3509570815,US
+3509570816,3509571583,CA
+3509571584,3509571839,US
3509571840,3509572095,CA
-3509572096,3509572223,US
-3509572224,3509573487,CA
-3509573488,3509573503,US
-3509573504,3509573887,CA
-3509573888,3509573919,US
-3509573920,3509575695,CA
-3509575696,3509575999,US
-3509576000,3509576063,CA
-3509576064,3509576191,US
-3509576192,3509576255,CA
-3509576256,3509576271,US
-3509576272,3509576703,CA
+3509572096,3509572351,US
+3509572352,3509573375,CA
+3509573376,3509573439,US
+3509573440,3509573455,CA
+3509573456,3509573631,US
+3509573632,3509573887,CA
+3509573888,3509574143,US
+3509574144,3509575679,CA
+3509575680,3509575935,US
+3509575936,3509576191,CA
+3509576192,3509576447,US
+3509576448,3509576703,CA
3509576704,3509576959,US
-3509576960,3509577407,CA
-3509577408,3509577471,US
-3509577472,3509577535,CA
-3509577536,3509577551,US
-3509577552,3509577727,CA
-3509577728,3509577983,US
-3509577984,3509578367,CA
-3509578368,3509578495,US
-3509578496,3509579263,CA
-3509579264,3509579327,US
-3509579328,3509579455,CA
-3509579456,3509579519,US
+3509576960,3509577215,CA
+3509577216,3509577983,US
+3509577984,3509578239,CA
+3509578240,3509578495,US
+3509578496,3509578751,CA
+3509578752,3509579007,US
+3509579008,3509579263,CA
+3509579264,3509579519,US
3509579520,3509579775,CA
3509579776,3509580031,US
3509580032,3509580287,CA
-3509580288,3509580671,US
-3509580672,3509581087,CA
-3509581088,3509581119,US
-3509581120,3509581199,CA
-3509581200,3509581215,US
-3509581216,3509581231,CA
-3509581232,3509581247,US
-3509581248,3509581263,CA
-3509581264,3509581279,US
-3509581280,3509581375,CA
-3509581376,3509581407,US
-3509581408,3509581503,CA
-3509581504,3509581567,US
-3509581568,3509581823,CA
-3509581824,3509582335,US
+3509580288,3509580799,US
+3509580800,3509581055,CA
+3509581056,3509582335,US
3509582336,3509582847,CA
3509582848,3509583615,US
3509583616,3509583871,CA
3509583872,3509731327,US
3509731328,3509739519,CA
-3509739520,3509773991,US
-3509773992,3509774003,GR
-3509774004,3509774013,US
-3509774014,3509774033,GB
-3509774034,3509774120,US
-3509774121,3509774135,GB
-3509774136,3509774138,US
-3509774139,3509774163,GB
-3509774164,3509774263,US
-3509774264,3509774295,HR
-3509774296,3509774575,US
-3509774576,3509774591,GR
-3509774592,3509775104,US
-3509775105,3509775120,CA
-3509775121,3509775296,US
-3509775297,3509775312,GB
-3509775313,3509775444,US
-3509775445,3509775454,TH
-3509775455,3509775477,US
-3509775478,3509775492,CA
-3509775493,3509775504,US
-3509775505,3509775520,NL
-3509775521,3509775536,US
-3509775537,3509775552,DK
-3509775553,3509775584,US
-3509775585,3509775614,DE
-3509775615,3509775616,US
-3509775617,3509775648,DE
-3509775649,3509775664,CA
-3509775665,3509775792,US
-3509775793,3509775870,CA
-3509775871,3509775903,US
-3509775904,3509775919,AU
-3509775920,3509775943,US
-3509775944,3509775951,IT
-3509775952,3509776023,US
-3509776024,3509776031,CA
-3509776032,3509776047,US
-3509776048,3509776055,SA
-3509776056,3509776095,US
-3509776096,3509776103,AU
-3509776104,3509776111,US
-3509776112,3509776119,IT
-3509776120,3509777167,US
-3509777168,3509777175,RU
-3509777176,3509777215,US
-3509777216,3509777223,TH
-3509777224,3509777449,US
-3509777450,3509777545,ID
-3509777546,3509777584,US
-3509777585,3509777648,ID
-3509777649,3509778239,US
-3509778240,3509778271,IN
-3509778272,3509778919,US
-3509778920,3509778927,GB
-3509778928,3509779007,US
-3509779008,3509779039,IN
-3509779040,3509822335,US
-3509822336,3509822351,DE
-3509822352,3509830287,US
-3509830288,3509830295,BE
-3509830296,3509830407,US
-3509830408,3509830415,GB
-3509830416,3509830943,US
-3509830944,3509830951,BE
-3509830952,3509831135,US
-3509831136,3509831143,IN
-3509831144,3509831535,US
-3509831536,3509831551,LB
-3509831552,3509831615,US
-3509831616,3509831647,IL
-3509831648,3509831735,US
-3509831736,3509831743,AT
-3509831744,3509831807,US
-3509831808,3509831815,IN
-3509831816,3509831823,CA
-3509831824,3509833103,US
-3509833104,3509833111,IN
-3509833112,3509833535,US
-3509833536,3509833543,CA
-3509833544,3509833551,IN
-3509833552,3509833703,US
-3509833704,3509833711,ZA
-3509833712,3509834111,US
-3509834112,3509834143,IL
-3509834144,3509834495,US
-3509834496,3509834503,NO
-3509834504,3509834519,US
-3509834520,3509834527,BD
-3509834528,3509834591,US
-3509834592,3509834599,IN
-3509834600,3509834831,US
-3509834832,3509834847,CO
-3509834848,3509835103,US
-3509835104,3509835111,GB
-3509835112,3509837167,US
-3509837168,3509837175,GB
-3509837176,3509837623,US
-3509837624,3509837639,GB
-3509837640,3509837751,US
-3509837752,3509837759,GB
-3509837760,3509846015,US
+3509739520,3509846015,US
3509846016,3509977087,CA
3509977088,3509993471,US
3509993472,3509997567,CA
3509997568,3510005759,US
-3510005760,3510009855,CA
-3510009856,3510010311,US
-3510010312,3510010319,CA
-3510010320,3510239231,US
-3510239232,3510240607,CA
-3510240608,3510240639,US
-3510240640,3510240703,CA
-3510240704,3510240735,AM
-3510240736,3510240743,US
-3510240744,3510240767,CA
-3510240768,3510241023,US
-3510241024,3510241063,CA
-3510241064,3510241071,US
-3510241072,3510242303,CA
+3510005760,3510009343,CA
+3510009344,3510240743,US
+3510240744,3510240751,CA
+3510240752,3510242303,US
3510242304,3510242559,OM
-3510242560,3510245375,CA
+3510242560,3510245375,US
3510245376,3510245631,BD
-3510245632,3510246728,CA
-3510246729,3510246729,US
-3510246730,3510246735,CA
-3510246736,3510246775,US
-3510246776,3510249471,CA
+3510245632,3510249471,US
3510249472,3510249983,QA
-3510249984,3510251519,CA
+3510249984,3510251519,US
3510251520,3510252799,DO
-3510252800,3510253311,CA
+3510252800,3510253311,US
3510253312,3510253567,NC
-3510253568,3510253631,US
-3510253632,3510253759,CA
-3510253760,3510253775,US
-3510253776,3510255423,CA
-3510255424,3510255447,US
-3510255448,3510261503,CA
+3510253568,3510254079,US
+3510254080,3510254591,CA
+3510254592,3510257663,US
+3510257664,3510258175,CA
+3510258176,3510261503,US
3510261504,3510261759,ZM
-3510261760,3510262783,CA
-3510262784,3510263039,US
-3510263040,3510264063,CA
+3510261760,3510263295,US
+3510263296,3510263551,CA
+3510263552,3510264063,US
3510264064,3510264319,UG
-3510264320,3510268671,CA
+3510264320,3510265087,US
+3510265088,3510265343,CA
+3510265344,3510268415,US
+3510268416,3510268671,CA
3510268672,3510268927,SY
-3510268928,3510269823,CA
-3510269824,3510269951,CO
+3510268928,3510269951,US
3510269952,3510270719,LY
3510270720,3510270975,SY
-3510270976,3510271999,CA
-3510272000,3510284423,US
-3510284424,3510284431,CA
-3510284432,3510312959,US
-3510312960,3510321151,US
+3510270976,3510321151,US
3510321152,3510321663,VG
3510321664,3510321919,AG
3510321920,3510322175,KN
3510322176,3510323199,AG
3510323200,3510324223,KN
3510324224,3510325247,AI
-3510325248,3510325503,AG
-3510325504,3510325759,KN
-3510325760,3510326271,AG
+3510325248,3510326271,AG
3510326272,3510327295,VG
3510327296,3510328319,AG
3510328320,3510328575,KN
3510328576,3510328831,MS
-3510328832,3510329279,AG
-3510329280,3510329295,MS
-3510329296,3510329303,AG
-3510329304,3510329311,MS
-3510329312,3510329599,AG
+3510328832,3510329599,AG
3510329600,3510329855,MS
3510329856,3510331391,AG
3510331392,3510332415,DM
@@ -156675,147 +83896,32 @@
3510479792,3510479799,IE
3510479800,3510788447,US
3510788448,3510788479,GB
-3510788480,3510831527,US
-3510831528,3510831535,GB
-3510831536,3510833423,US
-3510833424,3510833439,CA
-3510833440,3510836671,US
-3510836672,3510836687,CA
-3510836688,3510839135,US
-3510839136,3510839151,GB
-3510839152,3510839215,US
-3510839216,3510839231,GB
-3510839232,3510839311,US
-3510839312,3510839327,IN
-3510839328,3510843087,US
-3510843088,3510843095,CA
-3510843096,3510843103,GB
-3510843104,3510844415,US
+3510788480,3510844415,US
3510844416,3510844927,CA
-3510844928,3510846527,US
-3510846528,3510846559,CA
-3510846560,3510897442,US
-3510897443,3510897443,IE
-3510897444,3510935551,US
+3510844928,3510935551,US
3510935552,3510943743,CA
3510943744,3511140351,US
3511140352,3511156735,CA
-3511156736,3511331199,US
-3511331200,3511331231,CA
-3511331232,3511335231,US
-3511335232,3511335263,RU
-3511335264,3511335295,US
-3511335296,3511335423,RU
-3511335424,3511419951,US
-3511419952,3511419959,UA
-3511419960,3511812095,US
+3511156736,3511314431,US
+3511316480,3511812095,US
3511812096,3511844863,CA
-3511844864,3512011311,US
-3512011312,3512011327,UM
-3512011328,3512011359,US
-3512011360,3512011375,TR
-3512011376,3512011807,US
-3512011808,3512011823,TW
-3512011824,3512011855,US
-3512011856,3512011871,SE
-3512011872,3512012095,US
+3511844864,3512012095,US
3512012096,3512012159,GB
-3512012160,3512012175,MX
-3512012176,3512012255,US
-3512012256,3512012287,GB
-3512012288,3512013583,US
-3512013584,3512013599,CA
-3512013600,3512013647,US
-3512013648,3512013663,CA
-3512013664,3512013679,US
-3512013680,3512013695,GR
-3512013696,3512016543,US
-3512016544,3512016559,IT
-3512016560,3512016575,US
-3512016576,3512016591,TW
-3512016592,3512016607,US
-3512016608,3512016623,CA
-3512016624,3512016767,GB
-3512016768,3512016831,US
-3512016832,3512016895,JO
-3512016896,3512017183,US
-3512017184,3512017199,AR
-3512017200,3512017231,US
-3512017232,3512017247,ES
-3512017248,3512017263,MX
-3512017264,3512017279,GB
-3512017280,3512017359,US
-3512017360,3512017375,RU
-3512017376,3512017407,GB
+3512012160,3512017407,US
3512017408,3512017663,BR
-3512017664,3512017695,CA
-3512017696,3512017727,RU
-3512017728,3512017743,US
-3512017744,3512017759,IT
-3512017760,3512017791,US
-3512017792,3512017807,LT
-3512017808,3512017823,US
-3512017824,3512017855,JO
-3512017856,3512019071,US
-3512019072,3512019135,GB
+3512017664,3512019135,US
3512019136,3512019151,MX
-3512019152,3512019199,US
-3512019200,3512019263,ES
-3512019264,3512019295,US
-3512019296,3512019311,CA
-3512019312,3512019327,US
-3512019328,3512019359,CA
-3512019360,3512020095,US
-3512020096,3512020223,ES
-3512020224,3512020479,US
-3512020480,3512020511,GB
-3512020512,3512021503,US
+3512019152,3512021503,US
3512021504,3512021759,GB
-3512021760,3512022335,US
-3512022336,3512022399,ES
-3512022400,3512022431,US
-3512022432,3512022447,IN
-3512022448,3512022463,GB
-3512022464,3512023807,US
-3512023808,3512023839,CA
-3512023840,3512023855,GB
-3512023856,3512023887,US
-3512023888,3512023903,MX
-3512023904,3512023999,US
-3512024000,3512024063,BR
-3512024064,3512024319,US
+3512021760,3512024319,US
3512024320,3512024575,AU
-3512024576,3512024591,CA
-3512024592,3512025087,US
-3512025088,3512025103,CA
-3512025104,3512025183,US
-3512025184,3512025215,CA
-3512025216,3512025343,US
-3512025344,3512025359,CA
-3512025360,3512027391,US
-3512027392,3512027519,AU
-3512027520,3512028271,US
-3512028272,3512028287,GB
-3512028288,3512029119,US
-3512029120,3512029135,CA
-3512029136,3512029263,US
-3512029264,3512029279,CA
-3512029280,3512031295,US
-3512031296,3512031359,JO
-3512031360,3512031375,CA
-3512031376,3512031535,US
-3512031536,3512031551,CA
-3512031552,3512031759,US
-3512031760,3512031775,CA
-3512031776,3512037247,US
-3512037248,3512037311,AU
-3512037312,3512038863,US
-3512038864,3512038879,CA
-3512038880,3512040143,US
-3512040144,3512040159,CA
-3512040160,3512045055,US
+3512024576,3512043519,US
+3512043520,3512043775,FI
+3512043776,3512045055,US
3512045056,3512045311,IE
-3512045312,3512053247,US
+3512045312,3512052735,US
+3512052736,3512052991,FI
+3512052992,3512053247,US
3512053248,3512053503,MY
3512053504,3512066559,US
3512066560,3512066815,BE
@@ -156832,22 +83938,17 @@
3512205824,3512206079,AW
3512206080,3512206335,CL
3512206336,3512207103,HN
-3512207104,3512207231,NI
-3512207232,3512207359,US
+3512207104,3512207359,US
3512207360,3512209407,CO
-3512209408,3512210687,US
-3512210688,3512210943,NA
+3512209408,3512210943,US
3512210944,3512211199,CL
3512211200,3512211455,AR
-3512211456,3512221439,US
-3512221440,3512221471,CO
-3512221472,3512221695,US
+3512211456,3512221695,US
3512221696,3512221759,AG
3512221760,3512221791,GP
3512221792,3512221951,AG
3512221952,3512222207,VG
-3512222208,3512222239,AG
-3512222240,3512222271,VG
+3512222208,3512222271,AG
3512222272,3512222335,KN
3512222336,3512222463,AG
3512222464,3512222975,AI
@@ -156856,30 +83957,14 @@
3512225792,3512227839,PR
3512227840,3512229887,ZW
3512229888,3512230143,VE
-3512230144,3512230271,US
-3512230272,3512230287,CA
-3512230288,3512230399,US
-3512230400,3512230431,CO
-3512230432,3512230911,US
+3512230144,3512230911,US
3512230912,3512231167,CL
-3512231168,3512231199,VE
-3512231200,3512231295,US
-3512231296,3512231423,VE
+3512231168,3512231423,US
3512231424,3512231679,CL
3512231680,3512231935,VE
-3512231936,3512231967,CO
-3512231968,3512232063,US
-3512232064,3512232127,CO
-3512232128,3512232191,US
-3512232192,3512232223,CO
-3512232224,3512232319,US
-3512232320,3512232351,CO
-3512232352,3512233215,US
+3512231936,3512233215,US
3512233216,3512233471,CL
-3512233472,3512233503,VE
-3512233504,3512233599,US
-3512233600,3512233631,CO
-3512233632,3512233727,US
+3512233472,3512233727,US
3512233728,3512233983,HN
3512233984,3512236031,ZA
3512236032,3512236287,US
@@ -156897,12 +83982,8 @@
3512246784,3512247039,US
3512247040,3512247295,NG
3512247296,3512248319,US
-3512248320,3512248863,CO
-3512248864,3512248927,US
-3512248928,3512248959,CO
-3512248960,3512249023,US
-3512249024,3512249055,CO
-3512249056,3512249087,US
+3512248320,3512248831,CO
+3512248832,3512249087,CL
3512249088,3512249343,CO
3512249344,3512256511,IL
3512256512,3512258559,CL
@@ -156922,429 +84003,94 @@
3512269824,3512270847,US
3512270848,3512336383,CA
3512336384,3512369151,US
-3512369152,3512371343,CA
-3512371344,3512371351,US
-3512371352,3512378983,CA
-3512378984,3512378991,US
-3512378992,3512381583,CA
-3512381584,3512381591,US
-3512381592,3512385535,CA
+3512369152,3512385535,CA
3512385536,3512397823,US
3512397824,3512401919,CA
3512401920,3512418303,US
3512418304,3512451071,CA
-3512451072,3512467455,PR
-3512467456,3512534015,US
-3512534016,3512534079,BR
-3512534080,3512535679,US
-3512535680,3512535743,CA
-3512535744,3512535935,US
-3512535936,3512536063,DE
-3512536064,3512536191,US
-3512536192,3512536319,HK
-3512536320,3512536383,CO
-3512536384,3512536447,US
-3512536448,3512536511,ES
-3512536512,3512536575,US
-3512536576,3512536703,MX
-3512536704,3512537087,US
-3512537088,3512537151,CL
-3512537152,3512537215,DK
-3512537216,3512537599,US
+3512451072,3512459519,PR
+3512459520,3512459775,US
+3512459776,3512460031,PR
+3512460032,3512460287,US
+3512460288,3512460543,PR
+3512460544,3512461055,US
+3512461056,3512463103,PR
+3512463104,3512463359,US
+3512463360,3512464639,PR
+3512464640,3512465151,US
+3512465152,3512465407,PR
+3512465408,3512465663,US
+3512465664,3512465919,PR
+3512465920,3512466175,US
+3512466176,3512466687,PR
+3512466688,3512466943,US
+3512466944,3512467455,PR
+3512467456,3512537599,US
3512537600,3512537855,CA
-3512537856,3512537983,US
-3512537984,3512538111,BR
-3512538112,3512538495,US
-3512538496,3512538623,VE
-3512538624,3512539007,US
-3512539008,3512539135,ID
-3512539136,3512539327,US
-3512539328,3512539391,CO
-3512539392,3512539903,US
-3512539904,3512540031,MX
-3512540032,3512540287,US
-3512540288,3512540295,TH
-3512540296,3512540351,US
-3512540352,3512540415,CO
-3512540416,3512541055,US
-3512541056,3512541119,CO
-3512541120,3512541231,US
-3512541232,3512541247,SE
-3512541248,3512541279,US
-3512541280,3512541295,IT
-3512541296,3512541439,US
-3512541440,3512541583,IT
-3512541584,3512541599,US
-3512541600,3512541615,IT
-3512541616,3512541631,US
-3512541632,3512541695,IT
-3512541696,3512541921,NO
-3512541922,3512542207,US
-3512542208,3512542239,SE
-3512542240,3512542719,US
-3512542720,3512542751,DE
-3512542752,3512542975,US
-3512542976,3512543023,IL
-3512543024,3512543743,US
-3512543744,3512543903,FI
-3512543904,3512543999,US
-3512544000,3512544063,DE
-3512544064,3512544071,ID
-3512544072,3512544079,TW
-3512544080,3512544087,MY
-3512544088,3512544095,US
-3512544096,3512544103,HK
-3512544104,3512544111,JP
-3512544112,3512544255,US
-3512544256,3512544335,GB
-3512544336,3512544383,US
-3512544384,3512544447,GB
-3512544448,3512544511,US
-3512544512,3512544527,DE
-3512544528,3512544575,US
-3512544576,3512544639,DE
-3512544640,3512544767,US
-3512544768,3512544799,NO
-3512544800,3512544831,US
-3512544832,3512544911,NO
-3512544912,3512545023,US
-3512545024,3512545151,TW
-3512545152,3512545407,US
-3512545408,3512545439,GB
-3512545440,3512545471,US
-3512545472,3512545663,GB
-3512545664,3512545759,US
-3512545760,3512545791,GB
-3512545792,3512545935,IT
-3512545936,3512545983,US
-3512545984,3512546047,IT
-3512546048,3512546175,GB
-3512546176,3512546303,US
-3512546304,3512546463,FR
-3512546464,3512546559,US
-3512546560,3512546591,IT
-3512546592,3512546607,SG
-3512546608,3512546623,JP
-3512546624,3512546631,KR
-3512546632,3512546687,US
-3512546688,3512546815,BE
-3512546816,3512546879,DE
-3512546880,3512546943,US
-3512546944,3512547071,DE
-3512547072,3512547103,LU
-3512547104,3512547231,BE
-3512547232,3512547263,US
-3512547264,3512547327,ES
-3512547328,3512547359,SE
-3512547360,3512547391,US
-3512547392,3512547455,ZA
-3512547456,3512547839,US
-3512547840,3512547871,PT
-3512547872,3512548095,US
-3512548096,3512548143,CH
-3512548144,3512548671,US
-3512548672,3512548703,NL
-3512548704,3512548735,US
-3512548736,3512548863,NL
-3512548864,3512548991,CH
-3512548992,3512549087,US
-3512549088,3512549119,GR
-3512549120,3512549247,FR
-3512549248,3512549311,US
-3512549312,3512549375,FR
-3512549376,3512549567,US
-3512549568,3512549631,BE
-3512549632,3512549695,DE
-3512549696,3512549727,TW
-3512549728,3512549759,US
-3512549760,3512549887,TH
-3512549888,3512550015,US
-3512550016,3512550031,DE
-3512550032,3512550143,US
-3512550144,3512550175,AT
-3512550176,3512550255,US
-3512550256,3512550271,AT
-3512550272,3512550399,US
-3512550400,3512550415,CH
-3512550416,3512550911,US
-3512550912,3512551167,GB
+3512537856,3512551167,US
3512551168,3512551423,DE
-3512551424,3512551551,IL
-3512551552,3512552191,US
+3512551424,3512552191,US
3512552192,3512552447,NL
-3512552448,3512552559,US
-3512552560,3512552703,DE
-3512552704,3512552959,US
-3512552960,3512553111,GR
-3512553112,3512553471,US
-3512553472,3512553663,AT
-3512553664,3512553727,US
-3512553728,3512553855,CH
-3512553856,3512553983,US
+3512552448,3512553983,US
3512553984,3512554751,GB
-3512554752,3512554767,DK
-3512554768,3512555775,US
-3512555776,3512556287,IE
-3512556288,3512556415,SE
-3512556416,3512556479,DE
-3512556480,3512556543,US
+3512554752,3512555775,US
+3512555776,3512556031,IE
+3512556032,3512556543,US
3512556544,3512556799,FR
-3512556800,3512556831,US
-3512556832,3512556847,BE
-3512556848,3512556863,US
-3512556864,3512556927,BE
-3512556928,3512557055,US
+3512556800,3512557055,US
3512557056,3512557311,DE
3512557312,3512557567,GB
-3512557568,3512557911,US
-3512557912,3512557919,JP
-3512557920,3512557951,US
-3512557952,3512558015,ID
-3512558016,3512558079,HK
-3512558080,3512558591,US
-3512558592,3512558719,JP
-3512558720,3512558783,MY
-3512558784,3512558847,US
-3512558848,3512558911,JP
-3512558912,3512558959,SG
-3512558960,3512558975,US
-3512558976,3512559039,JP
-3512559040,3512559071,AU
-3512559072,3512559103,US
-3512559104,3512559135,SG
-3512559136,3512559231,US
-3512559232,3512559359,ID
-3512559360,3512560127,US
-3512560128,3512560257,TH
-3512560258,3512560383,US
-3512560384,3512560511,JP
-3512560512,3512561151,US
-3512561152,3512561279,CN
-3512561280,3512561407,US
-3512561408,3512561535,HK
-3512561536,3512561663,US
-3512561664,3512561727,AU
-3512561728,3512561791,JP
-3512561792,3512561919,CN
+3512557568,3512561919,US
3512561920,3512562175,JP
-3512562176,3512562239,CH
-3512562240,3512562271,HK
-3512562272,3512562303,US
-3512562304,3512562367,CN
-3512562368,3512562431,HK
-3512562432,3512562463,TH
-3512562464,3512562543,US
-3512562544,3512562559,TH
-3512562560,3512562943,US
-3512562944,3512563071,PH
-3512563072,3512563135,US
-3512563136,3512563199,SG
-3512563200,3512563391,US
-3512563392,3512563455,ID
-3512563456,3512563711,US
-3512563712,3512563727,MY
-3512563728,3512563743,US
-3512563744,3512563775,AU
-3512563776,3512563807,JP
-3512563808,3512563967,US
-3512563968,3512564095,PH
-3512564096,3512564223,US
+3512562176,3512564223,US
3512564224,3512564479,SG
-3512564480,3512565119,US
-3512565120,3512565247,HK
+3512564480,3512565247,US
3512565248,3512565503,PH
-3512565504,3512566527,US
-3512566528,3512566655,BR
-3512566656,3512567199,US
-3512567200,3512567231,CA
-3512567232,3512567295,US
-3512567296,3512567423,GB
-3512567424,3512567935,US
-3512567936,3512568063,BR
-3512568064,3512569087,US
-3512569088,3512569215,CA
-3512569216,3512569983,US
-3512569984,3512569999,VE
-3512570000,3512570015,CA
-3512570016,3512570239,US
-3512570240,3512570367,MX
-3512570368,3512571775,US
-3512571776,3512571903,CL
-3512571904,3512571967,VE
-3512571968,3512572927,US
-3512572928,3512573055,MX
-3512573056,3512573151,US
-3512573152,3512573183,BR
-3512573184,3512573311,US
-3512573312,3512573375,CL
-3512573376,3512573439,US
-3512573440,3512573695,CL
-3512573696,3512573727,KR
-3512573728,3512573759,HK
-3512573760,3512573791,TW
-3512573792,3512573823,ID
-3512573824,3512573855,SG
-3512573856,3512573887,US
-3512573888,3512574207,ID
+3512565504,3512573951,US
+3512573952,3512574207,ID
3512574208,3512574719,US
3512574720,3512574975,SG
-3512574976,3512575551,US
-3512575552,3512575615,MY
-3512575616,3512575743,JP
-3512575744,3512575999,US
-3512576000,3512576031,KR
-3512576032,3512576063,US
-3512576064,3512576127,KR
-3512576128,3512576255,US
+3512574976,3512576255,US
3512576256,3512576511,HK
-3512576512,3512576767,US
-3512576768,3512576895,KR
-3512576896,3512577023,US
-3512577024,3512577087,JP
-3512577088,3512577279,US
-3512577280,3512577343,TW
-3512577344,3512577407,SG
-3512577408,3512577439,TH
-3512577440,3512577535,US
-3512577536,3512577599,AU
-3512577600,3512577631,PH
-3512577632,3512577663,US
-3512577664,3512577727,TH
-3512577728,3512577791,US
-3512577792,3512577855,JP
-3512577856,3512578047,US
-3512578048,3512578111,KR
-3512578112,3512578559,US
-3512578560,3512578720,CN
-3512578721,3512578815,US
-3512578816,3512578943,TH
-3512578944,3512579071,US
-3512579072,3512579199,ID
-3512579200,3512579327,HK
-3512579328,3512579455,KR
-3512579456,3512579583,NZ
-3512579584,3512579839,US
-3512579840,3512579967,SG
-3512579968,3512580031,KR
-3512580032,3512580095,TW
-3512580096,3512580223,JP
-3512580224,3512580287,US
-3512580288,3512580351,CN
-3512580352,3512580367,CH
-3512580368,3512580415,US
-3512580416,3512580479,SG
-3512580480,3512580863,HK
-3512580864,3512580991,ID
-3512580992,3512581055,SG
-3512581056,3512581119,KR
-3512581120,3512581247,NZ
-3512581248,3512581375,TW
+3512576512,3512580607,US
+3512580608,3512580863,HK
+3512580864,3512581375,US
3512581376,3512582143,CN
-3512582144,3512582207,US
-3512582208,3512582223,BR
-3512582224,3512582463,US
-3512582464,3512582527,BR
-3512582528,3512582655,PE
-3512582656,3512582719,BR
-3512582720,3512582783,CN
-3512582784,3512582911,BR
-3512582912,3512583295,US
-3512583296,3512583679,BR
-3512583680,3512584447,US
-3512584448,3512584479,BR
-3512584480,3512585407,US
-3512585408,3512585439,BR
-3512585440,3512585887,US
-3512585888,3512585919,PE
-3512585920,3512585983,CO
-3512585984,3512586175,US
-3512586176,3512586239,VE
-3512586240,3512586495,US
-3512586496,3512586687,BR
-3512586688,3512586751,AR
-3512586752,3512587295,US
-3512587296,3512587327,CH
-3512587328,3512587647,US
-3512587648,3512587775,CO
-3512587776,3512587903,US
-3512587904,3512588031,CO
-3512588032,3512588159,US
-3512588160,3512588191,PE
-3512588192,3512588223,US
-3512588224,3512588287,BR
-3512588288,3512588415,US
-3512588416,3512588543,MX
-3512588544,3512589407,US
-3512589408,3512589567,BR
-3512589568,3512589887,US
-3512589888,3512589951,CO
-3512589952,3512590015,US
-3512590016,3512590079,CO
-3512590080,3512590143,MX
-3512590144,3512590207,CH
-3512590208,3512590847,US
-3512590848,3512590975,TH
-3512590976,3512591103,PH
+3512582144,3512583423,US
+3512583424,3512583679,BR
+3512583680,3512591103,US
3512591104,3512591359,JP
3512591360,3512592383,US
3512592384,3512592895,GB
3512592896,3512593151,PH
3512593152,3512593279,GB
-3512593280,3512593407,SG
-3512593408,3512593471,TH
-3512593472,3512593511,US
-3512593512,3512593519,CN
-3512593520,3512593663,US
+3512593280,3512593663,US
3512593664,3512593791,JP
-3512593792,3512593887,US
-3512593888,3512593919,DE
-3512593920,3512594175,AP
+3512593792,3512594175,US
3512594176,3512594431,MY
-3512594432,3512594495,HK
-3512594496,3512594559,US
-3512594560,3512594687,CN
-3512594688,3512594943,US
-3512594944,3512595007,TH
-3512595008,3512595199,US
+3512594432,3512595199,US
3512595200,3512595455,TW
-3512595456,3512595711,US
-3512595712,3512595743,KR
-3512595744,3512595775,US
-3512595776,3512595839,KR
-3512595840,3512596223,US
+3512595456,3512596223,US
3512596224,3512596479,JP
3512596480,3512596991,US
3512596992,3512597247,TH
3512597248,3512597759,US
3512597760,3512598015,JP
-3512598016,3512598079,KR
-3512598080,3512598143,US
-3512598144,3512598271,TH
+3512598016,3512598271,US
3512598272,3512598527,PH
3512598528,3512647679,US
3512647680,3512655871,TT
-3512655872,3512690591,US
-3512690592,3512690623,IN
-3512690624,3512695839,US
-3512695840,3512695871,GB
-3512695872,3512696831,US
-3512696832,3512699647,SE
-3512699648,3512699903,US
-3512699904,3512701951,SE
+3512655872,3512696831,US
+3512696832,3512701951,SE
3512701952,3512702975,US
3512702976,3512703231,SE
3512703232,3512703359,US
3512703360,3512705023,SE
3512705024,3512844287,US
3512844288,3512852479,CA
-3512852480,3512891135,US
-3512891136,3512891167,BE
-3512891168,3512891199,AU
-3512891200,3512891231,FR
-3512891232,3512891263,KW
-3512891264,3512891327,US
-3512891328,3512891359,CA
-3512891360,3512983551,US
+3512852480,3512931583,US
+3512931584,3512931839,CA
+3512931840,3512983551,US
3512983552,3512987647,AR
3512987648,3513188351,US
3513188352,3513204735,CA
@@ -157358,17 +84104,11 @@
3513475072,3513483263,CA
3513499648,3513501183,US
3513501184,3513501439,PH
-3513501440,3513502719,US
-3513502720,3513502975,US
-3513502976,3513506559,US
+3513501440,3513506559,US
3513506560,3513506815,CA
-3513506816,3513670911,US
-3513670912,3513671167,A2
-3513671168,3513778175,US
+3513506816,3513778175,US
3513778176,3513794559,CA
-3513794560,3513840127,US
-3513840128,3513840383,US
-3513840384,3514007551,US
+3513794560,3514007551,US
3514007552,3514040319,CA
3514040320,3514367999,US
3514368000,3514433535,CA
@@ -157379,44 +84119,15 @@
3514582016,3514582527,US
3514582528,3514582783,GB
3514582784,3514583295,US
-3514583296,3514583455,GB
-3514583456,3514583463,ZA
-3514583464,3514583471,GB
-3514583472,3514583479,ZA
-3514583480,3514583487,US
-3514583488,3514583511,GB
-3514583512,3514583543,US
-3514583544,3514583583,GB
-3514583584,3514583591,US
-3514583592,3514583599,GB
-3514583600,3514583639,US
-3514583640,3514583807,GB
+3514583296,3514583511,GB
+3514583512,3514583535,US
+3514583536,3514583807,GB
3514583808,3514584063,US
-3514584064,3514584383,GB
-3514584384,3514584415,US
-3514584416,3514584575,GB
-3514584576,3514584591,US
-3514584592,3514584607,GB
-3514584608,3514584639,US
-3514584640,3514584831,GB
+3514584064,3514584831,GB
3514584832,3514585343,US
-3514585344,3514585599,GB
-3514585600,3514585615,AI
-3514585616,3514585855,GB
-3514585856,3514585871,AI
-3514585872,3514586111,GB
-3514586112,3514586127,US
-3514586128,3514586367,GB
-3514586368,3514586383,US
-3514586384,3514586895,GB
-3514586896,3514586911,US
-3514586912,3514587135,GB
-3514587136,3514587407,US
-3514587408,3514587647,GB
-3514587648,3514587663,US
-3514587664,3514588671,GB
-3514588672,3514588687,US
-3514588688,3514589183,GB
+3514585344,3514587135,GB
+3514587136,3514587391,US
+3514587392,3514589183,GB
3514589184,3514589439,US
3514589440,3514589695,GT
3514589696,3514590207,SV
@@ -157436,53 +84147,29 @@
3514993992,3514994007,GB
3514994008,3514994023,DK
3514994024,3514994049,GB
-3514994050,3514994050,EU
+3514994050,3514994050,US
3514994051,3514994175,GB
3514994176,3515001869,US
3515001870,3515001873,GB
3515001874,3515007869,US
3515007870,3515007870,GB
-3515007871,3515136511,US
-3515136512,3515136767,GB
-3515136768,3515149567,US
-3515149568,3515149583,AU
-3515149584,3515301887,US
+3515007871,3515082751,US
+3515084800,3515222271,US
+3515222272,3515224831,TR
+3515224832,3515301887,US
3515301888,3515318271,CA
-3515318272,3515454399,US
-3515454400,3515454463,JP
-3515454464,3515455999,US
-3515456000,3515456015,JP
-3515456016,3515456703,US
-3515456704,3515456767,JP
-3515456768,3515596799,US
+3515318272,3515358975,US
+3515358976,3515359231,MX
+3515359232,3515596799,US
3515596800,3515613183,CA
-3515613184,3515617495,US
-3515617496,3515617503,IN
-3515617504,3515711487,US
+3515613184,3515711487,US
3515711488,3515731967,CA
-3515731968,3515860351,US
-3515860352,3515860431,IN
-3515860432,3515867151,US
-3515867152,3515867167,AU
-3515867168,3515867391,US
-3515867392,3515867519,AU
-3515867520,3515868463,US
-3515868464,3515868479,IT
-3515868480,3515882375,US
-3515882376,3515882383,AU
-3515882384,3515913631,US
-3515913632,3515913663,CA
-3515913664,3515916519,US
-3515916520,3515916527,AU
-3515916528,3515932895,US
-3515932896,3515932903,CA
-3515932904,3515955375,US
-3515955376,3515955391,GB
-3515955392,3515955551,US
-3515955552,3515955567,ES
-3515955568,3515956319,US
-3515956320,3515956335,NL
-3515956336,3515965439,US
+3515731968,3515736063,US
+3515736064,3515744255,DE
+3515744256,3515760639,CA
+3515760640,3515844095,US
+3515844096,3515844607,GB
+3515844608,3515965439,US
3515965440,3515973631,CA
3515973632,3515990015,US
3515990016,3516006399,CA
@@ -157490,41 +84177,26 @@
3516039168,3516071935,CA
3516071936,3516139007,US
3516139008,3516139263,GB
-3516139264,3516153855,US
-3516162048,3516170239,US
-3516170240,3516193943,CA
-3516193944,3516193951,US
-3516193952,3516203007,CA
+3516139264,3516170239,US
+3516170240,3516203007,CA
3516203008,3516334079,US
3516334080,3516342271,CA
-3516342272,3516351055,US
-3516351056,3516351087,TR
-3516351088,3516351095,US
-3516351096,3516351103,MY
-3516351104,3516351255,US
-3516351256,3516351271,AE
-3516351272,3516355663,US
-3516355664,3516355679,CA
-3516355680,3516357631,US
+3516342272,3516357631,US
3516357632,3516357887,MY
3516357888,3516358143,CA
3516358144,3516366847,US
3516366848,3516370943,CA
3516370944,3516514303,US
3516514304,3516530687,CA
-3516530688,3516897367,US
-3516897368,3516897375,IN
-3516897376,3516899327,US
-3516899328,3516899839,A2
+3516530688,3516899839,US
3516899840,3516900095,NG
-3516900096,3516900351,A2
+3516900096,3516900351,US
3516900352,3516900607,NG
-3516900608,3516900863,A2
+3516900608,3516900863,US
3516900864,3516901119,NG
-3516901120,3516902399,US
-3516902400,3516902655,A2
+3516901120,3516902655,US
3516902656,3516902911,NG
-3516902912,3516903167,A2
+3516902912,3516903167,US
3516903168,3516903423,NG
3516903424,3516907519,CA
3516907520,3517019135,US
@@ -157535,13 +84207,7 @@
3517038592,3517054975,CA
3517054976,3517095935,US
3517095936,3517100031,CA
-3517100032,3517100213,US
-3517100214,3517100223,NZ
-3517100224,3517100720,US
-3517100721,3517100730,CA
-3517100731,3517103316,US
-3517103317,3517103330,NZ
-3517103331,3517112319,US
+3517100032,3517112319,US
3517112320,3517116159,CA
3517116160,3517116415,US
3517116416,3517120511,CA
@@ -157550,266 +84216,150 @@
3517174784,3517233151,US
3517233152,3517235199,GU
3517235200,3517382655,US
-3517382656,3517384703,CA
+3517382656,3517383167,CA
+3517383168,3517383423,US
+3517383424,3517384703,CA
3517384704,3517385215,US
-3517385216,3517387775,CA
-3517387776,3517388031,US
-3517388032,3517388799,CA
+3517385216,3517387263,CA
+3517387264,3517387519,US
+3517387520,3517387775,CA
+3517387776,3517388287,US
+3517388288,3517388799,CA
3517388800,3517389311,US
3517389312,3517389567,CA
3517389568,3517389823,US
-3517389824,3517391471,CA
-3517391472,3517391487,US
-3517391488,3517391535,CA
-3517391536,3517391551,US
-3517391552,3517392127,CA
+3517389824,3517390335,CA
+3517390336,3517390591,US
+3517390592,3517391359,CA
+3517391360,3517391871,US
+3517391872,3517392127,CA
3517392128,3517392383,US
3517392384,3517392639,CA
-3517392640,3517392655,US
-3517392656,3517392719,CA
-3517392720,3517392735,US
-3517392736,3517392815,CA
-3517392816,3517392831,US
-3517392832,3517392847,CA
-3517392848,3517392879,US
-3517392880,3517393407,CA
-3517393408,3517393439,US
-3517393440,3517393471,CA
-3517393472,3517393503,US
-3517393504,3517395663,CA
-3517395664,3517395679,US
-3517395680,3517395695,CA
-3517395696,3517395743,US
-3517395744,3517395807,CA
-3517395808,3517395839,US
-3517395840,3517395871,CA
-3517395872,3517395903,US
-3517395904,3517396911,CA
-3517396912,3517396927,US
-3517396928,3517397503,CA
+3517392640,3517392895,US
+3517392896,3517393407,CA
+3517393408,3517394431,US
+3517394432,3517394943,CA
+3517394944,3517395199,US
+3517395200,3517395455,CA
+3517395456,3517396111,US
+3517396112,3517396127,CA
+3517396128,3517396223,US
+3517396224,3517396479,CA
+3517396480,3517396751,US
+3517396752,3517396767,CA
+3517396768,3517397247,US
+3517397248,3517397503,CA
3517397504,3517397759,US
3517397760,3517398015,CA
3517398016,3517398527,US
-3517398528,3517399551,CA
-3517399552,3517399807,US
+3517398528,3517399039,CA
+3517399040,3517399807,US
3517399808,3517399871,CA
-3517399872,3517399935,IL
-3517399936,3517400831,CA
-3517400832,3517400847,US
-3517400848,3517401183,CA
-3517401184,3517401199,US
-3517401200,3517401279,CA
-3517401280,3517401343,US
-3517401344,3517401599,CA
-3517401600,3517401855,US
-3517401856,3517402879,CA
-3517402880,3517403391,US
-3517403392,3517403455,CA
-3517403456,3517403519,US
-3517403520,3517404159,CA
+3517399872,3517400063,US
+3517400064,3517400575,CA
+3517400576,3517401855,US
+3517401856,3517402367,CA
+3517402368,3517402623,US
+3517402624,3517402879,CA
+3517402880,3517403647,US
+3517403648,3517404159,CA
3517404160,3517404415,US
3517404416,3517404927,CA
3517404928,3517405183,US
-3517405184,3517406751,CA
-3517406752,3517406783,US
-3517406784,3517407359,CA
-3517407360,3517407487,US
-3517407488,3517407999,CA
+3517405184,3517405439,CA
+3517405440,3517405695,US
+3517405696,3517406719,CA
+3517406720,3517406975,US
+3517406976,3517407231,CA
+3517407232,3517407743,US
+3517407744,3517407999,CA
3517408000,3517408255,US
-3517408256,3517408583,CA
-3517408584,3517408591,US
-3517408592,3517408703,CA
-3517408704,3517408711,US
-3517408712,3517408727,CA
-3517408728,3517408735,US
-3517408736,3517408743,CA
-3517408744,3517408767,US
-3517408768,3517408799,CA
-3517408800,3517408815,US
-3517408816,3517408895,CA
-3517408896,3517408911,US
-3517408912,3517408991,CA
-3517408992,3517409007,US
-3517409008,3517409279,CA
+3517408256,3517408511,CA
+3517408512,3517409023,US
+3517409024,3517409279,CA
3517409280,3517409791,US
3517409792,3517411071,CA
3517411072,3517411327,US
-3517411328,3517414463,CA
-3517414464,3517414495,US
-3517414496,3517415983,CA
-3517415984,3517415999,GB
-3517416000,3517416063,CA
-3517416064,3517416079,US
-3517416080,3517416111,CA
-3517416112,3517416127,US
-3517416128,3517416143,CA
-3517416144,3517416159,US
-3517416160,3517416591,CA
-3517416592,3517416607,US
-3517416608,3517417535,CA
-3517417536,3517417567,US
-3517417568,3517417631,CA
-3517417632,3517417663,US
-3517417664,3517417695,CA
-3517417696,3517417855,US
-3517417856,3517418367,CA
-3517418368,3517418399,US
-3517418400,3517419103,CA
-3517419104,3517419135,US
-3517419136,3517420159,CA
-3517420160,3517420287,US
-3517420288,3517420303,CA
-3517420304,3517420311,US
-3517420312,3517420327,CA
-3517420328,3517420335,US
-3517420336,3517420351,CA
-3517420352,3517420359,US
-3517420360,3517420383,CA
-3517420384,3517420399,US
-3517420400,3517420407,CA
-3517420408,3517420431,US
-3517420432,3517420439,CA
-3517420440,3517420447,US
-3517420448,3517420471,CA
-3517420472,3517420479,US
-3517420480,3517420487,CA
-3517420488,3517420495,US
-3517420496,3517422663,CA
-3517422664,3517422687,US
-3517422688,3517422695,CA
-3517422696,3517422703,US
-3517422704,3517422719,CA
-3517422720,3517422759,US
-3517422760,3517422783,CA
-3517422784,3517422791,US
-3517422792,3517424319,CA
-3517424320,3517424335,SE
-3517424336,3517424511,CA
-3517424512,3517424543,US
-3517424544,3517424623,CA
-3517424624,3517424639,US
-3517424640,3517425023,CA
-3517425024,3517425087,US
-3517425088,3517426047,CA
-3517426048,3517426111,US
-3517426112,3517426687,CA
-3517426688,3517426751,US
-3517426752,3517427711,CA
-3517427712,3517427727,US
-3517427728,3517428063,CA
-3517428064,3517428095,US
-3517428096,3517428431,CA
-3517428432,3517428447,US
-3517428448,3517429759,CA
-3517429760,3517429791,US
-3517429792,3517430015,CA
-3517430016,3517430031,US
-3517430032,3517430127,CA
-3517430128,3517430143,US
-3517430144,3517430175,CA
-3517430176,3517430191,US
-3517430192,3517430207,CA
-3517430208,3517430223,US
-3517430224,3517430239,CA
-3517430240,3517430255,US
-3517430256,3517430783,CA
-3517430784,3517431039,US
-3517431040,3517431599,CA
-3517431600,3517431615,US
-3517431616,3517431663,CA
-3517431664,3517431679,US
-3517431680,3517431695,CA
-3517431696,3517431711,NL
-3517431712,3517431727,CA
-3517431728,3517431743,US
-3517431744,3517431759,CA
-3517431760,3517431775,US
-3517431776,3517431807,CA
-3517431808,3517431823,US
-3517431824,3517431935,CA
-3517431936,3517431951,US
-3517431952,3517431967,CA
-3517431968,3517431983,US
-3517431984,3517432191,CA
-3517432192,3517432319,US
-3517432320,3517433919,CA
-3517433920,3517433983,US
-3517433984,3517434367,CA
-3517434368,3517434375,US
-3517434376,3517434503,CA
-3517434504,3517434527,US
-3517434528,3517434567,CA
-3517434568,3517434583,US
-3517434584,3517434599,CA
-3517434600,3517434615,US
-3517434616,3517435007,CA
-3517435008,3517435135,US
-3517435136,3517436935,CA
-3517436936,3517436943,US
-3517436944,3517436975,CA
-3517436976,3517436983,US
-3517436984,3517436991,CA
-3517436992,3517436999,US
-3517437000,3517437007,CA
-3517437008,3517437015,US
-3517437016,3517437039,CA
-3517437040,3517437055,US
-3517437056,3517437071,CA
-3517437072,3517437079,US
-3517437080,3517437087,CA
-3517437088,3517437095,NO
-3517437096,3517437135,CA
-3517437136,3517437143,US
-3517437144,3517437151,CA
-3517437152,3517437175,US
-3517437176,3517438143,CA
-3517438144,3517438207,US
+3517411328,3517412351,CA
+3517412352,3517412607,US
+3517412608,3517412863,CA
+3517412864,3517413119,US
+3517413120,3517414399,CA
+3517414400,3517414911,US
+3517414912,3517415423,CA
+3517415424,3517416191,US
+3517416192,3517416447,CA
+3517416448,3517416703,US
+3517416704,3517417471,CA
+3517417472,3517418495,US
+3517418496,3517419007,CA
+3517419008,3517419519,US
+3517419520,3517420031,CA
+3517420032,3517420375,US
+3517420376,3517420383,CA
+3517420384,3517420799,US
+3517420800,3517421567,CA
+3517421568,3517421823,US
+3517421824,3517422079,CA
+3517422080,3517422847,US
+3517422848,3517423359,CA
+3517423360,3517423423,US
+3517423424,3517423455,CA
+3517423456,3517423487,US
+3517423488,3517423519,CA
+3517423520,3517423871,US
+3517423872,3517424127,CA
+3517424128,3517424767,US
+3517424768,3517424831,CA
+3517424832,3517425407,US
+3517425408,3517425919,CA
+3517425920,3517426751,US
+3517426752,3517426815,CA
+3517426816,3517426943,US
+3517426944,3517427711,CA
+3517427712,3517428735,US
+3517428736,3517429503,CA
+3517429504,3517430271,US
+3517430272,3517430527,CA
+3517430528,3517430687,US
+3517430688,3517430719,CA
+3517430720,3517432319,US
+3517432320,3517433343,CA
+3517433344,3517434111,US
+3517434112,3517434367,CA
+3517434368,3517435135,US
+3517435136,3517435391,CA
+3517435392,3517435647,US
+3517435648,3517436415,CA
+3517436416,3517436671,US
+3517436672,3517437439,CA
+3517437440,3517437695,US
+3517437696,3517437951,CA
+3517437952,3517438207,US
3517438208,3517438463,CA
-3517438464,3517438527,US
-3517438528,3517438591,CA
-3517438592,3517438655,US
-3517438656,3517438751,CA
-3517438752,3517438783,US
-3517438784,3517438879,CA
-3517438880,3517438911,KW
-3517438912,3517439487,CA
-3517439488,3517439615,US
-3517439616,3517442239,CA
-3517442240,3517442303,US
-3517442304,3517442319,CA
-3517442320,3517442335,US
-3517442336,3517442383,CA
-3517442384,3517442399,US
-3517442400,3517442431,CA
-3517442432,3517442447,US
-3517442448,3517443647,CA
-3517443648,3517443679,US
-3517443680,3517444223,CA
-3517444224,3517444351,US
-3517444352,3517444671,CA
-3517444672,3517444735,US
-3517444736,3517444799,CA
-3517444800,3517444863,US
-3517444864,3517445199,CA
-3517445200,3517445375,US
-3517445376,3517445503,CA
-3517445504,3517445567,US
-3517445568,3517445887,CA
-3517445888,3517446015,US
-3517446016,3517446911,CA
-3517446912,3517447167,US
-3517447168,3517447727,CA
-3517447728,3517447743,US
-3517447744,3517447783,CA
-3517447784,3517447791,US
-3517447792,3517447847,CA
-3517447848,3517447863,US
-3517447864,3517448191,CA
-3517448192,3517523167,US
-3517523168,3517523183,BS
-3517523184,3517524183,US
-3517524184,3517524191,VI
-3517524192,3517546495,US
+3517438464,3517438943,US
+3517438944,3517439231,CA
+3517439232,3517439743,US
+3517439744,3517442047,CA
+3517442048,3517442175,US
+3517442176,3517442207,CA
+3517442208,3517442559,US
+3517442560,3517442623,CA
+3517442624,3517442815,US
+3517442816,3517443583,CA
+3517443584,3517444863,US
+3517444864,3517445119,CA
+3517445120,3517445631,US
+3517445632,3517445887,CA
+3517445888,3517446143,US
+3517446144,3517446655,CA
+3517446656,3517447167,US
+3517447168,3517447679,CA
+3517447680,3517447863,US
+3517447864,3517447871,CA
+3517447872,3517447935,US
+3517447936,3517448191,CA
+3517448192,3517546495,US
3517546496,3517562879,CA
3517562880,3517595647,US
3517595648,3517596671,SE
@@ -157819,125 +84369,60 @@
3517597696,3517597951,IE
3517597952,3517598207,DE
3517598208,3517598463,IE
-3517598464,3517598527,SE
-3517598528,3517598559,FR
-3517598560,3517598591,SE
-3517598592,3517598719,US
-3517598720,3517599359,SE
+3517598464,3517599359,SE
3517599360,3517599615,US
3517599616,3517600767,SE
3517600768,3517601279,US
3517601280,3517602047,SE
3517602048,3517602303,DE
3517602304,3517602559,US
-3517602560,3517602575,SE
-3517602576,3517602591,US
-3517602592,3517602687,SE
+3517602560,3517602687,SE
3517602688,3517602815,US
3517602816,3517603071,SE
-3517603072,3517603615,US
-3517603616,3517603647,DE
+3517603072,3517603583,US
+3517603584,3517603647,SE
3517603648,3517603711,US
-3517603712,3517603967,SE
-3517603968,3517604031,DE
-3517604032,3517604095,SE
+3517603712,3517604095,SE
3517604096,3517604351,US
3517604352,3517605119,SE
3517605120,3517605375,US
-3517605376,3517605775,SE
-3517605776,3517605791,US
-3517605792,3517605887,SE
+3517605376,3517605887,SE
3517605888,3517606143,US
3517606144,3517606207,SE
3517606208,3517606399,US
-3517606400,3517606911,SE
-3517606912,3517607935,US
+3517606400,3517607935,SE
3517607936,3517608191,DE
3517608192,3517608447,US
3517608448,3517608703,GB
-3517608704,3517610015,US
-3517610016,3517610111,SE
-3517610112,3517610143,NO
-3517610144,3517610159,ES
-3517610160,3517610175,SE
-3517610176,3517610183,US
-3517610184,3517610191,SE
-3517610192,3517610199,US
-3517610200,3517610495,SE
+3517608704,3517609727,US
+3517609728,3517610495,SE
3517610496,3517611263,IE
-3517611264,3517611295,SE
-3517611296,3517611303,DE
-3517611304,3517611311,CA
-3517611312,3517611367,SE
-3517611368,3517611383,US
-3517611384,3517611463,SE
-3517611464,3517611471,IL
-3517611472,3517612031,SE
+3517611264,3517612031,SE
3517612032,3517644799,US
3517644800,3517710335,CA
3517710336,3517718527,US
3517718528,3517726719,CA
-3517726720,3517838927,US
-3517838928,3517838938,LB
-3517838939,3517979103,US
-3517979104,3517979111,CA
-3517979112,3517989487,US
-3517989488,3517989503,CA
-3517989504,3517989695,US
-3517989696,3517989727,CA
-3517989728,3517990023,US
-3517990024,3517990031,CA
-3517990032,3517990911,US
+3517726720,3517990911,US
3517990912,3517991423,CA
-3517991424,3518062591,US
+3517991424,3518056447,US
+3518058496,3518062591,US
3518062592,3518066687,CA
-3518066688,3518075455,US
-3518075456,3518075519,AR
-3518075520,3518075583,US
-3518075584,3518075647,MX
+3518066688,3518075647,US
3518075648,3518075903,AU
-3518075904,3518076079,US
-3518076080,3518076087,AU
-3518076088,3518076671,US
+3518075904,3518076671,US
3518076672,3518076927,PA
-3518076928,3518374719,US
-3518374720,3518374783,IN
-3518374784,3518380223,US
-3518380224,3518380287,DE
-3518380288,3518381055,US
+3518076928,3518381055,US
3518381056,3518381311,IN
-3518381312,3518381439,US
-3518381440,3518381567,IN
-3518381568,3518381631,DE
-3518381632,3518431231,US
+3518381312,3518392319,US
+3518394368,3518431231,US
3518431232,3518439423,CA
3518439424,3518463999,US
3518464000,3518472191,CA
-3518472192,3518759407,US
-3518759408,3518759423,CY
-3518759424,3518762495,US
+3518472192,3518762495,US
3518762496,3518762751,GB
-3518762752,3518764671,US
-3518764672,3518764703,NL
-3518764704,3518765311,US
+3518762752,3518765311,US
3518765312,3518765567,CA
-3518765568,3518766879,US
-3518766880,3518766911,TH
-3518766912,3518892415,US
-3518892416,3518892423,GB
-3518892424,3518894439,US
-3518894440,3518894447,TR
-3518894448,3518895783,US
-3518895784,3518895791,TH
-3518895792,3518896215,US
-3518896216,3518896223,CA
-3518896224,3518896231,US
-3518896232,3518896239,CN
-3518896240,3518897119,US
-3518897120,3518897127,IT
-3518897128,3518903191,US
-3518903192,3518903199,JP
-3518903200,3518905599,US
+3518765568,3518905599,US
3518905600,3518905855,GB
3518905856,3518911743,US
3518911744,3518911999,GB
@@ -157947,581 +84432,122 @@
3518918144,3518918399,IN
3518918400,3518919423,US
3518919424,3518919679,IN
-3518919680,3518929535,US
-3518929536,3518929599,CA
-3518929600,3518995695,US
-3518995696,3518995703,GB
-3518995704,3519217671,US
-3519217672,3519217679,BB
-3519217680,3519220095,US
-3519220096,3519220111,GA
-3519220112,3519220119,US
-3519220120,3519220127,GA
-3519220128,3519220575,US
-3519220576,3519220591,GA
-3519220592,3519234047,US
+3518919680,3519234047,US
3519234048,3519250431,CA
-3519250432,3519320975,US
-3519320976,3519320983,GR
-3519320984,3519340543,US
+3519250432,3519340543,US
3519340544,3519344639,CA
-3519344640,3519350079,US
-3519350080,3519350087,NL
-3519350088,3519350271,US
-3519350272,3519350399,US
-3519350400,3519351327,US
+3519344640,3519351327,US
3519351328,3519351359,GB
3519351360,3519351423,US
3519351424,3519351455,GB
3519351456,3519351551,US
3519351552,3519351807,GB
-3519351808,3519352831,US
-3519352832,3519352959,US
-3519352960,3519354047,US
-3519354048,3519354111,US
-3519354112,3519355391,US
-3519355392,3519355519,US
-3519355520,3519381503,US
+3519351808,3519381503,US
3519381504,3519397887,CA
-3519397888,3519406079,US
-3519406080,3519406143,IT
-3519406144,3519406255,US
-3519406256,3519406263,SA
-3519406264,3519406375,US
-3519406376,3519406383,IT
-3519406384,3519406391,IN
-3519406392,3519406407,GB
-3519406408,3519406503,US
-3519406504,3519406511,CA
-3519406512,3519406695,US
-3519406696,3519406831,SA
-3519406832,3519407151,US
-3519407152,3519407199,MY
-3519407200,3519407215,US
-3519407216,3519407351,AE
-3519407352,3519407591,US
-3519407592,3519407599,AE
-3519407600,3519407607,US
-3519407608,3519407615,RU
-3519407616,3519409111,US
-3519409112,3519409119,MY
-3519409120,3519409135,OM
-3519409136,3519409295,US
-3519409296,3519409303,CA
-3519409304,3519409407,US
-3519409408,3519409423,AE
-3519409424,3519409455,US
-3519409456,3519409599,MY
-3519409600,3519409807,US
-3519409808,3519409815,GB
-3519409816,3519409927,US
-3519409928,3519409943,MY
-3519409944,3519409951,US
-3519409952,3519410175,MY
-3519410176,3519410279,US
-3519410280,3519410287,AU
-3519410288,3519411327,US
-3519411328,3519411391,RU
-3519411392,3519412519,US
-3519412520,3519412527,RU
-3519412528,3519412735,US
-3519412736,3519412751,RU
-3519412752,3519412799,US
-3519412800,3519412815,RU
-3519412816,3519412999,US
-3519413000,3519413007,CY
-3519413008,3519415847,US
-3519415848,3519415851,CA
-3519415852,3519416847,US
-3519416848,3519416879,CA
-3519416880,3519417087,US
-3519417088,3519417151,IT
-3519417152,3519417183,CA
-3519417184,3519466895,US
-3519466896,3519466911,SZ
-3519466912,3519467519,US
+3519397888,3519467519,US
3519469568,3519475711,US
3519475712,3519476223,BH
-3519476224,3519477759,A2
-3519477760,3519554047,US
-3519554048,3519554175,US
-3519554176,3519578367,US
+3519476224,3519477759,DE
+3519477760,3519578367,US
3519578368,3519578623,NA
3519578624,3519578879,US
3519578880,3519579135,CA
-3519579136,3519579967,US
-3519579968,3519579983,CY
-3519579984,3519586303,US
+3519579136,3519586303,US
3519586304,3519586559,GB
-3519586560,3519587039,US
-3519587040,3519587071,AG
-3519587072,3519588639,US
-3519588640,3519588671,GB
-3519588672,3519590655,US
+3519586560,3519590655,US
3519590656,3519590911,CA
-3519590912,3519603204,US
-3519603205,3519603212,VN
-3519603213,3519603271,US
-3519603272,3519603286,CA
-3519603287,3519603772,US
-3519603773,3519603781,IN
-3519603782,3519676415,US
-3519676416,3519700559,CA
-3519700560,3519700567,US
-3519700568,3519700575,CA
-3519700576,3519700607,US
-3519700608,3519702319,CA
-3519702320,3519702327,US
-3519702328,3519709183,CA
-3519709184,3519712447,US
-3519712448,3519712511,CA
-3519712512,3519715295,US
-3519715296,3519715327,GB
-3519715328,3519716863,US
-3519716864,3519716999,CA
-3519717000,3519717567,US
-3519717568,3519717631,CA
-3519717632,3519723519,US
+3519590912,3519676415,US
+3519676416,3519709183,CA
+3519709184,3519723519,US
3519723520,3519724031,CA
3519724032,3519741951,US
3519741952,3519758335,ZA
-3519758336,3519799871,US
-3519799872,3519799903,IN
-3519799904,3519805119,US
-3519805120,3519805183,GB
-3519805184,3519873023,US
-3519873024,3519877295,CA
-3519877296,3519877311,US
-3519877312,3519879679,CA
-3519879680,3519879687,US
-3519879688,3519879767,CA
-3519879768,3519879775,US
-3519879776,3519879807,CA
-3519879808,3519879815,US
-3519879816,3519880767,CA
-3519880768,3519880831,DE
-3519880832,3519881375,CA
-3519881376,3519881407,US
-3519881408,3519881567,CA
-3519881568,3519881599,US
-3519881600,3519901695,CA
-3519901696,3519934463,US
+3519758336,3519873023,US
+3519873024,3519874559,CA
+3519874560,3519875071,US
+3519875072,3519877119,CA
+3519877120,3519877167,US
+3519877168,3519877183,CA
+3519877184,3519877887,US
+3519877888,3519878143,CA
+3519878144,3519878271,US
+3519878272,3519878303,CA
+3519878304,3519879727,US
+3519879728,3519879735,CA
+3519879736,3519879935,US
+3519879936,3519880447,CA
+3519880448,3519881983,US
+3519881984,3519882495,CA
+3519882496,3519882751,US
+3519882752,3519884031,CA
+3519884032,3519884287,US
+3519884288,3519901695,CA
+3519901696,3519930367,US
3519934464,3519938559,CA
3519938560,3520020479,US
-3520020480,3520020991,CA
-3520020992,3520021015,US
-3520021016,3520021055,CA
-3520021056,3520021071,US
-3520021072,3520021183,CA
-3520021184,3520021191,US
-3520021192,3520021687,CA
-3520021688,3520021695,US
-3520021696,3520021839,CA
-3520021840,3520021847,US
-3520021848,3520021895,CA
-3520021896,3520021903,US
-3520021904,3520021911,CA
-3520021912,3520021919,US
-3520021920,3520021927,CA
-3520021928,3520021935,US
-3520021936,3520021967,CA
-3520021968,3520021975,US
-3520021976,3520021983,CA
-3520021984,3520021991,US
-3520021992,3520021999,CA
-3520022000,3520022007,US
-3520022008,3520022015,CA
-3520022016,3520022023,US
-3520022024,3520022071,CA
-3520022072,3520022087,US
-3520022088,3520022143,CA
-3520022144,3520022151,US
-3520022152,3520022207,CA
-3520022208,3520022215,US
-3520022216,3520022271,CA
-3520022272,3520022279,US
-3520022280,3520022375,CA
-3520022376,3520022383,US
-3520022384,3520022391,CA
-3520022392,3520022399,US
-3520022400,3520022863,CA
-3520022864,3520022871,US
-3520022872,3520022927,CA
-3520022928,3520022935,US
-3520022936,3520023047,CA
-3520023048,3520023063,US
-3520023064,3520023087,CA
-3520023088,3520023103,US
-3520023104,3520023111,CA
-3520023112,3520023119,US
-3520023120,3520023127,CA
-3520023128,3520023135,US
-3520023136,3520023151,CA
-3520023152,3520023159,US
-3520023160,3520023383,CA
-3520023384,3520023415,US
-3520023416,3520023879,CA
-3520023880,3520023887,US
-3520023888,3520023911,CA
-3520023912,3520023919,US
-3520023920,3520024487,CA
-3520024488,3520024495,US
-3520024496,3520024807,CA
-3520024808,3520024815,US
-3520024816,3520025503,CA
-3520025504,3520025511,US
-3520025512,3520025591,CA
-3520025592,3520025599,NL
-3520025600,3520025623,CA
-3520025624,3520025631,US
-3520025632,3520025639,CA
-3520025640,3520025647,US
-3520025648,3520025791,CA
-3520025792,3520025799,US
-3520025800,3520026671,CA
-3520026672,3520026679,US
-3520026680,3520026703,CA
-3520026704,3520026711,US
-3520026712,3520026783,CA
-3520026784,3520026791,US
-3520026792,3520026991,CA
-3520026992,3520026999,US
-3520027000,3520027047,CA
-3520027048,3520027055,US
-3520027056,3520027111,CA
-3520027112,3520027119,US
-3520027120,3520027231,CA
-3520027232,3520027239,US
-3520027240,3520027271,CA
-3520027272,3520027279,US
-3520027280,3520027711,CA
-3520027712,3520027727,US
-3520027728,3520027815,CA
-3520027816,3520027823,US
-3520027824,3520027839,CA
-3520027840,3520027887,US
-3520027888,3520027951,CA
-3520027952,3520027991,US
-3520027992,3520028047,CA
-3520028048,3520028055,US
-3520028056,3520028095,CA
-3520028096,3520028103,US
-3520028104,3520028191,CA
-3520028192,3520028199,US
-3520028200,3520028487,CA
-3520028488,3520028535,US
-3520028536,3520028543,CA
-3520028544,3520028551,US
-3520028552,3520028655,CA
-3520028656,3520028671,US
-3520028672,3520028695,CA
-3520028696,3520028711,US
-3520028712,3520029167,CA
-3520029168,3520029175,IL
-3520029176,3520030975,CA
-3520030976,3520030983,NL
-3520030984,3520031143,CA
-3520031144,3520031151,US
-3520031152,3520032039,CA
-3520032040,3520032087,US
-3520032088,3520032103,CA
-3520032104,3520032111,US
-3520032112,3520032119,CA
-3520032120,3520032127,US
-3520032128,3520032159,CA
-3520032160,3520032191,US
-3520032192,3520032199,CA
-3520032200,3520032223,US
-3520032224,3520032303,CA
-3520032304,3520032311,US
-3520032312,3520032399,CA
-3520032400,3520032407,US
-3520032408,3520032591,CA
-3520032592,3520032599,US
-3520032600,3520032687,CA
-3520032688,3520032711,US
-3520032712,3520032735,CA
-3520032736,3520032759,US
-3520032760,3520032767,CA
-3520032768,3520032791,US
-3520032792,3520032807,CA
-3520032808,3520032847,US
-3520032848,3520032855,CA
-3520032856,3520032863,US
-3520032864,3520033583,CA
-3520033584,3520033591,US
-3520033592,3520033631,CA
-3520033632,3520033639,US
-3520033640,3520033671,CA
-3520033672,3520033679,US
-3520033680,3520033695,CA
-3520033696,3520033703,US
-3520033704,3520033759,CA
-3520033760,3520033767,US
-3520033768,3520034151,CA
-3520034152,3520034159,US
-3520034160,3520034167,CA
-3520034168,3520034175,US
-3520034176,3520034263,CA
-3520034264,3520034271,US
-3520034272,3520034487,CA
-3520034488,3520034495,US
-3520034496,3520034559,CA
-3520034560,3520034567,US
-3520034568,3520034639,CA
-3520034640,3520034647,GH
-3520034648,3520034775,CA
-3520034776,3520034791,US
-3520034792,3520035135,CA
-3520035136,3520035263,US
-3520035264,3520035279,CA
-3520035280,3520035287,US
-3520035288,3520035327,CA
-3520035328,3520035335,US
-3520035336,3520035495,CA
-3520035496,3520035503,US
-3520035504,3520035519,CA
-3520035520,3520035543,US
-3520035544,3520036143,CA
-3520036144,3520036151,US
-3520036152,3520036191,CA
-3520036192,3520036199,US
-3520036200,3520036287,CA
-3520036288,3520036295,US
-3520036296,3520036327,CA
-3520036328,3520036343,US
-3520036344,3520036351,CA
-3520036352,3520036359,US
-3520036360,3520036863,CA
-3520036864,3520072751,US
-3520072752,3520072767,AR
-3520072768,3520073039,US
-3520073040,3520073055,CA
-3520073056,3520073239,US
-3520073240,3520073247,BO
-3520073248,3520073255,US
-3520073256,3520073263,BR
-3520073264,3520074671,US
-3520074672,3520074687,GB
-3520074688,3520074783,US
-3520074784,3520074815,NL
-3520074816,3520074847,US
-3520074848,3520074863,GB
-3520074864,3520075311,US
-3520075312,3520075327,BR
-3520075328,3520075455,US
-3520075456,3520075471,CA
-3520075472,3520075743,US
-3520075744,3520075775,NL
-3520075776,3520078031,US
-3520078032,3520078047,BS
-3520078048,3520078911,US
-3520078912,3520078927,AU
-3520078928,3520078943,EC
-3520078944,3520082151,US
-3520082152,3520082167,CA
-3520082168,3520083967,US
-3520083968,3520084031,AE
-3520084032,3520086271,US
+3520020480,3520036863,CA
+3520036864,3520086271,US
3520086272,3520086527,CA
-3520086528,3520086959,US
-3520086960,3520086975,CA
-3520086976,3520087327,US
-3520087328,3520087359,DE
-3520087360,3520087727,US
-3520087728,3520087735,DE
-3520087736,3520088447,US
-3520088448,3520088463,ES
-3520088464,3520092687,US
-3520092688,3520092691,DE
-3520092692,3520095455,US
-3520095456,3520095471,NL
-3520095472,3520097135,US
-3520097136,3520097151,CA
-3520097152,3520097791,US
-3520097792,3520098047,CA
-3520098048,3520099567,US
-3520099568,3520099583,FR
-3520099584,3520100031,US
-3520100032,3520100039,LB
-3520100040,3520101919,US
-3520101920,3520101927,BR
-3520101928,3520112975,US
-3520112976,3520112991,ES
-3520112992,3520114399,US
-3520114400,3520114407,VG
-3520114408,3520121519,US
-3520121520,3520121535,GB
-3520121536,3520356351,US
+3520086528,3520135167,US
+3520167936,3520344063,US
+3520348160,3520356351,US
3520356352,3520364543,ZA
-3520364544,3520369096,US
-3520369097,3520369097,US
-3520369098,3520397311,US
-3520401408,3520413439,US
+3520364544,3520413439,US
3520413440,3520413695,CA
3520413696,3520454655,US
3520454656,3520462847,CA
-3520462848,3520527871,US
-3520527872,3520528383,A2
-3520528384,3520626687,US
+3520462848,3520626687,US
3520626688,3520634879,CA
-3520634880,3520644607,US
-3520644608,3520644863,US
-3520644864,3520652287,US
-3520652288,3520652543,US
-3520652544,3520656383,US
-3520656384,3520656639,US
-3520656640,3520675839,US
-3520675840,3520679439,CA
-3520679440,3520679447,US
-3520679448,3520691583,CA
-3520691584,3520691591,US
-3520691592,3520691807,CA
-3520691808,3520691839,US
-3520691840,3520692223,CA
-3520692224,3520716908,US
-3520716909,3520716910,IN
-3520716911,3520717015,US
-3520717016,3520717023,IN
-3520717024,3520749871,US
-3520749872,3520749879,CA
-3520749880,3520937983,US
+3520634880,3520675839,US
+3520675840,3520692223,CA
+3520692224,3520937983,US
3520937984,3520954367,CA
-3520954368,3520978943,US
-3520978944,3520979711,BZ
-3520979712,3520980735,GB
-3520980736,3520981247,NL
-3520981248,3520987903,US
-3520987904,3520987935,US
-3520987936,3520994815,US
-3520994816,3520995327,ES
+3520954368,3520994815,US
+3520994816,3520995071,GB
+3520995072,3520995327,ES
3520995328,3520999423,US
3520999424,3521003519,CA
3521003520,3521028095,US
3521028096,3521032191,CA
3521032192,3521044479,US
3521044480,3521048575,CA
-3521048576,3521049599,US
-3521052672,3521061671,US
-3521061672,3521061679,CA
-3521061680,3521074687,US
-3521074688,3521074695,CA
-3521074696,3521074735,US
-3521074736,3521074751,AU
-3521074752,3521086207,US
+3521048576,3521086207,US
3521086208,3521086463,AU
-3521086464,3521098551,US
-3521098552,3521098559,MX
-3521098560,3521103231,US
-3521103232,3521103263,CA
-3521103264,3521106527,US
-3521106528,3521106543,CA
-3521106544,3521186623,US
-3521186624,3521186687,AR
-3521186688,3521192703,US
-3521192704,3521192735,FR
-3521192736,3521196287,US
+3521086464,3521196287,US
3521196288,3521196543,AR
-3521196544,3521199103,US
-3521199104,3521199167,CA
-3521199168,3521199215,US
-3521199216,3521199223,CA
-3521199224,3521199231,US
-3521199232,3521199239,CA
-3521199240,3521249279,US
+3521196544,3521216511,US
+3521216512,3521220351,CA
+3521220352,3521220607,US
+3521220608,3521222143,CA
+3521222144,3521222399,US
+3521222400,3521224959,CA
+3521224960,3521225215,US
+3521225216,3521232127,CA
+3521232128,3521232383,US
+3521232384,3521232895,CA
+3521232896,3521249279,US
3521249280,3521314815,CA
-3521314816,3521364735,US
-3521364736,3521364815,IT
-3521364816,3521366783,US
+3521314816,3521347583,US
+3521347584,3521363967,CA
+3521363968,3521366783,US
3521366784,3521367039,CY
-3521367040,3521371423,US
-3521371424,3521371455,IT
-3521371456,3521371463,US
-3521371464,3521371495,IT
-3521371496,3521371647,US
-3521371648,3521371679,CA
-3521371680,3521371711,US
-3521371712,3521371759,CA
-3521371760,3521371903,US
-3521371904,3521371911,IT
-3521371912,3521371919,US
-3521371920,3521371983,IT
-3521371984,3521371999,US
-3521372000,3521372031,IT
-3521372032,3521372063,US
-3521372064,3521372079,IN
-3521372080,3521372095,IT
-3521372096,3521372159,CA
-3521372160,3521377407,US
-3521377408,3521377439,IT
-3521377440,3521835903,US
-3521835904,3521835967,CA
-3521835968,3521904639,US
+3521367040,3521802239,US
+3521806336,3521888483,US
+3521888484,3521888484,KW
+3521888485,3521896927,US
+3521896928,3521896935,NG
+3521896936,3521899263,US
+3521899264,3521899271,KW
+3521899272,3521904148,US
+3521904149,3521904149,NG
+3521904150,3521904639,US
3521904640,3521921023,JM
-3521921024,3521933337,US
-3521933338,3521933345,MA
-3521933346,3521933389,US
-3521933390,3521933397,AE
-3521933398,3521933405,US
-3521933406,3521933413,VE
-3521933414,3521933421,IN
-3521933422,3521933429,US
-3521933430,3521933437,EG
-3521933438,3521933445,VE
-3521933446,3521933493,US
-3521933494,3521933501,EG
-3521933502,3521933833,US
-3521933834,3521933841,EG
-3521933842,3521933929,US
-3521933930,3521933937,IN
-3521933938,3521933945,US
-3521933946,3521933953,EG
-3521933954,3521933965,US
-3521933966,3521933973,ID
-3521933974,3521933981,EG
-3521933982,3521933989,IN
-3521933990,3521933997,EG
-3521933998,3521934061,US
-3521934062,3521934069,EG
-3521934070,3521934089,US
-3521934090,3521934097,EG
-3521934098,3521934121,US
-3521934122,3521934129,ID
-3521934130,3521934137,US
-3521934138,3521934145,GR
-3521934146,3521934153,US
-3521934154,3521934161,ID
-3521934162,3521934193,US
-3521934194,3521934201,LK
-3521934202,3521934289,US
-3521934290,3521934297,EG
-3521934298,3521934318,US
-3521934319,3521934326,SA
-3521934327,3521934369,US
-3521934370,3521934377,IN
-3521934378,3521934421,US
-3521934422,3521934429,EG
-3521934430,3521934437,US
-3521934438,3521934445,IN
-3521934446,3521934509,US
-3521934510,3521934517,IN
-3521934518,3521934735,US
-3521934736,3521934743,EG
-3521934744,3521935245,US
-3521935246,3521935253,LK
-3521935254,3521935310,US
-3521935311,3521935318,EG
-3521935319,3521965055,US
+3521921024,3521965055,US
3521965056,3521966079,DE
-3521966080,3521989631,US
-3521989632,3521989887,A2
-3521989888,3522029439,US
-3522029440,3522029503,FI
-3522029504,3522029567,CA
-3522029568,3522101247,US
+3521966080,3522101247,US
3522101248,3522109439,CA
-3522109440,3522118143,US
-3522118144,3522118655,GB
+3522109440,3522118399,US
+3522118400,3522118655,GB
3522118656,3522118911,US
3522118912,3522119679,GB
3522119680,3522119935,US
@@ -158538,391 +84564,22 @@
3522123520,3522123775,GB
3522123776,3522125055,US
3522125056,3522125311,GB
-3522125312,3522130193,US
-3522130194,3522130194,BR
-3522130195,3522130195,CA
-3522130196,3522130205,US
-3522130206,3522130207,BR
-3522130208,3522130210,US
-3522130211,3522130211,CA
-3522130212,3522130220,US
-3522130221,3522130221,BR
-3522130222,3522130230,US
-3522130231,3522130231,TH
-3522130232,3522130236,US
-3522130237,3522130237,BR
-3522130238,3522130238,US
-3522130239,3522130240,BR
-3522130241,3522130252,US
-3522130253,3522130253,BR
+3522125312,3522130253,US
3522130254,3522130254,UA
-3522130255,3522130259,US
-3522130260,3522130260,CH
-3522130261,3522130263,US
-3522130264,3522130264,PE
-3522130265,3522130269,US
-3522130270,3522130270,IN
-3522130271,3522130280,US
-3522130281,3522130281,BR
-3522130282,3522130282,DE
-3522130283,3522130283,BR
-3522130284,3522130284,US
-3522130285,3522130285,BR
-3522130286,3522130289,US
-3522130290,3522130290,AR
-3522130291,3522130291,BR
-3522130292,3522130293,US
-3522130294,3522130294,GT
-3522130295,3522130296,US
-3522130297,3522130297,CA
-3522130298,3522130298,DE
-3522130299,3522130299,CA
-3522130300,3522130302,US
-3522130303,3522130303,BR
-3522130304,3522130306,US
-3522130307,3522130307,NP
-3522130308,3522130309,BR
-3522130310,3522130312,CA
-3522130313,3522130313,US
-3522130314,3522130314,BR
-3522130315,3522130325,US
-3522130326,3522130326,EE
-3522130327,3522130330,US
-3522130331,3522130331,BR
-3522130332,3522130332,US
-3522130333,3522130333,DE
-3522130334,3522130334,BR
-3522130335,3522130335,US
-3522130336,3522130336,DO
-3522130337,3522130339,US
-3522130340,3522130341,DO
-3522130342,3522130342,PK
-3522130343,3522130343,BR
-3522130344,3522130346,US
-3522130347,3522130348,CA
-3522130349,3522130349,US
-3522130350,3522130350,GT
-3522130351,3522130351,US
-3522130352,3522130352,BR
-3522130353,3522130356,US
-3522130357,3522130357,RU
-3522130358,3522130360,CA
-3522130361,3522130361,US
-3522130362,3522130362,BR
-3522130363,3522130363,US
-3522130364,3522130364,DE
-3522130365,3522130365,EC
-3522130366,3522130366,US
-3522130367,3522130368,TW
-3522130369,3522130370,HK
-3522130371,3522130371,US
-3522130372,3522130372,CO
-3522130373,3522130373,MX
-3522130374,3522130374,CO
-3522130375,3522130376,BR
-3522130377,3522130377,US
-3522130378,3522130378,BR
-3522130379,3522130383,US
-3522130384,3522130384,UA
-3522130385,3522130389,US
-3522130390,3522130391,PK
-3522130392,3522130392,AR
-3522130393,3522130393,US
-3522130394,3522130394,AR
-3522130395,3522130400,US
-3522130401,3522130401,PK
-3522130402,3522130405,US
-3522130406,3522130408,BR
-3522130409,3522130412,US
-3522130413,3522130413,TW
-3522130414,3522130415,US
-3522130416,3522130416,EC
-3522130417,3522130417,US
-3522130418,3522130418,CO
-3522130419,3522130421,US
-3522130422,3522130422,BR
-3522130423,3522130423,CA
-3522130424,3522130425,SE
-3522130426,3522130426,PH
-3522130427,3522130427,BG
-3522130428,3522130428,US
-3522130429,3522130429,PK
-3522130430,3522130430,CA
-3522130431,3522130710,US
-3522130711,3522130728,BR
-3522130729,3522130787,US
-3522130788,3522130810,BR
-3522130811,3522130831,US
-3522130832,3522130894,BR
-3522130895,3522131455,US
-3522131456,3522131487,CY
-3522131488,3522131519,DE
-3522131520,3522131528,BR
-3522131529,3522131531,TR
-3522131532,3522131532,US
-3522131533,3522131551,BR
-3522131552,3522131615,US
-3522131616,3522131647,BR
-3522131648,3522131711,US
-3522131712,3522131743,GB
-3522131744,3522131775,US
-3522131776,3522131807,TR
-3522131808,3522131844,US
-3522131845,3522131846,BR
-3522131847,3522131850,US
-3522131851,3522131851,BR
-3522131852,3522131855,US
-3522131856,3522131856,IN
-3522131857,3522131857,US
-3522131858,3522131858,IN
-3522131859,3522131860,PK
-3522131861,3522131886,US
-3522131887,3522131889,BR
-3522131890,3522131890,US
-3522131891,3522131891,UA
-3522131892,3522131892,VN
-3522131893,3522131893,BR
-3522131894,3522131897,US
-3522131898,3522131898,RU
-3522131899,3522131899,BD
-3522131900,3522131900,BR
-3522131901,3522131904,US
-3522131905,3522131905,BR
-3522131906,3522131906,CA
-3522131907,3522131907,DE
-3522131908,3522131909,US
-3522131910,3522131911,DE
-3522131912,3522131913,IN
-3522131914,3522131916,US
-3522131917,3522131917,RO
-3522131918,3522131919,GB
-3522131920,3522131922,US
-3522131923,3522131923,GB
-3522131924,3522131926,BR
-3522131927,3522131929,US
-3522131930,3522131931,UA
-3522131932,3522131932,US
-3522131933,3522131933,BR
-3522131934,3522131936,US
-3522131937,3522131937,BD
-3522131938,3522131940,BR
-3522131941,3522131942,US
-3522131943,3522131943,IN
-3522131944,3522131948,US
-3522131949,3522131949,IN
-3522131950,3522131950,SV
-3522131951,3522131953,US
-3522131954,3522131954,AR
-3522131955,3522131957,US
-3522131958,3522131959,DE
-3522131960,3522131960,US
-3522131961,3522131964,BR
-3522131965,3522132100,US
-3522132101,3522132101,BR
-3522132102,3522132107,US
-3522132108,3522132109,BR
-3522132110,3522132123,US
-3522132124,3522132124,GB
-3522132125,3522132129,US
-3522132130,3522132130,BD
-3522132131,3522132132,BR
-3522132133,3522132133,BD
-3522132134,3522132138,US
-3522132139,3522132142,BR
-3522132143,3522132144,GB
-3522132145,3522132145,US
-3522132146,3522132147,IN
-3522132148,3522132151,US
-3522132152,3522132152,BR
-3522132153,3522132155,US
-3522132156,3522132156,BD
-3522132157,3522132157,US
-3522132158,3522132158,BR
-3522132159,3522132159,US
-3522132160,3522132160,BR
-3522132161,3522132162,PK
-3522132163,3522132163,IN
-3522132164,3522132166,US
-3522132167,3522132167,IN
-3522132168,3522132175,BR
-3522132176,3522132176,IN
-3522132177,3522132180,PK
-3522132181,3522132181,IN
-3522132182,3522132182,PK
-3522132183,3522132184,BR
-3522132185,3522132185,VN
-3522132186,3522132188,NL
-3522132189,3522132189,US
-3522132190,3522132190,DE
-3522132191,3522132191,GB
-3522132192,3522132192,BR
-3522132193,3522132193,PK
-3522132194,3522132194,US
-3522132195,3522132195,IN
-3522132196,3522132197,AT
-3522132198,3522132198,MX
-3522132199,3522132202,US
-3522132203,3522132203,BR
-3522132204,3522132204,AR
-3522132205,3522132205,US
-3522132206,3522132206,BR
-3522132207,3522132210,US
-3522132211,3522132211,GB
-3522132212,3522132212,US
-3522132213,3522132213,BR
-3522132214,3522132219,US
-3522132220,3522132220,IN
-3522132221,3522132221,JP
-3522132222,3522132222,BD
-3522132223,3522132356,US
-3522132357,3522132358,BR
-3522132359,3522132359,AT
-3522132360,3522132365,US
-3522132366,3522132366,BR
-3522132367,3522132372,US
-3522132373,3522132373,BR
-3522132374,3522132380,US
-3522132381,3522132381,BR
-3522132382,3522132389,US
-3522132390,3522132390,BR
-3522132391,3522132395,US
-3522132396,3522132397,BD
-3522132398,3522132400,IN
-3522132401,3522132402,US
-3522132403,3522132404,CA
-3522132405,3522132407,US
-3522132408,3522132408,DE
-3522132409,3522132409,GB
-3522132410,3522132410,TR
-3522132411,3522132411,CL
-3522132412,3522132414,US
-3522132415,3522132415,CA
-3522132416,3522132417,GB
-3522132418,3522132418,BD
-3522132419,3522132419,IN
-3522132420,3522132422,US
-3522132423,3522132425,IN
-3522132426,3522132426,BR
-3522132427,3522132427,BD
-3522132428,3522132430,BR
-3522132431,3522132431,BY
-3522132432,3522132432,TR
-3522132433,3522132433,US
-3522132434,3522132437,BR
-3522132438,3522132443,US
-3522132444,3522132444,VN
-3522132445,3522132446,US
-3522132447,3522132453,BR
-3522132454,3522132459,US
-3522132460,3522132460,BD
-3522132461,3522132461,BR
-3522132462,3522132462,BD
-3522132463,3522132463,IN
-3522132464,3522132464,US
-3522132465,3522132466,IN
-3522132467,3522132468,ZA
-3522132469,3522132470,US
-3522132471,3522132472,IN
-3522132473,3522132473,BR
-3522132474,3522132475,US
-3522132476,3522132476,BD
-3522132477,3522132477,IN
-3522132478,3522132575,US
-3522132576,3522132607,BR
-3522132608,3522132639,CA
-3522132640,3522132671,US
-3522132672,3522132703,BR
-3522132704,3522132735,LK
-3522132736,3522132746,IN
-3522132747,3522132747,BR
-3522132748,3522132748,IN
-3522132749,3522132749,BR
-3522132750,3522132750,IN
-3522132751,3522132752,BR
-3522132753,3522132753,IN
-3522132754,3522132767,BR
-3522132768,3522132831,US
-3522132832,3522132863,BR
-3522132864,3522132895,US
-3522132896,3522132927,CA
-3522132928,3522132994,US
-3522132995,3522132996,GB
-3522132997,3522133002,US
-3522133003,3522133003,MX
-3522133004,3522133005,PK
-3522133006,3522133006,BR
-3522133007,3522133007,TR
-3522133008,3522133008,PK
-3522133009,3522133010,US
-3522133011,3522133011,SK
-3522133012,3522133013,US
-3522133014,3522133014,CZ
-3522133015,3522133016,IN
-3522133017,3522133017,UA
-3522133018,3522133018,DE
-3522133019,3522133023,US
-3522133024,3522133055,BR
-3522133056,3522133124,US
-3522133125,3522133125,BR
-3522133126,3522133134,US
-3522133135,3522133135,GT
-3522133136,3522133136,UA
-3522133137,3522133137,US
-3522133138,3522133138,BD
-3522133139,3522133139,US
-3522133140,3522133142,BR
-3522133143,3522133146,US
-3522133147,3522133147,AR
-3522133148,3522133148,US
-3522133149,3522133149,BG
-3522133150,3522133154,US
-3522133155,3522133155,BR
-3522133156,3522133158,VN
-3522133159,3522133159,US
-3522133160,3522133160,BR
-3522133161,3522133161,US
-3522133162,3522133162,PK
-3522133163,3522133163,BR
-3522133164,3522133164,US
-3522133165,3522133165,PE
-3522133166,3522133168,US
-3522133169,3522133169,DE
-3522133170,3522133171,US
-3522133172,3522133172,PE
-3522133173,3522133173,VN
-3522133174,3522133175,US
-3522133176,3522133176,AR
-3522133177,3522133178,US
-3522133179,3522133179,TR
-3522133180,3522133180,BR
-3522133181,3522133311,US
-3522133312,3522133375,CH
-3522133376,3522133535,US
-3522133536,3522133567,TR
-3522133568,3522133599,BR
-3522133600,3522133603,US
-3522133604,3522133620,BR
-3522133621,3522133621,US
-3522133622,3522133622,BR
-3522133623,3522133639,US
-3522133640,3522133647,DE
-3522133648,3522133663,US
-3522133664,3522133695,DE
-3522133696,3522133759,US
-3522133760,3522133791,TR
-3522133792,3522174975,US
+3522130255,3522174975,US
3522174976,3522179071,BM
3522179072,3522195455,US
3522195456,3522199551,CA
-3522199552,3522773503,US
-3522773504,3522773759,US
-3522773760,3522854911,US
+3522199552,3522854911,US
3522854912,3522871295,CA
-3522871296,3522902015,US
+3522871296,3522893823,US
+3522895872,3522902015,US
3522902016,3522903039,CA
3522903040,3522937855,US
3522937856,3522938367,GB
-3522938368,3523215359,US
+3522938368,3522940415,US
+3522940416,3522940671,HK
+3522940672,3523215359,US
3523215360,3523223551,AU
3523223552,3523231743,KR
3523231744,3523248127,AU
@@ -158960,29 +84617,14 @@
3523557376,3523559423,CN
3523559424,3523575807,PH
3523575808,3523583999,CN
-3523584000,3523592495,HK
-3523592496,3523592503,IQ
-3523592504,3523593535,HK
-3523593536,3523593599,IR
-3523593600,3523593855,HK
-3523593856,3523593919,IR
-3523593920,3523597823,HK
-3523597824,3523598079,US
-3523598080,3523601663,HK
+3523584000,3523601663,HK
3523601664,3523601919,SA
-3523601920,3523603199,HK
-3523603200,3523603455,US
-3523603456,3523603711,HK
-3523603712,3523603967,EU
-3523603968,3523674111,HK
+3523601920,3523674111,HK
3523674112,3523682303,FJ
3523682304,3523686399,NZ
3523686400,3523690495,AU
3523690496,3523698687,IN
-3523698688,3523699199,JP
-3523699200,3523699711,US
-3523699712,3523707391,JP
-3523707392,3523707903,GB
+3523698688,3523707903,JP
3523707904,3523708159,AU
3523708160,3523709183,JP
3523709184,3523709951,CN
@@ -159010,9 +84652,26 @@
3524722688,3524730879,SG
3524730880,3524739071,CN
3524739072,3524743167,ID
-3524743168,3524747263,MP
+3524743168,3524745727,MP
+3524745728,3524745983,GU
+3524745984,3524747263,MP
3524747264,3524755455,PH
-3524755456,3524763647,AU
+3524755456,3524756223,AU
+3524756224,3524756479,SG
+3524756480,3524756991,AU
+3524756992,3524757247,SG
+3524757248,3524758015,AU
+3524758016,3524758271,SG
+3524758272,3524758527,AU
+3524758528,3524758783,SG
+3524758784,3524759039,AU
+3524759040,3524759295,SG
+3524759296,3524759551,AU
+3524759552,3524760575,SG
+3524760576,3524761343,AU
+3524761344,3524761599,SG
+3524761600,3524761855,AU
+3524761856,3524763647,SG
3524763648,3524788223,PH
3524788224,3524853759,SG
3524853760,3526361087,CN
@@ -159029,7 +84688,9 @@
3526557696,3526651135,CN
3526651136,3526651391,KP
3526651392,3526754303,CN
-3526754304,3526885375,NZ
+3526754304,3526845183,NZ
+3526845184,3526845439,AU
+3526845440,3526885375,NZ
3526885376,3526893567,PK
3526893568,3526897663,NZ
3526897664,3526901759,HK
@@ -159055,13 +84716,11 @@
3528441856,3528445951,JP
3528445952,3528450047,ID
3528450048,3528458239,CN
-3528458240,3528474623,AP
+3528458240,3528474623,AF
3528474624,3528482815,TW
3528482816,3528491007,KR
3528491008,3528507391,AU
-3528507392,3528576767,JP
-3528576768,3528577023,AP
-3528577024,3528589311,JP
+3528507392,3528589311,JP
3528589312,3528720383,CN
3528720384,3528785919,AU
3528785920,3528851455,TW
@@ -159081,14 +84740,23 @@
3529089024,3529097215,KR
3529097216,3529113599,JP
3529113600,3531603967,KR
-3531603968,3532929279,JP
-3532929280,3532929535,AP
-3532929536,3534749695,JP
-3534749696,3534763775,HK
-3534763776,3534764031,AP
-3534764032,3534867711,HK
-3534867712,3534867967,AP
-3534867968,3534880767,HK
+3531603968,3533765631,JP
+3533765632,3533765887,CN
+3533765888,3534749695,JP
+3534749696,3534758043,HK
+3534758044,3534758143,AU
+3534758144,3534758147,JP
+3534758148,3534758911,HK
+3534758912,3534758927,PH
+3534758928,3534758975,HK
+3534758976,3534759039,PH
+3534759040,3534759167,HK
+3534759168,3534759183,JP
+3534759184,3534760703,HK
+3534760704,3534760711,NZ
+3534760712,3534761471,HK
+3534761472,3534761535,AU
+3534761536,3534880767,HK
3534880768,3535273983,KR
3535273984,3535339519,HK
3535339520,3535355903,NZ
@@ -159127,9 +84795,7 @@
3537174528,3537190911,TH
3537190912,3537240063,PH
3537240064,3537305599,IN
-3537305600,3537325567,AU
-3537325568,3537325823,AP
-3537325824,3537371135,AU
+3537305600,3537371135,AU
3537371136,3537895423,KR
3537895424,3538943999,JP
3538944000,3539271679,TW
@@ -159140,9 +84806,7 @@
3539402752,3539435519,JP
3539435520,3539464191,AU
3539464192,3539468287,ID
-3539468288,3539510271,JP
-3539510272,3539510527,AP
-3539510528,3541303295,JP
+3539468288,3541303295,JP
3541303296,3541565439,TW
3541565440,3541696511,MY
3541696512,3542089727,AU
@@ -159153,34 +84817,17 @@
3544711168,3545235455,TW
3545235456,3546808319,CN
3546808320,3547856895,KR
-3547856896,3547916287,JP
-3547916288,3547916543,US
-3547916544,3548905471,JP
+3547856896,3548905471,JP
3548905472,3551002623,CN
3551002624,3556769791,KR
-3556769792,3556774399,DE
-3556774400,3556786175,EU
+3556769792,3556773887,DE
3556786176,3556794367,RU
-3556794368,3556797839,ES
-3556797840,3556797847,PT
-3556797848,3556800079,ES
-3556800080,3556800087,FR
-3556800088,3556800399,ES
-3556800400,3556800407,FR
-3556800408,3556800799,ES
-3556800800,3556800807,FR
-3556800808,3556802479,ES
-3556802480,3556802487,PT
-3556802488,3556802559,ES
+3556794368,3556802559,ES
3556802560,3556810751,SD
3556810752,3556818943,PT
3556818944,3556827135,MD
-3556827136,3556837887,NL
-3556837888,3556838143,EU
-3556838144,3556843519,NL
-3556843520,3556847935,DE
-3556847936,3556847967,US
-3556847968,3556851711,DE
+3556827136,3556843519,NL
+3556843520,3556851711,DE
3556851712,3556868095,UA
3556868096,3556876287,GB
3556876288,3556884479,NL
@@ -159198,84 +84845,21 @@
3556958208,3556966399,KG
3556966400,3556974591,SE
3556974592,3556982783,ES
-3556982784,3556984123,DE
-3556984124,3556984127,IT
-3556984128,3556984415,DE
-3556984416,3556984419,ES
-3556984420,3556984623,DE
-3556984624,3556984639,FR
-3556984640,3556984647,DE
-3556984648,3556984651,FR
-3556984652,3556984655,DE
-3556984656,3556984743,FR
-3556984744,3556984747,DE
-3556984748,3556984751,FR
-3556984752,3556984759,DE
-3556984760,3556984767,FR
-3556984768,3556985119,DE
-3556985120,3556985135,ES
-3556985136,3556985143,DE
-3556985144,3556985151,ES
-3556985152,3556985155,DE
-3556985156,3556985159,ES
-3556985160,3556985207,DE
-3556985208,3556985215,ES
-3556985216,3556985663,DE
-3556985664,3556985671,HU
-3556985672,3556986143,DE
-3556986144,3556986155,DK
-3556986156,3556986399,DE
-3556986400,3556986415,AT
-3556986416,3556990975,DE
+3556982784,3556990975,DE
3556990976,3556999167,UA
3556999168,3557007359,RU
3557007360,3557015551,IT
3557015552,3557023743,DE
-3557023744,3557023879,BE
-3557023880,3557023887,GB
-3557023888,3557023999,BE
-3557024000,3557024255,GB
-3557024256,3557024767,BE
-3557024768,3557025791,GB
-3557025792,3557026047,BE
-3557026048,3557026303,GB
-3557026304,3557026815,BE
-3557026816,3557027071,GB
-3557027072,3557027839,BE
-3557027840,3557027863,GB
-3557027864,3557028031,BE
-3557028032,3557028063,GB
-3557028064,3557028095,BE
-3557028096,3557028351,GB
-3557028352,3557028735,BE
-3557028736,3557028799,GB
-3557028800,3557029887,BE
-3557029888,3557029951,GB
-3557029952,3557030079,BE
-3557030080,3557030143,GB
-3557030144,3557030719,BE
-3557030720,3557030751,GB
-3557030752,3557030767,BE
-3557030768,3557030783,GB
-3557030784,3557031807,BE
-3557031808,3557031935,GB
-3557031936,3557033575,IT
-3557033576,3557033583,GB
-3557033584,3557040127,IT
+3557023744,3557027327,GB
+3557027328,3557027583,NL
+3557027584,3557031935,GB
+3557031936,3557040127,IT
3557040128,3557048319,NO
3557048320,3557056511,CH
3557056512,3557064703,ES
-3557064704,3557072511,CZ
-3557072512,3557072543,US
-3557072544,3557072895,CZ
+3557064704,3557072895,CZ
3557072896,3557081087,DE
-3557081088,3557086015,NL
-3557086016,3557086047,DE
-3557086048,3557086079,GB
-3557086080,3557086719,NL
-3557086720,3557086783,CH
-3557086784,3557086847,IT
-3557086848,3557089279,NL
+3557081088,3557089279,NL
3557089280,3557105663,DE
3557105664,3557113855,BG
3557113856,3557130239,RU
@@ -159283,39 +84867,14 @@
3557138432,3557146623,RU
3557146624,3557154815,SK
3557154816,3557171199,RU
-3557171200,3557172479,A2
-3557172480,3557172991,IR
-3557172992,3557173503,IQ
-3557173504,3557173631,IR
-3557173632,3557173695,IQ
-3557173696,3557173703,AE
-3557173704,3557173759,A2
-3557173760,3557174015,IR
-3557174016,3557174527,A2
-3557174528,3557174783,IR
-3557174784,3557175039,AE
-3557175040,3557176063,IR
-3557176064,3557176575,A2
-3557176576,3557176619,NE
-3557176620,3557176831,A2
-3557176832,3557177023,IQ
-3557177024,3557177343,A2
-3557177344,3557177599,IT
-3557177600,3557179135,A2
-3557179136,3557179391,IT
-3557179392,3557213351,DE
-3557213352,3557213359,US
-3557213360,3557228543,DE
+3557171200,3557179391,IT
+3557179392,3557228543,DE
3557228544,3557236735,EE
3557236736,3557244927,ES
3557244928,3557253119,IT
3557253120,3557261311,RU
3557261312,3557277695,DE
-3557277696,3557278710,NL
-3557278711,3557278714,CH
-3557278715,3557280334,NL
-3557280335,3557280336,IN
-3557280337,3557283839,NL
+3557277696,3557283839,NL
3557283840,3557284863,PL
3557284864,3557285887,NL
3557285888,3557294079,RU
@@ -159323,133 +84882,24 @@
3557302272,3557310463,UA
3557310464,3557326847,ES
3557326848,3557335039,DE
-3557335040,3557335311,BE
-3557335312,3557335327,EU
-3557335328,3557335391,BE
-3557335392,3557335455,EU
-3557335456,3557335519,BE
-3557335520,3557335535,EU
-3557335536,3557335679,BE
-3557335680,3557336127,EU
-3557336128,3557336191,BE
-3557336192,3557336255,EU
-3557336256,3557336319,BE
-3557336320,3557336575,EU
-3557336576,3557336647,BE
-3557336648,3557336655,EU
-3557336656,3557336831,BE
-3557336832,3557338111,EU
-3557338112,3557338367,BE
-3557338368,3557338495,EU
-3557338496,3557338615,BE
-3557338616,3557338879,EU
-3557338880,3557340159,BE
-3557340160,3557340191,EU
-3557340192,3557340927,BE
-3557340928,3557341183,EU
-3557341184,3557341455,BE
-3557341456,3557341471,EU
-3557341472,3557341527,BE
-3557341528,3557341535,EU
-3557341536,3557341551,BE
-3557341552,3557341559,EU
-3557341560,3557341567,BE
-3557341568,3557341663,EU
-3557341664,3557341695,BE
-3557341696,3557341951,EU
-3557341952,3557342503,BE
-3557342504,3557342559,EU
-3557342560,3557342623,BE
-3557342624,3557342719,EU
-3557342720,3557343231,BE
+3557340288,3557340927,BE
3557343232,3557351423,DE
3557351424,3557359615,RU
-3557359616,3557359647,GB
-3557359648,3557359655,JE
-3557359656,3557359671,GB
-3557359672,3557359743,JE
-3557359744,3557359791,GB
-3557359792,3557359871,JE
-3557359872,3557360045,GB
-3557360046,3557360047,JE
-3557360048,3557360243,GB
-3557360244,3557360247,JE
-3557360248,3557360399,GB
-3557360400,3557360407,JE
-3557360408,3557360471,GB
-3557360472,3557360487,JE
-3557360488,3557360495,GB
-3557360496,3557360527,JE
-3557360528,3557360535,GB
-3557360536,3557360543,JE
-3557360544,3557360559,GB
-3557360560,3557360575,JE
-3557360576,3557360680,GB
-3557360681,3557360687,JE
-3557360688,3557360895,GB
-3557360896,3557361151,JE
-3557361152,3557361159,GB
-3557361160,3557361167,JE
-3557361168,3557361375,GB
-3557361376,3557361391,JE
-3557361392,3557361415,GB
-3557361416,3557361423,JE
-3557361424,3557361607,GB
-3557361608,3557361615,JE
-3557361616,3557361951,GB
-3557361952,3557361983,JE
-3557361984,3557362047,GB
-3557362048,3557362175,JE
-3557362176,3557362439,GB
-3557362440,3557363199,JE
-3557363200,3557363359,GB
-3557363360,3557363455,JE
-3557363456,3557363471,GB
-3557363472,3557363479,JE
-3557363480,3557363535,GB
-3557363536,3557363543,JE
-3557363544,3557363655,GB
-3557363656,3557363663,JE
-3557363664,3557363671,GB
-3557363672,3557363679,JE
-3557363680,3557364103,GB
-3557364104,3557364107,JE
-3557364108,3557364187,GB
-3557364188,3557364199,JE
-3557364200,3557364479,GB
-3557364480,3557364735,JE
-3557364736,3557364751,GB
-3557364752,3557364759,JE
-3557364760,3557364791,GB
-3557364792,3557364847,JE
-3557364848,3557364895,GB
-3557364896,3557364927,JE
-3557364928,3557364959,GB
-3557364960,3557364975,JE
-3557364976,3557364984,GB
-3557364985,3557365375,JE
-3557365376,3557365415,GB
-3557365416,3557365503,JE
-3557365504,3557365511,GB
-3557365512,3557365519,JE
-3557365520,3557365551,GB
-3557365552,3557365567,JE
-3557365568,3557365631,GB
-3557365632,3557365695,JE
-3557365696,3557365807,GB
-3557365808,3557365823,JE
-3557365824,3557365847,GB
-3557365848,3557365871,JE
-3557365872,3557365887,GB
-3557365888,3557365895,JE
-3557365896,3557365911,GB
-3557365912,3557365919,JE
-3557365920,3557365927,GB
-3557365928,3557366015,JE
-3557366016,3557366055,GB
-3557366056,3557366063,JE
-3557366064,3557366783,GB
-3557366784,3557367807,JE
+3557359616,3557359991,JE
+3557359992,3557359999,GB
+3557360000,3557360047,JE
+3557360048,3557360055,GB
+3557360056,3557360127,JE
+3557360128,3557360135,GB
+3557360136,3557360263,JE
+3557360264,3557360271,GB
+3557360272,3557360743,JE
+3557360744,3557360751,GB
+3557360752,3557360863,JE
+3557360864,3557360871,GB
+3557360872,3557365791,JE
+3557365792,3557365799,GB
+3557365800,3557367807,JE
3557367808,3557375999,DE
3557376000,3557384191,ES
3557384192,3557392383,GB
@@ -159458,9 +84908,7 @@
3557408768,3557416959,GB
3557416960,3557425151,UA
3557425152,3557490687,DK
-3557490688,3557497431,FR
-3557497432,3557497439,A2
-3557497440,3557507071,FR
+3557490688,3557507071,FR
3557507072,3557515263,GB
3557515264,3557523455,CZ
3557523456,3557531647,RU
@@ -159470,19 +84918,9 @@
3557556224,3557564415,RU
3557564416,3557572607,DE
3557572608,3557580799,RU
-3557580800,3557584287,DE
-3557584288,3557584319,GB
-3557584320,3557585151,DE
-3557585152,3557585279,CH
-3557585280,3557585695,DE
-3557585696,3557585711,CH
-3557585712,3557585887,DE
-3557585888,3557585903,CH
-3557585904,3557588991,DE
+3557580800,3557588991,DE
3557588992,3557597183,TR
-3557597184,3557597711,SA
-3557597712,3557597719,AS
-3557597720,3557605375,SA
+3557597184,3557605375,SA
3557605376,3557613567,LT
3557613568,3557621759,EG
3557621760,3557629951,RU
@@ -159511,22 +84949,13 @@
3557834752,3557842943,IR
3557842944,3557851135,FI
3557851136,3557859327,HU
-3557859328,3557859839,SE
-3557859840,3557860095,NO
-3557860096,3557860607,SE
-3557860608,3557860863,FI
-3557860864,3557861119,NO
-3557861120,3557861983,SE
+3557859328,3557860831,SE
+3557860832,3557860847,FI
+3557860848,3557861983,SE
3557861984,3557862015,FI
-3557862016,3557862399,SE
-3557862400,3557862911,FI
-3557862912,3557863295,SE
-3557863296,3557863359,FI
-3557863360,3557863391,SE
-3557863392,3557863399,FI
-3557863400,3557864287,SE
-3557864288,3557864303,DK
-3557864304,3557864311,SE
+3557862016,3557863295,SE
+3557863296,3557863327,FI
+3557863328,3557864311,SE
3557864312,3557864319,FI
3557864320,3557867519,SE
3557867520,3557875711,RU
@@ -159537,307 +84966,105 @@
3557916672,3557920055,NO
3557920056,3557920056,DK
3557920057,3557924863,NO
-3557924864,3557925887,FI
-3557925888,3557926911,AX
-3557926912,3557933055,FI
+3557924864,3557925887,AX
+3557925888,3557929983,FI
+3557929984,3557933055,AX
3557933056,3557941247,IT
-3557941248,3557945183,DE
-3557945184,3557945199,GB
-3557945200,3557957631,DE
+3557941248,3557957631,DE
3557957632,3557965823,SI
-3557965824,3557969407,DE
-3557969408,3557969663,EU
-3557969664,3557974015,DE
+3557965824,3557974015,DE
3557974016,3557982207,CH
3557982208,3557990399,NO
3557990400,3557998591,PT
3557998592,3558006783,DE
-3558006784,3558014975,GB
+3558006784,3558010879,GB
+3558010880,3558012927,FR
+3558012928,3558014975,GB
3558014976,3558023167,RU
-3558023168,3558023199,GB
-3558023200,3558023343,DE
-3558023344,3558023359,GB
-3558023360,3558024383,DE
-3558024384,3558024415,GB
-3558024416,3558028063,DE
-3558028064,3558028071,CH
-3558028072,3558030655,DE
-3558030656,3558030659,CH
-3558030660,3558031359,DE
+3558023168,3558031359,DE
3558031360,3558039551,GB
3558039552,3558047743,IT
3558047744,3558055935,KZ
3558055936,3558064127,FR
-3558064128,3558067839,NL
-3558067840,3558067855,US
-3558067856,3558080511,NL
+3558064128,3558080511,NL
3558080512,3558096895,RU
3558096896,3558113279,CZ
-3558113280,3558122767,DE
-3558122768,3558122783,CH
-3558122784,3558129663,DE
+3558113280,3558129663,DE
3558129664,3558137855,NO
3558137856,3558146047,GB
3558146048,3558154239,RU
-3558154240,3558154367,NG
-3558154368,3558154495,SD
-3558154496,3558154623,MZ
-3558154624,3558154751,CI
-3558154752,3558154879,CM
-3558154880,3558155007,SD
-3558155008,3558155263,US
-3558155264,3558155391,ET
-3558155392,3558155399,A2
-3558155400,3558155407,KE
-3558155408,3558155423,A2
-3558155424,3558155431,MM
-3558155432,3558155487,A2
-3558155488,3558155503,SO
-3558155504,3558155511,A2
-3558155512,3558155515,DE
-3558155516,3558155519,A2
-3558155520,3558156031,SD
-3558156032,3558156287,KG
-3558156288,3558156351,US
-3558156352,3558156359,GB
-3558156360,3558156543,US
-3558156544,3558156671,KN
-3558156672,3558156927,SM
-3558156928,3558157183,AF
-3558157184,3558157311,SM
-3558157312,3558157319,A2
-3558157320,3558157327,DE
-3558157328,3558157335,SL
-3558157336,3558157375,A2
-3558157376,3558157391,UG
+3558154240,3558157391,GB
3558157392,3558157407,AF
-3558157408,3558157439,SS
-3558157440,3558157567,SZ
-3558157568,3558157583,A2
-3558157584,3558157599,GB
-3558157600,3558157727,SS
-3558157728,3558157759,SO
-3558157760,3558157791,A2
-3558157792,3558158079,SL
-3558158080,3558158207,US
-3558158208,3558158239,SC
-3558158240,3558158335,US
-3558158336,3558158847,SE
-3558158848,3558159359,DE
-3558159360,3558159615,US
-3558159616,3558159747,A2
-3558159748,3558159748,US
-3558159749,3558159807,A2
-3558159808,3558159839,DE
-3558159840,3558159871,A2
-3558159872,3558160127,SL
-3558160128,3558160383,GB
-3558160384,3558161151,A2
-3558161152,3558161407,AF
-3558161408,3558162143,A2
-3558162144,3558162175,SO
-3558162176,3558162431,BI
+3558157408,3558161663,GB
+3558161664,3558161919,TD
+3558161920,3558162431,GB
3558162432,3558170623,DE
3558170624,3558178815,GB
3558178816,3558187007,BG
3558187008,3558195199,DE
-3558195200,3558195455,BE
-3558195456,3558195711,ES
-3558195712,3558196031,GB
-3558196032,3558196035,IT
-3558196036,3558196063,GB
-3558196064,3558196095,IT
-3558196096,3558196119,GB
-3558196120,3558196127,IT
-3558196128,3558196159,GB
-3558196160,3558196167,IT
-3558196168,3558196175,GB
-3558196176,3558196191,IT
-3558196192,3558196199,GB
-3558196200,3558196239,IT
-3558196240,3558196255,GB
-3558196256,3558196271,IT
-3558196272,3558196351,GB
-3558196352,3558196359,IT
-3558196360,3558196367,GB
-3558196368,3558196415,IT
-3558196416,3558196543,GB
-3558196544,3558196595,IT
-3558196596,3558196735,GB
-3558196736,3558199039,US
+3558195200,3558197247,GB
+3558197248,3558199039,US
3558199040,3558199295,ES
-3558199296,3558203391,US
+3558199296,3558203391,GB
3558203392,3558211583,ES
3558211584,3558219775,GB
3558219776,3558227967,ES
-3558227968,3558236159,RU
+3558227968,3558234623,RU
+3558234624,3558234879,UA
+3558234880,3558236159,RU
3558236160,3558244351,GB
3558244352,3558252543,IT
3558252544,3558260735,KE
3558260736,3558268927,UA
3558268928,3558277119,GI
-3558277120,3558285567,GB
-3558285568,3558285823,DE
-3558285824,3558285951,GB
+3558277120,3558285951,GB
3558285952,3558286079,DE
-3558286080,3558286591,GB
-3558286592,3558286847,FR
-3558286848,3558287679,GB
-3558287680,3558287743,BE
-3558287744,3558287871,NL
-3558287872,3558287935,FR
-3558287936,3558287999,IT
-3558288000,3558288063,DE
-3558288064,3558288127,ES
-3558288128,3558288191,AT
-3558288192,3558288255,SE
-3558288256,3558288319,US
-3558288320,3558288383,CH
-3558288384,3558288423,US
-3558288424,3558288447,GB
-3558288448,3558288483,US
-3558288484,3558288487,GB
-3558288488,3558288639,US
-3558288640,3558288895,EU
-3558288896,3558289151,FR
-3558289152,3558289407,GB
-3558289408,3558289663,NL
-3558289664,3558289727,GB
-3558289728,3558289747,IT
-3558289748,3558289751,GB
-3558289752,3558289775,IT
-3558289776,3558289783,GB
-3558289784,3558289919,IT
-3558289920,3558290175,CZ
-3558290176,3558290431,GB
-3558290432,3558290559,BE
-3558290560,3558290591,GB
-3558290592,3558290599,BE
-3558290600,3558290615,GB
-3558290616,3558290663,BE
-3558290664,3558290679,GB
-3558290680,3558290687,BE
-3558290688,3558290871,ES
-3558290872,3558290879,GB
-3558290880,3558290943,ES
-3558290944,3558290959,DE
-3558290960,3558290967,NL
-3558290968,3558290975,GB
-3558290976,3558290991,NL
-3558290992,3558291023,DE
-3558291024,3558291031,SE
-3558291032,3558291135,DE
-3558291136,3558291199,GB
-3558291200,3558291207,CH
-3558291208,3558291215,GB
-3558291216,3558291231,AT
-3558291232,3558291239,CH
-3558291240,3558291263,GB
-3558291264,3558291279,AT
-3558291280,3558291295,GB
-3558291296,3558291455,CH
-3558291456,3558291459,DE
-3558291460,3558291463,GB
-3558291464,3558291471,DE
-3558291472,3558292223,GB
-3558292224,3558292479,SE
-3558292480,3558292735,EU
-3558292736,3558292863,GB
-3558292864,3558292871,CH
-3558292872,3558292879,GB
-3558292880,3558292911,NL
-3558292912,3558292919,GB
-3558292920,3558293119,NL
-3558293120,3558293143,CH
-3558293144,3558293151,GB
-3558293152,3558293247,NL
-3558293248,3558293503,GB
+3558286080,3558289119,GB
+3558289120,3558289151,FR
+3558289152,3558289431,GB
+3558289432,3558289439,NL
+3558289440,3558289975,GB
+3558289976,3558289983,CZ
+3558289984,3558291071,GB
+3558291072,3558291135,DE
+3558291136,3558291295,GB
+3558291296,3558291311,CH
+3558291312,3558293055,GB
+3558293056,3558293087,NL
+3558293088,3558293503,GB
3558293504,3558301695,RU
3558301696,3558318079,DE
3558318080,3558334463,FR
-3558334464,3558337447,CH
-3558337448,3558337455,ES
-3558337456,3558337515,CH
-3558337516,3558337519,ES
-3558337520,3558337783,CH
-3558337784,3558337787,DE
-3558337788,3558337789,CH
-3558337790,3558337790,GB
-3558337791,3558339699,CH
-3558339700,3558339703,DE
-3558339704,3558340655,CH
-3558340656,3558340663,CG
-3558340664,3558342655,CH
+3558334464,3558339959,CH
+3558339960,3558339967,DE
+3558339968,3558342655,CH
3558342656,3558350847,IT
3558350848,3558359039,RU
3558359040,3558367231,GB
-3558367232,3558367271,AT
-3558367272,3558367279,GI
-3558367280,3558368015,AT
-3558368016,3558368031,AR
-3558368032,3558368063,CL
-3558368064,3558368079,ES
-3558368080,3558368095,DE
-3558368096,3558368111,US
-3558368112,3558368127,GB
-3558368128,3558368159,AT
-3558368160,3558368191,DE
-3558368192,3558368207,US
-3558368208,3558368223,GB
-3558368224,3558368239,ES
-3558368240,3558368255,AR
-3558368256,3558368271,AT
-3558368272,3558368287,GB
-3558368288,3558368319,CL
-3558368320,3558368383,AR
-3558368384,3558368447,AT
-3558368448,3558368479,DE
-3558368480,3558368495,ES
-3558368496,3558368511,US
-3558368512,3558369487,AT
-3558369488,3558369503,CH
-3558369504,3558369519,FR
-3558369520,3558372351,AT
-3558372352,3558372607,BG
-3558372608,3558372735,AT
-3558372736,3558372863,ES
-3558372864,3558375423,AT
-3558375424,3558379999,CZ
-3558380000,3558380015,CY
-3558380016,3558382743,CZ
-3558382744,3558382747,CY
-3558382748,3558383615,CZ
+3558367232,3558375423,AT
+3558375424,3558383615,CZ
3558383616,3558391807,HU
3558391808,3558399999,LU
3558400000,3558408191,SA
-3558408192,3558412095,CH
-3558412096,3558412103,GB
-3558412104,3558416383,CH
+3558408192,3558416383,CH
3558416384,3558424575,BG
3558424576,3558440959,IL
3558440960,3558449151,SE
3558449152,3558457343,IT
-3558457344,3558457407,BE
-3558457408,3558457599,GB
-3558457600,3558457727,FR
-3558457728,3558465535,NL
-3558465536,3558468607,GB
-3558468608,3558469119,US
-3558469120,3558473727,GB
+3558457344,3558465535,NL
+3558465536,3558473727,GB
3558473728,3558506495,SA
3558506496,3558514687,UA
3558514688,3558522879,SK
3558522880,3558531071,NL
3558531072,3558539263,RU
-3558539264,3558547455,DK
+3558539264,3558542591,DK
+3558542592,3558542847,SE
+3558542848,3558547455,DK
3558547456,3558555647,FR
3558555648,3558572031,AT
3558572032,3558580223,DE
-3558580224,3558581423,CH
-3558581424,3558581439,DE
-3558581440,3558582527,CH
-3558582528,3558582591,BE
-3558582592,3558588415,CH
+3558580224,3558588415,CH
3558588416,3558596607,CZ
3558596608,3558604799,EE
3558604800,3558612991,GB
@@ -159851,104 +85078,17 @@
3558670336,3558686719,DE
3558686720,3558703103,TR
3558703104,3558711295,IT
-3558711296,3558717695,NL
-3558717696,3558717951,EU
-3558717952,3558718207,NL
-3558718208,3558718463,EU
-3558718464,3558719487,NL
+3558711296,3558719487,NL
3558719488,3558735871,IL
-3558735872,3558736127,GB
-3558736128,3558736639,GG
-3558736640,3558737055,GB
-3558737056,3558737151,GG
-3558737152,3558737279,GB
-3558737280,3558737919,GG
-3558737920,3558738751,GB
-3558738752,3558738943,GG
-3558738944,3558738991,GB
-3558738992,3558739007,GG
-3558739008,3558739039,GB
-3558739040,3558739055,GG
-3558739056,3558739199,GB
-3558739200,3558739231,GG
-3558739232,3558739295,GB
-3558739296,3558739711,GG
-3558739712,3558739975,GB
-3558739976,3558739983,GG
-3558739984,3558740015,GB
-3558740016,3558740023,GG
-3558740024,3558740031,GB
-3558740032,3558740039,GG
-3558740040,3558740063,GB
-3558740064,3558740079,GG
-3558740080,3558740087,GB
-3558740088,3558740095,GG
-3558740096,3558740183,GB
-3558740184,3558740199,GG
-3558740200,3558740207,GB
-3558740208,3558740215,GG
-3558740216,3558740222,GB
-3558740223,3558740223,GG
-3558740224,3558740255,GB
-3558740256,3558740271,GG
-3558740272,3558740287,GB
-3558740288,3558740295,GG
-3558740296,3558740343,GB
-3558740344,3558740351,GG
-3558740352,3558740359,GB
-3558740360,3558740367,GG
-3558740368,3558740383,GB
-3558740384,3558741255,GG
-3558741256,3558741271,GB
-3558741272,3558741279,GG
-3558741280,3558741287,GB
-3558741288,3558741295,GG
-3558741296,3558741311,GB
-3558741312,3558741335,GG
-3558741336,3558741359,GB
-3558741360,3558741367,GG
-3558741368,3558741391,GB
-3558741392,3558741399,GG
-3558741400,3558741423,GB
-3558741424,3558741431,GG
-3558741432,3558741439,GB
-3558741440,3558741447,GG
-3558741448,3558741471,GB
-3558741472,3558741487,GG
-3558741488,3558741503,GB
+3558735872,3558741503,GB
3558741504,3558742015,GG
-3558742016,3558742039,GB
-3558742040,3558742047,GG
-3558742048,3558742055,GB
-3558742056,3558742071,GG
-3558742072,3558742079,GB
-3558742080,3558742087,GG
-3558742088,3558742103,GB
-3558742104,3558742135,GG
-3558742136,3558742159,GB
-3558742160,3558742191,GG
-3558742192,3558742215,GB
-3558742216,3558742223,GG
-3558742224,3558742239,GB
-3558742240,3558742247,GG
-3558742248,3558742255,GB
-3558742256,3558742527,GG
-3558742528,3558742543,GB
-3558742544,3558742551,GG
-3558742552,3558742567,GB
-3558742568,3558742583,GG
-3558742584,3558742623,GB
-3558742624,3558742631,GG
-3558742632,3558742655,GB
-3558742656,3558742663,GG
-3558742664,3558742679,GB
-3558742680,3558742695,GG
-3558742696,3558742727,GB
-3558742728,3558742735,GG
-3558742736,3558742743,GB
-3558742744,3558742751,GG
-3558742752,3558742775,GB
-3558742776,3558744063,GG
+3558742016,3558742527,GB
+3558742528,3558742783,GG
+3558742784,3558743039,GB
+3558743040,3558743295,GG
+3558743296,3558743551,GB
+3558743552,3558743807,GG
+3558743808,3558744063,GB
3558744064,3558752255,LB
3558752256,3558760447,SI
3558760448,3558768639,FR
@@ -159956,75 +85096,17 @@
3558785024,3558801407,IS
3558801408,3558809599,TR
3558809600,3558817791,ES
-3558817792,3558823327,AT
-3558823328,3558823359,DE
-3558823360,3558825983,AT
-3558825984,3558828287,CY
-3558828288,3558828303,A2
-3558828304,3558832383,CY
-3558832384,3558832639,LB
-3558832640,3558834175,CY
+3558817792,3558825983,AT
+3558825984,3558834175,CY
3558834176,3558842367,FR
3558842368,3558850559,SE
-3558850560,3558850815,ES
-3558850816,3558851327,US
-3558851328,3558851391,ES
-3558851392,3558851423,GB
-3558851424,3558851471,ES
-3558851472,3558851479,NO
-3558851480,3558851535,ES
-3558851536,3558851543,GB
-3558851544,3558851583,ES
-3558851584,3558851599,GB
-3558851600,3558851623,ES
-3558851624,3558851627,GB
-3558851628,3558851647,ES
-3558851648,3558851711,GB
-3558851712,3558851719,ES
-3558851720,3558851727,GB
-3558851728,3558851735,ES
-3558851736,3558851743,GB
-3558851744,3558851791,ES
-3558851792,3558851807,GB
-3558851808,3558852095,ES
-3558852096,3558853119,GB
-3558853120,3558853375,BE
-3558853376,3558853399,GB
-3558853400,3558853407,DE
-3558853408,3558853439,GB
-3558853440,3558853455,DE
-3558853456,3558853463,GB
-3558853464,3558853467,DE
-3558853468,3558853503,GB
-3558853504,3558853511,DE
-3558853512,3558853535,GB
-3558853536,3558853547,DE
-3558853548,3558853887,GB
-3558853888,3558854295,ES
-3558854296,3558854303,GB
-3558854304,3558854655,ES
-3558854656,3558854911,US
-3558854912,3558854919,GB
-3558854920,3558854943,ES
-3558854944,3558854975,GB
-3558854976,3558855039,US
-3558855040,3558855167,GB
-3558855168,3558855183,US
-3558855184,3558855199,ES
-3558855200,3558855295,GB
-3558855296,3558855423,ES
-3558855424,3558855431,NL
-3558855432,3558855439,GB
-3558855440,3558855935,ES
-3558855936,3558856191,US
-3558856192,3558856639,GB
-3558856640,3558856703,NL
+3558850560,3558851327,GB
+3558851328,3558851335,ES
+3558851336,3558854367,GB
+3558854368,3558854399,ES
+3558854400,3558856703,GB
3558856704,3558858751,US
-3558858752,3558864167,IT
-3558864168,3558864175,GB
-3558864176,3558864695,IT
-3558864696,3558864703,GB
-3558864704,3558866943,IT
+3558858752,3558866943,IT
3558866944,3558899711,GB
3558899712,3558916095,SE
3558916096,3558924287,RU
@@ -160039,331 +85121,35 @@
3558989824,3558998015,RU
3558998016,3559006207,JO
3559006208,3559014399,RU
-3559014400,3559016191,DE
-3559016192,3559016207,GB
-3559016208,3559016215,JP
-3559016216,3559022591,DE
+3559014400,3559022591,DE
3559022592,3559030783,RU
-3559030784,3559038720,ES
-3559038721,3559038975,US
-3559038976,3559042855,DE
-3559042856,3559042863,CH
-3559042864,3559047167,DE
+3559030784,3559038975,ES
+3559038976,3559047167,DE
3559047168,3559055359,IT
3559055360,3559063551,AM
3559063552,3559079935,CH
3559079936,3559088127,JO
-3559088128,3559088263,BE
-3559088264,3559088267,GB
-3559088268,3559088307,BE
-3559088308,3559088311,GB
-3559088312,3559088367,BE
-3559088368,3559088371,GB
-3559088372,3559088375,BE
-3559088376,3559088379,GB
-3559088380,3559088919,BE
-3559088920,3559088927,GB
-3559088928,3559089047,BE
-3559089048,3559089055,DE
-3559089056,3559089063,BE
-3559089064,3559089071,GB
-3559089072,3559089079,BE
-3559089080,3559089087,GB
-3559089088,3559089407,BE
-3559089408,3559089411,GB
-3559089412,3559089415,BE
-3559089416,3559089423,GB
-3559089424,3559089439,BE
-3559089440,3559089443,GB
-3559089444,3559089447,BE
-3559089448,3559089451,GB
-3559089452,3559089463,BE
-3559089464,3559089467,GB
-3559089468,3559089479,BE
-3559089480,3559089487,GB
-3559089488,3559089495,BE
-3559089496,3559089503,GB
-3559089504,3559089535,BE
-3559089536,3559089543,GB
-3559089544,3559089547,BE
-3559089548,3559089551,GB
-3559089552,3559089559,BE
-3559089560,3559089567,GB
-3559089568,3559089591,BE
-3559089592,3559089599,GB
-3559089600,3559089607,BE
-3559089608,3559089611,GB
-3559089612,3559089623,BE
-3559089624,3559089627,GB
-3559089628,3559089639,BE
-3559089640,3559089643,GB
-3559089644,3559089655,BE
-3559089656,3559089659,GB
-3559089660,3559090071,BE
-3559090072,3559090079,NL
-3559090080,3559090103,BE
-3559090104,3559090111,GB
-3559090112,3559090407,BE
-3559090408,3559090415,GB
-3559090416,3559090759,BE
-3559090760,3559090767,GB
-3559090768,3559090775,BE
-3559090776,3559090779,GB
-3559090780,3559090791,BE
-3559090792,3559090799,GB
-3559090800,3559090803,BE
-3559090804,3559090807,GB
-3559090808,3559090823,BE
-3559090824,3559090831,GB
-3559090832,3559090863,BE
-3559090864,3559090879,GB
-3559090880,3559090887,BE
-3559090888,3559090899,GB
-3559090900,3559090903,BE
-3559090904,3559090907,GB
-3559090908,3559090923,BE
-3559090924,3559090927,GB
-3559090928,3559090943,BE
-3559090944,3559091007,GB
-3559091008,3559091011,BE
-3559091012,3559091023,GB
-3559091024,3559091047,BE
-3559091048,3559091055,GB
-3559091056,3559091087,BE
-3559091088,3559091091,GB
-3559091092,3559091095,BE
-3559091096,3559091103,GB
-3559091104,3559091175,BE
-3559091176,3559091183,GB
-3559091184,3559091203,BE
-3559091204,3559091207,GB
-3559091208,3559091211,BE
-3559091212,3559091215,GB
-3559091216,3559091223,BE
-3559091224,3559091231,GB
-3559091232,3559091263,BE
-3559091264,3559091327,GB
-3559091328,3559091423,BE
-3559091424,3559091427,GB
-3559091428,3559091439,BE
-3559091440,3559091447,ES
-3559091448,3559091455,BE
-3559091456,3559091487,DE
-3559091488,3559091495,BE
-3559091496,3559091503,GB
-3559091504,3559091507,BE
-3559091508,3559091511,GB
-3559091512,3559091527,BE
-3559091528,3559091543,GB
-3559091544,3559091571,BE
-3559091572,3559091575,GB
-3559091576,3559091591,BE
-3559091592,3559091615,GB
-3559091616,3559091631,BE
-3559091632,3559091639,LU
-3559091640,3559091815,BE
-3559091816,3559091823,GB
-3559091824,3559092159,BE
-3559092160,3559092223,GB
-3559092224,3559092239,BE
-3559092240,3559092247,GB
-3559092248,3559092263,BE
-3559092264,3559092271,GB
-3559092272,3559092279,BE
-3559092280,3559092287,GB
-3559092288,3559092319,BE
-3559092320,3559092327,GB
-3559092328,3559092351,BE
-3559092352,3559092383,GB
-3559092384,3559092391,BE
-3559092392,3559092399,GB
-3559092400,3559092407,BE
-3559092408,3559092423,GB
-3559092424,3559092455,BE
-3559092456,3559092463,GB
-3559092464,3559092471,BE
-3559092472,3559092479,GB
-3559092480,3559092735,BE
-3559092736,3559092739,GB
-3559092740,3559092767,BE
-3559092768,3559092783,GB
-3559092784,3559092799,BE
-3559092800,3559092803,GB
-3559092804,3559092807,BE
-3559092808,3559092815,GB
-3559092816,3559092839,BE
-3559092840,3559092863,GB
-3559092864,3559092871,BE
-3559092872,3559092895,GB
-3559092896,3559092939,BE
-3559092940,3559092943,GB
-3559092944,3559092959,BE
-3559092960,3559092991,GB
-3559092992,3559092995,BE
-3559092996,3559092999,GB
-3559093000,3559093007,BE
-3559093008,3559093015,GB
-3559093016,3559093023,FR
-3559093024,3559093031,BE
-3559093032,3559093039,GB
-3559093040,3559093047,BE
-3559093048,3559093055,GB
-3559093056,3559093063,BE
-3559093064,3559093071,FR
-3559093072,3559093075,BE
-3559093076,3559093079,GB
-3559093080,3559093083,BE
-3559093084,3559093087,GB
-3559093088,3559093103,BE
-3559093104,3559093119,FR
-3559093120,3559093135,BE
-3559093136,3559093159,FR
-3559093160,3559093163,GB
-3559093164,3559093167,BE
-3559093168,3559093171,GB
-3559093172,3559093175,BE
-3559093176,3559093183,GB
-3559093184,3559093195,BE
-3559093196,3559093203,GB
-3559093204,3559093215,BE
-3559093216,3559093219,GB
-3559093220,3559093223,BE
-3559093224,3559093243,GB
-3559093244,3559094019,BE
-3559094020,3559094023,GB
-3559094024,3559094031,BE
-3559094032,3559094039,FR
-3559094040,3559094047,BE
-3559094048,3559094055,FR
-3559094056,3559094063,GB
-3559094064,3559094083,BE
-3559094084,3559094087,GB
-3559094088,3559094095,FR
-3559094096,3559094099,GB
-3559094100,3559094103,BE
-3559094104,3559094111,GB
-3559094112,3559094143,BE
-3559094144,3559094147,GB
-3559094148,3559094151,BE
-3559094152,3559094159,GB
-3559094160,3559094175,BE
-3559094176,3559094179,GB
-3559094180,3559094183,BE
-3559094184,3559094191,GB
-3559094192,3559094211,BE
-3559094212,3559094215,GB
-3559094216,3559094219,BE
-3559094220,3559094223,GB
-3559094224,3559094231,BE
-3559094232,3559094235,GB
-3559094236,3559094239,BE
-3559094240,3559094243,GB
-3559094244,3559094247,BE
-3559094248,3559094251,GB
-3559094252,3559094271,BE
-3559094272,3559094287,GB
-3559094288,3559094319,BE
-3559094320,3559094335,GB
-3559094336,3559094407,BE
-3559094408,3559094415,GB
-3559094416,3559094423,BE
-3559094424,3559094447,GB
-3559094448,3559094455,ES
-3559094456,3559094495,BE
-3559094496,3559094511,GB
-3559094512,3559094527,BE
-3559094528,3559095039,GB
-3559095040,3559095055,BE
-3559095056,3559095063,GB
-3559095064,3559095071,BE
-3559095072,3559095103,GB
-3559095104,3559095167,BE
-3559095168,3559095231,GB
-3559095232,3559095263,BE
-3559095264,3559095303,GB
-3559095304,3559095359,BE
-3559095360,3559095423,GB
-3559095424,3559095439,BE
-3559095440,3559095455,GB
-3559095456,3559095487,BE
-3559095488,3559095551,GB
-3559095552,3559095591,BE
-3559095592,3559095623,GB
-3559095624,3559095631,BE
-3559095632,3559095647,GB
-3559095648,3559095767,BE
-3559095768,3559095807,GB
-3559095808,3559095871,BE
-3559095872,3559095887,GB
-3559095888,3559095919,BE
-3559095920,3559095927,GB
-3559095928,3559095935,BE
-3559095936,3559095999,GB
-3559096000,3559096031,BE
-3559096032,3559096063,GB
-3559096064,3559096123,BE
-3559096124,3559096127,GB
-3559096128,3559096191,BE
-3559096192,3559096199,GB
-3559096200,3559096207,DE
-3559096208,3559096215,BE
-3559096216,3559096223,NL
-3559096224,3559096247,BE
-3559096248,3559096255,GB
-3559096256,3559096319,BE
-3559096320,3559103231,RO
-3559103232,3559103487,GB
-3559103488,3559104511,RO
+3559088128,3559090239,GB
+3559090240,3559090303,BE
+3559090304,3559093311,GB
+3559093312,3559093319,BE
+3559093320,3559093503,GB
+3559093504,3559093759,BE
+3559093760,3559095455,GB
+3559095456,3559095456,BE
+3559095457,3559096063,GB
+3559096064,3559096319,BE
+3559096320,3559104511,RO
3559104512,3559112703,RU
3559112704,3559120895,IT
3559120896,3559129087,GB
3559129088,3559137279,BG
3559137280,3559145471,GB
3559145472,3559153663,ES
-3559153664,3559161855,GB
-3559161856,3559161887,FR
-3559161888,3559162047,GB
-3559162048,3559162079,BE
-3559162080,3559163903,GB
-3559163904,3559163935,FR
-3559163936,3559163999,GB
-3559164000,3559164031,NL
-3559164032,3559164151,GB
-3559164152,3559164159,IT
-3559164160,3559166335,GB
-3559166336,3559166351,CH
-3559166352,3559169023,GB
-3559169024,3559169055,CH
-3559169056,3559174703,GB
-3559174704,3559174711,IT
-3559174712,3559174743,GB
-3559174744,3559174751,DE
-3559174752,3559174767,GB
-3559174768,3559174775,DE
-3559174776,3559174783,GB
-3559174784,3559174791,DK
-3559174792,3559174799,GB
-3559174800,3559174807,NO
-3559174808,3559174943,GB
-3559174944,3559174951,IT
-3559174952,3559174975,GB
-3559174976,3559174983,DE
-3559174984,3559175079,GB
-3559175080,3559175095,FR
-3559175096,3559175127,GB
-3559175128,3559175135,DE
-3559175136,3559175143,FR
-3559175144,3559175151,GB
-3559175152,3559175167,FR
-3559175168,3559177215,GB
-3559177216,3559177471,DE
-3559177472,3559177727,GB
-3559177728,3559178239,DE
+3559153664,3559178239,GB
3559178240,3559186431,LB
3559186432,3559194623,RU
-3559194624,3559198463,SE
-3559198464,3559198719,FI
-3559198720,3559202815,SE
+3559194624,3559202815,SE
3559202816,3559211007,DE
3559211008,3559219199,SK
3559219200,3559227391,SE
@@ -160374,26 +85160,15 @@
3559260160,3559268351,DE
3559268352,3559276543,IT
3559276544,3559284735,GB
-3559284736,3559284895,RU
-3559284896,3559284911,UA
-3559284912,3559288175,RU
-3559288176,3559288191,UA
-3559288192,3559288207,AZ
-3559288208,3559288831,RU
-3559288832,3559289855,AZ
-3559289856,3559291391,RU
-3559291392,3559291647,AZ
-3559291648,3559292927,RU
+3559284736,3559292927,RU
3559292928,3559301119,JO
3559301120,3559305215,GB
-3559305216,3559305727,US
-3559305728,3559309311,GB
+3559305216,3559305471,US
+3559305472,3559309311,GB
3559309312,3559317503,PL
3559317504,3559325695,FI
3559325696,3559333887,IT
-3559333888,3559336447,SE
-3559336448,3559336703,US
-3559336704,3559342079,SE
+3559333888,3559342079,SE
3559342080,3559350271,BG
3559350272,3559358463,BA
3559358464,3559366655,FR
@@ -160411,26 +85186,7 @@
3559448576,3559456767,ES
3559456768,3559473151,RU
3559473152,3559489535,CH
-3559489536,3559490591,NL
-3559490592,3559490623,DE
-3559490624,3559490655,NL
-3559490656,3559490719,GB
-3559490720,3559490751,NL
-3559490752,3559490783,GB
-3559490784,3559490791,NL
-3559490792,3559490799,BE
-3559490800,3559491447,NL
-3559491448,3559491519,GB
-3559491520,3559491871,NL
-3559491872,3559491903,GB
-3559491904,3559491935,BE
-3559491936,3559491999,GB
-3559492000,3559492013,NL
-3559492014,3559492015,GB
-3559492016,3559492023,NL
-3559492024,3559492031,GB
-3559492032,3559497727,NL
-3559497728,3559505919,GB
+3559489536,3559505919,GB
3559505920,3559514111,CH
3559514112,3559522303,AT
3559522304,3559530495,GB
@@ -160440,24 +85196,10 @@
3559555072,3559563263,CH
3559563264,3559571455,GB
3559571456,3559579647,AM
-3559579648,3559586271,DE
-3559586272,3559586303,US
-3559586304,3559587839,DE
+3559579648,3559587839,DE
3559587840,3559596031,KW
3559596032,3559604223,BG
-3559604224,3559607983,DE
-3559607984,3559607999,LU
-3559608000,3559608079,DE
-3559608080,3559608095,LU
-3559608096,3559608135,DE
-3559608136,3559608143,LU
-3559608144,3559611135,DE
-3559611136,3559611391,GB
-3559611392,3559611583,DE
-3559611584,3559611647,LU
-3559611648,3559611731,DE
-3559611732,3559611735,NL
-3559611736,3559612415,DE
+3559604224,3559612415,DE
3559612416,3559620607,IT
3559620608,3559628799,CH
3559628800,3559636991,GB
@@ -160466,17 +85208,13 @@
3559669760,3559677951,RU
3559677952,3559686143,SI
3559686144,3559694335,RU
-3559694336,3559702655,DE
-3559702656,3559702719,RU
-3559702720,3559710719,DE
+3559694336,3559710719,DE
3559710720,3559718911,FR
3559718912,3559727103,RU
3559727104,3559735295,NL
3559735296,3559743487,BG
3559743488,3559745535,IT
-3559745536,3559746099,DE
-3559746100,3559746103,GB
-3559746104,3559747583,DE
+3559745536,3559747583,DE
3559747584,3559751679,DK
3559751680,3559759871,IT
3559759872,3559768063,NO
@@ -160484,127 +85222,43 @@
3559776256,3559792639,RU
3559792640,3559800831,SA
3559800832,3559809023,IT
-3559809024,3559815595,DE
-3559815596,3559815599,NL
-3559815600,3559816283,DE
-3559816284,3559816287,NL
-3559816288,3559817215,DE
+3559809024,3559817215,DE
3559817216,3559825407,GB
3559825408,3559833599,IT
3559833600,3559849983,RU
3559849984,3559858175,CZ
3559858176,3559866367,IT
3559866368,3559874559,GB
-3559874560,3559877951,LT
-3559877952,3559877967,CH
-3559877968,3559882751,LT
+3559874560,3559882751,LT
3559882752,3559890943,AZ
3559890944,3559899135,CH
-3559899136,3559899487,UA
-3559899488,3559899519,EE
-3559899520,3559899647,UA
-3559899648,3559899903,EE
-3559899904,3559900275,UA
-3559900276,3559900279,EE
-3559900280,3559900431,UA
-3559900432,3559900432,EE
-3559900433,3559900439,UA
-3559900440,3559900447,EE
-3559900448,3559900483,UA
-3559900484,3559900487,EE
-3559900488,3559900492,UA
-3559900493,3559900493,EE
-3559900494,3559900503,UA
-3559900504,3559900511,EE
-3559900512,3559900611,UA
-3559900612,3559900624,EE
-3559900625,3559900671,UA
-3559900672,3559900951,EE
-3559900952,3559900959,DE
-3559900960,3559900975,SE
-3559900976,3559900983,PL
-3559900984,3559900991,GB
-3559900992,3559901007,RU
-3559901008,3559901183,UA
-3559901184,3559902011,EE
-3559902012,3559902015,UA
-3559902016,3559902031,EE
-3559902032,3559902047,UA
-3559902048,3559902055,EE
-3559902056,3559902071,UA
-3559902072,3559902079,EE
-3559902080,3559902151,UA
-3559902152,3559902159,EE
-3559902160,3559902175,UA
-3559902176,3559902215,EE
-3559902216,3559902223,UA
-3559902224,3559902271,EE
-3559902272,3559902399,UA
-3559902400,3559902591,EE
-3559902592,3559902975,UA
-3559902976,3559907327,EE
+3559899136,3559899903,UA
+3559899904,3559899967,EE
+3559899968,3559900223,UA
+3559900224,3559900287,EE
+3559900288,3559903231,UA
+3559903232,3559907327,EE
3559907328,3559915519,FR
3559915520,3559923711,IT
3559923712,3559931903,RU
3559931904,3559940095,GB
-3559940096,3559945471,DE
-3559945472,3559945727,US
-3559945728,3559948287,DE
+3559940096,3559948287,DE
3559948288,3559956479,RU
-3559956480,3559957567,IT
-3559957568,3559957599,NL
-3559957600,3559964159,IT
-3559964160,3559964415,HU
-3559964416,3559964671,IT
+3559956480,3559964671,IT
3559964672,3559981055,RU
3559981056,3559989247,EE
3559989248,3559997439,PL
3559997440,3560005631,KE
3560005632,3560013823,RU
-3560013824,3560016543,ES
-3560016544,3560016639,GB
-3560016640,3560018879,ES
-3560018880,3560018895,GB
-3560018896,3560018943,ES
-3560018944,3560019199,GB
-3560019200,3560019631,ES
-3560019632,3560019639,GB
-3560019640,3560019967,ES
-3560019968,3560020223,GB
-3560020224,3560020303,ES
-3560020304,3560020319,GB
-3560020320,3560020351,ES
-3560020352,3560020367,GB
-3560020368,3560020991,ES
-3560020992,3560021247,GB
-3560021248,3560021503,ES
-3560021504,3560021759,GB
-3560021760,3560022015,ES
-3560022016,3560022527,GB
-3560022528,3560024319,ES
-3560024320,3560024447,GB
-3560024448,3560024455,ES
-3560024456,3560024463,GB
-3560024464,3560024831,ES
-3560024832,3560025087,GB
-3560025088,3560025343,ES
-3560025344,3560025855,GB
-3560025856,3560027134,ES
-3560027135,3560027135,GB
-3560027136,3560027623,ES
-3560027624,3560027631,GB
-3560027632,3560027647,ES
-3560027648,3560028159,GB
-3560028160,3560028767,ES
-3560028768,3560028863,GB
-3560028864,3560029239,ES
-3560029240,3560029247,GB
-3560029248,3560029279,ES
-3560029280,3560029295,GB
-3560029296,3560029723,ES
-3560029724,3560029727,GB
-3560029728,3560030207,ES
-3560030208,3560046591,GB
+3560013824,3560022527,GB
+3560022528,3560022783,ES
+3560022784,3560023631,GB
+3560023632,3560023639,ES
+3560023640,3560023791,GB
+3560023792,3560023799,ES
+3560023800,3560030095,GB
+3560030096,3560030103,ES
+3560030104,3560046591,GB
3560046592,3560054783,BG
3560054784,3560062975,TR
3560062976,3560071167,BG
@@ -160629,55 +85283,32 @@
3560235008,3560243199,DE
3560243200,3560247295,BE
3560247296,3560251391,NL
-3560251392,3560252159,RU
-3560252160,3560252415,CZ
-3560252416,3560253439,RU
-3560253440,3560253695,CZ
-3560253696,3560259583,RU
+3560251392,3560259583,RU
3560259584,3560267775,GB
3560267776,3560275967,EE
-3560275968,3560285439,DE
-3560285440,3560285695,PL
-3560285696,3560285951,DE
-3560285952,3560286207,PL
-3560286208,3560308735,DE
+3560275968,3560308735,DE
3560308736,3560316927,FI
3560316928,3560325119,NL
3560325120,3560333311,DK
3560333312,3560341503,RO
-3560341504,3560344575,GB
-3560344576,3560345087,MA
-3560345088,3560345599,GB
-3560345600,3560346111,US
-3560346112,3560346623,GB
+3560341504,3560346623,GB
3560346624,3560347647,US
3560347648,3560357887,GB
3560357888,3560366079,GR
-3560366080,3560366687,CH
-3560366688,3560366695,IT
-3560366696,3560366703,CH
-3560366704,3560366719,IT
-3560366720,3560374271,CH
+3560366080,3560374271,CH
3560374272,3560382463,ES
3560382464,3560390655,FO
-3560390656,3560391423,UA
-3560391424,3560391679,RU
-3560391680,3560394751,UA
-3560394752,3560395007,RU
-3560395008,3560398847,UA
+3560390656,3560398847,UA
3560398848,3560407039,RU
3560407040,3560423423,PT
3560423424,3560431615,CH
3560431616,3560439807,SK
3560439808,3560447999,BG
-3560448000,3560449791,GB
-3560449792,3560450047,US
-3560450048,3560472575,GB
+3560448000,3560472575,GB
3560472576,3560480767,MT
3560480768,3560488959,IT
3560488960,3560497151,MD
-3560497152,3560501247,LU
-3560501248,3560501503,EU
+3560497152,3560501503,LU
3560501504,3560502527,DE
3560502528,3560502783,LU
3560502784,3560503039,DE
@@ -160711,1996 +85342,121 @@
3560726528,3560734719,DK
3560734720,3560742911,DE
3560742912,3560751103,AT
-3560751104,3560761856,DE
-3560761857,3560761857,A2
-3560761858,3560767487,DE
-3560767488,3560832791,NL
-3560832792,3560832799,BE
-3560832800,3560833023,NL
+3560751104,3560767487,DE
+3560767488,3560833023,NL
3560833024,3560841215,GB
3560841216,3560849407,RS
-3560849408,3560849663,DE
-3560849664,3560849727,NL
-3560849728,3560850127,DE
-3560850128,3560850143,NL
-3560850144,3560852959,DE
-3560852960,3560852967,GB
-3560852968,3560857599,DE
+3560849408,3560857599,DE
3560857600,3560865791,SA
3560865792,3560882175,FR
3560882176,3560890367,DE
3560890368,3560898559,NO
3560898560,3560906751,FI
-3560906752,3560919047,DE
-3560919048,3560919055,CH
-3560919056,3560923135,DE
+3560906752,3560923135,DE
3560923136,3560931327,ES
-3560931328,3560939523,DE
-3560939524,3560939527,AT
-3560939528,3560939535,DE
-3560939536,3560939539,PT
-3560939540,3560939543,IT
-3560939544,3560939555,DE
-3560939556,3560939559,ES
-3560939560,3560939567,DE
-3560939568,3560939571,NL
-3560939572,3560939579,ES
-3560939580,3560939583,BE
-3560939584,3560939587,DE
-3560939588,3560939591,BE
-3560939592,3560939607,DE
-3560939608,3560939611,IT
-3560939612,3560939643,DE
-3560939644,3560939647,BE
-3560939648,3560939655,DE
-3560939656,3560939659,CH
-3560939660,3560939663,DE
-3560939664,3560939667,DK
-3560939668,3560939679,DE
-3560939680,3560939683,IT
-3560939684,3560939687,AT
-3560939688,3560939691,ES
-3560939692,3560939695,FR
-3560939696,3560939703,DE
-3560939704,3560939707,ES
-3560939708,3560939719,DE
-3560939720,3560939727,GR
-3560939728,3560939735,NL
-3560939736,3560939751,FR
-3560939752,3560939755,IT
-3560939756,3560939759,DE
-3560939760,3560939763,IT
-3560939764,3560939767,DE
-3560939768,3560939771,IE
-3560939772,3560939775,CZ
-3560939776,3560939779,BE
-3560939780,3560939791,DE
-3560939792,3560939795,FR
-3560939796,3560939799,GB
-3560939800,3560939803,DE
-3560939804,3560939807,IT
-3560939808,3560939811,FR
-3560939812,3560939815,DE
-3560939816,3560939819,CH
-3560939820,3560939823,DE
-3560939824,3560939827,LI
-3560939828,3560939831,FR
-3560939832,3560939839,DE
-3560939840,3560939843,GB
-3560939844,3560939847,ES
-3560939848,3560939851,BE
-3560939852,3560939855,ES
-3560939856,3560939859,FR
-3560939860,3560939863,HU
-3560939864,3560939867,ES
-3560939868,3560939875,DE
-3560939876,3560939879,CH
-3560939880,3560939887,DE
-3560939888,3560939891,CH
-3560939892,3560939895,DE
-3560939896,3560939899,ES
-3560939900,3560939903,GB
-3560939904,3560939907,BR
-3560939908,3560939911,NL
-3560939912,3560939915,RE
-3560939916,3560939919,ES
-3560939920,3560939927,DE
-3560939928,3560939931,NL
-3560939932,3560939935,IT
-3560939936,3560939939,DE
-3560939940,3560939943,AT
-3560939944,3560939951,FR
-3560939952,3560939955,DE
-3560939956,3560939959,AT
-3560939960,3560939967,DE
-3560939968,3560939971,ES
-3560939972,3560939975,DE
-3560939976,3560939983,BE
-3560939984,3560939987,FR
-3560939988,3560939991,ES
-3560939992,3560939995,IT
-3560939996,3560939999,DE
-3560940000,3560940007,ES
-3560940008,3560940015,DE
-3560940016,3560940019,BE
-3560940020,3560940023,GB
-3560940024,3560940027,GR
-3560940028,3560940043,DE
-3560940044,3560940047,GB
-3560940048,3560940051,ES
-3560940052,3560940055,BE
-3560940056,3560940059,NL
-3560940060,3560940063,LU
-3560940064,3560940067,CH
-3560940068,3560940071,FR
-3560940072,3560940075,DE
-3560940076,3560940079,ES
-3560940080,3560940087,DE
-3560940088,3560940091,IT
-3560940092,3560940095,CH
-3560940096,3560940099,DE
-3560940100,3560940103,FR
-3560940104,3560940115,DE
-3560940116,3560940119,FR
-3560940120,3560940123,GB
-3560940124,3560940127,DE
-3560940128,3560940135,IT
-3560940136,3560940139,AT
-3560940140,3560940143,HU
-3560940144,3560940147,DE
-3560940148,3560940151,IT
-3560940152,3560940155,FR
-3560940156,3560940159,ES
-3560940160,3560940163,IT
-3560940164,3560940171,FR
-3560940172,3560940175,DE
-3560940176,3560940179,FR
-3560940180,3560940183,BE
-3560940184,3560940187,FR
-3560940188,3560940191,IT
-3560940192,3560940195,AT
-3560940196,3560940199,DE
-3560940200,3560940203,CY
-3560940204,3560940207,DE
-3560940208,3560940211,ES
-3560940212,3560940215,FR
-3560940216,3560940219,IE
-3560940220,3560940227,DE
-3560940228,3560940231,CH
-3560940232,3560940235,IT
-3560940236,3560940239,DE
-3560940240,3560940243,PT
-3560940244,3560940247,GB
-3560940248,3560940251,DE
-3560940252,3560940255,CH
-3560940256,3560940267,DE
-3560940268,3560940275,GB
-3560940276,3560940279,FR
-3560940280,3560940283,AT
-3560940284,3560940287,DE
-3560940288,3560940291,FR
-3560940292,3560940307,DE
-3560940308,3560940311,BE
-3560940312,3560940327,DE
-3560940328,3560940331,ES
-3560940332,3560940339,DE
-3560940340,3560940343,CH
-3560940344,3560940347,NL
-3560940348,3560940367,DE
-3560940368,3560940371,FR
-3560940372,3560940379,CH
-3560940380,3560940387,DE
-3560940388,3560940391,ES
-3560940392,3560940395,DE
-3560940396,3560940399,IL
-3560940400,3560940403,CH
-3560940404,3560940407,DE
-3560940408,3560940411,IT
-3560940412,3560940419,DE
-3560940420,3560940423,GR
-3560940424,3560940431,DE
-3560940432,3560940435,FR
-3560940436,3560940439,DE
-3560940440,3560940443,BE
-3560940444,3560940447,SL
-3560940448,3560940451,DE
-3560940452,3560940455,NL
-3560940456,3560940459,DE
-3560940460,3560940463,HU
-3560940464,3560940467,CY
-3560940468,3560940471,DE
-3560940472,3560940475,FR
-3560940476,3560940479,CH
-3560940480,3560940487,ES
-3560940488,3560940491,CZ
-3560940492,3560940495,ES
-3560940496,3560940499,IT
-3560940500,3560940503,DE
-3560940504,3560940507,GB
-3560940508,3560940511,IT
-3560940512,3560940523,DE
-3560940524,3560940527,FR
-3560940528,3560940531,DE
-3560940532,3560940535,FR
-3560940536,3560940539,HU
-3560940540,3560940543,IT
-3560940544,3560940547,DE
-3560940548,3560940551,IE
-3560940552,3560940563,DE
-3560940564,3560940567,GB
-3560940568,3560940571,DE
-3560940572,3560940575,DK
-3560940576,3560940579,ES
-3560940580,3560940583,IT
-3560940584,3560940587,FR
-3560940588,3560940591,IT
-3560940592,3560940595,GR
-3560940596,3560940599,CH
-3560940600,3560940603,MA
-3560940604,3560940607,GB
-3560940608,3560940611,FR
-3560940612,3560940615,CH
-3560940616,3560940619,DE
-3560940620,3560940623,AT
-3560940624,3560940627,SM
-3560940628,3560940631,PL
-3560940632,3560940635,AT
-3560940636,3560940639,DE
-3560940640,3560940647,GB
-3560940648,3560940655,DE
-3560940656,3560940663,IT
-3560940664,3560940683,DE
-3560940684,3560940687,DK
-3560940688,3560940691,IT
-3560940692,3560940695,NO
-3560940696,3560940699,FR
-3560940700,3560940703,GB
-3560940704,3560940707,ES
-3560940708,3560940711,BE
-3560940712,3560940715,DE
-3560940716,3560940719,ES
-3560940720,3560940723,PL
-3560940724,3560940727,DE
-3560940728,3560940731,FR
-3560940732,3560940735,DE
-3560940736,3560940739,DK
-3560940740,3560940743,IT
-3560940744,3560940751,DE
-3560940752,3560940755,IE
-3560940756,3560940763,FR
-3560940764,3560940767,CH
-3560940768,3560940779,DE
-3560940780,3560940783,IT
-3560940784,3560940787,NL
-3560940788,3560940791,GB
-3560940792,3560940799,ES
-3560940800,3560940803,DE
-3560940804,3560940807,GB
-3560940808,3560940811,IT
-3560940812,3560940815,DE
-3560940816,3560940819,FR
-3560940820,3560940823,NL
-3560940824,3560940827,IT
-3560940828,3560940831,ES
-3560940832,3560940839,DE
-3560940840,3560940843,IT
-3560940844,3560940851,ES
-3560940852,3560940859,DE
-3560940860,3560940863,PT
-3560940864,3560940867,IT
-3560940868,3560940875,DE
-3560940876,3560940879,FR
-3560940880,3560940883,IT
-3560940884,3560940887,NL
-3560940888,3560940891,LU
-3560940892,3560940895,ES
-3560940896,3560940899,DE
-3560940900,3560940903,NL
-3560940904,3560940907,DE
-3560940908,3560940915,GB
-3560940916,3560940923,DE
-3560940924,3560940927,ES
-3560940928,3560940931,GR
-3560940932,3560940935,CH
-3560940936,3560940939,IT
-3560940940,3560940951,DE
-3560940952,3560940955,AT
-3560940956,3560940963,NL
-3560940964,3560940967,DE
-3560940968,3560940971,NL
-3560940972,3560940975,DE
-3560940976,3560940979,FR
-3560940980,3560940983,LU
-3560940984,3560940987,IT
-3560940988,3560940995,DE
-3560940996,3560940999,DK
-3560941000,3560941003,ES
-3560941004,3560941007,PL
-3560941008,3560941019,DE
-3560941020,3560941023,IT
-3560941024,3560941027,FR
-3560941028,3560941031,CH
-3560941032,3560941035,FR
-3560941036,3560941039,DE
-3560941040,3560941043,FR
-3560941044,3560941047,DE
-3560941048,3560941051,GR
-3560941052,3560941059,FR
-3560941060,3560941063,GB
-3560941064,3560941071,FR
-3560941072,3560941075,NL
-3560941076,3560941079,GB
-3560941080,3560941083,BE
-3560941084,3560941087,IT
-3560941088,3560941091,DE
-3560941092,3560941095,BE
-3560941096,3560941099,AT
-3560941100,3560941103,IT
-3560941104,3560941107,FR
-3560941108,3560941119,DE
-3560941120,3560941123,BE
-3560941124,3560941127,FR
-3560941128,3560941131,DE
-3560941132,3560941135,GB
-3560941136,3560941147,DE
-3560941148,3560941151,IT
-3560941152,3560941155,DK
-3560941156,3560941159,ES
-3560941160,3560941163,IT
-3560941164,3560941167,DE
-3560941168,3560941171,NL
-3560941172,3560941175,DE
-3560941176,3560941179,ES
+3560931328,3560941179,DE
3560941180,3560941183,GB
-3560941184,3560941187,IT
-3560941188,3560941191,ES
-3560941192,3560941195,CH
-3560941196,3560941199,FR
-3560941200,3560941203,DE
-3560941204,3560941207,IT
-3560941208,3560941211,MA
-3560941212,3560941215,DE
-3560941216,3560941219,NL
-3560941220,3560941223,GB
-3560941224,3560941227,DE
-3560941228,3560941231,SE
-3560941232,3560941235,FR
-3560941236,3560941243,DE
-3560941244,3560941251,IT
-3560941252,3560941255,FR
-3560941256,3560941259,AT
-3560941260,3560941263,GB
-3560941264,3560941271,ES
-3560941272,3560941275,DK
-3560941276,3560941279,GR
-3560941280,3560941283,NL
-3560941284,3560941287,DE
-3560941288,3560941291,ES
-3560941292,3560941295,DE
-3560941296,3560941303,IT
-3560941304,3560941307,FR
-3560941308,3560941315,DE
-3560941316,3560941319,SE
-3560941320,3560941323,ES
-3560941324,3560941331,IT
-3560941332,3560941335,PT
-3560941336,3560941339,BE
+3560941184,3560941339,DE
3560941340,3560941343,GB
-3560941344,3560941347,FR
-3560941348,3560941351,IE
-3560941352,3560941355,NL
-3560941356,3560941359,ES
-3560941360,3560941367,DE
-3560941368,3560941371,DK
-3560941372,3560941379,DE
-3560941380,3560941383,CH
-3560941384,3560941387,IE
-3560941388,3560941391,SE
-3560941392,3560941395,DK
-3560941396,3560941399,IS
-3560941400,3560941407,DE
-3560941408,3560941411,CH
-3560941412,3560941415,IT
-3560941416,3560941419,DE
-3560941420,3560941423,FR
-3560941424,3560941427,DE
-3560941428,3560941431,FR
-3560941432,3560941435,DE
-3560941436,3560941439,IN
-3560941440,3560941443,DE
-3560941444,3560941447,ES
-3560941448,3560941451,DE
-3560941452,3560941459,GB
-3560941460,3560941467,DE
-3560941468,3560941471,CH
-3560941472,3560941475,BE
-3560941476,3560941479,ES
-3560941480,3560941483,DE
-3560941484,3560941487,ES
-3560941488,3560941491,DE
-3560941492,3560941495,GB
-3560941496,3560941499,FR
-3560941500,3560941503,ES
-3560941504,3560941507,DE
-3560941508,3560941511,IT
-3560941512,3560941515,AT
-3560941516,3560941519,SE
-3560941520,3560941523,NO
-3560941524,3560941535,DE
-3560941536,3560941539,DK
-3560941540,3560941543,FR
-3560941544,3560941547,GB
-3560941548,3560941551,DE
-3560941552,3560941555,IT
-3560941556,3560941559,DE
-3560941560,3560941563,GB
-3560941564,3560941567,GR
-3560941568,3560941587,DE
-3560941588,3560941591,ES
-3560941592,3560941599,DE
-3560941600,3560941603,FR
-3560941604,3560941607,CH
-3560941608,3560941611,GB
-3560941612,3560941623,DE
-3560941624,3560941627,GB
-3560941628,3560941631,ES
-3560941632,3560941635,NL
-3560941636,3560941639,BE
-3560941640,3560941643,GB
-3560941644,3560941647,BE
-3560941648,3560941651,NO
-3560941652,3560941655,DE
-3560941656,3560941659,GB
-3560941660,3560941663,NL
-3560941664,3560941671,DE
-3560941672,3560941679,FR
-3560941680,3560941683,GB
-3560941684,3560941687,IT
-3560941688,3560941691,DE
-3560941692,3560941695,IT
-3560941696,3560941699,FR
-3560941700,3560941703,GB
-3560941704,3560941711,DE
-3560941712,3560941715,FR
-3560941716,3560941723,DE
-3560941724,3560941727,FR
-3560941728,3560941735,DE
-3560941736,3560941739,NL
-3560941740,3560941743,NO
-3560941744,3560941747,FR
-3560941748,3560941751,ES
-3560941752,3560941755,BE
-3560941756,3560941771,DE
-3560941772,3560941787,GB
-3560941788,3560941791,DE
-3560941792,3560941795,ES
-3560941796,3560941799,FR
-3560941800,3560941803,NL
-3560941804,3560941807,ES
-3560941808,3560941811,FR
-3560941812,3560941815,NO
-3560941816,3560941819,FR
-3560941820,3560941823,NL
-3560941824,3560941827,DE
-3560941828,3560941831,ES
-3560941832,3560941835,GB
-3560941836,3560941843,DE
-3560941844,3560941847,IT
-3560941848,3560941851,BE
-3560941852,3560941855,CH
-3560941856,3560941859,BE
-3560941860,3560941867,DE
-3560941868,3560941871,AT
-3560941872,3560941875,GB
-3560941876,3560941879,NL
-3560941880,3560941883,BG
-3560941884,3560941887,DE
-3560941888,3560941891,ES
-3560941892,3560941895,IT
-3560941896,3560941899,ES
-3560941900,3560941903,DE
-3560941904,3560941907,GB
-3560941908,3560941911,DE
-3560941912,3560941919,FR
-3560941920,3560941931,DE
-3560941932,3560941935,CH
-3560941936,3560941947,DE
-3560941948,3560941951,DK
-3560941952,3560941955,IT
-3560941956,3560941959,DE
-3560941960,3560941963,LU
-3560941964,3560941967,FR
-3560941968,3560941971,DE
-3560941972,3560941975,DK
-3560941976,3560941983,DE
-3560941984,3560941987,NL
-3560941988,3560941991,DE
-3560941992,3560941995,GB
-3560941996,3560941999,BE
-3560942000,3560942003,FR
-3560942004,3560942007,GB
-3560942008,3560942011,IT
-3560942012,3560942015,DE
-3560942016,3560942019,NL
-3560942020,3560942023,ES
-3560942024,3560942027,CH
-3560942028,3560942035,DE
-3560942036,3560942039,GB
-3560942040,3560942047,DE
-3560942048,3560942051,IT
-3560942052,3560942055,DE
-3560942056,3560942059,IS
-3560942060,3560942063,GB
-3560942064,3560942067,ES
-3560942068,3560942071,BE
-3560942072,3560942083,DE
-3560942084,3560942087,FR
-3560942088,3560942095,DE
-3560942096,3560942099,FR
-3560942100,3560942103,DE
-3560942104,3560942107,NL
-3560942108,3560942115,DE
-3560942116,3560942119,HU
-3560942120,3560942123,AT
-3560942124,3560942127,BE
-3560942128,3560942131,DE
-3560942132,3560942135,ES
-3560942136,3560942143,DE
-3560942144,3560942147,GB
-3560942148,3560942151,DE
-3560942152,3560942155,IT
-3560942156,3560942159,ES
-3560942160,3560942163,DE
-3560942164,3560942171,ES
-3560942172,3560942175,SE
-3560942176,3560942179,BE
-3560942180,3560942183,ES
-3560942184,3560942191,DE
-3560942192,3560942195,HU
-3560942196,3560942199,ES
-3560942200,3560942203,FR
-3560942204,3560942211,DE
-3560942212,3560942219,IT
-3560942220,3560942227,FR
-3560942228,3560942231,IT
-3560942232,3560942243,DE
-3560942244,3560942247,IT
-3560942248,3560942251,TR
-3560942252,3560942255,GB
-3560942256,3560942259,DE
-3560942260,3560942263,ES
-3560942264,3560942267,NL
-3560942268,3560942271,DE
-3560942272,3560942275,PL
-3560942276,3560942279,IT
-3560942280,3560942283,NL
-3560942284,3560942287,DK
-3560942288,3560942291,FR
-3560942292,3560942295,BH
-3560942296,3560942299,MA
-3560942300,3560942307,DE
-3560942308,3560942319,ES
-3560942320,3560942323,DE
-3560942324,3560942327,IT
-3560942328,3560942339,PT
-3560942340,3560942343,DE
-3560942344,3560942347,FR
-3560942348,3560942351,DE
-3560942352,3560942355,ES
-3560942356,3560942359,IT
-3560942360,3560942363,AT
-3560942364,3560942367,DE
-3560942368,3560942375,FR
-3560942376,3560942379,DE
-3560942380,3560942383,GB
-3560942384,3560942387,DE
-3560942388,3560942391,IT
-3560942392,3560942407,DE
-3560942408,3560942411,GB
-3560942412,3560942415,DE
-3560942416,3560942419,IT
-3560942420,3560942423,FR
-3560942424,3560942427,NO
-3560942428,3560942447,DE
-3560942448,3560942455,CH
-3560942456,3560942459,ES
-3560942460,3560942463,RU
-3560942464,3560942467,BE
-3560942468,3560942471,ES
-3560942472,3560942475,DE
-3560942476,3560942479,CH
-3560942480,3560942483,ES
-3560942484,3560942487,HU
-3560942488,3560942495,FR
-3560942496,3560942499,ES
-3560942500,3560942503,DE
-3560942504,3560942511,ES
-3560942512,3560942515,IT
-3560942516,3560942523,DE
-3560942524,3560942527,NL
-3560942528,3560942535,DE
-3560942536,3560942539,FR
-3560942540,3560942543,DE
-3560942544,3560942547,CH
-3560942548,3560942551,DK
-3560942552,3560942555,DE
-3560942556,3560942559,FR
-3560942560,3560942563,IT
-3560942564,3560942567,ES
-3560942568,3560942571,DE
-3560942572,3560942579,FR
-3560942580,3560942583,DE
-3560942584,3560942587,GB
-3560942588,3560942590,ES
-3560942591,3560942599,DE
-3560942600,3560942603,DK
-3560942604,3560942619,DE
-3560942620,3560942623,BE
-3560942624,3560942627,IT
-3560942628,3560942631,GB
-3560942632,3560942635,FR
-3560942636,3560942643,DE
-3560942644,3560942647,FR
-3560942648,3560942651,DE
-3560942652,3560942655,GR
-3560942656,3560942663,ES
-3560942664,3560942667,NL
-3560942668,3560942675,IT
-3560942676,3560942679,BE
-3560942680,3560942683,DE
-3560942684,3560942687,BE
-3560942688,3560942691,NL
-3560942692,3560942695,LU
-3560942696,3560942699,DE
-3560942700,3560942703,ES
-3560942704,3560942707,DE
-3560942708,3560942711,IT
-3560942712,3560942715,LU
-3560942716,3560942719,BE
-3560942720,3560942727,IT
-3560942728,3560942731,GB
-3560942732,3560942735,DE
-3560942736,3560942739,CH
-3560942740,3560942743,ES
-3560942744,3560942751,GB
-3560942752,3560942763,DE
-3560942764,3560942767,FR
-3560942768,3560942779,DE
-3560942780,3560942783,CH
-3560942784,3560942787,DE
-3560942788,3560942791,HU
-3560942792,3560942795,DE
-3560942796,3560942799,FR
-3560942800,3560942803,AT
-3560942804,3560942807,TR
-3560942808,3560942811,AT
-3560942812,3560942815,FR
-3560942816,3560942819,TR
-3560942820,3560942823,ES
-3560942824,3560942827,GB
-3560942828,3560942831,AT
-3560942832,3560942835,IT
-3560942836,3560942839,CH
-3560942840,3560942843,BE
-3560942844,3560942847,ES
-3560942848,3560942851,IT
-3560942852,3560942855,ES
-3560942856,3560942859,DE
-3560942860,3560942863,IT
-3560942864,3560942871,DE
-3560942872,3560942875,IT
-3560942876,3560942879,PL
-3560942880,3560942883,GB
-3560942884,3560942887,DE
-3560942888,3560942891,FR
-3560942892,3560942895,DE
-3560942896,3560942899,ES
-3560942900,3560942903,DE
-3560942904,3560942907,CH
-3560942908,3560942915,DE
-3560942916,3560942919,BE
-3560942920,3560942923,DE
-3560942924,3560942927,IT
-3560942928,3560942931,SE
-3560942932,3560942935,AT
-3560942936,3560942939,DE
-3560942940,3560942943,AE
-3560942944,3560942951,DE
-3560942952,3560942955,ES
-3560942956,3560942959,DE
-3560942960,3560942963,GB
-3560942964,3560942983,DE
-3560942984,3560942987,BE
-3560942988,3560942999,IT
-3560943000,3560943003,PL
-3560943004,3560943007,DK
-3560943008,3560943011,CH
-3560943012,3560943015,IT
-3560943016,3560943019,ES
-3560943020,3560943023,DE
-3560943024,3560943027,GR
-3560943028,3560943031,DE
-3560943032,3560943035,FR
-3560943036,3560943039,PL
-3560943040,3560943043,NO
-3560943044,3560943047,ES
-3560943048,3560943051,HR
-3560943052,3560943055,CY
-3560943056,3560943059,BE
-3560943060,3560943075,DE
-3560943076,3560943079,ES
-3560943080,3560943095,DE
-3560943096,3560943099,PL
-3560943100,3560943110,DE
-3560943111,3560943111,ES
-3560943112,3560943113,DE
-3560943114,3560943115,ES
-3560943116,3560943116,DK
-3560943117,3560943117,IL
-3560943118,3560943118,DE
-3560943119,3560943119,IT
-3560943120,3560943120,DE
-3560943121,3560943121,CH
-3560943122,3560943122,ES
-3560943123,3560943125,DE
-3560943126,3560943126,FR
-3560943127,3560943127,HU
-3560943128,3560943129,DE
-3560943130,3560943130,BE
-3560943131,3560943131,RU
-3560943132,3560943132,BE
-3560943133,3560943133,ES
-3560943134,3560943136,DE
-3560943137,3560943137,ES
-3560943138,3560943138,CH
-3560943139,3560943139,DE
-3560943140,3560943140,ES
-3560943141,3560943141,CH
-3560943142,3560943142,DE
-3560943143,3560943145,HU
-3560943146,3560943146,IE
-3560943147,3560943147,CH
-3560943148,3560943149,DE
-3560943150,3560943150,ES
-3560943151,3560943151,IT
-3560943152,3560943152,HU
-3560943153,3560943154,DE
-3560943155,3560943155,FR
-3560943156,3560943157,DE
-3560943158,3560943158,FR
-3560943159,3560943159,IT
-3560943160,3560943160,NO
-3560943161,3560943161,BE
-3560943162,3560943162,GR
-3560943163,3560943163,DE
-3560943164,3560943164,PL
-3560943165,3560943165,FR
-3560943166,3560943166,GB
-3560943167,3560943167,FR
-3560943168,3560943168,ES
-3560943169,3560943169,DE
-3560943170,3560943170,ES
-3560943171,3560943171,IT
-3560943172,3560943172,ES
-3560943173,3560943173,BE
-3560943174,3560943175,DE
-3560943176,3560943177,CH
-3560943178,3560943178,IT
-3560943179,3560943179,PL
-3560943180,3560943180,GB
-3560943181,3560943181,DE
-3560943182,3560943183,ES
-3560943184,3560943184,IT
-3560943185,3560943185,DK
-3560943186,3560943186,ES
-3560943187,3560943187,PT
-3560943188,3560943188,IT
-3560943189,3560943192,DE
-3560943193,3560943193,ES
-3560943194,3560943194,AT
-3560943195,3560943195,DE
-3560943196,3560943197,IT
-3560943198,3560943198,DE
-3560943199,3560943199,PT
-3560943200,3560943200,AT
-3560943201,3560943201,IT
-3560943202,3560943202,IL
-3560943203,3560943204,DE
-3560943205,3560943205,IT
-3560943206,3560943207,DE
-3560943208,3560943208,AT
-3560943209,3560943210,ES
-3560943211,3560943211,FR
-3560943212,3560943212,DE
-3560943213,3560943213,FR
-3560943214,3560943214,PL
-3560943215,3560943218,DE
-3560943219,3560943219,ES
-3560943220,3560943221,DE
-3560943222,3560943222,ES
-3560943223,3560943223,FR
-3560943224,3560943224,DE
-3560943225,3560943226,GR
-3560943227,3560943227,DE
-3560943228,3560943230,NL
-3560943231,3560943232,FR
-3560943233,3560943233,PL
-3560943234,3560943234,EE
-3560943235,3560943235,CH
-3560943236,3560943237,NL
-3560943238,3560943238,DE
-3560943239,3560943239,FR
-3560943240,3560943240,GB
-3560943241,3560943241,FR
-3560943242,3560943242,DE
-3560943243,3560943243,FR
-3560943244,3560943244,PL
-3560943245,3560943245,CH
-3560943246,3560943247,DE
-3560943248,3560943248,GR
-3560943249,3560943249,CH
-3560943250,3560943250,AT
-3560943251,3560943251,GB
-3560943252,3560943252,BE
-3560943253,3560943253,DE
-3560943254,3560943254,ES
-3560943255,3560943255,GB
-3560943256,3560943256,DE
-3560943257,3560943257,ES
-3560943258,3560943258,FR
-3560943259,3560943259,DE
-3560943260,3560943260,ES
-3560943261,3560943261,IE
-3560943262,3560943262,DE
-3560943263,3560943263,IT
-3560943264,3560943264,CZ
-3560943265,3560943267,DE
-3560943268,3560943269,IT
-3560943270,3560943270,GB
-3560943271,3560943271,IT
-3560943272,3560943272,ES
-3560943273,3560943273,FR
-3560943274,3560943274,GB
-3560943275,3560943275,DE
-3560943276,3560943276,FR
-3560943277,3560943277,IT
-3560943278,3560943278,DE
-3560943279,3560943279,FR
-3560943280,3560943281,DE
-3560943282,3560943282,FR
-3560943283,3560943283,ES
-3560943284,3560943286,DE
-3560943287,3560943287,NL
-3560943288,3560943290,FR
-3560943291,3560943292,IT
-3560943293,3560943293,ES
-3560943294,3560943294,IT
-3560943295,3560943295,DE
-3560943296,3560943296,RU
-3560943297,3560943297,ES
-3560943298,3560943298,FR
-3560943299,3560943299,GB
-3560943300,3560943300,DE
-3560943301,3560943301,FR
-3560943302,3560943302,ES
-3560943303,3560943303,IT
-3560943304,3560943304,FR
-3560943305,3560943306,DE
-3560943307,3560943307,ES
-3560943308,3560943309,DE
-3560943310,3560943311,IT
-3560943312,3560943312,PL
-3560943313,3560943313,DE
-3560943314,3560943314,ES
-3560943315,3560943315,IT
-3560943316,3560943316,GB
-3560943317,3560943317,IT
-3560943318,3560943318,CH
-3560943319,3560943319,ES
-3560943320,3560943320,IT
-3560943321,3560943321,GB
-3560943322,3560943322,DE
-3560943323,3560943323,NL
-3560943324,3560943324,DE
-3560943325,3560943325,CH
-3560943326,3560943326,RU
-3560943327,3560943329,DE
-3560943330,3560943331,IT
-3560943332,3560943335,DE
-3560943336,3560943336,ES
-3560943337,3560943337,IT
-3560943338,3560943338,BE
-3560943339,3560943339,NL
-3560943340,3560943341,DE
-3560943342,3560943342,ES
-3560943343,3560943343,FR
-3560943344,3560943344,NL
-3560943345,3560943345,CH
-3560943346,3560943346,IT
-3560943347,3560943347,ES
-3560943348,3560943348,FR
-3560943349,3560943349,DE
-3560943350,3560943350,BE
-3560943351,3560943351,SE
-3560943352,3560943352,IT
-3560943353,3560943354,DE
-3560943355,3560943355,IT
-3560943356,3560943356,DE
-3560943357,3560943357,ES
-3560943358,3560943358,BE
-3560943359,3560943361,DE
-3560943362,3560943362,GB
-3560943363,3560943365,DE
-3560943366,3560943367,IT
-3560943368,3560943368,DE
-3560943369,3560943369,GR
-3560943370,3560943370,DE
-3560943371,3560943371,AT
-3560943372,3560943372,FR
-3560943373,3560943375,DE
-3560943376,3560943376,ES
-3560943377,3560943377,GB
-3560943378,3560943378,DE
-3560943379,3560943380,ES
-3560943381,3560943383,DE
-3560943384,3560943384,FR
-3560943385,3560943385,ES
-3560943386,3560943386,CH
-3560943387,3560943387,GB
-3560943388,3560943391,DE
-3560943392,3560943392,GB
-3560943393,3560943393,DE
-3560943394,3560943394,ES
-3560943395,3560943395,NL
-3560943396,3560943396,BE
-3560943397,3560943397,DE
-3560943398,3560943398,BE
-3560943399,3560943399,CH
-3560943400,3560943400,IT
-3560943401,3560943401,DE
-3560943402,3560943402,NL
-3560943403,3560943403,DE
-3560943404,3560943404,BE
-3560943405,3560943405,DE
-3560943406,3560943407,ES
-3560943408,3560943408,IT
-3560943409,3560943409,ES
-3560943410,3560943410,NL
-3560943411,3560943411,DE
-3560943412,3560943412,IT
-3560943413,3560943413,ES
-3560943414,3560943415,DE
-3560943416,3560943416,FR
-3560943417,3560943417,DE
-3560943418,3560943418,GB
-3560943419,3560943419,FR
-3560943420,3560943420,DE
-3560943421,3560943421,HU
-3560943422,3560943422,DE
-3560943423,3560943423,FR
-3560943424,3560943424,DE
-3560943425,3560943425,ES
-3560943426,3560943426,IT
-3560943427,3560943427,FR
-3560943428,3560943428,NO
-3560943429,3560943430,NL
-3560943431,3560943432,DE
-3560943433,3560943433,GB
-3560943434,3560943434,SE
-3560943435,3560943435,DE
-3560943436,3560943436,FR
-3560943437,3560943437,ES
-3560943438,3560943438,FR
-3560943439,3560943439,NO
-3560943440,3560943440,FR
-3560943441,3560943441,DE
-3560943442,3560943442,ES
-3560943443,3560943443,BE
-3560943444,3560943444,CH
-3560943445,3560943445,PT
-3560943446,3560943446,DE
-3560943447,3560943447,GB
-3560943448,3560943450,DE
-3560943451,3560943451,PL
-3560943452,3560943452,GB
-3560943453,3560943454,DE
-3560943455,3560943456,GB
-3560943457,3560943457,ES
-3560943458,3560943459,IT
-3560943460,3560943460,ES
-3560943461,3560943461,CH
-3560943462,3560943462,FR
-3560943463,3560943463,NL
-3560943464,3560943464,ES
-3560943465,3560943465,FR
-3560943466,3560943466,NO
-3560943467,3560943467,IT
-3560943468,3560943468,CH
-3560943469,3560943469,IT
-3560943470,3560943471,DE
-3560943472,3560943472,BE
-3560943473,3560943473,AT
-3560943474,3560943474,CH
-3560943475,3560943475,ES
-3560943476,3560943476,BE
-3560943477,3560943477,DE
-3560943478,3560943478,IT
-3560943479,3560943479,GB
-3560943480,3560943480,NL
-3560943481,3560943481,BG
-3560943482,3560943482,DE
-3560943483,3560943486,ES
-3560943487,3560943487,DE
-3560943488,3560943488,ES
-3560943489,3560943489,DE
-3560943490,3560943490,GB
-3560943491,3560943491,DE
-3560943492,3560943493,FR
-3560943494,3560943494,GB
-3560943495,3560943495,IT
-3560943496,3560943499,DE
-3560943500,3560943500,CH
-3560943501,3560943501,ES
-3560943502,3560943507,DE
-3560943508,3560943508,DK
-3560943509,3560943510,DE
-3560943511,3560943511,IT
-3560943512,3560943512,DE
-3560943513,3560943513,LU
-3560943514,3560943515,ES
-3560943516,3560943517,DE
-3560943518,3560943518,LU
-3560943519,3560943519,DE
-3560943520,3560943520,DK
-3560943521,3560943521,DE
-3560943522,3560943522,GB
-3560943523,3560943524,DE
-3560943525,3560943525,NL
-3560943526,3560943526,IT
-3560943527,3560943527,DE
-3560943528,3560943528,FR
-3560943529,3560943529,DE
-3560943530,3560943530,CH
-3560943531,3560943532,DE
-3560943533,3560943533,HU
-3560943534,3560943534,BY
-3560943535,3560943535,FR
-3560943536,3560943536,BE
-3560943537,3560943537,DE
-3560943538,3560943538,GB
-3560943539,3560943539,DE
-3560943540,3560943540,BE
-3560943541,3560943541,NL
-3560943542,3560943542,DE
-3560943543,3560943543,NL
-3560943544,3560943544,ES
-3560943545,3560943546,DE
-3560943547,3560943547,SI
-3560943548,3560943548,GB
-3560943549,3560943549,DE
-3560943550,3560943550,HU
-3560943551,3560943551,FR
-3560943552,3560943552,IT
-3560943553,3560943553,DE
-3560943554,3560943554,IS
-3560943555,3560943555,FR
-3560943556,3560943556,DE
-3560943557,3560943557,ES
-3560943558,3560943558,DE
-3560943559,3560943559,GB
-3560943560,3560943562,IT
-3560943563,3560943563,HU
-3560943564,3560943564,DE
-3560943565,3560943565,GB
-3560943566,3560943566,DE
-3560943567,3560943567,FR
-3560943568,3560943568,GB
-3560943569,3560943570,FR
-3560943571,3560943572,DE
-3560943573,3560943573,FR
-3560943574,3560943574,NO
-3560943575,3560943575,BE
-3560943576,3560943576,IT
-3560943577,3560943577,DK
-3560943578,3560943578,ES
-3560943579,3560943580,DE
-3560943581,3560943581,NL
-3560943582,3560943582,DE
-3560943583,3560943583,ES
-3560943584,3560943584,IT
-3560943585,3560943585,FR
-3560943586,3560943586,ES
-3560943587,3560943587,DE
-3560943588,3560943588,IT
-3560943589,3560943589,NL
-3560943590,3560943590,HU
-3560943591,3560943591,AT
-3560943592,3560943592,SK
-3560943593,3560943593,PL
-3560943594,3560943594,FR
-3560943595,3560943596,ES
-3560943597,3560943599,DE
-3560943600,3560943600,AT
-3560943601,3560943602,IT
-3560943603,3560943603,CH
-3560943604,3560943604,ES
-3560943605,3560943605,GB
-3560943606,3560943607,DE
-3560943608,3560943608,IT
-3560943609,3560943610,DE
-3560943611,3560943611,FR
-3560943612,3560943612,DE
+3560941344,3560943366,DE
+3560943367,3560943367,IT
+3560943368,3560943514,DE
+3560943515,3560943515,ES
+3560943516,3560943612,DE
3560943613,3560943613,ES
-3560943614,3560943617,DE
-3560943618,3560943618,FR
-3560943619,3560943620,ES
-3560943621,3560943621,SE
-3560943622,3560943622,BE
-3560943623,3560943623,DE
-3560943624,3560943624,ES
-3560943625,3560943625,DE
-3560943626,3560943626,ES
-3560943627,3560943627,DK
-3560943628,3560943628,DE
-3560943629,3560943629,IT
-3560943630,3560943630,DE
-3560943631,3560943631,HU
-3560943632,3560943632,CH
-3560943633,3560943633,ES
-3560943634,3560943634,FR
+3560943614,3560943634,DE
3560943635,3560943635,ES
-3560943636,3560943636,DE
-3560943637,3560943637,PL
-3560943638,3560943638,IT
-3560943639,3560943639,ES
-3560943640,3560943640,FR
-3560943641,3560943641,DE
-3560943642,3560943643,IT
-3560943644,3560943644,DE
-3560943645,3560943645,GB
-3560943646,3560943646,DE
-3560943647,3560943647,ES
-3560943648,3560943648,DE
-3560943649,3560943649,NL
-3560943650,3560943651,DE
-3560943652,3560943652,AT
-3560943653,3560943653,DE
-3560943654,3560943654,IT
-3560943655,3560943655,DE
-3560943656,3560943656,IT
-3560943657,3560943657,DE
-3560943658,3560943658,GB
-3560943659,3560943659,DE
-3560943660,3560943660,PT
-3560943661,3560943661,DK
-3560943662,3560943662,DE
-3560943663,3560943664,NL
-3560943665,3560943666,DE
-3560943667,3560943667,PL
-3560943668,3560943668,DK
-3560943669,3560943669,FR
-3560943670,3560943671,DE
-3560943672,3560943672,BH
-3560943673,3560943673,SE
-3560943674,3560943674,MA
-3560943675,3560943675,FR
-3560943676,3560943677,DE
-3560943678,3560943680,ES
-3560943681,3560943682,DE
-3560943683,3560943683,GR
-3560943684,3560943684,NL
-3560943685,3560943685,IT
-3560943686,3560943686,FR
-3560943687,3560943687,PT
-3560943688,3560943688,DE
-3560943689,3560943689,PT
-3560943690,3560943690,IT
-3560943691,3560943691,DE
-3560943692,3560943692,SE
-3560943693,3560943693,DE
-3560943694,3560943694,FR
-3560943695,3560943695,DE
-3560943696,3560943697,CH
-3560943698,3560943698,DE
-3560943699,3560943699,IT
-3560943700,3560943700,DE
-3560943701,3560943701,AT
-3560943702,3560943702,DE
-3560943703,3560943703,FR
-3560943704,3560943704,DE
-3560943705,3560943705,CH
-3560943706,3560943706,LI
-3560943707,3560943709,DE
-3560943710,3560943710,NL
-3560943711,3560943711,DE
-3560943712,3560943712,IT
-3560943713,3560943713,PL
-3560943714,3560943714,NL
-3560943715,3560943715,DE
-3560943716,3560943716,GB
-3560943717,3560943717,FR
-3560943718,3560943719,DE
-3560943720,3560943721,IT
-3560943722,3560943726,DE
-3560943727,3560943727,ES
-3560943728,3560943728,GB
-3560943729,3560943729,DE
-3560943730,3560943730,NL
-3560943731,3560943731,IT
-3560943732,3560943732,FR
-3560943733,3560943733,NO
-3560943734,3560943736,DE
-3560943737,3560943737,GR
-3560943738,3560943738,PT
-3560943739,3560943740,DE
-3560943741,3560943741,FR
-3560943742,3560943742,DE
-3560943743,3560943743,PL
-3560943744,3560943744,DE
-3560943745,3560943745,PL
-3560943746,3560943748,DE
-3560943749,3560943749,GB
-3560943750,3560943750,DE
-3560943751,3560943751,IT
-3560943752,3560943752,DE
-3560943753,3560943753,ES
-3560943754,3560943754,HU
-3560943755,3560943755,BE
-3560943756,3560943756,IT
-3560943757,3560943757,DE
-3560943758,3560943758,CZ
-3560943759,3560943759,IE
-3560943760,3560943760,NO
-3560943761,3560943761,GB
-3560943762,3560943762,IT
-3560943763,3560943763,FR
-3560943764,3560943764,DE
-3560943765,3560943765,SE
-3560943766,3560943766,CY
-3560943767,3560943768,DE
-3560943769,3560943769,FR
-3560943770,3560943770,NL
-3560943771,3560943771,IT
-3560943772,3560943774,DE
-3560943775,3560943775,FR
-3560943776,3560943780,DE
-3560943781,3560943781,ES
-3560943782,3560943782,DE
-3560943783,3560943783,BE
-3560943784,3560943786,DE
-3560943787,3560943787,ES
-3560943788,3560943788,DK
-3560943789,3560943789,IT
-3560943790,3560943790,DE
-3560943791,3560943791,IT
-3560943792,3560943793,DE
-3560943794,3560943794,FR
-3560943795,3560943795,DE
-3560943796,3560943796,IT
-3560943797,3560943797,DE
-3560943798,3560943798,DK
-3560943799,3560943799,DE
-3560943800,3560943800,CH
-3560943801,3560943801,FR
-3560943802,3560943802,IT
-3560943803,3560943803,HU
-3560943804,3560943804,ES
-3560943805,3560943805,DE
-3560943806,3560943806,ES
-3560943807,3560943807,DK
-3560943808,3560943810,DE
-3560943811,3560943811,ES
-3560943812,3560943812,IT
-3560943813,3560943813,CH
-3560943814,3560943814,DE
-3560943815,3560943815,IT
-3560943816,3560943817,FR
-3560943818,3560943818,PT
-3560943819,3560943819,DE
-3560943820,3560943820,FR
-3560943821,3560943821,IT
-3560943822,3560943822,DE
-3560943823,3560943823,GR
-3560943824,3560943827,DE
+3560943636,3560943827,DE
3560943828,3560943828,ES
-3560943829,3560943829,NL
-3560943830,3560943830,DK
-3560943831,3560943833,FR
-3560943834,3560943836,DE
-3560943837,3560943837,CH
-3560943838,3560943838,DE
-3560943839,3560943839,NO
-3560943840,3560943840,DE
-3560943841,3560943841,GB
-3560943842,3560943842,DE
+3560943829,3560943842,DE
3560943843,3560943843,GB
-3560943844,3560943844,BE
-3560943845,3560943845,CZ
-3560943846,3560943846,LU
-3560943847,3560943847,CZ
-3560943848,3560943848,FR
-3560943849,3560943849,DE
-3560943850,3560943850,NL
-3560943851,3560943857,DE
-3560943858,3560943858,GB
-3560943859,3560943859,DE
-3560943860,3560943860,GB
-3560943861,3560943865,DE
-3560943866,3560943866,BE
-3560943867,3560943867,ES
-3560943868,3560943868,DE
-3560943869,3560943869,LU
-3560943870,3560943871,DE
-3560943872,3560943875,BR
-3560943876,3560943879,DE
-3560943880,3560943887,US
-3560943888,3560943891,CA
-3560943892,3560943895,DE
-3560943896,3560943899,CL
-3560943900,3560943903,DE
-3560943904,3560943915,US
-3560943916,3560943919,CA
-3560943920,3560943923,US
-3560943924,3560943927,MX
-3560943928,3560943935,US
-3560943936,3560943939,PE
-3560943940,3560943943,DE
-3560943944,3560943947,US
-3560943948,3560943975,DE
-3560943976,3560943979,US
-3560943980,3560943983,DE
+3560943844,3560943907,DE
+3560943908,3560943911,US
+3560943912,3560943983,DE
3560943984,3560943987,US
-3560943988,3560943991,DE
-3560943992,3560943999,US
-3560944000,3560944023,DE
-3560944024,3560944031,US
-3560944032,3560944035,MX
-3560944036,3560944039,US
-3560944040,3560944043,MX
-3560944044,3560944059,DE
-3560944060,3560944063,US
-3560944064,3560944067,DE
-3560944068,3560944071,US
-3560944072,3560944079,DE
-3560944080,3560944083,US
-3560944084,3560944087,CL
-3560944088,3560944103,DE
-3560944104,3560944107,US
-3560944108,3560944119,DE
-3560944120,3560944639,US
-3560944640,3560944643,TR
-3560944644,3560944647,ES
-3560944648,3560944651,TR
-3560944652,3560944655,HU
-3560944656,3560944659,TR
-3560944660,3560944663,DE
-3560944664,3560944667,FR
-3560944668,3560944671,TR
-3560944672,3560944675,KZ
-3560944676,3560944679,GR
-3560944680,3560944687,TR
-3560944688,3560944695,DE
-3560944696,3560944699,TR
-3560944700,3560944703,CU
-3560944704,3560944707,ZW
-3560944708,3560944711,TR
-3560944712,3560944715,IL
-3560944716,3560944719,ZW
-3560944720,3560944723,SK
-3560944724,3560944727,TR
-3560944728,3560944731,KZ
-3560944732,3560944735,TR
-3560944736,3560944743,FR
-3560944744,3560944747,GR
-3560944748,3560944755,TR
-3560944756,3560944759,MZ
-3560944760,3560944767,TR
-3560944768,3560944771,MZ
-3560944772,3560944779,DE
-3560944780,3560944783,ES
-3560944784,3560944787,FR
-3560944788,3560944791,NL
-3560944792,3560944795,ES
-3560944796,3560944799,GB
-3560944800,3560944803,ES
-3560944804,3560944807,FR
-3560944808,3560944811,DE
-3560944812,3560944815,ES
-3560944816,3560944823,IT
-3560944824,3560944827,DE
-3560944828,3560944831,IE
-3560944832,3560944835,DE
-3560944836,3560944839,IT
-3560944840,3560944843,TR
-3560944844,3560944847,DE
-3560944848,3560944855,FR
-3560944856,3560944859,NL
-3560944860,3560944863,DK
-3560944864,3560944871,FR
-3560944872,3560944875,DE
-3560944876,3560944879,ES
-3560944880,3560944883,SA
-3560944884,3560944887,ES
-3560944888,3560944891,CH
-3560944892,3560944895,DE
-3560944896,3560944899,TW
-3560944900,3560944903,SG
-3560944904,3560944907,MY
-3560944908,3560944919,SG
-3560944920,3560944923,MY
-3560944924,3560944927,CN
-3560944928,3560944931,MY
-3560944932,3560944935,SG
-3560944936,3560944943,CN
-3560944944,3560944947,MY
-3560944948,3560944951,SG
-3560944952,3560944955,TW
-3560944956,3560944959,SG
-3560944960,3560944963,IN
-3560944964,3560944967,MY
-3560944968,3560944971,SG
-3560944972,3560944975,CN
-3560944976,3560944987,IN
-3560944988,3560944991,SG
-3560944992,3560944995,MY
-3560944996,3560944999,SG
-3560945000,3560945003,MY
-3560945004,3560945007,IN
-3560945008,3560945011,SG
-3560945012,3560945015,DE
-3560945016,3560945027,IN
-3560945028,3560945031,MY
-3560945032,3560945035,IN
-3560945036,3560945039,CN
-3560945040,3560945043,SG
-3560945044,3560945047,TW
-3560945048,3560945059,IN
-3560945060,3560945063,SG
-3560945064,3560945067,MY
-3560945068,3560945075,IN
-3560945076,3560945083,CN
-3560945084,3560945087,IN
-3560945088,3560945091,DE
-3560945092,3560945095,SG
-3560945096,3560945099,CN
-3560945100,3560945103,SG
-3560945104,3560945107,MY
-3560945108,3560945111,TW
-3560945112,3560945115,SG
-3560945116,3560945119,IN
-3560945120,3560945123,CN
-3560945124,3560945131,SG
-3560945132,3560945135,TW
-3560945136,3560945139,MY
-3560945140,3560945143,SG
-3560945144,3560945147,IN
-3560945148,3560945151,SG
-3560945152,3560945153,DE
-3560945154,3560945156,AU
-3560945157,3560945157,NZ
-3560945158,3560945167,AU
-3560945168,3560945168,DE
-3560945169,3560945169,AU
-3560945170,3560945191,DE
-3560945192,3560945192,AU
-3560945193,3560945194,DE
-3560945195,3560945195,AU
-3560945196,3560945204,DE
-3560945205,3560945205,AU
-3560945206,3560945206,IN
-3560945207,3560945209,AU
-3560945210,3560945227,DE
-3560945228,3560945231,IN
-3560945232,3560945267,DE
-3560945268,3560945271,AU
-3560945272,3560945275,DE
-3560945276,3560945279,AU
-3560945280,3560945355,JP
-3560945356,3560945359,TH
-3560945360,3560945403,JP
-3560945404,3560945407,TH
-3560945408,3560945409,DE
-3560945410,3560945410,MY
-3560945411,3560945411,TW
-3560945412,3560945412,CN
-3560945413,3560945413,SG
-3560945414,3560945414,IN
-3560945415,3560945416,SG
-3560945417,3560945418,CN
-3560945419,3560945419,MY
-3560945420,3560945420,DE
-3560945421,3560945422,SG
-3560945423,3560945423,CN
-3560945424,3560945424,MY
-3560945425,3560945425,IN
-3560945426,3560945426,MY
+3560943988,3560944139,DE
+3560944140,3560944143,US
+3560944144,3560944231,DE
+3560944232,3560944235,US
+3560944236,3560944391,DE
+3560944392,3560944395,US
+3560944396,3560944487,DE
+3560944488,3560944491,CA
+3560944492,3560944567,DE
+3560944568,3560944571,US
+3560944572,3560944607,DE
+3560944608,3560944611,US
+3560944612,3560945164,DE
+3560945165,3560945165,AU
+3560945166,3560945347,DE
+3560945348,3560945351,JP
+3560945352,3560945426,DE
3560945427,3560945427,CN
-3560945428,3560945428,SG
-3560945429,3560945429,TW
-3560945430,3560945430,MY
-3560945431,3560945431,CN
-3560945432,3560945433,IN
-3560945434,3560945434,TW
-3560945435,3560945435,MY
-3560945436,3560945436,CN
-3560945437,3560945437,SG
-3560945438,3560945438,TW
-3560945439,3560945439,SG
-3560945440,3560945440,ID
-3560945441,3560945441,SG
-3560945442,3560945443,IN
-3560945444,3560945447,SG
-3560945448,3560945448,DE
-3560945449,3560945449,IN
-3560945450,3560945450,SG
-3560945451,3560945451,IN
-3560945452,3560945452,DE
-3560945453,3560945453,IN
-3560945454,3560945458,SG
-3560945459,3560945459,TW
-3560945460,3560945461,SG
-3560945462,3560945462,IN
-3560945463,3560945465,SG
-3560945466,3560945466,CN
-3560945467,3560945467,MY
-3560945468,3560945469,SG
-3560945470,3560945470,CN
-3560945471,3560945471,SG
-3560945472,3560945472,CN
-3560945473,3560945473,TW
-3560945474,3560945475,SG
-3560945476,3560945476,CN
-3560945477,3560945477,TW
-3560945478,3560945478,IN
-3560945479,3560945479,SG
-3560945480,3560945481,IN
-3560945482,3560945482,DE
-3560945483,3560945485,MY
-3560945486,3560945487,IN
-3560945488,3560945488,DE
-3560945489,3560945489,MY
-3560945490,3560945490,TH
-3560945491,3560945492,IN
-3560945493,3560945495,DE
-3560945496,3560945496,IN
-3560945497,3560945497,DE
-3560945498,3560945499,IN
-3560945500,3560945500,SG
-3560945501,3560945501,US
-3560945502,3560945502,IN
-3560945503,3560945539,DE
-3560945540,3560945543,SG
-3560945544,3560945551,IN
-3560945552,3560945555,DE
-3560945556,3560945559,IN
-3560945560,3560945563,DE
-3560945564,3560945567,SG
-3560945568,3560945571,DE
-3560945572,3560945575,IN
-3560945576,3560945579,SG
-3560945580,3560945583,MY
-3560945584,3560945587,SG
-3560945588,3560945591,TW
-3560945592,3560945603,SG
-3560945604,3560945607,US
-3560945608,3560945611,IN
-3560945612,3560945619,SG
-3560945620,3560945627,CN
-3560945628,3560945635,SG
-3560945636,3560945639,CN
-3560945640,3560945643,SG
-3560945644,3560945647,MY
-3560945648,3560945651,IN
-3560945652,3560945659,DE
-3560945660,3560945663,IN
-3560945664,3560945667,US
-3560945668,3560945671,BR
+3560945428,3560945671,DE
3560945672,3560945675,US
-3560945676,3560945679,PE
-3560945680,3560945683,BR
-3560945684,3560945691,CO
-3560945692,3560945699,US
-3560945700,3560945703,CO
-3560945704,3560945707,US
-3560945708,3560945711,CO
-3560945712,3560945727,US
-3560945728,3560945731,AR
-3560945732,3560945739,US
-3560945740,3560945743,BR
-3560945744,3560945747,US
-3560945748,3560945751,AR
-3560945752,3560945763,US
-3560945764,3560945767,AR
-3560945768,3560945771,BR
-3560945772,3560945775,CA
-3560945776,3560945787,US
-3560945788,3560945791,CO
-3560945792,3560945795,AR
+3560945676,3560945695,DE
+3560945696,3560945699,US
+3560945700,3560945795,DE
3560945796,3560945799,US
-3560945800,3560945803,BR
-3560945804,3560945807,US
-3560945808,3560945811,CO
-3560945812,3560945815,US
-3560945816,3560945819,AR
-3560945820,3560945823,US
-3560945824,3560945827,BR
-3560945828,3560945835,US
-3560945836,3560945839,CL
-3560945840,3560945843,BR
-3560945844,3560945851,US
-3560945852,3560945855,DE
-3560945856,3560945859,US
-3560945860,3560945863,DE
+3560945800,3560945863,DE
3560945864,3560945867,US
-3560945868,3560945871,DE
-3560945872,3560945875,CA
-3560945876,3560945911,US
-3560945912,3560945915,CA
-3560945916,3560945919,US
-3560945920,3560946017,DE
-3560946018,3560946018,FI
-3560946019,3560946019,CZ
-3560946020,3560946176,DE
-3560946177,3560946189,US
-3560946190,3560946190,AR
-3560946191,3560946194,US
-3560946195,3560946195,PE
-3560946196,3560946196,CA
-3560946197,3560946197,US
-3560946198,3560946198,CA
-3560946199,3560946199,AR
-3560946200,3560946200,US
-3560946201,3560946201,CA
-3560946202,3560946202,DE
-3560946203,3560946203,CA
-3560946204,3560946204,US
-3560946205,3560946205,PE
-3560946206,3560946208,US
+3560945868,3560946208,DE
3560946209,3560946209,CA
-3560946210,3560946212,US
-3560946213,3560946213,CO
-3560946214,3560946214,CA
-3560946215,3560946215,PE
-3560946216,3560946229,US
-3560946230,3560946230,AR
-3560946231,3560946231,US
-3560946232,3560946232,CA
-3560946233,3560946234,US
-3560946235,3560946235,CL
-3560946236,3560946237,US
-3560946238,3560946238,AR
-3560946239,3560946253,US
-3560946254,3560946254,SG
-3560946255,3560946256,US
-3560946257,3560946257,MX
-3560946258,3560946259,US
-3560946260,3560946260,AR
-3560946261,3560946262,US
-3560946263,3560946263,AR
-3560946264,3560946266,US
+3560946210,3560946219,DE
+3560946220,3560946220,US
+3560946221,3560946224,DE
+3560946225,3560946225,US
+3560946226,3560946226,DE
+3560946227,3560946227,US
+3560946228,3560946239,DE
+3560946240,3560946240,US
+3560946241,3560946248,DE
+3560946249,3560946249,US
+3560946250,3560946252,DE
+3560946253,3560946253,US
+3560946254,3560946266,DE
3560946267,3560946267,CA
-3560946268,3560946271,US
-3560946272,3560946272,DE
-3560946273,3560946273,CA
-3560946274,3560946279,US
-3560946280,3560946280,ES
-3560946281,3560946282,US
-3560946283,3560946283,CL
+3560946268,3560946283,DE
3560946284,3560946284,US
-3560946285,3560946285,CO
-3560946286,3560946290,US
-3560946291,3560946291,CA
-3560946292,3560946295,US
-3560946296,3560946296,CL
-3560946297,3560946297,DE
-3560946298,3560946298,US
-3560946299,3560946299,DE
-3560946300,3560946300,CL
-3560946301,3560946311,DE
-3560946312,3560946312,US
-3560946313,3560946317,DE
-3560946318,3560946319,US
-3560946320,3560946320,DE
-3560946321,3560946326,US
-3560946327,3560946327,CA
-3560946328,3560946328,US
-3560946329,3560946329,DO
-3560946330,3560946330,US
-3560946331,3560946331,DO
-3560946332,3560946333,CA
-3560946334,3560946335,US
-3560946336,3560946336,CA
-3560946337,3560946337,DE
-3560946338,3560946338,CA
-3560946339,3560946339,US
-3560946340,3560946340,CL
-3560946341,3560946342,CA
-3560946343,3560946343,DO
-3560946344,3560946344,AR
-3560946345,3560946345,US
-3560946346,3560946346,PE
-3560946347,3560946347,US
-3560946348,3560946361,DE
-3560946362,3560946363,US
-3560946364,3560946367,DE
-3560946368,3560946368,US
-3560946369,3560946372,DE
+3560946285,3560946372,DE
3560946373,3560946373,US
-3560946374,3560946374,DE
-3560946375,3560946375,US
-3560946376,3560946398,DE
-3560946399,3560946399,US
-3560946400,3560946408,DE
-3560946409,3560946409,US
-3560946410,3560946419,DE
-3560946420,3560946420,US
-3560946421,3560946431,DE
-3560946432,3560946443,US
-3560946444,3560946447,BR
-3560946448,3560946451,DE
-3560946452,3560946455,BO
-3560946456,3560946467,US
-3560946468,3560946471,BR
-3560946472,3560946483,US
-3560946484,3560946487,MX
-3560946488,3560946491,US
-3560946492,3560946495,BR
-3560946496,3560946499,VE
-3560946500,3560946503,AR
-3560946504,3560946507,US
-3560946508,3560946511,MX
-3560946512,3560946523,US
-3560946524,3560946527,MX
-3560946528,3560946531,US
-3560946532,3560946535,CA
-3560946536,3560946539,PE
-3560946540,3560946543,US
-3560946544,3560946547,CA
-3560946548,3560946551,US
-3560946552,3560946555,PE
-3560946556,3560946559,US
-3560946560,3560946563,BR
-3560946564,3560946567,US
-3560946568,3560946571,BR
-3560946572,3560946579,US
-3560946580,3560946583,CA
-3560946584,3560946587,US
-3560946588,3560946591,AR
-3560946592,3560946603,US
-3560946604,3560946607,AR
-3560946608,3560946611,BR
-3560946612,3560946623,US
-3560946624,3560946635,MX
-3560946636,3560946643,US
-3560946644,3560946647,AR
-3560946648,3560946651,MX
-3560946652,3560946655,CL
-3560946656,3560946659,BR
-3560946660,3560946663,MX
-3560946664,3560946667,US
-3560946668,3560946671,MX
-3560946672,3560946679,BR
-3560946680,3560946687,US
-3560946688,3560946689,DE
-3560946690,3560946695,US
-3560946696,3560946696,BR
-3560946697,3560946698,US
-3560946699,3560946700,DE
-3560946701,3560946701,CO
-3560946702,3560946706,US
-3560946707,3560946707,VE
-3560946708,3560946708,BR
-3560946709,3560946710,VE
-3560946711,3560946711,US
-3560946712,3560946712,VE
-3560946713,3560946714,US
-3560946715,3560946715,CO
-3560946716,3560946716,US
-3560946717,3560946717,AR
-3560946718,3560946718,US
-3560946719,3560946720,BR
-3560946721,3560946723,CO
-3560946724,3560946724,MX
-3560946725,3560946729,US
-3560946730,3560946730,MX
-3560946731,3560946733,US
-3560946734,3560946734,PR
-3560946735,3560946747,US
-3560946748,3560946748,DE
-3560946749,3560946760,US
-3560946761,3560946761,DE
-3560946762,3560946767,US
-3560946768,3560946768,CA
-3560946769,3560946769,US
-3560946770,3560946825,DE
-3560946826,3560946826,US
-3560946827,3560946835,DE
-3560946836,3560946836,US
-3560946837,3560946839,DE
-3560946840,3560946840,US
-3560946841,3560946943,DE
-3560946944,3560947199,US
+3560946374,3560946751,DE
+3560946752,3560946752,US
+3560946753,3560947059,DE
+3560947060,3560947063,US
+3560947064,3560947075,DE
+3560947076,3560947079,US
+3560947080,3560947159,DE
+3560947160,3560947163,PR
+3560947164,3560947167,US
+3560947168,3560947199,DE
3560947200,3560947203,CA
-3560947204,3560947207,US
-3560947208,3560947211,DE
-3560947212,3560947231,US
-3560947232,3560947235,CA
-3560947236,3560947239,CO
-3560947240,3560947247,US
-3560947248,3560947251,CA
-3560947252,3560947267,US
-3560947268,3560947271,CO
-3560947272,3560947275,US
-3560947276,3560947279,AR
-3560947280,3560947283,MX
-3560947284,3560947287,US
-3560947288,3560947291,BR
-3560947292,3560947331,US
-3560947332,3560947335,MX
-3560947336,3560947343,US
-3560947344,3560947347,MX
-3560947348,3560947351,CO
-3560947352,3560947355,US
-3560947356,3560947359,CW
-3560947360,3560947363,US
-3560947364,3560947367,HN
-3560947368,3560947371,BR
-3560947372,3560947375,CA
-3560947376,3560947383,US
-3560947384,3560947391,CO
-3560947392,3560947395,MX
-3560947396,3560947399,US
-3560947400,3560947407,AR
-3560947408,3560947411,US
-3560947412,3560947415,AR
-3560947416,3560947431,US
-3560947432,3560947435,MX
-3560947436,3560947439,DE
-3560947440,3560947443,BR
-3560947444,3560947455,US
-3560947456,3560947495,JP
-3560947496,3560947499,KR
-3560947500,3560947663,JP
-3560947664,3560947667,DE
-3560947668,3560947686,JP
-3560947687,3560947687,DE
-3560947688,3560947711,JP
-3560947712,3560950839,SE
-3560950840,3560950843,CZ
-3560950844,3560950847,FI
-3560950848,3560950863,SE
-3560950864,3560950867,DK
-3560950868,3560950871,ES
-3560950872,3560950956,SE
-3560950957,3560950958,PL
-3560950959,3560951027,SE
-3560951028,3560951031,DK
-3560951032,3560951039,SE
-3560951040,3560951043,NO
-3560951044,3560951083,SE
-3560951084,3560951087,DK
-3560951088,3560951088,SE
-3560951089,3560951090,PL
-3560951091,3560951091,SE
-3560951092,3560951095,IT
-3560951096,3560951103,SE
-3560951104,3560951107,DE
-3560951108,3560951111,DK
-3560951112,3560951115,FR
-3560951116,3560951119,SE
-3560951120,3560951123,CZ
-3560951124,3560951127,GB
-3560951128,3560951131,SE
-3560951132,3560951135,ES
-3560951136,3560951143,SE
-3560951144,3560951147,BR
-3560951148,3560951155,SE
-3560951156,3560951159,US
-3560951160,3560951195,SE
-3560951196,3560951199,DK
-3560951200,3560951203,SE
-3560951204,3560951207,AE
-3560951208,3560951211,DK
-3560951212,3560951215,IT
-3560951216,3560951307,SE
-3560951308,3560951311,IT
-3560951312,3560951376,SE
-3560951377,3560951378,PL
-3560951379,3560951380,SE
-3560951381,3560951382,FI
-3560951383,3560951383,SE
-3560951384,3560951387,NO
-3560951388,3560951388,SE
-3560951389,3560951390,PT
-3560951391,3560951391,SE
-3560951392,3560951395,IT
-3560951396,3560951399,DE
-3560951400,3560951403,SE
-3560951404,3560951407,NO
-3560951408,3560951423,SE
-3560951424,3560951427,NL
-3560951428,3560951431,DK
-3560951432,3560951435,SE
-3560951436,3560951439,DK
-3560951440,3560951440,SE
-3560951441,3560951442,JP
-3560951443,3560951444,SE
-3560951445,3560951446,HU
-3560951447,3560951447,SE
-3560951448,3560951451,FR
-3560951452,3560951459,SE
-3560951460,3560951463,FI
-3560951464,3560951551,SE
-3560951552,3560951555,ES
-3560951556,3560951559,NO
-3560951560,3560951583,SE
-3560951584,3560951587,FI
-3560951588,3560951591,SE
-3560951592,3560951595,NO
-3560951596,3560951599,CZ
-3560951600,3560951679,SE
-3560951680,3560951683,DE
-3560951684,3560951759,SE
-3560951760,3560951763,DK
-3560951764,3560951767,HU
-3560951768,3560951807,SE
-3560951808,3560951811,US
-3560951812,3560951816,SE
-3560951817,3560951818,ES
-3560951819,3560951820,SE
-3560951821,3560951822,IT
-3560951823,3560951831,SE
-3560951832,3560951835,DE
-3560951836,3560951915,SE
-3560951916,3560951919,PL
-3560951920,3560951935,SE
-3560951936,3560951939,NL
-3560951940,3560951943,SE
-3560951944,3560951947,NO
-3560951948,3560951995,SE
-3560951996,3560951999,US
-3560952000,3560952039,SE
-3560952040,3560952043,FI
-3560952044,3560952223,SE
-3560952224,3560952227,CZ
-3560952228,3560952231,SE
-3560952232,3560952235,US
-3560952236,3560952239,PT
-3560952240,3560952255,SE
-3560952256,3560952259,PL
-3560952260,3560952295,SE
-3560952296,3560952299,NL
-3560952300,3560952431,SE
-3560952432,3560952435,DK
-3560952436,3560953103,SE
-3560953104,3560953119,JP
-3560953120,3560955903,SE
+3560947204,3560947259,DE
+3560947260,3560947263,US
+3560947264,3560947299,DE
+3560947300,3560947303,US
+3560947304,3560947515,DE
+3560947516,3560947519,JP
+3560947520,3560947711,DE
+3560947712,3560955903,SE
3560955904,3560964095,BE
3560964096,3560996863,NL
3560996864,3561005055,GB
3561005056,3561013247,ES
3561013248,3561021439,TR
-3561021440,3561021695,EU
+3561021440,3561021695,AT
3561021696,3561022463,DE
-3561022464,3561022719,EU
-3561022720,3561022975,AT
+3561022464,3561022975,AT
3561022976,3561037823,DE
-3561037824,3561039231,BE
-3561039232,3561039263,NL
-3561039264,3561039327,BE
-3561039328,3561039330,NL
-3561039331,3561046015,BE
+3561037824,3561046015,BE
3561046016,3561054207,RU
3561054208,3561062399,MT
3561062400,3561070591,TR
-3561070592,3561070847,DE
-3561070848,3561078783,CH
+3561070592,3561078783,CH
3561078784,3561095167,CZ
3561095168,3561103359,DE
3561103360,3561111551,UA
-3561111552,3561113855,LU
-3561113856,3561113856,EU
-3561113857,3561119743,LU
+3561111552,3561119743,LU
3561119744,3561127935,IT
3561127936,3561136127,DE
3561136128,3561144319,ES
@@ -162713,9 +85469,7 @@
3561185280,3561193471,GB
3561193472,3561201663,PL
3561201664,3561209855,NL
-3561209856,3561214975,GB
-3561214976,3561215231,ES
-3561215232,3561218047,GB
+3561209856,3561218047,GB
3561218048,3561226239,AT
3561226240,3561234431,FI
3561234432,3561242623,TR
@@ -162733,167 +85487,52 @@
3561357312,3561365503,DK
3561365504,3561373695,SA
3561373696,3561381887,GB
-3561381888,3561382479,AT
-3561382480,3561382495,DE
-3561382496,3561390079,AT
-3561390080,3561395455,BG
-3561395456,3561395711,GR
-3561395712,3561398271,BG
+3561381888,3561390079,AT
+3561390080,3561398271,BG
3561398272,3561406463,LV
3561406464,3561414655,GR
3561414656,3561422847,IT
-3561422848,3561427207,BE
-3561427208,3561427211,NL
-3561427212,3561428135,BE
-3561428136,3561428143,NL
-3561428144,3561429279,BE
-3561429280,3561429287,NL
-3561429288,3561431039,BE
+3561422848,3561431039,BE
3561431040,3561439231,SA
3561439232,3561447423,NO
3561447424,3561455615,CH
-3561455616,3561471231,CZ
-3561471232,3561471295,PL
-3561471296,3561471999,CZ
+3561455616,3561471999,CZ
3561472000,3561480191,DE
3561480192,3561488383,GB
3561488384,3561496575,OM
-3561496576,3561496831,NL
-3561496832,3561496887,GB
-3561496888,3561496891,NL
-3561496892,3561496955,GB
-3561496956,3561496959,NL
-3561496960,3561497087,GB
-3561497088,3561497423,NL
-3561497424,3561497471,GB
-3561497472,3561497535,NL
-3561497536,3561497599,GB
-3561497600,3561498239,NL
-3561498240,3561498399,GB
-3561498400,3561498431,NL
-3561498432,3561498487,GB
-3561498488,3561498491,NL
-3561498492,3561498495,GB
-3561498496,3561498559,NL
-3561498560,3561498607,GB
-3561498608,3561498615,NL
-3561498616,3561498623,GB
-3561498624,3561500703,NL
-3561500704,3561500719,GB
-3561500720,3561500751,NL
-3561500752,3561500763,GB
-3561500764,3561500767,NL
-3561500768,3561500775,GB
-3561500776,3561501311,NL
-3561501312,3561501343,GB
-3561501344,3561501375,NL
-3561501376,3561501407,GB
-3561501408,3561501443,NL
-3561501444,3561501487,GB
-3561501488,3561501503,NL
-3561501504,3561501535,GB
-3561501536,3561501631,NL
-3561501632,3561501695,GB
-3561501696,3561502047,NL
-3561502048,3561502079,GB
-3561502080,3561502143,NL
-3561502144,3561502207,GB
-3561502208,3561502631,NL
-3561502632,3561502655,GB
-3561502656,3561504287,NL
-3561504288,3561504383,GB
-3561504384,3561504767,NL
+3561496576,3561502719,GB
+3561502720,3561503743,NL
+3561503744,3561504767,GB
3561504768,3561512959,DE
3561512960,3561521151,SI
3561521152,3561529343,GE
-3561529344,3561534559,DE
-3561534560,3561534575,US
-3561534576,3561537535,DE
+3561529344,3561537535,DE
3561537536,3561545727,BG
3561545728,3561553919,NL
3561553920,3561562111,SE
3561562112,3561570303,ES
3561570304,3561578495,AM
3561578496,3561586687,RU
-3561586688,3561590591,BG
-3561590592,3561590623,CY
-3561590624,3561594879,BG
-3561594880,3561594935,SE
-3561594936,3561594939,DK
-3561594940,3561594975,SE
-3561594976,3561595007,DK
-3561595008,3561603071,SE
-3561603072,3561603263,FR
-3561603264,3561603295,GB
-3561603296,3561604911,FR
-3561604912,3561604927,GB
-3561604928,3561604959,FR
-3561604960,3561605119,GB
-3561605120,3561607231,FR
-3561607232,3561607235,GB
-3561607236,3561607239,FR
-3561607240,3561607247,GB
-3561607248,3561607343,FR
-3561607344,3561607359,GB
-3561607360,3561607679,FR
-3561607680,3561607711,GB
-3561607712,3561610239,FR
-3561610240,3561610495,US
-3561610496,3561610497,FR
-3561610498,3561610511,GB
-3561610512,3561610527,FR
-3561610528,3561610559,GB
-3561610560,3561610663,FR
-3561610664,3561610671,GB
-3561610672,3561611311,FR
-3561611312,3561611327,GB
-3561611328,3561611391,FR
-3561611392,3561611519,GB
-3561611520,3561612415,FR
-3561612416,3561613311,GB
-3561613312,3561613319,FR
-3561613320,3561613343,GB
-3561613344,3561613407,FR
-3561613408,3561613439,GB
-3561613440,3561613471,FR
-3561613472,3561613503,GB
-3561613504,3561613567,FR
-3561613568,3561614175,GB
-3561614176,3561614199,FR
-3561614200,3561614335,GB
-3561614336,3561614847,FR
-3561614848,3561615359,GB
-3561615360,3561615615,FR
-3561615616,3561615871,IT
-3561615872,3561616639,FR
-3561616640,3561616767,GB
-3561616768,3561616959,FR
-3561616960,3561617151,GB
-3561617152,3561617407,FR
-3561617408,3561617663,FI
-3561617664,3561617919,LU
-3561617920,3561618175,SE
-3561618176,3561618431,IE
-3561618432,3561618687,DK
-3561618688,3561618815,FR
-3561618816,3561618943,PL
+3561586688,3561594879,BG
+3561594880,3561603071,SE
+3561603072,3561604351,GB
+3561604352,3561604607,FR
+3561604608,3561607391,GB
+3561607392,3561607423,FR
+3561607424,3561609215,GB
+3561609216,3561609471,FR
+3561609472,3561616639,GB
+3561616640,3561616895,FR
+3561616896,3561618943,GB
3561618944,3561619455,ES
-3561619456,3561640575,GB
-3561640576,3561640831,FR
-3561640832,3561641450,GB
+3561619456,3561641450,GB
3561641451,3561641451,FR
3561641452,3561652223,GB
3561652224,3561668607,CH
-3561668608,3561679359,RU
-3561679360,3561679615,UA
-3561679616,3561684991,RU
+3561668608,3561684991,RU
3561684992,3561693183,BG
-3561693184,3561694487,DE
-3561694488,3561694495,CH
-3561694496,3561701375,DE
-3561701376,3561706031,SE
-3561706032,3561706047,DK
-3561706048,3561709567,SE
+3561693184,3561701375,DE
+3561701376,3561709567,SE
3561709568,3561717759,PL
3561717760,3561725951,RU
3561725952,3561734143,ES
@@ -162904,11 +85543,14 @@
3561775104,3561783295,IL
3561783296,3561799679,RU
3561799680,3561807871,DE
-3561807872,3561815295,BE
-3561815296,3561815551,LU
-3561815552,3561816063,BE
-3561816064,3561823999,VA
-3561824000,3561824255,IT
+3561807872,3561808895,BE
+3561808896,3561809151,LU
+3561809152,3561814271,BE
+3561814272,3561814527,LU
+3561814528,3561815039,BE
+3561815040,3561815295,LU
+3561815296,3561816063,BE
+3561816064,3561824255,VA
3561824256,3561832447,LI
3561832448,3561840639,IT
3561840640,3561848831,PL
@@ -162919,108 +85561,27 @@
3561881600,3561889791,IT
3561889792,3561897983,FR
3561897984,3561906175,GB
-3561906176,3561907759,DE
-3561907760,3561907763,GB
-3561907764,3561909891,DE
-3561909892,3561909895,GB
-3561909896,3561910207,DE
-3561910208,3561910223,GB
-3561910224,3561914367,DE
+3561906176,3561914367,DE
3561914368,3561922559,ES
-3561922560,3561922815,NL
-3561922816,3561922847,GB
-3561922848,3561922863,NL
-3561922864,3561922871,FR
-3561922872,3561922927,GB
-3561922928,3561922943,NL
-3561922944,3561922991,GB
-3561922992,3561923015,NL
-3561923016,3561923063,GB
-3561923064,3561923067,NL
-3561923068,3561923071,GB
-3561923072,3561923327,NL
-3561923328,3561923403,GB
-3561923404,3561923407,NL
-3561923408,3561923423,GB
-3561923424,3561923519,NL
-3561923520,3561923535,GB
-3561923536,3561923551,NL
-3561923552,3561923647,GB
-3561923648,3561923679,NL
-3561923680,3561923839,GB
-3561923840,3561924175,NL
-3561924176,3561924183,GB
-3561924184,3561924215,NL
-3561924216,3561924223,GB
-3561924224,3561924351,NL
-3561924352,3561924607,GB
-3561924608,3561924631,NL
-3561924632,3561924655,GB
-3561924656,3561924663,NL
-3561924664,3561924679,GB
-3561924680,3561924687,NL
-3561924688,3561924703,GB
-3561924704,3561924719,NL
-3561924720,3561924895,GB
-3561924896,3561924903,FR
-3561924904,3561924911,GB
-3561924912,3561924927,NL
-3561924928,3561924943,GB
-3561924944,3561925039,NL
-3561925040,3561925103,GB
-3561925104,3561925631,NL
-3561925632,3561926943,GB
-3561926944,3561926975,NL
-3561926976,3561926983,GB
-3561926984,3561926999,NL
-3561927000,3561927015,GB
-3561927016,3561927039,NL
-3561927040,3561927103,GB
-3561927104,3561927167,NL
-3561927168,3561927551,GB
-3561927552,3561929727,NL
-3561929728,3561929791,GB
-3561929792,3561929823,NL
-3561929824,3561929855,CH
-3561929856,3561929879,GB
-3561929880,3561929903,NL
-3561929904,3561929967,GB
-3561929968,3561930239,NL
-3561930240,3561930495,GB
-3561930496,3561930511,NL
-3561930512,3561930519,BE
-3561930520,3561930527,FR
-3561930528,3561930535,CH
-3561930536,3561930543,GB
-3561930544,3561930551,FR
-3561930552,3561930575,NL
-3561930576,3561930583,DE
-3561930584,3561930599,NL
-3561930600,3561930615,GB
-3561930616,3561930671,NL
-3561930672,3561930679,GB
-3561930680,3561930719,NL
-3561930720,3561930727,GB
-3561930728,3561938943,NL
-3561938944,3561939832,IE
-3561939833,3561939835,GB
-3561939836,3561940991,IE
+3561922560,3561925023,GB
+3561925024,3561925039,NL
+3561925040,3561925343,GB
+3561925344,3561925375,NL
+3561925376,3561929967,GB
+3561929968,3561929983,NL
+3561929984,3561930751,GB
+3561930752,3561938943,NL
+3561938944,3561940991,IE
3561940992,3561942015,GB
-3561942016,3561942847,IE
-3561942848,3561942911,GB
-3561942912,3561947135,IE
+3561942016,3561947135,IE
3561947136,3561963519,DE
3561963520,3561971711,BE
3561971712,3561975807,CZ
3561975808,3561979903,UA
3561979904,3561988095,ES
3561988096,3562004479,DE
-3562004480,3562010495,NL
-3562010496,3562010623,DE
-3562010624,3562012671,NL
-3562012672,3562020095,IR
-3562020096,3562020351,AE
-3562020352,3562020863,IR
+3562004480,3562012671,NL
+3562012672,3562020863,IR
3562020864,3562029055,UA
3562029056,3562037247,CZ
3562037248,3562045439,CH
@@ -163035,54 +85596,23 @@
3562057472,3562057727,DE
3562057728,3562057975,ES
3562057976,3562057983,FR
-3562057984,3562058303,ES
-3562058304,3562058367,IT
-3562058368,3562059327,ES
+3562057984,3562059327,ES
3562059328,3562059335,CH
3562059336,3562059391,ES
-3562059392,3562059775,CH
-3562059776,3562061823,ES
-3562061824,3562070015,IT
+3562059392,3562059519,CH
+3562059520,3562061823,ES
3562070016,3562078207,DE
3562078208,3562086399,SK
3562086400,3562087423,SE
3562087424,3562088447,GB
3562088448,3562094591,SE
-3562094592,3562095607,GB
-3562095608,3562095615,FR
-3562095616,3562096063,GB
-3562096064,3562096127,FR
-3562096128,3562098367,GB
-3562098368,3562098375,FR
-3562098376,3562101471,GB
-3562101472,3562101479,FR
-3562101480,3562101631,GB
-3562101632,3562101639,FR
-3562101640,3562104991,GB
-3562104992,3562104999,FR
-3562105000,3562105599,GB
-3562105600,3562105855,FR
-3562105856,3562106879,GB
-3562106880,3562107135,FR
-3562107136,3562107231,GB
-3562107232,3562107263,FR
-3562107264,3562107519,GB
-3562107520,3562107583,FR
-3562107584,3562108959,GB
-3562108960,3562108975,FR
-3562108976,3562109567,GB
-3562109568,3562109583,FR
-3562109584,3562110399,GB
-3562110400,3562110431,FR
-3562110432,3562110463,GB
-3562110464,3562110719,FR
-3562110720,3562110975,GB
+3562094592,3562106879,GB
+3562106880,3562106911,FR
+3562106912,3562110975,GB
3562110976,3562143743,ES
3562143744,3562151935,GB
3562151936,3562160127,DE
-3562160128,3562161151,GB
-3562161152,3562161183,NL
-3562161184,3562169343,GB
+3562160128,3562169343,GB
3562169344,3562170367,CH
3562170368,3562172415,IE
3562172416,3562173951,CH
@@ -163093,32 +85623,18 @@
3562192896,3562201087,UA
3562201088,3562209279,DE
3562209280,3562217471,RU
-3562217472,3562221311,DE
-3562221312,3562221567,CH
-3562221568,3562225151,DE
-3562225152,3562225159,CH
-3562225160,3562225663,DE
+3562217472,3562225663,DE
3562225664,3562233855,NL
3562233856,3562242047,FI
3562242048,3562258431,FR
-3562258432,3562263975,NL
-3562263976,3562263983,BE
-3562263984,3562283007,NL
+3562258432,3562283007,NL
3562283008,3562285055,IT
3562285056,3562287103,IE
3562287104,3562289151,IT
3562289152,3562291199,FR
3562291200,3562307583,GB
3562307584,3562315775,NL
-3562315776,3562321231,GB
-3562321232,3562321239,BE
-3562321240,3562322743,GB
-3562322744,3562322751,GG
-3562322752,3562323135,GB
-3562323136,3562323143,BE
-3562323144,3562323951,GB
-3562323952,3562323959,GG
-3562323960,3562323967,GB
+3562315776,3562323967,GB
3562323968,3562340351,DE
3562340352,3562348543,GB
3562348544,3562356735,ES
@@ -163126,12 +85642,7 @@
3562364928,3562373119,PL
3562373120,3562381311,FR
3562381312,3562389503,SI
-3562389504,3562395647,GH
-3562395648,3562395903,BR
-3562395904,3562396159,TZ
-3562396160,3562396927,SZ
-3562396928,3562397183,GH
-3562397184,3562397695,SZ
+3562389504,3562397695,GH
3562397696,3562405887,GB
3562405888,3562414079,FI
3562414080,3562422271,DE
@@ -163144,20 +85655,19 @@
3562487808,3562495999,GB
3562496000,3562504191,BE
3562504192,3562512383,DE
-3562512384,3562520575,UA
+3562512384,3562519551,UA
+3562519552,3562520575,BG
3562528768,3562536959,PL
3562536960,3562545151,AT
3562545152,3562553343,GB
3562553344,3562561535,DK
3562561536,3562569727,UG
-3562569728,3562577919,DE
+3562569728,3562572543,DE
+3562572544,3562572799,LU
+3562572800,3562577919,DE
3562577920,3562586111,AT
3562586112,3562594303,DE
-3562594304,3562595423,BE
-3562595424,3562595455,LU
-3562595456,3562598207,BE
-3562598208,3562598223,LU
-3562598224,3562602495,BE
+3562594304,3562602495,BE
3562602496,3562610687,ES
3562610688,3562618879,NO
3562618880,3562627071,GB
@@ -163168,22 +85678,17 @@
3562668032,3562676223,IT
3562676224,3562684415,UA
3562684416,3562692607,FI
-3562692608,3562700799,UA
3562700800,3562708991,DE
3562708992,3562717183,UA
3562717184,3562725375,CH
3562725376,3562733567,CZ
-3562733568,3562738695,PL
-3562738696,3562738703,IT
-3562738704,3562741759,PL
+3562733568,3562741759,PL
3562741760,3562758143,IT
3562758144,3562766335,HR
3562766336,3562774527,SE
3562774528,3562782719,BG
3562782720,3562790911,RU
-3562790912,3562797951,DE
-3562797952,3562797967,CH
-3562797968,3562799103,DE
+3562790912,3562799103,DE
3562799104,3562807295,HU
3562807296,3562815487,ES
3562815488,3562823679,NL
@@ -163205,27 +85710,11 @@
3562971136,3562987519,FR
3562987520,3562995711,DE
3562995712,3563003903,AT
-3563003904,3563005183,DE
-3563005184,3563005311,KZ
-3563005312,3563005439,DE
-3563005440,3563005695,TR
-3563005696,3563005951,DE
-3563005952,3563006463,TR
-3563006464,3563006591,DE
-3563006592,3563006719,CA
-3563006720,3563007487,DE
-3563007488,3563007999,TR
-3563008000,3563008255,DE
+3563003904,3563008255,DE
3563008256,3563008511,PL
-3563008512,3563009279,DE
-3563009280,3563009535,LT
-3563009536,3563009791,DE
-3563009792,3563010047,HK
-3563010048,3563010815,DE
+3563008512,3563010815,DE
3563010816,3563011071,PL
-3563011072,3563011583,DE
-3563011584,3563011839,ES
-3563011840,3563012095,DE
+3563011072,3563012095,DE
3563012096,3563020287,FR
3563020288,3563028479,DE
3563028480,3563036671,IR
@@ -163237,20 +85726,9 @@
3563067392,3563068415,MZ
3563068416,3563069439,NG
3563069440,3563077631,HU
-3563077632,3563079679,KZ
-3563079680,3563085823,SE
+3563077632,3563085823,KZ
3563085824,3563094015,RU
-3563094016,3563096255,DE
-3563096256,3563096287,GB
-3563096288,3563097087,DE
-3563097088,3563097119,GB
-3563097120,3563097151,DE
-3563097152,3563097183,GB
-3563097184,3563097215,DE
-3563097216,3563097247,GB
-3563097248,3563097311,DE
-3563097312,3563097343,GB
-3563097344,3563102207,DE
+3563094016,3563102207,DE
3563102208,3563110399,CZ
3563110400,3563118591,RU
3563118592,3563126783,PL
@@ -163258,42 +85736,30 @@
3563134976,3563143167,IT
3563143168,3563151359,GB
3563151360,3563159551,DE
-3563159552,3563163647,DK
-3563163648,3563164159,SE
-3563164160,3563167743,DK
+3563159552,3563167743,DK
3563167744,3563175935,ES
3563175936,3563192319,DK
3563192320,3563200511,TR
3563200512,3563208703,CH
-3563208704,3563210751,DK
-3563210752,3563211007,DE
-3563211008,3563211639,DK
-3563211640,3563211647,DE
-3563211648,3563212799,DK
-3563212800,3563212807,DE
-3563212808,3563212847,DK
-3563212848,3563212895,GB
-3563212896,3563220123,DK
-3563220124,3563220127,A2
-3563220128,3563225087,DK
+3563208704,3563225087,DK
3563225088,3563233279,LB
3563233280,3563241471,BY
3563241472,3563257855,TR
-3563257856,3563290623,FR
+3563257856,3563268351,FR
+3563268352,3563268607,BE
+3563268608,3563290623,FR
3563290624,3563315199,DE
3563315200,3563323391,DK
-3563323392,3563329791,GB
-3563329792,3563331583,EU
+3563323648,3563329791,GB
3563331584,3563339775,DE
3563339776,3563347967,NG
-3563347968,3563356159,GB
+3563347968,3563348991,GB
+3563348992,3563353087,FI
+3563353088,3563356159,GB
3563356160,3563364351,RU
3563364352,3563372543,BE
3563372544,3563380735,SA
-3563380736,3563382583,GB
-3563382584,3563382587,AT
-3563382588,3563382589,DE
-3563382590,3563388927,GB
+3563380736,3563388927,GB
3563388928,3563397119,CH
3563397120,3563405311,DE
3563405312,3563407871,ES
@@ -163311,16 +85777,9 @@
3563503616,3563511807,GB
3563511808,3563519999,DE
3563520000,3563528191,FR
-3563528192,3563536383,DE
-3563536384,3563539087,CH
-3563539088,3563539095,US
-3563539096,3563539119,CH
-3563539120,3563539135,DE
-3563539136,3563544575,CH
+3563536384,3563544575,CH
3563544576,3563552767,RU
-3563552768,3563554727,SI
-3563554728,3563554735,DE
-3563554736,3563560959,SI
+3563552768,3563560959,SI
3563560960,3563569151,EG
3563569152,3563577343,IT
3563577344,3563585535,GB
@@ -163341,158 +85800,17 @@
3563741184,3563749375,GB
3563749376,3563765759,PL
3563765760,3563782143,ES
-3563782144,3563790335,GR
3563790336,3563798527,EE
-3563798528,3563800447,FR
-3563800448,3563800463,GB
-3563800464,3563800495,FR
-3563800496,3563800511,GB
-3563800512,3563800607,FR
-3563800608,3563800623,GB
-3563800624,3563800767,FR
-3563800768,3563800783,GB
-3563800784,3563800911,FR
-3563800912,3563800927,GB
-3563800928,3563800943,FR
-3563800944,3563800991,GB
-3563800992,3563801135,FR
-3563801136,3563801151,DE
-3563801152,3563801183,FR
-3563801184,3563801199,DE
-3563801200,3563801279,FR
-3563801280,3563801295,NL
-3563801296,3563801375,FR
-3563801376,3563801391,GB
-3563801392,3563801407,IT
-3563801408,3563801423,DE
-3563801424,3563801455,FR
-3563801456,3563801519,GB
-3563801520,3563801551,FR
-3563801552,3563801567,GB
-3563801568,3563801599,FR
-3563801600,3563801631,GB
-3563801632,3563801647,FR
-3563801648,3563801743,GB
-3563801744,3563801775,FR
-3563801776,3563801791,BE
-3563801792,3563801839,FR
-3563801840,3563801855,GB
-3563801856,3563801871,FR
-3563801872,3563801887,GB
-3563801888,3563801922,FR
-3563801923,3563801935,GB
-3563801936,3563802015,FR
-3563802016,3563802031,BE
-3563802032,3563802047,FR
-3563802048,3563802063,IT
-3563802064,3563802207,FR
-3563802208,3563802223,GB
-3563802224,3563802255,FR
-3563802256,3563802271,GB
-3563802272,3563802303,FR
-3563802304,3563802319,IT
-3563802320,3563802447,FR
-3563802448,3563802463,GB
-3563802464,3563802623,FR
-3563802624,3563802655,GB
-3563802656,3563802735,FR
-3563802736,3563802751,US
-3563802752,3563802783,GB
-3563802784,3563803007,FR
-3563803008,3563803023,GB
-3563803024,3563803039,FR
-3563803040,3563803055,GB
-3563803056,3563803119,FR
-3563803120,3563803135,NL
-3563803136,3563803151,FR
-3563803152,3563803167,GB
-3563803168,3563803183,FR
-3563803184,3563803215,GB
-3563803216,3563803247,FR
-3563803248,3563803263,GB
-3563803264,3563803279,FR
-3563803280,3563803295,GB
-3563803296,3563803311,FR
-3563803312,3563803327,GB
-3563803328,3563803359,FR
-3563803360,3563803423,GB
-3563803424,3563803439,FR
-3563803440,3563803455,DE
-3563803456,3563803487,GB
-3563803488,3563803503,US
-3563803504,3563803519,GB
-3563803520,3563803631,FR
-3563803632,3563803647,GB
-3563803648,3563803967,FR
-3563803968,3563803983,BE
-3563803984,3563804695,FR
-3563804696,3563804703,GB
-3563804704,3563804719,FR
-3563804720,3563804727,GB
-3563804728,3563806543,FR
-3563806544,3563806559,DE
-3563806560,3563806687,FR
-3563806688,3563806703,DE
-3563806704,3563806719,FR
+3563798528,3563806719,FR
3563806720,3563814911,SA
3563814912,3563823103,SE
3563823104,3563831295,DE
3563831296,3563847679,RU
-3563847680,3563848231,NL
-3563848232,3563848239,GB
-3563848240,3563848319,NL
-3563848320,3563848327,GB
-3563848328,3563848383,NL
-3563848384,3563848447,GB
-3563848448,3563848847,NL
-3563848848,3563848855,EU
-3563848856,3563848979,NL
-3563848980,3563848983,GB
-3563848984,3563848987,NL
-3563848988,3563848991,GB
-3563848992,3563849151,NL
-3563849152,3563849183,GB
-3563849184,3563849207,NL
-3563849208,3563849727,GB
-3563849728,3563849999,NL
-3563850000,3563850007,FI
-3563850008,3563850239,NL
-3563850240,3563850751,GB
-3563850752,3563851007,NL
-3563851008,3563851135,GB
-3563851136,3563852031,NL
-3563852032,3563852071,GB
-3563852072,3563852079,NL
-3563852080,3563852095,GB
-3563852096,3563852191,NL
-3563852192,3563852207,GB
-3563852208,3563852216,NL
-3563852217,3563852223,GB
-3563852224,3563852543,NL
-3563852544,3563853311,GB
-3563853312,3563853315,NL
-3563853316,3563853319,GB
-3563853320,3563853567,NL
-3563853568,3563854079,GB
-3563854080,3563854095,NL
-3563854096,3563854103,GB
-3563854104,3563854143,NL
-3563854144,3563854175,GB
-3563854176,3563854191,NL
-3563854192,3563854207,GB
-3563854208,3563854215,NL
-3563854216,3563854223,GB
-3563854224,3563854259,NL
-3563854260,3563854263,GB
-3563854264,3563854271,NL
-3563854272,3563854591,GB
-3563854592,3563854847,NL
-3563854848,3563855359,GB
-3563855360,3563855487,NL
-3563855488,3563855551,GB
-3563855552,3563855583,NL
-3563855584,3563855615,GB
-3563855616,3563855871,US
+3563847680,3563848447,NL
+3563848448,3563848703,ES
+3563848704,3563848847,NL
+3563848848,3563848855,ES
+3563848856,3563855871,NL
3563855872,3563864063,AT
3563864064,3563872255,GB
3563872256,3563880447,RU
@@ -163500,11 +85818,7 @@
3563884652,3563884652,TR
3563884653,3563888639,CY
3563888640,3563896831,DE
-3563896832,3563899903,HU
-3563899904,3563900159,SK
-3563900160,3563900415,HU
-3563900416,3563900671,SK
-3563900672,3563913215,HU
+3563896832,3563913215,HU
3563913216,3563921407,RU
3563921408,3563929599,UA
3563929600,3563937791,CH
@@ -163516,119 +85830,43 @@
3563970560,3563978751,TR
3563978752,3563995135,IT
3563995136,3564003327,MK
-3564003328,3564008191,DE
-3564008192,3564008223,CH
-3564008224,3564011519,DE
+3564003328,3564011519,DE
3564011520,3564019711,UA
-3564019712,3564021247,GB
-3564021248,3564021279,IT
-3564021280,3564022687,GB
-3564022688,3564022719,RU
-3564022720,3564024095,GB
-3564024096,3564024103,IT
-3564024104,3564024135,GB
-3564024136,3564024143,IT
-3564024144,3564024191,GB
-3564024192,3564024207,IT
-3564024208,3564024639,GB
-3564024640,3564024671,IT
-3564024672,3564027903,GB
-3564027904,3564036351,DE
-3564036352,3564039423,A2
-3564039424,3564039679,DE
-3564039680,3564041215,A2
-3564041216,3564041727,RU
-3564041728,3564043263,A2
-3564043264,3564043519,DE
-3564043520,3564044287,A2
+3564019712,3564023807,GB
+3564023808,3564024831,IT
+3564024832,3564027903,GB
+3564027904,3564044287,DE
3564044288,3564052479,CZ
3564052480,3564060671,GB
3564060672,3564068863,RU
3564068864,3564077055,ES
3564077056,3564093439,GB
3564093440,3564101631,UA
-3564101632,3564103743,DE
-3564103744,3564103759,A2
-3564103760,3564109823,DE
+3564101632,3564109823,DE
3564109824,3564126207,SE
-3564126208,3564128287,IT
-3564128288,3564128303,BG
-3564128304,3564129727,IT
+3564126208,3564129727,IT
3564129728,3564129743,PH
-3564129744,3564130655,IT
-3564130656,3564130671,IN
-3564130672,3564134399,IT
-3564134400,3564141055,KG
-3564141056,3564141311,US
-3564141312,3564142591,KG
-3564142592,3564146175,DE
-3564146176,3564150783,DK
-3564150784,3564152607,SE
-3564152608,3564152639,NO
-3564152640,3564153087,SE
-3564153088,3564153151,NO
-3564153152,3564153183,SE
-3564153184,3564153343,NO
-3564153344,3564155151,SE
-3564155152,3564155159,NO
-3564155160,3564156415,SE
-3564156416,3564156419,NO
-3564156420,3564156919,SE
-3564156920,3564156927,FI
-3564156928,3564157207,SE
-3564157208,3564157215,NO
-3564157216,3564158831,SE
+3564129744,3564134399,IT
+3564134400,3564142591,KG
+3564142592,3564150783,DK
+3564150784,3564158831,SE
3564158832,3564158839,FI
3564158840,3564158975,SE
-3564158976,3564161855,DE
-3564161856,3564161891,NL
-3564161892,3564165119,DE
-3564165120,3564165439,NL
-3564165440,3564175359,DE
+3564158976,3564175359,DE
3564175360,3564183551,GB
-3564183552,3564185087,UA
-3564185088,3564185160,DE
-3564185161,3564185161,UA
-3564185162,3564185343,DE
-3564185344,3564191743,UA
+3564183552,3564191743,UA
3564191744,3564199935,BE
3564199936,3564208127,RU
-3564208128,3564212735,GB
-3564212736,3564213007,IE
-3564213008,3564216319,GB
+3564208128,3564216319,GB
3564216320,3564224511,PT
3564224512,3564232703,GB
-3564232704,3564240895,RU
-3564240896,3564241407,TJ
-3564241408,3564249087,RU
-3564249088,3564260735,DE
-3564260736,3564260863,NL
-3564260864,3564265471,DE
+3564232704,3564249087,RU
+3564249088,3564265471,DE
3564265472,3564273663,NL
-3564273664,3564302655,DE
-3564302656,3564302687,BE
-3564302688,3564306431,DE
+3564273664,3564306431,DE
3564306432,3564314623,TR
-3564314624,3564322815,GB
3564322816,3564331007,IT
-3564331008,3564339199,ES
-3564339200,3564339991,GB
-3564339992,3564339999,NL
-3564340000,3564344031,GB
-3564344032,3564344047,NL
-3564344048,3564344207,GB
-3564344208,3564344215,NL
-3564344216,3564345143,GB
-3564345144,3564345151,NL
-3564345152,3564349615,GB
-3564349616,3564349631,NL
-3564349632,3564350399,GB
-3564350400,3564350431,NL
-3564350432,3564351551,GB
-3564351552,3564351615,NL
-3564351616,3564353207,GB
-3564353208,3564353215,NL
-3564353216,3564355583,GB
+3564339200,3564355583,GB
3564355584,3564363775,NL
3564363776,3564371967,UA
3564371968,3564380159,DE
@@ -163637,12 +85875,8 @@
3564396544,3564404735,RU
3564404736,3564412927,BG
3564412928,3564421119,IL
-3564421120,3564428185,SA
-3564428186,3564428186,A2
-3564428187,3564429311,SA
-3564429312,3564431567,KZ
-3564431568,3564431583,AF
-3564431584,3564437503,KZ
+3564421120,3564429311,SA
+3564429312,3564437503,KZ
3564437504,3564445695,LT
3564445696,3564453887,BG
3564453888,3564462079,DE
@@ -163650,169 +85884,18 @@
3564470272,3564478463,IL
3564478464,3564486655,LU
3564486656,3564494847,CH
-3564494848,3564494907,GB
-3564494908,3564494911,FR
-3564494912,3564495103,GB
-3564495104,3564495167,DE
-3564495168,3564495203,GB
-3564495204,3564495615,EU
-3564495616,3564495743,GB
-3564495744,3564495871,EU
-3564495872,3564495927,GB
-3564495928,3564495935,EU
-3564495936,3564496111,GB
-3564496112,3564496127,EU
-3564496128,3564496175,GB
-3564496176,3564496183,EU
-3564496184,3564496199,GB
-3564496200,3564496207,EU
-3564496208,3564496215,GB
-3564496216,3564496223,EU
-3564496224,3564496263,GB
-3564496264,3564496271,EU
-3564496272,3564496319,GB
-3564496320,3564496327,FR
-3564496328,3564496335,EU
-3564496336,3564496607,GB
-3564496608,3564496639,EU
-3564496640,3564496655,GB
-3564496656,3564496671,EU
-3564496672,3564496847,GB
-3564496848,3564496863,FR
-3564496864,3564496895,GB
-3564496896,3564498943,EU
-3564498944,3564499007,NL
-3564499008,3564499055,GB
-3564499056,3564499199,EU
-3564499200,3564499215,NL
-3564499216,3564499231,DK
-3564499232,3564499239,NL
-3564499240,3564499247,EU
-3564499248,3564499335,GB
-3564499336,3564499455,EU
-3564499456,3564499551,NL
-3564499552,3564499711,GB
-3564499712,3564500991,EU
-3564500992,3564500999,SE
-3564501000,3564501247,EU
-3564501248,3564501263,DE
-3564501264,3564501279,SE
-3564501280,3564501311,GB
-3564501312,3564501503,EU
-3564501504,3564501507,SE
-3564501508,3564501511,DE
-3564501512,3564501759,EU
-3564501760,3564501887,DE
-3564501888,3564502527,EU
-3564502528,3564502559,DE
-3564502560,3564502591,GB
-3564502592,3564503039,EU
3564503040,3564511231,JO
3564511232,3564519423,RU
3564519424,3564527615,SI
3564527616,3564543999,SA
3564544000,3564560383,DE
-3564560384,3564560531,GB
-3564560532,3564560532,EU
-3564560533,3564560895,GB
-3564560896,3564560911,US
-3564560912,3564561151,GB
-3564561152,3564561407,US
-3564561408,3564561663,GB
-3564561664,3564561671,US
-3564561672,3564561679,GB
-3564561680,3564561687,US
-3564561688,3564561695,GB
-3564561696,3564561791,US
-3564561792,3564561855,GB
-3564561856,3564561919,US
-3564561920,3564562431,CH
-3564562432,3564562687,GB
-3564562688,3564562831,US
-3564562832,3564562847,GB
-3564562848,3564562943,US
-3564562944,3564563711,GB
-3564563712,3564563967,GB
-3564563968,3564564223,GB
-3564564224,3564564239,US
-3564564240,3564564351,GB
-3564564352,3564564415,US
-3564564416,3564564419,GB
-3564564420,3564564427,US
-3564564428,3564564447,GB
-3564564448,3564564479,US
-3564564480,3564565247,GB
-3564565248,3564565279,US
-3564565280,3564565327,GB
-3564565328,3564565384,US
-3564565385,3564565385,GB
-3564565386,3564565439,US
-3564565440,3564565567,GB
-3564565568,3564565631,US
-3564565632,3564565663,GB
-3564565664,3564565679,US
-3564565680,3564565695,GB
-3564565696,3564565711,US
-3564565712,3564565727,GB
-3564565728,3564565759,US
-3564565760,3564566047,GB
-3564566048,3564566079,US
-3564566080,3564566143,GB
-3564566144,3564566175,US
-3564566176,3564566239,GB
-3564566240,3564566527,US
-3564566528,3564567047,GB
-3564567048,3564567055,US
-3564567056,3564567079,GB
-3564567080,3564567095,US
-3564567096,3564567143,GB
-3564567144,3564567151,US
-3564567152,3564567183,GB
-3564567184,3564567199,US
-3564567200,3564567247,GB
-3564567248,3564567255,US
-3564567256,3564567295,GB
-3564567296,3564567551,US
-3564567552,3564567807,GB
-3564567808,3564567935,US
-3564567936,3564568039,GB
-3564568040,3564568063,US
-3564568064,3564568223,GB
-3564568224,3564568231,US
-3564568232,3564568255,GB
-3564568256,3564568319,US
-3564568320,3564571055,GB
-3564571056,3564571071,DE
-3564571072,3564571391,GB
-3564571392,3564571455,FR
-3564571456,3564571479,GB
-3564571480,3564571487,FR
-3564571488,3564571511,GB
-3564571512,3564571519,FR
-3564571520,3564571567,GB
-3564571568,3564571583,FR
-3564571584,3564571591,GB
-3564571592,3564571599,FR
-3564571600,3564571647,GB
-3564571648,3564571679,DE
-3564571680,3564571775,GB
-3564571776,3564571823,DE
-3564571824,3564571839,GB
-3564571840,3564571903,DE
-3564571904,3564572415,GB
-3564572416,3564572427,DE
+3564560384,3564571695,GB
+3564571696,3564571703,DE
+3564571704,3564572427,GB
3564572428,3564572431,ES
-3564572432,3564572543,DE
-3564572544,3564573183,GB
-3564573184,3564573311,FR
-3564573312,3564573695,GB
-3564573696,3564574079,DE
-3564574080,3564574975,GB
-3564574976,3564575231,DE
-3564575232,3564575487,GB
-3564575488,3564575615,DE
-3564575616,3564576767,GB
-3564576768,3564584959,RU
+3564572432,3564572527,GB
+3564572528,3564572531,DK
+3564572532,3564576767,GB
3564584960,3564593151,SA
3564593152,3564601343,RU
3564601344,3564609535,EE
@@ -163820,80 +85903,26 @@
3564634112,3564642303,MK
3564642304,3564650495,CH
3564650496,3564666879,NL
-3564666880,3564668927,IE
-3564668928,3564669183,EU
-3564669184,3564669407,IE
-3564669408,3564669439,GB
-3564669440,3564670207,IE
-3564670208,3564670239,GB
-3564670240,3564673023,IE
-3564673024,3564673055,GB
-3564673056,3564673135,IE
-3564673136,3564673215,GB
-3564673216,3564673535,IE
-3564673536,3564673663,GB
-3564673664,3564673791,IE
-3564673792,3564673807,GB
-3564673808,3564673823,IE
-3564673824,3564673839,GB
-3564673840,3564674047,IE
-3564674048,3564674431,GB
-3564674432,3564675071,IE
+3564666880,3564675071,IE
3564675072,3564683263,RU
3564683264,3564691455,IR
3564691456,3564699647,GI
3564699648,3564716031,GB
3564716032,3564724223,IT
3564724224,3564732415,NL
-3564732416,3564733183,DE
-3564733184,3564733439,GB
-3564733440,3564734207,DE
-3564734208,3564734463,EU
-3564734464,3564734815,DE
-3564734816,3564734823,GB
-3564734824,3564734847,DE
-3564734848,3564734975,GB
-3564734976,3564736511,DE
-3564736512,3564736527,GB
-3564736528,3564736583,DE
-3564736584,3564736603,GB
-3564736604,3564736607,DE
-3564736608,3564736611,GB
-3564736612,3564736623,DE
-3564736624,3564736631,GB
-3564736632,3564736871,DE
-3564736872,3564736887,GB
-3564736888,3564736895,DE
-3564736896,3564736903,GB
-3564736904,3564736927,DE
-3564736928,3564736959,GB
-3564736960,3564736967,DE
-3564736968,3564736975,GB
-3564736976,3564736991,DE
-3564736992,3564737023,GB
-3564737024,3564739335,DE
-3564739336,3564739343,GB
-3564739344,3564739383,DE
-3564739384,3564739391,ES
-3564739392,3564739495,DE
-3564739496,3564739503,GB
-3564739504,3564739519,AT
-3564739520,3564739807,GB
-3564739808,3564739815,DE
-3564739816,3564739823,GB
-3564739824,3564740351,DE
-3564740352,3564740383,GB
-3564740384,3564740455,DE
-3564740456,3564740459,GB
-3564740460,3564740479,DE
-3564740480,3564740495,GB
-3564740496,3564740503,DE
-3564740504,3564740527,GB
-3564740528,3564740591,DE
-3564740592,3564740595,GB
-3564740596,3564740599,DE
-3564740600,3564740603,GB
-3564740604,3564740607,DE
+3564732416,3564733183,GB
+3564733184,3564733215,DE
+3564733216,3564734457,GB
+3564734458,3564734458,DE
+3564734459,3564734741,GB
+3564734742,3564734742,DE
+3564734743,3564734743,GB
+3564734744,3564734751,DE
+3564734752,3564736535,GB
+3564736536,3564736543,DE
+3564736544,3564739345,GB
+3564739346,3564739346,DE
+3564739347,3564740607,GB
3564740608,3564748799,FR
3564748800,3564756991,GB
3564756992,3564765183,ES
@@ -163905,452 +85934,73 @@
3564806144,3564814335,BG
3564814336,3564822527,PL
3564822528,3564830719,EG
-3564830720,3564831487,BE
-3564831488,3564831743,EU
-3564831744,3564832511,BE
-3564832512,3564832767,EU
-3564832768,3564838911,BE
+3564830720,3564838911,BE
3564838912,3564847103,DE
3564847104,3564855295,IT
-3564855296,3564862863,DE
-3564862864,3564862871,AE
-3564862872,3564863487,DE
-3564863488,3564880127,NL
-3564880128,3564880383,GB
-3564880384,3564880895,NL
-3564880896,3564880911,GB
-3564880912,3564880927,NL
-3564880928,3564880943,GB
-3564880944,3564880951,NL
-3564880952,3564880967,FR
-3564880968,3564880975,NL
-3564880976,3564881103,GB
-3564881104,3564881159,NL
-3564881160,3564881199,GB
-3564881200,3564881203,FR
-3564881204,3564881231,GB
-3564881232,3564881247,NL
-3564881248,3564881343,GB
-3564881344,3564881359,NL
-3564881360,3564881407,GB
-3564881408,3564881439,NL
-3564881440,3564881455,GB
-3564881456,3564881463,NL
-3564881464,3564881471,GB
-3564881472,3564881551,NL
-3564881552,3564881663,GB
-3564881664,3564881727,NL
-3564881728,3564881935,GB
-3564881936,3564881939,NL
-3564881940,3564881999,GB
-3564882000,3564882079,NL
-3564882080,3564882143,GB
-3564882144,3564882239,NL
-3564882240,3564882431,GB
-3564882432,3564882687,EU
-3564882688,3564883007,GB
-3564883008,3564883039,NL
-3564883040,3564883071,GB
-3564883072,3564883087,NL
-3564883088,3564883199,GB
-3564883200,3564883711,NL
-3564883712,3564884223,GB
-3564884224,3564884255,NL
-3564884256,3564884303,GB
-3564884304,3564884319,NL
-3564884320,3564884359,GB
-3564884360,3564884367,NL
-3564884368,3564884407,GB
-3564884408,3564884415,NL
-3564884416,3564884431,GB
-3564884432,3564884439,NL
-3564884440,3564884455,GB
-3564884456,3564884463,NL
-3564884464,3564884487,GB
-3564884488,3564884519,NL
-3564884520,3564884527,FR
-3564884528,3564884552,NL
-3564884553,3564884559,GB
-3564884560,3564884567,NL
-3564884568,3564884735,GB
-3564884736,3564885039,NL
-3564885040,3564885215,GB
-3564885216,3564885231,NL
-3564885232,3564885247,GB
-3564885248,3564885343,NL
-3564885344,3564885359,GB
-3564885360,3564885367,NL
-3564885368,3564885487,GB
-3564885488,3564885495,NL
-3564885496,3564885503,GB
-3564885504,3564885543,NL
-3564885544,3564885551,BE
-3564885552,3564885559,NL
-3564885560,3564885567,GB
-3564885568,3564885599,NL
-3564885600,3564885647,GB
-3564885648,3564885663,NL
-3564885664,3564885727,FR
-3564885728,3564885743,NL
-3564885744,3564885791,GB
-3564885792,3564885799,NL
-3564885800,3564885839,GB
-3564885840,3564885855,NL
-3564885856,3564885871,GB
-3564885872,3564885887,NL
-3564885888,3564885919,GB
-3564885920,3564885935,NL
-3564885936,3564885951,GB
-3564885952,3564885967,NL
-3564885968,3564885999,GB
-3564886000,3564886031,NL
-3564886032,3564886063,GB
-3564886064,3564886079,NL
-3564886080,3564886175,GB
-3564886176,3564886191,NL
-3564886192,3564886271,GB
-3564886272,3564886527,NL
-3564886528,3564886655,GB
-3564886656,3564886751,NL
-3564886752,3564887039,GB
-3564887040,3564888063,NL
-3564888064,3564888079,GB
-3564888080,3564888095,CH
-3564888096,3564888127,NL
-3564888128,3564888143,GB
-3564888144,3564888183,NL
-3564888184,3564888223,GB
-3564888224,3564888255,NL
-3564888256,3564888271,GB
-3564888272,3564888327,NL
-3564888328,3564888351,GB
-3564888352,3564888367,NL
-3564888368,3564888383,FR
-3564888384,3564888447,NL
-3564888448,3564888463,GB
-3564888464,3564888479,DE
-3564888480,3564888495,NL
-3564888496,3564888511,GB
-3564888512,3564888527,DE
-3564888528,3564888559,NL
-3564888560,3564888575,GB
-3564888576,3564888591,NL
-3564888592,3564888607,GB
-3564888608,3564888615,NL
-3564888616,3564888623,GB
-3564888624,3564888655,NL
-3564888656,3564888663,BE
-3564888664,3564888671,NL
-3564888672,3564888735,BE
-3564888736,3564888815,NL
-3564888816,3564888831,GB
-3564888832,3564888959,NL
-3564888960,3564889023,GB
-3564889024,3564889087,NL
-3564889088,3564889135,GB
-3564889136,3564889167,NL
-3564889168,3564889215,GB
-3564889216,3564889311,NL
-3564889312,3564889375,GB
-3564889376,3564889471,NL
-3564889472,3564889511,GB
-3564889512,3564889519,NL
-3564889520,3564889535,GB
-3564889536,3564889599,NL
-3564889600,3564889615,GB
-3564889616,3564889623,DE
-3564889624,3564889639,NL
-3564889640,3564889647,GB
-3564889648,3564889695,NL
-3564889696,3564889727,DE
-3564889728,3564889759,NL
-3564889760,3564889807,GB
-3564889808,3564889823,BE
-3564889824,3564889839,GB
-3564889840,3564889847,NL
-3564889848,3564889887,GB
-3564889888,3564889919,NL
-3564889920,3564889983,GB
-3564889984,3564890111,NL
-3564890112,3564890191,GB
-3564890192,3564890207,NL
-3564890208,3564890231,GB
-3564890232,3564890271,NL
-3564890272,3564890303,GB
-3564890304,3564890367,NL
-3564890368,3564890399,FR
-3564890400,3564890527,NL
-3564890528,3564890535,BE
-3564890536,3564890543,NL
-3564890544,3564890567,GB
-3564890568,3564890579,NL
-3564890580,3564890591,GB
-3564890592,3564890623,NL
-3564890624,3564890631,BE
-3564890632,3564890639,GB
-3564890640,3564890655,NL
-3564890656,3564890663,IE
-3564890664,3564890703,NL
-3564890704,3564890735,GB
-3564890736,3564890751,NL
-3564890752,3564890799,GB
-3564890800,3564890815,NL
-3564890816,3564890831,GB
-3564890832,3564890847,BE
-3564890848,3564890879,GB
-3564890880,3564890943,NL
-3564890944,3564890991,BE
-3564890992,3564891023,NL
-3564891024,3564891263,GB
-3564891264,3564891295,NL
-3564891296,3564891391,GB
-3564891392,3564891903,NL
-3564891904,3564892415,GB
-3564892416,3564892927,NL
-3564892928,3564893039,GB
-3564893040,3564893055,NL
-3564893056,3564893695,GB
-3564893696,3564893759,NL
-3564893760,3564894207,GB
+3564855296,3564863487,DE
+3564863488,3564879871,NL
+3564879872,3564879935,GB
+3564879936,3564879999,NL
+3564880000,3564880651,GB
+3564880652,3564880655,NL
+3564880656,3564880945,GB
+3564880946,3564880946,NL
+3564880947,3564882015,GB
+3564882016,3564882031,NL
+3564882032,3564883071,GB
+3564883072,3564883079,NL
+3564883080,3564883199,GB
+3564883200,3564883455,NL
+3564883456,3564886719,GB
+3564886720,3564886751,NL
+3564886752,3564889633,GB
+3564889634,3564889634,NL
+3564889635,3564892735,GB
+3564892736,3564892751,NL
+3564892752,3564894207,GB
3564894208,3564895743,NL
3564895744,3564896255,GB
3564896256,3564904447,RU
3564904448,3564912639,DE
3564912640,3564920831,BG
-3564920832,3564921855,DE
-3564921856,3564929023,US
+3564920832,3564922111,DE
+3564922112,3564929023,US
3564929024,3564937215,AT
-3564937216,3564945407,RS
-3564945408,3564947175,GB
-3564947176,3564947183,FR
-3564947184,3564948063,GB
-3564948064,3564948071,IE
-3564948072,3564948319,GB
-3564948320,3564948351,IE
-3564948352,3564953647,GB
-3564953648,3564953651,CH
-3564953652,3564953727,GB
-3564953728,3564953743,AT
-3564953744,3564953744,GB
-3564953745,3564953759,AT
-3564953760,3564953791,GB
-3564953792,3564953855,AT
-3564953856,3564954111,GB
-3564954112,3564954131,AT
-3564954132,3564954139,GB
-3564954140,3564954143,AT
-3564954144,3564954155,GB
-3564954156,3564954159,AT
-3564954160,3564954175,DE
-3564954176,3564954183,AT
-3564954184,3564954191,CH
-3564954192,3564954211,AT
-3564954212,3564954231,GB
-3564954232,3564954239,AT
-3564954240,3564954303,GB
-3564954304,3564954311,AT
-3564954312,3564954367,GB
-3564954368,3564954383,AT
-3564954384,3564954415,GB
-3564954416,3564954431,DE
-3564954432,3564956160,GB
-3564956161,3564956671,AT
-3564956672,3564956967,GB
-3564956968,3564956971,CH
-3564956972,3564956975,US
-3564956976,3564956979,GB
-3564956980,3564956991,AT
-3564956992,3564956999,GB
-3564957000,3564957007,AT
-3564957008,3564957023,GB
-3564957024,3564957039,AT
-3564957040,3564957087,GB
-3564957088,3564957255,AT
-3564957256,3564957263,GB
-3564957264,3564957439,AT
-3564957440,3564957447,GB
-3564957448,3564957455,CH
-3564957456,3564957459,AT
-3564957460,3564957471,GB
-3564957472,3564957499,AT
-3564957500,3564957503,GB
-3564957504,3564957507,AT
-3564957508,3564957511,GB
-3564957512,3564957519,AT
-3564957520,3564957527,GB
-3564957528,3564957531,AT
-3564957532,3564957547,GB
-3564957548,3564957551,AT
-3564957552,3564957559,GB
-3564957560,3564957591,AT
-3564957592,3564957595,GB
-3564957596,3564957599,AT
-3564957600,3564957607,GB
-3564957608,3564957615,AT
-3564957616,3564957619,GB
-3564957620,3564957631,AT
-3564957632,3564957663,GB
-3564957664,3564957671,AT
-3564957672,3564957679,GB
-3564957680,3564957695,AT
-3564957696,3564957855,GB
-3564957856,3564957859,ES
-3564957860,3564957863,AT
-3564957864,3564957867,IT
-3564957868,3564957871,AT
-3564957872,3564957891,GB
-3564957892,3564957903,AT
-3564957904,3564957911,GB
-3564957912,3564957919,AT
-3564957920,3564957951,GB
-3564957952,3564957967,AT
-3564957968,3564957987,GB
-3564957988,3564958015,AT
-3564958016,3564958111,GB
-3564958112,3564958143,AT
-3564958144,3564958147,GB
-3564958148,3564958155,AT
-3564958156,3564958159,GB
-3564958160,3564958179,AT
-3564958180,3564958183,US
-3564958184,3564958191,AT
-3564958192,3564958207,GB
-3564958208,3564958463,AT
-3564958464,3564958487,GB
-3564958488,3564958591,AT
-3564958592,3564958719,GB
-3564958720,3564958799,AT
-3564958800,3564958807,GB
-3564958808,3564958847,AT
-3564958848,3564958911,GB
-3564958912,3564958975,AT
-3564958976,3564959007,NL
-3564959008,3564959055,AT
-3564959056,3564959075,GB
-3564959076,3564959091,AT
-3564959092,3564959095,GB
-3564959096,3564959103,AT
-3564959104,3564959119,GB
-3564959120,3564959127,AT
-3564959128,3564959135,GB
-3564959136,3564959155,AT
-3564959156,3564959191,GB
-3564959192,3564959195,AT
-3564959196,3564959199,GB
-3564959200,3564959227,AT
-3564959228,3564959231,GB
-3564959232,3564959359,AT
-3564959360,3564959383,GB
-3564959384,3564959391,AT
-3564959392,3564959399,SA
-3564959400,3564959407,AT
-3564959408,3564959423,CH
-3564959424,3564959443,GB
-3564959444,3564959451,AT
-3564959452,3564959455,FR
-3564959456,3564959471,GB
-3564959472,3564959479,AT
-3564959480,3564959487,GB
-3564959488,3564959495,AT
-3564959496,3564959499,GB
-3564959500,3564959519,AT
-3564959520,3564959535,GB
-3564959536,3564959551,AT
-3564959552,3564959567,GB
-3564959568,3564959579,AT
-3564959580,3564959583,GB
-3564959584,3564959615,AT
-3564959616,3564959623,GB
-3564959624,3564959639,AT
-3564959640,3564959655,GB
-3564959656,3564959663,CH
-3564959664,3564959679,AT
-3564959680,3564959695,GB
-3564959696,3564959711,AT
-3564959712,3564959755,GB
-3564959756,3564959759,AT
-3564959760,3564959775,GB
-3564959776,3564959807,AT
-3564959808,3564959839,GB
-3564959840,3564959903,AT
-3564959904,3564959904,GB
-3564959905,3564959967,AT
-3564959968,3564959999,GB
-3564960000,3564960127,AT
-3564960128,3564960135,DE
-3564960136,3564960159,GB
-3564960160,3564960195,AT
-3564960196,3564960211,GB
-3564960212,3564960223,AT
-3564960224,3564960231,GB
-3564960232,3564960511,AT
-3564960512,3564960543,GB
-3564960544,3564960559,AT
-3564960560,3564960615,GB
-3564960616,3564960623,FR
-3564960624,3564960631,GB
-3564960632,3564960639,AT
-3564960640,3564960767,GB
-3564960768,3564960879,AT
-3564960880,3564960927,GB
-3564960928,3564960959,AT
-3564960960,3564960991,GB
-3564960992,3564961007,AT
-3564961008,3564961023,GB
-3564961024,3564961079,AT
-3564961080,3564961151,GB
-3564961152,3564961311,AT
-3564961312,3564961319,GB
-3564961320,3564961791,AT
+3564937216,3564945407,IT
+3564945408,3564953599,GB
+3564953600,3564954879,AT
+3564954880,3564955903,GB
+3564955904,3564956671,AT
+3564956672,3564956927,GB
+3564956928,3564960959,AT
+3564960960,3564960975,GB
+3564960976,3564961791,AT
3564961792,3564969983,TR
-3564969984,3564972607,DE
-3564972608,3564972623,AT
-3564972624,3564972631,DE
-3564972632,3564972639,LI
-3564972640,3564978175,DE
+3564969984,3564978175,DE
3564978176,3564986367,GB
3564986368,3564994559,DE
3564994560,3565002751,NL
-3565002752,3565007247,NO
-3565007248,3565007251,SE
-3565007252,3565012663,NO
-3565012664,3565012667,SE
-3565012668,3565027327,NO
+3565002752,3565027327,NO
3565027328,3565035519,PL
3565035520,3565036287,IE
-3565036288,3565036543,GB
-3565036544,3565037119,IE
-3565037120,3565037135,GB
-3565037136,3565037343,IE
-3565037344,3565037567,GB
-3565037568,3565037823,IE
-3565037824,3565038591,GB
-3565038592,3565038859,IE
-3565038860,3565038863,GB
-3565038864,3565038943,IE
-3565038944,3565038951,GB
-3565038952,3565039087,IE
-3565039088,3565039615,GB
-3565039616,3565042199,IE
-3565042200,3565042207,GB
-3565042208,3565042255,IE
-3565042256,3565043711,GB
-3565043712,3565045263,AT
-3565045264,3565045279,SK
-3565045280,3565045311,DE
-3565045312,3565047807,AT
-3565047808,3565048063,LI
-3565048064,3565051903,AT
+3565036288,3565037055,GB
+3565037056,3565037311,IE
+3565037312,3565038079,GB
+3565038080,3565038335,IE
+3565038336,3565038879,GB
+3565038880,3565038895,IE
+3565038896,3565039103,GB
+3565039104,3565039359,IE
+3565039360,3565039615,GB
+3565039616,3565041663,IE
+3565041664,3565043711,GB
+3565043712,3565051903,AT
3565051904,3565060095,IQ
3565060096,3565068287,GB
3565068288,3565076479,CH
3565076480,3565084671,DE
3565084672,3565092863,IS
-3565092864,3565096759,GB
-3565096760,3565096767,IE
-3565096768,3565097151,GB
-3565097152,3565097167,TZ
-3565097168,3565101055,GB
+3565092864,3565101055,GB
3565101056,3565109247,DE
3565109248,3565117439,PL
3565117440,3565125631,TR
@@ -164360,296 +86010,96 @@
3565240320,3565248511,IE
3565248512,3565256703,RU
3565256704,3565289471,NL
-3565289472,3565344039,DK
-3565344040,3565344047,DE
-3565344048,3565355007,DK
+3565289472,3565355007,DK
3565355008,3565420543,IT
-3565420544,3565486079,GB
-3565486080,3565486335,IE
+3565420544,3565486335,GB
3565486336,3565486975,FR
3565486976,3565487615,NL
-3565487616,3565487871,SE
-3565487872,3565488127,SK
-3565488128,3565488383,GB
-3565488384,3565488639,ES
-3565488640,3565488895,GB
-3565488896,3565489535,DE
-3565489536,3565489791,GB
-3565489792,3565489823,DE
-3565489824,3565490175,GB
-3565490176,3565490431,NL
-3565490432,3565491199,GB
-3565491200,3565491215,FR
-3565491216,3565491455,GB
-3565491456,3565491711,IT
-3565491712,3565491839,GB
-3565491840,3565491903,IT
-3565491904,3565491967,NL
-3565491968,3565492295,GB
-3565492296,3565492303,IE
-3565492304,3565492319,GB
-3565492320,3565492327,DE
-3565492328,3565492335,GB
-3565492336,3565492351,FR
-3565492352,3565492479,GB
-3565492480,3565492607,NL
-3565492608,3565492639,GB
-3565492640,3565492655,FR
-3565492656,3565492671,GB
-3565492672,3565492735,IT
-3565492736,3565492991,CH
-3565492992,3565493247,NL
-3565493248,3565493583,GB
-3565493584,3565493591,DE
-3565493592,3565493679,GB
-3565493680,3565493687,FR
-3565493688,3565493759,GB
-3565493760,3565493775,NL
-3565493776,3565493983,GB
-3565493984,3565494055,DE
-3565494056,3565494063,GB
-3565494064,3565494079,NL
-3565494080,3565494143,GB
-3565494144,3565494271,DE
-3565494272,3565494527,IS
-3565494528,3565494543,GB
-3565494544,3565494551,IT
-3565494552,3565494559,DE
-3565494560,3565494591,GB
-3565494592,3565494655,FR
-3565494656,3565494671,SE
-3565494672,3565494687,DE
-3565494688,3565494703,SE
-3565494704,3565494719,DK
-3565494720,3565494735,GB
-3565494736,3565494743,CA
-3565494744,3565495295,GB
-3565495296,3565496447,FR
-3565496448,3565496511,DE
-3565496512,3565496575,US
-3565496576,3565496831,GB
-3565496832,3565497087,IT
-3565497088,3565497103,GB
-3565497104,3565497119,IE
-3565497120,3565497151,DE
-3565497152,3565497159,IE
-3565497160,3565497167,US
-3565497168,3565497199,GB
-3565497200,3565497207,IT
-3565497208,3565497215,GB
-3565497216,3565497279,CZ
-3565497280,3565497287,NL
-3565497288,3565497343,GB
-3565497344,3565497599,US
-3565497600,3565497871,GB
-3565497872,3565497887,DE
-3565497888,3565497903,GB
-3565497904,3565497911,IE
-3565497912,3565497919,DE
-3565497920,3565497927,PR
-3565497928,3565497951,GB
-3565497952,3565497967,US
-3565497968,3565498111,GB
-3565498112,3565498367,NL
-3565498368,3565498431,FR
-3565498432,3565498479,US
-3565498480,3565498519,GB
-3565498520,3565498527,ZA
-3565498528,3565499815,GB
-3565499816,3565499823,FR
-3565499824,3565500479,GB
-3565500480,3565500543,DE
-3565500544,3565500567,GB
-3565500568,3565500575,IE
-3565500576,3565500591,GB
-3565500592,3565500599,DE
-3565500600,3565500607,GB
-3565500608,3565500623,FR
-3565500624,3565501095,GB
-3565501096,3565501103,FR
-3565501104,3565501119,FI
-3565501120,3565501231,GB
-3565501232,3565501247,DE
-3565501248,3565501311,GB
-3565501312,3565501439,DE
-3565501440,3565501679,GB
-3565501680,3565501695,IE
-3565501696,3565502207,GB
-3565502208,3565502239,IT
-3565502240,3565502463,GB
+3565487616,3565495295,GB
+3565495296,3565496319,FR
+3565496320,3565502463,GB
3565502464,3565503487,NL
-3565503488,3565503999,GB
-3565504000,3565504511,NL
-3565504512,3565510655,GB
-3565510656,3565511679,NL
-3565511680,3565512191,CH
-3565512192,3565512703,DE
-3565512704,3565512767,GB
-3565512768,3565512959,DE
-3565512960,3565514111,GB
-3565514112,3565514239,DE
-3565514240,3565514495,DK
-3565514496,3565518847,GB
+3565503488,3565518847,GB
3565518848,3565551615,TR
-3565551616,3565578495,GB
-3565578496,3565578751,CA
-3565578752,3565641487,GB
-3565641488,3565641503,DE
-3565641504,3565682687,GB
-3565682688,3565688063,NL
-3565688064,3565688319,GB
-3565688320,3565748223,NL
+3565551616,3565682687,GB
+3565682688,3565748223,NL
3565748224,3565752839,GB
-3565752840,3565752855,EU
3565752856,3565752879,GB
-3565752880,3565752887,EU
3565752888,3565752983,GB
-3565752984,3565752991,EU
3565752992,3565752999,GB
-3565753000,3565753015,EU
3565753016,3565753031,GB
-3565753032,3565753039,EU
3565753040,3565753071,GB
-3565753072,3565753079,EU
3565753080,3565753183,GB
-3565753184,3565753247,EU
3565753248,3565753279,GB
-3565753280,3565753799,EU
+3565753344,3565753791,GB
3565753800,3565753815,GB
-3565753816,3565753823,EU
3565753824,3565753831,GB
-3565753832,3565753839,EU
3565753840,3565753847,GB
-3565753848,3565753983,EU
3565753984,3565754367,GB
-3565754368,3565754495,EU
3565754496,3565754511,GB
-3565754512,3565754623,EU
3565754624,3565755263,GB
-3565755264,3565755279,EU
3565755280,3565755359,GB
-3565755360,3565755375,EU
3565755376,3565755583,GB
-3565755584,3565755647,EU
3565755648,3565755695,GB
-3565755696,3565755703,EU
3565755704,3565755727,GB
-3565755728,3565755735,EU
3565755736,3565755831,GB
-3565755832,3565755839,EU
3565755840,3565755847,GB
-3565755848,3565755855,EU
3565755856,3565755871,GB
-3565755872,3565755879,EU
3565755880,3565755919,GB
-3565755920,3565755927,EU
3565755928,3565755935,GB
-3565755936,3565755943,EU
3565755944,3565755959,GB
-3565755960,3565755967,EU
3565755968,3565755999,GB
-3565756000,3565756007,EU
3565756008,3565756063,GB
-3565756064,3565756071,EU
3565756072,3565756087,GB
-3565756088,3565756095,EU
3565756096,3565756119,GB
-3565756120,3565756135,EU
3565756136,3565756159,GB
-3565756160,3565756287,EU
3565756288,3565760783,GB
-3565760784,3565760791,EU
3565760792,3565760799,GB
-3565760800,3565760807,EU
3565760808,3565760823,GB
-3565760824,3565760831,EU
3565760832,3565760855,GB
-3565760856,3565760863,EU
3565760864,3565760935,GB
-3565760936,3565760943,EU
3565760944,3565760967,GB
-3565760968,3565760975,EU
3565760976,3565761007,GB
-3565761008,3565761015,EU
3565761016,3565761279,GB
-3565761280,3565761343,EU
3565761344,3565761535,GB
-3565761536,3565761543,EU
3565761544,3565761599,GB
-3565761600,3565761615,EU
3565761616,3565761631,GB
-3565761632,3565761639,EU
3565761640,3565761647,GB
-3565761648,3565761655,EU
3565761656,3565761687,GB
-3565761688,3565761703,EU
3565761704,3565761727,GB
-3565761728,3565761751,EU
3565761752,3565761783,GB
-3565761784,3565761791,EU
3565761792,3565762047,GB
3565762048,3565762303,ZA
-3565762304,3565762559,EU
3565762560,3565762815,GB
-3565762816,3565763071,EU
3565763072,3565763455,GB
-3565763456,3565763487,EU
3565763488,3565763599,GB
-3565763600,3565763615,EU
3565763616,3565763671,GB
-3565763672,3565763679,EU
3565763680,3565763703,GB
-3565763704,3565763719,EU
3565763720,3565763735,GB
-3565763736,3565763743,EU
3565763744,3565763751,GB
-3565763752,3565763759,EU
3565763760,3565763799,GB
-3565763800,3565763807,EU
3565763808,3565763815,GB
-3565763816,3565763831,EU
3565763832,3565763839,GB
-3565763840,3565763883,EU
3565763884,3565763891,GB
-3565763892,3565764095,EU
3565764096,3565764183,GB
-3565764184,3565764191,EU
3565764192,3565764207,GB
-3565764208,3565764255,EU
-3565764256,3565764367,GB
-3565764368,3565764375,EU
-3565764376,3565764439,GB
-3565764440,3565764447,EU
-3565764448,3565764455,GB
-3565764456,3565764463,EU
-3565764464,3565764551,GB
-3565764552,3565764575,EU
-3565764576,3565766655,GB
-3565766656,3565766911,EU
+3565764256,3565766655,GB
3565766912,3565767167,GB
-3565767168,3565767175,EU
3565767176,3565767255,GB
-3565767256,3565767271,EU
3565767272,3565767287,GB
-3565767288,3565767295,EU
3565767296,3565767351,GB
-3565767352,3565767359,EU
3565767360,3565767399,GB
-3565767400,3565767407,EU
-3565767408,3565767999,GB
-3565768000,3565768207,EU
+3565767408,3565767439,GB
+3565767456,3565767487,GB
+3565767504,3565767599,GB
+3565767616,3565767631,GB
+3565767680,3565767999,GB
3565768208,3565768271,GB
-3565768272,3565768279,EU
3565768280,3565768295,GB
-3565768296,3565768311,EU
3565768312,3565768335,GB
-3565768336,3565768447,EU
3565768448,3565768575,GB
-3565768576,3565768703,EU
3565768704,3565768983,GB
-3565768984,3565769215,EU
3565769216,3565769471,GB
-3565769472,3565777919,EU
3565777920,3565813759,GB
3565813760,3565879295,SA
3565879296,3566010367,GB
@@ -164664,618 +86114,186 @@
3566354432,3566370815,RO
3566370816,3566403583,TR
3566403584,3566436351,CH
-3566436352,3566438546,IE
-3566438547,3566438547,EU
-3566438548,3566469119,IE
+3566436352,3566469119,IE
3566469120,3566534655,GB
3566534656,3566551039,DE
-3566551040,3566574747,FI
-3566574748,3566574751,SE
-3566574752,3566600191,FI
+3566551040,3566600191,FI
3566600192,3566607359,IL
3566607360,3566607615,GN
-3566607616,3566647403,IL
-3566647404,3566647404,IL
-3566647405,3566665727,IL
+3566607616,3566665727,IL
3566665728,3566723071,SE
3566723072,3566723327,RU
3566723328,3566739455,SE
3566739456,3566747647,RU
3566747648,3566764031,GR
3566764032,3566796799,AT
-3566796800,3566816511,NL
-3566816512,3566816767,US
-3566816768,3566862335,NL
+3566796800,3566862335,NL
3566862336,3566895103,TR
3566895104,3566927871,KZ
-3566927872,3566976767,FR
-3566976768,3566977023,EU
-3566977024,3566993407,FR
+3566927872,3566993407,FR
3566993408,3567058943,TR
-3567058944,3567103047,FR
-3567103048,3567103055,IT
-3567103056,3567124479,FR
-3567124480,3567124991,EU
+3567058944,3567124479,FR
3567124992,3567125023,GB
-3567125024,3567125247,EU
3567125248,3567125503,GB
-3567125504,3567126687,EU
3567126688,3567126759,GB
-3567126760,3567127551,EU
3567127552,3567127807,GB
-3567127808,3567129855,EU
3567129856,3567129887,GB
-3567129888,3567130015,EU
3567130016,3567130079,GB
-3567130080,3567131383,EU
3567131384,3567131647,GB
-3567131648,3567133215,EU
3567133216,3567133247,GB
-3567133248,3567133367,EU
3567133368,3567133375,GB
-3567133376,3567134207,EU
3567134208,3567134335,GB
-3567134336,3567134847,EU
3567134848,3567134975,GB
-3567134976,3567135999,EU
3567136000,3567136255,GB
-3567136256,3567136511,EU
3567136512,3567136575,GB
-3567136576,3567136639,EU
3567136640,3567136671,GB
-3567136672,3567136767,EU
3567136768,3567136895,GB
-3567136896,3567137023,EU
3567137024,3567137279,GB
-3567137280,3567137599,EU
3567137600,3567137663,GB
-3567137664,3567137987,EU
3567137988,3567137991,GB
-3567137992,3567137999,EU
3567138000,3567138003,GB
-3567138004,3567138039,EU
3567138040,3567138047,GB
-3567138048,3567140095,EU
3567140096,3567140351,GB
-3567140352,3567140863,EU
3567140864,3567140927,GB
-3567140928,3567141631,EU
3567141632,3567141887,GB
-3567141888,3567142271,EU
3567142272,3567142399,GB
-3567142400,3567143431,EU
3567143432,3567143439,GB
-3567143440,3567143519,EU
3567143520,3567143551,GB
-3567143552,3567143679,EU
3567143680,3567143687,GB
-3567143688,3567143871,EU
3567143872,3567143935,GB
-3567143936,3567143951,EU
3567143952,3567143967,GB
-3567143968,3567144171,EU
3567144172,3567144175,GB
-3567144176,3567144319,EU
3567144320,3567144447,GB
-3567144448,3567144767,EU
3567144768,3567144831,GB
-3567144832,3567147527,EU
3567147528,3567147535,GB
-3567147536,3567147551,EU
3567147552,3567147559,GB
-3567147560,3567148519,EU
3567148520,3567148527,GB
-3567148528,3567148799,EU
3567148800,3567149055,GB
-3567149056,3567149087,EU
3567149088,3567149119,GB
-3567149120,3567149903,EU
3567149904,3567149911,GB
-3567149912,3567149919,EU
3567149920,3567149935,GB
-3567149936,3567151135,EU
3567151136,3567151199,GB
-3567151200,3567151231,EU
3567151232,3567151263,GB
-3567151264,3567151999,EU
3567152000,3567152127,GB
-3567152128,3567152159,EU
3567152160,3567152191,GB
-3567152192,3567152255,EU
3567152256,3567152383,GB
-3567152384,3567152399,EU
3567152400,3567152407,GB
-3567152408,3567152639,EU
3567152640,3567152647,GB
-3567152648,3567152663,EU
3567152664,3567152671,GB
-3567152672,3567152743,EU
3567152744,3567152751,GB
-3567152752,3567152831,EU
3567152832,3567152863,GB
-3567152864,3567152959,EU
3567152960,3567152991,GB
-3567152992,3567153023,EU
3567153024,3567153055,GB
-3567153056,3567153599,EU
3567153600,3567153607,GB
-3567153608,3567153615,EU
3567153616,3567153623,GB
-3567153624,3567153647,EU
3567153648,3567153663,GB
-3567153664,3567153687,EU
3567153688,3567153703,GB
-3567153704,3567153719,EU
3567153720,3567153727,GB
-3567153728,3567153823,EU
3567153824,3567153847,GB
-3567153848,3567154303,EU
3567154304,3567154367,GB
-3567154368,3567155199,EU
3567155200,3567155967,GB
-3567155968,3567156415,EU
3567156416,3567156607,GB
-3567156608,3567157247,EU
3567157248,3567165439,CZ
3567165440,3567169535,RU
3567169536,3567173631,MK
3567173632,3567239167,GB
3567239168,3567241215,NL
-3567241216,3567241471,EU
3567241472,3567255551,NL
3567255552,3567321087,PL
-3567321088,3567323007,GB
-3567323008,3567323023,CH
-3567323024,3567323135,GB
-3567323136,3567323391,IE
-3567323392,3567324479,GB
-3567324480,3567324543,ES
-3567324544,3567324559,GB
-3567324560,3567324575,ES
-3567324576,3567324607,GB
-3567324608,3567324671,ES
-3567324672,3567325119,GB
-3567325120,3567325135,ES
-3567325136,3567329711,GB
-3567329712,3567329727,IE
-3567329728,3567331743,GB
-3567331744,3567331775,IE
-3567331776,3567350807,GB
-3567350808,3567350815,US
-3567350816,3567350839,GB
-3567350840,3567350847,CH
-3567350848,3567350935,GB
-3567350936,3567350943,CH
-3567350944,3567352479,GB
-3567352480,3567352487,NL
-3567352488,3567352511,GB
-3567352512,3567352519,FR
-3567352520,3567352759,GB
-3567352760,3567352767,NL
-3567352768,3567353855,GB
+3567321088,3567353855,GB
3567353856,3567386623,CH
-3567386624,3567386671,GB
-3567386672,3567386687,DE
-3567386688,3567386751,GB
-3567386752,3567386815,DE
-3567386816,3567386879,GB
-3567386880,3567386883,DE
-3567386884,3567386911,GB
-3567386912,3567386943,DE
-3567386944,3567386975,GB
-3567386976,3567387007,DE
-3567387008,3567387071,GB
-3567387072,3567387407,DE
-3567387408,3567387439,GB
-3567387440,3567387471,DE
-3567387472,3567387487,GB
-3567387488,3567387539,DE
-3567387540,3567387543,GB
-3567387544,3567387547,DE
-3567387548,3567387583,GB
-3567387584,3567388031,DE
-3567388032,3567388159,GB
-3567388160,3567388399,DE
-3567388400,3567388415,GB
-3567388416,3567388607,DE
-3567388608,3567388639,GB
-3567388640,3567388647,DE
-3567388648,3567388671,GB
-3567388672,3567388927,CZ
-3567388928,3567389183,DE
-3567389184,3567389311,GB
-3567389312,3567389375,DE
-3567389376,3567389407,GB
-3567389408,3567389439,DE
-3567389440,3567389695,GB
+3567386624,3567388351,GB
+3567388352,3567388383,DE
+3567388384,3567388543,GB
+3567388544,3567388607,DE
+3567388608,3567389695,GB
3567389696,3567390975,DE
-3567390976,3567391107,GB
-3567391108,3567391111,DE
-3567391112,3567391147,GB
-3567391148,3567391151,DE
-3567391152,3567391231,GB
-3567391232,3567391743,DE
-3567391744,3567391767,PL
-3567391768,3567391807,GB
-3567391808,3567391839,DE
-3567391840,3567391999,GB
-3567392000,3567392255,PL
-3567392256,3567392767,GB
-3567392768,3567393023,DE
-3567393024,3567393279,FR
-3567393280,3567393535,HU
-3567393536,3567393791,GB
-3567393792,3567394047,SI
-3567394048,3567394175,HR
-3567394176,3567394975,GB
-3567394976,3567395007,DE
-3567395008,3567395071,GB
-3567395072,3567395327,DE
-3567395328,3567396863,GB
-3567396864,3567397119,DE
-3567397120,3567397375,GB
-3567397376,3567397503,ES
-3567397504,3567397887,GB
-3567397888,3567398143,DE
-3567398144,3567398191,RO
-3567398192,3567398199,DE
-3567398200,3567398399,RO
-3567398400,3567398655,GB
-3567398656,3567398911,DE
-3567398912,3567398975,GB
-3567398976,3567399031,DE
-3567399032,3567399039,GB
-3567399040,3567399047,DE
-3567399048,3567399071,GB
-3567399072,3567399135,DE
-3567399136,3567399167,GB
-3567399168,3567399391,DE
-3567399392,3567399423,GB
-3567399424,3567399439,DE
-3567399440,3567399487,GB
-3567399488,3567399647,DE
-3567399648,3567399679,GB
-3567399680,3567399807,DE
-3567399808,3567399935,GB
+3567390976,3567391231,GB
+3567391232,3567391487,DE
+3567391488,3567394815,GB
+3567394816,3567395071,FR
+3567395072,3567399167,GB
+3567399168,3567399423,DE
+3567399424,3567399935,GB
3567399936,3567401471,DE
-3567401472,3567401503,GB
-3567401504,3567401519,DE
-3567401520,3567401543,GB
-3567401544,3567401551,DE
-3567401552,3567401727,GB
-3567401728,3567402367,DE
-3567402368,3567402495,GB
-3567402496,3567403007,DE
+3567401472,3567403007,GB
3567403008,3567419391,IT
3567419392,3567427583,SA
3567427584,3567435775,SE
-3567435776,3567441375,GB
-3567441376,3567441407,NL
-3567441408,3567444223,GB
-3567444224,3567444479,TZ
-3567444480,3567445951,GB
-3567445952,3567445983,NL
-3567445984,3567452159,GB
-3567452160,3567452351,ES
-3567452352,3567452383,GB
-3567452384,3567452399,ES
-3567452400,3567452415,GB
-3567452416,3567453439,ES
-3567453440,3567453695,GB
-3567453696,3567454239,ES
-3567454240,3567454255,GB
-3567454256,3567454335,ES
-3567454336,3567454463,GB
-3567454464,3567454975,ES
-3567454976,3567455039,GB
-3567455040,3567455103,ES
-3567455104,3567455167,GB
-3567455168,3567455999,ES
-3567456000,3567456255,GB
-3567456256,3567458047,ES
-3567458048,3567458303,GB
-3567458304,3567458319,ES
-3567458320,3567458335,GB
-3567458336,3567458367,ES
-3567458368,3567458559,GB
-3567458560,3567458815,ES
-3567458816,3567458879,GB
-3567458880,3567459231,ES
-3567459232,3567459583,GB
-3567459584,3567459839,ES
-3567459840,3567459903,GB
-3567459904,3567459959,ES
-3567459960,3567460095,GB
-3567460096,3567460607,ES
-3567460608,3567460671,GB
-3567460672,3567460767,ES
-3567460768,3567460783,GB
-3567460784,3567460815,ES
-3567460816,3567460823,GB
-3567460824,3567462271,ES
-3567462272,3567462399,GB
-3567462400,3567462559,ES
-3567462560,3567462591,GB
-3567462592,3567462655,ES
-3567462656,3567462719,GB
-3567462720,3567462751,ES
-3567462752,3567462783,GB
-3567462784,3567462815,ES
-3567462816,3567463007,GB
-3567463008,3567463135,ES
-3567463136,3567463151,IT
-3567463152,3567463167,ES
-3567463168,3567463423,GB
-3567463424,3567465663,ES
-3567465664,3567465695,GB
-3567465696,3567468031,ES
-3567468032,3567468287,GB
-3567468288,3567468800,ES
-3567468801,3567469055,GB
-3567469056,3567469567,ES
-3567469568,3567469823,GB
-3567469824,3567472127,ES
-3567472128,3567472639,GB
-3567472640,3567474943,ES
-3567474944,3567475199,GB
-3567475200,3567475711,ES
-3567475712,3567476223,GB
-3567476224,3567477663,ES
-3567477664,3567477695,GB
-3567477696,3567484927,ES
-3567484928,3567486463,GB
-3567486464,3567488511,ES
-3567488512,3567488767,GB
-3567488768,3567490431,ES
-3567490432,3567490559,GB
-3567490560,3567491071,ES
-3567491072,3567491327,GB
-3567491328,3567492319,ES
-3567492320,3567492335,GB
-3567492336,3567492831,ES
-3567492832,3567493375,GB
-3567493376,3567493407,ES
-3567493408,3567493439,GB
-3567493440,3567493503,ES
-3567493504,3567493631,GB
-3567493632,3567494719,ES
-3567494720,3567494847,GB
-3567494848,3567496383,ES
-3567496384,3567496415,GB
-3567496416,3567496447,ES
-3567496448,3567496607,GB
-3567496608,3567496639,ES
-3567496640,3567496671,GB
-3567496672,3567497087,ES
-3567497088,3567497215,GB
-3567497216,3567498495,ES
-3567498496,3567499007,GB
-3567499008,3567499143,ES
-3567499144,3567499151,GB
-3567499152,3567500863,ES
-3567500864,3567500895,GB
-3567500896,3567500959,ES
-3567500960,3567500991,GB
-3567500992,3567501023,ES
-3567501024,3567501567,GB
-3567501568,3567502031,ES
-3567502032,3567502079,GB
-3567502080,3567502607,ES
-3567502608,3567502719,GB
-3567502720,3567502783,ES
-3567502784,3567502815,GB
-3567502816,3567502831,ES
-3567502832,3567502847,GB
-3567502848,3567502911,ES
-3567502912,3567502943,GB
-3567502944,3567502975,ES
-3567502976,3567503039,GB
-3567503040,3567505663,ES
-3567505664,3567505919,GB
-3567505920,3567506559,ES
-3567506560,3567506623,GB
-3567506624,3567506687,ES
-3567506688,3567506719,GB
-3567506720,3567506751,ES
-3567506752,3567506783,GB
-3567506784,3567506815,ES
-3567506816,3567507231,GB
-3567507232,3567507239,ES
-3567507240,3567507247,GB
-3567507248,3567507391,ES
-3567507392,3567507407,GB
-3567507408,3567507455,ES
-3567507456,3567509503,NL
-3567509504,3567510527,ES
-3567510528,3567511487,GB
-3567511488,3567511519,ES
-3567511520,3567511551,GB
-3567511552,3567511807,ES
-3567511808,3567512319,GB
-3567512320,3567512575,ES
-3567512576,3567513599,NL
-3567513600,3567514367,ES
-3567514368,3567515647,GB
-3567515648,3567517695,ES
+3567435776,3567456407,GB
+3567456408,3567456415,ES
+3567456416,3567458305,GB
+3567458306,3567458306,ES
+3567458307,3567459935,GB
+3567459936,3567459943,ES
+3567459944,3567465983,GB
+3567465984,3567466239,ES
+3567466240,3567495679,GB
+3567495680,3567495935,ES
+3567495936,3567499007,GB
+3567499008,3567499135,ES
+3567499136,3567503359,GB
+3567503360,3567504383,ES
+3567504384,3567511487,GB
+3567511488,3567511495,ES
+3567511496,3567516671,GB
+3567516672,3567517695,ES
3567517696,3567583231,RU
3567583232,3567583487,AT
-3567583488,3567583743,EU
3567583744,3567583871,AT
-3567583872,3567583935,EU
3567583936,3567583999,AT
-3567584000,3567584255,EU
3567584256,3567584383,AT
-3567584384,3567584399,EU
3567584400,3567584407,AT
-3567584408,3567584511,EU
3567584512,3567584639,AT
-3567584640,3567585791,EU
+3567585280,3567585311,TR
3567585792,3567586303,GB
-3567586304,3567587327,EU
+3567586304,3567586815,TR
3567587328,3567591423,GB
3567591424,3567599615,IT
3567599616,3567615999,NL
-3567616000,3567616255,CG
-3567616256,3567616351,A2
-3567616352,3567616383,GQ
-3567616384,3567616525,A2
+3567616000,3567616525,GB
3567616526,3567616526,KE
-3567616527,3567616527,A2
-3567616528,3567616535,GB
-3567616536,3567616575,A2
-3567616576,3567616583,GB
-3567616584,3567616767,A2
+3567616527,3567616767,GB
3567616768,3567617023,US
-3567617024,3567617151,A2
-3567617152,3567617279,CD
-3567617280,3567617535,IN
-3567617536,3567617791,A2
-3567617792,3567618047,CD
+3567617024,3567618047,GB
3567618048,3567619071,IN
-3567619072,3567619075,NG
-3567619076,3567619087,A2
-3567619088,3567619095,NG
-3567619096,3567619103,A2
-3567619104,3567619111,KE
-3567619112,3567619135,A2
-3567619136,3567619839,NG
-3567619840,3567620095,TZ
+3567619072,3567619583,GB
+3567619584,3567619839,NG
+3567619840,3567620095,GB
3567620096,3567620351,IN
-3567620352,3567620479,TZ
-3567620480,3567620623,A2
-3567620624,3567620631,PK
-3567620632,3567620639,IN
-3567620640,3567620679,PK
-3567620680,3567620695,A2
-3567620696,3567620719,PK
-3567620720,3567620727,A2
-3567620728,3567620735,IN
-3567620736,3567620931,A2
-3567620932,3567620935,TZ
-3567620936,3567620959,KE
-3567620960,3567620991,A2
-3567620992,3567621055,NG
-3567621056,3567621119,KE
-3567621120,3567621263,GB
-3567621264,3567621279,CG
-3567621280,3567621375,GB
-3567621376,3567621391,A2
-3567621392,3567621399,CG
-3567621400,3567621407,A2
-3567621408,3567621423,CG
-3567621424,3567621631,A2
-3567621632,3567621887,ID
-3567621888,3567621895,TZ
-3567621896,3567621903,KE
-3567621904,3567621911,A2
-3567621912,3567621919,TZ
-3567621920,3567621951,NG
-3567621952,3567622655,A2
-3567622656,3567622911,KE
-3567622912,3567622919,A2
-3567622920,3567622927,KE
-3567622928,3567622943,A2
-3567622944,3567622951,KE
-3567622952,3567622959,A2
-3567622960,3567622963,TZ
-3567622964,3567622967,NG
-3567622968,3567622975,A2
-3567622976,3567623039,TZ
-3567623040,3567623055,GA
-3567623056,3567623071,NG
-3567623072,3567623087,TZ
-3567623088,3567623095,A2
-3567623096,3567623103,GA
-3567623104,3567623135,TZ
-3567623136,3567623143,A2
-3567623144,3567623151,TZ
-3567623152,3567623471,A2
-3567623472,3567623479,KE
-3567623480,3567623727,A2
-3567623728,3567623759,PK
-3567623760,3567623767,A2
-3567623768,3567623775,PK
-3567623776,3567623791,A2
-3567623792,3567623839,PK
-3567623840,3567623935,A2
-3567623936,3567624191,PK
-3567624192,3567624447,GB
-3567624448,3567625215,LR
-3567625216,3567625727,TZ
-3567625728,3567625983,A2
-3567625984,3567626239,KE
+3567620352,3567626239,GB
3567626240,3567626751,TZ
-3567626752,3567627008,NG
-3567627009,3567629311,A2
-3567629312,3567630207,TJ
-3567630208,3567635711,A2
-3567635712,3567635839,CG
-3567635840,3567647487,A2
-3567647488,3567648767,GB
+3567626752,3567648767,GB
3567648768,3567665151,BE
3567665152,3567673343,ES
-3567673344,3567674171,AT
-3567674172,3567674175,DE
-3567674176,3567681535,AT
+3567673344,3567681535,AT
3567681536,3567714303,ES
3567714304,3567715327,GB
-3567715328,3567715583,EU
3567715584,3567715839,GB
-3567715840,3567716351,EU
-3567716352,3567716383,GB
-3567716384,3567716607,EU
-3567716608,3567716639,IL
-3567716640,3567716943,EU
-3567716944,3567717119,GB
-3567717120,3567717375,DE
-3567717376,3567717631,GB
-3567717632,3567717679,DE
-3567717680,3567717759,EU
-3567717760,3567717887,DE
-3567717888,3567718015,GB
-3567718016,3567718143,EU
-3567718144,3567718399,CH
-3567718400,3567719423,US
+3567716352,3567717375,GB
+3567718400,3567718655,US
+3567718656,3567718911,GB
+3567718912,3567719423,US
3567719424,3567719679,GB
-3567719680,3567779839,EU
3567779840,3567845375,DE
3567845376,3567861759,GB
3567861760,3567878143,NO
3567878144,3567976447,ES
3567976448,3568041983,IT
3568041984,3568107519,DE
-3568107520,3568153759,GB
-3568153760,3568153767,CH
-3568153768,3568173055,GB
+3568107520,3568173055,GB
3568173056,3568304127,TR
-3568304128,3568309775,RU
-3568309776,3568309791,UZ
-3568309792,3568309919,BY
-3568309920,3568309951,RU
-3568309952,3568310015,BY
-3568310016,3568369663,RU
+3568304128,3568369663,RU
3568369664,3568435199,IT
3568435200,3568443391,UA
3568443392,3568476159,NL
3568476160,3568484351,DK
-3568484352,3568486655,NL
-3568486656,3568486911,EU
-3568486912,3568492543,NL
+3568484352,3568492543,NL
3568492544,3568500735,RS
-3568500736,3568566271,IL
-3568566272,3568574967,FR
-3568574968,3568574975,A2
-3568574976,3568577151,FR
-3568577152,3568577167,A2
-3568577168,3568577231,FR
-3568577232,3568577239,A2
-3568577240,3568583783,FR
-3568583784,3568583791,A2
-3568583792,3568585471,FR
-3568585472,3568585727,EU
-3568585728,3568595079,FR
-3568595080,3568595087,A2
-3568595088,3568599039,FR
+3568500736,3568520137,IL
+3568520138,3568520138,SY
+3568520139,3568566271,IL
+3568566272,3568599039,FR
3568599040,3568631807,PL
3568631808,3568697343,SE
3568697344,3568730111,PL
@@ -165285,438 +86303,54 @@
3568795648,3568803839,GB
3568803840,3568812031,IT
3568812032,3568828415,ES
-3568828416,3568829631,DE
-3568829632,3568829639,CH
-3568829640,3568848791,DE
-3568848792,3568848799,PL
-3568848800,3568848871,DE
-3568848872,3568848879,GB
-3568848880,3568900095,DE
-3568900096,3568900351,A2
-3568900352,3568904191,DE
-3568904192,3568904447,EU
-3568904448,3568915791,DE
-3568915792,3568915807,LU
-3568915808,3568939519,DE
-3568939520,3568939527,IT
-3568939528,3568943199,DE
-3568943200,3568943207,A2
-3568943208,3568959487,DE
+3568828416,3568904191,DE
+3568904192,3568904447,GB
+3568904448,3568959487,DE
3568959488,3569025023,AT
3569025024,3569057791,NL
-3569057792,3569060863,GB
-3569060864,3569060927,IE
-3569060928,3569068543,GB
-3569068544,3569068671,BG
-3569068672,3569068951,GB
-3569068952,3569068991,DE
-3569068992,3569074687,GB
+3569057792,3569074687,GB
3569074688,3569074943,IE
3569074944,3569075455,GB
3569075456,3569075711,IE
-3569075712,3569075839,FR
-3569075840,3569083903,GB
-3569083904,3569084159,US
-3569084160,3569090559,GB
+3569075712,3569090559,GB
3569090560,3569123327,RU
3569123328,3569156095,GB
-3569156096,3569156351,NL
-3569156352,3569156607,EU
-3569156608,3569157379,NL
-3569157380,3569157380,EU
-3569157381,3569165311,NL
-3569165312,3569165567,EU
-3569165568,3569167871,NL
-3569167872,3569168127,EU
-3569168128,3569188863,NL
+3569156096,3569188863,NL
3569188864,3569221631,IT
-3569221632,3569238399,BE
-3569238400,3569238527,AT
-3569238528,3569239071,BE
-3569239072,3569239103,LU
-3569239104,3569239519,BE
-3569239520,3569239551,LU
-3569239552,3569239983,BE
-3569239984,3569239999,BN
-3569240000,3569240031,BE
-3569240032,3569240063,FR
-3569240064,3569241583,BE
-3569241584,3569241599,LU
-3569241600,3569241907,BE
-3569241908,3569241911,LU
-3569241912,3569242047,BE
-3569242048,3569242111,LU
-3569242112,3569243903,BE
-3569243904,3569244031,NL
-3569244032,3569244303,BE
-3569244304,3569244319,LU
-3569244320,3569245695,BE
-3569245696,3569245727,LU
-3569245728,3569250879,BE
-3569250880,3569250895,LU
-3569250896,3569251071,BE
-3569251072,3569251327,LU
-3569251328,3569251839,US
-3569251840,3569252991,BE
-3569252992,3569253007,LU
-3569253008,3569253095,BE
-3569253096,3569253103,LU
-3569253104,3569255007,BE
-3569255008,3569255039,LU
-3569255040,3569255071,BE
-3569255072,3569255103,LU
-3569255104,3569271935,BE
-3569271936,3569271943,IT
-3569271944,3569273167,BE
-3569273168,3569273183,LU
-3569273184,3569273791,BE
-3569273792,3569273823,LU
-3569273824,3569274303,BE
-3569274304,3569274311,LU
-3569274312,3569274367,BE
-3569274368,3569274383,LU
-3569274384,3569274495,BE
-3569274496,3569274559,LU
-3569274560,3569274687,BE
-3569274688,3569274719,LU
-3569274720,3569277183,BE
-3569277184,3569277439,LU
-3569277440,3569279039,BE
-3569279040,3569279071,LU
-3569279072,3569279223,BE
-3569279224,3569279231,US
-3569279232,3569279263,LU
-3569279264,3569279279,US
-3569279280,3569287167,BE
+3569221632,3569287167,BE
3569287168,3569352703,PL
3569352704,3569483775,RU
3569483776,3569614847,FR
3569614848,3569680383,GB
-3569680384,3569683711,SK
-3569683712,3569683719,IQ
-3569683720,3569710959,SK
-3569710960,3569710975,NL
-3569710976,3569713151,SK
+3569680384,3569713151,SK
3569713152,3569729535,AT
-3569729536,3569731167,FR
-3569731168,3569731183,IT
-3569731184,3569731215,GB
-3569731216,3569731231,FR
-3569731232,3569731247,DE
-3569731248,3569731263,GB
-3569731264,3569731311,FR
-3569731312,3569731327,GB
-3569731328,3569731375,FR
-3569731376,3569731391,GB
-3569731392,3569731423,FR
-3569731424,3569731439,GB
-3569731440,3569731455,FR
-3569731456,3569731471,GB
-3569731472,3569731487,FR
-3569731488,3569731503,GB
-3569731504,3569731519,IT
-3569731520,3569731551,GB
-3569731552,3569731583,FR
-3569731584,3569731599,GB
-3569731600,3569731615,FR
-3569731616,3569731631,DE
-3569731632,3569731647,IT
-3569731648,3569731727,FR
-3569731728,3569731743,GB
-3569731744,3569731791,FR
-3569731792,3569731807,GB
-3569731808,3569731839,FR
-3569731840,3569731871,GB
-3569731872,3569731903,FR
-3569731904,3569731919,BE
-3569731920,3569731951,FR
-3569731952,3569731967,NL
-3569731968,3569731983,GB
-3569731984,3569732031,FR
-3569732032,3569732047,DE
-3569732048,3569732063,GB
-3569732064,3569732079,FR
-3569732080,3569732095,GB
-3569732096,3569732143,FR
-3569732144,3569732191,GB
-3569732192,3569732207,DE
-3569732208,3569732287,FR
-3569732288,3569732303,GB
-3569732304,3569732319,DE
-3569732320,3569732335,FR
-3569732336,3569732351,GB
-3569732352,3569732383,FR
-3569732384,3569732399,US
-3569732400,3569732447,FR
-3569732448,3569732479,US
-3569732480,3569732495,GB
-3569732496,3569732543,FR
-3569732544,3569732575,GB
-3569732576,3569732607,FR
-3569732608,3569732639,GB
-3569732640,3569732671,FR
-3569732672,3569732703,GB
-3569732704,3569732719,FR
-3569732720,3569732735,GB
-3569732736,3569732751,FR
-3569732752,3569732767,GB
-3569732768,3569732783,FR
-3569732784,3569732847,GB
-3569732848,3569732863,FR
-3569732864,3569732879,GB
-3569732880,3569732895,FR
-3569732896,3569732911,IT
-3569732912,3569733007,FR
-3569733008,3569733023,IE
-3569733024,3569733055,FR
-3569733056,3569733087,GB
-3569733088,3569733103,IT
-3569733104,3569733183,FR
-3569733184,3569733199,GB
-3569733200,3569733263,FR
-3569733264,3569733279,US
-3569733280,3569733295,DE
-3569733296,3569733311,GB
-3569733312,3569733327,FR
-3569733328,3569733343,GB
-3569733344,3569733423,FR
-3569733424,3569733439,GB
-3569733440,3569733471,FR
-3569733472,3569733487,GB
-3569733488,3569733519,FR
-3569733520,3569733535,GB
-3569733536,3569733551,NL
-3569733552,3569733567,FR
-3569733568,3569733583,GB
-3569733584,3569733599,FR
-3569733600,3569733615,GB
-3569733616,3569733647,FR
-3569733648,3569733663,GB
-3569733664,3569733679,FR
-3569733680,3569733695,GB
-3569733696,3569733775,FR
-3569733776,3569733791,IE
-3569733792,3569733807,FR
-3569733808,3569733823,GB
-3569733824,3569733887,FR
-3569733888,3569733919,GB
-3569733920,3569733935,FR
-3569733936,3569733951,GB
-3569733952,3569733967,FR
-3569733968,3569733983,ES
-3569733984,3569733999,GB
-3569734000,3569734047,FR
-3569734048,3569734079,GB
-3569734080,3569734143,FR
-3569734144,3569734159,GB
-3569734160,3569734191,FR
-3569734192,3569734207,GB
-3569734208,3569734367,FR
-3569734368,3569734399,GB
-3569734400,3569734447,BE
-3569734448,3569734463,FR
-3569734464,3569734511,BE
-3569734512,3569736047,FR
-3569736048,3569736063,GB
-3569736064,3569736071,FR
-3569736072,3569736079,ES
-3569736080,3569736191,FR
-3569736192,3569736223,NL
-3569736224,3569736239,FR
-3569736240,3569736383,NL
-3569736384,3569736399,SE
-3569736400,3569736655,NL
-3569736656,3569736671,FR
-3569736672,3569736703,NL
-3569736704,3569739263,FR
-3569739264,3569739295,NL
-3569739296,3569739327,FR
-3569739328,3569739471,NL
-3569739472,3569739487,FR
-3569739488,3569739599,NL
-3569739600,3569739631,FR
-3569739632,3569739647,NL
-3569739648,3569739663,FR
-3569739664,3569739679,NL
-3569739680,3569739695,FR
-3569739696,3569739839,NL
-3569739840,3569739855,FR
-3569739856,3569739903,NL
-3569739904,3569739919,FR
-3569739920,3569739935,NL
-3569739936,3569739951,FR
-3569739952,3569740047,NL
-3569740048,3569740063,FR
-3569740064,3569740111,NL
-3569740112,3569740127,FR
-3569740128,3569740255,NL
-3569740256,3569740271,FR
-3569740272,3569740303,NL
-3569740304,3569740319,FR
-3569740320,3569740367,NL
-3569740368,3569740383,FR
-3569740384,3569740415,NL
-3569740416,3569740431,FR
-3569740432,3569740463,NL
-3569740464,3569740479,FR
-3569740480,3569740495,NL
-3569740496,3569740511,FR
-3569740512,3569740543,NL
-3569740544,3569740559,FR
-3569740560,3569740655,NL
-3569740656,3569740671,FR
-3569740672,3569740687,NL
-3569740688,3569740703,FR
-3569740704,3569740799,NL
-3569740800,3569741311,FR
-3569741312,3569741823,BE
-3569741824,3569742335,FR
-3569742336,3569742351,BE
-3569742352,3569742383,FR
-3569742384,3569742399,BE
-3569742400,3569742415,FR
-3569742416,3569742511,BE
-3569742512,3569742527,FR
-3569742528,3569742623,BE
-3569742624,3569742639,FR
-3569742640,3569742671,BE
-3569742672,3569742687,FR
-3569742688,3569742735,BE
-3569742736,3569742751,FR
-3569742752,3569742767,BE
-3569742768,3569742783,FR
-3569742784,3569742927,BE
-3569742928,3569742943,FR
-3569742944,3569743087,BE
-3569743088,3569743103,FR
-3569743104,3569743135,BE
-3569743136,3569743199,FR
-3569743200,3569743215,BE
-3569743216,3569743359,FR
-3569743360,3569743391,BE
-3569743392,3569743407,FR
-3569743408,3569743423,BE
-3569743424,3569743455,FR
-3569743456,3569743583,BE
-3569743584,3569743599,NL
-3569743600,3569743615,FR
-3569743616,3569743631,BE
-3569743632,3569743647,FR
-3569743648,3569743679,BE
-3569743680,3569743711,FR
-3569743712,3569743775,BE
-3569743776,3569743791,FR
-3569743792,3569743871,BE
-3569743872,3569743983,NL
-3569743984,3569743999,FR
-3569744000,3569744047,NL
-3569744048,3569744063,FR
-3569744064,3569744127,NL
-3569744128,3569744143,FR
-3569744144,3569744543,NL
-3569744544,3569744559,FR
-3569744560,3569744575,NL
-3569744576,3569744623,FR
-3569744624,3569744815,NL
-3569744816,3569744831,FR
-3569744832,3569744911,NL
-3569744912,3569744927,FR
-3569744928,3569744975,NL
-3569744976,3569744991,FR
-3569744992,3569745007,NL
-3569745008,3569745023,FR
-3569745024,3569745039,NL
-3569745040,3569745055,FR
-3569745056,3569745103,NL
-3569745104,3569745119,FR
-3569745120,3569745167,NL
-3569745168,3569745183,FR
-3569745184,3569745215,NL
-3569745216,3569745231,FR
-3569745232,3569745247,NL
-3569745248,3569745279,FR
-3569745280,3569745311,NL
-3569745312,3569745327,FR
-3569745328,3569745359,NL
-3569745360,3569745375,FR
-3569745376,3569745407,NL
-3569745408,3569745663,FR
-3569745664,3569745727,NL
-3569745728,3569745743,FR
-3569745744,3569745813,NL
-3569745814,3569745823,FR
-3569745824,3569745839,NL
-3569745840,3569745871,FR
-3569745872,3569745887,NL
-3569745888,3569745903,FR
-3569745904,3569745919,NL
-3569745920,3569811175,FR
+3569729536,3569811175,FR
3569811176,3569811176,GP
3569811177,3569811455,FR
3569811456,3569876991,IL
3569876992,3569942527,RS
3569942528,3570073599,DE
3570073600,3570081791,NL
-3570081792,3570098687,CH
-3570098688,3570098943,EU
-3570098944,3570106367,CH
+3570081792,3570106367,CH
3570106368,3570139135,PL
-3570139136,3570170079,DE
-3570170080,3570170111,BE
-3570170112,3570171655,DE
-3570171656,3570171663,AU
-3570171664,3570171903,DE
+3570139136,3570171903,DE
3570171904,3570204671,NL
-3570204672,3570215679,GR
-3570215680,3570215807,DE
-3570215808,3570223103,GR
-3570223104,3570223231,DE
-3570223232,3570236159,GR
-3570236160,3570236415,DE
-3570236416,3570236927,GR
-3570236928,3570237183,DE
-3570237184,3570241791,GR
-3570241792,3570242047,DE
-3570242048,3570270207,GR
+3570204672,3570270207,GR
3570270208,3570335743,NL
3570335744,3570401279,GB
3570401280,3570466815,FR
-3570466816,3570507439,SE
-3570507440,3570507455,CH
-3570507456,3570532351,SE
+3570466816,3570532351,SE
3570532352,3570597887,IT
-3570597888,3570607103,GB
-3570607104,3570608127,DE
-3570608128,3570611199,GB
-3570611200,3570611455,FR
-3570611456,3570614271,GB
+3570597888,3570614271,GB
3570614272,3570617343,DE
-3570617344,3570617855,GB
-3570617856,3570622463,DE
-3570622464,3570630655,GB
-3570630656,3570640383,DE
-3570640384,3570640415,CH
-3570640416,3570642135,DE
-3570642136,3570642151,AT
-3570642152,3570642159,DE
-3570642160,3570642167,AT
-3570642168,3570643487,DE
-3570643488,3570643519,AT
-3570643520,3570643583,DE
-3570643584,3570643647,AT
-3570643648,3570643679,DE
-3570643680,3570643711,AT
-3570643712,3570646143,DE
-3570646144,3570646175,CH
-3570646176,3570663423,DE
+3570617344,3570618367,GB
+3570618368,3570622207,DE
+3570622208,3570630655,GB
+3570630656,3570663423,DE
3570663424,3570728959,GB
3570728960,3570729983,FI
3570729984,3570731007,SE
-3570731008,3570756191,FI
-3570756192,3570756223,RU
-3570756224,3570760543,FI
-3570760544,3570760575,RU
-3570760576,3570794495,FI
+3570731008,3570794495,FI
3570794496,3570860031,SE
3570860032,3570892799,CH
3570892800,3570925567,SA
@@ -165726,158 +86360,23 @@
3571056640,3571122175,DE
3571122176,3571187711,GB
3571187712,3571253247,RU
-3571253248,3571264607,BE
-3571264608,3571264639,FR
-3571264640,3571268607,BE
-3571268608,3571268639,LU
-3571268640,3571286015,BE
+3571253248,3571286015,BE
3571286016,3571318783,DE
-3571318784,3571319807,GB
-3571319808,3571319935,DE
-3571319936,3571320855,GB
-3571320856,3571320863,DE
-3571320864,3571320943,GB
-3571320944,3571320959,DE
-3571320960,3571321055,GB
+3571318784,3571321055,GB
3571321056,3571321071,DE
-3571321072,3571321599,GB
-3571321600,3571321727,DE
-3571321728,3571321823,GB
-3571321824,3571321855,DE
-3571321856,3571321983,GB
-3571321984,3571321999,DE
-3571322000,3571323967,GB
-3571323968,3571324031,DE
-3571324032,3571326207,GB
-3571326208,3571326215,DE
-3571326216,3571326231,GB
-3571326232,3571326247,DE
-3571326248,3571326983,GB
-3571326984,3571326991,DE
-3571326992,3571328511,GB
-3571328512,3571328543,DE
-3571328544,3571328863,GB
-3571328864,3571328879,DE
-3571328880,3571329215,GB
-3571329216,3571329247,DE
-3571329248,3571331647,GB
-3571331648,3571331679,DE
-3571331680,3571331839,GB
-3571331840,3571332351,DE
-3571332352,3571335807,GB
-3571335808,3571335935,DE
-3571335936,3571340415,GB
-3571340416,3571340447,DE
-3571340448,3571342079,GB
-3571342080,3571342335,DE
-3571342336,3571343391,GB
-3571343392,3571343455,DE
-3571343456,3571347455,GB
-3571347456,3571347711,BE
-3571347712,3571348387,GB
-3571348388,3571348391,DE
-3571348392,3571349087,GB
-3571349088,3571349119,DE
-3571349120,3571351551,GB
-3571351552,3571351807,DE
-3571351808,3571355071,GB
-3571355072,3571355135,DE
-3571355136,3571355391,GB
-3571355392,3571355903,DE
-3571355904,3571355999,GB
-3571356000,3571356031,DE
-3571356032,3571357183,GB
-3571357184,3571357695,DE
-3571357696,3571357871,GB
-3571357872,3571357919,DE
-3571357920,3571358239,GB
-3571358240,3571358255,DE
-3571358256,3571358999,GB
-3571359000,3571359007,DE
-3571359008,3571359011,GB
-3571359012,3571359015,DE
-3571359016,3571359143,GB
-3571359144,3571359151,DE
-3571359152,3571359191,GB
-3571359192,3571359199,DE
-3571359200,3571359303,GB
-3571359304,3571359311,DE
-3571359312,3571359407,GB
-3571359408,3571359415,DE
-3571359416,3571359447,GB
-3571359448,3571359455,DE
-3571359456,3571361279,GB
-3571361280,3571361535,DE
-3571361536,3571361999,GB
-3571362000,3571362015,DE
-3571362016,3571362815,GB
-3571362816,3571362879,DE
-3571362880,3571363583,GB
-3571363584,3571364095,DE
-3571364096,3571368623,GB
-3571368624,3571368639,DE
-3571368640,3571368703,GB
-3571368704,3571368959,DE
-3571368960,3571371327,GB
-3571371328,3571371359,DE
-3571371360,3571379343,GB
-3571379344,3571379351,DE
-3571379352,3571379359,GB
-3571379360,3571379367,DE
-3571379368,3571379375,GB
-3571379376,3571379391,DE
-3571379392,3571379535,GB
-3571379536,3571379559,DE
-3571379560,3571379887,GB
-3571379888,3571379895,DE
-3571379896,3571382623,GB
-3571382624,3571382655,DE
-3571382656,3571384319,GB
-3571384320,3571385151,DE
-3571385152,3571385183,GB
-3571385184,3571385631,DE
-3571385632,3571385663,GB
-3571385664,3571389503,DE
-3571389504,3571389519,HU
-3571389520,3571414015,DE
-3571414016,3571414271,IE
-3571414272,3571414783,DE
-3571414784,3571414799,IE
-3571414800,3571414943,DE
-3571414944,3571414959,GB
-3571414960,3571415039,DE
-3571415040,3571415295,GB
-3571415296,3571415311,DE
-3571415312,3571415327,AT
-3571415328,3571423743,DE
-3571423744,3571423999,US
-3571424000,3571425695,DE
+3571321072,3571384319,GB
+3571384320,3571425695,DE
3571425696,3571425727,ES
-3571425728,3571426895,DE
-3571426896,3571426899,ES
-3571426900,3571456575,DE
-3571456576,3571456591,GB
-3571456592,3571468367,DE
-3571468368,3571468383,ES
-3571468384,3571473151,DE
-3571473152,3571473407,NL
-3571473408,3571482367,DE
-3571482368,3571482623,CH
-3571482624,3571485191,BE
-3571485192,3571485195,NL
-3571485196,3571515391,BE
+3571425728,3571474431,DE
+3571474432,3571475455,US
+3571475456,3571482623,DE
+3571482624,3571515391,BE
3571515392,3571548159,GB
3571548160,3571580927,ES
3571580928,3571646463,FI
-3571646464,3571657727,DE
-3571657728,3571657983,FR
-3571657984,3571658239,GB
-3571658240,3571658751,PL
-3571658752,3571675679,DE
-3571675680,3571675687,GB
-3571675688,3571710207,DE
-3571710208,3571710463,GB
-3571710464,3571711999,DE
+3571646464,3571655560,DE
+3571655561,3571655561,RO
+3571655562,3571711999,DE
3571712000,3571843071,GB
3571843072,3571974143,ES
3571974144,3571978239,RU
@@ -165886,31 +86385,16 @@
3571982336,3572006911,RU
3572006912,3572039679,CH
3572039680,3572047871,BE
-3572047872,3572055743,LU
-3572055744,3572055775,BE
-3572055776,3572056063,LU
+3572047872,3572056063,LU
3572056064,3572072447,RU
3572072448,3572105215,BG
-3572105216,3572116527,FR
-3572116528,3572116535,A2
-3572116536,3572170751,FR
-3572170752,3572195791,IL
-3572195792,3572195807,GB
-3572195808,3572203519,IL
+3572105216,3572170751,FR
+3572170752,3572203519,IL
3572203520,3572236287,SI
3572236288,3572301823,AT
3572301824,3572367359,DK
3572367360,3572432895,NL
-3572432896,3572436047,IT
-3572436048,3572436063,GB
-3572436064,3572442495,IT
-3572442496,3572442511,NL
-3572442512,3572447231,IT
-3572447232,3572447239,AT
-3572447240,3572447247,FR
-3572447248,3572447255,GB
-3572447256,3572447263,ES
-3572447264,3572465663,IT
+3572432896,3572465663,IT
3572465664,3572498431,BE
3572498432,3572563967,GB
3572563968,3572572159,KG
@@ -165918,9 +86402,7 @@
3572580352,3572596735,AT
3572596736,3572629503,GB
3572629504,3572695039,DK
-3572695040,3572715519,CH
-3572715520,3572715775,GB
-3572715776,3572760575,CH
+3572695040,3572760575,CH
3572760576,3572826111,PL
3572826112,3572891647,IT
3572891648,3572957183,FI
@@ -165929,20 +86411,8 @@
3573003839,3573022719,SE
3573022720,3573055487,RU
3573055488,3573088255,GB
-3573088256,3573089759,CH
-3573089760,3573089791,AT
-3573089792,3573090055,CH
-3573090056,3573090063,CD
-3573090064,3573101055,CH
-3573101056,3573101311,EU
-3573101312,3573142015,CH
-3573142016,3573142271,AT
-3573142272,3573153791,CH
-3573153792,3573175711,GB
-3573175712,3573175727,IE
-3573175728,3573208511,GB
-3573208512,3573208543,IE
-3573208544,3573219327,GB
+3573088256,3573153791,CH
+3573153792,3573219327,GB
3573219328,3573252095,GR
3573252096,3573284863,NO
3573284864,3573415935,TR
@@ -165978,139 +86448,45 @@
3573940224,3574005759,PS
3574005760,3574071295,CY
3574071296,3574136831,IL
-3574136832,3574137823,DE
-3574137824,3574137855,NL
-3574137856,3574138559,DE
-3574138560,3574138623,NL
-3574138624,3574138735,DE
-3574138736,3574138751,NL
-3574138752,3574138767,DE
-3574138768,3574138775,NL
-3574138776,3574151823,DE
-3574151824,3574151831,AT
-3574151832,3574153615,DE
-3574153616,3574153623,AT
-3574153624,3574155627,DE
-3574155628,3574155631,NL
-3574155632,3574155739,DE
-3574155740,3574155743,AT
-3574155744,3574155883,DE
-3574155884,3574155887,NL
-3574155888,3574159879,DE
-3574159880,3574159887,NL
-3574159888,3574159919,DE
-3574159920,3574159927,NL
-3574159928,3574160931,DE
-3574160932,3574160935,NL
-3574160936,3574161039,DE
-3574161040,3574161043,NL
-3574161044,3574161055,DE
-3574161056,3574161087,NL
-3574161088,3574161107,DE
-3574161108,3574161111,NL
-3574161112,3574161335,DE
-3574161336,3574161339,AI
-3574161340,3574169599,DE
-3574169600,3574172415,ES
-3574172416,3574172431,GB
-3574172432,3574172535,ES
-3574172536,3574172543,GB
-3574172544,3574174328,ES
-3574174329,3574174335,GB
-3574174336,3574174847,ES
-3574174848,3574174975,GB
-3574174976,3574175783,ES
-3574175784,3574175791,GB
-3574175792,3574175839,ES
-3574175840,3574175871,GB
-3574175872,3574177119,ES
-3574177120,3574177151,GB
-3574177152,3574177183,ES
-3574177184,3574177231,GB
-3574177232,3574177723,ES
-3574177724,3574177727,GB
-3574177728,3574181119,ES
-3574181120,3574181135,GB
-3574181136,3574181183,ES
-3574181184,3574181215,GB
-3574181216,3574181311,ES
-3574181312,3574181383,GB
-3574181384,3574181391,ES
-3574181392,3574181399,GB
-3574181400,3574181423,ES
-3574181424,3574181431,GB
-3574181432,3574181527,ES
-3574181528,3574181535,GB
-3574181536,3574182727,ES
-3574182728,3574182975,GB
-3574182976,3574183679,ES
-3574183680,3574183807,GB
-3574183808,3574185031,ES
-3574185032,3574185039,GB
-3574185040,3574186847,ES
-3574186848,3574187007,GB
-3574187008,3574190591,ES
-3574190592,3574190847,EU
-3574190848,3574192639,ES
-3574192640,3574192703,GB
-3574192704,3574192719,ES
-3574192720,3574192735,GB
-3574192736,3574192767,ES
-3574192768,3574192831,GB
-3574192832,3574193207,ES
-3574193208,3574193215,GB
-3574193216,3574193247,ES
-3574193248,3574193407,GB
-3574193408,3574193415,ES
-3574193416,3574193423,GB
-3574193424,3574193439,ES
-3574193440,3574193503,GB
-3574193504,3574193567,ES
-3574193568,3574193599,GB
-3574193600,3574193655,ES
-3574193656,3574193919,GB
-3574193920,3574193959,ES
-3574193960,3574193983,GB
-3574193984,3574194015,ES
-3574194016,3574194175,GB
-3574194176,3574194527,ES
-3574194528,3574195199,GB
-3574195200,3574197135,ES
-3574197136,3574197143,GB
-3574197144,3574197183,ES
-3574197184,3574197247,GB
-3574197248,3574202367,ES
+3574136832,3574169599,DE
+3574169600,3574174839,GB
+3574174840,3574174847,ES
+3574174848,3574187007,GB
+3574187008,3574188031,ES
+3574188032,3574190591,GB
+3574190592,3574190847,ES
+3574190848,3574191615,GB
+3574191616,3574192127,ES
+3574192128,3574195199,GB
+3574195200,3574196223,ES
+3574196224,3574198271,GB
+3574198272,3574199295,ES
+3574199296,3574199807,GB
+3574199808,3574202367,ES
3574202368,3574267903,NL
3574267904,3574333439,FR
3574333440,3574341631,GB
-3574341632,3574348287,EU
3574348288,3574348543,GB
-3574348544,3574398975,EU
3574398976,3574464511,PT
3574464512,3574530047,TR
-3574530048,3574563807,SE
-3574563808,3574563823,FI
-3574563824,3574594559,SE
+3574530048,3574594559,SE
3574594560,3574595583,GB
-3574595584,3574595839,GP
-3574595840,3574596095,MQ
-3574596096,3574596351,FR
-3574596352,3574596607,MQ
-3574596608,3574596863,GP
-3574596864,3574597119,GF
-3574597120,3574597631,MQ
-3574597632,3574598143,GP
+3574595584,3574595839,GF
+3574595840,3574597887,FR
+3574597888,3574598143,GP
3574598144,3574598399,MQ
-3574598400,3574598655,GP
-3574598656,3574599679,MQ
+3574598400,3574599423,FR
+3574599424,3574599679,MQ
3574599680,3574599935,GP
-3574599936,3574600959,MQ
-3574600960,3574601471,GP
-3574601472,3574601983,MQ
-3574601984,3574602495,GF
-3574602496,3574603263,MQ
-3574603264,3574603519,GP
-3574603520,3574603775,GF
+3574599936,3574600191,FR
+3574600192,3574600447,MQ
+3574600448,3574601215,FR
+3574601216,3574601471,GP
+3574601472,3574602239,FR
+3574602240,3574602495,GF
+3574602496,3574602751,FR
+3574602752,3574603007,RE
+3574603008,3574603775,FR
3574603776,3574611967,BG
3574611968,3574628351,HU
3574628352,3574661119,GR
@@ -166118,47 +86494,16 @@
3574693888,3574726655,PL
3574726656,3574792191,GB
3574792192,3574824959,CZ
-3574824960,3574825023,NL
-3574825024,3574825279,GB
-3574825280,3574825407,NL
-3574825408,3574825471,GB
-3574825472,3574826111,NL
-3574826112,3574826239,GB
-3574826240,3574829311,NL
-3574829312,3574829567,GB
-3574829568,3574829823,NL
-3574829824,3574830079,GB
-3574830080,3574831359,NL
-3574831360,3574833151,GB
-3574833152,3574833215,NL
-3574833216,3574833279,GB
-3574833280,3574833311,NL
-3574833312,3574833343,GB
-3574833344,3574833359,NL
-3574833360,3574833407,GB
-3574833408,3574833439,NL
-3574833440,3574834431,GB
-3574834432,3574834559,NL
-3574834560,3574834943,GB
-3574834944,3574835199,NL
-3574835200,3574836351,GB
-3574836352,3574838015,NL
-3574838016,3574838271,GB
-3574838272,3574838527,NL
-3574838528,3574857727,GB
-3574857728,3574915455,DE
-3574915456,3574915487,CH
-3574915488,3574917375,DE
-3574917376,3574917631,CH
-3574917632,3574918751,DE
-3574918752,3574918783,CH
-3574918784,3574919359,DE
-3574919360,3574919391,FR
-3574919392,3574920503,DE
-3574920504,3574920511,LU
-3574920512,3574923263,DE
+3574824960,3574830079,GB
+3574830080,3574831103,NL
+3574831104,3574857727,GB
+3574857728,3574923263,DE
3574923264,3574939647,RU
-3574939648,3574956031,SE
+3574939648,3574941375,SE
+3574941376,3574941439,NO
+3574941440,3574949743,SE
+3574949744,3574949759,NO
+3574949760,3574956031,SE
3574956032,3574972415,IT
3574972416,3574988799,LV
3574988800,3575054335,PT
@@ -166167,1359 +86512,277 @@
3575185408,3575250943,PL
3575250944,3575316479,IT
3575316480,3575349247,RU
-3575349248,3575351943,ES
-3575351944,3575351951,FR
-3575351952,3575354599,ES
-3575354600,3575354607,GB
-3575354608,3575355231,ES
-3575355232,3575355247,GB
-3575355248,3575358799,ES
-3575358800,3575358815,FR
-3575358816,3575360895,ES
-3575360896,3575360903,FR
-3575360904,3575365983,ES
-3575365984,3575365991,FR
-3575365992,3575366135,ES
-3575366136,3575366143,GB
-3575366144,3575373183,ES
-3575373184,3575373191,GB
-3575373192,3575375279,ES
-3575375280,3575375287,FR
-3575375288,3575375319,ES
-3575375320,3575375327,GB
-3575375328,3575376191,ES
-3575376192,3575376199,US
-3575376200,3575382015,ES
-3575382016,3575412991,FI
-3575412992,3575413119,RU
-3575413120,3575447551,FI
+3575349248,3575382015,ES
+3575382016,3575447551,FI
3575447552,3575513087,CZ
3575513088,3575545855,PT
3575545856,3575562239,FR
3575562240,3575578623,DE
-3575578624,3575578879,BE
-3575578880,3575579135,AU
-3575579136,3575579647,BE
-3575579648,3575579903,AU
-3575579904,3575581439,BE
-3575581440,3575581695,EU
-3575581696,3575582207,BE
-3575582208,3575582463,CH
-3575582464,3575582719,FR
-3575582720,3575583103,BE
-3575583104,3575583111,HU
-3575583112,3575583115,GB
-3575583116,3575583119,FR
-3575583120,3575583231,BE
-3575583232,3575583487,IT
-3575583488,3575585791,BE
-3575585792,3575586047,EG
-3575586048,3575586303,IT
-3575586304,3575586815,BE
-3575586816,3575587071,GB
-3575587072,3575587231,BE
-3575587232,3575587247,NL
-3575587248,3575587255,FR
-3575587256,3575587263,BE
-3575587264,3575587271,CH
-3575587272,3575587287,BE
-3575587288,3575587295,PL
-3575587296,3575587319,BE
-3575587320,3575587323,PL
-3575587324,3575587839,BE
-3575587840,3575588351,GB
-3575588352,3575588863,BE
-3575588864,3575589631,A2
+3575578624,3575589631,BE
3575589632,3575589887,CY
-3575589888,3575590399,BE
-3575590400,3575590655,A2
+3575589888,3575590655,BE
3575590656,3575590911,GB
-3575590912,3575595007,BE
-3575595008,3575595519,GB
-3575595520,3575596287,BE
-3575596288,3575596415,GB
-3575596416,3575596543,BE
-3575596544,3575596799,FR
-3575596800,3575622607,BE
-3575622608,3575622611,GB
-3575622612,3575622655,BE
-3575622656,3575622815,GB
-3575622816,3575622847,BE
-3575622848,3575622879,IT
-3575622880,3575622911,FI
-3575622912,3575623167,GB
-3575623168,3575624703,BE
-3575624704,3575624959,EU
-3575624960,3575624991,GB
-3575624992,3575624999,IT
-3575625000,3575625007,GB
-3575625008,3575625023,NL
-3575625024,3575625027,EG
-3575625028,3575625035,BE
-3575625036,3575625039,GB
-3575625040,3575625047,BE
-3575625048,3575625055,FI
-3575625056,3575625071,BE
-3575625072,3575625087,PL
-3575625088,3575625103,BE
-3575625104,3575625151,GB
-3575625152,3575625351,BE
-3575625352,3575625359,GB
-3575625360,3575625375,BE
-3575625376,3575625407,IT
-3575625408,3575625439,BE
-3575625440,3575625455,ES
-3575625456,3575625471,BE
-3575625472,3575625503,NO
-3575625504,3575625983,BE
-3575625984,3575625991,SE
-3575625992,3575626047,BE
-3575626048,3575626111,FR
-3575626112,3575626319,BE
-3575626320,3575626335,GB
-3575626336,3575626351,ES
-3575626352,3575626367,DE
-3575626368,3575626503,BE
-3575626504,3575626511,CH
-3575626512,3575626519,BE
-3575626520,3575626527,FR
-3575626528,3575626567,BE
-3575626568,3575626575,RO
-3575626576,3575626599,BE
-3575626600,3575626607,IE
-3575626608,3575626631,BE
-3575626632,3575626639,GB
-3575626640,3575626647,DE
-3575626648,3575626655,IT
-3575626656,3575626751,BE
-3575626752,3575627007,A2
-3575627008,3575627311,BE
-3575627312,3575627327,ES
-3575627328,3575627335,SE
-3575627336,3575627359,BE
-3575627360,3575627367,ES
-3575627368,3575627423,BE
-3575627424,3575627431,DE
-3575627432,3575627487,BE
-3575627488,3575627503,GB
-3575627504,3575627711,BE
-3575627712,3575627775,GB
-3575627776,3575628543,NL
-3575628544,3575628631,BE
-3575628632,3575628639,GB
-3575628640,3575628671,BE
-3575628672,3575628687,IE
-3575628688,3575628815,BE
-3575628816,3575628823,ES
-3575628824,3575628831,FR
-3575628832,3575629183,BE
-3575629184,3575629247,NL
-3575629248,3575629279,BE
-3575629280,3575629287,GB
-3575629288,3575629295,BE
-3575629296,3575629303,NL
-3575629304,3575629823,BE
-3575629824,3575629855,GR
-3575629856,3575629871,DE
-3575629872,3575629935,BE
-3575629936,3575629951,FR
-3575629952,3575630015,BE
-3575630016,3575630023,GR
-3575630024,3575630063,BE
-3575630064,3575630079,ZA
-3575630080,3575630335,BE
-3575630336,3575630463,IT
-3575630464,3575630591,CH
-3575630592,3575630847,IL
-3575630848,3575630975,BE
-3575630976,3575630991,FR
-3575630992,3575631103,BE
-3575631104,3575631359,EU
-3575631360,3575631615,BE
-3575631616,3575631631,SE
-3575631632,3575631639,BE
-3575631640,3575631647,CH
-3575631648,3575631663,SE
-3575631664,3575631679,DE
-3575631680,3575631695,SE
-3575631696,3575631711,IT
-3575631712,3575631759,BE
-3575631760,3575631775,ZA
-3575631776,3575631791,BE
-3575631792,3575631799,ES
-3575631800,3575631807,CZ
-3575631808,3575631855,BE
-3575631856,3575631863,ZA
-3575631864,3575631871,BE
-3575631872,3575632127,IL
-3575632128,3575632639,BE
-3575632640,3575632655,NO
-3575632656,3575632703,BE
-3575632704,3575632711,GB
-3575632712,3575632783,BE
-3575632784,3575632791,GB
-3575632792,3575632847,BE
-3575632848,3575632863,CH
-3575632864,3575632879,BE
-3575632880,3575632895,DE
-3575632896,3575632967,BE
-3575632968,3575632975,GB
-3575632976,3575632991,BE
-3575632992,3575632999,IT
-3575633000,3575633039,BE
-3575633040,3575633055,DE
-3575633056,3575633063,SE
-3575633064,3575633071,NL
-3575633072,3575633087,BE
-3575633088,3575633119,GB
-3575633120,3575633135,BE
-3575633136,3575633143,GB
-3575633144,3575633599,BE
-3575633600,3575633663,NL
-3575633664,3575633727,BE
-3575633728,3575633735,AT
-3575633736,3575633743,IT
-3575633744,3575633783,BE
-3575633784,3575633791,DE
-3575633792,3575633887,BE
-3575633888,3575633895,SE
-3575633896,3575633919,BE
-3575633920,3575633983,CH
-3575633984,3575633991,DE
-3575633992,3575633999,BE
-3575634000,3575634007,PT
-3575634008,3575634015,DK
-3575634016,3575634047,GB
-3575634048,3575634183,BE
-3575634184,3575634191,AT
-3575634192,3575634255,BE
-3575634256,3575634271,IT
-3575634272,3575634367,BE
-3575634368,3575634399,NO
-3575634400,3575634431,GB
-3575634432,3575634455,BE
-3575634456,3575634463,DE
-3575634464,3575634495,BE
-3575634496,3575634511,FI
-3575634512,3575634591,BE
-3575634592,3575634599,ES
-3575634600,3575634607,BE
-3575634608,3575634615,GB
-3575634616,3575634623,DE
-3575634624,3575634695,BE
-3575634696,3575634703,FI
-3575634704,3575634711,BE
-3575634712,3575634719,DE
-3575634720,3575634767,BE
-3575634768,3575634775,NO
-3575634776,3575634783,BE
-3575634784,3575634791,FR
-3575634792,3575634799,ES
-3575634800,3575634807,BE
-3575634808,3575634815,SE
-3575634816,3575634879,BE
-3575634880,3575634911,GB
-3575634912,3575634919,SE
-3575634920,3575634927,GB
-3575634928,3575634935,IT
-3575634936,3575635015,BE
-3575635016,3575635023,CH
-3575635024,3575635039,ES
-3575635040,3575635055,BE
-3575635056,3575635063,CH
-3575635064,3575635071,BE
-3575635072,3575635087,SE
-3575635088,3575635103,BE
-3575635104,3575635119,PT
-3575635120,3575635135,PL
-3575635136,3575635151,DE
-3575635152,3575635159,PT
-3575635160,3575635167,DE
-3575635168,3575635175,GB
-3575635176,3575635199,BE
-3575635200,3575635455,NO
-3575635456,3575635463,RU
-3575635464,3575635471,GB
-3575635472,3575635583,BE
-3575635584,3575635615,EG
-3575635616,3575635631,FI
-3575635632,3575635647,BE
-3575635648,3575635679,GB
-3575635680,3575635695,BE
-3575635696,3575635703,GB
-3575635704,3575635775,BE
-3575635776,3575635839,CH
-3575635840,3575635847,GB
-3575635848,3575635855,BE
-3575635856,3575635871,TR
-3575635872,3575635983,BE
-3575635984,3575635999,DE
-3575636000,3575636143,BE
-3575636144,3575636151,HU
-3575636152,3575636607,BE
-3575636608,3575636735,FR
-3575636736,3575636807,BE
-3575636808,3575636815,GB
-3575636816,3575636823,BE
-3575636824,3575636831,RU
-3575636832,3575636855,BE
-3575636856,3575636863,DE
-3575636864,3575636871,BE
-3575636872,3575636879,CZ
-3575636880,3575636895,BE
-3575636896,3575636903,PL
-3575636904,3575636911,CZ
-3575636912,3575636927,BE
-3575636928,3575636959,DE
-3575636960,3575636983,BE
-3575636984,3575636991,FR
-3575636992,3575637039,BE
-3575637040,3575637055,DE
-3575637056,3575637151,BE
-3575637152,3575637183,GB
-3575637184,3575637407,BE
-3575637408,3575637439,LU
-3575637440,3575637471,GB
-3575637472,3575638103,BE
-3575638104,3575638111,GB
-3575638112,3575638175,BE
-3575638176,3575638181,GB
-3575638182,3575638182,EU
-3575638183,3575638239,GB
-3575638240,3575638263,BE
-3575638264,3575638271,PL
-3575638272,3575638279,BE
-3575638280,3575638287,RU
-3575638288,3575638303,BE
-3575638304,3575638335,NO
-3575638336,3575638527,BE
-3575638528,3575638543,DE
-3575638544,3575638559,BE
-3575638560,3575638591,GB
-3575638592,3575638623,BE
-3575638624,3575638639,PL
-3575638640,3575638719,BE
-3575638720,3575638735,NL
-3575638736,3575638751,GR
-3575638752,3575638767,BE
-3575638768,3575638783,SE
-3575638784,3575638911,BE
-3575638912,3575638943,FR
-3575638944,3575638975,GB
-3575638976,3575639007,BE
-3575639008,3575639011,GB
-3575639012,3575639023,IE
-3575639024,3575639039,PL
-3575639040,3575640063,BE
+3575590912,3575640063,BE
3575640064,3575644159,TR
3575644160,3575709695,DK
-3575709696,3575730175,AT
-3575730176,3575730191,SA
-3575730192,3575732735,AT
-3575732736,3575732991,LI
-3575732992,3575736319,AT
-3575736320,3575736895,LI
-3575736896,3575742463,AT
+3575709696,3575739391,AT
+3575739392,3575739647,FR
+3575739648,3575742463,AT
3575742464,3575775231,RU
-3575775232,3575775295,AT
-3575775296,3575775487,NL
-3575775488,3575775743,AT
-3575775744,3575824383,NL
+3575775232,3575824383,NL
3575824384,3575832575,KW
3575832576,3575840767,NL
-3575840768,3575848991,GB
-3575848992,3575849007,NL
-3575849008,3575850255,GB
-3575850256,3575850263,NL
-3575850264,3575850543,GB
-3575850544,3575850559,NL
-3575850560,3575850783,GB
-3575850784,3575850815,NL
-3575850816,3575852799,GB
-3575852800,3575853055,NL
-3575853056,3575853311,GB
-3575853312,3575853375,NL
-3575853376,3575853439,GB
-3575853440,3575853503,NL
-3575853504,3575853567,GB
-3575853568,3575853579,NL
-3575853580,3575853587,GB
-3575853588,3575853591,NL
-3575853592,3575853619,GB
-3575853620,3575853631,NL
-3575853632,3575853635,GB
-3575853636,3575853647,NL
-3575853648,3575853655,GB
-3575853656,3575853663,NL
-3575853664,3575853691,GB
-3575853692,3575853695,NL
-3575853696,3575853719,GB
-3575853720,3575853723,NL
-3575853724,3575853739,GB
-3575853740,3575853743,NL
-3575853744,3575853763,GB
-3575853764,3575853767,NL
-3575853768,3575853799,GB
-3575853800,3575853807,NL
-3575853808,3575853815,GB
-3575853816,3575853823,NL
-3575853824,3575853831,GB
-3575853832,3575853863,NL
-3575853864,3575853871,GB
-3575853872,3575853879,NL
-3575853880,3575853895,GB
-3575853896,3575853927,NL
-3575853928,3575853943,GB
-3575853944,3575853951,NL
-3575853952,3575853959,GB
-3575853960,3575853975,NL
-3575853976,3575853999,GB
-3575854000,3575854015,NL
-3575854016,3575854031,GB
-3575854032,3575854039,NL
-3575854040,3575857151,GB
-3575857152,3575857407,BE
-3575857408,3575858529,GB
-3575858530,3575858543,US
-3575858544,3575860299,GB
-3575860300,3575860303,BE
-3575860304,3575860735,GB
-3575860736,3575860863,NL
-3575860864,3575860991,GB
-3575860992,3575861247,NL
-3575861248,3575861503,GB
-3575861504,3575861519,NL
-3575861520,3575864327,GB
-3575864328,3575864331,NL
-3575864332,3575864343,GB
-3575864344,3575864347,NL
-3575864348,3575864359,GB
-3575864360,3575864363,NL
-3575864364,3575864380,GB
-3575864381,3575864382,NL
-3575864383,3575864387,GB
-3575864388,3575864391,NL
-3575864392,3575864395,GB
-3575864396,3575864403,NL
-3575864404,3575864583,GB
-3575864584,3575864599,NL
-3575864600,3575864607,GB
-3575864608,3575864615,NL
-3575864616,3575864631,GB
-3575864632,3575864639,NL
-3575864640,3575864663,GB
-3575864664,3575864671,NL
-3575864672,3575864687,GB
-3575864688,3575864703,NL
-3575864704,3575864775,GB
-3575864776,3575864783,NL
-3575864784,3575865087,GB
-3575865088,3575865215,NL
-3575865216,3575866367,GB
-3575866368,3575867135,US
-3575867136,3575872047,GB
-3575872048,3575872063,NL
-3575872064,3575872079,GB
-3575872080,3575872095,NL
-3575872096,3575872255,GB
-3575872256,3575872767,NL
-3575872768,3575873535,GB
+3575840768,3575873535,GB
3575873536,3575906303,EE
3575906304,3575971839,FR
3575971840,3576037375,ES
-3576037376,3576038207,EU
3576038208,3576038271,GB
-3576038272,3576038335,EU
3576038336,3576038463,GB
-3576038464,3576038527,EU
3576038528,3576038591,GB
-3576038592,3576038911,EU
3576038912,3576038975,GB
-3576038976,3576039167,EU
3576039168,3576039231,GB
-3576039232,3576039359,EU
3576039360,3576039383,GB
-3576039384,3576039391,EU
3576039392,3576039455,GB
-3576039456,3576039519,EU
3576039520,3576039551,GB
-3576039552,3576039583,EU
3576039584,3576039647,GB
-3576039648,3576039807,EU
3576039808,3576039839,GB
-3576039840,3576039903,EU
3576039904,3576039935,GB
-3576039936,3576040063,EU
3576040064,3576040127,GB
-3576040128,3576040191,EU
-3576040192,3576040447,GB
-3576040448,3576040831,EU
+3576040216,3576040223,GB
+3576040272,3576040287,GB
+3576040352,3576040383,GB
3576040832,3576040959,GB
-3576040960,3576041471,EU
3576041472,3576041535,GB
-3576041536,3576041727,EU
3576041728,3576041791,GB
-3576041792,3576041831,EU
3576041832,3576041847,GB
-3576041848,3576041863,EU
3576041864,3576041871,GB
-3576041872,3576041879,EU
3576041880,3576041887,GB
-3576041888,3576041903,EU
3576041904,3576041919,GB
-3576041920,3576041935,EU
3576041936,3576041943,GB
-3576041944,3576041951,EU
3576041952,3576041975,GB
-3576041976,3576042111,EU
3576042112,3576042239,GB
-3576042240,3576042495,EU
3576042496,3576042623,GB
-3576042624,3576042687,EU
3576042688,3576042695,GB
-3576042696,3576042751,EU
3576042752,3576042815,GB
-3576042816,3576045583,EU
3576045584,3576045599,GB
-3576045600,3576045663,EU
3576045664,3576045679,GB
-3576045680,3576045711,EU
3576045712,3576045735,GB
-3576045736,3576045799,EU
3576045800,3576045807,GB
-3576045808,3576045815,EU
3576045816,3576045823,GB
-3576045824,3576048639,EU
3576048640,3576048767,GB
-3576048768,3576048959,EU
3576048960,3576049023,GB
-3576049024,3576049151,EU
3576049152,3576050047,GB
-3576050048,3576053759,EU
3576053760,3576054911,GB
-3576054912,3576055103,EU
3576055104,3576055111,GB
-3576055112,3576055119,EU
3576055120,3576055127,GB
-3576055128,3576055151,EU
3576055152,3576055167,GB
-3576055168,3576055183,EU
3576055184,3576055199,GB
-3576055200,3576055207,EU
3576055208,3576055215,GB
-3576055216,3576055279,EU
3576055280,3576055551,GB
-3576055552,3576055807,EU
3576055808,3576055871,GB
-3576055872,3576055935,EU
3576055936,3576055999,GB
-3576056000,3576056191,EU
3576056192,3576056255,GB
-3576056256,3576056319,EU
3576056320,3576056447,GB
-3576056448,3576056703,EU
3576056704,3576056767,GB
-3576056768,3576056855,EU
3576056856,3576056871,GB
-3576056872,3576056879,EU
3576056880,3576056887,GB
-3576056888,3576056919,EU
3576056920,3576056927,GB
-3576056928,3576056935,EU
3576056936,3576056943,GB
-3576056944,3576056951,EU
3576056952,3576056975,GB
-3576056976,3576056991,EU
3576056992,3576056999,GB
-3576057000,3576057039,EU
-3576057040,3576057055,GB
-3576057056,3576057631,EU
+3576057040,3576057047,GB
3576057632,3576057647,GB
-3576057648,3576057711,EU
3576057712,3576057743,GB
-3576057744,3576057823,EU
3576057824,3576057839,GB
-3576057840,3576058879,EU
3576058880,3576059007,GB
-3576059008,3576059647,EU
3576059648,3576059679,GB
-3576059680,3576059711,EU
3576059712,3576059743,GB
-3576059744,3576059775,EU
3576059776,3576059807,GB
-3576059808,3576060095,EU
-3576060096,3576060159,GB
-3576060160,3576060287,EU
3576060288,3576060351,GB
-3576060352,3576061039,EU
3576061040,3576061055,GB
-3576061056,3576061119,EU
3576061120,3576061135,GB
-3576061136,3576061183,EU
3576061184,3576061247,GB
-3576061248,3576061311,EU
3576061312,3576061439,GB
-3576061440,3576061583,EU
3576061584,3576061591,GB
-3576061592,3576061619,EU
3576061620,3576061631,GB
-3576061632,3576061639,EU
3576061640,3576061647,GB
-3576061648,3576061687,EU
3576061688,3576061695,GB
-3576061696,3576062463,EU
3576062464,3576062479,GB
-3576062480,3576064319,EU
3576064320,3576064448,GB
-3576064449,3576064543,EU
3576064544,3576064559,GB
-3576064560,3576065407,EU
-3576065408,3576065535,GB
-3576065536,3576065855,EU
3576065856,3576065887,GB
-3576065888,3576066303,EU
3576066304,3576066431,GB
-3576066432,3576067071,EU
3576067072,3576067199,GB
-3576067200,3576068351,EU
3576068352,3576068479,GB
-3576068480,3576068863,EU
3576068864,3576068927,GB
-3576068928,3576069055,EU
3576069056,3576069119,GB
-3576069120,3576069247,EU
3576069248,3576069279,GB
-3576069280,3576069311,EU
3576069312,3576069343,GB
-3576069344,3576070695,EU
3576070696,3576070703,GB
-3576070704,3576070711,EU
3576070712,3576070719,GB
-3576070720,3576070727,EU
3576070728,3576070735,GB
-3576070736,3576070775,EU
3576070776,3576070783,GB
-3576070784,3576071295,EU
3576071296,3576071423,GB
-3576071424,3576071551,EU
3576071552,3576071679,GB
-3576071680,3576071935,EU
3576071936,3576071951,GB
-3576071952,3576072063,EU
3576072064,3576072079,GB
-3576072080,3576072287,EU
3576072288,3576072319,GB
-3576072320,3576072415,EU
-3576072416,3576072703,GB
-3576072704,3576073215,EU
+3576072416,3576072447,GB
3576073216,3576073279,GB
-3576073280,3576074751,EU
3576074752,3576074879,GB
-3576074880,3576075263,EU
3576075264,3576075327,GB
-3576075328,3576075647,EU
3576075648,3576075711,GB
-3576075712,3576075775,EU
3576075776,3576075903,GB
-3576075904,3576076271,EU
3576076272,3576076351,GB
-3576076352,3576076567,EU
3576076568,3576076575,GB
-3576076576,3576076623,EU
-3576076624,3576076631,GB
-3576076632,3576076703,EU
-3576076704,3576076719,GB
-3576076720,3576076783,EU
3576076784,3576076791,GB
-3576076792,3576077439,EU
3576077440,3576077471,GB
-3576077472,3576077567,EU
3576077568,3576077695,GB
-3576077696,3576077935,EU
3576077936,3576077967,GB
-3576077968,3576078143,EU
3576078144,3576078175,GB
-3576078176,3576078463,EU
3576078464,3576078591,GB
-3576078592,3576079999,EU
3576080000,3576080127,GB
-3576080128,3576080223,EU
3576080224,3576080255,GB
-3576080256,3576080775,EU
3576080776,3576080783,GB
-3576080784,3576080791,EU
3576080792,3576080799,GB
-3576080800,3576080807,EU
3576080808,3576080815,GB
-3576080816,3576080823,EU
3576080824,3576080831,GB
-3576080832,3576082079,EU
3576082080,3576082111,GB
-3576082112,3576082191,EU
3576082192,3576082223,GB
-3576082224,3576082687,EU
3576082688,3576082943,GB
-3576082944,3576084479,EU
3576084480,3576084543,GB
-3576084544,3576084607,EU
3576084608,3576084671,GB
-3576084672,3576084703,EU
3576084704,3576084735,GB
-3576084736,3576084863,EU
3576084864,3576084927,GB
-3576084928,3576085183,EU
3576085184,3576085215,GB
-3576085216,3576085695,EU
3576085696,3576085711,GB
-3576085712,3576086015,EU
3576086016,3576086143,GB
-3576086144,3576086367,EU
-3576086368,3576086431,GB
-3576086432,3576086495,EU
+3576086368,3576086399,GB
3576086496,3576086527,GB
-3576086528,3576086567,EU
3576086568,3576086571,GB
-3576086572,3576086575,EU
3576086576,3576086591,GB
-3576086592,3576086599,EU
3576086600,3576086603,GB
-3576086604,3576087807,EU
3576087808,3576087823,GB
-3576087824,3576087951,EU
3576087952,3576087967,GB
-3576087968,3576088031,EU
3576088032,3576088047,GB
-3576088048,3576088223,EU
3576088224,3576088231,GB
-3576088232,3576088375,EU
3576088376,3576088383,GB
-3576088384,3576088479,EU
3576088480,3576088511,GB
-3576088512,3576088959,EU
3576088960,3576088967,GB
-3576088968,3576089023,EU
3576089024,3576089039,GB
-3576089040,3576089439,EU
3576089440,3576089471,GB
-3576089472,3576089775,EU
3576089776,3576089791,GB
-3576089792,3576091407,EU
3576091408,3576091423,GB
-3576091424,3576091455,EU
3576091456,3576091479,GB
-3576091480,3576091967,EU
3576091968,3576091983,GB
-3576091984,3576091999,EU
3576092000,3576092031,GB
-3576092032,3576092127,EU
3576092128,3576092159,GB
-3576092160,3576092863,EU
3576092864,3576092895,GB
-3576092896,3576093063,EU
3576093064,3576093071,GB
-3576093072,3576093183,EU
3576093184,3576093247,GB
-3576093248,3576095231,EU
3576095232,3576096767,GB
-3576096768,3576099071,EU
3576099072,3576100863,GB
-3576100864,3576101375,EU
-3576101376,3576103375,GB
-3576103376,3576103423,FR
-3576103424,3576105791,GB
-3576105792,3576105855,FR
-3576105856,3576107711,GB
-3576107712,3576107743,FR
-3576107744,3576108287,GB
-3576108288,3576108303,FR
-3576108304,3576111423,GB
-3576111424,3576111551,FR
-3576111552,3576119471,GB
-3576119472,3576119487,CH
-3576119488,3576121343,GB
-3576121344,3576121471,CH
-3576121472,3576121855,GB
-3576121856,3576122111,CH
-3576122112,3576133759,GB
-3576133760,3576133775,CH
-3576133776,3576134399,GB
-3576134400,3576134463,SE
-3576134464,3576134655,CH
-3576134656,3576135295,GB
-3576135296,3576135359,CH
-3576135360,3576135679,GB
+3576101376,3576111359,GB
+3576111360,3576111615,FR
+3576111616,3576135679,GB
3576135680,3576168447,DE
3576168448,3576233983,GB
-3576233984,3576236671,FR
-3576236672,3576236687,GB
-3576236688,3576236703,FR
-3576236704,3576236719,GB
-3576236720,3576236743,FR
-3576236744,3576236751,GB
-3576236752,3576236775,FR
-3576236776,3576236783,GB
-3576236784,3576236895,FR
-3576236896,3576236927,GB
-3576236928,3576237055,FR
-3576237056,3576237119,GB
-3576237120,3576237231,FR
-3576237232,3576237311,GB
-3576237312,3576237455,FR
-3576237456,3576237503,GB
-3576237504,3576237575,FR
-3576237576,3576237583,GB
-3576237584,3576237599,FR
-3576237600,3576237631,GB
-3576237632,3576237663,FR
-3576237664,3576237679,GB
-3576237680,3576237711,FR
-3576237712,3576237743,GB
-3576237744,3576237919,FR
-3576237920,3576237935,GB
-3576237936,3576238863,FR
-3576238864,3576238879,GB
-3576238880,3576238927,FR
-3576238928,3576238975,GB
-3576238976,3576239007,FR
-3576239008,3576239023,GB
-3576239024,3576239039,FR
-3576239040,3576239071,GB
-3576239072,3576239087,FR
-3576239088,3576239103,GB
-3576239104,3576240039,FR
-3576240040,3576240047,GB
-3576240048,3576240111,FR
-3576240112,3576240127,GB
-3576240128,3576240475,FR
-3576240476,3576240511,GB
-3576240512,3576240575,FR
-3576240576,3576240895,GB
-3576240896,3576241855,FR
-3576241856,3576241887,GB
-3576241888,3576241951,FR
-3576241952,3576241991,GB
-3576241992,3576242007,FR
-3576242008,3576242031,GB
-3576242032,3576242039,FR
-3576242040,3576242047,GB
-3576242048,3576242111,FR
-3576242112,3576242143,GB
-3576242144,3576244119,FR
-3576244120,3576244143,GB
-3576244144,3576246423,FR
-3576246424,3576246463,GB
-3576246464,3576246656,FR
-3576246657,3576246727,GB
-3576246728,3576246743,FR
-3576246744,3576246751,GB
-3576246752,3576249743,FR
-3576249744,3576249791,GB
-3576249792,3576249807,FR
-3576249808,3576249823,GB
-3576249824,3576249831,FR
-3576249832,3576249839,GB
-3576249840,3576250175,FR
-3576250176,3576250335,GB
-3576250336,3576250623,FR
-3576250624,3576251007,GB
-3576251008,3576251055,FR
-3576251056,3576251095,GB
-3576251096,3576251103,FR
-3576251104,3576251135,GB
-3576251136,3576251407,FR
-3576251408,3576251519,GB
-3576251520,3576251583,FR
-3576251584,3576251599,GB
-3576251600,3576251615,FR
-3576251616,3576251647,GB
-3576251648,3576254543,FR
-3576254544,3576254551,GB
-3576254552,3576254567,FR
-3576254568,3576254575,GB
-3576254576,3576254631,FR
-3576254632,3576254647,GB
-3576254648,3576254847,FR
-3576254848,3576254855,GB
-3576254856,3576254863,FR
-3576254864,3576254879,GB
-3576254880,3576254895,FR
-3576254896,3576254911,GB
-3576254912,3576255375,FR
-3576255376,3576255383,GB
-3576255384,3576255407,FR
-3576255408,3576255423,GB
-3576255424,3576255431,FR
-3576255432,3576255439,GB
-3576255440,3576255447,FR
-3576255448,3576255455,GB
-3576255456,3576255471,FR
-3576255472,3576255479,GB
-3576255480,3576255519,FR
-3576255520,3576255527,GB
-3576255528,3576255543,FR
-3576255544,3576255567,GB
-3576255568,3576255575,FR
-3576255576,3576255583,GB
-3576255584,3576255615,FR
-3576255616,3576255623,GB
-3576255624,3576255631,FR
-3576255632,3576255647,GB
-3576255648,3576255671,FR
-3576255672,3576255679,GB
-3576255680,3576255703,FR
-3576255704,3576255719,GB
-3576255720,3576255727,FR
-3576255728,3576255751,GB
-3576255752,3576255887,FR
-3576255888,3576255919,GB
-3576255920,3576255983,FR
-3576255984,3576255999,GB
-3576256000,3576256127,FR
-3576256128,3576256143,GB
-3576256144,3576256239,FR
-3576256240,3576256255,GB
-3576256256,3576256263,FR
-3576256264,3576256287,GB
-3576256288,3576256351,FR
-3576256352,3576256367,GB
-3576256368,3576256383,FR
-3576256384,3576256415,GB
-3576256416,3576256431,FR
-3576256432,3576256511,GB
-3576256512,3576256895,FR
-3576256896,3576256959,GB
-3576256960,3576256991,FR
-3576256992,3576257007,GB
-3576257008,3576257279,FR
-3576257280,3576257295,GB
-3576257296,3576257327,FR
-3576257328,3576257359,GB
-3576257360,3576257367,FR
-3576257368,3576257375,GB
-3576257376,3576257391,FR
-3576257392,3576257399,GB
-3576257400,3576257439,FR
-3576257440,3576257471,GB
-3576257472,3576257487,FR
-3576257488,3576257535,GB
-3576257536,3576257551,FR
-3576257552,3576257615,GB
-3576257616,3576257631,FR
-3576257632,3576257647,GB
-3576257648,3576257727,FR
-3576257728,3576257807,GB
-3576257808,3576257823,FR
-3576257824,3576257839,GB
-3576257840,3576257855,FR
-3576257856,3576257871,GB
-3576257872,3576257887,FR
-3576257888,3576257903,GB
-3576257904,3576257975,FR
-3576257976,3576258015,GB
-3576258016,3576258351,FR
-3576258352,3576258399,GB
-3576258400,3576258415,FR
-3576258416,3576258431,GB
-3576258432,3576258447,FR
-3576258448,3576258479,GB
-3576258480,3576258495,FR
-3576258496,3576258511,GB
-3576258512,3576258527,FR
-3576258528,3576258575,GB
-3576258576,3576258591,FR
-3576258592,3576258623,GB
-3576258624,3576258671,FR
-3576258672,3576258687,GB
-3576258688,3576258703,FR
-3576258704,3576258783,GB
-3576258784,3576258863,FR
-3576258864,3576258871,GB
-3576258872,3576258887,FR
-3576258888,3576258895,GB
-3576258896,3576259103,FR
-3576259104,3576259199,GB
-3576259200,3576259215,FR
-3576259216,3576259247,GB
-3576259248,3576259279,FR
-3576259280,3576259295,GB
-3576259296,3576259311,FR
-3576259312,3576259327,GB
-3576259328,3576259343,FR
-3576259344,3576259391,GB
-3576259392,3576259423,FR
-3576259424,3576259439,GB
-3576259440,3576259471,FR
-3576259472,3576259487,GB
-3576259488,3576259519,FR
-3576259520,3576259583,GB
-3576259584,3576260095,FR
-3576260096,3576260111,GB
-3576260112,3576260175,FR
-3576260176,3576260191,GB
-3576260192,3576260207,FR
-3576260208,3576260223,GB
-3576260224,3576260239,FR
-3576260240,3576260255,GB
-3576260256,3576260271,FR
-3576260272,3576260287,GB
-3576260288,3576260303,FR
-3576260304,3576260335,GB
-3576260336,3576260415,FR
-3576260416,3576260447,GB
-3576260448,3576260463,FR
-3576260464,3576260543,GB
-3576260544,3576260559,FR
-3576260560,3576260607,GB
-3576260608,3576260655,FR
-3576260656,3576260663,GB
-3576260664,3576260671,FR
-3576260672,3576260679,GB
-3576260680,3576260703,FR
-3576260704,3576260735,GB
-3576260736,3576261415,FR
-3576261416,3576261439,GB
-3576261440,3576261503,FR
-3576261504,3576261631,GB
-3576261632,3576261887,FR
-3576261888,3576261919,GB
-3576261920,3576261927,FR
-3576261928,3576261935,GB
-3576261936,3576262119,FR
-3576262120,3576262127,GB
-3576262128,3576263679,FR
-3576263680,3576263695,ES
-3576263696,3576263831,FR
-3576263832,3576263839,GB
-3576263840,3576263855,FR
-3576263856,3576263871,GB
-3576263872,3576263879,FR
-3576263880,3576263903,GB
-3576263904,3576263911,FR
-3576263912,3576263919,GB
-3576263920,3576264263,FR
-3576264264,3576264271,GB
-3576264272,3576264287,FR
-3576264288,3576264319,GB
-3576264320,3576264383,FR
-3576264384,3576264399,GB
-3576264400,3576264415,FR
-3576264416,3576264439,GB
-3576264440,3576264639,FR
-3576264640,3576264655,GB
-3576264656,3576299519,FR
+3576233984,3576236543,FR
+3576236544,3576241991,GB
+3576241992,3576241999,FR
+3576242000,3576242383,GB
+3576242384,3576242391,FR
+3576242392,3576245247,GB
+3576245248,3576245503,FR
+3576245504,3576251135,GB
+3576251136,3576251391,FR
+3576251392,3576252415,GB
+3576252416,3576252671,FR
+3576252672,3576253807,GB
+3576253808,3576253815,FR
+3576253816,3576254511,GB
+3576254512,3576254527,FR
+3576254528,3576254695,GB
+3576254696,3576254703,FR
+3576254704,3576254775,GB
+3576254776,3576254783,FR
+3576254784,3576260607,GB
+3576260608,3576260623,FR
+3576260624,3576260863,GB
+3576260864,3576261119,FR
+3576261120,3576263447,GB
+3576263448,3576263455,FR
+3576263456,3576263679,GB
+3576263680,3576263935,FR
+3576263936,3576264255,GB
+3576264256,3576264263,FR
+3576264264,3576264351,GB
+3576264352,3576264359,FR
+3576264360,3576264375,GB
+3576264376,3576264383,FR
+3576264384,3576264679,GB
+3576264680,3576264687,FR
+3576264688,3576264959,GB
+3576264960,3576265215,FR
+3576265216,3576266751,GB
+3576266752,3576299519,FR
3576299520,3576365055,AE
3576365056,3576430591,TR
3576430592,3576496127,FR
3576496128,3576561663,IT
-3576561664,3576603135,NL
-3576603136,3576603391,BE
-3576603392,3576603647,FR
-3576603648,3576604159,NL
-3576604160,3576604415,HU
-3576604416,3576605183,NL
-3576605184,3576605439,RO
-3576605440,3576605695,NL
-3576605696,3576605951,CZ
-3576605952,3576606207,AT
-3576606208,3576606463,GB
-3576606464,3576606719,NL
-3576606720,3576606975,SE
-3576606976,3576607231,NO
-3576607232,3576607487,PL
-3576607488,3576607743,DE
-3576607744,3576620543,NL
-3576620544,3576620799,GB
-3576620800,3576622079,NL
-3576622080,3576622591,GB
-3576622592,3576623871,NL
-3576623872,3576624127,AT
-3576624128,3576627199,NL
+3576561664,3576627199,NL
3576627200,3576692735,AT
3576692736,3576758271,GB
3576758272,3576823807,BE
3576823808,3576889343,SE
3576889344,3576954879,NL
3576954880,3576987647,NO
-3576987648,3577000959,GB
-3577000960,3577001215,A2
-3577001216,3577001343,NL
-3577001344,3577001983,GB
-3577001984,3577002751,NL
-3577002752,3577003519,A2
-3577003520,3577003643,NL
-3577003644,3577003647,GB
-3577003648,3577004031,NL
-3577004032,3577020415,GB
+3576987648,3577020415,GB
3577020416,3577085951,NL
3577085952,3577151487,DE
-3577151488,3577151999,FR
-3577152000,3577152511,RE
-3577152512,3577153535,FR
-3577153536,3577154047,RE
-3577154048,3577154303,FR
-3577154304,3577155327,RE
-3577155328,3577155455,FR
-3577155456,3577156735,RE
-3577156736,3577156863,FR
-3577156864,3577159679,RE
-3577159680,3577161727,FR
-3577161728,3577161983,RE
-3577161984,3577162751,FR
-3577162752,3577163263,RE
-3577163264,3577164031,FR
-3577164032,3577164287,RE
-3577164288,3577167871,FR
+3577151488,3577152767,RE
+3577152768,3577154047,FR
+3577154048,3577155583,RE
+3577155584,3577155839,FR
+3577155840,3577156351,RE
+3577156352,3577157631,FR
+3577157632,3577158399,RE
+3577158400,3577158911,FR
+3577158912,3577159167,RE
+3577159168,3577159679,FR
+3577159680,3577159935,RE
+3577159936,3577160959,FR
+3577160960,3577161023,YT
+3577161024,3577161087,FR
+3577161088,3577161215,YT
+3577161216,3577165567,FR
+3577165568,3577166079,RE
+3577166080,3577166591,FR
+3577166592,3577167103,RE
+3577167104,3577167871,FR
3577167872,3577184255,ET
3577184256,3577217023,CH
3577217024,3577282559,FR
3577282560,3577348095,IL
-3577348096,3577392767,PT
-3577392768,3577392783,DE
-3577392784,3577413631,PT
-3577413632,3577417519,RU
-3577417520,3577417535,KZ
-3577417536,3577479167,RU
+3577348096,3577413631,PT
+3577413632,3577479167,RU
3577479168,3577544703,ES
-3577544704,3577545863,DE
-3577545864,3577545871,US
-3577545872,3577545983,DE
+3577544704,3577545983,DE
3577545984,3577546111,SE
-3577546112,3577546239,DE
-3577546240,3577546367,US
-3577546368,3577547487,DE
-3577547488,3577547519,FR
-3577547520,3577551407,DE
-3577551408,3577551411,US
-3577551412,3577557215,DE
-3577557216,3577557231,US
-3577557232,3577571391,DE
-3577571392,3577571399,DK
-3577571400,3577577231,DE
-3577577232,3577577247,US
-3577577248,3577610151,DE
-3577610152,3577610159,FR
-3577610160,3577610367,DE
-3577610368,3577610495,GB
-3577610496,3577610751,DE
-3577610752,3577611199,CH
-3577611200,3577611263,EU
-3577611264,3577612287,DE
-3577612288,3577612319,EU
-3577612320,3577612383,DE
-3577612384,3577612415,EU
-3577612416,3577612543,NO
-3577612544,3577612799,HU
-3577612800,3577613055,FI
-3577613056,3577613311,EU
-3577613312,3577613567,DE
-3577613568,3577614079,EU
-3577614080,3577614111,DE
-3577614112,3577614143,EU
-3577614144,3577614207,DE
-3577614208,3577617919,EU
-3577617920,3577618175,DE
-3577618176,3577618431,EU
-3577618432,3577618447,GB
-3577618448,3577618463,NL
-3577618464,3577618559,GB
-3577618560,3577618623,BE
-3577618624,3577618655,EU
-3577618656,3577618671,AT
-3577618672,3577618687,EU
-3577618688,3577619935,GB
-3577619936,3577619967,EU
-3577619968,3577620575,GB
-3577620576,3577620623,EU
-3577620624,3577620671,GB
-3577620672,3577620735,TR
-3577620736,3577620991,EU
-3577620992,3577621055,GB
-3577621056,3577621119,EU
-3577621120,3577621151,GB
-3577621152,3577621215,EU
-3577621216,3577621223,SK
-3577621224,3577621247,EU
-3577621248,3577622143,GB
-3577622144,3577622271,DE
-3577622272,3577622527,GB
-3577622528,3577622591,EU
-3577622592,3577622927,GB
-3577622928,3577623039,EU
-3577623040,3577623807,GB
-3577623808,3577624063,EU
-3577624064,3577624319,GB
-3577624320,3577624447,EU
-3577624448,3577624879,GB
-3577624880,3577624895,EU
-3577624896,3577625199,GB
-3577625200,3577625207,EU
-3577625208,3577625215,GB
-3577625216,3577625231,EU
-3577625232,3577626623,GB
-3577626624,3577627135,FR
-3577627136,3577627391,EU
-3577627392,3577627647,GB
-3577627648,3577627967,FR
-3577627968,3577627999,EU
-3577628000,3577628671,FR
-3577628672,3577630719,CH
-3577630720,3577632255,GB
-3577632256,3577632511,EU
-3577632512,3577632767,GB
-3577632768,3577633791,EU
-3577633792,3577633951,CZ
-3577633952,3577633959,EU
-3577633960,3577633967,CZ
-3577633968,3577634047,EU
-3577634048,3577634239,CZ
-3577634240,3577634815,EU
-3577634816,3577635455,FR
-3577635456,3577635519,EU
-3577635520,3577635839,FR
+3577546112,3577610239,DE
+3577625600,3577625855,GB
+3577626112,3577626367,GB
+3577628672,3577629695,CH
3577635840,3577636863,DE
-3577636864,3577638143,GB
-3577638144,3577638399,BE
-3577638400,3577638911,GB
-3577638912,3577638959,FR
-3577638960,3577638967,EU
-3577638968,3577639239,FR
-3577639240,3577639247,EU
-3577639248,3577639743,FR
-3577639744,3577639767,EU
-3577639768,3577639783,FR
-3577639784,3577639799,EU
-3577639800,3577639807,FR
-3577639808,3577639839,EU
-3577639840,3577639847,FR
-3577639848,3577639863,EU
-3577639864,3577639871,FR
-3577639872,3577639935,EU
-3577639936,3577640719,FR
-3577640720,3577640735,EU
-3577640736,3577641151,FR
-3577641152,3577641159,EU
-3577641160,3577641471,FR
-3577641472,3577641983,EU
-3577641984,3577642239,GB
-3577642240,3577642495,EU
-3577642496,3577642751,DE
-3577642752,3577643007,FR
-3577643008,3577643231,NL
-3577643232,3577643247,GB
-3577643248,3577643263,NL
-3577643264,3577645431,EU
-3577645432,3577645447,NL
-3577645448,3577645455,EU
-3577645456,3577645503,NL
-3577645504,3577645567,SK
-3577645568,3577645823,EU
-3577645824,3577645887,NL
-3577645888,3577645903,EU
-3577645904,3577645951,NL
-3577645952,3577646079,EU
-3577646080,3577646207,NL
-3577646208,3577646335,NO
-3577646336,3577646407,NL
-3577646408,3577646415,EU
-3577646416,3577646527,NL
-3577646528,3577646591,EU
-3577646592,3577646847,NL
-3577646848,3577647103,EU
-3577647104,3577647911,DK
-3577647912,3577647935,EU
-3577647936,3577647967,DK
-3577647968,3577647999,EU
-3577648000,3577648127,DK
-3577648128,3577648895,EU
-3577648896,3577649151,NL
-3577649152,3577650047,EU
+3577636864,3577637887,GB
+3577641200,3577641215,FR
3577650048,3577650063,NL
-3577650064,3577651199,EU
-3577651200,3577651455,GB
-3577651456,3577652223,EU
-3577652224,3577652671,IT
-3577652672,3577652735,EU
-3577652736,3577652743,NO
-3577652744,3577652751,EU
-3577652752,3577652767,NO
-3577652768,3577652863,EU
-3577652864,3577652943,NO
-3577652944,3577652991,EU
-3577652992,3577653119,NO
-3577653120,3577653247,EU
3577653248,3577655295,IT
-3577655296,3577655519,AT
-3577655520,3577655551,EU
-3577655552,3577655647,AT
-3577655648,3577655663,EU
-3577655664,3577655679,AT
-3577655680,3577655711,EU
-3577655712,3577655743,AT
-3577655744,3577655807,EU
-3577655808,3577656447,AT
-3577656448,3577657343,EU
-3577657344,3577657599,GB
-3577657600,3577657663,EU
-3577657664,3577659391,GB
-3577659392,3577659679,GR
-3577659680,3577659711,EU
-3577659712,3577659743,GR
-3577659744,3577659903,EU
-3577659904,3577660159,GB
-3577660160,3577660607,BE
-3577660608,3577660671,EU
-3577660672,3577661439,BE
-3577661440,3577663487,EU
-3577663488,3577665215,SE
-3577665216,3577665247,EU
-3577665248,3577665311,SE
-3577665312,3577665343,EU
-3577665344,3577665375,SE
-3577665376,3577665407,EU
-3577665408,3577665455,SE
-3577665456,3577665535,EU
-3577665536,3577665591,ES
-3577665592,3577665599,EU
-3577665600,3577665607,ES
-3577665608,3577665615,EU
-3577665616,3577665679,ES
-3577665680,3577665791,EU
-3577665792,3577665823,BE
-3577665824,3577665855,RO
-3577665856,3577665919,LU
-3577665920,3577666047,EU
-3577666048,3577666175,ES
-3577666176,3577667583,EU
-3577667584,3577667743,PL
-3577667744,3577668639,EU
-3577668640,3577668671,IE
-3577668672,3577668735,EU
-3577668736,3577668799,IE
-3577668800,3577669119,EU
-3577669120,3577669383,HU
-3577669384,3577669503,EU
-3577669504,3577669631,HU
-3577669632,3577671679,BE
-3577671680,3577672191,ZA
-3577672192,3577673727,DE
-3577673728,3577675775,EU
+3577663488,3577664511,SE
+3577669632,3577670655,BE
3577675776,3577741311,PT
3577741312,3578003455,SE
-3578003456,3578040319,DE
-3578040320,3578040575,EU
-3578040576,3578049023,DE
-3578049024,3578049055,CH
-3578049056,3578064383,DE
-3578064384,3578064508,EU
-3578064509,3578064510,DE
-3578064511,3578064639,EU
-3578064640,3578159615,DE
-3578159616,3578159871,EU
-3578159872,3578208127,DE
-3578208128,3578208191,PK
-3578208192,3578234623,DE
-3578234624,3578234879,EU
-3578234880,3578265599,DE
+3578003456,3578265599,DE
3578265600,3578331135,GB
3578331136,3578339327,PL
3578339328,3578347519,ES
@@ -167539,278 +86802,23 @@
3578855424,3578888191,GB
3578888192,3578920959,SK
3578920960,3578986495,IT
-3578986496,3578988095,DE
-3578988096,3578988099,CH
-3578988100,3578992895,DE
-3578992896,3578992927,CH
-3578992928,3578992959,DE
-3578992960,3578992975,GB
-3578992976,3578996999,DE
-3578997000,3578997007,CH
-3578997008,3578997935,DE
-3578997936,3578997943,FR
-3578997944,3578998575,DE
-3578998576,3578998583,GB
-3578998584,3578999647,DE
-3578999648,3578999651,CH
-3578999652,3579002879,DE
+3578986496,3579002879,DE
3579002880,3579019263,GB
3579019264,3579052031,DK
3579052032,3579117567,NL
-3579117568,3579132159,RU
-3579132160,3579132415,BY
-3579132416,3579183103,RU
-3579183104,3579183247,GB
-3579183248,3579183263,DE
-3579183264,3579188239,GB
-3579188240,3579188255,BE
-3579188256,3579188415,GB
-3579188416,3579188431,IS
-3579188432,3579189071,GB
-3579189072,3579189087,CH
-3579189088,3579193599,GB
-3579193600,3579193655,BE
-3579193656,3579193663,NL
-3579193664,3579193855,BE
-3579193856,3579194103,GB
-3579194104,3579194111,US
-3579194112,3579197055,GB
-3579197056,3579197183,US
-3579197184,3579197311,GB
+3579117568,3579183103,RU
+3579183104,3579193759,GB
+3579193760,3579193775,NL
+3579193776,3579197311,GB
3579197312,3579197439,US
-3579197440,3579197887,GB
-3579197888,3579197903,IT
-3579197904,3579204127,GB
-3579204128,3579204143,BE
-3579204144,3579204231,GB
-3579204232,3579204239,IE
-3579204240,3579204271,GB
-3579204272,3579204287,DE
-3579204288,3579204303,GB
-3579204304,3579204319,NL
-3579204320,3579205631,GB
-3579205632,3579205887,IE
-3579205888,3579210079,GB
-3579210080,3579210087,BE
-3579210088,3579212287,GB
-3579212288,3579212543,FR
-3579212544,3579213247,GB
-3579213248,3579213311,IT
-3579213312,3579221023,GB
-3579221024,3579221039,FR
-3579221040,3579221071,GB
-3579221072,3579221087,DE
-3579221088,3579221103,GB
-3579221104,3579221119,IT
-3579221120,3579221471,GB
-3579221472,3579221503,ES
-3579221504,3579223071,GB
-3579223072,3579223087,BE
-3579223088,3579223103,FR
-3579223104,3579226143,GB
-3579226144,3579226151,DE
-3579226152,3579226327,GB
-3579226328,3579226351,FR
-3579226352,3579228191,GB
-3579228192,3579228207,IT
-3579228208,3579228223,ES
-3579228224,3579228671,GB
-3579228672,3579228799,US
-3579228800,3579231815,GB
-3579231816,3579231831,FR
-3579231832,3579231919,GB
-3579231920,3579231927,US
-3579231928,3579237183,GB
-3579237184,3579237215,DE
-3579237216,3579237247,NL
-3579237248,3579240143,GB
-3579240144,3579240159,CH
-3579240160,3579241151,GB
-3579241152,3579241215,IE
-3579241216,3579244375,GB
-3579244376,3579244383,CH
-3579244384,3579247199,GB
-3579247200,3579247207,DE
-3579247208,3579247223,GB
-3579247224,3579247231,FR
-3579247232,3579247271,GB
-3579247272,3579247279,US
-3579247280,3579247311,GB
-3579247312,3579247319,FR
-3579247320,3579247391,GB
-3579247392,3579247399,US
-3579247400,3579247407,GB
-3579247408,3579247415,US
-3579247416,3579247535,GB
-3579247536,3579247543,IE
-3579247544,3579247567,GB
-3579247568,3579247575,DE
-3579247576,3579247583,GB
-3579247584,3579247615,US
-3579247616,3579248135,GB
-3579248136,3579248143,DE
-3579248144,3579248639,GB
+3579197440,3579248639,GB
3579248640,3579346943,RU
-3579346944,3579361535,SE
-3579361536,3579361791,NO
-3579361792,3579362047,SE
-3579362048,3579362063,NO
-3579362064,3579362303,SE
-3579362304,3579362559,NO
-3579362560,3579362815,SE
-3579362816,3579363327,NO
-3579363328,3579445247,SE
-3579445248,3579463679,AT
-3579463680,3579463683,US
-3579463684,3579478015,AT
-3579478016,3579480847,FR
-3579480848,3579480855,NL
-3579480856,3579480863,FR
-3579480864,3579480871,NL
-3579480872,3579481095,FR
-3579481096,3579481103,CH
-3579481104,3579481119,FR
-3579481120,3579481127,GB
-3579481128,3579481143,FR
-3579481144,3579481151,CH
-3579481152,3579481159,FR
-3579481160,3579481167,GB
-3579481168,3579481191,FR
-3579481192,3579481199,CH
-3579481200,3579481247,FR
-3579481248,3579481255,GB
-3579481256,3579481263,CH
-3579481264,3579481279,FR
-3579481280,3579481287,GB
-3579481288,3579482623,FR
-3579482624,3579482783,NL
-3579482784,3579482799,FR
-3579482800,3579482927,NL
-3579482928,3579482943,FR
-3579482944,3579482991,NL
-3579482992,3579483151,FR
-3579483152,3579483263,NL
-3579483264,3579483295,FR
-3579483296,3579483311,NL
-3579483312,3579483359,FR
-3579483360,3579483375,NL
-3579483376,3579484751,FR
-3579484752,3579484767,BE
-3579484768,3579485263,FR
-3579485264,3579485279,BE
-3579485280,3579485695,FR
-3579485696,3579485711,GB
-3579485712,3579485714,FR
-3579485715,3579485727,GB
-3579485728,3579485807,FR
-3579485808,3579485823,GB
-3579485824,3579485887,FR
-3579485888,3579485888,GB
-3579485889,3579485903,FR
-3579485904,3579485919,DE
-3579485920,3579485983,FR
-3579485984,3579485999,CH
-3579486000,3579486015,FR
-3579486016,3579486031,GB
-3579486032,3579486047,DE
-3579486048,3579486095,GB
-3579486096,3579486143,FR
-3579486144,3579486175,GB
-3579486176,3579486191,FR
-3579486192,3579486207,GB
-3579486208,3579486271,FR
-3579486272,3579486287,GB
-3579486288,3579486303,FR
-3579486304,3579486319,GB
-3579486320,3579486335,FR
-3579486336,3579486351,GB
-3579486352,3579486367,FR
-3579486368,3579486383,IT
-3579486384,3579486399,DE
-3579486400,3579486415,FR
-3579486416,3579486431,DE
-3579486432,3579486447,GB
-3579486448,3579486735,FR
-3579486736,3579486751,DE
-3579486752,3579486831,FR
-3579486832,3579486847,BE
-3579486848,3579486863,FR
-3579486864,3579486879,GB
-3579486880,3579487007,FR
-3579487008,3579487039,GB
-3579487040,3579487055,DE
-3579487056,3579487103,FR
-3579487104,3579487119,GB
-3579487120,3579487215,FR
-3579487216,3579487231,GB
-3579487232,3579487247,FR
-3579487248,3579487263,GB
-3579487264,3579487471,FR
-3579487472,3579487487,ES
-3579487488,3579487519,FR
-3579487520,3579487531,IT
-3579487532,3579487535,FR
-3579487536,3579487551,GB
-3579487552,3579487567,FR
-3579487568,3579487583,GB
-3579487584,3579487599,FR
-3579487600,3579487615,IT
-3579487616,3579487663,FR
-3579487664,3579487711,DE
-3579487712,3579487727,SE
-3579487728,3579487743,GB
-3579487744,3579487807,FR
-3579487808,3579487823,GB
-3579487824,3579487855,FR
-3579487856,3579487871,GB
-3579487872,3579487887,IE
-3579487888,3579487903,DE
-3579487904,3579487951,FR
-3579487952,3579487967,GB
-3579487968,3579487983,IT
-3579487984,3579487999,GB
-3579488000,3579488047,FR
-3579488048,3579488079,GB
-3579488080,3579490559,FR
-3579490560,3579490655,PT
-3579490656,3579490671,FR
-3579490672,3579490719,PT
-3579490720,3579490735,NL
-3579490736,3579490751,FR
-3579490752,3579490799,PT
-3579490800,3579490831,FR
-3579490832,3579490943,PT
-3579490944,3579490959,FR
-3579490960,3579490975,PT
-3579490976,3579491007,FR
-3579491008,3579491023,PT
-3579491024,3579491231,FR
-3579491232,3579491247,PT
-3579491248,3579491263,NL
-3579491264,3579491471,FR
-3579491472,3579491487,PT
-3579491488,3579497983,FR
-3579497984,3579497991,NL
-3579497992,3579527167,FR
+3579346944,3579445247,SE
+3579445248,3579478015,AT
+3579478016,3579527167,FR
3579527168,3579543551,BA
-3579543552,3579553535,BG
-3579553536,3579553791,A2
-3579553792,3579576319,BG
-3579576320,3579581821,IT
-3579581822,3579581822,EU
-3579581823,3579595967,IT
-3579595968,3579595983,A2
-3579595984,3579596799,IT
-3579596800,3579597055,EU
-3579597056,3579600191,IT
-3579600192,3579600207,US
-3579600208,3579601471,IT
-3579601472,3579601487,US
-3579601488,3579605487,IT
-3579605488,3579605503,DE
-3579605504,3579607551,IT
-3579607552,3579607807,US
-3579607808,3579609087,IT
+3579543552,3579576319,BG
+3579576320,3579609087,IT
3579609088,3579641855,PL
3579641856,3579707391,NL
3579707392,3579723775,ES
@@ -167818,60 +86826,49 @@
3579740160,3579772927,IE
3579772928,3579838463,DE
3579838464,3580100607,ES
-3580100608,3580103167,SE
-3580103168,3580103679,LV
-3580103680,3580104703,SE
-3580104704,3580107775,LV
-3580107776,3580110079,SE
-3580110080,3580110143,LV
-3580110144,3580110495,SE
-3580110496,3580110511,LV
-3580110512,3580110527,SE
-3580110528,3580110543,LV
-3580110544,3580112895,SE
+3580100608,3580103679,SE
+3580103680,3580106751,LV
+3580106752,3580112895,SE
3580112896,3580116991,LV
-3580116992,3580133375,SE
-3580133376,3580133887,LV
-3580133888,3580138495,SE
-3580138496,3580139007,HR
-3580139008,3580150783,SE
+3580116992,3580131327,SE
+3580131328,3580133375,LV
+3580133376,3580135423,SE
+3580135424,3580135531,EE
+3580135532,3580135532,SE
+3580135533,3580135935,EE
+3580135936,3580136447,SE
+3580136448,3580138495,HR
+3580138496,3580150783,SE
3580150784,3580151039,NL
3580151040,3580162047,SE
3580162048,3580164095,EE
3580164096,3580165887,SE
3580165888,3580166143,NL
-3580166144,3580198911,SE
-3580198912,3580199423,LV
-3580199424,3580200959,EE
-3580200960,3580203007,LT
-3580203008,3580203135,HR
-3580203136,3580203519,SE
+3580166144,3580199935,SE
+3580199936,3580200447,EE
+3580200448,3580201983,SE
+3580201984,3580203007,LT
+3580203008,3580203519,SE
3580203520,3580204543,RU
3580204544,3580205055,NL
-3580205056,3580207103,HR
+3580205056,3580206079,SE
+3580206080,3580207103,HR
3580207104,3580208127,LV
3580208128,3580209151,EE
3580209152,3580213247,HR
-3580213248,3580214783,LV
-3580214784,3580215295,HR
+3580213248,3580214271,LV
+3580214272,3580215295,SE
3580215296,3580217343,EE
-3580217344,3580220415,SE
-3580220416,3580221439,LV
-3580221440,3580221951,HR
-3580221952,3580222207,EE
-3580222208,3580222335,SE
-3580222336,3580222719,HR
-3580222720,3580222975,SE
-3580222976,3580223487,HR
+3580217344,3580223487,SE
3580223488,3580231679,DE
-3580231680,3580231935,LT
-3580231936,3580232447,LV
-3580232448,3580233727,LT
-3580233728,3580234751,NO
-3580234752,3580236799,LT
+3580231680,3580232447,SE
+3580232448,3580233215,LT
+3580233216,3580233727,SE
+3580233728,3580235263,LT
+3580235264,3580235775,SE
+3580235776,3580236799,LT
3580236800,3580237567,LV
-3580237568,3580237823,LT
-3580237824,3580239871,LV
+3580237568,3580239871,SE
3580239872,3580241919,EE
3580241920,3580243967,SE
3580243968,3580244991,EE
@@ -167880,62 +86877,38 @@
3580248064,3580254207,EE
3580254208,3580255231,LV
3580255232,3580258303,DE
-3580258304,3580258559,LV
-3580258560,3580260351,DE
-3580260352,3580265727,AT
-3580265728,3580268543,EE
+3580258304,3580258815,SE
+3580258816,3580260351,DE
+3580260352,3580265471,AT
+3580265472,3580266495,SE
+3580266496,3580268543,EE
3580268544,3580272639,LV
3580272640,3580276735,SE
3580276736,3580280831,NL
3580280832,3580329983,RU
-3580329984,3580338175,SE
-3580338176,3580339711,HR
+3580329984,3580338175,NL
+3580338176,3580338687,SE
+3580338688,3580339199,HR
+3580339200,3580339711,SE
3580339712,3580340223,EE
3580340224,3580344319,LT
-3580344320,3580345343,SE
-3580345344,3580345855,EE
-3580345856,3580354559,SE
+3580344320,3580354559,SE
3580354560,3580362751,LT
-3580362752,3580473375,GB
-3580473376,3580473391,IE
-3580473392,3580473503,GB
-3580473504,3580473511,IE
-3580473512,3580473519,GB
-3580473520,3580473527,IE
-3580473528,3580473695,GB
-3580473696,3580473727,IE
-3580473728,3580473759,GB
-3580473760,3580473887,IE
-3580473888,3580473951,GB
-3580473952,3580473959,IE
-3580473960,3580473967,GB
-3580473968,3580473983,IE
-3580473984,3580473999,GB
-3580474000,3580474007,IE
-3580474008,3580474095,GB
-3580474096,3580474111,IE
-3580474112,3580474495,GB
-3580474496,3580474559,IE
-3580474560,3580475055,GB
-3580475056,3580475063,IE
-3580475064,3580475123,GB
-3580475124,3580475127,IE
-3580475128,3580475343,GB
-3580475344,3580475351,IE
-3580475352,3580624895,GB
+3580362752,3580473871,GB
+3580473872,3580473887,IE
+3580473888,3580624895,GB
3580624896,3580626943,RU
3580626944,3580628991,PL
3580628992,3580631039,RU
-3580631040,3580632831,NL
-3580632832,3580633087,GB
+3580631040,3580633087,NL
3580633088,3580635135,RU
3580635136,3580637183,UA
-3580637184,3580639231,KZ
3580639232,3580641279,PL
3580641280,3580643327,FR
3580643328,3580645375,UA
3580645376,3580647423,PL
-3580647424,3580649471,DE
+3580647424,3580647935,GB
+3580647936,3580649471,DE
3580649472,3580651519,SE
3580651520,3580653567,NL
3580653568,3580655615,PL
@@ -167967,53 +86940,22 @@
3580821504,3580837887,FR
3580837888,3580887039,UA
3580887040,3581149183,SE
-3581149184,3581150367,EU
-3581150368,3581150463,IE
-3581150464,3581150591,EU
-3581150592,3581150719,NL
-3581150720,3581150783,SE
-3581150784,3581150975,EU
-3581150976,3581151039,SE
-3581151040,3581151231,EU
-3581151232,3581151295,SE
-3581151296,3581154047,EU
-3581154048,3581154303,NL
-3581154304,3581157119,EU
-3581157120,3581158655,AT
-3581158656,3581159167,EU
-3581159168,3581159295,AT
-3581159296,3581159423,EU
+3581157376,3581158399,AT
3581159424,3581161471,IE
-3581161472,3581173759,EU
-3581173760,3581196799,NL
-3581196800,3581197311,EU
-3581197312,3581197567,IE
-3581197568,3581197823,EU
-3581197824,3581198335,GB
-3581198336,3581200127,NL
-3581200128,3581203967,EU
-3581203968,3581214719,SE
+3581173760,3581196287,NL
+3581198336,3581199359,NL
+3581204480,3581214719,SE
3581214720,3581231103,NL
-3581231104,3581239295,EU
3581239296,3581241343,NL
-3581241344,3581242623,EU
3581242624,3581245439,FR
-3581245440,3581255679,EU
-3581255680,3581259263,FR
-3581259264,3581261311,EU
-3581261312,3581261439,FR
-3581261440,3581279103,EU
-3581279104,3581279199,NL
-3581279200,3581280255,EU
+3581255680,3581258751,FR
3581280256,3581411327,BE
3581411328,3581673471,GB
3581673472,3581935615,NL
3581935616,3581943807,RU
3581943808,3581951999,FR
3581952000,3581960191,TR
-3581960192,3581966849,DE
-3581966850,3581966850,EU
-3581966851,3581976575,DE
+3581960192,3581976575,DE
3581976576,3581984767,NO
3581984768,3581992959,RU
3581992960,3582001151,GB
@@ -168026,37 +86968,19 @@
3582050304,3582058495,NL
3582058496,3582066687,AT
3582066688,3582074879,UA
-3582074880,3582074967,GB
-3582074968,3582074975,DE
-3582074976,3582075391,GB
-3582075392,3582075535,DE
-3582075536,3582076079,GB
-3582076080,3582076095,AE
-3582076096,3582076863,GB
-3582076864,3582076895,DE
-3582076896,3582076927,GB
-3582076928,3582077111,ES
-3582077112,3582077439,GB
-3582077440,3582077791,DE
-3582077792,3582078090,GB
+3582074880,3582077439,GB
+3582077440,3582077471,DE
+3582077472,3582078090,GB
3582078091,3582078091,CH
-3582078092,3582078631,GB
-3582078632,3582078639,DE
-3582078640,3582081055,GB
-3582081056,3582081087,ES
-3582081088,3582081535,GB
-3582081536,3582081791,DE
-3582081792,3582083071,GB
+3582078092,3582083071,GB
3582083072,3582091263,BG
3582091264,3582099455,QA
3582099456,3582107647,GB
3582107648,3582115839,NL
-3582115840,3582116095,SE
-3582116096,3582116351,EE
-3582116352,3582116863,NO
+3582115840,3582116863,SE
3582116864,3582117887,EE
3582117888,3582120447,LT
-3582120448,3582120959,NO
+3582120448,3582120959,SE
3582120960,3582121983,EE
3582121984,3582124031,LT
3582124032,3582132223,FI
@@ -168068,17 +86992,7 @@
3582173184,3582181375,GB
3582181376,3582190927,DE
3582190928,3582190931,FR
-3582190932,3582190943,DE
-3582190944,3582190951,PL
-3582190952,3582192127,DE
-3582192128,3582192143,NL
-3582192144,3582193151,DE
-3582193152,3582193407,EU
-3582193408,3582194775,DE
-3582194776,3582194783,CY
-3582194784,3582197127,DE
-3582197128,3582197135,BZ
-3582197136,3582197759,DE
+3582190932,3582197759,DE
3582197760,3582205951,DK
3582205952,3582214143,AE
3582214144,3582222335,RU
@@ -168086,117 +87000,28 @@
3582224376,3582224379,FI
3582224380,3582225719,SE
3582225720,3582225727,FI
-3582225728,3582226031,SE
-3582226032,3582226047,NO
-3582226048,3582227199,SE
-3582227200,3582227231,NO
-3582227232,3582227391,SE
+3582225728,3582227391,SE
3582227392,3582227455,FI
3582227456,3582230527,SE
3582230528,3582238719,BE
3582238720,3582251319,NL
3582251320,3582251327,FI
3582251328,3582255103,NL
-3582255104,3582263039,KW
-3582263040,3582263295,A2
+3582255104,3582263295,KW
3582263296,3582271487,ME
3582271488,3582279679,NL
3582279680,3582287871,GB
3582287872,3582296063,DE
3582296064,3582304255,GB
3582304256,3582312447,UA
-3582312448,3582313249,JE
-3582313250,3582313250,GB
-3582313251,3582313256,JE
-3582313257,3582313260,GB
-3582313261,3582313271,JE
-3582313272,3582313342,GB
-3582313343,3582313343,JE
-3582313344,3582313470,GB
-3582313471,3582313471,JE
-3582313472,3582313559,GB
-3582313560,3582313567,JE
-3582313568,3582313599,GB
-3582313600,3582313695,JE
-3582313696,3582313726,GB
-3582313727,3582313727,JE
-3582313728,3582313743,GB
-3582313744,3582313759,JE
-3582313760,3582313775,GB
-3582313776,3582313791,JE
-3582313792,3582313799,GB
-3582313800,3582313807,JE
-3582313808,3582313871,GB
-3582313872,3582313967,JE
-3582313968,3582313982,GB
-3582313983,3582313991,JE
-3582313992,3582314007,GB
-3582314008,3582314015,JE
-3582314016,3582314079,GB
-3582314080,3582314095,JE
-3582314096,3582314119,GB
-3582314120,3582314127,JE
-3582314128,3582314167,GB
-3582314168,3582314175,JE
-3582314176,3582314187,GB
-3582314188,3582314195,JE
-3582314196,3582314199,GB
-3582314200,3582314207,JE
-3582314208,3582314235,GB
-3582314236,3582314239,JE
-3582314240,3582314263,GB
-3582314264,3582314271,JE
-3582314272,3582314303,GB
-3582314304,3582314311,JE
-3582314312,3582314343,GB
-3582314344,3582314383,JE
-3582314384,3582314399,GB
-3582314400,3582314415,JE
-3582314416,3582314443,GB
-3582314444,3582314447,JE
-3582314448,3582314451,GB
-3582314452,3582314455,JE
-3582314456,3582314491,GB
-3582314492,3582315519,JE
-3582315520,3582315775,GB
-3582315776,3582316543,JE
-3582316544,3582316863,GB
-3582316864,3582316871,JE
-3582316872,3582317055,GB
-3582317056,3582317311,JE
-3582317312,3582317479,GB
-3582317480,3582317487,JE
-3582317488,3582317567,GB
-3582317568,3582318079,JE
-3582318080,3582318399,GB
-3582318400,3582318407,JE
-3582318408,3582318511,GB
-3582318512,3582318519,JE
-3582318520,3582318591,GB
-3582318592,3582318847,JE
-3582318848,3582318935,GB
-3582318936,3582318943,JE
-3582318944,3582318999,GB
-3582319000,3582319007,JE
-3582319008,3582319103,GB
-3582319104,3582319487,JE
-3582319488,3582319870,GB
-3582319871,3582319871,JE
-3582319872,3582319879,GB
-3582319880,3582319887,JE
-3582319888,3582319895,GB
-3582319896,3582319903,JE
-3582319904,3582319927,GB
-3582319928,3582319935,JE
-3582319936,3582320207,GB
-3582320208,3582320367,JE
-3582320368,3582320375,GB
-3582320376,3582320639,JE
+3582312448,3582313855,JE
+3582313856,3582313871,GB
+3582313872,3582320639,JE
3582320640,3582328831,CH
3582328832,3582337023,HU
-3582337024,3582341119,ES
-3582341120,3582343167,PT
-3582343168,3582345215,ES
+3582337024,3582343167,ES
+3582343168,3582343423,PT
+3582343424,3582345215,ES
3582345216,3582353407,IT
3582353408,3582361599,SE
3582361600,3582377983,PL
@@ -168208,210 +87033,20 @@
3582435328,3582443519,MK
3582443520,3582451711,DE
3582451712,3582459903,LU
-3582459904,3582462143,NL
-3582462144,3582462207,DE
-3582462208,3582467135,NL
-3582467136,3582467199,DE
-3582467200,3582468095,NL
+3582459904,3582468095,NL
3582468096,3582476287,SE
3582476288,3582484479,DE
3582484480,3582492671,CI
3582492672,3582509055,IT
3582509056,3582517247,SA
3582517248,3582525439,PL
-3582525440,3582525695,IM
-3582525696,3582525743,GB
-3582525744,3582525747,IM
-3582525748,3582525879,GB
-3582525880,3582525895,IM
-3582525896,3582526059,GB
-3582526060,3582526063,IM
-3582526064,3582526135,GB
-3582526136,3582526143,IM
-3582526144,3582526151,GB
-3582526152,3582526159,IM
-3582526160,3582526207,GB
-3582526208,3582527743,IM
-3582527744,3582529023,GB
-3582529024,3582530303,IM
-3582530304,3582530399,GB
-3582530400,3582530815,IM
-3582530816,3582530951,GB
-3582530952,3582530959,IM
-3582530960,3582530979,GB
-3582530980,3582530983,IM
-3582530984,3582530991,GB
-3582530992,3582530999,IM
-3582531000,3582531031,GB
-3582531032,3582531039,IM
-3582531040,3582531135,GB
-3582531136,3582531631,IM
-3582531632,3582531651,GB
-3582531652,3582531663,IM
-3582531664,3582531671,GB
-3582531672,3582531695,IM
-3582531696,3582531767,GB
-3582531768,3582531775,IM
-3582531776,3582531783,GB
-3582531784,3582531791,IM
-3582531792,3582531799,GB
-3582531800,3582531807,IM
-3582531808,3582531823,GB
-3582531824,3582532607,IM
-3582532608,3582532927,GB
-3582532928,3582532983,IM
-3582532984,3582532991,GB
-3582532992,3582533119,IM
-3582533120,3582533631,GB
-3582533632,3582534143,BG
-3582534144,3582534399,RO
-3582534400,3582538183,BG
-3582538184,3582538191,GB
-3582538192,3582541311,BG
-3582541312,3582541567,RO
-3582541568,3582541823,BG
+3582525440,3582533631,IM
+3582533632,3582541823,BG
3582541824,3582550015,US
3582550016,3582558207,RS
-3582558208,3582558487,MC
-3582558488,3582558571,EU
-3582558572,3582558751,MC
-3582558752,3582558783,EU
-3582558784,3582558815,MC
-3582558816,3582558847,EU
-3582558848,3582559283,MC
-3582559284,3582559288,EU
-3582559289,3582559294,MC
-3582559295,3582559295,EU
-3582559296,3582559487,MC
-3582559488,3582559647,EU
-3582559648,3582560255,MC
-3582560256,3582560511,GN
-3582560512,3582560527,MC
-3582560528,3582561039,EU
-3582561040,3582561055,MC
-3582561056,3582561057,EU
-3582561058,3582561071,MC
-3582561072,3582566431,EU
-3582566432,3582566479,BE
-3582566480,3582566527,EU
-3582566528,3582566591,BE
-3582566592,3582566735,EU
-3582566736,3582566743,BE
-3582566744,3582566751,EU
-3582566752,3582566767,BE
-3582566768,3582566783,EU
-3582566784,3582566847,BE
-3582566848,3582566911,EU
-3582566912,3582567019,BE
-3582567020,3582567023,EU
-3582567024,3582567039,BE
-3582567040,3582567135,EU
-3582567136,3582567151,BE
-3582567152,3582567231,EU
-3582567232,3582567295,BE
-3582567296,3582567391,EU
-3582567392,3582567399,BE
-3582567400,3582567423,EU
-3582567424,3582567807,US
-3582567808,3582567903,EU
-3582567904,3582567935,US
-3582567936,3582568215,EU
-3582568216,3582568223,SE
-3582568224,3582568247,EU
-3582568248,3582568263,SE
-3582568264,3582568335,EU
-3582568336,3582568339,SE
-3582568340,3582568439,EU
-3582568440,3582568447,SE
-3582568448,3582568703,US
-3582568704,3582568831,EU
-3582568832,3582568959,US
-3582568960,3582568975,HU
-3582568976,3582568991,EU
-3582568992,3582569023,CZ
-3582569024,3582569031,EU
-3582569032,3582569035,AT
-3582569036,3582569039,DE
-3582569040,3582569043,AT
-3582569044,3582569079,EU
-3582569080,3582569087,HU
-3582569088,3582569095,EU
-3582569096,3582569103,HU
-3582569104,3582569207,EU
-3582569208,3582569215,AT
-3582569216,3582569279,EU
-3582569280,3582569295,AT
-3582569296,3582569471,EU
-3582569472,3582569535,FR
-3582569536,3582569983,EU
-3582569984,3582570239,FR
-3582570240,3582570399,GB
-3582570400,3582570487,FR
-3582570488,3582570751,EU
-3582570752,3582571263,FR
-3582571264,3582571303,EU
-3582571304,3582571307,CH
-3582571308,3582571375,EU
-3582571376,3582571391,FR
-3582571392,3582571407,EU
-3582571408,3582571423,FR
-3582571424,3582571455,EU
-3582571456,3582571487,FR
-3582571488,3582571647,EU
-3582571648,3582571687,IE
-3582571688,3582571695,EU
-3582571696,3582571703,IE
-3582571704,3582571707,EU
-3582571708,3582571719,IE
-3582571720,3582571751,EU
-3582571752,3582571839,IE
-3582571840,3582571999,EU
-3582572000,3582572015,IE
-3582572016,3582572415,EU
+3582558208,3582570911,MC
+3582570912,3582570943,FR
3582572416,3582572423,CH
-3582572424,3582572447,EU
-3582572448,3582572451,CH
-3582572452,3582572455,EU
-3582572456,3582572459,CH
-3582572460,3582572479,EU
-3582572480,3582572543,CH
-3582572544,3582572559,EU
-3582572560,3582572567,DE
-3582572568,3582572799,EU
-3582572800,3582572863,DE
-3582572864,3582572943,EU
-3582572944,3582572951,DE
-3582572952,3582572975,EU
-3582572976,3582572983,DE
-3582572984,3582573023,EU
-3582573024,3582573055,DE
-3582573056,3582573087,EU
-3582573088,3582573095,DE
-3582573096,3582573103,EU
-3582573104,3582573111,DE
-3582573112,3582573127,EU
-3582573128,3582573135,DE
-3582573136,3582573407,EU
-3582573408,3582573423,DE
-3582573424,3582573431,EU
-3582573432,3582573439,DE
-3582573440,3582573511,EU
-3582573512,3582573519,DE
-3582573520,3582573551,EU
-3582573552,3582573567,DE
-3582573568,3582573599,EU
-3582573600,3582573615,CH
-3582573616,3582573823,EU
-3582573824,3582573887,CH
-3582573888,3582573895,EU
-3582573896,3582573903,CH
-3582573904,3582573919,EU
-3582573920,3582573951,CH
-3582573952,3582574431,EU
-3582574432,3582574435,CH
-3582574436,3582574455,EU
-3582574456,3582574463,CH
-3582574464,3582574591,EU
3582574592,3582582783,DE
3582582784,3582590975,RU
3582590976,3582599167,FR
@@ -168419,17 +87054,11 @@
3582607360,3582615551,RU
3582615552,3582623743,GB
3582623744,3582631935,FI
-3582631936,3582635007,NO
-3582635008,3582635263,SE
-3582635264,3582640127,NO
+3582631936,3582640127,NO
3582640128,3582648319,RU
3582648320,3582656511,PT
-3582656512,3582664047,ES
-3582664048,3582664055,FR
-3582664056,3582664703,ES
-3582664704,3582668095,JO
-3582668096,3582668223,US
-3582668224,3582672895,JO
+3582656512,3582664703,ES
+3582664704,3582672895,JO
3582672896,3582681087,DE
3582681088,3582689279,FR
3582689280,3582697471,DE
@@ -168443,16 +87072,12 @@
3582746624,3582754815,RU
3582754816,3582763007,GR
3582763008,3582771199,FI
-3582771200,3582772479,CY
-3582772480,3582772735,GB
-3582772736,3582779391,CY
+3582771200,3582779391,CY
3582779392,3582787583,RU
3582787584,3582795775,PT
3582795776,3582803967,ES
3582803968,3582812159,SE
-3582812160,3582814319,FI
-3582814320,3582814327,US
-3582814328,3582820351,FI
+3582812160,3582820351,FI
3582820352,3582828543,RU
3582828544,3582836735,KZ
3582836736,3582853119,RU
@@ -168477,12 +87102,10 @@
3582992384,3583000575,ES
3583000576,3583008767,IT
3583008768,3583016959,TR
-3583016960,3583019367,CH
-3583019368,3583019375,DE
-3583019376,3583025151,CH
-3583025152,3583031807,A2
+3583016960,3583025151,CH
+3583025152,3583031807,IT
3583031808,3583032063,GR
-3583032064,3583033343,A2
+3583032064,3583033343,IT
3583033344,3583041535,FR
3583041536,3583049727,NL
3583049728,3583066111,RU
@@ -168496,19 +87119,13 @@
3583123456,3583131647,PL
3583131648,3583139839,SE
3583139840,3583148031,DE
-3583148032,3583157247,GB
-3583157248,3583157471,IE
-3583157472,3583157487,GB
-3583157488,3583157759,IE
-3583157760,3583158783,GB
-3583158784,3583159039,DE
-3583159040,3583160319,GB
+3583148032,3583157503,GB
+3583157504,3583157759,IE
+3583157760,3583160319,GB
3583160320,3583161343,DE
-3583161344,3583162367,GB
-3583162368,3583162623,DE
-3583162624,3583163391,GB
-3583163392,3583163903,IE
-3583163904,3583164415,GB
+3583161344,3583162623,GB
+3583162624,3583162879,ZA
+3583162880,3583164415,GB
3583164416,3583172607,PT
3583172608,3583188991,DE
3583188992,3583197183,RU
@@ -168521,9 +87138,7 @@
3583246336,3583254527,RU
3583254528,3583262719,GB
3583262720,3583270911,TR
-3583270912,3583283743,DE
-3583283744,3583283747,A2
-3583283748,3583287295,DE
+3583270912,3583287295,DE
3583287296,3583295487,RU
3583295488,3583303679,ES
3583303680,3583311871,NL
@@ -168533,16 +87148,7 @@
3583336448,3583337727,ME
3583337728,3583337983,AL
3583337984,3583344639,ME
-3583344640,3583345663,BG
-3583345664,3583346175,MK
-3583346176,3583346687,BG
-3583346688,3583346943,MK
-3583346944,3583348735,BG
-3583348736,3583348991,MK
-3583348992,3583350271,BG
-3583350272,3583351039,MK
-3583351040,3583352319,BG
-3583352320,3583352831,MK
+3583344640,3583352831,BG
3583352832,3583361023,CY
3583361024,3583369215,IT
3583369216,3583377407,ES
@@ -168569,11 +87175,7 @@
3583533056,3583541247,DE
3583541248,3583549439,RU
3583549440,3583557631,NL
-3583557632,3583558239,IT
-3583558240,3583558335,SM
-3583558336,3583561471,IT
-3583561472,3583561503,SM
-3583561504,3583565823,IT
+3583557632,3583565823,IT
3583565824,3583574015,GB
3583574016,3583582207,NO
3583582208,3583590399,AT
@@ -168587,271 +87189,33 @@
3583680512,3583688703,RU
3583688704,3583696895,UA
3583696896,3583705087,NL
-3583705088,3583705255,UA
-3583705256,3583705263,NA
-3583705264,3583705303,UA
-3583705304,3583705319,NA
-3583705320,3583705471,UA
-3583705472,3583705487,NA
-3583705488,3583705495,UA
-3583705496,3583705503,NA
-3583705504,3583705603,UA
-3583705604,3583705607,NA
-3583705608,3583705647,UA
-3583705648,3583705663,NA
-3583705664,3583705727,UA
-3583705728,3583705855,TH
-3583705856,3583705859,UA
-3583705860,3583705863,NA
-3583705864,3583706023,UA
-3583706024,3583706031,NA
-3583706032,3583706055,UA
-3583706056,3583706063,RU
-3583706064,3583706103,UA
-3583706104,3583706107,NA
-3583706108,3583706191,UA
-3583706192,3583706199,NA
-3583706200,3583706295,UA
-3583706296,3583706319,NA
-3583706320,3583706463,UA
-3583706464,3583706471,NA
-3583706472,3583706495,UA
-3583706496,3583706511,NA
-3583706512,3583706519,UA
-3583706520,3583706527,NA
-3583706528,3583706575,UA
-3583706576,3583706583,NA
-3583706584,3583706591,UA
-3583706592,3583706607,NA
-3583706608,3583706615,UA
-3583706616,3583706623,NA
-3583706624,3583706695,UA
-3583706696,3583706711,NA
-3583706712,3583706743,UA
-3583706744,3583706767,NA
-3583706768,3583706775,UA
-3583706776,3583706791,NA
-3583706792,3583706863,UA
-3583706864,3583706879,NA
-3583706880,3583706883,UA
-3583706884,3583706887,NA
-3583706888,3583706903,UA
-3583706904,3583706911,NA
-3583706912,3583706927,UA
-3583706928,3583706943,NA
-3583706944,3583706959,UA
-3583706960,3583706967,NA
-3583706968,3583706991,UA
-3583706992,3583706999,NA
-3583707000,3583707015,UA
-3583707016,3583707023,NA
-3583707024,3583707031,UA
-3583707032,3583707039,NA
-3583707040,3583707071,UA
-3583707072,3583707111,NA
-3583707112,3583707127,UA
-3583707128,3583707135,NA
-3583707136,3583707215,UA
-3583707216,3583707223,NA
-3583707224,3583707519,UA
-3583707520,3583707535,NA
-3583707536,3583707751,UA
-3583707752,3583707759,NA
-3583707760,3583707807,UA
-3583707808,3583707815,NA
-3583707816,3583707839,UA
-3583707840,3583707855,NA
-3583707856,3583708031,UA
-3583708032,3583708032,NA
-3583708033,3583708040,UA
-3583708041,3583708095,NA
-3583708096,3583708167,UA
-3583708168,3583708175,NA
-3583708176,3583708231,UA
-3583708232,3583708239,NA
-3583708240,3583708423,UA
-3583708424,3583708431,NA
-3583708432,3583708479,UA
-3583708480,3583708543,NA
-3583708544,3583708607,UA
-3583708608,3583708623,NA
-3583708624,3583709447,UA
-3583709448,3583709455,NA
-3583709456,3583709503,UA
-3583709504,3583709511,RU
-3583709512,3583709607,UA
-3583709608,3583709615,RU
-3583709616,3583709699,UA
-3583709700,3583709703,NA
-3583709704,3583709847,UA
-3583709848,3583709855,NA
-3583709856,3583709863,UA
-3583709864,3583709871,RU
-3583709872,3583709887,UA
-3583709888,3583709911,NA
-3583709912,3583709927,UA
-3583709928,3583709943,NA
-3583709944,3583710055,UA
-3583710056,3583710072,NA
-3583710073,3583710079,UA
-3583710080,3583710087,NA
-3583710088,3583710103,UA
-3583710104,3583710111,NA
-3583710112,3583710119,UA
-3583710120,3583710135,NA
-3583710136,3583710211,UA
-3583710212,3583710215,NA
-3583710216,3583710319,UA
-3583710320,3583710327,NA
-3583710328,3583710367,UA
-3583710368,3583710375,AQ
-3583710376,3583710383,NA
-3583710384,3583710407,UA
-3583710408,3583710415,NA
-3583710416,3583710455,UA
-3583710456,3583710459,NA
-3583710460,3583710631,UA
-3583710632,3583710639,NA
-3583710640,3583710703,UA
-3583710704,3583710711,NA
-3583710712,3583710743,UA
-3583710744,3583710751,BE
-3583710752,3583710887,UA
-3583710888,3583710895,NA
-3583710896,3583711247,UA
-3583711248,3583711255,NA
-3583711256,3583711327,UA
-3583711328,3583711335,NA
-3583711336,3583711359,UA
-3583711360,3583711367,NA
-3583711368,3583711375,UA
-3583711376,3583711383,NA
-3583711384,3583711711,UA
-3583711712,3583711719,NA
-3583711720,3583711783,UA
-3583711784,3583711799,NA
-3583711800,3583711815,UA
-3583711816,3583711823,NA
-3583711824,3583712015,UA
-3583712016,3583712023,NA
-3583712024,3583712119,UA
-3583712120,3583712127,NA
-3583712128,3583712159,UA
-3583712160,3583712191,NA
-3583712192,3583712455,UA
-3583712456,3583712463,NA
-3583712464,3583712471,UA
-3583712472,3583712479,NA
-3583712480,3583712527,UA
-3583712528,3583712535,IN
-3583712536,3583712607,UA
-3583712608,3583712615,HU
-3583712616,3583713007,UA
-3583713008,3583713015,RU
-3583713016,3583713279,UA
+3583705088,3583713279,UA
3583713280,3583721471,CZ
3583721472,3583729663,DE
3583729664,3583737855,TR
-3583737856,3583740671,EU
-3583740672,3583741183,GB
-3583741184,3583741439,EU
-3583741440,3583741695,GB
-3583741696,3583741951,NL
-3583741952,3583742719,EU
-3583742720,3583743487,DE
-3583743488,3583743503,FR
-3583743504,3583743519,EU
-3583743520,3583743551,FR
-3583743552,3583743615,EU
-3583743616,3583743743,GB
-3583743744,3583743775,EU
-3583743776,3583743807,NL
-3583743808,3583743975,EU
-3583743976,3583743983,IE
-3583743984,3583744063,EU
-3583744064,3583744067,FR
-3583744068,3583744071,GB
-3583744072,3583744095,EU
-3583744096,3583744099,DE
-3583744100,3583744103,FR
-3583744104,3583744111,GB
-3583744112,3583744127,EU
-3583744128,3583744255,PL
-3583744256,3583744287,EU
-3583744288,3583744303,GB
-3583744304,3583744319,EU
+3583742976,3583743487,PL
+3583743488,3583743743,GB
+3583743744,3583743999,IE
3583744320,3583744447,GB
-3583744448,3583744463,EU
-3583744464,3583744467,FR
-3583744468,3583744471,EU
-3583744472,3583744479,FR
-3583744480,3583744487,GB
-3583744488,3583744511,EU
3583744512,3583744767,GB
-3583744768,3583744831,DE
-3583744832,3583744911,EU
-3583744912,3583744927,GB
-3583744928,3583744959,DE
3583744960,3583744991,GB
-3583744992,3583744999,EU
-3583745000,3583745003,NL
-3583745004,3583745055,EU
-3583745056,3583745087,CA
-3583745088,3583745183,EU
-3583745184,3583745279,SE
3583745280,3583745535,GB
-3583745536,3583745663,SE
-3583745664,3583745719,EU
-3583745720,3583745723,FR
-3583745724,3583745799,EU
-3583745800,3583745807,NL
-3583745808,3583745823,GB
-3583745824,3583745855,EU
-3583745856,3583745919,SE
-3583745920,3583745951,GB
-3583745952,3583745983,EU
-3583745984,3583746047,CH
3583746048,3583754239,PL
3583754240,3583762431,RU
3583762432,3583770623,CZ
-3583770624,3583772351,NL
-3583772352,3583772367,IT
-3583772368,3583778815,NL
+3583770624,3583778815,NL
3583778816,3583787007,IT
3583787008,3583795199,UA
3583795200,3583803391,PL
-3583803392,3583806719,RU
-3583806720,3583806975,BY
-3583806976,3583811583,RU
-3583811584,3583811839,GB
-3583811840,3583819775,DE
+3583803392,3583811583,RU
+3583811584,3583819775,DE
3583819776,3583827967,RU
3583827968,3583836159,CH
3583836160,3583844351,DE
3583844352,3583852543,KZ
-3583852544,3583853055,SG
-3583853056,3583854591,FI
-3583854592,3583854871,GB
-3583854872,3583854879,FI
-3583854880,3583854927,GB
-3583854928,3583854943,FI
-3583854944,3583855103,GB
-3583855104,3583855167,US
-3583855168,3583855175,FI
-3583855176,3583855183,US
-3583855184,3583855191,FI
-3583855192,3583855199,US
-3583855200,3583855207,FI
-3583855208,3583855247,US
-3583855248,3583855311,FI
-3583855312,3583855327,US
-3583855328,3583856383,FI
-3583856384,3583856510,SG
-3583856511,3583856511,FI
-3583856512,3583856590,SG
-3583856591,3583856615,FI
-3583856616,3583856639,SG
-3583856640,3583860735,FI
+3583852544,3583854783,FI
+3583854784,3583854847,GB
+3583854848,3583860735,FI
3583860736,3583868927,HU
3583868928,3583877119,AT
3583877120,3583885311,RO
@@ -168874,44 +87238,18 @@
3584024576,3584032767,UA
3584032768,3584040959,DE
3584040960,3584049151,CH
-3584049152,3584055911,DE
-3584055912,3584055919,TR
-3584055920,3584057343,DE
+3584049152,3584057343,DE
3584057344,3584065535,GB
3584065536,3584073727,UA
3584073728,3584081919,SK
-3584081920,3584081951,AT
-3584081952,3584081959,NL
-3584081960,3584082143,AT
-3584082144,3584082175,NL
-3584082176,3584082279,AT
-3584082280,3584082287,NL
-3584082288,3584082943,AT
-3584082944,3584089087,NL
-3584089088,3584089855,AT
-3584089856,3584089871,NL
-3584089872,3584089903,AT
-3584089904,3584089919,NL
-3584089920,3584090111,AT
-3584090112,3584090623,NO
-3584090624,3584090879,NL
-3584090880,3584091135,NO
-3584091136,3584091391,NL
-3584091392,3584093783,NO
-3584093784,3584093791,NL
-3584093792,3584094893,NO
-3584094894,3584094895,NL
-3584094896,3584095807,NO
-3584095808,3584095855,NL
-3584095856,3584095935,NO
-3584095936,3584095999,NL
-3584096000,3584096255,NO
+3584081920,3584082007,NL
+3584082008,3584082015,AT
+3584082016,3584090111,NL
+3584090112,3584096255,NO
3584096256,3584098303,NL
3584098304,3584106495,SI
3584106496,3584114687,FI
-3584114688,3584120063,GB
-3584120064,3584120319,EU
-3584120320,3584122879,GB
+3584114688,3584122879,GB
3584122880,3584131071,PL
3584131072,3584139263,TR
3584139264,3584147455,NO
@@ -168926,84 +87264,43 @@
3584212992,3584221183,ES
3584221184,3584229375,NO
3584229376,3584245759,HU
-3584245760,3584245802,NL
-3584245803,3584245803,NL
-3584245804,3584246065,NL
-3584246066,3584246066,NL
-3584246067,3584247651,NL
-3584247652,3584247652,NL
-3584247653,3584247956,NL
-3584247957,3584247957,NL
-3584247958,3584253951,NL
-3584253952,3584260135,AL
-3584260136,3584260139,RS
-3584260140,3584260151,AL
-3584260152,3584260155,RS
-3584260156,3584260231,AL
-3584260232,3584260239,RS
-3584260240,3584260247,AL
-3584260248,3584260255,RS
-3584260256,3584260351,AL
-3584260352,3584260607,RS
-3584260608,3584260863,ME
-3584260864,3584260991,RS
-3584260992,3584261119,AL
-3584261120,3584261375,ME
-3584261376,3584262143,AL
+3584245760,3584253951,NL
+3584253952,3584254975,ME
+3584254976,3584255743,AL
+3584255744,3584255999,ME
+3584256000,3584260095,AL
+3584260096,3584262143,ME
3584262144,3584270335,SE
3584270336,3584278527,FR
3584278528,3584286719,GB
-3584286720,3584295759,AT
-3584295760,3584295767,PT
-3584295768,3584295807,AT
-3584295808,3584295815,PT
-3584295816,3584303103,AT
+3584286720,3584303103,AT
3584303104,3584311295,ES
3584311296,3584319487,DE
3584319488,3584327679,LT
-3584327680,3584332519,DE
-3584332520,3584332527,NL
-3584332528,3584335871,DE
+3584327680,3584335871,DE
3584335872,3584344063,ES
3584344064,3584352255,SE
3584352256,3584360447,RO
3584360448,3584368639,GB
3584368640,3584376831,SA
-3584376832,3584379135,DE
-3584379136,3584379391,IT
-3584379392,3584393215,DE
+3584376832,3584393215,DE
3584393216,3584401407,GB
3584401408,3584409599,MT
-3584409600,3584413439,RU
-3584413440,3584413695,DE
-3584413696,3584414207,GB
-3584414208,3584414719,RU
-3584414720,3584414975,DE
-3584414976,3584416255,RU
-3584416256,3584416767,GB
-3584416768,3584417791,RU
+3584409600,3584417791,RU
3584417792,3584434175,GB
3584434176,3584442367,LU
3584442368,3584450559,GB
-3584450560,3584458751,EU
3584458752,3584466943,SA
3584466944,3584475135,NO
3584475136,3584483327,FR
3584483328,3584491519,DE
3584491520,3584499711,BG
3584499712,3584507903,RU
-3584507904,3584508927,GB
-3584508928,3584508943,CY
-3584508944,3584508951,KY
-3584508952,3584509231,GB
+3584507904,3584509231,GB
3584509232,3584509239,AW
-3584509240,3584510999,GB
-3584511000,3584511007,KY
-3584511008,3584511023,GB
-3584511024,3584511039,KY
-3584511040,3584511807,GB
-3584511808,3584511871,MT
-3584511872,3584516095,GB
+3584509240,3584509695,GB
+3584509696,3584509951,JE
+3584509952,3584516095,GB
3584516096,3584524287,NO
3584524288,3584532479,IS
3584532480,3584540671,DE
@@ -169015,29 +87312,13 @@
3584589824,3584598015,RU
3584598016,3584606207,CZ
3584606208,3584614399,DE
-3584614400,3584614495,GB
-3584614496,3584614527,IE
-3584614528,3584614591,GB
-3584614592,3584614615,IE
-3584614616,3584614655,GB
-3584614656,3584614751,IE
-3584614752,3584614759,GB
-3584614760,3584614763,IE
-3584614764,3584614767,GB
-3584614768,3584615167,IE
-3584615168,3584615327,GB
-3584615328,3584622335,IE
-3584622336,3584622591,GB
+3584614400,3584622591,IE
3584622592,3584630783,FI
-3584630784,3584635799,BG
-3584635800,3584635800,BG
-3584635801,3584638975,BG
+3584630784,3584638975,BG
3584638976,3584647167,UA
3584647168,3584648191,LU
3584648192,3584648447,IT
-3584648448,3584649983,LU
-3584649984,3584650239,EU
-3584650240,3584655359,LU
+3584648448,3584655359,LU
3584655360,3584663551,CY
3584663552,3584671743,FR
3584671744,3584688127,NL
@@ -169052,7 +87333,6 @@
3584704512,3584720895,RU
3584720896,3584729087,GB
3584729088,3584737279,DE
-3584737280,3584745471,GR
3584745472,3584753663,DK
3584753664,3584770047,RU
3584770048,3584778239,NL
@@ -169072,30 +87352,22 @@
3584901120,3584909311,AT
3584909312,3584917503,IT
3584917504,3584925695,FI
-3584925696,3584931375,CH
-3584931376,3584931391,ES
-3584931392,3584933887,CH
-3584933888,3584942079,NO
+3584925696,3584933887,CH
+3584933888,3584937983,NO
+3584937984,3584942079,NL
3584942080,3584950271,DK
3584950272,3584958463,UA
3584958464,3584966655,DE
-3584966656,3584972799,DK
-3584972800,3584973823,SE
-3584973824,3584974591,DK
-3584974592,3584974847,SE
+3584966656,3584974847,DK
3584974848,3584983039,FR
3584983040,3584991231,US
3584991232,3584999423,IT
-3584999424,3585001983,GB
-3585001984,3585002111,DE
-3585002112,3585007615,GB
+3584999424,3585007615,GB
3585007616,3585015807,AT
3585015808,3585023999,IT
3585024000,3585032191,CZ
3585032192,3585048575,LV
-3585048576,3585050879,GB
-3585050880,3585051391,A2
-3585051392,3585056767,GB
+3585048576,3585056767,GB
3585056768,3585064959,LB
3585064960,3585081343,GB
3585081344,3585114111,IR
@@ -169107,9 +87379,7 @@
3585155072,3585163263,GB
3585163264,3585171455,BE
3585171456,3585179647,RU
-3585179648,3585189887,BE
-3585189888,3585190399,DZ
-3585190400,3585190527,BE
+3585179648,3585190527,BE
3585190528,3585190655,DZ
3585190656,3585196031,BE
3585196032,3585204223,ES
@@ -169123,34 +87393,19 @@
3585261568,3585269759,IT
3585269760,3585277951,SY
3585277952,3585286143,SE
-3585286144,3585289095,NO
-3585289096,3585289215,GB
-3585289216,3585289552,NO
-3585289553,3585289599,GB
-3585289600,3585289631,NO
-3585289632,3585290751,GB
-3585290752,3585290759,NO
-3585290760,3585290783,GB
-3585290784,3585290975,NO
-3585290976,3585291007,GB
-3585291008,3585293023,NO
-3585293024,3585293055,GB
-3585293056,3585293215,NO
-3585293216,3585293247,GB
-3585293248,3585293255,US
-3585293256,3585293263,GB
+3585286144,3585288959,NO
+3585288960,3585291007,GB
+3585291008,3585292543,NO
+3585292544,3585292863,GB
+3585292864,3585292895,NO
+3585292896,3585293263,GB
3585293264,3585293271,ZA
-3585293272,3585293327,GB
-3585293328,3585293335,SE
-3585293336,3585293343,NL
-3585293344,3585294335,GB
+3585293272,3585294335,GB
3585294336,3585302527,DE
3585302528,3585310719,ES
3585310720,3585318911,DE
3585318912,3585327103,DZ
-3585327104,3585332223,NL
-3585332224,3585332351,NL
-3585332352,3585335295,NL
+3585327104,3585335295,NL
3585335296,3585343487,UA
3585343488,3585351679,EE
3585351680,3585359871,CZ
@@ -169159,7 +87414,7 @@
3585376256,3585384447,PL
3585384448,3585392639,CH
3585392640,3585400831,RU
-3585400832,3585409023,A2
+3585400832,3585409023,FR
3585409024,3585417215,RU
3585417216,3585425407,BE
3585425408,3585433599,ES
@@ -169175,12 +87430,7 @@
3585515520,3585523711,RU
3585523712,3585531903,LV
3585531904,3585540095,AT
-3585540096,3585543295,DE
-3585543296,3585543303,CH
-3585543304,3585544903,DE
-3585544904,3585544911,CH
-3585544912,3585544927,TR
-3585544928,3585548287,DE
+3585540096,3585548287,DE
3585548288,3585556479,RU
3585556480,3585564671,DE
3585564672,3585572863,RU
@@ -169189,93 +87439,23 @@
3585597440,3585605631,RU
3585605632,3585613823,PL
3585613824,3585622015,EE
-3585622016,3585630207,RU
-3585630208,3585638399,RS
+3585630208,3585638399,IL
3585638400,3585646591,RU
3585646592,3585654783,SA
3585654784,3585662975,NO
3585662976,3585671167,BY
-3585671168,3585672191,SE
-3585672192,3585672447,DK
-3585672448,3585672703,SE
-3585672704,3585673727,DK
-3585673728,3585674239,SE
-3585674240,3585675775,DK
-3585675776,3585676287,SE
-3585676288,3585677567,DK
-3585677568,3585679359,SE
+3585671168,3585679359,SE
3585679360,3585687551,FI
3585687552,3585695743,DE
-3585695744,3585695999,CM
-3585696000,3585696063,BD
-3585696064,3585696511,A2
-3585696512,3585696767,LB
-3585696768,3585696799,NO
-3585696800,3585696831,LR
-3585696832,3585696847,GB
-3585696848,3585697023,A2
-3585697024,3585697279,GB
-3585697280,3585697535,NO
-3585697536,3585697791,A2
-3585697792,3585698047,NG
-3585698048,3585698303,A2
-3585698304,3585698559,US
-3585698560,3585698815,A2
-3585698816,3585699071,GB
-3585699072,3585699583,A2
-3585699584,3585699711,US
-3585699712,3585699839,AU
-3585699840,3585700095,IQ
-3585700096,3585700159,NG
-3585700160,3585700191,A2
-3585700192,3585700223,NG
-3585700224,3585700231,A2
-3585700232,3585700239,US
-3585700240,3585700255,ZA
-3585700256,3585700271,A2
-3585700272,3585700287,NG
-3585700288,3585700303,A2
-3585700304,3585700319,NG
-3585700320,3585700343,AU
-3585700344,3585700351,ZA
-3585700352,3585700607,NG
-3585700608,3585700863,TZ
-3585700864,3585701119,IQ
-3585701120,3585701375,US
-3585701376,3585701439,MW
-3585701440,3585701503,A2
-3585701504,3585701519,NG
-3585701520,3585701535,CA
-3585701536,3585701631,NG
-3585701632,3585701887,A2
-3585701888,3585702143,FR
-3585702144,3585702399,LR
-3585702400,3585702463,US
-3585702464,3585702527,A2
+3585695744,3585702527,GB
3585702528,3585702655,TZ
-3585702656,3585702911,TG
-3585702912,3585703167,NG
-3585703168,3585703423,FR
-3585703424,3585703935,A2
+3585702656,3585703935,GB
3585703936,3585712127,DE
3585712128,3585720319,AT
3585720320,3585728511,GB
3585728512,3585736703,SE
3585736704,3585744895,HR
-3585744896,3585749295,FR
-3585749296,3585749311,ES
-3585749312,3585750015,FR
-3585750016,3585750031,GB
-3585750032,3585750271,FR
-3585750272,3585750287,ES
-3585750288,3585750335,FR
-3585750336,3585750351,GB
-3585750352,3585750367,DE
-3585750368,3585750383,ES
-3585750384,3585750399,PT
-3585750400,3585750447,FR
-3585750448,3585750463,DE
-3585750464,3585753087,FR
+3585744896,3585753087,FR
3585753088,3585761279,PL
3585761280,3585769471,UA
3585769472,3585777663,TR
@@ -169286,64 +87466,44 @@
3585810432,3585818623,GB
3585818624,3585826815,DE
3585826816,3585835007,RU
-3585835008,3585835023,GB
-3585835024,3585835775,NL
-3585835776,3585835839,GQ
-3585835840,3585835847,AO
-3585835848,3585836287,NL
-3585836288,3585836543,CH
-3585836544,3585837055,NL
-3585837056,3585837311,NG
-3585837312,3585837567,IQ
-3585837568,3585838719,NL
-3585838720,3585838847,NG
-3585838848,3585838879,NL
-3585838880,3585838911,IQ
-3585838912,3585838975,NG
-3585838976,3585839103,DZ
-3585839104,3585841407,NL
-3585841408,3585841415,NG
-3585841416,3585841927,NL
-3585841928,3585842431,NG
-3585842432,3585842943,US
-3585842944,3585843199,NL
+3585835008,3585843199,US
3585843200,3585851391,NO
3585851392,3585859583,SE
-3585859584,3585860095,DE
-3585860096,3585860607,RU
-3585860608,3585863679,DE
-3585863680,3585864703,RU
-3585864704,3585865471,DE
+3585859584,3585860607,AF
+3585860608,3585861631,RU
+3585861632,3585863679,EE
+3585863680,3585865471,NL
3585865472,3585865727,LB
-3585865728,3585867775,RU
+3585865728,3585866495,EE
+3585866496,3585866751,RU
+3585866752,3585867775,EE
3585867776,3585875967,NO
3585875968,3585884159,CH
3585884160,3585892351,IQ
3585892352,3585900543,DE
-3585900544,3585902239,NO
-3585902240,3585902271,GB
-3585902272,3585902447,NO
-3585902448,3585902463,GB
-3585902464,3585908735,NO
-3585908736,3585908991,GP
-3585908992,3585909759,GF
-3585909760,3585910015,GP
-3585910016,3585910271,MQ
+3585900544,3585906687,NO
+3585906688,3585907711,CZ
+3585907712,3585908735,NO
+3585908736,3585908991,FR
+3585908992,3585909247,GF
+3585909248,3585909503,FR
+3585909504,3585909759,GF
+3585909760,3585910271,FR
3585910272,3585910527,GP
-3585910528,3585910783,FR
-3585910784,3585911039,GP
-3585911040,3585911295,FR
-3585911296,3585914623,GP
+3585910528,3585912831,FR
+3585912832,3585913087,GP
+3585913088,3585913855,FR
+3585913856,3585914623,GP
3585914624,3585914879,GF
-3585914880,3585915135,MQ
-3585915136,3585916415,GP
-3585916416,3585916671,FR
+3585914880,3585915391,FR
+3585915392,3585915647,GP
+3585915648,3585915903,FR
+3585915904,3585916159,GP
+3585916160,3585916671,FR
3585916672,3585916927,MQ
3585916928,3585925119,IT
3585925120,3585933311,CH
-3585933312,3585940479,NL
-3585940480,3585940735,BE
-3585940736,3585941503,NL
+3585933312,3585941503,NL
3585941504,3585949695,PL
3585949696,3585957887,KW
3585957888,3585966079,SE
@@ -169366,69 +87526,21 @@
3586129920,3586146303,CZ
3586146304,3586162687,PL
3586162688,3586179071,FI
-3586179072,3586191871,ES
-3586191872,3586191887,FR
-3586191888,3586195455,ES
+3586179072,3586195455,ES
3586195456,3586203647,RU
-3586203648,3586204159,ZM
-3586204160,3586205695,KE
+3586203648,3586205695,KE
3586205696,3586207743,BW
-3586207744,3586207999,ZA
-3586208000,3586208255,A2
-3586208256,3586208767,ZA
+3586207744,3586208767,ZA
3586208768,3586211071,KE
3586211072,3586211327,BW
3586211328,3586211839,KE
-3586211840,3586220287,CH
-3586220288,3586220303,FR
-3586220304,3586228223,CH
-3586228224,3586237695,BE
-3586237696,3586237951,NL
-3586237952,3586244607,BE
-3586244608,3586245119,NL
-3586245120,3586246655,GB
+3586211840,3586228223,CH
+3586228224,3586244607,BE
+3586244608,3586246655,NL
3586246656,3586248703,BE
-3586248704,3586250449,NL
-3586250450,3586250457,BE
-3586250458,3586252799,NL
-3586252800,3586254847,BE
-3586254848,3586258943,NL
-3586258944,3586259455,BE
-3586259456,3586269471,NL
-3586269472,3586269503,GB
-3586269504,3586269519,NL
-3586269520,3586269607,GB
-3586269608,3586269615,NL
-3586269616,3586269695,GB
-3586269696,3586269759,NL
-3586269760,3586269783,GB
-3586269784,3586269787,NL
-3586269788,3586269823,GB
-3586269824,3586269855,NL
-3586269856,3586269887,GB
-3586269888,3586269919,NL
-3586269920,3586270079,GB
-3586270080,3586270207,NL
-3586270208,3586271231,ES
-3586271232,3586271487,NL
-3586271488,3586271823,GB
-3586271824,3586271871,IT
-3586271872,3586272255,GB
-3586272256,3586272511,NL
-3586272512,3586272815,GB
-3586272816,3586272823,IT
-3586272824,3586272863,GB
-3586272864,3586272895,NL
-3586272896,3586272991,GB
-3586272992,3586273007,IT
-3586273008,3586273015,GB
-3586273016,3586273023,IT
-3586273024,3586276351,NL
-3586276352,3586276863,GB
-3586276864,3586277375,NL
-3586277376,3586286591,TR
-3586286592,3586286607,A2
-3586286608,3586293759,TR
+3586248704,3586260991,NL
+3586260992,3586277375,GB
+3586277376,3586293759,TR
3586293760,3586310143,ES
3586310144,3586326527,CZ
3586326528,3586342911,IR
@@ -169440,116 +87552,47 @@
3586424832,3586441215,CH
3586441216,3586457599,DE
3586457600,3586473983,NL
-3586473984,3586473987,SK
-3586473988,3586476031,HU
-3586476032,3586476063,TR
-3586476064,3586476287,HU
+3586473984,3586476287,HU
3586476288,3586476303,SK
-3586476304,3586476351,HU
-3586476352,3586476383,AT
-3586476384,3586476407,UA
-3586476408,3586476431,HU
-3586476432,3586476439,SK
-3586476440,3586490367,HU
+3586476304,3586490367,HU
3586490368,3586506751,LT
3586506752,3586523135,NL
-3586523136,3586541247,DE
-3586541248,3586541255,GB
-3586541256,3586543519,DE
-3586543520,3586543527,GB
-3586543528,3586543759,DE
-3586543760,3586543791,GB
-3586543792,3586545119,DE
-3586545120,3586545127,GB
-3586545128,3586545136,DE
-3586545137,3586545150,GE
-3586545151,3586545679,DE
-3586545680,3586545703,GB
-3586545704,3586546287,DE
-3586546288,3586546303,GB
-3586546304,3586546311,DE
-3586546312,3586546319,GB
-3586546320,3586546415,DE
-3586546416,3586546423,GB
-3586546424,3586547087,DE
-3586547088,3586547095,GB
-3586547096,3586547263,DE
-3586547264,3586547295,GB
-3586547296,3586555903,DE
+3586523136,3586544267,DE
+3586544268,3586544271,DK
+3586544272,3586544383,DE
+3586544384,3586544511,DK
+3586544512,3586555903,DE
3586555904,3586572287,IT
3586572288,3586588671,RS
3586588672,3586596863,IT
3586596864,3586605055,GB
3586605056,3586621439,SE
-3586621440,3586621695,EU
+3586621440,3586621695,GB
3586621696,3586625535,IE
3586625536,3586629631,GB
3586629632,3586637823,IE
3586637824,3586654207,PL
3586654208,3586662399,GE
3586662400,3586670591,UA
-3586670592,3586677183,DE
-3586677184,3586677247,FR
-3586677248,3586677311,DE
-3586677312,3586677327,FR
-3586677328,3586677439,DE
-3586677440,3586677487,FR
-3586677488,3586677641,DE
-3586677642,3586677645,GB
-3586677646,3586677647,SG
+3586670592,3586675967,DE
+3586675968,3586676223,FR
+3586676224,3586676991,DE
+3586676992,3586677434,FR
+3586677435,3586677435,DE
+3586677436,3586677631,FR
+3586677632,3586677639,DE
+3586677640,3586677643,GB
+3586677644,3586677647,SG
3586677648,3586677655,US
-3586677656,3586677759,DE
-3586677760,3586678015,GR
-3586678016,3586678271,DE
-3586678272,3586678399,FR
-3586678400,3586678415,GB
-3586678416,3586678431,FR
-3586678432,3586678439,IE
-3586678440,3586678447,FR
-3586678448,3586678527,IE
-3586678528,3586678655,FR
-3586678656,3586678671,CY
-3586678672,3586678679,GB
-3586678680,3586678687,MU
-3586678688,3586678783,GB
-3586678784,3586679039,IT
-3586679040,3586679103,FR
-3586679104,3586679167,DE
-3586679168,3586679295,FR
-3586679296,3586679327,BE
-3586679328,3586679343,DK
-3586679344,3586679359,BE
-3586679360,3586679423,DE
-3586679424,3586679583,FR
-3586679584,3586679599,IT
-3586679600,3586679647,FR
-3586679648,3586679711,IT
-3586679712,3586679727,FR
-3586679728,3586679807,IT
-3586679808,3586679855,FR
-3586679856,3586679871,GB
-3586679872,3586680319,FR
+3586677656,3586679599,FR
+3586679600,3586679615,IT
+3586679616,3586680319,FR
3586680320,3586680575,ES
-3586680576,3586680583,BE
-3586680584,3586680607,FR
-3586680608,3586680615,ES
-3586680616,3586680623,GB
-3586680624,3586680703,FR
-3586680704,3586680831,ES
-3586680832,3586680975,FR
-3586680976,3586680991,BE
-3586680992,3586681343,FR
-3586681344,3586681471,BE
-3586681472,3586681615,FR
+3586680576,3586681615,FR
3586681616,3586681631,CZ
-3586681632,3586681727,FR
-3586681728,3586681855,BE
-3586681856,3586682207,FR
-3586682208,3586682223,RU
-3586682224,3586682239,IE
+3586681632,3586682239,FR
3586682240,3586682367,US
-3586682368,3586682399,AT
-3586682400,3586682879,FR
+3586682368,3586682879,FR
3586682880,3586686975,US
3586686976,3586703359,SE
3586703360,3586719743,CH
@@ -169557,81 +87600,23 @@
3586752512,3586785279,NL
3586785280,3586793471,OM
3586793472,3586801663,CH
-3586801664,3586803487,HR
-3586803488,3586803519,DE
-3586803520,3586804751,HR
-3586804752,3586804767,HU
-3586804768,3586804863,HR
-3586804864,3586804871,RO
-3586804872,3586818047,HR
+3586801664,3586818047,HR
3586818048,3586834431,IE
-3586834432,3586844543,DE
-3586844544,3586844559,FR
-3586844560,3586850495,DE
-3586850496,3586850511,US
-3586850512,3586850815,DE
+3586834432,3586850815,DE
3586850816,3586867199,NO
3586867200,3586883583,FR
3586883584,3586899967,IT
-3586899968,3586901311,DE
-3586901312,3586901375,ES
-3586901376,3586904831,DE
-3586904832,3586904839,VG
-3586904840,3586905287,DE
-3586905288,3586905295,CY
-3586905296,3586906225,DE
-3586906226,3586906226,DE
-3586906227,3586910559,DE
-3586910560,3586910567,NL
-3586910568,3586910575,CY
-3586910576,3586910587,NL
-3586910588,3586910591,DE
-3586910592,3586910623,NL
-3586910624,3586910655,DE
-3586910656,3586910687,NL
-3586910688,3586910991,DE
-3586910992,3586911039,BE
+3586899968,3586911007,DE
+3586911008,3586911039,BE
3586911040,3586911103,DE
3586911104,3586911167,NL
3586911168,3586912721,DE
3586912722,3586912722,FR
3586912723,3586916351,DE
-3586916352,3586924031,IT
-3586924032,3586924047,US
-3586924048,3586924543,IT
-3586924544,3586924743,FI
-3586924744,3586924751,AX
-3586924752,3586924767,FI
-3586924768,3586924799,AX
-3586924800,3586924871,FI
-3586924872,3586924879,AX
-3586924880,3586924919,FI
-3586924920,3586924927,AX
-3586924928,3586924943,FI
-3586924944,3586924959,AX
-3586924960,3586924983,FI
-3586924984,3586925055,AX
-3586925056,3586925103,FI
-3586925104,3586925135,AX
-3586925136,3586925471,FI
-3586925472,3586925503,AX
-3586925504,3586925535,FI
-3586925536,3586925567,AX
-3586925568,3586925695,FI
-3586925696,3586925759,AX
-3586925760,3586925791,FI
-3586925792,3586925823,AX
+3586916352,3586924543,IT
+3586924544,3586925823,AX
3586925824,3586926079,FI
-3586926080,3586926591,AX
-3586926592,3586926847,SE
-3586926848,3586927103,FI
-3586927104,3586927999,AX
-3586928000,3586928159,FI
-3586928160,3586928175,AX
-3586928176,3586928303,FI
-3586928304,3586928319,AX
-3586928320,3586928639,FI
-3586928640,3586929663,AX
+3586926080,3586929663,AX
3586929664,3586930687,FI
3586930688,3586932735,AX
3586932736,3586949119,LB
@@ -169640,308 +87625,57 @@
3586981888,3586998271,IT
3586998272,3587006463,PT
3587006464,3587014655,FR
-3587014656,3587051007,GB
-3587051008,3587051775,DE
-3587051776,3587052031,GB
-3587052032,3587052799,NL
-3587052800,3587053055,GB
-3587053056,3587053823,FR
-3587053824,3587055615,GB
+3587014656,3587055615,GB
3587055616,3587063807,UZ
3587063808,3587080191,NL
-3587080192,3587082367,GB
-3587082368,3587082431,US
-3587082432,3587088383,GB
+3587080192,3587088383,GB
3587088384,3587096575,DE
-3587096576,3587110863,NL
-3587110864,3587110871,BE
-3587110872,3587121151,NL
+3587096576,3587121151,NL
3587121152,3587129343,AL
-3587129344,3587134463,NL
-3587134464,3587134591,ES
-3587134592,3587145727,NL
+3587129344,3587145727,NL
3587145728,3587162111,CY
3587162112,3587178495,IR
-3587178496,3587178795,AT
-3587178796,3587178799,US
-3587178800,3587179439,AT
-3587179440,3587179455,GB
-3587179456,3587186687,AT
+3587178496,3587186687,AT
3587186688,3587186943,DE
-3587186944,3587187711,GB
-3587187712,3587188223,A2
+3587186944,3587187199,GB
+3587187200,3587187455,DE
+3587187456,3587187711,GB
+3587187712,3587188223,DE
3587188224,3587188479,AM
-3587188480,3587188735,DE
-3587188736,3587192831,A2
-3587192832,3587193087,DE
+3587188480,3587193087,DE
3587193088,3587193599,GB
-3587193600,3587194495,A2
-3587194496,3587194511,RU
-3587194512,3587194879,A2
+3587193600,3587194879,DE
3587194880,3587211263,GB
-3587211264,3587211531,AT
-3587211532,3587211535,DE
-3587211536,3587213911,AT
-3587213912,3587213919,UY
-3587213920,3587217151,AT
-3587217152,3587217407,DE
-3587217408,3587219455,AT
+3587211264,3587219455,AT
3587219456,3587227647,RU
-3587227648,3587227663,NL
-3587227664,3587227679,GB
-3587227680,3587227759,NL
-3587227760,3587227775,GB
-3587227776,3587227807,NL
-3587227808,3587227823,GB
-3587227824,3587227903,NL
-3587227904,3587228047,GB
-3587228048,3587228087,NL
-3587228088,3587228127,GB
-3587228128,3587228271,NL
-3587228272,3587228287,GB
-3587228288,3587228351,NL
-3587228352,3587228367,GB
-3587228368,3587228447,NL
-3587228448,3587228463,GB
-3587228464,3587228591,NL
-3587228592,3587228607,GB
-3587228608,3587228640,NL
-3587228641,3587228655,GB
-3587228656,3587228927,NL
-3587228928,3587229455,GB
-3587229456,3587229647,NL
-3587229648,3587229663,GB
-3587229664,3587229823,NL
-3587229824,3587229839,GB
-3587229840,3587229855,ES
-3587229856,3587229887,GB
-3587229888,3587229920,NL
-3587229921,3587229935,GB
-3587229936,3587230159,NL
-3587230160,3587230511,GB
-3587230512,3587230519,NL
-3587230520,3587230527,GB
-3587230528,3587230543,NL
-3587230544,3587230607,GB
-3587230608,3587230623,NL
-3587230624,3587230847,GB
-3587230848,3587230911,NL
-3587230912,3587231359,GB
-3587231360,3587231999,NL
-3587232000,3587232255,GB
-3587232256,3587232511,NL
-3587232512,3587232519,GB
-3587232520,3587232527,NL
-3587232528,3587232767,GB
-3587232768,3587232911,NL
-3587232912,3587232927,GB
-3587232928,3587233103,NL
-3587233104,3587233119,GB
-3587233120,3587233167,NL
-3587233168,3587233175,GB
-3587233176,3587233791,NL
-3587233792,3587233919,GB
-3587233920,3587233935,NL
-3587233936,3587233951,GB
-3587233952,3587233967,NL
-3587233968,3587233983,GB
-3587233984,3587233999,NL
-3587234000,3587234047,GB
-3587234048,3587234079,NL
-3587234080,3587234127,GB
-3587234128,3587234143,NL
-3587234144,3587234159,GB
-3587234160,3587234207,NL
-3587234208,3587234815,GB
-3587234816,3587235103,NL
-3587235104,3587235111,GB
-3587235112,3587236351,NL
-3587236352,3587236495,GB
-3587236496,3587236511,NL
-3587236512,3587236543,GB
-3587236544,3587236607,NL
-3587236608,3587237391,GB
-3587237392,3587237399,NL
-3587237400,3587237407,GB
-3587237408,3587237503,NL
-3587237504,3587237519,GB
-3587237520,3587237535,NL
-3587237536,3587237551,GB
-3587237552,3587237567,NL
-3587237568,3587237887,GB
-3587237888,3587238463,NL
-3587238464,3587238479,GB
-3587238480,3587238511,NL
-3587238512,3587238519,GB
-3587238520,3587238527,NL
-3587238528,3587238543,GB
-3587238544,3587238567,NL
-3587238568,3587238583,GB
-3587238584,3587238591,NL
-3587238592,3587238599,GB
-3587238600,3587238607,NL
-3587238608,3587238911,GB
-3587238912,3587239439,NL
-3587239440,3587239447,BE
-3587239448,3587239487,NL
-3587239488,3587239503,GB
-3587239504,3587240231,NL
-3587240232,3587240255,GB
-3587240256,3587240271,NL
-3587240272,3587240279,GB
-3587240280,3587240359,NL
-3587240360,3587240367,GB
-3587240368,3587240431,NL
-3587240432,3587240439,GB
-3587240440,3587241223,NL
-3587241224,3587241247,GB
-3587241248,3587241263,NL
-3587241264,3587241271,GB
-3587241272,3587241287,NL
-3587241288,3587241295,GB
-3587241296,3587241343,NL
-3587241344,3587241471,GB
-3587241472,3587242271,NL
-3587242272,3587242287,GB
-3587242288,3587242463,NL
-3587242464,3587242495,GB
-3587242496,3587242551,NL
-3587242552,3587242559,GB
-3587242560,3587242671,NL
+3587227648,3587231231,GB
+3587231232,3587231263,NL
+3587231264,3587233087,GB
+3587233088,3587233095,NL
+3587233096,3587233279,GB
+3587233280,3587233535,NL
+3587233536,3587234191,GB
+3587234192,3587234207,NL
+3587234208,3587237631,GB
+3587237632,3587237887,NL
+3587237888,3587238487,GB
+3587238488,3587238495,NL
+3587238496,3587239487,GB
+3587239488,3587239495,NL
+3587239496,3587239583,GB
+3587239584,3587239599,NL
+3587239600,3587239711,GB
+3587239712,3587239727,NL
+3587239728,3587239791,GB
+3587239792,3587239799,NL
+3587239800,3587242671,GB
3587242672,3587242679,DE
-3587242680,3587243903,NL
-3587243904,3587243919,GB
-3587243920,3587243935,NL
-3587243936,3587243951,GB
-3587243952,3587243967,NL
-3587243968,3587243975,GB
-3587243976,3587243983,NL
-3587243984,3587243991,GB
-3587243992,3587244007,NL
-3587244008,3587244015,GB
-3587244016,3587244023,NL
-3587244024,3587244031,GB
+3587242680,3587244031,GB
3587244032,3587260415,IT
3587260416,3587284991,DE
-3587284992,3587285135,EU
-3587285136,3587285159,HK
-3587285160,3587285216,EU
-3587285217,3587285217,US
-3587285218,3587285247,EU
-3587285248,3587285523,IT
-3587285524,3587285524,A2
-3587285525,3587286527,IT
-3587286528,3587286783,EU
-3587286784,3587287039,IT
-3587287040,3587287043,EU
-3587287044,3587287047,LY
-3587287048,3587287055,EU
-3587287056,3587287059,LY
-3587287060,3587287295,EU
-3587287296,3587287307,GE
-3587287308,3587287311,DE
-3587287312,3587287319,GE
-3587287320,3587287327,FR
-3587287328,3587287335,GB
-3587287336,3587287339,DE
-3587287340,3587287343,PL
-3587287344,3587287351,GE
-3587287352,3587287359,IS
-3587287360,3587287363,NL
-3587287364,3587287367,IT
-3587287368,3587287387,NL
-3587287388,3587287391,CZ
-3587287392,3587287395,DE
-3587287396,3587287403,IS
-3587287404,3587287411,PL
-3587287412,3587287415,DE
-3587287416,3587287419,IQ
-3587287420,3587287423,DE
-3587287424,3587287427,SE
-3587287428,3587287431,DE
-3587287432,3587287435,IT
-3587287436,3587287439,DE
-3587287440,3587287447,TR
-3587287448,3587287451,DE
-3587287452,3587287455,IT
-3587287456,3587287459,DE
-3587287460,3587287463,IT
-3587287464,3587287475,SE
-3587287476,3587287479,PL
-3587287480,3587287487,EU
-3587287488,3587287535,IT
-3587287536,3587287543,DE
-3587287544,3587287551,PL
-3587287552,3587287559,GB
-3587287560,3587287563,FR
-3587287564,3587287571,PL
-3587287572,3587287575,DE
-3587287576,3587287579,FR
-3587287580,3587287583,DE
-3587287584,3587287591,FR
-3587287592,3587287599,GB
-3587287600,3587287679,IT
-3587287680,3587287687,NL
-3587287688,3587287711,IS
-3587287712,3587287719,GE
-3587287720,3587287723,IT
-3587287724,3587287727,SE
-3587287728,3587287807,IT
-3587287808,3587287815,IS
-3587287816,3587287823,GB
-3587287824,3587287835,FR
-3587287836,3587287847,GB
-3587287848,3587287851,SE
-3587287852,3587287879,IQ
-3587287880,3587287887,FR
-3587287888,3587287935,IT
-3587287936,3587287943,FR
-3587287944,3587287947,DE
-3587287948,3587287959,IT
-3587287960,3587287963,FR
-3587287964,3587287967,GB
-3587287968,3587287983,DE
-3587287984,3587288063,IT
-3587288064,3587288319,EU
-3587288320,3587288575,IT
-3587288576,3587288703,AE
-3587288704,3587288707,DE
-3587288708,3587288759,NL
-3587288760,3587288959,A2
-3587288960,3587289087,DE
-3587289088,3587289343,FR
-3587289344,3587289347,ES
-3587289348,3587289351,FR
-3587289352,3587289359,PT
-3587289360,3587289367,ES
-3587289368,3587289375,FR
-3587289376,3587289383,EU
-3587289384,3587289387,GB
-3587289388,3587289391,ES
-3587289392,3587289399,GB
-3587289400,3587289407,ES
-3587289408,3587289411,EU
-3587289412,3587289415,FR
-3587289416,3587289423,EU
-3587289424,3587289467,GB
-3587289468,3587290111,EU
-3587290112,3587290367,IT
-3587290368,3587290622,GB
-3587290623,3587290623,EU
-3587290624,3587290879,FR
-3587290880,3587291135,A2
-3587291136,3587291139,NL
-3587291140,3587291647,EU
-3587291648,3587291967,IT
-3587291968,3587292031,AL
-3587292032,3587292159,IT
-3587292160,3587292223,EU
-3587292224,3587292415,IT
-3587292416,3587292419,ES
-3587292420,3587292671,EU
-3587292672,3587292799,IT
-3587292800,3587292863,AT
-3587292864,3587309567,IT
+3587284992,3587291135,IT
+3587291136,3587292159,FR
+3587292160,3587309567,IT
3587309568,3587325951,GB
3587325952,3587342335,RU
3587342336,3587358719,CZ
@@ -169949,22 +87683,22 @@
3587375104,3587383295,TR
3587383296,3587391487,CZ
3587391488,3587407871,KZ
-3587407872,3587408383,NL
-3587408384,3587408895,BE
-3587408896,3587409407,RU
-3587409408,3587410431,BE
-3587410432,3587410687,NL
-3587410688,3587412223,BE
+3587407872,3587412223,BE
3587412224,3587413759,NL
3587413760,3587414015,BE
-3587414016,3587424255,NL
+3587414016,3587415039,NL
+3587415040,3587422719,BE
+3587422720,3587423743,NL
+3587423744,3587424255,BE
3587424256,3587440639,DE
3587440640,3587444900,SE
3587444901,3587444916,FI
3587444917,3587445759,SE
3587445760,3587446015,FI
-3587446016,3587446103,SE
-3587446104,3587446271,FI
+3587446016,3587446071,SE
+3587446072,3587446079,FI
+3587446080,3587446143,SE
+3587446144,3587446271,FI
3587446272,3587457023,SE
3587457024,3587473407,GB
3587473408,3587489791,IT
@@ -169981,19 +87715,11 @@
3587620864,3587637247,SE
3587637248,3587646975,FR
3587646976,3587647231,MC
-3587647232,3587653631,FR
-3587653632,3587655615,SK
-3587655616,3587655679,US
-3587655680,3587670015,SK
-3587670016,3587686031,IT
-3587686032,3587686039,FR
-3587686040,3587687591,IT
-3587687592,3587687599,NL
-3587687600,3587691399,IT
-3587691400,3587691407,DE
-3587691408,3587701295,IT
-3587701296,3587701303,FR
-3587701304,3587702783,IT
+3587647232,3587647743,FR
+3587647744,3587647999,GB
+3587648000,3587653631,FR
+3587653632,3587670015,SK
+3587670016,3587702783,IT
3587702784,3587710975,DE
3587710976,3587719167,CZ
3587719168,3587735551,PL
@@ -170008,50 +87734,39 @@
3587850240,3587854335,NL
3587854336,3587866623,PL
3587866624,3587874815,FR
-3587874816,3587877407,DE
-3587877408,3587877439,NL
-3587877440,3587878527,DE
-3587878528,3587878559,AT
-3587878560,3587883007,DE
+3587874816,3587883007,DE
3587883008,3587915775,GB
3587915776,3587932159,EE
-3587932160,3587932415,NL
-3587932416,3587944447,BE
-3587944448,3587945471,NL
-3587945472,3587948031,BE
-3587948032,3587948543,NL
+3587932160,3587948543,BE
3587948544,3587964927,RU
3587964928,3587981311,ES
3587981312,3587997695,IS
3587997696,3588014079,DE
3588014080,3588030463,CZ
-3588030464,3588031615,RU
-3588031616,3588031623,LV
-3588031624,3588046847,RU
-3588046848,3588060351,DE
-3588060352,3588060359,CH
-3588060360,3588063231,DE
+3588030464,3588046847,RU
+3588046848,3588063231,DE
3588063232,3588071423,CH
3588071424,3588079615,GB
3588079616,3588095999,CH
3588096000,3588104191,NL
3588104192,3588112383,BG
-3588112384,3588128767,FR
+3588112384,3588128767,RE
3588128768,3588145151,HU
3588145152,3588153343,PL
3588153344,3588161535,RU
-3588161536,3588227071,FR
+3588161536,3588173311,FR
+3588173312,3588173567,RE
+3588173568,3588173823,YT
+3588173824,3588227071,FR
3588227072,3588292607,BE
3588292608,3588308991,AT
3588308992,3588325375,NO
-3588325376,3588328191,GB
-3588328192,3588328447,EU
-3588328448,3588333567,GB
+3588325376,3588333567,GB
3588333568,3588341759,FR
3588341760,3588358143,IT
3588358144,3588374527,BG
-3588390912,3588393983,LT
-3588393984,3588394495,LV
+3588390912,3588394239,LT
+3588394240,3588394495,LV
3588394496,3588407295,LT
3588407296,3588423679,CZ
3588423680,3588440063,ES
@@ -170062,26 +87777,14 @@
3588489216,3588505599,FR
3588505600,3588521983,RU
3588521984,3588538367,PT
-3588538368,3588544383,GB
-3588544384,3588544391,IE
-3588544392,3588553983,GB
-3588553984,3588554239,IE
-3588554240,3588554687,GB
-3588554688,3588554751,IE
+3588538368,3588554751,GB
3588554752,3588571135,AT
3588571136,3588587519,GB
-3588587520,3588588567,ES
-3588588568,3588588575,IT
-3588588576,3588588583,PT
-3588588584,3588590591,ES
+3588587520,3588590591,ES
3588590592,3588590847,FR
-3588590848,3588591999,ES
-3588592000,3588592127,FR
-3588592128,3588595199,ES
+3588590848,3588595199,ES
3588595200,3588595455,FR
-3588595456,3588598607,ES
-3588598608,3588598615,IT
-3588598616,3588603903,ES
+3588595456,3588603903,ES
3588603904,3588620287,SI
3588620288,3588628479,SA
3588628480,3588636671,CH
@@ -170096,19 +87799,11 @@
3588718592,3588734975,BG
3588734976,3588751359,PL
3588751360,3588767743,TR
-3588767744,3588773759,GB
-3588773760,3588773887,SL
-3588773888,3588775935,GB
-3588775936,3588776191,NG
-3588776192,3588782271,GB
-3588782272,3588782279,A2
-3588782280,3588784127,GB
+3588767744,3588784127,GB
3588784128,3588800511,CH
3588800512,3588816895,RU
3588816896,3588833279,IT
-3588833280,3588848767,RO
-3588848768,3588848775,FR
-3588848776,3588849663,RO
+3588833280,3588849663,RO
3588849664,3588857855,IE
3588857856,3588866047,IR
3588866048,3588882431,NL
@@ -170122,891 +87817,148 @@
3588997120,3589013503,AT
3589013504,3589021695,ES
3589021696,3589029887,SA
-3589029888,3589029951,GB
-3589029952,3589030015,NL
-3589030016,3589030111,GB
-3589030112,3589030127,NL
-3589030128,3589030143,GB
-3589030144,3589030183,NL
-3589030184,3589030191,GB
-3589030192,3589030207,NL
-3589030208,3589030239,GB
-3589030240,3589030303,NL
-3589030304,3589030335,FR
-3589030336,3589031423,NL
-3589031424,3589031935,GB
-3589031936,3589034015,NL
-3589034016,3589034111,GB
-3589034112,3589034143,NL
-3589034144,3589034159,ES
-3589034160,3589034167,GB
-3589034168,3589034175,NL
-3589034176,3589034191,GB
-3589034192,3589034207,DE
-3589034208,3589034223,GB
-3589034224,3589034239,NL
-3589034240,3589034495,EU
-3589034496,3589037055,ES
-3589037056,3589037311,EU
-3589037312,3589037343,NL
-3589037344,3589037375,SE
-3589037376,3589037391,NL
-3589037392,3589037407,GB
-3589037408,3589037423,NL
-3589037424,3589037439,ES
-3589037440,3589037471,GB
-3589037472,3589037487,NL
-3589037488,3589037495,IT
-3589037496,3589037503,CH
-3589037504,3589037535,NL
-3589037536,3589037551,GB
-3589037552,3589037559,BE
-3589037560,3589037567,NL
-3589037568,3589038079,ES
-3589038080,3589040127,NL
-3589040128,3589042207,GB
-3589042208,3589042239,NL
-3589042240,3589042271,GB
-3589042272,3589042367,NL
-3589042368,3589043231,GB
-3589043232,3589043327,NL
-3589043328,3589043455,GB
-3589043456,3589043711,NL
-3589043712,3589044223,GB
-3589044224,3589044319,NL
-3589044320,3589046271,GB
+3589029888,3589030119,GB
+3589030120,3589030127,NL
+3589030128,3589031055,GB
+3589031056,3589031056,NL
+3589031057,3589034239,GB
+3589034240,3589034495,NL
+3589034496,3589037055,GB
+3589037056,3589037311,NL
+3589037312,3589046271,GB
3589046272,3589079039,NO
-3589079040,3589092223,DK
-3589092224,3589092227,SE
-3589092228,3589128191,DK
+3589079040,3589128191,DK
3589128192,3589144575,GB
3589144576,3589152767,UA
-3589152768,3589152927,DE
-3589152928,3589152935,CH
-3589152936,3589153027,DE
-3589153028,3589153031,ES
-3589153032,3589156591,DE
-3589156592,3589156607,CH
-3589156608,3589160959,DE
+3589152768,3589160959,DE
3589160960,3589177343,PL
3589177344,3589193727,TR
3589193728,3589210111,SE
3589210112,3589226495,NL
3589226496,3589242879,NO
-3589242880,3589248511,NL
-3589248512,3589248767,GB
-3589248768,3589256191,NL
-3589256192,3589256447,GR
-3589256448,3589258495,NL
-3589258496,3589258751,GB
-3589258752,3589259263,NL
+3589242880,3589259263,NL
3589259264,3589275647,DE
3589275648,3589292031,RS
3589292032,3589308415,AT
3589308416,3589324799,DE
3589324800,3589341183,BG
3589341184,3589373951,PL
-3589373952,3589375495,DE
-3589375496,3589375503,CI
-3589375504,3589390335,DE
+3589373952,3589390335,DE
3589390336,3589423103,RU
-3589423104,3589423615,IT
-3589423616,3589424127,CH
-3589424128,3589424639,SE
-3589424640,3589425151,ES
-3589425152,3589425663,CH
-3589425664,3589426175,GB
-3589426176,3589426239,FR
-3589426240,3589426335,IT
-3589426336,3589426367,GB
-3589426368,3589426399,IT
-3589426400,3589427199,GB
-3589427200,3589427247,FR
-3589427248,3589428223,GB
-3589428224,3589428351,CH
-3589428352,3589429247,GB
-3589429248,3589429503,FR
-3589429504,3589430271,GB
-3589430272,3589430543,FR
-3589430544,3589430559,ES
-3589430560,3589430575,GB
-3589430576,3589430591,ES
-3589430592,3589431039,GB
+3589423104,3589431039,GB
3589431040,3589431295,ES
-3589431296,3589431343,FR
-3589431344,3589431359,GB
-3589431360,3589431423,ES
-3589431424,3589431807,GB
-3589431808,3589432111,CH
-3589432112,3589432127,GB
-3589432128,3589432159,CH
-3589432160,3589432319,GB
-3589432320,3589432575,CH
-3589432576,3589432895,FR
-3589432896,3589432967,CH
-3589432968,3589432975,GB
-3589432976,3589432991,CH
-3589432992,3589433343,GB
-3589433344,3589433375,IT
-3589433376,3589433407,CH
-3589433408,3589433439,SE
-3589433440,3589433471,ES
-3589433472,3589433503,CH
-3589433504,3589433535,IE
-3589433536,3589433567,DK
-3589433568,3589433599,GB
-3589433600,3589434111,IE
-3589434112,3589434623,DK
-3589434624,3589434751,GB
-3589434752,3589434879,ES
-3589434880,3589435391,FR
-3589435392,3589435519,PL
-3589435520,3589435775,ES
-3589435776,3589435903,GB
-3589435904,3589436159,ES
-3589436160,3589436415,GB
-3589436416,3589436671,FR
-3589436672,3589436799,PL
-3589436800,3589436927,GB
-3589436928,3589437183,PL
-3589437184,3589437311,FR
-3589437312,3589437439,GB
-3589437440,3589437695,FR
-3589437696,3589439487,GB
-3589439488,3589444631,SE
-3589444632,3589444639,NO
-3589444640,3589455871,SE
+3589431296,3589432831,GB
+3589432832,3589433087,CH
+3589433088,3589433855,GB
+3589433856,3589434111,IE
+3589434112,3589435759,GB
+3589435760,3589435763,ES
+3589435764,3589439487,GB
+3589439488,3589455871,SE
3589455872,3589472255,RU
3589472256,3589488639,TR
-3589488640,3589491711,RU
-3589491712,3589491743,TJ
-3589491744,3589505023,RU
+3589488640,3589505023,RU
3589505024,3589521407,FI
3589521408,3589537791,IT
3589537792,3589545983,FR
3589545984,3589554175,DE
3589554176,3589570559,PS
-3589570560,3589570655,NL
-3589570656,3589570671,GB
-3589570672,3589570687,NL
-3589570688,3589570783,GB
-3589570784,3589570815,NL
-3589570816,3589571071,GB
-3589571072,3589571135,NL
-3589571136,3589571583,GB
-3589571584,3589571839,NL
-3589571840,3589578751,GB
-3589578752,3589579391,NL
-3589579392,3589579775,GB
-3589579776,3589580799,NL
-3589580800,3589580895,GB
-3589580896,3589581055,NL
-3589581056,3589581183,GB
-3589581184,3589581231,NL
-3589581232,3589581327,GB
-3589581328,3589581439,NL
-3589581440,3589581567,GB
-3589581568,3589581807,NL
-3589581808,3589581823,GB
-3589581824,3589582639,NL
-3589582640,3589582655,GB
-3589582656,3589583487,NL
-3589583488,3589583647,GB
-3589583648,3589583663,NL
-3589583664,3589583743,GB
-3589583744,3589584127,NL
-3589584128,3589584255,GB
-3589584256,3589584271,NL
-3589584272,3589584639,GB
-3589584640,3589585983,NL
-3589585984,3589586175,GB
-3589586176,3589586943,NL
+3589570560,3589578751,GB
+3589578752,3589579007,IN
+3589579008,3589580543,GB
+3589580544,3589580799,NL
+3589580800,3589582975,GB
+3589582976,3589583103,NL
+3589583104,3589583871,GB
+3589583872,3589584127,NL
+3589584128,3589586943,GB
3589586944,3589603327,RS
3589603328,3589668863,FR
3589668864,3589677055,RU
-3589677056,3589680287,FR
-3589680288,3589680303,MQ
-3589680304,3589680600,FR
-3589680601,3589680601,FR
-3589680602,3589680751,FR
-3589680752,3589680767,MQ
-3589680768,3589685247,FR
+3589677056,3589685247,FR
3589685248,3589718015,GB
-3589718016,3589719279,BE
-3589719280,3589719287,FR
-3589719288,3589719343,BE
-3589719344,3589719347,LU
-3589719348,3589720071,BE
-3589720072,3589720079,FR
-3589720080,3589720135,BE
-3589720136,3589720143,GB
-3589720144,3589720263,BE
-3589720264,3589720271,GB
-3589720272,3589720279,FR
-3589720280,3589720303,BE
-3589720304,3589720311,FR
-3589720312,3589720575,BE
-3589720576,3589720583,ES
-3589720584,3589720599,FR
-3589720600,3589720623,BE
-3589720624,3589720631,GB
-3589720632,3589720639,FR
-3589720640,3589720655,BE
-3589720656,3589720663,ES
-3589720664,3589720687,BE
-3589720688,3589720695,GB
-3589720696,3589720703,ES
-3589720704,3589720727,BE
-3589720728,3589720735,GB
-3589720736,3589720743,BE
-3589720744,3589720767,GB
-3589720768,3589720783,BE
-3589720784,3589720799,GB
-3589720800,3589720815,BE
-3589720816,3589720823,GB
-3589720824,3589720839,BE
-3589720840,3589720847,GB
-3589720848,3589720879,BE
-3589720880,3589720887,FR
-3589720888,3589720895,BE
-3589720896,3589720903,IT
-3589720904,3589720935,BE
-3589720936,3589720943,GB
-3589720944,3589720951,FR
-3589720952,3589720983,GB
-3589720984,3589720995,BE
-3589720996,3589721003,GB
-3589721004,3589721015,BE
-3589721016,3589721031,GB
-3589721032,3589721039,BE
-3589721040,3589721047,GB
-3589721048,3589721055,ES
-3589721056,3589721063,BE
-3589721064,3589721071,GB
-3589721072,3589721159,BE
-3589721160,3589721167,GB
-3589721168,3589721231,BE
-3589721232,3589721247,GB
-3589721248,3589721255,FR
-3589721256,3589721279,GB
-3589721280,3589721295,BE
-3589721296,3589721311,FR
-3589721312,3589721855,BE
-3589721856,3589721863,GB
-3589721864,3589721867,BE
-3589721868,3589721883,GB
-3589721884,3589721903,BE
-3589721904,3589721911,GB
-3589721912,3589721951,BE
-3589721952,3589721967,GB
-3589721968,3589722023,BE
+3589718016,3589722023,BE
3589722024,3589722031,FR
-3589722032,3589722111,BE
-3589722112,3589722143,GB
-3589722144,3589722159,BE
-3589722160,3589722167,FR
-3589722168,3589722175,BE
-3589722176,3589722191,GB
-3589722192,3589722199,BE
-3589722200,3589722207,FR
-3589722208,3589722263,BE
-3589722264,3589722271,GB
-3589722272,3589722279,BE
-3589722280,3589722287,FR
-3589722288,3589722303,BE
-3589722304,3589722311,FR
-3589722312,3589722319,GB
-3589722320,3589722335,FR
-3589722336,3589722343,BE
-3589722344,3589722359,FR
-3589722360,3589722383,BE
-3589722384,3589722391,DE
-3589722392,3589722431,BE
-3589722432,3589722439,ES
-3589722440,3589722447,GB
-3589722448,3589722623,BE
-3589722624,3589722631,GB
-3589722632,3589722639,BE
-3589722640,3589722647,GB
-3589722648,3589722703,BE
-3589722704,3589722711,FR
-3589722712,3589722791,BE
-3589722792,3589722799,GB
-3589722800,3589722835,BE
-3589722836,3589722843,GB
-3589722844,3589722943,BE
-3589722944,3589722951,GB
-3589722952,3589722959,FR
-3589722960,3589722983,BE
-3589722984,3589722991,GB
-3589722992,3589723023,BE
-3589723024,3589723031,FR
-3589723032,3589723791,BE
-3589723792,3589723799,FR
-3589723800,3589723975,BE
-3589723976,3589723983,FR
-3589723984,3589724671,BE
-3589724672,3589724679,FR
-3589724680,3589724695,GB
-3589724696,3589724703,BE
-3589724704,3589724719,FR
-3589724720,3589724727,GB
-3589724728,3589724791,BE
-3589724792,3589724807,GB
-3589724808,3589725495,BE
-3589725496,3589725503,PT
-3589725504,3589725663,BE
-3589725664,3589725695,GB
-3589725696,3589725799,BE
-3589725800,3589725807,IE
-3589725808,3589725847,BE
-3589725848,3589725855,IE
-3589725856,3589725911,BE
-3589725912,3589725919,GB
-3589725920,3589725959,BE
-3589725960,3589725967,LU
-3589725968,3589725999,BE
-3589726000,3589726007,FR
-3589726008,3589726047,BE
-3589726048,3589726055,FR
-3589726056,3589726111,BE
-3589726112,3589726119,GB
-3589726120,3589726367,BE
-3589726368,3589726375,FR
-3589726376,3589726423,BE
-3589726424,3589726431,FR
-3589726432,3589726455,BE
-3589726456,3589726463,FR
-3589726464,3589726471,BE
-3589726472,3589726479,GB
-3589726480,3589726487,BE
-3589726488,3589726495,GB
-3589726496,3589726535,BE
-3589726536,3589726543,GB
-3589726544,3589727007,BE
-3589727008,3589727015,FR
-3589727016,3589729735,BE
-3589729736,3589729743,ES
-3589729744,3589729751,GB
-3589729752,3589730087,BE
-3589730088,3589730095,GB
-3589730096,3589730111,BE
-3589730112,3589730119,GB
-3589730120,3589732671,BE
-3589732672,3589732687,GB
-3589732688,3589733375,BE
-3589733376,3589733439,LU
-3589733440,3589734167,BE
-3589734168,3589734175,GB
-3589734176,3589734399,BE
+3589722032,3589734399,BE
3589734400,3589742591,EG
-3589742592,3589742687,NL
-3589742688,3589742695,AT
-3589742696,3589742975,NL
-3589742976,3589743039,IE
-3589743040,3589743458,NL
-3589743459,3589743460,US
-3589743461,3589744895,NL
-3589744896,3589744959,BE
-3589744960,3589745119,NL
-3589745120,3589745151,BE
-3589745152,3589746175,NL
+3589742592,3589746175,NL
3589746176,3589746687,US
-3589746688,3589747071,NL
-3589747072,3589747103,ES
-3589747104,3589767167,NL
+3589746688,3589767167,NL
3589767168,3589816319,RU
-3589816320,3589825791,EU
3589825792,3589826047,DE
-3589826048,3589827071,EU
-3589827072,3589827327,SE
-3589827328,3589827647,EU
-3589827648,3589827679,DE
-3589827680,3589827711,EU
-3589827712,3589828095,DE
-3589828096,3589828111,FR
-3589828112,3589828127,EU
-3589828128,3589828159,DE
-3589828160,3589828223,GB
-3589828224,3589828607,FR
-3589828608,3589828639,SE
-3589828640,3589828671,NL
-3589828672,3589828735,SE
-3589828736,3589828991,NL
-3589828992,3589829119,ES
-3589829120,3589829375,GB
-3589829376,3589829503,FR
-3589829504,3589829631,DE
-3589829632,3589830655,GB
-3589830656,3589831167,DE
-3589831168,3589831679,US
+3589827712,3589827839,DE
+3589828352,3589828607,FR
+3589828736,3589828863,NL
+3589829632,3589830143,GB
3589831680,3589831935,FR
-3589831936,3589832191,EU
-3589832192,3589832703,FR
3589832704,3589849087,TR
3589849088,3589865471,GB
3589865472,3589881855,GR
3589881856,3589890047,NL
-3589890048,3589890191,BE
-3589890192,3589890303,GB
-3589890304,3589890367,BE
-3589890368,3589890431,GB
-3589890432,3589890559,BE
-3589890560,3589890687,GB
-3589890688,3589891327,BE
-3589891328,3589891615,GB
-3589891616,3589891631,BE
-3589891632,3589931007,GB
-3589931008,3589937647,SI
-3589937648,3589937663,AT
-3589937664,3589947391,SI
+3589890048,3589931007,GB
+3589931008,3589947391,SI
3589947392,3589963775,FI
-3589963776,3589971231,ES
-3589971232,3589971247,CA
-3589971248,3589980159,ES
+3589963776,3589980159,ES
3589980160,3589996543,CZ
-3589996544,3589997055,GB
-3589997056,3589997311,NL
-3589997312,3590012927,GB
+3589996544,3590012927,GB
3590012928,3590029311,BE
-3590029312,3590033759,FR
-3590033760,3590033775,AU
-3590033776,3590045695,FR
+3590029312,3590045695,FR
3590045696,3590062079,RU
3590062080,3590078463,DE
3590078464,3590094847,RU
3590094848,3590111231,DE
-3590111232,3590113023,LT
-3590113024,3590113279,LV
-3590113280,3590127615,LT
+3590111232,3590127615,LT
3590127616,3590143999,GB
-3590144000,3590155775,SI
-3590155776,3590155799,HR
-3590155800,3590155815,SI
-3590155816,3590155823,HR
-3590155824,3590155871,SI
-3590155872,3590156407,HR
-3590156408,3590156415,RS
-3590156416,3590156431,HR
-3590156432,3590156447,SI
-3590156448,3590156599,HR
-3590156600,3590156607,SI
-3590156608,3590156671,HR
-3590156672,3590156687,SI
-3590156688,3590156719,HR
-3590156720,3590156735,SI
-3590156736,3590156943,HR
-3590156944,3590156951,SI
-3590156952,3590156959,HR
-3590156960,3590157039,SI
-3590157040,3590157311,HR
-3590157312,3590157343,RS
-3590157344,3590157351,SI
-3590157352,3590157359,RS
-3590157360,3590157439,SI
-3590157440,3590157471,RS
-3590157472,3590157487,SI
-3590157488,3590157567,RS
-3590157568,3590157631,SI
-3590157632,3590157727,RS
-3590157728,3590157743,SI
-3590157744,3590157751,RS
-3590157752,3590157759,SI
-3590157760,3590157783,RS
-3590157784,3590157791,SI
-3590157792,3590157839,RS
-3590157840,3590157855,SI
-3590157856,3590157887,HR
-3590157888,3590157951,RS
-3590157952,3590158079,SI
-3590158080,3590158335,BA
-3590158336,3590158343,RS
-3590158344,3590158359,SI
-3590158360,3590158367,RS
-3590158368,3590158407,SI
-3590158408,3590158415,RS
-3590158416,3590158431,ME
-3590158432,3590158503,RS
-3590158504,3590158519,SI
-3590158520,3590159359,RS
-3590159360,3590160383,SI
+3590144000,3590156287,SI
+3590156288,3590157311,HR
+3590157312,3590158335,RS
+3590158336,3590160383,SI
3590160384,3590176767,GB
-3590176768,3590178615,HU
-3590178616,3590178623,MK
-3590178624,3590193151,HU
-3590193152,3590196575,IT
-3590196576,3590196583,DE
-3590196584,3590201343,IT
+3590176768,3590193151,HU
+3590193152,3590201343,IT
3590201344,3590209535,DE
3590209536,3590225919,ES
3590225920,3590234111,TR
3590234112,3590242303,GB
3590242304,3590244351,US
3590244352,3590244607,DE
-3590244608,3590244863,IT
-3590244864,3590245119,US
-3590245120,3590245135,BE
-3590245136,3590245143,GB
-3590245144,3590245183,BE
-3590245184,3590245311,FR
+3590244608,3590245311,FR
3590245312,3590245439,US
-3590245440,3590245503,FR
-3590245504,3590245567,GB
-3590245568,3590246175,FR
-3590246176,3590246207,AU
-3590246208,3590246271,FR
-3590246272,3590246287,DE
-3590246288,3590246399,FR
-3590246400,3590246911,US
-3590246912,3590247039,DE
-3590247040,3590247055,IT
-3590247056,3590247063,DE
-3590247064,3590247071,FR
-3590247072,3590247103,IT
-3590247104,3590247167,FR
+3590245440,3590247167,FR
3590247168,3590247231,US
-3590247232,3590247295,IT
+3590247232,3590247295,FR
3590247296,3590247423,US
-3590247424,3590247487,IT
+3590247424,3590247487,FR
3590247488,3590247551,US
-3590247552,3590247679,IT
-3590247680,3590247687,GB
-3590247688,3590247711,FR
-3590247712,3590247743,FR
-3590247744,3590248447,FR
-3590248448,3590248959,US
-3590248960,3590249471,ES
-3590249472,3590249983,IE
-3590249984,3590250239,FR
-3590250240,3590250495,GR
+3590247552,3590247711,FR
+3590247712,3590247743,IE
+3590247744,3590250495,FR
3590250496,3590250751,IE
-3590250752,3590251263,FR
-3590251264,3590251519,DE
-3590251520,3590251583,FR
-3590251584,3590251647,US
+3590250752,3590251647,FR
3590251648,3590251775,NL
-3590251776,3590251967,FR
-3590251968,3590252287,ES
-3590252288,3590252543,FR
+3590251776,3590252543,FR
3590252544,3590253055,LB
-3590253056,3590253311,DE
+3590253056,3590253311,FR
3590253312,3590253567,GB
-3590253568,3590254079,FR
-3590254080,3590254111,DE
-3590254112,3590254127,FR
-3590254128,3590254135,GB
-3590254136,3590254143,FR
-3590254144,3590254271,US
-3590254272,3590254279,GB
-3590254280,3590254287,BE
-3590254288,3590254847,FR
+3590253568,3590254847,FR
3590254848,3590255103,GB
-3590255104,3590255359,ES
-3590255360,3590255871,FR
-3590255872,3590256127,US
+3590255104,3590255871,FR
+3590255872,3590255935,US
+3590255936,3590256127,FR
3590256128,3590256383,ES
-3590256384,3590256639,FR
-3590256640,3590256703,US
-3590256704,3590256719,BE
-3590256720,3590256735,PL
+3590256384,3590256735,FR
3590256736,3590256767,BE
3590256768,3590257151,US
-3590257152,3590258175,DE
-3590258176,3590258387,FR
-3590258388,3590258391,DE
-3590258392,3590258399,GB
-3590258400,3590258431,FR
-3590258432,3590258447,GB
-3590258448,3590258463,FR
-3590258464,3590258495,US
-3590258496,3590258559,FR
+3590257152,3590258559,FR
3590258560,3590258687,US
3590258688,3590291455,IT
3590291456,3590299647,EG
3590299648,3590307839,FI
-3590307840,3590307903,FR
-3590307904,3590307935,UA
-3590307936,3590307951,GB
-3590307952,3590307967,NG
-3590307968,3590307975,GB
-3590307976,3590307979,VG
-3590307980,3590307987,GB
-3590307988,3590307991,CD
-3590307992,3590307995,FR
-3590307996,3590308031,GB
-3590308032,3590308047,UG
-3590308048,3590308055,NG
-3590308056,3590308063,GB
-3590308064,3590308071,SO
-3590308072,3590308079,GB
-3590308080,3590308087,IQ
-3590308088,3590308095,GB
-3590308096,3590308103,IQ
-3590308104,3590308135,GB
-3590308136,3590308143,IQ
-3590308144,3590308183,GB
-3590308184,3590308191,IQ
-3590308192,3590308199,GB
-3590308200,3590308238,IQ
-3590308239,3590308255,GB
-3590308256,3590308287,IQ
-3590308288,3590308303,GB
-3590308304,3590308311,SO
-3590308312,3590308319,IQ
-3590308320,3590308327,GB
-3590308328,3590308335,IQ
-3590308336,3590308359,GB
-3590308360,3590308367,IQ
-3590308368,3590308375,GB
-3590308376,3590308391,IQ
-3590308392,3590308399,GB
-3590308400,3590308407,IQ
-3590308408,3590308415,GB
-3590308416,3590308431,IQ
-3590308432,3590308439,GB
-3590308440,3590308447,IQ
-3590308448,3590308519,GB
-3590308520,3590308527,IQ
-3590308528,3590308535,GB
-3590308536,3590308543,IQ
-3590308544,3590308551,GB
-3590308552,3590308559,IQ
-3590308560,3590308567,GB
-3590308568,3590308583,IQ
-3590308584,3590308607,GB
-3590308608,3590308863,US
-3590308864,3590309119,ZM
-3590309120,3590309123,GB
-3590309124,3590309127,IQ
-3590309128,3590309175,GB
-3590309176,3590309179,KE
-3590309180,3590309199,GB
-3590309200,3590309203,KE
-3590309204,3590309251,GB
-3590309252,3590309255,SO
-3590309256,3590309503,GB
-3590309504,3590309511,KE
-3590309512,3590309519,AO
-3590309520,3590309527,VG
-3590309528,3590309535,CM
-3590309536,3590309543,SO
-3590309544,3590309551,AM
-3590309552,3590309575,GB
-3590309576,3590309583,US
-3590309584,3590309615,GB
-3590309616,3590309623,UG
-3590309624,3590309631,GB
-3590309632,3590309647,IQ
-3590309648,3590309671,GB
-3590309672,3590309687,IQ
-3590309688,3590309711,GB
-3590309712,3590309719,IQ
-3590309720,3590309727,GB
-3590309728,3590309759,IQ
-3590309760,3590309775,GB
-3590309776,3590309791,IQ
-3590309792,3590309799,GB
-3590309800,3590309807,IQ
-3590309808,3590309815,GB
-3590309816,3590309839,IQ
-3590309840,3590309863,GB
-3590309864,3590309871,IQ
-3590309872,3590309879,GB
-3590309880,3590309887,IQ
-3590309888,3590310143,BF
-3590310144,3590310167,IQ
-3590310168,3590310175,GB
-3590310176,3590310183,LR
-3590310184,3590310191,GB
-3590310192,3590310215,IQ
-3590310216,3590310223,GB
-3590310224,3590310247,IQ
-3590310248,3590310271,GB
-3590310272,3590310279,IQ
-3590310280,3590310287,GB
-3590310288,3590310303,IQ
-3590310304,3590310311,GB
-3590310312,3590310319,IQ
-3590310320,3590310359,GB
-3590310360,3590310367,IQ
-3590310368,3590310911,GB
-3590310912,3590310919,IQ
-3590310920,3590310951,GB
-3590310952,3590310959,IQ
-3590310960,3590310967,GB
-3590310968,3590310991,IQ
-3590310992,3590311031,GB
-3590311032,3590311039,IQ
-3590311040,3590311055,GB
-3590311056,3590311063,IQ
-3590311064,3590311079,GB
-3590311080,3590311087,IQ
-3590311088,3590311103,GB
-3590311104,3590311111,IQ
-3590311112,3590311127,GB
-3590311128,3590311135,IQ
-3590311136,3590311151,GB
-3590311152,3590311167,IQ
-3590311168,3590311175,GB
-3590311176,3590311183,CD
-3590311184,3590311207,GB
-3590311208,3590311215,CD
-3590311216,3590311223,GB
-3590311224,3590311231,CD
-3590311232,3590311255,GB
-3590311256,3590311263,ZW
-3590311264,3590311271,GB
-3590311272,3590311279,SD
-3590311280,3590311295,GB
-3590311296,3590311303,LR
-3590311304,3590311311,GB
-3590311312,3590311319,CD
-3590311320,3590311327,CI
-3590311328,3590311335,CD
-3590311336,3590311343,SD
-3590311344,3590311351,GB
-3590311352,3590311359,CD
-3590311360,3590311367,LY
-3590311368,3590311383,CD
-3590311384,3590311391,NG
-3590311392,3590311679,GB
-3590311680,3590311935,YT
-3590311936,3590311999,GB
-3590312000,3590312007,CM
-3590312008,3590312015,GB
-3590312016,3590312023,IL
-3590312024,3590312031,VG
-3590312032,3590312039,IL
-3590312040,3590312047,LR
-3590312048,3590312055,MU
-3590312056,3590312063,GB
-3590312064,3590312071,LR
-3590312072,3590312079,IL
-3590312080,3590312095,GB
-3590312096,3590312103,ZA
-3590312104,3590312111,GB
-3590312112,3590312119,SS
-3590312120,3590312135,GB
-3590312136,3590312143,SS
-3590312144,3590312151,GB
-3590312152,3590312159,ER
-3590312160,3590312175,GB
-3590312176,3590312183,IL
-3590312184,3590312447,GB
-3590312448,3590312703,MW
-3590312704,3590312799,GB
-3590312800,3590312807,KE
-3590312808,3590312895,GB
-3590312896,3590312903,ZA
-3590312904,3590312911,AO
-3590312912,3590312919,NG
-3590312920,3590312927,GB
-3590312928,3590312943,UG
-3590312944,3590312951,GB
-3590312952,3590312959,NG
-3590312960,3590314495,GB
-3590314496,3590315007,US
-3590315008,3590316031,GB
-3590316032,3590316039,TZ
-3590316040,3590316047,GB
-3590316048,3590316055,GH
-3590316056,3590316063,IQ
-3590316064,3590316071,SO
-3590316072,3590316079,GB
-3590316080,3590316087,LB
-3590316088,3590316127,GB
-3590316128,3590316151,NG
-3590316152,3590316287,US
-3590316288,3590316351,GB
-3590316352,3590316415,US
-3590316416,3590316479,GB
-3590316480,3590316543,SO
-3590316544,3590316559,GB
-3590316560,3590316567,US
-3590316568,3590316575,GA
-3590316576,3590316591,GB
-3590316592,3590316599,IQ
-3590316600,3590316603,SO
-3590316604,3590316623,GB
-3590316624,3590316631,KE
-3590316632,3590316663,GB
-3590316664,3590316671,LY
-3590316672,3590316731,GB
-3590316732,3590316735,VG
-3590316736,3590317055,GB
-3590317056,3590317311,NG
-3590317312,3590317343,AO
-3590317344,3590317439,GB
-3590317440,3590317447,AM
-3590317448,3590317455,LB
-3590317456,3590317463,IQ
-3590317464,3590317471,GB
-3590317472,3590317479,MW
-3590317480,3590317495,GB
-3590317496,3590317503,LB
-3590317504,3590317527,GB
-3590317528,3590317543,IQ
-3590317544,3590317951,GB
-3590317952,3590318047,UA
-3590318048,3590319167,GB
-3590319168,3590319231,AE
-3590319232,3590319335,GB
-3590319336,3590319359,AE
-3590319360,3590319423,GB
-3590319424,3590319455,AE
-3590319456,3590319967,GB
-3590319968,3590319999,AE
-3590320000,3590320199,GB
-3590320200,3590320207,IQ
-3590320208,3590320231,GB
-3590320232,3590320239,IQ
-3590320240,3590320303,GB
-3590320304,3590320319,IQ
-3590320320,3590320335,GB
-3590320336,3590320343,UG
-3590320344,3590320351,GB
-3590320352,3590320359,IQ
-3590320360,3590320375,GB
-3590320376,3590320383,IQ
-3590320384,3590321679,GB
-3590321680,3590321687,CM
-3590321688,3590321695,GB
-3590321696,3590321711,ZW
-3590321712,3590321943,GB
-3590321944,3590321959,IQ
-3590321960,3590321967,GB
-3590321968,3590321983,TR
-3590321984,3590322007,GB
-3590322008,3590322015,IQ
-3590322016,3590322063,GB
-3590322064,3590322071,IQ
-3590322072,3590322111,GB
-3590322112,3590322119,BJ
-3590322120,3590322151,GB
-3590322152,3590322159,LY
-3590322160,3590322175,GB
-3590322176,3590322431,A2
-3590322432,3590322559,LB
-3590322560,3590322607,GB
-3590322608,3590322687,LB
-3590322688,3590323199,IQ
-3590323200,3590323711,MW
-3590323712,3590323903,GB
-3590323904,3590323911,CD
-3590323912,3590323983,GB
-3590323984,3590323991,MU
-3590323992,3590323999,VG
-3590324000,3590324007,LR
-3590324008,3590324015,GB
-3590324016,3590324023,NG
-3590324024,3590324031,ZW
-3590324032,3590324151,GB
-3590324152,3590324159,US
-3590324160,3590324167,UG
-3590324168,3590324199,GB
-3590324200,3590324207,TZ
-3590324208,3590324215,CD
-3590324216,3590324223,NG
+3590307840,3590312935,GB
+3590312936,3590312943,UG
+3590312944,3590317951,GB
+3590317952,3590318015,UA
+3590318016,3590324223,GB
3590324224,3623890943,US
3623890944,3623891199,ZA
3623891200,3623891455,US
@@ -171023,14 +87975,11 @@
3624255488,3624257535,ZA
3624257536,3624271871,US
3624271872,3624272383,SY
-3624272384,3624272415,US
-3624272416,3624272639,CA
+3624272384,3624272639,CA
3624272640,3624272895,DZ
3624272896,3624275967,CA
3624275968,3624276223,US
-3624276224,3624279071,CA
-3624279072,3624279087,BD
-3624279088,3624281087,CA
+3624276224,3624281087,CA
3624281088,3624281343,HT
3624281344,3624283135,CA
3624283136,3624284159,US
@@ -171057,502 +88006,79 @@
3624302848,3624303103,MY
3624303104,3624303359,CA
3624303360,3624303615,US
-3624303616,3624303743,CA
-3624303744,3624303759,ZA
-3624303760,3624304639,CA
+3624303616,3624304639,CA
3624304640,3624321023,US
3624321024,3624325119,CA
-3624325120,3624330511,US
-3624330512,3624330519,CA
-3624330520,3624357887,US
+3624325120,3624357887,US
3624357888,3624358143,KN
3624358144,3624359679,US
3624359680,3624360703,CW
-3624360704,3624374431,US
-3624374432,3624374439,GB
-3624374440,3624376279,US
-3624376280,3624376295,GB
+3624360704,3624374447,US
+3624374448,3624374455,ES
+3624374456,3624375871,US
+3624375872,3624375879,NL
+3624375880,3624376247,US
+3624376248,3624376263,ES
+3624376264,3624376287,US
+3624376288,3624376295,GB
3624376296,3624376335,US
3624376336,3624376343,AU
3624376344,3624376351,US
3624376352,3624376359,PT
-3624376360,3624376567,US
-3624376568,3624376575,NL
-3624376576,3624376655,US
-3624376656,3624376679,GB
-3624376680,3624377879,US
+3624376360,3624377863,US
+3624377864,3624377871,GB
+3624377872,3624377879,US
3624377880,3624377887,GB
3624377888,3624377903,US
3624377904,3624377911,GB
-3624377912,3624377919,US
-3624377920,3624377935,ES
-3624377936,3624380831,US
-3624380832,3624380839,OM
-3624380840,3624380935,US
-3624380936,3624380943,SA
-3624380944,3624381567,US
-3624381568,3624381583,MY
-3624381584,3624381807,US
-3624381808,3624381823,IN
-3624381824,3624381903,US
-3624381904,3624381919,CA
-3624381920,3624382031,US
-3624382032,3624382047,RO
-3624382048,3624382111,US
-3624382112,3624382127,AU
-3624382128,3624382671,US
-3624382672,3624382687,AU
-3624382688,3624383071,US
-3624383072,3624383087,GB
-3624383088,3624383287,US
-3624383288,3624383295,AU
-3624383296,3624386559,US
+3624377912,3624386559,US
3624386560,3624394751,CA
3624394752,3624435711,US
-3624435712,3624443903,CA
-3624443904,3624443919,US
-3624443920,3624444303,CA
-3624444304,3624444319,US
-3624444320,3624444343,CA
-3624444344,3624444351,US
-3624444352,3624444359,CA
-3624444360,3624444367,US
-3624444368,3624452095,CA
+3624435712,3624443391,CA
+3624443392,3624443903,US
+3624443904,3624452095,CA
3624452096,3624480767,US
3624480768,3624484863,CA
3624484864,3624534015,US
3624534016,3624534271,PA
3624534272,3624536063,CA
-3624536064,3624546559,US
-3624546560,3624546687,A2
-3624546688,3624546695,CA
-3624546696,3624546815,A2
-3624546816,3624547327,US
-3624547328,3624547647,A2
-3624547648,3624547711,US
-3624547712,3624547743,A2
-3624547744,3624547839,US
-3624547840,3624547847,A2
-3624547848,3624547863,US
-3624547864,3624547871,A2
-3624547872,3624547895,US
-3624547896,3624547919,A2
-3624547920,3624547967,US
-3624547968,3624548007,A2
-3624548008,3624548031,US
-3624548032,3624548039,A2
-3624548040,3624548063,US
-3624548064,3624548087,A2
-3624548088,3624548095,US
-3624548096,3624548351,A2
-3624548352,3624548359,US
-3624548360,3624548679,A2
-3624548680,3624548687,US
-3624548688,3624548703,A2
-3624548704,3624548711,US
-3624548712,3624548735,A2
-3624548736,3624548935,US
-3624548936,3624548959,A2
-3624548960,3624548975,US
-3624548976,3624549023,A2
-3624549024,3624549047,US
-3624549048,3624549063,A2
-3624549064,3624549079,US
-3624549080,3624549087,A2
-3624549088,3624549103,US
-3624549104,3624549111,A2
-3624549112,3624549383,US
-3624549384,3624549471,A2
-3624549472,3624549479,US
-3624549480,3624549583,A2
-3624549584,3624549615,US
-3624549616,3624550143,A2
-3624550144,3624587263,US
+3624536064,3624587263,US
3624587264,3624591359,JM
-3624591360,3624714239,US
-3624714240,3624714703,SG
-3624714704,3624714711,MV
-3624714712,3624716223,SG
-3624716224,3624716255,AU
-3624716256,3624717311,SG
+3624594176,3624594431,US
+3624595456,3624706047,US
+3624710144,3624714239,US
+3624714240,3624717311,SG
3624717312,3624718335,US
3624718336,3624720383,SG
3624720384,3624720895,US
3624720896,3624721919,SG
3624721920,3624730623,US
-3624730624,3624781823,CA
-3624781824,3624782079,SS
-3624782080,3624796159,CA
-3624796160,3624820735,US
-3624820736,3624820799,CY
-3624820800,3624821695,US
-3624821696,3624821703,GB
-3624821704,3624828927,US
+3624730624,3624796159,CA
+3624796160,3624812543,US
+3624813056,3624814079,US
+3624814336,3624815103,US
+3624815616,3624828927,US
3624828928,3624833023,CA
3624833024,3624845311,US
3624845312,3624849407,AU
-3624849408,3624895055,US
-3624895056,3624895071,TZ
-3624895072,3624895103,US
-3624895104,3624895119,DE
-3624895120,3624895135,US
-3624895136,3624895151,IN
-3624895152,3624895167,US
-3624895168,3624895183,VE
-3624895184,3624895935,US
-3624895936,3624895967,IN
-3624895968,3624895999,US
-3624896000,3624896255,CA
-3624896256,3624896383,US
-3624896384,3624896415,IN
-3624896416,3624897279,US
-3624897280,3624897407,CA
-3624897408,3624897535,US
-3624897536,3624897663,CA
-3624897664,3624897791,US
-3624897792,3624898047,IN
-3624898048,3624898303,US
-3624898304,3624898559,CA
-3624898560,3624899583,US
-3624899584,3624899839,CR
-3624899840,3624900607,US
-3624900608,3624900639,AU
-3624900640,3624900735,US
-3624900736,3624900767,CA
-3624900768,3624900831,US
-3624900832,3624900863,DE
-3624900864,3624900903,US
-3624900904,3624900911,CA
-3624900912,3624900951,US
-3624900952,3624900959,FR
-3624900960,3624901279,US
-3624901280,3624901311,CA
-3624901312,3624902111,US
-3624902112,3624902143,IN
-3624902144,3624902271,US
-3624902272,3624902399,MY
-3624902400,3624902655,US
-3624902656,3624902783,IN
-3624902784,3624902911,CA
-3624902912,3624902943,US
-3624902944,3624902975,CA
-3624902976,3624903071,US
-3624903072,3624903103,HK
-3624903104,3624903455,US
-3624903456,3624903487,CA
-3624903488,3624903519,US
-3624903520,3624903583,CA
-3624903584,3624903679,US
-3624903680,3624903807,CA
-3624903808,3624903935,US
-3624903936,3624904447,CA
-3624904448,3624904703,US
-3624904704,3624904767,IN
-3624904768,3624904831,US
-3624904832,3624904895,CA
-3624904896,3624905087,US
-3624905088,3624905215,CA
-3624905216,3624905471,US
-3624905472,3624905727,CA
-3624905728,3624906239,US
-3624906240,3624906495,CA
-3624906496,3624906751,US
-3624906752,3624906879,CA
-3624906880,3624907007,TW
-3624907008,3624907071,US
-3624907072,3624907103,CA
-3624907104,3624907519,US
-3624907520,3624907551,IN
-3624907552,3624907583,US
-3624907584,3624907615,CA
-3624907616,3624907679,US
-3624907680,3624907711,IN
-3624907712,3624907745,US
-3624907746,3624907775,IN
-3624907776,3624907903,US
-3624907904,3624908031,SG
-3624908032,3624908159,CA
-3624908160,3624908383,US
-3624908384,3624908415,IN
-3624908416,3624908447,CA
-3624908448,3624908479,US
-3624908480,3624908511,CA
-3624908512,3624908559,US
-3624908560,3624908575,MY
-3624908576,3624908607,US
-3624908608,3624908622,CA
-3624908623,3624908639,US
-3624908640,3624908687,CA
-3624908688,3624909471,US
-3624909472,3624909503,AU
-3624909504,3624909567,US
-3624909568,3624909822,MY
-3624909823,3624909823,US
-3624909824,3624909951,CA
-3624909952,3624910079,US
-3624910080,3624910111,CA
-3624910112,3624910143,US
-3624910144,3624910175,CA
-3624910176,3624910271,US
-3624910272,3624910303,FR
-3624910304,3624910591,US
-3624910592,3624910623,CA
-3624910624,3624910687,US
-3624910688,3624910719,CA
-3624910720,3624910751,US
-3624910752,3624910783,TZ
-3624910784,3624910815,US
-3624910816,3624910847,AU
-3624910848,3624910911,US
-3624910912,3624910943,IN
-3624910944,3624910975,US
-3624910976,3624911007,FR
-3624911008,3624911039,CA
-3624911040,3624911167,US
-3624911168,3624911199,MY
-3624911200,3624911231,US
-3624911232,3624911263,CA
-3624911264,3624911327,US
-3624911328,3624911359,CA
-3624911360,3624911391,US
-3624911392,3624911399,TR
-3624911400,3624911607,US
-3624911608,3624911615,UA
-3624911616,3624911647,US
-3624911648,3624911651,RU
-3624911652,3624911999,US
-3624912000,3624912127,CA
-3624912128,3624912679,US
-3624912680,3624912687,IN
-3624912688,3624912727,US
-3624912728,3624912735,TT
-3624912736,3624912759,US
-3624912760,3624912767,MY
-3624912768,3624912807,US
-3624912808,3624912815,MY
-3624912816,3624912863,US
-3624912864,3624912871,MX
-3624912872,3624913023,US
-3624913024,3624913087,IN
-3624913088,3624913247,US
-3624913248,3624913279,CA
-3624913280,3624913311,US
-3624913312,3624913343,CA
-3624913344,3624913375,PK
-3624913376,3624913407,US
-3624913408,3624913535,CA
-3624913536,3624913663,IN
-3624913664,3624914047,US
-3624914048,3624914079,IN
-3624914080,3624914143,US
-3624914144,3624914175,GB
-3624914176,3624914271,US
-3624914272,3624914303,CA
-3624914304,3624914335,US
-3624914336,3624914367,CA
-3624914368,3624914399,IN
-3624914400,3624914943,US
-3624914944,3624915071,CA
-3624915072,3624915455,US
-3624915456,3624915487,CA
-3624915488,3624915903,US
-3624915904,3624915935,HK
-3624915936,3624916223,US
-3624916224,3624916479,CA
-3624916480,3624917919,US
-3624917920,3624917951,CA
-3624917952,3624918527,US
-3624918528,3624918815,CA
-3624918816,3624918847,US
-3624918848,3624918875,IN
-3624918876,3624919423,US
-3624919424,3624919551,IN
-3624919552,3624919999,US
-3624920000,3624920031,CA
-3624920032,3624920063,TZ
-3624920064,3624920191,CA
-3624920192,3624920319,IN
-3624920320,3624920703,CA
-3624920704,3624920831,IN
-3624920832,3624920959,US
-3624920960,3624921087,IN
-3624921088,3624921215,PK
-3624921216,3624921855,US
-3624921856,3624922111,CA
-3624922112,3624922143,US
-3624922144,3624922175,FR
-3624922176,3624922207,MY
-3624922208,3624922239,FR
-3624922240,3624922335,US
-3624922336,3624922367,FR
-3624922368,3624922495,IN
-3624922496,3624922623,US
-3624922624,3624922687,CA
-3624922688,3624922783,US
-3624922784,3624922815,CN
-3624922816,3624922847,FR
-3624922848,3624922879,US
-3624922880,3624923135,IN
-3624923136,3624923263,CA
-3624923264,3624923391,US
-3624923392,3624923519,CA
-3624923520,3624923647,US
-3624923648,3624923775,CA
-3624923776,3624923903,US
-3624923904,3624923935,CA
-3624923936,3624923967,US
-3624923968,3624923999,IN
-3624924000,3624924095,US
-3624924096,3624924127,CA
-3624924128,3624924287,US
-3624924288,3624924703,CA
-3624924704,3624924895,US
-3624924896,3624924927,CA
-3624924928,3624925054,US
-3624925055,3624925695,CA
-3624925696,3624926335,US
-3624926336,3624926463,TZ
-3624926464,3624926527,CA
-3624926528,3624926655,US
-3624926656,3624926975,CA
-3624926976,3624927167,US
-3624927168,3624927199,TH
-3624927200,3624984575,US
-3624984576,3624986367,CA
-3624986368,3624986399,US
-3624986400,3624991223,CA
-3624991224,3624991231,US
-3624991232,3624992767,CA
-3624992768,3625042327,US
-3625042328,3625042335,IT
-3625042336,3625058303,US
+3624849408,3624984575,US
+3624984576,3624992767,CA
+3624992768,3625058303,US
3625058304,3625091071,CA
-3625091072,3625116671,US
-3625116672,3625116767,CA
-3625116768,3625116927,US
+3625091072,3625116927,US
3625116928,3625117183,SE
-3625117184,3625118233,US
-3625118234,3625118241,CA
-3625118242,3625118271,US
-3625118272,3625118287,CA
-3625118288,3625118975,US
-3625118976,3625119056,PL
-3625119057,3625140223,US
+3625117184,3625140223,US
3625140224,3625148415,CA
3625148416,3625168895,US
3625168896,3625172991,CA
-3625172992,3625176767,US
-3625176768,3625176831,NZ
-3625176832,3625243215,US
-3625243216,3625243223,CA
-3625243224,3625245439,US
-3625245440,3625245767,MX
-3625245768,3625245903,US
-3625245904,3625245911,BZ
-3625245912,3625245951,US
-3625245952,3625246255,MX
-3625246256,3625246263,US
-3625246264,3625246271,MX
-3625246272,3625246279,US
-3625246280,3625246287,MX
-3625246288,3625246295,US
-3625246296,3625246375,MX
-3625246376,3625246399,US
-3625246400,3625246535,MX
-3625246536,3625246543,US
-3625246544,3625246719,MX
-3625246720,3625287679,US
-3625287680,3625288887,CA
-3625288888,3625288895,US
-3625288896,3625289959,CA
-3625289960,3625289967,US
-3625289968,3625292575,CA
-3625292576,3625292583,US
-3625292584,3625292671,CA
-3625292672,3625292679,US
-3625292680,3625292927,CA
-3625292928,3625292935,US
-3625292936,3625295871,CA
-3625299968,3625314559,US
-3625314560,3625314815,CA
-3625314816,3625320447,US
-3625320448,3625320467,CA
-3625320468,3625325055,US
-3625325056,3625325087,RU
-3625325088,3625326632,US
-3625326633,3625326642,GB
-3625326643,3625327748,US
-3625327749,3625327812,ID
-3625327813,3625327814,US
-3625327815,3625327824,GB
-3625327825,3625333383,US
-3625333384,3625333391,GB
-3625333392,3625333455,US
-3625333456,3625333463,GB
-3625333464,3625346047,US
+3625172992,3625259263,US
+3625260032,3625287679,US
+3625287680,3625295871,CA
+3625295872,3625346047,US
3625346048,3625346303,AR
-3625346304,3625357631,US
-3625357632,3625357639,CA
-3625357640,3625358055,US
-3625358056,3625358063,CH
-3625358064,3625364351,US
-3625364352,3625364479,DE
-3625364480,3625364607,NL
-3625364608,3625364733,DE
-3625364734,3625364895,US
-3625364896,3625364911,NO
-3625364912,3625364951,US
-3625364952,3625364959,NL
-3625364960,3625364967,ZA
-3625364968,3625373711,US
-3625373712,3625373719,GB
-3625373720,3625373735,US
-3625373736,3625373743,CA
-3625373744,3625373751,GB
-3625373752,3625373823,US
-3625373824,3625373831,CA
-3625373832,3625373887,US
-3625373888,3625373895,GB
-3625373896,3625373953,US
-3625373954,3625373983,CA
-3625373984,3625374031,US
-3625374032,3625374044,GB
-3625374045,3625374047,US
-3625374048,3625374063,CA
-3625374064,3625374143,US
-3625374144,3625374159,CA
-3625374160,3625374879,US
-3625374880,3625374911,MX
-3625374912,3625375039,US
-3625375040,3625375071,CA
-3625375072,3625375135,US
-3625375136,3625375167,RU
-3625375168,3625375247,US
-3625375248,3625375255,CA
-3625375256,3625375359,US
-3625375360,3625375367,SE
-3625375368,3625375399,US
-3625375400,3625375407,MT
-3625375408,3625375519,US
-3625375520,3625375527,JM
-3625375528,3625375599,US
-3625375600,3625375607,JM
-3625375608,3625375935,US
-3625375936,3625375982,SG
-3625375983,3625376031,US
-3625376032,3625376063,AR
-3625376064,3625376159,US
-3625376160,3625376191,LB
-3625376192,3625376223,TR
-3625376224,3625377023,US
-3625377024,3625377535,TH
-3625377536,3625377583,US
-3625377584,3625377599,CA
-3625377600,3625381911,US
-3625381912,3625381919,CA
-3625381920,3625382079,US
-3625382080,3625382111,CA
-3625382112,3625418751,US
+3625346304,3625377279,US
+3625377280,3625377535,TH
+3625377536,3625418751,US
3625418752,3625420031,CA
3625420032,3625420543,US
3625420544,3625422591,CA
@@ -171560,454 +88086,30 @@
3625423104,3625426943,CA
3625426944,3625508863,US
3625508864,3625512959,CA
-3625512960,3625514303,US
-3625514304,3625514367,GB
-3625514368,3625528541,US
-3625528542,3625528551,AU
-3625528552,3625574399,US
-3625574400,3625577983,A2
-3625577984,3625581631,US
-3625581632,3625581647,NL
-3625581648,3625631743,US
+3625512960,3625631743,US
3625631744,3625639935,CA
3625639936,3625959423,US
3625959424,3625961471,GB
3625961472,3625961983,US
3625961984,3625962239,GB
-3625962240,3626025919,US
-3626025920,3626025951,LT
-3626025952,3626060735,US
-3626060736,3626060743,BM
-3626060744,3626061903,US
-3626061904,3626061911,BM
-3626061912,3626069279,US
-3626069280,3626069311,NL
-3626069312,3626072959,US
-3626072960,3626072991,AE
-3626072992,3626073439,US
-3626073440,3626073455,AE
-3626073456,3626091519,US
+3625962240,3626091519,US
3626091520,3626092031,AR
-3626092032,3626108895,US
-3626108896,3626108927,AU
-3626108928,3626130415,US
-3626130416,3626130431,CA
-3626130432,3626132127,US
-3626132128,3626132159,CA
-3626132160,3626140479,US
-3626140480,3626140671,AU
-3626140672,3626142623,US
-3626142624,3626142639,AU
-3626142640,3626184191,US
-3626184192,3626184223,LT
-3626184224,3626189359,US
-3626189360,3626189367,NO
-3626189368,3626189375,US
-3626189376,3626189383,IL
-3626189384,3626189431,US
-3626189432,3626189439,IL
-3626189440,3626191119,US
-3626191120,3626191135,GB
-3626191136,3626192639,US
-3626192640,3626192703,CY
-3626192704,3626192767,US
-3626192768,3626192799,CH
-3626192800,3626213439,US
-3626213440,3626213471,GB
-3626213472,3626222653,US
+3626092032,3626222653,US
3626222654,3626222654,CA
-3626222655,3626225407,US
-3626225408,3626225663,HK
-3626225664,3626227167,US
-3626227168,3626227199,AR
-3626227200,3626228463,US
-3626228464,3626228479,AE
-3626228480,3626230367,US
-3626230368,3626230399,GB
-3626230400,3626230495,US
-3626230496,3626230527,GB
-3626230528,3626230799,US
-3626230800,3626230815,GB
-3626230816,3626230847,DE
-3626230848,3626230879,US
-3626230880,3626230911,GB
-3626230912,3626230991,US
-3626230992,3626230999,GB
-3626231000,3626231007,US
-3626231008,3626231039,GB
-3626231040,3626231767,US
-3626231768,3626231783,GB
-3626231784,3626231791,US
-3626231792,3626231967,GB
-3626231968,3626231991,US
-3626231992,3626231999,GB
-3626232000,3626232415,US
-3626232416,3626232447,GB
-3626232448,3626232607,US
-3626232608,3626232623,GB
-3626232624,3626270719,US
+3626222655,3626270719,US
3626270720,3626287103,CA
3626287104,3626332159,US
3626332160,3626334207,CA
3626334208,3626334463,US
3626334464,3626336255,CA
-3626336256,3626381317,US
-3626381318,3626381321,AU
-3626381322,3626381373,US
-3626381374,3626381377,AU
-3626381378,3626381451,US
-3626381452,3626381456,GB
-3626381457,3626381460,CA
-3626381461,3626381492,US
-3626381493,3626381496,CO
-3626381497,3626381510,US
-3626381511,3626381512,BE
-3626381513,3626381520,US
-3626381521,3626381524,IN
-3626381525,3626381541,US
-3626381542,3626381545,CL
-3626381546,3626381555,US
-3626381556,3626381559,RU
-3626381560,3626381573,US
-3626381574,3626381577,ID
-3626381578,3626381601,US
-3626381602,3626381605,IL
-3626381606,3626381609,US
-3626381610,3626381613,DE
-3626381614,3626381621,US
-3626381622,3626381625,FR
-3626381626,3626381641,US
-3626381642,3626381645,VI
-3626381646,3626381657,US
-3626381658,3626381661,BE
-3626381662,3626381675,US
-3626381676,3626381679,GB
-3626381680,3626381748,US
-3626381749,3626381750,CA
-3626381751,3626381752,US
-3626381753,3626381755,GB
-3626381756,3626381759,US
-3626381760,3626381763,SA
-3626381764,3626381874,US
-3626381875,3626381878,IN
-3626381879,3626381894,US
-3626381895,3626381898,CA
-3626381899,3626381920,US
-3626381921,3626381924,NL
-3626381925,3626381944,US
-3626381945,3626381948,CA
-3626381949,3626381976,US
-3626381977,3626381980,VN
-3626381981,3626382025,US
-3626382026,3626382029,CO
-3626382030,3626382033,RO
-3626382034,3626382074,US
-3626382075,3626382078,IN
-3626382079,3626382117,US
-3626382118,3626382121,SG
-3626382122,3626382133,US
-3626382134,3626382137,CA
-3626382138,3626382145,US
-3626382146,3626382149,CA
-3626382150,3626382173,US
-3626382174,3626382177,NZ
-3626382178,3626382181,US
-3626382182,3626382185,ES
-3626382186,3626382207,US
-3626382208,3626382211,IN
-3626382212,3626382223,US
-3626382224,3626382227,CN
-3626382228,3626382239,US
-3626382240,3626382243,NL
-3626382244,3626382263,US
-3626382264,3626382267,CA
-3626382268,3626382271,IT
-3626382272,3626382295,US
-3626382296,3626382299,AR
-3626382300,3626382315,US
-3626382316,3626382319,IN
-3626382320,3626382324,US
-3626382325,3626382328,CA
-3626382329,3626382353,US
-3626382354,3626382357,GB
-3626382358,3626382361,RU
-3626382362,3626382378,US
-3626382379,3626382383,IN
-3626382384,3626382391,US
-3626382392,3626382395,IT
-3626382396,3626382450,US
-3626382451,3626382454,GR
-3626382455,3626382458,FR
-3626382459,3626382478,US
-3626382479,3626382482,JP
-3626382483,3626382486,US
-3626382487,3626382490,IL
-3626382491,3626382494,MY
-3626382495,3626382570,US
-3626382571,3626382574,IT
-3626382575,3626382670,US
-3626382671,3626382674,AU
-3626382675,3626382755,US
-3626382756,3626382759,GB
-3626382760,3626382771,US
-3626382772,3626382775,IN
-3626382776,3626382791,US
-3626382792,3626382795,PT
-3626382796,3626382843,US
-3626382844,3626382845,IN
-3626382846,3626382862,US
-3626382863,3626382866,RU
-3626382867,3626382870,IT
-3626382871,3626382878,US
-3626382879,3626382882,GB
-3626382883,3626382892,US
-3626382893,3626382896,BR
-3626382897,3626382901,US
-3626382902,3626382905,SG
-3626382906,3626382909,CA
-3626382910,3626382913,IN
-3626382914,3626382925,US
-3626382926,3626382930,HN
-3626382931,3626382977,US
-3626382978,3626382981,IT
-3626382982,3626382985,US
-3626382986,3626382993,GB
-3626382994,3626383026,US
-3626383027,3626383030,SG
-3626383031,3626383086,US
-3626383087,3626383090,GR
-3626383091,3626383135,US
-3626383136,3626383139,CO
-3626383140,3626383204,US
-3626383205,3626383208,AE
-3626383209,3626383220,US
-3626383221,3626383225,TR
-3626383226,3626383270,US
-3626383271,3626383278,GB
-3626383279,3626383282,US
-3626383283,3626383286,DE
-3626383287,3626383294,US
-3626383295,3626383298,MX
-3626383299,3626383383,US
-3626383384,3626383391,CA
-3626383392,3626383399,US
-3626383400,3626383407,IN
-3626383408,3626383423,US
-3626383424,3626383431,GB
-3626383432,3626383439,AU
-3626383440,3626383447,GR
-3626383448,3626383455,IN
-3626383456,3626383503,US
-3626383504,3626383519,GB
-3626383520,3626383527,US
-3626383528,3626383535,GB
-3626383536,3626383583,US
-3626383584,3626383591,CA
-3626383592,3626383599,US
-3626383600,3626383607,IN
-3626383608,3626383647,US
-3626383648,3626383679,CH
-3626383680,3626383759,US
-3626383760,3626383775,GB
-3626383776,3626383871,US
-3626383872,3626383903,NL
-3626383904,3626384901,US
-3626384902,3626384905,MX
-3626384906,3626384921,US
-3626384922,3626384925,IN
-3626384926,3626384957,US
-3626384958,3626384961,GB
-3626384962,3626384977,US
-3626384978,3626384981,SG
-3626384982,3626384985,US
-3626384986,3626384989,CA
-3626384990,3626384993,NZ
-3626384994,3626384997,US
-3626384998,3626385001,IT
-3626385002,3626385029,US
-3626385030,3626385033,ID
-3626385034,3626385037,IN
-3626385038,3626385097,US
-3626385098,3626385101,IN
-3626385102,3626385113,US
-3626385114,3626385117,JP
-3626385118,3626385125,US
-3626385126,3626385129,ID
-3626385130,3626385133,US
-3626385134,3626385137,CA
-3626385138,3626385141,GB
-3626385142,3626385145,IN
-3626385146,3626385187,US
-3626385188,3626385191,CA
-3626385192,3626385207,US
-3626385208,3626385209,NZ
-3626385210,3626385217,US
-3626385218,3626385221,CA
-3626385222,3626385237,US
-3626385238,3626385241,BE
-3626385242,3626385357,US
-3626385358,3626385361,CA
-3626385362,3626385373,US
-3626385374,3626385377,SI
-3626385378,3626385381,US
-3626385382,3626385385,IN
-3626385386,3626385389,US
-3626385390,3626385393,GB
-3626385394,3626443839,US
-3626443840,3626443847,CA
-3626443848,3626508287,US
+3626336256,3626508287,US
3626508288,3626512383,CA
-3626512384,3626513427,US
-3626513428,3626513428,EU
-3626513429,3626524671,US
-3626524672,3626524927,CA
-3626524928,3626524943,US
-3626524944,3626524967,CA
-3626524968,3626524975,US
-3626524976,3626525783,CA
-3626525784,3626525799,US
-3626525800,3626525807,IN
-3626525808,3626526031,CA
-3626526032,3626526039,US
-3626526040,3626526239,CA
-3626526240,3626526247,US
-3626526248,3626526255,CA
-3626526256,3626526263,US
-3626526264,3626526279,CA
-3626526280,3626526287,US
-3626526288,3626526295,CA
-3626526296,3626526303,US
-3626526304,3626526431,CA
-3626526432,3626526463,CR
-3626526464,3626526567,CA
-3626526568,3626526575,US
-3626526576,3626526623,CA
-3626526624,3626526631,US
-3626526632,3626526711,CA
-3626526712,3626526719,US
-3626526720,3626526983,CA
-3626526984,3626527023,US
-3626527024,3626527135,CA
-3626527136,3626527159,US
-3626527160,3626527167,CA
-3626527168,3626527183,US
-3626527184,3626527423,CA
-3626527424,3626527463,US
-3626527464,3626527471,CA
-3626527472,3626527479,US
-3626527480,3626527487,CA
-3626527488,3626527495,US
-3626527496,3626527551,CA
-3626527552,3626527559,US
-3626527560,3626527903,CA
-3626527904,3626527911,US
-3626527912,3626528239,CA
-3626528240,3626528247,US
-3626528248,3626528535,CA
-3626528536,3626528543,US
-3626528544,3626528631,CA
-3626528632,3626528639,US
-3626528640,3626528679,CA
-3626528680,3626528703,US
-3626528704,3626529183,CA
-3626529184,3626529191,US
-3626529192,3626529639,CA
-3626529640,3626529647,US
-3626529648,3626529735,CA
-3626529736,3626529751,US
-3626529752,3626529807,CA
-3626529808,3626529847,US
-3626529848,3626529855,CA
-3626529856,3626529863,US
-3626529864,3626529919,CA
-3626529920,3626529927,US
-3626529928,3626529951,CA
-3626529952,3626529959,US
-3626529960,3626530039,CA
-3626530040,3626530055,US
-3626530056,3626530151,CA
-3626530152,3626530159,US
-3626530160,3626530335,CA
-3626530336,3626530343,US
-3626530344,3626530391,CA
-3626530392,3626530407,US
-3626530408,3626530439,CA
-3626530440,3626530455,US
-3626530456,3626530471,CA
-3626530472,3626530479,US
-3626530480,3626530487,CA
-3626530488,3626530495,US
-3626530496,3626530543,CA
-3626530544,3626530559,US
-3626530560,3626530815,CA
-3626530816,3626530831,US
-3626530832,3626530943,CA
-3626530944,3626530951,US
-3626530952,3626530999,CA
-3626531000,3626531007,US
-3626531008,3626531015,CA
-3626531016,3626531023,US
-3626531024,3626531031,CA
-3626531032,3626531047,US
-3626531048,3626531143,CA
-3626531144,3626531151,US
-3626531152,3626531199,CA
-3626531200,3626531207,US
-3626531208,3626531279,CA
-3626531280,3626531287,US
-3626531288,3626531463,CA
-3626531464,3626531471,US
-3626531472,3626531519,CA
-3626531520,3626531535,US
-3626531536,3626531551,CA
-3626531552,3626531559,US
-3626531560,3626531575,CA
-3626531576,3626531583,US
-3626531584,3626531607,CA
-3626531608,3626531615,US
-3626531616,3626531639,CA
-3626531640,3626531647,US
-3626531648,3626531703,CA
-3626531704,3626531711,US
-3626531712,3626531799,CA
-3626531800,3626531807,US
-3626531808,3626531839,CA
-3626531840,3626531847,US
-3626531848,3626531855,CA
-3626531856,3626531863,US
-3626531864,3626531871,CA
-3626531872,3626531879,US
-3626531880,3626531887,CA
-3626531888,3626531895,US
-3626531896,3626532287,CA
-3626532288,3626532311,US
-3626532312,3626532319,CA
-3626532320,3626532327,US
-3626532328,3626532399,CA
-3626532400,3626532439,US
-3626532440,3626532447,CA
-3626532448,3626532519,US
-3626532520,3626532535,CA
-3626532536,3626532543,US
-3626532544,3626532551,CA
-3626532552,3626532591,US
-3626532592,3626532607,CA
-3626532608,3626532615,US
-3626532616,3626532623,CA
-3626532624,3626532655,US
-3626532656,3626532663,CA
-3626532664,3626532703,US
-3626532704,3626532727,CA
-3626532728,3626532735,US
-3626532736,3626532759,CA
-3626532760,3626532767,US
-3626532768,3626532855,CA
-3626532856,3626852351,US
+3626512384,3626524671,US
+3626524672,3626532863,CA
+3626532864,3626852351,US
3626852352,3626860543,CA
3626860544,3626893311,US
-3626893312,3626896175,CA
-3626896176,3626896183,US
-3626896184,3626905599,CA
+3626893312,3626905599,CA
3626905600,3626926079,US
3626926080,3626934271,CA
3626934272,3627044863,US
@@ -172016,150 +88118,44 @@
3627065344,3627069439,CA
3627069440,3627299071,US
3627299072,3627299327,IN
-3627299328,3627309695,US
-3627309696,3627309823,AE
-3627309824,3627310471,US
-3627310472,3627310479,BM
-3627310480,3627328055,US
-3627328056,3627328063,SR
-3627328064,3627399935,US
-3627399936,3627399967,GE
-3627399968,3627399999,US
-3627400000,3627400063,DE
-3627400064,3627400151,US
-3627400152,3627400191,DE
-3627400192,3627400319,US
-3627400320,3627400351,BR
-3627400352,3627400639,US
-3627400640,3627400671,CA
-3627400672,3627400959,US
-3627400960,3627401103,DE
-3627401104,3627401151,US
-3627401152,3627401215,BR
-3627401216,3627507711,US
+3627299328,3627507711,US
3627507712,3627511807,CA
-3627511808,3627519616,US
-3627519617,3627519626,CA
-3627519627,3627524979,US
-3627524980,3627524987,IR
-3627524988,3627532287,US
+3627511808,3627532287,US
3627532288,3627544575,CA
3627544576,3627659263,US
3627659264,3627663359,CA
3627663360,3627679743,US
3627679744,3627712511,CA
-3627712512,3627741759,US
-3627741760,3627741791,CA
-3627741792,3627745343,US
-3627745344,3627745375,BE
-3627745376,3627745439,US
-3627745440,3627745471,IN
-3627745472,3627745503,CA
-3627745504,3627746399,US
-3627746400,3627746431,CA
-3627746432,3627752191,US
-3627752192,3627752319,US
-3627752320,3627753471,US
+3627712512,3627753471,US
3627753472,3627753727,AR
-3627753728,3627755007,US
-3627755008,3627755135,IE
-3627755136,3627755263,US
-3627755264,3627755391,IE
-3627755392,3627758847,US
-3627758848,3627758863,GB
-3627758864,3627759071,US
-3627759072,3627759103,GB
-3627759104,3627759359,US
+3627753728,3627759359,US
3627759360,3627759615,NL
-3627759616,3627760639,US
-3627760640,3627760895,EU
-3627760896,3627802623,US
+3627759616,3627802623,US
3627802624,3627810815,CA
3627810816,3627842047,US
3627842048,3627842303,IS
-3627842304,3628123615,US
-3628123616,3628123647,CA
-3628123648,3628123711,BM
-3628123712,3628123903,US
-3628123904,3628123935,GB
-3628123936,3628129087,US
-3628129088,3628129103,CA
-3628129104,3628139311,US
-3628139312,3628139327,SG
-3628139328,3628139343,GB
-3628139344,3628139487,US
-3628139488,3628139503,NZ
-3628139504,3628139519,US
-3628139520,3628139535,RU
-3628139536,3628139695,US
-3628139696,3628139711,VI
-3628139712,3628139967,US
-3628139968,3628139999,AU
-3628140000,3628140351,US
-3628140352,3628140415,RU
-3628140416,3628145919,US
+3627842304,3628145919,US
3628145920,3628146175,AU
-3628146176,3628146527,US
-3628146528,3628146559,GB
-3628146560,3628148447,US
-3628148448,3628148479,SK
-3628148480,3628148815,US
-3628148816,3628148831,NL
-3628148832,3628148847,IT
-3628148848,3628148871,US
-3628148872,3628148879,CA
-3628148880,3628151423,US
-3628151424,3628151551,DE
-3628151552,3628151871,US
-3628151872,3628151935,DO
-3628151936,3628152063,ID
-3628152064,3628153087,US
+3628146176,3628153087,US
3628153088,3628153343,KW
-3628153344,3628154239,US
-3628154240,3628154303,PH
-3628154304,3628154463,US
-3628154464,3628154495,GB
-3628154496,3628155023,US
-3628155024,3628155039,ID
-3628155040,3628155103,US
-3628155104,3628155119,NZ
-3628155120,3628155647,US
+3628153344,3628155647,US
3628155648,3628155903,CA
3628155904,3628161023,US
3628161024,3628161279,CA
-3628161280,3628164927,US
-3628164928,3628164943,IE
-3628164944,3628164959,ES
-3628164960,3628165119,US
-3628165120,3628165183,CA
-3628165184,3628165311,US
-3628165312,3628165375,DO
-3628165376,3628165647,US
-3628165648,3628165663,VI
-3628165664,3628165759,US
-3628165760,3628165775,US
-3628165776,3628169471,US
-3628169472,3628169599,IT
-3628169600,3628179455,US
+3628161280,3628179455,US
3628179456,3628187647,CA
-3628187648,3628215191,US
-3628215192,3628215199,ES
-3628215200,3628224735,US
-3628224736,3628224743,IT
-3628224744,3628236799,US
+3628187648,3628225779,US
+3628225780,3628225783,GB
+3628225784,3628236799,US
3628236800,3628257279,CA
-3628257280,3628328559,US
-3628328560,3628328567,MY
-3628328568,3628598271,US
+3628257280,3628598271,US
3628598272,3628599295,CO
3628599296,3628603391,CL
3628603392,3628604415,US
3628604416,3628605439,GT
3628605440,3628608511,IL
3628608512,3628609023,VE
-3628609024,3628609151,US
-3628609152,3628609215,VE
-3628609216,3628613375,US
+3628609024,3628613375,US
3628613376,3628613631,HN
3628613632,3628614399,ID
3628614400,3628614911,CO
@@ -172183,8 +88179,7 @@
3628628992,3628629247,GT
3628629248,3628629503,US
3628629504,3628631807,VE
-3628631808,3628633855,US
-3628633856,3628634111,CO
+3628631808,3628634111,CO
3628634112,3628636159,AR
3628636160,3628636671,VE
3628636672,3628636927,US
@@ -172203,69 +88198,34 @@
3628654592,3628654847,US
3628654848,3628655103,CR
3628655104,3628655359,VE
-3628655360,3628656383,CO
-3628656384,3628656639,EC
-3628656640,3628657407,CO
-3628657408,3628657663,US
+3628655360,3628657663,CO
3628657664,3628657919,VE
3628657920,3628658175,BS
3628658176,3628679167,US
3628679168,3628683263,CA
-3628683264,3628762335,US
-3628762336,3628762367,IL
-3628762368,3628762519,US
-3628762520,3628762527,CY
-3628762528,3628766143,US
-3628766144,3628766151,GB
-3628766152,3628767039,US
-3628767040,3628767055,IE
-3628767056,3628767135,US
-3628767136,3628767167,GB
-3628767168,3628769087,US
-3628769088,3628769119,AU
-3628769120,3628770367,US
-3628770368,3628770383,CY
-3628770384,3628771455,US
-3628771456,3628771647,GB
-3628771648,3628772431,US
-3628772432,3628772447,GB
-3628772448,3628834815,US
+3628683264,3628834815,US
3628834816,3628843007,CA
-3628843008,3628848639,US
-3628848640,3628848895,EU
-3628848896,3628963007,US
-3628963008,3628963039,PA
-3628963040,3629187071,US
+3628843008,3629187071,US
3629187072,3629195263,CA
3629195264,3629199359,US
3629199360,3629201439,CA
3629201440,3629201447,US
-3629201448,3629201463,CA
-3629201464,3629201467,US
-3629201468,3629201471,CA
-3629201472,3629201511,US
-3629201512,3629201543,CA
-3629201544,3629201547,US
-3629201548,3629201551,CA
-3629201552,3629201559,US
-3629201560,3629201563,CA
-3629201564,3629201583,US
-3629201584,3629201587,CA
-3629201588,3629201595,US
-3629201596,3629201627,CA
-3629201628,3629202431,US
+3629201448,3629201471,CA
+3629201472,3629201475,US
+3629201476,3629201495,CA
+3629201496,3629201499,US
+3629201500,3629201503,CA
+3629201504,3629201507,US
+3629201508,3629201919,CA
+3629201920,3629202431,US
3629202432,3629203199,CA
3629203200,3629318143,US
3629318144,3629326335,CA
-3629326336,3629534657,US
-3629534658,3629534658,US
-3629534659,3629539327,US
+3629326336,3629539327,US
3629539328,3629547519,CA
3629547520,3629662207,US
3629662208,3629662463,GB
-3629662464,3629735943,US
-3629735944,3629735951,CA
-3629735952,3629737215,US
+3629662464,3629737215,US
3629737216,3629737471,CA
3629737472,3629767935,US
3629767936,3629768191,CA
@@ -172273,518 +88233,215 @@
3629789440,3629789695,CA
3629789696,3629789951,US
3629789952,3629790207,CA
-3629790208,3629808095,US
-3629808096,3629808127,CA
-3629808128,3629838551,US
-3629838552,3629838559,CA
-3629838560,3629838583,US
-3629838584,3629838591,CA
-3629838592,3629839103,US
+3629790208,3629839103,US
3629839104,3629839359,CA
-3629839360,3629859551,US
-3629859552,3629859583,CA
-3629859584,3629875775,US
-3629875776,3629875807,CA
-3629875808,3629876255,US
-3629876256,3629876263,CA
-3629876264,3629876279,US
-3629876280,3629876287,CA
-3629876288,3630022639,US
-3630022640,3630022643,US
-3630022644,3630039039,US
+3629839360,3630039039,US
3630039040,3630039551,CA
-3630039552,3630039583,US
-3630039584,3630039599,CA
-3630039600,3630039615,US
-3630039616,3630039807,CA
-3630039808,3630039815,US
-3630039816,3630039823,CA
-3630039824,3630039831,US
-3630039832,3630039839,CA
-3630039840,3630040063,US
-3630040064,3630040335,CA
-3630040336,3630040351,US
-3630040352,3630040383,CA
-3630040384,3630040399,US
-3630040400,3630040447,CA
-3630040448,3630040463,US
-3630040464,3630040479,CA
-3630040480,3630040495,US
-3630040496,3630040527,CA
-3630040528,3630040543,US
-3630040544,3630040831,CA
-3630040832,3630040895,US
-3630040896,3630041023,CA
-3630041024,3630041087,US
-3630041088,3630041215,CA
-3630041216,3630041279,US
-3630041280,3630041895,CA
-3630041896,3630041911,US
-3630041912,3630041927,CA
-3630041928,3630041935,US
-3630041936,3630042015,CA
-3630042016,3630042023,US
-3630042024,3630042399,CA
-3630042400,3630042407,US
-3630042408,3630042431,CA
-3630042432,3630042439,US
-3630042440,3630042655,CA
-3630042656,3630042687,US
-3630042688,3630042751,CA
-3630042752,3630042783,US
-3630042784,3630042847,CA
-3630042848,3630042975,US
-3630042976,3630043007,CA
-3630043008,3630043039,US
-3630043040,3630043103,CA
-3630043104,3630043135,US
+3630039552,3630040063,US
+3630040064,3630040319,CA
+3630040320,3630040431,US
+3630040432,3630040447,CA
+3630040448,3630040575,US
+3630040576,3630040831,CA
+3630040832,3630041343,US
+3630041344,3630041855,CA
+3630041856,3630043135,US
3630043136,3630043391,CA
-3630043392,3630043903,US
-3630043904,3630043919,CA
-3630043920,3630043935,US
-3630043936,3630043967,CA
-3630043968,3630043983,US
-3630043984,3630043999,CA
-3630044000,3630044015,US
-3630044016,3630044063,CA
-3630044064,3630044079,US
-3630044080,3630044111,CA
-3630044112,3630044127,US
-3630044128,3630044287,CA
-3630044288,3630044351,US
-3630044352,3630044415,CA
-3630044416,3630044671,US
-3630044672,3630046367,CA
-3630046368,3630046399,US
-3630046400,3630047791,CA
-3630047792,3630047807,US
-3630047808,3630047983,CA
-3630047984,3630047999,US
-3630048000,3630049791,CA
-3630049792,3630050047,US
-3630050048,3630050391,CA
-3630050392,3630050399,US
-3630050400,3630050487,CA
-3630050488,3630050495,US
-3630050496,3630050543,CA
-3630050544,3630050559,US
-3630050560,3630051135,CA
-3630051136,3630051327,US
-3630051328,3630051583,CA
-3630051584,3630051599,US
-3630051600,3630052863,CA
-3630052864,3630052927,US
-3630052928,3630053183,CA
-3630053184,3630053247,US
-3630053248,3630053631,CA
-3630053632,3630053695,IL
-3630053696,3630053759,CA
-3630053760,3630053887,US
-3630053888,3630054495,CA
-3630054496,3630054511,US
-3630054512,3630055519,CA
-3630055520,3630055551,US
-3630055552,3630055679,CA
-3630055680,3630055935,US
+3630043392,3630044671,US
+3630044672,3630046207,CA
+3630046208,3630046719,US
+3630046720,3630047487,CA
+3630047488,3630047999,US
+3630048000,3630048255,CA
+3630048256,3630048511,US
+3630048512,3630049599,CA
+3630049600,3630050047,US
+3630050048,3630050303,CA
+3630050304,3630050559,US
+3630050560,3630050815,CA
+3630050816,3630051839,US
+3630051840,3630052607,CA
+3630052608,3630053887,US
+3630053888,3630054143,CA
+3630054144,3630054655,US
+3630054656,3630055167,CA
+3630055168,3630055935,US
3630055936,3630056959,CA
-3630056960,3630057215,US
-3630057216,3630057471,CA
+3630056960,3630057407,US
+3630057408,3630057471,CA
3630057472,3630057727,US
3630057728,3630057983,CA
-3630057984,3630058047,US
-3630058048,3630058335,CA
-3630058336,3630058367,US
-3630058368,3630058495,CA
-3630058496,3630058751,US
+3630057984,3630058751,US
3630058752,3630059007,CA
3630059008,3630059263,US
-3630059264,3630059775,CA
-3630059776,3630060031,US
-3630060032,3630060351,CA
-3630060352,3630060383,US
-3630060384,3630060543,CA
-3630060544,3630060671,US
-3630060672,3630060799,CA
-3630060800,3630060815,US
-3630060816,3630060823,CA
-3630060824,3630060831,US
-3630060832,3630060847,CA
-3630060848,3630060855,US
-3630060856,3630060895,CA
-3630060896,3630060903,US
-3630060904,3630060935,CA
-3630060936,3630060943,US
-3630060944,3630060959,CA
-3630060960,3630060975,US
-3630060976,3630060983,CA
-3630060984,3630060991,US
-3630060992,3630061055,CA
-3630061056,3630061311,US
-3630061312,3630061359,CA
-3630061360,3630061375,US
-3630061376,3630062591,CA
+3630059264,3630059519,CA
+3630059520,3630060799,US
+3630060800,3630061055,CA
+3630061056,3630061567,US
+3630061568,3630062079,CA
+3630062080,3630062335,US
+3630062336,3630062591,CA
3630062592,3630062847,US
-3630062848,3630063903,CA
-3630063904,3630063919,US
-3630063920,3630063951,CA
-3630063952,3630063983,US
-3630063984,3630063999,CA
-3630064000,3630064015,US
-3630064016,3630064383,CA
-3630064384,3630064511,US
-3630064512,3630065199,CA
-3630065200,3630065215,US
-3630065216,3630065327,CA
-3630065328,3630065343,US
-3630065344,3630065359,CA
-3630065360,3630065391,US
-3630065392,3630065727,CA
-3630065728,3630065791,US
-3630065792,3630065919,CA
-3630065920,3630066175,CN
-3630066176,3630068223,CA
-3630068224,3630068479,US
-3630068480,3630068863,CA
-3630068864,3630068991,CN
+3630062848,3630063871,CA
+3630063872,3630063935,US
+3630063936,3630063951,CA
+3630063952,3630064895,US
+3630064896,3630065151,CA
+3630065152,3630066175,US
+3630066176,3630067967,CA
+3630067968,3630068479,US
+3630068480,3630068735,CA
+3630068736,3630068991,US
3630068992,3630069247,CA
3630069248,3630069503,US
-3630069504,3630071247,CA
-3630071248,3630071263,US
-3630071264,3630071551,CA
-3630071552,3630071807,US
-3630071808,3630071871,CA
-3630071872,3630072063,US
-3630072064,3630072223,CA
-3630072224,3630072255,US
-3630072256,3630074255,CA
-3630074256,3630074287,US
-3630074288,3630074375,CA
-3630074376,3630074383,US
-3630074384,3630074415,CA
-3630074416,3630074431,US
-3630074432,3630074471,CA
-3630074472,3630074495,US
-3630074496,3630074527,CA
-3630074528,3630074543,US
-3630074544,3630075183,CA
-3630075184,3630075199,US
-3630075200,3630075375,CA
-3630075376,3630075391,US
+3630069504,3630069759,CA
+3630069760,3630070015,US
+3630070016,3630071039,CA
+3630071040,3630071295,US
+3630071296,3630071551,CA
+3630071552,3630072255,US
+3630072256,3630072287,CA
+3630072288,3630072575,US
+3630072576,3630074111,CA
+3630074112,3630074879,US
+3630074880,3630075135,CA
+3630075136,3630075311,US
+3630075312,3630075327,CA
+3630075328,3630075391,US
3630075392,3630075647,CA
-3630075648,3630076223,US
-3630076224,3630076287,CA
-3630076288,3630076351,US
-3630076352,3630076415,CA
-3630076416,3630076703,US
-3630076704,3630076831,CA
-3630076832,3630076863,US
-3630076864,3630077823,CA
-3630077824,3630077887,US
-3630077888,3630078847,CA
-3630078848,3630078879,US
-3630078880,3630079263,CA
-3630079264,3630079279,US
-3630079280,3630079439,CA
-3630079440,3630079455,AG
-3630079456,3630079487,CA
-3630079488,3630080511,US
-3630080512,3630080895,CA
-3630080896,3630081023,US
-3630081024,3630081791,CA
+3630075648,3630076927,US
+3630076928,3630077439,CA
+3630077440,3630078463,US
+3630078464,3630078719,CA
+3630078720,3630078975,US
+3630078976,3630079039,CA
+3630079040,3630079407,US
+3630079408,3630079423,CA
+3630079424,3630080575,US
+3630080576,3630080639,CA
+3630080640,3630081151,US
+3630081152,3630081791,CA
3630081792,3630082047,US
-3630082048,3630082751,CA
-3630082752,3630082815,US
+3630082048,3630082559,CA
+3630082560,3630082815,US
3630082816,3630083071,CA
-3630083072,3630083103,CH
-3630083104,3630083327,CA
-3630083328,3630083391,US
-3630083392,3630083519,CA
-3630083520,3630083583,US
-3630083584,3630083839,CA
-3630083840,3630084159,US
-3630084160,3630084351,CA
-3630084352,3630084607,US
+3630083072,3630084607,US
3630084608,3630084863,CA
3630084864,3630085119,US
3630085120,3630085375,CA
3630085376,3630085631,US
3630085632,3630086143,CA
-3630086144,3630086287,US
-3630086288,3630086295,CA
-3630086296,3630086319,US
-3630086320,3630086399,CA
-3630086400,3630086655,US
-3630086656,3630086847,CA
-3630086848,3630086911,US
-3630086912,3630087935,CA
+3630086144,3630086375,US
+3630086376,3630086383,CA
+3630086384,3630087039,US
+3630087040,3630087935,CA
3630087936,3630088447,US
3630088448,3630088959,CA
3630088960,3630089471,US
-3630089472,3630090271,CA
-3630090272,3630090287,US
-3630090288,3630090319,CA
-3630090320,3630090335,US
-3630090336,3630090751,CA
-3630090752,3630091007,US
-3630091008,3630092335,CA
-3630092336,3630092351,US
-3630092352,3630092527,CA
-3630092528,3630092543,US
-3630092544,3630092575,CA
-3630092576,3630092799,US
-3630092800,3630092975,CA
-3630092976,3630092991,US
-3630092992,3630093310,CA
-3630093311,3630093319,US
-3630093320,3630093367,CA
-3630093368,3630093375,US
-3630093376,3630093495,CA
-3630093496,3630093503,US
-3630093504,3630093823,CA
-3630093824,3630094079,US
-3630094080,3630094335,CA
-3630094336,3630094367,US
-3630094368,3630094495,CA
-3630094496,3630094559,US
-3630094560,3630094847,CA
-3630094848,3630094855,US
-3630094856,3630094863,CA
-3630094864,3630094871,US
-3630094872,3630094903,CA
-3630094904,3630094927,US
-3630094928,3630094935,CA
-3630094936,3630094943,US
-3630094944,3630094999,CA
-3630095000,3630095015,US
-3630095016,3630095031,CA
-3630095032,3630095039,US
-3630095040,3630095047,CA
-3630095048,3630095055,US
-3630095056,3630095103,CA
-3630095104,3630095359,US
-3630095360,3630095615,CA
-3630095616,3630095743,US
-3630095744,3630096943,CA
-3630096944,3630097151,US
+3630089472,3630090239,CA
+3630090240,3630091007,US
+3630091008,3630092287,CA
+3630092288,3630093567,US
+3630093568,3630093823,CA
+3630093824,3630094591,US
+3630094592,3630094847,CA
+3630094848,3630096127,US
+3630096128,3630096639,CA
+3630096640,3630097151,US
3630097152,3630097663,CA
3630097664,3630098175,KW
-3630098176,3630098495,CA
-3630098496,3630098543,US
-3630098544,3630100223,CA
+3630098176,3630098431,CA
+3630098432,3630098687,US
+3630098688,3630100223,CA
3630100224,3630100479,KW
-3630100480,3630100863,CA
-3630100864,3630101247,US
-3630101248,3630101823,CA
-3630101824,3630101855,US
-3630101856,3630101887,CA
-3630101888,3630101919,US
-3630101920,3630102015,CA
-3630102016,3630102335,US
-3630102336,3630103999,CA
-3630104000,3630104063,US
+3630100480,3630101247,US
+3630101248,3630101503,CA
+3630101504,3630102783,US
+3630102784,3630103807,CA
+3630103808,3630104063,US
3630104064,3630104575,CA
-3630104576,3630104831,US
-3630104832,3630105087,CA
-3630105088,3630106015,US
-3630106016,3630106031,CA
-3630106032,3630106063,US
-3630106064,3630106079,CA
-3630106080,3630120959,US
-3630120960,3630130175,CA
-3630130176,3630136575,US
-3630136576,3630136831,CA
-3630136832,3630139391,US
-3630139392,3630139647,CA
-3630139648,3630141439,US
-3630141440,3630144031,CA
-3630144032,3630144063,US
-3630144064,3630144223,CA
-3630144224,3630144255,US
-3630144256,3630145023,CA
-3630145024,3630145039,GB
-3630145040,3630145247,CA
-3630145248,3630145535,US
-3630145536,3630146815,CA
+3630104576,3630108159,US
+3630108160,3630108415,CA
+3630108416,3630141951,US
+3630141952,3630142207,CA
+3630142208,3630142463,US
+3630142464,3630143487,CA
+3630143488,3630143743,US
+3630143744,3630145023,CA
+3630145024,3630145535,US
+3630145536,3630145791,CA
+3630145792,3630146047,US
+3630146048,3630146815,CA
3630146816,3630147071,US
-3630147072,3630147647,CA
-3630147648,3630147839,US
-3630147840,3630148623,CA
-3630148624,3630148639,US
-3630148640,3630148655,CA
-3630148656,3630148671,US
-3630148672,3630148751,CA
-3630148752,3630148799,US
-3630148800,3630148815,CA
-3630148816,3630148863,US
-3630148864,3630149151,CA
-3630149152,3630149183,US
-3630149184,3630149215,CA
-3630149216,3630149375,US
-3630149376,3630149439,CA
-3630149440,3630149471,US
-3630149472,3630149503,CA
-3630149504,3630149535,US
-3630149536,3630153407,CA
-3630153408,3630153727,US
-3630153728,3630154751,CA
-3630154752,3630155007,US
+3630147072,3630147583,CA
+3630147584,3630148095,US
+3630148096,3630148607,CA
+3630148608,3630148863,US
+3630148864,3630149119,CA
+3630149120,3630149631,US
+3630149632,3630150143,CA
+3630150144,3630150399,US
+3630150400,3630151423,CA
+3630151424,3630151679,US
+3630151680,3630153215,CA
+3630153216,3630153727,US
+3630153728,3630154239,CA
+3630154240,3630155007,US
3630155008,3630155263,CA
-3630155264,3630155519,US
-3630155520,3630155583,CA
-3630155584,3630155599,US
-3630155600,3630155615,CA
-3630155616,3630155631,US
-3630155632,3630158135,CA
-3630158136,3630158151,US
-3630158152,3630158591,CA
-3630158592,3630158847,US
-3630158848,3630158911,CA
-3630158912,3630158943,US
-3630158944,3630158975,CA
-3630158976,3630159007,US
-3630159008,3630159487,CA
-3630159488,3630159551,US
-3630159552,3630159871,CA
+3630155264,3630155775,US
+3630155776,3630158079,CA
+3630158080,3630158295,US
+3630158296,3630158303,CA
+3630158304,3630159103,US
+3630159104,3630159359,CA
+3630159360,3630159615,US
+3630159616,3630159871,CA
3630159872,3630160127,US
3630160128,3630160383,CA
-3630160384,3630160399,US
-3630160400,3630160471,CA
-3630160472,3630160487,US
-3630160488,3630160495,CA
-3630160496,3630160503,US
-3630160504,3630160527,CA
-3630160528,3630160559,US
-3630160560,3630160599,CA
-3630160600,3630160607,US
-3630160608,3630160895,CA
-3630160896,3630160919,US
-3630160920,3630160927,CA
-3630160928,3630161111,US
-3630161112,3630161135,CA
-3630161136,3630161151,US
-3630161152,3630161983,CA
-3630161984,3630162047,US
-3630162048,3630162303,CA
-3630162304,3630162367,US
-3630162368,3630162943,CA
+3630160384,3630160639,US
+3630160640,3630160895,CA
+3630160896,3630161151,US
+3630161152,3630161919,CA
+3630161920,3630162431,US
+3630162432,3630162943,CA
3630162944,3630163199,US
3630163200,3630163455,CA
-3630163456,3630163711,US
-3630163712,3630163719,CA
-3630163720,3630163727,US
-3630163728,3630163759,CA
-3630163760,3630163767,US
-3630163768,3630163879,CA
-3630163880,3630163887,US
-3630163888,3630163927,CA
-3630163928,3630163959,US
-3630163960,3630164847,CA
-3630164848,3630164863,US
-3630164864,3630164911,CA
-3630164912,3630164927,US
-3630164928,3630164975,CA
-3630164976,3630164991,US
-3630164992,3630166719,CA
-3630166720,3630166751,US
-3630166752,3630166815,CA
-3630166816,3630166831,US
-3630166832,3630166863,CA
-3630166864,3630166879,US
-3630166880,3630166975,CA
-3630166976,3630166991,US
-3630166992,3630167295,CA
-3630167296,3630167359,US
-3630167360,3630167487,CA
-3630167488,3630167551,US
-3630167552,3630167911,CA
-3630167912,3630167919,FR
-3630167920,3630167927,CA
-3630167928,3630167943,US
-3630167944,3630168127,CA
-3630168128,3630168191,US
-3630168192,3630169087,CA
-3630169088,3630169343,US
-3630169344,3630170111,CA
+3630163456,3630163967,US
+3630163968,3630164735,CA
+3630164736,3630164991,US
+3630164992,3630166527,CA
+3630166528,3630167007,US
+3630167008,3630167023,CA
+3630167024,3630168319,US
+3630168320,3630169087,CA
+3630169088,3630169855,US
+3630169856,3630170111,CA
3630170112,3630309375,US
3630309376,3630317567,CA
-3630317568,3630328063,US
-3630328064,3630328087,JP
-3630328088,3630328191,US
-3630328192,3630328319,JP
-3630328320,3630328703,US
-3630328704,3630328831,JP
-3630328832,3630375423,US
+3630317568,3630354431,US
+3630358528,3630370815,US
+3630372864,3630375423,US
3630375424,3630383103,CA
3630383104,3630391295,US
3630391296,3630395391,CA
3630395392,3630718975,US
3630718976,3630727167,CA
-3630727168,3630745855,US
-3630745856,3630746111,UG
-3630746112,3630746367,US
-3630746368,3630746623,UG
-3630746624,3630746879,US
-3630746880,3630747391,TZ
-3630747392,3630780415,US
+3630727168,3630745599,US
+3630745600,3630747647,UG
+3630747648,3630780415,US
3630780416,3630784511,CA
-3630784512,3630850047,US
+3630784512,3630801919,US
+3630804992,3630850047,US
3630850048,3630854143,CA
-3630854144,3630897407,US
+3630854144,3630895615,US
+3630895616,3630895871,CA
+3630895872,3630897407,US
3630897408,3630897919,CA
-3630897920,3630923776,US
-3630923777,3630923926,IN
-3630923927,3630924027,DE
-3630924028,3630924438,US
-3630924439,3630924539,TH
-3630924540,3630925824,US
-3630925825,3630925974,DE
-3630925975,3630927104,US
-3630927105,3630927254,IN
-3630927255,3630956543,US
+3630897920,3630956543,US
3630956544,3631005695,CA
-3631005696,3631014915,US
-3631014916,3631015011,HU
-3631015012,3631015075,US
-3631015076,3631015111,HU
-3631015112,3631015139,US
-3631015140,3631015147,CN
-3631015148,3631015295,US
-3631015296,3631015311,CN
-3631015312,3631015887,US
-3631015888,3631015903,CN
-3631015904,3631016555,US
-3631016556,3631016571,CN
-3631016572,3631016613,US
-3631016614,3631016645,UA
-3631016646,3631017175,US
-3631017176,3631017191,CN
-3631017192,3631017475,US
-3631017476,3631017726,LT
-3631017727,3631039439,US
-3631039440,3631039455,CA
-3631039456,3631039487,US
+3631005696,3631039487,US
3631039488,3631039743,CA
-3631039744,3631043663,US
-3631043664,3631043679,CA
-3631043680,3631043759,US
-3631043760,3631043767,CA
-3631043768,3631045631,US
-3631045632,3631045759,CA
-3631045760,3631045983,US
-3631045984,3631045991,CA
-3631045992,3631057577,US
-3631057578,3631057597,GB
-3631057598,3631058405,US
-3631058406,3631058415,CA
-3631058416,3631058511,US
-3631058512,3631058521,CA
-3631058522,3631058581,US
-3631058582,3631058591,CA
-3631058592,3631059229,US
-3631059230,3631059239,NO
-3631059240,3631096951,US
-3631096952,3631096952,US
-3631096953,3631112191,US
+3631039744,3631112191,US
3631112192,3631112703,VC
3631112704,3631116543,BB
3631116544,3631117567,GD
@@ -172801,61 +88458,16 @@
3631333376,3631341567,CA
3631341568,3631435007,US
3631435008,3631435263,GB
-3631435264,3631644671,US
+3631435264,3631515647,US
+3631517696,3631644671,US
3631644672,3631652863,CA
-3631652864,3631663151,US
-3631663152,3631663159,CA
-3631663160,3631665151,US
+3631652864,3631665151,US
3631665152,3631667199,CA
-3631667200,3631669247,US
-3631669248,3631677439,A2
-3631677440,3631712287,US
-3631712288,3631712295,AR
-3631712296,3631712303,US
-3631712304,3631712311,CA
-3631712312,3631712407,US
-3631712408,3631712415,GB
-3631712416,3631712423,US
-3631712424,3631712431,PT
-3631712432,3631712439,US
-3631712440,3631712447,IN
-3631712448,3631712455,US
-3631712456,3631712463,UA
-3631712464,3631712495,US
-3631712496,3631712503,UY
-3631712504,3631712511,DE
-3631712512,3631712535,US
-3631712536,3631712543,JP
-3631712544,3631712551,CY
-3631712552,3631712559,US
-3631712560,3631712567,AR
-3631712568,3631712695,US
-3631712696,3631712703,NZ
-3631712704,3631712751,US
-3631712752,3631712767,CA
-3631712768,3631712799,US
-3631712800,3631712807,CN
-3631712808,3631712823,US
-3631712824,3631712831,IL
-3631712832,3631712895,US
-3631712896,3631712903,MX
-3631712904,3631712911,CA
-3631712912,3631712927,US
-3631712928,3631712935,BR
-3631712936,3631712951,GB
-3631712952,3631713031,US
-3631713032,3631713039,BR
-3631713040,3631713047,IN
-3631713048,3631713063,US
-3631713064,3631713071,ZA
-3631713072,3631713079,US
-3631713080,3631713087,BR
-3631713088,3631713095,GT
-3631713096,3631713111,US
-3631713112,3631713119,MX
-3631713120,3631713135,US
-3631713136,3631713143,UA
-3631713144,3631822815,US
+3631667200,3631667455,US
+3631667456,3631668223,CA
+3631668224,3631668479,US
+3631668480,3631668991,CA
+3631668992,3631822815,US
3631822816,3631822831,AU
3631822832,3631825647,US
3631825648,3631825663,NZ
@@ -172863,37 +88475,15 @@
3631829024,3631829039,IN
3631829040,3631841279,US
3631841280,3631874047,CA
-3631874048,3631879199,US
-3631879200,3631879231,CA
-3631879232,3631881759,US
-3631881760,3631881791,CA
-3631881792,3631939583,US
+3631874048,3631939583,US
3631939584,3632005119,CA
-3632005120,3632152575,US
+3632005120,3632150527,US
3632152576,3632168959,CA
3632168960,3632197631,US
3632197632,3632201727,CA
-3632201728,3632219272,US
-3632219273,3632219528,US
-3632219529,3632220166,US
-3632220167,3632220167,US
-3632220168,3632222816,US
-3632222817,3632223074,US
-3632223075,3632232447,US
-3632232448,3632232703,A2
-3632232704,3632242943,US
-3632242944,3632243007,GB
-3632243008,3632244223,US
+3632201728,3632244223,US
3632244224,3632244479,CA
-3632244480,3632278527,US
-3632278528,3632279551,SA
-3632279552,3632284879,US
-3632284880,3632284895,CA
-3632284896,3632289583,US
-3632289584,3632289599,PH
-3632289600,3632291775,US
-3632291776,3632291839,GB
-3632291840,3632332799,US
+3632244480,3632332799,US
3632332800,3632357375,CA
3632357376,3632381951,US
3632381952,3632390143,CA
@@ -172903,299 +88493,70 @@
3632448256,3632448511,CA
3632448512,3632451583,US
3632451584,3632455679,CA
-3632455680,3632482349,US
-3632482350,3632482350,US
-3632482351,3632652559,US
-3632652560,3632652575,GB
-3632652576,3632826495,US
-3632826496,3632826511,CN
-3632826512,3632833231,US
-3632833232,3632833247,CN
-3632833248,3632837135,US
-3632837136,3632837151,IN
-3632837152,3632838399,US
-3632838400,3632838431,TW
-3632838432,3632838583,US
-3632838584,3632838591,CN
-3632838592,3632847279,US
-3632847280,3632847295,CN
-3632847296,3632857087,US
-3632857088,3632861183,BS
+3632455680,3632467967,US
+3632470016,3632857087,US
+3632857088,3632859229,BS
+3632859230,3632859230,US
+3632859231,3632861183,BS
3632861184,3632881663,US
3632881664,3632889855,CA
3632889856,3632898047,US
-3632898048,3632898335,CA
-3632898336,3632898351,US
-3632898352,3632902143,CA
+3632898048,3632902143,CA
3632902144,3632971775,US
3632971776,3632988159,CA
-3632988160,3632994047,US
-3632994048,3632994303,US
-3632994304,3633029119,US
+3632988160,3633029119,US
3633029120,3633029631,PY
3633029632,3633030143,NI
-3633030144,3633030159,US
-3633030160,3633030167,A2
-3633030168,3633030175,US
-3633030176,3633030183,A2
-3633030184,3633030191,US
-3633030192,3633030199,A2
-3633030200,3633030207,US
-3633030208,3633030215,A2
-3633030216,3633030223,NG
-3633030224,3633030231,A2
-3633030232,3633030287,US
-3633030288,3633030303,A2
-3633030304,3633030335,US
-3633030336,3633030359,A2
-3633030360,3633030655,US
+3633030144,3633030655,US
3633030656,3633030911,SN
-3633030912,3633031167,A2
-3633031168,3633031615,US
-3633031616,3633031623,A2
-3633031624,3633031647,US
-3633031648,3633031655,NG
-3633031656,3633031679,US
-3633031680,3633031935,A2
+3633030912,3633031935,US
3633031936,3633032191,PG
-3633032192,3633032223,US
-3633032224,3633032231,NG
-3633032232,3633032239,US
-3633032240,3633032247,A2
-3633032248,3633032271,US
-3633032272,3633032279,A2
-3633032280,3633032287,US
-3633032288,3633032319,GQ
-3633032320,3633032415,US
-3633032416,3633032431,NG
-3633032432,3633032439,US
-3633032440,3633032447,A2
-3633032448,3633032543,US
-3633032544,3633032567,NG
-3633032568,3633032591,US
-3633032592,3633032607,A2
-3633032608,3633033247,US
-3633033248,3633033255,A2
-3633033256,3633033263,US
-3633033264,3633033271,A2
-3633033272,3633033287,US
-3633033288,3633033295,GH
-3633033296,3633033303,NG
-3633033304,3633033319,A2
-3633033320,3633033327,NG
-3633033328,3633033335,US
-3633033336,3633033359,A2
-3633033360,3633033367,NG
-3633033368,3633033375,A2
-3633033376,3633033391,NG
-3633033392,3633033399,A2
-3633033400,3633034047,US
-3633034048,3633034079,A2
-3633034080,3633034519,US
-3633034520,3633034527,NG
-3633034528,3633034623,US
-3633034624,3633034751,NG
-3633034752,3633035015,US
-3633035016,3633035023,NL
-3633035024,3633035071,US
-3633035072,3633035087,NR
-3633035088,3633035095,CN
-3633035096,3633035135,US
-3633035136,3633035151,NR
-3633035152,3633035199,US
-3633035200,3633035207,ID
-3633035208,3633035287,US
-3633035288,3633035295,A2
-3633035296,3633035311,US
-3633035312,3633035319,ID
-3633035320,3633035439,US
-3633035440,3633035447,ID
-3633035448,3633035455,US
-3633035456,3633035487,ID
-3633035488,3633035527,US
-3633035528,3633035535,NG
-3633035536,3633035551,US
-3633035552,3633035599,A2
-3633035600,3633036031,US
+3633032192,3633036031,US
3633036032,3633036287,HT
3633036288,3633036543,TT
-3633036544,3633036607,US
-3633036608,3633036671,A2
-3633036672,3633039503,US
-3633039504,3633039519,CA
-3633039520,3633166079,US
-3633166080,3633166207,MX
-3633166208,3633336319,US
-3633336320,3633336463,KY
-3633336464,3633336479,US
-3633336480,3633340415,KY
+3633036544,3633336319,US
+3633336320,3633340415,KY
3633340416,3633344511,US
3633344512,3633348607,CA
3633348608,3633405951,US
3633405952,3633410047,CA
-3633410048,3633479679,US
+3633410048,3633446911,US
+3633454080,3633454335,US
+3633455104,3633456383,US
+3633456384,3633456639,AU
+3633456640,3633479679,US
3633479680,3633483775,CA
-3633483776,3633513984,US
-3633513985,3633514238,ES
-3633514239,3633545215,US
+3633483776,3633545215,US
3633545216,3633545727,GA
-3633545728,3633545983,A2
-3633545984,3633546239,US
+3633545728,3633546239,US
3633546240,3633546751,GA
-3633546752,3633547007,A2
-3633547008,3633547263,US
+3633546752,3633547263,US
3633547264,3633547775,GA
3633547776,3633548287,NG
-3633548288,3633548543,A2
+3633548288,3633548543,US
3633548544,3633548799,GA
-3633548800,3633548927,A2
-3633548928,3633549055,GA
-3633549056,3633549375,A2
-3633549376,3633549391,US
-3633549392,3633549567,A2
+3633548800,3633549567,US
3633549568,3633549823,GA
-3633549824,3633550335,US
-3633550336,3633550431,A2
-3633550432,3633550847,US
+3633549824,3633550847,US
3633550848,3633551359,GA
-3633551360,3633552127,US
-3633552128,3633552383,A2
-3633552384,3633552639,US
-3633552640,3633552911,A2
-3633552912,3633552927,GA
-3633552928,3633553119,US
-3633553120,3633553127,A2
-3633553128,3633553143,US
-3633553144,3633553151,A2
-3633553152,3633757439,US
+3633551360,3633757439,US
3633757440,3633757695,IN
-3633757696,3633776399,US
-3633776400,3633776415,CN
-3633776416,3633782527,US
-3633782528,3633782783,US
-3633782784,3633815551,US
-3633815552,3633815807,CA
-3633815808,3633815839,US
-3633815840,3633815843,GB
-3633815844,3633815847,CA
-3633815848,3633815851,GB
-3633815852,3633815879,US
-3633815880,3633815883,EG
-3633815884,3633815887,CA
-3633815888,3633815931,US
-3633815932,3633815935,CA
-3633815936,3633815943,US
-3633815944,3633815951,CA
-3633815952,3633815967,US
-3633815968,3633816031,CA
-3633816032,3633816035,US
-3633816036,3633816039,GB
-3633816040,3633816047,US
-3633816048,3633816051,CA
-3633816052,3633816055,US
-3633816056,3633816079,CA
-3633816080,3633816087,US
-3633816088,3633816119,CA
-3633816120,3633816127,IN
-3633816128,3633816143,US
-3633816144,3633816151,CA
-3633816152,3633816159,IN
-3633816160,3633816175,ZA
-3633816176,3633816191,US
-3633816192,3633816223,CA
-3633816224,3633816231,IN
-3633816232,3633816247,US
-3633816248,3633816255,IN
-3633816256,3633816263,NG
-3633816264,3633816279,CA
-3633816280,3633816311,US
-3633816312,3633816319,CA
-3633816320,3633816327,ZA
-3633816328,3633816351,CA
-3633816352,3633816383,IN
-3633816384,3633816391,NG
-3633816392,3633816399,US
-3633816400,3633816407,CA
-3633816408,3633816463,US
-3633816464,3633816471,CA
-3633816472,3633816479,IN
-3633816480,3633816495,CA
-3633816496,3633816503,ZA
-3633816504,3633816511,IN
-3633816512,3633816519,US
-3633816520,3633816527,ZA
-3633816528,3633816535,CA
-3633816536,3633816543,US
-3633816544,3633816559,ZA
-3633816560,3633816567,IN
-3633816568,3633818663,CA
-3633818664,3633818667,US
-3633818668,3633818703,CA
-3633818704,3633818711,US
-3633818712,3633818799,CA
-3633818800,3633818807,US
-3633818808,3633818847,CA
-3633818848,3633818855,US
-3633818856,3633819135,CA
-3633819136,3633819199,IN
-3633819200,3633819231,US
-3633819232,3633819263,CA
-3633819264,3633819275,US
-3633819276,3633819279,CA
-3633819280,3633819291,US
-3633819292,3633819295,GB
-3633819296,3633819303,US
-3633819304,3633819307,AM
-3633819308,3633819315,CA
-3633819316,3633819331,US
-3633819332,3633819343,CA
-3633819344,3633819347,US
-3633819348,3633819351,CA
-3633819352,3633819391,US
-3633819392,3633819423,IN
-3633819424,3633819427,CA
-3633819428,3633819439,US
-3633819440,3633819443,CA
-3633819444,3633819451,US
-3633819452,3633819455,CA
-3633819456,3633819463,US
-3633819464,3633819467,CA
-3633819468,3633819487,US
-3633819488,3633819491,CA
-3633819492,3633819499,US
-3633819500,3633819511,CA
-3633819512,3633819515,US
-3633819516,3633819519,AR
-3633819520,3633819539,US
-3633819540,3633819547,CA
-3633819548,3633819555,US
-3633819556,3633819559,GB
-3633819560,3633819563,US
-3633819564,3633819583,CA
-3633819584,3633819615,US
-3633819616,3633819639,CA
-3633819640,3633821279,US
-3633821280,3633821311,BB
-3633821312,3633822207,US
-3633822208,3633822335,US
-3633822336,3633823487,US
-3633823488,3633823743,US
-3633823744,3633828970,US
-3633828971,3633828977,IN
-3633828978,3633831306,US
-3633831307,3633831338,IN
-3633831339,3633831383,US
-3633831384,3633831395,AU
-3633831396,3633881087,US
+3633757696,3633785343,US
+3633785600,3633786367,US
+3633786880,3633815807,US
+3633815808,3633816063,CA
+3633816064,3633817087,US
+3633817088,3633817343,CA
+3633817344,3633818623,US
+3633818624,3633819135,CA
+3633819136,3633844223,US
+3633848320,3633881087,US
3633881088,3633885183,CW
3633885184,3633889279,US
3633889280,3633893375,CA
-3633893376,3633897471,US
-3633901568,3633915647,US
+3633893376,3633915647,US
3633915648,3633915903,IT
-3633915904,3633922303,US
-3633922304,3633922367,TN
-3633922368,3633971199,US
+3633915904,3633971199,US
3633971200,3633974527,CA
3633974528,3633975039,US
3633975040,3634020351,CA
@@ -173204,60 +88565,26 @@
3634037760,3634052863,US
3634052864,3634053119,CA
3634053120,3634061311,CL
-3634061312,3634065311,US
-3634065312,3634065343,SV
-3634065344,3634094079,US
+3634061312,3634094079,US
3634094080,3634098175,SE
-3634098176,3634125831,US
-3634125832,3634125839,CA
-3634125840,3634125855,JP
-3634125856,3634125951,US
-3634125952,3634125967,CA
-3634125968,3634136103,US
-3634136104,3634136111,CA
-3634136112,3634138127,US
-3634138128,3634138143,CA
-3634138144,3634204255,US
-3634204256,3634204263,AT
-3634204264,3634204591,US
-3634204592,3634204607,GB
-3634204608,3634267649,US
-3634267650,3634267681,GB
-3634267682,3634269669,US
-3634269670,3634269679,GB
-3634269680,3634269801,US
-3634269802,3634269815,CA
-3634269816,3634270016,US
-3634270017,3634270080,CN
-3634270081,3634270976,US
-3634270977,3634271231,CN
-3634271232,3634271232,US
-3634271233,3634271328,CA
-3634271329,3634367023,US
-3634367024,3634367031,CA
-3634367032,3634511871,US
+3634098176,3634511871,US
3634511872,3634515967,CA
3634515968,3634552831,US
3634552832,3634556927,CA
3634556928,3634741247,US
3634741248,3634749439,CA
-3634749440,3634880511,US
+3634749440,3634759679,US
+3634759680,3634759935,CA
+3634759936,3634880511,US
3634880512,3634888703,CA
3634888704,3634913279,US
-3634913280,3634914175,CA
-3634914176,3634914207,US
-3634914208,3634914223,CA
-3634914224,3634914239,US
-3634914240,3634917663,CA
-3634917664,3634917679,BM
-3634917680,3634921471,CA
+3634913280,3634915663,CA
+3634915664,3634915679,US
+3634915680,3634921471,CA
3634921472,3634925567,US
3634925568,3634929663,CA
-3634929664,3634982399,US
-3634982400,3634982655,US
-3634982656,3635107903,US
-3635107904,3635107967,MX
-3635107968,3635109887,US
+3634929664,3635044351,US
+3635048448,3635109887,US
3635109888,3635113983,CA
3635113984,3635142655,US
3635142656,3635146751,CA
@@ -173271,11 +88598,7 @@
3635425280,3635429375,CA
3635429376,3635466239,US
3635466240,3635470335,CA
-3635470336,3635532287,US
-3635532288,3635532303,ES
-3635532304,3635532543,US
-3635532544,3635532799,PR
-3635532800,3635533535,US
+3635470336,3635533535,US
3635533536,3635533551,IN
3635533552,3635643391,US
3635643392,3635644415,JP
@@ -173305,20 +88628,102 @@
3635670528,3635671039,TL
3635671040,3635674623,US
3635674624,3635675135,HK
-3635675136,3635847791,US
-3635847792,3635847807,CA
-3635847808,3635856511,US
-3635856512,3635856543,CA
-3635856544,3635859807,US
-3635859808,3635859815,AR
-3635859816,3635871743,US
+3635675136,3635740671,US
+3635740672,3635740927,CA
+3635740928,3635741439,US
+3635741440,3635741695,CA
+3635741696,3635741951,US
+3635741952,3635742463,CA
+3635742464,3635742719,US
+3635742720,3635743487,CA
+3635743488,3635744255,US
+3635744256,3635744511,CA
+3635744512,3635744767,US
+3635744768,3635745023,CA
+3635745024,3635745279,US
+3635745280,3635745535,CA
+3635745536,3635746047,US
+3635746048,3635749375,CA
+3635749376,3635749631,US
+3635749632,3635750143,CA
+3635750144,3635750399,US
+3635750400,3635751679,CA
+3635751680,3635752191,US
+3635752192,3635752447,CA
+3635752448,3635752703,US
+3635752704,3635753215,CA
+3635753216,3635753471,US
+3635753472,3635754239,CA
+3635754240,3635755007,US
+3635755008,3635755519,CA
+3635755520,3635755775,US
+3635755776,3635756287,CA
+3635756288,3635756543,US
+3635756544,3635757311,CA
+3635757312,3635758079,US
+3635758080,3635758335,CA
+3635758336,3635758591,US
+3635758592,3635758847,CA
+3635758848,3635759103,US
+3635759104,3635760895,CA
+3635760896,3635761151,US
+3635761152,3635762687,CA
+3635762688,3635762943,US
+3635762944,3635763199,CA
+3635763200,3635763455,US
+3635763456,3635764735,CA
+3635764736,3635765247,US
+3635765248,3635765759,CA
+3635765760,3635768575,US
+3635768576,3635768831,CA
+3635768832,3635769087,US
+3635769088,3635771135,CA
+3635771136,3635771647,US
+3635771648,3635771903,CA
+3635771904,3635772415,US
+3635772416,3635772671,CA
+3635772672,3635772927,US
+3635772928,3635773439,CA
+3635773440,3635773695,US
+3635773696,3635773951,CA
+3635773952,3635774207,US
+3635774208,3635774463,CA
+3635774464,3635774719,US
+3635774720,3635775231,CA
+3635775232,3635775487,US
+3635775488,3635775743,CA
+3635775744,3635775999,US
+3635776000,3635776511,CA
+3635776512,3635776767,US
+3635776768,3635777023,CA
+3635777024,3635777279,US
+3635777280,3635777791,CA
+3635777792,3635778047,US
+3635778048,3635778559,CA
+3635778560,3635778815,US
+3635778816,3635780607,CA
+3635780608,3635780863,US
+3635780864,3635781119,CA
+3635781120,3635783167,US
+3635783168,3635789055,CA
+3635789056,3635789311,US
+3635789312,3635791359,CA
+3635791360,3635791615,US
+3635791616,3635793407,CA
+3635793408,3635794175,US
+3635794176,3635799551,CA
+3635799552,3635800063,US
+3635800064,3635804159,CA
+3635804160,3635804671,US
+3635804672,3635805439,CA
+3635805440,3635805455,US
+3635805456,3635806207,CA
+3635806208,3635871743,US
3635871744,3635879935,CA
3635879936,3635892223,US
3635892224,3635895785,CA
3635895786,3635895786,US
-3635895787,3635895807,CA
-3635895808,3635895839,US
-3635895840,3635896319,CA
+3635895787,3635896319,CA
3635896320,3635904511,US
3635904512,3635912703,CA
3635912704,3635961855,US
@@ -173333,174 +88738,67 @@
3636027392,3636027647,US
3636027648,3636029439,SG
3636029440,3636029695,US
-3636029696,3636029767,SG
-3636029768,3636029775,CH
-3636029776,3636029951,SG
+3636029696,3636029951,SG
3636029952,3636030207,US
3636030208,3636031231,SG
3636031232,3636031999,US
-3636032000,3636032199,SG
-3636032200,3636032207,US
-3636032208,3636032511,SG
+3636032000,3636032511,SG
3636032512,3636032767,US
-3636032768,3636033519,SG
-3636033520,3636033791,US
+3636032768,3636033535,SG
+3636033536,3636033791,US
3636033792,3636034303,SG
3636034304,3636035327,US
3636035328,3636035583,SG
3636035584,3636064255,US
3636064256,3636068351,CA
-3636068352,3636150495,US
-3636150496,3636150527,CA
-3636150528,3636150783,US
-3636150784,3636150839,CA
-3636150840,3636150911,US
-3636150912,3636150935,CA
-3636150936,3636150943,US
-3636150944,3636150991,CA
-3636150992,3636151007,US
-3636151008,3636151023,BS
-3636151024,3636151031,CA
-3636151032,3636151039,US
-3636151040,3636151455,CA
-3636151456,3636151479,US
-3636151480,3636151488,CA
-3636151489,3636151535,US
-3636151536,3636151551,CA
-3636151552,3636151561,US
-3636151562,3636151563,CA
-3636151564,3636151583,US
-3636151584,3636151759,CA
-3636151760,3636151775,US
-3636151776,3636152303,CA
-3636152304,3636152319,US
+3636068352,3636150783,US
+3636150784,3636150799,CA
+3636150800,3636151807,US
+3636151808,3636152063,CA
+3636152064,3636152319,US
3636152320,3636152575,CA
-3636152576,3636152591,US
-3636152592,3636152607,CA
-3636152608,3636152615,US
-3636152616,3636152623,CA
-3636152624,3636152647,US
-3636152648,3636152655,CA
-3636152656,3636152703,US
-3636152704,3636152767,CA
-3636152768,3636152775,MX
-3636152776,3636152783,US
-3636152784,3636152799,CA
-3636152800,3636152831,US
-3636152832,3636152855,CA
-3636152856,3636152879,US
-3636152880,3636153023,CA
-3636153024,3636153055,KN
-3636153056,3636153343,CA
-3636153344,3636153375,US
-3636153376,3636153823,CA
-3636153824,3636153839,US
-3636153840,3636153847,CA
-3636153848,3636153855,US
-3636153856,3636154895,CA
-3636154896,3636154911,US
-3636154912,3636154975,CA
-3636154976,3636154979,US
-3636154980,3636154990,CA
-3636154991,3636155071,US
-3636155072,3636155391,CA
-3636155392,3636155407,US
-3636155408,3636155455,CA
-3636155456,3636155519,US
-3636155520,3636155775,CA
-3636155776,3636155839,US
-3636155840,3636156159,CA
-3636156160,3636156191,US
-3636156192,3636156255,CA
-3636156256,3636156256,US
-3636156257,3636156415,CA
-3636156416,3636156927,US
-3636156928,3636157063,CA
-3636157064,3636157167,US
-3636157168,3636157183,CA
-3636157184,3636157439,US
-3636157440,3636158015,CA
-3636158016,3636158031,US
-3636158032,3636158071,CA
-3636158072,3636158079,US
-3636158080,3636158215,CA
-3636158216,3636158223,US
-3636158224,3636158335,CA
-3636158336,3636158351,US
-3636158352,3636158367,CA
-3636158368,3636158383,US
-3636158384,3636158719,CA
-3636158720,3636158751,US
-3636158752,3636158815,CA
-3636158816,3636158831,US
-3636158832,3636158847,CA
-3636158848,3636158975,US
+3636152576,3636152735,US
+3636152736,3636152751,CA
+3636152752,3636152783,US
+3636152784,3636152791,CA
+3636152792,3636152831,US
+3636152832,3636152847,CA
+3636152848,3636153855,US
+3636153856,3636154879,CA
+3636154880,3636155135,US
+3636155136,3636155391,CA
+3636155392,3636155647,US
+3636155648,3636156159,CA
+3636156160,3636157439,US
+3636157440,3636157951,CA
+3636157952,3636158063,US
+3636158064,3636158071,CA
+3636158072,3636158207,US
+3636158208,3636158215,CA
+3636158216,3636158463,US
+3636158464,3636158719,CA
+3636158720,3636158975,US
3636158976,3636159743,CA
-3636159744,3636159775,US
-3636159776,3636159807,CA
-3636159808,3636159839,US
-3636159840,3636159871,CA
-3636159872,3636159999,IN
-3636160000,3636160255,US
-3636160256,3636160335,CA
-3636160336,3636160343,US
-3636160344,3636160415,CA
-3636160416,3636160431,US
-3636160432,3636160831,CA
-3636160832,3636160895,US
-3636160896,3636160943,CA
-3636160944,3636160975,US
-3636160976,3636161279,CA
-3636161280,3636161327,US
-3636161328,3636161407,CA
-3636161408,3636161439,US
-3636161440,3636161535,CA
-3636161536,3636161791,US
-3636161792,3636161871,CA
-3636161872,3636161885,US
-3636161886,3636161943,CA
-3636161944,3636161951,US
-3636161952,3636161983,CA
-3636161984,3636162015,US
-3636162016,3636162559,CA
+3636159744,3636160511,US
+3636160512,3636160767,CA
+3636160768,3636161023,US
+3636161024,3636161279,CA
+3636161280,3636162047,US
+3636162048,3636162559,CA
3636162560,3636163583,US
3636163584,3636164095,CA
-3636164096,3636164111,US
-3636164112,3636164143,CA
-3636164144,3636164159,US
-3636164160,3636164255,CA
-3636164256,3636164271,US
-3636164272,3636164319,CA
-3636164320,3636164327,US
+3636164096,3636164327,US
3636164328,3636164335,CA
-3636164336,3636164351,US
-3636164352,3636164607,CA
-3636164608,3636165471,US
-3636165472,3636165503,CA
-3636165504,3636166399,US
+3636164336,3636165119,US
+3636165120,3636165375,CA
+3636165376,3636166399,US
3636166400,3636166655,CA
3636166656,3636206079,US
3636206080,3636206335,AU
-3636206336,3636266879,US
-3636266880,3636266911,HK
-3636266912,3636273663,US
-3636273664,3636273919,CA
-3636273920,3636274175,US
-3636274176,3636274431,CA
-3636274432,3636287487,US
-3636287488,3636287743,CA
-3636287744,3636291839,US
-3636291840,3636292095,CA
-3636292096,3636292863,US
-3636292864,3636293119,CA
-3636293120,3636294399,US
-3636294400,3636294655,CA
-3636294656,3636396031,US
+3636206336,3636396031,US
3636396032,3636461567,CA
3636461568,3636609023,US
-3636609024,3636610559,CA
-3636610560,3636610815,US
-3636610816,3636621311,CA
+3636609024,3636621311,CA
3636621312,3636625407,US
3636625408,3636626431,AR
3636626432,3636626943,BR
@@ -173508,493 +88806,97 @@
3636627200,3636627455,BR
3636627456,3636628479,MX
3636628480,3636628991,PE
-3636628992,3636633599,US
-3636637696,3636822015,US
+3636628992,3636822015,US
3636822016,3636854783,CA
-3636854784,3636862975,US
-3636862976,3636863231,CA
-3636863232,3636863295,US
-3636863296,3636863359,CA
-3636863360,3636863423,US
-3636863424,3636863551,CA
-3636863552,3636863615,US
-3636863616,3636863647,CA
-3636863648,3636863679,US
-3636863680,3636863711,CA
-3636863712,3636863743,US
-3636863744,3636863791,CA
-3636863792,3636863807,US
-3636863808,3636863823,CA
-3636863824,3636863839,US
-3636863840,3636863919,CA
-3636863920,3636863951,US
-3636863952,3636864031,CA
-3636864032,3636864055,US
-3636864056,3636864063,CA
-3636864064,3636864079,US
-3636864080,3636864135,CA
-3636864136,3636864143,US
-3636864144,3636864159,CA
-3636864160,3636864167,US
-3636864168,3636864175,CA
-3636864176,3636864183,US
-3636864184,3636864223,CA
-3636864224,3636864231,US
-3636864232,3636864255,CA
-3636864256,3636864511,US
-3636864512,3636864575,CA
-3636864576,3636864607,US
-3636864608,3636865151,CA
-3636865152,3636865215,US
-3636865216,3636865407,CA
-3636865408,3636865519,US
-3636865520,3636865543,CA
-3636865544,3636865551,US
-3636865552,3636865791,CA
-3636865792,3636866063,US
-3636866064,3636866071,CA
-3636866072,3636866079,US
-3636866080,3636866095,CA
-3636866096,3636866127,US
-3636866128,3636866143,CA
-3636866144,3636866159,US
-3636866160,3636866175,CA
-3636866176,3636866207,US
-3636866208,3636866367,CA
-3636866368,3636866383,US
-3636866384,3636866399,CA
-3636866400,3636866415,US
-3636866416,3636866527,CA
-3636866528,3636866575,US
-3636866576,3636866591,CA
-3636866592,3636866607,US
-3636866608,3636866623,CA
-3636866624,3636866687,US
-3636866688,3636866751,CA
-3636866752,3636866783,US
-3636866784,3636866815,CA
-3636866816,3636887551,US
+3636854784,3636887551,US
3636887552,3636895743,CA
-3636895744,3636904063,US
-3636904064,3636904095,GB
-3636904096,3636904159,US
-3636904160,3636904191,CA
-3636904192,3636904447,US
-3636904448,3636904479,CA
-3636904480,3636904511,HK
-3636904512,3636904543,CA
-3636904544,3636904575,IN
-3636904576,3636904607,US
-3636904608,3636904671,IN
-3636904672,3636905471,US
+3636895744,3636905471,US
3636905472,3636905727,CA
-3636905728,3636905791,US
-3636905792,3636905823,IN
-3636905824,3636905887,US
-3636905888,3636905951,CA
-3636905952,3636906015,US
-3636906016,3636906047,IN
-3636906048,3636906079,US
-3636906080,3636906111,BE
-3636906112,3636906143,US
-3636906144,3636906175,BE
-3636906176,3636906207,IN
-3636906208,3636906367,US
-3636906368,3636906465,IN
-3636906466,3636906495,US
-3636906496,3636906623,CA
-3636906624,3636906751,IN
-3636906752,3636906879,US
-3636906880,3636907007,IN
-3636907008,3636907039,CA
-3636907040,3636907103,US
-3636907104,3636907135,IN
-3636907136,3636907167,CA
-3636907168,3636907199,US
-3636907200,3636907231,CA
-3636907232,3636907775,US
+3636905728,3636907775,US
3636907776,3636908031,CA
-3636908032,3636908543,US
-3636908544,3636908799,IN
-3636908800,3636908863,US
-3636908864,3636908927,CN
-3636908928,3636908991,CA
-3636908992,3636909055,US
+3636908032,3636909055,US
3636909056,3636909311,CA
-3636909312,3636909663,US
-3636909664,3636909695,IT
-3636909696,3636909727,CA
-3636909728,3636909759,US
-3636909760,3636909791,CA
-3636909792,3636909887,US
-3636909888,3636909951,IT
-3636909952,3636909983,US
-3636909984,3636910015,TZ
-3636910016,3636910335,US
-3636910336,3636910367,IN
-3636910368,3636910399,US
-3636910400,3636910431,IN
-3636910432,3636910495,US
-3636910496,3636910527,BE
-3636910528,3636910591,US
-3636910592,3636910719,CA
-3636910720,3636911295,US
-3636911296,3636911359,CA
-3636911360,3636911423,US
-3636911424,3636911455,BE
-3636911456,3636911615,US
-3636911616,3636911743,CA
-3636911744,3636911871,IN
-3636911872,3636911903,US
-3636911904,3636911935,CA
-3636911936,3636912383,US
-3636912384,3636912447,JP
-3636912448,3636912959,US
-3636912960,3636912991,BE
-3636912992,3636913535,US
-3636913536,3636913663,CA
-3636913664,3636913919,US
+3636909312,3636913919,US
3636913920,3636914687,CA
-3636914688,3636914879,US
-3636914880,3636914943,CA
-3636914944,3636915103,US
-3636915104,3636915135,IN
-3636915136,3636915199,US
-3636915200,3636915327,IN
-3636915328,3636915455,CA
-3636915456,3636915583,IN
-3636915584,3636915711,CA
-3636915712,3636915839,US
-3636915840,3636915967,CA
-3636915968,3636916031,US
-3636916032,3636916063,CA
-3636916064,3636916223,US
-3636916224,3636916351,CA
-3636916352,3636916479,US
-3636916480,3636916607,CA
-3636916608,3636916735,IN
-3636916736,3636916927,US
-3636916928,3636916959,CA
-3636916960,3636916991,US
-3636916992,3636917119,CA
-3636917120,3636917255,US
-3636917256,3636917263,IN
-3636917264,3636917295,US
-3636917296,3636917303,IN
-3636917304,3636917359,US
-3636917360,3636917367,AU
-3636917368,3636917447,US
-3636917448,3636917455,HK
-3636917456,3636917503,US
-3636917504,3636917759,CA
-3636917760,3636918015,US
+3636914688,3636918015,US
3636918016,3636919039,CA
-3636919040,3636919071,IN
-3636919072,3636919103,US
-3636919104,3636919135,CA
-3636919136,3636919167,IN
-3636919168,3636919199,CA
-3636919200,3636919231,IN
-3636919232,3636919711,US
-3636919712,3636919743,BE
-3636919744,3636919807,US
-3636919808,3636919871,GB
-3636919872,3636920127,US
-3636920128,3636920191,CA
-3636920192,3637015327,US
-3637015328,3637015343,GB
-3637015344,3637023423,US
-3637023424,3637023487,TW
-3637023488,3637024767,US
-3637024768,3637024895,CA
-3637024896,3637025023,US
-3637025024,3637025087,CA
-3637025088,3637071887,US
-3637071888,3637071903,AD
-3637071904,3637071935,US
-3637071936,3637071943,SK
-3637071944,3637071951,IL
-3637071952,3637071967,CY
-3637071968,3637072015,US
-3637072016,3637072031,CY
-3637072032,3637072071,US
-3637072072,3637072079,FI
-3637072080,3637072095,CA
-3637072096,3637072127,GB
-3637072128,3637072135,US
-3637072136,3637072143,AD
-3637072144,3637072159,CY
-3637072160,3637072279,US
-3637072280,3637072287,CA
-3637072288,3637072303,NE
-3637072304,3637072319,US
-3637072320,3637072335,IL
-3637072336,3637072343,CA
-3637072344,3637072895,US
+3636919040,3637072895,US
3637072896,3637073151,CY
-3637073152,3637073167,US
-3637073168,3637073183,AD
-3637073184,3637073215,US
-3637073216,3637073231,CY
-3637073232,3637073935,US
-3637073936,3637073959,AD
-3637073960,3637074239,US
-3637074240,3637074303,PA
-3637074304,3637074943,US
-3637074944,3637074959,CA
-3637074960,3637075967,US
+3637073152,3637075967,US
3637075968,3637080063,CA
-3637080064,3637427711,US
-3637427712,3637427743,CA
-3637427744,3637441599,US
-3637441600,3637441607,CA
-3637441608,3637469439,US
+3637080064,3637469439,US
3637469440,3637469695,GE
3637469696,3637510143,US
-3637510144,3637520127,CA
-3637520128,3637520191,US
-3637520192,3637641215,CA
+3637510144,3637641215,CA
3637641216,3637665791,US
-3637665792,3637667439,CA
-3637667440,3637667518,US
-3637667519,3637669887,CA
+3637665792,3637669887,CA
3637669888,3637706751,US
3637706752,3637739519,CA
-3637739520,3637740767,US
-3637740768,3637740799,CA
-3637740800,3638165503,US
+3637739520,3638165503,US
3638165504,3638181887,CA
-3638181888,3638198951,US
-3638198952,3638198959,BM
-3638198960,3638198983,US
-3638198984,3638198991,ES
-3638198992,3638206407,US
-3638206408,3638206415,LU
-3638206416,3638208527,US
-3638208528,3638208543,CN
-3638208544,3638214399,US
+3638181888,3638214399,US
3638214400,3638214655,GR
-3638214656,3638214871,US
-3638214872,3638214879,CK
-3638214880,3638215663,US
-3638215664,3638215679,GB
-3638215680,3638215855,US
-3638215856,3638215863,AU
-3638215864,3638216735,US
-3638216736,3638216743,LU
-3638216744,3638219455,US
-3638219456,3638219519,AU
-3638219520,3638220511,US
-3638220512,3638220519,CN
-3638220520,3638222087,US
-3638222088,3638222095,DE
-3638222096,3638222463,US
-3638222464,3638222591,AU
-3638222592,3638222655,CA
-3638222656,3638224639,US
+3638214656,3638224639,US
3638224640,3638224895,GR
-3638224896,3638225983,US
-3638225984,3638226015,IN
-3638226016,3638226687,US
+3638224896,3638226687,US
3638226688,3638226943,NL
-3638226944,3638228023,US
-3638228024,3638228031,GB
-3638228032,3638230815,US
-3638230816,3638230847,ES
-3638230848,3638230927,US
-3638230928,3638230935,CA
-3638230936,3638231031,US
-3638231032,3638231039,GB
-3638231040,3638247439,US
-3638247440,3638247455,GB
-3638247456,3638247487,US
-3638247488,3638247551,GB
-3638247552,3638247615,US
-3638247616,3638247679,GB
-3638247680,3638247855,US
-3638247856,3638247871,DE
-3638247872,3638247919,US
-3638247920,3638248703,GB
-3638248704,3638249215,FR
+3638226944,3638247935,US
+3638247936,3638248703,GB
+3638248704,3638249215,US
3638249216,3638249471,GB
-3638249472,3638249751,US
-3638249752,3638249791,GB
-3638249792,3638249983,US
-3638249984,3638250031,GB
-3638250032,3638250063,US
-3638250064,3638250079,GB
-3638250080,3638250535,US
-3638250536,3638250543,GB
-3638250544,3638250559,US
-3638250560,3638250623,GB
-3638250624,3638250687,US
-3638250688,3638250703,GB
-3638250704,3638250719,US
-3638250720,3638250735,GB
-3638250736,3638250743,US
-3638250744,3638250815,GB
-3638250816,3638250831,US
-3638250832,3638250847,GB
-3638250848,3638250863,US
-3638250864,3638250871,GB
-3638250872,3638250895,US
-3638250896,3638250911,GB
-3638250912,3638250983,US
-3638250984,3638250991,GB
-3638250992,3638304767,US
+3638249472,3638304767,US
3638304768,3638312959,CA
3638312960,3638349823,US
3638349824,3638350079,AU
3638350080,3638370303,US
-3638370304,3638374751,CA
-3638374752,3638374767,US
-3638374768,3638386687,CA
-3638386688,3638398975,US
-3638398976,3638398991,GB
-3638398992,3638399007,CH
-3638399008,3638399487,US
-3638399488,3638399615,CH
-3638399616,3638399647,BM
-3638399648,3638399679,US
-3638399680,3638399743,CA
+3638370304,3638386687,CA
+3638386688,3638399743,US
3638399744,3638399999,CH
-3638400000,3638400063,CA
-3638400064,3638400271,US
-3638400272,3638400279,CA
-3638400280,3638400559,US
-3638400560,3638400567,PA
-3638400568,3638400575,US
-3638400576,3638400607,CA
-3638400608,3638400639,US
-3638400640,3638400767,CA
-3638400768,3638401087,US
-3638401088,3638401151,CA
-3638401152,3638401279,CZ
-3638401280,3638509567,US
-3638509568,3638528751,CA
-3638528752,3638528759,US
-3638528760,3638530047,CA
-3638530048,3638530063,US
-3638530064,3638530239,CA
-3638530240,3638530255,US
-3638530256,3638534143,CA
+3638400000,3638401087,US
+3638401088,3638401119,CA
+3638401120,3638509567,US
+3638509568,3638534143,CA
3638534144,3638697983,US
3638697984,3638706175,CA
-3638706176,3638706687,A2
+3638706176,3638706687,US
3638706688,3638706943,NG
-3638706944,3638710271,A2
-3638710272,3638874111,US
+3638706944,3638738943,US
+3638740992,3638746111,US
+3638746112,3638746367,MX
+3638746368,3638874111,US
3638874112,3638878207,CA
-3638878208,3638960383,US
-3638960384,3638960639,BR
-3638960640,3638984703,US
-3638984704,3638985983,GT
-3638985984,3638986239,HN
-3638986240,3638992895,GT
-3638992896,3639052031,US
+3638878208,3638984703,US
+3638984704,3638992895,GT
+3638992896,3638996991,US
+3639001088,3639052031,US
3639052032,3639052287,ES
-3639052288,3639083007,US
+3639052288,3639069439,US
+3639069440,3639069695,HK
+3639069696,3639083007,US
3639083008,3639148543,CA
3639148544,3639222271,US
3639222272,3639230463,CA
-3639230464,3639255039,US
+3639230464,3639247359,US
+3639248128,3639249151,US
+3639249664,3639255039,US
3639255040,3639263231,CA
3639263232,3639279615,US
3639279616,3639283711,CA
-3639283712,3639343231,US
-3639343232,3639343263,GB
-3639343264,3639344447,US
-3639344448,3639344463,MA
-3639344464,3639344543,US
-3639344544,3639344575,GB
-3639344576,3639344591,PL
-3639344592,3639369727,US
-3639369728,3639372031,A2
-3639372032,3639372287,US
-3639372288,3639375359,A2
-3639375360,3639375871,US
-3639375872,3639376895,A2
-3639376896,3639377407,GU
-3639377408,3639390207,US
+3639283712,3639390207,US
3639390208,3639394303,ZA
-3639394304,3639396095,US
-3639396096,3639396351,A2
-3639396352,3639396383,NE
-3639396384,3639396415,A2
-3639396416,3639396431,PK
-3639396432,3639396447,A2
-3639396448,3639396463,NG
-3639396464,3639396471,TZ
-3639396472,3639396487,A2
-3639396488,3639396519,IN
-3639396520,3639396543,A2
-3639396544,3639396551,TZ
-3639396552,3639396671,A2
-3639396672,3639396735,NE
-3639396736,3639396743,IN
-3639396744,3639396863,A2
-3639396864,3639396879,NE
-3639396880,3639396927,A2
-3639396928,3639396959,FR
-3639396960,3639396975,NG
-3639396976,3639396991,A2
-3639396992,3639397023,CD
-3639397024,3639397119,A2
+3639394304,3639397119,US
3639397120,3639397375,IN
3639397376,3639397631,US
3639397632,3639397887,NG
-3639397888,3639398399,US
-3639398400,3639398423,A2
-3639398424,3639398431,LB
-3639398432,3639398439,A2
-3639398440,3639398447,LB
-3639398448,3639398463,A2
-3639398464,3639398495,SA
-3639398496,3639398527,A2
-3639398528,3639398591,SA
-3639398592,3639398599,LB
-3639398600,3639398655,A2
-3639398656,3639398663,SA
-3639398664,3639398911,A2
-3639398912,3639399679,US
+3639397888,3639399679,US
3639399680,3639399935,HN
-3639399936,3639400447,A2
+3639399936,3639400447,US
3639400448,3639401471,RS
-3639401472,3639401495,PK
-3639401496,3639401511,A2
-3639401512,3639401519,ID
-3639401520,3639401535,A2
-3639401536,3639401541,TZ
+3639401472,3639401541,US
3639401542,3639401542,KE
-3639401543,3639401551,TZ
-3639401552,3639401559,LK
-3639401560,3639401591,A2
-3639401592,3639401599,US
-3639401600,3639401623,A2
-3639401624,3639401631,TZ
-3639401632,3639401647,A2
-3639401648,3639401655,PK
-3639401656,3639401687,A2
-3639401688,3639401727,PK
-3639401728,3639402015,A2
-3639402016,3639402039,PK
-3639402040,3639402047,A2
-3639402048,3639402055,US
-3639402056,3639402071,PK
-3639402072,3639402079,A2
-3639402080,3639402095,PK
-3639402096,3639402111,A2
-3639402112,3639402175,NG
-3639402176,3639402191,PK
-3639402192,3639402199,A2
-3639402200,3639402207,PK
-3639402208,3639402239,A2
+3639401543,3639402239,US
3639402240,3639402495,GH
-3639402496,3639439631,US
-3639439632,3639439639,RO
-3639439640,3639440767,US
-3639440768,3639440895,IN
-3639440896,3639513239,US
+3639402496,3639513239,US
3639513240,3639513243,AE
3639513244,3639533567,US
3639533568,3639537663,CA
@@ -174019,11 +88921,15 @@
3639556016,3639556023,CO
3639556024,3639558143,US
3639558144,3639566335,CA
-3639566336,3639593983,US
+3639566336,3639566847,US
+3639566848,3639567103,HK
+3639567104,3639593983,US
3639593984,3639595007,GB
3639595008,3639607295,US
3639607296,3639611391,CA
-3639611392,3639656447,US
+3639611392,3639639807,US
+3639639808,3639640063,CA
+3639640064,3639656447,US
3639656448,3639660543,CA
3639660544,3639664639,US
3639664640,3639668735,CA
@@ -174031,275 +88937,81 @@
3639672832,3639681023,CL
3639681024,3639684991,US
3639684992,3639685119,SA
-3639685120,3639692032,US
-3639692033,3639692288,GB
-3639692289,3639730175,US
+3639685120,3639692031,US
+3639692032,3639692287,GB
+3639692288,3639704573,US
+3639704574,3639704574,GB
+3639704575,3639730175,US
3639730176,3639734271,CA
-3639734272,3639886215,US
-3639886216,3639886223,SA
-3639886224,3639886591,US
-3639886592,3639886599,SG
-3639886600,3639887639,US
-3639887640,3639887647,AU
-3639887648,3639887783,US
-3639887784,3639887791,SA
-3639887792,3639887823,US
-3639887824,3639887831,AU
-3639887832,3639888415,US
-3639888416,3639888423,ID
-3639888424,3639888447,US
-3639888448,3639888463,ID
-3639888464,3639888631,US
-3639888632,3639888639,AU
-3639888640,3639888767,US
-3639888768,3639888775,AU
-3639888776,3639889175,US
-3639889176,3639889183,AU
-3639889184,3639889207,US
-3639889208,3639889215,SA
-3639889216,3639889279,US
-3639889280,3639889287,AU
-3639889288,3639889407,US
-3639889408,3639889415,AU
-3639889416,3639889423,US
-3639889424,3639889439,SA
-3639889440,3639890359,US
-3639890360,3639890367,SA
-3639890368,3639890447,US
-3639890448,3639890463,AU
-3639890464,3639890479,US
-3639890480,3639890487,BR
-3639890488,3639890783,US
-3639890784,3639890799,AU
-3639890800,3639890823,US
-3639890824,3639890831,AU
-3639890832,3639890907,US
-3639890908,3639890911,AU
-3639890912,3639891055,US
-3639891056,3639891063,AU
-3639891064,3639891551,US
-3639891552,3639891559,AU
-3639891560,3639891711,US
-3639891712,3639891727,LK
-3639891728,3639891919,US
-3639891920,3639891935,LK
-3639891936,3639891959,US
-3639891960,3639891967,AU
-3639891968,3639892359,US
-3639892360,3639892367,ID
-3639892368,3639892375,US
-3639892376,3639892383,ID
-3639892384,3639892415,US
-3639892416,3639892431,MX
-3639892432,3639893503,US
-3639893504,3639893519,ID
-3639893520,3639902207,US
+3639734272,3639737343,US
+3639737344,3639737373,GB
+3639737374,3639737374,FR
+3639737375,3639737599,GB
+3639737600,3639737629,US
+3639737630,3639737630,GB
+3639737631,3639902207,US
3639902208,3639918591,PE
3639918592,3639934975,AR
-3639934976,3640001751,US
-3640001752,3640001759,IL
-3640001760,3640003239,US
-3640003240,3640003247,TR
-3640003248,3640007311,US
-3640007312,3640007319,HK
-3640007320,3640007359,US
-3640007360,3640007367,SO
-3640007368,3640013767,US
-3640013768,3640013775,GI
-3640013776,3640023079,US
-3640023080,3640023087,EG
-3640023088,3640023231,US
-3640023232,3640023247,GI
-3640023248,3640023271,US
-3640023272,3640023279,HK
-3640023280,3640027415,US
-3640027416,3640027423,GB
-3640027424,3640028207,US
-3640028208,3640028215,GB
-3640028216,3640028295,US
-3640028296,3640028303,CA
-3640028304,3640028335,US
-3640028336,3640028343,CA
-3640028344,3640028447,US
-3640028448,3640028455,GB
-3640028456,3640028591,US
-3640028592,3640028599,CA
-3640028600,3640057855,US
+3639934976,3640057855,US
3640057856,3640066047,CA
-3640066048,3640075391,US
-3640075392,3640075407,NL
-3640075408,3640075759,US
-3640075760,3640075775,CA
-3640075776,3640112063,US
-3640112064,3640112079,NL
-3640112080,3640112575,US
-3640112576,3640112591,NL
-3640112592,3640197119,US
+3640066048,3640197119,US
3640197120,3640201215,CA
3640201216,3640205311,US
3640205312,3640209407,BM
3640209408,3640213503,CA
-3640213504,3640312079,US
-3640312080,3640312095,ID
-3640312096,3640312103,GB
-3640312104,3640312159,US
-3640312160,3640312191,ID
-3640312192,3640312319,US
+3640213504,3640287231,US
+3640291328,3640312319,US
3640312320,3640312575,NI
-3640312576,3640312607,NG
-3640312608,3640312831,US
+3640312576,3640312831,US
3640312832,3640313087,TO
-3640313088,3640314879,US
-3640314880,3640315135,A2
-3640315136,3640315391,US
+3640313088,3640315391,US
3640315392,3640315647,TR
3640315648,3640316927,US
3640316928,3640317183,MX
-3640317184,3640317327,US
-3640317328,3640317343,A2
-3640317344,3640317407,US
-3640317408,3640317423,A2
-3640317424,3640317503,US
-3640317504,3640317535,ID
-3640317536,3640317559,US
-3640317560,3640317567,NL
-3640317568,3640318207,US
+3640317184,3640318207,US
3640318208,3640318975,NC
-3640318976,3640319103,GQ
-3640319104,3640319231,US
+3640318976,3640319231,US
3640319232,3640319487,NG
-3640319488,3640344959,US
-3640344960,3640345007,MX
-3640345008,3640345023,US
-3640345024,3640345086,MX
-3640345087,3640345087,US
-3640345088,3640345342,MX
-3640345343,3640345391,US
-3640345392,3640345407,MX
-3640345408,3640345423,US
-3640345424,3640345431,MX
-3640345432,3640345455,US
-3640345456,3640345503,MX
-3640345504,3640345743,US
-3640345744,3640345854,MX
-3640345855,3640346815,US
-3640346816,3640346847,MX
-3640346848,3640346879,US
+3640319488,3640346879,US
3640346880,3640347134,MX
-3640347135,3640347391,US
-3640347392,3640347455,MX
-3640347456,3640347471,US
-3640347472,3640347487,MX
-3640347488,3640347503,US
-3640347504,3640347519,MX
-3640347520,3640347535,US
-3640347536,3640347551,MX
-3640347552,3640347567,US
-3640347568,3640347599,MX
-3640347600,3640347615,US
-3640347616,3640347631,MX
-3640347632,3640347647,US
-3640347648,3640347711,MX
-3640347712,3640347839,US
-3640347840,3640347902,MX
-3640347903,3640360959,US
+3640347135,3640360959,US
3640360960,3640369151,CA
3640369152,3640410111,US
3640410112,3640418303,CA
3640418304,3640430591,US
-3640430592,3640432639,A2
+3640430592,3640432639,DE
3640432640,3640433407,US
-3640433408,3640433663,A2
+3640433408,3640433663,DE
3640433664,3640434943,US
3640436480,3640436735,GH
-3640438784,3640442879,A2
+3640438784,3640442879,DE
3640442880,3640446975,US
-3640449024,3640450047,A2
-3640451072,3640459263,A2
+3640449024,3640450047,DE
+3640451072,3640459263,DE
3640459264,3640557567,US
-3640557568,3640564455,CA
-3640564456,3640564463,US
-3640564464,3640565631,CA
-3640565632,3640565647,US
-3640565648,3640578391,CA
-3640578392,3640578399,GB
-3640578400,3640582143,CA
+3640557568,3640582143,CA
3640582144,3640647679,US
3640647680,3640651775,JP
3640651776,3640655871,US
3640655872,3641020121,DE
3641020122,3641020122,GB
-3641020123,3641029631,DE
-3641029632,3641029695,US
-3641029696,3641029711,DE
-3641029712,3641029759,US
-3641029760,3641061119,DE
-3641061120,3641061199,US
-3641061200,3641061207,DE
-3641061208,3641061279,US
-3641061280,3641061295,DE
-3641061296,3641061375,US
-3641061376,3641078271,DE
-3641078272,3641078327,US
-3641078328,3641078335,DE
-3641078336,3641078351,US
-3641078352,3641078359,DE
-3641078360,3641078367,US
-3641078368,3641078375,DE
-3641078376,3641078495,US
-3641078496,3641078503,DE
-3641078504,3641078511,US
-3641078512,3641078519,DE
-3641078520,3641078527,US
-3641078528,3641085687,DE
-3641085688,3641085695,CZ
-3641085696,3641147519,DE
-3641147520,3641147527,AT
-3641147528,3641150719,DE
-3641150720,3641150759,CN
-3641150760,3641150767,DE
-3641150768,3641151232,CN
-3641151233,3641157951,DE
-3641157952,3641157959,AT
-3641157960,3641158031,DE
-3641158032,3641158055,FR
-3641158056,3641158103,DE
-3641158104,3641158111,FR
-3641158112,3641158127,DE
-3641158128,3641158135,ES
-3641158136,3641158199,DE
-3641158200,3641158207,NL
-3641158208,3641158335,DE
-3641158336,3641158343,ES
-3641158344,3641158423,DE
-3641158424,3641158431,IT
-3641158432,3641158519,DE
-3641158520,3641158527,ES
-3641158528,3641159679,DE
-3641159680,3641159687,ES
-3641159688,3641159727,DE
-3641159728,3641159743,ES
-3641159744,3641159767,DE
-3641159768,3641159775,ES
-3641159776,3641180159,DE
+3641020123,3641150975,DE
+3641150976,3641151232,CN
+3641151233,3641180159,DE
3641180160,3641188351,GB
3641188352,3641192447,TJ
3641192448,3641196543,DE
3641196544,3641200639,SA
3641200640,3641204735,RU
-3641204736,3641206015,NL
-3641206016,3641206271,CN
-3641206272,3641208831,NL
+3641204736,3641208831,NL
3641208832,3641212927,JO
3641212928,3641221119,NO
3641221120,3641229311,PL
3641229312,3641237503,CH
3641237504,3641241599,RU
-3641241600,3641242879,GB
-3641242880,3641243135,ES
-3641243136,3641245695,GB
+3641241600,3641245695,GB
3641245696,3641249791,UA
-3641249792,3641262079,DE
+3641253888,3641262079,DE
3641262080,3641266175,IT
3641266176,3641270271,RU
3641270272,3641278463,DE
@@ -174313,82 +89025,21 @@
3641311232,3641315327,DE
3641315328,3641319423,DK
3641319424,3641323519,RU
-3641323520,3641324543,DE
-3641324544,3641324799,AT
-3641324800,3641331711,DE
+3641323520,3641331711,DE
3641331712,3641335807,ES
3641335808,3641343999,SE
-3641344000,3641352959,GB
-3641352960,3641353151,A2
-3641353152,3641353183,BD
-3641353184,3641353215,A2
-3641353216,3641353231,GB
-3641353232,3641353247,IQ
-3641353248,3641353703,A2
-3641353704,3641353711,GB
-3641353712,3641353727,A2
-3641353728,3641353759,NG
-3641353760,3641353775,GB
-3641353776,3641353807,NG
-3641353808,3641353823,GB
-3641353824,3641353839,A2
-3641353840,3641353855,GB
-3641353856,3641353879,NG
-3641353880,3641353983,A2
-3641353984,3641354239,AF
-3641354240,3641354255,A2
-3641354256,3641354272,GB
-3641354273,3641354303,A2
-3641354304,3641354311,US
-3641354312,3641354319,GB
-3641354320,3641354327,A2
-3641354328,3641354335,GB
-3641354336,3641354339,A2
-3641354340,3641354343,GB
-3641354344,3641354351,A2
-3641354352,3641354359,GB
-3641354360,3641354431,A2
-3641354432,3641354751,GB
-3641354752,3641355263,NG
-3641355264,3641355519,AO
-3641355520,3641355583,A2
-3641355584,3641355599,GB
-3641355600,3641355775,A2
-3641355776,3641356031,LB
-3641356032,3641356191,A2
-3641356192,3641356207,NG
-3641356208,3641356287,A2
-3641356288,3641356351,GB
-3641356352,3641356415,NG
-3641356416,3641356535,A2
+3641344000,3641356535,GB
3641356536,3641356543,CM
-3641356544,3641357855,A2
-3641357856,3641357879,GB
-3641357880,3641357887,A2
-3641357888,3641357927,GB
-3641357928,3641357983,A2
+3641356544,3641357983,GB
3641357984,3641358015,SL
-3641358016,3641358079,A2
-3641358080,3641359359,GB
-3641359360,3641359615,IQ
-3641359616,3641359639,GB
-3641359640,3641359871,A2
-3641359872,3641360383,GB
+3641358016,3641360383,GB
3641360384,3641368575,RO
3641368576,3641372671,GB
3641372672,3641376767,BG
3641376768,3641380863,IT
3641380864,3641384959,IR
3641384960,3641389055,CH
-3641389056,3641391426,DE
-3641391427,3641391439,CH
-3641391440,3641391583,DE
-3641391584,3641391591,AT
-3641391592,3641391807,DE
-3641391808,3641391823,AT
-3641391824,3641392575,DE
-3641392576,3641392583,RO
-3641392584,3641393151,DE
+3641389056,3641393151,DE
3641393152,3641397247,KZ
3641397248,3641401343,IT
3641401344,3641409535,ES
@@ -174410,10 +89061,8 @@
3641479168,3641483263,GB
3641483264,3641491455,IT
3641491456,3641493503,UA
-3641493504,3641494015,RU
-3641494016,3641495551,UA
-3641495552,3641496063,RU
-3641496064,3641499647,UA
+3641493504,3641494015,NL
+3641494016,3641499647,UA
3641499648,3641503743,SA
3641503744,3641507839,RU
3641507840,3641516031,NO
@@ -174426,10 +89075,7 @@
3641540608,3641548799,GB
3641548800,3641552895,DE
3641552896,3641556991,AT
-3641556992,3641559103,DE
-3641559104,3641559135,NL
-3641559136,3641560959,DE
-3641560960,3641561087,NL
+3641556992,3641561087,DE
3641561088,3641565183,RU
3641565184,3641573375,SE
3641573376,3641577471,NO
@@ -174440,9 +89086,7 @@
3641593856,3641597951,NG
3641597952,3641602047,AZ
3641602048,3641606143,DE
-3641606144,3641607695,GB
-3641607696,3641607711,FR
-3641607712,3641610239,GB
+3641606144,3641610239,GB
3641610240,3641618431,DE
3641618432,3641622527,GB
3641622528,3641626623,RU
@@ -174456,20 +89100,15 @@
3641655296,3641659391,GB
3641659392,3641663487,FR
3641663488,3641667583,MT
-3641667584,3641668607,GB
-3641668608,3641670655,ZW
-3641670656,3641670783,SO
-3641670784,3641670791,NG
-3641670792,3641670911,GB
+3641667584,3641669119,GB
+3641669120,3641670271,ZW
+3641670272,3641670911,GB
3641670912,3641671167,LS
3641671168,3641671423,ZW
3641671424,3641671679,GB
3641671680,3641679871,RU
-3641679872,3641680127,DK
-3641680128,3641681151,GB
3641681152,3641681407,SE
3641681408,3641681663,FR
-3641681664,3641683967,FR
3641683968,3641688063,KZ
3641688064,3641692159,RU
3641692160,3641696255,IT
@@ -174493,10 +89132,7 @@
3641769984,3641774079,NO
3641774080,3641778175,DE
3641778176,3641782271,PL
-3641782272,3641782607,GB
-3641782608,3641782783,BG
-3641782784,3641784575,GB
-3641784576,3641786367,BG
+3641782272,3641786367,GB
3641786368,3641790463,SE
3641790464,3641794559,LT
3641794560,3641798655,RS
@@ -174504,20 +89140,7 @@
3641802752,3641806847,NL
3641806848,3641807871,TR
3641807872,3641808895,NL
-3641808896,3641809663,TR
-3641809664,3641809919,NL
-3641809920,3641810315,TR
-3641810316,3641810431,CY
-3641810432,3641810439,NL
-3641810440,3641810447,US
-3641810448,3641810463,NL
-3641810464,3641810479,US
-3641810480,3641810559,TR
-3641810560,3641810623,US
-3641810624,3641810631,TR
-3641810632,3641810642,US
-3641810643,3641810687,TR
-3641810688,3641810943,CY
+3641808896,3641810943,TR
3641810944,3641819135,RU
3641819136,3641823231,DE
3641823232,3641827327,NO
@@ -174531,21 +89154,7 @@
3641860096,3641868287,IT
3641868288,3641876479,RU
3641876480,3641880575,ES
-3641880576,3641881343,DE
-3641881344,3641881359,US
-3641881360,3641881391,DE
-3641881392,3641881395,CH
-3641881396,3641881399,DE
-3641881400,3641881407,CH
-3641881408,3641881423,DE
-3641881424,3641881439,US
-3641881440,3641881447,DE
-3641881448,3641881455,CH
-3641881456,3641881567,DE
-3641881568,3641881583,CH
-3641881584,3641882727,DE
-3641882728,3641882735,CH
-3641882736,3641884671,DE
+3641880576,3641884671,DE
3641884672,3641888767,NO
3641888768,3641892863,IT
3641892864,3641896959,ES
@@ -174557,17 +89166,14 @@
3641917440,3641925631,GR
3641925632,3641933823,RU
3641933824,3641937919,GB
-3641937920,3641941759,IT
-3641941760,3641942015,EU
+3641937920,3641942015,IT
3641942016,3641950207,DE
3641950208,3641954303,FR
3641954304,3641958399,MD
-3641958400,3641960699,BE
-3641960700,3641960703,NL
+3641958400,3641960447,BE
+3641960448,3641960703,NL
3641960704,3641961727,BE
-3641961728,3641961743,NL
-3641961744,3641961791,BE
-3641961792,3641961799,US
+3641961728,3641961799,NL
3641961800,3641962495,BE
3641962496,3641966591,GB
3641966592,3641970687,IT
@@ -174582,103 +89188,28 @@
3642015744,3642019839,CH
3642019840,3642023935,SY
3642023936,3642028031,EG
-3642028032,3642028287,A2
-3642028288,3642028543,NG
-3642028544,3642028544,A2
-3642028545,3642028799,NG
-3642028800,3642028800,A2
+3642028032,3642028800,GB
3642028801,3642028863,SO
-3642028864,3642028928,A2
-3642028929,3642029055,NG
-3642029056,3642029567,A2
-3642029568,3642029823,GB
-3642029824,3642030591,A2
-3642030592,3642030847,GN
-3642030848,3642031359,A2
-3642031360,3642031615,GB
-3642031616,3642031616,A2
-3642031617,3642031743,SL
-3642031744,3642031871,A2
-3642031872,3642032127,GB
+3642028864,3642032127,GB
3642032128,3642036223,PS
3642036224,3642040319,HU
3642040320,3642048511,BY
-3642048512,3642053439,A2
-3642053440,3642053631,TZ
-3642053632,3642056703,A2
+3642048512,3642056703,GB
3642056704,3642060799,RU
3642060800,3642064895,KE
-3642064896,3642068991,SE
+3642064896,3642068991,IT
3642068992,3642073087,AL
3642073088,3642077183,LV
-3642077184,3642078999,BE
-3642079000,3642079007,NL
-3642079008,3642081271,BE
-3642081272,3642081278,US
-3642081279,3642085375,NL
+3642077184,3642085375,NL
3642085376,3642089471,RU
3642089472,3642093567,SE
3642093568,3642097663,NL
3642097664,3642101759,GB
3642101760,3642109951,NO
-3642109952,3642110463,BE
-3642110464,3642110991,NL
-3642110992,3642111023,BE
-3642111024,3642111103,NL
-3642111104,3642111486,BE
-3642111487,3642111791,NL
-3642111792,3642111839,BE
-3642111840,3642111887,NL
-3642111888,3642111903,BE
-3642111904,3642111919,NL
-3642111920,3642111935,BE
-3642111936,3642111951,NL
-3642111952,3642111983,BE
-3642111984,3642111999,NL
-3642112000,3642112031,BE
-3642112032,3642112047,NL
-3642112048,3642112063,BE
-3642112064,3642112143,NL
-3642112144,3642112159,BE
-3642112160,3642112207,NL
-3642112208,3642112239,BE
-3642112240,3642112351,NL
-3642112352,3642112383,BE
-3642112384,3642112415,NL
-3642112416,3642112447,BE
-3642112448,3642112527,NL
-3642112528,3642112543,BE
-3642112544,3642112559,NL
-3642112560,3642112575,BE
-3642112576,3642112591,NL
-3642112592,3642112607,BE
-3642112608,3642112623,NL
-3642112624,3642112655,BE
-3642112656,3642112671,NL
-3642112672,3642112687,BE
-3642112688,3642112719,NL
-3642112720,3642112751,BE
-3642112752,3642112767,NL
-3642112768,3642112831,BE
-3642112832,3642113023,NL
-3642113024,3642113215,BE
-3642113216,3642113279,NL
-3642113280,3642113311,BE
-3642113312,3642113791,NL
-3642113792,3642113823,BE
-3642113824,3642113855,NL
-3642113856,3642113919,BE
-3642113920,3642114591,NL
-3642114592,3642114815,NO
-3642114816,3642114831,NL
-3642114832,3642115095,NO
-3642115096,3642115103,NL
-3642115104,3642116095,NO
+3642109952,3642114047,BE
+3642114048,3642116095,NO
3642116096,3642117119,NL
-3642117120,3642117375,NO
-3642117376,3642117631,NL
-3642117632,3642117887,NO
-3642117888,3642118143,NL
+3642117120,3642118143,NO
3642118144,3642122239,GB
3642122240,3642126335,ES
3642126336,3642130431,IL
@@ -174688,27 +89219,12 @@
3642142720,3642146815,MT
3642146816,3642150911,DE
3642150912,3642163199,IT
-3642163200,3642164046,NL
-3642164047,3642164048,AF
-3642164049,3642167295,NL
+3642163200,3642167295,NL
3642167296,3642171391,RU
3642171392,3642175487,JO
3642175488,3642179583,DE
3642179584,3642187775,RU
-3642187776,3642190591,DK
-3642190592,3642190623,NO
-3642190624,3642191423,DK
-3642191424,3642191455,ES
-3642191456,3642191487,TR
-3642191488,3642191519,CH
-3642191520,3642191551,CY
-3642191552,3642191583,ES
-3642191584,3642191615,US
-3642191616,3642191647,ZA
-3642191648,3642191679,AU
-3642191680,3642191711,TH
-3642191712,3642191743,BR
-3642191744,3642191871,DK
+3642187776,3642191871,DK
3642191872,3642195967,BY
3642195968,3642204159,RU
3642204160,3642208255,GB
@@ -174726,28 +89242,21 @@
3642253312,3642257407,FI
3642257408,3642261503,RU
3642261504,3642265599,BA
-3642265600,3642265855,AE
-3642265856,3642269695,IR
+3642265600,3642267647,AE
+3642267648,3642269695,IR
3642269696,3642273791,UA
3642273792,3642277887,RU
3642277888,3642290175,DE
3642290176,3642294271,AL
3642294272,3642298367,GB
3642298368,3642302463,AZ
-3642302464,3642302759,SE
-3642302760,3642302764,GB
-3642302765,3642302975,SE
-3642302976,3642303007,GB
-3642303008,3642304031,SE
-3642304032,3642304036,GB
-3642304037,3642306559,SE
+3642302464,3642306559,SE
3642306560,3642310655,IR
3642310656,3642314751,DE
3642314752,3642318847,RU
3642318848,3642322943,FI
3642322944,3642327039,AT
-3642327040,3642327295,PL
-3642327296,3642331135,DE
+3642327040,3642331135,DE
3642331136,3642335231,RU
3642335232,3642339327,DE
3642339328,3642343423,FR
@@ -174768,25 +89277,11 @@
3642415104,3642417151,GB
3642417152,3642419199,DE
3642419200,3642421247,GB
-3642421248,3642422783,A2
-3642422784,3642423039,US
-3642423040,3642425087,A2
-3642425088,3642425343,US
-3642425344,3642429439,DE
+3642421248,3642429439,DE
3642429440,3642433535,GB
3642433536,3642435583,CY
3642435584,3642436607,RU
-3642436608,3642437119,CY
-3642437120,3642437631,GB
-3642437632,3642439423,CY
-3642439424,3642439459,RU
-3642439460,3642439463,CY
-3642439464,3642439471,RU
-3642439472,3642439483,CY
-3642439484,3642439495,RU
-3642439496,3642439551,CY
-3642439552,3642439567,RU
-3642439568,3642441727,CY
+3642436608,3642441727,CY
3642441728,3642449919,IT
3642449920,3642454015,CH
3642454016,3642458111,IT
@@ -174799,9 +89294,8 @@
3642486784,3642490879,GB
3642490880,3642494975,IM
3642494976,3642499071,GB
-3642499072,3642499715,SE
-3642499716,3642499716,EU
-3642499717,3642503167,SE
+3642499072,3642501119,SE
+3642501120,3642503167,LU
3642503168,3642507263,LV
3642507264,3642509311,FR
3642509312,3642511359,RU
@@ -174810,186 +89304,17 @@
3642519552,3642523647,IT
3642523648,3642527743,GB
3642527744,3642531839,PL
-3642531840,3642532351,DK
-3642532352,3642532607,GB
+3642531840,3642532607,DK
3642532608,3642532863,US
3642532864,3642535935,DK
3642535936,3642540031,IS
-3642540032,3642540063,SE
-3642540064,3642540079,NO
-3642540080,3642540135,SE
-3642540136,3642540143,NO
-3642540144,3642544127,SE
+3642540032,3642544127,SE
3642544128,3642552319,RU
-3642552320,3642552639,UA
-3642552640,3642552655,EE
-3642552656,3642552663,HU
-3642552664,3642552665,EE
-3642552666,3642552671,UA
-3642552672,3642552687,SE
-3642552688,3642552831,UA
-3642552832,3642552847,EE
-3642552848,3642553087,UA
-3642553088,3642553101,LV
-3642553102,3642553107,UA
-3642553108,3642553161,LV
-3642553162,3642553163,UA
-3642553164,3642553165,LV
-3642553166,3642553167,UA
-3642553168,3642553175,LV
-3642553176,3642553183,UA
-3642553184,3642553223,LV
-3642553224,3642553247,UA
-3642553248,3642553285,LV
-3642553286,3642553289,UA
-3642553290,3642553303,LV
-3642553304,3642553311,UA
-3642553312,3642553343,LV
-3642553344,3642553359,RU
-3642553360,3642553367,UA
-3642553368,3642553371,RU
-3642553372,3642553379,UA
-3642553380,3642553383,RU
-3642553384,3642553407,UA
-3642553408,3642553411,RU
-3642553412,3642553415,UA
-3642553416,3642553423,RU
-3642553424,3642553431,UA
-3642553432,3642553455,RU
-3642553456,3642553503,UA
-3642553504,3642553519,RU
-3642553520,3642553523,UA
-3642553524,3642553531,RU
-3642553532,3642553547,UA
-3642553548,3642553551,RU
-3642553552,3642553571,UA
-3642553572,3642553575,RU
-3642553576,3642553579,UA
-3642553580,3642553589,RU
-3642553590,3642553855,UA
-3642553856,3642553923,RU
-3642553924,3642553935,UA
-3642553936,3642553959,RU
-3642553960,3642553967,UA
-3642553968,3642553983,RU
-3642553984,3642554111,UA
-3642554112,3642554121,RU
-3642554122,3642554127,UA
-3642554128,3642554159,RU
-3642554160,3642554191,UA
-3642554192,3642554193,RU
-3642554194,3642554195,UA
-3642554196,3642554199,RU
-3642554200,3642554205,UA
-3642554206,3642554207,RU
-3642554208,3642554367,UA
-3642554368,3642554377,LT
-3642554378,3642554379,FI
-3642554380,3642554383,LT
-3642554384,3642554391,UA
-3642554392,3642554395,LT
-3642554396,3642554415,UA
-3642554416,3642554423,LT
-3642554424,3642554427,UA
-3642554428,3642554431,LT
-3642554432,3642554559,UA
-3642554560,3642554575,LT
-3642554576,3642554623,UA
-3642554624,3642554671,LV
-3642554672,3642554679,UA
-3642554680,3642554735,LV
-3642554736,3642554783,UA
-3642554784,3642554787,LV
-3642554788,3642554791,UA
-3642554792,3642554795,LV
-3642554796,3642554807,UA
-3642554808,3642554811,LV
-3642554812,3642554815,UA
-3642554816,3642554831,LV
-3642554832,3642554851,UA
-3642554852,3642554879,LV
-3642554880,3642554911,DE
-3642554912,3642554919,NL
-3642554920,3642554931,DE
-3642554932,3642554935,UA
-3642554936,3642554943,EE
-3642554944,3642554951,UA
-3642554952,3642554967,DE
-3642554968,3642554971,UA
-3642554972,3642554975,DE
-3642554976,3642554977,CZ
-3642554978,3642554979,FR
-3642554980,3642554983,BE
-3642554984,3642554987,EE
-3642554988,3642554989,FR
-3642554990,3642554991,UA
-3642554992,3642555007,DE
-3642555008,3642555015,UA
-3642555016,3642555017,NL
-3642555018,3642555023,DE
-3642555024,3642555039,NL
-3642555040,3642555045,DE
-3642555046,3642555047,UA
-3642555048,3642555051,DE
-3642555052,3642555055,UA
-3642555056,3642555067,DE
-3642555068,3642555069,NL
-3642555070,3642555071,DE
-3642555072,3642555087,GE
-3642555088,3642555103,DE
-3642555104,3642555111,CZ
-3642555112,3642555119,UA
-3642555120,3642555135,DE
-3642555136,3642555143,LT
-3642555144,3642555151,UA
-3642555152,3642555153,LT
-3642555154,3642555199,UA
-3642555200,3642555215,LT
-3642555216,3642555227,UA
-3642555228,3642555289,LT
-3642555290,3642555311,UA
-3642555312,3642555359,LT
-3642555360,3642555375,UA
-3642555376,3642555391,LT
-3642555392,3642555423,PL
-3642555424,3642555427,EE
-3642555428,3642555431,PL
-3642555432,3642555439,EE
-3642555440,3642555445,PL
-3642555446,3642555455,UA
-3642555456,3642555471,PL
-3642555472,3642555483,UA
-3642555484,3642555507,PL
-3642555508,3642555519,UA
-3642555520,3642555583,PL
-3642555584,3642555647,UA
-3642555648,3642555683,SE
-3642555684,3642555685,GB
-3642555686,3642555687,EE
-3642555688,3642555691,UA
-3642555692,3642555695,SE
-3642555696,3642555703,UA
-3642555704,3642555707,FI
-3642555708,3642555711,SE
-3642555712,3642555727,RU
-3642555728,3642555735,SE
-3642555736,3642555743,GB
-3642555744,3642555759,SE
-3642555760,3642555783,UA
-3642555784,3642555787,GB
-3642555788,3642555789,UA
-3642555790,3642555791,SE
-3642555792,3642555795,CZ
-3642555796,3642555807,UA
-3642555808,3642555827,SE
-3642555828,3642555839,UA
-3642555840,3642555903,EE
-3642555904,3642556159,UA
-3642556160,3642556415,LV
+3642552320,3642554198,UA
+3642554199,3642554199,RU
+3642554200,3642556415,UA
3642556416,3642560511,CZ
-3642560512,3642561535,KG
-3642561536,3642561791,US
-3642561792,3642564607,KG
+3642560512,3642564607,KG
3642564608,3642568703,DE
3642568704,3642572799,RU
3642572800,3642576895,IT
@@ -175004,10 +89329,7 @@
3642613760,3642617855,FI
3642617856,3642621951,JO
3642621952,3642626047,IT
-3642626048,3642626303,A2
-3642626304,3642628607,BE
-3642628608,3642628863,A2
-3642628864,3642630143,BE
+3642626048,3642630143,BE
3642630144,3642634239,DK
3642634240,3642638335,DE
3642638336,3642642431,CZ
@@ -175021,9 +89343,7 @@
3642675200,3642679295,BG
3642679296,3642683391,DE
3642683392,3642687487,RU
-3642687488,3642691071,GB
-3642691072,3642691327,LU
-3642691328,3642691583,GB
+3642687488,3642691583,GB
3642691584,3642695679,DE
3642695680,3642699775,SK
3642699776,3642703871,CZ
@@ -175036,9 +89356,7 @@
3642736640,3642740735,CZ
3642740736,3642744831,DE
3642744832,3642753023,TR
-3642753024,3642858217,GB
-3642858218,3642858218,EU
-3642858219,3643801599,GB
+3642753024,3643801599,GB
3643801600,3644063743,DE
3644063744,3644325887,EG
3644325888,3644588031,IT
@@ -175050,9 +89368,7 @@
3644854272,3644858367,AZ
3644858368,3644862463,FI
3644862464,3644866559,FR
-3644866560,3644871167,DE
-3644871168,3644871423,AT
-3644871424,3644874751,DE
+3644866560,3644874751,DE
3644874752,3644878847,ML
3644878848,3644882943,GB
3644882944,3644887039,RU
@@ -175061,43 +89377,27 @@
3644895232,3644899327,FI
3644899328,3644903423,IT
3644903424,3644907519,TR
-3644907520,3644908983,GB
-3644908984,3644908991,US
-3644908992,3644909855,GB
-3644909856,3644909859,IS
-3644909860,3644911615,GB
+3644907520,3644911615,GB
3644911616,3644915711,BE
3644915712,3644919807,RU
3644919808,3644923903,DE
-3644923904,3644924159,IL
-3644924160,3644924671,GB
-3644924672,3644924927,IL
+3644923904,3644924927,IL
3644924928,3644925183,US
-3644925184,3644925439,IL
-3644925440,3644925695,US
-3644925696,3644925951,IL
-3644925952,3644927231,US
-3644927232,3644927743,IL
-3644927744,3644927999,US
+3644925184,3644926463,IL
+3644926464,3644926719,US
+3644926720,3644927999,IL
3644928000,3644932095,GI
3644932096,3644936191,IT
3644936192,3644940287,RU
3644940288,3644948479,HU
3644948480,3644952575,DE
3644952576,3644960767,GB
-3644960768,3644961311,DE
-3644961312,3644961343,TR
-3644961344,3644961791,DE
-3644961792,3644964351,TR
-3644964352,3644964383,DE
-3644964384,3644964863,TR
+3644960768,3644964863,TR
3644964864,3644968959,RS
3644968960,3644973055,RU
3644973056,3644977151,NO
3644977152,3644981247,UA
-3644981248,3644983807,BE
-3644983808,3644984319,NL
-3644984320,3644985343,BE
+3644981248,3644985343,BE
3644985344,3644989439,RU
3644989440,3644997631,DE
3644997632,3645005823,RU
@@ -175107,8 +89407,7 @@
3645018112,3645022207,RU
3645022208,3645023743,CZ
3645023744,3645023999,SK
-3645024000,3645030143,CZ
-3645030144,3645030399,SK
+3645024000,3645030399,CZ
3645030400,3645038591,IR
3645038592,3645046783,PS
3645046784,3645050879,RU
@@ -175125,13 +89424,7 @@
3645091840,3645095935,RU
3645095936,3645104127,PL
3645104128,3645112319,NL
-3645112320,3645113919,DE
-3645113920,3645113927,UA
-3645113928,3645113935,DE
-3645113936,3645113943,US
-3645113944,3645114079,DE
-3645114080,3645114095,IL
-3645114096,3645116415,DE
+3645112320,3645116415,DE
3645116416,3645120511,GB
3645120512,3645124607,SE
3645124608,3645128703,NL
@@ -175139,40 +89432,18 @@
3645132800,3645136895,HR
3645136896,3645145087,NO
3645145088,3645149183,GB
-3645149184,3645149487,DE
-3645149488,3645149495,GB
-3645149496,3645150615,DE
-3645150616,3645150639,US
-3645150640,3645150975,DE
-3645150976,3645151231,US
-3645151232,3645161471,DE
-3645161472,3645165567,AT
+3645149184,3645161471,DE
+3645161472,3645163519,AT
+3645163520,3645164031,GB
+3645164032,3645165567,AT
3645165568,3645169663,TR
3645169664,3645173759,CH
3645173760,3645177855,GB
3645177856,3645181951,GR
-3645181952,3645182703,FR
-3645182704,3645182719,GB
-3645182720,3645183327,FR
-3645183328,3645183359,GB
-3645183360,3645183375,FR
+3645181952,3645183375,FR
3645183376,3645183383,SA
-3645183384,3645183439,FR
-3645183440,3645183455,US
-3645183456,3645183743,FR
-3645183744,3645183871,GB
-3645183872,3645183895,FR
-3645183896,3645183899,GB
-3645183900,3645183903,FR
-3645183904,3645183935,IE
-3645183936,3645184255,FR
-3645184256,3645184447,GB
-3645184448,3645184471,FR
-3645184472,3645184511,GB
-3645184512,3645184863,FR
-3645184864,3645184895,GB
-3645184896,3645185663,FR
-3645185664,3645185775,GB
+3645183384,3645185759,FR
+3645185760,3645185775,GB
3645185776,3645186047,FR
3645186048,3645190143,GB
3645190144,3645194239,FI
@@ -175193,22 +89464,14 @@
3645259776,3645263871,PT
3645263872,3645267967,FR
3645267968,3645276159,RU
-3645276160,3645278423,DE
-3645278424,3645278431,PT
-3645278432,3645280255,DE
-3645280256,3645281279,IT
-3645281280,3645281535,DE
-3645281536,3645281791,IT
-3645281792,3645281919,HU
-3645281920,3645284351,IT
+3645276160,3645280255,DE
+3645280256,3645284351,IT
3645284352,3645288447,DE
-3645288448,3645292543,FR
-3645292544,3645295103,DE
-3645295104,3645295359,NL
-3645295360,3645296639,DE
-3645296640,3645297407,NL
-3645297408,3645297663,EU
-3645297664,3645300735,NL
+3645288448,3645288895,FR
+3645288896,3645288959,LU
+3645288960,3645292543,FR
+3645292544,3645296639,DE
+3645296640,3645300735,NL
3645300736,3645304831,BE
3645304832,3645308927,ES
3645308928,3645313023,DK
@@ -175217,28 +89480,8 @@
3645321216,3645325311,BA
3645325312,3645329407,IT
3645329408,3645333503,CH
-3645333504,3645334039,DE
-3645334040,3645334271,EU
-3645334272,3645336927,DE
-3645336928,3645336935,EU
-3645336936,3645336991,DE
-3645336992,3645337007,EU
-3645337008,3645337023,DE
-3645337024,3645337087,EU
-3645337088,3645337599,DE
-3645337600,3645337631,FR
-3645337632,3645337663,BE
-3645337664,3645339295,FR
-3645339296,3645339359,BE
-3645339360,3645339903,FR
-3645339904,3645339967,BE
-3645339968,3645340415,FR
-3645340416,3645340447,NL
-3645340448,3645340543,FR
-3645340544,3645340927,BE
-3645340928,3645341183,FR
-3645341184,3645341439,BE
-3645341440,3645341695,FR
+3645334272,3645335039,DE
+3645337600,3645341695,FR
3645341696,3645345791,RU
3645345792,3645349887,FI
3645349888,3645353983,RU
@@ -175255,9 +89498,7 @@
3645390848,3645399039,SI
3645399040,3645403135,IT
3645403136,3645407231,GB
-3645407232,3645408255,DE
-3645408256,3645408319,CH
-3645408320,3645411327,DE
+3645407232,3645411327,DE
3645411328,3645415423,RU
3645415424,3645423615,GB
3645423616,3645431807,DE
@@ -175266,10 +89507,7 @@
3645440000,3645444095,SE
3645444096,3645448191,SK
3645448192,3645454335,DE
-3645454336,3645455359,RU
-3645455360,3645455615,DE
-3645455616,3645456127,RU
-3645456128,3645456383,DE
+3645454336,3645456383,RU
3645456384,3645460479,GB
3645460480,3645464575,UA
3645464576,3645468671,SE
@@ -175281,15 +89519,7 @@
3645489152,3645493247,RU
3645493248,3645501439,IT
3645501440,3645505535,PL
-3645505536,3645506559,DE
-3645506560,3645506815,AT
-3645506816,3645507583,DE
-3645507584,3645507587,AT
-3645507588,3645507591,DE
-3645507592,3645507595,AT
-3645507596,3645507599,DE
-3645507600,3645507607,AT
-3645507608,3645509631,DE
+3645505536,3645509631,DE
3645509632,3645511679,NL
3645511680,3645513727,TR
3645513728,3645517823,RU
@@ -175302,39 +89532,17 @@
3645546496,3645550591,RU
3645550592,3645558783,DE
3645558784,3645562879,DK
-3645562880,3645563135,ZW
+3645562880,3645563135,GB
3645563136,3645564671,LS
-3645564672,3645564927,ZW
-3645564928,3645565055,SO
-3645565056,3645565183,GB
-3645565184,3645565439,ZW
-3645565440,3645565695,GB
-3645565696,3645566975,ZW
+3645564672,3645565951,GB
+3645565952,3645566975,ZW
3645566976,3645571071,RU
3645571072,3645575167,IE
3645575168,3645579263,CH
3645579264,3645583359,NL
3645583360,3645587455,PL
-3645587456,3645594711,SK
-3645594712,3645594719,SR
-3645594720,3645594799,SK
-3645594800,3645594815,SR
-3645594816,3645594863,SK
-3645594864,3645594871,SR
-3645594872,3645595647,SK
-3645595648,3645597751,SE
-3645597752,3645597759,GB
-3645597760,3645601471,SE
-3645601472,3645601487,NO
-3645601488,3645601503,SE
-3645601504,3645601507,GB
-3645601508,3645601759,SE
-3645601760,3645601775,FR
-3645601776,3645601779,GB
-3645601780,3645601783,US
-3645601784,3645601799,SE
-3645601800,3645601803,GB
-3645601804,3645603839,SE
+3645587456,3645595647,SK
+3645595648,3645603839,SE
3645603840,3645612031,BG
3645612032,3645616127,GB
3645616128,3645620223,AT
@@ -175349,21 +89557,35 @@
3645657088,3645661183,SE
3645661184,3645665279,DE
3645665280,3645669375,PL
-3645669376,3645669631,ES
-3645669632,3645669855,FR
-3645669856,3645670399,ES
-3645670400,3645670527,FR
+3645669376,3645669599,ES
+3645669600,3645669887,PT
+3645669888,3645670399,ES
+3645670400,3645670427,PT
+3645670428,3645670429,ES
+3645670430,3645670430,PT
+3645670431,3645670433,ES
+3645670434,3645670436,PT
+3645670437,3645670441,ES
+3645670442,3645670456,PT
+3645670457,3645670460,ES
+3645670461,3645670508,PT
+3645670509,3645670509,ES
+3645670510,3645670527,PT
3645670528,3645670655,ES
-3645670656,3645670911,FR
+3645670656,3645670911,PT
3645670912,3645673471,ES
-3645673472,3645673535,FR
-3645673536,3645675263,ES
-3645675264,3645675519,PT
+3645673472,3645673535,PT
+3645673536,3645674239,ES
+3645674240,3645674271,PT
+3645674272,3645675007,ES
+3645675008,3645675519,PT
3645675520,3645675759,ES
-3645675760,3645675775,FR
+3645675760,3645675775,PT
3645675776,3645676015,ES
-3645676016,3645676031,FR
-3645676032,3645677567,ES
+3645676016,3645676031,PT
+3645676032,3645676543,ES
+3645676544,3645676799,PT
+3645676800,3645677567,ES
3645677568,3645681663,AT
3645681664,3645685759,RU
3645685760,3645689855,UA
@@ -175383,879 +89605,15 @@
3645751296,3645755391,FI
3645755392,3645759487,UA
3645759488,3645763583,FR
-3645763584,3645763585,DE
-3645763586,3645763587,IT
-3645763588,3645763588,DE
-3645763589,3645763589,IE
-3645763590,3645763590,ES
-3645763591,3645763591,BE
-3645763592,3645763593,DE
-3645763594,3645763594,CH
-3645763595,3645763595,IT
-3645763596,3645763597,DE
-3645763598,3645763598,NL
-3645763599,3645763600,DE
-3645763601,3645763601,GR
-3645763602,3645763603,FR
-3645763604,3645763609,DE
-3645763610,3645763610,PL
-3645763611,3645763612,DE
-3645763613,3645763613,HU
-3645763614,3645763614,CH
-3645763615,3645763615,ES
-3645763616,3645763616,FR
-3645763617,3645763617,DE
-3645763618,3645763618,ES
-3645763619,3645763619,DE
-3645763620,3645763620,FR
-3645763621,3645763621,CH
-3645763622,3645763622,GB
-3645763623,3645763623,FR
-3645763624,3645763624,DE
-3645763625,3645763625,FR
-3645763626,3645763626,NL
-3645763627,3645763627,AT
-3645763628,3645763629,DE
-3645763630,3645763631,NL
-3645763632,3645763633,GB
-3645763634,3645763634,NL
-3645763635,3645763635,DE
-3645763636,3645763636,AT
-3645763637,3645763637,FR
-3645763638,3645763638,NL
-3645763639,3645763639,DE
-3645763640,3645763640,HU
-3645763641,3645763641,IT
-3645763642,3645763642,GB
-3645763643,3645763645,DE
-3645763646,3645763647,ES
-3645763648,3645763648,DE
-3645763649,3645763649,IL
-3645763650,3645763650,DE
-3645763651,3645763651,NL
-3645763652,3645763653,DE
-3645763654,3645763654,ES
-3645763655,3645763660,DE
-3645763661,3645763662,FR
-3645763663,3645763663,HU
-3645763664,3645763665,DE
-3645763666,3645763666,NL
-3645763667,3645763670,DE
-3645763671,3645763671,FR
-3645763672,3645763672,DE
-3645763673,3645763673,BE
-3645763674,3645763676,DE
-3645763677,3645763678,HU
-3645763679,3645763679,IT
-3645763680,3645763680,DE
-3645763681,3645763681,CH
-3645763682,3645763682,DE
-3645763683,3645763683,NO
-3645763684,3645763684,CH
-3645763685,3645763685,NL
-3645763686,3645763686,DE
-3645763687,3645763687,ES
-3645763688,3645763690,NL
-3645763691,3645763691,CH
-3645763692,3645763692,DE
-3645763693,3645763693,NL
-3645763694,3645763696,DE
-3645763697,3645763697,NL
-3645763698,3645763698,DE
-3645763699,3645763699,BE
-3645763700,3645763700,NL
-3645763701,3645763701,DE
-3645763702,3645763702,IT
-3645763703,3645763703,CH
-3645763704,3645763705,DE
-3645763706,3645763706,GB
-3645763707,3645763707,NL
-3645763708,3645763708,GR
-3645763709,3645763709,NL
-3645763710,3645763710,GB
-3645763711,3645763713,NL
-3645763714,3645763714,DE
-3645763715,3645763715,NL
-3645763716,3645763716,DE
-3645763717,3645763717,NL
-3645763718,3645763719,DE
-3645763720,3645763720,IT
-3645763721,3645763721,DE
-3645763722,3645763722,GR
-3645763723,3645763723,NL
-3645763724,3645763726,IT
-3645763727,3645763727,NL
-3645763728,3645763728,GR
-3645763729,3645763730,IT
-3645763731,3645763732,DE
-3645763733,3645763733,FR
-3645763734,3645763734,DE
-3645763735,3645763735,GB
-3645763736,3645763736,FR
-3645763737,3645763737,DE
-3645763738,3645763738,CH
-3645763739,3645763741,ES
-3645763742,3645763742,DE
-3645763743,3645763743,IT
-3645763744,3645763744,DE
-3645763745,3645763745,FR
-3645763746,3645763746,DE
-3645763747,3645763752,NL
-3645763753,3645763753,ES
-3645763754,3645763755,NL
-3645763756,3645763756,DE
-3645763757,3645763757,BE
-3645763758,3645763758,FR
-3645763759,3645763760,NL
-3645763761,3645763761,SE
-3645763762,3645763762,ES
-3645763763,3645763764,NL
-3645763765,3645763765,DE
-3645763766,3645763766,IL
-3645763767,3645763768,NL
-3645763769,3645763769,FR
-3645763770,3645763770,NL
-3645763771,3645763771,GB
-3645763772,3645763772,CH
-3645763773,3645763773,DE
-3645763774,3645763774,NL
-3645763775,3645763775,DE
-3645763776,3645763776,NL
-3645763777,3645763777,BE
-3645763778,3645763781,DE
-3645763782,3645763782,NL
-3645763783,3645763783,DE
-3645763784,3645763784,NL
-3645763785,3645763785,DE
-3645763786,3645763786,CH
-3645763787,3645763787,NL
-3645763788,3645763788,IE
-3645763789,3645763789,AT
-3645763790,3645763790,ES
-3645763791,3645763791,IT
-3645763792,3645763792,FR
-3645763793,3645763793,ES
-3645763794,3645763794,DE
-3645763795,3645763795,IT
-3645763796,3645763797,DE
-3645763798,3645763798,FR
-3645763799,3645763801,DE
-3645763802,3645763802,ES
-3645763803,3645763803,NL
-3645763804,3645763806,DE
-3645763807,3645763807,IT
-3645763808,3645763808,DE
-3645763809,3645763809,IT
-3645763810,3645763810,NL
-3645763811,3645763813,DE
-3645763814,3645763814,IT
-3645763815,3645763816,DE
-3645763817,3645763817,GR
-3645763818,3645763818,ES
-3645763819,3645763825,DE
-3645763826,3645763826,IT
-3645763827,3645763827,ZA
-3645763828,3645763841,DE
-3645763842,3645763842,CH
-3645763843,3645763845,DE
-3645763846,3645763846,FR
-3645763847,3645763847,IT
-3645763848,3645763849,DE
-3645763850,3645763850,IT
-3645763851,3645763851,GB
-3645763852,3645763852,DE
-3645763853,3645763853,CH
-3645763854,3645763854,NL
-3645763855,3645763858,DE
-3645763859,3645763859,DK
-3645763860,3645763860,IT
-3645763861,3645763861,DE
-3645763862,3645763862,FR
-3645763863,3645763864,ES
-3645763865,3645763865,CH
-3645763866,3645763866,DE
-3645763867,3645763868,GB
-3645763869,3645763869,DE
-3645763870,3645763870,HU
-3645763871,3645763874,DE
-3645763875,3645763875,GB
-3645763876,3645763876,PL
-3645763877,3645763877,FR
-3645763878,3645763879,DE
-3645763880,3645763881,FR
-3645763882,3645763882,DE
-3645763883,3645763883,NL
-3645763884,3645763884,IT
-3645763885,3645763886,DE
-3645763887,3645763887,FR
-3645763888,3645763888,DE
-3645763889,3645763889,GR
-3645763890,3645763890,ES
-3645763891,3645763894,DE
-3645763895,3645763895,ES
-3645763896,3645763896,DE
-3645763897,3645763897,BE
-3645763898,3645763898,NL
-3645763899,3645763899,ES
-3645763900,3645763900,NL
-3645763901,3645763902,LU
-3645763903,3645763903,DE
-3645763904,3645763904,BE
-3645763905,3645763905,RS
-3645763906,3645763906,DE
-3645763907,3645763908,IT
-3645763909,3645763909,DE
-3645763910,3645763910,ES
-3645763911,3645763911,DE
-3645763912,3645763912,IE
-3645763913,3645763913,PT
-3645763914,3645763914,DE
-3645763915,3645763915,IL
-3645763916,3645763916,BE
-3645763917,3645763917,DE
-3645763918,3645763918,IT
-3645763919,3645763919,GB
-3645763920,3645763920,DE
-3645763921,3645763921,CH
-3645763922,3645763922,ES
-3645763923,3645763923,GB
-3645763924,3645763924,PL
-3645763925,3645763926,DE
-3645763927,3645763927,HU
-3645763928,3645763928,FR
-3645763929,3645763929,NL
-3645763930,3645763930,ES
-3645763931,3645763931,FR
-3645763932,3645763932,DE
-3645763933,3645763933,FR
-3645763934,3645763934,IT
-3645763935,3645763935,FR
-3645763936,3645763936,DE
-3645763937,3645763937,FR
-3645763938,3645763938,DE
-3645763939,3645763939,NL
-3645763940,3645763941,DE
-3645763942,3645763942,CH
-3645763943,3645763943,ES
-3645763944,3645763944,CH
-3645763945,3645763945,DE
-3645763946,3645763947,HU
-3645763948,3645763949,DE
-3645763950,3645763950,ES
-3645763951,3645763951,CH
-3645763952,3645763952,IT
-3645763953,3645763953,TR
-3645763954,3645763954,IT
-3645763955,3645763955,FR
-3645763956,3645763956,DE
-3645763957,3645763957,GB
-3645763958,3645763958,AT
-3645763959,3645763959,DE
-3645763960,3645763960,IT
-3645763961,3645763961,DE
-3645763962,3645763962,ES
-3645763963,3645763964,DE
-3645763965,3645763965,AT
-3645763966,3645763966,DE
-3645763967,3645763967,IT
-3645763968,3645763968,DE
-3645763969,3645763969,ES
-3645763970,3645763970,IT
-3645763971,3645763971,ES
-3645763972,3645763972,IT
-3645763973,3645763973,BE
-3645763974,3645763974,GB
-3645763975,3645763975,AT
-3645763976,3645763976,IT
-3645763977,3645763977,DE
-3645763978,3645763978,NL
-3645763979,3645763979,IT
-3645763980,3645763981,DE
-3645763982,3645763982,IT
-3645763983,3645763984,FR
-3645763985,3645763985,NL
-3645763986,3645763986,DE
-3645763987,3645763987,PL
-3645763988,3645763988,CH
-3645763989,3645763989,FR
-3645763990,3645763991,DE
-3645763992,3645763992,NL
-3645763993,3645763993,DE
-3645763994,3645763994,IT
-3645763995,3645763995,ES
-3645763996,3645764000,DE
-3645764001,3645764001,IT
-3645764002,3645764007,DE
-3645764008,3645764008,PL
-3645764009,3645764010,FR
-3645764011,3645764012,DE
-3645764013,3645764013,HU
-3645764014,3645764015,GB
-3645764016,3645764016,IT
-3645764017,3645764017,GB
-3645764018,3645764018,DE
-3645764019,3645764019,NL
-3645764020,3645764020,IT
-3645764021,3645764021,DE
-3645764022,3645764022,ES
-3645764023,3645764023,FR
-3645764024,3645764026,ES
-3645764027,3645764028,DE
-3645764029,3645764029,ES
-3645764030,3645764030,DE
-3645764031,3645764031,NL
-3645764032,3645764032,FR
-3645764033,3645764034,DE
-3645764035,3645764035,IT
-3645764036,3645764037,ES
-3645764038,3645764038,IT
-3645764039,3645764039,HU
-3645764040,3645764040,ES
-3645764041,3645764041,DE
-3645764042,3645764042,CH
-3645764043,3645764043,DE
-3645764044,3645764044,ES
-3645764045,3645764045,AE
-3645764046,3645764046,ES
-3645764047,3645764048,DE
-3645764049,3645764049,ES
-3645764050,3645764051,DE
-3645764052,3645764052,FR
-3645764053,3645764055,DE
-3645764056,3645764056,BE
-3645764057,3645764057,DE
-3645764058,3645764058,TR
-3645764059,3645764059,DE
-3645764060,3645764060,FR
-3645764061,3645764061,IT
-3645764062,3645764062,SE
-3645764063,3645764063,AT
-3645764064,3645764064,SI
-3645764065,3645764065,DE
-3645764066,3645764066,IT
-3645764067,3645764067,DE
-3645764068,3645764068,IT
-3645764069,3645764069,CH
-3645764070,3645764070,GB
-3645764071,3645764074,DE
-3645764075,3645764075,SE
-3645764076,3645764076,GR
-3645764077,3645764078,DE
-3645764079,3645764079,ES
-3645764080,3645764080,DE
-3645764081,3645764081,GB
-3645764082,3645764084,DE
-3645764085,3645764085,IE
-3645764086,3645764086,IT
-3645764087,3645764087,CH
-3645764088,3645764091,DE
-3645764092,3645764092,FR
-3645764093,3645764097,DE
-3645764098,3645764098,IT
-3645764099,3645764099,DE
-3645764100,3645764100,BE
-3645764101,3645764102,DE
-3645764103,3645764103,SK
-3645764104,3645764105,IT
-3645764106,3645764106,NL
-3645764107,3645764107,GR
-3645764108,3645764108,PL
-3645764109,3645764109,CH
-3645764110,3645764110,DK
-3645764111,3645764111,DE
-3645764112,3645764112,IT
-3645764113,3645764113,ES
-3645764114,3645764114,DE
-3645764115,3645764115,GB
-3645764116,3645764116,GR
-3645764117,3645764117,DE
-3645764118,3645764118,GB
-3645764119,3645764119,CH
-3645764120,3645764120,FR
-3645764121,3645764121,IT
-3645764122,3645764122,DE
-3645764123,3645764123,PL
-3645764124,3645764124,DE
-3645764125,3645764125,NO
-3645764126,3645764126,LU
-3645764127,3645764127,GB
-3645764128,3645764128,GR
-3645764129,3645764129,HR
-3645764130,3645764130,FR
-3645764131,3645764131,DE
-3645764132,3645764132,ES
-3645764133,3645764133,CY
-3645764134,3645764134,DE
-3645764135,3645764135,IT
-3645764136,3645764136,BE
-3645764137,3645764137,DE
-3645764138,3645764138,CH
-3645764139,3645764140,DE
-3645764141,3645764141,ES
-3645764142,3645764142,HU
-3645764143,3645764145,DE
-3645764146,3645764147,NL
-3645764148,3645764148,DK
-3645764149,3645764149,DE
-3645764150,3645764150,ES
-3645764151,3645764154,DE
-3645764155,3645764155,ES
-3645764156,3645764156,AT
-3645764157,3645764158,DE
-3645764159,3645764159,IT
-3645764160,3645764160,BE
-3645764161,3645764161,ES
-3645764162,3645764162,DE
-3645764163,3645764163,NL
-3645764164,3645764164,DE
-3645764165,3645764165,CH
-3645764166,3645764166,HU
-3645764167,3645764167,DE
-3645764168,3645764168,ES
-3645764169,3645764169,GR
-3645764170,3645764170,IT
-3645764171,3645764172,DE
-3645764173,3645764173,IT
-3645764174,3645764174,DE
-3645764175,3645764175,PL
-3645764176,3645764176,DE
-3645764177,3645764177,GB
-3645764178,3645764178,ES
-3645764179,3645764179,GR
-3645764180,3645764181,DE
-3645764182,3645764182,FR
-3645764183,3645764184,DE
-3645764185,3645764185,IT
-3645764186,3645764186,FR
-3645764187,3645764187,BE
-3645764188,3645764188,GB
-3645764189,3645764189,FR
-3645764190,3645764190,IT
-3645764191,3645764191,GB
-3645764192,3645764193,DE
-3645764194,3645764194,ES
-3645764195,3645764195,DE
-3645764196,3645764196,IT
-3645764197,3645764197,DE
-3645764198,3645764198,GR
-3645764199,3645764199,DE
-3645764200,3645764200,IT
-3645764201,3645764201,BE
-3645764202,3645764202,IT
-3645764203,3645764203,DE
-3645764204,3645764204,ES
-3645764205,3645764205,FR
-3645764206,3645764206,DE
-3645764207,3645764207,IT
-3645764208,3645764208,NO
-3645764209,3645764210,DE
-3645764211,3645764211,FR
-3645764212,3645764212,NL
-3645764213,3645764213,GB
-3645764214,3645764214,NL
-3645764215,3645764216,DE
-3645764217,3645764217,IT
-3645764218,3645764218,CH
-3645764219,3645764219,FR
-3645764220,3645764220,NL
-3645764221,3645764221,IT
-3645764222,3645764222,BE
-3645764223,3645764223,DE
-3645764224,3645764224,ES
-3645764225,3645764225,GB
-3645764226,3645764226,DE
-3645764227,3645764227,CH
-3645764228,3645764228,FR
-3645764229,3645764229,PL
-3645764230,3645764230,NL
-3645764231,3645764231,CH
-3645764232,3645764234,DE
-3645764235,3645764235,FR
-3645764236,3645764236,IT
-3645764237,3645764238,DE
-3645764239,3645764240,ES
-3645764241,3645764241,DE
-3645764242,3645764242,AT
-3645764243,3645764243,GR
-3645764244,3645764244,FR
-3645764245,3645764246,NL
-3645764247,3645764247,IT
-3645764248,3645764250,DE
-3645764251,3645764251,FR
-3645764252,3645764253,ES
-3645764254,3645764254,DE
-3645764255,3645764255,CH
-3645764256,3645764257,DE
-3645764258,3645764258,NL
-3645764259,3645764259,IT
-3645764260,3645764260,DE
-3645764261,3645764261,GB
-3645764262,3645764262,BE
-3645764263,3645764264,IT
-3645764265,3645764265,TR
-3645764266,3645764269,DE
-3645764270,3645764270,ES
-3645764271,3645764271,IT
-3645764272,3645764272,DE
-3645764273,3645764273,IT
-3645764274,3645764274,DE
-3645764275,3645764275,FR
-3645764276,3645764277,DE
-3645764278,3645764278,NL
-3645764279,3645764279,ES
-3645764280,3645764280,IT
-3645764281,3645764281,DE
-3645764282,3645764282,NL
-3645764283,3645764284,FR
-3645764285,3645764285,IT
-3645764286,3645764286,NL
-3645764287,3645764287,BE
-3645764288,3645764288,FR
-3645764289,3645764289,NL
-3645764290,3645764290,DE
-3645764291,3645764291,NL
-3645764292,3645764292,FR
-3645764293,3645764294,IT
-3645764295,3645764295,ES
-3645764296,3645764297,DE
-3645764298,3645764298,GR
-3645764299,3645764299,NL
-3645764300,3645764300,PL
-3645764301,3645764301,GR
-3645764302,3645764302,IT
-3645764303,3645764303,DE
-3645764304,3645764304,ES
-3645764305,3645764305,GB
-3645764306,3645764306,BM
-3645764307,3645764307,NL
-3645764308,3645764309,DE
-3645764310,3645764310,ZA
-3645764311,3645764313,ES
-3645764314,3645764315,DE
-3645764316,3645764316,IT
-3645764317,3645764317,ES
-3645764318,3645764318,HU
-3645764319,3645764319,FR
-3645764320,3645764320,IT
-3645764321,3645764321,DE
-3645764322,3645764322,CH
-3645764323,3645764323,DE
-3645764324,3645764324,FR
-3645764325,3645764325,DE
-3645764326,3645764326,ES
-3645764327,3645764327,DK
-3645764328,3645764328,CH
-3645764329,3645764329,ES
-3645764330,3645764330,DE
-3645764331,3645764331,RU
-3645764332,3645764332,NL
-3645764333,3645764333,GR
-3645764334,3645764334,ES
-3645764335,3645764335,DE
-3645764336,3645764336,MY
-3645764337,3645764337,HU
-3645764338,3645764338,NL
-3645764339,3645764340,DE
-3645764341,3645764341,IE
-3645764342,3645764342,IT
-3645764343,3645764343,ES
-3645764344,3645764345,DE
-3645764346,3645764346,IT
-3645764347,3645764347,IE
-3645764348,3645764348,NL
-3645764349,3645764349,BE
-3645764350,3645764350,IT
-3645764351,3645764356,DE
-3645764357,3645764357,RU
-3645764358,3645764358,FR
-3645764359,3645764359,IT
-3645764360,3645764360,DE
-3645764361,3645764361,CH
-3645764362,3645764362,GB
-3645764363,3645764364,NL
-3645764365,3645764365,BE
-3645764366,3645764367,DE
-3645764368,3645764368,IT
-3645764369,3645764369,DE
-3645764370,3645764370,GB
-3645764371,3645764371,ES
-3645764372,3645764373,FR
-3645764374,3645764375,DE
-3645764376,3645764377,NL
-3645764378,3645764378,DE
-3645764379,3645764380,GB
-3645764381,3645764381,DE
-3645764382,3645764382,NL
-3645764383,3645764383,FR
-3645764384,3645764384,AT
-3645764385,3645764388,DE
-3645764389,3645764389,NL
-3645764390,3645764390,DE
-3645764391,3645764391,NL
-3645764392,3645764392,GR
-3645764393,3645764393,DE
-3645764394,3645764394,FR
-3645764395,3645764396,NL
-3645764397,3645764397,DE
-3645764398,3645764398,NL
-3645764399,3645764399,DE
-3645764400,3645764401,NL
-3645764402,3645764403,FR
-3645764404,3645764406,NL
-3645764407,3645764408,DE
-3645764409,3645764409,FR
-3645764410,3645764410,DE
-3645764411,3645764411,FR
-3645764412,3645764412,NL
-3645764413,3645764413,FR
-3645764414,3645764414,NL
-3645764415,3645764415,DE
-3645764416,3645764417,NL
-3645764418,3645764418,DE
-3645764419,3645764419,NL
-3645764420,3645764420,GB
-3645764421,3645764421,DE
-3645764422,3645764422,IT
-3645764423,3645764423,HU
-3645764424,3645764424,DE
-3645764425,3645764425,GB
-3645764426,3645764433,DE
-3645764434,3645764434,NL
-3645764435,3645764435,AT
-3645764436,3645764436,NL
-3645764437,3645764437,FR
-3645764438,3645764439,DE
-3645764440,3645764440,CH
-3645764441,3645764441,DE
-3645764442,3645764442,IT
-3645764443,3645764445,DE
-3645764446,3645764446,NL
-3645764447,3645764456,DE
-3645764457,3645764457,IT
-3645764458,3645764458,AT
-3645764459,3645764459,IT
-3645764460,3645764462,DE
-3645764463,3645764463,NL
-3645764464,3645764464,BE
-3645764465,3645764465,DE
-3645764466,3645764466,GR
-3645764467,3645764467,DE
-3645764468,3645764468,IT
-3645764469,3645764470,DE
-3645764471,3645764471,IT
-3645764472,3645764472,GR
-3645764473,3645764473,NL
-3645764474,3645764474,DE
-3645764475,3645764475,GR
-3645764476,3645764476,DE
-3645764477,3645764477,NL
-3645764478,3645764478,GB
-3645764479,3645764479,DE
-3645764480,3645764481,NL
-3645764482,3645764482,DE
-3645764483,3645764483,NL
-3645764484,3645764484,FR
-3645764485,3645764485,NL
-3645764486,3645764486,IE
-3645764487,3645764487,DE
-3645764488,3645764490,NL
-3645764491,3645764491,DE
-3645764492,3645764492,NL
-3645764493,3645764493,ES
-3645764494,3645764494,FR
-3645764495,3645764495,NL
-3645764496,3645764496,DE
-3645764497,3645764497,NL
-3645764498,3645764498,FR
-3645764499,3645764500,NL
-3645764501,3645764501,DE
-3645764502,3645764505,NL
-3645764506,3645764506,DE
-3645764507,3645764507,ES
-3645764508,3645764508,IT
-3645764509,3645764509,NL
-3645764510,3645764510,DE
-3645764511,3645764511,NL
-3645764512,3645764512,DE
-3645764513,3645764513,NL
-3645764514,3645764514,ES
-3645764515,3645764515,DE
-3645764516,3645764516,NL
-3645764517,3645764518,DE
-3645764519,3645764522,NL
-3645764523,3645764524,DE
-3645764525,3645764531,NL
-3645764532,3645764533,DE
-3645764534,3645764535,NL
-3645764536,3645764536,IT
-3645764537,3645764539,NL
-3645764540,3645764540,DE
-3645764541,3645764541,IT
-3645764542,3645764549,NL
-3645764550,3645764550,DE
-3645764551,3645764551,GR
-3645764552,3645764553,DE
-3645764554,3645764554,NL
-3645764555,3645764555,DE
-3645764556,3645764556,CH
-3645764557,3645764557,NL
-3645764558,3645764561,DE
-3645764562,3645764562,FR
-3645764563,3645764563,ES
-3645764564,3645764565,NL
-3645764566,3645764566,DE
-3645764567,3645764568,NL
-3645764569,3645764569,DE
-3645764570,3645764570,MA
-3645764571,3645765127,DE
-3645765128,3645765131,GR
-3645765132,3645765135,DE
-3645765136,3645765139,BE
-3645765140,3645765143,IT
-3645765144,3645765147,DE
-3645765148,3645765151,IT
-3645765152,3645765155,BE
-3645765156,3645765171,IT
-3645765172,3645765175,NO
-3645765176,3645765179,DE
-3645765180,3645765183,FR
-3645765184,3645765187,GR
-3645765188,3645765195,DE
-3645765196,3645765199,CH
-3645765200,3645765203,GB
-3645765204,3645765207,DE
-3645765208,3645765211,FR
-3645765212,3645765215,DE
-3645765216,3645765219,ES
-3645765220,3645765223,PL
-3645765224,3645765227,BE
+3645763584,3645764014,DE
+3645764015,3645764015,GB
+3645764016,3645765227,DE
3645765228,3645765231,GB
-3645765232,3645765235,IT
-3645765236,3645765239,FR
-3645765240,3645765243,GB
-3645765244,3645765247,IT
-3645765248,3645765251,ES
-3645765252,3645765255,DE
-3645765256,3645765259,GR
-3645765260,3645765263,PL
-3645765264,3645765267,IT
-3645765268,3645765271,PL
-3645765272,3645765275,IT
-3645765276,3645765279,FR
-3645765280,3645765283,DE
-3645765284,3645765287,ES
-3645765288,3645765295,DE
-3645765296,3645765299,ES
-3645765300,3645765303,FR
-3645765304,3645765311,IT
-3645765312,3645765315,TR
-3645765316,3645765319,IT
-3645765320,3645765323,FR
-3645765324,3645765331,ES
-3645765332,3645765335,FR
-3645765336,3645765339,IT
-3645765340,3645765343,FR
-3645765344,3645765347,PL
-3645765348,3645765351,GR
-3645765352,3645765355,IT
-3645765356,3645765359,ES
-3645765360,3645765363,FR
-3645765364,3645765367,ES
-3645765368,3645765371,IT
-3645765372,3645765375,CH
-3645765376,3645765379,DE
-3645765380,3645765383,BM
-3645765384,3645765387,NL
-3645765388,3645765391,DE
-3645765392,3645765403,ES
-3645765404,3645765407,GR
-3645765408,3645765411,DK
-3645765412,3645765415,IT
-3645765416,3645765419,FR
-3645765420,3645765423,DE
-3645765424,3645765427,IT
-3645765428,3645765443,DE
-3645765444,3645765447,FR
-3645765448,3645765451,ES
-3645765452,3645765455,FR
-3645765456,3645765459,AT
-3645765460,3645765463,FR
-3645765464,3645765467,GB
-3645765468,3645765471,DE
-3645765472,3645765475,NL
-3645765476,3645765487,DE
-3645765488,3645765491,HU
-3645765492,3645765495,DE
-3645765496,3645765499,GB
-3645765500,3645765503,NL
-3645765504,3645765507,CH
-3645765508,3645765511,IT
-3645765512,3645765519,GB
-3645765520,3645765523,FR
-3645765524,3645765527,IT
-3645765528,3645765535,FR
-3645765536,3645765539,SE
-3645765540,3645765543,IL
-3645765544,3645765547,BE
-3645765548,3645765555,DE
-3645765556,3645765559,IT
-3645765560,3645765563,IE
-3645765564,3645765567,ES
-3645765568,3645765571,FR
-3645765572,3645765575,DE
-3645765576,3645765579,IT
-3645765580,3645765591,DE
-3645765592,3645765595,IE
-3645765596,3645765611,DE
-3645765612,3645765615,IT
-3645765616,3645765619,GB
-3645765620,3645765623,CH
-3645765624,3645765627,FR
-3645765628,3645765639,DE
-3645765640,3645765643,DK
-3645765644,3645765647,GB
-3645765648,3645765651,NL
-3645765652,3645765667,DE
-3645765668,3645765675,FR
-3645765676,3645765679,DE
-3645765680,3645765683,FR
-3645765684,3645765687,NL
-3645765688,3645765691,FR
-3645765692,3645765695,CH
-3645765696,3645765703,IT
-3645765704,3645765707,DE
-3645765708,3645765711,FR
-3645765712,3645765715,DE
-3645765716,3645765719,FR
-3645765720,3645766401,DE
-3645766402,3645766407,US
-3645766408,3645767187,DE
-3645767188,3645767188,US
-3645767189,3645767193,DE
-3645767194,3645767194,US
-3645767195,3645767195,DE
-3645767196,3645767196,US
-3645767197,3645767197,DE
-3645767198,3645767198,US
-3645767199,3645767208,DE
-3645767209,3645767209,US
-3645767210,3645767222,DE
-3645767223,3645767223,US
-3645767224,3645767240,DE
-3645767241,3645767241,US
-3645767242,3645767426,DE
-3645767427,3645767427,US
-3645767428,3645767428,DE
+3645765232,3645767428,DE
3645767429,3645767429,US
-3645767430,3645767431,DE
-3645767432,3645767433,US
-3645767434,3645767434,CA
-3645767435,3645767448,US
-3645767449,3645767449,DE
-3645767450,3645767455,US
-3645767456,3645767502,DE
-3645767503,3645767503,US
-3645767504,3645767679,DE
+3645767430,3645767443,DE
+3645767444,3645767444,US
+3645767445,3645767679,DE
3645767680,3645771775,IE
3645771776,3645779967,SE
3645779968,3645784063,PS
@@ -176279,215 +89637,84 @@
3645874176,3645878271,GB
3645878272,3645882367,DE
3645882368,3645886463,CH
-3645886464,3645887007,DE
-3645887008,3645887015,US
-3645887016,3645887067,DE
-3645887068,3645887071,US
-3645887072,3645887079,AT
-3645887080,3645887487,DE
-3645887488,3645887742,US
-3645887743,3645887743,DE
-3645887744,3645887871,US
-3645887872,3645888127,DE
-3645888128,3645888143,AT
-3645888144,3645888159,DE
-3645888160,3645888191,AT
-3645888192,3645888511,DE
-3645888512,3645888767,EU
-3645888768,3645889791,DE
-3645889792,3645889919,US
-3645889920,3645890559,DE
+3645886464,3645890559,DE
3645890560,3645894655,RU
3645894656,3645898751,NL
-3645898752,3646513103,DE
-3646513104,3646513111,CA
-3646513112,3646947327,DE
+3645898752,3646947327,DE
3646947328,3647209471,PL
3647209472,3647602687,NL
-3647602688,3647658751,RU
-3647658752,3647659007,GE
-3647659008,3647665151,RU
-3647665152,3647665407,GE
-3647665408,3647722751,RU
-3647722752,3647722879,BY
-3647722880,3647733759,RU
-3647733760,3647814855,FR
-3647814856,3647814863,A2
-3647814864,3647864831,FR
-3647864832,3647875583,DE
-3647875584,3647875839,CH
-3647875840,3647886543,DE
-3647886544,3647886559,BE
-3647886560,3647889663,DE
-3647889664,3647889671,BE
-3647889672,3647890463,DE
-3647890464,3647890471,FR
-3647890472,3647890687,DE
-3647890688,3647890943,EU
-3647890944,3647916799,DE
+3647602688,3647733759,RU
+3647733760,3647864831,FR
+3647864832,3647916799,DE
3647916800,3647917055,SE
-3647917056,3647917599,DE
-3647917600,3647917615,US
-3647917616,3647947263,DE
-3647947264,3647947519,US
-3647947520,3647949567,DE
-3647949568,3647949823,EU
-3647949824,3647957511,DE
-3647957512,3647957519,GB
-3647957520,3647961215,DE
-3647961216,3647961247,IT
-3647961248,3647963167,DE
-3647963168,3647963183,BE
-3647963184,3647963231,DE
-3647963232,3647963263,BE
-3647963264,3647963519,DE
-3647963520,3647963775,BE
-3647963776,3647963839,FR
-3647963840,3647964159,DE
-3647964160,3647964287,BE
-3647964288,3647964415,DE
-3647964416,3647964487,AU
-3647964488,3647964495,ES
-3647964496,3647964543,AU
-3647964544,3647964551,ES
-3647964552,3647964671,AU
-3647964672,3647964679,DE
-3647964680,3647964703,ES
-3647964704,3647965183,DE
-3647965184,3647965695,ES
+3647917056,3647964159,DE
+3647964160,3647964287,ES
+3647964288,3647964439,DE
+3647964440,3647964447,ES
+3647964448,3647964463,DE
+3647964464,3647964471,ES
+3647964472,3647964503,DE
+3647964504,3647964511,ES
+3647964512,3647964519,DE
+3647964520,3647964527,ES
+3647964528,3647964551,DE
+3647964552,3647964567,ES
+3647964568,3647964591,DE
+3647964592,3647964599,ES
+3647964600,3647964607,DE
+3647964608,3647964615,ES
+3647964616,3647964623,DE
+3647964624,3647964639,ES
+3647964640,3647965695,DE
3647965696,3647966207,CH
3647966208,3647967231,GB
3647967232,3647968255,BE
3647968256,3647969279,FR
-3647969280,3647969791,IT
-3647969792,3647970303,BE
-3647970304,3647971327,FR
+3647969280,3647971327,DE
3647971328,3647972351,GB
-3647972352,3647973663,IT
-3647973664,3647973671,DE
-3647973672,3647973679,IT
-3647973680,3647973695,DE
-3647973696,3647973703,IT
-3647973704,3647973711,BE
-3647973712,3647973735,IT
-3647973736,3647973743,DE
-3647973744,3647973791,IT
-3647973792,3647973799,DE
-3647973800,3647973943,IT
-3647973944,3647973959,DE
-3647973960,3647973967,IT
-3647973968,3647973975,DE
-3647973976,3647974047,IT
-3647974048,3647974055,DE
+3647972352,3647973375,IT
+3647973376,3647973615,DE
+3647973616,3647973623,IT
+3647973624,3647973711,DE
+3647973712,3647973719,IT
+3647973720,3647974055,DE
3647974056,3647974063,IT
-3647974064,3647974071,DE
-3647974072,3647974399,IT
-3647974400,3647976447,ES
-3647976448,3647976719,BE
-3647976720,3647976727,DE
-3647976728,3647976743,BE
-3647976744,3647976751,DE
-3647976752,3647976767,BE
-3647976768,3647976783,DE
-3647976784,3647976791,BE
-3647976792,3647976799,DE
-3647976800,3647976831,BE
-3647976832,3647976855,DE
-3647976856,3647976895,BE
-3647976896,3647976935,DE
-3647976936,3647977119,BE
-3647977120,3647977135,DE
-3647977136,3647977151,BE
-3647977152,3647977215,DE
-3647977216,3647977471,BE
+3647974064,3647975423,DE
+3647975424,3647976447,ES
+3647976448,3647977471,DE
3647977472,3647978495,GB
-3647978496,3647979007,NL
-3647979008,3647979136,IT
-3647979137,3647979519,DE
-3647979520,3647980543,FR
-3647980544,3647981055,GB
-3647981056,3647981567,IE
-3647981568,3647982591,BE
+3647978496,3647980223,DE
+3647980224,3647980239,FR
+3647980240,3647980383,DE
+3647980384,3647980415,FR
+3647980416,3647980543,DE
+3647980544,3647981567,GB
+3647981568,3647981823,BE
+3647981824,3647982079,DK
+3647982080,3647982591,BE
3647982592,3647983615,IT
-3647983616,3647983935,NL
-3647983936,3647983999,DE
-3647984000,3647984031,NL
-3647984032,3647984047,DE
-3647984048,3647984175,NL
-3647984176,3647984191,DE
-3647984192,3647984287,NL
-3647984288,3647984639,DE
-3647984640,3647985151,DK
-3647985152,3647985663,BE
-3647985664,3647985919,ES
-3647985920,3647985935,BE
-3647985936,3647986431,ES
-3647986432,3647986687,FR
-3647986688,3647986951,ES
-3647986952,3647986959,DE
-3647986960,3647987071,ES
-3647987072,3647987087,DE
-3647987088,3647987119,ES
-3647987120,3647987127,DE
-3647987128,3647987183,ES
-3647987184,3647987191,DE
-3647987192,3647987711,ES
+3647983616,3647984031,DE
+3647984032,3647984047,NL
+3647984048,3647986431,DE
+3647986432,3647986687,ES
+3647986688,3647987647,DE
+3647987648,3647987655,ES
+3647987656,3647987695,DE
+3647987696,3647987711,ES
3647987712,3647988735,IT
3647988736,3647989759,BE
-3647989760,3647990271,DE
-3647990272,3647990759,ES
-3647990760,3647990767,IT
-3647990768,3647991807,ES
-3647991808,3647992831,DE
-3647992832,3647993263,BE
-3647993264,3647993279,FR
-3647993280,3647993343,BE
-3647993344,3647993855,DE
-3647993856,3647994255,BE
-3647994256,3647994263,FR
-3647994264,3647994367,BE
-3647994368,3647994879,NR
-3647994880,3647994903,BE
-3647994904,3647994911,DE
-3647994912,3647995903,BE
-3647995904,3648004223,RU
-3648004224,3648004351,GB
-3648004352,3648006271,RU
-3648006272,3648006399,GB
-3648006400,3648007167,RU
-3648007168,3648008191,GB
+3647989760,3647995903,DE
+3647995904,3648004095,RU
+3648004096,3648008191,GB
3648008192,3648016383,FR
3648016384,3648020479,GB
3648020480,3648024575,IT
3648024576,3648028671,NL
3648028672,3648032767,HU
-3648032768,3648033087,IE
-3648033088,3648033103,EU
-3648033104,3648033119,IE
-3648033120,3648033215,EU
-3648033216,3648033223,IE
-3648033224,3648033535,EU
-3648033536,3648033791,IE
-3648033792,3648034047,EU
-3648034048,3648034303,GB
-3648034304,3648034815,EU
-3648034816,3648034847,DE
-3648034848,3648034879,EU
-3648034880,3648034895,IE
-3648034896,3648034943,EU
-3648034944,3648035007,IE
-3648035008,3648035023,EU
-3648035024,3648035039,IE
-3648035040,3648035071,NL
-3648035072,3648036863,EU
+3648032768,3648033023,IE
+3648034888,3648034895,IE
3648036864,3648040959,CZ
-3648040960,3648041020,BE
-3648041021,3648041022,NL
-3648041023,3648041024,BE
-3648041025,3648041026,FR
-3648041027,3648041047,BE
-3648041048,3648041055,NL
-3648041056,3648045055,BE
+3648040960,3648045055,BE
3648045056,3648049151,FI
3648049152,3648053247,UA
3648053248,3648057343,FR
@@ -176495,29 +89722,18 @@
3648061440,3648069631,AM
3648069632,3648073727,DE
3648073728,3648077823,HU
-3648077824,3648077895,BE
-3648077896,3648077911,CG
-3648077912,3648078047,BE
-3648078048,3648078063,CG
-3648078064,3648078079,BE
-3648078080,3648078463,CG
-3648078464,3648078591,BF
-3648078592,3648079007,CG
-3648079008,3648079023,BE
-3648079024,3648079031,CG
-3648079032,3648079071,BE
-3648079072,3648079359,CG
-3648079360,3648079615,CD
-3648079616,3648079679,CG
-3648079680,3648080383,BE
-3648080384,3648080511,TZ
+3648077824,3648078527,BE
+3648078528,3648078591,BF
+3648078592,3648079103,BE
+3648079104,3648079359,CG
+3648079360,3648080511,BE
3648080512,3648080543,BF
-3648080544,3648080639,TZ
+3648080544,3648080639,BE
3648080640,3648080895,GA
-3648080896,3648081151,ZM
-3648081152,3648081407,BE
-3648081408,3648082175,MW
-3648082176,3648082239,BE
+3648080896,3648081023,ZM
+3648081024,3648081055,GA
+3648081056,3648081151,ZM
+3648081152,3648082239,BE
3648082240,3648082311,NE
3648082312,3648082431,BE
3648082432,3648082479,ZM
@@ -176529,9 +89745,7 @@
3648086016,3648090111,AT
3648090112,3648094207,RU
3648094208,3648102399,PL
-3648102400,3648104703,GB
-3648104704,3648104959,IE
-3648104960,3648106495,GB
+3648102400,3648106495,GB
3648106496,3648110591,DE
3648110592,3648114687,FR
3648114688,3648118783,IT
@@ -176540,83 +89754,29 @@
3648126976,3648139263,RU
3648139264,3648143359,GB
3648143360,3648147455,DE
-3648147456,3648149503,SE
-3648149504,3648150015,GB
-3648150016,3648150271,SE
-3648150272,3648150527,FI
-3648150528,3648150783,DK
-3648150784,3648151551,SE
-3648151552,3648152759,NL
-3648152760,3648152767,IT
-3648152768,3648155647,NL
+3648147456,3648151551,SE
+3648151552,3648155647,NL
3648155648,3648159743,CH
3648159744,3648163839,ES
3648163840,3648167935,RU
-3648167936,3648172031,IE
+3648167936,3648170239,GB
+3648170240,3648170495,IE
+3648170496,3648171679,GB
+3648171680,3648171695,IE
+3648171696,3648172031,GB
3648172032,3648176127,RU
3648176128,3648178175,DE
-3648178176,3648178495,FR
-3648178496,3648178503,AD
-3648178504,3648178687,FR
-3648178688,3648178815,LU
-3648178816,3648180223,FR
-3648180224,3648180703,DE
-3648180704,3648180751,IT
-3648180752,3648180767,DE
-3648180768,3648180799,AT
-3648180800,3648181247,DE
-3648181248,3648181279,IT
-3648181280,3648181311,DE
-3648181312,3648181343,AT
-3648181344,3648181375,DE
-3648181376,3648181407,RU
-3648181408,3648181423,DE
-3648181424,3648181439,CH
-3648181440,3648181551,DE
-3648181552,3648181567,RU
-3648181568,3648181631,DE
-3648181632,3648181647,AT
-3648181648,3648181887,DE
-3648181888,3648181903,AT
-3648181904,3648182079,DE
-3648182080,3648182111,DK
-3648182112,3648182127,CY
-3648182128,3648182143,DE
-3648182144,3648182159,JO
-3648182160,3648182175,DE
-3648182176,3648182207,RU
-3648182208,3648182271,GB
-3648182272,3648182303,DK
-3648182304,3648182335,IT
-3648182336,3648182591,DE
-3648182592,3648182623,AT
-3648182624,3648182655,CH
-3648182656,3648182783,DE
-3648182784,3648182799,IT
-3648182800,3648182815,DE
-3648182816,3648182823,US
-3648182824,3648182831,RU
-3648182832,3648182847,AE
-3648182848,3648182879,AT
-3648182880,3648183551,DE
-3648183552,3648183679,IT
-3648183680,3648183807,DK
-3648183808,3648183871,DE
-3648183872,3648183935,GB
-3648183936,3648184319,DE
+3648178176,3648180223,FR
+3648180224,3648184319,DE
3648184320,3648192511,RU
3648192512,3648196607,DE
3648196608,3648200703,IT
3648200704,3648208895,SE
-3648208896,3648209663,DE
-3648209664,3648209919,EU
-3648209920,3648212991,DE
+3648208896,3648212991,DE
3648212992,3648217087,RU
3648217088,3648221183,UA
3648221184,3648225279,IE
-3648225280,3648231263,DE
-3648231264,3648231295,NL
-3648231296,3648233471,DE
+3648225280,3648233471,DE
3648233472,3648237567,FR
3648237568,3648241663,RU
3648241664,3648245759,NL
@@ -176631,24 +89791,11 @@
3648282624,3648286719,PL
3648286720,3648290815,DE
3648290816,3648299007,RU
-3648299008,3648303103,FI
+3648299008,3648301055,FI
+3648301056,3648303103,CZ
3648303104,3648307199,AT
3648307200,3648311295,TR
-3648311296,3648315615,DK
-3648315616,3648315631,CA
-3648315632,3648316079,DK
-3648316080,3648316087,SE
-3648316088,3648316415,DK
-3648316416,3648316671,NL
-3648316672,3648317247,DK
-3648317248,3648317263,CA
-3648317264,3648319527,DK
-3648319528,3648319535,CH
-3648319536,3648321631,DK
-3648321632,3648321639,CA
-3648321640,3648321823,DK
-3648321824,3648321839,GB
-3648321840,3648323583,DK
+3648311296,3648323583,DK
3648323584,3648327679,NG
3648327680,3648331775,LT
3648331776,3648339967,BE
@@ -176657,71 +89804,30 @@
3648348160,3648352255,DE
3648352256,3648356351,RU
3648356352,3648360447,PL
-3648360448,3648362251,FR
-3648362252,3648362255,GB
-3648362256,3648362263,FR
-3648362264,3648362271,GB
-3648362272,3648364543,FR
+3648360448,3648364543,FR
3648364544,3648368639,CH
3648368640,3648372735,RU
3648372736,3648376831,LU
3648376832,3648380927,CZ
-3648380928,3648381183,EU
-3648381184,3648385023,NL
+3648380928,3648385023,NL
3648385024,3648389119,RU
3648389120,3648393215,IT
3648393216,3648397311,DE
3648397312,3648405503,NO
3648405504,3648413695,RU
3648413696,3648417791,SK
-3648417792,3648417807,AT
-3648417808,3648417815,GB
-3648417816,3648417831,AT
-3648417832,3648417839,GB
-3648417840,3648417855,AT
-3648417856,3648417919,GB
-3648417920,3648418047,AT
-3648418048,3648418079,GB
-3648418080,3648418111,ES
-3648418112,3648418135,GB
-3648418136,3648418239,ES
-3648418240,3648418247,SE
-3648418248,3648418255,CH
-3648418256,3648418271,GB
-3648418272,3648418303,ES
-3648418304,3648419327,GB
-3648419328,3648419455,FR
-3648419456,3648419519,IT
-3648419520,3648419583,ES
-3648419584,3648419839,GB
-3648419840,3648419901,BE
-3648419902,3648419903,GB
-3648419904,3648419951,BE
-3648419952,3648420095,GB
-3648420096,3648420351,NL
-3648420352,3648420863,GB
-3648420864,3648421119,US
-3648421120,3648421375,GB
-3648421376,3648421631,DE
-3648421632,3648421887,CH
-3648421888,3648425983,GB
+3648417792,3648425983,GB
3648425984,3648430079,IT
-3648430080,3648432127,NL
-3648432128,3648433151,DE
-3648433152,3648434175,NL
+3648430080,3648434175,NL
3648434176,3648438271,RU
3648438272,3648442367,CH
3648442368,3648446463,SE
-3648446464,3648449119,FR
-3648449120,3648449135,ES
-3648449136,3648450559,FR
+3648446464,3648450559,FR
3648450560,3648454655,IT
3648454656,3648458751,NL
3648458752,3648462847,RU
3648462848,3648466943,FI
-3648466944,3648469295,DE
-3648469296,3648469311,AT
-3648469312,3648471039,DE
+3648466944,3648471039,DE
3648471040,3648475135,PL
3648475136,3648479231,RU
3648479232,3648483327,CH
@@ -176732,8 +89838,8 @@
3648499712,3648503807,FR
3648503808,3648511999,DE
3648512000,3648516095,NL
-3648516096,3648518143,RS
-3648518144,3648520191,MK
+3648516096,3648519167,RS
+3648519168,3648520191,MK
3648520192,3648782335,NL
3648782336,3649044479,ES
3649044480,3649110015,FR
@@ -176746,35 +89852,20 @@
3649512192,3649512447,FR
3649512448,3649568767,GB
3649568768,3649634303,BE
-3649634304,3649700159,GB
-3649700160,3649700247,US
-3649700248,3649700251,BB
-3649700252,3649700287,US
-3649700288,3649708791,GB
-3649708792,3649709055,GD
-3649709056,3649709815,GB
-3649709816,3649709823,TT
-3649709824,3649765375,GB
+3649634304,3649765375,GB
3649765376,3649830911,EG
-3649830912,3649831167,NL
-3649831168,3649831423,EU
-3649831424,3649835007,NL
-3649835008,3649838079,ES
-3649838080,3649839103,NL
+3649830912,3649835007,NL
+3649835008,3649837055,ES
+3649837056,3649839103,NL
3649839104,3649840127,GB
-3649840128,3649840383,NL
-3649840384,3649843455,GB
-3649843456,3649845247,NL
-3649845248,3649845759,GB
-3649845760,3649847039,NL
-3649847040,3649847295,GB
-3649847296,3649847942,NL
-3649847943,3649847943,AT
-3649847944,3649848319,NL
-3649848320,3649855487,DE
+3649840128,3649841151,NL
+3649841152,3649843199,GB
+3649843200,3649847817,NL
+3649847818,3649855487,DE
3649855488,3649856511,GB
3649856512,3649857535,US
-3649857536,3649858047,JP
+3649857536,3649857791,JP
+3649857792,3649858047,IN
3649858048,3649859071,GB
3649859072,3649859583,US
3649859584,3649863679,SE
@@ -176793,14 +89884,10 @@
3650129920,3650134015,GB
3650134016,3650142207,RU
3650142208,3650150399,PL
-3650150400,3650155263,NO
-3650155264,3650155519,EU
-3650155520,3650158591,NO
+3650150400,3650158591,NO
3650158592,3650162687,MT
3650162688,3650166783,RU
-3650166784,3650167807,BE
-3650167808,3650168063,LU
-3650168064,3650170879,BE
+3650166784,3650170879,BE
3650170880,3650174975,DK
3650174976,3650179071,GB
3650179072,3650183167,BG
@@ -176812,55 +89899,50 @@
3650207744,3650211839,SK
3650211840,3650215935,LV
3650220032,3650224127,SA
-3650224128,3650232319,AT
-3650232320,3650233343,RU
-3650233344,3650233599,CY
-3650233600,3650236415,RU
+3650224128,3650224383,TH
+3650224384,3650224639,ES
+3650224640,3650224895,UA
+3650224896,3650225151,FR
+3650225152,3650225407,HU
+3650225408,3650225663,BR
+3650225664,3650226175,TR
+3650226176,3650226431,RS
+3650226432,3650226687,AT
+3650226688,3650227455,IN
+3650227456,3650227711,PL
+3650227712,3650227967,PT
+3650227968,3650228223,AR
+3650228224,3650228479,HK
+3650228480,3650229503,AT
+3650229504,3650229759,LU
+3650229760,3650230527,DE
+3650230528,3650231295,AT
+3650231296,3650231551,AR
+3650231552,3650231807,GB
+3650231808,3650232063,DE
+3650232064,3650232319,SE
+3650232320,3650236415,RU
3650236416,3650240511,CH
3650240512,3650244607,EE
3650244608,3650256895,GB
3650256896,3650265087,DE
3650265088,3650269183,CH
-3650269184,3650273071,GB
-3650273072,3650273279,IR
+3650269184,3650273279,GB
3650273280,3650277375,IT
3650277376,3650281471,IR
3650281472,3650285567,FR
3650285568,3650289663,UA
3650289664,3650297855,RU
3650297856,3650301951,LT
-3650301952,3650306775,DE
-3650306776,3650306779,GE
-3650306780,3650307007,DE
-3650307008,3650307010,GB
-3650307011,3650310143,DE
+3650301952,3650310143,DE
3650310144,3650314239,GB
-3650314240,3650316287,DE
-3650316288,3650316543,EU
-3650316544,3650316711,DE
-3650316712,3650316715,FR
-3650316716,3650318335,DE
+3650314240,3650318335,DE
3650318336,3650322431,GI
-3650322432,3650323327,IT
-3650323328,3650323359,SZ
-3650323360,3650330623,IT
+3650322432,3650330623,IT
3650330624,3650334719,UA
3650334720,3650338815,GB
3650338816,3650342911,FR
-3650342912,3650344423,CH
-3650344424,3650344427,GB
-3650344428,3650344463,CH
-3650344464,3650344479,AT
-3650344480,3650344559,CH
-3650344560,3650344575,AT
-3650344576,3650344863,CH
-3650344864,3650344879,AE
-3650344880,3650344911,PT
-3650344912,3650345935,CH
-3650345936,3650345951,PT
-3650345952,3650346207,CH
-3650346208,3650346239,IM
-3650346240,3650347007,CH
+3650342912,3650347007,CH
3650347008,3650351103,GE
3650351104,3650351871,GB
3650351872,3650351879,NL
@@ -176880,19 +89962,11 @@
3650351992,3650351999,HU
3650352000,3650352007,GB
3650352008,3650352015,IE
-3650352016,3650352127,GB
-3650352128,3650352279,DE
-3650352280,3650352287,IT
-3650352288,3650352295,DE
-3650352296,3650352303,SE
-3650352304,3650352319,DE
-3650352320,3650352327,PL
-3650352328,3650352895,DE
-3650352896,3650355199,GB
+3650352016,3650352264,GB
+3650352265,3650352265,DE
+3650352266,3650355199,GB
3650355200,3650359295,CH
-3650359296,3650360703,NL
-3650360704,3650360831,BE
-3650360832,3650363391,NL
+3650359296,3650363391,NL
3650363392,3650367487,GB
3650367488,3650371583,RU
3650371584,3650375679,ES
@@ -176907,13 +89981,7 @@
3650416640,3650420735,BE
3650420736,3650424831,ES
3650424832,3650428927,RU
-3650428928,3650429714,NL
-3650429715,3650429715,EU
-3650429716,3650431999,NL
-3650432000,3650432255,EU
-3650432256,3650432431,NL
-3650432432,3650432447,DE
-3650432448,3650433023,NL
+3650428928,3650433023,NL
3650433024,3650437119,FI
3650437120,3650441215,NL
3650441216,3650445311,IT
@@ -176925,11 +89993,7 @@
3650465792,3650469887,RU
3650469888,3650478079,NL
3650478080,3650482175,AT
-3650482176,3650484479,PL
-3650484480,3650484487,DE
-3650484488,3650484639,PL
-3650484640,3650484671,US
-3650484672,3650486271,PL
+3650482176,3650486271,PL
3650486272,3650502655,RU
3650502656,3650504703,SE
3650504704,3650506751,RU
@@ -176937,25 +90001,14 @@
3650508800,3650510847,NL
3650510848,3650519039,GB
3650519040,3650523135,HU
-3650523136,3650525687,DE
-3650525688,3650525695,GB
-3650525696,3650527231,DE
-3650527232,3650534911,SE
-3650534912,3650535423,NL
+3650523136,3650527231,DE
+3650527232,3650535423,SE
3650535424,3650539519,RU
3650539520,3650543615,ES
-3650543616,3650548109,CH
-3650548110,3650548110,CH
-3650548111,3650548827,CH
-3650548828,3650548828,CH
-3650548829,3650548884,CH
-3650548885,3650548885,CH
-3650548886,3650551807,CH
+3650543616,3650551807,CH
3650551808,3650555903,FR
3650555904,3650559999,RU
-3650560000,3650560039,HK
-3650560040,3650560043,GB
-3650560044,3650564095,HK
+3650560000,3650564095,GB
3650564096,3650568191,SE
3650568192,3650572287,RU
3650572288,3650576383,DE
@@ -176967,219 +90020,80 @@
3650600960,3650605055,SE
3650605056,3650609180,DE
3650609181,3650609181,LB
-3650609182,3650609279,DE
-3650609280,3650609311,CY
-3650609312,3650609407,DE
-3650609408,3650609439,IQ
-3650609440,3650609447,KZ
-3650609448,3650609455,RU
-3650609456,3650609663,DE
-3650609664,3650609919,KZ
-3650609920,3650610175,RU
-3650610176,3650610687,KZ
-3650610688,3650610943,RU
-3650610944,3650611711,DE
-3650611712,3650611967,LB
-3650611968,3650612735,KZ
-3650612736,3650617343,DE
+3650609182,3650610175,DE
+3650610176,3650611711,RU
+3650611712,3650611866,LB
+3650611867,3650611867,RU
+3650611868,3650611967,LB
+3650611968,3650613247,RU
+3650613248,3650617343,DE
3650617344,3650682879,FI
3650682880,3650748415,PL
-3650748416,3650789375,GB
-3650789376,3650790143,NL
-3650790144,3650879487,GB
+3650748416,3650879487,GB
3650879488,3650912255,RO
-3650912256,3650912639,GB
-3650912640,3650912767,FR
-3650912768,3650915327,GB
+3650912256,3650915327,GB
3650915328,3650915337,FR
-3650915338,3650915338,US
+3650915338,3650915338,BE
3650915339,3650915583,FR
-3650915584,3650922495,GB
-3650922496,3650922751,US
-3650922752,3650923103,GB
-3650923104,3650923135,FR
-3650923136,3650926591,GB
+3650915584,3650920447,GB
+3650920448,3650920457,FR
+3650920458,3650920458,GB
+3650920459,3650920703,FR
+3650920704,3650926079,GB
+3650926080,3650926335,BE
+3650926336,3650926591,GB
3650926592,3650929663,ES
-3650929664,3650930431,GB
+3650929664,3650929847,GB
+3650929848,3650929855,FR
+3650929856,3650929863,DE
+3650929864,3650930431,GB
3650930432,3650930687,DE
-3650930688,3650931967,GB
-3650931968,3650932223,ES
-3650932224,3650935839,GB
-3650935840,3650935855,FR
-3650935856,3650935871,GB
-3650935872,3650935903,FR
-3650935904,3650935967,GB
-3650935968,3650935983,FR
-3650935984,3650935999,GB
-3650936000,3650936063,NL
-3650936064,3650939599,GB
+3650930688,3650932943,GB
+3650932944,3650932975,IT
+3650932976,3650939599,GB
3650939600,3650939607,FR
-3650939608,3650944511,GB
+3650939608,3650939615,TR
+3650939616,3650944511,GB
3650944512,3650944767,FR
3650944768,3650945023,GB
3650945024,3651010559,DK
3651010560,3651076095,GB
-3651076096,3651077375,DE
-3651077376,3651077887,GB
-3651077888,3651078143,IE
-3651078144,3651078399,ES
-3651078400,3651078655,IE
-3651078656,3651078783,ES
-3651078784,3651078911,DE
-3651078912,3651079807,GB
-3651079808,3651079935,ES
-3651079936,3651080191,DE
-3651080192,3651080831,GB
-3651080832,3651081215,DE
-3651081216,3651081727,GB
-3651081728,3651081983,AT
-3651081984,3651082239,DE
-3651082240,3651082751,GB
-3651082752,3651083007,IE
-3651083008,3651083519,GB
-3651083520,3651083775,DE
-3651083776,3651084031,IE
-3651084032,3651084543,FR
-3651084544,3651084799,IE
-3651084800,3651085311,ES
-3651085312,3651085567,FR
-3651085568,3651086079,DE
-3651086080,3651086335,IE
-3651086336,3651086463,DE
-3651086464,3651086591,IE
-3651086592,3651086719,GR
-3651086720,3651086847,DE
-3651086848,3651087103,FR
-3651087104,3651087615,ES
-3651087616,3651087871,GB
-3651087872,3651088127,DE
-3651088128,3651088383,IE
-3651088384,3651088639,GR
-3651088640,3651090767,DE
-3651090768,3651090775,GB
-3651090776,3651090919,DE
-3651090920,3651090959,IE
-3651090960,3651098111,DE
-3651098112,3651098367,IE
-3651098368,3651098623,FR
-3651098624,3651101439,DE
-3651101440,3651101695,FR
-3651101696,3651101951,CH
-3651101952,3651102207,FR
-3651102208,3651102719,DE
-3651102720,3651102975,GB
-3651102976,3651103231,SL
-3651103232,3651103487,IT
-3651103488,3651103743,FR
-3651103744,3651103999,IT
-3651104000,3651104511,DE
-3651104512,3651104767,PL
-3651104768,3651105535,DE
-3651105536,3651105791,IT
-3651105792,3651106047,ES
-3651106048,3651106559,GB
-3651106560,3651106815,IE
-3651106816,3651107327,DE
-3651107328,3651107583,GB
-3651107584,3651107839,NL
-3651107840,3651107967,GB
-3651107968,3651108351,IE
-3651108352,3651108479,NL
-3651108480,3651108543,ES
-3651108544,3651108863,DE
+3651076096,3651108863,DE
3651108864,3651141631,EE
-3651141632,3651148287,DE
-3651148288,3651148799,ES
-3651148800,3651159295,DE
-3651159296,3651159359,ES
-3651159360,3651159423,FR
-3651159424,3651159487,DE
-3651159488,3651159551,GB
-3651159552,3651159807,DE
-3651159808,3651160063,ES
-3651160064,3651173375,DE
-3651173376,3651173631,ES
-3651173632,3651198975,DE
-3651198976,3651199231,GB
-3651199232,3651199487,ES
-3651199488,3651199743,GB
-3651199744,3651200255,ES
-3651200256,3651201023,PL
-3651201024,3651201279,ES
-3651201280,3651201535,PL
-3651201536,3651201791,ES
-3651201792,3651201919,FR
-3651201920,3651202047,ES
-3651202048,3651202175,FR
-3651202176,3651202303,GB
-3651202304,3651202815,ES
-3651202816,3651203071,GB
-3651203072,3651203327,DE
-3651203328,3651204351,ES
-3651204352,3651204607,PL
-3651204608,3651205119,ES
-3651205120,3651205375,GB
-3651205376,3651206143,ES
-3651206144,3651206399,PL
-3651206400,3651206655,DE
-3651206656,3651207167,ES
+3651141632,3651152895,DE
+3651152896,3651153919,GB
+3651153920,3651207167,DE
3651207168,3651207199,GB
-3651207200,3651207223,EU
3651207224,3651207295,GB
-3651207296,3651207423,EU
3651207424,3651207615,GB
-3651207616,3651207647,EU
3651207648,3651208959,GB
-3651208960,3651209215,EU
3651209216,3651209231,US
3651209232,3651209239,GB
3651209240,3651209243,DE
-3651209244,3651209471,EU
3651209472,3651210751,GB
-3651210752,3651211263,EU
3651211264,3651211775,IR
-3651211776,3651213823,EU
3651213824,3651214207,US
-3651214208,3651215359,EU
3651215360,3651215395,GB
-3651215396,3651215615,EU
3651215616,3651215871,GB
-3651215872,3651217407,EU
3651217408,3651217535,GI
-3651217536,3651219455,EU
3651219456,3651219967,US
-3651219968,3651220383,EU
-3651220384,3651220479,GB
-3651220480,3651221503,EU
+3651220384,3651220415,GB
+3651220432,3651220479,GB
3651221504,3651221695,GB
-3651221696,3651223551,EU
3651223552,3651223567,GB
-3651223568,3651223583,EU
3651223584,3651223607,GB
-3651223608,3651223647,EU
3651223648,3651223663,ES
-3651223664,3651227135,EU
3651227136,3651227391,GB
-3651227392,3651230719,EU
3651230720,3651231743,MU
-3651231744,3651232255,EU
3651232256,3651232287,GB
-3651232288,3651232319,EU
3651232320,3651232383,GB
-3651232384,3651232447,EU
3651232448,3651232511,GB
-3651232512,3651233791,EU
-3651233792,3651233855,GB
-3651233856,3651236863,EU
-3651236864,3651237631,SC
-3651237632,3651237887,EU
-3651237888,3651238399,SC
-3651238400,3651239935,EU
+3651237376,3651237631,SC
3651239936,3651272703,GB
-3651272704,3651338239,CH
-3651338240,3651350783,GB
-3651350784,3651351039,EU
-3651351040,3651403775,GB
+3651272704,3651289087,CH
+3651289088,3651289599,DE
+3651289600,3651338239,CH
+3651338240,3651403775,GB
3651403776,3651534847,AE
3651534848,3651600383,NL
3651600384,3651665919,FR
@@ -177189,20 +90103,10 @@
3651682304,3651686399,RU
3651686400,3651690495,NO
3651690496,3651694591,FR
-3651694592,3651694847,PT
-3651694848,3651694975,NG
-3651694976,3651695103,PT
-3651695104,3651695359,CV
-3651695360,3651695871,AO
-3651695872,3651696127,PT
-3651696128,3651696383,AO
-3651696384,3651696639,PT
-3651696640,3651698687,AO
+3651694592,3651698687,PT
3651698688,3651702783,PL
3651702784,3651706879,GB
-3651706880,3651709791,MT
-3651709792,3651709807,CY
-3651709808,3651710975,MT
+3651706880,3651710975,MT
3651710976,3651715071,AZ
3651715072,3651719167,PL
3651719168,3651723263,CZ
@@ -177236,60 +90140,18 @@
3651870720,3651874815,IT
3651874816,3651878911,PL
3651878912,3651883007,IT
-3651883008,3651885827,CD
-3651885828,3651885831,BE
-3651885832,3651885847,CD
-3651885848,3651885851,BE
-3651885852,3651885867,CD
-3651885868,3651885911,BE
-3651885912,3651885919,CD
-3651885920,3651885935,BE
-3651885936,3651885967,CD
-3651885968,3651886079,BE
-3651886080,3651886347,CD
-3651886348,3651886379,BE
-3651886380,3651886383,CD
-3651886384,3651886391,BE
-3651886392,3651886395,CD
-3651886396,3651886407,BE
-3651886408,3651886415,CD
-3651886416,3651886423,BE
-3651886424,3651886427,CD
-3651886428,3651886435,BE
-3651886436,3651886451,CD
-3651886452,3651886455,BE
-3651886456,3651886459,CD
-3651886460,3651886463,BE
-3651886464,3651886471,CD
-3651886472,3651886479,BE
-3651886480,3651886495,CD
-3651886496,3651886511,BE
-3651886512,3651886543,CD
-3651886544,3651886591,BE
-3651886592,3651886847,CD
-3651886848,3651887103,BE
+3651883008,3651884287,CD
+3651884288,3651885839,BE
+3651885840,3651885843,CD
+3651885844,3651887103,BE
3651887104,3651891199,GB
3651891200,3651895295,DE
3651895296,3651899391,GB
3651899392,3651903487,RU
3651903488,3651907583,IT
-3651907584,3651908095,IQ
-3651908096,3651908607,DE
-3651908608,3651908863,US
-3651908864,3651908991,IQ
-3651908992,3651909046,DE
+3651907584,3651909046,DE
3651909047,3651909047,IQ
-3651909048,3651909311,DE
-3651909312,3651909375,IQ
-3651909376,3651909631,DE
-3651909632,3651910655,IQ
-3651910656,3651910783,DE
-3651910784,3651911167,IQ
-3651911168,3651911623,DE
-3651911624,3651911631,IQ
-3651911632,3651911643,DE
-3651911644,3651911647,IR
-3651911648,3651911679,DE
+3651909048,3651911679,DE
3651911680,3651915775,NO
3651915776,3651919871,IS
3651919872,3651921919,NL
@@ -177297,128 +90159,21 @@
3651923968,3651928063,DE
3651928064,3651932159,IT
3651932160,3651936255,RU
-3651936256,3651936511,DE
-3651936512,3651936767,EU
-3651936768,3651937023,DE
+3651936256,3651937023,DE
3651937024,3651938047,FR
-3651938048,3651938175,DE
-3651938176,3651938207,GB
-3651938208,3651938255,DE
-3651938256,3651938271,PL
-3651938272,3651938943,DE
-3651938944,3651938959,NL
-3651938960,3651938975,DE
-3651938976,3651939007,TR
-3651939008,3651939071,DE
-3651939072,3651941119,FR
-3651941120,3651941183,DE
-3651941184,3651941215,IT
-3651941216,3651941249,TR
-3651941250,3651941695,DE
-3651941696,3651941759,IT
-3651941760,3651942655,DE
-3651942656,3651942719,GB
-3651942720,3651942735,SE
-3651942736,3651942751,US
-3651942752,3651942783,DE
-3651942784,3651942815,GB
-3651942816,3651942911,DE
-3651942912,3651944447,FR
+3651938048,3651940351,DE
+3651940352,3651941119,FR
+3651941120,3651944447,DE
3651944448,3651948543,ES
3651948544,3651952639,FO
3651952640,3651953663,IR
3651953664,3651954687,AE
-3651954688,3651958271,IR
-3651958272,3651958783,AE
-3651958784,3651959039,IR
-3651959040,3651960831,AE
+3651954688,3651957759,IR
+3651957760,3651958783,AE
+3651958784,3651960831,IR
3651960832,3651964927,GB
3651964928,3651969023,SK
-3651969024,3651971661,DE
-3651971662,3651971662,US
-3651971663,3651971663,DE
-3651971664,3651971666,US
-3651971667,3651971667,DE
-3651971668,3651971670,CA
-3651971671,3651971673,BR
-3651971674,3651971674,DE
-3651971675,3651971675,GR
-3651971676,3651971676,DE
-3651971677,3651971679,UA
-3651971680,3651971681,DE
-3651971682,3651971682,EG
-3651971683,3651971684,DE
-3651971685,3651971686,GR
-3651971687,3651971687,DE
-3651971688,3651971688,GR
-3651971689,3651971787,DE
-3651971788,3651971788,BR
-3651971789,3651971798,DE
-3651971799,3651971799,IL
-3651971800,3651971800,GR
-3651971801,3651971801,US
-3651971802,3651971806,DE
-3651971807,3651971807,UA
-3651971808,3651971812,DE
-3651971813,3651971814,TR
-3651971815,3651971815,FI
-3651971816,3651971817,DE
-3651971818,3651971818,TR
-3651971819,3651971819,DE
-3651971820,3651971821,US
-3651971822,3651971824,TW
-3651971825,3651971825,SA
-3651971826,3651971826,BD
-3651971827,3651971828,DE
-3651971829,3651971829,UA
-3651971830,3651971830,GT
-3651971831,3651971831,US
-3651971832,3651975433,DE
-3651975434,3651975434,TR
-3651975435,3651975437,DE
-3651975438,3651975438,TR
-3651975439,3651975440,DE
-3651975441,3651975441,TR
-3651975442,3651975442,AT
-3651975443,3651975446,DE
-3651975447,3651975449,US
-3651975450,3651975453,DE
-3651975454,3651975454,US
-3651975455,3651975459,DE
-3651975460,3651975470,US
-3651975471,3651975471,DE
-3651975472,3651975473,US
-3651975474,3651975475,DE
-3651975476,3651975482,US
-3651975483,3651975483,DE
-3651975484,3651975486,US
-3651975487,3651975560,DE
-3651975561,3651975561,US
-3651975562,3651975562,DE
-3651975563,3651975563,US
-3651975564,3651975567,DE
-3651975568,3651975568,CN
-3651975569,3651975638,DE
-3651975639,3651975639,CN
-3651975640,3651975640,DE
-3651975641,3651975650,CN
-3651975651,3651975653,DE
-3651975654,3651975654,CN
-3651975655,3651975655,DE
-3651975656,3651975656,CN
-3651975657,3651975658,DE
-3651975659,3651975661,CN
-3651975662,3651975662,DE
-3651975663,3651975664,CN
-3651975665,3651975667,IN
-3651975668,3651975668,DE
-3651975669,3651975670,IN
-3651975671,3651975671,DE
-3651975672,3651975673,IN
-3651975674,3651975676,DE
-3651975677,3651975677,IN
-3651975678,3651975678,US
-3651975679,3651977215,DE
+3651969024,3651977215,DE
3651977216,3651985407,IT
3651985408,3651997695,PL
3651997696,3652001791,RU
@@ -177426,75 +90181,14 @@
3652005888,3652009983,GB
3652009984,3652014079,RU
3652014080,3652018175,SA
-3652018176,3652019327,IE
-3652019328,3652019335,GB
-3652019336,3652019455,IE
-3652019456,3652019471,GB
-3652019472,3652019479,IE
-3652019480,3652019487,GB
-3652019488,3652019567,IE
-3652019568,3652019583,GB
-3652019584,3652019599,IE
-3652019600,3652019615,GB
-3652019616,3652019679,IE
-3652019680,3652019687,GB
-3652019688,3652019735,IE
-3652019736,3652019739,GB
-3652019740,3652019751,IE
-3652019752,3652019759,GB
-3652019760,3652020799,IE
-3652020800,3652020863,DE
-3652020864,3652022271,IE
+3652018176,3652022271,IE
3652022272,3652026367,ES
-3652026368,3652028031,DE
-3652028032,3652028063,US
-3652028064,3652028095,CH
-3652028096,3652028223,DE
-3652028224,3652028255,ES
-3652028256,3652031743,DE
-3652031744,3652031999,US
-3652032000,3652032767,DE
-3652032768,3652033791,NL
-3652033792,3652033855,GD
-3652033856,3652033887,NL
-3652033888,3652033919,VG
-3652033920,3652033935,TR
-3652033936,3652033951,DE
-3652033952,3652033967,CH
-3652033968,3652033983,NL
-3652033984,3652034015,TR
-3652034016,3652034047,NL
-3652034048,3652034111,CY
-3652034112,3652034143,TR
-3652034144,3652034175,CH
-3652034176,3652034207,NL
-3652034208,3652034239,ES
-3652034240,3652034271,VG
-3652034272,3652034367,CY
-3652034368,3652034383,ES
-3652034384,3652034399,VG
-3652034400,3652034559,CY
+3652026368,3652032511,DE
+3652032512,3652033791,NL
+3652033792,3652034559,DE
3652034560,3652046847,PL
-3652046848,3652050271,IE
-3652050272,3652050299,GB
-3652050300,3652050327,IE
-3652050328,3652050343,GB
-3652050344,3652050499,IE
-3652050500,3652050503,GB
-3652050504,3652050527,IE
-3652050528,3652050535,GB
-3652050536,3652050567,IE
-3652050568,3652050615,GB
-3652050616,3652050619,IE
-3652050620,3652050627,GB
-3652050628,3652050631,IE
-3652050632,3652050671,GB
-3652050672,3652050943,IE
-3652050944,3652051711,LI
-3652051712,3652051967,CH
-3652051968,3652053631,LI
-3652053632,3652053759,CH
-3652053760,3652055039,LI
+3652046848,3652050943,IE
+3652050944,3652055039,LI
3652055040,3652059135,NO
3652059136,3652063231,RU
3652063232,3652067327,IR
@@ -177502,69 +90196,36 @@
3652071424,3652075519,BG
3652075520,3652083711,SE
3652083712,3652087807,RU
-3652087808,3652094463,IT
-3652094464,3652094975,US
-3652094976,3652095231,IT
-3652095232,3652095999,US
+3652087808,3652095999,IT
3652096000,3652100095,BG
-3652100096,3652105471,RU
-3652105472,3652105535,US
-3652105536,3652108287,RU
+3652100096,3652108287,RU
3652108288,3652116479,FR
3652116480,3652120575,TM
3652120576,3652124671,GB
3652124672,3652128767,UA
3652128768,3652136959,RU
3652136960,3652141055,IT
-3652141056,3652141311,GB
-3652141312,3652142847,A2
-3652142848,3652143359,GB
-3652143360,3652144127,A2
-3652144128,3652144383,KE
-3652144384,3652144639,A2
-3652144640,3652145151,GB
+3652141056,3652145151,GB
3652145152,3652149247,UA
3652149248,3652153343,DE
3652153344,3652157439,SE
3652157440,3652165631,RU
-3652165632,3652165887,MQ
-3652165888,3652168703,FR
-3652168704,3652168959,MQ
-3652168960,3652169215,FR
-3652169216,3652169471,GF
-3652169472,3652169983,FR
-3652169984,3652170239,MQ
-3652170240,3652170495,FR
-3652170496,3652170751,MQ
-3652170752,3652171263,FR
-3652171264,3652171775,MQ
-3652171776,3652173055,FR
-3652173056,3652173311,RE
-3652173312,3652173823,FR
+3652165632,3652169471,FR
+3652169472,3652169727,GF
+3652169728,3652170495,MQ
+3652170496,3652170751,FR
+3652170752,3652171007,MQ
+3652171008,3652172031,FR
+3652172032,3652172287,RE
+3652172288,3652172799,FR
+3652172800,3652173055,RE
+3652173056,3652173823,FR
3652173824,3652177919,AT
3652177920,3652182015,CY
-3652182016,3652182527,DE
-3652182528,3652182783,AT
-3652182784,3652186591,DE
-3652186592,3652186623,CH
-3652186624,3652186879,DE
-3652186880,3652187007,AT
-3652187008,3652190207,DE
+3652182016,3652190207,DE
3652190208,3652714495,GB
-3652714496,3652985039,DE
-3652985040,3652985047,FR
-3652985048,3653029775,DE
-3653029776,3653029791,LU
-3653029792,3653031727,DE
-3653031728,3653031735,LU
-3653031736,3653039103,DE
-3653039104,3653039359,IT
-3653039360,3653039999,DE
-3653040000,3653040015,LU
-3653040016,3653238783,DE
-3653238784,3653334141,CH
-3653334142,3653334142,AT
-3653334143,3653369855,CH
+3652714496,3653238783,DE
+3653238784,3653369855,CH
3653369856,3653373951,IT
3653373952,3653378047,NL
3653378048,3653382143,DE
@@ -177572,136 +90233,9 @@
3653386240,3653390335,DE
3653390336,3653394431,FR
3653394432,3653402623,NL
-3653402624,3653403135,GB
-3653403136,3653403647,CD
-3653403648,3653403903,ZW
-3653403904,3653403911,GB
-3653403912,3653403919,IQ
-3653403920,3653403927,GB
-3653403928,3653403931,UA
-3653403932,3653403943,GB
-3653403944,3653403951,LB
-3653403952,3653403959,IQ
-3653403960,3653403967,MW
-3653403968,3653403975,NG
-3653403976,3653403983,GB
-3653403984,3653403999,UA
-3653404000,3653404015,ZM
-3653404016,3653404039,GB
-3653404040,3653404047,IQ
-3653404048,3653404063,GB
-3653404064,3653404071,LB
-3653404072,3653404079,AO
-3653404080,3653404087,UA
-3653404088,3653404127,GB
-3653404128,3653404135,RS
-3653404136,3653404159,GB
-3653404160,3653404415,AT
-3653404416,3653404543,GB
-3653404544,3653404559,NG
-3653404560,3653404639,GB
-3653404640,3653404655,UA
-3653404656,3653404671,GB
-3653404672,3653404679,TR
-3653404680,3653404707,GB
-3653404708,3653404713,IQ
-3653404714,3653404719,GB
-3653404720,3653404735,LB
-3653404736,3653404823,GB
-3653404824,3653404831,LB
-3653404832,3653404847,NG
-3653404848,3653404855,GB
-3653404856,3653404863,SL
-3653404864,3653404903,GB
-3653404904,3653404911,IQ
-3653404912,3653404919,LY
-3653404920,3653404959,GB
-3653404960,3653404975,UA
-3653404976,3653405039,GB
-3653405040,3653405047,LB
-3653405048,3653405055,IQ
-3653405056,3653405063,GB
-3653405064,3653405071,IQ
-3653405072,3653405095,GB
-3653405096,3653405103,NG
-3653405104,3653405167,GB
-3653405168,3653405183,UA
-3653405184,3653405439,AT
-3653405440,3653405695,CF
-3653405696,3653407015,GB
-3653407016,3653407023,UG
-3653407024,3653407031,GB
-3653407032,3653407039,US
-3653407040,3653407071,NG
-3653407072,3653407103,GB
-3653407104,3653407111,UG
-3653407112,3653407119,GB
-3653407120,3653407127,VG
-3653407128,3653407135,GB
-3653407136,3653407151,MZ
-3653407152,3653407167,GB
-3653407168,3653407231,NG
-3653407232,3653407391,GB
-3653407392,3653407399,NG
-3653407400,3653407487,GB
-3653407488,3653407743,US
-3653407744,3653407999,AT
-3653408000,3653408119,US
-3653408120,3653408127,GB
-3653408128,3653408255,US
-3653408256,3653408271,GB
-3653408272,3653408279,IQ
-3653408280,3653408319,GB
-3653408320,3653408327,IQ
-3653408328,3653408767,GB
-3653408768,3653409023,CD
-3653409024,3653409039,GB
-3653409040,3653409047,NG
-3653409048,3653409063,GB
-3653409064,3653409071,CD
-3653409072,3653409087,GB
-3653409088,3653409095,CD
-3653409096,3653409103,GB
-3653409104,3653409111,GR
-3653409112,3653409215,GB
-3653409216,3653409223,SS
-3653409224,3653409239,GB
-3653409240,3653409247,SS
-3653409248,3653409263,GB
-3653409264,3653409271,SD
-3653409272,3653409311,GB
-3653409312,3653409319,IQ
-3653409320,3653409535,GB
-3653409536,3653409559,UA
-3653409560,3653409567,CM
-3653409568,3653409575,UA
-3653409576,3653409615,GB
-3653409616,3653409623,IQ
-3653409624,3653409639,NG
-3653409640,3653409647,GB
-3653409648,3653409663,NG
-3653409664,3653409791,CM
-3653409792,3653409919,GB
-3653409920,3653410047,NG
-3653410048,3653410063,YT
-3653410064,3653410079,US
-3653410080,3653410095,GB
-3653410096,3653410111,US
-3653410112,3653410119,GB
-3653410120,3653410127,NG
-3653410128,3653410131,GB
-3653410132,3653410135,IQ
-3653410136,3653410151,GB
-3653410152,3653410159,FR
-3653410160,3653410175,NG
-3653410176,3653410183,KE
-3653410184,3653410191,MZ
-3653410192,3653410199,ZW
-3653410200,3653410255,US
-3653410256,3653410295,GB
-3653410296,3653410303,MW
-3653410304,3653410559,GB
-3653410560,3653410815,IL
+3653402624,3653410060,GB
+3653410061,3653410061,YT
+3653410062,3653410815,GB
3653410816,3653414911,CZ
3653414912,3653419007,IT
3653419008,3653423103,IL
@@ -177710,36 +90244,14 @@
3653431296,3653435391,RU
3653435392,3653439487,DE
3653439488,3653443583,FR
-3653443584,3653444351,DE
-3653444352,3653444383,IT
-3653444384,3653447167,DE
-3653447168,3653447679,NL
+3653443584,3653447679,DE
3653447680,3653451775,LV
3653451776,3653464063,RU
3653464064,3653468159,NL
3653468160,3653472255,GR
-3653472256,3653472279,NL
-3653472280,3653472291,AF
-3653472292,3653472511,NL
-3653472512,3653472559,AF
-3653472560,3653472567,NL
-3653472568,3653472575,AF
-3653472576,3653472591,NL
-3653472592,3653472767,AF
-3653472768,3653472775,NL
-3653472776,3653472791,AF
-3653472792,3653472831,NL
-3653472832,3653472871,AF
-3653472872,3653472879,NL
-3653472880,3653472915,AF
-3653472916,3653472919,NL
-3653472920,3653472983,AF
-3653472984,3653472999,NL
-3653473000,3653473023,AF
-3653473024,3653473279,US
-3653473280,3653474303,NL
-3653474304,3653474367,US
-3653474368,3653476351,NL
+3653472256,3653472511,NL
+3653472512,3653472767,US
+3653472768,3653476351,NL
3653476352,3653480447,CZ
3653480448,3653484543,DK
3653484544,3653488639,TR
@@ -177749,36 +90261,11 @@
3653505024,3653509119,KZ
3653509120,3653513215,NL
3653513216,3653517311,NO
-3653517312,3653518367,AT
-3653518368,3653518399,SK
-3653518400,3653518479,AT
-3653518480,3653518495,SK
-3653518496,3653523199,AT
-3653523200,3653523455,SK
-3653523456,3653523615,AT
-3653523616,3653523647,SK
-3653523648,3653524415,AT
-3653524416,3653524479,SK
-3653524480,3653524551,AT
-3653524552,3653524559,GR
-3653524560,3653524735,AT
-3653524736,3653524863,SK
-3653524864,3653524959,AT
-3653524960,3653525151,SK
-3653525152,3653525183,AT
-3653525184,3653525215,SK
-3653525216,3653525439,AT
-3653525440,3653525503,SK
+3653517312,3653525503,AT
3653525504,3653529599,RU
3653529600,3653533695,CZ
3653533696,3653537791,IT
-3653537792,3653539031,AT
-3653539032,3653539039,US
-3653539040,3653539295,AT
-3653539296,3653539311,US
-3653539312,3653539839,AT
-3653539840,3653539863,DE
-3653539864,3653541887,AT
+3653537792,3653541887,AT
3653541888,3653545983,UA
3653545984,3653550079,CH
3653550080,3653554175,MK
@@ -177798,9 +90285,7 @@
3653607424,3653611519,PL
3653611520,3653615615,HU
3653615616,3653619711,RU
-3653619712,3653623295,CH
-3653623296,3653623551,JP
-3653623552,3653623807,US
+3653619712,3653623807,CH
3653623808,3653636095,RU
3653636096,3653640191,NL
3653640192,3653648383,GB
@@ -177808,14 +90293,10 @@
3653652480,3653656575,RU
3653656576,3653660671,GB
3653660672,3653664767,CZ
-3653664768,3653664895,DE
-3653664896,3653664911,FR
-3653664912,3653665023,NL
-3653665024,3653665087,DE
-3653665088,3653665151,NL
-3653665152,3653665279,DE
-3653665280,3653665791,NL
-3653665792,3653668863,DE
+3653664768,3653665791,NL
+3653665792,3653666815,DE
+3653666816,3653667839,NL
+3653667840,3653668863,DE
3653668864,3653672959,SE
3653672960,3653681151,RU
3653681152,3653685247,ES
@@ -177823,103 +90304,46 @@
3653689344,3653693439,LV
3653693440,3653697535,DE
3653697536,3653705727,IT
-3653705728,3653705735,SE
-3653705736,3653705863,NO
-3653705864,3653705871,SE
-3653705872,3653705895,NO
-3653705896,3653705903,BS
-3653705904,3653706175,NO
-3653706176,3653706191,SE
-3653706192,3653706271,NO
-3653706272,3653706303,SE
-3653706304,3653706495,NO
-3653706496,3653706751,SE
-3653706752,3653710847,NO
-3653710848,3653710911,SE
-3653710912,3653713919,NO
+3653705728,3653713919,NO
3653713920,3653718015,DE
3653718016,3653722111,AT
3653722112,3653730303,LV
3653730304,3653734399,BA
3653734400,3653738495,KE
-3653738496,3653740287,GB
-3653740288,3653740543,ES
-3653740544,3653746687,GB
+3653738496,3653746687,GB
3653746688,3653750783,DE
-3653750784,3653753087,RU
-3653753088,3653753215,VG
-3653753216,3653754879,RU
+3653750784,3653754879,RU
3653754880,3653758975,UA
3653758976,3653763071,RU
3653763072,3654025215,IT
-3654025216,3654034783,GB
-3654034784,3654034799,LU
-3654034800,3654035583,GB
-3654035584,3654035591,US
-3654035592,3654035607,GB
-3654035608,3654035615,SE
-3654035616,3654045879,GB
-3654045880,3654045887,IT
-3654045888,3654061951,GB
-3654061952,3654062079,DE
-3654062080,3654066027,GB
-3654066028,3654066031,MC
-3654066032,3654287359,GB
-3654287360,3654607103,SE
-3654607104,3654607359,DE
-3654607360,3654607871,SE
-3654607872,3654608127,NO
-3654608128,3654608404,SE
+3654025216,3654287359,GB
+3654287360,3654608404,SE
3654608405,3654608405,NO
-3654608406,3654608895,SE
+3654608406,3654608639,SE
+3654608640,3654608895,RU
3654608896,3654609919,NO
-3654609920,3654610431,SE
-3654610432,3654610943,FR
-3654610944,3654611199,SE
-3654611200,3654611455,NL
-3654611456,3654613007,SE
-3654613008,3654613015,RU
-3654613016,3654613055,SE
-3654613056,3654613071,RU
-3654613072,3654613087,SE
-3654613088,3654613151,RU
-3654613152,3654613183,DE
-3654613184,3654613247,SE
-3654613248,3654614015,NO
-3654614016,3654614079,SE
-3654614080,3654614271,FI
-3654614272,3654614527,NL
-3654614528,3654614783,RU
-3654614784,3654615039,NO
-3654615040,3654811647,SE
+3654609920,3654614143,SE
+3654614144,3654614271,FI
+3654614272,3654811647,SE
3654811648,3654942719,ES
3654942720,3655073791,IR
3655073792,3655335935,IT
-3655335936,3656633487,DE
-3656633488,3656633495,GB
-3656633496,3656633503,US
-3656633504,3656635647,DE
-3656635648,3656635903,GB
-3656635904,3656650583,DE
-3656650584,3656650591,US
-3656650592,3656661183,DE
-3656661184,3656661199,AT
-3656661200,3656661583,DE
-3656661584,3656661599,AT
-3656661600,3656661647,DE
-3656661648,3656661679,AT
-3656661680,3656662271,DE
-3656662272,3656662367,AT
-3656662368,3656662431,DE
-3656662432,3656662463,AT
-3656662464,3657433087,DE
+3655335936,3657433087,DE
3657433088,3659530239,CN
3659530240,3659595775,TW
3659595776,3659628543,ID
3659628544,3659661311,JP
3659661312,3659792383,TW
3659792384,3660054527,KR
-3660054528,3660578815,JP
+3660054528,3660097535,JP
+3660097536,3660097791,US
+3660097792,3660099583,JP
+3660099584,3660099839,US
+3660099840,3660102143,JP
+3660102144,3660102399,US
+3660102400,3660102655,JP
+3660102656,3660102911,US
+3660102912,3660578815,JP
3660578816,3661103103,KR
3661103104,3663986687,CN
3663986688,3663987711,AU
@@ -177948,7 +90372,6 @@
3663998464,3663998975,TH
3663998976,3663999487,IN
3663999488,3663999743,AU
-3663999744,3663999999,KH
3664000000,3664000767,AU
3664000768,3664001023,ID
3664001024,3664001279,NZ
@@ -177962,7 +90385,6 @@
3664003584,3664003839,TH
3664003840,3664004095,JP
3664004352,3664004607,MY
-3664004608,3664004863,SG
3664004864,3664005119,KH
3664005120,3664005887,ID
3664005888,3664006143,MY
@@ -178001,9 +90423,7 @@
3671130112,3671195647,KR
3671195648,3671326719,TW
3671326720,3671392255,SG
-3671392256,3671411711,HK
-3671411712,3671411967,AP
-3671411968,3671457791,HK
+3671392256,3671457791,HK
3671457792,3671588863,AU
3671588864,3672637439,JP
3672637440,3673161727,KR
@@ -178039,9 +90459,7 @@
3680239616,3680403455,MY
3680403456,3680436223,JP
3680436224,3680501759,MY
-3680501760,3682554623,JP
-3682554624,3682554879,AP
-3682554880,3682598911,JP
+3680501760,3682598911,JP
3682598912,3684696063,CN
3684696064,3688366079,JP
3688366080,3689938943,CN
@@ -178050,7 +90468,13 @@
3690463232,3690987519,KR
3690987520,3695181823,JP
3695181824,3697278975,KR
-3697278976,3697606655,JP
+3697278976,3697574399,JP
+3697574400,3697574687,GB
+3697574688,3697574719,JP
+3697574720,3697574783,GB
+3697574784,3697574903,JP
+3697574904,3697574911,GB
+3697574912,3697606655,JP
3697606656,3697655807,AU
3697655808,3697672191,CN
3697672192,3697737727,JP
@@ -178075,7 +90499,8 @@
3701293056,3701301247,AU
3701301248,3701305343,ID
3701305344,3701309439,TW
-3701309440,3701473279,JP
+3701309440,3701374975,JP
+3701407744,3701473279,JP
3701473280,3704619007,CN
3704619008,3705667583,JP
3705667584,3705929727,IN
@@ -178096,11 +90521,15 @@
3707109376,3707174911,HK
3707174912,3707207679,JP
3707208704,3707209727,WS
-3707209728,3707211775,CN
-3707211776,3707215871,SG
+3707209728,3707215871,CN
3707215872,3707217919,BD
3707217920,3707219967,ID
-3707219968,3707222015,AU
+3707219968,3707220479,NZ
+3707220480,3707220735,AU
+3707220736,3707220991,NZ
+3707220992,3707221247,AU
+3707221248,3707221759,NZ
+3707221760,3707222015,AU
3707222016,3707224063,JP
3707224064,3707240447,LK
3707240448,3707568127,CN
@@ -178174,7 +90603,9 @@
3735404544,3735420927,ID
3735420928,3735551999,HK
3735552000,3739222015,CN
-3739222016,3739570175,JP
+3739222016,3739555071,JP
+3739555072,3739555327,US
+3739555328,3739570175,JP
3739570176,3739572223,ID
3739572224,3739574271,AU
3739574272,3739680767,JP
@@ -178190,9 +90621,7 @@
3742629888,3742760959,CN
3742760960,3742892031,TW
3742892032,3742957567,TH
-3742957568,3742959871,PH
-3742959872,3742960127,US
-3742960128,3742973951,PH
+3742957568,3742973951,PH
3742973952,3742982143,SG
3742982144,3742986239,ID
3742986240,3742988287,AU
@@ -178201,14 +90630,16 @@
3743006720,3743014911,TH
3743014912,3743016959,AU
3743016960,3743019007,SG
-3743019008,3743023103,MY
+3743019008,3743022079,MY
3743023104,3743027199,TW
3743027200,3743031295,SG
3743031296,3743035391,IN
3743035392,3743039487,HK
3743039488,3743055871,TW
3743055872,3743088639,KR
-3743088640,3743096831,AU
+3743088640,3743093647,AU
+3743093648,3743093648,NZ
+3743093649,3743096831,AU
3743096832,3743105023,TW
3743105024,3743106047,AU
3743106048,3743109119,JP
@@ -178221,8 +90652,7 @@
3743120384,3743121407,JP
3743121408,3743125503,MY
3743125504,3743129599,ID
-3743129600,3743129855,MY
-3743129856,3743130623,HK
+3743129600,3743130623,HK
3743130624,3743133695,SG
3743133696,3743134719,AU
3743134720,3743135743,JP
@@ -178246,7 +90676,8 @@
3749183488,3749838847,CN
3749838848,3749839871,SG
3749839872,3749840895,IN
-3749841920,3749847039,AU
+3749841920,3749842943,AU
+3749843968,3749846015,AU
3749847040,3749855231,HK
3749855232,3749969919,KR
3749969920,3750232063,JP
@@ -178288,11 +90719,14 @@
3755988992,3755990015,HK
3755990016,3755991039,SG
3755991040,3755999231,JP
-3755999232,3756007423,LK
-3756007424,3757047807,IN
+3755999232,3756002815,IN
+3756002816,3756003071,LK
+3756003072,3757047807,IN
3757047808,3757834239,CN
3757834240,3757867007,AU
-3757867008,3757899775,CN
+3757867008,3757875519,CN
+3757875520,3757875583,HK
+3757875584,3757899775,CN
3757899776,3757965311,KR
3757965312,3758063615,CN
3758063616,3758079999,HK
@@ -178302,7 +90736,6 @@
3758091264,3758092287,CN
3758092288,3758093311,HK
3758093312,3758094335,IN
-3758094336,3758095359,AU
3758095360,3758095871,CN
3758095872,3758096127,SG
3758096128,3758096383,AU
diff --git a/src/config/geoip6 b/src/config/geoip6
new file mode 100644
index 000000000..0804892d4
--- /dev/null
+++ b/src/config/geoip6
@@ -0,0 +1,18119 @@
+# Last updated based on June 4 2014 Maxmind GeoLite2 Country
+# wget https://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.mmdb.gz
+# gunzip GeoLite2-Country.mmdb.gz
+# python mmdb-convert.py GeoLite2-Country.mmdb
+2001:218::,2001:218:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:220::,2001:220:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2001:230::,2001:230:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2001:238::,2001:238:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2001:240::,2001:240:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:250::,2001:252:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2001:254::,2001:254:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2001:256::,2001:256:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2001:258::,2001:258:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:260::,2001:260:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:268::,2001:268:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:270::,2001:270:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2001:278::,2001:278:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:280::,2001:280:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2001:288::,2001:288:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2001:290::,2001:290:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2001:298::,2001:298:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:2a0::,2001:2a0:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:2a8::,2001:2a8:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:2b0::,2001:2b0:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2001:2b8::,2001:2b8:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2001:2c0::,2001:2c0:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:2c8::,2001:2c8:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:2d8::,2001:2d8:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2001:2e0::,2001:2e0:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2001:2e8::,2001:2e8:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:2f0::,2001:2f0:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:2f8::,2001:2f8:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:300::,2001:300:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:308::,2001:308:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:310::,2001:310:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:318::,2001:318:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:320::,2001:320:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2001:328::,2001:328:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2001:330::,2001:330:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2001:338::,2001:338:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:340::,2001:340:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:348::,2001:348:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:350::,2001:350:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:358::,2001:358:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:360::,2001:360:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2001:368::,2001:368:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:370::,2001:370:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:378::,2001:378:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2001:380::,2001:380:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:388::,2001:388:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2001:390::,2001:390:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2001:398::,2001:398:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:3a0::,2001:3a0:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:3a8::,2001:3a8:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2001:3b0::,2001:3b0:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:3b8::,2001:3b8:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:3c0::,2001:3c0:1fff:ffff:ffff:ffff:ffff:ffff,JP
+2001:3c8::,2001:3c8:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2001:3d0::,2001:3d0:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:3d8::,2001:3d8:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:3e0::,2001:3e0:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:3e8::,2001:3e8:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:400::,2001:400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:408::,2001:408:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:410::,2001:410:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2001:418::,2001:418:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:420::,2001:420:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:428::,2001:428:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:430::,2001:430:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:438::,2001:438:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:440::,2001:440:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:448::,2001:448:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2001:450::,2001:450:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:458::,2001:458:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:460::,2001:460:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:468::,2001:468:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:470::,2001:470:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:478::,2001:478:ffff:ffff:ffff:ffff:ffff:ffff,KN
+2001:480::,2001:480:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:490::,2001:490:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4a0::,2001:4a0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4b0::,2001:4b0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4b8::,2001:4b8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4c0::,2001:4c0:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2001:4c8::,2001:4c8:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2001:4d0::,2001:4d0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4e0::,2001:4e0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4e8::,2001:4e8:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2001:4f0::,2001:4f0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4f8::,2001:4f8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:500:1::,2001:500:4:ffff:ffff:ffff:ffff:ffff,US
+2001:500:6::,2001:500:f:ffff:ffff:ffff:ffff:ffff,CA
+2001:500:10::,2001:500:10:ffff:ffff:ffff:ffff:ffff,PR
+2001:500:11::,2001:500:15:ffff:ffff:ffff:ffff:ffff,US
+2001:500:16::,2001:500:2c:ffff:ffff:ffff:ffff:ffff,CA
+2001:500:2d::,2001:500:31:ffff:ffff:ffff:ffff:ffff,US
+2001:500:40::,2001:500:56:ffff:ffff:ffff:ffff:ffff,CA
+2001:500:60::,2001:500:7d:ffff:ffff:ffff:ffff:ffff,US
+2001:500:80::,2001:500:83:ffff:ffff:ffff:ffff:ffff,CA
+2001:500:84::,2001:500:89:ffff:ffff:ffff:ffff:ffff,US
+2001:500:8c::,2001:500:9a:ffff:ffff:ffff:ffff:ffff,US
+2001:500:9c::,2001:500:9f:ffff:ffff:ffff:ffff:ffff,US
+2001:500:a0::,2001:500:a7:ffff:ffff:ffff:ffff:ffff,CA
+2001:500:a8::,2001:500:a8:ffff:ffff:ffff:ffff:ffff,US
+2001:500:c0::,2001:500:ef:ffff:ffff:ffff:ffff:ffff,CA
+2001:500:f0::,2001:500:f0:ffff:ffff:ffff:ffff:ffff,US
+2001:500:f1::,2001:500:f1:ffff:ffff:ffff:ffff:ffff,CA
+2001:500:100::,2001:500:109:ffff:ffff:ffff:ffff:ffff,CA
+2001:500:3e5::,2001:500:3e5:ffff:ffff:ffff:ffff:ffff,US
+2001:500:30ff::,2001:500:30ff:ffff:ffff:ffff:ffff:ffff,US
+2001:500:3682::,2001:500:3682:ffff:ffff:ffff:ffff:ffff,US
+2001:500:4431::,2001:500:4431:ffff:ffff:ffff:ffff:ffff,US
+2001:500:7967::,2001:500:7967:ffff:ffff:ffff:ffff:ffff,US
+2001:500:856e::,2001:500:856e:ffff:ffff:ffff:ffff:ffff,US
+2001:500:d937::,2001:500:d937:ffff:ffff:ffff:ffff:ffff,US
+2001:500:ed30::,2001:500:ed30:ffff:ffff:ffff:ffff:ffff,US
+2001:501:8a29::,2001:501:8a29:ffff:ffff:ffff:ffff:ffff,US
+2001:501:973c::,2001:501:973c:ffff:ffff:ffff:ffff:ffff,US
+2001:501:b1f9::,2001:501:b1f9:ffff:ffff:ffff:ffff:ffff,US
+2001:502:8cc::,2001:502:8cc:ffff:ffff:ffff:ffff:ffff,US
+2001:502:100e::,2001:502:100e:ffff:ffff:ffff:ffff:ffff,US
+2001:502:1ca1::,2001:502:1ca1:ffff:ffff:ffff:ffff:ffff,US
+2001:502:2eda::,2001:502:2eda:ffff:ffff:ffff:ffff:ffff,US
+2001:502:4612::,2001:502:4612:ffff:ffff:ffff:ffff:ffff,US
+2001:502:63bd::,2001:502:63bd:ffff:ffff:ffff:ffff:ffff,US
+2001:502:7094::,2001:502:7094:ffff:ffff:ffff:ffff:ffff,US
+2001:502:7a71::,2001:502:7a71:ffff:ffff:ffff:ffff:ffff,US
+2001:502:8c25::,2001:502:8c25:ffff:ffff:ffff:ffff:ffff,US
+2001:502:ad09::,2001:502:ad09:ffff:ffff:ffff:ffff:ffff,US
+2001:502:be98::,2001:502:be98:ffff:ffff:ffff:ffff:ffff,US
+2001:502:cbe4::,2001:502:cbe4:ffff:ffff:ffff:ffff:ffff,US
+2001:502:cfb5::,2001:502:cfb5:ffff:ffff:ffff:ffff:ffff,US
+2001:502:d399::,2001:502:d399:ffff:ffff:ffff:ffff:ffff,US
+2001:502:f3ff::,2001:502:f3ff:ffff:ffff:ffff:ffff:ffff,US
+2001:503:c27::,2001:503:c27:ffff:ffff:ffff:ffff:ffff,US
+2001:503:d2d::,2001:503:d2d:ffff:ffff:ffff:ffff:ffff,US
+2001:503:231d::,2001:503:231d:ffff:ffff:ffff:ffff:ffff,US
+2001:503:3227::,2001:503:3227:ffff:ffff:ffff:ffff:ffff,US
+2001:503:39c1::,2001:503:39c1:ffff:ffff:ffff:ffff:ffff,US
+2001:503:4872::,2001:503:4872:ffff:ffff:ffff:ffff:ffff,US
+2001:503:5419::,2001:503:5419:ffff:ffff:ffff:ffff:ffff,US
+2001:503:5ae2::,2001:503:5ae2:ffff:ffff:ffff:ffff:ffff,US
+2001:503:6810::,2001:503:6810:ffff:ffff:ffff:ffff:ffff,US
+2001:503:7bbb::,2001:503:7bbb:ffff:ffff:ffff:ffff:ffff,US
+2001:503:7bbf::,2001:503:7bbf:ffff:ffff:ffff:ffff:ffff,US
+2001:503:8028::,2001:503:8028:ffff:ffff:ffff:ffff:ffff,US
+2001:503:83eb::,2001:503:83eb:ffff:ffff:ffff:ffff:ffff,US
+2001:503:91ef::,2001:503:91ef:ffff:ffff:ffff:ffff:ffff,US
+2001:503:a124::,2001:503:a124:ffff:ffff:ffff:ffff:ffff,US
+2001:503:a83e::,2001:503:a83e:ffff:ffff:ffff:ffff:ffff,US
+2001:503:ba3e::,2001:503:ba3e:ffff:ffff:ffff:ffff:ffff,US
+2001:503:bfb0::,2001:503:bfb0:ffff:ffff:ffff:ffff:ffff,US
+2001:503:c779::,2001:503:c779:ffff:ffff:ffff:ffff:ffff,US
+2001:503:cc2c::,2001:503:cc2c:ffff:ffff:ffff:ffff:ffff,US
+2001:503:d1ae::,2001:503:d1ae:ffff:ffff:ffff:ffff:ffff,US
+2001:503:d414::,2001:503:d414:ffff:ffff:ffff:ffff:ffff,US
+2001:503:e239::,2001:503:e239:ffff:ffff:ffff:ffff:ffff,US
+2001:503:e8ef::,2001:503:e8ef:ffff:ffff:ffff:ffff:ffff,US
+2001:503:eea3::,2001:503:eea3:ffff:ffff:ffff:ffff:ffff,US
+2001:503:f189::,2001:503:f189:ffff:ffff:ffff:ffff:ffff,US
+2001:503:f261::,2001:503:f261:ffff:ffff:ffff:ffff:ffff,US
+2001:503:f3da::,2001:503:f3da:ffff:ffff:ffff:ffff:ffff,US
+2001:503:ff39::,2001:503:ff39:ffff:ffff:ffff:ffff:ffff,US
+2001:504::,2001:504:13:ffff:ffff:ffff:ffff:ffff,US
+2001:504:15::,2001:504:15:ffff:ffff:ffff:ffff:ffff,CA
+2001:504:16::,2001:504:19:ffff:ffff:ffff:ffff:ffff,US
+2001:504:1a::,2001:504:1a:ffff:ffff:ffff:ffff:ffff,CA
+2001:504:1b::,2001:504:1c:ffff:ffff:ffff:ffff:ffff,US
+2001:504:1d::,2001:504:1d:ffff:ffff:ffff:ffff:ffff,PR
+2001:504:20::,2001:504:23:ffff:ffff:ffff:ffff:ffff,CA
+2001:504:24::,2001:504:24:ffff:ffff:ffff:ffff:ffff,US
+2001:504:25::,2001:504:26:ffff:ffff:ffff:ffff:ffff,CA
+2001:504:27::,2001:504:2a:ffff:ffff:ffff:ffff:ffff,US
+2001:504:2b::,2001:504:2d:ffff:ffff:ffff:ffff:ffff,CA
+2001:504:2e::,2001:504:2e:ffff:ffff:ffff:ffff:ffff,US
+2001:504:2f::,2001:504:2f:ffff:ffff:ffff:ffff:ffff,CA
+2001:506::,2001:506:1:ffff:ffff:ffff:ffff:ffff,US
+2001:506:8::,2001:506:8:ffff:ffff:ffff:ffff:ffff,US
+2001:506:20::,2001:506:20:ffff:ffff:ffff:ffff:ffff,CA
+2001:506:28::,2001:506:28:ffff:ffff:ffff:ffff:ffff,US
+2001:506:100::,2001:506:100:ffff:ffff:ffff:ffff:ffff,US
+2001:506:1000::,2001:506:2fff:ffff:ffff:ffff:ffff:ffff,US
+2001:506:4000::,2001:506:7fff:ffff:ffff:ffff:ffff:ffff,US
+2001:508::,2001:508:ffff:ffff:ffff:ffff:ffff:ffff,BM
+2001:510::,2001:510:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2001:518::,2001:518:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:520::,2001:520:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:528::,2001:528:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:530::,2001:530:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:538::,2001:538:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:540::,2001:540:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:548::,2001:548:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:550::,2001:550:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:558::,2001:560:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:568::,2001:56f:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2001:570::,2001:570:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:578::,2001:57b:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:580::,2001:580:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:590::,2001:590:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:598::,2001:598:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2001:5a0::,2001:5a0:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2001:5a8::,2001:5a8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:5b0::,2001:5b0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:5b8::,2001:5b8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:5c0::,2001:5c0:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2001:5c8::,2001:5c8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:5d0::,2001:5d0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:5d8::,2001:5d8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:5e0::,2001:5e0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:5e8::,2001:5e8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:5f0::,2001:5f0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:5f8::,2001:5f8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:608::,2001:608:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:610::,2001:610:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:618::,2001:618:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2001:620::,2001:620:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2001:628::,2001:62f:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2001:630::,2001:630:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:638::,2001:638:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:640::,2001:640:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2001:648::,2001:648:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2001:650::,2001:658:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:660::,2001:667:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2001:668::,2001:66f:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:670::,2001:673:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2001:678:1::,2001:678:1:ffff:ffff:ffff:ffff:ffff,CZ
+2001:678:2::,2001:678:2:ffff:ffff:ffff:ffff:ffff,DE
+2001:678:3::,2001:678:3:ffff:ffff:ffff:ffff:ffff,CH
+2001:678:4::,2001:678:5:ffff:ffff:ffff:ffff:ffff,GB
+2001:678:6::,2001:678:6:ffff:ffff:ffff:ffff:ffff,LT
+2001:678:7::,2001:678:7:ffff:ffff:ffff:ffff:ffff,GR
+2001:678:8::,2001:678:8:ffff:ffff:ffff:ffff:ffff,NL
+2001:678:9::,2001:678:a:ffff:ffff:ffff:ffff:ffff,BE
+2001:678:b::,2001:678:b:ffff:ffff:ffff:ffff:ffff,LV
+2001:678:c::,2001:678:c:ffff:ffff:ffff:ffff:ffff,FR
+2001:678:d::,2001:678:d:ffff:ffff:ffff:ffff:ffff,AT
+2001:678:e::,2001:678:e:ffff:ffff:ffff:ffff:ffff,DE
+2001:678:f::,2001:678:11:ffff:ffff:ffff:ffff:ffff,CZ
+2001:678:12::,2001:678:12:ffff:ffff:ffff:ffff:ffff,IT
+2001:678:13::,2001:678:18:ffff:ffff:ffff:ffff:ffff,RU
+2001:678:19::,2001:678:19:ffff:ffff:ffff:ffff:ffff,LT
+2001:678:1a::,2001:678:1a:ffff:ffff:ffff:ffff:ffff,DK
+2001:678:1b::,2001:678:1b:ffff:ffff:ffff:ffff:ffff,LU
+2001:678:1c::,2001:678:1c:ffff:ffff:ffff:ffff:ffff,AT
+2001:678:20::,2001:678:20:ffff:ffff:ffff:ffff:ffff,AT
+2001:678:24::,2001:678:24:ffff:ffff:ffff:ffff:ffff,AT
+2001:678:28::,2001:678:28:ffff:ffff:ffff:ffff:ffff,SM
+2001:678:2c::,2001:678:2c:ffff:ffff:ffff:ffff:ffff,NL
+2001:678:30::,2001:678:30:ffff:ffff:ffff:ffff:ffff,NL
+2001:678:34::,2001:678:34:ffff:ffff:ffff:ffff:ffff,NL
+2001:678:38::,2001:678:38:ffff:ffff:ffff:ffff:ffff,NL
+2001:678:3c::,2001:678:3c:ffff:ffff:ffff:ffff:ffff,BG
+2001:678:40::,2001:678:40:ffff:ffff:ffff:ffff:ffff,ES
+2001:678:44::,2001:678:44:ffff:ffff:ffff:ffff:ffff,ES
+2001:678:48::,2001:678:48:ffff:ffff:ffff:ffff:ffff,ES
+2001:678:4c::,2001:678:4c:ffff:ffff:ffff:ffff:ffff,FR
+2001:678:60::,2001:678:60:ffff:ffff:ffff:ffff:ffff,LU
+2001:678:64::,2001:678:64:ffff:ffff:ffff:ffff:ffff,BE
+2001:678:68::,2001:678:68:ffff:ffff:ffff:ffff:ffff,BE
+2001:678:6c::,2001:678:6c:ffff:ffff:ffff:ffff:ffff,BE
+2001:678:70::,2001:678:70:ffff:ffff:ffff:ffff:ffff,SK
+2001:678:74::,2001:678:74:ffff:ffff:ffff:ffff:ffff,DK
+2001:678:78::,2001:678:78:ffff:ffff:ffff:ffff:ffff,DK
+2001:678:7c::,2001:678:7c:ffff:ffff:ffff:ffff:ffff,LV
+2001:678:80::,2001:678:80:ffff:ffff:ffff:ffff:ffff,LV
+2001:678:84::,2001:678:84:ffff:ffff:ffff:ffff:ffff,LV
+2001:678:88::,2001:678:88:ffff:ffff:ffff:ffff:ffff,LT
+2001:678:8c::,2001:678:8c:ffff:ffff:ffff:ffff:ffff,LT
+2001:678:90::,2001:678:90:ffff:ffff:ffff:ffff:ffff,SK
+2001:678:94::,2001:678:94:ffff:ffff:ffff:ffff:ffff,EE
+2001:678:98::,2001:678:98:ffff:ffff:ffff:ffff:ffff,KZ
+2001:67c::,2001:67c::ffff:ffff:ffff:ffff:ffff,IE
+2001:67c:4::,2001:67c:4:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:8::,2001:67c:8:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:c::,2001:67c:c:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:10::,2001:67c:10:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:14::,2001:67c:14:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:18::,2001:67c:18:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:1c::,2001:67c:1c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:20::,2001:67c:20:ffff:ffff:ffff:ffff:ffff,IE
+2001:67c:24::,2001:67c:24:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2c::,2001:67c:2c:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:30::,2001:67c:30:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:34::,2001:67c:34:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:38::,2001:67c:38:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:40::,2001:67c:40:ffff:ffff:ffff:ffff:ffff,BE
+2001:67c:44::,2001:67c:44:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:4c::,2001:67c:4c:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:50::,2001:67c:50:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:54::,2001:67c:54:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:58::,2001:67c:58:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:5c::,2001:67c:5c:ffff:ffff:ffff:ffff:ffff,BE
+2001:67c:60::,2001:67c:60:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:64::,2001:67c:64:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:68::,2001:67c:68:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:6c::,2001:67c:6c:ffff:ffff:ffff:ffff:ffff,IS
+2001:67c:70::,2001:67c:70:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:74::,2001:67c:74:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:78::,2001:67c:78:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:84::,2001:67c:84:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:88::,2001:67c:88:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:8c::,2001:67c:8c:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:90::,2001:67c:90:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:94::,2001:67c:94:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:98::,2001:67c:98:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:9c::,2001:67c:9c:ffff:ffff:ffff:ffff:ffff,BE
+2001:67c:a0::,2001:67c:a0:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:a4::,2001:67c:a4:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:a8::,2001:67c:a8:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:ac::,2001:67c:ac:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:b0::,2001:67c:b0:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:b4::,2001:67c:b4:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:b8::,2001:67c:b8:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:bc::,2001:67c:bc:ffff:ffff:ffff:ffff:ffff,EE
+2001:67c:c4::,2001:67c:c4:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:c8::,2001:67c:c8:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:cc::,2001:67c:cc:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:d0::,2001:67c:d0:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:d4::,2001:67c:d4:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:d8::,2001:67c:d8:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:dc::,2001:67c:dc:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:e0::,2001:67c:e0:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:e4::,2001:67c:e4:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:e8::,2001:67c:e8:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:ec::,2001:67c:ec:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:f0::,2001:67c:f0:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:f4::,2001:67c:f4:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:f8::,2001:67c:f8:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:fc::,2001:67c:fc:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:100::,2001:67c:100:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:108::,2001:67c:108:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:10c::,2001:67c:10c:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:110::,2001:67c:110:ffff:ffff:ffff:ffff:ffff,FI
+2001:67c:114::,2001:67c:114:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:118::,2001:67c:118:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:11c::,2001:67c:11c:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:120::,2001:67c:120:ffff:ffff:ffff:ffff:ffff,BE
+2001:67c:124::,2001:67c:124:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:128::,2001:67c:128:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:12c::,2001:67c:12c:ffff:ffff:ffff:ffff:ffff,FI
+2001:67c:130::,2001:67c:130:ffff:ffff:ffff:ffff:ffff,SA
+2001:67c:134::,2001:67c:134:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:138::,2001:67c:138:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:13c::,2001:67c:13c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:140::,2001:67c:140:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:148::,2001:67c:148:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:14c::,2001:67c:14d:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:154::,2001:67c:154:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:158::,2001:67c:158:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:15c::,2001:67c:15c:ffff:ffff:ffff:ffff:ffff,FI
+2001:67c:160::,2001:67c:160:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:164::,2001:67c:164:ffff:ffff:ffff:ffff:ffff,FI
+2001:67c:168::,2001:67c:168:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:170::,2001:67c:170:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:174::,2001:67c:174:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:178::,2001:67c:178:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:17c::,2001:67c:17c:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:180::,2001:67c:180:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:184::,2001:67c:184:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:188::,2001:67c:188:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:18c::,2001:67c:18c:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:190::,2001:67c:190:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:194::,2001:67c:194:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:19c::,2001:67c:19c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1a0::,2001:67c:1a0:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:1a4::,2001:67c:1a4:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:1a8::,2001:67c:1a8:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:1ac::,2001:67c:1ac:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1b0::,2001:67c:1b0:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:1b4::,2001:67c:1b4:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:1b8::,2001:67c:1b8:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1bc::,2001:67c:1bc:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:1c0::,2001:67c:1c0:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1c4::,2001:67c:1c4:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1c8::,2001:67c:1c8:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:1cc::,2001:67c:1cc:ffff:ffff:ffff:ffff:ffff,BE
+2001:67c:1d0::,2001:67c:1d0:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:1d4::,2001:67c:1d4:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:1d8::,2001:67c:1d8:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1dc::,2001:67c:1dc:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1e0::,2001:67c:1e0:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1e4::,2001:67c:1e4:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1e8::,2001:67c:1e8:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:1ec::,2001:67c:1ec:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:1f0::,2001:67c:1f0:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:1f4::,2001:67c:1f4:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:1f8::,2001:67c:1f8:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1fc::,2001:67c:1fc:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:200::,2001:67c:200:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:204::,2001:67c:204:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:208::,2001:67c:208:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:20c::,2001:67c:20c:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:210::,2001:67c:210:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:214::,2001:67c:214:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:218::,2001:67c:218:ffff:ffff:ffff:ffff:ffff,LT
+2001:67c:21c::,2001:67c:21c:ffff:ffff:ffff:ffff:ffff,AM
+2001:67c:220::,2001:67c:220:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:224::,2001:67c:224:ffff:ffff:ffff:ffff:ffff,FI
+2001:67c:228::,2001:67c:228:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:22c::,2001:67c:22c:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:230::,2001:67c:230:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:234::,2001:67c:234:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:238::,2001:67c:238:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:23c::,2001:67c:23c:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:240::,2001:67c:240:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:244::,2001:67c:244:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:248::,2001:67c:248:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:24c::,2001:67c:24c:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:250::,2001:67c:250:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:254::,2001:67c:254:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:258::,2001:67c:258:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:25c::,2001:67c:25c:ffff:ffff:ffff:ffff:ffff,FI
+2001:67c:260::,2001:67c:260:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:264::,2001:67c:264:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:268::,2001:67c:268:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:26c::,2001:67c:26c:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:270::,2001:67c:270:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:274::,2001:67c:274:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:278::,2001:67c:278:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:27c::,2001:67c:27c:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:280::,2001:67c:280:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:284::,2001:67c:284:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:288::,2001:67c:288:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:28c::,2001:67c:28c:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:294::,2001:67c:294:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:298::,2001:67c:298:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:29c::,2001:67c:29c:ffff:ffff:ffff:ffff:ffff,IT
+2001:67c:2a0::,2001:67c:2a0:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2a4::,2001:67c:2a4:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2a8::,2001:67c:2a8:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:2ac::,2001:67c:2ac:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2b0::,2001:67c:2b0:ffff:ffff:ffff:ffff:ffff,FI
+2001:67c:2b8::,2001:67c:2b8:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2bc::,2001:67c:2bc:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2c0::,2001:67c:2c0:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2c4::,2001:67c:2c4:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:2c8::,2001:67c:2c8:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2cc::,2001:67c:2cc:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2d0::,2001:67c:2d0:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2d4::,2001:67c:2d4:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2d8::,2001:67c:2d8:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2dc::,2001:67c:2dc:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:2e0::,2001:67c:2e0:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2e4::,2001:67c:2e4:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2e8::,2001:67c:2e8:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2ec::,2001:67c:2ec:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2f4::,2001:67c:2f4:ffff:ffff:ffff:ffff:ffff,LU
+2001:67c:2f8::,2001:67c:2f8:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:2fc::,2001:67c:2fc:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:300::,2001:67c:300:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:304::,2001:67c:304:ffff:ffff:ffff:ffff:ffff,BE
+2001:67c:308::,2001:67c:308:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:30c::,2001:67c:30c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:310::,2001:67c:310:ffff:ffff:ffff:ffff:ffff,CY
+2001:67c:314::,2001:67c:314:ffff:ffff:ffff:ffff:ffff,BE
+2001:67c:318::,2001:67c:318:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:31c::,2001:67c:31c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:324::,2001:67c:324:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:328::,2001:67c:328:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:32c::,2001:67c:32c:ffff:ffff:ffff:ffff:ffff,EE
+2001:67c:330::,2001:67c:330:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:334::,2001:67c:334:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:338::,2001:67c:338:ffff:ffff:ffff:ffff:ffff,IE
+2001:67c:33c::,2001:67c:33c:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:340::,2001:67c:340:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:344::,2001:67c:344:ffff:ffff:ffff:ffff:ffff,BE
+2001:67c:348::,2001:67c:348:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:34c::,2001:67c:34c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:350::,2001:67c:350:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:354::,2001:67c:354:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:358::,2001:67c:358:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:35c::,2001:67c:35c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:360::,2001:67c:360:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:364::,2001:67c:364:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:368::,2001:67c:368:ffff:ffff:ffff:ffff:ffff,LV
+2001:67c:36c::,2001:67c:36c:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:370::,2001:67c:370:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:374::,2001:67c:374:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:37c::,2001:67c:37c:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:380::,2001:67c:380:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:384::,2001:67c:384:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:388::,2001:67c:388:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:38c::,2001:67c:38c:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:390::,2001:67c:390:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:394::,2001:67c:394:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:398::,2001:67c:398:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:39c::,2001:67c:39c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:3a0::,2001:67c:3a0:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:3a4::,2001:67c:3a4:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:3a8::,2001:67c:3a8:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:3ac::,2001:67c:3ac:ffff:ffff:ffff:ffff:ffff,RS
+2001:67c:3b0::,2001:67c:3b0:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:3b4::,2001:67c:3b4:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:3b8::,2001:67c:3b8:ffff:ffff:ffff:ffff:ffff,IE
+2001:67c:3bc::,2001:67c:3bc:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:3c0::,2001:67c:3c0:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:3c4::,2001:67c:3c4:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:3c8::,2001:67c:3c8:ffff:ffff:ffff:ffff:ffff,EE
+2001:67c:3cc::,2001:67c:3cc:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:3d0::,2001:67c:3d0:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:3d4::,2001:67c:3d4:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:3d8::,2001:67c:3d8:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:3dc::,2001:67c:3dc:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:3e0::,2001:67c:3e0:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:3e4::,2001:67c:3e4:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:3e8::,2001:67c:3e9:ffff:ffff:ffff:ffff:ffff,SA
+2001:67c:3f0::,2001:67c:3f0:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:3f4::,2001:67c:3f4:ffff:ffff:ffff:ffff:ffff,HR
+2001:67c:3f8::,2001:67c:3f8:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:3fc::,2001:67c:3fc:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:400::,2001:67c:400:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:404::,2001:67c:404:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:408::,2001:67c:408:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:40c::,2001:67c:40c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:410::,2001:67c:410:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:414::,2001:67c:414:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:418::,2001:67c:418:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:41c::,2001:67c:41c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:420::,2001:67c:420:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:424::,2001:67c:424:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:428::,2001:67c:428:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:42c::,2001:67c:42c:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:430::,2001:67c:430:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:434::,2001:67c:434:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:438::,2001:67c:438:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:43c::,2001:67c:43c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:440::,2001:67c:440:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:444::,2001:67c:444:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:448::,2001:67c:448:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:44c::,2001:67c:44c:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:450::,2001:67c:450:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:454::,2001:67c:454:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:458::,2001:67c:458:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:45c::,2001:67c:45c:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:460::,2001:67c:460:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:464::,2001:67c:464:ffff:ffff:ffff:ffff:ffff,TR
+2001:67c:468::,2001:67c:468:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:46c::,2001:67c:46c:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:470::,2001:67c:470:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:474::,2001:67c:474:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:478::,2001:67c:478:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:47c::,2001:67c:47c:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:480::,2001:67c:480:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:484::,2001:67c:484:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:488::,2001:67c:488:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:48c::,2001:67c:48c:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:490::,2001:67c:490:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:494::,2001:67c:494:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:498::,2001:67c:498:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:49c::,2001:67c:49c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:4a0::,2001:67c:4a0:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:4a4::,2001:67c:4a4:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:4a8::,2001:67c:4a8:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:4ac::,2001:67c:4ac:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:4b0::,2001:67c:4b0:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:4b4::,2001:67c:4b4:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:4b8::,2001:67c:4b8:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:4bc::,2001:67c:4bc:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:4c0::,2001:67c:4c0:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:4c4::,2001:67c:4c4:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:4c8::,2001:67c:4c8:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:4cc::,2001:67c:4cc:ffff:ffff:ffff:ffff:ffff,IL
+2001:67c:4d0::,2001:67c:4d0:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:4d4::,2001:67c:4d4:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:4d8::,2001:67c:4d8:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:4dc::,2001:67c:4dc:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:4e0::,2001:67c:4e0:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:4e4::,2001:67c:4e4:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:4e8::,2001:67c:4e8:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:4ec::,2001:67c:4ec:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:4f0::,2001:67c:4f0:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:4f4::,2001:67c:4f4:ffff:ffff:ffff:ffff:ffff,TR
+2001:67c:4f8::,2001:67c:4f8:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:4fc::,2001:67c:4fc:ffff:ffff:ffff:ffff:ffff,BE
+2001:67c:500::,2001:67c:500:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:504::,2001:67c:504:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:508::,2001:67c:508:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:50c::,2001:67c:50c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:510::,2001:67c:510:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:514::,2001:67c:514:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:518::,2001:67c:518:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:51c::,2001:67c:51c:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:520::,2001:67c:520:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:524::,2001:67c:524:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:528::,2001:67c:528:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:530::,2001:67c:530:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:534::,2001:67c:534:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:538::,2001:67c:538:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:53c::,2001:67c:53c:ffff:ffff:ffff:ffff:ffff,HR
+2001:67c:540::,2001:67c:540:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:544::,2001:67c:544:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:548::,2001:67c:548:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:54c::,2001:67c:54c:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:550::,2001:67c:550:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:554::,2001:67c:554:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:558::,2001:67c:558:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:55c::,2001:67c:55c:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:560::,2001:67c:560:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:564::,2001:67c:564:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:568::,2001:67c:568:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:56c::,2001:67c:56c:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:570::,2001:67c:570:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:574::,2001:67c:574:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:578::,2001:67c:578:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:57c::,2001:67c:57c:ffff:ffff:ffff:ffff:ffff,BY
+2001:67c:580::,2001:67c:580:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:584::,2001:67c:584:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:588::,2001:67c:588:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:58c::,2001:67c:58c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:590::,2001:67c:590:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:594::,2001:67c:594:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:598::,2001:67c:598:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:59c::,2001:67c:59c:ffff:ffff:ffff:ffff:ffff,HU
+2001:67c:5a0::,2001:67c:5a1:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:5a8::,2001:67c:5a8:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:5ac::,2001:67c:5ac:ffff:ffff:ffff:ffff:ffff,BY
+2001:67c:5b0::,2001:67c:5b0:ffff:ffff:ffff:ffff:ffff,LV
+2001:67c:5b4::,2001:67c:5b4:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:5b8::,2001:67c:5b8:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:5bc::,2001:67c:5bc:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:5c0::,2001:67c:5c0:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:5c4::,2001:67c:5c4:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:5c8::,2001:67c:5c8:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:5cc::,2001:67c:5cc:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:5d0::,2001:67c:5d0:ffff:ffff:ffff:ffff:ffff,LV
+2001:67c:5d4::,2001:67c:5d4:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:5d8::,2001:67c:5d8:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:5dc::,2001:67c:5dc:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:5e0::,2001:67c:5e0:ffff:ffff:ffff:ffff:ffff,TR
+2001:67c:5e4::,2001:67c:5e4:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:5e8::,2001:67c:5e8:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:5ec::,2001:67c:5ec:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:5f0::,2001:67c:5f0:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:5f4::,2001:67c:5f4:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:5f8::,2001:67c:5f8:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:5fc::,2001:67c:5fc:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:600::,2001:67c:600:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:1000::,2001:67c:1001:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1008::,2001:67c:1009:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1010::,2001:67c:1011:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1018::,2001:67c:1019:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1020::,2001:67c:1021:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:1028::,2001:67c:1029:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:1030::,2001:67c:1030:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:1034::,2001:67c:1034:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1038::,2001:67c:1038:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:103c::,2001:67c:103c:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:1040::,2001:67c:1040:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:1044::,2001:67c:1044:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:1048::,2001:67c:1048:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:104c::,2001:67c:104c:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:1050::,2001:67c:1050:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1054::,2001:67c:1054:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1058::,2001:67c:1058:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:105c::,2001:67c:105c:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1060::,2001:67c:1060:ffff:ffff:ffff:ffff:ffff,LU
+2001:67c:1064::,2001:67c:1064:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:1068::,2001:67c:1068:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:106c::,2001:67c:106c:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1070::,2001:67c:1071:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:1078::,2001:67c:1078:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:107c::,2001:67c:107c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1080::,2001:67c:1080:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:1084::,2001:67c:1084:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1090::,2001:67c:1090:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:1098::,2001:67c:1098:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:109c::,2001:67c:109c:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:10a0::,2001:67c:10a0:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:10a4::,2001:67c:10a4:ffff:ffff:ffff:ffff:ffff,FI
+2001:67c:10a8::,2001:67c:10a9:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:10b0::,2001:67c:10b0:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:10b4::,2001:67c:10b4:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:10b8::,2001:67c:10b8:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:10bc::,2001:67c:10bc:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:10c0::,2001:67c:10c0:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:10c4::,2001:67c:10c4:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:10c8::,2001:67c:10c8:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:10cc::,2001:67c:10cc:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:10d0::,2001:67c:10d0:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:10d4::,2001:67c:10d4:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:10d8::,2001:67c:10d8:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:10dc::,2001:67c:10dc:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:10e0::,2001:67c:10e0:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:10e4::,2001:67c:10e4:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:10e8::,2001:67c:10e8:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:10ec::,2001:67c:10ec:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:10f0::,2001:67c:10f0:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:10f4::,2001:67c:10f4:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:10f8::,2001:67c:10f8:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:10fc::,2001:67c:10fc:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1100::,2001:67c:1100:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1104::,2001:67c:1104:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1108::,2001:67c:1109:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:1110::,2001:67c:1111:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:1118::,2001:67c:1118:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:111c::,2001:67c:111c:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:1120::,2001:67c:1120:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:1124::,2001:67c:1124:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:1128::,2001:67c:1128:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:112c::,2001:67c:112c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1130::,2001:67c:1130:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1134::,2001:67c:1134:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:1138::,2001:67c:1138:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:113c::,2001:67c:113c:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:1140::,2001:67c:1140:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1144::,2001:67c:1144:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1148::,2001:67c:1148:ffff:ffff:ffff:ffff:ffff,ES
+2001:67c:114c::,2001:67c:114c:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1150::,2001:67c:1150:ffff:ffff:ffff:ffff:ffff,IL
+2001:67c:1154::,2001:67c:1154:ffff:ffff:ffff:ffff:ffff,TR
+2001:67c:1158::,2001:67c:1158:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:115c::,2001:67c:115c:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1160::,2001:67c:1160:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1164::,2001:67c:1164:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:116c::,2001:67c:116c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1170::,2001:67c:1170:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1174::,2001:67c:1174:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1178::,2001:67c:1178:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:117c::,2001:67c:117c:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:1180::,2001:67c:1180:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1184::,2001:67c:1184:ffff:ffff:ffff:ffff:ffff,HR
+2001:67c:1188::,2001:67c:1188:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:118c::,2001:67c:118c:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:1190::,2001:67c:1190:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:1194::,2001:67c:1194:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:1198::,2001:67c:1199:ffff:ffff:ffff:ffff:ffff,SA
+2001:67c:11a0::,2001:67c:11a0:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:11a4::,2001:67c:11a4:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:11a8::,2001:67c:11a8:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:11ac::,2001:67c:11ac:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:11b0::,2001:67c:11b0:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:11b4::,2001:67c:11b4:ffff:ffff:ffff:ffff:ffff,ES
+2001:67c:11b8::,2001:67c:11b8:ffff:ffff:ffff:ffff:ffff,TR
+2001:67c:11bc::,2001:67c:11bc:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:11c0::,2001:67c:11c0:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:11c4::,2001:67c:11c4:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:11c8::,2001:67c:11c8:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:11cc::,2001:67c:11cc:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:11d0::,2001:67c:11d0:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:11d4::,2001:67c:11d4:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:11d8::,2001:67c:11d8:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:11dc::,2001:67c:11dc:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:11e0::,2001:67c:11e0:ffff:ffff:ffff:ffff:ffff,BG
+2001:67c:11e4::,2001:67c:11e4:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:11e8::,2001:67c:11e8:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:11ec::,2001:67c:11ec:ffff:ffff:ffff:ffff:ffff,TR
+2001:67c:11f4::,2001:67c:11f4:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:11f8::,2001:67c:11f8:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:11fc::,2001:67c:11fc:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1200::,2001:67c:1203:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:1210::,2001:67c:1213:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1220::,2001:67c:1223:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:1230::,2001:67c:1233:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:1240::,2001:67c:1240:ffff:ffff:ffff:ffff:ffff,IE
+2001:67c:1244::,2001:67c:1244:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1248::,2001:67c:1248:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:124c::,2001:67c:124c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1250::,2001:67c:1250:ffff:ffff:ffff:ffff:ffff,LU
+2001:67c:1254::,2001:67c:1254:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:125c::,2001:67c:125c:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:1260::,2001:67c:1260:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:1264::,2001:67c:1264:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1268::,2001:67c:1268:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:126c::,2001:67c:126c:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:1270::,2001:67c:1270:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1274::,2001:67c:1274:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1278::,2001:67c:1278:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:1280::,2001:67c:1280:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:1284::,2001:67c:1284:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:1288::,2001:67c:1288:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:128c::,2001:67c:128c:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:1294::,2001:67c:1294:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:129c::,2001:67c:129c:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:12a0::,2001:67c:12a0:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:12a4::,2001:67c:12a4:ffff:ffff:ffff:ffff:ffff,TR
+2001:67c:12a8::,2001:67c:12a8:ffff:ffff:ffff:ffff:ffff,FI
+2001:67c:12ac::,2001:67c:12ac:ffff:ffff:ffff:ffff:ffff,LU
+2001:67c:12b0::,2001:67c:12b0:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:12b4::,2001:67c:12b4:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:12b8::,2001:67c:12b8:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:12bc::,2001:67c:12bc:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:12c0::,2001:67c:12c1:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:12c8::,2001:67c:12c8:ffff:ffff:ffff:ffff:ffff,LV
+2001:67c:12cc::,2001:67c:12cc:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:12d0::,2001:67c:12d0:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:12d4::,2001:67c:12d4:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:12d8::,2001:67c:12d8:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:12dc::,2001:67c:12dc:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:12e0::,2001:67c:12e0:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:12e4::,2001:67c:12e4:ffff:ffff:ffff:ffff:ffff,SA
+2001:67c:12e8::,2001:67c:12e9:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:12f0::,2001:67c:12f0:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:12f4::,2001:67c:12f4:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:12f8::,2001:67c:12f8:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:12fc::,2001:67c:12fc:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:1300::,2001:67c:1300:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:1304::,2001:67c:1304:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1308::,2001:67c:1308:ffff:ffff:ffff:ffff:ffff,MD
+2001:67c:130c::,2001:67c:130c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1310::,2001:67c:1310:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1314::,2001:67c:1314:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:1318::,2001:67c:1318:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:131c::,2001:67c:131c:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1320::,2001:67c:1320:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1324::,2001:67c:1324:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:1328::,2001:67c:1328:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:132c::,2001:67c:132c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1330::,2001:67c:1330:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:1334::,2001:67c:1334:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1338::,2001:67c:1338:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:133c::,2001:67c:133c:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:1340::,2001:67c:1340:ffff:ffff:ffff:ffff:ffff,HR
+2001:67c:1344::,2001:67c:1344:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1348::,2001:67c:1348:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:134c::,2001:67c:134c:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:1350::,2001:67c:1350:ffff:ffff:ffff:ffff:ffff,CY
+2001:67c:1354::,2001:67c:1354:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1358::,2001:67c:1358:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:135c::,2001:67c:135c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1360::,2001:67c:1360:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1364::,2001:67c:1364:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1368::,2001:67c:1368:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:136c::,2001:67c:136c:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:1370::,2001:67c:1370:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:1374::,2001:67c:1374:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1378::,2001:67c:1378:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:137c::,2001:67c:137c:ffff:ffff:ffff:ffff:ffff,ES
+2001:67c:1380::,2001:67c:1380:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:1384::,2001:67c:1384:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1388::,2001:67c:1388:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:138c::,2001:67c:138c:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:1390::,2001:67c:1390:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1394::,2001:67c:1394:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:1398::,2001:67c:1398:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:139c::,2001:67c:139c:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:13a0::,2001:67c:13a0:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:13a4::,2001:67c:13a4:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:13a8::,2001:67c:13a8:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:13ac::,2001:67c:13ac:ffff:ffff:ffff:ffff:ffff,FI
+2001:67c:13b0::,2001:67c:13b0:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:13b4::,2001:67c:13b4:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:13b8::,2001:67c:13b8:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:13bc::,2001:67c:13bc:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:13c0::,2001:67c:13c0:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:13c4::,2001:67c:13c4:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:13c8::,2001:67c:13c8:ffff:ffff:ffff:ffff:ffff,LV
+2001:67c:13cc::,2001:67c:13cc:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:13d0::,2001:67c:13d0:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:13d4::,2001:67c:13d4:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:13d8::,2001:67c:13d8:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:13e0::,2001:67c:13e0:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:13e4::,2001:67c:13e4:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:13e8::,2001:67c:13e8:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:13ec::,2001:67c:13ec:ffff:ffff:ffff:ffff:ffff,PT
+2001:67c:13f0::,2001:67c:13f0:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:13f4::,2001:67c:13f4:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:13f8::,2001:67c:13f8:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:13fc::,2001:67c:13fc:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:1400::,2001:67c:1407:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1420::,2001:67c:1427:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1440::,2001:67c:1447:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1460::,2001:67c:1467:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1480::,2001:67c:1480:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:1484::,2001:67c:1484:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1488::,2001:67c:1488:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:148c::,2001:67c:148c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1490::,2001:67c:1490:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1494::,2001:67c:1494:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1498::,2001:67c:1498:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:149c::,2001:67c:149c:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:14a0::,2001:67c:14a0:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:14a4::,2001:67c:14a4:ffff:ffff:ffff:ffff:ffff,BG
+2001:67c:14a8::,2001:67c:14a8:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:14ac::,2001:67c:14ac:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:14b0::,2001:67c:14b0:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:14b4::,2001:67c:14b4:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:14b8::,2001:67c:14b8:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:14bc::,2001:67c:14bc:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:14c4::,2001:67c:14c4:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:14d0::,2001:67c:14d0:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:14d4::,2001:67c:14d4:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:14d8::,2001:67c:14d8:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:14dc::,2001:67c:14dc:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:14e0::,2001:67c:14e7:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1500::,2001:67c:1500:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1504::,2001:67c:1504:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1508::,2001:67c:1508:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:150c::,2001:67c:150c:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:1510::,2001:67c:1510:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1514::,2001:67c:1514:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1518::,2001:67c:1518:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:151c::,2001:67c:151c:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:1520::,2001:67c:1520:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1524::,2001:67c:1524:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:1528::,2001:67c:1528:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:152c::,2001:67c:152c:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1530::,2001:67c:1530:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1534::,2001:67c:1534:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1538::,2001:67c:1538:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:153c::,2001:67c:153c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1540::,2001:67c:1540:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1544::,2001:67c:1544:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:154c::,2001:67c:154c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1554::,2001:67c:1554:ffff:ffff:ffff:ffff:ffff,TR
+2001:67c:1558::,2001:67c:1558:ffff:ffff:ffff:ffff:ffff,TR
+2001:67c:155c::,2001:67c:155c:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:1560::,2001:67c:1563:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1570::,2001:67c:1570:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1574::,2001:67c:1574:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1578::,2001:67c:1578:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:157c::,2001:67c:157c:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1580::,2001:67c:1580:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:1584::,2001:67c:1584:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:158c::,2001:67c:158c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1590::,2001:67c:1591:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:1598::,2001:67c:1598:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:159c::,2001:67c:159c:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:15a0::,2001:67c:15a3:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:15b0::,2001:67c:15b0:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:15b8::,2001:67c:15b8:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:15bc::,2001:67c:15bc:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:15c0::,2001:67c:15c0:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:15c4::,2001:67c:15c4:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:15c8::,2001:67c:15c8:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:15cc::,2001:67c:15cc:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:15d0::,2001:67c:15d0:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:15d4::,2001:67c:15d4:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:15d8::,2001:67c:15d8:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:15dc::,2001:67c:15dc:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:15e0::,2001:67c:15e0:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:15e4::,2001:67c:15e4:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:15e8::,2001:67c:15e8:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:15ec::,2001:67c:15ec:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:15f0::,2001:67c:15f0:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:15f4::,2001:67c:15f4:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:15f8::,2001:67c:15f8:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:15fc::,2001:67c:15fc:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1600::,2001:67c:160f:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1640::,2001:67c:164f:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:1680::,2001:67c:1680:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1684::,2001:67c:1684:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:1688::,2001:67c:1688:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:168c::,2001:67c:168c:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:1690::,2001:67c:1690:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:1694::,2001:67c:1694:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:1698::,2001:67c:1698:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:169c::,2001:67c:169c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:16a0::,2001:67c:16a0:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:16a4::,2001:67c:16a4:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:16a8::,2001:67c:16a8:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:16ac::,2001:67c:16ac:ffff:ffff:ffff:ffff:ffff,ES
+2001:67c:16b0::,2001:67c:16b0:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:16b4::,2001:67c:16b4:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:16b8::,2001:67c:16b8:ffff:ffff:ffff:ffff:ffff,BG
+2001:67c:16bc::,2001:67c:16bc:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:16c0::,2001:67c:16c0:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:16c4::,2001:67c:16c4:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:16c8::,2001:67c:16c8:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:16d0::,2001:67c:16d1:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:16d8::,2001:67c:16d8:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:16dc::,2001:67c:16dc:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:16e0::,2001:67c:16e0:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:16e4::,2001:67c:16e4:ffff:ffff:ffff:ffff:ffff,HR
+2001:67c:16e8::,2001:67c:16e8:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:16ec::,2001:67c:16ec:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:16f0::,2001:67c:16f0:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:16f4::,2001:67c:16f4:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:16f8::,2001:67c:16f8:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:16fc::,2001:67c:16fc:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1700::,2001:67c:1700:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1704::,2001:67c:1704:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:1708::,2001:67c:1708:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:170c::,2001:67c:170c:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:1710::,2001:67c:1710:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1720::,2001:67c:1720:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:1724::,2001:67c:1724:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:1728::,2001:67c:1728:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:172c::,2001:67c:172c:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1730::,2001:67c:1730:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1734::,2001:67c:1734:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:1738::,2001:67c:1738:ffff:ffff:ffff:ffff:ffff,IL
+2001:67c:173c::,2001:67c:173c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1740::,2001:67c:1740:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:1744::,2001:67c:1744:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:1748::,2001:67c:1748:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:174c::,2001:67c:174c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1750::,2001:67c:1750:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:1754::,2001:67c:1754:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1758::,2001:67c:1758:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:175c::,2001:67c:175c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1760::,2001:67c:1760:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:1764::,2001:67c:1764:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1768::,2001:67c:1768:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:176c::,2001:67c:176c:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:1770::,2001:67c:1770:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1774::,2001:67c:1774:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:177c::,2001:67c:177c:ffff:ffff:ffff:ffff:ffff,LT
+2001:67c:1780::,2001:67c:1780:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:1784::,2001:67c:1784:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1788::,2001:67c:1788:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:178c::,2001:67c:178c:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1790::,2001:67c:1790:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1794::,2001:67c:1794:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1798::,2001:67c:1798:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:179c::,2001:67c:179c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:17a0::,2001:67c:17a0:ffff:ffff:ffff:ffff:ffff,FI
+2001:67c:17a8::,2001:67c:17a8:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:17ac::,2001:67c:17ac:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:17b0::,2001:67c:17b0:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:17b4::,2001:67c:17b4:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:17b8::,2001:67c:17b8:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:17bc::,2001:67c:17bc:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:17c0::,2001:67c:17c0:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:17c4::,2001:67c:17c4:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:17c8::,2001:67c:17c8:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:17cc::,2001:67c:17cc:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:17d0::,2001:67c:17d0:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:17d4::,2001:67c:17d4:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:17d8::,2001:67c:17d8:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:17dc::,2001:67c:17dc:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:17e0::,2001:67c:17e0:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:17e4::,2001:67c:17e4:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:17e8::,2001:67c:17e8:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:17ec::,2001:67c:17ec:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:17f0::,2001:67c:17f0:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:17f4::,2001:67c:17f4:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:17f8::,2001:67c:17f8:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:17fc::,2001:67c:17fc:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1800::,2001:67c:1800:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1804::,2001:67c:1804:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1808::,2001:67c:1809:ffff:ffff:ffff:ffff:ffff,BE
+2001:67c:1810::,2001:67c:1810:ffff:ffff:ffff:ffff:ffff,BE
+2001:67c:1814::,2001:67c:1814:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:1818::,2001:67c:1818:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:181c::,2001:67c:181c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1820::,2001:67c:1820:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1828::,2001:67c:1828:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:182c::,2001:67c:182c:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1830::,2001:67c:1830:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1834::,2001:67c:1834:ffff:ffff:ffff:ffff:ffff,BE
+2001:67c:1838::,2001:67c:1838:ffff:ffff:ffff:ffff:ffff,BE
+2001:67c:183c::,2001:67c:183c:ffff:ffff:ffff:ffff:ffff,BE
+2001:67c:1840::,2001:67c:1840:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1844::,2001:67c:1844:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1848::,2001:67c:1848:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:184c::,2001:67c:184c:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:1850::,2001:67c:1850:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1854::,2001:67c:1854:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1858::,2001:67c:1858:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:185c::,2001:67c:185c:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:1860::,2001:67c:1860:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1864::,2001:67c:1864:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:1868::,2001:67c:1868:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:186c::,2001:67c:186c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1870::,2001:67c:1870:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:1874::,2001:67c:1874:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:1878::,2001:67c:1878:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:187c::,2001:67c:187c:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1880::,2001:67c:1880:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1884::,2001:67c:1884:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1888::,2001:67c:1888:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:188c::,2001:67c:188c:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:1890::,2001:67c:1890:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1894::,2001:67c:1894:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1898::,2001:67c:1898:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:189c::,2001:67c:189c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:18a0::,2001:67c:18a0:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:18a4::,2001:67c:18a4:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:18a8::,2001:67c:18a8:ffff:ffff:ffff:ffff:ffff,BY
+2001:67c:18ac::,2001:67c:18ac:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:18b0::,2001:67c:18b0:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:18b4::,2001:67c:18b4:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:18b8::,2001:67c:18b8:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:18bc::,2001:67c:18bc:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:18c0::,2001:67c:18c0:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:18c4::,2001:67c:18c4:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:18c8::,2001:67c:18c9:ffff:ffff:ffff:ffff:ffff,SA
+2001:67c:18d0::,2001:67c:18d0:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:18d4::,2001:67c:18d4:ffff:ffff:ffff:ffff:ffff,NZ
+2001:67c:18d8::,2001:67c:18d8:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:18dc::,2001:67c:18dc:ffff:ffff:ffff:ffff:ffff,LI
+2001:67c:18e0::,2001:67c:18e0:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:18e4::,2001:67c:18e4:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:18e8::,2001:67c:18e8:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:18ec::,2001:67c:18ec:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:18f0::,2001:67c:18f0:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:18f4::,2001:67c:18f4:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:18f8::,2001:67c:18f8:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:18fc::,2001:67c:18fc:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1900::,2001:67c:1903:ffff:ffff:ffff:ffff:ffff,BE
+2001:67c:1910::,2001:67c:1910:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1914::,2001:67c:1914:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1918::,2001:67c:1918:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:191c::,2001:67c:191c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1920::,2001:67c:1920:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1924::,2001:67c:1924:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1928::,2001:67c:1928:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:192c::,2001:67c:192c:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1930::,2001:67c:1933:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:1940::,2001:67c:1940:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1944::,2001:67c:1944:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1948::,2001:67c:1948:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:194c::,2001:67c:194c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1950::,2001:67c:1950:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1954::,2001:67c:1954:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1958::,2001:67c:1958:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:195c::,2001:67c:195c:ffff:ffff:ffff:ffff:ffff,ES
+2001:67c:1960::,2001:67c:1960:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1964::,2001:67c:1964:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:1968::,2001:67c:1968:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:196c::,2001:67c:196c:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1970::,2001:67c:1970:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1974::,2001:67c:1974:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:1978::,2001:67c:1978:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:197c::,2001:67c:197c:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:1980::,2001:67c:1980:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:1984::,2001:67c:1984:ffff:ffff:ffff:ffff:ffff,BG
+2001:67c:1988::,2001:67c:1988:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:198c::,2001:67c:198c:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1990::,2001:67c:1990:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1994::,2001:67c:1994:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1998::,2001:67c:1998:ffff:ffff:ffff:ffff:ffff,LU
+2001:67c:199c::,2001:67c:199c:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:19a0::,2001:67c:19a0:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:19a4::,2001:67c:19a4:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:19a8::,2001:67c:19a8:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:19ac::,2001:67c:19ac:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:19b0::,2001:67c:19b3:ffff:ffff:ffff:ffff:ffff,FI
+2001:67c:19c0::,2001:67c:19c0:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:19c4::,2001:67c:19c4:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:19c8::,2001:67c:19c8:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:19cc::,2001:67c:19cc:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:19d0::,2001:67c:19d0:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:19d4::,2001:67c:19d4:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:19d8::,2001:67c:19d8:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:19dc::,2001:67c:19dc:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:19e0::,2001:67c:19e0:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:19e4::,2001:67c:19e4:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:19e8::,2001:67c:19e8:ffff:ffff:ffff:ffff:ffff,TR
+2001:67c:19ec::,2001:67c:19ec:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:19f0::,2001:67c:19f0:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:19f4::,2001:67c:19f4:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:19f8::,2001:67c:19f8:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:19fc::,2001:67c:19fc:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:1a00::,2001:67c:1a3f:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:1b00::,2001:67c:1b00:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1b04::,2001:67c:1b04:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1b08::,2001:67c:1b08:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:1b0c::,2001:67c:1b0c:ffff:ffff:ffff:ffff:ffff,SA
+2001:67c:1b10::,2001:67c:1b10:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1b14::,2001:67c:1b14:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1b18::,2001:67c:1b18:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1b1c::,2001:67c:1b1c:ffff:ffff:ffff:ffff:ffff,LU
+2001:67c:1b20::,2001:67c:1b20:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1b24::,2001:67c:1b24:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1b2c::,2001:67c:1b2c:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1b30::,2001:67c:1b30:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1b34::,2001:67c:1b34:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1b3c::,2001:67c:1b3c:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:1b40::,2001:67c:1b43:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1b50::,2001:67c:1b50:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:1b54::,2001:67c:1b54:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1b58::,2001:67c:1b59:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1b60::,2001:67c:1b60:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1b64::,2001:67c:1b64:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:1b6c::,2001:67c:1b6c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1b70::,2001:67c:1b70:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:1b74::,2001:67c:1b74:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1b78::,2001:67c:1b78:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1b7c::,2001:67c:1b7c:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1b80::,2001:67c:1b80:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1b84::,2001:67c:1b84:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1b88::,2001:67c:1b88:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:1b8c::,2001:67c:1b8c:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:1b90::,2001:67c:1b90:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:1b94::,2001:67c:1b94:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1b98::,2001:67c:1b98:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1b9c::,2001:67c:1b9c:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:1ba4::,2001:67c:1ba4:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1ba8::,2001:67c:1ba8:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1bb0::,2001:67c:1bb0:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1bb4::,2001:67c:1bb4:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1bb8::,2001:67c:1bb8:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1bbc::,2001:67c:1bbc:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:1bc0::,2001:67c:1bc0:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1bc4::,2001:67c:1bc4:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:1bc8::,2001:67c:1bc8:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1bcc::,2001:67c:1bcc:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:1bd0::,2001:67c:1bd0:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:1bd4::,2001:67c:1bd4:ffff:ffff:ffff:ffff:ffff,SK
+2001:67c:1bd8::,2001:67c:1bd8:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1bdc::,2001:67c:1bdc:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1be0::,2001:67c:1be0:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1be4::,2001:67c:1be4:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:1be8::,2001:67c:1be8:ffff:ffff:ffff:ffff:ffff,FI
+2001:67c:1bec::,2001:67c:1bec:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1bf4::,2001:67c:1bf4:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1bf8::,2001:67c:1bf8:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:1bfc::,2001:67c:1bfc:ffff:ffff:ffff:ffff:ffff,BG
+2001:67c:1c00::,2001:67c:1cff:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:2004::,2001:67c:2004:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:2008::,2001:67c:2008:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:200c::,2001:67c:200c:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2010::,2001:67c:2010:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2014::,2001:67c:2014:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:2018::,2001:67c:2018:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2020::,2001:67c:2020:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:2024::,2001:67c:2024:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:2028::,2001:67c:2028:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:202c::,2001:67c:202c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2030::,2001:67c:2030:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:2034::,2001:67c:2034:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:2038::,2001:67c:2038:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:203c::,2001:67c:203c:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:2040::,2001:67c:2040:ffff:ffff:ffff:ffff:ffff,AE
+2001:67c:2044::,2001:67c:2044:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2048::,2001:67c:2048:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:204c::,2001:67c:204c:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:2050::,2001:67c:2050:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:205c::,2001:67c:205c:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2060::,2001:67c:2060:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2064::,2001:67c:2064:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:2068::,2001:67c:2068:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:206c::,2001:67c:206c:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:2070::,2001:67c:2070:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:2074::,2001:67c:2074:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2078::,2001:67c:2078:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:207c::,2001:67c:207c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2080::,2001:67c:2080:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:2084::,2001:67c:2084:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2088::,2001:67c:2088:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:208c::,2001:67c:208c:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:20a0::,2001:67c:20a1:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:20a8::,2001:67c:20a8:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:20ac::,2001:67c:20ac:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:20b0::,2001:67c:20b0:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:20b4::,2001:67c:20b4:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:20b8::,2001:67c:20b9:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:20c0::,2001:67c:20c0:ffff:ffff:ffff:ffff:ffff,FI
+2001:67c:20c4::,2001:67c:20c4:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:20c8::,2001:67c:20c8:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:20cc::,2001:67c:20cc:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:20d0::,2001:67c:20d1:ffff:ffff:ffff:ffff:ffff,BG
+2001:67c:20d8::,2001:67c:20d8:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:20dc::,2001:67c:20dc:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:20e0::,2001:67c:20e0:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:20e4::,2001:67c:20e4:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:20e8::,2001:67c:20e8:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:20ec::,2001:67c:20ec:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:20f0::,2001:67c:20f0:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:20f4::,2001:67c:20f4:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:20f8::,2001:67c:20f8:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:20fc::,2001:67c:20fc:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:2100::,2001:67c:2100:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:2104::,2001:67c:2104:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2108::,2001:67c:2108:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:210c::,2001:67c:210c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2110::,2001:67c:2110:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:2114::,2001:67c:2114:ffff:ffff:ffff:ffff:ffff,IS
+2001:67c:2118::,2001:67c:2118:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:211c::,2001:67c:211c:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2120::,2001:67c:2120:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:2124::,2001:67c:2124:ffff:ffff:ffff:ffff:ffff,HU
+2001:67c:2128::,2001:67c:2128:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:212c::,2001:67c:212c:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2130::,2001:67c:2130:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2134::,2001:67c:2134:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2138::,2001:67c:2138:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:213c::,2001:67c:213c:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2144::,2001:67c:2144:ffff:ffff:ffff:ffff:ffff,FI
+2001:67c:2148::,2001:67c:2148:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:214c::,2001:67c:214c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2150::,2001:67c:2150:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2154::,2001:67c:2154:ffff:ffff:ffff:ffff:ffff,BG
+2001:67c:2158::,2001:67c:2158:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:215c::,2001:67c:215c:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2160::,2001:67c:2160:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:2164::,2001:67c:2164:ffff:ffff:ffff:ffff:ffff,SA
+2001:67c:2168::,2001:67c:2168:ffff:ffff:ffff:ffff:ffff,FI
+2001:67c:216c::,2001:67c:216c:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:2170::,2001:67c:2170:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:2174::,2001:67c:2174:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:2178::,2001:67c:2178:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:217c::,2001:67c:217c:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:2180::,2001:67c:2180:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2188::,2001:67c:2188:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:218c::,2001:67c:218c:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:2190::,2001:67c:2190:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:2194::,2001:67c:2194:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:2198::,2001:67c:2198:ffff:ffff:ffff:ffff:ffff,LV
+2001:67c:219c::,2001:67c:219c:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:21a0::,2001:67c:21a0:ffff:ffff:ffff:ffff:ffff,IT
+2001:67c:21a4::,2001:67c:21a4:ffff:ffff:ffff:ffff:ffff,FI
+2001:67c:21a8::,2001:67c:21a8:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:21ac::,2001:67c:21ac:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:21b0::,2001:67c:21b0:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:21b4::,2001:67c:21b4:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:21b8::,2001:67c:21b8:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:21bc::,2001:67c:21bc:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:21c0::,2001:67c:21c0:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:21c4::,2001:67c:21c4:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:21c8::,2001:67c:21c8:ffff:ffff:ffff:ffff:ffff,BG
+2001:67c:21cc::,2001:67c:21cc:ffff:ffff:ffff:ffff:ffff,ES
+2001:67c:21d0::,2001:67c:21d0:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:21d8::,2001:67c:21d8:ffff:ffff:ffff:ffff:ffff,FI
+2001:67c:21dc::,2001:67c:21dc:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:21e0::,2001:67c:21e0:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:21e4::,2001:67c:21e4:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:21e8::,2001:67c:21e8:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:21ec::,2001:67c:21ec:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:21f0::,2001:67c:21f0:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:21f4::,2001:67c:21f4:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:21f8::,2001:67c:21f8:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:21fc::,2001:67c:21fc:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2200::,2001:67c:2200:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:2204::,2001:67c:2204:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2208::,2001:67c:2208:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:220c::,2001:67c:220c:ffff:ffff:ffff:ffff:ffff,BG
+2001:67c:2210::,2001:67c:2210:ffff:ffff:ffff:ffff:ffff,RS
+2001:67c:2214::,2001:67c:2214:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2218::,2001:67c:2219:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:2220::,2001:67c:2220:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:2224::,2001:67c:2224:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:2228::,2001:67c:2228:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:222c::,2001:67c:222c:ffff:ffff:ffff:ffff:ffff,SK
+2001:67c:2234::,2001:67c:2234:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:2238::,2001:67c:2238:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:223c::,2001:67c:223c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2240::,2001:67c:2240:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2244::,2001:67c:2244:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2248::,2001:67c:2248:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2250::,2001:67c:2250:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2254::,2001:67c:2254:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:2258::,2001:67c:2258:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:225c::,2001:67c:225c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2260::,2001:67c:2260:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2264::,2001:67c:2264:ffff:ffff:ffff:ffff:ffff,KG
+2001:67c:2268::,2001:67c:2268:ffff:ffff:ffff:ffff:ffff,BY
+2001:67c:226c::,2001:67c:226c:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2270::,2001:67c:2270:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:2274::,2001:67c:2274:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2278::,2001:67c:2278:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:227c::,2001:67c:227c:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:2280::,2001:67c:2280:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:2284::,2001:67c:2284:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2288::,2001:67c:2288:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:228c::,2001:67c:228c:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:2290::,2001:67c:2290:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2294::,2001:67c:2294:ffff:ffff:ffff:ffff:ffff,ES
+2001:67c:2298::,2001:67c:2298:ffff:ffff:ffff:ffff:ffff,US
+2001:67c:229c::,2001:67c:229c:ffff:ffff:ffff:ffff:ffff,GR
+2001:67c:22a0::,2001:67c:22a0:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:22a4::,2001:67c:22a4:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:22a8::,2001:67c:22a8:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:22b0::,2001:67c:22b0:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:22b4::,2001:67c:22b4:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:22b8::,2001:67c:22b8:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:22bc::,2001:67c:22bc:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:22c0::,2001:67c:22c0:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:22c4::,2001:67c:22c4:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:22c8::,2001:67c:22c8:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:22cc::,2001:67c:22cc:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:22d0::,2001:67c:22d0:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:22d8::,2001:67c:22d8:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:22dc::,2001:67c:22dc:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:22e0::,2001:67c:22e0:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:22e4::,2001:67c:22e4:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:22e8::,2001:67c:22e8:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:22ec::,2001:67c:22ec:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:22f0::,2001:67c:22f0:ffff:ffff:ffff:ffff:ffff,RS
+2001:67c:22f8::,2001:67c:22f8:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:22fc::,2001:67c:22fc:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2300::,2001:67c:2300:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:2304::,2001:67c:2304:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2308::,2001:67c:2308:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:230c::,2001:67c:230c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2310::,2001:67c:2310:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2314::,2001:67c:2314:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2318::,2001:67c:2318:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:231c::,2001:67c:231c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2320::,2001:67c:2320:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:2324::,2001:67c:2324:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:2328::,2001:67c:2328:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:232c::,2001:67c:232c:ffff:ffff:ffff:ffff:ffff,LV
+2001:67c:2330::,2001:67c:2330:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2334::,2001:67c:2334:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2338::,2001:67c:2338:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:233c::,2001:67c:233c:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2340::,2001:67c:2340:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2348::,2001:67c:2348:ffff:ffff:ffff:ffff:ffff,AE
+2001:67c:234c::,2001:67c:234c:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2354::,2001:67c:2354:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2358::,2001:67c:2358:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:235c::,2001:67c:235c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2360::,2001:67c:2360:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2364::,2001:67c:2364:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:2368::,2001:67c:2368:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:236c::,2001:67c:236c:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:2370::,2001:67c:2370:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:2374::,2001:67c:2374:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2378::,2001:67c:2378:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:237c::,2001:67c:237c:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:2380::,2001:67c:2380:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:2384::,2001:67c:2384:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2388::,2001:67c:2388:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:238c::,2001:67c:238c:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2394::,2001:67c:2394:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2398::,2001:67c:2398:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:239c::,2001:67c:239c:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:23a0::,2001:67c:23a0:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:23a4::,2001:67c:23a4:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:23a8::,2001:67c:23a8:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:23b0::,2001:67c:23b0:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:23b4::,2001:67c:23b4:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:23b8::,2001:67c:23b8:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:23bc::,2001:67c:23bc:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:23c0::,2001:67c:23c0:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:23c4::,2001:67c:23c4:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:23c8::,2001:67c:23c8:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:23cc::,2001:67c:23cc:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:23d4::,2001:67c:23d4:ffff:ffff:ffff:ffff:ffff,EE
+2001:67c:23d8::,2001:67c:23d9:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:23e4::,2001:67c:23e4:ffff:ffff:ffff:ffff:ffff,BE
+2001:67c:23e8::,2001:67c:23e8:ffff:ffff:ffff:ffff:ffff,AE
+2001:67c:23ec::,2001:67c:23ec:ffff:ffff:ffff:ffff:ffff,BG
+2001:67c:23f0::,2001:67c:23f0:ffff:ffff:ffff:ffff:ffff,AE
+2001:67c:23f4::,2001:67c:23f4:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:23f8::,2001:67c:23f8:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:23fc::,2001:67c:23fc:ffff:ffff:ffff:ffff:ffff,BG
+2001:67c:2400::,2001:67c:2400:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2404::,2001:67c:2404:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2408::,2001:67c:2408:ffff:ffff:ffff:ffff:ffff,AE
+2001:67c:240c::,2001:67c:240c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2410::,2001:67c:2410:ffff:ffff:ffff:ffff:ffff,TR
+2001:67c:2414::,2001:67c:2414:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2418::,2001:67c:2418:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2420::,2001:67c:2420:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2424::,2001:67c:2424:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:2428::,2001:67c:2428:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:242c::,2001:67c:242c:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:2430::,2001:67c:2433:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:2440::,2001:67c:2440:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:2444::,2001:67c:2444:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2448::,2001:67c:2448:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:244c::,2001:67c:244c:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2454::,2001:67c:2454:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:245c::,2001:67c:245c:ffff:ffff:ffff:ffff:ffff,FI
+2001:67c:2460::,2001:67c:2460:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2464::,2001:67c:2464:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2468::,2001:67c:2468:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:246c::,2001:67c:246c:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:2470::,2001:67c:2470:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:2474::,2001:67c:2474:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2478::,2001:67c:2478:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:247c::,2001:67c:247c:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:2480::,2001:67c:2480:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2484::,2001:67c:2484:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2488::,2001:67c:2488:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:248c::,2001:67c:248c:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:2490::,2001:67c:2490:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:2494::,2001:67c:2494:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:2498::,2001:67c:2498:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:249c::,2001:67c:249c:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:24a0::,2001:67c:24a0:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:24a4::,2001:67c:24a4:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:24a8::,2001:67c:24a8:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:24ac::,2001:67c:24ac:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:24b4::,2001:67c:24b4:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:24b8::,2001:67c:24b8:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:24bc::,2001:67c:24bc:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:24c4::,2001:67c:24c4:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:24c8::,2001:67c:24c8:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:24cc::,2001:67c:24cc:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:24d0::,2001:67c:24d0:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:24d4::,2001:67c:24d4:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:24d8::,2001:67c:24d8:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:24dc::,2001:67c:24dc:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:24e0::,2001:67c:24e0:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:24e4::,2001:67c:24e4:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:24e8::,2001:67c:24e9:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:24f0::,2001:67c:24f0:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:24f4::,2001:67c:24f4:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:24f8::,2001:67c:24f8:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:24fc::,2001:67c:24fc:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:2500::,2001:67c:2507:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2520::,2001:67c:2520:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2524::,2001:67c:2524:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2528::,2001:67c:2528:ffff:ffff:ffff:ffff:ffff,LV
+2001:67c:252c::,2001:67c:252c:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2534::,2001:67c:2534:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:2538::,2001:67c:2538:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:253c::,2001:67c:253c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2540::,2001:67c:2540:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:2544::,2001:67c:2544:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2548::,2001:67c:2548:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:254c::,2001:67c:254c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2550::,2001:67c:2550:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2554::,2001:67c:2554:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2558::,2001:67c:2558:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:255c::,2001:67c:255c:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2560::,2001:67c:2560:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2564::,2001:67c:2564:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:256c::,2001:67c:256c:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:2574::,2001:67c:2574:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:2578::,2001:67c:2578:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:257c::,2001:67c:257c:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:2580::,2001:67c:2580:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:2584::,2001:67c:2584:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:2588::,2001:67c:2588:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:258c::,2001:67c:258c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2590::,2001:67c:2590:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2594::,2001:67c:2594:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:2598::,2001:67c:2598:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:259c::,2001:67c:259c:ffff:ffff:ffff:ffff:ffff,AE
+2001:67c:25a0::,2001:67c:25a0:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:25a4::,2001:67c:25a4:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:25a8::,2001:67c:25a8:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:25ac::,2001:67c:25ac:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:25b0::,2001:67c:25b0:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:25b4::,2001:67c:25b4:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:25b8::,2001:67c:25b8:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:25bc::,2001:67c:25bc:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:25c0::,2001:67c:25c0:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:25c4::,2001:67c:25c4:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:25cc::,2001:67c:25cc:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:25d0::,2001:67c:25d0:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:25d4::,2001:67c:25d4:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:25d8::,2001:67c:25d8:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:25dc::,2001:67c:25dc:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:25e4::,2001:67c:25e4:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:25f4::,2001:67c:25f4:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:25fc::,2001:67c:25fc:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2600::,2001:67c:2600:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2604::,2001:67c:2604:ffff:ffff:ffff:ffff:ffff,SK
+2001:67c:260c::,2001:67c:260c:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2610::,2001:67c:2610:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2614::,2001:67c:2614:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:2618::,2001:67c:2618:ffff:ffff:ffff:ffff:ffff,EE
+2001:67c:261c::,2001:67c:261c:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2620::,2001:67c:2620:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:2624::,2001:67c:2624:ffff:ffff:ffff:ffff:ffff,SA
+2001:67c:262c::,2001:67c:262c:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2630::,2001:67c:2630:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:2634::,2001:67c:2634:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2638::,2001:67c:2638:ffff:ffff:ffff:ffff:ffff,SK
+2001:67c:263c::,2001:67c:263c:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2640::,2001:67c:2640:ffff:ffff:ffff:ffff:ffff,AE
+2001:67c:2644::,2001:67c:2644:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:264c::,2001:67c:264c:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2650::,2001:67c:2650:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2654::,2001:67c:2654:ffff:ffff:ffff:ffff:ffff,AE
+2001:67c:265c::,2001:67c:265c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2660::,2001:67c:2660:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:2664::,2001:67c:2664:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:2668::,2001:67c:2668:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:266c::,2001:67c:266c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2670::,2001:67c:2670:ffff:ffff:ffff:ffff:ffff,SK
+2001:67c:2674::,2001:67c:2674:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2678::,2001:67c:2678:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:267c::,2001:67c:267c:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2684::,2001:67c:2684:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:2688::,2001:67c:2688:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:268c::,2001:67c:268c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2690::,2001:67c:2690:ffff:ffff:ffff:ffff:ffff,BE
+2001:67c:2694::,2001:67c:2694:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2698::,2001:67c:2698:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:269c::,2001:67c:269c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:26a0::,2001:67c:26a0:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:26a4::,2001:67c:26a4:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:26ac::,2001:67c:26ac:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:26b0::,2001:67c:26b0:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:26b4::,2001:67c:26b4:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:26b8::,2001:67c:26b8:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:26bc::,2001:67c:26bc:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:26c0::,2001:67c:26c3:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:26d0::,2001:67c:26d0:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:26d4::,2001:67c:26d4:ffff:ffff:ffff:ffff:ffff,SK
+2001:67c:26d8::,2001:67c:26d8:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:26dc::,2001:67c:26dc:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:26e0::,2001:67c:26e0:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:26e4::,2001:67c:26e4:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:26e8::,2001:67c:26e8:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:26ec::,2001:67c:26ec:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:26f0::,2001:67c:26f0:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:26f4::,2001:67c:26f4:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:26f8::,2001:67c:26f8:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:26fc::,2001:67c:26fc:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:2700::,2001:67c:2700:ffff:ffff:ffff:ffff:ffff,FI
+2001:67c:2704::,2001:67c:2704:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2708::,2001:67c:2708:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:270c::,2001:67c:270c:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2710::,2001:67c:2710:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:2714::,2001:67c:2714:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2718::,2001:67c:2718:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:271c::,2001:67c:271c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2720::,2001:67c:2720:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:2724::,2001:67c:2724:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:2728::,2001:67c:2728:ffff:ffff:ffff:ffff:ffff,IR
+2001:67c:272c::,2001:67c:272c:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:2730::,2001:67c:2730:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:2734::,2001:67c:2734:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:2738::,2001:67c:2738:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:273c::,2001:67c:273c:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:2740::,2001:67c:2740:ffff:ffff:ffff:ffff:ffff,SK
+2001:67c:2744::,2001:67c:2744:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:2748::,2001:67c:2748:ffff:ffff:ffff:ffff:ffff,GR
+2001:67c:274c::,2001:67c:274c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2750::,2001:67c:2750:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2758::,2001:67c:2758:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:275c::,2001:67c:275c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2760::,2001:67c:2760:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2764::,2001:67c:2764:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:2768::,2001:67c:2768:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:276c::,2001:67c:276c:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2770::,2001:67c:2770:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2774::,2001:67c:2774:ffff:ffff:ffff:ffff:ffff,AE
+2001:67c:2778::,2001:67c:2778:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:277c::,2001:67c:277c:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:2780::,2001:67c:2780:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2784::,2001:67c:2784:ffff:ffff:ffff:ffff:ffff,FI
+2001:67c:2788::,2001:67c:2788:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:278c::,2001:67c:278c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2790::,2001:67c:2790:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:2794::,2001:67c:2794:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2798::,2001:67c:2798:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:27c0::,2001:67c:27c0:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:27c4::,2001:67c:27c4:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:27c8::,2001:67c:27c8:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:27cc::,2001:67c:27cc:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:27d0::,2001:67c:27d0:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:27d4::,2001:67c:27d4:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:27d8::,2001:67c:27d8:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:27dc::,2001:67c:27dc:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:27e0::,2001:67c:27e0:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:27e4::,2001:67c:27e4:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:27e8::,2001:67c:27e8:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:27ec::,2001:67c:27ec:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:27f0::,2001:67c:27f0:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:27f4::,2001:67c:27f4:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:27f8::,2001:67c:27f8:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:27fc::,2001:67c:27fc:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2800::,2001:67c:2800:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:2804::,2001:67c:2804:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:2808::,2001:67c:2808:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:280c::,2001:67c:280c:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:2810::,2001:67c:2810:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:2814::,2001:67c:2814:ffff:ffff:ffff:ffff:ffff,LI
+2001:67c:2818::,2001:67c:2818:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:281c::,2001:67c:281c:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2820::,2001:67c:2820:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2824::,2001:67c:2824:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2828::,2001:67c:2828:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:282c::,2001:67c:282c:ffff:ffff:ffff:ffff:ffff,BE
+2001:67c:2830::,2001:67c:2830:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2834::,2001:67c:2834:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2838::,2001:67c:2838:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:283c::,2001:67c:283c:ffff:ffff:ffff:ffff:ffff,ES
+2001:67c:2840::,2001:67c:2840:ffff:ffff:ffff:ffff:ffff,IL
+2001:67c:2844::,2001:67c:2844:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:2848::,2001:67c:2848:ffff:ffff:ffff:ffff:ffff,ES
+2001:67c:284c::,2001:67c:284c:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2850::,2001:67c:2850:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2854::,2001:67c:2854:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:285c::,2001:67c:285c:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2860::,2001:67c:2860:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2864::,2001:67c:2864:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2868::,2001:67c:2868:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:286c::,2001:67c:286c:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:2870::,2001:67c:2870:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2874::,2001:67c:2874:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:2878::,2001:67c:2878:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:287c::,2001:67c:287c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2880::,2001:67c:2880:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2884::,2001:67c:2884:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2888::,2001:67c:2889:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2890::,2001:67c:2890:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2894::,2001:67c:2894:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:2898::,2001:67c:2898:ffff:ffff:ffff:ffff:ffff,ES
+2001:67c:289c::,2001:67c:289c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:28a0::,2001:67c:28a0:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:28a4::,2001:67c:28a4:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:28a8::,2001:67c:28a8:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:28ac::,2001:67c:28ac:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:28b0::,2001:67c:28b0:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:28b4::,2001:67c:28b4:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:28b8::,2001:67c:28b8:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:28bc::,2001:67c:28bc:ffff:ffff:ffff:ffff:ffff,HU
+2001:67c:28c0::,2001:67c:28c0:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:28c4::,2001:67c:28c4:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:28cc::,2001:67c:28cc:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:28d0::,2001:67c:28d0:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:28d4::,2001:67c:28d4:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:28d8::,2001:67c:28d8:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:28e0::,2001:67c:28e0:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:28e4::,2001:67c:28e4:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:28e8::,2001:67c:28e8:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:28f0::,2001:67c:28f0:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:28f4::,2001:67c:28f4:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:28f8::,2001:67c:28f8:ffff:ffff:ffff:ffff:ffff,BE
+2001:67c:28fc::,2001:67c:28fc:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2900::,2001:67c:291f:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2980::,2001:67c:2980:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2984::,2001:67c:2984:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:2988::,2001:67c:2989:ffff:ffff:ffff:ffff:ffff,TR
+2001:67c:2994::,2001:67c:2994:ffff:ffff:ffff:ffff:ffff,SA
+2001:67c:2998::,2001:67c:2998:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:299c::,2001:67c:299c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:29a0::,2001:67c:29a0:ffff:ffff:ffff:ffff:ffff,TR
+2001:67c:29a8::,2001:67c:29a8:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:29ac::,2001:67c:29ac:ffff:ffff:ffff:ffff:ffff,CY
+2001:67c:29b0::,2001:67c:29b1:ffff:ffff:ffff:ffff:ffff,CY
+2001:67c:29bc::,2001:67c:29bc:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:29c0::,2001:67c:29c1:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:29c8::,2001:67c:29c8:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:29cc::,2001:67c:29cc:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:29d0::,2001:67c:29d0:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:29d4::,2001:67c:29d4:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:29d8::,2001:67c:29d8:ffff:ffff:ffff:ffff:ffff,AE
+2001:67c:29dc::,2001:67c:29dc:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:29e0::,2001:67c:29e0:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:29e4::,2001:67c:29e4:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:29e8::,2001:67c:29e8:ffff:ffff:ffff:ffff:ffff,TR
+2001:67c:29ec::,2001:67c:29ec:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:29f0::,2001:67c:29f0:ffff:ffff:ffff:ffff:ffff,BG
+2001:67c:29f4::,2001:67c:29f4:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:29f8::,2001:67c:29f8:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:29fc::,2001:67c:29fc:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2a00::,2001:67c:2a00:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:2a04::,2001:67c:2a04:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2a08::,2001:67c:2a08:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:2a0c::,2001:67c:2a0c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2a14::,2001:67c:2a14:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2a18::,2001:67c:2a18:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2a1c::,2001:67c:2a1c:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2a20::,2001:67c:2a20:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:2a24::,2001:67c:2a24:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:2a28::,2001:67c:2a28:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:2a2c::,2001:67c:2a2c:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:2a30::,2001:67c:2a30:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2a34::,2001:67c:2a34:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2a38::,2001:67c:2a38:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2a3c::,2001:67c:2a3c:ffff:ffff:ffff:ffff:ffff,ES
+2001:67c:2a40::,2001:67c:2a40:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:2a44::,2001:67c:2a44:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:2a48::,2001:67c:2a48:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2a4c::,2001:67c:2a4c:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:2a50::,2001:67c:2a50:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:2a54::,2001:67c:2a54:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2a58::,2001:67c:2a58:ffff:ffff:ffff:ffff:ffff,BE
+2001:67c:2a5c::,2001:67c:2a5c:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:2a64::,2001:67c:2a64:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:2a68::,2001:67c:2a68:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:2a6c::,2001:67c:2a6c:ffff:ffff:ffff:ffff:ffff,TR
+2001:67c:2a70::,2001:67c:2a70:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2a74::,2001:67c:2a74:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:2a78::,2001:67c:2a78:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:2a7c::,2001:67c:2a7c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2a80::,2001:67c:2a80:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:2a84::,2001:67c:2a84:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2a88::,2001:67c:2a88:ffff:ffff:ffff:ffff:ffff,LV
+2001:67c:2a8c::,2001:67c:2a8c:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:2a90::,2001:67c:2a90:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:2a94::,2001:67c:2a94:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2a98::,2001:67c:2a98:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2a9c::,2001:67c:2a9c:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:2aa0::,2001:67c:2aa0:ffff:ffff:ffff:ffff:ffff,LU
+2001:67c:2aa4::,2001:67c:2aa4:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2aa8::,2001:67c:2aa8:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:2aac::,2001:67c:2aac:ffff:ffff:ffff:ffff:ffff,IS
+2001:67c:2ab0::,2001:67c:2ab0:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2ab4::,2001:67c:2ab4:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2ab8::,2001:67c:2ab8:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2abc::,2001:67c:2abc:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:2ac0::,2001:67c:2ac0:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:2ac4::,2001:67c:2ac4:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2ac8::,2001:67c:2ac8:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2acc::,2001:67c:2acc:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2ad0::,2001:67c:2ad0:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2ad4::,2001:67c:2ad4:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2ad8::,2001:67c:2ad8:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2adc::,2001:67c:2adc:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2ae0::,2001:67c:2ae0:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:2ae4::,2001:67c:2ae4:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2ae8::,2001:67c:2ae8:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2aec::,2001:67c:2aec:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:2af0::,2001:67c:2af0:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2af4::,2001:67c:2af4:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2afc::,2001:67c:2afc:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:2b04::,2001:67c:2b04:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2b08::,2001:67c:2b08:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2b0c::,2001:67c:2b0c:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2b10::,2001:67c:2b10:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:2b14::,2001:67c:2b14:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:2b18::,2001:67c:2b18:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:2b1c::,2001:67c:2b1c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2b20::,2001:67c:2b20:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2b24::,2001:67c:2b24:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2b28::,2001:67c:2b28:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2b2c::,2001:67c:2b2c:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:2b30::,2001:67c:2b30:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2b34::,2001:67c:2b34:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2b38::,2001:67c:2b38:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:2b3c::,2001:67c:2b3c:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:2b40::,2001:67c:2b40:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2b44::,2001:67c:2b44:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2b48::,2001:67c:2b48:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2b4c::,2001:67c:2b4c:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:2b50::,2001:67c:2b50:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2b54::,2001:67c:2b54:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:2b58::,2001:67c:2b58:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2b5c::,2001:67c:2b5c:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:2b60::,2001:67c:2b60:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2b64::,2001:67c:2b64:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2b68::,2001:67c:2b68:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:2b6c::,2001:67c:2b6c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2b70::,2001:67c:2b70:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:2b74::,2001:67c:2b74:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2b78::,2001:67c:2b79:ffff:ffff:ffff:ffff:ffff,GR
+2001:67c:2b80::,2001:67c:2b80:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:2b84::,2001:67c:2b84:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2b88::,2001:67c:2b88:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2b8c::,2001:67c:2b8c:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2b90::,2001:67c:2b90:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:2b94::,2001:67c:2b94:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2b98::,2001:67c:2b98:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:2b9c::,2001:67c:2b9c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2ba0::,2001:67c:2ba0:ffff:ffff:ffff:ffff:ffff,TR
+2001:67c:2ba4::,2001:67c:2ba4:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2ba8::,2001:67c:2ba8:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2bac::,2001:67c:2bac:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2bb4::,2001:67c:2bb4:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:2bb8::,2001:67c:2bb8:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:2bbc::,2001:67c:2bbc:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:2bc0::,2001:67c:2bc0:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2bc4::,2001:67c:2bc4:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:2bc8::,2001:67c:2bc8:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2bcc::,2001:67c:2bcc:ffff:ffff:ffff:ffff:ffff,LV
+2001:67c:2bd0::,2001:67c:2bd0:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2bd4::,2001:67c:2bd4:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2bd8::,2001:67c:2bd8:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2bdc::,2001:67c:2bdc:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2be0::,2001:67c:2be0:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2be4::,2001:67c:2be4:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2be8::,2001:67c:2be8:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2bec::,2001:67c:2bec:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2bf0::,2001:67c:2bf0:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:2bf4::,2001:67c:2bf4:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2bf8::,2001:67c:2bf8:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2bfc::,2001:67c:2bfc:ffff:ffff:ffff:ffff:ffff,SE
+2001:680::,2001:680:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:688::,2001:688:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2001:690::,2001:697:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2001:6a0::,2001:6a0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2001:6a8::,2001:6a8:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2001:6b0::,2001:6b0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2001:6b8::,2001:6b8:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2001:6c8::,2001:6cf:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2001:6d0::,2001:6d0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2001:6d8::,2001:6df:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2001:6e0::,2001:6e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:6e8::,2001:6ef:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2001:6f0::,2001:6f7:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2001:6f8::,2001:6f8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:700::,2001:7ff:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2001:800::,2001:8ff:ffff:ffff:ffff:ffff:ffff:ffff,GD
+2001:900::,2001:9ff:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2001:a00::,2001:aff:ffff:ffff:ffff:ffff:ffff:ffff,DJ
+2001:b00::,2001:b07:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2001:b08::,2001:b08:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2001:b10::,2001:b10:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2001:b18::,2001:b18:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2001:b20::,2001:b20:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2001:b28::,2001:b28:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2001:b30::,2001:b30:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2001:b38::,2001:b38:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2001:b40::,2001:b40:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2001:b48::,2001:b4f:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2001:b50::,2001:b50:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2001:b58::,2001:b58:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2001:b60::,2001:b67:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2001:b68::,2001:b68:ffff:ffff:ffff:ffff:ffff:ffff,HR
+2001:b70::,2001:b70:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:b80::,2001:b87:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2001:b88::,2001:b88:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:b90::,2001:b90:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2001:b98::,2001:b98:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:ba0::,2001:ba0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2001:ba8::,2001:ba8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:bb0::,2001:bb0:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2001:bb8::,2001:bb8:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2001:bc0::,2001:bc0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:bc8::,2001:bc8:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2001:bd0::,2001:bd0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:be0::,2001:be7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:be8::,2001:be8:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2001:bf0::,2001:bf7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:bf8::,2001:bf8:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2001:c00::,2001:cff:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2001:d00::,2001:d00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:d08::,2001:d08:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2001:d10::,2001:d10:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2001:d18::,2001:d18:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2001:d28::,2001:d28:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:d30::,2001:d30:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:d38::,2001:d38:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2001:d40::,2001:d40:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2001:d48::,2001:d48:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2001:d50::,2001:d50:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:d58::,2001:d58:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2001:d68::,2001:d68:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2001:d70::,2001:d73:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:d80::,2001:d80:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:d88::,2001:d88:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:d90::,2001:d90:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:d98::,2001:d98:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2001:da0::,2001:da0:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:da8::,2001:daa:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2001:db0::,2001:db0:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2001:dc0::,2001:dc0:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2001:dc1::,2001:dc1:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2001:dc2::,2001:dc4:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:dc5::,2001:dc5:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2001:dc6::,2001:dc6:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2001:dc7::,2001:dc7:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2001:dc8::,2001:dc8:ffff:ffff:ffff:ffff:ffff:ffff,VN
+2001:dc9::,2001:dc9:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:dca::,2001:dca:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2001:dcc::,2001:dcc:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2001:dcd::,2001:dcd:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2001:dce::,2001:dce:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2001:dd8::,2001:dd8::ffff:ffff:ffff:ffff:ffff,FJ
+2001:dd8:1::,2001:dd8:1:ffff:ffff:ffff:ffff:ffff,CN
+2001:dd8:2::,2001:dd8:2:ffff:ffff:ffff:ffff:ffff,MY
+2001:dd8:3::,2001:dd8:3:ffff:ffff:ffff:ffff:ffff,NZ
+2001:dd8:4::,2001:dd8:4:ffff:ffff:ffff:ffff:ffff,SG
+2001:dd8:5::,2001:dd8:5:ffff:ffff:ffff:ffff:ffff,CN
+2001:dd8:6::,2001:dd8:6:ffff:ffff:ffff:ffff:ffff,AU
+2001:dd8:7::,2001:dd8:7:ffff:ffff:ffff:ffff:ffff,NP
+2001:dd8:8::,2001:dd8:f:ffff:ffff:ffff:ffff:ffff,AU
+2001:dd8:10::,2001:dd8:11:ffff:ffff:ffff:ffff:ffff,NP
+2001:dd8:12::,2001:dd8:12:ffff:ffff:ffff:ffff:ffff,AU
+2001:dd8:13::,2001:dd8:13:ffff:ffff:ffff:ffff:ffff,NZ
+2001:dd8:14::,2001:dd8:14:ffff:ffff:ffff:ffff:ffff,AU
+2001:dd8:15::,2001:dd8:15:ffff:ffff:ffff:ffff:ffff,HK
+2001:dd8:16::,2001:dd8:16:ffff:ffff:ffff:ffff:ffff,SG
+2001:dd8:17::,2001:dd8:17:ffff:ffff:ffff:ffff:ffff,KR
+2001:dd8:18::,2001:dd8:18:ffff:ffff:ffff:ffff:ffff,TW
+2001:dd8:19::,2001:dd8:19:ffff:ffff:ffff:ffff:ffff,IN
+2001:dd8:1a::,2001:dd8:1a:ffff:ffff:ffff:ffff:ffff,CN
+2001:dd8:1b::,2001:dd8:1b:ffff:ffff:ffff:ffff:ffff,IN
+2001:dd8:1c::,2001:dd8:1c:ffff:ffff:ffff:ffff:ffff,PK
+2001:dd8:1d::,2001:dd8:1d:ffff:ffff:ffff:ffff:ffff,BD
+2001:dd8:1e::,2001:dd8:1e:ffff:ffff:ffff:ffff:ffff,KH
+2001:dd8:1f::,2001:dd8:1f:ffff:ffff:ffff:ffff:ffff,ID
+2001:dd8:20::,2001:dd8:21:ffff:ffff:ffff:ffff:ffff,IN
+2001:dd8:22::,2001:dd8:22:ffff:ffff:ffff:ffff:ffff,JP
+2001:dd8:24::,2001:dd8:25:ffff:ffff:ffff:ffff:ffff,NP
+2001:de1::,2001:de1:3f:ffff:ffff:ffff:ffff:ffff,JP
+2001:de8::,2001:de8::ffff:ffff:ffff:ffff:ffff,TH
+2001:de8:1::,2001:de8:1:ffff:ffff:ffff:ffff:ffff,IN
+2001:de8:2::,2001:de8:2:ffff:ffff:ffff:ffff:ffff,ID
+2001:de8:3::,2001:de8:3:ffff:ffff:ffff:ffff:ffff,VN
+2001:de8:4::,2001:de8:7:ffff:ffff:ffff:ffff:ffff,SG
+2001:de8:8::,2001:de8:8:ffff:ffff:ffff:ffff:ffff,JP
+2001:de8:9::,2001:de8:9:ffff:ffff:ffff:ffff:ffff,AU
+2001:de8:a::,2001:de8:a:ffff:ffff:ffff:ffff:ffff,VN
+2001:de8:b::,2001:de8:b:ffff:ffff:ffff:ffff:ffff,BD
+2001:de8:c::,2001:de8:c:ffff:ffff:ffff:ffff:ffff,JP
+2001:de8:d::,2001:de8:d:ffff:ffff:ffff:ffff:ffff,SG
+2001:de8:e::,2001:de8:e:ffff:ffff:ffff:ffff:ffff,TH
+2001:de8:f::,2001:de8:10:ffff:ffff:ffff:ffff:ffff,MY
+2001:de8:11::,2001:de8:11:ffff:ffff:ffff:ffff:ffff,ID
+2001:de8:12::,2001:de8:12:ffff:ffff:ffff:ffff:ffff,SG
+2001:de8:13::,2001:de8:13:ffff:ffff:ffff:ffff:ffff,MY
+2001:de8:14::,2001:de8:14:ffff:ffff:ffff:ffff:ffff,AU
+2001:de8:15::,2001:de8:15:ffff:ffff:ffff:ffff:ffff,ID
+2001:de8:16::,2001:de8:16:ffff:ffff:ffff:ffff:ffff,PF
+2001:de8:17::,2001:de8:17:ffff:ffff:ffff:ffff:ffff,AU
+2001:de8:19::,2001:de8:19:ffff:ffff:ffff:ffff:ffff,NZ
+2001:de8:1a::,2001:de8:1a:ffff:ffff:ffff:ffff:ffff,ID
+2001:de8:1b::,2001:de8:1b:ffff:ffff:ffff:ffff:ffff,MY
+2001:de8:1d::,2001:de8:1d:ffff:ffff:ffff:ffff:ffff,KH
+2001:de8:1e::,2001:de8:1e:ffff:ffff:ffff:ffff:ffff,JP
+2001:de9::,2001:de9::ffff:ffff:ffff:ffff:ffff,LK
+2001:dea::,2001:dea::ffff:ffff:ffff:ffff:ffff,AU
+2001:dec::,2001:dec::ffff:ffff:ffff:ffff:ffff,VU
+2001:dee::,2001:dee::ffff:ffff:ffff:ffff:ffff,HK
+2001:df0::,2001:df0:1:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:2::,2001:df0:2:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:4::,2001:df0:4:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:7::,2001:df0:7:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:8::,2001:df0:8:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:9::,2001:df0:a:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:c::,2001:df0:13:ffff:ffff:ffff:ffff:ffff,VN
+2001:df0:14::,2001:df0:14:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:15::,2001:df0:15:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:17::,2001:df0:17:ffff:ffff:ffff:ffff:ffff,LK
+2001:df0:18::,2001:df0:18:ffff:ffff:ffff:ffff:ffff,MY
+2001:df0:19::,2001:df0:1d:ffff:ffff:ffff:ffff:ffff,VN
+2001:df0:1e::,2001:df0:1e:ffff:ffff:ffff:ffff:ffff,TH
+2001:df0:1f::,2001:df0:1f:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:20::,2001:df0:3f:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:40::,2001:df0:40:ffff:ffff:ffff:ffff:ffff,VN
+2001:df0:41::,2001:df0:41:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:42::,2001:df0:42:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:43::,2001:df0:43:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:44::,2001:df0:44:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:45::,2001:df0:46:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:48::,2001:df0:48:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:49::,2001:df0:49:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:4a::,2001:df0:4a:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:4b::,2001:df0:4d:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:4f::,2001:df0:60:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:62::,2001:df0:62:ffff:ffff:ffff:ffff:ffff,TH
+2001:df0:63::,2001:df0:63:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:65::,2001:df0:65:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:66::,2001:df0:66:ffff:ffff:ffff:ffff:ffff,VN
+2001:df0:68::,2001:df0:68:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:69::,2001:df0:69:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:6a::,2001:df0:6a:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:6b::,2001:df0:6b:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:6c::,2001:df0:6c:ffff:ffff:ffff:ffff:ffff,WS
+2001:df0:6f::,2001:df0:6f:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:70::,2001:df0:70:ffff:ffff:ffff:ffff:ffff,PH
+2001:df0:71::,2001:df0:71:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:73::,2001:df0:74:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:75::,2001:df0:75:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:76::,2001:df0:76:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:77::,2001:df0:77:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:78::,2001:df0:78:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:7b::,2001:df0:7c:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:7d::,2001:df0:7d:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:7e::,2001:df0:81:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:82::,2001:df0:82:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:83::,2001:df0:83:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:84::,2001:df0:84:ffff:ffff:ffff:ffff:ffff,PK
+2001:df0:85::,2001:df0:85:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:86::,2001:df0:87:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:89::,2001:df0:89:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:8b::,2001:df0:8b:ffff:ffff:ffff:ffff:ffff,NP
+2001:df0:8c::,2001:df0:8c:ffff:ffff:ffff:ffff:ffff,NU
+2001:df0:8e::,2001:df0:90:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:91::,2001:df0:91:ffff:ffff:ffff:ffff:ffff,FJ
+2001:df0:92::,2001:df0:92:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:93::,2001:df0:93:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:94::,2001:df0:94:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:95::,2001:df0:95:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:96::,2001:df0:96:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:97::,2001:df0:97:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:98::,2001:df0:9a:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:9c::,2001:df0:9c:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:9d::,2001:df0:9d:ffff:ffff:ffff:ffff:ffff,MY
+2001:df0:9e::,2001:df0:9e:ffff:ffff:ffff:ffff:ffff,TH
+2001:df0:9f::,2001:df0:9f:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:a0::,2001:df0:a1:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:a2::,2001:df0:a2:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:a3::,2001:df0:a3:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:a4::,2001:df0:a4:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:a5::,2001:df0:a6:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:a7::,2001:df0:ab:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:ad::,2001:df0:ad:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:ae::,2001:df0:ae:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:b0::,2001:df0:b0:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:b1::,2001:df0:b8:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:b9::,2001:df0:b9:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:ba::,2001:df0:bd:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:be::,2001:df0:be:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:bf::,2001:df0:bf:ffff:ffff:ffff:ffff:ffff,LA
+2001:df0:c0::,2001:df0:c0:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:c1::,2001:df0:c2:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:c4::,2001:df0:c4:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:c5::,2001:df0:c5:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:c6::,2001:df0:c6:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:c7::,2001:df0:c8:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:c9::,2001:df0:cc:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:cd::,2001:df0:cd:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:ce::,2001:df0:ce:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:cf::,2001:df0:cf:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:d1::,2001:df0:d1:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:d2::,2001:df0:d2:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:d4::,2001:df0:d6:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:d7::,2001:df0:d7:ffff:ffff:ffff:ffff:ffff,KR
+2001:df0:d8::,2001:df0:d8:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:d9::,2001:df0:d9:ffff:ffff:ffff:ffff:ffff,TW
+2001:df0:da::,2001:df0:da:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:db::,2001:df0:db:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:dc::,2001:df0:dc:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:dd::,2001:df0:dd:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:de::,2001:df0:df:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:e1::,2001:df0:e1:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:e2::,2001:df0:e2:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:e3::,2001:df0:e3:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:e4::,2001:df0:e5:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:e6::,2001:df0:e6:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:e7::,2001:df0:e8:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:e9::,2001:df0:e9:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:ea::,2001:df0:ea:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:eb::,2001:df0:eb:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:ed::,2001:df0:ed:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:ee::,2001:df0:ee:ffff:ffff:ffff:ffff:ffff,MY
+2001:df0:ef::,2001:df0:f0:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:f1::,2001:df0:f1:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:f2::,2001:df0:f2:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:f3::,2001:df0:f3:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:f4::,2001:df0:f4:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:f5::,2001:df0:f5:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:f6::,2001:df0:f6:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:f7::,2001:df0:f7:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:f8::,2001:df0:fa:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:fb::,2001:df0:fb:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:fc::,2001:df0:fc:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:fd::,2001:df0:fe:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:100::,2001:df0:1ff:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:201::,2001:df0:201:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:202::,2001:df0:202:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:203::,2001:df0:203:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:204::,2001:df0:204:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:205::,2001:df0:205:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:206::,2001:df0:206:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:207::,2001:df0:207:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:208::,2001:df0:208:ffff:ffff:ffff:ffff:ffff,MY
+2001:df0:209::,2001:df0:209:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:20a::,2001:df0:20a:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:20b::,2001:df0:20b:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:20c::,2001:df0:20c:ffff:ffff:ffff:ffff:ffff,NF
+2001:df0:20d::,2001:df0:20d:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:20e::,2001:df0:20e:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:210::,2001:df0:210:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:211::,2001:df0:211:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:212::,2001:df0:212:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:213::,2001:df0:213:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:214::,2001:df0:214:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:215::,2001:df0:215:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:216::,2001:df0:217:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:218::,2001:df0:219:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:21a::,2001:df0:21a:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:21b::,2001:df0:21b:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:21c::,2001:df0:21c:ffff:ffff:ffff:ffff:ffff,PH
+2001:df0:21d::,2001:df0:21d:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:21e::,2001:df0:21e:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:21f::,2001:df0:220:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:221::,2001:df0:221:ffff:ffff:ffff:ffff:ffff,VN
+2001:df0:222::,2001:df0:222:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:224::,2001:df0:224:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:225::,2001:df0:225:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:226::,2001:df0:228:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:229::,2001:df0:229:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:22b::,2001:df0:22b:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:22c::,2001:df0:22d:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:22e::,2001:df0:22f:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:230::,2001:df0:230:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:231::,2001:df0:231:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:232::,2001:df0:232:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:233::,2001:df0:234:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:235::,2001:df0:235:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:237::,2001:df0:237:ffff:ffff:ffff:ffff:ffff,TH
+2001:df0:238::,2001:df0:238:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:239::,2001:df0:239:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:23a::,2001:df0:23a:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:23b::,2001:df0:23b:ffff:ffff:ffff:ffff:ffff,PH
+2001:df0:23c::,2001:df0:23d:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:23e::,2001:df0:23e:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:23f::,2001:df0:23f:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:240::,2001:df0:241:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:242::,2001:df0:242:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:243::,2001:df0:243:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:245::,2001:df0:246:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:247::,2001:df0:247:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:248::,2001:df0:248:ffff:ffff:ffff:ffff:ffff,TH
+2001:df0:249::,2001:df0:24a:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:24b::,2001:df0:24b:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:24c::,2001:df0:24c:ffff:ffff:ffff:ffff:ffff,MY
+2001:df0:24e::,2001:df0:24e:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:24f::,2001:df0:24f:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:250::,2001:df0:250:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:251::,2001:df0:252:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:253::,2001:df0:253:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:254::,2001:df0:254:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:255::,2001:df0:255:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:256::,2001:df0:256:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:257::,2001:df0:257:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:258::,2001:df0:258:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:259::,2001:df0:259:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:25a::,2001:df0:25a:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:25b::,2001:df0:25b:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:25c::,2001:df0:25d:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:25e::,2001:df0:25e:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:260::,2001:df0:260:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:261::,2001:df0:261:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:262::,2001:df0:262:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:263::,2001:df0:263:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:264::,2001:df0:264:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:265::,2001:df0:265:ffff:ffff:ffff:ffff:ffff,TH
+2001:df0:266::,2001:df0:266:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:267::,2001:df0:267:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:268::,2001:df0:269:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:26a::,2001:df0:26b:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:26c::,2001:df0:26c:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:26d::,2001:df0:26f:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:270::,2001:df0:270:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:271::,2001:df0:271:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:272::,2001:df0:272:ffff:ffff:ffff:ffff:ffff,MY
+2001:df0:273::,2001:df0:273:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:274::,2001:df0:277:ffff:ffff:ffff:ffff:ffff,NP
+2001:df0:278::,2001:df0:278:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:279::,2001:df0:279:ffff:ffff:ffff:ffff:ffff,PK
+2001:df0:27a::,2001:df0:27a:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:27b::,2001:df0:27b:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:27c::,2001:df0:27c:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:27d::,2001:df0:27d:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:27e::,2001:df0:27e:ffff:ffff:ffff:ffff:ffff,CN
+2001:df0:27f::,2001:df0:27f:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:280::,2001:df0:28f:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:290::,2001:df0:290:ffff:ffff:ffff:ffff:ffff,KR
+2001:df0:291::,2001:df0:291:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:292::,2001:df0:292:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:293::,2001:df0:293:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:294::,2001:df0:294:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:295::,2001:df0:296:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:298::,2001:df0:298:ffff:ffff:ffff:ffff:ffff,PH
+2001:df0:299::,2001:df0:299:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:29a::,2001:df0:29a:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:29b::,2001:df0:29b:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:29c::,2001:df0:29c:ffff:ffff:ffff:ffff:ffff,VN
+2001:df0:29d::,2001:df0:29d:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:29f::,2001:df0:29f:ffff:ffff:ffff:ffff:ffff,BD
+2001:df0:2a0::,2001:df0:2a0:ffff:ffff:ffff:ffff:ffff,MY
+2001:df0:2a1::,2001:df0:2a1:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:2a2::,2001:df0:2a2:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:2a3::,2001:df0:2a3:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:2a4::,2001:df0:2a4:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:2a5::,2001:df0:2a5:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:2a6::,2001:df0:2a6:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:2a7::,2001:df0:2a7:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:2a8::,2001:df0:2a8:ffff:ffff:ffff:ffff:ffff,PH
+2001:df0:2a9::,2001:df0:2aa:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:2ab::,2001:df0:2ab:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:2ac::,2001:df0:2ac:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:2ad::,2001:df0:2ad:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:2ae::,2001:df0:2ae:ffff:ffff:ffff:ffff:ffff,WS
+2001:df0:2af::,2001:df0:2af:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:2b0::,2001:df0:2b1:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:2b2::,2001:df0:2b2:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:2b3::,2001:df0:2b3:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:2b4::,2001:df0:2b4:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:2b5::,2001:df0:2b5:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:2b6::,2001:df0:2b6:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:2b7::,2001:df0:2b7:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:2b8::,2001:df0:2b8:ffff:ffff:ffff:ffff:ffff,MY
+2001:df0:2b9::,2001:df0:2b9:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:2ba::,2001:df0:2ba:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:2bb::,2001:df0:2bb:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:2bc::,2001:df0:2bc:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:2bd::,2001:df0:2bd:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:2be::,2001:df0:2be:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:2bf::,2001:df0:2bf:ffff:ffff:ffff:ffff:ffff,GB
+2001:df0:2c1::,2001:df0:2c1:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:2c2::,2001:df0:2c2:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:2c3::,2001:df0:2c3:ffff:ffff:ffff:ffff:ffff,BD
+2001:df0:2c4::,2001:df0:2c4:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:2c5::,2001:df0:2c5:ffff:ffff:ffff:ffff:ffff,BD
+2001:df0:2c6::,2001:df0:2c8:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:2c9::,2001:df0:2c9:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:2ca::,2001:df0:2ca:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:2cb::,2001:df0:2cb:ffff:ffff:ffff:ffff:ffff,PK
+2001:df0:2cc::,2001:df0:2cc:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:2cd::,2001:df0:2cd:ffff:ffff:ffff:ffff:ffff,MY
+2001:df0:2ce::,2001:df0:2e0:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:2e1::,2001:df0:2e1:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:2e2::,2001:df0:2e2:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:2e3::,2001:df0:2e3:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:2e4::,2001:df0:2e4:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:2e5::,2001:df0:2e5:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:2e6::,2001:df0:2e7:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:2e8::,2001:df0:2e8:ffff:ffff:ffff:ffff:ffff,VN
+2001:df0:2e9::,2001:df0:2e9:ffff:ffff:ffff:ffff:ffff,CN
+2001:df0:2ea::,2001:df0:2ea:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:2ec::,2001:df0:2ec:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:2ed::,2001:df0:2ee:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:2ef::,2001:df0:2ef:ffff:ffff:ffff:ffff:ffff,PH
+2001:df0:2f0::,2001:df0:2f3:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:2f4::,2001:df0:2f4:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:2f5::,2001:df0:2f5:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:2f6::,2001:df0:2f6:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:2f7::,2001:df0:2f7:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:2f8::,2001:df0:2f8:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:2f9::,2001:df0:2f9:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:2fa::,2001:df0:2fa:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:2fb::,2001:df0:2fb:ffff:ffff:ffff:ffff:ffff,TH
+2001:df0:2fc::,2001:df0:2fc:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:2fd::,2001:df0:2fd:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:2fe::,2001:df0:2ff:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:300::,2001:df0:311:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:314::,2001:df0:317:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:400::,2001:df0:400:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:401::,2001:df0:401:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:402::,2001:df0:403:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:404::,2001:df0:404:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:405::,2001:df0:405:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:407::,2001:df0:407:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:408::,2001:df0:408:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:409::,2001:df0:409:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:40a::,2001:df0:40a:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:40c::,2001:df0:40c:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:40d::,2001:df0:40d:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:40e::,2001:df0:40f:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:410::,2001:df0:410:ffff:ffff:ffff:ffff:ffff,VU
+2001:df0:411::,2001:df0:411:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:412::,2001:df0:412:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:413::,2001:df0:413:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:415::,2001:df0:415:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:417::,2001:df0:417:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:418::,2001:df0:419:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:41a::,2001:df0:41a:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:41b::,2001:df0:41b:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:41c::,2001:df0:41c:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:41d::,2001:df0:41e:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:41f::,2001:df0:41f:ffff:ffff:ffff:ffff:ffff,MY
+2001:df0:420::,2001:df0:420:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:421::,2001:df0:421:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:422::,2001:df0:422:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:423::,2001:df0:423:ffff:ffff:ffff:ffff:ffff,CN
+2001:df0:424::,2001:df0:424:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:425::,2001:df0:425:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:426::,2001:df0:426:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:427::,2001:df0:427:ffff:ffff:ffff:ffff:ffff,MY
+2001:df0:430::,2001:df0:43f:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:440::,2001:df0:440:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:441::,2001:df0:441:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:442::,2001:df0:443:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:444::,2001:df0:445:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:446::,2001:df0:446:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:447::,2001:df0:447:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:448::,2001:df0:448:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:449::,2001:df0:449:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:44a::,2001:df0:44a:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:44b::,2001:df0:44b:ffff:ffff:ffff:ffff:ffff,MY
+2001:df0:44c::,2001:df0:44d:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:44e::,2001:df0:44e:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:44f::,2001:df0:44f:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:450::,2001:df0:450:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:451::,2001:df0:451:ffff:ffff:ffff:ffff:ffff,MY
+2001:df0:452::,2001:df0:452:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:453::,2001:df0:453:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:454::,2001:df0:454:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:455::,2001:df0:455:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:456::,2001:df0:456:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:457::,2001:df0:457:ffff:ffff:ffff:ffff:ffff,MY
+2001:df0:458::,2001:df0:458:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:459::,2001:df0:459:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:45a::,2001:df0:45a:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:45b::,2001:df0:45b:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:45c::,2001:df0:45d:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:45e::,2001:df0:45e:ffff:ffff:ffff:ffff:ffff,BD
+2001:df0:45f::,2001:df0:45f:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:460::,2001:df0:460:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:461::,2001:df0:461:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:462::,2001:df0:462:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:463::,2001:df0:463:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:464::,2001:df0:464:ffff:ffff:ffff:ffff:ffff,MY
+2001:df0:465::,2001:df0:465:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:466::,2001:df0:466:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:467::,2001:df0:467:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:468::,2001:df0:469:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:46a::,2001:df0:46a:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:46b::,2001:df0:46b:ffff:ffff:ffff:ffff:ffff,MY
+2001:df0:46c::,2001:df0:46c:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:500::,2001:df0:5ff:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:800::,2001:df0:800:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:1000::,2001:df0:1000:ffff:ffff:ffff:ffff:ffff,TH
+2001:df0:1800::,2001:df0:1800:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:2000::,2001:df0:2000:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:2800::,2001:df0:2800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:3000::,2001:df0:3000:ffff:ffff:ffff:ffff:ffff,PH
+2001:df0:3800::,2001:df0:3800:ffff:ffff:ffff:ffff:ffff,MY
+2001:df0:4000::,2001:df0:4000:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:4800::,2001:df0:4800:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:5000::,2001:df0:5000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:5800::,2001:df0:5800:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:6000::,2001:df0:6000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:6800::,2001:df0:6800:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:7000::,2001:df0:7000:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:7800::,2001:df0:7800:ffff:ffff:ffff:ffff:ffff,WS
+2001:df0:8000::,2001:df0:8000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:8800::,2001:df0:8800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:9800::,2001:df0:9800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:a000::,2001:df0:a000:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:a800::,2001:df0:a800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:b000::,2001:df0:b000:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:b800::,2001:df0:b800:ffff:ffff:ffff:ffff:ffff,PH
+2001:df0:c000::,2001:df0:c000:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:c800::,2001:df0:c800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:d000::,2001:df0:d000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:d800::,2001:df0:d800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:e000::,2001:df0:e000:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:e800::,2001:df0:e800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:f000::,2001:df0:f000:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:f800::,2001:df0:f800:ffff:ffff:ffff:ffff:ffff,ID
+2001:df1::,2001:df1::ffff:ffff:ffff:ffff:ffff,TH
+2001:df1:800::,2001:df1:800:ffff:ffff:ffff:ffff:ffff,SG
+2001:df1:1000::,2001:df1:1000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df1:1800::,2001:df1:1800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df1:2000::,2001:df1:2000:ffff:ffff:ffff:ffff:ffff,AU
+2001:df1:2800::,2001:df1:2800:ffff:ffff:ffff:ffff:ffff,SG
+2001:df1:3000::,2001:df1:3000:ffff:ffff:ffff:ffff:ffff,AU
+2001:df1:3800::,2001:df1:3800:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df1:4000::,2001:df1:4000:ffff:ffff:ffff:ffff:ffff,AU
+2001:df1:4800::,2001:df1:4800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df1:5000::,2001:df1:5000:ffff:ffff:ffff:ffff:ffff,HK
+2001:df1:5800::,2001:df1:5800:ffff:ffff:ffff:ffff:ffff,BD
+2001:df1:6000::,2001:df1:6000:ffff:ffff:ffff:ffff:ffff,SG
+2001:df1:6800::,2001:df1:6800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df1:7000::,2001:df1:7000:ffff:ffff:ffff:ffff:ffff,ID
+2001:df1:7800::,2001:df1:7800:ffff:ffff:ffff:ffff:ffff,ID
+2001:df1:8000::,2001:df1:8000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df1:8800::,2001:df1:8800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df1:9000::,2001:df1:9000:ffff:ffff:ffff:ffff:ffff,ID
+2001:df1:9800::,2001:df1:9800:ffff:ffff:ffff:ffff:ffff,MY
+2001:df1:a000::,2001:df1:a000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df1:a800::,2001:df1:a800:ffff:ffff:ffff:ffff:ffff,SG
+2001:df1:b000::,2001:df1:b000:ffff:ffff:ffff:ffff:ffff,TH
+2001:df1:b800::,2001:df1:b800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df1:c000::,2001:df1:c000:ffff:ffff:ffff:ffff:ffff,AU
+2001:df1:c800::,2001:df1:c800:ffff:ffff:ffff:ffff:ffff,HK
+2001:df1:d000::,2001:df1:d000:ffff:ffff:ffff:ffff:ffff,AU
+2001:df1:d800::,2001:df1:d800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df1:e000::,2001:df1:e000:ffff:ffff:ffff:ffff:ffff,ID
+2001:df1:e800::,2001:df1:e800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df1:f000::,2001:df1:f000:ffff:ffff:ffff:ffff:ffff,ID
+2001:df1:f800::,2001:df1:f800:ffff:ffff:ffff:ffff:ffff,BN
+2001:df2::,2001:df2::ffff:ffff:ffff:ffff:ffff,AU
+2001:df2:800::,2001:df2:800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df2:1000::,2001:df2:1000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df2:1800::,2001:df2:1803:ffff:ffff:ffff:ffff:ffff,IN
+2001:df2:2000::,2001:df2:2000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df2:2800::,2001:df2:2800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df2:3000::,2001:df2:3000:ffff:ffff:ffff:ffff:ffff,SG
+2001:df2:3800::,2001:df2:3800:ffff:ffff:ffff:ffff:ffff,TH
+2001:df2:4000::,2001:df2:4000:ffff:ffff:ffff:ffff:ffff,HK
+2001:df2:4800::,2001:df2:4800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df2:5000::,2001:df2:5000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df2:5800::,2001:df2:5800:ffff:ffff:ffff:ffff:ffff,HK
+2001:df2:6000::,2001:df2:6000:ffff:ffff:ffff:ffff:ffff,ID
+2001:df2:6800::,2001:df2:6800:ffff:ffff:ffff:ffff:ffff,PH
+2001:df2:7000::,2001:df2:7000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df2:7800::,2001:df2:7800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df2:8000::,2001:df2:8000:ffff:ffff:ffff:ffff:ffff,BN
+2001:df2:8800::,2001:df2:8800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df2:9000::,2001:df2:9000:ffff:ffff:ffff:ffff:ffff,AU
+2001:df2:9800::,2001:df2:9803:ffff:ffff:ffff:ffff:ffff,IN
+2001:df2:a000::,2001:df2:a000:ffff:ffff:ffff:ffff:ffff,ID
+2001:df2:a800::,2001:df2:a800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df2:b000::,2001:df2:b000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df2:c000::,2001:df2:c000:ffff:ffff:ffff:ffff:ffff,ID
+2001:df2:c800::,2001:df2:c800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df2:d000::,2001:df2:d000:ffff:ffff:ffff:ffff:ffff,HK
+2001:df2:d800::,2001:df2:d800:ffff:ffff:ffff:ffff:ffff,JP
+2001:df2:e000::,2001:df2:e000:ffff:ffff:ffff:ffff:ffff,AU
+2001:df2:e800::,2001:df2:e800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df2:f000::,2001:df2:f000:ffff:ffff:ffff:ffff:ffff,VN
+2001:df2:f800::,2001:df2:f800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df3::,2001:df3::ffff:ffff:ffff:ffff:ffff,MY
+2001:df3:800::,2001:df3:80f:ffff:ffff:ffff:ffff:ffff,CN
+2001:df3:1000::,2001:df3:1000:ffff:ffff:ffff:ffff:ffff,BD
+2001:df3:1800::,2001:df3:1800:ffff:ffff:ffff:ffff:ffff,ID
+2001:df3:2000::,2001:df3:2000:ffff:ffff:ffff:ffff:ffff,ID
+2001:df3:2800::,2001:df3:2800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df3:3000::,2001:df3:3000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df3:3800::,2001:df3:3800:ffff:ffff:ffff:ffff:ffff,ID
+2001:df3:4000::,2001:df3:4000:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df3:4800::,2001:df3:4800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df3:5000::,2001:df3:5000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df3:5800::,2001:df3:5800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df3:6000::,2001:df3:6000:ffff:ffff:ffff:ffff:ffff,SG
+2001:df3:6800::,2001:df3:6800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df3:7000::,2001:df3:7000:ffff:ffff:ffff:ffff:ffff,ID
+2001:df3:7800::,2001:df3:7800:ffff:ffff:ffff:ffff:ffff,SG
+2001:df3:8000::,2001:df3:8000:ffff:ffff:ffff:ffff:ffff,ID
+2001:df3:8800::,2001:df3:8800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df3:9000::,2001:df3:9000:ffff:ffff:ffff:ffff:ffff,HK
+2001:df3:9800::,2001:df3:9800:ffff:ffff:ffff:ffff:ffff,MY
+2001:df3:a000::,2001:df3:a003:ffff:ffff:ffff:ffff:ffff,PH
+2001:df3:a800::,2001:df3:a800:ffff:ffff:ffff:ffff:ffff,MY
+2001:df3:b000::,2001:df3:b000:ffff:ffff:ffff:ffff:ffff,TH
+2001:df3:b800::,2001:df3:b800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df3:c000::,2001:df3:c000:ffff:ffff:ffff:ffff:ffff,ID
+2001:df3:c800::,2001:df3:c800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df3:d000::,2001:df3:d000:ffff:ffff:ffff:ffff:ffff,AU
+2001:df3:d800::,2001:df3:d800:ffff:ffff:ffff:ffff:ffff,SG
+2001:df3:e000::,2001:df3:e000:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df3:e800::,2001:df3:e800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df3:f000::,2001:df3:f000:ffff:ffff:ffff:ffff:ffff,ID
+2001:df3:f800::,2001:df3:f800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df4::,2001:df4::ffff:ffff:ffff:ffff:ffff,MY
+2001:df4:800::,2001:df4:800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df4:1000::,2001:df4:1000:ffff:ffff:ffff:ffff:ffff,HK
+2001:df4:1800::,2001:df4:1800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df4:2000::,2001:df4:2000:ffff:ffff:ffff:ffff:ffff,TH
+2001:df4:2800::,2001:df4:2800:ffff:ffff:ffff:ffff:ffff,HK
+2001:df4:3000::,2001:df4:3000:ffff:ffff:ffff:ffff:ffff,TH
+2001:df4:3800::,2001:df4:3800:ffff:ffff:ffff:ffff:ffff,BD
+2001:df4:4000::,2001:df4:400f:ffff:ffff:ffff:ffff:ffff,SG
+2001:df4:4800::,2001:df4:4800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df4:5000::,2001:df4:5000:ffff:ffff:ffff:ffff:ffff,ID
+2001:df4:5800::,2001:df4:5800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df4:6000::,2001:df4:6000:ffff:ffff:ffff:ffff:ffff,MY
+2001:df4:6800::,2001:df4:6800:ffff:ffff:ffff:ffff:ffff,SG
+2001:df4:7000::,2001:df4:7000:ffff:ffff:ffff:ffff:ffff,HK
+2001:df4:7800::,2001:df4:7800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df4:8000::,2001:df4:8000:ffff:ffff:ffff:ffff:ffff,MY
+2001:df4:8800::,2001:df4:8800:ffff:ffff:ffff:ffff:ffff,HK
+2001:df4:9000::,2001:df4:9000:ffff:ffff:ffff:ffff:ffff,SG
+2001:df4:9800::,2001:df4:9800:ffff:ffff:ffff:ffff:ffff,ID
+2001:df4:a000::,2001:df4:a000:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df4:a800::,2001:df4:a800:ffff:ffff:ffff:ffff:ffff,ID
+2001:df4:b000::,2001:df4:b000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df4:b800::,2001:df4:b800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df4:c000::,2001:df4:c000:ffff:ffff:ffff:ffff:ffff,ID
+2001:df4:c800::,2001:df4:c800:ffff:ffff:ffff:ffff:ffff,SG
+2001:df4:d000::,2001:df4:d000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df4:d800::,2001:df4:d800:ffff:ffff:ffff:ffff:ffff,VN
+2001:df4:e000::,2001:df4:e000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df4:e800::,2001:df4:e800:ffff:ffff:ffff:ffff:ffff,MN
+2001:df4:f000::,2001:df4:f000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df4:f800::,2001:df4:f800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df5::,2001:df5::ffff:ffff:ffff:ffff:ffff,AU
+2001:df5:800::,2001:df5:800:ffff:ffff:ffff:ffff:ffff,HK
+2001:df5:1000::,2001:df5:1000:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df5:1800::,2001:df5:1800:ffff:ffff:ffff:ffff:ffff,ID
+2001:df5:2000::,2001:df5:2000:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df5:2800::,2001:df5:2800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df5:3000::,2001:df5:3000:ffff:ffff:ffff:ffff:ffff,AU
+2001:df5:3800::,2001:df5:3800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df5:4000::,2001:df5:4000:ffff:ffff:ffff:ffff:ffff,ID
+2001:df5:4800::,2001:df5:4800:ffff:ffff:ffff:ffff:ffff,BN
+2001:df5:5000::,2001:df5:5000:ffff:ffff:ffff:ffff:ffff,ID
+2001:df5:5800::,2001:df5:5800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df5:6000::,2001:df5:6000:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df5:6800::,2001:df5:6800:ffff:ffff:ffff:ffff:ffff,KR
+2001:df5:7000::,2001:df5:7000:ffff:ffff:ffff:ffff:ffff,ID
+2001:df5:7800::,2001:df5:7800:ffff:ffff:ffff:ffff:ffff,CN
+2001:df5:8000::,2001:df5:8000:ffff:ffff:ffff:ffff:ffff,SG
+2001:df5:8800::,2001:df5:8800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df5:9000::,2001:df5:9000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df5:9800::,2001:df5:9800:ffff:ffff:ffff:ffff:ffff,SG
+2001:df5:a000::,2001:df5:a000:ffff:ffff:ffff:ffff:ffff,ID
+2001:df5:a800::,2001:df5:a800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df5:b000::,2001:df5:b000:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df5:b800::,2001:df5:b800:ffff:ffff:ffff:ffff:ffff,HK
+2001:df5:c800::,2001:df5:c800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df5:d000::,2001:df5:d000:ffff:ffff:ffff:ffff:ffff,ID
+2001:df5:d800::,2001:df5:d800:ffff:ffff:ffff:ffff:ffff,SG
+2001:df5:e000::,2001:df5:e000:ffff:ffff:ffff:ffff:ffff,MY
+2001:df5:e800::,2001:df5:e800:ffff:ffff:ffff:ffff:ffff,PH
+2001:df5:f000::,2001:df5:f000:ffff:ffff:ffff:ffff:ffff,ID
+2001:df5:f800::,2001:df5:f800:ffff:ffff:ffff:ffff:ffff,SG
+2001:df6::,2001:df6:1:ffff:ffff:ffff:ffff:ffff,IN
+2001:df6:800::,2001:df6:80f:ffff:ffff:ffff:ffff:ffff,HK
+2001:df6:1000::,2001:df6:1000:ffff:ffff:ffff:ffff:ffff,PH
+2001:df6:1800::,2001:df6:1800:ffff:ffff:ffff:ffff:ffff,ID
+2001:df6:2000::,2001:df6:2001:ffff:ffff:ffff:ffff:ffff,HK
+2001:df6:2800::,2001:df6:2800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df6:3000::,2001:df6:3000:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df6:3800::,2001:df6:3800:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df6:4000::,2001:df6:4001:ffff:ffff:ffff:ffff:ffff,AU
+2001:df6:5000::,2001:df6:5000:ffff:ffff:ffff:ffff:ffff,AU
+2001:df6:6000::,2001:df6:6000:ffff:ffff:ffff:ffff:ffff,JP
+2001:df6:7000::,2001:df6:7000:ffff:ffff:ffff:ffff:ffff,VN
+2001:df6:8000::,2001:df6:8000:ffff:ffff:ffff:ffff:ffff,JP
+2001:df6:9000::,2001:df6:9000:ffff:ffff:ffff:ffff:ffff,AU
+2001:df6:a000::,2001:df6:a000:ffff:ffff:ffff:ffff:ffff,JP
+2001:df6:b000::,2001:df6:b000:ffff:ffff:ffff:ffff:ffff,TH
+2001:df6:c000::,2001:df6:c000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df6:d000::,2001:df6:d000:ffff:ffff:ffff:ffff:ffff,HK
+2001:df6:e000::,2001:df6:e000:ffff:ffff:ffff:ffff:ffff,VU
+2001:df6:f000::,2001:df6:f000:ffff:ffff:ffff:ffff:ffff,HK
+2001:df7::,2001:df7::ffff:ffff:ffff:ffff:ffff,IN
+2001:df7:1000::,2001:df7:1000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df7:2000::,2001:df7:2000:ffff:ffff:ffff:ffff:ffff,AU
+2001:df7:3000::,2001:df7:3001:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df7:4000::,2001:df7:4000:ffff:ffff:ffff:ffff:ffff,SG
+2001:df7:5000::,2001:df7:5000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df7:6000::,2001:df7:6000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df7:7000::,2001:df7:7000:ffff:ffff:ffff:ffff:ffff,HK
+2001:df7:9000::,2001:df7:9000:ffff:ffff:ffff:ffff:ffff,PH
+2001:df7:a000::,2001:df7:a000:ffff:ffff:ffff:ffff:ffff,AU
+2001:df7:b000::,2001:df7:b000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df7:c000::,2001:df7:c003:ffff:ffff:ffff:ffff:ffff,SG
+2001:df7:d000::,2001:df7:d000:ffff:ffff:ffff:ffff:ffff,BD
+2001:df7:e000::,2001:df7:e000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df7:f000::,2001:df7:f000:ffff:ffff:ffff:ffff:ffff,JP
+2001:df8::,2001:df9:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2001:dfa::,2001:dfa:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:e00::,2001:eff:ffff:ffff:ffff:ffff:ffff:ffff,MZ
+2001:f00::,2001:f00:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2001:f08::,2001:f08:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:f10::,2001:f10:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2001:f18::,2001:f18:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2001:f20::,2001:f20:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2001:f28::,2001:f28:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2001:f30::,2001:f30:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2001:f38::,2001:f38:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2001:f40::,2001:f40:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2001:f48::,2001:f48:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2001:f50::,2001:f50:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2001:f58::,2001:f58:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:f60::,2001:f6f:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:f80::,2001:f80:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:f88::,2001:f88:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2001:f90::,2001:f90:ffff:ffff:ffff:ffff:ffff:ffff,MO
+2001:f98::,2001:f98:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:fa0::,2001:fa0:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:fa8::,2001:fa8:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:fb0::,2001:fb1:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2001:fc0::,2001:fc0:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2001:fc8::,2001:fc8:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:fd0::,2001:fd0:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2001:fd8::,2001:fd8:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2001:fe0::,2001:fe0:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2001:fe8::,2001:fe8:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2001:ff0::,2001:ff0:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:ff8::,2001:ff8:ffff:ffff:ffff:ffff:ffff:ffff,MO
+2001:1200::,2001:1200:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2001:1208::,2001:1208:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2001:1210::,2001:1210:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2001:1218::,2001:1218:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2001:1220::,2001:1220:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2001:1228::,2001:1228:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2001:122c::,2001:122c:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2001:1230::,2001:1230:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2001:1238::,2001:1238:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2001:1240::,2001:1240:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2001:1248::,2001:1248:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2001:1250::,2001:1250:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2001:1258::,2001:1258:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2001:1260::,2001:1260:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2001:1270::,2001:1270:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2001:1278::,2001:1278:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2001:1280::,2001:1280:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2001:1284::,2001:1284:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2001:1288::,2001:1288:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2001:128c::,2001:128c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2001:1290::,2001:1291:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2001:1294::,2001:1294:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2001:1298::,2001:1298:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2001:129c::,2001:129c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2001:12a0::,2001:12a0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2001:12a4::,2001:12a4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2001:12ac::,2001:12ac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2001:12b0::,2001:12b0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2001:12b4::,2001:12b4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2001:12b8::,2001:12b8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2001:12bc::,2001:12bc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2001:12c0::,2001:12c0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2001:12c4::,2001:12c4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2001:12c8::,2001:12c8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2001:12d0::,2001:12d0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2001:12d8::,2001:12d8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2001:12e0::,2001:12e0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2001:12e8::,2001:12e8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2001:12f0::,2001:12f0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2001:12f8::,2001:12f8:1:ffff:ffff:ffff:ffff:ffff,BR
+2001:12f8:4::,2001:12f8:4:ffff:ffff:ffff:ffff:ffff,BR
+2001:12fe::,2001:12ff:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2001:1300::,2001:1300:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2001:1308::,2001:1308:ffff:ffff:ffff:ffff:ffff:ffff,DO
+2001:1310::,2001:1310:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2001:1318::,2001:1318:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2001:1320::,2001:1320:ffff:ffff:ffff:ffff:ffff:ffff,PY
+2001:1328::,2001:1328:ffff:ffff:ffff:ffff:ffff:ffff,UY
+2001:1330::,2001:1337:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2001:1338::,2001:1338:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2001:1340::,2001:1340:ffff:ffff:ffff:ffff:ffff:ffff,CU
+2001:1348::,2001:1348:ffff:ffff:ffff:ffff:ffff:ffff,UY
+2001:1350::,2001:1350:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2001:1358::,2001:1358:ffff:ffff:ffff:ffff:ffff:ffff,CU
+2001:1360::,2001:1360:ffff:ffff:ffff:ffff:ffff:ffff,GT
+2001:1368::,2001:1368:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2001:1370::,2001:1370:ffff:ffff:ffff:ffff:ffff:ffff,HT
+2001:1378::,2001:1378:ffff:ffff:ffff:ffff:ffff:ffff,BO
+2001:1380::,2001:1380:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2001:1388::,2001:1388:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2001:1398::,2001:1398:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2001:13a0::,2001:13a0:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2001:13a8::,2001:13a8:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2001:13b0::,2001:13b7:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2001:13c7:6000::,2001:13c7:6000:ffff:ffff:ffff:ffff:ffff,CO
+2001:13c7:6001::,2001:13c7:6001:ffff:ffff:ffff:ffff:ffff,AR
+2001:13c7:6002::,2001:13c7:6002:ffff:ffff:ffff:ffff:ffff,SX
+2001:13c7:6003::,2001:13c7:6003:ffff:ffff:ffff:ffff:ffff,HT
+2001:13c7:6004::,2001:13c7:6005:ffff:ffff:ffff:ffff:ffff,CW
+2001:13c7:6006::,2001:13c7:6006:ffff:ffff:ffff:ffff:ffff,EC
+2001:13c7:6007::,2001:13c7:600e:ffff:ffff:ffff:ffff:ffff,AR
+2001:13c7:6010::,2001:13c7:601f:ffff:ffff:ffff:ffff:ffff,AR
+2001:13c7:6f00::,2001:13c7:6fff:ffff:ffff:ffff:ffff:ffff,EC
+2001:13c7:7000::,2001:13c7:7000:ffff:ffff:ffff:ffff:ffff,MX
+2001:13c7:7001::,2001:13c7:7003:ffff:ffff:ffff:ffff:ffff,UY
+2001:13c7:7004::,2001:13c7:7004:ffff:ffff:ffff:ffff:ffff,CR
+2001:13c7:7005::,2001:13c7:7009:ffff:ffff:ffff:ffff:ffff,UY
+2001:13c7:7010::,2001:13c7:7013:ffff:ffff:ffff:ffff:ffff,UY
+2001:13c7:7014::,2001:13c7:7014:ffff:ffff:ffff:ffff:ffff,MX
+2001:13c8::,2001:13c8:ffff:ffff:ffff:ffff:ffff:ffff,CU
+2001:13d0::,2001:13d0:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2001:13d8::,2001:13d8:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2001:13e0::,2001:13e0:ffff:ffff:ffff:ffff:ffff:ffff,DO
+2001:13e8::,2001:13e8:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2001:13f0::,2001:13f0:ffff:ffff:ffff:ffff:ffff:ffff,DO
+2001:13f8::,2001:13f8:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2001:1400::,2001:1400:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2001:1408::,2001:1408:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2001:1410::,2001:1410:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:1418::,2001:1418:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2001:1420::,2001:1420:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:1428::,2001:1428:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2001:1430::,2001:1430:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2001:1438::,2001:1438:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:1440::,2001:1440:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:1448::,2001:1448:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2001:1450::,2001:1450:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2001:1458::,2001:1459:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2001:1460::,2001:1460:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:1468::,2001:146f:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2001:1470::,2001:1477:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2001:1478::,2001:1478:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:1488::,2001:1488:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2001:1490::,2001:1490:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2001:1498::,2001:1498:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2001:14a0::,2001:14a0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:14a8::,2001:14a8:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2001:14b0::,2001:14b0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:14b8::,2001:14bf:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2001:14c0::,2001:14c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:14c8::,2001:14c8:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2001:14d0::,2001:14d0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2001:14d8::,2001:14d8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:14e0::,2001:14e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:14e8::,2001:14e8:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2001:14f0::,2001:14f0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:14f8::,2001:14f8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:1500::,2001:1500:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2001:1508::,2001:1508:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2001:1510::,2001:1510:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:1520::,2001:1520:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:1528::,2001:1528:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2001:1530::,2001:1530:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2001:1538::,2001:1538:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2001:1540::,2001:1540:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:1548::,2001:1548:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2001:1558::,2001:1558:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2001:1560::,2001:1560:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:1568::,2001:1568:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2001:1570::,2001:1570:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:1578::,2001:1578:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:1580::,2001:1580:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2001:1588::,2001:1588:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2001:1590::,2001:1590:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2001:1598::,2001:1598:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2001:15a0::,2001:15a0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2001:15a8::,2001:15a8:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2001:15b0::,2001:15b0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:15b8::,2001:15b8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:15c0::,2001:15c7:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2001:15c8::,2001:15c8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:15d8::,2001:15d8:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2001:15e0::,2001:15e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:15e8::,2001:15e8:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2001:15f0::,2001:15f0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:15f8::,2001:15f8:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2001:1600::,2001:1607:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2001:1608::,2001:1608:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:1610::,2001:1610:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2001:1618::,2001:1618:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2001:1620::,2001:1623:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2001:1628::,2001:1628:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2001:1630::,2001:1637:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2001:1638::,2001:1638:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:1640::,2001:1640:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:1650::,2001:1650:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2001:1658::,2001:1658:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2001:1660::,2001:1660:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2001:1668::,2001:1668:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2001:1670::,2001:1670:ffff:ffff:ffff:ffff:ffff:ffff,OM
+2001:1678::,2001:1678:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2001:1680::,2001:1687:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2001:1688::,2001:168f:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2001:1690::,2001:1690:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:1698::,2001:1698:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2001:16a0::,2001:16a7:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2001:16a8::,2001:16a8:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2001:16b0::,2001:16b0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2001:16b8::,2001:16b8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:16c0::,2001:16c0:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2001:16c8::,2001:16c8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:16d0::,2001:16d0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2001:16d8::,2001:16d8:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2001:16e0::,2001:16e7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:16e8::,2001:16e8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:16f0::,2001:16f0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:16f8::,2001:16f8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:1700::,2001:171f:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2001:1800::,2001:1800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1808::,2001:1808:ffff:ffff:ffff:ffff:ffff:ffff,GD
+2001:1810::,2001:1810:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1818::,2001:1818:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1820::,2001:1820:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1828::,2001:1828:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1830::,2001:1830:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1838::,2001:1838:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1840::,2001:1840:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1848::,2001:1848:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1850::,2001:1850:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1858::,2001:1858:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1860::,2001:1860:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1868::,2001:1868:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1878::,2001:1878:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1888::,2001:1888:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1890::,2001:1898:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:18a0::,2001:18a0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:18a8::,2001:18a8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:18b0::,2001:18b0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:18b8::,2001:18b8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:18c0::,2001:18c0:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2001:18c8::,2001:18c8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:18d8::,2001:18d8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:18e0::,2001:18e0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:18e8::,2001:18e8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:18f0::,2001:18f0:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2001:18f8::,2001:18f8:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2001:1900::,2001:1900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1908::,2001:1908:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1910::,2001:1910:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1920::,2001:1920:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2001:1928::,2001:1928:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2001:1930::,2001:1930:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1938::,2001:1938:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1940::,2001:1940:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1948::,2001:1948:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1950::,2001:1950:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1958::,2001:1958:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1960::,2001:1960:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1968::,2001:1968:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1970::,2001:1970:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2001:1978::,2001:1978:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1980::,2001:1980:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1988::,2001:1988:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1990::,2001:1990:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1998::,2001:1998:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:19a0::,2001:19a0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:19a8::,2001:19a8:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2001:19b0::,2001:19b0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:19b8::,2001:19b8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:19c0::,2001:19c0:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2001:19c8::,2001:19c8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:19d0::,2001:19d0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:19d8::,2001:19d8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:19e0::,2001:19e0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:19e8::,2001:19e8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:19f0::,2001:19f0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:19f8::,2001:19f8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1a00::,2001:1aff:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2001:1b00::,2001:1b00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2001:1b08::,2001:1b08:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2001:1b10::,2001:1b10:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:1b18::,2001:1b18:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:1b20::,2001:1b20:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:1b28::,2001:1b28:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2001:1b30::,2001:1b37:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:1b38::,2001:1b38:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2001:1b40::,2001:1b40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:1b48::,2001:1b48:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2001:1b50::,2001:1b57:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2001:1b58::,2001:1b58:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2001:1b60::,2001:1b60:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:1b68::,2001:1b68:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2001:1b70::,2001:1b77:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2001:1b78::,2001:1b78:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2001:1b80::,2001:1b80:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2001:1b88::,2001:1b88:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:1b90::,2001:1b90:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:1b98::,2001:1b98:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2001:1ba0::,2001:1ba0:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2001:1ba8::,2001:1ba8:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2001:1bb0::,2001:1bb0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2001:1bb8::,2001:1bb8:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2001:1bc0::,2001:1bc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:1bc8::,2001:1bcf:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2001:1bd0::,2001:1bd0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2001:1bd8::,2001:1bd8:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2001:1be0::,2001:1be0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:1be8::,2001:1be8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:1bf0::,2001:1bf7:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2001:1bf8::,2001:1bf8:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2001:1c00::,2001:1dff:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:4000::,2001:4000:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2001:4010::,2001:4010:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:4018::,2001:4018:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:4020::,2001:4020:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2001:4028::,2001:4028:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2001:4030::,2001:4030:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2001:4038::,2001:4038:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:4040::,2001:4040:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2001:4048::,2001:4048:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2001:4050::,2001:4050:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2001:4058::,2001:4058:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2001:4060::,2001:4060:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2001:4068::,2001:4068:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:4070::,2001:4070:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2001:4078::,2001:407f:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2001:4080::,2001:4080:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2001:4088::,2001:4088:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:4090::,2001:4090:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:40a0::,2001:40a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:40a8::,2001:40a8:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2001:40b0::,2001:40b0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2001:40b8::,2001:40b8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:40c0::,2001:40c0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2001:40c8::,2001:40cf:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:40d0::,2001:40d0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2001:40d8::,2001:40d8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:40e0::,2001:40e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:40e8::,2001:40e8:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2001:40f0::,2001:40f0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2001:40f8::,2001:40f8:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2001:4100::,2001:4100:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2001:4108::,2001:4108:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2001:4118::,2001:4118:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2001:4120::,2001:4120:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:4128::,2001:4128:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:4130::,2001:4130:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2001:4138::,2001:4140:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:4150::,2001:4150:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:4158::,2001:415f:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2001:4160::,2001:4160:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:4168::,2001:4168:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2001:4170::,2001:4170:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2001:4178::,2001:4180:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:4188::,2001:4188:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2001:4190::,2001:4190:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2001:4198::,2001:4198:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:41a0::,2001:41a0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2001:41a8::,2001:41a8:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2001:41b0::,2001:41b0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2001:41b8::,2001:41b8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:41c0::,2001:41cf:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:41d0::,2001:41d0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2001:41d8::,2001:41d8:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2001:41e0::,2001:41e0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2001:41e8::,2001:41e8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:41f0::,2001:41f0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:41f8::,2001:41f8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:4200::,2001:4200:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2001:4208::,2001:4208:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2001:4210::,2001:4210:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2001:4218::,2001:4218:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2001:4220::,2001:4220:ffff:ffff:ffff:ffff:ffff:ffff,EG
+2001:4228::,2001:4228:ffff:ffff:ffff:ffff:ffff:ffff,SD
+2001:4238::,2001:4238:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2001:4240::,2001:4240:ffff:ffff:ffff:ffff:ffff:ffff,TZ
+2001:4248::,2001:4248:ffff:ffff:ffff:ffff:ffff:ffff,MU
+2001:4250::,2001:4250:ffff:ffff:ffff:ffff:ffff:ffff,AO
+2001:4258::,2001:4258:ffff:ffff:ffff:ffff:ffff:ffff,TZ
+2001:4260::,2001:4260:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2001:4268::,2001:4268:ffff:ffff:ffff:ffff:ffff:ffff,CM
+2001:4270::,2001:4270:ffff:ffff:ffff:ffff:ffff:ffff,NG
+2001:4278::,2001:4278:ffff:ffff:ffff:ffff:ffff:ffff,SN
+2001:4288::,2001:4288:ffff:ffff:ffff:ffff:ffff:ffff,MA
+2001:4290::,2001:4290:ffff:ffff:ffff:ffff:ffff:ffff,MU
+2001:4298::,2001:4298:ffff:ffff:ffff:ffff:ffff:ffff,DJ
+2001:42a0::,2001:42a0:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2001:42a8::,2001:42a8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2001:42b0::,2001:42b0:ffff:ffff:ffff:ffff:ffff:ffff,ZW
+2001:42b8::,2001:42b8:ffff:ffff:ffff:ffff:ffff:ffff,EG
+2001:42c0::,2001:42c0:ffff:ffff:ffff:ffff:ffff:ffff,ML
+2001:42c8::,2001:42c8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2001:42d0::,2001:42d0:ffff:ffff:ffff:ffff:ffff:ffff,MU
+2001:42d8::,2001:42d8:ffff:ffff:ffff:ffff:ffff:ffff,CI
+2001:42e0::,2001:42e0:ffff:ffff:ffff:ffff:ffff:ffff,SC
+2001:42f0::,2001:42f0:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2001:42f8::,2001:42f8:ffff:ffff:ffff:ffff:ffff:ffff,GH
+2001:4300::,2001:4300:ffff:ffff:ffff:ffff:ffff:ffff,EG
+2001:4308::,2001:4308:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2001:4310::,2001:4310:ffff:ffff:ffff:ffff:ffff:ffff,MA
+2001:4318::,2001:4318:ffff:ffff:ffff:ffff:ffff:ffff,CI
+2001:4320::,2001:4320:ffff:ffff:ffff:ffff:ffff:ffff,BJ
+2001:4328::,2001:4328:ffff:ffff:ffff:ffff:ffff:ffff,MU
+2001:4330::,2001:4330:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2001:4338::,2001:4338:ffff:ffff:ffff:ffff:ffff:ffff,SZ
+2001:4340::,2001:4340:ffff:ffff:ffff:ffff:ffff:ffff,DZ
+2001:4350::,2001:4350:ffff:ffff:ffff:ffff:ffff:ffff,TN
+2001:4358::,2001:4358:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2001:4368::,2001:4368:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2001:4370::,2001:4370:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2001:4378::,2001:4378:ffff:ffff:ffff:ffff:ffff:ffff,MZ
+2001:4388::,2001:4388:ffff:ffff:ffff:ffff:ffff:ffff,EG
+2001:4398::,2001:4398:ffff:ffff:ffff:ffff:ffff:ffff,MG
+2001:43a0::,2001:43a0:ffff:ffff:ffff:ffff:ffff:ffff,TZ
+2001:43a8::,2001:43a8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43b0::,2001:43b0:ffff:ffff:ffff:ffff:ffff:ffff,NG
+2001:43b8::,2001:43b8:ffff:ffff:ffff:ffff:ffff:ffff,MU
+2001:43c0::,2001:43c0:ffff:ffff:ffff:ffff:ffff:ffff,GH
+2001:43c8::,2001:43c8:ffff:ffff:ffff:ffff:ffff:ffff,EG
+2001:43d0::,2001:43d0:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2001:43d8::,2001:43d8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43e0::,2001:43e0:ffff:ffff:ffff:ffff:ffff:ffff,GH
+2001:43e8::,2001:43e8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43f0::,2001:43f0:ffff:ffff:ffff:ffff:ffff:ffff,ZW
+2001:43f8::,2001:43f8:1:ffff:ffff:ffff:ffff:ffff,TZ
+2001:43f8:10::,2001:43f8:10:ffff:ffff:ffff:ffff:ffff,KE
+2001:43f8:20::,2001:43f8:20:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43f8:30::,2001:43f8:30:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43f8:50::,2001:43f8:50:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43f8:60::,2001:43f8:60:ffff:ffff:ffff:ffff:ffff,KE
+2001:43f8:70::,2001:43f8:77:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43f8:80::,2001:43f8:80:ffff:ffff:ffff:ffff:ffff,NA
+2001:43f8:90::,2001:43f8:90:ffff:ffff:ffff:ffff:ffff,MU
+2001:43f8:a0::,2001:43f8:a0:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43f8:b0::,2001:43f8:b0:ffff:ffff:ffff:ffff:ffff,SL
+2001:43f8:c0::,2001:43f8:c0:ffff:ffff:ffff:ffff:ffff,KE
+2001:43f8:d0::,2001:43f8:d0:ffff:ffff:ffff:ffff:ffff,MU
+2001:43f8:e0::,2001:43f8:e0:ffff:ffff:ffff:ffff:ffff,TZ
+2001:43f8:100::,2001:43f8:100:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43f8:110::,2001:43f8:110:ffff:ffff:ffff:ffff:ffff,MU
+2001:43f8:120::,2001:43f8:120:ffff:ffff:ffff:ffff:ffff,MU
+2001:43f8:130::,2001:43f8:130:ffff:ffff:ffff:ffff:ffff,UG
+2001:43f8:140::,2001:43f8:140:ffff:ffff:ffff:ffff:ffff,ZM
+2001:43f8:150::,2001:43f8:150:ffff:ffff:ffff:ffff:ffff,RW
+2001:43f8:160::,2001:43f8:160:ffff:ffff:ffff:ffff:ffff,NG
+2001:43f8:170::,2001:43f8:170:ffff:ffff:ffff:ffff:ffff,KE
+2001:43f8:180::,2001:43f8:180:ffff:ffff:ffff:ffff:ffff,NG
+2001:43f8:190::,2001:43f8:190:ffff:ffff:ffff:ffff:ffff,NG
+2001:43f8:1a0::,2001:43f8:1a0:ffff:ffff:ffff:ffff:ffff,GH
+2001:43f8:1c0::,2001:43f8:1c0:ffff:ffff:ffff:ffff:ffff,DZ
+2001:43f8:1d0::,2001:43f8:1d0:ffff:ffff:ffff:ffff:ffff,GH
+2001:43f8:1e0::,2001:43f8:1e0:ffff:ffff:ffff:ffff:ffff,NG
+2001:43f8:1f0::,2001:43f8:1f5:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43f8:200::,2001:43f8:200:ffff:ffff:ffff:ffff:ffff,KE
+2001:43f8:210::,2001:43f8:210:ffff:ffff:ffff:ffff:ffff,LS
+2001:43f8:220::,2001:43f8:220:ffff:ffff:ffff:ffff:ffff,MU
+2001:43f8:230::,2001:43f8:230:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43f8:240::,2001:43f8:241:ffff:ffff:ffff:ffff:ffff,GH
+2001:43f8:250::,2001:43f8:250:ffff:ffff:ffff:ffff:ffff,KE
+2001:43f8:260::,2001:43f8:260:ffff:ffff:ffff:ffff:ffff,KE
+2001:43f8:270::,2001:43f8:270:ffff:ffff:ffff:ffff:ffff,MU
+2001:43f8:290::,2001:43f8:290:ffff:ffff:ffff:ffff:ffff,MG
+2001:43f8:2a0::,2001:43f8:2a0:ffff:ffff:ffff:ffff:ffff,BW
+2001:43f8:2b0::,2001:43f8:2b0:ffff:ffff:ffff:ffff:ffff,BW
+2001:43f8:2c0::,2001:43f8:2c0:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43f8:2e0::,2001:43f8:2e0:ffff:ffff:ffff:ffff:ffff,EG
+2001:43f8:2f0::,2001:43f8:2f0:ffff:ffff:ffff:ffff:ffff,NG
+2001:43f8:310::,2001:43f8:310:ffff:ffff:ffff:ffff:ffff,ZW
+2001:43f8:320::,2001:43f8:320:ffff:ffff:ffff:ffff:ffff,TN
+2001:43f8:330::,2001:43f8:330:ffff:ffff:ffff:ffff:ffff,TZ
+2001:43f8:340::,2001:43f8:340:ffff:ffff:ffff:ffff:ffff,KE
+2001:43f8:360::,2001:43f8:360:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43f8:370::,2001:43f8:370:ffff:ffff:ffff:ffff:ffff,NG
+2001:43f8:380::,2001:43f8:380:ffff:ffff:ffff:ffff:ffff,MW
+2001:43f8:390::,2001:43f8:390:ffff:ffff:ffff:ffff:ffff,AO
+2001:43f8:3a0::,2001:43f8:3a0:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43f8:3b0::,2001:43f8:3b0:ffff:ffff:ffff:ffff:ffff,NA
+2001:43f8:3c0::,2001:43f8:3c0:ffff:ffff:ffff:ffff:ffff,CD
+2001:43f8:3d0::,2001:43f8:3d0:ffff:ffff:ffff:ffff:ffff,BF
+2001:43f8:400::,2001:43f8:4ff:ffff:ffff:ffff:ffff:ffff,AO
+2001:43f8:600::,2001:43f8:60f:ffff:ffff:ffff:ffff:ffff,NG
+2001:43f8:610::,2001:43f8:610:ffff:ffff:ffff:ffff:ffff,TZ
+2001:43f8:620::,2001:43f8:620:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43f8:630::,2001:43f8:630:ffff:ffff:ffff:ffff:ffff,MW
+2001:43f8:640::,2001:43f8:640:ffff:ffff:ffff:ffff:ffff,MZ
+2001:43f8:650::,2001:43f8:650:ffff:ffff:ffff:ffff:ffff,MA
+2001:43f8:660::,2001:43f8:660:ffff:ffff:ffff:ffff:ffff,NG
+2001:43f8:670::,2001:43f8:670:ffff:ffff:ffff:ffff:ffff,AO
+2001:43f8:680::,2001:43f8:680:ffff:ffff:ffff:ffff:ffff,TZ
+2001:43f8:6a0::,2001:43f8:6a0:ffff:ffff:ffff:ffff:ffff,CG
+2001:43f8:6b0::,2001:43f8:6b3:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43f8:6c0::,2001:43f8:6c0:ffff:ffff:ffff:ffff:ffff,NG
+2001:43f8:6d0::,2001:43f8:6d3:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43f8:6e0::,2001:43f8:6e0:ffff:ffff:ffff:ffff:ffff,KE
+2001:43f8:700::,2001:43f8:70f:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43f8:720::,2001:43f8:720:ffff:ffff:ffff:ffff:ffff,AO
+2001:43f8:750::,2001:43f8:75f:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43f8:760::,2001:43f8:760:ffff:ffff:ffff:ffff:ffff,AO
+2001:43f8:770::,2001:43f8:773:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43f8:780::,2001:43f8:780:ffff:ffff:ffff:ffff:ffff,NG
+2001:43f8:790::,2001:43f8:790:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43f8:7a0::,2001:43f8:7a0:ffff:ffff:ffff:ffff:ffff,MU
+2001:43f8:7b0::,2001:43f8:7b0:ffff:ffff:ffff:ffff:ffff,KE
+2001:43f8:7c0::,2001:43f8:7c0:ffff:ffff:ffff:ffff:ffff,AO
+2001:43f8:7d0::,2001:43f8:7d0:ffff:ffff:ffff:ffff:ffff,NG
+2001:43f8:7e0::,2001:43f8:7e0:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43f8:7f0::,2001:43f8:7f0:ffff:ffff:ffff:ffff:ffff,SD
+2001:43f8:800::,2001:43f8:83f:ffff:ffff:ffff:ffff:ffff,GH
+2001:43f8:900::,2001:43f8:900:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43f8:910::,2001:43f8:910:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43f8:920::,2001:43f8:920:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43f8:930::,2001:43f8:930:ffff:ffff:ffff:ffff:ffff,MZ
+2001:43f8:940::,2001:43f8:940:ffff:ffff:ffff:ffff:ffff,CI
+2001:43f8:950::,2001:43f8:950:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43f8:960::,2001:43f8:960:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43f8:970::,2001:43f8:970:ffff:ffff:ffff:ffff:ffff,GM
+2001:43f8:980::,2001:43f8:981:ffff:ffff:ffff:ffff:ffff,NA
+2001:43f8:990::,2001:43f8:991:ffff:ffff:ffff:ffff:ffff,BI
+2001:43f8:9a0::,2001:43f8:9a0:ffff:ffff:ffff:ffff:ffff,BJ
+2001:43f8:9b0::,2001:43f8:9b1:ffff:ffff:ffff:ffff:ffff,SZ
+2001:4400::,2001:4403:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2001:4408::,2001:4408:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2001:4410::,2001:4410:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2001:4420::,2001:4420:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2001:4428::,2001:4428:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2001:4430::,2001:4430:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2001:4438::,2001:4438:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2001:4450::,2001:4450:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2001:4458::,2001:4458:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2001:4460::,2001:4460:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:4470::,2001:4470:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2001:4478::,2001:447b:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2001:4480::,2001:4480:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2001:4488::,2001:448b:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2001:4490::,2001:4493:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2001:4498::,2001:4498:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2001:44a0::,2001:44a0:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:44a8::,2001:44a8:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:44b0::,2001:44b0:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:44b8::,2001:44b8:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2001:44c0::,2001:44c0:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2001:44c8::,2001:44c8:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2001:44d0::,2001:44df:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2001:44f0::,2001:44f0:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2001:4500::,2001:4500:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2001:4508::,2001:4508:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2001:4510::,2001:4517:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2001:4520::,2001:4520:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2001:4528::,2001:452b:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2001:4530::,2001:4530:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2001:4538::,2001:4538:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2001:4540::,2001:455f:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2001:4580::,2001:45bf:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2001:4600::,2001:46ff:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2001:4800::,2001:4808:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4810::,2001:4810:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4818::,2001:4818:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2001:4828::,2001:4828:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4830::,2001:4830:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4838::,2001:4838:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4840::,2001:4840:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4848::,2001:4848:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4850::,2001:4850:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4858::,2001:4858:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4860::,2001:4860:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4868::,2001:4868:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4870::,2001:4871:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4878::,2001:4878:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4880::,2001:4880:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4888::,2001:4888:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4890::,2001:4890:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4898::,2001:489a:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:48a0::,2001:48a0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:48a8::,2001:48a8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:48b0::,2001:48b0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:48b8::,2001:48b8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:48c0::,2001:48c0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:48c8::,2001:48c8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:48d0::,2001:48d0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:48d8::,2001:48d8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:48e0::,2001:48e0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:48e8::,2001:48e8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:48f0::,2001:48f0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:48f8::,2001:48f8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4900::,2001:4900:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2001:4908::,2001:4908:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4910::,2001:4910:ffff:ffff:ffff:ffff:ffff:ffff,BM
+2001:4918::,2001:4918:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4920::,2001:4920:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4928::,2001:4928:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4930::,2001:4930:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4938::,2001:4938:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2001:4940::,2001:4940:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4948::,2001:4948:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4950::,2001:4950:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4958::,2001:4958:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2001:4960::,2001:4960:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4968::,2001:4968:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4970::,2001:4970:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4978::,2001:4978:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4980::,2001:4980:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4988::,2001:4988:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4990::,2001:4990:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4998::,2001:4998:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:49a0::,2001:49a0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:49a8::,2001:49a8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:49b0::,2001:49b0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:49b8::,2001:49b8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:49c0::,2001:49c0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:49c8::,2001:49c8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:49d0::,2001:49d0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:49d8::,2001:49d8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:49e0::,2001:49e0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:49e8::,2001:49e8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:49f0::,2001:49f0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:49f8::,2001:49f8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4a00::,2001:4a1f:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:4b00::,2001:4b07:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2001:4b08::,2001:4b08:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:4b10::,2001:4b10:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:4b18::,2001:4b18:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2001:4b20::,2001:4b28:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2001:4b30::,2001:4b30:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2001:4b38::,2001:4b3f:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:4b40::,2001:4b40:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2001:4b48::,2001:4b48:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:4b50::,2001:4b50:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2001:4b58::,2001:4b58:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2001:4b60::,2001:4b60:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2001:4b68::,2001:4b68:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2001:4b70::,2001:4b7f:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2001:4b80::,2001:4b87:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2001:4b88::,2001:4b88:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:4b90::,2001:4b90:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2001:4b98::,2001:4b98:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2001:4ba0::,2001:4ba0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:4ba8::,2001:4ba8:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2001:4bb0::,2001:4bb0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2001:4bb8::,2001:4bb8:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2001:4bc0::,2001:4bc7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:4bc8::,2001:4bc8:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2001:4bd0::,2001:4bd0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:4bd8::,2001:4bd8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:4be0::,2001:4be0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2001:4be8::,2001:4be8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:4bf0::,2001:4bf0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:4bf8::,2001:4bf8:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2001:4c00::,2001:4cff:ffff:ffff:ffff:ffff:ffff:ffff,DJ
+2001:4d00::,2001:4d00:ffff:ffff:ffff:ffff:ffff:ffff,AM
+2001:4d08::,2001:4d08:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:4d10::,2001:4d10:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2001:4d18::,2001:4d18:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2001:4d20::,2001:4d20:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:4d30::,2001:4d30:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:4d38::,2001:4d38:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2001:4d48::,2001:4d48:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:4d50::,2001:4d50:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:4d58::,2001:4d58:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2001:4d60::,2001:4d60:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:4d68::,2001:4d68:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2001:4d70::,2001:4d70:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2001:4d78::,2001:4d78:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:4d80::,2001:4d80:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2001:4d88::,2001:4d88:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:4d90::,2001:4d90:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2001:4d98::,2001:4d98:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2001:4da0::,2001:4da7:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2001:4da8::,2001:4da8:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2001:4db0::,2001:4db0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:4db8::,2001:4db8:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2001:4dc0::,2001:4dc0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:4dc8::,2001:4dc8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:4dd0::,2001:4dd7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:4dd8::,2001:4dd8:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2001:4de0::,2001:4de0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:4de8::,2001:4de8:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2001:4df0::,2001:4df0:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2001:8000::,2001:8fff:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2001:a000::,2001:a7ff:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:b000::,2001:b7ff:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2003::,2003:1fff:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2400::,2400:fff:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2400:1000::,2400:1000:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:1080::,2400:1080:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:1100::,2400:1100:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:1180::,2400:1180:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:1200::,2400:1200:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2400:1300::,2400:1300:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2400:1380::,2400:1380:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:1400::,2400:1400:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:1480::,2400:1480:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:1500::,2400:1500:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2400:1580::,2400:1580:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2400:1600::,2400:1600:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:1680::,2400:1680:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2400:1700::,2400:1700:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:1780::,2400:1780:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:1800::,2400:1800:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2400:1880::,2400:1880:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:1900::,2400:1900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:1980::,2400:1980:ffff:ffff:ffff:ffff:ffff:ffff,AF
+2400:1a00::,2400:1a00:ffff:ffff:ffff:ffff:ffff:ffff,NP
+2400:1a80::,2400:1a80:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2400:1b00::,2400:1b00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:1b80::,2400:1b80:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:1c00::,2400:1c00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:1c80::,2400:1c80:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:1d00::,2400:1d00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:1d80::,2400:1d80:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:1e00::,2400:1e00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:1e80::,2400:1e80:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:1f00::,2400:1f00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:1f80::,2400:1f80:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:2000::,2400:3000:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:3080::,2400:3080:ffff:ffff:ffff:ffff:ffff:ffff,AF
+2400:3100::,2400:3100:ffff:ffff:ffff:ffff:ffff:ffff,VU
+2400:3180::,2400:3180:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:3200::,2400:3200:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:3280::,2400:3280:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:3300::,2400:3300:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2400:3380::,2400:3380:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:3400::,2400:3400:ffff:ffff:ffff:ffff:ffff:ffff,VU
+2400:3480::,2400:3480:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2400:3500::,2400:3500:ffff:ffff:ffff:ffff:ffff:ffff,TV
+2400:3580::,2400:3580:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:3600::,2400:3600:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:3680::,2400:3680:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:3700::,2400:3700:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2400:3800::,2400:3800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:3880::,2400:3880:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:3900::,2400:3900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:3980::,2400:3980:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:3a00::,2400:3a00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:3a80::,2400:3a80:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:3b00::,2400:3b00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:3b80::,2400:3b80:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:3c00::,2400:3c00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:3c80::,2400:3c80:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:3d00::,2400:3d00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:3d80::,2400:3d80:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2400:3e00::,2400:3e00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:3e80::,2400:3e80:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:3f00::,2400:3f00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:3f80::,2400:3f80:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:4000::,2400:43ff:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:4400::,2400:4400:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2400:4480::,2400:4480:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:4500::,2400:4500:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2400:4580::,2400:4580:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:4600::,2400:4600:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:4680::,2400:4680:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:4700::,2400:4700:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:4780::,2400:4780:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2400:4800::,2400:4800:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2400:4880::,2400:4880:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2400:4900::,2400:4900:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:4980::,2400:4980:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2400:4a00::,2400:4a00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:4a80::,2400:4a80:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:4b00::,2400:4b00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:4b80::,2400:4b80:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:4c00::,2400:4c00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:4c80::,2400:4c80:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:4d00::,2400:4d00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:4d80::,2400:4d80:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:4e00::,2400:4e00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:4e80::,2400:4e80:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2400:4f00::,2400:4f00:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2400:4f80::,2400:4f80:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2400:5000::,2400:5000:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:5080::,2400:5080:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:5100::,2400:5100:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:5180::,2400:5180:ffff:ffff:ffff:ffff:ffff:ffff,AF
+2400:5200::,2400:5200:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:5280::,2400:5280:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:5300::,2400:5300:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:5380::,2400:5380:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2400:5400::,2400:5400:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:5480::,2400:5480:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:5500::,2400:5500:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2400:5580::,2400:5580:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:5600::,2400:5600:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:5680::,2400:5680:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2400:5700::,2400:5700:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:5780::,2400:5780:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2400:5800::,2400:5800:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2400:5880::,2400:5880:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2400:5900::,2400:5900:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2400:5980::,2400:5980:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:5a00::,2400:5a00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:5a80::,2400:5a80:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2400:5b00::,2400:5b00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2400:5b80::,2400:5b80:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:5c00::,2400:5c00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:5c80::,2400:5c80:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:5d00::,2400:5d00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:5d80::,2400:5d80:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:5e00::,2400:5e00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:5e80::,2400:5e80:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:5f00::,2400:5f00:ffff:ffff:ffff:ffff:ffff:ffff,PF
+2400:5f80::,2400:5f80:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:6000::,2400:6000:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:6080::,2400:6080:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2400:6100::,2400:6100:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:6180::,2400:6180:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:6200::,2400:6200:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:6280::,2400:6280:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2400:6300::,2400:6300:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:6380::,2400:6380:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:6400::,2400:6400:ffff:ffff:ffff:ffff:ffff:ffff,TO
+2400:6480::,2400:6480:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:6500::,2400:6500:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:6580::,2400:6580:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:6600::,2400:6600:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:6680::,2400:6680:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:6700::,2400:6700:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:6780::,2400:6780:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:6800::,2400:6800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:6880::,2400:6880:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:6900::,2400:6900:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2400:6980::,2400:6980:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:6a00::,2400:6a00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:6a80::,2400:6a80:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2400:6b00::,2400:6b00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:6b80::,2400:6b80:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:6c00::,2400:6c00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:6c80::,2400:6c80:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:6d00::,2400:6d00:ffff:ffff:ffff:ffff:ffff:ffff,FJ
+2400:6d80::,2400:6d80:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:6e00::,2400:6e00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:6e80::,2400:6e80:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2400:6f00::,2400:6f00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:6f80::,2400:6f80:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:7000::,2400:7000:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2400:7080::,2400:7080:ffff:ffff:ffff:ffff:ffff:ffff,NP
+2400:7100::,2400:7100:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:7180::,2400:7180:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:7200::,2400:7200:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:7300::,2400:7300:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:7380::,2400:7380:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2400:7400::,2400:7400:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2400:7480::,2400:7480:ffff:ffff:ffff:ffff:ffff:ffff,MN
+2400:7500::,2400:7500:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:7580::,2400:7580:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:7600::,2400:7600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:7680::,2400:7680:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:7700::,2400:7700:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2400:7780::,2400:7780:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:7800::,2400:7800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:7880::,2400:7880:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2400:7900::,2400:7900:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:7980::,2400:7980:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:7a00::,2400:7a00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:7a80::,2400:7a80:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:7b00::,2400:7b00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:7b80::,2400:7b83:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2400:7c00::,2400:7c00:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2400:7c80::,2400:7c80:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:7d00::,2400:7d00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:7d80::,2400:7d80:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:7e00::,2400:7e00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:7e80::,2400:7e80:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:7f00::,2400:7f00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:7f80::,2400:7f80:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:8000::,2400:8000:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:8080::,2400:8080:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:8100::,2400:8100:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:8180::,2400:8180:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:8200::,2400:8200:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:8280::,2400:8280:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:8300::,2400:8300:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:8380::,2400:8380:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:8400::,2400:8400:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:8480::,2400:8480:ffff:ffff:ffff:ffff:ffff:ffff,MM
+2400:8500::,2400:8500:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:8580::,2400:8580:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:8600::,2400:8600:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:8680::,2400:8680:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:8700::,2400:8700:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:8780::,2400:8780:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:8800::,2400:8800:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:8880::,2400:8880:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:8900::,2400:8900:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:8980::,2400:8980:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:8a00::,2400:8a00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:8a80::,2400:8a80:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2400:8b00::,2400:8b00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:8b80::,2400:8b80:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:8c00::,2400:8c00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2400:8c80::,2400:8c80:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:8d00::,2400:8d00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:8d80::,2400:8d80:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2400:8e00::,2400:8e00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:8e80::,2400:8e80:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:8f00::,2400:8f00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:8f80::,2400:8f80:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:9000::,2400:9000:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:9080::,2400:9080:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:9100::,2400:9100:ffff:ffff:ffff:ffff:ffff:ffff,VN
+2400:9180::,2400:9180:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:9200::,2400:9200:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:9280::,2400:9280:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:9300::,2400:9300:ffff:ffff:ffff:ffff:ffff:ffff,PG
+2400:9380::,2400:9381:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:9400::,2400:9400:ffff:ffff:ffff:ffff:ffff:ffff,BN
+2400:9480::,2400:9480:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:9500::,2400:9500:ffff:ffff:ffff:ffff:ffff:ffff,NP
+2400:9580::,2400:9580:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:9600::,2400:9600:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:9680::,2400:9680:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:9700::,2400:9700:ffff:ffff:ffff:ffff:ffff:ffff,NP
+2400:9780::,2400:9780:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:9800::,2400:9800:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:9880::,2400:9880:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:9900::,2400:9900:ffff:ffff:ffff:ffff:ffff:ffff,NP
+2400:9980::,2400:9980:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:9a00::,2400:9a00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:9a80::,2400:9a80:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:9b00::,2400:9b00:ffff:ffff:ffff:ffff:ffff:ffff,NP
+2400:9b80::,2400:9b80:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:9c00::,2400:9c00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:9c80::,2400:9c80:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:9d00::,2400:9d00:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2400:9d80::,2400:9d80:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:9e00::,2400:9e00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:9e80::,2400:9e80:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2400:9f80::,2400:9f80:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2400:a000::,2400:a000:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:a080::,2400:a080:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:a100::,2400:a100:ffff:ffff:ffff:ffff:ffff:ffff,NP
+2400:a180::,2400:a180:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:a280::,2400:a280:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:a300::,2400:a300:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:a380::,2400:a380:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:a400::,2400:a400:ffff:ffff:ffff:ffff:ffff:ffff,NP
+2400:a480::,2400:a480:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:a500::,2400:a500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:a580::,2400:a580:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2400:a600::,2400:a600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:a680::,2400:a680:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:a700::,2400:a700:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:a780::,2400:a780:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:a800::,2400:a800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:a880::,2400:a880:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:a900::,2400:a900:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:a980::,2400:a980:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:aa00::,2400:aa00:ffff:ffff:ffff:ffff:ffff:ffff,LA
+2400:aa80::,2400:aa80:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2400:ab00::,2400:ab00:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2400:ab80::,2400:ab80:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2400:ac00::,2400:ac00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:ac80::,2400:ac80:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:ad00::,2400:ad00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:ad80::,2400:ad80:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2400:ae00::,2400:ae00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:ae80::,2400:ae80:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:af80::,2400:af80:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:b000::,2400:b000:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2400:b080::,2400:b080:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:b100::,2400:b100:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:b180::,2400:b180:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:b200::,2400:b200:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:b280::,2400:b280:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:b300::,2400:b300:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:b380::,2400:b380:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2400:b400::,2400:b400:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2400:b480::,2400:b480:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2400:b500::,2400:b500:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:b580::,2400:b580:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:b600::,2400:b600:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:b680::,2400:b680:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:b700::,2400:b700:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:b780::,2400:b780:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:b800::,2400:b800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:b880::,2400:b880:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:b900::,2400:b900:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2400:b980::,2400:b980:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:ba00::,2400:ba00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:ba80::,2400:ba80:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:bb00::,2400:bb00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:bb80::,2400:bb80:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:bc00::,2400:bc00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:bc80::,2400:bc80:ffff:ffff:ffff:ffff:ffff:ffff,VN
+2400:bd00::,2400:bd00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2400:bd80::,2400:bd80:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:be00::,2400:be00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:be80::,2400:be80:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:bf00::,2400:bf00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:bf80::,2400:bf80:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:c000::,2400:c000:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2400:c080::,2400:c080:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:c100::,2400:c100:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:c180::,2400:c180:ffff:ffff:ffff:ffff:ffff:ffff,LA
+2400:c200::,2400:c200:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:c300::,2400:c300:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:c380::,2400:c380:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:c400::,2400:c400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:c480::,2400:c480:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:c500::,2400:c500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:c580::,2400:c580:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2400:c600::,2400:c600:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2400:c680::,2400:c680:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:c700::,2400:c700:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:c780::,2400:c780:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2400:c800::,2400:c807:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:c880::,2400:c880:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:c900::,2400:c900:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:c980::,2400:c980:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:ca00::,2400:ca00:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2400:ca80::,2400:ca80:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:cb00::,2400:cb00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:cb80::,2400:cb80:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:cc00::,2400:cc00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:cc80::,2400:cc80:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:cd00::,2400:cd00:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2400:cd80::,2400:cd80:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:ce00::,2400:ce00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:ce80::,2400:ce80:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2400:cf00::,2400:cf00:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2400:cf80::,2400:cf80:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:d000::,2400:d000:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2400:d080::,2400:d080:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:d100::,2400:d100:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:d180::,2400:d180:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:d200::,2400:d200:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:d280::,2400:d280:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:d300::,2400:d300:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:d380::,2400:d380:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:d400::,2400:d400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:d480::,2400:d480:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:d500::,2400:d500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:d580::,2400:d580:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2400:d600::,2400:d600:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:d680::,2400:d680:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:d700::,2400:d700:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:d780::,2400:d780:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:d800::,2400:d803:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:d880::,2400:d880:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:d900::,2400:d900:ffff:ffff:ffff:ffff:ffff:ffff,LK
+2400:d980::,2400:d980:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2400:da00::,2400:da00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:da80::,2400:da80:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:db00::,2400:db00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:db80::,2400:db80:ffff:ffff:ffff:ffff:ffff:ffff,MN
+2400:dc00::,2400:dc00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:dc80::,2400:dc80:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2400:dd00::,2400:dd0f:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:dd80::,2400:dd80:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2400:de00::,2400:de00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:de80::,2400:de80:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:df00::,2400:df00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:df80::,2400:df80:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2400:e000::,2400:e000:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:e080::,2400:e080:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:e100::,2400:e100:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:e180::,2400:e180:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2400:e200::,2400:e200:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:e280::,2400:e280:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:e300::,2400:e300:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:e380::,2400:e380:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:e400::,2400:e400:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:e480::,2400:e480:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2400:e500::,2400:e500:ffff:ffff:ffff:ffff:ffff:ffff,AF
+2400:e580::,2400:e580:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:e680::,2400:e680:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:e780::,2400:e780:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2400:e880::,2400:e880:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:e900::,2400:e900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:e980::,2400:e980:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:ea00::,2400:ea00:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2400:ea80::,2400:ea80:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:eb00::,2400:eb00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:eb80::,2400:eb80:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2400:ec00::,2400:ec00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:ec80::,2400:ec80:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:ed00::,2400:ed00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:ed80::,2400:ed80:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:ee00::,2400:ee00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:ee80::,2400:ee80:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2400:ef00::,2400:ef00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:ef80::,2400:ef80:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:f000::,2400:f000:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:f080::,2400:f080:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:f100::,2400:f100:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:f180::,2400:f180:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:f200::,2400:f200:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2400:f280::,2400:f280:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:f300::,2400:f300:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:f380::,2400:f380:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:f400::,2400:f400:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:f480::,2400:f480:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:f580::,2400:f580:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:f600::,2400:f600:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2400:f680::,2400:f680:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:f700::,2400:f700:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:f780::,2400:f780:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:f800::,2400:f800:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:f880::,2400:f880:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:f900::,2400:f900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:f980::,2400:f980:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:fa00::,2400:fa00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:fa80::,2400:fa80:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:fb00::,2400:fb00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:fb80::,2400:fb80:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:fc00::,2400:fc00:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2400:fc80::,2400:fc80:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2400:fd00::,2400:fd00:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2400:fd80::,2400:fd80:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2400:fe00::,2400:fe00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:fe80::,2400:fe80:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:ff00::,2400:ff00:ffff:ffff:ffff:ffff:ffff:ffff,LK
+2400:ff80::,2400:ff80:ffff:ffff:ffff:ffff:ffff:ffff,AF
+2401::,2401:1:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2401:80::,2401:80:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:100::,2401:100:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:180::,2401:180:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2401:200::,2401:200:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2401:280::,2401:280:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2401:300::,2401:300:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2401:380::,2401:380:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:400::,2401:400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:480::,2401:480:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2401:500::,2401:500:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2401:580::,2401:580:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2401:600::,2401:600:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:680::,2401:680:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:700::,2401:700:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:780::,2401:780:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:800::,2401:800:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:880::,2401:880:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2401:900::,2401:900:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:980::,2401:980:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:a00::,2401:a00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:a80::,2401:a80:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:b00::,2401:b00:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2401:c00::,2401:c00:ffff:ffff:ffff:ffff:ffff:ffff,NC
+2401:d00::,2401:d00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2401:e00::,2401:e00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:f00::,2401:f00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2401:1000::,2401:1000:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:1100::,2401:1100:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2401:1200::,2401:1200:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:1300::,2401:1300:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2401:1400::,2401:1400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:1500::,2401:1500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:1600::,2401:1600:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2401:1700::,2401:1700:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2401:1800::,2401:1801:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2401:1900::,2401:1900:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2401:1a00::,2401:1a00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:1b00::,2401:1b00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2401:1c00::,2401:1c00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:1d00::,2401:1d00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2401:1e00::,2401:1e00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:1f00::,2401:1f01:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:2000::,2401:2000:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:2001::,2401:2001:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:2100::,2401:2100:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:2200::,2401:2200:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2401:2300::,2401:2300:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2401:2400::,2401:2400:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2401:2500::,2401:2500:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:2600::,2401:2600:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:2700::,2401:2700:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2401:2800::,2401:2800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:2900::,2401:2900:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2401:2a00::,2401:2a00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:2b00::,2401:2b00:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2401:2c00::,2401:2c00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2401:2d00::,2401:2d00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:2e00::,2401:2e00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:2f00::,2401:2f00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2401:3000::,2401:3000:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2401:3100::,2401:3100:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:3200::,2401:3200:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:3300::,2401:3300:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2401:3400::,2401:3400:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2401:3500::,2401:3500:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2401:3600::,2401:3600:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:3800::,2401:3800:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:3900::,2401:3900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:3a00::,2401:3a00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:3b00::,2401:3b00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:3c00::,2401:3c00:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2401:3d00::,2401:3d0f:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2401:3e00::,2401:3e00:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2401:3f00::,2401:3f00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2401:4000::,2401:4000:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2401:4100::,2401:4100:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2401:4200::,2401:4200:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2401:4300::,2401:4300:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:4400::,2401:4400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:4500::,2401:4500:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:4700::,2401:4700:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:4800::,2401:4800:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:4900::,2401:4900:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:4a00::,2401:4a00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2401:4b00::,2401:4b00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:4c00::,2401:4c00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2401:4d00::,2401:4d00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:4e00::,2401:4e00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2401:4f00::,2401:4f00:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2401:5000::,2401:5000:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2401:5100::,2401:5100:ffff:ffff:ffff:ffff:ffff:ffff,FJ
+2401:5200::,2401:5200:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2401:5300::,2401:5300:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:5400::,2401:5400:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2401:5500::,2401:5500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:5700::,2401:5700:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2401:5800::,2401:5800:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2401:5900::,2401:5900:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2401:5a00::,2401:5a00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2401:5b00::,2401:5b00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:5c00::,2401:5c00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:5d00::,2401:5d00:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2401:5e00::,2401:5e00:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2401:5f00::,2401:5f00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:6000::,2401:6fff:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:7000::,2401:7000:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2401:7100::,2401:7100:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:7200::,2401:7200:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:7300::,2401:7300:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:7400::,2401:7401:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2401:7500::,2401:7500:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:7600::,2401:7600:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2401:7700::,2401:7700:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:7800::,2401:7800:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2401:7900::,2401:7900:ffff:ffff:ffff:ffff:ffff:ffff,LK
+2401:7a00::,2401:7a00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:7b00::,2401:7b00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:7c00::,2401:7c00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2401:7d00::,2401:7d00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2401:7e00::,2401:7e00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:7f00::,2401:7f00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:8000::,2401:803f:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2401:8100::,2401:8100:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:8200::,2401:8200:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:8300::,2401:8300:ffff:ffff:ffff:ffff:ffff:ffff,MV
+2401:8400::,2401:8400:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2401:8500::,2401:8500:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2401:8600::,2401:8600:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:8700::,2401:8700:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:8800::,2401:8800:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:8900::,2401:8900:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:8a00::,2401:8a00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2401:8b00::,2401:8b00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:8c00::,2401:8c01:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:8d00::,2401:8d00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:8e00::,2401:8e00:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2401:8f00::,2401:8f00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2401:9100::,2401:9100:ffff:ffff:ffff:ffff:ffff:ffff,MO
+2401:9200::,2401:9200:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2401:9300::,2401:9300:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:9400::,2401:9400:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2401:9500::,2401:9500:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2401:9600::,2401:9600:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:9700::,2401:9700:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2401:9800::,2401:9800:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2401:9900::,2401:9900:ffff:ffff:ffff:ffff:ffff:ffff,LK
+2401:9a00::,2401:9a00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:9b00::,2401:9b00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2401:9c00::,2401:9c00:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2401:9d00::,2401:9d00:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2401:9e00::,2401:9e00:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2401:9f00::,2401:9f00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2401:a000::,2401:a000:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2401:a100::,2401:a100:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:a300::,2401:a300:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2401:a400::,2401:a400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:a500::,2401:a500:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:a600::,2401:a600:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:a700::,2401:a700:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2401:a800::,2401:a800:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2401:a900::,2401:a900:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:aa00::,2401:aa00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:ab00::,2401:ab00:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2401:ac00::,2401:ac00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:ad00::,2401:ad00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:ae00::,2401:ae00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2401:af00::,2401:af00:ffff:ffff:ffff:ffff:ffff:ffff,NC
+2401:b000::,2401:b000:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2401:b100::,2401:b100:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:b200::,2401:b200:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:b300::,2401:b300:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:b400::,2401:b400:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:b500::,2401:b500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:b600::,2401:b600:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:b700::,2401:b700:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:b800::,2401:b800:ffff:ffff:ffff:ffff:ffff:ffff,VN
+2401:b900::,2401:b900:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2401:ba00::,2401:ba00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:bb00::,2401:bb00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:bc00::,2401:bc00:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2401:bd00::,2401:bd00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:be00::,2401:be00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:bf00::,2401:bf00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:c000::,2401:c000:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2401:c100::,2401:c100:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2401:c200::,2401:c200:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:c300::,2401:c300:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:c400::,2401:c400:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2401:c500::,2401:c500:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2401:c600::,2401:c600:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:c700::,2401:c700:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2401:c800::,2401:c800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:c900::,2401:c901:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2401:ca00::,2401:ca00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:cb00::,2401:cb00:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2401:cc00::,2401:cc00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:cd00::,2401:cd00:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2401:ce00::,2401:ce00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:cf00::,2401:cf00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:d000::,2401:d000:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:d100::,2401:d100:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2401:d200::,2401:d200:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2401:d300::,2401:d300:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2401:d400::,2401:d400:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2401:d500::,2401:d500:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:d600::,2401:d600:ffff:ffff:ffff:ffff:ffff:ffff,MN
+2401:d700::,2401:d700:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:d800::,2401:d800:ffff:ffff:ffff:ffff:ffff:ffff,VN
+2401:d900::,2401:d900:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:da00::,2401:da00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:db00::,2401:db00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2401:dc00::,2401:dc00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:dd00::,2401:dd00:ffff:ffff:ffff:ffff:ffff:ffff,LK
+2401:de00::,2401:de00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:df00::,2401:df01:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:e000::,2401:e000:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2401:e100::,2401:e100:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:e200::,2401:e200:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2401:e300::,2401:e300:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:e400::,2401:e400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:e500::,2401:e500:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:e600::,2401:e600:ffff:ffff:ffff:ffff:ffff:ffff,FJ
+2401:e700::,2401:e700:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:e800::,2401:e800:ffff:ffff:ffff:ffff:ffff:ffff,VN
+2401:e900::,2401:e900:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2401:ea00::,2401:ea00:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2401:eb00::,2401:eb00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:ec00::,2401:ec00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:ed00::,2401:ed00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:ee00::,2401:ee00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2401:ef00::,2401:ef00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2401:f000::,2401:f000:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2401:f100::,2401:f100:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:f200::,2401:f200:ffff:ffff:ffff:ffff:ffff:ffff,MM
+2401:f300::,2401:f300:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:f400::,2401:f400:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2401:f500::,2401:f500:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2401:f600::,2401:f600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:f700::,2401:f700:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:f800::,2401:f800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:f900::,2401:f900:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2401:fa00::,2401:fa00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:fb00::,2401:fb00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:fc00::,2401:fc00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:fd00::,2401:fd00:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2401:fe00::,2401:fe00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:ff00::,2401:ff00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2402::,2402:3ff:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2402:400::,2402:400:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2402:500::,2402:500:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2402:600::,2402:600:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2402:700::,2402:700:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:800::,2402:800:ffff:ffff:ffff:ffff:ffff:ffff,VN
+2402:900::,2402:900:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2402:a00::,2402:a00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2402:b00::,2402:b00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2402:c00::,2402:c00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:d00::,2402:d00:ffff:ffff:ffff:ffff:ffff:ffff,AF
+2402:e00::,2402:e00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:f00::,2402:f00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:1000::,2402:1000:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:1100::,2402:1100:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2402:1200::,2402:1200:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2402:1300::,2402:1300:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:1400::,2402:1400:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:1500::,2402:1500:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2402:1600::,2402:1600:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:1700::,2402:1700:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:1800::,2402:1800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:1900::,2402:1900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:1a00::,2402:1a00:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2402:1b00::,2402:1b00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2402:1c00::,2402:1c00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2402:1d00::,2402:1d00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:1e00::,2402:1e00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:1f00::,2402:1f00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2402:2000::,2402:2000:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:2100::,2402:2100:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2402:2200::,2402:2200:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2402:2300::,2402:2300:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2402:2400::,2402:2400:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2402:2500::,2402:2500:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2402:2600::,2402:2600:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2402:2700::,2402:2700:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2402:2800::,2402:2800:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2402:2900::,2402:2900:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2402:2a00::,2402:2a00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:2b00::,2402:2b00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:2c00::,2402:2c00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2402:2d00::,2402:2d00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:2f00::,2402:2f00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:3000::,2402:3000:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:3100::,2402:3100:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2402:3200::,2402:3200:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:3300::,2402:3300:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2402:3400::,2402:3400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:3500::,2402:3500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:3600::,2402:3600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:3700::,2402:3700:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2402:3800::,2402:3800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:3900::,2402:3900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:3a00::,2402:3a00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:3b00::,2402:3b00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:3c00::,2402:3c00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:3d00::,2402:3d00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:3e00::,2402:3e00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:3f00::,2402:3f00:ffff:ffff:ffff:ffff:ffff:ffff,MN
+2402:4000::,2402:4000:ffff:ffff:ffff:ffff:ffff:ffff,LK
+2402:4100::,2402:4100:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2402:4200::,2402:4200:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:4300::,2402:4300:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2402:4400::,2402:4400:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2402:4500::,2402:4500:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:4600::,2402:4600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:4700::,2402:4700:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:4800::,2402:4800:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2402:4900::,2402:4900:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2402:4a00::,2402:4a00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:4b00::,2402:4b00:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2402:4c00::,2402:4c01:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2402:4d00::,2402:4d00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2402:4e00::,2402:4e00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:4f00::,2402:4f00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2402:5100::,2402:5100:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2402:5200::,2402:5200:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:5300::,2402:5300:ffff:ffff:ffff:ffff:ffff:ffff,VN
+2402:5400::,2402:5400:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2402:5500::,2402:5500:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2402:5600::,2402:5600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:5700::,2402:5700:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2402:5800::,2402:5800:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2402:5900::,2402:5900:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2402:5a00::,2402:5a00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:5b00::,2402:5b00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2402:5c00::,2402:5c00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:5d00::,2402:5d00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:5e00::,2402:5e00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:5f00::,2402:5f00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2402:6000::,2402:6000:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2402:6100::,2402:6100:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2402:6200::,2402:6200:ffff:ffff:ffff:ffff:ffff:ffff,GU
+2402:6300::,2402:6300:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:6400::,2402:6400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:6500::,2402:6500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:6600::,2402:6600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:6700::,2402:6700:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:6800::,2402:6800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:6900::,2402:6900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:6a00::,2402:6a00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:6b00::,2402:6bff:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2402:6c00::,2402:6c00:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2402:6d00::,2402:6d00:ffff:ffff:ffff:ffff:ffff:ffff,PF
+2402:6e00::,2402:6e00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:6f00::,2402:6f00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2402:7000::,2402:7000:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2402:7100::,2402:7100:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2402:7200::,2402:7200:ffff:ffff:ffff:ffff:ffff:ffff,TK
+2402:7300::,2402:7300:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2402:7400::,2402:7400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:7500::,2402:7500:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2402:7600::,2402:7600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:7700::,2402:7700:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:7800::,2402:7800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:7900::,2402:7900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:7a00::,2402:7a00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:7b00::,2402:7b00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2402:7c00::,2402:7c00:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2402:7d00::,2402:7d00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:7e00::,2402:7e00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2402:7f00::,2402:7f00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2402:8000::,2402:8000:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:8100::,2402:8100:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2402:8200::,2402:8200:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2402:8300::,2402:8300:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:8400::,2402:8400:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2402:8500::,2402:8500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:8600::,2402:8600:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2402:8700::,2402:8700:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:8800::,2402:8800:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:8900::,2402:8900:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:8a00::,2402:8a00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2402:8b00::,2402:8b00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2402:8c00::,2402:8c00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2402:8d00::,2402:8d03:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2402:8e00::,2402:8e00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2402:8f00::,2402:8f00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2402:9100::,2402:9100:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:9200::,2402:9200:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:9300::,2402:9300:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:9400::,2402:9400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:9500::,2402:9500:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2402:9800::,2402:9800:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2402:9900::,2402:9900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:9a00::,2402:9a00:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2402:9b00::,2402:9b00:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2402:9c00::,2402:9c00:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2402:9d00::,2402:9d00:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2402:9e00::,2402:9e00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2402:9f00::,2402:9f00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:a000::,2402:a000:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2402:a100::,2402:a100:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2402:a200::,2402:a200:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:a300::,2402:a300:ffff:ffff:ffff:ffff:ffff:ffff,NP
+2402:a400::,2402:a400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:a500::,2402:a500:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2402:a600::,2402:a600:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2402:a700::,2402:a700:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:a800::,2402:a800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:a900::,2402:a900:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2402:ab00::,2402:ab00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2402:ac00::,2402:ac00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2402:ad00::,2402:ad00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:ae00::,2402:ae00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:af00::,2402:af00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:b100::,2402:b100:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:b200::,2402:b200:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:b300::,2402:b300:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:b400::,2402:b400:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2402:b500::,2402:b500:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2402:b600::,2402:b600:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2402:b700::,2402:b700:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:b800::,2402:b801:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:b900::,2402:b900:ffff:ffff:ffff:ffff:ffff:ffff,MN
+2402:ba00::,2402:ba00:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2402:bb00::,2402:bb00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:bc00::,2402:bc07:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:bd00::,2402:bd00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:be00::,2402:be00:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2402:bf00::,2402:bf00:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2402:c000::,2402:c000:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2402:c100::,2402:c100:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2402:c200::,2402:c200:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:c300::,2402:c300:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2402:c400::,2402:c400:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:c500::,2402:c500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:c600::,2402:c600:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:c700::,2402:c700:ffff:ffff:ffff:ffff:ffff:ffff,VN
+2402:c800::,2402:c800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:c900::,2402:c900:ffff:ffff:ffff:ffff:ffff:ffff,MN
+2402:ca00::,2402:ca00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:cb00::,2402:cb00:ffff:ffff:ffff:ffff:ffff:ffff,LK
+2402:cc00::,2402:cc00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2402:cd00::,2402:cd00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2402:ce00::,2402:ce01:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2402:cf00::,2402:cf00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:d000::,2402:d000:ffff:ffff:ffff:ffff:ffff:ffff,LK
+2402:d100::,2402:d100:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:d200::,2402:d200:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:d300::,2402:d300:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:d400::,2402:d400:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2402:d500::,2402:d500:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2402:d600::,2402:d600:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:d700::,2402:d700:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:d800::,2402:d800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:d900::,2402:d900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:da00::,2402:da00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2402:db00::,2402:db00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2402:dc00::,2402:dc00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:de00::,2402:de00:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2402:df00::,2402:df00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2402:e000::,2402:e000:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2402:e100::,2402:e100:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2402:e200::,2402:e200:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:e300::,2402:e300:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2402:e400::,2402:e400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:e500::,2402:e500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:e600::,2402:e600:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2402:e800::,2402:e800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:e900::,2402:e900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:ea00::,2402:ea00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2402:eb00::,2402:eb00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:ec00::,2402:ec00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:ed00::,2402:ed00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:ee00::,2402:ee00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:ef00::,2402:ef3f:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2402:f000::,2402:f000:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:f100::,2402:f100:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2402:f200::,2402:f200:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2402:f300::,2402:f300:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2402:f400::,2402:f400:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2402:f500::,2402:f500:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2402:f600::,2402:f600:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2402:f700::,2402:f700:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:f800::,2402:f800:ffff:ffff:ffff:ffff:ffff:ffff,VN
+2402:f900::,2402:f900:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2402:fa00::,2402:fa00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:fb00::,2402:fb00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2402:fc00::,2402:fc00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2402:fd00::,2402:fd00:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2402:fe00::,2402:fe00:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2402:ff00::,2402:ff00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2403::,2403:1:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2403:100::,2403:100:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2403:200::,2403:200:ffff:ffff:ffff:ffff:ffff:ffff,NC
+2403:300::,2403:300:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2403:400::,2403:400:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:500::,2403:500:ffff:ffff:ffff:ffff:ffff:ffff,LA
+2403:600::,2403:600:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:700::,2403:700:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:800::,2403:801:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:900::,2403:900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:a00::,2403:a00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2403:b00::,2403:b00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2403:c00::,2403:c00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2403:d00::,2403:d00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:e00::,2403:e00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2403:f00::,2403:f00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:1000::,2403:1000:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2403:1100::,2403:1100:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:1300::,2403:1300:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2403:1400::,2403:1400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:1500::,2403:1500:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2403:1600::,2403:1600:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2403:1700::,2403:1700:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:1800::,2403:1800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:1900::,2403:1900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:1a00::,2403:1a00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2403:1b00::,2403:1b00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:1c00::,2403:1c00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2403:1d00::,2403:1d00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2403:1e00::,2403:1e00:ffff:ffff:ffff:ffff:ffff:ffff,AS
+2403:1f00::,2403:1f00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:2000::,2403:2000:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:2100::,2403:2100:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2403:2200::,2403:2200:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2403:2300::,2403:2300:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2403:2400::,2403:2400:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2403:2500::,2403:2500:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2403:2600::,2403:2600:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2403:2700::,2403:2700:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2403:2800::,2403:2801:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2403:2900::,2403:2900:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2403:2a00::,2403:2a00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:2c00::,2403:2c00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2403:2d00::,2403:2d00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:2e00::,2403:2e00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2403:2f00::,2403:2f00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2403:3100::,2403:3100:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2403:3200::,2403:3200:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:3300::,2403:3300:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2403:3400::,2403:3400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:3500::,2403:3500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:3600::,2403:3600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:3700::,2403:3700:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2403:3800::,2403:3800:ffff:ffff:ffff:ffff:ffff:ffff,NP
+2403:3900::,2403:3900:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2403:3a00::,2403:3a00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:3b00::,2403:3b00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:3c00::,2403:3c00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:3d00::,2403:3d00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2403:3e00::,2403:3e00:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2403:3f00::,2403:3f00:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2403:4000::,2403:4000:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2403:4100::,2403:4100:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2403:4200::,2403:4200:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:4300::,2403:4300:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:4400::,2403:4400:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:4500::,2403:4500:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2403:4600::,2403:4600:ffff:ffff:ffff:ffff:ffff:ffff,FJ
+2403:4700::,2403:4700:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2403:4800::,2403:4800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:4900::,2403:4900:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2403:4a00::,2403:4a00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2403:4b00::,2403:4b00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2403:4c00::,2403:4c00:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2403:4d00::,2403:4d00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2403:4e00::,2403:4e00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2403:4f00::,2403:4f00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2403:5000::,2403:5000:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2403:5100::,2403:5100:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:5200::,2403:5200:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2403:5300::,2403:5300:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2403:5400::,2403:5400:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2403:5500::,2403:5500:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2403:5600::,2403:5600:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2403:5700::,2403:5700:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:5800::,2403:5800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:5900::,2403:5900:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2403:5a00::,2403:5a00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:5b00::,2403:5b00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2403:5c00::,2403:5c00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:5e00::,2403:5e00:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2403:5f00::,2403:5f00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:6000::,2403:6000:ffff:ffff:ffff:ffff:ffff:ffff,VN
+2403:6100::,2403:6100:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2403:6200::,2403:6200:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2403:6300::,2403:6300:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2403:6400::,2403:6400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:6500::,2403:6500:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2403:6600::,2403:6600:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2403:6700::,2403:6700:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:6800::,2403:6800:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2403:6900::,2403:6900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:6a00::,2403:6a00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:6b00::,2403:6b00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2403:6c00::,2403:6c00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:6d00::,2403:6d00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2403:6e00::,2403:6e00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:7000::,2403:7000:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2403:7100::,2403:7100:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2403:7200::,2403:7200:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2403:7300::,2403:7300:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:7400::,2403:7400:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:7500::,2403:7500:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2403:7600::,2403:7600:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2403:7700::,2403:7700:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:7800::,2403:7800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:7900::,2403:7900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:7a00::,2403:7a00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:7b00::,2403:7b00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:7c00::,2403:7c00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:7d00::,2403:7d00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:7e00::,2403:7e00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:7f00::,2403:7f00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2403:8000::,2403:8000:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2403:8100::,2403:8100:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2403:8200::,2403:8200:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:8300::,2403:8300:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2403:8400::,2403:8400:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2403:8500::,2403:8500:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2403:8600::,2403:8600:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2403:8700::,2403:8700:ffff:ffff:ffff:ffff:ffff:ffff,BT
+2403:8800::,2403:8800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:8900::,2403:8900:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:8a00::,2403:8a00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:8b00::,2403:8b00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:8c00::,2403:8c00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:8d00::,2403:8d00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:8e00::,2403:8e00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:8f00::,2403:8f00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:9000::,2403:9000:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:9100::,2403:9100:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2403:9200::,2403:9200:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:9300::,2403:9300:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2403:9400::,2403:9400:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:9500::,2403:9500:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2403:9600::,2403:9600:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:9700::,2403:9700:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2403:9800::,2403:9800:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2403:9900::,2403:9a00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:9b00::,2403:9b00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:9c00::,2403:9c00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:9d00::,2403:9d00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:9e00::,2403:9e00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:9f00::,2403:9f00:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2403:a000::,2403:a000:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2403:a100::,2403:a100:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:a200::,2403:a200:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:a300::,2403:a300:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:a400::,2403:a400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:a500::,2403:a500:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2403:a600::,2403:a600:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2403:a700::,2403:a700:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:a800::,2403:a800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:a900::,2403:a900:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2403:aa00::,2403:aa00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2403:ab00::,2403:ab00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2403:ac00::,2403:ac00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:ad00::,2403:ad00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2403:ae00::,2403:ae00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2403:af00::,2403:af00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2403:b000::,2403:b000:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:b100::,2403:b100:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2403:b200::,2403:b200:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2403:b300::,2403:b300:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:b400::,2403:b400:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:b500::,2403:b500:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2403:b600::,2403:b600:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2403:b700::,2403:b700:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2403:b800::,2403:b800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:b900::,2403:b900:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2403:ba00::,2403:ba00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2403:bb00::,2403:bb00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2403:bc00::,2403:bc00:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2403:bd00::,2403:bd00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2403:be00::,2403:be00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2403:bf00::,2403:bf00:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2403:c000::,2403:c000:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2403:c100::,2403:c100:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:c200::,2403:c200:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2403:c300::,2403:c300:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2403:c400::,2403:c400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:c500::,2403:c500:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2403:c600::,2403:c600:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2403:c800::,2403:c800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:c900::,2403:c900:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2403:ca00::,2403:ca00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:cb00::,2403:cb00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2403:cc00::,2403:cc00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2403:cd00::,2403:cd00:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2403:ce00::,2403:ce00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:cf00::,2403:cf00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:d000::,2403:d000:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:d100::,2403:d100:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:d200::,2403:d200:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2403:d300::,2403:d300:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2403:d400::,2403:d400:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:d500::,2403:d500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:d600::,2403:d600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:d700::,2403:d700:ffff:ffff:ffff:ffff:ffff:ffff,MN
+2403:d800::,2403:d800:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2403:d900::,2403:d900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:da00::,2403:da00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2403:db00::,2403:db00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:dc00::,2403:dc00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:dd00::,2403:dd00:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2403:de00::,2403:de00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2403:df00::,2403:df00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2403:e000::,2403:e000:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:e100::,2403:e100:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2403:e200::,2403:e200:ffff:ffff:ffff:ffff:ffff:ffff,VN
+2403:e300::,2403:e300:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:e400::,2403:e400:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2403:e500::,2403:e500:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:e600::,2403:e600:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2403:e700::,2403:e700:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:e800::,2403:e800:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2403:e900::,2403:e900:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2403:ea00::,2403:ea00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2403:eb00::,2403:eb00:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2403:ec00::,2403:ec00:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2403:ed00::,2403:ed00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:ee00::,2403:ee00:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2403:f000::,2403:f000:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:f100::,2403:f100:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:f200::,2403:f200:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:f300::,2403:f300:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:f400::,2403:f400:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2403:f500::,2403:f500:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2403:f600::,2403:f600:ffff:ffff:ffff:ffff:ffff:ffff,NR
+2403:f700::,2403:f700:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2403:f800::,2403:f800:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:f900::,2403:f900:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:fa00::,2403:fa00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2403:fb00::,2403:fb00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:fc00::,2403:fc00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:fd00::,2403:fd00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:fe00::,2403:fe00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2403:ff00::,2403:ff00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404::,2404:3f:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2404:80::,2404:8f:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2404:a0::,2404:a0:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:a8::,2404:a8:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2404:b0::,2404:b1:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2404:b8::,2404:b8:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2404:c0::,2404:c0:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:c8::,2404:c8:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:d0::,2404:d0:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2404:d8::,2404:d8:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2404:e0::,2404:ef:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:100::,2404:100:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2404:130::,2404:130:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:138::,2404:139:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:140::,2404:140:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2404:150::,2404:150:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2404:158::,2404:158:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2404:160::,2404:160:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2404:168::,2404:168:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:170::,2404:170:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:178::,2404:178:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2404:180::,2404:18f:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2404:1a0::,2404:1a3:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2404:1a8::,2404:1a8:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:1b0::,2404:1b0:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:1b8::,2404:1b8:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:200::,2404:200:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:300::,2404:300:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2404:400::,2404:400:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:500::,2404:500:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:600::,2404:600:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:700::,2404:700:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2404:800::,2404:800:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2404:a00::,2404:a00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:b00::,2404:b00:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2404:c00::,2404:c00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2404:d00::,2404:d00:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2404:e00::,2404:e00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2404:f00::,2404:f00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2404:1000::,2404:1000:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:1100::,2404:1100:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2404:1200::,2404:1200:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2404:1300::,2404:1300:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:1400::,2404:1400:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:1500::,2404:1500:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2404:1600::,2404:1600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:1700::,2404:1700:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:1800::,2404:1800:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:1900::,2404:1900:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:1a00::,2404:1a00:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2404:1b00::,2404:1b00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:1c00::,2404:1c00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:1d00::,2404:1d00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:1e00::,2404:1e00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:1f00::,2404:1f00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2404:2000::,2404:2000:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:2100::,2404:2100:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2404:2200::,2404:2200:ffff:ffff:ffff:ffff:ffff:ffff,NC
+2404:2300::,2404:2300:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2404:2400::,2404:2400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:2500::,2404:2500:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2404:2600::,2404:2600:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2404:2700::,2404:2700:ffff:ffff:ffff:ffff:ffff:ffff,MN
+2404:2800::,2404:2800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:2900::,2404:2900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:2a00::,2404:2a00:ffff:ffff:ffff:ffff:ffff:ffff,NC
+2404:2b00::,2404:2b00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:2c00::,2404:2c00:ffff:ffff:ffff:ffff:ffff:ffff,NP
+2404:2d00::,2404:2d00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:2e00::,2404:2e00:ffff:ffff:ffff:ffff:ffff:ffff,LA
+2404:2f00::,2404:2f00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:3100::,2404:3100:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2404:3200::,2404:3200:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:3300::,2404:3300:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2404:3500::,2404:3500:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2404:3600::,2404:3601:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:3700::,2404:3700:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2404:3800::,2404:3800:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:3900::,2404:3900:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:3a00::,2404:3a00:ffff:ffff:ffff:ffff:ffff:ffff,VN
+2404:3b00::,2404:3b00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2404:3c00::,2404:3c00:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2404:3d00::,2404:3d00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:3e00::,2404:3e00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:3f00::,2404:3f00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2404:4100::,2404:4100:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2404:4200::,2404:4200:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:4300::,2404:4300:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2404:4400::,2404:440f:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:4600::,2404:4600:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2404:4700::,2404:4700:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2404:4800::,2404:4800:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2404:4900::,2404:4900:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:4a00::,2404:4a00:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2404:4c00::,2404:4c00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:4d00::,2404:4d00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2404:4e00::,2404:4e00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2404:4f00::,2404:4f00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:5000::,2404:5000:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:5100::,2404:5100:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:5200::,2404:5200:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:5300::,2404:5300:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:5400::,2404:5400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:5500::,2404:5500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:5600::,2404:5600:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:5700::,2404:5700:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:5800::,2404:5800:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2404:5900::,2404:5900:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2404:5a00::,2404:5a00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:5b00::,2404:5b00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2404:5c00::,2404:5c00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:5d00::,2404:5d00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2404:5e00::,2404:5e00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:5f00::,2404:5f00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:6000::,2404:6000:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2404:6100::,2404:6100:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2404:6200::,2404:6200:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2404:6300::,2404:6300:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2404:6400::,2404:6400:ffff:ffff:ffff:ffff:ffff:ffff,PG
+2404:6500::,2404:6500:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2404:6600::,2404:6600:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:6700::,2404:6700:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2404:6800::,2404:6800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:6900::,2404:6900:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2404:6a00::,2404:6a00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:6b00::,2404:6b00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2404:6c00::,2404:6c00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:6d00::,2404:6d00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:6e00::,2404:6e00:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2404:6f00::,2404:6f00:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2404:7000::,2404:7000:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2404:7100::,2404:7100:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2404:7200::,2404:7200:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:7300::,2404:7300:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2404:7400::,2404:7400:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2404:7500::,2404:7500:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2404:7600::,2404:7600:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2404:7700::,2404:7700:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2404:7800::,2404:7800:ffff:ffff:ffff:ffff:ffff:ffff,PW
+2404:7900::,2404:7900:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:7a00::,2404:7a00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:7b00::,2404:7b00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2404:7c00::,2404:7c00:ffff:ffff:ffff:ffff:ffff:ffff,NP
+2404:7d00::,2404:7d00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2404:7e00::,2404:7e00:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2404:7f00::,2404:7f00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:8000::,2404:8000:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:8100::,2404:8100:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2404:8200::,2404:8200:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:8300::,2404:8300:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2404:8500::,2404:8500:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2404:8600::,2404:8600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:8700::,2404:8700:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2404:8800::,2404:8800:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2404:8900::,2404:8900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:8a00::,2404:8a00:ffff:ffff:ffff:ffff:ffff:ffff,LK
+2404:8b00::,2404:8b00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2404:8c00::,2404:8c00:ffff:ffff:ffff:ffff:ffff:ffff,GU
+2404:8d00::,2404:8d00:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2404:8e00::,2404:8e01:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:8f00::,2404:8f00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:9000::,2404:9000:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:9100::,2404:9100:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2404:9200::,2404:9200:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:9400::,2404:9400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:9500::,2404:9500:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2404:9600::,2404:9601:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:9700::,2404:9700:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:9800::,2404:9800:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2404:9900::,2404:9900:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2404:9a00::,2404:9a00:ffff:ffff:ffff:ffff:ffff:ffff,GU
+2404:9b00::,2404:9b00:ffff:ffff:ffff:ffff:ffff:ffff,AF
+2404:9c00::,2404:9c00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:9d00::,2404:9d00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2404:9e00::,2404:9e00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:9f00::,2404:9f00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:a000::,2404:a000:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2404:a100::,2404:a100:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2404:a200::,2404:a200:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2404:a300::,2404:a300:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2404:a500::,2404:a500:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2404:a600::,2404:a600:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:a700::,2404:a700:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2404:a800::,2404:a800:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2404:aa00::,2404:aa00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2404:ab00::,2404:ab00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:ac00::,2404:ac00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2404:ad00::,2404:ad00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:ae00::,2404:ae00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2404:af00::,2404:af00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2404:b000::,2404:b000:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:b100::,2404:b100:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2404:b200::,2404:b200:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2404:b300::,2404:b300:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2404:b400::,2404:b400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:b500::,2404:b500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:b600::,2404:b600:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:b700::,2404:b700:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:b800::,2404:b800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:b900::,2404:b900:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2404:ba00::,2404:ba00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2404:bb00::,2404:bb00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2404:bc00::,2404:bc00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:bd00::,2404:bd00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2404:be00::,2404:be00:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2404:bf00::,2404:bf00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:c000::,2404:c000:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:c100::,2404:c100:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:c200::,2404:c200:ffff:ffff:ffff:ffff:ffff:ffff,LA
+2404:c300::,2404:c300:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2404:c400::,2404:c400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:c500::,2404:c500:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2404:c600::,2404:c600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:c700::,2404:c700:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:c800::,2404:c807:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2404:c900::,2404:c900:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2404:ca00::,2404:ca00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:cb00::,2404:cb00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:cc00::,2404:cc00:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2404:cd00::,2404:cd00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2404:ce00::,2404:ce00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:cf00::,2404:cf00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:d000::,2404:d000:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:d100::,2404:d100:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:d200::,2404:d200:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:d300::,2404:d300:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:d400::,2404:d400:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2404:d500::,2404:d500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:d600::,2404:d600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:d700::,2404:d700:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:d800::,2404:d800:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2404:d900::,2404:d900:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2404:da00::,2404:da00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:db00::,2404:db00:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2404:dc00::,2404:dc00:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2404:dd00::,2404:dd00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:de00::,2404:de00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:df00::,2404:df00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2404:e000::,2404:e000:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:e100::,2404:e101:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:e200::,2404:e200:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:e300::,2404:e300:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:e400::,2404:e400:ffff:ffff:ffff:ffff:ffff:ffff,NC
+2404:e500::,2404:e500:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:e600::,2404:e600:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2404:e700::,2404:e700:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:e800::,2404:e8ff:ffff:ffff:ffff:ffff:ffff:ffff,SH
+2404:e900::,2404:e900:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:ea00::,2404:ea00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:eb00::,2404:eb00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:ec00::,2404:ec00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:ed00::,2404:ed00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:ee00::,2404:ee00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2404:ef00::,2404:ef00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:f000::,2404:f000:ffff:ffff:ffff:ffff:ffff:ffff,LK
+2404:f100::,2404:f100:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2404:f200::,2404:f200:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:f300::,2404:f300:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:f400::,2404:f400:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2404:f500::,2404:f500:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:f600::,2404:f600:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:f700::,2404:f700:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:f800::,2404:f800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:f801::,2404:f801:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2404:f900::,2404:f900:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:fa00::,2404:fa00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:fb00::,2404:fb00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:fc00::,2404:fc00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2404:fd00::,2404:fd00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:fe00::,2404:fe00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:ff00::,2404:ff00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2405::,2405::ffff:ffff:ffff:ffff:ffff:ffff,JP
+2405:100::,2405:100:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2405:200::,2405:207:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2405:400::,2405:400:ffff:ffff:ffff:ffff:ffff:ffff,MH
+2405:500::,2405:500:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2405:600::,2405:600:ffff:ffff:ffff:ffff:ffff:ffff,MN
+2405:700::,2405:700:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2405:800::,2405:800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:900::,2405:900:ffff:ffff:ffff:ffff:ffff:ffff,LA
+2405:a00::,2405:a00:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2405:b00::,2405:b00:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2405:c00::,2405:c00:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2405:d00::,2405:d00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2405:e00::,2405:e00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2405:f00::,2405:f00:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2405:1000::,2405:1000:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:1200::,2405:1200:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2405:1300::,2405:1300:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:1400::,2405:1400:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2405:1500::,2405:1500:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2405:1600::,2405:1600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:1700::,2405:1700:ffff:ffff:ffff:ffff:ffff:ffff,BN
+2405:1800::,2405:1800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2405:1a00::,2405:1a00:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2405:1b00::,2405:1b00:ffff:ffff:ffff:ffff:ffff:ffff,NP
+2405:1c00::,2405:1c00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2405:1d00::,2405:1d00:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2405:1e00::,2405:1e00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2405:1f00::,2405:1f00:ffff:ffff:ffff:ffff:ffff:ffff,TL
+2405:2000::,2405:2001:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2405:2200::,2405:2200:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2405:2300::,2405:2300:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2405:2400::,2405:2400:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2405:2500::,2405:2500:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2405:2600::,2405:2600:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2405:2700::,2405:2700:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2405:2900::,2405:2900:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2405:2a00::,2405:2a00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2405:2b00::,2405:2b00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:2c00::,2405:2c00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:2d00::,2405:2d00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:2e00::,2405:2e00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:2f00::,2405:2f00:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2405:3000::,2405:3001:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2405:3100::,2405:3100:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2405:3200::,2405:3200:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2405:3300::,2405:3300:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2405:3400::,2405:3400:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2405:3500::,2405:3500:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2405:3600::,2405:3600:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2405:3700::,2405:3700:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2405:3800::,2405:3800:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2405:3900::,2405:3900:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2405:3a00::,2405:3a00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2405:3b00::,2405:3b00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2405:3c00::,2405:3c00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:3d00::,2405:3d00:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2405:3e00::,2405:3e00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2405:3f00::,2405:3f00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:4000::,2405:4000:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2405:4100::,2405:4100:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2405:4200::,2405:4200:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2405:4300::,2405:4300:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2405:4400::,2405:4400:ffff:ffff:ffff:ffff:ffff:ffff,LK
+2405:4500::,2405:4500:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2405:4600::,2405:4600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:4700::,2405:4700:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2405:4800::,2405:4800:ffff:ffff:ffff:ffff:ffff:ffff,VN
+2405:4900::,2405:4900:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2405:4a00::,2405:4a00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:4b00::,2405:4b00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:4c00::,2405:4c00:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2405:4d00::,2405:4d00:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2405:4e00::,2405:4e00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2405:4f00::,2405:4f00:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2405:5000::,2405:5000:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:5100::,2405:5100:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2405:5200::,2405:5200:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:5300::,2405:5300:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2405:5400::,2405:5400:ffff:ffff:ffff:ffff:ffff:ffff,LK
+2405:5500::,2405:5500:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2405:5600::,2405:5600:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2405:5700::,2405:5700:ffff:ffff:ffff:ffff:ffff:ffff,MN
+2405:5800::,2405:5800:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2405:5900::,2405:5900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:5a00::,2405:5a00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2405:5b00::,2405:5b00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2405:5c00::,2405:5c00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2405:5d00::,2405:5d00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2405:5e00::,2405:5e00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2405:5f00::,2405:5f00:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2405:6000::,2405:6000:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2405:6100::,2405:6100:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2405:6200::,2405:6200:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2405:6400::,2405:6400:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2405:6500::,2405:6500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:6600::,2405:6600:ffff:ffff:ffff:ffff:ffff:ffff,NP
+2405:6700::,2405:6700:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:6800::,2405:6800:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2405:6900::,2405:6900:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2405:6a00::,2405:6a00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:6b00::,2405:6b00:ffff:ffff:ffff:ffff:ffff:ffff,LK
+2405:6c00::,2405:6c00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2405:6d00::,2405:6d00:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2405:6e00::,2405:6e00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:6f00::,2405:6f00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2405:7000::,2405:7000:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2405:7100::,2405:7100:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:7200::,2405:7200:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2405:7300::,2405:7300:ffff:ffff:ffff:ffff:ffff:ffff,MN
+2405:7400::,2405:7400:ffff:ffff:ffff:ffff:ffff:ffff,GU
+2405:7500::,2405:7500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:7600::,2405:7600:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2405:7700::,2405:7700:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2405:7800::,2405:7800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2405:7900::,2405:7900:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2405:7a00::,2405:7a00:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2405:7b00::,2405:7b00:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2405:7c00::,2405:7c00:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2405:7d00::,2405:7d00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2405:7e00::,2405:7e00:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2405:7f00::,2405:7f00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:8000::,2405:8000:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2405:8100::,2405:8100:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2405:8200::,2405:8200:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2405:8300::,2405:8300:ffff:ffff:ffff:ffff:ffff:ffff,SB
+2405:8400::,2405:8400:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2405:8500::,2405:8500:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2405:8600::,2405:8600:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2405:8700::,2405:8700:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2405:8800::,2405:8800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:8900::,2405:8900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:8a00::,2405:8a00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2405:8b00::,2405:8b00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:8c00::,2405:8c00:ffff:ffff:ffff:ffff:ffff:ffff,WS
+2405:8d00::,2405:8d00:ffff:ffff:ffff:ffff:ffff:ffff,GU
+2405:8e00::,2405:8e00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2405:8f00::,2405:8f00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2405:9000::,2405:9000:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:9100::,2405:9100:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2405:9200::,2405:9200:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2405:9300::,2405:9300:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2405:9400::,2405:9400:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2405:9500::,2405:9500:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2405:9600::,2405:9600:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2405:9700::,2405:9700:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2405:9800::,2405:9800:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2405:9900::,2405:9900:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2405:9a00::,2405:9a00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:9b00::,2405:9b00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2405:9c00::,2405:9c00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2405:9d00::,2405:9d00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2405:9e00::,2405:9e00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2405:9f00::,2405:9f00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2405:a000::,2405:a000:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2405:a100::,2405:a100:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2405:a200::,2405:a200:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2405:a300::,2405:a300:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2405:a400::,2405:a400:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2405:a500::,2405:a500:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2405:a600::,2405:a600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:a700::,2405:a700:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2405:a900::,2405:a900:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2405:aa00::,2405:aa00:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2405:ab00::,2405:ab00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2405:ac00::,2405:ac00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2405:ad00::,2405:ad00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2405:ae00::,2405:ae00:ffff:ffff:ffff:ffff:ffff:ffff,MN
+2405:af00::,2405:af00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2405:b000::,2405:b000:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:b100::,2405:b100:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2405:b200::,2405:b200:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2405:b300::,2405:b300:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2405:b400::,2405:b400:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2405:b500::,2405:b500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:b600::,2405:b600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:b800::,2405:b800:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2405:b900::,2405:b900:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2405:ba00::,2405:ba00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2405:bb00::,2405:bb00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2405:bc00::,2405:bc00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:bd00::,2405:bd00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2405:be00::,2405:be00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2405:bf00::,2405:bf00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2405:c000::,2405:c000:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2405:c100::,2405:c100:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2405:c200::,2405:c200:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2405:c300::,2405:c300:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2405:c400::,2405:c400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:c500::,2405:c500:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2405:c600::,2405:c600:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2405:c700::,2405:c700:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2405:c800::,2405:c800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:c900::,2405:c900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:ca00::,2405:ca00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2405:cb00::,2405:cb00:ffff:ffff:ffff:ffff:ffff:ffff,VN
+2405:cc00::,2405:cc00:ffff:ffff:ffff:ffff:ffff:ffff,PF
+2405:cd00::,2405:cd00:ffff:ffff:ffff:ffff:ffff:ffff,VN
+2405:ce00::,2405:ce00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:cf00::,2405:cf00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:d000::,2405:d000:ffff:ffff:ffff:ffff:ffff:ffff,BT
+2405:d100::,2405:d100:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:d200::,2405:d200:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2405:d300::,2405:d300:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:d400::,2405:d400:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2405:d500::,2405:d500:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2405:d600::,2405:d600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:d700::,2405:d700:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2405:d800::,2405:d800:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2405:d900::,2405:d900:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2405:da00::,2405:da00:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2405:db00::,2405:db00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:dc00::,2405:dc00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:e000::,2405:e000:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2405:e100::,2405:e100:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2405:e200::,2405:e200:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2405:e300::,2405:e300:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2405:e400::,2405:e400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:e500::,2405:e500:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2405:e600::,2405:e600:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2405:e700::,2405:e700:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2405:e800::,2405:e800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2405:e900::,2405:e900:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2405:ea00::,2405:ea00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:eb00::,2405:eb00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2405:ec00::,2405:ec00:ffff:ffff:ffff:ffff:ffff:ffff,BT
+2405:ed00::,2405:ed00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2405:ee00::,2405:ee00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:ef00::,2405:ef00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2405:f000::,2405:f000:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2405:f100::,2405:f100:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2405:f200::,2405:f200:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2405:f300::,2405:f300:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2405:f400::,2405:f400:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2405:f500::,2405:f500:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2405:f600::,2405:f600:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2405:f700::,2405:f700:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2405:f800::,2405:f800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2405:f900::,2405:f900:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2405:fa00::,2405:fa00:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2405:fb00::,2405:fb00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2405:fc00::,2405:fc00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2405:fe00::,2405:fe00:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2405:ff00::,2405:ff00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2406::,2406::ffff:ffff:ffff:ffff:ffff:ffff,HK
+2406:100::,2406:100:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2406:200::,2406:200:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:300::,2406:300:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2406:400::,2406:400:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2406:500::,2406:500:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2406:600::,2406:600:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2406:700::,2406:700:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2406:800::,2406:800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2406:900::,2406:900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:a00::,2406:a00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2406:b00::,2406:b00:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2406:c00::,2406:c00:ffff:ffff:ffff:ffff:ffff:ffff,LK
+2406:d00::,2406:d00:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2406:e00::,2406:e00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2406:f00::,2406:f00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2406:1000::,2406:1000:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2406:1100::,2406:1100:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2406:1200::,2406:1200:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2406:1300::,2406:1300:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2406:1400::,2406:1400:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2406:1500::,2406:1500:ffff:ffff:ffff:ffff:ffff:ffff,TO
+2406:1600::,2406:1600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:1700::,2406:1700:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2406:1900::,2406:1900:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2406:1a00::,2406:1a00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2406:1b00::,2406:1b00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2406:1c00::,2406:1c00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:1d00::,2406:1d00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2406:1e00::,2406:1e00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2406:1f00::,2406:1f00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:2000::,2406:2000:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2406:2100::,2406:2100:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2406:2200::,2406:2200:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:2300::,2406:2300:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2406:2400::,2406:2400:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2406:2500::,2406:2500:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2406:2600::,2406:2600:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2406:2700::,2406:2700:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2406:2800::,2406:2800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2406:2900::,2406:2900:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2406:2a00::,2406:2a00:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2406:2b00::,2406:2b00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2406:2c00::,2406:2c00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2406:2d00::,2406:2d00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2406:2e00::,2406:2e00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2406:2f00::,2406:2f00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2406:3000::,2406:3003:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2406:3100::,2406:3100:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2406:3200::,2406:3200:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2406:3300::,2406:3300:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2406:3400::,2406:3400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:3500::,2406:3500:ffff:ffff:ffff:ffff:ffff:ffff,PG
+2406:3600::,2406:3600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:3700::,2406:3700:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2406:3800::,2406:3800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:3900::,2406:3900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:3a00::,2406:3a00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:3b00::,2406:3b00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:3c00::,2406:3c00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:3d00::,2406:3d00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2406:3e00::,2406:3e00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2406:3f00::,2406:3f00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2406:4000::,2406:4000:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2406:4100::,2406:4100:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:4200::,2406:4200:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:4300::,2406:4300:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2406:4400::,2406:4400:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2406:4500::,2406:4500:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2406:4600::,2406:4600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:4700::,2406:4700:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2406:4800::,2406:4800:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2406:4900::,2406:4900:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2406:4a00::,2406:4a00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:4b00::,2406:4b00:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2406:4c00::,2406:4c00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:4d00::,2406:4d00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2406:4e00::,2406:4e00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2406:4f00::,2406:4f00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2406:5000::,2406:5000:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:5100::,2406:5100:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:5200::,2406:5200:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2406:5300::,2406:5300:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2406:5400::,2406:5400:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2406:5500::,2406:5500:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2406:5600::,2406:5600:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2406:5700::,2406:5700:ffff:ffff:ffff:ffff:ffff:ffff,AF
+2406:5800::,2406:5800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:5900::,2406:5900:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2406:5a00::,2406:5a00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2406:5b00::,2406:5b00:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2406:5c00::,2406:5c00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2406:5d00::,2406:5d00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:5e00::,2406:5e00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:5f00::,2406:5f00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:6000::,2406:6000:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2406:6100::,2406:6100:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2406:6200::,2406:6200:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2406:6300::,2406:6300:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2406:6400::,2406:6400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:6500::,2406:6500:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2406:6600::,2406:6600:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2406:6700::,2406:6700:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:6800::,2406:6800:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2406:6900::,2406:6900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:6a00::,2406:6a00:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2406:6b00::,2406:6b00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2406:6c00::,2406:6c00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:6d00::,2406:6d00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:6e00::,2406:6e00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:6f00::,2406:6f00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2406:7000::,2406:7000:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2406:7100::,2406:7100:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2406:7200::,2406:7200:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2406:7300::,2406:7300:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:7400::,2406:7400:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2406:7500::,2406:7500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:7600::,2406:7600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:7800::,2406:7801:ffff:ffff:ffff:ffff:ffff:ffff,BN
+2406:7900::,2406:7900:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2406:7a00::,2406:7a00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2406:7c00::,2406:7c00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:7d00::,2406:7d00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2406:7e00::,2406:7e00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2406:7f00::,2406:7f00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2406:8000::,2406:8000:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2406:8100::,2406:8100:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2406:8200::,2406:8200:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2406:8400::,2406:8400:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2406:8500::,2406:8500:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2406:8600::,2406:8600:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2406:8700::,2406:8700:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:8800::,2406:8800:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2406:8900::,2406:8900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:8a00::,2406:8a00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:8b00::,2406:8b00:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2406:8c00::,2406:8c00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2406:8d00::,2406:8d00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:8e00::,2406:8e00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2406:8f00::,2406:8f00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2406:9000::,2406:9000:ffff:ffff:ffff:ffff:ffff:ffff,VN
+2406:9100::,2406:9100:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2406:9200::,2406:9200:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2406:9300::,2406:9300:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2406:9400::,2406:9400:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2406:9500::,2406:9500:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2406:9600::,2406:9600:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2406:9700::,2406:9700:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:9900::,2406:9900:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2406:9a00::,2406:9a01:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2406:9b00::,2406:9b00:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2406:9c00::,2406:9c00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2406:9d00::,2406:9d00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:9e00::,2406:9e00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2406:9f00::,2406:9f00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:a000::,2406:a000:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:a100::,2406:a100:ffff:ffff:ffff:ffff:ffff:ffff,AF
+2406:a200::,2406:a200:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:a300::,2406:a300:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2406:a400::,2406:a400:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2406:a500::,2406:a500:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2406:a600::,2406:a600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:a700::,2406:a700:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:a800::,2406:a800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:a900::,2406:a900:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2406:aa00::,2406:aa00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:ab00::,2406:ab00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2406:ac00::,2406:ac00:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2406:ad00::,2406:ad00:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2406:ae00::,2406:ae00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:af00::,2406:af00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2406:b000::,2406:b000:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2406:b100::,2406:b100:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2406:b200::,2406:b200:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2406:b300::,2406:b300:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:b400::,2406:b400:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2406:b500::,2406:b500:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2406:b600::,2406:b600:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2406:b700::,2406:b700:ffff:ffff:ffff:ffff:ffff:ffff,NP
+2406:b800::,2406:b800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2406:b900::,2406:b900:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2406:ba00::,2406:ba00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:bb00::,2406:bb07:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2406:bc00::,2406:bc00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:bd00::,2406:bd00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:be00::,2406:be00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:bf00::,2406:bf00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:c000::,2406:c000:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:c100::,2406:c100:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2406:c200::,2406:c200:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:c300::,2406:c300:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2406:c400::,2406:c400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:c500::,2406:c500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:c600::,2406:c600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:c700::,2406:c700:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2406:c800::,2406:c800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:c900::,2406:c900:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2406:ca00::,2406:ca00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:cb00::,2406:cb00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:cc00::,2406:cc00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2406:cd00::,2406:cd00:ffff:ffff:ffff:ffff:ffff:ffff,KI
+2406:ce00::,2406:ce07:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2406:cf00::,2406:cf00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2406:d000::,2406:d000:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2406:d100::,2406:d100:ffff:ffff:ffff:ffff:ffff:ffff,AF
+2406:d200::,2406:d200:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2406:d300::,2406:d300:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:d400::,2406:d400:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2406:d500::,2406:d501:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:d600::,2406:d600:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2406:d700::,2406:d700:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2406:d800::,2406:d800:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2406:db00::,2406:db00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2406:dc00::,2406:dc00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2406:dd00::,2406:dd00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2406:de00::,2406:de00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2406:df00::,2406:df00:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2406:e000::,2406:e007:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2406:e100::,2406:e100:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2406:e200::,2406:e200:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2406:e300::,2406:e300:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2406:e400::,2406:e400:ffff:ffff:ffff:ffff:ffff:ffff,MV
+2406:e500::,2406:e500:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2406:e600::,2406:e600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:e700::,2406:e700:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2406:e800::,2406:e800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2406:e900::,2406:e900:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2406:ea00::,2406:ea00:ffff:ffff:ffff:ffff:ffff:ffff,MM
+2406:eb00::,2406:eb00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2406:ec00::,2406:ec00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2406:ed00::,2406:ed00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2406:ee00::,2406:ee00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2406:ef00::,2406:ef00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:f000::,2406:f000:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2406:f100::,2406:f100:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2406:f200::,2406:f200:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2406:f300::,2406:f300:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2406:f400::,2406:f400:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2406:f500::,2406:f500:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2406:f600::,2406:f600:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2406:f700::,2406:f700:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2406:f800::,2406:f800:ffff:ffff:ffff:ffff:ffff:ffff,FJ
+2406:f900::,2406:f900:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2406:fa00::,2406:fa00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:fb00::,2406:fb00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2406:fc00::,2406:fc00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2406:fd00::,2406:fd00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2406:fe00::,2406:fe00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2406:ff00::,2406:ff00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2407::,2407::ffff:ffff:ffff:ffff:ffff:ffff,ID
+2407:100::,2407:100:ffff:ffff:ffff:ffff:ffff:ffff,VN
+2407:200::,2407:200:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:300::,2407:300:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:400::,2407:400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:500::,2407:500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:600::,2407:600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:700::,2407:700:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:800::,2407:800:ffff:ffff:ffff:ffff:ffff:ffff,FJ
+2407:900::,2407:900:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:a00::,2407:a00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:b00::,2407:b00:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2407:c00::,2407:c00:ffff:ffff:ffff:ffff:ffff:ffff,LK
+2407:d00::,2407:d00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2407:e00::,2407:e00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:f00::,2407:f00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2407:1000::,2407:1000:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2407:1100::,2407:1100:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2407:1200::,2407:1200:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2407:1300::,2407:1300:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2407:1400::,2407:1400:ffff:ffff:ffff:ffff:ffff:ffff,NP
+2407:1500::,2407:1500:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2407:1600::,2407:1600:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:1700::,2407:1700:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:1800::,2407:1800:ffff:ffff:ffff:ffff:ffff:ffff,PG
+2407:1900::,2407:1900:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2407:1b00::,2407:1b00:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2407:1c00::,2407:1c00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2407:1d00::,2407:1d00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2407:1e00::,2407:1e00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:1f00::,2407:1f00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:2000::,2407:2000:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2407:2100::,2407:2100:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:2200::,2407:2200:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:2300::,2407:2300:ffff:ffff:ffff:ffff:ffff:ffff,PG
+2407:2400::,2407:2400:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2407:2500::,2407:2500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:2600::,2407:2600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:2700::,2407:2700:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:2800::,2407:2800:ffff:ffff:ffff:ffff:ffff:ffff,WS
+2407:2900::,2407:2900:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2407:2a00::,2407:2a00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2407:2b00::,2407:2b00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2407:2c00::,2407:2c00:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2407:2d00::,2407:2d00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2407:2e00::,2407:2e00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:2f00::,2407:2f00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2407:3000::,2407:3000:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2407:3100::,2407:3100:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:3300::,2407:3300:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2407:3400::,2407:3400:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2407:3500::,2407:3500:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2407:3600::,2407:3600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:3700::,2407:3700:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2407:3800::,2407:3800:ffff:ffff:ffff:ffff:ffff:ffff,SB
+2407:3900::,2407:3900:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2407:3a00::,2407:3a00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:3b00::,2407:3b00:ffff:ffff:ffff:ffff:ffff:ffff,PG
+2407:3c00::,2407:3c00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2407:3d00::,2407:3d00:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2407:3e00::,2407:3e00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2407:3f00::,2407:3f00:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2407:4000::,2407:4000:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2407:4100::,2407:4100:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2407:4200::,2407:4200:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:4300::,2407:4300:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2407:4400::,2407:4400:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2407:4500::,2407:4500:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2407:4600::,2407:4600:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2407:4700::,2407:4700:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2407:4800::,2407:4800:ffff:ffff:ffff:ffff:ffff:ffff,FM
+2407:4900::,2407:4900:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2407:4a00::,2407:4a00:ffff:ffff:ffff:ffff:ffff:ffff,NC
+2407:4b00::,2407:4b00:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2407:4c00::,2407:4c00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:4d00::,2407:4d00:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2407:4e00::,2407:4e00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2407:4f00::,2407:4f00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2407:5000::,2407:5000:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2407:5100::,2407:5100:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2407:5200::,2407:5200:ffff:ffff:ffff:ffff:ffff:ffff,NP
+2407:5300::,2407:5300:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2407:5400::,2407:5400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:5500::,2407:5500:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2407:5600::,2407:5600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:5700::,2407:5700:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:5800::,2407:5800:ffff:ffff:ffff:ffff:ffff:ffff,CK
+2407:5900::,2407:5900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:5a00::,2407:5a00:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2407:5b00::,2407:5b00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2407:5c00::,2407:5c00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2407:5d00::,2407:5d00:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2407:5e00::,2407:5e00:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2407:5f00::,2407:5f00:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2407:6000::,2407:6000:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2407:6100::,2407:6100:ffff:ffff:ffff:ffff:ffff:ffff,MM
+2407:6200::,2407:6200:ffff:ffff:ffff:ffff:ffff:ffff,NP
+2407:6300::,2407:6300:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2407:6400::,2407:6400:ffff:ffff:ffff:ffff:ffff:ffff,MN
+2407:6500::,2407:6500:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2407:6600::,2407:6600:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2407:6700::,2407:6700:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2407:6800::,2407:6800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:6900::,2407:6900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:6a00::,2407:6a00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:6b00::,2407:6b00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:6c00::,2407:6c00:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2407:6d00::,2407:6d00:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2407:6e00::,2407:6e00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:6f00::,2407:6f00:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2407:7000::,2407:7000:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2407:7100::,2407:7100:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2407:7200::,2407:7200:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:7300::,2407:7300:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:7400::,2407:7400:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2407:7500::,2407:7500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:7600::,2407:7600:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2407:7700::,2407:7700:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2407:7800::,2407:7800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:7900::,2407:7900:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2407:7a00::,2407:7a00:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2407:7b00::,2407:7b00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:7c00::,2407:7c00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2407:7d00::,2407:7d00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2407:7e00::,2407:7e00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:7f00::,2407:7f00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2407:8000::,2407:8000:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:8100::,2407:8100:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2407:8200::,2407:8200:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2407:8300::,2407:8300:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2407:8400::,2407:8400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:8500::,2407:8500:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2407:8600::,2407:8600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:8700::,2407:8700:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2407:8800::,2407:8800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:8900::,2407:8900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:8a00::,2407:8a00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2407:8b00::,2407:8b00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2407:8c00::,2407:8c00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2407:8e00::,2407:8e00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:8f00::,2407:8f00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2407:9000::,2407:9000:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:9100::,2407:9100:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2407:9300::,2407:9300:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2407:9400::,2407:9400:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2407:9500::,2407:9500:ffff:ffff:ffff:ffff:ffff:ffff,NP
+2407:9700::,2407:9700:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2407:9800::,2407:9800:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2407:9900::,2407:9900:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2407:9a00::,2407:9a00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2407:9b00::,2407:9b00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:9c00::,2407:9c00:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2407:9d00::,2407:9d00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2407:9e00::,2407:9e00:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2407:9f00::,2407:9f00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2407:a000::,2407:a000:ffff:ffff:ffff:ffff:ffff:ffff,FJ
+2407:a100::,2407:a100:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:a200::,2407:a200:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:a300::,2407:a300:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2407:a500::,2407:a500:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2407:a600::,2407:a600:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2407:a700::,2407:a700:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:a800::,2407:a800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2407:a900::,2407:a900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:aa00::,2407:aa00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:ab00::,2407:ab00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:ac00::,2407:ac00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2407:ad00::,2407:ad00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2407:ae00::,2407:ae00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:af00::,2407:af00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:b000::,2407:b001:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2407:b100::,2407:b100:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2407:b200::,2407:b200:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2407:b300::,2407:b300:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:b400::,2407:b400:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:b500::,2407:b500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:b600::,2407:b600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:b700::,2407:b700:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:b800::,2407:b800:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2407:b900::,2407:b900:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2407:ba00::,2407:ba00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2407:bb00::,2407:bb00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2407:bc00::,2407:bc00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2407:bd00::,2407:bd00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:be00::,2407:be00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:bf00::,2407:bf00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2407:c000::,2407:c000:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2407:c100::,2407:c100:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2407:c200::,2407:c200:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2407:c300::,2407:c300:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2407:c400::,2407:c400:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2407:c500::,2407:c500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:c600::,2407:c600:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2407:c700::,2407:c700:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2407:c800::,2407:c800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2407:c900::,2407:c900:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2407:ca00::,2407:ca00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2407:cb00::,2407:cb00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2407:cc00::,2407:cc00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2407:cd00::,2407:cd00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:ce00::,2407:ce00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:cf00::,2407:cf00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2407:d000::,2407:d000:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2407:d100::,2407:d100:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2407:d200::,2407:d200:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2407:d300::,2407:d300:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:d400::,2407:d400:ffff:ffff:ffff:ffff:ffff:ffff,NP
+2407:d500::,2407:d500:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2407:d600::,2407:d600:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2407:d700::,2407:d700:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2407:d800::,2407:d800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2407:d900::,2407:d900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:da00::,2407:da00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2407:db00::,2407:db00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:dc00::,2407:dc00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:dd00::,2407:dd00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:de00::,2407:de00:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2407:df00::,2407:df00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2407:e000::,2407:e000:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2407:e100::,2407:e100:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:e200::,2407:e200:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2407:e300::,2407:e300:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:e400::,2407:e400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:e500::,2407:e501:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2407:e600::,2407:e600:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2407:e700::,2407:e700:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:e800::,2407:e800:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2407:e900::,2407:e900:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2407:ea00::,2407:ea00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:eb00::,2407:eb00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2407:ec00::,2407:ec00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:ed00::,2407:ed00:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2407:ee00::,2407:ee00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:ef00::,2407:ef00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2407:f000::,2407:f000:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:f100::,2407:f100:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2407:f200::,2407:f200:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2407:f300::,2407:f300:ffff:ffff:ffff:ffff:ffff:ffff,MM
+2407:f400::,2407:f400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:f500::,2407:f500:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:f600::,2407:f600:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2407:f700::,2407:f700:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2407:f800::,2407:f800:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2407:f900::,2407:f900:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2407:fa00::,2407:fa00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:fd00::,2407:fd00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:fe00::,2407:fe00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:ff00::,2407:ff00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2408::,2408:3ff:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2408:8000::,2408:8fff:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2409:10::,2409:1f:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2409:250::,2409:25f:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2409:8000::,2409:8fff:ffff:ffff:ffff:ffff:ffff:ffff,CN
+240a::,240a:7f:ffff:ffff:ffff:ffff:ffff:ffff,JP
+240a:8000::,240a:87ff:ffff:ffff:ffff:ffff:ffff:ffff,CN
+240b::,240b:3f:ffff:ffff:ffff:ffff:ffff:ffff,JP
+240b:240::,240b:27f:ffff:ffff:ffff:ffff:ffff:ffff,JP
+240b:8000::,240b:87ff:ffff:ffff:ffff:ffff:ffff:ffff,CN
+240c::,240c:f:ffff:ffff:ffff:ffff:ffff:ffff,CN
+240d::,240d:1f:ffff:ffff:ffff:ffff:ffff:ffff,JP
+240e::,240e:fff:ffff:ffff:ffff:ffff:ffff:ffff,CN
+240f::,240f:ff:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2600::,2600:7:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:100::,2600:10f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:200::,2600:20f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:300::,2600:400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:800::,2600:81f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:900::,2600:90f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:a00::,2600:a01:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:b00::,2600:b0f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:c00::,2600:c14:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:d00::,2600:d0f:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2600:f00::,2600:fff:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:1000::,2600:1007:ffff:ffff:ffff:ffff:ffff:ffff,UY
+2600:1008::,2600:1009:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2600:100a::,2600:100b:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:100c::,2600:100d:ffff:ffff:ffff:ffff:ffff:ffff,EG
+2600:100e::,2600:1017:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:1100::,2600:110f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:1200::,2600:130f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:1400::,2600:141f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:1500::,2600:150f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:1600::,2600:16ff:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2600:1800::,2600:180f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:1c00::,2600:1c0f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:2000::,2600:200f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:2400::,2600:2407:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:2800::,2600:2803:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:2c00::,2600:2c03:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:3000::,2600:3007:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:3400::,2600:340f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:3800::,2600:380f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:3c00::,2600:3c03:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:4000::,2600:40ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:4400::,2600:4407:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:4800::,2600:480f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:4c00::,2600:4c01:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:5000::,2600:500f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:5400::,2600:541f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:5800::,2600:5801:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:5c00::,2600:5c01:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:6000::,2600:6001:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:6400::,2600:640f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:6800::,2600:68ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:6c00::,2600:6cff:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:7000::,2600:70ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:7400::,2600:740f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:8000::,2600:80ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:e000::,2600:e00f:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2601::,2601:ff:ffff:ffff:ffff:ffff:ffff:ffff,UY
+2602::,2602:10f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2602:200::,2602:200:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2602:210::,2602:210:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2602:220::,2602:220:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2602:230::,2602:230:ffff:ffff:ffff:ffff:ffff:ffff,US
+2602:240::,2602:24f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2602:300::,2602:3ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+2602:ffc0::,2602:ffc0:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ffd0::,2602:ffd0:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ffe0::,2602:ffe0:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ffeb::,2602:ffeb:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ffec::,2602:ffec:fff:ffff:ffff:ffff:ffff:ffff,CA
+2602:ffed::,2602:ffed:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ffee::,2602:ffee:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ffef::,2602:ffef:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:fff0::,2602:fff0:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:fff1::,2602:fff1:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:fff2::,2602:fff2:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:fff3::,2602:fff3:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:fff4::,2602:fff4:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:fff5::,2602:fff5:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:fff6::,2602:fff6:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:fff7::,2602:fff7:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:fff8::,2602:fff8:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:fff9::,2602:fff9:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:fffa::,2602:fffa:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:fffb::,2602:fffb:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:fffc::,2602:fffc:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:fffd::,2602:fffd:fff:ffff:ffff:ffff:ffff:ffff,CA
+2602:ffff::,2602:ffff:fff:ffff:ffff:ffff:ffff:ffff,US
+2604::,2604::ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:10::,2604:10:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:100::,2604:100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:180::,2604:180:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:200::,2604:200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:280::,2604:280:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:300::,2604:300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:380::,2604:380:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:400::,2604:400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:480::,2604:480:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:500::,2604:500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:580::,2604:580:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:600::,2604:600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:680::,2604:680:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:700::,2604:700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:780::,2604:780:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:800::,2604:800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:880::,2604:880:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:900::,2604:900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:980::,2604:980:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:a00::,2604:a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:a80::,2604:a80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:b00::,2604:b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:b80::,2604:b80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:c00::,2604:c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:c80::,2604:c80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:d00::,2604:d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:d80::,2604:d80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:e00::,2604:e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:e80::,2604:e80:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:f00::,2604:f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:f80::,2604:f80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:1000::,2604:1000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:1080::,2604:1080:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:1100::,2604:1100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:1180::,2604:1180:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:1200::,2604:1200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:1280::,2604:1280:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:1300::,2604:1300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:1380::,2604:1380:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:1400::,2604:1400:ffff:ffff:ffff:ffff:ffff:ffff,PR
+2604:1480::,2604:1480:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:1500::,2604:1500:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:1580::,2604:1580:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:1600::,2604:1600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:1680::,2604:1680:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:1700::,2604:1700:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:1780::,2604:1780:ffff:ffff:ffff:ffff:ffff:ffff,KY
+2604:1800::,2604:1800:ffff:ffff:ffff:ffff:ffff:ffff,GP
+2604:1880::,2604:1880:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:1900::,2604:1900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:1980::,2604:1980:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:1a00::,2604:1a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:1a80::,2604:1a80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:1b00::,2604:1b00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:1b80::,2604:1b80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:1c00::,2604:1c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:1c80::,2604:1c80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:1d00::,2604:1d00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:1d80::,2604:1d80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:1e00::,2604:1e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:1e80::,2604:1e80:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:1f00::,2604:1f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:1f80::,2604:1f80:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:2000::,2604:20ff:ffff:ffff:ffff:ffff:ffff:ffff,GH
+2604:2100::,2604:2100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2180::,2604:2180:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2200::,2604:2200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2280::,2604:2280:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2300::,2604:2300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2380::,2604:2380:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2400::,2604:2400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2480::,2604:2480:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2500::,2604:2500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2580::,2604:2580:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:2600::,2604:2600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2680::,2604:2680:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2700::,2604:2700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2780::,2604:2780:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2800::,2604:2800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2880::,2604:2880:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2900::,2604:2900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2980::,2604:2980:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2a00::,2604:2a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2a80::,2604:2a80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2b00::,2604:2b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2b80::,2604:2b80:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:2c00::,2604:2c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2c80::,2604:2c80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2d00::,2604:2d00:fff:ffff:ffff:ffff:ffff:ffff,US
+2604:2d80::,2604:2d80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2e00::,2604:2e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2e80::,2604:2e80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2f00::,2604:2f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2f80::,2604:2f80:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:3000::,2604:3000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3080::,2604:3080:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3100::,2604:3100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3180::,2604:3180:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3200::,2604:3200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3280::,2604:3280:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3300::,2604:3300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3380::,2604:3380:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3400::,2604:3400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3480::,2604:3480:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3500::,2604:3500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3580::,2604:3580:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3600::,2604:3600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3680::,2604:3680:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3700::,2604:3700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3780::,2604:3780:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3800::,2604:3800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3880::,2604:3880:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3900::,2604:3900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3980::,2604:3980:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3a00::,2604:3a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3a80::,2604:3a80:ffff:ffff:ffff:ffff:ffff:ffff,VC
+2604:3b00::,2604:3b00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:3b80::,2604:3b80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3c00::,2604:3c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3c80::,2604:3c80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3d00::,2604:3d00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:3d80::,2604:3d80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3e00::,2604:3e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3e80::,2604:3e80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3f00::,2604:3f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3f80::,2604:3f80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:4000::,2604:4000:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:4080::,2604:4080:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:4100::,2604:4100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:4180::,2604:4180:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:4200::,2604:4200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:4280::,2604:4280:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:4300::,2604:4300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:4380::,2604:4380:ffff:ffff:ffff:ffff:ffff:ffff,GD
+2604:4400::,2604:4400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:4480::,2604:4480:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:4500::,2604:4500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:4580::,2604:4580:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:4600::,2604:4600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:4680::,2604:4680:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:4700::,2604:4700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:4780::,2604:4780:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:4800::,2604:4800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:4880::,2604:4880:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:4900::,2604:4900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:4980::,2604:4980:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:4a00::,2604:4a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:4a80::,2604:4a80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:4b00::,2604:4b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:4b80::,2604:4b80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:4c00::,2604:4c00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:4c80::,2604:4c80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:4d00::,2604:4d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:4d80::,2604:4d80:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:4e00::,2604:4e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:4e80::,2604:4e80:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:4f00::,2604:4f00:fff:ffff:ffff:ffff:ffff:ffff,US
+2604:4f80::,2604:4f80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5000::,2604:5000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5080::,2604:5080:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5100::,2604:5100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5180::,2604:5180:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5200::,2604:5200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5280::,2604:5280:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:5300::,2604:5300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5380::,2604:5380:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:5400::,2604:5400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5480::,2604:5480:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5500::,2604:5500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5580::,2604:5580:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:5600::,2604:5600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5680::,2604:5680:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5700::,2604:5700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5780::,2604:5780:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5800::,2604:5800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5880::,2604:5880:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:5900::,2604:5900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5980::,2604:5980:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5a00::,2604:5a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5a80::,2604:5a80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5b00::,2604:5b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5b80::,2604:5b80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5c00::,2604:5c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5c80::,2604:5c80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5d00::,2604:5d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5d80::,2604:5d80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5e00::,2604:5e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5e80::,2604:5e80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5f00::,2604:5f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5f80::,2604:5f80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:6000::,2604:60ff:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2604:6100::,2604:6100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:6180::,2604:6180:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:6200::,2604:6200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:6280::,2604:6280:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:6300::,2604:6300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:6380::,2604:6380:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:6400::,2604:6400:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:6480::,2604:6480:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:6500::,2604:6500:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:6580::,2604:6580:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:6600::,2604:6600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:6680::,2604:6680:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:6700::,2604:6700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:6780::,2604:6780:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:6800::,2604:6800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:6880::,2604:6880:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:6900::,2604:6900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:6980::,2604:6980:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:6a00::,2604:6a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:6a80::,2604:6a80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:6b00::,2604:6b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:6b80::,2604:6b80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:6c00::,2604:6c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:6c80::,2604:6c80:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:6d00::,2604:6d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:6d80::,2604:6d80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:6e00::,2604:6e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:6e80::,2604:6e80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:6f00::,2604:6f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:6f80::,2604:6f80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7000::,2604:7000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7080::,2604:7080:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7100::,2604:7100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7180::,2604:7180:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7200::,2604:7200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7280::,2604:7280:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7300::,2604:7300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7380::,2604:7380:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7400::,2604:7400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7480::,2604:7480:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:7500::,2604:7500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7580::,2604:7580:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7600::,2604:7600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7680::,2604:7680:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7700::,2604:7700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7780::,2604:7780:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7800::,2604:7800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7880::,2604:7880:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7900::,2604:7900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7980::,2604:7980:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:7a00::,2604:7a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7a80::,2604:7a80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7b00::,2604:7b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7b80::,2604:7b80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7c00::,2604:7c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7c80::,2604:7c80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7d00::,2604:7d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7d80::,2604:7d80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7e00::,2604:7e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7e80::,2604:7e80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7f00::,2604:7f00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:7f80::,2604:7f80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:8000::,2604:8000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:8080::,2604:8080:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:8100::,2604:8100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:8180::,2604:8180:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:8200::,2604:8200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:8280::,2604:8280:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:8300::,2604:8300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:8380::,2604:8380:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:8400::,2604:8400:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:8480::,2604:8480:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:8500::,2604:8500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:8580::,2604:8580:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:8600::,2604:8600:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:8680::,2604:8680:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:8700::,2604:8700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:8780::,2604:8780:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:8800::,2604:8800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:8880::,2604:8880:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:8900::,2604:8900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:8980::,2604:8980:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:8a00::,2604:8a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:8a80::,2604:8a80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:8b00::,2604:8b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:8b80::,2604:8b80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:8c00::,2604:8c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:8c80::,2604:8c80:ffff:ffff:ffff:ffff:ffff:ffff,DM
+2604:8d00::,2604:8d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:8d80::,2604:8d80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:8e00::,2604:8e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:8e80::,2604:8e80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:8f00::,2604:8f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:8f80::,2604:8f80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9000::,2604:9000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9080::,2604:9080:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9100::,2604:9100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9180::,2604:9180:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9200::,2604:9200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9280::,2604:9280:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9300::,2604:9300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9380::,2604:9380:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:9480::,2604:9480:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9500::,2604:9500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9580::,2604:9580:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9600::,2604:9600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9680::,2604:9680:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9700::,2604:9700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9780::,2604:9780:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9800::,2604:9800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9880::,2604:9880:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:9900::,2604:9900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9980::,2604:9980:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9a00::,2604:9a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9a80::,2604:9a80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9b00::,2604:9b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9b80::,2604:9b80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9c00::,2604:9c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9c80::,2604:9c80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9d00::,2604:9d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9d80::,2604:9d80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9e00::,2604:9e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9e80::,2604:9e80:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:9f00::,2604:9f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9f80::,2604:9f80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:a000::,2604:a000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:a080::,2604:a080:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:a100::,2604:a100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:a180::,2604:a180:ffff:ffff:ffff:ffff:ffff:ffff,BB
+2604:a200::,2604:a200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:a280::,2604:a280:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:a300::,2604:a300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:a380::,2604:a380:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:a400::,2604:a400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:a480::,2604:a480:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:a500::,2604:a500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:a580::,2604:a580:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:a600::,2604:a600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:a680::,2604:a680:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:a700::,2604:a700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:a780::,2604:a780:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:a800::,2604:a800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:a880::,2604:a880:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:a900::,2604:a900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:a980::,2604:a980:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:aa00::,2604:aa00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:aa80::,2604:aa80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:ab00::,2604:ab00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:ab80::,2604:ab80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:ac00::,2604:ac00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:ac80::,2604:ac80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:ad00::,2604:ad00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:ad80::,2604:ad80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:ae00::,2604:ae00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:ae80::,2604:ae80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:af00::,2604:af00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:af80::,2604:af80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:b000::,2604:b000:ffff:ffff:ffff:ffff:ffff:ffff,PR
+2604:b080::,2604:b080:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:b100::,2604:b100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:b180::,2604:b180:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:b200::,2604:b200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:b280::,2604:b280:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:b300::,2604:b300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:b380::,2604:b380:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:b400::,2604:b400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:b480::,2604:b480:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:b500::,2604:b500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:b580::,2604:b580:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:b600::,2604:b600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:b680::,2604:b680:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:b700::,2604:b700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:b780::,2604:b780:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:b800::,2604:b800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:b880::,2604:b880:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:b900::,2604:b900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:b980::,2604:b980:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:ba00::,2604:ba00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:ba80::,2604:ba80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:bb00::,2604:bb00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:bb80::,2604:bb80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:bc00::,2604:bc00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:bc80::,2604:bc80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:bd00::,2604:bd00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:bd80::,2604:bd80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:be00::,2604:be00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:be80::,2604:be80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:bf00::,2604:bf00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:bf80::,2604:bf80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:c000::,2604:c000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:c080::,2604:c080:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:c100::,2604:c100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:c180::,2604:c180:ffff:ffff:ffff:ffff:ffff:ffff,VI
+2604:c200::,2604:c200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:c280::,2604:c280:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:c300::,2604:c300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:c380::,2604:c380:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:c400::,2604:c400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:c480::,2604:c480:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:c500::,2604:c500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:c580::,2604:c580:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:c600::,2604:c600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:c680::,2604:c680:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:c700::,2604:c700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:c780::,2604:c780:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:c800::,2604:c800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:c880::,2604:c880:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:c900::,2604:c900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:c980::,2604:c980:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:ca00::,2604:ca00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:ca80::,2604:ca80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:cb00::,2604:cb00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:cb80::,2604:cb80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:cc00::,2604:cc00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:cc80::,2604:cc80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:cd00::,2604:cd00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:cd80::,2604:cd80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:ce00::,2604:ce00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:ce80::,2604:ce80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:cf00::,2604:cf00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:cf80::,2604:cf80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:d000::,2604:d000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:d080::,2604:d080:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:d100::,2604:d100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:d180::,2604:d180:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:d200::,2604:d200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:d280::,2604:d280:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:d300::,2604:d300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:d380::,2604:d380:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:d400::,2604:d400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:d480::,2604:d480:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:d500::,2604:d500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:d580::,2604:d580:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:d600::,2604:d600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:d680::,2604:d680:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:d700::,2604:d700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:d780::,2604:d780:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:d800::,2604:d801:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:d880::,2604:d880:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:d900::,2604:d900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:d980::,2604:d980:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:da00::,2604:da00:fff:ffff:ffff:ffff:ffff:ffff,US
+2604:da80::,2604:da80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:db00::,2604:db00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:db80::,2604:db80:ffff:ffff:ffff:ffff:ffff:ffff,BB
+2604:dc00::,2604:dc00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:dc80::,2604:dc80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:dd00::,2604:dd00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:dd80::,2604:dd80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:de00::,2604:de00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:de80::,2604:de80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:df00::,2604:df00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:df80::,2604:df80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:e000::,2604:e000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:e080::,2604:e080:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:e100::,2604:e100:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:e180::,2604:e180:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:e200::,2604:e200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:e280::,2604:e280:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:e300::,2604:e300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:e380::,2604:e380:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:e400::,2604:e400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:e480::,2604:e480:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:e500::,2604:e500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:e580::,2604:e580:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:e600::,2604:e600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:e680::,2604:e680:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:e700::,2604:e700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:e780::,2604:e780:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:e800::,2604:e800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:e880::,2604:e880:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:e900::,2604:e900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:e980::,2604:e980:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:ea00::,2604:ea00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:ea80::,2604:ea80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:eb00::,2604:eb00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:eb80::,2604:eb80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:ec00::,2604:ec00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:ed00::,2604:ed00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:ee00::,2604:ee00:fff:ffff:ffff:ffff:ffff:ffff,US
+2604:ef00::,2604:ef00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:f000::,2604:f000:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:f100::,2604:f100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:f200::,2604:f200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:f300::,2604:f300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:f400::,2604:f400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:f500::,2604:f500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:f600::,2604:f600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:f700::,2604:f700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:f800::,2604:f800:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:f900::,2604:f900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:fa00::,2604:fa00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:fb00::,2604:fb00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:fc00::,2604:fc00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:fd00::,2604:fd00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:fe00::,2604:fe00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:ff00::,2604:ff00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605::,2605::ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:100::,2605:100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:200::,2605:200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:300::,2605:300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:400::,2605:400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:500::,2605:500:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:600::,2605:600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:700::,2605:700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:800::,2605:800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:900::,2605:900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:a00::,2605:a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:b00::,2605:b00:fff:ffff:ffff:ffff:ffff:ffff,US
+2605:c00::,2605:c00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:d00::,2605:d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:e00::,2605:e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:f00::,2605:f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:1000::,2605:1000:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:1100::,2605:1100:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:1200::,2605:1200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:1300::,2605:1300:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:1400::,2605:1400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:1500::,2605:1500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:1600::,2605:1600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:1700::,2605:1700:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:1800::,2605:1800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:1900::,2605:1900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:1a00::,2605:1a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:1b00::,2605:1b00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:1c00::,2605:1c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:1d00::,2605:1d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:1e00::,2605:1e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:1f00::,2605:1f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:2000::,2605:2000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:2100::,2605:2100:fff:ffff:ffff:ffff:ffff:ffff,CA
+2605:2200::,2605:2200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:2300::,2605:2300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:2400::,2605:2400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:2500::,2605:2500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:2600::,2605:2600:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:2700::,2605:2700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:2800::,2605:2800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:2900::,2605:2900:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:2a00::,2605:2a00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:2b00::,2605:2b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:2c00::,2605:2c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:2d00::,2605:2d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:2e00::,2605:2e00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:2f00::,2605:2f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:3000::,2605:3000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:3100::,2605:3100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:3200::,2605:3200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:3300::,2605:3300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:3400::,2605:3400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:3500::,2605:3500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:3600::,2605:3600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:3700::,2605:3700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:3800::,2605:3800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:3900::,2605:3900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:3a00::,2605:3a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:3b00::,2605:3b00:fff:ffff:ffff:ffff:ffff:ffff,US
+2605:3c00::,2605:3c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:3d00::,2605:3d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:3e00::,2605:3e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:3f00::,2605:3f00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:4000::,2605:4000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:4100::,2605:4100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:4200::,2605:4200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:4300::,2605:4300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:4400::,2605:4400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:4500::,2605:4500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:4600::,2605:4600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:4700::,2605:4700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:4800::,2605:4800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:4900::,2605:4900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:4a00::,2605:4a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:4b00::,2605:4b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:4c00::,2605:4c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:4d00::,2605:4d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:4e00::,2605:4e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:4f00::,2605:4f00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:5000::,2605:5000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:5100::,2605:5100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:5200::,2605:5200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:5300::,2605:5300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:5400::,2605:5400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:5500::,2605:5500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:5600::,2605:5600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:5700::,2605:5700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:5800::,2605:5800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:5900::,2605:5900:ffff:ffff:ffff:ffff:ffff:ffff,JM
+2605:5a00::,2605:5a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:5b00::,2605:5b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:5c00::,2605:5c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:5d00::,2605:5d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:5e00::,2605:5e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:5f00::,2605:5f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:6000::,2605:60ff:ffff:ffff:ffff:ffff:ffff:ffff,EG
+2605:6100::,2605:6100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:6200::,2605:6200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:6300::,2605:6300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:6400::,2605:6400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:6500::,2605:6500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:6600::,2605:6600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:6700::,2605:6700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:6800::,2605:6800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:6900::,2605:6900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:6a00::,2605:6a00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:6b00::,2605:6b00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:6c00::,2605:6c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:6d00::,2605:6d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:6e00::,2605:6e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:6f00::,2605:6f00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:7000::,2605:7000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:7100::,2605:7100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:7200::,2605:7200:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:7300::,2605:7300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:7400::,2605:7400:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:7500::,2605:7500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:7600::,2605:7600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:7700::,2605:7700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:7800::,2605:7801:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:7900::,2605:7900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:7a00::,2605:7a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:7b00::,2605:7b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:7c00::,2605:7c00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:7d00::,2605:7d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:7e00::,2605:7e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:7f00::,2605:7f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:8000::,2605:8000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:8100::,2605:8100:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:8200::,2605:8200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:8300::,2605:8300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:8400::,2605:8400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:8500::,2605:8500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:8600::,2605:8600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:8700::,2605:8700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:8800::,2605:8800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:8900::,2605:8900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:8a00::,2605:8a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:8b00::,2605:8b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:8c00::,2605:8c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:8d00::,2605:8d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:8e00::,2605:8e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:8f00::,2605:8f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:9000::,2605:9000:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:9100::,2605:9100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:9200::,2605:9200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:9300::,2605:9300:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:9400::,2605:9400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:9500::,2605:9500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:9600::,2605:9600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:9700::,2605:9700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:9800::,2605:9800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:9900::,2605:9900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:9a00::,2605:9a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:9b00::,2605:9b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:9c00::,2605:9c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:9d00::,2605:9d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:9e00::,2605:9e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:9f00::,2605:9f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:a000::,2605:a0ff:ffff:ffff:ffff:ffff:ffff:ffff,ZW
+2605:a100::,2605:a100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:a200::,2605:a200:ffff:ffff:ffff:ffff:ffff:ffff,JM
+2605:a300::,2605:a300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:a400::,2605:a407:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:a500::,2605:a500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:a600::,2605:a6ff:ffff:ffff:ffff:ffff:ffff:ffff,EG
+2605:a700::,2605:a700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:a800::,2605:a800:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:a900::,2605:a900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:aa00::,2605:aa00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:ab00::,2605:ab00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:ac00::,2605:ac00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:ad00::,2605:ad00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:ae00::,2605:ae00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:af00::,2605:af00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:b000::,2605:b000:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:b100::,2605:b100:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:b200::,2605:b200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:b300::,2605:b300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:b400::,2605:b400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:b500::,2605:b500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:b600::,2605:b600:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:b700::,2605:b700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:b800::,2605:b800:ffff:ffff:ffff:ffff:ffff:ffff,PR
+2605:b900::,2605:b900:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:ba00::,2605:ba00:ffff:ffff:ffff:ffff:ffff:ffff,PR
+2605:bb00::,2605:bb00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:bc00::,2605:bc00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:bd00::,2605:bd00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:be00::,2605:be00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:bf00::,2605:bf00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:c000::,2605:c000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:c100::,2605:c100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:c200::,2605:c200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:c300::,2605:c300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:c400::,2605:c400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:c500::,2605:c500:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:c600::,2605:c600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:c700::,2605:c700:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:c800::,2605:c800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:c900::,2605:c900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:ca00::,2605:ca00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:cb00::,2605:cb00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:cc00::,2605:cc00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:cd00::,2605:cd00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:ce00::,2605:ce00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:cf00::,2605:cf00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:d000::,2605:d000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:d100::,2605:d100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:d200::,2605:d200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:d300::,2605:d300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:d400::,2605:d400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:d500::,2605:d500:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:d600::,2605:d600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:d700::,2605:d700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:d800::,2605:d800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:d900::,2605:d900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:da00::,2605:da00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:db00::,2605:db00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:dc00::,2605:dc00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:dd00::,2605:dd00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:de00::,2605:de00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:df00::,2605:df00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:e000::,2605:e0ff:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2605:e100::,2605:e100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:e200::,2605:e200:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:e300::,2605:e300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:e400::,2605:e400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:e500::,2605:e500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:e600::,2605:e600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:e700::,2605:e700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:e800::,2605:e800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:e900::,2605:e900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:ea00::,2605:ea00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:eb00::,2605:eb01:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:ec00::,2605:ec00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:ed00::,2605:ed00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:ee00::,2605:ee00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:ef00::,2605:ef00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:f000::,2605:f000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:f100::,2605:f100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:f200::,2605:f200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:f300::,2605:f300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:f500::,2605:f500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:f600::,2605:f600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:f700::,2605:f700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:f800::,2605:f800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:f900::,2605:f900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:fa00::,2605:fa00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:fb00::,2605:fb00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:fc00::,2605:fc00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:fd00::,2605:fd00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:fe00::,2605:fe00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:ff00::,2605:ff00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606::,2606::ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:100::,2606:100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:200::,2606:200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:300::,2606:300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:400::,2606:400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:500::,2606:500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:600::,2606:600:ffff:ffff:ffff:ffff:ffff:ffff,KY
+2606:700::,2606:700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:800::,2606:800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:900::,2606:900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:a00::,2606:a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:b00::,2606:b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:c00::,2606:c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:d00::,2606:d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:e00::,2606:e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:f00::,2606:f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:1000::,2606:1000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:1100::,2606:1100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:1200::,2606:1200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:1300::,2606:1300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:1400::,2606:1400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:1500::,2606:1500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:1600::,2606:1600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:1700::,2606:1700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:1800::,2606:1800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:1900::,2606:1900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:1a00::,2606:1a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:1b00::,2606:1b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:1c00::,2606:1c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:1d00::,2606:1d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:1e00::,2606:1e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:1f00::,2606:1f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:2000::,2606:2000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:2100::,2606:2100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:2200::,2606:2200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:2300::,2606:2300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:2400::,2606:2400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:2500::,2606:2500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:2600::,2606:2600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:2700::,2606:2700:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:2800::,2606:2800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:2900::,2606:2900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:2a00::,2606:2a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:2b00::,2606:2b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:2c00::,2606:2c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:2d00::,2606:2d00:fff:ffff:ffff:ffff:ffff:ffff,US
+2606:2e00::,2606:2e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:2f00::,2606:2f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:3000::,2606:3000:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:3100::,2606:3100:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:3200::,2606:3200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:3300::,2606:3300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:3400::,2606:3400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:3500::,2606:3500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:3600::,2606:3600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:3700::,2606:3700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:3800::,2606:3800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:3900::,2606:3900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:3a00::,2606:3a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:3b00::,2606:3b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:3c00::,2606:3c00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:3d00::,2606:3d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:3e00::,2606:3e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:3f00::,2606:3f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:4000::,2606:4000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:4100::,2606:4100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:4200::,2606:4200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:4300::,2606:4300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:4400::,2606:4400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:4500::,2606:4500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:4600::,2606:4600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:4700::,2606:4700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:4800::,2606:4800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:4900::,2606:4900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:4a00::,2606:4a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:4b00::,2606:4b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:4c00::,2606:4c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:4d00::,2606:4d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:4e00::,2606:4e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:4f00::,2606:4f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:5000::,2606:5000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:5100::,2606:5100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:5200::,2606:5200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:5300::,2606:5300:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:5400::,2606:5400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:5500::,2606:5500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:5600::,2606:5600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:5700::,2606:5700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:5800::,2606:5800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:5900::,2606:5900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:5a00::,2606:5a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:5b00::,2606:5b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:5c00::,2606:5c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:5d00::,2606:5d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:5e00::,2606:5e00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:5f00::,2606:5f00:ffff:ffff:ffff:ffff:ffff:ffff,PR
+2606:6000::,2606:60ff:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2606:6100::,2606:6100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:6200::,2606:6200:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:6300::,2606:6300:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:6400::,2606:6400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:6500::,2606:6500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:6600::,2606:6600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:6700::,2606:6700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:6800::,2606:6800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:6900::,2606:6900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:6a00::,2606:6a00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:6b00::,2606:6b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:6c00::,2606:6c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:6d00::,2606:6d00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:6e00::,2606:6e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:6f00::,2606:6f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:7000::,2606:7000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:7100::,2606:7100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:7200::,2606:7200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:7300::,2606:7300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:7400::,2606:7400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:7500::,2606:7500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:7600::,2606:7600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:7700::,2606:7700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:7800::,2606:7800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:7900::,2606:7900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:7a00::,2606:7a00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:7b00::,2606:7b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:7c00::,2606:7c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:7d00::,2606:7d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:7e00::,2606:7e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:7f00::,2606:7f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:8000::,2606:8000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:8100::,2606:8100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:8200::,2606:8200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:8300::,2606:8300:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:8400::,2606:8400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:8500::,2606:8500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:8600::,2606:8600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:8700::,2606:8700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:8800::,2606:8800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:8900::,2606:8900:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:8a00::,2606:8a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:8b00::,2606:8b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:8c00::,2606:8c00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:8d00::,2606:8d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:8e00::,2606:8e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:8f00::,2606:8f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:9000::,2606:9000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:9100::,2606:9100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:9200::,2606:9200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:9300::,2606:9300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:9400::,2606:9400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:9500::,2606:9500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:9600::,2606:9600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:9700::,2606:9700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:9800::,2606:9800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:9900::,2606:9900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:9a00::,2606:9a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:9b00::,2606:9b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:9c00::,2606:9c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:9d00::,2606:9d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:9e00::,2606:9e00:ffff:ffff:ffff:ffff:ffff:ffff,BM
+2606:9f00::,2606:9f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:a000::,2606:a0ff:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2606:a100::,2606:a100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:a200::,2606:a200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:a300::,2606:a300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:a400::,2606:a400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:a500::,2606:a500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:a600::,2606:a600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:a700::,2606:a700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:a800::,2606:a800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:a900::,2606:a900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:aa00::,2606:aa00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:ab00::,2606:ab00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:ac00::,2606:ac00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:ad00::,2606:ad00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:ae00::,2606:ae00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:af00::,2606:af00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:b000::,2606:b000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:b100::,2606:b100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:b200::,2606:b200:ffff:ffff:ffff:ffff:ffff:ffff,KY
+2606:b300::,2606:b300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:b400::,2606:b400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:b500::,2606:b500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:b600::,2606:b600:fff:ffff:ffff:ffff:ffff:ffff,US
+2606:b700::,2606:b700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:b800::,2606:b800:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:b900::,2606:b900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:ba00::,2606:ba00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:bb00::,2606:bb00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:bc00::,2606:bc00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:bd00::,2606:bd00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:be00::,2606:be00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:bf00::,2606:bf00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:c000::,2606:c000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:c100::,2606:c100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:c200::,2606:c200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:c300::,2606:c300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:c400::,2606:c400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:c500::,2606:c500:ffff:ffff:ffff:ffff:ffff:ffff,JM
+2606:c600::,2606:c600:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:c700::,2606:c700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:c800::,2606:c800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:c900::,2606:c900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:ca00::,2606:ca00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:cb00::,2606:cb00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:cc00::,2606:cc00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:cd00::,2606:cd00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:ce00::,2606:ce00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:cf00::,2606:cf00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:d000::,2606:d000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:d100::,2606:d100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:d200::,2606:d200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:d300::,2606:d300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:d400::,2606:d400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:d500::,2606:d500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:d600::,2606:d600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:d700::,2606:d700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:d800::,2606:d800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:d900::,2606:d900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:da00::,2606:da00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:db00::,2606:db00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:dc00::,2606:dc00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:dd00::,2606:dd00:fff:ffff:ffff:ffff:ffff:ffff,US
+2606:de00::,2606:de00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:df00::,2606:df00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:e000::,2606:e000:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:e100::,2606:e100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:e200::,2606:e200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:e300::,2606:e300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:e400::,2606:e400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:e500::,2606:e500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:e600::,2606:e600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:e700::,2606:e700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:e800::,2606:e800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:e900::,2606:e900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:ea00::,2606:ea00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:eb00::,2606:eb00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:ec00::,2606:ec00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:ed00::,2606:ed00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:ee00::,2606:ee00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:ef00::,2606:ef00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:f000::,2606:f000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:f100::,2606:f100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:f200::,2606:f200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:f300::,2606:f300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:f400::,2606:f40f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:f500::,2606:f500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:f600::,2606:f600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:f700::,2606:f700:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:f800::,2606:f800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:f900::,2606:f900:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:fa00::,2606:fa00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:fb00::,2606:fb00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:fc00::,2606:fc00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:fd00::,2606:fd00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:fe00::,2606:fe00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:ff00::,2606:ff00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607::,2607::ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:100::,2607:100:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:200::,2607:200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:300::,2607:300:ffff:ffff:ffff:ffff:ffff:ffff,BS
+2607:400::,2607:400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:500::,2607:500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:600::,2607:600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:700::,2607:700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:800::,2607:800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:900::,2607:900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:a00::,2607:a00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:b00::,2607:b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:c00::,2607:c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:d00::,2607:d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:e00::,2607:e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f00::,2607:f00:ffff:ffff:ffff:ffff:ffff:ffff,PR
+2607:1000::,2607:1000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:1100::,2607:1100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:1200::,2607:1200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:1300::,2607:1300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:1400::,2607:1400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:1500::,2607:1500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:1600::,2607:1600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:1700::,2607:1700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:1800::,2607:1800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:1900::,2607:1900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:1a00::,2607:1a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:1b00::,2607:1b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:1c00::,2607:1c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:1d00::,2607:1d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:1e00::,2607:1e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:1f00::,2607:1f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:2000::,2607:2000:ffff:ffff:ffff:ffff:ffff:ffff,PR
+2607:2100::,2607:2100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:2200::,2607:2200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:2300::,2607:2300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:2400::,2607:2400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:2500::,2607:2500:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:2600::,2607:2600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:2700::,2607:2700:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:2800::,2607:2800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:2900::,2607:2900:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:2a00::,2607:2a00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:2b00::,2607:2b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:2c00::,2607:2c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:2d00::,2607:2d00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:2e00::,2607:2e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:2f00::,2607:2f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:3000::,2607:3000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:3100::,2607:3100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:3200::,2607:3200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:3300::,2607:3300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:3400::,2607:3400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:3500::,2607:3500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:3600::,2607:3600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:3700::,2607:3700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:3800::,2607:3800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:3900::,2607:3900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:3a00::,2607:3a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:3b00::,2607:3b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:3c00::,2607:3c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:3d00::,2607:3d0f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:3e00::,2607:3e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:3f00::,2607:3f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:4000::,2607:4000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:4100::,2607:4100:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:4200::,2607:4200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:4300::,2607:4300:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:4400::,2607:4400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:4500::,2607:4500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:4600::,2607:4600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:4700::,2607:4700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:4800::,2607:4800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:4900::,2607:4900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:4a00::,2607:4a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:4b00::,2607:4b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:4c00::,2607:4c00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:4d00::,2607:4d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:4e00::,2607:4e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:4f00::,2607:4f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:5000::,2607:5006:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:5100::,2607:5100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:5200::,2607:5200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:5300::,2607:5300:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:5400::,2607:5400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:5500::,2607:5500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:5600::,2607:5600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:5700::,2607:5700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:5800::,2607:5800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:5900::,2607:5900:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:5a00::,2607:5a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:5b00::,2607:5b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:5c00::,2607:5c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:5d00::,2607:5d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:5e00::,2607:5e00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:5f00::,2607:5f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:6000::,2607:6000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:6100::,2607:6100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:6200::,2607:6200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:6300::,2607:6300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:6400::,2607:6400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:6500::,2607:6500:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:6600::,2607:6600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:6700::,2607:6700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:6800::,2607:6800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:6900::,2607:6900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:6a00::,2607:6a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:6b00::,2607:6b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:6c00::,2607:6c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:6d00::,2607:6d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:6e00::,2607:6e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:6f00::,2607:6f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:7000::,2607:7000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:7100::,2607:7100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:7200::,2607:7200:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:7300::,2607:7300:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:7400::,2607:7400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:7500::,2607:7500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:7600::,2607:7600:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:7700::,2607:7700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:7800::,2607:7800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:7900::,2607:7900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:7a00::,2607:7a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:7b00::,2607:7b00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:7c00::,2607:7c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:7d00::,2607:7d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:7e00::,2607:7e00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:7f00::,2607:7f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:8000::,2607:8000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:8100::,2607:8100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:8200::,2607:8200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:8300::,2607:8300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:8400::,2607:8400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:8500::,2607:8500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:8600::,2607:8600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:8800::,2607:8800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:8900::,2607:8900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:8a00::,2607:8a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:8b00::,2607:8b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:8c00::,2607:8c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:8d00::,2607:8d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:8e00::,2607:8e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:8f00::,2607:8f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:9000::,2607:9000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:9100::,2607:9100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:9200::,2607:9200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:9300::,2607:9300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:9400::,2607:9400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:9500::,2607:9500:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:9600::,2607:9600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:9700::,2607:9700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:9800::,2607:9800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:9900::,2607:9900:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:9a00::,2607:9a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:9b00::,2607:9b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:9c00::,2607:9c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:9d00::,2607:9d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:9e00::,2607:9e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:9f00::,2607:9f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:a000::,2607:a000:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:a100::,2607:a10f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:a200::,2607:a200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:a300::,2607:a300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:a400::,2607:a400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:a500::,2607:a500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:a600::,2607:a600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:a700::,2607:a700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:a800::,2607:a800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:a900::,2607:a900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:aa00::,2607:aa00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ab00::,2607:ab00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ac00::,2607:ac00:ffff:ffff:ffff:ffff:ffff:ffff,PR
+2607:ad00::,2607:ad00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ae00::,2607:ae00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:af00::,2607:af00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:b000::,2607:b000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:b100::,2607:b100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:b200::,2607:b200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:b300::,2607:b300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:b400::,2607:b400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:b500::,2607:b500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:b600::,2607:b600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:b700::,2607:b700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:b800::,2607:b800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:b900::,2607:b900:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:ba00::,2607:ba00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:bb00::,2607:bb00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:bc00::,2607:bc00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:bd00::,2607:bd00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:be00::,2607:be00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:bf00::,2607:bf00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:c000::,2607:c000:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:c100::,2607:c100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:c200::,2607:c200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:c300::,2607:c300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:c400::,2607:c400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:c500::,2607:c500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:c600::,2607:c600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:c700::,2607:c700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:c800::,2607:c800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:c900::,2607:c900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ca00::,2607:ca00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:cb00::,2607:cb00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:cc00::,2607:cc00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:cd00::,2607:cd00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ce00::,2607:ce00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:cf00::,2607:cf03:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:d000::,2607:d000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:d100::,2607:d100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:d200::,2607:d200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:d300::,2607:d300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:d400::,2607:d400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:d500::,2607:d500:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:d600::,2607:d600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:d700::,2607:d700:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:d800::,2607:d800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:d900::,2607:d900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:da00::,2607:da00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:db00::,2607:db00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:dc00::,2607:dc00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:dd00::,2607:dd00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:de00::,2607:de00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:df00::,2607:df00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:e000::,2607:e000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:e100::,2607:e100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:e200::,2607:e200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:e300::,2607:e300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:e400::,2607:e400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:e500::,2607:e500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:e600::,2607:e600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:e700::,2607:e700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:e800::,2607:e800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:e900::,2607:e900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ea00::,2607:ea00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:eb00::,2607:eb00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:ec00::,2607:ec00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ed00::,2607:ed00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:ee00::,2607:ee00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:ef00::,2607:ef00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f000::,2607:f000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f008::,2607:f008:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f010::,2607:f010:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f018::,2607:f018:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f020::,2607:f020:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f028::,2607:f028:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f030::,2607:f030:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f038::,2607:f038:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f040::,2607:f040:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f048::,2607:f048:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f050::,2607:f050:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f058::,2607:f058:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f060::,2607:f060:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f068::,2607:f068:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f070::,2607:f070:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f078::,2607:f078:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f080::,2607:f080:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f088::,2607:f088:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f090::,2607:f090:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f098::,2607:f098:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f0a0::,2607:f0a0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f0a8::,2607:f0a8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f0b0::,2607:f0b0:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f0c0::,2607:f0c0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f0c8::,2607:f0c8:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f0d0::,2607:f0d0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f0d8::,2607:f0e0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f0e8::,2607:f0e8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f0f8::,2607:f0f8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f100::,2607:f100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f108::,2607:f108:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f110::,2607:f110:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f118::,2607:f118:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f128::,2607:f128:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f130::,2607:f130:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f138::,2607:f138:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f140::,2607:f140:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f148::,2607:f148:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f150::,2607:f150:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f158::,2607:f158:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f160::,2607:f160:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f168::,2607:f168:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f170::,2607:f170:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f178::,2607:f178:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f180::,2607:f181:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f188::,2607:f188:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f190::,2607:f190:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f198::,2607:f198:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f1a0::,2607:f1a0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f1a8::,2607:f1a8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f1b0::,2607:f1b0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f1b8::,2607:f1b8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f1c0::,2607:f1c0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f1c8::,2607:f1c8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f1d0::,2607:f1d0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f1d8::,2607:f1d8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f1e0::,2607:f1e0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f1e8::,2607:f1e8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f1f0::,2607:f1f0:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f1f8::,2607:f1f8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f200::,2607:f200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f208::,2607:f208:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f210::,2607:f212:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f218::,2607:f218:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f220::,2607:f220:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f228::,2607:f228:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f230::,2607:f230:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f238::,2607:f238:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f240::,2607:f240:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f248::,2607:f248:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f250::,2607:f250:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f258::,2607:f258:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f260::,2607:f260:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f270::,2607:f270:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f278::,2607:f278:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f280::,2607:f281:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f288::,2607:f288:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f290::,2607:f290:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f298::,2607:f298:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f2a8::,2607:f2a8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f2b0::,2607:f2b0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f2c0::,2607:f2c0:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f2c8::,2607:f2c8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f2d0::,2607:f2d0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f2d8::,2607:f2d8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f2e0::,2607:f2e0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f2e8::,2607:f2e8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f2f0::,2607:f2f0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f2f8::,2607:f2f8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f300::,2607:f300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f308::,2607:f308:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f310::,2607:f310:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f318::,2607:f318:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f330::,2607:f330:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f338::,2607:f338:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f340::,2607:f340:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f348::,2607:f348:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f350::,2607:f350:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f358::,2607:f358:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f360::,2607:f360:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f368::,2607:f368:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f370::,2607:f370:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f378::,2607:f378:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f380::,2607:f380:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f388::,2607:f388:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f390::,2607:f390:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f398::,2607:f398:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f3a0::,2607:f3a0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f3b0::,2607:f3b0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f3b8::,2607:f3b8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f3c0::,2607:f3c0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f3c8::,2607:f3c8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f3d0::,2607:f3d0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f3d8::,2607:f3d8:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f3e0::,2607:f3e0:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f3e8::,2607:f3e8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f3f0::,2607:f3f0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f3f8::,2607:f3f8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f400::,2607:f400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f408::,2607:f408:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f410::,2607:f410:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f418::,2607:f418:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f420::,2607:f420:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f428::,2607:f428:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f430::,2607:f430:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f438::,2607:f438:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f440::,2607:f440:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f450::,2607:f450:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f458::,2607:f458:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f460::,2607:f460:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f468::,2607:f468:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f470::,2607:f470:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f478::,2607:f478:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f480::,2607:f480:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f488::,2607:f488:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f490::,2607:f490:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f498::,2607:f498:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f4a0::,2607:f4a0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f4a8::,2607:f4a8:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f4b0::,2607:f4b0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f4b8::,2607:f4b8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f4c0::,2607:f4c0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f4c8::,2607:f4c8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f4d0::,2607:f4d0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f4d8::,2607:f4d8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f4e0::,2607:f4e0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f4e8::,2607:f4e8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f4f0::,2607:f4f0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f4f8::,2607:f4f8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f500::,2607:f500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f508::,2607:f508:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f510::,2607:f510:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f518::,2607:f518:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f520::,2607:f520:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f528::,2607:f528:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f530::,2607:f530:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f538::,2607:f538:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f540::,2607:f540:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f548::,2607:f548:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f550::,2607:f550:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f558::,2607:f558:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f560::,2607:f560:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f568::,2607:f568:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f570::,2607:f570:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f578::,2607:f578:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f588::,2607:f588:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f590::,2607:f590:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f598::,2607:f598:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f5a0::,2607:f5a0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f5a8::,2607:f5a8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f5b0::,2607:f5b8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f5c0::,2607:f5c0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f5c8::,2607:f5c8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f5d0::,2607:f5d0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f5d8::,2607:f5d8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f5e0::,2607:f5e0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f5e8::,2607:f5e8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f5f0::,2607:f5f0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f5f8::,2607:f5f8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f600::,2607:f600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f608::,2607:f608:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f610::,2607:f610:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f618::,2607:f618:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f620::,2607:f620:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f628::,2607:f628:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f630::,2607:f630:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f638::,2607:f638:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f640::,2607:f640:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f648::,2607:f648:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f650::,2607:f650:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f658::,2607:f658:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f660::,2607:f660:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f668::,2607:f668:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f670::,2607:f670:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f678::,2607:f678:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f680::,2607:f680:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f688::,2607:f688:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f690::,2607:f690:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f698::,2607:f699:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f6a0::,2607:f6a0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f6a8::,2607:f6a8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f6b0::,2607:f6b0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f6b8::,2607:f6b8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f6c0::,2607:f6c0:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f6c8::,2607:f6c8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f6d0::,2607:f6d0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f6d8::,2607:f6d8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f6e0::,2607:f6e0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f6e8::,2607:f6e8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f6f0::,2607:f6f0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f6f8::,2607:f6f8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f700::,2607:f700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f708::,2607:f708:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f710::,2607:f710:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f718::,2607:f718:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f720::,2607:f720:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f728::,2607:f728:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f738::,2607:f738:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f740::,2607:f740:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f748::,2607:f748:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f750::,2607:f750:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f758::,2607:f758:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f760::,2607:f760:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f768::,2607:f768:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f770::,2607:f770:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f778::,2607:f778:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f788::,2607:f788:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f790::,2607:f790:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f798::,2607:f798:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f7a0::,2607:f7a0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f7a8::,2607:f7a8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f7b0::,2607:f7b0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f7b8::,2607:f7b8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f7c0::,2607:f7c0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f7c8::,2607:f7c8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f7d0::,2607:f7d0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f7d8::,2607:f7d8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f7e0::,2607:f7e0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f7e8::,2607:f7e8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f7f0::,2607:f7f0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f7f8::,2607:f7f8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f800::,2607:f800:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f808::,2607:f808:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f810::,2607:f810:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f818::,2607:f818:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f820::,2607:f820:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f828::,2607:f828:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f830::,2607:f830:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f838::,2607:f838:ffff:ffff:ffff:ffff:ffff:ffff,VI
+2607:f848::,2607:f848:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f850::,2607:f850:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f858::,2607:f858:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f860::,2607:f860:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f868::,2607:f868:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f870::,2607:f870:ffff:ffff:ffff:ffff:ffff:ffff,PR
+2607:f878::,2607:f878:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f880::,2607:f880:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f888::,2607:f888:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f890::,2607:f890:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f898::,2607:f898:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f8a0::,2607:f8a0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f8a8::,2607:f8a8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f8b0::,2607:f8b0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f8b8::,2607:f8b8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f8c0::,2607:f8c0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f8c8::,2607:f8c8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f8d0::,2607:f8d0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f8d8::,2607:f8d8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f8e0::,2607:f8e0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f8e8::,2607:f8e8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f8f0::,2607:f8f0:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f8f8::,2607:f8f8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f900::,2607:f900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f908::,2607:f908:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f910::,2607:f910:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f920::,2607:f920:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f928::,2607:f928:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f930::,2607:f930:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f938::,2607:f938:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f940::,2607:f940:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f948::,2607:f948:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f950::,2607:f950:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f958::,2607:f958:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f960::,2607:f960:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f968::,2607:f968:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f978::,2607:f978:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f980::,2607:f980:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f990::,2607:f990:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f998::,2607:f998:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f9a0::,2607:f9a0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f9a8::,2607:f9a8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f9b0::,2607:f9b0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f9b8::,2607:f9b8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f9c0::,2607:f9c0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f9c8::,2607:f9c8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f9d0::,2607:f9d0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f9d8::,2607:f9d8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f9e0::,2607:f9e0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f9f0::,2607:f9f1:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f9f8::,2607:f9f8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fa00::,2607:faff:ffff:ffff:ffff:ffff:ffff:ffff,TN
+2607:fb00::,2607:fbff:ffff:ffff:ffff:ffff:ffff:ffff,UY
+2607:fc00::,2607:fcff:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2607:fd00::,2607:fd00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fd08::,2607:fd08:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fd10::,2607:fd10:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fd18::,2607:fd18:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fd28::,2607:fd28:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fd30::,2607:fd30:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fd38::,2607:fd38:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fd40::,2607:fd40:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fd48::,2607:fd48:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fd50::,2607:fd50:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fd60::,2607:fd60:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fd68::,2607:fd68:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fd70::,2607:fd70:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fd78::,2607:fd78:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:fd80::,2607:fd80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fd88::,2607:fd88:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fd90::,2607:fd90:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fd98::,2607:fd98:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fda0::,2607:fda0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fda8::,2607:fda8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fdb0::,2607:fdb0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fdb8::,2607:fdb8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fdc0::,2607:fdc0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fdc8::,2607:fdc8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fdd0::,2607:fdd0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fdd8::,2607:fdd8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fde0::,2607:fde0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fde8::,2607:fde8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fdf0::,2607:fdf0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fdf8::,2607:fdf8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fe00::,2607:fe00:ffff:ffff:ffff:ffff:ffff:ffff,JM
+2607:fe08::,2607:fe08:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fe10::,2607:fe10:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fe18::,2607:fe18:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fe20::,2607:fe20:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fe28::,2607:fe28:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fe30::,2607:fe30:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fe38::,2607:fe38:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fe40::,2607:fe40:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fe48::,2607:fe48:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fe50::,2607:fe50:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fe58::,2607:fe58:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fe60::,2607:fe60:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fe68::,2607:fe68:ffff:ffff:ffff:ffff:ffff:ffff,BS
+2607:fe70::,2607:fe70:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fe78::,2607:fe78:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fe80::,2607:fe80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fe88::,2607:fe88:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:fe90::,2607:fe90:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fe98::,2607:fe98:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fea0::,2607:fea0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fea8::,2607:fea8:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:feb0::,2607:feb0:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:feb8::,2607:feb8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fec0::,2607:fec0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fec8::,2607:fec8:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:fed0::,2607:fed0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fed8::,2607:fed8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fee0::,2607:fee0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fee8::,2607:fee8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fef8::,2607:fef8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ff00::,2607:ff00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ff08::,2607:ff08:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ff10::,2607:ff10:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ff18::,2607:ff18:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ff28::,2607:ff28:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ff30::,2607:ff30:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ff38::,2607:ff38:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ff40::,2607:ff40:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ff48::,2607:ff48:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ff50::,2607:ff50:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ff58::,2607:ff58:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ff60::,2607:ff60:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ff68::,2607:ff68:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ff70::,2607:ff70:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ff78::,2607:ff78:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:ff80::,2607:ff80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ff90::,2607:ff90:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ffa0::,2607:ffa0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ffa8::,2607:ffa8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ffb0::,2607:ffb0:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:ffb8::,2607:ffb8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ffc0::,2607:ffc0:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:ffc8::,2607:ffc8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ffd0::,2607:ffd0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ffd8::,2607:ffd8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ffe0::,2607:ffe0:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:ffe8::,2607:ffe8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fff0::,2607:fff0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fff8::,2607:fff8:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2608::,2608:3ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+2608:4000::,2608:43ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+2608:8000::,2608:83ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+2608:c000::,2608:c3ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+2609::,2609:3ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+2609:4000::,2609:43ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+2609:8000::,2609:83ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+2609:a000::,2609:a3ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+2609:c000::,2609:c3ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+2609:e000::,2609:e3ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+260c::,260c:3ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+260c:2000::,260c:23ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+260c:4000::,260c:43ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+260c:6000::,260c:63ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+260c:8000::,260c:83ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+260c:a000::,260c:a3ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+260c:c000::,260c:c3ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+260c:d000::,260c:d3ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+260c:e000::,260c:e3ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+260c:f000::,260c:f3ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+260f:d000::,260f:d3ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+260f:f000::,260f:f3ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610::,2610::ffff:ffff:ffff:ffff:ffff:ffff,CA
+2610:8::,2610:8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:10::,2610:10:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:18::,2610:18:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:20::,2610:20:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:28::,2610:28:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:30::,2610:30:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:38::,2610:38:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2610:40::,2610:40:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:48::,2610:48:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:50::,2610:50:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:58::,2610:58:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:60::,2610:60:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:68::,2610:68:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:78::,2610:78:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2610:80::,2610:88:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:98::,2610:98:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2610:a0::,2610:a8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:b0::,2610:b0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:b8::,2610:b8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:c0::,2610:c0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:c8::,2610:c8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:d0::,2610:d0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:d8::,2610:d8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:e0::,2610:e0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:e8::,2610:e8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:f0::,2610:f0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:f8::,2610:f8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:100::,2610:100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:108::,2610:108:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:110::,2610:110:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:120::,2610:120:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:128::,2610:128:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:130::,2610:130:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:140::,2610:140:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:148::,2610:148:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:150::,2610:150:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:158::,2610:158:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:160::,2610:160:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:168::,2610:168:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:170::,2610:170:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2610:178::,2610:178:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:180::,2610:180:ffff:ffff:ffff:ffff:ffff:ffff,BS
+2610:188::,2610:188:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:190::,2610:190:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:198::,2610:198:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:1a0::,2610:1a0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:1a8::,2610:1a8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:1b0::,2610:1b0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:1c0::,2610:1c2:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:1c8::,2610:1c8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:1d0::,2610:1d0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:1d8::,2610:1d8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:1e0::,2610:1e0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:1e8::,2610:1e8:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2610:1f0::,2610:1f0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:1f8::,2610:1f8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2620::,2620::ffff:ffff:ffff:ffff:ffff,US
+2620:0:10::,2620::10:ffff:ffff:ffff:ffff:ffff,US
+2620:0:20::,2620::20:ffff:ffff:ffff:ffff:ffff,US
+2620:0:30::,2620::37:ffff:ffff:ffff:ffff:ffff,US
+2620:0:40::,2620::40:ffff:ffff:ffff:ffff:ffff,US
+2620:0:60::,2620::60:ffff:ffff:ffff:ffff:ffff,US
+2620:0:70::,2620::70:ffff:ffff:ffff:ffff:ffff,US
+2620:0:80::,2620::80:ffff:ffff:ffff:ffff:ffff,US
+2620:0:90::,2620::90:ffff:ffff:ffff:ffff:ffff,US
+2620:0:a0::,2620::a0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:b0::,2620::b0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:c0::,2620::c0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:f0::,2620::f0:ffff:ffff:ffff:ffff:ffff,CA
+2620:0:100::,2620::100:ffff:ffff:ffff:ffff:ffff,US
+2620:0:110::,2620::110:ffff:ffff:ffff:ffff:ffff,US
+2620:0:120::,2620::120:ffff:ffff:ffff:ffff:ffff,US
+2620:0:140::,2620::140:ffff:ffff:ffff:ffff:ffff,US
+2620:0:150::,2620::150:ffff:ffff:ffff:ffff:ffff,US
+2620:0:160::,2620::160:ffff:ffff:ffff:ffff:ffff,CA
+2620:0:170::,2620::170:ffff:ffff:ffff:ffff:ffff,US
+2620:0:180::,2620::180:ffff:ffff:ffff:ffff:ffff,US
+2620:0:190::,2620::190:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1a0::,2620::1a0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1b0::,2620::1b0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1c0::,2620::1c0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1d0::,2620::1d0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1f0::,2620::1f0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:200::,2620::200:ffff:ffff:ffff:ffff:ffff,US
+2620:0:210::,2620::210:ffff:ffff:ffff:ffff:ffff,US
+2620:0:220::,2620::220:ffff:ffff:ffff:ffff:ffff,US
+2620:0:230::,2620::230:ffff:ffff:ffff:ffff:ffff,CA
+2620:0:240::,2620::240:ffff:ffff:ffff:ffff:ffff,US
+2620:0:250::,2620::250:ffff:ffff:ffff:ffff:ffff,US
+2620:0:260::,2620::260:ffff:ffff:ffff:ffff:ffff,US
+2620:0:270::,2620::270:ffff:ffff:ffff:ffff:ffff,US
+2620:0:280::,2620::280:ffff:ffff:ffff:ffff:ffff,US
+2620:0:290::,2620::290:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2b0::,2620::2b0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2c0::,2620::2c0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2d0::,2620::2d0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2f0::,2620::2f0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:300::,2620::300:ffff:ffff:ffff:ffff:ffff,US
+2620:0:320::,2620::320:ffff:ffff:ffff:ffff:ffff,US
+2620:0:350::,2620::353:ffff:ffff:ffff:ffff:ffff,US
+2620:0:360::,2620::361:ffff:ffff:ffff:ffff:ffff,US
+2620:0:380::,2620::380:ffff:ffff:ffff:ffff:ffff,US
+2620:0:390::,2620::390:ffff:ffff:ffff:ffff:ffff,US
+2620:0:3a0::,2620::3a0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:3b0::,2620::3b0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:3c0::,2620::3c0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:3d0::,2620::3d0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:3e0::,2620::3e0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:3f0::,2620::3f0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:400::,2620::57f:ffff:ffff:ffff:ffff:ffff,US
+2620:0:600::,2620::600:ffff:ffff:ffff:ffff:ffff,US
+2620:0:610::,2620::610:ffff:ffff:ffff:ffff:ffff,US
+2620:0:630::,2620::630:ffff:ffff:ffff:ffff:ffff,US
+2620:0:640::,2620::640:ffff:ffff:ffff:ffff:ffff,US
+2620:0:650::,2620::650:ffff:ffff:ffff:ffff:ffff,US
+2620:0:660::,2620::660:ffff:ffff:ffff:ffff:ffff,US
+2620:0:670::,2620::671:ffff:ffff:ffff:ffff:ffff,US
+2620:0:680::,2620::680:ffff:ffff:ffff:ffff:ffff,US
+2620:0:690::,2620::691:ffff:ffff:ffff:ffff:ffff,US
+2620:0:6a0::,2620::6a0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:6b0::,2620::6b0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:6c0::,2620::6c7:ffff:ffff:ffff:ffff:ffff,US
+2620:0:6d0::,2620::6d0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:6e0::,2620::6e0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:6f0::,2620::6f0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:700::,2620::77f:ffff:ffff:ffff:ffff:ffff,US
+2620:0:800::,2620::802:ffff:ffff:ffff:ffff:ffff,US
+2620:0:810::,2620::810:ffff:ffff:ffff:ffff:ffff,CA
+2620:0:820::,2620::820:ffff:ffff:ffff:ffff:ffff,US
+2620:0:840::,2620::840:ffff:ffff:ffff:ffff:ffff,US
+2620:0:850::,2620::850:ffff:ffff:ffff:ffff:ffff,US
+2620:0:860::,2620::863:ffff:ffff:ffff:ffff:ffff,US
+2620:0:870::,2620::877:ffff:ffff:ffff:ffff:ffff,US
+2620:0:880::,2620::880:ffff:ffff:ffff:ffff:ffff,US
+2620:0:890::,2620::890:ffff:ffff:ffff:ffff:ffff,US
+2620:0:8a0::,2620::8a0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:8d0::,2620::8d0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:8e0::,2620::8e0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:8f0::,2620::8f0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:900::,2620::900:ffff:ffff:ffff:ffff:ffff,US
+2620:0:910::,2620::910:ffff:ffff:ffff:ffff:ffff,US
+2620:0:920::,2620::920:ffff:ffff:ffff:ffff:ffff,US
+2620:0:930::,2620::930:ffff:ffff:ffff:ffff:ffff,US
+2620:0:940::,2620::940:ffff:ffff:ffff:ffff:ffff,US
+2620:0:950::,2620::950:ffff:ffff:ffff:ffff:ffff,US
+2620:0:960::,2620::960:ffff:ffff:ffff:ffff:ffff,US
+2620:0:970::,2620::970:ffff:ffff:ffff:ffff:ffff,US
+2620:0:980::,2620::980:ffff:ffff:ffff:ffff:ffff,US
+2620:0:990::,2620::990:ffff:ffff:ffff:ffff:ffff,US
+2620:0:9a0::,2620::9a0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:9b0::,2620::9b0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:9c0::,2620::9c0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:9e0::,2620::9e0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:9f0::,2620::9f0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:a00::,2620::a1f:ffff:ffff:ffff:ffff:ffff,US
+2620:0:b00::,2620::b00:ffff:ffff:ffff:ffff:ffff,US
+2620:0:b10::,2620::b13:ffff:ffff:ffff:ffff:ffff,US
+2620:0:b20::,2620::b20:ffff:ffff:ffff:ffff:ffff,US
+2620:0:b30::,2620::b30:ffff:ffff:ffff:ffff:ffff,US
+2620:0:b40::,2620::b40:ffff:ffff:ffff:ffff:ffff,US
+2620:0:b50::,2620::b50:ffff:ffff:ffff:ffff:ffff,US
+2620:0:b60::,2620::b61:ffff:ffff:ffff:ffff:ffff,US
+2620:0:b80::,2620::b80:ffff:ffff:ffff:ffff:ffff,US
+2620:0:b90::,2620::b90:ffff:ffff:ffff:ffff:ffff,US
+2620:0:ba0::,2620::ba0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:bb0::,2620::bb0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:bd0::,2620::bd0:ffff:ffff:ffff:ffff:ffff,CA
+2620:0:be0::,2620::be0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:bf0::,2620::bf0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:c10::,2620::c20:ffff:ffff:ffff:ffff:ffff,US
+2620:0:c30::,2620::c30:ffff:ffff:ffff:ffff:ffff,US
+2620:0:c40::,2620::c40:ffff:ffff:ffff:ffff:ffff,US
+2620:0:c60::,2620::c60:ffff:ffff:ffff:ffff:ffff,US
+2620:0:c70::,2620::c70:ffff:ffff:ffff:ffff:ffff,US
+2620:0:c80::,2620::c80:ffff:ffff:ffff:ffff:ffff,US
+2620:0:c90::,2620::ca0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:cb0::,2620::cb0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:cc0::,2620::ccf:ffff:ffff:ffff:ffff:ffff,US
+2620:0:ce0::,2620::ce0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:cf0::,2620::cf0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:d00::,2620::d00:ffff:ffff:ffff:ffff:ffff,US
+2620:0:d20::,2620::d20:ffff:ffff:ffff:ffff:ffff,US
+2620:0:d30::,2620::d30:ffff:ffff:ffff:ffff:ffff,US
+2620:0:d50::,2620::d50:ffff:ffff:ffff:ffff:ffff,US
+2620:0:d60::,2620::d63:ffff:ffff:ffff:ffff:ffff,US
+2620:0:d70::,2620::d77:ffff:ffff:ffff:ffff:ffff,US
+2620:0:d80::,2620::d80:ffff:ffff:ffff:ffff:ffff,US
+2620:0:d90::,2620::d90:ffff:ffff:ffff:ffff:ffff,US
+2620:0:dc0::,2620::dc0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:dd0::,2620::dd0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:de0::,2620::de0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:df0::,2620::df0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:e00::,2620::e00:ffff:ffff:ffff:ffff:ffff,US
+2620:0:e10::,2620::e10:ffff:ffff:ffff:ffff:ffff,US
+2620:0:e20::,2620::e23:ffff:ffff:ffff:ffff:ffff,US
+2620:0:e30::,2620::e30:ffff:ffff:ffff:ffff:ffff,US
+2620:0:e50::,2620::e50:ffff:ffff:ffff:ffff:ffff,US
+2620:0:e60::,2620::e60:ffff:ffff:ffff:ffff:ffff,US
+2620:0:e80::,2620::e80:ffff:ffff:ffff:ffff:ffff,US
+2620:0:e90::,2620::e90:ffff:ffff:ffff:ffff:ffff,US
+2620:0:ea0::,2620::eb0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:ed0::,2620::ed0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:ee0::,2620::ee0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:ef0::,2620::ef0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:f00::,2620::f7f:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1000::,2620::10ff:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1400::,2620::143f:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1500::,2620::157f:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1600::,2620::167f:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1700::,2620::170f:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1800::,2620::181f:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1a00::,2620::1a00:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1a10::,2620::1a10:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1a20::,2620::1a20:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1a30::,2620::1a30:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1a40::,2620::1a40:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1a50::,2620::1a50:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1a60::,2620::1a60:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1a70::,2620::1a70:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1a80::,2620::1a80:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1aa0::,2620::1aa0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1ab0::,2620::1ab0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1ac0::,2620::1ac0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1ad0::,2620::1ad7:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1ae0::,2620::1ae0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1af0::,2620::1af0:ffff:ffff:ffff:ffff:ffff,CA
+2620:0:1b00::,2620::1b07:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1c00::,2620::1cff:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2000::,2620::203f:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2100::,2620::213f:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2210::,2620::2210:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2220::,2620::2220:ffff:ffff:ffff:ffff:ffff,CA
+2620:0:2240::,2620::2240:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2250::,2620::2250:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2260::,2620::2260:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2270::,2620::2270:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2280::,2620::2280:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2290::,2620::2290:ffff:ffff:ffff:ffff:ffff,US
+2620:0:22a0::,2620::22a0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:22b0::,2620::22b0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:22c0::,2620::22c0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:22d0::,2620::22d0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:22e0::,2620::22e0:ffff:ffff:ffff:ffff:ffff,CA
+2620:0:22f0::,2620::22f0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2300::,2620::230f:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2400::,2620::24ff:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2800::,2620::2800:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2810::,2620::2810:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2820::,2620::2820:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2830::,2620::2830:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2840::,2620::2840:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2850::,2620::2850:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2860::,2620::2860:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2870::,2620::2870:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2880::,2620::2880:ffff:ffff:ffff:ffff:ffff,US
+2620:0:28a0::,2620::28a0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:28b0::,2620::28b0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:28c0::,2620::28c0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:28d0::,2620::28d0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:28f0::,2620::28f0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2900::,2620::290f:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2a00::,2620::2a1f:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2b00::,2620::2b00:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2b10::,2620::2b10:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2b20::,2620::2b20:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2b30::,2620::2b40:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2b50::,2620::2b50:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2b60::,2620::2b60:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2b70::,2620::2b8f:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2bc0::,2620::2bc3:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2be0::,2620::2be0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2bf0::,2620::2bf0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2d00::,2620::2d7f:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2e00::,2620::2e00:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2e10::,2620::2e10:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2e30::,2620::2e30:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2e40::,2620::2e40:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2e50::,2620::2e50:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2e60::,2620::2e60:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2e70::,2620::2e80:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2ea0::,2620::2ea0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2eb0::,2620::2eb0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2ed0::,2620::2ed0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2ee0::,2620::2ee0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2f00::,2620::2f7f:ffff:ffff:ffff:ffff:ffff,US
+2620:0:3000::,2620::31ff:ffff:ffff:ffff:ffff:ffff,US
+2620:0:5000::,2620::5000:ffff:ffff:ffff:ffff:ffff,US
+2620:0:5010::,2620::5010:ffff:ffff:ffff:ffff:ffff,US
+2620:0:5030::,2620::5030:ffff:ffff:ffff:ffff:ffff,US
+2620:0:5040::,2620::5040:ffff:ffff:ffff:ffff:ffff,US
+2620:0:5050::,2620::5050:ffff:ffff:ffff:ffff:ffff,US
+2620:0:5060::,2620::5060:ffff:ffff:ffff:ffff:ffff,CA
+2620:0:5070::,2620::5070:ffff:ffff:ffff:ffff:ffff,US
+2620:0:5080::,2620::5080:ffff:ffff:ffff:ffff:ffff,US
+2620:0:5090::,2620::5090:ffff:ffff:ffff:ffff:ffff,US
+2620:0:50a0::,2620::50a0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:50b0::,2620::50b0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:50c0::,2620::50c0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:50d0::,2620::50d1:ffff:ffff:ffff:ffff:ffff,US
+2620:0:50e0::,2620::50e0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:50f0::,2620::50f0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:5100::,2620::510f:ffff:ffff:ffff:ffff:ffff,US
+2620:0:5200::,2620::5200:ffff:ffff:ffff:ffff:ffff,US
+2620:0:5300::,2620::530f:ffff:ffff:ffff:ffff:ffff,US
+2620:0:aa00::,2620::aa00:ffff:ffff:ffff:ffff:ffff,US
+2620:1::,2620:1::ffff:ffff:ffff:ffff:ffff,US
+2620:1:4000::,2620:1:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:1:8000::,2620:1:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:1:c000::,2620:1:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:2::,2620:2::ffff:ffff:ffff:ffff:ffff,US
+2620:2:4000::,2620:2:4000:ffff:ffff:ffff:ffff:ffff,CA
+2620:2:8000::,2620:2:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:2:c000::,2620:2:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:3::,2620:3::ffff:ffff:ffff:ffff:ffff,US
+2620:3:4000::,2620:3:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:3:8000::,2620:3:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:3:c000::,2620:3:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:4::,2620:4::ffff:ffff:ffff:ffff:ffff,US
+2620:4:4000::,2620:4:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:4:8000::,2620:4:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:4:c000::,2620:4:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:5::,2620:5::ffff:ffff:ffff:ffff:ffff,US
+2620:5:4000::,2620:5:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:5:8000::,2620:5:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:5:c000::,2620:5:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:6::,2620:6::ffff:ffff:ffff:ffff:ffff,CA
+2620:6:4000::,2620:6:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:6:8000::,2620:6:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:6:c000::,2620:6:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:7::,2620:7::ffff:ffff:ffff:ffff:ffff,US
+2620:7:4000::,2620:7:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:7:8000::,2620:7:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:7:c000::,2620:7:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:8::,2620:8:7f:ffff:ffff:ffff:ffff:ffff,CA
+2620:8:8200::,2620:8:8200:ffff:ffff:ffff:ffff:ffff,US
+2620:9::,2620:9::ffff:ffff:ffff:ffff:ffff,US
+2620:9:4000::,2620:9:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:9:8000::,2620:9:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:9:c000::,2620:9:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:a::,2620:a::ffff:ffff:ffff:ffff:ffff,CA
+2620:a:4000::,2620:a:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:a:8000::,2620:a:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:a:c000::,2620:a:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:b::,2620:b::ffff:ffff:ffff:ffff:ffff,US
+2620:b:4000::,2620:b:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:b:8000::,2620:b:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:b:c000::,2620:b:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:c::,2620:c:3:ffff:ffff:ffff:ffff:ffff,US
+2620:c:4000::,2620:c:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:c:8000::,2620:c:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:c:c000::,2620:c:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:d::,2620:d::ffff:ffff:ffff:ffff:ffff,US
+2620:d:4000::,2620:d:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:d:8000::,2620:d:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:d:c000::,2620:d:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:e::,2620:e::ffff:ffff:ffff:ffff:ffff,US
+2620:e:4000::,2620:e:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:e:8000::,2620:e:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:e:c000::,2620:e:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:f::,2620:f:3:ffff:ffff:ffff:ffff:ffff,US
+2620:f:4000::,2620:f:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:f:8000::,2620:f:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:f:c000::,2620:f:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:10::,2620:10::ffff:ffff:ffff:ffff:ffff,US
+2620:10:4000::,2620:10:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:10:8000::,2620:10:8000:ffff:ffff:ffff:ffff:ffff,CA
+2620:10:c000::,2620:10:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:11::,2620:11::ffff:ffff:ffff:ffff:ffff,US
+2620:11:4000::,2620:11:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:11:8000::,2620:11:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:11:c000::,2620:11:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:12::,2620:12::ffff:ffff:ffff:ffff:ffff,US
+2620:12:4000::,2620:12:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:12:8000::,2620:12:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:12:c000::,2620:12:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:13::,2620:13::ffff:ffff:ffff:ffff:ffff,CA
+2620:13:4000::,2620:13:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:13:8000::,2620:13:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:13:c000::,2620:13:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:14::,2620:14::ffff:ffff:ffff:ffff:ffff,US
+2620:14:4000::,2620:14:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:14:8000::,2620:14:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:14:c000::,2620:14:c000:ffff:ffff:ffff:ffff:ffff,CA
+2620:15::,2620:15::ffff:ffff:ffff:ffff:ffff,US
+2620:15:4000::,2620:15:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:15:8000::,2620:15:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:15:c000::,2620:15:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:16::,2620:16::ffff:ffff:ffff:ffff:ffff,CA
+2620:16:4000::,2620:16:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:16:8000::,2620:16:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:16:c000::,2620:16:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:17::,2620:17::ffff:ffff:ffff:ffff:ffff,US
+2620:17:4000::,2620:17:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:17:8000::,2620:17:800f:ffff:ffff:ffff:ffff:ffff,US
+2620:17:c000::,2620:17:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:18::,2620:18::ffff:ffff:ffff:ffff:ffff,US
+2620:18:4000::,2620:18:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:18:8000::,2620:18:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:18:c000::,2620:18:c000:ffff:ffff:ffff:ffff:ffff,KN
+2620:19::,2620:19::ffff:ffff:ffff:ffff:ffff,US
+2620:19:4000::,2620:19:4000:ffff:ffff:ffff:ffff:ffff,CA
+2620:19:8000::,2620:19:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:19:c000::,2620:19:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:1a::,2620:1a::ffff:ffff:ffff:ffff:ffff,US
+2620:1a:4000::,2620:1a:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:1a:8000::,2620:1a:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:1a:c000::,2620:1a:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:1b::,2620:1b::ffff:ffff:ffff:ffff:ffff,US
+2620:1b:4000::,2620:1b:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:1b:8000::,2620:1b:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:1b:c000::,2620:1b:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:1c::,2620:1c::ffff:ffff:ffff:ffff:ffff,US
+2620:1c:4000::,2620:1c:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:1c:8000::,2620:1c:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:1c:c000::,2620:1c:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:1d::,2620:1d::ffff:ffff:ffff:ffff:ffff,US
+2620:1d:4000::,2620:1d:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:1d:8000::,2620:1d:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:1d:c000::,2620:1d:c000:ffff:ffff:ffff:ffff:ffff,CA
+2620:1e::,2620:1e::ffff:ffff:ffff:ffff:ffff,US
+2620:1e:4000::,2620:1e:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:1e:8000::,2620:1e:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:1e:c000::,2620:1e:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:1f::,2620:1f::ffff:ffff:ffff:ffff:ffff,US
+2620:1f:4000::,2620:1f:4000:ffff:ffff:ffff:ffff:ffff,CA
+2620:1f:8000::,2620:1f:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:1f:c000::,2620:1f:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:20::,2620:20::ffff:ffff:ffff:ffff:ffff,US
+2620:20:4000::,2620:20:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:20:8000::,2620:20:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:20:c000::,2620:20:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:21::,2620:21::ffff:ffff:ffff:ffff:ffff,US
+2620:21:4000::,2620:21:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:21:8000::,2620:21:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:21:c000::,2620:21:c000:ffff:ffff:ffff:ffff:ffff,CA
+2620:22::,2620:22::ffff:ffff:ffff:ffff:ffff,US
+2620:22:4000::,2620:22:4000:ffff:ffff:ffff:ffff:ffff,CA
+2620:22:8000::,2620:22:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:22:c000::,2620:22:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:23::,2620:23::ffff:ffff:ffff:ffff:ffff,US
+2620:23:4000::,2620:23:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:23:8000::,2620:23:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:23:c000::,2620:23:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:24::,2620:24:1f:ffff:ffff:ffff:ffff:ffff,US
+2620:24:8080::,2620:24:8080:ffff:ffff:ffff:ffff:ffff,US
+2620:25::,2620:25::ffff:ffff:ffff:ffff:ffff,US
+2620:25:4000::,2620:25:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:25:8000::,2620:25:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:25:c000::,2620:25:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:26::,2620:26::ffff:ffff:ffff:ffff:ffff,US
+2620:26:4000::,2620:26:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:26:8000::,2620:26:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:26:c000::,2620:26:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:27::,2620:27:f:ffff:ffff:ffff:ffff:ffff,US
+2620:27:8080::,2620:27:8080:ffff:ffff:ffff:ffff:ffff,US
+2620:28::,2620:28::ffff:ffff:ffff:ffff:ffff,US
+2620:28:4000::,2620:28:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:28:8000::,2620:28:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:28:c000::,2620:28:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:29::,2620:29::ffff:ffff:ffff:ffff:ffff,US
+2620:29:4000::,2620:29:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:29:8000::,2620:29:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:29:c000::,2620:29:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:2a::,2620:2a::ffff:ffff:ffff:ffff:ffff,US
+2620:2a:4000::,2620:2a:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:2a:8000::,2620:2a:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:2a:c000::,2620:2a:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:2b::,2620:2b::ffff:ffff:ffff:ffff:ffff,US
+2620:2b:4000::,2620:2b:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:2b:8000::,2620:2b:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:2b:c000::,2620:2b:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:2c::,2620:2c:f:ffff:ffff:ffff:ffff:ffff,US
+2620:2c:8080::,2620:2c:8080:ffff:ffff:ffff:ffff:ffff,US
+2620:2d::,2620:2d::ffff:ffff:ffff:ffff:ffff,US
+2620:2d:4000::,2620:2d:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:2d:8000::,2620:2d:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:2d:c000::,2620:2d:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:2e::,2620:2e:3f:ffff:ffff:ffff:ffff:ffff,US
+2620:2e:8080::,2620:2e:8080:ffff:ffff:ffff:ffff:ffff,US
+2620:2f::,2620:2f::ffff:ffff:ffff:ffff:ffff,CA
+2620:2f:4000::,2620:2f:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:2f:8000::,2620:2f:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:2f:c000::,2620:2f:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:30::,2620:30::ffff:ffff:ffff:ffff:ffff,US
+2620:30:4000::,2620:30:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:30:8000::,2620:30:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:30:c000::,2620:30:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:31::,2620:31::ffff:ffff:ffff:ffff:ffff,US
+2620:31:4000::,2620:31:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:31:8000::,2620:31:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:31:c000::,2620:31:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:32::,2620:32::ffff:ffff:ffff:ffff:ffff,US
+2620:32:4000::,2620:32:4000:ffff:ffff:ffff:ffff:ffff,CA
+2620:32:8000::,2620:32:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:32:c000::,2620:32:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:33::,2620:33::ffff:ffff:ffff:ffff:ffff,US
+2620:33:4000::,2620:33:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:33:8000::,2620:33:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:33:c000::,2620:33:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:34::,2620:34::ffff:ffff:ffff:ffff:ffff,US
+2620:34:4000::,2620:34:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:34:8000::,2620:34:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:34:c000::,2620:34:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:35::,2620:35::ffff:ffff:ffff:ffff:ffff,US
+2620:35:4000::,2620:35:400f:ffff:ffff:ffff:ffff:ffff,CA
+2620:35:8000::,2620:35:8000:ffff:ffff:ffff:ffff:ffff,CA
+2620:35:c000::,2620:35:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:36::,2620:36::ffff:ffff:ffff:ffff:ffff,US
+2620:36:4000::,2620:36:400f:ffff:ffff:ffff:ffff:ffff,CA
+2620:36:8000::,2620:36:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:36:c000::,2620:36:c000:ffff:ffff:ffff:ffff:ffff,CA
+2620:37::,2620:37::ffff:ffff:ffff:ffff:ffff,US
+2620:37:4000::,2620:37:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:37:8000::,2620:37:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:37:c000::,2620:37:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:38::,2620:38::ffff:ffff:ffff:ffff:ffff,US
+2620:38:4000::,2620:38:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:38:8000::,2620:38:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:38:c000::,2620:38:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:39::,2620:39::ffff:ffff:ffff:ffff:ffff,US
+2620:39:4000::,2620:39:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:39:8000::,2620:39:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:39:c000::,2620:39:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:3a::,2620:3a::ffff:ffff:ffff:ffff:ffff,US
+2620:3a:4000::,2620:3a:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:3a:8000::,2620:3a:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:3a:c000::,2620:3a:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:3b::,2620:3b::ffff:ffff:ffff:ffff:ffff,US
+2620:3b:4000::,2620:3b:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:3b:8000::,2620:3b:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:3b:c000::,2620:3b:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:3c::,2620:3c:3f:ffff:ffff:ffff:ffff:ffff,US
+2620:3c:8080::,2620:3c:8080:ffff:ffff:ffff:ffff:ffff,US
+2620:3d::,2620:3d::ffff:ffff:ffff:ffff:ffff,US
+2620:3d:4000::,2620:3d:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:3d:8000::,2620:3d:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:3e::,2620:3e::ffff:ffff:ffff:ffff:ffff,US
+2620:3e:8000::,2620:3e:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:3f::,2620:3f::ffff:ffff:ffff:ffff:ffff,US
+2620:3f:8000::,2620:3f:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:40::,2620:40::ffff:ffff:ffff:ffff:ffff,US
+2620:40:8000::,2620:40:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:41::,2620:41::ffff:ffff:ffff:ffff:ffff,US
+2620:41:8000::,2620:41:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:42::,2620:42::ffff:ffff:ffff:ffff:ffff,US
+2620:42:8000::,2620:42:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:43::,2620:43::ffff:ffff:ffff:ffff:ffff,US
+2620:43:8000::,2620:43:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:44::,2620:44:1:ffff:ffff:ffff:ffff:ffff,US
+2620:44:8000::,2620:44:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:45::,2620:45::ffff:ffff:ffff:ffff:ffff,CA
+2620:45:8000::,2620:45:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:46::,2620:46::ffff:ffff:ffff:ffff:ffff,US
+2620:46:8000::,2620:46:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:47::,2620:47::ffff:ffff:ffff:ffff:ffff,US
+2620:47:8000::,2620:47:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:48::,2620:48::ffff:ffff:ffff:ffff:ffff,US
+2620:48:8000::,2620:48:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:49::,2620:49:f:ffff:ffff:ffff:ffff:ffff,CA
+2620:49:8080::,2620:49:8080:ffff:ffff:ffff:ffff:ffff,US
+2620:4a::,2620:4a::ffff:ffff:ffff:ffff:ffff,US
+2620:4a:8000::,2620:4a:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:4b::,2620:4b::ffff:ffff:ffff:ffff:ffff,US
+2620:4b:8000::,2620:4b:800f:ffff:ffff:ffff:ffff:ffff,US
+2620:4c::,2620:4c:1:ffff:ffff:ffff:ffff:ffff,US
+2620:4c:8000::,2620:4c:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:4d::,2620:4d::ffff:ffff:ffff:ffff:ffff,US
+2620:4d:8000::,2620:4d:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:4e::,2620:4e::ffff:ffff:ffff:ffff:ffff,US
+2620:4e:8000::,2620:4e:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:4f::,2620:4f::ffff:ffff:ffff:ffff:ffff,US
+2620:4f:8000::,2620:4f:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:50::,2620:50:f:ffff:ffff:ffff:ffff:ffff,US
+2620:50:8080::,2620:50:8080:ffff:ffff:ffff:ffff:ffff,US
+2620:51::,2620:51::ffff:ffff:ffff:ffff:ffff,US
+2620:51:8000::,2620:51:8000:ffff:ffff:ffff:ffff:ffff,CA
+2620:52::,2620:52:3:ffff:ffff:ffff:ffff:ffff,US
+2620:52:8000::,2620:52:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:53::,2620:53::ffff:ffff:ffff:ffff:ffff,US
+2620:53:8000::,2620:53:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:54::,2620:54::ffff:ffff:ffff:ffff:ffff,US
+2620:54:8000::,2620:54:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:55::,2620:55::ffff:ffff:ffff:ffff:ffff,US
+2620:55:8000::,2620:55:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:56::,2620:56::ffff:ffff:ffff:ffff:ffff,US
+2620:56:8000::,2620:56:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:57::,2620:57::ffff:ffff:ffff:ffff:ffff,US
+2620:57:8000::,2620:57:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:58::,2620:58:ff:ffff:ffff:ffff:ffff:ffff,US
+2620:58:8800::,2620:58:8800:ffff:ffff:ffff:ffff:ffff,US
+2620:59::,2620:59::ffff:ffff:ffff:ffff:ffff,US
+2620:59:8000::,2620:59:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:5a::,2620:5a::ffff:ffff:ffff:ffff:ffff,US
+2620:5a:8000::,2620:5a:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:5b::,2620:5b::ffff:ffff:ffff:ffff:ffff,US
+2620:5b:8000::,2620:5b:8000:ffff:ffff:ffff:ffff:ffff,CA
+2620:5c::,2620:5c::ffff:ffff:ffff:ffff:ffff,US
+2620:5c:8000::,2620:5c:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:5d::,2620:5d::ffff:ffff:ffff:ffff:ffff,US
+2620:5d:8000::,2620:5d:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:5e::,2620:5e::ffff:ffff:ffff:ffff:ffff,US
+2620:5e:8000::,2620:5e:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:5f::,2620:5f::ffff:ffff:ffff:ffff:ffff,US
+2620:5f:8000::,2620:5f:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:60::,2620:60::ffff:ffff:ffff:ffff:ffff,US
+2620:60:8000::,2620:60:8000:ffff:ffff:ffff:ffff:ffff,CA
+2620:61::,2620:61::ffff:ffff:ffff:ffff:ffff,CA
+2620:61:8000::,2620:61:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:62::,2620:62::ffff:ffff:ffff:ffff:ffff,US
+2620:62:8000::,2620:62:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:63::,2620:63::ffff:ffff:ffff:ffff:ffff,US
+2620:63:8000::,2620:63:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:64::,2620:64::ffff:ffff:ffff:ffff:ffff,US
+2620:64:8000::,2620:64:8000:ffff:ffff:ffff:ffff:ffff,TW
+2620:65::,2620:65::ffff:ffff:ffff:ffff:ffff,US
+2620:65:8000::,2620:65:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:66::,2620:66::ffff:ffff:ffff:ffff:ffff,CA
+2620:66:8000::,2620:66:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:67::,2620:67::ffff:ffff:ffff:ffff:ffff,US
+2620:67:8000::,2620:67:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:68::,2620:68::ffff:ffff:ffff:ffff:ffff,US
+2620:68:8000::,2620:68:8000:ffff:ffff:ffff:ffff:ffff,CA
+2620:69::,2620:69::ffff:ffff:ffff:ffff:ffff,US
+2620:69:8000::,2620:69:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:6a::,2620:6a::ffff:ffff:ffff:ffff:ffff,US
+2620:6a:8000::,2620:6a:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:6b::,2620:6b::ffff:ffff:ffff:ffff:ffff,US
+2620:6b:8000::,2620:6b:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:6c::,2620:6c:3f:ffff:ffff:ffff:ffff:ffff,US
+2620:6c:8080::,2620:6c:8080:ffff:ffff:ffff:ffff:ffff,US
+2620:6d:40::,2620:6d:40:ffff:ffff:ffff:ffff:ffff,US
+2620:6d:8000::,2620:6d:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:6e::,2620:6e::ffff:ffff:ffff:ffff:ffff,US
+2620:6e:8000::,2620:6e:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:6f::,2620:6f::ffff:ffff:ffff:ffff:ffff,US
+2620:6f:8000::,2620:6f:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:70::,2620:70::ffff:ffff:ffff:ffff:ffff,US
+2620:70:8000::,2620:70:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:71::,2620:71::ffff:ffff:ffff:ffff:ffff,US
+2620:71:8000::,2620:71:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:72::,2620:72::ffff:ffff:ffff:ffff:ffff,US
+2620:72:8000::,2620:72:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:73::,2620:73::ffff:ffff:ffff:ffff:ffff,US
+2620:73:8000::,2620:73:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:74::,2620:74:1f:ffff:ffff:ffff:ffff:ffff,US
+2620:74:8080::,2620:74:8080:ffff:ffff:ffff:ffff:ffff,US
+2620:75::,2620:75::ffff:ffff:ffff:ffff:ffff,US
+2620:75:8000::,2620:75:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:76::,2620:76::ffff:ffff:ffff:ffff:ffff,US
+2620:76:8000::,2620:76:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:77::,2620:77::ffff:ffff:ffff:ffff:ffff,US
+2620:77:8000::,2620:77:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:78::,2620:78::ffff:ffff:ffff:ffff:ffff,US
+2620:78:8000::,2620:78:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:79::,2620:79::ffff:ffff:ffff:ffff:ffff,US
+2620:79:8000::,2620:79:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:7a::,2620:7a::ffff:ffff:ffff:ffff:ffff,US
+2620:7a:8000::,2620:7a:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:7b::,2620:7b::ffff:ffff:ffff:ffff:ffff,US
+2620:7b:8000::,2620:7b:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:7b:e000::,2620:7b:e000:ffff:ffff:ffff:ffff:ffff,US
+2620:7c:4000::,2620:7c:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:7c:a000::,2620:7c:a000:ffff:ffff:ffff:ffff:ffff,US
+2620:7d::,2620:7d::ffff:ffff:ffff:ffff:ffff,US
+2620:7d:8000::,2620:7d:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:7e::,2620:7e:f:ffff:ffff:ffff:ffff:ffff,US
+2620:7e:60c0::,2620:7e:60c0:ffff:ffff:ffff:ffff:ffff,US
+2620:7e:c080::,2620:7e:c080:ffff:ffff:ffff:ffff:ffff,US
+2620:7f:2040::,2620:7f:2040:ffff:ffff:ffff:ffff:ffff,US
+2620:7f:8000::,2620:7f:8000:ffff:ffff:ffff:ffff:ffff,CA
+2620:80::,2620:80::ffff:ffff:ffff:ffff:ffff,US
+2620:80:8000::,2620:80:8000:ffff:ffff:ffff:ffff:ffff,CA
+2620:81::,2620:81::ffff:ffff:ffff:ffff:ffff,US
+2620:81:8000::,2620:81:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:82::,2620:82::ffff:ffff:ffff:ffff:ffff,US
+2620:82:8000::,2620:82:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:83::,2620:83::ffff:ffff:ffff:ffff:ffff,US
+2620:83:8000::,2620:83:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:84::,2620:84:1:ffff:ffff:ffff:ffff:ffff,US
+2620:84:8000::,2620:84:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:85::,2620:85::ffff:ffff:ffff:ffff:ffff,US
+2620:85:8000::,2620:85:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:86::,2620:86::ffff:ffff:ffff:ffff:ffff,US
+2620:86:8000::,2620:86:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:87::,2620:87::ffff:ffff:ffff:ffff:ffff,US
+2620:87:8000::,2620:87:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:88::,2620:88::ffff:ffff:ffff:ffff:ffff,US
+2620:88:8000::,2620:88:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:89::,2620:89::ffff:ffff:ffff:ffff:ffff,US
+2620:89:8000::,2620:89:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:8a::,2620:8a::ffff:ffff:ffff:ffff:ffff,US
+2620:8a:8000::,2620:8a:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:8b::,2620:8b::ffff:ffff:ffff:ffff:ffff,US
+2620:8b:8000::,2620:8b:8000:ffff:ffff:ffff:ffff:ffff,CA
+2620:8c::,2620:8c::ffff:ffff:ffff:ffff:ffff,US
+2620:8c:8000::,2620:8c:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:8d::,2620:8d::ffff:ffff:ffff:ffff:ffff,US
+2620:8d:8000::,2620:8d:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:8e::,2620:8e::ffff:ffff:ffff:ffff:ffff,US
+2620:8e:8000::,2620:8e:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:8f::,2620:8f::ffff:ffff:ffff:ffff:ffff,US
+2620:8f:8000::,2620:8f:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:90::,2620:90::ffff:ffff:ffff:ffff:ffff,CA
+2620:90:8000::,2620:90:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:91::,2620:91::ffff:ffff:ffff:ffff:ffff,US
+2620:91:8000::,2620:91:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:92::,2620:92:f:ffff:ffff:ffff:ffff:ffff,US
+2620:92:8000::,2620:92:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:93::,2620:93::ffff:ffff:ffff:ffff:ffff,US
+2620:93:8000::,2620:93:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:94::,2620:94::ffff:ffff:ffff:ffff:ffff,US
+2620:94:8000::,2620:94:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:95::,2620:95::ffff:ffff:ffff:ffff:ffff,US
+2620:95:8000::,2620:95:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:96::,2620:96::ffff:ffff:ffff:ffff:ffff,US
+2620:96:8000::,2620:96:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:97::,2620:97::ffff:ffff:ffff:ffff:ffff,US
+2620:97:8000::,2620:97:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:98::,2620:98::ffff:ffff:ffff:ffff:ffff,US
+2620:98:8000::,2620:98:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:99::,2620:99::ffff:ffff:ffff:ffff:ffff,US
+2620:99:8000::,2620:99:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:9a::,2620:9a::ffff:ffff:ffff:ffff:ffff,CA
+2620:9a:8000::,2620:9a:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:9b::,2620:9b::ffff:ffff:ffff:ffff:ffff,US
+2620:9b:8000::,2620:9b:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:9c::,2620:9c::ffff:ffff:ffff:ffff:ffff,US
+2620:9c:8000::,2620:9c:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:9d::,2620:9d::ffff:ffff:ffff:ffff:ffff,US
+2620:9d:8000::,2620:9d:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:9e::,2620:9e::ffff:ffff:ffff:ffff:ffff,US
+2620:9e:8000::,2620:9e:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:9f::,2620:9f:ff:ffff:ffff:ffff:ffff:ffff,US
+2620:9f:8000::,2620:9f:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:a0::,2620:a0::ffff:ffff:ffff:ffff:ffff,US
+2620:a0:8000::,2620:a0:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:a1::,2620:a1::ffff:ffff:ffff:ffff:ffff,US
+2620:a1:8000::,2620:a1:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:a2::,2620:a2::ffff:ffff:ffff:ffff:ffff,US
+2620:a2:8000::,2620:a2:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:a3::,2620:a3::ffff:ffff:ffff:ffff:ffff,US
+2620:a3:8000::,2620:a3:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:a4::,2620:a4:f:ffff:ffff:ffff:ffff:ffff,US
+2620:a4:8080::,2620:a4:8080:ffff:ffff:ffff:ffff:ffff,US
+2620:a5::,2620:a5::ffff:ffff:ffff:ffff:ffff,US
+2620:a5:8000::,2620:a5:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:a6::,2620:a6::ffff:ffff:ffff:ffff:ffff,US
+2620:a6:8000::,2620:a6:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:a7::,2620:a7::ffff:ffff:ffff:ffff:ffff,US
+2620:a7:8000::,2620:a7:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:a8::,2620:a8::ffff:ffff:ffff:ffff:ffff,US
+2620:a8:8000::,2620:a8:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:a9::,2620:a9::ffff:ffff:ffff:ffff:ffff,US
+2620:a9:8000::,2620:a9:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:aa::,2620:aa::ffff:ffff:ffff:ffff:ffff,US
+2620:aa:8000::,2620:aa:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:ab::,2620:ab::ffff:ffff:ffff:ffff:ffff,US
+2620:ab:8000::,2620:ab:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:ac::,2620:ac::ffff:ffff:ffff:ffff:ffff,US
+2620:ac:8000::,2620:ac:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:ad::,2620:ad::ffff:ffff:ffff:ffff:ffff,US
+2620:ad:8000::,2620:ad:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:ae::,2620:ae::ffff:ffff:ffff:ffff:ffff,CA
+2620:ae:8000::,2620:ae:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:af::,2620:af::ffff:ffff:ffff:ffff:ffff,US
+2620:af:8000::,2620:af:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:b0::,2620:b0::ffff:ffff:ffff:ffff:ffff,CA
+2620:b0:8000::,2620:b0:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:b1::,2620:b1::ffff:ffff:ffff:ffff:ffff,US
+2620:b1:8000::,2620:b1:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:b2::,2620:b2::ffff:ffff:ffff:ffff:ffff,US
+2620:b2:8000::,2620:b2:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:b3::,2620:b3::ffff:ffff:ffff:ffff:ffff,US
+2620:b3:8000::,2620:b3:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:b4::,2620:b4::ffff:ffff:ffff:ffff:ffff,US
+2620:b4:8000::,2620:b4:8000:ffff:ffff:ffff:ffff:ffff,CA
+2620:b5::,2620:b5::ffff:ffff:ffff:ffff:ffff,US
+2620:b5:8000::,2620:b5:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:b6::,2620:b6::ffff:ffff:ffff:ffff:ffff,US
+2620:b6:8000::,2620:b6:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:b7::,2620:b7::ffff:ffff:ffff:ffff:ffff,US
+2620:b7:8000::,2620:b7:8000:ffff:ffff:ffff:ffff:ffff,CA
+2620:b8::,2620:b8::ffff:ffff:ffff:ffff:ffff,US
+2620:b8:8000::,2620:b8:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:b9::,2620:b9::ffff:ffff:ffff:ffff:ffff,US
+2620:b9:8000::,2620:b9:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:ba::,2620:ba::ffff:ffff:ffff:ffff:ffff,US
+2620:ba:8000::,2620:ba:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:bb::,2620:bb::ffff:ffff:ffff:ffff:ffff,US
+2620:bb:8000::,2620:bb:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:bc::,2620:bc::ffff:ffff:ffff:ffff:ffff,US
+2620:bc:8000::,2620:bc:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:bd::,2620:bd::ffff:ffff:ffff:ffff:ffff,CA
+2620:bd:8000::,2620:bd:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:be::,2620:be::ffff:ffff:ffff:ffff:ffff,US
+2620:be:8000::,2620:be:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:bf::,2620:bf::ffff:ffff:ffff:ffff:ffff,US
+2620:bf:8000::,2620:bf:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:c0::,2620:c0::ffff:ffff:ffff:ffff:ffff,US
+2620:c0:8000::,2620:c0:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:c1::,2620:c1::ffff:ffff:ffff:ffff:ffff,US
+2620:c1:8000::,2620:c1:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:c2::,2620:c2::ffff:ffff:ffff:ffff:ffff,CA
+2620:c2:8000::,2620:c2:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:c3::,2620:c3::ffff:ffff:ffff:ffff:ffff,US
+2620:c3:8000::,2620:c3:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:c4::,2620:c4::ffff:ffff:ffff:ffff:ffff,US
+2620:c4:8000::,2620:c4:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:c5::,2620:c5::ffff:ffff:ffff:ffff:ffff,US
+2620:c5:8000::,2620:c5:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:c6::,2620:c6::ffff:ffff:ffff:ffff:ffff,US
+2620:c6:8000::,2620:c6:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:c7::,2620:c7::ffff:ffff:ffff:ffff:ffff,US
+2620:c7:8000::,2620:c7:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:c8::,2620:c8::ffff:ffff:ffff:ffff:ffff,US
+2620:c8:8000::,2620:c8:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:c9::,2620:c9::ffff:ffff:ffff:ffff:ffff,US
+2620:c9:8000::,2620:c9:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:ca::,2620:ca::ffff:ffff:ffff:ffff:ffff,US
+2620:ca:8000::,2620:ca:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:cb::,2620:cb::ffff:ffff:ffff:ffff:ffff,US
+2620:cb:8000::,2620:cb:8000:ffff:ffff:ffff:ffff:ffff,CA
+2620:cc::,2620:cc::ffff:ffff:ffff:ffff:ffff,US
+2620:cc:8000::,2620:cc:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:cd::,2620:cd::ffff:ffff:ffff:ffff:ffff,US
+2620:cd:8000::,2620:cd:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:ce::,2620:ce::ffff:ffff:ffff:ffff:ffff,US
+2620:ce:8000::,2620:ce:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:cf::,2620:cf::ffff:ffff:ffff:ffff:ffff,US
+2620:cf:8000::,2620:cf:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:d0::,2620:d0::ffff:ffff:ffff:ffff:ffff,US
+2620:d0:8000::,2620:d0:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:d1::,2620:d1::ffff:ffff:ffff:ffff:ffff,US
+2620:d1:8000::,2620:d1:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:d2::,2620:d2::ffff:ffff:ffff:ffff:ffff,US
+2620:d2:8000::,2620:d2:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:d3::,2620:d3::ffff:ffff:ffff:ffff:ffff,US
+2620:d3:8000::,2620:d3:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:d4::,2620:d4::ffff:ffff:ffff:ffff:ffff,US
+2620:d4:8000::,2620:d4:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:d5::,2620:d5::ffff:ffff:ffff:ffff:ffff,US
+2620:d5:8000::,2620:d5:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:d6::,2620:d6::ffff:ffff:ffff:ffff:ffff,US
+2620:d6:8000::,2620:d6:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:d7::,2620:d7::ffff:ffff:ffff:ffff:ffff,US
+2620:d7:8000::,2620:d7:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:d8::,2620:d8::ffff:ffff:ffff:ffff:ffff,US
+2620:d8:8000::,2620:d8:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:d9::,2620:d9::ffff:ffff:ffff:ffff:ffff,US
+2620:d9:8000::,2620:d9:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:da::,2620:da::ffff:ffff:ffff:ffff:ffff,US
+2620:da:8000::,2620:da:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:db::,2620:db::ffff:ffff:ffff:ffff:ffff,US
+2620:db:8000::,2620:db:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:dc::,2620:dc::ffff:ffff:ffff:ffff:ffff,US
+2620:dc:8::,2620:dc:8:ffff:ffff:ffff:ffff:ffff,US
+2620:dc:8000::,2620:dc:8000:ffff:ffff:ffff:ffff:ffff,CA
+2620:dd::,2620:dd::ffff:ffff:ffff:ffff:ffff,CA
+2620:dd:8000::,2620:dd:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:de::,2620:de::ffff:ffff:ffff:ffff:ffff,US
+2620:de:8000::,2620:de:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:df::,2620:df::ffff:ffff:ffff:ffff:ffff,US
+2620:df:8000::,2620:df:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:e0::,2620:e0::ffff:ffff:ffff:ffff:ffff,US
+2620:e0:8000::,2620:e0:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:e1::,2620:e1::ffff:ffff:ffff:ffff:ffff,US
+2620:e1:8000::,2620:e1:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:e2::,2620:e2::ffff:ffff:ffff:ffff:ffff,US
+2620:e2:8000::,2620:e2:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:e3::,2620:e3::ffff:ffff:ffff:ffff:ffff,US
+2620:e3:8000::,2620:e3:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:e4::,2620:e4::ffff:ffff:ffff:ffff:ffff,US
+2620:e4:8000::,2620:e4:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:e5::,2620:e5::ffff:ffff:ffff:ffff:ffff,US
+2620:e5:8000::,2620:e5:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:e6::,2620:e6::ffff:ffff:ffff:ffff:ffff,US
+2620:e6:8000::,2620:e6:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:e7::,2620:e7::ffff:ffff:ffff:ffff:ffff,US
+2620:e7:8000::,2620:e7:8000:ffff:ffff:ffff:ffff:ffff,CA
+2620:e8::,2620:e8::ffff:ffff:ffff:ffff:ffff,US
+2620:e8:8000::,2620:e8:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:e9::,2620:e9::ffff:ffff:ffff:ffff:ffff,US
+2620:e9:8000::,2620:e9:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:ea::,2620:ea:f:ffff:ffff:ffff:ffff:ffff,US
+2620:ea:8000::,2620:ea:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:eb::,2620:eb::ffff:ffff:ffff:ffff:ffff,US
+2620:eb:8000::,2620:eb:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:ec::,2620:ec::ffff:ffff:ffff:ffff:ffff,US
+2620:ec:8000::,2620:ec:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:ed::,2620:ed::ffff:ffff:ffff:ffff:ffff,US
+2620:ed:8000::,2620:ed:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:ee::,2620:ee::ffff:ffff:ffff:ffff:ffff,US
+2620:ee:8000::,2620:ee:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:ef::,2620:ef::ffff:ffff:ffff:ffff:ffff,US
+2620:ef:8000::,2620:ef:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:f0::,2620:f0::ffff:ffff:ffff:ffff:ffff,US
+2620:f0:8000::,2620:f0:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:f1::,2620:f1::ffff:ffff:ffff:ffff:ffff,US
+2620:f1:8000::,2620:f1:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:f2::,2620:f2::ffff:ffff:ffff:ffff:ffff,CA
+2620:f2:8000::,2620:f2:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:f3::,2620:f3::ffff:ffff:ffff:ffff:ffff,US
+2620:f3:8000::,2620:f3:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:f4::,2620:f4::ffff:ffff:ffff:ffff:ffff,US
+2620:f4:8000::,2620:f4:8000:ffff:ffff:ffff:ffff:ffff,CA
+2620:f5::,2620:f5::ffff:ffff:ffff:ffff:ffff,US
+2620:f5:8000::,2620:f5:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:f6::,2620:f6::ffff:ffff:ffff:ffff:ffff,CA
+2620:f6:8000::,2620:f6:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:f7::,2620:f7::ffff:ffff:ffff:ffff:ffff,US
+2620:f7:8000::,2620:f7:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:f8::,2620:f8::ffff:ffff:ffff:ffff:ffff,US
+2620:f8:8000::,2620:f8:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:f9::,2620:f9:f:ffff:ffff:ffff:ffff:ffff,US
+2620:f9:8000::,2620:f9:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:fa::,2620:fa::ffff:ffff:ffff:ffff:ffff,US
+2620:fa:8000::,2620:fa:8000:ffff:ffff:ffff:ffff:ffff,CA
+2620:fb::,2620:fb::ffff:ffff:ffff:ffff:ffff,US
+2620:fb:8000::,2620:fb:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:fc::,2620:fc::ffff:ffff:ffff:ffff:ffff,CA
+2620:fc:8000::,2620:fc:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:fd::,2620:fd::ffff:ffff:ffff:ffff:ffff,CA
+2620:fd:8000::,2620:fd:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:fe::,2620:fe:ff:ffff:ffff:ffff:ffff:ffff,US
+2620:fe:8000::,2620:fe:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:ff::,2620:ff::ffff:ffff:ffff:ffff:ffff,US
+2620:100::,2620:100:f:ffff:ffff:ffff:ffff:ffff,US
+2620:100:1000::,2620:100:1001:ffff:ffff:ffff:ffff:ffff,US
+2620:100:3000::,2620:100:3007:ffff:ffff:ffff:ffff:ffff,US
+2620:100:4000::,2620:100:403f:ffff:ffff:ffff:ffff:ffff,US
+2620:100:5000::,2620:100:5007:ffff:ffff:ffff:ffff:ffff,US
+2620:100:6000::,2620:100:600f:ffff:ffff:ffff:ffff:ffff,US
+2620:100:7000::,2620:100:700f:ffff:ffff:ffff:ffff:ffff,US
+2620:100:8000::,2620:100:8003:ffff:ffff:ffff:ffff:ffff,US
+2620:100:9000::,2620:100:900f:ffff:ffff:ffff:ffff:ffff,US
+2620:100:a000::,2620:100:a00f:ffff:ffff:ffff:ffff:ffff,US
+2620:100:c000::,2620:100:c03f:ffff:ffff:ffff:ffff:ffff,US
+2620:100:d000::,2620:100:d00f:ffff:ffff:ffff:ffff:ffff,US
+2620:100:e000::,2620:100:e00f:ffff:ffff:ffff:ffff:ffff,US
+2620:100:f000::,2620:100:f00f:ffff:ffff:ffff:ffff:ffff,US
+2620:101::,2620:101:3:ffff:ffff:ffff:ffff:ffff,US
+2620:101:1000::,2620:101:103f:ffff:ffff:ffff:ffff:ffff,US
+2620:101:2000::,2620:101:201f:ffff:ffff:ffff:ffff:ffff,US
+2620:101:3000::,2620:101:303f:ffff:ffff:ffff:ffff:ffff,US
+2620:101:4000::,2620:101:403f:ffff:ffff:ffff:ffff:ffff,US
+2620:101:5000::,2620:101:503f:ffff:ffff:ffff:ffff:ffff,US
+2620:101:6000::,2620:101:6001:ffff:ffff:ffff:ffff:ffff,US
+2620:101:7000::,2620:101:7001:ffff:ffff:ffff:ffff:ffff,US
+2620:101:8000::,2620:101:80ff:ffff:ffff:ffff:ffff:ffff,US
+2620:101:9000::,2620:101:900f:ffff:ffff:ffff:ffff:ffff,US
+2620:101:a000::,2620:101:a001:ffff:ffff:ffff:ffff:ffff,US
+2620:101:b000::,2620:101:b07f:ffff:ffff:ffff:ffff:ffff,US
+2620:101:c000::,2620:101:c00f:ffff:ffff:ffff:ffff:ffff,CA
+2620:101:d000::,2620:101:d007:ffff:ffff:ffff:ffff:ffff,US
+2620:101:e000::,2620:101:e00f:ffff:ffff:ffff:ffff:ffff,US
+2620:101:f000::,2620:101:f001:ffff:ffff:ffff:ffff:ffff,CA
+2620:102::,2620:102:f:ffff:ffff:ffff:ffff:ffff,US
+2620:102:2000::,2620:102:200f:ffff:ffff:ffff:ffff:ffff,US
+2620:102:3000::,2620:102:300f:ffff:ffff:ffff:ffff:ffff,US
+2620:102:4000::,2620:102:403f:ffff:ffff:ffff:ffff:ffff,US
+2620:102:5000::,2620:102:501f:ffff:ffff:ffff:ffff:ffff,US
+2620:102:6000::,2620:102:6003:ffff:ffff:ffff:ffff:ffff,US
+2620:102:7000::,2620:102:700f:ffff:ffff:ffff:ffff:ffff,US
+2620:102:8000::,2620:102:800f:ffff:ffff:ffff:ffff:ffff,US
+2620:102:9000::,2620:102:90ff:ffff:ffff:ffff:ffff:ffff,US
+2620:102:a000::,2620:102:a01f:ffff:ffff:ffff:ffff:ffff,US
+2620:102:b000::,2620:102:b001:ffff:ffff:ffff:ffff:ffff,US
+2620:102:c000::,2620:102:c007:ffff:ffff:ffff:ffff:ffff,US
+2620:102:d000::,2620:102:d07f:ffff:ffff:ffff:ffff:ffff,US
+2620:102:e000::,2620:102:e00f:ffff:ffff:ffff:ffff:ffff,US
+2620:102:f000::,2620:102:f003:ffff:ffff:ffff:ffff:ffff,US
+2620:103::,2620:103:7:ffff:ffff:ffff:ffff:ffff,US
+2620:103:1000::,2620:103:100f:ffff:ffff:ffff:ffff:ffff,US
+2620:103:2000::,2620:103:200f:ffff:ffff:ffff:ffff:ffff,CA
+2620:103:3000::,2620:103:30ff:ffff:ffff:ffff:ffff:ffff,US
+2620:103:4000::,2620:103:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:103:5000::,2620:103:500f:ffff:ffff:ffff:ffff:ffff,US
+2620:103:6000::,2620:103:600f:ffff:ffff:ffff:ffff:ffff,US
+2620:103:7000::,2620:103:700f:ffff:ffff:ffff:ffff:ffff,US
+2620:103:8000::,2620:103:80ff:ffff:ffff:ffff:ffff:ffff,US
+2620:103:9000::,2620:103:90ff:ffff:ffff:ffff:ffff:ffff,US
+2620:103:a000::,2620:103:a00f:ffff:ffff:ffff:ffff:ffff,US
+2620:103:b000::,2620:103:b00f:ffff:ffff:ffff:ffff:ffff,US
+2620:103:c000::,2620:103:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:103:d000::,2620:103:d00f:ffff:ffff:ffff:ffff:ffff,US
+2620:103:e000::,2620:103:e0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:103:f000::,2620:103:f00f:ffff:ffff:ffff:ffff:ffff,US
+2620:104::,2620:104:ff:ffff:ffff:ffff:ffff:ffff,US
+2620:104:1000::,2620:104:100f:ffff:ffff:ffff:ffff:ffff,US
+2620:104:2000::,2620:104:20ff:ffff:ffff:ffff:ffff:ffff,US
+2620:104:3000::,2620:104:300f:ffff:ffff:ffff:ffff:ffff,US
+2620:104:4000::,2620:104:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:104:5000::,2620:104:500f:ffff:ffff:ffff:ffff:ffff,US
+2620:104:6000::,2620:104:600f:ffff:ffff:ffff:ffff:ffff,US
+2620:104:7000::,2620:104:70ff:ffff:ffff:ffff:ffff:ffff,US
+2620:104:8000::,2620:104:80ff:ffff:ffff:ffff:ffff:ffff,US
+2620:104:9000::,2620:104:900f:ffff:ffff:ffff:ffff:ffff,US
+2620:104:a000::,2620:104:a00f:ffff:ffff:ffff:ffff:ffff,US
+2620:104:b000::,2620:104:b01f:ffff:ffff:ffff:ffff:ffff,US
+2620:104:c000::,2620:104:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:104:d000::,2620:104:d0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:104:e000::,2620:104:e0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:104:f000::,2620:104:f00f:ffff:ffff:ffff:ffff:ffff,US
+2620:105::,2620:105:f:ffff:ffff:ffff:ffff:ffff,CA
+2620:105:1000::,2620:105:100f:ffff:ffff:ffff:ffff:ffff,US
+2620:105:2000::,2620:105:20ff:ffff:ffff:ffff:ffff:ffff,US
+2620:105:3000::,2620:105:300f:ffff:ffff:ffff:ffff:ffff,US
+2620:105:4000::,2620:105:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:105:5000::,2620:105:500f:ffff:ffff:ffff:ffff:ffff,US
+2620:105:6000::,2620:105:600f:ffff:ffff:ffff:ffff:ffff,US
+2620:105:7000::,2620:105:700f:ffff:ffff:ffff:ffff:ffff,US
+2620:105:8000::,2620:105:800f:ffff:ffff:ffff:ffff:ffff,US
+2620:105:9000::,2620:105:90ff:ffff:ffff:ffff:ffff:ffff,US
+2620:105:a000::,2620:105:a00f:ffff:ffff:ffff:ffff:ffff,US
+2620:105:b000::,2620:105:b0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:105:c000::,2620:105:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:105:d000::,2620:105:d0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:105:e000::,2620:105:e0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:105:f000::,2620:105:f0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:106::,2620:106:f:ffff:ffff:ffff:ffff:ffff,US
+2620:106:1000::,2620:106:10ff:ffff:ffff:ffff:ffff:ffff,US
+2620:106:2000::,2620:106:20ff:ffff:ffff:ffff:ffff:ffff,US
+2620:106:3000::,2620:106:30ff:ffff:ffff:ffff:ffff:ffff,US
+2620:106:4000::,2620:106:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:106:5000::,2620:106:50ff:ffff:ffff:ffff:ffff:ffff,US
+2620:106:6000::,2620:106:600f:ffff:ffff:ffff:ffff:ffff,US
+2620:106:7000::,2620:106:70ff:ffff:ffff:ffff:ffff:ffff,US
+2620:106:8000::,2620:106:800f:ffff:ffff:ffff:ffff:ffff,US
+2620:106:9000::,2620:106:900f:ffff:ffff:ffff:ffff:ffff,US
+2620:106:a000::,2620:106:a00f:ffff:ffff:ffff:ffff:ffff,US
+2620:106:b000::,2620:106:b00f:ffff:ffff:ffff:ffff:ffff,US
+2620:106:c000::,2620:106:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:106:d000::,2620:106:d0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:106:e000::,2620:106:e00f:ffff:ffff:ffff:ffff:ffff,US
+2620:106:f000::,2620:106:f00f:ffff:ffff:ffff:ffff:ffff,CA
+2620:107::,2620:107:ff:ffff:ffff:ffff:ffff:ffff,US
+2620:107:1000::,2620:107:100f:ffff:ffff:ffff:ffff:ffff,US
+2620:107:2000::,2620:107:200f:ffff:ffff:ffff:ffff:ffff,US
+2620:107:3000::,2620:107:300f:ffff:ffff:ffff:ffff:ffff,US
+2620:107:4000::,2620:107:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:107:5000::,2620:107:500f:ffff:ffff:ffff:ffff:ffff,US
+2620:107:6000::,2620:107:600f:ffff:ffff:ffff:ffff:ffff,US
+2620:107:7000::,2620:107:700f:ffff:ffff:ffff:ffff:ffff,US
+2620:107:8000::,2620:107:80ff:ffff:ffff:ffff:ffff:ffff,US
+2620:107:9000::,2620:107:90ff:ffff:ffff:ffff:ffff:ffff,US
+2620:107:a000::,2620:107:a0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:107:c000::,2620:107:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:107:d000::,2620:107:d00f:ffff:ffff:ffff:ffff:ffff,US
+2620:107:e000::,2620:107:e0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:107:f000::,2620:107:f0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:108::,2620:108:ff:ffff:ffff:ffff:ffff:ffff,US
+2620:108:1000::,2620:108:10ff:ffff:ffff:ffff:ffff:ffff,US
+2620:108:2000::,2620:108:200f:ffff:ffff:ffff:ffff:ffff,US
+2620:108:3000::,2620:108:300f:ffff:ffff:ffff:ffff:ffff,US
+2620:108:4000::,2620:108:40ff:ffff:ffff:ffff:ffff:ffff,US
+2620:108:5000::,2620:108:500f:ffff:ffff:ffff:ffff:ffff,US
+2620:108:6000::,2620:108:60ff:ffff:ffff:ffff:ffff:ffff,US
+2620:108:7000::,2620:108:700f:ffff:ffff:ffff:ffff:ffff,US
+2620:108:8000::,2620:108:800f:ffff:ffff:ffff:ffff:ffff,US
+2620:108:9000::,2620:108:900f:ffff:ffff:ffff:ffff:ffff,US
+2620:108:a000::,2620:108:a00f:ffff:ffff:ffff:ffff:ffff,US
+2620:108:b000::,2620:108:b00f:ffff:ffff:ffff:ffff:ffff,US
+2620:108:c000::,2620:108:c0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:108:d000::,2620:108:d00f:ffff:ffff:ffff:ffff:ffff,US
+2620:108:e000::,2620:108:e00f:ffff:ffff:ffff:ffff:ffff,US
+2620:108:f000::,2620:108:f00f:ffff:ffff:ffff:ffff:ffff,US
+2620:109::,2620:109:ff:ffff:ffff:ffff:ffff:ffff,US
+2620:109:1000::,2620:109:10ff:ffff:ffff:ffff:ffff:ffff,US
+2620:109:2000::,2620:109:200f:ffff:ffff:ffff:ffff:ffff,US
+2620:109:3000::,2620:109:300f:ffff:ffff:ffff:ffff:ffff,US
+2620:109:4000::,2620:109:40ff:ffff:ffff:ffff:ffff:ffff,US
+2620:109:5000::,2620:109:500f:ffff:ffff:ffff:ffff:ffff,US
+2620:109:6000::,2620:109:600f:ffff:ffff:ffff:ffff:ffff,US
+2620:109:7000::,2620:109:70ff:ffff:ffff:ffff:ffff:ffff,US
+2620:109:8000::,2620:109:80ff:ffff:ffff:ffff:ffff:ffff,US
+2620:109:9000::,2620:109:90ff:ffff:ffff:ffff:ffff:ffff,US
+2620:109:a000::,2620:109:a00f:ffff:ffff:ffff:ffff:ffff,US
+2620:109:b000::,2620:109:b00f:ffff:ffff:ffff:ffff:ffff,US
+2620:109:c000::,2620:109:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:109:d000::,2620:109:d00f:ffff:ffff:ffff:ffff:ffff,US
+2620:109:e000::,2620:109:e0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:109:f000::,2620:109:f00f:ffff:ffff:ffff:ffff:ffff,US
+2620:10a::,2620:10a:f:ffff:ffff:ffff:ffff:ffff,US
+2620:10a:1000::,2620:10a:100f:ffff:ffff:ffff:ffff:ffff,US
+2620:10a:2000::,2620:10a:200f:ffff:ffff:ffff:ffff:ffff,US
+2620:10a:3000::,2620:10a:30ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10a:4000::,2620:10a:40ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10a:5000::,2620:10a:50ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10a:6000::,2620:10a:600f:ffff:ffff:ffff:ffff:ffff,US
+2620:10a:7000::,2620:10a:700f:ffff:ffff:ffff:ffff:ffff,CA
+2620:10a:8000::,2620:10a:800f:ffff:ffff:ffff:ffff:ffff,CA
+2620:10a:9000::,2620:10a:90ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10a:a000::,2620:10a:a0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10a:b000::,2620:10a:b0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10a:c000::,2620:10a:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:10a:d000::,2620:10a:d00f:ffff:ffff:ffff:ffff:ffff,US
+2620:10a:e000::,2620:10a:e0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10a:f000::,2620:10a:f0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10b::,2620:10b:f:ffff:ffff:ffff:ffff:ffff,US
+2620:10b:1000::,2620:10b:10ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10b:2000::,2620:10b:200f:ffff:ffff:ffff:ffff:ffff,US
+2620:10b:3000::,2620:10b:30ff:ffff:ffff:ffff:ffff:ffff,CA
+2620:10b:4000::,2620:10b:40ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10b:5000::,2620:10b:500f:ffff:ffff:ffff:ffff:ffff,US
+2620:10b:6000::,2620:10b:60ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10b:7000::,2620:10b:700f:ffff:ffff:ffff:ffff:ffff,US
+2620:10b:8000::,2620:10b:800f:ffff:ffff:ffff:ffff:ffff,US
+2620:10b:9000::,2620:10b:900f:ffff:ffff:ffff:ffff:ffff,US
+2620:10b:a000::,2620:10b:a00f:ffff:ffff:ffff:ffff:ffff,US
+2620:10b:b000::,2620:10b:b00f:ffff:ffff:ffff:ffff:ffff,CA
+2620:10b:c000::,2620:10b:c0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10b:d000::,2620:10b:d00f:ffff:ffff:ffff:ffff:ffff,US
+2620:10b:e000::,2620:10b:e0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10b:f000::,2620:10b:f0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10c::,2620:10c:f:ffff:ffff:ffff:ffff:ffff,US
+2620:10c:1000::,2620:10c:10ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10c:2000::,2620:10c:200f:ffff:ffff:ffff:ffff:ffff,US
+2620:10c:3000::,2620:10c:300f:ffff:ffff:ffff:ffff:ffff,US
+2620:10c:4000::,2620:10c:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:10c:5000::,2620:10c:500f:ffff:ffff:ffff:ffff:ffff,US
+2620:10c:6000::,2620:10c:600f:ffff:ffff:ffff:ffff:ffff,US
+2620:10c:7000::,2620:10c:700f:ffff:ffff:ffff:ffff:ffff,US
+2620:10c:8000::,2620:10c:80ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10c:9000::,2620:10c:90ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10c:a000::,2620:10c:a00f:ffff:ffff:ffff:ffff:ffff,US
+2620:10c:b000::,2620:10c:b0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10c:c000::,2620:10c:c0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10c:d000::,2620:10c:d00f:ffff:ffff:ffff:ffff:ffff,US
+2620:10c:e000::,2620:10c:e0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10c:f000::,2620:10c:f00f:ffff:ffff:ffff:ffff:ffff,US
+2620:10d::,2620:10d:f:ffff:ffff:ffff:ffff:ffff,US
+2620:10d:1000::,2620:10d:100f:ffff:ffff:ffff:ffff:ffff,US
+2620:10d:2000::,2620:10d:20ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10d:3000::,2620:10d:300f:ffff:ffff:ffff:ffff:ffff,US
+2620:10d:4000::,2620:10d:40ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10d:5000::,2620:10d:50ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10d:6000::,2620:10d:600f:ffff:ffff:ffff:ffff:ffff,US
+2620:10d:7000::,2620:10d:70ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10d:8000::,2620:10d:800f:ffff:ffff:ffff:ffff:ffff,US
+2620:10d:9000::,2620:10d:900f:ffff:ffff:ffff:ffff:ffff,US
+2620:10d:a000::,2620:10d:a0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10d:b000::,2620:10d:b00f:ffff:ffff:ffff:ffff:ffff,US
+2620:10d:c000::,2620:10d:c0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10d:d000::,2620:10d:d00f:ffff:ffff:ffff:ffff:ffff,CA
+2620:10d:e000::,2620:10d:e00f:ffff:ffff:ffff:ffff:ffff,CA
+2620:10d:f000::,2620:10d:f00f:ffff:ffff:ffff:ffff:ffff,US
+2620:10e::,2620:10e:f:ffff:ffff:ffff:ffff:ffff,US
+2620:10e:1000::,2620:10e:100f:ffff:ffff:ffff:ffff:ffff,US
+2620:10e:2000::,2620:10e:200f:ffff:ffff:ffff:ffff:ffff,US
+2620:10e:3000::,2620:10e:30ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10e:4000::,2620:10e:40ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10e:5000::,2620:10e:500f:ffff:ffff:ffff:ffff:ffff,US
+2620:10e:6000::,2620:10e:60ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10e:7000::,2620:10e:70ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10e:8000::,2620:10e:80ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10e:9000::,2620:10e:900f:ffff:ffff:ffff:ffff:ffff,US
+2620:10e:a000::,2620:10e:a00f:ffff:ffff:ffff:ffff:ffff,US
+2620:10e:b000::,2620:10e:b0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10e:c000::,2620:10e:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:10e:d000::,2620:10e:d00f:ffff:ffff:ffff:ffff:ffff,BL
+2620:10e:e000::,2620:10e:e00f:ffff:ffff:ffff:ffff:ffff,US
+2620:10e:f000::,2620:10e:f00f:ffff:ffff:ffff:ffff:ffff,US
+2620:10f::,2620:10f:f:ffff:ffff:ffff:ffff:ffff,US
+2620:10f:1000::,2620:10f:100f:ffff:ffff:ffff:ffff:ffff,US
+2620:10f:2000::,2620:10f:200f:ffff:ffff:ffff:ffff:ffff,US
+2620:10f:3000::,2620:10f:30ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10f:4000::,2620:10f:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:10f:5000::,2620:10f:50ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10f:6000::,2620:10f:60ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10f:7000::,2620:10f:700f:ffff:ffff:ffff:ffff:ffff,US
+2620:10f:8000::,2620:10f:80ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10f:9000::,2620:10f:900f:ffff:ffff:ffff:ffff:ffff,US
+2620:10f:a000::,2620:10f:a00f:ffff:ffff:ffff:ffff:ffff,US
+2620:10f:b000::,2620:10f:b0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10f:c000::,2620:10f:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:10f:d000::,2620:10f:d00f:ffff:ffff:ffff:ffff:ffff,US
+2620:10f:e000::,2620:10f:e0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10f:f000::,2620:10f:f00f:ffff:ffff:ffff:ffff:ffff,US
+2620:110::,2620:110:f:ffff:ffff:ffff:ffff:ffff,US
+2620:110:1000::,2620:110:100f:ffff:ffff:ffff:ffff:ffff,US
+2620:110:2000::,2620:110:20ff:ffff:ffff:ffff:ffff:ffff,US
+2620:110:3000::,2620:110:30ff:ffff:ffff:ffff:ffff:ffff,US
+2620:110:4000::,2620:110:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:110:5000::,2620:110:500f:ffff:ffff:ffff:ffff:ffff,US
+2620:110:6000::,2620:110:600f:ffff:ffff:ffff:ffff:ffff,US
+2620:110:7000::,2620:110:700f:ffff:ffff:ffff:ffff:ffff,US
+2620:110:8000::,2620:110:80ff:ffff:ffff:ffff:ffff:ffff,US
+2620:110:9000::,2620:110:900f:ffff:ffff:ffff:ffff:ffff,US
+2620:110:a000::,2620:110:a00f:ffff:ffff:ffff:ffff:ffff,US
+2620:110:b000::,2620:110:b00f:ffff:ffff:ffff:ffff:ffff,US
+2620:110:c000::,2620:110:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:110:d000::,2620:110:d00f:ffff:ffff:ffff:ffff:ffff,US
+2620:110:e000::,2620:110:e00f:ffff:ffff:ffff:ffff:ffff,US
+2620:110:f000::,2620:110:f00f:ffff:ffff:ffff:ffff:ffff,US
+2620:111::,2620:111:ff:ffff:ffff:ffff:ffff:ffff,US
+2620:111:1000::,2620:111:100f:ffff:ffff:ffff:ffff:ffff,US
+2620:111:2000::,2620:111:200f:ffff:ffff:ffff:ffff:ffff,US
+2620:111:3000::,2620:111:300f:ffff:ffff:ffff:ffff:ffff,US
+2620:111:4000::,2620:111:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:111:5000::,2620:111:500f:ffff:ffff:ffff:ffff:ffff,US
+2620:111:6000::,2620:111:600f:ffff:ffff:ffff:ffff:ffff,US
+2620:111:7000::,2620:111:700f:ffff:ffff:ffff:ffff:ffff,US
+2620:111:8000::,2620:111:800f:ffff:ffff:ffff:ffff:ffff,US
+2620:111:9000::,2620:111:900f:ffff:ffff:ffff:ffff:ffff,US
+2620:111:a000::,2620:111:a00f:ffff:ffff:ffff:ffff:ffff,US
+2620:111:b000::,2620:111:b00f:ffff:ffff:ffff:ffff:ffff,US
+2620:111:c000::,2620:111:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:111:d000::,2620:111:d0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:111:e000::,2620:111:e00f:ffff:ffff:ffff:ffff:ffff,CA
+2620:111:f000::,2620:111:f0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:112::,2620:112:f:ffff:ffff:ffff:ffff:ffff,US
+2620:112:1000::,2620:112:107f:ffff:ffff:ffff:ffff:ffff,US
+2620:112:2000::,2620:112:200f:ffff:ffff:ffff:ffff:ffff,US
+2620:112:3000::,2620:112:300f:ffff:ffff:ffff:ffff:ffff,US
+2620:112:4000::,2620:112:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:112:5000::,2620:112:500f:ffff:ffff:ffff:ffff:ffff,US
+2620:112:6000::,2620:112:600f:ffff:ffff:ffff:ffff:ffff,US
+2620:112:7000::,2620:112:700f:ffff:ffff:ffff:ffff:ffff,US
+2620:112:8000::,2620:112:80ff:ffff:ffff:ffff:ffff:ffff,US
+2620:112:9000::,2620:112:900f:ffff:ffff:ffff:ffff:ffff,CA
+2620:112:a000::,2620:112:a00f:ffff:ffff:ffff:ffff:ffff,US
+2620:112:b000::,2620:112:b0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:112:c000::,2620:112:c0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:112:d000::,2620:112:d00f:ffff:ffff:ffff:ffff:ffff,US
+2620:112:e000::,2620:112:e00f:ffff:ffff:ffff:ffff:ffff,US
+2620:112:f000::,2620:112:f00f:ffff:ffff:ffff:ffff:ffff,US
+2620:113::,2620:113:f:ffff:ffff:ffff:ffff:ffff,US
+2620:113:1000::,2620:113:100f:ffff:ffff:ffff:ffff:ffff,US
+2620:113:2000::,2620:113:200f:ffff:ffff:ffff:ffff:ffff,CA
+2620:113:3000::,2620:113:300f:ffff:ffff:ffff:ffff:ffff,CA
+2620:113:4000::,2620:113:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:113:5000::,2620:113:500f:ffff:ffff:ffff:ffff:ffff,US
+2620:113:6000::,2620:113:600f:ffff:ffff:ffff:ffff:ffff,US
+2620:113:7000::,2620:113:700f:ffff:ffff:ffff:ffff:ffff,US
+2620:113:8000::,2620:113:80ff:ffff:ffff:ffff:ffff:ffff,US
+2620:113:9000::,2620:113:900f:ffff:ffff:ffff:ffff:ffff,US
+2620:113:a000::,2620:113:a00f:ffff:ffff:ffff:ffff:ffff,US
+2620:113:b000::,2620:113:b00f:ffff:ffff:ffff:ffff:ffff,US
+2620:113:c000::,2620:113:c0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:113:d000::,2620:113:d00f:ffff:ffff:ffff:ffff:ffff,US
+2620:113:e000::,2620:113:e00f:ffff:ffff:ffff:ffff:ffff,US
+2620:113:f000::,2620:113:f00f:ffff:ffff:ffff:ffff:ffff,US
+2620:114::,2620:114:f:ffff:ffff:ffff:ffff:ffff,US
+2620:114:1000::,2620:114:100f:ffff:ffff:ffff:ffff:ffff,US
+2620:114:2000::,2620:114:20ff:ffff:ffff:ffff:ffff:ffff,US
+2620:114:3000::,2620:114:300f:ffff:ffff:ffff:ffff:ffff,US
+2620:114:4000::,2620:114:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:114:5000::,2620:114:50ff:ffff:ffff:ffff:ffff:ffff,US
+2620:114:6000::,2620:114:600f:ffff:ffff:ffff:ffff:ffff,US
+2620:114:7000::,2620:114:700f:ffff:ffff:ffff:ffff:ffff,US
+2620:114:8000::,2620:114:80ff:ffff:ffff:ffff:ffff:ffff,US
+2620:114:9000::,2620:114:900f:ffff:ffff:ffff:ffff:ffff,US
+2620:114:a000::,2620:114:a00f:ffff:ffff:ffff:ffff:ffff,US
+2620:114:b000::,2620:114:b0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:114:c000::,2620:114:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:114:d000::,2620:114:d00f:ffff:ffff:ffff:ffff:ffff,US
+2620:114:e000::,2620:114:e0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:114:f000::,2620:114:f00f:ffff:ffff:ffff:ffff:ffff,US
+2620:115::,2620:115:f:ffff:ffff:ffff:ffff:ffff,US
+2620:115:1000::,2620:115:100f:ffff:ffff:ffff:ffff:ffff,US
+2620:115:2000::,2620:115:200f:ffff:ffff:ffff:ffff:ffff,US
+2620:115:3000::,2620:115:300f:ffff:ffff:ffff:ffff:ffff,KY
+2620:115:4000::,2620:115:40ff:ffff:ffff:ffff:ffff:ffff,US
+2620:115:5000::,2620:115:500f:ffff:ffff:ffff:ffff:ffff,US
+2620:115:6000::,2620:115:600f:ffff:ffff:ffff:ffff:ffff,US
+2620:115:7000::,2620:115:70ff:ffff:ffff:ffff:ffff:ffff,US
+2620:115:8000::,2620:115:800f:ffff:ffff:ffff:ffff:ffff,US
+2620:115:9000::,2620:115:900f:ffff:ffff:ffff:ffff:ffff,US
+2620:115:a000::,2620:115:a00f:ffff:ffff:ffff:ffff:ffff,US
+2620:115:b000::,2620:115:b00f:ffff:ffff:ffff:ffff:ffff,US
+2620:115:c000::,2620:115:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:115:d000::,2620:115:d0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:115:e000::,2620:115:e00f:ffff:ffff:ffff:ffff:ffff,US
+2620:115:f000::,2620:115:f00f:ffff:ffff:ffff:ffff:ffff,US
+2620:116::,2620:116:f:ffff:ffff:ffff:ffff:ffff,US
+2620:116:1000::,2620:116:10ff:ffff:ffff:ffff:ffff:ffff,US
+2620:116:2000::,2620:116:200f:ffff:ffff:ffff:ffff:ffff,US
+2620:116:3000::,2620:116:300f:ffff:ffff:ffff:ffff:ffff,US
+2620:116:4000::,2620:116:40ff:ffff:ffff:ffff:ffff:ffff,US
+2620:116:5000::,2620:116:50ff:ffff:ffff:ffff:ffff:ffff,US
+2620:116:6000::,2620:116:600f:ffff:ffff:ffff:ffff:ffff,US
+2620:116:7000::,2620:116:700f:ffff:ffff:ffff:ffff:ffff,US
+2620:116:8000::,2620:116:80ff:ffff:ffff:ffff:ffff:ffff,US
+2620:140::,2620:140:3ff:ffff:ffff:ffff:ffff:ffff,US
+2620:141::,2620:141:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:143::,2620:143:7ff:ffff:ffff:ffff:ffff:ffff,US
+2620:144::,2620:145:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:146::,2620:146:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:147::,2620:147:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:148::,2620:148:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:149::,2620:149:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:14a::,2620:14a:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:14b::,2620:14b:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:14c::,2620:14c:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:14d::,2620:14d:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:14e::,2620:14e:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:14f::,2620:14f:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:150::,2620:150:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:151::,2620:151:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:152::,2620:152:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:153::,2620:153:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:154::,2620:154:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:155::,2620:155:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:156::,2620:156:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:157::,2620:157:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:158::,2620:158:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:159::,2620:159:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:15a::,2620:15a:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:15b::,2620:15b:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:15c::,2620:15c:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:15d::,2620:15e:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:15f::,2620:15f:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:160::,2620:160:ffff:ffff:ffff:ffff:ffff:ffff,US
+2620:162::,2620:162:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:163::,2620:163:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:164::,2620:164:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:165::,2620:165:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:166::,2620:166:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:167::,2620:167:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:168::,2620:169:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:16a::,2620:16a:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:16b::,2620:16c:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:16d::,2620:16f:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:170::,2620:170:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:171::,2620:171:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:172::,2620:172:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:173::,2620:173:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:174::,2620:174:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:175::,2620:175:fff:ffff:ffff:ffff:ffff:ffff,CA
+2620:176::,2620:177:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:178::,2620:178:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:179::,2620:179:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:17a::,2620:17a:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:17b::,2620:17b:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:17c::,2620:17c:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:180::,2620:180:ffff:ffff:ffff:ffff:ffff:ffff,US
+2620:190::,2620:190:ffff:ffff:ffff:ffff:ffff:ffff,US
+2620:1a0::,2620:1a0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2620:1b0::,2620:1b0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2620:1c0::,2620:1c0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2620:1d0::,2620:1d0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2620:1e0::,2620:1e0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2620:1f0::,2620:1f0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2800:8::,2800:8:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2800:10::,2800:10:ffff:ffff:ffff:ffff:ffff:ffff,NI
+2800:18::,2800:18:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2800:20::,2800:30:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2800:38::,2800:38:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2800:40::,2800:40:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:48::,2800:48:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:68::,2800:68:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2800:70::,2800:70:ffff:ffff:ffff:ffff:ffff:ffff,TT
+2800:78::,2800:78:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2800:80::,2800:80:ffff:ffff:ffff:ffff:ffff:ffff,CW
+2800:88::,2800:88:ffff:ffff:ffff:ffff:ffff:ffff,BO
+2800:90::,2800:90:ffff:ffff:ffff:ffff:ffff:ffff,SV
+2800:98::,2800:98:ffff:ffff:ffff:ffff:ffff:ffff,GT
+2800:a0::,2800:af:ffff:ffff:ffff:ffff:ffff:ffff,UY
+2800:e0::,2800:ef:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2800:f0::,2800:f0:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2800:100::,2800:100:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2800:110::,2800:110:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:120::,2800:120:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2800:130::,2800:130:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2800:140::,2800:140:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2800:150::,2800:150:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2800:160::,2800:160:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2800:170::,2800:170:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2800:180::,2800:180:ffff:ffff:ffff:ffff:ffff:ffff,TT
+2800:190::,2800:190:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:1a0::,2800:1a0:ffff:ffff:ffff:ffff:ffff:ffff,GT
+2800:1b0::,2800:1b0:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2800:1c0::,2800:1c0:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:1d0::,2800:1d0:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2800:1e0::,2800:1e0:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2800:1f0::,2800:1f0:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2800:200::,2800:200:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2800:220::,2800:220:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:230::,2800:230:ffff:ffff:ffff:ffff:ffff:ffff,CU
+2800:240::,2800:240:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:250::,2800:250:ffff:ffff:ffff:ffff:ffff:ffff,UY
+2800:260::,2800:26f:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2800:270::,2800:270:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2800:280::,2800:280:ffff:ffff:ffff:ffff:ffff:ffff,SX
+2800:290::,2800:290:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2800:2a0::,2800:2a0:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2800:2b0::,2800:2b0:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:2d0::,2800:2d0:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2800:2e0::,2800:2e0:ffff:ffff:ffff:ffff:ffff:ffff,CW
+2800:2f0::,2800:2f0:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2800:300::,2800:300:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2800:310::,2800:310:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2800:320::,2800:320:ffff:ffff:ffff:ffff:ffff:ffff,BO
+2800:330::,2800:330:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2800:340::,2800:340:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:350::,2800:350:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2800:360::,2800:360:ffff:ffff:ffff:ffff:ffff:ffff,CU
+2800:370::,2800:370:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2800:380::,2800:381:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:390::,2800:390:ffff:ffff:ffff:ffff:ffff:ffff,BO
+2800:3a0::,2800:3a0:ffff:ffff:ffff:ffff:ffff:ffff,PY
+2800:3b0::,2800:3b0:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2800:3c0::,2800:3c0:ffff:ffff:ffff:ffff:ffff:ffff,GY
+2800:3d0::,2800:3d0:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:3e0::,2800:3e0:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2800:3f0::,2800:3f0:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:400::,2800:400:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2800:410::,2800:410:ffff:ffff:ffff:ffff:ffff:ffff,BZ
+2800:420::,2800:423:ffff:ffff:ffff:ffff:ffff:ffff,TT
+2800:430::,2800:430:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2800:440::,2800:440:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2800:450::,2800:450:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2800:460::,2800:460:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2800:470::,2800:470:ffff:ffff:ffff:ffff:ffff:ffff,SX
+2800:480::,2800:480:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2800:490::,2800:490:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2800:4b0::,2800:4b0:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2800:4c0::,2800:4c0:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2800:4d0::,2800:4d0:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2800:4e0::,2800:4e0:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2800:4f0::,2800:4f0:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2800:500::,2800:500:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2800:510::,2800:510:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2800:520::,2800:520:ffff:ffff:ffff:ffff:ffff:ffff,TT
+2800:530::,2800:530:ffff:ffff:ffff:ffff:ffff:ffff,CW
+2800:540::,2800:540:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2800:550::,2800:550:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2800:560::,2800:560:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:570::,2800:570:ffff:ffff:ffff:ffff:ffff:ffff,HT
+2800:580::,2800:580:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2800:590::,2800:590:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2800:5a0::,2800:5a0:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:5b0::,2800:5b0:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2800:5c0::,2800:5c0:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2800:5d0::,2800:5d0:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2800:5e0::,2800:5e0:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2800:5f0::,2800:5f0:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2800:600::,2800:600:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:610::,2800:610:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:620::,2800:620:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2800:630::,2800:630:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:640::,2800:640:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2800:650::,2800:650:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2800:660::,2800:660:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2800:670::,2800:670:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2800:680::,2800:680:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2800:690::,2800:690:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2800:6a0::,2800:6a0:ffff:ffff:ffff:ffff:ffff:ffff,HN
+2800:6b0::,2800:6b0:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2800:6c0::,2800:6c0:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:6d0::,2800:6d0:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:6e0::,2800:6e0:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2800:6f0::,2800:6f0:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:700::,2800:700:ffff:ffff:ffff:ffff:ffff:ffff,UY
+2800:800::,2800:800:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2800:810::,2800:810:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:820::,2800:820:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:830::,2800:831:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2800:840::,2800:840:ffff:ffff:ffff:ffff:ffff:ffff,UY
+2800:850::,2800:850:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:860::,2800:860:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2800:870::,2800:870:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:880::,2800:883:ffff:ffff:ffff:ffff:ffff:ffff,SV
+2800:890::,2800:890:ffff:ffff:ffff:ffff:ffff:ffff,GT
+2800:8a0::,2800:8a0:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2800:8b0::,2800:8b0:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2800:8c0::,2800:8c0:ffff:ffff:ffff:ffff:ffff:ffff,NI
+2800:8d0::,2800:8d0:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:8e0::,2800:8e0:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2800:8f0::,2800:8f0:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2800:900::,2800:900:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:910::,2800:910:ffff:ffff:ffff:ffff:ffff:ffff,CU
+2800:920::,2800:920:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:930::,2800:930:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2800:940::,2800:940:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:950::,2800:950:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2800:960::,2800:960:ffff:ffff:ffff:ffff:ffff:ffff,PY
+2800:970::,2800:970:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:980::,2800:980:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2800:990::,2800:990:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2800:9a0::,2800:9a7:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2800:9b0::,2800:9b0:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2800:9c0::,2800:9c0:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:9d0::,2800:9d0:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:9e0::,2800:9e0:ffff:ffff:ffff:ffff:ffff:ffff,CW
+2800:9f0::,2800:9f0:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2800:a00::,2800:a00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:a10::,2800:a10:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:a20::,2800:a20:ffff:ffff:ffff:ffff:ffff:ffff,CW
+2800:a30::,2800:a30:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:a40::,2800:a40:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:a50::,2800:a50:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:a60::,2800:a60:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2800:a70::,2800:a70:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2800:a80::,2800:a80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:a90::,2800:a90:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:aa0::,2800:aa0:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:ab0::,2800:ab0:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:ac0::,2800:ac0:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2800:ad0::,2800:ad0:ffff:ffff:ffff:ffff:ffff:ffff,AW
+2800:ae0::,2800:ae0:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2800:af0::,2800:af0:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:b00::,2800:b00:ffff:ffff:ffff:ffff:ffff:ffff,BQ
+2800:b10::,2800:b10:ffff:ffff:ffff:ffff:ffff:ffff,HN
+2800:b20::,2800:b23:ffff:ffff:ffff:ffff:ffff:ffff,SV
+2800:b30::,2800:b31:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2800:b40::,2800:b40:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2800:b60::,2800:b60:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:b70::,2800:b70:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2800:b80::,2800:b80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:b90::,2800:b90:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2800:ba0::,2800:ba0:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:bb0::,2800:bbf:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:bc0::,2800:bc0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2800:bd0::,2800:bd0:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2800:be0::,2800:be0:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2800:bf0::,2800:bf0:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2800:c00::,2800:c00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:c10::,2800:c10:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2800:c20::,2800:c20:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2800:c30::,2800:c30:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:c40::,2800:c40:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2800:c50::,2800:c50:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:c70::,2800:c70:ffff:ffff:ffff:ffff:ffff:ffff,PY
+2800:c80::,2800:c80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:c90::,2800:c90:ffff:ffff:ffff:ffff:ffff:ffff,DO
+2800:ca0::,2800:ca0:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:cb0::,2800:cb0:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:cc0::,2800:cc0:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2800:cd0::,2800:cd0:ffff:ffff:ffff:ffff:ffff:ffff,BO
+2800:ce0::,2800:ce0:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2800:cf0::,2800:cf0:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:d00::,2800:d00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:d10::,2800:d10:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:d20::,2800:d20:ffff:ffff:ffff:ffff:ffff:ffff,DO
+2800:1000::,2800:10ff:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2800:2000::,2800:2fff:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:a000::,2800:a000:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2800:a008::,2800:a008:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2800:a010::,2800:a010:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2800:a018::,2800:a018:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2800:a020::,2800:a020:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2800:a028::,2800:a028:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2800:a030::,2800:a030:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2800:a038::,2800:a038:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2800:b000::,2800:b000:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:d300::,2800:d307:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2801::,2801::ffff:ffff:ffff:ffff:ffff,UY
+2801:0:10::,2801::10:ffff:ffff:ffff:ffff:ffff,CL
+2801:0:20::,2801::20:ffff:ffff:ffff:ffff:ffff,EC
+2801:0:30::,2801::30:ffff:ffff:ffff:ffff:ffff,HN
+2801:0:40::,2801::40:ffff:ffff:ffff:ffff:ffff,TT
+2801:0:50::,2801::50:ffff:ffff:ffff:ffff:ffff,CL
+2801:0:60::,2801::63:ffff:ffff:ffff:ffff:ffff,EC
+2801:0:70::,2801::70:ffff:ffff:ffff:ffff:ffff,CO
+2801:0:80::,2801::80:ffff:ffff:ffff:ffff:ffff,DO
+2801:0:90::,2801::90:ffff:ffff:ffff:ffff:ffff,AR
+2801:0:a0::,2801::a0:ffff:ffff:ffff:ffff:ffff,AR
+2801:0:b0::,2801::b7:ffff:ffff:ffff:ffff:ffff,CL
+2801:0:c0::,2801::df:ffff:ffff:ffff:ffff:ffff,CR
+2801:0:100::,2801::100:ffff:ffff:ffff:ffff:ffff,CO
+2801:0:110::,2801::110:ffff:ffff:ffff:ffff:ffff,GT
+2801:0:120::,2801::120:ffff:ffff:ffff:ffff:ffff,CL
+2801:0:130::,2801::130:ffff:ffff:ffff:ffff:ffff,PY
+2801:0:140::,2801::140:ffff:ffff:ffff:ffff:ffff,AR
+2801:0:150::,2801::150:ffff:ffff:ffff:ffff:ffff,CL
+2801:0:160::,2801::160:ffff:ffff:ffff:ffff:ffff,AR
+2801:0:170::,2801::170:ffff:ffff:ffff:ffff:ffff,BO
+2801:0:180::,2801::180:ffff:ffff:ffff:ffff:ffff,CO
+2801:0:190::,2801::190:ffff:ffff:ffff:ffff:ffff,AR
+2801:0:1a0::,2801::1a0:ffff:ffff:ffff:ffff:ffff,HN
+2801:0:1b0::,2801::1b0:ffff:ffff:ffff:ffff:ffff,AR
+2801:0:1c0::,2801::1c7:ffff:ffff:ffff:ffff:ffff,CO
+2801:0:1d0::,2801::1d7:ffff:ffff:ffff:ffff:ffff,AR
+2801:0:1e0::,2801::1e0:ffff:ffff:ffff:ffff:ffff,CO
+2801:0:1f0::,2801::1f0:ffff:ffff:ffff:ffff:ffff,PY
+2801:0:200::,2801::200:ffff:ffff:ffff:ffff:ffff,VE
+2801:0:210::,2801::210:ffff:ffff:ffff:ffff:ffff,CO
+2801:0:220::,2801::22f:ffff:ffff:ffff:ffff:ffff,AR
+2801:0:240::,2801::240:ffff:ffff:ffff:ffff:ffff,PA
+2801:0:250::,2801::250:ffff:ffff:ffff:ffff:ffff,AR
+2801:0:260::,2801::260:ffff:ffff:ffff:ffff:ffff,AR
+2801:0:270::,2801::270:ffff:ffff:ffff:ffff:ffff,EC
+2801:0:280::,2801::280:ffff:ffff:ffff:ffff:ffff,CO
+2801:0:290::,2801::290:ffff:ffff:ffff:ffff:ffff,AR
+2801:0:2a0::,2801::2a0:ffff:ffff:ffff:ffff:ffff,CR
+2801:0:2b0::,2801::2b0:ffff:ffff:ffff:ffff:ffff,PA
+2801:0:2c0::,2801::2c0:ffff:ffff:ffff:ffff:ffff,HN
+2801:0:2d0::,2801::2d0:ffff:ffff:ffff:ffff:ffff,PA
+2801:0:2e0::,2801::2e0:ffff:ffff:ffff:ffff:ffff,CO
+2801:0:2f0::,2801::2f0:ffff:ffff:ffff:ffff:ffff,AR
+2801:0:300::,2801::300:ffff:ffff:ffff:ffff:ffff,CO
+2801:0:310::,2801::310:ffff:ffff:ffff:ffff:ffff,CW
+2801:0:320::,2801::320:ffff:ffff:ffff:ffff:ffff,CO
+2801:0:330::,2801::330:ffff:ffff:ffff:ffff:ffff,HT
+2801:0:340::,2801::340:ffff:ffff:ffff:ffff:ffff,CO
+2801:0:350::,2801::350:ffff:ffff:ffff:ffff:ffff,AR
+2801:0:360::,2801::360:ffff:ffff:ffff:ffff:ffff,CO
+2801:0:370::,2801::370:ffff:ffff:ffff:ffff:ffff,CO
+2801:0:380::,2801::380:ffff:ffff:ffff:ffff:ffff,CL
+2801:0:390::,2801::390:ffff:ffff:ffff:ffff:ffff,CO
+2801:0:3b0::,2801::3b0:ffff:ffff:ffff:ffff:ffff,CO
+2801:0:3c0::,2801::3c0:ffff:ffff:ffff:ffff:ffff,CO
+2801:0:3d0::,2801::3d0:ffff:ffff:ffff:ffff:ffff,CO
+2801:0:3e0::,2801::3e0:ffff:ffff:ffff:ffff:ffff,AR
+2801:0:3f0::,2801::3f0:ffff:ffff:ffff:ffff:ffff,AR
+2801:0:400::,2801::400:ffff:ffff:ffff:ffff:ffff,CL
+2801:0:410::,2801::410:ffff:ffff:ffff:ffff:ffff,EC
+2801:0:420::,2801::420:ffff:ffff:ffff:ffff:ffff,EC
+2801:0:440::,2801::440:ffff:ffff:ffff:ffff:ffff,AR
+2801:0:480::,2801::480:ffff:ffff:ffff:ffff:ffff,CO
+2801:0:490::,2801::490:ffff:ffff:ffff:ffff:ffff,PA
+2801:0:4a0::,2801::4a0:ffff:ffff:ffff:ffff:ffff,CR
+2801:0:4c0::,2801::4c0:ffff:ffff:ffff:ffff:ffff,CO
+2801:0:4d0::,2801::4d0:ffff:ffff:ffff:ffff:ffff,EC
+2801:0:4e0::,2801::4e0:ffff:ffff:ffff:ffff:ffff,CL
+2801:0:4f0::,2801::4f0:ffff:ffff:ffff:ffff:ffff,CO
+2801:0:2000::,2801::2fff:ffff:ffff:ffff:ffff:ffff,UY
+2801:1::,2801:1:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2801:2::,2801:2:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2801:10::,2801:10:7:ffff:ffff:ffff:ffff:ffff,AR
+2801:10:2000::,2801:10:2000:ffff:ffff:ffff:ffff:ffff,AR
+2801:10:4000::,2801:10:4000:ffff:ffff:ffff:ffff:ffff,AR
+2801:10:8000::,2801:10:8000:ffff:ffff:ffff:ffff:ffff,AR
+2801:10:c000::,2801:10:c000:ffff:ffff:ffff:ffff:ffff,CO
+2801:11::,2801:11::ffff:ffff:ffff:ffff:ffff,AR
+2801:11:2000::,2801:11:2000:ffff:ffff:ffff:ffff:ffff,AR
+2801:11:4000::,2801:11:4000:ffff:ffff:ffff:ffff:ffff,CO
+2801:11:8000::,2801:11:8000:ffff:ffff:ffff:ffff:ffff,CO
+2801:11:c000::,2801:11:c000:ffff:ffff:ffff:ffff:ffff,AR
+2801:12::,2801:12::ffff:ffff:ffff:ffff:ffff,PY
+2801:12:2000::,2801:12:2000:ffff:ffff:ffff:ffff:ffff,HN
+2801:12:4000::,2801:12:4000:ffff:ffff:ffff:ffff:ffff,CO
+2801:12:8000::,2801:12:8000:ffff:ffff:ffff:ffff:ffff,AR
+2801:12:c000::,2801:12:c000:ffff:ffff:ffff:ffff:ffff,AR
+2801:13::,2801:13::ffff:ffff:ffff:ffff:ffff,VE
+2801:13:4000::,2801:13:4000:ffff:ffff:ffff:ffff:ffff,CL
+2801:13:8000::,2801:13:8000:ffff:ffff:ffff:ffff:ffff,SV
+2801:13:c000::,2801:13:c000:ffff:ffff:ffff:ffff:ffff,TT
+2801:14::,2801:14::ffff:ffff:ffff:ffff:ffff,CO
+2801:14:2000::,2801:14:2000:ffff:ffff:ffff:ffff:ffff,AR
+2801:14:4000::,2801:14:4000:ffff:ffff:ffff:ffff:ffff,CO
+2801:14:c000::,2801:14:c000:ffff:ffff:ffff:ffff:ffff,BO
+2801:15::,2801:15::ffff:ffff:ffff:ffff:ffff,EC
+2801:15:4000::,2801:15:4000:ffff:ffff:ffff:ffff:ffff,CO
+2801:15:8000::,2801:15:8000:ffff:ffff:ffff:ffff:ffff,CR
+2801:15:c000::,2801:15:c000:ffff:ffff:ffff:ffff:ffff,GT
+2801:16::,2801:16::ffff:ffff:ffff:ffff:ffff,CW
+2801:16:2000::,2801:16:2000:ffff:ffff:ffff:ffff:ffff,HN
+2801:16:4000::,2801:16:4000:ffff:ffff:ffff:ffff:ffff,AR
+2801:16:8000::,2801:16:8000:ffff:ffff:ffff:ffff:ffff,CO
+2801:16:c000::,2801:16:c000:ffff:ffff:ffff:ffff:ffff,AR
+2801:17::,2801:17::ffff:ffff:ffff:ffff:ffff,CL
+2801:17:4000::,2801:17:4000:ffff:ffff:ffff:ffff:ffff,CO
+2801:17:8000::,2801:17:8000:ffff:ffff:ffff:ffff:ffff,CR
+2801:17:c000::,2801:17:c000:ffff:ffff:ffff:ffff:ffff,PA
+2801:18::,2801:18::ffff:ffff:ffff:ffff:ffff,CR
+2801:18:2000::,2801:18:2000:ffff:ffff:ffff:ffff:ffff,CO
+2801:18:4000::,2801:18:4000:ffff:ffff:ffff:ffff:ffff,CO
+2801:18:8000::,2801:18:8000:ffff:ffff:ffff:ffff:ffff,AR
+2801:18:c000::,2801:18:c000:ffff:ffff:ffff:ffff:ffff,AR
+2801:19::,2801:19::ffff:ffff:ffff:ffff:ffff,AR
+2801:19:2000::,2801:19:2000:ffff:ffff:ffff:ffff:ffff,CL
+2801:19:4000::,2801:19:4000:ffff:ffff:ffff:ffff:ffff,PY
+2801:19:8000::,2801:19:8000:ffff:ffff:ffff:ffff:ffff,EC
+2801:19:c000::,2801:19:c000:ffff:ffff:ffff:ffff:ffff,AR
+2801:1a::,2801:1a::ffff:ffff:ffff:ffff:ffff,CO
+2801:1a:2000::,2801:1a:2000:ffff:ffff:ffff:ffff:ffff,AR
+2801:1a:4000::,2801:1a:4000:ffff:ffff:ffff:ffff:ffff,CO
+2801:1a:8000::,2801:1a:8000:ffff:ffff:ffff:ffff:ffff,CL
+2801:1a:c000::,2801:1a:c000:ffff:ffff:ffff:ffff:ffff,CO
+2801:1b::,2801:1b::ffff:ffff:ffff:ffff:ffff,CR
+2801:1b:4000::,2801:1b:4000:ffff:ffff:ffff:ffff:ffff,CL
+2801:1b:8000::,2801:1b:8000:ffff:ffff:ffff:ffff:ffff,CL
+2801:1b:c000::,2801:1b:c000:ffff:ffff:ffff:ffff:ffff,PA
+2801:1c::,2801:1c::ffff:ffff:ffff:ffff:ffff,PY
+2801:1c:2000::,2801:1c:2000:ffff:ffff:ffff:ffff:ffff,PE
+2801:1c:4000::,2801:1c:4000:ffff:ffff:ffff:ffff:ffff,CO
+2801:1c:8000::,2801:1c:8000:ffff:ffff:ffff:ffff:ffff,EC
+2801:1c:c000::,2801:1c:c000:ffff:ffff:ffff:ffff:ffff,HN
+2801:1d::,2801:1d::ffff:ffff:ffff:ffff:ffff,PY
+2801:1d:4000::,2801:1d:4000:ffff:ffff:ffff:ffff:ffff,TT
+2801:1d:8000::,2801:1d:8000:ffff:ffff:ffff:ffff:ffff,AR
+2801:1d:c000::,2801:1d:c000:ffff:ffff:ffff:ffff:ffff,AR
+2801:1e::,2801:1e::ffff:ffff:ffff:ffff:ffff,EC
+2801:1e:2000::,2801:1e:2000:ffff:ffff:ffff:ffff:ffff,AR
+2801:1e:4000::,2801:1e:4007:ffff:ffff:ffff:ffff:ffff,AR
+2801:1e:8000::,2801:1e:8000:ffff:ffff:ffff:ffff:ffff,CR
+2801:1e:c000::,2801:1e:c000:ffff:ffff:ffff:ffff:ffff,AR
+2801:1f::,2801:1f::ffff:ffff:ffff:ffff:ffff,AR
+2801:1f:4000::,2801:1f:4000:ffff:ffff:ffff:ffff:ffff,CR
+2801:1f:8000::,2801:1f:8000:ffff:ffff:ffff:ffff:ffff,AR
+2801:1f:c000::,2801:1f:c000:ffff:ffff:ffff:ffff:ffff,CR
+2801:80::,2801:80::ffff:ffff:ffff:ffff:ffff,BR
+2801:80:10::,2801:80:10:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:20::,2801:80:30:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:40::,2801:80:40:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:50::,2801:80:50:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:60::,2801:80:60:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:70::,2801:80:70:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:80::,2801:80:80:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:90::,2801:80:90:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:a0::,2801:80:a0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:b0::,2801:80:b0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:c0::,2801:80:c0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:d0::,2801:80:d0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:e0::,2801:80:e0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:f0::,2801:80:f0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:100::,2801:80:100:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:110::,2801:80:110:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:120::,2801:80:120:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:130::,2801:80:130:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:140::,2801:80:140:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:150::,2801:80:150:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:160::,2801:80:160:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:170::,2801:80:170:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:180::,2801:80:180:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:190::,2801:80:190:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:1a0::,2801:80:1a0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:1b0::,2801:80:1b0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:1c0::,2801:80:1c0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:1d0::,2801:80:1d0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:1e0::,2801:80:1e0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:1f0::,2801:80:1f0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:200::,2801:80:200:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:210::,2801:80:210:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:220::,2801:80:220:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:230::,2801:80:230:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:240::,2801:80:240:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:250::,2801:80:250:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:260::,2801:80:260:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:270::,2801:80:270:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:280::,2801:80:280:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:290::,2801:80:290:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:2a0::,2801:80:2a0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:2b0::,2801:80:2b0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:2c0::,2801:80:2c0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:2d0::,2801:80:2d0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:2e0::,2801:80:2e0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:2f0::,2801:80:2f0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:300::,2801:80:300:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:320::,2801:80:320:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:330::,2801:80:330:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:340::,2801:80:340:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:350::,2801:80:350:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:360::,2801:80:360:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:370::,2801:80:370:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:380::,2801:80:380:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:390::,2801:80:390:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:3a0::,2801:80:3a0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:3b0::,2801:80:3b0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:3c0::,2801:80:3c0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:3d0::,2801:80:3d0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:3e0::,2801:80:3e0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:3f0::,2801:80:3f0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:400::,2801:80:400:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:410::,2801:80:410:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:420::,2801:80:420:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:430::,2801:80:430:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:440::,2801:80:440:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:450::,2801:80:450:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:460::,2801:80:460:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:470::,2801:80:470:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:480::,2801:80:480:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:490::,2801:80:490:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:4a0::,2801:80:4a0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:4b0::,2801:80:4b0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:4c0::,2801:80:4c0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:4d0::,2801:80:4d0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:4e0::,2801:80:4e0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:4f0::,2801:80:4f0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:500::,2801:80:500:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:510::,2801:80:510:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:520::,2801:80:520:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:530::,2801:80:530:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:540::,2801:80:540:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:550::,2801:80:550:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:560::,2801:80:560:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:570::,2801:80:570:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:580::,2801:80:580:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:590::,2801:80:590:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:5a0::,2801:80:5a0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:5b0::,2801:80:5b0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:5c0::,2801:80:5c0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:5d0::,2801:80:5d0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:5e0::,2801:80:5e0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:5f0::,2801:80:5f0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:600::,2801:80:600:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:610::,2801:80:610:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:620::,2801:80:620:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:630::,2801:80:630:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:640::,2801:80:640:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:650::,2801:80:650:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:660::,2801:80:660:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:670::,2801:80:670:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:680::,2801:80:680:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:690::,2801:80:690:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:6a0::,2801:80:6a0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:6b0::,2801:80:6b0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:6c0::,2801:80:6c0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:6d0::,2801:80:6d0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:6e0::,2801:80:6ef:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:700::,2801:80:700:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:710::,2801:80:710:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:720::,2801:80:720:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:730::,2801:80:730:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:740::,2801:80:740:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:750::,2801:80:750:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:760::,2801:80:760:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:770::,2801:80:770:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:780::,2801:80:780:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:790::,2801:80:790:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:7a0::,2801:80:7a0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:7b0::,2801:80:7b0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:7c0::,2801:80:7c3:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:7d0::,2801:80:7d0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:7e0::,2801:80:7e0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:7f0::,2801:80:7f0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:800::,2801:80:800:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:810::,2801:80:810:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:820::,2801:80:820:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:830::,2801:80:830:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:840::,2801:80:840:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:850::,2801:80:850:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:860::,2801:80:860:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:870::,2801:80:870:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:880::,2801:80:880:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:890::,2801:80:890:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:8a0::,2801:80:8a0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:8b0::,2801:80:8b0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:8c0::,2801:80:8c1:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:8d0::,2801:80:8d0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:8e0::,2801:80:8e0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:8f0::,2801:80:8f0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:900::,2801:80:900:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:910::,2801:80:910:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:920::,2801:80:920:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:930::,2801:80:930:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:940::,2801:80:940:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:950::,2801:80:950:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:960::,2801:80:960:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:970::,2801:80:970:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:980::,2801:80:980:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:990::,2801:80:990:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:9a0::,2801:80:9a0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:9b0::,2801:80:9b0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:9c0::,2801:80:9c0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:9d0::,2801:80:9d0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:9e0::,2801:80:9e0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:9f0::,2801:80:9f0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:a00::,2801:80:a00:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:a10::,2801:80:a10:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:a20::,2801:80:a20:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:a30::,2801:80:a30:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:a40::,2801:80:a40:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:a50::,2801:80:a50:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:a60::,2801:80:a61:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:a70::,2801:80:a70:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:a80::,2801:80:a8f:ffff:ffff:ffff:ffff:ffff,BR
+2801:82::,2801:82:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:84::,2801:84:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:86::,2801:86:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:88::,2801:88:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:8a::,2801:8a:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:8c::,2801:8c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:8e::,2801:8e:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:90::,2801:90:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:92::,2801:92:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:94::,2801:94:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:96::,2801:96:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:98::,2801:98:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:9a::,2801:9a:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:9c::,2801:9c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:9e::,2801:9e:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:a0::,2801:a0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:a2::,2801:a2:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:a4::,2801:a4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:a6::,2801:a6:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:a8::,2801:a8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:aa::,2801:aa:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:ac::,2801:ac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:ae::,2801:ae:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:b0::,2801:b0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:b2::,2801:b2:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:b4::,2801:b4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:b6::,2801:b6:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:b8::,2801:b8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:ba::,2801:ba:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:bc::,2801:bc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:be::,2801:be:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:c0::,2801:c0:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2801:c4::,2801:c4::ffff:ffff:ffff:ffff:ffff,MX
+2801:c4:10::,2801:c4:10:ffff:ffff:ffff:ffff:ffff,MX
+2801:c4:20::,2801:c4:20:ffff:ffff:ffff:ffff:ffff,MX
+2801:c4:30::,2801:c4:30:ffff:ffff:ffff:ffff:ffff,MX
+2801:c4:40::,2801:c4:40:ffff:ffff:ffff:ffff:ffff,MX
+2801:c4:50::,2801:c4:50:ffff:ffff:ffff:ffff:ffff,MX
+2801:c4:60::,2801:c4:60:ffff:ffff:ffff:ffff:ffff,MX
+2801:c4:80::,2801:c4:80:ffff:ffff:ffff:ffff:ffff,MX
+2801:c4:90::,2801:c4:90:ffff:ffff:ffff:ffff:ffff,MX
+2801:c4:a0::,2801:c4:a0:ffff:ffff:ffff:ffff:ffff,MX
+2801:c4:b0::,2801:c4:b3:ffff:ffff:ffff:ffff:ffff,MX
+2801:d0::,2801:d0:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2801:f0::,2801:f0::ffff:ffff:ffff:ffff:ffff,MX
+2801:f0:16::,2801:f0:16:ffff:ffff:ffff:ffff:ffff,MX
+2801:f0:20::,2801:f0:20:ffff:ffff:ffff:ffff:ffff,MX
+2801:f0:28::,2801:f0:28:ffff:ffff:ffff:ffff:ffff,MX
+2801:100::,2801:100:ff:ffff:ffff:ffff:ffff:ffff,AR
+2801:110::,2801:110:1fff:ffff:ffff:ffff:ffff:ffff,CO
+2801:120::,2801:120:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2801:130::,2801:130:fff:ffff:ffff:ffff:ffff:ffff,CO
+2801:140::,2801:140:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2801:150::,2801:150:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2801:160::,2801:160:ff:ffff:ffff:ffff:ffff:ffff,CO
+2801:180::,2801:180:f:ffff:ffff:ffff:ffff:ffff,PA
+2801:190::,2801:190:fff:ffff:ffff:ffff:ffff:ffff,CO
+2801:1a0::,2801:1a0:3f:ffff:ffff:ffff:ffff:ffff,CO
+2801:1c0::,2801:1c0:1ff:ffff:ffff:ffff:ffff:ffff,AR
+2801:1d0::,2801:1d0:f:ffff:ffff:ffff:ffff:ffff,CO
+2801:1e0::,2801:1e0:7f:ffff:ffff:ffff:ffff:ffff,AR
+2802::,2802:3:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803::,2803::ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:80::,2803:80:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:100::,2803:100:ffff:ffff:ffff:ffff:ffff:ffff,HN
+2803:180::,2803:180:ffff:ffff:ffff:ffff:ffff:ffff,NI
+2803:200::,2803:200:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2803:280::,2803:280:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:300::,2803:300:ffff:ffff:ffff:ffff:ffff:ffff,DO
+2803:400::,2803:400:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:480::,2803:480:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2803:500::,2803:500:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2803:600::,2803:600:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2803:680::,2803:680:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:700::,2803:700:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:800::,2803:800:ffff:ffff:ffff:ffff:ffff:ffff,NI
+2803:880::,2803:880:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:900::,2803:900:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:a00::,2803:a00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:a80::,2803:a80:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:b00::,2803:b00:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2803:c00::,2803:c00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:c80::,2803:c80:ffff:ffff:ffff:ffff:ffff:ffff,PY
+2803:d00::,2803:d00:ffff:ffff:ffff:ffff:ffff:ffff,GY
+2803:e00::,2803:e00:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:e80::,2803:e80:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:f00::,2803:f00:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2803:1000::,2803:1000:ffff:ffff:ffff:ffff:ffff:ffff,SV
+2803:1080::,2803:1080:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:1100::,2803:1100:ffff:ffff:ffff:ffff:ffff:ffff,CW
+2803:1180::,2803:1180:ffff:ffff:ffff:ffff:ffff:ffff,BO
+2803:1200::,2803:1200:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:1280::,2803:1280:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2803:1300::,2803:1300:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:1400::,2803:1400:ffff:ffff:ffff:ffff:ffff:ffff,DO
+2803:1480::,2803:1480:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:1500::,2803:1500:ffff:ffff:ffff:ffff:ffff:ffff,TT
+2803:1600::,2803:1600:ffff:ffff:ffff:ffff:ffff:ffff,BQ
+2803:1680::,2803:1680:ffff:ffff:ffff:ffff:ffff:ffff,GF
+2803:1700::,2803:1700:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:1800::,2803:1800:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:1880::,2803:1880:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2803:1900::,2803:1900:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:1a00::,2803:1a00:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:1a80::,2803:1a80:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:1b00::,2803:1b00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:1c00::,2803:1c00:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2803:1c80::,2803:1c80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:1d00::,2803:1d00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:1e00::,2803:1e00:ffff:ffff:ffff:ffff:ffff:ffff,NI
+2803:1e80::,2803:1e80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:1f00::,2803:1f00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:2000::,2803:2000:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:2080::,2803:2080:ffff:ffff:ffff:ffff:ffff:ffff,HN
+2803:2100::,2803:2100:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2803:2180::,2803:2180:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:2200::,2803:2200:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2803:2280::,2803:2280:ffff:ffff:ffff:ffff:ffff:ffff,BZ
+2803:2300::,2803:2300:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:2400::,2803:2400:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:2480::,2803:2480:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2803:2500::,2803:2500:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2803:2600::,2803:2600:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:2680::,2803:2680:ffff:ffff:ffff:ffff:ffff:ffff,UY
+2803:2700::,2803:2700:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:2800::,2803:2800:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:2880::,2803:2880:ffff:ffff:ffff:ffff:ffff:ffff,BO
+2803:2900::,2803:2900:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2803:2a00::,2803:2a00:ffff:ffff:ffff:ffff:ffff:ffff,PY
+2803:2a80::,2803:2a80:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:2b00::,2803:2b00:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2803:2c00::,2803:2c00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:2c80::,2803:2c80:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2803:2d00::,2803:2d00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:2e00::,2803:2e00:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2803:2e80::,2803:2e80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:2f00::,2803:2f00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:3000::,2803:3000:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2803:3080::,2803:3080:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2803:3100::,2803:3100:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:3200::,2803:3200:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:3280::,2803:3280:ffff:ffff:ffff:ffff:ffff:ffff,GT
+2803:3300::,2803:3300:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2803:3400::,2803:3400:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2803:3480::,2803:3480:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:3500::,2803:3500:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:3600::,2803:3600:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:3680::,2803:3680:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:3700::,2803:3700:ffff:ffff:ffff:ffff:ffff:ffff,DO
+2803:3800::,2803:3800:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:3880::,2803:3880:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:3900::,2803:3900:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2803:3a00::,2803:3a00:ffff:ffff:ffff:ffff:ffff:ffff,GT
+2803:3a80::,2803:3a80:ffff:ffff:ffff:ffff:ffff:ffff,HN
+2803:3b00::,2803:3b00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:3c00::,2803:3c00:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2803:3c80::,2803:3c80:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:3d00::,2803:3d00:ffff:ffff:ffff:ffff:ffff:ffff,BZ
+2803:3e00::,2803:3e00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:3e80::,2803:3e80:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:3f00::,2803:3f00:ffff:ffff:ffff:ffff:ffff:ffff,HN
+2803:4000::,2803:4000:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:4080::,2803:4080:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:4100::,2803:4100:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:4180::,2803:4180:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2803:4200::,2803:4200:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:4280::,2803:4280:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:4300::,2803:4300:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2803:4400::,2803:4400:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:4480::,2803:4480:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2803:4500::,2803:4500:ffff:ffff:ffff:ffff:ffff:ffff,CW
+2803:4600::,2803:4600:ffff:ffff:ffff:ffff:ffff:ffff,HN
+2803:4680::,2803:4680:ffff:ffff:ffff:ffff:ffff:ffff,TT
+2803:4700::,2803:4700:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:4800::,2803:4800:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2803:4880::,2803:4880:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:4900::,2803:4900:ffff:ffff:ffff:ffff:ffff:ffff,BQ
+2803:4a00::,2803:4a00:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:4a80::,2803:4a80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:4b00::,2803:4b00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:4c00::,2803:4c00:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2803:4c80::,2803:4c80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:4d00::,2803:4d00:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:4e00::,2803:4e00:ffff:ffff:ffff:ffff:ffff:ffff,UY
+2803:4e80::,2803:4e80:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:4f00::,2803:4f00:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2803:5000::,2803:5000:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:5080::,2803:5080:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:5100::,2803:5100:ffff:ffff:ffff:ffff:ffff:ffff,GT
+2803:5200::,2803:5200:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:5280::,2803:5280:ffff:ffff:ffff:ffff:ffff:ffff,DO
+2803:5300::,2803:5300:ffff:ffff:ffff:ffff:ffff:ffff,GT
+2803:5400::,2803:5400:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:5480::,2803:5480:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:5500::,2803:5500:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:5600::,2803:5600:ffff:ffff:ffff:ffff:ffff:ffff,HN
+2803:5680::,2803:5680:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2803:5700::,2803:5700:ffff:ffff:ffff:ffff:ffff:ffff,BO
+2803:5880::,2803:5880:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:5900::,2803:5900:ffff:ffff:ffff:ffff:ffff:ffff,GY
+2803:5a00::,2803:5a00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:5a80::,2803:5a80:ffff:ffff:ffff:ffff:ffff:ffff,DO
+2803:5b00::,2803:5b00:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:5c00::,2803:5c00:ffff:ffff:ffff:ffff:ffff:ffff,BO
+2803:5c80::,2803:5c80:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:5d00::,2803:5d00:ffff:ffff:ffff:ffff:ffff:ffff,SV
+2803:5e00::,2803:5e00:ffff:ffff:ffff:ffff:ffff:ffff,BO
+2803:5e80::,2803:5e80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:5f00::,2803:5f00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:6000::,2803:6000:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:6080::,2803:6080:ffff:ffff:ffff:ffff:ffff:ffff,US
+2803:6100::,2803:6100:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:6180::,2803:6180:ffff:ffff:ffff:ffff:ffff:ffff,HN
+2803:6200::,2803:6200:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:6280::,2803:6280:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2803:6300::,2803:6300:ffff:ffff:ffff:ffff:ffff:ffff,GT
+2803:6400::,2803:6400:ffff:ffff:ffff:ffff:ffff:ffff,DO
+2803:6480::,2803:6480:ffff:ffff:ffff:ffff:ffff:ffff,BZ
+2803:6500::,2803:6500:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2803:6600::,2803:6600:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:6680::,2803:6680:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2803:6700::,2803:6700:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:6800::,2803:6800:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:6880::,2803:6880:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:6900::,2803:6900:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:6a00::,2803:6a00:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2803:6a80::,2803:6a80:ffff:ffff:ffff:ffff:ffff:ffff,NI
+2803:6b00::,2803:6b00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:6c00::,2803:6c00:ffff:ffff:ffff:ffff:ffff:ffff,HN
+2803:6c80::,2803:6c80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:6d00::,2803:6d00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:6e00::,2803:6e00:ffff:ffff:ffff:ffff:ffff:ffff,SR
+2803:6e80::,2803:6e80:ffff:ffff:ffff:ffff:ffff:ffff,HN
+2803:6f00::,2803:6f00:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:7000::,2803:7000:ffff:ffff:ffff:ffff:ffff:ffff,GT
+2803:7080::,2803:7080:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:7100::,2803:7100:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:7200::,2803:7200:ffff:ffff:ffff:ffff:ffff:ffff,HN
+2803:7280::,2803:7280:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2803:7300::,2803:7300:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:7400::,2803:7400:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:7480::,2803:7480:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:7500::,2803:7500:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:7600::,2803:7600:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:7680::,2803:7680:ffff:ffff:ffff:ffff:ffff:ffff,BO
+2803:7700::,2803:7700:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:7800::,2803:7800:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2803:7880::,2803:7880:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:7900::,2803:7900:ffff:ffff:ffff:ffff:ffff:ffff,BZ
+2803:7a00::,2803:7a00:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:7a80::,2803:7a80:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:7b00::,2803:7b00:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:7c00::,2803:7c00:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:7c80::,2803:7c80:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2803:7d00::,2803:7d00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:7e00::,2803:7e00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:7e80::,2803:7e80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:7f00::,2803:7f00:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:8000::,2803:8000:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:8080::,2803:8080:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:8100::,2803:8100:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2803:8180::,2803:8180:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:8200::,2803:8200:ffff:ffff:ffff:ffff:ffff:ffff,HN
+2803:8280::,2803:8280:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2803:8300::,2803:8300:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2803:8400::,2803:8400:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:8480::,2803:8480:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:8500::,2803:8500:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:8600::,2803:8600:ffff:ffff:ffff:ffff:ffff:ffff,HT
+2803:8680::,2803:8680:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:8700::,2803:8700:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:8800::,2803:8800:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:8880::,2803:8880:ffff:ffff:ffff:ffff:ffff:ffff,NI
+2803:8900::,2803:8900:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:8a00::,2803:8a00:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2803:8a80::,2803:8a80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:8b00::,2803:8b00:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:8c00::,2803:8c00:ffff:ffff:ffff:ffff:ffff:ffff,BZ
+2803:8c80::,2803:8c80:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2803:8d00::,2803:8d00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:8e00::,2803:8e00:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:8e80::,2803:8e80:ffff:ffff:ffff:ffff:ffff:ffff,PY
+2803:8f00::,2803:8f00:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2803:9000::,2803:9000:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:9080::,2803:9080:ffff:ffff:ffff:ffff:ffff:ffff,HN
+2803:9100::,2803:9100:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:9180::,2803:9180:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:9200::,2803:9200:ffff:ffff:ffff:ffff:ffff:ffff,SV
+2803:9280::,2803:9280:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:9300::,2803:9300:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:9400::,2803:9400:ffff:ffff:ffff:ffff:ffff:ffff,BO
+2803:9480::,2803:9480:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:9500::,2803:9500:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:9600::,2803:9600:ffff:ffff:ffff:ffff:ffff:ffff,CW
+2803:9680::,2803:9680:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:9700::,2803:9700:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2803:9800::,2803:9800:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:9880::,2803:9880:ffff:ffff:ffff:ffff:ffff:ffff,BZ
+2803:9900::,2803:9900:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:9a00::,2803:9a00:ffff:ffff:ffff:ffff:ffff:ffff,BZ
+2803:9a80::,2803:9a80:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:9b00::,2803:9b00:ffff:ffff:ffff:ffff:ffff:ffff,DO
+2803:9c00::,2803:9c00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:9c80::,2803:9c80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:9d00::,2803:9d00:ffff:ffff:ffff:ffff:ffff:ffff,SV
+2803:9e00::,2803:9e00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:9e80::,2803:9e80:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:9f00::,2803:9f00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:a000::,2803:a000:ffff:ffff:ffff:ffff:ffff:ffff,BQ
+2803:a080::,2803:a080:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:a100::,2803:a100:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:a180::,2803:a180:ffff:ffff:ffff:ffff:ffff:ffff,DO
+2803:a200::,2803:a200:ffff:ffff:ffff:ffff:ffff:ffff,SR
+2803:a280::,2803:a280:ffff:ffff:ffff:ffff:ffff:ffff,DO
+2803:a300::,2803:a300:ffff:ffff:ffff:ffff:ffff:ffff,BZ
+2803:a400::,2803:a400:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2803:a480::,2803:a480:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:a500::,2803:a500:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:a600::,2803:a600:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:a680::,2803:a680:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:a700::,2803:a700:ffff:ffff:ffff:ffff:ffff:ffff,HN
+2803:a800::,2803:a800:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:a880::,2803:a880:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:a900::,2803:a900:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:aa00::,2803:aa00:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:aa80::,2803:aa80:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:ab00::,2803:ab00:ffff:ffff:ffff:ffff:ffff:ffff,DO
+2803:ac00::,2803:ac00:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:ac80::,2803:ac80:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:ad00::,2803:ad00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:ae00::,2803:ae00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:ae80::,2803:ae80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:af00::,2803:af00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:b000::,2803:b000:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:b080::,2803:b080:ffff:ffff:ffff:ffff:ffff:ffff,BZ
+2803:b100::,2803:b100:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:b200::,2803:b200:ffff:ffff:ffff:ffff:ffff:ffff,UY
+2803:b280::,2803:b280:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:b300::,2803:b300:ffff:ffff:ffff:ffff:ffff:ffff,PY
+2803:b400::,2803:b400:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2803:b480::,2803:b480:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:b500::,2803:b500:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2803:b600::,2803:b600:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:b680::,2803:b680:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:b700::,2803:b700:ffff:ffff:ffff:ffff:ffff:ffff,HN
+2803:b800::,2803:b800:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:b880::,2803:b880:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:b900::,2803:b900:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:ba00::,2803:ba00:ffff:ffff:ffff:ffff:ffff:ffff,GT
+2803:ba80::,2803:ba80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:bb00::,2803:bb00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:bc00::,2803:bc00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:bc80::,2803:bc80:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:bd00::,2803:bd00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:be00::,2803:be00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:be80::,2803:be80:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:bf00::,2803:bf00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:c000::,2803:c000:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2803:c080::,2803:c080:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:c100::,2803:c100:ffff:ffff:ffff:ffff:ffff:ffff,PY
+2803:c180::,2803:c180:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:c200::,2803:c200:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2803:c280::,2803:c280:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2803:c300::,2803:c300:ffff:ffff:ffff:ffff:ffff:ffff,GT
+2803:c400::,2803:c400:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:c480::,2803:c480:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:c500::,2803:c500:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:c600::,2803:c600:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:c680::,2803:c680:ffff:ffff:ffff:ffff:ffff:ffff,HT
+2803:c700::,2803:c700:ffff:ffff:ffff:ffff:ffff:ffff,GF
+2803:c800::,2803:c800:ffff:ffff:ffff:ffff:ffff:ffff,GT
+2803:c880::,2803:c880:ffff:ffff:ffff:ffff:ffff:ffff,HN
+2803:c900::,2803:c900:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:ca00::,2803:ca00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:ca80::,2803:ca80:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:cb00::,2803:cb00:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:cc00::,2803:cc00:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:cc80::,2803:cc80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:cd00::,2803:cd00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:ce00::,2803:ce00:ffff:ffff:ffff:ffff:ffff:ffff,HN
+2803:ce80::,2803:ce80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:cf00::,2803:cf00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:d000::,2803:d000:ffff:ffff:ffff:ffff:ffff:ffff,BZ
+2803:d080::,2803:d080:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:d100::,2803:d100:ffff:ffff:ffff:ffff:ffff:ffff,GT
+2803:d200::,2803:d200:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:d280::,2803:d280:ffff:ffff:ffff:ffff:ffff:ffff,PY
+2803:d300::,2803:d300:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2803:d400::,2803:d400:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:d480::,2803:d480:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2803:d500::,2803:d500:ffff:ffff:ffff:ffff:ffff:ffff,BZ
+2803:d600::,2803:d600:ffff:ffff:ffff:ffff:ffff:ffff,UY
+2803:d680::,2803:d680:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2803:d700::,2803:d700:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2803:d800::,2803:d800:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:d880::,2803:d880:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:d900::,2803:d900:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:da00::,2803:da00:ffff:ffff:ffff:ffff:ffff:ffff,GY
+2803:da80::,2803:da80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:db00::,2803:db00:ffff:ffff:ffff:ffff:ffff:ffff,HN
+2803:dc00::,2803:dc00:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:dc80::,2803:dc80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:dd00::,2803:dd00:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2803:de00::,2803:de00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:de80::,2803:de80:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:df00::,2803:df00:ffff:ffff:ffff:ffff:ffff:ffff,SV
+2803:e000::,2803:e000:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:e080::,2803:e080:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:e100::,2803:e100:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:e180::,2803:e180:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:e200::,2803:e200:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:e280::,2803:e280:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:e300::,2803:e300:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:e400::,2803:e400:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:e480::,2803:e480:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:e500::,2803:e500:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2803:e600::,2803:e600:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2803:e680::,2803:e680:ffff:ffff:ffff:ffff:ffff:ffff,HN
+2803:e700::,2803:e700:ffff:ffff:ffff:ffff:ffff:ffff,HN
+2803:e800::,2803:e800:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:e880::,2803:e880:ffff:ffff:ffff:ffff:ffff:ffff,GT
+2803:e900::,2803:e900:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:ea00::,2803:ea00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:ea80::,2803:ea80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:eb00::,2803:eb00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:ec00::,2803:ec00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:ec80::,2803:ec80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:ed00::,2803:ed00:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2803:ee00::,2803:ee00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:ee80::,2803:ee80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:ef00::,2803:ef00:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2803:f000::,2803:f000:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:f080::,2803:f080:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2803:f100::,2803:f100:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:f200::,2803:f200:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:f280::,2803:f280:ffff:ffff:ffff:ffff:ffff:ffff,DO
+2803:f300::,2803:f300:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:f400::,2803:f400:ffff:ffff:ffff:ffff:ffff:ffff,HN
+2803:f480::,2803:f480:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:f500::,2803:f500:ffff:ffff:ffff:ffff:ffff:ffff,CW
+2803:f600::,2803:f600:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:f680::,2803:f680:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:f700::,2803:f700:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:f800::,2803:f800:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:f880::,2803:f880:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:f900::,2803:f900:ffff:ffff:ffff:ffff:ffff:ffff,BZ
+2803:fa00::,2803:fa00:ffff:ffff:ffff:ffff:ffff:ffff,BO
+2803:fa80::,2803:fa80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:fb00::,2803:fb00:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2803:fc80::,2803:fc80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:fd00::,2803:fd00:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:fe00::,2803:fe00:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:fe80::,2803:fe80:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2803:ff00::,2803:ff00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2804::,2804::ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:4::,2804:4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:8::,2804:c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:10::,2804:10:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:14::,2804:14:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:18::,2804:18:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1c::,2804:1c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:20::,2804:20:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:24::,2804:24:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:28::,2804:28:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2c::,2804:2c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:30::,2804:30:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:34::,2804:34:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:38::,2804:38:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3c::,2804:3c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:40::,2804:40:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:44::,2804:44:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:48::,2804:48:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:4c::,2804:4c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:50::,2804:50:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:54::,2804:54:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:58::,2804:58:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:5c::,2804:5c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:60::,2804:60:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:64::,2804:64:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:68::,2804:68:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:6c::,2804:6c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:70::,2804:70:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:74::,2804:74:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:78::,2804:78:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:7c::,2804:7c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:80::,2804:80:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:84::,2804:84:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:88::,2804:88:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:8c::,2804:8c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:90::,2804:90:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:94::,2804:94:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:98::,2804:98:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:9c::,2804:9c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a0::,2804:a0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a4::,2804:a4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a8::,2804:a8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ac::,2804:ac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b0::,2804:b0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b4::,2804:b4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b8::,2804:b8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c0::,2804:c0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c4::,2804:c4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c8::,2804:c8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:cc::,2804:cc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d0::,2804:d0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d4::,2804:d4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d8::,2804:d8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:dc::,2804:dc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e0::,2804:e0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e4::,2804:e4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e8::,2804:e8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ec::,2804:ec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f0::,2804:f0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f4::,2804:f4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f8::,2804:f8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:fc::,2804:fc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:100::,2804:100:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:104::,2804:104:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:108::,2804:108:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:10c::,2804:10c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:110::,2804:110:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:114::,2804:114:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:118::,2804:118:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:11c::,2804:11c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:120::,2804:120:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:124::,2804:124:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:128::,2804:128:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:12c::,2804:12c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:130::,2804:130:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:134::,2804:134:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:138::,2804:138:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:13c::,2804:13c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:140::,2804:140:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:144::,2804:144:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:148::,2804:148:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:14c::,2804:14d:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:150::,2804:154:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:158::,2804:158:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:15c::,2804:15c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:160::,2804:160:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:164::,2804:164:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:168::,2804:168:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:16c::,2804:16c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:170::,2804:170:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:174::,2804:174:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:178::,2804:178:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:17c::,2804:17c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:180::,2804:180:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:184::,2804:184:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:188::,2804:188:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:18c::,2804:18c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:190::,2804:190:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:194::,2804:194:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:198::,2804:198:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:19c::,2804:19c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1a0::,2804:1a0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1a4::,2804:1a4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1a8::,2804:1a8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1ac::,2804:1ac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1b0::,2804:1b1:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1b8::,2804:1b8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1bc::,2804:1bc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1c0::,2804:1c0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1c4::,2804:1c4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1c8::,2804:1c8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1cc::,2804:1cc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1d0::,2804:1d0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1d4::,2804:1d4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1d8::,2804:1d8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1dc::,2804:1dc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1e0::,2804:1e0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1e4::,2804:1e4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1e8::,2804:1e8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1ec::,2804:1ec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1f0::,2804:1f0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1f4::,2804:1f4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1f8::,2804:1f8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1fc::,2804:1fc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:200::,2804:200:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:204::,2804:204:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:208::,2804:208:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:20c::,2804:20c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:210::,2804:210:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:214::,2804:214:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:218::,2804:218:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:220::,2804:220:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:224::,2804:224:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:228::,2804:228:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:22c::,2804:22c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:230::,2804:230:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:234::,2804:234:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:238::,2804:238:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:23c::,2804:23c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:240::,2804:240:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:244::,2804:244:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:248::,2804:248:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:24c::,2804:24c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:250::,2804:250:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:254::,2804:254:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:258::,2804:258:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:25c::,2804:25c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:260::,2804:260:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:268::,2804:268:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:26c::,2804:26c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:270::,2804:270:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:274::,2804:274:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:27c::,2804:27c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:280::,2804:280:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:284::,2804:284:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:288::,2804:288:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:28c::,2804:28c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:290::,2804:290:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:294::,2804:294:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:298::,2804:298:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:29c::,2804:29c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2a0::,2804:2a0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2a4::,2804:2a4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2a8::,2804:2a8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2ac::,2804:2ac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2b0::,2804:2b0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2b4::,2804:2b4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2b8::,2804:2b8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2bc::,2804:2bc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2c0::,2804:2c0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2c4::,2804:2c4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2c8::,2804:2c8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2cc::,2804:2cc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2d0::,2804:2d0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2d4::,2804:2d4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2d8::,2804:2d8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2dc::,2804:2dc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2e0::,2804:2e0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2e4::,2804:2e4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2e8::,2804:2e8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2ec::,2804:2ec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2f0::,2804:2f0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2f4::,2804:2f4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2f8::,2804:2f8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2fc::,2804:2fc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:300::,2804:303:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:308::,2804:308:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:30c::,2804:30c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:310::,2804:310:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:314::,2804:314:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:318::,2804:318:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:31c::,2804:31c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:320::,2804:320:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:324::,2804:324:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:328::,2804:328:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:32c::,2804:32c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:330::,2804:330:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:334::,2804:334:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:338::,2804:338:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:33c::,2804:33c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:340::,2804:340:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:344::,2804:344:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:348::,2804:348:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:350::,2804:350:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:354::,2804:354:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:358::,2804:358:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:35c::,2804:35c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:360::,2804:360:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:364::,2804:364:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:368::,2804:368:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:36c::,2804:36c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:370::,2804:370:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:374::,2804:374:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:378::,2804:378:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:37c::,2804:37c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:380::,2804:380:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:384::,2804:384:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:388::,2804:38b:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:390::,2804:390:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:394::,2804:394:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:398::,2804:398:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:39c::,2804:39c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3a0::,2804:3a0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3a4::,2804:3a4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3a8::,2804:3a8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3ac::,2804:3ac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3b0::,2804:3b0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3b4::,2804:3b4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3b8::,2804:3b8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3bc::,2804:3bc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3c0::,2804:3c0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3c4::,2804:3c4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3c8::,2804:3c8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3cc::,2804:3cc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3d0::,2804:3d0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3d4::,2804:3d4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3d8::,2804:3d8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3dc::,2804:3dc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3e0::,2804:3e0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3e4::,2804:3e4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3e8::,2804:3e8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3ec::,2804:3ec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3f0::,2804:3f0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3f4::,2804:3f4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3f8::,2804:3f8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3fc::,2804:3fc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:400::,2804:400:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:404::,2804:404:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:40c::,2804:40c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:410::,2804:410:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:414::,2804:414:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:418::,2804:418:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:41c::,2804:41c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:420::,2804:420:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:424::,2804:424:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:428::,2804:428:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:430::,2804:431:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:438::,2804:438:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:43c::,2804:43c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:440::,2804:440:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:444::,2804:444:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:448::,2804:448:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:44c::,2804:44c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:450::,2804:450:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:454::,2804:454:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:458::,2804:458:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:45c::,2804:45c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:460::,2804:460:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:464::,2804:464:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:468::,2804:468:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:46c::,2804:46c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:470::,2804:470:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:474::,2804:474:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:478::,2804:478:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:47c::,2804:47c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:480::,2804:480:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:484::,2804:484:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:488::,2804:488:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:48c::,2804:48c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:490::,2804:490:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:494::,2804:494:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:498::,2804:498:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:49c::,2804:49c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:4a0::,2804:4a0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:4a4::,2804:4a4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:4a8::,2804:4a8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:4ac::,2804:4ac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:4b0::,2804:4b0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:4b4::,2804:4b4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:4b8::,2804:4b8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:4bc::,2804:4bc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:4c0::,2804:4c0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:4c4::,2804:4c4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:4c8::,2804:4c8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:4cc::,2804:4cc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:4d0::,2804:4d0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:4d4::,2804:4d4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:4d8::,2804:4d8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:4dc::,2804:4dc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:4e0::,2804:4e0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:4e4::,2804:4e4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:4e8::,2804:4e8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:4ec::,2804:4ec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:4f0::,2804:4f0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:4f4::,2804:4f4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:4f8::,2804:4f8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:4fc::,2804:4fc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:500::,2804:500:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:504::,2804:504:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:508::,2804:508:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:50c::,2804:50c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:510::,2804:510:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:514::,2804:514:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:518::,2804:518:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:51c::,2804:51c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:520::,2804:520:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:528::,2804:528:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:52c::,2804:52c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:530::,2804:530:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:534::,2804:534:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:538::,2804:538:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:53c::,2804:53c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:540::,2804:540:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:544::,2804:544:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:548::,2804:548:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:54c::,2804:54c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:550::,2804:550:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:554::,2804:554:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:558::,2804:558:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:55c::,2804:55c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:560::,2804:560:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:564::,2804:564:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:568::,2804:568:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:56c::,2804:56c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:570::,2804:570:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:574::,2804:574:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:578::,2804:578:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:57c::,2804:57c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:580::,2804:580:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:584::,2804:584:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:588::,2804:588:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:58c::,2804:58c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:590::,2804:590:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:594::,2804:594:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:598::,2804:598:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:59c::,2804:59c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:5a0::,2804:5a0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:5a4::,2804:5a4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:5a8::,2804:5a8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:5ac::,2804:5ac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:5b0::,2804:5b0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:5b4::,2804:5b4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:5b8::,2804:5b8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:5bc::,2804:5bc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:5c0::,2804:5c0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:5c4::,2804:5c4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:5c8::,2804:5c8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:5cc::,2804:5cc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:5d0::,2804:5d0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:5d4::,2804:5d4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:5d8::,2804:5d8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:5dc::,2804:5dc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:5e0::,2804:5e0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:5e4::,2804:5e4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:5e8::,2804:5e8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:5ec::,2804:5ec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:5f0::,2804:5f0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:5f4::,2804:5f4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:5f8::,2804:5f8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:5fc::,2804:5fc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:600::,2804:600:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:604::,2804:604:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:608::,2804:608:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:60c::,2804:60c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:610::,2804:610:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:614::,2804:614:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:618::,2804:618:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:61c::,2804:61c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:620::,2804:620:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:624::,2804:624:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:628::,2804:628:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:62c::,2804:62c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:630::,2804:630:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:634::,2804:634:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:638::,2804:638:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:63c::,2804:63c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:640::,2804:640:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:644::,2804:644:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:648::,2804:648:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:64c::,2804:64c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:650::,2804:650:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:654::,2804:654:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:658::,2804:658:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:65c::,2804:65c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:660::,2804:660:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:664::,2804:664:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:668::,2804:668:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:66c::,2804:66c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:670::,2804:670:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:674::,2804:674:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:678::,2804:678:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:67c::,2804:67c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:680::,2804:680:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:684::,2804:684:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:688::,2804:688:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:68c::,2804:68c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:690::,2804:690:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:694::,2804:694:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:698::,2804:698:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:69c::,2804:69c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:6a0::,2804:6a0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:6a4::,2804:6a4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:6a8::,2804:6a8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:6ac::,2804:6ac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:6b0::,2804:6b0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:6b4::,2804:6b4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:6b8::,2804:6b8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:6bc::,2804:6bc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:6c0::,2804:6c0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:6c4::,2804:6c4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:6c8::,2804:6c8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:6cc::,2804:6cc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:6d0::,2804:6d0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:6d4::,2804:6d4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:6d8::,2804:6d8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:6dc::,2804:6dc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:6e0::,2804:6e0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:6e4::,2804:6e4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:6e8::,2804:6e8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:6ec::,2804:6ec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:6f0::,2804:6f0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:6f4::,2804:6f4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:6f8::,2804:6f8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:6fc::,2804:6fc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:700::,2804:700:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:704::,2804:704:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:708::,2804:708:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:70c::,2804:70c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:710::,2804:710:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:714::,2804:714:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:718::,2804:718:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:71c::,2804:71c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:720::,2804:720:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:724::,2804:724:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:728::,2804:728:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:72c::,2804:72c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:730::,2804:730:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:734::,2804:734:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:738::,2804:738:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:73c::,2804:73c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:740::,2804:740:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:744::,2804:744:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:748::,2804:748:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:74c::,2804:74c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:750::,2804:750:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:754::,2804:754:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:758::,2804:758:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:75c::,2804:75c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:760::,2804:760:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:764::,2804:764:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:768::,2804:768:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:76c::,2804:76c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:770::,2804:770:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:774::,2804:774:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:778::,2804:778:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:77c::,2804:77c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:780::,2804:780:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:784::,2804:784:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:788::,2804:788:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:78c::,2804:78c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:790::,2804:790:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:794::,2804:794:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:798::,2804:798:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:79c::,2804:79c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:7a0::,2804:7a0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:7a4::,2804:7a4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:7a8::,2804:7a8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:7ac::,2804:7ac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:7b0::,2804:7b0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:7b4::,2804:7b4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:7b8::,2804:7b8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:7bc::,2804:7bc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:7c0::,2804:7c0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:7c4::,2804:7c4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:7c8::,2804:7c8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:7cc::,2804:7cc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:7d0::,2804:7d0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:7d4::,2804:7d4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:7dc::,2804:7dc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:7e0::,2804:7e0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:7e4::,2804:7e4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:7e8::,2804:7e8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:7ec::,2804:7ec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:7f0::,2804:7f7:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:800::,2804:800:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:804::,2804:804:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:808::,2804:808:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:80c::,2804:80c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:810::,2804:810:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:814::,2804:814:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:818::,2804:818:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:81c::,2804:81c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:820::,2804:820:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:824::,2804:824:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:828::,2804:828:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:82c::,2804:82c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:830::,2804:830:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:834::,2804:834:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:838::,2804:838:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:83c::,2804:83c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:840::,2804:840:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:844::,2804:844:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:848::,2804:848:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:84c::,2804:84c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:850::,2804:850:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:854::,2804:854:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:858::,2804:858:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:85c::,2804:85c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:860::,2804:860:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:864::,2804:864:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:868::,2804:868:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:86c::,2804:86c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:870::,2804:870:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:874::,2804:874:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:878::,2804:878:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:87c::,2804:87c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:880::,2804:880:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:884::,2804:884:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:888::,2804:888:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:88c::,2804:88c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:890::,2804:890:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:894::,2804:894:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:898::,2804:898:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:89c::,2804:89c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:8a0::,2804:8a0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:8a4::,2804:8a4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:8a8::,2804:8a8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:8ac::,2804:8ac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:8b0::,2804:8b0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:8b4::,2804:8b4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:8bc::,2804:8bc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:8c0::,2804:8c0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:8c4::,2804:8c4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:8c8::,2804:8c8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:8cc::,2804:8cc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:8d0::,2804:8d0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:8d4::,2804:8d4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:8d8::,2804:8d8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:8dc::,2804:8dc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:8e0::,2804:8e0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:8e4::,2804:8e4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:8e8::,2804:8e8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:8ec::,2804:8ec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:8f0::,2804:8f0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:8f4::,2804:8f4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:8f8::,2804:8f8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:8fc::,2804:8fc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:904::,2804:904:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:908::,2804:908:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:90c::,2804:90c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:910::,2804:910:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:914::,2804:914:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:918::,2804:918:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:91c::,2804:91c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:920::,2804:920:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:924::,2804:924:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:928::,2804:928:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:92c::,2804:92c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:930::,2804:930:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:934::,2804:934:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:938::,2804:938:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:93c::,2804:93c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:940::,2804:940:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:944::,2804:944:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:948::,2804:948:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:94c::,2804:94c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:950::,2804:950:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:954::,2804:954:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:958::,2804:958:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:95c::,2804:95c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:960::,2804:960:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:964::,2804:964:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:968::,2804:968:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:96c::,2804:96c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:970::,2804:970:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:974::,2804:974:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:978::,2804:978:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:97c::,2804:97c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:980::,2804:980:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:984::,2804:984:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:988::,2804:988:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:98c::,2804:98c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:990::,2804:990:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:994::,2804:994:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:998::,2804:998:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:99c::,2804:99c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:9a0::,2804:9a0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:9a4::,2804:9a4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:9a8::,2804:9a8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:9ac::,2804:9ac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:9b0::,2804:9b0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:9b4::,2804:9b4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:9b8::,2804:9b8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:9bc::,2804:9bc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:9c0::,2804:9c0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:9c4::,2804:9c4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:9c8::,2804:9c8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:9cc::,2804:9cc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:9d0::,2804:9d0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:9d4::,2804:9d4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:9d8::,2804:9d8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:9dc::,2804:9dc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:9e0::,2804:9e0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:9e4::,2804:9e4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:9e8::,2804:9e8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:9ec::,2804:9ec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:9f0::,2804:9f0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:9f4::,2804:9f4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:9f8::,2804:9f8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:9fc::,2804:9fc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a00::,2804:a00:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a04::,2804:a04:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a08::,2804:a08:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a0c::,2804:a0c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a10::,2804:a10:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a14::,2804:a14:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a18::,2804:a18:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a1c::,2804:a1c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a20::,2804:a20:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a24::,2804:a24:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a28::,2804:a28:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a2c::,2804:a2c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a30::,2804:a30:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a34::,2804:a34:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a38::,2804:a38:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a3c::,2804:a3c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a40::,2804:a40:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a44::,2804:a44:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a48::,2804:a48:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a4c::,2804:a4c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a50::,2804:a50:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a54::,2804:a54:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a58::,2804:a58:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a5c::,2804:a5c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a60::,2804:a60:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a64::,2804:a64:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a68::,2804:a68:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a6c::,2804:a6c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a70::,2804:a70:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a74::,2804:a74:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a78::,2804:a78:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a7c::,2804:a7c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a80::,2804:a80:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a84::,2804:a84:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a88::,2804:a88:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a8c::,2804:a8c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a90::,2804:a90:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a94::,2804:a94:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a98::,2804:a98:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a9c::,2804:a9c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:aa0::,2804:aa0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:aa4::,2804:aa4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:aa8::,2804:aa8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:aac::,2804:aac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ab0::,2804:ab0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ab4::,2804:ab4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ab8::,2804:ab8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:abc::,2804:abc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ac0::,2804:ac0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ac4::,2804:ac4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ac8::,2804:ac8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:acc::,2804:acc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ad0::,2804:ad0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ad4::,2804:ad4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ad8::,2804:ad8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:adc::,2804:adc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ae0::,2804:ae0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ae4::,2804:ae4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ae8::,2804:ae8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:aec::,2804:aec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:af0::,2804:af0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:af4::,2804:af4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:af8::,2804:af8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:afc::,2804:afc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b00::,2804:b00:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b04::,2804:b04:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b08::,2804:b08:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b0c::,2804:b0c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b10::,2804:b10:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b14::,2804:b14:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b18::,2804:b18:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b1c::,2804:b1c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b20::,2804:b20:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b24::,2804:b24:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b28::,2804:b28:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b2c::,2804:b2c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b30::,2804:b30:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b34::,2804:b34:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b38::,2804:b38:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b3c::,2804:b3c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b40::,2804:b40:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b44::,2804:b44:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b48::,2804:b48:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b4c::,2804:b4c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b50::,2804:b50:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b54::,2804:b54:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b58::,2804:b58:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b5c::,2804:b5c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b60::,2804:b60:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b64::,2804:b64:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b68::,2804:b68:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b6c::,2804:b6c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b70::,2804:b70:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b74::,2804:b74:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b78::,2804:b78:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b7c::,2804:b7c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b80::,2804:b80:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b84::,2804:b84:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b88::,2804:b88:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b8c::,2804:b8c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b90::,2804:b90:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b94::,2804:b94:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b98::,2804:b98:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b9c::,2804:b9c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ba0::,2804:ba0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ba4::,2804:ba5:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ba8::,2804:ba8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:bac::,2804:bac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:bb0::,2804:bb0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:bb4::,2804:bb4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:bb8::,2804:bb8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:bbc::,2804:bbc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:bc0::,2804:bc0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:bc4::,2804:bc4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:bc8::,2804:bc8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:bcc::,2804:bcc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:bd0::,2804:bd0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:bd4::,2804:bd4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:bd8::,2804:bd8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:bdc::,2804:bdc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:be0::,2804:be0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:be4::,2804:be4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:be8::,2804:be8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:bec::,2804:bec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:bf0::,2804:bf0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:bf4::,2804:bf4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:bf8::,2804:bf8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:bfc::,2804:bfc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c00::,2804:c00:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c04::,2804:c04:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c08::,2804:c08:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c0c::,2804:c0c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c10::,2804:c10:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c14::,2804:c14:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c18::,2804:c18:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c1c::,2804:c1c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c20::,2804:c20:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c24::,2804:c24:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c28::,2804:c28:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c2c::,2804:c2c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c30::,2804:c30:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c34::,2804:c34:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c38::,2804:c38:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c3c::,2804:c3c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c40::,2804:c40:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c44::,2804:c44:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c48::,2804:c48:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c4c::,2804:c4c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c50::,2804:c50:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c54::,2804:c54:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c58::,2804:c58:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c5c::,2804:c5c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c60::,2804:c60:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c64::,2804:c64:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c68::,2804:c68:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c6c::,2804:c6c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c70::,2804:c70:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c74::,2804:c74:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c78::,2804:c78:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c7c::,2804:c7c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c80::,2804:c80:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c84::,2804:c84:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c88::,2804:c88:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c8c::,2804:c8c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c90::,2804:c90:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c94::,2804:c94:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c98::,2804:c98:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c9c::,2804:c9c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ca0::,2804:ca0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ca4::,2804:ca4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ca8::,2804:ca8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:cac::,2804:cac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:cb0::,2804:cb0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:cb4::,2804:cb4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:cb8::,2804:cb8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:cbc::,2804:cbc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:cc0::,2804:cc0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:cc4::,2804:cc4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:cc8::,2804:cc8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ccc::,2804:ccc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:cd0::,2804:cd0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:cd4::,2804:cd4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:cd8::,2804:cd8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:cdc::,2804:cdc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ce0::,2804:ce0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ce4::,2804:ce4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ce8::,2804:ce8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:cec::,2804:cec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:cf0::,2804:cf0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:cf4::,2804:cf4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:cf8::,2804:cf8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:cfc::,2804:cfc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d00::,2804:d00:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d04::,2804:d04:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d08::,2804:d08:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d0c::,2804:d0c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d10::,2804:d10:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d14::,2804:d14:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d18::,2804:d18:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d1c::,2804:d1c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d20::,2804:d20:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d24::,2804:d24:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d28::,2804:d28:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d2c::,2804:d2c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d30::,2804:d30:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d34::,2804:d34:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d38::,2804:d38:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d3c::,2804:d3c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d40::,2804:d60:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d64::,2804:d64:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d68::,2804:d68:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d6c::,2804:d6c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d70::,2804:d70:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d74::,2804:d74:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d78::,2804:d78:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d7c::,2804:d7c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d80::,2804:d80:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d84::,2804:d84:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d88::,2804:d88:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d8c::,2804:d8c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d90::,2804:d90:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d94::,2804:d94:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d98::,2804:d98:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d9c::,2804:d9c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:da0::,2804:da0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:da4::,2804:da4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:da8::,2804:da8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:dac::,2804:dac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:db0::,2804:db0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:db4::,2804:db4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:db8::,2804:db8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:dbc::,2804:dbc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:dc0::,2804:dc0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:dc4::,2804:dc4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:dc8::,2804:dc8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:dcc::,2804:dcc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:dd0::,2804:dd0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:dd4::,2804:dd4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:dd8::,2804:dd8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ddc::,2804:ddc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:de0::,2804:de0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:de4::,2804:de4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:de8::,2804:de8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:dec::,2804:dec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:df0::,2804:df0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:df4::,2804:df4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:df8::,2804:df8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:dfc::,2804:dfc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e00::,2804:e00:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e04::,2804:e04:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e08::,2804:e08:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e0c::,2804:e0c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e10::,2804:e10:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e14::,2804:e14:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e18::,2804:e18:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e1c::,2804:e1c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e20::,2804:e20:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e24::,2804:e24:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e28::,2804:e28:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e2c::,2804:e2c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e30::,2804:e30:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e34::,2804:e34:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e38::,2804:e38:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e3c::,2804:e3c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e40::,2804:e40:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e44::,2804:e44:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e48::,2804:e48:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e4c::,2804:e4c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e50::,2804:e50:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e54::,2804:e54:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e58::,2804:e58:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e5c::,2804:e5c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e60::,2804:e60:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e64::,2804:e64:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e68::,2804:e68:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e6c::,2804:e6c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e70::,2804:e70:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e74::,2804:e74:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e78::,2804:e78:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e7c::,2804:e7c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e80::,2804:e80:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e84::,2804:e84:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e88::,2804:e88:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e8c::,2804:e8c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e90::,2804:e90:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e94::,2804:e94:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e98::,2804:e98:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e9c::,2804:e9c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ea0::,2804:ea0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ea4::,2804:ea4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ea8::,2804:ea8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:eac::,2804:eac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:eb0::,2804:eb0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:eb4::,2804:eb4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:eb8::,2804:eb8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ebc::,2804:ebc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ec0::,2804:ec0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ec4::,2804:ec4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ec8::,2804:ec8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ecc::,2804:ecc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ed0::,2804:ed0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ed4::,2804:ed4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ed8::,2804:ed8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:edc::,2804:edc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ee0::,2804:ee0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ee4::,2804:ee4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ee8::,2804:ee8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:eec::,2804:eec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ef0::,2804:ef0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ef4::,2804:ef4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ef8::,2804:ef8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:efc::,2804:efc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f00::,2804:f00:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f04::,2804:f04:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f08::,2804:f08:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f0c::,2804:f0c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f10::,2804:f10:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f14::,2804:f14:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f18::,2804:f18:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f1c::,2804:f1c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f20::,2804:f20:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f24::,2804:f24:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f28::,2804:f28:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f2c::,2804:f2c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f30::,2804:f30:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f34::,2804:f34:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f38::,2804:f38:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f3c::,2804:f3c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f40::,2804:f40:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f44::,2804:f44:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f48::,2804:f48:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f4c::,2804:f4c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f50::,2804:f50:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f54::,2804:f54:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f58::,2804:f58:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f5c::,2804:f5c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f60::,2804:f60:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f64::,2804:f64:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f68::,2804:f68:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f6c::,2804:f6c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f70::,2804:f70:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f74::,2804:f74:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f78::,2804:f78:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f7c::,2804:f7c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f80::,2804:f80:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f84::,2804:f84:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f88::,2804:f88:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f8c::,2804:f8c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f90::,2804:f90:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f94::,2804:f94:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f98::,2804:f98:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f9c::,2804:f9c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:fa0::,2804:fa0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:fa4::,2804:fa4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:fa8::,2804:fa8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:fac::,2804:fac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:fb0::,2804:fb0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:fb4::,2804:fb4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:fb8::,2804:fb8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:fbc::,2804:fbc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:fc0::,2804:fc0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:fc4::,2804:fc4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:fc8::,2804:fc8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:fcc::,2804:fcc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:fd0::,2804:fd0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:fd4::,2804:fd4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:fd8::,2804:fd8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:fdc::,2804:fdc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:fe0::,2804:fe0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:fe4::,2804:fe4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:fe8::,2804:fe8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:fec::,2804:fec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ff0::,2804:ff0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ff4::,2804:ff4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ff8::,2804:ff8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ffc::,2804:ffc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1000::,2804:1000:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1004::,2804:1004:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1008::,2804:1008:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:100c::,2804:100c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1010::,2804:1010:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1014::,2804:1014:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1018::,2804:1018:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:101c::,2804:101c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1020::,2804:1020:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1024::,2804:1024:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1028::,2804:1028:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:102c::,2804:102c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1030::,2804:1030:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1034::,2804:1034:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1038::,2804:1038:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:103c::,2804:103c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1040::,2804:1040:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1044::,2804:1044:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1048::,2804:1048:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:104c::,2804:104c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1050::,2804:1050:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1054::,2804:1054:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1058::,2804:1058:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:105c::,2804:105c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1060::,2804:1060:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1064::,2804:1064:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1068::,2804:1068:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:106c::,2804:106c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1070::,2804:1070:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1074::,2804:1074:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1078::,2804:1078:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:107c::,2804:107c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1080::,2804:1080:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1084::,2804:1084:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1088::,2804:1088:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:108c::,2804:108c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1090::,2804:1090:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1094::,2804:1094:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1098::,2804:1098:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:109c::,2804:109c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:10a0::,2804:10a0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:10a4::,2804:10a4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:10a8::,2804:10a8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:10ac::,2804:10ac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:10b0::,2804:10b0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:10b4::,2804:10b4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:10b8::,2804:10b8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:10bc::,2804:10bc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:10c0::,2804:10c0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:10c4::,2804:10c4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:10c8::,2804:10c8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:10cc::,2804:10cc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:10d0::,2804:10d0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:10d4::,2804:10d4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:10d8::,2804:10d8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:10dc::,2804:10dc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:10e0::,2804:10e0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:10e4::,2804:10e4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:10e8::,2804:10e8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:10ec::,2804:10ec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:10f0::,2804:10f0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:10f4::,2804:10f4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:10f8::,2804:10f8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:10fc::,2804:10fc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1100::,2804:1100:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1104::,2804:1104:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1108::,2804:1108:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:110c::,2804:110c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1110::,2804:1110:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1114::,2804:1114:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1118::,2804:1118:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:111c::,2804:111c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1120::,2804:1120:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1124::,2804:1124:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1128::,2804:1128:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:112c::,2804:112c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1130::,2804:1130:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1134::,2804:1134:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1138::,2804:1138:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:113c::,2804:113c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1140::,2804:1140:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1144::,2804:1144:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1148::,2804:1148:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:114c::,2804:114c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1150::,2804:1150:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1154::,2804:1154:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1158::,2804:1158:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:115c::,2804:115c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1160::,2804:1160:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1164::,2804:1164:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1168::,2804:1168:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:116c::,2804:116c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1170::,2804:1170:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1174::,2804:1174:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1178::,2804:1178:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:117c::,2804:117c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1180::,2804:1180:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1184::,2804:1184:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1188::,2804:1188:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:118c::,2804:118c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1190::,2804:1190:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1194::,2804:1194:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1198::,2804:1198:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:119c::,2804:119c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:11a0::,2804:11a0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:11a4::,2804:11a4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:11a8::,2804:11a8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:11ac::,2804:11ac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:11b0::,2804:11b0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:11b4::,2804:11b4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:11b8::,2804:11b8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:11bc::,2804:11bc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:11c0::,2804:11c0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:11c4::,2804:11c4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:11c8::,2804:11c8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:11cc::,2804:11cc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:11d0::,2804:11d0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:11d4::,2804:11d4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:11d8::,2804:11d8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:11dc::,2804:11dc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:11e0::,2804:11e0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:11e4::,2804:11e4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:11e8::,2804:11e8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:11ec::,2804:11ec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:11f0::,2804:11f0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:11f4::,2804:11f4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:11f8::,2804:11f8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:11fc::,2804:11fc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1200::,2804:1200:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1204::,2804:1204:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1208::,2804:1208:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:120c::,2804:120c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1210::,2804:1210:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1214::,2804:1214:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1218::,2804:1218:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:121c::,2804:121c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1220::,2804:1220:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1224::,2804:1224:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1228::,2804:1228:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:122c::,2804:122c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1230::,2804:1230:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1234::,2804:1234:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1238::,2804:1238:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:123c::,2804:123c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1240::,2804:1240:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1244::,2804:1244:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1248::,2804:1248:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:124c::,2804:124c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1250::,2804:1250:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1254::,2804:1254:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1258::,2804:1258:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:125c::,2804:125c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1260::,2804:1260:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1264::,2804:1264:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1268::,2804:1268:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:126c::,2804:126c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1270::,2804:1270:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1274::,2804:1274:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1278::,2804:1278:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:127c::,2804:127c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1280::,2804:1280:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1284::,2804:1284:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1288::,2804:1288:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:128c::,2804:128c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1290::,2804:1290:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1294::,2804:1294:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1298::,2804:1298:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:129c::,2804:129c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:12a0::,2804:12a0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:12a4::,2804:12a4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:12a8::,2804:12a8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:12ac::,2804:12ac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:12b0::,2804:12b0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:12b4::,2804:12b4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:12b8::,2804:12b8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:12bc::,2804:12bc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:12c0::,2804:12c0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:12c4::,2804:12c4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:12c8::,2804:12c8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:12cc::,2804:12cc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:12d0::,2804:12d0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:12d4::,2804:12d4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:12d8::,2804:12d8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:12dc::,2804:12dc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:12e0::,2804:12e0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:12e4::,2804:12e4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:12e8::,2804:12e8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:12ec::,2804:12ec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:12f0::,2804:12f0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:12f4::,2804:12f4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:12f8::,2804:12f8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:12fc::,2804:12fc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1300::,2804:1300:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1304::,2804:1304:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1308::,2804:1308:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:130c::,2804:130c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1310::,2804:1310:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1314::,2804:1314:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1318::,2804:1318:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:131c::,2804:131c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1320::,2804:1320:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1324::,2804:1324:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1328::,2804:1328:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:132c::,2804:132c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1330::,2804:1330:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1334::,2804:1334:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1338::,2804:1338:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:133c::,2804:133c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1340::,2804:1340:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1344::,2804:1344:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1348::,2804:1348:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:134c::,2804:134c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1350::,2804:1350:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1354::,2804:1354:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1358::,2804:1358:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:135c::,2804:135c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1360::,2804:1360:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1364::,2804:1364:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1368::,2804:1368:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:136c::,2804:136c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1370::,2804:1370:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1374::,2804:1374:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1378::,2804:1378:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:137c::,2804:137c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1380::,2804:1380:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1384::,2804:1384:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1388::,2804:138b:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1390::,2804:1390:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1394::,2804:1394:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1398::,2804:1398:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:139c::,2804:139c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:13a0::,2804:13a0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:13a4::,2804:13a4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:13a8::,2804:13a8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:13ac::,2804:13ac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:13b0::,2804:13b0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:13b4::,2804:13b4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:13b8::,2804:13b8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:13bc::,2804:13bc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:13c0::,2804:13c0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:13c4::,2804:13c4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:13c8::,2804:13c8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:13cc::,2804:13cc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:13d0::,2804:13d0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:13d4::,2804:13d4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:13d8::,2804:13d8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:13dc::,2804:13dc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:13e0::,2804:13e0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:13e4::,2804:13e4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:13e8::,2804:13e8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:13ec::,2804:13ec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:13f0::,2804:13f0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:13f4::,2804:13f4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:13f8::,2804:13f8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:13fc::,2804:13fc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1400::,2804:1400:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1404::,2804:1404:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1408::,2804:1408:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:140c::,2804:140c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1410::,2804:1410:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1414::,2804:1414:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1418::,2804:1418:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:141c::,2804:141c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1420::,2804:1420:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1424::,2804:1424:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1428::,2804:1428:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:142c::,2804:142c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1430::,2804:1430:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1434::,2804:1434:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1438::,2804:1438:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:143c::,2804:143c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1440::,2804:1440:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1444::,2804:1444:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1448::,2804:1448:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:144c::,2804:144c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1450::,2804:1450:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1454::,2804:1454:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1458::,2804:1458:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:145c::,2804:145c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1460::,2804:1460:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1464::,2804:1464:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1468::,2804:1468:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:146c::,2804:146c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1470::,2804:1470:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1474::,2804:1474:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1478::,2804:1478:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:147c::,2804:147c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1480::,2804:1480:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1484::,2804:1484:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1488::,2804:1488:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:148c::,2804:148c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1490::,2804:1490:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1494::,2804:1494:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1498::,2804:1498:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:149c::,2804:149c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:14a0::,2804:14a0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:14a4::,2804:14a4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:14a8::,2804:14a8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:14ac::,2804:14ac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:14b0::,2804:14b0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:14b4::,2804:14b4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:14b8::,2804:14b8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:14bc::,2804:14bc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:14c0::,2804:14c0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:14c4::,2804:14c4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:14c8::,2804:14c8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:14cc::,2804:14cc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:14d0::,2804:14d0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:14d4::,2804:14d4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:14d8::,2804:14d8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:14dc::,2804:14dc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:14e0::,2804:14e0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:14e4::,2804:14e4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:14e8::,2804:14e8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:14ec::,2804:14ec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:14f0::,2804:14f0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:14f4::,2804:14f4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:14f8::,2804:14f8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:14fc::,2804:14fc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1500::,2804:1500:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1504::,2804:1504:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1508::,2804:1508:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:150c::,2804:150c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1510::,2804:1510:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1514::,2804:1514:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1518::,2804:1518:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:151c::,2804:151c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1520::,2804:1520:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1524::,2804:1524:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1528::,2804:1528:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:152c::,2804:152c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1530::,2804:1530:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1534::,2804:1534:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1538::,2804:1538:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:153c::,2804:153c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1540::,2804:1540:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1544::,2804:1544:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1548::,2804:1548:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:154c::,2804:154c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1550::,2804:1550:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1554::,2804:1554:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1558::,2804:1558:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:155c::,2804:155c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1560::,2804:1560:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1564::,2804:1564:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1568::,2804:1568:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:156c::,2804:156c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1570::,2804:1570:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1574::,2804:1574:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1578::,2804:1578:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:157c::,2804:157c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1580::,2804:1580:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1584::,2804:1584:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1588::,2804:1588:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:158c::,2804:158c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1590::,2804:1590:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1594::,2804:1594:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1598::,2804:1598:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:159c::,2804:159c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:15a0::,2804:15a0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:15a4::,2804:15a4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:15a8::,2804:15a8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:15ac::,2804:15ac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:15b0::,2804:15b0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:15b4::,2804:15b4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:15b8::,2804:15b8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:15bc::,2804:15bc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:15c0::,2804:15c0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:15c4::,2804:15c4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:15c8::,2804:15c8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:15cc::,2804:15cc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:15d0::,2804:15d0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:15d4::,2804:15d4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:15d8::,2804:15d8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:15dc::,2804:15dc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:15e0::,2804:15e0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:15e4::,2804:15e4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:15e8::,2804:15e8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:15ec::,2804:15ec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:15f0::,2804:15f0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:15f4::,2804:15f4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:15f8::,2804:15f8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:15fc::,2804:15fc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1600::,2804:1600:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1604::,2804:1604:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1608::,2804:1608:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:160c::,2804:160c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1610::,2804:1610:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1614::,2804:1614:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1618::,2804:1618:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:161c::,2804:161c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1620::,2804:1620:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1624::,2804:1624:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1628::,2804:1628:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:162c::,2804:162c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1630::,2804:1630:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1634::,2804:1634:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1638::,2804:1638:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:163c::,2804:163c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1640::,2804:1640:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1644::,2804:1644:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1648::,2804:1648:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:164c::,2804:164c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1650::,2804:1650:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1654::,2804:1654:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1658::,2804:1658:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:165c::,2804:165c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1660::,2804:1660:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1664::,2804:1664:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1668::,2804:1668:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:166c::,2804:166c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1670::,2804:1670:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1674::,2804:1674:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1678::,2804:1678:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:167c::,2804:167c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1680::,2804:1680:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1684::,2804:1684:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1688::,2804:1688:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:168c::,2804:168c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1690::,2804:1690:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1694::,2804:1694:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1698::,2804:1698:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:169c::,2804:169c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:16a0::,2804:16a0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:16a4::,2804:16a4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:16a8::,2804:16a8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:16ac::,2804:16ac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:16b0::,2804:16b0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:16b4::,2804:16b4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:16b8::,2804:16b8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:16bc::,2804:16bc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:16c0::,2804:16c0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:16c4::,2804:16c4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:16c8::,2804:16c8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:16cc::,2804:16cc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:16d0::,2804:16d0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:16d4::,2804:16d4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:16d8::,2804:16d8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:16dc::,2804:16dc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:16e0::,2804:16e0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:16e4::,2804:16e4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:16e8::,2804:16e8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:16ec::,2804:16ec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:16f0::,2804:16f0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:16f4::,2804:16f4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:16f8::,2804:16f8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:16fc::,2804:16fc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1700::,2804:1700:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1704::,2804:1704:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1708::,2804:1708:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:170c::,2804:170c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1710::,2804:1710:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1714::,2804:1714:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1718::,2804:1718:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:171c::,2804:171c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1720::,2804:1720:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1724::,2804:1724:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1728::,2804:1728:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:172c::,2804:172c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1730::,2804:1730:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1734::,2804:1734:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1738::,2804:1738:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:173c::,2804:173c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1740::,2804:1740:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1744::,2804:1744:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1748::,2804:1748:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:174c::,2804:174c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1750::,2804:1750:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1754::,2804:1754:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1758::,2804:1758:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:175c::,2804:175c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1760::,2804:1760:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1764::,2804:1764:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1768::,2804:1768:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:176c::,2804:176c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1770::,2804:1770:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1774::,2804:1774:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1778::,2804:1778:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:177c::,2804:177c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1780::,2804:1780:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1784::,2804:1784:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1788::,2804:1788:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:178c::,2804:178c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1790::,2804:1790:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1794::,2804:1794:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1798::,2804:1798:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:179c::,2804:179c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:17a0::,2804:17a0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:17a4::,2804:17a4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:17a8::,2804:17a8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:17ac::,2804:17ac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:17b0::,2804:17b0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:17b4::,2804:17b4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:17b8::,2804:17b8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:17bc::,2804:17bc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:17c0::,2804:17c0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:17c4::,2804:17c4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:17c8::,2804:17c8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:17cc::,2804:17cc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:17d0::,2804:17d0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:17d4::,2804:17d4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:17d8::,2804:17d8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:17dc::,2804:17dc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:17e0::,2804:17e0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:17e4::,2804:17e4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:17e8::,2804:17e8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:17ec::,2804:17ec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:17f0::,2804:17f0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:17f4::,2804:17f4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:17f8::,2804:17f8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:17fc::,2804:17fc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1800::,2804:1800:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1804::,2804:1804:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1808::,2804:1808:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:180c::,2804:180c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1810::,2804:1810:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1814::,2804:1814:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1818::,2804:1818:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:181c::,2804:181c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1820::,2804:1820:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1824::,2804:1824:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1828::,2804:1828:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:182c::,2804:182c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1830::,2804:1830:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1834::,2804:1834:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1838::,2804:1838:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:183c::,2804:183c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1840::,2804:1840:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1844::,2804:1844:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1f00::,2804:1f00:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1f02::,2804:1f02:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1f04::,2804:1f04:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1f06::,2804:1f06:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1f08::,2804:1f08:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2806::,2806:f:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:200::,2806:200:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:210::,2806:214:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:220::,2806:220:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:230::,2806:230:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:238::,2806:238::ffff:ffff:ffff:ffff:ffff,MX
+2806:238:10::,2806:238:10:ffff:ffff:ffff:ffff:ffff,MX
+2806:239::,2806:239:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:240::,2806:240:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:250::,2806:250:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:260::,2806:260:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:270::,2806:270:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:280::,2806:280:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:290::,2806:290:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:2a0::,2806:2a0:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:2b0::,2806:2b0:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:2c0::,2806:2c0:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:2d0::,2806:2d0:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:2e0::,2806:2e0:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:2f0::,2806:2f0:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:300::,2806:300:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:310::,2806:310:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:320::,2806:320:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:330::,2806:330:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:340::,2806:340:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:350::,2806:350:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:360::,2806:360:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:370::,2806:370:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:1000::,2806:10ff:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2a00::,2a00:3ff:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:800::,2a00:87f:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:c00::,2a00:c00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:c08::,2a00:c08:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:c10::,2a00:c10:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:c18::,2a00:c18:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:c20::,2a00:c20:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:c28::,2a00:c28:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:c30::,2a00:c37:ffff:ffff:ffff:ffff:ffff:ffff,HR
+2a00:c38::,2a00:c38:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:c40::,2a00:c40:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:c50::,2a00:c50:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:c58::,2a00:c58:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:c60::,2a00:c60:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:c68::,2a00:c68:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a00:c70::,2a00:c70:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:c78::,2a00:c78:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:c80::,2a00:c80:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:c88::,2a00:c88:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a00:c90::,2a00:c90:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:c98::,2a00:c98:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:ca0::,2a00:ca0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:ca8::,2a00:ca8:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:cb0::,2a00:cb0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:cb8::,2a00:cb8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:cc0::,2a00:cc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:cc8::,2a00:cc8:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:cd0::,2a00:cd0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:cd8::,2a00:cd8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:ce0::,2a00:ce0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:ce8::,2a00:ce8:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:cf8::,2a00:cf8:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:d00::,2a00:d07:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:d08::,2a00:d08:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:d10::,2a00:d10:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:d18::,2a00:d18:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:d20::,2a00:d20:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:d28::,2a00:d28:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:d30::,2a00:d30:ffff:ffff:ffff:ffff:ffff:ffff,AE
+2a00:d40::,2a00:d40:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:d50::,2a00:d50:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:d58::,2a00:d58:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:d60::,2a00:d60:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:d68::,2a00:d68:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:d70::,2a00:d70:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:d78::,2a00:d78:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:d80::,2a00:d80:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:d88::,2a00:d88:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:d90::,2a00:d90:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:d98::,2a00:d98:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:da8::,2a00:da9:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:db0::,2a00:db0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:db8::,2a00:db8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:dc0::,2a00:dc0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:dc8::,2a00:dc8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:dd0::,2a00:dd0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:dd8::,2a00:dd8:ffff:ffff:ffff:ffff:ffff:ffff,HR
+2a00:de8::,2a00:de8:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:df0::,2a00:df0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:df8::,2a00:df8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:e00::,2a00:e00:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:e08::,2a00:e0f:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:e10::,2a00:e10:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:e18::,2a00:e18:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:e20::,2a00:e20:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:e28::,2a00:e28:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:e30::,2a00:e30:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:e38::,2a00:e38:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:e40::,2a00:e40:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a00:e48::,2a00:e48:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:e50::,2a00:e58:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:e60::,2a00:e60:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:e68::,2a00:e68:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:e70::,2a00:e70:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:e78::,2a00:e7b:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:e80::,2a00:e80:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:e88::,2a00:e88:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:e90::,2a00:e90:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a00:e98::,2a00:e98:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:ea0::,2a00:ea0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:ea8::,2a00:eaf:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:eb0::,2a00:eb0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:eb8::,2a00:eb8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:ec0::,2a00:ec0:ffff:ffff:ffff:ffff:ffff:ffff,LI
+2a00:ec8::,2a00:ec8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:ed0::,2a00:ed0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:ed8::,2a00:ed8:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a00:ee0::,2a00:ee7:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a00:ee8::,2a00:ee8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:ef0::,2a00:ef0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:ef8::,2a00:ef8:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:f00::,2a00:f00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:f08::,2a00:f08:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:f10::,2a00:f10:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:f18::,2a00:f18:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:f20::,2a00:f20:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:f28::,2a00:f2f:ffff:ffff:ffff:ffff:ffff:ffff,AE
+2a00:f30::,2a00:f30:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:f38::,2a00:f38:ffff:ffff:ffff:ffff:ffff:ffff,AM
+2a00:f40::,2a00:f47:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:f48::,2a00:f4f:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:f50::,2a00:f50:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:f58::,2a00:f58:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:f60::,2a00:f60:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:f68::,2a00:f68:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:f70::,2a00:f70:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:f78::,2a00:f78:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:f80::,2a00:f80:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:f88::,2a00:f88:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:f90::,2a00:f90:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:f98::,2a00:f98:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:fa0::,2a00:fa0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:fa8::,2a00:fa8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:fb8::,2a00:fb8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:fc0::,2a00:fc0:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a00:fc8::,2a00:fc8:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:fd0::,2a00:fd0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:fd8::,2a00:fd8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:fe0::,2a00:fe0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:fe8::,2a00:fe8:ffff:ffff:ffff:ffff:ffff:ffff,BA
+2a00:ff0::,2a00:ff0:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a00:ff8::,2a00:fff:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:1000::,2a00:1000:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1008::,2a00:1008:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:1010::,2a00:1010:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1018::,2a00:1018:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1020::,2a00:1020:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1028::,2a00:1028:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:1030::,2a00:1030:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1038::,2a00:1038:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:1040::,2a00:1040:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:1048::,2a00:1048:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1050::,2a00:1050:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1058::,2a00:1058:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:1060::,2a00:1060:ffff:ffff:ffff:ffff:ffff:ffff,MT
+2a00:1068::,2a00:1068:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1070::,2a00:1070:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1078::,2a00:1078:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1080::,2a00:1080:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:1088::,2a00:1088:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:1098::,2a00:1098:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:10a0::,2a00:10a0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:10a8::,2a00:10a8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:10b0::,2a00:10b7:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:10b8::,2a00:10b8:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a00:10c0::,2a00:10c0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:10c8::,2a00:10c8:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:10d0::,2a00:10d0:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a00:10d8::,2a00:10d8:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a00:10e0::,2a00:10e0:ffff:ffff:ffff:ffff:ffff:ffff,MD
+2a00:10e8::,2a00:10f0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:10f8::,2a00:10f8:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a00:1100::,2a00:1107:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1108::,2a00:1108:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a00:1110::,2a00:1117:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a00:1118::,2a00:1118:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a00:1120::,2a00:1120:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1128::,2a00:1128:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:1130::,2a00:1130:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:1138::,2a00:1138:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1140::,2a00:1140:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:1148::,2a00:1148:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1150::,2a00:1150:ffff:ffff:ffff:ffff:ffff:ffff,BH
+2a00:1158::,2a00:1158:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1160::,2a00:1160:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1168::,2a00:1168:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1170::,2a00:1170:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a00:1178::,2a00:1178:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1180::,2a00:1180:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1188::,2a00:1188:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1190::,2a00:1190:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:1198::,2a00:1198:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:11a8::,2a00:11a8:ffff:ffff:ffff:ffff:ffff:ffff,OM
+2a00:11b0::,2a00:11b0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:11b8::,2a00:11b8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:11c0::,2a00:11c0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:11c8::,2a00:11c8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:11d0::,2a00:11d0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:11d8::,2a00:11d8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:11e0::,2a00:11e0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:11e8::,2a00:11e8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:11f0::,2a00:11f0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:11f8::,2a00:11f8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1200::,2a00:1200:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1208::,2a00:1208:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:1210::,2a00:1210:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:1218::,2a00:1218:ffff:ffff:ffff:ffff:ffff:ffff,MK
+2a00:1220::,2a00:1220:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:1228::,2a00:1228:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:1230::,2a00:1237:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1238::,2a00:1238:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:1240::,2a00:1240:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:1248::,2a00:1248:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1258::,2a00:1258:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:1260::,2a00:1260:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1268::,2a00:1268:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:1270::,2a00:1270:ffff:ffff:ffff:ffff:ffff:ffff,JO
+2a00:1278::,2a00:1278:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1280::,2a00:1280:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1288::,2a00:1288:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1290::,2a00:1290:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1298::,2a00:1298:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a00:12a0::,2a00:12a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:12a8::,2a00:12a8:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a00:12b0::,2a00:12b0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:12b8::,2a00:12b8:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:12c0::,2a00:12c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:12c8::,2a00:12c8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:12d0::,2a00:12d0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:12d8::,2a00:12d8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:12e0::,2a00:12e0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:12e8::,2a00:12e8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:12f0::,2a00:12f0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:12f8::,2a00:12f8:ffff:ffff:ffff:ffff:ffff:ffff,KZ
+2a00:1300::,2a00:1300:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:1308::,2a00:1308:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:1318::,2a00:1318:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1320::,2a00:1320:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1328::,2a00:1328:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1338::,2a00:1338:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1340::,2a00:1340:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1348::,2a00:1348:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1350::,2a00:1350:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1358::,2a00:135b:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a00:1360::,2a00:1360:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:1368::,2a00:1368:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a00:1370::,2a00:1370:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1378::,2a00:1378:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1380::,2a00:1380:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:1388::,2a00:1388:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1390::,2a00:1390:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1398::,2a00:1398:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:13a0::,2a00:13a0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:13a8::,2a00:13a8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:13b0::,2a00:13b0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:13b8::,2a00:13b8:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a00:13c0::,2a00:13c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:13c8::,2a00:13c8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:13d0::,2a00:13d0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:13d8::,2a00:13df:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a00:13e0::,2a00:13e0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:13e8::,2a00:13e8:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:13f0::,2a00:13f0:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:13f8::,2a00:13f8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1400::,2a00:1400:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:1408::,2a00:1408:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1410::,2a00:1410:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1418::,2a00:1418:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1420::,2a00:1420:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a00:1428::,2a00:1428:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a00:1430::,2a00:1430:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1440::,2a00:1440:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1448::,2a00:1448:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a00:1450::,2a00:1457:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a00:1458::,2a00:1458:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:1460::,2a00:1460:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1468::,2a00:1468:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1470::,2a00:1470:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1478::,2a00:1478:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1480::,2a00:1480:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a00:1488::,2a00:1488:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:1490::,2a00:1490:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1498::,2a00:1498:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:14a0::,2a00:14a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:14a8::,2a00:14a8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:14b0::,2a00:14b0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:14b8::,2a00:14b8:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:14c0::,2a00:14c0:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:14c8::,2a00:14c8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:14d0::,2a00:14d0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:14d8::,2a00:14d8:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:14e0::,2a00:14e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:14e8::,2a00:14ef:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:14f0::,2a00:14f0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:14f8::,2a00:14f8:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:1500::,2a00:1500:ffff:ffff:ffff:ffff:ffff:ffff,AM
+2a00:1508::,2a00:1508:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:1510::,2a00:1510:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:1518::,2a00:1518:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1520::,2a00:1520:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:1528::,2a00:1528:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:1530::,2a00:1531:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a00:1538::,2a00:1538:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1540::,2a00:1540:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1548::,2a00:1548:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:1550::,2a00:1550:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:1558::,2a00:1558:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1560::,2a00:1560:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a00:1568::,2a00:1568:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:1570::,2a00:1570:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:1578::,2a00:1578:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:1580::,2a00:1580:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a00:1588::,2a00:1588:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:1590::,2a00:1590:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a00:1598::,2a00:159f:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:15a0::,2a00:15a0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:15a8::,2a00:15a8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:15b0::,2a00:15b0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:15b8::,2a00:15b8:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a00:15c0::,2a00:15c0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:15c8::,2a00:15c8:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:15d0::,2a00:15d0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:15e0::,2a00:15e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:15e8::,2a00:15e8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:15f0::,2a00:15f0:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a00:15f8::,2a00:15f8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1600::,2a00:1607:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a00:1610::,2a00:1610:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:1618::,2a00:1618:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:1620::,2a00:1620:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:1628::,2a00:1628:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:1630::,2a00:1637:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1638::,2a00:1638:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:1640::,2a00:1640:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1648::,2a00:1648:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1650::,2a00:1650:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a00:1660::,2a00:1660:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:1668::,2a00:1668:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1670::,2a00:1670:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1678::,2a00:1678:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1680::,2a00:1680:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:1688::,2a00:1688:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:1690::,2a00:1690:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:1698::,2a00:1698:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a00:16a0::,2a00:16a0:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:16a8::,2a00:16a8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:16b0::,2a00:16b0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:16c8::,2a00:16c8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:16d0::,2a00:16d0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:16d8::,2a00:16d8:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:16e0::,2a00:16e0:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a00:16e8::,2a00:16e8:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a00:16f0::,2a00:16f0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:16f8::,2a00:16f8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1700::,2a00:1700:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1708::,2a00:1708:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1710::,2a00:1710:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a00:1718::,2a00:1718:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:1720::,2a00:1720:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1728::,2a00:1728:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a00:1730::,2a00:1730:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1748::,2a00:1748:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1750::,2a00:1750:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1758::,2a00:1758:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:1760::,2a00:1760:ffff:ffff:ffff:ffff:ffff:ffff,BY
+2a00:1768::,2a00:1768:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1778::,2a00:1778:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:1780::,2a00:1780:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a00:1788::,2a00:1788:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:1790::,2a00:1790:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:1798::,2a00:1798:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:17a0::,2a00:17a0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:17a8::,2a00:17a8:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:17b0::,2a00:17b0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:17b8::,2a00:17b8:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:17c0::,2a00:17c0:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a00:17c8::,2a00:17c8:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:17d0::,2a00:17d0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:17d8::,2a00:17d8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:17e0::,2a00:17e0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:17e8::,2a00:17e8:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:17f0::,2a00:17f0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:17f8::,2a00:17f8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1800::,2a00:1800:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:1808::,2a00:1808:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:1818::,2a00:1818:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1828::,2a00:1828:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1830::,2a00:1830:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1838::,2a00:1838:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1840::,2a00:1840:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:1848::,2a00:1848:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1850::,2a00:1850:ffff:ffff:ffff:ffff:ffff:ffff,KW
+2a00:1858::,2a00:1858:ffff:ffff:ffff:ffff:ffff:ffff,MD
+2a00:1860::,2a00:1860:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:1868::,2a00:1868:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:1878::,2a00:1878:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a00:1880::,2a00:1880:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:1888::,2a00:1888:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:1890::,2a00:1890:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1898::,2a00:1898:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:18a0::,2a00:18a0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:18a8::,2a00:18a8:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:18b0::,2a00:18b0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:18b8::,2a00:18b8:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:18c0::,2a00:18c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:18c8::,2a00:18c8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:18d0::,2a00:18d0:ffff:ffff:ffff:ffff:ffff:ffff,JO
+2a00:18d8::,2a00:18d8:ffff:ffff:ffff:ffff:ffff:ffff,JO
+2a00:18e0::,2a00:18e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:18e8::,2a00:18e8:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a00:18f0::,2a00:18f0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:18f8::,2a00:18f8:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a00:1900::,2a00:1900:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1908::,2a00:1908:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:1910::,2a00:1910:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1918::,2a00:191f:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a00:1920::,2a00:1920:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1928::,2a00:1928:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1930::,2a00:1930:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1938::,2a00:1938:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1940::,2a00:1940:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1948::,2a00:1948:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1950::,2a00:1950:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1958::,2a00:1958:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1960::,2a00:1960:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:1968::,2a00:1968:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:1970::,2a00:1970:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1978::,2a00:1978:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1980::,2a00:1980:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:1988::,2a00:1988:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:1990::,2a00:1990:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1998::,2a00:1998:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:19a0::,2a00:19a0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:19a8::,2a00:19a8:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:19b0::,2a00:19b0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:19b8::,2a00:19b8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:19c0::,2a00:19c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:19c8::,2a00:19c8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:19d0::,2a00:19d0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:19d8::,2a00:19d8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:19e0::,2a00:19e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:19e8::,2a00:19e8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:19f0::,2a00:19f0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:19f8::,2a00:19f8:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:1a00::,2a00:1a00:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:1a08::,2a00:1a08:ffff:ffff:ffff:ffff:ffff:ffff,KZ
+2a00:1a10::,2a00:1a10:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1a18::,2a00:1a18:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1a20::,2a00:1a20:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a00:1a28::,2a00:1a28:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:1a30::,2a00:1a30:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1a38::,2a00:1a38:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1a40::,2a00:1a40:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:1a48::,2a00:1a48:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1a50::,2a00:1a50:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:1a58::,2a00:1a58:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:1a60::,2a00:1a60:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:1a68::,2a00:1a68:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:1a70::,2a00:1a70:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1a78::,2a00:1a78:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:1a80::,2a00:1a80:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1a88::,2a00:1a88:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:1a90::,2a00:1a90:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1a98::,2a00:1a98:ffff:ffff:ffff:ffff:ffff:ffff,BA
+2a00:1aa0::,2a00:1aa0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1aa8::,2a00:1aa8:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:1ab0::,2a00:1ab0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:1ab8::,2a00:1ab8:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:1ac0::,2a00:1ac0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1ac8::,2a00:1ac8:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:1ad0::,2a00:1ad0:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a00:1ad8::,2a00:1ad8:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:1ae0::,2a00:1ae0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:1ae8::,2a00:1ae8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1af0::,2a00:1af7:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:1af8::,2a00:1af8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1b00::,2a00:1b00:ffff:ffff:ffff:ffff:ffff:ffff,AE
+2a00:1b08::,2a00:1b08:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1b10::,2a00:1b10:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:1b18::,2a00:1b18:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:1b20::,2a00:1b20:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1b28::,2a00:1b28:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1b30::,2a00:1b30:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1b38::,2a00:1b38:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:1b40::,2a00:1b40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1b48::,2a00:1b48:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1b50::,2a00:1b50:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:1b58::,2a00:1b58:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1b60::,2a00:1b60:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:1b68::,2a00:1b68:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1b70::,2a00:1b70:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:1b78::,2a00:1b78:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1b80::,2a00:1b80:ffff:ffff:ffff:ffff:ffff:ffff,BA
+2a00:1b88::,2a00:1b88:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:1b90::,2a00:1b90:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a00:1b98::,2a00:1b98:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1ba0::,2a00:1ba0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:1ba8::,2a00:1ba8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1bb0::,2a00:1bb0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:1bb8::,2a00:1bb8:ffff:ffff:ffff:ffff:ffff:ffff,HR
+2a00:1bc0::,2a00:1bc0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:1bc8::,2a00:1bc8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1bd0::,2a00:1bd0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1bd8::,2a00:1bd8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1be0::,2a00:1be0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:1be8::,2a00:1be8:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:1bf0::,2a00:1bf0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1bf8::,2a00:1bf8:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:1c00::,2a00:1c00:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:1c08::,2a00:1c08:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1c10::,2a00:1c10:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1c18::,2a00:1c1f:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1c20::,2a00:1c20:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:1c28::,2a00:1c28:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1c30::,2a00:1c30:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:1c38::,2a00:1c3f:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1c40::,2a00:1c40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1c48::,2a00:1c48:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1c50::,2a00:1c50:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:1c58::,2a00:1c58:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1c60::,2a00:1c60:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a00:1c68::,2a00:1c68:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:1c70::,2a00:1c70:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1c78::,2a00:1c78:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1c80::,2a00:1c80:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a00:1c88::,2a00:1c88:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1c90::,2a00:1c90:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:1c98::,2a00:1c98:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:1ca0::,2a00:1ca0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1ca8::,2a00:1ca8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1cb0::,2a00:1cb0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:1cb8::,2a00:1cb8:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a00:1cc0::,2a00:1cc0:ffff:ffff:ffff:ffff:ffff:ffff,MT
+2a00:1cc8::,2a00:1cc8:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:1cd0::,2a00:1cd0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1cd8::,2a00:1cd8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1ce0::,2a00:1ce0:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:1ce8::,2a00:1ce8:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:1cf0::,2a00:1cf0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:1cf8::,2a00:1cf8:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:1d00::,2a00:1d00:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:1d08::,2a00:1d08:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1d10::,2a00:1d10:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a00:1d18::,2a00:1d18:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:1d20::,2a00:1d27:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1d28::,2a00:1d28:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:1d30::,2a00:1d30:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:1d38::,2a00:1d38:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1d40::,2a00:1d40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1d48::,2a00:1d48:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1d50::,2a00:1d50:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:1d58::,2a00:1d58:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:1d60::,2a00:1d60:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:1d68::,2a00:1d68:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:1d70::,2a00:1d70:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:1d78::,2a00:1d78:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1d80::,2a00:1d80:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:1d88::,2a00:1d88:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:1d90::,2a00:1d90:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1da0::,2a00:1da0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1da8::,2a00:1da8:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a00:1db0::,2a00:1db0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:1db8::,2a00:1db8:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:1dc0::,2a00:1dc7:ffff:ffff:ffff:ffff:ffff:ffff,MD
+2a00:1dc8::,2a00:1dc8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1dd0::,2a00:1dd0:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:1dd8::,2a00:1ddf:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a00:1de0::,2a00:1de0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1de8::,2a00:1de8:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:1df0::,2a00:1df0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1df8::,2a00:1df8:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:1e00::,2a00:1e00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1e08::,2a00:1e08:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:1e10::,2a00:1e10:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1e18::,2a00:1e18:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:1e20::,2a00:1e20:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:1e28::,2a00:1e28:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1e30::,2a00:1e30:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:1e38::,2a00:1e38:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:1e40::,2a00:1e40:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a00:1e48::,2a00:1e48:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1e50::,2a00:1e50:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:1e58::,2a00:1e58:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:1e60::,2a00:1e60:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:1e68::,2a00:1e68:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1e70::,2a00:1e70:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:1e78::,2a00:1e78:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1e80::,2a00:1e80:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1e88::,2a00:1e88:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1e90::,2a00:1e90:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:1e98::,2a00:1e98:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:1ea0::,2a00:1ea0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:1ea8::,2a00:1ea8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1eb0::,2a00:1eb0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:1eb8::,2a00:1eb8:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a00:1ec0::,2a00:1ec0:ffff:ffff:ffff:ffff:ffff:ffff,CY
+2a00:1ec8::,2a00:1ecf:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1ed0::,2a00:1ed0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:1ed8::,2a00:1edf:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a00:1ee0::,2a00:1ee0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1ee8::,2a00:1ee8:ffff:ffff:ffff:ffff:ffff:ffff,SY
+2a00:1ef0::,2a00:1ef0:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a00:1ef8::,2a00:1ef8:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a00:1f00::,2a00:1f00:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1f08::,2a00:1f08:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1f10::,2a00:1f10:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:1f18::,2a00:1f18:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:1f20::,2a00:1f20:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a00:1f28::,2a00:1f28:ffff:ffff:ffff:ffff:ffff:ffff,AM
+2a00:1f30::,2a00:1f30:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:1f38::,2a00:1f38:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1f40::,2a00:1f40:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a00:1f48::,2a00:1f48:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:1f50::,2a00:1f50:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:1f58::,2a00:1f58:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:1f60::,2a00:1f60:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:1f68::,2a00:1f68:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a00:1f70::,2a00:1f70:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1f78::,2a00:1f78:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1f80::,2a00:1f80:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:1f88::,2a00:1f88:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:1f90::,2a00:1f90:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:1f98::,2a00:1f98:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:1fa0::,2a00:1fa0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1fa8::,2a00:1fa8:ffff:ffff:ffff:ffff:ffff:ffff,GL
+2a00:1fb0::,2a00:1fb0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1fb8::,2a00:1fb8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1fc0::,2a00:1fc0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1fd0::,2a00:1fd0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1fd8::,2a00:1fd8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1fe0::,2a00:1fe0:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:1fe8::,2a00:1fe8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1ff0::,2a00:1ff0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:1ff8::,2a00:1ff8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:2000::,2a00:23ff:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:4000::,2a00:4000:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:4040::,2a00:4040:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:4060::,2a00:4060:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:4080::,2a00:4087:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a00:40a0::,2a00:40a0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:40c0::,2a00:40c0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:40e0::,2a00:40e0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:4100::,2a00:4100:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:4120::,2a00:4120:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:4160::,2a00:4160:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:4180::,2a00:4180:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a00:41a0::,2a00:41a0:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a00:41c0::,2a00:41c0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:41e0::,2a00:41e0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:4200::,2a00:4200:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:4220::,2a00:4220:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:4240::,2a00:4240:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:4260::,2a00:4260:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:4280::,2a00:4280:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:42a0::,2a00:42a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:42c0::,2a00:42c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:42e0::,2a00:42e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:4300::,2a00:4300:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:4320::,2a00:4320:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:4340::,2a00:4340:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:4360::,2a00:4360:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a00:4380::,2a00:4380:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:43a0::,2a00:43a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:43c0::,2a00:43c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:43e0::,2a00:43e0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:4400::,2a00:4400:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:4420::,2a00:4420:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:4440::,2a00:4440:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a00:4460::,2a00:4460:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:4480::,2a00:4480:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:44a0::,2a00:44a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:44c0::,2a00:44c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:44e0::,2a00:44e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:4500::,2a00:4500:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:4520::,2a00:4520:ffff:ffff:ffff:ffff:ffff:ffff,KW
+2a00:4540::,2a00:4540:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:4560::,2a00:4560:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:4580::,2a00:4580:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:45a0::,2a00:45a0:ffff:ffff:ffff:ffff:ffff:ffff,SY
+2a00:45c0::,2a00:45c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:45e0::,2a00:45e0:ffff:ffff:ffff:ffff:ffff:ffff,IM
+2a00:4600::,2a00:4600:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:4620::,2a00:4620:ffff:ffff:ffff:ffff:ffff:ffff,JO
+2a00:4640::,2a00:4640:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:4660::,2a00:4660:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:4680::,2a00:4680:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:46a0::,2a00:46a0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:46c0::,2a00:46c0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:46e0::,2a00:46e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:4700::,2a00:4700:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:4720::,2a00:4720:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:4740::,2a00:4740:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:4760::,2a00:4760:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:4780::,2a00:4780:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:47a0::,2a00:47a0:ffff:ffff:ffff:ffff:ffff:ffff,KG
+2a00:47c0::,2a00:47c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:47e0::,2a00:47e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:4800::,2a00:4807:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a00:4840::,2a00:4840:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:4860::,2a00:4860:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:4880::,2a00:4880:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:48a0::,2a00:48a0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:48c0::,2a00:48c0:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a00:48e0::,2a00:48e0:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:4900::,2a00:4900:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:4920::,2a00:4920:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:4940::,2a00:4940:ffff:ffff:ffff:ffff:ffff:ffff,AL
+2a00:4960::,2a00:4960:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:4980::,2a00:4987:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:49c0::,2a00:49c0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:49e0::,2a00:49e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:4a00::,2a00:4a00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:4a20::,2a00:4a20:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:4a40::,2a00:4a40:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:4a60::,2a00:4a60:ffff:ffff:ffff:ffff:ffff:ffff,PS
+2a00:4a80::,2a00:4a80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:4aa0::,2a00:4aa0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:4ac0::,2a00:4ac0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:4ae0::,2a00:4ae0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:4b00::,2a00:4b00:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:4b40::,2a00:4b40:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a00:4b60::,2a00:4b60:ffff:ffff:ffff:ffff:ffff:ffff,CY
+2a00:4b80::,2a00:4b80:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:4ba0::,2a00:4ba0:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:4bc0::,2a00:4bc0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:4be0::,2a00:4be0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:4c00::,2a00:4c00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:4c20::,2a00:4c20:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a00:4c40::,2a00:4c40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:4c60::,2a00:4c60:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:4c80::,2a00:4c87:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a00:4ca0::,2a00:4ca0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:4cc0::,2a00:4cc7:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:4ce0::,2a00:4ce0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:4d00::,2a00:4d00:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:4d20::,2a00:4d20:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:4d40::,2a00:4d40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:4d60::,2a00:4d60:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a00:4d80::,2a00:4d80:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:4da0::,2a00:4da0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:4dc0::,2a00:4dc0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:4de0::,2a00:4de0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:4e00::,2a00:4e00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:4e20::,2a00:4e20:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:4e40::,2a00:4e40:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:4e60::,2a00:4e60:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a00:4e80::,2a00:4e80:ffff:ffff:ffff:ffff:ffff:ffff,PS
+2a00:4ea0::,2a00:4ea0:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a00:4ec0::,2a00:4ec0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:4f00::,2a00:4f00:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:4f20::,2a00:4f20:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:4f40::,2a00:4f40:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:4f60::,2a00:4f60:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:4f80::,2a00:4f80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:4fa0::,2a00:4fa7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:4fc0::,2a00:4fc0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:4fe0::,2a00:4fe0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:5000::,2a00:5000:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a00:5040::,2a00:5040:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:5060::,2a00:5060:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:5080::,2a00:5080:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:50a0::,2a00:50a0:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a00:50c0::,2a00:50c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:50e0::,2a00:50e7:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a00:5100::,2a00:5100:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:5120::,2a00:5120:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:5140::,2a00:5140:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:5160::,2a00:5160:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:5180::,2a00:5180:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:51c0::,2a00:51c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:51e0::,2a00:51e0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:5200::,2a00:5200:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:5220::,2a00:5220:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:5240::,2a00:5240:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:5260::,2a00:5260:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:5280::,2a00:5280:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:52a0::,2a00:52a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:52c0::,2a00:52c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:52e0::,2a00:52e0:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:5300::,2a00:5300:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:5320::,2a00:5320:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:5340::,2a00:5340:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:5360::,2a00:5360:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:5380::,2a00:5380:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a00:53a0::,2a00:53a0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:53c0::,2a00:53c0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:53e0::,2a00:53e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:5400::,2a00:5400:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a00:5420::,2a00:5420:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:5440::,2a00:5440:ffff:ffff:ffff:ffff:ffff:ffff,US
+2a00:5460::,2a00:5460:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:5480::,2a00:5480:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:54a0::,2a00:54a0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:54c0::,2a00:54c0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:54e0::,2a00:54e0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:5500::,2a00:5500:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:5520::,2a00:5520:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:5540::,2a00:5540:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:5560::,2a00:5560:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:5580::,2a00:5580:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:55a0::,2a00:55a0:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a00:55c0::,2a00:55c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:55e0::,2a00:55e0:ffff:ffff:ffff:ffff:ffff:ffff,SM
+2a00:5600::,2a00:5600:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:5620::,2a00:5620:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:5640::,2a00:5647:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:5680::,2a00:5680:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:56a0::,2a00:56a0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:56c0::,2a00:56c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:56e0::,2a00:56e0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:5700::,2a00:5700:ffff:ffff:ffff:ffff:ffff:ffff,KG
+2a00:5720::,2a00:5720:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:5740::,2a00:5740:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:5760::,2a00:5760:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:5780::,2a00:5780:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:57a0::,2a00:57a0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:57c0::,2a00:57c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:57e0::,2a00:57e0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:5800::,2a00:5800:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:5820::,2a00:5820:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:5840::,2a00:5840:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:5860::,2a00:5860:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:5880::,2a00:5887:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:58e0::,2a00:58e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:5900::,2a00:5900:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:5920::,2a00:5920:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a00:5940::,2a00:5940:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a00:5960::,2a00:5960:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:5980::,2a00:5980:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a00:59a0::,2a00:59a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:59c0::,2a00:59c0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:59e0::,2a00:59e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:5a00::,2a00:5a00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:5a20::,2a00:5a20:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:5a40::,2a00:5a40:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:5a60::,2a00:5a60:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:5a80::,2a00:5a80:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:5aa0::,2a00:5aa0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:5ac0::,2a00:5ac0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:5ae0::,2a00:5ae0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:5b00::,2a00:5b07:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:5b20::,2a00:5b20:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:5b40::,2a00:5b40:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:5b60::,2a00:5b60:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:5b80::,2a00:5b87:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:5ba0::,2a00:5ba0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:5bc0::,2a00:5bc0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:5be0::,2a00:5be0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:5c00::,2a00:5c00:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:5c20::,2a00:5c20:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:5c40::,2a00:5c47:ffff:ffff:ffff:ffff:ffff:ffff,MK
+2a00:5c60::,2a00:5c60:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:5c80::,2a00:5c80:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:5ca0::,2a00:5ca0:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:5cc0::,2a00:5cc0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:5ce0::,2a00:5ce0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:5d00::,2a00:5d00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:5d20::,2a00:5d20:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:5d40::,2a00:5d40:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:5d60::,2a00:5d60:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:5d80::,2a00:5d80:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:5da0::,2a00:5da0:ffff:ffff:ffff:ffff:ffff:ffff,KZ
+2a00:5dc0::,2a00:5dc0:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a00:5de0::,2a00:5de0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:5e00::,2a00:5e00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:5e20::,2a00:5e20:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:5e40::,2a00:5e40:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:5e60::,2a00:5e60:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a00:5e80::,2a00:5e80:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:5ea0::,2a00:5ea0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:5ec0::,2a00:5ec0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:5ee0::,2a00:5ee0:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a00:5f00::,2a00:5f00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:5f20::,2a00:5f20:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:5f40::,2a00:5f47:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:5fa0::,2a00:5fa0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:5fc0::,2a00:5fc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:5fe0::,2a00:5fe0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:6000::,2a00:6000:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:6020::,2a00:6020:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:6040::,2a00:6040:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:6060::,2a00:6060:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:6080::,2a00:6080:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:60a0::,2a00:60a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:60e0::,2a00:60e0:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a00:6100::,2a00:6100:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:6120::,2a00:6120:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:6140::,2a00:6140:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:6160::,2a00:6160:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:6180::,2a00:6180:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:61a0::,2a00:61a0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:61c0::,2a00:61c7:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a00:61e0::,2a00:61e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:6200::,2a00:6200:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:6220::,2a00:6220:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:6240::,2a00:6240:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:6260::,2a00:6260:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:6280::,2a00:6280:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:62a0::,2a00:62a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:62c0::,2a00:62c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:62e0::,2a00:62e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:6300::,2a00:6300:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:6320::,2a00:6320:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:6340::,2a00:6340:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:6360::,2a00:6360:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:6380::,2a00:6380:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:63a0::,2a00:63a0:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:63c0::,2a00:63c0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:63e0::,2a00:63e0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:6400::,2a00:6400:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:6420::,2a00:6420:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:6440::,2a00:6440:ffff:ffff:ffff:ffff:ffff:ffff,BY
+2a00:6460::,2a00:6460:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:6480::,2a00:6480:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:64a0::,2a00:64a0:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:64c0::,2a00:64c0:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a00:64e0::,2a00:64e0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:6500::,2a00:6500:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:6520::,2a00:6520:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:6540::,2a00:6540:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:6560::,2a00:6560:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:6580::,2a00:6580:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a00:65a0::,2a00:65a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:65c0::,2a00:65c0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:65e0::,2a00:65e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:6600::,2a00:6600:ffff:ffff:ffff:ffff:ffff:ffff,BH
+2a00:6620::,2a00:6620:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a00:6640::,2a00:6640:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:6660::,2a00:6660:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a00:6680::,2a00:6680:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:66a0::,2a00:66a0:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a00:66e0::,2a00:66e0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:6720::,2a00:6720:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:6740::,2a00:6740:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:6760::,2a00:6760:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:6780::,2a00:6780:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:67a0::,2a00:67a7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:67c0::,2a00:67c0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:67e0::,2a00:67e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:6800::,2a00:6800:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:6820::,2a00:6820:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:6840::,2a00:6840:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a00:6860::,2a00:6867:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:68a0::,2a00:68a0:ffff:ffff:ffff:ffff:ffff:ffff,AE
+2a00:68c0::,2a00:68c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:68e0::,2a00:68e0:ffff:ffff:ffff:ffff:ffff:ffff,SY
+2a00:6900::,2a00:6900:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:6920::,2a00:6920:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a00:6940::,2a00:6940:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:6960::,2a00:6960:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:6980::,2a00:6980:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:69a0::,2a00:69a0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:69c0::,2a00:69c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:69e0::,2a00:69e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:6a00::,2a00:6a00:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a00:6a20::,2a00:6a20:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:6a40::,2a00:6a40:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:6a60::,2a00:6a60:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:6a80::,2a00:6a80:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:6ac0::,2a00:6ac0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:6ae0::,2a00:6ae0:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a00:6b00::,2a00:6b00:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:6b20::,2a00:6b20:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a00:6b40::,2a00:6b40:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:6b60::,2a00:6b60:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a00:6b80::,2a00:6b80:ffff:ffff:ffff:ffff:ffff:ffff,AL
+2a00:6bc0::,2a00:6bc0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:6be0::,2a00:6be0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:6c00::,2a00:6c00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:6c20::,2a00:6c20:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:6c40::,2a00:6c40:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:6c60::,2a00:6c60:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:6c80::,2a00:6c80:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:6ca0::,2a00:6ca0:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a00:6ce0::,2a00:6ce0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:6d20::,2a00:6d20:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a00:6d40::,2a00:6d47:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:6d60::,2a00:6d60:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:6d80::,2a00:6d80:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:6da0::,2a00:6da0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:6dc0::,2a00:6dc0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:6de0::,2a00:6de0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:6e00::,2a00:6e00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:6e20::,2a00:6e20:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a00:6e40::,2a00:6e40:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:6e60::,2a00:6e60:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:6e80::,2a00:6e80:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:6ea0::,2a00:6ea0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:6ec0::,2a00:6ec0:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:6f00::,2a00:6f00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:6f20::,2a00:6f20:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:6f40::,2a00:6f40:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a00:6f60::,2a00:6f60:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:6f80::,2a00:6f80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:6fa0::,2a00:6fa0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:6fc0::,2a00:6fc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:6fe0::,2a00:6fe0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:7000::,2a00:7000:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:7020::,2a00:7020:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:7040::,2a00:7040:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:7060::,2a00:7060:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:7080::,2a00:7080:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:70a0::,2a00:70a0:ffff:ffff:ffff:ffff:ffff:ffff,SY
+2a00:70c0::,2a00:70c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:70e0::,2a00:70e0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:7100::,2a00:7100:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:7120::,2a00:7120:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:7140::,2a00:7147:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:7160::,2a00:7160:ffff:ffff:ffff:ffff:ffff:ffff,KG
+2a00:7180::,2a00:7180:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:71a0::,2a00:71a0:ffff:ffff:ffff:ffff:ffff:ffff,BA
+2a00:71c0::,2a00:71c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:71e0::,2a00:71e0:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a00:7200::,2a00:7200:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:7220::,2a00:7220:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:7240::,2a00:7243:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:7260::,2a00:7260:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:7280::,2a00:7280:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:72a0::,2a00:72a0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:72e0::,2a00:72e0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:7300::,2a00:7300:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:7320::,2a00:7327:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:7340::,2a00:7340:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:7360::,2a00:7360:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a00:7380::,2a00:7380:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:73a0::,2a00:73a0:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a00:73c0::,2a00:73c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:73e0::,2a00:73e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:7400::,2a00:7400:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a00:7420::,2a00:7420:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:7440::,2a00:7447:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:7460::,2a00:7460:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:7480::,2a00:7480:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:74a0::,2a00:74a0:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:74c0::,2a00:74c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:74e0::,2a00:74e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:7500::,2a00:7500:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:7520::,2a00:7520:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:7540::,2a00:7540:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:7560::,2a00:7560:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:7580::,2a00:7580:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:75a0::,2a00:75a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:75c0::,2a00:75c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:75e0::,2a00:75e0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:7600::,2a00:7600:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a00:7620::,2a00:7620:ffff:ffff:ffff:ffff:ffff:ffff,CY
+2a00:7640::,2a00:7640:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:7660::,2a00:7660:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:7680::,2a00:7680:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a00:76a0::,2a00:76a0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:76c0::,2a00:76c0:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:76e0::,2a00:76e0:ffff:ffff:ffff:ffff:ffff:ffff,JO
+2a00:7700::,2a00:7700:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:7720::,2a00:7720:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:7740::,2a00:7740:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:7760::,2a00:7767:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:7780::,2a00:7780:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a00:77a0::,2a00:77a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:77c0::,2a00:77c0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:77e0::,2a00:77e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:7800::,2a00:7800:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:7820::,2a00:7820:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:7840::,2a00:7840:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a00:7860::,2a00:7860:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:7880::,2a00:7880:ffff:ffff:ffff:ffff:ffff:ffff,HR
+2a00:78a0::,2a00:78a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:78c0::,2a00:78c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:78e0::,2a00:78e0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:7900::,2a00:7900:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:7920::,2a00:7920:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:7940::,2a00:7940:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:7960::,2a00:7960:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:7980::,2a00:7980:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:79a0::,2a00:79a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:79c0::,2a00:79c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:79e0::,2a00:79e0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:7a00::,2a00:7a00:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:7a20::,2a00:7a20:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:7a40::,2a00:7a40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:7a60::,2a00:7a60:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:7a80::,2a00:7a80:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:7ac0::,2a00:7ac0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:7ae0::,2a00:7ae0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:7b00::,2a00:7b07:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:7b40::,2a00:7b40:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a00:7b60::,2a00:7b60:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:7b80::,2a00:7b80:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:7ba0::,2a00:7ba0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:7be0::,2a00:7be0:ffff:ffff:ffff:ffff:ffff:ffff,QA
+2a00:7c00::,2a00:7c00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:7c20::,2a00:7c20:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:7c40::,2a00:7c40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:7c60::,2a00:7c60:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:7c80::,2a00:7c80:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:7ca0::,2a00:7ca0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:7cc0::,2a00:7cc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:7ce0::,2a00:7ce0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:7d00::,2a00:7d00:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:7d20::,2a00:7d20:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:7d40::,2a00:7d40:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:7d60::,2a00:7d60:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:7d80::,2a00:7d80:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:7da0::,2a00:7da0:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a00:7dc0::,2a00:7dc0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:7de0::,2a00:7de0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:7e00::,2a00:7e00:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:7e20::,2a00:7e20:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a00:7e40::,2a00:7e40:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:7e60::,2a00:7e60:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:7e80::,2a00:7e80:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:7ea0::,2a00:7ea0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:7ec0::,2a00:7ec0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:7f00::,2a00:7f00:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:7f20::,2a00:7f20:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a00:7f40::,2a00:7f40:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:7f60::,2a00:7f60:ffff:ffff:ffff:ffff:ffff:ffff,AE
+2a00:7f80::,2a00:7f87:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:7fc0::,2a00:7fc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:7fe0::,2a00:7fe0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:8020::,2a00:8020:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:8040::,2a00:8040:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:8060::,2a00:8060:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:8080::,2a00:8080:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:80a0::,2a00:80a0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:80c0::,2a00:80c0:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:80e0::,2a00:80e0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:8100::,2a00:8100:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a00:8120::,2a00:8120:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:8140::,2a00:8140:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:8160::,2a00:8160:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:8180::,2a00:8180:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:81a0::,2a00:81a0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:81c0::,2a00:81c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:81e0::,2a00:81e0:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a00:8200::,2a00:8200:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:8220::,2a00:8220:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:8240::,2a00:8240:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:8260::,2a00:8260:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:8280::,2a00:8280:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:82a0::,2a00:82a0:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a00:82c0::,2a00:82c0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:82e0::,2a00:82e0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:8300::,2a00:8300:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:8320::,2a00:8320:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a00:8340::,2a00:8340:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:8360::,2a00:8360:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:8380::,2a00:8380:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:83a0::,2a00:83a0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:83e0::,2a00:83e0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:8400::,2a00:8400:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:8420::,2a00:8420:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:8440::,2a00:8440:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:8460::,2a00:8460:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:8480::,2a00:8480:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a00:84a0::,2a00:84a0:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:84c0::,2a00:84c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:84e0::,2a00:84e0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:8500::,2a00:8500:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:8520::,2a00:8520:ffff:ffff:ffff:ffff:ffff:ffff,PS
+2a00:8540::,2a00:8540:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:8560::,2a00:8560:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:8580::,2a00:8580:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:85a0::,2a00:85a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:85c0::,2a00:85c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:85e0::,2a00:85e0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:8600::,2a00:8600:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:8640::,2a00:8647:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:8660::,2a00:8660:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:8680::,2a00:8680:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a00:86a0::,2a00:86a0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:86c0::,2a00:86c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:86e0::,2a00:86e0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:8700::,2a00:8700:ffff:ffff:ffff:ffff:ffff:ffff,ME
+2a00:8720::,2a00:8720:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a00:8740::,2a00:8740:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:8760::,2a00:8760:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:8780::,2a00:8780:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:87a0::,2a00:87a0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:87c0::,2a00:87c0:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a00:87e0::,2a00:87e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:8800::,2a00:8800:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:8820::,2a00:8820:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a00:8840::,2a00:8840:ffff:ffff:ffff:ffff:ffff:ffff,UZ
+2a00:8880::,2a00:8880:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:88a0::,2a00:88a0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:88c0::,2a00:88c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:88e0::,2a00:88e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:8900::,2a00:8900:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:8920::,2a00:8920:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:8940::,2a00:8940:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:8960::,2a00:8960:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:8980::,2a00:8980:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:89a0::,2a00:89a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:89c0::,2a00:89c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:89e0::,2a00:89e0:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:8a00::,2a00:8a00:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:8a20::,2a00:8a20:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:8a40::,2a00:8a40:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:8a80::,2a00:8a87:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:8aa0::,2a00:8aa0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:8ac0::,2a00:8ac0:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a00:8ae0::,2a00:8ae0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:8b00::,2a00:8b00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:8b20::,2a00:8b20:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:8b60::,2a00:8b60:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:8b80::,2a00:8b80:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:8ba0::,2a00:8ba0:ffff:ffff:ffff:ffff:ffff:ffff,AL
+2a00:8bc0::,2a00:8bc0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:8be0::,2a00:8be0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:8c00::,2a00:8c00:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a00:8c20::,2a00:8c20:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:8c40::,2a00:8c40:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:8c60::,2a00:8c60:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:8c80::,2a00:8c80:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a00:8ca0::,2a00:8ca0:ffff:ffff:ffff:ffff:ffff:ffff,BA
+2a00:8cc0::,2a00:8cc0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:8ce0::,2a00:8ce0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:8d00::,2a00:8d00:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:8d40::,2a00:8d40:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a00:8d60::,2a00:8d60:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:8d80::,2a00:8d80:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:8dc0::,2a00:8dc0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:8de0::,2a00:8de0:ffff:ffff:ffff:ffff:ffff:ffff,MT
+2a00:8e00::,2a00:8e00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:8e20::,2a00:8e20:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:8e40::,2a00:8e40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:8e60::,2a00:8e60:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:8ea0::,2a00:8ea0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:8ec0::,2a00:8ec0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:8ee0::,2a00:8ee7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:8f00::,2a00:8f00:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:8f20::,2a00:8f20:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:8f40::,2a00:8f40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:8f60::,2a00:8f60:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:8fa0::,2a00:8fa0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:8fc0::,2a00:8fc0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:8fe0::,2a00:8fe0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:9000::,2a00:9000:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a00:9020::,2a00:9020:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:9040::,2a00:9040:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:9060::,2a00:9060:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a00:9080::,2a00:9080:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:90a0::,2a00:90a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:90c0::,2a00:90c7:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:9100::,2a00:9100:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a00:9120::,2a00:9120:ffff:ffff:ffff:ffff:ffff:ffff,OM
+2a00:9140::,2a00:9140:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a00:9160::,2a00:9160:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a00:9180::,2a00:9180:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:91a0::,2a00:91a0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:91c0::,2a00:91c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:91e0::,2a00:91e0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:9200::,2a00:9200:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:9220::,2a00:9220:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:9240::,2a00:9240:ffff:ffff:ffff:ffff:ffff:ffff,HR
+2a00:9260::,2a00:9260:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a00:9280::,2a00:9280:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a00:92a0::,2a00:92a7:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:92c0::,2a00:92c0:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a00:92e0::,2a00:92e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:9300::,2a00:93ff:ffff:ffff:ffff:ffff:ffff:ffff,SX
+2a00:9400::,2a00:9400:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:9420::,2a00:9420:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a00:9440::,2a00:9440:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:9460::,2a00:9467:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:9480::,2a00:9480:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:94a0::,2a00:94a0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:94c0::,2a00:94c0:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:94e0::,2a00:94e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:9500::,2a00:9500:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a00:9520::,2a00:9520:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:9540::,2a00:9540:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:9560::,2a00:9560:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:9580::,2a00:9580:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:95a0::,2a00:95a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:95c0::,2a00:95c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:95e0::,2a00:95e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:9600::,2a00:9600:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:9620::,2a00:9620:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:9640::,2a00:9640:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a00:9680::,2a00:9680:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:96a0::,2a00:96a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:96c0::,2a00:96c0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:96e0::,2a00:96e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:9700::,2a00:9700:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:9720::,2a00:9720:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:9740::,2a00:9740:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:9760::,2a00:9760:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:9780::,2a00:9780:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:97a0::,2a00:97a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:97c0::,2a00:97c0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:97e0::,2a00:97e0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:9800::,2a00:9800:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:9820::,2a00:9820:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:9840::,2a00:9840:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:9860::,2a00:9860:ffff:ffff:ffff:ffff:ffff:ffff,HR
+2a00:9880::,2a00:9880:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:98a0::,2a00:98a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:98c0::,2a00:98c0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:98e0::,2a00:98e0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:9900::,2a00:9900:ffff:ffff:ffff:ffff:ffff:ffff,MD
+2a00:9920::,2a00:9920:ffff:ffff:ffff:ffff:ffff:ffff,PS
+2a00:9980::,2a00:9980:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:99a0::,2a00:99a0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:99c0::,2a00:99c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:99e0::,2a00:99e7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:9a00::,2a00:9a00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:9a20::,2a00:9a20:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:9a40::,2a00:9a40:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:9a60::,2a00:9a60:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:9a80::,2a00:9a80:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:9aa0::,2a00:9aa0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:9ac0::,2a00:9ac0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:9ae0::,2a00:9ae0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:9b00::,2a00:9b00:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:9b40::,2a00:9b40:ffff:ffff:ffff:ffff:ffff:ffff,KZ
+2a00:9b60::,2a00:9b60:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:9b80::,2a00:9b80:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:9ba0::,2a00:9ba0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:9bc0::,2a00:9bc0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:9be0::,2a00:9be0:ffff:ffff:ffff:ffff:ffff:ffff,AL
+2a00:9c00::,2a00:9c00:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:9c20::,2a00:9c20:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:9c40::,2a00:9c40:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:9c80::,2a00:9c80:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:9ca0::,2a00:9ca0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:9cc0::,2a00:9cc0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:9ce0::,2a00:9ce0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:9d00::,2a00:9d00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:9d20::,2a00:9d20:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:9d40::,2a00:9d40:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:9d60::,2a00:9d60:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:9d80::,2a00:9d87:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:9dc0::,2a00:9dc0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:9de0::,2a00:9de0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:9e00::,2a00:9e07:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:9e20::,2a00:9e20:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:9e40::,2a00:9e40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:9e60::,2a00:9e60:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:9e80::,2a00:9e80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:9ea0::,2a00:9ea0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:9ec0::,2a00:9ec0:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a00:9ee0::,2a00:9ee0:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a00:9f00::,2a00:9f00:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:9f20::,2a00:9f20:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:9f40::,2a00:9f40:ffff:ffff:ffff:ffff:ffff:ffff,AL
+2a00:9f60::,2a00:9f60:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a00:9f80::,2a00:9f80:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:9fa0::,2a00:9fa0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:9fc0::,2a00:9fc0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:9fe0::,2a00:9fe7:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:a000::,2a00:a000:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:a020::,2a00:a020:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:a040::,2a00:a040:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a00:a060::,2a00:a060:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:a080::,2a00:a080:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:a0a0::,2a00:a0a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:a0c0::,2a00:a0c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:a0e0::,2a00:a0e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:a100::,2a00:a100:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a00:a120::,2a00:a120:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:a140::,2a00:a140:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:a160::,2a00:a160:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:a180::,2a00:a180:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:a1a0::,2a00:a1a0:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a00:a1c0::,2a00:a1c0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:a1e0::,2a00:a1e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:a200::,2a00:a200:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:a220::,2a00:a220:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:a240::,2a00:a240:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:a260::,2a00:a260:ffff:ffff:ffff:ffff:ffff:ffff,AL
+2a00:a280::,2a00:a280:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:a2a0::,2a00:a2a0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:a2c0::,2a00:a2c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:a2e0::,2a00:a2e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:a300::,2a00:a300:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:a320::,2a00:a320:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:a340::,2a00:a340:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:a360::,2a00:a360:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a00:a380::,2a00:a380:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:a3a0::,2a00:a3a0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:a3c0::,2a00:a3c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:a3e0::,2a00:a3e0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:a400::,2a00:a400:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:a420::,2a00:a420:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:a440::,2a00:a440:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:a460::,2a00:a460:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:a480::,2a00:a480:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:a4a0::,2a00:a4a0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:a4c0::,2a00:a4c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:a4e0::,2a00:a4e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:a500::,2a00:a500:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:a520::,2a00:a520:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:a540::,2a00:a540:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:a560::,2a00:a560:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:a580::,2a00:a580:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:a5a0::,2a00:a5a0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:a5c0::,2a00:a5c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:a5e0::,2a00:a5e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:a600::,2a00:a600:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:a620::,2a00:a620:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:a640::,2a00:a640:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:a660::,2a00:a660:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:a680::,2a00:a680:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:a6a0::,2a00:a6a0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:a6c0::,2a00:a6c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:a6e0::,2a00:a6e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:a700::,2a00:a700:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:a720::,2a00:a720:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:a740::,2a00:a740:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a00:a760::,2a00:a760:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:a780::,2a00:a780:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:a7a0::,2a00:a7a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:a7c0::,2a00:a7c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:a7e0::,2a00:a7e0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:a800::,2a00:a800:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:a820::,2a00:a820:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:a840::,2a00:a840:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:a860::,2a00:a860:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:a880::,2a00:a880:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a00:a8a0::,2a00:a8a0:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a00:a8e0::,2a00:a8e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:a900::,2a00:a900:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:a920::,2a00:a920:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:a960::,2a00:a960:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:a980::,2a00:a987:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:a9a0::,2a00:a9a0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:a9c0::,2a00:a9c0:ffff:ffff:ffff:ffff:ffff:ffff,MK
+2a00:a9e0::,2a00:a9e0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:aa00::,2a00:aa00:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:aa40::,2a00:aa40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:aa60::,2a00:aa60:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:aa80::,2a00:aa80:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a00:aaa0::,2a00:aaa0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:aac0::,2a00:aac0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:aae0::,2a00:aae0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:ab00::,2a00:ab00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:ab20::,2a00:ab20:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:ab40::,2a00:ab40:ffff:ffff:ffff:ffff:ffff:ffff,KZ
+2a00:ab60::,2a00:ab60:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:ab80::,2a00:ab80:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:aba0::,2a00:aba0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:abe0::,2a00:abe0:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:ac00::,2a00:ac00:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:ac20::,2a00:ac20:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:ac40::,2a00:ac40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:ac60::,2a00:ac60:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:ac80::,2a00:ac80:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:aca0::,2a00:aca0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:acc0::,2a00:acc0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:ace0::,2a00:ace0:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:ad00::,2a00:ad00:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a00:ad20::,2a00:ad20:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:ad40::,2a00:ad40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:ad60::,2a00:ad60:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:ad80::,2a00:ad87:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:adc0::,2a00:adc0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:ade0::,2a00:ade0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:ae00::,2a00:ae00:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:ae20::,2a00:ae20:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:ae40::,2a00:ae40:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:ae60::,2a00:ae60:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:ae80::,2a00:ae80:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:aea0::,2a00:aea0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:aec0::,2a00:aec0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:aee0::,2a00:aee0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:af00::,2a00:af00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:af20::,2a00:af20:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:af40::,2a00:af40:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:af60::,2a00:af60:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a00:af80::,2a00:af80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:afa0::,2a00:afa0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:afc0::,2a00:afc0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:afe0::,2a00:afe0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:b000::,2a00:b000:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a00:b020::,2a00:b020:ffff:ffff:ffff:ffff:ffff:ffff,KG
+2a00:b040::,2a00:b040:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:b060::,2a00:b060:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:b080::,2a00:b080:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:b0a0::,2a00:b0a0:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:b0c0::,2a00:b0c0:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a00:b0e0::,2a00:b0e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:b100::,2a00:b100:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:b120::,2a00:b120:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:b140::,2a00:b140:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:b160::,2a00:b160:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:b180::,2a00:b180:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:b1a0::,2a00:b1a0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:b1c0::,2a00:b1c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:b1e0::,2a00:b1e0:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a00:b200::,2a00:b200:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:b220::,2a00:b220:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:b260::,2a00:b260:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:b280::,2a00:b280:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:b2a0::,2a00:b2a0:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a00:b2e0::,2a00:b2e0:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a00:b300::,2a00:b300:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:b320::,2a00:b320:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:b340::,2a00:b340:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:b360::,2a00:b360:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:b380::,2a00:b380:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:b3a0::,2a00:b3a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:b3c0::,2a00:b3c0:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a00:b3e0::,2a00:b3e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:b400::,2a00:b407:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:b420::,2a00:b420:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:b440::,2a00:b440:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:b460::,2a00:b460:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:b480::,2a00:b480:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:b4a0::,2a00:b4a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:b4c0::,2a00:b4c7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:b500::,2a00:b500:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:b520::,2a00:b520:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:b540::,2a00:b540:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:b560::,2a00:b560:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:b580::,2a00:b580:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:b5a0::,2a00:b5a0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:b5c0::,2a00:b5c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:b5e0::,2a00:b5e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:b600::,2a00:b607:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:b640::,2a00:b640:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:b660::,2a00:b660:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:b680::,2a00:b680:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:b6a0::,2a00:b6a0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:b6c0::,2a00:b6c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:b6e0::,2a00:b6e0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:b700::,2a00:b700:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:b720::,2a00:b720:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a00:b740::,2a00:b740:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:b760::,2a00:b760:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:b780::,2a00:b780:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:b7a0::,2a00:b7a0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:b7c0::,2a00:b7c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:b7e0::,2a00:b7e0:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a00:b800::,2a00:b800:ffff:ffff:ffff:ffff:ffff:ffff,SY
+2a00:b820::,2a00:b820:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:b840::,2a00:b840:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:b860::,2a00:b860:ffff:ffff:ffff:ffff:ffff:ffff,JO
+2a00:b880::,2a00:b880:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:b8a0::,2a00:b8a0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:b8c0::,2a00:b8c0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:b8e0::,2a00:b8e0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:b900::,2a00:b900:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:b920::,2a00:b920:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:b960::,2a00:b960:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:b980::,2a00:b981:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:b9a0::,2a00:b9a0:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:b9c0::,2a00:b9c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:b9e0::,2a00:b9e0:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a00:ba00::,2a00:ba00:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a00:ba20::,2a00:ba20:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:ba40::,2a00:ba40:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:ba60::,2a00:ba60:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:ba80::,2a00:ba80:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:baa0::,2a00:baa0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:bac0::,2a00:bac0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:bae0::,2a00:bae0:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:bb00::,2a00:bb00:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:bb20::,2a00:bb20:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:bb40::,2a00:bb40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:bb60::,2a00:bb60:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:bb80::,2a00:bb80:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:bba0::,2a00:bba0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:bbc0::,2a00:bbc0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:bbe0::,2a00:bbe0:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:bc00::,2a00:bc00:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:bc20::,2a00:bc20:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a00:bc40::,2a00:bc40:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:bc60::,2a00:bc60:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:bc80::,2a00:bc80:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:bca0::,2a00:bca0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:bcc0::,2a00:bcc0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:bce0::,2a00:bce0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:bd00::,2a00:bd00:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:bd20::,2a00:bd20:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:bd40::,2a00:bd40:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:bd60::,2a00:bd60:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:bd80::,2a00:bd80:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:bda0::,2a00:bda0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:bdc0::,2a00:bdc0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:bde0::,2a00:bde0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:be00::,2a00:be00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:be20::,2a00:be20:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:be40::,2a00:be40:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:be60::,2a00:be60:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:be80::,2a00:be80:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:bea0::,2a00:bea0:ffff:ffff:ffff:ffff:ffff:ffff,AE
+2a00:bec0::,2a00:bec7:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:bf00::,2a00:bf00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:bf20::,2a00:bf20:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:bf40::,2a00:bf40:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:bf60::,2a00:bf60:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:bf80::,2a00:bf80:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:bfa0::,2a00:bfa0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:bfc0::,2a00:bfc0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:c000::,2a00:c000:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:c040::,2a00:c040:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:c060::,2a00:c060:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:c080::,2a00:c080:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:c0a0::,2a00:c0a0:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a00:c0c0::,2a00:c0c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:c0e0::,2a00:c0e0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:c100::,2a00:c100:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:c120::,2a00:c120:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:c140::,2a00:c140:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:c160::,2a00:c160:ffff:ffff:ffff:ffff:ffff:ffff,AL
+2a00:c180::,2a00:c180:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:c1a0::,2a00:c1a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:c1c0::,2a00:c1c0:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:c1e0::,2a00:c1e0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:c200::,2a00:c200:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:c220::,2a00:c220:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:c240::,2a00:c240:ffff:ffff:ffff:ffff:ffff:ffff,AE
+2a00:c260::,2a00:c260:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:c280::,2a00:c280:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a00:c2a0::,2a00:c2a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:c2c0::,2a00:c2c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:c300::,2a00:c300:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:c320::,2a00:c320:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:c340::,2a00:c340:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:c360::,2a00:c360:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:c380::,2a00:c380:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:c3a0::,2a00:c3a0:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a00:c3c0::,2a00:c3c0:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a00:c3e0::,2a00:c3e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:c400::,2a00:c400:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:c420::,2a00:c420:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:c440::,2a00:c447:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:c460::,2a00:c460:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:c4a0::,2a00:c4a0:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:c4c0::,2a00:c4c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:c4e0::,2a00:c4e0:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:c500::,2a00:c500:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:c520::,2a00:c520:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:c540::,2a00:c540:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:c560::,2a00:c560:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a00:c580::,2a00:c580:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:c5a0::,2a00:c5a0:ffff:ffff:ffff:ffff:ffff:ffff,MD
+2a00:c5c0::,2a00:c5c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:c5e0::,2a00:c5e0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:c600::,2a00:c600:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:c620::,2a00:c620:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:c640::,2a00:c640:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:c660::,2a00:c660:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:c680::,2a00:c680:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:c6a0::,2a00:c6a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:c6c0::,2a00:c6c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:c6e0::,2a00:c6e0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:c700::,2a00:c700:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a00:c720::,2a00:c720:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:c740::,2a00:c740:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:c760::,2a00:c760:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a00:c780::,2a00:c780:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:c7a0::,2a00:c7a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:c7c0::,2a00:c7c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:c7e0::,2a00:c7e0:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a00:c800::,2a00:c800:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:c820::,2a00:c820:ffff:ffff:ffff:ffff:ffff:ffff,BY
+2a00:c840::,2a00:c840:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:c860::,2a00:c860:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a00:c880::,2a00:c880:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:c8a0::,2a00:c8a7:ffff:ffff:ffff:ffff:ffff:ffff,MK
+2a00:c8c0::,2a00:c8c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:c8e0::,2a00:c8e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:c900::,2a00:c900:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:c920::,2a00:c920:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:c940::,2a00:c940:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:c960::,2a00:c960:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a00:c980::,2a00:c980:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:c9a0::,2a00:c9a0:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a00:c9c0::,2a00:c9c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:c9e0::,2a00:c9e0:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a00:ca00::,2a00:ca00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:ca20::,2a00:ca20:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a00:ca40::,2a00:ca40:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:ca60::,2a00:ca67:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a00:ca80::,2a00:ca80:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:caa0::,2a00:caa0:ffff:ffff:ffff:ffff:ffff:ffff,JO
+2a00:cac0::,2a00:cac0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:cae0::,2a00:cae0:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a00:cb00::,2a00:cb00:ffff:ffff:ffff:ffff:ffff:ffff,BA
+2a00:cb20::,2a00:cb20:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:cb40::,2a00:cb40:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a00:cb60::,2a00:cb60:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:cb80::,2a00:cb80:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:cba0::,2a00:cba0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:cbc0::,2a00:cbc0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:cbe0::,2a00:cbe0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:cc00::,2a00:cc00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:cc20::,2a00:cc20:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:cc40::,2a00:cc40:ffff:ffff:ffff:ffff:ffff:ffff,AM
+2a00:cc60::,2a00:cc60:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:cc80::,2a00:cc80:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:cca0::,2a00:cca0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:ccc0::,2a00:ccc7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:cce0::,2a00:cce0:ffff:ffff:ffff:ffff:ffff:ffff,MD
+2a00:cd00::,2a00:cd00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:cd20::,2a00:cd20:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:cd40::,2a00:cd40:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:cd60::,2a00:cd60:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:cd80::,2a00:cd80:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:cda0::,2a00:cda0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:cdc0::,2a00:cdc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:cde0::,2a00:cde0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:ce00::,2a00:ce00:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:ce20::,2a00:ce27:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:ce40::,2a00:ce40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:ce60::,2a00:ce60:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:ce80::,2a00:ce80:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:cea0::,2a00:cea0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:cec0::,2a00:cec0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:cee0::,2a00:cee7:ffff:ffff:ffff:ffff:ffff:ffff,PS
+2a00:cf00::,2a00:cf00:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a00:cf20::,2a00:cf20:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a00:cf40::,2a00:cf40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:cf60::,2a00:cf60:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:cf80::,2a00:cf80:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:cfa0::,2a00:cfa0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:cfc0::,2a00:cfc0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:cfe0::,2a00:cfe0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:d000::,2a00:d000:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:d020::,2a00:d020:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:d040::,2a00:d040:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:d060::,2a00:d060:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:d080::,2a00:d080:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:d0a0::,2a00:d0a0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:d0c0::,2a00:d0c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:d0e0::,2a00:d0e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:d100::,2a00:d100:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:d120::,2a00:d120:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:d140::,2a00:d140:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a00:d160::,2a00:d160:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:d180::,2a00:d180:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a00:d1a0::,2a00:d1a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:d1c0::,2a00:d1c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:d1e0::,2a00:d1e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:d200::,2a00:d200:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:d240::,2a00:d240:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a00:d260::,2a00:d267:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:d280::,2a00:d280:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:d2a0::,2a00:d2a7:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:d2c0::,2a00:d2c0:ffff:ffff:ffff:ffff:ffff:ffff,PS
+2a00:d2e0::,2a00:d2e7:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:d300::,2a00:d300:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:d320::,2a00:d327:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:d340::,2a00:d340:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:d360::,2a00:d367:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:d380::,2a00:d380:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:d3a0::,2a00:d3a7:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:d3e0::,2a00:d3e7:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:d400::,2a00:d400:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:d420::,2a00:d427:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:d440::,2a00:d447:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a00:d480::,2a00:d480:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:d4a0::,2a00:d4a7:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:d4c0::,2a00:d4c0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:d4e0::,2a00:d4e7:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:d500::,2a00:d500:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:d520::,2a00:d527:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:d540::,2a00:d540:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:d560::,2a00:d567:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:d580::,2a00:d580:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:d5a0::,2a00:d5a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:d5c0::,2a00:d5c7:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:d5e0::,2a00:d5e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:d600::,2a00:d600:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:d620::,2a00:d620:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a00:d640::,2a00:d640:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:d660::,2a00:d660:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:d680::,2a00:d680:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:d6a0::,2a00:d6a0:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a00:d6c0::,2a00:d6c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:d6e0::,2a00:d6e0:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a00:d700::,2a00:d700:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:d720::,2a00:d727:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:d740::,2a00:d747:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:d780::,2a00:d780:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:d7a0::,2a00:d7a0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:d7c0::,2a00:d7c0:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a00:d7e0::,2a00:d7e0:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a00:d800::,2a00:d800:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a00:d820::,2a00:d820:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:d840::,2a00:d840:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a00:d860::,2a00:d860:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:d880::,2a00:d880:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:d8a0::,2a00:d8a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:d8c0::,2a00:d8c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:d8e0::,2a00:d8e0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:d900::,2a00:d900:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:d920::,2a00:d920:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:d940::,2a00:d940:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:d960::,2a00:d967:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:d980::,2a00:d980:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:d9a0::,2a00:d9a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:d9c0::,2a00:d9c0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:da00::,2a00:da00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:da20::,2a00:da20:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:da40::,2a00:da40:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:da60::,2a00:da60:ffff:ffff:ffff:ffff:ffff:ffff,LI
+2a00:da80::,2a00:da80:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:daa0::,2a00:daa0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:dac0::,2a00:dac0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:dae0::,2a00:dae0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:db00::,2a00:db00:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:db20::,2a00:db20:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:db40::,2a00:db40:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:db60::,2a00:db60:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a00:db80::,2a00:db80:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:dba0::,2a00:dba0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:dbc0::,2a00:dbc0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:dbe0::,2a00:dbe0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:dc00::,2a00:dc00:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:dc20::,2a00:dc20:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a00:dc40::,2a00:dc40:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:dc60::,2a00:dc60:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:dc80::,2a00:dc80:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:dca0::,2a00:dca7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:dcc0::,2a00:dcc7:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:dd00::,2a00:dd00:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a00:dd20::,2a00:dd20:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:dd40::,2a00:dd40:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:dd60::,2a00:dd60:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:dda0::,2a00:dda0:ffff:ffff:ffff:ffff:ffff:ffff,PS
+2a00:ddc0::,2a00:ddc0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:dde0::,2a00:dde0:ffff:ffff:ffff:ffff:ffff:ffff,BH
+2a00:de00::,2a00:de00:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:de20::,2a00:de20:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:de40::,2a00:de40:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:de60::,2a00:de60:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:de80::,2a00:de80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:dea0::,2a00:dea0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:dec0::,2a00:dec0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:dee0::,2a00:dee0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:df00::,2a00:df00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:df20::,2a00:df20:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:df40::,2a00:df40:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:df60::,2a00:df60:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:df80::,2a00:df80:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a00:dfa0::,2a00:dfa0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:dfc0::,2a00:dfc0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:dfe0::,2a00:dfe7:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:e000::,2a00:e000:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:e020::,2a00:e020:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:e040::,2a00:e040:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:e060::,2a00:e060:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:e080::,2a00:e080:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:e0a0::,2a00:e0a0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2a00:e0c0::,2a00:e0c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:e100::,2a00:e100:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:e120::,2a00:e120:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:e140::,2a00:e140:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:e160::,2a00:e160:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:e180::,2a00:e180:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:e1a0::,2a00:e1a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:e1c0::,2a00:e1c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:e1e0::,2a00:e1e0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:e200::,2a00:e200:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a00:e220::,2a00:e220:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:e240::,2a00:e240:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:e260::,2a00:e260:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:e280::,2a00:e280:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:e2a0::,2a00:e2a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:e2c0::,2a00:e2c0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:e2e0::,2a00:e2e0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:e300::,2a00:e300:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a00:e320::,2a00:e320:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:e340::,2a00:e340:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:e360::,2a00:e360:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:e380::,2a00:e380:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a00:e3a0::,2a00:e3a0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:e3e0::,2a00:e3e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:e400::,2a00:e407:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:e440::,2a00:e440:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:e460::,2a00:e460:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:e480::,2a00:e480:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:e4a0::,2a00:e4a0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:e4c0::,2a00:e4c0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:e500::,2a00:e500:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:e520::,2a00:e520:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:e540::,2a00:e540:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:e560::,2a00:e560:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:e580::,2a00:e580:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:e5a0::,2a00:e5a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:e5c0::,2a00:e5c0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:e5e0::,2a00:e5e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:e600::,2a00:e600:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:e620::,2a00:e620:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:e640::,2a00:e640:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:e660::,2a00:e660:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:e680::,2a00:e680:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:e6a0::,2a00:e6a0:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a00:e6c0::,2a00:e6c0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:e6e0::,2a00:e6e0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:e700::,2a00:e700:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:e720::,2a00:e720:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a00:e740::,2a00:e740:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:e760::,2a00:e760:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:e780::,2a00:e780:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:e7a0::,2a00:e7a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:e7c0::,2a00:e7c0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:e7e0::,2a00:e7e0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:e800::,2a00:e807:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:e840::,2a00:e840:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:e860::,2a00:e860:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a00:e880::,2a00:e880:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:e8c0::,2a00:e8c0:ffff:ffff:ffff:ffff:ffff:ffff,GE
+2a00:e8e0::,2a00:e8e0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:e900::,2a00:e900:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:e920::,2a00:e920:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:e940::,2a00:e940:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:e960::,2a00:e960:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:e980::,2a00:e980:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:e9a0::,2a00:e9a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:e9c0::,2a00:e9c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:e9e0::,2a00:e9e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:ea00::,2a00:ea00:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:ea20::,2a00:ea20:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:ea40::,2a00:ea40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:ea60::,2a00:ea60:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a00:ea80::,2a00:ea80:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:eaa0::,2a00:eaa0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:eac0::,2a00:eac0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:eae0::,2a00:eae0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:eb00::,2a00:eb00:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:eb20::,2a00:eb20:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:eb40::,2a00:eb40:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:eb60::,2a00:eb60:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:eb80::,2a00:eb80:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:ebc0::,2a00:ebc0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:ebe0::,2a00:ebe0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:ec00::,2a00:ec00:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:ec20::,2a00:ec23:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:ec40::,2a00:ec47:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:ec80::,2a00:ec80:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:eca0::,2a00:eca0:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:ecc0::,2a00:ecc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:ece0::,2a00:ece0:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a00:ed00::,2a00:ed00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:ed20::,2a00:ed20:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:ed40::,2a00:ed40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:ed60::,2a00:ed60:ffff:ffff:ffff:ffff:ffff:ffff,BA
+2a00:ed80::,2a00:ed80:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:eda0::,2a00:eda0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:ede0::,2a00:ede0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:ee00::,2a00:ee00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:ee20::,2a00:ee20:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:ee40::,2a00:ee40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:ee60::,2a00:ee60:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:eea0::,2a00:eea0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:eec0::,2a00:eec0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:eee0::,2a00:eee0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:ef00::,2a00:ef00:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:ef20::,2a00:ef20:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:ef40::,2a00:ef40:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:ef60::,2a00:ef67:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:ef80::,2a00:ef80:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:efa0::,2a00:efa0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:efc0::,2a00:efc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:efe0::,2a00:efe0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:f000::,2a00:f000:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a00:f020::,2a00:f020:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:f040::,2a00:f040:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:f060::,2a00:f060:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:f080::,2a00:f080:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:f0a0::,2a00:f0a7:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:f0c0::,2a00:f0c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:f0e0::,2a00:f0e0:ffff:ffff:ffff:ffff:ffff:ffff,QA
+2a00:f100::,2a00:f100:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:f120::,2a00:f120:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:f140::,2a00:f140:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:f160::,2a00:f160:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:f180::,2a00:f180:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:f1a0::,2a00:f1a0:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:f1c0::,2a00:f1c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:f1e0::,2a00:f1e0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:f200::,2a00:f200:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:f220::,2a00:f220:ffff:ffff:ffff:ffff:ffff:ffff,ME
+2a00:f260::,2a00:f260:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a00:f280::,2a00:f280:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:f2a0::,2a00:f2a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:f2c0::,2a00:f2c0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:f2e0::,2a00:f2e0:ffff:ffff:ffff:ffff:ffff:ffff,GE
+2a00:f300::,2a00:f300:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:f320::,2a00:f320:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:f340::,2a00:f340:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:f360::,2a00:f360:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:f380::,2a00:f380:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:f3a0::,2a00:f3a0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:f3c0::,2a00:f3c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:f3e0::,2a00:f3e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:f400::,2a00:f4ff:ffff:ffff:ffff:ffff:ffff:ffff,RW
+2a00:f500::,2a00:f507:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a00:f520::,2a00:f520:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:f540::,2a00:f540:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:f560::,2a00:f560:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:f580::,2a00:f580:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a00:f5a0::,2a00:f5a0:ffff:ffff:ffff:ffff:ffff:ffff,HR
+2a00:f5c0::,2a00:f5c0:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:f5e0::,2a00:f5e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:f600::,2a00:f600:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:f620::,2a00:f620:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:f640::,2a00:f640:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:f660::,2a00:f660:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:f680::,2a00:f680:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:f6a0::,2a00:f6a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:f6c0::,2a00:f6c0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:f6e0::,2a00:f6e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:f700::,2a00:f707:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:f720::,2a00:f720:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:f760::,2a00:f760:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:f780::,2a00:f780:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:f7a0::,2a00:f7a0:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a00:f7c0::,2a00:f7c7:ffff:ffff:ffff:ffff:ffff:ffff,BA
+2a00:f800::,2a00:f800:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:f820::,2a00:f827:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:f860::,2a00:f860:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:f880::,2a00:f880:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:f8a0::,2a00:f8a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:f8c0::,2a00:f8c0:ffff:ffff:ffff:ffff:ffff:ffff,LI
+2a00:f8e0::,2a00:f8e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:f900::,2a00:f900:ffff:ffff:ffff:ffff:ffff:ffff,MD
+2a00:f920::,2a00:f920:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:f940::,2a00:f940:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:f960::,2a00:f960:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a00:f980::,2a00:f980:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:f9a0::,2a00:f9a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:f9c0::,2a00:f9c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:f9e0::,2a00:f9e0:ffff:ffff:ffff:ffff:ffff:ffff,CY
+2a00:fa00::,2a00:fa00:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a00:fa20::,2a00:fa20:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:fa40::,2a00:fa40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:fa60::,2a00:fa60:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:fa80::,2a00:fa80:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:faa0::,2a00:faa0:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a00:fac0::,2a00:fac0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:fae0::,2a00:fae0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:fb00::,2a00:fb00:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:fb20::,2a00:fb20:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:fb40::,2a00:fb40:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:fb60::,2a00:fb60:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:fb80::,2a00:fb80:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:fba0::,2a00:fba0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:fbc0::,2a00:fbc0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:fbe0::,2a00:fbe0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:fc00::,2a00:fc00:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:fc20::,2a00:fc20:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:fc40::,2a00:fc40:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a00:fc60::,2a00:fc60:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:fc80::,2a00:fc80:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:fca0::,2a00:fca0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:fcc0::,2a00:fcc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:fce0::,2a00:fce0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:fd00::,2a00:fd00:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:fd20::,2a00:fd20:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a00:fd40::,2a00:fd40:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:fd60::,2a00:fd60:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:fd80::,2a00:fd80:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:fda0::,2a00:fda0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:fdc0::,2a00:fdc0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:fde0::,2a00:fde0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:fe00::,2a00:fe00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:fe20::,2a00:fe20:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:fe40::,2a00:fe40:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:fe60::,2a00:fe60:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:fe80::,2a00:fe80:ffff:ffff:ffff:ffff:ffff:ffff,ME
+2a00:fea0::,2a00:fea0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:fec0::,2a00:fec0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:fee0::,2a00:fee0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:ff00::,2a00:ff00:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:ff20::,2a00:ff20:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:ff40::,2a00:ff40:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:ff60::,2a00:ff60:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:ff80::,2a00:ff80:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a00:ffa0::,2a00:ffa0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:ffc0::,2a00:ffc0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:ffe0::,2a00:ffe0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01::,2a01::ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:8::,2a01:8:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a01:10::,2a01:10:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a01:18::,2a01:18:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a01:20::,2a01:20:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:28::,2a01:28:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:30::,2a01:30:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:38::,2a01:38:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a01:40::,2a01:40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:48::,2a01:48:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:50::,2a01:50:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:58::,2a01:58:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:68::,2a01:68:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:70::,2a01:70:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:78::,2a01:78:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:80::,2a01:80:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a01:88::,2a01:88:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:90::,2a01:90:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:98::,2a01:98:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:a0::,2a01:a0:ffff:ffff:ffff:ffff:ffff:ffff,MT
+2a01:a8::,2a01:a8:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:b0::,2a01:b1:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a01:b8::,2a01:b8:ffff:ffff:ffff:ffff:ffff:ffff,VA
+2a01:c0::,2a01:c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:c8::,2a01:c8:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:d0::,2a01:d0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a01:d8::,2a01:d8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:e0::,2a01:e0:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a01:e8::,2a01:e8:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:f0::,2a01:f0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:f8::,2a01:f8:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a01:100::,2a01:100:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a01:108::,2a01:108:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a01:120::,2a01:120:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:130::,2a01:130:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:138::,2a01:138:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:140::,2a01:140:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:148::,2a01:148:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:150::,2a01:150:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:158::,2a01:158:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a01:160::,2a01:160:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a01:168::,2a01:168:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:170::,2a01:170:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:178::,2a01:178:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:180::,2a01:180:ffff:ffff:ffff:ffff:ffff:ffff,MT
+2a01:188::,2a01:188:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a01:190::,2a01:197:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a01:198::,2a01:198:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:1a0::,2a01:1a0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:1a8::,2a01:1a8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:1b0::,2a01:1b0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:1b8::,2a01:1b8:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a01:1c0::,2a01:1c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:1c8::,2a01:1c8:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:1d0::,2a01:1d0:ffff:ffff:ffff:ffff:ffff:ffff,JO
+2a01:1d8::,2a01:1d8:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:1e0::,2a01:1e0:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:1e8::,2a01:1e8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:1f0::,2a01:1f0:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a01:1f8::,2a01:1f8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:200::,2a01:200:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:208::,2a01:208:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:210::,2a01:210:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:220::,2a01:220:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:228::,2a01:228:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:230::,2a01:230:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:238::,2a01:238:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:240::,2a01:240:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:248::,2a01:248:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:250::,2a01:250:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:258::,2a01:258:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:260::,2a01:260:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a01:268::,2a01:268:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:270::,2a01:270:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a01:278::,2a01:27f:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:280::,2a01:287:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:288::,2a01:288:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a01:290::,2a01:290:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:298::,2a01:29f:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:2a0::,2a01:2a0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:2a8::,2a01:2af:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:2b0::,2a01:2b7:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:2b8::,2a01:2b8:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a01:2c0::,2a01:2c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:2c8::,2a01:2c8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:2d0::,2a01:2d0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:2d8::,2a01:2d8:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:2e0::,2a01:2ef:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:308::,2a01:308:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:310::,2a01:310:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:320::,2a01:320:ffff:ffff:ffff:ffff:ffff:ffff,MD
+2a01:328::,2a01:328:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a01:330::,2a01:330:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:338::,2a01:338:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:340::,2a01:340:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a01:348::,2a01:348:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:350::,2a01:350:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:358::,2a01:358:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a01:360::,2a01:360:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:368::,2a01:36f:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a01:378::,2a01:378:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:380::,2a01:380:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:388::,2a01:38f:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:390::,2a01:390:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a01:398::,2a01:398:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:3a0::,2a01:3a7:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a01:3a8::,2a01:3a8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:3b8::,2a01:3b8:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:3c8::,2a01:3c8:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a01:3d8::,2a01:3d8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:3e8::,2a01:3e8:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:3f0::,2a01:3f0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:3f8::,2a01:3f8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:400::,2a01:400:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:408::,2a01:408:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:410::,2a01:410:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:418::,2a01:418:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:420::,2a01:420:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:428::,2a01:428:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:430::,2a01:430:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:438::,2a01:438:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:440::,2a01:447:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:448::,2a01:448:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:450::,2a01:450:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:458::,2a01:458:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a01:460::,2a01:460:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a01:468::,2a01:468:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a01:470::,2a01:477:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:478::,2a01:47f:ffff:ffff:ffff:ffff:ffff:ffff,BA
+2a01:480::,2a01:480:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:488::,2a01:488:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:490::,2a01:490:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:498::,2a01:498:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a01:4a0::,2a01:4a8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:4b0::,2a01:4b0:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:4c0::,2a01:4c0:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a01:4c8::,2a01:4cf:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:4d0::,2a01:4d0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:4d8::,2a01:4d8:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:4e0::,2a01:4e7:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a01:4e8::,2a01:4e8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:4f0::,2a01:4f0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a01:4f8::,2a01:4ff:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:500::,2a01:500:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:508::,2a01:508:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:510::,2a01:510:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:518::,2a01:518:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:520::,2a01:520:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a01:528::,2a01:528:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a01:530::,2a01:530:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:538::,2a01:538:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:540::,2a01:540:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:548::,2a01:548:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:550::,2a01:550:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:558::,2a01:558:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a01:560::,2a01:567:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a01:568::,2a01:570:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:578::,2a01:578:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:580::,2a01:580:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:590::,2a01:590:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:598::,2a01:59f:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:5a0::,2a01:5a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:5a8::,2a01:5a8:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a01:5b0::,2a01:5b0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:5b8::,2a01:5bf:ffff:ffff:ffff:ffff:ffff:ffff,MK
+2a01:5c0::,2a01:5c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:5c8::,2a01:5c8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:5d0::,2a01:5d0:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a01:5d8::,2a01:5df:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:5e0::,2a01:5e0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:5f0::,2a01:5f0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:5f8::,2a01:5f8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:600::,2a01:600:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a01:608::,2a01:608:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a01:610::,2a01:610:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:618::,2a01:618:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:620::,2a01:620:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:628::,2a01:628:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:630::,2a01:630:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a01:640::,2a01:647:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a01:648::,2a01:648:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:650::,2a01:650:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:658::,2a01:658:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:660::,2a01:667:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:668::,2a01:668:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:670::,2a01:670:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:678::,2a01:67f:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:680::,2a01:680:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:688::,2a01:688:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:690::,2a01:690:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a01:698::,2a01:698:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:6a0::,2a01:6a0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:6a8::,2a01:6a8:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:6b0::,2a01:6b0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a01:6b8::,2a01:6b8:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:6c0::,2a01:6c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:6c8::,2a01:6c8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:6d0::,2a01:6d0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:6d8::,2a01:6d8:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:6e0::,2a01:6e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:6e8::,2a01:6e8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:6f0::,2a01:6f0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:6f8::,2a01:6f8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:700::,2a01:700:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:710::,2a01:710:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:718::,2a01:718:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a01:720::,2a01:720:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a01:728::,2a01:72f:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:730::,2a01:730:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a01:738::,2a01:738:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:740::,2a01:740:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:748::,2a01:748:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a01:750::,2a01:750:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a01:758::,2a01:758:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a01:760::,2a01:760:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:768::,2a01:768:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:770::,2a01:770:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:778::,2a01:778:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a01:780::,2a01:780:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:788::,2a01:788:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:790::,2a01:790:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a01:798::,2a01:79f:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a01:7a0::,2a01:7a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:7a8::,2a01:7a8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:7b0::,2a01:7b0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:7b8::,2a01:7b8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:7c0::,2a01:7c0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a01:7c8::,2a01:7c8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:7d0::,2a01:7d0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:7d8::,2a01:7d8:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a01:7e0::,2a01:7e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:7e8::,2a01:7e8:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a01:7f0::,2a01:7f0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:7f8::,2a01:7f8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:800::,2a01:8ff:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:c00::,2a01:c3f:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:e00::,2a01:eff:ffff:ffff:ffff:ffff:ffff:ffff,SX
+2a01:1000::,2a01:17ff:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:2000::,2a01:2fff:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:4000::,2a01:4000:ffff:ffff:ffff:ffff:ffff:ffff,AM
+2a01:4020::,2a01:4020:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:4040::,2a01:4040:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:4060::,2a01:4060:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:4080::,2a01:4080:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:40a0::,2a01:40a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:40c0::,2a01:40c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:40e0::,2a01:40e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:4120::,2a01:4120:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a01:4160::,2a01:4160:ffff:ffff:ffff:ffff:ffff:ffff,AL
+2a01:41a0::,2a01:41a0:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a01:41c0::,2a01:41c0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:41e0::,2a01:41e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:4200::,2a01:4207:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:4240::,2a01:4240:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:4260::,2a01:4260:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a01:4280::,2a01:4280:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a01:42a0::,2a01:42a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:42c0::,2a01:42c0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a01:42e0::,2a01:42e0:ffff:ffff:ffff:ffff:ffff:ffff,KZ
+2a01:4300::,2a01:4300:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:4320::,2a01:4320:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:4340::,2a01:4340:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a01:4360::,2a01:4360:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:4380::,2a01:4380:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:43a0::,2a01:43a0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:43c0::,2a01:43c0:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a01:43e0::,2a01:43e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:4400::,2a01:4400:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:4420::,2a01:4420:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:4440::,2a01:4440:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:4460::,2a01:4460:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:4480::,2a01:4480:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:44a0::,2a01:44a0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:44c0::,2a01:44c0:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a01:44e0::,2a01:44e0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a01:4500::,2a01:4500:ffff:ffff:ffff:ffff:ffff:ffff,PS
+2a01:4520::,2a01:4520:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:4540::,2a01:4547:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:4580::,2a01:4587:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:45c0::,2a01:45c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:45e0::,2a01:45e0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:4600::,2a01:4600:ffff:ffff:ffff:ffff:ffff:ffff,BH
+2a01:4620::,2a01:4620:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:4640::,2a01:4640:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:4660::,2a01:4660:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:4680::,2a01:4680:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a01:46a0::,2a01:46a0:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a01:46c0::,2a01:46c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:46e0::,2a01:46e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:4720::,2a01:4720:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:4740::,2a01:4740:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a01:4760::,2a01:4760:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:4780::,2a01:4780:ffff:ffff:ffff:ffff:ffff:ffff,AM
+2a01:47a0::,2a01:47a0:ffff:ffff:ffff:ffff:ffff:ffff,GE
+2a01:47c0::,2a01:47c0:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a01:47e0::,2a01:47e0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a01:4800::,2a01:4800:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:4820::,2a01:4820:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:4840::,2a01:4840:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:4860::,2a01:4860:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a01:4880::,2a01:4880:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:48a0::,2a01:48a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:48c0::,2a01:48c0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:48e0::,2a01:48e0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:4900::,2a01:4900:ffff:ffff:ffff:ffff:ffff:ffff,BH
+2a01:4920::,2a01:4920:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:4940::,2a01:4940:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:4960::,2a01:4960:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:4980::,2a01:4980:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a01:49a0::,2a01:49a0:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a01:49c0::,2a01:49c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:49e0::,2a01:49e0:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a01:4a00::,2a01:4a00:ffff:ffff:ffff:ffff:ffff:ffff,AM
+2a01:4a20::,2a01:4a20:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:4a40::,2a01:4a40:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a01:4a60::,2a01:4a60:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a01:4a80::,2a01:4a80:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:4aa0::,2a01:4aa0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:4ac0::,2a01:4ac0:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a01:4ae0::,2a01:4ae0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:4b00::,2a01:4b00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:4b20::,2a01:4b20:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:4b40::,2a01:4b40:ffff:ffff:ffff:ffff:ffff:ffff,KZ
+2a01:4b60::,2a01:4b60:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:4b80::,2a01:4b80:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:4ba0::,2a01:4ba0:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a01:4bc0::,2a01:4bc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:4be0::,2a01:4be0:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a01:4c00::,2a01:4c00:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:4c20::,2a01:4c20:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a01:4c40::,2a01:4c40:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a01:4c60::,2a01:4c60:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:4c80::,2a01:4c80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:4ca0::,2a01:4ca0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:4cc0::,2a01:4cc0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:4d00::,2a01:4d00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:4d20::,2a01:4d20:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a01:4d40::,2a01:4d40:ffff:ffff:ffff:ffff:ffff:ffff,KZ
+2a01:4d60::,2a01:4d60:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:4d80::,2a01:4d80:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:4da0::,2a01:4da0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:4dc0::,2a01:4dc7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:4de0::,2a01:4de0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:4e00::,2a01:4e00:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:4e20::,2a01:4e20:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:4e40::,2a01:4e40:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:4e60::,2a01:4e60:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:4e80::,2a01:4e80:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:4ea0::,2a01:4ea0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:4ec0::,2a01:4ec0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:4ee0::,2a01:4ee0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:4f00::,2a01:4f00:ffff:ffff:ffff:ffff:ffff:ffff,AL
+2a01:4f20::,2a01:4f20:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:4f40::,2a01:4f40:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:4f60::,2a01:4f60:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:4f80::,2a01:4f80:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:4fa0::,2a01:4fa0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:4fc0::,2a01:4fc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:4fe0::,2a01:4fe0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:5000::,2a01:5000:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:5020::,2a01:5020:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:5040::,2a01:5047:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:5080::,2a01:5080:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:50a0::,2a01:50a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:50c0::,2a01:50c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:50e0::,2a01:50e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:5100::,2a01:5100:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:5120::,2a01:5120:ffff:ffff:ffff:ffff:ffff:ffff,CY
+2a01:5140::,2a01:5140:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:5160::,2a01:5160:ffff:ffff:ffff:ffff:ffff:ffff,ME
+2a01:5180::,2a01:5180:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:51a0::,2a01:51a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:51c0::,2a01:51c7:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a01:5200::,2a01:5200:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a01:5220::,2a01:5220:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:5240::,2a01:5240:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:5260::,2a01:5260:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:5280::,2a01:5280:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:52a0::,2a01:52a0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:52c0::,2a01:52c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:52e0::,2a01:52e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:5300::,2a01:5300:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:5320::,2a01:5320:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:5340::,2a01:5340:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:5360::,2a01:5360:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:5380::,2a01:5380:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:53a0::,2a01:53a0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:53c0::,2a01:53c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:53e0::,2a01:53e0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:5400::,2a01:5400:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:5420::,2a01:5420:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:5440::,2a01:5440:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a01:5460::,2a01:5460:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:5480::,2a01:5480:ffff:ffff:ffff:ffff:ffff:ffff,GG
+2a01:54a0::,2a01:54a0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:54c0::,2a01:54c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:54e0::,2a01:54e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:5500::,2a01:5507:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a01:5540::,2a01:5540:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:5560::,2a01:5560:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:5580::,2a01:5580:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:55a0::,2a01:55a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:55c0::,2a01:55c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:55e0::,2a01:55e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:5600::,2a01:5600:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a01:5620::,2a01:5620:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:5640::,2a01:5640:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:5660::,2a01:5660:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:5680::,2a01:5680:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:56a0::,2a01:56a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:56c0::,2a01:56c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:56e0::,2a01:56e0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:5700::,2a01:5700:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:5720::,2a01:5720:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:5740::,2a01:5740:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a01:5760::,2a01:5760:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:5780::,2a01:5780:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:57a0::,2a01:57a0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:57c0::,2a01:57c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:57e0::,2a01:57e0:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a01:5800::,2a01:5800:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a01:5820::,2a01:5820:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:5840::,2a01:5840:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a01:5860::,2a01:5860:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:58a0::,2a01:58a0:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a01:58e0::,2a01:58e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:5900::,2a01:5900:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:5920::,2a01:5920:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:5940::,2a01:5940:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:5960::,2a01:5960:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a01:5980::,2a01:5980:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:59a0::,2a01:59a7:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:59c0::,2a01:59c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:59e0::,2a01:59e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:5a00::,2a01:5a00:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a01:5a20::,2a01:5a20:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:5a40::,2a01:5a40:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:5a60::,2a01:5a60:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:5a80::,2a01:5a80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2a01:5aa0::,2a01:5aa0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:5ac0::,2a01:5ac0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:5ae0::,2a01:5ae0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:5b00::,2a01:5b00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:5b20::,2a01:5b20:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:5b40::,2a01:5b40:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a01:5b60::,2a01:5b60:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:5b80::,2a01:5b80:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a01:5ba0::,2a01:5ba0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:5bc0::,2a01:5bc0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:5be0::,2a01:5be0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:5c00::,2a01:5c00:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a01:5c20::,2a01:5c20:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:5c40::,2a01:5c40:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a01:5c60::,2a01:5c60:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:5c80::,2a01:5c80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:5ca0::,2a01:5ca0:ffff:ffff:ffff:ffff:ffff:ffff,KW
+2a01:5cc0::,2a01:5cc0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:5ce0::,2a01:5ce0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:5d00::,2a01:5d00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:5d20::,2a01:5d20:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:5d40::,2a01:5d40:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a01:5d60::,2a01:5d67:ffff:ffff:ffff:ffff:ffff:ffff,TJ
+2a01:5d80::,2a01:5d80:ffff:ffff:ffff:ffff:ffff:ffff,BH
+2a01:5da0::,2a01:5da0:ffff:ffff:ffff:ffff:ffff:ffff,ME
+2a01:5dc0::,2a01:5dc0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:5de0::,2a01:5de0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:5e00::,2a01:5e00:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:5e20::,2a01:5e20:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a01:5e40::,2a01:5e40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:5e60::,2a01:5e60:ffff:ffff:ffff:ffff:ffff:ffff,AE
+2a01:5e80::,2a01:5e80:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a01:5ea0::,2a01:5ea0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:5ec0::,2a01:5ec0:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a01:5ee0::,2a01:5ee0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:5f00::,2a01:5f00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:5f20::,2a01:5f20:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:5f40::,2a01:5f40:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:5f60::,2a01:5f60:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:5f80::,2a01:5f80:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:5fa0::,2a01:5fa0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a01:5fc0::,2a01:5fc0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:5fe0::,2a01:5fe0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:6000::,2a01:6000:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:6020::,2a01:6020:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:6040::,2a01:6040:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:6060::,2a01:6060:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a01:6080::,2a01:6080:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:60a0::,2a01:60a0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:60c0::,2a01:60c0:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a01:60e0::,2a01:60e0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:6100::,2a01:6100:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:6120::,2a01:6120:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:6140::,2a01:6140:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a01:6160::,2a01:6160:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:6180::,2a01:6180:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a01:61a0::,2a01:61a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:61c0::,2a01:61c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:61e0::,2a01:61e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:6200::,2a01:6200:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a01:6220::,2a01:6220:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:6240::,2a01:6240:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:6260::,2a01:6260:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:6280::,2a01:6280:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:62a0::,2a01:62a0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:62c0::,2a01:62c0:ffff:ffff:ffff:ffff:ffff:ffff,CY
+2a01:6300::,2a01:6300:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:6320::,2a01:6320:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a01:6340::,2a01:6347:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:6360::,2a01:6360:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:6380::,2a01:6380:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:63a0::,2a01:63a0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a01:63c0::,2a01:63c0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:63e0::,2a01:63e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:6400::,2a01:6400:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:6420::,2a01:6420:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:6440::,2a01:6440:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a01:6460::,2a01:6460:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:6480::,2a01:6480:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a01:64a0::,2a01:64a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:64c0::,2a01:64c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:64e0::,2a01:64e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:6500::,2a01:6500:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a01:6520::,2a01:6520:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:6540::,2a01:6540:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:6560::,2a01:6560:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a01:6580::,2a01:6580:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:65a0::,2a01:65a0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:65c0::,2a01:65c0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:65e0::,2a01:65e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:6600::,2a01:6600:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:6620::,2a01:6620:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a01:6640::,2a01:6647:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:6680::,2a01:6680:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:66a0::,2a01:66a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:66c0::,2a01:66c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:66e0::,2a01:66e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:6700::,2a01:6700:ffff:ffff:ffff:ffff:ffff:ffff,CY
+2a01:6720::,2a01:6720:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a01:6740::,2a01:6740:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:6760::,2a01:6760:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:6780::,2a01:6780:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:67a0::,2a01:67a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:67c0::,2a01:67c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:67e0::,2a01:67e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:6800::,2a01:6800:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:6820::,2a01:6820:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:6840::,2a01:6840:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:6860::,2a01:6860:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:6880::,2a01:6880:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a01:68a0::,2a01:68a0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:68c0::,2a01:68c0:ffff:ffff:ffff:ffff:ffff:ffff,KZ
+2a01:68e0::,2a01:68e0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a01:6900::,2a01:6900:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:6920::,2a01:6920:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:6940::,2a01:6940:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:6960::,2a01:6960:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:6980::,2a01:6980:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:69a0::,2a01:69a0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:69c0::,2a01:69c0:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:69e0::,2a01:69e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:6a00::,2a01:6a07:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:6a40::,2a01:6a40:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:6a60::,2a01:6a60:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:6a80::,2a01:6a80:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:6aa0::,2a01:6aa0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:6ac0::,2a01:6ac0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:6ae0::,2a01:6ae7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:6b00::,2a01:6b00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:6b20::,2a01:6b20:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:6b40::,2a01:6b40:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:6b60::,2a01:6b60:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:6b80::,2a01:6b80:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a01:6ba0::,2a01:6ba0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:6bc0::,2a01:6bc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:6be0::,2a01:6be0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a01:6c00::,2a01:6c00:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:6c20::,2a01:6c20:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:6c40::,2a01:6c40:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:6c60::,2a01:6c60:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:6c80::,2a01:6c80:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:6ca0::,2a01:6ca0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:6cc0::,2a01:6cc0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:6ce0::,2a01:6ce0:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:6d00::,2a01:6d00:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:6d20::,2a01:6d20:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a01:6d40::,2a01:6d40:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:6d60::,2a01:6d60:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:6d80::,2a01:6d80:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a01:6da0::,2a01:6da0:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a01:6dc0::,2a01:6dc0:ffff:ffff:ffff:ffff:ffff:ffff,MD
+2a01:6de0::,2a01:6de0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:6e00::,2a01:6e00:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:6e20::,2a01:6e20:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:6e40::,2a01:6e40:ffff:ffff:ffff:ffff:ffff:ffff,BY
+2a01:6e60::,2a01:6e60:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:6e80::,2a01:6e80:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:6ea0::,2a01:6ea0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:6ec0::,2a01:6ec0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:6ee0::,2a01:6ee0:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a01:6f00::,2a01:6f07:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a01:6f20::,2a01:6f20:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:6f40::,2a01:6f40:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:6f60::,2a01:6f60:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:6f80::,2a01:6f80:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a01:6fa0::,2a01:6fa0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:6fc0::,2a01:6fc0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a01:6fe0::,2a01:6fe0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a01:7000::,2a01:7000:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:7020::,2a01:7020:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:7040::,2a01:7040:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a01:7060::,2a01:7060:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:7080::,2a01:7080:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a01:70a0::,2a01:70a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:70c0::,2a01:70c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:70e0::,2a01:70e0:ffff:ffff:ffff:ffff:ffff:ffff,KW
+2a01:7100::,2a01:7100:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:7120::,2a01:7120:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a01:7140::,2a01:7140:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:7160::,2a01:7160:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a01:7180::,2a01:7180:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:71a0::,2a01:71a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:71c0::,2a01:71c1:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:71e0::,2a01:71e0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:7200::,2a01:7200:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:7220::,2a01:7220:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a01:7240::,2a01:7240:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:7260::,2a01:7260:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a01:7280::,2a01:7280:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:72a0::,2a01:72a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:72e0::,2a01:72e0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:7300::,2a01:7300:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a01:7320::,2a01:7320:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a01:7340::,2a01:7340:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:7360::,2a01:7360:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a01:7380::,2a01:7380:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:73a0::,2a01:73a0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:73c0::,2a01:73c0:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a01:73e0::,2a01:73e0:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a01:7400::,2a01:7400:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:7420::,2a01:7420:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:7440::,2a01:7440:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:7460::,2a01:7460:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:7480::,2a01:7480:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:74a0::,2a01:74a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:74c0::,2a01:74c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:74e0::,2a01:74e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:7500::,2a01:7500:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a01:7520::,2a01:7520:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:7540::,2a01:7540:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:7560::,2a01:7560:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a01:7580::,2a01:7580:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:75a0::,2a01:75a0:ffff:ffff:ffff:ffff:ffff:ffff,AE
+2a01:75c0::,2a01:75c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:7600::,2a01:7600:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:7620::,2a01:7620:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:7640::,2a01:7640:ffff:ffff:ffff:ffff:ffff:ffff,KZ
+2a01:7660::,2a01:7660:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:7680::,2a01:7680:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:76a0::,2a01:76a0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a01:76c0::,2a01:76c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:76e0::,2a01:76e0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:7700::,2a01:7700:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:7720::,2a01:7720:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:7740::,2a01:7740:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:7760::,2a01:7760:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:7780::,2a01:7780:ffff:ffff:ffff:ffff:ffff:ffff,KW
+2a01:77a0::,2a01:77a0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:77c0::,2a01:77c0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a01:77e0::,2a01:77e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:7800::,2a01:7800:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:7820::,2a01:7820:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:7840::,2a01:7840:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:7860::,2a01:7860:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:7880::,2a01:7880:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:78a0::,2a01:78a0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:78c0::,2a01:78c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:78e0::,2a01:78e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:7900::,2a01:7900:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:7920::,2a01:7920:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a01:7940::,2a01:7940:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:7960::,2a01:7960:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:7980::,2a01:7980:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:79a0::,2a01:79a0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a01:79c0::,2a01:79c0:ffff:ffff:ffff:ffff:ffff:ffff,CY
+2a01:79e0::,2a01:79e0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a01:7a00::,2a01:7a00:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:7a20::,2a01:7a20:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a01:7a40::,2a01:7a40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:7a60::,2a01:7a60:ffff:ffff:ffff:ffff:ffff:ffff,SM
+2a01:7a80::,2a01:7a87:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a01:7ac0::,2a01:7ac0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:7ae0::,2a01:7ae0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:7b00::,2a01:7b00:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a01:7b20::,2a01:7b20:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:7b40::,2a01:7b40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:7b60::,2a01:7b60:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:7b80::,2a01:7b80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:7ba0::,2a01:7ba0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:7bc0::,2a01:7bc0:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a01:7be0::,2a01:7be0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:7c00::,2a01:7c00:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:7c20::,2a01:7c20:ffff:ffff:ffff:ffff:ffff:ffff,GE
+2a01:7c40::,2a01:7c40:ffff:ffff:ffff:ffff:ffff:ffff,HR
+2a01:7c60::,2a01:7c60:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:7c80::,2a01:7c80:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a01:7ca0::,2a01:7ca0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:7cc0::,2a01:7cc0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a01:7ce0::,2a01:7ce0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:7d00::,2a01:7d00:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:7d20::,2a01:7d20:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:7d40::,2a01:7d40:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a01:7d60::,2a01:7d60:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a01:7d80::,2a01:7d80:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a01:7da0::,2a01:7da0:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:7de0::,2a01:7de0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:7e00::,2a01:7e00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:7e20::,2a01:7e27:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:7e40::,2a01:7e40:ffff:ffff:ffff:ffff:ffff:ffff,BH
+2a01:7e60::,2a01:7e60:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a01:7e80::,2a01:7e80:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:7ea0::,2a01:7ea0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:7ec0::,2a01:7ec0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:7ee0::,2a01:7ee0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:7f00::,2a01:7f00:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:7f20::,2a01:7f20:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:7f40::,2a01:7f40:ffff:ffff:ffff:ffff:ffff:ffff,KW
+2a01:7f60::,2a01:7f60:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:7f80::,2a01:7f80:ffff:ffff:ffff:ffff:ffff:ffff,PS
+2a01:7fa0::,2a01:7fa0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:7fc0::,2a01:7fc0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:7fe0::,2a01:7fe0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:8000::,2a01:8000:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:8020::,2a01:8020:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a01:8040::,2a01:8040:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:8060::,2a01:8060:ffff:ffff:ffff:ffff:ffff:ffff,AE
+2a01:8080::,2a01:8080:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a01:80a0::,2a01:80a0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a01:80c0::,2a01:80c0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:80e0::,2a01:80e0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a01:8100::,2a01:8100:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:8120::,2a01:8120:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a01:8140::,2a01:8140:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a01:8160::,2a01:8160:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:8180::,2a01:8180:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:81a0::,2a01:81a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:81c0::,2a01:81c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:81e0::,2a01:81e0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:8200::,2a01:8200:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:8220::,2a01:8220:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:8240::,2a01:8240:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:8260::,2a01:8260:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:8280::,2a01:8280:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a01:82a0::,2a01:82a0:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a01:82c0::,2a01:82c0:ffff:ffff:ffff:ffff:ffff:ffff,HR
+2a01:82e0::,2a01:82e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:8300::,2a01:8300:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a01:8320::,2a01:8320:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:8340::,2a01:8340:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:8360::,2a01:8360:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:8380::,2a01:8380:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:83a0::,2a01:83a0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a01:83c0::,2a01:83c0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a01:83e0::,2a01:83e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:8400::,2a01:8400:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:8420::,2a01:8420:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:8440::,2a01:8440:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:8460::,2a01:8460:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:8480::,2a01:8480:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:84a0::,2a01:84a0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:84c0::,2a01:84c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:84e0::,2a01:84e0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:8500::,2a01:8500:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:8520::,2a01:8520:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a01:8540::,2a01:8540:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:8560::,2a01:8560:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:8580::,2a01:8580:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:85a0::,2a01:85a0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:85e0::,2a01:85e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:8600::,2a01:8600:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:8620::,2a01:8620:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a01:8640::,2a01:8640:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:8660::,2a01:8660:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:8680::,2a01:8680:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:86a0::,2a01:86a0:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a01:86c0::,2a01:86c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:86e0::,2a01:86e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:8700::,2a01:8700:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a01:8720::,2a01:8720:ffff:ffff:ffff:ffff:ffff:ffff,US
+2a01:8740::,2a01:8740:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a01:8760::,2a01:8760:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:8780::,2a01:8787:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:87c0::,2a01:87c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:87e0::,2a01:87e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:8800::,2a01:8800:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:8820::,2a01:8820:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:8840::,2a01:8840:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:8860::,2a01:8860:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:8880::,2a01:8880:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a01:88a0::,2a01:88a0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:88c0::,2a01:88c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:88e0::,2a01:88e0:ffff:ffff:ffff:ffff:ffff:ffff,GE
+2a01:8900::,2a01:8900:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:8920::,2a01:8920:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:8940::,2a01:8940:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:8960::,2a01:8960:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:8980::,2a01:8980:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:89a0::,2a01:89a0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a01:89c0::,2a01:89c0:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a01:89e0::,2a01:89e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:8a00::,2a01:8a00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:8a20::,2a01:8a20:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:8a40::,2a01:8a40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:8a60::,2a01:8a60:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:8a80::,2a01:8a80:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a01:8aa0::,2a01:8aa0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:8ac0::,2a01:8ac0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:8ae0::,2a01:8ae0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:8b00::,2a01:8b00:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:8b20::,2a01:8b20:ffff:ffff:ffff:ffff:ffff:ffff,PS
+2a01:8b40::,2a01:8b40:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:8b60::,2a01:8b60:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a01:8b80::,2a01:8b80:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:8ba0::,2a01:8ba7:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:8bc0::,2a01:8bc0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:8be0::,2a01:8be0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:8c00::,2a01:8c00:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:8c20::,2a01:8c20:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:8c40::,2a01:8c40:ffff:ffff:ffff:ffff:ffff:ffff,GI
+2a01:8c60::,2a01:8c60:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a01:8c80::,2a01:8c80:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:8ca0::,2a01:8ca0:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a01:8cc0::,2a01:8cc0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a01:8ce0::,2a01:8ce0:ffff:ffff:ffff:ffff:ffff:ffff,KZ
+2a01:8d00::,2a01:8d00:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:8d20::,2a01:8d20:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:8d40::,2a01:8d47:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:8d80::,2a01:8d80:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a01:8da0::,2a01:8da0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:8dc0::,2a01:8dc0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a01:8de0::,2a01:8de0:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a01:8e00::,2a01:8e00:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:8e20::,2a01:8e20:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:8e40::,2a01:8e40:ffff:ffff:ffff:ffff:ffff:ffff,JO
+2a01:8e60::,2a01:8e60:ffff:ffff:ffff:ffff:ffff:ffff,US
+2a01:8e80::,2a01:8e87:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:8ec0::,2a01:8ec0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a01:8ee0::,2a01:8ee0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:8f00::,2a01:8f00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:8f20::,2a01:8f20:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:8f40::,2a01:8f40:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:8f60::,2a01:8f60:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:8f80::,2a01:8f80:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:8fa0::,2a01:8fa0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:8fc0::,2a01:8fc0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:8fe0::,2a01:8fe0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:9000::,2a01:9000:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:9020::,2a01:9020:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:9040::,2a01:9040:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a01:9060::,2a01:9060:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:9080::,2a01:9080:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:90a0::,2a01:90a0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:90c0::,2a01:90c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:90e0::,2a01:90e0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a01:9100::,2a01:9100:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a01:9120::,2a01:9120:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:9140::,2a01:9140:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:9160::,2a01:9160:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:9180::,2a01:9180:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a01:91a0::,2a01:91a0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a01:91c0::,2a01:91c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:91e0::,2a01:91e0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:9220::,2a01:9220:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:9240::,2a01:9240:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a01:9260::,2a01:9260:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a01:9280::,2a01:9280:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:92a0::,2a01:92a0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:92c0::,2a01:92c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:92e0::,2a01:92e0:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a01:9300::,2a01:9300:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:9320::,2a01:9320:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a01:9340::,2a01:9340:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:9360::,2a01:9360:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:9380::,2a01:9380:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:93a0::,2a01:93a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:93c0::,2a01:93c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:93e0::,2a01:93e0:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a01:9400::,2a01:9400:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:9420::,2a01:9420:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:9440::,2a01:9440:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:9460::,2a01:9460:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a01:9480::,2a01:9480:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a01:94a0::,2a01:94a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:94c0::,2a01:94c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:94e0::,2a01:94e0:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a01:9500::,2a01:9500:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:9520::,2a01:9520:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:9540::,2a01:9540:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:9560::,2a01:9560:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:9580::,2a01:9580:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:95a0::,2a01:95a0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:95c0::,2a01:95c0:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a01:95e0::,2a01:95e0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:9600::,2a01:9600:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:9620::,2a01:9620:ffff:ffff:ffff:ffff:ffff:ffff,GE
+2a01:9640::,2a01:9640:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:9660::,2a01:9660:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:9680::,2a01:9680:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:96a0::,2a01:96a0:ffff:ffff:ffff:ffff:ffff:ffff,KG
+2a01:96c0::,2a01:96c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:96e0::,2a01:96e0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:9700::,2a01:9700:ffff:ffff:ffff:ffff:ffff:ffff,JO
+2a01:9720::,2a01:9720:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:9740::,2a01:9740:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:9760::,2a01:9760:ffff:ffff:ffff:ffff:ffff:ffff,KY
+2a01:9780::,2a01:9780:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:97a0::,2a01:97a0:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a01:97c0::,2a01:97c0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a01:97e0::,2a01:97e0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:9800::,2a01:9800:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a01:9820::,2a01:9820:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:9840::,2a01:9840:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:9860::,2a01:9860:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:9880::,2a01:9880:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:98a0::,2a01:98a0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:98c0::,2a01:98c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:98e0::,2a01:98e0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:9900::,2a01:9900:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a01:9920::,2a01:9920:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:9940::,2a01:9940:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:9960::,2a01:9960:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a01:9980::,2a01:9980:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:99a0::,2a01:99a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:99e0::,2a01:99e0:ffff:ffff:ffff:ffff:ffff:ffff,KZ
+2a01:9a00::,2a01:9a00:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:9a20::,2a01:9a20:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a01:9a40::,2a01:9a40:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:9a60::,2a01:9a60:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:9a80::,2a01:9a80:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:9aa0::,2a01:9aa0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:9ac0::,2a01:9ac0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:9ae0::,2a01:9ae0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:9b00::,2a01:9b00:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a01:9b20::,2a01:9b20:ffff:ffff:ffff:ffff:ffff:ffff,KW
+2a01:9b40::,2a01:9b40:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:9b60::,2a01:9b60:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:9b80::,2a01:9b80:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a01:9ba0::,2a01:9ba0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:9bc0::,2a01:9bc7:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a01:9be0::,2a01:9be0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:9c00::,2a01:9c00:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:9c20::,2a01:9c20:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a01:9c40::,2a01:9c41:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:9c60::,2a01:9c60:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a01:9c80::,2a01:9c80:ffff:ffff:ffff:ffff:ffff:ffff,GE
+2a01:9ca0::,2a01:9ca0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:9cc0::,2a01:9cc0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:9ce0::,2a01:9ce0:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a01:9d00::,2a01:9d00:ffff:ffff:ffff:ffff:ffff:ffff,KG
+2a01:9d20::,2a01:9d20:ffff:ffff:ffff:ffff:ffff:ffff,AL
+2a01:9d40::,2a01:9d40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:9d60::,2a01:9d60:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:9d80::,2a01:9d80:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:9da0::,2a01:9da0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:9dc0::,2a01:9dc0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:9de0::,2a01:9de0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:9e00::,2a01:9e07:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:9e20::,2a01:9e20:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:9e40::,2a01:9e40:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a01:9e60::,2a01:9e60:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:9e80::,2a01:9e80:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:9ea0::,2a01:9ea0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a01:9ec0::,2a01:9ec7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:9f00::,2a01:9f00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:9f20::,2a01:9f20:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:9f40::,2a01:9f40:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:9f60::,2a01:9f60:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:9f80::,2a01:9f80:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a01:9fa0::,2a01:9fa0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:9fc0::,2a01:9fc0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:9fe0::,2a01:9fe0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:a000::,2a01:a000:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:a020::,2a01:a020:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:a040::,2a01:a040:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:a060::,2a01:a060:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:a080::,2a01:a080:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:a0a0::,2a01:a0a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:a0c0::,2a01:a0c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:a0e0::,2a01:a0e0:ffff:ffff:ffff:ffff:ffff:ffff,GE
+2a01:a100::,2a01:a100:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:a120::,2a01:a120:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a01:a160::,2a01:a160:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:a180::,2a01:a180:ffff:ffff:ffff:ffff:ffff:ffff,MK
+2a01:a1a0::,2a01:a1a0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:a1c0::,2a01:a1c0:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a01:a1e0::,2a01:a1e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:a200::,2a01:a200:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:a220::,2a01:a220:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:a240::,2a01:a240:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a01:a260::,2a01:a260:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:a280::,2a01:a280:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:a2a0::,2a01:a2a0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:a2c0::,2a01:a2c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:a2e0::,2a01:a2e0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:a300::,2a01:a300:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a01:a320::,2a01:a320:ffff:ffff:ffff:ffff:ffff:ffff,MD
+2a01:a340::,2a01:a340:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:a360::,2a01:a360:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:a380::,2a01:a380:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:a3a0::,2a01:a3a0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a01:a3c0::,2a01:a3c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:a3e0::,2a01:a3e0:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a01:a400::,2a01:a400:ffff:ffff:ffff:ffff:ffff:ffff,JE
+2a01:a420::,2a01:a420:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a01:a440::,2a01:a440:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:a460::,2a01:a460:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:a480::,2a01:a480:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:a4a0::,2a01:a4a0:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a01:a4c0::,2a01:a4c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:a4e0::,2a01:a4e0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:a500::,2a01:a500:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:a520::,2a01:a520:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a01:a540::,2a01:a540:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a01:a560::,2a01:a560:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:a580::,2a01:a580:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:a5a0::,2a01:a5a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:a5c0::,2a01:a5c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:a5e0::,2a01:a5e0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:a600::,2a01:a600:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:a620::,2a01:a620:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:a640::,2a01:a640:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:a660::,2a01:a660:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a01:a680::,2a01:a680:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:a6a0::,2a01:a6a0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:a6c0::,2a01:a6c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:a6e0::,2a01:a6e0:ffff:ffff:ffff:ffff:ffff:ffff,BA
+2a01:a700::,2a01:a707:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:a740::,2a01:a740:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:a760::,2a01:a760:ffff:ffff:ffff:ffff:ffff:ffff,HR
+2a01:a780::,2a01:a780:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:a7a0::,2a01:a7a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:a7c0::,2a01:a7c0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:a7e0::,2a01:a7e0:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a01:a800::,2a01:a800:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a01:a820::,2a01:a820:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:a840::,2a01:a840:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a01:a860::,2a01:a860:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:a880::,2a01:a880:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a01:a8a0::,2a01:a8a0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:a8c0::,2a01:a8c0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:a8e0::,2a01:a8e0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:a900::,2a01:a900:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:a920::,2a01:a920:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:a940::,2a01:a940:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:a960::,2a01:a960:ffff:ffff:ffff:ffff:ffff:ffff,AL
+2a01:a980::,2a01:a980:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:a9a0::,2a01:a9a0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:a9c0::,2a01:a9c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:a9e0::,2a01:a9e0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2a01:aa00::,2a01:aa00:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a01:aa20::,2a01:aa20:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a01:aa40::,2a01:aa40:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:aa60::,2a01:aa60:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:aa80::,2a01:aa80:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:aaa0::,2a01:aaa0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:aac0::,2a01:aac0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a01:aae0::,2a01:aae0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:ab00::,2a01:ab00:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:ab20::,2a01:ab20:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:ab40::,2a01:ab40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:aba0::,2a01:aba0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:abc0::,2a01:abc0:ffff:ffff:ffff:ffff:ffff:ffff,MT
+2a01:abe0::,2a01:abe0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:ac00::,2a01:ac00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:ac20::,2a01:ac20:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:ac40::,2a01:ac40:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:ac60::,2a01:ac60:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a01:ac80::,2a01:ac80:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a01:aca0::,2a01:aca0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:acc0::,2a01:acc0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:ace0::,2a01:ace0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:ad00::,2a01:ad00:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:ad20::,2a01:ad20:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:ad40::,2a01:ad40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:ad60::,2a01:ad60:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a01:ad80::,2a01:ad80:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a01:ada0::,2a01:ada0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:adc0::,2a01:adc0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:ade0::,2a01:ade0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:ae00::,2a01:ae00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:ae20::,2a01:ae20:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a01:ae40::,2a01:ae40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:ae60::,2a01:ae60:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:ae80::,2a01:ae80:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:aea0::,2a01:aea0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a01:aec0::,2a01:aec0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:aee0::,2a01:aee0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a01:af00::,2a01:af00:ffff:ffff:ffff:ffff:ffff:ffff,KZ
+2a01:af20::,2a01:af20:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a01:af40::,2a01:af40:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:af60::,2a01:af60:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:af80::,2a01:af80:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a01:afa0::,2a01:afa0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a01:afc0::,2a01:afc0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:afe0::,2a01:afe0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a01:b000::,2a01:b000:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:b020::,2a01:b020:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a01:b040::,2a01:b040:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:b060::,2a01:b060:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:b080::,2a01:b080:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:b0a0::,2a01:b0a0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2a01:b0c0::,2a01:b0c0:ffff:ffff:ffff:ffff:ffff:ffff,KZ
+2a01:b0e0::,2a01:b0e0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:b100::,2a01:b100:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:b120::,2a01:b120:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:b140::,2a01:b140:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:b160::,2a01:b160:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:b180::,2a01:b180:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:b1a0::,2a01:b1a0:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:b1c0::,2a01:b1c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:b200::,2a01:b200:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a01:b220::,2a01:b220:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:b240::,2a01:b240:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:b260::,2a01:b260:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:b280::,2a01:b280:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:b2a0::,2a01:b2a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:b2c0::,2a01:b2c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:b2e0::,2a01:b2e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:b300::,2a01:b307:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:b340::,2a01:b340:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:b360::,2a01:b360:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:b380::,2a01:b380:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:b3a0::,2a01:b3a0:ffff:ffff:ffff:ffff:ffff:ffff,AE
+2a01:b3c0::,2a01:b3c0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:b3e0::,2a01:b3e0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:b400::,2a01:b400:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:b420::,2a01:b420:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:b440::,2a01:b440:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a01:b460::,2a01:b460:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:b480::,2a01:b480:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a01:b4a0::,2a01:b4a0:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a01:b4c0::,2a01:b4c0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:b4e0::,2a01:b4e0:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a01:b500::,2a01:b500:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a01:b520::,2a01:b520:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:b540::,2a01:b547:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:b580::,2a01:b580:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:b5a0::,2a01:b5a0:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a01:b5c0::,2a01:b5c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:b5e0::,2a01:b5e0:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a01:b600::,2a01:b600:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:b620::,2a01:b620:ffff:ffff:ffff:ffff:ffff:ffff,GE
+2a01:b640::,2a01:b640:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:b660::,2a01:b660:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:b680::,2a01:b680:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:b6a0::,2a01:b6a0:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a01:b6c0::,2a01:b6c7:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:b700::,2a01:b700:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:b720::,2a01:b720:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:b740::,2a01:b740:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:b760::,2a01:b760:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:b780::,2a01:b780:ffff:ffff:ffff:ffff:ffff:ffff,MK
+2a01:b7a0::,2a01:b7a0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:b7c0::,2a01:b7c0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:b7e0::,2a01:b7e0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:b800::,2a01:b800:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a01:b820::,2a01:b820:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:b840::,2a01:b840:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:b860::,2a01:b860:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:b880::,2a01:b880:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:b8a0::,2a01:b8a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:b8c0::,2a01:b8c0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a01:b8e0::,2a01:b8e0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:b900::,2a01:b900:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:b920::,2a01:b920:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:b940::,2a01:b940:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:b960::,2a01:b960:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:b980::,2a01:b980:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:b9a0::,2a01:b9a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:b9c0::,2a01:b9c0:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a01:b9e0::,2a01:b9e0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:ba00::,2a01:ba00:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a01:ba20::,2a01:ba20:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:ba40::,2a01:ba40:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:ba60::,2a01:ba60:ffff:ffff:ffff:ffff:ffff:ffff,PS
+2a01:ba80::,2a01:ba80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:baa0::,2a01:baa0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:bac0::,2a01:bac0:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a01:bae0::,2a01:bae0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:bb20::,2a01:bb20:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:bb40::,2a01:bb40:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a01:bb60::,2a01:bb60:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:bb80::,2a01:bb80:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:bba0::,2a01:bba0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a01:bbc0::,2a01:bbc0:ffff:ffff:ffff:ffff:ffff:ffff,AM
+2a01:bbe0::,2a01:bbe0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:bc00::,2a01:bc07:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:bc40::,2a01:bc40:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:bc60::,2a01:bc60:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:bca0::,2a01:bca0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:bcc0::,2a01:bcc0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:bce0::,2a01:bce0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:bd00::,2a01:bd00:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:bd20::,2a01:bd20:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:bd40::,2a01:bd40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:bd60::,2a01:bd60:ffff:ffff:ffff:ffff:ffff:ffff,SY
+2a01:bd80::,2a01:bd80:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a01:bda0::,2a01:bda0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:bdc0::,2a01:bdc0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:bde0::,2a01:bde0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:be00::,2a01:be00:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a01:be40::,2a01:be40:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:be60::,2a01:be60:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:be80::,2a01:be80:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:bea0::,2a01:bea0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:bec0::,2a01:bec0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:bee0::,2a01:bee0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:bf20::,2a01:bf20:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a01:bf40::,2a01:bf40:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:bf60::,2a01:bf60:ffff:ffff:ffff:ffff:ffff:ffff,US
+2a01:bf80::,2a01:bf80:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a01:bfa0::,2a01:bfa0:ffff:ffff:ffff:ffff:ffff:ffff,KG
+2a01:bfc0::,2a01:bfc0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:bfe0::,2a01:bfe0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:c000::,2a01:dfff:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02::,2a02::ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a02:10::,2a02:17:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:18::,2a02:18:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:20::,2a02:20:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:28::,2a02:28:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:30::,2a02:30:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:38::,2a02:38:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:40::,2a02:40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:48::,2a02:48:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a02:50::,2a02:50:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:58::,2a02:58:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:60::,2a02:67:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:68::,2a02:68:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:70::,2a02:70:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:78::,2a02:78:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:80::,2a02:80:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:88::,2a02:88:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a02:90::,2a02:97:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a02:98::,2a02:98:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:a0::,2a02:a0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:a8::,2a02:a8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:b0::,2a02:b0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:b8::,2a02:b8:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a02:c0::,2a02:c0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:c8::,2a02:c8:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:d0::,2a02:d0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:d8::,2a02:d8:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:e0::,2a02:e0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:e8::,2a02:e8:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a02:f0::,2a02:f0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:f8::,2a02:f8:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:100::,2a02:100:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:108::,2a02:10f:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:110::,2a02:110:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:118::,2a02:118:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a02:120::,2a02:120:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:128::,2a02:128:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:130::,2a02:130:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a02:138::,2a02:138:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a02:140::,2a02:140:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a02:148::,2a02:14f:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a02:150::,2a02:150:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:158::,2a02:158:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:160::,2a02:160:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:168::,2a02:16b:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:170::,2a02:170:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:178::,2a02:178:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:180::,2a02:180:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:188::,2a02:18f:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:190::,2a02:190:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:198::,2a02:198:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a02:1a0::,2a02:1a7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:1a8::,2a02:1a8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:1b8::,2a02:1b8:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:1c0::,2a02:1c0:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a02:1c8::,2a02:1c8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:1d0::,2a02:1d0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:1d8::,2a02:1d8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:1e0::,2a02:1e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:1e8::,2a02:1e8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:1f0::,2a02:1f0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:1f8::,2a02:1f8:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:200::,2a02:200:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:208::,2a02:208:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:210::,2a02:210:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:218::,2a02:218:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:220::,2a02:220:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a02:228::,2a02:22f:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:230::,2a02:230:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:238::,2a02:238:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:240::,2a02:240:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:248::,2a02:248:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:250::,2a02:250:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:258::,2a02:258:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:260::,2a02:260:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:268::,2a02:268:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:270::,2a02:270:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:278::,2a02:278:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a02:280::,2a02:280:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:288::,2a02:290:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:298::,2a02:298:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:2a0::,2a02:2a0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:2a8::,2a02:2a8:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:2b0::,2a02:2b0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:2b8::,2a02:2b8:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:2c0::,2a02:2c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2c8::,2a02:2c8:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:2d0::,2a02:2d0:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a02:2d8::,2a02:2d8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:2e0::,2a02:2e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2e8::,2a02:2e8:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:2f0::,2a02:2f7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2f8::,2a02:2f8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:300::,2a02:300:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:308::,2a02:308:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:310::,2a02:310:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:318::,2a02:318:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:320::,2a02:320:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:328::,2a02:328:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:330::,2a02:330:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:338::,2a02:338:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:340::,2a02:340:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:348::,2a02:348:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:350::,2a02:350:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:358::,2a02:358:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:360::,2a02:360:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:368::,2a02:368:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:370::,2a02:370:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:380::,2a02:381:ffff:ffff:ffff:ffff:ffff:ffff,LI
+2a02:388::,2a02:388:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:390::,2a02:390:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:398::,2a02:398:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:3a0::,2a02:3a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:3a8::,2a02:3a8:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a02:3b0::,2a02:3b0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:3b8::,2a02:3b8:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:3c0::,2a02:3c0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:3c8::,2a02:3c8:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a02:3d0::,2a02:3d0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2a02:3d8::,2a02:3d8:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a02:3e0::,2a02:3e0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:3e8::,2a02:3e8:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:3f0::,2a02:3f0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:3f8::,2a02:3f8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:400::,2a02:400:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:408::,2a02:408:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:410::,2a02:410:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:418::,2a02:41f:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:420::,2a02:420:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:428::,2a02:428:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:430::,2a02:430:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:438::,2a02:438:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:440::,2a02:440:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:448::,2a02:448:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:450::,2a02:450:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:458::,2a02:458:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:460::,2a02:460:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:468::,2a02:468:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:470::,2a02:470:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:478::,2a02:478:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:480::,2a02:480:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:488::,2a02:488:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:490::,2a02:490:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:498::,2a02:498:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:4a0::,2a02:4a0:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:4a8::,2a02:4a8:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:4b0::,2a02:4b0:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:4b8::,2a02:4c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:4c8::,2a02:4c8:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a02:4d0::,2a02:4d0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:4d8::,2a02:4d8:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a02:4e0::,2a02:4e0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:4e8::,2a02:4e8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:4f0::,2a02:4f0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:4f8::,2a02:4f8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:500::,2a02:500:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a02:508::,2a02:508:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:518::,2a02:518:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:520::,2a02:520:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:530::,2a02:530:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:538::,2a02:538:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a02:540::,2a02:540:ffff:ffff:ffff:ffff:ffff:ffff,CY
+2a02:548::,2a02:548:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:550::,2a02:550:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:558::,2a02:558:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a02:560::,2a02:560:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:568::,2a02:568:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:570::,2a02:570:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:578::,2a02:578:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:580::,2a02:587:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a02:588::,2a02:588:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:590::,2a02:590:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:598::,2a02:598:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:5a0::,2a02:5a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:5b0::,2a02:5b0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:5b8::,2a02:5b8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:5c0::,2a02:5c0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:5c8::,2a02:5c8:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a02:5d0::,2a02:5d0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:5d8::,2a02:5d8:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:5e0::,2a02:5e0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:5f0::,2a02:5f0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:5f8::,2a02:5f8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:600::,2a02:600:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:608::,2a02:608:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:610::,2a02:610:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a02:618::,2a02:618:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:620::,2a02:620:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:628::,2a02:628:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a02:630::,2a02:630:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:638::,2a02:638:ffff:ffff:ffff:ffff:ffff:ffff,GI
+2a02:640::,2a02:640:ffff:ffff:ffff:ffff:ffff:ffff,CY
+2a02:648::,2a02:648:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:650::,2a02:650:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:658::,2a02:658:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:660::,2a02:660:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a02:668::,2a02:668:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:670::,2a02:670:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:678::,2a02:678:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a02:680::,2a02:680:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:688::,2a02:688:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:690::,2a02:690:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:698::,2a02:698:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:6a0::,2a02:6a0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:6a8::,2a02:6a8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:6b0::,2a02:6b0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:6b8::,2a02:6b8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:6c0::,2a02:6c0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:6c8::,2a02:6c8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:6d0::,2a02:6d0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:6d8::,2a02:6d8:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:6e0::,2a02:6e0:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:6e8::,2a02:6e8:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:6f0::,2a02:6f0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:6f8::,2a02:6f8:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:700::,2a02:700:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:708::,2a02:708:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:710::,2a02:710:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:718::,2a02:718:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:720::,2a02:720:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:728::,2a02:728:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:730::,2a02:730:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a02:738::,2a02:738:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a02:740::,2a02:740:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a02:748::,2a02:748:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:750::,2a02:750:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:758::,2a02:758:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:760::,2a02:760:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:768::,2a02:768:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:770::,2a02:770:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a02:778::,2a02:778:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:780::,2a02:787:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a02:788::,2a02:788:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:790::,2a02:790:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:798::,2a02:798:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:7a0::,2a02:7a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:7a8::,2a02:7a8:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a02:7b0::,2a02:7b0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:7b8::,2a02:7b8:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:7c0::,2a02:7c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:7c8::,2a02:7c8:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:7d0::,2a02:7d0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:7d8::,2a02:7d8:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:7e0::,2a02:7e0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:7e8::,2a02:7e8:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:7f0::,2a02:7f0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:7f8::,2a02:7f8:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a02:800::,2a02:807:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a02:808::,2a02:808:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a02:810::,2a02:810:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:818::,2a02:81f:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a02:820::,2a02:820:ffff:ffff:ffff:ffff:ffff:ffff,KG
+2a02:828::,2a02:828:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:830::,2a02:830:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:838::,2a02:838:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:840::,2a02:840:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a02:848::,2a02:848:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:850::,2a02:850:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:858::,2a02:858:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a02:860::,2a02:860:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:868::,2a02:868:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:870::,2a02:870:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a02:878::,2a02:878:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:880::,2a02:880:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:888::,2a02:888:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a02:890::,2a02:890:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:898::,2a02:898:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:8a0::,2a02:8a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:8a8::,2a02:8a8:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:8b0::,2a02:8b0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:8b8::,2a02:8b8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:8c0::,2a02:8c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:8c8::,2a02:8c8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:8d0::,2a02:8d1:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:8d8::,2a02:8d8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:8e0::,2a02:8e0:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:8e8::,2a02:8e8:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:8f0::,2a02:8f0:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a02:8f8::,2a02:8f8:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:900::,2a02:9ff:ffff:ffff:ffff:ffff:ffff:ffff,DJ
+2a02:a00::,2a02:a00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:a08::,2a02:a08:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:a10::,2a02:a10:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:a18::,2a02:a18:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:a20::,2a02:a20:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:a28::,2a02:a28:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:a30::,2a02:a30:ffff:ffff:ffff:ffff:ffff:ffff,MD
+2a02:a38::,2a02:a38:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:a40::,2a02:a40:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:a48::,2a02:a48:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:a50::,2a02:a50:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a02:a58::,2a02:a58:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a02:a60::,2a02:a60:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:a68::,2a02:a68:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a02:a70::,2a02:a70:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:a78::,2a02:a78:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:a80::,2a02:a80:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:a88::,2a02:a88:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a02:a90::,2a02:a90:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:a98::,2a02:a98:ffff:ffff:ffff:ffff:ffff:ffff,UZ
+2a02:aa0::,2a02:aa0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:aa8::,2a02:aa9:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:ab0::,2a02:ab0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:ab8::,2a02:ab8:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:ac0::,2a02:ac0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:ac8::,2a02:ac8:ffff:ffff:ffff:ffff:ffff:ffff,HR
+2a02:ad0::,2a02:ad7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:ad8::,2a02:ad8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:ae0::,2a02:ae0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:ae8::,2a02:aef:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:af0::,2a02:af0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:af8::,2a02:af8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:b00::,2a02:b00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:b08::,2a02:b08:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:b10::,2a02:b10:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:b18::,2a02:b18:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:b20::,2a02:b20:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:b28::,2a02:b28:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:b30::,2a02:b30:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:b38::,2a02:b38:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:b48::,2a02:b48:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:b50::,2a02:b50:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:b58::,2a02:b58:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a02:b60::,2a02:b60:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a02:b70::,2a02:b70:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:b78::,2a02:b78:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:b80::,2a02:b87:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:b88::,2a02:b88:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:b90::,2a02:b90:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:b98::,2a02:b98:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:ba0::,2a02:ba0:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a02:ba8::,2a02:ba8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:bb0::,2a02:bb0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:bb8::,2a02:bb8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:bc0::,2a02:bc0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:bc8::,2a02:bc8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:bd0::,2a02:bd0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:bd8::,2a02:bd8:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:be0::,2a02:be0:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a02:be8::,2a02:be8:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:bf0::,2a02:bf0:ffff:ffff:ffff:ffff:ffff:ffff,BY
+2a02:bf8::,2a02:bf8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:c00::,2a02:c00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:c08::,2a02:c08:ffff:ffff:ffff:ffff:ffff:ffff,KW
+2a02:c10::,2a02:c10:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:c18::,2a02:c18:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:c20::,2a02:c20:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:c28::,2a02:c2f:ffff:ffff:ffff:ffff:ffff:ffff,JE
+2a02:c30::,2a02:c30:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:c38::,2a02:c38:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:c40::,2a02:c47:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:c48::,2a02:c48:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:c50::,2a02:c50:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:c58::,2a02:c58:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:c60::,2a02:c60:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:c68::,2a02:c68:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:c70::,2a02:c70:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:c78::,2a02:c7f:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:c80::,2a02:c80:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a02:c88::,2a02:c88:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:c90::,2a02:c90:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:c98::,2a02:c98:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:ca0::,2a02:ca0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:ca8::,2a02:ca8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:cb0::,2a02:cb0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:cc0::,2a02:cc0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:cc8::,2a02:cc9:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:cd0::,2a02:cd0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:cd8::,2a02:cd8:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:ce0::,2a02:ce0:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a02:ce8::,2a02:ce8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:cf0::,2a02:cf0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:d00::,2a02:d00:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:d08::,2a02:d08:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:d10::,2a02:d10:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a02:d18::,2a02:d18:ffff:ffff:ffff:ffff:ffff:ffff,AM
+2a02:d20::,2a02:d20:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:d28::,2a02:d28:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:d30::,2a02:d30:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:d38::,2a02:d3f:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:d40::,2a02:d40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:d48::,2a02:d48:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:d50::,2a02:d50:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:d58::,2a02:d5f:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:d60::,2a02:d60:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:d68::,2a02:d6f:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a02:d70::,2a02:d70:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a02:d78::,2a02:d78:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:d80::,2a02:d80:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a02:d88::,2a02:d88:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:d90::,2a02:d90:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a02:d98::,2a02:d98:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:da8::,2a02:da8:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:db0::,2a02:db0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:db8::,2a02:db8:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:dc0::,2a02:dc0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:dc8::,2a02:dc8:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:dd0::,2a02:dd0:ffff:ffff:ffff:ffff:ffff:ffff,MT
+2a02:dd8::,2a02:ddf:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a02:de0::,2a02:de0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:de8::,2a02:de8:ffff:ffff:ffff:ffff:ffff:ffff,CY
+2a02:df0::,2a02:df0:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a02:df8::,2a02:df8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:e00::,2a02:e00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:e08::,2a02:e08:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:e10::,2a02:e10:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:e20::,2a02:e27:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a02:e28::,2a02:e28:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:e30::,2a02:e30:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:e38::,2a02:e38:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:e40::,2a02:e40:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a02:e48::,2a02:e48:ffff:ffff:ffff:ffff:ffff:ffff,MK
+2a02:e50::,2a02:e50:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:e58::,2a02:e5f:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:e60::,2a02:e60:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:e68::,2a02:e68:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:e70::,2a02:e70:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:e80::,2a02:e80:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a02:e88::,2a02:e88:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:e90::,2a02:e90:ffff:ffff:ffff:ffff:ffff:ffff,FO
+2a02:e98::,2a02:e98:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:ea0::,2a02:ea7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:ea8::,2a02:ea8:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:eb0::,2a02:eb0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:eb8::,2a02:eb8:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:ec0::,2a02:ec0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:ec8::,2a02:ec8:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:ed0::,2a02:ed0:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a02:ed8::,2a02:ed8:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:ee0::,2a02:ee0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:ef0::,2a02:ef0:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a02:ef8::,2a02:ef8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:f00::,2a02:f00:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:f08::,2a02:f08:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:f10::,2a02:f10:ffff:ffff:ffff:ffff:ffff:ffff,UZ
+2a02:f18::,2a02:f18:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:f20::,2a02:f20:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:f28::,2a02:f28:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:f30::,2a02:f30:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:f38::,2a02:f38:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:f40::,2a02:f40:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:f48::,2a02:f48:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a02:f50::,2a02:f50:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a02:f58::,2a02:f58:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:f60::,2a02:f60:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:f68::,2a02:f6f:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:f70::,2a02:f70:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:f78::,2a02:f7f:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:f80::,2a02:f80:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:f88::,2a02:f88:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a02:f90::,2a02:f90:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:f98::,2a02:f98:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:fa0::,2a02:fa0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:fa8::,2a02:fa8:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:fb0::,2a02:fb0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:fb8::,2a02:fb8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:fc0::,2a02:fc0:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a02:fc8::,2a02:fc8:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:fd0::,2a02:fd0:ffff:ffff:ffff:ffff:ffff:ffff,MD
+2a02:fd8::,2a02:fd8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:fe0::,2a02:fe7:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:fe8::,2a02:fe8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:ff0::,2a02:ff0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:ff8::,2a02:ff8:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:1000::,2a02:103f:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:1200::,2a02:12ff:ffff:ffff:ffff:ffff:ffff:ffff,CI
+2a02:1300::,2a02:1300:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a02:1308::,2a02:1308:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:1310::,2a02:1310:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:1318::,2a02:1318:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:1320::,2a02:1320:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:1328::,2a02:1328:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:1330::,2a02:1330:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:1338::,2a02:1338:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a02:1340::,2a02:1340:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:1348::,2a02:1348:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:1350::,2a02:1350:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:1358::,2a02:1358:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:1360::,2a02:1360:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:1368::,2a02:1368:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:1370::,2a02:1370:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a02:1378::,2a02:1378:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:1380::,2a02:1380:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:1388::,2a02:138f:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a02:1390::,2a02:1390:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:1398::,2a02:1398:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:13a0::,2a02:13a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:13a8::,2a02:13a8:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:13b0::,2a02:13b0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:13b8::,2a02:13b8:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:13c0::,2a02:13c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:13c8::,2a02:13c8:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a02:13d0::,2a02:13d0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:13d8::,2a02:13d8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:13e0::,2a02:13e0:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:13e8::,2a02:13e8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:13f0::,2a02:13f0:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a02:13f8::,2a02:13f8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:1400::,2a02:143f:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:1600::,2a02:1600:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a02:1608::,2a02:1608:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:1610::,2a02:1610:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:1618::,2a02:1618:ffff:ffff:ffff:ffff:ffff:ffff,MD
+2a02:1620::,2a02:1620:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:1628::,2a02:1628:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:1630::,2a02:1630:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:1638::,2a02:1638:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:1640::,2a02:1640:ffff:ffff:ffff:ffff:ffff:ffff,CY
+2a02:1648::,2a02:1648:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:1650::,2a02:1650:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a02:1658::,2a02:1658:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:1660::,2a02:1660:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:1668::,2a02:1668:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:1670::,2a02:1670:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:1678::,2a02:1678:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:1680::,2a02:1680:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:1688::,2a02:1688:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:1698::,2a02:1698:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:16a0::,2a02:16a0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:16a8::,2a02:16a8:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:16b0::,2a02:16b0:ffff:ffff:ffff:ffff:ffff:ffff,KW
+2a02:16b8::,2a02:16b8:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:16c0::,2a02:16c0:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:16c8::,2a02:16c8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:16d0::,2a02:16d0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:16d8::,2a02:16d8:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a02:16e0::,2a02:16e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:16e8::,2a02:16e8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:16f0::,2a02:16f0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:16f8::,2a02:16f8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:1700::,2a02:1700:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:1710::,2a02:1710:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:1718::,2a02:1718:ffff:ffff:ffff:ffff:ffff:ffff,AE
+2a02:1720::,2a02:1720:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:1730::,2a02:1730:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:1738::,2a02:1738:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:1740::,2a02:1740:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:1748::,2a02:1748:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:1750::,2a02:1750:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:1758::,2a02:1758:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:1760::,2a02:1760:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:1768::,2a02:1768:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:1770::,2a02:1770:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:1778::,2a02:1778:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:1780::,2a02:1780:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:1788::,2a02:1788:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:1790::,2a02:1790:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a02:1798::,2a02:179f:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:17a0::,2a02:17a0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:17a8::,2a02:17a8:ffff:ffff:ffff:ffff:ffff:ffff,BA
+2a02:17b0::,2a02:17b0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:17b8::,2a02:17b8:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:17c0::,2a02:17c0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:17c8::,2a02:17c8:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:17d0::,2a02:17d0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:17d8::,2a02:17d8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:17e0::,2a02:17e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:17e8::,2a02:17e8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:17f0::,2a02:17f0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:17f8::,2a02:17f8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:1800::,2a02:18ff:ffff:ffff:ffff:ffff:ffff:ffff,BF
+2a02:2000::,2a02:20ff:ffff:ffff:ffff:ffff:ffff:ffff,DJ
+2a02:2100::,2a02:2100:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2108::,2a02:2108:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:2110::,2a02:2110:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:2118::,2a02:211f:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:2120::,2a02:2123:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:2140::,2a02:2140:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:2148::,2a02:214f:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a02:2150::,2a02:2150:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:2158::,2a02:2158:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a02:2160::,2a02:2160:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a02:2168::,2a02:216f:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2170::,2a02:2170:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:2178::,2a02:2178:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:2180::,2a02:2180:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:2188::,2a02:2188:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:2190::,2a02:2190:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:2198::,2a02:2198:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:21a0::,2a02:21a0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:21a8::,2a02:21a8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:21b0::,2a02:21b0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:21b8::,2a02:21b8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:21c0::,2a02:21c0:ffff:ffff:ffff:ffff:ffff:ffff,BA
+2a02:21c8::,2a02:21c8:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:21d0::,2a02:21d0:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:21d8::,2a02:21d8:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:21e0::,2a02:21e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:21e8::,2a02:21e8:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:21f0::,2a02:21f0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:21f8::,2a02:21f8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:2200::,2a02:2200:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:2208::,2a02:2208:ffff:ffff:ffff:ffff:ffff:ffff,BY
+2a02:2210::,2a02:2210:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:2218::,2a02:2218:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:2220::,2a02:2220:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:2228::,2a02:2228:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2230::,2a02:2230:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a02:2240::,2a02:2240:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:2248::,2a02:2248:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a02:2250::,2a02:2250:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2258::,2a02:2258:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:2260::,2a02:2260:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2268::,2a02:2268:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:2270::,2a02:2270:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:2278::,2a02:2278:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:2280::,2a02:2280:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:2288::,2a02:2288:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:2290::,2a02:2290:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a02:2298::,2a02:2298:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a02:22a0::,2a02:22a0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:22a8::,2a02:22a8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:22b0::,2a02:22b0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:22b8::,2a02:22b8:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:22c0::,2a02:22c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:22c8::,2a02:22c8:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:22d0::,2a02:22d0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:22d8::,2a02:22d8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:22e0::,2a02:22e0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:22e8::,2a02:22e8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:22f0::,2a02:22f0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2300::,2a02:2300:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:2308::,2a02:2308:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:2310::,2a02:2310:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:2318::,2a02:2318:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:2320::,2a02:2320:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:2328::,2a02:2328:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:2330::,2a02:2330:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a02:2338::,2a02:233f:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:2340::,2a02:2340:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a02:2348::,2a02:2348:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:2350::,2a02:2350:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:2358::,2a02:2358:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:2360::,2a02:2360:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2368::,2a02:2368:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:2378::,2a02:2378:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:2380::,2a02:2380:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a02:2388::,2a02:2388:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:2390::,2a02:2390:ffff:ffff:ffff:ffff:ffff:ffff,GE
+2a02:2398::,2a02:2398:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:23a0::,2a02:23a0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:23a8::,2a02:23a8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:23b0::,2a02:23b0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:23b8::,2a02:23b8:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a02:23c0::,2a02:23c0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:23c8::,2a02:23c8:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:23d0::,2a02:23d0:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a02:23d8::,2a02:23d8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:23e0::,2a02:23e0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:23e8::,2a02:23e8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:23f0::,2a02:23f0:ffff:ffff:ffff:ffff:ffff:ffff,GE
+2a02:23f8::,2a02:23f8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2400::,2a02:2400:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:2408::,2a02:2408:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:2410::,2a02:2410:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:2420::,2a02:2420:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:2428::,2a02:2428:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:2430::,2a02:2430:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:2438::,2a02:2438:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2440::,2a02:2440:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:2448::,2a02:2448:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:2450::,2a02:2457:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2458::,2a02:2458:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:2460::,2a02:2460:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:2468::,2a02:2468:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:2470::,2a02:2477:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:2478::,2a02:2478:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2480::,2a02:2480:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2488::,2a02:2488:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2490::,2a02:2490:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:2498::,2a02:2498:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:24a0::,2a02:24a0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:24a8::,2a02:24a8:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:24b0::,2a02:24b0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:24b8::,2a02:24bf:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:24c0::,2a02:24c0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:24c8::,2a02:24c8:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a02:24d0::,2a02:24d0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:24d8::,2a02:24d8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:24e0::,2a02:24e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:24e8::,2a02:24e8:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:24f0::,2a02:24f0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:24f8::,2a02:24f8:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:2500::,2a02:2500:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:2508::,2a02:2508:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2510::,2a02:2510:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2518::,2a02:2518:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2520::,2a02:2520:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:2528::,2a02:252f:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:2530::,2a02:2530:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:2538::,2a02:2538:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:2540::,2a02:2540:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:2548::,2a02:2548:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2550::,2a02:2550:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2558::,2a02:2558:ffff:ffff:ffff:ffff:ffff:ffff,JO
+2a02:2560::,2a02:2560:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2568::,2a02:2568:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2578::,2a02:2578:ffff:ffff:ffff:ffff:ffff:ffff,BH
+2a02:2580::,2a02:2587:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:2588::,2a02:2588:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:2590::,2a02:2590:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a02:2598::,2a02:2598:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:25a0::,2a02:25a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:25a8::,2a02:25af:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:25b0::,2a02:25b0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:25b8::,2a02:25b8:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:25c0::,2a02:25c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:25c8::,2a02:25c8:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:25d0::,2a02:25d0:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a02:25d8::,2a02:25d8:ffff:ffff:ffff:ffff:ffff:ffff,JO
+2a02:25e0::,2a02:25e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:25e8::,2a02:25e8:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:25f0::,2a02:25f0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:25f8::,2a02:25f8:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a02:2600::,2a02:2600:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a02:2608::,2a02:2608:ffff:ffff:ffff:ffff:ffff:ffff,HR
+2a02:2610::,2a02:2610:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:2618::,2a02:2618:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2620::,2a02:2620:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2628::,2a02:2628:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:2630::,2a02:2630:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a02:2638::,2a02:2638:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:2640::,2a02:2647:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:2648::,2a02:2648:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2650::,2a02:2650:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2658::,2a02:2658:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:2660::,2a02:2660:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a02:2668::,2a02:2668:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2670::,2a02:2670:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:2678::,2a02:2678:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2680::,2a02:2680:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:2688::,2a02:2688:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2690::,2a02:2690:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:2698::,2a02:2698:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:26a0::,2a02:26a7:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:26a8::,2a02:26a8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:26b0::,2a02:26b0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:26b8::,2a02:26b8:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:26c0::,2a02:26c0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:26c8::,2a02:26c8:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a02:26d0::,2a02:26d0:ffff:ffff:ffff:ffff:ffff:ffff,PS
+2a02:26d8::,2a02:26d8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:26e0::,2a02:26e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:26e8::,2a02:26e8:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:26f8::,2a02:26ff:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2700::,2a02:2700:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a02:2708::,2a02:2708:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2710::,2a02:2710:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:2718::,2a02:271f:ffff:ffff:ffff:ffff:ffff:ffff,YE
+2a02:2720::,2a02:2720:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a02:2728::,2a02:2728:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:2730::,2a02:2730:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:2738::,2a02:2738:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:2740::,2a02:2740:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:2748::,2a02:2748:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2750::,2a02:2750:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:2760::,2a02:2760:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2768::,2a02:2768:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2770::,2a02:2770:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:2778::,2a02:2778:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:2780::,2a02:2780:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:2788::,2a02:2788:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:2790::,2a02:2790:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:2798::,2a02:2798:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:27a0::,2a02:27a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:27a8::,2a02:27af:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:27b0::,2a02:27b0:ffff:ffff:ffff:ffff:ffff:ffff,BA
+2a02:27b8::,2a02:27b8:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:27c0::,2a02:27c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:27c8::,2a02:27c8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:27d0::,2a02:27d0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:27d8::,2a02:27d8:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:27e0::,2a02:27e0:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a02:27e8::,2a02:27e8:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:27f0::,2a02:27f0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:27f8::,2a02:27f8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:2800::,2a02:2800:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2808::,2a02:2808:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:2810::,2a02:2810:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:2818::,2a02:2818:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:2820::,2a02:2820:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:2828::,2a02:2828:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:2830::,2a02:2830:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2838::,2a02:2838:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:2840::,2a02:2840:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2848::,2a02:2848:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:2850::,2a02:2850:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2858::,2a02:2858:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:2860::,2a02:2860:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:2868::,2a02:2868:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a02:2870::,2a02:2870:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:2878::,2a02:2878:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2880::,2a02:2880:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a02:2888::,2a02:2888:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:2890::,2a02:2890:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:2898::,2a02:2898:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:28a0::,2a02:28a0:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a02:28a8::,2a02:28a8:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:28b0::,2a02:28b7:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a02:28b8::,2a02:28bf:ffff:ffff:ffff:ffff:ffff:ffff,BA
+2a02:28c0::,2a02:28c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:28c8::,2a02:28c8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:28d0::,2a02:28d0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:28d8::,2a02:28d8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:28e0::,2a02:28e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:28e8::,2a02:28e8:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:28f0::,2a02:28f0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:28f8::,2a02:28f8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2900::,2a02:2900:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:2908::,2a02:2908:ffff:ffff:ffff:ffff:ffff:ffff,OM
+2a02:2910::,2a02:2910:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2918::,2a02:2918:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2920::,2a02:2920:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2928::,2a02:2928:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:2930::,2a02:2930:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:2938::,2a02:2938:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:2940::,2a02:2940:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2948::,2a02:2948:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:2950::,2a02:2950:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a02:2958::,2a02:2958:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2960::,2a02:2960:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:2968::,2a02:2968:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:2970::,2a02:2970:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2978::,2a02:2978:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:2980::,2a02:2980:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2988::,2a02:2988:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:2990::,2a02:2990:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:2998::,2a02:2998:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:29a0::,2a02:29a0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:29a8::,2a02:29b0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:29b8::,2a02:29b8:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:29c0::,2a02:29c0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:29c8::,2a02:29c8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:29d0::,2a02:29d0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:29d8::,2a02:29d8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:29e0::,2a02:29e0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:29e8::,2a02:29ef:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a02:29f0::,2a02:29f0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:29f8::,2a02:29f8:ffff:ffff:ffff:ffff:ffff:ffff,AM
+2a02:2a00::,2a02:2a00:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a02:2a08::,2a02:2a08:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:2a10::,2a02:2a10:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2a18::,2a02:2a18:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2a20::,2a02:2a20:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:2a28::,2a02:2a28:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2a30::,2a02:2a37:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:2a38::,2a02:2a38:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:2a40::,2a02:2a40:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:2a48::,2a02:2a48:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:2a50::,2a02:2a50:ffff:ffff:ffff:ffff:ffff:ffff,AM
+2a02:2a58::,2a02:2a58:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:2a60::,2a02:2a60:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a02:2a68::,2a02:2a68:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:2a70::,2a02:2a70:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a02:2a78::,2a02:2a78:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:2a80::,2a02:2a80:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:2a88::,2a02:2a88:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:2a90::,2a02:2a90:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a02:2a98::,2a02:2a98:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a02:2aa0::,2a02:2aa0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:2aa8::,2a02:2aa8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:2ab0::,2a02:2ab0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:2ab8::,2a02:2ab8:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:2ac0::,2a02:2ac0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:2ac8::,2a02:2ac8:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a02:2ad0::,2a02:2ad0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2ad8::,2a02:2ad8:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:2ae0::,2a02:2ae0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:2ae8::,2a02:2ae8:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:2af0::,2a02:2af0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:2af8::,2a02:2af8:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:2b00::,2a02:2b00:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:2b08::,2a02:2b08:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:2b10::,2a02:2b10:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:2b18::,2a02:2b18:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:2b20::,2a02:2b20:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a02:2b28::,2a02:2b28:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2b30::,2a02:2b30:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:2b38::,2a02:2b38:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:2b40::,2a02:2b47:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a02:2b48::,2a02:2b48:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:2b50::,2a02:2b50:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:2b58::,2a02:2b58:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:2b80::,2a02:2b80:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2b88::,2a02:2b88:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:2b90::,2a02:2b97:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:2b98::,2a02:2b98:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:2ba0::,2a02:2ba0:ffff:ffff:ffff:ffff:ffff:ffff,KW
+2a02:2ba8::,2a02:2ba8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:2bb0::,2a02:2bb0:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a02:2bb8::,2a02:2bb8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:2bc0::,2a02:2bc0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:2be0::,2a02:2be0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2c00::,2a02:2c07:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:2c40::,2a02:2c40:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:2c60::,2a02:2c60:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2c80::,2a02:2c80:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:2ca0::,2a02:2ca0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:2cc0::,2a02:2cc0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:2ce0::,2a02:2ce0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:2d00::,2a02:2d00:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:2d20::,2a02:2d20:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:2d40::,2a02:2d40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2d60::,2a02:2d60:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:2d80::,2a02:2d80:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2da0::,2a02:2da0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:2dc0::,2a02:2dc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2de0::,2a02:2de0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:2e00::,2a02:2e1f:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:2f00::,2a02:2f0f:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a02:2f80::,2a02:2f80:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:2fa0::,2a02:2fa0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:2fc0::,2a02:2fc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2fe0::,2a02:2fe0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:3000::,2a02:31ff:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:4000::,2a02:4000:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:4020::,2a02:4020:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:4040::,2a02:4040:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:4060::,2a02:4060:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:4080::,2a02:4080:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a02:40a0::,2a02:40a0:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a02:40c0::,2a02:40c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:40e0::,2a02:40e0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:4100::,2a02:4100:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:4120::,2a02:4120:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:4140::,2a02:4140:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:4160::,2a02:4160:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:4180::,2a02:4180:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a02:41a0::,2a02:41a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:41c0::,2a02:41c0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:41e0::,2a02:41e0:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a02:4200::,2a02:4200:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:4220::,2a02:4220:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:4240::,2a02:4240:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:4260::,2a02:4260:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:4280::,2a02:4280:ffff:ffff:ffff:ffff:ffff:ffff,ME
+2a02:42a0::,2a02:42a0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:42c0::,2a02:42c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:42e0::,2a02:42e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:4300::,2a02:4300:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:4320::,2a02:4320:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a02:4340::,2a02:4340:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:4360::,2a02:4360:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:43a0::,2a02:43a0:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a02:43c0::,2a02:43c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:43e0::,2a02:43e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:4420::,2a02:4420:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:4440::,2a02:4440:ffff:ffff:ffff:ffff:ffff:ffff,QA
+2a02:4460::,2a02:4460:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:4480::,2a02:4480:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:44a0::,2a02:44a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:44c0::,2a02:44c0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:44e0::,2a02:44e0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:4500::,2a02:4500:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:4520::,2a02:4520:ffff:ffff:ffff:ffff:ffff:ffff,SY
+2a02:4540::,2a02:4540:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:4560::,2a02:4560:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:45a0::,2a02:45a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:45c0::,2a02:45c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:45e0::,2a02:45e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:4600::,2a02:4600:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:4620::,2a02:4620:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:4640::,2a02:4640:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:4660::,2a02:4660:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:4680::,2a02:4680:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:46a0::,2a02:46a0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:46c0::,2a02:46c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:46e0::,2a02:46e0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:4700::,2a02:4700:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:4720::,2a02:4720:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:4740::,2a02:4740:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:4760::,2a02:4760:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:4780::,2a02:4780:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a02:47a0::,2a02:47a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:47c0::,2a02:47c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:47e0::,2a02:47e0:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:4800::,2a02:4800:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a02:4820::,2a02:4820:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a02:4840::,2a02:4840:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a02:4860::,2a02:4860:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:4880::,2a02:4880:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a02:48a0::,2a02:48a0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:48e0::,2a02:48e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:4900::,2a02:4907:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a02:4940::,2a02:4940:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a02:4960::,2a02:4960:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:4980::,2a02:4980:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:49a0::,2a02:49a0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:49c0::,2a02:49c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:49e0::,2a02:49e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:4a00::,2a02:4a00:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:4a20::,2a02:4a20:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:4a40::,2a02:4a40:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:4a60::,2a02:4a60:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:4aa0::,2a02:4aa0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:4ac0::,2a02:4ac0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:4ae0::,2a02:4ae0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:4b00::,2a02:4b07:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:4b40::,2a02:4b40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:4b60::,2a02:4b60:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:4b80::,2a02:4b80:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:4ba0::,2a02:4ba0:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a02:4bc0::,2a02:4bc0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:4be0::,2a02:4be0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:4c00::,2a02:4c00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:4c20::,2a02:4c20:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:4c40::,2a02:4c47:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:4c80::,2a02:4c80:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:4ca0::,2a02:4ca0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:4cc0::,2a02:4cc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:4ce0::,2a02:4ce0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:4d00::,2a02:4d00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:4d20::,2a02:4d20:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:4d40::,2a02:4d40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:4d60::,2a02:4d60:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a02:4d80::,2a02:4d80:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:4da0::,2a02:4da0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:4dc0::,2a02:4dc0:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a02:4de0::,2a02:4de0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:4e20::,2a02:4e20:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:4e40::,2a02:4e40:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:4e60::,2a02:4e60:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:4ea0::,2a02:4ea0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:4ec0::,2a02:4ec0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:4ee0::,2a02:4ee0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:4f00::,2a02:4f00:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a02:4f20::,2a02:4f20:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:4f40::,2a02:4f40:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:4f60::,2a02:4f60:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:4f80::,2a02:4f80:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:4fa0::,2a02:4fa0:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a02:4fc0::,2a02:4fc0:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a02:4fe0::,2a02:4fe0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:5000::,2a02:5000:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:5020::,2a02:5020:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:5040::,2a02:5040:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a02:5060::,2a02:5060:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:5080::,2a02:5080:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a02:50a0::,2a02:50a0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:50c0::,2a02:50c0:ffff:ffff:ffff:ffff:ffff:ffff,KZ
+2a02:50e0::,2a02:50e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:5100::,2a02:5100:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:5120::,2a02:5120:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:5140::,2a02:5140:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:5160::,2a02:5160:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:5180::,2a02:5180:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:51a0::,2a02:51a0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:51c0::,2a02:51c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:51e0::,2a02:51e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:5200::,2a02:5200:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:5220::,2a02:5220:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a02:5260::,2a02:5260:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:5280::,2a02:5280:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:52a0::,2a02:52a0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:52e0::,2a02:52e0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:5300::,2a02:5300:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:5320::,2a02:5320:ffff:ffff:ffff:ffff:ffff:ffff,MT
+2a02:5340::,2a02:5340:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:5360::,2a02:5360:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:5380::,2a02:5380:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:53a0::,2a02:53a0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:53c0::,2a02:53c0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:53e0::,2a02:53e0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:5400::,2a02:5400:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:5420::,2a02:5420:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:5440::,2a02:5440:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a02:5460::,2a02:5460:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:5480::,2a02:5480:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:54a0::,2a02:54a0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:54c0::,2a02:54c0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:54e0::,2a02:54e0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:5500::,2a02:5500:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:5520::,2a02:5520:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:5540::,2a02:5540:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:5560::,2a02:5560:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:5580::,2a02:5580:ffff:ffff:ffff:ffff:ffff:ffff,MK
+2a02:55a0::,2a02:55a0:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a02:55c0::,2a02:55c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:55e0::,2a02:55e0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:5600::,2a02:5600:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:5620::,2a02:5620:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:5640::,2a02:5640:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:5660::,2a02:5660:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:5680::,2a02:5680:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:56a0::,2a02:56a0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:56c0::,2a02:56c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:56e0::,2a02:56e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:5720::,2a02:5720:ffff:ffff:ffff:ffff:ffff:ffff,MK
+2a02:5740::,2a02:5740:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a02:5760::,2a02:5760:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:5780::,2a02:5780:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:57a0::,2a02:57a0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:57c0::,2a02:57c0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:57e0::,2a02:57e0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:5800::,2a02:5800:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:5820::,2a02:5820:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:5840::,2a02:5840:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:5860::,2a02:5860:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:5880::,2a02:5880:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:58a0::,2a02:58a0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:58c0::,2a02:58c0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:58e0::,2a02:58e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:5900::,2a02:5900:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:5920::,2a02:5920:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:5940::,2a02:5940:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:5960::,2a02:5960:ffff:ffff:ffff:ffff:ffff:ffff,AM
+2a02:5980::,2a02:5980:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a02:59a0::,2a02:59a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:59c0::,2a02:59c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:59e0::,2a02:59e0:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a02:5a20::,2a02:5a20:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:5a40::,2a02:5a40:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:5a60::,2a02:5a60:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:5a80::,2a02:5a87:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:5aa0::,2a02:5aa0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:5ac0::,2a02:5ac0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:5ae0::,2a02:5ae0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:5b00::,2a02:5b00:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:5b20::,2a02:5b20:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a02:5b40::,2a02:5b40:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:5b60::,2a02:5b60:ffff:ffff:ffff:ffff:ffff:ffff,JO
+2a02:5b80::,2a02:5b80:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a02:5ba0::,2a02:5ba0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:5bc0::,2a02:5bc0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:5be0::,2a02:5be0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:5c20::,2a02:5c20:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:5c40::,2a02:5c40:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:5c60::,2a02:5c60:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:5ca0::,2a02:5ca0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:5cc0::,2a02:5cc0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:5ce0::,2a02:5ce0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:5d00::,2a02:5d00:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:5d20::,2a02:5d20:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:5d40::,2a02:5d40:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:5d60::,2a02:5d60:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:5d80::,2a02:5d80:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:5da0::,2a02:5da0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:5dc0::,2a02:5dc0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:5de0::,2a02:5de0:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a02:5e00::,2a02:5e00:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a02:5e40::,2a02:5e40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:5e60::,2a02:5e60:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:5e80::,2a02:5e80:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:5ea0::,2a02:5ea0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:5ec0::,2a02:5ec0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:5ee0::,2a02:5ee0:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a02:5f00::,2a02:5f00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:5f20::,2a02:5f20:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:5f40::,2a02:5f40:ffff:ffff:ffff:ffff:ffff:ffff,HR
+2a02:5f60::,2a02:5f60:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:5f80::,2a02:5f80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:5fa0::,2a02:5fa0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:5fc0::,2a02:5fc0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:5fe0::,2a02:5fe0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:6000::,2a02:6000:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:6020::,2a02:6020:ffff:ffff:ffff:ffff:ffff:ffff,BA
+2a02:6040::,2a02:6040:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:6060::,2a02:6060:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:60a0::,2a02:60a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:60c0::,2a02:60c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:60e0::,2a02:60e0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:6100::,2a02:6100:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:6120::,2a02:6120:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:6140::,2a02:6140:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:6160::,2a02:6160:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:6180::,2a02:6180:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:61a0::,2a02:61a0:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a02:61c0::,2a02:61c0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:61e0::,2a02:61e0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:6200::,2a02:6207:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:6240::,2a02:6240:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:6260::,2a02:6260:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:6280::,2a02:6280:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:62a0::,2a02:62a0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:62c0::,2a02:62c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:62e0::,2a02:62e0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:6300::,2a02:6300:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a02:6320::,2a02:6320:ffff:ffff:ffff:ffff:ffff:ffff,HR
+2a02:6340::,2a02:6340:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:6360::,2a02:6360:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:6380::,2a02:6380:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a02:63a0::,2a02:63a0:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a02:63c0::,2a02:63c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:63e0::,2a02:63e0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:6400::,2a02:6400:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:6420::,2a02:6420:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:6440::,2a02:6440:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:6460::,2a02:6460:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:6480::,2a02:6480:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:64a0::,2a02:64a0:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a02:64c0::,2a02:64c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:64e0::,2a02:64e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:6500::,2a02:6500:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:6520::,2a02:6520:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:6540::,2a02:6540:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:6560::,2a02:6560:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:6580::,2a02:6580:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a02:65a0::,2a02:65a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:65c0::,2a02:65c0:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a02:65e0::,2a02:65e0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:6600::,2a02:6600:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:6620::,2a02:6620:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:6640::,2a02:6640:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:6660::,2a02:6660:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:6680::,2a02:6680:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a02:66a0::,2a02:66a0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:66c0::,2a02:66c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:66e0::,2a02:66e0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:6700::,2a02:6700:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:6720::,2a02:6720:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a02:6740::,2a02:6740:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:6760::,2a02:6760:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:6780::,2a02:6780:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:67a0::,2a02:67a0:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a02:67c0::,2a02:67c0:ffff:ffff:ffff:ffff:ffff:ffff,SY
+2a02:67e0::,2a02:67e0:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:6800::,2a02:6800:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a02:6820::,2a02:6820:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:6840::,2a02:6840:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:6860::,2a02:6860:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:6880::,2a02:6880:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a02:68a0::,2a02:68a0:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a02:68c0::,2a02:68c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:68e0::,2a02:68e0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:6900::,2a02:6900:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:6920::,2a02:6920:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:6940::,2a02:6940:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:6960::,2a02:6960:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:6980::,2a02:6980:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:69a0::,2a02:69a0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:69c0::,2a02:69c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:69e0::,2a02:69e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:6a00::,2a02:6a00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:6a20::,2a02:6a20:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:6a40::,2a02:6a40:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:6a60::,2a02:6a60:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:6a80::,2a02:6a80:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a02:6aa0::,2a02:6aa0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:6ac0::,2a02:6ac0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:6ae0::,2a02:6ae0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:6b00::,2a02:6b00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:6b20::,2a02:6b20:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:6b40::,2a02:6b40:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:6b60::,2a02:6b60:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:6b80::,2a02:6b80:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a02:6ba0::,2a02:6ba0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:6bc0::,2a02:6bc0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:6be0::,2a02:6be0:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a02:6c00::,2a02:6c00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:6c20::,2a02:6c20:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:6c40::,2a02:6c40:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:6c60::,2a02:6c60:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:6c80::,2a02:6c80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:6ca0::,2a02:6ca0:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a02:6cc0::,2a02:6cc0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:6ce0::,2a02:6ce0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:6d00::,2a02:6d00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:6d40::,2a02:6d40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:6d80::,2a02:6d80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:6dc0::,2a02:6dc0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:6e00::,2a02:6e00:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a02:6e80::,2a02:6e80:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:6ec0::,2a02:6ec0:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:6f00::,2a02:6f00:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a02:6f40::,2a02:6f40:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a02:6f80::,2a02:6f80:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:6fc0::,2a02:6fc0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:7000::,2a02:7007:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a02:7040::,2a02:7040:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:7080::,2a02:7080:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:70c0::,2a02:70c0:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a02:7100::,2a02:7100:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:7140::,2a02:7140:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:7180::,2a02:7180:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:71c0::,2a02:71c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:7200::,2a02:7200:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:7240::,2a02:7240:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:7280::,2a02:7280:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:72c0::,2a02:72c0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:7300::,2a02:7300:ffff:ffff:ffff:ffff:ffff:ffff,KZ
+2a02:7340::,2a02:7340:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:7380::,2a02:7380:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:73c0::,2a02:73c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:7440::,2a02:7440:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:7480::,2a02:7480:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:74c0::,2a02:74c0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:7500::,2a02:7500:ffff:ffff:ffff:ffff:ffff:ffff,KW
+2a02:7540::,2a02:7540:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:7580::,2a02:7580:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:75c0::,2a02:75c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:7600::,2a02:7600:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a02:7640::,2a02:7640:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:7680::,2a02:7680:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:76c0::,2a02:76c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:7700::,2a02:7700:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:7740::,2a02:7740:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a02:7780::,2a02:7780:ffff:ffff:ffff:ffff:ffff:ffff,CY
+2a02:77c0::,2a02:77c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:7800::,2a02:7800:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:7840::,2a02:7840:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:7880::,2a02:7880:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:78c0::,2a02:78c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:7900::,2a02:7900:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a02:7940::,2a02:7940:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:7980::,2a02:7980:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a02:79c0::,2a02:79c0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:7a00::,2a02:7a00:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:7a80::,2a02:7a80:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:7ac0::,2a02:7ac0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:7b00::,2a02:7b00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:7b40::,2a02:7b40:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a02:7b80::,2a02:7b80:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:7bc0::,2a02:7bc0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:7c00::,2a02:7c00:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:7c40::,2a02:7c40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:7c80::,2a02:7c80:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:7d00::,2a02:7d00:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:7d40::,2a02:7d40:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:7d80::,2a02:7d80:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:7dc0::,2a02:7dc0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:7e00::,2a02:7e00:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:7e40::,2a02:7e40:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:7e80::,2a02:7e80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:7ec0::,2a02:7ec0:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:7f00::,2a02:7f00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:7f40::,2a02:7f40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:7f80::,2a02:7f80:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:7fc0::,2a02:7fc0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:8000::,2a02:81ff:ffff:ffff:ffff:ffff:ffff:ffff,DJ
+2a02:8200::,2a02:821f:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:8300::,2a02:830f:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:8380::,2a02:838f:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:8400::,2a02:84ff:ffff:ffff:ffff:ffff:ffff:ffff,SX
+2a02:8800::,2a02:88ff:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:9000::,2a02:91ff:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:a000::,2a02:a0ff:ffff:ffff:ffff:ffff:ffff:ffff,BF
+2a02:a200::,2a02:a21f:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:a300::,2a02:a31f:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:a400::,2a02:a47f:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:a800::,2a02:a83f:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:aa00::,2a02:aa1f:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:ab00::,2a02:ab07:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a02:ab40::,2a02:ab47:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:ab80::,2a02:ab8f:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a02:ac00::,2a02:ac07:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:ac40::,2a02:ac47:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:ac80::,2a02:ac87:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:acc0::,2a02:acc7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:ad40::,2a02:ad47:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:ad80::,2a02:ad87:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:adc0::,2a02:adc7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:ae00::,2a02:ae07:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a02:ae40::,2a02:ae47:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a02:ae80::,2a02:ae87:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:aec0::,2a02:aec7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:af00::,2a02:af07:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:af40::,2a02:af47:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:af80::,2a02:af87:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:afc0::,2a02:afc7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:b000::,2a02:b1ff:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:c000::,2a02:c007:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:c080::,2a02:c087:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:c0c0::,2a02:c0c7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:c100::,2a02:c107:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:c140::,2a02:c147:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:c180::,2a02:c187:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:c1c0::,2a02:c1c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:c200::,2a02:c207:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:c280::,2a02:c287:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:c2c0::,2a02:c2c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:c300::,2a02:c307:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:c340::,2a02:c347:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:c380::,2a02:c381:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:c390::,2a02:c397:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:c3a0::,2a02:c3a3:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:c3c0::,2a02:c3c7:ffff:ffff:ffff:ffff:ffff:ffff,BH
+2a02:c400::,2a02:c407:ffff:ffff:ffff:ffff:ffff:ffff,BH
+2a02:c440::,2a02:c447:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:c480::,2a02:c487:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:c4c0::,2a02:c4c7:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:c500::,2a02:c507:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a02:c540::,2a02:c547:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:c580::,2a02:c587:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:c5c0::,2a02:c5c7:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a02:c600::,2a02:c607:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:c640::,2a02:c647:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a02:c680::,2a02:c681:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:c6a0::,2a02:c6a3:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:c6c0::,2a02:c6c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:c700::,2a02:c707:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:c740::,2a02:c747:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:c780::,2a02:c787:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a02:c7c0::,2a02:c7c7:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:c800::,2a02:c807:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:c840::,2a02:c847:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:c880::,2a02:c887:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:c8c0::,2a02:c8c7:ffff:ffff:ffff:ffff:ffff:ffff,UZ
+2a02:c900::,2a02:c907:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:c940::,2a02:c947:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:c980::,2a02:c987:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:c9c0::,2a02:c9c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:ca00::,2a02:ca07:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:ca40::,2a02:ca47:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:ca80::,2a02:ca87:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:cac0::,2a02:cac7:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:cb00::,2a02:cb07:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:cb40::,2a02:cb47:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:cb80::,2a02:cb87:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a02:cbc0::,2a02:cbc3:ffff:ffff:ffff:ffff:ffff:ffff,MK
+2a02:cbe0::,2a02:cbe1:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:cbf0::,2a02:cbf1:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:cc00::,2a02:cc07:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a02:cc40::,2a02:cc47:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:cc80::,2a02:cc87:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:ccc0::,2a02:ccc7:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:cd00::,2a02:cd07:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:cd40::,2a02:cd47:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:cd80::,2a02:cd87:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:cdc0::,2a02:cdc7:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:ce00::,2a02:ce07:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a02:ce40::,2a02:ce47:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:ce80::,2a02:ce87:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:cec0::,2a02:cec3:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:cee0::,2a02:cee3:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a02:cf00::,2a02:cf07:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:cf80::,2a02:cf87:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a02:cfc0::,2a02:cfc7:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:d000::,2a02:d007:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:d040::,2a02:d047:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:d080::,2a02:d087:ffff:ffff:ffff:ffff:ffff:ffff,BH
+2a02:d0c0::,2a02:d0c7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:d100::,2a02:d107:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:d140::,2a02:d147:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:d180::,2a02:d187:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:d1c0::,2a02:d1c7:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:d200::,2a02:d207:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a02:d240::,2a02:d247:ffff:ffff:ffff:ffff:ffff:ffff,BY
+2a02:d280::,2a02:d287:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:d2c0::,2a02:d2c7:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:d300::,2a02:d307:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:d340::,2a02:d347:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:d380::,2a02:d387:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:d3c0::,2a02:d3c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:d400::,2a02:d407:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a02:d440::,2a02:d447:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:d480::,2a02:d487:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:d4c0::,2a02:d4c3:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a02:d4e0::,2a02:d4e3:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:d500::,2a02:d507:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:d540::,2a02:d547:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:d580::,2a02:d587:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:d5c0::,2a02:d5c7:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:d600::,2a02:d607:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:d640::,2a02:d647:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:d680::,2a02:d683:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:d6a0::,2a02:d6a3:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:d6c0::,2a02:d6c7:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a02:d700::,2a02:d707:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:d740::,2a02:d747:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:d780::,2a02:d787:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:d7c0::,2a02:d7c7:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:d800::,2a02:d807:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a02:d840::,2a02:d847:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:d880::,2a02:d887:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:d8c0::,2a02:d8c7:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:d900::,2a02:d907:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:d940::,2a02:d947:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:d980::,2a02:d987:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:d9c0::,2a02:d9c7:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:da00::,2a02:da07:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:da40::,2a02:da47:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:da80::,2a02:da87:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:dac0::,2a02:dac7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:db00::,2a02:db07:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:db40::,2a02:db47:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a02:db80::,2a02:db87:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:dbc0::,2a02:dbc7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:dc00::,2a02:dc07:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:dc40::,2a02:dc47:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:dc80::,2a02:dc87:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:dcc0::,2a02:dcc7:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:dd00::,2a02:dd07:ffff:ffff:ffff:ffff:ffff:ffff,AL
+2a02:dd40::,2a02:dd47:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:dd80::,2a02:dd87:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:ddc0::,2a02:ddc7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:de00::,2a02:de07:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:de40::,2a02:de47:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a02:de80::,2a02:de87:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:dec0::,2a02:dec7:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a02:df00::,2a02:df07:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:df40::,2a02:df47:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:df80::,2a02:df87:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:dfc0::,2a02:dfc7:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:e000::,2a02:e007:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:e040::,2a02:e047:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:e080::,2a02:e087:ffff:ffff:ffff:ffff:ffff:ffff,KW
+2a02:e0c0::,2a02:e0c7:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:e100::,2a02:e107:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:e140::,2a02:e147:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:e180::,2a02:e187:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:e1c0::,2a02:e1c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:e200::,2a02:e203:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:e220::,2a02:e223:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a02:e240::,2a02:e247:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:e280::,2a02:e287:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:e2c0::,2a02:e2c7:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:e300::,2a02:e307:ffff:ffff:ffff:ffff:ffff:ffff,BY
+2a02:e340::,2a02:e347:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:e380::,2a02:e387:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:e3c0::,2a02:e3c7:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:e400::,2a02:e407:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:e440::,2a02:e447:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:e480::,2a02:e487:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:e4c0::,2a02:e4c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:e500::,2a02:e507:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:e540::,2a02:e547:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a02:e580::,2a02:e587:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:e5c0::,2a02:e5c7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:e600::,2a02:e603:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:e620::,2a02:e623:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:e640::,2a02:e647:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:e680::,2a02:e687:ffff:ffff:ffff:ffff:ffff:ffff,JO
+2a02:e700::,2a02:e707:ffff:ffff:ffff:ffff:ffff:ffff,LY
+2a02:e740::,2a02:e747:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:e780::,2a02:e787:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:e7c0::,2a02:e7c7:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:e800::,2a02:e807:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:e840::,2a02:e847:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:e880::,2a02:e887:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:e900::,2a02:e907:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a02:e940::,2a02:e947:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a02:e980::,2a02:e987:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a02:e9c0::,2a02:e9c7:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:ea00::,2a02:ea07:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:ea40::,2a02:ea47:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:ea80::,2a02:ea87:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:eac0::,2a02:eac7:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:eb00::,2a02:eb07:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:eb40::,2a02:eb47:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:eb80::,2a02:eb87:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:ebc0::,2a02:ebc7:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:ec00::,2a02:ec07:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:ec40::,2a02:ec47:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:ec80::,2a02:ec87:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:ecc0::,2a02:ecc7:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a02:ed00::,2a02:ed07:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:ed40::,2a02:ed47:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:ed80::,2a02:ed87:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:edc0::,2a02:edc7:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a02:ee00::,2a02:ee07:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:ee40::,2a02:ee47:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:ee80::,2a02:ee87:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:eec0::,2a02:eec7:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:ef00::,2a02:ef07:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:ef40::,2a02:ef47:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:ef80::,2a02:ef87:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:efc0::,2a02:efc7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:f000::,2a02:f007:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:f040::,2a02:f047:ffff:ffff:ffff:ffff:ffff:ffff,BH
+2a02:f080::,2a02:f083:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:f0a0::,2a02:f0a3:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:f0c0::,2a02:f0c7:ffff:ffff:ffff:ffff:ffff:ffff,JO
+2a02:f100::,2a02:f107:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:f140::,2a02:f147:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:f180::,2a02:f187:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:f1c0::,2a02:f1c7:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:f200::,2a02:f207:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:f240::,2a02:f247:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:f280::,2a02:f287:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:f2c0::,2a02:f2c7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:f300::,2a02:f307:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:f340::,2a02:f347:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:f380::,2a02:f387:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:f3c0::,2a02:f3c7:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:f400::,2a02:f407:ffff:ffff:ffff:ffff:ffff:ffff,AE
+2a02:f440::,2a02:f447:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:f480::,2a02:f487:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:f4c0::,2a02:f4c7:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:f500::,2a02:f507:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:f540::,2a02:f543:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:f560::,2a02:f563:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:f580::,2a02:f587:ffff:ffff:ffff:ffff:ffff:ffff,AM
+2a02:f5c0::,2a02:f5c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:f600::,2a02:f607:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:f640::,2a02:f647:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:f680::,2a02:f687:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:f6c0::,2a02:f6c7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:f700::,2a02:f707:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a02:f740::,2a02:f747:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:f780::,2a02:f787:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:f7c0::,2a02:f7c7:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:f800::,2a02:f807:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:f840::,2a02:f847:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:f880::,2a02:f887:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:f8c0::,2a02:f8c7:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:f900::,2a02:f907:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:f940::,2a02:f947:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a02:f980::,2a02:f987:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:f9c0::,2a02:f9c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:fa00::,2a02:fa07:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a02:fa40::,2a02:fa47:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:fa80::,2a02:fa87:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:fac0::,2a02:fac7:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:fb00::,2a02:fb07:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:fb40::,2a02:fb47:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:fb80::,2a02:fb87:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:fbc0::,2a02:fbc7:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:fc00::,2a02:fc07:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:fc40::,2a02:fc47:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:fc80::,2a02:fc87:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:fcc0::,2a02:fcc7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:fd00::,2a02:fd07:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:fd40::,2a02:fd47:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:fd80::,2a02:fd87:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:fdc0::,2a02:fdc7:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:fe00::,2a02:fe07:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:fe40::,2a02:fe47:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:fec0::,2a02:fec7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:ff00::,2a02:ff07:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:ff40::,2a02:ff47:ffff:ffff:ffff:ffff:ffff:ffff,IM
+2a02:ff80::,2a02:ff87:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:ffc0::,2a02:ffc7:ffff:ffff:ffff:ffff:ffff:ffff,GI
+2a03:40::,2a03:40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:80::,2a03:80:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:c0::,2a03:c0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a03:100::,2a03:100:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a03:140::,2a03:140:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:180::,2a03:180:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a03:1c0::,2a03:1c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:200::,2a03:200:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:240::,2a03:247:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:280::,2a03:280:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a03:2c0::,2a03:2c0:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a03:300::,2a03:300:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:340::,2a03:340:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:380::,2a03:380:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:3c0::,2a03:3c0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:400::,2a03:400:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:440::,2a03:440:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:480::,2a03:480:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:4c0::,2a03:4c0:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a03:500::,2a03:500:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:540::,2a03:540:ffff:ffff:ffff:ffff:ffff:ffff,UZ
+2a03:580::,2a03:580:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:5c0::,2a03:5c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:600::,2a03:600:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:640::,2a03:640:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:680::,2a03:680:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:6c0::,2a03:6c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:700::,2a03:700:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:740::,2a03:740:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:780::,2a03:780:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:7c0::,2a03:7c0:ffff:ffff:ffff:ffff:ffff:ffff,PS
+2a03:800::,2a03:800:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:840::,2a03:840:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:880::,2a03:880:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a03:8c0::,2a03:8c0:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a03:900::,2a03:900:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:940::,2a03:940:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a03:980::,2a03:980:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a03:9c0::,2a03:9c0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:a00::,2a03:a00:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:a40::,2a03:a40:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:a80::,2a03:a80:ffff:ffff:ffff:ffff:ffff:ffff,MD
+2a03:ac0::,2a03:ac0:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a03:b00::,2a03:b00:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:b40::,2a03:b40:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:b80::,2a03:b80:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a03:bc0::,2a03:bc7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:c00::,2a03:c00:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:c40::,2a03:c40:ffff:ffff:ffff:ffff:ffff:ffff,PS
+2a03:c80::,2a03:c80:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a03:cc0::,2a03:cc0:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a03:d00::,2a03:d00:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a03:d40::,2a03:d40:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:d80::,2a03:d80:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:dc0::,2a03:dc0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:e00::,2a03:e00:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:e40::,2a03:e40:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a03:e80::,2a03:e80:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:ec0::,2a03:ec0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:f00::,2a03:f07:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:f40::,2a03:f40:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:f80::,2a03:f87:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a03:fc0::,2a03:fc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:1000::,2a03:1000:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a03:1040::,2a03:1040:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:1080::,2a03:1080:ffff:ffff:ffff:ffff:ffff:ffff,AM
+2a03:10c0::,2a03:10c3:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:1100::,2a03:1100:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a03:1140::,2a03:1140:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:1180::,2a03:1180:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:11c0::,2a03:11c0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:1200::,2a03:1200:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:1240::,2a03:1240:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a03:1280::,2a03:1280:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:12c0::,2a03:12c0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a03:1300::,2a03:1300:ffff:ffff:ffff:ffff:ffff:ffff,CY
+2a03:1340::,2a03:1340:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:1380::,2a03:1380:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:13c0::,2a03:13c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:1400::,2a03:1400:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a03:1440::,2a03:1440:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:1480::,2a03:1480:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:14c0::,2a03:14c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:1500::,2a03:1500:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a03:1540::,2a03:1540:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:1580::,2a03:1580:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a03:15c0::,2a03:15c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:1600::,2a03:1600:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:1640::,2a03:1640:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:1680::,2a03:1680:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:16c0::,2a03:16c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:1700::,2a03:1707:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:1740::,2a03:1740:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:1780::,2a03:1780:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:17c0::,2a03:17c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:1800::,2a03:1800:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:1840::,2a03:1840:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:1880::,2a03:1880:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:18c0::,2a03:18c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:1900::,2a03:1900:ffff:ffff:ffff:ffff:ffff:ffff,AM
+2a03:1940::,2a03:1940:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:1980::,2a03:1980:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a03:1a00::,2a03:1a00:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:1a40::,2a03:1a40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:1a80::,2a03:1a80:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a03:1ac0::,2a03:1ac0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:1b00::,2a03:1b00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:1b40::,2a03:1b40:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a03:1b80::,2a03:1b80:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:1bc0::,2a03:1bc0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:1c00::,2a03:1c00:ffff:ffff:ffff:ffff:ffff:ffff,BH
+2a03:1c40::,2a03:1c40:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:1c80::,2a03:1c80:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:1cc0::,2a03:1cc0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:1d00::,2a03:1d00:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:1d40::,2a03:1d40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:1d80::,2a03:1d80:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a03:1dc0::,2a03:1dc0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:1e00::,2a03:1e00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:1e40::,2a03:1e40:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:1e80::,2a03:1e80:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:1ec0::,2a03:1ec0:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a03:1f00::,2a03:1f00:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:1f40::,2a03:1f40:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a03:1f80::,2a03:1f80:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:2000::,2a03:2000:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:2040::,2a03:2040:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:2080::,2a03:2080:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:20c0::,2a03:20c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:2100::,2a03:2100:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:2140::,2a03:2140:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:2180::,2a03:2180:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a03:21c0::,2a03:21c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:2200::,2a03:2200:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a03:2240::,2a03:2240:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a03:2280::,2a03:2280:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:22c0::,2a03:22c0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:2300::,2a03:2300:ffff:ffff:ffff:ffff:ffff:ffff,AM
+2a03:2340::,2a03:2340:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:2380::,2a03:2380:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:23c0::,2a03:23c0:ffff:ffff:ffff:ffff:ffff:ffff,HR
+2a03:2400::,2a03:2400:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:2440::,2a03:2440:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:2480::,2a03:2480:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:24c0::,2a03:24c0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:2500::,2a03:2500:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:2540::,2a03:2540:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:2580::,2a03:2580:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:25c0::,2a03:25c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:2600::,2a03:2600:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:2640::,2a03:2640:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:2680::,2a03:2680:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:26c0::,2a03:26c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:2700::,2a03:2700:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:2740::,2a03:2740:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a03:2780::,2a03:2780:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:27c0::,2a03:27c0:ffff:ffff:ffff:ffff:ffff:ffff,AM
+2a03:2800::,2a03:2800:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:2840::,2a03:2840:ffff:ffff:ffff:ffff:ffff:ffff,US
+2a03:2880::,2a03:2880:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a03:28c0::,2a03:28c0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:2900::,2a03:2900:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:2940::,2a03:2940:ffff:ffff:ffff:ffff:ffff:ffff,PS
+2a03:2980::,2a03:2980:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:29c0::,2a03:29c0:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a03:2a00::,2a03:2a00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:2a40::,2a03:2a40:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a03:2a80::,2a03:2a80:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:2ac0::,2a03:2ac0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:2b00::,2a03:2b00:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:2b40::,2a03:2b40:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:2b80::,2a03:2b80:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:2bc0::,2a03:2bc0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:2c00::,2a03:2c00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:2c40::,2a03:2c40:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:2c80::,2a03:2c80:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:2cc0::,2a03:2cc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:2d00::,2a03:2d00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:2d80::,2a03:2d80:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:2dc0::,2a03:2dc0:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a03:2e00::,2a03:2e00:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:2e40::,2a03:2e40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:2ec0::,2a03:2ec0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:2f00::,2a03:2f00:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a03:2f40::,2a03:2f40:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a03:2f80::,2a03:2f80:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:2fc0::,2a03:2fc0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:3000::,2a03:3000:ffff:ffff:ffff:ffff:ffff:ffff,BY
+2a03:3040::,2a03:3040:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a03:30c0::,2a03:30c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:3100::,2a03:3100:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:3140::,2a03:3140:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:3180::,2a03:3180:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a03:31c0::,2a03:31c0:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a03:3200::,2a03:3200:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:3240::,2a03:3240:ffff:ffff:ffff:ffff:ffff:ffff,UZ
+2a03:3280::,2a03:3280:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:32c0::,2a03:32c0:ffff:ffff:ffff:ffff:ffff:ffff,KZ
+2a03:3300::,2a03:3300:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:3340::,2a03:3340:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:3380::,2a03:3380:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a03:33c0::,2a03:33c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:3400::,2a03:3400:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:3440::,2a03:3440:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a03:3480::,2a03:3480:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:34c0::,2a03:34c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:3500::,2a03:3500:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:3540::,2a03:3540:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:3580::,2a03:3580:ffff:ffff:ffff:ffff:ffff:ffff,GE
+2a03:35c0::,2a03:35c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:3600::,2a03:3600:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a03:3640::,2a03:3640:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:3680::,2a03:3680:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:36c0::,2a03:36c0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:3700::,2a03:3700:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:37c0::,2a03:37c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:3800::,2a03:3800:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:3840::,2a03:3840:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:3880::,2a03:3880:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:38c0::,2a03:38c0:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a03:3900::,2a03:3900:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:3940::,2a03:3940:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:3980::,2a03:3980:ffff:ffff:ffff:ffff:ffff:ffff,BY
+2a03:39c0::,2a03:39c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:3a00::,2a03:3a00:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:3a40::,2a03:3a40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:3a80::,2a03:3a80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:3ac0::,2a03:3ac0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:3b00::,2a03:3b00:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:3b40::,2a03:3b40:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:3b80::,2a03:3b80:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a03:3bc0::,2a03:3bc0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:3c00::,2a03:3c00:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:3c40::,2a03:3c40:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:3c80::,2a03:3c80:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:3cc0::,2a03:3cc7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:3d00::,2a03:3d00:ffff:ffff:ffff:ffff:ffff:ffff,AM
+2a03:3d40::,2a03:3d40:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:3d80::,2a03:3d80:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:3dc0::,2a03:3dc0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:3e00::,2a03:3e00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:3e40::,2a03:3e40:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:3e80::,2a03:3e80:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:3ec0::,2a03:3ec0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:3f00::,2a03:3f00:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:3f40::,2a03:3f40:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:3f80::,2a03:3f80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:3fc0::,2a03:3fc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:4000::,2a03:4000:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:4040::,2a03:4040:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:4080::,2a03:4080:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:40c0::,2a03:40c0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:4100::,2a03:4107:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a03:4140::,2a03:4140:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:4180::,2a03:4180:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a03:41c0::,2a03:41c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:4200::,2a03:4200:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:4240::,2a03:4240:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:4280::,2a03:4280:ffff:ffff:ffff:ffff:ffff:ffff,HR
+2a03:42c0::,2a03:42c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:4300::,2a03:4307:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:4340::,2a03:4340:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:4380::,2a03:4380:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:43c0::,2a03:43c0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a03:4400::,2a03:4400:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:4440::,2a03:4440:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:4480::,2a03:4480:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a03:44c0::,2a03:44c0:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a03:4500::,2a03:4500:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:4540::,2a03:4540:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:4580::,2a03:4580:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:45c0::,2a03:45c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:4600::,2a03:4600:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:4640::,2a03:4640:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:4680::,2a03:4680:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a03:46c0::,2a03:46c0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a03:4700::,2a03:4700:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:4740::,2a03:4740:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:4780::,2a03:4780:ffff:ffff:ffff:ffff:ffff:ffff,KW
+2a03:47c0::,2a03:47c7:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a03:4800::,2a03:4800:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:4840::,2a03:4847:ffff:ffff:ffff:ffff:ffff:ffff,AL
+2a03:4880::,2a03:4880:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:48c0::,2a03:48c0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:4900::,2a03:4900:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:4940::,2a03:4940:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a03:4980::,2a03:4980:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:49c0::,2a03:49c0:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a03:4a00::,2a03:4a00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:4a40::,2a03:4a40:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:4a80::,2a03:4a80:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:4ac0::,2a03:4ac0:ffff:ffff:ffff:ffff:ffff:ffff,KZ
+2a03:4b00::,2a03:4b00:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:4b40::,2a03:4b40:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a03:4b80::,2a03:4b80:ffff:ffff:ffff:ffff:ffff:ffff,AL
+2a03:4bc0::,2a03:4bc0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:4c00::,2a03:4c07:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:4c40::,2a03:4c40:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a03:4c80::,2a03:4c80:ffff:ffff:ffff:ffff:ffff:ffff,LI
+2a03:4cc0::,2a03:4cc0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:4d00::,2a03:4d00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:4d40::,2a03:4d40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:4d80::,2a03:4d80:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:4dc0::,2a03:4dc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:4e00::,2a03:4e00:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:4e40::,2a03:4e40:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a03:4e80::,2a03:4e80:ffff:ffff:ffff:ffff:ffff:ffff,GE
+2a03:4ec0::,2a03:4ec0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:4f00::,2a03:4f00:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:4f40::,2a03:4f40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:4f80::,2a03:4f80:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:5000::,2a03:5000:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:5040::,2a03:5040:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:5080::,2a03:5080:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:50c0::,2a03:50c0:ffff:ffff:ffff:ffff:ffff:ffff,GI
+2a03:5100::,2a03:5100:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:5140::,2a03:5140:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:5180::,2a03:5180:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a03:51c0::,2a03:51c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:5200::,2a03:5200:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:5240::,2a03:5240:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:5280::,2a03:5280:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a03:52c0::,2a03:52c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:5300::,2a03:5307:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:5380::,2a03:5380:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:53c0::,2a03:53c0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a03:5400::,2a03:5400:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a03:5440::,2a03:5440:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a03:5480::,2a03:5480:ffff:ffff:ffff:ffff:ffff:ffff,LI
+2a03:54c0::,2a03:54c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:5500::,2a03:5501:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:5540::,2a03:5540:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:5580::,2a03:5587:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a03:55c0::,2a03:55c0:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a03:5600::,2a03:5600:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:5640::,2a03:5640:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a03:5680::,2a03:5680:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:56c0::,2a03:56c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:5700::,2a03:5700:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:5740::,2a03:5740:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:5780::,2a03:5780:ffff:ffff:ffff:ffff:ffff:ffff,KW
+2a03:57c0::,2a03:57c0:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a03:5800::,2a03:5800:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:5840::,2a03:5840:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:5880::,2a03:5880:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a03:58c0::,2a03:58c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:5900::,2a03:5907:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a03:5940::,2a03:5940:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:5980::,2a03:5980:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:59c0::,2a03:59c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:5a00::,2a03:5a07:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:5a80::,2a03:5a80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:5ac0::,2a03:5ac0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:5b00::,2a03:5b00:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:5b40::,2a03:5b40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:5b80::,2a03:5b80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:5bc0::,2a03:5bc0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:5c00::,2a03:5c00:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:5c40::,2a03:5c40:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:5c80::,2a03:5c80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:5cc0::,2a03:5cc0:ffff:ffff:ffff:ffff:ffff:ffff,BA
+2a03:5d00::,2a03:5d07:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:5d40::,2a03:5d40:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:5d80::,2a03:5d80:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:5dc0::,2a03:5dc0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a03:5e40::,2a03:5e40:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:5e80::,2a03:5e80:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a03:5ec0::,2a03:5ec0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:5f00::,2a03:5f00:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a03:5f80::,2a03:5f80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:5fc0::,2a03:5fc0:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a03:6000::,2a03:6000:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:6040::,2a03:6040:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:6080::,2a03:6087:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:60c0::,2a03:60c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:6100::,2a03:6100:ffff:ffff:ffff:ffff:ffff:ffff,HR
+2a03:6140::,2a03:6140:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:6180::,2a03:6180:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a03:61c0::,2a03:61c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:6200::,2a03:6200:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:6240::,2a03:6240:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a03:62c0::,2a03:62c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:6300::,2a03:6300:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a03:6340::,2a03:6340:ffff:ffff:ffff:ffff:ffff:ffff,KZ
+2a03:6380::,2a03:6380:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a03:63c0::,2a03:63c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:6400::,2a03:6400:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:6440::,2a03:6440:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:6480::,2a03:6480:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:64c0::,2a03:64c0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a03:6500::,2a03:6500:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:6540::,2a03:6540:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a03:6580::,2a03:6580:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:65c0::,2a03:65c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:6600::,2a03:6600:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:6640::,2a03:6640:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:6680::,2a03:6680:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a03:66c0::,2a03:66c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:6700::,2a03:6707:ffff:ffff:ffff:ffff:ffff:ffff,KW
+2a03:6740::,2a03:6740:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a03:6780::,2a03:6780:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a03:67c0::,2a03:67c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:6800::,2a03:6800:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:6840::,2a03:6840:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:6880::,2a03:6880:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:68c0::,2a03:68c0:ffff:ffff:ffff:ffff:ffff:ffff,CY
+2a03:6900::,2a03:6900:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a03:6940::,2a03:6940:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:6980::,2a03:6980:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:69c0::,2a03:69c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:6a00::,2a03:6a00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:6a40::,2a03:6a40:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:6a80::,2a03:6a80:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:6ac0::,2a03:6ac0:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a03:6b00::,2a03:6b00:ffff:ffff:ffff:ffff:ffff:ffff,JO
+2a03:6b40::,2a03:6b40:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:6b80::,2a03:6b80:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:6bc0::,2a03:6bc7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:6c00::,2a03:6c00:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:6c40::,2a03:6c40:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:6c80::,2a03:6c80:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:6cc0::,2a03:6cc0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:6d00::,2a03:6d00:ffff:ffff:ffff:ffff:ffff:ffff,JO
+2a03:6d40::,2a03:6d40:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:6d80::,2a03:6d80:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a03:6dc0::,2a03:6dc0:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a03:6e00::,2a03:6e00:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:6e40::,2a03:6e40:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:6e80::,2a03:6e80:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:6ec0::,2a03:6ec0:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a03:6f00::,2a03:6f00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:6f40::,2a03:6f40:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a03:6f80::,2a03:6f87:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:6fc0::,2a03:6fc0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:7000::,2a03:7000:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:7040::,2a03:7040:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:7080::,2a03:7080:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:70c0::,2a03:70c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:7100::,2a03:7100:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a03:7140::,2a03:7140:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:7180::,2a03:7180:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a03:71c0::,2a03:71c0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:7200::,2a03:7200:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:7240::,2a03:7240:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:7280::,2a03:7280:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:72c0::,2a03:72c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:7300::,2a03:7300:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:7340::,2a03:7340:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:7380::,2a03:7380:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a03:73c0::,2a03:73c0:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a03:7400::,2a03:7400:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a03:7440::,2a03:7440:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:7480::,2a03:7480:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:74c0::,2a03:74c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:7500::,2a03:7500:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:7540::,2a03:7540:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:7580::,2a03:7580:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:75c0::,2a03:75c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:7640::,2a03:7640:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:7680::,2a03:7680:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:76c0::,2a03:76c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:7700::,2a03:7700:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:7740::,2a03:7740:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a03:7780::,2a03:7780:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:77c0::,2a03:77c0:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a03:7800::,2a03:7800:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a03:7840::,2a03:7840:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:7880::,2a03:7880:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:7900::,2a03:7900:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:7940::,2a03:7940:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:79c0::,2a03:79c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:7a00::,2a03:7a00:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:7a40::,2a03:7a40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:7a80::,2a03:7a80:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a03:7b00::,2a03:7b00:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:7b40::,2a03:7b40:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:7b80::,2a03:7b80:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a03:7bc0::,2a03:7bc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:7c00::,2a03:7c00:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a03:7c40::,2a03:7c40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:7c80::,2a03:7c80:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:7cc0::,2a03:7cc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:7d00::,2a03:7d00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:7d40::,2a03:7d40:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a03:7dc0::,2a03:7dc0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:7e00::,2a03:7e00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:7e40::,2a03:7e40:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:7e80::,2a03:7e80:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:7ec0::,2a03:7ec0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:7f00::,2a03:7f00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:7f40::,2a03:7f40:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a03:7f80::,2a03:7f80:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:7fc0::,2a03:7fc0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:8000::,2a03:8000:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a03:8040::,2a03:8040:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:8080::,2a03:8080:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:80c0::,2a03:80c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:8100::,2a03:8100:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:8140::,2a03:8140:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:8180::,2a03:8180:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:81c0::,2a03:81c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:8200::,2a03:8200:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:8240::,2a03:8240:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:8280::,2a03:8280:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:82c0::,2a03:82c0:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a03:8300::,2a03:8300:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:8340::,2a03:8340:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a03:8380::,2a03:8380:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:83c0::,2a03:83c0:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a03:8400::,2a03:8400:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:8440::,2a03:8440:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:8480::,2a03:8480:ffff:ffff:ffff:ffff:ffff:ffff,AL
+2a03:84c0::,2a03:84c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:8500::,2a03:8500:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a03:8540::,2a03:8540:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:8580::,2a03:8580:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:85c0::,2a03:85c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:8600::,2a03:8600:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:8640::,2a03:8640:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:8680::,2a03:8680:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:86c0::,2a03:86c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:8700::,2a03:8700:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:8740::,2a03:8740:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:8780::,2a03:8780:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:87c0::,2a03:87c0:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a03:8800::,2a03:8800:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a03:8840::,2a03:8840:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:8880::,2a03:8880:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:88c0::,2a03:88c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:8900::,2a03:8900:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a03:8940::,2a03:8940:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:8980::,2a03:8980:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:89c0::,2a03:89c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:8a00::,2a03:8a00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:8a40::,2a03:8a40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:8a80::,2a03:8a80:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a03:8b00::,2a03:8b00:ffff:ffff:ffff:ffff:ffff:ffff,SM
+2a03:8b40::,2a03:8b40:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:8b80::,2a03:8b80:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:8bc0::,2a03:8bc0:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a03:8c00::,2a03:8c00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:8c40::,2a03:8c40:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:8c80::,2a03:8c87:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:8cc0::,2a03:8cc0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:8d00::,2a03:8d00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:8d40::,2a03:8d40:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:8dc0::,2a03:8dc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:8e00::,2a03:8e00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:8e40::,2a03:8e40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:8e80::,2a03:8e80:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:8ec0::,2a03:8ec0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:8f00::,2a03:8f07:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a03:8f40::,2a03:8f40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:8f80::,2a03:8f80:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a03:8fc0::,2a03:8fc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:9000::,2a03:9000:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:9040::,2a03:9040:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:9080::,2a03:9080:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a03:90c0::,2a03:90c0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a03:9100::,2a03:9100:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:9140::,2a03:9140:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:9180::,2a03:9180:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:91c0::,2a03:91c0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:9240::,2a03:9240:ffff:ffff:ffff:ffff:ffff:ffff,BA
+2a03:9280::,2a03:9280:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:92c0::,2a03:92c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:9300::,2a03:9300:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:9340::,2a03:9340:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:9380::,2a03:9380:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:93c0::,2a03:93c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:9400::,2a03:9400:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:9440::,2a03:9440:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:9480::,2a03:9480:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:94c0::,2a03:94c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:9500::,2a03:9500:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:9540::,2a03:9540:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:9580::,2a03:9580:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:95c0::,2a03:95c0:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a03:9600::,2a03:9600:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:9640::,2a03:9640:ffff:ffff:ffff:ffff:ffff:ffff,PS
+2a03:9680::,2a03:9680:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a03:96c0::,2a03:96c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:9700::,2a03:9700:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:9740::,2a03:9740:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:9780::,2a03:9780:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:97c0::,2a03:97c1:ffff:ffff:ffff:ffff:ffff:ffff,BY
+2a03:9800::,2a03:9807:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:9840::,2a03:9840:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:9880::,2a03:9880:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:98c0::,2a03:98c7:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a03:9900::,2a03:9900:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a03:9940::,2a03:9940:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a03:9980::,2a03:9980:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:99c0::,2a03:99c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:9a00::,2a03:9a00:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a03:9a40::,2a03:9a40:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:9a80::,2a03:9a80:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:9ac0::,2a03:9ac0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:9b00::,2a03:9b00:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a03:9b40::,2a03:9b40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:9b80::,2a03:9b80:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a03:9bc0::,2a03:9bc0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:9c00::,2a03:9c00:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a03:9c40::,2a03:9c40:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a03:9c80::,2a03:9c80:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a03:9cc0::,2a03:9cc7:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a03:9d00::,2a03:9d00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:9d40::,2a03:9d40:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:9d80::,2a03:9d80:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a03:9dc0::,2a03:9dc0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:9e00::,2a03:9e00:ffff:ffff:ffff:ffff:ffff:ffff,IM
+2a03:9e40::,2a03:9e47:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:9e80::,2a03:9e80:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:9ec0::,2a03:9ec0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:9f00::,2a03:9f00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:9f40::,2a03:9f40:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:9f80::,2a03:9f80:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a03:a000::,2a03:a000:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:a040::,2a03:a040:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:a080::,2a03:a080:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:a0c0::,2a03:a0c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:a100::,2a03:a100:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a03:a140::,2a03:a140:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:a180::,2a03:a180:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:a1c0::,2a03:a1c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:a200::,2a03:a200:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a03:a240::,2a03:a240:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:a280::,2a03:a280:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:a2c0::,2a03:a2c7:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:a300::,2a03:a300:ffff:ffff:ffff:ffff:ffff:ffff,KZ
+2a03:a340::,2a03:a340:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:a380::,2a03:a380:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:a3c0::,2a03:a3c0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:a400::,2a03:a400:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:a440::,2a03:a440:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:a480::,2a03:a480:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a03:a4c0::,2a03:a4c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:a500::,2a03:a500:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:a540::,2a03:a540:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:a580::,2a03:a580:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:a5c0::,2a03:a5c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:a600::,2a03:a600:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a03:a640::,2a03:a640:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:a680::,2a03:a680:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:a6c0::,2a03:a6c0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:a740::,2a03:a740:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:a780::,2a03:a780:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:a7c0::,2a03:a7c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:a800::,2a03:a800:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a03:a840::,2a03:a840:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a03:a8c0::,2a03:a8c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:a900::,2a03:a900:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:a940::,2a03:a940:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:a980::,2a03:a980:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:a9c0::,2a03:a9c0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a03:aa00::,2a03:aa00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:aa40::,2a03:aa40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:aa80::,2a03:aa80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:aac0::,2a03:aac0:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a03:ab00::,2a03:ab00:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:ab40::,2a03:ab40:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a03:ab80::,2a03:ab80:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:abc0::,2a03:abc7:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a03:ac00::,2a03:ac00:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:ac40::,2a03:ac40:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:ac80::,2a03:ac80:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:acc0::,2a03:acc0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:ad00::,2a03:ad00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:ad40::,2a03:ad40:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:ad80::,2a03:ad80:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:adc0::,2a03:adc0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:ae00::,2a03:ae00:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:ae40::,2a03:ae40:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:ae80::,2a03:ae80:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:aec0::,2a03:aec0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:af00::,2a03:af00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:af40::,2a03:af40:ffff:ffff:ffff:ffff:ffff:ffff,MK
+2a03:af80::,2a03:af80:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:afc0::,2a03:afc0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:b000::,2a03:b000:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:b040::,2a03:b040:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:b080::,2a03:b080:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a03:b0c0::,2a03:b0c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:b100::,2a03:b100:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:b140::,2a03:b140:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:b180::,2a03:b180:ffff:ffff:ffff:ffff:ffff:ffff,AE
+2a03:b1c0::,2a03:b1c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:b200::,2a03:b207:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:b240::,2a03:b240:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:b280::,2a03:b280:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:b300::,2a03:b300:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:b340::,2a03:b340:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a03:b380::,2a03:b380:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:b3c0::,2a03:b3c0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:b400::,2a03:b400:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:b440::,2a03:b440:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:b480::,2a03:b480:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:b4c0::,2a03:b4c0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:b500::,2a03:b500:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a03:b540::,2a03:b540:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a03:b580::,2a03:b580:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:b5c0::,2a03:b5c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:b600::,2a03:b600:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:b640::,2a03:b640:ffff:ffff:ffff:ffff:ffff:ffff,JO
+2a03:b680::,2a03:b680:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a03:b6c0::,2a03:b6c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:b700::,2a03:b700:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:b740::,2a03:b740:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:b780::,2a03:b780:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:b7c0::,2a03:b7c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:b800::,2a03:b800:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:b840::,2a03:b840:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:b880::,2a03:b887:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:b8c0::,2a03:b8c0:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a03:b900::,2a03:b900:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:b940::,2a03:b940:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:b980::,2a03:b980:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:b9c0::,2a03:b9c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:ba00::,2a03:ba07:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a03:ba40::,2a03:ba40:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a03:ba80::,2a03:ba80:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:bac0::,2a03:bac0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:bb00::,2a03:bb00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:bb40::,2a03:bb40:ffff:ffff:ffff:ffff:ffff:ffff,HR
+2a03:bb80::,2a03:bb80:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:bbc0::,2a03:bbc0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:bc00::,2a03:bc00:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:bc40::,2a03:bc40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:bc80::,2a03:bc80:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:bcc0::,2a03:bcc0:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a03:bd00::,2a03:bd00:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:bd40::,2a03:bd47:ffff:ffff:ffff:ffff:ffff:ffff,BA
+2a03:bd80::,2a03:bd80:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:bdc0::,2a03:bdc0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:be00::,2a03:be00:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:be40::,2a03:be40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:be80::,2a03:be80:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:bec0::,2a03:bec0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:bf00::,2a03:bf00:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a03:bf40::,2a03:bf40:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:bf80::,2a03:bf80:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:bfc0::,2a03:bfc0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:c000::,2a03:c007:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a03:c040::,2a03:c040:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:c080::,2a03:c080:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a03:c0c0::,2a03:c0c0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:c100::,2a03:c100:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a03:c140::,2a03:c140:ffff:ffff:ffff:ffff:ffff:ffff,AE
+2a03:c180::,2a03:c180:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:c1c0::,2a03:c1c0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:c200::,2a03:c200:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:c240::,2a03:c240:ffff:ffff:ffff:ffff:ffff:ffff,GE
+2a03:c280::,2a03:c280:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:c2c0::,2a03:c2c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:c300::,2a03:c300:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:c340::,2a03:c340:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a03:c380::,2a03:c380:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:c3c0::,2a03:c3c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:c400::,2a03:c400:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a03:c440::,2a03:c440:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:c480::,2a03:c480:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a03:c4c0::,2a03:c4c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:c500::,2a03:c500:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:c540::,2a03:c540:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a03:c580::,2a03:c580:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:c5c0::,2a03:c5c0:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a03:c600::,2a03:c600:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:c640::,2a03:c640:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:c680::,2a03:c680:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a03:c6c0::,2a03:c6c0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:c700::,2a03:c700:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:c740::,2a03:c740:ffff:ffff:ffff:ffff:ffff:ffff,BY
+2a03:c780::,2a03:c780:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:c7c0::,2a03:c7c7:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:c800::,2a03:c800:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a03:c840::,2a03:c840:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a03:c880::,2a03:c880:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:c8c0::,2a03:c8c0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a03:c900::,2a03:c900:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:c940::,2a03:c940:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:c980::,2a03:c980:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:c9c0::,2a03:c9c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:ca00::,2a03:ca00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:ca40::,2a03:ca40:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:ca80::,2a03:ca87:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:cac0::,2a03:cac0:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a03:cb00::,2a03:cb00:ffff:ffff:ffff:ffff:ffff:ffff,MT
+2a03:cb40::,2a03:cb40:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:cb80::,2a03:cb80:ffff:ffff:ffff:ffff:ffff:ffff,BA
+2a03:cbc0::,2a03:cbc7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:cc00::,2a03:cc00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:cc40::,2a03:cc40:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a03:cc80::,2a03:cc80:ffff:ffff:ffff:ffff:ffff:ffff,BA
+2a03:ccc0::,2a03:ccc0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:cd00::,2a03:cd00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2a03:cd40::,2a03:cd40:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:cd80::,2a03:cd80:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a03:cdc0::,2a03:cdc0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:ce00::,2a03:ce00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:ce40::,2a03:ce47:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:ce80::,2a03:ce80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:cf00::,2a03:cf00:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:cf40::,2a03:cf40:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:cf80::,2a03:cf80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:cfc0::,2a03:cfc0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:d000::,2a03:d000:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:d040::,2a03:d040:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:d080::,2a03:d080:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:d0c0::,2a03:d0c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:d100::,2a03:d100:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:d140::,2a03:d140:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:d180::,2a03:d180:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a03:d1c0::,2a03:d1c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:d200::,2a03:d200:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:d280::,2a03:d280:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:d2c0::,2a03:d2c0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:d300::,2a03:d300:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:d340::,2a03:d340:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:d380::,2a03:d380:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:d3c0::,2a03:d3c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:d400::,2a03:d400:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:d440::,2a03:d440:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a03:d480::,2a03:d480:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:d4c0::,2a03:d4c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:d500::,2a03:d500:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a03:d540::,2a03:d540:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:d580::,2a03:d587:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:d5c0::,2a03:d5c0:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a03:d600::,2a03:d600:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:d640::,2a03:d640:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a03:d680::,2a03:d680:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:d6c0::,2a03:d6c0:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a03:d700::,2a03:d700:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:d740::,2a03:d740:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:d780::,2a03:d780:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:d7c0::,2a03:d7c7:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:d800::,2a03:d800:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:d840::,2a03:d840:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:d880::,2a03:d880:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:d8c0::,2a03:d8c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:d900::,2a03:d900:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:d940::,2a03:d940:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:d980::,2a03:d980:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:d9c0::,2a03:d9c0:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a03:da00::,2a03:da00:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a03:da40::,2a03:da40:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:da80::,2a03:da80:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a03:dac0::,2a03:dac0:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a03:db00::,2a03:db00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:db40::,2a03:db47:ffff:ffff:ffff:ffff:ffff:ffff,CY
+2a03:db80::,2a03:db80:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:dbc0::,2a03:dbc0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a03:dc00::,2a03:dc00:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:dc40::,2a03:dc40:ffff:ffff:ffff:ffff:ffff:ffff,MT
+2a03:dc80::,2a03:dc80:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a03:dcc0::,2a03:dcc0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:dd00::,2a03:dd00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:dd40::,2a03:dd40:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:dd80::,2a03:dd87:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a03:ddc0::,2a03:ddc0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:de00::,2a03:de00:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:de40::,2a03:de40:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:de80::,2a03:de80:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:dec0::,2a03:dec0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:df00::,2a03:df00:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a03:df40::,2a03:df40:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:df80::,2a03:df80:ffff:ffff:ffff:ffff:ffff:ffff,AL
+2a03:dfc0::,2a03:dfc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:e000::,2a03:e000:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:e040::,2a03:e040:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:e080::,2a03:e080:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:e0c0::,2a03:e0c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:e100::,2a03:e100:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:e140::,2a03:e140:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:e180::,2a03:e180:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a03:e1c0::,2a03:e1c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:e200::,2a03:e200:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:e240::,2a03:e240:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:e280::,2a03:e280:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:e2c0::,2a03:e2c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:e340::,2a03:e340:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:e380::,2a03:e380:ffff:ffff:ffff:ffff:ffff:ffff,MK
+2a03:e3c0::,2a03:e3c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:e400::,2a03:e400:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:e440::,2a03:e440:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:e480::,2a03:e480:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:e4c0::,2a03:e4c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:e500::,2a03:e500:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a03:e540::,2a03:e540:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:e580::,2a03:e587:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a03:e600::,2a03:e600:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a03:e640::,2a03:e640:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:e680::,2a03:e680:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:e6c0::,2a03:e6c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:e700::,2a03:e700:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:e740::,2a03:e740:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:e780::,2a03:e780:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:e7c0::,2a03:e7c0:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a03:e800::,2a03:e800:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:e880::,2a03:e880:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:e8c0::,2a03:e8c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:e900::,2a03:e900:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:e940::,2a03:e940:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:e980::,2a03:e980:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a03:e9c0::,2a03:e9c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:ea00::,2a03:ea00:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a03:ea40::,2a03:ea40:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:ea80::,2a03:ea80:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:eac0::,2a03:eac0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:eb00::,2a03:eb00:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a03:eb40::,2a03:eb40:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:eb80::,2a03:eb80:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a03:ebc0::,2a03:ebc0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:ec00::,2a03:ec00:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a03:ec40::,2a03:ec40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:ec80::,2a03:ec80:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:ecc0::,2a03:ecc0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:ed00::,2a03:ed00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:ed40::,2a03:ed40:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:ed80::,2a03:ed80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:edc0::,2a03:edc0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:ee00::,2a03:ee00:ffff:ffff:ffff:ffff:ffff:ffff,FO
+2a03:ee40::,2a03:ee40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:ee80::,2a03:ee80:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:eec0::,2a03:eec0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:ef00::,2a03:ef00:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:ef40::,2a03:ef40:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a03:ef80::,2a03:ef80:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:efc0::,2a03:efc0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:f000::,2a03:f000:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a03:f040::,2a03:f040:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a03:f080::,2a03:f080:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a03:f0c0::,2a03:f0c0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:f100::,2a03:f100:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:f140::,2a03:f140:ffff:ffff:ffff:ffff:ffff:ffff,NC
+2a03:f180::,2a03:f180:ffff:ffff:ffff:ffff:ffff:ffff,BA
+2a03:f1c0::,2a03:f1c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:f200::,2a03:f200:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:f280::,2a03:f280:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:f2c0::,2a03:f2c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:f300::,2a03:f300:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:f340::,2a03:f340:ffff:ffff:ffff:ffff:ffff:ffff,AL
+2a03:f380::,2a03:f380:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a03:f3c0::,2a03:f3c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:f400::,2a03:f400:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a03:f440::,2a03:f440:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:f480::,2a03:f480:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a03:f4c0::,2a03:f4c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:f500::,2a03:f500:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:f540::,2a03:f540:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:f580::,2a03:f580:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:f5c0::,2a03:f5c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:f600::,2a03:f600:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:f640::,2a03:f640:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:f680::,2a03:f680:ffff:ffff:ffff:ffff:ffff:ffff,MD
+2a03:f6c0::,2a03:f6c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:f700::,2a03:f700:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:f740::,2a03:f740:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a03:f780::,2a03:f780:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a03:f7c0::,2a03:f7c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:f800::,2a03:f800:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a03:f840::,2a03:f840:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:f880::,2a03:f880:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:f8c0::,2a03:f8c0:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a03:f900::,2a03:f907:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:f940::,2a03:f940:ffff:ffff:ffff:ffff:ffff:ffff,CY
+2a03:f980::,2a03:f980:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:f9c0::,2a03:f9c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:fa00::,2a03:fa00:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a03:fa40::,2a03:fa40:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a03:fa80::,2a03:fa80:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a03:fac0::,2a03:fac0:ffff:ffff:ffff:ffff:ffff:ffff,BA
+2a03:fb00::,2a03:fb00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:fb40::,2a03:fb40:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:fb80::,2a03:fb80:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a03:fbc0::,2a03:fbc0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:fc00::,2a03:fc07:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:fc40::,2a03:fc40:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a03:fc80::,2a03:fc80:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:fcc0::,2a03:fcc0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:fd40::,2a03:fd40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:fdc0::,2a03:fdc0:ffff:ffff:ffff:ffff:ffff:ffff,GL
+2a03:fe00::,2a03:fe00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:fe40::,2a03:fe40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:fe80::,2a03:fe80:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:ff40::,2a03:ff40:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a03:ffc0::,2a03:ffc0:ffff:ffff:ffff:ffff:ffff:ffff,JO
+2a04::,2a04:7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:40::,2a04:47:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:80::,2a04:87:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:c0::,2a04:c7:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a04:100::,2a04:107:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a04:140::,2a04:147:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:180::,2a04:187:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:1c0::,2a04:1c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:200::,2a04:207:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:240::,2a04:247:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a04:280::,2a04:287:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:2c0::,2a04:2c7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:300::,2a04:307:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:340::,2a04:347:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a04:380::,2a04:387:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:3c0::,2a04:3c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:400::,2a04:407:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:440::,2a04:447:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:480::,2a04:487:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:4c0::,2a04:4c7:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:500::,2a04:507:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:540::,2a04:547:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:580::,2a04:587:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:5c0::,2a04:5c3:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:5e0::,2a04:5e3:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:600::,2a04:607:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:640::,2a04:647:ffff:ffff:ffff:ffff:ffff:ffff,VA
+2a04:680::,2a04:687:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a04:6c0::,2a04:6c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:700::,2a04:707:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:740::,2a04:747:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:780::,2a04:787:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:7c0::,2a04:7c7:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a04:800::,2a04:807:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:840::,2a04:847:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:880::,2a04:887:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:8c0::,2a04:8c7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:900::,2a04:907:ffff:ffff:ffff:ffff:ffff:ffff,HR
+2a04:940::,2a04:947:ffff:ffff:ffff:ffff:ffff:ffff,PS
+2a04:980::,2a04:987:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a04:9c0::,2a04:9c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:a00::,2a04:a07:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a04:a40::,2a04:a47:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:a80::,2a04:a87:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:ac0::,2a04:ac7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:b00::,2a04:b07:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a04:b40::,2a04:b47:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:b80::,2a04:b87:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a04:bc0::,2a04:bc7:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a04:c00::,2a04:c07:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:c40::,2a04:c47:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:c80::,2a04:c87:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:cc0::,2a04:cc7:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:d00::,2a04:d07:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:d40::,2a04:d47:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:d80::,2a04:d87:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:dc0::,2a04:dc7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:e00::,2a04:e07:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:e40::,2a04:e47:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:e80::,2a04:e87:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:ec0::,2a04:ec7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:f00::,2a04:f07:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:f40::,2a04:f47:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:f80::,2a04:f87:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:fc0::,2a04:fc7:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a04:1000::,2a04:1007:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:1040::,2a04:1047:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a04:1080::,2a04:1087:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:10c0::,2a04:10c7:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a04:1100::,2a04:1103:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a04:1120::,2a04:1123:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:1140::,2a04:1143:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:1160::,2a04:1161:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a04:1170::,2a04:1171:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:1180::,2a04:1187:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:11c0::,2a04:11c7:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:1200::,2a04:1207:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:1240::,2a04:1247:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:1280::,2a04:1287:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:12c0::,2a04:12c7:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a04:1300::,2a04:1307:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:1340::,2a04:1347:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:1380::,2a04:1387:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a04:13c0::,2a04:13c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:1400::,2a04:1407:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:1440::,2a04:1447:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:1480::,2a04:1487:ffff:ffff:ffff:ffff:ffff:ffff,CY
+2a04:14c0::,2a04:14c7:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:1500::,2a04:1507:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:1540::,2a04:1547:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:1580::,2a04:1587:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a04:15c0::,2a04:15c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:1600::,2a04:1607:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:1640::,2a04:1647:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:1680::,2a04:1687:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:16c0::,2a04:16c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:1700::,2a04:1707:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:1740::,2a04:1747:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a04:1780::,2a04:1787:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:17c0::,2a04:17c7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:1800::,2a04:1807:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a04:1840::,2a04:1847:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:1880::,2a04:1887:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a04:18c0::,2a04:18c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:1900::,2a04:1907:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a04:1940::,2a04:1947:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:1980::,2a04:1987:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:19c0::,2a04:19c7:ffff:ffff:ffff:ffff:ffff:ffff,PS
+2a04:1a00::,2a04:1a07:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:1a40::,2a04:1a47:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a04:1a80::,2a04:1a87:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:1ac0::,2a04:1ac7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:1b00::,2a04:1b07:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:1b40::,2a04:1b47:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:1b80::,2a04:1b87:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:1bc0::,2a04:1bc7:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a04:1c00::,2a04:1c07:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:1c40::,2a04:1c47:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:1c80::,2a04:1c87:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:1cc0::,2a04:1cc7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:1d00::,2a04:1d07:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a04:1d40::,2a04:1d47:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:1d80::,2a04:1d87:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:1dc0::,2a04:1dc7:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a04:1e00::,2a04:1e07:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:1e40::,2a04:1e47:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:1e80::,2a04:1e87:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:1ec0::,2a04:1ec7:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:1f00::,2a04:1f03:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:1f20::,2a04:1f23:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a04:1f40::,2a04:1f47:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:1f80::,2a04:1f87:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:1fc0::,2a04:1fc7:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:2000::,2a04:2007:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:2040::,2a04:2047:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a04:2080::,2a04:2087:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:20c0::,2a04:20c7:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a04:2100::,2a04:2107:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:2140::,2a04:2147:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:2180::,2a04:2187:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a04:21c0::,2a04:21c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:2200::,2a04:2207:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:2240::,2a04:2247:ffff:ffff:ffff:ffff:ffff:ffff,BH
+2a04:2280::,2a04:2287:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:22c0::,2a04:22c7:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:2300::,2a04:2307:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:2340::,2a04:2347:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:2380::,2a04:2387:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a04:2400::,2a04:241f:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a04:2500::,2a04:2507:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:2540::,2a04:2547:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:2580::,2a04:2587:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:25c0::,2a04:25c7:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a04:2600::,2a04:2607:ffff:ffff:ffff:ffff:ffff:ffff,AE
+2a04:2640::,2a04:2647:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:2680::,2a04:2687:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a04:26c0::,2a04:26c7:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:2700::,2a04:2707:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:2740::,2a04:2747:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a04:2780::,2a04:2787:ffff:ffff:ffff:ffff:ffff:ffff,TJ
+2a04:27c0::,2a04:27c7:ffff:ffff:ffff:ffff:ffff:ffff,AL
+2a04:2800::,2a04:2807:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:2840::,2a04:2847:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:2880::,2a04:2883:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:28a0::,2a04:28a0:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a04:28b0::,2a04:28b1:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a04:28c0::,2a04:28c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:2900::,2a04:2907:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:2940::,2a04:2947:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:2980::,2a04:2987:ffff:ffff:ffff:ffff:ffff:ffff,AE
+2a04:29c0::,2a04:29c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:2a00::,2a04:2a07:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:2a40::,2a04:2a47:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:2a80::,2a04:2a87:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:2ac0::,2a04:2ac7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:2b00::,2a04:2b07:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:2b40::,2a04:2b47:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:2b80::,2a04:2b87:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a04:2bc0::,2a04:2bc7:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:2c00::,2a04:2c07:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a04:2c80::,2a04:2c87:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a04:2cc0::,2a04:2cc7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:2d00::,2a04:2d07:ffff:ffff:ffff:ffff:ffff:ffff,MD
+2a04:2d40::,2a04:2d47:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a04:2d80::,2a04:2d87:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a04:2dc0::,2a04:2dc7:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a04:2e00::,2a04:2e07:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a04:2e40::,2a04:2e47:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a04:2e80::,2a04:2e87:ffff:ffff:ffff:ffff:ffff:ffff,BY
+2a04:2ec0::,2a04:2ec7:ffff:ffff:ffff:ffff:ffff:ffff,JO
+2a04:2f00::,2a04:2f07:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a04:2f40::,2a04:2f47:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:2f80::,2a04:2f87:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:2fc0::,2a04:2fc7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:3000::,2a04:3007:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:3040::,2a04:3047:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a04:3080::,2a04:3087:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a04:30c0::,2a04:30c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:3100::,2a04:3107:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a04:3140::,2a04:3147:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:3180::,2a04:3187:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:31c0::,2a04:31c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:3200::,2a04:3207:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:3240::,2a04:3247:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:3280::,2a04:3287:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:32c0::,2a04:32c7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:3300::,2a04:3307:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:3340::,2a04:3347:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a04:3380::,2a04:3387:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:33c0::,2a04:33c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:3400::,2a04:3407:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a04:3440::,2a04:3447:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:3480::,2a04:3487:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:34c0::,2a04:34c7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:3500::,2a04:3507:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a04:3540::,2a04:3547:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a04:3580::,2a04:3587:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a04:35c0::,2a04:35c7:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a04:3600::,2a04:3607:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:3640::,2a04:3647:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:3680::,2a04:3687:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:36c0::,2a04:36c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:3700::,2a04:3707:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a04:3740::,2a04:3747:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:3780::,2a04:3787:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:3800::,2a04:3807:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:3840::,2a04:3847:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a04:3880::,2a04:3883:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a04:38a0::,2a04:38a3:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a04:38c0::,2a04:38c7:ffff:ffff:ffff:ffff:ffff:ffff,JE
+2a04:3900::,2a04:3907:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:3940::,2a04:3947:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:3980::,2a04:3987:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:39c0::,2a04:39c7:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:3a00::,2a04:3a07:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:3a40::,2a04:3a40:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:3a50::,2a04:3a51:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:3a60::,2a04:3a63:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:3a80::,2a04:3a87:ffff:ffff:ffff:ffff:ffff:ffff,KZ
+2a04:3ac0::,2a04:3ac7:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a04:3b00::,2a04:3b07:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:3b40::,2a04:3b47:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:3b80::,2a04:3b87:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:3bc0::,2a04:3bc7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:3c00::,2a04:3c07:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:3c40::,2a04:3c47:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a04:3c80::,2a04:3c87:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:3cc0::,2a04:3cc7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:3d00::,2a04:3d07:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:3d40::,2a04:3d47:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:3d80::,2a04:3d87:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:3dc0::,2a04:3dc7:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:3e00::,2a04:3e07:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a04:3e40::,2a04:3e47:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:3e80::,2a04:3e87:ffff:ffff:ffff:ffff:ffff:ffff,BA
+2a04:3ec0::,2a04:3ec7:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a04:3f00::,2a04:3f07:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:3f40::,2a04:3f47:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:3f80::,2a04:3f87:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a04:3fc0::,2a04:3fc7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:4000::,2a04:4007:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:4040::,2a04:4047:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:4080::,2a04:4087:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:40c0::,2a04:40c7:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a04:4100::,2a04:4107:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:4140::,2a04:4147:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:4180::,2a04:4187:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a04:41c0::,2a04:41c7:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:4200::,2a04:4207:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:4240::,2a04:4247:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:4280::,2a04:4287:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a04:42c0::,2a04:42c7:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a04:4300::,2a04:4307:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:4340::,2a04:4347:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:4380::,2a04:4387:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:43c0::,2a04:43c7:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a04:4400::,2a04:4407:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:4440::,2a04:4447:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:4480::,2a04:4487:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:44c0::,2a04:44c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:4500::,2a04:4507:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:4540::,2a04:4547:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:4580::,2a04:4587:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:45c0::,2a04:45c7:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a04:4600::,2a04:4607:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:4640::,2a04:4647:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:4680::,2a04:4687:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:46c0::,2a04:46c7:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:4700::,2a04:4703:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a04:4720::,2a04:4723:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a04:4740::,2a04:4747:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:4780::,2a04:4787:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a04:47c0::,2a04:47c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:4800::,2a04:4807:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:4840::,2a04:4847:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:4880::,2a04:4887:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a04:48c0::,2a04:48c7:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a04:4900::,2a04:4907:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a04:4940::,2a04:4947:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a04:4980::,2a04:4987:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:49c0::,2a04:49c7:ffff:ffff:ffff:ffff:ffff:ffff,AL
+2a04:4a00::,2a04:4a07:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:4a40::,2a04:4a47:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:4a80::,2a04:4a87:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a04:4b00::,2a04:4b07:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:4b40::,2a04:4b47:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:4b80::,2a04:4b87:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a04:4bc0::,2a04:4bc7:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:4c00::,2a04:4c07:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a04:4c40::,2a04:4c47:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a04:4c80::,2a04:4c87:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:4cc0::,2a04:4cc7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:4d00::,2a04:4d07:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:4d40::,2a04:4d47:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a04:4d80::,2a04:4d87:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:4dc0::,2a04:4dc7:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:4e00::,2a04:4e07:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a04:4e80::,2a04:4e87:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a04:4ec0::,2a04:4ec7:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:4f00::,2a04:4f07:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:4f40::,2a04:4f47:ffff:ffff:ffff:ffff:ffff:ffff,KZ
+2a04:4f80::,2a04:4f87:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:4fc0::,2a04:4fc3:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:4fe0::,2a04:4fe3:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:5200::,2a04:5207:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:5240::,2a04:5247:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:5280::,2a04:5287:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a04:52c0::,2a04:52c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:5300::,2a04:5307:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:5340::,2a04:5347:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:5380::,2a04:5387:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:53c0::,2a04:53c7:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a04:5400::,2a04:5407:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a04:5440::,2a04:5447:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:5480::,2a04:5487:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a04:54c0::,2a04:54c7:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a04:5500::,2a04:5507:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:5540::,2a04:5547:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:5580::,2a04:5587:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:55c0::,2a04:55c7:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a04:5600::,2a04:5607:ffff:ffff:ffff:ffff:ffff:ffff,KG
+2a04:5640::,2a04:5647:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:5680::,2a04:5687:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:56c0::,2a04:56c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:5700::,2a04:5707:ffff:ffff:ffff:ffff:ffff:ffff,LI
+2a04:5740::,2a04:5747:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:5780::,2a04:5787:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:57c0::,2a04:57c7:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:5800::,2a04:5807:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:5880::,2a04:5887:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:58c0::,2a04:58c7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:5900::,2a04:5907:ffff:ffff:ffff:ffff:ffff:ffff,AL
+2a04:5940::,2a04:5947:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:5980::,2a04:5987:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a04:59c0::,2a04:59c7:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a04:5a00::,2a04:5a07:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:5a40::,2a04:5a47:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:5a80::,2a04:5a87:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a04:5ac0::,2a04:5ac7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:5b00::,2a04:5b07:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a04:5b40::,2a04:5b47:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:5b80::,2a04:5b87:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a04:5bc0::,2a04:5bc7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:5c00::,2a04:5c07:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:5c40::,2a04:5c47:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:5c80::,2a04:5c87:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:5cc0::,2a04:5cc7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:5d00::,2a04:5d07:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:5d40::,2a04:5d47:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a04:5d80::,2a04:5d87:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:5dc0::,2a04:5dc7:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a04:5e00::,2a04:5e07:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a04:5e40::,2a04:5e47:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a04:5e80::,2a04:5e87:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:5ec0::,2a04:5ec7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:5f00::,2a04:5f07:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:5f40::,2a04:5f47:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a04:5f80::,2a04:5f87:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:6000::,2a04:6007:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:6040::,2a04:6047:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:6080::,2a04:6087:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:60c0::,2a04:60c7:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:6100::,2a04:6107:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:6180::,2a04:6187:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a04:6200::,2a04:6207:ffff:ffff:ffff:ffff:ffff:ffff,JO
+2a04:6240::,2a04:6247:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:6280::,2a04:6287:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:62c0::,2a04:62c7:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:6300::,2a04:6307:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:6340::,2a04:6347:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a04:6380::,2a04:6387:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:63c0::,2a04:63c7:ffff:ffff:ffff:ffff:ffff:ffff,AE
+2a04:6400::,2a04:6407:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a04:6440::,2a04:6447:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:6480::,2a04:6487:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a04:64c0::,2a04:64c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:6500::,2a04:6507:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a04:6540::,2a04:6547:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a04:6580::,2a04:6587:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:65c0::,2a04:65c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:6600::,2a04:6607:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a04:6640::,2a04:6647:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:6650::,2a04:6651:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:6680::,2a04:6687:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a04:66c0::,2a04:66c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:6700::,2a04:6707:ffff:ffff:ffff:ffff:ffff:ffff,MT
+2a04:6740::,2a04:6747:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:6780::,2a04:6787:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:67c0::,2a04:67c7:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a04:6800::,2a04:6807:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a04:6840::,2a04:6847:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:6880::,2a04:6887:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:68c0::,2a04:68c7:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:6900::,2a04:6907:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a04:6940::,2a04:6947:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:6980::,2a04:6987:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:69c0::,2a04:69c7:ffff:ffff:ffff:ffff:ffff:ffff,MK
+2a04:6a00::,2a04:6a07:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:6a40::,2a04:6a47:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:6a80::,2a04:6a87:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:6ac0::,2a04:6ac7:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a04:6b00::,2a04:6b07:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a04:6b40::,2a04:6b47:ffff:ffff:ffff:ffff:ffff:ffff,GG
+2a04:6b80::,2a04:6b87:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a04:6bc0::,2a04:6bc7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:6c00::,2a04:6c07:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:6c40::,2a04:6c47:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a04:6c80::,2a04:6c87:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a04:6cc0::,2a04:6cc7:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:6d00::,2a04:6d07:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:6d40::,2a04:6d47:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:6d80::,2a04:6d87:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a04:6dc0::,2a04:6dc7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:6e00::,2a04:6e07:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a04:6e40::,2a04:6e47:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:6e80::,2a04:6e87:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a04:6ec0::,2a04:6ec7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:6f00::,2a04:6f07:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:6f40::,2a04:6f47:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a04:6f80::,2a04:6f83:ffff:ffff:ffff:ffff:ffff:ffff,QA
+2a04:6fa0::,2a04:6fa1:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:6fb0::,2a04:6fb1:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a04:6fc0::,2a04:6fc7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:7000::,2a04:7007:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a04:7040::,2a04:7047:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:7080::,2a04:7087:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a04:70c0::,2a04:70c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:7100::,2a04:7107:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:7140::,2a04:7147:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:7180::,2a04:7187:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:71c0::,2a04:71c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:7200::,2a04:7207:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:7240::,2a04:7247:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:7280::,2a04:7287:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:72c0::,2a04:72c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:7300::,2a04:7307:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:7340::,2a04:7347:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:7380::,2a04:7387:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:73c0::,2a04:73c7:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:7400::,2a04:7407:ffff:ffff:ffff:ffff:ffff:ffff,ME
+2a04:7440::,2a04:7447:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:7480::,2a04:7487:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:74c0::,2a04:74c7:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:7500::,2a04:7507:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:7540::,2a04:7547:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:7580::,2a04:7587:ffff:ffff:ffff:ffff:ffff:ffff,MD
+2a04:75c0::,2a04:75c7:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a04:7600::,2a04:7607:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a04:7640::,2a04:7647:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:7680::,2a04:7687:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:76c0::,2a04:76c7:ffff:ffff:ffff:ffff:ffff:ffff,US
+2a04:7700::,2a04:7707:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:7740::,2a04:7747:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a04:7780::,2a04:7787:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:77c0::,2a04:77c7:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a04:7800::,2a04:7807:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a04:7840::,2a04:7847:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:7880::,2a04:7887:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a04:78c0::,2a04:78c3:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:78e0::,2a04:78e3:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:7900::,2a04:7907:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:7940::,2a04:7947:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:7980::,2a04:7987:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a04:79c0::,2a04:79c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:7a00::,2a04:7a07:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:7a40::,2a04:7a47:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:7a80::,2a04:7a87:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:7ac0::,2a04:7ac7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:7b40::,2a04:7b47:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:7b80::,2a04:7b87:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a04:7bc0::,2a04:7bc7:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a04:7c00::,2a04:7c07:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:7c40::,2a04:7c47:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:7c80::,2a04:7c87:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:7cc0::,2a04:7cc7:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:7d00::,2a04:7d07:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:7d40::,2a04:7d47:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a04:7d80::,2a04:7d87:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:7dc0::,2a04:7dc7:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a04:7e00::,2a04:7e07:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:7e40::,2a04:7e47:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:7e80::,2a04:7e87:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a04:7ec0::,2a04:7ec7:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:7f00::,2a04:7f07:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a04:7f40::,2a04:7f47:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a04:7f80::,2a04:7f87:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a04:7fc0::,2a04:7fc7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:8000::,2a04:8007:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a04:8040::,2a04:8047:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:8080::,2a04:8087:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:80c0::,2a04:80c7:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a04:8100::,2a04:8107:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:8140::,2a04:8147:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:8180::,2a04:8181:ffff:ffff:ffff:ffff:ffff:ffff,SY
+2a04:8190::,2a04:8191:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:81a0::,2a04:81a3:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:81c0::,2a04:81c7:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a04:8200::,2a04:8207:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:8240::,2a04:8247:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:8280::,2a04:8287:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:82c0::,2a04:82c7:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a04:8300::,2a04:8307:ffff:ffff:ffff:ffff:ffff:ffff,MT
+2a04:8340::,2a04:8347:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a04:8380::,2a04:8387:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a04:83c0::,2a04:83c7:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a04:8400::,2a04:8407:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:8440::,2a04:8447:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:8480::,2a04:8487:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:84c0::,2a04:84c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:8500::,2a04:8507:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:8540::,2a04:8547:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a04:8580::,2a04:8587:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:85c0::,2a04:85c7:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:8600::,2a04:8607:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:8640::,2a04:8647:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:8680::,2a04:8687:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:86c0::,2a04:86c7:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a04:8700::,2a04:8707:ffff:ffff:ffff:ffff:ffff:ffff,MT
+2a04:8740::,2a04:8747:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:8780::,2a04:8787:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:87c0::,2a04:87c7:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a04:8800::,2a04:8807:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:8840::,2a04:8847:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:8880::,2a04:8887:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:88c0::,2a04:88c7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:8900::,2a04:8907:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:8940::,2a04:8947:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a04:8980::,2a04:8987:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:89c0::,2a04:89c7:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:8a00::,2a04:8a07:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:8a40::,2a04:8a47:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:8a80::,2a04:8a87:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a04:8ac0::,2a04:8ac7:ffff:ffff:ffff:ffff:ffff:ffff,BH
+2a04:8b00::,2a04:8b07:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:8b40::,2a04:8b47:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:8b80::,2a04:8b87:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:8bc0::,2a04:8bc7:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:8c00::,2a04:8c07:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:8c40::,2a04:8c47:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:8c80::,2a04:8c87:ffff:ffff:ffff:ffff:ffff:ffff,CY
+2a04:8cc0::,2a04:8cc7:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a04:8d00::,2a04:8d07:ffff:ffff:ffff:ffff:ffff:ffff,MK
+2a04:8d40::,2a04:8d47:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:8d80::,2a04:8d87:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:8dc0::,2a04:8dc7:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a04:8e00::,2a04:8e07:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:8e40::,2a04:8e47:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:8e80::,2a04:8e81:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:8e90::,2a04:8e91:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:8ea0::,2a04:8ea3:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:8f00::,2a04:8f07:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:8f40::,2a04:8f47:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:8f80::,2a04:8f87:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:8fc0::,2a04:8fc7:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:9000::,2a04:9007:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:9040::,2a04:9047:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:9080::,2a04:9087:ffff:ffff:ffff:ffff:ffff:ffff,SY
+2a04:90c0::,2a04:90c7:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a04:9100::,2a04:9107:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a04:9140::,2a04:9147:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:9180::,2a04:9187:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a04:91c0::,2a04:91c7:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a04:9240::,2a04:9247:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a04:9280::,2a04:9287:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a04:92c0::,2a04:92c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:9300::,2a04:9307:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:9340::,2a04:9347:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:9380::,2a04:9387:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:93c0::,2a04:93c7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:9400::,2a04:9407:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:9440::,2a04:9447:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:9480::,2a04:9487:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:94e0::,2a04:94e3:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:9500::,2a04:9507:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:9540::,2a04:9547:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:9580::,2a04:9587:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:95c0::,2a04:95c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:9600::,2a04:9607:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:9640::,2a04:9647:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a04:9680::,2a04:9687:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:96c0::,2a04:96c7:ffff:ffff:ffff:ffff:ffff:ffff,CY
+2a04:9700::,2a04:9707:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:9740::,2a04:9747:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:9780::,2a04:9787:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a04:97c0::,2a04:97c7:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:9800::,2a04:9807:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:9840::,2a04:9847:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a04:9880::,2a04:9887:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:98c0::,2a04:98c7:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a04:9900::,2a04:9907:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:9940::,2a04:9947:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a04:9980::,2a04:9987:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:99c0::,2a04:99c7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:9a00::,2a04:9a07:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:9a40::,2a04:9a47:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:9a80::,2a04:9a87:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a04:9ac0::,2a04:9ac7:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:9b00::,2a04:9b07:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:9b40::,2a04:9b47:ffff:ffff:ffff:ffff:ffff:ffff,BY
+2a04:9b80::,2a04:9b87:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:9bc0::,2a04:9bc7:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a04:9c00::,2a04:9c07:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:9c40::,2a04:9c47:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a04:9c80::,2a04:9c87:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:9cc0::,2a04:9cc7:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a04:9d00::,2a04:9d07:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:9d40::,2a04:9d47:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a04:9d80::,2a04:9d87:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:9dc0::,2a04:9dc7:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a04:9e00::,2a04:9e07:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:9e40::,2a04:9e47:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:9e80::,2a04:9e87:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:9ec0::,2a04:9ec7:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a04:9f00::,2a04:9f07:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:9f40::,2a04:9f47:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:9f80::,2a04:9f87:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a04:a000::,2a04:a007:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:a040::,2a04:a047:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a04:a080::,2a04:a087:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:a0c0::,2a04:a0c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:a100::,2a04:a107:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:a140::,2a04:a147:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:a180::,2a04:a187:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:a1c0::,2a04:a1c7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:a200::,2a04:a207:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:a240::,2a04:a247:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:a280::,2a04:a287:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:a2c0::,2a04:a2c7:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:a300::,2a04:a307:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a04:a340::,2a04:a347:ffff:ffff:ffff:ffff:ffff:ffff,SM
+2a04:a380::,2a04:a387:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a04:a3c0::,2a04:a3c7:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a04:a400::,2a04:a407:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:a440::,2a04:a440:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:a450::,2a04:a451:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:a460::,2a04:a461:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:a470::,2a04:a471:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a04:a480::,2a04:a487:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:a4c0::,2a04:a4c7:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:a500::,2a04:a507:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:a540::,2a04:a547:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:a580::,2a04:a587:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:a5c0::,2a04:a5c7:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a04:a600::,2a04:a607:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a04:a640::,2a04:a647:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:a680::,2a04:a687:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:a6c0::,2a04:a6c7:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:a700::,2a04:a707:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:a740::,2a04:a747:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a04:a780::,2a04:a787:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:a7c0::,2a04:a7c7:ffff:ffff:ffff:ffff:ffff:ffff,HR
+2a04:a800::,2a04:a807:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a04:a840::,2a04:a847:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:a880::,2a04:a887:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a04:a8c0::,2a04:a8c7:ffff:ffff:ffff:ffff:ffff:ffff,US
+2a04:a900::,2a04:a907:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a04:a940::,2a04:a947:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:a980::,2a04:a987:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:a9c0::,2a04:a9c7:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:aa00::,2a04:aa07:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a04:aa40::,2a04:aa47:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:aa80::,2a04:aa87:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a04:aac0::,2a04:aac7:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:ab00::,2a04:ab07:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:ab40::,2a04:ab47:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a04:ab80::,2a04:ab87:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:abc0::,2a04:abc7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:ac00::,2a04:ac07:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:ac40::,2a04:ac47:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a04:ac80::,2a04:ac87:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:acc0::,2a04:acc7:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a04:ad00::,2a04:ad07:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a04:ad40::,2a04:ad47:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a04:ad80::,2a04:ad87:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:adc0::,2a04:adc7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:ae00::,2a04:ae3f:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:b000::,2a04:b007:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:b040::,2a04:b047:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:b080::,2a04:b087:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a04:b0c0::,2a04:b0c7:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:b100::,2a04:b107:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:b140::,2a04:b147:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a04:b180::,2a04:b187:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:b1c0::,2a04:b1c7:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a04:b200::,2a04:b207:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:b240::,2a04:b247:ffff:ffff:ffff:ffff:ffff:ffff,IM
+2a04:b280::,2a04:b287:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:b2c0::,2a04:b2c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:b300::,2a04:b307:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:b340::,2a04:b347:ffff:ffff:ffff:ffff:ffff:ffff,KG
+2a04:b380::,2a04:b387:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:b3c0::,2a04:b3c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:b400::,2a04:b407:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:b440::,2a04:b447:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:b480::,2a04:b487:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a04:b4c0::,2a04:b4c7:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:b500::,2a04:b507:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:b540::,2a04:b547:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a04:b580::,2a04:b587:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:b5c0::,2a04:b5c7:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a04:b600::,2a04:b607:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:b640::,2a04:b647:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:b680::,2a04:b687:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:b6c0::,2a04:b6c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:b700::,2a04:b707:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:b740::,2a04:b747:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:b780::,2a04:b787:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:b7c0::,2a04:b7c7:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a04:b800::,2a04:b807:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:b840::,2a04:b847:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:b880::,2a04:b887:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:b8c0::,2a04:b8c7:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:b900::,2a04:b907:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:b940::,2a04:b947:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:b980::,2a04:b987:ffff:ffff:ffff:ffff:ffff:ffff,HR
+2a04:b9c0::,2a04:b9c7:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:ba00::,2a04:ba07:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:ba40::,2a04:ba47:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:ba80::,2a04:ba87:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:bac0::,2a04:bac7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:bb00::,2a04:bb07:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:bb40::,2a04:bb47:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:bb80::,2a04:bb87:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:bbc0::,2a04:bbc7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:bc00::,2a04:bc07:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a04:bc40::,2a04:bc47:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a04:bc80::,2a04:bc87:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a04:bcc0::,2a04:bcc7:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:bd00::,2a04:bd07:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:bd40::,2a04:bd47:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:bd80::,2a04:bd87:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a04:bdc0::,2a04:bdc7:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a04:be00::,2a04:be03:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:be20::,2a04:be23:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:be40::,2a04:be47:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:be80::,2a04:be87:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:bec0::,2a04:bec7:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:bf00::,2a04:bf07:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:bf40::,2a04:bf47:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a04:bf80::,2a04:bf87:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a04:bfc0::,2a04:bfc7:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:c000::,2a04:c007:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:c040::,2a04:c047:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:c080::,2a04:c087:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:c0c0::,2a04:c0c7:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a04:c100::,2a04:c107:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:c140::,2a04:c147:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a04:c180::,2a04:c187:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a04:c1c0::,2a04:c1c7:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:c200::,2a04:c207:ffff:ffff:ffff:ffff:ffff:ffff,GE
+2a04:c240::,2a04:c247:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:c280::,2a04:c287:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:c2c0::,2a04:c2c7:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a04:c300::,2a04:c307:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:c340::,2a04:c347:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:c380::,2a04:c387:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a04:c3c0::,2a04:c3c7:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a04:c400::,2a04:c407:ffff:ffff:ffff:ffff:ffff:ffff,OM
+2a04:c440::,2a04:c447:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:c480::,2a04:c487:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:c4c0::,2a04:c4c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:c500::,2a04:c507:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:c540::,2a04:c547:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:c580::,2a04:c587:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:c5c0::,2a04:c5c7:ffff:ffff:ffff:ffff:ffff:ffff,US
+2a04:c600::,2a04:c607:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:c640::,2a04:c647:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:c680::,2a04:c687:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:c6c0::,2a04:c6c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:c740::,2a04:c747:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a04:c780::,2a04:c787:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:c800::,2a04:c807:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:c840::,2a04:c847:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a04:c880::,2a04:c887:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:c8c0::,2a04:c8c7:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:c900::,2a04:c907:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:c940::,2a04:c947:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:c980::,2a04:c987:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:c9c0::,2a04:c9c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:ca00::,2a04:ca07:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:ca40::,2a04:ca47:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a04:ca80::,2a04:ca87:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:cac0::,2a04:cac7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:cb00::,2a04:cb07:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:cb40::,2a04:cb47:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:cb80::,2a04:cb87:ffff:ffff:ffff:ffff:ffff:ffff,AE
+2a04:cbc0::,2a04:cbc7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:cc00::,2a04:cc07:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:cc40::,2a04:cc47:ffff:ffff:ffff:ffff:ffff:ffff,BY
+2a04:cc80::,2a04:cc87:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a04:ccc0::,2a04:ccc7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:cd00::,2a04:cd07:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:cd40::,2a04:cd47:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:cd80::,2a04:cd87:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a04:cdc0::,2a04:cdc7:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:ce00::,2a04:ce07:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a04:ce40::,2a04:ce47:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:ce80::,2a04:ce87:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:cec0::,2a04:cec7:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:cf00::,2a04:cf07:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:cf40::,2a04:cf47:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:cf80::,2a04:cf87:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a04:cfc0::,2a04:cfc7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:d000::,2a04:d007:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:d040::,2a04:d047:ffff:ffff:ffff:ffff:ffff:ffff,GE
+2a04:d080::,2a04:d087:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a04:d0c0::,2a04:d0c7:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:d100::,2a04:d107:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a04:d140::,2a04:d147:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:d180::,2a04:d187:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:d1c0::,2a04:d1c7:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a04:d200::,2a04:d207:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:d240::,2a04:d247:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:d280::,2a04:d287:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:d2c0::,2a04:d2c7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:d300::,2a04:d307:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:d340::,2a04:d347:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a04:d380::,2a04:d387:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a04:d3c0::,2a04:d3c7:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:d400::,2a04:d407:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a04:d440::,2a04:d447:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:d480::,2a04:d487:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:d4c0::,2a04:d4c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:d500::,2a04:d507:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a04:d540::,2a04:d547:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:d580::,2a04:d587:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:d5c0::,2a04:d5c7:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a04:d600::,2a04:d607:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:d640::,2a04:d647:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a04:d680::,2a04:d687:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:d6c0::,2a04:d6c7:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:d700::,2a04:d707:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:d740::,2a04:d747:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:d780::,2a04:d787:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:d7c0::,2a04:d7c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:d800::,2a04:d807:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:d840::,2a04:d847:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:d880::,2a04:d887:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:d8c0::,2a04:d8c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:d900::,2a04:d907:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:d940::,2a04:d947:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:d980::,2a04:d987:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a04:d9c0::,2a04:d9c7:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a04:da00::,2a04:da07:ffff:ffff:ffff:ffff:ffff:ffff,AE
+2a04:da40::,2a04:da47:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a04:da80::,2a04:da87:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:dac0::,2a04:dac7:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a04:db00::,2a04:db07:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:db40::,2a04:db47:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a04:db80::,2a04:db87:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:dbc0::,2a04:dbc3:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:dc00::,2a04:dc07:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:dc40::,2a04:dc47:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:dc80::,2a04:dc87:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a04:dcc0::,2a04:dcc7:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:dd00::,2a04:dd07:ffff:ffff:ffff:ffff:ffff:ffff,AE
+2a04:dd40::,2a04:dd47:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a04:dd80::,2a04:dd87:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:ddc0::,2a04:ddc7:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:de00::,2a04:de07:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:de40::,2a04:de47:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:de80::,2a04:de87:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:dec0::,2a04:dec7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:df00::,2a04:df07:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a04:df40::,2a04:df47:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a04:df80::,2a04:df87:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:dfc0::,2a04:dfc7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:e040::,2a04:e047:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a04:e080::,2a04:e087:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:e0c0::,2a04:e0c7:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a04:e100::,2a04:e107:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:e140::,2a04:e147:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:e180::,2a04:e187:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:e1c0::,2a04:e1c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:e200::,2a04:e207:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a04:e240::,2a04:e247:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:e280::,2a04:e287:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a04:e2c0::,2a04:e2c7:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:e300::,2a04:e307:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:e340::,2a04:e347:ffff:ffff:ffff:ffff:ffff:ffff,AE
+2a04:e380::,2a04:e387:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:e3c0::,2a04:e3c7:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a04:e400::,2a04:e407:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a04:e440::,2a04:e447:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:e480::,2a04:e487:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2c0e::,2c0e:fff:ffff:ffff:ffff:ffff:ffff:ffff,EG
+2c0e:2000::,2c0e:200f:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f600::,2c0f:f600:ffff:ffff:ffff:ffff:ffff:ffff,GN
+2c0f:f608::,2c0f:f608:ffff:ffff:ffff:ffff:ffff:ffff,RE
+2c0f:f610::,2c0f:f610:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f618::,2c0f:f618:ffff:ffff:ffff:ffff:ffff:ffff,GH
+2c0f:f620::,2c0f:f620:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2c0f:f628::,2c0f:f628:ffff:ffff:ffff:ffff:ffff:ffff,RW
+2c0f:f630::,2c0f:f630:ffff:ffff:ffff:ffff:ffff:ffff,BJ
+2c0f:f638::,2c0f:f638:ffff:ffff:ffff:ffff:ffff:ffff,NG
+2c0f:f640::,2c0f:f640:ffff:ffff:ffff:ffff:ffff:ffff,GA
+2c0f:f648::,2c0f:f648:ffff:ffff:ffff:ffff:ffff:ffff,TD
+2c0f:f650::,2c0f:f650:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f658::,2c0f:f658:ffff:ffff:ffff:ffff:ffff:ffff,UG
+2c0f:f660::,2c0f:f660:ffff:ffff:ffff:ffff:ffff:ffff,CM
+2c0f:f668::,2c0f:f668:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f670::,2c0f:f670:ffff:ffff:ffff:ffff:ffff:ffff,ZM
+2c0f:f678::,2c0f:f678:ffff:ffff:ffff:ffff:ffff:ffff,BW
+2c0f:f680::,2c0f:f680:ffff:ffff:ffff:ffff:ffff:ffff,SC
+2c0f:f688::,2c0f:f688:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2c0f:f690::,2c0f:f690:ffff:ffff:ffff:ffff:ffff:ffff,SS
+2c0f:f698::,2c0f:f698:ffff:ffff:ffff:ffff:ffff:ffff,TN
+2c0f:f6a0::,2c0f:f6a0:ffff:ffff:ffff:ffff:ffff:ffff,CM
+2c0f:f6a8::,2c0f:f6a8:ffff:ffff:ffff:ffff:ffff:ffff,BI
+2c0f:f6b0::,2c0f:f6b0:ffff:ffff:ffff:ffff:ffff:ffff,TZ
+2c0f:f6b8::,2c0f:f6b8:ffff:ffff:ffff:ffff:ffff:ffff,SO
+2c0f:f6c0::,2c0f:f6c0:ffff:ffff:ffff:ffff:ffff:ffff,CG
+2c0f:f6c8::,2c0f:f6c8:ffff:ffff:ffff:ffff:ffff:ffff,CM
+2c0f:f6d0::,2c0f:f6d0:ffff:ffff:ffff:ffff:ffff:ffff,UG
+2c0f:f6d8::,2c0f:f6d8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f6e0::,2c0f:f6e0:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f6e8::,2c0f:f6e8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f6f0::,2c0f:f6f0:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f6f8::,2c0f:f6f8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f700::,2c0f:f700:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f708::,2c0f:f708:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f800::,2c0f:f80f:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f810::,2c0f:f810:ffff:ffff:ffff:ffff:ffff:ffff,AO
+2c0f:f818::,2c0f:f818:ffff:ffff:ffff:ffff:ffff:ffff,BJ
+2c0f:f820::,2c0f:f820:ffff:ffff:ffff:ffff:ffff:ffff,GH
+2c0f:f828::,2c0f:f828:ffff:ffff:ffff:ffff:ffff:ffff,AO
+2c0f:f830::,2c0f:f830:ffff:ffff:ffff:ffff:ffff:ffff,ZW
+2c0f:f838::,2c0f:f838:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f840::,2c0f:f840:ffff:ffff:ffff:ffff:ffff:ffff,GQ
+2c0f:f848::,2c0f:f848:ffff:ffff:ffff:ffff:ffff:ffff,GH
+2c0f:f850::,2c0f:f850:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f858::,2c0f:f858:ffff:ffff:ffff:ffff:ffff:ffff,DZ
+2c0f:f860::,2c0f:f860:ffff:ffff:ffff:ffff:ffff:ffff,RW
+2c0f:f870::,2c0f:f870:ffff:ffff:ffff:ffff:ffff:ffff,NG
+2c0f:f878::,2c0f:f878:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2c0f:f880::,2c0f:f880:ffff:ffff:ffff:ffff:ffff:ffff,NG
+2c0f:f888::,2c0f:f888:ffff:ffff:ffff:ffff:ffff:ffff,AO
+2c0f:f890::,2c0f:f890:ffff:ffff:ffff:ffff:ffff:ffff,GM
+2c0f:f898::,2c0f:f898:ffff:ffff:ffff:ffff:ffff:ffff,MU
+2c0f:f8a0::,2c0f:f8a0:ffff:ffff:ffff:ffff:ffff:ffff,UG
+2c0f:f8a8::,2c0f:f8a8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f8b0::,2c0f:f8b0:ffff:ffff:ffff:ffff:ffff:ffff,BF
+2c0f:f8b8::,2c0f:f8b8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f8c0::,2c0f:f8c0:ffff:ffff:ffff:ffff:ffff:ffff,GQ
+2c0f:f8c8::,2c0f:f8c8:ffff:ffff:ffff:ffff:ffff:ffff,NE
+2c0f:f8d0::,2c0f:f8d0:ffff:ffff:ffff:ffff:ffff:ffff,NG
+2c0f:f8d8::,2c0f:f8d8:ffff:ffff:ffff:ffff:ffff:ffff,BW
+2c0f:f8e0::,2c0f:f8e0:ffff:ffff:ffff:ffff:ffff:ffff,MU
+2c0f:f8e8::,2c0f:f8e8:ffff:ffff:ffff:ffff:ffff:ffff,GH
+2c0f:f8f0::,2c0f:f8f0:ffff:ffff:ffff:ffff:ffff:ffff,ZW
+2c0f:f8f8::,2c0f:f8f8:ffff:ffff:ffff:ffff:ffff:ffff,SO
+2c0f:f900::,2c0f:f900:ffff:ffff:ffff:ffff:ffff:ffff,ML
+2c0f:f908::,2c0f:f908:ffff:ffff:ffff:ffff:ffff:ffff,BI
+2c0f:f918::,2c0f:f918:ffff:ffff:ffff:ffff:ffff:ffff,RE
+2c0f:f920::,2c0f:f920:ffff:ffff:ffff:ffff:ffff:ffff,CG
+2c0f:f928::,2c0f:f928:ffff:ffff:ffff:ffff:ffff:ffff,GW
+2c0f:f930::,2c0f:f930:ffff:ffff:ffff:ffff:ffff:ffff,LR
+2c0f:f938::,2c0f:f938:ffff:ffff:ffff:ffff:ffff:ffff,ZM
+2c0f:f940::,2c0f:f940:ffff:ffff:ffff:ffff:ffff:ffff,DZ
+2c0f:f948::,2c0f:f948:ffff:ffff:ffff:ffff:ffff:ffff,GA
+2c0f:f950::,2c0f:f950:ffff:ffff:ffff:ffff:ffff:ffff,SS
+2c0f:f958::,2c0f:f958:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f960::,2c0f:f960:ffff:ffff:ffff:ffff:ffff:ffff,TZ
+2c0f:f968::,2c0f:f968:ffff:ffff:ffff:ffff:ffff:ffff,MZ
+2c0f:f970::,2c0f:f970:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f978::,2c0f:f978:ffff:ffff:ffff:ffff:ffff:ffff,CD
+2c0f:f980::,2c0f:f980:ffff:ffff:ffff:ffff:ffff:ffff,NA
+2c0f:f988::,2c0f:f988:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f990::,2c0f:f990:ffff:ffff:ffff:ffff:ffff:ffff,GN
+2c0f:f998::,2c0f:f998:ffff:ffff:ffff:ffff:ffff:ffff,MR
+2c0f:f9a0::,2c0f:f9a0:ffff:ffff:ffff:ffff:ffff:ffff,MW
+2c0f:f9a8::,2c0f:f9a8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f9b0::,2c0f:f9b0:ffff:ffff:ffff:ffff:ffff:ffff,GA
+2c0f:f9b8::,2c0f:f9b8:ffff:ffff:ffff:ffff:ffff:ffff,MU
+2c0f:f9c0::,2c0f:f9c0:ffff:ffff:ffff:ffff:ffff:ffff,BW
+2c0f:f9c8::,2c0f:f9c8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f9d0::,2c0f:f9d0:ffff:ffff:ffff:ffff:ffff:ffff,TZ
+2c0f:f9d8::,2c0f:f9d8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f9e0::,2c0f:f9e0:ffff:ffff:ffff:ffff:ffff:ffff,NG
+2c0f:f9e8::,2c0f:f9e8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f9f0::,2c0f:f9f0:ffff:ffff:ffff:ffff:ffff:ffff,MG
+2c0f:f9f8::,2c0f:f9f8:ffff:ffff:ffff:ffff:ffff:ffff,BJ
+2c0f:fa00::,2c0f:fa00:ffff:ffff:ffff:ffff:ffff:ffff,GH
+2c0f:fa08::,2c0f:fa08:ffff:ffff:ffff:ffff:ffff:ffff,CD
+2c0f:fa10::,2c0f:fa10:ffff:ffff:ffff:ffff:ffff:ffff,ZM
+2c0f:fa18::,2c0f:fa18:ffff:ffff:ffff:ffff:ffff:ffff,MA
+2c0f:fa20::,2c0f:fa20:ffff:ffff:ffff:ffff:ffff:ffff,SS
+2c0f:fa28::,2c0f:fa28:ffff:ffff:ffff:ffff:ffff:ffff,MG
+2c0f:fa38::,2c0f:fa38:ffff:ffff:ffff:ffff:ffff:ffff,AO
+2c0f:fa40::,2c0f:fa40:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fa48::,2c0f:fa48:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fa58::,2c0f:fa58:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fa60::,2c0f:fa60:ffff:ffff:ffff:ffff:ffff:ffff,AO
+2c0f:fa68::,2c0f:fa68:ffff:ffff:ffff:ffff:ffff:ffff,GH
+2c0f:fa70::,2c0f:fa70:ffff:ffff:ffff:ffff:ffff:ffff,AO
+2c0f:fa78::,2c0f:fa78:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fa80::,2c0f:fa80:ffff:ffff:ffff:ffff:ffff:ffff,AO
+2c0f:fa88::,2c0f:fa88:ffff:ffff:ffff:ffff:ffff:ffff,ST
+2c0f:fa90::,2c0f:fa90:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fa98::,2c0f:fa98:ffff:ffff:ffff:ffff:ffff:ffff,ZW
+2c0f:faa0::,2c0f:faa7:ffff:ffff:ffff:ffff:ffff:ffff,SD
+2c0f:fab0::,2c0f:fabf:ffff:ffff:ffff:ffff:ffff:ffff,TN
+2c0f:fac0::,2c0f:fac0:ffff:ffff:ffff:ffff:ffff:ffff,MW
+2c0f:fac8::,2c0f:fac8:ffff:ffff:ffff:ffff:ffff:ffff,BW
+2c0f:fad0::,2c0f:fad0:ffff:ffff:ffff:ffff:ffff:ffff,RW
+2c0f:fad8::,2c0f:fad8:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2c0f:fae0::,2c0f:fae0:ffff:ffff:ffff:ffff:ffff:ffff,CM
+2c0f:fae8::,2c0f:fae8:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2c0f:faf0::,2c0f:faf0:ffff:ffff:ffff:ffff:ffff:ffff,AO
+2c0f:faf8::,2c0f:faf8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fb00::,2c0f:fb00:ffff:ffff:ffff:ffff:ffff:ffff,UG
+2c0f:fb08::,2c0f:fb08:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fb10::,2c0f:fb10:ffff:ffff:ffff:ffff:ffff:ffff,LY
+2c0f:fb18::,2c0f:fb18:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fb20::,2c0f:fb20:ffff:ffff:ffff:ffff:ffff:ffff,MA
+2c0f:fb28::,2c0f:fb28:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fb30::,2c0f:fb30:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fb38::,2c0f:fb38:ffff:ffff:ffff:ffff:ffff:ffff,SO
+2c0f:fb40::,2c0f:fb40:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fb48::,2c0f:fb48:ffff:ffff:ffff:ffff:ffff:ffff,MZ
+2c0f:fb50::,2c0f:fb50:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2c0f:fb58::,2c0f:fb58:ffff:ffff:ffff:ffff:ffff:ffff,AO
+2c0f:fb60::,2c0f:fb60:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2c0f:fb68::,2c0f:fb68:ffff:ffff:ffff:ffff:ffff:ffff,LS
+2c0f:fb70::,2c0f:fb70:ffff:ffff:ffff:ffff:ffff:ffff,AO
+2c0f:fb78::,2c0f:fb78:ffff:ffff:ffff:ffff:ffff:ffff,TZ
+2c0f:fb80::,2c0f:fb80:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fb88::,2c0f:fb88:ffff:ffff:ffff:ffff:ffff:ffff,TZ
+2c0f:fb90::,2c0f:fb90:ffff:ffff:ffff:ffff:ffff:ffff,MZ
+2c0f:fb98::,2c0f:fb98:ffff:ffff:ffff:ffff:ffff:ffff,NG
+2c0f:fba0::,2c0f:fba0:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fba8::,2c0f:fba8:ffff:ffff:ffff:ffff:ffff:ffff,NG
+2c0f:fbb0::,2c0f:fbb0:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fbb8::,2c0f:fbb8:ffff:ffff:ffff:ffff:ffff:ffff,TZ
+2c0f:fbc0::,2c0f:fbc0:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fbc8::,2c0f:fbc8:ffff:ffff:ffff:ffff:ffff:ffff,UG
+2c0f:fbd0::,2c0f:fbd0:ffff:ffff:ffff:ffff:ffff:ffff,GN
+2c0f:fbd8::,2c0f:fbd8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fbe0::,2c0f:fc1f:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fc40::,2c0f:fc40:ffff:ffff:ffff:ffff:ffff:ffff,EG
+2c0f:fc48::,2c0f:fc48:ffff:ffff:ffff:ffff:ffff:ffff,MW
+2c0f:fc50::,2c0f:fc50:ffff:ffff:ffff:ffff:ffff:ffff,ZW
+2c0f:fc58::,2c0f:fc58:ffff:ffff:ffff:ffff:ffff:ffff,MW
+2c0f:fc60::,2c0f:fc61:ffff:ffff:ffff:ffff:ffff:ffff,NG
+2c0f:fc68::,2c0f:fc68:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fc70::,2c0f:fc70:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2c0f:fc78::,2c0f:fc78:ffff:ffff:ffff:ffff:ffff:ffff,ZW
+2c0f:fc80::,2c0f:fc80:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2c0f:fc88::,2c0f:fc89:ffff:ffff:ffff:ffff:ffff:ffff,EG
+2c0f:fc90::,2c0f:fc90:ffff:ffff:ffff:ffff:ffff:ffff,NG
+2c0f:fc98::,2c0f:fc98:ffff:ffff:ffff:ffff:ffff:ffff,NG
+2c0f:fca0::,2c0f:fca0:ffff:ffff:ffff:ffff:ffff:ffff,GH
+2c0f:fca8::,2c0f:fca8:ffff:ffff:ffff:ffff:ffff:ffff,GH
+2c0f:fcb0::,2c0f:fcb0:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fcb8::,2c0f:fcb8:ffff:ffff:ffff:ffff:ffff:ffff,GM
+2c0f:fcc8::,2c0f:fcc8:ffff:ffff:ffff:ffff:ffff:ffff,ZM
+2c0f:fcd0::,2c0f:fcd0:ffff:ffff:ffff:ffff:ffff:ffff,ZM
+2c0f:fcd8::,2c0f:fcd8:ffff:ffff:ffff:ffff:ffff:ffff,SO
+2c0f:fce0::,2c0f:fce0:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2c0f:fce8::,2c0f:fce8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fcf0::,2c0f:fcf0:ffff:ffff:ffff:ffff:ffff:ffff,TZ
+2c0f:fcf8::,2c0f:fcf8:ffff:ffff:ffff:ffff:ffff:ffff,GH
+2c0f:fd00::,2c0f:fd00:ffff:ffff:ffff:ffff:ffff:ffff,LS
+2c0f:fd08::,2c0f:fd08:ffff:ffff:ffff:ffff:ffff:ffff,GM
+2c0f:fd10::,2c0f:fd10:ffff:ffff:ffff:ffff:ffff:ffff,TZ
+2c0f:fd18::,2c0f:fd18:ffff:ffff:ffff:ffff:ffff:ffff,SC
+2c0f:fd20::,2c0f:fd20:ffff:ffff:ffff:ffff:ffff:ffff,TZ
+2c0f:fd28::,2c0f:fd28:ffff:ffff:ffff:ffff:ffff:ffff,NG
+2c0f:fd30::,2c0f:fd30:ffff:ffff:ffff:ffff:ffff:ffff,TZ
+2c0f:fd38::,2c0f:fd38:ffff:ffff:ffff:ffff:ffff:ffff,NG
+2c0f:fd40::,2c0f:fd40:ffff:ffff:ffff:ffff:ffff:ffff,ZM
+2c0f:fd48::,2c0f:fd48:ffff:ffff:ffff:ffff:ffff:ffff,ZW
+2c0f:fd50::,2c0f:fd50:ffff:ffff:ffff:ffff:ffff:ffff,MW
+2c0f:fd58::,2c0f:fd58:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fd60::,2c0f:fd60:ffff:ffff:ffff:ffff:ffff:ffff,UG
+2c0f:fd68::,2c0f:fd68:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fd70::,2c0f:fd70:ffff:ffff:ffff:ffff:ffff:ffff,UG
+2c0f:fd78::,2c0f:fd78:ffff:ffff:ffff:ffff:ffff:ffff,BI
+2c0f:fd80::,2c0f:fd80:ffff:ffff:ffff:ffff:ffff:ffff,BF
+2c0f:fd88::,2c0f:fd88:ffff:ffff:ffff:ffff:ffff:ffff,GH
+2c0f:fd90::,2c0f:fd90:ffff:ffff:ffff:ffff:ffff:ffff,ZM
+2c0f:fd98::,2c0f:fd98:ffff:ffff:ffff:ffff:ffff:ffff,ZM
+2c0f:fda0::,2c0f:fda0:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fda8::,2c0f:fda8:ffff:ffff:ffff:ffff:ffff:ffff,TZ
+2c0f:fdb0::,2c0f:fdb0:ffff:ffff:ffff:ffff:ffff:ffff,TZ
+2c0f:fdb8::,2c0f:fdb8:ffff:ffff:ffff:ffff:ffff:ffff,UG
+2c0f:fdc0::,2c0f:fdc0:ffff:ffff:ffff:ffff:ffff:ffff,TZ
+2c0f:fdc8::,2c0f:fdc8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fdd0::,2c0f:fdd0:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fdd8::,2c0f:fdd8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fde0::,2c0f:fde0:ffff:ffff:ffff:ffff:ffff:ffff,MW
+2c0f:fde8::,2c0f:fde8:ffff:ffff:ffff:ffff:ffff:ffff,MW
+2c0f:fdf0::,2c0f:fdf0:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fdf8::,2c0f:fdf8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fe08::,2c0f:fe08:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2c0f:fe10::,2c0f:fe10:ffff:ffff:ffff:ffff:ffff:ffff,UG
+2c0f:fe18::,2c0f:fe18:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fe20::,2c0f:fe20:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fe28::,2c0f:fe28:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fe30::,2c0f:fe30:ffff:ffff:ffff:ffff:ffff:ffff,MU
+2c0f:fe38::,2c0f:fe38:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2c0f:fe40::,2c0f:fe40:ffff:ffff:ffff:ffff:ffff:ffff,MU
+2c0f:fe48::,2c0f:fe48:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fe50::,2c0f:fe50:ffff:ffff:ffff:ffff:ffff:ffff,DZ
+2c0f:fe58::,2c0f:fe58:ffff:ffff:ffff:ffff:ffff:ffff,LS
+2c0f:fe60::,2c0f:fe60:ffff:ffff:ffff:ffff:ffff:ffff,RW
+2c0f:fe68::,2c0f:fe68:ffff:ffff:ffff:ffff:ffff:ffff,MU
+2c0f:fe70::,2c0f:fe70:ffff:ffff:ffff:ffff:ffff:ffff,UG
+2c0f:fe78::,2c0f:fe78:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fe80::,2c0f:fe80:ffff:ffff:ffff:ffff:ffff:ffff,ZM
+2c0f:fe88::,2c0f:fe88:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2c0f:fe90::,2c0f:fe90:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fe98::,2c0f:fe98:ffff:ffff:ffff:ffff:ffff:ffff,TZ
+2c0f:fea0::,2c0f:fea0:ffff:ffff:ffff:ffff:ffff:ffff,NG
+2c0f:fea8::,2c0f:fea8:ffff:ffff:ffff:ffff:ffff:ffff,NG
+2c0f:feb0::,2c0f:feb1:ffff:ffff:ffff:ffff:ffff:ffff,MU
+2c0f:feb8::,2c0f:feb8:ffff:ffff:ffff:ffff:ffff:ffff,ZM
+2c0f:fec0::,2c0f:fec0:ffff:ffff:ffff:ffff:ffff:ffff,UG
+2c0f:fec8::,2c0f:fec8:ffff:ffff:ffff:ffff:ffff:ffff,SD
+2c0f:fed8::,2c0f:fed8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fee0::,2c0f:fee0:ffff:ffff:ffff:ffff:ffff:ffff,EG
+2c0f:fef0::,2c0f:fef0:ffff:ffff:ffff:ffff:ffff:ffff,SC
+2c0f:fef8::,2c0f:fef8:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2c0f:ff00::,2c0f:ff00:ffff:ffff:ffff:ffff:ffff:ffff,BW
+2c0f:ff08::,2c0f:ff08:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:ff10::,2c0f:ff10:ffff:ffff:ffff:ffff:ffff:ffff,CD
+2c0f:ff18::,2c0f:ff18:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2c0f:ff20::,2c0f:ff20:ffff:ffff:ffff:ffff:ffff:ffff,NG
+2c0f:ff28::,2c0f:ff28:ffff:ffff:ffff:ffff:ffff:ffff,SD
+2c0f:ff30::,2c0f:ff30:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:ff40::,2c0f:ff80:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:ff88::,2c0f:ff88:ffff:ffff:ffff:ffff:ffff:ffff,NG
+2c0f:ff90::,2c0f:ff90:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2c0f:ff98::,2c0f:ff98:ffff:ffff:ffff:ffff:ffff:ffff,UG
+2c0f:ffa0::,2c0f:ffa0:ffff:ffff:ffff:ffff:ffff:ffff,UG
+2c0f:ffa8::,2c0f:ffa8:ffff:ffff:ffff:ffff:ffff:ffff,LS
+2c0f:ffb0::,2c0f:ffb0:ffff:ffff:ffff:ffff:ffff:ffff,NG
+2c0f:ffb8::,2c0f:ffb8:ffff:ffff:ffff:ffff:ffff:ffff,SD
+2c0f:ffc0::,2c0f:ffc0:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:ffc8::,2c0f:ffc8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:ffd0::,2c0f:ffd0:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:ffd8::,2c0f:ffd8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:ffe0::,2c0f:ffe0:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:ffe8::,2c0f:ffe8:ffff:ffff:ffff:ffff:ffff:ffff,NG
+2c0f:fff0::,2c0f:fff0:ffff:ffff:ffff:ffff:ffff:ffff,NG
diff --git a/src/config/include.am b/src/config/include.am
new file mode 100644
index 000000000..35961b829
--- /dev/null
+++ b/src/config/include.am
@@ -0,0 +1,16 @@
+confdir = $(sysconfdir)/tor
+
+tordatadir = $(datadir)/tor
+
+EXTRA_DIST+= src/config/geoip src/config/geoip6
+# fallback-consensus
+
+conf_DATA = src/config/torrc.sample
+
+tordata_DATA = src/config/geoip src/config/geoip6
+# fallback_consensus
+
+# If we don't have it, fake it.
+src_config_fallback-consensus:
+ touch src/config/fallback-consensus
+
diff --git a/src/config/mmdb-convert.py b/src/config/mmdb-convert.py
new file mode 100644
index 000000000..cbe9acdc5
--- /dev/null
+++ b/src/config/mmdb-convert.py
@@ -0,0 +1,466 @@
+#!/usr/bin/python3
+
+# This software has been dedicated to the public domain under the CC0
+# public domain dedication.
+#
+# To the extent possible under law, the person who associated CC0
+# with mmdb-convert.py has waived all copyright and related or
+# neighboring rights to mmdb-convert.py.
+#
+# You should have received a copy of the CC0 legalcode along with this
+# work in doc/cc0.txt. If not, see
+# <http://creativecommons.org/publicdomain/zero/1.0/>.
+
+# Nick Mathewson is responsible for this kludge, but takes no
+# responsibility for it.
+
+"""This kludge is meant to
+ parse mmdb files in sufficient detail to dump out the old format
+ that Tor expects. It's also meant to be pure-python.
+
+ When given a simplicity/speed tradeoff, it opts for simplicity.
+
+ You will not understand the code without undestanding the MaxMind-DB
+ file format. It is specified at:
+ https://github.com/maxmind/MaxMind-DB/blob/master/MaxMind-DB-spec.md.
+
+ This isn't so much tested. When it breaks, you get to keep both
+ pieces.
+"""
+
+import struct
+import bisect
+import socket
+import binascii
+import sys
+import time
+
+METADATA_MARKER = b'\xab\xcd\xefMaxMind.com'
+
+# Here's some python2/python3 junk. Better solutions wanted.
+try:
+ ord(b"1"[0])
+except TypeError:
+ def byte_to_int(b):
+ "convert a single element of a bytestring to an integer."
+ return b
+else:
+ byte_to_int = ord
+
+# Here's some more python2/python3 junk. Better solutions wanted.
+try:
+ str(b"a", "utf8")
+except TypeError:
+ bytesToStr = str
+else:
+ def bytesToStr(b):
+ "convert a bytestring in utf8 to a string."
+ return str(b, 'utf8')
+
+def to_int(s):
+ "Parse a big-endian integer from bytestring s."
+ result = 0
+ for c in s:
+ result *= 256
+ result += byte_to_int(c)
+ return result
+
+def to_int24(s):
+ "Parse a pair of big-endian 24-bit integers from bytestring s."
+ a, b, c = struct.unpack("!HHH", s)
+ return ((a <<8)+(b>>8)), (((b&0xff)<<16)+c)
+
+def to_int32(s):
+ "Parse a pair of big-endian 32-bit integers from bytestring s."
+ a, b = struct.unpack("!LL", s)
+ return a, b
+
+def to_int28(s):
+ "Parse a pair of big-endian 28-bit integers from bytestring s."
+ a, b = unpack("!LL", s + b'\x00')
+ return (((a & 0xf0) << 20) + (a >> 8)), ((a & 0x0f) << 24) + (b >> 8)
+
+class Tree(object):
+ "Holds a node in the tree"
+ def __init__(self, left, right):
+ self.left = left
+ self.right = right
+
+def resolve_tree(tree, data):
+ """Fill in the left_item and right_item fields for all values in the tree
+ so that they point to another Tree, or to a Datum, or to None."""
+ d = Datum(None, None, None, None)
+ def resolve_item(item):
+ "Helper: resolve a single index."
+ if item < len(tree):
+ return tree[item]
+ elif item == len(tree):
+ return None
+ else:
+ d.pos = (item - len(tree) - 16)
+ p = bisect.bisect_left(data, d)
+ assert data[p].pos == d.pos
+ return data[p]
+
+ for t in tree:
+ t.left_item = resolve_item(t.left)
+ t.right_item = resolve_item(t.right)
+
+def parse_search_tree(s, record_size):
+ """Given a bytestring and a record size in bits, parse the tree.
+ Return a list of nodes."""
+ record_bytes = (record_size*2) // 8
+ nodes = []
+ p = 0
+ try:
+ to_leftright = { 24: to_int24,
+ 28: to_int28,
+ 32: to_int32 }[ record_size ]
+ except KeyError:
+ raise NotImplementedError("Unsupported record size in bits: %d" %
+ record_size)
+ while p < len(s):
+ left, right = to_leftright(s[p:p+record_bytes])
+ p += record_bytes
+
+ nodes.append( Tree(left, right ) )
+
+ return nodes
+
+class Datum(object):
+ """Holds a single entry from the Data section"""
+ def __init__(self, pos, kind, ln, data):
+ self.pos = pos # Position of this record within data section
+ self.kind = kind # Type of this record. one of TP_*
+ self.ln = ln # Length field, which might be overloaded.
+ self.data = data # Raw bytes data.
+ self.children = None # Used for arrays and maps.
+
+ def __repr__(self):
+ return "Datum(%r,%r,%r,%r)" % (self.pos, self.kind, self.ln, self.data)
+
+ # Comparison functions used for bsearch
+ def __lt__(self, other):
+ return self.pos < other.pos
+
+ def __gt__(self, other):
+ return self.pos > other.pos
+
+ def __eq__(self, other):
+ return self.pos == other.pos
+
+ def build_maps(self):
+ """If this is a map or array, fill in its 'map' field if it's a map,
+ and the 'map' field of all its children."""
+
+ if not hasattr(self, 'nChildren'):
+ return
+
+ if self.kind == TP_ARRAY:
+ del self.nChildren
+ for c in self.children:
+ c.build_maps()
+
+ elif self.kind == TP_MAP:
+ del self.nChildren
+ self.map = {}
+ for i in range(0, len(self.children), 2):
+ k = self.children[i].deref()
+ v = self.children[i+1].deref()
+ v.build_maps()
+ if k.kind != TP_UTF8:
+ raise ValueError("Bad dictionary key type %d"% k.kind)
+ self.map[bytesToStr(k.data)] = v
+
+ def int_val(self):
+ """If this is an integer type, return its value"""
+ assert self.kind in (TP_UINT16, TP_UINT32, TP_UINT64,
+ TP_UINT128, TP_SINT32)
+ i = to_int(self.data)
+ if self.kind == TP_SINT32:
+ if i & 0x80000000:
+ i = i - 0x100000000
+ return i
+
+ def deref(self):
+ """If this value is a pointer, return its pointed-to-value. Chase
+ through multiple layers of pointers if need be. If this isn't
+ a pointer, return it."""
+ n = 0
+ s = self
+ while s.kind == TP_PTR:
+ s = s.ptr
+ n += 1
+ assert n < 100
+ return s
+
+def resolve_pointers(data):
+ """Fill in the ptr field of every pointer in data."""
+ search = Datum(None, None, None, None)
+ for d in data:
+ if d.kind == TP_PTR:
+ search.pos = d.ln
+ p = bisect.bisect_left(data, search)
+ assert data[p].pos == d.ln
+ d.ptr = data[p]
+
+TP_PTR = 1
+TP_UTF8 = 2
+TP_DBL = 3
+TP_BYTES = 4
+TP_UINT16 = 5
+TP_UINT32 = 6
+TP_MAP = 7
+TP_SINT32 = 8
+TP_UINT64 = 9
+TP_UINT128 = 10
+TP_ARRAY = 11
+TP_DCACHE = 12
+TP_END = 13
+TP_BOOL = 14
+TP_FLOAT = 15
+
+def get_type_and_len(s):
+ """Data parsing helper: decode the type value and much-overloaded 'length'
+ field for the value starting at s. Return a 3-tuple of type, length,
+ and number of bytes used to encode type-plus-length."""
+ c = byte_to_int(s[0])
+ tp = c >> 5
+ skip = 1
+ if tp == 0:
+ tp = byte_to_int(s[1])+7
+ skip = 2
+ ln = c & 31
+
+ # I'm sure I don't know what they were thinking here...
+ if tp == TP_PTR:
+ len_len = (ln >> 3) + 1
+ if len_len < 4:
+ ln &= 7
+ ln <<= len_len * 8
+ else:
+ ln = 0
+ ln += to_int(s[skip:skip+len_len])
+ ln += (0, 0, 2048, 526336, 0)[len_len]
+ skip += len_len
+ elif ln >= 29:
+ len_len = ln - 28
+ ln = to_int(s[skip:skip+len_len])
+ ln += (0, 29, 285, 65821)[len_len]
+ skip += len_len
+
+ return tp, ln, skip
+
+# Set of types for which 'length' doesn't mean length.
+IGNORE_LEN_TYPES = set([
+ TP_MAP, # Length is number of key-value pairs that follow.
+ TP_ARRAY, # Length is number of members that follow.
+ TP_PTR, # Length is index to pointed-to data element.
+ TP_BOOL, # Length is 0 or 1.
+ TP_DCACHE, # Length isnumber of members that follow
+])
+
+def parse_data_section(s):
+ """Given a data section encoded in a bytestring, return a list of
+ Datum items."""
+
+ # Stack of possibly nested containers. We use the 'nChildren' member of
+ # the last one to tell how many moreitems nest directly inside.
+ stack = []
+
+ # List of all items, including nested ones.
+ data = []
+
+ # Byte index within the data section.
+ pos = 0
+
+ while s:
+ tp, ln, skip = get_type_and_len(s)
+ if tp in IGNORE_LEN_TYPES:
+ real_len = 0
+ else:
+ real_len = ln
+
+ d = Datum(pos, tp, ln, s[skip:skip+real_len])
+ data.append(d)
+ pos += skip+real_len
+ s = s[skip+real_len:]
+
+ if stack:
+ stack[-1].children.append(d)
+ stack[-1].nChildren -= 1
+ if stack[-1].nChildren == 0:
+ del stack[-1]
+
+ if d.kind == TP_ARRAY:
+ d.nChildren = d.ln
+ d.children = []
+ stack.append(d)
+ elif d.kind == TP_MAP:
+ d.nChildren = d.ln * 2
+ d.children = []
+ stack.append(d)
+
+ return data
+
+def parse_mm_file(s):
+ """Parse a MaxMind-DB file."""
+ try:
+ metadata_ptr = s.rindex(METADATA_MARKER)
+ except ValueError:
+ raise ValueError("No metadata!")
+
+ metadata = parse_data_section(s[metadata_ptr+len(METADATA_MARKER):])
+
+ if metadata[0].kind != TP_MAP:
+ raise ValueError("Bad map")
+
+ metadata[0].build_maps()
+ mm = metadata[0].map
+
+ tree_size = (((mm['record_size'].int_val() * 2) // 8 ) *
+ mm['node_count'].int_val())
+
+ if s[tree_size:tree_size+16] != b'\x00'*16:
+ raise ValueError("Missing section separator!")
+
+ tree = parse_search_tree(s[:tree_size], mm['record_size'].int_val())
+
+ data = parse_data_section(s[tree_size+16:metadata_ptr])
+
+ resolve_pointers(data)
+ resolve_tree(tree, data)
+
+ for d in data:
+ d.build_maps()
+
+ return metadata, tree, data
+
+def format_datum(datum):
+ """Given a Datum at a leaf of the tree, return the string that we should
+ write as its value.
+
+ We first try country->iso_code which is the two-character ISO 3166-1
+ country code of the country where MaxMind believes the end user is
+ located. If there's no such key, we try registered_country->iso_code
+ which is the country in which the ISP has registered the IP address.
+ Without falling back to registered_country, we'd leave out all ranges
+ that MaxMind thinks belong to anonymous proxies, because those ranges
+ don't contain country but only registered_country. In short: let's
+ fill all A1 entries with what ARIN et. al think.
+ """
+ try:
+ return bytesToStr(datum.map['country'].map['iso_code'].data)
+ except KeyError:
+ pass
+ try:
+ return bytesToStr(datum.map['registered_country'].map['iso_code'].data)
+ except KeyError:
+ pass
+ return None
+
+IPV4_PREFIX = "0"*96
+
+def dump_item_ipv4(entries, prefix, val):
+ """Dump the information for an IPv4 address to entries, where 'prefix'
+ is a string holding a binary prefix for the address, and 'val' is the
+ value to dump. If the prefix is not an IPv4 address (it does not start
+ with 96 bits of 0), then print nothing.
+ """
+ if not prefix.startswith(IPV4_PREFIX):
+ return
+ prefix = prefix[96:]
+ v = int(prefix, 2)
+ shift = 32 - len(prefix)
+ lo = v << shift
+ hi = ((v+1) << shift) - 1
+ entries.append((lo, hi, val))
+
+def fmt_item_ipv4(entry):
+ """Format an IPv4 range with lo and hi addresses in decimal form."""
+ return "%d,%d,%s\n"%(entry[0], entry[1], entry[2])
+
+def fmt_ipv6_addr(v):
+ """Given a 128-bit integer representing an ipv6 address, return a
+ string for that ipv6 address."""
+ return socket.inet_ntop(socket.AF_INET6, binascii.unhexlify("%032x"%v))
+
+def fmt_item_ipv6(entry):
+ """Format an IPv6 range with lo and hi addresses in hex form."""
+ return "%s,%s,%s\n"%(fmt_ipv6_addr(entry[0]),
+ fmt_ipv6_addr(entry[1]),
+ entry[2])
+
+IPV4_MAPPED_IPV6_PREFIX = "0"*80 + "1"*16
+IPV6_6TO4_PREFIX = "0010000000000010"
+TEREDO_IPV6_PREFIX = "0010000000000001" + "0"*16
+
+def dump_item_ipv6(entries, prefix, val):
+ """Dump the information for an IPv6 address prefix to entries, where
+ 'prefix' is a string holding a binary prefix for the address,
+ and 'val' is the value to dump. If the prefix is an IPv4 address
+ (starts with 96 bits of 0), is an IPv4-mapped IPv6 address
+ (::ffff:0:0/96), or is in the 6to4 mapping subnet (2002::/16), then
+ print nothing.
+ """
+ if prefix.startswith(IPV4_PREFIX) or \
+ prefix.startswith(IPV4_MAPPED_IPV6_PREFIX) or \
+ prefix.startswith(IPV6_6TO4_PREFIX) or \
+ prefix.startswith(TEREDO_IPV6_PREFIX):
+ return
+ v = int(prefix, 2)
+ shift = 128 - len(prefix)
+ lo = v << shift
+ hi = ((v+1) << shift) - 1
+ entries.append((lo, hi, val))
+
+def dump_tree(entries, node, dump_item, prefix=""):
+ """Walk the tree rooted at 'node', and call dump_item on the
+ format_datum output of every leaf of the tree."""
+
+ if isinstance(node, Tree):
+ dump_tree(entries, node.left_item, dump_item, prefix+"0")
+ dump_tree(entries, node.right_item, dump_item, prefix+"1")
+ elif isinstance(node, Datum):
+ assert node.kind == TP_MAP
+ code = format_datum(node)
+ if code:
+ dump_item(entries, prefix, code)
+ else:
+ assert node == None
+
+GEOIP_FILE_HEADER = """\
+# Last updated based on %s Maxmind GeoLite2 Country
+# wget https://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.mmdb.gz
+# gunzip GeoLite2-Country.mmdb.gz
+# python mmdb-convert.py GeoLite2-Country.mmdb
+"""
+
+def write_geoip_file(filename, metadata, the_tree, dump_item, fmt_item):
+ """Write the entries in the_tree to filename."""
+ entries = []
+ dump_tree(entries, the_tree[0], dump_item)
+ fobj = open(filename, 'w')
+
+ build_epoch = metadata[0].map['build_epoch'].int_val()
+ fobj.write(GEOIP_FILE_HEADER %
+ time.strftime('%B %-d %Y', time.gmtime(build_epoch)))
+
+ unwritten = None
+ for entry in entries:
+ if not unwritten:
+ unwritten = entry
+ elif unwritten[1] + 1 == entry[0] and unwritten[2] == entry[2]:
+ unwritten = (unwritten[0], entry[1], unwritten[2])
+ else:
+ fobj.write(fmt_item(unwritten))
+ unwritten = entry
+ if unwritten:
+ fobj.write(fmt_item(unwritten))
+ fobj.close()
+
+content = open(sys.argv[1], 'rb').read()
+metadata, the_tree, _ = parse_mm_file(content)
+
+write_geoip_file('geoip', metadata, the_tree, dump_item_ipv4, fmt_item_ipv4)
+write_geoip_file('geoip6', metadata, the_tree, dump_item_ipv6, fmt_item_ipv6)
diff --git a/src/config/torrc.sample.in b/src/config/torrc.sample.in
index a1a08aa8f..d842fbcaf 100644
--- a/src/config/torrc.sample.in
+++ b/src/config/torrc.sample.in
@@ -1,5 +1,5 @@
## Configuration file for a typical Tor user
-## Last updated 22 April 2012 for Tor 0.2.3.14-alpha.
+## Last updated 9 October 2013 for Tor 0.2.5.2-alpha.
## (may or may not work for much older or much newer versions of Tor.)
##
## Lines that begin with "## " try to explain what's going on. Lines
@@ -16,7 +16,7 @@
## configure one below. Set "SocksPort 0" if you plan to run Tor only
## as a relay, and not make any local application connections yourself.
#SocksPort 9050 # Default: Bind to localhost:9050 for local connections.
-#SocksPort 192.168.0.1:9100 # Bind to this adddress:port too.
+#SocksPort 192.168.0.1:9100 # Bind to this address:port too.
## Entry policies to allow/deny SOCKS requests based on IP address.
## First entry that matches wins. If no SocksPolicy is set, we accept
@@ -120,9 +120,12 @@
## is per month)
#AccountingStart month 3 15:00
-## Contact info to be published in the directory, so we can contact you
-## if your relay is misconfigured or something else goes wrong. Google
-## indexes this, so spammers might also collect it.
+## Administrative contact information for this relay or bridge. This line
+## can be used to contact you if your relay or bridge is misconfigured or
+## something else goes wrong. Note that we archive and publish all
+## descriptors containing these lines and that Google indexes them, so
+## spammers might also collect them. You may want to obscure the fact that
+## it's an email address and/or generate a new address for this purpose.
#ContactInfo Random Person <nobody AT example dot com>
## You might also include your PGP or GPG fingerprint if you have one:
#ContactInfo 0xFFFFFFFF Random Person <nobody AT example dot com>
diff --git a/src/common/OpenBSD_malloc_Linux.c b/src/ext/OpenBSD_malloc_Linux.c
index da8272981..da8272981 100644
--- a/src/common/OpenBSD_malloc_Linux.c
+++ b/src/ext/OpenBSD_malloc_Linux.c
diff --git a/src/ext/README b/src/ext/README
new file mode 100644
index 000000000..5d5a6e151
--- /dev/null
+++ b/src/ext/README
@@ -0,0 +1,51 @@
+
+OpenBSD_malloc_Linux.c:
+
+ The OpenBSD malloc implementation, ported to Linux. Used only when
+ --enable-openbsd-malloc is passed to the configure script.
+
+strlcat.c
+strlcpy.c
+
+ Implementations of strlcat and strlcpy, the more sane replacements
+ for strcat and strcpy. These are nonstandard, and some libc
+ implementations refuse to add them for religious reasons.
+
+eventdns.[ch]
+
+ A fork of Libevent's DNS implementation, used by Tor when Libevent
+ 2.0 or later is not available. Once Libevent 2.0 is required, we
+ should throw this away; it has diverged from evdns.[ch], and is
+ no longer easily mergeable.
+
+ht.h
+
+ An implementation of a hash table in the style of Niels Provos's
+ tree.h. Shared with Libevent.
+
+tinytest.[ch]
+tinytest_demos.c
+tinytest_macros.h
+
+ A unit testing framework. https://github.com/nmathewson/tinytest
+
+tor_queue.h
+
+ A copy of sys/queue.h from OpenBSD. We keep our own copy rather
+ than using sys/queue.h, since some platforms don't have a
+ sys/queue.h, and the ones that do have diverged in incompatible
+ ways. (CIRCLEQ or no CIRCLEQ? SIMPLQ or STAILQ?) We also rename
+ the identifiers with a TOR_ prefix to avoid conflicts with
+ the system headers.
+
+curve25519_donna/*.c
+
+ A copy of Adam Langley's curve25519-donna mostly-portable
+ implementations of curve25519.
+
+csiphash.c
+siphash.h
+
+ Marek Majkowski's implementation of siphash 2-4, a secure keyed
+ hash algorithm to avoid collision-based DoS attacks against hash
+ tables.
diff --git a/src/ext/csiphash.c b/src/ext/csiphash.c
new file mode 100644
index 000000000..c24788603
--- /dev/null
+++ b/src/ext/csiphash.c
@@ -0,0 +1,166 @@
+/* <MIT License>
+ Copyright (c) 2013 Marek Majkowski <marek@popcount.org>
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+ </MIT License>
+
+ Original location:
+ https://github.com/majek/csiphash/
+
+ Solution inspired by code from:
+ Samuel Neves (supercop/crypto_auth/siphash24/little)
+ djb (supercop/crypto_auth/siphash24/little2)
+ Jean-Philippe Aumasson (https://131002.net/siphash/siphash24.c)
+*/
+
+#include "torint.h"
+#include "siphash.h"
+/* for tor_assert */
+#include "util.h"
+/* for memcpy */
+#include <string.h>
+
+#if defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && \
+ __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+# define _le64toh(x) ((uint64_t)(x))
+#elif defined(_WIN32)
+/* Windows is always little endian, unless you're on xbox360
+ http://msdn.microsoft.com/en-us/library/b0084kay(v=vs.80).aspx */
+# define _le64toh(x) ((uint64_t)(x))
+#elif defined(__APPLE__)
+# include <libkern/OSByteOrder.h>
+# define _le64toh(x) OSSwapLittleToHostInt64(x)
+#elif defined(sun) || defined(__sun)
+# include <sys/byteorder.h>
+# define _le64toh(x) LE_64(x)
+
+#else
+
+/* See: http://sourceforge.net/p/predef/wiki/Endianness/ */
+# if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)
+# include <sys/endian.h>
+# else
+# include <endian.h>
+# endif
+# if defined(__BYTE_ORDER) && defined(__LITTLE_ENDIAN) && \
+ __BYTE_ORDER == __LITTLE_ENDIAN
+# define _le64toh(x) ((uint64_t)(x))
+# else
+# if defined(__OpenBSD__)
+# define _le64toh(x) letoh64(x)
+# else
+# define _le64toh(x) le64toh(x)
+# endif
+# endif
+
+#endif
+
+#define ROTATE(x, b) (uint64_t)( ((x) << (b)) | ( (x) >> (64 - (b))) )
+
+#define HALF_ROUND(a,b,c,d,s,t) \
+ a += b; c += d; \
+ b = ROTATE(b, s) ^ a; \
+ d = ROTATE(d, t) ^ c; \
+ a = ROTATE(a, 32);
+
+#define DOUBLE_ROUND(v0,v1,v2,v3) \
+ HALF_ROUND(v0,v1,v2,v3,13,16); \
+ HALF_ROUND(v2,v1,v0,v3,17,21); \
+ HALF_ROUND(v0,v1,v2,v3,13,16); \
+ HALF_ROUND(v2,v1,v0,v3,17,21);
+
+#if 0
+/* This does not seem to save very much runtime in the fast case, and it's
+ * potentially a big loss in the slow case where we're misaligned and we cross
+ * a cache line. */
+#if (defined(__i386) || defined(__i386__) || defined(_M_IX86) || \
+ defined(__x86_64) || defined(__x86_64__) || \
+ defined(_M_AMD64) || defined(_M_X64) || defined(__INTEL__))
+# define UNALIGNED_OK 1
+#endif
+#endif
+
+uint64_t siphash24(const void *src, unsigned long src_sz, const struct sipkey *key) {
+ uint64_t k0 = key->k0;
+ uint64_t k1 = key->k1;
+ uint64_t b = (uint64_t)src_sz << 56;
+ const uint64_t *in = (uint64_t*)src;
+
+ uint64_t t;
+ uint8_t *pt, *m;
+
+ uint64_t v0 = k0 ^ 0x736f6d6570736575ULL;
+ uint64_t v1 = k1 ^ 0x646f72616e646f6dULL;
+ uint64_t v2 = k0 ^ 0x6c7967656e657261ULL;
+ uint64_t v3 = k1 ^ 0x7465646279746573ULL;
+
+ while (src_sz >= 8) {
+#ifdef UNALIGNED_OK
+ uint64_t mi = _le64toh(*in);
+#else
+ uint64_t mi;
+ memcpy(&mi, in, 8);
+ mi = _le64toh(mi);
+#endif
+ in += 1; src_sz -= 8;
+ v3 ^= mi;
+ DOUBLE_ROUND(v0,v1,v2,v3);
+ v0 ^= mi;
+ }
+
+ t = 0; pt = (uint8_t*)&t; m = (uint8_t*)in;
+ switch (src_sz) {
+ case 7: pt[6] = m[6];
+ case 6: pt[5] = m[5];
+ case 5: pt[4] = m[4];
+#ifdef UNALIGNED_OK
+ case 4: *((uint32_t*)&pt[0]) = *((uint32_t*)&m[0]); break;
+#else
+ case 4: pt[3] = m[3];
+#endif
+ case 3: pt[2] = m[2];
+ case 2: pt[1] = m[1];
+ case 1: pt[0] = m[0];
+ }
+ b |= _le64toh(t);
+
+ v3 ^= b;
+ DOUBLE_ROUND(v0,v1,v2,v3);
+ v0 ^= b; v2 ^= 0xff;
+ DOUBLE_ROUND(v0,v1,v2,v3);
+ DOUBLE_ROUND(v0,v1,v2,v3);
+ return (v0 ^ v1) ^ (v2 ^ v3);
+}
+
+
+static int the_siphash_key_is_set = 0;
+static struct sipkey the_siphash_key;
+
+uint64_t siphash24g(const void *src, unsigned long src_sz) {
+ tor_assert(the_siphash_key_is_set);
+ return siphash24(src, src_sz, &the_siphash_key);
+}
+
+void siphash_set_global_key(const struct sipkey *key)
+{
+ tor_assert(! the_siphash_key_is_set);
+ the_siphash_key.k0 = key->k0;
+ the_siphash_key.k1 = key->k1;
+ the_siphash_key_is_set = 1;
+}
diff --git a/src/ext/curve25519_donna/README b/src/ext/curve25519_donna/README
new file mode 100644
index 000000000..9f77bd7d9
--- /dev/null
+++ b/src/ext/curve25519_donna/README
@@ -0,0 +1,44 @@
+See http://code.google.com/p/curve25519-donna/ for details.
+
+BUILDING:
+
+If you run `make`, two .a archives will be built, similar to djb's curve25519
+code. Alternatively, read on:
+
+The C implementation is contained within curve25519-donna.c. It has no external
+dependancies and is BSD licenced. You can copy/include/link it directly in with
+your program. Recommended C flags: -O2
+
+The x86-64 bit implementation is contained within curve25519-donna-x86-64.c and
+curve25519-donna-x86-64.s. Build like this:
+
+% cpp curve25519-donna-x86-64.s > curve25519-donna-x86-64.s.pp
+% as -o curve25519-donna-x86-64.s.o curve25519-donna-x86-64.s.pp
+% gcc -O2 -c curve25519-donna-x86-64.c
+
+Then the two .o files can be linked in
+
+USAGE:
+
+The usage is exactly the same as djb's code (as described at
+http://cr.yp.to/ecdh.html) expect that the function is called curve25519_donna.
+
+In short,
+
+To generate a private key, generate 32 random bytes and:
+
+ mysecret[0] &= 248;
+ mysecret[31] &= 127;
+ mysecret[31] |= 64;
+
+To generate the public key, just do
+
+ static const uint8_t basepoint[32] = {9};
+ curve25519_donna(mypublic, mysecret, basepoint);
+
+To generate an agreed key do:
+ uint8_t shared_key[32];
+ curve25519_donna(shared_key, mysecret, theirpublic);
+
+And hash the shared_key with a cryptographic hash function before using.
+
diff --git a/src/ext/curve25519_donna/curve25519-donna-c64.c b/src/ext/curve25519_donna/curve25519-donna-c64.c
new file mode 100644
index 000000000..b68ff3695
--- /dev/null
+++ b/src/ext/curve25519_donna/curve25519-donna-c64.c
@@ -0,0 +1,451 @@
+/* Copyright 2008, Google Inc.
+ * All rights reserved.
+ *
+ * Code released into the public domain.
+ *
+ * curve25519-donna: Curve25519 elliptic curve, public key function
+ *
+ * http://code.google.com/p/curve25519-donna/
+ *
+ * Adam Langley <agl@imperialviolet.org>
+ *
+ * Derived from public domain C code by Daniel J. Bernstein <djb@cr.yp.to>
+ *
+ * More information about curve25519 can be found here
+ * http://cr.yp.to/ecdh.html
+ *
+ * djb's sample implementation of curve25519 is written in a special assembly
+ * language called qhasm and uses the floating point registers.
+ *
+ * This is, almost, a clean room reimplementation from the curve25519 paper. It
+ * uses many of the tricks described therein. Only the crecip function is taken
+ * from the sample implementation.
+ */
+
+#include "orconfig.h"
+
+#include <string.h>
+#include "torint.h"
+
+typedef uint8_t u8;
+typedef uint64_t limb;
+typedef limb felem[5];
+// This is a special gcc mode for 128-bit integers. It's implemented on 64-bit
+// platforms only as far as I know.
+typedef unsigned uint128_t __attribute__((mode(TI)));
+
+#undef force_inline
+#define force_inline __attribute__((always_inline))
+
+/* Sum two numbers: output += in */
+static inline void force_inline
+fsum(limb *output, const limb *in) {
+ output[0] += in[0];
+ output[1] += in[1];
+ output[2] += in[2];
+ output[3] += in[3];
+ output[4] += in[4];
+}
+
+/* Find the difference of two numbers: output = in - output
+ * (note the order of the arguments!)
+ *
+ * Assumes that out[i] < 2**52
+ * On return, out[i] < 2**55
+ */
+static inline void force_inline
+fdifference_backwards(felem out, const felem in) {
+ /* 152 is 19 << 3 */
+ static const limb two54m152 = (((limb)1) << 54) - 152;
+ static const limb two54m8 = (((limb)1) << 54) - 8;
+
+ out[0] = in[0] + two54m152 - out[0];
+ out[1] = in[1] + two54m8 - out[1];
+ out[2] = in[2] + two54m8 - out[2];
+ out[3] = in[3] + two54m8 - out[3];
+ out[4] = in[4] + two54m8 - out[4];
+}
+
+/* Multiply a number by a scalar: output = in * scalar */
+static inline void force_inline
+fscalar_product(felem output, const felem in, const limb scalar) {
+ uint128_t a;
+
+ a = ((uint128_t) in[0]) * scalar;
+ output[0] = ((limb)a) & 0x7ffffffffffff;
+
+ a = ((uint128_t) in[1]) * scalar + ((limb) (a >> 51));
+ output[1] = ((limb)a) & 0x7ffffffffffff;
+
+ a = ((uint128_t) in[2]) * scalar + ((limb) (a >> 51));
+ output[2] = ((limb)a) & 0x7ffffffffffff;
+
+ a = ((uint128_t) in[3]) * scalar + ((limb) (a >> 51));
+ output[3] = ((limb)a) & 0x7ffffffffffff;
+
+ a = ((uint128_t) in[4]) * scalar + ((limb) (a >> 51));
+ output[4] = ((limb)a) & 0x7ffffffffffff;
+
+ output[0] += (a >> 51) * 19;
+}
+
+/* Multiply two numbers: output = in2 * in
+ *
+ * output must be distinct to both inputs. The inputs are reduced coefficient
+ * form, the output is not.
+ *
+ * Assumes that in[i] < 2**55 and likewise for in2.
+ * On return, output[i] < 2**52
+ */
+static inline void force_inline
+fmul(felem output, const felem in2, const felem in) {
+ uint128_t t[5];
+ limb r0,r1,r2,r3,r4,s0,s1,s2,s3,s4,c;
+
+ r0 = in[0];
+ r1 = in[1];
+ r2 = in[2];
+ r3 = in[3];
+ r4 = in[4];
+
+ s0 = in2[0];
+ s1 = in2[1];
+ s2 = in2[2];
+ s3 = in2[3];
+ s4 = in2[4];
+
+ t[0] = ((uint128_t) r0) * s0;
+ t[1] = ((uint128_t) r0) * s1 + ((uint128_t) r1) * s0;
+ t[2] = ((uint128_t) r0) * s2 + ((uint128_t) r2) * s0 + ((uint128_t) r1) * s1;
+ t[3] = ((uint128_t) r0) * s3 + ((uint128_t) r3) * s0 + ((uint128_t) r1) * s2 + ((uint128_t) r2) * s1;
+ t[4] = ((uint128_t) r0) * s4 + ((uint128_t) r4) * s0 + ((uint128_t) r3) * s1 + ((uint128_t) r1) * s3 + ((uint128_t) r2) * s2;
+
+ r4 *= 19;
+ r1 *= 19;
+ r2 *= 19;
+ r3 *= 19;
+
+ t[0] += ((uint128_t) r4) * s1 + ((uint128_t) r1) * s4 + ((uint128_t) r2) * s3 + ((uint128_t) r3) * s2;
+ t[1] += ((uint128_t) r4) * s2 + ((uint128_t) r2) * s4 + ((uint128_t) r3) * s3;
+ t[2] += ((uint128_t) r4) * s3 + ((uint128_t) r3) * s4;
+ t[3] += ((uint128_t) r4) * s4;
+
+ r0 = (limb)t[0] & 0x7ffffffffffff; c = (limb)(t[0] >> 51);
+ t[1] += c; r1 = (limb)t[1] & 0x7ffffffffffff; c = (limb)(t[1] >> 51);
+ t[2] += c; r2 = (limb)t[2] & 0x7ffffffffffff; c = (limb)(t[2] >> 51);
+ t[3] += c; r3 = (limb)t[3] & 0x7ffffffffffff; c = (limb)(t[3] >> 51);
+ t[4] += c; r4 = (limb)t[4] & 0x7ffffffffffff; c = (limb)(t[4] >> 51);
+ r0 += c * 19; c = r0 >> 51; r0 = r0 & 0x7ffffffffffff;
+ r1 += c; c = r1 >> 51; r1 = r1 & 0x7ffffffffffff;
+ r2 += c;
+
+ output[0] = r0;
+ output[1] = r1;
+ output[2] = r2;
+ output[3] = r3;
+ output[4] = r4;
+}
+
+static inline void force_inline
+fsquare_times(felem output, const felem in, limb count) {
+ uint128_t t[5];
+ limb r0,r1,r2,r3,r4,c;
+ limb d0,d1,d2,d4,d419;
+
+ r0 = in[0];
+ r1 = in[1];
+ r2 = in[2];
+ r3 = in[3];
+ r4 = in[4];
+
+ do {
+ d0 = r0 * 2;
+ d1 = r1 * 2;
+ d2 = r2 * 2 * 19;
+ d419 = r4 * 19;
+ d4 = d419 * 2;
+
+ t[0] = ((uint128_t) r0) * r0 + ((uint128_t) d4) * r1 + (((uint128_t) d2) * (r3 ));
+ t[1] = ((uint128_t) d0) * r1 + ((uint128_t) d4) * r2 + (((uint128_t) r3) * (r3 * 19));
+ t[2] = ((uint128_t) d0) * r2 + ((uint128_t) r1) * r1 + (((uint128_t) d4) * (r3 ));
+ t[3] = ((uint128_t) d0) * r3 + ((uint128_t) d1) * r2 + (((uint128_t) r4) * (d419 ));
+ t[4] = ((uint128_t) d0) * r4 + ((uint128_t) d1) * r3 + (((uint128_t) r2) * (r2 ));
+
+ r0 = (limb)t[0] & 0x7ffffffffffff; c = (limb)(t[0] >> 51);
+ t[1] += c; r1 = (limb)t[1] & 0x7ffffffffffff; c = (limb)(t[1] >> 51);
+ t[2] += c; r2 = (limb)t[2] & 0x7ffffffffffff; c = (limb)(t[2] >> 51);
+ t[3] += c; r3 = (limb)t[3] & 0x7ffffffffffff; c = (limb)(t[3] >> 51);
+ t[4] += c; r4 = (limb)t[4] & 0x7ffffffffffff; c = (limb)(t[4] >> 51);
+ r0 += c * 19; c = r0 >> 51; r0 = r0 & 0x7ffffffffffff;
+ r1 += c; c = r1 >> 51; r1 = r1 & 0x7ffffffffffff;
+ r2 += c;
+ } while(--count);
+
+ output[0] = r0;
+ output[1] = r1;
+ output[2] = r2;
+ output[3] = r3;
+ output[4] = r4;
+}
+
+/* Load a little-endian 64-bit number */
+static limb
+load_limb(const u8 *in) {
+ return
+ ((limb)in[0]) |
+ (((limb)in[1]) << 8) |
+ (((limb)in[2]) << 16) |
+ (((limb)in[3]) << 24) |
+ (((limb)in[4]) << 32) |
+ (((limb)in[5]) << 40) |
+ (((limb)in[6]) << 48) |
+ (((limb)in[7]) << 56);
+}
+
+static void
+store_limb(u8 *out, limb in) {
+ out[0] = in & 0xff;
+ out[1] = (in >> 8) & 0xff;
+ out[2] = (in >> 16) & 0xff;
+ out[3] = (in >> 24) & 0xff;
+ out[4] = (in >> 32) & 0xff;
+ out[5] = (in >> 40) & 0xff;
+ out[6] = (in >> 48) & 0xff;
+ out[7] = (in >> 56) & 0xff;
+}
+
+/* Take a little-endian, 32-byte number and expand it into polynomial form */
+static void
+fexpand(limb *output, const u8 *in) {
+ output[0] = load_limb(in) & 0x7ffffffffffff;
+ output[1] = (load_limb(in+6) >> 3) & 0x7ffffffffffff;
+ output[2] = (load_limb(in+12) >> 6) & 0x7ffffffffffff;
+ output[3] = (load_limb(in+19) >> 1) & 0x7ffffffffffff;
+ output[4] = (load_limb(in+24) >> 12) & 0x7ffffffffffff;
+}
+
+/* Take a fully reduced polynomial form number and contract it into a
+ * little-endian, 32-byte array
+ */
+static void
+fcontract(u8 *output, const felem input) {
+ uint128_t t[5];
+
+ t[0] = input[0];
+ t[1] = input[1];
+ t[2] = input[2];
+ t[3] = input[3];
+ t[4] = input[4];
+
+ t[1] += t[0] >> 51; t[0] &= 0x7ffffffffffff;
+ t[2] += t[1] >> 51; t[1] &= 0x7ffffffffffff;
+ t[3] += t[2] >> 51; t[2] &= 0x7ffffffffffff;
+ t[4] += t[3] >> 51; t[3] &= 0x7ffffffffffff;
+ t[0] += 19 * (t[4] >> 51); t[4] &= 0x7ffffffffffff;
+
+ t[1] += t[0] >> 51; t[0] &= 0x7ffffffffffff;
+ t[2] += t[1] >> 51; t[1] &= 0x7ffffffffffff;
+ t[3] += t[2] >> 51; t[2] &= 0x7ffffffffffff;
+ t[4] += t[3] >> 51; t[3] &= 0x7ffffffffffff;
+ t[0] += 19 * (t[4] >> 51); t[4] &= 0x7ffffffffffff;
+
+ /* now t is between 0 and 2^255-1, properly carried. */
+ /* case 1: between 0 and 2^255-20. case 2: between 2^255-19 and 2^255-1. */
+
+ t[0] += 19;
+
+ t[1] += t[0] >> 51; t[0] &= 0x7ffffffffffff;
+ t[2] += t[1] >> 51; t[1] &= 0x7ffffffffffff;
+ t[3] += t[2] >> 51; t[2] &= 0x7ffffffffffff;
+ t[4] += t[3] >> 51; t[3] &= 0x7ffffffffffff;
+ t[0] += 19 * (t[4] >> 51); t[4] &= 0x7ffffffffffff;
+
+ /* now between 19 and 2^255-1 in both cases, and offset by 19. */
+
+ t[0] += 0x8000000000000 - 19;
+ t[1] += 0x8000000000000 - 1;
+ t[2] += 0x8000000000000 - 1;
+ t[3] += 0x8000000000000 - 1;
+ t[4] += 0x8000000000000 - 1;
+
+ /* now between 2^255 and 2^256-20, and offset by 2^255. */
+
+ t[1] += t[0] >> 51; t[0] &= 0x7ffffffffffff;
+ t[2] += t[1] >> 51; t[1] &= 0x7ffffffffffff;
+ t[3] += t[2] >> 51; t[2] &= 0x7ffffffffffff;
+ t[4] += t[3] >> 51; t[3] &= 0x7ffffffffffff;
+ t[4] &= 0x7ffffffffffff;
+
+ store_limb(output, t[0] | (t[1] << 51));
+ store_limb(output+8, (t[1] >> 13) | (t[2] << 38));
+ store_limb(output+16, (t[2] >> 26) | (t[3] << 25));
+ store_limb(output+24, (t[3] >> 39) | (t[4] << 12));
+}
+
+/* Input: Q, Q', Q-Q'
+ * Output: 2Q, Q+Q'
+ *
+ * x2 z3: long form
+ * x3 z3: long form
+ * x z: short form, destroyed
+ * xprime zprime: short form, destroyed
+ * qmqp: short form, preserved
+ */
+static void
+fmonty(limb *x2, limb *z2, /* output 2Q */
+ limb *x3, limb *z3, /* output Q + Q' */
+ limb *x, limb *z, /* input Q */
+ limb *xprime, limb *zprime, /* input Q' */
+ const limb *qmqp /* input Q - Q' */) {
+ limb origx[5], origxprime[5], zzz[5], xx[5], zz[5], xxprime[5],
+ zzprime[5], zzzprime[5];
+
+ memcpy(origx, x, 5 * sizeof(limb));
+ fsum(x, z);
+ fdifference_backwards(z, origx); // does x - z
+
+ memcpy(origxprime, xprime, sizeof(limb) * 5);
+ fsum(xprime, zprime);
+ fdifference_backwards(zprime, origxprime);
+ fmul(xxprime, xprime, z);
+ fmul(zzprime, x, zprime);
+ memcpy(origxprime, xxprime, sizeof(limb) * 5);
+ fsum(xxprime, zzprime);
+ fdifference_backwards(zzprime, origxprime);
+ fsquare_times(x3, xxprime, 1);
+ fsquare_times(zzzprime, zzprime, 1);
+ fmul(z3, zzzprime, qmqp);
+
+ fsquare_times(xx, x, 1);
+ fsquare_times(zz, z, 1);
+ fmul(x2, xx, zz);
+ fdifference_backwards(zz, xx); // does zz = xx - zz
+ fscalar_product(zzz, zz, 121665);
+ fsum(zzz, xx);
+ fmul(z2, zz, zzz);
+}
+
+// -----------------------------------------------------------------------------
+// Maybe swap the contents of two limb arrays (@a and @b), each @len elements
+// long. Perform the swap iff @swap is non-zero.
+//
+// This function performs the swap without leaking any side-channel
+// information.
+// -----------------------------------------------------------------------------
+static void
+swap_conditional(limb a[5], limb b[5], limb iswap) {
+ unsigned i;
+ const limb swap = -iswap;
+
+ for (i = 0; i < 5; ++i) {
+ const limb x = swap & (a[i] ^ b[i]);
+ a[i] ^= x;
+ b[i] ^= x;
+ }
+}
+
+/* Calculates nQ where Q is the x-coordinate of a point on the curve
+ *
+ * resultx/resultz: the x coordinate of the resulting curve point (short form)
+ * n: a little endian, 32-byte number
+ * q: a point of the curve (short form)
+ */
+static void
+cmult(limb *resultx, limb *resultz, const u8 *n, const limb *q) {
+ limb a[5] = {0}, b[5] = {1}, c[5] = {1}, d[5] = {0};
+ limb *nqpqx = a, *nqpqz = b, *nqx = c, *nqz = d, *t;
+ limb e[5] = {0}, f[5] = {1}, g[5] = {0}, h[5] = {1};
+ limb *nqpqx2 = e, *nqpqz2 = f, *nqx2 = g, *nqz2 = h;
+
+ unsigned i, j;
+
+ memcpy(nqpqx, q, sizeof(limb) * 5);
+
+ for (i = 0; i < 32; ++i) {
+ u8 byte = n[31 - i];
+ for (j = 0; j < 8; ++j) {
+ const limb bit = byte >> 7;
+
+ swap_conditional(nqx, nqpqx, bit);
+ swap_conditional(nqz, nqpqz, bit);
+ fmonty(nqx2, nqz2,
+ nqpqx2, nqpqz2,
+ nqx, nqz,
+ nqpqx, nqpqz,
+ q);
+ swap_conditional(nqx2, nqpqx2, bit);
+ swap_conditional(nqz2, nqpqz2, bit);
+
+ t = nqx;
+ nqx = nqx2;
+ nqx2 = t;
+ t = nqz;
+ nqz = nqz2;
+ nqz2 = t;
+ t = nqpqx;
+ nqpqx = nqpqx2;
+ nqpqx2 = t;
+ t = nqpqz;
+ nqpqz = nqpqz2;
+ nqpqz2 = t;
+
+ byte <<= 1;
+ }
+ }
+
+ memcpy(resultx, nqx, sizeof(limb) * 5);
+ memcpy(resultz, nqz, sizeof(limb) * 5);
+}
+
+
+// -----------------------------------------------------------------------------
+// Shamelessly copied from djb's code, tightened a little
+// -----------------------------------------------------------------------------
+static void
+crecip(felem out, const felem z) {
+ felem a,t0,b,c;
+
+ /* 2 */ fsquare_times(a, z, 1); // a = 2
+ /* 8 */ fsquare_times(t0, a, 2);
+ /* 9 */ fmul(b, t0, z); // b = 9
+ /* 11 */ fmul(a, b, a); // a = 11
+ /* 22 */ fsquare_times(t0, a, 1);
+ /* 2^5 - 2^0 = 31 */ fmul(b, t0, b);
+ /* 2^10 - 2^5 */ fsquare_times(t0, b, 5);
+ /* 2^10 - 2^0 */ fmul(b, t0, b);
+ /* 2^20 - 2^10 */ fsquare_times(t0, b, 10);
+ /* 2^20 - 2^0 */ fmul(c, t0, b);
+ /* 2^40 - 2^20 */ fsquare_times(t0, c, 20);
+ /* 2^40 - 2^0 */ fmul(t0, t0, c);
+ /* 2^50 - 2^10 */ fsquare_times(t0, t0, 10);
+ /* 2^50 - 2^0 */ fmul(b, t0, b);
+ /* 2^100 - 2^50 */ fsquare_times(t0, b, 50);
+ /* 2^100 - 2^0 */ fmul(c, t0, b);
+ /* 2^200 - 2^100 */ fsquare_times(t0, c, 100);
+ /* 2^200 - 2^0 */ fmul(t0, t0, c);
+ /* 2^250 - 2^50 */ fsquare_times(t0, t0, 50);
+ /* 2^250 - 2^0 */ fmul(t0, t0, b);
+ /* 2^255 - 2^5 */ fsquare_times(t0, t0, 5);
+ /* 2^255 - 21 */ fmul(out, t0, a);
+}
+
+int curve25519_donna(u8 *, const u8 *, const u8 *);
+
+int
+curve25519_donna(u8 *mypublic, const u8 *secret, const u8 *basepoint) {
+ limb bp[5], x[5], z[5], zmone[5];
+ uint8_t e[32];
+ int i;
+
+ for (i = 0;i < 32;++i) e[i] = secret[i];
+ e[0] &= 248;
+ e[31] &= 127;
+ e[31] |= 64;
+
+ fexpand(bp, basepoint);
+ cmult(x, z, e, bp);
+ crecip(zmone, z);
+ fmul(z, x, zmone);
+ fcontract(mypublic, z);
+ return 0;
+}
diff --git a/src/ext/curve25519_donna/curve25519-donna.c b/src/ext/curve25519_donna/curve25519-donna.c
new file mode 100644
index 000000000..5c6821ccd
--- /dev/null
+++ b/src/ext/curve25519_donna/curve25519-donna.c
@@ -0,0 +1,732 @@
+/* Copyright 2008, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * curve25519-donna: Curve25519 elliptic curve, public key function
+ *
+ * http://code.google.com/p/curve25519-donna/
+ *
+ * Adam Langley <agl@imperialviolet.org>
+ *
+ * Derived from public domain C code by Daniel J. Bernstein <djb@cr.yp.to>
+ *
+ * More information about curve25519 can be found here
+ * http://cr.yp.to/ecdh.html
+ *
+ * djb's sample implementation of curve25519 is written in a special assembly
+ * language called qhasm and uses the floating point registers.
+ *
+ * This is, almost, a clean room reimplementation from the curve25519 paper. It
+ * uses many of the tricks described therein. Only the crecip function is taken
+ * from the sample implementation.
+ */
+
+#include "orconfig.h"
+
+#include <string.h>
+#include "torint.h"
+
+typedef uint8_t u8;
+typedef int32_t s32;
+typedef int64_t limb;
+
+/* Field element representation:
+ *
+ * Field elements are written as an array of signed, 64-bit limbs, least
+ * significant first. The value of the field element is:
+ * x[0] + 2^26·x[1] + x^51·x[2] + 2^102·x[3] + ...
+ *
+ * i.e. the limbs are 26, 25, 26, 25, ... bits wide.
+ */
+
+/* Sum two numbers: output += in */
+static void fsum(limb *output, const limb *in) {
+ unsigned i;
+ for (i = 0; i < 10; i += 2) {
+ output[0+i] = (output[0+i] + in[0+i]);
+ output[1+i] = (output[1+i] + in[1+i]);
+ }
+}
+
+/* Find the difference of two numbers: output = in - output
+ * (note the order of the arguments!)
+ */
+static void fdifference(limb *output, const limb *in) {
+ unsigned i;
+ for (i = 0; i < 10; ++i) {
+ output[i] = (in[i] - output[i]);
+ }
+}
+
+/* Multiply a number by a scalar: output = in * scalar */
+static void fscalar_product(limb *output, const limb *in, const limb scalar) {
+ unsigned i;
+ for (i = 0; i < 10; ++i) {
+ output[i] = in[i] * scalar;
+ }
+}
+
+/* Multiply two numbers: output = in2 * in
+ *
+ * output must be distinct to both inputs. The inputs are reduced coefficient
+ * form, the output is not.
+ */
+static void fproduct(limb *output, const limb *in2, const limb *in) {
+ output[0] = ((limb) ((s32) in2[0])) * ((s32) in[0]);
+ output[1] = ((limb) ((s32) in2[0])) * ((s32) in[1]) +
+ ((limb) ((s32) in2[1])) * ((s32) in[0]);
+ output[2] = 2 * ((limb) ((s32) in2[1])) * ((s32) in[1]) +
+ ((limb) ((s32) in2[0])) * ((s32) in[2]) +
+ ((limb) ((s32) in2[2])) * ((s32) in[0]);
+ output[3] = ((limb) ((s32) in2[1])) * ((s32) in[2]) +
+ ((limb) ((s32) in2[2])) * ((s32) in[1]) +
+ ((limb) ((s32) in2[0])) * ((s32) in[3]) +
+ ((limb) ((s32) in2[3])) * ((s32) in[0]);
+ output[4] = ((limb) ((s32) in2[2])) * ((s32) in[2]) +
+ 2 * (((limb) ((s32) in2[1])) * ((s32) in[3]) +
+ ((limb) ((s32) in2[3])) * ((s32) in[1])) +
+ ((limb) ((s32) in2[0])) * ((s32) in[4]) +
+ ((limb) ((s32) in2[4])) * ((s32) in[0]);
+ output[5] = ((limb) ((s32) in2[2])) * ((s32) in[3]) +
+ ((limb) ((s32) in2[3])) * ((s32) in[2]) +
+ ((limb) ((s32) in2[1])) * ((s32) in[4]) +
+ ((limb) ((s32) in2[4])) * ((s32) in[1]) +
+ ((limb) ((s32) in2[0])) * ((s32) in[5]) +
+ ((limb) ((s32) in2[5])) * ((s32) in[0]);
+ output[6] = 2 * (((limb) ((s32) in2[3])) * ((s32) in[3]) +
+ ((limb) ((s32) in2[1])) * ((s32) in[5]) +
+ ((limb) ((s32) in2[5])) * ((s32) in[1])) +
+ ((limb) ((s32) in2[2])) * ((s32) in[4]) +
+ ((limb) ((s32) in2[4])) * ((s32) in[2]) +
+ ((limb) ((s32) in2[0])) * ((s32) in[6]) +
+ ((limb) ((s32) in2[6])) * ((s32) in[0]);
+ output[7] = ((limb) ((s32) in2[3])) * ((s32) in[4]) +
+ ((limb) ((s32) in2[4])) * ((s32) in[3]) +
+ ((limb) ((s32) in2[2])) * ((s32) in[5]) +
+ ((limb) ((s32) in2[5])) * ((s32) in[2]) +
+ ((limb) ((s32) in2[1])) * ((s32) in[6]) +
+ ((limb) ((s32) in2[6])) * ((s32) in[1]) +
+ ((limb) ((s32) in2[0])) * ((s32) in[7]) +
+ ((limb) ((s32) in2[7])) * ((s32) in[0]);
+ output[8] = ((limb) ((s32) in2[4])) * ((s32) in[4]) +
+ 2 * (((limb) ((s32) in2[3])) * ((s32) in[5]) +
+ ((limb) ((s32) in2[5])) * ((s32) in[3]) +
+ ((limb) ((s32) in2[1])) * ((s32) in[7]) +
+ ((limb) ((s32) in2[7])) * ((s32) in[1])) +
+ ((limb) ((s32) in2[2])) * ((s32) in[6]) +
+ ((limb) ((s32) in2[6])) * ((s32) in[2]) +
+ ((limb) ((s32) in2[0])) * ((s32) in[8]) +
+ ((limb) ((s32) in2[8])) * ((s32) in[0]);
+ output[9] = ((limb) ((s32) in2[4])) * ((s32) in[5]) +
+ ((limb) ((s32) in2[5])) * ((s32) in[4]) +
+ ((limb) ((s32) in2[3])) * ((s32) in[6]) +
+ ((limb) ((s32) in2[6])) * ((s32) in[3]) +
+ ((limb) ((s32) in2[2])) * ((s32) in[7]) +
+ ((limb) ((s32) in2[7])) * ((s32) in[2]) +
+ ((limb) ((s32) in2[1])) * ((s32) in[8]) +
+ ((limb) ((s32) in2[8])) * ((s32) in[1]) +
+ ((limb) ((s32) in2[0])) * ((s32) in[9]) +
+ ((limb) ((s32) in2[9])) * ((s32) in[0]);
+ output[10] = 2 * (((limb) ((s32) in2[5])) * ((s32) in[5]) +
+ ((limb) ((s32) in2[3])) * ((s32) in[7]) +
+ ((limb) ((s32) in2[7])) * ((s32) in[3]) +
+ ((limb) ((s32) in2[1])) * ((s32) in[9]) +
+ ((limb) ((s32) in2[9])) * ((s32) in[1])) +
+ ((limb) ((s32) in2[4])) * ((s32) in[6]) +
+ ((limb) ((s32) in2[6])) * ((s32) in[4]) +
+ ((limb) ((s32) in2[2])) * ((s32) in[8]) +
+ ((limb) ((s32) in2[8])) * ((s32) in[2]);
+ output[11] = ((limb) ((s32) in2[5])) * ((s32) in[6]) +
+ ((limb) ((s32) in2[6])) * ((s32) in[5]) +
+ ((limb) ((s32) in2[4])) * ((s32) in[7]) +
+ ((limb) ((s32) in2[7])) * ((s32) in[4]) +
+ ((limb) ((s32) in2[3])) * ((s32) in[8]) +
+ ((limb) ((s32) in2[8])) * ((s32) in[3]) +
+ ((limb) ((s32) in2[2])) * ((s32) in[9]) +
+ ((limb) ((s32) in2[9])) * ((s32) in[2]);
+ output[12] = ((limb) ((s32) in2[6])) * ((s32) in[6]) +
+ 2 * (((limb) ((s32) in2[5])) * ((s32) in[7]) +
+ ((limb) ((s32) in2[7])) * ((s32) in[5]) +
+ ((limb) ((s32) in2[3])) * ((s32) in[9]) +
+ ((limb) ((s32) in2[9])) * ((s32) in[3])) +
+ ((limb) ((s32) in2[4])) * ((s32) in[8]) +
+ ((limb) ((s32) in2[8])) * ((s32) in[4]);
+ output[13] = ((limb) ((s32) in2[6])) * ((s32) in[7]) +
+ ((limb) ((s32) in2[7])) * ((s32) in[6]) +
+ ((limb) ((s32) in2[5])) * ((s32) in[8]) +
+ ((limb) ((s32) in2[8])) * ((s32) in[5]) +
+ ((limb) ((s32) in2[4])) * ((s32) in[9]) +
+ ((limb) ((s32) in2[9])) * ((s32) in[4]);
+ output[14] = 2 * (((limb) ((s32) in2[7])) * ((s32) in[7]) +
+ ((limb) ((s32) in2[5])) * ((s32) in[9]) +
+ ((limb) ((s32) in2[9])) * ((s32) in[5])) +
+ ((limb) ((s32) in2[6])) * ((s32) in[8]) +
+ ((limb) ((s32) in2[8])) * ((s32) in[6]);
+ output[15] = ((limb) ((s32) in2[7])) * ((s32) in[8]) +
+ ((limb) ((s32) in2[8])) * ((s32) in[7]) +
+ ((limb) ((s32) in2[6])) * ((s32) in[9]) +
+ ((limb) ((s32) in2[9])) * ((s32) in[6]);
+ output[16] = ((limb) ((s32) in2[8])) * ((s32) in[8]) +
+ 2 * (((limb) ((s32) in2[7])) * ((s32) in[9]) +
+ ((limb) ((s32) in2[9])) * ((s32) in[7]));
+ output[17] = ((limb) ((s32) in2[8])) * ((s32) in[9]) +
+ ((limb) ((s32) in2[9])) * ((s32) in[8]);
+ output[18] = 2 * ((limb) ((s32) in2[9])) * ((s32) in[9]);
+}
+
+/* Reduce a long form to a short form by taking the input mod 2^255 - 19. */
+static void freduce_degree(limb *output) {
+ /* Each of these shifts and adds ends up multiplying the value by 19. */
+ output[8] += output[18] << 4;
+ output[8] += output[18] << 1;
+ output[8] += output[18];
+ output[7] += output[17] << 4;
+ output[7] += output[17] << 1;
+ output[7] += output[17];
+ output[6] += output[16] << 4;
+ output[6] += output[16] << 1;
+ output[6] += output[16];
+ output[5] += output[15] << 4;
+ output[5] += output[15] << 1;
+ output[5] += output[15];
+ output[4] += output[14] << 4;
+ output[4] += output[14] << 1;
+ output[4] += output[14];
+ output[3] += output[13] << 4;
+ output[3] += output[13] << 1;
+ output[3] += output[13];
+ output[2] += output[12] << 4;
+ output[2] += output[12] << 1;
+ output[2] += output[12];
+ output[1] += output[11] << 4;
+ output[1] += output[11] << 1;
+ output[1] += output[11];
+ output[0] += output[10] << 4;
+ output[0] += output[10] << 1;
+ output[0] += output[10];
+}
+
+#if (-1 & 3) != 3
+#error "This code only works on a two's complement system"
+#endif
+
+/* return v / 2^26, using only shifts and adds. */
+static inline limb
+div_by_2_26(const limb v)
+{
+ /* High word of v; no shift needed*/
+ const uint32_t highword = (uint32_t) (((uint64_t) v) >> 32);
+ /* Set to all 1s if v was negative; else set to 0s. */
+ const int32_t sign = ((int32_t) highword) >> 31;
+ /* Set to 0x3ffffff if v was negative; else set to 0. */
+ const int32_t roundoff = ((uint32_t) sign) >> 6;
+ /* Should return v / (1<<26) */
+ return (v + roundoff) >> 26;
+}
+
+/* return v / (2^25), using only shifts and adds. */
+static inline limb
+div_by_2_25(const limb v)
+{
+ /* High word of v; no shift needed*/
+ const uint32_t highword = (uint32_t) (((uint64_t) v) >> 32);
+ /* Set to all 1s if v was negative; else set to 0s. */
+ const int32_t sign = ((int32_t) highword) >> 31;
+ /* Set to 0x1ffffff if v was negative; else set to 0. */
+ const int32_t roundoff = ((uint32_t) sign) >> 7;
+ /* Should return v / (1<<25) */
+ return (v + roundoff) >> 25;
+}
+
+static inline s32
+div_s32_by_2_25(const s32 v)
+{
+ const s32 roundoff = ((uint32_t)(v >> 31)) >> 7;
+ return (v + roundoff) >> 25;
+}
+
+/* Reduce all coefficients of the short form input so that |x| < 2^26.
+ *
+ * On entry: |output[i]| < 2^62
+ */
+static void freduce_coefficients(limb *output) {
+ unsigned i;
+
+ output[10] = 0;
+
+ for (i = 0; i < 10; i += 2) {
+ limb over = div_by_2_26(output[i]);
+ output[i] -= over << 26;
+ output[i+1] += over;
+
+ over = div_by_2_25(output[i+1]);
+ output[i+1] -= over << 25;
+ output[i+2] += over;
+ }
+ /* Now |output[10]| < 2 ^ 38 and all other coefficients are reduced. */
+ output[0] += output[10] << 4;
+ output[0] += output[10] << 1;
+ output[0] += output[10];
+
+ output[10] = 0;
+
+ /* Now output[1..9] are reduced, and |output[0]| < 2^26 + 19 * 2^38
+ * So |over| will be no more than 77825 */
+ {
+ limb over = div_by_2_26(output[0]);
+ output[0] -= over << 26;
+ output[1] += over;
+ }
+
+ /* Now output[0,2..9] are reduced, and |output[1]| < 2^25 + 77825
+ * So |over| will be no more than 1. */
+ {
+ /* output[1] fits in 32 bits, so we can use div_s32_by_2_25 here. */
+ s32 over32 = div_s32_by_2_25((s32) output[1]);
+ output[1] -= over32 << 25;
+ output[2] += over32;
+ }
+
+ /* Finally, output[0,1,3..9] are reduced, and output[2] is "nearly reduced":
+ * we have |output[2]| <= 2^26. This is good enough for all of our math,
+ * but it will require an extra freduce_coefficients before fcontract. */
+}
+
+/* A helpful wrapper around fproduct: output = in * in2.
+ *
+ * output must be distinct to both inputs. The output is reduced degree and
+ * reduced coefficient.
+ */
+static void
+fmul(limb *output, const limb *in, const limb *in2) {
+ limb t[19];
+ fproduct(t, in, in2);
+ freduce_degree(t);
+ freduce_coefficients(t);
+ memcpy(output, t, sizeof(limb) * 10);
+}
+
+static void fsquare_inner(limb *output, const limb *in) {
+ output[0] = ((limb) ((s32) in[0])) * ((s32) in[0]);
+ output[1] = 2 * ((limb) ((s32) in[0])) * ((s32) in[1]);
+ output[2] = 2 * (((limb) ((s32) in[1])) * ((s32) in[1]) +
+ ((limb) ((s32) in[0])) * ((s32) in[2]));
+ output[3] = 2 * (((limb) ((s32) in[1])) * ((s32) in[2]) +
+ ((limb) ((s32) in[0])) * ((s32) in[3]));
+ output[4] = ((limb) ((s32) in[2])) * ((s32) in[2]) +
+ 4 * ((limb) ((s32) in[1])) * ((s32) in[3]) +
+ 2 * ((limb) ((s32) in[0])) * ((s32) in[4]);
+ output[5] = 2 * (((limb) ((s32) in[2])) * ((s32) in[3]) +
+ ((limb) ((s32) in[1])) * ((s32) in[4]) +
+ ((limb) ((s32) in[0])) * ((s32) in[5]));
+ output[6] = 2 * (((limb) ((s32) in[3])) * ((s32) in[3]) +
+ ((limb) ((s32) in[2])) * ((s32) in[4]) +
+ ((limb) ((s32) in[0])) * ((s32) in[6]) +
+ 2 * ((limb) ((s32) in[1])) * ((s32) in[5]));
+ output[7] = 2 * (((limb) ((s32) in[3])) * ((s32) in[4]) +
+ ((limb) ((s32) in[2])) * ((s32) in[5]) +
+ ((limb) ((s32) in[1])) * ((s32) in[6]) +
+ ((limb) ((s32) in[0])) * ((s32) in[7]));
+ output[8] = ((limb) ((s32) in[4])) * ((s32) in[4]) +
+ 2 * (((limb) ((s32) in[2])) * ((s32) in[6]) +
+ ((limb) ((s32) in[0])) * ((s32) in[8]) +
+ 2 * (((limb) ((s32) in[1])) * ((s32) in[7]) +
+ ((limb) ((s32) in[3])) * ((s32) in[5])));
+ output[9] = 2 * (((limb) ((s32) in[4])) * ((s32) in[5]) +
+ ((limb) ((s32) in[3])) * ((s32) in[6]) +
+ ((limb) ((s32) in[2])) * ((s32) in[7]) +
+ ((limb) ((s32) in[1])) * ((s32) in[8]) +
+ ((limb) ((s32) in[0])) * ((s32) in[9]));
+ output[10] = 2 * (((limb) ((s32) in[5])) * ((s32) in[5]) +
+ ((limb) ((s32) in[4])) * ((s32) in[6]) +
+ ((limb) ((s32) in[2])) * ((s32) in[8]) +
+ 2 * (((limb) ((s32) in[3])) * ((s32) in[7]) +
+ ((limb) ((s32) in[1])) * ((s32) in[9])));
+ output[11] = 2 * (((limb) ((s32) in[5])) * ((s32) in[6]) +
+ ((limb) ((s32) in[4])) * ((s32) in[7]) +
+ ((limb) ((s32) in[3])) * ((s32) in[8]) +
+ ((limb) ((s32) in[2])) * ((s32) in[9]));
+ output[12] = ((limb) ((s32) in[6])) * ((s32) in[6]) +
+ 2 * (((limb) ((s32) in[4])) * ((s32) in[8]) +
+ 2 * (((limb) ((s32) in[5])) * ((s32) in[7]) +
+ ((limb) ((s32) in[3])) * ((s32) in[9])));
+ output[13] = 2 * (((limb) ((s32) in[6])) * ((s32) in[7]) +
+ ((limb) ((s32) in[5])) * ((s32) in[8]) +
+ ((limb) ((s32) in[4])) * ((s32) in[9]));
+ output[14] = 2 * (((limb) ((s32) in[7])) * ((s32) in[7]) +
+ ((limb) ((s32) in[6])) * ((s32) in[8]) +
+ 2 * ((limb) ((s32) in[5])) * ((s32) in[9]));
+ output[15] = 2 * (((limb) ((s32) in[7])) * ((s32) in[8]) +
+ ((limb) ((s32) in[6])) * ((s32) in[9]));
+ output[16] = ((limb) ((s32) in[8])) * ((s32) in[8]) +
+ 4 * ((limb) ((s32) in[7])) * ((s32) in[9]);
+ output[17] = 2 * ((limb) ((s32) in[8])) * ((s32) in[9]);
+ output[18] = 2 * ((limb) ((s32) in[9])) * ((s32) in[9]);
+}
+
+static void
+fsquare(limb *output, const limb *in) {
+ limb t[19];
+ fsquare_inner(t, in);
+ freduce_degree(t);
+ freduce_coefficients(t);
+ memcpy(output, t, sizeof(limb) * 10);
+}
+
+/* Take a little-endian, 32-byte number and expand it into polynomial form */
+static void
+fexpand(limb *output, const u8 *input) {
+#define F(n,start,shift,mask) \
+ output[n] = ((((limb) input[start + 0]) | \
+ ((limb) input[start + 1]) << 8 | \
+ ((limb) input[start + 2]) << 16 | \
+ ((limb) input[start + 3]) << 24) >> shift) & mask;
+ F(0, 0, 0, 0x3ffffff);
+ F(1, 3, 2, 0x1ffffff);
+ F(2, 6, 3, 0x3ffffff);
+ F(3, 9, 5, 0x1ffffff);
+ F(4, 12, 6, 0x3ffffff);
+ F(5, 16, 0, 0x1ffffff);
+ F(6, 19, 1, 0x3ffffff);
+ F(7, 22, 3, 0x1ffffff);
+ F(8, 25, 4, 0x3ffffff);
+ F(9, 28, 6, 0x1ffffff);
+#undef F
+}
+
+#if (-32 >> 1) != -16
+#error "This code only works when >> does sign-extension on negative numbers"
+#endif
+
+/* Take a fully reduced polynomial form number and contract it into a
+ * little-endian, 32-byte array
+ */
+static void
+fcontract(u8 *output, limb *input) {
+ int i;
+ int j;
+
+ for (j = 0; j < 2; ++j) {
+ for (i = 0; i < 9; ++i) {
+ if ((i & 1) == 1) {
+ /* This calculation is a time-invariant way to make input[i] positive
+ by borrowing from the next-larger limb.
+ */
+ const s32 mask = (s32)(input[i]) >> 31;
+ const s32 carry = -(((s32)(input[i]) & mask) >> 25);
+ input[i] = (s32)(input[i]) + (carry << 25);
+ input[i+1] = (s32)(input[i+1]) - carry;
+ } else {
+ const s32 mask = (s32)(input[i]) >> 31;
+ const s32 carry = -(((s32)(input[i]) & mask) >> 26);
+ input[i] = (s32)(input[i]) + (carry << 26);
+ input[i+1] = (s32)(input[i+1]) - carry;
+ }
+ }
+ {
+ const s32 mask = (s32)(input[9]) >> 31;
+ const s32 carry = -(((s32)(input[9]) & mask) >> 25);
+ input[9] = (s32)(input[9]) + (carry << 25);
+ input[0] = (s32)(input[0]) - (carry * 19);
+ }
+ }
+
+ /* The first borrow-propagation pass above ended with every limb
+ except (possibly) input[0] non-negative.
+
+ Since each input limb except input[0] is decreased by at most 1
+ by a borrow-propagation pass, the second borrow-propagation pass
+ could only have wrapped around to decrease input[0] again if the
+ first pass left input[0] negative *and* input[1] through input[9]
+ were all zero. In that case, input[1] is now 2^25 - 1, and this
+ last borrow-propagation step will leave input[1] non-negative.
+ */
+ {
+ const s32 mask = (s32)(input[0]) >> 31;
+ const s32 carry = -(((s32)(input[0]) & mask) >> 26);
+ input[0] = (s32)(input[0]) + (carry << 26);
+ input[1] = (s32)(input[1]) - carry;
+ }
+
+ /* Both passes through the above loop, plus the last 0-to-1 step, are
+ necessary: if input[9] is -1 and input[0] through input[8] are 0,
+ negative values will remain in the array until the end.
+ */
+
+ input[1] <<= 2;
+ input[2] <<= 3;
+ input[3] <<= 5;
+ input[4] <<= 6;
+ input[6] <<= 1;
+ input[7] <<= 3;
+ input[8] <<= 4;
+ input[9] <<= 6;
+#define F(i, s) \
+ output[s+0] |= input[i] & 0xff; \
+ output[s+1] = (input[i] >> 8) & 0xff; \
+ output[s+2] = (input[i] >> 16) & 0xff; \
+ output[s+3] = (input[i] >> 24) & 0xff;
+ output[0] = 0;
+ output[16] = 0;
+ F(0,0);
+ F(1,3);
+ F(2,6);
+ F(3,9);
+ F(4,12);
+ F(5,16);
+ F(6,19);
+ F(7,22);
+ F(8,25);
+ F(9,28);
+#undef F
+}
+
+/* Input: Q, Q', Q-Q'
+ * Output: 2Q, Q+Q'
+ *
+ * x2 z3: long form
+ * x3 z3: long form
+ * x z: short form, destroyed
+ * xprime zprime: short form, destroyed
+ * qmqp: short form, preserved
+ */
+static void fmonty(limb *x2, limb *z2, /* output 2Q */
+ limb *x3, limb *z3, /* output Q + Q' */
+ limb *x, limb *z, /* input Q */
+ limb *xprime, limb *zprime, /* input Q' */
+ const limb *qmqp /* input Q - Q' */) {
+ limb origx[10], origxprime[10], zzz[19], xx[19], zz[19], xxprime[19],
+ zzprime[19], zzzprime[19], xxxprime[19];
+
+ memcpy(origx, x, 10 * sizeof(limb));
+ fsum(x, z);
+ fdifference(z, origx); // does x - z
+
+ memcpy(origxprime, xprime, sizeof(limb) * 10);
+ fsum(xprime, zprime);
+ fdifference(zprime, origxprime);
+ fproduct(xxprime, xprime, z);
+ fproduct(zzprime, x, zprime);
+ freduce_degree(xxprime);
+ freduce_coefficients(xxprime);
+ freduce_degree(zzprime);
+ freduce_coefficients(zzprime);
+ memcpy(origxprime, xxprime, sizeof(limb) * 10);
+ fsum(xxprime, zzprime);
+ fdifference(zzprime, origxprime);
+ fsquare(xxxprime, xxprime);
+ fsquare(zzzprime, zzprime);
+ fproduct(zzprime, zzzprime, qmqp);
+ freduce_degree(zzprime);
+ freduce_coefficients(zzprime);
+ memcpy(x3, xxxprime, sizeof(limb) * 10);
+ memcpy(z3, zzprime, sizeof(limb) * 10);
+
+ fsquare(xx, x);
+ fsquare(zz, z);
+ fproduct(x2, xx, zz);
+ freduce_degree(x2);
+ freduce_coefficients(x2);
+ fdifference(zz, xx); // does zz = xx - zz
+ memset(zzz + 10, 0, sizeof(limb) * 9);
+ fscalar_product(zzz, zz, 121665);
+ /* No need to call freduce_degree here:
+ fscalar_product doesn't increase the degree of its input. */
+ freduce_coefficients(zzz);
+ fsum(zzz, xx);
+ fproduct(z2, zz, zzz);
+ freduce_degree(z2);
+ freduce_coefficients(z2);
+}
+
+/* Conditionally swap two reduced-form limb arrays if 'iswap' is 1, but leave
+ * them unchanged if 'iswap' is 0. Runs in data-invariant time to avoid
+ * side-channel attacks.
+ *
+ * NOTE that this function requires that 'iswap' be 1 or 0; other values give
+ * wrong results. Also, the two limb arrays must be in reduced-coefficient,
+ * reduced-degree form: the values in a[10..19] or b[10..19] aren't swapped,
+ * and all all values in a[0..9],b[0..9] must have magnitude less than
+ * INT32_MAX.
+ */
+static void
+swap_conditional(limb a[19], limb b[19], limb iswap) {
+ unsigned i;
+ const s32 swap = (s32) -iswap;
+
+ for (i = 0; i < 10; ++i) {
+ const s32 x = swap & ( ((s32)a[i]) ^ ((s32)b[i]) );
+ a[i] = ((s32)a[i]) ^ x;
+ b[i] = ((s32)b[i]) ^ x;
+ }
+}
+
+/* Calculates nQ where Q is the x-coordinate of a point on the curve
+ *
+ * resultx/resultz: the x coordinate of the resulting curve point (short form)
+ * n: a little endian, 32-byte number
+ * q: a point of the curve (short form)
+ */
+static void
+cmult(limb *resultx, limb *resultz, const u8 *n, const limb *q) {
+ limb a[19] = {0}, b[19] = {1}, c[19] = {1}, d[19] = {0};
+ limb *nqpqx = a, *nqpqz = b, *nqx = c, *nqz = d, *t;
+ limb e[19] = {0}, f[19] = {1}, g[19] = {0}, h[19] = {1};
+ limb *nqpqx2 = e, *nqpqz2 = f, *nqx2 = g, *nqz2 = h;
+
+ unsigned i, j;
+
+ memcpy(nqpqx, q, sizeof(limb) * 10);
+
+ for (i = 0; i < 32; ++i) {
+ u8 byte = n[31 - i];
+ for (j = 0; j < 8; ++j) {
+ const limb bit = byte >> 7;
+
+ swap_conditional(nqx, nqpqx, bit);
+ swap_conditional(nqz, nqpqz, bit);
+ fmonty(nqx2, nqz2,
+ nqpqx2, nqpqz2,
+ nqx, nqz,
+ nqpqx, nqpqz,
+ q);
+ swap_conditional(nqx2, nqpqx2, bit);
+ swap_conditional(nqz2, nqpqz2, bit);
+
+ t = nqx;
+ nqx = nqx2;
+ nqx2 = t;
+ t = nqz;
+ nqz = nqz2;
+ nqz2 = t;
+ t = nqpqx;
+ nqpqx = nqpqx2;
+ nqpqx2 = t;
+ t = nqpqz;
+ nqpqz = nqpqz2;
+ nqpqz2 = t;
+
+ byte <<= 1;
+ }
+ }
+
+ memcpy(resultx, nqx, sizeof(limb) * 10);
+ memcpy(resultz, nqz, sizeof(limb) * 10);
+}
+
+// -----------------------------------------------------------------------------
+// Shamelessly copied from djb's code
+// -----------------------------------------------------------------------------
+static void
+crecip(limb *out, const limb *z) {
+ limb z2[10];
+ limb z9[10];
+ limb z11[10];
+ limb z2_5_0[10];
+ limb z2_10_0[10];
+ limb z2_20_0[10];
+ limb z2_50_0[10];
+ limb z2_100_0[10];
+ limb t0[10];
+ limb t1[10];
+ int i;
+
+ /* 2 */ fsquare(z2,z);
+ /* 4 */ fsquare(t1,z2);
+ /* 8 */ fsquare(t0,t1);
+ /* 9 */ fmul(z9,t0,z);
+ /* 11 */ fmul(z11,z9,z2);
+ /* 22 */ fsquare(t0,z11);
+ /* 2^5 - 2^0 = 31 */ fmul(z2_5_0,t0,z9);
+
+ /* 2^6 - 2^1 */ fsquare(t0,z2_5_0);
+ /* 2^7 - 2^2 */ fsquare(t1,t0);
+ /* 2^8 - 2^3 */ fsquare(t0,t1);
+ /* 2^9 - 2^4 */ fsquare(t1,t0);
+ /* 2^10 - 2^5 */ fsquare(t0,t1);
+ /* 2^10 - 2^0 */ fmul(z2_10_0,t0,z2_5_0);
+
+ /* 2^11 - 2^1 */ fsquare(t0,z2_10_0);
+ /* 2^12 - 2^2 */ fsquare(t1,t0);
+ /* 2^20 - 2^10 */ for (i = 2;i < 10;i += 2) { fsquare(t0,t1); fsquare(t1,t0); }
+ /* 2^20 - 2^0 */ fmul(z2_20_0,t1,z2_10_0);
+
+ /* 2^21 - 2^1 */ fsquare(t0,z2_20_0);
+ /* 2^22 - 2^2 */ fsquare(t1,t0);
+ /* 2^40 - 2^20 */ for (i = 2;i < 20;i += 2) { fsquare(t0,t1); fsquare(t1,t0); }
+ /* 2^40 - 2^0 */ fmul(t0,t1,z2_20_0);
+
+ /* 2^41 - 2^1 */ fsquare(t1,t0);
+ /* 2^42 - 2^2 */ fsquare(t0,t1);
+ /* 2^50 - 2^10 */ for (i = 2;i < 10;i += 2) { fsquare(t1,t0); fsquare(t0,t1); }
+ /* 2^50 - 2^0 */ fmul(z2_50_0,t0,z2_10_0);
+
+ /* 2^51 - 2^1 */ fsquare(t0,z2_50_0);
+ /* 2^52 - 2^2 */ fsquare(t1,t0);
+ /* 2^100 - 2^50 */ for (i = 2;i < 50;i += 2) { fsquare(t0,t1); fsquare(t1,t0); }
+ /* 2^100 - 2^0 */ fmul(z2_100_0,t1,z2_50_0);
+
+ /* 2^101 - 2^1 */ fsquare(t1,z2_100_0);
+ /* 2^102 - 2^2 */ fsquare(t0,t1);
+ /* 2^200 - 2^100 */ for (i = 2;i < 100;i += 2) { fsquare(t1,t0); fsquare(t0,t1); }
+ /* 2^200 - 2^0 */ fmul(t1,t0,z2_100_0);
+
+ /* 2^201 - 2^1 */ fsquare(t0,t1);
+ /* 2^202 - 2^2 */ fsquare(t1,t0);
+ /* 2^250 - 2^50 */ for (i = 2;i < 50;i += 2) { fsquare(t0,t1); fsquare(t1,t0); }
+ /* 2^250 - 2^0 */ fmul(t0,t1,z2_50_0);
+
+ /* 2^251 - 2^1 */ fsquare(t1,t0);
+ /* 2^252 - 2^2 */ fsquare(t0,t1);
+ /* 2^253 - 2^3 */ fsquare(t1,t0);
+ /* 2^254 - 2^4 */ fsquare(t0,t1);
+ /* 2^255 - 2^5 */ fsquare(t1,t0);
+ /* 2^255 - 21 */ fmul(out,t1,z11);
+}
+
+int curve25519_donna(u8 *, const u8 *, const u8 *);
+
+int
+curve25519_donna(u8 *mypublic, const u8 *secret, const u8 *basepoint) {
+ limb bp[10], x[10], z[11], zmone[10];
+ uint8_t e[32];
+ int i;
+
+ for (i = 0; i < 32; ++i) e[i] = secret[i];
+ e[0] &= 248;
+ e[31] &= 127;
+ e[31] |= 64;
+
+ fexpand(bp, basepoint);
+ cmult(x, z, e, bp);
+ crecip(zmone, z);
+ fmul(z, x, zmone);
+ freduce_coefficients(z);
+ fcontract(mypublic, z);
+ return 0;
+}
diff --git a/src/or/eventdns.c b/src/ext/eventdns.c
index 768693aba..2b2988f1e 100644
--- a/src/or/eventdns.c
+++ b/src/ext/eventdns.c
@@ -130,7 +130,7 @@ typedef int socklen_t;
#define mm_realloc(x,y) tor_realloc((x),(y))
#define mm_free(x) tor_free(x)
#define mm_strdup(x) tor_strdup(x)
-#define _mm_free(x) _tor_free(x)
+#define _mm_free(x) tor_free_(x)
#undef MIN
#define MIN(a,b) ((a)<(b)?(a):(b))
@@ -368,7 +368,11 @@ error_is_eagain(int err)
#define CLOSE_SOCKET(x) closesocket(x)
#else
#define last_error(sock) (errno)
+#if EAGAIN != EWOULDBLOCK
+#define error_is_eagain(err) ((err) == EAGAIN || (err) == EWOULDBLOCK)
+#else
#define error_is_eagain(err) ((err) == EAGAIN)
+#endif
#define CLOSE_SOCKET(x) close(x)
#endif
@@ -423,9 +427,9 @@ evdns_set_log_fn(evdns_debug_log_fn_type fn)
#define EVDNS_LOG_CHECK
#endif
-static void _evdns_log(int warn, const char *fmt, ...) EVDNS_LOG_CHECK;
+static void evdns_log(int warn, const char *fmt, ...) EVDNS_LOG_CHECK;
static void
-_evdns_log(int warn, const char *fmt, ...)
+evdns_log(int warn, const char *fmt, ...)
{
va_list args;
static char buf[512];
@@ -442,8 +446,6 @@ _evdns_log(int warn, const char *fmt, ...)
va_end(args);
}
-#define log _evdns_log
-
static int
sockaddr_eq(const struct sockaddr *sa1, const struct sockaddr *sa2,
int include_port)
@@ -530,7 +532,7 @@ nameserver_probe_failed(struct nameserver *const ns) {
ns->failed_times++;
if (add_timeout_event(ns, (struct timeval *) timeout) < 0) {
- log(EVDNS_LOG_WARN,
+ evdns_log(EVDNS_LOG_WARN,
"Error from libevent when adding timer event for %s",
debug_ntop((struct sockaddr *)&ns->address));
/* ???? Do more? */
@@ -546,19 +548,19 @@ nameserver_failed(struct nameserver *const ns, const char *msg) {
/* then don't do anything */
if (!ns->state) return;
- log(EVDNS_LOG_WARN, "Nameserver %s has failed: %s",
+ evdns_log(EVDNS_LOG_WARN, "Nameserver %s has failed: %s",
debug_ntop((struct sockaddr *)&ns->address), msg);
global_good_nameservers--;
assert(global_good_nameservers >= 0);
if (global_good_nameservers == 0) {
- log(EVDNS_LOG_WARN, "All nameservers have failed");
+ evdns_log(EVDNS_LOG_WARN, "All nameservers have failed");
}
ns->state = 0;
ns->failed_times = 1;
if (add_timeout_event(ns, (struct timeval *) &global_nameserver_timeouts[0]) < 0) {
- log(EVDNS_LOG_WARN,
+ evdns_log(EVDNS_LOG_WARN,
"Error from libevent when adding timer event for %s",
debug_ntop((struct sockaddr *)&ns->address));
/* ???? Do more? */
@@ -589,7 +591,7 @@ nameserver_failed(struct nameserver *const ns, const char *msg) {
static void
nameserver_up(struct nameserver *const ns) {
if (ns->state) return;
- log(EVDNS_LOG_WARN, "Nameserver %s is back up",
+ evdns_log(EVDNS_LOG_WARN, "Nameserver %s is back up",
debug_ntop((struct sockaddr *)&ns->address));
del_timeout_event(ns);
ns->state = 1;
@@ -620,7 +622,7 @@ request_finished(struct evdns_request *const req, struct evdns_request **head) {
}
}
- log(EVDNS_LOG_DEBUG, "Removing timeout for request %lx",
+ evdns_log(EVDNS_LOG_DEBUG, "Removing timeout for request %lx",
(unsigned long) req);
del_timeout_event(req);
@@ -772,7 +774,7 @@ reply_handle(struct evdns_request *const req, u16 flags, u32 ttl, struct reply *
* confusing." Treat this as a timeout, not a failure.
*/
/*XXXX refactor the parts of */
- log(EVDNS_LOG_DEBUG, "Got a SERVERFAILED from nameserver %s; "
+ evdns_log(EVDNS_LOG_DEBUG, "Got a SERVERFAILED from nameserver %s; "
"will allow the request to time out.",
debug_ntop((struct sockaddr *)&req->ns->address));
break;
@@ -840,10 +842,11 @@ name_parse(u8 *packet, int length, int *idx, char *name_out, size_t name_out_len
}
if (label_len > 63) return -1;
if (cp != name_out) {
- if (cp + 1 >= end) return -1;
+ if (cp >= name_out + name_out_len - 1) return -1;
*cp++ = '.';
}
- if (cp + label_len >= end) return -1;
+ if (label_len > name_out_len ||
+ cp >= name_out + name_out_len - label_len) return -1;
memcpy(cp, packet + j, label_len);
cp += label_len;
j += label_len;
@@ -1264,7 +1267,7 @@ nameserver_read(struct nameserver *ns) {
}
/* XXX Match port too? */
if (!sockaddr_eq(sa, (struct sockaddr*)&ns->address, 0)) {
- log(EVDNS_LOG_WARN,
+ evdns_log(EVDNS_LOG_WARN,
"Address mismatch on received DNS packet. Address was %s",
debug_ntop(sa));
return;
@@ -1290,7 +1293,7 @@ server_port_read(struct evdns_server_port *s) {
if (r < 0) {
int err = last_error(s->socket);
if (error_is_eagain(err)) return;
- log(EVDNS_LOG_WARN, "Error %s (%d) while reading request.",
+ evdns_log(EVDNS_LOG_WARN, "Error %s (%d) while reading request.",
tor_socket_strerror(err), err);
return;
}
@@ -1310,7 +1313,7 @@ server_port_flush(struct evdns_server_port *port)
int err = last_error(port->socket);
if (error_is_eagain(err))
return;
- log(EVDNS_LOG_WARN, "Error %s (%d) while writing response to port; dropping", tor_socket_strerror(err), err);
+ evdns_log(EVDNS_LOG_WARN, "Error %s (%d) while writing response to port; dropping", tor_socket_strerror(err), err);
}
if (server_request_free(req)) {
/* we released the last reference to req->port. */
@@ -1327,7 +1330,7 @@ server_port_flush(struct evdns_server_port *port)
event_set(&port->event, port->socket, EV_READ | EV_PERSIST,
server_port_ready_callback, port);
if (event_add(&port->event, NULL) < 0) {
- log(EVDNS_LOG_WARN, "Error from libevent when adding event for DNS server.");
+ evdns_log(EVDNS_LOG_WARN, "Error from libevent when adding event for DNS server.");
/* ???? Do more? */
}
}
@@ -1345,7 +1348,7 @@ nameserver_write_waiting(struct nameserver *ns, char waiting) {
event_set(&ns->event, ns->socket, EV_READ | (waiting ? EV_WRITE : 0) | EV_PERSIST,
nameserver_ready_callback, ns);
if (event_add(&ns->event, NULL) < 0) {
- log(EVDNS_LOG_WARN, "Error from libevent when adding event for %s",
+ evdns_log(EVDNS_LOG_WARN, "Error from libevent when adding event for %s",
debug_ntop((struct sockaddr *)&ns->address));
/* ???? Do more? */
}
@@ -1855,7 +1858,7 @@ evdns_server_request_respond(struct evdns_server_request *_req, int err)
event_set(&port->event, port->socket, (port->closing?0:EV_READ) | EV_WRITE | EV_PERSIST, server_port_ready_callback, port);
if (event_add(&port->event, NULL) < 0) {
- log(EVDNS_LOG_WARN, "Error from libevent when adding event for DNS server");
+ evdns_log(EVDNS_LOG_WARN, "Error from libevent when adding event for DNS server");
}
}
@@ -1991,7 +1994,7 @@ evdns_request_timeout_callback(int fd, short events, void *arg) {
(void) fd;
(void) events;
- log(EVDNS_LOG_DEBUG, "Request %lx timed out", (unsigned long) arg);
+ evdns_log(EVDNS_LOG_DEBUG, "Request %lx timed out", (unsigned long) arg);
req->ns->timedout++;
if (req->ns->timedout > global_max_nameserver_timeout) {
@@ -2070,11 +2073,11 @@ evdns_request_transmit(struct evdns_request *req) {
* and make us retransmit the request anyway. */
default:
/* transmitted; we need to check for timeout. */
- log(EVDNS_LOG_DEBUG,
+ evdns_log(EVDNS_LOG_DEBUG,
"Setting timeout for request %lx", (unsigned long) req);
if (add_timeout_event(req, &global_timeout) < 0) {
- log(EVDNS_LOG_WARN,
+ evdns_log(EVDNS_LOG_WARN,
"Error from libevent when adding timer for request %lx",
(unsigned long) req);
/* ???? Do more? */
@@ -2122,7 +2125,7 @@ nameserver_send_probe(struct nameserver *const ns) {
addr = mm_malloc(sizeof(struct sockaddr_storage));
memcpy(addr, &ns->address, sizeof(struct sockaddr_storage));
- log(EVDNS_LOG_DEBUG, "Sending probe to %s", debug_ntop((struct sockaddr *)&ns->address));
+ evdns_log(EVDNS_LOG_DEBUG, "Sending probe to %s", debug_ntop((struct sockaddr *)&ns->address));
req = request_new(TYPE_A, "www.google.com", DNS_QUERY_NO_SEARCH, nameserver_probe_callback, addr);
if (!req) {
@@ -2278,14 +2281,14 @@ _evdns_nameserver_add_impl(const struct sockaddr *address,
if (server) {
do {
if (sockaddr_eq(address, (struct sockaddr *)&server->address, 1)) {
- log(EVDNS_LOG_DEBUG, "Duplicate nameserver.");
+ evdns_log(EVDNS_LOG_DEBUG, "Duplicate nameserver.");
return 3;
}
server = server->next;
} while (server != started_at);
}
if (addrlen > (int)sizeof(ns->address)) {
- log(EVDNS_LOG_DEBUG, "Addrlen %d too long.", (int)addrlen);
+ evdns_log(EVDNS_LOG_DEBUG, "Addrlen %d too long.", (int)addrlen);
return 2;
}
@@ -2296,6 +2299,10 @@ _evdns_nameserver_add_impl(const struct sockaddr *address,
evtimer_set(&ns->timeout_event, nameserver_prod_callback, ns);
+#if 1
+ ns->socket = tor_open_socket_nonblocking(address->sa_family, SOCK_DGRAM, 0);
+ if (!SOCKET_OK(ns->socket)) { err = 1; goto out1; }
+#else
ns->socket = tor_open_socket(address->sa_family, SOCK_DGRAM, 0);
if (ns->socket < 0) { err = 1; goto out1; }
#ifdef _WIN32
@@ -2304,21 +2311,27 @@ _evdns_nameserver_add_impl(const struct sockaddr *address,
ioctlsocket(ns->socket, FIONBIO, &nonblocking);
}
#else
- fcntl(ns->socket, F_SETFL, O_NONBLOCK);
+ if (fcntl(ns->socket, F_SETFL, O_NONBLOCK) == -1) {
+ evdns_log(EVDNS_LOG_WARN, "Error %s (%d) while settings file status flags.",
+ tor_socket_strerror(errno), errno);
+ err = 2;
+ goto out2;
+ }
#endif
+#endif /* 1 */
if (global_bind_addr_is_set &&
!sockaddr_is_loopback((struct sockaddr*)&global_bind_address)) {
if (bind(ns->socket, (struct sockaddr *)&global_bind_address,
global_bind_addrlen) < 0) {
- log(EVDNS_LOG_DEBUG, "Couldn't bind to outgoing address.");
+ evdns_log(EVDNS_LOG_DEBUG, "Couldn't bind to outgoing address.");
err = 2;
goto out2;
}
}
if (connect(ns->socket, address, addrlen) != 0) {
- log(EVDNS_LOG_DEBUG, "Couldn't open socket to nameserver.");
+ evdns_log(EVDNS_LOG_DEBUG, "Couldn't open socket to nameserver.");
err = 2;
goto out2;
}
@@ -2327,12 +2340,12 @@ _evdns_nameserver_add_impl(const struct sockaddr *address,
ns->state = 1;
event_set(&ns->event, ns->socket, EV_READ | EV_PERSIST, nameserver_ready_callback, ns);
if (event_add(&ns->event, NULL) < 0) {
- log(EVDNS_LOG_DEBUG, "Couldn't add event for nameserver.");
+ evdns_log(EVDNS_LOG_DEBUG, "Couldn't add event for nameserver.");
err = 2;
goto out2;
}
- log(EVDNS_LOG_DEBUG, "Added nameserver %s", debug_ntop(address));
+ evdns_log(EVDNS_LOG_DEBUG, "Added nameserver %s", debug_ntop(address));
/* insert this nameserver into the list of them */
if (!server_head) {
@@ -2356,7 +2369,7 @@ out2:
out1:
CLEAR(ns);
mm_free(ns);
- log(EVDNS_LOG_WARN, "Unable to add nameserver %s: error %d", debug_ntop(address), err);
+ evdns_log(EVDNS_LOG_WARN, "Unable to add nameserver %s: error %d", debug_ntop(address), err);
return err;
}
@@ -2389,18 +2402,18 @@ evdns_nameserver_ip_add(const char *ip_as_string) {
* ipv4
*/
- log(EVDNS_LOG_DEBUG, "Trying to add nameserver <%s>", ip_as_string);
+ evdns_log(EVDNS_LOG_DEBUG, "Trying to add nameserver <%s>", ip_as_string);
cp = strchr(ip_as_string, ':');
if (*ip_as_string == '[') {
size_t len;
if (!(cp = strchr(ip_as_string, ']'))) {
- log(EVDNS_LOG_DEBUG, "Nameserver missing closing ]");
+ evdns_log(EVDNS_LOG_DEBUG, "Nameserver missing closing ]");
return 4;
}
len = cp-(ip_as_string + 1);
if (len > sizeof(buf)-1) {
- log(EVDNS_LOG_DEBUG, "[Nameserver] does not fit in buffer.");
+ evdns_log(EVDNS_LOG_DEBUG, "[Nameserver] does not fit in buffer.");
return 4;
}
memcpy(buf, ip_as_string+1, len);
@@ -2418,7 +2431,7 @@ evdns_nameserver_ip_add(const char *ip_as_string) {
} else if (cp) {
is_ipv6 = 0;
if (cp - ip_as_string > (int)sizeof(buf)-1) {
- log(EVDNS_LOG_DEBUG, "Nameserver does not fit in buffer.");
+ evdns_log(EVDNS_LOG_DEBUG, "Nameserver does not fit in buffer.");
return 4;
}
memcpy(buf, ip_as_string, cp-ip_as_string);
@@ -2436,7 +2449,7 @@ evdns_nameserver_ip_add(const char *ip_as_string) {
} else {
port = strtoint(port_part);
if (port <= 0 || port > 65535) {
- log(EVDNS_LOG_DEBUG, "Nameserver port <%s> out of range",
+ evdns_log(EVDNS_LOG_DEBUG, "Nameserver port <%s> out of range",
port_part);
return 4;
}
@@ -2453,7 +2466,7 @@ evdns_nameserver_ip_add(const char *ip_as_string) {
sin6.sin6_family = AF_INET6;
sin6.sin6_port = htons(port);
if (1 != tor_inet_pton(AF_INET6, addr_part, &sin6.sin6_addr)) {
- log(EVDNS_LOG_DEBUG, "inet_pton(%s) failed", addr_part);
+ evdns_log(EVDNS_LOG_DEBUG, "inet_pton(%s) failed", addr_part);
return 4;
}
return _evdns_nameserver_add_impl((struct sockaddr*)&sin6,
@@ -2467,7 +2480,7 @@ evdns_nameserver_ip_add(const char *ip_as_string) {
sin.sin_family = AF_INET;
sin.sin_port = htons(port);
if (!inet_aton(addr_part, &sin.sin_addr)) {
- log(EVDNS_LOG_DEBUG, "inet_pton(%s) failed", addr_part);
+ evdns_log(EVDNS_LOG_DEBUG, "inet_pton(%s) failed", addr_part);
return 4;
}
return _evdns_nameserver_add_impl((struct sockaddr*)&sin,
@@ -2590,7 +2603,7 @@ request_submit(struct evdns_request *const req) {
/* exported function */
int evdns_resolve_ipv4(const char *name, int flags,
evdns_callback_type callback, void *ptr) {
- log(EVDNS_LOG_DEBUG, "Resolve requested for %s", name);
+ evdns_log(EVDNS_LOG_DEBUG, "Resolve requested for %s", name);
if (flags & DNS_QUERY_NO_SEARCH) {
struct evdns_request *const req =
request_new(TYPE_A, name, flags, callback, ptr);
@@ -2606,7 +2619,7 @@ int evdns_resolve_ipv4(const char *name, int flags,
/* exported function */
int evdns_resolve_ipv6(const char *name, int flags,
evdns_callback_type callback, void *ptr) {
- log(EVDNS_LOG_DEBUG, "Resolve requested for %s", name);
+ evdns_log(EVDNS_LOG_DEBUG, "Resolve requested for %s", name);
if (flags & DNS_QUERY_NO_SEARCH) {
struct evdns_request *const req =
request_new(TYPE_AAAA, name, flags, callback, ptr);
@@ -2630,7 +2643,7 @@ int evdns_resolve_reverse(const struct in_addr *in, int flags, evdns_callback_ty
(int)(u8)((a>>8 )&0xff),
(int)(u8)((a>>16)&0xff),
(int)(u8)((a>>24)&0xff));
- log(EVDNS_LOG_DEBUG, "Resolve requested for %s (reverse)", buf);
+ evdns_log(EVDNS_LOG_DEBUG, "Resolve requested for %s (reverse)", buf);
req = request_new(TYPE_PTR, buf, flags, callback, ptr);
if (!req) return 1;
request_submit(req);
@@ -2654,7 +2667,7 @@ int evdns_resolve_reverse_ipv6(const struct in6_addr *in, int flags, evdns_callb
}
assert(cp + strlen("ip6.arpa") < buf+sizeof(buf));
memcpy(cp, "ip6.arpa", strlen("ip6.arpa")+1);
- log(EVDNS_LOG_DEBUG, "Resolve requested for %s (reverse)", buf);
+ evdns_log(EVDNS_LOG_DEBUG, "Resolve requested for %s (reverse)", buf);
req = request_new(TYPE_PTR, buf, flags, callback, ptr);
if (!req) return 1;
request_submit(req);
@@ -2870,7 +2883,7 @@ search_try_next(struct evdns_request *const req) {
if (string_num_dots(req->search_origname) < req->search_state->ndots) {
/* yep, we need to try it raw */
struct evdns_request *const newreq = request_new(req->request_type, req->search_origname, req->search_flags, req->user_callback, req->user_pointer);
- log(EVDNS_LOG_DEBUG, "Search: trying raw query %s", req->search_origname);
+ evdns_log(EVDNS_LOG_DEBUG, "Search: trying raw query %s", req->search_origname);
if (newreq) {
request_submit(newreq);
return 0;
@@ -2881,7 +2894,7 @@ search_try_next(struct evdns_request *const req) {
new_name = search_make_new(req->search_state, req->search_index, req->search_origname);
if (!new_name) return 1;
- log(EVDNS_LOG_DEBUG, "Search: now trying %s (%d)", new_name, req->search_index);
+ evdns_log(EVDNS_LOG_DEBUG, "Search: now trying %s (%d)", new_name, req->search_index);
newreq = request_new(req->request_type, new_name, req->search_flags, req->user_callback, req->user_pointer);
mm_free(new_name);
if (!newreq) return 1;
@@ -2951,7 +2964,7 @@ evdns_set_option(const char *option, const char *val, int flags)
const int ndots = strtoint(val);
if (ndots == -1) return -1;
if (!(flags & DNS_OPTION_SEARCH)) return 0;
- log(EVDNS_LOG_DEBUG, "Setting ndots to %d", ndots);
+ evdns_log(EVDNS_LOG_DEBUG, "Setting ndots to %d", ndots);
if (!global_search_state) global_search_state = search_state_new();
if (!global_search_state) return -1;
global_search_state->ndots = ndots;
@@ -2959,20 +2972,20 @@ evdns_set_option(const char *option, const char *val, int flags)
const int timeout = strtoint(val);
if (timeout == -1) return -1;
if (!(flags & DNS_OPTION_MISC)) return 0;
- log(EVDNS_LOG_DEBUG, "Setting timeout to %d", timeout);
+ evdns_log(EVDNS_LOG_DEBUG, "Setting timeout to %d", timeout);
global_timeout.tv_sec = timeout;
} else if (!strncmp(option, "max-timeouts:", 12)) {
const int maxtimeout = strtoint_clipped(val, 1, 255);
if (maxtimeout == -1) return -1;
if (!(flags & DNS_OPTION_MISC)) return 0;
- log(EVDNS_LOG_DEBUG, "Setting maximum allowed timeouts to %d",
+ evdns_log(EVDNS_LOG_DEBUG, "Setting maximum allowed timeouts to %d",
maxtimeout);
global_max_nameserver_timeout = maxtimeout;
} else if (!strncmp(option, "max-inflight:", 13)) {
const int maxinflight = strtoint_clipped(val, 1, 65000);
if (maxinflight == -1) return -1;
if (!(flags & DNS_OPTION_MISC)) return 0;
- log(EVDNS_LOG_DEBUG, "Setting maximum inflight requests to %d",
+ evdns_log(EVDNS_LOG_DEBUG, "Setting maximum inflight requests to %d",
maxinflight);
global_max_requests_inflight = maxinflight;
} else if (!strncmp(option, "attempts:", 9)) {
@@ -2980,12 +2993,12 @@ evdns_set_option(const char *option, const char *val, int flags)
if (retries == -1) return -1;
if (retries > 255) retries = 255;
if (!(flags & DNS_OPTION_MISC)) return 0;
- log(EVDNS_LOG_DEBUG, "Setting retries to %d", retries);
+ evdns_log(EVDNS_LOG_DEBUG, "Setting retries to %d", retries);
global_max_retransmits = retries;
} else if (!strncmp(option, "randomize-case:", 15)) {
int randcase = strtoint(val);
if (!(flags & DNS_OPTION_MISC)) return 0;
- log(EVDNS_LOG_DEBUG, "Setting randomize_case to %d", randcase);
+ evdns_log(EVDNS_LOG_DEBUG, "Setting randomize_case to %d", randcase);
global_randomize_case = randcase;
}
return 0;
@@ -3002,7 +3015,8 @@ resolv_conf_parse_line(char *const start, int flags) {
if (!strcmp(first_token, "nameserver") && (flags & DNS_OPTION_NAMESERVERS)) {
const char *const nameserver = NEXT_TOKEN;
- evdns_nameserver_ip_add(nameserver);
+ if (nameserver)
+ evdns_nameserver_ip_add(nameserver);
} else if (!strcmp(first_token, "domain") && (flags & DNS_OPTION_SEARCH)) {
const char *const domain = NEXT_TOKEN;
if (domain) {
@@ -3043,7 +3057,7 @@ evdns_resolv_conf_parse(int flags, const char *const filename) {
char *start;
int err = 0;
- log(EVDNS_LOG_DEBUG, "Parsing resolv.conf file %s", filename);
+ evdns_log(EVDNS_LOG_DEBUG, "Parsing resolv.conf file %s", filename);
fd = tor_open_cloexec(filename, O_RDONLY, 0);
if (fd < 0) {
@@ -3142,13 +3156,13 @@ load_nameservers_with_getnetworkparams(void)
GetNetworkParams_fn_t fn;
if (!(handle = load_windows_system_library(TEXT("iphlpapi.dll")))) {
- log(EVDNS_LOG_WARN, "Could not open iphlpapi.dll");
+ evdns_log(EVDNS_LOG_WARN, "Could not open iphlpapi.dll");
/* right now status = 0, doesn't that mean "good" - mikec */
status = -1;
goto done;
}
if (!(fn = (GetNetworkParams_fn_t) GetProcAddress(handle, TEXT("GetNetworkParams")))) {
- log(EVDNS_LOG_WARN, "Could not get address of function.");
+ evdns_log(EVDNS_LOG_WARN, "Could not get address of function.");
/* same as above */
status = -1;
goto done;
@@ -3169,7 +3183,7 @@ load_nameservers_with_getnetworkparams(void)
fixed = buf;
r = fn(fixed, &size);
if (r != ERROR_SUCCESS) {
- log(EVDNS_LOG_DEBUG, "fn() failed.");
+ evdns_log(EVDNS_LOG_DEBUG, "fn() failed.");
status = -1;
goto done;
}
@@ -3181,12 +3195,12 @@ load_nameservers_with_getnetworkparams(void)
while (ns) {
r = evdns_nameserver_ip_add_line(ns->IpAddress.String);
if (r) {
- log(EVDNS_LOG_DEBUG,"Could not add nameserver %s to list, "
+ evdns_log(EVDNS_LOG_DEBUG,"Could not add nameserver %s to list, "
"error: %d; status: %d",
(ns->IpAddress.String),(int)GetLastError(), r);
status = r;
} else {
- log(EVDNS_LOG_DEBUG,"Successfully added %s as nameserver",ns->IpAddress.String);
+ evdns_log(EVDNS_LOG_DEBUG,"Successfully added %s as nameserver",ns->IpAddress.String);
added_any++;
}
@@ -3194,7 +3208,7 @@ load_nameservers_with_getnetworkparams(void)
}
if (!added_any) {
- log(EVDNS_LOG_DEBUG, "No nameservers added.");
+ evdns_log(EVDNS_LOG_DEBUG, "No nameservers added.");
if (status == 0)
status = -1;
} else {
@@ -3250,10 +3264,10 @@ load_nameservers_from_registry(void)
#define TRY(k, name) \
if (!found && config_nameserver_from_reg_key(k,TEXT(name)) == 0) { \
- log(EVDNS_LOG_DEBUG,"Found nameservers in %s/%s",#k,name); \
+ evdns_log(EVDNS_LOG_DEBUG,"Found nameservers in %s/%s",#k,name); \
found = 1; \
} else if (!found) { \
- log(EVDNS_LOG_DEBUG,"Didn't find nameservers in %s/%s", \
+ evdns_log(EVDNS_LOG_DEBUG,"Didn't find nameservers in %s/%s", \
#k,#name); \
}
@@ -3262,14 +3276,14 @@ load_nameservers_from_registry(void)
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, WIN_NS_NT_KEY, 0,
KEY_READ, &nt_key) != ERROR_SUCCESS) {
- log(EVDNS_LOG_DEBUG,"Couldn't open nt key, %d",(int)GetLastError());
+ evdns_log(EVDNS_LOG_DEBUG,"Couldn't open nt key, %d",(int)GetLastError());
return -1;
}
r = RegOpenKeyEx(nt_key, TEXT("Interfaces"), 0,
KEY_QUERY_VALUE|KEY_ENUMERATE_SUB_KEYS,
&interfaces_key);
if (r != ERROR_SUCCESS) {
- log(EVDNS_LOG_DEBUG,"Couldn't open interfaces key, %d",(int)GetLastError());
+ evdns_log(EVDNS_LOG_DEBUG,"Couldn't open interfaces key, %d",(int)GetLastError());
return -1;
}
TRY(nt_key, "NameServer");
@@ -3282,7 +3296,7 @@ load_nameservers_from_registry(void)
HKEY win_key = 0;
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, WIN_NS_9X_KEY, 0,
KEY_READ, &win_key) != ERROR_SUCCESS) {
- log(EVDNS_LOG_DEBUG, "Couldn't open registry key, %d", (int)GetLastError());
+ evdns_log(EVDNS_LOG_DEBUG, "Couldn't open registry key, %d", (int)GetLastError());
return -1;
}
TRY(win_key, "NameServer");
@@ -3290,7 +3304,7 @@ load_nameservers_from_registry(void)
}
if (found == 0) {
- log(EVDNS_LOG_WARN,"Didn't find any nameservers.");
+ evdns_log(EVDNS_LOG_WARN,"Didn't find any nameservers.");
}
return found ? 0 : -1;
@@ -3466,8 +3480,12 @@ main(int c, char **v) {
if (servertest) {
int sock;
struct sockaddr_in my_addr;
+#if 1
+ sock = tor_open_socket_nonblocking(PF_INET, SOCK_DGRAM, 0)
+#else
sock = tor_open_socket(PF_INET, SOCK_DGRAM, 0);
fcntl(sock, F_SETFL, O_NONBLOCK);
+#endif
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(10053);
my_addr.sin_addr.s_addr = INADDR_ANY;
diff --git a/src/or/eventdns.h b/src/ext/eventdns.h
index 1c130b2a1..ad8c100dd 100644
--- a/src/or/eventdns.h
+++ b/src/ext/eventdns.h
@@ -209,8 +209,8 @@
* with the next probe.
*/
-#ifndef _TOR_EVENTDNS_H
-#define _TOR_EVENTDNS_H
+#ifndef TOR_EVENTDNS_H
+#define TOR_EVENTDNS_H
/* Error codes 0-5 are as described in RFC 1035. */
#define DNS_ERR_NONE 0
diff --git a/src/common/ht.h b/src/ext/ht.h
index 25156c416..871f5bbd2 100644
--- a/src/common/ht.h
+++ b/src/ext/ht.h
@@ -1,12 +1,12 @@
/* Copyright (c) 2002, Christopher Clark.
* Copyright (c) 2005-2006, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See license at end. */
/* Based on ideas by Christopher Clark and interfaces from Niels Provos. */
-#ifndef _TOR_HT_H
-#define _TOR_HT_H
+#ifndef HT_H_INCLUDED_
+#define HT_H_INCLUDED_
#define HT_HEAD(name, type) \
struct name { \
@@ -58,6 +58,7 @@
#define HT_NEXT_RMV(name, head, elm) name##_HT_NEXT_RMV((head), (elm))
#define HT_CLEAR(name, head) name##_HT_CLEAR(head)
#define HT_INIT(name, head) name##_HT_INIT(head)
+#define HT_REP_IS_BAD_(name, head) name##_HT_REP_IS_BAD_(head)
/* Helper: */
static INLINE unsigned
ht_improve_hash(unsigned h)
@@ -86,6 +87,7 @@ ht_string_hash(const char *s)
}
#endif
+#if 0
/** Basic string hash function, from Python's str.__hash__() */
static INLINE unsigned
ht_string_hash(const char *s)
@@ -100,6 +102,7 @@ ht_string_hash(const char *s)
h ^= (unsigned)(cp-(const unsigned char*)s);
return h;
}
+#endif
#ifndef HT_NO_CACHE_HASH_VALUES
#define HT_SET_HASH_(elm, field, hashfn) \
@@ -168,7 +171,7 @@ ht_string_hash(const char *s)
} \
/* Insert the element 'elm' into the table 'head'. Do not call this \
* function if the table might already contain a matching element. */ \
- static INLINE void \
+ ATTR_UNUSED static INLINE void \
name##_HT_INSERT(struct name *head, struct type *elm) \
{ \
struct type **p; \
@@ -183,7 +186,7 @@ ht_string_hash(const char *s)
/* Insert the element 'elm' into the table 'head'. If there already \
* a matching element in the table, replace that element and return \
* it. */ \
- static INLINE struct type * \
+ ATTR_UNUSED static INLINE struct type * \
name##_HT_REPLACE(struct name *head, struct type *elm) \
{ \
struct type **p, *r; \
@@ -204,7 +207,7 @@ ht_string_hash(const char *s)
} \
/* Remove any element matching 'elm' from the table 'head'. If such \
* an element is found, return it; otherwise return NULL. */ \
- static INLINE struct type * \
+ ATTR_UNUSED static INLINE struct type * \
name##_HT_REMOVE(struct name *head, struct type *elm) \
{ \
struct type **p, *r; \
@@ -222,11 +225,11 @@ ht_string_hash(const char *s)
* using 'data' as its second argument. If the function returns \
* nonzero, remove the most recently examined element before invoking \
* the function again. */ \
- static INLINE void \
+ ATTR_UNUSED static INLINE void \
name##_HT_FOREACH_FN(struct name *head, \
int (*fn)(struct type *, void *), \
void *data) \
- { \
+{ \
unsigned idx; \
struct type **p, **nextp, *next; \
if (!head->hth_table) \
@@ -248,7 +251,7 @@ ht_string_hash(const char *s)
/* Return a pointer to the first element in the table 'head', under \
* an arbitrary order. This order is stable under remove operations, \
* but not under others. If the table is empty, return NULL. */ \
- static INLINE struct type ** \
+ ATTR_UNUSED static INLINE struct type ** \
name##_HT_START(struct name *head) \
{ \
unsigned b = 0; \
@@ -264,7 +267,7 @@ ht_string_hash(const char *s)
* NULL. If 'elm' is to be removed from the table, you must call \
* this function for the next value before you remove it. \
*/ \
- static INLINE struct type ** \
+ ATTR_UNUSED static INLINE struct type ** \
name##_HT_NEXT(struct name *head, struct type **elm) \
{ \
if ((*elm)->field.hte_next) { \
@@ -280,7 +283,7 @@ ht_string_hash(const char *s)
return NULL; \
} \
} \
- static INLINE struct type ** \
+ ATTR_UNUSED static INLINE struct type ** \
name##_HT_NEXT_RMV(struct name *head, struct type **elm) \
{ \
unsigned h = HT_ELT_HASH_(*elm, field, hashfn); \
@@ -301,14 +304,16 @@ ht_string_hash(const char *s)
#define HT_GENERATE(name, type, field, hashfn, eqfn, load, mallocfn, \
reallocfn, freefn) \
+ /* Primes that aren't too far from powers of two. We stop at */ \
+ /* P=402653189 because P*sizeof(void*) is less than SSIZE_MAX */ \
+ /* even on a 32-bit platform. */ \
static unsigned name##_PRIMES[] = { \
53, 97, 193, 389, \
769, 1543, 3079, 6151, \
12289, 24593, 49157, 98317, \
196613, 393241, 786433, 1572869, \
3145739, 6291469, 12582917, 25165843, \
- 50331653, 100663319, 201326611, 402653189, \
- 805306457, 1610612741 \
+ 50331653, 100663319, 201326611, 402653189 \
}; \
static unsigned name##_N_PRIMES = \
(unsigned)(sizeof(name##_PRIMES)/sizeof(name##_PRIMES[0])); \
diff --git a/src/ext/include.am b/src/ext/include.am
new file mode 100644
index 000000000..26e194e88
--- /dev/null
+++ b/src/ext/include.am
@@ -0,0 +1,18 @@
+
+AM_CPPFLAGS += -I$(srcdir)/src/ext -Isrc/ext
+
+EXTRA_DIST += src/ext/README
+
+EXTHEADERS = \
+ src/ext/ht.h \
+ src/ext/eventdns.h \
+ src/ext/tinytest.h \
+ src/ext/strlcat.c \
+ src/ext/strlcpy.c \
+ src/ext/tinytest_macros.h \
+ src/ext/tor_queue.h \
+ src/ext/siphash.h
+
+noinst_HEADERS+= $(EXTHEADERS)
+
+
diff --git a/src/ext/siphash.h b/src/ext/siphash.h
new file mode 100644
index 000000000..d9b34b898
--- /dev/null
+++ b/src/ext/siphash.h
@@ -0,0 +1,13 @@
+#ifndef SIPHASH_H
+#define SIPHASH_H
+
+struct sipkey {
+ uint64_t k0;
+ uint64_t k1;
+};
+uint64_t siphash24(const void *src, unsigned long src_sz, const struct sipkey *key);
+
+void siphash_set_global_key(const struct sipkey *key);
+uint64_t siphash24g(const void *src, unsigned long src_sz);
+
+#endif
diff --git a/src/common/strlcat.c b/src/ext/strlcat.c
index 316733bcc..316733bcc 100644
--- a/src/common/strlcat.c
+++ b/src/ext/strlcat.c
diff --git a/src/common/strlcpy.c b/src/ext/strlcpy.c
index 9fc47903a..9fc47903a 100644
--- a/src/common/strlcpy.c
+++ b/src/ext/strlcpy.c
diff --git a/src/test/tinytest.c b/src/ext/tinytest.c
index 4d9afacce..cc054ad34 100644
--- a/src/test/tinytest.c
+++ b/src/ext/tinytest.c
@@ -31,6 +31,8 @@
#include <string.h>
#include <assert.h>
+#ifndef NO_FORKING
+
#ifdef _WIN32
#include <windows.h>
#else
@@ -39,6 +41,17 @@
#include <unistd.h>
#endif
+#if defined(__APPLE__) && defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__)
+#if (__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1060 && \
+ __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1070)
+/* Workaround for a stupid bug in OSX 10.6 */
+#define FORK_BREAKS_GCOV
+#include <vproc.h>
+#endif
+#endif
+
+#endif /* !NO_FORKING */
+
#ifndef __GNUC__
#define __attribute__(x)
#endif
@@ -58,6 +71,8 @@ static int opt_nofork = 0; /**< Suppress calls to fork() for debugging. */
static int opt_verbosity = 1; /**< -==quiet,0==terse,1==normal,2==verbose */
const char *verbosity_flag = "";
+const struct testlist_alias_t *cfg_aliases=NULL;
+
enum outcome { SKIP=2, OK=1, FAIL=0 };
static enum outcome cur_test_outcome = 0;
const char *cur_test_prefix = NULL; /**< prefix of the current test group */
@@ -71,6 +86,7 @@ static char commandname[MAX_PATH+1];
static void usage(struct testgroup_t *groups, int list_groups)
__attribute__((noreturn));
+static int process_test_option(struct testgroup_t *groups, const char *test);
static enum outcome
testcase_run_bare_(const struct testcase_t *testcase)
@@ -99,6 +115,8 @@ testcase_run_bare_(const struct testcase_t *testcase)
#define MAGIC_EXITCODE 42
+#ifndef NO_FORKING
+
static enum outcome
testcase_run_forked_(const struct testgroup_t *group,
const struct testcase_t *testcase)
@@ -160,6 +178,9 @@ testcase_run_forked_(const struct testgroup_t *group,
if (opt_verbosity>0)
printf("[forking] ");
pid = fork();
+#ifdef FORK_BREAKS_GCOV
+ vproc_transaction_begin(0);
+#endif
if (!pid) {
/* child. */
int test_r, write_r;
@@ -196,16 +217,19 @@ testcase_run_forked_(const struct testgroup_t *group,
#endif
}
+#endif /* !NO_FORKING */
+
int
testcase_run_one(const struct testgroup_t *group,
const struct testcase_t *testcase)
{
enum outcome outcome;
- if (testcase->flags & TT_SKIP) {
+ if (testcase->flags & (TT_SKIP|TT_OFF_BY_DEFAULT)) {
if (opt_verbosity>0)
- printf("%s%s: SKIPPED\n",
- group->prefix, testcase->name);
+ printf("%s%s: %s\n",
+ group->prefix, testcase->name,
+ (testcase->flags & TT_SKIP) ? "SKIPPED" : "DISABLED");
++n_skipped;
return SKIP;
}
@@ -218,9 +242,13 @@ testcase_run_one(const struct testgroup_t *group,
cur_test_name = testcase->name;
}
+#ifndef NO_FORKING
if ((testcase->flags & TT_FORK) && !(opt_forked||opt_nofork)) {
outcome = testcase_run_forked_(group, testcase);
} else {
+#else
+ {
+#endif
outcome = testcase_run_bare_(testcase);
}
@@ -247,7 +275,7 @@ testcase_run_one(const struct testgroup_t *group,
}
int
-tinytest_set_flag_(struct testgroup_t *groups, const char *arg, unsigned long flag)
+tinytest_set_flag_(struct testgroup_t *groups, const char *arg, int set, unsigned long flag)
{
int i, j;
size_t length = LONGEST_TEST_NAME;
@@ -257,12 +285,23 @@ tinytest_set_flag_(struct testgroup_t *groups, const char *arg, unsigned long fl
length = strstr(arg,"..")-arg;
for (i=0; groups[i].prefix; ++i) {
for (j=0; groups[i].cases[j].name; ++j) {
+ struct testcase_t *testcase = &groups[i].cases[j];
snprintf(fullname, sizeof(fullname), "%s%s",
- groups[i].prefix, groups[i].cases[j].name);
- if (!flag) /* Hack! */
- printf(" %s\n", fullname);
+ groups[i].prefix, testcase->name);
+ if (!flag) { /* Hack! */
+ printf(" %s", fullname);
+ if (testcase->flags & TT_OFF_BY_DEFAULT)
+ puts(" (Off by default)");
+ else if (testcase->flags & TT_SKIP)
+ puts(" (DISABLED)");
+ else
+ puts("");
+ }
if (!strncmp(fullname, arg, length)) {
- groups[i].cases[j].flags |= flag;
+ if (set)
+ testcase->flags |= flag;
+ else
+ testcase->flags &= ~flag;
++found;
}
}
@@ -275,15 +314,69 @@ usage(struct testgroup_t *groups, int list_groups)
{
puts("Options are: [--verbose|--quiet|--terse] [--no-fork]");
puts(" Specify tests by name, or using a prefix ending with '..'");
- puts(" To skip a test, list give its name prefixed with a colon.");
+ puts(" To skip a test, prefix its name with a colon.");
+ puts(" To enable a disabled test, prefix its name with a plus.");
puts(" Use --list-tests for a list of tests.");
if (list_groups) {
puts("Known tests are:");
- tinytest_set_flag_(groups, "..", 0);
+ tinytest_set_flag_(groups, "..", 1, 0);
}
exit(0);
}
+static int
+process_test_alias(struct testgroup_t *groups, const char *test)
+{
+ int i, j, n, r;
+ for (i=0; cfg_aliases && cfg_aliases[i].name; ++i) {
+ if (!strcmp(cfg_aliases[i].name, test)) {
+ n = 0;
+ for (j = 0; cfg_aliases[i].tests[j]; ++j) {
+ r = process_test_option(groups, cfg_aliases[i].tests[j]);
+ if (r<0)
+ return -1;
+ n += r;
+ }
+ return n;
+ }
+ }
+ printf("No such test alias as @%s!",test);
+ return -1;
+}
+
+static int
+process_test_option(struct testgroup_t *groups, const char *test)
+{
+ int flag = TT_ENABLED_;
+ int n = 0;
+ if (test[0] == '@') {
+ return process_test_alias(groups, test + 1);
+ } else if (test[0] == ':') {
+ ++test;
+ flag = TT_SKIP;
+ } else if (test[0] == '+') {
+ ++test;
+ ++n;
+ if (!tinytest_set_flag_(groups, test, 0, TT_OFF_BY_DEFAULT)) {
+ printf("No such test as %s!\n", test);
+ return -1;
+ }
+ } else {
+ ++n;
+ }
+ if (!tinytest_set_flag_(groups, test, 1, flag)) {
+ printf("No such test as %s!\n", test);
+ return -1;
+ }
+ return n;
+}
+
+void
+tinytest_set_aliases(const struct testlist_alias_t *aliases)
+{
+ cfg_aliases = aliases;
+}
+
int
tinytest_main(int c, const char **v, struct testgroup_t *groups)
{
@@ -321,24 +414,18 @@ tinytest_main(int c, const char **v, struct testgroup_t *groups)
return -1;
}
} else {
- const char *test = v[i];
- int flag = TT_ENABLED_;
- if (test[0] == ':') {
- ++test;
- flag = TT_SKIP;
- } else {
- ++n;
- }
- if (!tinytest_set_flag_(groups, test, flag)) {
- printf("No such test as %s!\n", v[i]);
+ int r = process_test_option(groups, v[i]);
+ if (r<0)
return -1;
- }
+ n += r;
}
}
if (!n)
- tinytest_set_flag_(groups, "..", TT_ENABLED_);
+ tinytest_set_flag_(groups, "..", 1, TT_ENABLED_);
+#ifdef _IONBF
setvbuf(stdout, NULL, _IONBF, 0);
+#endif
++in_tinytest_main;
for (i=0; groups[i].prefix; ++i)
@@ -385,3 +472,29 @@ tinytest_set_test_skipped_(void)
cur_test_outcome = SKIP;
}
+char *
+tinytest_format_hex_(const void *val_, unsigned long len)
+{
+ const unsigned char *val = val_;
+ char *result, *cp;
+ size_t i;
+ int ellipses = 0;
+
+ if (!val)
+ return strdup("null");
+ if (len > 1024) {
+ ellipses = 3;
+ len = 1024;
+ }
+ if (!(result = malloc(len*2+4)))
+ return strdup("<allocation failure>");
+ cp = result;
+ for (i=0;i<len;++i) {
+ *cp++ = "0123456789ABCDEF"[val[i] >> 4];
+ *cp++ = "0123456789ABCDEF"[val[i] & 0x0f];
+ }
+ while (ellipses--)
+ *cp++ = '.';
+ *cp = 0;
+ return result;
+}
diff --git a/src/test/tinytest.h b/src/ext/tinytest.h
index bcac9f079..ed07b26bc 100644
--- a/src/test/tinytest.h
+++ b/src/ext/tinytest.h
@@ -32,8 +32,10 @@
#define TT_SKIP (1<<1)
/** Internal runtime flag for a test we've decided to run. */
#define TT_ENABLED_ (1<<2)
+/** Flag for a test that's off by default. */
+#define TT_OFF_BY_DEFAULT (1<<3)
/** If you add your own flags, make them start at this point. */
-#define TT_FIRST_USER_FLAG (1<<3)
+#define TT_FIRST_USER_FLAG (1<<4)
typedef void (*testcase_fn)(void *);
@@ -64,6 +66,12 @@ struct testgroup_t {
};
#define END_OF_GROUPS { NULL, NULL}
+struct testlist_alias_t {
+ const char *name;
+ const char **tests;
+};
+#define END_OF_ALIASES { NULL, NULL }
+
/** Implementation: called from a test to indicate failure, before logging. */
void tinytest_set_test_failed_(void);
/** Implementation: called from a test to indicate that we're skipping. */
@@ -72,14 +80,19 @@ void tinytest_set_test_skipped_(void);
int tinytest_get_verbosity_(void);
/** Implementation: Set a flag on tests matching a name; returns number
* of tests that matched. */
-int tinytest_set_flag_(struct testgroup_t *, const char *, unsigned long);
+int tinytest_set_flag_(struct testgroup_t *, const char *, int set, unsigned long);
+/** Implementation: Put a chunk of memory into hex. */
+char *tinytest_format_hex_(const void *, unsigned long);
/** Set all tests in 'groups' matching the name 'named' to be skipped. */
#define tinytest_skip(groups, named) \
- tinytest_set_flag_(groups, named, TT_SKIP)
+ tinytest_set_flag_(groups, named, 1, TT_SKIP)
/** Run a single testcase in a single group. */
int testcase_run_one(const struct testgroup_t *,const struct testcase_t *);
+
+void tinytest_set_aliases(const struct testlist_alias_t *aliases);
+
/** Run a set of testcases from an END_OF_GROUPS-terminated array of groups,
as selected from the command line. */
int tinytest_main(int argc, const char **argv, struct testgroup_t *groups);
diff --git a/src/test/tinytest_demo.c b/src/ext/tinytest_demo.c
index be95ce4c1..634e112cb 100644
--- a/src/test/tinytest_demo.c
+++ b/src/ext/tinytest_demo.c
@@ -35,6 +35,13 @@
#include <stdlib.h>
#include <string.h>
#include <errno.h>
+#include <time.h>
+
+#ifdef _WIN32
+#include <windows.h>
+#else
+#include <unistd.h>
+#endif
/* ============================================================ */
@@ -148,6 +155,10 @@ test_memcpy(void *ptr)
memcpy(db->buffer2, db->buffer1, sizeof(db->buffer1));
tt_str_op(db->buffer1, ==, db->buffer2);
+ /* tt_mem_op() does a memcmp, as opposed to the strcmp in tt_str_op() */
+ db->buffer2[100] = 3; /* Make the buffers unequal */
+ tt_mem_op(db->buffer1, <, db->buffer2, sizeof(db->buffer1));
+
/* Now we've allocated memory that's referenced by a local variable.
The end block of the function will clean it up. */
mem = strdup("Hello world.");
@@ -162,6 +173,27 @@ test_memcpy(void *ptr)
free(mem);
}
+void
+test_timeout(void *ptr)
+{
+ time_t t1, t2;
+ (void)ptr;
+ t1 = time(NULL);
+#ifdef _WIN32
+ Sleep(5000);
+#else
+ sleep(5);
+#endif
+ t2 = time(NULL);
+
+ tt_int_op(t2-t1, >=, 4);
+
+ tt_int_op(t2-t1, <=, 6);
+
+ end:
+ ;
+}
+
/* ============================================================ */
/* Now we need to make sure that our tests get invoked. First, you take
@@ -178,6 +210,10 @@ struct testcase_t demo_tests[] = {
its environment. */
{ "memcpy", test_memcpy, TT_FORK, &data_buffer_setup },
+ /* This flag is off-by-default, since it takes a while to run. You
+ * can enable it manually by passing +demo/timeout at the command line.*/
+ { "timeout", test_timeout, TT_OFF_BY_DEFAULT },
+
/* The array has to end with END_OF_TESTCASES. */
END_OF_TESTCASES
};
@@ -192,6 +228,18 @@ struct testgroup_t groups[] = {
END_OF_GROUPS
};
+/* We can also define test aliases. These can be used for types of tests that
+ * cut across groups. */
+const char *alltests[] = { "+..", NULL };
+const char *slowtests[] = { "+demo/timeout", NULL };
+struct testlist_alias_t aliases[] = {
+
+ { "ALL", alltests },
+ { "SLOW", slowtests },
+
+ END_OF_ALIASES
+};
+
int
main(int c, const char **v)
@@ -211,5 +259,6 @@ main(int c, const char **v)
"tinytest-demo" and "tinytest-demo .." mean the same thing.
*/
+ tinytest_set_aliases(aliases);
return tinytest_main(c, v, groups);
}
diff --git a/src/test/tinytest_macros.h b/src/ext/tinytest_macros.h
index 9ff69b1d5..c3728d1fd 100644
--- a/src/test/tinytest_macros.h
+++ b/src/ext/tinytest_macros.h
@@ -113,8 +113,8 @@
#define tt_assert_test_fmt_type(a,b,str_test,type,test,printf_type,printf_fmt, \
setup_block,cleanup_block,die_on_fail) \
TT_STMT_BEGIN \
- type val1_ = (type)(a); \
- type val2_ = (type)(b); \
+ type val1_ = (a); \
+ type val2_ = (b); \
int tt_status_ = (test); \
if (!tt_status_ || tinytest_get_verbosity_()>1) { \
printf_type print_; \
@@ -144,6 +144,10 @@
tt_assert_test_fmt_type(a,b,str_test,type,test,type,fmt, \
{print_=value_;},{},die_on_fail)
+#define tt_assert_test_type_opt(a,b,str_test,type,test,fmt,die_on_fail) \
+ tt_assert_test_fmt_type(a,b,str_test,type,test,type,fmt, \
+ {print_=value_?value_:"<NULL>";},{},die_on_fail)
+
/* Helper: assert that a op b, when cast to type. Format the values with
* printf format fmt on failure. */
#define tt_assert_op_type(a,op,b,type,fmt) \
@@ -159,12 +163,23 @@
(val1_ op val2_),"%lu",TT_EXIT_TEST_FUNCTION)
#define tt_ptr_op(a,op,b) \
- tt_assert_test_type(a,b,#a" "#op" "#b,void*, \
+ tt_assert_test_type(a,b,#a" "#op" "#b,const void*, \
(val1_ op val2_),"%p",TT_EXIT_TEST_FUNCTION)
#define tt_str_op(a,op,b) \
- tt_assert_test_type(a,b,#a" "#op" "#b,const char *, \
- (strcmp(val1_,val2_) op 0),"<%s>",TT_EXIT_TEST_FUNCTION)
+ tt_assert_test_type_opt(a,b,#a" "#op" "#b,const char *, \
+ (val1_ && val2_ && strcmp(val1_,val2_) op 0),"<%s>", \
+ TT_EXIT_TEST_FUNCTION)
+
+#define tt_mem_op(expr1, op, expr2, len) \
+ tt_assert_test_fmt_type(expr1,expr2,#expr1" "#op" "#expr2, \
+ const void *, \
+ (val1_ && val2_ && memcmp(val1_, val2_, len) op 0), \
+ char *, "%s", \
+ { print_ = tinytest_format_hex_(value_, (len)); }, \
+ { if (print_) free(print_); }, \
+ TT_EXIT_TEST_FUNCTION \
+ );
#define tt_want_int_op(a,op,b) \
tt_assert_test_type(a,b,#a" "#op" "#b,long,(val1_ op val2_),"%ld",(void)0)
@@ -174,7 +189,7 @@
(val1_ op val2_),"%lu",(void)0)
#define tt_want_ptr_op(a,op,b) \
- tt_assert_test_type(a,b,#a" "#op" "#b,void*, \
+ tt_assert_test_type(a,b,#a" "#op" "#b,const void*, \
(val1_ op val2_),"%p",(void)0)
#define tt_want_str_op(a,op,b) \
diff --git a/src/ext/tor_queue.h b/src/ext/tor_queue.h
new file mode 100644
index 000000000..f05e48c18
--- /dev/null
+++ b/src/ext/tor_queue.h
@@ -0,0 +1,568 @@
+/* $OpenBSD: queue.h,v 1.36 2012/04/11 13:29:14 naddy Exp $ */
+/* $NetBSD: queue.h,v 1.11 1996/05/16 05:17:14 mycroft Exp $ */
+
+/*
+ * Copyright (c) 1991, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * @(#)queue.h 8.5 (Berkeley) 8/20/94
+ */
+
+#ifndef TOR_QUEUE_H_
+#define TOR_QUEUE_H_
+
+/*
+ * This file defines five types of data structures: singly-linked lists,
+ * lists, simple queues, tail queues, and circular queues.
+ *
+ *
+ * A singly-linked list is headed by a single forward pointer. The elements
+ * are singly linked for minimum space and pointer manipulation overhead at
+ * the expense of O(n) removal for arbitrary elements. New elements can be
+ * added to the list after an existing element or at the head of the list.
+ * Elements being removed from the head of the list should use the explicit
+ * macro for this purpose for optimum efficiency. A singly-linked list may
+ * only be traversed in the forward direction. Singly-linked lists are ideal
+ * for applications with large datasets and few or no removals or for
+ * implementing a LIFO queue.
+ *
+ * A list is headed by a single forward pointer (or an array of forward
+ * pointers for a hash table header). The elements are doubly linked
+ * so that an arbitrary element can be removed without a need to
+ * traverse the list. New elements can be added to the list before
+ * or after an existing element or at the head of the list. A list
+ * may only be traversed in the forward direction.
+ *
+ * A simple queue is headed by a pair of pointers, one the head of the
+ * list and the other to the tail of the list. The elements are singly
+ * linked to save space, so elements can only be removed from the
+ * head of the list. New elements can be added to the list before or after
+ * an existing element, at the head of the list, or at the end of the
+ * list. A simple queue may only be traversed in the forward direction.
+ *
+ * A tail queue is headed by a pair of pointers, one to the head of the
+ * list and the other to the tail of the list. The elements are doubly
+ * linked so that an arbitrary element can be removed without a need to
+ * traverse the list. New elements can be added to the list before or
+ * after an existing element, at the head of the list, or at the end of
+ * the list. A tail queue may be traversed in either direction.
+ *
+ * A circle queue is headed by a pair of pointers, one to the head of the
+ * list and the other to the tail of the list. The elements are doubly
+ * linked so that an arbitrary element can be removed without a need to
+ * traverse the list. New elements can be added to the list before or after
+ * an existing element, at the head of the list, or at the end of the list.
+ * A circle queue may be traversed in either direction, but has a more
+ * complex end of list detection.
+ *
+ * For details on the use of these macros, see the queue(3) manual page.
+ */
+
+#if defined(QUEUE_MACRO_DEBUG) || (defined(_KERNEL) && defined(DIAGNOSTIC))
+#define TOR_Q_INVALIDATE_(a) (a) = ((void *)-1)
+#else
+#define TOR_Q_INVALIDATE_(a)
+#endif
+
+/*
+ * Singly-linked List definitions.
+ */
+#define TOR_SLIST_HEAD(name, type) \
+struct name { \
+ struct type *slh_first; /* first element */ \
+}
+
+#define TOR_SLIST_HEAD_INITIALIZER(head) \
+ { NULL }
+
+#define TOR_SLIST_ENTRY(type) \
+struct { \
+ struct type *sle_next; /* next element */ \
+}
+
+/*
+ * Singly-linked List access methods.
+ */
+#define TOR_SLIST_FIRST(head) ((head)->slh_first)
+#define TOR_SLIST_END(head) NULL
+#define TOR_SLIST_EMPTY(head) (SLIST_FIRST(head) == TOR_SLIST_END(head))
+#define TOR_SLIST_NEXT(elm, field) ((elm)->field.sle_next)
+
+#define TOR_SLIST_FOREACH(var, head, field) \
+ for((var) = TOR_SLIST_FIRST(head); \
+ (var) != TOR_SLIST_END(head); \
+ (var) = TOR_SLIST_NEXT(var, field))
+
+#define TOR_SLIST_FOREACH_SAFE(var, head, field, tvar) \
+ for ((var) = TOR_SLIST_FIRST(head); \
+ (var) && ((tvar) = TOR_SLIST_NEXT(var, field), 1); \
+ (var) = (tvar))
+
+/*
+ * Singly-linked List functions.
+ */
+#define TOR_SLIST_INIT(head) { \
+ TOR_SLIST_FIRST(head) = TOR_SLIST_END(head); \
+}
+
+#define TOR_SLIST_INSERT_AFTER(slistelm, elm, field) do { \
+ (elm)->field.sle_next = (slistelm)->field.sle_next; \
+ (slistelm)->field.sle_next = (elm); \
+} while (0)
+
+#define TOR_SLIST_INSERT_HEAD(head, elm, field) do { \
+ (elm)->field.sle_next = (head)->slh_first; \
+ (head)->slh_first = (elm); \
+} while (0)
+
+#define TOR_SLIST_REMOVE_AFTER(elm, field) do { \
+ (elm)->field.sle_next = (elm)->field.sle_next->field.sle_next; \
+} while (0)
+
+#define TOR_SLIST_REMOVE_HEAD(head, field) do { \
+ (head)->slh_first = (head)->slh_first->field.sle_next; \
+} while (0)
+
+#define TOR_SLIST_REMOVE(head, elm, type, field) do { \
+ if ((head)->slh_first == (elm)) { \
+ TOR_SLIST_REMOVE_HEAD((head), field); \
+ } else { \
+ struct type *curelm = (head)->slh_first; \
+ \
+ while (curelm->field.sle_next != (elm)) \
+ curelm = curelm->field.sle_next; \
+ curelm->field.sle_next = \
+ curelm->field.sle_next->field.sle_next; \
+ TOR_Q_INVALIDATE_((elm)->field.sle_next); \
+ } \
+} while (0)
+
+/*
+ * List definitions.
+ */
+#define TOR_LIST_HEAD(name, type) \
+struct name { \
+ struct type *lh_first; /* first element */ \
+}
+
+#define TOR_LIST_HEAD_INITIALIZER(head) \
+ { NULL }
+
+#define TOR_LIST_ENTRY(type) \
+struct { \
+ struct type *le_next; /* next element */ \
+ struct type **le_prev; /* address of previous next element */ \
+}
+
+/*
+ * List access methods
+ */
+#define TOR_LIST_FIRST(head) ((head)->lh_first)
+#define TOR_LIST_END(head) NULL
+#define TOR_LIST_EMPTY(head) (TOR_LIST_FIRST(head) == TOR_LIST_END(head))
+#define TOR_LIST_NEXT(elm, field) ((elm)->field.le_next)
+
+#define TOR_LIST_FOREACH(var, head, field) \
+ for((var) = TOR_LIST_FIRST(head); \
+ (var)!= TOR_LIST_END(head); \
+ (var) = TOR_LIST_NEXT(var, field))
+
+#define TOR_LIST_FOREACH_SAFE(var, head, field, tvar) \
+ for ((var) = TOR_LIST_FIRST(head); \
+ (var) && ((tvar) = TOR_LIST_NEXT(var, field), 1); \
+ (var) = (tvar))
+
+/*
+ * List functions.
+ */
+#define TOR_LIST_INIT(head) do { \
+ TOR_LIST_FIRST(head) = TOR_LIST_END(head); \
+} while (0)
+
+#define TOR_LIST_INSERT_AFTER(listelm, elm, field) do { \
+ if (((elm)->field.le_next = (listelm)->field.le_next) != NULL) \
+ (listelm)->field.le_next->field.le_prev = \
+ &(elm)->field.le_next; \
+ (listelm)->field.le_next = (elm); \
+ (elm)->field.le_prev = &(listelm)->field.le_next; \
+} while (0)
+
+#define TOR_LIST_INSERT_BEFORE(listelm, elm, field) do { \
+ (elm)->field.le_prev = (listelm)->field.le_prev; \
+ (elm)->field.le_next = (listelm); \
+ *(listelm)->field.le_prev = (elm); \
+ (listelm)->field.le_prev = &(elm)->field.le_next; \
+} while (0)
+
+#define TOR_LIST_INSERT_HEAD(head, elm, field) do { \
+ if (((elm)->field.le_next = (head)->lh_first) != NULL) \
+ (head)->lh_first->field.le_prev = &(elm)->field.le_next;\
+ (head)->lh_first = (elm); \
+ (elm)->field.le_prev = &(head)->lh_first; \
+} while (0)
+
+#define TOR_LIST_REMOVE(elm, field) do { \
+ if ((elm)->field.le_next != NULL) \
+ (elm)->field.le_next->field.le_prev = \
+ (elm)->field.le_prev; \
+ *(elm)->field.le_prev = (elm)->field.le_next; \
+ TOR_Q_INVALIDATE_((elm)->field.le_prev); \
+ TOR_Q_INVALIDATE_((elm)->field.le_next); \
+} while (0)
+
+#define TOR_LIST_REPLACE(elm, elm2, field) do { \
+ if (((elm2)->field.le_next = (elm)->field.le_next) != NULL) \
+ (elm2)->field.le_next->field.le_prev = \
+ &(elm2)->field.le_next; \
+ (elm2)->field.le_prev = (elm)->field.le_prev; \
+ *(elm2)->field.le_prev = (elm2); \
+ TOR_Q_INVALIDATE_((elm)->field.le_prev); \
+ TOR_Q_INVALIDATE_((elm)->field.le_next); \
+} while (0)
+
+/*
+ * Simple queue definitions.
+ */
+#define TOR_SIMPLEQ_HEAD(name, type) \
+struct name { \
+ struct type *sqh_first; /* first element */ \
+ struct type **sqh_last; /* addr of last next element */ \
+}
+
+#define TOR_SIMPLEQ_HEAD_INITIALIZER(head) \
+ { NULL, &(head).sqh_first }
+
+#define TOR_SIMPLEQ_ENTRY(type) \
+struct { \
+ struct type *sqe_next; /* next element */ \
+}
+
+/*
+ * Simple queue access methods.
+ */
+#define TOR_SIMPLEQ_FIRST(head) ((head)->sqh_first)
+#define TOR_SIMPLEQ_END(head) NULL
+#define TOR_SIMPLEQ_EMPTY(head) (TOR_SIMPLEQ_FIRST(head) == TOR_SIMPLEQ_END(head))
+#define TOR_SIMPLEQ_NEXT(elm, field) ((elm)->field.sqe_next)
+
+#define TOR_SIMPLEQ_FOREACH(var, head, field) \
+ for((var) = TOR_SIMPLEQ_FIRST(head); \
+ (var) != TOR_SIMPLEQ_END(head); \
+ (var) = TOR_SIMPLEQ_NEXT(var, field))
+
+#define TOR_SIMPLEQ_FOREACH_SAFE(var, head, field, tvar) \
+ for ((var) = TOR_SIMPLEQ_FIRST(head); \
+ (var) && ((tvar) = TOR_SIMPLEQ_NEXT(var, field), 1); \
+ (var) = (tvar))
+
+/*
+ * Simple queue functions.
+ */
+#define TOR_SIMPLEQ_INIT(head) do { \
+ (head)->sqh_first = NULL; \
+ (head)->sqh_last = &(head)->sqh_first; \
+} while (0)
+
+#define TOR_SIMPLEQ_INSERT_HEAD(head, elm, field) do { \
+ if (((elm)->field.sqe_next = (head)->sqh_first) == NULL) \
+ (head)->sqh_last = &(elm)->field.sqe_next; \
+ (head)->sqh_first = (elm); \
+} while (0)
+
+#define TOR_SIMPLEQ_INSERT_TAIL(head, elm, field) do { \
+ (elm)->field.sqe_next = NULL; \
+ *(head)->sqh_last = (elm); \
+ (head)->sqh_last = &(elm)->field.sqe_next; \
+} while (0)
+
+#define TOR_SIMPLEQ_INSERT_AFTER(head, listelm, elm, field) do { \
+ if (((elm)->field.sqe_next = (listelm)->field.sqe_next) == NULL)\
+ (head)->sqh_last = &(elm)->field.sqe_next; \
+ (listelm)->field.sqe_next = (elm); \
+} while (0)
+
+#define TOR_SIMPLEQ_REMOVE_HEAD(head, field) do { \
+ if (((head)->sqh_first = (head)->sqh_first->field.sqe_next) == NULL) \
+ (head)->sqh_last = &(head)->sqh_first; \
+} while (0)
+
+#define TOR_SIMPLEQ_REMOVE_AFTER(head, elm, field) do { \
+ if (((elm)->field.sqe_next = (elm)->field.sqe_next->field.sqe_next) \
+ == NULL) \
+ (head)->sqh_last = &(elm)->field.sqe_next; \
+} while (0)
+
+/*
+ * Tail queue definitions.
+ */
+#define TOR_TAILQ_HEAD(name, type) \
+struct name { \
+ struct type *tqh_first; /* first element */ \
+ struct type **tqh_last; /* addr of last next element */ \
+}
+
+#define TOR_TAILQ_HEAD_INITIALIZER(head) \
+ { NULL, &(head).tqh_first }
+
+#define TOR_TAILQ_ENTRY(type) \
+struct { \
+ struct type *tqe_next; /* next element */ \
+ struct type **tqe_prev; /* address of previous next element */ \
+}
+
+/*
+ * tail queue access methods
+ */
+#define TOR_TAILQ_FIRST(head) ((head)->tqh_first)
+#define TOR_TAILQ_END(head) NULL
+#define TOR_TAILQ_NEXT(elm, field) ((elm)->field.tqe_next)
+#define TOR_TAILQ_LAST(head, headname) \
+ (*(((struct headname *)((head)->tqh_last))->tqh_last))
+/* XXX */
+#define TOR_TAILQ_PREV(elm, headname, field) \
+ (*(((struct headname *)((elm)->field.tqe_prev))->tqh_last))
+#define TOR_TAILQ_EMPTY(head) \
+ (TOR_TAILQ_FIRST(head) == TOR_TAILQ_END(head))
+
+#define TOR_TAILQ_FOREACH(var, head, field) \
+ for((var) = TOR_TAILQ_FIRST(head); \
+ (var) != TOR_TAILQ_END(head); \
+ (var) = TOR_TAILQ_NEXT(var, field))
+
+#define TOR_TAILQ_FOREACH_SAFE(var, head, field, tvar) \
+ for ((var) = TOR_TAILQ_FIRST(head); \
+ (var) != TOR_TAILQ_END(head) && \
+ ((tvar) = TOR_TAILQ_NEXT(var, field), 1); \
+ (var) = (tvar))
+
+
+#define TOR_TAILQ_FOREACH_REVERSE(var, head, headname, field) \
+ for((var) = TOR_TAILQ_LAST(head, headname); \
+ (var) != TOR_TAILQ_END(head); \
+ (var) = TOR_TAILQ_PREV(var, headname, field))
+
+#define TOR_TAILQ_FOREACH_REVERSE_SAFE(var, head, headname, field, tvar) \
+ for ((var) = TOR_TAILQ_LAST(head, headname); \
+ (var) != TOR_TAILQ_END(head) && \
+ ((tvar) = TOR_TAILQ_PREV(var, headname, field), 1); \
+ (var) = (tvar))
+
+/*
+ * Tail queue functions.
+ */
+#define TOR_TAILQ_INIT(head) do { \
+ (head)->tqh_first = NULL; \
+ (head)->tqh_last = &(head)->tqh_first; \
+} while (0)
+
+#define TOR_TAILQ_INSERT_HEAD(head, elm, field) do { \
+ if (((elm)->field.tqe_next = (head)->tqh_first) != NULL) \
+ (head)->tqh_first->field.tqe_prev = \
+ &(elm)->field.tqe_next; \
+ else \
+ (head)->tqh_last = &(elm)->field.tqe_next; \
+ (head)->tqh_first = (elm); \
+ (elm)->field.tqe_prev = &(head)->tqh_first; \
+} while (0)
+
+#define TOR_TAILQ_INSERT_TAIL(head, elm, field) do { \
+ (elm)->field.tqe_next = NULL; \
+ (elm)->field.tqe_prev = (head)->tqh_last; \
+ *(head)->tqh_last = (elm); \
+ (head)->tqh_last = &(elm)->field.tqe_next; \
+} while (0)
+
+#define TOR_TAILQ_INSERT_AFTER(head, listelm, elm, field) do { \
+ if (((elm)->field.tqe_next = (listelm)->field.tqe_next) != NULL)\
+ (elm)->field.tqe_next->field.tqe_prev = \
+ &(elm)->field.tqe_next; \
+ else \
+ (head)->tqh_last = &(elm)->field.tqe_next; \
+ (listelm)->field.tqe_next = (elm); \
+ (elm)->field.tqe_prev = &(listelm)->field.tqe_next; \
+} while (0)
+
+#define TOR_TAILQ_INSERT_BEFORE(listelm, elm, field) do { \
+ (elm)->field.tqe_prev = (listelm)->field.tqe_prev; \
+ (elm)->field.tqe_next = (listelm); \
+ *(listelm)->field.tqe_prev = (elm); \
+ (listelm)->field.tqe_prev = &(elm)->field.tqe_next; \
+} while (0)
+
+#define TOR_TAILQ_REMOVE(head, elm, field) do { \
+ if (((elm)->field.tqe_next) != NULL) \
+ (elm)->field.tqe_next->field.tqe_prev = \
+ (elm)->field.tqe_prev; \
+ else \
+ (head)->tqh_last = (elm)->field.tqe_prev; \
+ *(elm)->field.tqe_prev = (elm)->field.tqe_next; \
+ TOR_Q_INVALIDATE_((elm)->field.tqe_prev); \
+ TOR_Q_INVALIDATE_((elm)->field.tqe_next); \
+} while (0)
+
+#define TOR_TAILQ_REPLACE(head, elm, elm2, field) do { \
+ if (((elm2)->field.tqe_next = (elm)->field.tqe_next) != NULL) \
+ (elm2)->field.tqe_next->field.tqe_prev = \
+ &(elm2)->field.tqe_next; \
+ else \
+ (head)->tqh_last = &(elm2)->field.tqe_next; \
+ (elm2)->field.tqe_prev = (elm)->field.tqe_prev; \
+ *(elm2)->field.tqe_prev = (elm2); \
+ TOR_Q_INVALIDATE_((elm)->field.tqe_prev); \
+ TOR_Q_INVALIDATE_((elm)->field.tqe_next); \
+} while (0)
+
+/*
+ * Circular queue definitions.
+ */
+#define TOR_CIRCLEQ_HEAD(name, type) \
+struct name { \
+ struct type *cqh_first; /* first element */ \
+ struct type *cqh_last; /* last element */ \
+}
+
+#define TOR_CIRCLEQ_HEAD_INITIALIZER(head) \
+ { TOR_CIRCLEQ_END(&head), TOR_CIRCLEQ_END(&head) }
+
+#define TOR_CIRCLEQ_ENTRY(type) \
+struct { \
+ struct type *cqe_next; /* next element */ \
+ struct type *cqe_prev; /* previous element */ \
+}
+
+/*
+ * Circular queue access methods
+ */
+#define TOR_CIRCLEQ_FIRST(head) ((head)->cqh_first)
+#define TOR_CIRCLEQ_LAST(head) ((head)->cqh_last)
+#define TOR_CIRCLEQ_END(head) ((void *)(head))
+#define TOR_CIRCLEQ_NEXT(elm, field) ((elm)->field.cqe_next)
+#define TOR_CIRCLEQ_PREV(elm, field) ((elm)->field.cqe_prev)
+#define TOR_CIRCLEQ_EMPTY(head) \
+ (TOR_CIRCLEQ_FIRST(head) == TOR_CIRCLEQ_END(head))
+
+#define TOR_CIRCLEQ_FOREACH(var, head, field) \
+ for((var) = TOR_CIRCLEQ_FIRST(head); \
+ (var) != TOR_CIRCLEQ_END(head); \
+ (var) = TOR_CIRCLEQ_NEXT(var, field))
+
+#define TOR_CIRCLEQ_FOREACH_SAFE(var, head, field, tvar) \
+ for ((var) = TOR_CIRCLEQ_FIRST(head); \
+ (var) != TOR_CIRCLEQ_END(head) && \
+ ((tvar) = TOR_CIRCLEQ_NEXT(var, field), 1); \
+ (var) = (tvar))
+
+#define TOR_CIRCLEQ_FOREACH_REVERSE(var, head, field) \
+ for((var) = TOR_CIRCLEQ_LAST(head); \
+ (var) != TOR_CIRCLEQ_END(head); \
+ (var) = TOR_CIRCLEQ_PREV(var, field))
+
+#define TOR_CIRCLEQ_FOREACH_REVERSE_SAFE(var, head, headname, field, tvar) \
+ for ((var) = TOR_CIRCLEQ_LAST(head, headname); \
+ (var) != TOR_CIRCLEQ_END(head) && \
+ ((tvar) = TOR_CIRCLEQ_PREV(var, headname, field), 1); \
+ (var) = (tvar))
+
+/*
+ * Circular queue functions.
+ */
+#define TOR_CIRCLEQ_INIT(head) do { \
+ (head)->cqh_first = TOR_CIRCLEQ_END(head); \
+ (head)->cqh_last = TOR_CIRCLEQ_END(head); \
+} while (0)
+
+#define TOR_CIRCLEQ_INSERT_AFTER(head, listelm, elm, field) do { \
+ (elm)->field.cqe_next = (listelm)->field.cqe_next; \
+ (elm)->field.cqe_prev = (listelm); \
+ if ((listelm)->field.cqe_next == TOR_CIRCLEQ_END(head)) \
+ (head)->cqh_last = (elm); \
+ else \
+ (listelm)->field.cqe_next->field.cqe_prev = (elm); \
+ (listelm)->field.cqe_next = (elm); \
+} while (0)
+
+#define TOR_CIRCLEQ_INSERT_BEFORE(head, listelm, elm, field) do { \
+ (elm)->field.cqe_next = (listelm); \
+ (elm)->field.cqe_prev = (listelm)->field.cqe_prev; \
+ if ((listelm)->field.cqe_prev == TOR_CIRCLEQ_END(head)) \
+ (head)->cqh_first = (elm); \
+ else \
+ (listelm)->field.cqe_prev->field.cqe_next = (elm); \
+ (listelm)->field.cqe_prev = (elm); \
+} while (0)
+
+#define TOR_CIRCLEQ_INSERT_HEAD(head, elm, field) do { \
+ (elm)->field.cqe_next = (head)->cqh_first; \
+ (elm)->field.cqe_prev = TOR_CIRCLEQ_END(head); \
+ if ((head)->cqh_last == TOR_CIRCLEQ_END(head)) \
+ (head)->cqh_last = (elm); \
+ else \
+ (head)->cqh_first->field.cqe_prev = (elm); \
+ (head)->cqh_first = (elm); \
+} while (0)
+
+#define TOR_CIRCLEQ_INSERT_TAIL(head, elm, field) do { \
+ (elm)->field.cqe_next = TOR_CIRCLEQ_END(head); \
+ (elm)->field.cqe_prev = (head)->cqh_last; \
+ if ((head)->cqh_first == TOR_CIRCLEQ_END(head)) \
+ (head)->cqh_first = (elm); \
+ else \
+ (head)->cqh_last->field.cqe_next = (elm); \
+ (head)->cqh_last = (elm); \
+} while (0)
+
+#define TOR_CIRCLEQ_REMOVE(head, elm, field) do { \
+ if ((elm)->field.cqe_next == TOR_CIRCLEQ_END(head)) \
+ (head)->cqh_last = (elm)->field.cqe_prev; \
+ else \
+ (elm)->field.cqe_next->field.cqe_prev = \
+ (elm)->field.cqe_prev; \
+ if ((elm)->field.cqe_prev == TOR_CIRCLEQ_END(head)) \
+ (head)->cqh_first = (elm)->field.cqe_next; \
+ else \
+ (elm)->field.cqe_prev->field.cqe_next = \
+ (elm)->field.cqe_next; \
+ TOR_Q_INVALIDATE_((elm)->field.cqe_prev); \
+ TOR_Q_INVALIDATE_((elm)->field.cqe_next); \
+} while (0)
+
+#define TOR_CIRCLEQ_REPLACE(head, elm, elm2, field) do { \
+ if (((elm2)->field.cqe_next = (elm)->field.cqe_next) == \
+ TOR_CIRCLEQ_END(head)) \
+ (head).cqh_last = (elm2); \
+ else \
+ (elm2)->field.cqe_next->field.cqe_prev = (elm2); \
+ if (((elm2)->field.cqe_prev = (elm)->field.cqe_prev) == \
+ TOR_CIRCLEQ_END(head)) \
+ (head).cqh_first = (elm2); \
+ else \
+ (elm2)->field.cqe_prev->field.cqe_next = (elm2); \
+ TOR_Q_INVALIDATE_((elm)->field.cqe_prev); \
+ TOR_Q_INVALIDATE_((elm)->field.cqe_next); \
+} while (0)
+
+#endif /* !_SYS_QUEUE_H_ */
diff --git a/src/ext/tor_queue.txt b/src/ext/tor_queue.txt
new file mode 100644
index 000000000..f284e7192
--- /dev/null
+++ b/src/ext/tor_queue.txt
@@ -0,0 +1,883 @@
+Below follows the manpage for tor_queue.h, as included with OpenBSD's
+sys/queue.h. License follows at the end of the file.
+
+======================================================================
+QUEUE(3) OpenBSD Programmer's Manual QUEUE(3)
+
+NAME
+ SLIST_ENTRY, SLIST_HEAD, SLIST_HEAD_INITIALIZER, SLIST_FIRST, SLIST_NEXT,
+ SLIST_END, SLIST_EMPTY, SLIST_FOREACH, SLIST_FOREACH_SAFE, SLIST_INIT,
+ SLIST_INSERT_AFTER, SLIST_INSERT_HEAD, SLIST_REMOVE_AFTER,
+ SLIST_REMOVE_HEAD, SLIST_REMOVE, LIST_ENTRY, LIST_HEAD,
+ LIST_HEAD_INITIALIZER, LIST_FIRST, LIST_NEXT, LIST_END, LIST_EMPTY,
+ LIST_FOREACH, LIST_FOREACH_SAFE, LIST_INIT, LIST_INSERT_AFTER,
+ LIST_INSERT_BEFORE, LIST_INSERT_HEAD, LIST_REMOVE, LIST_REPLACE,
+ SIMPLEQ_ENTRY, SIMPLEQ_HEAD, SIMPLEQ_HEAD_INITIALIZER, SIMPLEQ_FIRST,
+ SIMPLEQ_NEXT, SIMPLEQ_END, SIMPLEQ_EMPTY, SIMPLEQ_FOREACH,
+ SIMPLEQ_FOREACH_SAFE, SIMPLEQ_INIT, SIMPLEQ_INSERT_AFTER,
+ SIMPLEQ_INSERT_HEAD, SIMPLEQ_INSERT_TAIL, SIMPLEQ_REMOVE_AFTER,
+ SIMPLEQ_REMOVE_HEAD, TAILQ_ENTRY, TAILQ_HEAD, TAILQ_HEAD_INITIALIZER,
+ TAILQ_FIRST, TAILQ_NEXT, TAILQ_END, TAILQ_LAST, TAILQ_PREV, TAILQ_EMPTY,
+ TAILQ_FOREACH, TAILQ_FOREACH_SAFE, TAILQ_FOREACH_REVERSE,
+ TAILQ_FOREACH_REVERSE_SAFE, TAILQ_INIT, TAILQ_INSERT_AFTER,
+ TAILQ_INSERT_BEFORE, TAILQ_INSERT_HEAD, TAILQ_INSERT_TAIL, TAILQ_REMOVE,
+ TAILQ_REPLACE, CIRCLEQ_ENTRY, CIRCLEQ_HEAD, CIRCLEQ_HEAD_INITIALIZER,
+ CIRCLEQ_FIRST, CIRCLEQ_LAST, CIRCLEQ_END, CIRCLEQ_NEXT, CIRCLEQ_PREV,
+ CIRCLEQ_EMPTY, CIRCLEQ_FOREACH, CIRCLEQ_FOREACH_SAFE,
+ CIRCLEQ_FOREACH_REVERSE_SAFE, CIRCLEQ_INIT, CIRCLEQ_INSERT_AFTER,
+ CIRCLEQ_INSERT_BEFORE, CIRCLEQ_INSERT_HEAD, CIRCLEQ_INSERT_TAIL,
+ CIRCLEQ_REMOVE, CIRCLEQ_REPLACE - implementations of singly-linked lists,
+ doubly-linked lists, simple queues, tail queues, and circular queues
+
+SYNOPSIS
+ #include <sys/queue.h>
+
+ SLIST_ENTRY(TYPE);
+
+ SLIST_HEAD(HEADNAME, TYPE);
+
+ SLIST_HEAD_INITIALIZER(SLIST_HEAD head);
+
+ struct TYPE *
+ SLIST_FIRST(SLIST_HEAD *head);
+
+ struct TYPE *
+ SLIST_NEXT(struct TYPE *listelm, SLIST_ENTRY NAME);
+
+ struct TYPE *
+ SLIST_END(SLIST_HEAD *head);
+
+ int
+ SLIST_EMPTY(SLIST_HEAD *head);
+
+ SLIST_FOREACH(VARNAME, SLIST_HEAD *head, SLIST_ENTRY NAME);
+
+ SLIST_FOREACH_SAFE(VARNAME, SLIST_HEAD *head, SLIST_ENTRY
+ NAME, TEMP_VARNAME);
+
+ void
+ SLIST_INIT(SLIST_HEAD *head);
+
+ void
+ SLIST_INSERT_AFTER(struct TYPE *listelm, struct TYPE *elm, SLIST_ENTRY
+ NAME);
+
+ void
+ SLIST_INSERT_HEAD(SLIST_HEAD *head, struct TYPE *elm, SLIST_ENTRY NAME);
+
+ void
+ SLIST_REMOVE_AFTER(struct TYPE *elm, SLIST_ENTRY NAME);
+
+ void
+ SLIST_REMOVE_HEAD(SLIST_HEAD *head, SLIST_ENTRY NAME);
+
+ void
+ SLIST_REMOVE(SLIST_HEAD *head, struct TYPE *elm, TYPE, SLIST_ENTRY NAME);
+
+ LIST_ENTRY(TYPE);
+
+ LIST_HEAD(HEADNAME, TYPE);
+
+ LIST_HEAD_INITIALIZER(LIST_HEAD head);
+
+ struct TYPE *
+ LIST_FIRST(LIST_HEAD *head);
+
+ struct TYPE *
+ LIST_NEXT(struct TYPE *listelm, LIST_ENTRY NAME);
+
+ struct TYPE *
+ LIST_END(LIST_HEAD *head);
+
+ int
+ LIST_EMPTY(LIST_HEAD *head);
+
+ LIST_FOREACH(VARNAME, LIST_HEAD *head, LIST_ENTRY NAME);
+
+ LIST_FOREACH_SAFE(VARNAME, LIST_HEAD *head, LIST_ENTRY
+ NAME, TEMP_VARNAME);
+
+ void
+ LIST_INIT(LIST_HEAD *head);
+
+ void
+ LIST_INSERT_AFTER(struct TYPE *listelm, struct TYPE *elm, LIST_ENTRY
+ NAME);
+
+ void
+ LIST_INSERT_BEFORE(struct TYPE *listelm, struct TYPE *elm, LIST_ENTRY
+ NAME);
+
+ void
+ LIST_INSERT_HEAD(LIST_HEAD *head, struct TYPE *elm, LIST_ENTRY NAME);
+
+ void
+ LIST_REMOVE(struct TYPE *elm, LIST_ENTRY NAME);
+
+ void
+ LIST_REPLACE(struct TYPE *elm, struct TYPE *elm2, LIST_ENTRY NAME);
+
+ SIMPLEQ_ENTRY(TYPE);
+
+ SIMPLEQ_HEAD(HEADNAME, TYPE);
+
+ SIMPLEQ_HEAD_INITIALIZER(SIMPLEQ_HEAD head);
+
+ struct TYPE *
+ SIMPLEQ_FIRST(SIMPLEQ_HEAD *head);
+
+ struct TYPE *
+ SIMPLEQ_NEXT(struct TYPE *listelm, SIMPLEQ_ENTRY NAME);
+
+ struct TYPE *
+ SIMPLEQ_END(SIMPLEQ_HEAD *head);
+
+ int
+ SIMPLEQ_EMPTY(SIMPLEQ_HEAD *head);
+
+ SIMPLEQ_FOREACH(VARNAME, SIMPLEQ_HEAD *head, SIMPLEQ_ENTRY NAME);
+
+ SIMPLEQ_FOREACH_SAFE(VARNAME, SIMPLEQ_HEAD *head, SIMPLEQ_ENTRY
+ NAME, TEMP_VARNAME);
+
+ void
+ SIMPLEQ_INIT(SIMPLEQ_HEAD *head);
+
+ void
+ SIMPLEQ_INSERT_AFTER(SIMPLEQ_HEAD *head, struct TYPE *listelm, struct
+ TYPE *elm, SIMPLEQ_ENTRY NAME);
+
+ void
+ SIMPLEQ_INSERT_HEAD(SIMPLEQ_HEAD *head, struct TYPE *elm, SIMPLEQ_ENTRY
+ NAME);
+
+ void
+ SIMPLEQ_INSERT_TAIL(SIMPLEQ_HEAD *head, struct TYPE *elm, SIMPLEQ_ENTRY
+ NAME);
+
+ void
+ SIMPLEQ_REMOVE_AFTER(SIMPLEQ_HEAD *head, struct TYPE *elm, SIMPLEQ_ENTRY
+ NAME);
+
+ void
+ SIMPLEQ_REMOVE_HEAD(SIMPLEQ_HEAD *head, SIMPLEQ_ENTRY NAME);
+
+ TAILQ_ENTRY(TYPE);
+
+ TAILQ_HEAD(HEADNAME, TYPE);
+
+ TAILQ_HEAD_INITIALIZER(TAILQ_HEAD head);
+
+ struct TYPE *
+ TAILQ_FIRST(TAILQ_HEAD *head);
+
+ struct TYPE *
+ TAILQ_NEXT(struct TYPE *listelm, TAILQ_ENTRY NAME);
+
+ struct TYPE *
+ TAILQ_END(TAILQ_HEAD *head);
+
+ struct TYPE *
+ TAILQ_LAST(TAILQ_HEAD *head, HEADNAME NAME);
+
+ struct TYPE *
+ TAILQ_PREV(struct TYPE *listelm, HEADNAME NAME, TAILQ_ENTRY NAME);
+
+ int
+ TAILQ_EMPTY(TAILQ_HEAD *head);
+
+ TAILQ_FOREACH(VARNAME, TAILQ_HEAD *head, TAILQ_ENTRY NAME);
+
+ TAILQ_FOREACH_SAFE(VARNAME, TAILQ_HEAD *head, TAILQ_ENTRY
+ NAME, TEMP_VARNAME);
+
+ TAILQ_FOREACH_REVERSE(VARNAME, TAILQ_HEAD *head, HEADNAME, TAILQ_ENTRY
+ NAME);
+
+ TAILQ_FOREACH_REVERSE_SAFE(VARNAME, TAILQ_HEAD
+ *head, HEADNAME, TAILQ_ENTRY NAME, TEMP_VARNAME);
+
+ void
+ TAILQ_INIT(TAILQ_HEAD *head);
+
+ void
+ TAILQ_INSERT_AFTER(TAILQ_HEAD *head, struct TYPE *listelm, struct TYPE
+ *elm, TAILQ_ENTRY NAME);
+
+ void
+ TAILQ_INSERT_BEFORE(struct TYPE *listelm, struct TYPE *elm, TAILQ_ENTRY
+ NAME);
+
+ void
+ TAILQ_INSERT_HEAD(TAILQ_HEAD *head, struct TYPE *elm, TAILQ_ENTRY NAME);
+
+ void
+ TAILQ_INSERT_TAIL(TAILQ_HEAD *head, struct TYPE *elm, TAILQ_ENTRY NAME);
+
+ void
+ TAILQ_REMOVE(TAILQ_HEAD *head, struct TYPE *elm, TAILQ_ENTRY NAME);
+
+ void
+ TAILQ_REPLACE(TAILQ_HEAD *head, struct TYPE *elm, struct TYPE
+ *elm2, TAILQ_ENTRY NAME);
+
+ CIRCLEQ_ENTRY(TYPE);
+
+ CIRCLEQ_HEAD(HEADNAME, TYPE);
+
+ CIRCLEQ_HEAD_INITIALIZER(CIRCLEQ_HEAD head);
+
+ struct TYPE *
+ CIRCLEQ_FIRST(CIRCLEQ_HEAD *head);
+
+ struct TYPE *
+ CIRCLEQ_LAST(CIRCLEQ_HEAD *head);
+
+ struct TYPE *
+ CIRCLEQ_END(CIRCLEQ_HEAD *head);
+
+ struct TYPE *
+ CIRCLEQ_NEXT(struct TYPE *listelm, CIRCLEQ_ENTRY NAME);
+
+ struct TYPE *
+ CIRCLEQ_PREV(struct TYPE *listelm, CIRCLEQ_ENTRY NAME);
+
+ int
+ CIRCLEQ_EMPTY(CIRCLEQ_HEAD *head);
+
+ CIRCLEQ_FOREACH(VARNAME, CIRCLEQ_HEAD *head, CIRCLEQ_ENTRY NAME);
+
+ CIRCLEQ_FOREACH_SAFE(VARNAME, CIRCLEQ_HEAD *head, CIRCLEQ_ENTRY
+ NAME, TEMP_VARNAME);
+
+ CIRCLEQ_FOREACH_REVERSE(VARNAME, CIRCLEQ_HEAD *head, CIRCLEQ_ENTRY NAME);
+
+ CIRCLEQ_FOREACH_REVERSE_SAFE(VARNAME, CIRCLEQ_HEAD *head, CIRCLEQ_ENTRY
+ NAME, TEMP_VARNAME);
+
+ void
+ CIRCLEQ_INIT(CIRCLEQ_HEAD *head);
+
+ void
+ CIRCLEQ_INSERT_AFTER(CIRCLEQ_HEAD *head, struct TYPE *listelm, struct
+ TYPE *elm, CIRCLEQ_ENTRY NAME);
+
+ void
+ CIRCLEQ_INSERT_BEFORE(CIRCLEQ_HEAD *head, struct TYPE *listelm, struct
+ TYPE *elm, CIRCLEQ_ENTRY NAME);
+
+ void
+ CIRCLEQ_INSERT_HEAD(CIRCLEQ_HEAD *head, struct TYPE *elm, CIRCLEQ_ENTRY
+ NAME);
+
+ void
+ CIRCLEQ_INSERT_TAIL(CIRCLEQ_HEAD *head, struct TYPE *elm, CIRCLEQ_ENTRY
+ NAME);
+
+ void
+ CIRCLEQ_REMOVE(CIRCLEQ_HEAD *head, struct TYPE *elm, CIRCLEQ_ENTRY NAME);
+
+ void
+ CIRCLEQ_REPLACE(CIRCLEQ_HEAD *head, struct TYPE *elm, struct TYPE
+ *elm2, CIRCLEQ_ENTRY NAME);
+
+DESCRIPTION
+ These macros define and operate on five types of data structures: singly-
+ linked lists, simple queues, lists, tail queues, and circular queues.
+ All five structures support the following functionality:
+
+ 1. Insertion of a new entry at the head of the list.
+ 2. Insertion of a new entry after any element in the list.
+ 3. Removal of an entry from the head of the list.
+ 4. Forward traversal through the list.
+
+ Singly-linked lists are the simplest of the five data structures and
+ support only the above functionality. Singly-linked lists are ideal for
+ applications with large datasets and few or no removals, or for
+ implementing a LIFO queue.
+
+ Simple queues add the following functionality:
+
+ 1. Entries can be added at the end of a list.
+
+ However:
+
+ 1. All list insertions must specify the head of the list.
+ 2. Each head entry requires two pointers rather than one.
+ 3. Code size is about 15% greater and operations run about 20%
+ slower than singly-linked lists.
+
+ Simple queues are ideal for applications with large datasets and few or
+ no removals, or for implementing a FIFO queue.
+
+ All doubly linked types of data structures (lists, tail queues, and
+ circle queues) additionally allow:
+
+ 1. Insertion of a new entry before any element in the list.
+ 2. Removal of any entry in the list.
+
+ However:
+
+ 1. Each element requires two pointers rather than one.
+ 2. Code size and execution time of operations (except for
+ removal) is about twice that of the singly-linked data-
+ structures.
+
+ Lists are the simplest of the doubly linked data structures and support
+ only the above functionality over singly-linked lists.
+
+ Tail queues add the following functionality:
+
+ 1. Entries can be added at the end of a list.
+ 2. They may be traversed backwards, at a cost.
+
+ However:
+
+ 1. All list insertions and removals must specify the head of the
+ list.
+ 2. Each head entry requires two pointers rather than one.
+ 3. Code size is about 15% greater and operations run about 20%
+ slower than singly-linked lists.
+
+ Circular queues add the following functionality:
+
+ 1. Entries can be added at the end of a list.
+ 2. They may be traversed backwards, from tail to head.
+
+ However:
+
+ 1. All list insertions and removals must specify the head of the
+ list.
+ 2. Each head entry requires two pointers rather than one.
+ 3. The termination condition for traversal is more complex.
+ 4. Code size is about 40% greater and operations run about 45%
+ slower than lists.
+
+ In the macro definitions, TYPE is the name tag of a user defined
+ structure that must contain a field of type SLIST_ENTRY, LIST_ENTRY,
+ SIMPLEQ_ENTRY, TAILQ_ENTRY, or CIRCLEQ_ENTRY, named NAME. The argument
+ HEADNAME is the name tag of a user defined structure that must be
+ declared using the macros SLIST_HEAD(), LIST_HEAD(), SIMPLEQ_HEAD(),
+ TAILQ_HEAD(), or CIRCLEQ_HEAD(). See the examples below for further
+ explanation of how these macros are used.
+
+SINGLY-LINKED LISTS
+ A singly-linked list is headed by a structure defined by the SLIST_HEAD()
+ macro. This structure contains a single pointer to the first element on
+ the list. The elements are singly linked for minimum space and pointer
+ manipulation overhead at the expense of O(n) removal for arbitrary
+ elements. New elements can be added to the list after an existing
+ element or at the head of the list. A SLIST_HEAD structure is declared
+ as follows:
+
+ SLIST_HEAD(HEADNAME, TYPE) head;
+
+ where HEADNAME is the name of the structure to be defined, and struct
+ TYPE is the type of the elements to be linked into the list. A pointer
+ to the head of the list can later be declared as:
+
+ struct HEADNAME *headp;
+
+ (The names head and headp are user selectable.)
+
+ The HEADNAME facility is often not used, leading to the following bizarre
+ code:
+
+ SLIST_HEAD(, TYPE) head, *headp;
+
+ The SLIST_ENTRY() macro declares a structure that connects the elements
+ in the list.
+
+ The SLIST_INIT() macro initializes the list referenced by head.
+
+ The list can also be initialized statically by using the
+ SLIST_HEAD_INITIALIZER() macro like this:
+
+ SLIST_HEAD(HEADNAME, TYPE) head = SLIST_HEAD_INITIALIZER(head);
+
+ The SLIST_INSERT_HEAD() macro inserts the new element elm at the head of
+ the list.
+
+ The SLIST_INSERT_AFTER() macro inserts the new element elm after the
+ element listelm.
+
+ The SLIST_REMOVE_HEAD() macro removes the first element of the list
+ pointed by head.
+
+ The SLIST_REMOVE_AFTER() macro removes the list element immediately
+ following elm.
+
+ The SLIST_REMOVE() macro removes the element elm of the list pointed by
+ head.
+
+ The SLIST_FIRST() and SLIST_NEXT() macros can be used to traverse the
+ list:
+
+ for (np = SLIST_FIRST(&head); np != NULL; np = SLIST_NEXT(np, NAME))
+
+ Or, for simplicity, one can use the SLIST_FOREACH() macro:
+
+ SLIST_FOREACH(np, head, NAME)
+
+ The macro SLIST_FOREACH_SAFE() traverses the list referenced by head in a
+ forward direction, assigning each element in turn to var. However,
+ unlike SLIST_FOREACH() it is permitted to remove var as well as free it
+ from within the loop safely without interfering with the traversal.
+
+ The SLIST_EMPTY() macro should be used to check whether a simple list is
+ empty.
+
+SINGLY-LINKED LIST EXAMPLE
+ SLIST_HEAD(listhead, entry) head;
+ struct entry {
+ ...
+ SLIST_ENTRY(entry) entries; /* Simple list. */
+ ...
+ } *n1, *n2, *np;
+
+ SLIST_INIT(&head); /* Initialize simple list. */
+
+ n1 = malloc(sizeof(struct entry)); /* Insert at the head. */
+ SLIST_INSERT_HEAD(&head, n1, entries);
+
+ n2 = malloc(sizeof(struct entry)); /* Insert after. */
+ SLIST_INSERT_AFTER(n1, n2, entries);
+
+ SLIST_FOREACH(np, &head, entries) /* Forward traversal. */
+ np-> ...
+
+ while (!SLIST_EMPTY(&head)) { /* Delete. */
+ n1 = SLIST_FIRST(&head);
+ SLIST_REMOVE_HEAD(&head, entries);
+ free(n1);
+ }
+
+
+LISTS
+ A list is headed by a structure defined by the LIST_HEAD() macro. This
+ structure contains a single pointer to the first element on the list.
+ The elements are doubly linked so that an arbitrary element can be
+ removed without traversing the list. New elements can be added to the
+ list after an existing element, before an existing element, or at the
+ head of the list. A LIST_HEAD structure is declared as follows:
+
+ LIST_HEAD(HEADNAME, TYPE) head;
+
+ where HEADNAME is the name of the structure to be defined, and struct
+ TYPE is the type of the elements to be linked into the list. A pointer
+ to the head of the list can later be declared as:
+
+ struct HEADNAME *headp;
+
+ (The names head and headp are user selectable.)
+
+ The HEADNAME facility is often not used, leading to the following bizarre
+ code:
+
+ LIST_HEAD(, TYPE) head, *headp;
+
+ The LIST_ENTRY() macro declares a structure that connects the elements in
+ the list.
+
+ The LIST_INIT() macro initializes the list referenced by head.
+
+ The list can also be initialized statically by using the
+ LIST_HEAD_INITIALIZER() macro like this:
+
+ LIST_HEAD(HEADNAME, TYPE) head = LIST_HEAD_INITIALIZER(head);
+
+ The LIST_INSERT_HEAD() macro inserts the new element elm at the head of
+ the list.
+
+ The LIST_INSERT_AFTER() macro inserts the new element elm after the
+ element listelm.
+
+ The LIST_INSERT_BEFORE() macro inserts the new element elm before the
+ element listelm.
+
+ The LIST_REMOVE() macro removes the element elm from the list.
+
+ The LIST_REPLACE() macro replaces the list element elm with the new
+ element elm2.
+
+ The LIST_FIRST() and LIST_NEXT() macros can be used to traverse the list:
+
+ for (np = LIST_FIRST(&head); np != NULL; np = LIST_NEXT(np, NAME))
+
+ Or, for simplicity, one can use the LIST_FOREACH() macro:
+
+ LIST_FOREACH(np, head, NAME)
+
+ The macro LIST_FOREACH_SAFE() traverses the list referenced by head in a
+ forward direction, assigning each element in turn to var. However,
+ unlike LIST_FOREACH() it is permitted to remove var as well as free it
+ from within the loop safely without interfering with the traversal.
+
+ The LIST_EMPTY() macro should be used to check whether a list is empty.
+
+LIST EXAMPLE
+ LIST_HEAD(listhead, entry) head;
+ struct entry {
+ ...
+ LIST_ENTRY(entry) entries; /* List. */
+ ...
+ } *n1, *n2, *np;
+
+ LIST_INIT(&head); /* Initialize list. */
+
+ n1 = malloc(sizeof(struct entry)); /* Insert at the head. */
+ LIST_INSERT_HEAD(&head, n1, entries);
+
+ n2 = malloc(sizeof(struct entry)); /* Insert after. */
+ LIST_INSERT_AFTER(n1, n2, entries);
+
+ n2 = malloc(sizeof(struct entry)); /* Insert before. */
+ LIST_INSERT_BEFORE(n1, n2, entries);
+ /* Forward traversal. */
+ LIST_FOREACH(np, &head, entries)
+ np-> ...
+
+ while (!LIST_EMPTY(&head)) /* Delete. */
+ n1 = LIST_FIRST(&head);
+ LIST_REMOVE(n1, entries);
+ free(n1);
+ }
+
+SIMPLE QUEUES
+ A simple queue is headed by a structure defined by the SIMPLEQ_HEAD()
+ macro. This structure contains a pair of pointers, one to the first
+ element in the simple queue and the other to the last element in the
+ simple queue. The elements are singly linked. New elements can be added
+ to the queue after an existing element, at the head of the queue or at
+ the tail of the queue. A SIMPLEQ_HEAD structure is declared as follows:
+
+ SIMPLEQ_HEAD(HEADNAME, TYPE) head;
+
+ where HEADNAME is the name of the structure to be defined, and struct
+ TYPE is the type of the elements to be linked into the queue. A pointer
+ to the head of the queue can later be declared as:
+
+ struct HEADNAME *headp;
+
+ (The names head and headp are user selectable.)
+
+ The SIMPLEQ_ENTRY() macro declares a structure that connects the elements
+ in the queue.
+
+ The SIMPLEQ_INIT() macro initializes the queue referenced by head.
+
+ The queue can also be initialized statically by using the
+ SIMPLEQ_HEAD_INITIALIZER() macro like this:
+
+ SIMPLEQ_HEAD(HEADNAME, TYPE) head = SIMPLEQ_HEAD_INITIALIZER(head);
+
+ The SIMPLEQ_INSERT_AFTER() macro inserts the new element elm after the
+ element listelm.
+
+ The SIMPLEQ_INSERT_HEAD() macro inserts the new element elm at the head
+ of the queue.
+
+ The SIMPLEQ_INSERT_TAIL() macro inserts the new element elm at the end of
+ the queue.
+
+ The SIMPLEQ_REMOVE_AFTER() macro removes the queue element immediately
+ following elm.
+
+ The SIMPLEQ_REMOVE_HEAD() macro removes the first element from the queue.
+
+ The SIMPLEQ_FIRST() and SIMPLEQ_NEXT() macros can be used to traverse the
+ queue. The SIMPLEQ_FOREACH() is used for queue traversal:
+
+ SIMPLEQ_FOREACH(np, head, NAME)
+
+ The macro SIMPLEQ_FOREACH_SAFE() traverses the queue referenced by head
+ in a forward direction, assigning each element in turn to var. However,
+ unlike SIMPLEQ_FOREACH() it is permitted to remove var as well as free it
+ from within the loop safely without interfering with the traversal.
+
+ The SIMPLEQ_EMPTY() macro should be used to check whether a list is
+ empty.
+
+SIMPLE QUEUE EXAMPLE
+ SIMPLEQ_HEAD(listhead, entry) head = SIMPLEQ_HEAD_INITIALIZER(head);
+ struct entry {
+ ...
+ SIMPLEQ_ENTRY(entry) entries; /* Simple queue. */
+ ...
+ } *n1, *n2, *np;
+
+ n1 = malloc(sizeof(struct entry)); /* Insert at the head. */
+ SIMPLEQ_INSERT_HEAD(&head, n1, entries);
+
+ n2 = malloc(sizeof(struct entry)); /* Insert after. */
+ SIMPLEQ_INSERT_AFTER(&head, n1, n2, entries);
+
+ n2 = malloc(sizeof(struct entry)); /* Insert at the tail. */
+ SIMPLEQ_INSERT_TAIL(&head, n2, entries);
+ /* Forward traversal. */
+ SIMPLEQ_FOREACH(np, &head, entries)
+ np-> ...
+ /* Delete. */
+ while (!SIMPLEQ_EMPTY(&head)) {
+ n1 = SIMPLEQ_FIRST(&head);
+ SIMPLEQ_REMOVE_HEAD(&head, entries);
+ free(n1);
+ }
+
+TAIL QUEUES
+ A tail queue is headed by a structure defined by the TAILQ_HEAD() macro.
+ This structure contains a pair of pointers, one to the first element in
+ the tail queue and the other to the last element in the tail queue. The
+ elements are doubly linked so that an arbitrary element can be removed
+ without traversing the tail queue. New elements can be added to the
+ queue after an existing element, before an existing element, at the head
+ of the queue, or at the end of the queue. A TAILQ_HEAD structure is
+ declared as follows:
+
+ TAILQ_HEAD(HEADNAME, TYPE) head;
+
+ where HEADNAME is the name of the structure to be defined, and struct
+ TYPE is the type of the elements to be linked into the tail queue. A
+ pointer to the head of the tail queue can later be declared as:
+
+ struct HEADNAME *headp;
+
+ (The names head and headp are user selectable.)
+
+ The TAILQ_ENTRY() macro declares a structure that connects the elements
+ in the tail queue.
+
+ The TAILQ_INIT() macro initializes the tail queue referenced by head.
+
+ The tail queue can also be initialized statically by using the
+ TAILQ_HEAD_INITIALIZER() macro.
+
+ The TAILQ_INSERT_HEAD() macro inserts the new element elm at the head of
+ the tail queue.
+
+ The TAILQ_INSERT_TAIL() macro inserts the new element elm at the end of
+ the tail queue.
+
+ The TAILQ_INSERT_AFTER() macro inserts the new element elm after the
+ element listelm.
+
+ The TAILQ_INSERT_BEFORE() macro inserts the new element elm before the
+ element listelm.
+
+ The TAILQ_REMOVE() macro removes the element elm from the tail queue.
+
+ The TAILQ_REPLACE() macro replaces the list element elm with the new
+ element elm2.
+
+ TAILQ_FOREACH() and TAILQ_FOREACH_REVERSE() are used for traversing a
+ tail queue. TAILQ_FOREACH() starts at the first element and proceeds
+ towards the last. TAILQ_FOREACH_REVERSE() starts at the last element and
+ proceeds towards the first.
+
+ TAILQ_FOREACH(np, &head, NAME)
+ TAILQ_FOREACH_REVERSE(np, &head, HEADNAME, NAME)
+
+ The macros TAILQ_FOREACH_SAFE() and TAILQ_FOREACH_REVERSE_SAFE() traverse
+ the list referenced by head in a forward or reverse direction
+ respectively, assigning each element in turn to var. However, unlike
+ their unsafe counterparts, they permit both the removal of var as well as
+ freeing it from within the loop safely without interfering with the
+ traversal.
+
+ The TAILQ_FIRST(), TAILQ_NEXT(), TAILQ_LAST() and TAILQ_PREV() macros can
+ be used to manually traverse a tail queue or an arbitrary part of one.
+
+ The TAILQ_EMPTY() macro should be used to check whether a tail queue is
+ empty.
+
+TAIL QUEUE EXAMPLE
+ TAILQ_HEAD(tailhead, entry) head;
+ struct entry {
+ ...
+ TAILQ_ENTRY(entry) entries; /* Tail queue. */
+ ...
+ } *n1, *n2, *np;
+
+ TAILQ_INIT(&head); /* Initialize queue. */
+
+ n1 = malloc(sizeof(struct entry)); /* Insert at the head. */
+ TAILQ_INSERT_HEAD(&head, n1, entries);
+
+ n1 = malloc(sizeof(struct entry)); /* Insert at the tail. */
+ TAILQ_INSERT_TAIL(&head, n1, entries);
+
+ n2 = malloc(sizeof(struct entry)); /* Insert after. */
+ TAILQ_INSERT_AFTER(&head, n1, n2, entries);
+
+ n2 = malloc(sizeof(struct entry)); /* Insert before. */
+ TAILQ_INSERT_BEFORE(n1, n2, entries);
+ /* Forward traversal. */
+ TAILQ_FOREACH(np, &head, entries)
+ np-> ...
+ /* Manual forward traversal. */
+ for (np = n2; np != NULL; np = TAILQ_NEXT(np, entries))
+ np-> ...
+ /* Delete. */
+ while ((np = TAILQ_FIRST(&head))) {
+ TAILQ_REMOVE(&head, np, entries);
+ free(np);
+ }
+
+
+CIRCULAR QUEUES
+ A circular queue is headed by a structure defined by the CIRCLEQ_HEAD()
+ macro. This structure contains a pair of pointers, one to the first
+ element in the circular queue and the other to the last element in the
+ circular queue. The elements are doubly linked so that an arbitrary
+ element can be removed without traversing the queue. New elements can be
+ added to the queue after an existing element, before an existing element,
+ at the head of the queue, or at the end of the queue. A CIRCLEQ_HEAD
+ structure is declared as follows:
+
+ CIRCLEQ_HEAD(HEADNAME, TYPE) head;
+
+ where HEADNAME is the name of the structure to be defined, and struct
+ TYPE is the type of the elements to be linked into the circular queue. A
+ pointer to the head of the circular queue can later be declared as:
+
+ struct HEADNAME *headp;
+
+ (The names head and headp are user selectable.)
+
+ The CIRCLEQ_ENTRY() macro declares a structure that connects the elements
+ in the circular queue.
+
+ The CIRCLEQ_INIT() macro initializes the circular queue referenced by
+ head.
+
+ The circular queue can also be initialized statically by using the
+ CIRCLEQ_HEAD_INITIALIZER() macro.
+
+ The CIRCLEQ_INSERT_HEAD() macro inserts the new element elm at the head
+ of the circular queue.
+
+ The CIRCLEQ_INSERT_TAIL() macro inserts the new element elm at the end of
+ the circular queue.
+
+ The CIRCLEQ_INSERT_AFTER() macro inserts the new element elm after the
+ element listelm.
+
+ The CIRCLEQ_INSERT_BEFORE() macro inserts the new element elm before the
+ element listelm.
+
+ The CIRCLEQ_REMOVE() macro removes the element elm from the circular
+ queue.
+
+ The CIRCLEQ_REPLACE() macro replaces the list element elm with the new
+ element elm2.
+
+ The CIRCLEQ_FIRST(), CIRCLEQ_LAST(), CIRCLEQ_END(), CIRCLEQ_NEXT() and
+ CIRCLEQ_PREV() macros can be used to traverse a circular queue. The
+ CIRCLEQ_FOREACH() is used for circular queue forward traversal:
+
+ CIRCLEQ_FOREACH(np, head, NAME)
+
+ The CIRCLEQ_FOREACH_REVERSE() macro acts like CIRCLEQ_FOREACH() but
+ traverses the circular queue backwards.
+
+ The macros CIRCLEQ_FOREACH_SAFE() and CIRCLEQ_FOREACH_REVERSE_SAFE()
+ traverse the list referenced by head in a forward or reverse direction
+ respectively, assigning each element in turn to var. However, unlike
+ their unsafe counterparts, they permit both the removal of var as well as
+ freeing it from within the loop safely without interfering with the
+ traversal.
+
+ The CIRCLEQ_EMPTY() macro should be used to check whether a circular
+ queue is empty.
+
+CIRCULAR QUEUE EXAMPLE
+ CIRCLEQ_HEAD(circleq, entry) head;
+ struct entry {
+ ...
+ CIRCLEQ_ENTRY(entry) entries; /* Circular queue. */
+ ...
+ } *n1, *n2, *np;
+
+ CIRCLEQ_INIT(&head); /* Initialize circular queue. */
+
+ n1 = malloc(sizeof(struct entry)); /* Insert at the head. */
+ CIRCLEQ_INSERT_HEAD(&head, n1, entries);
+
+ n1 = malloc(sizeof(struct entry)); /* Insert at the tail. */
+ CIRCLEQ_INSERT_TAIL(&head, n1, entries);
+
+ n2 = malloc(sizeof(struct entry)); /* Insert after. */
+ CIRCLEQ_INSERT_AFTER(&head, n1, n2, entries);
+
+ n2 = malloc(sizeof(struct entry)); /* Insert before. */
+ CIRCLEQ_INSERT_BEFORE(&head, n1, n2, entries);
+ /* Forward traversal. */
+ CIRCLEQ_FOREACH(np, &head, entries)
+ np-> ...
+ /* Reverse traversal. */
+ CIRCLEQ_FOREACH_REVERSE(np, &head, entries)
+ np-> ...
+ /* Delete. */
+ while (!CIRCLEQ_EMPTY(&head)) {
+ n1 = CIRCLEQ_FIRST(&head);
+ CIRCLEQ_REMOVE(&head, n1, entries);
+ free(n1);
+ }
+
+NOTES
+ It is an error to assume the next and previous fields are preserved after
+ an element has been removed from a list or queue. Using any macro
+ (except the various forms of insertion) on an element removed from a list
+ or queue is incorrect. An example of erroneous usage is removing the
+ same element twice.
+
+ The SLIST_END(), LIST_END(), SIMPLEQ_END() and TAILQ_END() macros are
+ provided for symmetry with CIRCLEQ_END(). They expand to NULL and don't
+ serve any useful purpose.
+
+ Trying to free a list in the following way is a common error:
+
+ LIST_FOREACH(var, head, entry)
+ free(var);
+ free(head);
+
+ Since var is free'd, the FOREACH macros refer to a pointer that may have
+ been reallocated already. A similar situation occurs when the current
+ element is deleted from the list. In cases like these the data
+ structure's FOREACH_SAFE macros should be used instead.
+
+HISTORY
+ The queue functions first appeared in 4.4BSD.
+
+OpenBSD 5.0 April 11, 2012 OpenBSD 5.0
+======================================================================
+.\" $OpenBSD: queue.3,v 1.56 2012/04/11 13:29:14 naddy Exp $
+.\" $NetBSD: queue.3,v 1.4 1995/07/03 00:25:36 mycroft Exp $
+.\"
+.\" Copyright (c) 1993 The Regents of the University of California.
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of the University nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+
diff --git a/src/include.am b/src/include.am
new file mode 100644
index 000000000..d0693e25b
--- /dev/null
+++ b/src/include.am
@@ -0,0 +1,7 @@
+include src/ext/include.am
+include src/common/include.am
+include src/or/include.am
+include src/test/include.am
+include src/tools/include.am
+include src/win32/include.am
+include src/config/include.am
diff --git a/src/or/Makefile.am b/src/or/Makefile.am
deleted file mode 100644
index 3cc789a1b..000000000
--- a/src/or/Makefile.am
+++ /dev/null
@@ -1,158 +0,0 @@
-bin_PROGRAMS = tor
-noinst_LIBRARIES = libtor.a
-
-if BUILD_NT_SERVICES
-tor_platform_source=ntmain.c
-else
-tor_platform_source=
-endif
-
-EXTRA_DIST=ntmain.c or_sha1.i Makefile.nmake
-
-if USE_EXTERNAL_EVDNS
-evdns_source=
-else
-evdns_source=eventdns.c
-endif
-
-libtor_a_SOURCES = \
- buffers.c \
- circuitbuild.c \
- circuitlist.c \
- circuituse.c \
- command.c \
- config.c \
- connection.c \
- connection_edge.c \
- connection_or.c \
- control.c \
- cpuworker.c \
- directory.c \
- dirserv.c \
- dirvote.c \
- dns.c \
- dnsserv.c \
- geoip.c \
- hibernate.c \
- main.c \
- microdesc.c \
- networkstatus.c \
- nodelist.c \
- onion.c \
- transports.c \
- policies.c \
- reasons.c \
- relay.c \
- rendclient.c \
- rendcommon.c \
- rendmid.c \
- rendservice.c \
- rephist.c \
- router.c \
- routerlist.c \
- routerparse.c \
- status.c \
- $(evdns_source) \
- $(tor_platform_source) \
- config_codedigest.c
-
-#libtor_a_LIBADD = ../common/libor.a ../common/libor-crypto.a \
-# ../common/libor-event.a
-
-
-tor_SOURCES = tor_main.c
-
-AM_CPPFLAGS = -DSHARE_DATADIR="\"$(datadir)\"" \
- -DLOCALSTATEDIR="\"$(localstatedir)\"" \
- -DBINDIR="\"$(bindir)\""
-
-# -L flags need to go in LDFLAGS. -l flags need to go in LDADD.
-# This seems to matter nowhere but on windows, but I assure you that it
-# matters a lot there, and is quite hard to debug if you forget to do it.
-
-
-tor_LDFLAGS = @TOR_LDFLAGS_zlib@ @TOR_LDFLAGS_openssl@ @TOR_LDFLAGS_libevent@
-tor_LDADD = ./libtor.a ../common/libor.a ../common/libor-crypto.a \
- ../common/libor-event.a \
- @TOR_ZLIB_LIBS@ @TOR_LIB_MATH@ @TOR_LIBEVENT_LIBS@ @TOR_OPENSSL_LIBS@ \
- @TOR_LIB_WS32@ @TOR_LIB_GDI@
-
-noinst_HEADERS = \
- buffers.h \
- circuitbuild.h \
- circuitlist.h \
- circuituse.h \
- command.h \
- config.h \
- connection.h \
- connection_edge.h \
- connection_or.h \
- control.h \
- cpuworker.h \
- directory.h \
- dirserv.h \
- dirvote.h \
- dns.h \
- dnsserv.h \
- eventdns.h \
- eventdns_tor.h \
- geoip.h \
- hibernate.h \
- main.h \
- microdesc.h \
- networkstatus.h \
- nodelist.h \
- ntmain.h \
- onion.h \
- or.h \
- transports.h \
- policies.h \
- reasons.h \
- relay.h \
- rendclient.h \
- rendcommon.h \
- rendmid.h \
- rendservice.h \
- rephist.h \
- router.h \
- routerlist.h \
- routerparse.h \
- status.h \
- micro-revision.i
-
-config_codedigest.o: or_sha1.i
-
-tor_main.o: micro-revision.i
-
-micro-revision.i: FORCE
- @rm -f micro-revision.tmp; \
- if test -d "$(top_srcdir)/.git" && \
- test -x "`which git 2>&1;true`"; then \
- HASH="`cd "$(top_srcdir)" && git rev-parse --short=16 HEAD`"; \
- echo \"$$HASH\" > micro-revision.tmp; \
- fi; \
- if test ! -f micro-revision.tmp ; then \
- if test ! -f micro-revision.i ; then \
- echo '""' > micro-revision.i; \
- fi; \
- elif test ! -f micro-revision.i || \
- test x"`cat micro-revision.tmp`" != x"`cat micro-revision.i`"; then \
- mv micro-revision.tmp micro-revision.i; \
- fi; true
-
-or_sha1.i: $(tor_SOURCES) $(libtor_a_SOURCES)
- if test "@SHA1SUM@" != none; then \
- (cd "$(srcdir)" && "@SHA1SUM@" $(tor_SOURCES) $(libtor_a_SOURCES)) | \
- "@SED@" -n 's/^\(.*\)$$/"\1\\n"/p' > or_sha1.i; \
- elif test "@OPENSSL@" != none; then \
- (cd "$(srcdir)" && "@OPENSSL@" sha1 $(tor_SOURCES) $(libtor_a_SOURCES)) | \
- "@SED@" -n 's/SHA1(\(.*\))= \(.*\)/"\2 \1\\n"/p' > or_sha1.i; \
- else \
- rm or_sha1.i; \
- touch or_sha1.i; \
- fi
-
-CLEANFILES = micro-revision.i
-
-#Dummy target to ensure that micro-revision.i _always_ gets built.
-FORCE:
diff --git a/src/or/Makefile.nmake b/src/or/Makefile.nmake
index 3181e79c2..3b627b1d0 100644
--- a/src/or/Makefile.nmake
+++ b/src/or/Makefile.nmake
@@ -1,28 +1,75 @@
all: tor.exe
-CFLAGS = /I ..\win32 /I ..\..\..\build-alpha\include /I ..\common
+CFLAGS = /I ..\win32 /I ..\..\..\build-alpha\include /I ..\common \
+ /I ..\ext
-LIBS = ..\..\..\build-alpha\lib\libevent.a \
- ..\..\..\build-alpha\lib\libcrypto.a \
- ..\..\..\build-alpha\lib\libssl.a \
- ..\..\..\build-alpha\lib\libz.a \
- ws2_32.lib advapi32.lib shell32.lib
+LIBS = ..\..\..\build-alpha\lib\libevent.lib \
+ ..\..\..\build-alpha\lib\libcrypto.lib \
+ ..\..\..\build-alpha\lib\libssl.lib \
+ ..\..\..\build-alpha\lib\libz.lib \
+ ws2_32.lib advapi32.lib shell32.lib \
+ crypt32.lib gdi32.lib user32.lib
-LIBTOR_OBJECTS = buffers.obj circuitbuild.obj circuitlist.obj circuituse.obj \
- command.obj config.obj connection.obj connection_edge.obj \
- connection_or.obj control.obj cpuworker.obj directory.obj \
- dirserv.obj dirvote.obj dns.obj dnsserv.obj geoip.obj \
- hibernate.obj main.obj microdesc.obj networkstatus.obj \
- nodelist.obj onion.obj policies.obj reasons.obj relay.obj \
- rendclient.obj rendcommon.obj rendmid.obj rendservice.obj \
- rephist.obj router.obj routerlist.obj routerparse.obj status.obj \
- config_codedigest.obj ntmain.obj
+LIBTOR_OBJECTS = \
+ addressmap.obj \
+ buffers.obj \
+ channel.obj \
+ channeltls.obj \
+ circuitbuild.obj \
+ circuitlist.obj \
+ circuitmux.obj \
+ circuitmux_ewma.obj \
+ circuitstats.obj \
+ circuituse.obj \
+ command.obj \
+ config.obj \
+ config_codedigest.obj \
+ confparse.obj \
+ connection.obj \
+ connection_edge.obj \
+ connection_or.obj \
+ control.obj \
+ cpuworker.obj \
+ directory.obj \
+ dirserv.obj \
+ dirvote.obj \
+ dns.obj \
+ dnsserv.obj \
+ fp_pair.obj \
+ entrynodes.obj \
+ geoip.obj \
+ hibernate.obj \
+ main.obj \
+ microdesc.obj \
+ networkstatus.obj \
+ nodelist.obj \
+ ntmain.obj \
+ onion.obj \
+ onion_fast.obj \
+ onion_ntor.obj \
+ onion_tap.obj \
+ policies.obj \
+ reasons.obj \
+ relay.obj \
+ rendclient.obj \
+ rendcommon.obj \
+ rendmid.obj \
+ rendservice.obj \
+ rephist.obj \
+ replaycache.obj \
+ router.obj \
+ routerlist.obj \
+ routerparse.obj \
+ routerset.obj \
+ statefile.obj \
+ status.obj \
+ transports.obj
libtor.lib: $(LIBTOR_OBJECTS)
- lib $(LIBTOR_OBJECTS) /out:libtor.lib
+ lib $(LIBTOR_OBJECTS) /out:$@
tor.exe: libtor.lib tor_main.obj
- $(CC) $(CFLAGS) $(LIBS) libtor.lib ..\common\*.lib tor_main.obj
+ $(CC) $(CFLAGS) $(LIBS) libtor.lib ..\common\*.lib tor_main.obj /Fe$@
clean:
del $(LIBTOR_OBJECTS) *.lib tor.exe
diff --git a/src/or/addressmap.c b/src/or/addressmap.c
new file mode 100644
index 000000000..998770a3d
--- /dev/null
+++ b/src/or/addressmap.c
@@ -0,0 +1,1078 @@
+/* Copyright (c) 2001 Matej Pfajfar.
+ * Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#define ADDRESSMAP_PRIVATE
+
+#include "or.h"
+#include "addressmap.h"
+#include "circuituse.h"
+#include "config.h"
+#include "connection_edge.h"
+#include "control.h"
+#include "dns.h"
+#include "routerset.h"
+#include "nodelist.h"
+
+/** A client-side struct to remember requests to rewrite addresses
+ * to new addresses. These structs are stored in the hash table
+ * "addressmap" below.
+ *
+ * There are 5 ways to set an address mapping:
+ * - A MapAddress command from the controller [permanent]
+ * - An AddressMap directive in the torrc [permanent]
+ * - When a TrackHostExits torrc directive is triggered [temporary]
+ * - When a DNS resolve succeeds [temporary]
+ * - When a DNS resolve fails [temporary]
+ *
+ * When an addressmap request is made but one is already registered,
+ * the new one is replaced only if the currently registered one has
+ * no "new_address" (that is, it's in the process of DNS resolve),
+ * or if the new one is permanent (expires==0 or 1).
+ *
+ * (We overload the 'expires' field, using "0" for mappings set via
+ * the configuration file, "1" for mappings set from the control
+ * interface, and other values for DNS and TrackHostExit mappings that can
+ * expire.)
+ *
+ * A mapping may be 'wildcarded'. If "src_wildcard" is true, then
+ * any address that ends with a . followed by the key for this entry will
+ * get remapped by it. If "dst_wildcard" is also true, then only the
+ * matching suffix of such addresses will get replaced by new_address.
+ */
+typedef struct {
+ char *new_address;
+ time_t expires;
+ addressmap_entry_source_bitfield_t source:3;
+ unsigned src_wildcard:1;
+ unsigned dst_wildcard:1;
+ short num_resolve_failures;
+} addressmap_entry_t;
+
+/** Entry for mapping addresses to which virtual address we mapped them to. */
+typedef struct {
+ char *ipv4_address;
+ char *ipv6_address;
+ char *hostname_address;
+} virtaddress_entry_t;
+
+/** A hash table to store client-side address rewrite instructions. */
+static strmap_t *addressmap=NULL;
+
+/**
+ * Table mapping addresses to which virtual address, if any, we
+ * assigned them to.
+ *
+ * We maintain the following invariant: if [A,B] is in
+ * virtaddress_reversemap, then B must be a virtual address, and [A,B]
+ * must be in addressmap. We do not require that the converse hold:
+ * if it fails, then we could end up mapping two virtual addresses to
+ * the same address, which is no disaster.
+ **/
+static strmap_t *virtaddress_reversemap=NULL;
+
+/** Initialize addressmap. */
+void
+addressmap_init(void)
+{
+ addressmap = strmap_new();
+ virtaddress_reversemap = strmap_new();
+}
+
+/** Free the memory associated with the addressmap entry <b>_ent</b>. */
+static void
+addressmap_ent_free(void *_ent)
+{
+ addressmap_entry_t *ent;
+ if (!_ent)
+ return;
+
+ ent = _ent;
+ tor_free(ent->new_address);
+ tor_free(ent);
+}
+
+/** Free storage held by a virtaddress_entry_t* entry in <b>ent</b>. */
+static void
+addressmap_virtaddress_ent_free(void *_ent)
+{
+ virtaddress_entry_t *ent;
+ if (!_ent)
+ return;
+
+ ent = _ent;
+ tor_free(ent->ipv4_address);
+ tor_free(ent->hostname_address);
+ tor_free(ent);
+}
+
+/** Free storage held by a virtaddress_entry_t* entry in <b>ent</b>. */
+static void
+addressmap_virtaddress_remove(const char *address, addressmap_entry_t *ent)
+{
+ if (ent && ent->new_address &&
+ address_is_in_virtual_range(ent->new_address)) {
+ virtaddress_entry_t *ve =
+ strmap_get(virtaddress_reversemap, ent->new_address);
+ /*log_fn(LOG_NOTICE,"remove reverse mapping for %s",ent->new_address);*/
+ if (ve) {
+ if (!strcmp(address, ve->ipv4_address))
+ tor_free(ve->ipv4_address);
+ if (!strcmp(address, ve->hostname_address))
+ tor_free(ve->hostname_address);
+ if (!ve->ipv4_address && !ve->hostname_address) {
+ tor_free(ve);
+ strmap_remove(virtaddress_reversemap, ent->new_address);
+ }
+ }
+ }
+}
+
+/** Remove <b>ent</b> (which must be mapped to by <b>address</b>) from the
+ * client address maps. */
+static void
+addressmap_ent_remove(const char *address, addressmap_entry_t *ent)
+{
+ addressmap_virtaddress_remove(address, ent);
+ addressmap_ent_free(ent);
+}
+
+/** Unregister all TrackHostExits mappings from any address to
+ * *.exitname.exit. */
+void
+clear_trackexithost_mappings(const char *exitname)
+{
+ char *suffix = NULL;
+ if (!addressmap || !exitname)
+ return;
+ tor_asprintf(&suffix, ".%s.exit", exitname);
+ tor_strlower(suffix);
+
+ STRMAP_FOREACH_MODIFY(addressmap, address, addressmap_entry_t *, ent) {
+ if (ent->source == ADDRMAPSRC_TRACKEXIT &&
+ !strcmpend(ent->new_address, suffix)) {
+ addressmap_ent_remove(address, ent);
+ MAP_DEL_CURRENT(address);
+ }
+ } STRMAP_FOREACH_END;
+
+ tor_free(suffix);
+}
+
+/** Remove all TRACKEXIT mappings from the addressmap for which the target
+ * host is unknown or no longer allowed, or for which the source address
+ * is no longer in trackexithosts. */
+void
+addressmap_clear_excluded_trackexithosts(const or_options_t *options)
+{
+ const routerset_t *allow_nodes = options->ExitNodes;
+ const routerset_t *exclude_nodes = options->ExcludeExitNodesUnion_;
+
+ if (!addressmap)
+ return;
+ if (routerset_is_empty(allow_nodes))
+ allow_nodes = NULL;
+ if (allow_nodes == NULL && routerset_is_empty(exclude_nodes))
+ return;
+
+ STRMAP_FOREACH_MODIFY(addressmap, address, addressmap_entry_t *, ent) {
+ size_t len;
+ const char *target = ent->new_address, *dot;
+ char *nodename;
+ const node_t *node;
+
+ if (!target) {
+ /* DNS resolving in progress */
+ continue;
+ } else if (strcmpend(target, ".exit")) {
+ /* Not a .exit mapping */
+ continue;
+ } else if (ent->source != ADDRMAPSRC_TRACKEXIT) {
+ /* Not a trackexit mapping. */
+ continue;
+ }
+ len = strlen(target);
+ if (len < 6)
+ continue; /* malformed. */
+ dot = target + len - 6; /* dot now points to just before .exit */
+ while (dot > target && *dot != '.')
+ dot--;
+ if (*dot == '.') dot++;
+ nodename = tor_strndup(dot, len-5-(dot-target));;
+ node = node_get_by_nickname(nodename, 0);
+ tor_free(nodename);
+ if (!node ||
+ (allow_nodes && !routerset_contains_node(allow_nodes, node)) ||
+ routerset_contains_node(exclude_nodes, node) ||
+ !hostname_in_track_host_exits(options, address)) {
+ /* We don't know this one, or we want to be rid of it. */
+ addressmap_ent_remove(address, ent);
+ MAP_DEL_CURRENT(address);
+ }
+ } STRMAP_FOREACH_END;
+}
+
+/** Return true iff <b>address</b> is one that we are configured to
+ * automap on resolve according to <b>options</b>. */
+int
+addressmap_address_should_automap(const char *address,
+ const or_options_t *options)
+{
+ const smartlist_t *suffix_list = options->AutomapHostsSuffixes;
+
+ if (!suffix_list)
+ return 0;
+
+ SMARTLIST_FOREACH_BEGIN(suffix_list, const char *, suffix) {
+ if (!strcasecmpend(address, suffix))
+ return 1;
+ } SMARTLIST_FOREACH_END(suffix);
+ return 0;
+}
+
+/** Remove all AUTOMAP mappings from the addressmap for which the
+ * source address no longer matches AutomapHostsSuffixes, which is
+ * no longer allowed by AutomapHostsOnResolve, or for which the
+ * target address is no longer in the virtual network. */
+void
+addressmap_clear_invalid_automaps(const or_options_t *options)
+{
+ int clear_all = !options->AutomapHostsOnResolve;
+ const smartlist_t *suffixes = options->AutomapHostsSuffixes;
+
+ if (!addressmap)
+ return;
+
+ if (!suffixes)
+ clear_all = 1; /* This should be impossible, but let's be sure. */
+
+ STRMAP_FOREACH_MODIFY(addressmap, src_address, addressmap_entry_t *, ent) {
+ int remove = clear_all;
+ if (ent->source != ADDRMAPSRC_AUTOMAP)
+ continue; /* not an automap mapping. */
+
+ if (!remove) {
+ remove = ! addressmap_address_should_automap(src_address, options);
+ }
+
+ if (!remove && ! address_is_in_virtual_range(ent->new_address))
+ remove = 1;
+
+ if (remove) {
+ addressmap_ent_remove(src_address, ent);
+ MAP_DEL_CURRENT(src_address);
+ }
+ } STRMAP_FOREACH_END;
+}
+
+/** Remove all entries from the addressmap that were set via the
+ * configuration file or the command line. */
+void
+addressmap_clear_configured(void)
+{
+ addressmap_get_mappings(NULL, 0, 0, 0);
+}
+
+/** Remove all entries from the addressmap that are set to expire, ever. */
+void
+addressmap_clear_transient(void)
+{
+ addressmap_get_mappings(NULL, 2, TIME_MAX, 0);
+}
+
+/** Clean out entries from the addressmap cache that were
+ * added long enough ago that they are no longer valid.
+ */
+void
+addressmap_clean(time_t now)
+{
+ addressmap_get_mappings(NULL, 2, now, 0);
+}
+
+/** Free all the elements in the addressmap, and free the addressmap
+ * itself. */
+void
+addressmap_free_all(void)
+{
+ strmap_free(addressmap, addressmap_ent_free);
+ addressmap = NULL;
+
+ strmap_free(virtaddress_reversemap, addressmap_virtaddress_ent_free);
+ virtaddress_reversemap = NULL;
+}
+
+/** Try to find a match for AddressMap expressions that use
+ * wildcard notation such as '*.c.d *.e.f' (so 'a.c.d' will map to 'a.e.f') or
+ * '*.c.d a.b.c' (so 'a.c.d' will map to a.b.c).
+ * Return the matching entry in AddressMap or NULL if no match is found.
+ * For expressions such as '*.c.d *.e.f', truncate <b>address</b> 'a.c.d'
+ * to 'a' before we return the matching AddressMap entry.
+ *
+ * This function does not handle the case where a pattern of the form "*.c.d"
+ * matches the address c.d -- that's done by the main addressmap_rewrite
+ * function.
+ */
+static addressmap_entry_t *
+addressmap_match_superdomains(char *address)
+{
+ addressmap_entry_t *val;
+ char *cp;
+
+ cp = address;
+ while ((cp = strchr(cp, '.'))) {
+ /* cp now points to a suffix of address that begins with a . */
+ val = strmap_get_lc(addressmap, cp+1);
+ if (val && val->src_wildcard) {
+ if (val->dst_wildcard)
+ *cp = '\0';
+ return val;
+ }
+ ++cp;
+ }
+ return NULL;
+}
+
+/** Look at address, and rewrite it until it doesn't want any
+ * more rewrites; but don't get into an infinite loop.
+ * Don't write more than maxlen chars into address. Return true if the
+ * address changed; false otherwise. Set *<b>expires_out</b> to the
+ * expiry time of the result, or to <b>time_max</b> if the result does
+ * not expire.
+ *
+ * If <b>exit_source_out</b> is non-null, we set it as follows. If we the
+ * address starts out as a non-exit address, and we remap it to an .exit
+ * address at any point, then set *<b>exit_source_out</b> to the
+ * address_entry_source_t of the first such rule. Set *<b>exit_source_out</b>
+ * to ADDRMAPSRC_NONE if there is no such rewrite, or if the original address
+ * was a .exit.
+ */
+int
+addressmap_rewrite(char *address, size_t maxlen,
+ unsigned flags,
+ time_t *expires_out,
+ addressmap_entry_source_t *exit_source_out)
+{
+ addressmap_entry_t *ent;
+ int rewrites;
+ time_t expires = TIME_MAX;
+ addressmap_entry_source_t exit_source = ADDRMAPSRC_NONE;
+ char *addr_orig = tor_strdup(address);
+ char *log_addr_orig = NULL;
+
+ for (rewrites = 0; rewrites < 16; rewrites++) {
+ int exact_match = 0;
+ log_addr_orig = tor_strdup(escaped_safe_str_client(address));
+
+ ent = strmap_get(addressmap, address);
+
+ if (!ent || !ent->new_address) {
+ ent = addressmap_match_superdomains(address);
+ } else {
+ if (ent->src_wildcard && !ent->dst_wildcard &&
+ !strcasecmp(address, ent->new_address)) {
+ /* This is a rule like *.example.com example.com, and we just got
+ * "example.com" */
+ goto done;
+ }
+
+ exact_match = 1;
+ }
+
+ if (!ent || !ent->new_address) {
+ goto done;
+ }
+
+ if (ent && ent->source == ADDRMAPSRC_DNS) {
+ sa_family_t f;
+ tor_addr_t tmp;
+ f = tor_addr_parse(&tmp, ent->new_address);
+ if (f == AF_INET && !(flags & AMR_FLAG_USE_IPV4_DNS))
+ goto done;
+ else if (f == AF_INET6 && !(flags & AMR_FLAG_USE_IPV6_DNS))
+ goto done;
+ }
+
+ if (ent->dst_wildcard && !exact_match) {
+ strlcat(address, ".", maxlen);
+ strlcat(address, ent->new_address, maxlen);
+ } else {
+ strlcpy(address, ent->new_address, maxlen);
+ }
+
+ if (!strcmpend(address, ".exit") &&
+ strcmpend(addr_orig, ".exit") &&
+ exit_source == ADDRMAPSRC_NONE) {
+ exit_source = ent->source;
+ }
+
+ log_info(LD_APP, "Addressmap: rewriting %s to %s",
+ log_addr_orig, escaped_safe_str_client(address));
+ if (ent->expires > 1 && ent->expires < expires)
+ expires = ent->expires;
+
+ tor_free(log_addr_orig);
+ }
+ log_warn(LD_CONFIG,
+ "Loop detected: we've rewritten %s 16 times! Using it as-is.",
+ escaped_safe_str_client(address));
+ /* it's fine to rewrite a rewrite, but don't loop forever */
+
+ done:
+ tor_free(addr_orig);
+ tor_free(log_addr_orig);
+ if (exit_source_out)
+ *exit_source_out = exit_source;
+ if (expires_out)
+ *expires_out = TIME_MAX;
+ return (rewrites > 0);
+}
+
+/** If we have a cached reverse DNS entry for the address stored in the
+ * <b>maxlen</b>-byte buffer <b>address</b> (typically, a dotted quad) then
+ * rewrite to the cached value and return 1. Otherwise return 0. Set
+ * *<b>expires_out</b> to the expiry time of the result, or to <b>time_max</b>
+ * if the result does not expire. */
+int
+addressmap_rewrite_reverse(char *address, size_t maxlen, unsigned flags,
+ time_t *expires_out)
+{
+ char *s, *cp;
+ addressmap_entry_t *ent;
+ int r = 0;
+ {
+ sa_family_t f;
+ tor_addr_t tmp;
+ f = tor_addr_parse(&tmp, address);
+ if (f == AF_INET && !(flags & AMR_FLAG_USE_IPV4_DNS))
+ return 0;
+ else if (f == AF_INET6 && !(flags & AMR_FLAG_USE_IPV6_DNS))
+ return 0;
+ }
+
+ tor_asprintf(&s, "REVERSE[%s]", address);
+ ent = strmap_get(addressmap, s);
+ if (ent) {
+ cp = tor_strdup(escaped_safe_str_client(ent->new_address));
+ log_info(LD_APP, "Rewrote reverse lookup %s -> %s",
+ escaped_safe_str_client(s), cp);
+ tor_free(cp);
+ strlcpy(address, ent->new_address, maxlen);
+ r = 1;
+ }
+
+ if (expires_out)
+ *expires_out = (ent && ent->expires > 1) ? ent->expires : TIME_MAX;
+
+ tor_free(s);
+ return r;
+}
+
+/** Return 1 if <b>address</b> is already registered, else return 0. If address
+ * is already registered, and <b>update_expires</b> is non-zero, then update
+ * the expiry time on the mapping with update_expires if it is a
+ * mapping created by TrackHostExits. */
+int
+addressmap_have_mapping(const char *address, int update_expiry)
+{
+ addressmap_entry_t *ent;
+ if (!(ent=strmap_get_lc(addressmap, address)))
+ return 0;
+ if (update_expiry && ent->source==ADDRMAPSRC_TRACKEXIT)
+ ent->expires=time(NULL) + update_expiry;
+ return 1;
+}
+
+/** Register a request to map <b>address</b> to <b>new_address</b>,
+ * which will expire on <b>expires</b> (or 0 if never expires from
+ * config file, 1 if never expires from controller, 2 if never expires
+ * (virtual address mapping) from the controller.)
+ *
+ * <b>new_address</b> should be a newly dup'ed string, which we'll use or
+ * free as appropriate. We will leave address alone.
+ *
+ * If <b>wildcard_addr</b> is true, then the mapping will match any address
+ * equal to <b>address</b>, or any address ending with a period followed by
+ * <b>address</b>. If <b>wildcard_addr</b> and <b>wildcard_new_addr</b> are
+ * both true, the mapping will rewrite addresses that end with
+ * ".<b>address</b>" into ones that end with ".<b>new_address</b>."
+ *
+ * If <b>new_address</b> is NULL, or <b>new_address</b> is equal to
+ * <b>address</b> and <b>wildcard_addr</b> is equal to
+ * <b>wildcard_new_addr</b>, remove any mappings that exist from
+ * <b>address</b>.
+ *
+ *
+ * It is an error to set <b>wildcard_new_addr</b> if <b>wildcard_addr</b> is
+ * not set. */
+void
+addressmap_register(const char *address, char *new_address, time_t expires,
+ addressmap_entry_source_t source,
+ const int wildcard_addr,
+ const int wildcard_new_addr)
+{
+ addressmap_entry_t *ent;
+
+ if (wildcard_new_addr)
+ tor_assert(wildcard_addr);
+
+ ent = strmap_get(addressmap, address);
+ if (!new_address || (!strcasecmp(address,new_address) &&
+ wildcard_addr == wildcard_new_addr)) {
+ /* Remove the mapping, if any. */
+ tor_free(new_address);
+ if (ent) {
+ addressmap_ent_remove(address,ent);
+ strmap_remove(addressmap, address);
+ }
+ return;
+ }
+ if (!ent) { /* make a new one and register it */
+ ent = tor_malloc_zero(sizeof(addressmap_entry_t));
+ strmap_set(addressmap, address, ent);
+ } else if (ent->new_address) { /* we need to clean up the old mapping. */
+ if (expires > 1) {
+ log_info(LD_APP,"Temporary addressmap ('%s' to '%s') not performed, "
+ "since it's already mapped to '%s'",
+ safe_str_client(address),
+ safe_str_client(new_address),
+ safe_str_client(ent->new_address));
+ tor_free(new_address);
+ return;
+ }
+ if (address_is_in_virtual_range(ent->new_address) &&
+ expires != 2) {
+ /* XXX This isn't the perfect test; we want to avoid removing
+ * mappings set from the control interface _as virtual mapping */
+ addressmap_virtaddress_remove(address, ent);
+ }
+ tor_free(ent->new_address);
+ } /* else { we have an in-progress resolve with no mapping. } */
+
+ ent->new_address = new_address;
+ ent->expires = expires==2 ? 1 : expires;
+ ent->num_resolve_failures = 0;
+ ent->source = source;
+ ent->src_wildcard = wildcard_addr ? 1 : 0;
+ ent->dst_wildcard = wildcard_new_addr ? 1 : 0;
+
+ log_info(LD_CONFIG, "Addressmap: (re)mapped '%s' to '%s'",
+ safe_str_client(address),
+ safe_str_client(ent->new_address));
+ control_event_address_mapped(address, ent->new_address, expires, NULL, 1);
+}
+
+/** An attempt to resolve <b>address</b> failed at some OR.
+ * Increment the number of resolve failures we have on record
+ * for it, and then return that number.
+ */
+int
+client_dns_incr_failures(const char *address)
+{
+ addressmap_entry_t *ent = strmap_get(addressmap, address);
+ if (!ent) {
+ ent = tor_malloc_zero(sizeof(addressmap_entry_t));
+ ent->expires = time(NULL) + MAX_DNS_ENTRY_AGE;
+ strmap_set(addressmap,address,ent);
+ }
+ if (ent->num_resolve_failures < SHORT_MAX)
+ ++ent->num_resolve_failures; /* don't overflow */
+ log_info(LD_APP, "Address %s now has %d resolve failures.",
+ safe_str_client(address),
+ ent->num_resolve_failures);
+ return ent->num_resolve_failures;
+}
+
+/** If <b>address</b> is in the client DNS addressmap, reset
+ * the number of resolve failures we have on record for it.
+ * This is used when we fail a stream because it won't resolve:
+ * otherwise future attempts on that address will only try once.
+ */
+void
+client_dns_clear_failures(const char *address)
+{
+ addressmap_entry_t *ent = strmap_get(addressmap, address);
+ if (ent)
+ ent->num_resolve_failures = 0;
+}
+
+/** Record the fact that <b>address</b> resolved to <b>name</b>.
+ * We can now use this in subsequent streams via addressmap_rewrite()
+ * so we can more correctly choose an exit that will allow <b>address</b>.
+ *
+ * If <b>exitname</b> is defined, then append the addresses with
+ * ".exitname.exit" before registering the mapping.
+ *
+ * If <b>ttl</b> is nonnegative, the mapping will be valid for
+ * <b>ttl</b>seconds; otherwise, we use the default.
+ */
+static void
+client_dns_set_addressmap_impl(entry_connection_t *for_conn,
+ const char *address, const char *name,
+ const char *exitname,
+ int ttl)
+{
+ char *extendedaddress=NULL, *extendedval=NULL;
+ (void)for_conn;
+
+ tor_assert(address);
+ tor_assert(name);
+
+ if (ttl<0)
+ ttl = DEFAULT_DNS_TTL;
+ else
+ ttl = dns_clip_ttl(ttl);
+
+ if (exitname) {
+ /* XXXX fails to ever get attempts to get an exit address of
+ * google.com.digest[=~]nickname.exit; we need a syntax for this that
+ * won't make strict RFC952-compliant applications (like us) barf. */
+ tor_asprintf(&extendedaddress,
+ "%s.%s.exit", address, exitname);
+ tor_asprintf(&extendedval,
+ "%s.%s.exit", name, exitname);
+ } else {
+ tor_asprintf(&extendedaddress,
+ "%s", address);
+ tor_asprintf(&extendedval,
+ "%s", name);
+ }
+ addressmap_register(extendedaddress, extendedval,
+ time(NULL) + ttl, ADDRMAPSRC_DNS, 0, 0);
+ tor_free(extendedaddress);
+}
+
+/** Record the fact that <b>address</b> resolved to <b>val</b>.
+ * We can now use this in subsequent streams via addressmap_rewrite()
+ * so we can more correctly choose an exit that will allow <b>address</b>.
+ *
+ * If <b>exitname</b> is defined, then append the addresses with
+ * ".exitname.exit" before registering the mapping.
+ *
+ * If <b>ttl</b> is nonnegative, the mapping will be valid for
+ * <b>ttl</b>seconds; otherwise, we use the default.
+ */
+void
+client_dns_set_addressmap(entry_connection_t *for_conn,
+ const char *address,
+ const tor_addr_t *val,
+ const char *exitname,
+ int ttl)
+{
+ tor_addr_t addr_tmp;
+ char valbuf[TOR_ADDR_BUF_LEN];
+
+ tor_assert(address);
+ tor_assert(val);
+
+ if (tor_addr_parse(&addr_tmp, address) >= 0)
+ return; /* If address was an IP address already, don't add a mapping. */
+
+ if (tor_addr_family(val) == AF_INET) {
+ if (! for_conn->cache_ipv4_answers)
+ return;
+ } else if (tor_addr_family(val) == AF_INET6) {
+ if (! for_conn->cache_ipv6_answers)
+ return;
+ }
+
+ if (! tor_addr_to_str(valbuf, val, sizeof(valbuf), 1))
+ return;
+
+ client_dns_set_addressmap_impl(for_conn, address, valbuf, exitname, ttl);
+}
+
+/** Add a cache entry noting that <b>address</b> (ordinarily a dotted quad)
+ * resolved via a RESOLVE_PTR request to the hostname <b>v</b>.
+ *
+ * If <b>exitname</b> is defined, then append the addresses with
+ * ".exitname.exit" before registering the mapping.
+ *
+ * If <b>ttl</b> is nonnegative, the mapping will be valid for
+ * <b>ttl</b>seconds; otherwise, we use the default.
+ */
+void
+client_dns_set_reverse_addressmap(entry_connection_t *for_conn,
+ const char *address, const char *v,
+ const char *exitname,
+ int ttl)
+{
+ char *s = NULL;
+ {
+ tor_addr_t tmp_addr;
+ sa_family_t f = tor_addr_parse(&tmp_addr, address);
+ if ((f == AF_INET && ! for_conn->cache_ipv4_answers) ||
+ (f == AF_INET6 && ! for_conn->cache_ipv6_answers))
+ return;
+ }
+ tor_asprintf(&s, "REVERSE[%s]", address);
+ client_dns_set_addressmap_impl(for_conn, s, v, exitname, ttl);
+ tor_free(s);
+}
+
+/* By default, we hand out 127.192.0.1 through 127.254.254.254.
+ * These addresses should map to localhost, so even if the
+ * application accidentally tried to connect to them directly (not
+ * via Tor), it wouldn't get too far astray.
+ *
+ * These options are configured by parse_virtual_addr_network().
+ */
+
+static virtual_addr_conf_t virtaddr_conf_ipv4;
+static virtual_addr_conf_t virtaddr_conf_ipv6;
+
+/** Read a netmask of the form 127.192.0.0/10 from "val", and check whether
+ * it's a valid set of virtual addresses to hand out in response to MAPADDRESS
+ * requests. Return 0 on success; set *msg (if provided) to a newly allocated
+ * string and return -1 on failure. If validate_only is false, sets the
+ * actual virtual address range to the parsed value. */
+int
+parse_virtual_addr_network(const char *val, sa_family_t family,
+ int validate_only,
+ char **msg)
+{
+ const int ipv6 = (family == AF_INET6);
+ tor_addr_t addr;
+ maskbits_t bits;
+ const int max_bits = ipv6 ? 40 : 16;
+ virtual_addr_conf_t *conf = ipv6 ? &virtaddr_conf_ipv6 : &virtaddr_conf_ipv4;
+
+ if (tor_addr_parse_mask_ports(val, 0, &addr, &bits, NULL, NULL) < 0) {
+ if (msg)
+ tor_asprintf(msg, "Error parsing VirtualAddressNetwork%s %s",
+ ipv6?"IPv6":"", val);
+ return -1;
+ }
+ if (tor_addr_family(&addr) != family) {
+ if (msg)
+ tor_asprintf(msg, "Incorrect address type for VirtualAddressNetwork%s",
+ ipv6?"IPv6":"");
+ return -1;
+ }
+#if 0
+ if (port_min != 1 || port_max != 65535) {
+ if (msg)
+ tor_asprintf(msg, "Can't specify ports on VirtualAddressNetwork%s",
+ ipv6?"IPv6":"");
+ return -1;
+ }
+#endif
+
+ if (bits > max_bits) {
+ if (msg)
+ tor_asprintf(msg, "VirtualAddressNetwork%s expects a /%d "
+ "network or larger",ipv6?"IPv6":"", max_bits);
+ return -1;
+ }
+
+ if (validate_only)
+ return 0;
+
+ tor_addr_copy(&conf->addr, &addr);
+ conf->bits = bits;
+
+ return 0;
+}
+
+/**
+ * Return true iff <b>addr</b> is likely to have been returned by
+ * client_dns_get_unused_address.
+ **/
+int
+address_is_in_virtual_range(const char *address)
+{
+ tor_addr_t addr;
+ tor_assert(address);
+ if (!strcasecmpend(address, ".virtual")) {
+ return 1;
+ } else if (tor_addr_parse(&addr, address) >= 0) {
+ const virtual_addr_conf_t *conf = (tor_addr_family(&addr) == AF_INET6) ?
+ &virtaddr_conf_ipv6 : &virtaddr_conf_ipv4;
+ if (tor_addr_compare_masked(&addr, &conf->addr, conf->bits, CMP_EXACT)==0)
+ return 1;
+ }
+ return 0;
+}
+
+/** Return a random address conforming to the virtual address configuration
+ * in <b>conf</b>.
+ */
+STATIC void
+get_random_virtual_addr(const virtual_addr_conf_t *conf, tor_addr_t *addr_out)
+{
+ uint8_t tmp[4];
+ const uint8_t *addr_bytes;
+ uint8_t bytes[16];
+ const int ipv6 = tor_addr_family(&conf->addr) == AF_INET6;
+ const int total_bytes = ipv6 ? 16 : 4;
+
+ tor_assert(conf->bits <= total_bytes * 8);
+
+ /* Set addr_bytes to the bytes of the virtual network, in host order */
+ if (ipv6) {
+ addr_bytes = tor_addr_to_in6_addr8(&conf->addr);
+ } else {
+ set_uint32(tmp, tor_addr_to_ipv4n(&conf->addr));
+ addr_bytes = tmp;
+ }
+
+ /* Get an appropriate number of random bytes. */
+ crypto_rand((char*)bytes, total_bytes);
+
+ /* Now replace the first "conf->bits" bits of 'bytes' with addr_bytes*/
+ if (conf->bits >= 8)
+ memcpy(bytes, addr_bytes, conf->bits / 8);
+ if (conf->bits & 7) {
+ uint8_t mask = 0xff >> (conf->bits & 7);
+ bytes[conf->bits/8] &= mask;
+ bytes[conf->bits/8] |= addr_bytes[conf->bits/8] & ~mask;
+ }
+
+ if (ipv6)
+ tor_addr_from_ipv6_bytes(addr_out, (char*) bytes);
+ else
+ tor_addr_from_ipv4n(addr_out, get_uint32(bytes));
+
+ tor_assert(tor_addr_compare_masked(addr_out, &conf->addr,
+ conf->bits, CMP_EXACT)==0);
+}
+
+/** Return a newly allocated string holding an address of <b>type</b>
+ * (one of RESOLVED_TYPE_{IPV4|HOSTNAME}) that has not yet been mapped,
+ * and that is very unlikely to be the address of any real host.
+ *
+ * May return NULL if we have run out of virtual addresses.
+ */
+static char *
+addressmap_get_virtual_address(int type)
+{
+ char buf[64];
+ tor_assert(addressmap);
+
+ if (type == RESOLVED_TYPE_HOSTNAME) {
+ char rand[10];
+ do {
+ crypto_rand(rand, sizeof(rand));
+ base32_encode(buf,sizeof(buf),rand,sizeof(rand));
+ strlcat(buf, ".virtual", sizeof(buf));
+ } while (strmap_get(addressmap, buf));
+ return tor_strdup(buf);
+ } else if (type == RESOLVED_TYPE_IPV4 || type == RESOLVED_TYPE_IPV6) {
+ const int ipv6 = (type == RESOLVED_TYPE_IPV6);
+ const virtual_addr_conf_t *conf = ipv6 ?
+ &virtaddr_conf_ipv6 : &virtaddr_conf_ipv4;
+
+ /* Don't try more than 1000 times. This gives us P < 1e-9 for
+ * failing to get a good address so long as the address space is
+ * less than ~97.95% full. That's always going to be true under
+ * sensible circumstances for an IPv6 /10, and it's going to be
+ * true for an IPv4 /10 as long as we've handed out less than
+ * 4.08 million addresses. */
+ uint32_t attempts = 1000;
+
+ tor_addr_t addr;
+
+ while (attempts--) {
+ get_random_virtual_addr(conf, &addr);
+
+ if (!ipv6) {
+ /* Don't hand out any .0 or .255 address. */
+ const uint32_t a = tor_addr_to_ipv4h(&addr);
+ if ((a & 0xff) == 0 || (a & 0xff) == 0xff)
+ continue;
+ }
+
+ tor_addr_to_str(buf, &addr, sizeof(buf), 1);
+ if (!strmap_get(addressmap, buf)) {
+ /* XXXX This code is to make sure I didn't add an undecorated version
+ * by mistake. I hope it's needless. */
+ char tmp[TOR_ADDR_BUF_LEN];
+ tor_addr_to_str(buf, &addr, sizeof(tmp), 0);
+ if (strmap_get(addressmap, tmp)) {
+ log_warn(LD_BUG, "%s wasn't in the addressmap, but %s was.",
+ buf, tmp);
+ continue;
+ }
+
+ return tor_strdup(buf);
+ }
+ }
+ log_warn(LD_CONFIG, "Ran out of virtual addresses!");
+ return NULL;
+ } else {
+ log_warn(LD_BUG, "Called with unsupported address type (%d)", type);
+ return NULL;
+ }
+}
+
+/** A controller has requested that we map some address of type
+ * <b>type</b> to the address <b>new_address</b>. Choose an address
+ * that is unlikely to be used, and map it, and return it in a newly
+ * allocated string. If another address of the same type is already
+ * mapped to <b>new_address</b>, try to return a copy of that address.
+ *
+ * The string in <b>new_address</b> may be freed or inserted into a map
+ * as appropriate. May return NULL if are out of virtual addresses.
+ **/
+const char *
+addressmap_register_virtual_address(int type, char *new_address)
+{
+ char **addrp;
+ virtaddress_entry_t *vent;
+ int vent_needs_to_be_added = 0;
+
+ tor_assert(new_address);
+ tor_assert(addressmap);
+ tor_assert(virtaddress_reversemap);
+
+ vent = strmap_get(virtaddress_reversemap, new_address);
+ if (!vent) {
+ vent = tor_malloc_zero(sizeof(virtaddress_entry_t));
+ vent_needs_to_be_added = 1;
+ }
+
+ if (type == RESOLVED_TYPE_IPV4)
+ addrp = &vent->ipv4_address;
+ else if (type == RESOLVED_TYPE_IPV6)
+ addrp = &vent->ipv6_address;
+ else
+ addrp = &vent->hostname_address;
+
+ if (*addrp) {
+ addressmap_entry_t *ent = strmap_get(addressmap, *addrp);
+ if (ent && ent->new_address &&
+ !strcasecmp(new_address, ent->new_address)) {
+ tor_free(new_address);
+ tor_assert(!vent_needs_to_be_added);
+ return tor_strdup(*addrp);
+ } else {
+ log_warn(LD_BUG,
+ "Internal confusion: I thought that '%s' was mapped to by "
+ "'%s', but '%s' really maps to '%s'. This is a harmless bug.",
+ safe_str_client(new_address),
+ safe_str_client(*addrp),
+ safe_str_client(*addrp),
+ ent?safe_str_client(ent->new_address):"(nothing)");
+ }
+ }
+
+ tor_free(*addrp);
+ *addrp = addressmap_get_virtual_address(type);
+ if (!*addrp) {
+ tor_free(vent);
+ tor_free(new_address);
+ return NULL;
+ }
+ log_info(LD_APP, "Registering map from %s to %s", *addrp, new_address);
+ if (vent_needs_to_be_added)
+ strmap_set(virtaddress_reversemap, new_address, vent);
+ addressmap_register(*addrp, new_address, 2, ADDRMAPSRC_AUTOMAP, 0, 0);
+
+#if 0
+ {
+ /* Try to catch possible bugs */
+ addressmap_entry_t *ent;
+ ent = strmap_get(addressmap, *addrp);
+ tor_assert(ent);
+ tor_assert(!strcasecmp(ent->new_address,new_address));
+ vent = strmap_get(virtaddress_reversemap, new_address);
+ tor_assert(vent);
+ tor_assert(!strcasecmp(*addrp,
+ (type == RESOLVED_TYPE_IPV4) ?
+ vent->ipv4_address : vent->hostname_address));
+ log_info(LD_APP, "Map from %s to %s okay.",
+ safe_str_client(*addrp),
+ safe_str_client(new_address));
+ }
+#endif
+
+ return *addrp;
+}
+
+/** Return 1 if <b>address</b> has funny characters in it like colons. Return
+ * 0 if it's fine, or if we're configured to allow it anyway. <b>client</b>
+ * should be true if we're using this address as a client; false if we're
+ * using it as a server.
+ */
+int
+address_is_invalid_destination(const char *address, int client)
+{
+ if (client) {
+ if (get_options()->AllowNonRFC953Hostnames)
+ return 0;
+ } else {
+ if (get_options()->ServerDNSAllowNonRFC953Hostnames)
+ return 0;
+ }
+
+ /* It might be an IPv6 address! */
+ {
+ tor_addr_t a;
+ if (tor_addr_parse(&a, address) >= 0)
+ return 0;
+ }
+
+ while (*address) {
+ if (TOR_ISALNUM(*address) ||
+ *address == '-' ||
+ *address == '.' ||
+ *address == '_') /* Underscore is not allowed, but Windows does it
+ * sometimes, just to thumb its nose at the IETF. */
+ ++address;
+ else
+ return 1;
+ }
+ return 0;
+}
+
+/** Iterate over all address mappings which have expiry times between
+ * min_expires and max_expires, inclusive. If sl is provided, add an
+ * "old-addr new-addr expiry" string to sl for each mapping, omitting
+ * the expiry time if want_expiry is false. If sl is NULL, remove the
+ * mappings.
+ */
+void
+addressmap_get_mappings(smartlist_t *sl, time_t min_expires,
+ time_t max_expires, int want_expiry)
+{
+ strmap_iter_t *iter;
+ const char *key;
+ void *val_;
+ addressmap_entry_t *val;
+
+ if (!addressmap)
+ addressmap_init();
+
+ for (iter = strmap_iter_init(addressmap); !strmap_iter_done(iter); ) {
+ strmap_iter_get(iter, &key, &val_);
+ val = val_;
+ if (val->expires >= min_expires && val->expires <= max_expires) {
+ if (!sl) {
+ iter = strmap_iter_next_rmv(addressmap,iter);
+ addressmap_ent_remove(key, val);
+ continue;
+ } else if (val->new_address) {
+ const char *src_wc = val->src_wildcard ? "*." : "";
+ const char *dst_wc = val->dst_wildcard ? "*." : "";
+ if (want_expiry) {
+ if (val->expires < 3 || val->expires == TIME_MAX)
+ smartlist_add_asprintf(sl, "%s%s %s%s NEVER",
+ src_wc, key, dst_wc, val->new_address);
+ else {
+ char time[ISO_TIME_LEN+1];
+ format_iso_time(time, val->expires);
+ smartlist_add_asprintf(sl, "%s%s %s%s \"%s\"",
+ src_wc, key, dst_wc, val->new_address,
+ time);
+ }
+ } else {
+ smartlist_add_asprintf(sl, "%s%s %s%s",
+ src_wc, key, dst_wc, val->new_address);
+ }
+ }
+ }
+ iter = strmap_iter_next(addressmap,iter);
+ }
+}
+
diff --git a/src/or/addressmap.h b/src/or/addressmap.h
new file mode 100644
index 000000000..417832b31
--- /dev/null
+++ b/src/or/addressmap.h
@@ -0,0 +1,62 @@
+/* Copyright (c) 2001 Matej Pfajfar.
+ * Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#ifndef TOR_ADDRESSMAP_H
+#define TOR_ADDRESSMAP_H
+
+#include "testsupport.h"
+
+void addressmap_init(void);
+void addressmap_clear_excluded_trackexithosts(const or_options_t *options);
+void addressmap_clear_invalid_automaps(const or_options_t *options);
+void addressmap_clean(time_t now);
+void addressmap_clear_configured(void);
+void addressmap_clear_transient(void);
+void addressmap_free_all(void);
+#define AMR_FLAG_USE_IPV4_DNS (1u<<0)
+#define AMR_FLAG_USE_IPV6_DNS (1u<<1)
+int addressmap_rewrite(char *address, size_t maxlen, unsigned flags,
+ time_t *expires_out,
+ addressmap_entry_source_t *exit_source_out);
+int addressmap_rewrite_reverse(char *address, size_t maxlen, unsigned flags,
+ time_t *expires_out);
+int addressmap_have_mapping(const char *address, int update_timeout);
+
+void addressmap_register(const char *address, char *new_address,
+ time_t expires, addressmap_entry_source_t source,
+ const int address_wildcard,
+ const int new_address_wildcard);
+int parse_virtual_addr_network(const char *val,
+ sa_family_t family, int validate_only,
+ char **msg);
+int client_dns_incr_failures(const char *address);
+void client_dns_clear_failures(const char *address);
+void client_dns_set_addressmap(entry_connection_t *for_conn,
+ const char *address, const tor_addr_t *val,
+ const char *exitname, int ttl);
+const char *addressmap_register_virtual_address(int type, char *new_address);
+void addressmap_get_mappings(smartlist_t *sl, time_t min_expires,
+ time_t max_expires, int want_expiry);
+int address_is_in_virtual_range(const char *addr);
+void clear_trackexithost_mappings(const char *exitname);
+void client_dns_set_reverse_addressmap(entry_connection_t *for_conn,
+ const char *address, const char *v,
+ const char *exitname, int ttl);
+int addressmap_address_should_automap(const char *address,
+ const or_options_t *options);
+
+#ifdef ADDRESSMAP_PRIVATE
+typedef struct virtual_addr_conf_t {
+ tor_addr_t addr;
+ maskbits_t bits;
+} virtual_addr_conf_t;
+
+STATIC void get_random_virtual_addr(const virtual_addr_conf_t *conf,
+ tor_addr_t *addr_out);
+#endif
+
+#endif
+
diff --git a/src/or/buffers.c b/src/or/buffers.c
index ad5ab83e4..033f86288 100644
--- a/src/or/buffers.c
+++ b/src/or/buffers.c
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -12,12 +12,14 @@
**/
#define BUFFERS_PRIVATE
#include "or.h"
+#include "addressmap.h"
#include "buffers.h"
#include "config.h"
#include "connection_edge.h"
#include "connection_or.h"
#include "control.h"
#include "reasons.h"
+#include "ext_orport.h"
#include "../common/util.h"
#include "../common/torlog.h"
#ifdef HAVE_UNISTD_H
@@ -62,16 +64,6 @@ static int parse_socks_client(const uint8_t *data, size_t datalen,
/* Chunk manipulation functions */
-/** A single chunk on a buffer or in a freelist. */
-typedef struct chunk_t {
- struct chunk_t *next; /**< The next chunk on the buffer or freelist. */
- size_t datalen; /**< The number of bytes stored in this chunk */
- size_t memlen; /**< The number of usable bytes of storage in <b>mem</b>. */
- char *data; /**< A pointer to the first byte of data stored in <b>mem</b>. */
- char mem[FLEXIBLE_ARRAY_MEMBER]; /**< The actual memory used for storage in
- * this chunk. */
-} chunk_t;
-
#define CHUNK_HEADER_LEN STRUCT_OFFSET(chunk_t, mem[0])
/** Return the number of bytes needed to allocate a chunk to hold
@@ -108,6 +100,9 @@ chunk_repack(chunk_t *chunk)
chunk->data = &chunk->mem[0];
}
+/** Keep track of total size of allocated chunks for consistency asserts */
+static size_t total_bytes_allocated_in_chunks = 0;
+
#if defined(ENABLE_BUF_FREELISTS) || defined(RUNNING_DOXYGEN)
/** A freelist of chunks. */
typedef struct chunk_freelist_t {
@@ -147,7 +142,8 @@ static INLINE chunk_freelist_t *
get_freelist(size_t alloc)
{
int i;
- for (i=0; freelists[i].alloc_size <= alloc; ++i) {
+ for (i=0; (freelists[i].alloc_size <= alloc &&
+ freelists[i].alloc_size); ++i ) {
if (freelists[i].alloc_size == alloc) {
return &freelists[i];
}
@@ -171,6 +167,11 @@ chunk_free_unchecked(chunk_t *chunk)
} else {
if (freelist)
++freelist->n_free;
+#ifdef DEBUG_CHUNK_ALLOC
+ tor_assert(alloc == chunk->DBG_alloc);
+#endif
+ tor_assert(total_bytes_allocated_in_chunks >= alloc);
+ total_bytes_allocated_in_chunks -= alloc;
tor_free(chunk);
}
}
@@ -192,13 +193,15 @@ chunk_new_with_alloc_size(size_t alloc)
freelist->lowest_length = freelist->cur_length;
++freelist->n_hit;
} else {
- /* XXXX take advantage of tor_malloc_roundup, once we know how that
- * affects freelists. */
if (freelist)
++freelist->n_alloc;
else
++n_freelist_miss;
ch = tor_malloc(alloc);
+#ifdef DEBUG_CHUNK_ALLOC
+ ch->DBG_alloc = alloc;
+#endif
+ total_bytes_allocated_in_chunks += alloc;
}
ch->next = NULL;
ch->datalen = 0;
@@ -210,16 +213,28 @@ chunk_new_with_alloc_size(size_t alloc)
static void
chunk_free_unchecked(chunk_t *chunk)
{
+ if (!chunk)
+ return;
+#ifdef DEBUG_CHUNK_ALLOC
+ tor_assert(CHUNK_ALLOC_SIZE(chunk->memlen) == chunk->DBG_alloc);
+#endif
+ tor_assert(total_bytes_allocated_in_chunks >=
+ CHUNK_ALLOC_SIZE(chunk->memlen));
+ total_bytes_allocated_in_chunks -= CHUNK_ALLOC_SIZE(chunk->memlen);
tor_free(chunk);
}
static INLINE chunk_t *
chunk_new_with_alloc_size(size_t alloc)
{
chunk_t *ch;
- ch = tor_malloc_roundup(&alloc);
+ ch = tor_malloc(alloc);
ch->next = NULL;
ch->datalen = 0;
+#ifdef DEBUG_CHUNK_ALLOC
+ ch->DBG_alloc = alloc;
+#endif
ch->memlen = CHUNK_SIZE_WITH_ALLOC(alloc);
+ total_bytes_allocated_in_chunks += alloc;
ch->data = &ch->mem[0];
return ch;
}
@@ -231,11 +246,18 @@ static INLINE chunk_t *
chunk_grow(chunk_t *chunk, size_t sz)
{
off_t offset;
+ size_t memlen_orig = chunk->memlen;
tor_assert(sz > chunk->memlen);
offset = chunk->data - chunk->mem;
chunk = tor_realloc(chunk, CHUNK_ALLOC_SIZE(sz));
chunk->memlen = sz;
chunk->data = chunk->mem + offset;
+#ifdef DEBUG_CHUNK_ALLOC
+ tor_assert(chunk->DBG_alloc == CHUNK_ALLOC_SIZE(memlen_orig));
+ chunk->DBG_alloc = CHUNK_ALLOC_SIZE(sz);
+#endif
+ total_bytes_allocated_in_chunks +=
+ CHUNK_ALLOC_SIZE(sz) - CHUNK_ALLOC_SIZE(memlen_orig);
return chunk;
}
@@ -260,12 +282,14 @@ preferred_chunk_size(size_t target)
}
/** Remove from the freelists most chunks that have not been used since the
- * last call to buf_shrink_freelists(). */
-void
+ * last call to buf_shrink_freelists(). Return the amount of memory
+ * freed. */
+size_t
buf_shrink_freelists(int free_all)
{
#ifdef ENABLE_BUF_FREELISTS
int i;
+ size_t total_freed = 0;
disable_control_logging();
for (i = 0; freelists[i].alloc_size; ++i) {
int slack = freelists[i].slack;
@@ -281,7 +305,7 @@ buf_shrink_freelists(int free_all)
chunk_t **chp = &freelists[i].head;
chunk_t *chunk;
while (n_to_skip) {
- if (! (*chp)->next) {
+ if (!(*chp) || ! (*chp)->next) {
log_warn(LD_BUG, "I wanted to skip %d chunks in the freelist for "
"%d-byte chunks, but only found %d. (Length %d)",
orig_n_to_skip, (int)freelists[i].alloc_size,
@@ -297,6 +321,13 @@ buf_shrink_freelists(int free_all)
*chp = NULL;
while (chunk) {
chunk_t *next = chunk->next;
+#ifdef DEBUG_CHUNK_ALLOC
+ tor_assert(chunk->DBG_alloc == CHUNK_ALLOC_SIZE(chunk->memlen));
+#endif
+ tor_assert(total_bytes_allocated_in_chunks >=
+ CHUNK_ALLOC_SIZE(chunk->memlen));
+ total_bytes_allocated_in_chunks -= CHUNK_ALLOC_SIZE(chunk->memlen);
+ total_freed += CHUNK_ALLOC_SIZE(chunk->memlen);
tor_free(chunk);
chunk = next;
--n_to_free;
@@ -314,18 +345,21 @@ buf_shrink_freelists(int free_all)
}
// tor_assert(!n_to_free);
freelists[i].cur_length = new_length;
+ tor_assert(orig_n_to_skip == new_length);
log_info(LD_MM, "Cleaned freelist for %d-byte chunks: original "
- "length %d, kept %d, dropped %d.",
+ "length %d, kept %d, dropped %d. New length is %d",
(int)freelists[i].alloc_size, orig_length,
- orig_n_to_skip, orig_n_to_free);
+ orig_n_to_skip, orig_n_to_free, new_length);
}
freelists[i].lowest_length = freelists[i].cur_length;
assert_freelist_ok(&freelists[i]);
}
done:
enable_control_logging();
+ return total_freed;
#else
(void) free_all;
+ return 0;
#endif
}
@@ -336,11 +370,11 @@ buf_dump_freelist_sizes(int severity)
{
#ifdef ENABLE_BUF_FREELISTS
int i;
- log(severity, LD_MM, "====== Buffer freelists:");
+ tor_log(severity, LD_MM, "====== Buffer freelists:");
for (i = 0; freelists[i].alloc_size; ++i) {
uint64_t total = ((uint64_t)freelists[i].cur_length) *
freelists[i].alloc_size;
- log(severity, LD_MM,
+ tor_log(severity, LD_MM,
U64_FORMAT" bytes in %d %d-byte chunks ["U64_FORMAT
" misses; "U64_FORMAT" frees; "U64_FORMAT" hits]",
U64_PRINTF_ARG(total),
@@ -349,35 +383,23 @@ buf_dump_freelist_sizes(int severity)
U64_PRINTF_ARG(freelists[i].n_free),
U64_PRINTF_ARG(freelists[i].n_hit));
}
- log(severity, LD_MM, U64_FORMAT" allocations in non-freelist sizes",
+ tor_log(severity, LD_MM, U64_FORMAT" allocations in non-freelist sizes",
U64_PRINTF_ARG(n_freelist_miss));
#else
(void)severity;
#endif
}
-/** Magic value for buf_t.magic, to catch pointer errors. */
-#define BUFFER_MAGIC 0xB0FFF312u
-/** A resizeable buffer, optimized for reading and writing. */
-struct buf_t {
- uint32_t magic; /**< Magic cookie for debugging: Must be set to
- * BUFFER_MAGIC. */
- size_t datalen; /**< How many bytes is this buffer holding right now? */
- size_t default_chunk_size; /**< Don't allocate any chunks smaller than
- * this for this buffer. */
- chunk_t *head; /**< First chunk in the list, or NULL for none. */
- chunk_t *tail; /**< Last chunk in the list, or NULL for none. */
-};
-
/** Collapse data from the first N chunks from <b>buf</b> into buf->head,
* growing it as necessary, until buf->head has the first <b>bytes</b> bytes
* of data from the buffer, or until buf->head has all the data in <b>buf</b>.
*
* If <b>nulterminate</b> is true, ensure that there is a 0 byte in
* buf->head->mem right after all the data. */
-static void
+STATIC void
buf_pullup(buf_t *buf, size_t bytes, int nulterminate)
{
+ /* XXXX nothing uses nulterminate; remove it. */
chunk_t *dest, *src;
size_t capacity;
if (!buf->head)
@@ -449,6 +471,20 @@ buf_pullup(buf_t *buf, size_t bytes, int nulterminate)
check();
}
+#ifdef TOR_UNIT_TESTS
+void
+buf_get_first_chunk_data(const buf_t *buf, const char **cp, size_t *sz)
+{
+ if (!buf || !buf->head) {
+ *cp = NULL;
+ *sz = 0;
+ } else {
+ *cp = buf->head->data;
+ *sz = buf->head->datalen;
+ }
+}
+#endif
+
/** Resize buf so it won't hold extra memory that we haven't been
* using lately.
*/
@@ -503,6 +539,12 @@ buf_new(void)
return buf;
}
+size_t
+buf_get_default_chunk_size(const buf_t *buf)
+{
+ return buf->default_chunk_size;
+}
+
/** Remove all data from <b>buf</b>. */
void
buf_clear(buf_t *buf)
@@ -530,7 +572,7 @@ buf_allocation(const buf_t *buf)
size_t total = 0;
const chunk_t *chunk;
for (chunk = buf->head; chunk; chunk = chunk->next) {
- total += chunk->memlen;
+ total += CHUNK_ALLOC_SIZE(chunk->memlen);
}
return total;
}
@@ -563,6 +605,10 @@ static chunk_t *
chunk_copy(const chunk_t *in_chunk)
{
chunk_t *newch = tor_memdup(in_chunk, CHUNK_ALLOC_SIZE(in_chunk->memlen));
+ total_bytes_allocated_in_chunks += CHUNK_ALLOC_SIZE(in_chunk->memlen);
+#ifdef DEBUG_CHUNK_ALLOC
+ newch->DBG_alloc = CHUNK_ALLOC_SIZE(in_chunk->memlen);
+#endif
newch->next = NULL;
if (in_chunk->data) {
off_t offset = in_chunk->data - in_chunk->mem;
@@ -598,6 +644,7 @@ static chunk_t *
buf_add_chunk_with_capacity(buf_t *buf, size_t capacity, int capped)
{
chunk_t *chunk;
+ struct timeval now;
if (CHUNK_ALLOC_SIZE(capacity) < buf->default_chunk_size) {
chunk = chunk_new_with_alloc_size(buf->default_chunk_size);
} else if (capped && CHUNK_ALLOC_SIZE(capacity) > MAX_CHUNK_ALLOC) {
@@ -605,6 +652,10 @@ buf_add_chunk_with_capacity(buf_t *buf, size_t capacity, int capped)
} else {
chunk = chunk_new_with_alloc_size(preferred_chunk_size(capacity));
}
+
+ tor_gettimeofday_cached_monotonic(&now);
+ chunk->inserted_time = (uint32_t)tv_to_msec(&now);
+
if (buf->tail) {
tor_assert(buf->head);
buf->tail->next = chunk;
@@ -617,6 +668,26 @@ buf_add_chunk_with_capacity(buf_t *buf, size_t capacity, int capped)
return chunk;
}
+/** Return the age of the oldest chunk in the buffer <b>buf</b>, in
+ * milliseconds. Requires the current time, in truncated milliseconds since
+ * the epoch, as its input <b>now</b>.
+ */
+uint32_t
+buf_get_oldest_chunk_timestamp(const buf_t *buf, uint32_t now)
+{
+ if (buf->head) {
+ return now - buf->head->inserted_time;
+ } else {
+ return 0;
+ }
+}
+
+size_t
+buf_get_total_allocation(void)
+{
+ return total_bytes_allocated_in_chunks;
+}
+
/** Read up to <b>at_most</b> bytes from the socket <b>fd</b> into
* <b>chunk</b> (which must be on <b>buf</b>). If we get an EOF, set
* *<b>reached_eof</b> to 1. Return -1 on error, 0 on eof or blocking,
@@ -1046,28 +1117,34 @@ cell_command_is_var_length(uint8_t command, int linkproto)
int
fetch_var_cell_from_buf(buf_t *buf, var_cell_t **out, int linkproto)
{
- char hdr[VAR_CELL_HEADER_SIZE];
+ char hdr[VAR_CELL_MAX_HEADER_SIZE];
var_cell_t *result;
uint8_t command;
uint16_t length;
+ const int wide_circ_ids = linkproto >= MIN_LINK_PROTO_FOR_WIDE_CIRC_IDS;
+ const int circ_id_len = get_circ_id_size(wide_circ_ids);
+ const unsigned header_len = get_var_cell_header_size(wide_circ_ids);
check();
*out = NULL;
- if (buf->datalen < VAR_CELL_HEADER_SIZE)
+ if (buf->datalen < header_len)
return 0;
- peek_from_buf(hdr, sizeof(hdr), buf);
+ peek_from_buf(hdr, header_len, buf);
- command = get_uint8(hdr+2);
+ command = get_uint8(hdr + circ_id_len);
if (!(cell_command_is_var_length(command, linkproto)))
return 0;
- length = ntohs(get_uint16(hdr+3));
- if (buf->datalen < (size_t)(VAR_CELL_HEADER_SIZE+length))
+ length = ntohs(get_uint16(hdr + circ_id_len + 1));
+ if (buf->datalen < (size_t)(header_len+length))
return 1;
result = var_cell_new(length);
result->command = command;
- result->circ_id = ntohs(get_uint16(hdr));
+ if (wide_circ_ids)
+ result->circ_id = ntohl(get_uint32(hdr));
+ else
+ result->circ_id = ntohs(get_uint16(hdr));
- buf_remove_from_front(buf, VAR_CELL_HEADER_SIZE);
+ buf_remove_from_front(buf, header_len);
peek_from_buf((char*) result->payload, length, buf);
buf_remove_from_front(buf, length);
check();
@@ -1126,30 +1203,36 @@ fetch_var_cell_from_evbuffer(struct evbuffer *buf, var_cell_t **out,
uint16_t cell_length;
var_cell_t *cell;
int result = 0;
+ const int wide_circ_ids = linkproto >= MIN_LINK_PROTO_FOR_WIDE_CIRC_IDS;
+ const int circ_id_len = get_circ_id_size(wide_circ_ids);
+ const unsigned header_len = get_var_cell_header_size(wide_circ_ids);
*out = NULL;
buf_len = evbuffer_get_length(buf);
- if (buf_len < VAR_CELL_HEADER_SIZE)
+ if (buf_len < header_len)
return 0;
- n = inspect_evbuffer(buf, &hdr, VAR_CELL_HEADER_SIZE, &free_hdr, NULL);
- tor_assert(n >= VAR_CELL_HEADER_SIZE);
+ n = inspect_evbuffer(buf, &hdr, header_len, &free_hdr, NULL);
+ tor_assert(n >= header_len);
- command = get_uint8(hdr+2);
+ command = get_uint8(hdr + circ_id_len);
if (!(cell_command_is_var_length(command, linkproto))) {
goto done;
}
- cell_length = ntohs(get_uint16(hdr+3));
- if (buf_len < (size_t)(VAR_CELL_HEADER_SIZE+cell_length)) {
+ cell_length = ntohs(get_uint16(hdr + circ_id_len + 1));
+ if (buf_len < (size_t)(header_len+cell_length)) {
result = 1; /* Not all here yet. */
goto done;
}
cell = var_cell_new(cell_length);
cell->command = command;
- cell->circ_id = ntohs(get_uint16(hdr));
- evbuffer_drain(buf, VAR_CELL_HEADER_SIZE);
+ if (wide_circ_ids)
+ cell->circ_id = ntohl(get_uint32(hdr));
+ else
+ cell->circ_id = ntohs(get_uint16(hdr));
+ evbuffer_drain(buf, header_len);
evbuffer_remove(buf, cell->payload, cell_length);
*out = cell;
result = 1;
@@ -1282,7 +1365,7 @@ buf_matches_at_pos(const buf_pos_t *pos, const char *s, size_t n)
/** Return the first position in <b>buf</b> at which the <b>n</b>-character
* string <b>s</b> occurs, or -1 if it does not occur. */
-/*private*/ int
+STATIC int
buf_find_string_offset(const buf_t *buf, const char *s, size_t n)
{
buf_pos_t pos;
@@ -1506,22 +1589,19 @@ log_unsafe_socks_warning(int socks_protocol, const char *address,
static ratelim_t socks_ratelim = RATELIM_INIT(SOCKS_WARN_INTERVAL);
const or_options_t *options = get_options();
- char *m = NULL;
if (! options->WarnUnsafeSocks)
return;
- if (safe_socks || (m = rate_limit_log(&socks_ratelim, approx_time()))) {
- log_warn(LD_APP,
+ if (safe_socks) {
+ log_fn_ratelim(&socks_ratelim, LOG_WARN, LD_APP,
"Your application (using socks%d to port %d) is giving "
"Tor only an IP address. Applications that do DNS resolves "
"themselves may leak information. Consider using Socks4A "
"(e.g. via privoxy or socat) instead. For more information, "
"please see https://wiki.torproject.org/TheOnionRouter/"
- "TorFAQ#SOCKSAndDNS.%s%s",
+ "TorFAQ#SOCKSAndDNS.%s",
socks_protocol,
(int)port,
- safe_socks ? " Rejecting." : "",
- m ? m : "");
- tor_free(m);
+ safe_socks ? " Rejecting." : "");
}
control_event_client_status(LOG_WARN,
"DANGEROUS_SOCKS PROTOCOL=SOCKS%d ADDRESS=%s:%d",
@@ -1693,6 +1773,64 @@ fetch_from_evbuffer_socks(struct evbuffer *buf, socks_request_t *req,
}
#endif
+/** The size of the header of an Extended ORPort message: 2 bytes for
+ * COMMAND, 2 bytes for BODYLEN */
+#define EXT_OR_CMD_HEADER_SIZE 4
+
+/** Read <b>buf</b>, which should contain an Extended ORPort message
+ * from a transport proxy. If well-formed, create and populate
+ * <b>out</b> with the Extended ORport message. Return 0 if the
+ * buffer was incomplete, 1 if it was well-formed and -1 if we
+ * encountered an error while parsing it. */
+int
+fetch_ext_or_command_from_buf(buf_t *buf, ext_or_cmd_t **out)
+{
+ char hdr[EXT_OR_CMD_HEADER_SIZE];
+ uint16_t len;
+
+ check();
+ if (buf->datalen < EXT_OR_CMD_HEADER_SIZE)
+ return 0;
+ peek_from_buf(hdr, sizeof(hdr), buf);
+ len = ntohs(get_uint16(hdr+2));
+ if (buf->datalen < (unsigned)len + EXT_OR_CMD_HEADER_SIZE)
+ return 0;
+ *out = ext_or_cmd_new(len);
+ (*out)->cmd = ntohs(get_uint16(hdr));
+ (*out)->len = len;
+ buf_remove_from_front(buf, EXT_OR_CMD_HEADER_SIZE);
+ fetch_from_buf((*out)->body, len, buf);
+ return 1;
+}
+
+#ifdef USE_BUFFEREVENTS
+/** Read <b>buf</b>, which should contain an Extended ORPort message
+ * from a transport proxy. If well-formed, create and populate
+ * <b>out</b> with the Extended ORport message. Return 0 if the
+ * buffer was incomplete, 1 if it was well-formed and -1 if we
+ * encountered an error while parsing it. */
+int
+fetch_ext_or_command_from_evbuffer(struct evbuffer *buf, ext_or_cmd_t **out)
+{
+ char hdr[EXT_OR_CMD_HEADER_SIZE];
+ uint16_t len;
+ size_t buf_len = evbuffer_get_length(buf);
+
+ if (buf_len < EXT_OR_CMD_HEADER_SIZE)
+ return 0;
+ evbuffer_copyout(buf, hdr, EXT_OR_CMD_HEADER_SIZE);
+ len = ntohs(get_uint16(hdr+2));
+ if (buf_len < (unsigned)len + EXT_OR_CMD_HEADER_SIZE)
+ return 0;
+ *out = ext_or_cmd_new(len);
+ (*out)->cmd = ntohs(get_uint16(hdr));
+ (*out)->len = len;
+ evbuffer_drain(buf, EXT_OR_CMD_HEADER_SIZE);
+ evbuffer_remove(buf, (*out)->body, len);
+ return 1;
+}
+#endif
+
/** Implementation helper to implement fetch_from_*_socks. Instead of looking
* at a buffer's contents, we look at the <b>datalen</b> bytes of data in
* <b>data</b>. Instead of removing data from the buffer, we set
@@ -1742,7 +1880,7 @@ parse_socks(const char *data, size_t datalen, socks_request_t *req,
return 0;
}
req->replylen = 2; /* 2 bytes of response */
- req->reply[0] = 5;
+ req->reply[0] = 1; /* authversion == 1 */
req->reply[1] = 0; /* authentication successful */
log_debug(LD_APP,
"socks5: Accepted username/password without checking.");
@@ -1773,6 +1911,7 @@ parse_socks(const char *data, size_t datalen, socks_request_t *req,
if (req->socks_version != 5) { /* we need to negotiate a method */
unsigned char nummethods = (unsigned char)*(data+1);
+ int have_user_pass, have_no_auth;
int r=0;
tor_assert(!req->socks_version);
if (datalen < 2u+nummethods) {
@@ -1783,19 +1922,21 @@ parse_socks(const char *data, size_t datalen, socks_request_t *req,
return -1;
req->replylen = 2; /* 2 bytes of response */
req->reply[0] = 5; /* socks5 reply */
- if (memchr(data+2, SOCKS_NO_AUTH, nummethods)) {
- req->reply[1] = SOCKS_NO_AUTH; /* tell client to use "none" auth
- method */
- req->socks_version = 5; /* remember we've already negotiated auth */
- log_debug(LD_APP,"socks5: accepted method 0 (no authentication)");
- r=0;
- } else if (memchr(data+2, SOCKS_USER_PASS, nummethods)) {
+ have_user_pass = (memchr(data+2, SOCKS_USER_PASS, nummethods) !=NULL);
+ have_no_auth = (memchr(data+2, SOCKS_NO_AUTH, nummethods) !=NULL);
+ if (have_user_pass && !(have_no_auth && req->socks_prefer_no_auth)) {
req->auth_type = SOCKS_USER_PASS;
req->reply[1] = SOCKS_USER_PASS; /* tell client to use "user/pass"
auth method */
req->socks_version = 5; /* remember we've already negotiated auth */
log_debug(LD_APP,"socks5: accepted method 2 (username/password)");
r=0;
+ } else if (have_no_auth) {
+ req->reply[1] = SOCKS_NO_AUTH; /* tell client to use "none" auth
+ method */
+ req->socks_version = 5; /* remember we've already negotiated auth */
+ log_debug(LD_APP,"socks5: accepted method 0 (no authentication)");
+ r=0;
} else {
log_warn(LD_APP,
"socks5: offered methods don't include 'no auth' or "
@@ -2336,6 +2477,7 @@ write_to_buf_zlib(buf_t *buf, tor_zlib_state_t *state,
char *next;
size_t old_avail, avail;
int over = 0;
+
do {
int need_new_chunk = 0;
if (!buf->tail || ! CHUNK_REMAINING_CAPACITY(buf->tail)) {
diff --git a/src/or/buffers.h b/src/or/buffers.h
index a5886adc7..c90e14750 100644
--- a/src/or/buffers.h
+++ b/src/or/buffers.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,22 +9,28 @@
* \brief Header file for buffers.c.
**/
-#ifndef _TOR_BUFFERS_H
-#define _TOR_BUFFERS_H
+#ifndef TOR_BUFFERS_H
+#define TOR_BUFFERS_H
+
+#include "testsupport.h"
buf_t *buf_new(void);
buf_t *buf_new_with_capacity(size_t size);
+size_t buf_get_default_chunk_size(const buf_t *buf);
void buf_free(buf_t *buf);
void buf_clear(buf_t *buf);
buf_t *buf_copy(const buf_t *buf);
void buf_shrink(buf_t *buf);
-void buf_shrink_freelists(int free_all);
+size_t buf_shrink_freelists(int free_all);
void buf_dump_freelist_sizes(int severity);
size_t buf_datalen(const buf_t *buf);
size_t buf_allocation(const buf_t *buf);
size_t buf_slack(const buf_t *buf);
+uint32_t buf_get_oldest_chunk_timestamp(const buf_t *buf, uint32_t now);
+size_t buf_get_total_allocation(void);
+
int read_to_buf(tor_socket_t s, size_t at_most, buf_t *buf, int *reached_eof,
int *socket_error);
int read_to_buf_tls(tor_tls_t *tls, size_t at_most, buf_t *buf);
@@ -51,6 +57,8 @@ int fetch_from_buf_line(buf_t *buf, char *data_out, size_t *data_len);
int peek_buf_has_control0_command(buf_t *buf);
+int fetch_ext_or_command_from_buf(buf_t *buf, ext_or_cmd_t **out);
+
#ifdef USE_BUFFEREVENTS
int fetch_var_cell_from_evbuffer(struct evbuffer *buf, var_cell_t **out,
int linkproto);
@@ -66,6 +74,8 @@ int peek_evbuffer_has_control0_command(struct evbuffer *buf);
int write_to_evbuffer_zlib(struct evbuffer *buf, tor_zlib_state_t *state,
const char *data, size_t data_len,
int done);
+int fetch_ext_or_command_from_evbuffer(struct evbuffer *buf,
+ ext_or_cmd_t **out);
#endif
#ifdef USE_BUFFEREVENTS
@@ -75,6 +85,8 @@ int write_to_evbuffer_zlib(struct evbuffer *buf, tor_zlib_state_t *state,
#define generic_buffer_get(b,buf,buflen) evbuffer_remove((b),(buf),(buflen))
#define generic_buffer_clear(b) evbuffer_drain((b), evbuffer_get_length((b)))
#define generic_buffer_free(b) evbuffer_free((b))
+#define generic_buffer_fetch_ext_or_cmd(b, out) \
+ fetch_ext_or_command_from_evbuffer((b), (out))
#else
#define generic_buffer_new() buf_new()
#define generic_buffer_len(b) buf_datalen((b))
@@ -82,6 +94,8 @@ int write_to_evbuffer_zlib(struct evbuffer *buf, tor_zlib_state_t *state,
#define generic_buffer_get(b,buf,buflen) fetch_from_buf((buf),(buflen),(b))
#define generic_buffer_clear(b) buf_clear((b))
#define generic_buffer_free(b) buf_free((b))
+#define generic_buffer_fetch_ext_or_cmd(b, out) \
+ fetch_ext_or_command_from_buf((b), (out))
#endif
int generic_buffer_set_to_copy(generic_buffer_t **output,
const generic_buffer_t *input);
@@ -89,7 +103,38 @@ int generic_buffer_set_to_copy(generic_buffer_t **output,
void assert_buf_ok(buf_t *buf);
#ifdef BUFFERS_PRIVATE
-int buf_find_string_offset(const buf_t *buf, const char *s, size_t n);
+STATIC int buf_find_string_offset(const buf_t *buf, const char *s, size_t n);
+STATIC void buf_pullup(buf_t *buf, size_t bytes, int nulterminate);
+void buf_get_first_chunk_data(const buf_t *buf, const char **cp, size_t *sz);
+
+#define DEBUG_CHUNK_ALLOC
+/** A single chunk on a buffer or in a freelist. */
+typedef struct chunk_t {
+ struct chunk_t *next; /**< The next chunk on the buffer or freelist. */
+ size_t datalen; /**< The number of bytes stored in this chunk */
+ size_t memlen; /**< The number of usable bytes of storage in <b>mem</b>. */
+#ifdef DEBUG_CHUNK_ALLOC
+ size_t DBG_alloc;
+#endif
+ char *data; /**< A pointer to the first byte of data stored in <b>mem</b>. */
+ uint32_t inserted_time; /**< Timestamp in truncated ms since epoch
+ * when this chunk was inserted. */
+ char mem[FLEXIBLE_ARRAY_MEMBER]; /**< The actual memory used for storage in
+ * this chunk. */
+} chunk_t;
+
+/** Magic value for buf_t.magic, to catch pointer errors. */
+#define BUFFER_MAGIC 0xB0FFF312u
+/** A resizeable buffer, optimized for reading and writing. */
+struct buf_t {
+ uint32_t magic; /**< Magic cookie for debugging: Must be set to
+ * BUFFER_MAGIC. */
+ size_t datalen; /**< How many bytes is this buffer holding right now? */
+ size_t default_chunk_size; /**< Don't allocate any chunks smaller than
+ * this for this buffer. */
+ chunk_t *head; /**< First chunk in the list, or NULL for none. */
+ chunk_t *tail; /**< Last chunk in the list, or NULL for none. */
+};
#endif
#endif
diff --git a/src/or/channel.c b/src/or/channel.c
new file mode 100644
index 000000000..63af2f91c
--- /dev/null
+++ b/src/or/channel.c
@@ -0,0 +1,4186 @@
+/* * Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file channel.c
+ * \brief OR-to-OR channel abstraction layer
+ **/
+
+/*
+ * Define this so channel.h gives us things only channel_t subclasses
+ * should touch.
+ */
+
+#define TOR_CHANNEL_INTERNAL_
+
+#include "or.h"
+#include "channel.h"
+#include "channeltls.h"
+#include "circuitbuild.h"
+#include "circuitlist.h"
+#include "circuitstats.h"
+#include "connection_or.h" /* For var_cell_free() */
+#include "circuitmux.h"
+#include "entrynodes.h"
+#include "geoip.h"
+#include "nodelist.h"
+#include "relay.h"
+#include "rephist.h"
+#include "router.h"
+#include "routerlist.h"
+
+/* Cell queue structure */
+
+typedef struct cell_queue_entry_s cell_queue_entry_t;
+struct cell_queue_entry_s {
+ TOR_SIMPLEQ_ENTRY(cell_queue_entry_s) next;
+ enum {
+ CELL_QUEUE_FIXED,
+ CELL_QUEUE_VAR,
+ CELL_QUEUE_PACKED
+ } type;
+ union {
+ struct {
+ cell_t *cell;
+ } fixed;
+ struct {
+ var_cell_t *var_cell;
+ } var;
+ struct {
+ packed_cell_t *packed_cell;
+ } packed;
+ } u;
+};
+
+/* Global lists of channels */
+
+/* All channel_t instances */
+static smartlist_t *all_channels = NULL;
+
+/* All channel_t instances not in ERROR or CLOSED states */
+static smartlist_t *active_channels = NULL;
+
+/* All channel_t instances in ERROR or CLOSED states */
+static smartlist_t *finished_channels = NULL;
+
+/* All channel_listener_t instances */
+static smartlist_t *all_listeners = NULL;
+
+/* All channel_listener_t instances in LISTENING state */
+static smartlist_t *active_listeners = NULL;
+
+/* All channel_listener_t instances in LISTENING state */
+static smartlist_t *finished_listeners = NULL;
+
+/* Counter for ID numbers */
+static uint64_t n_channels_allocated = 0;
+
+/* Digest->channel map
+ *
+ * Similar to the one used in connection_or.c, this maps from the identity
+ * digest of a remote endpoint to a channel_t to that endpoint. Channels
+ * should be placed here when registered and removed when they close or error.
+ * If more than one channel exists, follow the next_with_same_id pointer
+ * as a linked list.
+ */
+HT_HEAD(channel_idmap, channel_idmap_entry_s) channel_identity_map =
+ HT_INITIALIZER();
+
+typedef struct channel_idmap_entry_s {
+ HT_ENTRY(channel_idmap_entry_s) node;
+ uint8_t digest[DIGEST_LEN];
+ TOR_LIST_HEAD(channel_list_s, channel_s) channel_list;
+} channel_idmap_entry_t;
+
+static INLINE unsigned
+channel_idmap_hash(const channel_idmap_entry_t *ent)
+{
+ return (unsigned) siphash24g(ent->digest, DIGEST_LEN);
+}
+
+static INLINE int
+channel_idmap_eq(const channel_idmap_entry_t *a,
+ const channel_idmap_entry_t *b)
+{
+ return tor_memeq(a->digest, b->digest, DIGEST_LEN);
+}
+
+HT_PROTOTYPE(channel_idmap, channel_idmap_entry_s, node, channel_idmap_hash,
+ channel_idmap_eq);
+HT_GENERATE(channel_idmap, channel_idmap_entry_s, node, channel_idmap_hash,
+ channel_idmap_eq, 0.5, tor_malloc, tor_realloc, tor_free_);
+
+static cell_queue_entry_t * cell_queue_entry_dup(cell_queue_entry_t *q);
+static void cell_queue_entry_free(cell_queue_entry_t *q, int handed_off);
+static int cell_queue_entry_is_padding(cell_queue_entry_t *q);
+static cell_queue_entry_t *
+cell_queue_entry_new_fixed(cell_t *cell);
+static cell_queue_entry_t *
+cell_queue_entry_new_var(var_cell_t *var_cell);
+static int is_destroy_cell(channel_t *chan,
+ const cell_queue_entry_t *q, circid_t *circid_out);
+
+/* Functions to maintain the digest map */
+static void channel_add_to_digest_map(channel_t *chan);
+static void channel_remove_from_digest_map(channel_t *chan);
+
+/*
+ * Flush cells from just the outgoing queue without trying to get them
+ * from circuits; used internall by channel_flush_some_cells().
+ */
+static ssize_t
+channel_flush_some_cells_from_outgoing_queue(channel_t *chan,
+ ssize_t num_cells);
+static void channel_force_free(channel_t *chan);
+static void
+channel_free_list(smartlist_t *channels, int mark_for_close);
+static void
+channel_listener_free_list(smartlist_t *channels, int mark_for_close);
+static void channel_listener_force_free(channel_listener_t *chan_l);
+static void
+channel_write_cell_queue_entry(channel_t *chan, cell_queue_entry_t *q);
+
+/***********************************
+ * Channel state utility functions *
+ **********************************/
+
+/**
+ * Indicate whether a given channel state is valid
+ */
+
+int
+channel_state_is_valid(channel_state_t state)
+{
+ int is_valid;
+
+ switch (state) {
+ case CHANNEL_STATE_CLOSED:
+ case CHANNEL_STATE_CLOSING:
+ case CHANNEL_STATE_ERROR:
+ case CHANNEL_STATE_MAINT:
+ case CHANNEL_STATE_OPENING:
+ case CHANNEL_STATE_OPEN:
+ is_valid = 1;
+ break;
+ case CHANNEL_STATE_LAST:
+ default:
+ is_valid = 0;
+ }
+
+ return is_valid;
+}
+
+/**
+ * Indicate whether a given channel listener state is valid
+ */
+
+int
+channel_listener_state_is_valid(channel_listener_state_t state)
+{
+ int is_valid;
+
+ switch (state) {
+ case CHANNEL_LISTENER_STATE_CLOSED:
+ case CHANNEL_LISTENER_STATE_LISTENING:
+ case CHANNEL_LISTENER_STATE_CLOSING:
+ case CHANNEL_LISTENER_STATE_ERROR:
+ is_valid = 1;
+ break;
+ case CHANNEL_LISTENER_STATE_LAST:
+ default:
+ is_valid = 0;
+ }
+
+ return is_valid;
+}
+
+/**
+ * Indicate whether a channel state transition is valid
+ *
+ * This function takes two channel states and indicates whether a
+ * transition between them is permitted (see the state definitions and
+ * transition table in or.h at the channel_state_t typedef).
+ */
+
+int
+channel_state_can_transition(channel_state_t from, channel_state_t to)
+{
+ int is_valid;
+
+ switch (from) {
+ case CHANNEL_STATE_CLOSED:
+ is_valid = (to == CHANNEL_STATE_OPENING);
+ break;
+ case CHANNEL_STATE_CLOSING:
+ is_valid = (to == CHANNEL_STATE_CLOSED ||
+ to == CHANNEL_STATE_ERROR);
+ break;
+ case CHANNEL_STATE_ERROR:
+ is_valid = 0;
+ break;
+ case CHANNEL_STATE_MAINT:
+ is_valid = (to == CHANNEL_STATE_CLOSING ||
+ to == CHANNEL_STATE_ERROR ||
+ to == CHANNEL_STATE_OPEN);
+ break;
+ case CHANNEL_STATE_OPENING:
+ is_valid = (to == CHANNEL_STATE_CLOSING ||
+ to == CHANNEL_STATE_ERROR ||
+ to == CHANNEL_STATE_OPEN);
+ break;
+ case CHANNEL_STATE_OPEN:
+ is_valid = (to == CHANNEL_STATE_CLOSING ||
+ to == CHANNEL_STATE_ERROR ||
+ to == CHANNEL_STATE_MAINT);
+ break;
+ case CHANNEL_STATE_LAST:
+ default:
+ is_valid = 0;
+ }
+
+ return is_valid;
+}
+
+/**
+ * Indicate whether a channel listener state transition is valid
+ *
+ * This function takes two channel listener states and indicates whether a
+ * transition between them is permitted (see the state definitions and
+ * transition table in or.h at the channel_listener_state_t typedef).
+ */
+
+int
+channel_listener_state_can_transition(channel_listener_state_t from,
+ channel_listener_state_t to)
+{
+ int is_valid;
+
+ switch (from) {
+ case CHANNEL_LISTENER_STATE_CLOSED:
+ is_valid = (to == CHANNEL_LISTENER_STATE_LISTENING);
+ break;
+ case CHANNEL_LISTENER_STATE_CLOSING:
+ is_valid = (to == CHANNEL_LISTENER_STATE_CLOSED ||
+ to == CHANNEL_LISTENER_STATE_ERROR);
+ break;
+ case CHANNEL_LISTENER_STATE_ERROR:
+ is_valid = 0;
+ break;
+ case CHANNEL_LISTENER_STATE_LISTENING:
+ is_valid = (to == CHANNEL_LISTENER_STATE_CLOSING ||
+ to == CHANNEL_LISTENER_STATE_ERROR);
+ break;
+ case CHANNEL_LISTENER_STATE_LAST:
+ default:
+ is_valid = 0;
+ }
+
+ return is_valid;
+}
+
+/**
+ * Return a human-readable description for a channel state
+ */
+
+const char *
+channel_state_to_string(channel_state_t state)
+{
+ const char *descr;
+
+ switch (state) {
+ case CHANNEL_STATE_CLOSED:
+ descr = "closed";
+ break;
+ case CHANNEL_STATE_CLOSING:
+ descr = "closing";
+ break;
+ case CHANNEL_STATE_ERROR:
+ descr = "channel error";
+ break;
+ case CHANNEL_STATE_MAINT:
+ descr = "temporarily suspended for maintenance";
+ break;
+ case CHANNEL_STATE_OPENING:
+ descr = "opening";
+ break;
+ case CHANNEL_STATE_OPEN:
+ descr = "open";
+ break;
+ case CHANNEL_STATE_LAST:
+ default:
+ descr = "unknown or invalid channel state";
+ }
+
+ return descr;
+}
+
+/**
+ * Return a human-readable description for a channel listenier state
+ */
+
+const char *
+channel_listener_state_to_string(channel_listener_state_t state)
+{
+ const char *descr;
+
+ switch (state) {
+ case CHANNEL_LISTENER_STATE_CLOSED:
+ descr = "closed";
+ break;
+ case CHANNEL_LISTENER_STATE_CLOSING:
+ descr = "closing";
+ break;
+ case CHANNEL_LISTENER_STATE_ERROR:
+ descr = "channel listener error";
+ break;
+ case CHANNEL_LISTENER_STATE_LISTENING:
+ descr = "listening";
+ break;
+ case CHANNEL_LISTENER_STATE_LAST:
+ default:
+ descr = "unknown or invalid channel listener state";
+ }
+
+ return descr;
+}
+
+/***************************************
+ * Channel registration/unregistration *
+ ***************************************/
+
+/**
+ * Register a channel
+ *
+ * This function registers a newly created channel in the global lists/maps
+ * of active channels.
+ */
+
+void
+channel_register(channel_t *chan)
+{
+ tor_assert(chan);
+
+ /* No-op if already registered */
+ if (chan->registered) return;
+
+ log_debug(LD_CHANNEL,
+ "Registering channel %p (ID " U64_FORMAT ") "
+ "in state %s (%d) with digest %s",
+ chan, U64_PRINTF_ARG(chan->global_identifier),
+ channel_state_to_string(chan->state), chan->state,
+ hex_str(chan->identity_digest, DIGEST_LEN));
+
+ /* Make sure we have all_channels, then add it */
+ if (!all_channels) all_channels = smartlist_new();
+ smartlist_add(all_channels, chan);
+
+ /* Is it finished? */
+ if (chan->state == CHANNEL_STATE_CLOSED ||
+ chan->state == CHANNEL_STATE_ERROR) {
+ /* Put it in the finished list, creating it if necessary */
+ if (!finished_channels) finished_channels = smartlist_new();
+ smartlist_add(finished_channels, chan);
+ } else {
+ /* Put it in the active list, creating it if necessary */
+ if (!active_channels) active_channels = smartlist_new();
+ smartlist_add(active_channels, chan);
+
+ if (chan->state != CHANNEL_STATE_CLOSING) {
+ /* It should have a digest set */
+ if (!tor_digest_is_zero(chan->identity_digest)) {
+ /* Yeah, we're good, add it to the map */
+ channel_add_to_digest_map(chan);
+ } else {
+ log_info(LD_CHANNEL,
+ "Channel %p (global ID " U64_FORMAT ") "
+ "in state %s (%d) registered with no identity digest",
+ chan, U64_PRINTF_ARG(chan->global_identifier),
+ channel_state_to_string(chan->state), chan->state);
+ }
+ }
+ }
+
+ /* Mark it as registered */
+ chan->registered = 1;
+}
+
+/**
+ * Unregister a channel
+ *
+ * This function removes a channel from the global lists and maps and is used
+ * when freeing a closed/errored channel.
+ */
+
+void
+channel_unregister(channel_t *chan)
+{
+ tor_assert(chan);
+
+ /* No-op if not registered */
+ if (!(chan->registered)) return;
+
+ /* Is it finished? */
+ if (chan->state == CHANNEL_STATE_CLOSED ||
+ chan->state == CHANNEL_STATE_ERROR) {
+ /* Get it out of the finished list */
+ if (finished_channels) smartlist_remove(finished_channels, chan);
+ } else {
+ /* Get it out of the active list */
+ if (active_channels) smartlist_remove(active_channels, chan);
+ }
+
+ /* Get it out of all_channels */
+ if (all_channels) smartlist_remove(all_channels, chan);
+
+ /* Mark it as unregistered */
+ chan->registered = 0;
+
+ /* Should it be in the digest map? */
+ if (!tor_digest_is_zero(chan->identity_digest) &&
+ !(chan->state == CHANNEL_STATE_CLOSING ||
+ chan->state == CHANNEL_STATE_CLOSED ||
+ chan->state == CHANNEL_STATE_ERROR)) {
+ /* Remove it */
+ channel_remove_from_digest_map(chan);
+ }
+}
+
+/**
+ * Register a channel listener
+ *
+ * This function registers a newly created channel listner in the global
+ * lists/maps of active channel listeners.
+ */
+
+void
+channel_listener_register(channel_listener_t *chan_l)
+{
+ tor_assert(chan_l);
+
+ /* No-op if already registered */
+ if (chan_l->registered) return;
+
+ log_debug(LD_CHANNEL,
+ "Registering channel listener %p (ID " U64_FORMAT ") "
+ "in state %s (%d)",
+ chan_l, U64_PRINTF_ARG(chan_l->global_identifier),
+ channel_listener_state_to_string(chan_l->state),
+ chan_l->state);
+
+ /* Make sure we have all_channels, then add it */
+ if (!all_listeners) all_listeners = smartlist_new();
+ smartlist_add(all_listeners, chan_l);
+
+ /* Is it finished? */
+ if (chan_l->state == CHANNEL_LISTENER_STATE_CLOSED ||
+ chan_l->state == CHANNEL_LISTENER_STATE_ERROR) {
+ /* Put it in the finished list, creating it if necessary */
+ if (!finished_listeners) finished_listeners = smartlist_new();
+ smartlist_add(finished_listeners, chan_l);
+ } else {
+ /* Put it in the active list, creating it if necessary */
+ if (!active_listeners) active_listeners = smartlist_new();
+ smartlist_add(active_listeners, chan_l);
+ }
+
+ /* Mark it as registered */
+ chan_l->registered = 1;
+}
+
+/**
+ * Unregister a channel listener
+ *
+ * This function removes a channel listener from the global lists and maps
+ * and is used when freeing a closed/errored channel listener.
+ */
+
+void
+channel_listener_unregister(channel_listener_t *chan_l)
+{
+ tor_assert(chan_l);
+
+ /* No-op if not registered */
+ if (!(chan_l->registered)) return;
+
+ /* Is it finished? */
+ if (chan_l->state == CHANNEL_LISTENER_STATE_CLOSED ||
+ chan_l->state == CHANNEL_LISTENER_STATE_ERROR) {
+ /* Get it out of the finished list */
+ if (finished_listeners) smartlist_remove(finished_listeners, chan_l);
+ } else {
+ /* Get it out of the active list */
+ if (active_listeners) smartlist_remove(active_listeners, chan_l);
+ }
+
+ /* Get it out of all_channels */
+ if (all_listeners) smartlist_remove(all_listeners, chan_l);
+
+ /* Mark it as unregistered */
+ chan_l->registered = 0;
+}
+
+/*********************************
+ * Channel digest map maintenance
+ *********************************/
+
+/**
+ * Add a channel to the digest map
+ *
+ * This function adds a channel to the digest map and inserts it into the
+ * correct linked list if channels with that remote endpoint identity digest
+ * already exist.
+ */
+
+static void
+channel_add_to_digest_map(channel_t *chan)
+{
+ channel_idmap_entry_t *ent, search;
+
+ tor_assert(chan);
+
+ /* Assert that the state makes sense */
+ tor_assert(!(chan->state == CHANNEL_STATE_CLOSING ||
+ chan->state == CHANNEL_STATE_CLOSED ||
+ chan->state == CHANNEL_STATE_ERROR));
+
+ /* Assert that there is a digest */
+ tor_assert(!tor_digest_is_zero(chan->identity_digest));
+
+ memcpy(search.digest, chan->identity_digest, DIGEST_LEN);
+ ent = HT_FIND(channel_idmap, &channel_identity_map, &search);
+ if (! ent) {
+ ent = tor_malloc(sizeof(channel_idmap_entry_t));
+ memcpy(ent->digest, chan->identity_digest, DIGEST_LEN);
+ TOR_LIST_INIT(&ent->channel_list);
+ HT_INSERT(channel_idmap, &channel_identity_map, ent);
+ }
+ TOR_LIST_INSERT_HEAD(&ent->channel_list, chan, next_with_same_id);
+
+ log_debug(LD_CHANNEL,
+ "Added channel %p (global ID " U64_FORMAT ") "
+ "to identity map in state %s (%d) with digest %s",
+ chan, U64_PRINTF_ARG(chan->global_identifier),
+ channel_state_to_string(chan->state), chan->state,
+ hex_str(chan->identity_digest, DIGEST_LEN));
+}
+
+/**
+ * Remove a channel from the digest map
+ *
+ * This function removes a channel from the digest map and the linked list of
+ * channels for that digest if more than one exists.
+ */
+
+static void
+channel_remove_from_digest_map(channel_t *chan)
+{
+ channel_idmap_entry_t *ent, search;
+
+ tor_assert(chan);
+
+ /* Assert that there is a digest */
+ tor_assert(!tor_digest_is_zero(chan->identity_digest));
+
+#if 0
+ /* Make sure we have a map */
+ if (!channel_identity_map) {
+ /*
+ * No identity map, so we can't find it by definition. This
+ * case is similar to digestmap_get() failing below.
+ */
+ log_warn(LD_BUG,
+ "Trying to remove channel %p (global ID " U64_FORMAT ") "
+ "with digest %s from identity map, but didn't have any identity "
+ "map",
+ chan, U64_PRINTF_ARG(chan->global_identifier),
+ hex_str(chan->identity_digest, DIGEST_LEN));
+ /* Clear out its next/prev pointers */
+ if (chan->next_with_same_id) {
+ chan->next_with_same_id->prev_with_same_id = chan->prev_with_same_id;
+ }
+ if (chan->prev_with_same_id) {
+ chan->prev_with_same_id->next_with_same_id = chan->next_with_same_id;
+ }
+ chan->next_with_same_id = NULL;
+ chan->prev_with_same_id = NULL;
+
+ return;
+ }
+#endif
+
+ /* Pull it out of its list, wherever that list is */
+ TOR_LIST_REMOVE(chan, next_with_same_id);
+
+ memcpy(search.digest, chan->identity_digest, DIGEST_LEN);
+ ent = HT_FIND(channel_idmap, &channel_identity_map, &search);
+
+ /* Look for it in the map */
+ if (ent) {
+ /* Okay, it's here */
+
+ if (TOR_LIST_EMPTY(&ent->channel_list)) {
+ HT_REMOVE(channel_idmap, &channel_identity_map, ent);
+ tor_free(ent);
+ }
+
+ log_debug(LD_CHANNEL,
+ "Removed channel %p (global ID " U64_FORMAT ") from "
+ "identity map in state %s (%d) with digest %s",
+ chan, U64_PRINTF_ARG(chan->global_identifier),
+ channel_state_to_string(chan->state), chan->state,
+ hex_str(chan->identity_digest, DIGEST_LEN));
+ } else {
+ /* Shouldn't happen */
+ log_warn(LD_BUG,
+ "Trying to remove channel %p (global ID " U64_FORMAT ") with "
+ "digest %s from identity map, but couldn't find any with "
+ "that digest",
+ chan, U64_PRINTF_ARG(chan->global_identifier),
+ hex_str(chan->identity_digest, DIGEST_LEN));
+ }
+}
+
+/****************************
+ * Channel lookup functions *
+ ***************************/
+
+/**
+ * Find channel by global ID
+ *
+ * This function searches for a channel by the global_identifier assigned
+ * at initialization time. This identifier is unique for the lifetime of the
+ * Tor process.
+ */
+
+channel_t *
+channel_find_by_global_id(uint64_t global_identifier)
+{
+ channel_t *rv = NULL;
+
+ if (all_channels && smartlist_len(all_channels) > 0) {
+ SMARTLIST_FOREACH_BEGIN(all_channels, channel_t *, curr) {
+ if (curr->global_identifier == global_identifier) {
+ rv = curr;
+ break;
+ }
+ } SMARTLIST_FOREACH_END(curr);
+ }
+
+ return rv;
+}
+
+/**
+ * Find channel by digest of the remote endpoint
+ *
+ * This function looks up a channel by the digest of its remote endpoint in
+ * the channel digest map. It's possible that more than one channel to a
+ * given endpoint exists. Use channel_next_with_digest() to walk the list.
+ */
+
+channel_t *
+channel_find_by_remote_digest(const char *identity_digest)
+{
+ channel_t *rv = NULL;
+ channel_idmap_entry_t *ent, search;
+
+ tor_assert(identity_digest);
+
+ memcpy(search.digest, identity_digest, DIGEST_LEN);
+ ent = HT_FIND(channel_idmap, &channel_identity_map, &search);
+ if (ent) {
+ rv = TOR_LIST_FIRST(&ent->channel_list);
+ }
+
+ return rv;
+}
+
+/**
+ * Get next channel with digest
+ *
+ * This function takes a channel and finds the next channel in the list
+ * with the same digest.
+ */
+
+channel_t *
+channel_next_with_digest(channel_t *chan)
+{
+ tor_assert(chan);
+
+ return TOR_LIST_NEXT(chan, next_with_same_id);
+}
+
+/**
+ * Initialize a channel
+ *
+ * This function should be called by subclasses to set up some per-channel
+ * variables. I.e., this is the superclass constructor. Before this, the
+ * channel should be allocated with tor_malloc_zero().
+ */
+
+void
+channel_init(channel_t *chan)
+{
+ tor_assert(chan);
+
+ /* Assign an ID and bump the counter */
+ chan->global_identifier = n_channels_allocated++;
+
+ /* Init timestamp */
+ chan->timestamp_last_added_nonpadding = time(NULL);
+
+ /* Warn about exhausted circuit IDs no more than hourly. */
+ chan->last_warned_circ_ids_exhausted.rate = 3600;
+
+ /* Initialize queues. */
+ TOR_SIMPLEQ_INIT(&chan->incoming_queue);
+ TOR_SIMPLEQ_INIT(&chan->outgoing_queue);
+
+ /* Initialize list entries. */
+ memset(&chan->next_with_same_id, 0, sizeof(chan->next_with_same_id));
+
+ /* Timestamp it */
+ channel_timestamp_created(chan);
+
+ /* It hasn't been open yet. */
+ chan->has_been_open = 0;
+}
+
+/**
+ * Initialize a channel listener
+ *
+ * This function should be called by subclasses to set up some per-channel
+ * variables. I.e., this is the superclass constructor. Before this, the
+ * channel listener should be allocated with tor_malloc_zero().
+ */
+
+void
+channel_init_listener(channel_listener_t *chan_l)
+{
+ tor_assert(chan_l);
+
+ /* Assign an ID and bump the counter */
+ chan_l->global_identifier = n_channels_allocated++;
+
+ /* Timestamp it */
+ channel_listener_timestamp_created(chan_l);
+}
+
+/**
+ * Free a channel; nothing outside of channel.c and subclasses should call
+ * this - it frees channels after they have closed and been unregistered.
+ */
+
+void
+channel_free(channel_t *chan)
+{
+ if (!chan) return;
+
+ /* It must be closed or errored */
+ tor_assert(chan->state == CHANNEL_STATE_CLOSED ||
+ chan->state == CHANNEL_STATE_ERROR);
+ /* It must be deregistered */
+ tor_assert(!(chan->registered));
+
+ log_debug(LD_CHANNEL,
+ "Freeing channel " U64_FORMAT " at %p",
+ U64_PRINTF_ARG(chan->global_identifier), chan);
+
+ /*
+ * Get rid of cmux policy before we do anything, so cmux policies don't
+ * see channels in weird half-freed states.
+ */
+ if (chan->cmux) {
+ circuitmux_set_policy(chan->cmux, NULL);
+ }
+
+ /* Call a free method if there is one */
+ if (chan->free) chan->free(chan);
+
+ channel_clear_remote_end(chan);
+
+ /* Get rid of cmux */
+ if (chan->cmux) {
+ circuitmux_detach_all_circuits(chan->cmux, NULL);
+ circuitmux_mark_destroyed_circids_usable(chan->cmux, chan);
+ circuitmux_free(chan->cmux);
+ chan->cmux = NULL;
+ }
+
+ /* We're in CLOSED or ERROR, so the cell queue is already empty */
+
+ tor_free(chan);
+}
+
+/**
+ * Free a channel listener; nothing outside of channel.c and subclasses
+ * should call this - it frees channel listeners after they have closed and
+ * been unregistered.
+ */
+
+void
+channel_listener_free(channel_listener_t *chan_l)
+{
+ if (!chan_l) return;
+
+ log_debug(LD_CHANNEL,
+ "Freeing channel_listener_t " U64_FORMAT " at %p",
+ U64_PRINTF_ARG(chan_l->global_identifier),
+ chan_l);
+
+ /* It must be closed or errored */
+ tor_assert(chan_l->state == CHANNEL_LISTENER_STATE_CLOSED ||
+ chan_l->state == CHANNEL_LISTENER_STATE_ERROR);
+ /* It must be deregistered */
+ tor_assert(!(chan_l->registered));
+
+ /* Call a free method if there is one */
+ if (chan_l->free) chan_l->free(chan_l);
+
+ /*
+ * We're in CLOSED or ERROR, so the incoming channel queue is already
+ * empty.
+ */
+
+ tor_free(chan_l);
+}
+
+/**
+ * Free a channel and skip the state/registration asserts; this internal-
+ * use-only function should be called only from channel_free_all() when
+ * shutting down the Tor process.
+ */
+
+static void
+channel_force_free(channel_t *chan)
+{
+ cell_queue_entry_t *cell, *cell_tmp;
+ tor_assert(chan);
+
+ log_debug(LD_CHANNEL,
+ "Force-freeing channel " U64_FORMAT " at %p",
+ U64_PRINTF_ARG(chan->global_identifier), chan);
+
+ /*
+ * Get rid of cmux policy before we do anything, so cmux policies don't
+ * see channels in weird half-freed states.
+ */
+ if (chan->cmux) {
+ circuitmux_set_policy(chan->cmux, NULL);
+ }
+
+ /* Call a free method if there is one */
+ if (chan->free) chan->free(chan);
+
+ channel_clear_remote_end(chan);
+
+ /* Get rid of cmux */
+ if (chan->cmux) {
+ circuitmux_free(chan->cmux);
+ chan->cmux = NULL;
+ }
+
+ /* We might still have a cell queue; kill it */
+ TOR_SIMPLEQ_FOREACH_SAFE(cell, &chan->incoming_queue, next, cell_tmp) {
+ cell_queue_entry_free(cell, 0);
+ }
+ TOR_SIMPLEQ_INIT(&chan->incoming_queue);
+
+ /* Outgoing cell queue is similar, but we can have to free packed cells */
+ TOR_SIMPLEQ_FOREACH_SAFE(cell, &chan->outgoing_queue, next, cell_tmp) {
+ cell_queue_entry_free(cell, 0);
+ }
+ TOR_SIMPLEQ_INIT(&chan->outgoing_queue);
+
+ tor_free(chan);
+}
+
+/**
+ * Free a channel listener and skip the state/reigstration asserts; this
+ * internal-use-only function should be called only from channel_free_all()
+ * when shutting down the Tor process.
+ */
+
+static void
+channel_listener_force_free(channel_listener_t *chan_l)
+{
+ tor_assert(chan_l);
+
+ log_debug(LD_CHANNEL,
+ "Force-freeing channel_listener_t " U64_FORMAT " at %p",
+ U64_PRINTF_ARG(chan_l->global_identifier),
+ chan_l);
+
+ /* Call a free method if there is one */
+ if (chan_l->free) chan_l->free(chan_l);
+
+ /*
+ * The incoming list just gets emptied and freed; we request close on
+ * any channels we find there, but since we got called while shutting
+ * down they will get deregistered and freed elsewhere anyway.
+ */
+ if (chan_l->incoming_list) {
+ SMARTLIST_FOREACH_BEGIN(chan_l->incoming_list,
+ channel_t *, qchan) {
+ channel_mark_for_close(qchan);
+ } SMARTLIST_FOREACH_END(qchan);
+
+ smartlist_free(chan_l->incoming_list);
+ chan_l->incoming_list = NULL;
+ }
+
+ tor_free(chan_l);
+}
+
+/**
+ * Return the current registered listener for a channel listener
+ *
+ * This function returns a function pointer to the current registered
+ * handler for new incoming channels on a channel listener.
+ */
+
+channel_listener_fn_ptr
+channel_listener_get_listener_fn(channel_listener_t *chan_l)
+{
+ tor_assert(chan_l);
+
+ if (chan_l->state == CHANNEL_LISTENER_STATE_LISTENING)
+ return chan_l->listener;
+
+ return NULL;
+}
+
+/**
+ * Set the listener for a channel listener
+ *
+ * This function sets the handler for new incoming channels on a channel
+ * listener.
+ */
+
+void
+channel_listener_set_listener_fn(channel_listener_t *chan_l,
+ channel_listener_fn_ptr listener)
+{
+ tor_assert(chan_l);
+ tor_assert(chan_l->state == CHANNEL_LISTENER_STATE_LISTENING);
+
+ log_debug(LD_CHANNEL,
+ "Setting listener callback for channel listener %p "
+ "(global ID " U64_FORMAT ") to %p",
+ chan_l, U64_PRINTF_ARG(chan_l->global_identifier),
+ listener);
+
+ chan_l->listener = listener;
+ if (chan_l->listener) channel_listener_process_incoming(chan_l);
+}
+
+/**
+ * Return the fixed-length cell handler for a channel
+ *
+ * This function gets the handler for incoming fixed-length cells installed
+ * on a channel.
+ */
+
+channel_cell_handler_fn_ptr
+channel_get_cell_handler(channel_t *chan)
+{
+ tor_assert(chan);
+
+ if (chan->state == CHANNEL_STATE_OPENING ||
+ chan->state == CHANNEL_STATE_OPEN ||
+ chan->state == CHANNEL_STATE_MAINT)
+ return chan->cell_handler;
+
+ return NULL;
+}
+
+/**
+ * Return the variable-length cell handler for a channel
+ *
+ * This function gets the handler for incoming variable-length cells
+ * installed on a channel.
+ */
+
+channel_var_cell_handler_fn_ptr
+channel_get_var_cell_handler(channel_t *chan)
+{
+ tor_assert(chan);
+
+ if (chan->state == CHANNEL_STATE_OPENING ||
+ chan->state == CHANNEL_STATE_OPEN ||
+ chan->state == CHANNEL_STATE_MAINT)
+ return chan->var_cell_handler;
+
+ return NULL;
+}
+
+/**
+ * Set both cell handlers for a channel
+ *
+ * This function sets both the fixed-length and variable length cell handlers
+ * for a channel and processes any incoming cells that had been blocked in the
+ * queue because none were available.
+ */
+
+void
+channel_set_cell_handlers(channel_t *chan,
+ channel_cell_handler_fn_ptr cell_handler,
+ channel_var_cell_handler_fn_ptr
+ var_cell_handler)
+{
+ int try_again = 0;
+
+ tor_assert(chan);
+ tor_assert(chan->state == CHANNEL_STATE_OPENING ||
+ chan->state == CHANNEL_STATE_OPEN ||
+ chan->state == CHANNEL_STATE_MAINT);
+
+ log_debug(LD_CHANNEL,
+ "Setting cell_handler callback for channel %p to %p",
+ chan, cell_handler);
+ log_debug(LD_CHANNEL,
+ "Setting var_cell_handler callback for channel %p to %p",
+ chan, var_cell_handler);
+
+ /* Should we try the queue? */
+ if (cell_handler &&
+ cell_handler != chan->cell_handler) try_again = 1;
+ if (var_cell_handler &&
+ var_cell_handler != chan->var_cell_handler) try_again = 1;
+
+ /* Change them */
+ chan->cell_handler = cell_handler;
+ chan->var_cell_handler = var_cell_handler;
+
+ /* Re-run the queue if we have one and there's any reason to */
+ if (! TOR_SIMPLEQ_EMPTY(&chan->incoming_queue) &&
+ try_again &&
+ (chan->cell_handler ||
+ chan->var_cell_handler)) channel_process_cells(chan);
+}
+
+/*
+ * On closing channels
+ *
+ * There are three functions that close channels, for use in
+ * different circumstances:
+ *
+ * - Use channel_mark_for_close() for most cases
+ * - Use channel_close_from_lower_layer() if you are connection_or.c
+ * and the other end closes the underlying connection.
+ * - Use channel_close_for_error() if you are connection_or.c and
+ * some sort of error has occurred.
+ */
+
+/**
+ * Mark a channel for closure
+ *
+ * This function tries to close a channel_t; it will go into the CLOSING
+ * state, and eventually the lower layer should put it into the CLOSED or
+ * ERROR state. Then, channel_run_cleanup() will eventually free it.
+ */
+
+void
+channel_mark_for_close(channel_t *chan)
+{
+ tor_assert(chan != NULL);
+ tor_assert(chan->close != NULL);
+
+ /* If it's already in CLOSING, CLOSED or ERROR, this is a no-op */
+ if (chan->state == CHANNEL_STATE_CLOSING ||
+ chan->state == CHANNEL_STATE_CLOSED ||
+ chan->state == CHANNEL_STATE_ERROR) return;
+
+ log_debug(LD_CHANNEL,
+ "Closing channel %p (global ID " U64_FORMAT ") "
+ "by request",
+ chan, U64_PRINTF_ARG(chan->global_identifier));
+
+ /* Note closing by request from above */
+ chan->reason_for_closing = CHANNEL_CLOSE_REQUESTED;
+
+ /* Change state to CLOSING */
+ channel_change_state(chan, CHANNEL_STATE_CLOSING);
+
+ /* Tell the lower layer */
+ chan->close(chan);
+
+ /*
+ * It's up to the lower layer to change state to CLOSED or ERROR when we're
+ * ready; we'll try to free channels that are in the finished list from
+ * channel_run_cleanup(). The lower layer should do this by calling
+ * channel_closed().
+ */
+}
+
+/**
+ * Mark a channel listener for closure
+ *
+ * This function tries to close a channel_listener_t; it will go into the
+ * CLOSING state, and eventually the lower layer should put it into the CLOSED
+ * or ERROR state. Then, channel_run_cleanup() will eventually free it.
+ */
+
+void
+channel_listener_mark_for_close(channel_listener_t *chan_l)
+{
+ tor_assert(chan_l != NULL);
+ tor_assert(chan_l->close != NULL);
+
+ /* If it's already in CLOSING, CLOSED or ERROR, this is a no-op */
+ if (chan_l->state == CHANNEL_LISTENER_STATE_CLOSING ||
+ chan_l->state == CHANNEL_LISTENER_STATE_CLOSED ||
+ chan_l->state == CHANNEL_LISTENER_STATE_ERROR) return;
+
+ log_debug(LD_CHANNEL,
+ "Closing channel listener %p (global ID " U64_FORMAT ") "
+ "by request",
+ chan_l, U64_PRINTF_ARG(chan_l->global_identifier));
+
+ /* Note closing by request from above */
+ chan_l->reason_for_closing = CHANNEL_LISTENER_CLOSE_REQUESTED;
+
+ /* Change state to CLOSING */
+ channel_listener_change_state(chan_l, CHANNEL_LISTENER_STATE_CLOSING);
+
+ /* Tell the lower layer */
+ chan_l->close(chan_l);
+
+ /*
+ * It's up to the lower layer to change state to CLOSED or ERROR when we're
+ * ready; we'll try to free channels that are in the finished list from
+ * channel_run_cleanup(). The lower layer should do this by calling
+ * channel_listener_closed().
+ */
+}
+
+/**
+ * Close a channel from the lower layer
+ *
+ * Notify the channel code that the channel is being closed due to a non-error
+ * condition in the lower layer. This does not call the close() method, since
+ * the lower layer already knows.
+ */
+
+void
+channel_close_from_lower_layer(channel_t *chan)
+{
+ tor_assert(chan != NULL);
+
+ /* If it's already in CLOSING, CLOSED or ERROR, this is a no-op */
+ if (chan->state == CHANNEL_STATE_CLOSING ||
+ chan->state == CHANNEL_STATE_CLOSED ||
+ chan->state == CHANNEL_STATE_ERROR) return;
+
+ log_debug(LD_CHANNEL,
+ "Closing channel %p (global ID " U64_FORMAT ") "
+ "due to lower-layer event",
+ chan, U64_PRINTF_ARG(chan->global_identifier));
+
+ /* Note closing by event from below */
+ chan->reason_for_closing = CHANNEL_CLOSE_FROM_BELOW;
+
+ /* Change state to CLOSING */
+ channel_change_state(chan, CHANNEL_STATE_CLOSING);
+}
+
+/**
+ * Close a channel listener from the lower layer
+ *
+ * Notify the channel code that the channel listener is being closed due to a
+ * non-error condition in the lower layer. This does not call the close()
+ * method, since the lower layer already knows.
+ */
+
+void
+channel_listener_close_from_lower_layer(channel_listener_t *chan_l)
+{
+ tor_assert(chan_l != NULL);
+
+ /* If it's already in CLOSING, CLOSED or ERROR, this is a no-op */
+ if (chan_l->state == CHANNEL_LISTENER_STATE_CLOSING ||
+ chan_l->state == CHANNEL_LISTENER_STATE_CLOSED ||
+ chan_l->state == CHANNEL_LISTENER_STATE_ERROR) return;
+
+ log_debug(LD_CHANNEL,
+ "Closing channel listener %p (global ID " U64_FORMAT ") "
+ "due to lower-layer event",
+ chan_l, U64_PRINTF_ARG(chan_l->global_identifier));
+
+ /* Note closing by event from below */
+ chan_l->reason_for_closing = CHANNEL_LISTENER_CLOSE_FROM_BELOW;
+
+ /* Change state to CLOSING */
+ channel_listener_change_state(chan_l, CHANNEL_LISTENER_STATE_CLOSING);
+}
+
+/**
+ * Notify that the channel is being closed due to an error condition
+ *
+ * This function is called by the lower layer implementing the transport
+ * when a channel must be closed due to an error condition. This does not
+ * call the channel's close method, since the lower layer already knows.
+ */
+
+void
+channel_close_for_error(channel_t *chan)
+{
+ tor_assert(chan != NULL);
+
+ /* If it's already in CLOSING, CLOSED or ERROR, this is a no-op */
+ if (chan->state == CHANNEL_STATE_CLOSING ||
+ chan->state == CHANNEL_STATE_CLOSED ||
+ chan->state == CHANNEL_STATE_ERROR) return;
+
+ log_debug(LD_CHANNEL,
+ "Closing channel %p due to lower-layer error",
+ chan);
+
+ /* Note closing by event from below */
+ chan->reason_for_closing = CHANNEL_CLOSE_FOR_ERROR;
+
+ /* Change state to CLOSING */
+ channel_change_state(chan, CHANNEL_STATE_CLOSING);
+}
+
+/**
+ * Notify that the channel listener is being closed due to an error condition
+ *
+ * This function is called by the lower layer implementing the transport
+ * when a channel listener must be closed due to an error condition. This
+ * does not call the channel listener's close method, since the lower layer
+ * already knows.
+ */
+
+void
+channel_listener_close_for_error(channel_listener_t *chan_l)
+{
+ tor_assert(chan_l != NULL);
+
+ /* If it's already in CLOSING, CLOSED or ERROR, this is a no-op */
+ if (chan_l->state == CHANNEL_LISTENER_STATE_CLOSING ||
+ chan_l->state == CHANNEL_LISTENER_STATE_CLOSED ||
+ chan_l->state == CHANNEL_LISTENER_STATE_ERROR) return;
+
+ log_debug(LD_CHANNEL,
+ "Closing channel listener %p (global ID " U64_FORMAT ") "
+ "due to lower-layer error",
+ chan_l, U64_PRINTF_ARG(chan_l->global_identifier));
+
+ /* Note closing by event from below */
+ chan_l->reason_for_closing = CHANNEL_LISTENER_CLOSE_FOR_ERROR;
+
+ /* Change state to CLOSING */
+ channel_listener_change_state(chan_l, CHANNEL_LISTENER_STATE_CLOSING);
+}
+
+/**
+ * Notify that the lower layer is finished closing the channel
+ *
+ * This function should be called by the lower layer when a channel
+ * is finished closing and it should be regarded as inactive and
+ * freed by the channel code.
+ */
+
+void
+channel_closed(channel_t *chan)
+{
+ tor_assert(chan);
+ tor_assert(chan->state == CHANNEL_STATE_CLOSING ||
+ chan->state == CHANNEL_STATE_CLOSED ||
+ chan->state == CHANNEL_STATE_ERROR);
+
+ /* No-op if already inactive */
+ if (chan->state == CHANNEL_STATE_CLOSED ||
+ chan->state == CHANNEL_STATE_ERROR) return;
+
+ /* Inform any pending (not attached) circs that they should
+ * give up. */
+ if (! chan->has_been_open)
+ circuit_n_chan_done(chan, 0);
+
+ /* Now close all the attached circuits on it. */
+ circuit_unlink_all_from_channel(chan, END_CIRC_REASON_CHANNEL_CLOSED);
+
+ if (chan->reason_for_closing != CHANNEL_CLOSE_FOR_ERROR) {
+ channel_change_state(chan, CHANNEL_STATE_CLOSED);
+ } else {
+ channel_change_state(chan, CHANNEL_STATE_ERROR);
+ }
+}
+
+/**
+ * Notify that the lower layer is finished closing the channel listener
+ *
+ * This function should be called by the lower layer when a channel listener
+ * is finished closing and it should be regarded as inactive and
+ * freed by the channel code.
+ */
+
+void
+channel_listener_closed(channel_listener_t *chan_l)
+{
+ tor_assert(chan_l);
+ tor_assert(chan_l->state == CHANNEL_LISTENER_STATE_CLOSING ||
+ chan_l->state == CHANNEL_LISTENER_STATE_CLOSED ||
+ chan_l->state == CHANNEL_LISTENER_STATE_ERROR);
+
+ /* No-op if already inactive */
+ if (chan_l->state == CHANNEL_LISTENER_STATE_CLOSED ||
+ chan_l->state == CHANNEL_LISTENER_STATE_ERROR) return;
+
+ if (chan_l->reason_for_closing != CHANNEL_LISTENER_CLOSE_FOR_ERROR) {
+ channel_listener_change_state(chan_l, CHANNEL_LISTENER_STATE_CLOSED);
+ } else {
+ channel_listener_change_state(chan_l, CHANNEL_LISTENER_STATE_ERROR);
+ }
+}
+
+/**
+ * Clear the identity_digest of a channel
+ *
+ * This function clears the identity digest of the remote endpoint for a
+ * channel; this is intended for use by the lower layer.
+ */
+
+void
+channel_clear_identity_digest(channel_t *chan)
+{
+ int state_not_in_map;
+
+ tor_assert(chan);
+
+ log_debug(LD_CHANNEL,
+ "Clearing remote endpoint digest on channel %p with "
+ "global ID " U64_FORMAT,
+ chan, U64_PRINTF_ARG(chan->global_identifier));
+
+ state_not_in_map =
+ (chan->state == CHANNEL_STATE_CLOSING ||
+ chan->state == CHANNEL_STATE_CLOSED ||
+ chan->state == CHANNEL_STATE_ERROR);
+
+ if (!state_not_in_map && chan->registered &&
+ !tor_digest_is_zero(chan->identity_digest))
+ /* if it's registered get it out of the digest map */
+ channel_remove_from_digest_map(chan);
+
+ memset(chan->identity_digest, 0,
+ sizeof(chan->identity_digest));
+}
+
+/**
+ * Set the identity_digest of a channel
+ *
+ * This function sets the identity digest of the remote endpoint for a
+ * channel; this is intended for use by the lower layer.
+ */
+
+void
+channel_set_identity_digest(channel_t *chan,
+ const char *identity_digest)
+{
+ int was_in_digest_map, should_be_in_digest_map, state_not_in_map;
+
+ tor_assert(chan);
+
+ log_debug(LD_CHANNEL,
+ "Setting remote endpoint digest on channel %p with "
+ "global ID " U64_FORMAT " to digest %s",
+ chan, U64_PRINTF_ARG(chan->global_identifier),
+ identity_digest ?
+ hex_str(identity_digest, DIGEST_LEN) : "(null)");
+
+ state_not_in_map =
+ (chan->state == CHANNEL_STATE_CLOSING ||
+ chan->state == CHANNEL_STATE_CLOSED ||
+ chan->state == CHANNEL_STATE_ERROR);
+ was_in_digest_map =
+ !state_not_in_map &&
+ chan->registered &&
+ !tor_digest_is_zero(chan->identity_digest);
+ should_be_in_digest_map =
+ !state_not_in_map &&
+ chan->registered &&
+ (identity_digest &&
+ !tor_digest_is_zero(identity_digest));
+
+ if (was_in_digest_map)
+ /* We should always remove it; we'll add it back if we're writing
+ * in a new digest.
+ */
+ channel_remove_from_digest_map(chan);
+
+ if (identity_digest) {
+ memcpy(chan->identity_digest,
+ identity_digest,
+ sizeof(chan->identity_digest));
+ } else {
+ memset(chan->identity_digest, 0,
+ sizeof(chan->identity_digest));
+ }
+
+ /* Put it in the digest map if we should */
+ if (should_be_in_digest_map)
+ channel_add_to_digest_map(chan);
+}
+
+/**
+ * Clear the remote end metadata (identity_digest/nickname) of a channel
+ *
+ * This function clears all the remote end info from a channel; this is
+ * intended for use by the lower layer.
+ */
+
+void
+channel_clear_remote_end(channel_t *chan)
+{
+ int state_not_in_map;
+
+ tor_assert(chan);
+
+ log_debug(LD_CHANNEL,
+ "Clearing remote endpoint identity on channel %p with "
+ "global ID " U64_FORMAT,
+ chan, U64_PRINTF_ARG(chan->global_identifier));
+
+ state_not_in_map =
+ (chan->state == CHANNEL_STATE_CLOSING ||
+ chan->state == CHANNEL_STATE_CLOSED ||
+ chan->state == CHANNEL_STATE_ERROR);
+
+ if (!state_not_in_map && chan->registered &&
+ !tor_digest_is_zero(chan->identity_digest))
+ /* if it's registered get it out of the digest map */
+ channel_remove_from_digest_map(chan);
+
+ memset(chan->identity_digest, 0,
+ sizeof(chan->identity_digest));
+ tor_free(chan->nickname);
+}
+
+/**
+ * Set the remote end metadata (identity_digest/nickname) of a channel
+ *
+ * This function sets new remote end info on a channel; this is intended
+ * for use by the lower layer.
+ */
+
+void
+channel_set_remote_end(channel_t *chan,
+ const char *identity_digest,
+ const char *nickname)
+{
+ int was_in_digest_map, should_be_in_digest_map, state_not_in_map;
+
+ tor_assert(chan);
+
+ log_debug(LD_CHANNEL,
+ "Setting remote endpoint identity on channel %p with "
+ "global ID " U64_FORMAT " to nickname %s, digest %s",
+ chan, U64_PRINTF_ARG(chan->global_identifier),
+ nickname ? nickname : "(null)",
+ identity_digest ?
+ hex_str(identity_digest, DIGEST_LEN) : "(null)");
+
+ state_not_in_map =
+ (chan->state == CHANNEL_STATE_CLOSING ||
+ chan->state == CHANNEL_STATE_CLOSED ||
+ chan->state == CHANNEL_STATE_ERROR);
+ was_in_digest_map =
+ !state_not_in_map &&
+ chan->registered &&
+ !tor_digest_is_zero(chan->identity_digest);
+ should_be_in_digest_map =
+ !state_not_in_map &&
+ chan->registered &&
+ (identity_digest &&
+ !tor_digest_is_zero(identity_digest));
+
+ if (was_in_digest_map)
+ /* We should always remove it; we'll add it back if we're writing
+ * in a new digest.
+ */
+ channel_remove_from_digest_map(chan);
+
+ if (identity_digest) {
+ memcpy(chan->identity_digest,
+ identity_digest,
+ sizeof(chan->identity_digest));
+
+ } else {
+ memset(chan->identity_digest, 0,
+ sizeof(chan->identity_digest));
+ }
+
+ tor_free(chan->nickname);
+ if (nickname)
+ chan->nickname = tor_strdup(nickname);
+
+ /* Put it in the digest map if we should */
+ if (should_be_in_digest_map)
+ channel_add_to_digest_map(chan);
+}
+
+/**
+ * Duplicate a cell queue entry; this is a shallow copy intended for use
+ * in channel_write_cell_queue_entry().
+ */
+
+static cell_queue_entry_t *
+cell_queue_entry_dup(cell_queue_entry_t *q)
+{
+ cell_queue_entry_t *rv = NULL;
+
+ tor_assert(q);
+
+ rv = tor_malloc(sizeof(*rv));
+ memcpy(rv, q, sizeof(*rv));
+
+ return rv;
+}
+
+/**
+ * Free a cell_queue_entry_t; the handed_off parameter indicates whether
+ * the contents were passed to the lower layer (it is responsible for
+ * them) or not (we should free).
+ */
+
+static void
+cell_queue_entry_free(cell_queue_entry_t *q, int handed_off)
+{
+ if (!q) return;
+
+ if (!handed_off) {
+ /*
+ * If we handed it off, the recipient becomes responsible (or
+ * with packed cells the channel_t subclass calls packed_cell
+ * free after writing out its contents; see, e.g.,
+ * channel_tls_write_packed_cell_method(). Otherwise, we have
+ * to take care of it here if possible.
+ */
+ switch (q->type) {
+ case CELL_QUEUE_FIXED:
+ if (q->u.fixed.cell) {
+ /*
+ * There doesn't seem to be a cell_free() function anywhere in the
+ * pre-channel code; just use tor_free()
+ */
+ tor_free(q->u.fixed.cell);
+ }
+ break;
+ case CELL_QUEUE_PACKED:
+ if (q->u.packed.packed_cell) {
+ packed_cell_free(q->u.packed.packed_cell);
+ }
+ break;
+ case CELL_QUEUE_VAR:
+ if (q->u.var.var_cell) {
+ /*
+ * This one's in connection_or.c; it'd be nice to figure out the
+ * whole flow of cells from one end to the other and factor the
+ * cell memory management functions like this out of the specific
+ * TLS lower layer.
+ */
+ var_cell_free(q->u.var.var_cell);
+ }
+ break;
+ default:
+ /*
+ * Nothing we can do if we don't know the type; this will
+ * have been warned about elsewhere.
+ */
+ break;
+ }
+ }
+ tor_free(q);
+}
+
+/**
+ * Check whether a cell queue entry is padding; this is a helper function
+ * for channel_write_cell_queue_entry()
+ */
+
+static int
+cell_queue_entry_is_padding(cell_queue_entry_t *q)
+{
+ tor_assert(q);
+
+ if (q->type == CELL_QUEUE_FIXED) {
+ if (q->u.fixed.cell) {
+ if (q->u.fixed.cell->command == CELL_PADDING ||
+ q->u.fixed.cell->command == CELL_VPADDING) {
+ return 1;
+ }
+ }
+ } else if (q->type == CELL_QUEUE_VAR) {
+ if (q->u.var.var_cell) {
+ if (q->u.var.var_cell->command == CELL_PADDING ||
+ q->u.var.var_cell->command == CELL_VPADDING) {
+ return 1;
+ }
+ }
+ }
+
+ return 0;
+}
+
+/**
+ * Allocate a new cell queue entry for a fixed-size cell
+ */
+
+static cell_queue_entry_t *
+cell_queue_entry_new_fixed(cell_t *cell)
+{
+ cell_queue_entry_t *q = NULL;
+
+ tor_assert(cell);
+
+ q = tor_malloc(sizeof(*q));
+ q->type = CELL_QUEUE_FIXED;
+ q->u.fixed.cell = cell;
+
+ return q;
+}
+
+/**
+ * Allocate a new cell queue entry for a variable-size cell
+ */
+
+static cell_queue_entry_t *
+cell_queue_entry_new_var(var_cell_t *var_cell)
+{
+ cell_queue_entry_t *q = NULL;
+
+ tor_assert(var_cell);
+
+ q = tor_malloc(sizeof(*q));
+ q->type = CELL_QUEUE_VAR;
+ q->u.var.var_cell = var_cell;
+
+ return q;
+}
+
+/**
+ * Write to a channel based on a cell_queue_entry_t
+ *
+ * Given a cell_queue_entry_t filled out by the caller, try to send the cell
+ * and queue it if we can't.
+ */
+
+static void
+channel_write_cell_queue_entry(channel_t *chan, cell_queue_entry_t *q)
+{
+ int result = 0, sent = 0;
+ cell_queue_entry_t *tmp = NULL;
+
+ tor_assert(chan);
+ tor_assert(q);
+
+ /* Assert that the state makes sense for a cell write */
+ tor_assert(chan->state == CHANNEL_STATE_OPENING ||
+ chan->state == CHANNEL_STATE_OPEN ||
+ chan->state == CHANNEL_STATE_MAINT);
+
+ /* Increment the timestamp unless it's padding */
+ if (!cell_queue_entry_is_padding(q)) {
+ chan->timestamp_last_added_nonpadding = approx_time();
+ }
+
+ {
+ circid_t circ_id;
+ if (is_destroy_cell(chan, q, &circ_id)) {
+ channel_note_destroy_not_pending(chan, circ_id);
+ }
+ }
+
+ /* Can we send it right out? If so, try */
+ if (TOR_SIMPLEQ_EMPTY(&chan->outgoing_queue) &&
+ chan->state == CHANNEL_STATE_OPEN) {
+ /* Pick the right write function for this cell type and save the result */
+ switch (q->type) {
+ case CELL_QUEUE_FIXED:
+ tor_assert(chan->write_cell);
+ tor_assert(q->u.fixed.cell);
+ result = chan->write_cell(chan, q->u.fixed.cell);
+ break;
+ case CELL_QUEUE_PACKED:
+ tor_assert(chan->write_packed_cell);
+ tor_assert(q->u.packed.packed_cell);
+ result = chan->write_packed_cell(chan, q->u.packed.packed_cell);
+ break;
+ case CELL_QUEUE_VAR:
+ tor_assert(chan->write_var_cell);
+ tor_assert(q->u.var.var_cell);
+ result = chan->write_var_cell(chan, q->u.var.var_cell);
+ break;
+ default:
+ tor_assert(1);
+ }
+
+ /* Check if we got it out */
+ if (result > 0) {
+ sent = 1;
+ /* Timestamp for transmission */
+ channel_timestamp_xmit(chan);
+ /* If we're here the queue is empty, so it's drained too */
+ channel_timestamp_drained(chan);
+ /* Update the counter */
+ ++(chan->n_cells_xmitted);
+ }
+ }
+
+ if (!sent) {
+ /* Not sent, queue it */
+ /*
+ * We have to copy the queue entry passed in, since the caller probably
+ * used the stack.
+ */
+ tmp = cell_queue_entry_dup(q);
+ TOR_SIMPLEQ_INSERT_TAIL(&chan->outgoing_queue, tmp, next);
+ /* Try to process the queue? */
+ if (chan->state == CHANNEL_STATE_OPEN) channel_flush_cells(chan);
+ }
+}
+
+/**
+ * Write a cell to a channel
+ *
+ * Write a fixed-length cell to a channel using the write_cell() method.
+ * This is equivalent to the pre-channels connection_or_write_cell_to_buf();
+ * it is called by the transport-independent code to deliver a cell to a
+ * channel for transmission.
+ */
+
+void
+channel_write_cell(channel_t *chan, cell_t *cell)
+{
+ cell_queue_entry_t q;
+
+ tor_assert(chan);
+ tor_assert(cell);
+
+ if (chan->state == CHANNEL_STATE_CLOSING) {
+ log_debug(LD_CHANNEL, "Discarding cell_t %p on closing channel %p with "
+ "global ID "U64_FORMAT, cell, chan,
+ U64_PRINTF_ARG(chan->global_identifier));
+ tor_free(cell);
+ return;
+ }
+
+ log_debug(LD_CHANNEL,
+ "Writing cell_t %p to channel %p with global ID "
+ U64_FORMAT,
+ cell, chan, U64_PRINTF_ARG(chan->global_identifier));
+
+ q.type = CELL_QUEUE_FIXED;
+ q.u.fixed.cell = cell;
+ channel_write_cell_queue_entry(chan, &q);
+}
+
+/**
+ * Write a packed cell to a channel
+ *
+ * Write a packed cell to a channel using the write_cell() method. This is
+ * called by the transport-independent code to deliver a packed cell to a
+ * channel for transmission.
+ */
+
+void
+channel_write_packed_cell(channel_t *chan, packed_cell_t *packed_cell)
+{
+ cell_queue_entry_t q;
+
+ tor_assert(chan);
+ tor_assert(packed_cell);
+
+ if (chan->state == CHANNEL_STATE_CLOSING) {
+ log_debug(LD_CHANNEL, "Discarding packed_cell_t %p on closing channel %p "
+ "with global ID "U64_FORMAT, packed_cell, chan,
+ U64_PRINTF_ARG(chan->global_identifier));
+ packed_cell_free(packed_cell);
+ return;
+ }
+
+ log_debug(LD_CHANNEL,
+ "Writing packed_cell_t %p to channel %p with global ID "
+ U64_FORMAT,
+ packed_cell, chan,
+ U64_PRINTF_ARG(chan->global_identifier));
+
+ q.type = CELL_QUEUE_PACKED;
+ q.u.packed.packed_cell = packed_cell;
+ channel_write_cell_queue_entry(chan, &q);
+}
+
+/**
+ * Write a variable-length cell to a channel
+ *
+ * Write a variable-length cell to a channel using the write_cell() method.
+ * This is equivalent to the pre-channels
+ * connection_or_write_var_cell_to_buf(); it's called by the transport-
+ * independent code to deliver a var_cell to a channel for transmission.
+ */
+
+void
+channel_write_var_cell(channel_t *chan, var_cell_t *var_cell)
+{
+ cell_queue_entry_t q;
+
+ tor_assert(chan);
+ tor_assert(var_cell);
+
+ if (chan->state == CHANNEL_STATE_CLOSING) {
+ log_debug(LD_CHANNEL, "Discarding var_cell_t %p on closing channel %p "
+ "with global ID "U64_FORMAT, var_cell, chan,
+ U64_PRINTF_ARG(chan->global_identifier));
+ var_cell_free(var_cell);
+ return;
+ }
+
+ log_debug(LD_CHANNEL,
+ "Writing var_cell_t %p to channel %p with global ID "
+ U64_FORMAT,
+ var_cell, chan,
+ U64_PRINTF_ARG(chan->global_identifier));
+
+ q.type = CELL_QUEUE_VAR;
+ q.u.var.var_cell = var_cell;
+ channel_write_cell_queue_entry(chan, &q);
+}
+
+/**
+ * Change channel state
+ *
+ * This internal and subclass use only function is used to change channel
+ * state, performing all transition validity checks and whatever actions
+ * are appropriate to the state transition in question.
+ */
+
+void
+channel_change_state(channel_t *chan, channel_state_t to_state)
+{
+ channel_state_t from_state;
+ unsigned char was_active, is_active;
+ unsigned char was_in_id_map, is_in_id_map;
+
+ tor_assert(chan);
+ from_state = chan->state;
+
+ tor_assert(channel_state_is_valid(from_state));
+ tor_assert(channel_state_is_valid(to_state));
+ tor_assert(channel_state_can_transition(chan->state, to_state));
+
+ /* Check for no-op transitions */
+ if (from_state == to_state) {
+ log_debug(LD_CHANNEL,
+ "Got no-op transition from \"%s\" to itself on channel %p"
+ "(global ID " U64_FORMAT ")",
+ channel_state_to_string(to_state),
+ chan, U64_PRINTF_ARG(chan->global_identifier));
+ return;
+ }
+
+ /* If we're going to a closing or closed state, we must have a reason set */
+ if (to_state == CHANNEL_STATE_CLOSING ||
+ to_state == CHANNEL_STATE_CLOSED ||
+ to_state == CHANNEL_STATE_ERROR) {
+ tor_assert(chan->reason_for_closing != CHANNEL_NOT_CLOSING);
+ }
+
+ /*
+ * We need to maintain the queues here for some transitions:
+ * when we enter CHANNEL_STATE_OPEN (especially from CHANNEL_STATE_MAINT)
+ * we may have a backlog of cells to transmit, so drain the queues in
+ * that case, and when going to CHANNEL_STATE_CLOSED the subclass
+ * should have made sure to finish sending things (or gone to
+ * CHANNEL_STATE_ERROR if not possible), so we assert for that here.
+ */
+
+ log_debug(LD_CHANNEL,
+ "Changing state of channel %p (global ID " U64_FORMAT
+ ") from \"%s\" to \"%s\"",
+ chan,
+ U64_PRINTF_ARG(chan->global_identifier),
+ channel_state_to_string(chan->state),
+ channel_state_to_string(to_state));
+
+ chan->state = to_state;
+
+ /* Need to add to the right lists if the channel is registered */
+ if (chan->registered) {
+ was_active = !(from_state == CHANNEL_STATE_CLOSED ||
+ from_state == CHANNEL_STATE_ERROR);
+ is_active = !(to_state == CHANNEL_STATE_CLOSED ||
+ to_state == CHANNEL_STATE_ERROR);
+
+ /* Need to take off active list and put on finished list? */
+ if (was_active && !is_active) {
+ if (active_channels) smartlist_remove(active_channels, chan);
+ if (!finished_channels) finished_channels = smartlist_new();
+ smartlist_add(finished_channels, chan);
+ }
+ /* Need to put on active list? */
+ else if (!was_active && is_active) {
+ if (finished_channels) smartlist_remove(finished_channels, chan);
+ if (!active_channels) active_channels = smartlist_new();
+ smartlist_add(active_channels, chan);
+ }
+
+ if (!tor_digest_is_zero(chan->identity_digest)) {
+ /* Now we need to handle the identity map */
+ was_in_id_map = !(from_state == CHANNEL_STATE_CLOSING ||
+ from_state == CHANNEL_STATE_CLOSED ||
+ from_state == CHANNEL_STATE_ERROR);
+ is_in_id_map = !(to_state == CHANNEL_STATE_CLOSING ||
+ to_state == CHANNEL_STATE_CLOSED ||
+ to_state == CHANNEL_STATE_ERROR);
+
+ if (!was_in_id_map && is_in_id_map) channel_add_to_digest_map(chan);
+ else if (was_in_id_map && !is_in_id_map)
+ channel_remove_from_digest_map(chan);
+ }
+ }
+
+ /* Tell circuits if we opened and stuff */
+ if (to_state == CHANNEL_STATE_OPEN) {
+ channel_do_open_actions(chan);
+ chan->has_been_open = 1;
+
+ /* Check for queued cells to process */
+ if (! TOR_SIMPLEQ_EMPTY(&chan->incoming_queue))
+ channel_process_cells(chan);
+ if (! TOR_SIMPLEQ_EMPTY(&chan->outgoing_queue))
+ channel_flush_cells(chan);
+ } else if (to_state == CHANNEL_STATE_CLOSED ||
+ to_state == CHANNEL_STATE_ERROR) {
+ /* Assert that all queues are empty */
+ tor_assert(TOR_SIMPLEQ_EMPTY(&chan->incoming_queue));
+ tor_assert(TOR_SIMPLEQ_EMPTY(&chan->outgoing_queue));
+ }
+}
+
+/**
+ * Change channel listener state
+ *
+ * This internal and subclass use only function is used to change channel
+ * listener state, performing all transition validity checks and whatever
+ * actions are appropriate to the state transition in question.
+ */
+
+void
+channel_listener_change_state(channel_listener_t *chan_l,
+ channel_listener_state_t to_state)
+{
+ channel_listener_state_t from_state;
+ unsigned char was_active, is_active;
+
+ tor_assert(chan_l);
+ from_state = chan_l->state;
+
+ tor_assert(channel_listener_state_is_valid(from_state));
+ tor_assert(channel_listener_state_is_valid(to_state));
+ tor_assert(channel_listener_state_can_transition(chan_l->state, to_state));
+
+ /* Check for no-op transitions */
+ if (from_state == to_state) {
+ log_debug(LD_CHANNEL,
+ "Got no-op transition from \"%s\" to itself on channel "
+ "listener %p (global ID " U64_FORMAT ")",
+ channel_listener_state_to_string(to_state),
+ chan_l, U64_PRINTF_ARG(chan_l->global_identifier));
+ return;
+ }
+
+ /* If we're going to a closing or closed state, we must have a reason set */
+ if (to_state == CHANNEL_LISTENER_STATE_CLOSING ||
+ to_state == CHANNEL_LISTENER_STATE_CLOSED ||
+ to_state == CHANNEL_LISTENER_STATE_ERROR) {
+ tor_assert(chan_l->reason_for_closing != CHANNEL_LISTENER_NOT_CLOSING);
+ }
+
+ /*
+ * We need to maintain the queues here for some transitions:
+ * when we enter CHANNEL_STATE_OPEN (especially from CHANNEL_STATE_MAINT)
+ * we may have a backlog of cells to transmit, so drain the queues in
+ * that case, and when going to CHANNEL_STATE_CLOSED the subclass
+ * should have made sure to finish sending things (or gone to
+ * CHANNEL_STATE_ERROR if not possible), so we assert for that here.
+ */
+
+ log_debug(LD_CHANNEL,
+ "Changing state of channel listener %p (global ID " U64_FORMAT
+ "from \"%s\" to \"%s\"",
+ chan_l, U64_PRINTF_ARG(chan_l->global_identifier),
+ channel_listener_state_to_string(chan_l->state),
+ channel_listener_state_to_string(to_state));
+
+ chan_l->state = to_state;
+
+ /* Need to add to the right lists if the channel listener is registered */
+ if (chan_l->registered) {
+ was_active = !(from_state == CHANNEL_LISTENER_STATE_CLOSED ||
+ from_state == CHANNEL_LISTENER_STATE_ERROR);
+ is_active = !(to_state == CHANNEL_LISTENER_STATE_CLOSED ||
+ to_state == CHANNEL_LISTENER_STATE_ERROR);
+
+ /* Need to take off active list and put on finished list? */
+ if (was_active && !is_active) {
+ if (active_listeners) smartlist_remove(active_listeners, chan_l);
+ if (!finished_listeners) finished_listeners = smartlist_new();
+ smartlist_add(finished_listeners, chan_l);
+ }
+ /* Need to put on active list? */
+ else if (!was_active && is_active) {
+ if (finished_listeners) smartlist_remove(finished_listeners, chan_l);
+ if (!active_listeners) active_listeners = smartlist_new();
+ smartlist_add(active_listeners, chan_l);
+ }
+ }
+
+ if (to_state == CHANNEL_LISTENER_STATE_CLOSED ||
+ to_state == CHANNEL_LISTENER_STATE_ERROR) {
+ /* Assert that the queue is empty */
+ tor_assert(!(chan_l->incoming_list) ||
+ smartlist_len(chan_l->incoming_list) == 0);
+ }
+}
+
+/**
+ * Try to flush cells to the lower layer
+ *
+ * this is called by the lower layer to indicate that it wants more cells;
+ * it will try to write up to num_cells cells from the channel's cell queue or
+ * from circuits active on that channel, or as many as it has available if
+ * num_cells == -1.
+ */
+
+#define MAX_CELLS_TO_GET_FROM_CIRCUITS_FOR_UNLIMITED 256
+
+ssize_t
+channel_flush_some_cells(channel_t *chan, ssize_t num_cells)
+{
+ unsigned int unlimited = 0;
+ ssize_t flushed = 0;
+ int num_cells_from_circs, clamped_num_cells;
+
+ tor_assert(chan);
+
+ if (num_cells < 0) unlimited = 1;
+ if (!unlimited && num_cells <= flushed) goto done;
+
+ /* If we aren't in CHANNEL_STATE_OPEN, nothing goes through */
+ if (chan->state == CHANNEL_STATE_OPEN) {
+ /* Try to flush as much as we can that's already queued */
+ flushed += channel_flush_some_cells_from_outgoing_queue(chan,
+ (unlimited ? -1 : num_cells - flushed));
+ if (!unlimited && num_cells <= flushed) goto done;
+
+ if (circuitmux_num_cells(chan->cmux) > 0) {
+ /* Calculate number of cells, including clamp */
+ if (unlimited) {
+ clamped_num_cells = MAX_CELLS_TO_GET_FROM_CIRCUITS_FOR_UNLIMITED;
+ } else {
+ if (num_cells - flushed >
+ MAX_CELLS_TO_GET_FROM_CIRCUITS_FOR_UNLIMITED) {
+ clamped_num_cells = MAX_CELLS_TO_GET_FROM_CIRCUITS_FOR_UNLIMITED;
+ } else {
+ clamped_num_cells = (int)(num_cells - flushed);
+ }
+ }
+ /* Try to get more cells from any active circuits */
+ num_cells_from_circs = channel_flush_from_first_active_circuit(
+ chan, clamped_num_cells);
+
+ /* If it claims we got some, process the queue again */
+ if (num_cells_from_circs > 0) {
+ flushed += channel_flush_some_cells_from_outgoing_queue(chan,
+ (unlimited ? -1 : num_cells - flushed));
+ }
+ }
+ }
+
+ done:
+ return flushed;
+}
+
+/**
+ * Flush cells from just the channel's outgoing cell queue
+ *
+ * This gets called from channel_flush_some_cells() above to flush cells
+ * just from the queue without trying for active_circuits.
+ */
+
+static ssize_t
+channel_flush_some_cells_from_outgoing_queue(channel_t *chan,
+ ssize_t num_cells)
+{
+ unsigned int unlimited = 0;
+ ssize_t flushed = 0;
+ cell_queue_entry_t *q = NULL;
+
+ tor_assert(chan);
+ tor_assert(chan->write_cell);
+ tor_assert(chan->write_packed_cell);
+ tor_assert(chan->write_var_cell);
+
+ if (num_cells < 0) unlimited = 1;
+ if (!unlimited && num_cells <= flushed) return 0;
+
+ /* If we aren't in CHANNEL_STATE_OPEN, nothing goes through */
+ if (chan->state == CHANNEL_STATE_OPEN) {
+ while ((unlimited || num_cells > flushed) &&
+ NULL != (q = TOR_SIMPLEQ_FIRST(&chan->outgoing_queue))) {
+
+ if (1) {
+ /*
+ * Okay, we have a good queue entry, try to give it to the lower
+ * layer.
+ */
+ switch (q->type) {
+ case CELL_QUEUE_FIXED:
+ if (q->u.fixed.cell) {
+ if (chan->write_cell(chan,
+ q->u.fixed.cell)) {
+ ++flushed;
+ channel_timestamp_xmit(chan);
+ ++(chan->n_cells_xmitted);
+ cell_queue_entry_free(q, 1);
+ q = NULL;
+ }
+ /* Else couldn't write it; leave it on the queue */
+ } else {
+ /* This shouldn't happen */
+ log_info(LD_CHANNEL,
+ "Saw broken cell queue entry of type CELL_QUEUE_FIXED "
+ "with no cell on channel %p "
+ "(global ID " U64_FORMAT ").",
+ chan, U64_PRINTF_ARG(chan->global_identifier));
+ /* Throw it away */
+ cell_queue_entry_free(q, 0);
+ q = NULL;
+ }
+ break;
+ case CELL_QUEUE_PACKED:
+ if (q->u.packed.packed_cell) {
+ if (chan->write_packed_cell(chan,
+ q->u.packed.packed_cell)) {
+ ++flushed;
+ channel_timestamp_xmit(chan);
+ ++(chan->n_cells_xmitted);
+ cell_queue_entry_free(q, 1);
+ q = NULL;
+ }
+ /* Else couldn't write it; leave it on the queue */
+ } else {
+ /* This shouldn't happen */
+ log_info(LD_CHANNEL,
+ "Saw broken cell queue entry of type CELL_QUEUE_PACKED "
+ "with no cell on channel %p "
+ "(global ID " U64_FORMAT ").",
+ chan, U64_PRINTF_ARG(chan->global_identifier));
+ /* Throw it away */
+ cell_queue_entry_free(q, 0);
+ q = NULL;
+ }
+ break;
+ case CELL_QUEUE_VAR:
+ if (q->u.var.var_cell) {
+ if (chan->write_var_cell(chan,
+ q->u.var.var_cell)) {
+ ++flushed;
+ channel_timestamp_xmit(chan);
+ ++(chan->n_cells_xmitted);
+ cell_queue_entry_free(q, 1);
+ q = NULL;
+ }
+ /* Else couldn't write it; leave it on the queue */
+ } else {
+ /* This shouldn't happen */
+ log_info(LD_CHANNEL,
+ "Saw broken cell queue entry of type CELL_QUEUE_VAR "
+ "with no cell on channel %p "
+ "(global ID " U64_FORMAT ").",
+ chan, U64_PRINTF_ARG(chan->global_identifier));
+ /* Throw it away */
+ cell_queue_entry_free(q, 0);
+ q = NULL;
+ }
+ break;
+ default:
+ /* Unknown type, log and free it */
+ log_info(LD_CHANNEL,
+ "Saw an unknown cell queue entry type %d on channel %p "
+ "(global ID " U64_FORMAT "; ignoring it."
+ " Someone should fix this.",
+ q->type, chan, U64_PRINTF_ARG(chan->global_identifier));
+ cell_queue_entry_free(q, 0);
+ q = NULL;
+ }
+
+ /* if q got NULLed out, we used it and should remove the queue entry */
+ if (!q) TOR_SIMPLEQ_REMOVE_HEAD(&chan->outgoing_queue, next);
+ /* No cell removed from list, so we can't go on any further */
+ else break;
+ }
+ }
+ }
+
+ /* Did we drain the queue? */
+ if (TOR_SIMPLEQ_EMPTY(&chan->outgoing_queue)) {
+ channel_timestamp_drained(chan);
+ }
+
+ return flushed;
+}
+
+/**
+ * Flush as many cells as we possibly can from the queue
+ *
+ * This tries to flush as many cells from the queue as the lower layer
+ * will take. It just calls channel_flush_some_cells_from_outgoing_queue()
+ * in unlimited mode.
+ */
+
+void
+channel_flush_cells(channel_t *chan)
+{
+ channel_flush_some_cells_from_outgoing_queue(chan, -1);
+}
+
+/**
+ * Check if any cells are available
+ *
+ * This gets used from the lower layer to check if any more cells are
+ * available.
+ */
+
+int
+channel_more_to_flush(channel_t *chan)
+{
+ tor_assert(chan);
+
+ /* Check if we have any queued */
+ if (! TOR_SIMPLEQ_EMPTY(&chan->incoming_queue))
+ return 1;
+
+ /* Check if any circuits would like to queue some */
+ if (circuitmux_num_cells(chan->cmux) > 0) return 1;
+
+ /* Else no */
+ return 0;
+}
+
+/**
+ * Notify the channel we're done flushing the output in the lower layer
+ *
+ * Connection.c will call this when we've flushed the output; there's some
+ * dirreq-related maintenance to do.
+ */
+
+void
+channel_notify_flushed(channel_t *chan)
+{
+ tor_assert(chan);
+
+ if (chan->dirreq_id != 0)
+ geoip_change_dirreq_state(chan->dirreq_id,
+ DIRREQ_TUNNELED,
+ DIRREQ_CHANNEL_BUFFER_FLUSHED);
+}
+
+/**
+ * Process the queue of incoming channels on a listener
+ *
+ * Use a listener's registered callback to process as many entries in the
+ * queue of incoming channels as possible.
+ */
+
+void
+channel_listener_process_incoming(channel_listener_t *listener)
+{
+ tor_assert(listener);
+
+ /*
+ * CHANNEL_LISTENER_STATE_CLOSING permitted because we drain the queue
+ * while closing a listener.
+ */
+ tor_assert(listener->state == CHANNEL_LISTENER_STATE_LISTENING ||
+ listener->state == CHANNEL_LISTENER_STATE_CLOSING);
+ tor_assert(listener->listener);
+
+ log_debug(LD_CHANNEL,
+ "Processing queue of incoming connections for channel "
+ "listener %p (global ID " U64_FORMAT ")",
+ listener, U64_PRINTF_ARG(listener->global_identifier));
+
+ if (!(listener->incoming_list)) return;
+
+ SMARTLIST_FOREACH_BEGIN(listener->incoming_list,
+ channel_t *, chan) {
+ tor_assert(chan);
+
+ log_debug(LD_CHANNEL,
+ "Handling incoming channel %p (" U64_FORMAT ") "
+ "for listener %p (" U64_FORMAT ")",
+ chan,
+ U64_PRINTF_ARG(chan->global_identifier),
+ listener,
+ U64_PRINTF_ARG(listener->global_identifier));
+ /* Make sure this is set correctly */
+ channel_mark_incoming(chan);
+ listener->listener(listener, chan);
+ } SMARTLIST_FOREACH_END(chan);
+
+ smartlist_free(listener->incoming_list);
+ listener->incoming_list = NULL;
+}
+
+/**
+ * Take actions required when a channel becomes open
+ *
+ * Handle actions we should do when we know a channel is open; a lot of
+ * this comes from the old connection_or_set_state_open() of connection_or.c.
+ *
+ * Because of this mechanism, future channel_t subclasses should take care
+ * not to change a channel to from CHANNEL_STATE_OPENING to CHANNEL_STATE_OPEN
+ * until there is positive confirmation that the network is operational.
+ * In particular, anything UDP-based should not make this transition until a
+ * packet is received from the other side.
+ */
+
+void
+channel_do_open_actions(channel_t *chan)
+{
+ tor_addr_t remote_addr;
+ int started_here, not_using = 0;
+ time_t now = time(NULL);
+
+ tor_assert(chan);
+
+ started_here = channel_is_outgoing(chan);
+
+ if (started_here) {
+ circuit_build_times_network_is_live(get_circuit_build_times_mutable());
+ rep_hist_note_connect_succeeded(chan->identity_digest, now);
+ if (entry_guard_register_connect_status(
+ chan->identity_digest, 1, 0, now) < 0) {
+ /* Close any circuits pending on this channel. We leave it in state
+ * 'open' though, because it didn't actually *fail* -- we just
+ * chose not to use it. */
+ log_debug(LD_OR,
+ "New entry guard was reachable, but closing this "
+ "connection so we can retry the earlier entry guards.");
+ circuit_n_chan_done(chan, 0);
+ not_using = 1;
+ }
+ router_set_status(chan->identity_digest, 1);
+ } else {
+ /* only report it to the geoip module if it's not a known router */
+ if (!router_get_by_id_digest(chan->identity_digest)) {
+ if (channel_get_addr_if_possible(chan, &remote_addr)) {
+ char *transport_name = NULL;
+ if (chan->get_transport_name(chan, &transport_name) < 0)
+ transport_name = NULL;
+
+ geoip_note_client_seen(GEOIP_CLIENT_CONNECT,
+ &remote_addr, transport_name,
+ now);
+ tor_free(transport_name);
+ }
+ /* Otherwise the underlying transport can't tell us this, so skip it */
+ }
+ }
+
+ if (!not_using) circuit_n_chan_done(chan, 1);
+}
+
+/**
+ * Queue an incoming channel on a listener
+ *
+ * Internal and subclass use only function to queue an incoming channel from
+ * a listener. A subclass of channel_listener_t should call this when a new
+ * incoming channel is created.
+ */
+
+void
+channel_listener_queue_incoming(channel_listener_t *listener,
+ channel_t *incoming)
+{
+ int need_to_queue = 0;
+
+ tor_assert(listener);
+ tor_assert(listener->state == CHANNEL_LISTENER_STATE_LISTENING);
+ tor_assert(incoming);
+
+ log_debug(LD_CHANNEL,
+ "Queueing incoming channel %p (global ID " U64_FORMAT ") on "
+ "channel listener %p (global ID " U64_FORMAT ")",
+ incoming, U64_PRINTF_ARG(incoming->global_identifier),
+ listener, U64_PRINTF_ARG(listener->global_identifier));
+
+ /* Do we need to queue it, or can we just call the listener right away? */
+ if (!(listener->listener)) need_to_queue = 1;
+ if (listener->incoming_list &&
+ (smartlist_len(listener->incoming_list) > 0))
+ need_to_queue = 1;
+
+ /* If we need to queue and have no queue, create one */
+ if (need_to_queue && !(listener->incoming_list)) {
+ listener->incoming_list = smartlist_new();
+ }
+
+ /* Bump the counter and timestamp it */
+ channel_listener_timestamp_active(listener);
+ channel_listener_timestamp_accepted(listener);
+ ++(listener->n_accepted);
+
+ /* If we don't need to queue, process it right away */
+ if (!need_to_queue) {
+ tor_assert(listener->listener);
+ listener->listener(listener, incoming);
+ }
+ /*
+ * Otherwise, we need to queue; queue and then process the queue if
+ * we can.
+ */
+ else {
+ tor_assert(listener->incoming_list);
+ smartlist_add(listener->incoming_list, incoming);
+ if (listener->listener) channel_listener_process_incoming(listener);
+ }
+}
+
+/**
+ * Process queued incoming cells
+ *
+ * Process as many queued cells as we can from the incoming
+ * cell queue.
+ */
+
+void
+channel_process_cells(channel_t *chan)
+{
+ cell_queue_entry_t *q;
+ tor_assert(chan);
+ tor_assert(chan->state == CHANNEL_STATE_CLOSING ||
+ chan->state == CHANNEL_STATE_MAINT ||
+ chan->state == CHANNEL_STATE_OPEN);
+
+ log_debug(LD_CHANNEL,
+ "Processing as many incoming cells as we can for channel %p",
+ chan);
+
+ /* Nothing we can do if we have no registered cell handlers */
+ if (!(chan->cell_handler ||
+ chan->var_cell_handler)) return;
+ /* Nothing we can do if we have no cells */
+ if (TOR_SIMPLEQ_EMPTY(&chan->incoming_queue)) return;
+
+ /*
+ * Process cells until we're done or find one we have no current handler
+ * for.
+ */
+ while (NULL != (q = TOR_SIMPLEQ_FIRST(&chan->incoming_queue))) {
+ tor_assert(q);
+ tor_assert(q->type == CELL_QUEUE_FIXED ||
+ q->type == CELL_QUEUE_VAR);
+
+ if (q->type == CELL_QUEUE_FIXED &&
+ chan->cell_handler) {
+ /* Handle a fixed-length cell */
+ TOR_SIMPLEQ_REMOVE_HEAD(&chan->incoming_queue, next);
+ tor_assert(q->u.fixed.cell);
+ log_debug(LD_CHANNEL,
+ "Processing incoming cell_t %p for channel %p (global ID "
+ U64_FORMAT ")",
+ q->u.fixed.cell, chan,
+ U64_PRINTF_ARG(chan->global_identifier));
+ chan->cell_handler(chan, q->u.fixed.cell);
+ tor_free(q);
+ } else if (q->type == CELL_QUEUE_VAR &&
+ chan->var_cell_handler) {
+ /* Handle a variable-length cell */
+ TOR_SIMPLEQ_REMOVE_HEAD(&chan->incoming_queue, next);
+ tor_assert(q->u.var.var_cell);
+ log_debug(LD_CHANNEL,
+ "Processing incoming var_cell_t %p for channel %p (global ID "
+ U64_FORMAT ")",
+ q->u.var.var_cell, chan,
+ U64_PRINTF_ARG(chan->global_identifier));
+ chan->var_cell_handler(chan, q->u.var.var_cell);
+ tor_free(q);
+ } else {
+ /* Can't handle this one */
+ break;
+ }
+ }
+}
+
+/**
+ * Queue incoming cell
+ *
+ * This should be called by a channel_t subclass to queue an incoming fixed-
+ * length cell for processing, and process it if possible.
+ */
+
+void
+channel_queue_cell(channel_t *chan, cell_t *cell)
+{
+ int need_to_queue = 0;
+ cell_queue_entry_t *q;
+
+ tor_assert(chan);
+ tor_assert(cell);
+ tor_assert(chan->state == CHANNEL_STATE_OPEN);
+
+ /* Do we need to queue it, or can we just call the handler right away? */
+ if (!(chan->cell_handler)) need_to_queue = 1;
+ if (! TOR_SIMPLEQ_EMPTY(&chan->incoming_queue))
+ need_to_queue = 1;
+
+ /* Timestamp for receiving */
+ channel_timestamp_recv(chan);
+
+ /* Update the counter */
+ ++(chan->n_cells_recved);
+
+ /* If we don't need to queue we can just call cell_handler */
+ if (!need_to_queue) {
+ tor_assert(chan->cell_handler);
+ log_debug(LD_CHANNEL,
+ "Directly handling incoming cell_t %p for channel %p "
+ "(global ID " U64_FORMAT ")",
+ cell, chan,
+ U64_PRINTF_ARG(chan->global_identifier));
+ chan->cell_handler(chan, cell);
+ } else {
+ /* Otherwise queue it and then process the queue if possible. */
+ q = cell_queue_entry_new_fixed(cell);
+ log_debug(LD_CHANNEL,
+ "Queueing incoming cell_t %p for channel %p "
+ "(global ID " U64_FORMAT ")",
+ cell, chan,
+ U64_PRINTF_ARG(chan->global_identifier));
+ TOR_SIMPLEQ_INSERT_TAIL(&chan->incoming_queue, q, next);
+ if (chan->cell_handler ||
+ chan->var_cell_handler) {
+ channel_process_cells(chan);
+ }
+ }
+}
+
+/**
+ * Queue incoming variable-length cell
+ *
+ * This should be called by a channel_t subclass to queue an incoming
+ * variable-length cell for processing, and process it if possible.
+ */
+
+void
+channel_queue_var_cell(channel_t *chan, var_cell_t *var_cell)
+{
+ int need_to_queue = 0;
+ cell_queue_entry_t *q;
+
+ tor_assert(chan);
+ tor_assert(var_cell);
+ tor_assert(chan->state == CHANNEL_STATE_OPEN);
+
+ /* Do we need to queue it, or can we just call the handler right away? */
+ if (!(chan->var_cell_handler)) need_to_queue = 1;
+ if (! TOR_SIMPLEQ_EMPTY(&chan->incoming_queue))
+ need_to_queue = 1;
+
+ /* Timestamp for receiving */
+ channel_timestamp_recv(chan);
+
+ /* Update the counter */
+ ++(chan->n_cells_recved);
+
+ /* If we don't need to queue we can just call cell_handler */
+ if (!need_to_queue) {
+ tor_assert(chan->var_cell_handler);
+ log_debug(LD_CHANNEL,
+ "Directly handling incoming var_cell_t %p for channel %p "
+ "(global ID " U64_FORMAT ")",
+ var_cell, chan,
+ U64_PRINTF_ARG(chan->global_identifier));
+ chan->var_cell_handler(chan, var_cell);
+ } else {
+ /* Otherwise queue it and then process the queue if possible. */
+ q = cell_queue_entry_new_var(var_cell);
+ log_debug(LD_CHANNEL,
+ "Queueing incoming var_cell_t %p for channel %p "
+ "(global ID " U64_FORMAT ")",
+ var_cell, chan,
+ U64_PRINTF_ARG(chan->global_identifier));
+ TOR_SIMPLEQ_INSERT_TAIL(&chan->incoming_queue, q, next);
+ if (chan->cell_handler ||
+ chan->var_cell_handler) {
+ channel_process_cells(chan);
+ }
+ }
+}
+
+/** If <b>packed_cell</b> on <b>chan</b> is a destroy cell, then set
+ * *<b>circid_out</b> to its circuit ID, and return true. Otherwise, return
+ * false. */
+/* XXXX Move this function. */
+int
+packed_cell_is_destroy(channel_t *chan,
+ const packed_cell_t *packed_cell,
+ circid_t *circid_out)
+{
+ if (chan->wide_circ_ids) {
+ if (packed_cell->body[4] == CELL_DESTROY) {
+ *circid_out = ntohl(get_uint32(packed_cell->body));
+ return 1;
+ }
+ } else {
+ if (packed_cell->body[2] == CELL_DESTROY) {
+ *circid_out = ntohs(get_uint16(packed_cell->body));
+ return 1;
+ }
+ }
+ return 0;
+}
+
+/** DOCDOC */
+static int
+is_destroy_cell(channel_t *chan,
+ const cell_queue_entry_t *q, circid_t *circid_out)
+{
+ *circid_out = 0;
+ switch (q->type) {
+ case CELL_QUEUE_FIXED:
+ if (q->u.fixed.cell->command == CELL_DESTROY) {
+ *circid_out = q->u.fixed.cell->circ_id;
+ return 1;
+ }
+ break;
+ case CELL_QUEUE_VAR:
+ if (q->u.var.var_cell->command == CELL_DESTROY) {
+ *circid_out = q->u.var.var_cell->circ_id;
+ return 1;
+ }
+ break;
+ case CELL_QUEUE_PACKED:
+ return packed_cell_is_destroy(chan, q->u.packed.packed_cell, circid_out);
+ }
+ return 0;
+}
+
+/**
+ * Send destroy cell on a channel
+ *
+ * Write a destroy cell with circ ID <b>circ_id</b> and reason <b>reason</b>
+ * onto channel <b>chan</b>. Don't perform range-checking on reason:
+ * we may want to propagate reasons from other cells.
+ */
+
+int
+channel_send_destroy(circid_t circ_id, channel_t *chan, int reason)
+{
+ tor_assert(chan);
+
+ /* Check to make sure we can send on this channel first */
+ if (!(chan->state == CHANNEL_STATE_CLOSING ||
+ chan->state == CHANNEL_STATE_CLOSED ||
+ chan->state == CHANNEL_STATE_ERROR) &&
+ chan->cmux) {
+ channel_note_destroy_pending(chan, circ_id);
+ circuitmux_append_destroy_cell(chan, chan->cmux, circ_id, reason);
+ log_debug(LD_OR,
+ "Sending destroy (circID %u) on channel %p "
+ "(global ID " U64_FORMAT ")",
+ (unsigned)circ_id, chan,
+ U64_PRINTF_ARG(chan->global_identifier));
+ } else {
+ log_warn(LD_BUG,
+ "Someone called channel_send_destroy() for circID %u "
+ "on a channel " U64_FORMAT " at %p in state %s (%d)",
+ (unsigned)circ_id, U64_PRINTF_ARG(chan->global_identifier),
+ chan, channel_state_to_string(chan->state),
+ chan->state);
+ }
+
+ return 0;
+}
+
+/**
+ * Dump channel statistics to the log
+ *
+ * This is called from dumpstats() in main.c and spams the log with
+ * statistics on channels.
+ */
+
+void
+channel_dumpstats(int severity)
+{
+ if (all_channels && smartlist_len(all_channels) > 0) {
+ tor_log(severity, LD_GENERAL,
+ "Dumping statistics about %d channels:",
+ smartlist_len(all_channels));
+ tor_log(severity, LD_GENERAL,
+ "%d are active, and %d are done and waiting for cleanup",
+ (active_channels != NULL) ?
+ smartlist_len(active_channels) : 0,
+ (finished_channels != NULL) ?
+ smartlist_len(finished_channels) : 0);
+
+ SMARTLIST_FOREACH(all_channels, channel_t *, chan,
+ channel_dump_statistics(chan, severity));
+
+ tor_log(severity, LD_GENERAL,
+ "Done spamming about channels now");
+ } else {
+ tor_log(severity, LD_GENERAL,
+ "No channels to dump");
+ }
+}
+
+/**
+ * Dump channel listener statistics to the log
+ *
+ * This is called from dumpstats() in main.c and spams the log with
+ * statistics on channel listeners.
+ */
+
+void
+channel_listener_dumpstats(int severity)
+{
+ if (all_listeners && smartlist_len(all_listeners) > 0) {
+ tor_log(severity, LD_GENERAL,
+ "Dumping statistics about %d channel listeners:",
+ smartlist_len(all_listeners));
+ tor_log(severity, LD_GENERAL,
+ "%d are active and %d are done and waiting for cleanup",
+ (active_listeners != NULL) ?
+ smartlist_len(active_listeners) : 0,
+ (finished_listeners != NULL) ?
+ smartlist_len(finished_listeners) : 0);
+
+ SMARTLIST_FOREACH(all_listeners, channel_listener_t *, chan_l,
+ channel_listener_dump_statistics(chan_l, severity));
+
+ tor_log(severity, LD_GENERAL,
+ "Done spamming about channel listeners now");
+ } else {
+ tor_log(severity, LD_GENERAL,
+ "No channel listeners to dump");
+ }
+}
+
+/**
+ * Set the cmux policy on all active channels
+ */
+
+void
+channel_set_cmux_policy_everywhere(circuitmux_policy_t *pol)
+{
+ if (!active_channels) return;
+
+ SMARTLIST_FOREACH_BEGIN(active_channels, channel_t *, curr) {
+ if (curr->cmux) {
+ circuitmux_set_policy(curr->cmux, pol);
+ }
+ } SMARTLIST_FOREACH_END(curr);
+}
+
+/**
+ * Clean up channels
+ *
+ * This gets called periodically from run_scheduled_events() in main.c;
+ * it cleans up after closed channels.
+ */
+
+void
+channel_run_cleanup(void)
+{
+ channel_t *tmp = NULL;
+
+ /* Check if we need to do anything */
+ if (!finished_channels || smartlist_len(finished_channels) == 0) return;
+
+ /* Iterate through finished_channels and get rid of them */
+ SMARTLIST_FOREACH_BEGIN(finished_channels, channel_t *, curr) {
+ tmp = curr;
+ /* Remove it from the list */
+ SMARTLIST_DEL_CURRENT(finished_channels, curr);
+ /* Also unregister it */
+ channel_unregister(tmp);
+ /* ... and free it */
+ channel_free(tmp);
+ } SMARTLIST_FOREACH_END(curr);
+}
+
+/**
+ * Clean up channel listeners
+ *
+ * This gets called periodically from run_scheduled_events() in main.c;
+ * it cleans up after closed channel listeners.
+ */
+
+void
+channel_listener_run_cleanup(void)
+{
+ channel_listener_t *tmp = NULL;
+
+ /* Check if we need to do anything */
+ if (!finished_listeners || smartlist_len(finished_listeners) == 0) return;
+
+ /* Iterate through finished_channels and get rid of them */
+ SMARTLIST_FOREACH_BEGIN(finished_listeners, channel_listener_t *, curr) {
+ tmp = curr;
+ /* Remove it from the list */
+ SMARTLIST_DEL_CURRENT(finished_listeners, curr);
+ /* Also unregister it */
+ channel_listener_unregister(tmp);
+ /* ... and free it */
+ channel_listener_free(tmp);
+ } SMARTLIST_FOREACH_END(curr);
+}
+
+/**
+ * Free a list of channels for channel_free_all()
+ */
+
+static void
+channel_free_list(smartlist_t *channels, int mark_for_close)
+{
+ if (!channels) return;
+
+ SMARTLIST_FOREACH_BEGIN(channels, channel_t *, curr) {
+ /* Deregister and free it */
+ tor_assert(curr);
+ log_debug(LD_CHANNEL,
+ "Cleaning up channel %p (global ID " U64_FORMAT ") "
+ "in state %s (%d)",
+ curr, U64_PRINTF_ARG(curr->global_identifier),
+ channel_state_to_string(curr->state), curr->state);
+ /* Detach circuits early so they can find the channel */
+ if (curr->cmux) {
+ circuitmux_detach_all_circuits(curr->cmux, NULL);
+ }
+ channel_unregister(curr);
+ if (mark_for_close) {
+ if (!(curr->state == CHANNEL_STATE_CLOSING ||
+ curr->state == CHANNEL_STATE_CLOSED ||
+ curr->state == CHANNEL_STATE_ERROR)) {
+ channel_mark_for_close(curr);
+ }
+ channel_force_free(curr);
+ } else channel_free(curr);
+ } SMARTLIST_FOREACH_END(curr);
+}
+
+/**
+ * Free a list of channel listeners for channel_free_all()
+ */
+
+static void
+channel_listener_free_list(smartlist_t *listeners, int mark_for_close)
+{
+ if (!listeners) return;
+
+ SMARTLIST_FOREACH_BEGIN(listeners, channel_listener_t *, curr) {
+ /* Deregister and free it */
+ tor_assert(curr);
+ log_debug(LD_CHANNEL,
+ "Cleaning up channel listener %p (global ID " U64_FORMAT ") "
+ "in state %s (%d)",
+ curr, U64_PRINTF_ARG(curr->global_identifier),
+ channel_listener_state_to_string(curr->state), curr->state);
+ channel_listener_unregister(curr);
+ if (mark_for_close) {
+ if (!(curr->state == CHANNEL_LISTENER_STATE_CLOSING ||
+ curr->state == CHANNEL_LISTENER_STATE_CLOSED ||
+ curr->state == CHANNEL_LISTENER_STATE_ERROR)) {
+ channel_listener_mark_for_close(curr);
+ }
+ channel_listener_force_free(curr);
+ } else channel_listener_free(curr);
+ } SMARTLIST_FOREACH_END(curr);
+}
+
+/**
+ * Close all channels and free everything
+ *
+ * This gets called from tor_free_all() in main.c to clean up on exit.
+ * It will close all registered channels and free associated storage,
+ * then free the all_channels, active_channels, listening_channels and
+ * finished_channels lists and also channel_identity_map.
+ */
+
+void
+channel_free_all(void)
+{
+ log_debug(LD_CHANNEL,
+ "Shutting down channels...");
+
+ /* First, let's go for finished channels */
+ if (finished_channels) {
+ channel_free_list(finished_channels, 0);
+ smartlist_free(finished_channels);
+ finished_channels = NULL;
+ }
+
+ /* Now the finished listeners */
+ if (finished_listeners) {
+ channel_listener_free_list(finished_listeners, 0);
+ smartlist_free(finished_listeners);
+ finished_listeners = NULL;
+ }
+
+ /* Now all active channels */
+ if (active_channels) {
+ channel_free_list(active_channels, 1);
+ smartlist_free(active_channels);
+ active_channels = NULL;
+ }
+
+ /* Now all active listeners */
+ if (active_listeners) {
+ channel_listener_free_list(active_listeners, 1);
+ smartlist_free(active_listeners);
+ active_listeners = NULL;
+ }
+
+ /* Now all channels, in case any are left over */
+ if (all_channels) {
+ channel_free_list(all_channels, 1);
+ smartlist_free(all_channels);
+ all_channels = NULL;
+ }
+
+ /* Now all listeners, in case any are left over */
+ if (all_listeners) {
+ channel_listener_free_list(all_listeners, 1);
+ smartlist_free(all_listeners);
+ all_listeners = NULL;
+ }
+
+ /* Now free channel_identity_map */
+ log_debug(LD_CHANNEL,
+ "Freeing channel_identity_map");
+ /* Geez, anything still left over just won't die ... let it leak then */
+ HT_CLEAR(channel_idmap, &channel_identity_map);
+
+ log_debug(LD_CHANNEL,
+ "Done cleaning up after channels");
+}
+
+/**
+ * Connect to a given addr/port/digest
+ *
+ * This sets up a new outgoing channel; in the future if multiple
+ * channel_t subclasses are available, this is where the selection policy
+ * should go. It may also be desirable to fold port into tor_addr_t
+ * or make a new type including a tor_addr_t and port, so we have a
+ * single abstract object encapsulating all the protocol details of
+ * how to contact an OR.
+ */
+
+channel_t *
+channel_connect(const tor_addr_t *addr, uint16_t port,
+ const char *id_digest)
+{
+ return channel_tls_connect(addr, port, id_digest);
+}
+
+/**
+ * Decide which of two channels to prefer for extending a circuit
+ *
+ * This function is called while extending a circuit and returns true iff
+ * a is 'better' than b. The most important criterion here is that a
+ * canonical channel is always better than a non-canonical one, but the
+ * number of circuits and the age are used as tie-breakers.
+ *
+ * This is based on the former connection_or_is_better() of connection_or.c
+ */
+
+int
+channel_is_better(time_t now, channel_t *a, channel_t *b,
+ int forgive_new_connections)
+{
+ int a_grace, b_grace;
+ int a_is_canonical, b_is_canonical;
+ int a_has_circs, b_has_circs;
+
+ /*
+ * Do not definitively deprecate a new channel with no circuits on it
+ * until this much time has passed.
+ */
+#define NEW_CHAN_GRACE_PERIOD (15*60)
+
+ tor_assert(a);
+ tor_assert(b);
+
+ /* Check if one is canonical and the other isn't first */
+ a_is_canonical = channel_is_canonical(a);
+ b_is_canonical = channel_is_canonical(b);
+
+ if (a_is_canonical && !b_is_canonical) return 1;
+ if (!a_is_canonical && b_is_canonical) return 0;
+
+ /*
+ * Okay, if we're here they tied on canonicity. Next we check if
+ * they have any circuits, and if one does and the other doesn't,
+ * we prefer the one that does, unless we are forgiving and the
+ * one that has no circuits is in its grace period.
+ */
+
+ a_has_circs = (channel_num_circuits(a) > 0);
+ b_has_circs = (channel_num_circuits(b) > 0);
+ a_grace = (forgive_new_connections &&
+ (now < channel_when_created(a) + NEW_CHAN_GRACE_PERIOD));
+ b_grace = (forgive_new_connections &&
+ (now < channel_when_created(b) + NEW_CHAN_GRACE_PERIOD));
+
+ if (a_has_circs && !b_has_circs && !b_grace) return 1;
+ if (!a_has_circs && b_has_circs && !a_grace) return 0;
+
+ /* They tied on circuits too; just prefer whichever is newer */
+
+ if (channel_when_created(a) > channel_when_created(b)) return 1;
+ else return 0;
+}
+
+/**
+ * Get a channel to extend a circuit
+ *
+ * Pick a suitable channel to extend a circuit to given the desired digest
+ * the address we believe is correct for that digest; this tries to see
+ * if we already have one for the requested endpoint, but if there is no good
+ * channel, set *msg_out to a message describing the channel's state
+ * and our next action, and set *launch_out to a boolean indicated whether
+ * the caller should try to launch a new channel with channel_connect().
+ */
+
+channel_t *
+channel_get_for_extend(const char *digest,
+ const tor_addr_t *target_addr,
+ const char **msg_out,
+ int *launch_out)
+{
+ channel_t *chan, *best = NULL;
+ int n_inprogress_goodaddr = 0, n_old = 0;
+ int n_noncanonical = 0, n_possible = 0;
+ time_t now = approx_time();
+
+ tor_assert(msg_out);
+ tor_assert(launch_out);
+
+ chan = channel_find_by_remote_digest(digest);
+
+ /* Walk the list, unrefing the old one and refing the new at each
+ * iteration.
+ */
+ for (; chan; chan = channel_next_with_digest(chan)) {
+ tor_assert(tor_memeq(chan->identity_digest,
+ digest, DIGEST_LEN));
+
+ if (chan->state == CHANNEL_STATE_CLOSING ||
+ chan->state == CHANNEL_STATE_CLOSED ||
+ chan->state == CHANNEL_STATE_ERROR)
+ continue;
+
+ /* Never return a channel on which the other end appears to be
+ * a client. */
+ if (channel_is_client(chan)) {
+ continue;
+ }
+
+ /* Never return a non-open connection. */
+ if (chan->state != CHANNEL_STATE_OPEN) {
+ /* If the address matches, don't launch a new connection for this
+ * circuit. */
+ if (channel_matches_target_addr_for_extend(chan, target_addr))
+ ++n_inprogress_goodaddr;
+ continue;
+ }
+
+ /* Never return a connection that shouldn't be used for circs. */
+ if (channel_is_bad_for_new_circs(chan)) {
+ ++n_old;
+ continue;
+ }
+
+ /* Never return a non-canonical connection using a recent link protocol
+ * if the address is not what we wanted.
+ *
+ * The channel_is_canonical_is_reliable() function asks the lower layer
+ * if we should trust channel_is_canonical(). The below is from the
+ * comments of the old circuit_or_get_for_extend() and applies when
+ * the lower-layer transport is channel_tls_t.
+ *
+ * (For old link protocols, we can't rely on is_canonical getting
+ * set properly if we're talking to the right address, since we might
+ * have an out-of-date descriptor, and we will get no NETINFO cell to
+ * tell us about the right address.)
+ */
+ if (!channel_is_canonical(chan) &&
+ channel_is_canonical_is_reliable(chan) &&
+ !channel_matches_target_addr_for_extend(chan, target_addr)) {
+ ++n_noncanonical;
+ continue;
+ }
+
+ ++n_possible;
+
+ if (!best) {
+ best = chan; /* If we have no 'best' so far, this one is good enough. */
+ continue;
+ }
+
+ if (channel_is_better(now, chan, best, 0))
+ best = chan;
+ }
+
+ if (best) {
+ *msg_out = "Connection is fine; using it.";
+ *launch_out = 0;
+ return best;
+ } else if (n_inprogress_goodaddr) {
+ *msg_out = "Connection in progress; waiting.";
+ *launch_out = 0;
+ return NULL;
+ } else if (n_old || n_noncanonical) {
+ *msg_out = "Connections all too old, or too non-canonical. "
+ " Launching a new one.";
+ *launch_out = 1;
+ return NULL;
+ } else {
+ *msg_out = "Not connected. Connecting.";
+ *launch_out = 1;
+ return NULL;
+ }
+}
+
+/**
+ * Describe the transport subclass for a channel
+ *
+ * Invoke a method to get a string description of the lower-layer
+ * transport for this channel.
+ */
+
+const char *
+channel_describe_transport(channel_t *chan)
+{
+ tor_assert(chan);
+ tor_assert(chan->describe_transport);
+
+ return chan->describe_transport(chan);
+}
+
+/**
+ * Describe the transport subclass for a channel listener
+ *
+ * Invoke a method to get a string description of the lower-layer
+ * transport for this channel listener.
+ */
+
+const char *
+channel_listener_describe_transport(channel_listener_t *chan_l)
+{
+ tor_assert(chan_l);
+ tor_assert(chan_l->describe_transport);
+
+ return chan_l->describe_transport(chan_l);
+}
+
+/**
+ * Return the number of entries in <b>queue</b>
+ */
+static int
+chan_cell_queue_len(const chan_cell_queue_t *queue)
+{
+ int r = 0;
+ cell_queue_entry_t *cell;
+ TOR_SIMPLEQ_FOREACH(cell, queue, next)
+ ++r;
+ return r;
+}
+
+/**
+ * Dump channel statistics
+ *
+ * Dump statistics for one channel to the log
+ */
+
+void
+channel_dump_statistics(channel_t *chan, int severity)
+{
+ double avg, interval, age;
+ time_t now = time(NULL);
+ tor_addr_t remote_addr;
+ int have_remote_addr;
+ char *remote_addr_str;
+
+ tor_assert(chan);
+
+ age = (double)(now - chan->timestamp_created);
+
+ tor_log(severity, LD_GENERAL,
+ "Channel " U64_FORMAT " (at %p) with transport %s is in state "
+ "%s (%d)",
+ U64_PRINTF_ARG(chan->global_identifier), chan,
+ channel_describe_transport(chan),
+ channel_state_to_string(chan->state), chan->state);
+ tor_log(severity, LD_GENERAL,
+ " * Channel " U64_FORMAT " was created at " U64_FORMAT
+ " (" U64_FORMAT " seconds ago) "
+ "and last active at " U64_FORMAT " (" U64_FORMAT " seconds ago)",
+ U64_PRINTF_ARG(chan->global_identifier),
+ U64_PRINTF_ARG(chan->timestamp_created),
+ U64_PRINTF_ARG(now - chan->timestamp_created),
+ U64_PRINTF_ARG(chan->timestamp_active),
+ U64_PRINTF_ARG(now - chan->timestamp_active));
+
+ /* Handle digest and nickname */
+ if (!tor_digest_is_zero(chan->identity_digest)) {
+ if (chan->nickname) {
+ tor_log(severity, LD_GENERAL,
+ " * Channel " U64_FORMAT " says it is connected "
+ "to an OR with digest %s and nickname %s",
+ U64_PRINTF_ARG(chan->global_identifier),
+ hex_str(chan->identity_digest, DIGEST_LEN),
+ chan->nickname);
+ } else {
+ tor_log(severity, LD_GENERAL,
+ " * Channel " U64_FORMAT " says it is connected "
+ "to an OR with digest %s and no known nickname",
+ U64_PRINTF_ARG(chan->global_identifier),
+ hex_str(chan->identity_digest, DIGEST_LEN));
+ }
+ } else {
+ if (chan->nickname) {
+ tor_log(severity, LD_GENERAL,
+ " * Channel " U64_FORMAT " does not know the digest"
+ " of the OR it is connected to, but reports its nickname is %s",
+ U64_PRINTF_ARG(chan->global_identifier),
+ chan->nickname);
+ } else {
+ tor_log(severity, LD_GENERAL,
+ " * Channel " U64_FORMAT " does not know the digest"
+ " or the nickname of the OR it is connected to",
+ U64_PRINTF_ARG(chan->global_identifier));
+ }
+ }
+
+ /* Handle remote address and descriptions */
+ have_remote_addr = channel_get_addr_if_possible(chan, &remote_addr);
+ if (have_remote_addr) {
+ char *actual = tor_strdup(channel_get_actual_remote_descr(chan));
+ remote_addr_str = tor_dup_addr(&remote_addr);
+ tor_log(severity, LD_GENERAL,
+ " * Channel " U64_FORMAT " says its remote address"
+ " is %s, and gives a canonical description of \"%s\" and an "
+ "actual description of \"%s\"",
+ U64_PRINTF_ARG(chan->global_identifier),
+ remote_addr_str,
+ channel_get_canonical_remote_descr(chan),
+ actual);
+ tor_free(remote_addr_str);
+ tor_free(actual);
+ } else {
+ char *actual = tor_strdup(channel_get_actual_remote_descr(chan));
+ tor_log(severity, LD_GENERAL,
+ " * Channel " U64_FORMAT " does not know its remote "
+ "address, but gives a canonical description of \"%s\" and an "
+ "actual description of \"%s\"",
+ U64_PRINTF_ARG(chan->global_identifier),
+ channel_get_canonical_remote_descr(chan),
+ actual);
+ tor_free(actual);
+ }
+
+ /* Handle marks */
+ tor_log(severity, LD_GENERAL,
+ " * Channel " U64_FORMAT " has these marks: %s %s %s "
+ "%s %s %s",
+ U64_PRINTF_ARG(chan->global_identifier),
+ channel_is_bad_for_new_circs(chan) ?
+ "bad_for_new_circs" : "!bad_for_new_circs",
+ channel_is_canonical(chan) ?
+ "canonical" : "!canonical",
+ channel_is_canonical_is_reliable(chan) ?
+ "is_canonical_is_reliable" :
+ "!is_canonical_is_reliable",
+ channel_is_client(chan) ?
+ "client" : "!client",
+ channel_is_local(chan) ?
+ "local" : "!local",
+ channel_is_incoming(chan) ?
+ "incoming" : "outgoing");
+
+ /* Describe queues */
+ tor_log(severity, LD_GENERAL,
+ " * Channel " U64_FORMAT " has %d queued incoming cells"
+ " and %d queued outgoing cells",
+ U64_PRINTF_ARG(chan->global_identifier),
+ chan_cell_queue_len(&chan->incoming_queue),
+ chan_cell_queue_len(&chan->outgoing_queue));
+
+ /* Describe circuits */
+ tor_log(severity, LD_GENERAL,
+ " * Channel " U64_FORMAT " has %d active circuits out of"
+ " %d in total",
+ U64_PRINTF_ARG(chan->global_identifier),
+ (chan->cmux != NULL) ?
+ circuitmux_num_active_circuits(chan->cmux) : 0,
+ (chan->cmux != NULL) ?
+ circuitmux_num_circuits(chan->cmux) : 0);
+
+ /* Describe timestamps */
+ tor_log(severity, LD_GENERAL,
+ " * Channel " U64_FORMAT " was last used by a "
+ "client at " U64_FORMAT " (" U64_FORMAT " seconds ago)",
+ U64_PRINTF_ARG(chan->global_identifier),
+ U64_PRINTF_ARG(chan->timestamp_client),
+ U64_PRINTF_ARG(now - chan->timestamp_client));
+ tor_log(severity, LD_GENERAL,
+ " * Channel " U64_FORMAT " was last drained at "
+ U64_FORMAT " (" U64_FORMAT " seconds ago)",
+ U64_PRINTF_ARG(chan->global_identifier),
+ U64_PRINTF_ARG(chan->timestamp_drained),
+ U64_PRINTF_ARG(now - chan->timestamp_drained));
+ tor_log(severity, LD_GENERAL,
+ " * Channel " U64_FORMAT " last received a cell "
+ "at " U64_FORMAT " (" U64_FORMAT " seconds ago)",
+ U64_PRINTF_ARG(chan->global_identifier),
+ U64_PRINTF_ARG(chan->timestamp_recv),
+ U64_PRINTF_ARG(now - chan->timestamp_recv));
+ tor_log(severity, LD_GENERAL,
+ " * Channel " U64_FORMAT " last trasmitted a cell "
+ "at " U64_FORMAT " (" U64_FORMAT " seconds ago)",
+ U64_PRINTF_ARG(chan->global_identifier),
+ U64_PRINTF_ARG(chan->timestamp_xmit),
+ U64_PRINTF_ARG(now - chan->timestamp_xmit));
+
+ /* Describe counters and rates */
+ tor_log(severity, LD_GENERAL,
+ " * Channel " U64_FORMAT " has received "
+ U64_FORMAT " cells and transmitted " U64_FORMAT,
+ U64_PRINTF_ARG(chan->global_identifier),
+ U64_PRINTF_ARG(chan->n_cells_recved),
+ U64_PRINTF_ARG(chan->n_cells_xmitted));
+ if (now > chan->timestamp_created &&
+ chan->timestamp_created > 0) {
+ if (chan->n_cells_recved > 0) {
+ avg = (double)(chan->n_cells_recved) / age;
+ if (avg >= 1.0) {
+ tor_log(severity, LD_GENERAL,
+ " * Channel " U64_FORMAT " has averaged %f "
+ "cells received per second",
+ U64_PRINTF_ARG(chan->global_identifier), avg);
+ } else if (avg >= 0.0) {
+ interval = 1.0 / avg;
+ tor_log(severity, LD_GENERAL,
+ " * Channel " U64_FORMAT " has averaged %f "
+ "seconds between received cells",
+ U64_PRINTF_ARG(chan->global_identifier), interval);
+ }
+ }
+ if (chan->n_cells_xmitted > 0) {
+ avg = (double)(chan->n_cells_xmitted) / age;
+ if (avg >= 1.0) {
+ tor_log(severity, LD_GENERAL,
+ " * Channel " U64_FORMAT " has averaged %f "
+ "cells transmitted per second",
+ U64_PRINTF_ARG(chan->global_identifier), avg);
+ } else if (avg >= 0.0) {
+ interval = 1.0 / avg;
+ tor_log(severity, LD_GENERAL,
+ " * Channel " U64_FORMAT " has averaged %f "
+ "seconds between transmitted cells",
+ U64_PRINTF_ARG(chan->global_identifier), interval);
+ }
+ }
+ }
+
+ /* Dump anything the lower layer has to say */
+ channel_dump_transport_statistics(chan, severity);
+}
+
+/**
+ * Dump channel listener statistics
+ *
+ * Dump statistics for one channel listener to the log
+ */
+
+void
+channel_listener_dump_statistics(channel_listener_t *chan_l, int severity)
+{
+ double avg, interval, age;
+ time_t now = time(NULL);
+
+ tor_assert(chan_l);
+
+ age = (double)(now - chan_l->timestamp_created);
+
+ tor_log(severity, LD_GENERAL,
+ "Channel listener " U64_FORMAT " (at %p) with transport %s is in "
+ "state %s (%d)",
+ U64_PRINTF_ARG(chan_l->global_identifier), chan_l,
+ channel_listener_describe_transport(chan_l),
+ channel_listener_state_to_string(chan_l->state), chan_l->state);
+ tor_log(severity, LD_GENERAL,
+ " * Channel listener " U64_FORMAT " was created at " U64_FORMAT
+ " (" U64_FORMAT " seconds ago) "
+ "and last active at " U64_FORMAT " (" U64_FORMAT " seconds ago)",
+ U64_PRINTF_ARG(chan_l->global_identifier),
+ U64_PRINTF_ARG(chan_l->timestamp_created),
+ U64_PRINTF_ARG(now - chan_l->timestamp_created),
+ U64_PRINTF_ARG(chan_l->timestamp_active),
+ U64_PRINTF_ARG(now - chan_l->timestamp_active));
+
+ tor_log(severity, LD_GENERAL,
+ " * Channel listener " U64_FORMAT " last accepted an incoming "
+ "channel at " U64_FORMAT " (" U64_FORMAT " seconds ago) "
+ "and has accepted " U64_FORMAT " channels in total",
+ U64_PRINTF_ARG(chan_l->global_identifier),
+ U64_PRINTF_ARG(chan_l->timestamp_accepted),
+ U64_PRINTF_ARG(now - chan_l->timestamp_accepted),
+ U64_PRINTF_ARG(chan_l->n_accepted));
+
+ /*
+ * If it's sensible to do so, get the rate of incoming channels on this
+ * listener
+ */
+ if (now > chan_l->timestamp_created &&
+ chan_l->timestamp_created > 0 &&
+ chan_l->n_accepted > 0) {
+ avg = (double)(chan_l->n_accepted) / age;
+ if (avg >= 1.0) {
+ tor_log(severity, LD_GENERAL,
+ " * Channel listener " U64_FORMAT " has averaged %f incoming "
+ "channels per second",
+ U64_PRINTF_ARG(chan_l->global_identifier), avg);
+ } else if (avg >= 0.0) {
+ interval = 1.0 / avg;
+ tor_log(severity, LD_GENERAL,
+ " * Channel listener " U64_FORMAT " has averaged %f seconds "
+ "between incoming channels",
+ U64_PRINTF_ARG(chan_l->global_identifier), interval);
+ }
+ }
+
+ /* Dump anything the lower layer has to say */
+ channel_listener_dump_transport_statistics(chan_l, severity);
+}
+
+/**
+ * Invoke transport-specific stats dump for channel
+ *
+ * If there is a lower-layer statistics dump method, invoke it
+ */
+
+void
+channel_dump_transport_statistics(channel_t *chan, int severity)
+{
+ tor_assert(chan);
+
+ if (chan->dumpstats) chan->dumpstats(chan, severity);
+}
+
+/**
+ * Invoke transport-specific stats dump for channel listener
+ *
+ * If there is a lower-layer statistics dump method, invoke it
+ */
+
+void
+channel_listener_dump_transport_statistics(channel_listener_t *chan_l,
+ int severity)
+{
+ tor_assert(chan_l);
+
+ if (chan_l->dumpstats) chan_l->dumpstats(chan_l, severity);
+}
+
+/**
+ * Return text description of the remote endpoint
+ *
+ * This function return a test provided by the lower layer of the remote
+ * endpoint for this channel; it should specify the actual address connected
+ * to/from.
+ *
+ * Subsequent calls to channel_get_{actual,canonical}_remote_{address,descr}
+ * may invalidate the return value from this function.
+ */
+const char *
+channel_get_actual_remote_descr(channel_t *chan)
+{
+ tor_assert(chan);
+ tor_assert(chan->get_remote_descr);
+
+ /* Param 1 indicates the actual description */
+ return chan->get_remote_descr(chan, GRD_FLAG_ORIGINAL);
+}
+
+/**
+ * Return the text address of the remote endpoint.
+ *
+ * Subsequent calls to channel_get_{actual,canonical}_remote_{address,descr}
+ * may invalidate the return value from this function.
+ */
+const char *
+channel_get_actual_remote_address(channel_t *chan)
+{
+ /* Param 1 indicates the actual description */
+ return chan->get_remote_descr(chan, GRD_FLAG_ORIGINAL|GRD_FLAG_ADDR_ONLY);
+}
+
+/**
+ * Return text description of the remote endpoint canonical address
+ *
+ * This function return a test provided by the lower layer of the remote
+ * endpoint for this channel; it should use the known canonical address for
+ * this OR's identity digest if possible.
+ *
+ * Subsequent calls to channel_get_{actual,canonical}_remote_{address,descr}
+ * may invalidate the return value from this function.
+ */
+const char *
+channel_get_canonical_remote_descr(channel_t *chan)
+{
+ tor_assert(chan);
+ tor_assert(chan->get_remote_descr);
+
+ /* Param 0 indicates the canonicalized description */
+ return chan->get_remote_descr(chan, 0);
+}
+
+/**
+ * Get remote address if possible.
+ *
+ * Write the remote address out to a tor_addr_t if the underlying transport
+ * supports this operation, and return 1. Return 0 if the underlying transport
+ * doesn't let us do this.
+ */
+int
+channel_get_addr_if_possible(channel_t *chan, tor_addr_t *addr_out)
+{
+ tor_assert(chan);
+ tor_assert(addr_out);
+
+ if (chan->get_remote_addr)
+ return chan->get_remote_addr(chan, addr_out);
+ /* Else no support, method not implemented */
+ else return 0;
+}
+
+/**
+ * Check if there are outgoing queue writes on this channel
+ *
+ * Indicate if either we have queued cells, or if not, whether the underlying
+ * lower-layer transport thinks it has an output queue.
+ */
+
+int
+channel_has_queued_writes(channel_t *chan)
+{
+ int has_writes = 0;
+
+ tor_assert(chan);
+ tor_assert(chan->has_queued_writes);
+
+ if (! TOR_SIMPLEQ_EMPTY(&chan->outgoing_queue)) {
+ has_writes = 1;
+ } else {
+ /* Check with the lower layer */
+ has_writes = chan->has_queued_writes(chan);
+ }
+
+ return has_writes;
+}
+
+/**
+ * Check the is_bad_for_new_circs flag
+ *
+ * This function returns the is_bad_for_new_circs flag of the specified
+ * channel.
+ */
+
+int
+channel_is_bad_for_new_circs(channel_t *chan)
+{
+ tor_assert(chan);
+
+ return chan->is_bad_for_new_circs;
+}
+
+/**
+ * Mark a channel as bad for new circuits
+ *
+ * Set the is_bad_for_new_circs_flag on chan.
+ */
+
+void
+channel_mark_bad_for_new_circs(channel_t *chan)
+{
+ tor_assert(chan);
+
+ chan->is_bad_for_new_circs = 1;
+}
+
+/**
+ * Get the client flag
+ *
+ * This returns the client flag of a channel, which will be set if
+ * command_process_create_cell() in command.c thinks this is a connection
+ * from a client.
+ */
+
+int
+channel_is_client(channel_t *chan)
+{
+ tor_assert(chan);
+
+ return chan->is_client;
+}
+
+/**
+ * Set the client flag
+ *
+ * Mark a channel as being from a client
+ */
+
+void
+channel_mark_client(channel_t *chan)
+{
+ tor_assert(chan);
+
+ chan->is_client = 1;
+}
+
+/**
+ * Get the canonical flag for a channel
+ *
+ * This returns the is_canonical for a channel; this flag is determined by
+ * the lower layer and can't be set in a transport-independent way.
+ */
+
+int
+channel_is_canonical(channel_t *chan)
+{
+ tor_assert(chan);
+ tor_assert(chan->is_canonical);
+
+ return chan->is_canonical(chan, 0);
+}
+
+/**
+ * Test if the canonical flag is reliable
+ *
+ * This function asks if the lower layer thinks it's safe to trust the
+ * result of channel_is_canonical()
+ */
+
+int
+channel_is_canonical_is_reliable(channel_t *chan)
+{
+ tor_assert(chan);
+ tor_assert(chan->is_canonical);
+
+ return chan->is_canonical(chan, 1);
+}
+
+/**
+ * Test incoming flag
+ *
+ * This function gets the incoming flag; this is set when a listener spawns
+ * a channel. If this returns true the channel was remotely initiated.
+ */
+
+int
+channel_is_incoming(channel_t *chan)
+{
+ tor_assert(chan);
+
+ return chan->is_incoming;
+}
+
+/**
+ * Set the incoming flag
+ *
+ * This function is called when a channel arrives on a listening channel
+ * to mark it as incoming.
+ */
+
+void
+channel_mark_incoming(channel_t *chan)
+{
+ tor_assert(chan);
+
+ chan->is_incoming = 1;
+}
+
+/**
+ * Test local flag
+ *
+ * This function gets the local flag; the lower layer should set this when
+ * setting up the channel if is_local_addr() is true for all of the
+ * destinations it will communicate with on behalf of this channel. It's
+ * used to decide whether to declare the network reachable when seeing incoming
+ * traffic on the channel.
+ */
+
+int
+channel_is_local(channel_t *chan)
+{
+ tor_assert(chan);
+
+ return chan->is_local;
+}
+
+/**
+ * Set the local flag
+ *
+ * This internal-only function should be called by the lower layer if the
+ * channel is to a local address. See channel_is_local() above or the
+ * description of the is_local bit in channel.h
+ */
+
+void
+channel_mark_local(channel_t *chan)
+{
+ tor_assert(chan);
+
+ chan->is_local = 1;
+}
+
+/**
+ * Test outgoing flag
+ *
+ * This function gets the outgoing flag; this is the inverse of the incoming
+ * bit set when a listener spawns a channel. If this returns true the channel
+ * was locally initiated.
+ */
+
+int
+channel_is_outgoing(channel_t *chan)
+{
+ tor_assert(chan);
+
+ return !(chan->is_incoming);
+}
+
+/**
+ * Mark a channel as outgoing
+ *
+ * This function clears the incoming flag and thus marks a channel as
+ * outgoing.
+ */
+
+void
+channel_mark_outgoing(channel_t *chan)
+{
+ tor_assert(chan);
+
+ chan->is_incoming = 0;
+}
+
+/*********************
+ * Timestamp updates *
+ ********************/
+
+/**
+ * Update the created timestamp for a channel
+ *
+ * This updates the channel's created timestamp and should only be called
+ * from channel_init().
+ */
+
+void
+channel_timestamp_created(channel_t *chan)
+{
+ time_t now = time(NULL);
+
+ tor_assert(chan);
+
+ chan->timestamp_created = now;
+}
+
+/**
+ * Update the created timestamp for a channel listener
+ *
+ * This updates the channel listener's created timestamp and should only be
+ * called from channel_init_listener().
+ */
+
+void
+channel_listener_timestamp_created(channel_listener_t *chan_l)
+{
+ time_t now = time(NULL);
+
+ tor_assert(chan_l);
+
+ chan_l->timestamp_created = now;
+}
+
+/**
+ * Update the last active timestamp for a channel
+ *
+ * This function updates the channel's last active timestamp; it should be
+ * called by the lower layer whenever there is activity on the channel which
+ * does not lead to a cell being transmitted or received; the active timestamp
+ * is also updated from channel_timestamp_recv() and channel_timestamp_xmit(),
+ * but it should be updated for things like the v3 handshake and stuff that
+ * produce activity only visible to the lower layer.
+ */
+
+void
+channel_timestamp_active(channel_t *chan)
+{
+ time_t now = time(NULL);
+
+ tor_assert(chan);
+
+ chan->timestamp_active = now;
+}
+
+/**
+ * Update the last active timestamp for a channel listener
+ */
+
+void
+channel_listener_timestamp_active(channel_listener_t *chan_l)
+{
+ time_t now = time(NULL);
+
+ tor_assert(chan_l);
+
+ chan_l->timestamp_active = now;
+}
+
+/**
+ * Update the last accepted timestamp.
+ *
+ * This function updates the channel listener's last accepted timestamp; it
+ * should be called whenever a new incoming channel is accepted on a
+ * listener.
+ */
+
+void
+channel_listener_timestamp_accepted(channel_listener_t *chan_l)
+{
+ time_t now = time(NULL);
+
+ tor_assert(chan_l);
+
+ chan_l->timestamp_active = now;
+ chan_l->timestamp_accepted = now;
+}
+
+/**
+ * Update client timestamp
+ *
+ * This function is called by relay.c to timestamp a channel that appears to
+ * be used as a client.
+ */
+
+void
+channel_timestamp_client(channel_t *chan)
+{
+ time_t now = time(NULL);
+
+ tor_assert(chan);
+
+ chan->timestamp_client = now;
+}
+
+/**
+ * Update the last drained timestamp
+ *
+ * This is called whenever we transmit a cell which leaves the outgoing cell
+ * queue completely empty. It also updates the xmit time and the active time.
+ */
+
+void
+channel_timestamp_drained(channel_t *chan)
+{
+ time_t now = time(NULL);
+
+ tor_assert(chan);
+
+ chan->timestamp_active = now;
+ chan->timestamp_drained = now;
+ chan->timestamp_xmit = now;
+}
+
+/**
+ * Update the recv timestamp
+ *
+ * This is called whenever we get an incoming cell from the lower layer.
+ * This also updates the active timestamp.
+ */
+
+void
+channel_timestamp_recv(channel_t *chan)
+{
+ time_t now = time(NULL);
+
+ tor_assert(chan);
+
+ chan->timestamp_active = now;
+ chan->timestamp_recv = now;
+}
+
+/**
+ * Update the xmit timestamp
+ * This is called whenever we pass an outgoing cell to the lower layer. This
+ * also updates the active timestamp.
+ */
+
+void
+channel_timestamp_xmit(channel_t *chan)
+{
+ time_t now = time(NULL);
+
+ tor_assert(chan);
+
+ chan->timestamp_active = now;
+ chan->timestamp_xmit = now;
+}
+
+/***************************************************************
+ * Timestamp queries - see above for definitions of timestamps *
+ **************************************************************/
+
+/**
+ * Query created timestamp for a channel
+ */
+
+time_t
+channel_when_created(channel_t *chan)
+{
+ tor_assert(chan);
+
+ return chan->timestamp_created;
+}
+
+/**
+ * Query created timestamp for a channel listener
+ */
+
+time_t
+channel_listener_when_created(channel_listener_t *chan_l)
+{
+ tor_assert(chan_l);
+
+ return chan_l->timestamp_created;
+}
+
+/**
+ * Query last active timestamp for a channel
+ */
+
+time_t
+channel_when_last_active(channel_t *chan)
+{
+ tor_assert(chan);
+
+ return chan->timestamp_active;
+}
+
+/**
+ * Query last active timestamp for a channel listener
+ */
+
+time_t
+channel_listener_when_last_active(channel_listener_t *chan_l)
+{
+ tor_assert(chan_l);
+
+ return chan_l->timestamp_active;
+}
+
+/**
+ * Query last accepted timestamp for a channel listener
+ */
+
+time_t
+channel_listener_when_last_accepted(channel_listener_t *chan_l)
+{
+ tor_assert(chan_l);
+
+ return chan_l->timestamp_accepted;
+}
+
+/**
+ * Query client timestamp
+ */
+
+time_t
+channel_when_last_client(channel_t *chan)
+{
+ tor_assert(chan);
+
+ return chan->timestamp_client;
+}
+
+/**
+ * Query drained timestamp
+ */
+
+time_t
+channel_when_last_drained(channel_t *chan)
+{
+ tor_assert(chan);
+
+ return chan->timestamp_drained;
+}
+
+/**
+ * Query recv timestamp
+ */
+
+time_t
+channel_when_last_recv(channel_t *chan)
+{
+ tor_assert(chan);
+
+ return chan->timestamp_recv;
+}
+
+/**
+ * Query xmit timestamp
+ */
+
+time_t
+channel_when_last_xmit(channel_t *chan)
+{
+ tor_assert(chan);
+
+ return chan->timestamp_xmit;
+}
+
+/**
+ * Query accepted counter
+ */
+
+uint64_t
+channel_listener_count_accepted(channel_listener_t *chan_l)
+{
+ tor_assert(chan_l);
+
+ return chan_l->n_accepted;
+}
+
+/**
+ * Query received cell counter
+ */
+
+uint64_t
+channel_count_recved(channel_t *chan)
+{
+ tor_assert(chan);
+
+ return chan->n_cells_recved;
+}
+
+/**
+ * Query transmitted cell counter
+ */
+
+uint64_t
+channel_count_xmitted(channel_t *chan)
+{
+ tor_assert(chan);
+
+ return chan->n_cells_xmitted;
+}
+
+/**
+ * Check if a channel matches an extend_info_t
+ *
+ * This function calls the lower layer and asks if this channel matches a
+ * given extend_info_t.
+ */
+
+int
+channel_matches_extend_info(channel_t *chan, extend_info_t *extend_info)
+{
+ tor_assert(chan);
+ tor_assert(chan->matches_extend_info);
+ tor_assert(extend_info);
+
+ return chan->matches_extend_info(chan, extend_info);
+}
+
+/**
+ * Check if a channel matches a given target address; return true iff we do.
+ *
+ * This function calls into the lower layer and asks if this channel thinks
+ * it matches a given target address for circuit extension purposes.
+ */
+
+int
+channel_matches_target_addr_for_extend(channel_t *chan,
+ const tor_addr_t *target)
+{
+ tor_assert(chan);
+ tor_assert(chan->matches_target);
+ tor_assert(target);
+
+ return chan->matches_target(chan, target);
+}
+
+/**
+ * Return the total number of circuits used by a channel
+ *
+ * @param chan Channel to query
+ * @return Number of circuits using this as n_chan or p_chan
+ */
+
+unsigned int
+channel_num_circuits(channel_t *chan)
+{
+ tor_assert(chan);
+
+ return chan->num_n_circuits +
+ chan->num_p_circuits;
+}
+
+/**
+ * Set up circuit ID generation
+ *
+ * This is called when setting up a channel and replaces the old
+ * connection_or_set_circid_type()
+ */
+void
+channel_set_circid_type(channel_t *chan,
+ crypto_pk_t *identity_rcvd,
+ int consider_identity)
+{
+ int started_here;
+ crypto_pk_t *our_identity;
+
+ tor_assert(chan);
+
+ started_here = channel_is_outgoing(chan);
+
+ if (! consider_identity) {
+ if (started_here)
+ chan->circ_id_type = CIRC_ID_TYPE_HIGHER;
+ else
+ chan->circ_id_type = CIRC_ID_TYPE_LOWER;
+ return;
+ }
+
+ our_identity = started_here ?
+ get_tlsclient_identity_key() : get_server_identity_key();
+
+ if (identity_rcvd) {
+ if (crypto_pk_cmp_keys(our_identity, identity_rcvd) < 0) {
+ chan->circ_id_type = CIRC_ID_TYPE_LOWER;
+ } else {
+ chan->circ_id_type = CIRC_ID_TYPE_HIGHER;
+ }
+ } else {
+ chan->circ_id_type = CIRC_ID_TYPE_NEITHER;
+ }
+}
+
diff --git a/src/or/channel.h b/src/or/channel.h
new file mode 100644
index 000000000..bd9a02f32
--- /dev/null
+++ b/src/or/channel.h
@@ -0,0 +1,488 @@
+/* * Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file channel.h
+ * \brief Header file for channel.c
+ **/
+
+#ifndef TOR_CHANNEL_H
+#define TOR_CHANNEL_H
+
+#include "or.h"
+#include "circuitmux.h"
+
+/* Channel handler function pointer typedefs */
+typedef void (*channel_listener_fn_ptr)(channel_listener_t *, channel_t *);
+typedef void (*channel_cell_handler_fn_ptr)(channel_t *, cell_t *);
+typedef void (*channel_var_cell_handler_fn_ptr)(channel_t *, var_cell_t *);
+
+struct cell_queue_entry_s;
+TOR_SIMPLEQ_HEAD(chan_cell_queue, cell_queue_entry_s) incoming_queue;
+typedef struct chan_cell_queue chan_cell_queue_t;
+
+/**
+ * Channel struct; see the channel_t typedef in or.h. A channel is an
+ * abstract interface for the OR-to-OR connection, similar to connection_or_t,
+ * but without the strong coupling to the underlying TLS implementation. They
+ * are constructed by calling a protocol-specific function to open a channel
+ * to a particular node, and once constructed support the abstract operations
+ * defined below.
+ */
+
+struct channel_s {
+ /** Magic number for type-checking cast macros */
+ uint32_t magic;
+
+ /** Current channel state */
+ channel_state_t state;
+
+ /** Globally unique ID number for a channel over the lifetime of a Tor
+ * process.
+ */
+ uint64_t global_identifier;
+
+ /** Should we expect to see this channel in the channel lists? */
+ unsigned char registered:1;
+
+ /** has this channel ever been open? */
+ unsigned int has_been_open:1;
+
+ /** Why did we close?
+ */
+ enum {
+ CHANNEL_NOT_CLOSING = 0,
+ CHANNEL_CLOSE_REQUESTED,
+ CHANNEL_CLOSE_FROM_BELOW,
+ CHANNEL_CLOSE_FOR_ERROR
+ } reason_for_closing;
+
+ /** Timestamps for both cell channels and listeners */
+ time_t timestamp_created; /* Channel created */
+ time_t timestamp_active; /* Any activity */
+
+ /* Methods implemented by the lower layer */
+
+ /** Free a channel */
+ void (*free)(channel_t *);
+ /** Close an open channel */
+ void (*close)(channel_t *);
+ /** Describe the transport subclass for this channel */
+ const char * (*describe_transport)(channel_t *);
+ /** Optional method to dump transport-specific statistics on the channel */
+ void (*dumpstats)(channel_t *, int);
+
+ /** Registered handlers for incoming cells */
+ channel_cell_handler_fn_ptr cell_handler;
+ channel_var_cell_handler_fn_ptr var_cell_handler;
+
+ /* Methods implemented by the lower layer */
+
+ /**
+ * Ask the underlying transport what the remote endpoint address is, in
+ * a tor_addr_t. This is optional and subclasses may leave this NULL.
+ * If they implement it, they should write the address out to the
+ * provided tor_addr_t *, and return 1 if successful or 0 if no address
+ * available.
+ */
+ int (*get_remote_addr)(channel_t *, tor_addr_t *);
+ int (*get_transport_name)(channel_t *chan, char **transport_out);
+
+#define GRD_FLAG_ORIGINAL 1
+#define GRD_FLAG_ADDR_ONLY 2
+ /**
+ * Get a text description of the remote endpoint; canonicalized if the flag
+ * GRD_FLAG_ORIGINAL is not set, or the one we originally connected
+ * to/received from if it is. If GRD_FLAG_ADDR_ONLY is set, we return only
+ * the original address.
+ */
+ const char * (*get_remote_descr)(channel_t *, int);
+ /** Check if the lower layer has queued writes */
+ int (*has_queued_writes)(channel_t *);
+ /**
+ * If the second param is zero, ask the lower layer if this is
+ * 'canonical', for a transport-specific definition of canonical; if
+ * it is 1, ask if the answer to the preceding query is safe to rely
+ * on.
+ */
+ int (*is_canonical)(channel_t *, int);
+ /** Check if this channel matches a specified extend_info_t */
+ int (*matches_extend_info)(channel_t *, extend_info_t *);
+ /** Check if this channel matches a target address when extending */
+ int (*matches_target)(channel_t *, const tor_addr_t *);
+ /** Write a cell to an open channel */
+ int (*write_cell)(channel_t *, cell_t *);
+ /** Write a packed cell to an open channel */
+ int (*write_packed_cell)(channel_t *, packed_cell_t *);
+ /** Write a variable-length cell to an open channel */
+ int (*write_var_cell)(channel_t *, var_cell_t *);
+
+ /**
+ * Hash of the public RSA key for the other side's identity key, or
+ * zeroes if the other side hasn't shown us a valid identity key.
+ */
+ char identity_digest[DIGEST_LEN];
+ /** Nickname of the OR on the other side, or NULL if none. */
+ char *nickname;
+
+ /**
+ * Linked list of channels with the same identity digest, for the
+ * digest->channel map
+ */
+ TOR_LIST_ENTRY(channel_s) next_with_same_id;
+
+ /** List of incoming cells to handle */
+ chan_cell_queue_t incoming_queue;
+
+ /** List of queued outgoing cells */
+ chan_cell_queue_t outgoing_queue;
+
+ /** Circuit mux for circuits sending on this channel */
+ circuitmux_t *cmux;
+
+ /** Circuit ID generation stuff for use by circuitbuild.c */
+
+ /**
+ * When we send CREATE cells along this connection, which half of the
+ * space should we use?
+ */
+ circ_id_type_bitfield_t circ_id_type:2;
+ /** DOCDOC*/
+ unsigned wide_circ_ids:1;
+
+ /** For how many circuits are we n_chan? What about p_chan? */
+ unsigned int num_n_circuits, num_p_circuits;
+
+ /**
+ * True iff this channel shouldn't get any new circs attached to it,
+ * because the connection is too old, or because there's a better one.
+ * More generally, this flag is used to note an unhealthy connection;
+ * for example, if a bad connection fails we shouldn't assume that the
+ * router itself has a problem.
+ */
+ unsigned int is_bad_for_new_circs:1;
+
+ /** True iff we have decided that the other end of this connection
+ * is a client. Channels with this flag set should never be used
+ * to satisfy an EXTEND request. */
+ unsigned int is_client:1;
+
+ /** Set if the channel was initiated remotely (came from a listener) */
+ unsigned int is_incoming:1;
+
+ /** Set by lower layer if this is local; i.e., everything it communicates
+ * with for this channel returns true for is_local_addr(). This is used
+ * to decide whether to declare reachability when we receive something on
+ * this channel in circuitbuild.c
+ */
+ unsigned int is_local:1;
+
+ /** Have we logged a warning about circID exhaustion on this channel?
+ * If so, when? */
+ ratelim_t last_warned_circ_ids_exhausted;
+
+ /** Channel timestamps for cell channels */
+ time_t timestamp_client; /* Client used this, according to relay.c */
+ time_t timestamp_drained; /* Output queue empty */
+ time_t timestamp_recv; /* Cell received from lower layer */
+ time_t timestamp_xmit; /* Cell sent to lower layer */
+
+ /* Timestamp for relay.c */
+ time_t timestamp_last_added_nonpadding;
+
+ /** Unique ID for measuring direct network status requests;vtunneled ones
+ * come over a circuit_t, which has a dirreq_id field as well, but is a
+ * distinct namespace. */
+ uint64_t dirreq_id;
+
+ /** Channel counters for cell channels */
+ uint64_t n_cells_recved;
+ uint64_t n_cells_xmitted;
+};
+
+struct channel_listener_s {
+ /* Current channel listener state */
+ channel_listener_state_t state;
+
+ /* Globally unique ID number for a channel over the lifetime of a Tor
+ * process.
+ */
+ uint64_t global_identifier;
+
+ /** Should we expect to see this channel in the channel lists? */
+ unsigned char registered:1;
+
+ /** Why did we close?
+ */
+ enum {
+ CHANNEL_LISTENER_NOT_CLOSING = 0,
+ CHANNEL_LISTENER_CLOSE_REQUESTED,
+ CHANNEL_LISTENER_CLOSE_FROM_BELOW,
+ CHANNEL_LISTENER_CLOSE_FOR_ERROR
+ } reason_for_closing;
+
+ /** Timestamps for both cell channels and listeners */
+ time_t timestamp_created; /* Channel created */
+ time_t timestamp_active; /* Any activity */
+
+ /* Methods implemented by the lower layer */
+
+ /** Free a channel */
+ void (*free)(channel_listener_t *);
+ /** Close an open channel */
+ void (*close)(channel_listener_t *);
+ /** Describe the transport subclass for this channel */
+ const char * (*describe_transport)(channel_listener_t *);
+ /** Optional method to dump transport-specific statistics on the channel */
+ void (*dumpstats)(channel_listener_t *, int);
+
+ /** Registered listen handler to call on incoming connection */
+ channel_listener_fn_ptr listener;
+
+ /** List of pending incoming connections */
+ smartlist_t *incoming_list;
+
+ /** Timestamps for listeners */
+ time_t timestamp_accepted;
+
+ /** Counters for listeners */
+ uint64_t n_accepted;
+};
+
+/* Channel state manipulations */
+
+int channel_state_is_valid(channel_state_t state);
+int channel_listener_state_is_valid(channel_listener_state_t state);
+
+int channel_state_can_transition(channel_state_t from, channel_state_t to);
+int channel_listener_state_can_transition(channel_listener_state_t from,
+ channel_listener_state_t to);
+
+const char * channel_state_to_string(channel_state_t state);
+const char *
+channel_listener_state_to_string(channel_listener_state_t state);
+
+/* Abstract channel operations */
+
+void channel_mark_for_close(channel_t *chan);
+void channel_write_cell(channel_t *chan, cell_t *cell);
+void channel_write_packed_cell(channel_t *chan, packed_cell_t *cell);
+void channel_write_var_cell(channel_t *chan, var_cell_t *cell);
+
+void channel_listener_mark_for_close(channel_listener_t *chan_l);
+
+/* Channel callback registrations */
+
+/* Listener callback */
+channel_listener_fn_ptr
+channel_listener_get_listener_fn(channel_listener_t *chan);
+
+void channel_listener_set_listener_fn(channel_listener_t *chan,
+ channel_listener_fn_ptr listener);
+
+/* Incoming cell callbacks */
+channel_cell_handler_fn_ptr channel_get_cell_handler(channel_t *chan);
+
+channel_var_cell_handler_fn_ptr
+channel_get_var_cell_handler(channel_t *chan);
+
+void channel_set_cell_handlers(channel_t *chan,
+ channel_cell_handler_fn_ptr cell_handler,
+ channel_var_cell_handler_fn_ptr
+ var_cell_handler);
+
+/* Clean up closed channels and channel listeners periodically; these are
+ * called from run_scheduled_events() in main.c.
+ */
+void channel_run_cleanup(void);
+void channel_listener_run_cleanup(void);
+
+/* Close all channels and deallocate everything */
+void channel_free_all(void);
+
+/* Dump some statistics in the log */
+void channel_dumpstats(int severity);
+void channel_listener_dumpstats(int severity);
+
+/* Set the cmux policy on all active channels */
+void channel_set_cmux_policy_everywhere(circuitmux_policy_t *pol);
+
+#ifdef TOR_CHANNEL_INTERNAL_
+
+/* Channel operations for subclasses and internal use only */
+
+/* Initialize a newly allocated channel - do this first in subclass
+ * constructors.
+ */
+
+void channel_init(channel_t *chan);
+void channel_init_listener(channel_listener_t *chan);
+
+/* Channel registration/unregistration */
+void channel_register(channel_t *chan);
+void channel_unregister(channel_t *chan);
+
+/* Channel listener registration/unregistration */
+void channel_listener_register(channel_listener_t *chan_l);
+void channel_listener_unregister(channel_listener_t *chan_l);
+
+/* Close from below */
+void channel_close_from_lower_layer(channel_t *chan);
+void channel_close_for_error(channel_t *chan);
+void channel_closed(channel_t *chan);
+
+void channel_listener_close_from_lower_layer(channel_listener_t *chan_l);
+void channel_listener_close_for_error(channel_listener_t *chan_l);
+void channel_listener_closed(channel_listener_t *chan_l);
+
+/* Free a channel */
+void channel_free(channel_t *chan);
+void channel_listener_free(channel_listener_t *chan_l);
+
+/* State/metadata setters */
+
+void channel_change_state(channel_t *chan, channel_state_t to_state);
+void channel_clear_identity_digest(channel_t *chan);
+void channel_clear_remote_end(channel_t *chan);
+void channel_mark_local(channel_t *chan);
+void channel_mark_incoming(channel_t *chan);
+void channel_mark_outgoing(channel_t *chan);
+void channel_set_identity_digest(channel_t *chan,
+ const char *identity_digest);
+void channel_set_remote_end(channel_t *chan,
+ const char *identity_digest,
+ const char *nickname);
+
+void channel_listener_change_state(channel_listener_t *chan_l,
+ channel_listener_state_t to_state);
+
+/* Timestamp updates */
+void channel_timestamp_created(channel_t *chan);
+void channel_timestamp_active(channel_t *chan);
+void channel_timestamp_drained(channel_t *chan);
+void channel_timestamp_recv(channel_t *chan);
+void channel_timestamp_xmit(channel_t *chan);
+
+void channel_listener_timestamp_created(channel_listener_t *chan_l);
+void channel_listener_timestamp_active(channel_listener_t *chan_l);
+void channel_listener_timestamp_accepted(channel_listener_t *chan_l);
+
+/* Incoming channel handling */
+void channel_listener_process_incoming(channel_listener_t *listener);
+void channel_listener_queue_incoming(channel_listener_t *listener,
+ channel_t *incoming);
+
+/* Incoming cell handling */
+void channel_process_cells(channel_t *chan);
+void channel_queue_cell(channel_t *chan, cell_t *cell);
+void channel_queue_var_cell(channel_t *chan, var_cell_t *var_cell);
+
+/* Outgoing cell handling */
+void channel_flush_cells(channel_t *chan);
+
+/* Request from lower layer for more cells if available */
+ssize_t channel_flush_some_cells(channel_t *chan, ssize_t num_cells);
+
+/* Query if data available on this channel */
+int channel_more_to_flush(channel_t *chan);
+
+/* Notify flushed outgoing for dirreq handling */
+void channel_notify_flushed(channel_t *chan);
+
+/* Handle stuff we need to do on open like notifying circuits */
+void channel_do_open_actions(channel_t *chan);
+
+#endif
+
+/* Helper functions to perform operations on channels */
+
+int channel_send_destroy(circid_t circ_id, channel_t *chan,
+ int reason);
+
+/*
+ * Outside abstract interfaces that should eventually get turned into
+ * something transport/address format independent.
+ */
+
+channel_t * channel_connect(const tor_addr_t *addr, uint16_t port,
+ const char *id_digest);
+
+channel_t * channel_get_for_extend(const char *digest,
+ const tor_addr_t *target_addr,
+ const char **msg_out,
+ int *launch_out);
+
+/* Ask which of two channels is better for circuit-extension purposes */
+int channel_is_better(time_t now,
+ channel_t *a, channel_t *b,
+ int forgive_new_connections);
+
+/** Channel lookups
+ */
+
+channel_t * channel_find_by_global_id(uint64_t global_identifier);
+channel_t * channel_find_by_remote_digest(const char *identity_digest);
+
+/** For things returned by channel_find_by_remote_digest(), walk the list.
+ */
+channel_t * channel_next_with_digest(channel_t *chan);
+
+/*
+ * Metadata queries/updates
+ */
+
+const char * channel_describe_transport(channel_t *chan);
+void channel_dump_statistics(channel_t *chan, int severity);
+void channel_dump_transport_statistics(channel_t *chan, int severity);
+const char * channel_get_actual_remote_descr(channel_t *chan);
+const char * channel_get_actual_remote_address(channel_t *chan);
+int channel_get_addr_if_possible(channel_t *chan, tor_addr_t *addr_out);
+const char * channel_get_canonical_remote_descr(channel_t *chan);
+int channel_has_queued_writes(channel_t *chan);
+int channel_is_bad_for_new_circs(channel_t *chan);
+void channel_mark_bad_for_new_circs(channel_t *chan);
+int channel_is_canonical(channel_t *chan);
+int channel_is_canonical_is_reliable(channel_t *chan);
+int channel_is_client(channel_t *chan);
+int channel_is_local(channel_t *chan);
+int channel_is_incoming(channel_t *chan);
+int channel_is_outgoing(channel_t *chan);
+void channel_mark_client(channel_t *chan);
+int channel_matches_extend_info(channel_t *chan, extend_info_t *extend_info);
+int channel_matches_target_addr_for_extend(channel_t *chan,
+ const tor_addr_t *target);
+unsigned int channel_num_circuits(channel_t *chan);
+void channel_set_circid_type(channel_t *chan, crypto_pk_t *identity_rcvd,
+ int consider_identity);
+void channel_timestamp_client(channel_t *chan);
+
+const char * channel_listener_describe_transport(channel_listener_t *chan_l);
+void channel_listener_dump_statistics(channel_listener_t *chan_l,
+ int severity);
+void channel_listener_dump_transport_statistics(channel_listener_t *chan_l,
+ int severity);
+
+/* Timestamp queries */
+time_t channel_when_created(channel_t *chan);
+time_t channel_when_last_active(channel_t *chan);
+time_t channel_when_last_client(channel_t *chan);
+time_t channel_when_last_drained(channel_t *chan);
+time_t channel_when_last_recv(channel_t *chan);
+time_t channel_when_last_xmit(channel_t *chan);
+
+time_t channel_listener_when_created(channel_listener_t *chan_l);
+time_t channel_listener_when_last_active(channel_listener_t *chan_l);
+time_t channel_listener_when_last_accepted(channel_listener_t *chan_l);
+
+/* Counter queries */
+uint64_t channel_count_recved(channel_t *chan);
+uint64_t channel_count_xmitted(channel_t *chan);
+
+uint64_t channel_listener_count_accepted(channel_listener_t *chan_l);
+
+int packed_cell_is_destroy(channel_t *chan,
+ const packed_cell_t *packed_cell,
+ circid_t *circid_out);
+
+#endif
+
diff --git a/src/or/channeltls.c b/src/or/channeltls.c
new file mode 100644
index 000000000..539ead193
--- /dev/null
+++ b/src/or/channeltls.c
@@ -0,0 +1,2081 @@
+/* * Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file channeltls.c
+ * \brief channel_t concrete subclass using or_connection_t
+ **/
+
+/*
+ * Define this so channel.h gives us things only channel_t subclasses
+ * should touch.
+ */
+
+#define TOR_CHANNEL_INTERNAL_
+
+#include "or.h"
+#include "channel.h"
+#include "channeltls.h"
+#include "circuitmux.h"
+#include "circuitmux_ewma.h"
+#include "config.h"
+#include "connection.h"
+#include "connection_or.h"
+#include "control.h"
+#include "relay.h"
+#include "router.h"
+#include "routerlist.h"
+
+/** How many CELL_PADDING cells have we received, ever? */
+uint64_t stats_n_padding_cells_processed = 0;
+/** How many CELL_VERSIONS cells have we received, ever? */
+uint64_t stats_n_versions_cells_processed = 0;
+/** How many CELL_NETINFO cells have we received, ever? */
+uint64_t stats_n_netinfo_cells_processed = 0;
+/** How many CELL_VPADDING cells have we received, ever? */
+uint64_t stats_n_vpadding_cells_processed = 0;
+/** How many CELL_CERTS cells have we received, ever? */
+uint64_t stats_n_certs_cells_processed = 0;
+/** How many CELL_AUTH_CHALLENGE cells have we received, ever? */
+uint64_t stats_n_auth_challenge_cells_processed = 0;
+/** How many CELL_AUTHENTICATE cells have we received, ever? */
+uint64_t stats_n_authenticate_cells_processed = 0;
+/** How many CELL_AUTHORIZE cells have we received, ever? */
+uint64_t stats_n_authorize_cells_processed = 0;
+
+/** Active listener, if any */
+channel_listener_t *channel_tls_listener = NULL;
+
+/* Utility function declarations */
+static void channel_tls_common_init(channel_tls_t *tlschan);
+
+/* channel_tls_t method declarations */
+
+static void channel_tls_close_method(channel_t *chan);
+static const char * channel_tls_describe_transport_method(channel_t *chan);
+static void channel_tls_free_method(channel_t *chan);
+static int
+channel_tls_get_remote_addr_method(channel_t *chan, tor_addr_t *addr_out);
+static int
+channel_tls_get_transport_name_method(channel_t *chan, char **transport_out);
+static const char *
+channel_tls_get_remote_descr_method(channel_t *chan, int flags);
+static int channel_tls_has_queued_writes_method(channel_t *chan);
+static int channel_tls_is_canonical_method(channel_t *chan, int req);
+static int
+channel_tls_matches_extend_info_method(channel_t *chan,
+ extend_info_t *extend_info);
+static int channel_tls_matches_target_method(channel_t *chan,
+ const tor_addr_t *target);
+static int channel_tls_write_cell_method(channel_t *chan,
+ cell_t *cell);
+static int channel_tls_write_packed_cell_method(channel_t *chan,
+ packed_cell_t *packed_cell);
+static int channel_tls_write_var_cell_method(channel_t *chan,
+ var_cell_t *var_cell);
+
+/* channel_listener_tls_t method declarations */
+
+static void channel_tls_listener_close_method(channel_listener_t *chan_l);
+static const char *
+channel_tls_listener_describe_transport_method(channel_listener_t *chan_l);
+
+/** Handle incoming cells for the handshake stuff here rather than
+ * passing them on up. */
+
+static void channel_tls_process_versions_cell(var_cell_t *cell,
+ channel_tls_t *tlschan);
+static void channel_tls_process_netinfo_cell(cell_t *cell,
+ channel_tls_t *tlschan);
+static void channel_tls_process_certs_cell(var_cell_t *cell,
+ channel_tls_t *tlschan);
+static void channel_tls_process_auth_challenge_cell(var_cell_t *cell,
+ channel_tls_t *tlschan);
+static void channel_tls_process_authenticate_cell(var_cell_t *cell,
+ channel_tls_t *tlschan);
+static int command_allowed_before_handshake(uint8_t command);
+static int enter_v3_handshake_with_cell(var_cell_t *cell,
+ channel_tls_t *tlschan);
+
+/**
+ * Do parts of channel_tls_t initialization common to channel_tls_connect()
+ * and channel_tls_handle_incoming().
+ */
+
+static void
+channel_tls_common_init(channel_tls_t *tlschan)
+{
+ channel_t *chan;
+
+ tor_assert(tlschan);
+
+ chan = &(tlschan->base_);
+ channel_init(chan);
+ chan->magic = TLS_CHAN_MAGIC;
+ chan->state = CHANNEL_STATE_OPENING;
+ chan->close = channel_tls_close_method;
+ chan->describe_transport = channel_tls_describe_transport_method;
+ chan->free = channel_tls_free_method;
+ chan->get_remote_addr = channel_tls_get_remote_addr_method;
+ chan->get_remote_descr = channel_tls_get_remote_descr_method;
+ chan->get_transport_name = channel_tls_get_transport_name_method;
+ chan->has_queued_writes = channel_tls_has_queued_writes_method;
+ chan->is_canonical = channel_tls_is_canonical_method;
+ chan->matches_extend_info = channel_tls_matches_extend_info_method;
+ chan->matches_target = channel_tls_matches_target_method;
+ chan->write_cell = channel_tls_write_cell_method;
+ chan->write_packed_cell = channel_tls_write_packed_cell_method;
+ chan->write_var_cell = channel_tls_write_var_cell_method;
+
+ chan->cmux = circuitmux_alloc();
+ if (cell_ewma_enabled()) {
+ circuitmux_set_policy(chan->cmux, &ewma_policy);
+ }
+}
+
+/**
+ * Start a new TLS channel
+ *
+ * Launch a new OR connection to <b>addr</b>:<b>port</b> and expect to
+ * handshake with an OR with identity digest <b>id_digest</b>, and wrap
+ * it in a channel_tls_t.
+ */
+
+channel_t *
+channel_tls_connect(const tor_addr_t *addr, uint16_t port,
+ const char *id_digest)
+{
+ channel_tls_t *tlschan = tor_malloc_zero(sizeof(*tlschan));
+ channel_t *chan = &(tlschan->base_);
+
+ channel_tls_common_init(tlschan);
+
+ log_debug(LD_CHANNEL,
+ "In channel_tls_connect() for channel %p "
+ "(global id " U64_FORMAT ")",
+ tlschan,
+ U64_PRINTF_ARG(chan->global_identifier));
+
+ if (is_local_addr(addr)) channel_mark_local(chan);
+ channel_mark_outgoing(chan);
+
+ /* Set up or_connection stuff */
+ tlschan->conn = connection_or_connect(addr, port, id_digest, tlschan);
+ /* connection_or_connect() will fill in tlschan->conn */
+ if (!(tlschan->conn)) {
+ chan->reason_for_closing = CHANNEL_CLOSE_FOR_ERROR;
+ channel_change_state(chan, CHANNEL_STATE_ERROR);
+ goto err;
+ }
+
+ log_debug(LD_CHANNEL,
+ "Got orconn %p for channel with global id " U64_FORMAT,
+ tlschan->conn, U64_PRINTF_ARG(chan->global_identifier));
+
+ goto done;
+
+ err:
+ circuitmux_free(chan->cmux);
+ tor_free(tlschan);
+ chan = NULL;
+
+ done:
+ /* If we got one, we should register it */
+ if (chan) channel_register(chan);
+
+ return chan;
+}
+
+/**
+ * Return the current channel_tls_t listener
+ *
+ * Returns the current channel listener for incoming TLS connections, or
+ * NULL if none has been established
+ */
+
+channel_listener_t *
+channel_tls_get_listener(void)
+{
+ return channel_tls_listener;
+}
+
+/**
+ * Start a channel_tls_t listener if necessary
+ *
+ * Return the current channel_tls_t listener, or start one if we haven't yet,
+ * and return that.
+ */
+
+channel_listener_t *
+channel_tls_start_listener(void)
+{
+ channel_listener_t *listener;
+
+ if (!channel_tls_listener) {
+ listener = tor_malloc_zero(sizeof(*listener));
+ channel_init_listener(listener);
+ listener->state = CHANNEL_LISTENER_STATE_LISTENING;
+ listener->close = channel_tls_listener_close_method;
+ listener->describe_transport =
+ channel_tls_listener_describe_transport_method;
+
+ channel_tls_listener = listener;
+
+ log_debug(LD_CHANNEL,
+ "Starting TLS channel listener %p with global id " U64_FORMAT,
+ listener, U64_PRINTF_ARG(listener->global_identifier));
+
+ channel_listener_register(listener);
+ } else listener = channel_tls_listener;
+
+ return listener;
+}
+
+/**
+ * Free everything on shutdown
+ *
+ * Not much to do here, since channel_free_all() takes care of a lot, but let's
+ * get rid of the listener.
+ */
+
+void
+channel_tls_free_all(void)
+{
+ channel_listener_t *old_listener = NULL;
+
+ log_debug(LD_CHANNEL,
+ "Shutting down TLS channels...");
+
+ if (channel_tls_listener) {
+ /*
+ * When we close it, channel_tls_listener will get nulled out, so save
+ * a pointer so we can free it.
+ */
+ old_listener = channel_tls_listener;
+ log_debug(LD_CHANNEL,
+ "Closing channel_tls_listener with ID " U64_FORMAT
+ " at %p.",
+ U64_PRINTF_ARG(old_listener->global_identifier),
+ old_listener);
+ channel_listener_unregister(old_listener);
+ channel_listener_mark_for_close(old_listener);
+ channel_listener_free(old_listener);
+ tor_assert(channel_tls_listener == NULL);
+ }
+
+ log_debug(LD_CHANNEL,
+ "Done shutting down TLS channels");
+}
+
+/**
+ * Create a new channel around an incoming or_connection_t
+ */
+
+channel_t *
+channel_tls_handle_incoming(or_connection_t *orconn)
+{
+ channel_tls_t *tlschan = tor_malloc_zero(sizeof(*tlschan));
+ channel_t *chan = &(tlschan->base_);
+
+ tor_assert(orconn);
+ tor_assert(!(orconn->chan));
+
+ channel_tls_common_init(tlschan);
+
+ /* Link the channel and orconn to each other */
+ tlschan->conn = orconn;
+ orconn->chan = tlschan;
+
+ if (is_local_addr(&(TO_CONN(orconn)->addr))) channel_mark_local(chan);
+ channel_mark_incoming(chan);
+
+ /* Register it */
+ channel_register(chan);
+
+ return chan;
+}
+
+/*********
+ * Casts *
+ ********/
+
+/**
+ * Cast a channel_tls_t to a channel_t.
+ */
+
+channel_t *
+channel_tls_to_base(channel_tls_t *tlschan)
+{
+ if (!tlschan) return NULL;
+
+ return &(tlschan->base_);
+}
+
+/**
+ * Cast a channel_t to a channel_tls_t, with appropriate type-checking
+ * asserts.
+ */
+
+channel_tls_t *
+channel_tls_from_base(channel_t *chan)
+{
+ if (!chan) return NULL;
+
+ tor_assert(chan->magic == TLS_CHAN_MAGIC);
+
+ return (channel_tls_t *)(chan);
+}
+
+/********************************************
+ * Method implementations for channel_tls_t *
+ *******************************************/
+
+/**
+ * Close a channel_tls_t
+ *
+ * This implements the close method for channel_tls_t
+ */
+
+static void
+channel_tls_close_method(channel_t *chan)
+{
+ channel_tls_t *tlschan = BASE_CHAN_TO_TLS(chan);
+
+ tor_assert(tlschan);
+
+ if (tlschan->conn) connection_or_close_normally(tlschan->conn, 1);
+ else {
+ /* Weird - we'll have to change the state ourselves, I guess */
+ log_info(LD_CHANNEL,
+ "Tried to close channel_tls_t %p with NULL conn",
+ tlschan);
+ channel_change_state(chan, CHANNEL_STATE_ERROR);
+ }
+}
+
+/**
+ * Describe the transport for a channel_tls_t
+ *
+ * This returns the string "TLS channel on connection <id>" to the upper
+ * layer.
+ */
+
+static const char *
+channel_tls_describe_transport_method(channel_t *chan)
+{
+ static char *buf = NULL;
+ uint64_t id;
+ channel_tls_t *tlschan;
+ const char *rv = NULL;
+
+ tor_assert(chan);
+
+ tlschan = BASE_CHAN_TO_TLS(chan);
+
+ if (tlschan->conn) {
+ id = TO_CONN(tlschan->conn)->global_identifier;
+
+ if (buf) tor_free(buf);
+ tor_asprintf(&buf,
+ "TLS channel (connection " U64_FORMAT ")",
+ U64_PRINTF_ARG(id));
+
+ rv = buf;
+ } else {
+ rv = "TLS channel (no connection)";
+ }
+
+ return rv;
+}
+
+/**
+ * Free a channel_tls_t
+ *
+ * This is called by the generic channel layer when freeing a channel_tls_t;
+ * this happens either on a channel which has already reached
+ * CHANNEL_STATE_CLOSED or CHANNEL_STATE_ERROR from channel_run_cleanup() or
+ * on shutdown from channel_free_all(). In the latter case we might still
+ * have an orconn active (which connection_free_all() will get to later),
+ * so we should null out its channel pointer now.
+ */
+
+static void
+channel_tls_free_method(channel_t *chan)
+{
+ channel_tls_t *tlschan = BASE_CHAN_TO_TLS(chan);
+
+ tor_assert(tlschan);
+
+ if (tlschan->conn) {
+ tlschan->conn->chan = NULL;
+ tlschan->conn = NULL;
+ }
+}
+
+/**
+ * Get the remote address of a channel_tls_t
+ *
+ * This implements the get_remote_addr method for channel_tls_t; copy the
+ * remote endpoint of the channel to addr_out and return 1 (always
+ * succeeds for this transport).
+ */
+
+static int
+channel_tls_get_remote_addr_method(channel_t *chan, tor_addr_t *addr_out)
+{
+ int rv = 0;
+ channel_tls_t *tlschan = BASE_CHAN_TO_TLS(chan);
+
+ tor_assert(tlschan);
+ tor_assert(addr_out);
+
+ if (tlschan->conn) {
+ tor_addr_copy(addr_out, &(TO_CONN(tlschan->conn)->addr));
+ rv = 1;
+ } else tor_addr_make_unspec(addr_out);
+
+ return rv;
+}
+
+/**
+ * Get the name of the pluggable transport used by a channel_tls_t.
+ *
+ * This implements the get_transport_name for channel_tls_t. If the
+ * channel uses a pluggable transport, copy its name to
+ * <b>transport_out</b> and return 0. If the channel did not use a
+ * pluggable transport, return -1. */
+
+static int
+channel_tls_get_transport_name_method(channel_t *chan, char **transport_out)
+{
+ channel_tls_t *tlschan = BASE_CHAN_TO_TLS(chan);
+
+ tor_assert(tlschan);
+ tor_assert(transport_out);
+ tor_assert(tlschan->conn);
+
+ if (!tlschan->conn->ext_or_transport)
+ return -1;
+
+ *transport_out = tor_strdup(tlschan->conn->ext_or_transport);
+ return 0;
+}
+
+/**
+ * Get endpoint description of a channel_tls_t
+ *
+ * This implements the get_remote_descr method for channel_tls_t; it returns
+ * a text description of the remote endpoint of the channel suitable for use
+ * in log messages. The req parameter is 0 for the canonical address or 1 for
+ * the actual address seen.
+ */
+
+static const char *
+channel_tls_get_remote_descr_method(channel_t *chan, int flags)
+{
+#define MAX_DESCR_LEN 32
+
+ static char buf[MAX_DESCR_LEN + 1];
+ channel_tls_t *tlschan = BASE_CHAN_TO_TLS(chan);
+ connection_t *conn;
+ const char *answer = NULL;
+ char *addr_str;
+
+ tor_assert(tlschan);
+
+ if (tlschan->conn) {
+ conn = TO_CONN(tlschan->conn);
+ switch (flags) {
+ case 0:
+ /* Canonical address with port*/
+ tor_snprintf(buf, MAX_DESCR_LEN + 1,
+ "%s:%u", conn->address, conn->port);
+ answer = buf;
+ break;
+ case GRD_FLAG_ORIGINAL:
+ /* Actual address with port */
+ addr_str = tor_dup_addr(&(tlschan->conn->real_addr));
+ tor_snprintf(buf, MAX_DESCR_LEN + 1,
+ "%s:%u", addr_str, conn->port);
+ tor_free(addr_str);
+ answer = buf;
+ break;
+ case GRD_FLAG_ADDR_ONLY:
+ /* Canonical address, no port */
+ strlcpy(buf, conn->address, sizeof(buf));
+ answer = buf;
+ break;
+ case GRD_FLAG_ORIGINAL|GRD_FLAG_ADDR_ONLY:
+ /* Actual address, no port */
+ addr_str = tor_dup_addr(&(tlschan->conn->real_addr));
+ strlcpy(buf, addr_str, sizeof(buf));
+ tor_free(addr_str);
+ answer = buf;
+ break;
+ default:
+ /* Something's broken in channel.c */
+ tor_assert(1);
+ }
+ } else {
+ strlcpy(buf, "(No connection)", sizeof(buf));
+ answer = buf;
+ }
+
+ return answer;
+}
+
+/**
+ * Tell the upper layer if we have queued writes
+ *
+ * This implements the has_queued_writes method for channel_tls t_; it returns
+ * 1 iff we have queued writes on the outbuf of the underlying or_connection_t.
+ */
+
+static int
+channel_tls_has_queued_writes_method(channel_t *chan)
+{
+ size_t outbuf_len;
+ channel_tls_t *tlschan = BASE_CHAN_TO_TLS(chan);
+
+ tor_assert(tlschan);
+ if (!(tlschan->conn)) {
+ log_info(LD_CHANNEL,
+ "something called has_queued_writes on a tlschan "
+ "(%p with ID " U64_FORMAT " but no conn",
+ chan, U64_PRINTF_ARG(chan->global_identifier));
+ }
+
+ outbuf_len = (tlschan->conn != NULL) ?
+ connection_get_outbuf_len(TO_CONN(tlschan->conn)) :
+ 0;
+
+ return (outbuf_len > 0);
+}
+
+/**
+ * Tell the upper layer if we're canonical
+ *
+ * This implements the is_canonical method for channel_tls_t; if req is zero,
+ * it returns whether this is a canonical channel, and if it is one it returns
+ * whether that can be relied upon.
+ */
+
+static int
+channel_tls_is_canonical_method(channel_t *chan, int req)
+{
+ int answer = 0;
+ channel_tls_t *tlschan = BASE_CHAN_TO_TLS(chan);
+
+ tor_assert(tlschan);
+
+ if (tlschan->conn) {
+ switch (req) {
+ case 0:
+ answer = tlschan->conn->is_canonical;
+ break;
+ case 1:
+ /*
+ * Is the is_canonical bit reliable? In protocols version 2 and up
+ * we get the canonical address from a NETINFO cell, but in older
+ * versions it might be based on an obsolete descriptor.
+ */
+ answer = (tlschan->conn->link_proto >= 2);
+ break;
+ default:
+ /* This shouldn't happen; channel.c is broken if it does */
+ tor_assert(1);
+ }
+ }
+ /* else return 0 for tlschan->conn == NULL */
+
+ return answer;
+}
+
+/**
+ * Check if we match an extend_info_t
+ *
+ * This implements the matches_extend_info method for channel_tls_t; the upper
+ * layer wants to know if this channel matches an extend_info_t.
+ */
+
+static int
+channel_tls_matches_extend_info_method(channel_t *chan,
+ extend_info_t *extend_info)
+{
+ channel_tls_t *tlschan = BASE_CHAN_TO_TLS(chan);
+
+ tor_assert(tlschan);
+ tor_assert(extend_info);
+
+ /* Never match if we have no conn */
+ if (!(tlschan->conn)) {
+ log_info(LD_CHANNEL,
+ "something called matches_extend_info on a tlschan "
+ "(%p with ID " U64_FORMAT " but no conn",
+ chan, U64_PRINTF_ARG(chan->global_identifier));
+ return 0;
+ }
+
+ return (tor_addr_eq(&(extend_info->addr),
+ &(TO_CONN(tlschan->conn)->addr)) &&
+ (extend_info->port == TO_CONN(tlschan->conn)->port));
+}
+
+/**
+ * Check if we match a target address; return true iff we do.
+ *
+ * This implements the matches_target method for channel_tls t_; the upper
+ * layer wants to know if this channel matches a target address when extending
+ * a circuit.
+ */
+
+static int
+channel_tls_matches_target_method(channel_t *chan,
+ const tor_addr_t *target)
+{
+ channel_tls_t *tlschan = BASE_CHAN_TO_TLS(chan);
+
+ tor_assert(tlschan);
+ tor_assert(target);
+
+ /* Never match if we have no conn */
+ if (!(tlschan->conn)) {
+ log_info(LD_CHANNEL,
+ "something called matches_target on a tlschan "
+ "(%p with ID " U64_FORMAT " but no conn",
+ chan, U64_PRINTF_ARG(chan->global_identifier));
+ return 0;
+ }
+
+ return tor_addr_eq(&(tlschan->conn->real_addr), target);
+}
+
+/**
+ * Write a cell to a channel_tls_t
+ *
+ * This implements the write_cell method for channel_tls_t; given a
+ * channel_tls_t and a cell_t, transmit the cell_t.
+ */
+
+static int
+channel_tls_write_cell_method(channel_t *chan, cell_t *cell)
+{
+ channel_tls_t *tlschan = BASE_CHAN_TO_TLS(chan);
+ int written = 0;
+
+ tor_assert(tlschan);
+ tor_assert(cell);
+
+ if (tlschan->conn) {
+ connection_or_write_cell_to_buf(cell, tlschan->conn);
+ ++written;
+ } else {
+ log_info(LD_CHANNEL,
+ "something called write_cell on a tlschan "
+ "(%p with ID " U64_FORMAT " but no conn",
+ chan, U64_PRINTF_ARG(chan->global_identifier));
+ }
+
+ return written;
+}
+
+/**
+ * Write a packed cell to a channel_tls_t
+ *
+ * This implements the write_packed_cell method for channel_tls_t; given a
+ * channel_tls_t and a packed_cell_t, transmit the packed_cell_t.
+ */
+
+static int
+channel_tls_write_packed_cell_method(channel_t *chan,
+ packed_cell_t *packed_cell)
+{
+ channel_tls_t *tlschan = BASE_CHAN_TO_TLS(chan);
+ size_t cell_network_size = get_cell_network_size(chan->wide_circ_ids);
+ int written = 0;
+
+ tor_assert(tlschan);
+ tor_assert(packed_cell);
+
+ if (tlschan->conn) {
+ connection_write_to_buf(packed_cell->body, cell_network_size,
+ TO_CONN(tlschan->conn));
+
+ /* This is where the cell is finished; used to be done from relay.c */
+ packed_cell_free(packed_cell);
+ ++written;
+ } else {
+ log_info(LD_CHANNEL,
+ "something called write_packed_cell on a tlschan "
+ "(%p with ID " U64_FORMAT " but no conn",
+ chan, U64_PRINTF_ARG(chan->global_identifier));
+ }
+
+ return written;
+}
+
+/**
+ * Write a variable-length cell to a channel_tls_t
+ *
+ * This implements the write_var_cell method for channel_tls_t; given a
+ * channel_tls_t and a var_cell_t, transmit the var_cell_t.
+ */
+
+static int
+channel_tls_write_var_cell_method(channel_t *chan, var_cell_t *var_cell)
+{
+ channel_tls_t *tlschan = BASE_CHAN_TO_TLS(chan);
+ int written = 0;
+
+ tor_assert(tlschan);
+ tor_assert(var_cell);
+
+ if (tlschan->conn) {
+ connection_or_write_var_cell_to_buf(var_cell, tlschan->conn);
+ ++written;
+ } else {
+ log_info(LD_CHANNEL,
+ "something called write_var_cell on a tlschan "
+ "(%p with ID " U64_FORMAT " but no conn",
+ chan, U64_PRINTF_ARG(chan->global_identifier));
+ }
+
+ return written;
+}
+
+/*************************************************
+ * Method implementations for channel_listener_t *
+ ************************************************/
+
+/**
+ * Close a channel_listener_t
+ *
+ * This implements the close method for channel_listener_t
+ */
+
+static void
+channel_tls_listener_close_method(channel_listener_t *chan_l)
+{
+ tor_assert(chan_l);
+
+ /*
+ * Listeners we just go ahead and change state through to CLOSED, but
+ * make sure to check if they're channel_tls_listener to NULL it out.
+ */
+ if (chan_l == channel_tls_listener)
+ channel_tls_listener = NULL;
+
+ if (!(chan_l->state == CHANNEL_LISTENER_STATE_CLOSING ||
+ chan_l->state == CHANNEL_LISTENER_STATE_CLOSED ||
+ chan_l->state == CHANNEL_LISTENER_STATE_ERROR)) {
+ channel_listener_change_state(chan_l, CHANNEL_LISTENER_STATE_CLOSING);
+ }
+
+ if (chan_l->incoming_list) {
+ SMARTLIST_FOREACH_BEGIN(chan_l->incoming_list,
+ channel_t *, ichan) {
+ channel_mark_for_close(ichan);
+ } SMARTLIST_FOREACH_END(ichan);
+
+ smartlist_free(chan_l->incoming_list);
+ chan_l->incoming_list = NULL;
+ }
+
+ if (!(chan_l->state == CHANNEL_LISTENER_STATE_CLOSED ||
+ chan_l->state == CHANNEL_LISTENER_STATE_ERROR)) {
+ channel_listener_change_state(chan_l, CHANNEL_LISTENER_STATE_CLOSED);
+ }
+}
+
+/**
+ * Describe the transport for a channel_listener_t
+ *
+ * This returns the string "TLS channel (listening)" to the upper
+ * layer.
+ */
+
+static const char *
+channel_tls_listener_describe_transport_method(channel_listener_t *chan_l)
+{
+ tor_assert(chan_l);
+
+ return "TLS channel (listening)";
+}
+
+/*******************************************************
+ * Functions for handling events on an or_connection_t *
+ ******************************************************/
+
+/**
+ * Handle an orconn state change
+ *
+ * This function will be called by connection_or.c when the or_connection_t
+ * associated with this channel_tls_t changes state.
+ */
+
+void
+channel_tls_handle_state_change_on_orconn(channel_tls_t *chan,
+ or_connection_t *conn,
+ uint8_t old_state,
+ uint8_t state)
+{
+ channel_t *base_chan;
+
+ tor_assert(chan);
+ tor_assert(conn);
+ tor_assert(conn->chan == chan);
+ tor_assert(chan->conn == conn);
+ /* -Werror appeasement */
+ tor_assert(old_state == old_state);
+
+ base_chan = TLS_CHAN_TO_BASE(chan);
+
+ /* Make sure the base connection state makes sense - shouldn't be error,
+ * closed or listening. */
+
+ tor_assert(base_chan->state == CHANNEL_STATE_OPENING ||
+ base_chan->state == CHANNEL_STATE_OPEN ||
+ base_chan->state == CHANNEL_STATE_MAINT ||
+ base_chan->state == CHANNEL_STATE_CLOSING);
+
+ /* Did we just go to state open? */
+ if (state == OR_CONN_STATE_OPEN) {
+ /*
+ * We can go to CHANNEL_STATE_OPEN from CHANNEL_STATE_OPENING or
+ * CHANNEL_STATE_MAINT on this.
+ */
+ channel_change_state(base_chan, CHANNEL_STATE_OPEN);
+ } else {
+ /*
+ * Not open, so from CHANNEL_STATE_OPEN we go to CHANNEL_STATE_MAINT,
+ * otherwise no change.
+ */
+ if (base_chan->state == CHANNEL_STATE_OPEN) {
+ channel_change_state(base_chan, CHANNEL_STATE_MAINT);
+ }
+ }
+}
+
+/**
+ * Flush cells from a channel_tls_t
+ *
+ * Try to flush up to about num_cells cells, and return how many we flushed.
+ */
+
+ssize_t
+channel_tls_flush_some_cells(channel_tls_t *chan, ssize_t num_cells)
+{
+ ssize_t flushed = 0;
+
+ tor_assert(chan);
+
+ if (flushed >= num_cells) goto done;
+
+ /*
+ * If channel_tls_t ever buffers anything below the channel_t layer, flush
+ * that first here.
+ */
+
+ flushed += channel_flush_some_cells(TLS_CHAN_TO_BASE(chan),
+ num_cells - flushed);
+
+ /*
+ * If channel_tls_t ever buffers anything below the channel_t layer, check
+ * how much we actually got and push it on down here.
+ */
+
+ done:
+ return flushed;
+}
+
+/**
+ * Check if a channel_tls_t has anything to flush
+ *
+ * Return true if there is any more to flush on this channel (cells in queue
+ * or active circuits).
+ */
+
+int
+channel_tls_more_to_flush(channel_tls_t *chan)
+{
+ tor_assert(chan);
+
+ /*
+ * If channel_tls_t ever buffers anything below channel_t, the
+ * check for that should go here first.
+ */
+
+ return channel_more_to_flush(TLS_CHAN_TO_BASE(chan));
+}
+
+#ifdef KEEP_TIMING_STATS
+
+/**
+ * Timing states wrapper
+ *
+ * This is a wrapper function around the actual function that processes the
+ * <b>cell</b> that just arrived on <b>chan</b>. Increment <b>*time</b>
+ * by the number of microseconds used by the call to <b>*func(cell, chan)</b>.
+ */
+
+static void
+channel_tls_time_process_cell(cell_t *cell, channel_tls_t *chan, int *time,
+ void (*func)(cell_t *, channel_tls_t *))
+{
+ struct timeval start, end;
+ long time_passed;
+
+ tor_gettimeofday(&start);
+
+ (*func)(cell, chan);
+
+ tor_gettimeofday(&end);
+ time_passed = tv_udiff(&start, &end) ;
+
+ if (time_passed > 10000) { /* more than 10ms */
+ log_debug(LD_OR,"That call just took %ld ms.",time_passed/1000);
+ }
+
+ if (time_passed < 0) {
+ log_info(LD_GENERAL,"That call took us back in time!");
+ time_passed = 0;
+ }
+
+ *time += time_passed;
+}
+#endif
+
+/**
+ * Handle an incoming cell on a channel_tls_t
+ *
+ * This is called from connection_or.c to handle an arriving cell; it checks
+ * for cell types specific to the handshake for this transport protocol and
+ * handles them, and queues all other cells to the channel_t layer, which
+ * eventually will hand them off to command.c.
+ */
+
+void
+channel_tls_handle_cell(cell_t *cell, or_connection_t *conn)
+{
+ channel_tls_t *chan;
+ int handshaking;
+
+#ifdef KEEP_TIMING_STATS
+#define PROCESS_CELL(tp, cl, cn) STMT_BEGIN { \
+ ++num ## tp; \
+ channel_tls_time_process_cell(cl, cn, & tp ## time , \
+ channel_tls_process_ ## tp ## _cell); \
+ } STMT_END
+#else
+#define PROCESS_CELL(tp, cl, cn) channel_tls_process_ ## tp ## _cell(cl, cn)
+#endif
+
+ tor_assert(cell);
+ tor_assert(conn);
+
+ chan = conn->chan;
+
+ if (!chan) {
+ log_warn(LD_CHANNEL,
+ "Got a cell_t on an OR connection with no channel");
+ return;
+ }
+
+ handshaking = (TO_CONN(conn)->state != OR_CONN_STATE_OPEN);
+
+ if (conn->base_.marked_for_close)
+ return;
+
+ /* Reject all but VERSIONS and NETINFO when handshaking. */
+ /* (VERSIONS should actually be impossible; it's variable-length.) */
+ if (handshaking && cell->command != CELL_VERSIONS &&
+ cell->command != CELL_NETINFO) {
+ log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
+ "Received unexpected cell command %d in chan state %s / "
+ "conn state %s; closing the connection.",
+ (int)cell->command,
+ channel_state_to_string(TLS_CHAN_TO_BASE(chan)->state),
+ conn_state_to_string(CONN_TYPE_OR, TO_CONN(conn)->state));
+ connection_or_close_for_error(conn, 0);
+ return;
+ }
+
+ if (conn->base_.state == OR_CONN_STATE_OR_HANDSHAKING_V3)
+ or_handshake_state_record_cell(conn, conn->handshake_state, cell, 1);
+
+ switch (cell->command) {
+ case CELL_PADDING:
+ ++stats_n_padding_cells_processed;
+ /* do nothing */
+ break;
+ case CELL_VERSIONS:
+ tor_fragile_assert();
+ break;
+ case CELL_NETINFO:
+ ++stats_n_netinfo_cells_processed;
+ PROCESS_CELL(netinfo, cell, chan);
+ break;
+ case CELL_CREATE:
+ case CELL_CREATE_FAST:
+ case CELL_CREATED:
+ case CELL_CREATED_FAST:
+ case CELL_RELAY:
+ case CELL_RELAY_EARLY:
+ case CELL_DESTROY:
+ case CELL_CREATE2:
+ case CELL_CREATED2:
+ /*
+ * These are all transport independent and we pass them up through the
+ * channel_t mechanism. They are ultimately handled in command.c.
+ */
+ channel_queue_cell(TLS_CHAN_TO_BASE(chan), cell);
+ break;
+ default:
+ log_fn(LOG_INFO, LD_PROTOCOL,
+ "Cell of unknown type (%d) received in channeltls.c. "
+ "Dropping.",
+ cell->command);
+ break;
+ }
+}
+
+/**
+ * Handle an incoming variable-length cell on a channel_tls_t
+ *
+ * Process a <b>var_cell</b> that was just received on <b>conn</b>. Keep
+ * internal statistics about how many of each cell we've processed so far
+ * this second, and the total number of microseconds it took to
+ * process each type of cell. All the var_cell commands are handshake-
+ * related and live below the channel_t layer, so no variable-length
+ * cells ever get delivered in the current implementation, but I've left
+ * the mechanism in place for future use.
+ */
+
+void
+channel_tls_handle_var_cell(var_cell_t *var_cell, or_connection_t *conn)
+{
+ channel_tls_t *chan;
+
+#ifdef KEEP_TIMING_STATS
+ /* how many of each cell have we seen so far this second? needs better
+ * name. */
+ static int num_versions = 0, num_certs = 0;
+ static time_t current_second = 0; /* from previous calls to time */
+ time_t now = time(NULL);
+
+ if (current_second == 0) current_second = now;
+ if (now > current_second) { /* the second has rolled over */
+ /* print stats */
+ log_info(LD_OR,
+ "At end of second: %d versions (%d ms), %d certs (%d ms)",
+ num_versions, versions_time / ((now - current_second) * 1000),
+ num_certs, certs_time / ((now - current_second) * 1000));
+
+ num_versions = num_certs = 0;
+ versions_time = certs_time = 0;
+
+ /* remember which second it is, for next time */
+ current_second = now;
+ }
+#endif
+
+ tor_assert(var_cell);
+ tor_assert(conn);
+
+ chan = conn->chan;
+
+ if (!chan) {
+ log_warn(LD_CHANNEL,
+ "Got a var_cell_t on an OR connection with no channel");
+ return;
+ }
+
+ if (TO_CONN(conn)->marked_for_close)
+ return;
+
+ switch (TO_CONN(conn)->state) {
+ case OR_CONN_STATE_OR_HANDSHAKING_V2:
+ if (var_cell->command != CELL_VERSIONS) {
+ log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
+ "Received a cell with command %d in unexpected "
+ "orconn state \"%s\" [%d], channel state \"%s\" [%d]; "
+ "closing the connection.",
+ (int)(var_cell->command),
+ conn_state_to_string(CONN_TYPE_OR, TO_CONN(conn)->state),
+ TO_CONN(conn)->state,
+ channel_state_to_string(TLS_CHAN_TO_BASE(chan)->state),
+ (int)(TLS_CHAN_TO_BASE(chan)->state));
+ /*
+ * The code in connection_or.c will tell channel_t to close for
+ * error; it will go to CHANNEL_STATE_CLOSING, and then to
+ * CHANNEL_STATE_ERROR when conn is closed.
+ */
+ connection_or_close_for_error(conn, 0);
+ return;
+ }
+ break;
+ case OR_CONN_STATE_TLS_HANDSHAKING:
+ /* If we're using bufferevents, it's entirely possible for us to
+ * notice "hey, data arrived!" before we notice "hey, the handshake
+ * finished!" And we need to be accepting both at once to handle both
+ * the v2 and v3 handshakes. */
+
+ /* fall through */
+ case OR_CONN_STATE_TLS_SERVER_RENEGOTIATING:
+ if (!(command_allowed_before_handshake(var_cell->command))) {
+ log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
+ "Received a cell with command %d in unexpected "
+ "orconn state \"%s\" [%d], channel state \"%s\" [%d]; "
+ "closing the connection.",
+ (int)(var_cell->command),
+ conn_state_to_string(CONN_TYPE_OR, TO_CONN(conn)->state),
+ (int)(TO_CONN(conn)->state),
+ channel_state_to_string(TLS_CHAN_TO_BASE(chan)->state),
+ (int)(TLS_CHAN_TO_BASE(chan)->state));
+ /* see above comment about CHANNEL_STATE_ERROR */
+ connection_or_close_for_error(conn, 0);
+ return;
+ } else {
+ if (enter_v3_handshake_with_cell(var_cell, chan) < 0)
+ return;
+ }
+ break;
+ case OR_CONN_STATE_OR_HANDSHAKING_V3:
+ if (var_cell->command != CELL_AUTHENTICATE)
+ or_handshake_state_record_var_cell(conn, conn->handshake_state,
+ var_cell, 1);
+ break; /* Everything is allowed */
+ case OR_CONN_STATE_OPEN:
+ if (conn->link_proto < 3) {
+ log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
+ "Received a variable-length cell with command %d in orconn "
+ "state %s [%d], channel state %s [%d] with link protocol %d; "
+ "ignoring it.",
+ (int)(var_cell->command),
+ conn_state_to_string(CONN_TYPE_OR, TO_CONN(conn)->state),
+ (int)(TO_CONN(conn)->state),
+ channel_state_to_string(TLS_CHAN_TO_BASE(chan)->state),
+ (int)(TLS_CHAN_TO_BASE(chan)->state),
+ (int)(conn->link_proto));
+ return;
+ }
+ break;
+ default:
+ log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
+ "Received var-length cell with command %d in unexpected "
+ "orconn state \"%s\" [%d], channel state \"%s\" [%d]; "
+ "ignoring it.",
+ (int)(var_cell->command),
+ conn_state_to_string(CONN_TYPE_OR, TO_CONN(conn)->state),
+ (int)(TO_CONN(conn)->state),
+ channel_state_to_string(TLS_CHAN_TO_BASE(chan)->state),
+ (int)(TLS_CHAN_TO_BASE(chan)->state));
+ return;
+ }
+
+ /* Now handle the cell */
+
+ switch (var_cell->command) {
+ case CELL_VERSIONS:
+ ++stats_n_versions_cells_processed;
+ PROCESS_CELL(versions, var_cell, chan);
+ break;
+ case CELL_VPADDING:
+ ++stats_n_vpadding_cells_processed;
+ /* Do nothing */
+ break;
+ case CELL_CERTS:
+ ++stats_n_certs_cells_processed;
+ PROCESS_CELL(certs, var_cell, chan);
+ break;
+ case CELL_AUTH_CHALLENGE:
+ ++stats_n_auth_challenge_cells_processed;
+ PROCESS_CELL(auth_challenge, var_cell, chan);
+ break;
+ case CELL_AUTHENTICATE:
+ ++stats_n_authenticate_cells_processed;
+ PROCESS_CELL(authenticate, var_cell, chan);
+ break;
+ case CELL_AUTHORIZE:
+ ++stats_n_authorize_cells_processed;
+ /* Ignored so far. */
+ break;
+ default:
+ log_fn(LOG_INFO, LD_PROTOCOL,
+ "Variable-length cell of unknown type (%d) received.",
+ (int)(var_cell->command));
+ break;
+ }
+}
+
+/**
+ * Check if this cell type is allowed before the handshake is finished
+ *
+ * Return true if <b>command</b> is a cell command that's allowed to start a
+ * V3 handshake.
+ */
+
+static int
+command_allowed_before_handshake(uint8_t command)
+{
+ switch (command) {
+ case CELL_VERSIONS:
+ case CELL_VPADDING:
+ case CELL_AUTHORIZE:
+ return 1;
+ default:
+ return 0;
+ }
+}
+
+/**
+ * Start a V3 handshake on an incoming connection
+ *
+ * Called when we as a server receive an appropriate cell while waiting
+ * either for a cell or a TLS handshake. Set the connection's state to
+ * "handshaking_v3', initializes the or_handshake_state field as needed,
+ * and add the cell to the hash of incoming cells.)
+ */
+
+static int
+enter_v3_handshake_with_cell(var_cell_t *cell, channel_tls_t *chan)
+{
+ int started_here = 0;
+
+ tor_assert(cell);
+ tor_assert(chan);
+ tor_assert(chan->conn);
+
+ started_here = connection_or_nonopen_was_started_here(chan->conn);
+
+ tor_assert(TO_CONN(chan->conn)->state == OR_CONN_STATE_TLS_HANDSHAKING ||
+ TO_CONN(chan->conn)->state ==
+ OR_CONN_STATE_TLS_SERVER_RENEGOTIATING);
+
+ if (started_here) {
+ log_fn(LOG_PROTOCOL_WARN, LD_OR,
+ "Received a cell while TLS-handshaking, not in "
+ "OR_HANDSHAKING_V3, on a connection we originated.");
+ }
+ connection_or_block_renegotiation(chan->conn);
+ chan->conn->base_.state = OR_CONN_STATE_OR_HANDSHAKING_V3;
+ if (connection_init_or_handshake_state(chan->conn, started_here) < 0) {
+ connection_or_close_for_error(chan->conn, 0);
+ return -1;
+ }
+ or_handshake_state_record_var_cell(chan->conn,
+ chan->conn->handshake_state, cell, 1);
+ return 0;
+}
+
+/**
+ * Process a 'versions' cell.
+ *
+ * This function is called to handle an incoming VERSIONS cell; the current
+ * link protocol version must be 0 to indicate that no version has yet been
+ * negotiated. We compare the versions in the cell to the list of versions
+ * we support, pick the highest version we have in common, and continue the
+ * negotiation from there.
+ */
+
+static void
+channel_tls_process_versions_cell(var_cell_t *cell, channel_tls_t *chan)
+{
+ int highest_supported_version = 0;
+ int started_here = 0;
+
+ tor_assert(cell);
+ tor_assert(chan);
+ tor_assert(chan->conn);
+
+ if ((cell->payload_len % 2) == 1) {
+ log_fn(LOG_PROTOCOL_WARN, LD_OR,
+ "Received a VERSION cell with odd payload length %d; "
+ "closing connection.",cell->payload_len);
+ connection_or_close_for_error(chan->conn, 0);
+ return;
+ }
+
+ started_here = connection_or_nonopen_was_started_here(chan->conn);
+
+ if (chan->conn->link_proto != 0 ||
+ (chan->conn->handshake_state &&
+ chan->conn->handshake_state->received_versions)) {
+ log_fn(LOG_PROTOCOL_WARN, LD_OR,
+ "Received a VERSIONS cell on a connection with its version "
+ "already set to %d; dropping",
+ (int)(chan->conn->link_proto));
+ return;
+ }
+ switch (chan->conn->base_.state)
+ {
+ case OR_CONN_STATE_OR_HANDSHAKING_V2:
+ case OR_CONN_STATE_OR_HANDSHAKING_V3:
+ break;
+ case OR_CONN_STATE_TLS_HANDSHAKING:
+ case OR_CONN_STATE_TLS_SERVER_RENEGOTIATING:
+ default:
+ log_fn(LOG_PROTOCOL_WARN, LD_OR,
+ "VERSIONS cell while in unexpected state");
+ return;
+ }
+
+ tor_assert(chan->conn->handshake_state);
+
+ {
+ int i;
+ const uint8_t *cp = cell->payload;
+ for (i = 0; i < cell->payload_len / 2; ++i, cp += 2) {
+ uint16_t v = ntohs(get_uint16(cp));
+ if (is_or_protocol_version_known(v) && v > highest_supported_version)
+ highest_supported_version = v;
+ }
+ }
+ if (!highest_supported_version) {
+ log_fn(LOG_PROTOCOL_WARN, LD_OR,
+ "Couldn't find a version in common between my version list and the "
+ "list in the VERSIONS cell; closing connection.");
+ connection_or_close_for_error(chan->conn, 0);
+ return;
+ } else if (highest_supported_version == 1) {
+ /* Negotiating version 1 makes no sense, since version 1 has no VERSIONS
+ * cells. */
+ log_fn(LOG_PROTOCOL_WARN, LD_OR,
+ "Used version negotiation protocol to negotiate a v1 connection. "
+ "That's crazily non-compliant. Closing connection.");
+ connection_or_close_for_error(chan->conn, 0);
+ return;
+ } else if (highest_supported_version < 3 &&
+ chan->conn->base_.state == OR_CONN_STATE_OR_HANDSHAKING_V3) {
+ log_fn(LOG_PROTOCOL_WARN, LD_OR,
+ "Negotiated link protocol 2 or lower after doing a v3 TLS "
+ "handshake. Closing connection.");
+ connection_or_close_for_error(chan->conn, 0);
+ return;
+ } else if (highest_supported_version != 2 &&
+ chan->conn->base_.state == OR_CONN_STATE_OR_HANDSHAKING_V2) {
+ /* XXXX This should eventually be a log_protocol_warn */
+ log_fn(LOG_WARN, LD_OR,
+ "Negotiated link with non-2 protocol after doing a v2 TLS "
+ "handshake with %s. Closing connection.",
+ fmt_addr(&chan->conn->base_.addr));
+ connection_or_close_for_error(chan->conn, 0);
+ return;
+ }
+
+ chan->conn->link_proto = highest_supported_version;
+ chan->conn->handshake_state->received_versions = 1;
+
+ if (chan->conn->link_proto == 2) {
+ log_info(LD_OR,
+ "Negotiated version %d with %s:%d; sending NETINFO.",
+ highest_supported_version,
+ safe_str_client(chan->conn->base_.address),
+ chan->conn->base_.port);
+
+ if (connection_or_send_netinfo(chan->conn) < 0) {
+ connection_or_close_for_error(chan->conn, 0);
+ return;
+ }
+ } else {
+ const int send_versions = !started_here;
+ /* If we want to authenticate, send a CERTS cell */
+ const int send_certs = !started_here || public_server_mode(get_options());
+ /* If we're a host that got a connection, ask for authentication. */
+ const int send_chall = !started_here;
+ /* If our certs cell will authenticate us, we can send a netinfo cell
+ * right now. */
+ const int send_netinfo = !started_here;
+ const int send_any =
+ send_versions || send_certs || send_chall || send_netinfo;
+ tor_assert(chan->conn->link_proto >= 3);
+
+ log_info(LD_OR,
+ "Negotiated version %d with %s:%d; %s%s%s%s%s",
+ highest_supported_version,
+ safe_str_client(chan->conn->base_.address),
+ chan->conn->base_.port,
+ send_any ? "Sending cells:" : "Waiting for CERTS cell",
+ send_versions ? " VERSIONS" : "",
+ send_certs ? " CERTS" : "",
+ send_chall ? " AUTH_CHALLENGE" : "",
+ send_netinfo ? " NETINFO" : "");
+
+#ifdef DISABLE_V3_LINKPROTO_SERVERSIDE
+ if (1) {
+ connection_or_close_normally(chan->conn, 1);
+ return;
+ }
+#endif
+
+ if (send_versions) {
+ if (connection_or_send_versions(chan->conn, 1) < 0) {
+ log_warn(LD_OR, "Couldn't send versions cell");
+ connection_or_close_for_error(chan->conn, 0);
+ return;
+ }
+ }
+
+ /* We set this after sending the verions cell. */
+ /*XXXXX symbolic const.*/
+ chan->base_.wide_circ_ids =
+ chan->conn->link_proto >= MIN_LINK_PROTO_FOR_WIDE_CIRC_IDS;
+ chan->conn->wide_circ_ids = chan->base_.wide_circ_ids;
+
+ if (send_certs) {
+ if (connection_or_send_certs_cell(chan->conn) < 0) {
+ log_warn(LD_OR, "Couldn't send certs cell");
+ connection_or_close_for_error(chan->conn, 0);
+ return;
+ }
+ }
+ if (send_chall) {
+ if (connection_or_send_auth_challenge_cell(chan->conn) < 0) {
+ log_warn(LD_OR, "Couldn't send auth_challenge cell");
+ connection_or_close_for_error(chan->conn, 0);
+ return;
+ }
+ }
+ if (send_netinfo) {
+ if (connection_or_send_netinfo(chan->conn) < 0) {
+ log_warn(LD_OR, "Couldn't send netinfo cell");
+ connection_or_close_for_error(chan->conn, 0);
+ return;
+ }
+ }
+ }
+}
+
+/**
+ * Process a 'netinfo' cell
+ *
+ * This function is called to handle an incoming NETINFO cell; read and act
+ * on its contents, and set the connection state to "open".
+ */
+
+static void
+channel_tls_process_netinfo_cell(cell_t *cell, channel_tls_t *chan)
+{
+ time_t timestamp;
+ uint8_t my_addr_type;
+ uint8_t my_addr_len;
+ const uint8_t *my_addr_ptr;
+ const uint8_t *cp, *end;
+ uint8_t n_other_addrs;
+ time_t now = time(NULL);
+
+ long apparent_skew = 0;
+ tor_addr_t my_apparent_addr = TOR_ADDR_NULL;
+
+ tor_assert(cell);
+ tor_assert(chan);
+ tor_assert(chan->conn);
+
+ if (chan->conn->link_proto < 2) {
+ log_fn(LOG_PROTOCOL_WARN, LD_OR,
+ "Received a NETINFO cell on %s connection; dropping.",
+ chan->conn->link_proto == 0 ? "non-versioned" : "a v1");
+ return;
+ }
+ if (chan->conn->base_.state != OR_CONN_STATE_OR_HANDSHAKING_V2 &&
+ chan->conn->base_.state != OR_CONN_STATE_OR_HANDSHAKING_V3) {
+ log_fn(LOG_PROTOCOL_WARN, LD_OR,
+ "Received a NETINFO cell on non-handshaking connection; dropping.");
+ return;
+ }
+ tor_assert(chan->conn->handshake_state &&
+ chan->conn->handshake_state->received_versions);
+
+ if (chan->conn->base_.state == OR_CONN_STATE_OR_HANDSHAKING_V3) {
+ tor_assert(chan->conn->link_proto >= 3);
+ if (chan->conn->handshake_state->started_here) {
+ if (!(chan->conn->handshake_state->authenticated)) {
+ log_fn(LOG_PROTOCOL_WARN, LD_OR,
+ "Got a NETINFO cell from server, "
+ "but no authentication. Closing the connection.");
+ connection_or_close_for_error(chan->conn, 0);
+ return;
+ }
+ } else {
+ /* we're the server. If the client never authenticated, we have
+ some housekeeping to do.*/
+ if (!(chan->conn->handshake_state->authenticated)) {
+ tor_assert(tor_digest_is_zero(
+ (const char*)(chan->conn->handshake_state->
+ authenticated_peer_id)));
+ channel_set_circid_type(TLS_CHAN_TO_BASE(chan), NULL,
+ chan->conn->link_proto < MIN_LINK_PROTO_FOR_WIDE_CIRC_IDS);
+
+ connection_or_init_conn_from_address(chan->conn,
+ &(chan->conn->base_.addr),
+ chan->conn->base_.port,
+ (const char*)(chan->conn->handshake_state->
+ authenticated_peer_id),
+ 0);
+ }
+ }
+ }
+
+ /* Decode the cell. */
+ timestamp = ntohl(get_uint32(cell->payload));
+ if (labs(now - chan->conn->handshake_state->sent_versions_at) < 180) {
+ apparent_skew = now - timestamp;
+ }
+
+ my_addr_type = (uint8_t) cell->payload[4];
+ my_addr_len = (uint8_t) cell->payload[5];
+ my_addr_ptr = (uint8_t*) cell->payload + 6;
+ end = cell->payload + CELL_PAYLOAD_SIZE;
+ cp = cell->payload + 6 + my_addr_len;
+
+ /* We used to check:
+ * if (my_addr_len >= CELL_PAYLOAD_SIZE - 6) {
+ *
+ * This is actually never going to happen, since my_addr_len is at most 255,
+ * and CELL_PAYLOAD_LEN - 6 is 503. So we know that cp is < end. */
+
+ if (my_addr_type == RESOLVED_TYPE_IPV4 && my_addr_len == 4) {
+ tor_addr_from_ipv4n(&my_apparent_addr, get_uint32(my_addr_ptr));
+ } else if (my_addr_type == RESOLVED_TYPE_IPV6 && my_addr_len == 16) {
+ tor_addr_from_ipv6_bytes(&my_apparent_addr, (const char *) my_addr_ptr);
+ }
+
+ n_other_addrs = (uint8_t) *cp++;
+ while (n_other_addrs && cp < end-2) {
+ /* Consider all the other addresses; if any matches, this connection is
+ * "canonical." */
+ tor_addr_t addr;
+ const uint8_t *next =
+ decode_address_from_payload(&addr, cp, (int)(end-cp));
+ if (next == NULL) {
+ log_fn(LOG_PROTOCOL_WARN, LD_OR,
+ "Bad address in netinfo cell; closing connection.");
+ connection_or_close_for_error(chan->conn, 0);
+ return;
+ }
+ if (tor_addr_eq(&addr, &(chan->conn->real_addr))) {
+ chan->conn->is_canonical = 1;
+ break;
+ }
+ cp = next;
+ --n_other_addrs;
+ }
+
+ /* Act on apparent skew. */
+ /** Warn when we get a netinfo skew with at least this value. */
+#define NETINFO_NOTICE_SKEW 3600
+ if (labs(apparent_skew) > NETINFO_NOTICE_SKEW &&
+ router_get_by_id_digest(chan->conn->identity_digest)) {
+ char dbuf[64];
+ int severity;
+ /*XXXX be smarter about when everybody says we are skewed. */
+ if (router_digest_is_trusted_dir(chan->conn->identity_digest))
+ severity = LOG_WARN;
+ else
+ severity = LOG_INFO;
+ format_time_interval(dbuf, sizeof(dbuf), apparent_skew);
+ log_fn(severity, LD_GENERAL,
+ "Received NETINFO cell with skewed time from "
+ "server at %s:%d. It seems that our clock is %s by %s, or "
+ "that theirs is %s. Tor requires an accurate clock to work: "
+ "please check your time and date settings.",
+ chan->conn->base_.address,
+ (int)(chan->conn->base_.port),
+ apparent_skew > 0 ? "ahead" : "behind",
+ dbuf,
+ apparent_skew > 0 ? "behind" : "ahead");
+ if (severity == LOG_WARN) /* only tell the controller if an authority */
+ control_event_general_status(LOG_WARN,
+ "CLOCK_SKEW SKEW=%ld SOURCE=OR:%s:%d",
+ apparent_skew,
+ chan->conn->base_.address,
+ chan->conn->base_.port);
+ }
+
+ /* XXX maybe act on my_apparent_addr, if the source is sufficiently
+ * trustworthy. */
+
+ if (! chan->conn->handshake_state->sent_netinfo) {
+ /* If we were prepared to authenticate, but we never got an AUTH_CHALLENGE
+ * cell, then we would not previously have sent a NETINFO cell. Do so
+ * now. */
+ if (connection_or_send_netinfo(chan->conn) < 0) {
+ connection_or_close_for_error(chan->conn, 0);
+ return;
+ }
+ }
+
+ if (connection_or_set_state_open(chan->conn) < 0) {
+ log_fn(LOG_PROTOCOL_WARN, LD_OR,
+ "Got good NETINFO cell from %s:%d; but "
+ "was unable to make the OR connection become open.",
+ safe_str_client(chan->conn->base_.address),
+ chan->conn->base_.port);
+ connection_or_close_for_error(chan->conn, 0);
+ } else {
+ log_info(LD_OR,
+ "Got good NETINFO cell from %s:%d; OR connection is now "
+ "open, using protocol version %d. Its ID digest is %s. "
+ "Our address is apparently %s.",
+ safe_str_client(chan->conn->base_.address),
+ chan->conn->base_.port,
+ (int)(chan->conn->link_proto),
+ hex_str(TLS_CHAN_TO_BASE(chan)->identity_digest,
+ DIGEST_LEN),
+ tor_addr_is_null(&my_apparent_addr) ?
+ "<none>" : fmt_and_decorate_addr(&my_apparent_addr));
+ }
+ assert_connection_ok(TO_CONN(chan->conn),time(NULL));
+}
+
+/**
+ * Process a CERTS cell from a channel.
+ *
+ * This function is called to process an incoming CERTS cell on a
+ * channel_tls_t:
+ *
+ * If the other side should not have sent us a CERTS cell, or the cell is
+ * malformed, or it is supposed to authenticate the TLS key but it doesn't,
+ * then mark the connection.
+ *
+ * If the cell has a good cert chain and we're doing a v3 handshake, then
+ * store the certificates in or_handshake_state. If this is the client side
+ * of the connection, we then authenticate the server or mark the connection.
+ * If it's the server side, wait for an AUTHENTICATE cell.
+ */
+
+static void
+channel_tls_process_certs_cell(var_cell_t *cell, channel_tls_t *chan)
+{
+ tor_cert_t *link_cert = NULL;
+ tor_cert_t *id_cert = NULL;
+ tor_cert_t *auth_cert = NULL;
+ uint8_t *ptr;
+ int n_certs, i;
+ int send_netinfo = 0;
+
+ tor_assert(cell);
+ tor_assert(chan);
+ tor_assert(chan->conn);
+
+#define ERR(s) \
+ do { \
+ log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL, \
+ "Received a bad CERTS cell from %s:%d: %s", \
+ safe_str(chan->conn->base_.address), \
+ chan->conn->base_.port, (s)); \
+ connection_or_close_for_error(chan->conn, 0); \
+ goto err; \
+ } while (0)
+
+ if (chan->conn->base_.state != OR_CONN_STATE_OR_HANDSHAKING_V3)
+ ERR("We're not doing a v3 handshake!");
+ if (chan->conn->link_proto < 3)
+ ERR("We're not using link protocol >= 3");
+ if (chan->conn->handshake_state->received_certs_cell)
+ ERR("We already got one");
+ if (chan->conn->handshake_state->authenticated) {
+ /* Should be unreachable, but let's make sure. */
+ ERR("We're already authenticated!");
+ }
+ if (cell->payload_len < 1)
+ ERR("It had no body");
+ if (cell->circ_id)
+ ERR("It had a nonzero circuit ID");
+
+ n_certs = cell->payload[0];
+ ptr = cell->payload + 1;
+ for (i = 0; i < n_certs; ++i) {
+ uint8_t cert_type;
+ uint16_t cert_len;
+ if (cell->payload_len < 3)
+ goto truncated;
+ if (ptr > cell->payload + cell->payload_len - 3) {
+ goto truncated;
+ }
+ cert_type = *ptr;
+ cert_len = ntohs(get_uint16(ptr+1));
+ if (cell->payload_len < 3 + cert_len)
+ goto truncated;
+ if (ptr > cell->payload + cell->payload_len - cert_len - 3) {
+ goto truncated;
+ }
+ if (cert_type == OR_CERT_TYPE_TLS_LINK ||
+ cert_type == OR_CERT_TYPE_ID_1024 ||
+ cert_type == OR_CERT_TYPE_AUTH_1024) {
+ tor_cert_t *cert = tor_cert_decode(ptr + 3, cert_len);
+ if (!cert) {
+ log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
+ "Received undecodable certificate in CERTS cell from %s:%d",
+ safe_str(chan->conn->base_.address),
+ chan->conn->base_.port);
+ } else {
+ if (cert_type == OR_CERT_TYPE_TLS_LINK) {
+ if (link_cert) {
+ tor_cert_free(cert);
+ ERR("Too many TLS_LINK certificates");
+ }
+ link_cert = cert;
+ } else if (cert_type == OR_CERT_TYPE_ID_1024) {
+ if (id_cert) {
+ tor_cert_free(cert);
+ ERR("Too many ID_1024 certificates");
+ }
+ id_cert = cert;
+ } else if (cert_type == OR_CERT_TYPE_AUTH_1024) {
+ if (auth_cert) {
+ tor_cert_free(cert);
+ ERR("Too many AUTH_1024 certificates");
+ }
+ auth_cert = cert;
+ } else {
+ tor_cert_free(cert);
+ }
+ }
+ }
+ ptr += 3 + cert_len;
+ continue;
+
+ truncated:
+ ERR("It ends in the middle of a certificate");
+ }
+
+ if (chan->conn->handshake_state->started_here) {
+ int severity;
+ if (! (id_cert && link_cert))
+ ERR("The certs we wanted were missing");
+ /* Okay. We should be able to check the certificates now. */
+ if (! tor_tls_cert_matches_key(chan->conn->tls, link_cert)) {
+ ERR("The link certificate didn't match the TLS public key");
+ }
+ /* Note that this warns more loudly about time and validity if we were
+ * _trying_ to connect to an authority, not necessarily if we _did_ connect
+ * to one. */
+ if (router_digest_is_trusted_dir(
+ TLS_CHAN_TO_BASE(chan)->identity_digest))
+ severity = LOG_WARN;
+ else
+ severity = LOG_PROTOCOL_WARN;
+
+ if (! tor_tls_cert_is_valid(severity, link_cert, id_cert, 0))
+ ERR("The link certificate was not valid");
+ if (! tor_tls_cert_is_valid(severity, id_cert, id_cert, 1))
+ ERR("The ID certificate was not valid");
+
+ chan->conn->handshake_state->authenticated = 1;
+ {
+ const digests_t *id_digests = tor_cert_get_id_digests(id_cert);
+ crypto_pk_t *identity_rcvd;
+ if (!id_digests)
+ ERR("Couldn't compute digests for key in ID cert");
+
+ identity_rcvd = tor_tls_cert_get_key(id_cert);
+ if (!identity_rcvd)
+ ERR("Internal error: Couldn't get RSA key from ID cert.");
+ memcpy(chan->conn->handshake_state->authenticated_peer_id,
+ id_digests->d[DIGEST_SHA1], DIGEST_LEN);
+ channel_set_circid_type(TLS_CHAN_TO_BASE(chan), identity_rcvd,
+ chan->conn->link_proto < MIN_LINK_PROTO_FOR_WIDE_CIRC_IDS);
+ crypto_pk_free(identity_rcvd);
+ }
+
+ if (connection_or_client_learned_peer_id(chan->conn,
+ chan->conn->handshake_state->authenticated_peer_id) < 0)
+ ERR("Problem setting or checking peer id");
+
+ log_info(LD_OR,
+ "Got some good certificates from %s:%d: Authenticated it.",
+ safe_str(chan->conn->base_.address), chan->conn->base_.port);
+
+ chan->conn->handshake_state->id_cert = id_cert;
+ id_cert = NULL;
+
+ if (!public_server_mode(get_options())) {
+ /* If we initiated the connection and we are not a public server, we
+ * aren't planning to authenticate at all. At this point we know who we
+ * are talking to, so we can just send a netinfo now. */
+ send_netinfo = 1;
+ }
+ } else {
+ if (! (id_cert && auth_cert))
+ ERR("The certs we wanted were missing");
+
+ /* Remember these certificates so we can check an AUTHENTICATE cell */
+ if (! tor_tls_cert_is_valid(LOG_PROTOCOL_WARN, auth_cert, id_cert, 1))
+ ERR("The authentication certificate was not valid");
+ if (! tor_tls_cert_is_valid(LOG_PROTOCOL_WARN, id_cert, id_cert, 1))
+ ERR("The ID certificate was not valid");
+
+ log_info(LD_OR,
+ "Got some good certificates from %s:%d: "
+ "Waiting for AUTHENTICATE.",
+ safe_str(chan->conn->base_.address),
+ chan->conn->base_.port);
+ /* XXXX check more stuff? */
+
+ chan->conn->handshake_state->id_cert = id_cert;
+ chan->conn->handshake_state->auth_cert = auth_cert;
+ id_cert = auth_cert = NULL;
+ }
+
+ chan->conn->handshake_state->received_certs_cell = 1;
+
+ if (send_netinfo) {
+ if (connection_or_send_netinfo(chan->conn) < 0) {
+ log_warn(LD_OR, "Couldn't send netinfo cell");
+ connection_or_close_for_error(chan->conn, 0);
+ goto err;
+ }
+ }
+
+ err:
+ tor_cert_free(id_cert);
+ tor_cert_free(link_cert);
+ tor_cert_free(auth_cert);
+#undef ERR
+}
+
+/**
+ * Process an AUTH_CHALLENGE cell from a channel_tls_t
+ *
+ * This function is called to handle an incoming AUTH_CHALLENGE cell on a
+ * channel_tls_t; if we weren't supposed to get one (for example, because we're
+ * not the originator of the channel), or it's ill-formed, or we aren't doing
+ * a v3 handshake, mark the channel. If the cell is well-formed but we don't
+ * want to authenticate, just drop it. If the cell is well-formed *and* we
+ * want to authenticate, send an AUTHENTICATE cell and then a NETINFO cell.
+ */
+
+static void
+channel_tls_process_auth_challenge_cell(var_cell_t *cell, channel_tls_t *chan)
+{
+ int n_types, i, use_type = -1;
+ uint8_t *cp;
+
+ tor_assert(cell);
+ tor_assert(chan);
+ tor_assert(chan->conn);
+
+#define ERR(s) \
+ do { \
+ log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL, \
+ "Received a bad AUTH_CHALLENGE cell from %s:%d: %s", \
+ safe_str(chan->conn->base_.address), \
+ chan->conn->base_.port, (s)); \
+ connection_or_close_for_error(chan->conn, 0); \
+ return; \
+ } while (0)
+
+ if (chan->conn->base_.state != OR_CONN_STATE_OR_HANDSHAKING_V3)
+ ERR("We're not currently doing a v3 handshake");
+ if (chan->conn->link_proto < 3)
+ ERR("We're not using link protocol >= 3");
+ if (!(chan->conn->handshake_state->started_here))
+ ERR("We didn't originate this connection");
+ if (chan->conn->handshake_state->received_auth_challenge)
+ ERR("We already received one");
+ if (!(chan->conn->handshake_state->received_certs_cell))
+ ERR("We haven't gotten a CERTS cell yet");
+ if (cell->payload_len < OR_AUTH_CHALLENGE_LEN + 2)
+ ERR("It was too short");
+ if (cell->circ_id)
+ ERR("It had a nonzero circuit ID");
+
+ n_types = ntohs(get_uint16(cell->payload + OR_AUTH_CHALLENGE_LEN));
+ if (cell->payload_len < OR_AUTH_CHALLENGE_LEN + 2 + 2*n_types)
+ ERR("It looks truncated");
+
+ /* Now see if there is an authentication type we can use */
+ cp = cell->payload+OR_AUTH_CHALLENGE_LEN + 2;
+ for (i = 0; i < n_types; ++i, cp += 2) {
+ uint16_t authtype = ntohs(get_uint16(cp));
+ if (authtype == AUTHTYPE_RSA_SHA256_TLSSECRET)
+ use_type = authtype;
+ }
+
+ chan->conn->handshake_state->received_auth_challenge = 1;
+
+ if (! public_server_mode(get_options())) {
+ /* If we're not a public server then we don't want to authenticate on a
+ connection we originated, and we already sent a NETINFO cell when we
+ got the CERTS cell. We have nothing more to do. */
+ return;
+ }
+
+ if (use_type >= 0) {
+ log_info(LD_OR,
+ "Got an AUTH_CHALLENGE cell from %s:%d: Sending "
+ "authentication",
+ safe_str(chan->conn->base_.address),
+ chan->conn->base_.port);
+
+ if (connection_or_send_authenticate_cell(chan->conn, use_type) < 0) {
+ log_warn(LD_OR,
+ "Couldn't send authenticate cell");
+ connection_or_close_for_error(chan->conn, 0);
+ return;
+ }
+ } else {
+ log_info(LD_OR,
+ "Got an AUTH_CHALLENGE cell from %s:%d, but we don't "
+ "know any of its authentication types. Not authenticating.",
+ safe_str(chan->conn->base_.address),
+ chan->conn->base_.port);
+ }
+
+ if (connection_or_send_netinfo(chan->conn) < 0) {
+ log_warn(LD_OR, "Couldn't send netinfo cell");
+ connection_or_close_for_error(chan->conn, 0);
+ return;
+ }
+
+#undef ERR
+}
+
+/**
+ * Process an AUTHENTICATE cell from a channel_tls_t
+ *
+ * If it's ill-formed or we weren't supposed to get one or we're not doing a
+ * v3 handshake, then mark the connection. If it does not authenticate the
+ * other side of the connection successfully (because it isn't signed right,
+ * we didn't get a CERTS cell, etc) mark the connection. Otherwise, accept
+ * the identity of the router on the other side of the connection.
+ */
+
+static void
+channel_tls_process_authenticate_cell(var_cell_t *cell, channel_tls_t *chan)
+{
+ uint8_t expected[V3_AUTH_FIXED_PART_LEN];
+ const uint8_t *auth;
+ int authlen;
+
+ tor_assert(cell);
+ tor_assert(chan);
+ tor_assert(chan->conn);
+
+#define ERR(s) \
+ do { \
+ log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL, \
+ "Received a bad AUTHENTICATE cell from %s:%d: %s", \
+ safe_str(chan->conn->base_.address), \
+ chan->conn->base_.port, (s)); \
+ connection_or_close_for_error(chan->conn, 0); \
+ return; \
+ } while (0)
+
+ if (chan->conn->base_.state != OR_CONN_STATE_OR_HANDSHAKING_V3)
+ ERR("We're not doing a v3 handshake");
+ if (chan->conn->link_proto < 3)
+ ERR("We're not using link protocol >= 3");
+ if (chan->conn->handshake_state->started_here)
+ ERR("We originated this connection");
+ if (chan->conn->handshake_state->received_authenticate)
+ ERR("We already got one!");
+ if (chan->conn->handshake_state->authenticated) {
+ /* Should be impossible given other checks */
+ ERR("The peer is already authenticated");
+ }
+ if (!(chan->conn->handshake_state->received_certs_cell))
+ ERR("We never got a certs cell");
+ if (chan->conn->handshake_state->auth_cert == NULL)
+ ERR("We never got an authentication certificate");
+ if (chan->conn->handshake_state->id_cert == NULL)
+ ERR("We never got an identity certificate");
+ if (cell->payload_len < 4)
+ ERR("Cell was way too short");
+
+ auth = cell->payload;
+ {
+ uint16_t type = ntohs(get_uint16(auth));
+ uint16_t len = ntohs(get_uint16(auth+2));
+ if (4 + len > cell->payload_len)
+ ERR("Authenticator was truncated");
+
+ if (type != AUTHTYPE_RSA_SHA256_TLSSECRET)
+ ERR("Authenticator type was not recognized");
+
+ auth += 4;
+ authlen = len;
+ }
+
+ if (authlen < V3_AUTH_BODY_LEN + 1)
+ ERR("Authenticator was too short");
+
+ if (connection_or_compute_authenticate_cell_body(
+ chan->conn, expected, sizeof(expected), NULL, 1) < 0)
+ ERR("Couldn't compute expected AUTHENTICATE cell body");
+
+ if (tor_memneq(expected, auth, sizeof(expected)))
+ ERR("Some field in the AUTHENTICATE cell body was not as expected");
+
+ {
+ crypto_pk_t *pk = tor_tls_cert_get_key(
+ chan->conn->handshake_state->auth_cert);
+ char d[DIGEST256_LEN];
+ char *signed_data;
+ size_t keysize;
+ int signed_len;
+
+ if (!pk)
+ ERR("Internal error: couldn't get RSA key from AUTH cert.");
+ crypto_digest256(d, (char*)auth, V3_AUTH_BODY_LEN, DIGEST_SHA256);
+
+ keysize = crypto_pk_keysize(pk);
+ signed_data = tor_malloc(keysize);
+ signed_len = crypto_pk_public_checksig(pk, signed_data, keysize,
+ (char*)auth + V3_AUTH_BODY_LEN,
+ authlen - V3_AUTH_BODY_LEN);
+ crypto_pk_free(pk);
+ if (signed_len < 0) {
+ tor_free(signed_data);
+ ERR("Signature wasn't valid");
+ }
+ if (signed_len < DIGEST256_LEN) {
+ tor_free(signed_data);
+ ERR("Not enough data was signed");
+ }
+ /* Note that we deliberately allow *more* than DIGEST256_LEN bytes here,
+ * in case they're later used to hold a SHA3 digest or something. */
+ if (tor_memneq(signed_data, d, DIGEST256_LEN)) {
+ tor_free(signed_data);
+ ERR("Signature did not match data to be signed.");
+ }
+ tor_free(signed_data);
+ }
+
+ /* Okay, we are authenticated. */
+ chan->conn->handshake_state->received_authenticate = 1;
+ chan->conn->handshake_state->authenticated = 1;
+ chan->conn->handshake_state->digest_received_data = 0;
+ {
+ crypto_pk_t *identity_rcvd =
+ tor_tls_cert_get_key(chan->conn->handshake_state->id_cert);
+ const digests_t *id_digests =
+ tor_cert_get_id_digests(chan->conn->handshake_state->id_cert);
+
+ /* This must exist; we checked key type when reading the cert. */
+ tor_assert(id_digests);
+
+ memcpy(chan->conn->handshake_state->authenticated_peer_id,
+ id_digests->d[DIGEST_SHA1], DIGEST_LEN);
+
+ channel_set_circid_type(TLS_CHAN_TO_BASE(chan), identity_rcvd,
+ chan->conn->link_proto < MIN_LINK_PROTO_FOR_WIDE_CIRC_IDS);
+ crypto_pk_free(identity_rcvd);
+
+ connection_or_init_conn_from_address(chan->conn,
+ &(chan->conn->base_.addr),
+ chan->conn->base_.port,
+ (const char*)(chan->conn->handshake_state->
+ authenticated_peer_id),
+ 0);
+
+ log_info(LD_OR,
+ "Got an AUTHENTICATE cell from %s:%d: Looks good.",
+ safe_str(chan->conn->base_.address),
+ chan->conn->base_.port);
+ }
+
+#undef ERR
+}
+
diff --git a/src/or/channeltls.h b/src/or/channeltls.h
new file mode 100644
index 000000000..b4a7e2bea
--- /dev/null
+++ b/src/or/channeltls.h
@@ -0,0 +1,57 @@
+/* * Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file channeltls.h
+ * \brief Header file for channeltls.c
+ **/
+
+#ifndef TOR_CHANNELTLS_H
+#define TOR_CHANNELTLS_H
+
+#include "or.h"
+#include "channel.h"
+
+#define BASE_CHAN_TO_TLS(c) (channel_tls_from_base((c)))
+#define TLS_CHAN_TO_BASE(c) (channel_tls_to_base((c)))
+
+#define TLS_CHAN_MAGIC 0x8a192427U
+
+#ifdef TOR_CHANNEL_INTERNAL_
+
+struct channel_tls_s {
+ /* Base channel_t struct */
+ channel_t base_;
+ /* or_connection_t pointer */
+ or_connection_t *conn;
+};
+
+#endif /* TOR_CHANNEL_INTERNAL_ */
+
+channel_t * channel_tls_connect(const tor_addr_t *addr, uint16_t port,
+ const char *id_digest);
+channel_listener_t * channel_tls_get_listener(void);
+channel_listener_t * channel_tls_start_listener(void);
+channel_t * channel_tls_handle_incoming(or_connection_t *orconn);
+
+/* Casts */
+
+channel_t * channel_tls_to_base(channel_tls_t *tlschan);
+channel_tls_t * channel_tls_from_base(channel_t *chan);
+
+/* Things for connection_or.c to call back into */
+ssize_t channel_tls_flush_some_cells(channel_tls_t *chan, ssize_t num_cells);
+int channel_tls_more_to_flush(channel_tls_t *chan);
+void channel_tls_handle_cell(cell_t *cell, or_connection_t *conn);
+void channel_tls_handle_state_change_on_orconn(channel_tls_t *chan,
+ or_connection_t *conn,
+ uint8_t old_state,
+ uint8_t state);
+void channel_tls_handle_var_cell(var_cell_t *var_cell,
+ or_connection_t *conn);
+
+/* Cleanup at shutdown */
+void channel_tls_free_all(void);
+
+#endif
+
diff --git a/src/or/circpathbias.c b/src/or/circpathbias.c
new file mode 100644
index 000000000..51a75cf50
--- /dev/null
+++ b/src/or/circpathbias.c
@@ -0,0 +1,1538 @@
+/* Copyright (c) 2001 Matej Pfajfar.
+ * Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#include "or.h"
+#include "channel.h"
+#include "circpathbias.h"
+#include "circuitbuild.h"
+#include "circuitlist.h"
+#include "circuituse.h"
+#include "circuitstats.h"
+#include "connection_edge.h"
+#include "config.h"
+#include "entrynodes.h"
+#include "networkstatus.h"
+#include "relay.h"
+
+static void pathbias_count_successful_close(origin_circuit_t *circ);
+static void pathbias_count_collapse(origin_circuit_t *circ);
+static void pathbias_count_use_failed(origin_circuit_t *circ);
+static void pathbias_measure_use_rate(entry_guard_t *guard);
+static void pathbias_measure_close_rate(entry_guard_t *guard);
+static void pathbias_scale_use_rates(entry_guard_t *guard);
+static void pathbias_scale_close_rates(entry_guard_t *guard);
+static int entry_guard_inc_circ_attempt_count(entry_guard_t *guard);
+
+/** Increment the number of times we successfully extended a circuit to
+ * <b>guard</b>, first checking if the failure rate is high enough that
+ * we should eliminate the guard. Return -1 if the guard looks no good;
+ * return 0 if the guard looks fine.
+ */
+static int
+entry_guard_inc_circ_attempt_count(entry_guard_t *guard)
+{
+ entry_guards_changed();
+
+ pathbias_measure_close_rate(guard);
+
+ if (guard->path_bias_disabled)
+ return -1;
+
+ pathbias_scale_close_rates(guard);
+ guard->circ_attempts++;
+
+ log_info(LD_CIRC, "Got success count %f/%f for guard %s ($%s)",
+ guard->circ_successes, guard->circ_attempts, guard->nickname,
+ hex_str(guard->identity, DIGEST_LEN));
+ return 0;
+}
+
+/** The minimum number of circuit attempts before we start
+ * thinking about warning about path bias and dropping guards */
+static int
+pathbias_get_min_circs(const or_options_t *options)
+{
+#define DFLT_PATH_BIAS_MIN_CIRC 150
+ if (options->PathBiasCircThreshold >= 5)
+ return options->PathBiasCircThreshold;
+ else
+ return networkstatus_get_param(NULL, "pb_mincircs",
+ DFLT_PATH_BIAS_MIN_CIRC,
+ 5, INT32_MAX);
+}
+
+/** The circuit success rate below which we issue a notice */
+static double
+pathbias_get_notice_rate(const or_options_t *options)
+{
+#define DFLT_PATH_BIAS_NOTICE_PCT 70
+ if (options->PathBiasNoticeRate >= 0.0)
+ return options->PathBiasNoticeRate;
+ else
+ return networkstatus_get_param(NULL, "pb_noticepct",
+ DFLT_PATH_BIAS_NOTICE_PCT, 0, 100)/100.0;
+}
+
+/* XXXX024 I'd like to have this be static again, but entrynodes.c needs it. */
+/** The circuit success rate below which we issue a warn */
+static double
+pathbias_get_warn_rate(const or_options_t *options)
+{
+#define DFLT_PATH_BIAS_WARN_PCT 50
+ if (options->PathBiasWarnRate >= 0.0)
+ return options->PathBiasWarnRate;
+ else
+ return networkstatus_get_param(NULL, "pb_warnpct",
+ DFLT_PATH_BIAS_WARN_PCT, 0, 100)/100.0;
+}
+
+/* XXXX024 I'd like to have this be static again, but entrynodes.c needs it. */
+/**
+ * The extreme rate is the rate at which we would drop the guard,
+ * if pb_dropguard is also set. Otherwise we just warn.
+ */
+double
+pathbias_get_extreme_rate(const or_options_t *options)
+{
+#define DFLT_PATH_BIAS_EXTREME_PCT 30
+ if (options->PathBiasExtremeRate >= 0.0)
+ return options->PathBiasExtremeRate;
+ else
+ return networkstatus_get_param(NULL, "pb_extremepct",
+ DFLT_PATH_BIAS_EXTREME_PCT, 0, 100)/100.0;
+}
+
+/* XXXX024 I'd like to have this be static again, but entrynodes.c needs it. */
+/**
+ * If 1, we actually disable use of guards that fall below
+ * the extreme_pct.
+ */
+int
+pathbias_get_dropguards(const or_options_t *options)
+{
+#define DFLT_PATH_BIAS_DROP_GUARDS 0
+ if (options->PathBiasDropGuards >= 0)
+ return options->PathBiasDropGuards;
+ else
+ return networkstatus_get_param(NULL, "pb_dropguards",
+ DFLT_PATH_BIAS_DROP_GUARDS, 0, 1);
+}
+
+/**
+ * This is the number of circuits at which we scale our
+ * counts by mult_factor/scale_factor. Note, this count is
+ * not exact, as we only perform the scaling in the event
+ * of no integer truncation.
+ */
+static int
+pathbias_get_scale_threshold(const or_options_t *options)
+{
+#define DFLT_PATH_BIAS_SCALE_THRESHOLD 300
+ if (options->PathBiasScaleThreshold >= 10)
+ return options->PathBiasScaleThreshold;
+ else
+ return networkstatus_get_param(NULL, "pb_scalecircs",
+ DFLT_PATH_BIAS_SCALE_THRESHOLD, 10,
+ INT32_MAX);
+}
+
+/**
+ * Compute the path bias scaling ratio from the consensus
+ * parameters pb_multfactor/pb_scalefactor.
+ *
+ * Returns a value in (0, 1.0] which we multiply our pathbias
+ * counts with to scale them down.
+ */
+static double
+pathbias_get_scale_ratio(const or_options_t *options)
+{
+ /*
+ * The scale factor is the denominator for our scaling
+ * of circuit counts for our path bias window.
+ *
+ * Note that our use of doubles for the path bias state
+ * file means that powers of 2 work best here.
+ */
+ int denominator = networkstatus_get_param(NULL, "pb_scalefactor",
+ 2, 2, INT32_MAX);
+ (void) options;
+ /**
+ * The mult factor is the numerator for our scaling
+ * of circuit counts for our path bias window. It
+ * allows us to scale by fractions.
+ */
+ return networkstatus_get_param(NULL, "pb_multfactor",
+ 1, 1, denominator)/((double)denominator);
+}
+
+/** The minimum number of circuit usage attempts before we start
+ * thinking about warning about path use bias and dropping guards */
+static int
+pathbias_get_min_use(const or_options_t *options)
+{
+#define DFLT_PATH_BIAS_MIN_USE 20
+ if (options->PathBiasUseThreshold >= 3)
+ return options->PathBiasUseThreshold;
+ else
+ return networkstatus_get_param(NULL, "pb_minuse",
+ DFLT_PATH_BIAS_MIN_USE,
+ 3, INT32_MAX);
+}
+
+/** The circuit use success rate below which we issue a notice */
+static double
+pathbias_get_notice_use_rate(const or_options_t *options)
+{
+#define DFLT_PATH_BIAS_NOTICE_USE_PCT 80
+ if (options->PathBiasNoticeUseRate >= 0.0)
+ return options->PathBiasNoticeUseRate;
+ else
+ return networkstatus_get_param(NULL, "pb_noticeusepct",
+ DFLT_PATH_BIAS_NOTICE_USE_PCT,
+ 0, 100)/100.0;
+}
+
+/**
+ * The extreme use rate is the rate at which we would drop the guard,
+ * if pb_dropguard is also set. Otherwise we just warn.
+ */
+double
+pathbias_get_extreme_use_rate(const or_options_t *options)
+{
+#define DFLT_PATH_BIAS_EXTREME_USE_PCT 60
+ if (options->PathBiasExtremeUseRate >= 0.0)
+ return options->PathBiasExtremeUseRate;
+ else
+ return networkstatus_get_param(NULL, "pb_extremeusepct",
+ DFLT_PATH_BIAS_EXTREME_USE_PCT,
+ 0, 100)/100.0;
+}
+
+/**
+ * This is the number of circuits at which we scale our
+ * use counts by mult_factor/scale_factor. Note, this count is
+ * not exact, as we only perform the scaling in the event
+ * of no integer truncation.
+ */
+static int
+pathbias_get_scale_use_threshold(const or_options_t *options)
+{
+#define DFLT_PATH_BIAS_SCALE_USE_THRESHOLD 100
+ if (options->PathBiasScaleUseThreshold >= 10)
+ return options->PathBiasScaleUseThreshold;
+ else
+ return networkstatus_get_param(NULL, "pb_scaleuse",
+ DFLT_PATH_BIAS_SCALE_USE_THRESHOLD,
+ 10, INT32_MAX);
+}
+
+/**
+ * Convert a Guard's path state to string.
+ */
+const char *
+pathbias_state_to_string(path_state_t state)
+{
+ switch (state) {
+ case PATH_STATE_NEW_CIRC:
+ return "new";
+ case PATH_STATE_BUILD_ATTEMPTED:
+ return "build attempted";
+ case PATH_STATE_BUILD_SUCCEEDED:
+ return "build succeeded";
+ case PATH_STATE_USE_ATTEMPTED:
+ return "use attempted";
+ case PATH_STATE_USE_SUCCEEDED:
+ return "use succeeded";
+ case PATH_STATE_USE_FAILED:
+ return "use failed";
+ case PATH_STATE_ALREADY_COUNTED:
+ return "already counted";
+ }
+
+ return "unknown";
+}
+
+/**
+ * This function decides if a circuit has progressed far enough to count
+ * as a circuit "attempt". As long as end-to-end tagging is possible,
+ * we assume the adversary will use it over hop-to-hop failure. Therefore,
+ * we only need to account bias for the last hop. This should make us
+ * much more resilient to ambient circuit failure, and also make that
+ * failure easier to measure (we only need to measure Exit failure rates).
+ */
+static int
+pathbias_is_new_circ_attempt(origin_circuit_t *circ)
+{
+#define N2N_TAGGING_IS_POSSIBLE
+#ifdef N2N_TAGGING_IS_POSSIBLE
+ /* cpath is a circular list. We want circs with more than one hop,
+ * and the second hop must be waiting for keys still (it's just
+ * about to get them). */
+ return circ->cpath &&
+ circ->cpath->next != circ->cpath &&
+ circ->cpath->next->state == CPATH_STATE_AWAITING_KEYS;
+#else
+ /* If tagging attacks are no longer possible, we probably want to
+ * count bias from the first hop. However, one could argue that
+ * timing-based tagging is still more useful than per-hop failure.
+ * In which case, we'd never want to use this.
+ */
+ return circ->cpath &&
+ circ->cpath->state == CPATH_STATE_AWAITING_KEYS;
+#endif
+}
+
+/**
+ * Decide if the path bias code should count a circuit.
+ *
+ * @returns 1 if we should count it, 0 otherwise.
+ */
+static int
+pathbias_should_count(origin_circuit_t *circ)
+{
+#define PATHBIAS_COUNT_INTERVAL (600)
+ static ratelim_t count_limit =
+ RATELIM_INIT(PATHBIAS_COUNT_INTERVAL);
+ char *rate_msg = NULL;
+
+ /* We can't do path bias accounting without entry guards.
+ * Testing and controller circuits also have no guards.
+ *
+ * We also don't count server-side rends, because their
+ * endpoint could be chosen maliciously.
+ * Similarly, we can't count client-side intro attempts,
+ * because clients can be manipulated into connecting to
+ * malicious intro points. */
+ if (get_options()->UseEntryGuards == 0 ||
+ circ->base_.purpose == CIRCUIT_PURPOSE_TESTING ||
+ circ->base_.purpose == CIRCUIT_PURPOSE_CONTROLLER ||
+ circ->base_.purpose == CIRCUIT_PURPOSE_S_CONNECT_REND ||
+ circ->base_.purpose == CIRCUIT_PURPOSE_S_REND_JOINED ||
+ (circ->base_.purpose >= CIRCUIT_PURPOSE_C_INTRODUCING &&
+ circ->base_.purpose <= CIRCUIT_PURPOSE_C_INTRODUCE_ACKED)) {
+
+ /* Check to see if the shouldcount result has changed due to a
+ * unexpected purpose change that would affect our results.
+ *
+ * The reason we check the path state too here is because for the
+ * cannibalized versions of these purposes, we count them as successful
+ * before their purpose change.
+ */
+ if (circ->pathbias_shouldcount == PATHBIAS_SHOULDCOUNT_COUNTED
+ && circ->path_state != PATH_STATE_ALREADY_COUNTED) {
+ log_info(LD_BUG,
+ "Circuit %d is now being ignored despite being counted "
+ "in the past. Purpose is %s, path state is %s",
+ circ->global_identifier,
+ circuit_purpose_to_string(circ->base_.purpose),
+ pathbias_state_to_string(circ->path_state));
+ }
+ circ->pathbias_shouldcount = PATHBIAS_SHOULDCOUNT_IGNORED;
+ return 0;
+ }
+
+ /* Completely ignore one hop circuits */
+ if (circ->build_state->onehop_tunnel ||
+ circ->build_state->desired_path_len == 1) {
+ /* Check for inconsistency */
+ if (circ->build_state->desired_path_len != 1 ||
+ !circ->build_state->onehop_tunnel) {
+ if ((rate_msg = rate_limit_log(&count_limit, approx_time()))) {
+ log_info(LD_BUG,
+ "One-hop circuit has length %d. Path state is %s. "
+ "Circuit is a %s currently %s.%s",
+ circ->build_state->desired_path_len,
+ pathbias_state_to_string(circ->path_state),
+ circuit_purpose_to_string(circ->base_.purpose),
+ circuit_state_to_string(circ->base_.state),
+ rate_msg);
+ tor_free(rate_msg);
+ }
+ tor_fragile_assert();
+ }
+
+ /* Check to see if the shouldcount result has changed due to a
+ * unexpected change that would affect our results */
+ if (circ->pathbias_shouldcount == PATHBIAS_SHOULDCOUNT_COUNTED) {
+ log_info(LD_BUG,
+ "One-hop circuit %d is now being ignored despite being counted "
+ "in the past. Purpose is %s, path state is %s",
+ circ->global_identifier,
+ circuit_purpose_to_string(circ->base_.purpose),
+ pathbias_state_to_string(circ->path_state));
+ }
+ circ->pathbias_shouldcount = PATHBIAS_SHOULDCOUNT_IGNORED;
+ return 0;
+ }
+
+ /* Check to see if the shouldcount result has changed due to a
+ * unexpected purpose change that would affect our results */
+ if (circ->pathbias_shouldcount == PATHBIAS_SHOULDCOUNT_IGNORED) {
+ log_info(LD_BUG,
+ "Circuit %d is now being counted despite being ignored "
+ "in the past. Purpose is %s, path state is %s",
+ circ->global_identifier,
+ circuit_purpose_to_string(circ->base_.purpose),
+ pathbias_state_to_string(circ->path_state));
+ }
+ circ->pathbias_shouldcount = PATHBIAS_SHOULDCOUNT_COUNTED;
+
+ return 1;
+}
+
+/**
+ * Check our circuit state to see if this is a successful circuit attempt.
+ * If so, record it in the current guard's path bias circ_attempt count.
+ *
+ * Also check for several potential error cases for bug #6475.
+ */
+int
+pathbias_count_build_attempt(origin_circuit_t *circ)
+{
+#define CIRC_ATTEMPT_NOTICE_INTERVAL (600)
+ static ratelim_t circ_attempt_notice_limit =
+ RATELIM_INIT(CIRC_ATTEMPT_NOTICE_INTERVAL);
+ char *rate_msg = NULL;
+
+ if (!pathbias_should_count(circ)) {
+ return 0;
+ }
+
+ if (pathbias_is_new_circ_attempt(circ)) {
+ /* Help track down the real cause of bug #6475: */
+ if (circ->has_opened && circ->path_state != PATH_STATE_BUILD_ATTEMPTED) {
+ if ((rate_msg = rate_limit_log(&circ_attempt_notice_limit,
+ approx_time()))) {
+ log_info(LD_BUG,
+ "Opened circuit is in strange path state %s. "
+ "Circuit is a %s currently %s.%s",
+ pathbias_state_to_string(circ->path_state),
+ circuit_purpose_to_string(circ->base_.purpose),
+ circuit_state_to_string(circ->base_.state),
+ rate_msg);
+ tor_free(rate_msg);
+ }
+ }
+
+ /* Don't re-count cannibalized circs.. */
+ if (!circ->has_opened) {
+ entry_guard_t *guard = NULL;
+
+ if (circ->cpath && circ->cpath->extend_info) {
+ guard = entry_guard_get_by_id_digest(
+ circ->cpath->extend_info->identity_digest);
+ } else if (circ->base_.n_chan) {
+ guard =
+ entry_guard_get_by_id_digest(circ->base_.n_chan->identity_digest);
+ }
+
+ if (guard) {
+ if (circ->path_state == PATH_STATE_NEW_CIRC) {
+ circ->path_state = PATH_STATE_BUILD_ATTEMPTED;
+
+ if (entry_guard_inc_circ_attempt_count(guard) < 0) {
+ /* Bogus guard; we already warned. */
+ return -END_CIRC_REASON_TORPROTOCOL;
+ }
+ } else {
+ if ((rate_msg = rate_limit_log(&circ_attempt_notice_limit,
+ approx_time()))) {
+ log_info(LD_BUG,
+ "Unopened circuit has strange path state %s. "
+ "Circuit is a %s currently %s.%s",
+ pathbias_state_to_string(circ->path_state),
+ circuit_purpose_to_string(circ->base_.purpose),
+ circuit_state_to_string(circ->base_.state),
+ rate_msg);
+ tor_free(rate_msg);
+ }
+ }
+ } else {
+ if ((rate_msg = rate_limit_log(&circ_attempt_notice_limit,
+ approx_time()))) {
+ log_info(LD_CIRC,
+ "Unopened circuit has no known guard. "
+ "Circuit is a %s currently %s.%s",
+ circuit_purpose_to_string(circ->base_.purpose),
+ circuit_state_to_string(circ->base_.state),
+ rate_msg);
+ tor_free(rate_msg);
+ }
+ }
+ }
+ }
+
+ return 0;
+}
+
+/**
+ * Check our circuit state to see if this is a successful circuit
+ * completion. If so, record it in the current guard's path bias
+ * success count.
+ *
+ * Also check for several potential error cases for bug #6475.
+ */
+void
+pathbias_count_build_success(origin_circuit_t *circ)
+{
+#define SUCCESS_NOTICE_INTERVAL (600)
+ static ratelim_t success_notice_limit =
+ RATELIM_INIT(SUCCESS_NOTICE_INTERVAL);
+ char *rate_msg = NULL;
+ entry_guard_t *guard = NULL;
+
+ if (!pathbias_should_count(circ)) {
+ return;
+ }
+
+ /* Don't count cannibalized/reused circs for path bias
+ * "build" success, since they get counted under "use" success. */
+ if (!circ->has_opened) {
+ if (circ->cpath && circ->cpath->extend_info) {
+ guard = entry_guard_get_by_id_digest(
+ circ->cpath->extend_info->identity_digest);
+ }
+
+ if (guard) {
+ if (circ->path_state == PATH_STATE_BUILD_ATTEMPTED) {
+ circ->path_state = PATH_STATE_BUILD_SUCCEEDED;
+ guard->circ_successes++;
+ entry_guards_changed();
+
+ log_info(LD_CIRC, "Got success count %f/%f for guard %s ($%s)",
+ guard->circ_successes, guard->circ_attempts,
+ guard->nickname, hex_str(guard->identity, DIGEST_LEN));
+ } else {
+ if ((rate_msg = rate_limit_log(&success_notice_limit,
+ approx_time()))) {
+ log_info(LD_BUG,
+ "Succeeded circuit is in strange path state %s. "
+ "Circuit is a %s currently %s.%s",
+ pathbias_state_to_string(circ->path_state),
+ circuit_purpose_to_string(circ->base_.purpose),
+ circuit_state_to_string(circ->base_.state),
+ rate_msg);
+ tor_free(rate_msg);
+ }
+ }
+
+ if (guard->circ_attempts < guard->circ_successes) {
+ log_notice(LD_BUG, "Unexpectedly high successes counts (%f/%f) "
+ "for guard %s ($%s)",
+ guard->circ_successes, guard->circ_attempts,
+ guard->nickname, hex_str(guard->identity, DIGEST_LEN));
+ }
+ /* In rare cases, CIRCUIT_PURPOSE_TESTING can get converted to
+ * CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT and have no guards here.
+ * No need to log that case. */
+ } else if (circ->base_.purpose != CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT) {
+ if ((rate_msg = rate_limit_log(&success_notice_limit,
+ approx_time()))) {
+ log_info(LD_CIRC,
+ "Completed circuit has no known guard. "
+ "Circuit is a %s currently %s.%s",
+ circuit_purpose_to_string(circ->base_.purpose),
+ circuit_state_to_string(circ->base_.state),
+ rate_msg);
+ tor_free(rate_msg);
+ }
+ }
+ } else {
+ if (circ->path_state < PATH_STATE_BUILD_SUCCEEDED) {
+ if ((rate_msg = rate_limit_log(&success_notice_limit,
+ approx_time()))) {
+ log_info(LD_BUG,
+ "Opened circuit is in strange path state %s. "
+ "Circuit is a %s currently %s.%s",
+ pathbias_state_to_string(circ->path_state),
+ circuit_purpose_to_string(circ->base_.purpose),
+ circuit_state_to_string(circ->base_.state),
+ rate_msg);
+ tor_free(rate_msg);
+ }
+ }
+ }
+}
+
+/**
+ * Record an attempt to use a circuit. Changes the circuit's
+ * path state and update its guard's usage counter.
+ *
+ * Used for path bias usage accounting.
+ */
+void
+pathbias_count_use_attempt(origin_circuit_t *circ)
+{
+ entry_guard_t *guard;
+
+ if (!pathbias_should_count(circ)) {
+ return;
+ }
+
+ if (circ->path_state < PATH_STATE_BUILD_SUCCEEDED) {
+ log_notice(LD_BUG,
+ "Used circuit is in strange path state %s. "
+ "Circuit is a %s currently %s.",
+ pathbias_state_to_string(circ->path_state),
+ circuit_purpose_to_string(circ->base_.purpose),
+ circuit_state_to_string(circ->base_.state));
+ } else if (circ->path_state < PATH_STATE_USE_ATTEMPTED) {
+ guard = entry_guard_get_by_id_digest(
+ circ->cpath->extend_info->identity_digest);
+ if (guard) {
+ pathbias_measure_use_rate(guard);
+ pathbias_scale_use_rates(guard);
+ guard->use_attempts++;
+ entry_guards_changed();
+
+ log_debug(LD_CIRC,
+ "Marked circuit %d (%f/%f) as used for guard %s ($%s).",
+ circ->global_identifier,
+ guard->use_successes, guard->use_attempts,
+ guard->nickname, hex_str(guard->identity, DIGEST_LEN));
+ }
+
+ circ->path_state = PATH_STATE_USE_ATTEMPTED;
+ } else {
+ /* Harmless but educational log message */
+ log_info(LD_CIRC,
+ "Used circuit %d is already in path state %s. "
+ "Circuit is a %s currently %s.",
+ circ->global_identifier,
+ pathbias_state_to_string(circ->path_state),
+ circuit_purpose_to_string(circ->base_.purpose),
+ circuit_state_to_string(circ->base_.state));
+ }
+
+ return;
+}
+
+/**
+ * Check the circuit's path state is appropriate and mark it as
+ * successfully used. Used for path bias usage accounting.
+ *
+ * We don't actually increment the guard's counters until
+ * pathbias_check_close(), because the circuit can still transition
+ * back to PATH_STATE_USE_ATTEMPTED if a stream fails later (this
+ * is done so we can probe the circuit for liveness at close).
+ */
+void
+pathbias_mark_use_success(origin_circuit_t *circ)
+{
+ if (!pathbias_should_count(circ)) {
+ return;
+ }
+
+ if (circ->path_state < PATH_STATE_USE_ATTEMPTED) {
+ log_notice(LD_BUG,
+ "Used circuit %d is in strange path state %s. "
+ "Circuit is a %s currently %s.",
+ circ->global_identifier,
+ pathbias_state_to_string(circ->path_state),
+ circuit_purpose_to_string(circ->base_.purpose),
+ circuit_state_to_string(circ->base_.state));
+
+ pathbias_count_use_attempt(circ);
+ }
+
+ /* We don't do any accounting at the guard until actual circuit close */
+ circ->path_state = PATH_STATE_USE_SUCCEEDED;
+
+ return;
+}
+
+/**
+ * If a stream ever detatches from a circuit in a retriable way,
+ * we need to mark this circuit as still needing either another
+ * successful stream, or in need of a probe.
+ *
+ * An adversary could let the first stream request succeed (ie the
+ * resolve), but then tag and timeout the remainder (via cell
+ * dropping), forcing them on new circuits.
+ *
+ * Rolling back the state will cause us to probe such circuits, which
+ * should lead to probe failures in the event of such tagging due to
+ * either unrecognized cells coming in while we wait for the probe,
+ * or the cipher state getting out of sync in the case of dropped cells.
+ */
+void
+pathbias_mark_use_rollback(origin_circuit_t *circ)
+{
+ if (circ->path_state == PATH_STATE_USE_SUCCEEDED) {
+ log_info(LD_CIRC,
+ "Rolling back pathbias use state to 'attempted' for detached "
+ "circuit %d", circ->global_identifier);
+ circ->path_state = PATH_STATE_USE_ATTEMPTED;
+ }
+}
+
+/**
+ * Actually count a circuit success towards a guard's usage counters
+ * if the path state is appropriate.
+ */
+static void
+pathbias_count_use_success(origin_circuit_t *circ)
+{
+ entry_guard_t *guard;
+
+ if (!pathbias_should_count(circ)) {
+ return;
+ }
+
+ if (circ->path_state != PATH_STATE_USE_SUCCEEDED) {
+ log_notice(LD_BUG,
+ "Successfully used circuit %d is in strange path state %s. "
+ "Circuit is a %s currently %s.",
+ circ->global_identifier,
+ pathbias_state_to_string(circ->path_state),
+ circuit_purpose_to_string(circ->base_.purpose),
+ circuit_state_to_string(circ->base_.state));
+ } else {
+ guard = entry_guard_get_by_id_digest(
+ circ->cpath->extend_info->identity_digest);
+ if (guard) {
+ guard->use_successes++;
+ entry_guards_changed();
+
+ if (guard->use_attempts < guard->use_successes) {
+ log_notice(LD_BUG, "Unexpectedly high use successes counts (%f/%f) "
+ "for guard %s=%s",
+ guard->use_successes, guard->use_attempts,
+ guard->nickname, hex_str(guard->identity, DIGEST_LEN));
+ }
+
+ log_debug(LD_CIRC,
+ "Marked circuit %d (%f/%f) as used successfully for guard "
+ "%s ($%s).",
+ circ->global_identifier, guard->use_successes,
+ guard->use_attempts, guard->nickname,
+ hex_str(guard->identity, DIGEST_LEN));
+ }
+ }
+
+ return;
+}
+
+/**
+ * Send a probe down a circuit that the client attempted to use,
+ * but for which the stream timed out/failed. The probe is a
+ * RELAY_BEGIN cell with a 0.a.b.c destination address, which
+ * the exit will reject and reply back, echoing that address.
+ *
+ * The reason for such probes is because it is possible to bias
+ * a user's paths simply by causing timeouts, and these timeouts
+ * are not possible to differentiate from unresponsive servers.
+ *
+ * The probe is sent at the end of the circuit lifetime for two
+ * reasons: to prevent cryptographic taggers from being able to
+ * drop cells to cause timeouts, and to prevent easy recognition
+ * of probes before any real client traffic happens.
+ *
+ * Returns -1 if we couldn't probe, 0 otherwise.
+ */
+static int
+pathbias_send_usable_probe(circuit_t *circ)
+{
+ /* Based on connection_ap_handshake_send_begin() */
+ char payload[CELL_PAYLOAD_SIZE];
+ int payload_len;
+ origin_circuit_t *ocirc = TO_ORIGIN_CIRCUIT(circ);
+ crypt_path_t *cpath_layer = NULL;
+ char *probe_nonce = NULL;
+
+ tor_assert(ocirc);
+
+ cpath_layer = ocirc->cpath->prev;
+
+ if (cpath_layer->state != CPATH_STATE_OPEN) {
+ /* This can happen for cannibalized circuits. Their
+ * last hop isn't yet open */
+ log_info(LD_CIRC,
+ "Got pathbias probe request for unopened circuit %d. "
+ "Opened %d, len %d", ocirc->global_identifier,
+ ocirc->has_opened, ocirc->build_state->desired_path_len);
+ return -1;
+ }
+
+ /* We already went down this road. */
+ if (circ->purpose == CIRCUIT_PURPOSE_PATH_BIAS_TESTING &&
+ ocirc->pathbias_probe_id) {
+ log_info(LD_CIRC,
+ "Got pathbias probe request for circuit %d with "
+ "outstanding probe", ocirc->global_identifier);
+ return -1;
+ }
+
+ /* Can't probe if the channel isn't open */
+ if (circ->n_chan == NULL ||
+ (circ->n_chan->state != CHANNEL_STATE_OPEN
+ && circ->n_chan->state != CHANNEL_STATE_MAINT)) {
+ log_info(LD_CIRC,
+ "Skipping pathbias probe for circuit %d: Channel is not open.",
+ ocirc->global_identifier);
+ return -1;
+ }
+
+ circuit_change_purpose(circ, CIRCUIT_PURPOSE_PATH_BIAS_TESTING);
+
+ /* Update timestamp for when circuit_expire_building() should kill us */
+ tor_gettimeofday(&circ->timestamp_began);
+
+ /* Generate a random address for the nonce */
+ crypto_rand((char*)&ocirc->pathbias_probe_nonce,
+ sizeof(ocirc->pathbias_probe_nonce));
+ ocirc->pathbias_probe_nonce &= 0x00ffffff;
+ probe_nonce = tor_dup_ip(ocirc->pathbias_probe_nonce);
+
+ tor_snprintf(payload,RELAY_PAYLOAD_SIZE, "%s:25", probe_nonce);
+ payload_len = (int)strlen(payload)+1;
+
+ // XXX: need this? Can we assume ipv4 will always be supported?
+ // If not, how do we tell?
+ //if (payload_len <= RELAY_PAYLOAD_SIZE - 4 && edge_conn->begincell_flags) {
+ // set_uint32(payload + payload_len, htonl(edge_conn->begincell_flags));
+ // payload_len += 4;
+ //}
+
+ /* Generate+Store stream id, make sure it's non-zero */
+ ocirc->pathbias_probe_id = get_unique_stream_id_by_circ(ocirc);
+
+ if (ocirc->pathbias_probe_id==0) {
+ log_warn(LD_CIRC,
+ "Ran out of stream IDs on circuit %u during "
+ "pathbias probe attempt.", ocirc->global_identifier);
+ tor_free(probe_nonce);
+ return -1;
+ }
+
+ log_info(LD_CIRC,
+ "Sending pathbias testing cell to %s:25 on stream %d for circ %d.",
+ probe_nonce, ocirc->pathbias_probe_id, ocirc->global_identifier);
+ tor_free(probe_nonce);
+
+ /* Send a test relay cell */
+ if (relay_send_command_from_edge(ocirc->pathbias_probe_id, circ,
+ RELAY_COMMAND_BEGIN, payload,
+ payload_len, cpath_layer) < 0) {
+ log_notice(LD_CIRC,
+ "Failed to send pathbias probe cell on circuit %d.",
+ ocirc->global_identifier);
+ return -1;
+ }
+
+ /* Mark it freshly dirty so it doesn't get expired in the meantime */
+ circ->timestamp_dirty = time(NULL);
+
+ return 0;
+}
+
+/**
+ * Check the response to a pathbias probe, to ensure the
+ * cell is recognized and the nonce and other probe
+ * characteristics are as expected.
+ *
+ * If the response is valid, return 0. Otherwise return < 0.
+ */
+int
+pathbias_check_probe_response(circuit_t *circ, const cell_t *cell)
+{
+ /* Based on connection_edge_process_relay_cell() */
+ relay_header_t rh;
+ int reason;
+ uint32_t ipv4_host;
+ origin_circuit_t *ocirc = TO_ORIGIN_CIRCUIT(circ);
+
+ tor_assert(cell);
+ tor_assert(ocirc);
+ tor_assert(circ->purpose == CIRCUIT_PURPOSE_PATH_BIAS_TESTING);
+
+ relay_header_unpack(&rh, cell->payload);
+
+ reason = rh.length > 0 ?
+ get_uint8(cell->payload+RELAY_HEADER_SIZE) : END_STREAM_REASON_MISC;
+
+ if (rh.command == RELAY_COMMAND_END &&
+ reason == END_STREAM_REASON_EXITPOLICY &&
+ ocirc->pathbias_probe_id == rh.stream_id) {
+
+ /* Check length+extract host: It is in network order after the reason code.
+ * See connection_edge_end(). */
+ if (rh.length < 9) { /* reason+ipv4+dns_ttl */
+ log_notice(LD_PROTOCOL,
+ "Short path bias probe response length field (%d).", rh.length);
+ return - END_CIRC_REASON_TORPROTOCOL;
+ }
+
+ ipv4_host = ntohl(get_uint32(cell->payload+RELAY_HEADER_SIZE+1));
+
+ /* Check nonce */
+ if (ipv4_host == ocirc->pathbias_probe_nonce) {
+ pathbias_mark_use_success(ocirc);
+ circuit_mark_for_close(circ, END_CIRC_REASON_FINISHED);
+ log_info(LD_CIRC,
+ "Got valid path bias probe back for circ %d, stream %d.",
+ ocirc->global_identifier, ocirc->pathbias_probe_id);
+ return 0;
+ } else {
+ log_notice(LD_CIRC,
+ "Got strange probe value 0x%x vs 0x%x back for circ %d, "
+ "stream %d.", ipv4_host, ocirc->pathbias_probe_nonce,
+ ocirc->global_identifier, ocirc->pathbias_probe_id);
+ return -1;
+ }
+ }
+ log_info(LD_CIRC,
+ "Got another cell back back on pathbias probe circuit %d: "
+ "Command: %d, Reason: %d, Stream-id: %d",
+ ocirc->global_identifier, rh.command, reason, rh.stream_id);
+ return -1;
+}
+
+/**
+ * Check if a circuit was used and/or closed successfully.
+ *
+ * If we attempted to use the circuit to carry a stream but failed
+ * for whatever reason, or if the circuit mysteriously died before
+ * we could attach any streams, record these two cases.
+ *
+ * If we *have* successfully used the circuit, or it appears to
+ * have been closed by us locally, count it as a success.
+ *
+ * Returns 0 if we're done making decisions with the circ,
+ * or -1 if we want to probe it first.
+ */
+int
+pathbias_check_close(origin_circuit_t *ocirc, int reason)
+{
+ circuit_t *circ = &ocirc->base_;
+
+ if (!pathbias_should_count(ocirc)) {
+ return 0;
+ }
+
+ switch (ocirc->path_state) {
+ /* If the circuit was closed after building, but before use, we need
+ * to ensure we were the ones who tried to close it (and not a remote
+ * actor). */
+ case PATH_STATE_BUILD_SUCCEEDED:
+ if (reason & END_CIRC_REASON_FLAG_REMOTE) {
+ /* Remote circ close reasons on an unused circuit all could be bias */
+ log_info(LD_CIRC,
+ "Circuit %d remote-closed without successful use for reason %d. "
+ "Circuit purpose %d currently %d,%s. Len %d.",
+ ocirc->global_identifier,
+ reason, circ->purpose, ocirc->has_opened,
+ circuit_state_to_string(circ->state),
+ ocirc->build_state->desired_path_len);
+ pathbias_count_collapse(ocirc);
+ } else if ((reason & ~END_CIRC_REASON_FLAG_REMOTE)
+ == END_CIRC_REASON_CHANNEL_CLOSED &&
+ circ->n_chan &&
+ circ->n_chan->reason_for_closing
+ != CHANNEL_CLOSE_REQUESTED) {
+ /* If we didn't close the channel ourselves, it could be bias */
+ /* XXX: Only count bias if the network is live?
+ * What about clock jumps/suspends? */
+ log_info(LD_CIRC,
+ "Circuit %d's channel closed without successful use for reason "
+ "%d, channel reason %d. Circuit purpose %d currently %d,%s. Len "
+ "%d.", ocirc->global_identifier,
+ reason, circ->n_chan->reason_for_closing,
+ circ->purpose, ocirc->has_opened,
+ circuit_state_to_string(circ->state),
+ ocirc->build_state->desired_path_len);
+ pathbias_count_collapse(ocirc);
+ } else {
+ pathbias_count_successful_close(ocirc);
+ }
+ break;
+
+ /* If we tried to use a circuit but failed, we should probe it to ensure
+ * it has not been tampered with. */
+ case PATH_STATE_USE_ATTEMPTED:
+ /* XXX: Only probe and/or count failure if the network is live?
+ * What about clock jumps/suspends? */
+ if (pathbias_send_usable_probe(circ) == 0)
+ return -1;
+ else
+ pathbias_count_use_failed(ocirc);
+
+ /* Any circuit where there were attempted streams but no successful
+ * streams could be bias */
+ log_info(LD_CIRC,
+ "Circuit %d closed without successful use for reason %d. "
+ "Circuit purpose %d currently %d,%s. Len %d.",
+ ocirc->global_identifier,
+ reason, circ->purpose, ocirc->has_opened,
+ circuit_state_to_string(circ->state),
+ ocirc->build_state->desired_path_len);
+ break;
+
+ case PATH_STATE_USE_SUCCEEDED:
+ pathbias_count_successful_close(ocirc);
+ pathbias_count_use_success(ocirc);
+ break;
+
+ case PATH_STATE_USE_FAILED:
+ pathbias_count_use_failed(ocirc);
+ break;
+
+ case PATH_STATE_NEW_CIRC:
+ case PATH_STATE_BUILD_ATTEMPTED:
+ case PATH_STATE_ALREADY_COUNTED:
+ default:
+ // Other states are uninteresting. No stats to count.
+ break;
+ }
+
+ ocirc->path_state = PATH_STATE_ALREADY_COUNTED;
+
+ return 0;
+}
+
+/**
+ * Count a successfully closed circuit.
+ */
+static void
+pathbias_count_successful_close(origin_circuit_t *circ)
+{
+ entry_guard_t *guard = NULL;
+ if (!pathbias_should_count(circ)) {
+ return;
+ }
+
+ if (circ->cpath && circ->cpath->extend_info) {
+ guard = entry_guard_get_by_id_digest(
+ circ->cpath->extend_info->identity_digest);
+ }
+
+ if (guard) {
+ /* In the long run: circuit_success ~= successful_circuit_close +
+ * circ_failure + stream_failure */
+ guard->successful_circuits_closed++;
+ entry_guards_changed();
+ } else if (circ->base_.purpose != CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT) {
+ /* In rare cases, CIRCUIT_PURPOSE_TESTING can get converted to
+ * CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT and have no guards here.
+ * No need to log that case. */
+ log_info(LD_CIRC,
+ "Successfully closed circuit has no known guard. "
+ "Circuit is a %s currently %s",
+ circuit_purpose_to_string(circ->base_.purpose),
+ circuit_state_to_string(circ->base_.state));
+ }
+}
+
+/**
+ * Count a circuit that fails after it is built, but before it can
+ * carry any traffic.
+ *
+ * This is needed because there are ways to destroy a
+ * circuit after it has successfully completed. Right now, this is
+ * used for purely informational/debugging purposes.
+ */
+static void
+pathbias_count_collapse(origin_circuit_t *circ)
+{
+ entry_guard_t *guard = NULL;
+
+ if (!pathbias_should_count(circ)) {
+ return;
+ }
+
+ if (circ->cpath && circ->cpath->extend_info) {
+ guard = entry_guard_get_by_id_digest(
+ circ->cpath->extend_info->identity_digest);
+ }
+
+ if (guard) {
+ guard->collapsed_circuits++;
+ entry_guards_changed();
+ } else if (circ->base_.purpose != CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT) {
+ /* In rare cases, CIRCUIT_PURPOSE_TESTING can get converted to
+ * CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT and have no guards here.
+ * No need to log that case. */
+ log_info(LD_CIRC,
+ "Destroyed circuit has no known guard. "
+ "Circuit is a %s currently %s",
+ circuit_purpose_to_string(circ->base_.purpose),
+ circuit_state_to_string(circ->base_.state));
+ }
+}
+
+/**
+ * Count a known failed circuit (because we could not probe it).
+ *
+ * This counter is informational.
+ */
+static void
+pathbias_count_use_failed(origin_circuit_t *circ)
+{
+ entry_guard_t *guard = NULL;
+ if (!pathbias_should_count(circ)) {
+ return;
+ }
+
+ if (circ->cpath && circ->cpath->extend_info) {
+ guard = entry_guard_get_by_id_digest(
+ circ->cpath->extend_info->identity_digest);
+ }
+
+ if (guard) {
+ guard->unusable_circuits++;
+ entry_guards_changed();
+ } else if (circ->base_.purpose != CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT) {
+ /* In rare cases, CIRCUIT_PURPOSE_TESTING can get converted to
+ * CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT and have no guards here.
+ * No need to log that case. */
+ /* XXX note cut-and-paste code in this function compared to nearby
+ * functions. Would be nice to refactor. -RD */
+ log_info(LD_CIRC,
+ "Stream-failing circuit has no known guard. "
+ "Circuit is a %s currently %s",
+ circuit_purpose_to_string(circ->base_.purpose),
+ circuit_state_to_string(circ->base_.state));
+ }
+}
+
+/**
+ * Count timeouts for path bias log messages.
+ *
+ * These counts are purely informational.
+ */
+void
+pathbias_count_timeout(origin_circuit_t *circ)
+{
+ entry_guard_t *guard = NULL;
+
+ if (!pathbias_should_count(circ)) {
+ return;
+ }
+
+ /* For hidden service circs, they can actually be used
+ * successfully and then time out later (because
+ * the other side declines to use them). */
+ if (circ->path_state == PATH_STATE_USE_SUCCEEDED) {
+ return;
+ }
+
+ if (circ->cpath && circ->cpath->extend_info) {
+ guard = entry_guard_get_by_id_digest(
+ circ->cpath->extend_info->identity_digest);
+ }
+
+ if (guard) {
+ guard->timeouts++;
+ entry_guards_changed();
+ }
+}
+
+/**
+ * Helper function to count all of the currently opened circuits
+ * for a guard that are in a given path state range. The state
+ * range is inclusive on both ends.
+ */
+static int
+pathbias_count_circs_in_states(entry_guard_t *guard,
+ path_state_t from,
+ path_state_t to)
+{
+ circuit_t *circ;
+ int open_circuits = 0;
+
+ /* Count currently open circuits. Give them the benefit of the doubt. */
+ TOR_LIST_FOREACH(circ, circuit_get_global_list(), head) {
+ origin_circuit_t *ocirc = NULL;
+ if (!CIRCUIT_IS_ORIGIN(circ) || /* didn't originate here */
+ circ->marked_for_close) /* already counted */
+ continue;
+
+ ocirc = TO_ORIGIN_CIRCUIT(circ);
+
+ if (!ocirc->cpath || !ocirc->cpath->extend_info)
+ continue;
+
+ if (ocirc->path_state >= from &&
+ ocirc->path_state <= to &&
+ pathbias_should_count(ocirc) &&
+ fast_memeq(guard->identity,
+ ocirc->cpath->extend_info->identity_digest,
+ DIGEST_LEN)) {
+ log_debug(LD_CIRC, "Found opened circuit %d in path_state %s",
+ ocirc->global_identifier,
+ pathbias_state_to_string(ocirc->path_state));
+ open_circuits++;
+ }
+ }
+
+ return open_circuits;
+}
+
+/**
+ * Return the number of circuits counted as successfully closed for
+ * this guard.
+ *
+ * Also add in the currently open circuits to give them the benefit
+ * of the doubt.
+ */
+double
+pathbias_get_close_success_count(entry_guard_t *guard)
+{
+ return guard->successful_circuits_closed +
+ pathbias_count_circs_in_states(guard,
+ PATH_STATE_BUILD_SUCCEEDED,
+ PATH_STATE_USE_SUCCEEDED);
+}
+
+/**
+ * Return the number of circuits counted as successfully used
+ * this guard.
+ *
+ * Also add in the currently open circuits that we are attempting
+ * to use to give them the benefit of the doubt.
+ */
+double
+pathbias_get_use_success_count(entry_guard_t *guard)
+{
+ return guard->use_successes +
+ pathbias_count_circs_in_states(guard,
+ PATH_STATE_USE_ATTEMPTED,
+ PATH_STATE_USE_SUCCEEDED);
+}
+
+/**
+ * Check the path bias use rate against our consensus parameter limits.
+ *
+ * Emits a log message if the use success rates are too low.
+ *
+ * If pathbias_get_dropguards() is set, we also disable the use of
+ * very failure prone guards.
+ */
+static void
+pathbias_measure_use_rate(entry_guard_t *guard)
+{
+ const or_options_t *options = get_options();
+
+ if (guard->use_attempts > pathbias_get_min_use(options)) {
+ /* Note: We rely on the < comparison here to allow us to set a 0
+ * rate and disable the feature entirely. If refactoring, don't
+ * change to <= */
+ if (pathbias_get_use_success_count(guard)/guard->use_attempts
+ < pathbias_get_extreme_use_rate(options)) {
+ /* Dropping is currently disabled by default. */
+ if (pathbias_get_dropguards(options)) {
+ if (!guard->path_bias_disabled) {
+ log_warn(LD_CIRC,
+ "Your Guard %s ($%s) is failing to carry an extremely large "
+ "amount of stream on its circuits. "
+ "To avoid potential route manipulation attacks, Tor has "
+ "disabled use of this guard. "
+ "Use counts are %ld/%ld. Success counts are %ld/%ld. "
+ "%ld circuits completed, %ld were unusable, %ld collapsed, "
+ "and %ld timed out. "
+ "For reference, your timeout cutoff is %ld seconds.",
+ guard->nickname, hex_str(guard->identity, DIGEST_LEN),
+ tor_lround(pathbias_get_use_success_count(guard)),
+ tor_lround(guard->use_attempts),
+ tor_lround(pathbias_get_close_success_count(guard)),
+ tor_lround(guard->circ_attempts),
+ tor_lround(guard->circ_successes),
+ tor_lround(guard->unusable_circuits),
+ tor_lround(guard->collapsed_circuits),
+ tor_lround(guard->timeouts),
+ tor_lround(get_circuit_build_close_time_ms()/1000));
+ guard->path_bias_disabled = 1;
+ guard->bad_since = approx_time();
+ entry_guards_changed();
+ return;
+ }
+ } else if (!guard->path_bias_use_extreme) {
+ guard->path_bias_use_extreme = 1;
+ log_warn(LD_CIRC,
+ "Your Guard %s ($%s) is failing to carry an extremely large "
+ "amount of streams on its circuits. "
+ "This could indicate a route manipulation attack, network "
+ "overload, bad local network connectivity, or a bug. "
+ "Use counts are %ld/%ld. Success counts are %ld/%ld. "
+ "%ld circuits completed, %ld were unusable, %ld collapsed, "
+ "and %ld timed out. "
+ "For reference, your timeout cutoff is %ld seconds.",
+ guard->nickname, hex_str(guard->identity, DIGEST_LEN),
+ tor_lround(pathbias_get_use_success_count(guard)),
+ tor_lround(guard->use_attempts),
+ tor_lround(pathbias_get_close_success_count(guard)),
+ tor_lround(guard->circ_attempts),
+ tor_lround(guard->circ_successes),
+ tor_lround(guard->unusable_circuits),
+ tor_lround(guard->collapsed_circuits),
+ tor_lround(guard->timeouts),
+ tor_lround(get_circuit_build_close_time_ms()/1000));
+ }
+ } else if (pathbias_get_use_success_count(guard)/guard->use_attempts
+ < pathbias_get_notice_use_rate(options)) {
+ if (!guard->path_bias_use_noticed) {
+ guard->path_bias_use_noticed = 1;
+ log_notice(LD_CIRC,
+ "Your Guard %s ($%s) is failing to carry more streams on its "
+ "circuits than usual. "
+ "Most likely this means the Tor network is overloaded "
+ "or your network connection is poor. "
+ "Use counts are %ld/%ld. Success counts are %ld/%ld. "
+ "%ld circuits completed, %ld were unusable, %ld collapsed, "
+ "and %ld timed out. "
+ "For reference, your timeout cutoff is %ld seconds.",
+ guard->nickname, hex_str(guard->identity, DIGEST_LEN),
+ tor_lround(pathbias_get_use_success_count(guard)),
+ tor_lround(guard->use_attempts),
+ tor_lround(pathbias_get_close_success_count(guard)),
+ tor_lround(guard->circ_attempts),
+ tor_lround(guard->circ_successes),
+ tor_lround(guard->unusable_circuits),
+ tor_lround(guard->collapsed_circuits),
+ tor_lround(guard->timeouts),
+ tor_lround(get_circuit_build_close_time_ms()/1000));
+ }
+ }
+ }
+}
+
+/**
+ * Check the path bias circuit close status rates against our consensus
+ * parameter limits.
+ *
+ * Emits a log message if the use success rates are too low.
+ *
+ * If pathbias_get_dropguards() is set, we also disable the use of
+ * very failure prone guards.
+ *
+ * XXX: This function shares similar log messages and checks to
+ * pathbias_measure_use_rate(). It may be possible to combine them
+ * eventually, especially if we can ever remove the need for 3
+ * levels of closure warns (if the overall circuit failure rate
+ * goes down with ntor). One way to do so would be to multiply
+ * the build rate with the use rate to get an idea of the total
+ * fraction of the total network paths the user is able to use.
+ * See ticket #8159.
+ */
+static void
+pathbias_measure_close_rate(entry_guard_t *guard)
+{
+ const or_options_t *options = get_options();
+
+ if (guard->circ_attempts > pathbias_get_min_circs(options)) {
+ /* Note: We rely on the < comparison here to allow us to set a 0
+ * rate and disable the feature entirely. If refactoring, don't
+ * change to <= */
+ if (pathbias_get_close_success_count(guard)/guard->circ_attempts
+ < pathbias_get_extreme_rate(options)) {
+ /* Dropping is currently disabled by default. */
+ if (pathbias_get_dropguards(options)) {
+ if (!guard->path_bias_disabled) {
+ log_warn(LD_CIRC,
+ "Your Guard %s ($%s) is failing an extremely large "
+ "amount of circuits. "
+ "To avoid potential route manipulation attacks, Tor has "
+ "disabled use of this guard. "
+ "Success counts are %ld/%ld. Use counts are %ld/%ld. "
+ "%ld circuits completed, %ld were unusable, %ld collapsed, "
+ "and %ld timed out. "
+ "For reference, your timeout cutoff is %ld seconds.",
+ guard->nickname, hex_str(guard->identity, DIGEST_LEN),
+ tor_lround(pathbias_get_close_success_count(guard)),
+ tor_lround(guard->circ_attempts),
+ tor_lround(pathbias_get_use_success_count(guard)),
+ tor_lround(guard->use_attempts),
+ tor_lround(guard->circ_successes),
+ tor_lround(guard->unusable_circuits),
+ tor_lround(guard->collapsed_circuits),
+ tor_lround(guard->timeouts),
+ tor_lround(get_circuit_build_close_time_ms()/1000));
+ guard->path_bias_disabled = 1;
+ guard->bad_since = approx_time();
+ entry_guards_changed();
+ return;
+ }
+ } else if (!guard->path_bias_extreme) {
+ guard->path_bias_extreme = 1;
+ log_warn(LD_CIRC,
+ "Your Guard %s ($%s) is failing an extremely large "
+ "amount of circuits. "
+ "This could indicate a route manipulation attack, "
+ "extreme network overload, or a bug. "
+ "Success counts are %ld/%ld. Use counts are %ld/%ld. "
+ "%ld circuits completed, %ld were unusable, %ld collapsed, "
+ "and %ld timed out. "
+ "For reference, your timeout cutoff is %ld seconds.",
+ guard->nickname, hex_str(guard->identity, DIGEST_LEN),
+ tor_lround(pathbias_get_close_success_count(guard)),
+ tor_lround(guard->circ_attempts),
+ tor_lround(pathbias_get_use_success_count(guard)),
+ tor_lround(guard->use_attempts),
+ tor_lround(guard->circ_successes),
+ tor_lround(guard->unusable_circuits),
+ tor_lround(guard->collapsed_circuits),
+ tor_lround(guard->timeouts),
+ tor_lround(get_circuit_build_close_time_ms()/1000));
+ }
+ } else if (pathbias_get_close_success_count(guard)/guard->circ_attempts
+ < pathbias_get_warn_rate(options)) {
+ if (!guard->path_bias_warned) {
+ guard->path_bias_warned = 1;
+ log_warn(LD_CIRC,
+ "Your Guard %s ($%s) is failing a very large "
+ "amount of circuits. "
+ "Most likely this means the Tor network is "
+ "overloaded, but it could also mean an attack against "
+ "you or potentially the guard itself. "
+ "Success counts are %ld/%ld. Use counts are %ld/%ld. "
+ "%ld circuits completed, %ld were unusable, %ld collapsed, "
+ "and %ld timed out. "
+ "For reference, your timeout cutoff is %ld seconds.",
+ guard->nickname, hex_str(guard->identity, DIGEST_LEN),
+ tor_lround(pathbias_get_close_success_count(guard)),
+ tor_lround(guard->circ_attempts),
+ tor_lround(pathbias_get_use_success_count(guard)),
+ tor_lround(guard->use_attempts),
+ tor_lround(guard->circ_successes),
+ tor_lround(guard->unusable_circuits),
+ tor_lround(guard->collapsed_circuits),
+ tor_lround(guard->timeouts),
+ tor_lround(get_circuit_build_close_time_ms()/1000));
+ }
+ } else if (pathbias_get_close_success_count(guard)/guard->circ_attempts
+ < pathbias_get_notice_rate(options)) {
+ if (!guard->path_bias_noticed) {
+ guard->path_bias_noticed = 1;
+ log_notice(LD_CIRC,
+ "Your Guard %s ($%s) is failing more circuits than "
+ "usual. "
+ "Most likely this means the Tor network is overloaded. "
+ "Success counts are %ld/%ld. Use counts are %ld/%ld. "
+ "%ld circuits completed, %ld were unusable, %ld collapsed, "
+ "and %ld timed out. "
+ "For reference, your timeout cutoff is %ld seconds.",
+ guard->nickname, hex_str(guard->identity, DIGEST_LEN),
+ tor_lround(pathbias_get_close_success_count(guard)),
+ tor_lround(guard->circ_attempts),
+ tor_lround(pathbias_get_use_success_count(guard)),
+ tor_lround(guard->use_attempts),
+ tor_lround(guard->circ_successes),
+ tor_lround(guard->unusable_circuits),
+ tor_lround(guard->collapsed_circuits),
+ tor_lround(guard->timeouts),
+ tor_lround(get_circuit_build_close_time_ms()/1000));
+ }
+ }
+ }
+}
+
+/**
+ * This function scales the path bias use rates if we have
+ * more data than the scaling threshold. This allows us to
+ * be more sensitive to recent measurements.
+ *
+ * XXX: The attempt count transfer stuff here might be done
+ * better by keeping separate pending counters that get
+ * transfered at circuit close. See ticket #8160.
+ */
+static void
+pathbias_scale_close_rates(entry_guard_t *guard)
+{
+ const or_options_t *options = get_options();
+
+ /* If we get a ton of circuits, just scale everything down */
+ if (guard->circ_attempts > pathbias_get_scale_threshold(options)) {
+ double scale_ratio = pathbias_get_scale_ratio(options);
+ int opened_attempts = pathbias_count_circs_in_states(guard,
+ PATH_STATE_BUILD_ATTEMPTED, PATH_STATE_BUILD_ATTEMPTED);
+ int opened_built = pathbias_count_circs_in_states(guard,
+ PATH_STATE_BUILD_SUCCEEDED,
+ PATH_STATE_USE_FAILED);
+ /* Verify that the counts are sane before and after scaling */
+ int counts_are_sane = (guard->circ_attempts >= guard->circ_successes);
+
+ guard->circ_attempts -= (opened_attempts+opened_built);
+ guard->circ_successes -= opened_built;
+
+ guard->circ_attempts *= scale_ratio;
+ guard->circ_successes *= scale_ratio;
+ guard->timeouts *= scale_ratio;
+ guard->successful_circuits_closed *= scale_ratio;
+ guard->collapsed_circuits *= scale_ratio;
+ guard->unusable_circuits *= scale_ratio;
+
+ guard->circ_attempts += (opened_attempts+opened_built);
+ guard->circ_successes += opened_built;
+
+ entry_guards_changed();
+
+ log_info(LD_CIRC,
+ "Scaled pathbias counts to (%f,%f)/%f (%d/%d open) for guard "
+ "%s ($%s)",
+ guard->circ_successes, guard->successful_circuits_closed,
+ guard->circ_attempts, opened_built, opened_attempts,
+ guard->nickname, hex_str(guard->identity, DIGEST_LEN));
+
+ /* Have the counts just become invalid by this scaling attempt? */
+ if (counts_are_sane && guard->circ_attempts < guard->circ_successes) {
+ log_notice(LD_BUG,
+ "Scaling has mangled pathbias counts to %f/%f (%d/%d open) "
+ "for guard %s ($%s)",
+ guard->circ_successes, guard->circ_attempts, opened_built,
+ opened_attempts, guard->nickname,
+ hex_str(guard->identity, DIGEST_LEN));
+ }
+ }
+}
+
+/**
+ * This function scales the path bias circuit close rates if we have
+ * more data than the scaling threshold. This allows us to be more
+ * sensitive to recent measurements.
+ *
+ * XXX: The attempt count transfer stuff here might be done
+ * better by keeping separate pending counters that get
+ * transfered at circuit close. See ticket #8160.
+ */
+void
+pathbias_scale_use_rates(entry_guard_t *guard)
+{
+ const or_options_t *options = get_options();
+
+ /* If we get a ton of circuits, just scale everything down */
+ if (guard->use_attempts > pathbias_get_scale_use_threshold(options)) {
+ double scale_ratio = pathbias_get_scale_ratio(options);
+ int opened_attempts = pathbias_count_circs_in_states(guard,
+ PATH_STATE_USE_ATTEMPTED, PATH_STATE_USE_SUCCEEDED);
+ /* Verify that the counts are sane before and after scaling */
+ int counts_are_sane = (guard->use_attempts >= guard->use_successes);
+
+ guard->use_attempts -= opened_attempts;
+
+ guard->use_attempts *= scale_ratio;
+ guard->use_successes *= scale_ratio;
+
+ guard->use_attempts += opened_attempts;
+
+ log_info(LD_CIRC,
+ "Scaled pathbias use counts to %f/%f (%d open) for guard %s ($%s)",
+ guard->use_successes, guard->use_attempts, opened_attempts,
+ guard->nickname, hex_str(guard->identity, DIGEST_LEN));
+
+ /* Have the counts just become invalid by this scaling attempt? */
+ if (counts_are_sane && guard->use_attempts < guard->use_successes) {
+ log_notice(LD_BUG,
+ "Scaling has mangled pathbias usage counts to %f/%f "
+ "(%d open) for guard %s ($%s)",
+ guard->circ_successes, guard->circ_attempts,
+ opened_attempts, guard->nickname,
+ hex_str(guard->identity, DIGEST_LEN));
+ }
+
+ entry_guards_changed();
+ }
+}
+
diff --git a/src/or/circpathbias.h b/src/or/circpathbias.h
new file mode 100644
index 000000000..c95d801a4
--- /dev/null
+++ b/src/or/circpathbias.h
@@ -0,0 +1,29 @@
+/* Copyright (c) 2001 Matej Pfajfar.
+ * Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file circuitbuild.h
+ * \brief Header file for circuitbuild.c.
+ **/
+
+#ifndef TOR_CIRCPATHBIAS_H
+#define TOR_CIRCPATHBIAS_H
+
+double pathbias_get_extreme_rate(const or_options_t *options);
+double pathbias_get_extreme_use_rate(const or_options_t *options);
+int pathbias_get_dropguards(const or_options_t *options);
+void pathbias_count_timeout(origin_circuit_t *circ);
+void pathbias_count_build_success(origin_circuit_t *circ);
+int pathbias_count_build_attempt(origin_circuit_t *circ);
+int pathbias_check_close(origin_circuit_t *circ, int reason);
+int pathbias_check_probe_response(circuit_t *circ, const cell_t *cell);
+void pathbias_count_use_attempt(origin_circuit_t *circ);
+void pathbias_mark_use_success(origin_circuit_t *circ);
+void pathbias_mark_use_rollback(origin_circuit_t *circ);
+const char *pathbias_state_to_string(path_state_t state);
+
+#endif
+
diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c
index f8521c5cf..9d06759de 100644
--- a/src/or/circuitbuild.c
+++ b/src/or/circuitbuild.c
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,22 +9,31 @@
* \brief The actual details of building circuits.
**/
-#define CIRCUIT_PRIVATE
+#define CIRCUITBUILD_PRIVATE
#include "or.h"
+#include "channel.h"
+#include "circpathbias.h"
#include "circuitbuild.h"
#include "circuitlist.h"
+#include "circuitstats.h"
#include "circuituse.h"
+#include "command.h"
#include "config.h"
+#include "confparse.h"
#include "connection.h"
#include "connection_edge.h"
#include "connection_or.h"
#include "control.h"
#include "directory.h"
+#include "entrynodes.h"
#include "main.h"
+#include "microdesc.h"
#include "networkstatus.h"
#include "nodelist.h"
#include "onion.h"
+#include "onion_tap.h"
+#include "onion_fast.h"
#include "policies.h"
#include "transports.h"
#include "relay.h"
@@ -32,1684 +41,120 @@
#include "router.h"
#include "routerlist.h"
#include "routerparse.h"
+#include "routerset.h"
#include "crypto.h"
-#undef log
-#include <math.h>
#ifndef MIN
#define MIN(a,b) ((a)<(b)?(a):(b))
#endif
-#define CBT_BIN_TO_MS(bin) ((bin)*CBT_BIN_WIDTH + (CBT_BIN_WIDTH/2))
-
-/********* START VARIABLES **********/
-/** Global list of circuit build times */
-// XXXX: Add this as a member for entry_guard_t instead of global?
-// Then we could do per-guard statistics, as guards are likely to
-// vary in their own latency. The downside of this is that guards
-// can change frequently, so we'd be building a lot more circuits
-// most likely.
-/* XXXX024 Make this static; add accessor functions. */
-circuit_build_times_t circ_times;
-
-/** A global list of all circuits at this hop. */
-extern circuit_t *global_circuitlist;
-
-/** An entry_guard_t represents our information about a chosen long-term
- * first hop, known as a "helper" node in the literature. We can't just
- * use a node_t, since we want to remember these even when we
- * don't have any directory info. */
-typedef struct {
- char nickname[MAX_NICKNAME_LEN+1];
- char identity[DIGEST_LEN];
- time_t chosen_on_date; /**< Approximately when was this guard added?
- * "0" if we don't know. */
- char *chosen_by_version; /**< What tor version added this guard? NULL
- * if we don't know. */
- unsigned int made_contact : 1; /**< 0 if we have never connected to this
- * router, 1 if we have. */
- unsigned int can_retry : 1; /**< Should we retry connecting to this entry,
- * in spite of having it marked as unreachable?*/
- unsigned int path_bias_notice : 1; /**< Did we alert the user about path bias
- * for this node already? */
- unsigned int path_bias_disabled : 1; /**< Have we disabled this node because
- * of path bias issues? */
- time_t bad_since; /**< 0 if this guard is currently usable, or the time at
- * which it was observed to become (according to the
- * directory or the user configuration) unusable. */
- time_t unreachable_since; /**< 0 if we can connect to this guard, or the
- * time at which we first noticed we couldn't
- * connect to it. */
- time_t last_attempted; /**< 0 if we can connect to this guard, or the time
- * at which we last failed to connect to it. */
-
- unsigned first_hops; /**< Number of first hops this guard has completed */
- unsigned circuit_successes; /**< Number of successfully built circuits using
- * this guard as first hop. */
-} entry_guard_t;
-
-/** Information about a configured bridge. Currently this just matches the
- * ones in the torrc file, but one day we may be able to learn about new
- * bridges on our own, and remember them in the state file. */
-typedef struct {
- /** Address of the bridge. */
- tor_addr_t addr;
- /** TLS port for the bridge. */
- uint16_t port;
- /** Boolean: We are re-parsing our bridge list, and we are going to remove
- * this one if we don't find it in the list of configured bridges. */
- unsigned marked_for_removal : 1;
- /** Expected identity digest, or all zero bytes if we don't know what the
- * digest should be. */
- char identity[DIGEST_LEN];
-
- /** Name of pluggable transport protocol taken from its config line. */
- char *transport_name;
-
- /** When should we next try to fetch a descriptor for this bridge? */
- download_status_t fetch_status;
-} bridge_info_t;
-
-/** A list of our chosen entry guards. */
-static smartlist_t *entry_guards = NULL;
-/** A value of 1 means that the entry_guards list has changed
- * and those changes need to be flushed to disk. */
-static int entry_guards_dirty = 0;
-
-/** If set, we're running the unit tests: we should avoid clobbering
- * our state file or accessing get_options() or get_or_state() */
-static int unit_tests = 0;
-
-/********* END VARIABLES ************/
-
+static channel_t * channel_connect_for_circuit(const tor_addr_t *addr,
+ uint16_t port,
+ const char *id_digest);
static int circuit_deliver_create_cell(circuit_t *circ,
- uint8_t cell_type, const char *payload);
+ const create_cell_t *create_cell,
+ int relayed);
static int onion_pick_cpath_exit(origin_circuit_t *circ, extend_info_t *exit);
static crypt_path_t *onion_next_hop_in_cpath(crypt_path_t *cpath);
static int onion_extend_cpath(origin_circuit_t *circ);
static int count_acceptable_nodes(smartlist_t *routers);
static int onion_append_hop(crypt_path_t **head_ptr, extend_info_t *choice);
-
-static void entry_guards_changed(void);
-static entry_guard_t *entry_guard_get_by_id_digest(const char *digest);
-
-static void bridge_free(bridge_info_t *bridge);
-
-static int entry_guard_inc_first_hop_count(entry_guard_t *guard);
-static void pathbias_count_success(origin_circuit_t *circ);
-
-/**
- * This function decides if CBT learning should be disabled. It returns
- * true if one or more of the following four conditions are met:
- *
- * 1. If the cbtdisabled consensus parameter is set.
- * 2. If the torrc option LearnCircuitBuildTimeout is false.
- * 3. If we are a directory authority
- * 4. If we fail to write circuit build time history to our state file.
- */
-static int
-circuit_build_times_disabled(void)
-{
- if (unit_tests) {
- return 0;
- } else {
- int consensus_disabled = networkstatus_get_param(NULL, "cbtdisabled",
- 0, 0, 1);
- int config_disabled = !get_options()->LearnCircuitBuildTimeout;
- int dirauth_disabled = get_options()->AuthoritativeDir;
- int state_disabled = did_last_state_file_write_fail() ? 1 : 0;
-
- if (consensus_disabled || config_disabled || dirauth_disabled ||
- state_disabled) {
- log_debug(LD_CIRC,
- "CircuitBuildTime learning is disabled. "
- "Consensus=%d, Config=%d, AuthDir=%d, StateFile=%d",
- consensus_disabled, config_disabled, dirauth_disabled,
- state_disabled);
- return 1;
- } else {
- log_debug(LD_CIRC,
- "CircuitBuildTime learning is not disabled. "
- "Consensus=%d, Config=%d, AuthDir=%d, StateFile=%d",
- consensus_disabled, config_disabled, dirauth_disabled,
- state_disabled);
- return 0;
- }
- }
-}
-
-/**
- * Retrieve and bounds-check the cbtmaxtimeouts consensus paramter.
- *
- * Effect: When this many timeouts happen in the last 'cbtrecentcount'
- * circuit attempts, the client should discard all of its history and
- * begin learning a fresh timeout value.
- */
-static int32_t
-circuit_build_times_max_timeouts(void)
-{
- int32_t cbt_maxtimeouts;
-
- cbt_maxtimeouts = networkstatus_get_param(NULL, "cbtmaxtimeouts",
- CBT_DEFAULT_MAX_RECENT_TIMEOUT_COUNT,
- CBT_MIN_MAX_RECENT_TIMEOUT_COUNT,
- CBT_MAX_MAX_RECENT_TIMEOUT_COUNT);
-
- if (!(get_options()->LearnCircuitBuildTimeout)) {
- log_debug(LD_BUG,
- "circuit_build_times_max_timeouts() called, cbtmaxtimeouts is"
- " %d",
- cbt_maxtimeouts);
- }
-
- return cbt_maxtimeouts;
-}
-
-/**
- * Retrieve and bounds-check the cbtnummodes consensus paramter.
- *
- * Effect: This value governs how many modes to use in the weighted
- * average calculation of Pareto parameter Xm. A value of 3 introduces
- * some bias (2-5% of CDF) under ideal conditions, but allows for better
- * performance in the event that a client chooses guard nodes of radically
- * different performance characteristics.
- */
-static int32_t
-circuit_build_times_default_num_xm_modes(void)
-{
- int32_t num = networkstatus_get_param(NULL, "cbtnummodes",
- CBT_DEFAULT_NUM_XM_MODES,
- CBT_MIN_NUM_XM_MODES,
- CBT_MAX_NUM_XM_MODES);
-
- if (!(get_options()->LearnCircuitBuildTimeout)) {
- log_debug(LD_BUG,
- "circuit_build_times_default_num_xm_modes() called, cbtnummodes"
- " is %d",
- num);
- }
-
- return num;
-}
-
-/**
- * Retrieve and bounds-check the cbtmincircs consensus paramter.
- *
- * Effect: This is the minimum number of circuits to build before
- * computing a timeout.
- */
-static int32_t
-circuit_build_times_min_circs_to_observe(void)
-{
- int32_t num = networkstatus_get_param(NULL, "cbtmincircs",
- CBT_DEFAULT_MIN_CIRCUITS_TO_OBSERVE,
- CBT_MIN_MIN_CIRCUITS_TO_OBSERVE,
- CBT_MAX_MIN_CIRCUITS_TO_OBSERVE);
-
- if (!(get_options()->LearnCircuitBuildTimeout)) {
- log_debug(LD_BUG,
- "circuit_build_times_min_circs_to_observe() called, cbtmincircs"
- " is %d",
- num);
- }
-
- return num;
-}
-
-/** Return true iff <b>cbt</b> has recorded enough build times that we
- * want to start acting on the timeout it implies. */
-int
-circuit_build_times_enough_to_compute(circuit_build_times_t *cbt)
-{
- return cbt->total_build_times >= circuit_build_times_min_circs_to_observe();
-}
-
-/**
- * Retrieve and bounds-check the cbtquantile consensus paramter.
- *
- * Effect: This is the position on the quantile curve to use to set the
- * timeout value. It is a percent (10-99).
- */
-double
-circuit_build_times_quantile_cutoff(void)
-{
- int32_t num = networkstatus_get_param(NULL, "cbtquantile",
- CBT_DEFAULT_QUANTILE_CUTOFF,
- CBT_MIN_QUANTILE_CUTOFF,
- CBT_MAX_QUANTILE_CUTOFF);
-
- if (!(get_options()->LearnCircuitBuildTimeout)) {
- log_debug(LD_BUG,
- "circuit_build_times_quantile_cutoff() called, cbtquantile"
- " is %d",
- num);
- }
-
- return num/100.0;
-}
-
-/* DOCDOC circuit_build_times_get_bw_scale */
-int
-circuit_build_times_get_bw_scale(networkstatus_t *ns)
-{
- return networkstatus_get_param(ns, "bwweightscale",
- BW_WEIGHT_SCALE,
- BW_MIN_WEIGHT_SCALE,
- BW_MAX_WEIGHT_SCALE);
-}
-
-/**
- * Retrieve and bounds-check the cbtclosequantile consensus paramter.
- *
- * Effect: This is the position on the quantile curve to use to set the
- * timeout value to use to actually close circuits. It is a percent
- * (0-99).
- */
-static double
-circuit_build_times_close_quantile(void)
-{
- int32_t param;
- /* Cast is safe - circuit_build_times_quantile_cutoff() is capped */
- int32_t min = (int)tor_lround(100*circuit_build_times_quantile_cutoff());
- param = networkstatus_get_param(NULL, "cbtclosequantile",
- CBT_DEFAULT_CLOSE_QUANTILE,
- CBT_MIN_CLOSE_QUANTILE,
- CBT_MAX_CLOSE_QUANTILE);
-
- if (!(get_options()->LearnCircuitBuildTimeout)) {
- log_debug(LD_BUG,
- "circuit_build_times_close_quantile() called, cbtclosequantile"
- " is %d", param);
- }
-
- if (param < min) {
- log_warn(LD_DIR, "Consensus parameter cbtclosequantile is "
- "too small, raising to %d", min);
- param = min;
- }
- return param / 100.0;
-}
-
-/**
- * Retrieve and bounds-check the cbttestfreq consensus paramter.
- *
- * Effect: Describes how often in seconds to build a test circuit to
- * gather timeout values. Only applies if less than 'cbtmincircs'
- * have been recorded.
- */
-static int32_t
-circuit_build_times_test_frequency(void)
-{
- int32_t num = networkstatus_get_param(NULL, "cbttestfreq",
- CBT_DEFAULT_TEST_FREQUENCY,
- CBT_MIN_TEST_FREQUENCY,
- CBT_MAX_TEST_FREQUENCY);
-
- if (!(get_options()->LearnCircuitBuildTimeout)) {
- log_debug(LD_BUG,
- "circuit_build_times_test_frequency() called, cbttestfreq is %d",
- num);
- }
-
- return num;
-}
-
-/**
- * Retrieve and bounds-check the cbtmintimeout consensus parameter.
- *
- * Effect: This is the minimum allowed timeout value in milliseconds.
- * The minimum is to prevent rounding to 0 (we only check once
- * per second).
- */
-static int32_t
-circuit_build_times_min_timeout(void)
-{
- int32_t num = networkstatus_get_param(NULL, "cbtmintimeout",
- CBT_DEFAULT_TIMEOUT_MIN_VALUE,
- CBT_MIN_TIMEOUT_MIN_VALUE,
- CBT_MAX_TIMEOUT_MIN_VALUE);
-
- if (!(get_options()->LearnCircuitBuildTimeout)) {
- log_debug(LD_BUG,
- "circuit_build_times_min_timeout() called, cbtmintimeout is %d",
- num);
- }
-
- return num;
-}
-
-/**
- * Retrieve and bounds-check the cbtinitialtimeout consensus paramter.
- *
- * Effect: This is the timeout value to use before computing a timeout,
- * in milliseconds.
- */
-int32_t
-circuit_build_times_initial_timeout(void)
-{
- int32_t min = circuit_build_times_min_timeout();
- int32_t param = networkstatus_get_param(NULL, "cbtinitialtimeout",
- CBT_DEFAULT_TIMEOUT_INITIAL_VALUE,
- CBT_MIN_TIMEOUT_INITIAL_VALUE,
- CBT_MAX_TIMEOUT_INITIAL_VALUE);
-
- if (!(get_options()->LearnCircuitBuildTimeout)) {
- log_debug(LD_BUG,
- "circuit_build_times_initial_timeout() called, "
- "cbtinitialtimeout is %d",
- param);
- }
-
- if (param < min) {
- log_warn(LD_DIR, "Consensus parameter cbtinitialtimeout is too small, "
- "raising to %d", min);
- param = min;
- }
- return param;
-}
-
-/**
- * Retrieve and bounds-check the cbtrecentcount consensus paramter.
- *
- * Effect: This is the number of circuit build times to keep track of
- * for deciding if we hit cbtmaxtimeouts and need to reset our state
- * and learn a new timeout.
- */
-static int32_t
-circuit_build_times_recent_circuit_count(networkstatus_t *ns)
-{
- int32_t num;
- num = networkstatus_get_param(ns, "cbtrecentcount",
- CBT_DEFAULT_RECENT_CIRCUITS,
- CBT_MIN_RECENT_CIRCUITS,
- CBT_MAX_RECENT_CIRCUITS);
-
- if (!(get_options()->LearnCircuitBuildTimeout)) {
- log_debug(LD_BUG,
- "circuit_build_times_recent_circuit_count() called, "
- "cbtrecentcount is %d",
- num);
- }
-
- return num;
-}
-
-/**
- * This function is called when we get a consensus update.
- *
- * It checks to see if we have changed any consensus parameters
- * that require reallocation or discard of previous stats.
- */
-void
-circuit_build_times_new_consensus_params(circuit_build_times_t *cbt,
- networkstatus_t *ns)
-{
- int32_t num;
-
- /*
- * First check if we're doing adaptive timeouts at all; nothing to
- * update if we aren't.
- */
-
- if (!circuit_build_times_disabled()) {
- num = circuit_build_times_recent_circuit_count(ns);
-
- if (num > 0) {
- if (num != cbt->liveness.num_recent_circs) {
- int8_t *recent_circs;
- log_notice(LD_CIRC, "The Tor Directory Consensus has changed how many "
- "circuits we must track to detect network failures from %d "
- "to %d.", cbt->liveness.num_recent_circs, num);
-
- tor_assert(cbt->liveness.timeouts_after_firsthop ||
- cbt->liveness.num_recent_circs == 0);
-
- /*
- * Technically this is a circular array that we are reallocating
- * and memcopying. However, since it only consists of either 1s
- * or 0s, and is only used in a statistical test to determine when
- * we should discard our history after a sufficient number of 1's
- * have been reached, it is fine if order is not preserved or
- * elements are lost.
- *
- * cbtrecentcount should only be changing in cases of severe network
- * distress anyway, so memory correctness here is paramount over
- * doing acrobatics to preserve the array.
- */
- recent_circs = tor_malloc_zero(sizeof(int8_t)*num);
- if (cbt->liveness.timeouts_after_firsthop &&
- cbt->liveness.num_recent_circs > 0) {
- memcpy(recent_circs, cbt->liveness.timeouts_after_firsthop,
- sizeof(int8_t)*MIN(num, cbt->liveness.num_recent_circs));
- }
-
- // Adjust the index if it needs it.
- if (num < cbt->liveness.num_recent_circs) {
- cbt->liveness.after_firsthop_idx = MIN(num-1,
- cbt->liveness.after_firsthop_idx);
- }
-
- tor_free(cbt->liveness.timeouts_after_firsthop);
- cbt->liveness.timeouts_after_firsthop = recent_circs;
- cbt->liveness.num_recent_circs = num;
- }
- /* else no change, nothing to do */
- } else { /* num == 0 */
- /*
- * Weird. This probably shouldn't happen, so log a warning, but try
- * to do something sensible anyway.
- */
-
- log_warn(LD_CIRC,
- "The cbtrecentcircs consensus parameter came back zero! "
- "This disables adaptive timeouts since we can't keep track of "
- "any recent circuits.");
-
- circuit_build_times_free_timeouts(cbt);
- }
- } else {
- /*
- * Adaptive timeouts are disabled; this might be because of the
- * LearnCircuitBuildTimes config parameter, and hence permanent, or
- * the cbtdisabled consensus parameter, so it may be a new condition.
- * Treat it like getting num == 0 above and free the circuit history
- * if we have any.
- */
-
- circuit_build_times_free_timeouts(cbt);
- }
-}
-
-/** Make a note that we're running unit tests (rather than running Tor
- * itself), so we avoid clobbering our state file. */
-void
-circuitbuild_running_unit_tests(void)
-{
- unit_tests = 1;
-}
-
-/**
- * Return the initial default or configured timeout in milliseconds
- */
-static double
-circuit_build_times_get_initial_timeout(void)
-{
- double timeout;
-
- /*
- * Check if we have LearnCircuitBuildTimeout, and if we don't,
- * always use CircuitBuildTimeout, no questions asked.
- */
- if (get_options()->LearnCircuitBuildTimeout) {
- if (!unit_tests && get_options()->CircuitBuildTimeout) {
- timeout = get_options()->CircuitBuildTimeout*1000;
- if (timeout < circuit_build_times_min_timeout()) {
- log_warn(LD_CIRC, "Config CircuitBuildTimeout too low. Setting to %ds",
- circuit_build_times_min_timeout()/1000);
- timeout = circuit_build_times_min_timeout();
- }
- } else {
- timeout = circuit_build_times_initial_timeout();
- }
- } else {
- timeout = get_options()->CircuitBuildTimeout*1000;
- }
-
- return timeout;
-}
-
-/**
- * Reset the build time state.
- *
- * Leave estimated parameters, timeout and network liveness intact
- * for future use.
- */
-void
-circuit_build_times_reset(circuit_build_times_t *cbt)
-{
- memset(cbt->circuit_build_times, 0, sizeof(cbt->circuit_build_times));
- cbt->total_build_times = 0;
- cbt->build_times_idx = 0;
- cbt->have_computed_timeout = 0;
-}
-
-/**
- * Initialize the buildtimes structure for first use.
- *
- * Sets the initial timeout values based on either the config setting,
- * the consensus param, or the default (CBT_DEFAULT_TIMEOUT_INITIAL_VALUE).
- */
-void
-circuit_build_times_init(circuit_build_times_t *cbt)
-{
- memset(cbt, 0, sizeof(*cbt));
- /*
- * Check if we really are using adaptive timeouts, and don't keep
- * track of this stuff if not.
- */
- if (!circuit_build_times_disabled()) {
- cbt->liveness.num_recent_circs =
- circuit_build_times_recent_circuit_count(NULL);
- cbt->liveness.timeouts_after_firsthop =
- tor_malloc_zero(sizeof(int8_t)*cbt->liveness.num_recent_circs);
- } else {
- cbt->liveness.num_recent_circs = 0;
- cbt->liveness.timeouts_after_firsthop = NULL;
- }
- cbt->close_ms = cbt->timeout_ms = circuit_build_times_get_initial_timeout();
- control_event_buildtimeout_set(cbt, BUILDTIMEOUT_SET_EVENT_RESET);
-}
-
-/**
- * Free the saved timeouts, if the cbtdisabled consensus parameter got turned
- * on or something.
- */
-
-void
-circuit_build_times_free_timeouts(circuit_build_times_t *cbt)
-{
- if (!cbt) return;
-
- if (cbt->liveness.timeouts_after_firsthop) {
- tor_free(cbt->liveness.timeouts_after_firsthop);
- }
-
- cbt->liveness.num_recent_circs = 0;
-}
-
-#if 0
-/**
- * Rewind our build time history by n positions.
- */
-static void
-circuit_build_times_rewind_history(circuit_build_times_t *cbt, int n)
-{
- int i = 0;
-
- cbt->build_times_idx -= n;
- cbt->build_times_idx %= CBT_NCIRCUITS_TO_OBSERVE;
-
- for (i = 0; i < n; i++) {
- cbt->circuit_build_times[(i+cbt->build_times_idx)
- %CBT_NCIRCUITS_TO_OBSERVE]=0;
- }
-
- if (cbt->total_build_times > n) {
- cbt->total_build_times -= n;
- } else {
- cbt->total_build_times = 0;
- }
-
- log_info(LD_CIRC,
- "Rewound history by %d places. Current index: %d. "
- "Total: %d", n, cbt->build_times_idx, cbt->total_build_times);
-}
+#ifdef CURVE25519_ENABLED
+static int circuits_can_use_ntor(void);
#endif
-/**
- * Add a new build time value <b>time</b> to the set of build times. Time
- * units are milliseconds.
- *
- * circuit_build_times <b>cbt</b> is a circular array, so loop around when
- * array is full.
+/** This function tries to get a channel to the specified endpoint,
+ * and then calls command_setup_channel() to give it the right
+ * callbacks.
*/
-int
-circuit_build_times_add_time(circuit_build_times_t *cbt, build_time_t time)
+static channel_t *
+channel_connect_for_circuit(const tor_addr_t *addr, uint16_t port,
+ const char *id_digest)
{
- if (time <= 0 || time > CBT_BUILD_TIME_MAX) {
- log_warn(LD_BUG, "Circuit build time is too large (%u)."
- "This is probably a bug.", time);
- tor_fragile_assert();
- return -1;
- }
+ channel_t *chan;
- log_debug(LD_CIRC, "Adding circuit build time %u", time);
+ chan = channel_connect(addr, port, id_digest);
+ if (chan) command_setup_channel(chan);
- cbt->circuit_build_times[cbt->build_times_idx] = time;
- cbt->build_times_idx = (cbt->build_times_idx + 1) % CBT_NCIRCUITS_TO_OBSERVE;
- if (cbt->total_build_times < CBT_NCIRCUITS_TO_OBSERVE)
- cbt->total_build_times++;
-
- if ((cbt->total_build_times % CBT_SAVE_STATE_EVERY) == 0) {
- /* Save state every n circuit builds */
- if (!unit_tests && !get_options()->AvoidDiskWrites)
- or_state_mark_dirty(get_or_state(), 0);
- }
-
- return 0;
-}
-
-/**
- * Return maximum circuit build time
- */
-static build_time_t
-circuit_build_times_max(circuit_build_times_t *cbt)
-{
- int i = 0;
- build_time_t max_build_time = 0;
- for (i = 0; i < CBT_NCIRCUITS_TO_OBSERVE; i++) {
- if (cbt->circuit_build_times[i] > max_build_time
- && cbt->circuit_build_times[i] != CBT_BUILD_ABANDONED)
- max_build_time = cbt->circuit_build_times[i];
- }
- return max_build_time;
+ return chan;
}
-#if 0
-/** Return minimum circuit build time */
-build_time_t
-circuit_build_times_min(circuit_build_times_t *cbt)
-{
- int i = 0;
- build_time_t min_build_time = CBT_BUILD_TIME_MAX;
- for (i = 0; i < CBT_NCIRCUITS_TO_OBSERVE; i++) {
- if (cbt->circuit_build_times[i] && /* 0 <-> uninitialized */
- cbt->circuit_build_times[i] < min_build_time)
- min_build_time = cbt->circuit_build_times[i];
- }
- if (min_build_time == CBT_BUILD_TIME_MAX) {
- log_warn(LD_CIRC, "No build times less than CBT_BUILD_TIME_MAX!");
- }
- return min_build_time;
-}
-#endif
-
-/**
- * Calculate and return a histogram for the set of build times.
- *
- * Returns an allocated array of histrogram bins representing
- * the frequency of index*CBT_BIN_WIDTH millisecond
- * build times. Also outputs the number of bins in nbins.
- *
- * The return value must be freed by the caller.
- */
-static uint32_t *
-circuit_build_times_create_histogram(circuit_build_times_t *cbt,
- build_time_t *nbins)
-{
- uint32_t *histogram;
- build_time_t max_build_time = circuit_build_times_max(cbt);
- int i, c;
-
- *nbins = 1 + (max_build_time / CBT_BIN_WIDTH);
- histogram = tor_malloc_zero(*nbins * sizeof(build_time_t));
-
- // calculate histogram
- for (i = 0; i < CBT_NCIRCUITS_TO_OBSERVE; i++) {
- if (cbt->circuit_build_times[i] == 0
- || cbt->circuit_build_times[i] == CBT_BUILD_ABANDONED)
- continue; /* 0 <-> uninitialized */
-
- c = (cbt->circuit_build_times[i] / CBT_BIN_WIDTH);
- histogram[c]++;
- }
-
- return histogram;
-}
-
-/**
- * Return the Pareto start-of-curve parameter Xm.
- *
- * Because we are not a true Pareto curve, we compute this as the
- * weighted average of the N most frequent build time bins. N is either
- * 1 if we don't have enough circuit build time data collected, or
- * determined by the consensus parameter cbtnummodes (default 3).
- */
-static build_time_t
-circuit_build_times_get_xm(circuit_build_times_t *cbt)
-{
- build_time_t i, nbins;
- build_time_t *nth_max_bin;
- int32_t bin_counts=0;
- build_time_t ret = 0;
- uint32_t *histogram = circuit_build_times_create_histogram(cbt, &nbins);
- int n=0;
- int num_modes = circuit_build_times_default_num_xm_modes();
-
- tor_assert(nbins > 0);
- tor_assert(num_modes > 0);
-
- // Only use one mode if < 1000 buildtimes. Not enough data
- // for multiple.
- if (cbt->total_build_times < CBT_NCIRCUITS_TO_OBSERVE)
- num_modes = 1;
-
- nth_max_bin = (build_time_t*)tor_malloc_zero(num_modes*sizeof(build_time_t));
-
- /* Determine the N most common build times */
- for (i = 0; i < nbins; i++) {
- if (histogram[i] >= histogram[nth_max_bin[0]]) {
- nth_max_bin[0] = i;
- }
-
- for (n = 1; n < num_modes; n++) {
- if (histogram[i] >= histogram[nth_max_bin[n]] &&
- (!histogram[nth_max_bin[n-1]]
- || histogram[i] < histogram[nth_max_bin[n-1]])) {
- nth_max_bin[n] = i;
- }
- }
- }
-
- for (n = 0; n < num_modes; n++) {
- bin_counts += histogram[nth_max_bin[n]];
- ret += CBT_BIN_TO_MS(nth_max_bin[n])*histogram[nth_max_bin[n]];
- log_info(LD_CIRC, "Xm mode #%d: %u %u", n, CBT_BIN_TO_MS(nth_max_bin[n]),
- histogram[nth_max_bin[n]]);
- }
-
- /* The following assert is safe, because we don't get called when we
- * haven't observed at least CBT_MIN_MIN_CIRCUITS_TO_OBSERVE circuits. */
- tor_assert(bin_counts > 0);
-
- ret /= bin_counts;
- tor_free(histogram);
- tor_free(nth_max_bin);
-
- return ret;
-}
-
-/**
- * Output a histogram of current circuit build times to
- * the or_state_t state structure.
- */
-void
-circuit_build_times_update_state(circuit_build_times_t *cbt,
- or_state_t *state)
-{
- uint32_t *histogram;
- build_time_t i = 0;
- build_time_t nbins = 0;
- config_line_t **next, *line;
-
- histogram = circuit_build_times_create_histogram(cbt, &nbins);
- // write to state
- config_free_lines(state->BuildtimeHistogram);
- next = &state->BuildtimeHistogram;
- *next = NULL;
-
- state->TotalBuildTimes = cbt->total_build_times;
- state->CircuitBuildAbandonedCount = 0;
-
- for (i = 0; i < CBT_NCIRCUITS_TO_OBSERVE; i++) {
- if (cbt->circuit_build_times[i] == CBT_BUILD_ABANDONED)
- state->CircuitBuildAbandonedCount++;
- }
-
- for (i = 0; i < nbins; i++) {
- // compress the histogram by skipping the blanks
- if (histogram[i] == 0) continue;
- *next = line = tor_malloc_zero(sizeof(config_line_t));
- line->key = tor_strdup("CircuitBuildTimeBin");
- tor_asprintf(&line->value, "%d %d",
- CBT_BIN_TO_MS(i), histogram[i]);
- next = &(line->next);
- }
-
- if (!unit_tests) {
- if (!get_options()->AvoidDiskWrites)
- or_state_mark_dirty(get_or_state(), 0);
- }
-
- tor_free(histogram);
-}
-
-/**
- * Shuffle the build times array.
- *
- * Adapted from http://en.wikipedia.org/wiki/Fisher-Yates_shuffle
- */
-static void
-circuit_build_times_shuffle_and_store_array(circuit_build_times_t *cbt,
- build_time_t *raw_times,
- uint32_t num_times)
-{
- uint32_t n = num_times;
- if (num_times > CBT_NCIRCUITS_TO_OBSERVE) {
- log_notice(LD_CIRC, "The number of circuit times that this Tor version "
- "uses to calculate build times is less than the number stored "
- "in your state file. Decreasing the circuit time history from "
- "%lu to %d.", (unsigned long)num_times,
- CBT_NCIRCUITS_TO_OBSERVE);
- }
-
- if (n > INT_MAX-1) {
- log_warn(LD_CIRC, "For some insane reasons, you had %lu circuit build "
- "observations in your state file. That's far too many; probably "
- "there's a bug here.", (unsigned long)n);
- n = INT_MAX-1;
- }
-
- /* This code can only be run on a compact array */
- while (n-- > 1) {
- int k = crypto_rand_int(n + 1); /* 0 <= k <= n. */
- build_time_t tmp = raw_times[k];
- raw_times[k] = raw_times[n];
- raw_times[n] = tmp;
- }
-
- /* Since the times are now shuffled, take a random CBT_NCIRCUITS_TO_OBSERVE
- * subset (ie the first CBT_NCIRCUITS_TO_OBSERVE values) */
- for (n = 0; n < MIN(num_times, CBT_NCIRCUITS_TO_OBSERVE); n++) {
- circuit_build_times_add_time(cbt, raw_times[n]);
- }
-}
-
-/**
- * Filter old synthetic timeouts that were created before the
- * new right-censored Pareto calculation was deployed.
- *
- * Once all clients before 0.2.1.13-alpha are gone, this code
- * will be unused.
- */
-static int
-circuit_build_times_filter_timeouts(circuit_build_times_t *cbt)
-{
- int num_filtered=0, i=0;
- double timeout_rate = 0;
- build_time_t max_timeout = 0;
-
- timeout_rate = circuit_build_times_timeout_rate(cbt);
- max_timeout = (build_time_t)cbt->close_ms;
-
- for (i = 0; i < CBT_NCIRCUITS_TO_OBSERVE; i++) {
- if (cbt->circuit_build_times[i] > max_timeout) {
- build_time_t replaced = cbt->circuit_build_times[i];
- num_filtered++;
- cbt->circuit_build_times[i] = CBT_BUILD_ABANDONED;
-
- log_debug(LD_CIRC, "Replaced timeout %d with %d", replaced,
- cbt->circuit_build_times[i]);
- }
- }
-
- log_info(LD_CIRC,
- "We had %d timeouts out of %d build times, "
- "and filtered %d above the max of %u",
- (int)(cbt->total_build_times*timeout_rate),
- cbt->total_build_times, num_filtered, max_timeout);
-
- return num_filtered;
-}
-
-/**
- * Load histogram from <b>state</b>, shuffling the resulting array
- * after we do so. Use this result to estimate parameters and
- * calculate the timeout.
- *
- * Return -1 on error.
- */
-int
-circuit_build_times_parse_state(circuit_build_times_t *cbt,
- or_state_t *state)
-{
- int tot_values = 0;
- uint32_t loaded_cnt = 0, N = 0;
- config_line_t *line;
- unsigned int i;
- build_time_t *loaded_times;
- int err = 0;
- circuit_build_times_init(cbt);
-
- if (circuit_build_times_disabled()) {
- return 0;
- }
-
- /* build_time_t 0 means uninitialized */
- loaded_times = tor_malloc_zero(sizeof(build_time_t)*state->TotalBuildTimes);
-
- for (line = state->BuildtimeHistogram; line; line = line->next) {
- smartlist_t *args = smartlist_new();
- smartlist_split_string(args, line->value, " ",
- SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
- if (smartlist_len(args) < 2) {
- log_warn(LD_GENERAL, "Unable to parse circuit build times: "
- "Too few arguments to CircuitBuildTime");
- err = 1;
- SMARTLIST_FOREACH(args, char*, cp, tor_free(cp));
- smartlist_free(args);
- break;
- } else {
- const char *ms_str = smartlist_get(args,0);
- const char *count_str = smartlist_get(args,1);
- uint32_t count, k;
- build_time_t ms;
- int ok;
- ms = (build_time_t)tor_parse_ulong(ms_str, 0, 0,
- CBT_BUILD_TIME_MAX, &ok, NULL);
- if (!ok) {
- log_warn(LD_GENERAL, "Unable to parse circuit build times: "
- "Unparsable bin number");
- err = 1;
- SMARTLIST_FOREACH(args, char*, cp, tor_free(cp));
- smartlist_free(args);
- break;
- }
- count = (uint32_t)tor_parse_ulong(count_str, 0, 0,
- UINT32_MAX, &ok, NULL);
- if (!ok) {
- log_warn(LD_GENERAL, "Unable to parse circuit build times: "
- "Unparsable bin count");
- err = 1;
- SMARTLIST_FOREACH(args, char*, cp, tor_free(cp));
- smartlist_free(args);
- break;
- }
-
- if (loaded_cnt+count+state->CircuitBuildAbandonedCount
- > state->TotalBuildTimes) {
- log_warn(LD_CIRC,
- "Too many build times in state file. "
- "Stopping short before %d",
- loaded_cnt+count);
- SMARTLIST_FOREACH(args, char*, cp, tor_free(cp));
- smartlist_free(args);
- break;
- }
-
- for (k = 0; k < count; k++) {
- loaded_times[loaded_cnt++] = ms;
- }
- N++;
- SMARTLIST_FOREACH(args, char*, cp, tor_free(cp));
- smartlist_free(args);
- }
- }
-
- log_info(LD_CIRC,
- "Adding %d timeouts.", state->CircuitBuildAbandonedCount);
- for (i=0; i < state->CircuitBuildAbandonedCount; i++) {
- loaded_times[loaded_cnt++] = CBT_BUILD_ABANDONED;
- }
-
- if (loaded_cnt != state->TotalBuildTimes) {
- log_warn(LD_CIRC,
- "Corrupt state file? Build times count mismatch. "
- "Read %d times, but file says %d", loaded_cnt,
- state->TotalBuildTimes);
- err = 1;
- circuit_build_times_reset(cbt);
- goto done;
- }
-
- circuit_build_times_shuffle_and_store_array(cbt, loaded_times, loaded_cnt);
-
- /* Verify that we didn't overwrite any indexes */
- for (i=0; i < CBT_NCIRCUITS_TO_OBSERVE; i++) {
- if (!cbt->circuit_build_times[i])
- break;
- tot_values++;
- }
- log_info(LD_CIRC,
- "Loaded %d/%d values from %d lines in circuit time histogram",
- tot_values, cbt->total_build_times, N);
-
- if (cbt->total_build_times != tot_values
- || cbt->total_build_times > CBT_NCIRCUITS_TO_OBSERVE) {
- log_warn(LD_CIRC,
- "Corrupt state file? Shuffled build times mismatch. "
- "Read %d times, but file says %d", tot_values,
- state->TotalBuildTimes);
- err = 1;
- circuit_build_times_reset(cbt);
- goto done;
- }
-
- circuit_build_times_set_timeout(cbt);
-
- if (!state->CircuitBuildAbandonedCount && cbt->total_build_times) {
- circuit_build_times_filter_timeouts(cbt);
- }
-
- done:
- tor_free(loaded_times);
- return err ? -1 : 0;
-}
-
-/**
- * Estimates the Xm and Alpha parameters using
- * http://en.wikipedia.org/wiki/Pareto_distribution#Parameter_estimation
- *
- * The notable difference is that we use mode instead of min to estimate Xm.
- * This is because our distribution is frechet-like. We claim this is
- * an acceptable approximation because we are only concerned with the
- * accuracy of the CDF of the tail.
- */
-int
-circuit_build_times_update_alpha(circuit_build_times_t *cbt)
-{
- build_time_t *x=cbt->circuit_build_times;
- double a = 0;
- int n=0,i=0,abandoned_count=0;
- build_time_t max_time=0;
-
- /* http://en.wikipedia.org/wiki/Pareto_distribution#Parameter_estimation */
- /* We sort of cheat here and make our samples slightly more pareto-like
- * and less frechet-like. */
- cbt->Xm = circuit_build_times_get_xm(cbt);
-
- tor_assert(cbt->Xm > 0);
-
- for (i=0; i< CBT_NCIRCUITS_TO_OBSERVE; i++) {
- if (!x[i]) {
- continue;
- }
-
- if (x[i] < cbt->Xm) {
- a += tor_mathlog(cbt->Xm);
- } else if (x[i] == CBT_BUILD_ABANDONED) {
- abandoned_count++;
- } else {
- a += tor_mathlog(x[i]);
- if (x[i] > max_time)
- max_time = x[i];
- }
- n++;
- }
-
- /*
- * We are erring and asserting here because this can only happen
- * in codepaths other than startup. The startup state parsing code
- * performs this same check, and resets state if it hits it. If we
- * hit it at runtime, something serious has gone wrong.
- */
- if (n!=cbt->total_build_times) {
- log_err(LD_CIRC, "Discrepancy in build times count: %d vs %d", n,
- cbt->total_build_times);
- }
- tor_assert(n==cbt->total_build_times);
-
- if (max_time <= 0) {
- /* This can happen if Xm is actually the *maximum* value in the set.
- * It can also happen if we've abandoned every single circuit somehow.
- * In either case, tell the caller not to compute a new build timeout. */
- log_warn(LD_BUG,
- "Could not determine largest build time (%d). "
- "Xm is %dms and we've abandoned %d out of %d circuits.", max_time,
- cbt->Xm, abandoned_count, n);
- return 0;
- }
-
- a += abandoned_count*tor_mathlog(max_time);
-
- a -= n*tor_mathlog(cbt->Xm);
- // Estimator comes from Eq #4 in:
- // "Bayesian estimation based on trimmed samples from Pareto populations"
- // by Arturo J. Fernández. We are right-censored only.
- a = (n-abandoned_count)/a;
-
- cbt->alpha = a;
-
- return 1;
-}
-
-/**
- * This is the Pareto Quantile Function. It calculates the point x
- * in the distribution such that F(x) = quantile (ie quantile*100%
- * of the mass of the density function is below x on the curve).
- *
- * We use it to calculate the timeout and also to generate synthetic
- * values of time for circuits that timeout before completion.
- *
- * See http://en.wikipedia.org/wiki/Quantile_function,
- * http://en.wikipedia.org/wiki/Inverse_transform_sampling and
- * http://en.wikipedia.org/wiki/Pareto_distribution#Generating_a_
- * random_sample_from_Pareto_distribution
- * That's right. I'll cite wikipedia all day long.
- *
- * Return value is in milliseconds.
- */
-double
-circuit_build_times_calculate_timeout(circuit_build_times_t *cbt,
- double quantile)
-{
- double ret;
- tor_assert(quantile >= 0);
- tor_assert(1.0-quantile > 0);
- tor_assert(cbt->Xm > 0);
-
- ret = cbt->Xm/pow(1.0-quantile,1.0/cbt->alpha);
- if (ret > INT32_MAX) {
- ret = INT32_MAX;
- }
- tor_assert(ret > 0);
- return ret;
-}
-
-/** Pareto CDF */
-double
-circuit_build_times_cdf(circuit_build_times_t *cbt, double x)
-{
- double ret;
- tor_assert(cbt->Xm > 0);
- ret = 1.0-pow(cbt->Xm/x,cbt->alpha);
- tor_assert(0 <= ret && ret <= 1.0);
- return ret;
-}
-
-/**
- * Generate a synthetic time using our distribution parameters.
- *
- * The return value will be within the [q_lo, q_hi) quantile points
- * on the CDF.
- */
-build_time_t
-circuit_build_times_generate_sample(circuit_build_times_t *cbt,
- double q_lo, double q_hi)
-{
- double randval = crypto_rand_double();
- build_time_t ret;
- double u;
-
- /* Generate between [q_lo, q_hi) */
- /*XXXX This is what nextafter is supposed to be for; we should use it on the
- * platforms that support it. */
- q_hi -= 1.0/(INT32_MAX);
-
- tor_assert(q_lo >= 0);
- tor_assert(q_hi < 1);
- tor_assert(q_lo < q_hi);
-
- u = q_lo + (q_hi-q_lo)*randval;
-
- tor_assert(0 <= u && u < 1.0);
- /* circuit_build_times_calculate_timeout returns <= INT32_MAX */
- ret = (build_time_t)
- tor_lround(circuit_build_times_calculate_timeout(cbt, u));
- tor_assert(ret > 0);
- return ret;
-}
-
-/**
- * Estimate an initial alpha parameter by solving the quantile
- * function with a quantile point and a specific timeout value.
- */
-void
-circuit_build_times_initial_alpha(circuit_build_times_t *cbt,
- double quantile, double timeout_ms)
-{
- // Q(u) = Xm/((1-u)^(1/a))
- // Q(0.8) = Xm/((1-0.8))^(1/a)) = CircBuildTimeout
- // CircBuildTimeout = Xm/((1-0.8))^(1/a))
- // CircBuildTimeout = Xm*((1-0.8))^(-1/a))
- // ln(CircBuildTimeout) = ln(Xm)+ln(((1-0.8)))*(-1/a)
- // -ln(1-0.8)/(ln(CircBuildTimeout)-ln(Xm))=a
- tor_assert(quantile >= 0);
- tor_assert(cbt->Xm > 0);
- cbt->alpha = tor_mathlog(1.0-quantile)/
- (tor_mathlog(cbt->Xm)-tor_mathlog(timeout_ms));
- tor_assert(cbt->alpha > 0);
-}
-
-/**
- * Returns true if we need circuits to be built
- */
-int
-circuit_build_times_needs_circuits(circuit_build_times_t *cbt)
-{
- /* Return true if < MIN_CIRCUITS_TO_OBSERVE */
- return !circuit_build_times_enough_to_compute(cbt);
-}
-
-/**
- * Returns true if we should build a timeout test circuit
- * right now.
- */
-int
-circuit_build_times_needs_circuits_now(circuit_build_times_t *cbt)
-{
- return circuit_build_times_needs_circuits(cbt) &&
- approx_time()-cbt->last_circ_at > circuit_build_times_test_frequency();
-}
-
-/**
- * Called to indicate that the network showed some signs of liveness,
- * i.e. we received a cell.
- *
- * This is used by circuit_build_times_network_check_live() to decide
- * if we should record the circuit build timeout or not.
- *
- * This function is called every time we receive a cell. Avoid
- * syscalls, events, and other high-intensity work.
- */
-void
-circuit_build_times_network_is_live(circuit_build_times_t *cbt)
-{
- time_t now = approx_time();
- if (cbt->liveness.nonlive_timeouts > 0) {
- log_notice(LD_CIRC,
- "Tor now sees network activity. Restoring circuit build "
- "timeout recording. Network was down for %d seconds "
- "during %d circuit attempts.",
- (int)(now - cbt->liveness.network_last_live),
- cbt->liveness.nonlive_timeouts);
- }
- cbt->liveness.network_last_live = now;
- cbt->liveness.nonlive_timeouts = 0;
-}
-
-/**
- * Called to indicate that we completed a circuit. Because this circuit
- * succeeded, it doesn't count as a timeout-after-the-first-hop.
- *
- * This is used by circuit_build_times_network_check_changed() to determine
- * if we had too many recent timeouts and need to reset our learned timeout
- * to something higher.
- */
-void
-circuit_build_times_network_circ_success(circuit_build_times_t *cbt)
-{
- /* Check for NULLness because we might not be using adaptive timeouts */
- if (cbt->liveness.timeouts_after_firsthop &&
- cbt->liveness.num_recent_circs > 0) {
- cbt->liveness.timeouts_after_firsthop[cbt->liveness.after_firsthop_idx]
- = 0;
- cbt->liveness.after_firsthop_idx++;
- cbt->liveness.after_firsthop_idx %= cbt->liveness.num_recent_circs;
- }
-}
-
-/**
- * A circuit just timed out. If it failed after the first hop, record it
- * in our history for later deciding if the network speed has changed.
- *
- * This is used by circuit_build_times_network_check_changed() to determine
- * if we had too many recent timeouts and need to reset our learned timeout
- * to something higher.
- */
-static void
-circuit_build_times_network_timeout(circuit_build_times_t *cbt,
- int did_onehop)
-{
- /* Check for NULLness because we might not be using adaptive timeouts */
- if (cbt->liveness.timeouts_after_firsthop &&
- cbt->liveness.num_recent_circs > 0) {
- if (did_onehop) {
- cbt->liveness.timeouts_after_firsthop[cbt->liveness.after_firsthop_idx]
- = 1;
- cbt->liveness.after_firsthop_idx++;
- cbt->liveness.after_firsthop_idx %= cbt->liveness.num_recent_circs;
- }
- }
-}
-
-/**
- * A circuit was just forcibly closed. If there has been no recent network
- * activity at all, but this circuit was launched back when we thought the
- * network was live, increment the number of "nonlive" circuit timeouts.
- *
- * This is used by circuit_build_times_network_check_live() to decide
- * if we should record the circuit build timeout or not.
- */
-static void
-circuit_build_times_network_close(circuit_build_times_t *cbt,
- int did_onehop, time_t start_time)
-{
- time_t now = time(NULL);
- /*
- * Check if this is a timeout that was for a circuit that spent its
- * entire existence during a time where we have had no network activity.
- */
- if (cbt->liveness.network_last_live < start_time) {
- if (did_onehop) {
- char last_live_buf[ISO_TIME_LEN+1];
- char start_time_buf[ISO_TIME_LEN+1];
- char now_buf[ISO_TIME_LEN+1];
- format_local_iso_time(last_live_buf, cbt->liveness.network_last_live);
- format_local_iso_time(start_time_buf, start_time);
- format_local_iso_time(now_buf, now);
- log_warn(LD_BUG,
- "Circuit somehow completed a hop while the network was "
- "not live. Network was last live at %s, but circuit launched "
- "at %s. It's now %s.", last_live_buf, start_time_buf,
- now_buf);
- }
- cbt->liveness.nonlive_timeouts++;
- if (cbt->liveness.nonlive_timeouts == 1) {
- log_notice(LD_CIRC,
- "Tor has not observed any network activity for the past %d "
- "seconds. Disabling circuit build timeout recording.",
- (int)(now - cbt->liveness.network_last_live));
- } else {
- log_info(LD_CIRC,
- "Got non-live timeout. Current count is: %d",
- cbt->liveness.nonlive_timeouts);
- }
- }
-}
-
-/**
- * When the network is not live, we do not record circuit build times.
- *
- * The network is considered not live if there has been at least one
- * circuit build that began and ended (had its close_ms measurement
- * period expire) since we last received a cell.
- *
- * Also has the side effect of rewinding the circuit time history
- * in the case of recent liveness changes.
- */
-int
-circuit_build_times_network_check_live(circuit_build_times_t *cbt)
-{
- if (cbt->liveness.nonlive_timeouts > 0) {
- return 0;
- }
-
- return 1;
-}
-
-/**
- * Returns true if we have seen more than MAX_RECENT_TIMEOUT_COUNT of
- * the past RECENT_CIRCUITS time out after the first hop. Used to detect
- * if the network connection has changed significantly, and if so,
- * resets our circuit build timeout to the default.
- *
- * Also resets the entire timeout history in this case and causes us
- * to restart the process of building test circuits and estimating a
- * new timeout.
- */
-int
-circuit_build_times_network_check_changed(circuit_build_times_t *cbt)
-{
- int total_build_times = cbt->total_build_times;
- int timeout_count=0;
- int i;
-
- if (cbt->liveness.timeouts_after_firsthop &&
- cbt->liveness.num_recent_circs > 0) {
- /* how many of our recent circuits made it to the first hop but then
- * timed out? */
- for (i = 0; i < cbt->liveness.num_recent_circs; i++) {
- timeout_count += cbt->liveness.timeouts_after_firsthop[i];
- }
- }
-
- /* If 80% of our recent circuits are timing out after the first hop,
- * we need to re-estimate a new initial alpha and timeout. */
- if (timeout_count < circuit_build_times_max_timeouts()) {
- return 0;
- }
-
- circuit_build_times_reset(cbt);
- if (cbt->liveness.timeouts_after_firsthop &&
- cbt->liveness.num_recent_circs > 0) {
- memset(cbt->liveness.timeouts_after_firsthop, 0,
- sizeof(*cbt->liveness.timeouts_after_firsthop)*
- cbt->liveness.num_recent_circs);
- }
- cbt->liveness.after_firsthop_idx = 0;
-
- /* Check to see if this has happened before. If so, double the timeout
- * to give people on abysmally bad network connections a shot at access */
- if (cbt->timeout_ms >= circuit_build_times_get_initial_timeout()) {
- if (cbt->timeout_ms > INT32_MAX/2 || cbt->close_ms > INT32_MAX/2) {
- log_warn(LD_CIRC, "Insanely large circuit build timeout value. "
- "(timeout = %fmsec, close = %fmsec)",
- cbt->timeout_ms, cbt->close_ms);
- } else {
- cbt->timeout_ms *= 2;
- cbt->close_ms *= 2;
- }
- } else {
- cbt->close_ms = cbt->timeout_ms
- = circuit_build_times_get_initial_timeout();
- }
-
- control_event_buildtimeout_set(cbt, BUILDTIMEOUT_SET_EVENT_RESET);
-
- log_notice(LD_CIRC,
- "Your network connection speed appears to have changed. Resetting "
- "timeout to %lds after %d timeouts and %d buildtimes.",
- tor_lround(cbt->timeout_ms/1000), timeout_count,
- total_build_times);
-
- return 1;
-}
-
-/**
- * Count the number of timeouts in a set of cbt data.
- */
-double
-circuit_build_times_timeout_rate(const circuit_build_times_t *cbt)
-{
- int i=0,timeouts=0;
- for (i = 0; i < CBT_NCIRCUITS_TO_OBSERVE; i++) {
- if (cbt->circuit_build_times[i] >= cbt->timeout_ms) {
- timeouts++;
- }
- }
-
- if (!cbt->total_build_times)
- return 0;
-
- return ((double)timeouts)/cbt->total_build_times;
-}
-
-/**
- * Count the number of closed circuits in a set of cbt data.
- */
-double
-circuit_build_times_close_rate(const circuit_build_times_t *cbt)
-{
- int i=0,closed=0;
- for (i = 0; i < CBT_NCIRCUITS_TO_OBSERVE; i++) {
- if (cbt->circuit_build_times[i] == CBT_BUILD_ABANDONED) {
- closed++;
- }
- }
-
- if (!cbt->total_build_times)
- return 0;
-
- return ((double)closed)/cbt->total_build_times;
-}
-
-/**
- * Store a timeout as a synthetic value.
- *
- * Returns true if the store was successful and we should possibly
- * update our timeout estimate.
- */
-int
-circuit_build_times_count_close(circuit_build_times_t *cbt,
- int did_onehop,
- time_t start_time)
-{
- if (circuit_build_times_disabled()) {
- cbt->close_ms = cbt->timeout_ms
- = circuit_build_times_get_initial_timeout();
- return 0;
- }
-
- /* Record this force-close to help determine if the network is dead */
- circuit_build_times_network_close(cbt, did_onehop, start_time);
-
- /* Only count timeouts if network is live.. */
- if (!circuit_build_times_network_check_live(cbt)) {
- return 0;
- }
-
- circuit_build_times_add_time(cbt, CBT_BUILD_ABANDONED);
- return 1;
-}
-
-/**
- * Update timeout counts to determine if we need to expire
- * our build time history due to excessive timeouts.
- *
- * We do not record any actual time values at this stage;
- * we are only interested in recording the fact that a timeout
- * happened. We record the time values via
- * circuit_build_times_count_close() and circuit_build_times_add_time().
- */
-void
-circuit_build_times_count_timeout(circuit_build_times_t *cbt,
- int did_onehop)
-{
- if (circuit_build_times_disabled()) {
- cbt->close_ms = cbt->timeout_ms
- = circuit_build_times_get_initial_timeout();
- return;
- }
-
- /* Register the fact that a timeout just occurred. */
- circuit_build_times_network_timeout(cbt, did_onehop);
-
- /* If there are a ton of timeouts, we should reset
- * the circuit build timeout. */
- circuit_build_times_network_check_changed(cbt);
-}
-
-/**
- * Estimate a new timeout based on history and set our timeout
- * variable accordingly.
- */
-static int
-circuit_build_times_set_timeout_worker(circuit_build_times_t *cbt)
-{
- build_time_t max_time;
- if (!circuit_build_times_enough_to_compute(cbt))
- return 0;
-
- if (!circuit_build_times_update_alpha(cbt))
- return 0;
-
- cbt->timeout_ms = circuit_build_times_calculate_timeout(cbt,
- circuit_build_times_quantile_cutoff());
-
- cbt->close_ms = circuit_build_times_calculate_timeout(cbt,
- circuit_build_times_close_quantile());
-
- max_time = circuit_build_times_max(cbt);
-
- /* Sometimes really fast guard nodes give us such a steep curve
- * that this ends up being not that much greater than timeout_ms.
- * Make it be at least 1 min to handle this case. */
- cbt->close_ms = MAX(cbt->close_ms, circuit_build_times_initial_timeout());
-
- if (cbt->timeout_ms > max_time) {
- log_info(LD_CIRC,
- "Circuit build timeout of %dms is beyond the maximum build "
- "time we have ever observed. Capping it to %dms.",
- (int)cbt->timeout_ms, max_time);
- cbt->timeout_ms = max_time;
- }
-
- if (max_time < INT32_MAX/2 && cbt->close_ms > 2*max_time) {
- log_info(LD_CIRC,
- "Circuit build measurement period of %dms is more than twice "
- "the maximum build time we have ever observed. Capping it to "
- "%dms.", (int)cbt->close_ms, 2*max_time);
- cbt->close_ms = 2*max_time;
- }
-
- cbt->have_computed_timeout = 1;
- return 1;
-}
-
-/**
- * Exposed function to compute a new timeout. Dispatches events and
- * also filters out extremely high timeout values.
- */
-void
-circuit_build_times_set_timeout(circuit_build_times_t *cbt)
-{
- long prev_timeout = tor_lround(cbt->timeout_ms/1000);
- double timeout_rate;
-
- /*
- * Just return if we aren't using adaptive timeouts
- */
- if (circuit_build_times_disabled())
- return;
-
- if (!circuit_build_times_set_timeout_worker(cbt))
- return;
-
- if (cbt->timeout_ms < circuit_build_times_min_timeout()) {
- log_info(LD_CIRC, "Set buildtimeout to low value %fms. Setting to %dms",
- cbt->timeout_ms, circuit_build_times_min_timeout());
- cbt->timeout_ms = circuit_build_times_min_timeout();
- if (cbt->close_ms < cbt->timeout_ms) {
- /* This shouldn't happen because of MAX() in timeout_worker above,
- * but doing it just in case */
- cbt->close_ms = circuit_build_times_initial_timeout();
- }
- }
-
- control_event_buildtimeout_set(cbt, BUILDTIMEOUT_SET_EVENT_COMPUTED);
-
- timeout_rate = circuit_build_times_timeout_rate(cbt);
-
- if (prev_timeout > tor_lround(cbt->timeout_ms/1000)) {
- log_info(LD_CIRC,
- "Based on %d circuit times, it looks like we don't need to "
- "wait so long for circuits to finish. We will now assume a "
- "circuit is too slow to use after waiting %ld seconds.",
- cbt->total_build_times,
- tor_lround(cbt->timeout_ms/1000));
- log_info(LD_CIRC,
- "Circuit timeout data: %fms, %fms, Xm: %d, a: %f, r: %f",
- cbt->timeout_ms, cbt->close_ms, cbt->Xm, cbt->alpha,
- timeout_rate);
- } else if (prev_timeout < tor_lround(cbt->timeout_ms/1000)) {
- log_info(LD_CIRC,
- "Based on %d circuit times, it looks like we need to wait "
- "longer for circuits to finish. We will now assume a "
- "circuit is too slow to use after waiting %ld seconds.",
- cbt->total_build_times,
- tor_lround(cbt->timeout_ms/1000));
- log_info(LD_CIRC,
- "Circuit timeout data: %fms, %fms, Xm: %d, a: %f, r: %f",
- cbt->timeout_ms, cbt->close_ms, cbt->Xm, cbt->alpha,
- timeout_rate);
- } else {
- log_info(LD_CIRC,
- "Set circuit build timeout to %lds (%fms, %fms, Xm: %d, a: %f,"
- " r: %f) based on %d circuit times",
- tor_lround(cbt->timeout_ms/1000),
- cbt->timeout_ms, cbt->close_ms, cbt->Xm, cbt->alpha, timeout_rate,
- cbt->total_build_times);
- }
-}
-
-/** Iterate over values of circ_id, starting from conn-\>next_circ_id,
- * and with the high bit specified by conn-\>circ_id_type, until we get
- * a circ_id that is not in use by any other circuit on that conn.
+/** Search for a value for circ_id that we can use on <b>chan</b> for an
+ * outbound circuit, until we get a circ_id that is not in use by any other
+ * circuit on that conn.
*
* Return it, or 0 if can't get a unique circ_id.
*/
-static circid_t
-get_unique_circ_id_by_conn(or_connection_t *conn)
-{
+STATIC circid_t
+get_unique_circ_id_by_chan(channel_t *chan)
+{
+/* This number is chosen somewhat arbitrarily; see comment below for more
+ * info. When the space is 80% full, it gives a one-in-a-million failure
+ * chance; when the space is 90% full, it gives a one-in-850 chance; and when
+ * the space is 95% full, it gives a one-in-26 failure chance. That seems
+ * okay, though you could make a case IMO for anything between N=32 and
+ * N=256. */
+#define MAX_CIRCID_ATTEMPTS 64
+ int in_use;
+ unsigned n_with_circ = 0, n_pending_destroy = 0;
circid_t test_circ_id;
circid_t attempts=0;
- circid_t high_bit;
+ circid_t high_bit, max_range, mask;
+
+ tor_assert(chan);
- tor_assert(conn);
- if (conn->circ_id_type == CIRC_ID_TYPE_NEITHER) {
- log_warn(LD_BUG, "Trying to pick a circuit ID for a connection from "
+ if (chan->circ_id_type == CIRC_ID_TYPE_NEITHER) {
+ log_warn(LD_BUG,
+ "Trying to pick a circuit ID for a connection from "
"a client with no identity.");
return 0;
}
- high_bit = (conn->circ_id_type == CIRC_ID_TYPE_HIGHER) ? 1<<15 : 0;
+ max_range = (chan->wide_circ_ids) ? (1u<<31) : (1u<<15);
+ mask = max_range - 1;
+ high_bit = (chan->circ_id_type == CIRC_ID_TYPE_HIGHER) ? max_range : 0;
do {
- /* Sequentially iterate over test_circ_id=1...1<<15-1 until we find a
- * circID such that (high_bit|test_circ_id) is not already used. */
- test_circ_id = conn->next_circ_id++;
- if (test_circ_id == 0 || test_circ_id >= 1<<15) {
- test_circ_id = 1;
- conn->next_circ_id = 2;
- }
- if (++attempts > 1<<15) {
- /* Make sure we don't loop forever if all circ_id's are used. This
- * matters because it's an external DoS opportunity.
+ if (++attempts > MAX_CIRCID_ATTEMPTS) {
+ /* Make sure we don't loop forever because all circuit IDs are used.
+ *
+ * Once, we would try until we had tried every possible circuit ID. But
+ * that's quite expensive. Instead, we try MAX_CIRCID_ATTEMPTS random
+ * circuit IDs, and then give up.
+ *
+ * This potentially causes us to give up early if our circuit ID space
+ * is nearly full. If we have N circuit IDs in use, then we will reject
+ * a new circuit with probability (N / max_range) ^ MAX_CIRCID_ATTEMPTS.
+ * This means that in practice, a few percent of our circuit ID capacity
+ * will go unused.
+ *
+ * The alternative here, though, is to do a linear search over the
+ * whole circuit ID space every time we extend a circuit, which is
+ * not so great either.
*/
- log_warn(LD_CIRC,"No unused circ IDs. Failing.");
+ log_fn_ratelim(&chan->last_warned_circ_ids_exhausted, LOG_WARN,
+ LD_CIRC,"No unused circIDs found on channel %s wide "
+ "circID support, with %u inbound and %u outbound circuits. "
+ "Found %u circuit IDs in use by circuits, and %u with "
+ "pending destroy cells."
+ "Failing a circuit.",
+ chan->wide_circ_ids ? "with" : "without",
+ chan->num_p_circuits, chan->num_n_circuits,
+ n_with_circ, n_pending_destroy);
return 0;
}
+
+ do {
+ crypto_rand((char*) &test_circ_id, sizeof(test_circ_id));
+ test_circ_id &= mask;
+ } while (test_circ_id == 0);
+
test_circ_id |= high_bit;
- } while (circuit_id_in_use_on_orconn(test_circ_id, conn));
+
+ in_use = circuit_id_in_use_on_channel(test_circ_id, chan);
+ if (in_use == 1)
+ ++n_with_circ;
+ else if (in_use == 2)
+ ++n_pending_destroy;
+ } while (in_use);
return test_circ_id;
}
@@ -1736,8 +181,8 @@ circuit_list_path_impl(origin_circuit_t *circ, int verbose, int verbose_names)
circ->build_state->is_internal ? "internal" : "exit",
circ->build_state->need_uptime ? " (high-uptime)" : "",
circ->build_state->desired_path_len,
- circ->_base.state == CIRCUIT_STATE_OPEN ? "" : ", last hop ",
- circ->_base.state == CIRCUIT_STATE_OPEN ? "" :
+ circ->base_.state == CIRCUIT_STATE_OPEN ? "" : ", last hop ",
+ circ->base_.state == CIRCUIT_STATE_OPEN ? "" :
(nickname?nickname:"*unnamed*"));
}
@@ -1865,21 +310,74 @@ circuit_rep_hist_note_result(origin_circuit_t *circ)
} while (hop!=circ->cpath);
}
+#ifdef CURVE25519_ENABLED
+/** Return 1 iff at least one node in circ's cpath supports ntor. */
+static int
+circuit_cpath_supports_ntor(const origin_circuit_t *circ)
+{
+ crypt_path_t *head, *cpath;
+
+ cpath = head = circ->cpath;
+ do {
+ if (cpath->extend_info &&
+ !tor_mem_is_zero(
+ (const char*)cpath->extend_info->curve25519_onion_key.public_key,
+ CURVE25519_PUBKEY_LEN))
+ return 1;
+
+ cpath = cpath->next;
+ } while (cpath != head);
+
+ return 0;
+}
+#else
+#define circuit_cpath_supports_ntor(circ) 0
+#endif
+
/** Pick all the entries in our cpath. Stop and return 0 when we're
* happy, or return -1 if an error occurs. */
static int
onion_populate_cpath(origin_circuit_t *circ)
{
- int r;
- again:
- r = onion_extend_cpath(circ);
- if (r < 0) {
- log_info(LD_CIRC,"Generating cpath hop failed.");
- return -1;
+ int n_tries = 0;
+#ifdef CURVE25519_ENABLED
+ const int using_ntor = circuits_can_use_ntor();
+#else
+ const int using_ntor = 0;
+#endif
+
+#define MAX_POPULATE_ATTEMPTS 32
+
+ while (1) {
+ int r = onion_extend_cpath(circ);
+ if (r < 0) {
+ log_info(LD_CIRC,"Generating cpath hop failed.");
+ return -1;
+ }
+ if (r == 1) {
+ /* This circuit doesn't need/shouldn't be forced to have an ntor hop */
+ if (circ->build_state->desired_path_len <= 1 || ! using_ntor)
+ return 0;
+
+ /* This circuit has an ntor hop. great! */
+ if (circuit_cpath_supports_ntor(circ))
+ return 0;
+
+ /* No node in the circuit supports ntor. Have we already tried too many
+ * times? */
+ if (++n_tries >= MAX_POPULATE_ATTEMPTS)
+ break;
+
+ /* Clear the path and retry */
+ circuit_clear_cpath(circ);
+ }
}
- if (r == 0)
- goto again;
- return 0; /* if r == 1 */
+ log_warn(LD_CIRC, "I tried for %d times, but I couldn't build a %d-hop "
+ "circuit with at least one node that supports ntor.",
+ MAX_POPULATE_ATTEMPTS,
+ circ->build_state->desired_path_len);
+
+ return -1;
}
/** Create and return a new origin circuit. Initialize its purpose and
@@ -1888,9 +386,9 @@ onion_populate_cpath(origin_circuit_t *circ)
origin_circuit_t *
origin_circuit_init(uint8_t purpose, int flags)
{
- /* sets circ->p_circ_id and circ->p_conn */
+ /* sets circ->p_circ_id and circ->p_chan */
origin_circuit_t *circ = origin_circuit_new();
- circuit_set_state(TO_CIRCUIT(circ), CIRCUIT_STATE_OR_WAIT);
+ circuit_set_state(TO_CIRCUIT(circ), CIRCUIT_STATE_CHAN_WAIT);
circ->build_state = tor_malloc_zero(sizeof(cpath_build_state_t));
circ->build_state->onehop_tunnel =
((flags & CIRCLAUNCH_ONEHOP_TUNNEL) ? 1 : 0);
@@ -1900,7 +398,7 @@ origin_circuit_init(uint8_t purpose, int flags)
((flags & CIRCLAUNCH_NEED_CAPACITY) ? 1 : 0);
circ->build_state->is_internal =
((flags & CIRCLAUNCH_IS_INTERNAL) ? 1 : 0);
- circ->_base.purpose = purpose;
+ circ->base_.purpose = purpose;
return circ;
}
@@ -1942,7 +440,7 @@ int
circuit_handle_first_hop(origin_circuit_t *circ)
{
crypt_path_t *firsthop;
- or_connection_t *n_conn;
+ channel_t *n_chan;
int err_reason = 0;
const char *msg = NULL;
int should_launch = 0;
@@ -1952,29 +450,30 @@ circuit_handle_first_hop(origin_circuit_t *circ)
tor_assert(firsthop->extend_info);
/* now see if we're already connected to the first OR in 'route' */
- log_debug(LD_CIRC,"Looking for firsthop '%s:%u'",
- fmt_addr(&firsthop->extend_info->addr),
- firsthop->extend_info->port);
+ log_debug(LD_CIRC,"Looking for firsthop '%s'",
+ fmt_addrport(&firsthop->extend_info->addr,
+ firsthop->extend_info->port));
- n_conn = connection_or_get_for_extend(firsthop->extend_info->identity_digest,
- &firsthop->extend_info->addr,
- &msg,
- &should_launch);
+ n_chan = channel_get_for_extend(firsthop->extend_info->identity_digest,
+ &firsthop->extend_info->addr,
+ &msg,
+ &should_launch);
- if (!n_conn) {
+ if (!n_chan) {
/* not currently connected in a useful way. */
log_info(LD_CIRC, "Next router is %s: %s",
safe_str_client(extend_info_describe(firsthop->extend_info)),
msg?msg:"???");
- circ->_base.n_hop = extend_info_dup(firsthop->extend_info);
+ circ->base_.n_hop = extend_info_dup(firsthop->extend_info);
if (should_launch) {
if (circ->build_state->onehop_tunnel)
control_event_bootstrap(BOOTSTRAP_STATUS_CONN_DIR, 0);
- n_conn = connection_or_connect(&firsthop->extend_info->addr,
- firsthop->extend_info->port,
- firsthop->extend_info->identity_digest);
- if (!n_conn) { /* connect failed, forget the whole thing */
+ n_chan = channel_connect_for_circuit(
+ &firsthop->extend_info->addr,
+ firsthop->extend_info->port,
+ firsthop->extend_info->identity_digest);
+ if (!n_chan) { /* connect failed, forget the whole thing */
log_info(LD_CIRC,"connect to firsthop failed. Closing.");
return -END_CIRC_REASON_CONNECTFAILED;
}
@@ -1982,13 +481,13 @@ circuit_handle_first_hop(origin_circuit_t *circ)
log_debug(LD_CIRC,"connecting in progress (or finished). Good.");
/* return success. The onion/circuit/etc will be taken care of
- * automatically (may already have been) whenever n_conn reaches
+ * automatically (may already have been) whenever n_chan reaches
* OR_CONN_STATE_OPEN.
*/
return 0;
} else { /* it's already open. use it. */
- tor_assert(!circ->_base.n_hop);
- circ->_base.n_conn = n_conn;
+ tor_assert(!circ->base_.n_hop);
+ circ->base_.n_chan = n_chan;
log_debug(LD_CIRC,"Conn open. Delivering first onion skin.");
if ((err_reason = circuit_send_next_onion_skin(circ)) < 0) {
log_info(LD_CIRC,"circuit_send_next_onion_skin failed.");
@@ -2004,48 +503,49 @@ circuit_handle_first_hop(origin_circuit_t *circ)
* Status is 1 if connect succeeded, or 0 if connect failed.
*/
void
-circuit_n_conn_done(or_connection_t *or_conn, int status)
+circuit_n_chan_done(channel_t *chan, int status)
{
smartlist_t *pending_circs;
int err_reason = 0;
- log_debug(LD_CIRC,"or_conn to %s/%s, status=%d",
- or_conn->nickname ? or_conn->nickname : "NULL",
- or_conn->_base.address, status);
+ tor_assert(chan);
+
+ log_debug(LD_CIRC,"chan to %s/%s, status=%d",
+ chan->nickname ? chan->nickname : "NULL",
+ channel_get_canonical_remote_descr(chan), status);
pending_circs = smartlist_new();
- circuit_get_all_pending_on_or_conn(pending_circs, or_conn);
+ circuit_get_all_pending_on_channel(pending_circs, chan);
SMARTLIST_FOREACH_BEGIN(pending_circs, circuit_t *, circ)
{
/* These checks are redundant wrt get_all_pending_on_or_conn, but I'm
* leaving them in in case it's possible for the status of a circuit to
* change as we're going down the list. */
- if (circ->marked_for_close || circ->n_conn || !circ->n_hop ||
- circ->state != CIRCUIT_STATE_OR_WAIT)
+ if (circ->marked_for_close || circ->n_chan || !circ->n_hop ||
+ circ->state != CIRCUIT_STATE_CHAN_WAIT)
continue;
if (tor_digest_is_zero(circ->n_hop->identity_digest)) {
/* Look at addr/port. This is an unkeyed connection. */
- if (!tor_addr_eq(&circ->n_hop->addr, &or_conn->_base.addr) ||
- circ->n_hop->port != or_conn->_base.port)
+ if (!channel_matches_extend_info(chan, circ->n_hop))
continue;
} else {
/* We expected a key. See if it's the right one. */
- if (tor_memneq(or_conn->identity_digest,
+ if (tor_memneq(chan->identity_digest,
circ->n_hop->identity_digest, DIGEST_LEN))
continue;
}
- if (!status) { /* or_conn failed; close circ */
- log_info(LD_CIRC,"or_conn failed. Closing circ.");
- circuit_mark_for_close(circ, END_CIRC_REASON_OR_CONN_CLOSED);
+ if (!status) { /* chan failed; close circ */
+ log_info(LD_CIRC,"Channel failed; closing circ.");
+ circuit_mark_for_close(circ, END_CIRC_REASON_CHANNEL_CLOSED);
continue;
}
log_debug(LD_CIRC, "Found circ, sending create cell.");
/* circuit_deliver_create_cell will set n_circ_id and add us to
- * orconn_circuid_circuit_map, so we don't need to call
- * set_circid_orconn here. */
- circ->n_conn = or_conn;
+ * chan_circuid_circuit_map, so we don't need to call
+ * set_circid_chan here. */
+ circ->n_chan = chan;
extend_info_free(circ->n_hop);
circ->n_hop = NULL;
@@ -2060,14 +560,13 @@ circuit_n_conn_done(or_connection_t *or_conn, int status)
* died? */
}
} else {
- /* pull the create cell out of circ->onionskin, and send it */
- tor_assert(circ->n_conn_onionskin);
- if (circuit_deliver_create_cell(circ,CELL_CREATE,
- circ->n_conn_onionskin)<0) {
+ /* pull the create cell out of circ->n_chan_create_cell, and send it */
+ tor_assert(circ->n_chan_create_cell);
+ if (circuit_deliver_create_cell(circ, circ->n_chan_create_cell, 1)<0) {
circuit_mark_for_close(circ, END_CIRC_REASON_RESOURCELIMIT);
continue;
}
- tor_free(circ->n_conn_onionskin);
+ tor_free(circ->n_chan_create_cell);
circuit_set_state(circ, CIRCUIT_STATE_OPEN);
}
}
@@ -2076,44 +575,65 @@ circuit_n_conn_done(or_connection_t *or_conn, int status)
smartlist_free(pending_circs);
}
-/** Find a new circid that isn't currently in use on the circ->n_conn
+/** Find a new circid that isn't currently in use on the circ->n_chan
* for the outgoing
- * circuit <b>circ</b>, and deliver a cell of type <b>cell_type</b>
- * (either CELL_CREATE or CELL_CREATE_FAST) with payload <b>payload</b>
- * to this circuit.
- * Return -1 if we failed to find a suitable circid, else return 0.
+ * circuit <b>circ</b>, and deliver the cell <b>create_cell</b> to this
+ * circuit. If <b>relayed</b> is true, this is a create cell somebody
+ * gave us via an EXTEND cell, so we shouldn't worry if we don't understand
+ * it. Return -1 if we failed to find a suitable circid, else return 0.
*/
static int
-circuit_deliver_create_cell(circuit_t *circ, uint8_t cell_type,
- const char *payload)
+circuit_deliver_create_cell(circuit_t *circ, const create_cell_t *create_cell,
+ int relayed)
{
cell_t cell;
circid_t id;
+ int r;
tor_assert(circ);
- tor_assert(circ->n_conn);
- tor_assert(payload);
- tor_assert(cell_type == CELL_CREATE || cell_type == CELL_CREATE_FAST);
+ tor_assert(circ->n_chan);
+ tor_assert(create_cell);
+ tor_assert(create_cell->cell_type == CELL_CREATE ||
+ create_cell->cell_type == CELL_CREATE_FAST ||
+ create_cell->cell_type == CELL_CREATE2);
- id = get_unique_circ_id_by_conn(circ->n_conn);
+ id = get_unique_circ_id_by_chan(circ->n_chan);
if (!id) {
- log_warn(LD_CIRC,"failed to get unique circID.");
+ static ratelim_t circid_warning_limit = RATELIM_INIT(9600);
+ log_fn_ratelim(&circid_warning_limit, LOG_WARN, LD_CIRC,
+ "failed to get unique circID.");
return -1;
}
- log_debug(LD_CIRC,"Chosen circID %u.", id);
- circuit_set_n_circid_orconn(circ, id, circ->n_conn);
+ log_debug(LD_CIRC,"Chosen circID %u.", (unsigned)id);
+ circuit_set_n_circid_chan(circ, id, circ->n_chan);
memset(&cell, 0, sizeof(cell_t));
- cell.command = cell_type;
+ r = relayed ? create_cell_format_relayed(&cell, create_cell)
+ : create_cell_format(&cell, create_cell);
+ if (r < 0) {
+ log_warn(LD_CIRC,"Couldn't format create cell");
+ return -1;
+ }
cell.circ_id = circ->n_circ_id;
- memcpy(cell.payload, payload, ONIONSKIN_CHALLENGE_LEN);
- append_cell_to_circuit_queue(circ, circ->n_conn, &cell,
+ append_cell_to_circuit_queue(circ, circ->n_chan, &cell,
CELL_DIRECTION_OUT, 0);
if (CIRCUIT_IS_ORIGIN(circ)) {
+ /* Update began timestamp for circuits starting their first hop */
+ if (TO_ORIGIN_CIRCUIT(circ)->cpath->state == CPATH_STATE_CLOSED) {
+ if (circ->n_chan->state != CHANNEL_STATE_OPEN) {
+ log_warn(LD_CIRC,
+ "Got first hop for a circuit without an opened channel. "
+ "State: %s.", channel_state_to_string(circ->n_chan->state));
+ tor_fragile_assert();
+ }
+
+ tor_gettimeofday(&circ->timestamp_began);
+ }
+
/* mark it so it gets better rate limiting treatment. */
- circ->n_conn->client_used = time(NULL);
+ channel_timestamp_client(circ->n_chan);
}
return 0;
@@ -2126,27 +646,30 @@ int
inform_testing_reachability(void)
{
char dirbuf[128];
+ char *address;
const routerinfo_t *me = router_get_my_routerinfo();
if (!me)
return 0;
+ address = tor_dup_ip(me->addr);
control_event_server_status(LOG_NOTICE,
"CHECKING_REACHABILITY ORADDRESS=%s:%d",
- me->address, me->or_port);
+ address, me->or_port);
if (me->dir_port) {
tor_snprintf(dirbuf, sizeof(dirbuf), " and DirPort %s:%d",
- me->address, me->dir_port);
+ address, me->dir_port);
control_event_server_status(LOG_NOTICE,
"CHECKING_REACHABILITY DIRADDRESS=%s:%d",
- me->address, me->dir_port);
+ address, me->dir_port);
}
log_notice(LD_OR, "Now checking whether ORPort %s:%d%s %s reachable... "
"(this may take up to %d minutes -- look for log "
"messages indicating success)",
- me->address, me->or_port,
+ address, me->or_port,
me->dir_port ? dirbuf : "",
me->dir_port ? "are" : "is",
TIMEOUT_UNTIL_UNREACHABILITY_COMPLAINT/60);
+ tor_free(address);
return 1;
}
@@ -2161,16 +684,18 @@ should_use_create_fast_for_circuit(origin_circuit_t *circ)
if (!circ->cpath->extend_info->onion_key)
return 1; /* our hand is forced: only a create_fast will work. */
- if (!options->FastFirstHopPK)
- return 0; /* we prefer to avoid create_fast */
if (public_server_mode(options)) {
/* We're a server, and we know an onion key. We can choose.
* Prefer to blend our circuit into the other circuits we are
* creating on behalf of others. */
return 0;
}
+ if (options->FastFirstHopPK == -1) {
+ /* option is "auto", so look at the consensus. */
+ return networkstatus_get_param(NULL, "usecreatefast", 1, 0, 1);
+ }
- return 1;
+ return options->FastFirstHopPK;
}
/** Return true if <b>circ</b> is the type of circuit we want to count
@@ -2185,6 +710,73 @@ circuit_timeout_want_to_count_circ(origin_circuit_t *circ)
&& circ->build_state->desired_path_len == DEFAULT_ROUTE_LEN;
}
+#ifdef CURVE25519_ENABLED
+/** Return true if the ntor handshake is enabled in the configuration, or if
+ * it's been set to "auto" in the configuration and it's enabled in the
+ * consensus. */
+static int
+circuits_can_use_ntor(void)
+{
+ const or_options_t *options = get_options();
+ if (options->UseNTorHandshake != -1)
+ return options->UseNTorHandshake;
+ return networkstatus_get_param(NULL, "UseNTorHandshake", 0, 0, 1);
+}
+#endif
+
+/** Decide whether to use a TAP or ntor handshake for connecting to <b>ei</b>
+ * directly, and set *<b>cell_type_out</b> and *<b>handshake_type_out</b>
+ * accordingly. */
+static void
+circuit_pick_create_handshake(uint8_t *cell_type_out,
+ uint16_t *handshake_type_out,
+ const extend_info_t *ei)
+{
+#ifdef CURVE25519_ENABLED
+ if (!tor_mem_is_zero((const char*)ei->curve25519_onion_key.public_key,
+ CURVE25519_PUBKEY_LEN) &&
+ circuits_can_use_ntor()) {
+ *cell_type_out = CELL_CREATE2;
+ *handshake_type_out = ONION_HANDSHAKE_TYPE_NTOR;
+ return;
+ }
+#else
+ (void) ei;
+#endif
+
+ *cell_type_out = CELL_CREATE;
+ *handshake_type_out = ONION_HANDSHAKE_TYPE_TAP;
+}
+
+/** Decide whether to use a TAP or ntor handshake for connecting to <b>ei</b>
+ * directly, and set *<b>handshake_type_out</b> accordingly. Decide whether,
+ * in extending through <b>node</b> to do so, we should use an EXTEND2 or an
+ * EXTEND cell to do so, and set *<b>cell_type_out</b> and
+ * *<b>create_cell_type_out</b> accordingly. */
+static void
+circuit_pick_extend_handshake(uint8_t *cell_type_out,
+ uint8_t *create_cell_type_out,
+ uint16_t *handshake_type_out,
+ const node_t *node_prev,
+ const extend_info_t *ei)
+{
+ uint8_t t;
+ circuit_pick_create_handshake(&t, handshake_type_out, ei);
+ /* XXXX024 The check for whether the node has a curve25519 key is a bad
+ * proxy for whether it can do extend2 cells; once a version that
+ * handles extend2 cells is out, remove it. */
+ if (node_prev &&
+ *handshake_type_out != ONION_HANDSHAKE_TYPE_TAP &&
+ (node_has_curve25519_onion_key(node_prev) ||
+ (node_prev->rs && node_prev->rs->version_supports_extend2_cells))) {
+ *cell_type_out = RELAY_COMMAND_EXTEND2;
+ *create_cell_type_out = CELL_CREATE2;
+ } else {
+ *cell_type_out = RELAY_COMMAND_EXTEND;
+ *create_cell_type_out = CELL_CREATE;
+ }
+}
+
/** This is the backbone function for building circuits.
*
* If circ's first hop is closed, then we need to build a create
@@ -2200,49 +792,50 @@ circuit_send_next_onion_skin(origin_circuit_t *circ)
{
crypt_path_t *hop;
const node_t *node;
- char payload[2+4+DIGEST_LEN+ONIONSKIN_CHALLENGE_LEN];
- char *onionskin;
- size_t payload_len;
tor_assert(circ);
if (circ->cpath->state == CPATH_STATE_CLOSED) {
+ /* This is the first hop. */
+ create_cell_t cc;
int fast;
- uint8_t cell_type;
+ int len;
log_debug(LD_CIRC,"First skin; sending create cell.");
+ memset(&cc, 0, sizeof(cc));
if (circ->build_state->onehop_tunnel)
control_event_bootstrap(BOOTSTRAP_STATUS_ONEHOP_CREATE, 0);
else
control_event_bootstrap(BOOTSTRAP_STATUS_CIRCUIT_CREATE, 0);
- node = node_get_by_id(circ->_base.n_conn->identity_digest);
+ node = node_get_by_id(circ->base_.n_chan->identity_digest);
fast = should_use_create_fast_for_circuit(circ);
if (!fast) {
/* We are an OR and we know the right onion key: we should
- * send an old slow create cell.
+ * send a create cell.
*/
- cell_type = CELL_CREATE;
- if (onion_skin_create(circ->cpath->extend_info->onion_key,
- &(circ->cpath->dh_handshake_state),
- payload) < 0) {
- log_warn(LD_CIRC,"onion_skin_create (first hop) failed.");
- return - END_CIRC_REASON_INTERNAL;
- }
+ circuit_pick_create_handshake(&cc.cell_type, &cc.handshake_type,
+ circ->cpath->extend_info);
note_request("cell: create", 1);
} else {
/* We are not an OR, and we're building the first hop of a circuit to a
* new OR: we can be speedy and use CREATE_FAST to save an RSA operation
* and a DH operation. */
- cell_type = CELL_CREATE_FAST;
- memset(payload, 0, sizeof(payload));
- crypto_rand((char*) circ->cpath->fast_handshake_state,
- sizeof(circ->cpath->fast_handshake_state));
- memcpy(payload, circ->cpath->fast_handshake_state,
- sizeof(circ->cpath->fast_handshake_state));
+ cc.cell_type = CELL_CREATE_FAST;
+ cc.handshake_type = ONION_HANDSHAKE_TYPE_FAST;
note_request("cell: create fast", 1);
}
- if (circuit_deliver_create_cell(TO_CIRCUIT(circ), cell_type, payload) < 0)
+ len = onion_skin_create(cc.handshake_type,
+ circ->cpath->extend_info,
+ &circ->cpath->handshake_state,
+ cc.onionskin);
+ if (len < 0) {
+ log_warn(LD_CIRC,"onion_skin_create (first hop) failed.");
+ return - END_CIRC_REASON_INTERNAL;
+ }
+ cc.handshake_len = len;
+
+ if (circuit_deliver_create_cell(TO_CIRCUIT(circ), &cc, 0) < 0)
return - END_CIRC_REASON_RESOURCELIMIT;
circ->cpath->state = CPATH_STATE_AWAITING_KEYS;
@@ -2251,10 +844,13 @@ circuit_send_next_onion_skin(origin_circuit_t *circ)
fast ? "CREATE_FAST" : "CREATE",
node ? node_describe(node) : "<unnamed>");
} else {
+ extend_cell_t ec;
+ int len;
tor_assert(circ->cpath->state == CPATH_STATE_OPEN);
- tor_assert(circ->_base.state == CIRCUIT_STATE_BUILDING);
+ tor_assert(circ->base_.state == CIRCUIT_STATE_BUILDING);
log_debug(LD_CIRC,"starting to send subsequent skin.");
hop = onion_next_hop_in_cpath(circ->cpath);
+ memset(&ec, 0, sizeof(ec));
if (!hop) {
/* done building the circuit. whew. */
circuit_set_state(TO_CIRCUIT(circ), CIRCUIT_STATE_OPEN);
@@ -2262,27 +858,31 @@ circuit_send_next_onion_skin(origin_circuit_t *circ)
struct timeval end;
long timediff;
tor_gettimeofday(&end);
- timediff = tv_mdiff(&circ->_base.timestamp_created, &end);
+ timediff = tv_mdiff(&circ->base_.timestamp_began, &end);
/*
* If the circuit build time is much greater than we would have cut
* it off at, we probably had a suspend event along this codepath,
* and we should discard the value.
*/
- if (timediff < 0 || timediff > 2*circ_times.close_ms+1000) {
+ if (timediff < 0 ||
+ timediff > 2*get_circuit_build_close_time_ms()+1000) {
log_notice(LD_CIRC, "Strange value for circuit build time: %ldmsec. "
"Assuming clock jump. Purpose %d (%s)", timediff,
- circ->_base.purpose,
- circuit_purpose_to_string(circ->_base.purpose));
+ circ->base_.purpose,
+ circuit_purpose_to_string(circ->base_.purpose));
} else if (!circuit_build_times_disabled()) {
/* Only count circuit times if the network is live */
- if (circuit_build_times_network_check_live(&circ_times)) {
- circuit_build_times_add_time(&circ_times, (build_time_t)timediff);
- circuit_build_times_set_timeout(&circ_times);
+ if (circuit_build_times_network_check_live(
+ get_circuit_build_times())) {
+ circuit_build_times_add_time(get_circuit_build_times_mutable(),
+ (build_time_t)timediff);
+ circuit_build_times_set_timeout(get_circuit_build_times_mutable());
}
- if (circ->_base.purpose != CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT) {
- circuit_build_times_network_circ_success(&circ_times);
+ if (circ->base_.purpose != CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT) {
+ circuit_build_times_network_circ_success(
+ get_circuit_build_times_mutable());
}
}
}
@@ -2293,6 +893,10 @@ circuit_send_next_onion_skin(origin_circuit_t *circ)
control_event_bootstrap(BOOTSTRAP_STATUS_REQUESTING_STATUS, 0);
}
+ pathbias_count_build_success(circ);
+ circuit_rep_hist_note_result(circ);
+ circuit_has_opened(circ); /* do other actions as necessary */
+
if (!can_complete_circuit && !circ->build_state->onehop_tunnel) {
const or_options_t *options = get_options();
can_complete_circuit=1;
@@ -2309,13 +913,10 @@ circuit_send_next_onion_skin(origin_circuit_t *circ)
}
}
- pathbias_count_success(circ);
- circuit_rep_hist_note_result(circ);
- circuit_has_opened(circ); /* do other actions as necessary */
-
/* We're done with measurement circuits here. Just close them */
- if (circ->_base.purpose == CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT)
+ if (circ->base_.purpose == CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT) {
circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_FINISHED);
+ }
return 0;
}
@@ -2324,29 +925,50 @@ circuit_send_next_onion_skin(origin_circuit_t *circ)
return - END_CIRC_REASON_INTERNAL;
}
- set_uint32(payload, tor_addr_to_ipv4n(&hop->extend_info->addr));
- set_uint16(payload+4, htons(hop->extend_info->port));
-
- onionskin = payload+2+4;
- memcpy(payload+2+4+ONIONSKIN_CHALLENGE_LEN,
- hop->extend_info->identity_digest, DIGEST_LEN);
- payload_len = 2+4+ONIONSKIN_CHALLENGE_LEN+DIGEST_LEN;
-
- if (onion_skin_create(hop->extend_info->onion_key,
- &(hop->dh_handshake_state), onionskin) < 0) {
+ {
+ const node_t *prev_node;
+ prev_node = node_get_by_id(hop->prev->extend_info->identity_digest);
+ circuit_pick_extend_handshake(&ec.cell_type,
+ &ec.create_cell.cell_type,
+ &ec.create_cell.handshake_type,
+ prev_node,
+ hop->extend_info);
+ }
+
+ tor_addr_copy(&ec.orport_ipv4.addr, &hop->extend_info->addr);
+ ec.orport_ipv4.port = hop->extend_info->port;
+ tor_addr_make_unspec(&ec.orport_ipv6.addr);
+ memcpy(ec.node_id, hop->extend_info->identity_digest, DIGEST_LEN);
+
+ len = onion_skin_create(ec.create_cell.handshake_type,
+ hop->extend_info,
+ &hop->handshake_state,
+ ec.create_cell.onionskin);
+ if (len < 0) {
log_warn(LD_CIRC,"onion_skin_create failed.");
return - END_CIRC_REASON_INTERNAL;
}
+ ec.create_cell.handshake_len = len;
log_info(LD_CIRC,"Sending extend relay cell.");
note_request("cell: extend", 1);
- /* send it to hop->prev, because it will transfer
- * it to a create cell and then send to hop */
- if (relay_send_command_from_edge(0, TO_CIRCUIT(circ),
- RELAY_COMMAND_EXTEND,
- payload, payload_len, hop->prev) < 0)
- return 0; /* circuit is closed */
+ {
+ uint8_t command = 0;
+ uint16_t payload_len=0;
+ uint8_t payload[RELAY_PAYLOAD_SIZE];
+ if (extend_cell_format(&command, &payload_len, payload, &ec)<0) {
+ log_warn(LD_CIRC,"Couldn't format extend cell");
+ return -END_CIRC_REASON_INTERNAL;
+ }
+ /* send it to hop->prev, because it will transfer
+ * it to a create cell and then send to hop */
+ if (relay_send_command_from_edge(0, TO_CIRCUIT(circ),
+ command,
+ (char*)payload, payload_len,
+ hop->prev) < 0)
+ return 0; /* circuit is closed */
+ }
hop->state = CPATH_STATE_AWAITING_KEYS;
}
return 0;
@@ -2369,7 +991,7 @@ circuit_note_clock_jumped(int seconds_elapsed)
control_event_client_status(severity, "CIRCUIT_NOT_ESTABLISHED REASON=%s",
"CLOCK_JUMPED");
circuit_mark_all_unused_circs();
- circuit_expire_all_dirty_circs();
+ circuit_mark_all_dirty_circs_as_unusable();
}
/** Take the 'extend' <b>cell</b>, pull out addr/port plus the onion
@@ -2383,19 +1005,15 @@ circuit_note_clock_jumped(int seconds_elapsed)
int
circuit_extend(cell_t *cell, circuit_t *circ)
{
- or_connection_t *n_conn;
+ channel_t *n_chan;
relay_header_t rh;
- char *onionskin;
- char *id_digest=NULL;
- uint32_t n_addr32;
- uint16_t n_port;
- tor_addr_t n_addr;
+ extend_cell_t ec;
const char *msg = NULL;
int should_launch = 0;
- if (circ->n_conn) {
+ if (circ->n_chan) {
log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
- "n_conn already set. Bug/attack. Closing.");
+ "n_chan already set. Bug/attack. Closing.");
return -1;
}
if (circ->n_hop) {
@@ -2412,27 +1030,21 @@ circuit_extend(cell_t *cell, circuit_t *circ)
relay_header_unpack(&rh, cell->payload);
- if (rh.length < 4+2+ONIONSKIN_CHALLENGE_LEN+DIGEST_LEN) {
+ if (extend_cell_parse(&ec, rh.command,
+ cell->payload+RELAY_HEADER_SIZE,
+ rh.length) < 0) {
log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
- "Wrong length %d on extend cell. Closing circuit.",
- rh.length);
+ "Can't parse extend cell. Closing circuit.");
return -1;
}
- n_addr32 = ntohl(get_uint32(cell->payload+RELAY_HEADER_SIZE));
- n_port = ntohs(get_uint16(cell->payload+RELAY_HEADER_SIZE+4));
- onionskin = (char*) cell->payload+RELAY_HEADER_SIZE+4+2;
- id_digest = (char*) cell->payload+RELAY_HEADER_SIZE+4+2+
- ONIONSKIN_CHALLENGE_LEN;
- tor_addr_from_ipv4h(&n_addr, n_addr32);
-
- if (!n_port || !n_addr32) {
+ if (!ec.orport_ipv4.port || tor_addr_is_null(&ec.orport_ipv4.addr)) {
log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
"Client asked me to extend to zero destination port or addr.");
return -1;
}
- if (tor_addr_is_internal(&n_addr, 0) &&
+ if (tor_addr_is_internal(&ec.orport_ipv4.addr, 0) &&
!get_options()->ExtendAllowPrivateAddresses) {
log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
"Client asked me to extend to a private address");
@@ -2445,7 +1057,7 @@ circuit_extend(cell_t *cell, circuit_t *circ)
* fingerprints -- a) because it opens the user up to a mitm attack,
* and b) because it lets an attacker force the relay to hold open a
* new TLS connection for each extend request. */
- if (tor_digest_is_zero(id_digest)) {
+ if (tor_digest_is_zero((const char*)ec.node_id)) {
log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
"Client asked me to extend without specifying an id_digest.");
return -1;
@@ -2454,55 +1066,64 @@ circuit_extend(cell_t *cell, circuit_t *circ)
/* Next, check if we're being asked to connect to the hop that the
* extend cell came from. There isn't any reason for that, and it can
* assist circular-path attacks. */
- if (tor_memeq(id_digest, TO_OR_CIRCUIT(circ)->p_conn->identity_digest,
- DIGEST_LEN)) {
+ if (tor_memeq(ec.node_id,
+ TO_OR_CIRCUIT(circ)->p_chan->identity_digest,
+ DIGEST_LEN)) {
log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
"Client asked me to extend back to the previous hop.");
return -1;
}
- n_conn = connection_or_get_for_extend(id_digest,
- &n_addr,
- &msg,
- &should_launch);
+ n_chan = channel_get_for_extend((const char*)ec.node_id,
+ &ec.orport_ipv4.addr,
+ &msg,
+ &should_launch);
- if (!n_conn) {
- log_debug(LD_CIRC|LD_OR,"Next router (%s:%d): %s",
- fmt_addr(&n_addr), (int)n_port, msg?msg:"????");
+ if (!n_chan) {
+ log_debug(LD_CIRC|LD_OR,"Next router (%s): %s",
+ fmt_addrport(&ec.orport_ipv4.addr,ec.orport_ipv4.port),
+ msg?msg:"????");
- circ->n_hop = extend_info_alloc(NULL /*nickname*/,
- id_digest,
- NULL /*onion_key*/,
- &n_addr, n_port);
+ circ->n_hop = extend_info_new(NULL /*nickname*/,
+ (const char*)ec.node_id,
+ NULL /*onion_key*/,
+ NULL /*curve25519_key*/,
+ &ec.orport_ipv4.addr,
+ ec.orport_ipv4.port);
- circ->n_conn_onionskin = tor_malloc(ONIONSKIN_CHALLENGE_LEN);
- memcpy(circ->n_conn_onionskin, onionskin, ONIONSKIN_CHALLENGE_LEN);
- circuit_set_state(circ, CIRCUIT_STATE_OR_WAIT);
+ circ->n_chan_create_cell = tor_memdup(&ec.create_cell,
+ sizeof(ec.create_cell));
+
+ circuit_set_state(circ, CIRCUIT_STATE_CHAN_WAIT);
if (should_launch) {
/* we should try to open a connection */
- n_conn = connection_or_connect(&n_addr, n_port, id_digest);
- if (!n_conn) {
- log_info(LD_CIRC,"Launching n_conn failed. Closing circuit.");
+ n_chan = channel_connect_for_circuit(&ec.orport_ipv4.addr,
+ ec.orport_ipv4.port,
+ (const char*)ec.node_id);
+ if (!n_chan) {
+ log_info(LD_CIRC,"Launching n_chan failed. Closing circuit.");
circuit_mark_for_close(circ, END_CIRC_REASON_CONNECTFAILED);
return 0;
}
log_debug(LD_CIRC,"connecting in progress (or finished). Good.");
}
/* return success. The onion/circuit/etc will be taken care of
- * automatically (may already have been) whenever n_conn reaches
+ * automatically (may already have been) whenever n_chan reaches
* OR_CONN_STATE_OPEN.
*/
return 0;
}
tor_assert(!circ->n_hop); /* Connection is already established. */
- circ->n_conn = n_conn;
- log_debug(LD_CIRC,"n_conn is %s:%u",
- n_conn->_base.address,n_conn->_base.port);
+ circ->n_chan = n_chan;
+ log_debug(LD_CIRC,
+ "n_chan is %s",
+ channel_get_canonical_remote_descr(n_chan));
- if (circuit_deliver_create_cell(circ, CELL_CREATE, onionskin) < 0)
+ if (circuit_deliver_create_cell(circ, &ec.create_cell, 1) < 0)
return -1;
+
return 0;
}
@@ -2556,350 +1177,9 @@ circuit_init_cpath_crypto(crypt_path_t *cpath, const char *key_data,
return 0;
}
-/** The minimum number of first hop completions before we start
- * thinking about warning about path bias and dropping guards */
-static int
-pathbias_get_min_circs(const or_options_t *options)
-{
-#define DFLT_PATH_BIAS_MIN_CIRC 20
- if (options->PathBiasCircThreshold >= 5)
- return options->PathBiasCircThreshold;
- else
- return networkstatus_get_param(NULL, "pb_mincircs",
- DFLT_PATH_BIAS_MIN_CIRC,
- 5, INT32_MAX);
-}
-
-static double
-pathbias_get_notice_rate(const or_options_t *options)
-{
-#define DFLT_PATH_BIAS_NOTICE_PCT 40
- if (options->PathBiasNoticeRate >= 0.0)
- return options->PathBiasNoticeRate;
- else
- return networkstatus_get_param(NULL, "pb_noticepct",
- DFLT_PATH_BIAS_NOTICE_PCT, 0, 100)/100.0;
-}
-
-static double
-pathbias_get_disable_rate(const or_options_t *options)
-{
-// XXX: This needs tuning based on use + experimentation before we set it
-#define DFLT_PATH_BIAS_DISABLE_PCT 0
- if (options->PathBiasDisableRate >= 0.0)
- return options->PathBiasDisableRate;
- else
- return networkstatus_get_param(NULL, "pb_disablepct",
- DFLT_PATH_BIAS_DISABLE_PCT, 0, 100)/100.0;
-}
-
-static int
-pathbias_get_scale_threshold(const or_options_t *options)
-{
-#define DFLT_PATH_BIAS_SCALE_THRESHOLD 200
- if (options->PathBiasScaleThreshold >= 2)
- return options->PathBiasScaleThreshold;
- else
- return networkstatus_get_param(NULL, "pb_scalecircs",
- DFLT_PATH_BIAS_SCALE_THRESHOLD, 10,
- INT32_MAX);
-}
-
-static int
-pathbias_get_scale_factor(const or_options_t *options)
-{
-#define DFLT_PATH_BIAS_SCALE_FACTOR 4
- if (options->PathBiasScaleFactor >= 1)
- return options->PathBiasScaleFactor;
- else
- return networkstatus_get_param(NULL, "pb_scalefactor",
- DFLT_PATH_BIAS_SCALE_THRESHOLD, 1, INT32_MAX);
-}
-
-static const char *
-pathbias_state_to_string(path_state_t state)
-{
- switch (state) {
- case PATH_STATE_NEW_CIRC:
- return "new";
- case PATH_STATE_DID_FIRST_HOP:
- return "first hop";
- case PATH_STATE_SUCCEEDED:
- return "succeeded";
- }
-
- return "unknown";
-}
-
-/**
- * Check our circuit state to see if this is a successful first hop.
- * If so, record it in the current guard's path bias first_hop count.
- *
- * Also check for several potential error cases for bug #6475.
- */
-static int
-pathbias_count_first_hop(origin_circuit_t *circ)
-{
-#define FIRST_HOP_NOTICE_INTERVAL (600)
- static ratelim_t first_hop_notice_limit =
- RATELIM_INIT(FIRST_HOP_NOTICE_INTERVAL);
- char *rate_msg = NULL;
-
- /* Completely ignore one hop circuits */
- if (circ->build_state->onehop_tunnel ||
- circ->build_state->desired_path_len == 1) {
- /* Check for inconsistency */
- if (circ->build_state->desired_path_len != 1 ||
- !circ->build_state->onehop_tunnel) {
- if ((rate_msg = rate_limit_log(&first_hop_notice_limit,
- approx_time()))) {
- log_info(LD_BUG,
- "One-hop circuit has length %d. Path state is %s. "
- "Circuit is a %s currently %s.%s",
- circ->build_state->desired_path_len,
- pathbias_state_to_string(circ->path_state),
- circuit_purpose_to_string(circ->_base.purpose),
- circuit_state_to_string(circ->_base.state),
- rate_msg);
- tor_free(rate_msg);
- }
- tor_fragile_assert();
- }
- return 0;
- }
-
- if (circ->cpath->state == CPATH_STATE_AWAITING_KEYS) {
- /* Help track down the real cause of bug #6475: */
- if (circ->has_opened && circ->path_state != PATH_STATE_DID_FIRST_HOP) {
- if ((rate_msg = rate_limit_log(&first_hop_notice_limit,
- approx_time()))) {
- log_info(LD_BUG,
- "Opened circuit is in strange path state %s. "
- "Circuit is a %s currently %s.%s",
- pathbias_state_to_string(circ->path_state),
- circuit_purpose_to_string(circ->_base.purpose),
- circuit_state_to_string(circ->_base.state),
- rate_msg);
- tor_free(rate_msg);
- }
- }
-
- /* Don't count cannibalized circs for path bias */
- if (!circ->has_opened) {
- entry_guard_t *guard;
-
- guard = entry_guard_get_by_id_digest(
- circ->_base.n_conn->identity_digest);
- if (guard) {
- if (circ->path_state == PATH_STATE_NEW_CIRC) {
- circ->path_state = PATH_STATE_DID_FIRST_HOP;
-
- if (entry_guard_inc_first_hop_count(guard) < 0) {
- /* Bogus guard; we already warned. */
- return -END_CIRC_REASON_TORPROTOCOL;
- }
- } else {
- if ((rate_msg = rate_limit_log(&first_hop_notice_limit,
- approx_time()))) {
- log_info(LD_BUG,
- "Unopened circuit has strange path state %s. "
- "Circuit is a %s currently %s.%s",
- pathbias_state_to_string(circ->path_state),
- circuit_purpose_to_string(circ->_base.purpose),
- circuit_state_to_string(circ->_base.state),
- rate_msg);
- tor_free(rate_msg);
- }
- }
- } else {
- if ((rate_msg = rate_limit_log(&first_hop_notice_limit,
- approx_time()))) {
- log_info(LD_BUG,
- "Unopened circuit has no known guard. "
- "Circuit is a %s currently %s.%s",
- circuit_purpose_to_string(circ->_base.purpose),
- circuit_state_to_string(circ->_base.state),
- rate_msg);
- tor_free(rate_msg);
- }
- }
- }
- } else {
- /* Help track down the real cause of bug #6475: */
- if (circ->path_state == PATH_STATE_NEW_CIRC) {
- if ((rate_msg = rate_limit_log(&first_hop_notice_limit,
- approx_time()))) {
- log_info(LD_BUG,
- "A %s circuit is in cpath state %d (opened: %d). "
- "Circuit is a %s currently %s.%s",
- pathbias_state_to_string(circ->path_state),
- circ->cpath->state, circ->has_opened,
- circuit_purpose_to_string(circ->_base.purpose),
- circuit_state_to_string(circ->_base.state),
- rate_msg);
- tor_free(rate_msg);
- }
- }
- }
-
- return 0;
-}
-
-/**
- * Check our circuit state to see if this is a successful circuit
- * completion. If so, record it in the current guard's path bias
- * success count.
- *
- * Also check for several potential error cases for bug #6475.
- */
-static void
-pathbias_count_success(origin_circuit_t *circ)
-{
-#define SUCCESS_NOTICE_INTERVAL (600)
- static ratelim_t success_notice_limit =
- RATELIM_INIT(SUCCESS_NOTICE_INTERVAL);
- char *rate_msg = NULL;
-
- /* Ignore one hop circuits */
- if (circ->build_state->onehop_tunnel ||
- circ->build_state->desired_path_len == 1) {
- /* Check for consistency */
- if (circ->build_state->desired_path_len != 1 ||
- !circ->build_state->onehop_tunnel) {
- if ((rate_msg = rate_limit_log(&success_notice_limit,
- approx_time()))) {
- log_info(LD_BUG,
- "One-hop circuit has length %d. Path state is %s. "
- "Circuit is a %s currently %s.%s",
- circ->build_state->desired_path_len,
- pathbias_state_to_string(circ->path_state),
- circuit_purpose_to_string(circ->_base.purpose),
- circuit_state_to_string(circ->_base.state),
- rate_msg);
- tor_free(rate_msg);
- }
- tor_fragile_assert();
- }
- return;
- }
-
- /* Don't count cannibalized/reused circs for path bias */
- if (!circ->has_opened) {
- entry_guard_t *guard =
- entry_guard_get_by_id_digest(circ->_base.n_conn->identity_digest);
-
- if (guard) {
- if (circ->path_state == PATH_STATE_DID_FIRST_HOP) {
- circ->path_state = PATH_STATE_SUCCEEDED;
- guard->circuit_successes++;
-
- log_info(LD_PROTOCOL, "Got success count %u/%u for guard %s=%s",
- guard->circuit_successes, guard->first_hops,
- guard->nickname, hex_str(guard->identity, DIGEST_LEN));
- } else {
- if ((rate_msg = rate_limit_log(&success_notice_limit,
- approx_time()))) {
- log_info(LD_BUG,
- "Succeeded circuit is in strange path state %s. "
- "Circuit is a %s currently %s.%s",
- pathbias_state_to_string(circ->path_state),
- circuit_purpose_to_string(circ->_base.purpose),
- circuit_state_to_string(circ->_base.state),
- rate_msg);
- tor_free(rate_msg);
- }
- }
-
- if (guard->first_hops < guard->circuit_successes) {
- log_info(LD_BUG, "Unexpectedly high circuit_successes (%u/%u) "
- "for guard %s=%s",
- guard->circuit_successes, guard->first_hops,
- guard->nickname, hex_str(guard->identity, DIGEST_LEN));
- }
- } else {
- if ((rate_msg = rate_limit_log(&success_notice_limit,
- approx_time()))) {
- log_info(LD_BUG,
- "Completed circuit has no known guard. "
- "Circuit is a %s currently %s.%s",
- circuit_purpose_to_string(circ->_base.purpose),
- circuit_state_to_string(circ->_base.state),
- rate_msg);
- tor_free(rate_msg);
- }
- }
- } else {
- if (circ->path_state != PATH_STATE_SUCCEEDED) {
- if ((rate_msg = rate_limit_log(&success_notice_limit,
- approx_time()))) {
- log_info(LD_BUG,
- "Opened circuit is in strange path state %s. "
- "Circuit is a %s currently %s.%s",
- pathbias_state_to_string(circ->path_state),
- circuit_purpose_to_string(circ->_base.purpose),
- circuit_state_to_string(circ->_base.state),
- rate_msg);
- tor_free(rate_msg);
- }
- }
- }
-}
-
-/** Increment the number of times we successfully extended a circuit to
- * 'guard', first checking if the failure rate is high enough that we should
- * eliminate the guard. Return -1 if the guard looks no good; return 0 if the
- * guard looks fine. */
-static int
-entry_guard_inc_first_hop_count(entry_guard_t *guard)
-{
- const or_options_t *options = get_options();
-
- entry_guards_changed();
-
- if (guard->first_hops > (unsigned)pathbias_get_min_circs(options)) {
- /* Note: We rely on the < comparison here to allow us to set a 0
- * rate and disable the feature entirely. If refactoring, don't
- * change to <= */
- if (guard->circuit_successes/((double)guard->first_hops)
- < pathbias_get_disable_rate(options)) {
-
- log_info(LD_PROTOCOL,
- "Extremely low circuit success rate %u/%u for guard %s=%s. "
- "This might indicate an attack, or a bug.",
- guard->circuit_successes, guard->first_hops, guard->nickname,
- hex_str(guard->identity, DIGEST_LEN));
-
- guard->path_bias_disabled = 1;
- guard->bad_since = approx_time();
- return -1;
- } else if (guard->circuit_successes/((double)guard->first_hops)
- < pathbias_get_notice_rate(options)
- && !guard->path_bias_notice) {
- guard->path_bias_notice = 1;
- log_info(LD_PROTOCOL,
- "Low circuit success rate %u/%u for guard %s=%s.",
- guard->circuit_successes, guard->first_hops, guard->nickname,
- hex_str(guard->identity, DIGEST_LEN));
- }
- }
-
- /* If we get a ton of circuits, just scale everything down */
- if (guard->first_hops > (unsigned)pathbias_get_scale_threshold(options)) {
- const int scale_factor = pathbias_get_scale_factor(options);
- guard->first_hops /= scale_factor;
- guard->circuit_successes /= scale_factor;
- }
- guard->first_hops++;
- log_info(LD_PROTOCOL, "Got success count %u/%u for guard %s=%s",
- guard->circuit_successes, guard->first_hops, guard->nickname,
- hex_str(guard->identity, DIGEST_LEN));
- return 0;
-}
-
-/** A created or extended cell came back to us on the circuit, and it included
- * <b>reply</b> as its body. (If <b>reply_type</b> is CELL_CREATED, the body
- * contains (the second DH key, plus KH). If <b>reply_type</b> is
- * CELL_CREATED_FAST, the body contains a secret y and a hash H(x|y).)
+/** A "created" cell <b>reply</b> came back to us on circuit <b>circ</b>.
+ * (The body of <b>reply</b> varies depending on what sort of handshake
+ * this is.)
*
* Calculate the appropriate keys and digests, make sure KH is
* correct, and initialize this hop of the cpath.
@@ -2907,14 +1187,14 @@ entry_guard_inc_first_hop_count(entry_guard_t *guard)
* Return - reason if we want to mark circ for close, else return 0.
*/
int
-circuit_finish_handshake(origin_circuit_t *circ, uint8_t reply_type,
- const uint8_t *reply)
+circuit_finish_handshake(origin_circuit_t *circ,
+ const created_cell_t *reply)
{
char keys[CPATH_KEY_MATERIAL_LEN];
crypt_path_t *hop;
int rv;
- if ((rv = pathbias_count_first_hop(circ)) < 0)
+ if ((rv = pathbias_count_build_attempt(circ)) < 0)
return rv;
if (circ->cpath->state == CPATH_STATE_AWAITING_KEYS) {
@@ -2928,39 +1208,25 @@ circuit_finish_handshake(origin_circuit_t *circ, uint8_t reply_type,
}
tor_assert(hop->state == CPATH_STATE_AWAITING_KEYS);
- if (reply_type == CELL_CREATED && hop->dh_handshake_state) {
- if (onion_skin_client_handshake(hop->dh_handshake_state, (char*)reply,keys,
- DIGEST_LEN*2+CIPHER_KEY_LEN*2) < 0) {
+ {
+ if (onion_skin_client_handshake(hop->handshake_state.tag,
+ &hop->handshake_state,
+ reply->reply, reply->handshake_len,
+ (uint8_t*)keys, sizeof(keys),
+ (uint8_t*)hop->rend_circ_nonce) < 0) {
log_warn(LD_CIRC,"onion_skin_client_handshake failed.");
return -END_CIRC_REASON_TORPROTOCOL;
}
- /* Remember hash of g^xy */
- memcpy(hop->handshake_digest, reply+DH_KEY_LEN, DIGEST_LEN);
- } else if (reply_type == CELL_CREATED_FAST && !hop->dh_handshake_state) {
- if (fast_client_handshake(hop->fast_handshake_state, reply,
- (uint8_t*)keys,
- DIGEST_LEN*2+CIPHER_KEY_LEN*2) < 0) {
- log_warn(LD_CIRC,"fast_client_handshake failed.");
- return -END_CIRC_REASON_TORPROTOCOL;
- }
- memcpy(hop->handshake_digest, reply+DIGEST_LEN, DIGEST_LEN);
- } else {
- log_warn(LD_PROTOCOL,"CREATED cell type did not match CREATE cell type.");
- return -END_CIRC_REASON_TORPROTOCOL;
}
- crypto_dh_free(hop->dh_handshake_state); /* don't need it anymore */
- hop->dh_handshake_state = NULL;
-
- memset(hop->fast_handshake_state, 0, sizeof(hop->fast_handshake_state));
+ onion_handshake_state_release(&hop->handshake_state);
if (circuit_init_cpath_crypto(hop, keys, 0)<0) {
return -END_CIRC_REASON_TORPROTOCOL;
}
hop->state = CPATH_STATE_OPEN;
- log_info(LD_CIRC,"Finished building %scircuit hop:",
- (reply_type == CELL_CREATED_FAST) ? "fast " : "");
+ log_info(LD_CIRC,"Finished building circuit hop:");
circuit_log_path(LOG_INFO,LD_CIRC,circ);
control_event_circuit_status(circ, CIRC_EVENT_EXTENDED, 0);
@@ -2969,12 +1235,12 @@ circuit_finish_handshake(origin_circuit_t *circ, uint8_t reply_type,
/** We received a relay truncated cell on circ.
*
- * Since we don't ask for truncates currently, getting a truncated
+ * Since we don't send truncates currently, getting a truncated
* means that a connection broke or an extend failed. For now,
- * just give up: for circ to close, and return 0.
+ * just give up: force circ to close, and return 0.
*/
int
-circuit_truncated(origin_circuit_t *circ, crypt_path_t *layer)
+circuit_truncated(origin_circuit_t *circ, crypt_path_t *layer, int reason)
{
// crypt_path_t *victim;
// connection_t *stream;
@@ -2982,12 +1248,12 @@ circuit_truncated(origin_circuit_t *circ, crypt_path_t *layer)
tor_assert(circ);
tor_assert(layer);
- /* XXX Since we don't ask for truncates currently, getting a truncated
+ /* XXX Since we don't send truncates currently, getting a truncated
* means that a connection broke or an extend failed. For now,
* just give up.
*/
circuit_mark_for_close(TO_CIRCUIT(circ),
- END_CIRC_REASON_FLAG_REMOTE|END_CIRC_REASON_OR_CONN_CLOSED);
+ END_CIRC_REASON_FLAG_REMOTE|reason);
return 0;
#if 0
@@ -3020,24 +1286,26 @@ circuit_truncated(origin_circuit_t *circ, crypt_path_t *layer)
* cell back.
*/
int
-onionskin_answer(or_circuit_t *circ, uint8_t cell_type, const char *payload,
- const char *keys)
+onionskin_answer(or_circuit_t *circ,
+ const created_cell_t *created_cell,
+ const char *keys,
+ const uint8_t *rend_circ_nonce)
{
cell_t cell;
crypt_path_t *tmp_cpath;
+ if (created_cell_format(&cell, created_cell) < 0) {
+ log_warn(LD_BUG,"couldn't format created cell (type=%d, len=%d)",
+ (int)created_cell->cell_type, (int)created_cell->handshake_len);
+ return -1;
+ }
+ cell.circ_id = circ->p_circ_id;
+
tmp_cpath = tor_malloc_zero(sizeof(crypt_path_t));
tmp_cpath->magic = CRYPT_PATH_MAGIC;
- memset(&cell, 0, sizeof(cell_t));
- cell.command = cell_type;
- cell.circ_id = circ->p_circ_id;
-
circuit_set_state(TO_CIRCUIT(circ), CIRCUIT_STATE_OPEN);
- memcpy(cell.payload, payload,
- cell_type == CELL_CREATED ? ONIONSKIN_REPLY_LEN : DIGEST_LEN*2);
-
log_debug(LD_CIRC,"init digest forward 0x%.8x, backward 0x%.8x.",
(unsigned int)get_uint32(keys),
(unsigned int)get_uint32(keys+20));
@@ -3053,20 +1321,17 @@ onionskin_answer(or_circuit_t *circ, uint8_t cell_type, const char *payload,
tmp_cpath->magic = 0;
tor_free(tmp_cpath);
- if (cell_type == CELL_CREATED)
- memcpy(circ->handshake_digest, cell.payload+DH_KEY_LEN, DIGEST_LEN);
- else
- memcpy(circ->handshake_digest, cell.payload+DIGEST_LEN, DIGEST_LEN);
+ memcpy(circ->rend_circ_nonce, rend_circ_nonce, DIGEST_LEN);
- circ->is_first_hop = (cell_type == CELL_CREATED_FAST);
+ circ->is_first_hop = (created_cell->cell_type == CELL_CREATED_FAST);
append_cell_to_circuit_queue(TO_CIRCUIT(circ),
- circ->p_conn, &cell, CELL_DIRECTION_IN, 0);
+ circ->p_chan, &cell, CELL_DIRECTION_IN, 0);
log_debug(LD_CIRC,"Finished sending '%s' cell.",
circ->is_first_hop ? "created_fast" : "created");
- if (!is_local_addr(&circ->p_conn->_base.addr) &&
- !connection_or_nonopen_was_started_here(circ->p_conn)) {
+ if (!channel_is_local(circ->p_chan) &&
+ !channel_is_outgoing(circ->p_chan)) {
/* record that we could process create cells from a non-local conn
* that we didn't initiate; presumably this means that create cells
* can reach us too. */
@@ -3076,15 +1341,14 @@ onionskin_answer(or_circuit_t *circ, uint8_t cell_type, const char *payload,
return 0;
}
-/** Choose a length for a circuit of purpose <b>purpose</b>.
- * Default length is 3 + the number of endpoints that would give something
- * away. If the routerlist <b>routers</b> doesn't have enough routers
- * to handle the desired path length, return as large a path length as
- * is feasible, except if it's less than 2, in which case return -1.
+/** Choose a length for a circuit of purpose <b>purpose</b>: three + the
+ * number of endpoints that would give something away about our destination.
+ *
+ * If the routerlist <b>nodes</b> doesn't have enough routers
+ * to handle the desired path length, return -1.
*/
static int
-new_route_len(uint8_t purpose, extend_info_t *exit,
- smartlist_t *nodes)
+new_route_len(uint8_t purpose, extend_info_t *exit, smartlist_t *nodes)
{
int num_acceptable_routers;
int routelen;
@@ -3102,19 +1366,13 @@ new_route_len(uint8_t purpose, extend_info_t *exit,
log_debug(LD_CIRC,"Chosen route length %d (%d/%d routers suitable).",
routelen, num_acceptable_routers, smartlist_len(nodes));
- if (num_acceptable_routers < 2) {
+ if (num_acceptable_routers < routelen) {
log_info(LD_CIRC,
- "Not enough acceptable routers (%d). Discarding this circuit.",
- num_acceptable_routers);
+ "Not enough acceptable routers (%d/%d). Discarding this circuit.",
+ num_acceptable_routers, routelen);
return -1;
}
- if (num_acceptable_routers < routelen) {
- log_info(LD_CIRC,"Not enough routers: cutting routelen from %d to %d.",
- routelen, num_acceptable_routers);
- routelen = num_acceptable_routers;
- }
-
return routelen;
}
@@ -3149,7 +1407,7 @@ circuit_all_predicted_ports_handled(time_t now, int *need_uptime,
enough = (smartlist_len(sl) == 0);
for (i = 0; i < smartlist_len(sl); ++i) {
port = smartlist_get(sl, i);
- if (smartlist_string_num_isin(LongLivedServices, *port))
+ if (smartlist_contains_int_as_string(LongLivedServices, *port))
*need_uptime = 1;
tor_free(port);
}
@@ -3268,7 +1526,7 @@ choose_good_exit_server_general(int need_uptime, int need_capacity)
n_supported[i] = -1;
continue;
}
- if (routerset_contains_node(options->_ExcludeExitNodesUnion, node)) {
+ if (routerset_contains_node(options->ExcludeExitNodesUnion_, node)) {
n_supported[i] = -1;
continue; /* user asked us not to use it, no matter what */
}
@@ -3285,7 +1543,7 @@ choose_good_exit_server_general(int need_uptime, int need_capacity)
* we'll retry later in this function with need_update and
* need_capacity set to 0. */
}
- if (!(node->is_valid || options->_AllowInvalid & ALLOW_INVALID_EXIT)) {
+ if (!(node->is_valid || options->AllowInvalid_ & ALLOW_INVALID_EXIT)) {
/* if it's invalid and we don't want it */
n_supported[i] = -1;
// log_fn(LOG_DEBUG,"Skipping node %s (index %d) -- invalid router.",
@@ -3371,7 +1629,7 @@ choose_good_exit_server_general(int need_uptime, int need_capacity)
}
log_notice(LD_CIRC, "All routers are down or won't exit%s -- "
"choosing a doomed exit at random.",
- options->_ExcludeExitNodesUnion ? " or are Excluded" : "");
+ options->ExcludeExitNodesUnion_ ? " or are Excluded" : "");
}
supporting = smartlist_new();
needed_ports = circuit_get_unhandled_ports(time(NULL));
@@ -3410,7 +1668,7 @@ choose_good_exit_server_general(int need_uptime, int need_capacity)
log_warn(LD_CIRC,
"No specified %sexit routers seem to be running: "
"can't choose an exit.",
- options->_ExcludeExitNodesUnion ? "non-excluded " : "");
+ options->ExcludeExitNodesUnion_ ? "non-excluded " : "");
}
return NULL;
}
@@ -3438,14 +1696,14 @@ choose_good_exit_server(uint8_t purpose,
switch (purpose) {
case CIRCUIT_PURPOSE_C_GENERAL:
- if (options->_AllowInvalid & ALLOW_INVALID_MIDDLE)
+ if (options->AllowInvalid_ & ALLOW_INVALID_MIDDLE)
flags |= CRN_ALLOW_INVALID;
if (is_internal) /* pick it like a middle hop */
return router_choose_random_node(NULL, options->ExcludeNodes, flags);
else
return choose_good_exit_server_general(need_uptime,need_capacity);
case CIRCUIT_PURPOSE_C_ESTABLISH_REND:
- if (options->_AllowInvalid & ALLOW_INVALID_RENDEZVOUS)
+ if (options->AllowInvalid_ & ALLOW_INVALID_RENDEZVOUS)
flags |= CRN_ALLOW_INVALID;
return router_choose_random_node(NULL, options->ExcludeNodes, flags);
}
@@ -3462,7 +1720,7 @@ warn_if_last_router_excluded(origin_circuit_t *circ, const extend_info_t *exit)
const or_options_t *options = get_options();
routerset_t *rs = options->ExcludeNodes;
const char *description;
- uint8_t purpose = circ->_base.purpose;
+ uint8_t purpose = circ->base_.purpose;
if (circ->build_state->onehop_tunnel)
return;
@@ -3482,7 +1740,7 @@ warn_if_last_router_excluded(origin_circuit_t *circ, const extend_info_t *exit)
if (circ->build_state->is_internal)
return;
description = "requested exit node";
- rs = options->_ExcludeExitNodesUnion;
+ rs = options->ExcludeExitNodesUnion_;
break;
case CIRCUIT_PURPOSE_C_INTRODUCING:
case CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT:
@@ -3499,7 +1757,7 @@ warn_if_last_router_excluded(origin_circuit_t *circ, const extend_info_t *exit)
description = "chosen rendezvous point";
break;
case CIRCUIT_PURPOSE_CONTROLLER:
- rs = options->_ExcludeExitNodesUnion;
+ rs = options->ExcludeExitNodesUnion_;
description = "controller-selected circuit target";
break;
}
@@ -3541,7 +1799,7 @@ onion_pick_cpath_exit(origin_circuit_t *circ, extend_info_t *exit)
log_debug(LD_CIRC, "Launching a one-hop circuit for dir tunnel.");
state->desired_path_len = 1;
} else {
- int r = new_route_len(circ->_base.purpose, exit, nodelist_get_list());
+ int r = new_route_len(circ->base_.purpose, exit, nodelist_get_list());
if (r < 1) /* must be at least 1 */
return -1;
state->desired_path_len = r;
@@ -3554,7 +1812,7 @@ onion_pick_cpath_exit(origin_circuit_t *circ, extend_info_t *exit)
exit = extend_info_dup(exit);
} else { /* we have to decide one */
const node_t *node =
- choose_good_exit_server(circ->_base.purpose, state->need_uptime,
+ choose_good_exit_server(circ->base_.purpose, state->need_uptime,
state->need_capacity, state->is_internal);
if (!node) {
log_warn(LD_CIRC,"failed to choose an exit server");
@@ -3597,6 +1855,9 @@ circuit_extend_to_new_exit(origin_circuit_t *circ, extend_info_t *exit)
{
int err_reason = 0;
warn_if_last_router_excluded(circ, exit);
+
+ tor_gettimeofday(&circ->base_.timestamp_began);
+
circuit_append_new_exit(circ, exit);
circuit_set_state(TO_CIRCUIT(circ), CIRCUIT_STATE_BUILDING);
if ((err_reason = circuit_send_next_onion_skin(circ))<0) {
@@ -3605,6 +1866,9 @@ circuit_extend_to_new_exit(origin_circuit_t *circ, extend_info_t *exit)
circuit_mark_for_close(TO_CIRCUIT(circ), -err_reason);
return -1;
}
+
+ // XXX: Should cannibalized circuits be dirty or not? Not easy to say..
+
return 0;
}
@@ -3675,8 +1939,8 @@ choose_good_middle_server(uint8_t purpose,
smartlist_t *excluded;
const or_options_t *options = get_options();
router_crn_flags_t flags = CRN_NEED_DESC;
- tor_assert(_CIRCUIT_PURPOSE_MIN <= purpose &&
- purpose <= _CIRCUIT_PURPOSE_MAX);
+ tor_assert(CIRCUIT_PURPOSE_MIN_ <= purpose &&
+ purpose <= CIRCUIT_PURPOSE_MAX_);
log_debug(LD_CIRC, "Contemplating intermediate hop: random choice.");
excluded = smartlist_new();
@@ -3693,7 +1957,7 @@ choose_good_middle_server(uint8_t purpose,
flags |= CRN_NEED_UPTIME;
if (state->need_capacity)
flags |= CRN_NEED_CAPACITY;
- if (options->_AllowInvalid & ALLOW_INVALID_MIDDLE)
+ if (options->AllowInvalid_ & ALLOW_INVALID_MIDDLE)
flags |= CRN_ALLOW_INVALID;
choice = router_choose_random_node(excluded, options->ExcludeNodes, flags);
smartlist_free(excluded);
@@ -3708,7 +1972,8 @@ choose_good_middle_server(uint8_t purpose,
* If <b>state</b> is NULL, we're choosing a router to serve as an entry
* guard, not for any particular circuit.
*/
-static const node_t *
+/* XXXX024 I'd like to have this be static again, but entrynodes.c needs it. */
+const node_t *
choose_good_entry_server(uint8_t purpose, cpath_build_state_t *state)
{
const node_t *choice;
@@ -3740,8 +2005,9 @@ choose_good_entry_server(uint8_t purpose, cpath_build_state_t *state)
});
}
/* and exclude current entry guards and their families, if applicable */
- if (options->UseEntryGuards && entry_guards) {
- SMARTLIST_FOREACH(entry_guards, entry_guard_t *, entry,
+ /*XXXX025 use the using_as_guard flag to accomplish this.*/
+ if (options->UseEntryGuards) {
+ SMARTLIST_FOREACH(get_entry_guards(), const entry_guard_t *, entry,
{
if ((node = node_get_by_id(entry->identity))) {
nodelist_add_node_and_family(excluded, node);
@@ -3755,7 +2021,7 @@ choose_good_entry_server(uint8_t purpose, cpath_build_state_t *state)
if (state->need_capacity)
flags |= CRN_NEED_CAPACITY;
}
- if (options->_AllowInvalid & ALLOW_INVALID_ENTRY)
+ if (options->AllowInvalid_ & ALLOW_INVALID_ENTRY)
flags |= CRN_ALLOW_INVALID;
choice = router_choose_random_node(excluded, options->ExcludeNodes, flags);
@@ -3779,11 +2045,14 @@ onion_next_hop_in_cpath(crypt_path_t *cpath)
/** Choose a suitable next hop in the cpath <b>head_ptr</b>,
* based on <b>state</b>. Append the hop info to head_ptr.
+ *
+ * Return 1 if the path is complete, 0 if we successfully added a hop,
+ * and -1 on error.
*/
static int
onion_extend_cpath(origin_circuit_t *circ)
{
- uint8_t purpose = circ->_base.purpose;
+ uint8_t purpose = circ->base_.purpose;
cpath_build_state_t *state = circ->build_state;
int cur_len = circuit_get_cpath_len(circ);
extend_info_t *info = NULL;
@@ -3802,12 +2071,10 @@ onion_extend_cpath(origin_circuit_t *circ)
} else if (cur_len == 0) { /* picking first node */
const node_t *r = choose_good_entry_server(purpose, state);
if (r) {
- /* If we're extending to a bridge, use the preferred address
- rather than the primary, for potentially extending to an IPv6
- bridge. */
- int use_pref_addr = (r->ri != NULL &&
- r->ri->purpose == ROUTER_PURPOSE_BRIDGE);
- info = extend_info_from_node(r, use_pref_addr);
+ /* If we're a client, use the preferred address rather than the
+ primary address, for potentially connecting to an IPv6 OR
+ port. */
+ info = extend_info_from_node(r, server_mode(get_options()) == 0);
tor_assert(info);
}
} else {
@@ -3858,9 +2125,10 @@ onion_append_hop(crypt_path_t **head_ptr, extend_info_t *choice)
/** Allocate a new extend_info object based on the various arguments. */
extend_info_t *
-extend_info_alloc(const char *nickname, const char *digest,
- crypto_pk_t *onion_key,
- const tor_addr_t *addr, uint16_t port)
+extend_info_new(const char *nickname, const char *digest,
+ crypto_pk_t *onion_key,
+ const curve25519_public_key_t *curve25519_key,
+ const tor_addr_t *addr, uint16_t port)
{
extend_info_t *info = tor_malloc_zero(sizeof(extend_info_t));
memcpy(info->identity_digest, digest, DIGEST_LEN);
@@ -3868,52 +2136,59 @@ extend_info_alloc(const char *nickname, const char *digest,
strlcpy(info->nickname, nickname, sizeof(info->nickname));
if (onion_key)
info->onion_key = crypto_pk_dup_key(onion_key);
+#ifdef CURVE25519_ENABLED
+ if (curve25519_key)
+ memcpy(&info->curve25519_onion_key, curve25519_key,
+ sizeof(curve25519_public_key_t));
+#else
+ (void)curve25519_key;
+#endif
tor_addr_copy(&info->addr, addr);
info->port = port;
return info;
}
-/** Allocate and return a new extend_info_t that can be used to build
- * a circuit to or through the router <b>r</b>. Use the primary
- * address of the router unless <b>for_direct_connect</b> is true, in
- * which case the preferred address is used instead. */
+/** Allocate and return a new extend_info that can be used to build a
+ * circuit to or through the node <b>node</b>. Use the primary address
+ * of the node (i.e. its IPv4 address) unless
+ * <b>for_direct_connect</b> is true, in which case the preferred
+ * address is used instead. May return NULL if there is not enough
+ * info about <b>node</b> to extend to it--for example, if there is no
+ * routerinfo_t or microdesc_t.
+ **/
extend_info_t *
-extend_info_from_router(const routerinfo_t *r, int for_direct_connect)
+extend_info_from_node(const node_t *node, int for_direct_connect)
{
tor_addr_port_t ap;
- tor_assert(r);
+
+ if (node->ri == NULL && (node->rs == NULL || node->md == NULL))
+ return NULL;
if (for_direct_connect)
- router_get_pref_orport(r, &ap);
+ node_get_pref_orport(node, &ap);
else
- router_get_prim_orport(r, &ap);
- return extend_info_alloc(r->nickname, r->cache_info.identity_digest,
- r->onion_pkey, &ap.addr, ap.port);
-}
+ node_get_prim_orport(node, &ap);
-/** Allocate and return a new extend_info that can be used to build a
- * circuit to or through the node <b>node</b>. Use the primary address
- * of the node unless <b>for_direct_connect</b> is true, in which case
- * the preferred address is used instead. May return NULL if there is
- * not enough info about <b>node</b> to extend to it--for example, if
- * there is no routerinfo_t or microdesc_t.
- **/
-extend_info_t *
-extend_info_from_node(const node_t *node, int for_direct_connect)
-{
- if (node->ri) {
- return extend_info_from_router(node->ri, for_direct_connect);
- } else if (node->rs && node->md) {
- tor_addr_t addr;
- tor_addr_from_ipv4h(&addr, node->rs->addr);
- return extend_info_alloc(node->rs->nickname,
+ log_debug(LD_CIRC, "using %s for %s",
+ fmt_addrport(&ap.addr, ap.port),
+ node->ri ? node->ri->nickname : node->rs->nickname);
+
+ if (node->ri)
+ return extend_info_new(node->ri->nickname,
+ node->identity,
+ node->ri->onion_pkey,
+ node->ri->onion_curve25519_pkey,
+ &ap.addr,
+ ap.port);
+ else if (node->rs && node->md)
+ return extend_info_new(node->rs->nickname,
node->identity,
node->md->onion_pkey,
- &addr,
- node->rs->or_port);
- } else {
+ node->md->onion_curve25519_pkey,
+ &ap.addr,
+ ap.port);
+ else
return NULL;
- }
}
/** Release storage held by an extend_info_t struct. */
@@ -3966,2067 +2241,3 @@ build_state_get_exit_nickname(cpath_build_state_t *state)
return state->chosen_exit->nickname;
}
-/** Check whether the entry guard <b>e</b> is usable, given the directory
- * authorities' opinion about the router (stored in <b>ri</b>) and the user's
- * configuration (in <b>options</b>). Set <b>e</b>-&gt;bad_since
- * accordingly. Return true iff the entry guard's status changes.
- *
- * If it's not usable, set *<b>reason</b> to a static string explaining why.
- */
-static int
-entry_guard_set_status(entry_guard_t *e, const node_t *node,
- time_t now, const or_options_t *options,
- const char **reason)
-{
- char buf[HEX_DIGEST_LEN+1];
- int changed = 0;
-
- *reason = NULL;
-
- /* Do we want to mark this guard as bad? */
- if (!node)
- *reason = "unlisted";
- else if (!node->is_running)
- *reason = "down";
- else if (options->UseBridges && (!node->ri ||
- node->ri->purpose != ROUTER_PURPOSE_BRIDGE))
- *reason = "not a bridge";
- else if (options->UseBridges && !node_is_a_configured_bridge(node))
- *reason = "not a configured bridge";
- else if (!options->UseBridges && !node->is_possible_guard &&
- !routerset_contains_node(options->EntryNodes,node))
- *reason = "not recommended as a guard";
- else if (routerset_contains_node(options->ExcludeNodes, node))
- *reason = "excluded";
- else if (e->path_bias_disabled)
- *reason = "path-biased";
-
- if (*reason && ! e->bad_since) {
- /* Router is newly bad. */
- base16_encode(buf, sizeof(buf), e->identity, DIGEST_LEN);
- log_info(LD_CIRC, "Entry guard %s (%s) is %s: marking as unusable.",
- e->nickname, buf, *reason);
-
- e->bad_since = now;
- control_event_guard(e->nickname, e->identity, "BAD");
- changed = 1;
- } else if (!*reason && e->bad_since) {
- /* There's nothing wrong with the router any more. */
- base16_encode(buf, sizeof(buf), e->identity, DIGEST_LEN);
- log_info(LD_CIRC, "Entry guard %s (%s) is no longer unusable: "
- "marking as ok.", e->nickname, buf);
-
- e->bad_since = 0;
- control_event_guard(e->nickname, e->identity, "GOOD");
- changed = 1;
- }
- return changed;
-}
-
-/** Return true iff enough time has passed since we last tried to connect
- * to the unreachable guard <b>e</b> that we're willing to try again. */
-static int
-entry_is_time_to_retry(entry_guard_t *e, time_t now)
-{
- long diff;
- if (e->last_attempted < e->unreachable_since)
- return 1;
- diff = now - e->unreachable_since;
- if (diff < 6*60*60)
- return now > (e->last_attempted + 60*60);
- else if (diff < 3*24*60*60)
- return now > (e->last_attempted + 4*60*60);
- else if (diff < 7*24*60*60)
- return now > (e->last_attempted + 18*60*60);
- else
- return now > (e->last_attempted + 36*60*60);
-}
-
-/** Return the node corresponding to <b>e</b>, if <b>e</b> is
- * working well enough that we are willing to use it as an entry
- * right now. (Else return NULL.) In particular, it must be
- * - Listed as either up or never yet contacted;
- * - Present in the routerlist;
- * - Listed as 'stable' or 'fast' by the current dirserver consensus,
- * if demanded by <b>need_uptime</b> or <b>need_capacity</b>
- * (unless it's a configured EntryNode);
- * - Allowed by our current ReachableORAddresses config option; and
- * - Currently thought to be reachable by us (unless <b>assume_reachable</b>
- * is true).
- *
- * If the answer is no, set *<b>msg</b> to an explanation of why.
- */
-static INLINE const node_t *
-entry_is_live(entry_guard_t *e, int need_uptime, int need_capacity,
- int assume_reachable, const char **msg)
-{
- const node_t *node;
- const or_options_t *options = get_options();
- tor_assert(msg);
-
- if (e->path_bias_disabled) {
- *msg = "path-biased";
- return NULL;
- }
- if (e->bad_since) {
- *msg = "bad";
- return NULL;
- }
- /* no good if it's unreachable, unless assume_unreachable or can_retry. */
- if (!assume_reachable && !e->can_retry &&
- e->unreachable_since && !entry_is_time_to_retry(e, time(NULL))) {
- *msg = "unreachable";
- return NULL;
- }
- node = node_get_by_id(e->identity);
- if (!node || !node_has_descriptor(node)) {
- *msg = "no descriptor";
- return NULL;
- }
- if (get_options()->UseBridges) {
- if (node_get_purpose(node) != ROUTER_PURPOSE_BRIDGE) {
- *msg = "not a bridge";
- return NULL;
- }
- if (!node_is_a_configured_bridge(node)) {
- *msg = "not a configured bridge";
- return NULL;
- }
- } else { /* !get_options()->UseBridges */
- if (node_get_purpose(node) != ROUTER_PURPOSE_GENERAL) {
- *msg = "not general-purpose";
- return NULL;
- }
- }
- if (routerset_contains_node(options->EntryNodes, node)) {
- /* they asked for it, they get it */
- need_uptime = need_capacity = 0;
- }
- if (node_is_unreliable(node, need_uptime, need_capacity, 0)) {
- *msg = "not fast/stable";
- return NULL;
- }
- if (!fascist_firewall_allows_node(node)) {
- *msg = "unreachable by config";
- return NULL;
- }
- return node;
-}
-
-/** Return the number of entry guards that we think are usable. */
-static int
-num_live_entry_guards(void)
-{
- int n = 0;
- const char *msg;
- if (! entry_guards)
- return 0;
- SMARTLIST_FOREACH(entry_guards, entry_guard_t *, entry,
- {
- if (entry_is_live(entry, 0, 1, 0, &msg))
- ++n;
- });
- return n;
-}
-
-/** If <b>digest</b> matches the identity of any node in the
- * entry_guards list, return that node. Else return NULL. */
-static entry_guard_t *
-entry_guard_get_by_id_digest(const char *digest)
-{
- SMARTLIST_FOREACH(entry_guards, entry_guard_t *, entry,
- if (tor_memeq(digest, entry->identity, DIGEST_LEN))
- return entry;
- );
- return NULL;
-}
-
-/** Dump a description of our list of entry guards to the log at level
- * <b>severity</b>. */
-static void
-log_entry_guards(int severity)
-{
- smartlist_t *elements = smartlist_new();
- char *s;
-
- SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, e)
- {
- const char *msg = NULL;
- if (entry_is_live(e, 0, 1, 0, &msg))
- smartlist_add_asprintf(elements, "%s [%s] (up %s)",
- e->nickname,
- hex_str(e->identity, DIGEST_LEN),
- e->made_contact ? "made-contact" : "never-contacted");
- else
- smartlist_add_asprintf(elements, "%s [%s] (%s, %s)",
- e->nickname,
- hex_str(e->identity, DIGEST_LEN),
- msg,
- e->made_contact ? "made-contact" : "never-contacted");
- }
- SMARTLIST_FOREACH_END(e);
-
- s = smartlist_join_strings(elements, ",", 0, NULL);
- SMARTLIST_FOREACH(elements, char*, cp, tor_free(cp));
- smartlist_free(elements);
- log_fn(severity,LD_CIRC,"%s",s);
- tor_free(s);
-}
-
-/** Called when one or more guards that we would previously have used for some
- * purpose are no longer in use because a higher-priority guard has become
- * usable again. */
-static void
-control_event_guard_deferred(void)
-{
- /* XXXX We don't actually have a good way to figure out _how many_ entries
- * are live for some purpose. We need an entry_is_even_slightly_live()
- * function for this to work right. NumEntryGuards isn't reliable: if we
- * need guards with weird properties, we can have more than that number
- * live.
- **/
-#if 0
- int n = 0;
- const char *msg;
- const or_options_t *options = get_options();
- if (!entry_guards)
- return;
- SMARTLIST_FOREACH(entry_guards, entry_guard_t *, entry,
- {
- if (entry_is_live(entry, 0, 1, 0, &msg)) {
- if (n++ == options->NumEntryGuards) {
- control_event_guard(entry->nickname, entry->identity, "DEFERRED");
- return;
- }
- }
- });
-#endif
-}
-
-/** Add a new (preferably stable and fast) router to our
- * entry_guards list. Return a pointer to the router if we succeed,
- * or NULL if we can't find any more suitable entries.
- *
- * If <b>chosen</b> is defined, use that one, and if it's not
- * already in our entry_guards list, put it at the *beginning*.
- * Else, put the one we pick at the end of the list. */
-static const node_t *
-add_an_entry_guard(const node_t *chosen, int reset_status, int prepend)
-{
- const node_t *node;
- entry_guard_t *entry;
-
- if (chosen) {
- node = chosen;
- entry = entry_guard_get_by_id_digest(node->identity);
- if (entry) {
- if (reset_status) {
- entry->bad_since = 0;
- entry->can_retry = 1;
- }
- return NULL;
- }
- } else {
- node = choose_good_entry_server(CIRCUIT_PURPOSE_C_GENERAL, NULL);
- if (!node)
- return NULL;
- }
- entry = tor_malloc_zero(sizeof(entry_guard_t));
- log_info(LD_CIRC, "Chose %s as new entry guard.",
- node_describe(node));
- strlcpy(entry->nickname, node_get_nickname(node), sizeof(entry->nickname));
- memcpy(entry->identity, node->identity, DIGEST_LEN);
- /* Choose expiry time smudged over the past month. The goal here
- * is to a) spread out when Tor clients rotate their guards, so they
- * don't all select them on the same day, and b) avoid leaving a
- * precise timestamp in the state file about when we first picked
- * this guard. For details, see the Jan 2010 or-dev thread. */
- entry->chosen_on_date = time(NULL) - crypto_rand_int(3600*24*30);
- entry->chosen_by_version = tor_strdup(VERSION);
- if (prepend)
- smartlist_insert(entry_guards, 0, entry);
- else
- smartlist_add(entry_guards, entry);
- control_event_guard(entry->nickname, entry->identity, "NEW");
- control_event_guard_deferred();
- log_entry_guards(LOG_INFO);
- return node;
-}
-
-/** If the use of entry guards is configured, choose more entry guards
- * until we have enough in the list. */
-static void
-pick_entry_guards(const or_options_t *options)
-{
- int changed = 0;
-
- tor_assert(entry_guards);
-
- while (num_live_entry_guards() < options->NumEntryGuards) {
- if (!add_an_entry_guard(NULL, 0, 0))
- break;
- changed = 1;
- }
- if (changed)
- entry_guards_changed();
-}
-
-/** How long (in seconds) do we allow an entry guard to be nonfunctional,
- * unlisted, excluded, or otherwise nonusable before we give up on it? */
-#define ENTRY_GUARD_REMOVE_AFTER (30*24*60*60)
-
-/** Release all storage held by <b>e</b>. */
-static void
-entry_guard_free(entry_guard_t *e)
-{
- if (!e)
- return;
- tor_free(e->chosen_by_version);
- tor_free(e);
-}
-
-/** Remove any entry guard which was selected by an unknown version of Tor,
- * or which was selected by a version of Tor that's known to select
- * entry guards badly, or which was selected more 2 months ago. */
-/* XXXX The "obsolete guards" and "chosen long ago guards" things should
- * probably be different functions. */
-static int
-remove_obsolete_entry_guards(time_t now)
-{
- int changed = 0, i;
-
- for (i = 0; i < smartlist_len(entry_guards); ++i) {
- entry_guard_t *entry = smartlist_get(entry_guards, i);
- const char *ver = entry->chosen_by_version;
- const char *msg = NULL;
- tor_version_t v;
- int version_is_bad = 0, date_is_bad = 0;
- if (!ver) {
- msg = "does not say what version of Tor it was selected by";
- version_is_bad = 1;
- } else if (tor_version_parse(ver, &v)) {
- msg = "does not seem to be from any recognized version of Tor";
- version_is_bad = 1;
- } else {
- char *tor_ver = NULL;
- tor_asprintf(&tor_ver, "Tor %s", ver);
- if ((tor_version_as_new_as(tor_ver, "0.1.0.10-alpha") &&
- !tor_version_as_new_as(tor_ver, "0.1.2.16-dev")) ||
- (tor_version_as_new_as(tor_ver, "0.2.0.0-alpha") &&
- !tor_version_as_new_as(tor_ver, "0.2.0.6-alpha")) ||
- /* above are bug 440; below are bug 1217 */
- (tor_version_as_new_as(tor_ver, "0.2.1.3-alpha") &&
- !tor_version_as_new_as(tor_ver, "0.2.1.23")) ||
- (tor_version_as_new_as(tor_ver, "0.2.2.0-alpha") &&
- !tor_version_as_new_as(tor_ver, "0.2.2.7-alpha"))) {
- msg = "was selected without regard for guard bandwidth";
- version_is_bad = 1;
- }
- tor_free(tor_ver);
- }
- if (!version_is_bad && entry->chosen_on_date + 3600*24*60 < now) {
- /* It's been 2 months since the date listed in our state file. */
- msg = "was selected several months ago";
- date_is_bad = 1;
- }
-
- if (version_is_bad || date_is_bad) { /* we need to drop it */
- char dbuf[HEX_DIGEST_LEN+1];
- tor_assert(msg);
- base16_encode(dbuf, sizeof(dbuf), entry->identity, DIGEST_LEN);
- log_fn(version_is_bad ? LOG_NOTICE : LOG_INFO, LD_CIRC,
- "Entry guard '%s' (%s) %s. (Version=%s.) Replacing it.",
- entry->nickname, dbuf, msg, ver?escaped(ver):"none");
- control_event_guard(entry->nickname, entry->identity, "DROPPED");
- entry_guard_free(entry);
- smartlist_del_keeporder(entry_guards, i--);
- log_entry_guards(LOG_INFO);
- changed = 1;
- }
- }
-
- return changed ? 1 : 0;
-}
-
-/** Remove all entry guards that have been down or unlisted for so
- * long that we don't think they'll come up again. Return 1 if we
- * removed any, or 0 if we did nothing. */
-static int
-remove_dead_entry_guards(time_t now)
-{
- char dbuf[HEX_DIGEST_LEN+1];
- char tbuf[ISO_TIME_LEN+1];
- int i;
- int changed = 0;
-
- for (i = 0; i < smartlist_len(entry_guards); ) {
- entry_guard_t *entry = smartlist_get(entry_guards, i);
- if (entry->bad_since &&
- ! entry->path_bias_disabled &&
- entry->bad_since + ENTRY_GUARD_REMOVE_AFTER < now) {
-
- base16_encode(dbuf, sizeof(dbuf), entry->identity, DIGEST_LEN);
- format_local_iso_time(tbuf, entry->bad_since);
- log_info(LD_CIRC, "Entry guard '%s' (%s) has been down or unlisted "
- "since %s local time; removing.",
- entry->nickname, dbuf, tbuf);
- control_event_guard(entry->nickname, entry->identity, "DROPPED");
- entry_guard_free(entry);
- smartlist_del_keeporder(entry_guards, i);
- log_entry_guards(LOG_INFO);
- changed = 1;
- } else
- ++i;
- }
- return changed ? 1 : 0;
-}
-
-/** A new directory or router-status has arrived; update the down/listed
- * status of the entry guards.
- *
- * An entry is 'down' if the directory lists it as nonrunning.
- * An entry is 'unlisted' if the directory doesn't include it.
- *
- * Don't call this on startup; only on a fresh download. Otherwise we'll
- * think that things are unlisted.
- */
-void
-entry_guards_compute_status(const or_options_t *options, time_t now)
-{
- int changed = 0;
- digestmap_t *reasons;
-
- if (! entry_guards)
- return;
-
- if (options->EntryNodes) /* reshuffle the entry guard list if needed */
- entry_nodes_should_be_added();
-
- reasons = digestmap_new();
- SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, entry)
- {
- const node_t *r = node_get_by_id(entry->identity);
- const char *reason = NULL;
- if (entry_guard_set_status(entry, r, now, options, &reason))
- changed = 1;
-
- if (entry->bad_since)
- tor_assert(reason);
- if (reason)
- digestmap_set(reasons, entry->identity, (char*)reason);
- }
- SMARTLIST_FOREACH_END(entry);
-
- if (remove_dead_entry_guards(now))
- changed = 1;
- if (remove_obsolete_entry_guards(now))
- changed = 1;
-
- if (changed) {
- SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, entry) {
- const char *reason = digestmap_get(reasons, entry->identity);
- const char *live_msg = "";
- const node_t *r = entry_is_live(entry, 0, 1, 0, &live_msg);
- log_info(LD_CIRC, "Summary: Entry %s [%s] is %s, %s%s%s, and %s%s.",
- entry->nickname,
- hex_str(entry->identity, DIGEST_LEN),
- entry->unreachable_since ? "unreachable" : "reachable",
- entry->bad_since ? "unusable" : "usable",
- reason ? ", ": "",
- reason ? reason : "",
- r ? "live" : "not live / ",
- r ? "" : live_msg);
- } SMARTLIST_FOREACH_END(entry);
- log_info(LD_CIRC, " (%d/%d entry guards are usable/new)",
- num_live_entry_guards(), smartlist_len(entry_guards));
- log_entry_guards(LOG_INFO);
- entry_guards_changed();
- }
-
- digestmap_free(reasons, NULL);
-}
-
-/** Called when a connection to an OR with the identity digest <b>digest</b>
- * is established (<b>succeeded</b>==1) or has failed (<b>succeeded</b>==0).
- * If the OR is an entry, change that entry's up/down status.
- * Return 0 normally, or -1 if we want to tear down the new connection.
- *
- * If <b>mark_relay_status</b>, also call router_set_status() on this
- * relay.
- *
- * XXX024 change succeeded and mark_relay_status into 'int flags'.
- */
-int
-entry_guard_register_connect_status(const char *digest, int succeeded,
- int mark_relay_status, time_t now)
-{
- int changed = 0;
- int refuse_conn = 0;
- int first_contact = 0;
- entry_guard_t *entry = NULL;
- int idx = -1;
- char buf[HEX_DIGEST_LEN+1];
-
- if (! entry_guards)
- return 0;
-
- SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, e) {
- tor_assert(e);
- if (tor_memeq(e->identity, digest, DIGEST_LEN)) {
- entry = e;
- idx = e_sl_idx;
- break;
- }
- } SMARTLIST_FOREACH_END(e);
-
- if (!entry)
- return 0;
-
- base16_encode(buf, sizeof(buf), entry->identity, DIGEST_LEN);
-
- if (succeeded) {
- if (entry->unreachable_since) {
- log_info(LD_CIRC, "Entry guard '%s' (%s) is now reachable again. Good.",
- entry->nickname, buf);
- entry->can_retry = 0;
- entry->unreachable_since = 0;
- entry->last_attempted = now;
- control_event_guard(entry->nickname, entry->identity, "UP");
- changed = 1;
- }
- if (!entry->made_contact) {
- entry->made_contact = 1;
- first_contact = changed = 1;
- }
- } else { /* ! succeeded */
- if (!entry->made_contact) {
- /* We've never connected to this one. */
- log_info(LD_CIRC,
- "Connection to never-contacted entry guard '%s' (%s) failed. "
- "Removing from the list. %d/%d entry guards usable/new.",
- entry->nickname, buf,
- num_live_entry_guards()-1, smartlist_len(entry_guards)-1);
- control_event_guard(entry->nickname, entry->identity, "DROPPED");
- entry_guard_free(entry);
- smartlist_del_keeporder(entry_guards, idx);
- log_entry_guards(LOG_INFO);
- changed = 1;
- } else if (!entry->unreachable_since) {
- log_info(LD_CIRC, "Unable to connect to entry guard '%s' (%s). "
- "Marking as unreachable.", entry->nickname, buf);
- entry->unreachable_since = entry->last_attempted = now;
- control_event_guard(entry->nickname, entry->identity, "DOWN");
- changed = 1;
- entry->can_retry = 0; /* We gave it an early chance; no good. */
- } else {
- char tbuf[ISO_TIME_LEN+1];
- format_iso_time(tbuf, entry->unreachable_since);
- log_debug(LD_CIRC, "Failed to connect to unreachable entry guard "
- "'%s' (%s). It has been unreachable since %s.",
- entry->nickname, buf, tbuf);
- entry->last_attempted = now;
- entry->can_retry = 0; /* We gave it an early chance; no good. */
- }
- }
-
- /* if the caller asked us to, also update the is_running flags for this
- * relay */
- if (mark_relay_status)
- router_set_status(digest, succeeded);
-
- if (first_contact) {
- /* We've just added a new long-term entry guard. Perhaps the network just
- * came back? We should give our earlier entries another try too,
- * and close this connection so we don't use it before we've given
- * the others a shot. */
- SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, e) {
- if (e == entry)
- break;
- if (e->made_contact) {
- const char *msg;
- const node_t *r = entry_is_live(e, 0, 1, 1, &msg);
- if (r && e->unreachable_since) {
- refuse_conn = 1;
- e->can_retry = 1;
- }
- }
- } SMARTLIST_FOREACH_END(e);
- if (refuse_conn) {
- log_info(LD_CIRC,
- "Connected to new entry guard '%s' (%s). Marking earlier "
- "entry guards up. %d/%d entry guards usable/new.",
- entry->nickname, buf,
- num_live_entry_guards(), smartlist_len(entry_guards));
- log_entry_guards(LOG_INFO);
- changed = 1;
- }
- }
-
- if (changed)
- entry_guards_changed();
- return refuse_conn ? -1 : 0;
-}
-
-/** When we try to choose an entry guard, should we parse and add
- * config's EntryNodes first? */
-static int should_add_entry_nodes = 0;
-
-/** Called when the value of EntryNodes changes in our configuration. */
-void
-entry_nodes_should_be_added(void)
-{
- log_info(LD_CIRC, "EntryNodes config option set. Putting configured "
- "relays at the front of the entry guard list.");
- should_add_entry_nodes = 1;
-}
-
-/** Adjust the entry guards list so that it only contains entries from
- * EntryNodes, adding new entries from EntryNodes to the list as needed. */
-static void
-entry_guards_set_from_config(const or_options_t *options)
-{
- smartlist_t *entry_nodes, *worse_entry_nodes, *entry_fps;
- smartlist_t *old_entry_guards_on_list, *old_entry_guards_not_on_list;
- tor_assert(entry_guards);
-
- should_add_entry_nodes = 0;
-
- if (!options->EntryNodes) {
- /* It's possible that a controller set EntryNodes, thus making
- * should_add_entry_nodes set, then cleared it again, all before the
- * call to choose_random_entry() that triggered us. If so, just return.
- */
- return;
- }
-
- {
- char *string = routerset_to_string(options->EntryNodes);
- log_info(LD_CIRC,"Adding configured EntryNodes '%s'.", string);
- tor_free(string);
- }
-
- entry_nodes = smartlist_new();
- worse_entry_nodes = smartlist_new();
- entry_fps = smartlist_new();
- old_entry_guards_on_list = smartlist_new();
- old_entry_guards_not_on_list = smartlist_new();
-
- /* Split entry guards into those on the list and those not. */
-
- routerset_get_all_nodes(entry_nodes, options->EntryNodes,
- options->ExcludeNodes, 0);
- SMARTLIST_FOREACH(entry_nodes, const node_t *,node,
- smartlist_add(entry_fps, (void*)node->identity));
-
- SMARTLIST_FOREACH(entry_guards, entry_guard_t *, e, {
- if (smartlist_digest_isin(entry_fps, e->identity))
- smartlist_add(old_entry_guards_on_list, e);
- else
- smartlist_add(old_entry_guards_not_on_list, e);
- });
-
- /* Remove all currently configured guard nodes, excluded nodes, unreachable
- * nodes, or non-Guard nodes from entry_nodes. */
- SMARTLIST_FOREACH_BEGIN(entry_nodes, const node_t *, node) {
- if (entry_guard_get_by_id_digest(node->identity)) {
- SMARTLIST_DEL_CURRENT(entry_nodes, node);
- continue;
- } else if (routerset_contains_node(options->ExcludeNodes, node)) {
- SMARTLIST_DEL_CURRENT(entry_nodes, node);
- continue;
- } else if (!fascist_firewall_allows_node(node)) {
- SMARTLIST_DEL_CURRENT(entry_nodes, node);
- continue;
- } else if (! node->is_possible_guard) {
- smartlist_add(worse_entry_nodes, (node_t*)node);
- SMARTLIST_DEL_CURRENT(entry_nodes, node);
- }
- } SMARTLIST_FOREACH_END(node);
-
- /* Now build the new entry_guards list. */
- smartlist_clear(entry_guards);
- /* First, the previously configured guards that are in EntryNodes. */
- smartlist_add_all(entry_guards, old_entry_guards_on_list);
- /* Next, scramble the rest of EntryNodes, putting the guards first. */
- smartlist_shuffle(entry_nodes);
- smartlist_shuffle(worse_entry_nodes);
- smartlist_add_all(entry_nodes, worse_entry_nodes);
-
- /* Next, the rest of EntryNodes */
- SMARTLIST_FOREACH_BEGIN(entry_nodes, const node_t *, node) {
- add_an_entry_guard(node, 0, 0);
- if (smartlist_len(entry_guards) > options->NumEntryGuards * 10)
- break;
- } SMARTLIST_FOREACH_END(node);
- log_notice(LD_GENERAL, "%d entries in guards", smartlist_len(entry_guards));
- /* Finally, free the remaining previously configured guards that are not in
- * EntryNodes. */
- SMARTLIST_FOREACH(old_entry_guards_not_on_list, entry_guard_t *, e,
- entry_guard_free(e));
-
- smartlist_free(entry_nodes);
- smartlist_free(worse_entry_nodes);
- smartlist_free(entry_fps);
- smartlist_free(old_entry_guards_on_list);
- smartlist_free(old_entry_guards_not_on_list);
- entry_guards_changed();
-}
-
-/** Return 0 if we're fine adding arbitrary routers out of the
- * directory to our entry guard list, or return 1 if we have a
- * list already and we must stick to it.
- */
-int
-entry_list_is_constrained(const or_options_t *options)
-{
- if (options->EntryNodes)
- return 1;
- if (options->UseBridges)
- return 1;
- return 0;
-}
-
-/** Pick a live (up and listed) entry guard from entry_guards. If
- * <b>state</b> is non-NULL, this is for a specific circuit --
- * make sure not to pick this circuit's exit or any node in the
- * exit's family. If <b>state</b> is NULL, we're looking for a random
- * guard (likely a bridge). */
-const node_t *
-choose_random_entry(cpath_build_state_t *state)
-{
- const or_options_t *options = get_options();
- smartlist_t *live_entry_guards = smartlist_new();
- smartlist_t *exit_family = smartlist_new();
- const node_t *chosen_exit =
- state?build_state_get_exit_node(state) : NULL;
- const node_t *node = NULL;
- int need_uptime = state ? state->need_uptime : 0;
- int need_capacity = state ? state->need_capacity : 0;
- int preferred_min, consider_exit_family = 0;
-
- if (chosen_exit) {
- nodelist_add_node_and_family(exit_family, chosen_exit);
- consider_exit_family = 1;
- }
-
- if (!entry_guards)
- entry_guards = smartlist_new();
-
- if (should_add_entry_nodes)
- entry_guards_set_from_config(options);
-
- if (!entry_list_is_constrained(options) &&
- smartlist_len(entry_guards) < options->NumEntryGuards)
- pick_entry_guards(options);
-
- retry:
- smartlist_clear(live_entry_guards);
- SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, entry) {
- const char *msg;
- node = entry_is_live(entry, need_uptime, need_capacity, 0, &msg);
- if (!node)
- continue; /* down, no point */
- if (node == chosen_exit)
- continue; /* don't pick the same node for entry and exit */
- if (consider_exit_family && smartlist_isin(exit_family, node))
- continue; /* avoid relays that are family members of our exit */
-#if 0 /* since EntryNodes is always strict now, this clause is moot */
- if (options->EntryNodes &&
- !routerset_contains_node(options->EntryNodes, node)) {
- /* We've come to the end of our preferred entry nodes. */
- if (smartlist_len(live_entry_guards))
- goto choose_and_finish; /* only choose from the ones we like */
- if (options->StrictNodes) {
- /* in theory this case should never happen, since
- * entry_guards_set_from_config() drops unwanted relays */
- tor_fragile_assert();
- } else {
- log_info(LD_CIRC,
- "No relays from EntryNodes available. Using others.");
- }
- }
-#endif
- smartlist_add(live_entry_guards, (void*)node);
- if (!entry->made_contact) {
- /* Always start with the first not-yet-contacted entry
- * guard. Otherwise we might add several new ones, pick
- * the second new one, and now we've expanded our entry
- * guard list without needing to. */
- goto choose_and_finish;
- }
- if (smartlist_len(live_entry_guards) >= options->NumEntryGuards)
- goto choose_and_finish; /* we have enough */
- } SMARTLIST_FOREACH_END(entry);
-
- if (entry_list_is_constrained(options)) {
- /* If we prefer the entry nodes we've got, and we have at least
- * one choice, that's great. Use it. */
- preferred_min = 1;
- } else {
- /* Try to have at least 2 choices available. This way we don't
- * get stuck with a single live-but-crummy entry and just keep
- * using him.
- * (We might get 2 live-but-crummy entry guards, but so be it.) */
- preferred_min = 2;
- }
-
- if (smartlist_len(live_entry_guards) < preferred_min) {
- if (!entry_list_is_constrained(options)) {
- /* still no? try adding a new entry then */
- /* XXX if guard doesn't imply fast and stable, then we need
- * to tell add_an_entry_guard below what we want, or it might
- * be a long time til we get it. -RD */
- node = add_an_entry_guard(NULL, 0, 0);
- if (node) {
- entry_guards_changed();
- /* XXX we start over here in case the new node we added shares
- * a family with our exit node. There's a chance that we'll just
- * load up on entry guards here, if the network we're using is
- * one big family. Perhaps we should teach add_an_entry_guard()
- * to understand nodes-to-avoid-if-possible? -RD */
- goto retry;
- }
- }
- if (!node && need_uptime) {
- need_uptime = 0; /* try without that requirement */
- goto retry;
- }
- if (!node && need_capacity) {
- /* still no? last attempt, try without requiring capacity */
- need_capacity = 0;
- goto retry;
- }
-#if 0
- /* Removing this retry logic: if we only allow one exit, and it is in the
- same family as all our entries, then we are just plain not going to win
- here. */
- if (!node && entry_list_is_constrained(options) && consider_exit_family) {
- /* still no? if we're using bridges or have strictentrynodes
- * set, and our chosen exit is in the same family as all our
- * bridges/entry guards, then be flexible about families. */
- consider_exit_family = 0;
- goto retry;
- }
-#endif
- /* live_entry_guards may be empty below. Oh well, we tried. */
- }
-
- choose_and_finish:
- if (entry_list_is_constrained(options)) {
- /* We need to weight by bandwidth, because our bridges or entryguards
- * were not already selected proportional to their bandwidth. */
- node = node_sl_choose_by_bandwidth(live_entry_guards, WEIGHT_FOR_GUARD);
- } else {
- /* We choose uniformly at random here, because choose_good_entry_server()
- * already weights its choices by bandwidth, so we don't want to
- * *double*-weight our guard selection. */
- node = smartlist_choose(live_entry_guards);
- }
- smartlist_free(live_entry_guards);
- smartlist_free(exit_family);
- return node;
-}
-
-/** Parse <b>state</b> and learn about the entry guards it describes.
- * If <b>set</b> is true, and there are no errors, replace the global
- * entry_list with what we find.
- * On success, return 0. On failure, alloc into *<b>msg</b> a string
- * describing the error, and return -1.
- */
-int
-entry_guards_parse_state(or_state_t *state, int set, char **msg)
-{
- entry_guard_t *node = NULL;
- smartlist_t *new_entry_guards = smartlist_new();
- config_line_t *line;
- time_t now = time(NULL);
- const char *state_version = state->TorVersion;
- digestmap_t *added_by = digestmap_new();
-
- *msg = NULL;
- for (line = state->EntryGuards; line; line = line->next) {
- if (!strcasecmp(line->key, "EntryGuard")) {
- smartlist_t *args = smartlist_new();
- node = tor_malloc_zero(sizeof(entry_guard_t));
- /* all entry guards on disk have been contacted */
- node->made_contact = 1;
- smartlist_add(new_entry_guards, node);
- smartlist_split_string(args, line->value, " ",
- SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
- if (smartlist_len(args)<2) {
- *msg = tor_strdup("Unable to parse entry nodes: "
- "Too few arguments to EntryGuard");
- } else if (!is_legal_nickname(smartlist_get(args,0))) {
- *msg = tor_strdup("Unable to parse entry nodes: "
- "Bad nickname for EntryGuard");
- } else {
- strlcpy(node->nickname, smartlist_get(args,0), MAX_NICKNAME_LEN+1);
- if (base16_decode(node->identity, DIGEST_LEN, smartlist_get(args,1),
- strlen(smartlist_get(args,1)))<0) {
- *msg = tor_strdup("Unable to parse entry nodes: "
- "Bad hex digest for EntryGuard");
- }
- }
- SMARTLIST_FOREACH(args, char*, cp, tor_free(cp));
- smartlist_free(args);
- if (*msg)
- break;
- } else if (!strcasecmp(line->key, "EntryGuardDownSince") ||
- !strcasecmp(line->key, "EntryGuardUnlistedSince")) {
- time_t when;
- time_t last_try = 0;
- if (!node) {
- *msg = tor_strdup("Unable to parse entry nodes: "
- "EntryGuardDownSince/UnlistedSince without EntryGuard");
- break;
- }
- if (parse_iso_time(line->value, &when)<0) {
- *msg = tor_strdup("Unable to parse entry nodes: "
- "Bad time in EntryGuardDownSince/UnlistedSince");
- break;
- }
- if (when > now) {
- /* It's a bad idea to believe info in the future: you can wind
- * up with timeouts that aren't allowed to happen for years. */
- continue;
- }
- if (strlen(line->value) >= ISO_TIME_LEN+ISO_TIME_LEN+1) {
- /* ignore failure */
- (void) parse_iso_time(line->value+ISO_TIME_LEN+1, &last_try);
- }
- if (!strcasecmp(line->key, "EntryGuardDownSince")) {
- node->unreachable_since = when;
- node->last_attempted = last_try;
- } else {
- node->bad_since = when;
- }
- } else if (!strcasecmp(line->key, "EntryGuardAddedBy")) {
- char d[DIGEST_LEN];
- /* format is digest version date */
- if (strlen(line->value) < HEX_DIGEST_LEN+1+1+1+ISO_TIME_LEN) {
- log_warn(LD_BUG, "EntryGuardAddedBy line is not long enough.");
- continue;
- }
- if (base16_decode(d, sizeof(d), line->value, HEX_DIGEST_LEN)<0 ||
- line->value[HEX_DIGEST_LEN] != ' ') {
- log_warn(LD_BUG, "EntryGuardAddedBy line %s does not begin with "
- "hex digest", escaped(line->value));
- continue;
- }
- digestmap_set(added_by, d, tor_strdup(line->value+HEX_DIGEST_LEN+1));
- } else if (!strcasecmp(line->key, "EntryGuardPathBias")) {
- const or_options_t *options = get_options();
- unsigned hop_cnt, success_cnt;
-
- if (!node) {
- *msg = tor_strdup("Unable to parse entry nodes: "
- "EntryGuardPathBias without EntryGuard");
- break;
- }
-
- if (tor_sscanf(line->value, "%u %u", &success_cnt, &hop_cnt) != 2) {
- log_warn(LD_GENERAL, "Unable to parse guard path bias info: "
- "Misformated EntryGuardPathBias %s", escaped(line->value));
- continue;
- }
-
- node->first_hops = hop_cnt;
- node->circuit_successes = success_cnt;
- log_info(LD_GENERAL, "Read %u/%u path bias for node %s",
- node->circuit_successes, node->first_hops, node->nickname);
- /* Note: We rely on the < comparison here to allow us to set a 0
- * rate and disable the feature entirely. If refactoring, don't
- * change to <= */
- if (node->circuit_successes/((double)node->first_hops)
- < pathbias_get_disable_rate(options)) {
- node->path_bias_disabled = 1;
- log_info(LD_GENERAL,
- "Path bias is too high (%u/%u); disabling node %s",
- node->circuit_successes, node->first_hops, node->nickname);
- }
-
- } else {
- log_warn(LD_BUG, "Unexpected key %s", line->key);
- }
- }
-
- SMARTLIST_FOREACH_BEGIN(new_entry_guards, entry_guard_t *, e) {
- char *sp;
- char *val = digestmap_get(added_by, e->identity);
- if (val && (sp = strchr(val, ' '))) {
- time_t when;
- *sp++ = '\0';
- if (parse_iso_time(sp, &when)<0) {
- log_warn(LD_BUG, "Can't read time %s in EntryGuardAddedBy", sp);
- } else {
- e->chosen_by_version = tor_strdup(val);
- e->chosen_on_date = when;
- }
- } else {
- if (state_version) {
- e->chosen_by_version = tor_strdup(state_version);
- e->chosen_on_date = time(NULL) - crypto_rand_int(3600*24*30);
- }
- }
- if (e->path_bias_disabled && !e->bad_since)
- e->bad_since = time(NULL);
- }
- SMARTLIST_FOREACH_END(e);
-
- if (*msg || !set) {
- SMARTLIST_FOREACH(new_entry_guards, entry_guard_t *, e,
- entry_guard_free(e));
- smartlist_free(new_entry_guards);
- } else { /* !err && set */
- if (entry_guards) {
- SMARTLIST_FOREACH(entry_guards, entry_guard_t *, e,
- entry_guard_free(e));
- smartlist_free(entry_guards);
- }
- entry_guards = new_entry_guards;
- entry_guards_dirty = 0;
- /* XXX024 hand new_entry_guards to this func, and move it up a
- * few lines, so we don't have to re-dirty it */
- if (remove_obsolete_entry_guards(now))
- entry_guards_dirty = 1;
- }
- digestmap_free(added_by, _tor_free);
- return *msg ? -1 : 0;
-}
-
-/** Our list of entry guards has changed, or some element of one
- * of our entry guards has changed. Write the changes to disk within
- * the next few minutes.
- */
-static void
-entry_guards_changed(void)
-{
- time_t when;
- entry_guards_dirty = 1;
-
- /* or_state_save() will call entry_guards_update_state(). */
- when = get_options()->AvoidDiskWrites ? time(NULL) + 3600 : time(NULL)+600;
- or_state_mark_dirty(get_or_state(), when);
-}
-
-/** If the entry guard info has not changed, do nothing and return.
- * Otherwise, free the EntryGuards piece of <b>state</b> and create
- * a new one out of the global entry_guards list, and then mark
- * <b>state</b> dirty so it will get saved to disk.
- */
-void
-entry_guards_update_state(or_state_t *state)
-{
- config_line_t **next, *line;
- if (! entry_guards_dirty)
- return;
-
- config_free_lines(state->EntryGuards);
- next = &state->EntryGuards;
- *next = NULL;
- if (!entry_guards)
- entry_guards = smartlist_new();
- SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, e) {
- char dbuf[HEX_DIGEST_LEN+1];
- if (!e->made_contact)
- continue; /* don't write this one to disk */
- *next = line = tor_malloc_zero(sizeof(config_line_t));
- line->key = tor_strdup("EntryGuard");
- base16_encode(dbuf, sizeof(dbuf), e->identity, DIGEST_LEN);
- tor_asprintf(&line->value, "%s %s", e->nickname, dbuf);
- next = &(line->next);
- if (e->unreachable_since) {
- *next = line = tor_malloc_zero(sizeof(config_line_t));
- line->key = tor_strdup("EntryGuardDownSince");
- line->value = tor_malloc(ISO_TIME_LEN+1+ISO_TIME_LEN+1);
- format_iso_time(line->value, e->unreachable_since);
- if (e->last_attempted) {
- line->value[ISO_TIME_LEN] = ' ';
- format_iso_time(line->value+ISO_TIME_LEN+1, e->last_attempted);
- }
- next = &(line->next);
- }
- if (e->bad_since) {
- *next = line = tor_malloc_zero(sizeof(config_line_t));
- line->key = tor_strdup("EntryGuardUnlistedSince");
- line->value = tor_malloc(ISO_TIME_LEN+1);
- format_iso_time(line->value, e->bad_since);
- next = &(line->next);
- }
- if (e->chosen_on_date && e->chosen_by_version &&
- !strchr(e->chosen_by_version, ' ')) {
- char d[HEX_DIGEST_LEN+1];
- char t[ISO_TIME_LEN+1];
- *next = line = tor_malloc_zero(sizeof(config_line_t));
- line->key = tor_strdup("EntryGuardAddedBy");
- base16_encode(d, sizeof(d), e->identity, DIGEST_LEN);
- format_iso_time(t, e->chosen_on_date);
- tor_asprintf(&line->value, "%s %s %s",
- d, e->chosen_by_version, t);
- next = &(line->next);
- }
- if (e->first_hops) {
- *next = line = tor_malloc_zero(sizeof(config_line_t));
- line->key = tor_strdup("EntryGuardPathBias");
- tor_asprintf(&line->value, "%u %u",
- e->circuit_successes, e->first_hops);
- next = &(line->next);
- }
-
- } SMARTLIST_FOREACH_END(e);
- if (!get_options()->AvoidDiskWrites)
- or_state_mark_dirty(get_or_state(), 0);
- entry_guards_dirty = 0;
-}
-
-/** If <b>question</b> is the string "entry-guards", then dump
- * to *<b>answer</b> a newly allocated string describing all of
- * the nodes in the global entry_guards list. See control-spec.txt
- * for details.
- * For backward compatibility, we also handle the string "helper-nodes".
- * */
-int
-getinfo_helper_entry_guards(control_connection_t *conn,
- const char *question, char **answer,
- const char **errmsg)
-{
- (void) conn;
- (void) errmsg;
-
- if (!strcmp(question,"entry-guards") ||
- !strcmp(question,"helper-nodes")) {
- smartlist_t *sl = smartlist_new();
- char tbuf[ISO_TIME_LEN+1];
- char nbuf[MAX_VERBOSE_NICKNAME_LEN+1];
- if (!entry_guards)
- entry_guards = smartlist_new();
- SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, e) {
- const char *status = NULL;
- time_t when = 0;
- const node_t *node;
-
- if (!e->made_contact) {
- status = "never-connected";
- } else if (e->bad_since) {
- when = e->bad_since;
- status = "unusable";
- } else {
- status = "up";
- }
-
- node = node_get_by_id(e->identity);
- if (node) {
- node_get_verbose_nickname(node, nbuf);
- } else {
- nbuf[0] = '$';
- base16_encode(nbuf+1, sizeof(nbuf)-1, e->identity, DIGEST_LEN);
- /* e->nickname field is not very reliable if we don't know about
- * this router any longer; don't include it. */
- }
-
- if (when) {
- format_iso_time(tbuf, when);
- smartlist_add_asprintf(sl, "%s %s %s\n", nbuf, status, tbuf);
- } else {
- smartlist_add_asprintf(sl, "%s %s\n", nbuf, status);
- }
- } SMARTLIST_FOREACH_END(e);
- *answer = smartlist_join_strings(sl, "", 0, NULL);
- SMARTLIST_FOREACH(sl, char *, c, tor_free(c));
- smartlist_free(sl);
- }
- return 0;
-}
-
-/** A list of configured bridges. Whenever we actually get a descriptor
- * for one, we add it as an entry guard. Note that the order of bridges
- * in this list does not necessarily correspond to the order of bridges
- * in the torrc. */
-static smartlist_t *bridge_list = NULL;
-
-/** Mark every entry of the bridge list to be removed on our next call to
- * sweep_bridge_list unless it has first been un-marked. */
-void
-mark_bridge_list(void)
-{
- if (!bridge_list)
- bridge_list = smartlist_new();
- SMARTLIST_FOREACH(bridge_list, bridge_info_t *, b,
- b->marked_for_removal = 1);
-}
-
-/** Remove every entry of the bridge list that was marked with
- * mark_bridge_list if it has not subsequently been un-marked. */
-void
-sweep_bridge_list(void)
-{
- if (!bridge_list)
- bridge_list = smartlist_new();
- SMARTLIST_FOREACH_BEGIN(bridge_list, bridge_info_t *, b) {
- if (b->marked_for_removal) {
- SMARTLIST_DEL_CURRENT(bridge_list, b);
- bridge_free(b);
- }
- } SMARTLIST_FOREACH_END(b);
-}
-
-/** Initialize the bridge list to empty, creating it if needed. */
-static void
-clear_bridge_list(void)
-{
- if (!bridge_list)
- bridge_list = smartlist_new();
- SMARTLIST_FOREACH(bridge_list, bridge_info_t *, b, bridge_free(b));
- smartlist_clear(bridge_list);
-}
-
-/** Free the bridge <b>bridge</b>. */
-static void
-bridge_free(bridge_info_t *bridge)
-{
- if (!bridge)
- return;
-
- tor_free(bridge->transport_name);
- tor_free(bridge);
-}
-
-/** A list of pluggable transports found in torrc. */
-static smartlist_t *transport_list = NULL;
-
-/** Mark every entry of the transport list to be removed on our next call to
- * sweep_transport_list unless it has first been un-marked. */
-void
-mark_transport_list(void)
-{
- if (!transport_list)
- transport_list = smartlist_new();
- SMARTLIST_FOREACH(transport_list, transport_t *, t,
- t->marked_for_removal = 1);
-}
-
-/** Remove every entry of the transport list that was marked with
- * mark_transport_list if it has not subsequently been un-marked. */
-void
-sweep_transport_list(void)
-{
- if (!transport_list)
- transport_list = smartlist_new();
- SMARTLIST_FOREACH_BEGIN(transport_list, transport_t *, t) {
- if (t->marked_for_removal) {
- SMARTLIST_DEL_CURRENT(transport_list, t);
- transport_free(t);
- }
- } SMARTLIST_FOREACH_END(t);
-}
-
-/** Initialize the pluggable transports list to empty, creating it if
- * needed. */
-void
-clear_transport_list(void)
-{
- if (!transport_list)
- transport_list = smartlist_new();
- SMARTLIST_FOREACH(transport_list, transport_t *, t, transport_free(t));
- smartlist_clear(transport_list);
-}
-
-/** Free the pluggable transport struct <b>transport</b>. */
-void
-transport_free(transport_t *transport)
-{
- if (!transport)
- return;
-
- tor_free(transport->name);
- tor_free(transport);
-}
-
-/** Returns the transport in our transport list that has the name <b>name</b>.
- * Else returns NULL. */
-transport_t *
-transport_get_by_name(const char *name)
-{
- tor_assert(name);
-
- if (!transport_list)
- return NULL;
-
- SMARTLIST_FOREACH_BEGIN(transport_list, transport_t *, transport) {
- if (!strcmp(transport->name, name))
- return transport;
- } SMARTLIST_FOREACH_END(transport);
-
- return NULL;
-}
-
-/** Returns a transport_t struct for a transport proxy supporting the
- protocol <b>name</b> listening at <b>addr</b>:<b>port</b> using
- SOCKS version <b>socks_ver</b>. */
-transport_t *
-transport_new(const tor_addr_t *addr, uint16_t port,
- const char *name, int socks_ver)
-{
- transport_t *t = tor_malloc_zero(sizeof(transport_t));
-
- tor_addr_copy(&t->addr, addr);
- t->port = port;
- t->name = tor_strdup(name);
- t->socks_version = socks_ver;
-
- return t;
-}
-
-/** Resolve any conflicts that the insertion of transport <b>t</b>
- * might cause.
- * Return 0 if <b>t</b> is OK and should be registered, 1 if there is
- * a transport identical to <b>t</b> already registered and -1 if
- * <b>t</b> cannot be added due to conflicts. */
-static int
-transport_resolve_conflicts(transport_t *t)
-{
- /* This is how we resolve transport conflicts:
-
- If there is already a transport with the same name and addrport,
- we either have duplicate torrc lines OR we are here post-HUP and
- this transport was here pre-HUP as well. In any case, mark the
- old transport so that it doesn't get removed and ignore the new
- one. Our caller has to free the new transport so we return '1' to
- signify this.
-
- If there is already a transport with the same name but different
- addrport:
- * if it's marked for removal, it means that it either has a lower
- priority than 't' in torrc (otherwise the mark would have been
- cleared by the paragraph above), or it doesn't exist at all in
- the post-HUP torrc. We destroy the old transport and register 't'.
- * if it's *not* marked for removal, it means that it was newly
- added in the post-HUP torrc or that it's of higher priority, in
- this case we ignore 't'. */
- transport_t *t_tmp = transport_get_by_name(t->name);
- if (t_tmp) { /* same name */
- if (tor_addr_eq(&t->addr, &t_tmp->addr) && (t->port == t_tmp->port)) {
- /* same name *and* addrport */
- t_tmp->marked_for_removal = 0;
- return 1;
- } else { /* same name but different addrport */
- char *new_transport_addr = tor_strdup(fmt_addr(&t->addr));
- if (t_tmp->marked_for_removal) { /* marked for removal */
- log_notice(LD_GENERAL, "You tried to add transport '%s' at '%s:%u' "
- "but there was already a transport marked for deletion at "
- "'%s:%u'. We deleted the old transport and registered the "
- "new one.", t->name, new_transport_addr, t->port,
- fmt_addr(&t_tmp->addr), t_tmp->port);
- smartlist_remove(transport_list, t_tmp);
- transport_free(t_tmp);
- tor_free(new_transport_addr);
- } else { /* *not* marked for removal */
- log_notice(LD_GENERAL, "You tried to add transport '%s' at '%s:%u' "
- "but the same transport already exists at '%s:%u'. "
- "Skipping.", t->name, new_transport_addr, t->port,
- fmt_addr(&t_tmp->addr), t_tmp->port);
- tor_free(new_transport_addr);
- return -1;
- }
- }
- }
-
- return 0;
-}
-
-/** Add transport <b>t</b> to the internal list of pluggable
- * transports.
- * Returns 0 if the transport was added correctly, 1 if the same
- * transport was already registered (in this case the caller must
- * free the transport) and -1 if there was an error. */
-int
-transport_add(transport_t *t)
-{
- int r;
- tor_assert(t);
-
- r = transport_resolve_conflicts(t);
-
- switch (r) {
- case 0: /* should register transport */
- if (!transport_list)
- transport_list = smartlist_new();
- smartlist_add(transport_list, t);
- return 0;
- default: /* let our caller know the return code */
- return r;
- }
-}
-
-/** Remember a new pluggable transport proxy at <b>addr</b>:<b>port</b>.
- * <b>name</b> is set to the name of the protocol this proxy uses.
- * <b>socks_ver</b> is set to the SOCKS version of the proxy. */
-int
-transport_add_from_config(const tor_addr_t *addr, uint16_t port,
- const char *name, int socks_ver)
-{
- transport_t *t = transport_new(addr, port, name, socks_ver);
-
- int r = transport_add(t);
-
- switch (r) {
- case -1:
- default:
- log_notice(LD_GENERAL, "Could not add transport %s at %s:%u. Skipping.",
- t->name, fmt_addr(&t->addr), t->port);
- transport_free(t);
- return -1;
- case 1:
- log_info(LD_GENERAL, "Succesfully registered transport %s at %s:%u.",
- t->name, fmt_addr(&t->addr), t->port);
- transport_free(t); /* falling */
- return 0;
- case 0:
- log_info(LD_GENERAL, "Succesfully registered transport %s at %s:%u.",
- t->name, fmt_addr(&t->addr), t->port);
- return 0;
- }
-}
-
-/** Return a bridge pointer if <b>ri</b> is one of our known bridges
- * (either by comparing keys if possible, else by comparing addr/port).
- * Else return NULL. */
-static bridge_info_t *
-get_configured_bridge_by_addr_port_digest(const tor_addr_t *addr,
- uint16_t port,
- const char *digest)
-{
- if (!bridge_list)
- return NULL;
- SMARTLIST_FOREACH_BEGIN(bridge_list, bridge_info_t *, bridge)
- {
- if (tor_digest_is_zero(bridge->identity) &&
- !tor_addr_compare(&bridge->addr, addr, CMP_EXACT) &&
- bridge->port == port)
- return bridge;
- if (digest && tor_memeq(bridge->identity, digest, DIGEST_LEN))
- return bridge;
- }
- SMARTLIST_FOREACH_END(bridge);
- return NULL;
-}
-
-/** Wrapper around get_configured_bridge_by_addr_port_digest() to look
- * it up via router descriptor <b>ri</b>. */
-static bridge_info_t *
-get_configured_bridge_by_routerinfo(const routerinfo_t *ri)
-{
- tor_addr_port_t ap;
-
- router_get_pref_orport(ri, &ap);
- return get_configured_bridge_by_addr_port_digest(&ap.addr, ap.port,
- ri->cache_info.identity_digest);
-}
-
-/** Return 1 if <b>ri</b> is one of our known bridges, else 0. */
-int
-routerinfo_is_a_configured_bridge(const routerinfo_t *ri)
-{
- return get_configured_bridge_by_routerinfo(ri) ? 1 : 0;
-}
-
-/** Return 1 if <b>node</b> is one of our configured bridges, else 0. */
-int
-node_is_a_configured_bridge(const node_t *node)
-{
- int retval = 0; /* Negative. */
- smartlist_t *orports = NULL;
-
- if (!node)
- goto out;
-
- orports = node_get_all_orports(node);
- if (orports == NULL)
- goto out;
-
- SMARTLIST_FOREACH_BEGIN(orports, tor_addr_port_t *, orport) {
- if (get_configured_bridge_by_addr_port_digest(&orport->addr, orport->port,
- node->identity) != NULL) {
- retval = 1;
- goto out;
- }
- } SMARTLIST_FOREACH_END(orport);
-
- out:
- if (orports != NULL) {
- SMARTLIST_FOREACH(orports, tor_addr_port_t *, p, tor_free(p));
- smartlist_free(orports);
- orports = NULL;
- }
- return retval;
-}
-
-/** We made a connection to a router at <b>addr</b>:<b>port</b>
- * without knowing its digest. Its digest turned out to be <b>digest</b>.
- * If it was a bridge, and we still don't know its digest, record it.
- */
-void
-learned_router_identity(const tor_addr_t *addr, uint16_t port,
- const char *digest)
-{
- bridge_info_t *bridge =
- get_configured_bridge_by_addr_port_digest(addr, port, digest);
- if (bridge && tor_digest_is_zero(bridge->identity)) {
- memcpy(bridge->identity, digest, DIGEST_LEN);
- log_notice(LD_DIR, "Learned fingerprint %s for bridge %s:%d",
- hex_str(digest, DIGEST_LEN), fmt_addr(addr), port);
- }
-}
-
-/** Return true if <b>bridge</b> has the same identity digest as
- * <b>digest</b>. If <b>digest</b> is NULL, it matches
- * bridges with unspecified identity digests. */
-static int
-bridge_has_digest(const bridge_info_t *bridge, const char *digest)
-{
- if (digest)
- return tor_memeq(digest, bridge->identity, DIGEST_LEN);
- else
- return tor_digest_is_zero(bridge->identity);
-}
-
-/** We are about to add a new bridge at <b>addr</b>:<b>port</b>, with optional
- * <b>digest</b> and <b>transport_name</b>. Mark for removal any previously
- * existing bridge with the same address and port, and warn the user as
- * appropriate.
- */
-static void
-bridge_resolve_conflicts(const tor_addr_t *addr, uint16_t port,
- const char *digest, const char *transport_name)
-{
- /* Iterate the already-registered bridge list:
-
- If you find a bridge with the same adress and port, mark it for
- removal. It doesn't make sense to have two active bridges with
- the same IP:PORT. If the bridge in question has a different
- digest or transport than <b>digest</b>/<b>transport_name</b>,
- it's probably a misconfiguration and we should warn the user.
- */
- SMARTLIST_FOREACH_BEGIN(bridge_list, bridge_info_t *, bridge) {
- if (bridge->marked_for_removal)
- continue;
-
- if (tor_addr_eq(&bridge->addr, addr) && (bridge->port == port)) {
-
- bridge->marked_for_removal = 1;
-
- if (!bridge_has_digest(bridge, digest) ||
- strcmp_opt(bridge->transport_name, transport_name)) {
- /* warn the user */
- char *bridge_description_new, *bridge_description_old;
- tor_asprintf(&bridge_description_new, "%s:%u:%s:%s",
- fmt_addr(addr), port,
- digest ? hex_str(digest, DIGEST_LEN) : "",
- transport_name ? transport_name : "");
- tor_asprintf(&bridge_description_old, "%s:%u:%s:%s",
- fmt_addr(&bridge->addr), bridge->port,
- tor_digest_is_zero(bridge->identity) ?
- "" : hex_str(bridge->identity,DIGEST_LEN),
- bridge->transport_name ? bridge->transport_name : "");
-
- log_warn(LD_GENERAL,"Tried to add bridge '%s', but we found a conflict"
- " with the already registered bridge '%s'. We will discard"
- " the old bridge and keep '%s'. If this is not what you"
- " wanted, please change your configuration file accordingly.",
- bridge_description_new, bridge_description_old,
- bridge_description_new);
-
- tor_free(bridge_description_new);
- tor_free(bridge_description_old);
- }
- }
- } SMARTLIST_FOREACH_END(bridge);
-}
-
-/** Remember a new bridge at <b>addr</b>:<b>port</b>. If <b>digest</b>
- * is set, it tells us the identity key too. If we already had the
- * bridge in our list, unmark it, and don't actually add anything new.
- * If <b>transport_name</b> is non-NULL - the bridge is associated with a
- * pluggable transport - we assign the transport to the bridge. */
-void
-bridge_add_from_config(const tor_addr_t *addr, uint16_t port,
- const char *digest, const char *transport_name)
-{
- bridge_info_t *b;
-
- bridge_resolve_conflicts(addr, port, digest, transport_name);
-
- b = tor_malloc_zero(sizeof(bridge_info_t));
- tor_addr_copy(&b->addr, addr);
- b->port = port;
- if (digest)
- memcpy(b->identity, digest, DIGEST_LEN);
- if (transport_name)
- b->transport_name = tor_strdup(transport_name);
- b->fetch_status.schedule = DL_SCHED_BRIDGE;
- if (!bridge_list)
- bridge_list = smartlist_new();
-
- smartlist_add(bridge_list, b);
-}
-
-/** Return true iff <b>routerset</b> contains the bridge <b>bridge</b>. */
-static int
-routerset_contains_bridge(const routerset_t *routerset,
- const bridge_info_t *bridge)
-{
- int result;
- extend_info_t *extinfo;
- tor_assert(bridge);
- if (!routerset)
- return 0;
-
- extinfo = extend_info_alloc(
- NULL, bridge->identity, NULL, &bridge->addr, bridge->port);
- result = routerset_contains_extendinfo(routerset, extinfo);
- extend_info_free(extinfo);
- return result;
-}
-
-/** If <b>digest</b> is one of our known bridges, return it. */
-static bridge_info_t *
-find_bridge_by_digest(const char *digest)
-{
- SMARTLIST_FOREACH(bridge_list, bridge_info_t *, bridge,
- {
- if (tor_memeq(bridge->identity, digest, DIGEST_LEN))
- return bridge;
- });
- return NULL;
-}
-
-/* DOCDOC find_transport_name_by_bridge_addrport */
-const char *
-find_transport_name_by_bridge_addrport(const tor_addr_t *addr, uint16_t port)
-{
- if (!bridge_list)
- return NULL;
-
- SMARTLIST_FOREACH_BEGIN(bridge_list, const bridge_info_t *, bridge) {
- if (tor_addr_eq(&bridge->addr, addr) &&
- (bridge->port == port))
- return bridge->transport_name;
- } SMARTLIST_FOREACH_END(bridge);
-
- return NULL;
-}
-
-/** If <b>addr</b> and <b>port</b> match the address and port of a
- * bridge of ours that uses pluggable transports, place its transport
- * in <b>transport</b>.
- *
- * Return 0 on success (found a transport, or found a bridge with no
- * transport, or found no bridge); return -1 if we should be using a
- * transport, but the transport could not be found.
- */
-int
-find_transport_by_bridge_addrport(const tor_addr_t *addr, uint16_t port,
- const transport_t **transport)
-{
- *transport = NULL;
- if (!bridge_list)
- return 0;
-
- SMARTLIST_FOREACH_BEGIN(bridge_list, const bridge_info_t *, bridge) {
- if (tor_addr_eq(&bridge->addr, addr) &&
- (bridge->port == port)) { /* bridge matched */
- if (bridge->transport_name) { /* it also uses pluggable transports */
- *transport = transport_get_by_name(bridge->transport_name);
- if (*transport == NULL) { /* it uses pluggable transports, but
- the transport could not be found! */
- return -1;
- }
- return 0;
- } else { /* bridge matched, but it doesn't use transports. */
- break;
- }
- }
- } SMARTLIST_FOREACH_END(bridge);
-
- *transport = NULL;
- return 0;
-}
-
-/** We need to ask <b>bridge</b> for its server descriptor. */
-static void
-launch_direct_bridge_descriptor_fetch(bridge_info_t *bridge)
-{
- char *address;
- const or_options_t *options = get_options();
-
- if (connection_get_by_type_addr_port_purpose(
- CONN_TYPE_DIR, &bridge->addr, bridge->port,
- DIR_PURPOSE_FETCH_SERVERDESC))
- return; /* it's already on the way */
-
- if (routerset_contains_bridge(options->ExcludeNodes, bridge)) {
- download_status_mark_impossible(&bridge->fetch_status);
- log_warn(LD_APP, "Not using bridge at %s: it is in ExcludeNodes.",
- safe_str_client(fmt_addr(&bridge->addr)));
- return;
- }
-
- address = tor_dup_addr(&bridge->addr);
-
- directory_initiate_command(address, &bridge->addr,
- bridge->port, 0,
- 0, /* does not matter */
- 1, bridge->identity,
- DIR_PURPOSE_FETCH_SERVERDESC,
- ROUTER_PURPOSE_BRIDGE,
- 0, "authority.z", NULL, 0, 0);
- tor_free(address);
-}
-
-/** Fetching the bridge descriptor from the bridge authority returned a
- * "not found". Fall back to trying a direct fetch. */
-void
-retry_bridge_descriptor_fetch_directly(const char *digest)
-{
- bridge_info_t *bridge = find_bridge_by_digest(digest);
- if (!bridge)
- return; /* not found? oh well. */
-
- launch_direct_bridge_descriptor_fetch(bridge);
-}
-
-/** For each bridge in our list for which we don't currently have a
- * descriptor, fetch a new copy of its descriptor -- either directly
- * from the bridge or via a bridge authority. */
-void
-fetch_bridge_descriptors(const or_options_t *options, time_t now)
-{
- int num_bridge_auths = get_n_authorities(BRIDGE_DIRINFO);
- int ask_bridge_directly;
- int can_use_bridge_authority;
-
- if (!bridge_list)
- return;
-
- /* If we still have unconfigured managed proxies, don't go and
- connect to a bridge. */
- if (pt_proxies_configuration_pending())
- return;
-
- SMARTLIST_FOREACH_BEGIN(bridge_list, bridge_info_t *, bridge)
- {
- if (!download_status_is_ready(&bridge->fetch_status, now,
- IMPOSSIBLE_TO_DOWNLOAD))
- continue; /* don't bother, no need to retry yet */
- if (routerset_contains_bridge(options->ExcludeNodes, bridge)) {
- download_status_mark_impossible(&bridge->fetch_status);
- log_warn(LD_APP, "Not using bridge at %s: it is in ExcludeNodes.",
- safe_str_client(fmt_addr(&bridge->addr)));
- continue;
- }
-
- /* schedule another fetch as if this one will fail, in case it does */
- download_status_failed(&bridge->fetch_status, 0);
-
- can_use_bridge_authority = !tor_digest_is_zero(bridge->identity) &&
- num_bridge_auths;
- ask_bridge_directly = !can_use_bridge_authority ||
- !options->UpdateBridgesFromAuthority;
- log_debug(LD_DIR, "ask_bridge_directly=%d (%d, %d, %d)",
- ask_bridge_directly, tor_digest_is_zero(bridge->identity),
- !options->UpdateBridgesFromAuthority, !num_bridge_auths);
-
- if (ask_bridge_directly &&
- !fascist_firewall_allows_address_or(&bridge->addr, bridge->port)) {
- log_notice(LD_DIR, "Bridge at '%s:%d' isn't reachable by our "
- "firewall policy. %s.", fmt_addr(&bridge->addr),
- bridge->port,
- can_use_bridge_authority ?
- "Asking bridge authority instead" : "Skipping");
- if (can_use_bridge_authority)
- ask_bridge_directly = 0;
- else
- continue;
- }
-
- if (ask_bridge_directly) {
- /* we need to ask the bridge itself for its descriptor. */
- launch_direct_bridge_descriptor_fetch(bridge);
- } else {
- /* We have a digest and we want to ask an authority. We could
- * combine all the requests into one, but that may give more
- * hints to the bridge authority than we want to give. */
- char resource[10 + HEX_DIGEST_LEN];
- memcpy(resource, "fp/", 3);
- base16_encode(resource+3, HEX_DIGEST_LEN+1,
- bridge->identity, DIGEST_LEN);
- memcpy(resource+3+HEX_DIGEST_LEN, ".z", 3);
- log_info(LD_DIR, "Fetching bridge info '%s' from bridge authority.",
- resource);
- directory_get_from_dirserver(DIR_PURPOSE_FETCH_SERVERDESC,
- ROUTER_PURPOSE_BRIDGE, resource, 0);
- }
- }
- SMARTLIST_FOREACH_END(bridge);
-}
-
-/** If our <b>bridge</b> is configured to be a different address than
- * the bridge gives in <b>node</b>, rewrite the routerinfo
- * we received to use the address we meant to use. Now we handle
- * multihomed bridges better.
- */
-static void
-rewrite_node_address_for_bridge(const bridge_info_t *bridge, node_t *node)
-{
- /* XXXX move this function. */
- /* XXXX overridden addresses should really live in the node_t, so that the
- * routerinfo_t and the microdesc_t can be immutable. But we can only
- * do that safely if we know that no function that connects to an OR
- * does so through an address from any source other than node_get_addr().
- */
- tor_addr_t addr;
-
- if (node->ri) {
- routerinfo_t *ri = node->ri;
- tor_addr_from_ipv4h(&addr, ri->addr);
-
- if ((!tor_addr_compare(&bridge->addr, &addr, CMP_EXACT) &&
- bridge->port == ri->or_port) ||
- (!tor_addr_compare(&bridge->addr, &ri->ipv6_addr, CMP_EXACT) &&
- bridge->port == ri->ipv6_orport)) {
- /* they match, so no need to do anything */
- } else {
- if (tor_addr_family(&bridge->addr) == AF_INET) {
- ri->addr = tor_addr_to_ipv4h(&bridge->addr);
- tor_free(ri->address);
- ri->address = tor_dup_ip(ri->addr);
- ri->or_port = bridge->port;
- log_info(LD_DIR,
- "Adjusted bridge routerinfo for '%s' to match configured "
- "address %s:%d.",
- ri->nickname, ri->address, ri->or_port);
- } else if (tor_addr_family(&bridge->addr) == AF_INET6) {
- tor_addr_copy(&ri->ipv6_addr, &bridge->addr);
- ri->ipv6_orport = bridge->port;
- log_info(LD_DIR,
- "Adjusted bridge routerinfo for '%s' to match configured "
- "address %s:%d.",
- ri->nickname, fmt_addr(&ri->ipv6_addr), ri->ipv6_orport);
- } else {
- log_err(LD_BUG, "Address family not supported: %d.",
- tor_addr_family(&bridge->addr));
- return;
- }
- }
-
- /* Indicate that we prefer connecting to this bridge over the
- protocol that the bridge address indicates. Last bridge
- descriptor handled wins. */
- ri->ipv6_preferred = tor_addr_family(&bridge->addr) == AF_INET6;
-
- /* XXXipv6 we lack support for falling back to another address for
- the same relay, warn the user */
- if (!tor_addr_is_null(&ri->ipv6_addr)) {
- tor_addr_port_t ap;
- router_get_pref_orport(ri, &ap);
- log_notice(LD_CONFIG,
- "Bridge '%s' has both an IPv4 and an IPv6 address. "
- "Will prefer using its %s address (%s:%d).",
- ri->nickname,
- ri->ipv6_preferred ? "IPv6" : "IPv4",
- fmt_addr(&ap.addr), ap.port);
- }
- }
- if (node->rs) {
- routerstatus_t *rs = node->rs;
- tor_addr_from_ipv4h(&addr, rs->addr);
-
- if (!tor_addr_compare(&bridge->addr, &addr, CMP_EXACT) &&
- bridge->port == rs->or_port) {
- /* they match, so no need to do anything */
- } else {
- rs->addr = tor_addr_to_ipv4h(&bridge->addr);
- rs->or_port = bridge->port;
- log_info(LD_DIR,
- "Adjusted bridge routerstatus for '%s' to match "
- "configured address %s:%d.",
- rs->nickname, fmt_addr(&bridge->addr), rs->or_port);
- }
- }
-}
-
-/** We just learned a descriptor for a bridge. See if that
- * digest is in our entry guard list, and add it if not. */
-void
-learned_bridge_descriptor(routerinfo_t *ri, int from_cache)
-{
- tor_assert(ri);
- tor_assert(ri->purpose == ROUTER_PURPOSE_BRIDGE);
- if (get_options()->UseBridges) {
- int first = !any_bridge_descriptors_known();
- bridge_info_t *bridge = get_configured_bridge_by_routerinfo(ri);
- time_t now = time(NULL);
- router_set_status(ri->cache_info.identity_digest, 1);
-
- if (bridge) { /* if we actually want to use this one */
- node_t *node;
- /* it's here; schedule its re-fetch for a long time from now. */
- if (!from_cache)
- download_status_reset(&bridge->fetch_status);
-
- node = node_get_mutable_by_id(ri->cache_info.identity_digest);
- tor_assert(node);
- rewrite_node_address_for_bridge(bridge, node);
- add_an_entry_guard(node, 1, 1);
-
- log_notice(LD_DIR, "new bridge descriptor '%s' (%s): %s", ri->nickname,
- from_cache ? "cached" : "fresh", router_describe(ri));
- /* set entry->made_contact so if it goes down we don't drop it from
- * our entry node list */
- entry_guard_register_connect_status(ri->cache_info.identity_digest,
- 1, 0, now);
- if (first)
- routerlist_retry_directory_downloads(now);
- }
- }
-}
-
-/** Return 1 if any of our entry guards have descriptors that
- * are marked with purpose 'bridge' and are running. Else return 0.
- *
- * We use this function to decide if we're ready to start building
- * circuits through our bridges, or if we need to wait until the
- * directory "server/authority" requests finish. */
-int
-any_bridge_descriptors_known(void)
-{
- tor_assert(get_options()->UseBridges);
- return choose_random_entry(NULL)!=NULL ? 1 : 0;
-}
-
-/** Return 1 if there are any directory conns fetching bridge descriptors
- * that aren't marked for close. We use this to guess if we should tell
- * the controller that we have a problem. */
-int
-any_pending_bridge_descriptor_fetches(void)
-{
- smartlist_t *conns = get_connection_array();
- SMARTLIST_FOREACH_BEGIN(conns, connection_t *, conn) {
- if (conn->type == CONN_TYPE_DIR &&
- conn->purpose == DIR_PURPOSE_FETCH_SERVERDESC &&
- TO_DIR_CONN(conn)->router_purpose == ROUTER_PURPOSE_BRIDGE &&
- !conn->marked_for_close &&
- conn->linked &&
- conn->linked_conn && !conn->linked_conn->marked_for_close) {
- log_debug(LD_DIR, "found one: %s", conn->address);
- return 1;
- }
- } SMARTLIST_FOREACH_END(conn);
- return 0;
-}
-
-/** Return 1 if we have at least one descriptor for an entry guard
- * (bridge or member of EntryNodes) and all descriptors we know are
- * down. Else return 0. If <b>act</b> is 1, then mark the down guards
- * up; else just observe and report. */
-static int
-entries_retry_helper(const or_options_t *options, int act)
-{
- const node_t *node;
- int any_known = 0;
- int any_running = 0;
- int need_bridges = options->UseBridges != 0;
- if (!entry_guards)
- entry_guards = smartlist_new();
- SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, e) {
- node = node_get_by_id(e->identity);
- if (node && node_has_descriptor(node) &&
- node_is_bridge(node) == need_bridges) {
- any_known = 1;
- if (node->is_running)
- any_running = 1; /* some entry is both known and running */
- else if (act) {
- /* Mark all current connections to this OR as unhealthy, since
- * otherwise there could be one that started 30 seconds
- * ago, and in 30 seconds it will time out, causing us to mark
- * the node down and undermine the retry attempt. We mark even
- * the established conns, since if the network just came back
- * we'll want to attach circuits to fresh conns. */
- connection_or_set_bad_connections(node->identity, 1);
-
- /* mark this entry node for retry */
- router_set_status(node->identity, 1);
- e->can_retry = 1;
- e->bad_since = 0;
- }
- }
- } SMARTLIST_FOREACH_END(e);
- log_debug(LD_DIR, "%d: any_known %d, any_running %d",
- act, any_known, any_running);
- return any_known && !any_running;
-}
-
-/** Do we know any descriptors for our bridges / entrynodes, and are
- * all the ones we have descriptors for down? */
-int
-entries_known_but_down(const or_options_t *options)
-{
- tor_assert(entry_list_is_constrained(options));
- return entries_retry_helper(options, 0);
-}
-
-/** Mark all down known bridges / entrynodes up. */
-void
-entries_retry_all(const or_options_t *options)
-{
- tor_assert(entry_list_is_constrained(options));
- entries_retry_helper(options, 1);
-}
-
-/** Return true if we've ever had a bridge running a Tor version that can't
- * provide microdescriptors to us. In that case fall back to asking for
- * full descriptors. Eventually all bridges will support microdescriptors
- * and we can take this check out; see bug 4013. */
-int
-any_bridges_dont_support_microdescriptors(void)
-{
- const node_t *node;
- static int ever_answered_yes = 0;
- if (!get_options()->UseBridges || !entry_guards)
- return 0;
- if (ever_answered_yes)
- return 1; /* if we ever answer 'yes', always answer 'yes' */
- SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, e) {
- node = node_get_by_id(e->identity);
- if (node && node->ri &&
- node_is_bridge(node) && node_is_a_configured_bridge(node) &&
- !tor_version_supports_microdescriptors(node->ri->platform)) {
- /* This is one of our current bridges, and we know enough about
- * it to know that it won't be able to answer our microdescriptor
- * questions. */
- ever_answered_yes = 1;
- return 1;
- }
- } SMARTLIST_FOREACH_END(e);
- return 0;
-}
-
-/** Release all storage held by the list of entry guards and related
- * memory structs. */
-void
-entry_guards_free_all(void)
-{
- if (entry_guards) {
- SMARTLIST_FOREACH(entry_guards, entry_guard_t *, e,
- entry_guard_free(e));
- smartlist_free(entry_guards);
- entry_guards = NULL;
- }
- clear_bridge_list();
- clear_transport_list();
- smartlist_free(bridge_list);
- smartlist_free(transport_list);
- bridge_list = NULL;
- transport_list = NULL;
-}
-
diff --git a/src/or/circuitbuild.h b/src/or/circuitbuild.h
index 984d04a99..71caea94e 100644
--- a/src/or/circuitbuild.h
+++ b/src/or/circuitbuild.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,23 +9,8 @@
* \brief Header file for circuitbuild.c.
**/
-#ifndef _TOR_CIRCUITBUILD_H
-#define _TOR_CIRCUITBUILD_H
-
-/** Represents a pluggable transport proxy used by a bridge. */
-typedef struct {
- /** SOCKS version: One of PROXY_SOCKS4, PROXY_SOCKS5. */
- int socks_version;
- /** Name of pluggable transport protocol */
- char *name;
- /** Address of proxy */
- tor_addr_t addr;
- /** Port of proxy */
- uint16_t port;
- /** Boolean: We are re-parsing our transport list, and we are going to remove
- * this one if we don't find it in the list of configured transports. */
- unsigned marked_for_removal : 1;
-} transport_t;
+#ifndef TOR_CIRCUITBUILD_H
+#define TOR_CIRCUITBUILD_H
char *circuit_list_path(origin_circuit_t *circ, int verbose);
char *circuit_list_path_for_controller(origin_circuit_t *circ);
@@ -37,7 +22,7 @@ origin_circuit_t *circuit_establish_circuit(uint8_t purpose,
extend_info_t *exit,
int flags);
int circuit_handle_first_hop(origin_circuit_t *circ);
-void circuit_n_conn_done(or_connection_t *or_conn, int status);
+void circuit_n_chan_done(channel_t *chan, int status);
int inform_testing_reachability(void);
int circuit_timeout_want_to_count_circ(origin_circuit_t *circ);
int circuit_send_next_onion_skin(origin_circuit_t *circ);
@@ -45,127 +30,37 @@ void circuit_note_clock_jumped(int seconds_elapsed);
int circuit_extend(cell_t *cell, circuit_t *circ);
int circuit_init_cpath_crypto(crypt_path_t *cpath, const char *key_data,
int reverse);
-int circuit_finish_handshake(origin_circuit_t *circ, uint8_t cell_type,
- const uint8_t *reply);
-int circuit_truncated(origin_circuit_t *circ, crypt_path_t *layer);
-int onionskin_answer(or_circuit_t *circ, uint8_t cell_type,
- const char *payload, const char *keys);
+struct created_cell_t;
+int circuit_finish_handshake(origin_circuit_t *circ,
+ const struct created_cell_t *created_cell);
+int circuit_truncated(origin_circuit_t *circ, crypt_path_t *layer,
+ int reason);
+int onionskin_answer(or_circuit_t *circ,
+ const struct created_cell_t *created_cell,
+ const char *keys,
+ const uint8_t *rend_circ_nonce);
int circuit_all_predicted_ports_handled(time_t now, int *need_uptime,
int *need_capacity);
int circuit_append_new_exit(origin_circuit_t *circ, extend_info_t *info);
int circuit_extend_to_new_exit(origin_circuit_t *circ, extend_info_t *info);
void onion_append_to_cpath(crypt_path_t **head_ptr, crypt_path_t *new_hop);
-extend_info_t *extend_info_alloc(const char *nickname, const char *digest,
- crypto_pk_t *onion_key,
- const tor_addr_t *addr, uint16_t port);
-extend_info_t *extend_info_from_router(const routerinfo_t *r,
- int for_direct_connect);
-extend_info_t *extend_info_from_node(const node_t *node,
- int for_direct_connect);
+extend_info_t *extend_info_new(const char *nickname, const char *digest,
+ crypto_pk_t *onion_key,
+ const curve25519_public_key_t *curve25519_key,
+ const tor_addr_t *addr, uint16_t port);
+extend_info_t *extend_info_from_node(const node_t *r, int for_direct_connect);
extend_info_t *extend_info_dup(extend_info_t *info);
void extend_info_free(extend_info_t *info);
const node_t *build_state_get_exit_node(cpath_build_state_t *state);
const char *build_state_get_exit_nickname(cpath_build_state_t *state);
-void entry_guards_compute_status(const or_options_t *options, time_t now);
-int entry_guard_register_connect_status(const char *digest, int succeeded,
- int mark_relay_status, time_t now);
-void entry_nodes_should_be_added(void);
-int entry_list_is_constrained(const or_options_t *options);
-const node_t *choose_random_entry(cpath_build_state_t *state);
-int entry_guards_parse_state(or_state_t *state, int set, char **msg);
-void entry_guards_update_state(or_state_t *state);
-int getinfo_helper_entry_guards(control_connection_t *conn,
- const char *question, char **answer,
- const char **errmsg);
-
-void mark_bridge_list(void);
-void sweep_bridge_list(void);
-void mark_transport_list(void);
-void sweep_transport_list(void);
-
-int routerinfo_is_a_configured_bridge(const routerinfo_t *ri);
-int node_is_a_configured_bridge(const node_t *node);
-void learned_router_identity(const tor_addr_t *addr, uint16_t port,
- const char *digest);
-void bridge_add_from_config(const tor_addr_t *addr, uint16_t port,
- const char *digest,
- const char *transport_name);
-void retry_bridge_descriptor_fetch_directly(const char *digest);
-void fetch_bridge_descriptors(const or_options_t *options, time_t now);
-void learned_bridge_descriptor(routerinfo_t *ri, int from_cache);
-int any_bridge_descriptors_known(void);
-int any_pending_bridge_descriptor_fetches(void);
-int entries_known_but_down(const or_options_t *options);
-void entries_retry_all(const or_options_t *options);
-
-int any_bridges_dont_support_microdescriptors(void);
-
-void entry_guards_free_all(void);
-
-extern circuit_build_times_t circ_times;
-int circuit_build_times_enough_to_compute(circuit_build_times_t *cbt);
-void circuit_build_times_update_state(circuit_build_times_t *cbt,
- or_state_t *state);
-int circuit_build_times_parse_state(circuit_build_times_t *cbt,
- or_state_t *state);
-void circuit_build_times_count_timeout(circuit_build_times_t *cbt,
- int did_onehop);
-int circuit_build_times_count_close(circuit_build_times_t *cbt,
- int did_onehop, time_t start_time);
-void circuit_build_times_set_timeout(circuit_build_times_t *cbt);
-int circuit_build_times_add_time(circuit_build_times_t *cbt,
- build_time_t time);
-int circuit_build_times_needs_circuits(circuit_build_times_t *cbt);
-
-int circuit_build_times_needs_circuits_now(circuit_build_times_t *cbt);
-void circuit_build_times_init(circuit_build_times_t *cbt);
-void circuit_build_times_free_timeouts(circuit_build_times_t *cbt);
-void circuit_build_times_new_consensus_params(circuit_build_times_t *cbt,
- networkstatus_t *ns);
-double circuit_build_times_timeout_rate(const circuit_build_times_t *cbt);
-double circuit_build_times_close_rate(const circuit_build_times_t *cbt);
+const node_t *choose_good_entry_server(uint8_t purpose,
+ cpath_build_state_t *state);
-#ifdef CIRCUIT_PRIVATE
-double circuit_build_times_calculate_timeout(circuit_build_times_t *cbt,
- double quantile);
-build_time_t circuit_build_times_generate_sample(circuit_build_times_t *cbt,
- double q_lo, double q_hi);
-void circuit_build_times_initial_alpha(circuit_build_times_t *cbt,
- double quantile, double time_ms);
-int circuit_build_times_update_alpha(circuit_build_times_t *cbt);
-double circuit_build_times_cdf(circuit_build_times_t *cbt, double x);
-void circuitbuild_running_unit_tests(void);
-void circuit_build_times_reset(circuit_build_times_t *cbt);
-
-/* Network liveness functions */
-int circuit_build_times_network_check_changed(circuit_build_times_t *cbt);
+#ifdef CIRCUITBUILD_PRIVATE
+STATIC circid_t get_unique_circ_id_by_chan(channel_t *chan);
#endif
-/* Network liveness functions */
-void circuit_build_times_network_is_live(circuit_build_times_t *cbt);
-int circuit_build_times_network_check_live(circuit_build_times_t *cbt);
-void circuit_build_times_network_circ_success(circuit_build_times_t *cbt);
-
-/* DOCDOC circuit_build_times_get_bw_scale */
-int circuit_build_times_get_bw_scale(networkstatus_t *ns);
-
-void clear_transport_list(void);
-int transport_add_from_config(const tor_addr_t *addr, uint16_t port,
- const char *name, int socks_ver);
-int transport_add(transport_t *t);
-void transport_free(transport_t *transport);
-transport_t *transport_new(const tor_addr_t *addr, uint16_t port,
- const char *name, int socks_ver);
-
-/* DOCDOC find_transport_name_by_bridge_addrport */
-const char *find_transport_name_by_bridge_addrport(const tor_addr_t *addr,
- uint16_t port);
-
-int find_transport_by_bridge_addrport(const tor_addr_t *addr, uint16_t port,
- const transport_t **transport);
-transport_t *transport_get_by_name(const char *name);
-
#endif
diff --git a/src/or/circuitlist.c b/src/or/circuitlist.c
index 93ba69dcf..6238e08e1 100644
--- a/src/or/circuitlist.c
+++ b/src/or/circuitlist.c
@@ -1,18 +1,21 @@
/* Copyright 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
* \file circuitlist.c
* \brief Manage the global circuit list.
**/
-
+#define CIRCUITLIST_PRIVATE
#include "or.h"
+#include "channel.h"
+#include "circpathbias.h"
#include "circuitbuild.h"
#include "circuitlist.h"
#include "circuituse.h"
+#include "circuitstats.h"
#include "connection.h"
#include "config.h"
#include "connection_edge.h"
@@ -21,176 +24,339 @@
#include "networkstatus.h"
#include "nodelist.h"
#include "onion.h"
+#include "onion_fast.h"
+#include "policies.h"
#include "relay.h"
#include "rendclient.h"
#include "rendcommon.h"
#include "rephist.h"
#include "routerlist.h"
+#include "routerset.h"
+
#include "ht.h"
/********* START VARIABLES **********/
/** A global list of all circuits at this hop. */
-circuit_t *global_circuitlist=NULL;
+struct global_circuitlist_s global_circuitlist =
+ TOR_LIST_HEAD_INITIALIZER(global_circuitlist);
-/** A list of all the circuits in CIRCUIT_STATE_OR_WAIT. */
-static smartlist_t *circuits_pending_or_conns=NULL;
+/** A list of all the circuits in CIRCUIT_STATE_CHAN_WAIT. */
+static smartlist_t *circuits_pending_chans = NULL;
-static void circuit_free(circuit_t *circ);
-static void circuit_free_cpath(crypt_path_t *cpath);
static void circuit_free_cpath_node(crypt_path_t *victim);
static void cpath_ref_decref(crypt_path_reference_t *cpath_ref);
+//static void circuit_set_rend_token(or_circuit_t *circ, int is_rend_circ,
+// const uint8_t *token);
+static void circuit_clear_rend_token(or_circuit_t *circ);
/********* END VARIABLES ************/
-/** A map from OR connection and circuit ID to circuit. (Lookup performance is
+/** A map from channel and circuit ID to circuit. (Lookup performance is
* very important here, since we need to do it every time a cell arrives.) */
-typedef struct orconn_circid_circuit_map_t {
- HT_ENTRY(orconn_circid_circuit_map_t) node;
- or_connection_t *or_conn;
+typedef struct chan_circid_circuit_map_t {
+ HT_ENTRY(chan_circid_circuit_map_t) node;
+ channel_t *chan;
circid_t circ_id;
circuit_t *circuit;
-} orconn_circid_circuit_map_t;
+} chan_circid_circuit_map_t;
-/** Helper for hash tables: compare the OR connection and circuit ID for a and
+/** Helper for hash tables: compare the channel and circuit ID for a and
* b, and return less than, equal to, or greater than zero appropriately.
*/
static INLINE int
-_orconn_circid_entries_eq(orconn_circid_circuit_map_t *a,
- orconn_circid_circuit_map_t *b)
+chan_circid_entries_eq_(chan_circid_circuit_map_t *a,
+ chan_circid_circuit_map_t *b)
{
- return a->or_conn == b->or_conn && a->circ_id == b->circ_id;
+ return a->chan == b->chan && a->circ_id == b->circ_id;
}
/** Helper: return a hash based on circuit ID and the pointer value of
- * or_conn in <b>a</b>. */
+ * chan in <b>a</b>. */
static INLINE unsigned int
-_orconn_circid_entry_hash(orconn_circid_circuit_map_t *a)
+chan_circid_entry_hash_(chan_circid_circuit_map_t *a)
{
- return (((unsigned)a->circ_id)<<8) ^ (unsigned)(uintptr_t)(a->or_conn);
+ /* Try to squeze the siphash input into 8 bytes to save any extra siphash
+ * rounds. This hash function is in the critical path. */
+ uintptr_t chan = (uintptr_t) (void*) a->chan;
+ uint32_t array[2];
+ array[0] = a->circ_id;
+ /* The low bits of the channel pointer are uninteresting, since the channel
+ * is a pretty big structure. */
+ array[1] = (uint32_t) (chan >> 6);
+ return (unsigned) siphash24g(array, sizeof(array));
}
-/** Map from [orconn,circid] to circuit. */
-static HT_HEAD(orconn_circid_map, orconn_circid_circuit_map_t)
- orconn_circid_circuit_map = HT_INITIALIZER();
-HT_PROTOTYPE(orconn_circid_map, orconn_circid_circuit_map_t, node,
- _orconn_circid_entry_hash, _orconn_circid_entries_eq)
-HT_GENERATE(orconn_circid_map, orconn_circid_circuit_map_t, node,
- _orconn_circid_entry_hash, _orconn_circid_entries_eq, 0.6,
+/** Map from [chan,circid] to circuit. */
+static HT_HEAD(chan_circid_map, chan_circid_circuit_map_t)
+ chan_circid_map = HT_INITIALIZER();
+HT_PROTOTYPE(chan_circid_map, chan_circid_circuit_map_t, node,
+ chan_circid_entry_hash_, chan_circid_entries_eq_)
+HT_GENERATE(chan_circid_map, chan_circid_circuit_map_t, node,
+ chan_circid_entry_hash_, chan_circid_entries_eq_, 0.6,
malloc, realloc, free)
-/** The most recently returned entry from circuit_get_by_circid_orconn;
+/** The most recently returned entry from circuit_get_by_circid_chan;
* used to improve performance when many cells arrive in a row from the
* same circuit.
*/
-orconn_circid_circuit_map_t *_last_circid_orconn_ent = NULL;
+chan_circid_circuit_map_t *_last_circid_chan_ent = NULL;
-/** Implementation helper for circuit_set_{p,n}_circid_orconn: A circuit ID
- * and/or or_connection for circ has just changed from <b>old_conn, old_id</b>
- * to <b>conn, id</b>. Adjust the conn,circid map as appropriate, removing
+/** Implementation helper for circuit_set_{p,n}_circid_channel: A circuit ID
+ * and/or channel for circ has just changed from <b>old_chan, old_id</b>
+ * to <b>chan, id</b>. Adjust the chan,circid map as appropriate, removing
* the old entry (if any) and adding a new one. */
static void
-circuit_set_circid_orconn_helper(circuit_t *circ, int direction,
- circid_t id,
- or_connection_t *conn)
+circuit_set_circid_chan_helper(circuit_t *circ, int direction,
+ circid_t id,
+ channel_t *chan)
{
- orconn_circid_circuit_map_t search;
- orconn_circid_circuit_map_t *found;
- or_connection_t *old_conn, **conn_ptr;
+ chan_circid_circuit_map_t search;
+ chan_circid_circuit_map_t *found;
+ channel_t *old_chan, **chan_ptr;
circid_t old_id, *circid_ptr;
- int was_active, make_active;
+ int make_active, attached = 0;
if (direction == CELL_DIRECTION_OUT) {
- conn_ptr = &circ->n_conn;
+ chan_ptr = &circ->n_chan;
circid_ptr = &circ->n_circ_id;
- was_active = circ->next_active_on_n_conn != NULL;
- make_active = circ->n_conn_cells.n > 0;
+ make_active = circ->n_chan_cells.n > 0;
} else {
or_circuit_t *c = TO_OR_CIRCUIT(circ);
- conn_ptr = &c->p_conn;
+ chan_ptr = &c->p_chan;
circid_ptr = &c->p_circ_id;
- was_active = c->next_active_on_p_conn != NULL;
- make_active = c->p_conn_cells.n > 0;
+ make_active = c->p_chan_cells.n > 0;
}
- old_conn = *conn_ptr;
+ old_chan = *chan_ptr;
old_id = *circid_ptr;
- if (id == old_id && conn == old_conn)
+ if (id == old_id && chan == old_chan)
return;
- if (_last_circid_orconn_ent &&
- ((old_id == _last_circid_orconn_ent->circ_id &&
- old_conn == _last_circid_orconn_ent->or_conn) ||
- (id == _last_circid_orconn_ent->circ_id &&
- conn == _last_circid_orconn_ent->or_conn))) {
- _last_circid_orconn_ent = NULL;
+ if (_last_circid_chan_ent &&
+ ((old_id == _last_circid_chan_ent->circ_id &&
+ old_chan == _last_circid_chan_ent->chan) ||
+ (id == _last_circid_chan_ent->circ_id &&
+ chan == _last_circid_chan_ent->chan))) {
+ _last_circid_chan_ent = NULL;
}
- if (old_conn) { /* we may need to remove it from the conn-circid map */
- tor_assert(old_conn->_base.magic == OR_CONNECTION_MAGIC);
+ if (old_chan) {
+ /*
+ * If we're changing channels or ID and had an old channel and a non
+ * zero old ID and weren't marked for close (i.e., we should have been
+ * attached), detach the circuit. ID changes require this because
+ * circuitmux hashes on (channel_id, circuit_id).
+ */
+ if (old_id != 0 && (old_chan != chan || old_id != id) &&
+ !(circ->marked_for_close)) {
+ tor_assert(old_chan->cmux);
+ circuitmux_detach_circuit(old_chan->cmux, circ);
+ }
+
+ /* we may need to remove it from the conn-circid map */
search.circ_id = old_id;
- search.or_conn = old_conn;
- found = HT_REMOVE(orconn_circid_map, &orconn_circid_circuit_map, &search);
+ search.chan = old_chan;
+ found = HT_REMOVE(chan_circid_map, &chan_circid_map, &search);
if (found) {
tor_free(found);
- --old_conn->n_circuits;
+ if (direction == CELL_DIRECTION_OUT) {
+ /* One fewer circuits use old_chan as n_chan */
+ --(old_chan->num_n_circuits);
+ } else {
+ /* One fewer circuits use old_chan as p_chan */
+ --(old_chan->num_p_circuits);
+ }
}
- if (was_active && old_conn != conn)
- make_circuit_inactive_on_conn(circ,old_conn);
}
/* Change the values only after we have possibly made the circuit inactive
- * on the previous conn. */
- *conn_ptr = conn;
+ * on the previous chan. */
+ *chan_ptr = chan;
*circid_ptr = id;
- if (conn == NULL)
+ if (chan == NULL)
return;
/* now add the new one to the conn-circid map */
search.circ_id = id;
- search.or_conn = conn;
- found = HT_FIND(orconn_circid_map, &orconn_circid_circuit_map, &search);
+ search.chan = chan;
+ found = HT_FIND(chan_circid_map, &chan_circid_map, &search);
if (found) {
found->circuit = circ;
} else {
- found = tor_malloc_zero(sizeof(orconn_circid_circuit_map_t));
+ found = tor_malloc_zero(sizeof(chan_circid_circuit_map_t));
found->circ_id = id;
- found->or_conn = conn;
+ found->chan = chan;
found->circuit = circ;
- HT_INSERT(orconn_circid_map, &orconn_circid_circuit_map, found);
+ HT_INSERT(chan_circid_map, &chan_circid_map, found);
+ }
+
+ /*
+ * Attach to the circuitmux if we're changing channels or IDs and
+ * have a new channel and ID to use and the circuit is not marked for
+ * close.
+ */
+ if (chan && id != 0 && (old_chan != chan || old_id != id) &&
+ !(circ->marked_for_close)) {
+ tor_assert(chan->cmux);
+ circuitmux_attach_circuit(chan->cmux, circ, direction);
+ attached = 1;
+ }
+
+ /*
+ * This is a no-op if we have no cells, but if we do it marks us active to
+ * the circuitmux
+ */
+ if (make_active && attached)
+ update_circuit_on_cmux(circ, direction);
+
+ /* Adjust circuit counts on new channel */
+ if (direction == CELL_DIRECTION_OUT) {
+ ++chan->num_n_circuits;
+ } else {
+ ++chan->num_p_circuits;
+ }
+}
+
+/** Mark that circuit id <b>id</b> shouldn't be used on channel <b>chan</b>,
+ * even if there is no circuit on the channel. We use this to keep the
+ * circuit id from getting re-used while we have queued but not yet sent
+ * a destroy cell. */
+void
+channel_mark_circid_unusable(channel_t *chan, circid_t id)
+{
+ chan_circid_circuit_map_t search;
+ chan_circid_circuit_map_t *ent;
+
+ /* See if there's an entry there. That wouldn't be good. */
+ memset(&search, 0, sizeof(search));
+ search.chan = chan;
+ search.circ_id = id;
+ ent = HT_FIND(chan_circid_map, &chan_circid_map, &search);
+
+ if (ent && ent->circuit) {
+ /* we have a problem. */
+ log_warn(LD_BUG, "Tried to mark %u unusable on %p, but there was already "
+ "a circuit there.", (unsigned)id, chan);
+ } else if (ent) {
+ /* It's already marked. */
+ } else {
+ ent = tor_malloc_zero(sizeof(chan_circid_circuit_map_t));
+ ent->chan = chan;
+ ent->circ_id = id;
+ /* leave circuit at NULL */
+ HT_INSERT(chan_circid_map, &chan_circid_map, ent);
+ }
+}
+
+/** Mark that a circuit id <b>id</b> can be used again on <b>chan</b>.
+ * We use this to re-enable the circuit ID after we've sent a destroy cell.
+ */
+void
+channel_mark_circid_usable(channel_t *chan, circid_t id)
+{
+ chan_circid_circuit_map_t search;
+ chan_circid_circuit_map_t *ent;
+
+ /* See if there's an entry there. That wouldn't be good. */
+ memset(&search, 0, sizeof(search));
+ search.chan = chan;
+ search.circ_id = id;
+ ent = HT_REMOVE(chan_circid_map, &chan_circid_map, &search);
+ if (ent && ent->circuit) {
+ log_warn(LD_BUG, "Tried to mark %u usable on %p, but there was already "
+ "a circuit there.", (unsigned)id, chan);
+ return;
+ }
+ if (_last_circid_chan_ent == ent)
+ _last_circid_chan_ent = NULL;
+ tor_free(ent);
+}
+
+/** Called to indicate that a DESTROY is pending on <b>chan</b> with
+ * circuit ID <b>id</b>, but hasn't been sent yet. */
+void
+channel_note_destroy_pending(channel_t *chan, circid_t id)
+{
+ circuit_t *circ = circuit_get_by_circid_channel_even_if_marked(id,chan);
+ if (circ) {
+ if (circ->n_chan == chan && circ->n_circ_id == id) {
+ circ->n_delete_pending = 1;
+ } else {
+ or_circuit_t *orcirc = TO_OR_CIRCUIT(circ);
+ if (orcirc->p_chan == chan && orcirc->p_circ_id == id) {
+ circ->p_delete_pending = 1;
+ }
+ }
+ return;
}
- if (make_active && old_conn != conn)
- make_circuit_active_on_conn(circ,conn);
+ channel_mark_circid_unusable(chan, id);
+}
- ++conn->n_circuits;
+/** Called to indicate that a DESTROY is no longer pending on <b>chan</b> with
+ * circuit ID <b>id</b> -- typically, because it has been sent. */
+void
+channel_note_destroy_not_pending(channel_t *chan, circid_t id)
+{
+ circuit_t *circ = circuit_get_by_circid_channel_even_if_marked(id,chan);
+ if (circ) {
+ if (circ->n_chan == chan && circ->n_circ_id == id) {
+ circ->n_delete_pending = 0;
+ } else {
+ or_circuit_t *orcirc = TO_OR_CIRCUIT(circ);
+ if (orcirc->p_chan == chan && orcirc->p_circ_id == id) {
+ circ->p_delete_pending = 0;
+ }
+ }
+ /* XXXX this shouldn't happen; log a bug here. */
+ return;
+ }
+ channel_mark_circid_usable(chan, id);
}
/** Set the p_conn field of a circuit <b>circ</b>, along
* with the corresponding circuit ID, and add the circuit as appropriate
- * to the (orconn,id)-\>circuit map. */
+ * to the (chan,id)-\>circuit map. */
void
-circuit_set_p_circid_orconn(or_circuit_t *circ, circid_t id,
- or_connection_t *conn)
+circuit_set_p_circid_chan(or_circuit_t *or_circ, circid_t id,
+ channel_t *chan)
{
- circuit_set_circid_orconn_helper(TO_CIRCUIT(circ), CELL_DIRECTION_IN,
- id, conn);
+ circuit_t *circ = TO_CIRCUIT(or_circ);
+ channel_t *old_chan = or_circ->p_chan;
+ circid_t old_id = or_circ->p_circ_id;
+
+ circuit_set_circid_chan_helper(circ, CELL_DIRECTION_IN, id, chan);
- if (conn)
- tor_assert(bool_eq(circ->p_conn_cells.n, circ->next_active_on_p_conn));
+ if (chan)
+ tor_assert(bool_eq(or_circ->p_chan_cells.n,
+ or_circ->next_active_on_p_chan));
+
+ if (circ->p_delete_pending && old_chan) {
+ channel_mark_circid_unusable(old_chan, old_id);
+ circ->p_delete_pending = 0;
+ }
}
/** Set the n_conn field of a circuit <b>circ</b>, along
* with the corresponding circuit ID, and add the circuit as appropriate
- * to the (orconn,id)-\>circuit map. */
+ * to the (chan,id)-\>circuit map. */
void
-circuit_set_n_circid_orconn(circuit_t *circ, circid_t id,
- or_connection_t *conn)
+circuit_set_n_circid_chan(circuit_t *circ, circid_t id,
+ channel_t *chan)
{
- circuit_set_circid_orconn_helper(circ, CELL_DIRECTION_OUT, id, conn);
+ channel_t *old_chan = circ->n_chan;
+ circid_t old_id = circ->n_circ_id;
+
+ circuit_set_circid_chan_helper(circ, CELL_DIRECTION_OUT, id, chan);
+
+ if (chan)
+ tor_assert(bool_eq(circ->n_chan_cells.n, circ->next_active_on_n_chan));
- if (conn)
- tor_assert(bool_eq(circ->n_conn_cells.n, circ->next_active_on_n_conn));
+ if (circ->n_delete_pending && old_chan) {
+ channel_mark_circid_unusable(old_chan, old_id);
+ circ->n_delete_pending = 0;
+ }
}
/** Change the state of <b>circ</b> to <b>state</b>, adding it to or removing
@@ -201,81 +367,68 @@ circuit_set_state(circuit_t *circ, uint8_t state)
tor_assert(circ);
if (state == circ->state)
return;
- if (!circuits_pending_or_conns)
- circuits_pending_or_conns = smartlist_new();
- if (circ->state == CIRCUIT_STATE_OR_WAIT) {
+ if (!circuits_pending_chans)
+ circuits_pending_chans = smartlist_new();
+ if (circ->state == CIRCUIT_STATE_CHAN_WAIT) {
/* remove from waiting-circuit list. */
- smartlist_remove(circuits_pending_or_conns, circ);
+ smartlist_remove(circuits_pending_chans, circ);
}
- if (state == CIRCUIT_STATE_OR_WAIT) {
+ if (state == CIRCUIT_STATE_CHAN_WAIT) {
/* add to waiting-circuit list. */
- smartlist_add(circuits_pending_or_conns, circ);
+ smartlist_add(circuits_pending_chans, circ);
}
if (state == CIRCUIT_STATE_OPEN)
- tor_assert(!circ->n_conn_onionskin);
+ tor_assert(!circ->n_chan_create_cell);
circ->state = state;
}
-/** Add <b>circ</b> to the global list of circuits. This is called only from
- * within circuit_new.
- */
-static void
-circuit_add(circuit_t *circ)
-{
- if (!global_circuitlist) { /* first one */
- global_circuitlist = circ;
- circ->next = NULL;
- } else {
- circ->next = global_circuitlist;
- global_circuitlist = circ;
- }
-}
-
-/** Append to <b>out</b> all circuits in state OR_WAIT waiting for
+/** Append to <b>out</b> all circuits in state CHAN_WAIT waiting for
* the given connection. */
void
-circuit_get_all_pending_on_or_conn(smartlist_t *out, or_connection_t *or_conn)
+circuit_get_all_pending_on_channel(smartlist_t *out, channel_t *chan)
{
tor_assert(out);
- tor_assert(or_conn);
+ tor_assert(chan);
- if (!circuits_pending_or_conns)
+ if (!circuits_pending_chans)
return;
- SMARTLIST_FOREACH_BEGIN(circuits_pending_or_conns, circuit_t *, circ) {
+ SMARTLIST_FOREACH_BEGIN(circuits_pending_chans, circuit_t *, circ) {
if (circ->marked_for_close)
continue;
if (!circ->n_hop)
continue;
- tor_assert(circ->state == CIRCUIT_STATE_OR_WAIT);
+ tor_assert(circ->state == CIRCUIT_STATE_CHAN_WAIT);
if (tor_digest_is_zero(circ->n_hop->identity_digest)) {
/* Look at addr/port. This is an unkeyed connection. */
- if (!tor_addr_eq(&circ->n_hop->addr, &or_conn->_base.addr) ||
- circ->n_hop->port != or_conn->_base.port)
+ if (!channel_matches_extend_info(chan, circ->n_hop))
continue;
} else {
/* We expected a key. See if it's the right one. */
- if (tor_memneq(or_conn->identity_digest,
- circ->n_hop->identity_digest, DIGEST_LEN))
+ if (tor_memneq(chan->identity_digest,
+ circ->n_hop->identity_digest, DIGEST_LEN))
continue;
}
smartlist_add(out, circ);
} SMARTLIST_FOREACH_END(circ);
}
-/** Return the number of circuits in state OR_WAIT, waiting for the given
- * connection. */
+/** Return the number of circuits in state CHAN_WAIT, waiting for the given
+ * channel. */
int
-circuit_count_pending_on_or_conn(or_connection_t *or_conn)
+circuit_count_pending_on_channel(channel_t *chan)
{
int cnt;
smartlist_t *sl = smartlist_new();
- circuit_get_all_pending_on_or_conn(sl, or_conn);
+
+ tor_assert(chan);
+
+ circuit_get_all_pending_on_channel(sl, chan);
cnt = smartlist_len(sl);
smartlist_free(sl);
log_debug(LD_CIRC,"or_conn to %s at %s, %d pending circs",
- or_conn->nickname ? or_conn->nickname : "NULL",
- or_conn->_base.address,
+ chan->nickname ? chan->nickname : "NULL",
+ channel_get_canonical_remote_descr(chan),
cnt);
return cnt;
}
@@ -286,33 +439,17 @@ circuit_count_pending_on_or_conn(or_connection_t *or_conn)
void
circuit_close_all_marked(void)
{
- circuit_t *tmp,*m;
-
- while (global_circuitlist && global_circuitlist->marked_for_close) {
- tmp = global_circuitlist->next;
- circuit_free(global_circuitlist);
- global_circuitlist = tmp;
- }
-
- tmp = global_circuitlist;
- while (tmp && tmp->next) {
- if (tmp->next->marked_for_close) {
- m = tmp->next->next;
- circuit_free(tmp->next);
- tmp->next = m;
- /* Need to check new tmp->next; don't advance tmp. */
- } else {
- /* Advance tmp. */
- tmp = tmp->next;
- }
- }
+ circuit_t *circ, *tmp;
+ TOR_LIST_FOREACH_SAFE(circ, &global_circuitlist, head, tmp)
+ if (circ->marked_for_close)
+ circuit_free(circ);
}
/** Return the head of the global linked list of circuits. */
-circuit_t *
-_circuit_get_global_list(void)
+MOCK_IMPL(struct global_circuitlist_s *,
+circuit_get_global_list,(void))
{
- return global_circuitlist;
+ return &global_circuitlist;
}
/** Function to make circ-\>state human-readable */
@@ -323,7 +460,7 @@ circuit_state_to_string(int state)
switch (state) {
case CIRCUIT_STATE_BUILDING: return "doing handshakes";
case CIRCUIT_STATE_ONIONSKIN_PENDING: return "processing the onion";
- case CIRCUIT_STATE_OR_WAIT: return "connecting to server";
+ case CIRCUIT_STATE_CHAN_WAIT: return "connecting to server";
case CIRCUIT_STATE_OPEN: return "open";
default:
log_warn(LD_BUG, "Unknown circuit state %d", state);
@@ -372,6 +509,8 @@ circuit_purpose_to_controller_string(uint8_t purpose)
return "MEASURE_TIMEOUT";
case CIRCUIT_PURPOSE_CONTROLLER:
return "CONTROLLER";
+ case CIRCUIT_PURPOSE_PATH_BIAS_TESTING:
+ return "PATH_BIAS_TESTING";
default:
tor_snprintf(buf, sizeof(buf), "UNKNOWN_%d", (int)purpose);
@@ -399,6 +538,7 @@ circuit_purpose_to_controller_hs_state_string(uint8_t purpose)
case CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT:
case CIRCUIT_PURPOSE_TESTING:
case CIRCUIT_PURPOSE_CONTROLLER:
+ case CIRCUIT_PURPOSE_PATH_BIAS_TESTING:
return NULL;
case CIRCUIT_PURPOSE_INTRO_POINT:
@@ -486,6 +626,9 @@ circuit_purpose_to_string(uint8_t purpose)
case CIRCUIT_PURPOSE_CONTROLLER:
return "Circuit made by controller";
+ case CIRCUIT_PURPOSE_PATH_BIAS_TESTING:
+ return "Path-bias testing circuit";
+
default:
tor_snprintf(buf, sizeof(buf), "UNKNOWN_%d", (int)purpose);
return buf;
@@ -514,16 +657,16 @@ init_circuit_base(circuit_t *circ)
{
tor_gettimeofday(&circ->timestamp_created);
+ // Gets reset when we send CREATE_FAST.
+ // circuit_expire_building() expects these to be equal
+ // until the orconn is built.
+ circ->timestamp_began = circ->timestamp_created;
+
circ->package_window = circuit_initial_package_window();
circ->deliver_window = CIRCWINDOW_START;
+ cell_queue_init(&circ->n_chan_cells);
- /* Initialize the cell_ewma_t structure */
- circ->n_cell_ewma.last_adjusted_tick = cell_ewma_get_tick();
- circ->n_cell_ewma.cell_count = 0.0;
- circ->n_cell_ewma.heap_index = -1;
- circ->n_cell_ewma.is_for_p_conn = 0;
-
- circuit_add(circ);
+ TOR_LIST_INSERT_HEAD(&global_circuitlist, circ, head);
}
/** Allocate space for a new circuit, initializing with <b>p_circ_id</b>
@@ -538,7 +681,7 @@ origin_circuit_new(void)
static uint32_t n_circuits_allocated = 1;
circ = tor_malloc_zero(sizeof(origin_circuit_t));
- circ->_base.magic = ORIGIN_CIRCUIT_MAGIC;
+ circ->base_.magic = ORIGIN_CIRCUIT_MAGIC;
circ->next_stream_id = crypto_rand_int(1<<16);
circ->global_identifier = n_circuits_allocated++;
@@ -547,7 +690,7 @@ origin_circuit_new(void)
init_circuit_base(TO_CIRCUIT(circ));
- circ_times.last_circ_at = approx_time();
+ circuit_build_times_update_last_circ(get_circuit_build_times_mutable());
return circ;
}
@@ -555,37 +698,28 @@ origin_circuit_new(void)
/** Allocate a new or_circuit_t, connected to <b>p_conn</b> as
* <b>p_circ_id</b>. If <b>p_conn</b> is NULL, the circuit is unattached. */
or_circuit_t *
-or_circuit_new(circid_t p_circ_id, or_connection_t *p_conn)
+or_circuit_new(circid_t p_circ_id, channel_t *p_chan)
{
/* CircIDs */
or_circuit_t *circ;
circ = tor_malloc_zero(sizeof(or_circuit_t));
- circ->_base.magic = OR_CIRCUIT_MAGIC;
+ circ->base_.magic = OR_CIRCUIT_MAGIC;
- if (p_conn)
- circuit_set_p_circid_orconn(circ, p_circ_id, p_conn);
+ if (p_chan)
+ circuit_set_p_circid_chan(circ, p_circ_id, p_chan);
circ->remaining_relay_early_cells = MAX_RELAY_EARLY_CELLS_PER_CIRCUIT;
+ cell_queue_init(&circ->p_chan_cells);
init_circuit_base(TO_CIRCUIT(circ));
- /* Initialize the cell_ewma_t structure */
-
- /* Initialize the cell counts to 0 */
- circ->p_cell_ewma.cell_count = 0.0;
- circ->p_cell_ewma.last_adjusted_tick = cell_ewma_get_tick();
- circ->p_cell_ewma.is_for_p_conn = 1;
-
- /* It's not in any heap yet. */
- circ->p_cell_ewma.heap_index = -1;
-
return circ;
}
/** Deallocate space associated with circ.
*/
-static void
+STATIC void
circuit_free(circuit_t *circ)
{
void *mem;
@@ -605,7 +739,7 @@ circuit_free(circuit_t *circ)
}
tor_free(ocirc->build_state);
- circuit_free_cpath(ocirc->cpath);
+ circuit_clear_cpath(ocirc);
crypto_pk_free(ocirc->intro_key);
rend_data_free(ocirc->rend_data);
@@ -619,6 +753,7 @@ circuit_free(circuit_t *circ)
memwipe(ocirc->socks_password, 0x06, ocirc->socks_password_len);
tor_free(ocirc->socks_password);
}
+ addr_policy_list_free(ocirc->prepend_policy);
} else {
or_circuit_t *ocirc = TO_OR_CIRCUIT(circ);
/* Remember cell statistics for this circuit before deallocating. */
@@ -633,44 +768,51 @@ circuit_free(circuit_t *circ)
crypto_cipher_free(ocirc->n_crypto);
crypto_digest_free(ocirc->n_digest);
+ circuit_clear_rend_token(ocirc);
+
if (ocirc->rend_splice) {
or_circuit_t *other = ocirc->rend_splice;
- tor_assert(other->_base.magic == OR_CIRCUIT_MAGIC);
+ tor_assert(other->base_.magic == OR_CIRCUIT_MAGIC);
other->rend_splice = NULL;
}
/* remove from map. */
- circuit_set_p_circid_orconn(ocirc, 0, NULL);
+ circuit_set_p_circid_chan(ocirc, 0, NULL);
/* Clear cell queue _after_ removing it from the map. Otherwise our
* "active" checks will be violated. */
- cell_queue_clear(&ocirc->p_conn_cells);
+ cell_queue_clear(&ocirc->p_chan_cells);
}
extend_info_free(circ->n_hop);
- tor_free(circ->n_conn_onionskin);
+ tor_free(circ->n_chan_create_cell);
+
+ TOR_LIST_REMOVE(circ, head);
/* Remove from map. */
- circuit_set_n_circid_orconn(circ, 0, NULL);
+ circuit_set_n_circid_chan(circ, 0, NULL);
/* Clear cell queue _after_ removing it from the map. Otherwise our
* "active" checks will be violated. */
- cell_queue_clear(&circ->n_conn_cells);
+ cell_queue_clear(&circ->n_chan_cells);
memwipe(mem, 0xAA, memlen); /* poison memory */
tor_free(mem);
}
-/** Deallocate space associated with the linked list <b>cpath</b>. */
-static void
-circuit_free_cpath(crypt_path_t *cpath)
+/** Deallocate the linked list circ-><b>cpath</b>, and remove the cpath from
+ * <b>circ</b>. */
+void
+circuit_clear_cpath(origin_circuit_t *circ)
{
- crypt_path_t *victim, *head=cpath;
+ crypt_path_t *victim, *head, *cpath;
+
+ head = cpath = circ->cpath;
if (!cpath)
return;
- /* it's a doubly linked list, so we have to notice when we've
+ /* it's a circular list, so we have to notice when we've
* gone through it once. */
while (cpath->next && cpath->next != head) {
victim = cpath;
@@ -679,17 +821,19 @@ circuit_free_cpath(crypt_path_t *cpath)
}
circuit_free_cpath_node(cpath);
+
+ circ->cpath = NULL;
}
/** Release all storage held by circuits. */
void
circuit_free_all(void)
{
- circuit_t *next;
- while (global_circuitlist) {
- next = global_circuitlist->next;
- if (! CIRCUIT_IS_ORIGIN(global_circuitlist)) {
- or_circuit_t *or_circ = TO_OR_CIRCUIT(global_circuitlist);
+ circuit_t *tmp, *tmp2;
+
+ TOR_LIST_FOREACH_SAFE(tmp, &global_circuitlist, head, tmp2) {
+ if (! CIRCUIT_IS_ORIGIN(tmp)) {
+ or_circuit_t *or_circ = TO_OR_CIRCUIT(tmp);
while (or_circ->resolving_streams) {
edge_connection_t *next_conn;
next_conn = or_circ->resolving_streams->next_stream;
@@ -697,14 +841,25 @@ circuit_free_all(void)
or_circ->resolving_streams = next_conn;
}
}
- circuit_free(global_circuitlist);
- global_circuitlist = next;
+ circuit_free(tmp);
}
- smartlist_free(circuits_pending_or_conns);
- circuits_pending_or_conns = NULL;
+ smartlist_free(circuits_pending_chans);
+ circuits_pending_chans = NULL;
- HT_CLEAR(orconn_circid_map, &orconn_circid_circuit_map);
+ {
+ chan_circid_circuit_map_t **elt, **next, *c;
+ for (elt = HT_START(chan_circid_map, &chan_circid_map);
+ elt;
+ elt = next) {
+ c = *elt;
+ next = HT_NEXT_RMV(chan_circid_map, &chan_circid_map, elt);
+
+ tor_assert(c->circuit == NULL);
+ tor_free(c);
+ }
+ }
+ HT_CLEAR(chan_circid_map, &chan_circid_map);
}
/** Deallocate space associated with the cpath node <b>victim</b>. */
@@ -718,7 +873,8 @@ circuit_free_cpath_node(crypt_path_t *victim)
crypto_cipher_free(victim->b_crypto);
crypto_digest_free(victim->f_digest);
crypto_digest_free(victim->b_digest);
- crypto_dh_free(victim->dh_handshake_state);
+ onion_handshake_state_release(&victim->handshake_state);
+ crypto_dh_free(victim->rend_dh_handshake_state);
extend_info_free(victim->extend_info);
memwipe(victim, 0xBB, sizeof(crypt_path_t)); /* poison memory */
@@ -741,14 +897,18 @@ cpath_ref_decref(crypt_path_reference_t *cpath_ref)
* of information about circuit <b>circ</b>.
*/
static void
-circuit_dump_details(int severity, circuit_t *circ, int conn_array_index,
- const char *type, int this_circid, int other_circid)
-{
- log(severity, LD_CIRC, "Conn %d has %s circuit: circID %d (other side %d), "
- "state %d (%s), born %ld:",
- conn_array_index, type, this_circid, other_circid, circ->state,
- circuit_state_to_string(circ->state),
- (long)circ->timestamp_created.tv_sec);
+circuit_dump_conn_details(int severity,
+ circuit_t *circ,
+ int conn_array_index,
+ const char *type,
+ circid_t this_circid,
+ circid_t other_circid)
+{
+ tor_log(severity, LD_CIRC, "Conn %d has %s circuit: circID %u "
+ "(other side %u), state %d (%s), born %ld:",
+ conn_array_index, type, (unsigned)this_circid, (unsigned)other_circid,
+ circ->state, circuit_state_to_string(circ->state),
+ (long)circ->timestamp_began.tv_sec);
if (CIRCUIT_IS_ORIGIN(circ)) { /* circ starts at this node */
circuit_log_path(severity, LD_CIRC, TO_ORIGIN_CIRCUIT(circ));
}
@@ -763,51 +923,36 @@ circuit_dump_by_conn(connection_t *conn, int severity)
circuit_t *circ;
edge_connection_t *tmpconn;
- for (circ=global_circuitlist;circ;circ = circ->next) {
+ TOR_LIST_FOREACH(circ, &global_circuitlist, head) {
circid_t n_circ_id = circ->n_circ_id, p_circ_id = 0;
- if (circ->marked_for_close)
+
+ if (circ->marked_for_close) {
continue;
+ }
- if (! CIRCUIT_IS_ORIGIN(circ))
+ if (!CIRCUIT_IS_ORIGIN(circ)) {
p_circ_id = TO_OR_CIRCUIT(circ)->p_circ_id;
+ }
- if (! CIRCUIT_IS_ORIGIN(circ) && TO_OR_CIRCUIT(circ)->p_conn &&
- TO_CONN(TO_OR_CIRCUIT(circ)->p_conn) == conn)
- circuit_dump_details(severity, circ, conn->conn_array_index, "App-ward",
- p_circ_id, n_circ_id);
if (CIRCUIT_IS_ORIGIN(circ)) {
for (tmpconn=TO_ORIGIN_CIRCUIT(circ)->p_streams; tmpconn;
tmpconn=tmpconn->next_stream) {
if (TO_CONN(tmpconn) == conn) {
- circuit_dump_details(severity, circ, conn->conn_array_index,
- "App-ward", p_circ_id, n_circ_id);
+ circuit_dump_conn_details(severity, circ, conn->conn_array_index,
+ "App-ward", p_circ_id, n_circ_id);
}
}
}
- if (circ->n_conn && TO_CONN(circ->n_conn) == conn)
- circuit_dump_details(severity, circ, conn->conn_array_index, "Exit-ward",
- n_circ_id, p_circ_id);
+
if (! CIRCUIT_IS_ORIGIN(circ)) {
for (tmpconn=TO_OR_CIRCUIT(circ)->n_streams; tmpconn;
tmpconn=tmpconn->next_stream) {
if (TO_CONN(tmpconn) == conn) {
- circuit_dump_details(severity, circ, conn->conn_array_index,
- "Exit-ward", n_circ_id, p_circ_id);
+ circuit_dump_conn_details(severity, circ, conn->conn_array_index,
+ "Exit-ward", n_circ_id, p_circ_id);
}
}
}
- if (!circ->n_conn && circ->n_hop &&
- tor_addr_eq(&circ->n_hop->addr, &conn->addr) &&
- circ->n_hop->port == conn->port &&
- conn->type == CONN_TYPE_OR &&
- tor_memeq(TO_OR_CONN(conn)->identity_digest,
- circ->n_hop->identity_digest, DIGEST_LEN)) {
- circuit_dump_details(severity, circ, conn->conn_array_index,
- (circ->state == CIRCUIT_STATE_OPEN &&
- !CIRCUIT_IS_ORIGIN(circ)) ?
- "Endpoint" : "Pending",
- n_circ_id, p_circ_id);
- }
}
}
@@ -817,7 +962,7 @@ origin_circuit_t *
circuit_get_by_global_id(uint32_t id)
{
circuit_t *circ;
- for (circ=global_circuitlist;circ;circ = circ->next) {
+ TOR_LIST_FOREACH(circ, &global_circuitlist, head) {
if (CIRCUIT_IS_ORIGIN(circ) &&
TO_ORIGIN_CIRCUIT(circ)->global_identifier == id) {
if (circ->marked_for_close)
@@ -831,45 +976,67 @@ circuit_get_by_global_id(uint32_t id)
/** Return a circ such that:
* - circ-\>n_circ_id or circ-\>p_circ_id is equal to <b>circ_id</b>, and
- * - circ is attached to <b>conn</b>, either as p_conn or n_conn.
+ * - circ is attached to <b>chan</b>, either as p_chan or n_chan.
* Return NULL if no such circuit exists.
+ *
+ * If <b>found_entry_out</b> is provided, set it to true if we have a
+ * placeholder entry for circid/chan, and leave it unset otherwise.
*/
static INLINE circuit_t *
-circuit_get_by_circid_orconn_impl(circid_t circ_id, or_connection_t *conn)
+circuit_get_by_circid_channel_impl(circid_t circ_id, channel_t *chan,
+ int *found_entry_out)
{
- orconn_circid_circuit_map_t search;
- orconn_circid_circuit_map_t *found;
+ chan_circid_circuit_map_t search;
+ chan_circid_circuit_map_t *found;
- if (_last_circid_orconn_ent &&
- circ_id == _last_circid_orconn_ent->circ_id &&
- conn == _last_circid_orconn_ent->or_conn) {
- found = _last_circid_orconn_ent;
+ if (_last_circid_chan_ent &&
+ circ_id == _last_circid_chan_ent->circ_id &&
+ chan == _last_circid_chan_ent->chan) {
+ found = _last_circid_chan_ent;
} else {
search.circ_id = circ_id;
- search.or_conn = conn;
- found = HT_FIND(orconn_circid_map, &orconn_circid_circuit_map, &search);
- _last_circid_orconn_ent = found;
+ search.chan = chan;
+ found = HT_FIND(chan_circid_map, &chan_circid_map, &search);
+ _last_circid_chan_ent = found;
}
- if (found && found->circuit)
+ if (found && found->circuit) {
+ log_debug(LD_CIRC,
+ "circuit_get_by_circid_channel_impl() returning circuit %p for"
+ " circ_id %u, channel ID " U64_FORMAT " (%p)",
+ found->circuit, (unsigned)circ_id,
+ U64_PRINTF_ARG(chan->global_identifier), chan);
+ if (found_entry_out)
+ *found_entry_out = 1;
return found->circuit;
+ }
+
+ log_debug(LD_CIRC,
+ "circuit_get_by_circid_channel_impl() found %s for"
+ " circ_id %u, channel ID " U64_FORMAT " (%p)",
+ found ? "placeholder" : "nothing",
+ (unsigned)circ_id,
+ U64_PRINTF_ARG(chan->global_identifier), chan);
+
+ if (found_entry_out)
+ *found_entry_out = found ? 1 : 0;
return NULL;
/* The rest of this checks for bugs. Disabled by default. */
/* We comment it out because coverity complains otherwise.
{
circuit_t *circ;
- for (circ=global_circuitlist;circ;circ = circ->next) {
+ TOR_LIST_FOREACH(circ, &global_circuitlist, head) {
if (! CIRCUIT_IS_ORIGIN(circ)) {
or_circuit_t *or_circ = TO_OR_CIRCUIT(circ);
- if (or_circ->p_conn == conn && or_circ->p_circ_id == circ_id) {
+ if (or_circ->p_chan == chan && or_circ->p_circ_id == circ_id) {
log_warn(LD_BUG,
- "circuit matches p_conn, but not in hash table (Bug!)");
+ "circuit matches p_chan, but not in hash table (Bug!)");
return circ;
}
}
- if (circ->n_conn == conn && circ->n_circ_id == circ_id) {
+ if (circ->n_chan == chan && circ->n_circ_id == circ_id) {
log_warn(LD_BUG,
- "circuit matches n_conn, but not in hash table (Bug!)");
+ "circuit matches n_chan, but not in hash table (Bug!)");
return circ;
}
}
@@ -879,26 +1046,48 @@ circuit_get_by_circid_orconn_impl(circid_t circ_id, or_connection_t *conn)
/** Return a circ such that:
* - circ-\>n_circ_id or circ-\>p_circ_id is equal to <b>circ_id</b>, and
- * - circ is attached to <b>conn</b>, either as p_conn or n_conn.
+ * - circ is attached to <b>chan</b>, either as p_chan or n_chan.
* - circ is not marked for close.
* Return NULL if no such circuit exists.
*/
circuit_t *
-circuit_get_by_circid_orconn(circid_t circ_id, or_connection_t *conn)
+circuit_get_by_circid_channel(circid_t circ_id, channel_t *chan)
{
- circuit_t *circ = circuit_get_by_circid_orconn_impl(circ_id, conn);
+ circuit_t *circ = circuit_get_by_circid_channel_impl(circ_id, chan, NULL);
if (!circ || circ->marked_for_close)
return NULL;
else
return circ;
}
+/** Return a circ such that:
+ * - circ-\>n_circ_id or circ-\>p_circ_id is equal to <b>circ_id</b>, and
+ * - circ is attached to <b>chan</b>, either as p_chan or n_chan.
+ * Return NULL if no such circuit exists.
+ */
+circuit_t *
+circuit_get_by_circid_channel_even_if_marked(circid_t circ_id,
+ channel_t *chan)
+{
+ return circuit_get_by_circid_channel_impl(circ_id, chan, NULL);
+}
+
/** Return true iff the circuit ID <b>circ_id</b> is currently used by a
- * circuit, marked or not, on <b>conn</b>. */
+ * circuit, marked or not, on <b>chan</b>, or if the circ ID is reserved until
+ * a queued destroy cell can be sent.
+ *
+ * (Return 1 if the circuit is present, marked or not; Return 2
+ * if the circuit ID is pending a destroy.)
+ **/
int
-circuit_id_in_use_on_orconn(circid_t circ_id, or_connection_t *conn)
+circuit_id_in_use_on_channel(circid_t circ_id, channel_t *chan)
{
- return circuit_get_by_circid_orconn_impl(circ_id, conn) != NULL;
+ int found = 0;
+ if (circuit_get_by_circid_channel_impl(circ_id, chan, &found) != NULL)
+ return 1;
+ if (found)
+ return 2;
+ return 0;
}
/** Return the circuit that a given edge connection is using. */
@@ -915,33 +1104,91 @@ circuit_get_by_edge_conn(edge_connection_t *conn)
return circ;
}
-/** For each circuit that has <b>conn</b> as n_conn or p_conn, unlink the
- * circuit from the orconn,circid map, and mark it for close if it hasn't
+/** For each circuit that has <b>chan</b> as n_chan or p_chan, unlink the
+ * circuit from the chan,circid map, and mark it for close if it hasn't
* been marked already.
*/
void
-circuit_unlink_all_from_or_conn(or_connection_t *conn, int reason)
+circuit_unlink_all_from_channel(channel_t *chan, int reason)
{
- circuit_t *circ;
+ smartlist_t *detached = smartlist_new();
+
+/* #define DEBUG_CIRCUIT_UNLINK_ALL */
+
+ channel_unlink_all_circuits(chan, detached);
- connection_or_unlink_all_active_circs(conn);
+#ifdef DEBUG_CIRCUIT_UNLINK_ALL
+ {
+ circuit_t *circ;
+ smartlist_t *detached_2 = smartlist_new();
+ int mismatch = 0, badlen = 0;
+
+ TOR_LIST_FOREACH(circ, &global_circuitlist, head) {
+ if (circ->n_chan == chan ||
+ (!CIRCUIT_IS_ORIGIN(circ) &&
+ TO_OR_CIRCUIT(circ)->p_chan == chan)) {
+ smartlist_add(detached_2, circ);
+ }
+ }
- for (circ = global_circuitlist; circ; circ = circ->next) {
+ if (smartlist_len(detached) != smartlist_len(detached_2)) {
+ log_warn(LD_BUG, "List of detached circuits had the wrong length! "
+ "(got %d, should have gotten %d)",
+ (int)smartlist_len(detached),
+ (int)smartlist_len(detached_2));
+ badlen = 1;
+ }
+ smartlist_sort_pointers(detached);
+ smartlist_sort_pointers(detached_2);
+
+ SMARTLIST_FOREACH(detached, circuit_t *, c,
+ if (c != smartlist_get(detached_2, c_sl_idx))
+ mismatch = 1;
+ );
+
+ if (mismatch)
+ log_warn(LD_BUG, "Mismatch in list of detached circuits.");
+
+ if (badlen || mismatch) {
+ smartlist_free(detached);
+ detached = detached_2;
+ } else {
+ log_notice(LD_CIRC, "List of %d circuits was as expected.",
+ (int)smartlist_len(detached));
+ smartlist_free(detached_2);
+ }
+ }
+#endif
+
+ SMARTLIST_FOREACH_BEGIN(detached, circuit_t *, circ) {
int mark = 0;
- if (circ->n_conn == conn) {
- circuit_set_n_circid_orconn(circ, 0, NULL);
- mark = 1;
+ if (circ->n_chan == chan) {
+
+ circuit_set_n_circid_chan(circ, 0, NULL);
+ mark = 1;
+
+ /* If we didn't request this closure, pass the remote
+ * bit to mark_for_close. */
+ if (chan->reason_for_closing != CHANNEL_CLOSE_REQUESTED)
+ reason |= END_CIRC_REASON_FLAG_REMOTE;
}
if (! CIRCUIT_IS_ORIGIN(circ)) {
or_circuit_t *or_circ = TO_OR_CIRCUIT(circ);
- if (or_circ->p_conn == conn) {
- circuit_set_p_circid_orconn(or_circ, 0, NULL);
+ if (or_circ->p_chan == chan) {
+ circuit_set_p_circid_chan(or_circ, 0, NULL);
mark = 1;
}
}
- if (mark && !circ->marked_for_close)
+ if (!mark) {
+ log_warn(LD_BUG, "Circuit on detached list which I had no reason "
+ "to mark");
+ continue;
+ }
+ if (!circ->marked_for_close)
circuit_mark_for_close(circ, reason);
- }
+ } SMARTLIST_FOREACH_END(circ);
+
+ smartlist_free(detached);
}
/** Return a circ such that
@@ -957,8 +1204,7 @@ origin_circuit_t *
circuit_get_ready_rend_circ_by_rend_data(const rend_data_t *rend_data)
{
circuit_t *circ;
-
- for (circ = global_circuitlist; circ; circ = circ->next) {
+ TOR_LIST_FOREACH(circ, &global_circuitlist, head) {
if (!circ->marked_for_close &&
circ->purpose == CIRCUIT_PURPOSE_C_REND_READY) {
origin_circuit_t *ocirc = TO_ORIGIN_CIRCUIT(circ);
@@ -986,11 +1232,11 @@ circuit_get_next_by_pk_and_purpose(origin_circuit_t *start,
circuit_t *circ;
tor_assert(CIRCUIT_PURPOSE_IS_ORIGIN(purpose));
if (start == NULL)
- circ = global_circuitlist;
+ circ = TOR_LIST_FIRST(&global_circuitlist);
else
- circ = TO_CIRCUIT(start)->next;
+ circ = TOR_LIST_NEXT(TO_CIRCUIT(start), head);
- for ( ; circ; circ = circ->next) {
+ for ( ; circ; circ = TOR_LIST_NEXT(circ, head)) {
if (circ->marked_for_close)
continue;
if (circ->purpose != purpose)
@@ -1005,43 +1251,175 @@ circuit_get_next_by_pk_and_purpose(origin_circuit_t *start,
return NULL;
}
-/** Return the first OR circuit in the global list whose purpose is
- * <b>purpose</b>, and whose rend_token is the <b>len</b>-byte
- * <b>token</b>. */
+/** Map from rendezvous cookie to or_circuit_t */
+static digestmap_t *rend_cookie_map = NULL;
+
+/** Map from introduction point digest to or_circuit_t */
+static digestmap_t *intro_digest_map = NULL;
+
+/** Return the OR circuit whose purpose is <b>purpose</b>, and whose
+ * rend_token is the REND_TOKEN_LEN-byte <b>token</b>. If <b>is_rend_circ</b>,
+ * look for rendezvous point circuits; otherwise look for introduction point
+ * circuits. */
static or_circuit_t *
-circuit_get_by_rend_token_and_purpose(uint8_t purpose, const char *token,
- size_t len)
+circuit_get_by_rend_token_and_purpose(uint8_t purpose, int is_rend_circ,
+ const char *token)
{
- circuit_t *circ;
- for (circ = global_circuitlist; circ; circ = circ->next) {
- if (! circ->marked_for_close &&
- circ->purpose == purpose &&
- tor_memeq(TO_OR_CIRCUIT(circ)->rend_token, token, len))
- return TO_OR_CIRCUIT(circ);
+ or_circuit_t *circ;
+ digestmap_t *map = is_rend_circ ? rend_cookie_map : intro_digest_map;
+
+ if (!map)
+ return NULL;
+
+ circ = digestmap_get(map, token);
+ if (!circ ||
+ circ->base_.purpose != purpose ||
+ circ->base_.marked_for_close)
+ return NULL;
+
+ if (!circ->rendinfo) {
+ char *t = tor_strdup(hex_str(token, REND_TOKEN_LEN));
+ log_warn(LD_BUG, "Wanted a circuit with %s:%d, but lookup returned a "
+ "circuit with no rendinfo set.",
+ safe_str(t), is_rend_circ);
+ tor_free(t);
+ return NULL;
}
- return NULL;
+
+ if (! bool_eq(circ->rendinfo->is_rend_circ, is_rend_circ) ||
+ tor_memneq(circ->rendinfo->rend_token, token, REND_TOKEN_LEN)) {
+ char *t = tor_strdup(hex_str(token, REND_TOKEN_LEN));
+ log_warn(LD_BUG, "Wanted a circuit with %s:%d, but lookup returned %s:%d",
+ safe_str(t), is_rend_circ,
+ safe_str(hex_str(circ->rendinfo->rend_token, REND_TOKEN_LEN)),
+ (int)circ->rendinfo->is_rend_circ);
+ tor_free(t);
+ return NULL;
+ }
+
+ return circ;
+}
+
+/** Clear the rendezvous cookie or introduction point key digest that's
+ * configured on <b>circ</b>, if any, and remove it from any such maps. */
+static void
+circuit_clear_rend_token(or_circuit_t *circ)
+{
+ or_circuit_t *found_circ;
+ digestmap_t *map;
+
+ if (!circ || !circ->rendinfo)
+ return;
+
+ map = circ->rendinfo->is_rend_circ ? rend_cookie_map : intro_digest_map;
+
+ if (!map) {
+ log_warn(LD_BUG, "Tried to clear rend token on circuit, but found no map");
+ return;
+ }
+
+ found_circ = digestmap_get(map, circ->rendinfo->rend_token);
+ if (found_circ == circ) {
+ /* Great, this is the right one. */
+ digestmap_remove(map, circ->rendinfo->rend_token);
+ } else if (found_circ) {
+ log_warn(LD_BUG, "Tried to clear rend token on circuit, but "
+ "it was already replaced in the map.");
+ } else {
+ log_warn(LD_BUG, "Tried to clear rend token on circuit, but "
+ "it not in the map at all.");
+ }
+
+ tor_free(circ->rendinfo); /* Sets it to NULL too */
+}
+
+/** Set the rendezvous cookie (if is_rend_circ), or the introduction point
+ * digest (if ! is_rend_circ) of <b>circ</b> to the REND_TOKEN_LEN-byte value
+ * in <b>token</b>, and add it to the appropriate map. If it previously had a
+ * token, clear it. If another circuit previously had the same
+ * cookie/intro-digest, mark that circuit and remove it from the map. */
+static void
+circuit_set_rend_token(or_circuit_t *circ, int is_rend_circ,
+ const uint8_t *token)
+{
+ digestmap_t **map_p, *map;
+ or_circuit_t *found_circ;
+
+ /* Find the right map, creating it as needed */
+ map_p = is_rend_circ ? &rend_cookie_map : &intro_digest_map;
+
+ if (!*map_p)
+ *map_p = digestmap_new();
+
+ map = *map_p;
+
+ /* If this circuit already has a token, we need to remove that. */
+ if (circ->rendinfo)
+ circuit_clear_rend_token(circ);
+
+ if (token == NULL) {
+ /* We were only trying to remove this token, not set a new one. */
+ return;
+ }
+
+ found_circ = digestmap_get(map, (const char *)token);
+ if (found_circ) {
+ tor_assert(found_circ != circ);
+ circuit_clear_rend_token(found_circ);
+ if (! found_circ->base_.marked_for_close) {
+ circuit_mark_for_close(TO_CIRCUIT(found_circ), END_CIRC_REASON_FINISHED);
+ if (is_rend_circ) {
+ log_fn(LOG_PROTOCOL_WARN, LD_REND,
+ "Duplicate rendezvous cookie (%s...) used on two circuits",
+ hex_str((const char*)token, 4)); /* only log first 4 chars */
+ }
+ }
+ }
+
+ /* Now set up the rendinfo */
+ circ->rendinfo = tor_malloc(sizeof(*circ->rendinfo));
+ memcpy(circ->rendinfo->rend_token, token, REND_TOKEN_LEN);
+ circ->rendinfo->is_rend_circ = is_rend_circ ? 1 : 0;
+
+ digestmap_set(map, (const char *)token, circ);
}
/** Return the circuit waiting for a rendezvous with the provided cookie.
* Return NULL if no such circuit is found.
*/
or_circuit_t *
-circuit_get_rendezvous(const char *cookie)
+circuit_get_rendezvous(const uint8_t *cookie)
{
return circuit_get_by_rend_token_and_purpose(
CIRCUIT_PURPOSE_REND_POINT_WAITING,
- cookie, REND_COOKIE_LEN);
+ 1, (const char*)cookie);
}
/** Return the circuit waiting for intro cells of the given digest.
* Return NULL if no such circuit is found.
*/
or_circuit_t *
-circuit_get_intro_point(const char *digest)
+circuit_get_intro_point(const uint8_t *digest)
{
return circuit_get_by_rend_token_and_purpose(
- CIRCUIT_PURPOSE_INTRO_POINT, digest,
- DIGEST_LEN);
+ CIRCUIT_PURPOSE_INTRO_POINT, 0,
+ (const char *)digest);
+}
+
+/** Set the rendezvous cookie of <b>circ</b> to <b>cookie</b>. If another
+ * circuit previously had that cookie, mark it. */
+void
+circuit_set_rendezvous_cookie(or_circuit_t *circ, const uint8_t *cookie)
+{
+ circuit_set_rend_token(circ, 1, cookie);
+}
+
+/** Set the intro point key digest of <b>circ</b> to <b>cookie</b>. If another
+ * circuit previously had that intro point digest, mark it. */
+void
+circuit_set_intro_point_digest(or_circuit_t *circ, const uint8_t *digest)
+{
+ circuit_set_rend_token(circ, 0, digest);
}
/** Return a circuit that is open, is CIRCUIT_PURPOSE_C_GENERAL,
@@ -1059,7 +1437,7 @@ origin_circuit_t *
circuit_find_to_cannibalize(uint8_t purpose, extend_info_t *info,
int flags)
{
- circuit_t *_circ;
+ circuit_t *circ_;
origin_circuit_t *best=NULL;
int need_uptime = (flags & CIRCLAUNCH_NEED_UPTIME) != 0;
int need_capacity = (flags & CIRCLAUNCH_NEED_CAPACITY) != 0;
@@ -1075,16 +1453,17 @@ circuit_find_to_cannibalize(uint8_t purpose, extend_info_t *info,
"capacity %d, internal %d",
purpose, need_uptime, need_capacity, internal);
- for (_circ=global_circuitlist; _circ; _circ = _circ->next) {
- if (CIRCUIT_IS_ORIGIN(_circ) &&
- _circ->state == CIRCUIT_STATE_OPEN &&
- !_circ->marked_for_close &&
- _circ->purpose == CIRCUIT_PURPOSE_C_GENERAL &&
- !_circ->timestamp_dirty) {
- origin_circuit_t *circ = TO_ORIGIN_CIRCUIT(_circ);
+ TOR_LIST_FOREACH(circ_, &global_circuitlist, head) {
+ if (CIRCUIT_IS_ORIGIN(circ_) &&
+ circ_->state == CIRCUIT_STATE_OPEN &&
+ !circ_->marked_for_close &&
+ circ_->purpose == CIRCUIT_PURPOSE_C_GENERAL &&
+ !circ_->timestamp_dirty) {
+ origin_circuit_t *circ = TO_ORIGIN_CIRCUIT(circ_);
if ((!need_uptime || circ->build_state->need_uptime) &&
(!need_capacity || circ->build_state->need_capacity) &&
(internal == circ->build_state->is_internal) &&
+ !circ->unusable_for_new_conns &&
circ->remaining_relay_early_cells &&
circ->build_state->desired_path_len == DEFAULT_ROUTE_LEN &&
!circ->build_state->onehop_tunnel &&
@@ -1164,8 +1543,7 @@ void
circuit_mark_all_unused_circs(void)
{
circuit_t *circ;
-
- for (circ=global_circuitlist; circ; circ = circ->next) {
+ TOR_LIST_FOREACH(circ, &global_circuitlist, head) {
if (CIRCUIT_IS_ORIGIN(circ) &&
!circ->marked_for_close &&
!circ->timestamp_dirty)
@@ -1180,20 +1558,16 @@ circuit_mark_all_unused_circs(void)
* This is useful for letting the user change pseudonyms, so new
* streams will not be linkable to old streams.
*/
-/* XXX024 this is a bad name for what this function does */
void
-circuit_expire_all_dirty_circs(void)
+circuit_mark_all_dirty_circs_as_unusable(void)
{
circuit_t *circ;
- const or_options_t *options = get_options();
-
- for (circ=global_circuitlist; circ; circ = circ->next) {
+ TOR_LIST_FOREACH(circ, &global_circuitlist, head) {
if (CIRCUIT_IS_ORIGIN(circ) &&
!circ->marked_for_close &&
- circ->timestamp_dirty)
- /* XXXX024 This is a screwed-up way to say "This is too dirty
- * for new circuits. */
- circ->timestamp_dirty -= options->MaxCircuitDirtiness;
+ circ->timestamp_dirty) {
+ mark_circuit_unusable_for_new_conns(TO_ORIGIN_CIRCUIT(circ));
+ }
}
}
@@ -1214,9 +1588,9 @@ circuit_expire_all_dirty_circs(void)
* - If circ->rend_splice is set (we are the midpoint of a joined
* rendezvous stream), then mark the other circuit to close as well.
*/
-void
-_circuit_mark_for_close(circuit_t *circ, int reason, int line,
- const char *file)
+MOCK_IMPL(void,
+circuit_mark_for_close_, (circuit_t *circ, int reason, int line,
+ const char *file))
{
int orig_reason = reason; /* Passed to the controller */
assert_circuit_ok(circ);
@@ -1224,7 +1598,7 @@ _circuit_mark_for_close(circuit_t *circ, int reason, int line,
tor_assert(file);
if (circ->marked_for_close) {
- log(LOG_WARN,LD_BUG,
+ log_warn(LD_BUG,
"Duplicate call to circuit_mark_for_close at %s:%d"
" (first at %s:%d)", file, line,
circ->marked_for_close_file, circ->marked_for_close);
@@ -1238,7 +1612,13 @@ _circuit_mark_for_close(circuit_t *circ, int reason, int line,
}
reason = END_CIRC_REASON_NONE;
}
+
if (CIRCUIT_IS_ORIGIN(circ)) {
+ if (pathbias_check_close(TO_ORIGIN_CIRCUIT(circ), reason) == -1) {
+ /* Don't close it yet, we need to test it first */
+ return;
+ }
+
/* We don't send reasons when closing circuits at the origin. */
reason = END_CIRC_REASON_NONE;
}
@@ -1246,7 +1626,7 @@ _circuit_mark_for_close(circuit_t *circ, int reason, int line,
if (reason & END_CIRC_REASON_FLAG_REMOTE)
reason &= ~END_CIRC_REASON_FLAG_REMOTE;
- if (reason < _END_CIRC_REASON_MIN || reason > _END_CIRC_REASON_MAX) {
+ if (reason < END_CIRC_REASON_MIN_ || reason > END_CIRC_REASON_MAX_) {
if (!(orig_reason & END_CIRC_REASON_FLAG_REMOTE))
log_warn(LD_BUG, "Reason %d out of range at %s:%d", reason, file, line);
reason = END_CIRC_REASON_NONE;
@@ -1266,9 +1646,9 @@ _circuit_mark_for_close(circuit_t *circ, int reason, int line,
circuit_rep_hist_note_result(ocirc);
}
}
- if (circ->state == CIRCUIT_STATE_OR_WAIT) {
- if (circuits_pending_or_conns)
- smartlist_remove(circuits_pending_or_conns, circ);
+ if (circ->state == CIRCUIT_STATE_CHAN_WAIT) {
+ if (circuits_pending_chans)
+ smartlist_remove(circuits_pending_chans, circ);
}
if (CIRCUIT_IS_ORIGIN(circ)) {
control_event_circuit_status(TO_ORIGIN_CIRCUIT(circ),
@@ -1305,9 +1685,16 @@ _circuit_mark_for_close(circuit_t *circ, int reason, int line,
INTRO_POINT_FAILURE_UNREACHABLE);
}
}
- if (circ->n_conn) {
- circuit_clear_cell_queue(circ, circ->n_conn);
- connection_or_send_destroy(circ->n_circ_id, circ->n_conn, reason);
+ if (circ->n_chan) {
+ circuit_clear_cell_queue(circ, circ->n_chan);
+ /* Only send destroy if the channel isn't closing anyway */
+ if (!(circ->n_chan->state == CHANNEL_STATE_CLOSING ||
+ circ->n_chan->state == CHANNEL_STATE_CLOSED ||
+ circ->n_chan->state == CHANNEL_STATE_ERROR)) {
+ channel_send_destroy(circ->n_circ_id, circ->n_chan, reason);
+ }
+ circuitmux_detach_circuit(circ->n_chan->cmux, circ);
+ circuit_set_n_circid_chan(circ, 0, NULL);
}
if (! CIRCUIT_IS_ORIGIN(circ)) {
@@ -1320,7 +1707,7 @@ _circuit_mark_for_close(circuit_t *circ, int reason, int line,
while (or_circ->resolving_streams) {
conn = or_circ->resolving_streams;
or_circ->resolving_streams = conn->next_stream;
- if (!conn->_base.marked_for_close) {
+ if (!conn->base_.marked_for_close) {
/* The client will see a DESTROY, and infer that the connections
* are closing because the circuit is getting torn down. No need
* to send an end cell. */
@@ -1332,9 +1719,16 @@ _circuit_mark_for_close(circuit_t *circ, int reason, int line,
conn->on_circuit = NULL;
}
- if (or_circ->p_conn) {
- circuit_clear_cell_queue(circ, or_circ->p_conn);
- connection_or_send_destroy(or_circ->p_circ_id, or_circ->p_conn, reason);
+ if (or_circ->p_chan) {
+ circuit_clear_cell_queue(circ, or_circ->p_chan);
+ /* Only send destroy if the channel isn't closing anyway */
+ if (!(or_circ->p_chan->state == CHANNEL_STATE_CLOSING ||
+ or_circ->p_chan->state == CHANNEL_STATE_CLOSED ||
+ or_circ->p_chan->state == CHANNEL_STATE_ERROR)) {
+ channel_send_destroy(or_circ->p_circ_id, or_circ->p_chan, reason);
+ }
+ circuitmux_detach_circuit(or_circ->p_chan->cmux, circ);
+ circuit_set_p_circid_chan(or_circ, 0, NULL);
}
} else {
origin_circuit_t *ocirc = TO_ORIGIN_CIRCUIT(circ);
@@ -1350,7 +1744,7 @@ _circuit_mark_for_close(circuit_t *circ, int reason, int line,
if (!CIRCUIT_IS_ORIGIN(circ)) {
or_circuit_t *or_circ = TO_OR_CIRCUIT(circ);
if (or_circ->rend_splice) {
- if (!or_circ->rend_splice->_base.marked_for_close) {
+ if (!or_circ->rend_splice->base_.marked_for_close) {
/* do this after marking this circuit, to avoid infinite recursion. */
circuit_mark_for_close(TO_CIRCUIT(or_circ->rend_splice), reason);
}
@@ -1359,6 +1753,251 @@ _circuit_mark_for_close(circuit_t *circ, int reason, int line,
}
}
+/** Given a marked circuit <b>circ</b>, aggressively free its cell queues to
+ * recover memory. */
+static void
+marked_circuit_free_cells(circuit_t *circ)
+{
+ if (!circ->marked_for_close) {
+ log_warn(LD_BUG, "Called on non-marked circuit");
+ return;
+ }
+ cell_queue_clear(&circ->n_chan_cells);
+ if (! CIRCUIT_IS_ORIGIN(circ))
+ cell_queue_clear(& TO_OR_CIRCUIT(circ)->p_chan_cells);
+}
+
+/** Aggressively free buffer contents on all the buffers of all streams in the
+ * list starting at <b>stream</b>. Return the number of bytes recovered. */
+static size_t
+marked_circuit_streams_free_bytes(edge_connection_t *stream)
+{
+ size_t result = 0;
+ for ( ; stream; stream = stream->next_stream) {
+ connection_t *conn = TO_CONN(stream);
+ if (conn->inbuf) {
+ result += buf_allocation(conn->inbuf);
+ buf_clear(conn->inbuf);
+ }
+ if (conn->outbuf) {
+ result += buf_allocation(conn->outbuf);
+ buf_clear(conn->outbuf);
+ }
+ }
+ return result;
+}
+
+/** Aggressively free buffer contents on all the buffers of all streams on
+ * circuit <b>c</b>. Return the number of bytes recovered. */
+static size_t
+marked_circuit_free_stream_bytes(circuit_t *c)
+{
+ if (CIRCUIT_IS_ORIGIN(c)) {
+ return marked_circuit_streams_free_bytes(TO_ORIGIN_CIRCUIT(c)->p_streams);
+ } else {
+ return marked_circuit_streams_free_bytes(TO_OR_CIRCUIT(c)->n_streams);
+ }
+}
+
+/** Return the number of cells used by the circuit <b>c</b>'s cell queues. */
+STATIC size_t
+n_cells_in_circ_queues(const circuit_t *c)
+{
+ size_t n = c->n_chan_cells.n;
+ if (! CIRCUIT_IS_ORIGIN(c)) {
+ circuit_t *cc = (circuit_t *) c;
+ n += TO_OR_CIRCUIT(cc)->p_chan_cells.n;
+ }
+ return n;
+}
+
+/**
+ * Return the age of the oldest cell queued on <b>c</b>, in milliseconds.
+ * Return 0 if there are no cells queued on c. Requires that <b>now</b> be
+ * the current time in milliseconds since the epoch, truncated.
+ *
+ * This function will return incorrect results if the oldest cell queued on
+ * the circuit is older than 2**32 msec (about 49 days) old.
+ */
+STATIC uint32_t
+circuit_max_queued_cell_age(const circuit_t *c, uint32_t now)
+{
+ uint32_t age = 0;
+ packed_cell_t *cell;
+
+ if (NULL != (cell = TOR_SIMPLEQ_FIRST(&c->n_chan_cells.head)))
+ age = now - cell->inserted_time;
+
+ if (! CIRCUIT_IS_ORIGIN(c)) {
+ const or_circuit_t *orcirc = CONST_TO_OR_CIRCUIT(c);
+ if (NULL != (cell = TOR_SIMPLEQ_FIRST(&orcirc->p_chan_cells.head))) {
+ uint32_t age2 = now - cell->inserted_time;
+ if (age2 > age)
+ return age2;
+ }
+ }
+ return age;
+}
+
+/** Return the age in milliseconds of the oldest buffer chunk on any stream in
+ * the linked list <b>stream</b>, where age is taken in milliseconds before
+ * the time <b>now</b> (in truncated milliseconds since the epoch). */
+static uint32_t
+circuit_get_streams_max_data_age(const edge_connection_t *stream, uint32_t now)
+{
+ uint32_t age = 0, age2;
+ for (; stream; stream = stream->next_stream) {
+ const connection_t *conn = TO_CONN(stream);
+ if (conn->outbuf) {
+ age2 = buf_get_oldest_chunk_timestamp(conn->outbuf, now);
+ if (age2 > age)
+ age = age2;
+ }
+ if (conn->inbuf) {
+ age2 = buf_get_oldest_chunk_timestamp(conn->inbuf, now);
+ if (age2 > age)
+ age = age2;
+ }
+ }
+
+ return age;
+}
+
+/** Return the age in milliseconds of the oldest buffer chunk on any stream
+ * attached to the circuit <b>c</b>, where age is taken in milliseconds before
+ * the time <b>now</b> (in truncated milliseconds since the epoch). */
+STATIC uint32_t
+circuit_max_queued_data_age(const circuit_t *c, uint32_t now)
+{
+ if (CIRCUIT_IS_ORIGIN(c)) {
+ return circuit_get_streams_max_data_age(
+ CONST_TO_ORIGIN_CIRCUIT(c)->p_streams, now);
+ } else {
+ return circuit_get_streams_max_data_age(
+ CONST_TO_OR_CIRCUIT(c)->n_streams, now);
+ }
+}
+
+/** Return the age of the oldest cell or stream buffer chunk on the circuit
+ * <b>c</b>, where age is taken in milliseconds before the time <b>now</b> (in
+ * truncated milliseconds since the epoch). */
+STATIC uint32_t
+circuit_max_queued_item_age(const circuit_t *c, uint32_t now)
+{
+ uint32_t cell_age = circuit_max_queued_cell_age(c, now);
+ uint32_t data_age = circuit_max_queued_data_age(c, now);
+ if (cell_age > data_age)
+ return cell_age;
+ else
+ return data_age;
+}
+
+/** Helper to sort a list of circuit_t by age of oldest item, in descending
+ * order. */
+static int
+circuits_compare_by_oldest_queued_item_(const void **a_, const void **b_)
+{
+ const circuit_t *a = *a_;
+ const circuit_t *b = *b_;
+ uint32_t age_a = a->age_tmp;
+ uint32_t age_b = b->age_tmp;
+
+ if (age_a < age_b)
+ return 1;
+ else if (age_a == age_b)
+ return 0;
+ else
+ return -1;
+}
+
+#define FRACTION_OF_DATA_TO_RETAIN_ON_OOM 0.90
+
+/** We're out of memory for cells, having allocated <b>current_allocation</b>
+ * bytes' worth. Kill the 'worst' circuits until we're under
+ * FRACTION_OF_DATA_TO_RETAIN_ON_OOM of our maximum usage. */
+void
+circuits_handle_oom(size_t current_allocation)
+{
+ /* Let's hope there's enough slack space for this allocation here... */
+ smartlist_t *circlist = smartlist_new();
+ circuit_t *circ;
+ size_t mem_to_recover;
+ size_t mem_recovered=0;
+ int n_circuits_killed=0;
+ struct timeval now;
+ uint32_t now_ms;
+ log_notice(LD_GENERAL, "We're low on memory. Killing circuits with "
+ "over-long queues. (This behavior is controlled by "
+ "MaxMemInQueues.)");
+
+ {
+ const size_t recovered = buf_shrink_freelists(1);
+ if (recovered >= current_allocation) {
+ log_warn(LD_BUG, "We somehow recovered more memory from freelists "
+ "than we thought we had allocated");
+ current_allocation = 0;
+ } else {
+ current_allocation -= recovered;
+ }
+ }
+
+ {
+ size_t mem_target = (size_t)(get_options()->MaxMemInQueues *
+ FRACTION_OF_DATA_TO_RETAIN_ON_OOM);
+ if (current_allocation <= mem_target)
+ return;
+ mem_to_recover = current_allocation - mem_target;
+ }
+
+ tor_gettimeofday_cached_monotonic(&now);
+ now_ms = (uint32_t)tv_to_msec(&now);
+
+ /* This algorithm itself assumes that you've got enough memory slack
+ * to actually run it. */
+ TOR_LIST_FOREACH(circ, &global_circuitlist, head) {
+ circ->age_tmp = circuit_max_queued_item_age(circ, now_ms);
+ smartlist_add(circlist, circ);
+ }
+
+ /* This is O(n log n); there are faster algorithms we could use instead.
+ * Let's hope this doesn't happen enough to be in the critical path. */
+ smartlist_sort(circlist, circuits_compare_by_oldest_queued_item_);
+
+ /* Okay, now the worst circuits are at the front of the list. Let's mark
+ * them, and reclaim their storage aggressively. */
+ SMARTLIST_FOREACH_BEGIN(circlist, circuit_t *, circ) {
+ size_t n = n_cells_in_circ_queues(circ);
+ size_t freed;
+ if (! circ->marked_for_close) {
+ circuit_mark_for_close(circ, END_CIRC_REASON_RESOURCELIMIT);
+ }
+ marked_circuit_free_cells(circ);
+ freed = marked_circuit_free_stream_bytes(circ);
+
+ ++n_circuits_killed;
+
+ mem_recovered += n * packed_cell_mem_cost();
+ mem_recovered += freed;
+
+ if (mem_recovered >= mem_to_recover)
+ break;
+ } SMARTLIST_FOREACH_END(circ);
+
+#ifdef ENABLE_MEMPOOLS
+ clean_cell_pool(); /* In case this helps. */
+#endif /* ENABLE_MEMPOOLS */
+ buf_shrink_freelists(1); /* This is necessary to actually release buffer
+ chunks. */
+
+ log_notice(LD_GENERAL, "Removed "U64_FORMAT" bytes by killing %d circuits; "
+ "%d circuits remain alive.",
+ U64_PRINTF_ARG(mem_recovered),
+ n_circuits_killed,
+ smartlist_len(circlist) - n_circuits_killed);
+
+ smartlist_free(circlist);
+}
+
/** Verify that cpath layer <b>cp</b> has all of its invariants
* correct. Trigger an assert if anything is invalid.
*/
@@ -1376,7 +2015,8 @@ assert_cpath_layer_ok(const crypt_path_t *cp)
tor_assert(cp->b_crypto);
/* fall through */
case CPATH_STATE_CLOSED:
- tor_assert(!cp->dh_handshake_state);
+ /*XXXX Assert that there's no handshake_state either. */
+ tor_assert(!cp->rend_dh_handshake_state);
break;
case CPATH_STATE_AWAITING_KEYS:
/* tor_assert(cp->dh_handshake_state); */
@@ -1424,46 +2064,42 @@ assert_circuit_ok(const circuit_t *c)
tor_assert(c);
tor_assert(c->magic == ORIGIN_CIRCUIT_MAGIC || c->magic == OR_CIRCUIT_MAGIC);
- tor_assert(c->purpose >= _CIRCUIT_PURPOSE_MIN &&
- c->purpose <= _CIRCUIT_PURPOSE_MAX);
+ tor_assert(c->purpose >= CIRCUIT_PURPOSE_MIN_ &&
+ c->purpose <= CIRCUIT_PURPOSE_MAX_);
- {
- /* Having a separate variable for this pleases GCC 4.2 in ways I hope I
- * never understand. -NM. */
- circuit_t *nonconst_circ = (circuit_t*) c;
- if (CIRCUIT_IS_ORIGIN(c))
- origin_circ = TO_ORIGIN_CIRCUIT(nonconst_circ);
- else
- or_circ = TO_OR_CIRCUIT(nonconst_circ);
- }
+ if (CIRCUIT_IS_ORIGIN(c))
+ origin_circ = CONST_TO_ORIGIN_CIRCUIT(c);
+ else
+ or_circ = CONST_TO_OR_CIRCUIT(c);
- if (c->n_conn) {
+ if (c->n_chan) {
tor_assert(!c->n_hop);
if (c->n_circ_id) {
/* We use the _impl variant here to make sure we don't fail on marked
* circuits, which would not be returned by the regular function. */
- circuit_t *c2 = circuit_get_by_circid_orconn_impl(c->n_circ_id,
- c->n_conn);
+ circuit_t *c2 = circuit_get_by_circid_channel_impl(c->n_circ_id,
+ c->n_chan, NULL);
tor_assert(c == c2);
}
}
- if (or_circ && or_circ->p_conn) {
+ if (or_circ && or_circ->p_chan) {
if (or_circ->p_circ_id) {
/* ibid */
- circuit_t *c2 = circuit_get_by_circid_orconn_impl(or_circ->p_circ_id,
- or_circ->p_conn);
+ circuit_t *c2 =
+ circuit_get_by_circid_channel_impl(or_circ->p_circ_id,
+ or_circ->p_chan, NULL);
tor_assert(c == c2);
}
}
if (or_circ)
for (conn = or_circ->n_streams; conn; conn = conn->next_stream)
- tor_assert(conn->_base.type == CONN_TYPE_EXIT);
+ tor_assert(conn->base_.type == CONN_TYPE_EXIT);
tor_assert(c->deliver_window >= 0);
tor_assert(c->package_window >= 0);
if (c->state == CIRCUIT_STATE_OPEN) {
- tor_assert(!c->n_conn_onionskin);
+ tor_assert(!c->n_chan_create_cell);
if (or_circ) {
tor_assert(or_circ->n_crypto);
tor_assert(or_circ->p_crypto);
@@ -1471,12 +2107,12 @@ assert_circuit_ok(const circuit_t *c)
tor_assert(or_circ->p_digest);
}
}
- if (c->state == CIRCUIT_STATE_OR_WAIT && !c->marked_for_close) {
- tor_assert(circuits_pending_or_conns &&
- smartlist_isin(circuits_pending_or_conns, c));
+ if (c->state == CIRCUIT_STATE_CHAN_WAIT && !c->marked_for_close) {
+ tor_assert(circuits_pending_chans &&
+ smartlist_contains(circuits_pending_chans, c));
} else {
- tor_assert(!circuits_pending_or_conns ||
- !smartlist_isin(circuits_pending_or_conns, c));
+ tor_assert(!circuits_pending_chans ||
+ !smartlist_contains(circuits_pending_chans, c));
}
if (origin_circ && origin_circ->cpath) {
assert_cpath_ok(origin_circ->cpath);
diff --git a/src/or/circuitlist.h b/src/or/circuitlist.h
index 6e7735476..916afba21 100644
--- a/src/or/circuitlist.h
+++ b/src/or/circuitlist.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,54 +9,78 @@
* \brief Header file for circuitlist.c.
**/
-#ifndef _TOR_CIRCUITLIST_H
-#define _TOR_CIRCUITLIST_H
+#ifndef TOR_CIRCUITLIST_H
+#define TOR_CIRCUITLIST_H
-circuit_t * _circuit_get_global_list(void);
+#include "testsupport.h"
+
+TOR_LIST_HEAD(global_circuitlist_s, circuit_t);
+
+MOCK_DECL(struct global_circuitlist_s*, circuit_get_global_list, (void));
const char *circuit_state_to_string(int state);
const char *circuit_purpose_to_controller_string(uint8_t purpose);
const char *circuit_purpose_to_controller_hs_state_string(uint8_t purpose);
const char *circuit_purpose_to_string(uint8_t purpose);
void circuit_dump_by_conn(connection_t *conn, int severity);
-void circuit_set_p_circid_orconn(or_circuit_t *circ, circid_t id,
- or_connection_t *conn);
-void circuit_set_n_circid_orconn(circuit_t *circ, circid_t id,
- or_connection_t *conn);
+void circuit_set_p_circid_chan(or_circuit_t *circ, circid_t id,
+ channel_t *chan);
+void circuit_set_n_circid_chan(circuit_t *circ, circid_t id,
+ channel_t *chan);
+void channel_mark_circid_unusable(channel_t *chan, circid_t id);
+void channel_mark_circid_usable(channel_t *chan, circid_t id);
void circuit_set_state(circuit_t *circ, uint8_t state);
void circuit_close_all_marked(void);
int32_t circuit_initial_package_window(void);
origin_circuit_t *origin_circuit_new(void);
-or_circuit_t *or_circuit_new(circid_t p_circ_id, or_connection_t *p_conn);
-circuit_t *circuit_get_by_circid_orconn(circid_t circ_id,
- or_connection_t *conn);
-int circuit_id_in_use_on_orconn(circid_t circ_id, or_connection_t *conn);
+or_circuit_t *or_circuit_new(circid_t p_circ_id, channel_t *p_chan);
+circuit_t *circuit_get_by_circid_channel(circid_t circ_id,
+ channel_t *chan);
+circuit_t *
+circuit_get_by_circid_channel_even_if_marked(circid_t circ_id,
+ channel_t *chan);
+int circuit_id_in_use_on_channel(circid_t circ_id, channel_t *chan);
circuit_t *circuit_get_by_edge_conn(edge_connection_t *conn);
-void circuit_unlink_all_from_or_conn(or_connection_t *conn, int reason);
+void circuit_unlink_all_from_channel(channel_t *chan, int reason);
origin_circuit_t *circuit_get_by_global_id(uint32_t id);
origin_circuit_t *circuit_get_ready_rend_circ_by_rend_data(
const rend_data_t *rend_data);
origin_circuit_t *circuit_get_next_by_pk_and_purpose(origin_circuit_t *start,
const char *digest, uint8_t purpose);
-or_circuit_t *circuit_get_rendezvous(const char *cookie);
-or_circuit_t *circuit_get_intro_point(const char *digest);
+or_circuit_t *circuit_get_rendezvous(const uint8_t *cookie);
+or_circuit_t *circuit_get_intro_point(const uint8_t *digest);
+void circuit_set_rendezvous_cookie(or_circuit_t *circ, const uint8_t *cookie);
+void circuit_set_intro_point_digest(or_circuit_t *circ, const uint8_t *digest);
origin_circuit_t *circuit_find_to_cannibalize(uint8_t purpose,
extend_info_t *info, int flags);
void circuit_mark_all_unused_circs(void);
-void circuit_expire_all_dirty_circs(void);
-void _circuit_mark_for_close(circuit_t *circ, int reason,
- int line, const char *file);
+void circuit_mark_all_dirty_circs_as_unusable(void);
+MOCK_DECL(void, circuit_mark_for_close_, (circuit_t *circ, int reason,
+ int line, const char *file));
int circuit_get_cpath_len(origin_circuit_t *circ);
+void circuit_clear_cpath(origin_circuit_t *circ);
crypt_path_t *circuit_get_cpath_hop(origin_circuit_t *circ, int hopnum);
-void circuit_get_all_pending_on_or_conn(smartlist_t *out,
- or_connection_t *or_conn);
-int circuit_count_pending_on_or_conn(or_connection_t *or_conn);
+void circuit_get_all_pending_on_channel(smartlist_t *out,
+ channel_t *chan);
+int circuit_count_pending_on_channel(channel_t *chan);
#define circuit_mark_for_close(c, reason) \
- _circuit_mark_for_close((c), (reason), __LINE__, _SHORT_FILE_)
+ circuit_mark_for_close_((c), (reason), __LINE__, SHORT_FILE__)
void assert_cpath_layer_ok(const crypt_path_t *cp);
void assert_circuit_ok(const circuit_t *c);
void circuit_free_all(void);
+void circuits_handle_oom(size_t current_allocation);
+
+void channel_note_destroy_pending(channel_t *chan, circid_t id);
+void channel_note_destroy_not_pending(channel_t *chan, circid_t id);
+
+#ifdef CIRCUITLIST_PRIVATE
+STATIC void circuit_free(circuit_t *circ);
+STATIC size_t n_cells_in_circ_queues(const circuit_t *c);
+STATIC uint32_t circuit_max_queued_data_age(const circuit_t *c, uint32_t now);
+STATIC uint32_t circuit_max_queued_cell_age(const circuit_t *c, uint32_t now);
+STATIC uint32_t circuit_max_queued_item_age(const circuit_t *c, uint32_t now);
+#endif
#endif
diff --git a/src/or/circuitmux.c b/src/or/circuitmux.c
new file mode 100644
index 000000000..52ebfef08
--- /dev/null
+++ b/src/or/circuitmux.c
@@ -0,0 +1,1911 @@
+/* * Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file circuitmux.c
+ * \brief Circuit mux/cell selection abstraction
+ **/
+
+#include "or.h"
+#include "channel.h"
+#include "circuitlist.h"
+#include "circuitmux.h"
+#include "relay.h"
+
+/*
+ * Private typedefs for circuitmux.c
+ */
+
+/*
+ * Map of muxinfos for circuitmux_t to use; struct is defined below (name
+ * of struct must match HT_HEAD line).
+ */
+typedef struct chanid_circid_muxinfo_map chanid_circid_muxinfo_map_t;
+
+/*
+ * Hash table entry (yeah, calling it chanid_circid_muxinfo_s seems to
+ * break the hash table code).
+ */
+typedef struct chanid_circid_muxinfo_t chanid_circid_muxinfo_t;
+
+/*
+ * Anything the mux wants to store per-circuit in the map; right now just
+ * a count of queued cells.
+ */
+
+typedef struct circuit_muxinfo_s circuit_muxinfo_t;
+
+/*
+ * Structures for circuitmux.c
+ */
+
+/*
+ * A circuitmux is a collection of circuits; it tracks which subset
+ * of the attached circuits are 'active' (i.e., have cells available
+ * to transmit) and how many cells on each. It expoes three distinct
+ * interfaces to other components:
+ *
+ * To channels, which each have a circuitmux_t, the supported operations
+ * are:
+ *
+ * circuitmux_get_first_active_circuit():
+ *
+ * Pick one of the circuitmux's active circuits to send cells from.
+ *
+ * circuitmux_notify_xmit_cells():
+ *
+ * Notify the circuitmux that cells have been sent on a circuit.
+ *
+ * To circuits, the exposed operations are:
+ *
+ * circuitmux_attach_circuit():
+ *
+ * Attach a circuit to the circuitmux; this will allocate any policy-
+ * specific data wanted for this circuit and add it to the active
+ * circuits list if it has queued cells.
+ *
+ * circuitmux_detach_circuit():
+ *
+ * Detach a circuit from the circuitmux, freeing associated structures.
+ *
+ * circuitmux_clear_num_cells():
+ *
+ * Clear the circuitmux's cell counter for this circuit.
+ *
+ * circuitmux_set_num_cells():
+ *
+ * Set the circuitmux's cell counter for this circuit.
+ *
+ * See circuitmux.h for the circuitmux_policy_t data structure, which contains
+ * a table of function pointers implementing a circuit selection policy, and
+ * circuitmux_ewma.c for an example of a circuitmux policy. Circuitmux
+ * policies can be manipulated with:
+ *
+ * circuitmux_get_policy():
+ *
+ * Return the current policy for a circuitmux_t, if any.
+ *
+ * circuitmux_clear_policy():
+ *
+ * Remove a policy installed on a circuitmux_t, freeing all associated
+ * data. The circuitmux will revert to the built-in round-robin behavior.
+ *
+ * circuitmux_set_policy():
+ *
+ * Install a policy on a circuitmux_t; the appropriate callbacks will be
+ * made to attach all existing circuits to the new policy.
+ *
+ */
+
+struct circuitmux_s {
+ /* Keep count of attached, active circuits */
+ unsigned int n_circuits, n_active_circuits;
+
+ /* Total number of queued cells on all circuits */
+ unsigned int n_cells;
+
+ /*
+ * Map from (channel ID, circuit ID) pairs to circuit_muxinfo_t
+ */
+ chanid_circid_muxinfo_map_t *chanid_circid_map;
+
+ /*
+ * Double-linked ring of circuits with queued cells waiting for room to
+ * free up on this connection's outbuf. Every time we pull cells from
+ * a circuit, we advance this pointer to the next circuit in the ring.
+ */
+ struct circuit_t *active_circuits_head, *active_circuits_tail;
+
+ /** List of queued destroy cells */
+ cell_queue_t destroy_cell_queue;
+ /** Boolean: True iff the last cell to circuitmux_get_first_active_circuit
+ * returned the destroy queue. Used to force alternation between
+ * destroy/non-destroy cells.
+ *
+ * XXXX There is no reason to think that alternating is a particularly good
+ * approach -- it's just designed to prevent destroys from starving other
+ * cells completely.
+ */
+ unsigned int last_cell_was_destroy : 1;
+ /** Destroy counter: increment this when a destroy gets queued, decrement
+ * when we unqueue it, so we can test to make sure they don't starve.
+ */
+ int64_t destroy_ctr;
+
+ /*
+ * Circuitmux policy; if this is non-NULL, it can override the built-
+ * in round-robin active circuits behavior. This is how EWMA works in
+ * the new circuitmux_t world.
+ */
+ const circuitmux_policy_t *policy;
+
+ /* Policy-specific data */
+ circuitmux_policy_data_t *policy_data;
+};
+
+/*
+ * This struct holds whatever we want to store per attached circuit on a
+ * circuitmux_t; right now, just the count of queued cells and the direction.
+ */
+
+struct circuit_muxinfo_s {
+ /* Count of cells on this circuit at last update */
+ unsigned int cell_count;
+ /* Direction of flow */
+ cell_direction_t direction;
+ /* Policy-specific data */
+ circuitmux_policy_circ_data_t *policy_data;
+ /* Mark bit for consistency checker */
+ unsigned int mark:1;
+};
+
+/*
+ * A map from channel ID and circuit ID to a circuit_muxinfo_t for that
+ * circuit.
+ */
+
+struct chanid_circid_muxinfo_t {
+ HT_ENTRY(chanid_circid_muxinfo_t) node;
+ uint64_t chan_id;
+ circid_t circ_id;
+ circuit_muxinfo_t muxinfo;
+};
+
+/*
+ * Internal-use #defines
+ */
+
+#ifdef CMUX_PARANOIA
+#define circuitmux_assert_okay_paranoid(cmux) \
+ circuitmux_assert_okay(cmux)
+#else
+#define circuitmux_assert_okay_paranoid(cmux)
+#endif
+
+/*
+ * Static function declarations
+ */
+
+static INLINE int
+chanid_circid_entries_eq(chanid_circid_muxinfo_t *a,
+ chanid_circid_muxinfo_t *b);
+static INLINE unsigned int
+chanid_circid_entry_hash(chanid_circid_muxinfo_t *a);
+static chanid_circid_muxinfo_t *
+circuitmux_find_map_entry(circuitmux_t *cmux, circuit_t *circ);
+static void
+circuitmux_make_circuit_active(circuitmux_t *cmux, circuit_t *circ,
+ cell_direction_t direction);
+static void
+circuitmux_make_circuit_inactive(circuitmux_t *cmux, circuit_t *circ,
+ cell_direction_t direction);
+static INLINE void
+circuitmux_move_active_circ_to_tail(circuitmux_t *cmux, circuit_t *circ,
+ cell_direction_t direction);
+static INLINE circuit_t **
+circuitmux_next_active_circ_p(circuitmux_t *cmux, circuit_t *circ);
+static INLINE circuit_t **
+circuitmux_prev_active_circ_p(circuitmux_t *cmux, circuit_t *circ);
+static void circuitmux_assert_okay_pass_one(circuitmux_t *cmux);
+static void circuitmux_assert_okay_pass_two(circuitmux_t *cmux);
+static void circuitmux_assert_okay_pass_three(circuitmux_t *cmux);
+
+/* Static global variables */
+
+/** Count the destroy balance to debug destroy queue logic */
+static int64_t global_destroy_ctr = 0;
+
+/* Function definitions */
+
+/**
+ * Linked list helpers
+ */
+
+/**
+ * Move an active circuit to the tail of the cmux's active circuits list;
+ * used by circuitmux_notify_xmit_cells().
+ */
+
+static INLINE void
+circuitmux_move_active_circ_to_tail(circuitmux_t *cmux, circuit_t *circ,
+ cell_direction_t direction)
+{
+ circuit_t **next_p = NULL, **prev_p = NULL;
+ circuit_t **next_prev = NULL, **prev_next = NULL;
+ circuit_t **tail_next = NULL;
+ or_circuit_t *or_circ = NULL;
+
+ tor_assert(cmux);
+ tor_assert(circ);
+
+ circuitmux_assert_okay_paranoid(cmux);
+
+ /* Figure out our next_p and prev_p for this cmux/direction */
+ if (direction) {
+ if (direction == CELL_DIRECTION_OUT) {
+ tor_assert(circ->n_mux == cmux);
+ next_p = &(circ->next_active_on_n_chan);
+ prev_p = &(circ->prev_active_on_n_chan);
+ } else {
+ or_circ = TO_OR_CIRCUIT(circ);
+ tor_assert(or_circ->p_mux == cmux);
+ next_p = &(or_circ->next_active_on_p_chan);
+ prev_p = &(or_circ->prev_active_on_p_chan);
+ }
+ } else {
+ if (circ->n_mux == cmux) {
+ next_p = &(circ->next_active_on_n_chan);
+ prev_p = &(circ->prev_active_on_n_chan);
+ direction = CELL_DIRECTION_OUT;
+ } else {
+ or_circ = TO_OR_CIRCUIT(circ);
+ tor_assert(or_circ->p_mux == cmux);
+ next_p = &(or_circ->next_active_on_p_chan);
+ prev_p = &(or_circ->prev_active_on_p_chan);
+ direction = CELL_DIRECTION_IN;
+ }
+ }
+ tor_assert(next_p);
+ tor_assert(prev_p);
+
+ /* Check if this really is an active circuit */
+ if ((*next_p == NULL && *prev_p == NULL) &&
+ !(circ == cmux->active_circuits_head ||
+ circ == cmux->active_circuits_tail)) {
+ /* Not active, no-op */
+ return;
+ }
+
+ /* Check if this is already the tail */
+ if (circ == cmux->active_circuits_tail) return;
+
+ /* Okay, we have to move it; figure out next_prev and prev_next */
+ if (*next_p) next_prev = circuitmux_prev_active_circ_p(cmux, *next_p);
+ if (*prev_p) prev_next = circuitmux_next_active_circ_p(cmux, *prev_p);
+ /* Adjust the previous node's next pointer, if any */
+ if (prev_next) *prev_next = *next_p;
+ /* Otherwise, we were the head */
+ else cmux->active_circuits_head = *next_p;
+ /* Adjust the next node's previous pointer, if any */
+ if (next_prev) *next_prev = *prev_p;
+ /* We're out of the list; now re-attach at the tail */
+ /* Adjust our next and prev pointers */
+ *next_p = NULL;
+ *prev_p = cmux->active_circuits_tail;
+ /* Set the next pointer of the tail, or the head if none */
+ if (cmux->active_circuits_tail) {
+ tail_next = circuitmux_next_active_circ_p(cmux,
+ cmux->active_circuits_tail);
+ *tail_next = circ;
+ } else {
+ cmux->active_circuits_head = circ;
+ }
+ /* Set the tail to this circuit */
+ cmux->active_circuits_tail = circ;
+
+ circuitmux_assert_okay_paranoid(cmux);
+}
+
+static INLINE circuit_t **
+circuitmux_next_active_circ_p(circuitmux_t *cmux, circuit_t *circ)
+{
+ tor_assert(cmux);
+ tor_assert(circ);
+
+ if (circ->n_mux == cmux) return &(circ->next_active_on_n_chan);
+ else {
+ tor_assert(TO_OR_CIRCUIT(circ)->p_mux == cmux);
+ return &(TO_OR_CIRCUIT(circ)->next_active_on_p_chan);
+ }
+}
+
+static INLINE circuit_t **
+circuitmux_prev_active_circ_p(circuitmux_t *cmux, circuit_t *circ)
+{
+ tor_assert(cmux);
+ tor_assert(circ);
+
+ if (circ->n_mux == cmux) return &(circ->prev_active_on_n_chan);
+ else {
+ tor_assert(TO_OR_CIRCUIT(circ)->p_mux == cmux);
+ return &(TO_OR_CIRCUIT(circ)->prev_active_on_p_chan);
+ }
+}
+
+/**
+ * Helper for chanid_circid_cell_count_map_t hash table: compare the channel
+ * ID and circuit ID for a and b, and return less than, equal to, or greater
+ * than zero appropriately.
+ */
+
+static INLINE int
+chanid_circid_entries_eq(chanid_circid_muxinfo_t *a,
+ chanid_circid_muxinfo_t *b)
+{
+ return a->chan_id == b->chan_id && a->circ_id == b->circ_id;
+}
+
+/**
+ * Helper: return a hash based on circuit ID and channel ID in a.
+ */
+
+static INLINE unsigned int
+chanid_circid_entry_hash(chanid_circid_muxinfo_t *a)
+{
+ return (((unsigned int)(a->circ_id) << 8) ^
+ ((unsigned int)((a->chan_id >> 32) & 0xffffffff)) ^
+ ((unsigned int)(a->chan_id & 0xffffffff)));
+}
+
+/* Declare the struct chanid_circid_muxinfo_map type */
+HT_HEAD(chanid_circid_muxinfo_map, chanid_circid_muxinfo_t);
+
+/* Emit a bunch of hash table stuff */
+HT_PROTOTYPE(chanid_circid_muxinfo_map, chanid_circid_muxinfo_t, node,
+ chanid_circid_entry_hash, chanid_circid_entries_eq);
+HT_GENERATE(chanid_circid_muxinfo_map, chanid_circid_muxinfo_t, node,
+ chanid_circid_entry_hash, chanid_circid_entries_eq, 0.6,
+ malloc, realloc, free);
+
+/*
+ * Circuitmux alloc/free functions
+ */
+
+/**
+ * Allocate a new circuitmux_t
+ */
+
+circuitmux_t *
+circuitmux_alloc(void)
+{
+ circuitmux_t *rv = NULL;
+
+ rv = tor_malloc_zero(sizeof(*rv));
+ rv->chanid_circid_map = tor_malloc_zero(sizeof(*( rv->chanid_circid_map)));
+ HT_INIT(chanid_circid_muxinfo_map, rv->chanid_circid_map);
+ cell_queue_init(&rv->destroy_cell_queue);
+
+ return rv;
+}
+
+/**
+ * Detach all circuits from a circuitmux (use before circuitmux_free())
+ *
+ * If <b>detached_out</b> is non-NULL, add every detached circuit_t to
+ * detached_out.
+ */
+
+void
+circuitmux_detach_all_circuits(circuitmux_t *cmux, smartlist_t *detached_out)
+{
+ chanid_circid_muxinfo_t **i = NULL, *to_remove;
+ channel_t *chan = NULL;
+ circuit_t *circ = NULL;
+
+ tor_assert(cmux);
+ /*
+ * Don't circuitmux_assert_okay_paranoid() here; this gets called when
+ * channels are being freed and have already been unregistered, so
+ * the channel ID lookups it does will fail.
+ */
+
+ i = HT_START(chanid_circid_muxinfo_map, cmux->chanid_circid_map);
+ while (i) {
+ to_remove = *i;
+
+ if (! to_remove) {
+ log_warn(LD_BUG, "Somehow, an HT iterator gave us a NULL pointer.");
+ break;
+ } else {
+ /* Find a channel and circuit */
+ chan = channel_find_by_global_id(to_remove->chan_id);
+ if (chan) {
+ circ =
+ circuit_get_by_circid_channel_even_if_marked(to_remove->circ_id,
+ chan);
+ if (circ) {
+ /* Clear the circuit's mux for this direction */
+ if (to_remove->muxinfo.direction == CELL_DIRECTION_OUT) {
+ /*
+ * Update active_circuits et al.; this does policy notifies, so
+ * comes before freeing policy data
+ */
+
+ if (to_remove->muxinfo.cell_count > 0) {
+ circuitmux_make_circuit_inactive(cmux, circ, CELL_DIRECTION_OUT);
+ }
+
+ /* Clear n_mux */
+ circ->n_mux = NULL;
+
+ if (detached_out)
+ smartlist_add(detached_out, circ);
+ } else if (circ->magic == OR_CIRCUIT_MAGIC) {
+ /*
+ * Update active_circuits et al.; this does policy notifies, so
+ * comes before freeing policy data
+ */
+
+ if (to_remove->muxinfo.cell_count > 0) {
+ circuitmux_make_circuit_inactive(cmux, circ, CELL_DIRECTION_IN);
+ }
+
+ /*
+ * It has a sensible p_chan and direction == CELL_DIRECTION_IN,
+ * so clear p_mux.
+ */
+ TO_OR_CIRCUIT(circ)->p_mux = NULL;
+
+ if (detached_out)
+ smartlist_add(detached_out, circ);
+ } else {
+ /* Complain and move on */
+ log_warn(LD_CIRC,
+ "Circuit %u/channel " U64_FORMAT " had direction == "
+ "CELL_DIRECTION_IN, but isn't an or_circuit_t",
+ (unsigned)to_remove->circ_id,
+ U64_PRINTF_ARG(to_remove->chan_id));
+ }
+
+ /* Free policy-specific data if we have it */
+ if (to_remove->muxinfo.policy_data) {
+ /*
+ * If we have policy data, assert that we have the means to
+ * free it
+ */
+ tor_assert(cmux->policy);
+ tor_assert(cmux->policy->free_circ_data);
+ /* Call free_circ_data() */
+ cmux->policy->free_circ_data(cmux,
+ cmux->policy_data,
+ circ,
+ to_remove->muxinfo.policy_data);
+ to_remove->muxinfo.policy_data = NULL;
+ }
+ } else {
+ /* Complain and move on */
+ log_warn(LD_CIRC,
+ "Couldn't find circuit %u (for channel " U64_FORMAT ")",
+ (unsigned)to_remove->circ_id,
+ U64_PRINTF_ARG(to_remove->chan_id));
+ }
+ } else {
+ /* Complain and move on */
+ log_warn(LD_CIRC,
+ "Couldn't find channel " U64_FORMAT " (for circuit id %u)",
+ U64_PRINTF_ARG(to_remove->chan_id),
+ (unsigned)to_remove->circ_id);
+ }
+
+ /* Assert that we don't have un-freed policy data for this circuit */
+ tor_assert(to_remove->muxinfo.policy_data == NULL);
+ }
+
+ i = HT_NEXT_RMV(chanid_circid_muxinfo_map, cmux->chanid_circid_map, i);
+
+ /* Free it */
+ tor_free(to_remove);
+ }
+
+ cmux->n_circuits = 0;
+ cmux->n_active_circuits = 0;
+ cmux->n_cells = 0;
+}
+
+/** Reclaim all circuit IDs currently marked as unusable on <b>chan</b> because
+ * of pending destroy cells in <b>cmux</b>.
+ *
+ * This function must be called AFTER circuits are unlinked from the (channel,
+ * circuid-id) map with circuit_unlink_all_from_channel(), but before calling
+ * circuitmux_free().
+ */
+void
+circuitmux_mark_destroyed_circids_usable(circuitmux_t *cmux, channel_t *chan)
+{
+ packed_cell_t *cell;
+ int n_bad = 0;
+ TOR_SIMPLEQ_FOREACH(cell, &cmux->destroy_cell_queue.head, next) {
+ circid_t circid = 0;
+ if (packed_cell_is_destroy(chan, cell, &circid)) {
+ channel_mark_circid_usable(chan, circid);
+ } else {
+ ++n_bad;
+ }
+ }
+ if (n_bad)
+ log_warn(LD_BUG, "%d cell(s) on destroy queue did not look like a "
+ "DESTROY cell.", n_bad);
+}
+
+/**
+ * Free a circuitmux_t; the circuits must be detached first with
+ * circuitmux_detach_all_circuits().
+ */
+
+void
+circuitmux_free(circuitmux_t *cmux)
+{
+ if (!cmux) return;
+
+ tor_assert(cmux->n_circuits == 0);
+ tor_assert(cmux->n_active_circuits == 0);
+
+ /*
+ * Free policy-specific data if we have any; we don't
+ * need to do circuitmux_set_policy(cmux, NULL) to cover
+ * the circuits because they would have been handled in
+ * circuitmux_detach_all_circuits() before this was
+ * called.
+ */
+ if (cmux->policy && cmux->policy->free_cmux_data) {
+ if (cmux->policy_data) {
+ cmux->policy->free_cmux_data(cmux, cmux->policy_data);
+ cmux->policy_data = NULL;
+ }
+ } else tor_assert(cmux->policy_data == NULL);
+
+ if (cmux->chanid_circid_map) {
+ HT_CLEAR(chanid_circid_muxinfo_map, cmux->chanid_circid_map);
+ tor_free(cmux->chanid_circid_map);
+ }
+
+ /*
+ * We're throwing away some destroys; log the counter and
+ * adjust the global counter by the queue size.
+ */
+ if (cmux->destroy_cell_queue.n > 0) {
+ cmux->destroy_ctr -= cmux->destroy_cell_queue.n;
+ global_destroy_ctr -= cmux->destroy_cell_queue.n;
+ log_debug(LD_CIRC,
+ "Freeing cmux at %p with %u queued destroys; the last cmux "
+ "destroy balance was "I64_FORMAT", global is "I64_FORMAT,
+ cmux, cmux->destroy_cell_queue.n,
+ I64_PRINTF_ARG(cmux->destroy_ctr),
+ I64_PRINTF_ARG(global_destroy_ctr));
+ } else {
+ log_debug(LD_CIRC,
+ "Freeing cmux at %p with no queued destroys, the cmux destroy "
+ "balance was "I64_FORMAT", global is "I64_FORMAT,
+ cmux,
+ I64_PRINTF_ARG(cmux->destroy_ctr),
+ I64_PRINTF_ARG(global_destroy_ctr));
+ }
+
+ cell_queue_clear(&cmux->destroy_cell_queue);
+
+ tor_free(cmux);
+}
+
+/*
+ * Circuitmux policy control functions
+ */
+
+/**
+ * Remove any policy installed on cmux; all policy data will be freed and
+ * cmux behavior will revert to the built-in round-robin active_circuits
+ * mechanism.
+ */
+
+void
+circuitmux_clear_policy(circuitmux_t *cmux)
+{
+ tor_assert(cmux);
+
+ /* Internally, this is just setting policy to NULL */
+ if (cmux->policy) {
+ circuitmux_set_policy(cmux, NULL);
+ }
+}
+
+/**
+ * Return the policy currently installed on a circuitmux_t
+ */
+
+const circuitmux_policy_t *
+circuitmux_get_policy(circuitmux_t *cmux)
+{
+ tor_assert(cmux);
+
+ return cmux->policy;
+}
+
+/**
+ * Set policy; allocate for new policy, detach all circuits from old policy
+ * if any, attach them to new policy, and free old policy data.
+ */
+
+void
+circuitmux_set_policy(circuitmux_t *cmux,
+ const circuitmux_policy_t *pol)
+{
+ const circuitmux_policy_t *old_pol = NULL, *new_pol = NULL;
+ circuitmux_policy_data_t *old_pol_data = NULL, *new_pol_data = NULL;
+ chanid_circid_muxinfo_t **i = NULL;
+ channel_t *chan = NULL;
+ uint64_t last_chan_id_searched = 0;
+ circuit_t *circ = NULL;
+
+ tor_assert(cmux);
+
+ /* Set up variables */
+ old_pol = cmux->policy;
+ old_pol_data = cmux->policy_data;
+ new_pol = pol;
+
+ /* Check if this is the trivial case */
+ if (old_pol == new_pol) return;
+
+ /* Allocate data for new policy, if any */
+ if (new_pol && new_pol->alloc_cmux_data) {
+ /*
+ * If alloc_cmux_data is not null, then we expect to get some policy
+ * data. Assert that we also have free_cmux_data so we can free it
+ * when the time comes, and allocate it.
+ */
+ tor_assert(new_pol->free_cmux_data);
+ new_pol_data = new_pol->alloc_cmux_data(cmux);
+ tor_assert(new_pol_data);
+ }
+
+ /* Install new policy and new policy data on cmux */
+ cmux->policy = new_pol;
+ cmux->policy_data = new_pol_data;
+
+ /* Iterate over all circuits, attaching/detaching each one */
+ i = HT_START(chanid_circid_muxinfo_map, cmux->chanid_circid_map);
+ while (i) {
+ /* Assert that this entry isn't NULL */
+ tor_assert(*i);
+
+ /*
+ * Get the channel; since normal case is all circuits on the mux share a
+ * channel, we cache last_chan_id_searched
+ */
+ if (!chan || last_chan_id_searched != (*i)->chan_id) {
+ chan = channel_find_by_global_id((*i)->chan_id);
+ last_chan_id_searched = (*i)->chan_id;
+ }
+ tor_assert(chan);
+
+ /* Get the circuit */
+ circ = circuit_get_by_circid_channel_even_if_marked((*i)->circ_id, chan);
+ tor_assert(circ);
+
+ /* Need to tell old policy it becomes inactive (i.e., it is active) ? */
+ if (old_pol && old_pol->notify_circ_inactive &&
+ (*i)->muxinfo.cell_count > 0) {
+ old_pol->notify_circ_inactive(cmux, old_pol_data, circ,
+ (*i)->muxinfo.policy_data);
+ }
+
+ /* Need to free old policy data? */
+ if ((*i)->muxinfo.policy_data) {
+ /* Assert that we have the means to free it if we have policy data */
+ tor_assert(old_pol);
+ tor_assert(old_pol->free_circ_data);
+ /* Free it */
+ old_pol->free_circ_data(cmux, old_pol_data, circ,
+ (*i)->muxinfo.policy_data);
+ (*i)->muxinfo.policy_data = NULL;
+ }
+
+ /* Need to allocate new policy data? */
+ if (new_pol && new_pol->alloc_circ_data) {
+ /*
+ * If alloc_circ_data is not null, we expect to get some per-circuit
+ * policy data. Assert that we also have free_circ_data so we can
+ * free it when the time comes, and allocate it.
+ */
+ tor_assert(new_pol->free_circ_data);
+ (*i)->muxinfo.policy_data =
+ new_pol->alloc_circ_data(cmux, new_pol_data, circ,
+ (*i)->muxinfo.direction,
+ (*i)->muxinfo.cell_count);
+ }
+
+ /* Need to make active on new policy? */
+ if (new_pol && new_pol->notify_circ_active &&
+ (*i)->muxinfo.cell_count > 0) {
+ new_pol->notify_circ_active(cmux, new_pol_data, circ,
+ (*i)->muxinfo.policy_data);
+ }
+
+ /* Advance to next circuit map entry */
+ i = HT_NEXT(chanid_circid_muxinfo_map, cmux->chanid_circid_map, i);
+ }
+
+ /* Free data for old policy, if any */
+ if (old_pol_data) {
+ /*
+ * If we had old policy data, we should have an old policy and a free
+ * function for it.
+ */
+ tor_assert(old_pol);
+ tor_assert(old_pol->free_cmux_data);
+ old_pol->free_cmux_data(cmux, old_pol_data);
+ old_pol_data = NULL;
+ }
+}
+
+/*
+ * Circuitmux/circuit attachment status inquiry functions
+ */
+
+/**
+ * Query the direction of an attached circuit
+ */
+
+cell_direction_t
+circuitmux_attached_circuit_direction(circuitmux_t *cmux, circuit_t *circ)
+{
+ chanid_circid_muxinfo_t *hashent = NULL;
+
+ /* Try to find a map entry */
+ hashent = circuitmux_find_map_entry(cmux, circ);
+
+ /*
+ * This function should only be called on attached circuits; assert that
+ * we had a map entry.
+ */
+ tor_assert(hashent);
+
+ /* Return the direction from the map entry */
+ return hashent->muxinfo.direction;
+}
+
+/**
+ * Find an entry in the cmux's map for this circuit or return NULL if there
+ * is none.
+ */
+
+static chanid_circid_muxinfo_t *
+circuitmux_find_map_entry(circuitmux_t *cmux, circuit_t *circ)
+{
+ chanid_circid_muxinfo_t search, *hashent = NULL;
+
+ /* Sanity-check parameters */
+ tor_assert(cmux);
+ tor_assert(cmux->chanid_circid_map);
+ tor_assert(circ);
+
+ /* Check if we have n_chan */
+ if (circ->n_chan) {
+ /* Okay, let's see if it's attached for n_chan/n_circ_id */
+ search.chan_id = circ->n_chan->global_identifier;
+ search.circ_id = circ->n_circ_id;
+
+ /* Query */
+ hashent = HT_FIND(chanid_circid_muxinfo_map, cmux->chanid_circid_map,
+ &search);
+ }
+
+ /* Found something? */
+ if (hashent) {
+ /*
+ * Assert that the direction makes sense for a hashent we found by
+ * n_chan/n_circ_id before we return it.
+ */
+ tor_assert(hashent->muxinfo.direction == CELL_DIRECTION_OUT);
+ } else {
+ /* Not there, have we got a p_chan/p_circ_id to try? */
+ if (circ->magic == OR_CIRCUIT_MAGIC) {
+ search.circ_id = TO_OR_CIRCUIT(circ)->p_circ_id;
+ /* Check for p_chan */
+ if (TO_OR_CIRCUIT(circ)->p_chan) {
+ search.chan_id = TO_OR_CIRCUIT(circ)->p_chan->global_identifier;
+ /* Okay, search for that */
+ hashent = HT_FIND(chanid_circid_muxinfo_map, cmux->chanid_circid_map,
+ &search);
+ /* Find anything? */
+ if (hashent) {
+ /* Assert that the direction makes sense before we return it */
+ tor_assert(hashent->muxinfo.direction == CELL_DIRECTION_IN);
+ }
+ }
+ }
+ }
+
+ /* Okay, hashent is it if it was there */
+ return hashent;
+}
+
+/**
+ * Query whether a circuit is attached to a circuitmux
+ */
+
+int
+circuitmux_is_circuit_attached(circuitmux_t *cmux, circuit_t *circ)
+{
+ chanid_circid_muxinfo_t *hashent = NULL;
+
+ /* Look if it's in the circuit map */
+ hashent = circuitmux_find_map_entry(cmux, circ);
+
+ return (hashent != NULL);
+}
+
+/**
+ * Query whether a circuit is active on a circuitmux
+ */
+
+int
+circuitmux_is_circuit_active(circuitmux_t *cmux, circuit_t *circ)
+{
+ chanid_circid_muxinfo_t *hashent = NULL;
+ int is_active = 0;
+
+ tor_assert(cmux);
+ tor_assert(circ);
+
+ /* Look if it's in the circuit map */
+ hashent = circuitmux_find_map_entry(cmux, circ);
+ if (hashent) {
+ /* Check the number of cells on this circuit */
+ is_active = (hashent->muxinfo.cell_count > 0);
+ }
+ /* else not attached, so not active */
+
+ return is_active;
+}
+
+/**
+ * Query number of available cells for a circuit on a circuitmux
+ */
+
+unsigned int
+circuitmux_num_cells_for_circuit(circuitmux_t *cmux, circuit_t *circ)
+{
+ chanid_circid_muxinfo_t *hashent = NULL;
+ unsigned int n_cells = 0;
+
+ tor_assert(cmux);
+ tor_assert(circ);
+
+ /* Look if it's in the circuit map */
+ hashent = circuitmux_find_map_entry(cmux, circ);
+ if (hashent) {
+ /* Just get the cell count for this circuit */
+ n_cells = hashent->muxinfo.cell_count;
+ }
+ /* else not attached, so 0 cells */
+
+ return n_cells;
+}
+
+/**
+ * Query total number of available cells on a circuitmux
+ */
+
+unsigned int
+circuitmux_num_cells(circuitmux_t *cmux)
+{
+ tor_assert(cmux);
+
+ return cmux->n_cells + cmux->destroy_cell_queue.n;
+}
+
+/**
+ * Query total number of circuits active on a circuitmux
+ */
+
+unsigned int
+circuitmux_num_active_circuits(circuitmux_t *cmux)
+{
+ tor_assert(cmux);
+
+ return cmux->n_active_circuits;
+}
+
+/**
+ * Query total number of circuits attached to a circuitmux
+ */
+
+unsigned int
+circuitmux_num_circuits(circuitmux_t *cmux)
+{
+ tor_assert(cmux);
+
+ return cmux->n_circuits;
+}
+
+/*
+ * Functions for circuit code to call to update circuit status
+ */
+
+/**
+ * Attach a circuit to a circuitmux, for the specified direction.
+ */
+
+MOCK_IMPL(void,
+circuitmux_attach_circuit,(circuitmux_t *cmux, circuit_t *circ,
+ cell_direction_t direction))
+{
+ channel_t *chan = NULL;
+ uint64_t channel_id;
+ circid_t circ_id;
+ chanid_circid_muxinfo_t search, *hashent = NULL;
+ unsigned int cell_count;
+
+ tor_assert(cmux);
+ tor_assert(circ);
+ tor_assert(direction == CELL_DIRECTION_IN ||
+ direction == CELL_DIRECTION_OUT);
+ circuitmux_assert_okay_paranoid(cmux);
+
+ /*
+ * Figure out which channel we're using, and get the circuit's current
+ * cell count and circuit ID; assert that the circuit is not already
+ * attached to another mux.
+ */
+ if (direction == CELL_DIRECTION_OUT) {
+ /* It's n_chan */
+ chan = circ->n_chan;
+ cell_count = circ->n_chan_cells.n;
+ circ_id = circ->n_circ_id;
+ } else {
+ /* We want p_chan */
+ chan = TO_OR_CIRCUIT(circ)->p_chan;
+ cell_count = TO_OR_CIRCUIT(circ)->p_chan_cells.n;
+ circ_id = TO_OR_CIRCUIT(circ)->p_circ_id;
+ }
+ /* Assert that we did get a channel */
+ tor_assert(chan);
+ /* Assert that the circuit ID is sensible */
+ tor_assert(circ_id != 0);
+
+ /* Get the channel ID */
+ channel_id = chan->global_identifier;
+
+ /* See if we already have this one */
+ search.chan_id = channel_id;
+ search.circ_id = circ_id;
+ hashent = HT_FIND(chanid_circid_muxinfo_map, cmux->chanid_circid_map,
+ &search);
+
+ if (hashent) {
+ /*
+ * This circuit was already attached to this cmux; make sure the
+ * directions match and update the cell count and active circuit count.
+ */
+ log_info(LD_CIRC,
+ "Circuit %u on channel " U64_FORMAT " was already attached to "
+ "cmux %p (trying to attach to %p)",
+ (unsigned)circ_id, U64_PRINTF_ARG(channel_id),
+ ((direction == CELL_DIRECTION_OUT) ?
+ circ->n_mux : TO_OR_CIRCUIT(circ)->p_mux),
+ cmux);
+
+ /*
+ * The mux pointer on this circuit and the direction in result should
+ * match; otherwise assert.
+ */
+ if (direction == CELL_DIRECTION_OUT) tor_assert(circ->n_mux == cmux);
+ else tor_assert(TO_OR_CIRCUIT(circ)->p_mux == cmux);
+ tor_assert(hashent->muxinfo.direction == direction);
+
+ /*
+ * Looks okay; just update the cell count and active circuits if we must
+ */
+ if (hashent->muxinfo.cell_count > 0 && cell_count == 0) {
+ --(cmux->n_active_circuits);
+ circuitmux_make_circuit_inactive(cmux, circ, direction);
+ } else if (hashent->muxinfo.cell_count == 0 && cell_count > 0) {
+ ++(cmux->n_active_circuits);
+ circuitmux_make_circuit_active(cmux, circ, direction);
+ }
+ cmux->n_cells -= hashent->muxinfo.cell_count;
+ cmux->n_cells += cell_count;
+ hashent->muxinfo.cell_count = cell_count;
+ } else {
+ /*
+ * New circuit; add an entry and update the circuit/active circuit
+ * counts.
+ */
+ log_debug(LD_CIRC,
+ "Attaching circuit %u on channel " U64_FORMAT " to cmux %p",
+ (unsigned)circ_id, U64_PRINTF_ARG(channel_id), cmux);
+
+ /*
+ * Assert that the circuit doesn't already have a mux for this
+ * direction.
+ */
+ if (direction == CELL_DIRECTION_OUT) tor_assert(circ->n_mux == NULL);
+ else tor_assert(TO_OR_CIRCUIT(circ)->p_mux == NULL);
+
+ /* Insert it in the map */
+ hashent = tor_malloc_zero(sizeof(*hashent));
+ hashent->chan_id = channel_id;
+ hashent->circ_id = circ_id;
+ hashent->muxinfo.cell_count = cell_count;
+ hashent->muxinfo.direction = direction;
+ /* Allocate policy specific circuit data if we need it */
+ if (cmux->policy && cmux->policy->alloc_circ_data) {
+ /* Assert that we have the means to free policy-specific data */
+ tor_assert(cmux->policy->free_circ_data);
+ /* Allocate it */
+ hashent->muxinfo.policy_data =
+ cmux->policy->alloc_circ_data(cmux,
+ cmux->policy_data,
+ circ,
+ direction,
+ cell_count);
+ /* If we wanted policy data, it's an error not to get any */
+ tor_assert(hashent->muxinfo.policy_data);
+ }
+ HT_INSERT(chanid_circid_muxinfo_map, cmux->chanid_circid_map,
+ hashent);
+
+ /* Set the circuit's mux for this direction */
+ if (direction == CELL_DIRECTION_OUT) circ->n_mux = cmux;
+ else TO_OR_CIRCUIT(circ)->p_mux = cmux;
+
+ /* Make sure the next/prev pointers are NULL */
+ if (direction == CELL_DIRECTION_OUT) {
+ circ->next_active_on_n_chan = NULL;
+ circ->prev_active_on_n_chan = NULL;
+ } else {
+ TO_OR_CIRCUIT(circ)->next_active_on_p_chan = NULL;
+ TO_OR_CIRCUIT(circ)->prev_active_on_p_chan = NULL;
+ }
+
+ /* Update counters */
+ ++(cmux->n_circuits);
+ if (cell_count > 0) {
+ ++(cmux->n_active_circuits);
+ circuitmux_make_circuit_active(cmux, circ, direction);
+ }
+ cmux->n_cells += cell_count;
+ }
+
+ circuitmux_assert_okay_paranoid(cmux);
+}
+
+/**
+ * Detach a circuit from a circuitmux and update all counters as needed;
+ * no-op if not attached.
+ */
+
+MOCK_IMPL(void,
+circuitmux_detach_circuit,(circuitmux_t *cmux, circuit_t *circ))
+{
+ chanid_circid_muxinfo_t search, *hashent = NULL;
+ /*
+ * Use this to keep track of whether we found it for n_chan or
+ * p_chan for consistency checking.
+ */
+ cell_direction_t last_searched_direction;
+
+ tor_assert(cmux);
+ tor_assert(cmux->chanid_circid_map);
+ tor_assert(circ);
+ circuitmux_assert_okay_paranoid(cmux);
+
+ /* See if we have it for n_chan/n_circ_id */
+ if (circ->n_chan) {
+ search.chan_id = circ->n_chan->global_identifier;
+ search.circ_id = circ->n_circ_id;
+ hashent = HT_FIND(chanid_circid_muxinfo_map, cmux->chanid_circid_map,
+ &search);
+ last_searched_direction = CELL_DIRECTION_OUT;
+ }
+
+ /* Got one? If not, see if it's an or_circuit_t and try p_chan/p_circ_id */
+ if (!hashent) {
+ if (circ->magic == OR_CIRCUIT_MAGIC) {
+ search.circ_id = TO_OR_CIRCUIT(circ)->p_circ_id;
+ if (TO_OR_CIRCUIT(circ)->p_chan) {
+ search.chan_id = TO_OR_CIRCUIT(circ)->p_chan->global_identifier;
+ hashent = HT_FIND(chanid_circid_muxinfo_map,
+ cmux->chanid_circid_map,
+ &search);
+ last_searched_direction = CELL_DIRECTION_IN;
+ }
+ }
+ }
+
+ /*
+ * If hashent isn't NULL, we have a circuit to detach; don't remove it from
+ * the map until later of circuitmux_make_circuit_inactive() breaks.
+ */
+ if (hashent) {
+ /* Update counters */
+ --(cmux->n_circuits);
+ if (hashent->muxinfo.cell_count > 0) {
+ --(cmux->n_active_circuits);
+ /* This does policy notifies, so comes before freeing policy data */
+ circuitmux_make_circuit_inactive(cmux, circ, last_searched_direction);
+ }
+ cmux->n_cells -= hashent->muxinfo.cell_count;
+
+ /* Free policy-specific data if we have it */
+ if (hashent->muxinfo.policy_data) {
+ /* If we have policy data, assert that we have the means to free it */
+ tor_assert(cmux->policy);
+ tor_assert(cmux->policy->free_circ_data);
+ /* Call free_circ_data() */
+ cmux->policy->free_circ_data(cmux,
+ cmux->policy_data,
+ circ,
+ hashent->muxinfo.policy_data);
+ hashent->muxinfo.policy_data = NULL;
+ }
+
+ /* Consistency check: the direction must match the direction searched */
+ tor_assert(last_searched_direction == hashent->muxinfo.direction);
+ /* Clear the circuit's mux for this direction */
+ if (last_searched_direction == CELL_DIRECTION_OUT) circ->n_mux = NULL;
+ else TO_OR_CIRCUIT(circ)->p_mux = NULL;
+
+ /* Now remove it from the map */
+ HT_REMOVE(chanid_circid_muxinfo_map, cmux->chanid_circid_map, hashent);
+
+ /* Free the hash entry */
+ tor_free(hashent);
+ }
+
+ circuitmux_assert_okay_paranoid(cmux);
+}
+
+/**
+ * Make a circuit active; update active list and policy-specific info, but
+ * we don't mess with the counters or hash table here.
+ */
+
+static void
+circuitmux_make_circuit_active(circuitmux_t *cmux, circuit_t *circ,
+ cell_direction_t direction)
+{
+ circuit_t **next_active = NULL, **prev_active = NULL, **next_prev = NULL;
+ circuitmux_t *circuit_cmux = NULL;
+ chanid_circid_muxinfo_t *hashent = NULL;
+ channel_t *chan = NULL;
+ circid_t circ_id;
+ int already_active;
+
+ tor_assert(cmux);
+ tor_assert(circ);
+ tor_assert(direction == CELL_DIRECTION_OUT ||
+ direction == CELL_DIRECTION_IN);
+ /*
+ * Don't circuitmux_assert_okay_paranoid(cmux) here because the cell count
+ * already got changed and we have to update the list for it to be consistent
+ * again.
+ */
+
+ /* Get the right set of active list links for this direction */
+ if (direction == CELL_DIRECTION_OUT) {
+ next_active = &(circ->next_active_on_n_chan);
+ prev_active = &(circ->prev_active_on_n_chan);
+ circuit_cmux = circ->n_mux;
+ chan = circ->n_chan;
+ circ_id = circ->n_circ_id;
+ } else {
+ next_active = &(TO_OR_CIRCUIT(circ)->next_active_on_p_chan);
+ prev_active = &(TO_OR_CIRCUIT(circ)->prev_active_on_p_chan);
+ circuit_cmux = TO_OR_CIRCUIT(circ)->p_mux;
+ chan = TO_OR_CIRCUIT(circ)->p_chan;
+ circ_id = TO_OR_CIRCUIT(circ)->p_circ_id;
+ }
+
+ /* Assert that it is attached to this mux and a channel */
+ tor_assert(cmux == circuit_cmux);
+ tor_assert(chan != NULL);
+
+ /*
+ * Check if the circuit really was inactive; if it's active, at least one
+ * of the next_active and prev_active pointers will not be NULL, or this
+ * circuit will be either the head or tail of the list for this cmux.
+ */
+ already_active = (*prev_active != NULL || *next_active != NULL ||
+ cmux->active_circuits_head == circ ||
+ cmux->active_circuits_tail == circ);
+
+ /* If we're already active, log a warning and finish */
+ if (already_active) {
+ log_warn(LD_CIRC,
+ "Circuit %u on channel " U64_FORMAT " was already active",
+ (unsigned)circ_id, U64_PRINTF_ARG(chan->global_identifier));
+ return;
+ }
+
+ /*
+ * This is going at the head of the list; if the old head is not NULL,
+ * then its prev pointer should point to this.
+ */
+ *next_active = cmux->active_circuits_head; /* Next is old head */
+ *prev_active = NULL; /* Prev is NULL (this will be the head) */
+ if (cmux->active_circuits_head) {
+ /* The list had an old head; update its prev pointer */
+ next_prev =
+ circuitmux_prev_active_circ_p(cmux, cmux->active_circuits_head);
+ tor_assert(next_prev);
+ *next_prev = circ;
+ } else {
+ /* The list was empty; this becomes the tail as well */
+ cmux->active_circuits_tail = circ;
+ }
+ /* This becomes the new head of the list */
+ cmux->active_circuits_head = circ;
+
+ /* Policy-specific notification */
+ if (cmux->policy &&
+ cmux->policy->notify_circ_active) {
+ /* Okay, we need to check the circuit for policy data now */
+ hashent = circuitmux_find_map_entry(cmux, circ);
+ /* We should have found something */
+ tor_assert(hashent);
+ /* Notify */
+ cmux->policy->notify_circ_active(cmux, cmux->policy_data,
+ circ, hashent->muxinfo.policy_data);
+ }
+
+ circuitmux_assert_okay_paranoid(cmux);
+}
+
+/**
+ * Make a circuit inactive; update active list and policy-specific info, but
+ * we don't mess with the counters or hash table here.
+ */
+
+static void
+circuitmux_make_circuit_inactive(circuitmux_t *cmux, circuit_t *circ,
+ cell_direction_t direction)
+{
+ circuit_t **next_active = NULL, **prev_active = NULL;
+ circuit_t **next_prev = NULL, **prev_next = NULL;
+ circuitmux_t *circuit_cmux = NULL;
+ chanid_circid_muxinfo_t *hashent = NULL;
+ channel_t *chan = NULL;
+ circid_t circ_id;
+ int already_inactive;
+
+ tor_assert(cmux);
+ tor_assert(circ);
+ tor_assert(direction == CELL_DIRECTION_OUT ||
+ direction == CELL_DIRECTION_IN);
+ /*
+ * Don't circuitmux_assert_okay_paranoid(cmux) here because the cell count
+ * already got changed and we have to update the list for it to be consistent
+ * again.
+ */
+
+ /* Get the right set of active list links for this direction */
+ if (direction == CELL_DIRECTION_OUT) {
+ next_active = &(circ->next_active_on_n_chan);
+ prev_active = &(circ->prev_active_on_n_chan);
+ circuit_cmux = circ->n_mux;
+ chan = circ->n_chan;
+ circ_id = circ->n_circ_id;
+ } else {
+ next_active = &(TO_OR_CIRCUIT(circ)->next_active_on_p_chan);
+ prev_active = &(TO_OR_CIRCUIT(circ)->prev_active_on_p_chan);
+ circuit_cmux = TO_OR_CIRCUIT(circ)->p_mux;
+ chan = TO_OR_CIRCUIT(circ)->p_chan;
+ circ_id = TO_OR_CIRCUIT(circ)->p_circ_id;
+ }
+
+ /* Assert that it is attached to this mux and a channel */
+ tor_assert(cmux == circuit_cmux);
+ tor_assert(chan != NULL);
+
+ /*
+ * Check if the circuit really was active; if it's inactive, the
+ * next_active and prev_active pointers will be NULL and this circuit
+ * will not be the head or tail of the list for this cmux.
+ */
+ already_inactive = (*prev_active == NULL && *next_active == NULL &&
+ cmux->active_circuits_head != circ &&
+ cmux->active_circuits_tail != circ);
+
+ /* If we're already inactive, log a warning and finish */
+ if (already_inactive) {
+ log_warn(LD_CIRC,
+ "Circuit %d on channel " U64_FORMAT " was already inactive",
+ (unsigned)circ_id, U64_PRINTF_ARG(chan->global_identifier));
+ return;
+ }
+
+ /* Remove from the list; first get next_prev and prev_next */
+ if (*next_active) {
+ /*
+ * If there's a next circuit, its previous circuit becomes this
+ * circuit's previous circuit.
+ */
+ next_prev = circuitmux_prev_active_circ_p(cmux, *next_active);
+ } else {
+ /* Else, the tail becomes this circuit's previous circuit */
+ next_prev = &(cmux->active_circuits_tail);
+ }
+
+ /* Got next_prev, now prev_next */
+ if (*prev_active) {
+ /*
+ * If there's a previous circuit, its next circuit becomes this circuit's
+ * next circuit.
+ */
+ prev_next = circuitmux_next_active_circ_p(cmux, *prev_active);
+ } else {
+ /* Else, the head becomes this circuit's next circuit */
+ prev_next = &(cmux->active_circuits_head);
+ }
+
+ /* Assert that we got sensible values for the next/prev pointers */
+ tor_assert(next_prev != NULL);
+ tor_assert(prev_next != NULL);
+
+ /* Update the next/prev pointers - this removes circ from the list */
+ *next_prev = *prev_active;
+ *prev_next = *next_active;
+
+ /* Now null out prev_active/next_active */
+ *prev_active = NULL;
+ *next_active = NULL;
+
+ /* Policy-specific notification */
+ if (cmux->policy &&
+ cmux->policy->notify_circ_inactive) {
+ /* Okay, we need to check the circuit for policy data now */
+ hashent = circuitmux_find_map_entry(cmux, circ);
+ /* We should have found something */
+ tor_assert(hashent);
+ /* Notify */
+ cmux->policy->notify_circ_inactive(cmux, cmux->policy_data,
+ circ, hashent->muxinfo.policy_data);
+ }
+
+ circuitmux_assert_okay_paranoid(cmux);
+}
+
+/**
+ * Clear the cell counter for a circuit on a circuitmux
+ */
+
+void
+circuitmux_clear_num_cells(circuitmux_t *cmux, circuit_t *circ)
+{
+ /* This is the same as setting the cell count to zero */
+ circuitmux_set_num_cells(cmux, circ, 0);
+}
+
+/**
+ * Set the cell counter for a circuit on a circuitmux
+ */
+
+void
+circuitmux_set_num_cells(circuitmux_t *cmux, circuit_t *circ,
+ unsigned int n_cells)
+{
+ chanid_circid_muxinfo_t *hashent = NULL;
+
+ tor_assert(cmux);
+ tor_assert(circ);
+
+ circuitmux_assert_okay_paranoid(cmux);
+
+ /* Search for this circuit's entry */
+ hashent = circuitmux_find_map_entry(cmux, circ);
+ /* Assert that we found one */
+ tor_assert(hashent);
+
+ /* Update cmux cell counter */
+ cmux->n_cells -= hashent->muxinfo.cell_count;
+ cmux->n_cells += n_cells;
+
+ /* Do we need to notify a cmux policy? */
+ if (cmux->policy && cmux->policy->notify_set_n_cells) {
+ /* Call notify_set_n_cells */
+ cmux->policy->notify_set_n_cells(cmux,
+ cmux->policy_data,
+ circ,
+ hashent->muxinfo.policy_data,
+ n_cells);
+ }
+
+ /*
+ * Update cmux active circuit counter: is the old cell count > 0 and the
+ * new cell count == 0 ?
+ */
+ if (hashent->muxinfo.cell_count > 0 && n_cells == 0) {
+ --(cmux->n_active_circuits);
+ hashent->muxinfo.cell_count = n_cells;
+ circuitmux_make_circuit_inactive(cmux, circ, hashent->muxinfo.direction);
+ /* Is the old cell count == 0 and the new cell count > 0 ? */
+ } else if (hashent->muxinfo.cell_count == 0 && n_cells > 0) {
+ ++(cmux->n_active_circuits);
+ hashent->muxinfo.cell_count = n_cells;
+ circuitmux_make_circuit_active(cmux, circ, hashent->muxinfo.direction);
+ } else {
+ /*
+ * Update the entry cell count like this so we can put a
+ * circuitmux_assert_okay_paranoid inside make_circuit_(in)active() too.
+ */
+ hashent->muxinfo.cell_count = n_cells;
+ }
+
+ circuitmux_assert_okay_paranoid(cmux);
+}
+
+/*
+ * Functions for channel code to call to get a circuit to transmit from or
+ * notify that cells have been transmitted.
+ */
+
+/**
+ * Pick a circuit to send from, using the active circuits list or a
+ * circuitmux policy if one is available. This is called from channel.c.
+ *
+ * If we would rather send a destroy cell, return NULL and set
+ * *<b>destroy_queue_out</b> to the destroy queue.
+ *
+ * If we have nothing to send, set *<b>destroy_queue_out</b> to NULL and
+ * return NULL.
+ */
+
+circuit_t *
+circuitmux_get_first_active_circuit(circuitmux_t *cmux,
+ cell_queue_t **destroy_queue_out)
+{
+ circuit_t *circ = NULL;
+
+ tor_assert(cmux);
+ tor_assert(destroy_queue_out);
+
+ *destroy_queue_out = NULL;
+
+ if (cmux->destroy_cell_queue.n &&
+ (!cmux->last_cell_was_destroy || cmux->n_active_circuits == 0)) {
+ /* We have destroy cells to send, and either we just sent a relay cell,
+ * or we have no relay cells to send. */
+
+ /* XXXX We should let the cmux policy have some say in this eventually. */
+ /* XXXX Alternating is not a terribly brilliant approach here. */
+ *destroy_queue_out = &cmux->destroy_cell_queue;
+
+ cmux->last_cell_was_destroy = 1;
+ } else if (cmux->n_active_circuits > 0) {
+ /* We also must have a cell available for this to be the case */
+ tor_assert(cmux->n_cells > 0);
+ /* Do we have a policy-provided circuit selector? */
+ if (cmux->policy && cmux->policy->pick_active_circuit) {
+ circ = cmux->policy->pick_active_circuit(cmux, cmux->policy_data);
+ }
+ /* Fall back on the head of the active circuits list */
+ if (!circ) {
+ tor_assert(cmux->active_circuits_head);
+ circ = cmux->active_circuits_head;
+ }
+ cmux->last_cell_was_destroy = 0;
+ } else {
+ tor_assert(cmux->n_cells == 0);
+ tor_assert(cmux->destroy_cell_queue.n == 0);
+ }
+
+ return circ;
+}
+
+/**
+ * Notify the circuitmux that cells have been sent on a circuit; this
+ * is called from channel.c.
+ */
+
+void
+circuitmux_notify_xmit_cells(circuitmux_t *cmux, circuit_t *circ,
+ unsigned int n_cells)
+{
+ chanid_circid_muxinfo_t *hashent = NULL;
+ int becomes_inactive = 0;
+
+ tor_assert(cmux);
+ tor_assert(circ);
+ circuitmux_assert_okay_paranoid(cmux);
+
+ if (n_cells == 0) return;
+
+ /*
+ * To handle this, we have to:
+ *
+ * 1.) Adjust the circuit's cell counter in the cmux hash table
+ * 2.) Move the circuit to the tail of the active_circuits linked list
+ * for this cmux, or make the circuit inactive if the cell count
+ * went to zero.
+ * 3.) Call cmux->policy->notify_xmit_cells(), if any
+ */
+
+ /* Find the hash entry */
+ hashent = circuitmux_find_map_entry(cmux, circ);
+ /* Assert that we found one */
+ tor_assert(hashent);
+
+ /* Adjust the cell counter and assert that we had that many cells to send */
+ tor_assert(n_cells <= hashent->muxinfo.cell_count);
+ hashent->muxinfo.cell_count -= n_cells;
+ /* Do we need to make the circuit inactive? */
+ if (hashent->muxinfo.cell_count == 0) becomes_inactive = 1;
+ /* Adjust the mux cell counter */
+ cmux->n_cells -= n_cells;
+
+ /* If we aren't making it inactive later, move it to the tail of the list */
+ if (!becomes_inactive) {
+ circuitmux_move_active_circ_to_tail(cmux, circ,
+ hashent->muxinfo.direction);
+ }
+
+ /*
+ * We call notify_xmit_cells() before making the circuit inactive if needed,
+ * so the policy can always count on this coming in on an active circuit.
+ */
+ if (cmux->policy && cmux->policy->notify_xmit_cells) {
+ cmux->policy->notify_xmit_cells(cmux, cmux->policy_data, circ,
+ hashent->muxinfo.policy_data,
+ n_cells);
+ }
+
+ /*
+ * Now make the circuit inactive if needed; this will call the policy's
+ * notify_circ_inactive() if present.
+ */
+ if (becomes_inactive) {
+ --(cmux->n_active_circuits);
+ circuitmux_make_circuit_inactive(cmux, circ, hashent->muxinfo.direction);
+ }
+
+ circuitmux_assert_okay_paranoid(cmux);
+}
+
+/**
+ * Notify the circuitmux that a destroy was sent, so we can update
+ * the counter.
+ */
+
+void
+circuitmux_notify_xmit_destroy(circuitmux_t *cmux)
+{
+ tor_assert(cmux);
+
+ --(cmux->destroy_ctr);
+ --(global_destroy_ctr);
+ log_debug(LD_CIRC,
+ "Cmux at %p sent a destroy, cmux counter is now "I64_FORMAT", "
+ "global counter is now "I64_FORMAT,
+ cmux,
+ I64_PRINTF_ARG(cmux->destroy_ctr),
+ I64_PRINTF_ARG(global_destroy_ctr));
+}
+
+/*
+ * Circuitmux consistency checking assertions
+ */
+
+/**
+ * Check that circuitmux data structures are consistent and fail with an
+ * assert if not.
+ */
+
+void
+circuitmux_assert_okay(circuitmux_t *cmux)
+{
+ tor_assert(cmux);
+
+ /*
+ * Pass 1: iterate the hash table; for each entry:
+ * a) Check that the circuit has this cmux for n_mux or p_mux
+ * b) If the cell_count is > 0, set the mark bit; otherwise clear it
+ * c) Also check activeness (cell_count > 0 should be active)
+ * d) Count the number of circuits, active circuits and queued cells
+ * and at the end check that they match the counters in the cmux.
+ *
+ * Pass 2: iterate the active circuits list; for each entry,
+ * make sure the circuit is attached to this mux and appears
+ * in the hash table. Make sure the mark bit is 1, and clear
+ * it in the hash table entry. Consistency-check the linked
+ * list pointers.
+ *
+ * Pass 3: iterate the hash table again; assert if any active circuits
+ * (mark bit set to 1) are discovered that weren't cleared in pass 2
+ * (don't appear in the linked list).
+ */
+
+ circuitmux_assert_okay_pass_one(cmux);
+ circuitmux_assert_okay_pass_two(cmux);
+ circuitmux_assert_okay_pass_three(cmux);
+}
+
+/**
+ * Do the first pass of circuitmux_assert_okay(); see the comment in that
+ * function.
+ */
+
+static void
+circuitmux_assert_okay_pass_one(circuitmux_t *cmux)
+{
+ chanid_circid_muxinfo_t **i = NULL;
+ uint64_t chan_id;
+ channel_t *chan;
+ circid_t circ_id;
+ circuit_t *circ;
+ or_circuit_t *or_circ;
+ unsigned int circ_is_active;
+ circuit_t **next_p, **prev_p;
+ unsigned int n_circuits, n_active_circuits, n_cells;
+
+ tor_assert(cmux);
+ tor_assert(cmux->chanid_circid_map);
+
+ /* Reset the counters */
+ n_circuits = n_active_circuits = n_cells = 0;
+ /* Start iterating the hash table */
+ i = HT_START(chanid_circid_muxinfo_map, cmux->chanid_circid_map);
+ while (i) {
+ /* Assert that the hash table entry isn't null */
+ tor_assert(*i);
+
+ /* Get the channel and circuit id */
+ chan_id = (*i)->chan_id;
+ circ_id = (*i)->circ_id;
+
+ /* Find the channel and circuit, assert that they exist */
+ chan = channel_find_by_global_id(chan_id);
+ tor_assert(chan);
+ circ = circuit_get_by_circid_channel_even_if_marked(circ_id, chan);
+ tor_assert(circ);
+ /* Clear the circ_is_active bit to start */
+ circ_is_active = 0;
+
+ /* Assert that we know which direction this is going */
+ tor_assert((*i)->muxinfo.direction == CELL_DIRECTION_OUT ||
+ (*i)->muxinfo.direction == CELL_DIRECTION_IN);
+
+ if ((*i)->muxinfo.direction == CELL_DIRECTION_OUT) {
+ /* We should be n_mux on this circuit */
+ tor_assert(cmux == circ->n_mux);
+ tor_assert(chan == circ->n_chan);
+ /* Get next and prev for next test */
+ next_p = &(circ->next_active_on_n_chan);
+ prev_p = &(circ->prev_active_on_n_chan);
+ } else {
+ /* This should be an or_circuit_t and we should be p_mux */
+ or_circ = TO_OR_CIRCUIT(circ);
+ tor_assert(cmux == or_circ->p_mux);
+ tor_assert(chan == or_circ->p_chan);
+ /* Get next and prev for next test */
+ next_p = &(or_circ->next_active_on_p_chan);
+ prev_p = &(or_circ->prev_active_on_p_chan);
+ }
+
+ /*
+ * Should this circuit be active? I.e., does the mux know about > 0
+ * cells on it?
+ */
+ circ_is_active = ((*i)->muxinfo.cell_count > 0);
+
+ /* It should be in the linked list iff it's active */
+ if (circ_is_active) {
+ /* Either we have a next link or we are the tail */
+ tor_assert(*next_p || (circ == cmux->active_circuits_tail));
+ /* Either we have a prev link or we are the head */
+ tor_assert(*prev_p || (circ == cmux->active_circuits_head));
+ /* Increment the active circuits counter */
+ ++n_active_circuits;
+ } else {
+ /* Shouldn't be in list, so no next or prev link */
+ tor_assert(!(*next_p));
+ tor_assert(!(*prev_p));
+ /* And can't be head or tail */
+ tor_assert(circ != cmux->active_circuits_head);
+ tor_assert(circ != cmux->active_circuits_tail);
+ }
+
+ /* Increment the circuits counter */
+ ++n_circuits;
+ /* Adjust the cell counter */
+ n_cells += (*i)->muxinfo.cell_count;
+
+ /* Set the mark bit to circ_is_active */
+ (*i)->muxinfo.mark = circ_is_active;
+
+ /* Advance to the next entry */
+ i = HT_NEXT(chanid_circid_muxinfo_map, cmux->chanid_circid_map, i);
+ }
+
+ /* Now check the counters */
+ tor_assert(n_cells == cmux->n_cells);
+ tor_assert(n_circuits == cmux->n_circuits);
+ tor_assert(n_active_circuits == cmux->n_active_circuits);
+}
+
+/**
+ * Do the second pass of circuitmux_assert_okay(); see the comment in that
+ * function.
+ */
+
+static void
+circuitmux_assert_okay_pass_two(circuitmux_t *cmux)
+{
+ circuit_t *curr_circ, *prev_circ = NULL, *next_circ;
+ or_circuit_t *curr_or_circ;
+ uint64_t curr_chan_id;
+ circid_t curr_circ_id;
+ circuit_t **next_p, **prev_p;
+ channel_t *chan;
+ unsigned int n_active_circuits = 0;
+ cell_direction_t direction;
+ chanid_circid_muxinfo_t search, *hashent = NULL;
+
+ tor_assert(cmux);
+ tor_assert(cmux->chanid_circid_map);
+
+ /*
+ * Walk the linked list of active circuits in cmux; keep track of the
+ * previous circuit seen for consistency checking purposes. Count them
+ * to make sure the number in the linked list matches
+ * cmux->n_active_circuits.
+ */
+ curr_circ = cmux->active_circuits_head;
+ while (curr_circ) {
+ /* Reset some things */
+ chan = NULL;
+ curr_or_circ = NULL;
+ next_circ = NULL;
+ next_p = prev_p = NULL;
+ direction = 0;
+
+ /* Figure out if this is n_mux or p_mux */
+ if (cmux == curr_circ->n_mux) {
+ /* Get next_p and prev_p */
+ next_p = &(curr_circ->next_active_on_n_chan);
+ prev_p = &(curr_circ->prev_active_on_n_chan);
+ /* Get the channel */
+ chan = curr_circ->n_chan;
+ /* Get the circuit id */
+ curr_circ_id = curr_circ->n_circ_id;
+ /* Remember the direction */
+ direction = CELL_DIRECTION_OUT;
+ } else {
+ /* We must be p_mux and this must be an or_circuit_t */
+ curr_or_circ = TO_OR_CIRCUIT(curr_circ);
+ tor_assert(cmux == curr_or_circ->p_mux);
+ /* Get next_p and prev_p */
+ next_p = &(curr_or_circ->next_active_on_p_chan);
+ prev_p = &(curr_or_circ->prev_active_on_p_chan);
+ /* Get the channel */
+ chan = curr_or_circ->p_chan;
+ /* Get the circuit id */
+ curr_circ_id = curr_or_circ->p_circ_id;
+ /* Remember the direction */
+ direction = CELL_DIRECTION_IN;
+ }
+
+ /* Assert that we got a channel and get the channel ID */
+ tor_assert(chan);
+ curr_chan_id = chan->global_identifier;
+
+ /* Assert that prev_p points to last circuit we saw */
+ tor_assert(*prev_p == prev_circ);
+ /* If that's NULL, assert that we are the head */
+ if (!(*prev_p)) tor_assert(curr_circ == cmux->active_circuits_head);
+
+ /* Get the next circuit */
+ next_circ = *next_p;
+ /* If it's NULL, assert that we are the tail */
+ if (!(*next_p)) tor_assert(curr_circ == cmux->active_circuits_tail);
+
+ /* Now find the hash table entry for this circuit */
+ search.chan_id = curr_chan_id;
+ search.circ_id = curr_circ_id;
+ hashent = HT_FIND(chanid_circid_muxinfo_map, cmux->chanid_circid_map,
+ &search);
+
+ /* Assert that we have one */
+ tor_assert(hashent);
+
+ /* Assert that the direction matches */
+ tor_assert(direction == hashent->muxinfo.direction);
+
+ /* Assert that the hash entry got marked in pass one */
+ tor_assert(hashent->muxinfo.mark);
+
+ /* Clear the mark */
+ hashent->muxinfo.mark = 0;
+
+ /* Increment the counter */
+ ++n_active_circuits;
+
+ /* Advance to the next active circuit and update prev_circ */
+ prev_circ = curr_circ;
+ curr_circ = next_circ;
+ }
+
+ /* Assert that the counter matches the cmux */
+ tor_assert(n_active_circuits == cmux->n_active_circuits);
+}
+
+/**
+ * Do the third pass of circuitmux_assert_okay(); see the comment in that
+ * function.
+ */
+
+static void
+circuitmux_assert_okay_pass_three(circuitmux_t *cmux)
+{
+ chanid_circid_muxinfo_t **i = NULL;
+
+ tor_assert(cmux);
+ tor_assert(cmux->chanid_circid_map);
+
+ /* Start iterating the hash table */
+ i = HT_START(chanid_circid_muxinfo_map, cmux->chanid_circid_map);
+
+ /* Advance through each entry */
+ while (i) {
+ /* Assert that it isn't null */
+ tor_assert(*i);
+
+ /*
+ * Assert that this entry is not marked - i.e., that either we didn't
+ * think it should be active in pass one or we saw it in the active
+ * circuits linked list.
+ */
+ tor_assert(!((*i)->muxinfo.mark));
+
+ /* Advance to the next entry */
+ i = HT_NEXT(chanid_circid_muxinfo_map, cmux->chanid_circid_map, i);
+ }
+}
+
+/*DOCDOC */
+void
+circuitmux_append_destroy_cell(channel_t *chan,
+ circuitmux_t *cmux,
+ circid_t circ_id,
+ uint8_t reason)
+{
+ cell_t cell;
+ memset(&cell, 0, sizeof(cell_t));
+ cell.circ_id = circ_id;
+ cell.command = CELL_DESTROY;
+ cell.payload[0] = (uint8_t) reason;
+
+ cell_queue_append_packed_copy(NULL, &cmux->destroy_cell_queue, 0, &cell,
+ chan->wide_circ_ids, 0);
+
+ /* Destroy entering the queue, update counters */
+ ++(cmux->destroy_ctr);
+ ++global_destroy_ctr;
+ log_debug(LD_CIRC,
+ "Cmux at %p queued a destroy for circ %u, cmux counter is now "
+ I64_FORMAT", global counter is now "I64_FORMAT,
+ cmux, circ_id,
+ I64_PRINTF_ARG(cmux->destroy_ctr),
+ I64_PRINTF_ARG(global_destroy_ctr));
+
+ /* XXXX Duplicate code from append_cell_to_circuit_queue */
+ if (!channel_has_queued_writes(chan)) {
+ /* There is no data at all waiting to be sent on the outbuf. Add a
+ * cell, so that we can notice when it gets flushed, flushed_some can
+ * get called, and we can start putting more data onto the buffer then.
+ */
+ log_debug(LD_GENERAL, "Primed a buffer.");
+ channel_flush_from_first_active_circuit(chan, 1);
+ }
+}
+
diff --git a/src/or/circuitmux.h b/src/or/circuitmux.h
new file mode 100644
index 000000000..c4c0649c6
--- /dev/null
+++ b/src/or/circuitmux.h
@@ -0,0 +1,148 @@
+/* * Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file circuitmux.h
+ * \brief Header file for circuitmux.c
+ **/
+
+#ifndef TOR_CIRCUITMUX_H
+#define TOR_CIRCUITMUX_H
+
+#include "or.h"
+#include "testsupport.h"
+
+typedef struct circuitmux_policy_s circuitmux_policy_t;
+typedef struct circuitmux_policy_data_s circuitmux_policy_data_t;
+typedef struct circuitmux_policy_circ_data_s circuitmux_policy_circ_data_t;
+
+struct circuitmux_policy_s {
+ /* Allocate cmux-wide policy-specific data */
+ circuitmux_policy_data_t * (*alloc_cmux_data)(circuitmux_t *cmux);
+ /* Free cmux-wide policy-specific data */
+ void (*free_cmux_data)(circuitmux_t *cmux,
+ circuitmux_policy_data_t *pol_data);
+ /* Allocate circuit policy-specific data for a newly attached circuit */
+ circuitmux_policy_circ_data_t *
+ (*alloc_circ_data)(circuitmux_t *cmux,
+ circuitmux_policy_data_t *pol_data,
+ circuit_t *circ,
+ cell_direction_t direction,
+ unsigned int cell_count);
+ /* Free circuit policy-specific data */
+ void (*free_circ_data)(circuitmux_t *cmux,
+ circuitmux_policy_data_t *pol_data,
+ circuit_t *circ,
+ circuitmux_policy_circ_data_t *pol_circ_data);
+ /* Notify that a circuit has become active/inactive */
+ void (*notify_circ_active)(circuitmux_t *cmux,
+ circuitmux_policy_data_t *pol_data,
+ circuit_t *circ,
+ circuitmux_policy_circ_data_t *pol_circ_data);
+ void (*notify_circ_inactive)(circuitmux_t *cmux,
+ circuitmux_policy_data_t *pol_data,
+ circuit_t *circ,
+ circuitmux_policy_circ_data_t *pol_circ_data);
+ /* Notify of arriving/transmitted cells on a circuit */
+ void (*notify_set_n_cells)(circuitmux_t *cmux,
+ circuitmux_policy_data_t *pol_data,
+ circuit_t *circ,
+ circuitmux_policy_circ_data_t *pol_circ_data,
+ unsigned int n_cells);
+ void (*notify_xmit_cells)(circuitmux_t *cmux,
+ circuitmux_policy_data_t *pol_data,
+ circuit_t *circ,
+ circuitmux_policy_circ_data_t *pol_circ_data,
+ unsigned int n_cells);
+ /* Choose a circuit */
+ circuit_t * (*pick_active_circuit)(circuitmux_t *cmux,
+ circuitmux_policy_data_t *pol_data);
+};
+
+/*
+ * Circuitmux policy implementations can subclass this to store circuitmux-
+ * wide data; it just has the magic number in the base struct.
+ */
+
+struct circuitmux_policy_data_s {
+ uint32_t magic;
+};
+
+/*
+ * Circuitmux policy implementations can subclass this to store circuit-
+ * specific data; it just has the magic number in the base struct.
+ */
+
+struct circuitmux_policy_circ_data_s {
+ uint32_t magic;
+};
+
+/*
+ * Upcast #defines for the above types
+ */
+
+/**
+ * Convert a circuitmux_policy_data_t subtype to a circuitmux_policy_data_t.
+ */
+
+#define TO_CMUX_POL_DATA(x) (&((x)->base_))
+
+/**
+ * Convert a circuitmux_policy_circ_data_t subtype to a
+ * circuitmux_policy_circ_data_t.
+ */
+
+#define TO_CMUX_POL_CIRC_DATA(x) (&((x)->base_))
+
+/* Consistency check */
+void circuitmux_assert_okay(circuitmux_t *cmux);
+
+/* Create/destroy */
+circuitmux_t * circuitmux_alloc(void);
+void circuitmux_detach_all_circuits(circuitmux_t *cmux,
+ smartlist_t *detached_out);
+void circuitmux_free(circuitmux_t *cmux);
+
+/* Policy control */
+void circuitmux_clear_policy(circuitmux_t *cmux);
+const circuitmux_policy_t * circuitmux_get_policy(circuitmux_t *cmux);
+void circuitmux_set_policy(circuitmux_t *cmux,
+ const circuitmux_policy_t *pol);
+
+/* Status inquiries */
+cell_direction_t circuitmux_attached_circuit_direction(
+ circuitmux_t *cmux,
+ circuit_t *circ);
+int circuitmux_is_circuit_attached(circuitmux_t *cmux, circuit_t *circ);
+int circuitmux_is_circuit_active(circuitmux_t *cmux, circuit_t *circ);
+unsigned int circuitmux_num_cells_for_circuit(circuitmux_t *cmux,
+ circuit_t *circ);
+unsigned int circuitmux_num_cells(circuitmux_t *cmux);
+unsigned int circuitmux_num_circuits(circuitmux_t *cmux);
+unsigned int circuitmux_num_active_circuits(circuitmux_t *cmux);
+
+/* Channel interface */
+circuit_t * circuitmux_get_first_active_circuit(circuitmux_t *cmux,
+ cell_queue_t **destroy_queue_out);
+void circuitmux_notify_xmit_cells(circuitmux_t *cmux, circuit_t *circ,
+ unsigned int n_cells);
+void circuitmux_notify_xmit_destroy(circuitmux_t *cmux);
+
+/* Circuit interface */
+MOCK_DECL(void, circuitmux_attach_circuit, (circuitmux_t *cmux,
+ circuit_t *circ,
+ cell_direction_t direction));
+MOCK_DECL(void, circuitmux_detach_circuit,
+ (circuitmux_t *cmux, circuit_t *circ));
+void circuitmux_clear_num_cells(circuitmux_t *cmux, circuit_t *circ);
+void circuitmux_set_num_cells(circuitmux_t *cmux, circuit_t *circ,
+ unsigned int n_cells);
+
+void circuitmux_append_destroy_cell(channel_t *chan,
+ circuitmux_t *cmux, circid_t circ_id,
+ uint8_t reason);
+void circuitmux_mark_destroyed_circids_usable(circuitmux_t *cmux,
+ channel_t *chan);
+
+#endif /* TOR_CIRCUITMUX_H */
+
diff --git a/src/or/circuitmux_ewma.c b/src/or/circuitmux_ewma.c
new file mode 100644
index 000000000..3f37d7b9a
--- /dev/null
+++ b/src/or/circuitmux_ewma.c
@@ -0,0 +1,684 @@
+/* * Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file circuitmux_ewma.c
+ * \brief EWMA circuit selection as a circuitmux_t policy
+ **/
+
+#define TOR_CIRCUITMUX_EWMA_C_
+
+#include <math.h>
+
+#include "or.h"
+#include "circuitmux.h"
+#include "circuitmux_ewma.h"
+#include "networkstatus.h"
+
+/*** EWMA parameter #defines ***/
+
+/** How long does a tick last (seconds)? */
+#define EWMA_TICK_LEN 10
+
+/** The default per-tick scale factor, if it hasn't been overridden by a
+ * consensus or a configuration setting. zero means "disabled". */
+#define EWMA_DEFAULT_HALFLIFE 0.0
+
+/*** Some useful constant #defines ***/
+
+/*DOCDOC*/
+#define EPSILON 0.00001
+/*DOCDOC*/
+#define LOG_ONEHALF -0.69314718055994529
+
+/*** EWMA structures ***/
+
+typedef struct cell_ewma_s cell_ewma_t;
+typedef struct ewma_policy_data_s ewma_policy_data_t;
+typedef struct ewma_policy_circ_data_s ewma_policy_circ_data_t;
+
+/**
+ * The cell_ewma_t structure keeps track of how many cells a circuit has
+ * transferred recently. It keeps an EWMA (exponentially weighted moving
+ * average) of the number of cells flushed from the circuit queue onto a
+ * connection in channel_flush_from_first_active_circuit().
+ */
+
+struct cell_ewma_s {
+ /** The last 'tick' at which we recalibrated cell_count.
+ *
+ * A cell sent at exactly the start of this tick has weight 1.0. Cells sent
+ * since the start of this tick have weight greater than 1.0; ones sent
+ * earlier have less weight. */
+ unsigned int last_adjusted_tick;
+ /** The EWMA of the cell count. */
+ double cell_count;
+ /** True iff this is the cell count for a circuit's previous
+ * channel. */
+ unsigned int is_for_p_chan : 1;
+ /** The position of the circuit within the OR connection's priority
+ * queue. */
+ int heap_index;
+};
+
+struct ewma_policy_data_s {
+ circuitmux_policy_data_t base_;
+
+ /**
+ * Priority queue of cell_ewma_t for circuits with queued cells waiting
+ * for room to free up on the channel that owns this circuitmux. Kept
+ * in heap order according to EWMA. This was formerly in channel_t, and
+ * in or_connection_t before that.
+ */
+ smartlist_t *active_circuit_pqueue;
+
+ /**
+ * The tick on which the cell_ewma_ts in active_circuit_pqueue last had
+ * their ewma values rescaled. This was formerly in channel_t, and in
+ * or_connection_t before that.
+ */
+ unsigned int active_circuit_pqueue_last_recalibrated;
+};
+
+struct ewma_policy_circ_data_s {
+ circuitmux_policy_circ_data_t base_;
+
+ /**
+ * The EWMA count for the number of cells flushed from this circuit
+ * onto this circuitmux. Used to determine which circuit to flush
+ * from next. This was formerly in circuit_t and or_circuit_t.
+ */
+ cell_ewma_t cell_ewma;
+
+ /**
+ * Pointer back to the circuit_t this is for; since we're separating
+ * out circuit selection policy like this, we can't attach cell_ewma_t
+ * to the circuit_t any more, so we can't use SUBTYPE_P directly to a
+ * circuit_t like before; instead get it here.
+ */
+ circuit_t *circ;
+};
+
+#define EWMA_POL_DATA_MAGIC 0x2fd8b16aU
+#define EWMA_POL_CIRC_DATA_MAGIC 0x761e7747U
+
+/*** Downcasts for the above types ***/
+
+static ewma_policy_data_t *
+TO_EWMA_POL_DATA(circuitmux_policy_data_t *);
+
+static ewma_policy_circ_data_t *
+TO_EWMA_POL_CIRC_DATA(circuitmux_policy_circ_data_t *);
+
+/**
+ * Downcast a circuitmux_policy_data_t to an ewma_policy_data_t and assert
+ * if the cast is impossible.
+ */
+
+static INLINE ewma_policy_data_t *
+TO_EWMA_POL_DATA(circuitmux_policy_data_t *pol)
+{
+ if (!pol) return NULL;
+ else {
+ tor_assert(pol->magic == EWMA_POL_DATA_MAGIC);
+ return DOWNCAST(ewma_policy_data_t, pol);
+ }
+}
+
+/**
+ * Downcast a circuitmux_policy_circ_data_t to an ewma_policy_circ_data_t
+ * and assert if the cast is impossible.
+ */
+
+static INLINE ewma_policy_circ_data_t *
+TO_EWMA_POL_CIRC_DATA(circuitmux_policy_circ_data_t *pol)
+{
+ if (!pol) return NULL;
+ else {
+ tor_assert(pol->magic == EWMA_POL_CIRC_DATA_MAGIC);
+ return DOWNCAST(ewma_policy_circ_data_t, pol);
+ }
+}
+
+/*** Static declarations for circuitmux_ewma.c ***/
+
+static void add_cell_ewma(ewma_policy_data_t *pol, cell_ewma_t *ewma);
+static int compare_cell_ewma_counts(const void *p1, const void *p2);
+static unsigned cell_ewma_tick_from_timeval(const struct timeval *now,
+ double *remainder_out);
+static circuit_t * cell_ewma_to_circuit(cell_ewma_t *ewma);
+static INLINE double get_scale_factor(unsigned from_tick, unsigned to_tick);
+static cell_ewma_t * pop_first_cell_ewma(ewma_policy_data_t *pol);
+static void remove_cell_ewma(ewma_policy_data_t *pol, cell_ewma_t *ewma);
+static void scale_single_cell_ewma(cell_ewma_t *ewma, unsigned cur_tick);
+static void scale_active_circuits(ewma_policy_data_t *pol,
+ unsigned cur_tick);
+
+/*** Circuitmux policy methods ***/
+
+static circuitmux_policy_data_t * ewma_alloc_cmux_data(circuitmux_t *cmux);
+static void ewma_free_cmux_data(circuitmux_t *cmux,
+ circuitmux_policy_data_t *pol_data);
+static circuitmux_policy_circ_data_t *
+ewma_alloc_circ_data(circuitmux_t *cmux, circuitmux_policy_data_t *pol_data,
+ circuit_t *circ, cell_direction_t direction,
+ unsigned int cell_count);
+static void
+ewma_free_circ_data(circuitmux_t *cmux,
+ circuitmux_policy_data_t *pol_data,
+ circuit_t *circ,
+ circuitmux_policy_circ_data_t *pol_circ_data);
+static void
+ewma_notify_circ_active(circuitmux_t *cmux,
+ circuitmux_policy_data_t *pol_data,
+ circuit_t *circ,
+ circuitmux_policy_circ_data_t *pol_circ_data);
+static void
+ewma_notify_circ_inactive(circuitmux_t *cmux,
+ circuitmux_policy_data_t *pol_data,
+ circuit_t *circ,
+ circuitmux_policy_circ_data_t *pol_circ_data);
+static void
+ewma_notify_xmit_cells(circuitmux_t *cmux,
+ circuitmux_policy_data_t *pol_data,
+ circuit_t *circ,
+ circuitmux_policy_circ_data_t *pol_circ_data,
+ unsigned int n_cells);
+static circuit_t *
+ewma_pick_active_circuit(circuitmux_t *cmux,
+ circuitmux_policy_data_t *pol_data);
+
+/*** EWMA global variables ***/
+
+/** The per-tick scale factor to be used when computing cell-count EWMA
+ * values. (A cell sent N ticks before the start of the current tick
+ * has value ewma_scale_factor ** N.)
+ */
+static double ewma_scale_factor = 0.1;
+/* DOCDOC ewma_enabled */
+static int ewma_enabled = 0;
+
+/*** EWMA circuitmux_policy_t method table ***/
+
+circuitmux_policy_t ewma_policy = {
+ /*.alloc_cmux_data =*/ ewma_alloc_cmux_data,
+ /*.free_cmux_data =*/ ewma_free_cmux_data,
+ /*.alloc_circ_data =*/ ewma_alloc_circ_data,
+ /*.free_circ_data =*/ ewma_free_circ_data,
+ /*.notify_circ_active =*/ ewma_notify_circ_active,
+ /*.notify_circ_inactive =*/ ewma_notify_circ_inactive,
+ /*.notify_set_n_cells =*/ NULL, /* EWMA doesn't need this */
+ /*.notify_xmit_cells =*/ ewma_notify_xmit_cells,
+ /*.pick_active_circuit =*/ ewma_pick_active_circuit
+};
+
+/*** EWMA method implementations using the below EWMA helper functions ***/
+
+/**
+ * Allocate an ewma_policy_data_t and upcast it to a circuitmux_policy_data_t;
+ * this is called when setting the policy on a circuitmux_t to ewma_policy.
+ */
+
+static circuitmux_policy_data_t *
+ewma_alloc_cmux_data(circuitmux_t *cmux)
+{
+ ewma_policy_data_t *pol = NULL;
+
+ tor_assert(cmux);
+
+ pol = tor_malloc_zero(sizeof(*pol));
+ pol->base_.magic = EWMA_POL_DATA_MAGIC;
+ pol->active_circuit_pqueue = smartlist_new();
+ pol->active_circuit_pqueue_last_recalibrated = cell_ewma_get_tick();
+
+ return TO_CMUX_POL_DATA(pol);
+}
+
+/**
+ * Free an ewma_policy_data_t allocated with ewma_alloc_cmux_data()
+ */
+
+static void
+ewma_free_cmux_data(circuitmux_t *cmux,
+ circuitmux_policy_data_t *pol_data)
+{
+ ewma_policy_data_t *pol = NULL;
+
+ tor_assert(cmux);
+ if (!pol_data) return;
+
+ pol = TO_EWMA_POL_DATA(pol_data);
+
+ smartlist_free(pol->active_circuit_pqueue);
+ tor_free(pol);
+}
+
+/**
+ * Allocate an ewma_policy_circ_data_t and upcast it to a
+ * circuitmux_policy_data_t; this is called when attaching a circuit to a
+ * circuitmux_t with ewma_policy.
+ */
+
+static circuitmux_policy_circ_data_t *
+ewma_alloc_circ_data(circuitmux_t *cmux,
+ circuitmux_policy_data_t *pol_data,
+ circuit_t *circ,
+ cell_direction_t direction,
+ unsigned int cell_count)
+{
+ ewma_policy_circ_data_t *cdata = NULL;
+
+ tor_assert(cmux);
+ tor_assert(pol_data);
+ tor_assert(circ);
+ tor_assert(direction == CELL_DIRECTION_OUT ||
+ direction == CELL_DIRECTION_IN);
+ /* Shut the compiler up */
+ tor_assert(cell_count == cell_count);
+
+ cdata = tor_malloc_zero(sizeof(*cdata));
+ cdata->base_.magic = EWMA_POL_CIRC_DATA_MAGIC;
+ cdata->circ = circ;
+
+ /*
+ * Initialize the cell_ewma_t structure (formerly in
+ * init_circuit_base())
+ */
+ cdata->cell_ewma.last_adjusted_tick = cell_ewma_get_tick();
+ cdata->cell_ewma.cell_count = 0.0;
+ cdata->cell_ewma.heap_index = -1;
+ if (direction == CELL_DIRECTION_IN) {
+ cdata->cell_ewma.is_for_p_chan = 1;
+ } else {
+ cdata->cell_ewma.is_for_p_chan = 0;
+ }
+
+ return TO_CMUX_POL_CIRC_DATA(cdata);
+}
+
+/**
+ * Free an ewma_policy_circ_data_t allocated with ewma_alloc_circ_data()
+ */
+
+static void
+ewma_free_circ_data(circuitmux_t *cmux,
+ circuitmux_policy_data_t *pol_data,
+ circuit_t *circ,
+ circuitmux_policy_circ_data_t *pol_circ_data)
+
+{
+ ewma_policy_circ_data_t *cdata = NULL;
+
+ tor_assert(cmux);
+ tor_assert(circ);
+ tor_assert(pol_data);
+
+ if (!pol_circ_data) return;
+
+ cdata = TO_EWMA_POL_CIRC_DATA(pol_circ_data);
+
+ tor_free(cdata);
+}
+
+/**
+ * Handle circuit activation; this inserts the circuit's cell_ewma into
+ * the active_circuits_pqueue.
+ */
+
+static void
+ewma_notify_circ_active(circuitmux_t *cmux,
+ circuitmux_policy_data_t *pol_data,
+ circuit_t *circ,
+ circuitmux_policy_circ_data_t *pol_circ_data)
+{
+ ewma_policy_data_t *pol = NULL;
+ ewma_policy_circ_data_t *cdata = NULL;
+
+ tor_assert(cmux);
+ tor_assert(pol_data);
+ tor_assert(circ);
+ tor_assert(pol_circ_data);
+
+ pol = TO_EWMA_POL_DATA(pol_data);
+ cdata = TO_EWMA_POL_CIRC_DATA(pol_circ_data);
+
+ add_cell_ewma(pol, &(cdata->cell_ewma));
+}
+
+/**
+ * Handle circuit deactivation; this removes the circuit's cell_ewma from
+ * the active_circuits_pqueue.
+ */
+
+static void
+ewma_notify_circ_inactive(circuitmux_t *cmux,
+ circuitmux_policy_data_t *pol_data,
+ circuit_t *circ,
+ circuitmux_policy_circ_data_t *pol_circ_data)
+{
+ ewma_policy_data_t *pol = NULL;
+ ewma_policy_circ_data_t *cdata = NULL;
+
+ tor_assert(cmux);
+ tor_assert(pol_data);
+ tor_assert(circ);
+ tor_assert(pol_circ_data);
+
+ pol = TO_EWMA_POL_DATA(pol_data);
+ cdata = TO_EWMA_POL_CIRC_DATA(pol_circ_data);
+
+ remove_cell_ewma(pol, &(cdata->cell_ewma));
+}
+
+/**
+ * Update cell_ewma for this circuit after we've sent some cells, and
+ * remove/reinsert it in the queue. This used to be done (brokenly,
+ * see bug 6816) in channel_flush_from_first_active_circuit().
+ */
+
+static void
+ewma_notify_xmit_cells(circuitmux_t *cmux,
+ circuitmux_policy_data_t *pol_data,
+ circuit_t *circ,
+ circuitmux_policy_circ_data_t *pol_circ_data,
+ unsigned int n_cells)
+{
+ ewma_policy_data_t *pol = NULL;
+ ewma_policy_circ_data_t *cdata = NULL;
+ unsigned int tick;
+ double fractional_tick, ewma_increment;
+ /* The current (hi-res) time */
+ struct timeval now_hires;
+ cell_ewma_t *cell_ewma, *tmp;
+
+ tor_assert(cmux);
+ tor_assert(pol_data);
+ tor_assert(circ);
+ tor_assert(pol_circ_data);
+ tor_assert(n_cells > 0);
+
+ pol = TO_EWMA_POL_DATA(pol_data);
+ cdata = TO_EWMA_POL_CIRC_DATA(pol_circ_data);
+
+ /* Rescale the EWMAs if needed */
+ tor_gettimeofday_cached(&now_hires);
+ tick = cell_ewma_tick_from_timeval(&now_hires, &fractional_tick);
+
+ if (tick != pol->active_circuit_pqueue_last_recalibrated) {
+ scale_active_circuits(pol, tick);
+ }
+
+ /* How much do we adjust the cell count in cell_ewma by? */
+ ewma_increment =
+ ((double)(n_cells)) * pow(ewma_scale_factor, -fractional_tick);
+
+ /* Do the adjustment */
+ cell_ewma = &(cdata->cell_ewma);
+ cell_ewma->cell_count += ewma_increment;
+
+ /*
+ * Since we just sent on this circuit, it should be at the head of
+ * the queue. Pop the head, assert that it matches, then re-add.
+ */
+ tmp = pop_first_cell_ewma(pol);
+ tor_assert(tmp == cell_ewma);
+ add_cell_ewma(pol, cell_ewma);
+}
+
+/**
+ * Pick the preferred circuit to send from; this will be the one with
+ * the lowest EWMA value in the priority queue. This used to be done
+ * in channel_flush_from_first_active_circuit().
+ */
+
+static circuit_t *
+ewma_pick_active_circuit(circuitmux_t *cmux,
+ circuitmux_policy_data_t *pol_data)
+{
+ ewma_policy_data_t *pol = NULL;
+ circuit_t *circ = NULL;
+ cell_ewma_t *cell_ewma = NULL;
+
+ tor_assert(cmux);
+ tor_assert(pol_data);
+
+ pol = TO_EWMA_POL_DATA(pol_data);
+
+ if (smartlist_len(pol->active_circuit_pqueue) > 0) {
+ /* Get the head of the queue */
+ cell_ewma = smartlist_get(pol->active_circuit_pqueue, 0);
+ circ = cell_ewma_to_circuit(cell_ewma);
+ }
+
+ return circ;
+}
+
+/** Helper for sorting cell_ewma_t values in their priority queue. */
+static int
+compare_cell_ewma_counts(const void *p1, const void *p2)
+{
+ const cell_ewma_t *e1 = p1, *e2 = p2;
+
+ if (e1->cell_count < e2->cell_count)
+ return -1;
+ else if (e1->cell_count > e2->cell_count)
+ return 1;
+ else
+ return 0;
+}
+
+/** Given a cell_ewma_t, return a pointer to the circuit containing it. */
+static circuit_t *
+cell_ewma_to_circuit(cell_ewma_t *ewma)
+{
+ ewma_policy_circ_data_t *cdata = NULL;
+
+ tor_assert(ewma);
+ cdata = SUBTYPE_P(ewma, ewma_policy_circ_data_t, cell_ewma);
+ tor_assert(cdata);
+
+ return cdata->circ;
+}
+
+/* ==== Functions for scaling cell_ewma_t ====
+
+ When choosing which cells to relay first, we favor circuits that have been
+ quiet recently. This gives better latency on connections that aren't
+ pushing lots of data, and makes the network feel more interactive.
+
+ Conceptually, we take an exponentially weighted mean average of the number
+ of cells a circuit has sent, and allow active circuits (those with cells to
+ relay) to send cells in reverse order of their exponentially-weighted mean
+ average (EWMA) cell count. [That is, a cell sent N seconds ago 'counts'
+ F^N times as much as a cell sent now, for 0<F<1.0, and we favor the
+ circuit that has sent the fewest cells]
+
+ If 'double' had infinite precision, we could do this simply by counting a
+ cell sent at startup as having weight 1.0, and a cell sent N seconds later
+ as having weight F^-N. This way, we would never need to re-scale
+ any already-sent cells.
+
+ To prevent double from overflowing, we could count a cell sent now as
+ having weight 1.0 and a cell sent N seconds ago as having weight F^N.
+ This, however, would mean we'd need to re-scale *ALL* old circuits every
+ time we wanted to send a cell.
+
+ So as a compromise, we divide time into 'ticks' (currently, 10-second
+ increments) and say that a cell sent at the start of a current tick is
+ worth 1.0, a cell sent N seconds before the start of the current tick is
+ worth F^N, and a cell sent N seconds after the start of the current tick is
+ worth F^-N. This way we don't overflow, and we don't need to constantly
+ rescale.
+ */
+
+/** Given a timeval <b>now</b>, compute the cell_ewma tick in which it occurs
+ * and the fraction of the tick that has elapsed between the start of the tick
+ * and <b>now</b>. Return the former and store the latter in
+ * *<b>remainder_out</b>.
+ *
+ * These tick values are not meant to be shared between Tor instances, or used
+ * for other purposes. */
+
+static unsigned
+cell_ewma_tick_from_timeval(const struct timeval *now,
+ double *remainder_out)
+{
+ unsigned res = (unsigned) (now->tv_sec / EWMA_TICK_LEN);
+ /* rem */
+ double rem = (now->tv_sec % EWMA_TICK_LEN) +
+ ((double)(now->tv_usec)) / 1.0e6;
+ *remainder_out = rem / EWMA_TICK_LEN;
+ return res;
+}
+
+/** Tell the caller whether ewma_enabled is set */
+int
+cell_ewma_enabled(void)
+{
+ return ewma_enabled;
+}
+
+/** Compute and return the current cell_ewma tick. */
+unsigned int
+cell_ewma_get_tick(void)
+{
+ return ((unsigned)approx_time() / EWMA_TICK_LEN);
+}
+
+/** Adjust the global cell scale factor based on <b>options</b> */
+void
+cell_ewma_set_scale_factor(const or_options_t *options,
+ const networkstatus_t *consensus)
+{
+ int32_t halflife_ms;
+ double halflife;
+ const char *source;
+ if (options && options->CircuitPriorityHalflife >= -EPSILON) {
+ halflife = options->CircuitPriorityHalflife;
+ source = "CircuitPriorityHalflife in configuration";
+ } else if (consensus && (halflife_ms = networkstatus_get_param(
+ consensus, "CircuitPriorityHalflifeMsec",
+ -1, -1, INT32_MAX)) >= 0) {
+ halflife = ((double)halflife_ms)/1000.0;
+ source = "CircuitPriorityHalflifeMsec in consensus";
+ } else {
+ halflife = EWMA_DEFAULT_HALFLIFE;
+ source = "Default value";
+ }
+
+ if (halflife <= EPSILON) {
+ /* The cell EWMA algorithm is disabled. */
+ ewma_scale_factor = 0.1;
+ ewma_enabled = 0;
+ log_info(LD_OR,
+ "Disabled cell_ewma algorithm because of value in %s",
+ source);
+ } else {
+ /* convert halflife into halflife-per-tick. */
+ halflife /= EWMA_TICK_LEN;
+ /* compute per-tick scale factor. */
+ ewma_scale_factor = exp( LOG_ONEHALF / halflife );
+ ewma_enabled = 1;
+ log_info(LD_OR,
+ "Enabled cell_ewma algorithm because of value in %s; "
+ "scale factor is %f per %d seconds",
+ source, ewma_scale_factor, EWMA_TICK_LEN);
+ }
+}
+
+/** Return the multiplier necessary to convert the value of a cell sent in
+ * 'from_tick' to one sent in 'to_tick'. */
+static INLINE double
+get_scale_factor(unsigned from_tick, unsigned to_tick)
+{
+ /* This math can wrap around, but that's okay: unsigned overflow is
+ well-defined */
+ int diff = (int)(to_tick - from_tick);
+ return pow(ewma_scale_factor, diff);
+}
+
+/** Adjust the cell count of <b>ewma</b> so that it is scaled with respect to
+ * <b>cur_tick</b> */
+static void
+scale_single_cell_ewma(cell_ewma_t *ewma, unsigned cur_tick)
+{
+ double factor = get_scale_factor(ewma->last_adjusted_tick, cur_tick);
+ ewma->cell_count *= factor;
+ ewma->last_adjusted_tick = cur_tick;
+}
+
+/** Adjust the cell count of every active circuit on <b>chan</b> so
+ * that they are scaled with respect to <b>cur_tick</b> */
+static void
+scale_active_circuits(ewma_policy_data_t *pol, unsigned cur_tick)
+{
+ double factor;
+
+ tor_assert(pol);
+ tor_assert(pol->active_circuit_pqueue);
+
+ factor =
+ get_scale_factor(
+ pol->active_circuit_pqueue_last_recalibrated,
+ cur_tick);
+ /** Ordinarily it isn't okay to change the value of an element in a heap,
+ * but it's okay here, since we are preserving the order. */
+ SMARTLIST_FOREACH_BEGIN(
+ pol->active_circuit_pqueue,
+ cell_ewma_t *, e) {
+ tor_assert(e->last_adjusted_tick ==
+ pol->active_circuit_pqueue_last_recalibrated);
+ e->cell_count *= factor;
+ e->last_adjusted_tick = cur_tick;
+ } SMARTLIST_FOREACH_END(e);
+ pol->active_circuit_pqueue_last_recalibrated = cur_tick;
+}
+
+/** Rescale <b>ewma</b> to the same scale as <b>pol</b>, and add it to
+ * <b>pol</b>'s priority queue of active circuits */
+static void
+add_cell_ewma(ewma_policy_data_t *pol, cell_ewma_t *ewma)
+{
+ tor_assert(pol);
+ tor_assert(pol->active_circuit_pqueue);
+ tor_assert(ewma);
+ tor_assert(ewma->heap_index == -1);
+
+ scale_single_cell_ewma(
+ ewma,
+ pol->active_circuit_pqueue_last_recalibrated);
+
+ smartlist_pqueue_add(pol->active_circuit_pqueue,
+ compare_cell_ewma_counts,
+ STRUCT_OFFSET(cell_ewma_t, heap_index),
+ ewma);
+}
+
+/** Remove <b>ewma</b> from <b>pol</b>'s priority queue of active circuits */
+static void
+remove_cell_ewma(ewma_policy_data_t *pol, cell_ewma_t *ewma)
+{
+ tor_assert(pol);
+ tor_assert(pol->active_circuit_pqueue);
+ tor_assert(ewma);
+ tor_assert(ewma->heap_index != -1);
+
+ smartlist_pqueue_remove(pol->active_circuit_pqueue,
+ compare_cell_ewma_counts,
+ STRUCT_OFFSET(cell_ewma_t, heap_index),
+ ewma);
+}
+
+/** Remove and return the first cell_ewma_t from pol's priority queue of
+ * active circuits. Requires that the priority queue is nonempty. */
+static cell_ewma_t *
+pop_first_cell_ewma(ewma_policy_data_t *pol)
+{
+ tor_assert(pol);
+ tor_assert(pol->active_circuit_pqueue);
+
+ return smartlist_pqueue_pop(pol->active_circuit_pqueue,
+ compare_cell_ewma_counts,
+ STRUCT_OFFSET(cell_ewma_t, heap_index));
+}
+
diff --git a/src/or/circuitmux_ewma.h b/src/or/circuitmux_ewma.h
new file mode 100644
index 000000000..a512745c7
--- /dev/null
+++ b/src/or/circuitmux_ewma.h
@@ -0,0 +1,29 @@
+/* * Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file circuitmux_ewma.h
+ * \brief Header file for circuitmux_ewma.c
+ **/
+
+#ifndef TOR_CIRCUITMUX_EWMA_H
+#define TOR_CIRCUITMUX_EWMA_H
+
+#include "or.h"
+#include "circuitmux.h"
+
+/* Everything but circuitmux_ewma.c should see this extern */
+#ifndef TOR_CIRCUITMUX_EWMA_C_
+
+extern circuitmux_policy_t ewma_policy;
+
+#endif /* !(TOR_CIRCUITMUX_EWMA_C_) */
+
+/* Externally visible EWMA functions */
+int cell_ewma_enabled(void);
+unsigned int cell_ewma_get_tick(void);
+void cell_ewma_set_scale_factor(const or_options_t *options,
+ const networkstatus_t *consensus);
+
+#endif /* TOR_CIRCUITMUX_EWMA_H */
+
diff --git a/src/or/circuitstats.c b/src/or/circuitstats.c
new file mode 100644
index 000000000..e362b1b49
--- /dev/null
+++ b/src/or/circuitstats.c
@@ -0,0 +1,1658 @@
+/* Copyright (c) 2001 Matej Pfajfar.
+ * Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#define CIRCUITSTATS_PRIVATE
+
+#include "or.h"
+#include "circuitbuild.h"
+#include "circuitstats.h"
+#include "config.h"
+#include "confparse.h"
+#include "control.h"
+#include "main.h"
+#include "networkstatus.h"
+#include "statefile.h"
+
+#undef log
+#include <math.h>
+
+static void cbt_control_event_buildtimeout_set(
+ const circuit_build_times_t *cbt,
+ buildtimeout_set_event_t type);
+
+#define CBT_BIN_TO_MS(bin) ((bin)*CBT_BIN_WIDTH + (CBT_BIN_WIDTH/2))
+
+/** Global list of circuit build times */
+// XXXX: Add this as a member for entry_guard_t instead of global?
+// Then we could do per-guard statistics, as guards are likely to
+// vary in their own latency. The downside of this is that guards
+// can change frequently, so we'd be building a lot more circuits
+// most likely.
+static circuit_build_times_t circ_times;
+
+#ifdef TOR_UNIT_TESTS
+/** If set, we're running the unit tests: we should avoid clobbering
+ * our state file or accessing get_options() or get_or_state() */
+static int unit_tests = 0;
+#else
+#define unit_tests 0
+#endif
+
+/** Return a pointer to the data structure describing our current circuit
+ * build time history and computations. */
+const circuit_build_times_t *
+get_circuit_build_times(void)
+{
+ return &circ_times;
+}
+
+/** As get_circuit_build_times, but return a mutable pointer. */
+circuit_build_times_t *
+get_circuit_build_times_mutable(void)
+{
+ return &circ_times;
+}
+
+/** Return the time to wait before actually closing an under-construction, in
+ * milliseconds. */
+double
+get_circuit_build_close_time_ms(void)
+{
+ return circ_times.close_ms;
+}
+
+/** Return the time to wait before giving up on an under-construction circuit,
+ * in milliseconds. */
+double
+get_circuit_build_timeout_ms(void)
+{
+ return circ_times.timeout_ms;
+}
+
+/**
+ * This function decides if CBT learning should be disabled. It returns
+ * true if one or more of the following four conditions are met:
+ *
+ * 1. If the cbtdisabled consensus parameter is set.
+ * 2. If the torrc option LearnCircuitBuildTimeout is false.
+ * 3. If we are a directory authority
+ * 4. If we fail to write circuit build time history to our state file.
+ */
+int
+circuit_build_times_disabled(void)
+{
+ if (unit_tests) {
+ return 0;
+ } else {
+ int consensus_disabled = networkstatus_get_param(NULL, "cbtdisabled",
+ 0, 0, 1);
+ int config_disabled = !get_options()->LearnCircuitBuildTimeout;
+ int dirauth_disabled = get_options()->AuthoritativeDir;
+ int state_disabled = did_last_state_file_write_fail() ? 1 : 0;
+
+ if (consensus_disabled || config_disabled || dirauth_disabled ||
+ state_disabled) {
+#if 0
+ log_debug(LD_CIRC,
+ "CircuitBuildTime learning is disabled. "
+ "Consensus=%d, Config=%d, AuthDir=%d, StateFile=%d",
+ consensus_disabled, config_disabled, dirauth_disabled,
+ state_disabled);
+#endif
+ return 1;
+ } else {
+#if 0
+ log_debug(LD_CIRC,
+ "CircuitBuildTime learning is not disabled. "
+ "Consensus=%d, Config=%d, AuthDir=%d, StateFile=%d",
+ consensus_disabled, config_disabled, dirauth_disabled,
+ state_disabled);
+#endif
+ return 0;
+ }
+ }
+}
+
+/**
+ * Retrieve and bounds-check the cbtmaxtimeouts consensus paramter.
+ *
+ * Effect: When this many timeouts happen in the last 'cbtrecentcount'
+ * circuit attempts, the client should discard all of its history and
+ * begin learning a fresh timeout value.
+ */
+static int32_t
+circuit_build_times_max_timeouts(void)
+{
+ int32_t cbt_maxtimeouts;
+
+ cbt_maxtimeouts = networkstatus_get_param(NULL, "cbtmaxtimeouts",
+ CBT_DEFAULT_MAX_RECENT_TIMEOUT_COUNT,
+ CBT_MIN_MAX_RECENT_TIMEOUT_COUNT,
+ CBT_MAX_MAX_RECENT_TIMEOUT_COUNT);
+
+ if (!(get_options()->LearnCircuitBuildTimeout)) {
+ log_debug(LD_BUG,
+ "circuit_build_times_max_timeouts() called, cbtmaxtimeouts is"
+ " %d",
+ cbt_maxtimeouts);
+ }
+
+ return cbt_maxtimeouts;
+}
+
+/**
+ * Retrieve and bounds-check the cbtnummodes consensus paramter.
+ *
+ * Effect: This value governs how many modes to use in the weighted
+ * average calculation of Pareto parameter Xm. A value of 3 introduces
+ * some bias (2-5% of CDF) under ideal conditions, but allows for better
+ * performance in the event that a client chooses guard nodes of radically
+ * different performance characteristics.
+ */
+static int32_t
+circuit_build_times_default_num_xm_modes(void)
+{
+ int32_t num = networkstatus_get_param(NULL, "cbtnummodes",
+ CBT_DEFAULT_NUM_XM_MODES,
+ CBT_MIN_NUM_XM_MODES,
+ CBT_MAX_NUM_XM_MODES);
+
+ if (!(get_options()->LearnCircuitBuildTimeout)) {
+ log_debug(LD_BUG,
+ "circuit_build_times_default_num_xm_modes() called, cbtnummodes"
+ " is %d",
+ num);
+ }
+
+ return num;
+}
+
+/**
+ * Retrieve and bounds-check the cbtmincircs consensus paramter.
+ *
+ * Effect: This is the minimum number of circuits to build before
+ * computing a timeout.
+ */
+static int32_t
+circuit_build_times_min_circs_to_observe(void)
+{
+ int32_t num = networkstatus_get_param(NULL, "cbtmincircs",
+ CBT_DEFAULT_MIN_CIRCUITS_TO_OBSERVE,
+ CBT_MIN_MIN_CIRCUITS_TO_OBSERVE,
+ CBT_MAX_MIN_CIRCUITS_TO_OBSERVE);
+
+ if (!(get_options()->LearnCircuitBuildTimeout)) {
+ log_debug(LD_BUG,
+ "circuit_build_times_min_circs_to_observe() called, cbtmincircs"
+ " is %d",
+ num);
+ }
+
+ return num;
+}
+
+/** Return true iff <b>cbt</b> has recorded enough build times that we
+ * want to start acting on the timeout it implies. */
+int
+circuit_build_times_enough_to_compute(const circuit_build_times_t *cbt)
+{
+ return cbt->total_build_times >= circuit_build_times_min_circs_to_observe();
+}
+
+/**
+ * Retrieve and bounds-check the cbtquantile consensus paramter.
+ *
+ * Effect: This is the position on the quantile curve to use to set the
+ * timeout value. It is a percent (10-99).
+ */
+double
+circuit_build_times_quantile_cutoff(void)
+{
+ int32_t num = networkstatus_get_param(NULL, "cbtquantile",
+ CBT_DEFAULT_QUANTILE_CUTOFF,
+ CBT_MIN_QUANTILE_CUTOFF,
+ CBT_MAX_QUANTILE_CUTOFF);
+
+ if (!(get_options()->LearnCircuitBuildTimeout)) {
+ log_debug(LD_BUG,
+ "circuit_build_times_quantile_cutoff() called, cbtquantile"
+ " is %d",
+ num);
+ }
+
+ return num/100.0;
+}
+
+/**
+ * Retrieve and bounds-check the cbtclosequantile consensus paramter.
+ *
+ * Effect: This is the position on the quantile curve to use to set the
+ * timeout value to use to actually close circuits. It is a percent
+ * (0-99).
+ */
+static double
+circuit_build_times_close_quantile(void)
+{
+ int32_t param;
+ /* Cast is safe - circuit_build_times_quantile_cutoff() is capped */
+ int32_t min = (int)tor_lround(100*circuit_build_times_quantile_cutoff());
+ param = networkstatus_get_param(NULL, "cbtclosequantile",
+ CBT_DEFAULT_CLOSE_QUANTILE,
+ CBT_MIN_CLOSE_QUANTILE,
+ CBT_MAX_CLOSE_QUANTILE);
+
+ if (!(get_options()->LearnCircuitBuildTimeout)) {
+ log_debug(LD_BUG,
+ "circuit_build_times_close_quantile() called, cbtclosequantile"
+ " is %d", param);
+ }
+
+ if (param < min) {
+ log_warn(LD_DIR, "Consensus parameter cbtclosequantile is "
+ "too small, raising to %d", min);
+ param = min;
+ }
+ return param / 100.0;
+}
+
+/**
+ * Retrieve and bounds-check the cbttestfreq consensus paramter.
+ *
+ * Effect: Describes how often in seconds to build a test circuit to
+ * gather timeout values. Only applies if less than 'cbtmincircs'
+ * have been recorded.
+ */
+static int32_t
+circuit_build_times_test_frequency(void)
+{
+ int32_t num = networkstatus_get_param(NULL, "cbttestfreq",
+ CBT_DEFAULT_TEST_FREQUENCY,
+ CBT_MIN_TEST_FREQUENCY,
+ CBT_MAX_TEST_FREQUENCY);
+
+ if (!(get_options()->LearnCircuitBuildTimeout)) {
+ log_debug(LD_BUG,
+ "circuit_build_times_test_frequency() called, cbttestfreq is %d",
+ num);
+ }
+
+ return num;
+}
+
+/**
+ * Retrieve and bounds-check the cbtmintimeout consensus parameter.
+ *
+ * Effect: This is the minimum allowed timeout value in milliseconds.
+ * The minimum is to prevent rounding to 0 (we only check once
+ * per second).
+ */
+static int32_t
+circuit_build_times_min_timeout(void)
+{
+ int32_t num = networkstatus_get_param(NULL, "cbtmintimeout",
+ CBT_DEFAULT_TIMEOUT_MIN_VALUE,
+ CBT_MIN_TIMEOUT_MIN_VALUE,
+ CBT_MAX_TIMEOUT_MIN_VALUE);
+
+ if (!(get_options()->LearnCircuitBuildTimeout)) {
+ log_debug(LD_BUG,
+ "circuit_build_times_min_timeout() called, cbtmintimeout is %d",
+ num);
+ }
+
+ return num;
+}
+
+/**
+ * Retrieve and bounds-check the cbtinitialtimeout consensus paramter.
+ *
+ * Effect: This is the timeout value to use before computing a timeout,
+ * in milliseconds.
+ */
+int32_t
+circuit_build_times_initial_timeout(void)
+{
+ int32_t min = circuit_build_times_min_timeout();
+ int32_t param = networkstatus_get_param(NULL, "cbtinitialtimeout",
+ CBT_DEFAULT_TIMEOUT_INITIAL_VALUE,
+ CBT_MIN_TIMEOUT_INITIAL_VALUE,
+ CBT_MAX_TIMEOUT_INITIAL_VALUE);
+
+ if (!(get_options()->LearnCircuitBuildTimeout)) {
+ log_debug(LD_BUG,
+ "circuit_build_times_initial_timeout() called, "
+ "cbtinitialtimeout is %d",
+ param);
+ }
+
+ if (param < min) {
+ log_warn(LD_DIR, "Consensus parameter cbtinitialtimeout is too small, "
+ "raising to %d", min);
+ param = min;
+ }
+ return param;
+}
+
+/**
+ * Retrieve and bounds-check the cbtrecentcount consensus paramter.
+ *
+ * Effect: This is the number of circuit build times to keep track of
+ * for deciding if we hit cbtmaxtimeouts and need to reset our state
+ * and learn a new timeout.
+ */
+static int32_t
+circuit_build_times_recent_circuit_count(networkstatus_t *ns)
+{
+ int32_t num;
+ num = networkstatus_get_param(ns, "cbtrecentcount",
+ CBT_DEFAULT_RECENT_CIRCUITS,
+ CBT_MIN_RECENT_CIRCUITS,
+ CBT_MAX_RECENT_CIRCUITS);
+
+ if (!(get_options()->LearnCircuitBuildTimeout)) {
+ log_debug(LD_BUG,
+ "circuit_build_times_recent_circuit_count() called, "
+ "cbtrecentcount is %d",
+ num);
+ }
+
+ return num;
+}
+
+/**
+ * This function is called when we get a consensus update.
+ *
+ * It checks to see if we have changed any consensus parameters
+ * that require reallocation or discard of previous stats.
+ */
+void
+circuit_build_times_new_consensus_params(circuit_build_times_t *cbt,
+ networkstatus_t *ns)
+{
+ int32_t num;
+
+ /*
+ * First check if we're doing adaptive timeouts at all; nothing to
+ * update if we aren't.
+ */
+
+ if (!circuit_build_times_disabled()) {
+ num = circuit_build_times_recent_circuit_count(ns);
+
+ if (num > 0) {
+ if (num != cbt->liveness.num_recent_circs) {
+ int8_t *recent_circs;
+ log_notice(LD_CIRC, "The Tor Directory Consensus has changed how many "
+ "circuits we must track to detect network failures from %d "
+ "to %d.", cbt->liveness.num_recent_circs, num);
+
+ tor_assert(cbt->liveness.timeouts_after_firsthop ||
+ cbt->liveness.num_recent_circs == 0);
+
+ /*
+ * Technically this is a circular array that we are reallocating
+ * and memcopying. However, since it only consists of either 1s
+ * or 0s, and is only used in a statistical test to determine when
+ * we should discard our history after a sufficient number of 1's
+ * have been reached, it is fine if order is not preserved or
+ * elements are lost.
+ *
+ * cbtrecentcount should only be changing in cases of severe network
+ * distress anyway, so memory correctness here is paramount over
+ * doing acrobatics to preserve the array.
+ */
+ recent_circs = tor_malloc_zero(sizeof(int8_t)*num);
+ if (cbt->liveness.timeouts_after_firsthop &&
+ cbt->liveness.num_recent_circs > 0) {
+ memcpy(recent_circs, cbt->liveness.timeouts_after_firsthop,
+ sizeof(int8_t)*MIN(num, cbt->liveness.num_recent_circs));
+ }
+
+ // Adjust the index if it needs it.
+ if (num < cbt->liveness.num_recent_circs) {
+ cbt->liveness.after_firsthop_idx = MIN(num-1,
+ cbt->liveness.after_firsthop_idx);
+ }
+
+ tor_free(cbt->liveness.timeouts_after_firsthop);
+ cbt->liveness.timeouts_after_firsthop = recent_circs;
+ cbt->liveness.num_recent_circs = num;
+ }
+ /* else no change, nothing to do */
+ } else { /* num == 0 */
+ /*
+ * Weird. This probably shouldn't happen, so log a warning, but try
+ * to do something sensible anyway.
+ */
+
+ log_warn(LD_CIRC,
+ "The cbtrecentcircs consensus parameter came back zero! "
+ "This disables adaptive timeouts since we can't keep track of "
+ "any recent circuits.");
+
+ circuit_build_times_free_timeouts(cbt);
+ }
+ } else {
+ /*
+ * Adaptive timeouts are disabled; this might be because of the
+ * LearnCircuitBuildTimes config parameter, and hence permanent, or
+ * the cbtdisabled consensus parameter, so it may be a new condition.
+ * Treat it like getting num == 0 above and free the circuit history
+ * if we have any.
+ */
+
+ circuit_build_times_free_timeouts(cbt);
+ }
+}
+
+/**
+ * Return the initial default or configured timeout in milliseconds
+ */
+static double
+circuit_build_times_get_initial_timeout(void)
+{
+ double timeout;
+
+ /*
+ * Check if we have LearnCircuitBuildTimeout, and if we don't,
+ * always use CircuitBuildTimeout, no questions asked.
+ */
+ if (!unit_tests && get_options()->CircuitBuildTimeout) {
+ timeout = get_options()->CircuitBuildTimeout*1000;
+ if (get_options()->LearnCircuitBuildTimeout &&
+ timeout < circuit_build_times_min_timeout()) {
+ log_warn(LD_CIRC, "Config CircuitBuildTimeout too low. Setting to %ds",
+ circuit_build_times_min_timeout()/1000);
+ timeout = circuit_build_times_min_timeout();
+ }
+ } else {
+ timeout = circuit_build_times_initial_timeout();
+ }
+
+ return timeout;
+}
+
+/**
+ * Reset the build time state.
+ *
+ * Leave estimated parameters, timeout and network liveness intact
+ * for future use.
+ */
+STATIC void
+circuit_build_times_reset(circuit_build_times_t *cbt)
+{
+ memset(cbt->circuit_build_times, 0, sizeof(cbt->circuit_build_times));
+ cbt->total_build_times = 0;
+ cbt->build_times_idx = 0;
+ cbt->have_computed_timeout = 0;
+}
+
+/**
+ * Initialize the buildtimes structure for first use.
+ *
+ * Sets the initial timeout values based on either the config setting,
+ * the consensus param, or the default (CBT_DEFAULT_TIMEOUT_INITIAL_VALUE).
+ */
+void
+circuit_build_times_init(circuit_build_times_t *cbt)
+{
+ memset(cbt, 0, sizeof(*cbt));
+ /*
+ * Check if we really are using adaptive timeouts, and don't keep
+ * track of this stuff if not.
+ */
+ if (!circuit_build_times_disabled()) {
+ cbt->liveness.num_recent_circs =
+ circuit_build_times_recent_circuit_count(NULL);
+ cbt->liveness.timeouts_after_firsthop =
+ tor_malloc_zero(sizeof(int8_t)*cbt->liveness.num_recent_circs);
+ } else {
+ cbt->liveness.num_recent_circs = 0;
+ cbt->liveness.timeouts_after_firsthop = NULL;
+ }
+ cbt->close_ms = cbt->timeout_ms = circuit_build_times_get_initial_timeout();
+ cbt_control_event_buildtimeout_set(cbt, BUILDTIMEOUT_SET_EVENT_RESET);
+}
+
+/**
+ * Free the saved timeouts, if the cbtdisabled consensus parameter got turned
+ * on or something.
+ */
+
+void
+circuit_build_times_free_timeouts(circuit_build_times_t *cbt)
+{
+ if (!cbt) return;
+
+ if (cbt->liveness.timeouts_after_firsthop) {
+ tor_free(cbt->liveness.timeouts_after_firsthop);
+ }
+
+ cbt->liveness.num_recent_circs = 0;
+}
+
+#if 0
+/**
+ * Rewind our build time history by n positions.
+ */
+static void
+circuit_build_times_rewind_history(circuit_build_times_t *cbt, int n)
+{
+ int i = 0;
+
+ cbt->build_times_idx -= n;
+ cbt->build_times_idx %= CBT_NCIRCUITS_TO_OBSERVE;
+
+ for (i = 0; i < n; i++) {
+ cbt->circuit_build_times[(i+cbt->build_times_idx)
+ %CBT_NCIRCUITS_TO_OBSERVE]=0;
+ }
+
+ if (cbt->total_build_times > n) {
+ cbt->total_build_times -= n;
+ } else {
+ cbt->total_build_times = 0;
+ }
+
+ log_info(LD_CIRC,
+ "Rewound history by %d places. Current index: %d. "
+ "Total: %d", n, cbt->build_times_idx, cbt->total_build_times);
+}
+#endif
+
+/**
+ * Add a new build time value <b>time</b> to the set of build times. Time
+ * units are milliseconds.
+ *
+ * circuit_build_times <b>cbt</b> is a circular array, so loop around when
+ * array is full.
+ */
+int
+circuit_build_times_add_time(circuit_build_times_t *cbt, build_time_t time)
+{
+ if (time <= 0 || time > CBT_BUILD_TIME_MAX) {
+ log_warn(LD_BUG, "Circuit build time is too large (%u)."
+ "This is probably a bug.", time);
+ tor_fragile_assert();
+ return -1;
+ }
+
+ log_debug(LD_CIRC, "Adding circuit build time %u", time);
+
+ cbt->circuit_build_times[cbt->build_times_idx] = time;
+ cbt->build_times_idx = (cbt->build_times_idx + 1) % CBT_NCIRCUITS_TO_OBSERVE;
+ if (cbt->total_build_times < CBT_NCIRCUITS_TO_OBSERVE)
+ cbt->total_build_times++;
+
+ if ((cbt->total_build_times % CBT_SAVE_STATE_EVERY) == 0) {
+ /* Save state every n circuit builds */
+ if (!unit_tests && !get_options()->AvoidDiskWrites)
+ or_state_mark_dirty(get_or_state(), 0);
+ }
+
+ return 0;
+}
+
+/**
+ * Return maximum circuit build time
+ */
+static build_time_t
+circuit_build_times_max(const circuit_build_times_t *cbt)
+{
+ int i = 0;
+ build_time_t max_build_time = 0;
+ for (i = 0; i < CBT_NCIRCUITS_TO_OBSERVE; i++) {
+ if (cbt->circuit_build_times[i] > max_build_time
+ && cbt->circuit_build_times[i] != CBT_BUILD_ABANDONED)
+ max_build_time = cbt->circuit_build_times[i];
+ }
+ return max_build_time;
+}
+
+#if 0
+/** Return minimum circuit build time */
+build_time_t
+circuit_build_times_min(circuit_build_times_t *cbt)
+{
+ int i = 0;
+ build_time_t min_build_time = CBT_BUILD_TIME_MAX;
+ for (i = 0; i < CBT_NCIRCUITS_TO_OBSERVE; i++) {
+ if (cbt->circuit_build_times[i] && /* 0 <-> uninitialized */
+ cbt->circuit_build_times[i] < min_build_time)
+ min_build_time = cbt->circuit_build_times[i];
+ }
+ if (min_build_time == CBT_BUILD_TIME_MAX) {
+ log_warn(LD_CIRC, "No build times less than CBT_BUILD_TIME_MAX!");
+ }
+ return min_build_time;
+}
+#endif
+
+/**
+ * Calculate and return a histogram for the set of build times.
+ *
+ * Returns an allocated array of histrogram bins representing
+ * the frequency of index*CBT_BIN_WIDTH millisecond
+ * build times. Also outputs the number of bins in nbins.
+ *
+ * The return value must be freed by the caller.
+ */
+static uint32_t *
+circuit_build_times_create_histogram(const circuit_build_times_t *cbt,
+ build_time_t *nbins)
+{
+ uint32_t *histogram;
+ build_time_t max_build_time = circuit_build_times_max(cbt);
+ int i, c;
+
+ *nbins = 1 + (max_build_time / CBT_BIN_WIDTH);
+ histogram = tor_malloc_zero(*nbins * sizeof(build_time_t));
+
+ // calculate histogram
+ for (i = 0; i < CBT_NCIRCUITS_TO_OBSERVE; i++) {
+ if (cbt->circuit_build_times[i] == 0
+ || cbt->circuit_build_times[i] == CBT_BUILD_ABANDONED)
+ continue; /* 0 <-> uninitialized */
+
+ c = (cbt->circuit_build_times[i] / CBT_BIN_WIDTH);
+ histogram[c]++;
+ }
+
+ return histogram;
+}
+
+/**
+ * Return the Pareto start-of-curve parameter Xm.
+ *
+ * Because we are not a true Pareto curve, we compute this as the
+ * weighted average of the N most frequent build time bins. N is either
+ * 1 if we don't have enough circuit build time data collected, or
+ * determined by the consensus parameter cbtnummodes (default 3).
+ */
+static build_time_t
+circuit_build_times_get_xm(circuit_build_times_t *cbt)
+{
+ build_time_t i, nbins;
+ build_time_t *nth_max_bin;
+ int32_t bin_counts=0;
+ build_time_t ret = 0;
+ uint32_t *histogram = circuit_build_times_create_histogram(cbt, &nbins);
+ int n=0;
+ int num_modes = circuit_build_times_default_num_xm_modes();
+
+ tor_assert(nbins > 0);
+ tor_assert(num_modes > 0);
+
+ // Only use one mode if < 1000 buildtimes. Not enough data
+ // for multiple.
+ if (cbt->total_build_times < CBT_NCIRCUITS_TO_OBSERVE)
+ num_modes = 1;
+
+ nth_max_bin = (build_time_t*)tor_malloc_zero(num_modes*sizeof(build_time_t));
+
+ /* Determine the N most common build times */
+ for (i = 0; i < nbins; i++) {
+ if (histogram[i] >= histogram[nth_max_bin[0]]) {
+ nth_max_bin[0] = i;
+ }
+
+ for (n = 1; n < num_modes; n++) {
+ if (histogram[i] >= histogram[nth_max_bin[n]] &&
+ (!histogram[nth_max_bin[n-1]]
+ || histogram[i] < histogram[nth_max_bin[n-1]])) {
+ nth_max_bin[n] = i;
+ }
+ }
+ }
+
+ for (n = 0; n < num_modes; n++) {
+ bin_counts += histogram[nth_max_bin[n]];
+ ret += CBT_BIN_TO_MS(nth_max_bin[n])*histogram[nth_max_bin[n]];
+ log_info(LD_CIRC, "Xm mode #%d: %u %u", n, CBT_BIN_TO_MS(nth_max_bin[n]),
+ histogram[nth_max_bin[n]]);
+ }
+
+ /* The following assert is safe, because we don't get called when we
+ * haven't observed at least CBT_MIN_MIN_CIRCUITS_TO_OBSERVE circuits. */
+ tor_assert(bin_counts > 0);
+
+ ret /= bin_counts;
+ tor_free(histogram);
+ tor_free(nth_max_bin);
+
+ return ret;
+}
+
+/**
+ * Output a histogram of current circuit build times to
+ * the or_state_t state structure.
+ */
+void
+circuit_build_times_update_state(const circuit_build_times_t *cbt,
+ or_state_t *state)
+{
+ uint32_t *histogram;
+ build_time_t i = 0;
+ build_time_t nbins = 0;
+ config_line_t **next, *line;
+
+ histogram = circuit_build_times_create_histogram(cbt, &nbins);
+ // write to state
+ config_free_lines(state->BuildtimeHistogram);
+ next = &state->BuildtimeHistogram;
+ *next = NULL;
+
+ state->TotalBuildTimes = cbt->total_build_times;
+ state->CircuitBuildAbandonedCount = 0;
+
+ for (i = 0; i < CBT_NCIRCUITS_TO_OBSERVE; i++) {
+ if (cbt->circuit_build_times[i] == CBT_BUILD_ABANDONED)
+ state->CircuitBuildAbandonedCount++;
+ }
+
+ for (i = 0; i < nbins; i++) {
+ // compress the histogram by skipping the blanks
+ if (histogram[i] == 0) continue;
+ *next = line = tor_malloc_zero(sizeof(config_line_t));
+ line->key = tor_strdup("CircuitBuildTimeBin");
+ tor_asprintf(&line->value, "%d %d",
+ CBT_BIN_TO_MS(i), histogram[i]);
+ next = &(line->next);
+ }
+
+ if (!unit_tests) {
+ if (!get_options()->AvoidDiskWrites)
+ or_state_mark_dirty(get_or_state(), 0);
+ }
+
+ tor_free(histogram);
+}
+
+/**
+ * Shuffle the build times array.
+ *
+ * Adapted from http://en.wikipedia.org/wiki/Fisher-Yates_shuffle
+ */
+static void
+circuit_build_times_shuffle_and_store_array(circuit_build_times_t *cbt,
+ build_time_t *raw_times,
+ uint32_t num_times)
+{
+ uint32_t n = num_times;
+ if (num_times > CBT_NCIRCUITS_TO_OBSERVE) {
+ log_notice(LD_CIRC, "The number of circuit times that this Tor version "
+ "uses to calculate build times is less than the number stored "
+ "in your state file. Decreasing the circuit time history from "
+ "%lu to %d.", (unsigned long)num_times,
+ CBT_NCIRCUITS_TO_OBSERVE);
+ }
+
+ if (n > INT_MAX-1) {
+ log_warn(LD_CIRC, "For some insane reasons, you had %lu circuit build "
+ "observations in your state file. That's far too many; probably "
+ "there's a bug here.", (unsigned long)n);
+ n = INT_MAX-1;
+ }
+
+ /* This code can only be run on a compact array */
+ while (n-- > 1) {
+ int k = crypto_rand_int(n + 1); /* 0 <= k <= n. */
+ build_time_t tmp = raw_times[k];
+ raw_times[k] = raw_times[n];
+ raw_times[n] = tmp;
+ }
+
+ /* Since the times are now shuffled, take a random CBT_NCIRCUITS_TO_OBSERVE
+ * subset (ie the first CBT_NCIRCUITS_TO_OBSERVE values) */
+ for (n = 0; n < MIN(num_times, CBT_NCIRCUITS_TO_OBSERVE); n++) {
+ circuit_build_times_add_time(cbt, raw_times[n]);
+ }
+}
+
+/**
+ * Filter old synthetic timeouts that were created before the
+ * new right-censored Pareto calculation was deployed.
+ *
+ * Once all clients before 0.2.1.13-alpha are gone, this code
+ * will be unused.
+ */
+static int
+circuit_build_times_filter_timeouts(circuit_build_times_t *cbt)
+{
+ int num_filtered=0, i=0;
+ double timeout_rate = 0;
+ build_time_t max_timeout = 0;
+
+ timeout_rate = circuit_build_times_timeout_rate(cbt);
+ max_timeout = (build_time_t)cbt->close_ms;
+
+ for (i = 0; i < CBT_NCIRCUITS_TO_OBSERVE; i++) {
+ if (cbt->circuit_build_times[i] > max_timeout) {
+ build_time_t replaced = cbt->circuit_build_times[i];
+ num_filtered++;
+ cbt->circuit_build_times[i] = CBT_BUILD_ABANDONED;
+
+ log_debug(LD_CIRC, "Replaced timeout %d with %d", replaced,
+ cbt->circuit_build_times[i]);
+ }
+ }
+
+ log_info(LD_CIRC,
+ "We had %d timeouts out of %d build times, "
+ "and filtered %d above the max of %u",
+ (int)(cbt->total_build_times*timeout_rate),
+ cbt->total_build_times, num_filtered, max_timeout);
+
+ return num_filtered;
+}
+
+/**
+ * Load histogram from <b>state</b>, shuffling the resulting array
+ * after we do so. Use this result to estimate parameters and
+ * calculate the timeout.
+ *
+ * Return -1 on error.
+ */
+int
+circuit_build_times_parse_state(circuit_build_times_t *cbt,
+ or_state_t *state)
+{
+ int tot_values = 0;
+ uint32_t loaded_cnt = 0, N = 0;
+ config_line_t *line;
+ unsigned int i;
+ build_time_t *loaded_times;
+ int err = 0;
+ circuit_build_times_init(cbt);
+
+ if (circuit_build_times_disabled()) {
+ return 0;
+ }
+
+ /* build_time_t 0 means uninitialized */
+ loaded_times = tor_malloc_zero(sizeof(build_time_t)*state->TotalBuildTimes);
+
+ for (line = state->BuildtimeHistogram; line; line = line->next) {
+ smartlist_t *args = smartlist_new();
+ smartlist_split_string(args, line->value, " ",
+ SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
+ if (smartlist_len(args) < 2) {
+ log_warn(LD_GENERAL, "Unable to parse circuit build times: "
+ "Too few arguments to CircuitBuildTime");
+ err = 1;
+ SMARTLIST_FOREACH(args, char*, cp, tor_free(cp));
+ smartlist_free(args);
+ break;
+ } else {
+ const char *ms_str = smartlist_get(args,0);
+ const char *count_str = smartlist_get(args,1);
+ uint32_t count, k;
+ build_time_t ms;
+ int ok;
+ ms = (build_time_t)tor_parse_ulong(ms_str, 0, 0,
+ CBT_BUILD_TIME_MAX, &ok, NULL);
+ if (!ok) {
+ log_warn(LD_GENERAL, "Unable to parse circuit build times: "
+ "Unparsable bin number");
+ err = 1;
+ SMARTLIST_FOREACH(args, char*, cp, tor_free(cp));
+ smartlist_free(args);
+ break;
+ }
+ count = (uint32_t)tor_parse_ulong(count_str, 0, 0,
+ UINT32_MAX, &ok, NULL);
+ if (!ok) {
+ log_warn(LD_GENERAL, "Unable to parse circuit build times: "
+ "Unparsable bin count");
+ err = 1;
+ SMARTLIST_FOREACH(args, char*, cp, tor_free(cp));
+ smartlist_free(args);
+ break;
+ }
+
+ if (loaded_cnt+count+state->CircuitBuildAbandonedCount
+ > state->TotalBuildTimes) {
+ log_warn(LD_CIRC,
+ "Too many build times in state file. "
+ "Stopping short before %d",
+ loaded_cnt+count);
+ SMARTLIST_FOREACH(args, char*, cp, tor_free(cp));
+ smartlist_free(args);
+ break;
+ }
+
+ for (k = 0; k < count; k++) {
+ loaded_times[loaded_cnt++] = ms;
+ }
+ N++;
+ SMARTLIST_FOREACH(args, char*, cp, tor_free(cp));
+ smartlist_free(args);
+ }
+ }
+
+ log_info(LD_CIRC,
+ "Adding %d timeouts.", state->CircuitBuildAbandonedCount);
+ for (i=0; i < state->CircuitBuildAbandonedCount; i++) {
+ loaded_times[loaded_cnt++] = CBT_BUILD_ABANDONED;
+ }
+
+ if (loaded_cnt != state->TotalBuildTimes) {
+ log_warn(LD_CIRC,
+ "Corrupt state file? Build times count mismatch. "
+ "Read %d times, but file says %d", loaded_cnt,
+ state->TotalBuildTimes);
+ err = 1;
+ circuit_build_times_reset(cbt);
+ goto done;
+ }
+
+ circuit_build_times_shuffle_and_store_array(cbt, loaded_times, loaded_cnt);
+
+ /* Verify that we didn't overwrite any indexes */
+ for (i=0; i < CBT_NCIRCUITS_TO_OBSERVE; i++) {
+ if (!cbt->circuit_build_times[i])
+ break;
+ tot_values++;
+ }
+ log_info(LD_CIRC,
+ "Loaded %d/%d values from %d lines in circuit time histogram",
+ tot_values, cbt->total_build_times, N);
+
+ if (cbt->total_build_times != tot_values
+ || cbt->total_build_times > CBT_NCIRCUITS_TO_OBSERVE) {
+ log_warn(LD_CIRC,
+ "Corrupt state file? Shuffled build times mismatch. "
+ "Read %d times, but file says %d", tot_values,
+ state->TotalBuildTimes);
+ err = 1;
+ circuit_build_times_reset(cbt);
+ goto done;
+ }
+
+ circuit_build_times_set_timeout(cbt);
+
+ if (!state->CircuitBuildAbandonedCount && cbt->total_build_times) {
+ circuit_build_times_filter_timeouts(cbt);
+ }
+
+ done:
+ tor_free(loaded_times);
+ return err ? -1 : 0;
+}
+
+/**
+ * Estimates the Xm and Alpha parameters using
+ * http://en.wikipedia.org/wiki/Pareto_distribution#Parameter_estimation
+ *
+ * The notable difference is that we use mode instead of min to estimate Xm.
+ * This is because our distribution is frechet-like. We claim this is
+ * an acceptable approximation because we are only concerned with the
+ * accuracy of the CDF of the tail.
+ */
+STATIC int
+circuit_build_times_update_alpha(circuit_build_times_t *cbt)
+{
+ build_time_t *x=cbt->circuit_build_times;
+ double a = 0;
+ int n=0,i=0,abandoned_count=0;
+ build_time_t max_time=0;
+
+ /* http://en.wikipedia.org/wiki/Pareto_distribution#Parameter_estimation */
+ /* We sort of cheat here and make our samples slightly more pareto-like
+ * and less frechet-like. */
+ cbt->Xm = circuit_build_times_get_xm(cbt);
+
+ tor_assert(cbt->Xm > 0);
+
+ for (i=0; i< CBT_NCIRCUITS_TO_OBSERVE; i++) {
+ if (!x[i]) {
+ continue;
+ }
+
+ if (x[i] < cbt->Xm) {
+ a += tor_mathlog(cbt->Xm);
+ } else if (x[i] == CBT_BUILD_ABANDONED) {
+ abandoned_count++;
+ } else {
+ a += tor_mathlog(x[i]);
+ if (x[i] > max_time)
+ max_time = x[i];
+ }
+ n++;
+ }
+
+ /*
+ * We are erring and asserting here because this can only happen
+ * in codepaths other than startup. The startup state parsing code
+ * performs this same check, and resets state if it hits it. If we
+ * hit it at runtime, something serious has gone wrong.
+ */
+ if (n!=cbt->total_build_times) {
+ log_err(LD_CIRC, "Discrepancy in build times count: %d vs %d", n,
+ cbt->total_build_times);
+ }
+ tor_assert(n==cbt->total_build_times);
+
+ if (max_time <= 0) {
+ /* This can happen if Xm is actually the *maximum* value in the set.
+ * It can also happen if we've abandoned every single circuit somehow.
+ * In either case, tell the caller not to compute a new build timeout. */
+ log_warn(LD_BUG,
+ "Could not determine largest build time (%d). "
+ "Xm is %dms and we've abandoned %d out of %d circuits.", max_time,
+ cbt->Xm, abandoned_count, n);
+ return 0;
+ }
+
+ a += abandoned_count*tor_mathlog(max_time);
+
+ a -= n*tor_mathlog(cbt->Xm);
+ // Estimator comes from Eq #4 in:
+ // "Bayesian estimation based on trimmed samples from Pareto populations"
+ // by Arturo J. Fernández. We are right-censored only.
+ a = (n-abandoned_count)/a;
+
+ cbt->alpha = a;
+
+ return 1;
+}
+
+/**
+ * This is the Pareto Quantile Function. It calculates the point x
+ * in the distribution such that F(x) = quantile (ie quantile*100%
+ * of the mass of the density function is below x on the curve).
+ *
+ * We use it to calculate the timeout and also to generate synthetic
+ * values of time for circuits that timeout before completion.
+ *
+ * See http://en.wikipedia.org/wiki/Quantile_function,
+ * http://en.wikipedia.org/wiki/Inverse_transform_sampling and
+ * http://en.wikipedia.org/wiki/Pareto_distribution#Generating_a_
+ * random_sample_from_Pareto_distribution
+ * That's right. I'll cite wikipedia all day long.
+ *
+ * Return value is in milliseconds.
+ */
+STATIC double
+circuit_build_times_calculate_timeout(circuit_build_times_t *cbt,
+ double quantile)
+{
+ double ret;
+ tor_assert(quantile >= 0);
+ tor_assert(1.0-quantile > 0);
+ tor_assert(cbt->Xm > 0);
+
+ ret = cbt->Xm/pow(1.0-quantile,1.0/cbt->alpha);
+ if (ret > INT32_MAX) {
+ ret = INT32_MAX;
+ }
+ tor_assert(ret > 0);
+ return ret;
+}
+
+#ifdef TOR_UNIT_TESTS
+/** Pareto CDF */
+double
+circuit_build_times_cdf(circuit_build_times_t *cbt, double x)
+{
+ double ret;
+ tor_assert(cbt->Xm > 0);
+ ret = 1.0-pow(cbt->Xm/x,cbt->alpha);
+ tor_assert(0 <= ret && ret <= 1.0);
+ return ret;
+}
+#endif
+
+#ifdef TOR_UNIT_TESTS
+/**
+ * Generate a synthetic time using our distribution parameters.
+ *
+ * The return value will be within the [q_lo, q_hi) quantile points
+ * on the CDF.
+ */
+build_time_t
+circuit_build_times_generate_sample(circuit_build_times_t *cbt,
+ double q_lo, double q_hi)
+{
+ double randval = crypto_rand_double();
+ build_time_t ret;
+ double u;
+
+ /* Generate between [q_lo, q_hi) */
+ /*XXXX This is what nextafter is supposed to be for; we should use it on the
+ * platforms that support it. */
+ q_hi -= 1.0/(INT32_MAX);
+
+ tor_assert(q_lo >= 0);
+ tor_assert(q_hi < 1);
+ tor_assert(q_lo < q_hi);
+
+ u = q_lo + (q_hi-q_lo)*randval;
+
+ tor_assert(0 <= u && u < 1.0);
+ /* circuit_build_times_calculate_timeout returns <= INT32_MAX */
+ ret = (build_time_t)
+ tor_lround(circuit_build_times_calculate_timeout(cbt, u));
+ tor_assert(ret > 0);
+ return ret;
+}
+#endif
+
+#ifdef TOR_UNIT_TESTS
+/**
+ * Estimate an initial alpha parameter by solving the quantile
+ * function with a quantile point and a specific timeout value.
+ */
+void
+circuit_build_times_initial_alpha(circuit_build_times_t *cbt,
+ double quantile, double timeout_ms)
+{
+ // Q(u) = Xm/((1-u)^(1/a))
+ // Q(0.8) = Xm/((1-0.8))^(1/a)) = CircBuildTimeout
+ // CircBuildTimeout = Xm/((1-0.8))^(1/a))
+ // CircBuildTimeout = Xm*((1-0.8))^(-1/a))
+ // ln(CircBuildTimeout) = ln(Xm)+ln(((1-0.8)))*(-1/a)
+ // -ln(1-0.8)/(ln(CircBuildTimeout)-ln(Xm))=a
+ tor_assert(quantile >= 0);
+ tor_assert(cbt->Xm > 0);
+ cbt->alpha = tor_mathlog(1.0-quantile)/
+ (tor_mathlog(cbt->Xm)-tor_mathlog(timeout_ms));
+ tor_assert(cbt->alpha > 0);
+}
+#endif
+
+/**
+ * Returns true if we need circuits to be built
+ */
+int
+circuit_build_times_needs_circuits(const circuit_build_times_t *cbt)
+{
+ /* Return true if < MIN_CIRCUITS_TO_OBSERVE */
+ return !circuit_build_times_enough_to_compute(cbt);
+}
+
+/**
+ * Returns true if we should build a timeout test circuit
+ * right now.
+ */
+int
+circuit_build_times_needs_circuits_now(const circuit_build_times_t *cbt)
+{
+ return circuit_build_times_needs_circuits(cbt) &&
+ approx_time()-cbt->last_circ_at > circuit_build_times_test_frequency();
+}
+
+/**
+ * How long should we be unreachable before we think we need to check if
+ * our published IP address has changed.
+ */
+#define CIRCUIT_TIMEOUT_BEFORE_RECHECK_IP (60*3)
+
+/**
+ * Called to indicate that the network showed some signs of liveness,
+ * i.e. we received a cell.
+ *
+ * This is used by circuit_build_times_network_check_live() to decide
+ * if we should record the circuit build timeout or not.
+ *
+ * This function is called every time we receive a cell. Avoid
+ * syscalls, events, and other high-intensity work.
+ */
+void
+circuit_build_times_network_is_live(circuit_build_times_t *cbt)
+{
+ time_t now = approx_time();
+ if (cbt->liveness.nonlive_timeouts > 0) {
+ time_t time_since_live = now - cbt->liveness.network_last_live;
+ log_notice(LD_CIRC,
+ "Tor now sees network activity. Restoring circuit build "
+ "timeout recording. Network was down for %d seconds "
+ "during %d circuit attempts.",
+ (int)time_since_live,
+ cbt->liveness.nonlive_timeouts);
+ if (time_since_live > CIRCUIT_TIMEOUT_BEFORE_RECHECK_IP)
+ reschedule_descriptor_update_check();
+ }
+ cbt->liveness.network_last_live = now;
+ cbt->liveness.nonlive_timeouts = 0;
+}
+
+/**
+ * Called to indicate that we completed a circuit. Because this circuit
+ * succeeded, it doesn't count as a timeout-after-the-first-hop.
+ *
+ * This is used by circuit_build_times_network_check_changed() to determine
+ * if we had too many recent timeouts and need to reset our learned timeout
+ * to something higher.
+ */
+void
+circuit_build_times_network_circ_success(circuit_build_times_t *cbt)
+{
+ /* Check for NULLness because we might not be using adaptive timeouts */
+ if (cbt->liveness.timeouts_after_firsthop &&
+ cbt->liveness.num_recent_circs > 0) {
+ cbt->liveness.timeouts_after_firsthop[cbt->liveness.after_firsthop_idx]
+ = 0;
+ cbt->liveness.after_firsthop_idx++;
+ cbt->liveness.after_firsthop_idx %= cbt->liveness.num_recent_circs;
+ }
+}
+
+/**
+ * A circuit just timed out. If it failed after the first hop, record it
+ * in our history for later deciding if the network speed has changed.
+ *
+ * This is used by circuit_build_times_network_check_changed() to determine
+ * if we had too many recent timeouts and need to reset our learned timeout
+ * to something higher.
+ */
+static void
+circuit_build_times_network_timeout(circuit_build_times_t *cbt,
+ int did_onehop)
+{
+ /* Check for NULLness because we might not be using adaptive timeouts */
+ if (cbt->liveness.timeouts_after_firsthop &&
+ cbt->liveness.num_recent_circs > 0) {
+ if (did_onehop) {
+ cbt->liveness.timeouts_after_firsthop[cbt->liveness.after_firsthop_idx]
+ = 1;
+ cbt->liveness.after_firsthop_idx++;
+ cbt->liveness.after_firsthop_idx %= cbt->liveness.num_recent_circs;
+ }
+ }
+}
+
+/**
+ * A circuit was just forcibly closed. If there has been no recent network
+ * activity at all, but this circuit was launched back when we thought the
+ * network was live, increment the number of "nonlive" circuit timeouts.
+ *
+ * This is used by circuit_build_times_network_check_live() to decide
+ * if we should record the circuit build timeout or not.
+ */
+static void
+circuit_build_times_network_close(circuit_build_times_t *cbt,
+ int did_onehop, time_t start_time)
+{
+ time_t now = time(NULL);
+ /*
+ * Check if this is a timeout that was for a circuit that spent its
+ * entire existence during a time where we have had no network activity.
+ */
+ if (cbt->liveness.network_last_live < start_time) {
+ if (did_onehop) {
+ char last_live_buf[ISO_TIME_LEN+1];
+ char start_time_buf[ISO_TIME_LEN+1];
+ char now_buf[ISO_TIME_LEN+1];
+ format_local_iso_time(last_live_buf, cbt->liveness.network_last_live);
+ format_local_iso_time(start_time_buf, start_time);
+ format_local_iso_time(now_buf, now);
+ log_notice(LD_CIRC,
+ "A circuit somehow completed a hop while the network was "
+ "not live. The network was last live at %s, but the circuit "
+ "launched at %s. It's now %s. This could mean your clock "
+ "changed.", last_live_buf, start_time_buf, now_buf);
+ }
+ cbt->liveness.nonlive_timeouts++;
+ if (cbt->liveness.nonlive_timeouts == 1) {
+ log_notice(LD_CIRC,
+ "Tor has not observed any network activity for the past %d "
+ "seconds. Disabling circuit build timeout recording.",
+ (int)(now - cbt->liveness.network_last_live));
+ } else {
+ log_info(LD_CIRC,
+ "Got non-live timeout. Current count is: %d",
+ cbt->liveness.nonlive_timeouts);
+ }
+ }
+}
+
+/**
+ * When the network is not live, we do not record circuit build times.
+ *
+ * The network is considered not live if there has been at least one
+ * circuit build that began and ended (had its close_ms measurement
+ * period expire) since we last received a cell.
+ *
+ * Also has the side effect of rewinding the circuit time history
+ * in the case of recent liveness changes.
+ */
+int
+circuit_build_times_network_check_live(const circuit_build_times_t *cbt)
+{
+ if (cbt->liveness.nonlive_timeouts > 0) {
+ return 0;
+ }
+
+ return 1;
+}
+
+/**
+ * Returns true if we have seen more than MAX_RECENT_TIMEOUT_COUNT of
+ * the past RECENT_CIRCUITS time out after the first hop. Used to detect
+ * if the network connection has changed significantly, and if so,
+ * resets our circuit build timeout to the default.
+ *
+ * Also resets the entire timeout history in this case and causes us
+ * to restart the process of building test circuits and estimating a
+ * new timeout.
+ */
+STATIC int
+circuit_build_times_network_check_changed(circuit_build_times_t *cbt)
+{
+ int total_build_times = cbt->total_build_times;
+ int timeout_count=0;
+ int i;
+
+ if (cbt->liveness.timeouts_after_firsthop &&
+ cbt->liveness.num_recent_circs > 0) {
+ /* how many of our recent circuits made it to the first hop but then
+ * timed out? */
+ for (i = 0; i < cbt->liveness.num_recent_circs; i++) {
+ timeout_count += cbt->liveness.timeouts_after_firsthop[i];
+ }
+ }
+
+ /* If 80% of our recent circuits are timing out after the first hop,
+ * we need to re-estimate a new initial alpha and timeout. */
+ if (timeout_count < circuit_build_times_max_timeouts()) {
+ return 0;
+ }
+
+ circuit_build_times_reset(cbt);
+ if (cbt->liveness.timeouts_after_firsthop &&
+ cbt->liveness.num_recent_circs > 0) {
+ memset(cbt->liveness.timeouts_after_firsthop, 0,
+ sizeof(*cbt->liveness.timeouts_after_firsthop)*
+ cbt->liveness.num_recent_circs);
+ }
+ cbt->liveness.after_firsthop_idx = 0;
+
+ /* Check to see if this has happened before. If so, double the timeout
+ * to give people on abysmally bad network connections a shot at access */
+ if (cbt->timeout_ms >= circuit_build_times_get_initial_timeout()) {
+ if (cbt->timeout_ms > INT32_MAX/2 || cbt->close_ms > INT32_MAX/2) {
+ log_warn(LD_CIRC, "Insanely large circuit build timeout value. "
+ "(timeout = %fmsec, close = %fmsec)",
+ cbt->timeout_ms, cbt->close_ms);
+ } else {
+ cbt->timeout_ms *= 2;
+ cbt->close_ms *= 2;
+ }
+ } else {
+ cbt->close_ms = cbt->timeout_ms
+ = circuit_build_times_get_initial_timeout();
+ }
+
+ cbt_control_event_buildtimeout_set(cbt, BUILDTIMEOUT_SET_EVENT_RESET);
+
+ log_notice(LD_CIRC,
+ "Your network connection speed appears to have changed. Resetting "
+ "timeout to %lds after %d timeouts and %d buildtimes.",
+ tor_lround(cbt->timeout_ms/1000), timeout_count,
+ total_build_times);
+
+ return 1;
+}
+
+/**
+ * Count the number of timeouts in a set of cbt data.
+ */
+double
+circuit_build_times_timeout_rate(const circuit_build_times_t *cbt)
+{
+ int i=0,timeouts=0;
+ for (i = 0; i < CBT_NCIRCUITS_TO_OBSERVE; i++) {
+ if (cbt->circuit_build_times[i] >= cbt->timeout_ms) {
+ timeouts++;
+ }
+ }
+
+ if (!cbt->total_build_times)
+ return 0;
+
+ return ((double)timeouts)/cbt->total_build_times;
+}
+
+/**
+ * Count the number of closed circuits in a set of cbt data.
+ */
+double
+circuit_build_times_close_rate(const circuit_build_times_t *cbt)
+{
+ int i=0,closed=0;
+ for (i = 0; i < CBT_NCIRCUITS_TO_OBSERVE; i++) {
+ if (cbt->circuit_build_times[i] == CBT_BUILD_ABANDONED) {
+ closed++;
+ }
+ }
+
+ if (!cbt->total_build_times)
+ return 0;
+
+ return ((double)closed)/cbt->total_build_times;
+}
+
+/**
+ * Store a timeout as a synthetic value.
+ *
+ * Returns true if the store was successful and we should possibly
+ * update our timeout estimate.
+ */
+int
+circuit_build_times_count_close(circuit_build_times_t *cbt,
+ int did_onehop,
+ time_t start_time)
+{
+ if (circuit_build_times_disabled()) {
+ cbt->close_ms = cbt->timeout_ms
+ = circuit_build_times_get_initial_timeout();
+ return 0;
+ }
+
+ /* Record this force-close to help determine if the network is dead */
+ circuit_build_times_network_close(cbt, did_onehop, start_time);
+
+ /* Only count timeouts if network is live.. */
+ if (!circuit_build_times_network_check_live(cbt)) {
+ return 0;
+ }
+
+ circuit_build_times_add_time(cbt, CBT_BUILD_ABANDONED);
+ return 1;
+}
+
+/**
+ * Update timeout counts to determine if we need to expire
+ * our build time history due to excessive timeouts.
+ *
+ * We do not record any actual time values at this stage;
+ * we are only interested in recording the fact that a timeout
+ * happened. We record the time values via
+ * circuit_build_times_count_close() and circuit_build_times_add_time().
+ */
+void
+circuit_build_times_count_timeout(circuit_build_times_t *cbt,
+ int did_onehop)
+{
+ if (circuit_build_times_disabled()) {
+ cbt->close_ms = cbt->timeout_ms
+ = circuit_build_times_get_initial_timeout();
+ return;
+ }
+
+ /* Register the fact that a timeout just occurred. */
+ circuit_build_times_network_timeout(cbt, did_onehop);
+
+ /* If there are a ton of timeouts, we should reset
+ * the circuit build timeout. */
+ circuit_build_times_network_check_changed(cbt);
+}
+
+/**
+ * Estimate a new timeout based on history and set our timeout
+ * variable accordingly.
+ */
+static int
+circuit_build_times_set_timeout_worker(circuit_build_times_t *cbt)
+{
+ build_time_t max_time;
+ if (!circuit_build_times_enough_to_compute(cbt))
+ return 0;
+
+ if (!circuit_build_times_update_alpha(cbt))
+ return 0;
+
+ cbt->timeout_ms = circuit_build_times_calculate_timeout(cbt,
+ circuit_build_times_quantile_cutoff());
+
+ cbt->close_ms = circuit_build_times_calculate_timeout(cbt,
+ circuit_build_times_close_quantile());
+
+ max_time = circuit_build_times_max(cbt);
+
+ if (cbt->timeout_ms > max_time) {
+ log_info(LD_CIRC,
+ "Circuit build timeout of %dms is beyond the maximum build "
+ "time we have ever observed. Capping it to %dms.",
+ (int)cbt->timeout_ms, max_time);
+ cbt->timeout_ms = max_time;
+ }
+
+ if (max_time < INT32_MAX/2 && cbt->close_ms > 2*max_time) {
+ log_info(LD_CIRC,
+ "Circuit build measurement period of %dms is more than twice "
+ "the maximum build time we have ever observed. Capping it to "
+ "%dms.", (int)cbt->close_ms, 2*max_time);
+ cbt->close_ms = 2*max_time;
+ }
+
+ /* Sometimes really fast guard nodes give us such a steep curve
+ * that this ends up being not that much greater than timeout_ms.
+ * Make it be at least 1 min to handle this case. */
+ cbt->close_ms = MAX(cbt->close_ms, circuit_build_times_initial_timeout());
+
+ cbt->have_computed_timeout = 1;
+ return 1;
+}
+
+/**
+ * Exposed function to compute a new timeout. Dispatches events and
+ * also filters out extremely high timeout values.
+ */
+void
+circuit_build_times_set_timeout(circuit_build_times_t *cbt)
+{
+ long prev_timeout = tor_lround(cbt->timeout_ms/1000);
+ double timeout_rate;
+
+ /*
+ * Just return if we aren't using adaptive timeouts
+ */
+ if (circuit_build_times_disabled())
+ return;
+
+ if (!circuit_build_times_set_timeout_worker(cbt))
+ return;
+
+ if (cbt->timeout_ms < circuit_build_times_min_timeout()) {
+ log_info(LD_CIRC, "Set buildtimeout to low value %fms. Setting to %dms",
+ cbt->timeout_ms, circuit_build_times_min_timeout());
+ cbt->timeout_ms = circuit_build_times_min_timeout();
+ if (cbt->close_ms < cbt->timeout_ms) {
+ /* This shouldn't happen because of MAX() in timeout_worker above,
+ * but doing it just in case */
+ cbt->close_ms = circuit_build_times_initial_timeout();
+ }
+ }
+
+ cbt_control_event_buildtimeout_set(cbt, BUILDTIMEOUT_SET_EVENT_COMPUTED);
+
+ timeout_rate = circuit_build_times_timeout_rate(cbt);
+
+ if (prev_timeout > tor_lround(cbt->timeout_ms/1000)) {
+ log_info(LD_CIRC,
+ "Based on %d circuit times, it looks like we don't need to "
+ "wait so long for circuits to finish. We will now assume a "
+ "circuit is too slow to use after waiting %ld seconds.",
+ cbt->total_build_times,
+ tor_lround(cbt->timeout_ms/1000));
+ log_info(LD_CIRC,
+ "Circuit timeout data: %fms, %fms, Xm: %d, a: %f, r: %f",
+ cbt->timeout_ms, cbt->close_ms, cbt->Xm, cbt->alpha,
+ timeout_rate);
+ } else if (prev_timeout < tor_lround(cbt->timeout_ms/1000)) {
+ log_info(LD_CIRC,
+ "Based on %d circuit times, it looks like we need to wait "
+ "longer for circuits to finish. We will now assume a "
+ "circuit is too slow to use after waiting %ld seconds.",
+ cbt->total_build_times,
+ tor_lround(cbt->timeout_ms/1000));
+ log_info(LD_CIRC,
+ "Circuit timeout data: %fms, %fms, Xm: %d, a: %f, r: %f",
+ cbt->timeout_ms, cbt->close_ms, cbt->Xm, cbt->alpha,
+ timeout_rate);
+ } else {
+ log_info(LD_CIRC,
+ "Set circuit build timeout to %lds (%fms, %fms, Xm: %d, a: %f,"
+ " r: %f) based on %d circuit times",
+ tor_lround(cbt->timeout_ms/1000),
+ cbt->timeout_ms, cbt->close_ms, cbt->Xm, cbt->alpha, timeout_rate,
+ cbt->total_build_times);
+ }
+}
+
+#ifdef TOR_UNIT_TESTS
+/** Make a note that we're running unit tests (rather than running Tor
+ * itself), so we avoid clobbering our state file. */
+void
+circuitbuild_running_unit_tests(void)
+{
+ unit_tests = 1;
+}
+#endif
+
+void
+circuit_build_times_update_last_circ(circuit_build_times_t *cbt)
+{
+ cbt->last_circ_at = approx_time();
+}
+
+static void
+cbt_control_event_buildtimeout_set(const circuit_build_times_t *cbt,
+ buildtimeout_set_event_t type)
+{
+ char *args = NULL;
+ double qnt;
+
+ switch (type) {
+ case BUILDTIMEOUT_SET_EVENT_RESET:
+ case BUILDTIMEOUT_SET_EVENT_SUSPENDED:
+ case BUILDTIMEOUT_SET_EVENT_DISCARD:
+ qnt = 1.0;
+ break;
+ case BUILDTIMEOUT_SET_EVENT_COMPUTED:
+ case BUILDTIMEOUT_SET_EVENT_RESUME:
+ default:
+ qnt = circuit_build_times_quantile_cutoff();
+ break;
+ }
+
+ tor_asprintf(&args, "TOTAL_TIMES=%lu "
+ "TIMEOUT_MS=%lu XM=%lu ALPHA=%f CUTOFF_QUANTILE=%f "
+ "TIMEOUT_RATE=%f CLOSE_MS=%lu CLOSE_RATE=%f",
+ (unsigned long)cbt->total_build_times,
+ (unsigned long)cbt->timeout_ms,
+ (unsigned long)cbt->Xm, cbt->alpha, qnt,
+ circuit_build_times_timeout_rate(cbt),
+ (unsigned long)cbt->close_ms,
+ circuit_build_times_close_rate(cbt));
+
+ control_event_buildtimeout_set(type, args);
+
+ tor_free(args);
+}
+
diff --git a/src/or/circuitstats.h b/src/or/circuitstats.h
new file mode 100644
index 000000000..3343310b8
--- /dev/null
+++ b/src/or/circuitstats.h
@@ -0,0 +1,98 @@
+/* Copyright (c) 2001 Matej Pfajfar.
+ * Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file circuitstats.h
+ * \brief Header file for circuitstats.c
+ **/
+
+#ifndef TOR_CIRCUITSTATS_H
+#define TOR_CIRCUITSTATS_H
+
+const circuit_build_times_t *get_circuit_build_times(void);
+circuit_build_times_t *get_circuit_build_times_mutable(void);
+double get_circuit_build_close_time_ms(void);
+double get_circuit_build_timeout_ms(void);
+
+int circuit_build_times_disabled(void);
+int circuit_build_times_enough_to_compute(const circuit_build_times_t *cbt);
+void circuit_build_times_update_state(const circuit_build_times_t *cbt,
+ or_state_t *state);
+int circuit_build_times_parse_state(circuit_build_times_t *cbt,
+ or_state_t *state);
+void circuit_build_times_count_timeout(circuit_build_times_t *cbt,
+ int did_onehop);
+int circuit_build_times_count_close(circuit_build_times_t *cbt,
+ int did_onehop, time_t start_time);
+void circuit_build_times_set_timeout(circuit_build_times_t *cbt);
+int circuit_build_times_add_time(circuit_build_times_t *cbt,
+ build_time_t time);
+int circuit_build_times_needs_circuits(const circuit_build_times_t *cbt);
+
+int circuit_build_times_needs_circuits_now(const circuit_build_times_t *cbt);
+void circuit_build_times_init(circuit_build_times_t *cbt);
+void circuit_build_times_free_timeouts(circuit_build_times_t *cbt);
+void circuit_build_times_new_consensus_params(circuit_build_times_t *cbt,
+ networkstatus_t *ns);
+double circuit_build_times_timeout_rate(const circuit_build_times_t *cbt);
+double circuit_build_times_close_rate(const circuit_build_times_t *cbt);
+
+void circuit_build_times_update_last_circ(circuit_build_times_t *cbt);
+
+#ifdef CIRCUITSTATS_PRIVATE
+STATIC double circuit_build_times_calculate_timeout(circuit_build_times_t *cbt,
+ double quantile);
+STATIC int circuit_build_times_update_alpha(circuit_build_times_t *cbt);
+STATIC void circuit_build_times_reset(circuit_build_times_t *cbt);
+
+/* Network liveness functions */
+STATIC int circuit_build_times_network_check_changed(
+ circuit_build_times_t *cbt);
+#endif
+
+#ifdef TOR_UNIT_TESTS
+build_time_t circuit_build_times_generate_sample(circuit_build_times_t *cbt,
+ double q_lo, double q_hi);
+double circuit_build_times_cdf(circuit_build_times_t *cbt, double x);
+void circuit_build_times_initial_alpha(circuit_build_times_t *cbt,
+ double quantile, double time_ms);
+void circuitbuild_running_unit_tests(void);
+#endif
+
+/* Network liveness functions */
+void circuit_build_times_network_is_live(circuit_build_times_t *cbt);
+int circuit_build_times_network_check_live(const circuit_build_times_t *cbt);
+void circuit_build_times_network_circ_success(circuit_build_times_t *cbt);
+
+#ifdef CIRCUITSTATS_PRIVATE
+/** Structure for circuit build times history */
+struct circuit_build_times_s {
+ /** The circular array of recorded build times in milliseconds */
+ build_time_t circuit_build_times[CBT_NCIRCUITS_TO_OBSERVE];
+ /** Current index in the circuit_build_times circular array */
+ int build_times_idx;
+ /** Total number of build times accumulated. Max CBT_NCIRCUITS_TO_OBSERVE */
+ int total_build_times;
+ /** Information about the state of our local network connection */
+ network_liveness_t liveness;
+ /** Last time we built a circuit. Used to decide to build new test circs */
+ time_t last_circ_at;
+ /** "Minimum" value of our pareto distribution (actually mode) */
+ build_time_t Xm;
+ /** alpha exponent for pareto dist. */
+ double alpha;
+ /** Have we computed a timeout? */
+ int have_computed_timeout;
+ /** The exact value for that timeout in milliseconds. Stored as a double
+ * to maintain precision from calculations to and from quantile value. */
+ double timeout_ms;
+ /** How long we wait before actually closing the circuit. */
+ double close_ms;
+};
+#endif
+
+#endif
+
diff --git a/src/or/circuituse.c b/src/or/circuituse.c
index 20f124eb4..023bd4cac 100644
--- a/src/or/circuituse.c
+++ b/src/or/circuituse.c
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -10,13 +10,18 @@
**/
#include "or.h"
+#include "addressmap.h"
+#include "channel.h"
+#include "circpathbias.h"
#include "circuitbuild.h"
#include "circuitlist.h"
+#include "circuitstats.h"
#include "circuituse.h"
#include "config.h"
#include "connection.h"
#include "connection_edge.h"
#include "control.h"
+#include "entrynodes.h"
#include "nodelist.h"
#include "networkstatus.h"
#include "policies.h"
@@ -27,12 +32,6 @@
#include "router.h"
#include "routerlist.h"
-/********* START VARIABLES **********/
-
-extern circuit_t *global_circuitlist; /* from circuitlist.c */
-
-/********* END VARIABLES ************/
-
static void circuit_expire_old_circuits_clientside(void);
static void circuit_increment_failure_count(void);
@@ -53,7 +52,7 @@ circuit_is_acceptable(const origin_circuit_t *origin_circ,
tor_assert(conn);
tor_assert(conn->socks_request);
- if (must_be_open && (circ->state != CIRCUIT_STATE_OPEN || !circ->n_conn))
+ if (must_be_open && (circ->state != CIRCUIT_STATE_OPEN || !circ->n_chan))
return 0; /* ignore non-open circs */
if (circ->marked_for_close)
return 0;
@@ -81,10 +80,14 @@ circuit_is_acceptable(const origin_circuit_t *origin_circ,
}
if (purpose == CIRCUIT_PURPOSE_C_GENERAL ||
- purpose == CIRCUIT_PURPOSE_C_REND_JOINED)
+ purpose == CIRCUIT_PURPOSE_C_REND_JOINED) {
if (circ->timestamp_dirty &&
circ->timestamp_dirty+get_options()->MaxCircuitDirtiness <= now)
return 0;
+ }
+
+ if (origin_circ->unusable_for_new_conns)
+ return 0;
/* decide if this circ is suitable for this conn */
@@ -101,6 +104,8 @@ circuit_is_acceptable(const origin_circuit_t *origin_circ,
return 0;
if (purpose == CIRCUIT_PURPOSE_C_GENERAL) {
+ tor_addr_t addr;
+ const int family = tor_addr_parse(&addr, conn->socks_request->address);
if (!exitnode && !build_state->onehop_tunnel) {
log_debug(LD_CIRC,"Not considering circuit with unknown router.");
return 0; /* this circuit is screwed and doesn't know it yet,
@@ -121,9 +126,7 @@ circuit_is_acceptable(const origin_circuit_t *origin_circ,
return 0; /* this is a circuit to somewhere else */
if (tor_digest_is_zero(digest)) {
/* we don't know the digest; have to compare addr:port */
- tor_addr_t addr;
- int r = tor_addr_parse(&addr, conn->socks_request->address);
- if (r < 0 ||
+ if (family < 0 ||
!tor_addr_eq(&build_state->chosen_exit->addr, &addr) ||
build_state->chosen_exit->port != conn->socks_request->port)
return 0;
@@ -135,6 +138,13 @@ circuit_is_acceptable(const origin_circuit_t *origin_circ,
return 0;
}
}
+ if (origin_circ->prepend_policy && family != -1) {
+ int r = compare_tor_addr_to_addr_policy(&addr,
+ conn->socks_request->port,
+ origin_circ->prepend_policy);
+ if (r == ADDR_POLICY_REJECTED)
+ return 0;
+ }
if (exitnode && !connection_ap_can_use_exit(conn, exitnode)) {
/* can't exit from this router */
return 0;
@@ -172,6 +182,13 @@ circuit_is_better(const origin_circuit_t *oa, const origin_circuit_t *ob,
const uint8_t purpose = ENTRY_TO_CONN(conn)->purpose;
int a_bits, b_bits;
+ /* If one of the circuits was allowed to live due to relaxing its timeout,
+ * it is definitely worse (it's probably a much slower path). */
+ if (oa->relaxed_timeout && !ob->relaxed_timeout)
+ return 0; /* ob is better. It's not relaxed. */
+ if (!oa->relaxed_timeout && ob->relaxed_timeout)
+ return 1; /* oa is better. It's not relaxed. */
+
switch (purpose) {
case CIRCUIT_PURPOSE_C_GENERAL:
/* if it's used but less dirty it's best;
@@ -183,7 +200,7 @@ circuit_is_better(const origin_circuit_t *oa, const origin_circuit_t *ob,
return 1;
} else {
if (a->timestamp_dirty ||
- timercmp(&a->timestamp_created, &b->timestamp_created, >))
+ timercmp(&a->timestamp_began, &b->timestamp_began, >))
return 1;
if (ob->build_state->is_internal)
/* XXX023 what the heck is this internal thing doing here. I
@@ -264,22 +281,24 @@ circuit_get_best(const entry_connection_t *conn,
tor_gettimeofday(&now);
- for (circ=global_circuitlist;circ;circ = circ->next) {
+ TOR_LIST_FOREACH(circ, circuit_get_global_list(), head) {
origin_circuit_t *origin_circ;
if (!CIRCUIT_IS_ORIGIN(circ))
continue;
origin_circ = TO_ORIGIN_CIRCUIT(circ);
- if (!circuit_is_acceptable(origin_circ,conn,must_be_open,purpose,
- need_uptime,need_internal,now.tv_sec))
- continue;
+ /* Log an info message if we're going to launch a new intro circ in
+ * parallel */
if (purpose == CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT &&
- !must_be_open && circ->state != CIRCUIT_STATE_OPEN &&
- tv_mdiff(&now, &circ->timestamp_created) > circ_times.timeout_ms) {
- intro_going_on_but_too_old = 1;
- continue;
+ !must_be_open && origin_circ->hs_circ_has_timed_out) {
+ intro_going_on_but_too_old = 1;
+ continue;
}
+ if (!circuit_is_acceptable(origin_circ,conn,must_be_open,purpose,
+ need_uptime,need_internal, (time_t)now.tv_sec))
+ continue;
+
/* now this is an acceptable circ to hand back. but that doesn't
* mean it's the *best* circ to hand back. try to decide.
*/
@@ -303,7 +322,7 @@ count_pending_general_client_circuits(void)
int count = 0;
- for (circ = global_circuitlist; circ; circ = circ->next) {
+ TOR_LIST_FOREACH(circ, circuit_get_global_list(), head) {
if (circ->marked_for_close ||
circ->state == CIRCUIT_STATE_OPEN ||
circ->purpose != CIRCUIT_PURPOSE_C_GENERAL ||
@@ -351,18 +370,40 @@ circuit_conforms_to_options(const origin_circuit_t *circ,
void
circuit_expire_building(void)
{
- circuit_t *victim, *next_circ = global_circuitlist;
+ circuit_t *victim, *next_circ;
/* circ_times.timeout_ms and circ_times.close_ms are from
* circuit_build_times_get_initial_timeout() if we haven't computed
* custom timeouts yet */
struct timeval general_cutoff, begindir_cutoff, fourhop_cutoff,
- cannibalize_cutoff, close_cutoff, extremely_old_cutoff,
- hs_extremely_old_cutoff;
+ close_cutoff, extremely_old_cutoff, hs_extremely_old_cutoff,
+ cannibalized_cutoff, c_intro_cutoff, s_intro_cutoff, stream_cutoff;
const or_options_t *options = get_options();
struct timeval now;
cpath_build_state_t *build_state;
+ int any_opened_circs = 0;
tor_gettimeofday(&now);
+
+ /* Check to see if we have any opened circuits. If we don't,
+ * we want to be more lenient with timeouts, in case the
+ * user has relocated and/or changed network connections.
+ * See bug #3443. */
+ TOR_LIST_FOREACH(next_circ, circuit_get_global_list(), head) {
+ if (!CIRCUIT_IS_ORIGIN(next_circ) || /* didn't originate here */
+ next_circ->marked_for_close) { /* don't mess with marked circs */
+ continue;
+ }
+
+ if (TO_ORIGIN_CIRCUIT(next_circ)->has_opened &&
+ next_circ->state == CIRCUIT_STATE_OPEN &&
+ TO_ORIGIN_CIRCUIT(next_circ)->build_state &&
+ TO_ORIGIN_CIRCUIT(next_circ)->build_state->desired_path_len
+ == DEFAULT_ROUTE_LEN) {
+ any_opened_circs = 1;
+ break;
+ }
+ }
+
#define SET_CUTOFF(target, msec) do { \
long ms = tor_lround(msec); \
struct timeval diff; \
@@ -371,44 +412,167 @@ circuit_expire_building(void)
timersub(&now, &diff, &target); \
} while (0)
- SET_CUTOFF(general_cutoff, circ_times.timeout_ms);
- SET_CUTOFF(begindir_cutoff, circ_times.timeout_ms);
- SET_CUTOFF(fourhop_cutoff, circ_times.timeout_ms * (4/3.0));
- SET_CUTOFF(cannibalize_cutoff, circ_times.timeout_ms / 2.0);
- SET_CUTOFF(close_cutoff, circ_times.close_ms);
- SET_CUTOFF(extremely_old_cutoff, circ_times.close_ms*2 + 1000);
+ /**
+ * Because circuit build timeout is calculated only based on 3 hop
+ * general purpose circuit construction, we need to scale the timeout
+ * to make it properly apply to longer circuits, and circuits of
+ * certain usage types. The following diagram illustrates how we
+ * derive the scaling below. In short, we calculate the number
+ * of times our telescoping-based circuit construction causes cells
+ * to traverse each link for the circuit purpose types in question,
+ * and then assume each link is equivalent.
+ *
+ * OP --a--> A --b--> B --c--> C
+ * OP --a--> A --b--> B --c--> C --d--> D
+ *
+ * Let h = a = b = c = d
+ *
+ * Three hops (general_cutoff)
+ * RTTs = 3a + 2b + c
+ * RTTs = 6h
+ * Cannibalized:
+ * RTTs = a+b+c+d
+ * RTTs = 4h
+ * Four hops:
+ * RTTs = 4a + 3b + 2c + d
+ * RTTs = 10h
+ * Client INTRODUCE1+ACK: // XXX: correct?
+ * RTTs = 5a + 4b + 3c + 2d
+ * RTTs = 14h
+ * Server intro:
+ * RTTs = 4a + 3b + 2c
+ * RTTs = 9h
+ */
+ SET_CUTOFF(general_cutoff, get_circuit_build_timeout_ms());
+ SET_CUTOFF(begindir_cutoff, get_circuit_build_timeout_ms());
+
+ /* > 3hop circs seem to have a 1.0 second delay on their cannibalized
+ * 4th hop. */
+ SET_CUTOFF(fourhop_cutoff, get_circuit_build_timeout_ms() * (10/6.0) + 1000);
+
+ /* CIRCUIT_PURPOSE_C_ESTABLISH_REND behaves more like a RELAY cell.
+ * Use the stream cutoff (more or less). */
+ SET_CUTOFF(stream_cutoff, MAX(options->CircuitStreamTimeout,15)*1000 + 1000);
+
+ /* Be lenient with cannibalized circs. They already survived the official
+ * CBT, and they're usually not performance-critical. */
+ SET_CUTOFF(cannibalized_cutoff,
+ MAX(get_circuit_build_close_time_ms()*(4/6.0),
+ options->CircuitStreamTimeout * 1000) + 1000);
+
+ /* Intro circs have an extra round trip (and are also 4 hops long) */
+ SET_CUTOFF(c_intro_cutoff, get_circuit_build_timeout_ms() * (14/6.0) + 1000);
+
+ /* Server intro circs have an extra round trip */
+ SET_CUTOFF(s_intro_cutoff, get_circuit_build_timeout_ms() * (9/6.0) + 1000);
+
+ SET_CUTOFF(close_cutoff, get_circuit_build_close_time_ms());
+ SET_CUTOFF(extremely_old_cutoff, get_circuit_build_close_time_ms()*2 + 1000);
SET_CUTOFF(hs_extremely_old_cutoff,
- MAX(circ_times.close_ms*2 + 1000,
+ MAX(get_circuit_build_close_time_ms()*2 + 1000,
options->SocksTimeout * 1000));
- while (next_circ) {
+ TOR_LIST_FOREACH(next_circ, circuit_get_global_list(), head) {
struct timeval cutoff;
victim = next_circ;
- next_circ = next_circ->next;
if (!CIRCUIT_IS_ORIGIN(victim) || /* didn't originate here */
- victim->marked_for_close) /* don't mess with marked circs */
+ victim->marked_for_close) /* don't mess with marked circs */
+ continue;
+
+ /* If we haven't yet started the first hop, it means we don't have
+ * any orconns available, and thus have not started counting time yet
+ * for this circuit. See circuit_deliver_create_cell() and uses of
+ * timestamp_began.
+ *
+ * Continue to wait in this case. The ORConn should timeout
+ * independently and kill us then.
+ */
+ if (TO_ORIGIN_CIRCUIT(victim)->cpath->state == CPATH_STATE_CLOSED) {
continue;
+ }
build_state = TO_ORIGIN_CIRCUIT(victim)->build_state;
if (build_state && build_state->onehop_tunnel)
cutoff = begindir_cutoff;
- else if (build_state && build_state->desired_path_len == 4
- && !TO_ORIGIN_CIRCUIT(victim)->has_opened)
- cutoff = fourhop_cutoff;
- else if (TO_ORIGIN_CIRCUIT(victim)->has_opened)
- cutoff = cannibalize_cutoff;
else if (victim->purpose == CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT)
cutoff = close_cutoff;
+ else if (victim->purpose == CIRCUIT_PURPOSE_C_INTRODUCING ||
+ victim->purpose == CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT)
+ cutoff = c_intro_cutoff;
+ else if (victim->purpose == CIRCUIT_PURPOSE_S_ESTABLISH_INTRO)
+ cutoff = s_intro_cutoff;
+ else if (victim->purpose == CIRCUIT_PURPOSE_C_ESTABLISH_REND)
+ cutoff = stream_cutoff;
+ else if (victim->purpose == CIRCUIT_PURPOSE_PATH_BIAS_TESTING)
+ cutoff = close_cutoff;
+ else if (TO_ORIGIN_CIRCUIT(victim)->has_opened &&
+ victim->state != CIRCUIT_STATE_OPEN)
+ cutoff = cannibalized_cutoff;
+ else if (build_state && build_state->desired_path_len >= 4)
+ cutoff = fourhop_cutoff;
else
cutoff = general_cutoff;
if (TO_ORIGIN_CIRCUIT(victim)->hs_circ_has_timed_out)
cutoff = hs_extremely_old_cutoff;
- if (timercmp(&victim->timestamp_created, &cutoff, >))
+ if (timercmp(&victim->timestamp_began, &cutoff, >))
continue; /* it's still young, leave it alone */
+ /* We need to double-check the opened state here because
+ * we don't want to consider opened 1-hop dircon circuits for
+ * deciding when to relax the timeout, but we *do* want to relax
+ * those circuits too if nothing else is opened *and* they still
+ * aren't either. */
+ if (!any_opened_circs && victim->state != CIRCUIT_STATE_OPEN) {
+ /* It's still young enough that we wouldn't close it, right? */
+ if (timercmp(&victim->timestamp_began, &close_cutoff, >)) {
+ if (!TO_ORIGIN_CIRCUIT(victim)->relaxed_timeout) {
+ int first_hop_succeeded = TO_ORIGIN_CIRCUIT(victim)->cpath->state
+ == CPATH_STATE_OPEN;
+ log_info(LD_CIRC,
+ "No circuits are opened. Relaxing timeout for circuit %d "
+ "(a %s %d-hop circuit in state %s with channel state %s). "
+ "%d guards are live.",
+ TO_ORIGIN_CIRCUIT(victim)->global_identifier,
+ circuit_purpose_to_string(victim->purpose),
+ TO_ORIGIN_CIRCUIT(victim)->build_state ?
+ TO_ORIGIN_CIRCUIT(victim)->build_state->desired_path_len :
+ -1,
+ circuit_state_to_string(victim->state),
+ channel_state_to_string(victim->n_chan->state),
+ num_live_entry_guards(0));
+
+ /* We count the timeout here for CBT, because technically this
+ * was a timeout, and the timeout value needs to reset if we
+ * see enough of them. Note this means we also need to avoid
+ * double-counting below, too. */
+ circuit_build_times_count_timeout(get_circuit_build_times_mutable(),
+ first_hop_succeeded);
+ TO_ORIGIN_CIRCUIT(victim)->relaxed_timeout = 1;
+ }
+ continue;
+ } else {
+ static ratelim_t relax_timeout_limit = RATELIM_INIT(3600);
+ const double build_close_ms = get_circuit_build_close_time_ms();
+ log_fn_ratelim(&relax_timeout_limit, LOG_NOTICE, LD_CIRC,
+ "No circuits are opened. Relaxed timeout for circuit %d "
+ "(a %s %d-hop circuit in state %s with channel state %s) to "
+ "%ldms. However, it appears the circuit has timed out "
+ "anyway. %d guards are live.",
+ TO_ORIGIN_CIRCUIT(victim)->global_identifier,
+ circuit_purpose_to_string(victim->purpose),
+ TO_ORIGIN_CIRCUIT(victim)->build_state ?
+ TO_ORIGIN_CIRCUIT(victim)->build_state->desired_path_len :
+ -1,
+ circuit_state_to_string(victim->state),
+ channel_state_to_string(victim->n_chan->state),
+ (long)build_close_ms,
+ num_live_entry_guards(0));
+ }
+ }
+
#if 0
/* some debug logs, to help track bugs */
if (victim->purpose >= CIRCUIT_PURPOSE_C_INTRODUCING &&
@@ -436,8 +600,6 @@ circuit_expire_building(void)
default: /* most open circuits can be left alone. */
continue; /* yes, continue inside a switch refers to the nearest
* enclosing loop. C is smart. */
- case CIRCUIT_PURPOSE_C_ESTABLISH_REND:
- case CIRCUIT_PURPOSE_C_INTRODUCING:
case CIRCUIT_PURPOSE_S_ESTABLISH_INTRO:
break; /* too old, need to die */
case CIRCUIT_PURPOSE_C_REND_READY:
@@ -449,6 +611,19 @@ circuit_expire_building(void)
victim->timestamp_dirty > cutoff.tv_sec)
continue;
break;
+ case CIRCUIT_PURPOSE_PATH_BIAS_TESTING:
+ /* Open path bias testing circuits are given a long
+ * time to complete the test, but not forever */
+ TO_ORIGIN_CIRCUIT(victim)->path_state = PATH_STATE_USE_FAILED;
+ break;
+ case CIRCUIT_PURPOSE_C_INTRODUCING:
+ /* We keep old introducing circuits around for
+ * a while in parallel, and they can end up "opened".
+ * We decide below if we're going to mark them timed
+ * out and eventually close them.
+ */
+ break;
+ case CIRCUIT_PURPOSE_C_ESTABLISH_REND:
case CIRCUIT_PURPOSE_C_REND_READY_INTRO_ACKED:
case CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT:
/* rend and intro circs become dirty each time they
@@ -474,7 +649,7 @@ circuit_expire_building(void)
}
if (circuit_timeout_want_to_count_circ(TO_ORIGIN_CIRCUIT(victim)) &&
- circuit_build_times_enough_to_compute(&circ_times)) {
+ circuit_build_times_enough_to_compute(get_circuit_build_times())) {
/* Circuits are allowed to last longer for measurement.
* Switch their purpose and wait. */
if (victim->purpose != CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT) {
@@ -485,9 +660,13 @@ circuit_expire_building(void)
/* Record this failure to check for too many timeouts
* in a row. This function does not record a time value yet
* (we do that later); it only counts the fact that we did
- * have a timeout. */
- circuit_build_times_count_timeout(&circ_times,
- first_hop_succeeded);
+ * have a timeout. We also want to avoid double-counting
+ * already "relaxed" circuits, which are counted above. */
+ if (!TO_ORIGIN_CIRCUIT(victim)->relaxed_timeout) {
+ circuit_build_times_count_timeout(
+ get_circuit_build_times_mutable(),
+ first_hop_succeeded);
+ }
continue;
}
@@ -496,17 +675,18 @@ circuit_expire_building(void)
* it off at, we probably had a suspend event along this codepath,
* and we should discard the value.
*/
- if (timercmp(&victim->timestamp_created, &extremely_old_cutoff, <)) {
+ if (timercmp(&victim->timestamp_began, &extremely_old_cutoff, <)) {
log_notice(LD_CIRC,
"Extremely large value for circuit build timeout: %lds. "
"Assuming clock jump. Purpose %d (%s)",
- (long)(now.tv_sec - victim->timestamp_created.tv_sec),
+ (long)(now.tv_sec - victim->timestamp_began.tv_sec),
victim->purpose,
circuit_purpose_to_string(victim->purpose));
- } else if (circuit_build_times_count_close(&circ_times,
- first_hop_succeeded,
- victim->timestamp_created.tv_sec)) {
- circuit_build_times_set_timeout(&circ_times);
+ } else if (circuit_build_times_count_close(
+ get_circuit_build_times_mutable(),
+ first_hop_succeeded,
+ (time_t)victim->timestamp_created.tv_sec)) {
+ circuit_build_times_set_timeout(get_circuit_build_times_mutable());
}
}
}
@@ -531,15 +711,19 @@ circuit_expire_building(void)
* and we have tried to send an INTRODUCE1 cell specifying it.
* Thus, if the pending_final_cpath field *is* NULL, then we
* want to not spare it. */
- if (TO_ORIGIN_CIRCUIT(victim)->build_state->pending_final_cpath ==
+ if (TO_ORIGIN_CIRCUIT(victim)->build_state &&
+ TO_ORIGIN_CIRCUIT(victim)->build_state->pending_final_cpath ==
NULL)
break;
+ /* fallthrough! */
+ case CIRCUIT_PURPOSE_C_INTRODUCING:
+ /* connection_ap_handshake_attach_circuit() will relaunch for us */
case CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT:
case CIRCUIT_PURPOSE_C_REND_READY_INTRO_ACKED:
/* If we have reached this line, we want to spare the circ for now. */
- log_info(LD_CIRC,"Marking circ %d (state %d:%s, purpose %d) "
+ log_info(LD_CIRC,"Marking circ %u (state %d:%s, purpose %d) "
"as timed-out HS circ",
- victim->n_circ_id,
+ (unsigned)victim->n_circ_id,
victim->state, circuit_state_to_string(victim->state),
victim->purpose);
TO_ORIGIN_CIRCUIT(victim)->hs_circ_has_timed_out = 1;
@@ -555,9 +739,9 @@ circuit_expire_building(void)
if (!(options->CloseHSServiceRendCircuitsImmediatelyOnTimeout) &&
!(TO_ORIGIN_CIRCUIT(victim)->hs_circ_has_timed_out) &&
victim->purpose == CIRCUIT_PURPOSE_S_CONNECT_REND) {
- log_info(LD_CIRC,"Marking circ %d (state %d:%s, purpose %d) "
+ log_info(LD_CIRC,"Marking circ %u (state %d:%s, purpose %d) "
"as timed-out HS circ; relaunching rendezvous attempt.",
- victim->n_circ_id,
+ (unsigned)victim->n_circ_id,
victim->state, circuit_state_to_string(victim->state),
victim->purpose);
TO_ORIGIN_CIRCUIT(victim)->hs_circ_has_timed_out = 1;
@@ -565,25 +749,156 @@ circuit_expire_building(void)
continue;
}
- if (victim->n_conn)
- log_info(LD_CIRC,"Abandoning circ %s:%d:%d (state %d:%s, purpose %d)",
- victim->n_conn->_base.address, victim->n_conn->_base.port,
- victim->n_circ_id,
+ if (victim->n_chan)
+ log_info(LD_CIRC,
+ "Abandoning circ %u %s:%u (state %d,%d:%s, purpose %d, "
+ "len %d)", TO_ORIGIN_CIRCUIT(victim)->global_identifier,
+ channel_get_canonical_remote_descr(victim->n_chan),
+ (unsigned)victim->n_circ_id,
+ TO_ORIGIN_CIRCUIT(victim)->has_opened,
victim->state, circuit_state_to_string(victim->state),
- victim->purpose);
+ victim->purpose,
+ TO_ORIGIN_CIRCUIT(victim)->build_state ?
+ TO_ORIGIN_CIRCUIT(victim)->build_state->desired_path_len :
+ -1);
else
- log_info(LD_CIRC,"Abandoning circ %d (state %d:%s, purpose %d)",
- victim->n_circ_id, victim->state,
- circuit_state_to_string(victim->state), victim->purpose);
+ log_info(LD_CIRC,
+ "Abandoning circ %u %u (state %d,%d:%s, purpose %d, len %d)",
+ TO_ORIGIN_CIRCUIT(victim)->global_identifier,
+ (unsigned)victim->n_circ_id,
+ TO_ORIGIN_CIRCUIT(victim)->has_opened,
+ victim->state,
+ circuit_state_to_string(victim->state), victim->purpose,
+ TO_ORIGIN_CIRCUIT(victim)->build_state ?
+ TO_ORIGIN_CIRCUIT(victim)->build_state->desired_path_len :
+ -1);
circuit_log_path(LOG_INFO,LD_CIRC,TO_ORIGIN_CIRCUIT(victim));
if (victim->purpose == CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT)
circuit_mark_for_close(victim, END_CIRC_REASON_MEASUREMENT_EXPIRED);
else
circuit_mark_for_close(victim, END_CIRC_REASON_TIMEOUT);
+
+ pathbias_count_timeout(TO_ORIGIN_CIRCUIT(victim));
}
}
+/**
+ * As a diagnostic for bug 8387, log information about how many one-hop
+ * circuits we have around that have been there for at least <b>age</b>
+ * seconds. Log a few of them.
+ */
+void
+circuit_log_ancient_one_hop_circuits(int age)
+{
+#define MAX_ANCIENT_ONEHOP_CIRCUITS_TO_LOG 10
+ time_t now = time(NULL);
+ time_t cutoff = now - age;
+ int n_found = 0;
+ smartlist_t *log_these = smartlist_new();
+ const circuit_t *circ;
+
+ TOR_LIST_FOREACH(circ, circuit_get_global_list(), head) {
+ const origin_circuit_t *ocirc;
+ if (! CIRCUIT_IS_ORIGIN(circ))
+ continue;
+ if (circ->timestamp_created.tv_sec >= cutoff)
+ continue;
+ ocirc = CONST_TO_ORIGIN_CIRCUIT(circ);
+
+ if (ocirc->build_state && ocirc->build_state->onehop_tunnel) {
+ ++n_found;
+
+ if (smartlist_len(log_these) < MAX_ANCIENT_ONEHOP_CIRCUITS_TO_LOG)
+ smartlist_add(log_these, (origin_circuit_t*) ocirc);
+ }
+ }
+
+ if (n_found == 0)
+ goto done;
+
+ log_notice(LD_HEARTBEAT,
+ "Diagnostic for issue 8387: Found %d one-hop circuits more "
+ "than %d seconds old! Logging %d...",
+ n_found, age, smartlist_len(log_these));
+
+ SMARTLIST_FOREACH_BEGIN(log_these, const origin_circuit_t *, ocirc) {
+ char created[ISO_TIME_LEN+1];
+ int stream_num;
+ const edge_connection_t *conn;
+ char *dirty = NULL;
+ circ = TO_CIRCUIT(ocirc);
+
+ format_local_iso_time(created,
+ (time_t)circ->timestamp_created.tv_sec);
+
+
+ if (circ->timestamp_dirty) {
+ char dirty_since[ISO_TIME_LEN+1];
+ format_local_iso_time(dirty_since, circ->timestamp_dirty);
+
+ tor_asprintf(&dirty, "Dirty since %s (%ld seconds vs %ld-second cutoff)",
+ dirty_since, (long)(now - circ->timestamp_dirty),
+ (long) get_options()->MaxCircuitDirtiness);
+ } else {
+ dirty = tor_strdup("Not marked dirty");
+ }
+
+ log_notice(LD_HEARTBEAT, " #%d created at %s. %s, %s. %s for close. "
+ "%s for new conns. %s.",
+ ocirc_sl_idx,
+ created,
+ circuit_state_to_string(circ->state),
+ circuit_purpose_to_string(circ->purpose),
+ circ->marked_for_close ? "Marked" : "Not marked",
+ ocirc->unusable_for_new_conns ? "Not usable" : "usable",
+ dirty);
+ tor_free(dirty);
+
+ stream_num = 0;
+ for (conn = ocirc->p_streams; conn; conn = conn->next_stream) {
+ const connection_t *c = TO_CONN(conn);
+ char stream_created[ISO_TIME_LEN+1];
+ if (++stream_num >= 5)
+ break;
+
+ format_local_iso_time(stream_created, c->timestamp_created);
+
+ log_notice(LD_HEARTBEAT, " Stream#%d created at %s. "
+ "%s conn in state %s. "
+ "%s for close (%s:%d). Hold-open is %sset. "
+ "Has %ssent RELAY_END. %s on circuit.",
+ stream_num,
+ stream_created,
+ conn_type_to_string(c->type),
+ conn_state_to_string(c->type, c->state),
+ c->marked_for_close ? "Marked" : "Not marked",
+ c->marked_for_close_file ? c->marked_for_close_file : "--",
+ c->marked_for_close,
+ c->hold_open_until_flushed ? "" : "not ",
+ conn->edge_has_sent_end ? "" : "not ",
+ conn->edge_blocked_on_circ ? "Blocked" : "Not blocked");
+ if (! c->linked_conn)
+ continue;
+
+ c = c->linked_conn;
+
+ log_notice(LD_HEARTBEAT, " Linked to %s connection in state %s "
+ "(Purpose %d). %s for close (%s:%d). Hold-open is %sset. ",
+ conn_type_to_string(c->type),
+ conn_state_to_string(c->type, c->state),
+ c->purpose,
+ c->marked_for_close ? "Marked" : "Not marked",
+ c->marked_for_close_file ? c->marked_for_close_file : "--",
+ c->marked_for_close,
+ c->hold_open_until_flushed ? "" : "not ");
+ }
+ } SMARTLIST_FOREACH_END(ocirc);
+
+ done:
+ smartlist_free(log_these);
+}
+
/** Remove any elements in <b>needed_ports</b> that are handled by an
* open or in-progress circuit.
*/
@@ -620,18 +935,22 @@ circuit_stream_is_being_handled(entry_connection_t *conn,
const node_t *exitnode;
int num=0;
time_t now = time(NULL);
- int need_uptime = smartlist_string_num_isin(get_options()->LongLivedPorts,
+ int need_uptime = smartlist_contains_int_as_string(
+ get_options()->LongLivedPorts,
conn ? conn->socks_request->port : port);
- for (circ=global_circuitlist;circ;circ = circ->next) {
+ TOR_LIST_FOREACH(circ, circuit_get_global_list(), head) {
if (CIRCUIT_IS_ORIGIN(circ) &&
!circ->marked_for_close &&
circ->purpose == CIRCUIT_PURPOSE_C_GENERAL &&
(!circ->timestamp_dirty ||
circ->timestamp_dirty + get_options()->MaxCircuitDirtiness > now)) {
- cpath_build_state_t *build_state = TO_ORIGIN_CIRCUIT(circ)->build_state;
+ origin_circuit_t *origin_circ = TO_ORIGIN_CIRCUIT(circ);
+ cpath_build_state_t *build_state = origin_circ->build_state;
if (build_state->is_internal || build_state->onehop_tunnel)
continue;
+ if (origin_circ->unusable_for_new_conns)
+ continue;
exitnode = build_state_get_exit_node(build_state);
if (exitnode && (!need_uptime || build_state->need_uptime)) {
@@ -671,8 +990,9 @@ circuit_predict_and_launch_new(void)
int flags = 0;
/* First, count how many of each type of circuit we have already. */
- for (circ=global_circuitlist;circ;circ = circ->next) {
+ TOR_LIST_FOREACH(circ, circuit_get_global_list(), head) {
cpath_build_state_t *build_state;
+ origin_circuit_t *origin_circ;
if (!CIRCUIT_IS_ORIGIN(circ))
continue;
if (circ->marked_for_close)
@@ -681,7 +1001,10 @@ circuit_predict_and_launch_new(void)
continue; /* only count clean circs */
if (circ->purpose != CIRCUIT_PURPOSE_C_GENERAL)
continue; /* only pay attention to general-purpose circs */
- build_state = TO_ORIGIN_CIRCUIT(circ)->build_state;
+ origin_circ = TO_ORIGIN_CIRCUIT(circ);
+ if (origin_circ->unusable_for_new_conns)
+ continue;
+ build_state = origin_circ->build_state;
if (build_state->onehop_tunnel)
continue;
num++;
@@ -746,8 +1069,8 @@ circuit_predict_and_launch_new(void)
* want, don't do another -- we want to leave a few slots open so
* we can still build circuits preemptively as needed. */
if (num < MAX_UNUSED_OPEN_CIRCUITS-2 &&
- get_options()->LearnCircuitBuildTimeout &&
- circuit_build_times_needs_circuits_now(&circ_times)) {
+ ! circuit_build_times_disabled() &&
+ circuit_build_times_needs_circuits_now(get_circuit_build_times())) {
flags = CIRCLAUNCH_NEED_CAPACITY;
log_info(LD_CIRC,
"Have %d clean circs need another buildtime test circ.", num);
@@ -787,7 +1110,7 @@ circuit_build_needed_circs(time_t now)
circ = circuit_get_youngest_clean_open(CIRCUIT_PURPOSE_C_GENERAL);
if (get_options()->RunTesting &&
circ &&
- circ->timestamp_created.tv_sec + TESTING_CIRCUIT_INTERVAL < now) {
+ circ->timestamp_began.tv_sec + TESTING_CIRCUIT_INTERVAL < now) {
log_fn(LOG_INFO,"Creating a new testing circuit.");
circuit_launch(CIRCUIT_PURPOSE_C_GENERAL, 0);
}
@@ -808,7 +1131,7 @@ circuit_detach_stream(circuit_t *circ, edge_connection_t *conn)
tor_assert(circ);
tor_assert(conn);
- if (conn->_base.type == CONN_TYPE_AP) {
+ if (conn->base_.type == CONN_TYPE_AP) {
entry_connection_t *entry_conn = EDGE_TO_ENTRY_CONN(conn);
entry_conn->may_use_optimistic_data = 0;
}
@@ -882,8 +1205,8 @@ circuit_expire_old_circuits_clientside(void)
tor_gettimeofday(&now);
cutoff = now;
- if (get_options()->LearnCircuitBuildTimeout &&
- circuit_build_times_needs_circuits(&circ_times)) {
+ if (! circuit_build_times_disabled() &&
+ circuit_build_times_needs_circuits(get_circuit_build_times())) {
/* Circuits should be shorter lived if we need more of them
* for learning a good build timeout */
cutoff.tv_sec -= IDLE_TIMEOUT_WHILE_LEARNING;
@@ -891,7 +1214,7 @@ circuit_expire_old_circuits_clientside(void)
cutoff.tv_sec -= get_options()->CircuitIdleTimeout;
}
- for (circ = global_circuitlist; circ; circ = circ->next) {
+ TOR_LIST_FOREACH(circ, circuit_get_global_list(), head) {
if (circ->marked_for_close || !CIRCUIT_IS_ORIGIN(circ))
continue;
/* If the circuit has been dirty for too long, and there are no streams
@@ -901,13 +1224,17 @@ circuit_expire_old_circuits_clientside(void)
circ->timestamp_dirty + get_options()->MaxCircuitDirtiness <
now.tv_sec &&
!TO_ORIGIN_CIRCUIT(circ)->p_streams /* nothing attached */ ) {
- log_debug(LD_CIRC, "Closing n_circ_id %d (dirty %ld sec ago, "
+ log_debug(LD_CIRC, "Closing n_circ_id %u (dirty %ld sec ago, "
"purpose %d)",
- circ->n_circ_id, (long)(now.tv_sec - circ->timestamp_dirty),
+ (unsigned)circ->n_circ_id,
+ (long)(now.tv_sec - circ->timestamp_dirty),
circ->purpose);
- circuit_mark_for_close(circ, END_CIRC_REASON_FINISHED);
+ /* Don't do this magic for testing circuits. Their death is governed
+ * by circuit_expire_building */
+ if (circ->purpose != CIRCUIT_PURPOSE_PATH_BIAS_TESTING)
+ circuit_mark_for_close(circ, END_CIRC_REASON_FINISHED);
} else if (!circ->timestamp_dirty && circ->state == CIRCUIT_STATE_OPEN) {
- if (timercmp(&circ->timestamp_created, &cutoff, <)) {
+ if (timercmp(&circ->timestamp_began, &cutoff, <)) {
if (circ->purpose == CIRCUIT_PURPOSE_C_GENERAL ||
circ->purpose == CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT ||
circ->purpose == CIRCUIT_PURPOSE_S_ESTABLISH_INTRO ||
@@ -917,7 +1244,7 @@ circuit_expire_old_circuits_clientside(void)
circ->purpose == CIRCUIT_PURPOSE_S_CONNECT_REND) {
log_debug(LD_CIRC,
"Closing circuit that has been unused for %ld msec.",
- tv_mdiff(&circ->timestamp_created, &now));
+ tv_mdiff(&circ->timestamp_began, &now));
circuit_mark_for_close(circ, END_CIRC_REASON_FINISHED);
} else if (!TO_ORIGIN_CIRCUIT(circ)->is_ancient) {
/* Server-side rend joined circuits can end up really old, because
@@ -931,7 +1258,7 @@ circuit_expire_old_circuits_clientside(void)
"Ancient non-dirty circuit %d is still around after "
"%ld milliseconds. Purpose: %d (%s)",
TO_ORIGIN_CIRCUIT(circ)->global_identifier,
- tv_mdiff(&circ->timestamp_created, &now),
+ tv_mdiff(&circ->timestamp_began, &now),
circ->purpose,
circuit_purpose_to_string(circ->purpose));
TO_ORIGIN_CIRCUIT(circ)->is_ancient = 1;
@@ -970,20 +1297,20 @@ circuit_expire_old_circuits_serverside(time_t now)
or_circuit_t *or_circ;
time_t cutoff = now - IDLE_ONE_HOP_CIRC_TIMEOUT;
- for (circ = global_circuitlist; circ; circ = circ->next) {
+ TOR_LIST_FOREACH(circ, circuit_get_global_list(), head) {
if (circ->marked_for_close || CIRCUIT_IS_ORIGIN(circ))
continue;
or_circ = TO_OR_CIRCUIT(circ);
/* If the circuit has been idle for too long, and there are no streams
* on it, and it ends here, and it used a create_fast, mark it for close.
*/
- if (or_circ->is_first_hop && !circ->n_conn &&
+ if (or_circ->is_first_hop && !circ->n_chan &&
!or_circ->n_streams && !or_circ->resolving_streams &&
- or_circ->p_conn &&
- or_circ->p_conn->timestamp_last_added_nonpadding <= cutoff) {
- log_info(LD_CIRC, "Closing circ_id %d (empty %d secs ago)",
- or_circ->p_circ_id,
- (int)(now - or_circ->p_conn->timestamp_last_added_nonpadding));
+ or_circ->p_chan &&
+ channel_when_last_xmit(or_circ->p_chan) <= cutoff) {
+ log_info(LD_CIRC, "Closing circ_id %u (empty %d secs ago)",
+ (unsigned)or_circ->p_circ_id,
+ (int)(now - channel_when_last_xmit(or_circ->p_chan)));
circuit_mark_for_close(circ, END_CIRC_REASON_FINISHED);
}
}
@@ -1017,7 +1344,7 @@ circuit_enough_testing_circs(void)
if (have_performed_bandwidth_test)
return 1;
- for (circ = global_circuitlist; circ; circ = circ->next) {
+ TOR_LIST_FOREACH(circ, circuit_get_global_list(), head) {
if (!circ->marked_for_close && CIRCUIT_IS_ORIGIN(circ) &&
circ->purpose == CIRCUIT_PURPOSE_TESTING &&
circ->state == CIRCUIT_STATE_OPEN)
@@ -1125,7 +1452,7 @@ static int
circuit_try_clearing_isolation_state(origin_circuit_t *circ)
{
if (/* The circuit may have become non-open if it was cannibalized.*/
- circ->_base.state == CIRCUIT_STATE_OPEN &&
+ circ->base_.state == CIRCUIT_STATE_OPEN &&
/* If !isolation_values_set, there is nothing to clear. */
circ->isolation_values_set &&
/* It's not legal to clear a circuit's isolation info if it's ever had
@@ -1163,6 +1490,7 @@ circuit_try_attaching_streams(origin_circuit_t *circ)
void
circuit_build_failed(origin_circuit_t *circ)
{
+ channel_t *n_chan = NULL;
/* we should examine circ and see if it failed because of
* the last hop or an earlier hop. then use this info below.
*/
@@ -1175,15 +1503,17 @@ circuit_build_failed(origin_circuit_t *circ)
failed_at_last_hop = 1;
}
if (circ->cpath &&
- circ->cpath->state != CPATH_STATE_OPEN) {
- /* We failed at the first hop. If there's an OR connection
- * to blame, blame it. Also, avoid this relay for a while, and
- * fail any one-hop directory fetches destined for it. */
- const char *n_conn_id = circ->cpath->extend_info->identity_digest;
+ circ->cpath->state != CPATH_STATE_OPEN &&
+ ! circ->base_.received_destroy) {
+ /* We failed at the first hop for some reason other than a DESTROY cell.
+ * If there's an OR connection to blame, blame it. Also, avoid this relay
+ * for a while, and fail any one-hop directory fetches destined for it. */
+ const char *n_chan_id = circ->cpath->extend_info->identity_digest;
int already_marked = 0;
- if (circ->_base.n_conn) {
- or_connection_t *n_conn = circ->_base.n_conn;
- if (n_conn->is_bad_for_new_circs) {
+ if (circ->base_.n_chan) {
+ n_chan = circ->base_.n_chan;
+
+ if (n_chan->is_bad_for_new_circs) {
/* We only want to blame this router when a fresh healthy
* connection fails. So don't mark this router as newly failed,
* since maybe this was just an old circuit attempt that's
@@ -1195,22 +1525,22 @@ circuit_build_failed(origin_circuit_t *circ)
}
log_info(LD_OR,
"Our circuit failed to get a response from the first hop "
- "(%s:%d). I'm going to try to rotate to a better connection.",
- n_conn->_base.address, n_conn->_base.port);
- n_conn->is_bad_for_new_circs = 1;
+ "(%s). I'm going to try to rotate to a better connection.",
+ channel_get_canonical_remote_descr(n_chan));
+ n_chan->is_bad_for_new_circs = 1;
} else {
log_info(LD_OR,
"Our circuit died before the first hop with no connection");
}
- if (n_conn_id && !already_marked) {
- entry_guard_register_connect_status(n_conn_id, 0, 1, time(NULL));
+ if (n_chan_id && !already_marked) {
+ entry_guard_register_connect_status(n_chan_id, 0, 1, time(NULL));
/* if there are any one-hop streams waiting on this circuit, fail
* them now so they can retry elsewhere. */
- connection_ap_fail_onehop(n_conn_id, circ->build_state);
+ connection_ap_fail_onehop(n_chan_id, circ->build_state);
}
}
- switch (circ->_base.purpose) {
+ switch (circ->base_.purpose) {
case CIRCUIT_PURPOSE_C_GENERAL:
/* If we never built the circuit, note it as a failure. */
circuit_increment_failure_count();
@@ -1225,7 +1555,7 @@ circuit_build_failed(origin_circuit_t *circ)
break;
case CIRCUIT_PURPOSE_S_ESTABLISH_INTRO:
/* at Bob, waiting for introductions */
- if (circ->_base.state != CIRCUIT_STATE_OPEN) {
+ if (circ->base_.state != CIRCUIT_STATE_OPEN) {
circuit_increment_failure_count();
}
/* no need to care here, because bob will rebuild intro
@@ -1309,21 +1639,46 @@ circuit_launch_by_extend_info(uint8_t purpose,
* internal circs rather than exit circs? -RD */
circ = circuit_find_to_cannibalize(purpose, extend_info, flags);
if (circ) {
- uint8_t old_purpose = circ->_base.purpose;
- struct timeval old_timestamp_created;
+ uint8_t old_purpose = circ->base_.purpose;
+ struct timeval old_timestamp_began = circ->base_.timestamp_began;
log_info(LD_CIRC,"Cannibalizing circ '%s' for purpose %d (%s)",
build_state_get_exit_nickname(circ->build_state), purpose,
circuit_purpose_to_string(purpose));
+ if ((purpose == CIRCUIT_PURPOSE_S_CONNECT_REND ||
+ purpose == CIRCUIT_PURPOSE_C_INTRODUCING) &&
+ circ->path_state == PATH_STATE_BUILD_SUCCEEDED) {
+ /* Path bias: Cannibalized rends pre-emptively count as a
+ * successfully built but unused closed circuit. We don't
+ * wait until the extend (or the close) because the rend
+ * point could be malicious.
+ *
+ * Same deal goes for client side introductions. Clients
+ * can be manipulated to connect repeatedly to them
+ * (especially web clients).
+ *
+ * If we decide to probe the initial portion of these circs,
+ * (up to the adversary's final hop), we need to remove this,
+ * or somehow mark the circuit with a special path state.
+ */
+
+ /* This must be called before the purpose change */
+ pathbias_check_close(circ, END_CIRC_REASON_FINISHED);
+ }
+
circuit_change_purpose(TO_CIRCUIT(circ), purpose);
- /* reset the birth date of this circ, else expire_building
+ /* Reset the start date of this circ, else expire_building
* will see it and think it's been trying to build since it
- * began. */
- tor_gettimeofday(&circ->_base.timestamp_created);
+ * began.
+ *
+ * Technically, the code should reset this when the
+ * create cell is finally sent, but we're close enough
+ * here. */
+ tor_gettimeofday(&circ->base_.timestamp_began);
control_event_circuit_cannibalized(circ, old_purpose,
- &old_timestamp_created);
+ &old_timestamp_began);
switch (purpose) {
case CIRCUIT_PURPOSE_C_ESTABLISH_REND:
@@ -1412,7 +1767,7 @@ circuit_get_open_circ_or_launch(entry_connection_t *conn,
want_onehop = conn->want_onehop;
need_uptime = !conn->want_onehop && !conn->use_begindir &&
- smartlist_string_num_isin(options->LongLivedPorts,
+ smartlist_contains_int_as_string(options->LongLivedPorts,
conn->socks_request->port);
if (desired_circuit_purpose != CIRCUIT_PURPOSE_C_GENERAL)
@@ -1513,8 +1868,8 @@ circuit_get_open_circ_or_launch(entry_connection_t *conn,
if ((m = rate_limit_log(&delay_limit, approx_time()))) {
log_notice(LD_APP, "We'd like to launch a circuit to handle a "
"connection, but we already have %d general-purpose client "
- "circuits pending. Waiting until some finish.",
- n_pending);
+ "circuits pending. Waiting until some finish.%s",
+ n_pending, m);
tor_free(m);
}
return 0;
@@ -1570,9 +1925,9 @@ circuit_get_open_circ_or_launch(entry_connection_t *conn,
escaped_safe_str_client(conn->socks_request->address));
return -1;
}
- extend_info = extend_info_alloc(conn->chosen_exit_name+1,
- digest, NULL, &addr,
- conn->socks_request->port);
+ extend_info = extend_info_new(conn->chosen_exit_name+1,
+ digest, NULL, NULL, &addr,
+ conn->socks_request->port);
} else {
/* We will need an onion key for the router, and we
* don't have one. Refuse or relax requirements. */
@@ -1634,8 +1989,8 @@ circuit_get_open_circ_or_launch(entry_connection_t *conn,
if (circ) {
/* write the service_id into circ */
circ->rend_data = rend_data_dup(ENTRY_TO_EDGE_CONN(conn)->rend_data);
- if (circ->_base.purpose == CIRCUIT_PURPOSE_C_ESTABLISH_REND &&
- circ->_base.state == CIRCUIT_STATE_OPEN)
+ if (circ->base_.purpose == CIRCUIT_PURPOSE_C_ESTABLISH_REND &&
+ circ->base_.state == CIRCUIT_STATE_OPEN)
rend_client_rendcirc_has_opened(circ);
}
}
@@ -1697,8 +2052,8 @@ link_apconn_to_circ(entry_connection_t *apconn, origin_circuit_t *circ,
const node_t *exitnode;
/* add it into the linked list of streams on this circuit */
- log_debug(LD_APP|LD_CIRC, "attaching new conn to circ. n_circ_id %d.",
- circ->_base.n_circ_id);
+ log_debug(LD_APP|LD_CIRC, "attaching new conn to circ. n_circ_id %u.",
+ (unsigned)circ->base_.n_circ_id);
/* reset it, so we can measure circ timeouts */
ENTRY_TO_CONN(apconn)->timestamp_lastread = time(NULL);
ENTRY_TO_EDGE_CONN(apconn)->next_stream = circ->p_streams;
@@ -1734,7 +2089,7 @@ link_apconn_to_circ(entry_connection_t *apconn, origin_circuit_t *circ,
exitnode->rs) {
/* Okay; we know what exit node this is. */
if (optimistic_data_enabled() &&
- circ->_base.purpose == CIRCUIT_PURPOSE_C_GENERAL &&
+ circ->base_.purpose == CIRCUIT_PURPOSE_C_GENERAL &&
exitnode->rs->version_supports_optimistic_data)
apconn->may_use_optimistic_data = 1;
else
@@ -1820,12 +2175,14 @@ connection_ap_handshake_attach_chosen_circuit(entry_connection_t *conn,
base_conn->state == AP_CONN_STATE_CONTROLLER_WAIT);
tor_assert(conn->socks_request);
tor_assert(circ);
- tor_assert(circ->_base.state == CIRCUIT_STATE_OPEN);
+ tor_assert(circ->base_.state == CIRCUIT_STATE_OPEN);
base_conn->state = AP_CONN_STATE_CIRCUIT_WAIT;
- if (!circ->_base.timestamp_dirty)
- circ->_base.timestamp_dirty = time(NULL);
+ if (!circ->base_.timestamp_dirty)
+ circ->base_.timestamp_dirty = time(NULL);
+
+ pathbias_count_use_attempt(circ);
link_apconn_to_circ(conn, circ, cpath);
tor_assert(conn->socks_request);
@@ -1920,8 +2277,8 @@ connection_ap_handshake_attach_circuit(entry_connection_t *conn)
return retval;
log_debug(LD_APP|LD_CIRC,
- "Attaching apconn to circ %d (stream %d sec old).",
- circ->_base.n_circ_id, conn_age);
+ "Attaching apconn to circ %u (stream %d sec old).",
+ (unsigned)circ->base_.n_circ_id, conn_age);
/* print the circ's path, so people can figure out which circs are
* sucking. */
circuit_log_path(LOG_INFO,LD_APP|LD_CIRC,circ);
@@ -1946,25 +2303,30 @@ connection_ap_handshake_attach_circuit(entry_connection_t *conn)
log_info(LD_REND,
"rend joined circ %d already here. attaching. "
"(stream %d sec old)",
- rendcirc->_base.n_circ_id, conn_age);
+ (unsigned)rendcirc->base_.n_circ_id, conn_age);
/* Mark rendezvous circuits as 'newly dirty' every time you use
* them, since the process of rebuilding a rendezvous circ is so
* expensive. There is a tradeoff between linkability and
* feasibility, at this point.
*/
- rendcirc->_base.timestamp_dirty = time(NULL);
+ rendcirc->base_.timestamp_dirty = time(NULL);
+
+ /* We've also attempted to use them. If they fail, we need to
+ * probe them for path bias */
+ pathbias_count_use_attempt(rendcirc);
+
link_apconn_to_circ(conn, rendcirc, NULL);
if (connection_ap_handshake_send_begin(conn) < 0)
return 0; /* already marked, let them fade away */
return 1;
}
- if (rendcirc && (rendcirc->_base.purpose ==
+ if (rendcirc && (rendcirc->base_.purpose ==
CIRCUIT_PURPOSE_C_REND_READY_INTRO_ACKED)) {
log_info(LD_REND,
- "pending-join circ %d already here, with intro ack. "
+ "pending-join circ %u already here, with intro ack. "
"Stalling. (stream %d sec old)",
- rendcirc->_base.n_circ_id, conn_age);
+ (unsigned)rendcirc->base_.n_circ_id, conn_age);
return 0;
}
@@ -1975,51 +2337,40 @@ connection_ap_handshake_attach_circuit(entry_connection_t *conn)
if (retval > 0) {
/* one has already sent the intro. keep waiting. */
- circuit_t *c = NULL;
tor_assert(introcirc);
- log_info(LD_REND, "Intro circ %d present and awaiting ack (rend %d). "
+ log_info(LD_REND, "Intro circ %u present and awaiting ack (rend %u). "
"Stalling. (stream %d sec old)",
- introcirc->_base.n_circ_id,
- rendcirc ? rendcirc->_base.n_circ_id : 0,
+ (unsigned)introcirc->base_.n_circ_id,
+ rendcirc ? (unsigned)rendcirc->base_.n_circ_id : 0,
conn_age);
- /* abort parallel intro circs, if any */
- for (c = global_circuitlist; c; c = c->next) {
- if (c->purpose == CIRCUIT_PURPOSE_C_INTRODUCING &&
- !c->marked_for_close && CIRCUIT_IS_ORIGIN(c)) {
- origin_circuit_t *oc = TO_ORIGIN_CIRCUIT(c);
- if (oc->rend_data &&
- !rend_cmp_service_ids(
- ENTRY_TO_EDGE_CONN(conn)->rend_data->onion_address,
- oc->rend_data->onion_address)) {
- log_info(LD_REND|LD_CIRC, "Closing introduction circuit that we "
- "built in parallel.");
- circuit_mark_for_close(c, END_CIRC_REASON_TIMEOUT);
- }
- }
- }
return 0;
}
/* now rendcirc and introcirc are each either undefined or not finished */
if (rendcirc && introcirc &&
- rendcirc->_base.purpose == CIRCUIT_PURPOSE_C_REND_READY) {
+ rendcirc->base_.purpose == CIRCUIT_PURPOSE_C_REND_READY) {
log_info(LD_REND,
- "ready rend circ %d already here (no intro-ack yet on "
- "intro %d). (stream %d sec old)",
- rendcirc->_base.n_circ_id,
- introcirc->_base.n_circ_id, conn_age);
-
- tor_assert(introcirc->_base.purpose == CIRCUIT_PURPOSE_C_INTRODUCING);
- if (introcirc->_base.state == CIRCUIT_STATE_OPEN) {
- log_info(LD_REND,"found open intro circ %d (rend %d); sending "
+ "ready rend circ %u already here (no intro-ack yet on "
+ "intro %u). (stream %d sec old)",
+ (unsigned)rendcirc->base_.n_circ_id,
+ (unsigned)introcirc->base_.n_circ_id, conn_age);
+
+ tor_assert(introcirc->base_.purpose == CIRCUIT_PURPOSE_C_INTRODUCING);
+ if (introcirc->base_.state == CIRCUIT_STATE_OPEN) {
+ log_info(LD_REND,"found open intro circ %u (rend %u); sending "
"introduction. (stream %d sec old)",
- introcirc->_base.n_circ_id, rendcirc->_base.n_circ_id,
+ (unsigned)introcirc->base_.n_circ_id,
+ (unsigned)rendcirc->base_.n_circ_id,
conn_age);
switch (rend_client_send_introduction(introcirc, rendcirc)) {
case 0: /* success */
- rendcirc->_base.timestamp_dirty = time(NULL);
- introcirc->_base.timestamp_dirty = time(NULL);
+ rendcirc->base_.timestamp_dirty = time(NULL);
+ introcirc->base_.timestamp_dirty = time(NULL);
+
+ pathbias_count_use_attempt(introcirc);
+ pathbias_count_use_attempt(rendcirc);
+
assert_circuit_ok(TO_CIRCUIT(rendcirc));
assert_circuit_ok(TO_CIRCUIT(introcirc));
return 0;
@@ -2034,10 +2385,10 @@ connection_ap_handshake_attach_circuit(entry_connection_t *conn)
}
}
- log_info(LD_REND, "Intro (%d) and rend (%d) circs are not both ready. "
+ log_info(LD_REND, "Intro (%u) and rend (%u) circs are not both ready. "
"Stalling conn. (%d sec old)",
- introcirc ? introcirc->_base.n_circ_id : 0,
- rendcirc ? rendcirc->_base.n_circ_id : 0, conn_age);
+ introcirc ? (unsigned)introcirc->base_.n_circ_id : 0,
+ rendcirc ? (unsigned)rendcirc->base_.n_circ_id : 0, conn_age);
return 0;
}
}
@@ -2078,3 +2429,23 @@ circuit_change_purpose(circuit_t *circ, uint8_t new_purpose)
}
}
+/** Mark <b>circ</b> so that no more connections can be attached to it. */
+void
+mark_circuit_unusable_for_new_conns(origin_circuit_t *circ)
+{
+ const or_options_t *options = get_options();
+ tor_assert(circ);
+
+ /* XXXX025 This is a kludge; we're only keeping it around in case there's
+ * something that doesn't check unusable_for_new_conns, and to avoid
+ * deeper refactoring of our expiration logic. */
+ if (! circ->base_.timestamp_dirty)
+ circ->base_.timestamp_dirty = approx_time();
+ if (options->MaxCircuitDirtiness >= circ->base_.timestamp_dirty)
+ circ->base_.timestamp_dirty = 1; /* prevent underflow */
+ else
+ circ->base_.timestamp_dirty -= options->MaxCircuitDirtiness;
+
+ circ->unusable_for_new_conns = 1;
+}
+
diff --git a/src/or/circuituse.h b/src/or/circuituse.h
index be2bd7ec5..f228a6758 100644
--- a/src/or/circuituse.h
+++ b/src/or/circuituse.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,13 +9,14 @@
* \brief Header file for circuituse.c.
**/
-#ifndef _TOR_CIRCUITUSE_H
-#define _TOR_CIRCUITUSE_H
+#ifndef TOR_CIRCUITUSE_H
+#define TOR_CIRCUITUSE_H
void circuit_expire_building(void);
void circuit_remove_handled_ports(smartlist_t *needed_ports);
int circuit_stream_is_being_handled(entry_connection_t *conn, uint16_t port,
int min);
+void circuit_log_ancient_one_hop_circuits(int age);
#if 0
int circuit_conforms_to_options(const origin_circuit_t *circ,
const or_options_t *options);
@@ -55,6 +56,7 @@ void circuit_change_purpose(circuit_t *circ, uint8_t new_purpose);
int hostname_in_track_host_exits(const or_options_t *options,
const char *address);
+void mark_circuit_unusable_for_new_conns(origin_circuit_t *circ);
#endif
diff --git a/src/or/command.c b/src/or/command.c
index 8321e261e..105bdc637 100644
--- a/src/or/command.c
+++ b/src/or/command.c
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -12,10 +12,12 @@
/* In-points to command.c:
*
* - command_process_cell(), called from
- * connection_or_process_cells_from_inbuf() in connection_or.c
+ * incoming cell handlers of channel_t instances;
+ * callbacks registered in command_setup_channel(),
+ * called when channels are created in circuitbuild.c
*/
-
#include "or.h"
+#include "channel.h"
#include "circuitbuild.h"
#include "circuitlist.h"
#include "command.h"
@@ -27,12 +29,11 @@
#include "hibernate.h"
#include "nodelist.h"
#include "onion.h"
+#include "rephist.h"
#include "relay.h"
#include "router.h"
#include "routerlist.h"
-/** How many CELL_PADDING cells have we received, ever? */
-uint64_t stats_n_padding_cells_processed = 0;
/** How many CELL_CREATE cells have we received, ever? */
uint64_t stats_n_create_cells_processed = 0;
/** How many CELL_CREATED cells have we received, ever? */
@@ -41,38 +42,43 @@ uint64_t stats_n_created_cells_processed = 0;
uint64_t stats_n_relay_cells_processed = 0;
/** How many CELL_DESTROY cells have we received, ever? */
uint64_t stats_n_destroy_cells_processed = 0;
-/** How many CELL_VERSIONS cells have we received, ever? */
-uint64_t stats_n_versions_cells_processed = 0;
-/** How many CELL_NETINFO cells have we received, ever? */
-uint64_t stats_n_netinfo_cells_processed = 0;
-/** How many CELL_VPADDING cells have we received, ever? */
-uint64_t stats_n_vpadding_cells_processed = 0;
-/** How many CELL_CERTS cells have we received, ever? */
-uint64_t stats_n_certs_cells_processed = 0;
-/** How many CELL_AUTH_CHALLENGE cells have we received, ever? */
-uint64_t stats_n_auth_challenge_cells_processed = 0;
-/** How many CELL_AUTHENTICATE cells have we received, ever? */
-uint64_t stats_n_authenticate_cells_processed = 0;
-/** How many CELL_AUTHORIZE cells have we received, ever? */
-uint64_t stats_n_authorize_cells_processed = 0;
+/* Handle an incoming channel */
+static void command_handle_incoming_channel(channel_listener_t *listener,
+ channel_t *chan);
/* These are the main functions for processing cells */
-static void command_process_create_cell(cell_t *cell, or_connection_t *conn);
-static void command_process_created_cell(cell_t *cell, or_connection_t *conn);
-static void command_process_relay_cell(cell_t *cell, or_connection_t *conn);
-static void command_process_destroy_cell(cell_t *cell, or_connection_t *conn);
-static void command_process_versions_cell(var_cell_t *cell,
- or_connection_t *conn);
-static void command_process_netinfo_cell(cell_t *cell, or_connection_t *conn);
-static void command_process_certs_cell(var_cell_t *cell,
- or_connection_t *conn);
-static void command_process_auth_challenge_cell(var_cell_t *cell,
- or_connection_t *conn);
-static void command_process_authenticate_cell(var_cell_t *cell,
- or_connection_t *conn);
-static int enter_v3_handshake_with_cell(var_cell_t *cell,
- or_connection_t *conn);
+static void command_process_create_cell(cell_t *cell, channel_t *chan);
+static void command_process_created_cell(cell_t *cell, channel_t *chan);
+static void command_process_relay_cell(cell_t *cell, channel_t *chan);
+static void command_process_destroy_cell(cell_t *cell, channel_t *chan);
+
+/** Convert the cell <b>command</b> into a lower-case, human-readable
+ * string. */
+const char *
+cell_command_to_string(uint8_t command)
+{
+ switch (command) {
+ case CELL_PADDING: return "padding";
+ case CELL_CREATE: return "create";
+ case CELL_CREATED: return "created";
+ case CELL_RELAY: return "relay";
+ case CELL_DESTROY: return "destroy";
+ case CELL_CREATE_FAST: return "create_fast";
+ case CELL_CREATED_FAST: return "created_fast";
+ case CELL_VERSIONS: return "versions";
+ case CELL_NETINFO: return "netinfo";
+ case CELL_RELAY_EARLY: return "relay_early";
+ case CELL_CREATE2: return "create2";
+ case CELL_CREATED2: return "created2";
+ case CELL_VPADDING: return "vpadding";
+ case CELL_CERTS: return "certs";
+ case CELL_AUTH_CHALLENGE: return "auth_challenge";
+ case CELL_AUTHENTICATE: return "authenticate";
+ case CELL_AUTHORIZE: return "authorize";
+ default: return "unrecognized";
+ }
+}
#ifdef KEEP_TIMING_STATS
/** This is a wrapper function around the actual function that processes the
@@ -80,15 +86,15 @@ static int enter_v3_handshake_with_cell(var_cell_t *cell,
* by the number of microseconds used by the call to <b>*func(cell, conn)</b>.
*/
static void
-command_time_process_cell(cell_t *cell, or_connection_t *conn, int *time,
- void (*func)(cell_t *, or_connection_t *))
+command_time_process_cell(cell_t *cell, channel_t *chan, int *time,
+ void (*func)(cell_t *, channel_t *))
{
struct timeval start, end;
long time_passed;
tor_gettimeofday(&start);
- (*func)(cell, conn);
+ (*func)(cell, chan);
tor_gettimeofday(&end);
time_passed = tv_udiff(&start, &end) ;
@@ -104,15 +110,14 @@ command_time_process_cell(cell_t *cell, or_connection_t *conn, int *time,
}
#endif
-/** Process a <b>cell</b> that was just received on <b>conn</b>. Keep internal
+/** Process a <b>cell</b> that was just received on <b>chan</b>. Keep internal
* statistics about how many of each cell we've processed so far
* this second, and the total number of microseconds it took to
* process each type of cell.
*/
void
-command_process_cell(cell_t *cell, or_connection_t *conn)
+command_process_cell(channel_t *chan, cell_t *cell)
{
- int handshaking = (conn->_base.state != OR_CONN_STATE_OPEN);
#ifdef KEEP_TIMING_STATS
/* how many of each cell have we seen so far this second? needs better
* name. */
@@ -152,263 +157,130 @@ command_process_cell(cell_t *cell, or_connection_t *conn)
#define PROCESS_CELL(tp, cl, cn) command_process_ ## tp ## _cell(cl, cn)
#endif
- if (conn->_base.marked_for_close)
- return;
-
- /* Reject all but VERSIONS and NETINFO when handshaking. */
- /* (VERSIONS should actually be impossible; it's variable-length.) */
- if (handshaking && cell->command != CELL_VERSIONS &&
- cell->command != CELL_NETINFO) {
- log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
- "Received unexpected cell command %d in state %s; closing the "
- "connection.",
- (int)cell->command,
- conn_state_to_string(CONN_TYPE_OR,conn->_base.state));
- connection_mark_for_close(TO_CONN(conn));
- return;
- }
-
- if (conn->_base.state == OR_CONN_STATE_OR_HANDSHAKING_V3)
- or_handshake_state_record_cell(conn->handshake_state, cell, 1);
-
switch (cell->command) {
- case CELL_PADDING:
- ++stats_n_padding_cells_processed;
- /* do nothing */
- break;
case CELL_CREATE:
case CELL_CREATE_FAST:
+ case CELL_CREATE2:
++stats_n_create_cells_processed;
- PROCESS_CELL(create, cell, conn);
+ PROCESS_CELL(create, cell, chan);
break;
case CELL_CREATED:
case CELL_CREATED_FAST:
+ case CELL_CREATED2:
++stats_n_created_cells_processed;
- PROCESS_CELL(created, cell, conn);
+ PROCESS_CELL(created, cell, chan);
break;
case CELL_RELAY:
case CELL_RELAY_EARLY:
++stats_n_relay_cells_processed;
- PROCESS_CELL(relay, cell, conn);
+ PROCESS_CELL(relay, cell, chan);
break;
case CELL_DESTROY:
++stats_n_destroy_cells_processed;
- PROCESS_CELL(destroy, cell, conn);
- break;
- case CELL_VERSIONS:
- tor_fragile_assert();
- break;
- case CELL_NETINFO:
- ++stats_n_netinfo_cells_processed;
- PROCESS_CELL(netinfo, cell, conn);
+ PROCESS_CELL(destroy, cell, chan);
break;
default:
log_fn(LOG_INFO, LD_PROTOCOL,
- "Cell of unknown type (%d) received. Dropping.", cell->command);
+ "Cell of unknown or unexpected type (%d) received. "
+ "Dropping.",
+ cell->command);
break;
}
}
-/** Return true if <b>command</b> is a cell command that's allowed to start a
- * V3 handshake. */
-static int
-command_allowed_before_handshake(uint8_t command)
-{
- switch (command) {
- case CELL_VERSIONS:
- case CELL_VPADDING:
- case CELL_AUTHORIZE:
- return 1;
- default:
- return 0;
- }
-}
-
-/** Process a <b>cell</b> that was just received on <b>conn</b>. Keep internal
- * statistics about how many of each cell we've processed so far
- * this second, and the total number of microseconds it took to
- * process each type of cell.
+/** Process an incoming var_cell from a channel; in the current protocol all
+ * the var_cells are handshake-related and handled below the channel layer,
+ * so this just logs a warning and drops the cell.
*/
+
void
-command_process_var_cell(var_cell_t *cell, or_connection_t *conn)
+command_process_var_cell(channel_t *chan, var_cell_t *var_cell)
{
-#ifdef KEEP_TIMING_STATS
- /* how many of each cell have we seen so far this second? needs better
- * name. */
- static int num_versions=0, num_certs=0;
-
- time_t now = time(NULL);
-
- if (now > current_second) { /* the second has rolled over */
- /* print stats */
- log_info(LD_OR,
- "At end of second: %d versions (%d ms), %d certs (%d ms)",
- num_versions, versions_time/1000,
- num_certs, certs_time/1000);
-
- num_versions = num_certs = 0;
- versions_time = certs_time = 0;
-
- /* remember which second it is, for next time */
- current_second = now;
- }
-#endif
-
- if (conn->_base.marked_for_close)
- return;
+ tor_assert(chan);
+ tor_assert(var_cell);
- switch (conn->_base.state)
- {
- case OR_CONN_STATE_OR_HANDSHAKING_V2:
- if (cell->command != CELL_VERSIONS) {
- log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
- "Received a cell with command %d in state %s; "
- "closing the connection.",
- (int)cell->command,
- conn_state_to_string(CONN_TYPE_OR,conn->_base.state));
- connection_mark_for_close(TO_CONN(conn));
- return;
- }
- break;
- case OR_CONN_STATE_TLS_HANDSHAKING:
- /* If we're using bufferevents, it's entirely possible for us to
- * notice "hey, data arrived!" before we notice "hey, the handshake
- * finished!" And we need to be accepting both at once to handle both
- * the v2 and v3 handshakes. */
-
- /* fall through */
- case OR_CONN_STATE_TLS_SERVER_RENEGOTIATING:
- if (! command_allowed_before_handshake(cell->command)) {
- log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
- "Received a cell with command %d in state %s; "
- "closing the connection.",
- (int)cell->command,
- conn_state_to_string(CONN_TYPE_OR,conn->_base.state));
- connection_mark_for_close(TO_CONN(conn));
- return;
- } else {
- if (enter_v3_handshake_with_cell(cell, conn)<0)
- return;
- }
- break;
- case OR_CONN_STATE_OR_HANDSHAKING_V3:
- if (cell->command != CELL_AUTHENTICATE)
- or_handshake_state_record_var_cell(conn->handshake_state, cell, 1);
- break; /* Everything is allowed */
- case OR_CONN_STATE_OPEN:
- if (conn->link_proto < 3) {
- log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
- "Received a variable-length cell with command %d in state %s "
- "with link protocol %d; ignoring it.",
- (int)cell->command,
- conn_state_to_string(CONN_TYPE_OR,conn->_base.state),
- (int)conn->link_proto);
- return;
- }
- break;
- default:
- log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
- "Received var-length cell with command %d in unexpected state "
- "%s [%d]; ignoring it.",
- (int)cell->command,
- conn_state_to_string(CONN_TYPE_OR,conn->_base.state),
- (int)conn->_base.state);
- return;
- }
-
- switch (cell->command) {
- case CELL_VERSIONS:
- ++stats_n_versions_cells_processed;
- PROCESS_CELL(versions, cell, conn);
- break;
- case CELL_VPADDING:
- ++stats_n_vpadding_cells_processed;
- /* Do nothing */
- break;
- case CELL_CERTS:
- ++stats_n_certs_cells_processed;
- PROCESS_CELL(certs, cell, conn);
- break;
- case CELL_AUTH_CHALLENGE:
- ++stats_n_auth_challenge_cells_processed;
- PROCESS_CELL(auth_challenge, cell, conn);
- break;
- case CELL_AUTHENTICATE:
- ++stats_n_authenticate_cells_processed;
- PROCESS_CELL(authenticate, cell, conn);
- break;
- case CELL_AUTHORIZE:
- ++stats_n_authorize_cells_processed;
- /* Ignored so far. */
- break;
- default:
- log_fn(LOG_INFO, LD_PROTOCOL,
- "Variable-length cell of unknown type (%d) received.",
- cell->command);
- break;
- }
+ log_info(LD_PROTOCOL,
+ "Received unexpected var_cell above the channel layer of type %d"
+ "; dropping it.",
+ var_cell->command);
}
-/** Process a 'create' <b>cell</b> that just arrived from <b>conn</b>. Make a
+/** Process a 'create' <b>cell</b> that just arrived from <b>chan</b>. Make a
* new circuit with the p_circ_id specified in cell. Put the circuit in state
* onionskin_pending, and pass the onionskin to the cpuworker. Circ will get
* picked up again when the cpuworker finishes decrypting it.
*/
static void
-command_process_create_cell(cell_t *cell, or_connection_t *conn)
+command_process_create_cell(cell_t *cell, channel_t *chan)
{
or_circuit_t *circ;
const or_options_t *options = get_options();
int id_is_high;
+ create_cell_t *create_cell;
+
+ tor_assert(cell);
+ tor_assert(chan);
+
+ log_debug(LD_OR,
+ "Got a CREATE cell for circ_id %u on channel " U64_FORMAT
+ " (%p)",
+ (unsigned)cell->circ_id,
+ U64_PRINTF_ARG(chan->global_identifier), chan);
if (we_are_hibernating()) {
log_info(LD_OR,
"Received create cell but we're shutting down. Sending back "
"destroy.");
- connection_or_send_destroy(cell->circ_id, conn,
+ channel_send_destroy(cell->circ_id, chan,
END_CIRC_REASON_HIBERNATING);
return;
}
if (!server_mode(options) ||
- (!public_server_mode(options) && conn->is_outgoing)) {
+ (!public_server_mode(options) && channel_is_outgoing(chan))) {
log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
- "Received create cell (type %d) from %s:%d, but we're connected "
+ "Received create cell (type %d) from %s, but we're connected "
"to it as a client. "
"Sending back a destroy.",
- (int)cell->command, conn->_base.address, conn->_base.port);
- connection_or_send_destroy(cell->circ_id, conn,
- END_CIRC_REASON_TORPROTOCOL);
+ (int)cell->command, channel_get_canonical_remote_descr(chan));
+ channel_send_destroy(cell->circ_id, chan,
+ END_CIRC_REASON_TORPROTOCOL);
return;
}
if (cell->circ_id == 0) {
log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
- "Received a create cell (type %d) from %s:%d with zero circID; "
- " ignoring.", (int)cell->command, conn->_base.address,
- conn->_base.port);
+ "Received a create cell (type %d) from %s with zero circID; "
+ " ignoring.", (int)cell->command,
+ channel_get_actual_remote_descr(chan));
return;
}
/* If the high bit of the circuit ID is not as expected, close the
* circ. */
- id_is_high = cell->circ_id & (1<<15);
- if ((id_is_high && conn->circ_id_type == CIRC_ID_TYPE_HIGHER) ||
- (!id_is_high && conn->circ_id_type == CIRC_ID_TYPE_LOWER)) {
+ if (chan->wide_circ_ids)
+ id_is_high = cell->circ_id & (1u<<31);
+ else
+ id_is_high = cell->circ_id & (1u<<15);
+ if ((id_is_high &&
+ chan->circ_id_type == CIRC_ID_TYPE_HIGHER) ||
+ (!id_is_high &&
+ chan->circ_id_type == CIRC_ID_TYPE_LOWER)) {
log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
- "Received create cell with unexpected circ_id %d. Closing.",
- cell->circ_id);
- connection_or_send_destroy(cell->circ_id, conn,
- END_CIRC_REASON_TORPROTOCOL);
+ "Received create cell with unexpected circ_id %u. Closing.",
+ (unsigned)cell->circ_id);
+ channel_send_destroy(cell->circ_id, chan,
+ END_CIRC_REASON_TORPROTOCOL);
return;
}
- if (circuit_id_in_use_on_orconn(cell->circ_id, conn)) {
- const node_t *node = node_get_by_id(conn->identity_digest);
+ if (circuit_id_in_use_on_channel(cell->circ_id, chan)) {
+ const node_t *node = node_get_by_id(chan->identity_digest);
log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
- "Received CREATE cell (circID %d) for known circ. "
+ "Received CREATE cell (circID %u) for known circ. "
"Dropping (age %d).",
- cell->circ_id, (int)(time(NULL) - conn->_base.timestamp_created));
+ (unsigned)cell->circ_id,
+ (int)(time(NULL) - channel_when_created(chan)));
if (node) {
char *p = esc_for_log(node_get_platform(node));
log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
@@ -419,23 +291,24 @@ command_process_create_cell(cell_t *cell, or_connection_t *conn)
return;
}
- circ = or_circuit_new(cell->circ_id, conn);
- circ->_base.purpose = CIRCUIT_PURPOSE_OR;
+ circ = or_circuit_new(cell->circ_id, chan);
+ circ->base_.purpose = CIRCUIT_PURPOSE_OR;
circuit_set_state(TO_CIRCUIT(circ), CIRCUIT_STATE_ONIONSKIN_PENDING);
- if (cell->command == CELL_CREATE) {
- char *onionskin = tor_malloc(ONIONSKIN_CHALLENGE_LEN);
- memcpy(onionskin, cell->payload, ONIONSKIN_CHALLENGE_LEN);
+ create_cell = tor_malloc_zero(sizeof(create_cell_t));
+ if (create_cell_parse(create_cell, cell) < 0) {
+ tor_free(create_cell);
+ log_fn(LOG_PROTOCOL_WARN, LD_OR,
+ "Bogus/unrecognized create cell; closing.");
+ circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_TORPROTOCOL);
+ return;
+ }
+ if (create_cell->handshake_type != ONION_HANDSHAKE_TYPE_FAST) {
/* hand it off to the cpuworkers, and then return. */
- if (assign_onionskin_to_cpuworker(NULL, circ, onionskin) < 0) {
-#define WARN_HANDOFF_FAILURE_INTERVAL (6*60*60)
- static ratelim_t handoff_warning =
- RATELIM_INIT(WARN_HANDOFF_FAILURE_INTERVAL);
- char *m;
- if ((m = rate_limit_log(&handoff_warning, approx_time()))) {
- log_warn(LD_GENERAL,"Failed to hand off onionskin. Closing.%s",m);
- tor_free(m);
- }
+ if (connection_or_digest_is_known_relay(chan->identity_digest))
+ rep_hist_note_circuit_handshake_requested(create_cell->handshake_type);
+ if (assign_onionskin_to_cpuworker(NULL, circ, create_cell) < 0) {
+ log_debug(LD_GENERAL,"Failed to hand off onionskin. Closing.");
circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_RESOURCELIMIT);
return;
}
@@ -443,30 +316,44 @@ command_process_create_cell(cell_t *cell, or_connection_t *conn)
} else {
/* This is a CREATE_FAST cell; we can handle it immediately without using
* a CPU worker. */
- char keys[CPATH_KEY_MATERIAL_LEN];
- char reply[DIGEST_LEN*2];
-
- tor_assert(cell->command == CELL_CREATE_FAST);
+ uint8_t keys[CPATH_KEY_MATERIAL_LEN];
+ uint8_t rend_circ_nonce[DIGEST_LEN];
+ int len;
+ created_cell_t created_cell;
/* Make sure we never try to use the OR connection on which we
* received this cell to satisfy an EXTEND request, */
- conn->is_connection_with_client = 1;
-
- if (fast_server_handshake(cell->payload, (uint8_t*)reply,
- (uint8_t*)keys, sizeof(keys))<0) {
+ channel_mark_client(chan);
+
+ memset(&created_cell, 0, sizeof(created_cell));
+ len = onion_skin_server_handshake(ONION_HANDSHAKE_TYPE_FAST,
+ create_cell->onionskin,
+ create_cell->handshake_len,
+ NULL,
+ created_cell.reply,
+ keys, CPATH_KEY_MATERIAL_LEN,
+ rend_circ_nonce);
+ tor_free(create_cell);
+ if (len < 0) {
log_warn(LD_OR,"Failed to generate key material. Closing.");
circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_INTERNAL);
+ tor_free(create_cell);
return;
}
- if (onionskin_answer(circ, CELL_CREATED_FAST, reply, keys)<0) {
+ created_cell.cell_type = CELL_CREATED_FAST;
+ created_cell.handshake_len = len;
+
+ if (onionskin_answer(circ, &created_cell,
+ (const char *)keys, rend_circ_nonce)<0) {
log_warn(LD_OR,"Failed to reply to CREATE_FAST cell. Closing.");
circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_INTERNAL);
return;
}
+ memwipe(keys, 0, sizeof(keys));
}
}
-/** Process a 'created' <b>cell</b> that just arrived from <b>conn</b>.
+/** Process a 'created' <b>cell</b> that just arrived from <b>chan</b>.
* Find the circuit
* that it's intended for. If we're not the origin of the circuit, package
* the 'created' cell in an 'extended' relay cell and pass it back. If we
@@ -475,32 +362,39 @@ command_process_create_cell(cell_t *cell, or_connection_t *conn)
* extend to the next hop in the circuit if necessary.
*/
static void
-command_process_created_cell(cell_t *cell, or_connection_t *conn)
+command_process_created_cell(cell_t *cell, channel_t *chan)
{
circuit_t *circ;
+ extended_cell_t extended_cell;
- circ = circuit_get_by_circid_orconn(cell->circ_id, conn);
+ circ = circuit_get_by_circid_channel(cell->circ_id, chan);
if (!circ) {
log_info(LD_OR,
- "(circID %d) unknown circ (probably got a destroy earlier). "
- "Dropping.", cell->circ_id);
+ "(circID %u) unknown circ (probably got a destroy earlier). "
+ "Dropping.", (unsigned)cell->circ_id);
return;
}
- if (circ->n_circ_id != cell->circ_id) {
+ if (circ->n_circ_id != cell->circ_id || circ->n_chan != chan) {
log_fn(LOG_PROTOCOL_WARN,LD_PROTOCOL,
"got created cell from Tor client? Closing.");
circuit_mark_for_close(circ, END_CIRC_REASON_TORPROTOCOL);
return;
}
+ if (created_cell_parse(&extended_cell.created_cell, cell) < 0) {
+ log_fn(LOG_PROTOCOL_WARN, LD_OR, "Unparseable created cell.");
+ circuit_mark_for_close(circ, END_CIRC_REASON_TORPROTOCOL);
+ return;
+ }
+
if (CIRCUIT_IS_ORIGIN(circ)) { /* we're the OP. Handshake this. */
origin_circuit_t *origin_circ = TO_ORIGIN_CIRCUIT(circ);
int err_reason = 0;
log_debug(LD_OR,"at OP. Finishing handshake.");
- if ((err_reason = circuit_finish_handshake(origin_circ, cell->command,
- cell->payload)) < 0) {
+ if ((err_reason = circuit_finish_handshake(origin_circ,
+ &extended_cell.created_cell)) < 0) {
log_warn(LD_OR,"circuit_finish_handshake failed.");
circuit_mark_for_close(circ, -err_reason);
return;
@@ -513,11 +407,24 @@ command_process_created_cell(cell_t *cell, or_connection_t *conn)
return;
}
} else { /* pack it into an extended relay cell, and send it. */
+ uint8_t command=0;
+ uint16_t len=0;
+ uint8_t payload[RELAY_PAYLOAD_SIZE];
log_debug(LD_OR,
"Converting created cell to extended relay cell, sending.");
- relay_send_command_from_edge(0, circ, RELAY_COMMAND_EXTENDED,
- (char*)cell->payload, ONIONSKIN_REPLY_LEN,
- NULL);
+ memset(payload, 0, sizeof(payload));
+ if (extended_cell.created_cell.cell_type == CELL_CREATED2)
+ extended_cell.cell_type = RELAY_COMMAND_EXTENDED2;
+ else
+ extended_cell.cell_type = RELAY_COMMAND_EXTENDED;
+ if (extended_cell_format(&command, &len, payload, &extended_cell) < 0) {
+ log_fn(LOG_PROTOCOL_WARN, LD_OR, "Can't format extended cell.");
+ circuit_mark_for_close(circ, END_CIRC_REASON_TORPROTOCOL);
+ return;
+ }
+
+ relay_send_command_from_edge(0, circ, command,
+ (const char*)payload, len, NULL);
}
}
@@ -526,17 +433,18 @@ command_process_created_cell(cell_t *cell, or_connection_t *conn)
* circuit_receive_relay_cell() for actual processing.
*/
static void
-command_process_relay_cell(cell_t *cell, or_connection_t *conn)
+command_process_relay_cell(cell_t *cell, channel_t *chan)
{
circuit_t *circ;
int reason, direction;
- circ = circuit_get_by_circid_orconn(cell->circ_id, conn);
+ circ = circuit_get_by_circid_channel(cell->circ_id, chan);
if (!circ) {
log_debug(LD_OR,
- "unknown circuit %d on connection from %s:%d. Dropping.",
- cell->circ_id, conn->_base.address, conn->_base.port);
+ "unknown circuit %u on connection from %s. Dropping.",
+ (unsigned)cell->circ_id,
+ channel_get_canonical_remote_descr(chan));
return;
}
@@ -549,10 +457,11 @@ command_process_relay_cell(cell_t *cell, or_connection_t *conn)
if (CIRCUIT_IS_ORIGIN(circ)) {
/* if we're a relay and treating connections with recent local
* traffic better, then this is one of them. */
- conn->client_used = time(NULL);
+ channel_timestamp_client(chan);
}
if (!CIRCUIT_IS_ORIGIN(circ) &&
+ chan == TO_OR_CIRCUIT(circ)->p_chan &&
cell->circ_id == TO_OR_CIRCUIT(circ)->p_circ_id)
direction = CELL_DIRECTION_OUT;
else
@@ -570,10 +479,10 @@ command_process_relay_cell(cell_t *cell, or_connection_t *conn)
or_circuit_t *or_circ = TO_OR_CIRCUIT(circ);
if (or_circ->remaining_relay_early_cells == 0) {
log_fn(LOG_PROTOCOL_WARN, LD_OR,
- "Received too many RELAY_EARLY cells on circ %d from %s:%d."
+ "Received too many RELAY_EARLY cells on circ %u from %s."
" Closing circuit.",
- cell->circ_id, safe_str(conn->_base.address),
- conn->_base.port);
+ (unsigned)cell->circ_id,
+ safe_str(channel_get_canonical_remote_descr(chan)));
circuit_mark_for_close(circ, END_CIRC_REASON_TORPROTOCOL);
return;
}
@@ -590,7 +499,7 @@ command_process_relay_cell(cell_t *cell, or_connection_t *conn)
}
/** Process a 'destroy' <b>cell</b> that just arrived from
- * <b>conn</b>. Find the circ that it refers to (if any).
+ * <b>chan</b>. Find the circ that it refers to (if any).
*
* If the circ is in state
* onionskin_pending, then call onion_pending_remove() to remove it
@@ -603,28 +512,31 @@ command_process_relay_cell(cell_t *cell, or_connection_t *conn)
* and passes the destroy cell onward if necessary).
*/
static void
-command_process_destroy_cell(cell_t *cell, or_connection_t *conn)
+command_process_destroy_cell(cell_t *cell, channel_t *chan)
{
circuit_t *circ;
int reason;
- circ = circuit_get_by_circid_orconn(cell->circ_id, conn);
+ circ = circuit_get_by_circid_channel(cell->circ_id, chan);
if (!circ) {
- log_info(LD_OR,"unknown circuit %d on connection from %s:%d. Dropping.",
- cell->circ_id, conn->_base.address, conn->_base.port);
+ log_info(LD_OR,"unknown circuit %u on connection from %s. Dropping.",
+ (unsigned)cell->circ_id,
+ channel_get_canonical_remote_descr(chan));
return;
}
- log_debug(LD_OR,"Received for circID %d.",cell->circ_id);
+ log_debug(LD_OR,"Received for circID %u.",(unsigned)cell->circ_id);
reason = (uint8_t)cell->payload[0];
+ circ->received_destroy = 1;
if (!CIRCUIT_IS_ORIGIN(circ) &&
+ chan == TO_OR_CIRCUIT(circ)->p_chan &&
cell->circ_id == TO_OR_CIRCUIT(circ)->p_circ_id) {
/* the destroy came from behind */
- circuit_set_p_circid_orconn(TO_OR_CIRCUIT(circ), 0, NULL);
+ circuit_set_p_circid_chan(TO_OR_CIRCUIT(circ), 0, NULL);
circuit_mark_for_close(circ, reason|END_CIRC_REASON_FLAG_REMOTE);
} else { /* the destroy came from ahead */
- circuit_set_n_circid_orconn(circ, 0, NULL);
+ circuit_set_n_circid_chan(circ, 0, NULL);
if (CIRCUIT_IS_ORIGIN(circ)) {
circuit_mark_for_close(circ, reason|END_CIRC_REASON_FLAG_REMOTE);
} else {
@@ -637,730 +549,43 @@ command_process_destroy_cell(cell_t *cell, or_connection_t *conn)
}
}
-/** Called when we as a server receive an appropriate cell while waiting
- * either for a cell or a TLS handshake. Set the connection's state to
- * "handshaking_v3', initializes the or_handshake_state field as needed,
- * and add the cell to the hash of incoming cells.)
- *
- * Return 0 on success; return -1 and mark the connection on failure.
+/** Callback to handle a new channel; call command_setup_channel() to give
+ * it the right cell handlers.
*/
-static int
-enter_v3_handshake_with_cell(var_cell_t *cell, or_connection_t *conn)
-{
- const int started_here = connection_or_nonopen_was_started_here(conn);
-
- tor_assert(conn->_base.state == OR_CONN_STATE_TLS_HANDSHAKING ||
- conn->_base.state == OR_CONN_STATE_TLS_SERVER_RENEGOTIATING);
-
- if (started_here) {
- log_fn(LOG_PROTOCOL_WARN, LD_OR,
- "Received a cell while TLS-handshaking, not in "
- "OR_HANDSHAKING_V3, on a connection we originated.");
- }
- connection_or_block_renegotiation(conn);
- conn->_base.state = OR_CONN_STATE_OR_HANDSHAKING_V3;
- if (connection_init_or_handshake_state(conn, started_here) < 0) {
- connection_mark_for_close(TO_CONN(conn));
- return -1;
- }
- or_handshake_state_record_var_cell(conn->handshake_state, cell, 1);
- return 0;
-}
-/** Process a 'versions' cell. The current link protocol version must be 0
- * to indicate that no version has yet been negotiated. We compare the
- * versions in the cell to the list of versions we support, pick the
- * highest version we have in common, and continue the negotiation from
- * there.
- */
static void
-command_process_versions_cell(var_cell_t *cell, or_connection_t *conn)
+command_handle_incoming_channel(channel_listener_t *listener, channel_t *chan)
{
- int highest_supported_version = 0;
- const uint8_t *cp, *end;
- const int started_here = connection_or_nonopen_was_started_here(conn);
- if (conn->link_proto != 0 ||
- (conn->handshake_state && conn->handshake_state->received_versions)) {
- log_fn(LOG_PROTOCOL_WARN, LD_OR,
- "Received a VERSIONS cell on a connection with its version "
- "already set to %d; dropping", (int) conn->link_proto);
- return;
- }
- switch (conn->_base.state)
- {
- case OR_CONN_STATE_OR_HANDSHAKING_V2:
- case OR_CONN_STATE_OR_HANDSHAKING_V3:
- break;
- case OR_CONN_STATE_TLS_HANDSHAKING:
- case OR_CONN_STATE_TLS_SERVER_RENEGOTIATING:
- default:
- log_fn(LOG_PROTOCOL_WARN, LD_OR,
- "VERSIONS cell while in unexpected state");
- return;
- }
+ tor_assert(listener);
+ tor_assert(chan);
- tor_assert(conn->handshake_state);
- end = cell->payload + cell->payload_len;
- for (cp = cell->payload; cp+1 < end; ++cp) {
- uint16_t v = ntohs(get_uint16(cp));
- if (is_or_protocol_version_known(v) && v > highest_supported_version)
- highest_supported_version = v;
- }
- if (!highest_supported_version) {
- log_fn(LOG_PROTOCOL_WARN, LD_OR,
- "Couldn't find a version in common between my version list and the "
- "list in the VERSIONS cell; closing connection.");
- connection_mark_for_close(TO_CONN(conn));
- return;
- } else if (highest_supported_version == 1) {
- /* Negotiating version 1 makes no sense, since version 1 has no VERSIONS
- * cells. */
- log_fn(LOG_PROTOCOL_WARN, LD_OR,
- "Used version negotiation protocol to negotiate a v1 connection. "
- "That's crazily non-compliant. Closing connection.");
- connection_mark_for_close(TO_CONN(conn));
- return;
- } else if (highest_supported_version < 3 &&
- conn->_base.state == OR_CONN_STATE_OR_HANDSHAKING_V3) {
- log_fn(LOG_PROTOCOL_WARN, LD_OR,
- "Negotiated link protocol 2 or lower after doing a v3 TLS "
- "handshake. Closing connection.");
- connection_mark_for_close(TO_CONN(conn));
- return;
- } else if (highest_supported_version != 2 &&
- conn->_base.state == OR_CONN_STATE_OR_HANDSHAKING_V2) {
- /* XXXX This should eventually be a log_protocol_warn */
- log_fn(LOG_WARN, LD_OR,
- "Negotiated link with non-2 protocol after doing a v2 TLS "
- "handshake with %s. Closing connection.",
- fmt_addr(&conn->_base.addr));
- connection_mark_for_close(TO_CONN(conn));
- return;
- }
-
- conn->link_proto = highest_supported_version;
- conn->handshake_state->received_versions = 1;
-
- if (conn->link_proto == 2) {
- log_info(LD_OR, "Negotiated version %d with %s:%d; sending NETINFO.",
- highest_supported_version,
- safe_str_client(conn->_base.address),
- conn->_base.port);
-
- if (connection_or_send_netinfo(conn) < 0) {
- connection_mark_for_close(TO_CONN(conn));
- return;
- }
- } else {
- const int send_versions = !started_here;
- /* If we want to authenticate, send a CERTS cell */
- const int send_certs = !started_here || public_server_mode(get_options());
- /* If we're a relay that got a connection, ask for authentication. */
- const int send_chall = !started_here && public_server_mode(get_options());
- /* If our certs cell will authenticate us, we can send a netinfo cell
- * right now. */
- const int send_netinfo = !started_here;
- const int send_any =
- send_versions || send_certs || send_chall || send_netinfo;
- tor_assert(conn->link_proto >= 3);
-
- log_info(LD_OR, "Negotiated version %d with %s:%d; %s%s%s%s%s",
- highest_supported_version,
- safe_str_client(conn->_base.address),
- conn->_base.port,
- send_any ? "Sending cells:" : "Waiting for CERTS cell",
- send_versions ? " VERSIONS" : "",
- send_certs ? " CERTS" : "",
- send_chall ? " AUTH_CHALLENGE" : "",
- send_netinfo ? " NETINFO" : "");
-
-#ifdef DISABLE_V3_LINKPROTO_SERVERSIDE
- if (1) {
- connection_mark_for_close(TO_CONN(conn));
- return;
- }
-#endif
-
- if (send_versions) {
- if (connection_or_send_versions(conn, 1) < 0) {
- log_warn(LD_OR, "Couldn't send versions cell");
- connection_mark_for_close(TO_CONN(conn));
- return;
- }
- }
- if (send_certs) {
- if (connection_or_send_certs_cell(conn) < 0) {
- log_warn(LD_OR, "Couldn't send certs cell");
- connection_mark_for_close(TO_CONN(conn));
- return;
- }
- }
- if (send_chall) {
- if (connection_or_send_auth_challenge_cell(conn) < 0) {
- log_warn(LD_OR, "Couldn't send auth_challenge cell");
- connection_mark_for_close(TO_CONN(conn));
- return;
- }
- }
- if (send_netinfo) {
- if (connection_or_send_netinfo(conn) < 0) {
- log_warn(LD_OR, "Couldn't send netinfo cell");
- connection_mark_for_close(TO_CONN(conn));
- return;
- }
- }
- }
-}
-
-/** Process a 'netinfo' cell: read and act on its contents, and set the
- * connection state to "open". */
-static void
-command_process_netinfo_cell(cell_t *cell, or_connection_t *conn)
-{
- time_t timestamp;
- uint8_t my_addr_type;
- uint8_t my_addr_len;
- const uint8_t *my_addr_ptr;
- const uint8_t *cp, *end;
- uint8_t n_other_addrs;
- time_t now = time(NULL);
-
- long apparent_skew = 0;
- uint32_t my_apparent_addr = 0;
-
- if (conn->link_proto < 2) {
- log_fn(LOG_PROTOCOL_WARN, LD_OR,
- "Received a NETINFO cell on %s connection; dropping.",
- conn->link_proto == 0 ? "non-versioned" : "a v1");
- return;
- }
- if (conn->_base.state != OR_CONN_STATE_OR_HANDSHAKING_V2 &&
- conn->_base.state != OR_CONN_STATE_OR_HANDSHAKING_V3) {
- log_fn(LOG_PROTOCOL_WARN, LD_OR,
- "Received a NETINFO cell on non-handshaking connection; dropping.");
- return;
- }
- tor_assert(conn->handshake_state &&
- conn->handshake_state->received_versions);
-
- if (conn->_base.state == OR_CONN_STATE_OR_HANDSHAKING_V3) {
- tor_assert(conn->link_proto >= 3);
- if (conn->handshake_state->started_here) {
- if (!conn->handshake_state->authenticated) {
- log_fn(LOG_PROTOCOL_WARN, LD_OR, "Got a NETINFO cell from server, "
- "but no authentication. Closing the connection.");
- connection_mark_for_close(TO_CONN(conn));
- return;
- }
- } else {
- /* we're the server. If the client never authenticated, we have
- some housekeeping to do.*/
- if (!conn->handshake_state->authenticated) {
- tor_assert(tor_digest_is_zero(
- (const char*)conn->handshake_state->authenticated_peer_id));
- connection_or_set_circid_type(conn, NULL);
-
- connection_or_init_conn_from_address(conn,
- &conn->_base.addr,
- conn->_base.port,
- (const char*)conn->handshake_state->authenticated_peer_id,
- 0);
- }
- }
- }
-
- /* Decode the cell. */
- timestamp = ntohl(get_uint32(cell->payload));
- if (labs(now - conn->handshake_state->sent_versions_at) < 180) {
- apparent_skew = now - timestamp;
- }
-
- my_addr_type = (uint8_t) cell->payload[4];
- my_addr_len = (uint8_t) cell->payload[5];
- my_addr_ptr = (uint8_t*) cell->payload + 6;
- end = cell->payload + CELL_PAYLOAD_SIZE;
- cp = cell->payload + 6 + my_addr_len;
- if (cp >= end) {
- log_fn(LOG_PROTOCOL_WARN, LD_OR,
- "Addresses too long in netinfo cell; closing connection.");
- connection_mark_for_close(TO_CONN(conn));
- return;
- } else if (my_addr_type == RESOLVED_TYPE_IPV4 && my_addr_len == 4) {
- my_apparent_addr = ntohl(get_uint32(my_addr_ptr));
- }
-
- n_other_addrs = (uint8_t) *cp++;
- while (n_other_addrs && cp < end-2) {
- /* Consider all the other addresses; if any matches, this connection is
- * "canonical." */
- tor_addr_t addr;
- const uint8_t *next =
- decode_address_from_payload(&addr, cp, (int)(end-cp));
- if (next == NULL) {
- log_fn(LOG_PROTOCOL_WARN, LD_OR,
- "Bad address in netinfo cell; closing connection.");
- connection_mark_for_close(TO_CONN(conn));
- return;
- }
- if (tor_addr_eq(&addr, &conn->real_addr)) {
- conn->is_canonical = 1;
- break;
- }
- cp = next;
- --n_other_addrs;
- }
-
- /* Act on apparent skew. */
- /** Warn when we get a netinfo skew with at least this value. */
-#define NETINFO_NOTICE_SKEW 3600
- if (labs(apparent_skew) > NETINFO_NOTICE_SKEW &&
- router_get_by_id_digest(conn->identity_digest)) {
- char dbuf[64];
- int severity;
- /*XXXX be smarter about when everybody says we are skewed. */
- if (router_digest_is_trusted_dir(conn->identity_digest))
- severity = LOG_WARN;
- else
- severity = LOG_INFO;
- format_time_interval(dbuf, sizeof(dbuf), apparent_skew);
- log_fn(severity, LD_GENERAL, "Received NETINFO cell with skewed time from "
- "server at %s:%d. It seems that our clock is %s by %s, or "
- "that theirs is %s. Tor requires an accurate clock to work: "
- "please check your time and date settings.",
- conn->_base.address, (int)conn->_base.port,
- apparent_skew>0 ? "ahead" : "behind", dbuf,
- apparent_skew>0 ? "behind" : "ahead");
- if (severity == LOG_WARN) /* only tell the controller if an authority */
- control_event_general_status(LOG_WARN,
- "CLOCK_SKEW SKEW=%ld SOURCE=OR:%s:%d",
- apparent_skew,
- conn->_base.address, conn->_base.port);
- }
-
- /* XXX maybe act on my_apparent_addr, if the source is sufficiently
- * trustworthy. */
- (void)my_apparent_addr;
-
- if (connection_or_set_state_open(conn)<0) {
- log_fn(LOG_PROTOCOL_WARN, LD_OR, "Got good NETINFO cell from %s:%d; but "
- "was unable to make the OR connection become open.",
- safe_str_client(conn->_base.address),
- conn->_base.port);
- connection_mark_for_close(TO_CONN(conn));
- } else {
- log_info(LD_OR, "Got good NETINFO cell from %s:%d; OR connection is now "
- "open, using protocol version %d. Its ID digest is %s",
- safe_str_client(conn->_base.address),
- conn->_base.port, (int)conn->link_proto,
- hex_str(conn->identity_digest, DIGEST_LEN));
- }
- assert_connection_ok(TO_CONN(conn),time(NULL));
+ command_setup_channel(chan);
}
-/** Process a CERTS cell from an OR connection.
- *
- * If the other side should not have sent us a CERTS cell, or the cell is
- * malformed, or it is supposed to authenticate the TLS key but it doesn't,
- * then mark the connection.
- *
- * If the cell has a good cert chain and we're doing a v3 handshake, then
- * store the certificates in or_handshake_state. If this is the client side
- * of the connection, we then authenticate the server or mark the connection.
- * If it's the server side, wait for an AUTHENTICATE cell.
+/** Given a channel, install the right handlers to process incoming
+ * cells on it.
*/
-static void
-command_process_certs_cell(var_cell_t *cell, or_connection_t *conn)
-{
-#define ERR(s) \
- do { \
- log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL, \
- "Received a bad CERTS cell from %s:%d: %s", \
- safe_str(conn->_base.address), conn->_base.port, (s)); \
- connection_mark_for_close(TO_CONN(conn)); \
- goto err; \
- } while (0)
-
- tor_cert_t *link_cert = NULL;
- tor_cert_t *id_cert = NULL;
- tor_cert_t *auth_cert = NULL;
-
- uint8_t *ptr;
- int n_certs, i;
- int send_netinfo = 0;
-
- if (conn->_base.state != OR_CONN_STATE_OR_HANDSHAKING_V3)
- ERR("We're not doing a v3 handshake!");
- if (conn->link_proto < 3)
- ERR("We're not using link protocol >= 3");
- if (conn->handshake_state->received_certs_cell)
- ERR("We already got one");
- if (conn->handshake_state->authenticated) {
- /* Should be unreachable, but let's make sure. */
- ERR("We're already authenticated!");
- }
- if (cell->payload_len < 1)
- ERR("It had no body");
- if (cell->circ_id)
- ERR("It had a nonzero circuit ID");
-
- n_certs = cell->payload[0];
- ptr = cell->payload + 1;
- for (i = 0; i < n_certs; ++i) {
- uint8_t cert_type;
- uint16_t cert_len;
- if (ptr + 3 > cell->payload + cell->payload_len) {
- goto truncated;
- }
- cert_type = *ptr;
- cert_len = ntohs(get_uint16(ptr+1));
- if (ptr + 3 + cert_len > cell->payload + cell->payload_len) {
- goto truncated;
- }
- if (cert_type == OR_CERT_TYPE_TLS_LINK ||
- cert_type == OR_CERT_TYPE_ID_1024 ||
- cert_type == OR_CERT_TYPE_AUTH_1024) {
- tor_cert_t *cert = tor_cert_decode(ptr + 3, cert_len);
- if (!cert) {
- log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
- "Received undecodable certificate in CERTS cell from %s:%d",
- safe_str(conn->_base.address), conn->_base.port);
- } else {
- if (cert_type == OR_CERT_TYPE_TLS_LINK) {
- if (link_cert) {
- tor_cert_free(cert);
- ERR("Too many TLS_LINK certificates");
- }
- link_cert = cert;
- } else if (cert_type == OR_CERT_TYPE_ID_1024) {
- if (id_cert) {
- tor_cert_free(cert);
- ERR("Too many ID_1024 certificates");
- }
- id_cert = cert;
- } else if (cert_type == OR_CERT_TYPE_AUTH_1024) {
- if (auth_cert) {
- tor_cert_free(cert);
- ERR("Too many AUTH_1024 certificates");
- }
- auth_cert = cert;
- } else {
- tor_cert_free(cert);
- }
- }
- }
- ptr += 3 + cert_len;
- continue;
-
- truncated:
- ERR("It ends in the middle of a certificate");
- }
-
- if (conn->handshake_state->started_here) {
- int severity;
- if (! (id_cert && link_cert))
- ERR("The certs we wanted were missing");
- /* Okay. We should be able to check the certificates now. */
- if (! tor_tls_cert_matches_key(conn->tls, link_cert)) {
- ERR("The link certificate didn't match the TLS public key");
- }
- /* Note that this warns more loudly about time and validity if we were
- * _trying_ to connect to an authority, not necessarily if we _did_ connect
- * to one. */
- if (router_digest_is_trusted_dir(conn->identity_digest))
- severity = LOG_WARN;
- else
- severity = LOG_PROTOCOL_WARN;
-
- if (! tor_tls_cert_is_valid(severity, link_cert, id_cert, 0))
- ERR("The link certificate was not valid");
- if (! tor_tls_cert_is_valid(severity, id_cert, id_cert, 1))
- ERR("The ID certificate was not valid");
-
- conn->handshake_state->authenticated = 1;
- {
- const digests_t *id_digests = tor_cert_get_id_digests(id_cert);
- crypto_pk_t *identity_rcvd;
- if (!id_digests)
- ERR("Couldn't compute digests for key in ID cert");
-
- identity_rcvd = tor_tls_cert_get_key(id_cert);
- if (!identity_rcvd)
- ERR("Internal error: Couldn't get RSA key from ID cert.");
- memcpy(conn->handshake_state->authenticated_peer_id,
- id_digests->d[DIGEST_SHA1], DIGEST_LEN);
- connection_or_set_circid_type(conn, identity_rcvd);
- crypto_pk_free(identity_rcvd);
- }
- if (connection_or_client_learned_peer_id(conn,
- conn->handshake_state->authenticated_peer_id) < 0)
- ERR("Problem setting or checking peer id");
-
- log_info(LD_OR, "Got some good certificates from %s:%d: Authenticated it.",
- safe_str(conn->_base.address), conn->_base.port);
-
- conn->handshake_state->id_cert = id_cert;
- id_cert = NULL;
-
- if (!public_server_mode(get_options())) {
- /* If we initiated the connection and we are not a public server, we
- * aren't planning to authenticate at all. At this point we know who we
- * are talking to, so we can just send a netinfo now. */
- send_netinfo = 1;
- }
- } else {
- if (! (id_cert && auth_cert))
- ERR("The certs we wanted were missing");
-
- /* Remember these certificates so we can check an AUTHENTICATE cell */
- if (! tor_tls_cert_is_valid(LOG_PROTOCOL_WARN, auth_cert, id_cert, 1))
- ERR("The authentication certificate was not valid");
- if (! tor_tls_cert_is_valid(LOG_PROTOCOL_WARN, id_cert, id_cert, 1))
- ERR("The ID certificate was not valid");
-
- log_info(LD_OR, "Got some good certificates from %s:%d: "
- "Waiting for AUTHENTICATE.",
- safe_str(conn->_base.address), conn->_base.port);
- /* XXXX check more stuff? */
-
- conn->handshake_state->id_cert = id_cert;
- conn->handshake_state->auth_cert = auth_cert;
- id_cert = auth_cert = NULL;
- }
-
- conn->handshake_state->received_certs_cell = 1;
-
- if (send_netinfo) {
- if (connection_or_send_netinfo(conn) < 0) {
- log_warn(LD_OR, "Couldn't send netinfo cell");
- connection_mark_for_close(TO_CONN(conn));
- goto err;
- }
- }
-
- err:
- tor_cert_free(id_cert);
- tor_cert_free(link_cert);
- tor_cert_free(auth_cert);
-#undef ERR
-}
-
-/** Process an AUTH_CHALLENGE cell from an OR connection.
- *
- * If we weren't supposed to get one (for example, because we're not the
- * originator of the connection), or it's ill-formed, or we aren't doing a v3
- * handshake, mark the connection. If the cell is well-formed but we don't
- * want to authenticate, just drop it. If the cell is well-formed *and* we
- * want to authenticate, send an AUTHENTICATE cell and then a NETINFO cell. */
-static void
-command_process_auth_challenge_cell(var_cell_t *cell, or_connection_t *conn)
+void
+command_setup_channel(channel_t *chan)
{
- int n_types, i, use_type = -1;
- uint8_t *cp;
-
-#define ERR(s) \
- do { \
- log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL, \
- "Received a bad AUTH_CHALLENGE cell from %s:%d: %s", \
- safe_str(conn->_base.address), conn->_base.port, (s)); \
- connection_mark_for_close(TO_CONN(conn)); \
- return; \
- } while (0)
-
- if (conn->_base.state != OR_CONN_STATE_OR_HANDSHAKING_V3)
- ERR("We're not currently doing a v3 handshake");
- if (conn->link_proto < 3)
- ERR("We're not using link protocol >= 3");
- if (! conn->handshake_state->started_here)
- ERR("We didn't originate this connection");
- if (conn->handshake_state->received_auth_challenge)
- ERR("We already received one");
- if (! conn->handshake_state->received_certs_cell)
- ERR("We haven't gotten a CERTS cell yet");
- if (cell->payload_len < OR_AUTH_CHALLENGE_LEN + 2)
- ERR("It was too short");
- if (cell->circ_id)
- ERR("It had a nonzero circuit ID");
-
- n_types = ntohs(get_uint16(cell->payload + OR_AUTH_CHALLENGE_LEN));
- if (cell->payload_len < OR_AUTH_CHALLENGE_LEN + 2 + 2*n_types)
- ERR("It looks truncated");
-
- /* Now see if there is an authentication type we can use */
- cp=cell->payload+OR_AUTH_CHALLENGE_LEN+2;
- for (i=0; i < n_types; ++i, cp += 2) {
- uint16_t authtype = ntohs(get_uint16(cp));
- if (authtype == AUTHTYPE_RSA_SHA256_TLSSECRET)
- use_type = authtype;
- }
-
- conn->handshake_state->received_auth_challenge = 1;
+ tor_assert(chan);
- if (! public_server_mode(get_options())) {
- /* If we're not a public server then we don't want to authenticate on a
- connection we originated, and we already sent a NETINFO cell when we
- got the CERTS cell. We have nothing more to do. */
- return;
- }
-
- if (use_type >= 0) {
- log_info(LD_OR, "Got an AUTH_CHALLENGE cell from %s:%d: Sending "
- "authentication",
- safe_str(conn->_base.address), conn->_base.port);
-
- if (connection_or_send_authenticate_cell(conn, use_type) < 0) {
- log_warn(LD_OR, "Couldn't send authenticate cell");
- connection_mark_for_close(TO_CONN(conn));
- return;
- }
- } else {
- log_info(LD_OR, "Got an AUTH_CHALLENGE cell from %s:%d, but we don't "
- "know any of its authentication types. Not authenticating.",
- safe_str(conn->_base.address), conn->_base.port);
- }
-
- if (connection_or_send_netinfo(conn) < 0) {
- log_warn(LD_OR, "Couldn't send netinfo cell");
- connection_mark_for_close(TO_CONN(conn));
- return;
- }
-
-#undef ERR
+ channel_set_cell_handlers(chan,
+ command_process_cell,
+ command_process_var_cell);
}
-/** Process an AUTHENTICATE cell from an OR connection.
- *
- * If it's ill-formed or we weren't supposed to get one or we're not doing a
- * v3 handshake, then mark the connection. If it does not authenticate the
- * other side of the connection successfully (because it isn't signed right,
- * we didn't get a CERTS cell, etc) mark the connection. Otherwise, accept
- * the identity of the router on the other side of the connection.
+/** Given a listener, install the right handler to process incoming
+ * channels on it.
*/
-static void
-command_process_authenticate_cell(var_cell_t *cell, or_connection_t *conn)
-{
- uint8_t expected[V3_AUTH_FIXED_PART_LEN];
- const uint8_t *auth;
- int authlen;
-
-#define ERR(s) \
- do { \
- log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL, \
- "Received a bad AUTHENTICATE cell from %s:%d: %s", \
- safe_str(conn->_base.address), conn->_base.port, (s)); \
- connection_mark_for_close(TO_CONN(conn)); \
- return; \
- } while (0)
-
- if (conn->_base.state != OR_CONN_STATE_OR_HANDSHAKING_V3)
- ERR("We're not doing a v3 handshake");
- if (conn->link_proto < 3)
- ERR("We're not using link protocol >= 3");
- if (conn->handshake_state->started_here)
- ERR("We originated this connection");
- if (conn->handshake_state->received_authenticate)
- ERR("We already got one!");
- if (conn->handshake_state->authenticated) {
- /* Should be impossible given other checks */
- ERR("The peer is already authenticated");
- }
- if (! conn->handshake_state->received_certs_cell)
- ERR("We never got a certs cell");
- if (conn->handshake_state->auth_cert == NULL)
- ERR("We never got an authentication certificate");
- if (conn->handshake_state->id_cert == NULL)
- ERR("We never got an identity certificate");
- if (cell->payload_len < 4)
- ERR("Cell was way too short");
-
- auth = cell->payload;
- {
- uint16_t type = ntohs(get_uint16(auth));
- uint16_t len = ntohs(get_uint16(auth+2));
- if (4 + len > cell->payload_len)
- ERR("Authenticator was truncated");
-
- if (type != AUTHTYPE_RSA_SHA256_TLSSECRET)
- ERR("Authenticator type was not recognized");
-
- auth += 4;
- authlen = len;
- }
-
- if (authlen < V3_AUTH_BODY_LEN + 1)
- ERR("Authenticator was too short");
-
- if (connection_or_compute_authenticate_cell_body(
- conn, expected, sizeof(expected), NULL, 1) < 0)
- ERR("Couldn't compute expected AUTHENTICATE cell body");
- if (tor_memneq(expected, auth, sizeof(expected)))
- ERR("Some field in the AUTHENTICATE cell body was not as expected");
-
- {
- crypto_pk_t *pk = tor_tls_cert_get_key(
- conn->handshake_state->auth_cert);
- char d[DIGEST256_LEN];
- char *signed_data;
- size_t keysize;
- int signed_len;
-
- if (!pk)
- ERR("Internal error: couldn't get RSA key from AUTH cert.");
- crypto_digest256(d, (char*)auth, V3_AUTH_BODY_LEN, DIGEST_SHA256);
-
- keysize = crypto_pk_keysize(pk);
- signed_data = tor_malloc(keysize);
- signed_len = crypto_pk_public_checksig(pk, signed_data, keysize,
- (char*)auth + V3_AUTH_BODY_LEN,
- authlen - V3_AUTH_BODY_LEN);
- crypto_pk_free(pk);
- if (signed_len < 0) {
- tor_free(signed_data);
- ERR("Signature wasn't valid");
- }
- if (signed_len < DIGEST256_LEN) {
- tor_free(signed_data);
- ERR("Not enough data was signed");
- }
- /* Note that we deliberately allow *more* than DIGEST256_LEN bytes here,
- * in case they're later used to hold a SHA3 digest or something. */
- if (tor_memneq(signed_data, d, DIGEST256_LEN)) {
- tor_free(signed_data);
- ERR("Signature did not match data to be signed.");
- }
- tor_free(signed_data);
- }
-
- /* Okay, we are authenticated. */
- conn->handshake_state->received_authenticate = 1;
- conn->handshake_state->authenticated = 1;
- conn->handshake_state->digest_received_data = 0;
- {
- crypto_pk_t *identity_rcvd =
- tor_tls_cert_get_key(conn->handshake_state->id_cert);
- const digests_t *id_digests =
- tor_cert_get_id_digests(conn->handshake_state->id_cert);
-
- /* This must exist; we checked key type when reading the cert. */
- tor_assert(id_digests);
-
- memcpy(conn->handshake_state->authenticated_peer_id,
- id_digests->d[DIGEST_SHA1], DIGEST_LEN);
-
- connection_or_set_circid_type(conn, identity_rcvd);
- crypto_pk_free(identity_rcvd);
-
- connection_or_init_conn_from_address(conn,
- &conn->_base.addr,
- conn->_base.port,
- (const char*)conn->handshake_state->authenticated_peer_id,
- 0);
-
- log_info(LD_OR, "Got an AUTHENTICATE cell from %s:%d: Looks good.",
- safe_str(conn->_base.address), conn->_base.port);
- }
+void
+command_setup_listener(channel_listener_t *listener)
+{
+ tor_assert(listener);
+ tor_assert(listener->state == CHANNEL_LISTENER_STATE_LISTENING);
-#undef ERR
+ channel_listener_set_listener_fn(listener, command_handle_incoming_channel);
}
diff --git a/src/or/command.h b/src/or/command.h
index 078ccc9f5..adea6adea 100644
--- a/src/or/command.h
+++ b/src/or/command.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,11 +9,17 @@
* \brief Header file for command.c.
**/
-#ifndef _TOR_COMMAND_H
-#define _TOR_COMMAND_H
+#ifndef TOR_COMMAND_H
+#define TOR_COMMAND_H
-void command_process_cell(cell_t *cell, or_connection_t *conn);
-void command_process_var_cell(var_cell_t *cell, or_connection_t *conn);
+#include "channel.h"
+
+void command_process_cell(channel_t *chan, cell_t *cell);
+void command_process_var_cell(channel_t *chan, var_cell_t *cell);
+void command_setup_channel(channel_t *chan);
+void command_setup_listener(channel_listener_t *chan_l);
+
+const char *cell_command_to_string(uint8_t command);
extern uint64_t stats_n_padding_cells_processed;
extern uint64_t stats_n_create_cells_processed;
diff --git a/src/or/config.c b/src/or/config.c
index 90a5dfbda..10df83975 100644
--- a/src/or/config.c
+++ b/src/or/config.c
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -10,32 +10,43 @@
**/
#define CONFIG_PRIVATE
-
#include "or.h"
+#include "addressmap.h"
+#include "channel.h"
#include "circuitbuild.h"
#include "circuitlist.h"
+#include "circuitmux.h"
+#include "circuitmux_ewma.h"
#include "config.h"
#include "connection.h"
#include "connection_edge.h"
#include "connection_or.h"
#include "control.h"
+#include "confparse.h"
#include "cpuworker.h"
#include "dirserv.h"
#include "dirvote.h"
#include "dns.h"
+#include "entrynodes.h"
#include "geoip.h"
#include "hibernate.h"
#include "main.h"
#include "networkstatus.h"
+#include "nodelist.h"
#include "policies.h"
#include "relay.h"
#include "rendclient.h"
#include "rendservice.h"
#include "rephist.h"
#include "router.h"
+#include "sandbox.h"
#include "util.h"
#include "routerlist.h"
+#include "routerset.h"
+#include "statefile.h"
#include "transports.h"
+#include "ext_orport.h"
+#include "torgzip.h"
#ifdef _WIN32
#include <shlobj.h>
#endif
@@ -45,51 +56,9 @@
/* From main.c */
extern int quiet_level;
-/** Enumeration of types which option values can take */
-typedef enum config_type_t {
- CONFIG_TYPE_STRING = 0, /**< An arbitrary string. */
- CONFIG_TYPE_FILENAME, /**< A filename: some prefixes get expanded. */
- CONFIG_TYPE_UINT, /**< A non-negative integer less than MAX_INT */
- CONFIG_TYPE_INT, /**< Any integer. */
- CONFIG_TYPE_PORT, /**< A port from 1...65535, 0 for "not set", or
- * "auto". */
- CONFIG_TYPE_INTERVAL, /**< A number of seconds, with optional units*/
- CONFIG_TYPE_MSEC_INTERVAL,/**< A number of milliseconds, with optional
- * units */
- CONFIG_TYPE_MEMUNIT, /**< A number of bytes, with optional units*/
- CONFIG_TYPE_DOUBLE, /**< A floating-point value */
- CONFIG_TYPE_BOOL, /**< A boolean value, expressed as 0 or 1. */
- CONFIG_TYPE_AUTOBOOL, /**< A boolean+auto value, expressed 0 for false,
- * 1 for true, and -1 for auto */
- CONFIG_TYPE_ISOTIME, /**< An ISO-formatted time relative to GMT. */
- CONFIG_TYPE_CSV, /**< A list of strings, separated by commas and
- * optional whitespace. */
- CONFIG_TYPE_LINELIST, /**< Uninterpreted config lines */
- CONFIG_TYPE_LINELIST_S, /**< Uninterpreted, context-sensitive config lines,
- * mixed with other keywords. */
- CONFIG_TYPE_LINELIST_V, /**< Catch-all "virtual" option to summarize
- * context-sensitive config lines when fetching.
- */
- CONFIG_TYPE_ROUTERSET, /**< A list of router names, addrs, and fps,
- * parsed into a routerset_t. */
- CONFIG_TYPE_OBSOLETE, /**< Obsolete (ignored) option. */
-} config_type_t;
-
-/** An abbreviation for a configuration option allowed on the command line. */
-typedef struct config_abbrev_t {
- const char *abbreviated;
- const char *full;
- int commandline_only;
- int warn;
-} config_abbrev_t;
-
-/* Handy macro for declaring "In the config file or on the command line,
- * you can abbreviate <b>tok</b>s as <b>tok</b>". */
-#define PLURAL(tok) { #tok, #tok "s", 0, 0 }
-
/** A list of abbreviations and aliases to map command-line options, obsolete
* option names, or alternative option names, to their current values. */
-static config_abbrev_t _option_abbrevs[] = {
+static config_abbrev_t option_abbrevs_[] = {
PLURAL(AuthDirBadDirCC),
PLURAL(AuthDirBadExitCC),
PLURAL(AuthDirInvalidCC),
@@ -114,7 +83,9 @@ static config_abbrev_t _option_abbrevs[] = {
{ "BandwidthRateBytes", "BandwidthRate", 0, 0},
{ "BandwidthBurstBytes", "BandwidthBurst", 0, 0},
{ "DirFetchPostPeriod", "StatusFetchPeriod", 0, 0},
+ { "DirServer", "DirAuthority", 0, 0}, /* XXXX024 later, make this warn? */
{ "MaxConn", "ConnLimit", 0, 1},
+ { "MaxMemInCellQueues", "MaxMemInQueues", 0, 0},
{ "ORBindAddress", "ORListenAddress", 0, 0},
{ "DirBindAddress", "DirListenAddress", 0, 0},
{ "SocksBindAddress", "SocksListenAddress", 0, 0},
@@ -130,31 +101,11 @@ static config_abbrev_t _option_abbrevs[] = {
{ "HashedControlPassword", "__HashedControlSessionPassword", 1, 0},
{ "StrictEntryNodes", "StrictNodes", 0, 1},
{ "StrictExitNodes", "StrictNodes", 0, 1},
+ { "VirtualAddrNetwork", "VirtualAddrNetworkIPv4", 0, 0},
+ { "_UseFilteringSSLBufferevents", "UseFilteringSSLBufferevents", 0, 1},
{ NULL, NULL, 0, 0},
};
-/** A list of state-file "abbreviations," for compatibility. */
-static config_abbrev_t _state_abbrevs[] = {
- { "AccountingBytesReadInterval", "AccountingBytesReadInInterval", 0, 0 },
- { "HelperNode", "EntryGuard", 0, 0 },
- { "HelperNodeDownSince", "EntryGuardDownSince", 0, 0 },
- { "HelperNodeUnlistedSince", "EntryGuardUnlistedSince", 0, 0 },
- { "EntryNode", "EntryGuard", 0, 0 },
- { "EntryNodeDownSince", "EntryGuardDownSince", 0, 0 },
- { "EntryNodeUnlistedSince", "EntryGuardUnlistedSince", 0, 0 },
- { NULL, NULL, 0, 0},
-};
-#undef PLURAL
-
-/** A variable allowed in the configuration file or on the command line. */
-typedef struct config_var_t {
- const char *name; /**< The full keyword (case insensitive). */
- config_type_t type; /**< How to interpret the type and turn it into a
- * value. */
- off_t var_offset; /**< Offset of the corresponding member of or_options_t. */
- const char *initvalue; /**< String (or null) describing initial value. */
-} config_var_t;
-
/** An entry for config_vars: "The option <b>name</b> has type
* CONFIG_TYPE_<b>conftype</b>, and corresponds to
* or_options_t.<b>member</b>"
@@ -175,7 +126,7 @@ typedef struct config_var_t {
* abbreviations, order is significant, since the first matching option will
* be chosen first.
*/
-static config_var_t _option_vars[] = {
+static config_var_t option_vars_[] = {
OBSOLETE("AccountingMaxKB"),
V(AccountingMax, MEMUNIT, "0 bytes"),
V(AccountingStart, STRING, NULL),
@@ -187,7 +138,7 @@ static config_var_t _option_vars[] = {
V(AllowSingleHopExits, BOOL, "0"),
V(AlternateBridgeAuthority, LINELIST, NULL),
V(AlternateDirAuthority, LINELIST, NULL),
- V(AlternateHSAuthority, LINELIST, NULL),
+ OBSOLETE("AlternateHSAuthority"),
V(AssumeReachable, BOOL, "0"),
V(AuthDirBadDir, LINELIST, NULL),
V(AuthDirBadDirCCs, CSV, ""),
@@ -204,12 +155,13 @@ static config_var_t _option_vars[] = {
V(AuthDirListBadExits, BOOL, "0"),
V(AuthDirMaxServersPerAddr, UINT, "2"),
V(AuthDirMaxServersPerAuthAddr,UINT, "5"),
+ V(AuthDirHasIPv6Connectivity, BOOL, "0"),
VAR("AuthoritativeDirectory", BOOL, AuthoritativeDir, "0"),
V(AutomapHostsOnResolve, BOOL, "0"),
V(AutomapHostsSuffixes, CSV, ".onion,.exit"),
V(AvoidDiskWrites, BOOL, "0"),
- V(BandwidthBurst, MEMUNIT, "10 MB"),
- V(BandwidthRate, MEMUNIT, "5 MB"),
+ V(BandwidthBurst, MEMUNIT, "1 GB"),
+ V(BandwidthRate, MEMUNIT, "1 GB"),
V(BridgeAuthoritativeDir, BOOL, "0"),
VAR("Bridge", LINELIST, Bridges, NULL),
V(BridgePassword, STRING, NULL),
@@ -223,8 +175,10 @@ static config_var_t _option_vars[] = {
V(CircuitPriorityHalflife, DOUBLE, "-100.0"), /*negative:'Use default'*/
V(ClientDNSRejectInternalAddresses, BOOL,"1"),
V(ClientOnly, BOOL, "0"),
+ V(ClientPreferIPv6ORPort, BOOL, "0"),
V(ClientRejectInternalAddresses, BOOL, "1"),
V(ClientTransportPlugin, LINELIST, NULL),
+ V(ClientUseIPv6, BOOL, "0"),
V(ConsensusParams, STRING, NULL),
V(ConnLimit, UINT, "1000"),
V(ConnDirectionStatistics, BOOL, "0"),
@@ -257,14 +211,19 @@ static config_var_t _option_vars[] = {
OBSOLETE("DirRecordUsageRetainIPs"),
OBSOLETE("DirRecordUsageSaveInterval"),
V(DirReqStatistics, BOOL, "1"),
- VAR("DirServer", LINELIST, DirServers, NULL),
+ VAR("DirAuthority", LINELIST, DirAuthorities, NULL),
+ V(DirAuthorityFallbackRate, DOUBLE, "1.0"),
V(DisableAllSwap, BOOL, "0"),
V(DisableDebuggerAttachment, BOOL, "1"),
V(DisableIOCP, BOOL, "1"),
+ OBSOLETE("DisableV2DirectoryInfo_"),
V(DynamicDHGroups, BOOL, "0"),
VPORT(DNSPort, LINELIST, NULL),
V(DNSListenAddress, LINELIST, NULL),
V(DownloadExtraInfo, BOOL, "0"),
+ V(TestingEnableConnBwEvent, BOOL, "0"),
+ V(TestingEnableCellStatsEvent, BOOL, "0"),
+ V(TestingEnableTbEmptyEvent, BOOL, "0"),
V(EnforceDistinctSubnets, BOOL, "1"),
V(EntryNodes, ROUTERSET, NULL),
V(EntryStatistics, BOOL, "0"),
@@ -277,31 +236,34 @@ static config_var_t _option_vars[] = {
V(ExitPolicyRejectPrivate, BOOL, "1"),
V(ExitPortStatistics, BOOL, "0"),
V(ExtendAllowPrivateAddresses, BOOL, "0"),
+ VPORT(ExtORPort, LINELIST, NULL),
+ V(ExtORPortCookieAuthFile, STRING, NULL),
V(ExtraInfoStatistics, BOOL, "1"),
+ V(FallbackDir, LINELIST, NULL),
-#if defined (WINCE)
- V(FallbackNetworkstatusFile, FILENAME, "fallback-consensus"),
-#else
- V(FallbackNetworkstatusFile, FILENAME,
- SHARE_DATADIR PATH_SEPARATOR "tor" PATH_SEPARATOR "fallback-consensus"),
-#endif
+ OBSOLETE("FallbackNetworkstatusFile"),
V(FascistFirewall, BOOL, "0"),
V(FirewallPorts, CSV, ""),
- V(FastFirstHopPK, BOOL, "1"),
+ V(FastFirstHopPK, AUTOBOOL, "auto"),
V(FetchDirInfoEarly, BOOL, "0"),
V(FetchDirInfoExtraEarly, BOOL, "0"),
V(FetchServerDescriptors, BOOL, "1"),
V(FetchHidServDescriptors, BOOL, "1"),
V(FetchUselessDescriptors, BOOL, "0"),
- V(FetchV2Networkstatus, BOOL, "0"),
+ OBSOLETE("FetchV2Networkstatus"),
+ V(GeoIPExcludeUnknown, AUTOBOOL, "auto"),
#ifdef _WIN32
V(GeoIPFile, FILENAME, "<default>"),
+ V(GeoIPv6File, FILENAME, "<default>"),
#else
V(GeoIPFile, FILENAME,
SHARE_DATADIR PATH_SEPARATOR "tor" PATH_SEPARATOR "geoip"),
+ V(GeoIPv6File, FILENAME,
+ SHARE_DATADIR PATH_SEPARATOR "tor" PATH_SEPARATOR "geoip6"),
#endif
OBSOLETE("GiveGuardFlagTo_CVE_2011_2768_VulnerableRelays"),
OBSOLETE("Group"),
+ V(GuardLifetime, INTERVAL, "0 minutes"),
V(HardwareAccel, BOOL, "0"),
V(HeartbeatPeriod, INTERVAL, "6 hours"),
V(AccelName, STRING, NULL),
@@ -316,7 +278,7 @@ static config_var_t _option_vars[] = {
VAR("HiddenServiceVersion",LINELIST_S, RendConfigLines, NULL),
VAR("HiddenServiceAuthorizeClient",LINELIST_S,RendConfigLines, NULL),
V(HidServAuth, LINELIST, NULL),
- V(HSAuthoritativeDir, BOOL, "0"),
+ OBSOLETE("HSAuthoritativeDir"),
OBSOLETE("HSAuthorityRecordStats"),
V(CloseHSClientCircuitsImmediatelyOnTimeout, BOOL, "0"),
V(CloseHSServiceRendCircuitsImmediatelyOnTimeout, BOOL, "0"),
@@ -324,7 +286,10 @@ static config_var_t _option_vars[] = {
V(HTTPProxyAuthenticator, STRING, NULL),
V(HTTPSProxy, STRING, NULL),
V(HTTPSProxyAuthenticator, STRING, NULL),
+ V(IPv6Exit, BOOL, "0"),
VAR("ServerTransportPlugin", LINELIST, ServerTransportPlugin, NULL),
+ V(ServerTransportListenAddr, LINELIST, NULL),
+ V(ServerTransportOptions, LINELIST, NULL),
V(Socks4Proxy, STRING, NULL),
V(Socks5Proxy, STRING, NULL),
V(Socks5ProxyUsername, STRING, NULL),
@@ -343,7 +308,10 @@ static config_var_t _option_vars[] = {
V(MaxAdvertisedBandwidth, MEMUNIT, "1 GB"),
V(MaxCircuitDirtiness, INTERVAL, "10 minutes"),
V(MaxClientCircuitsPending, UINT, "32"),
- V(MaxOnionsPending, UINT, "100"),
+ VAR("MaxMemInQueues", MEMUNIT, MaxMemInQueues_raw, "0"),
+ OBSOLETE("MaxOnionsPending"),
+ V(MaxOnionQueueDelay, MSEC_INTERVAL, "1750 msec"),
+ V(MinMeasuredBWsForAuthToIgnoreAdvertised, INT, "500"),
OBSOLETE("MonthlyAccountingStart"),
V(MyFamily, STRING, NULL),
V(NewCircuitPeriod, INTERVAL, "30 seconds"),
@@ -351,30 +319,45 @@ static config_var_t _option_vars[] = {
V(NATDListenAddress, LINELIST, NULL),
VPORT(NATDPort, LINELIST, NULL),
V(Nickname, STRING, NULL),
+ V(PredictedPortsRelevanceTime, INTERVAL, "1 hour"),
V(WarnUnsafeSocks, BOOL, "1"),
OBSOLETE("NoPublish"),
VAR("NodeFamily", LINELIST, NodeFamilies, NULL),
V(NumCPUs, UINT, "0"),
+ V(NumDirectoryGuards, UINT, "0"),
V(NumEntryGuards, UINT, "3"),
V(ORListenAddress, LINELIST, NULL),
VPORT(ORPort, LINELIST, NULL),
- V(OutboundBindAddress, STRING, NULL),
+ V(OutboundBindAddress, LINELIST, NULL),
+ OBSOLETE("PathBiasDisableRate"),
V(PathBiasCircThreshold, INT, "-1"),
V(PathBiasNoticeRate, DOUBLE, "-1"),
- V(PathBiasDisableRate, DOUBLE, "-1"),
+ V(PathBiasWarnRate, DOUBLE, "-1"),
+ V(PathBiasExtremeRate, DOUBLE, "-1"),
V(PathBiasScaleThreshold, INT, "-1"),
- V(PathBiasScaleFactor, INT, "-1"),
+ OBSOLETE("PathBiasScaleFactor"),
+ OBSOLETE("PathBiasMultFactor"),
+ V(PathBiasDropGuards, AUTOBOOL, "0"),
+ OBSOLETE("PathBiasUseCloseCounts"),
+
+ V(PathBiasUseThreshold, INT, "-1"),
+ V(PathBiasNoticeUseRate, DOUBLE, "-1"),
+ V(PathBiasExtremeUseRate, DOUBLE, "-1"),
+ V(PathBiasScaleUseThreshold, INT, "-1"),
+ V(PathsNeededToBuildCircuits, DOUBLE, "-1"),
OBSOLETE("PathlenCoinWeight"),
V(PerConnBWBurst, MEMUNIT, "0"),
V(PerConnBWRate, MEMUNIT, "0"),
V(PidFile, STRING, NULL),
V(TestingTorNetwork, BOOL, "0"),
+ V(TestingMinExitFlagThreshold, MEMUNIT, "0"),
+ V(TestingMinFastFlagThreshold, MEMUNIT, "0"),
V(OptimisticData, AUTOBOOL, "auto"),
V(PortForwarding, BOOL, "0"),
V(PortForwardingHelper, FILENAME, "tor-fw-helper"),
- V(PreferTunneledDirConns, BOOL, "1"),
+ OBSOLETE("PreferTunneledDirConns"),
V(ProtocolWarnings, BOOL, "0"),
V(PublishServerDescriptor, CSV, "1"),
V(PublishHidServDescriptors, BOOL, "1"),
@@ -397,6 +380,7 @@ static config_var_t _option_vars[] = {
V(RunAsDaemon, BOOL, "0"),
// V(RunTesting, BOOL, "0"),
OBSOLETE("RunTesting"), // currently unused
+ V(Sandbox, BOOL, "0"),
V(SafeLogging, STRING, "1"),
V(SafeSocks, BOOL, "0"),
V(ServerDNSAllowBrokenConfig, BOOL, "1"),
@@ -412,31 +396,38 @@ static config_var_t _option_vars[] = {
V(SocksPolicy, LINELIST, NULL),
VPORT(SocksPort, LINELIST, NULL),
V(SocksTimeout, INTERVAL, "2 minutes"),
+ V(SSLKeyLifetime, INTERVAL, "0"),
OBSOLETE("StatusFetchPeriod"),
V(StrictNodes, BOOL, "0"),
+ V(Support022HiddenServices, AUTOBOOL, "auto"),
OBSOLETE("SysLog"),
V(TestSocks, BOOL, "0"),
OBSOLETE("TestVia"),
V(TokenBucketRefillInterval, MSEC_INTERVAL, "100 msec"),
V(Tor2webMode, BOOL, "0"),
+ V(TLSECGroup, STRING, NULL),
V(TrackHostExits, CSV, NULL),
V(TrackHostExitsExpire, INTERVAL, "30 minutes"),
OBSOLETE("TrafficShaping"),
V(TransListenAddress, LINELIST, NULL),
VPORT(TransPort, LINELIST, NULL),
- V(TunnelDirConns, BOOL, "1"),
+ V(TransProxyType, STRING, "default"),
+ OBSOLETE("TunnelDirConns"),
V(UpdateBridgesFromAuthority, BOOL, "0"),
V(UseBridges, BOOL, "0"),
V(UseEntryGuards, BOOL, "1"),
+ V(UseEntryGuardsAsDirGuards, BOOL, "1"),
V(UseMicrodescriptors, AUTOBOOL, "auto"),
+ V(UseNTorHandshake, AUTOBOOL, "1"),
V(User, STRING, NULL),
V(UserspaceIOCPBuffers, BOOL, "0"),
- VAR("V1AuthoritativeDirectory",BOOL, V1AuthoritativeDir, "0"),
- VAR("V2AuthoritativeDirectory",BOOL, V2AuthoritativeDir, "0"),
+ OBSOLETE("V1AuthoritativeDirectory"),
+ OBSOLETE("V2AuthoritativeDirectory"),
VAR("V3AuthoritativeDirectory",BOOL, V3AuthoritativeDir, "0"),
V(TestingV3AuthInitialVotingInterval, INTERVAL, "30 minutes"),
V(TestingV3AuthInitialVoteDelay, INTERVAL, "5 minutes"),
V(TestingV3AuthInitialDistDelay, INTERVAL, "5 minutes"),
+ V(TestingV3AuthVotingStartOffset, INTERVAL, "0"),
V(V3AuthVotingInterval, INTERVAL, "1 hour"),
V(V3AuthVoteDelay, INTERVAL, "5 minutes"),
V(V3AuthDistDelay, INTERVAL, "5 minutes"),
@@ -444,9 +435,10 @@ static config_var_t _option_vars[] = {
V(V3AuthUseLegacyKey, BOOL, "0"),
V(V3BandwidthsFile, FILENAME, NULL),
VAR("VersioningAuthoritativeDirectory",BOOL,VersioningAuthoritativeDir, "0"),
- V(VirtualAddrNetwork, STRING, "127.192.0.0/10"),
+ V(VirtualAddrNetworkIPv4, STRING, "127.192.0.0/10"),
+ V(VirtualAddrNetworkIPv6, STRING, "[FE80::]/10"),
V(WarnPlaintextPorts, CSV, "23,109,110,143"),
- V(_UseFilteringSSLBufferevents, BOOL, "0"),
+ V(UseFilteringSSLBufferevents, BOOL, "0"),
VAR("__ReloadTorrcOnSIGHUP", BOOL, ReloadTorrcOnSIGHUP, "1"),
VAR("__AllDirActionsPrivate", BOOL, AllDirActionsPrivate, "0"),
VAR("__DisablePredictedCircuits",BOOL,DisablePredictedCircuits, "0"),
@@ -456,7 +448,25 @@ static config_var_t _option_vars[] = {
VAR("__OwningControllerProcess",STRING,OwningControllerProcess, NULL),
V(MinUptimeHidServDirectoryV2, INTERVAL, "25 hours"),
V(VoteOnHidServDirectoriesV2, BOOL, "1"),
- V(_UsingTestNetworkDefaults, BOOL, "0"),
+ V(TestingServerDownloadSchedule, CSV_INTERVAL, "0, 0, 0, 60, 60, 120, "
+ "300, 900, 2147483647"),
+ V(TestingClientDownloadSchedule, CSV_INTERVAL, "0, 0, 60, 300, 600, "
+ "2147483647"),
+ V(TestingServerConsensusDownloadSchedule, CSV_INTERVAL, "0, 0, 60, "
+ "300, 600, 1800, 1800, 1800, 1800, "
+ "1800, 3600, 7200"),
+ V(TestingClientConsensusDownloadSchedule, CSV_INTERVAL, "0, 0, 60, "
+ "300, 600, 1800, 3600, 3600, 3600, "
+ "10800, 21600, 43200"),
+ V(TestingBridgeDownloadSchedule, CSV_INTERVAL, "3600, 900, 900, 3600"),
+ V(TestingClientMaxIntervalWithoutRequest, INTERVAL, "10 minutes"),
+ V(TestingDirConnectionMaxStall, INTERVAL, "5 minutes"),
+ V(TestingConsensusMaxDownloadTries, UINT, "8"),
+ V(TestingDescriptorMaxDownloadTries, UINT, "8"),
+ V(TestingMicrodescMaxDownloadTries, UINT, "8"),
+ V(TestingCertMaxDownloadTries, UINT, "8"),
+ V(TestingDirAuthVoteGuard, ROUTERSET, NULL),
+ VAR("___UsingTestNetworkDefaults", BOOL, UsingTestNetworkDefaults_, "0"),
{ NULL, CONFIG_TYPE_OBSOLETE, 0, NULL }
};
@@ -481,133 +491,40 @@ static const config_var_t testing_tor_network_defaults[] = {
V(TestingV3AuthInitialVotingInterval, INTERVAL, "5 minutes"),
V(TestingV3AuthInitialVoteDelay, INTERVAL, "20 seconds"),
V(TestingV3AuthInitialDistDelay, INTERVAL, "20 seconds"),
+ V(TestingV3AuthVotingStartOffset, INTERVAL, "0"),
V(TestingAuthDirTimeToLearnReachability, INTERVAL, "0 minutes"),
V(TestingEstimatedDescriptorPropagationTime, INTERVAL, "0 minutes"),
V(MinUptimeHidServDirectoryV2, INTERVAL, "0 minutes"),
- V(_UsingTestNetworkDefaults, BOOL, "1"),
+ V(TestingServerDownloadSchedule, CSV_INTERVAL, "0, 0, 0, 5, 10, 15, "
+ "20, 30, 60"),
+ V(TestingClientDownloadSchedule, CSV_INTERVAL, "0, 0, 5, 10, 15, 20, "
+ "30, 60"),
+ V(TestingServerConsensusDownloadSchedule, CSV_INTERVAL, "0, 0, 5, 10, "
+ "15, 20, 30, 60"),
+ V(TestingClientConsensusDownloadSchedule, CSV_INTERVAL, "0, 0, 5, 10, "
+ "15, 20, 30, 60"),
+ V(TestingBridgeDownloadSchedule, CSV_INTERVAL, "60, 30, 30, 60"),
+ V(TestingClientMaxIntervalWithoutRequest, INTERVAL, "5 seconds"),
+ V(TestingDirConnectionMaxStall, INTERVAL, "30 seconds"),
+ V(TestingConsensusMaxDownloadTries, UINT, "80"),
+ V(TestingDescriptorMaxDownloadTries, UINT, "80"),
+ V(TestingMicrodescMaxDownloadTries, UINT, "80"),
+ V(TestingCertMaxDownloadTries, UINT, "80"),
+ V(TestingEnableConnBwEvent, BOOL, "1"),
+ V(TestingEnableCellStatsEvent, BOOL, "1"),
+ V(TestingEnableTbEmptyEvent, BOOL, "1"),
+ VAR("___UsingTestNetworkDefaults", BOOL, UsingTestNetworkDefaults_, "1"),
{ NULL, CONFIG_TYPE_OBSOLETE, 0, NULL }
};
-#undef VAR
-
-#define VAR(name,conftype,member,initvalue) \
- { name, CONFIG_TYPE_ ## conftype, STRUCT_OFFSET(or_state_t, member), \
- initvalue }
-
-/** Array of "state" variables saved to the ~/.tor/state file. */
-static config_var_t _state_vars[] = {
- /* Remember to document these in state-contents.txt ! */
-
- V(AccountingBytesReadInInterval, MEMUNIT, NULL),
- V(AccountingBytesWrittenInInterval, MEMUNIT, NULL),
- V(AccountingExpectedUsage, MEMUNIT, NULL),
- V(AccountingIntervalStart, ISOTIME, NULL),
- V(AccountingSecondsActive, INTERVAL, NULL),
- V(AccountingSecondsToReachSoftLimit,INTERVAL, NULL),
- V(AccountingSoftLimitHitAt, ISOTIME, NULL),
- V(AccountingBytesAtSoftLimit, MEMUNIT, NULL),
-
- VAR("EntryGuard", LINELIST_S, EntryGuards, NULL),
- VAR("EntryGuardDownSince", LINELIST_S, EntryGuards, NULL),
- VAR("EntryGuardUnlistedSince", LINELIST_S, EntryGuards, NULL),
- VAR("EntryGuardAddedBy", LINELIST_S, EntryGuards, NULL),
- VAR("EntryGuardPathBias", LINELIST_S, EntryGuards, NULL),
- V(EntryGuards, LINELIST_V, NULL),
-
- VAR("TransportProxy", LINELIST_S, TransportProxies, NULL),
- V(TransportProxies, LINELIST_V, NULL),
-
- V(BWHistoryReadEnds, ISOTIME, NULL),
- V(BWHistoryReadInterval, UINT, "900"),
- V(BWHistoryReadValues, CSV, ""),
- V(BWHistoryReadMaxima, CSV, ""),
- V(BWHistoryWriteEnds, ISOTIME, NULL),
- V(BWHistoryWriteInterval, UINT, "900"),
- V(BWHistoryWriteValues, CSV, ""),
- V(BWHistoryWriteMaxima, CSV, ""),
- V(BWHistoryDirReadEnds, ISOTIME, NULL),
- V(BWHistoryDirReadInterval, UINT, "900"),
- V(BWHistoryDirReadValues, CSV, ""),
- V(BWHistoryDirReadMaxima, CSV, ""),
- V(BWHistoryDirWriteEnds, ISOTIME, NULL),
- V(BWHistoryDirWriteInterval, UINT, "900"),
- V(BWHistoryDirWriteValues, CSV, ""),
- V(BWHistoryDirWriteMaxima, CSV, ""),
-
- V(TorVersion, STRING, NULL),
-
- V(LastRotatedOnionKey, ISOTIME, NULL),
- V(LastWritten, ISOTIME, NULL),
-
- V(TotalBuildTimes, UINT, NULL),
- V(CircuitBuildAbandonedCount, UINT, "0"),
- VAR("CircuitBuildTimeBin", LINELIST_S, BuildtimeHistogram, NULL),
- VAR("BuildtimeHistogram", LINELIST_V, BuildtimeHistogram, NULL),
- { NULL, CONFIG_TYPE_OBSOLETE, 0, NULL }
-};
#undef VAR
#undef V
#undef OBSOLETE
-/** Represents an English description of a configuration variable; used when
- * generating configuration file comments. */
-typedef struct config_var_description_t {
- const char *name;
- const char *description;
-} config_var_description_t;
-
-/** Type of a callback to validate whether a given configuration is
- * well-formed and consistent. See options_trial_assign() for documentation
- * of arguments. */
-typedef int (*validate_fn_t)(void*,void*,int,char**);
-
-/** Information on the keys, value types, key-to-struct-member mappings,
- * variable descriptions, validation functions, and abbreviations for a
- * configuration or storage format. */
-typedef struct {
- size_t size; /**< Size of the struct that everything gets parsed into. */
- uint32_t magic; /**< Required 'magic value' to make sure we have a struct
- * of the right type. */
- off_t magic_offset; /**< Offset of the magic value within the struct. */
- config_abbrev_t *abbrevs; /**< List of abbreviations that we expand when
- * parsing this format. */
- config_var_t *vars; /**< List of variables we recognize, their default
- * values, and where we stick them in the structure. */
- validate_fn_t validate_fn; /**< Function to validate config. */
- /** If present, extra is a LINELIST variable for unrecognized
- * lines. Otherwise, unrecognized lines are an error. */
- config_var_t *extra;
-} config_format_t;
-
-/** Macro: assert that <b>cfg</b> has the right magic field for format
- * <b>fmt</b>. */
-#define CHECK(fmt, cfg) STMT_BEGIN \
- tor_assert(fmt && cfg); \
- tor_assert((fmt)->magic == \
- *(uint32_t*)STRUCT_VAR_P(cfg,fmt->magic_offset)); \
- STMT_END
-
#ifdef _WIN32
static char *get_windows_conf_root(void);
#endif
-static void config_line_append(config_line_t **lst,
- const char *key, const char *val);
-static void option_clear(const config_format_t *fmt, or_options_t *options,
- const config_var_t *var);
-static void option_reset(const config_format_t *fmt, or_options_t *options,
- const config_var_t *var, int use_defaults);
-static void config_free(const config_format_t *fmt, void *options);
-static int config_lines_eq(config_line_t *a, config_line_t *b);
-static int config_count_key(const config_line_t *a, const char *key);
-static int option_is_same(const config_format_t *fmt,
- const or_options_t *o1, const or_options_t *o2,
- const char *name);
-static or_options_t *options_dup(const config_format_t *fmt,
- const or_options_t *old);
-static int options_validate(or_options_t *old_options,
- or_options_t *options,
- int from_setconf, char **msg);
static int options_act_reversible(const or_options_t *old_options, char **msg);
static int options_act(const or_options_t *old_options);
static int options_transition_allowed(const or_options_t *old,
@@ -617,15 +534,20 @@ static int options_transition_affects_workers(
const or_options_t *old_options, const or_options_t *new_options);
static int options_transition_affects_descriptor(
const or_options_t *old_options, const or_options_t *new_options);
-static int check_nickname_list(const char *lst, const char *name, char **msg);
+static int check_nickname_list(char **lst, const char *name, char **msg);
-static int parse_bridge_line(const char *line, int validate_only);
-static int parse_client_transport_line(const char *line, int validate_only);
+static int parse_client_transport_line(const or_options_t *options,
+ const char *line, int validate_only);
-static int parse_server_transport_line(const char *line, int validate_only);
-static int parse_dir_server_line(const char *line,
+static int parse_server_transport_line(const or_options_t *options,
+ const char *line, int validate_only);
+static char *get_bindaddr_from_transport_listen_line(const char *line,
+ const char *transport);
+static int parse_dir_authority_line(const char *line,
dirinfo_type_t required_type,
int validate_only);
+static int parse_dir_fallback_line(const char *line,
+ int validate_only);
static void port_cfg_free(port_cfg_t *port);
static int parse_ports(or_options_t *options, int validate_only,
char **msg_out, int *n_ports_out);
@@ -635,55 +557,34 @@ static int check_server_ports(const smartlist_t *ports,
static int validate_data_directory(or_options_t *options);
static int write_configuration_file(const char *fname,
const or_options_t *options);
-static config_line_t *get_assigned_option(const config_format_t *fmt,
- const void *options, const char *key,
- int escape_val);
-static void config_init(const config_format_t *fmt, void *options);
-static int or_state_validate(or_state_t *old_options, or_state_t *options,
- int from_setconf, char **msg);
-static int or_state_load(void);
static int options_init_logs(or_options_t *options, int validate_only);
-static uint64_t config_parse_memunit(const char *s, int *ok);
-static int config_parse_msec_interval(const char *s, int *ok);
-static int config_parse_interval(const char *s, int *ok);
static void init_libevent(const or_options_t *options);
static int opt_streq(const char *s1, const char *s2);
+static int parse_outbound_addresses(or_options_t *options, int validate_only,
+ char **msg);
+static void config_maybe_load_geoip_files_(const or_options_t *options,
+ const or_options_t *old_options);
+static int options_validate_cb(void *old_options, void *options,
+ void *default_options,
+ int from_setconf, char **msg);
+static uint64_t compute_real_max_mem_in_queues(const uint64_t val,
+ int log_guess);
/** Magic value for or_options_t. */
#define OR_OPTIONS_MAGIC 9090909
/** Configuration format for or_options_t. */
-static config_format_t options_format = {
+STATIC config_format_t options_format = {
sizeof(or_options_t),
OR_OPTIONS_MAGIC,
- STRUCT_OFFSET(or_options_t, _magic),
- _option_abbrevs,
- _option_vars,
- (validate_fn_t)options_validate,
+ STRUCT_OFFSET(or_options_t, magic_),
+ option_abbrevs_,
+ option_vars_,
+ options_validate_cb,
NULL
};
-/** Magic value for or_state_t. */
-#define OR_STATE_MAGIC 0x57A73f57
-
-/** "Extra" variable in the state that receives lines we can't parse. This
- * lets us preserve options from versions of Tor newer than us. */
-static config_var_t state_extra_var = {
- "__extra", CONFIG_TYPE_LINELIST, STRUCT_OFFSET(or_state_t, ExtraLines), NULL
-};
-
-/** Configuration format for or_state_t. */
-static const config_format_t state_format = {
- sizeof(or_state_t),
- OR_STATE_MAGIC,
- STRUCT_OFFSET(or_state_t, _magic),
- _state_abbrevs,
- _state_vars,
- (validate_fn_t)or_state_validate,
- &state_extra_var,
-};
-
/*
* Functions to read and write the global options pointer.
*/
@@ -697,10 +598,12 @@ static or_options_t *global_default_options = NULL;
static char *torrc_fname = NULL;
/** Name of the most recently read torrc-defaults file.*/
static char *torrc_defaults_fname;
-/** Persistent serialized state. */
-static or_state_t *global_state = NULL;
-/** Configuration Options set by command line. */
+/** Configuration options set by command line. */
static config_line_t *global_cmdline_options = NULL;
+/** Non-configuration options set by the command line */
+static config_line_t *global_cmdline_only_options = NULL;
+/** Boolean: Have we parsed the command line? */
+static int have_parsed_cmdline = 0;
/** Contents of most recently read DirPortFrontPage file. */
static char *global_dirfrontpagecontents = NULL;
/** List of port_cfg_t for all configured ports. */
@@ -713,16 +616,6 @@ get_dirportfrontpage(void)
return global_dirfrontpagecontents;
}
-/** Allocate an empty configuration object of a given format type. */
-static void *
-config_alloc(const config_format_t *fmt)
-{
- void *opts = tor_malloc_zero(fmt->size);
- *(uint32_t*)STRUCT_VAR_P(opts, fmt->magic_offset) = fmt->magic;
- CHECK(fmt, opts);
- return opts;
-}
-
/** Return the currently configured options. */
or_options_t *
get_options_mutable(void)
@@ -732,8 +625,8 @@ get_options_mutable(void)
}
/** Returns the currently configured options */
-const or_options_t *
-get_options(void)
+MOCK_IMPL(const or_options_t *,
+get_options,(void))
{
return get_options_mutable();
}
@@ -773,21 +666,26 @@ set_options(or_options_t *new_val, char **msg)
var->type == CONFIG_TYPE_OBSOLETE) {
continue;
}
- if (!option_is_same(&options_format, new_val, old_options, var_name)) {
- line = get_assigned_option(&options_format, new_val, var_name, 1);
+ if (!config_is_same(&options_format, new_val, old_options, var_name)) {
+ line = config_get_assigned_option(&options_format, new_val,
+ var_name, 1);
if (line) {
- for (; line; line = line->next) {
+ config_line_t *next;
+ for (; line; line = next) {
+ next = line->next;
smartlist_add(elements, line->key);
smartlist_add(elements, line->value);
+ tor_free(line);
}
} else {
- smartlist_add(elements, (char*)options_format.vars[i].name);
+ smartlist_add(elements, tor_strdup(options_format.vars[i].name));
smartlist_add(elements, NULL);
}
}
}
control_event_conf_changed(elements);
+ SMARTLIST_FOREACH(elements, char *, cp, tor_free(cp));
smartlist_free(elements);
}
@@ -837,19 +735,20 @@ get_short_version(void)
/** Release additional memory allocated in options
*/
-static void
+STATIC void
or_options_free(or_options_t *options)
{
if (!options)
return;
- routerset_free(options->_ExcludeExitNodesUnion);
+ routerset_free(options->ExcludeExitNodesUnion_);
if (options->NodeFamilySets) {
SMARTLIST_FOREACH(options->NodeFamilySets, routerset_t *,
rs, routerset_free(rs));
smartlist_free(options->NodeFamilySets);
}
- tor_free(options->_BridgePassword_AuthDigest);
+ tor_free(options->BridgePassword_AuthDigest_);
+ tor_free(options->command_arg);
config_free(&options_format, options);
}
@@ -863,15 +762,15 @@ config_free_all(void)
or_options_free(global_default_options);
global_default_options = NULL;
- config_free(&state_format, global_state);
- global_state = NULL;
-
config_free_lines(global_cmdline_options);
global_cmdline_options = NULL;
+ config_free_lines(global_cmdline_only_options);
+ global_cmdline_only_options = NULL;
+
if (configured_ports) {
SMARTLIST_FOREACH(configured_ports,
- port_cfg_t *, p, tor_free(p));
+ port_cfg_t *, p, port_cfg_free(p));
smartlist_free(configured_ports);
configured_ports = NULL;
}
@@ -880,6 +779,9 @@ config_free_all(void)
tor_free(torrc_defaults_fname);
tor_free(the_tor_version);
tor_free(global_dirfrontpagecontents);
+
+ tor_free(the_short_tor_version);
+ tor_free(the_tor_version);
}
/** Make <b>address</b> -- a piece of information related to our operation as
@@ -892,7 +794,7 @@ const char *
safe_str_client(const char *address)
{
tor_assert(address);
- if (get_options()->_SafeLogging == SAFELOG_SCRUB_ALL)
+ if (get_options()->SafeLogging_ == SAFELOG_SCRUB_ALL)
return "[scrubbed]";
else
return address;
@@ -909,7 +811,7 @@ const char *
safe_str(const char *address)
{
tor_assert(address);
- if (get_options()->_SafeLogging != SAFELOG_SCRUB_NONE)
+ if (get_options()->SafeLogging_ != SAFELOG_SCRUB_NONE)
return "[scrubbed]";
else
return address;
@@ -921,7 +823,7 @@ safe_str(const char *address)
const char *
escaped_safe_str_client(const char *address)
{
- if (get_options()->_SafeLogging == SAFELOG_SCRUB_ALL)
+ if (get_options()->SafeLogging_ == SAFELOG_SCRUB_ALL)
return "[scrubbed]";
else
return escaped(address);
@@ -933,7 +835,7 @@ escaped_safe_str_client(const char *address)
const char *
escaped_safe_str(const char *address)
{
- if (get_options()->_SafeLogging != SAFELOG_SCRUB_NONE)
+ if (get_options()->SafeLogging_ != SAFELOG_SCRUB_NONE)
return "[scrubbed]";
else
return escaped(address);
@@ -945,39 +847,56 @@ static void
add_default_trusted_dir_authorities(dirinfo_type_t type)
{
int i;
- const char *dirservers[] = {
- "moria1 orport=9101 no-v2 "
+ const char *authorities[] = {
+ "moria1 orport=9101 "
"v3ident=D586D18309DED4CD6D57C18FDB97EFA96D330566 "
"128.31.0.39:9131 9695 DFC3 5FFE B861 329B 9F1A B04C 4639 7020 CE31",
- "tor26 v1 orport=443 v3ident=14C131DFC5C6F93646BE72FA1401C02A8DF2E8B4 "
+ "tor26 orport=443 v3ident=14C131DFC5C6F93646BE72FA1401C02A8DF2E8B4 "
"86.59.21.38:80 847B 1F85 0344 D787 6491 A548 92F9 0493 4E4E B85D",
"dizum orport=443 v3ident=E8A9C45EDE6D711294FADF8E7951F4DE6CA56B58 "
"194.109.206.212:80 7EA6 EAD6 FD83 083C 538F 4403 8BBF A077 587D D755",
- "Tonga orport=443 bridge no-v2 82.94.251.203:80 "
+ "Tonga orport=443 bridge 82.94.251.203:80 "
"4A0C CD2D DC79 9508 3D73 F5D6 6710 0C8A 5831 F16D",
- "turtles orport=9090 no-v2 "
+ "turtles orport=9090 "
"v3ident=27B6B5996C426270A5C95488AA5BCEB6BCC86956 "
"76.73.17.194:9030 F397 038A DC51 3361 35E7 B80B D99C A384 4360 292B",
- "gabelmoo orport=443 no-v2 "
+ "gabelmoo orport=443 "
"v3ident=ED03BB616EB2F60BEC80151114BB25CEF515B226 "
"212.112.245.170:80 F204 4413 DAC2 E02E 3D6B CF47 35A1 9BCA 1DE9 7281",
- "dannenberg orport=443 no-v2 "
+ "dannenberg orport=443 "
"v3ident=585769C78764D58426B8B52B6651A5A71137189A "
"193.23.244.244:80 7BE6 83E6 5D48 1413 21C5 ED92 F075 C553 64AC 7123",
- "urras orport=80 no-v2 v3ident=80550987E1D626E3EBA5E5E75A458DE0626D088C "
+ "urras orport=80 v3ident=80550987E1D626E3EBA5E5E75A458DE0626D088C "
"208.83.223.34:443 0AD3 FA88 4D18 F89E EA2D 89C0 1937 9E0E 7FD9 4417",
- "maatuska orport=80 no-v2 "
+ "maatuska orport=80 "
"v3ident=49015F787433103580E3B66A1707A00E60F2D15B "
"171.25.193.9:443 BD6A 8292 55CB 08E6 6FBE 7D37 4836 3586 E46B 3810",
- "Faravahar orport=443 no-v2 "
+ "Faravahar orport=443 "
"v3ident=EFCBE720AB3A82B99F9E953CD5BF50F7EEFC7B97 "
"154.35.32.5:80 CF6D 0AAF B385 BE71 B8E1 11FC 5CFF 4B47 9237 33BC",
NULL
};
- for (i=0; dirservers[i]; i++) {
- if (parse_dir_server_line(dirservers[i], type, 0)<0) {
- log_err(LD_BUG, "Couldn't parse internal dirserver line %s",
- dirservers[i]);
+ for (i=0; authorities[i]; i++) {
+ if (parse_dir_authority_line(authorities[i], type, 0)<0) {
+ log_err(LD_BUG, "Couldn't parse internal DirAuthority line %s",
+ authorities[i]);
+ }
+ }
+}
+
+/** Add the default fallback directory servers into the fallback directory
+ * server list. */
+static void
+add_default_fallback_dir_servers(void)
+{
+ int i;
+ const char *fallback[] = {
+ NULL
+ };
+ for (i=0; fallback[i]; i++) {
+ if (parse_dir_fallback_line(fallback[i], 0)<0) {
+ log_err(LD_BUG, "Couldn't parse internal FallbackDir line %s",
+ fallback[i]);
}
}
}
@@ -987,28 +906,28 @@ add_default_trusted_dir_authorities(dirinfo_type_t type)
* user if we changed any dangerous ones.
*/
static int
-validate_dir_authorities(or_options_t *options, or_options_t *old_options)
+validate_dir_servers(or_options_t *options, or_options_t *old_options)
{
config_line_t *cl;
- if (options->DirServers &&
- (options->AlternateDirAuthority || options->AlternateBridgeAuthority ||
- options->AlternateHSAuthority)) {
+ if (options->DirAuthorities &&
+ (options->AlternateDirAuthority || options->AlternateBridgeAuthority)) {
log_warn(LD_CONFIG,
- "You cannot set both DirServers and Alternate*Authority.");
+ "You cannot set both DirAuthority and Alternate*Authority.");
return -1;
}
/* do we want to complain to the user about being partitionable? */
- if ((options->DirServers &&
+ if ((options->DirAuthorities &&
(!old_options ||
- !config_lines_eq(options->DirServers, old_options->DirServers))) ||
+ !config_lines_eq(options->DirAuthorities,
+ old_options->DirAuthorities))) ||
(options->AlternateDirAuthority &&
(!old_options ||
!config_lines_eq(options->AlternateDirAuthority,
old_options->AlternateDirAuthority)))) {
log_warn(LD_CONFIG,
- "You have used DirServer or AlternateDirAuthority to "
+ "You have used DirAuthority or AlternateDirAuthority to "
"specify alternate directory authorities in "
"your configuration. This is potentially dangerous: it can "
"make you look different from all other Tor users, and hurt "
@@ -1019,17 +938,17 @@ validate_dir_authorities(or_options_t *options, or_options_t *old_options)
/* Now go through the four ways you can configure an alternate
* set of directory authorities, and make sure none are broken. */
- for (cl = options->DirServers; cl; cl = cl->next)
- if (parse_dir_server_line(cl->value, NO_DIRINFO, 1)<0)
+ for (cl = options->DirAuthorities; cl; cl = cl->next)
+ if (parse_dir_authority_line(cl->value, NO_DIRINFO, 1)<0)
return -1;
for (cl = options->AlternateBridgeAuthority; cl; cl = cl->next)
- if (parse_dir_server_line(cl->value, NO_DIRINFO, 1)<0)
+ if (parse_dir_authority_line(cl->value, NO_DIRINFO, 1)<0)
return -1;
for (cl = options->AlternateDirAuthority; cl; cl = cl->next)
- if (parse_dir_server_line(cl->value, NO_DIRINFO, 1)<0)
+ if (parse_dir_authority_line(cl->value, NO_DIRINFO, 1)<0)
return -1;
- for (cl = options->AlternateHSAuthority; cl; cl = cl->next)
- if (parse_dir_server_line(cl->value, NO_DIRINFO, 1)<0)
+ for (cl = options->FallbackDir; cl; cl = cl->next)
+ if (parse_dir_fallback_line(cl->value, 1)<0)
return -1;
return 0;
}
@@ -1038,50 +957,49 @@ validate_dir_authorities(or_options_t *options, or_options_t *old_options)
* as appropriate.
*/
static int
-consider_adding_dir_authorities(const or_options_t *options,
- const or_options_t *old_options)
+consider_adding_dir_servers(const or_options_t *options,
+ const or_options_t *old_options)
{
config_line_t *cl;
int need_to_update =
- !smartlist_len(router_get_trusted_dir_servers()) || !old_options ||
- !config_lines_eq(options->DirServers, old_options->DirServers) ||
+ !smartlist_len(router_get_trusted_dir_servers()) ||
+ !smartlist_len(router_get_fallback_dir_servers()) || !old_options ||
+ !config_lines_eq(options->DirAuthorities, old_options->DirAuthorities) ||
+ !config_lines_eq(options->FallbackDir, old_options->FallbackDir) ||
!config_lines_eq(options->AlternateBridgeAuthority,
old_options->AlternateBridgeAuthority) ||
!config_lines_eq(options->AlternateDirAuthority,
- old_options->AlternateDirAuthority) ||
- !config_lines_eq(options->AlternateHSAuthority,
- old_options->AlternateHSAuthority);
+ old_options->AlternateDirAuthority);
if (!need_to_update)
return 0; /* all done */
/* Start from a clean slate. */
- clear_trusted_dir_servers();
+ clear_dir_servers();
- if (!options->DirServers) {
+ if (!options->DirAuthorities) {
/* then we may want some of the defaults */
dirinfo_type_t type = NO_DIRINFO;
if (!options->AlternateBridgeAuthority)
type |= BRIDGE_DIRINFO;
if (!options->AlternateDirAuthority)
- type |= V1_DIRINFO | V2_DIRINFO | V3_DIRINFO | EXTRAINFO_DIRINFO |
- MICRODESC_DIRINFO;
- if (!options->AlternateHSAuthority)
- type |= HIDSERV_DIRINFO;
+ type |= V3_DIRINFO | EXTRAINFO_DIRINFO | MICRODESC_DIRINFO;
add_default_trusted_dir_authorities(type);
}
+ if (!options->FallbackDir)
+ add_default_fallback_dir_servers();
- for (cl = options->DirServers; cl; cl = cl->next)
- if (parse_dir_server_line(cl->value, NO_DIRINFO, 0)<0)
+ for (cl = options->DirAuthorities; cl; cl = cl->next)
+ if (parse_dir_authority_line(cl->value, NO_DIRINFO, 0)<0)
return -1;
for (cl = options->AlternateBridgeAuthority; cl; cl = cl->next)
- if (parse_dir_server_line(cl->value, NO_DIRINFO, 0)<0)
+ if (parse_dir_authority_line(cl->value, NO_DIRINFO, 0)<0)
return -1;
for (cl = options->AlternateDirAuthority; cl; cl = cl->next)
- if (parse_dir_server_line(cl->value, NO_DIRINFO, 0)<0)
+ if (parse_dir_authority_line(cl->value, NO_DIRINFO, 0)<0)
return -1;
- for (cl = options->AlternateHSAuthority; cl; cl = cl->next)
- if (parse_dir_server_line(cl->value, NO_DIRINFO, 0)<0)
+ for (cl = options->FallbackDir; cl; cl = cl->next)
+ if (parse_dir_fallback_line(cl->value, 0)<0)
return -1;
return 0;
}
@@ -1103,6 +1021,7 @@ options_act_reversible(const or_options_t *old_options, char **msg)
int set_conn_limit = 0;
int r = -1;
int logs_marked = 0;
+ int old_min_log_level = get_min_log_level();
/* Daemonize _first_, since we only want to open most of this stuff in
* the subprocess. Libevent bases can't be reliably inherited across
@@ -1129,12 +1048,18 @@ options_act_reversible(const or_options_t *old_options, char **msg)
if (running_tor) {
int n_ports=0;
/* We need to set the connection limit before we can open the listeners. */
- if (set_max_file_descriptors((unsigned)options->ConnLimit,
- &options->_ConnLimit) < 0) {
- *msg = tor_strdup("Problem with ConnLimit value. See logs for details.");
- goto rollback;
+ if (! sandbox_is_active()) {
+ if (set_max_file_descriptors((unsigned)options->ConnLimit,
+ &options->ConnLimit_) < 0) {
+ *msg = tor_strdup("Problem with ConnLimit value. "
+ "See logs for details.");
+ goto rollback;
+ }
+ set_conn_limit = 1;
+ } else {
+ tor_assert(old_options);
+ options->ConnLimit_ = old_options->ConnLimit_;
}
- set_conn_limit = 1;
/* Set up libevent. (We need to do this before we can register the
* listeners as listeners.) */
@@ -1175,7 +1100,8 @@ options_act_reversible(const or_options_t *old_options, char **msg)
#if defined(HAVE_NET_IF_H) && defined(HAVE_NET_PFVAR_H)
/* Open /dev/pf before dropping privileges. */
- if (options->TransPort_set) {
+ if (options->TransPort_set &&
+ options->TransProxyType_parsed == TPT_DEFAULT) {
if (get_pf_socket() < 0) {
*msg = tor_strdup("Unable to open /dev/pf for transparent proxy.");
goto rollback;
@@ -1212,23 +1138,6 @@ options_act_reversible(const or_options_t *old_options, char **msg)
/* No need to roll back, since you can't change the value. */
}
- /* Write control ports to disk as appropriate */
- control_ports_write_to_file();
-
- if (directory_caches_v2_dir_info(options)) {
- char *fn = NULL;
- tor_asprintf(&fn, "%s"PATH_SEPARATOR"cached-status",
- options->DataDirectory);
- if (check_private_dir(fn, running_tor ? CPD_CREATE : CPD_CHECK,
- options->User) < 0) {
- tor_asprintf(msg,
- "Couldn't access/create private data directory \"%s\"", fn);
- tor_free(fn);
- goto done;
- }
- tor_free(fn);
- }
-
/* Bail out at this point if we're not going to be a client or server:
* we don't run Tor itself. */
if (!running_tor)
@@ -1236,7 +1145,7 @@ options_act_reversible(const or_options_t *old_options, char **msg)
mark_logs_temp(); /* Close current logs once new logs are open. */
logs_marked = 1;
- if (options_init_logs(options, 0)<0) { /* Configure the log(s) */
+ if (options_init_logs(options, 0)<0) { /* Configure the tor_log(s) */
*msg = tor_strdup("Failed to init Log options. See logs for details.");
goto rollback;
}
@@ -1250,13 +1159,44 @@ options_act_reversible(const or_options_t *old_options, char **msg)
add_callback_log(severity, control_event_logmsg);
control_adjust_event_log_severity();
tor_free(severity);
+ tor_log_update_sigsafe_err_fds();
+ }
+
+ {
+ const char *badness = NULL;
+ int bad_safelog = 0, bad_severity = 0, new_badness = 0;
+ if (options->SafeLogging_ != SAFELOG_SCRUB_ALL) {
+ bad_safelog = 1;
+ if (!old_options || old_options->SafeLogging_ != options->SafeLogging_)
+ new_badness = 1;
+ }
+ if (get_min_log_level() >= LOG_INFO) {
+ bad_severity = 1;
+ if (get_min_log_level() != old_min_log_level)
+ new_badness = 1;
+ }
+ if (bad_safelog && bad_severity)
+ badness = "you disabled SafeLogging, and "
+ "you're logging more than \"notice\"";
+ else if (bad_safelog)
+ badness = "you disabled SafeLogging";
+ else
+ badness = "you're logging more than \"notice\"";
+ if (new_badness)
+ log_warn(LD_GENERAL, "Your log may contain sensitive information - %s. "
+ "Don't log unless it serves an important reason. "
+ "Overwrite the log afterwards.", badness);
}
+
SMARTLIST_FOREACH(replaced_listeners, connection_t *, conn,
{
+ int marked = conn->marked_for_close;
log_notice(LD_NET, "Closing old %s on %s:%d",
conn_type_to_string(conn->type), conn->address, conn->port);
connection_close_immediate(conn);
- connection_mark_for_close(conn);
+ if (!marked) {
+ connection_mark_for_close(conn);
+ }
});
goto done;
@@ -1271,7 +1211,7 @@ options_act_reversible(const or_options_t *old_options, char **msg)
if (set_conn_limit && old_options)
set_max_file_descriptors((unsigned)old_options->ConnLimit,
- &options->_ConnLimit);
+ &options->ConnLimit_);
SMARTLIST_FOREACH(new_listeners, connection_t *, conn,
{
@@ -1353,6 +1293,9 @@ options_transition_requires_fresh_tls_context(const or_options_t *old_options,
return 1;
}
+ if (!opt_streq(old_options->TLSECGroup, new_options->TLSECGroup))
+ return 1;
+
return 0;
}
@@ -1371,9 +1314,10 @@ options_act(const or_options_t *old_options)
config_line_t *cl;
or_options_t *options = get_options_mutable();
int running_tor = options->command == CMD_RUN_TOR;
- char *msg;
+ char *msg=NULL;
const int transition_affects_workers =
old_options && options_transition_affects_workers(old_options, options);
+ int old_ewma_enabled;
/* disable ptrace and later, other basic debugging techniques */
{
@@ -1399,16 +1343,19 @@ options_act(const or_options_t *old_options)
}
}
+ /* Write control ports to disk as appropriate */
+ control_ports_write_to_file();
+
if (running_tor && !have_lockfile()) {
if (try_locking(options, 1) < 0)
return -1;
}
- if (consider_adding_dir_authorities(options, old_options) < 0)
+ if (consider_adding_dir_servers(options, old_options) < 0)
return -1;
#ifdef NON_ANONYMOUS_MODE_ENABLED
- log(LOG_WARN, LD_GENERAL, "This copy of Tor was compiled to run in a "
+ log_warn(LD_GENERAL, "This copy of Tor was compiled to run in a "
"non-anonymous mode. It will provide NO ANONYMITY.");
#endif
@@ -1429,14 +1376,29 @@ options_act(const or_options_t *old_options)
}
#endif
+ /* If we are a bridge with a pluggable transport proxy but no
+ Extended ORPort, inform the user that she is missing out. */
+ if (server_mode(options) && options->ServerTransportPlugin &&
+ !options->ExtORPort_lines) {
+ log_notice(LD_CONFIG, "We use pluggable transports but the Extended "
+ "ORPort is disabled. Tor and your pluggable transports proxy "
+ "communicate with each other via the Extended ORPort so it "
+ "is suggested you enable it: it will also allow your Bridge "
+ "to collect statistics about its clients that use pluggable "
+ "transports. Please enable it using the ExtORPort torrc option "
+ "(e.g. set 'ExtORPort auto').");
+ }
+
if (options->Bridges) {
mark_bridge_list();
for (cl = options->Bridges; cl; cl = cl->next) {
- if (parse_bridge_line(cl->value, 0)<0) {
+ bridge_line_t *bridge_line = parse_bridge_line(cl->value);
+ if (!bridge_line) {
log_warn(LD_BUG,
"Previously validated Bridge line could not be added!");
return -1;
}
+ bridge_add_from_config(bridge_line);
}
sweep_bridge_list();
}
@@ -1454,7 +1416,7 @@ options_act(const or_options_t *old_options)
}
/* Load state */
- if (! global_state && running_tor) {
+ if (! or_state_loaded() && running_tor) {
if (or_state_load())
return -1;
rep_hist_load_mtbf_data(time(NULL));
@@ -1464,7 +1426,7 @@ options_act(const or_options_t *old_options)
pt_prepare_proxy_list_for_config_read();
if (options->ClientTransportPlugin) {
for (cl = options->ClientTransportPlugin; cl; cl = cl->next) {
- if (parse_client_transport_line(cl->value, 0)<0) {
+ if (parse_client_transport_line(options, cl->value, 0)<0) {
log_warn(LD_BUG,
"Previously validated ClientTransportPlugin line "
"could not be added!");
@@ -1475,7 +1437,7 @@ options_act(const or_options_t *old_options)
if (options->ServerTransportPlugin && server_mode(options)) {
for (cl = options->ServerTransportPlugin; cl; cl = cl->next) {
- if (parse_server_transport_line(cl->value, 0)<0) {
+ if (parse_server_transport_line(options, cl->value, 0)<0) {
log_warn(LD_BUG,
"Previously validated ServerTransportPlugin line "
"could not be added!");
@@ -1486,6 +1448,12 @@ options_act(const or_options_t *old_options)
sweep_transport_list();
sweep_proxy_list();
+ /* Start the PT proxy configuration. By doing this configuration
+ here, we also figure out which proxies need to be restarted and
+ which not. */
+ if (pt_proxies_configuration_pending() && !net_is_disabled())
+ pt_configure_remaining_proxies();
+
/* Bail out at this point if we're not going to be a client or server:
* we want to not fork, and to log stuff to stderr. */
if (!running_tor)
@@ -1535,12 +1503,14 @@ options_act(const or_options_t *old_options)
/* Write our PID to the PID file. If we do not have write permissions we
* will log a warning */
- if (options->PidFile)
+ if (options->PidFile && !sandbox_is_active()) {
write_pidfile(options->PidFile);
+ }
/* Register addressmap directives */
config_register_addressmaps(options);
- parse_virtual_addr_network(options->VirtualAddrNetwork, 0, &msg);
+ parse_virtual_addr_network(options->VirtualAddrNetworkIPv4, AF_INET,0,NULL);
+ parse_virtual_addr_network(options->VirtualAddrNetworkIPv6, AF_INET6,0,NULL);
/* Update address policies. */
if (policies_parse_from_options(options) < 0) {
@@ -1549,15 +1519,21 @@ options_act(const or_options_t *old_options)
return -1;
}
- if (init_cookie_authentication(options->CookieAuthentication) < 0) {
- log_warn(LD_CONFIG,"Error creating cookie authentication file.");
+ if (init_control_cookie_authentication(options->CookieAuthentication) < 0) {
+ log_warn(LD_CONFIG,"Error creating control cookie authentication file.");
+ return -1;
+ }
+
+ /* If we have an ExtORPort, initialize its auth cookie. */
+ if (init_ext_or_cookie_authentication(!!options->ExtORPort_lines) < 0) {
+ log_warn(LD_CONFIG,"Error creating Extended ORPort cookie file.");
return -1;
}
monitor_owning_controller_process(options->OwningControllerProcess);
/* reload keys as needed for rendezvous services. */
- if (rend_service_load_keys()<0) {
+ if (rend_service_load_all_keys()<0) {
log_warn(LD_GENERAL,"Error loading rendezvous service keys");
return -1;
}
@@ -1581,8 +1557,16 @@ options_act(const or_options_t *old_options)
connection_bucket_init();
#endif
+ old_ewma_enabled = cell_ewma_enabled();
/* Change the cell EWMA settings */
cell_ewma_set_scale_factor(options, networkstatus_get_latest_consensus());
+ /* If we just enabled ewma, set the cmux policy on all active channels */
+ if (cell_ewma_enabled() && !old_ewma_enabled) {
+ channel_set_cmux_policy_everywhere(&ewma_policy);
+ } else if (!cell_ewma_enabled() && old_ewma_enabled) {
+ /* Turn it off everywhere */
+ channel_set_cmux_policy_everywhere(NULL);
+ }
/* Update the BridgePassword's hashed version as needed. We store this as a
* digest so that we can do side-channel-proof comparisons on it.
@@ -1595,13 +1579,19 @@ options_act(const or_options_t *old_options)
"BridgePassword.");
return -1;
}
- options->_BridgePassword_AuthDigest = tor_malloc(DIGEST256_LEN);
- crypto_digest256(options->_BridgePassword_AuthDigest,
+ options->BridgePassword_AuthDigest_ = tor_malloc(DIGEST256_LEN);
+ crypto_digest256(options->BridgePassword_AuthDigest_,
http_authenticator, strlen(http_authenticator),
DIGEST_SHA256);
tor_free(http_authenticator);
}
+ if (parse_outbound_addresses(options, 0, &msg) < 0) {
+ log_warn(LD_BUG, "Failed parsing oubound bind addresses: %s", msg);
+ tor_free(msg);
+ return -1;
+ }
+
/* Check for transitions that need action. */
if (old_options) {
int revise_trackexithosts = 0;
@@ -1621,7 +1611,7 @@ options_act(const or_options_t *old_options)
"preferred or excluded node lists. "
"Abandoning previous circuits.");
circuit_mark_all_unused_circs();
- circuit_expire_all_dirty_circs();
+ circuit_mark_all_dirty_circs_as_unusable();
revise_trackexithosts = 1;
}
@@ -1639,8 +1629,10 @@ options_act(const or_options_t *old_options)
if (!smartlist_strings_eq(old_options->AutomapHostsSuffixes,
options->AutomapHostsSuffixes))
revise_automap_entries = 1;
- else if (!opt_streq(old_options->VirtualAddrNetwork,
- options->VirtualAddrNetwork))
+ else if (!opt_streq(old_options->VirtualAddrNetworkIPv4,
+ options->VirtualAddrNetworkIPv4) ||
+ !opt_streq(old_options->VirtualAddrNetworkIPv6,
+ options->VirtualAddrNetworkIPv6))
revise_automap_entries = 1;
}
@@ -1695,23 +1687,18 @@ options_act(const or_options_t *old_options)
connection_or_update_token_buckets(get_connection_array(), options);
}
- /* Maybe load geoip file */
- if (options->GeoIPFile &&
- ((!old_options || !opt_streq(old_options->GeoIPFile, options->GeoIPFile))
- || !geoip_is_loaded())) {
- /* XXXX Don't use this "<default>" junk; make our filename options
- * understand prefixes somehow. -NM */
- /* XXXX024 Reload GeoIPFile on SIGHUP. -NM */
- char *actual_fname = tor_strdup(options->GeoIPFile);
-#ifdef _WIN32
- if (!strcmp(actual_fname, "<default>")) {
- const char *conf_root = get_windows_conf_root();
- tor_free(actual_fname);
- tor_asprintf(&actual_fname, "%s\\geoip", conf_root);
- }
-#endif
- geoip_load_file(actual_fname, options);
- tor_free(actual_fname);
+ config_maybe_load_geoip_files_(options, old_options);
+
+ if (geoip_is_loaded(AF_INET) && options->GeoIPExcludeUnknown) {
+ /* ExcludeUnknown is true or "auto" */
+ const int is_auto = options->GeoIPExcludeUnknown == -1;
+ int changed;
+
+ changed = routerset_add_unknown_ccs(&options->ExcludeNodes, is_auto);
+ changed += routerset_add_unknown_ccs(&options->ExcludeExitNodes, is_auto);
+
+ if (changed)
+ routerset_add_unknown_ccs(&options->ExcludeExitNodesUnion_, is_auto);
}
if (options->CellStatistics || options->DirReqStatistics ||
@@ -1721,10 +1708,14 @@ options_act(const or_options_t *old_options)
time_t now = time(NULL);
int print_notice = 0;
- /* If we aren't acting as a server, we can't collect stats anyway. */
+ /* Only collect directory-request statistics on relays and bridges. */
if (!server_mode(options)) {
- options->CellStatistics = 0;
options->DirReqStatistics = 0;
+ }
+
+ /* Only collect other relay-only statistics on relays. */
+ if (!public_server_mode(options)) {
+ options->CellStatistics = 0;
options->EntryStatistics = 0;
options->ExitPortStatistics = 0;
}
@@ -1736,7 +1727,7 @@ options_act(const or_options_t *old_options)
}
if ((!old_options || !old_options->DirReqStatistics) &&
options->DirReqStatistics) {
- if (geoip_is_loaded()) {
+ if (geoip_is_loaded(AF_INET)) {
geoip_dirreq_stats_init(now);
print_notice = 1;
} else {
@@ -1751,7 +1742,7 @@ options_act(const or_options_t *old_options)
}
if ((!old_options || !old_options->EntryStatistics) &&
options->EntryStatistics && !should_record_bridge_info(options)) {
- if (geoip_is_loaded()) {
+ if (geoip_is_loaded(AF_INET) || geoip_is_loaded(AF_INET6)) {
geoip_entry_stats_init(now);
print_notice = 1;
} else {
@@ -1847,76 +1838,66 @@ options_act(const or_options_t *old_options)
return 0;
}
-/*
- * Functions to parse config options
- */
+static const struct {
+ const char *name;
+ int takes_argument;
+} CMDLINE_ONLY_OPTIONS[] = {
+ { "-f", 1 },
+ { "--allow-missing-torrc", 0 },
+ { "--defaults-torrc", 1 },
+ { "--hash-password", 1 },
+ { "--dump-config", 1 },
+ { "--list-fingerprint", 0 },
+ { "--verify-config", 0 },
+ { "--ignore-missing-torrc", 0 },
+ { "--quiet", 0 },
+ { "--hush", 0 },
+ { "--version", 0 },
+ { "--library-versions", 0 },
+ { "-h", 0 },
+ { "--help", 0 },
+ { "--list-torrc-options", 0 },
+ { "--digests", 0 },
+ { "--nt-service", 0 },
+ { "-nt-service", 0 },
+ { NULL, 0 },
+};
-/** If <b>option</b> is an official abbreviation for a longer option,
- * return the longer option. Otherwise return <b>option</b>.
- * If <b>command_line</b> is set, apply all abbreviations. Otherwise, only
- * apply abbreviations that work for the config file and the command line.
- * If <b>warn_obsolete</b> is set, warn about deprecated names. */
-static const char *
-expand_abbrev(const config_format_t *fmt, const char *option, int command_line,
- int warn_obsolete)
+/** Helper: Read a list of configuration options from the command line. If
+ * successful, or if ignore_errors is set, put them in *<b>result</b>, put the
+ * commandline-only options in *<b>cmdline_result</b>, and return 0;
+ * otherwise, return -1 and leave *<b>result</b> and <b>cmdline_result</b>
+ * alone. */
+int
+config_parse_commandline(int argc, char **argv, int ignore_errors,
+ config_line_t **result,
+ config_line_t **cmdline_result)
{
- int i;
- if (! fmt->abbrevs)
- return option;
- for (i=0; fmt->abbrevs[i].abbreviated; ++i) {
- /* Abbreviations are case insensitive. */
- if (!strcasecmp(option,fmt->abbrevs[i].abbreviated) &&
- (command_line || !fmt->abbrevs[i].commandline_only)) {
- if (warn_obsolete && fmt->abbrevs[i].warn) {
- log_warn(LD_CONFIG,
- "The configuration option '%s' is deprecated; "
- "use '%s' instead.",
- fmt->abbrevs[i].abbreviated,
- fmt->abbrevs[i].full);
- }
- /* Keep going through the list in case we want to rewrite it more.
- * (We could imagine recursing here, but I don't want to get the
- * user into an infinite loop if we craft our list wrong.) */
- option = fmt->abbrevs[i].full;
- }
- }
- return option;
-}
+ config_line_t *param = NULL;
-/** Helper: Read a list of configuration options from the command line.
- * If successful, put them in *<b>result</b> and return 0, and return
- * -1 and leave *<b>result</b> alone. */
-static int
-config_get_commandlines(int argc, char **argv, config_line_t **result)
-{
config_line_t *front = NULL;
config_line_t **new = &front;
- char *s;
+
+ config_line_t *front_cmdline = NULL;
+ config_line_t **new_cmdline = &front_cmdline;
+
+ char *s, *arg;
int i = 1;
while (i < argc) {
unsigned command = CONFIG_LINE_NORMAL;
int want_arg = 1;
+ int is_cmdline = 0;
+ int j;
- if (!strcmp(argv[i],"-f") ||
- !strcmp(argv[i],"--defaults-torrc") ||
- !strcmp(argv[i],"--hash-password")) {
- i += 2; /* command-line option with argument. ignore them. */
- continue;
- } else if (!strcmp(argv[i],"--list-fingerprint") ||
- !strcmp(argv[i],"--verify-config") ||
- !strcmp(argv[i],"--ignore-missing-torrc") ||
- !strcmp(argv[i],"--quiet") ||
- !strcmp(argv[i],"--hush")) {
- i += 1; /* command-line option. ignore it. */
- continue;
- } else if (!strcmp(argv[i],"--nt-service") ||
- !strcmp(argv[i],"-nt-service")) {
- i += 1;
- continue;
+ for (j = 0; CMDLINE_ONLY_OPTIONS[j].name != NULL; ++j) {
+ if (!strcmp(argv[i], CMDLINE_ONLY_OPTIONS[j].name)) {
+ is_cmdline = 1;
+ want_arg = CMDLINE_ONLY_OPTIONS[j].takes_argument;
+ break;
+ }
}
- *new = tor_malloc_zero(sizeof(config_line_t));
s = argv[i];
/* Each keyword may be prefixed with one or two dashes. */
@@ -1936,464 +1917,42 @@ config_get_commandlines(int argc, char **argv, config_line_t **result)
}
if (want_arg && i == argc-1) {
- log_warn(LD_CONFIG,"Command-line option '%s' with no value. Failing.",
- argv[i]);
- config_free_lines(front);
- return -1;
- }
-
- (*new)->key = tor_strdup(expand_abbrev(&options_format, s, 1, 1));
- (*new)->value = want_arg ? tor_strdup(argv[i+1]) : tor_strdup("");
- (*new)->command = command;
- (*new)->next = NULL;
- log(LOG_DEBUG, LD_CONFIG, "command line: parsed keyword '%s', value '%s'",
- (*new)->key, (*new)->value);
-
- new = &((*new)->next);
- i += want_arg ? 2 : 1;
- }
- *result = front;
- return 0;
-}
-
-/** Helper: allocate a new configuration option mapping 'key' to 'val',
- * append it to *<b>lst</b>. */
-static void
-config_line_append(config_line_t **lst,
- const char *key,
- const char *val)
-{
- config_line_t *newline;
-
- newline = tor_malloc_zero(sizeof(config_line_t));
- newline->key = tor_strdup(key);
- newline->value = tor_strdup(val);
- newline->next = NULL;
- while (*lst)
- lst = &((*lst)->next);
-
- (*lst) = newline;
-}
-
-/** Helper: parse the config string and strdup into key/value
- * strings. Set *result to the list, or NULL if parsing the string
- * failed. Return 0 on success, -1 on failure. Warn and ignore any
- * misformatted lines.
- *
- * If <b>extended</b> is set, then treat keys beginning with / and with + as
- * indicating "clear" and "append" respectively. */
-int
-config_get_lines(const char *string, config_line_t **result, int extended)
-{
- config_line_t *list = NULL, **next;
- char *k, *v;
-
- next = &list;
- do {
- k = v = NULL;
- string = parse_config_line_from_str(string, &k, &v);
- if (!string) {
- config_free_lines(list);
- tor_free(k);
- tor_free(v);
- return -1;
- }
- if (k && v) {
- unsigned command = CONFIG_LINE_NORMAL;
- if (extended) {
- if (k[0] == '+') {
- char *k_new = tor_strdup(k+1);
- tor_free(k);
- k = k_new;
- command = CONFIG_LINE_APPEND;
- } else if (k[0] == '/') {
- char *k_new = tor_strdup(k+1);
- tor_free(k);
- k = k_new;
- tor_free(v);
- v = tor_strdup("");
- command = CONFIG_LINE_CLEAR;
- }
+ if (ignore_errors) {
+ arg = strdup("");
+ } else {
+ log_warn(LD_CONFIG,"Command-line option '%s' with no value. Failing.",
+ argv[i]);
+ config_free_lines(front);
+ config_free_lines(front_cmdline);
+ return -1;
}
- /* This list can get long, so we keep a pointer to the end of it
- * rather than using config_line_append over and over and getting
- * n^2 performance. */
- *next = tor_malloc_zero(sizeof(config_line_t));
- (*next)->key = k;
- (*next)->value = v;
- (*next)->next = NULL;
- (*next)->command = command;
- next = &((*next)->next);
} else {
- tor_free(k);
- tor_free(v);
+ arg = want_arg ? tor_strdup(argv[i+1]) : strdup("");
}
- } while (*string);
- *result = list;
- return 0;
-}
+ param = tor_malloc_zero(sizeof(config_line_t));
+ param->key = is_cmdline ? tor_strdup(argv[i]) : tor_strdup(s);
+ param->value = arg;
+ param->command = command;
+ param->next = NULL;
+ log_debug(LD_CONFIG, "command line: parsed keyword '%s', value '%s'",
+ param->key, param->value);
-/**
- * Free all the configuration lines on the linked list <b>front</b>.
- */
-void
-config_free_lines(config_line_t *front)
-{
- config_line_t *tmp;
-
- while (front) {
- tmp = front;
- front = tmp->next;
-
- tor_free(tmp->key);
- tor_free(tmp->value);
- tor_free(tmp);
- }
-}
-
-/** As config_find_option, but return a non-const pointer. */
-static config_var_t *
-config_find_option_mutable(config_format_t *fmt, const char *key)
-{
- int i;
- size_t keylen = strlen(key);
- if (!keylen)
- return NULL; /* if they say "--" on the command line, it's not an option */
- /* First, check for an exact (case-insensitive) match */
- for (i=0; fmt->vars[i].name; ++i) {
- if (!strcasecmp(key, fmt->vars[i].name)) {
- return &fmt->vars[i];
- }
- }
- /* If none, check for an abbreviated match */
- for (i=0; fmt->vars[i].name; ++i) {
- if (!strncasecmp(key, fmt->vars[i].name, keylen)) {
- log_warn(LD_CONFIG, "The abbreviation '%s' is deprecated. "
- "Please use '%s' instead",
- key, fmt->vars[i].name);
- return &fmt->vars[i];
- }
- }
- /* Okay, unrecognized option */
- return NULL;
-}
-
-/** If <b>key</b> is a configuration option, return the corresponding const
- * config_var_t. Otherwise, if <b>key</b> is a non-standard abbreviation,
- * warn, and return the corresponding const config_var_t. Otherwise return
- * NULL.
- */
-static const config_var_t *
-config_find_option(const config_format_t *fmt, const char *key)
-{
- return config_find_option_mutable((config_format_t*)fmt, key);
-}
-
-/** Return the number of option entries in <b>fmt</b>. */
-static int
-config_count_options(const config_format_t *fmt)
-{
- int i;
- for (i=0; fmt->vars[i].name; ++i)
- ;
- return i;
-}
-
-/*
- * Functions to assign config options.
- */
-
-/** <b>c</b>-\>key is known to be a real key. Update <b>options</b>
- * with <b>c</b>-\>value and return 0, or return -1 if bad value.
- *
- * Called from config_assign_line() and option_reset().
- */
-static int
-config_assign_value(const config_format_t *fmt, or_options_t *options,
- config_line_t *c, char **msg)
-{
- int i, ok;
- const config_var_t *var;
- void *lvalue;
-
- CHECK(fmt, options);
-
- var = config_find_option(fmt, c->key);
- tor_assert(var);
-
- lvalue = STRUCT_VAR_P(options, var->var_offset);
-
- switch (var->type) {
-
- case CONFIG_TYPE_PORT:
- if (!strcasecmp(c->value, "auto")) {
- *(int *)lvalue = CFG_AUTO_PORT;
- break;
- }
- /* fall through */
- case CONFIG_TYPE_INT:
- case CONFIG_TYPE_UINT:
- i = (int)tor_parse_long(c->value, 10,
- var->type==CONFIG_TYPE_INT ? INT_MIN : 0,
- var->type==CONFIG_TYPE_PORT ? 65535 : INT_MAX,
- &ok, NULL);
- if (!ok) {
- tor_asprintf(msg,
- "Int keyword '%s %s' is malformed or out of bounds.",
- c->key, c->value);
- return -1;
- }
- *(int *)lvalue = i;
- break;
-
- case CONFIG_TYPE_INTERVAL: {
- i = config_parse_interval(c->value, &ok);
- if (!ok) {
- tor_asprintf(msg,
- "Interval '%s %s' is malformed or out of bounds.",
- c->key, c->value);
- return -1;
- }
- *(int *)lvalue = i;
- break;
- }
-
- case CONFIG_TYPE_MSEC_INTERVAL: {
- i = config_parse_msec_interval(c->value, &ok);
- if (!ok) {
- tor_asprintf(msg,
- "Msec interval '%s %s' is malformed or out of bounds.",
- c->key, c->value);
- return -1;
- }
- *(int *)lvalue = i;
- break;
- }
-
- case CONFIG_TYPE_MEMUNIT: {
- uint64_t u64 = config_parse_memunit(c->value, &ok);
- if (!ok) {
- tor_asprintf(msg,
- "Value '%s %s' is malformed or out of bounds.",
- c->key, c->value);
- return -1;
- }
- *(uint64_t *)lvalue = u64;
- break;
- }
-
- case CONFIG_TYPE_BOOL:
- i = (int)tor_parse_long(c->value, 10, 0, 1, &ok, NULL);
- if (!ok) {
- tor_asprintf(msg,
- "Boolean '%s %s' expects 0 or 1.",
- c->key, c->value);
- return -1;
- }
- *(int *)lvalue = i;
- break;
-
- case CONFIG_TYPE_AUTOBOOL:
- if (!strcmp(c->value, "auto"))
- *(int *)lvalue = -1;
- else if (!strcmp(c->value, "0"))
- *(int *)lvalue = 0;
- else if (!strcmp(c->value, "1"))
- *(int *)lvalue = 1;
- else {
- tor_asprintf(msg, "Boolean '%s %s' expects 0, 1, or 'auto'.",
- c->key, c->value);
- return -1;
- }
- break;
-
- case CONFIG_TYPE_STRING:
- case CONFIG_TYPE_FILENAME:
- tor_free(*(char **)lvalue);
- *(char **)lvalue = tor_strdup(c->value);
- break;
-
- case CONFIG_TYPE_DOUBLE:
- *(double *)lvalue = atof(c->value);
- break;
-
- case CONFIG_TYPE_ISOTIME:
- if (parse_iso_time(c->value, (time_t *)lvalue)) {
- tor_asprintf(msg,
- "Invalid time '%s' for keyword '%s'", c->value, c->key);
- return -1;
- }
- break;
-
- case CONFIG_TYPE_ROUTERSET:
- if (*(routerset_t**)lvalue) {
- routerset_free(*(routerset_t**)lvalue);
- }
- *(routerset_t**)lvalue = routerset_new();
- if (routerset_parse(*(routerset_t**)lvalue, c->value, c->key)<0) {
- tor_asprintf(msg, "Invalid exit list '%s' for option '%s'",
- c->value, c->key);
- return -1;
- }
- break;
-
- case CONFIG_TYPE_CSV:
- if (*(smartlist_t**)lvalue) {
- SMARTLIST_FOREACH(*(smartlist_t**)lvalue, char *, cp, tor_free(cp));
- smartlist_clear(*(smartlist_t**)lvalue);
+ if (is_cmdline) {
+ *new_cmdline = param;
+ new_cmdline = &((*new_cmdline)->next);
} else {
- *(smartlist_t**)lvalue = smartlist_new();
+ *new = param;
+ new = &((*new)->next);
}
- smartlist_split_string(*(smartlist_t**)lvalue, c->value, ",",
- SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
- break;
-
- case CONFIG_TYPE_LINELIST:
- case CONFIG_TYPE_LINELIST_S:
- {
- config_line_t *lastval = *(config_line_t**)lvalue;
- if (lastval && lastval->fragile) {
- if (c->command != CONFIG_LINE_APPEND) {
- config_free_lines(lastval);
- *(config_line_t**)lvalue = NULL;
- } else {
- lastval->fragile = 0;
- }
- }
-
- config_line_append((config_line_t**)lvalue, c->key, c->value);
- }
- break;
- case CONFIG_TYPE_OBSOLETE:
- log_warn(LD_CONFIG, "Skipping obsolete configuration option '%s'", c->key);
- break;
- case CONFIG_TYPE_LINELIST_V:
- tor_asprintf(msg,
- "You may not provide a value for virtual option '%s'", c->key);
- return -1;
- default:
- tor_assert(0);
- break;
- }
- return 0;
-}
-
-/** Mark every linelist in <b>options</b> "fragile", so that fresh assignments
- * to it will replace old ones. */
-static void
-config_mark_lists_fragile(const config_format_t *fmt, or_options_t *options)
-{
- int i;
- tor_assert(fmt);
- tor_assert(options);
-
- for (i = 0; fmt->vars[i].name; ++i) {
- const config_var_t *var = &fmt->vars[i];
- config_line_t *list;
- if (var->type != CONFIG_TYPE_LINELIST &&
- var->type != CONFIG_TYPE_LINELIST_V)
- continue;
-
- list = *(config_line_t **)STRUCT_VAR_P(options, var->var_offset);
- if (list)
- list->fragile = 1;
- }
-}
-
-/** If <b>c</b> is a syntactically valid configuration line, update
- * <b>options</b> with its value and return 0. Otherwise return -1 for bad
- * key, -2 for bad value.
- *
- * If <b>clear_first</b> is set, clear the value first. Then if
- * <b>use_defaults</b> is set, set the value to the default.
- *
- * Called from config_assign().
- */
-static int
-config_assign_line(const config_format_t *fmt, or_options_t *options,
- config_line_t *c, int use_defaults,
- int clear_first, bitarray_t *options_seen, char **msg)
-{
- const config_var_t *var;
-
- CHECK(fmt, options);
-
- var = config_find_option(fmt, c->key);
- if (!var) {
- if (fmt->extra) {
- void *lvalue = STRUCT_VAR_P(options, fmt->extra->var_offset);
- log_info(LD_CONFIG,
- "Found unrecognized option '%s'; saving it.", c->key);
- config_line_append((config_line_t**)lvalue, c->key, c->value);
- return 0;
- } else {
- tor_asprintf(msg,
- "Unknown option '%s'. Failing.", c->key);
- return -1;
- }
- }
-
- /* Put keyword into canonical case. */
- if (strcmp(var->name, c->key)) {
- tor_free(c->key);
- c->key = tor_strdup(var->name);
- }
-
- if (!strlen(c->value)) {
- /* reset or clear it, then return */
- if (!clear_first) {
- if ((var->type == CONFIG_TYPE_LINELIST ||
- var->type == CONFIG_TYPE_LINELIST_S) &&
- c->command != CONFIG_LINE_CLEAR) {
- /* We got an empty linelist from the torrc or command line.
- As a special case, call this an error. Warn and ignore. */
- log_warn(LD_CONFIG,
- "Linelist option '%s' has no value. Skipping.", c->key);
- } else { /* not already cleared */
- option_reset(fmt, options, var, use_defaults);
- }
- }
- return 0;
- } else if (c->command == CONFIG_LINE_CLEAR && !clear_first) {
- option_reset(fmt, options, var, use_defaults);
- }
-
- if (options_seen && (var->type != CONFIG_TYPE_LINELIST &&
- var->type != CONFIG_TYPE_LINELIST_S)) {
- /* We're tracking which options we've seen, and this option is not
- * supposed to occur more than once. */
- int var_index = (int)(var - fmt->vars);
- if (bitarray_is_set(options_seen, var_index)) {
- log_warn(LD_CONFIG, "Option '%s' used more than once; all but the last "
- "value will be ignored.", var->name);
- }
- bitarray_set(options_seen, var_index);
+ i += want_arg ? 2 : 1;
}
-
- if (config_assign_value(fmt, options, c, msg) < 0)
- return -2;
+ *cmdline_result = front_cmdline;
+ *result = front;
return 0;
}
-/** Restore the option named <b>key</b> in options to its default value.
- * Called from config_assign(). */
-static void
-config_reset_line(const config_format_t *fmt, or_options_t *options,
- const char *key, int use_defaults)
-{
- const config_var_t *var;
-
- CHECK(fmt, options);
-
- var = config_find_option(fmt, key);
- if (!var)
- return; /* give error on next pass. */
-
- option_reset(fmt, options, var, use_defaults);
-}
-
/** Return true iff key is a valid configuration option. */
int
option_is_recognized(const char *key)
@@ -2416,287 +1975,7 @@ option_get_canonical_name(const char *key)
config_line_t *
option_get_assignment(const or_options_t *options, const char *key)
{
- return get_assigned_option(&options_format, options, key, 1);
-}
-
-/** Return true iff value needs to be quoted and escaped to be used in
- * a configuration file. */
-static int
-config_value_needs_escape(const char *value)
-{
- if (*value == '\"')
- return 1;
- while (*value) {
- switch (*value)
- {
- case '\r':
- case '\n':
- case '#':
- /* Note: quotes and backspaces need special handling when we are using
- * quotes, not otherwise, so they don't trigger escaping on their
- * own. */
- return 1;
- default:
- if (!TOR_ISPRINT(*value))
- return 1;
- }
- ++value;
- }
- return 0;
-}
-
-/** Return a newly allocated deep copy of the lines in <b>inp</b>. */
-static config_line_t *
-config_lines_dup(const config_line_t *inp)
-{
- config_line_t *result = NULL;
- config_line_t **next_out = &result;
- while (inp) {
- *next_out = tor_malloc_zero(sizeof(config_line_t));
- (*next_out)->key = tor_strdup(inp->key);
- (*next_out)->value = tor_strdup(inp->value);
- inp = inp->next;
- next_out = &((*next_out)->next);
- }
- (*next_out) = NULL;
- return result;
-}
-
-/** Return newly allocated line or lines corresponding to <b>key</b> in the
- * configuration <b>options</b>. If <b>escape_val</b> is true and a
- * value needs to be quoted before it's put in a config file, quote and
- * escape that value. Return NULL if no such key exists. */
-static config_line_t *
-get_assigned_option(const config_format_t *fmt, const void *options,
- const char *key, int escape_val)
-{
- const config_var_t *var;
- const void *value;
- config_line_t *result;
- tor_assert(options && key);
-
- CHECK(fmt, options);
-
- var = config_find_option(fmt, key);
- if (!var) {
- log_warn(LD_CONFIG, "Unknown option '%s'. Failing.", key);
- return NULL;
- }
- value = STRUCT_VAR_P(options, var->var_offset);
-
- result = tor_malloc_zero(sizeof(config_line_t));
- result->key = tor_strdup(var->name);
- switch (var->type)
- {
- case CONFIG_TYPE_STRING:
- case CONFIG_TYPE_FILENAME:
- if (*(char**)value) {
- result->value = tor_strdup(*(char**)value);
- } else {
- tor_free(result->key);
- tor_free(result);
- return NULL;
- }
- break;
- case CONFIG_TYPE_ISOTIME:
- if (*(time_t*)value) {
- result->value = tor_malloc(ISO_TIME_LEN+1);
- format_iso_time(result->value, *(time_t*)value);
- } else {
- tor_free(result->key);
- tor_free(result);
- }
- escape_val = 0; /* Can't need escape. */
- break;
- case CONFIG_TYPE_PORT:
- if (*(int*)value == CFG_AUTO_PORT) {
- result->value = tor_strdup("auto");
- escape_val = 0;
- break;
- }
- /* fall through */
- case CONFIG_TYPE_INTERVAL:
- case CONFIG_TYPE_MSEC_INTERVAL:
- case CONFIG_TYPE_UINT:
- case CONFIG_TYPE_INT:
- /* This means every or_options_t uint or bool element
- * needs to be an int. Not, say, a uint16_t or char. */
- tor_asprintf(&result->value, "%d", *(int*)value);
- escape_val = 0; /* Can't need escape. */
- break;
- case CONFIG_TYPE_MEMUNIT:
- tor_asprintf(&result->value, U64_FORMAT,
- U64_PRINTF_ARG(*(uint64_t*)value));
- escape_val = 0; /* Can't need escape. */
- break;
- case CONFIG_TYPE_DOUBLE:
- tor_asprintf(&result->value, "%f", *(double*)value);
- escape_val = 0; /* Can't need escape. */
- break;
-
- case CONFIG_TYPE_AUTOBOOL:
- if (*(int*)value == -1) {
- result->value = tor_strdup("auto");
- escape_val = 0;
- break;
- }
- /* fall through */
- case CONFIG_TYPE_BOOL:
- result->value = tor_strdup(*(int*)value ? "1" : "0");
- escape_val = 0; /* Can't need escape. */
- break;
- case CONFIG_TYPE_ROUTERSET:
- result->value = routerset_to_string(*(routerset_t**)value);
- break;
- case CONFIG_TYPE_CSV:
- if (*(smartlist_t**)value)
- result->value =
- smartlist_join_strings(*(smartlist_t**)value, ",", 0, NULL);
- else
- result->value = tor_strdup("");
- break;
- case CONFIG_TYPE_OBSOLETE:
- log_fn(LOG_PROTOCOL_WARN, LD_CONFIG,
- "You asked me for the value of an obsolete config option '%s'.",
- key);
- tor_free(result->key);
- tor_free(result);
- return NULL;
- case CONFIG_TYPE_LINELIST_S:
- log_warn(LD_CONFIG,
- "Can't return context-sensitive '%s' on its own", key);
- tor_free(result->key);
- tor_free(result);
- return NULL;
- case CONFIG_TYPE_LINELIST:
- case CONFIG_TYPE_LINELIST_V:
- tor_free(result->key);
- tor_free(result);
- result = config_lines_dup(*(const config_line_t**)value);
- break;
- default:
- tor_free(result->key);
- tor_free(result);
- log_warn(LD_BUG,"Unknown type %d for known key '%s'",
- var->type, key);
- return NULL;
- }
-
- if (escape_val) {
- config_line_t *line;
- for (line = result; line; line = line->next) {
- if (line->value && config_value_needs_escape(line->value)) {
- char *newval = esc_for_log(line->value);
- tor_free(line->value);
- line->value = newval;
- }
- }
- }
-
- return result;
-}
-
-/** Iterate through the linked list of requested options <b>list</b>.
- * For each item, convert as appropriate and assign to <b>options</b>.
- * If an item is unrecognized, set *msg and return -1 immediately,
- * else return 0 for success.
- *
- * If <b>clear_first</b>, interpret config options as replacing (not
- * extending) their previous values. If <b>clear_first</b> is set,
- * then <b>use_defaults</b> to decide if you set to defaults after
- * clearing, or make the value 0 or NULL.
- *
- * Here are the use cases:
- * 1. A non-empty AllowInvalid line in your torrc. Appends to current
- * if linelist, replaces current if csv.
- * 2. An empty AllowInvalid line in your torrc. Should clear it.
- * 3. "RESETCONF AllowInvalid" sets it to default.
- * 4. "SETCONF AllowInvalid" makes it NULL.
- * 5. "SETCONF AllowInvalid=foo" clears it and sets it to "foo".
- *
- * Use_defaults Clear_first
- * 0 0 "append"
- * 1 0 undefined, don't use
- * 0 1 "set to null first"
- * 1 1 "set to defaults first"
- * Return 0 on success, -1 on bad key, -2 on bad value.
- *
- * As an additional special case, if a LINELIST config option has
- * no value and clear_first is 0, then warn and ignore it.
- */
-
-/*
-There are three call cases for config_assign() currently.
-
-Case one: Torrc entry
-options_init_from_torrc() calls config_assign(0, 0)
- calls config_assign_line(0, 0).
- if value is empty, calls option_reset(0) and returns.
- calls config_assign_value(), appends.
-
-Case two: setconf
-options_trial_assign() calls config_assign(0, 1)
- calls config_reset_line(0)
- calls option_reset(0)
- calls option_clear().
- calls config_assign_line(0, 1).
- if value is empty, returns.
- calls config_assign_value(), appends.
-
-Case three: resetconf
-options_trial_assign() calls config_assign(1, 1)
- calls config_reset_line(1)
- calls option_reset(1)
- calls option_clear().
- calls config_assign_value(default)
- calls config_assign_line(1, 1).
- returns.
-*/
-static int
-config_assign(const config_format_t *fmt, void *options, config_line_t *list,
- int use_defaults, int clear_first, char **msg)
-{
- config_line_t *p;
- bitarray_t *options_seen;
- const int n_options = config_count_options(fmt);
-
- CHECK(fmt, options);
-
- /* pass 1: normalize keys */
- for (p = list; p; p = p->next) {
- const char *full = expand_abbrev(fmt, p->key, 0, 1);
- if (strcmp(full,p->key)) {
- tor_free(p->key);
- p->key = tor_strdup(full);
- }
- }
-
- /* pass 2: if we're reading from a resetting source, clear all
- * mentioned config options, and maybe set to their defaults. */
- if (clear_first) {
- for (p = list; p; p = p->next)
- config_reset_line(fmt, options, p->key, use_defaults);
- }
-
- options_seen = bitarray_init_zero(n_options);
- /* pass 3: assign. */
- while (list) {
- int r;
- if ((r=config_assign_line(fmt, options, list, use_defaults,
- clear_first, options_seen, msg))) {
- bitarray_free(options_seen);
- return r;
- }
- list = list->next;
- }
- bitarray_free(options_seen);
-
- /** Now we're done assigning a group of options to the configuration.
- * Subsequent group assignments should _replace_ linelists, not extend
- * them. */
- config_mark_lists_fragile(fmt, options);
-
- return 0;
+ return config_get_assigned_option(&options_format, options, key, 1);
}
/** Try assigning <b>list</b> to the global options. You do this by duping
@@ -2713,7 +1992,7 @@ options_trial_assign(config_line_t *list, int use_defaults,
int clear_first, char **msg)
{
int r;
- or_options_t *trial_options = options_dup(&options_format, get_options());
+ or_options_t *trial_options = config_dup(&options_format, get_options());
if ((r=config_assign(&options_format, trial_options,
list, use_defaults, clear_first, msg)) < 0) {
@@ -2721,7 +2000,8 @@ options_trial_assign(config_line_t *list, int use_defaults,
return r;
}
- if (options_validate(get_options_mutable(), trial_options, 1, msg) < 0) {
+ if (options_validate(get_options_mutable(), trial_options,
+ global_default_options, 1, msg) < 0) {
config_free(&options_format, trial_options);
return SETOPT_ERR_PARSE; /*XXX make this a separate return value. */
}
@@ -2740,90 +2020,6 @@ options_trial_assign(config_line_t *list, int use_defaults,
return SETOPT_OK;
}
-/** Reset config option <b>var</b> to 0, 0.0, NULL, or the equivalent.
- * Called from option_reset() and config_free(). */
-static void
-option_clear(const config_format_t *fmt, or_options_t *options,
- const config_var_t *var)
-{
- void *lvalue = STRUCT_VAR_P(options, var->var_offset);
- (void)fmt; /* unused */
- switch (var->type) {
- case CONFIG_TYPE_STRING:
- case CONFIG_TYPE_FILENAME:
- tor_free(*(char**)lvalue);
- break;
- case CONFIG_TYPE_DOUBLE:
- *(double*)lvalue = 0.0;
- break;
- case CONFIG_TYPE_ISOTIME:
- *(time_t*)lvalue = 0;
- break;
- case CONFIG_TYPE_INTERVAL:
- case CONFIG_TYPE_MSEC_INTERVAL:
- case CONFIG_TYPE_UINT:
- case CONFIG_TYPE_INT:
- case CONFIG_TYPE_PORT:
- case CONFIG_TYPE_BOOL:
- *(int*)lvalue = 0;
- break;
- case CONFIG_TYPE_AUTOBOOL:
- *(int*)lvalue = -1;
- break;
- case CONFIG_TYPE_MEMUNIT:
- *(uint64_t*)lvalue = 0;
- break;
- case CONFIG_TYPE_ROUTERSET:
- if (*(routerset_t**)lvalue) {
- routerset_free(*(routerset_t**)lvalue);
- *(routerset_t**)lvalue = NULL;
- }
- break;
- case CONFIG_TYPE_CSV:
- if (*(smartlist_t**)lvalue) {
- SMARTLIST_FOREACH(*(smartlist_t **)lvalue, char *, cp, tor_free(cp));
- smartlist_free(*(smartlist_t **)lvalue);
- *(smartlist_t **)lvalue = NULL;
- }
- break;
- case CONFIG_TYPE_LINELIST:
- case CONFIG_TYPE_LINELIST_S:
- config_free_lines(*(config_line_t **)lvalue);
- *(config_line_t **)lvalue = NULL;
- break;
- case CONFIG_TYPE_LINELIST_V:
- /* handled by linelist_s. */
- break;
- case CONFIG_TYPE_OBSOLETE:
- break;
- }
-}
-
-/** Clear the option indexed by <b>var</b> in <b>options</b>. Then if
- * <b>use_defaults</b>, set it to its default value.
- * Called by config_init() and option_reset_line() and option_assign_line(). */
-static void
-option_reset(const config_format_t *fmt, or_options_t *options,
- const config_var_t *var, int use_defaults)
-{
- config_line_t *c;
- char *msg = NULL;
- CHECK(fmt, options);
- option_clear(fmt, options, var); /* clear it first */
- if (!use_defaults)
- return; /* all done */
- if (var->initvalue) {
- c = tor_malloc_zero(sizeof(config_line_t));
- c->key = tor_strdup(var->name);
- c->value = tor_strdup(var->initvalue);
- if (config_assign_value(fmt, options, c, &msg) < 0) {
- log_warn(LD_BUG, "Failed to assign default: %s", msg);
- tor_free(msg); /* if this happens it's a bug */
- }
- config_free_lines(c);
- }
-}
-
/** Print a usage message for tor. */
static void
print_usage(void)
@@ -2831,7 +2027,7 @@ print_usage(void)
printf(
"Copyright (c) 2001-2004, Roger Dingledine\n"
"Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson\n"
-"Copyright (c) 2007-2012, The Tor Project, Inc.\n\n"
+"Copyright (c) 2007-2013, The Tor Project, Inc.\n\n"
"tor -f <torrc> [args]\n"
"See man page for options, or https://www.torproject.org/ for "
"documentation.\n");
@@ -2843,8 +2039,8 @@ list_torrc_options(void)
{
int i;
smartlist_t *lines = smartlist_new();
- for (i = 0; _option_vars[i].name; ++i) {
- const config_var_t *var = &_option_vars[i];
+ for (i = 0; option_vars_[i].name; ++i) {
+ const config_var_t *var = &option_vars_[i];
if (var->type == CONFIG_TYPE_OBSOLETE ||
var->type == CONFIG_TYPE_LINELIST_V)
continue;
@@ -2855,21 +2051,41 @@ list_torrc_options(void)
/** Last value actually set by resolve_my_address. */
static uint32_t last_resolved_addr = 0;
+
+/** Accessor for last_resolved_addr from outside this file. */
+uint32_t
+get_last_resolved_addr(void)
+{
+ return last_resolved_addr;
+}
+
/**
- * Based on <b>options-\>Address</b>, guess our public IP address and put it
- * (in host order) into *<b>addr_out</b>. If <b>hostname_out</b> is provided,
- * set *<b>hostname_out</b> to a new string holding the hostname we used to
- * get the address. Return 0 if all is well, or -1 if we can't find a suitable
+ * Use <b>options-\>Address</b> to guess our public IP address.
+ *
+ * Return 0 if all is well, or -1 if we can't find a suitable
* public IP address.
+ *
+ * If we are returning 0:
+ * - Put our public IP address (in host order) into *<b>addr_out</b>.
+ * - If <b>method_out</b> is non-NULL, set *<b>method_out</b> to a static
+ * string describing how we arrived at our answer.
+ * - If <b>hostname_out</b> is non-NULL, and we resolved a hostname to
+ * get our address, set *<b>hostname_out</b> to a newly allocated string
+ * holding that hostname. (If we didn't get our address by resolving a
+ * hostname, set *<b>hostname_out</b> to NULL.)
+ *
* XXXX ipv6
*/
int
resolve_my_address(int warn_severity, const or_options_t *options,
- uint32_t *addr_out, char **hostname_out)
+ uint32_t *addr_out,
+ const char **method_out, char **hostname_out)
{
struct in_addr in;
uint32_t addr; /* host order */
char hostname[256];
+ const char *method_used;
+ const char *hostname_used;
int explicit_ip=1;
int explicit_hostname=1;
int from_interface=0;
@@ -2878,8 +2094,13 @@ resolve_my_address(int warn_severity, const or_options_t *options,
int notice_severity = warn_severity <= LOG_NOTICE ?
LOG_NOTICE : warn_severity;
+ tor_addr_t myaddr;
tor_assert(addr_out);
+ /*
+ * Step one: Fill in 'hostname' to be our best guess.
+ */
+
if (address && *address) {
strlcpy(hostname, address, sizeof(hostname));
} else { /* then we need to guess our address */
@@ -2890,10 +2111,14 @@ resolve_my_address(int warn_severity, const or_options_t *options,
log_fn(warn_severity, LD_NET,"Error obtaining local hostname");
return -1;
}
- log_debug(LD_CONFIG,"Guessed local host name as '%s'",hostname);
+ log_debug(LD_CONFIG, "Guessed local host name as '%s'", hostname);
}
- /* now we know hostname. resolve it and keep only the IP address */
+ /*
+ * Step two: Now that we know 'hostname', parse it or resolve it. If
+ * it doesn't parse or resolve, look at the interface address. Set 'addr'
+ * to be our (host-order) 32-bit answer.
+ */
if (tor_inet_aton(hostname, &in) == 0) {
/* then we have to resolve it */
@@ -2920,24 +2145,26 @@ resolve_my_address(int warn_severity, const or_options_t *options,
"local interface. Using that.", fmt_addr32(addr));
strlcpy(hostname, "<guessed from interfaces>", sizeof(hostname));
} else { /* resolved hostname into addr */
+ tor_addr_from_ipv4h(&myaddr, addr);
+
if (!explicit_hostname &&
- is_internal_IP(addr, 0)) {
- uint32_t interface_ip;
+ tor_addr_is_internal(&myaddr, 0)) {
+ tor_addr_t interface_ip;
log_fn(notice_severity, LD_CONFIG, "Guessed local hostname '%s' "
"resolves to a private IP address (%s). Trying something "
"else.", hostname, fmt_addr32(addr));
- if (get_interface_address(warn_severity, &interface_ip)) {
+ if (get_interface_address6(warn_severity, AF_INET, &interface_ip)<0) {
log_fn(warn_severity, LD_CONFIG,
"Could not get local interface IP address. Too bad.");
- } else if (is_internal_IP(interface_ip, 0)) {
+ } else if (tor_addr_is_internal(&interface_ip, 0)) {
log_fn(notice_severity, LD_CONFIG,
"Interface IP address '%s' is a private address too. "
- "Ignoring.", fmt_addr32(interface_ip));
+ "Ignoring.", fmt_addr(&interface_ip));
} else {
from_interface = 1;
- addr = interface_ip;
+ addr = tor_addr_to_ipv4h(&interface_ip);
log_fn(notice_severity, LD_CONFIG,
"Learned IP address '%s' for local interface."
" Using that.", fmt_addr32(addr));
@@ -2950,21 +2177,28 @@ resolve_my_address(int warn_severity, const or_options_t *options,
* illformed */
}
+ /*
+ * Step three: Check whether 'addr' is an internal IP address, and error
+ * out if it is and we don't want that.
+ */
+
+ tor_addr_from_ipv4h(&myaddr,addr);
+
addr_string = tor_dup_ip(addr);
- if (is_internal_IP(addr, 0)) {
+ if (tor_addr_is_internal(&myaddr, 0)) {
/* make sure we're ok with publishing an internal IP */
- if (!options->DirServers && !options->AlternateDirAuthority) {
- /* if they are using the default dirservers, disallow internal IPs
+ if (!options->DirAuthorities && !options->AlternateDirAuthority) {
+ /* if they are using the default authorities, disallow internal IPs
* always. */
log_fn(warn_severity, LD_CONFIG,
"Address '%s' resolves to private IP address '%s'. "
- "Tor servers that use the default DirServers must have public "
- "IP addresses.", hostname, addr_string);
+ "Tor servers that use the default DirAuthorities must have "
+ "public IP addresses.", hostname, addr_string);
tor_free(addr_string);
return -1;
}
if (!explicit_ip) {
- /* even if they've set their own dirservers, require an explicit IP if
+ /* even if they've set their own authorities, require an explicit IP if
* they're using an internal address. */
log_fn(warn_severity, LD_CONFIG, "Address '%s' resolves to private "
"IP address '%s'. Please set the Address config option to be "
@@ -2974,37 +2208,65 @@ resolve_my_address(int warn_severity, const or_options_t *options,
}
}
- log_debug(LD_CONFIG, "Resolved Address to '%s'.", fmt_addr32(addr));
+ /*
+ * Step four: We have a winner! 'addr' is our answer for sure, and
+ * 'addr_string' is its string form. Fill out the various fields to
+ * say how we decided it.
+ */
+
+ log_debug(LD_CONFIG, "Resolved Address to '%s'.", addr_string);
+
+ if (explicit_ip) {
+ method_used = "CONFIGURED";
+ hostname_used = NULL;
+ } else if (explicit_hostname) {
+ method_used = "RESOLVED";
+ hostname_used = hostname;
+ } else if (from_interface) {
+ method_used = "INTERFACE";
+ hostname_used = NULL;
+ } else {
+ method_used = "GETHOSTNAME";
+ hostname_used = hostname;
+ }
+
*addr_out = addr;
+ if (method_out)
+ *method_out = method_used;
+ if (hostname_out)
+ *hostname_out = hostname_used ? tor_strdup(hostname_used) : NULL;
+
+ /*
+ * Step five: Check if the answer has changed since last time (or if
+ * there was no last time), and if so call various functions to keep
+ * us up-to-date.
+ */
+
if (last_resolved_addr && last_resolved_addr != *addr_out) {
/* Leave this as a notice, regardless of the requested severity,
* at least until dynamic IP address support becomes bulletproof. */
log_notice(LD_NET,
- "Your IP address seems to have changed to %s. Updating.",
- addr_string);
+ "Your IP address seems to have changed to %s "
+ "(METHOD=%s%s%s). Updating.",
+ addr_string, method_used,
+ hostname_used ? " HOSTNAME=" : "",
+ hostname_used ? hostname_used : "");
ip_address_changed(0);
}
+
if (last_resolved_addr != *addr_out) {
- const char *method;
- const char *h = hostname;
- if (explicit_ip) {
- method = "CONFIGURED";
- h = NULL;
- } else if (explicit_hostname) {
- method = "RESOLVED";
- } else if (from_interface) {
- method = "INTERFACE";
- h = NULL;
- } else {
- method = "GETHOSTNAME";
- }
control_event_server_status(LOG_NOTICE,
- "EXTERNAL_ADDRESS ADDRESS=%s METHOD=%s %s%s",
- addr_string, method, h?"HOSTNAME=":"", h);
+ "EXTERNAL_ADDRESS ADDRESS=%s METHOD=%s%s%s",
+ addr_string, method_used,
+ hostname_used ? " HOSTNAME=" : "",
+ hostname_used ? hostname_used : "");
}
last_resolved_addr = *addr_out;
- if (hostname_out)
- *hostname_out = tor_strdup(hostname);
+
+ /*
+ * And finally, clean up and return success.
+ */
+
tor_free(addr_string);
return 0;
}
@@ -3029,7 +2291,7 @@ is_local_addr(const tor_addr_t *addr)
* resolve_my_address will never be called at all). In those cases,
* last_resolved_addr will be 0, and so checking to see whether ip is on
* the same /24 as last_resolved_addr will be the same as checking whether
- * it was on net 0, which is already done by is_internal_IP.
+ * it was on net 0, which is already done by tor_addr_is_internal.
*/
if ((last_resolved_addr & (uint32_t)0xffffff00ul)
== (ip & (uint32_t)0xffffff00ul))
@@ -3038,112 +2300,11 @@ is_local_addr(const tor_addr_t *addr)
return 0;
}
-/** Release storage held by <b>options</b>. */
-static void
-config_free(const config_format_t *fmt, void *options)
-{
- int i;
-
- if (!options)
- return;
-
- tor_assert(fmt);
-
- for (i=0; fmt->vars[i].name; ++i)
- option_clear(fmt, options, &(fmt->vars[i]));
- if (fmt->extra) {
- config_line_t **linep = STRUCT_VAR_P(options, fmt->extra->var_offset);
- config_free_lines(*linep);
- *linep = NULL;
- }
- tor_free(options);
-}
-
-/** Return true iff a and b contain identical keys and values in identical
- * order. */
-static int
-config_lines_eq(config_line_t *a, config_line_t *b)
-{
- while (a && b) {
- if (strcasecmp(a->key, b->key) || strcmp(a->value, b->value))
- return 0;
- a = a->next;
- b = b->next;
- }
- if (a || b)
- return 0;
- return 1;
-}
-
-/** Return the number of lines in <b>a</b> whose key is <b>key</b>. */
-static int
-config_count_key(const config_line_t *a, const char *key)
-{
- int n = 0;
- while (a) {
- if (!strcasecmp(a->key, key)) {
- ++n;
- }
- a = a->next;
- }
- return n;
-}
-
-/** Return true iff the option <b>name</b> has the same value in <b>o1</b>
- * and <b>o2</b>. Must not be called for LINELIST_S or OBSOLETE options.
- */
-static int
-option_is_same(const config_format_t *fmt,
- const or_options_t *o1, const or_options_t *o2,
- const char *name)
-{
- config_line_t *c1, *c2;
- int r = 1;
- CHECK(fmt, o1);
- CHECK(fmt, o2);
-
- c1 = get_assigned_option(fmt, o1, name, 0);
- c2 = get_assigned_option(fmt, o2, name, 0);
- r = config_lines_eq(c1, c2);
- config_free_lines(c1);
- config_free_lines(c2);
- return r;
-}
-
-/** Copy storage held by <b>old</b> into a new or_options_t and return it. */
-static or_options_t *
-options_dup(const config_format_t *fmt, const or_options_t *old)
-{
- or_options_t *newopts;
- int i;
- config_line_t *line;
-
- newopts = config_alloc(fmt);
- for (i=0; fmt->vars[i].name; ++i) {
- if (fmt->vars[i].type == CONFIG_TYPE_LINELIST_S)
- continue;
- if (fmt->vars[i].type == CONFIG_TYPE_OBSOLETE)
- continue;
- line = get_assigned_option(fmt, old, fmt->vars[i].name, 0);
- if (line) {
- char *msg = NULL;
- if (config_assign(fmt, newopts, line, 0, 0, &msg) < 0) {
- log_err(LD_BUG, "Config_get_assigned_option() generated "
- "something we couldn't config_assign(): %s", msg);
- tor_free(msg);
- tor_assert(0);
- }
- }
- config_free_lines(line);
- }
- return newopts;
-}
-
/** Return a new empty or_options_t. Used for testing. */
or_options_t *
options_new(void)
{
- return config_alloc(&options_format);
+ return config_new(&options_format);
}
/** Set <b>options</b> to hold reasonable defaults for most options.
@@ -3154,103 +2315,34 @@ options_init(or_options_t *options)
config_init(&options_format, options);
}
-/** Set all vars in the configuration object <b>options</b> to their default
- * values. */
-static void
-config_init(const config_format_t *fmt, void *options)
-{
- int i;
- const config_var_t *var;
- CHECK(fmt, options);
-
- for (i=0; fmt->vars[i].name; ++i) {
- var = &fmt->vars[i];
- if (!var->initvalue)
- continue; /* defaults to NULL or 0 */
- option_reset(fmt, options, var, 1);
- }
-}
-
-/** Allocate and return a new string holding the written-out values of the vars
- * in 'options'. If 'minimal', do not write out any default-valued vars.
- * Else, if comment_defaults, write default values as comments.
- */
-static char *
-config_dump(const config_format_t *fmt, const void *default_options,
- const void *options, int minimal,
- int comment_defaults)
-{
- smartlist_t *elements;
- const or_options_t *defaults = default_options;
- void *defaults_tmp = NULL;
- config_line_t *line, *assigned;
- char *result;
- int i;
- char *msg = NULL;
-
- if (defaults == NULL) {
- defaults = defaults_tmp = config_alloc(fmt);
- config_init(fmt, defaults_tmp);
- }
-
- /* XXX use a 1 here so we don't add a new log line while dumping */
- if (default_options == NULL) {
- if (fmt->validate_fn(NULL, defaults_tmp, 1, &msg) < 0) {
- log_err(LD_BUG, "Failed to validate default config.");
- tor_free(msg);
- tor_assert(0);
- }
- }
-
- elements = smartlist_new();
- for (i=0; fmt->vars[i].name; ++i) {
- int comment_option = 0;
- if (fmt->vars[i].type == CONFIG_TYPE_OBSOLETE ||
- fmt->vars[i].type == CONFIG_TYPE_LINELIST_S)
- continue;
- /* Don't save 'hidden' control variables. */
- if (!strcmpstart(fmt->vars[i].name, "__"))
- continue;
- if (minimal && option_is_same(fmt, options, defaults, fmt->vars[i].name))
- continue;
- else if (comment_defaults &&
- option_is_same(fmt, options, defaults, fmt->vars[i].name))
- comment_option = 1;
-
- line = assigned = get_assigned_option(fmt, options, fmt->vars[i].name, 1);
-
- for (; line; line = line->next) {
- smartlist_add_asprintf(elements, "%s%s %s\n",
- comment_option ? "# " : "",
- line->key, line->value);
- }
- config_free_lines(assigned);
- }
-
- if (fmt->extra) {
- line = *(config_line_t**)STRUCT_VAR_P(options, fmt->extra->var_offset);
- for (; line; line = line->next) {
- smartlist_add_asprintf(elements, "%s %s\n", line->key, line->value);
- }
- }
-
- result = smartlist_join_strings(elements, "", 0, NULL);
- SMARTLIST_FOREACH(elements, char *, cp, tor_free(cp));
- smartlist_free(elements);
- if (defaults_tmp)
- config_free(fmt, defaults_tmp);
- return result;
-}
-
/** Return a string containing a possible configuration file that would give
* the configuration in <b>options</b>. If <b>minimal</b> is true, do not
* include options that are the same as Tor's defaults.
*/
char *
-options_dump(const or_options_t *options, int minimal)
+options_dump(const or_options_t *options, int how_to_dump)
{
- return config_dump(&options_format, global_default_options,
- options, minimal, 0);
+ const or_options_t *use_defaults;
+ int minimal;
+ switch (how_to_dump) {
+ case OPTIONS_DUMP_MINIMAL:
+ use_defaults = global_default_options;
+ minimal = 1;
+ break;
+ case OPTIONS_DUMP_DEFAULTS:
+ use_defaults = NULL;
+ minimal = 1;
+ break;
+ case OPTIONS_DUMP_ALL:
+ use_defaults = NULL;
+ minimal = 0;
+ break;
+ default:
+ log_warn(LD_BUG, "Bogus value for how_to_dump==%d", how_to_dump);
+ return NULL;
+ }
+
+ return config_dump(&options_format, use_defaults, options, minimal, 0);
}
/** Return 0 if every element of sl is a string holding a decimal
@@ -3298,29 +2390,31 @@ ensure_bandwidth_cap(uint64_t *value, const char *desc, char **msg)
}
/** Parse an authority type from <b>options</b>-\>PublishServerDescriptor
- * and write it to <b>options</b>-\>_PublishServerDescriptor. Treat "1"
- * as "v2,v3" unless BridgeRelay is 1, in which case treat it as "bridge".
+ * and write it to <b>options</b>-\>PublishServerDescriptor_. Treat "1"
+ * as "v3" unless BridgeRelay is 1, in which case treat it as "bridge".
* Treat "0" as "".
* Return 0 on success or -1 if not a recognized authority type (in which
- * case the value of _PublishServerDescriptor is undefined). */
+ * case the value of PublishServerDescriptor_ is undefined). */
static int
compute_publishserverdescriptor(or_options_t *options)
{
smartlist_t *list = options->PublishServerDescriptor;
- dirinfo_type_t *auth = &options->_PublishServerDescriptor;
+ dirinfo_type_t *auth = &options->PublishServerDescriptor_;
*auth = NO_DIRINFO;
if (!list) /* empty list, answer is none */
return 0;
SMARTLIST_FOREACH_BEGIN(list, const char *, string) {
if (!strcasecmp(string, "v1"))
- *auth |= V1_DIRINFO;
+ log_warn(LD_CONFIG, "PublishServerDescriptor v1 has no effect, because "
+ "there are no v1 directory authorities anymore.");
else if (!strcmp(string, "1"))
if (options->BridgeRelay)
*auth |= BRIDGE_DIRINFO;
else
- *auth |= V2_DIRINFO | V3_DIRINFO;
+ *auth |= V3_DIRINFO;
else if (!strcasecmp(string, "v2"))
- *auth |= V2_DIRINFO;
+ log_warn(LD_CONFIG, "PublishServerDescriptor v2 has no effect, because "
+ "there are no v2 directory authorities anymore.");
else if (!strcasecmp(string, "v3"))
*auth |= V3_DIRINFO;
else if (!strcasecmp(string, "bridge"))
@@ -3341,6 +2435,11 @@ compute_publishserverdescriptor(or_options_t *options)
* services can overload the directory system. */
#define MIN_REND_POST_PERIOD (10*60)
+/** Higest allowable value for PredictedPortsRelevanceTime; if this is
+ * too high, our selection of exits will decrease for an extended
+ * period of time to an uncomfortable level .*/
+#define MAX_PREDICTED_CIRCS_RELEVANCE (60*60)
+
/** Highest allowable value for RendPostPeriod. */
#define MAX_DIR_PERIOD (MIN_ONION_KEY_LIFETIME/2)
@@ -3348,6 +2447,10 @@ compute_publishserverdescriptor(or_options_t *options)
* will generate too many circuits and potentially overload the network. */
#define MIN_MAX_CIRCUIT_DIRTINESS 10
+/** Highest allowable value for MaxCircuitDirtiness: prevents time_t
+ * overflows. */
+#define MAX_MAX_CIRCUIT_DIRTINESS (30*24*60*60)
+
/** Lowest allowable value for CircuitStreamTimeout; if this is too low, Tor
* will generate too many circuits and potentially overload the network. */
#define MIN_CIRCUIT_STREAM_TIMEOUT 10
@@ -3363,10 +2466,19 @@ compute_publishserverdescriptor(or_options_t *options)
* */
#define RECOMMENDED_MIN_CIRCUIT_BUILD_TIMEOUT (10)
-/** Return 0 if every setting in <b>options</b> is reasonable, and a
- * permissible transition from <b>old_options</b>. Else return -1.
- * Should have no side effects, except for normalizing the contents of
- * <b>options</b>.
+static int
+options_validate_cb(void *old_options, void *options, void *default_options,
+ int from_setconf, char **msg)
+{
+ return options_validate(old_options, options, default_options,
+ from_setconf, msg);
+}
+
+/** Return 0 if every setting in <b>options</b> is reasonable, is a
+ * permissible transition from <b>old_options</b>, and none of the
+ * testing-only settings differ from <b>default_options</b> unless in
+ * testing mode. Else return -1. Should have no side effects, except for
+ * normalizing the contents of <b>options</b>.
*
* On error, tor_strdup an error explanation into *<b>msg</b>.
*
@@ -3375,9 +2487,9 @@ compute_publishserverdescriptor(or_options_t *options)
* Log line should stay empty. If it's 0, then give us a default log
* if there are no logs defined.
*/
-static int
+STATIC int
options_validate(or_options_t *old_options, or_options_t *options,
- int from_setconf, char **msg)
+ or_options_t *default_options, int from_setconf, char **msg)
{
int i;
config_line_t *cl;
@@ -3385,7 +2497,7 @@ options_validate(or_options_t *old_options, or_options_t *options,
int n_ports=0;
#define REJECT(arg) \
STMT_BEGIN *msg = tor_strdup(arg); return -1; STMT_END
-#define COMPLAIN(arg) STMT_BEGIN log(LOG_WARN, LD_CONFIG, arg); STMT_END
+#define COMPLAIN(arg) STMT_BEGIN log_warn(LD_CONFIG, arg); STMT_END
tor_assert(msg);
*msg = NULL;
@@ -3394,15 +2506,18 @@ options_validate(or_options_t *old_options, or_options_t *options,
(!strcmpstart(uname, "Windows 95") ||
!strcmpstart(uname, "Windows 98") ||
!strcmpstart(uname, "Windows Me"))) {
- log(LOG_WARN, LD_CONFIG, "Tor is running as a server, but you are "
+ log_warn(LD_CONFIG, "Tor is running as a server, but you are "
"running %s; this probably won't work. See "
- "https://wiki.torproject.org/TheOnionRouter/TorFAQ#ServerOS "
+ "https://www.torproject.org/docs/faq.html#BestOSForRelay "
"for details.", uname);
}
if (parse_ports(options, 1, msg, &n_ports) < 0)
return -1;
+ if (parse_outbound_addresses(options, 1, msg) < 0)
+ return -1;
+
if (validate_data_directory(options)<0)
REJECT("Invalid DataDirectory");
@@ -3420,7 +2535,7 @@ options_validate(or_options_t *old_options, or_options_t *options,
}
if (server_mode(options) && !options->ContactInfo)
- log(LOG_NOTICE, LD_CONFIG, "Your ContactInfo config option is not set. "
+ log_notice(LD_CONFIG, "Your ContactInfo config option is not set. "
"Please consider setting it, so we can contact you if your server is "
"misconfigured or something else goes wrong.");
@@ -3432,13 +2547,13 @@ options_validate(or_options_t *old_options, or_options_t *options,
config_line_append(&options->Logs, "Log", "warn stdout");
}
- if (options_init_logs(options, 1)<0) /* Validate the log(s) */
+ if (options_init_logs(options, 1)<0) /* Validate the tor_log(s) */
REJECT("Failed to validate Log options. See logs for details.");
if (authdir_mode(options)) {
/* confirm that our address isn't broken, so we can complain now */
uint32_t tmp;
- if (resolve_my_address(LOG_WARN, options, &tmp, NULL) < 0)
+ if (resolve_my_address(LOG_WARN, options, &tmp, NULL, NULL) < 0)
REJECT("Failed to resolve/guess local address. See logs for details.");
}
@@ -3450,15 +2565,48 @@ options_validate(or_options_t *old_options, or_options_t *options,
/* XXXX require that the only port not be DirPort? */
/* XXXX require that at least one port be listened-upon. */
if (n_ports == 0 && !options->RendConfigLines)
- log(LOG_WARN, LD_CONFIG,
+ log_warn(LD_CONFIG,
"SocksPort, TransPort, NATDPort, DNSPort, and ORPort are all "
"undefined, and there aren't any hidden services configured. "
"Tor will still run, but probably won't do anything.");
-#ifndef USE_TRANSPARENT
- /* XXXX024 I think we can remove this TransListenAddress */
- if (options->TransPort_set || options->TransListenAddress)
- REJECT("TransPort and TransListenAddress are disabled in this build.");
+ options->TransProxyType_parsed = TPT_DEFAULT;
+#ifdef USE_TRANSPARENT
+ if (options->TransProxyType) {
+ if (!strcasecmp(options->TransProxyType, "default")) {
+ options->TransProxyType_parsed = TPT_DEFAULT;
+ } else if (!strcasecmp(options->TransProxyType, "pf-divert")) {
+#ifndef __OpenBSD__
+ REJECT("pf-divert is a OpenBSD-specific feature.");
+#else
+ options->TransProxyType_parsed = TPT_PF_DIVERT;
+#endif
+ } else if (!strcasecmp(options->TransProxyType, "tproxy")) {
+#ifndef __linux__
+ REJECT("TPROXY is a Linux-specific feature.");
+#else
+ options->TransProxyType_parsed = TPT_TPROXY;
+#endif
+ } else if (!strcasecmp(options->TransProxyType, "ipfw")) {
+#ifndef __FreeBSD__
+ REJECT("ipfw is a FreeBSD-specific feature.");
+#else
+ options->TransProxyType_parsed = TPT_IPFW;
+#endif
+ } else {
+ REJECT("Unrecognized value for TransProxyType");
+ }
+
+ if (strcasecmp(options->TransProxyType, "default") &&
+ !options->TransPort_set) {
+ REJECT("Cannot use TransProxyType without any valid TransPort or "
+ "TransListenAddress.");
+ }
+ }
+#else
+ if (options->TransPort_set)
+ REJECT("TransPort and TransListenAddress are disabled "
+ "in this build.");
#endif
if (options->TokenBucketRefillInterval <= 0
@@ -3467,9 +2615,9 @@ options_validate(or_options_t *old_options, or_options_t *options,
}
if (options->ExcludeExitNodes || options->ExcludeNodes) {
- options->_ExcludeExitNodesUnion = routerset_new();
- routerset_union(options->_ExcludeExitNodesUnion,options->ExcludeExitNodes);
- routerset_union(options->_ExcludeExitNodesUnion,options->ExcludeNodes);
+ options->ExcludeExitNodesUnion_ = routerset_new();
+ routerset_union(options->ExcludeExitNodesUnion_,options->ExcludeExitNodes);
+ routerset_union(options->ExcludeExitNodesUnion_,options->ExcludeNodes);
}
if (options->NodeFamilies) {
@@ -3484,6 +2632,12 @@ options_validate(or_options_t *old_options, or_options_t *options,
}
}
+ if (options->TLSECGroup && (strcasecmp(options->TLSECGroup, "P256") &&
+ strcasecmp(options->TLSECGroup, "P224"))) {
+ COMPLAIN("Unrecognized TLSECGroup: Falling back to the default.");
+ tor_free(options->TLSECGroup);
+ }
+
if (options->ExcludeNodes && options->StrictNodes) {
COMPLAIN("You have asked to exclude certain relays from all positions "
"in your circuits. Expect hidden services and other Tor "
@@ -3493,8 +2647,6 @@ options_validate(or_options_t *old_options, or_options_t *options,
if (options->AuthoritativeDir) {
if (!options->ContactInfo && !options->TestingTorNetwork)
REJECT("Authoritative directory servers must set ContactInfo");
- if (options->V1AuthoritativeDir && !options->RecommendedVersions)
- REJECT("V1 authoritative dir servers must set RecommendedVersions.");
if (!options->RecommendedClientVersions)
options->RecommendedClientVersions =
config_lines_dup(options->RecommendedVersions);
@@ -3516,11 +2668,10 @@ options_validate(or_options_t *old_options, or_options_t *options,
"extra-info documents. Setting DownloadExtraInfo.");
options->DownloadExtraInfo = 1;
}
- if (!(options->BridgeAuthoritativeDir || options->HSAuthoritativeDir ||
- options->V1AuthoritativeDir || options->V2AuthoritativeDir ||
+ if (!(options->BridgeAuthoritativeDir ||
options->V3AuthoritativeDir))
REJECT("AuthoritativeDir is set, but none of "
- "(Bridge/HS/V1/V2/V3)AuthoritativeDir is set.");
+ "(Bridge/V3)AuthoritativeDir is set.");
/* If we have a v3bandwidthsfile and it's broken, complain on startup */
if (options->V3BandwidthsFile && !old_options) {
dirserv_read_measured_bandwidths(options->V3BandwidthsFile, NULL);
@@ -3540,10 +2691,6 @@ options_validate(or_options_t *old_options, or_options_t *options,
REJECT("FetchDirInfoExtraEarly requires that you also set "
"FetchDirInfoEarly");
- if (options->HSAuthoritativeDir && proxy_mode(options))
- REJECT("Running as authoritative v0 HS directory, but also configured "
- "as a client.");
-
if (options->ConnLimit <= 0) {
tor_asprintf(msg,
"ConnLimit must be greater than 0, but was set to %d",
@@ -3551,6 +2698,18 @@ options_validate(or_options_t *old_options, or_options_t *options,
return -1;
}
+ if (options->PathsNeededToBuildCircuits >= 0.0) {
+ if (options->PathsNeededToBuildCircuits < 0.25) {
+ log_warn(LD_CONFIG, "PathsNeededToBuildCircuits is too low. Increasing "
+ "to 0.25");
+ options->PathsNeededToBuildCircuits = 0.25;
+ } else if (options->PathsNeededToBuildCircuits > 0.95) {
+ log_warn(LD_CONFIG, "PathsNeededToBuildCircuits is too high. Decreasing "
+ "to 0.95");
+ options->PathsNeededToBuildCircuits = 0.95;
+ }
+ }
+
if (options->MaxClientCircuitsPending <= 0 ||
options->MaxClientCircuitsPending > MAX_MAX_CLIENT_CIRCUITS_PENDING) {
tor_asprintf(msg,
@@ -3592,7 +2751,7 @@ options_validate(or_options_t *old_options, or_options_t *options,
});
new_line->value = smartlist_join_strings(instead,",",0,NULL);
/* These have been deprecated since 0.1.1.5-alpha-cvs */
- log(LOG_NOTICE, LD_CONFIG,
+ log_notice(LD_CONFIG,
"Converting FascistFirewall and FirewallPorts "
"config options to new format: \"ReachableAddresses %s\"",
new_line->value);
@@ -3607,7 +2766,7 @@ options_validate(or_options_t *old_options, or_options_t *options,
new_line->key = tor_strdup("ReachableDirAddresses");
new_line->value = tor_strdup("*:80");
options->ReachableDirAddresses = new_line;
- log(LOG_NOTICE, LD_CONFIG, "Converting FascistFirewall config option "
+ log_notice(LD_CONFIG, "Converting FascistFirewall config option "
"to new format: \"ReachableDirAddresses *:80\"");
}
if (!options->ReachableORAddresses) {
@@ -3615,7 +2774,7 @@ options_validate(or_options_t *old_options, or_options_t *options,
new_line->key = tor_strdup("ReachableORAddresses");
new_line->value = tor_strdup("*:443");
options->ReachableORAddresses = new_line;
- log(LOG_NOTICE, LD_CONFIG, "Converting FascistFirewall config option "
+ log_notice(LD_CONFIG, "Converting FascistFirewall config option "
"to new format: \"ReachableORAddresses *:443\"");
}
}
@@ -3664,23 +2823,28 @@ options_validate(or_options_t *old_options, or_options_t *options,
if (options->UseBridges && options->EntryNodes)
REJECT("You cannot set both UseBridges and EntryNodes.");
- if (options->EntryNodes && !options->UseEntryGuards)
- log_warn(LD_CONFIG, "EntryNodes is set, but UseEntryGuards is disabled. "
- "EntryNodes will be ignored.");
+ if (options->EntryNodes && !options->UseEntryGuards) {
+ REJECT("If EntryNodes is set, UseEntryGuards must be enabled.");
+ }
+
+ options->MaxMemInQueues =
+ compute_real_max_mem_in_queues(options->MaxMemInQueues_raw,
+ server_mode(options));
+
+ options->AllowInvalid_ = 0;
- options->_AllowInvalid = 0;
if (options->AllowInvalidNodes) {
SMARTLIST_FOREACH_BEGIN(options->AllowInvalidNodes, const char *, cp) {
if (!strcasecmp(cp, "entry"))
- options->_AllowInvalid |= ALLOW_INVALID_ENTRY;
+ options->AllowInvalid_ |= ALLOW_INVALID_ENTRY;
else if (!strcasecmp(cp, "exit"))
- options->_AllowInvalid |= ALLOW_INVALID_EXIT;
+ options->AllowInvalid_ |= ALLOW_INVALID_EXIT;
else if (!strcasecmp(cp, "middle"))
- options->_AllowInvalid |= ALLOW_INVALID_MIDDLE;
+ options->AllowInvalid_ |= ALLOW_INVALID_MIDDLE;
else if (!strcasecmp(cp, "introduction"))
- options->_AllowInvalid |= ALLOW_INVALID_INTRODUCTION;
+ options->AllowInvalid_ |= ALLOW_INVALID_INTRODUCTION;
else if (!strcasecmp(cp, "rendezvous"))
- options->_AllowInvalid |= ALLOW_INVALID_RENDEZVOUS;
+ options->AllowInvalid_ |= ALLOW_INVALID_RENDEZVOUS;
else {
tor_asprintf(msg,
"Unrecognized value '%s' in AllowInvalidNodes", cp);
@@ -3691,11 +2855,11 @@ options_validate(or_options_t *old_options, or_options_t *options,
if (!options->SafeLogging ||
!strcasecmp(options->SafeLogging, "0")) {
- options->_SafeLogging = SAFELOG_SCRUB_NONE;
+ options->SafeLogging_ = SAFELOG_SCRUB_NONE;
} else if (!strcasecmp(options->SafeLogging, "relay")) {
- options->_SafeLogging = SAFELOG_SCRUB_RELAY;
+ options->SafeLogging_ = SAFELOG_SCRUB_RELAY;
} else if (!strcasecmp(options->SafeLogging, "1")) {
- options->_SafeLogging = SAFELOG_SCRUB_ALL;
+ options->SafeLogging_ = SAFELOG_SCRUB_ALL;
} else {
tor_asprintf(msg,
"Unrecognized value '%s' in SafeLogging",
@@ -3709,9 +2873,8 @@ options_validate(or_options_t *old_options, or_options_t *options,
}
if ((options->BridgeRelay
- || options->_PublishServerDescriptor & BRIDGE_DIRINFO)
- && (options->_PublishServerDescriptor
- & (V1_DIRINFO|V2_DIRINFO|V3_DIRINFO))) {
+ || options->PublishServerDescriptor_ & BRIDGE_DIRINFO)
+ && (options->PublishServerDescriptor_ & V3_DIRINFO)) {
REJECT("Bridges are not supposed to publish router descriptors to the "
"directory authorities. Please correct your "
"PublishServerDescriptor line.");
@@ -3743,6 +2906,13 @@ options_validate(or_options_t *old_options, or_options_t *options,
options->RendPostPeriod = MAX_DIR_PERIOD;
}
+ if (options->PredictedPortsRelevanceTime >
+ MAX_PREDICTED_CIRCS_RELEVANCE) {
+ log_warn(LD_CONFIG, "PredictedPortsRelevanceTime is too large; "
+ "clipping to %ds.", MAX_PREDICTED_CIRCS_RELEVANCE);
+ options->PredictedPortsRelevanceTime = MAX_PREDICTED_CIRCS_RELEVANCE;
+ }
+
if (options->Tor2webMode && options->LearnCircuitBuildTimeout) {
/* LearnCircuitBuildTimeout and Tor2webMode are incompatible in
* two ways:
@@ -3761,15 +2931,73 @@ options_validate(or_options_t *old_options, or_options_t *options,
options->LearnCircuitBuildTimeout = 0;
}
- if (!(options->LearnCircuitBuildTimeout) &&
- options->CircuitBuildTimeout < RECOMMENDED_MIN_CIRCUIT_BUILD_TIMEOUT) {
+ if (options->Tor2webMode && options->UseEntryGuards) {
+ /* tor2web mode clients do not (and should not) use entry guards
+ * in any meaningful way. Further, tor2web mode causes the hidden
+ * service client code to do things which break the path bias
+ * detector, and it's far easier to turn off entry guards (and
+ * thus the path bias detector with it) than to figure out how to
+ * make a piece of code which cannot possibly help tor2web mode
+ * users compatible with tor2web mode.
+ */
+ log_notice(LD_CONFIG,
+ "Tor2WebMode is enabled; disabling UseEntryGuards.");
+ options->UseEntryGuards = 0;
+ }
+
+ if (!(options->UseEntryGuards) &&
+ (options->RendConfigLines != NULL)) {
log_warn(LD_CONFIG,
- "CircuitBuildTimeout is shorter (%d seconds) than recommended "
- "(%d seconds), and LearnCircuitBuildTimeout is disabled. "
+ "UseEntryGuards is disabled, but you have configured one or more "
+ "hidden services on this Tor instance. Your hidden services "
+ "will be very easy to locate using a well-known attack -- see "
+ "http://freehaven.net/anonbib/#hs-attack06 for details.");
+ }
+
+ if (!options->LearnCircuitBuildTimeout && options->CircuitBuildTimeout &&
+ options->CircuitBuildTimeout < RECOMMENDED_MIN_CIRCUIT_BUILD_TIMEOUT) {
+ log_warn(LD_CONFIG,
+ "CircuitBuildTimeout is shorter (%d seconds) than the recommended "
+ "minimum (%d seconds), and LearnCircuitBuildTimeout is disabled. "
"If tor isn't working, raise this value or enable "
"LearnCircuitBuildTimeout.",
options->CircuitBuildTimeout,
RECOMMENDED_MIN_CIRCUIT_BUILD_TIMEOUT );
+ } else if (!options->LearnCircuitBuildTimeout &&
+ !options->CircuitBuildTimeout) {
+ log_notice(LD_CONFIG, "You disabled LearnCircuitBuildTimeout, but didn't "
+ "a CircuitBuildTimeout. I'll pick a plausible default.");
+ }
+
+ if (options->PathBiasNoticeRate > 1.0) {
+ tor_asprintf(msg,
+ "PathBiasNoticeRate is too high. "
+ "It must be between 0 and 1.0");
+ return -1;
+ }
+ if (options->PathBiasWarnRate > 1.0) {
+ tor_asprintf(msg,
+ "PathBiasWarnRate is too high. "
+ "It must be between 0 and 1.0");
+ return -1;
+ }
+ if (options->PathBiasExtremeRate > 1.0) {
+ tor_asprintf(msg,
+ "PathBiasExtremeRate is too high. "
+ "It must be between 0 and 1.0");
+ return -1;
+ }
+ if (options->PathBiasNoticeUseRate > 1.0) {
+ tor_asprintf(msg,
+ "PathBiasNoticeUseRate is too high. "
+ "It must be between 0 and 1.0");
+ return -1;
+ }
+ if (options->PathBiasExtremeUseRate > 1.0) {
+ tor_asprintf(msg,
+ "PathBiasExtremeUseRate is too high. "
+ "It must be between 0 and 1.0");
+ return -1;
}
if (options->MaxCircuitDirtiness < MIN_MAX_CIRCUIT_DIRTINESS) {
@@ -3778,6 +3006,12 @@ options_validate(or_options_t *old_options, or_options_t *options,
options->MaxCircuitDirtiness = MIN_MAX_CIRCUIT_DIRTINESS;
}
+ if (options->MaxCircuitDirtiness > MAX_MAX_CIRCUIT_DIRTINESS) {
+ log_warn(LD_CONFIG, "MaxCircuitDirtiness option is too high; "
+ "setting to %d days.", MAX_MAX_CIRCUIT_DIRTINESS/86400);
+ options->MaxCircuitDirtiness = MAX_MAX_CIRCUIT_DIRTINESS;
+ }
+
if (options->CircuitStreamTimeout &&
options->CircuitStreamTimeout < MIN_CIRCUIT_STREAM_TIMEOUT) {
log_warn(LD_CONFIG, "CircuitStreamTimeout option is too short; "
@@ -3795,6 +3029,11 @@ options_validate(or_options_t *old_options, or_options_t *options,
if (options->KeepalivePeriod < 1)
REJECT("KeepalivePeriod option must be positive.");
+ if (options->PortForwarding && options->Sandbox) {
+ REJECT("PortForwarding is not compatible with Sandbox; at most one can "
+ "be set");
+ }
+
if (ensure_bandwidth_cap(&options->BandwidthRate,
"BandwidthRate", msg) < 0)
return -1;
@@ -3954,14 +3193,14 @@ options_validate(or_options_t *old_options, or_options_t *options,
size_t len;
len = strlen(options->Socks5ProxyUsername);
- if (len < 1 || len > 255)
+ if (len < 1 || len > MAX_SOCKS5_AUTH_FIELD_SIZE)
REJECT("Socks5ProxyUsername must be between 1 and 255 characters.");
if (!options->Socks5ProxyPassword)
REJECT("Socks5ProxyPassword must be included with Socks5ProxyUsername.");
len = strlen(options->Socks5ProxyPassword);
- if (len < 1 || len > 255)
+ if (len < 1 || len > MAX_SOCKS5_AUTH_FIELD_SIZE)
REJECT("Socks5ProxyPassword must be between 1 and 255 characters.");
} else if (options->Socks5ProxyPassword)
REJECT("Socks5ProxyPassword must be included with Socks5ProxyUsername.");
@@ -4021,7 +3260,7 @@ options_validate(or_options_t *old_options, or_options_t *options,
"You should also make sure you aren't listing this bridge's "
"fingerprint in any other MyFamily.");
}
- if (check_nickname_list(options->MyFamily, "MyFamily", msg))
+ if (check_nickname_list(&options->MyFamily, "MyFamily", msg))
return -1;
for (cl = options->NodeFamilies; cl; cl = cl->next) {
routerset_t *rs = routerset_new();
@@ -4035,34 +3274,64 @@ options_validate(or_options_t *old_options, or_options_t *options,
if (validate_addr_policies(options, msg) < 0)
return -1;
- if (validate_dir_authorities(options, old_options) < 0)
- REJECT("Directory authority line did not parse. See logs for details.");
+ if (validate_dir_servers(options, old_options) < 0)
+ REJECT("Directory authority/fallback line did not parse. See logs "
+ "for details.");
if (options->UseBridges && !options->Bridges)
REJECT("If you set UseBridges, you must specify at least one bridge.");
- if (options->UseBridges && !options->TunnelDirConns)
- REJECT("If you set UseBridges, you must set TunnelDirConns.");
for (cl = options->Bridges; cl; cl = cl->next) {
- if (parse_bridge_line(cl->value, 1)<0)
- REJECT("Bridge line did not parse. See logs for details.");
+ bridge_line_t *bridge_line = parse_bridge_line(cl->value);
+ if (!bridge_line)
+ REJECT("Bridge line did not parse. See logs for details.");
+ bridge_line_free(bridge_line);
}
for (cl = options->ClientTransportPlugin; cl; cl = cl->next) {
- if (parse_client_transport_line(cl->value, 1)<0)
- REJECT("Transport line did not parse. See logs for details.");
+ if (parse_client_transport_line(options, cl->value, 1)<0)
+ REJECT("Invalid client transport line. See logs for details.");
}
for (cl = options->ServerTransportPlugin; cl; cl = cl->next) {
- if (parse_server_transport_line(cl->value, 1)<0)
- REJECT("Server transport line did not parse. See logs for details.");
+ if (parse_server_transport_line(options, cl->value, 1)<0)
+ REJECT("Invalid server transport line. See logs for details.");
}
if (options->ServerTransportPlugin && !server_mode(options)) {
log_notice(LD_GENERAL, "Tor is not configured as a relay but you specified"
" a ServerTransportPlugin line (%s). The ServerTransportPlugin "
"line will be ignored.",
- esc_for_log(options->ServerTransportPlugin->value));
+ escaped(options->ServerTransportPlugin->value));
+ }
+
+ for (cl = options->ServerTransportListenAddr; cl; cl = cl->next) {
+ /** If get_bindaddr_from_transport_listen_line() fails with
+ 'transport' being NULL, it means that something went wrong
+ while parsing the ServerTransportListenAddr line. */
+ char *bindaddr = get_bindaddr_from_transport_listen_line(cl->value, NULL);
+ if (!bindaddr)
+ REJECT("ServerTransportListenAddr did not parse. See logs for details.");
+ tor_free(bindaddr);
+ }
+
+ if (options->ServerTransportListenAddr && !options->ServerTransportPlugin) {
+ log_notice(LD_GENERAL, "You need at least a single managed-proxy to "
+ "specify a transport listen address. The "
+ "ServerTransportListenAddr line will be ignored.");
+ }
+
+ for (cl = options->ServerTransportOptions; cl; cl = cl->next) {
+ /** If get_options_from_transport_options_line() fails with
+ 'transport' being NULL, it means that something went wrong
+ while parsing the ServerTransportOptions line. */
+ smartlist_t *options_sl =
+ get_options_from_transport_options_line(cl->value, NULL);
+ if (!options_sl)
+ REJECT("ServerTransportOptions did not parse. See logs for details.");
+
+ SMARTLIST_FOREACH(options_sl, char *, cp, tor_free(cp));
+ smartlist_free(options_sl);
}
if (options->ConstrainedSockets) {
@@ -4116,17 +3385,12 @@ options_validate(or_options_t *old_options, or_options_t *options,
REJECT("Failed to configure client authorization for hidden services. "
"See logs for details.");
- if (parse_virtual_addr_network(options->VirtualAddrNetwork, 1, NULL)<0)
+ if (parse_virtual_addr_network(options->VirtualAddrNetworkIPv4,
+ AF_INET, 1, msg)<0)
+ return -1;
+ if (parse_virtual_addr_network(options->VirtualAddrNetworkIPv6,
+ AF_INET6, 1, msg)<0)
return -1;
-
- if (options->PreferTunneledDirConns && !options->TunnelDirConns)
- REJECT("Must set TunnelDirConns if PreferTunneledDirConns is set.");
-
- if ((options->Socks4Proxy || options->Socks5Proxy) &&
- !options->HTTPProxy && !options->PreferTunneledDirConns)
- REJECT("When Socks4Proxy or Socks5Proxy is configured, "
- "PreferTunneledDirConns and TunnelDirConns must both be "
- "set to 1, or HTTPProxy must be configured.");
if (options->AutomapHostsSuffixes) {
SMARTLIST_FOREACH(options->AutomapHostsSuffixes, char *, suf,
@@ -4138,50 +3402,61 @@ options_validate(or_options_t *old_options, or_options_t *options,
}
if (options->TestingTorNetwork &&
- !(options->DirServers ||
+ !(options->DirAuthorities ||
(options->AlternateDirAuthority &&
options->AlternateBridgeAuthority))) {
REJECT("TestingTorNetwork may only be configured in combination with "
- "a non-default set of DirServer or both of AlternateDirAuthority "
- "and AlternateBridgeAuthority configured.");
+ "a non-default set of DirAuthority or both of "
+ "AlternateDirAuthority and AlternateBridgeAuthority configured.");
}
- if (options->AllowSingleHopExits && !options->DirServers) {
+ if (options->AllowSingleHopExits && !options->DirAuthorities) {
COMPLAIN("You have set AllowSingleHopExits; now your relay will allow "
"others to make one-hop exits. However, since by default most "
"clients avoid relays that set this option, most clients will "
"ignore you.");
}
- /*XXXX checking for defaults manually like this is a bit fragile.*/
-
- /* Keep changes to hard-coded values synchronous to man page and default
- * values table. */
- if (options->TestingV3AuthInitialVotingInterval != 30*60 &&
- !options->TestingTorNetwork && !options->_UsingTestNetworkDefaults) {
- REJECT("TestingV3AuthInitialVotingInterval may only be changed in testing "
- "Tor networks!");
- } else if (options->TestingV3AuthInitialVotingInterval < MIN_VOTE_INTERVAL) {
+#define CHECK_DEFAULT(arg) \
+ STMT_BEGIN \
+ if (!options->TestingTorNetwork && \
+ !options->UsingTestNetworkDefaults_ && \
+ !config_is_same(&options_format,options, \
+ default_options,#arg)) { \
+ REJECT(#arg " may only be changed in testing Tor " \
+ "networks!"); \
+ } STMT_END
+ CHECK_DEFAULT(TestingV3AuthInitialVotingInterval);
+ CHECK_DEFAULT(TestingV3AuthInitialVoteDelay);
+ CHECK_DEFAULT(TestingV3AuthInitialDistDelay);
+ CHECK_DEFAULT(TestingV3AuthVotingStartOffset);
+ CHECK_DEFAULT(TestingAuthDirTimeToLearnReachability);
+ CHECK_DEFAULT(TestingEstimatedDescriptorPropagationTime);
+ CHECK_DEFAULT(TestingServerDownloadSchedule);
+ CHECK_DEFAULT(TestingClientDownloadSchedule);
+ CHECK_DEFAULT(TestingServerConsensusDownloadSchedule);
+ CHECK_DEFAULT(TestingClientConsensusDownloadSchedule);
+ CHECK_DEFAULT(TestingBridgeDownloadSchedule);
+ CHECK_DEFAULT(TestingClientMaxIntervalWithoutRequest);
+ CHECK_DEFAULT(TestingDirConnectionMaxStall);
+ CHECK_DEFAULT(TestingConsensusMaxDownloadTries);
+ CHECK_DEFAULT(TestingDescriptorMaxDownloadTries);
+ CHECK_DEFAULT(TestingMicrodescMaxDownloadTries);
+ CHECK_DEFAULT(TestingCertMaxDownloadTries);
+#undef CHECK_DEFAULT
+
+ if (options->TestingV3AuthInitialVotingInterval < MIN_VOTE_INTERVAL) {
REJECT("TestingV3AuthInitialVotingInterval is insanely low.");
} else if (((30*60) % options->TestingV3AuthInitialVotingInterval) != 0) {
REJECT("TestingV3AuthInitialVotingInterval does not divide evenly into "
"30 minutes.");
}
- if (options->TestingV3AuthInitialVoteDelay != 5*60 &&
- !options->TestingTorNetwork && !options->_UsingTestNetworkDefaults) {
-
- REJECT("TestingV3AuthInitialVoteDelay may only be changed in testing "
- "Tor networks!");
- } else if (options->TestingV3AuthInitialVoteDelay < MIN_VOTE_SECONDS) {
+ if (options->TestingV3AuthInitialVoteDelay < MIN_VOTE_SECONDS) {
REJECT("TestingV3AuthInitialVoteDelay is way too low.");
}
- if (options->TestingV3AuthInitialDistDelay != 5*60 &&
- !options->TestingTorNetwork && !options->_UsingTestNetworkDefaults) {
- REJECT("TestingV3AuthInitialDistDelay may only be changed in testing "
- "Tor networks!");
- } else if (options->TestingV3AuthInitialDistDelay < MIN_DIST_SECONDS) {
+ if (options->TestingV3AuthInitialDistDelay < MIN_DIST_SECONDS) {
REJECT("TestingV3AuthInitialDistDelay is way too low.");
}
@@ -4192,26 +3467,79 @@ options_validate(or_options_t *old_options, or_options_t *options,
"must be less than half TestingV3AuthInitialVotingInterval");
}
- if (options->TestingAuthDirTimeToLearnReachability != 30*60 &&
- !options->TestingTorNetwork && !options->_UsingTestNetworkDefaults) {
- REJECT("TestingAuthDirTimeToLearnReachability may only be changed in "
- "testing Tor networks!");
- } else if (options->TestingAuthDirTimeToLearnReachability < 0) {
+ if (options->TestingV3AuthVotingStartOffset >
+ MIN(options->TestingV3AuthInitialVotingInterval,
+ options->V3AuthVotingInterval)) {
+ REJECT("TestingV3AuthVotingStartOffset is higher than the voting "
+ "interval.");
+ }
+
+ if (options->TestingAuthDirTimeToLearnReachability < 0) {
REJECT("TestingAuthDirTimeToLearnReachability must be non-negative.");
} else if (options->TestingAuthDirTimeToLearnReachability > 2*60*60) {
COMPLAIN("TestingAuthDirTimeToLearnReachability is insanely high.");
}
- if (options->TestingEstimatedDescriptorPropagationTime != 10*60 &&
- !options->TestingTorNetwork && !options->_UsingTestNetworkDefaults) {
- REJECT("TestingEstimatedDescriptorPropagationTime may only be changed in "
- "testing Tor networks!");
- } else if (options->TestingEstimatedDescriptorPropagationTime < 0) {
+ if (options->TestingEstimatedDescriptorPropagationTime < 0) {
REJECT("TestingEstimatedDescriptorPropagationTime must be non-negative.");
} else if (options->TestingEstimatedDescriptorPropagationTime > 60*60) {
COMPLAIN("TestingEstimatedDescriptorPropagationTime is insanely high.");
}
+ if (options->TestingClientMaxIntervalWithoutRequest < 1) {
+ REJECT("TestingClientMaxIntervalWithoutRequest is way too low.");
+ } else if (options->TestingClientMaxIntervalWithoutRequest > 3600) {
+ COMPLAIN("TestingClientMaxIntervalWithoutRequest is insanely high.");
+ }
+
+ if (options->TestingDirConnectionMaxStall < 5) {
+ REJECT("TestingDirConnectionMaxStall is way too low.");
+ } else if (options->TestingDirConnectionMaxStall > 3600) {
+ COMPLAIN("TestingDirConnectionMaxStall is insanely high.");
+ }
+
+ if (options->TestingConsensusMaxDownloadTries < 2) {
+ REJECT("TestingConsensusMaxDownloadTries must be greater than 1.");
+ } else if (options->TestingConsensusMaxDownloadTries > 800) {
+ COMPLAIN("TestingConsensusMaxDownloadTries is insanely high.");
+ }
+
+ if (options->TestingDescriptorMaxDownloadTries < 2) {
+ REJECT("TestingDescriptorMaxDownloadTries must be greater than 1.");
+ } else if (options->TestingDescriptorMaxDownloadTries > 800) {
+ COMPLAIN("TestingDescriptorMaxDownloadTries is insanely high.");
+ }
+
+ if (options->TestingMicrodescMaxDownloadTries < 2) {
+ REJECT("TestingMicrodescMaxDownloadTries must be greater than 1.");
+ } else if (options->TestingMicrodescMaxDownloadTries > 800) {
+ COMPLAIN("TestingMicrodescMaxDownloadTries is insanely high.");
+ }
+
+ if (options->TestingCertMaxDownloadTries < 2) {
+ REJECT("TestingCertMaxDownloadTries must be greater than 1.");
+ } else if (options->TestingCertMaxDownloadTries > 800) {
+ COMPLAIN("TestingCertMaxDownloadTries is insanely high.");
+ }
+
+ if (options->TestingEnableConnBwEvent &&
+ !options->TestingTorNetwork && !options->UsingTestNetworkDefaults_) {
+ REJECT("TestingEnableConnBwEvent may only be changed in testing "
+ "Tor networks!");
+ }
+
+ if (options->TestingEnableCellStatsEvent &&
+ !options->TestingTorNetwork && !options->UsingTestNetworkDefaults_) {
+ REJECT("TestingEnableCellStatsEvent may only be changed in testing "
+ "Tor networks!");
+ }
+
+ if (options->TestingEnableTbEmptyEvent &&
+ !options->TestingTorNetwork && !options->UsingTestNetworkDefaults_) {
+ REJECT("TestingEnableTbEmptyEvent may only be changed in testing "
+ "Tor networks!");
+ }
+
if (options->TestingTorNetwork) {
log_warn(LD_CONFIG, "TestingTorNetwork is set. This will make your node "
"almost unusable in the public Tor network, and is "
@@ -4245,6 +3573,68 @@ options_validate(or_options_t *old_options, or_options_t *options,
#undef COMPLAIN
}
+/* Given the value that the user has set for MaxMemInQueues, compute the
+ * actual maximum value. We clip this value if it's too low, and autodetect
+ * it if it's set to 0. */
+static uint64_t
+compute_real_max_mem_in_queues(const uint64_t val, int log_guess)
+{
+ uint64_t result;
+
+ if (val == 0) {
+#define ONE_GIGABYTE (U64_LITERAL(1) << 30)
+#define ONE_MEGABYTE (U64_LITERAL(1) << 20)
+#if SIZEOF_VOID_P >= 8
+#define MAX_DEFAULT_MAXMEM (8*ONE_GIGABYTE)
+#else
+#define MAX_DEFAULT_MAXMEM (2*ONE_GIGABYTE)
+#endif
+ /* The user didn't pick a memory limit. Choose a very large one
+ * that is still smaller than the system memory */
+ static int notice_sent = 0;
+ size_t ram = 0;
+ if (get_total_system_memory(&ram) < 0) {
+ /* We couldn't determine our total system memory! */
+#if SIZEOF_VOID_P >= 8
+ /* 64-bit system. Let's hope for 8 GB. */
+ result = 8 * ONE_GIGABYTE;
+#else
+ /* (presumably) 32-bit system. Let's hope for 1 GB. */
+ result = ONE_GIGABYTE;
+#endif
+ } else {
+ /* We detected it, so let's pick 3/4 of the total RAM as our limit. */
+ const uint64_t avail = (ram / 4) * 3;
+
+ /* Make sure it's in range from 0.25 GB to 8 GB. */
+ if (avail > MAX_DEFAULT_MAXMEM) {
+ /* If you want to use more than this much RAM, you need to configure
+ it yourself */
+ result = MAX_DEFAULT_MAXMEM;
+ } else if (avail < ONE_GIGABYTE / 4) {
+ result = ONE_GIGABYTE / 4;
+ } else {
+ result = avail;
+ }
+ }
+ if (log_guess && ! notice_sent) {
+ log_notice(LD_CONFIG, "%sMaxMemInQueues is set to "U64_FORMAT" MB. "
+ "You can override this by setting MaxMemInQueues by hand.",
+ ram ? "Based on detected system memory, " : "",
+ U64_PRINTF_ARG(result / ONE_MEGABYTE));
+ notice_sent = 1;
+ }
+ return result;
+ } else if (val < ONE_GIGABYTE / 4) {
+ log_warn(LD_CONFIG, "MaxMemInQueues must be at least 256 MB for now. "
+ "Ideally, have it as large as you can afford.");
+ return ONE_GIGABYTE / 4;
+ } else {
+ /* The value was fine all along */
+ return val;
+ }
+}
+
/** Helper: return true iff s1 and s2 are both NULL, or both non-NULL
* equal strings. */
static int
@@ -4273,6 +3663,12 @@ options_transition_allowed(const or_options_t *old,
return -1;
}
+ if (old->Sandbox != new_val->Sandbox) {
+ *msg = tor_strdup("While Tor is running, changing Sandbox "
+ "is not allowed.");
+ return -1;
+ }
+
if (strcmp(old->DataDirectory,new_val->DataDirectory)!=0) {
tor_asprintf(msg,
"While Tor is running, changing DataDirectory "
@@ -4325,6 +3721,38 @@ options_transition_allowed(const or_options_t *old,
return -1;
}
+ if (sandbox_is_active()) {
+#define SB_NOCHANGE_STR(opt) \
+ do { \
+ if (! opt_streq(old->opt, new_val->opt)) { \
+ *msg = tor_strdup("Can't change " #opt " while Sandbox is active"); \
+ return -1; \
+ } \
+ } while (0)
+
+ SB_NOCHANGE_STR(PidFile);
+ SB_NOCHANGE_STR(ServerDNSResolvConfFile);
+ SB_NOCHANGE_STR(DirPortFrontPage);
+ SB_NOCHANGE_STR(CookieAuthFile);
+ SB_NOCHANGE_STR(ExtORPortCookieAuthFile);
+
+#undef SB_NOCHANGE_STR
+
+ if (! config_lines_eq(old->Logs, new_val->Logs)) {
+ *msg = tor_strdup("Can't change Logs while Sandbox is active");
+ return -1;
+ }
+ if (old->ConnLimit != new_val->ConnLimit) {
+ *msg = tor_strdup("Can't change ConnLimit while Sandbox is active");
+ return -1;
+ }
+ if (server_mode(old) != server_mode(new_val)) {
+ *msg = tor_strdup("Can't start/stop being a server while "
+ "Sandbox is active");
+ return -1;
+ }
+ }
+
return 0;
}
@@ -4339,7 +3767,7 @@ options_transition_affects_workers(const or_options_t *old_options,
!config_lines_eq(old_options->ORPort_lines, new_options->ORPort_lines) ||
old_options->ServerDNSSearchDomains !=
new_options->ServerDNSSearchDomains ||
- old_options->_SafeLogging != new_options->_SafeLogging ||
+ old_options->SafeLogging_ != new_options->SafeLogging_ ||
old_options->ClientOnly != new_options->ClientOnly ||
public_server_mode(old_options) != public_server_mode(new_options) ||
!config_lines_eq(old_options->Logs, new_options->Logs) ||
@@ -4366,14 +3794,15 @@ options_transition_affects_descriptor(const or_options_t *old_options,
!config_lines_eq(old_options->ExitPolicy,new_options->ExitPolicy) ||
old_options->ExitPolicyRejectPrivate !=
new_options->ExitPolicyRejectPrivate ||
+ old_options->IPv6Exit != new_options->IPv6Exit ||
!config_lines_eq(old_options->ORPort_lines,
new_options->ORPort_lines) ||
!config_lines_eq(old_options->DirPort_lines,
new_options->DirPort_lines) ||
old_options->ClientOnly != new_options->ClientOnly ||
old_options->DisableNetwork != new_options->DisableNetwork ||
- old_options->_PublishServerDescriptor !=
- new_options->_PublishServerDescriptor ||
+ old_options->PublishServerDescriptor_ !=
+ new_options->PublishServerDescriptor_ ||
get_effective_bwrate(old_options) != get_effective_bwrate(new_options) ||
get_effective_bwburst(old_options) !=
get_effective_bwburst(new_options) ||
@@ -4469,31 +3898,63 @@ get_default_conf_file(int defaults_file)
}
/** Verify whether lst is a string containing valid-looking comma-separated
- * nicknames, or NULL. Return 0 on success. Warn and return -1 on failure.
+ * nicknames, or NULL. Will normalise <b>lst</b> to prefix '$' to any nickname
+ * or fingerprint that needs it. Return 0 on success.
+ * Warn and return -1 on failure.
*/
static int
-check_nickname_list(const char *lst, const char *name, char **msg)
+check_nickname_list(char **lst, const char *name, char **msg)
{
int r = 0;
smartlist_t *sl;
+ int changes = 0;
- if (!lst)
+ if (!*lst)
return 0;
sl = smartlist_new();
- smartlist_split_string(sl, lst, ",",
+ smartlist_split_string(sl, *lst, ",",
SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK|SPLIT_STRIP_SPACE, 0);
- SMARTLIST_FOREACH(sl, const char *, s,
+ SMARTLIST_FOREACH_BEGIN(sl, char *, s)
{
if (!is_legal_nickname_or_hexdigest(s)) {
+ // check if first char is dollar
+ if (s[0] != '$') {
+ // Try again but with a dollar symbol prepended
+ char *prepended;
+ tor_asprintf(&prepended, "$%s", s);
+
+ if (is_legal_nickname_or_hexdigest(prepended)) {
+ // The nickname is valid when it's prepended, swap the current
+ // version with a prepended one
+ tor_free(s);
+ SMARTLIST_REPLACE_CURRENT(sl, s, prepended);
+ changes = 1;
+ continue;
+ }
+
+ // Still not valid, free and fallback to error message
+ tor_free(prepended);
+ }
+
tor_asprintf(msg, "Invalid nickname '%s' in %s line", s, name);
r = -1;
break;
}
- });
+ }
+ SMARTLIST_FOREACH_END(s);
+
+ // Replace the caller's nickname list with a fixed one
+ if (changes && r == 0) {
+ char *newNicknames = smartlist_join_strings(sl, ", ", 0, NULL);
+ tor_free(*lst);
+ *lst = newNicknames;
+ }
+
SMARTLIST_FOREACH(sl, char *, s, tor_free(s));
smartlist_free(sl);
+
return r;
}
@@ -4509,26 +3970,26 @@ check_nickname_list(const char *lst, const char *name, char **msg)
* filename if it doesn't exist.
*/
static char *
-find_torrc_filename(int argc, char **argv,
+find_torrc_filename(config_line_t *cmd_arg,
int defaults_file,
int *using_default_fname, int *ignore_missing_torrc)
{
char *fname=NULL;
- int i;
+ config_line_t *p_index;
const char *fname_opt = defaults_file ? "--defaults-torrc" : "-f";
const char *ignore_opt = defaults_file ? NULL : "--ignore-missing-torrc";
if (defaults_file)
*ignore_missing_torrc = 1;
- for (i = 1; i < argc; ++i) {
- if (i < argc-1 && !strcmp(argv[i],fname_opt)) {
+ for (p_index = cmd_arg; p_index; p_index = p_index->next) {
+ if (!strcmp(p_index->key, fname_opt)) {
if (fname) {
- log(LOG_WARN, LD_CONFIG, "Duplicate %s options on command line.",
+ log_warn(LD_CONFIG, "Duplicate %s options on command line.",
fname_opt);
tor_free(fname);
}
- fname = expand_filename(argv[i+1]);
+ fname = expand_filename(p_index->value);
{
char *absfname;
@@ -4538,8 +3999,7 @@ find_torrc_filename(int argc, char **argv,
}
*using_default_fname = 0;
- ++i;
- } else if (ignore_opt && !strcmp(argv[i],ignore_opt)) {
+ } else if (ignore_opt && !strcmp(p_index->key,ignore_opt)) {
*ignore_missing_torrc = 1;
}
}
@@ -4576,7 +4036,7 @@ find_torrc_filename(int argc, char **argv,
* Return the contents of the file on success, and NULL on failure.
*/
static char *
-load_torrc_from_disk(int argc, char **argv, int defaults_file)
+load_torrc_from_disk(config_line_t *cmd_arg, int defaults_file)
{
char *fname=NULL;
char *cf = NULL;
@@ -4584,10 +4044,10 @@ load_torrc_from_disk(int argc, char **argv, int defaults_file)
int ignore_missing_torrc = 0;
char **fname_var = defaults_file ? &torrc_defaults_fname : &torrc_fname;
- fname = find_torrc_filename(argc, argv, defaults_file,
+ fname = find_torrc_filename(cmd_arg, defaults_file,
&using_default_torrc, &ignore_missing_torrc);
tor_assert(fname);
- log(LOG_DEBUG, LD_CONFIG, "Opening config file \"%s\"", fname);
+ log_debug(LD_CONFIG, "Opening config file \"%s\"", fname);
tor_free(*fname_var);
*fname_var = fname;
@@ -4597,18 +4057,18 @@ load_torrc_from_disk(int argc, char **argv, int defaults_file)
!(cf = read_file_to_str(fname,0,NULL))) {
if (using_default_torrc == 1 || ignore_missing_torrc) {
if (!defaults_file)
- log(LOG_NOTICE, LD_CONFIG, "Configuration file \"%s\" not present, "
+ log_notice(LD_CONFIG, "Configuration file \"%s\" not present, "
"using reasonable defaults.", fname);
tor_free(fname); /* sets fname to NULL */
*fname_var = NULL;
cf = tor_strdup("");
} else {
- log(LOG_WARN, LD_CONFIG,
+ log_warn(LD_CONFIG,
"Unable to open configuration file \"%s\".", fname);
goto err;
}
} else {
- log(LOG_NOTICE, LD_CONFIG, "Read configuration file \"%s\".", fname);
+ log_notice(LD_CONFIG, "Read configuration file \"%s\".", fname);
}
return cf;
@@ -4626,70 +4086,92 @@ int
options_init_from_torrc(int argc, char **argv)
{
char *cf=NULL, *cf_defaults=NULL;
- int i, command;
+ int command;
int retval = -1;
- static char **backup_argv;
- static int backup_argc;
char *command_arg = NULL;
char *errmsg=NULL;
+ config_line_t *p_index = NULL;
+ config_line_t *cmdline_only_options = NULL;
- if (argv) { /* first time we're called. save command line args */
- backup_argv = argv;
- backup_argc = argc;
- } else { /* we're reloading. need to clean up old options first. */
- argv = backup_argv;
- argc = backup_argc;
+ /* Go through command-line variables */
+ if (! have_parsed_cmdline) {
+ /* Or we could redo the list every time we pass this place.
+ * It does not really matter */
+ if (config_parse_commandline(argc, argv, 0, &global_cmdline_options,
+ &global_cmdline_only_options) < 0) {
+ goto err;
+ }
+ have_parsed_cmdline = 1;
}
- if (argc > 1 && (!strcmp(argv[1], "-h") || !strcmp(argv[1],"--help"))) {
+ cmdline_only_options = global_cmdline_only_options;
+
+ if (config_line_find(cmdline_only_options, "-h") ||
+ config_line_find(cmdline_only_options, "--help")) {
print_usage();
exit(0);
}
- if (argc > 1 && !strcmp(argv[1], "--list-torrc-options")) {
+ if (config_line_find(cmdline_only_options, "--list-torrc-options")) {
/* For documenting validating whether we've documented everything. */
list_torrc_options();
exit(0);
}
- if (argc > 1 && (!strcmp(argv[1],"--version"))) {
+ if (config_line_find(cmdline_only_options, "--version")) {
printf("Tor version %s.\n",get_version());
exit(0);
}
- if (argc > 1 && (!strcmp(argv[1],"--digests"))) {
+
+ if (config_line_find(cmdline_only_options, "--digests")) {
printf("Tor version %s.\n",get_version());
printf("%s", libor_get_digests());
printf("%s", tor_get_digests());
exit(0);
}
- /* Go through command-line variables */
- if (!global_cmdline_options) {
- /* Or we could redo the list every time we pass this place.
- * It does not really matter */
- if (config_get_commandlines(argc, argv, &global_cmdline_options) < 0) {
- goto err;
- }
+ if (config_line_find(cmdline_only_options, "--library-versions")) {
+ printf("Tor version %s. \n", get_version());
+ printf("Library versions\tCompiled\t\tRuntime\n");
+ printf("Libevent\t\t%-15s\t\t%s\n",
+ tor_libevent_get_header_version_str(),
+ tor_libevent_get_version_str());
+ printf("OpenSSL \t\t%-15s\t\t%s\n",
+ crypto_openssl_get_header_version_str(),
+ crypto_openssl_get_version_str());
+ printf("Zlib \t\t%-15s\t\t%s\n",
+ tor_zlib_get_header_version_str(),
+ tor_zlib_get_version_str());
+ //TODO: Hex versions?
+ exit(0);
}
command = CMD_RUN_TOR;
- for (i = 1; i < argc; ++i) {
- if (!strcmp(argv[i],"--list-fingerprint")) {
+ for (p_index = cmdline_only_options; p_index; p_index = p_index->next) {
+ if (!strcmp(p_index->key,"--list-fingerprint")) {
command = CMD_LIST_FINGERPRINT;
- } else if (!strcmp(argv[i],"--hash-password")) {
+ } else if (!strcmp(p_index->key, "--hash-password")) {
command = CMD_HASH_PASSWORD;
- command_arg = tor_strdup( (i < argc-1) ? argv[i+1] : "");
- ++i;
- } else if (!strcmp(argv[i],"--verify-config")) {
+ command_arg = p_index->value;
+ } else if (!strcmp(p_index->key, "--dump-config")) {
+ command = CMD_DUMP_CONFIG;
+ command_arg = p_index->value;
+ } else if (!strcmp(p_index->key, "--verify-config")) {
command = CMD_VERIFY_CONFIG;
}
}
if (command == CMD_HASH_PASSWORD) {
+ cf_defaults = tor_strdup("");
cf = tor_strdup("");
} else {
- cf_defaults = load_torrc_from_disk(argc, argv, 1);
- cf = load_torrc_from_disk(argc, argv, 0);
- if (!cf)
- goto err;
+ cf_defaults = load_torrc_from_disk(cmdline_only_options, 1);
+ cf = load_torrc_from_disk(cmdline_only_options, 0);
+ if (!cf) {
+ if (config_line_find(cmdline_only_options, "--allow-missing-torrc")) {
+ cf = tor_strdup("");
+ } else {
+ goto err;
+ }
+ }
}
retval = options_init_from_string(cf_defaults, cf, command, command_arg,
@@ -4700,7 +4182,7 @@ options_init_from_torrc(int argc, char **argv)
tor_free(cf);
tor_free(cf_defaults);
if (errmsg) {
- log(LOG_WARN,LD_CONFIG,"%s", errmsg);
+ log_warn(LD_CONFIG,"%s", errmsg);
tor_free(errmsg);
}
return retval < 0 ? -1 : 0;
@@ -4730,10 +4212,10 @@ options_init_from_string(const char *cf_defaults, const char *cf,
this is the first time we run*/
newoptions = tor_malloc_zero(sizeof(or_options_t));
- newoptions->_magic = OR_OPTIONS_MAGIC;
+ newoptions->magic_ = OR_OPTIONS_MAGIC;
options_init(newoptions);
newoptions->command = command;
- newoptions->command_arg = command_arg;
+ newoptions->command_arg = command_arg ? tor_strdup(command_arg) : NULL;
for (i = 0; i < 2; ++i) {
const char *body = i==0 ? cf_defaults : cf;
@@ -4752,7 +4234,11 @@ options_init_from_string(const char *cf_defaults, const char *cf,
goto err;
}
if (i==0)
- newdefaultoptions = options_dup(&options_format, newoptions);
+ newdefaultoptions = config_dup(&options_format, newoptions);
+ }
+
+ if (newdefaultoptions == NULL) {
+ newdefaultoptions = config_dup(&options_format, global_default_options);
}
/* Go through command-line variables too */
@@ -4790,10 +4276,10 @@ options_init_from_string(const char *cf_defaults, const char *cf,
config_free(&options_format, newdefaultoptions);
newdefaultoptions = NULL;
newoptions = tor_malloc_zero(sizeof(or_options_t));
- newoptions->_magic = OR_OPTIONS_MAGIC;
+ newoptions->magic_ = OR_OPTIONS_MAGIC;
options_init(newoptions);
newoptions->command = command;
- newoptions->command_arg = command_arg;
+ newoptions->command_arg = command_arg ? tor_strdup(command_arg) : NULL;
/* Assign all options a second time. */
for (i = 0; i < 2; ++i) {
@@ -4813,7 +4299,7 @@ options_init_from_string(const char *cf_defaults, const char *cf,
goto err;
}
if (i==0)
- newdefaultoptions = options_dup(&options_format, newoptions);
+ newdefaultoptions = config_dup(&options_format, newoptions);
}
/* Assign command-line variables a second time too */
retval = config_assign(&options_format, newoptions,
@@ -4825,7 +4311,8 @@ options_init_from_string(const char *cf_defaults, const char *cf,
}
/* Validate newoptions */
- if (options_validate(oldoptions, newoptions, 0, msg) < 0) {
+ if (options_validate(oldoptions, newoptions, newdefaultoptions,
+ 0, msg) < 0) {
err = SETOPT_ERR_PARSE; /*XXX make this a separate return value.*/
goto err;
}
@@ -5082,21 +4569,72 @@ options_init_logs(or_options_t *options, int validate_only)
return ok?0:-1;
}
+/** Given a smartlist of SOCKS arguments to be passed to a transport
+ * proxy in <b>args</b>, validate them and return -1 if they are
+ * corrupted. Return 0 if they seem OK. */
+static int
+validate_transport_socks_arguments(const smartlist_t *args)
+{
+ char *socks_string = NULL;
+ size_t socks_string_len;
+
+ tor_assert(args);
+ tor_assert(smartlist_len(args) > 0);
+
+ SMARTLIST_FOREACH_BEGIN(args, const char *, s) {
+ if (!string_is_key_value(LOG_WARN, s)) { /* items should be k=v items */
+ log_warn(LD_CONFIG, "'%s' is not a k=v item.", s);
+ return -1;
+ }
+ } SMARTLIST_FOREACH_END(s);
+
+ socks_string = pt_stringify_socks_args(args);
+ if (!socks_string)
+ return -1;
+
+ socks_string_len = strlen(socks_string);
+ tor_free(socks_string);
+
+ if (socks_string_len > MAX_SOCKS5_AUTH_SIZE_TOTAL) {
+ log_warn(LD_CONFIG, "SOCKS arguments can't be more than %u bytes (%lu).",
+ MAX_SOCKS5_AUTH_SIZE_TOTAL,
+ (unsigned long) socks_string_len);
+ return -1;
+ }
+
+ return 0;
+}
+
+/** Deallocate a bridge_line_t structure. */
+/* private */ void
+bridge_line_free(bridge_line_t *bridge_line)
+{
+ if (!bridge_line)
+ return;
+
+ if (bridge_line->socks_args) {
+ SMARTLIST_FOREACH(bridge_line->socks_args, char*, s, tor_free(s));
+ smartlist_free(bridge_line->socks_args);
+ }
+ tor_free(bridge_line->transport_name);
+ tor_free(bridge_line);
+}
+
/** Read the contents of a Bridge line from <b>line</b>. Return 0
* if the line is well-formed, and -1 if it isn't. If
* <b>validate_only</b> is 0, and the line is well-formed, then add
- * the bridge described in the line to our internal bridge list. */
-static int
-parse_bridge_line(const char *line, int validate_only)
+ * the bridge described in the line to our internal bridge list.
+ *
+ * Bridge line format:
+ * Bridge [transport] IP:PORT [id-fingerprint] [k=v] [k=v] ...
+ */
+/* private */ bridge_line_t *
+parse_bridge_line(const char *line)
{
smartlist_t *items = NULL;
- int r;
char *addrport=NULL, *fingerprint=NULL;
- char *transport_name=NULL;
- char *field1=NULL;
- tor_addr_t addr;
- uint16_t port = 0;
- char digest[DIGEST_LEN];
+ char *field=NULL;
+ bridge_line_t *bridge_line = tor_malloc_zero(sizeof(bridge_line_t));
items = smartlist_new();
smartlist_split_string(items, line, NULL,
@@ -5106,80 +4644,109 @@ parse_bridge_line(const char *line, int validate_only)
goto err;
}
- /* field1 is either a transport name or addrport */
- field1 = smartlist_get(items, 0);
+ /* first field is either a transport name or addrport */
+ field = smartlist_get(items, 0);
smartlist_del_keeporder(items, 0);
- if (!(strstr(field1, ".") || strstr(field1, ":"))) {
- /* new-style bridge line */
- transport_name = field1;
+ if (string_is_C_identifier(field)) {
+ /* It's a transport name. */
+ bridge_line->transport_name = field;
if (smartlist_len(items) < 1) {
log_warn(LD_CONFIG, "Too few items to Bridge line.");
goto err;
}
- addrport = smartlist_get(items, 0);
+ addrport = smartlist_get(items, 0); /* Next field is addrport then. */
smartlist_del_keeporder(items, 0);
} else {
- addrport = field1;
+ addrport = field;
}
- if (tor_addr_port_lookup(addrport, &addr, &port)<0) {
+ if (tor_addr_port_parse(LOG_INFO, addrport,
+ &bridge_line->addr, &bridge_line->port, 443)<0) {
log_warn(LD_CONFIG, "Error parsing Bridge address '%s'", addrport);
goto err;
}
- if (!port) {
- log_info(LD_CONFIG,
- "Bridge address '%s' has no port; using default port 443.",
- addrport);
- port = 443;
- }
+ /* If transports are enabled, next field could be a fingerprint or a
+ socks argument. If transports are disabled, next field must be
+ a fingerprint. */
if (smartlist_len(items)) {
- fingerprint = smartlist_join_strings(items, "", 0, NULL);
+ if (bridge_line->transport_name) { /* transports enabled: */
+ field = smartlist_get(items, 0);
+ smartlist_del_keeporder(items, 0);
+
+ /* If it's a key=value pair, then it's a SOCKS argument for the
+ transport proxy... */
+ if (string_is_key_value(LOG_DEBUG, field)) {
+ bridge_line->socks_args = smartlist_new();
+ smartlist_add(bridge_line->socks_args, field);
+ } else { /* ...otherwise, it's the bridge fingerprint. */
+ fingerprint = field;
+ }
+
+ } else { /* transports disabled: */
+ fingerprint = smartlist_join_strings(items, "", 0, NULL);
+ }
+ }
+
+ /* Handle fingerprint, if it was provided. */
+ if (fingerprint) {
if (strlen(fingerprint) != HEX_DIGEST_LEN) {
log_warn(LD_CONFIG, "Key digest for Bridge is wrong length.");
goto err;
}
- if (base16_decode(digest, DIGEST_LEN, fingerprint, HEX_DIGEST_LEN)<0) {
+ if (base16_decode(bridge_line->digest, DIGEST_LEN,
+ fingerprint, HEX_DIGEST_LEN)<0) {
log_warn(LD_CONFIG, "Unable to decode Bridge key digest.");
goto err;
}
}
- if (!validate_only) {
- log_debug(LD_DIR, "Bridge at %s:%d (transport: %s) (%s)",
- fmt_addr(&addr), (int)port,
- transport_name ? transport_name : "no transport",
- fingerprint ? fingerprint : "no key listed");
- bridge_add_from_config(&addr, port,
- fingerprint ? digest : NULL, transport_name);
+ /* If we are using transports, any remaining items in the smartlist
+ should be k=v values. */
+ if (bridge_line->transport_name && smartlist_len(items)) {
+ if (!bridge_line->socks_args)
+ bridge_line->socks_args = smartlist_new();
+
+ /* append remaining items of 'items' to 'socks_args' */
+ smartlist_add_all(bridge_line->socks_args, items);
+ smartlist_clear(items);
+
+ tor_assert(smartlist_len(bridge_line->socks_args) > 0);
+ }
+
+ if (bridge_line->socks_args) {
+ if (validate_transport_socks_arguments(bridge_line->socks_args) < 0)
+ goto err;
}
- r = 0;
goto done;
err:
- r = -1;
+ bridge_line_free(bridge_line);
+ bridge_line = NULL;
done:
SMARTLIST_FOREACH(items, char*, s, tor_free(s));
smartlist_free(items);
tor_free(addrport);
- tor_free(transport_name);
tor_free(fingerprint);
- return r;
+
+ return bridge_line;
}
/** Read the contents of a ClientTransportPlugin line from
* <b>line</b>. Return 0 if the line is well-formed, and -1 if it
* isn't.
*
- * If <b>validate_only</b> is 0, and the line is well-formed:
+ * If <b>validate_only</b> is 0, the line is well-formed, and the
+ * transport is needed by some bridge:
* - If it's an external proxy line, add the transport described in the line to
* our internal transport list.
* - If it's a managed proxy line, launch the managed proxy. */
static int
-parse_client_transport_line(const char *line, int validate_only)
+parse_client_transport_line(const or_options_t *options,
+ const char *line, int validate_only)
{
smartlist_t *items = NULL;
int r;
@@ -5196,7 +4763,8 @@ parse_client_transport_line(const char *line, int validate_only)
int is_managed=0;
char **proxy_argv=NULL;
char **tmp=NULL;
- int proxy_argc,i;
+ int proxy_argc, i;
+ int is_useless_proxy=1;
int line_length;
@@ -5218,11 +4786,16 @@ parse_client_transport_line(const char *line, int validate_only)
smartlist_split_string(transport_list, transports, ",",
SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
SMARTLIST_FOREACH_BEGIN(transport_list, const char *, transport_name) {
+ /* validate transport names */
if (!string_is_C_identifier(transport_name)) {
log_warn(LD_CONFIG, "Transport name is not a C identifier (%s).",
transport_name);
goto err;
}
+
+ /* see if we actually need the transports provided by this proxy */
+ if (!validate_only && transport_is_needed(transport_name))
+ is_useless_proxy = 0;
} SMARTLIST_FOREACH_END(transport_name);
/* field2 is either a SOCKS version or "exec" */
@@ -5240,10 +4813,22 @@ parse_client_transport_line(const char *line, int validate_only)
goto err;
}
+ if (is_managed && options->Sandbox) {
+ log_warn(LD_CONFIG, "Managed proxies are not compatible with Sandbox mode."
+ "(ClientTransportPlugin line was %s)", escaped(line));
+ goto err;
+ }
+
if (is_managed) { /* managed */
- if (!validate_only) { /* if we are not just validating, use the
- rest of the line as the argv of the proxy
- to be launched */
+ if (!validate_only && is_useless_proxy) {
+ log_notice(LD_GENERAL, "Pluggable transport proxy (%s) does not provide "
+ "any needed transports and will not be launched.", line);
+ }
+
+ /* If we are not just validating, use the rest of the line as the
+ argv of the proxy to be launched. Also, make sure that we are
+ only launching proxies that contribute useful transports. */
+ if (!validate_only && !is_useless_proxy) {
proxy_argc = line_length-2;
tor_assert(proxy_argc > 0);
proxy_argv = tor_malloc_zero(sizeof(char*)*(proxy_argc+1));
@@ -5281,8 +4866,8 @@ parse_client_transport_line(const char *line, int validate_only)
transport_add_from_config(&addr, port, smartlist_get(transport_list, 0),
socks_ver);
- log_info(LD_DIR, "Transport '%s' found at %s:%d",
- transports, fmt_addr(&addr), (int)port);
+ log_info(LD_DIR, "Transport '%s' found at %s",
+ transports, fmt_addrport(&addr, port));
}
}
@@ -5303,13 +4888,165 @@ parse_client_transport_line(const char *line, int validate_only)
return r;
}
+/** Given a ServerTransportListenAddr <b>line</b>, return its
+ * <address:port> string. Return NULL if the line was not
+ * well-formed.
+ *
+ * If <b>transport</b> is set, return NULL if the line is not
+ * referring to <b>transport</b>.
+ *
+ * The returned string is allocated on the heap and it's the
+ * responsibility of the caller to free it. */
+static char *
+get_bindaddr_from_transport_listen_line(const char *line,const char *transport)
+{
+ smartlist_t *items = NULL;
+ const char *parsed_transport = NULL;
+ char *addrport = NULL;
+ tor_addr_t addr;
+ uint16_t port = 0;
+
+ items = smartlist_new();
+ smartlist_split_string(items, line, NULL,
+ SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, -1);
+
+ if (smartlist_len(items) < 2) {
+ log_warn(LD_CONFIG,"Too few arguments on ServerTransportListenAddr line.");
+ goto err;
+ }
+
+ parsed_transport = smartlist_get(items, 0);
+ addrport = tor_strdup(smartlist_get(items, 1));
+
+ /* If 'transport' is given, check if it matches the one on the line */
+ if (transport && strcmp(transport, parsed_transport))
+ goto err;
+
+ /* Validate addrport */
+ if (tor_addr_port_parse(LOG_WARN, addrport, &addr, &port, -1)<0) {
+ log_warn(LD_CONFIG, "Error parsing ServerTransportListenAddr "
+ "address '%s'", addrport);
+ goto err;
+ }
+
+ goto done;
+
+ err:
+ tor_free(addrport);
+ addrport = NULL;
+
+ done:
+ SMARTLIST_FOREACH(items, char*, s, tor_free(s));
+ smartlist_free(items);
+
+ return addrport;
+}
+
+/** Given a ServerTransportOptions <b>line</b>, return a smartlist
+ * with the options. Return NULL if the line was not well-formed.
+ *
+ * If <b>transport</b> is set, return NULL if the line is not
+ * referring to <b>transport</b>.
+ *
+ * The returned smartlist and its strings are allocated on the heap
+ * and it's the responsibility of the caller to free it. */
+smartlist_t *
+get_options_from_transport_options_line(const char *line,const char *transport)
+{
+ smartlist_t *items = smartlist_new();
+ smartlist_t *options = smartlist_new();
+ const char *parsed_transport = NULL;
+
+ smartlist_split_string(items, line, NULL,
+ SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, -1);
+
+ if (smartlist_len(items) < 2) {
+ log_warn(LD_CONFIG,"Too few arguments on ServerTransportOptions line.");
+ goto err;
+ }
+
+ parsed_transport = smartlist_get(items, 0);
+ /* If 'transport' is given, check if it matches the one on the line */
+ if (transport && strcmp(transport, parsed_transport))
+ goto err;
+
+ SMARTLIST_FOREACH_BEGIN(items, const char *, option) {
+ if (option_sl_idx == 0) /* skip the transport field (first field)*/
+ continue;
+
+ /* validate that it's a k=v value */
+ if (!string_is_key_value(LOG_WARN, option)) {
+ log_warn(LD_CONFIG, "%s is not a k=v value.", escaped(option));
+ goto err;
+ }
+
+ /* add it to the options smartlist */
+ smartlist_add(options, tor_strdup(option));
+ log_debug(LD_CONFIG, "Added %s to the list of options", escaped(option));
+ } SMARTLIST_FOREACH_END(option);
+
+ goto done;
+
+ err:
+ SMARTLIST_FOREACH(options, char*, s, tor_free(s));
+ smartlist_free(options);
+ options = NULL;
+
+ done:
+ SMARTLIST_FOREACH(items, char*, s, tor_free(s));
+ smartlist_free(items);
+
+ return options;
+}
+
+/** Given the name of a pluggable transport in <b>transport</b>, check
+ * the configuration file to see if the user has explicitly asked for
+ * it to listen on a specific port. Return a <address:port> string if
+ * so, otherwise NULL. */
+char *
+get_transport_bindaddr_from_config(const char *transport)
+{
+ config_line_t *cl;
+ const or_options_t *options = get_options();
+
+ for (cl = options->ServerTransportListenAddr; cl; cl = cl->next) {
+ char *bindaddr =
+ get_bindaddr_from_transport_listen_line(cl->value, transport);
+ if (bindaddr)
+ return bindaddr;
+ }
+
+ return NULL;
+}
+
+/** Given the name of a pluggable transport in <b>transport</b>, check
+ * the configuration file to see if the user has asked us to pass any
+ * parameters to the pluggable transport. Return a smartlist
+ * containing the parameters, otherwise NULL. */
+smartlist_t *
+get_options_for_server_transport(const char *transport)
+{
+ config_line_t *cl;
+ const or_options_t *options = get_options();
+
+ for (cl = options->ServerTransportOptions; cl; cl = cl->next) {
+ smartlist_t *options_sl =
+ get_options_from_transport_options_line(cl->value, transport);
+ if (options_sl)
+ return options_sl;
+ }
+
+ return NULL;
+}
+
/** Read the contents of a ServerTransportPlugin line from
* <b>line</b>. Return 0 if the line is well-formed, and -1 if it
* isn't.
* If <b>validate_only</b> is 0, the line is well-formed, and it's a
* managed proxy line, launch the managed proxy. */
static int
-parse_server_transport_line(const char *line, int validate_only)
+parse_server_transport_line(const or_options_t *options,
+ const char *line, int validate_only)
{
smartlist_t *items = NULL;
int r;
@@ -5364,6 +5101,12 @@ parse_server_transport_line(const char *line, int validate_only)
goto err;
}
+ if (is_managed && options->Sandbox) {
+ log_warn(LD_CONFIG, "Managed proxies are not compatible with Sandbox mode."
+ "(ServerTransportPlugin line was %s)", escaped(line));
+ goto err;
+ }
+
if (is_managed) { /* managed */
if (!validate_only) {
proxy_argc = line_length-2;
@@ -5401,8 +5144,8 @@ parse_server_transport_line(const char *line, int validate_only)
}
if (!validate_only) {
- log_info(LD_DIR, "Server transport '%s' at %s:%d.",
- transports, fmt_addr(&addr), (int)port);
+ log_info(LD_DIR, "Server transport '%s' at %s.",
+ transports, fmt_addrport(&addr, port));
}
}
@@ -5423,15 +5166,15 @@ parse_server_transport_line(const char *line, int validate_only)
return r;
}
-/** Read the contents of a DirServer line from <b>line</b>. If
+/** Read the contents of a DirAuthority line from <b>line</b>. If
* <b>validate_only</b> is 0, and the line is well-formed, and it
* shares any bits with <b>required_type</b> or <b>required_type</b>
* is 0, then add the dirserver described in the line (minus whatever
* bits it's missing) as a valid authority. Return 0 on success,
* or -1 if the line isn't well-formed or if we can't add it. */
static int
-parse_dir_server_line(const char *line, dirinfo_type_t required_type,
- int validate_only)
+parse_dir_authority_line(const char *line, dirinfo_type_t required_type,
+ int validate_only)
{
smartlist_t *items = NULL;
int r;
@@ -5439,14 +5182,14 @@ parse_dir_server_line(const char *line, dirinfo_type_t required_type,
uint16_t dir_port = 0, or_port = 0;
char digest[DIGEST_LEN];
char v3_digest[DIGEST_LEN];
- dirinfo_type_t type = V2_DIRINFO;
- int is_not_hidserv_authority = 0, is_not_v2_authority = 0;
+ dirinfo_type_t type = 0;
+ double weight = 1.0;
items = smartlist_new();
smartlist_split_string(items, line, NULL,
SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, -1);
if (smartlist_len(items) < 1) {
- log_warn(LD_CONFIG, "No arguments on DirServer line.");
+ log_warn(LD_CONFIG, "No arguments on DirAuthority line.");
goto err;
}
@@ -5459,63 +5202,66 @@ parse_dir_server_line(const char *line, dirinfo_type_t required_type,
char *flag = smartlist_get(items, 0);
if (TOR_ISDIGIT(flag[0]))
break;
- if (!strcasecmp(flag, "v1")) {
- type |= (V1_DIRINFO | HIDSERV_DIRINFO);
- } else if (!strcasecmp(flag, "hs")) {
- type |= HIDSERV_DIRINFO;
- } else if (!strcasecmp(flag, "no-hs")) {
- is_not_hidserv_authority = 1;
+ if (!strcasecmp(flag, "hs") ||
+ !strcasecmp(flag, "no-hs")) {
+ log_warn(LD_CONFIG, "The DirAuthority options 'hs' and 'no-hs' are "
+ "obsolete; you don't need them any more.");
} else if (!strcasecmp(flag, "bridge")) {
type |= BRIDGE_DIRINFO;
} else if (!strcasecmp(flag, "no-v2")) {
- is_not_v2_authority = 1;
+ /* obsolete, but may still be contained in DirAuthority lines generated
+ by various tools */;
} else if (!strcasecmpstart(flag, "orport=")) {
int ok;
char *portstring = flag + strlen("orport=");
or_port = (uint16_t) tor_parse_long(portstring, 10, 1, 65535, &ok, NULL);
if (!ok)
- log_warn(LD_CONFIG, "Invalid orport '%s' on DirServer line.",
+ log_warn(LD_CONFIG, "Invalid orport '%s' on DirAuthority line.",
portstring);
+ } else if (!strcmpstart(flag, "weight=")) {
+ int ok;
+ const char *wstring = flag + strlen("weight=");
+ weight = tor_parse_double(wstring, 0, UINT64_MAX, &ok, NULL);
+ if (!ok) {
+ log_warn(LD_CONFIG, "Invalid weight '%s' on DirAuthority line.",flag);
+ weight=1.0;
+ }
} else if (!strcasecmpstart(flag, "v3ident=")) {
char *idstr = flag + strlen("v3ident=");
if (strlen(idstr) != HEX_DIGEST_LEN ||
base16_decode(v3_digest, DIGEST_LEN, idstr, HEX_DIGEST_LEN)<0) {
- log_warn(LD_CONFIG, "Bad v3 identity digest '%s' on DirServer line",
+ log_warn(LD_CONFIG, "Bad v3 identity digest '%s' on DirAuthority line",
flag);
} else {
type |= V3_DIRINFO|EXTRAINFO_DIRINFO|MICRODESC_DIRINFO;
}
} else {
- log_warn(LD_CONFIG, "Unrecognized flag '%s' on DirServer line",
+ log_warn(LD_CONFIG, "Unrecognized flag '%s' on DirAuthority line",
flag);
}
tor_free(flag);
smartlist_del_keeporder(items, 0);
}
- if (is_not_hidserv_authority)
- type &= ~HIDSERV_DIRINFO;
- if (is_not_v2_authority)
- type &= ~V2_DIRINFO;
if (smartlist_len(items) < 2) {
- log_warn(LD_CONFIG, "Too few arguments to DirServer line.");
+ log_warn(LD_CONFIG, "Too few arguments to DirAuthority line.");
goto err;
}
addrport = smartlist_get(items, 0);
smartlist_del_keeporder(items, 0);
if (addr_port_lookup(LOG_WARN, addrport, &address, NULL, &dir_port)<0) {
- log_warn(LD_CONFIG, "Error parsing DirServer address '%s'", addrport);
+ log_warn(LD_CONFIG, "Error parsing DirAuthority address '%s'", addrport);
goto err;
}
if (!dir_port) {
- log_warn(LD_CONFIG, "Missing port in DirServer address '%s'",addrport);
+ log_warn(LD_CONFIG, "Missing port in DirAuthority address '%s'",addrport);
goto err;
}
fingerprint = smartlist_join_strings(items, "", 0, NULL);
if (strlen(fingerprint) != HEX_DIGEST_LEN) {
- log_warn(LD_CONFIG, "Key digest for DirServer is wrong length %d.",
- (int)strlen(fingerprint));
+ log_warn(LD_CONFIG, "Key digest '%s' for DirAuthority is wrong length %d.",
+ fingerprint, (int)strlen(fingerprint));
goto err;
}
if (!strcmp(fingerprint, "E623F7625FBE0C87820F11EC5F6D5377ED816294")) {
@@ -5527,19 +5273,21 @@ parse_dir_server_line(const char *line, dirinfo_type_t required_type,
goto err;
}
if (base16_decode(digest, DIGEST_LEN, fingerprint, HEX_DIGEST_LEN)<0) {
- log_warn(LD_CONFIG, "Unable to decode DirServer key digest.");
+ log_warn(LD_CONFIG, "Unable to decode DirAuthority key digest.");
goto err;
}
if (!validate_only && (!required_type || required_type & type)) {
+ dir_server_t *ds;
if (required_type)
type &= required_type; /* pare down what we think of them as an
* authority for. */
log_debug(LD_DIR, "Trusted %d dirserver at %s:%d (%s)", (int)type,
address, (int)dir_port, (char*)smartlist_get(items,0));
- if (!add_trusted_dir_server(nickname, address, dir_port, or_port,
- digest, v3_digest, type))
+ if (!(ds = trusted_dir_server_new(nickname, address, dir_port, or_port,
+ digest, v3_digest, type, weight)))
goto err;
+ dir_server_add(ds);
}
r = 0;
@@ -5558,6 +5306,110 @@ parse_dir_server_line(const char *line, dirinfo_type_t required_type,
return r;
}
+/** Read the contents of a FallbackDir line from <b>line</b>. If
+ * <b>validate_only</b> is 0, and the line is well-formed, then add the
+ * dirserver described in the line as a fallback directory. Return 0 on
+ * success, or -1 if the line isn't well-formed or if we can't add it. */
+static int
+parse_dir_fallback_line(const char *line,
+ int validate_only)
+{
+ int r = -1;
+ smartlist_t *items = smartlist_new(), *positional = smartlist_new();
+ int orport = -1;
+ uint16_t dirport;
+ tor_addr_t addr;
+ int ok;
+ char id[DIGEST_LEN];
+ char *address=NULL;
+ double weight=1.0;
+
+ memset(id, 0, sizeof(id));
+ smartlist_split_string(items, line, NULL,
+ SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, -1);
+ SMARTLIST_FOREACH_BEGIN(items, const char *, cp) {
+ const char *eq = strchr(cp, '=');
+ ok = 1;
+ if (! eq) {
+ smartlist_add(positional, (char*)cp);
+ continue;
+ }
+ if (!strcmpstart(cp, "orport=")) {
+ orport = (int)tor_parse_long(cp+strlen("orport="), 10,
+ 1, 65535, &ok, NULL);
+ } else if (!strcmpstart(cp, "id=")) {
+ ok = !base16_decode(id, DIGEST_LEN,
+ cp+strlen("id="), strlen(cp)-strlen("id="));
+ } else if (!strcmpstart(cp, "weight=")) {
+ int ok;
+ const char *wstring = cp + strlen("weight=");
+ weight = tor_parse_double(wstring, 0, UINT64_MAX, &ok, NULL);
+ if (!ok) {
+ log_warn(LD_CONFIG, "Invalid weight '%s' on FallbackDir line.", cp);
+ weight=1.0;
+ }
+ }
+
+ if (!ok) {
+ log_warn(LD_CONFIG, "Bad FallbackDir option %s", escaped(cp));
+ goto end;
+ }
+ } SMARTLIST_FOREACH_END(cp);
+
+ if (smartlist_len(positional) != 1) {
+ log_warn(LD_CONFIG, "Couldn't parse FallbackDir line %s", escaped(line));
+ goto end;
+ }
+
+ if (tor_digest_is_zero(id)) {
+ log_warn(LD_CONFIG, "Missing identity on FallbackDir line");
+ goto end;
+ }
+
+ if (orport <= 0) {
+ log_warn(LD_CONFIG, "Missing orport on FallbackDir line");
+ goto end;
+ }
+
+ if (tor_addr_port_split(LOG_INFO, smartlist_get(positional, 0),
+ &address, &dirport) < 0 ||
+ tor_addr_parse(&addr, address)<0) {
+ log_warn(LD_CONFIG, "Couldn't parse address:port %s on FallbackDir line",
+ (const char*)smartlist_get(positional, 0));
+ goto end;
+ }
+
+ if (!validate_only) {
+ dir_server_t *ds;
+ ds = fallback_dir_server_new(&addr, dirport, orport, id, weight);
+ if (!ds) {
+ log_warn(LD_CONFIG, "Couldn't create FallbackDir %s", escaped(line));
+ goto end;
+ }
+ dir_server_add(ds);
+ }
+
+ r = 0;
+
+ end:
+ SMARTLIST_FOREACH(items, char *, cp, tor_free(cp));
+ smartlist_free(items);
+ smartlist_free(positional);
+ tor_free(address);
+ return r;
+}
+
+/** Allocate and return a new port_cfg_t with reasonable defaults. */
+static port_cfg_t *
+port_cfg_new(void)
+{
+ port_cfg_t *cfg = tor_malloc_zero(sizeof(port_cfg_t));
+ cfg->ipv4_traffic = 1;
+ cfg->cache_ipv4_answers = 1;
+ cfg->prefer_ipv6_virtaddr = 1;
+ return cfg;
+}
+
/** Free all storage held in <b>port</b> */
static void
port_cfg_free(port_cfg_t *port)
@@ -5565,24 +5417,50 @@ port_cfg_free(port_cfg_t *port)
tor_free(port);
}
-/** Warn for every port in <b>ports</b> that is on a publicly routable
- * address. */
+/** Warn for every port in <b>ports</b> of type <b>listener_type</b> that is
+ * on a publicly routable address. */
static void
-warn_nonlocal_client_ports(const smartlist_t *ports, const char *portname)
+warn_nonlocal_client_ports(const smartlist_t *ports, const char *portname,
+ int listener_type)
{
SMARTLIST_FOREACH_BEGIN(ports, const port_cfg_t *, port) {
+ if (port->type != listener_type)
+ continue;
if (port->is_unix_addr) {
/* Unix sockets aren't accessible over a network. */
} else if (!tor_addr_is_internal(&port->addr, 1)) {
- log_warn(LD_CONFIG, "You specified a public address for %sPort. "
+ log_warn(LD_CONFIG, "You specified a public address '%s' for %sPort. "
"Other people on the Internet might find your computer and "
"use it as an open proxy. Please don't allow this unless you "
- "have a good reason.", portname);
+ "have a good reason.",
+ fmt_addrport(&port->addr, port->port), portname);
} else if (!tor_addr_is_loopback(&port->addr)) {
- log_notice(LD_CONFIG, "You configured a non-loopback address for "
- "%sPort. This allows everybody on your local network to use "
- "your machine as a proxy. Make sure this is what you wanted.",
- portname);
+ log_notice(LD_CONFIG, "You configured a non-loopback address '%s' "
+ "for %sPort. This allows everybody on your local network to "
+ "use your machine as a proxy. Make sure this is what you "
+ "wanted.",
+ fmt_addrport(&port->addr, port->port), portname);
+ }
+ } SMARTLIST_FOREACH_END(port);
+}
+
+/** Warn for every Extended ORPort port in <b>ports</b> that is on a
+ * publicly routable address. */
+static void
+warn_nonlocal_ext_orports(const smartlist_t *ports, const char *portname)
+{
+ SMARTLIST_FOREACH_BEGIN(ports, const port_cfg_t *, port) {
+ if (port->type != CONN_TYPE_EXT_OR_LISTENER)
+ continue;
+ if (port->is_unix_addr)
+ continue;
+ /* XXX maybe warn even if address is RFC1918? */
+ if (!tor_addr_is_internal(&port->addr, 1)) {
+ log_warn(LD_CONFIG, "You specified a public address '%s' for %sPort. "
+ "This is not advised; this address is supposed to only be "
+ "exposed on localhost so that your pluggable transport "
+ "proxies can connect to it.",
+ fmt_addrport(&port->addr, port->port), portname);
}
} SMARTLIST_FOREACH_END(port);
}
@@ -5634,6 +5512,7 @@ warn_nonlocal_controller_ports(smartlist_t *ports, unsigned forbid)
#define CL_PORT_ALLOW_EXTRA_LISTENADDR (1u<<2)
#define CL_PORT_SERVER_OPTIONS (1u<<3)
#define CL_PORT_FORBID_NONLOCAL (1u<<4)
+#define CL_PORT_TAKES_HOSTNAMES (1u<<5)
/**
* Parse port configuration for a single port type.
@@ -5666,6 +5545,9 @@ warn_nonlocal_controller_ports(smartlist_t *ports, unsigned forbid)
* isolation options in the FooPort entries; instead allow the
* server-port option set.
*
+ * If CL_PORT_TAKES_HOSTNAMES is set in <b>flags</b>, allow the options
+ * {No,}IPv{4,6}Traffic.
+ *
* On success, if <b>out</b> is given, add a new port_cfg_t entry to
* <b>out</b> for every port that the client should listen on. Return 0
* on success, -1 on failure.
@@ -5683,12 +5565,14 @@ parse_port_config(smartlist_t *out,
smartlist_t *elts;
int retval = -1;
const unsigned is_control = (listener_type == CONN_TYPE_CONTROL_LISTENER);
+ const unsigned is_ext_orport = (listener_type == CONN_TYPE_EXT_OR_LISTENER);
const unsigned allow_no_options = flags & CL_PORT_NO_OPTIONS;
const unsigned use_server_options = flags & CL_PORT_SERVER_OPTIONS;
const unsigned warn_nonlocal = flags & CL_PORT_WARN_NONLOCAL;
const unsigned forbid_nonlocal = flags & CL_PORT_FORBID_NONLOCAL;
const unsigned allow_spurious_listenaddr =
flags & CL_PORT_ALLOW_EXTRA_LISTENADDR;
+ const unsigned takes_hostnames = flags & CL_PORT_TAKES_HOSTNAMES;
int got_zero_port=0, got_nonzero_port=0;
/* FooListenAddress is deprecated; let's make it work like it used to work,
@@ -5725,12 +5609,14 @@ parse_port_config(smartlist_t *out,
if (use_server_options && out) {
/* Add a no_listen port. */
- port_cfg_t *cfg = tor_malloc_zero(sizeof(port_cfg_t));
+ port_cfg_t *cfg = port_cfg_new();
cfg->type = listener_type;
cfg->port = mainport;
tor_addr_make_unspec(&cfg->addr); /* Server ports default to 0.0.0.0 */
cfg->no_listen = 1;
- cfg->ipv4_only = 1;
+ cfg->bind_ipv4_only = 1;
+ cfg->ipv4_traffic = 1;
+ cfg->prefer_ipv6_virtaddr = 1;
smartlist_add(out, cfg);
}
@@ -5743,7 +5629,7 @@ parse_port_config(smartlist_t *out,
return -1;
}
if (out) {
- port_cfg_t *cfg = tor_malloc_zero(sizeof(port_cfg_t));
+ port_cfg_t *cfg = port_cfg_new();
cfg->type = listener_type;
cfg->port = port ? port : mainport;
tor_addr_copy(&cfg->addr, &addr);
@@ -5757,8 +5643,10 @@ parse_port_config(smartlist_t *out,
if (warn_nonlocal && out) {
if (is_control)
warn_nonlocal_controller_ports(out, forbid_nonlocal);
+ else if (is_ext_orport)
+ warn_nonlocal_ext_orports(out, portname);
else
- warn_nonlocal_client_ports(out, portname);
+ warn_nonlocal_client_ports(out, portname, listener_type);
}
return 0;
} /* end if (listenaddrs) */
@@ -5767,7 +5655,7 @@ parse_port_config(smartlist_t *out,
* one. */
if (! ports) {
if (defaultport && out) {
- port_cfg_t *cfg = tor_malloc_zero(sizeof(port_cfg_t));
+ port_cfg_t *cfg = port_cfg_new();
cfg->type = listener_type;
cfg->port = defaultport;
tor_addr_parse(&cfg->addr, defaultaddr);
@@ -5787,12 +5675,17 @@ parse_port_config(smartlist_t *out,
int port;
int sessiongroup = SESSION_GROUP_UNSET;
unsigned isolation = ISO_DEFAULT;
+ int prefer_no_auth = 0;
char *addrport;
uint16_t ptmp=0;
int ok;
int no_listen = 0, no_advertise = 0, all_addrs = 0,
- ipv4_only = 0, ipv6_only = 0;
+ bind_ipv4_only = 0, bind_ipv6_only = 0,
+ ipv4_traffic = 1, ipv6_traffic = 0, prefer_ipv6 = 0,
+ cache_ipv4 = 1, use_cached_ipv4 = 0,
+ cache_ipv6 = 0, use_cached_ipv6 = 0,
+ prefer_ipv6_automap = 1;
smartlist_split_string(elts, ports->value, NULL,
SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
@@ -5857,9 +5750,9 @@ parse_port_config(smartlist_t *out,
all_addrs = 1;
#endif
} else if (!strcasecmp(elt, "IPv4Only")) {
- ipv4_only = 1;
+ bind_ipv4_only = 1;
} else if (!strcasecmp(elt, "IPv6Only")) {
- ipv6_only = 1;
+ bind_ipv6_only = 1;
} else {
log_warn(LD_CONFIG, "Unrecognized %sPort option '%s'",
portname, escaped(elt));
@@ -5872,18 +5765,18 @@ parse_port_config(smartlist_t *out,
portname, escaped(ports->value));
goto err;
}
- if (ipv4_only && ipv6_only) {
+ if (bind_ipv4_only && bind_ipv6_only) {
log_warn(LD_CONFIG, "Tried to set both IPv4Only and IPv6Only "
"on %sPort line '%s'",
portname, escaped(ports->value));
goto err;
}
- if (ipv4_only && tor_addr_family(&addr) == AF_INET6) {
+ if (bind_ipv4_only && tor_addr_family(&addr) == AF_INET6) {
log_warn(LD_CONFIG, "Could not interpret %sPort address as IPv6",
portname);
goto err;
}
- if (ipv6_only && tor_addr_family(&addr) == AF_INET) {
+ if (bind_ipv6_only && tor_addr_family(&addr) == AF_INET) {
log_warn(LD_CONFIG, "Could not interpret %sPort address as IPv4",
portname);
goto err;
@@ -5916,6 +5809,45 @@ parse_port_config(smartlist_t *out,
no = 1;
elt += 2;
}
+
+ if (takes_hostnames) {
+ if (!strcasecmp(elt, "IPv4Traffic")) {
+ ipv4_traffic = ! no;
+ continue;
+ } else if (!strcasecmp(elt, "IPv6Traffic")) {
+ ipv6_traffic = ! no;
+ continue;
+ } else if (!strcasecmp(elt, "PreferIPv6")) {
+ prefer_ipv6 = ! no;
+ continue;
+ }
+ }
+ if (!strcasecmp(elt, "CacheIPv4DNS")) {
+ cache_ipv4 = ! no;
+ continue;
+ } else if (!strcasecmp(elt, "CacheIPv6DNS")) {
+ cache_ipv6 = ! no;
+ continue;
+ } else if (!strcasecmp(elt, "CacheDNS")) {
+ cache_ipv4 = cache_ipv6 = ! no;
+ continue;
+ } else if (!strcasecmp(elt, "UseIPv4Cache")) {
+ use_cached_ipv4 = ! no;
+ continue;
+ } else if (!strcasecmp(elt, "UseIPv6Cache")) {
+ use_cached_ipv6 = ! no;
+ continue;
+ } else if (!strcasecmp(elt, "UseDNSCache")) {
+ use_cached_ipv4 = use_cached_ipv6 = ! no;
+ continue;
+ } else if (!strcasecmp(elt, "PreferIPv6Automap")) {
+ prefer_ipv6_automap = ! no;
+ continue;
+ } else if (!strcasecmp(elt, "PreferSOCKSNoAuth")) {
+ prefer_no_auth = ! no;
+ continue;
+ }
+
if (!strcasecmpend(elt, "s"))
elt[strlen(elt)-1] = '\0'; /* kill plurals. */
@@ -5947,8 +5879,14 @@ parse_port_config(smartlist_t *out,
else
got_zero_port = 1;
+ if (ipv4_traffic == 0 && ipv6_traffic == 0) {
+ log_warn(LD_CONFIG, "You have a %sPort entry with both IPv4 and "
+ "IPv6 disabled; that won't work.", portname);
+ goto err;
+ }
+
if (out && port) {
- port_cfg_t *cfg = tor_malloc_zero(sizeof(port_cfg_t));
+ port_cfg_t *cfg = port_cfg_new();
tor_addr_copy(&cfg->addr, &addr);
cfg->port = port;
cfg->type = listener_type;
@@ -5957,8 +5895,19 @@ parse_port_config(smartlist_t *out,
cfg->no_advertise = no_advertise;
cfg->no_listen = no_listen;
cfg->all_addrs = all_addrs;
- cfg->ipv4_only = ipv4_only;
- cfg->ipv6_only = ipv6_only;
+ cfg->bind_ipv4_only = bind_ipv4_only;
+ cfg->bind_ipv6_only = bind_ipv6_only;
+ cfg->ipv4_traffic = ipv4_traffic;
+ cfg->ipv6_traffic = ipv6_traffic;
+ cfg->prefer_ipv6 = prefer_ipv6;
+ cfg->cache_ipv4_answers = cache_ipv4;
+ cfg->cache_ipv6_answers = cache_ipv6;
+ cfg->use_cached_ipv4_answers = use_cached_ipv4;
+ cfg->use_cached_ipv6_answers = use_cached_ipv6;
+ cfg->prefer_ipv6_virtaddr = prefer_ipv6_automap;
+ cfg->socks_prefer_no_auth = prefer_no_auth;
+ if (! (isolation & ISO_SOCKSAUTH))
+ cfg->socks_prefer_no_auth = 1;
smartlist_add(out, cfg);
}
@@ -5969,8 +5918,10 @@ parse_port_config(smartlist_t *out,
if (warn_nonlocal && out) {
if (is_control)
warn_nonlocal_controller_ports(out, forbid_nonlocal);
+ else if (is_ext_orport)
+ warn_nonlocal_ext_orports(out, portname);
else
- warn_nonlocal_client_ports(out, portname);
+ warn_nonlocal_client_ports(out, portname, listener_type);
}
if (got_zero_port && got_nonzero_port) {
@@ -6051,7 +6002,8 @@ parse_ports(or_options_t *options, int validate_only,
options->SocksPort_lines, options->SocksListenAddress,
"Socks", CONN_TYPE_AP_LISTENER,
"127.0.0.1", 9050,
- CL_PORT_WARN_NONLOCAL|CL_PORT_ALLOW_EXTRA_LISTENADDR) < 0) {
+ CL_PORT_WARN_NONLOCAL|CL_PORT_ALLOW_EXTRA_LISTENADDR|
+ CL_PORT_TAKES_HOSTNAMES) < 0) {
*msg = tor_strdup("Invalid SocksPort/SocksListenAddress configuration");
goto err;
}
@@ -6059,7 +6011,7 @@ parse_ports(or_options_t *options, int validate_only,
options->DNSPort_lines, options->DNSListenAddress,
"DNS", CONN_TYPE_AP_DNS_LISTENER,
"127.0.0.1", 0,
- CL_PORT_WARN_NONLOCAL) < 0) {
+ CL_PORT_WARN_NONLOCAL|CL_PORT_TAKES_HOSTNAMES) < 0) {
*msg = tor_strdup("Invalid DNSPort/DNSListenAddress configuration");
goto err;
}
@@ -6114,6 +6066,14 @@ parse_ports(or_options_t *options, int validate_only,
goto err;
}
if (parse_port_config(ports,
+ options->ExtORPort_lines, NULL,
+ "ExtOR", CONN_TYPE_EXT_OR_LISTENER,
+ "127.0.0.1", 0,
+ CL_PORT_SERVER_OPTIONS|CL_PORT_WARN_NONLOCAL) < 0) {
+ *msg = tor_strdup("Invalid ExtORPort configuration");
+ goto err;
+ }
+ if (parse_port_config(ports,
options->DirPort_lines, options->DirListenAddress,
"Dir", CONN_TYPE_DIR_LISTENER,
"0.0.0.0", 0,
@@ -6148,6 +6108,8 @@ parse_ports(or_options_t *options, int validate_only,
!! count_real_listeners(ports, CONN_TYPE_DIR_LISTENER);
options->DNSPort_set =
!! count_real_listeners(ports, CONN_TYPE_AP_DNS_LISTENER);
+ options->ExtORPort_set =
+ !! count_real_listeners(ports, CONN_TYPE_EXT_OR_LISTENER);
if (!validate_only) {
if (configured_ports) {
@@ -6191,7 +6153,8 @@ check_server_ports(const smartlist_t *ports,
if (! port->no_advertise) {
++n_orport_advertised;
if (tor_addr_family(&port->addr) == AF_INET ||
- (tor_addr_family(&port->addr) == AF_UNSPEC && !port->ipv6_only))
+ (tor_addr_family(&port->addr) == AF_UNSPEC &&
+ !port->bind_ipv6_only))
++n_orport_advertised_ipv4;
}
if (! port->no_listen)
@@ -6200,7 +6163,7 @@ check_server_ports(const smartlist_t *ports,
continue;
}
#ifndef _WIN32
- if (!port->no_advertise && port->port < 1024)
+ if (!port->no_listen && port->port < 1024)
++n_low_port;
#endif
} SMARTLIST_FOREACH_END(port);
@@ -6210,6 +6173,13 @@ check_server_ports(const smartlist_t *ports,
"listening on one.");
r = -1;
}
+ if (n_orport_listeners && !n_orport_advertised) {
+ log_warn(LD_CONFIG, "We are listening on an ORPort, but not advertising "
+ "any ORPorts. This will keep us from building a %s "
+ "descriptor, and make us impossible to use.",
+ options->BridgeRelay ? "bridge" : "router");
+ r = -1;
+ }
if (n_dirport_advertised && !n_dirport_listeners) {
log_warn(LD_CONFIG, "We are advertising a DirPort, but not actually "
"listening on one.");
@@ -6227,7 +6197,7 @@ check_server_ports(const smartlist_t *ports,
}
if (n_low_port && options->AccountingMax) {
- log(LOG_WARN, LD_CONFIG,
+ log_warn(LD_CONFIG,
"You have set AccountingMax to use hibernation. You have also "
"chosen a low DirPort or OrPort. This combination can make Tor stop "
"working when it tries to re-attach the port after a period of "
@@ -6291,7 +6261,8 @@ get_first_listener_addrport_string(int listener_type)
to iterate all listener connections and find out in which
port it ended up listening: */
if (cfg->port == CFG_AUTO_PORT) {
- port = router_get_active_listener_port_by_type(listener_type);
+ port = router_get_active_listener_port_by_type_af(listener_type,
+ tor_addr_family(&cfg->addr));
if (!port)
return NULL;
} else {
@@ -6321,8 +6292,8 @@ get_first_advertised_port_by_type_af(int listener_type, int address_family)
(tor_addr_family(&cfg->addr) == address_family ||
tor_addr_family(&cfg->addr) == AF_UNSPEC)) {
if (tor_addr_family(&cfg->addr) != AF_UNSPEC ||
- (address_family == AF_INET && !cfg->ipv6_only) ||
- (address_family == AF_INET6 && !cfg->ipv4_only)) {
+ (address_family == AF_INET && !cfg->bind_ipv6_only) ||
+ (address_family == AF_INET6 && !cfg->bind_ipv4_only)) {
return cfg->port;
}
}
@@ -6426,7 +6397,7 @@ write_configuration_file(const char *fname, const or_options_t *options)
return -1;
}
- if (!(new_conf = options_dump(options, 1))) {
+ if (!(new_conf = options_dump(options, OPTIONS_DUMP_MINIMAL))) {
log_warn(LD_BUG, "Couldn't get configuration string");
goto err;
}
@@ -6445,7 +6416,7 @@ write_configuration_file(const char *fname, const or_options_t *options)
++i;
}
log_notice(LD_CONFIG, "Renaming old configuration file to \"%s\"", fn_tmp);
- if (rename(fname, fn_tmp) < 0) {
+ if (tor_rename(fname, fn_tmp) < 0) {//XXXX sandbox doesn't allow
log_warn(LD_FS,
"Couldn't rename configuration file \"%s\" to \"%s\": %s",
fname, fn_tmp, strerror(errno));
@@ -6483,180 +6454,6 @@ options_save_current(void)
return write_configuration_file(get_torrc_fname(0), get_options());
}
-/** Mapping from a unit name to a multiplier for converting that unit into a
- * base unit. Used by config_parse_unit. */
-struct unit_table_t {
- const char *unit; /**< The name of the unit */
- uint64_t multiplier; /**< How many of the base unit appear in this unit */
-};
-
-/** Table to map the names of memory units to the number of bytes they
- * contain. */
-static struct unit_table_t memory_units[] = {
- { "", 1 },
- { "b", 1<< 0 },
- { "byte", 1<< 0 },
- { "bytes", 1<< 0 },
- { "kb", 1<<10 },
- { "kbyte", 1<<10 },
- { "kbytes", 1<<10 },
- { "kilobyte", 1<<10 },
- { "kilobytes", 1<<10 },
- { "m", 1<<20 },
- { "mb", 1<<20 },
- { "mbyte", 1<<20 },
- { "mbytes", 1<<20 },
- { "megabyte", 1<<20 },
- { "megabytes", 1<<20 },
- { "gb", 1<<30 },
- { "gbyte", 1<<30 },
- { "gbytes", 1<<30 },
- { "gigabyte", 1<<30 },
- { "gigabytes", 1<<30 },
- { "tb", U64_LITERAL(1)<<40 },
- { "terabyte", U64_LITERAL(1)<<40 },
- { "terabytes", U64_LITERAL(1)<<40 },
- { NULL, 0 },
-};
-
-/** Table to map the names of time units to the number of seconds they
- * contain. */
-static struct unit_table_t time_units[] = {
- { "", 1 },
- { "second", 1 },
- { "seconds", 1 },
- { "minute", 60 },
- { "minutes", 60 },
- { "hour", 60*60 },
- { "hours", 60*60 },
- { "day", 24*60*60 },
- { "days", 24*60*60 },
- { "week", 7*24*60*60 },
- { "weeks", 7*24*60*60 },
- { NULL, 0 },
-};
-
-/** Table to map the names of time units to the number of milliseconds
- * they contain. */
-static struct unit_table_t time_msec_units[] = {
- { "", 1 },
- { "msec", 1 },
- { "millisecond", 1 },
- { "milliseconds", 1 },
- { "second", 1000 },
- { "seconds", 1000 },
- { "minute", 60*1000 },
- { "minutes", 60*1000 },
- { "hour", 60*60*1000 },
- { "hours", 60*60*1000 },
- { "day", 24*60*60*1000 },
- { "days", 24*60*60*1000 },
- { "week", 7*24*60*60*1000 },
- { "weeks", 7*24*60*60*1000 },
- { NULL, 0 },
-};
-
-/** Parse a string <b>val</b> containing a number, zero or more
- * spaces, and an optional unit string. If the unit appears in the
- * table <b>u</b>, then multiply the number by the unit multiplier.
- * On success, set *<b>ok</b> to 1 and return this product.
- * Otherwise, set *<b>ok</b> to 0.
- */
-static uint64_t
-config_parse_units(const char *val, struct unit_table_t *u, int *ok)
-{
- uint64_t v = 0;
- double d = 0;
- int use_float = 0;
- char *cp;
-
- tor_assert(ok);
-
- v = tor_parse_uint64(val, 10, 0, UINT64_MAX, ok, &cp);
- if (!*ok || (cp && *cp == '.')) {
- d = tor_parse_double(val, 0, UINT64_MAX, ok, &cp);
- if (!*ok)
- goto done;
- use_float = 1;
- }
-
- if (!cp) {
- *ok = 1;
- v = use_float ? DBL_TO_U64(d) : v;
- goto done;
- }
-
- cp = (char*) eat_whitespace(cp);
-
- for ( ;u->unit;++u) {
- if (!strcasecmp(u->unit, cp)) {
- if (use_float)
- v = u->multiplier * d;
- else
- v *= u->multiplier;
- *ok = 1;
- goto done;
- }
- }
- log_warn(LD_CONFIG, "Unknown unit '%s'.", cp);
- *ok = 0;
- done:
-
- if (*ok)
- return v;
- else
- return 0;
-}
-
-/** Parse a string in the format "number unit", where unit is a unit of
- * information (byte, KB, M, etc). On success, set *<b>ok</b> to true
- * and return the number of bytes specified. Otherwise, set
- * *<b>ok</b> to false and return 0. */
-static uint64_t
-config_parse_memunit(const char *s, int *ok)
-{
- uint64_t u = config_parse_units(s, memory_units, ok);
- return u;
-}
-
-/** Parse a string in the format "number unit", where unit is a unit of
- * time in milliseconds. On success, set *<b>ok</b> to true and return
- * the number of milliseconds in the provided interval. Otherwise, set
- * *<b>ok</b> to 0 and return -1. */
-static int
-config_parse_msec_interval(const char *s, int *ok)
-{
- uint64_t r;
- r = config_parse_units(s, time_msec_units, ok);
- if (!ok)
- return -1;
- if (r > INT_MAX) {
- log_warn(LD_CONFIG, "Msec interval '%s' is too long", s);
- *ok = 0;
- return -1;
- }
- return (int)r;
-}
-
-/** Parse a string in the format "number unit", where unit is a unit of time.
- * On success, set *<b>ok</b> to true and return the number of seconds in
- * the provided interval. Otherwise, set *<b>ok</b> to 0 and return -1.
- */
-static int
-config_parse_interval(const char *s, int *ok)
-{
- uint64_t r;
- r = config_parse_units(s, time_units, ok);
- if (!ok)
- return -1;
- if (r > INT_MAX) {
- log_warn(LD_CONFIG, "Interval '%s' is too long", s);
- *ok = 0;
- return -1;
- }
- return (int)r;
-}
-
/** Return the number of cpus configured in <b>options</b>. If we are
* told to auto-detect the number of cpus, return the auto-detected number. */
int
@@ -6710,14 +6507,6 @@ init_libevent(const or_options_t *options)
}
}
-/** Return the persistent state struct for this Tor. */
-or_state_t *
-get_or_state(void)
-{
- tor_assert(global_state);
- return global_state;
-}
-
/** Return a newly allocated string holding a filename relative to the data
* directory. If <b>sub1</b> is present, it is the first path component after
* the data directory. If <b>sub2</b> is also present, it is the second path
@@ -6768,489 +6557,100 @@ options_get_datadir_fname2_suffix(const or_options_t *options,
return fname;
}
-/** Return true if <b>line</b> is a valid state TransportProxy line.
- * Return false otherwise. */
-static int
-state_transport_line_is_valid(const char *line)
-{
- smartlist_t *items = NULL;
- char *addrport=NULL;
- tor_addr_t addr;
- uint16_t port = 0;
- int r;
-
- items = smartlist_new();
- smartlist_split_string(items, line, NULL,
- SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, -1);
-
- if (smartlist_len(items) != 2) {
- log_warn(LD_CONFIG, "state: Not enough arguments in TransportProxy line.");
- goto err;
- }
-
- addrport = smartlist_get(items, 1);
- if (tor_addr_port_lookup(addrport, &addr, &port) < 0) {
- log_warn(LD_CONFIG, "state: Could not parse addrport.");
- goto err;
- }
-
- if (!port) {
- log_warn(LD_CONFIG, "state: Transport line did not contain port.");
- goto err;
- }
-
- r = 1;
- goto done;
-
- err:
- r = 0;
-
- done:
- SMARTLIST_FOREACH(items, char*, s, tor_free(s));
- smartlist_free(items);
- return r;
-}
-
-/** Return 0 if all TransportProxy lines in <b>state</b> are well
- * formed. Otherwise, return -1. */
-static int
-validate_transports_in_state(or_state_t *state)
+/** Check wether the data directory has a private subdirectory
+ * <b>subdir</b>. If not, try to create it. Return 0 on success,
+ * -1 otherwise. */
+int
+check_or_create_data_subdir(const char *subdir)
{
- int broken = 0;
- config_line_t *line;
+ char *statsdir = get_datadir_fname(subdir);
+ int return_val = 0;
- for (line = state->TransportProxies ; line ; line = line->next) {
- tor_assert(!strcmp(line->key, "TransportProxy"));
- if (!state_transport_line_is_valid(line->value))
- broken = 1;
+ if (check_private_dir(statsdir, CPD_CREATE, get_options()->User) < 0) {
+ log_warn(LD_HIST, "Unable to create %s/ directory!", subdir);
+ return_val = -1;
}
-
- if (broken)
- log_warn(LD_CONFIG, "state: State file seems to be broken.");
-
- return 0;
-}
-
-/** Return 0 if every setting in <b>state</b> is reasonable, and a
- * permissible transition from <b>old_state</b>. Else warn and return -1.
- * Should have no side effects, except for normalizing the contents of
- * <b>state</b>.
- */
-/* XXX from_setconf is here because of bug 238 */
-static int
-or_state_validate(or_state_t *old_state, or_state_t *state,
- int from_setconf, char **msg)
-{
- /* We don't use these; only options do. Still, we need to match that
- * signature. */
- (void) from_setconf;
- (void) old_state;
-
- if (entry_guards_parse_state(state, 0, msg)<0)
- return -1;
-
- if (validate_transports_in_state(state)<0)
- return -1;
-
- return 0;
+ tor_free(statsdir);
+ return return_val;
}
-/** Replace the current persistent state with <b>new_state</b> */
-static int
-or_state_set(or_state_t *new_state)
+/** Create a file named <b>fname</b> with contents <b>str</b> in the
+ * subdirectory <b>subdir</b> of the data directory. <b>descr</b>
+ * should be a short description of the file's content and will be
+ * used for the warning message, if it's present and the write process
+ * fails. Return 0 on success, -1 otherwise.*/
+int
+write_to_data_subdir(const char* subdir, const char* fname,
+ const char* str, const char* descr)
{
- char *err = NULL;
- int ret = 0;
- tor_assert(new_state);
- config_free(&state_format, global_state);
- global_state = new_state;
- if (entry_guards_parse_state(global_state, 1, &err)<0) {
- log_warn(LD_GENERAL,"%s",err);
- tor_free(err);
- ret = -1;
- }
- if (rep_hist_load_state(global_state, &err)<0) {
- log_warn(LD_GENERAL,"Unparseable bandwidth history state: %s",err);
- tor_free(err);
- ret = -1;
- }
- if (circuit_build_times_parse_state(&circ_times, global_state) < 0) {
- ret = -1;
- }
- return ret;
-}
+ char *filename = get_datadir_fname2(subdir, fname);
+ int return_val = 0;
-/**
- * Save a broken state file to a backup location.
- */
-static void
-or_state_save_broken(char *fname)
-{
- int i;
- file_status_t status;
- char *fname2 = NULL;
- for (i = 0; i < 100; ++i) {
- tor_asprintf(&fname2, "%s.%d", fname, i);
- status = file_status(fname2);
- if (status == FN_NOENT)
- break;
- tor_free(fname2);
+ if (write_str_to_file(filename, str, 0) < 0) {
+ log_warn(LD_HIST, "Unable to write %s to disk!", descr ? descr : fname);
+ return_val = -1;
}
- if (i == 100) {
- log_warn(LD_BUG, "Unable to parse state in \"%s\"; too many saved bad "
- "state files to move aside. Discarding the old state file.",
- fname);
- unlink(fname);
- } else {
- log_warn(LD_BUG, "Unable to parse state in \"%s\". Moving it aside "
- "to \"%s\". This could be a bug in Tor; please tell "
- "the developers.", fname, fname2);
- if (rename(fname, fname2) < 0) {
- log_warn(LD_BUG, "Weirdly, I couldn't even move the state aside. The "
- "OS gave an error of %s", strerror(errno));
- }
- }
- tor_free(fname2);
+ tor_free(filename);
+ return return_val;
}
-/** Reload the persistent state from disk, generating a new state as needed.
- * Return 0 on success, less than 0 on failure.
- */
-static int
-or_state_load(void)
+/** Given a file name check to see whether the file exists but has not been
+ * modified for a very long time. If so, remove it. */
+void
+remove_file_if_very_old(const char *fname, time_t now)
{
- or_state_t *new_state = NULL;
- char *contents = NULL, *fname;
- char *errmsg = NULL;
- int r = -1, badstate = 0;
+#define VERY_OLD_FILE_AGE (28*24*60*60)
+ struct stat st;
- fname = get_datadir_fname("state");
- switch (file_status(fname)) {
- case FN_FILE:
- if (!(contents = read_file_to_str(fname, 0, NULL))) {
- log_warn(LD_FS, "Unable to read state file \"%s\"", fname);
- goto done;
- }
- break;
- case FN_NOENT:
- break;
- case FN_ERROR:
- case FN_DIR:
- default:
- log_warn(LD_GENERAL,"State file \"%s\" is not a file? Failing.", fname);
- goto done;
- }
- new_state = tor_malloc_zero(sizeof(or_state_t));
- new_state->_magic = OR_STATE_MAGIC;
- config_init(&state_format, new_state);
- if (contents) {
- config_line_t *lines=NULL;
- int assign_retval;
- if (config_get_lines(contents, &lines, 0)<0)
- goto done;
- assign_retval = config_assign(&state_format, new_state,
- lines, 0, 0, &errmsg);
- config_free_lines(lines);
- if (assign_retval<0)
- badstate = 1;
- if (errmsg) {
- log_warn(LD_GENERAL, "%s", errmsg);
- tor_free(errmsg);
+ log_debug(LD_FS, "stat()ing %s", fname);
+ if (stat(sandbox_intern_string(fname), &st)==0 &&
+ st.st_mtime < now-VERY_OLD_FILE_AGE) {
+ char buf[ISO_TIME_LEN+1];
+ format_local_iso_time(buf, st.st_mtime);
+ log_notice(LD_GENERAL, "Obsolete file %s hasn't been modified since %s. "
+ "Removing it.", fname, buf);
+ if (unlink(fname) != 0) {
+ log_warn(LD_FS, "Failed to unlink %s: %s",
+ fname, strerror(errno));
}
}
-
- if (!badstate && or_state_validate(NULL, new_state, 1, &errmsg) < 0)
- badstate = 1;
-
- if (errmsg) {
- log_warn(LD_GENERAL, "%s", errmsg);
- tor_free(errmsg);
- }
-
- if (badstate && !contents) {
- log_warn(LD_BUG, "Uh oh. We couldn't even validate our own default state."
- " This is a bug in Tor.");
- goto done;
- } else if (badstate && contents) {
- or_state_save_broken(fname);
-
- tor_free(contents);
- config_free(&state_format, new_state);
-
- new_state = tor_malloc_zero(sizeof(or_state_t));
- new_state->_magic = OR_STATE_MAGIC;
- config_init(&state_format, new_state);
- } else if (contents) {
- log_info(LD_GENERAL, "Loaded state from \"%s\"", fname);
- } else {
- log_info(LD_GENERAL, "Initialized state");
- }
- if (or_state_set(new_state) == -1) {
- or_state_save_broken(fname);
- }
- new_state = NULL;
- if (!contents) {
- global_state->next_write = 0;
- or_state_save(time(NULL));
- }
- r = 0;
-
- done:
- tor_free(fname);
- tor_free(contents);
- if (new_state)
- config_free(&state_format, new_state);
-
- return r;
}
-/** Did the last time we tried to write the state file fail? If so, we
- * should consider disabling such features as preemptive circuit generation
- * to compute circuit-build-time. */
-static int last_state_file_write_failed = 0;
-
-/** Return whether the state file failed to write last time we tried. */
-int
-did_last_state_file_write_fail(void)
-{
- return last_state_file_write_failed;
-}
-
-/** If writing the state to disk fails, try again after this many seconds. */
-#define STATE_WRITE_RETRY_INTERVAL 3600
-
-/** If we're a relay, how often should we checkpoint our state file even
- * if nothing else dirties it? This will checkpoint ongoing stats like
- * bandwidth used, per-country user stats, etc. */
-#define STATE_RELAY_CHECKPOINT_INTERVAL (12*60*60)
-
-/** Write the persistent state to disk. Return 0 for success, <0 on failure. */
-int
-or_state_save(time_t now)
+/** Return a smartlist of ports that must be forwarded by
+ * tor-fw-helper. The smartlist contains the ports in a string format
+ * that is understandable by tor-fw-helper. */
+smartlist_t *
+get_list_of_ports_to_forward(void)
{
- char *state, *contents;
- char tbuf[ISO_TIME_LEN+1];
- char *fname;
-
- tor_assert(global_state);
-
- if (global_state->next_write > now)
- return 0;
-
- /* Call everything else that might dirty the state even more, in order
- * to avoid redundant writes. */
- entry_guards_update_state(global_state);
- rep_hist_update_state(global_state);
- circuit_build_times_update_state(&circ_times, global_state);
- if (accounting_is_enabled(get_options()))
- accounting_run_housekeeping(now);
-
- global_state->LastWritten = now;
-
- tor_free(global_state->TorVersion);
- tor_asprintf(&global_state->TorVersion, "Tor %s", get_version());
-
- state = config_dump(&state_format, NULL, global_state, 1, 0);
- format_local_iso_time(tbuf, now);
- tor_asprintf(&contents,
- "# Tor state file last generated on %s local time\n"
- "# Other times below are in GMT\n"
- "# You *do not* need to edit this file.\n\n%s",
- tbuf, state);
- tor_free(state);
- fname = get_datadir_fname("state");
- if (write_str_to_file(fname, contents, 0)<0) {
- log_warn(LD_FS, "Unable to write state to file \"%s\"; "
- "will try again later", fname);
- last_state_file_write_failed = 1;
- tor_free(fname);
- tor_free(contents);
- /* Try again after STATE_WRITE_RETRY_INTERVAL (or sooner, if the state
- * changes sooner). */
- global_state->next_write = now + STATE_WRITE_RETRY_INTERVAL;
- return -1;
- }
-
- last_state_file_write_failed = 0;
- log_info(LD_GENERAL, "Saved state to \"%s\"", fname);
- tor_free(fname);
- tor_free(contents);
-
- if (server_mode(get_options()))
- global_state->next_write = now + STATE_RELAY_CHECKPOINT_INTERVAL;
- else
- global_state->next_write = TIME_MAX;
+ smartlist_t *ports_to_forward = smartlist_new();
+ int port = 0;
- return 0;
-}
-
-/** Return the config line for transport <b>transport</b> in the current state.
- * Return NULL if there is no config line for <b>transport</b>. */
-static config_line_t *
-get_transport_in_state_by_name(const char *transport)
-{
- or_state_t *or_state = get_or_state();
- config_line_t *line;
- config_line_t *ret = NULL;
- smartlist_t *items = NULL;
+ /** XXX TODO tor-fw-helper does not support forwarding ports to
+ other hosts than the local one. If the user is binding to a
+ different IP address, tor-fw-helper won't work. */
+ port = router_get_advertised_or_port(get_options()); /* Get ORPort */
+ if (port)
+ smartlist_add_asprintf(ports_to_forward, "%d:%d", port, port);
- for (line = or_state->TransportProxies ; line ; line = line->next) {
- tor_assert(!strcmp(line->key, "TransportProxy"));
+ port = router_get_advertised_dir_port(get_options(), 0); /* Get DirPort */
+ if (port)
+ smartlist_add_asprintf(ports_to_forward, "%d:%d", port, port);
- items = smartlist_new();
- smartlist_split_string(items, line->value, NULL,
- SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, -1);
- if (smartlist_len(items) != 2) /* broken state */
- goto done;
-
- if (!strcmp(smartlist_get(items, 0), transport)) {
- ret = line;
- goto done;
+ /* Get ports of transport proxies */
+ {
+ smartlist_t *transport_ports = get_transport_proxy_ports();
+ if (transport_ports) {
+ smartlist_add_all(ports_to_forward, transport_ports);
+ smartlist_free(transport_ports);
}
-
- SMARTLIST_FOREACH(items, char*, s, tor_free(s));
- smartlist_free(items);
- items = NULL;
}
- done:
- if (items) {
- SMARTLIST_FOREACH(items, char*, s, tor_free(s));
- smartlist_free(items);
- }
- return ret;
-}
-
-/** Return string containing the address:port part of the
- * TransportProxy <b>line</b> for transport <b>transport</b>.
- * If the line is corrupted, return NULL. */
-static const char *
-get_transport_bindaddr(const char *line, const char *transport)
-{
- char *line_tmp = NULL;
-
- if (strlen(line) < strlen(transport) + 2) {
- goto broken_state;
- } else {
- /* line should start with the name of the transport and a space.
- (for example, "obfs2 127.0.0.1:47245") */
- tor_asprintf(&line_tmp, "%s ", transport);
- if (strcmpstart(line, line_tmp))
- goto broken_state;
-
- tor_free(line_tmp);
- return (line+strlen(transport)+1);
+ if (!smartlist_len(ports_to_forward)) {
+ smartlist_free(ports_to_forward);
+ ports_to_forward = NULL;
}
- broken_state:
- tor_free(line_tmp);
- return NULL;
-}
-
-/** Return a string containing the address:port that a proxy transport
- * should bind on. The string is stored on the heap and must be freed
- * by the caller of this function. */
-char *
-get_stored_bindaddr_for_server_transport(const char *transport)
-{
- char *default_addrport = NULL;
- const char *stored_bindaddr = NULL;
-
- config_line_t *line = get_transport_in_state_by_name(transport);
- if (!line) /* Found no references in state for this transport. */
- goto no_bindaddr_found;
-
- stored_bindaddr = get_transport_bindaddr(line->value, transport);
- if (stored_bindaddr) /* found stored bindaddr in state file. */
- return tor_strdup(stored_bindaddr);
-
- no_bindaddr_found:
- /** If we didn't find references for this pluggable transport in the
- state file, we should instruct the pluggable transport proxy to
- listen on INADDR_ANY on a random ephemeral port. */
- tor_asprintf(&default_addrport, "%s:%s", fmt_addr32(INADDR_ANY), "0");
- return default_addrport;
-}
-
-/** Save <b>transport</b> listening on <b>addr</b>:<b>port</b> to
- state */
-void
-save_transport_to_state(const char *transport,
- const tor_addr_t *addr, uint16_t port)
-{
- or_state_t *state = get_or_state();
-
- char *transport_addrport=NULL;
-
- /** find where to write on the state */
- config_line_t **next, *line;
-
- /* see if this transport is already stored in state */
- config_line_t *transport_line =
- get_transport_in_state_by_name(transport);
-
- if (transport_line) { /* if transport already exists in state... */
- const char *prev_bindaddr = /* get its addrport... */
- get_transport_bindaddr(transport_line->value, transport);
- tor_asprintf(&transport_addrport, "%s:%d", fmt_addr(addr), (int)port);
-
- /* if transport in state has the same address as this one, life is good */
- if (!strcmp(prev_bindaddr, transport_addrport)) {
- log_info(LD_CONFIG, "Transport seems to have spawned on its usual "
- "address:port.");
- goto done;
- } else { /* if addrport in state is different than the one we got */
- log_info(LD_CONFIG, "Transport seems to have spawned on different "
- "address:port. Let's update the state file with the new "
- "address:port");
- tor_free(transport_line->value); /* free the old line */
- tor_asprintf(&transport_line->value, "%s %s:%d", transport,
- fmt_addr(addr),
- (int) port); /* replace old addrport line with new line */
- }
- } else { /* never seen this one before; save it in state for next time */
- log_info(LD_CONFIG, "It's the first time we see this transport. "
- "Let's save its address:port");
- next = &state->TransportProxies;
- /* find the last TransportProxy line in the state and point 'next'
- right after it */
- line = state->TransportProxies;
- while (line) {
- next = &(line->next);
- line = line->next;
- }
-
- /* allocate space for the new line and fill it in */
- *next = line = tor_malloc_zero(sizeof(config_line_t));
- line->key = tor_strdup("TransportProxy");
- tor_asprintf(&line->value, "%s %s:%d", transport,
- fmt_addr(addr), (int) port);
-
- next = &(line->next);
- }
-
- if (!get_options()->AvoidDiskWrites)
- or_state_mark_dirty(state, 0);
-
- done:
- tor_free(transport_addrport);
-}
-
-/** Given a file name check to see whether the file exists but has not been
- * modified for a very long time. If so, remove it. */
-void
-remove_file_if_very_old(const char *fname, time_t now)
-{
-#define VERY_OLD_FILE_AGE (28*24*60*60)
- struct stat st;
-
- if (stat(fname, &st)==0 && st.st_mtime < now-VERY_OLD_FILE_AGE) {
- char buf[ISO_TIME_LEN+1];
- format_local_iso_time(buf, st.st_mtime);
- log_notice(LD_GENERAL, "Obsolete file %s hasn't been modified since %s. "
- "Removing it.", fname, buf);
- unlink(fname);
- }
+ return ports_to_forward;
}
/** Helper to implement GETINFO functions about configuration variables (not
@@ -7267,9 +6667,12 @@ getinfo_helper_config(control_connection_t *conn,
if (!strcmp(question, "config/names")) {
smartlist_t *sl = smartlist_new();
int i;
- for (i = 0; _option_vars[i].name; ++i) {
- const config_var_t *var = &_option_vars[i];
+ for (i = 0; option_vars_[i].name; ++i) {
+ const config_var_t *var = &option_vars_[i];
const char *type;
+ /* don't tell controller about triple-underscore options */
+ if (!strncmp(option_vars_[i].name, "___", 3))
+ continue;
switch (var->type) {
case CONFIG_TYPE_STRING: type = "String"; break;
case CONFIG_TYPE_FILENAME: type = "Filename"; break;
@@ -7285,6 +6688,7 @@ getinfo_helper_config(control_connection_t *conn,
case CONFIG_TYPE_ISOTIME: type = "Time"; break;
case CONFIG_TYPE_ROUTERSET: type = "RouterList"; break;
case CONFIG_TYPE_CSV: type = "CommaList"; break;
+ case CONFIG_TYPE_CSV_INTERVAL: type = "TimeIntervalCommaList"; break;
case CONFIG_TYPE_LINELIST: type = "LineList"; break;
case CONFIG_TYPE_LINELIST_S: type = "Dependant"; break;
case CONFIG_TYPE_LINELIST_V: type = "Virtual"; break;
@@ -7299,7 +6703,175 @@ getinfo_helper_config(control_connection_t *conn,
*answer = smartlist_join_strings(sl, "", 0, NULL);
SMARTLIST_FOREACH(sl, char *, c, tor_free(c));
smartlist_free(sl);
+ } else if (!strcmp(question, "config/defaults")) {
+ smartlist_t *sl = smartlist_new();
+ int i;
+ for (i = 0; option_vars_[i].name; ++i) {
+ const config_var_t *var = &option_vars_[i];
+ if (var->initvalue != NULL) {
+ char *val = esc_for_log(var->initvalue);
+ smartlist_add_asprintf(sl, "%s %s\n",var->name,val);
+ tor_free(val);
+ }
+ }
+ *answer = smartlist_join_strings(sl, "", 0, NULL);
+ SMARTLIST_FOREACH(sl, char *, c, tor_free(c));
+ smartlist_free(sl);
}
return 0;
}
+/** Parse outbound bind address option lines. If <b>validate_only</b>
+ * is not 0 update OutboundBindAddressIPv4_ and
+ * OutboundBindAddressIPv6_ in <b>options</b>. On failure, set
+ * <b>msg</b> (if provided) to a newly allocated string containing a
+ * description of the problem and return -1. */
+static int
+parse_outbound_addresses(or_options_t *options, int validate_only, char **msg)
+{
+ const config_line_t *lines = options->OutboundBindAddress;
+ int found_v4 = 0, found_v6 = 0;
+
+ if (!validate_only) {
+ memset(&options->OutboundBindAddressIPv4_, 0,
+ sizeof(options->OutboundBindAddressIPv4_));
+ memset(&options->OutboundBindAddressIPv6_, 0,
+ sizeof(options->OutboundBindAddressIPv6_));
+ }
+ while (lines) {
+ tor_addr_t addr, *dst_addr = NULL;
+ int af = tor_addr_parse(&addr, lines->value);
+ switch (af) {
+ case AF_INET:
+ if (found_v4) {
+ if (msg)
+ tor_asprintf(msg, "Multiple IPv4 outbound bind addresses "
+ "configured: %s", lines->value);
+ return -1;
+ }
+ found_v4 = 1;
+ dst_addr = &options->OutboundBindAddressIPv4_;
+ break;
+ case AF_INET6:
+ if (found_v6) {
+ if (msg)
+ tor_asprintf(msg, "Multiple IPv6 outbound bind addresses "
+ "configured: %s", lines->value);
+ return -1;
+ }
+ found_v6 = 1;
+ dst_addr = &options->OutboundBindAddressIPv6_;
+ break;
+ default:
+ if (msg)
+ tor_asprintf(msg, "Outbound bind address '%s' didn't parse.",
+ lines->value);
+ return -1;
+ }
+ if (!validate_only)
+ tor_addr_copy(dst_addr, &addr);
+ lines = lines->next;
+ }
+ return 0;
+}
+
+/** Load one of the geoip files, <a>family</a> determining which
+ * one. <a>default_fname</a> is used if on Windows and
+ * <a>fname</a> equals "<default>". */
+static void
+config_load_geoip_file_(sa_family_t family,
+ const char *fname,
+ const char *default_fname)
+{
+#ifdef _WIN32
+ char *free_fname = NULL; /* Used to hold any temporary-allocated value */
+ /* XXXX Don't use this "<default>" junk; make our filename options
+ * understand prefixes somehow. -NM */
+ if (!strcmp(fname, "<default>")) {
+ const char *conf_root = get_windows_conf_root();
+ tor_asprintf(&free_fname, "%s\\%s", conf_root, default_fname);
+ fname = free_fname;
+ }
+ geoip_load_file(family, fname);
+ tor_free(free_fname);
+#else
+ (void)default_fname;
+ geoip_load_file(family, fname);
+#endif
+}
+
+/** Load geoip files for IPv4 and IPv6 if <a>options</a> and
+ * <a>old_options</a> indicate we should. */
+static void
+config_maybe_load_geoip_files_(const or_options_t *options,
+ const or_options_t *old_options)
+{
+ /* XXXX024 Reload GeoIPFile on SIGHUP. -NM */
+
+ if (options->GeoIPFile &&
+ ((!old_options || !opt_streq(old_options->GeoIPFile,
+ options->GeoIPFile))
+ || !geoip_is_loaded(AF_INET)))
+ config_load_geoip_file_(AF_INET, options->GeoIPFile, "geoip");
+ if (options->GeoIPv6File &&
+ ((!old_options || !opt_streq(old_options->GeoIPv6File,
+ options->GeoIPv6File))
+ || !geoip_is_loaded(AF_INET6)))
+ config_load_geoip_file_(AF_INET6, options->GeoIPv6File, "geoip6");
+}
+
+/** Initialize cookie authentication (used so far by the ControlPort
+ * and Extended ORPort).
+ *
+ * Allocate memory and create a cookie (of length <b>cookie_len</b>)
+ * in <b>cookie_out</b>.
+ * Then write it down to <b>fname</b> and prepend it with <b>header</b>.
+ *
+ * If the whole procedure was successful, set
+ * <b>cookie_is_set_out</b> to True. */
+int
+init_cookie_authentication(const char *fname, const char *header,
+ int cookie_len,
+ uint8_t **cookie_out, int *cookie_is_set_out)
+{
+ char cookie_file_str_len = strlen(header) + cookie_len;
+ char *cookie_file_str = tor_malloc(cookie_file_str_len);
+ int retval = -1;
+
+ /* We don't want to generate a new cookie every time we call
+ * options_act(). One should be enough. */
+ if (*cookie_is_set_out) {
+ retval = 0; /* we are all set */
+ goto done;
+ }
+
+ /* If we've already set the cookie, free it before re-setting
+ it. This can happen if we previously generated a cookie, but
+ couldn't write it to a disk. */
+ if (*cookie_out)
+ tor_free(*cookie_out);
+
+ /* Generate the cookie */
+ *cookie_out = tor_malloc(cookie_len);
+ if (crypto_rand((char *)*cookie_out, cookie_len) < 0)
+ goto done;
+
+ /* Create the string that should be written on the file. */
+ memcpy(cookie_file_str, header, strlen(header));
+ memcpy(cookie_file_str+strlen(header), *cookie_out, cookie_len);
+ if (write_bytes_to_file(fname, cookie_file_str, cookie_file_str_len, 1)) {
+ log_warn(LD_FS,"Error writing auth cookie to %s.", escaped(fname));
+ goto done;
+ }
+
+ /* Success! */
+ log_info(LD_GENERAL, "Generated auth cookie file in '%s'.", escaped(fname));
+ *cookie_is_set_out = 1;
+ retval = 0;
+
+ done:
+ memwipe(cookie_file_str, 0, cookie_file_str_len);
+ tor_free(cookie_file_str);
+ return retval;
+}
+
diff --git a/src/or/config.h b/src/or/config.h
index dd76edcf1..bf386134b 100644
--- a/src/or/config.h
+++ b/src/or/config.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,11 +9,13 @@
* \brief Header file for config.c.
**/
-#ifndef _TOR_CONFIG_H
-#define _TOR_CONFIG_H
+#ifndef TOR_CONFIG_H
+#define TOR_CONFIG_H
+
+#include "testsupport.h"
const char *get_dirportfrontpage(void);
-const or_options_t *get_options(void);
+MOCK_DECL(const or_options_t *,get_options,(void));
or_options_t *get_options_mutable(void);
int set_options(or_options_t *new_val, char **msg);
void config_free_all(void);
@@ -23,16 +25,20 @@ const char *escaped_safe_str_client(const char *address);
const char *escaped_safe_str(const char *address);
const char *get_version(void);
const char *get_short_version(void);
-
-int config_get_lines(const char *string, config_line_t **result, int extended);
-void config_free_lines(config_line_t *front);
setopt_err_t options_trial_assign(config_line_t *list, int use_defaults,
int clear_first, char **msg);
+
+uint32_t get_last_resolved_addr(void);
int resolve_my_address(int warn_severity, const or_options_t *options,
- uint32_t *addr, char **hostname_out);
+ uint32_t *addr_out,
+ const char **method_out, char **hostname_out);
int is_local_addr(const tor_addr_t *addr);
void options_init(or_options_t *options);
-char *options_dump(const or_options_t *options, int minimal);
+
+#define OPTIONS_DUMP_MINIMAL 1
+#define OPTIONS_DUMP_DEFAULTS 2
+#define OPTIONS_DUMP_ALL 3
+char *options_dump(const or_options_t *options, int how_to_dump);
int options_init_from_torrc(int argc, char **argv);
setopt_err_t options_init_from_string(const char *cf_defaults, const char *cf,
int command, const char *command_arg, char **msg);
@@ -59,11 +65,11 @@ char *options_get_datadir_fname2_suffix(const or_options_t *options,
#define get_datadir_fname_suffix(sub1, suffix) \
get_datadir_fname2_suffix((sub1), NULL, (suffix))
-int get_num_cpus(const or_options_t *options);
+int check_or_create_data_subdir(const char *subdir);
+int write_to_data_subdir(const char* subdir, const char* fname,
+ const char* str, const char* descr);
-or_state_t *get_or_state(void);
-int did_last_state_file_write_fail(void);
-int or_state_save(time_t now);
+int get_num_cpus(const or_options_t *options);
const smartlist_t *get_configured_ports(void);
int get_first_advertised_port_by_type_af(int listener_type,
@@ -78,9 +84,7 @@ char *get_first_listener_addrport_string(int listener_type);
int options_need_geoip_info(const or_options_t *options,
const char **reason_out);
-void save_transport_to_state(const char *transport_name,
- const tor_addr_t *addr, uint16_t port);
-char *get_stored_bindaddr_for_server_transport(const char *transport);
+smartlist_t *get_list_of_ports_to_forward(void);
int getinfo_helper_config(control_connection_t *conn,
const char *question, char **answer,
@@ -90,10 +94,17 @@ const char *tor_get_digests(void);
uint32_t get_effective_bwrate(const or_options_t *options);
uint32_t get_effective_bwburst(const or_options_t *options);
-#ifdef CONFIG_PRIVATE
-/* Used only by config.c and test.c */
+char *get_transport_bindaddr_from_config(const char *transport);
+
+int init_cookie_authentication(const char *fname, const char *header,
+ int cookie_len,
+ uint8_t **cookie_out, int *cookie_is_set_out);
+
or_options_t *options_new(void);
-#endif
+
+int config_parse_commandline(int argc, char **argv, int ignore_errors,
+ config_line_t **result,
+ config_line_t **cmdline_result);
void config_register_addressmaps(const or_options_t *options);
/* XXXX024 move to connection_edge.h */
@@ -102,5 +113,34 @@ int addressmap_register_auto(const char *from, const char *to,
addressmap_entry_source_t addrmap_source,
const char **msg);
+/** Represents the information stored in a torrc Bridge line. */
+typedef struct bridge_line_t {
+ tor_addr_t addr; /* The IP address of the bridge. */
+ uint16_t port; /* The TCP port of the bridge. */
+ char *transport_name; /* The name of the pluggable transport that
+ should be used to connect to the bridge. */
+ char digest[DIGEST_LEN]; /* The bridge's identity key digest. */
+ smartlist_t *socks_args; /* SOCKS arguments for the pluggable
+ transport proxy. */
+} bridge_line_t;
+
+void bridge_line_free(bridge_line_t *bridge_line);
+bridge_line_t *parse_bridge_line(const char *line);
+smartlist_t *get_options_from_transport_options_line(const char *line,
+ const char *transport);
+smartlist_t *get_options_for_server_transport(const char *transport);
+
+#ifdef CONFIG_PRIVATE
+#ifdef TOR_UNIT_TESTS
+extern struct config_format_t options_format;
+#endif
+
+STATIC void or_options_free(or_options_t *options);
+STATIC int options_validate(or_options_t *old_options,
+ or_options_t *options,
+ or_options_t *default_options,
+ int from_setconf, char **msg);
+#endif
+
#endif
diff --git a/src/or/confparse.c b/src/or/confparse.c
new file mode 100644
index 000000000..c5400a651
--- /dev/null
+++ b/src/or/confparse.c
@@ -0,0 +1,1316 @@
+/* Copyright (c) 2001 Matej Pfajfar.
+ * Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#include "or.h"
+#include "confparse.h"
+#include "routerset.h"
+
+static uint64_t config_parse_memunit(const char *s, int *ok);
+static int config_parse_msec_interval(const char *s, int *ok);
+static int config_parse_interval(const char *s, int *ok);
+static void config_reset(const config_format_t *fmt, void *options,
+ const config_var_t *var, int use_defaults);
+
+/** Allocate an empty configuration object of a given format type. */
+void *
+config_new(const config_format_t *fmt)
+{
+ void *opts = tor_malloc_zero(fmt->size);
+ *(uint32_t*)STRUCT_VAR_P(opts, fmt->magic_offset) = fmt->magic;
+ CONFIG_CHECK(fmt, opts);
+ return opts;
+}
+
+/*
+ * Functions to parse config options
+ */
+
+/** If <b>option</b> is an official abbreviation for a longer option,
+ * return the longer option. Otherwise return <b>option</b>.
+ * If <b>command_line</b> is set, apply all abbreviations. Otherwise, only
+ * apply abbreviations that work for the config file and the command line.
+ * If <b>warn_obsolete</b> is set, warn about deprecated names. */
+const char *
+config_expand_abbrev(const config_format_t *fmt, const char *option,
+ int command_line, int warn_obsolete)
+{
+ int i;
+ if (! fmt->abbrevs)
+ return option;
+ for (i=0; fmt->abbrevs[i].abbreviated; ++i) {
+ /* Abbreviations are case insensitive. */
+ if (!strcasecmp(option,fmt->abbrevs[i].abbreviated) &&
+ (command_line || !fmt->abbrevs[i].commandline_only)) {
+ if (warn_obsolete && fmt->abbrevs[i].warn) {
+ log_warn(LD_CONFIG,
+ "The configuration option '%s' is deprecated; "
+ "use '%s' instead.",
+ fmt->abbrevs[i].abbreviated,
+ fmt->abbrevs[i].full);
+ }
+ /* Keep going through the list in case we want to rewrite it more.
+ * (We could imagine recursing here, but I don't want to get the
+ * user into an infinite loop if we craft our list wrong.) */
+ option = fmt->abbrevs[i].full;
+ }
+ }
+ return option;
+}
+
+/** Helper: allocate a new configuration option mapping 'key' to 'val',
+ * append it to *<b>lst</b>. */
+void
+config_line_append(config_line_t **lst,
+ const char *key,
+ const char *val)
+{
+ config_line_t *newline;
+
+ newline = tor_malloc_zero(sizeof(config_line_t));
+ newline->key = tor_strdup(key);
+ newline->value = tor_strdup(val);
+ newline->next = NULL;
+ while (*lst)
+ lst = &((*lst)->next);
+
+ (*lst) = newline;
+}
+
+/** Return the line in <b>lines</b> whose key is exactly <b>key</b>, or NULL
+ * if no such key exists. For handling commandline-only options only; other
+ * options should be looked up in the appropriate data structure. */
+const config_line_t *
+config_line_find(const config_line_t *lines,
+ const char *key)
+{
+ const config_line_t *cl;
+ for (cl = lines; cl; cl = cl->next) {
+ if (!strcmp(cl->key, key))
+ return cl;
+ }
+ return NULL;
+}
+
+/** Helper: parse the config string and strdup into key/value
+ * strings. Set *result to the list, or NULL if parsing the string
+ * failed. Return 0 on success, -1 on failure. Warn and ignore any
+ * misformatted lines.
+ *
+ * If <b>extended</b> is set, then treat keys beginning with / and with + as
+ * indicating "clear" and "append" respectively. */
+int
+config_get_lines(const char *string, config_line_t **result, int extended)
+{
+ config_line_t *list = NULL, **next;
+ char *k, *v;
+ const char *parse_err;
+
+ next = &list;
+ do {
+ k = v = NULL;
+ string = parse_config_line_from_str_verbose(string, &k, &v, &parse_err);
+ if (!string) {
+ log_warn(LD_CONFIG, "Error while parsing configuration: %s",
+ parse_err?parse_err:"<unknown>");
+ config_free_lines(list);
+ tor_free(k);
+ tor_free(v);
+ return -1;
+ }
+ if (k && v) {
+ unsigned command = CONFIG_LINE_NORMAL;
+ if (extended) {
+ if (k[0] == '+') {
+ char *k_new = tor_strdup(k+1);
+ tor_free(k);
+ k = k_new;
+ command = CONFIG_LINE_APPEND;
+ } else if (k[0] == '/') {
+ char *k_new = tor_strdup(k+1);
+ tor_free(k);
+ k = k_new;
+ tor_free(v);
+ v = tor_strdup("");
+ command = CONFIG_LINE_CLEAR;
+ }
+ }
+ /* This list can get long, so we keep a pointer to the end of it
+ * rather than using config_line_append over and over and getting
+ * n^2 performance. */
+ *next = tor_malloc_zero(sizeof(config_line_t));
+ (*next)->key = k;
+ (*next)->value = v;
+ (*next)->next = NULL;
+ (*next)->command = command;
+ next = &((*next)->next);
+ } else {
+ tor_free(k);
+ tor_free(v);
+ }
+ } while (*string);
+
+ *result = list;
+ return 0;
+}
+
+/**
+ * Free all the configuration lines on the linked list <b>front</b>.
+ */
+void
+config_free_lines(config_line_t *front)
+{
+ config_line_t *tmp;
+
+ while (front) {
+ tmp = front;
+ front = tmp->next;
+
+ tor_free(tmp->key);
+ tor_free(tmp->value);
+ tor_free(tmp);
+ }
+}
+
+/** As config_find_option, but return a non-const pointer. */
+config_var_t *
+config_find_option_mutable(config_format_t *fmt, const char *key)
+{
+ int i;
+ size_t keylen = strlen(key);
+ if (!keylen)
+ return NULL; /* if they say "--" on the command line, it's not an option */
+ /* First, check for an exact (case-insensitive) match */
+ for (i=0; fmt->vars[i].name; ++i) {
+ if (!strcasecmp(key, fmt->vars[i].name)) {
+ return &fmt->vars[i];
+ }
+ }
+ /* If none, check for an abbreviated match */
+ for (i=0; fmt->vars[i].name; ++i) {
+ if (!strncasecmp(key, fmt->vars[i].name, keylen)) {
+ log_warn(LD_CONFIG, "The abbreviation '%s' is deprecated. "
+ "Please use '%s' instead",
+ key, fmt->vars[i].name);
+ return &fmt->vars[i];
+ }
+ }
+ /* Okay, unrecognized option */
+ return NULL;
+}
+
+/** If <b>key</b> is a configuration option, return the corresponding const
+ * config_var_t. Otherwise, if <b>key</b> is a non-standard abbreviation,
+ * warn, and return the corresponding const config_var_t. Otherwise return
+ * NULL.
+ */
+const config_var_t *
+config_find_option(const config_format_t *fmt, const char *key)
+{
+ return config_find_option_mutable((config_format_t*)fmt, key);
+}
+
+/** Return the number of option entries in <b>fmt</b>. */
+static int
+config_count_options(const config_format_t *fmt)
+{
+ int i;
+ for (i=0; fmt->vars[i].name; ++i)
+ ;
+ return i;
+}
+
+/*
+ * Functions to assign config options.
+ */
+
+/** <b>c</b>-\>key is known to be a real key. Update <b>options</b>
+ * with <b>c</b>-\>value and return 0, or return -1 if bad value.
+ *
+ * Called from config_assign_line() and option_reset().
+ */
+static int
+config_assign_value(const config_format_t *fmt, void *options,
+ config_line_t *c, char **msg)
+{
+ int i, ok;
+ const config_var_t *var;
+ void *lvalue;
+ int *csv_int;
+ smartlist_t *csv_str;
+
+ CONFIG_CHECK(fmt, options);
+
+ var = config_find_option(fmt, c->key);
+ tor_assert(var);
+
+ lvalue = STRUCT_VAR_P(options, var->var_offset);
+
+ switch (var->type) {
+
+ case CONFIG_TYPE_PORT:
+ if (!strcasecmp(c->value, "auto")) {
+ *(int *)lvalue = CFG_AUTO_PORT;
+ break;
+ }
+ /* fall through */
+ case CONFIG_TYPE_INT:
+ case CONFIG_TYPE_UINT:
+ i = (int)tor_parse_long(c->value, 10,
+ var->type==CONFIG_TYPE_INT ? INT_MIN : 0,
+ var->type==CONFIG_TYPE_PORT ? 65535 : INT_MAX,
+ &ok, NULL);
+ if (!ok) {
+ tor_asprintf(msg,
+ "Int keyword '%s %s' is malformed or out of bounds.",
+ c->key, c->value);
+ return -1;
+ }
+ *(int *)lvalue = i;
+ break;
+
+ case CONFIG_TYPE_INTERVAL: {
+ i = config_parse_interval(c->value, &ok);
+ if (!ok) {
+ tor_asprintf(msg,
+ "Interval '%s %s' is malformed or out of bounds.",
+ c->key, c->value);
+ return -1;
+ }
+ *(int *)lvalue = i;
+ break;
+ }
+
+ case CONFIG_TYPE_MSEC_INTERVAL: {
+ i = config_parse_msec_interval(c->value, &ok);
+ if (!ok) {
+ tor_asprintf(msg,
+ "Msec interval '%s %s' is malformed or out of bounds.",
+ c->key, c->value);
+ return -1;
+ }
+ *(int *)lvalue = i;
+ break;
+ }
+
+ case CONFIG_TYPE_MEMUNIT: {
+ uint64_t u64 = config_parse_memunit(c->value, &ok);
+ if (!ok) {
+ tor_asprintf(msg,
+ "Value '%s %s' is malformed or out of bounds.",
+ c->key, c->value);
+ return -1;
+ }
+ *(uint64_t *)lvalue = u64;
+ break;
+ }
+
+ case CONFIG_TYPE_BOOL:
+ i = (int)tor_parse_long(c->value, 10, 0, 1, &ok, NULL);
+ if (!ok) {
+ tor_asprintf(msg,
+ "Boolean '%s %s' expects 0 or 1.",
+ c->key, c->value);
+ return -1;
+ }
+ *(int *)lvalue = i;
+ break;
+
+ case CONFIG_TYPE_AUTOBOOL:
+ if (!strcmp(c->value, "auto"))
+ *(int *)lvalue = -1;
+ else if (!strcmp(c->value, "0"))
+ *(int *)lvalue = 0;
+ else if (!strcmp(c->value, "1"))
+ *(int *)lvalue = 1;
+ else {
+ tor_asprintf(msg, "Boolean '%s %s' expects 0, 1, or 'auto'.",
+ c->key, c->value);
+ return -1;
+ }
+ break;
+
+ case CONFIG_TYPE_STRING:
+ case CONFIG_TYPE_FILENAME:
+ tor_free(*(char **)lvalue);
+ *(char **)lvalue = tor_strdup(c->value);
+ break;
+
+ case CONFIG_TYPE_DOUBLE:
+ *(double *)lvalue = atof(c->value);
+ break;
+
+ case CONFIG_TYPE_ISOTIME:
+ if (parse_iso_time(c->value, (time_t *)lvalue)) {
+ tor_asprintf(msg,
+ "Invalid time '%s' for keyword '%s'", c->value, c->key);
+ return -1;
+ }
+ break;
+
+ case CONFIG_TYPE_ROUTERSET:
+ if (*(routerset_t**)lvalue) {
+ routerset_free(*(routerset_t**)lvalue);
+ }
+ *(routerset_t**)lvalue = routerset_new();
+ if (routerset_parse(*(routerset_t**)lvalue, c->value, c->key)<0) {
+ tor_asprintf(msg, "Invalid exit list '%s' for option '%s'",
+ c->value, c->key);
+ return -1;
+ }
+ break;
+
+ case CONFIG_TYPE_CSV:
+ if (*(smartlist_t**)lvalue) {
+ SMARTLIST_FOREACH(*(smartlist_t**)lvalue, char *, cp, tor_free(cp));
+ smartlist_clear(*(smartlist_t**)lvalue);
+ } else {
+ *(smartlist_t**)lvalue = smartlist_new();
+ }
+
+ smartlist_split_string(*(smartlist_t**)lvalue, c->value, ",",
+ SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
+ break;
+
+ case CONFIG_TYPE_CSV_INTERVAL:
+ if (*(smartlist_t**)lvalue) {
+ SMARTLIST_FOREACH(*(smartlist_t**)lvalue, int *, cp, tor_free(cp));
+ smartlist_clear(*(smartlist_t**)lvalue);
+ } else {
+ *(smartlist_t**)lvalue = smartlist_new();
+ }
+ csv_str = smartlist_new();
+ smartlist_split_string(csv_str, c->value, ",",
+ SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
+ SMARTLIST_FOREACH_BEGIN(csv_str, char *, str)
+ {
+ i = config_parse_interval(str, &ok);
+ if (!ok) {
+ tor_asprintf(msg,
+ "Interval in '%s %s' is malformed or out of bounds.",
+ c->key, c->value);
+ SMARTLIST_FOREACH(csv_str, char *, cp, tor_free(cp));
+ smartlist_free(csv_str);
+ return -1;
+ }
+ csv_int = tor_malloc_zero(sizeof(int));
+ *csv_int = i;
+ smartlist_add(*(smartlist_t**)lvalue, csv_int);
+ }
+ SMARTLIST_FOREACH_END(str);
+ SMARTLIST_FOREACH(csv_str, char *, cp, tor_free(cp));
+ smartlist_free(csv_str);
+ break;
+
+ case CONFIG_TYPE_LINELIST:
+ case CONFIG_TYPE_LINELIST_S:
+ {
+ config_line_t *lastval = *(config_line_t**)lvalue;
+ if (lastval && lastval->fragile) {
+ if (c->command != CONFIG_LINE_APPEND) {
+ config_free_lines(lastval);
+ *(config_line_t**)lvalue = NULL;
+ } else {
+ lastval->fragile = 0;
+ }
+ }
+
+ config_line_append((config_line_t**)lvalue, c->key, c->value);
+ }
+ break;
+ case CONFIG_TYPE_OBSOLETE:
+ log_warn(LD_CONFIG, "Skipping obsolete configuration option '%s'", c->key);
+ break;
+ case CONFIG_TYPE_LINELIST_V:
+ tor_asprintf(msg,
+ "You may not provide a value for virtual option '%s'", c->key);
+ return -1;
+ default:
+ tor_assert(0);
+ break;
+ }
+ return 0;
+}
+
+/** Mark every linelist in <b>options</b> "fragile", so that fresh assignments
+ * to it will replace old ones. */
+static void
+config_mark_lists_fragile(const config_format_t *fmt, void *options)
+{
+ int i;
+ tor_assert(fmt);
+ tor_assert(options);
+
+ for (i = 0; fmt->vars[i].name; ++i) {
+ const config_var_t *var = &fmt->vars[i];
+ config_line_t *list;
+ if (var->type != CONFIG_TYPE_LINELIST &&
+ var->type != CONFIG_TYPE_LINELIST_V)
+ continue;
+
+ list = *(config_line_t **)STRUCT_VAR_P(options, var->var_offset);
+ if (list)
+ list->fragile = 1;
+ }
+}
+
+/** If <b>c</b> is a syntactically valid configuration line, update
+ * <b>options</b> with its value and return 0. Otherwise return -1 for bad
+ * key, -2 for bad value.
+ *
+ * If <b>clear_first</b> is set, clear the value first. Then if
+ * <b>use_defaults</b> is set, set the value to the default.
+ *
+ * Called from config_assign().
+ */
+static int
+config_assign_line(const config_format_t *fmt, void *options,
+ config_line_t *c, int use_defaults,
+ int clear_first, bitarray_t *options_seen, char **msg)
+{
+ const config_var_t *var;
+
+ CONFIG_CHECK(fmt, options);
+
+ var = config_find_option(fmt, c->key);
+ if (!var) {
+ if (fmt->extra) {
+ void *lvalue = STRUCT_VAR_P(options, fmt->extra->var_offset);
+ log_info(LD_CONFIG,
+ "Found unrecognized option '%s'; saving it.", c->key);
+ config_line_append((config_line_t**)lvalue, c->key, c->value);
+ return 0;
+ } else {
+ tor_asprintf(msg,
+ "Unknown option '%s'. Failing.", c->key);
+ return -1;
+ }
+ }
+
+ /* Put keyword into canonical case. */
+ if (strcmp(var->name, c->key)) {
+ tor_free(c->key);
+ c->key = tor_strdup(var->name);
+ }
+
+ if (!strlen(c->value)) {
+ /* reset or clear it, then return */
+ if (!clear_first) {
+ if ((var->type == CONFIG_TYPE_LINELIST ||
+ var->type == CONFIG_TYPE_LINELIST_S) &&
+ c->command != CONFIG_LINE_CLEAR) {
+ /* We got an empty linelist from the torrc or command line.
+ As a special case, call this an error. Warn and ignore. */
+ log_warn(LD_CONFIG,
+ "Linelist option '%s' has no value. Skipping.", c->key);
+ } else { /* not already cleared */
+ config_reset(fmt, options, var, use_defaults);
+ }
+ }
+ return 0;
+ } else if (c->command == CONFIG_LINE_CLEAR && !clear_first) {
+ config_reset(fmt, options, var, use_defaults);
+ }
+
+ if (options_seen && (var->type != CONFIG_TYPE_LINELIST &&
+ var->type != CONFIG_TYPE_LINELIST_S)) {
+ /* We're tracking which options we've seen, and this option is not
+ * supposed to occur more than once. */
+ int var_index = (int)(var - fmt->vars);
+ if (bitarray_is_set(options_seen, var_index)) {
+ log_warn(LD_CONFIG, "Option '%s' used more than once; all but the last "
+ "value will be ignored.", var->name);
+ }
+ bitarray_set(options_seen, var_index);
+ }
+
+ if (config_assign_value(fmt, options, c, msg) < 0)
+ return -2;
+ return 0;
+}
+
+/** Restore the option named <b>key</b> in options to its default value.
+ * Called from config_assign(). */
+static void
+config_reset_line(const config_format_t *fmt, void *options,
+ const char *key, int use_defaults)
+{
+ const config_var_t *var;
+
+ CONFIG_CHECK(fmt, options);
+
+ var = config_find_option(fmt, key);
+ if (!var)
+ return; /* give error on next pass. */
+
+ config_reset(fmt, options, var, use_defaults);
+}
+
+/** Return true iff value needs to be quoted and escaped to be used in
+ * a configuration file. */
+static int
+config_value_needs_escape(const char *value)
+{
+ if (*value == '\"')
+ return 1;
+ while (*value) {
+ switch (*value)
+ {
+ case '\r':
+ case '\n':
+ case '#':
+ /* Note: quotes and backspaces need special handling when we are using
+ * quotes, not otherwise, so they don't trigger escaping on their
+ * own. */
+ return 1;
+ default:
+ if (!TOR_ISPRINT(*value))
+ return 1;
+ }
+ ++value;
+ }
+ return 0;
+}
+
+/** Return a newly allocated deep copy of the lines in <b>inp</b>. */
+config_line_t *
+config_lines_dup(const config_line_t *inp)
+{
+ config_line_t *result = NULL;
+ config_line_t **next_out = &result;
+ while (inp) {
+ *next_out = tor_malloc_zero(sizeof(config_line_t));
+ (*next_out)->key = tor_strdup(inp->key);
+ (*next_out)->value = tor_strdup(inp->value);
+ inp = inp->next;
+ next_out = &((*next_out)->next);
+ }
+ (*next_out) = NULL;
+ return result;
+}
+
+/** Return newly allocated line or lines corresponding to <b>key</b> in the
+ * configuration <b>options</b>. If <b>escape_val</b> is true and a
+ * value needs to be quoted before it's put in a config file, quote and
+ * escape that value. Return NULL if no such key exists. */
+config_line_t *
+config_get_assigned_option(const config_format_t *fmt, const void *options,
+ const char *key, int escape_val)
+{
+ const config_var_t *var;
+ const void *value;
+ config_line_t *result;
+ smartlist_t *csv_str;
+ tor_assert(options && key);
+
+ CONFIG_CHECK(fmt, options);
+
+ var = config_find_option(fmt, key);
+ if (!var) {
+ log_warn(LD_CONFIG, "Unknown option '%s'. Failing.", key);
+ return NULL;
+ }
+ value = STRUCT_VAR_P(options, var->var_offset);
+
+ result = tor_malloc_zero(sizeof(config_line_t));
+ result->key = tor_strdup(var->name);
+ switch (var->type)
+ {
+ case CONFIG_TYPE_STRING:
+ case CONFIG_TYPE_FILENAME:
+ if (*(char**)value) {
+ result->value = tor_strdup(*(char**)value);
+ } else {
+ tor_free(result->key);
+ tor_free(result);
+ return NULL;
+ }
+ break;
+ case CONFIG_TYPE_ISOTIME:
+ if (*(time_t*)value) {
+ result->value = tor_malloc(ISO_TIME_LEN+1);
+ format_iso_time(result->value, *(time_t*)value);
+ } else {
+ tor_free(result->key);
+ tor_free(result);
+ }
+ escape_val = 0; /* Can't need escape. */
+ break;
+ case CONFIG_TYPE_PORT:
+ if (*(int*)value == CFG_AUTO_PORT) {
+ result->value = tor_strdup("auto");
+ escape_val = 0;
+ break;
+ }
+ /* fall through */
+ case CONFIG_TYPE_INTERVAL:
+ case CONFIG_TYPE_MSEC_INTERVAL:
+ case CONFIG_TYPE_UINT:
+ case CONFIG_TYPE_INT:
+ /* This means every or_options_t uint or bool element
+ * needs to be an int. Not, say, a uint16_t or char. */
+ tor_asprintf(&result->value, "%d", *(int*)value);
+ escape_val = 0; /* Can't need escape. */
+ break;
+ case CONFIG_TYPE_MEMUNIT:
+ tor_asprintf(&result->value, U64_FORMAT,
+ U64_PRINTF_ARG(*(uint64_t*)value));
+ escape_val = 0; /* Can't need escape. */
+ break;
+ case CONFIG_TYPE_DOUBLE:
+ tor_asprintf(&result->value, "%f", *(double*)value);
+ escape_val = 0; /* Can't need escape. */
+ break;
+
+ case CONFIG_TYPE_AUTOBOOL:
+ if (*(int*)value == -1) {
+ result->value = tor_strdup("auto");
+ escape_val = 0;
+ break;
+ }
+ /* fall through */
+ case CONFIG_TYPE_BOOL:
+ result->value = tor_strdup(*(int*)value ? "1" : "0");
+ escape_val = 0; /* Can't need escape. */
+ break;
+ case CONFIG_TYPE_ROUTERSET:
+ result->value = routerset_to_string(*(routerset_t**)value);
+ break;
+ case CONFIG_TYPE_CSV:
+ if (*(smartlist_t**)value)
+ result->value =
+ smartlist_join_strings(*(smartlist_t**)value, ",", 0, NULL);
+ else
+ result->value = tor_strdup("");
+ break;
+ case CONFIG_TYPE_CSV_INTERVAL:
+ if (*(smartlist_t**)value) {
+ csv_str = smartlist_new();
+ SMARTLIST_FOREACH_BEGIN(*(smartlist_t**)value, int *, i)
+ {
+ smartlist_add_asprintf(csv_str, "%d", *i);
+ }
+ SMARTLIST_FOREACH_END(i);
+ result->value = smartlist_join_strings(csv_str, ",", 0, NULL);
+ SMARTLIST_FOREACH(csv_str, char *, cp, tor_free(cp));
+ smartlist_free(csv_str);
+ } else
+ result->value = tor_strdup("");
+ break;
+ case CONFIG_TYPE_OBSOLETE:
+ log_fn(LOG_INFO, LD_CONFIG,
+ "You asked me for the value of an obsolete config option '%s'.",
+ key);
+ tor_free(result->key);
+ tor_free(result);
+ return NULL;
+ case CONFIG_TYPE_LINELIST_S:
+ log_warn(LD_CONFIG,
+ "Can't return context-sensitive '%s' on its own", key);
+ tor_free(result->key);
+ tor_free(result);
+ return NULL;
+ case CONFIG_TYPE_LINELIST:
+ case CONFIG_TYPE_LINELIST_V:
+ tor_free(result->key);
+ tor_free(result);
+ result = config_lines_dup(*(const config_line_t**)value);
+ break;
+ default:
+ tor_free(result->key);
+ tor_free(result);
+ log_warn(LD_BUG,"Unknown type %d for known key '%s'",
+ var->type, key);
+ return NULL;
+ }
+
+ if (escape_val) {
+ config_line_t *line;
+ for (line = result; line; line = line->next) {
+ if (line->value && config_value_needs_escape(line->value)) {
+ char *newval = esc_for_log(line->value);
+ tor_free(line->value);
+ line->value = newval;
+ }
+ }
+ }
+
+ return result;
+}
+/** Iterate through the linked list of requested options <b>list</b>.
+ * For each item, convert as appropriate and assign to <b>options</b>.
+ * If an item is unrecognized, set *msg and return -1 immediately,
+ * else return 0 for success.
+ *
+ * If <b>clear_first</b>, interpret config options as replacing (not
+ * extending) their previous values. If <b>clear_first</b> is set,
+ * then <b>use_defaults</b> to decide if you set to defaults after
+ * clearing, or make the value 0 or NULL.
+ *
+ * Here are the use cases:
+ * 1. A non-empty AllowInvalid line in your torrc. Appends to current
+ * if linelist, replaces current if csv.
+ * 2. An empty AllowInvalid line in your torrc. Should clear it.
+ * 3. "RESETCONF AllowInvalid" sets it to default.
+ * 4. "SETCONF AllowInvalid" makes it NULL.
+ * 5. "SETCONF AllowInvalid=foo" clears it and sets it to "foo".
+ *
+ * Use_defaults Clear_first
+ * 0 0 "append"
+ * 1 0 undefined, don't use
+ * 0 1 "set to null first"
+ * 1 1 "set to defaults first"
+ * Return 0 on success, -1 on bad key, -2 on bad value.
+ *
+ * As an additional special case, if a LINELIST config option has
+ * no value and clear_first is 0, then warn and ignore it.
+ */
+
+/*
+There are three call cases for config_assign() currently.
+
+Case one: Torrc entry
+options_init_from_torrc() calls config_assign(0, 0)
+ calls config_assign_line(0, 0).
+ if value is empty, calls config_reset(0) and returns.
+ calls config_assign_value(), appends.
+
+Case two: setconf
+options_trial_assign() calls config_assign(0, 1)
+ calls config_reset_line(0)
+ calls config_reset(0)
+ calls option_clear().
+ calls config_assign_line(0, 1).
+ if value is empty, returns.
+ calls config_assign_value(), appends.
+
+Case three: resetconf
+options_trial_assign() calls config_assign(1, 1)
+ calls config_reset_line(1)
+ calls config_reset(1)
+ calls option_clear().
+ calls config_assign_value(default)
+ calls config_assign_line(1, 1).
+ returns.
+*/
+int
+config_assign(const config_format_t *fmt, void *options, config_line_t *list,
+ int use_defaults, int clear_first, char **msg)
+{
+ config_line_t *p;
+ bitarray_t *options_seen;
+ const int n_options = config_count_options(fmt);
+
+ CONFIG_CHECK(fmt, options);
+
+ /* pass 1: normalize keys */
+ for (p = list; p; p = p->next) {
+ const char *full = config_expand_abbrev(fmt, p->key, 0, 1);
+ if (strcmp(full,p->key)) {
+ tor_free(p->key);
+ p->key = tor_strdup(full);
+ }
+ }
+
+ /* pass 2: if we're reading from a resetting source, clear all
+ * mentioned config options, and maybe set to their defaults. */
+ if (clear_first) {
+ for (p = list; p; p = p->next)
+ config_reset_line(fmt, options, p->key, use_defaults);
+ }
+
+ options_seen = bitarray_init_zero(n_options);
+ /* pass 3: assign. */
+ while (list) {
+ int r;
+ if ((r=config_assign_line(fmt, options, list, use_defaults,
+ clear_first, options_seen, msg))) {
+ bitarray_free(options_seen);
+ return r;
+ }
+ list = list->next;
+ }
+ bitarray_free(options_seen);
+
+ /** Now we're done assigning a group of options to the configuration.
+ * Subsequent group assignments should _replace_ linelists, not extend
+ * them. */
+ config_mark_lists_fragile(fmt, options);
+
+ return 0;
+}
+
+/** Reset config option <b>var</b> to 0, 0.0, NULL, or the equivalent.
+ * Called from config_reset() and config_free(). */
+static void
+config_clear(const config_format_t *fmt, void *options,
+ const config_var_t *var)
+{
+ void *lvalue = STRUCT_VAR_P(options, var->var_offset);
+ (void)fmt; /* unused */
+ switch (var->type) {
+ case CONFIG_TYPE_STRING:
+ case CONFIG_TYPE_FILENAME:
+ tor_free(*(char**)lvalue);
+ break;
+ case CONFIG_TYPE_DOUBLE:
+ *(double*)lvalue = 0.0;
+ break;
+ case CONFIG_TYPE_ISOTIME:
+ *(time_t*)lvalue = 0;
+ break;
+ case CONFIG_TYPE_INTERVAL:
+ case CONFIG_TYPE_MSEC_INTERVAL:
+ case CONFIG_TYPE_UINT:
+ case CONFIG_TYPE_INT:
+ case CONFIG_TYPE_PORT:
+ case CONFIG_TYPE_BOOL:
+ *(int*)lvalue = 0;
+ break;
+ case CONFIG_TYPE_AUTOBOOL:
+ *(int*)lvalue = -1;
+ break;
+ case CONFIG_TYPE_MEMUNIT:
+ *(uint64_t*)lvalue = 0;
+ break;
+ case CONFIG_TYPE_ROUTERSET:
+ if (*(routerset_t**)lvalue) {
+ routerset_free(*(routerset_t**)lvalue);
+ *(routerset_t**)lvalue = NULL;
+ }
+ break;
+ case CONFIG_TYPE_CSV:
+ if (*(smartlist_t**)lvalue) {
+ SMARTLIST_FOREACH(*(smartlist_t **)lvalue, char *, cp, tor_free(cp));
+ smartlist_free(*(smartlist_t **)lvalue);
+ *(smartlist_t **)lvalue = NULL;
+ }
+ break;
+ case CONFIG_TYPE_CSV_INTERVAL:
+ if (*(smartlist_t**)lvalue) {
+ SMARTLIST_FOREACH(*(smartlist_t **)lvalue, int *, cp, tor_free(cp));
+ smartlist_free(*(smartlist_t **)lvalue);
+ *(smartlist_t **)lvalue = NULL;
+ }
+ break;
+ case CONFIG_TYPE_LINELIST:
+ case CONFIG_TYPE_LINELIST_S:
+ config_free_lines(*(config_line_t **)lvalue);
+ *(config_line_t **)lvalue = NULL;
+ break;
+ case CONFIG_TYPE_LINELIST_V:
+ /* handled by linelist_s. */
+ break;
+ case CONFIG_TYPE_OBSOLETE:
+ break;
+ }
+}
+
+/** Clear the option indexed by <b>var</b> in <b>options</b>. Then if
+ * <b>use_defaults</b>, set it to its default value.
+ * Called by config_init() and option_reset_line() and option_assign_line(). */
+static void
+config_reset(const config_format_t *fmt, void *options,
+ const config_var_t *var, int use_defaults)
+{
+ config_line_t *c;
+ char *msg = NULL;
+ CONFIG_CHECK(fmt, options);
+ config_clear(fmt, options, var); /* clear it first */
+ if (!use_defaults)
+ return; /* all done */
+ if (var->initvalue) {
+ c = tor_malloc_zero(sizeof(config_line_t));
+ c->key = tor_strdup(var->name);
+ c->value = tor_strdup(var->initvalue);
+ if (config_assign_value(fmt, options, c, &msg) < 0) {
+ log_warn(LD_BUG, "Failed to assign default: %s", msg);
+ tor_free(msg); /* if this happens it's a bug */
+ }
+ config_free_lines(c);
+ }
+}
+
+/** Release storage held by <b>options</b>. */
+void
+config_free(const config_format_t *fmt, void *options)
+{
+ int i;
+
+ if (!options)
+ return;
+
+ tor_assert(fmt);
+
+ for (i=0; fmt->vars[i].name; ++i)
+ config_clear(fmt, options, &(fmt->vars[i]));
+ if (fmt->extra) {
+ config_line_t **linep = STRUCT_VAR_P(options, fmt->extra->var_offset);
+ config_free_lines(*linep);
+ *linep = NULL;
+ }
+ tor_free(options);
+}
+
+/** Return true iff a and b contain identical keys and values in identical
+ * order. */
+int
+config_lines_eq(config_line_t *a, config_line_t *b)
+{
+ while (a && b) {
+ if (strcasecmp(a->key, b->key) || strcmp(a->value, b->value))
+ return 0;
+ a = a->next;
+ b = b->next;
+ }
+ if (a || b)
+ return 0;
+ return 1;
+}
+
+/** Return the number of lines in <b>a</b> whose key is <b>key</b>. */
+int
+config_count_key(const config_line_t *a, const char *key)
+{
+ int n = 0;
+ while (a) {
+ if (!strcasecmp(a->key, key)) {
+ ++n;
+ }
+ a = a->next;
+ }
+ return n;
+}
+
+/** Return true iff the option <b>name</b> has the same value in <b>o1</b>
+ * and <b>o2</b>. Must not be called for LINELIST_S or OBSOLETE options.
+ */
+int
+config_is_same(const config_format_t *fmt,
+ const void *o1, const void *o2,
+ const char *name)
+{
+ config_line_t *c1, *c2;
+ int r = 1;
+ CONFIG_CHECK(fmt, o1);
+ CONFIG_CHECK(fmt, o2);
+
+ c1 = config_get_assigned_option(fmt, o1, name, 0);
+ c2 = config_get_assigned_option(fmt, o2, name, 0);
+ r = config_lines_eq(c1, c2);
+ config_free_lines(c1);
+ config_free_lines(c2);
+ return r;
+}
+
+/** Copy storage held by <b>old</b> into a new or_options_t and return it. */
+void *
+config_dup(const config_format_t *fmt, const void *old)
+{
+ void *newopts;
+ int i;
+ config_line_t *line;
+
+ newopts = config_new(fmt);
+ for (i=0; fmt->vars[i].name; ++i) {
+ if (fmt->vars[i].type == CONFIG_TYPE_LINELIST_S)
+ continue;
+ if (fmt->vars[i].type == CONFIG_TYPE_OBSOLETE)
+ continue;
+ line = config_get_assigned_option(fmt, old, fmt->vars[i].name, 0);
+ if (line) {
+ char *msg = NULL;
+ if (config_assign(fmt, newopts, line, 0, 0, &msg) < 0) {
+ log_err(LD_BUG, "config_get_assigned_option() generated "
+ "something we couldn't config_assign(): %s", msg);
+ tor_free(msg);
+ tor_assert(0);
+ }
+ }
+ config_free_lines(line);
+ }
+ return newopts;
+}
+/** Set all vars in the configuration object <b>options</b> to their default
+ * values. */
+void
+config_init(const config_format_t *fmt, void *options)
+{
+ int i;
+ const config_var_t *var;
+ CONFIG_CHECK(fmt, options);
+
+ for (i=0; fmt->vars[i].name; ++i) {
+ var = &fmt->vars[i];
+ if (!var->initvalue)
+ continue; /* defaults to NULL or 0 */
+ config_reset(fmt, options, var, 1);
+ }
+}
+
+/** Allocate and return a new string holding the written-out values of the vars
+ * in 'options'. If 'minimal', do not write out any default-valued vars.
+ * Else, if comment_defaults, write default values as comments.
+ */
+char *
+config_dump(const config_format_t *fmt, const void *default_options,
+ const void *options, int minimal,
+ int comment_defaults)
+{
+ smartlist_t *elements;
+ const void *defaults = default_options;
+ void *defaults_tmp = NULL;
+ config_line_t *line, *assigned;
+ char *result;
+ int i;
+ char *msg = NULL;
+
+ if (defaults == NULL) {
+ defaults = defaults_tmp = config_new(fmt);
+ config_init(fmt, defaults_tmp);
+ }
+
+ /* XXX use a 1 here so we don't add a new log line while dumping */
+ if (default_options == NULL) {
+ if (fmt->validate_fn(NULL, defaults_tmp, defaults_tmp, 1, &msg) < 0) {
+ log_err(LD_BUG, "Failed to validate default config: %s", msg);
+ tor_free(msg);
+ tor_assert(0);
+ }
+ }
+
+ elements = smartlist_new();
+ for (i=0; fmt->vars[i].name; ++i) {
+ int comment_option = 0;
+ if (fmt->vars[i].type == CONFIG_TYPE_OBSOLETE ||
+ fmt->vars[i].type == CONFIG_TYPE_LINELIST_S)
+ continue;
+ /* Don't save 'hidden' control variables. */
+ if (!strcmpstart(fmt->vars[i].name, "__"))
+ continue;
+ if (minimal && config_is_same(fmt, options, defaults, fmt->vars[i].name))
+ continue;
+ else if (comment_defaults &&
+ config_is_same(fmt, options, defaults, fmt->vars[i].name))
+ comment_option = 1;
+
+ line = assigned =
+ config_get_assigned_option(fmt, options, fmt->vars[i].name, 1);
+
+ for (; line; line = line->next) {
+ smartlist_add_asprintf(elements, "%s%s %s\n",
+ comment_option ? "# " : "",
+ line->key, line->value);
+ }
+ config_free_lines(assigned);
+ }
+
+ if (fmt->extra) {
+ line = *(config_line_t**)STRUCT_VAR_P(options, fmt->extra->var_offset);
+ for (; line; line = line->next) {
+ smartlist_add_asprintf(elements, "%s %s\n", line->key, line->value);
+ }
+ }
+
+ result = smartlist_join_strings(elements, "", 0, NULL);
+ SMARTLIST_FOREACH(elements, char *, cp, tor_free(cp));
+ smartlist_free(elements);
+ if (defaults_tmp)
+ config_free(fmt, defaults_tmp);
+ return result;
+}
+
+/** Mapping from a unit name to a multiplier for converting that unit into a
+ * base unit. Used by config_parse_unit. */
+struct unit_table_t {
+ const char *unit; /**< The name of the unit */
+ uint64_t multiplier; /**< How many of the base unit appear in this unit */
+};
+
+/** Table to map the names of memory units to the number of bytes they
+ * contain. */
+static struct unit_table_t memory_units[] = {
+ { "", 1 },
+ { "b", 1<< 0 },
+ { "byte", 1<< 0 },
+ { "bytes", 1<< 0 },
+ { "kb", 1<<10 },
+ { "kbyte", 1<<10 },
+ { "kbytes", 1<<10 },
+ { "kilobyte", 1<<10 },
+ { "kilobytes", 1<<10 },
+ { "kilobits", 1<<7 },
+ { "kilobit", 1<<7 },
+ { "kbits", 1<<7 },
+ { "kbit", 1<<7 },
+ { "m", 1<<20 },
+ { "mb", 1<<20 },
+ { "mbyte", 1<<20 },
+ { "mbytes", 1<<20 },
+ { "megabyte", 1<<20 },
+ { "megabytes", 1<<20 },
+ { "megabits", 1<<17 },
+ { "megabit", 1<<17 },
+ { "mbits", 1<<17 },
+ { "mbit", 1<<17 },
+ { "gb", 1<<30 },
+ { "gbyte", 1<<30 },
+ { "gbytes", 1<<30 },
+ { "gigabyte", 1<<30 },
+ { "gigabytes", 1<<30 },
+ { "gigabits", 1<<27 },
+ { "gigabit", 1<<27 },
+ { "gbits", 1<<27 },
+ { "gbit", 1<<27 },
+ { "tb", U64_LITERAL(1)<<40 },
+ { "terabyte", U64_LITERAL(1)<<40 },
+ { "terabytes", U64_LITERAL(1)<<40 },
+ { "terabits", U64_LITERAL(1)<<37 },
+ { "terabit", U64_LITERAL(1)<<37 },
+ { "tbits", U64_LITERAL(1)<<37 },
+ { "tbit", U64_LITERAL(1)<<37 },
+ { NULL, 0 },
+};
+
+/** Table to map the names of time units to the number of seconds they
+ * contain. */
+static struct unit_table_t time_units[] = {
+ { "", 1 },
+ { "second", 1 },
+ { "seconds", 1 },
+ { "minute", 60 },
+ { "minutes", 60 },
+ { "hour", 60*60 },
+ { "hours", 60*60 },
+ { "day", 24*60*60 },
+ { "days", 24*60*60 },
+ { "week", 7*24*60*60 },
+ { "weeks", 7*24*60*60 },
+ { "month", 2629728, }, /* about 30.437 days */
+ { "months", 2629728, },
+ { NULL, 0 },
+};
+
+/** Table to map the names of time units to the number of milliseconds
+ * they contain. */
+static struct unit_table_t time_msec_units[] = {
+ { "", 1 },
+ { "msec", 1 },
+ { "millisecond", 1 },
+ { "milliseconds", 1 },
+ { "second", 1000 },
+ { "seconds", 1000 },
+ { "minute", 60*1000 },
+ { "minutes", 60*1000 },
+ { "hour", 60*60*1000 },
+ { "hours", 60*60*1000 },
+ { "day", 24*60*60*1000 },
+ { "days", 24*60*60*1000 },
+ { "week", 7*24*60*60*1000 },
+ { "weeks", 7*24*60*60*1000 },
+ { NULL, 0 },
+};
+
+/** Parse a string <b>val</b> containing a number, zero or more
+ * spaces, and an optional unit string. If the unit appears in the
+ * table <b>u</b>, then multiply the number by the unit multiplier.
+ * On success, set *<b>ok</b> to 1 and return this product.
+ * Otherwise, set *<b>ok</b> to 0.
+ */
+static uint64_t
+config_parse_units(const char *val, struct unit_table_t *u, int *ok)
+{
+ uint64_t v = 0;
+ double d = 0;
+ int use_float = 0;
+ char *cp;
+
+ tor_assert(ok);
+
+ v = tor_parse_uint64(val, 10, 0, UINT64_MAX, ok, &cp);
+ if (!*ok || (cp && *cp == '.')) {
+ d = tor_parse_double(val, 0, UINT64_MAX, ok, &cp);
+ if (!*ok)
+ goto done;
+ use_float = 1;
+ }
+
+ if (!cp) {
+ *ok = 1;
+ v = use_float ? DBL_TO_U64(d) : v;
+ goto done;
+ }
+
+ cp = (char*) eat_whitespace(cp);
+
+ for ( ;u->unit;++u) {
+ if (!strcasecmp(u->unit, cp)) {
+ if (use_float)
+ v = u->multiplier * d;
+ else
+ v *= u->multiplier;
+ *ok = 1;
+ goto done;
+ }
+ }
+ log_warn(LD_CONFIG, "Unknown unit '%s'.", cp);
+ *ok = 0;
+ done:
+
+ if (*ok)
+ return v;
+ else
+ return 0;
+}
+
+/** Parse a string in the format "number unit", where unit is a unit of
+ * information (byte, KB, M, etc). On success, set *<b>ok</b> to true
+ * and return the number of bytes specified. Otherwise, set
+ * *<b>ok</b> to false and return 0. */
+static uint64_t
+config_parse_memunit(const char *s, int *ok)
+{
+ uint64_t u = config_parse_units(s, memory_units, ok);
+ return u;
+}
+
+/** Parse a string in the format "number unit", where unit is a unit of
+ * time in milliseconds. On success, set *<b>ok</b> to true and return
+ * the number of milliseconds in the provided interval. Otherwise, set
+ * *<b>ok</b> to 0 and return -1. */
+static int
+config_parse_msec_interval(const char *s, int *ok)
+{
+ uint64_t r;
+ r = config_parse_units(s, time_msec_units, ok);
+ if (!ok)
+ return -1;
+ if (r > INT_MAX) {
+ log_warn(LD_CONFIG, "Msec interval '%s' is too long", s);
+ *ok = 0;
+ return -1;
+ }
+ return (int)r;
+}
+
+/** Parse a string in the format "number unit", where unit is a unit of time.
+ * On success, set *<b>ok</b> to true and return the number of seconds in
+ * the provided interval. Otherwise, set *<b>ok</b> to 0 and return -1.
+ */
+static int
+config_parse_interval(const char *s, int *ok)
+{
+ uint64_t r;
+ r = config_parse_units(s, time_units, ok);
+ if (!ok)
+ return -1;
+ if (r > INT_MAX) {
+ log_warn(LD_CONFIG, "Interval '%s' is too long", s);
+ *ok = 0;
+ return -1;
+ }
+ return (int)r;
+}
+
diff --git a/src/or/confparse.h b/src/or/confparse.h
new file mode 100644
index 000000000..2cd6c49a2
--- /dev/null
+++ b/src/or/confparse.h
@@ -0,0 +1,137 @@
+/* Copyright (c) 2001 Matej Pfajfar.
+ * Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#ifndef TOR_CONFPARSE_H
+#define TOR_CONFPARSE_H
+
+/** Enumeration of types which option values can take */
+typedef enum config_type_t {
+ CONFIG_TYPE_STRING = 0, /**< An arbitrary string. */
+ CONFIG_TYPE_FILENAME, /**< A filename: some prefixes get expanded. */
+ CONFIG_TYPE_UINT, /**< A non-negative integer less than MAX_INT */
+ CONFIG_TYPE_INT, /**< Any integer. */
+ CONFIG_TYPE_PORT, /**< A port from 1...65535, 0 for "not set", or
+ * "auto". */
+ CONFIG_TYPE_INTERVAL, /**< A number of seconds, with optional units*/
+ CONFIG_TYPE_MSEC_INTERVAL,/**< A number of milliseconds, with optional
+ * units */
+ CONFIG_TYPE_MEMUNIT, /**< A number of bytes, with optional units*/
+ CONFIG_TYPE_DOUBLE, /**< A floating-point value */
+ CONFIG_TYPE_BOOL, /**< A boolean value, expressed as 0 or 1. */
+ CONFIG_TYPE_AUTOBOOL, /**< A boolean+auto value, expressed 0 for false,
+ * 1 for true, and -1 for auto */
+ CONFIG_TYPE_ISOTIME, /**< An ISO-formatted time relative to UTC. */
+ CONFIG_TYPE_CSV, /**< A list of strings, separated by commas and
+ * optional whitespace. */
+ CONFIG_TYPE_CSV_INTERVAL, /**< A list of strings, separated by commas and
+ * optional whitespace, representing intervals in
+ * seconds, with optional units */
+ CONFIG_TYPE_LINELIST, /**< Uninterpreted config lines */
+ CONFIG_TYPE_LINELIST_S, /**< Uninterpreted, context-sensitive config lines,
+ * mixed with other keywords. */
+ CONFIG_TYPE_LINELIST_V, /**< Catch-all "virtual" option to summarize
+ * context-sensitive config lines when fetching.
+ */
+ CONFIG_TYPE_ROUTERSET, /**< A list of router names, addrs, and fps,
+ * parsed into a routerset_t. */
+ CONFIG_TYPE_OBSOLETE, /**< Obsolete (ignored) option. */
+} config_type_t;
+
+/** An abbreviation for a configuration option allowed on the command line. */
+typedef struct config_abbrev_t {
+ const char *abbreviated;
+ const char *full;
+ int commandline_only;
+ int warn;
+} config_abbrev_t;
+
+/* Handy macro for declaring "In the config file or on the command line,
+ * you can abbreviate <b>tok</b>s as <b>tok</b>". */
+#define PLURAL(tok) { #tok, #tok "s", 0, 0 }
+
+/** A variable allowed in the configuration file or on the command line. */
+typedef struct config_var_t {
+ const char *name; /**< The full keyword (case insensitive). */
+ config_type_t type; /**< How to interpret the type and turn it into a
+ * value. */
+ off_t var_offset; /**< Offset of the corresponding member of or_options_t. */
+ const char *initvalue; /**< String (or null) describing initial value. */
+} config_var_t;
+
+/** Represents an English description of a configuration variable; used when
+ * generating configuration file comments. */
+typedef struct config_var_description_t {
+ const char *name;
+ const char *description;
+} config_var_description_t;
+
+/** Type of a callback to validate whether a given configuration is
+ * well-formed and consistent. See options_trial_assign() for documentation
+ * of arguments. */
+typedef int (*validate_fn_t)(void*,void*,void*,int,char**);
+
+/** Information on the keys, value types, key-to-struct-member mappings,
+ * variable descriptions, validation functions, and abbreviations for a
+ * configuration or storage format. */
+typedef struct config_format_t {
+ size_t size; /**< Size of the struct that everything gets parsed into. */
+ uint32_t magic; /**< Required 'magic value' to make sure we have a struct
+ * of the right type. */
+ off_t magic_offset; /**< Offset of the magic value within the struct. */
+ config_abbrev_t *abbrevs; /**< List of abbreviations that we expand when
+ * parsing this format. */
+ config_var_t *vars; /**< List of variables we recognize, their default
+ * values, and where we stick them in the structure. */
+ validate_fn_t validate_fn; /**< Function to validate config. */
+ /** If present, extra is a LINELIST variable for unrecognized
+ * lines. Otherwise, unrecognized lines are an error. */
+ config_var_t *extra;
+} config_format_t;
+
+/** Macro: assert that <b>cfg</b> has the right magic field for format
+ * <b>fmt</b>. */
+#define CONFIG_CHECK(fmt, cfg) STMT_BEGIN \
+ tor_assert(fmt && cfg); \
+ tor_assert((fmt)->magic == \
+ *(uint32_t*)STRUCT_VAR_P(cfg,fmt->magic_offset)); \
+ STMT_END
+
+void *config_new(const config_format_t *fmt);
+void config_line_append(config_line_t **lst,
+ const char *key, const char *val);
+config_line_t *config_lines_dup(const config_line_t *inp);
+const config_line_t *config_line_find(const config_line_t *lines,
+ const char *key);
+void config_free(const config_format_t *fmt, void *options);
+int config_lines_eq(config_line_t *a, config_line_t *b);
+int config_count_key(const config_line_t *a, const char *key);
+config_line_t *config_get_assigned_option(const config_format_t *fmt,
+ const void *options, const char *key,
+ int escape_val);
+int config_is_same(const config_format_t *fmt,
+ const void *o1, const void *o2,
+ const char *name);
+void config_init(const config_format_t *fmt, void *options);
+void *config_dup(const config_format_t *fmt, const void *old);
+char *config_dump(const config_format_t *fmt, const void *default_options,
+ const void *options, int minimal,
+ int comment_defaults);
+int config_assign(const config_format_t *fmt, void *options,
+ config_line_t *list,
+ int use_defaults, int clear_first, char **msg);
+config_var_t *config_find_option_mutable(config_format_t *fmt,
+ const char *key);
+const config_var_t *config_find_option(const config_format_t *fmt,
+ const char *key);
+
+int config_get_lines(const char *string, config_line_t **result, int extended);
+void config_free_lines(config_line_t *front);
+const char *config_expand_abbrev(const config_format_t *fmt,
+ const char *option,
+ int command_line, int warn_obsolete);
+
+#endif
+
diff --git a/src/or/connection.c b/src/or/connection.c
index eac9c4f32..cef9172ff 100644
--- a/src/or/connection.c
+++ b/src/or/connection.c
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -10,8 +10,17 @@
* on connections.
**/
+#define CONNECTION_PRIVATE
#include "or.h"
#include "buffers.h"
+/*
+ * Define this so we get channel internal functions, since we're implementing
+ * part of a subclass (channel_tls_t).
+ */
+#define TOR_CHANNEL_INTERNAL_
+#define CONNECTION_PRIVATE
+#include "channel.h"
+#include "channeltls.h"
#include "circuitbuild.h"
#include "circuitlist.h"
#include "circuituse.h"
@@ -25,6 +34,8 @@
#include "dirserv.h"
#include "dns.h"
#include "dnsserv.h"
+#include "entrynodes.h"
+#include "ext_orport.h"
#include "geoip.h"
#include "main.h"
#include "policies.h"
@@ -34,7 +45,9 @@
#include "rendcommon.h"
#include "rephist.h"
#include "router.h"
+#include "transports.h"
#include "routerparse.h"
+#include "transports.h"
#ifdef USE_BUFFEREVENTS
#include <event2/event.h>
@@ -88,6 +101,7 @@ static smartlist_t *outgoing_addrs = NULL;
#define CASE_ANY_LISTENER_TYPE \
case CONN_TYPE_OR_LISTENER: \
+ case CONN_TYPE_EXT_OR_LISTENER: \
case CONN_TYPE_AP_LISTENER: \
case CONN_TYPE_DIR_LISTENER: \
case CONN_TYPE_CONTROL_LISTENER: \
@@ -119,6 +133,8 @@ conn_type_to_string(int type)
case CONN_TYPE_CPUWORKER: return "CPU worker";
case CONN_TYPE_CONTROL_LISTENER: return "Control listener";
case CONN_TYPE_CONTROL: return "Control";
+ case CONN_TYPE_EXT_OR: return "Extended OR";
+ case CONN_TYPE_EXT_OR_LISTENER: return "Extended OR listener";
default:
log_warn(LD_BUG, "unknown connection type %d", type);
tor_snprintf(buf, sizeof(buf), "unknown [%d]", type);
@@ -155,6 +171,18 @@ conn_state_to_string(int type, int state)
case OR_CONN_STATE_OPEN: return "open";
}
break;
+ case CONN_TYPE_EXT_OR:
+ switch (state) {
+ case EXT_OR_CONN_STATE_AUTH_WAIT_AUTH_TYPE:
+ return "waiting for authentication type";
+ case EXT_OR_CONN_STATE_AUTH_WAIT_CLIENT_NONCE:
+ return "waiting for client nonce";
+ case EXT_OR_CONN_STATE_AUTH_WAIT_CLIENT_HASH:
+ return "waiting for client hash";
+ case EXT_OR_CONN_STATE_OPEN: return "open";
+ case EXT_OR_CONN_STATE_FLUSHING: return "flushing final OKAY";
+ }
+ break;
case CONN_TYPE_EXIT:
switch (state) {
case EXIT_CONN_STATE_RESOLVING: return "waiting for dest info";
@@ -219,6 +247,7 @@ connection_type_uses_bufferevent(connection_t *conn)
case CONN_TYPE_DIR:
case CONN_TYPE_CONTROL:
case CONN_TYPE_OR:
+ case CONN_TYPE_EXT_OR:
case CONN_TYPE_CPUWORKER:
return 1;
default:
@@ -238,25 +267,35 @@ dir_connection_new(int socket_family)
}
/** Allocate and return a new or_connection_t, initialized as by
- * connection_init(). */
+ * connection_init().
+ *
+ * Set timestamp_last_added_nonpadding to now.
+ *
+ * Initialize active_circuit_pqueue.
+ *
+ * Set active_circuit_pqueue_last_recalibrated to current cell_ewma tick.
+ */
or_connection_t *
-or_connection_new(int socket_family)
+or_connection_new(int type, int socket_family)
{
or_connection_t *or_conn = tor_malloc_zero(sizeof(or_connection_t));
time_t now = time(NULL);
- connection_init(now, TO_CONN(or_conn), CONN_TYPE_OR, socket_family);
+ tor_assert(type == CONN_TYPE_OR || type == CONN_TYPE_EXT_OR);
+ connection_init(now, TO_CONN(or_conn), type, socket_family);
or_conn->timestamp_last_added_nonpadding = time(NULL);
- or_conn->next_circ_id = crypto_rand_int(1<<15);
- or_conn->active_circuit_pqueue = smartlist_new();
- or_conn->active_circuit_pqueue_last_recalibrated = cell_ewma_get_tick();
+ if (type == CONN_TYPE_EXT_OR)
+ connection_or_set_ext_or_identifier(or_conn);
return or_conn;
}
/** Allocate and return a new entry_connection_t, initialized as by
- * connection_init(). */
+ * connection_init().
+ *
+ * Allocate space to store the socks_request.
+ */
entry_connection_t *
entry_connection_new(int type, int socket_family)
{
@@ -264,6 +303,13 @@ entry_connection_new(int type, int socket_family)
tor_assert(type == CONN_TYPE_AP);
connection_init(time(NULL), ENTRY_TO_CONN(entry_conn), type, socket_family);
entry_conn->socks_request = socks_request_new();
+ /* If this is coming from a listener, we'll set it up based on the listener
+ * in a little while. Otherwise, we're doing this as a linked connection
+ * of some kind, and we should set it up here based on the socket family */
+ if (socket_family == AF_INET)
+ entry_conn->ipv4_traffic_ok = 1;
+ else if (socket_family == AF_INET6)
+ entry_conn->ipv6_traffic_ok = 1;
return entry_conn;
}
@@ -287,7 +333,6 @@ control_connection_new(int socket_family)
tor_malloc_zero(sizeof(control_connection_t));
connection_init(time(NULL),
TO_CONN(control_conn), CONN_TYPE_CONTROL, socket_family);
- log_notice(LD_CONTROL, "New control connection opened.");
return control_conn;
}
@@ -310,7 +355,8 @@ connection_new(int type, int socket_family)
{
switch (type) {
case CONN_TYPE_OR:
- return TO_CONN(or_connection_new(socket_family));
+ case CONN_TYPE_EXT_OR:
+ return TO_CONN(or_connection_new(type, socket_family));
case CONN_TYPE_EXIT:
return TO_CONN(edge_connection_new(type, socket_family));
@@ -338,14 +384,11 @@ connection_new(int type, int socket_family)
/** Initializes conn. (you must call connection_add() to link it into the main
* array).
*
+ * Set conn-\>magic to the correct value.
+ *
* Set conn-\>type to <b>type</b>. Set conn-\>s and conn-\>conn_array_index to
* -1 to signify they are not yet assigned.
*
- * If conn is not a listener type, allocate buffers for it. If it's
- * an AP type, allocate space to store the socks_request.
- *
- * Assign a pseudorandom next_circ_id between 0 and 2**15.
- *
* Initialize conn's timestamps to now.
*/
static void
@@ -355,6 +398,7 @@ connection_init(time_t now, connection_t *conn, int type, int socket_family)
switch (type) {
case CONN_TYPE_OR:
+ case CONN_TYPE_EXT_OR:
conn->magic = OR_CONNECTION_MAGIC;
break;
case CONN_TYPE_EXIT:
@@ -413,8 +457,8 @@ connection_link_connections(connection_t *conn_a, connection_t *conn_b)
* necessary, close its socket if necessary, and mark the directory as dirty
* if <b>conn</b> is an OR or OP connection.
*/
-static void
-_connection_free(connection_t *conn)
+STATIC void
+connection_free_(connection_t *conn)
{
void *mem;
size_t memlen;
@@ -423,6 +467,7 @@ _connection_free(connection_t *conn)
switch (conn->type) {
case CONN_TYPE_OR:
+ case CONN_TYPE_EXT_OR:
tor_assert(conn->magic == OR_CONNECTION_MAGIC);
mem = TO_OR_CONN(conn);
memlen = sizeof(or_connection_t);
@@ -492,8 +537,23 @@ _connection_free(connection_t *conn)
or_conn->tls = NULL;
or_handshake_state_free(or_conn->handshake_state);
or_conn->handshake_state = NULL;
- smartlist_free(or_conn->active_circuit_pqueue);
tor_free(or_conn->nickname);
+ if (or_conn->chan) {
+ /* Owww, this shouldn't happen, but... */
+ log_info(LD_CHANNEL,
+ "Freeing orconn at %p, saw channel %p with ID "
+ U64_FORMAT " left un-NULLed",
+ or_conn, TLS_CHAN_TO_BASE(or_conn->chan),
+ U64_PRINTF_ARG(
+ TLS_CHAN_TO_BASE(or_conn->chan)->global_identifier));
+ if (!(TLS_CHAN_TO_BASE(or_conn->chan)->state == CHANNEL_STATE_CLOSED ||
+ TLS_CHAN_TO_BASE(or_conn->chan)->state == CHANNEL_STATE_ERROR)) {
+ channel_close_for_error(TLS_CHAN_TO_BASE(or_conn->chan));
+ }
+
+ or_conn->chan->conn = NULL;
+ or_conn->chan = NULL;
+ }
}
if (conn->type == CONN_TYPE_AP) {
entry_connection_t *entry_conn = TO_ENTRY_CONN(conn);
@@ -554,6 +614,13 @@ _connection_free(connection_t *conn)
log_warn(LD_BUG, "called on OR conn with non-zeroed identity_digest");
connection_or_remove_from_identity_map(TO_OR_CONN(conn));
}
+ if (conn->type == CONN_TYPE_OR || conn->type == CONN_TYPE_EXT_OR) {
+ connection_or_remove_from_ext_or_id_map(TO_OR_CONN(conn));
+ tor_free(TO_OR_CONN(conn)->ext_or_conn_id);
+ tor_free(TO_OR_CONN(conn)->ext_or_auth_correct_client_hash);
+ tor_free(TO_OR_CONN(conn)->ext_or_transport);
+ }
+
#ifdef USE_BUFFEREVENTS
if (conn->type == CONN_TYPE_OR && TO_OR_CONN(conn)->bucket_cfg) {
ev_token_bucket_cfg_free(TO_OR_CONN(conn)->bucket_cfg);
@@ -592,7 +659,7 @@ connection_free(connection_t *conn)
connection_control_closed(TO_CONTROL_CONN(conn));
}
connection_unregister_events(conn);
- _connection_free(conn);
+ connection_free_(conn);
}
/**
@@ -617,6 +684,7 @@ connection_about_to_close_connection(connection_t *conn)
connection_dir_about_to_close(TO_DIR_CONN(conn));
break;
case CONN_TYPE_OR:
+ case CONN_TYPE_EXT_OR:
connection_or_about_to_close(TO_OR_CONN(conn));
break;
case CONN_TYPE_AP:
@@ -668,7 +736,42 @@ connection_close_immediate(connection_t *conn)
/** Mark <b>conn</b> to be closed next time we loop through
* conn_close_if_marked() in main.c. */
void
-_connection_mark_for_close(connection_t *conn, int line, const char *file)
+connection_mark_for_close_(connection_t *conn, int line, const char *file)
+{
+ assert_connection_ok(conn,0);
+ tor_assert(line);
+ tor_assert(line < 1<<16); /* marked_for_close can only fit a uint16_t. */
+ tor_assert(file);
+
+ if (conn->type == CONN_TYPE_OR) {
+ /*
+ * An or_connection should have been closed through one of the channel-
+ * aware functions in connection_or.c. We'll assume this is an error
+ * close and do that, and log a bug warning.
+ */
+ log_warn(LD_CHANNEL | LD_BUG,
+ "Something tried to close an or_connection_t without going "
+ "through channels at %s:%d",
+ file, line);
+ connection_or_close_for_error(TO_OR_CONN(conn), 0);
+ } else {
+ /* Pass it down to the real function */
+ connection_mark_for_close_internal_(conn, line, file);
+ }
+}
+
+/** Mark <b>conn</b> to be closed next time we loop through
+ * conn_close_if_marked() in main.c; the _internal version bypasses the
+ * CONN_TYPE_OR checks; this should be called when you either are sure that
+ * if this is an or_connection_t the controlling channel has been notified
+ * (e.g. with connection_or_notify_error()), or you actually are the
+ * connection_or_close_for_error() or connection_or_close_normally function.
+ * For all other cases, use connection_mark_and_flush() instead, which
+ * checks for or_connection_t properly, instead. See below.
+ */
+void
+connection_mark_for_close_internal_(connection_t *conn,
+ int line, const char *file)
{
assert_connection_ok(conn,0);
tor_assert(line);
@@ -676,13 +779,24 @@ _connection_mark_for_close(connection_t *conn, int line, const char *file)
tor_assert(file);
if (conn->marked_for_close) {
- log(LOG_WARN,LD_BUG,"Duplicate call to connection_mark_for_close at %s:%d"
+ log_warn(LD_BUG,"Duplicate call to connection_mark_for_close at %s:%d"
" (first at %s:%d)", file, line, conn->marked_for_close_file,
conn->marked_for_close);
tor_fragile_assert();
return;
}
+ if (conn->type == CONN_TYPE_OR) {
+ /*
+ * Bad news if this happens without telling the controlling channel; do
+ * this so we can find things that call this wrongly when the asserts hit.
+ */
+ log_debug(LD_CHANNEL,
+ "Calling connection_mark_for_close_internal_() on an OR conn "
+ "at %s:%d",
+ file, line);
+ }
+
conn->marked_for_close = line;
conn->marked_for_close_file = file;
add_connection_to_closeable_list(conn);
@@ -810,8 +924,11 @@ check_location_for_unix_socket(const or_options_t *options, const char *path)
int r = -1;
char *p = tor_strdup(path);
cpd_check_t flags = CPD_CHECK_MODE_ONLY;
- if (get_parent_directory(p)<0)
+ if (get_parent_directory(p)<0 || p[0] != '/') {
+ log_warn(LD_GENERAL, "Bad unix socket address '%s'. Tor does not support "
+ "relative paths for unix sockets.", path);
goto done;
+ }
if (options->ControlSocketsGroupWritable)
flags |= CPD_GROUP_OK;
@@ -839,12 +956,14 @@ check_location_for_unix_socket(const or_options_t *options, const char *path)
#endif
/** Tell the TCP stack that it shouldn't wait for a long time after
- * <b>sock</b> has closed before reusing its port. */
-static void
+ * <b>sock</b> has closed before reusing its port. Return 0 on success,
+ * -1 on failure. */
+static int
make_socket_reuseable(tor_socket_t sock)
{
#ifdef _WIN32
(void) sock;
+ return 0;
#else
int one=1;
@@ -852,11 +971,35 @@ make_socket_reuseable(tor_socket_t sock)
* right after somebody else has let it go. But REUSEADDR on win32
* means you can bind to the port _even when somebody else
* already has it bound_. So, don't do that on Win32. */
- setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (void*) &one,
- (socklen_t)sizeof(one));
+ if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (void*) &one,
+ (socklen_t)sizeof(one)) == -1) {
+ return -1;
+ }
+ return 0;
#endif
}
+/** Max backlog to pass to listen. We start at */
+static int listen_limit = INT_MAX;
+
+/* Listen on <b>fd</b> with appropriate backlog. Return as for listen. */
+static int
+tor_listen(tor_socket_t fd)
+{
+ int r;
+
+ if ((r = listen(fd, listen_limit)) < 0) {
+ if (listen_limit == SOMAXCONN)
+ return r;
+ if ((r = listen(fd, SOMAXCONN)) == 0) {
+ listen_limit = SOMAXCONN;
+ log_warn(LD_NET, "Setting listen backlog to INT_MAX connections "
+ "didn't work, but SOMAXCONN did. Lowering backlog limit.");
+ }
+ }
+ return r;
+}
+
/** Bind a new non-blocking socket listening to the socket described
* by <b>listensockaddr</b>.
*
@@ -865,23 +1008,23 @@ make_socket_reuseable(tor_socket_t sock)
*/
static connection_t *
connection_listener_new(const struct sockaddr *listensockaddr,
- socklen_t socklen,
- int type, const char *address,
- const port_cfg_t *port_cfg)
+ socklen_t socklen,
+ int type, const char *address,
+ const port_cfg_t *port_cfg)
{
listener_connection_t *lis_conn;
- connection_t *conn;
- tor_socket_t s; /* the socket we're going to make */
+ connection_t *conn = NULL;
+ tor_socket_t s = TOR_INVALID_SOCKET; /* the socket we're going to make */
or_options_t const *options = get_options();
#if defined(HAVE_PWD_H) && defined(HAVE_SYS_UN_H)
- struct passwd *pw = NULL;
+ const struct passwd *pw = NULL;
#endif
uint16_t usePort = 0, gotPort = 0;
int start_reading = 0;
static int global_next_session_group = SESSION_GROUP_FIRST_AUTO;
tor_addr_t addr;
- if (get_n_open_sockets() >= get_options()->_ConnLimit-1) {
+ if (get_n_open_sockets() >= get_options()->ConnLimit_-1) {
warn_too_many_conns();
return NULL;
}
@@ -894,10 +1037,10 @@ connection_listener_new(const struct sockaddr *listensockaddr,
tor_addr_from_sockaddr(&addr, listensockaddr, &usePort);
- log_notice(LD_NET, "Opening %s on %s:%d",
- conn_type_to_string(type), fmt_addr(&addr), usePort);
+ log_notice(LD_NET, "Opening %s on %s",
+ conn_type_to_string(type), fmt_addrport(&addr, usePort));
- s = tor_open_socket(tor_addr_family(&addr),
+ s = tor_open_socket_nonblocking(tor_addr_family(&addr),
is_tcp ? SOCK_STREAM : SOCK_DGRAM,
is_tcp ? IPPROTO_TCP: IPPROTO_UDP);
if (!SOCKET_OK(s)) {
@@ -906,7 +1049,27 @@ connection_listener_new(const struct sockaddr *listensockaddr,
goto err;
}
- make_socket_reuseable(s);
+ if (make_socket_reuseable(s) < 0) {
+ log_warn(LD_NET, "Error setting SO_REUSEADDR flag on %s: %s",
+ conn_type_to_string(type),
+ tor_socket_strerror(errno));
+ }
+
+#if defined USE_TRANSPARENT && defined(IP_TRANSPARENT)
+ if (options->TransProxyType_parsed == TPT_TPROXY &&
+ type == CONN_TYPE_AP_TRANS_LISTENER) {
+ int one = 1;
+ if (setsockopt(s, SOL_IP, IP_TRANSPARENT, &one, sizeof(one)) < 0) {
+ const char *extra = "";
+ int e = tor_socket_errno(s);
+ if (e == EPERM)
+ extra = "TransTPROXY requires root privileges or similar"
+ " capabilities.";
+ log_warn(LD_NET, "Error setting IP_TRANSPARENT flag: %s.%s",
+ tor_socket_strerror(e), extra);
+ }
+ }
+#endif
#ifdef IPV6_V6ONLY
if (listensockaddr->sa_family == AF_INET6) {
@@ -919,7 +1082,7 @@ connection_listener_new(const struct sockaddr *listensockaddr,
/* We need to set IPV6_V6ONLY so that this socket can't get used for
* IPv4 connections. */
if (setsockopt(s,IPPROTO_IPV6, IPV6_V6ONLY,
- (void*)&one, sizeof(one))<0) {
+ (void*)&one, sizeof(one)) < 0) {
int e = tor_socket_errno(s);
log_warn(LD_NET, "Error setting IPV6_V6ONLY flag: %s",
tor_socket_strerror(e));
@@ -935,15 +1098,13 @@ connection_listener_new(const struct sockaddr *listensockaddr,
helpfulhint = ". Is Tor already running?";
log_warn(LD_NET, "Could not bind to %s:%u: %s%s", address, usePort,
tor_socket_strerror(e), helpfulhint);
- tor_close_socket(s);
goto err;
}
if (is_tcp) {
- if (listen(s,SOMAXCONN) < 0) {
+ if (tor_listen(s) < 0) {
log_warn(LD_NET, "Could not listen on %s:%u: %s", address, usePort,
tor_socket_strerror(tor_socket_errno(s)));
- tor_close_socket(s);
goto err;
}
}
@@ -983,7 +1144,7 @@ connection_listener_new(const struct sockaddr *listensockaddr,
strerror(errno));
goto err;
}
- s = tor_open_socket(AF_UNIX, SOCK_STREAM, 0);
+ s = tor_open_socket_nonblocking(AF_UNIX, SOCK_STREAM, 0);
if (! SOCKET_OK(s)) {
log_warn(LD_NET,"Socket creation failed: %s.", strerror(errno));
goto err;
@@ -996,10 +1157,11 @@ connection_listener_new(const struct sockaddr *listensockaddr,
}
#ifdef HAVE_PWD_H
if (options->User) {
- pw = getpwnam(options->User);
+ pw = tor_getpwnam(options->User);
if (pw == NULL) {
log_warn(LD_NET,"Unable to chown() %s socket: user %s not found.",
address, options->User);
+ goto err;
} else if (chown(address, pw->pw_uid, pw->pw_gid) < 0) {
log_warn(LD_NET,"Unable to chown() %s socket: %s.",
address, strerror(errno));
@@ -1012,32 +1174,29 @@ connection_listener_new(const struct sockaddr *listensockaddr,
* platforms. */
if (chmod(address, 0660) < 0) {
log_warn(LD_FS,"Unable to make %s group-writable.", address);
- tor_close_socket(s);
goto err;
}
}
- if (listen(s,SOMAXCONN) < 0) {
+ if (listen(s, SOMAXCONN) < 0) {
log_warn(LD_NET, "Could not listen on %s: %s", address,
tor_socket_strerror(tor_socket_errno(s)));
- tor_close_socket(s);
goto err;
}
#else
(void)options;
#endif /* HAVE_SYS_UN_H */
} else {
- log_err(LD_BUG,"Got unexpected address family %d.",
- listensockaddr->sa_family);
- tor_assert(0);
+ log_err(LD_BUG, "Got unexpected address family %d.",
+ listensockaddr->sa_family);
+ tor_assert(0);
}
- set_socket_nonblocking(s);
-
lis_conn = listener_connection_new(type, listensockaddr->sa_family);
conn = TO_CONN(lis_conn);
conn->socket_family = listensockaddr->sa_family;
conn->s = s;
+ s = TOR_INVALID_SOCKET; /* Prevent double-close */
conn->address = tor_strdup(address);
conn->port = gotPort;
tor_addr_copy(&conn->addr, &addr);
@@ -1056,10 +1215,23 @@ connection_listener_new(const struct sockaddr *listensockaddr,
lis_conn->session_group = global_next_session_group--;
}
}
+ if (type == CONN_TYPE_AP_LISTENER) {
+ lis_conn->socks_ipv4_traffic = port_cfg->ipv4_traffic;
+ lis_conn->socks_ipv6_traffic = port_cfg->ipv6_traffic;
+ lis_conn->socks_prefer_ipv6 = port_cfg->prefer_ipv6;
+ } else {
+ lis_conn->socks_ipv4_traffic = 1;
+ lis_conn->socks_ipv6_traffic = 1;
+ }
+ lis_conn->cache_ipv4_answers = port_cfg->cache_ipv4_answers;
+ lis_conn->cache_ipv6_answers = port_cfg->cache_ipv6_answers;
+ lis_conn->use_cached_ipv4_answers = port_cfg->use_cached_ipv4_answers;
+ lis_conn->use_cached_ipv6_answers = port_cfg->use_cached_ipv6_answers;
+ lis_conn->prefer_ipv6_virtaddr = port_cfg->prefer_ipv6_virtaddr;
+ lis_conn->socks_prefer_no_auth = port_cfg->socks_prefer_no_auth;
if (connection_add(conn) < 0) { /* no space, forget it */
log_warn(LD_NET,"connection_add for listener failed. Giving up.");
- connection_free(conn);
goto err;
}
@@ -1078,6 +1250,11 @@ connection_listener_new(const struct sockaddr *listensockaddr,
return conn;
err:
+ if (SOCKET_OK(s))
+ tor_close_socket(s);
+ if (conn)
+ connection_free(conn);
+
return NULL;
}
@@ -1089,7 +1266,7 @@ connection_listener_new(const struct sockaddr *listensockaddr,
* nmap does). We want to detect that, and not go on with the connection.
*/
static int
-check_sockaddr(struct sockaddr *sa, int len, int level)
+check_sockaddr(const struct sockaddr *sa, int len, int level)
{
int ok = 1;
@@ -1162,7 +1339,7 @@ connection_handle_listener_read(connection_t *conn, int new_type)
tor_assert((size_t)remotelen >= sizeof(struct sockaddr_in));
memset(&addrbuf, 0, sizeof(addrbuf));
- news = tor_accept_socket(conn->s,remote,&remotelen);
+ news = tor_accept_socket_nonblocking(conn->s,remote,&remotelen);
if (!SOCKET_OK(news)) { /* accept() error */
int e = tor_socket_errno(conn->s);
if (ERRNO_IS_ACCEPT_EAGAIN(e)) {
@@ -1181,8 +1358,18 @@ connection_handle_listener_read(connection_t *conn, int new_type)
"Connection accepted on socket %d (child of fd %d).",
(int)news,(int)conn->s);
- make_socket_reuseable(news);
- set_socket_nonblocking(news);
+ if (make_socket_reuseable(news) < 0) {
+ if (tor_socket_errno(news) == EINVAL) {
+ /* This can happen on OSX if we get a badly timed shutdown. */
+ log_debug(LD_NET, "make_socket_reuseable returned EINVAL");
+ } else {
+ log_warn(LD_NET, "Error setting SO_REUSEADDR flag on %s: %s",
+ conn_type_to_string(new_type),
+ tor_socket_strerror(errno));
+ }
+ tor_close_socket(news);
+ return 0;
+ }
if (options->ConstrainedSockets)
set_constrained_socket_buffers(news, (int)options->ConstrainedSockSize);
@@ -1202,11 +1389,6 @@ connection_handle_listener_read(connection_t *conn, int new_type)
return 0;
}
- if (check_sockaddr_family_match(remote->sa_family, conn) < 0) {
- tor_close_socket(news);
- return 0;
- }
-
tor_addr_from_sockaddr(&addr, remote, &port);
/* process entrance policies here, before we even create the connection */
@@ -1215,7 +1397,7 @@ connection_handle_listener_read(connection_t *conn, int new_type)
if (socks_policy_permits_address(&addr) == 0) {
log_notice(LD_APP,
"Denying socks connection from untrusted address %s.",
- fmt_addr(&addr));
+ fmt_and_decorate_addr(&addr));
tor_close_socket(news);
return 0;
}
@@ -1224,7 +1406,7 @@ connection_handle_listener_read(connection_t *conn, int new_type)
/* check dirpolicy to see if we should accept it */
if (dir_policy_permits_address(&addr) == 0) {
log_notice(LD_DIRSERV,"Denying dir connection from address %s.",
- fmt_addr(&addr));
+ fmt_and_decorate_addr(&addr));
tor_close_socket(news);
return 0;
}
@@ -1238,10 +1420,21 @@ connection_handle_listener_read(connection_t *conn, int new_type)
newconn->port = port;
newconn->address = tor_dup_addr(&addr);
+ if (new_type == CONN_TYPE_AP) {
+ TO_ENTRY_CONN(newconn)->socks_request->socks_prefer_no_auth =
+ TO_LISTENER_CONN(conn)->socks_prefer_no_auth;
+ }
+ if (new_type == CONN_TYPE_CONTROL) {
+ log_notice(LD_CONTROL, "New control connection opened from %s.",
+ fmt_and_decorate_addr(&addr));
+ }
+
} else if (conn->socket_family == AF_UNIX) {
/* For now only control ports can be Unix domain sockets
* and listeners at the same time */
tor_assert(conn->type == CONN_TYPE_CONTROL_LISTENER);
+ tor_assert(new_type == CONN_TYPE_CONTROL);
+ log_notice(LD_CONTROL, "New control connection opened.");
newconn = connection_new(new_type, conn->socket_family);
newconn->s = news;
@@ -1276,17 +1469,39 @@ static int
connection_init_accepted_conn(connection_t *conn,
const listener_connection_t *listener)
{
+ int rv;
+
connection_start_reading(conn);
switch (conn->type) {
+ case CONN_TYPE_EXT_OR:
+ /* Initiate Extended ORPort authentication. */
+ return connection_ext_or_start_auth(TO_OR_CONN(conn));
case CONN_TYPE_OR:
control_event_or_conn_status(TO_OR_CONN(conn), OR_CONN_EVENT_NEW, 0);
- return connection_tls_start_handshake(TO_OR_CONN(conn), 1);
+ rv = connection_tls_start_handshake(TO_OR_CONN(conn), 1);
+ if (rv < 0) {
+ connection_or_close_for_error(TO_OR_CONN(conn), 0);
+ }
+ return rv;
+ break;
case CONN_TYPE_AP:
TO_ENTRY_CONN(conn)->isolation_flags = listener->isolation_flags;
TO_ENTRY_CONN(conn)->session_group = listener->session_group;
TO_ENTRY_CONN(conn)->nym_epoch = get_signewnym_epoch();
- TO_ENTRY_CONN(conn)->socks_request->listener_type = listener->_base.type;
+ TO_ENTRY_CONN(conn)->socks_request->listener_type = listener->base_.type;
+ TO_ENTRY_CONN(conn)->ipv4_traffic_ok = listener->socks_ipv4_traffic;
+ TO_ENTRY_CONN(conn)->ipv6_traffic_ok = listener->socks_ipv6_traffic;
+ TO_ENTRY_CONN(conn)->prefer_ipv6_traffic = listener->socks_prefer_ipv6;
+ TO_ENTRY_CONN(conn)->cache_ipv4_answers = listener->cache_ipv4_answers;
+ TO_ENTRY_CONN(conn)->cache_ipv6_answers = listener->cache_ipv6_answers;
+ TO_ENTRY_CONN(conn)->use_cached_ipv4_answers =
+ listener->use_cached_ipv4_answers;
+ TO_ENTRY_CONN(conn)->use_cached_ipv6_answers =
+ listener->use_cached_ipv6_answers;
+ TO_ENTRY_CONN(conn)->prefer_ipv6_virtaddr =
+ listener->prefer_ipv6_virtaddr;
+
switch (TO_CONN(listener)->type) {
case CONN_TYPE_AP_LISTENER:
conn->state = AP_CONN_STATE_SOCKS_WAIT;
@@ -1333,7 +1548,7 @@ connection_connect(connection_t *conn, const char *address,
const or_options_t *options = get_options();
int protocol_family;
- if (get_n_open_sockets() >= get_options()->_ConnLimit-1) {
+ if (get_n_open_sockets() >= get_options()->ConnLimit_-1) {
warn_too_many_conns();
*socket_error = SOCK_ERRNO(ENOBUFS);
return -1;
@@ -1348,21 +1563,14 @@ connection_connect(connection_t *conn, const char *address,
/* We should never even try to connect anyplace if DisableNetwork is set.
* Warn if we do, and refuse to make the connection. */
static ratelim_t disablenet_violated = RATELIM_INIT(30*60);
- char *m;
-#ifdef _WIN32
- *socket_error = WSAENETUNREACH;
-#else
- *socket_error = ENETUNREACH;
-#endif
- if ((m = rate_limit_log(&disablenet_violated, approx_time()))) {
- log_warn(LD_BUG, "Tried to open a socket with DisableNetwork set.%s", m);
- tor_free(m);
- }
+ *socket_error = SOCK_ERRNO(ENETUNREACH);
+ log_fn_ratelim(&disablenet_violated, LOG_WARN, LD_BUG,
+ "Tried to open a socket with DisableNetwork set.");
tor_fragile_assert();
return -1;
}
- s = tor_open_socket(protocol_family,SOCK_STREAM,IPPROTO_TCP);
+ s = tor_open_socket_nonblocking(protocol_family,SOCK_STREAM,IPPROTO_TCP);
if (! SOCKET_OK(s)) {
*socket_error = tor_socket_errno(-1);
log_warn(LD_NET,"Error creating network socket: %s",
@@ -1370,31 +1578,43 @@ connection_connect(connection_t *conn, const char *address,
return -1;
}
- make_socket_reuseable(s);
-
- if (options->OutboundBindAddress && !tor_addr_is_loopback(addr)) {
- struct sockaddr_in ext_addr;
-
- memset(&ext_addr, 0, sizeof(ext_addr));
- ext_addr.sin_family = AF_INET;
- ext_addr.sin_port = 0;
- if (!tor_inet_aton(options->OutboundBindAddress, &ext_addr.sin_addr)) {
- log_warn(LD_CONFIG,"Outbound bind address '%s' didn't parse. Ignoring.",
- options->OutboundBindAddress);
- } else {
- if (bind(s, (struct sockaddr*)&ext_addr,
- (socklen_t)sizeof(ext_addr)) < 0) {
- *socket_error = tor_socket_errno(s);
- log_warn(LD_NET,"Error binding network socket: %s",
- tor_socket_strerror(*socket_error));
- tor_close_socket(s);
- return -1;
+ if (make_socket_reuseable(s) < 0) {
+ log_warn(LD_NET, "Error setting SO_REUSEADDR flag on new connection: %s",
+ tor_socket_strerror(errno));
+ }
+
+ if (!tor_addr_is_loopback(addr)) {
+ const tor_addr_t *ext_addr = NULL;
+ if (protocol_family == AF_INET &&
+ !tor_addr_is_null(&options->OutboundBindAddressIPv4_))
+ ext_addr = &options->OutboundBindAddressIPv4_;
+ else if (protocol_family == AF_INET6 &&
+ !tor_addr_is_null(&options->OutboundBindAddressIPv6_))
+ ext_addr = &options->OutboundBindAddressIPv6_;
+ if (ext_addr) {
+ struct sockaddr_storage ext_addr_sa;
+ socklen_t ext_addr_len = 0;
+ memset(&ext_addr_sa, 0, sizeof(ext_addr_sa));
+ ext_addr_len = tor_addr_to_sockaddr(ext_addr, 0,
+ (struct sockaddr *) &ext_addr_sa,
+ sizeof(ext_addr_sa));
+ if (ext_addr_len == 0) {
+ log_warn(LD_NET,
+ "Error converting OutboundBindAddress %s into sockaddr. "
+ "Ignoring.", fmt_and_decorate_addr(ext_addr));
+ } else {
+ if (bind(s, (struct sockaddr *) &ext_addr_sa, ext_addr_len) < 0) {
+ *socket_error = tor_socket_errno(s);
+ log_warn(LD_NET,"Error binding network socket to %s: %s",
+ fmt_and_decorate_addr(ext_addr),
+ tor_socket_strerror(*socket_error));
+ tor_close_socket(s);
+ return -1;
+ }
}
}
}
- set_socket_nonblocking(s);
-
if (options->ConstrainedSockets)
set_constrained_socket_buffers(s, (int)options->ConstrainedSockSize);
@@ -1424,7 +1644,7 @@ connection_connect(connection_t *conn, const char *address,
/* it succeeded. we're connected. */
log_fn(inprogress?LOG_DEBUG:LOG_INFO, LD_NET,
- "Connection to %s:%u %s (sock %d).",
+ "Connection to %s:%u %s (sock "TOR_SOCKET_T_FORMAT").",
escaped_safe_str_client(address),
port, inprogress?"in progress":"established", s);
conn->s = s;
@@ -1460,6 +1680,32 @@ connection_proxy_state_to_string(int state)
return states[state];
}
+/** Returns the global proxy type used by tor. Use this function for
+ * logging or high-level purposes, don't use it to fill the
+ * <b>proxy_type</b> field of or_connection_t; use the actual proxy
+ * protocol instead.*/
+static int
+get_proxy_type(void)
+{
+ const or_options_t *options = get_options();
+
+ if (options->HTTPSProxy)
+ return PROXY_CONNECT;
+ else if (options->Socks4Proxy)
+ return PROXY_SOCKS4;
+ else if (options->Socks5Proxy)
+ return PROXY_SOCKS5;
+ else if (options->ClientTransportPlugin)
+ return PROXY_PLUGGABLE;
+ else
+ return PROXY_NONE;
+}
+
+/* One byte for the version, one for the command, two for the
+ port, and four for the addr... and, one more for the
+ username NUL: */
+#define SOCKS4_STANDARD_BUFFER_SIZE (1 + 1 + 2 + 4 + 1)
+
/** Write a proxy request of <b>type</b> (socks4, socks5, https) to conn
* for conn->addr:conn->port, authenticating with the auth details given
* in the configuration (if available). SOCKS 5 and HTTP CONNECT proxies
@@ -1495,17 +1741,17 @@ connection_proxy_connect(connection_t *conn, int type)
}
if (base64_authenticator) {
- const char *addr = fmt_addr(&conn->addr);
- tor_snprintf(buf, sizeof(buf), "CONNECT %s:%d HTTP/1.1\r\n"
- "Host: %s:%d\r\n"
+ const char *addrport = fmt_addrport(&conn->addr, conn->port);
+ tor_snprintf(buf, sizeof(buf), "CONNECT %s HTTP/1.1\r\n"
+ "Host: %s\r\n"
"Proxy-Authorization: Basic %s\r\n\r\n",
- addr, conn->port,
- addr, conn->port,
+ addrport,
+ addrport,
base64_authenticator);
tor_free(base64_authenticator);
} else {
- tor_snprintf(buf, sizeof(buf), "CONNECT %s:%d HTTP/1.0\r\n\r\n",
- fmt_addr(&conn->addr), conn->port);
+ tor_snprintf(buf, sizeof(buf), "CONNECT %s HTTP/1.0\r\n\r\n",
+ fmt_addrport(&conn->addr, conn->port));
}
connection_write_to_buf(buf, strlen(buf), conn);
@@ -1514,17 +1760,45 @@ connection_proxy_connect(connection_t *conn, int type)
}
case PROXY_SOCKS4: {
- unsigned char buf[9];
+ unsigned char *buf;
uint16_t portn;
uint32_t ip4addr;
+ size_t buf_size = 0;
+ char *socks_args_string = NULL;
- /* Send a SOCKS4 connect request with empty user id */
+ /* Send a SOCKS4 connect request */
if (tor_addr_family(&conn->addr) != AF_INET) {
log_warn(LD_NET, "SOCKS4 client is incompatible with IPv6");
return -1;
}
+ { /* If we are here because we are trying to connect to a
+ pluggable transport proxy, check if we have any SOCKS
+ arguments to transmit. If we do, compress all arguments to
+ a single string in 'socks_args_string': */
+
+ if (get_proxy_type() == PROXY_PLUGGABLE) {
+ socks_args_string =
+ pt_get_socks_args_for_proxy_addrport(&conn->addr, conn->port);
+ if (socks_args_string)
+ log_debug(LD_NET, "Sending out '%s' as our SOCKS argument string.",
+ socks_args_string);
+ }
+ }
+
+ { /* Figure out the buffer size we need for the SOCKS message: */
+
+ buf_size = SOCKS4_STANDARD_BUFFER_SIZE;
+
+ /* If we have a SOCKS argument string, consider its size when
+ calculating the buffer size: */
+ if (socks_args_string)
+ buf_size += strlen(socks_args_string);
+ }
+
+ buf = tor_malloc_zero(buf_size);
+
ip4addr = tor_addr_to_ipv4n(&conn->addr);
portn = htons(conn->port);
@@ -1532,9 +1806,23 @@ connection_proxy_connect(connection_t *conn, int type)
buf[1] = SOCKS_COMMAND_CONNECT; /* command */
memcpy(buf + 2, &portn, 2); /* port */
memcpy(buf + 4, &ip4addr, 4); /* addr */
- buf[8] = 0; /* userid (empty) */
- connection_write_to_buf((char *)buf, sizeof(buf), conn);
+ /* Next packet field is the userid. If we have pluggable
+ transport SOCKS arguments, we have to embed them
+ there. Otherwise, we use an empty userid. */
+ if (socks_args_string) { /* place the SOCKS args string: */
+ tor_assert(strlen(socks_args_string) > 0);
+ tor_assert(buf_size >=
+ SOCKS4_STANDARD_BUFFER_SIZE + strlen(socks_args_string));
+ strlcpy((char *)buf + 8, socks_args_string, buf_size - 8);
+ tor_free(socks_args_string);
+ } else {
+ buf[8] = 0; /* no userid */
+ }
+
+ connection_write_to_buf((char *)buf, buf_size, conn);
+ tor_free(buf);
+
conn->proxy_state = PROXY_SOCKS4_WANT_CONNECT_OK;
break;
}
@@ -1546,8 +1834,13 @@ connection_proxy_connect(connection_t *conn, int type)
buf[0] = 5; /* version */
+ /* We have to use SOCKS5 authentication, if we have a
+ Socks5ProxyUsername or if we want to pass arguments to our
+ pluggable transport proxy: */
+ if ((options->Socks5ProxyUsername) ||
+ (get_proxy_type() == PROXY_PLUGGABLE &&
+ (get_socks_args_by_bridge_addrport(&conn->addr, conn->port)))) {
/* number of auth methods */
- if (options->Socks5ProxyUsername) {
buf[1] = 2;
buf[2] = 0x00; /* no authentication */
buf[3] = 0x02; /* rfc1929 Username/Passwd auth */
@@ -1607,6 +1900,7 @@ connection_read_https_proxy_response(connection_t *conn)
tor_free(headers);
return -1;
}
+ tor_free(headers);
if (!reason) reason = tor_strdup("[no reason given]");
if (status_code == 200) {
@@ -1740,15 +2034,49 @@ connection_read_proxy_handshake(connection_t *conn)
unsigned char buf[1024];
size_t reqsize, usize, psize;
const char *user, *pass;
+ char *socks_args_string = NULL;
+
+ if (get_proxy_type() == PROXY_PLUGGABLE) {
+ socks_args_string =
+ pt_get_socks_args_for_proxy_addrport(&conn->addr, conn->port);
+ if (!socks_args_string) {
+ log_warn(LD_NET, "Could not create SOCKS args string.");
+ ret = -1;
+ break;
+ }
+
+ log_debug(LD_NET, "SOCKS5 arguments: %s", socks_args_string);
+ tor_assert(strlen(socks_args_string) > 0);
+ tor_assert(strlen(socks_args_string) <= MAX_SOCKS5_AUTH_SIZE_TOTAL);
+
+ if (strlen(socks_args_string) > MAX_SOCKS5_AUTH_FIELD_SIZE) {
+ user = socks_args_string;
+ usize = MAX_SOCKS5_AUTH_FIELD_SIZE;
+ pass = socks_args_string + MAX_SOCKS5_AUTH_FIELD_SIZE;
+ psize = strlen(socks_args_string) - MAX_SOCKS5_AUTH_FIELD_SIZE;
+ } else {
+ user = socks_args_string;
+ usize = strlen(socks_args_string);
+ pass = "\0";
+ psize = 1;
+ }
+ } else if (get_options()->Socks5ProxyUsername) {
+ user = get_options()->Socks5ProxyUsername;
+ pass = get_options()->Socks5ProxyPassword;
+ tor_assert(user && pass);
+ usize = strlen(user);
+ psize = strlen(pass);
+ } else {
+ log_err(LD_BUG, "We entered %s for no reason!", __func__);
+ tor_fragile_assert();
+ ret = -1;
+ break;
+ }
- user = get_options()->Socks5ProxyUsername;
- pass = get_options()->Socks5ProxyPassword;
- tor_assert(user && pass);
-
- /* XXX len of user and pass must be <= 255 !!! */
- usize = strlen(user);
- psize = strlen(pass);
- tor_assert(usize <= 255 && psize <= 255);
+ /* Username and password lengths should have been checked
+ above and during torrc parsing. */
+ tor_assert(usize <= MAX_SOCKS5_AUTH_FIELD_SIZE &&
+ psize <= MAX_SOCKS5_AUTH_FIELD_SIZE);
reqsize = 3 + usize + psize;
buf[0] = 1; /* negotiation version */
@@ -1757,6 +2085,9 @@ connection_read_proxy_handshake(connection_t *conn)
buf[2 + usize] = psize;
memcpy(buf + 3 + usize, pass, psize);
+ if (socks_args_string)
+ tor_free(socks_args_string);
+
connection_write_to_buf((char *)buf, reqsize, conn);
conn->proxy_state = PROXY_SOCKS5_WANT_AUTH_RFC1929_OK;
@@ -1914,7 +2245,7 @@ retry_listener_ports(smartlist_t *old_conns,
if (listensockaddr) {
conn = connection_listener_new(listensockaddr, listensocklen,
- port->type, address, port);
+ port->type, address, port);
tor_free(listensockaddr);
tor_free(address);
} else {
@@ -1952,6 +2283,8 @@ retry_all_listeners(smartlist_t *replaced_conns,
const or_options_t *options = get_options();
int retval = 0;
const uint16_t old_or_port = router_get_advertised_or_port(options);
+ const uint16_t old_or_port_ipv6 =
+ router_get_advertised_or_port_by_af(options,AF_INET6);
const uint16_t old_dir_port = router_get_advertised_dir_port(options, 0);
SMARTLIST_FOREACH_BEGIN(get_connection_array(), connection_t *, conn) {
@@ -1980,8 +2313,9 @@ retry_all_listeners(smartlist_t *replaced_conns,
smartlist_free(listeners);
- /* XXXprop186 should take all advertised ports into account */
if (old_or_port != router_get_advertised_or_port(options) ||
+ old_or_port_ipv6 != router_get_advertised_or_port_by_af(options,
+ AF_INET6) ||
old_dir_port != router_get_advertised_dir_port(options, 0)) {
/* Our chosen ORPort or DirPort is not what it used to be: the
* descriptor we had (if any) should be regenerated. (We won't
@@ -2023,6 +2357,20 @@ connection_mark_all_noncontrol_connections(void)
connection_mark_unattached_ap(TO_ENTRY_CONN(conn),
END_STREAM_REASON_HIBERNATING);
break;
+ case CONN_TYPE_OR:
+ {
+ or_connection_t *orconn = TO_OR_CONN(conn);
+ if (orconn->chan) {
+ connection_or_close_normally(orconn, 0);
+ } else {
+ /*
+ * There should have been one, but mark for close and hope
+ * for the best..
+ */
+ connection_mark_for_close(conn);
+ }
+ }
+ break;
default:
connection_mark_for_close(conn);
break;
@@ -2033,9 +2381,9 @@ connection_mark_all_noncontrol_connections(void)
/** Return 1 if we should apply rate limiting to <b>conn</b>, and 0
* otherwise.
* Right now this just checks if it's an internal IP address or an
- * internal connection. We also check if the connection uses pluggable
- * transports, since we should then limit it even if it comes from an
- * internal IP address. */
+ * internal connection. We also should, but don't, check if the connection
+ * uses pluggable transports, since we should then limit it even if it
+ * comes from an internal IP address. */
static int
connection_is_rate_limited(connection_t *conn)
{
@@ -2075,7 +2423,8 @@ static int
connection_counts_as_relayed_traffic(connection_t *conn, time_t now)
{
if (conn->type == CONN_TYPE_OR &&
- TO_OR_CONN(conn)->client_used + CLIENT_IDLE_TIME_FOR_PRIORITY < now)
+ connection_or_client_used(TO_OR_CONN(conn)) +
+ CLIENT_IDLE_TIME_FOR_PRIORITY < now)
return 1;
if (conn->type == CONN_TYPE_DIR && DIR_CONN_IS_SERVER(conn))
return 1;
@@ -2120,8 +2469,7 @@ connection_bucket_round_robin(int base, int priority,
static ssize_t
connection_bucket_read_limit(connection_t *conn, time_t now)
{
- int base = connection_speaks_cells(conn) ?
- CELL_NETWORK_SIZE : RELAY_PAYLOAD_SIZE;
+ int base = RELAY_PAYLOAD_SIZE;
int priority = conn->type != CONN_TYPE_DIR;
int conn_bucket = -1;
int global_bucket = global_read_bucket;
@@ -2130,6 +2478,7 @@ connection_bucket_read_limit(connection_t *conn, time_t now)
or_connection_t *or_conn = TO_OR_CONN(conn);
if (conn->state == OR_CONN_STATE_OPEN)
conn_bucket = or_conn->read_bucket;
+ base = get_cell_network_size(or_conn->wide_circ_ids);
}
if (!connection_is_rate_limited(conn)) {
@@ -2149,8 +2498,7 @@ connection_bucket_read_limit(connection_t *conn, time_t now)
ssize_t
connection_bucket_write_limit(connection_t *conn, time_t now)
{
- int base = connection_speaks_cells(conn) ?
- CELL_NETWORK_SIZE : RELAY_PAYLOAD_SIZE;
+ int base = RELAY_PAYLOAD_SIZE;
int priority = conn->type != CONN_TYPE_DIR;
int conn_bucket = (int)conn->outbuf_flushlen;
int global_bucket = global_write_bucket;
@@ -2168,6 +2516,7 @@ connection_bucket_write_limit(connection_t *conn, time_t now)
if (or_conn->write_bucket < conn_bucket)
conn_bucket = or_conn->write_bucket >= 0 ?
or_conn->write_bucket : 0;
+ base = get_cell_network_size(or_conn->wide_circ_ids);
}
if (connection_counts_as_relayed_traffic(conn, now) &&
@@ -2196,9 +2545,8 @@ connection_bucket_write_limit(connection_t *conn, time_t now)
* shouldn't send <b>attempt</b> bytes of low-priority directory stuff
* out to <b>conn</b>. Else return 0.
- * Priority is 1 for v1 requests (directories and running-routers),
- * and 2 for v2 requests (statuses and descriptors). But see FFFF in
- * directory_handle_command_get() for why we don't use priority 2 yet.
+ * Priority was 1 for v1 requests (directories and running-routers),
+ * and 2 for v2 requests and later (statuses and descriptors).
*
* There are a lot of parameters we could use here:
* - global_relayed_write_bucket. Low is bad.
@@ -2305,6 +2653,35 @@ record_num_bytes_transferred(connection_t *conn,
#endif
#ifndef USE_BUFFEREVENTS
+/** Last time at which the global or relay buckets were emptied in msec
+ * since midnight. */
+static uint32_t global_relayed_read_emptied = 0,
+ global_relayed_write_emptied = 0,
+ global_read_emptied = 0,
+ global_write_emptied = 0;
+
+/** Helper: convert given <b>tvnow</b> time value to milliseconds since
+ * midnight. */
+static uint32_t
+msec_since_midnight(const struct timeval *tvnow)
+{
+ return (uint32_t)(((tvnow->tv_sec % 86400L) * 1000L) +
+ ((uint32_t)tvnow->tv_usec / (uint32_t)1000L));
+}
+
+/** Check if a bucket which had <b>tokens_before</b> tokens and which got
+ * <b>tokens_removed</b> tokens removed at timestamp <b>tvnow</b> has run
+ * out of tokens, and if so, note the milliseconds since midnight in
+ * <b>timestamp_var</b> for the next TB_EMPTY event. */
+void
+connection_buckets_note_empty_ts(uint32_t *timestamp_var,
+ int tokens_before, size_t tokens_removed,
+ const struct timeval *tvnow)
+{
+ if (tokens_before > 0 && (uint32_t)tokens_before <= tokens_removed)
+ *timestamp_var = msec_since_midnight(tvnow);
+}
+
/** We just read <b>num_read</b> and wrote <b>num_written</b> bytes
* onto <b>conn</b>. Decrement buckets appropriately. */
static void
@@ -2327,6 +2704,30 @@ connection_buckets_decrement(connection_t *conn, time_t now,
if (!connection_is_rate_limited(conn))
return; /* local IPs are free */
+ /* If one or more of our token buckets ran dry just now, note the
+ * timestamp for TB_EMPTY events. */
+ if (get_options()->TestingEnableTbEmptyEvent) {
+ struct timeval tvnow;
+ tor_gettimeofday_cached(&tvnow);
+ if (connection_counts_as_relayed_traffic(conn, now)) {
+ connection_buckets_note_empty_ts(&global_relayed_read_emptied,
+ global_relayed_read_bucket, num_read, &tvnow);
+ connection_buckets_note_empty_ts(&global_relayed_write_emptied,
+ global_relayed_write_bucket, num_written, &tvnow);
+ }
+ connection_buckets_note_empty_ts(&global_read_emptied,
+ global_read_bucket, num_read, &tvnow);
+ connection_buckets_note_empty_ts(&global_write_emptied,
+ global_write_bucket, num_written, &tvnow);
+ if (connection_speaks_cells(conn) && conn->state == OR_CONN_STATE_OPEN) {
+ or_connection_t *or_conn = TO_OR_CONN(conn);
+ connection_buckets_note_empty_ts(&or_conn->read_emptied_time,
+ or_conn->read_bucket, num_read, &tvnow);
+ connection_buckets_note_empty_ts(&or_conn->write_emptied_time,
+ or_conn->write_bucket, num_written, &tvnow);
+ }
+ }
+
if (connection_counts_as_relayed_traffic(conn, now)) {
global_relayed_read_bucket -= (int)num_read;
global_relayed_write_bucket -= (int)num_written;
@@ -2346,6 +2747,9 @@ connection_consider_empty_read_buckets(connection_t *conn)
{
const char *reason;
+ if (!connection_is_rate_limited(conn))
+ return; /* Always okay. */
+
if (global_read_bucket <= 0) {
reason = "global read bucket exhausted. Pausing.";
} else if (connection_counts_as_relayed_traffic(conn, approx_time()) &&
@@ -2370,6 +2774,9 @@ connection_consider_empty_write_buckets(connection_t *conn)
{
const char *reason;
+ if (!connection_is_rate_limited(conn))
+ return; /* Always okay. */
+
if (global_write_bucket <= 0) {
reason = "global write bucket exhausted. Pausing.";
} else if (connection_counts_as_relayed_traffic(conn, approx_time()) &&
@@ -2429,10 +2836,32 @@ connection_bucket_refill_helper(int *bucket, int rate, int burst,
*bucket = burst;
}
}
- log(LOG_DEBUG, LD_NET,"%s now %d.", name, *bucket);
+ log_debug(LD_NET,"%s now %d.", name, *bucket);
}
}
+/** Helper: return the time in milliseconds since <b>last_empty_time</b>
+ * when a bucket ran empty that previously had <b>tokens_before</b> tokens
+ * now has <b>tokens_after</b> tokens after refilling at timestamp
+ * <b>tvnow</b>, capped at <b>milliseconds_elapsed</b> milliseconds since
+ * last refilling that bucket. Return 0 if the bucket has not been empty
+ * since the last refill or has not been refilled. */
+uint32_t
+bucket_millis_empty(int tokens_before, uint32_t last_empty_time,
+ int tokens_after, int milliseconds_elapsed,
+ const struct timeval *tvnow)
+{
+ uint32_t result = 0, refilled;
+ if (tokens_before <= 0 && tokens_after > tokens_before) {
+ refilled = msec_since_midnight(tvnow);
+ result = (uint32_t)((refilled + 86400L * 1000L - last_empty_time) %
+ (86400L * 1000L));
+ if (result > (uint32_t)milliseconds_elapsed)
+ result = (uint32_t)milliseconds_elapsed;
+ }
+ return result;
+}
+
/** Time has passed; increment buckets appropriately. */
void
connection_bucket_refill(int milliseconds_elapsed, time_t now)
@@ -2441,6 +2870,12 @@ connection_bucket_refill(int milliseconds_elapsed, time_t now)
smartlist_t *conns = get_connection_array();
int bandwidthrate, bandwidthburst, relayrate, relayburst;
+ int prev_global_read = global_read_bucket;
+ int prev_global_write = global_write_bucket;
+ int prev_relay_read = global_relayed_read_bucket;
+ int prev_relay_write = global_relayed_write_bucket;
+ struct timeval tvnow; /*< Only used if TB_EMPTY events are enabled. */
+
bandwidthrate = (int)options->BandwidthRate;
bandwidthburst = (int)options->BandwidthBurst;
@@ -2475,12 +2910,42 @@ connection_bucket_refill(int milliseconds_elapsed, time_t now)
milliseconds_elapsed,
"global_relayed_write_bucket");
+ /* If buckets were empty before and have now been refilled, tell any
+ * interested controllers. */
+ if (get_options()->TestingEnableTbEmptyEvent) {
+ uint32_t global_read_empty_time, global_write_empty_time,
+ relay_read_empty_time, relay_write_empty_time;
+ tor_gettimeofday_cached(&tvnow);
+ global_read_empty_time = bucket_millis_empty(prev_global_read,
+ global_read_emptied, global_read_bucket,
+ milliseconds_elapsed, &tvnow);
+ global_write_empty_time = bucket_millis_empty(prev_global_write,
+ global_write_emptied, global_write_bucket,
+ milliseconds_elapsed, &tvnow);
+ control_event_tb_empty("GLOBAL", global_read_empty_time,
+ global_write_empty_time, milliseconds_elapsed);
+ relay_read_empty_time = bucket_millis_empty(prev_relay_read,
+ global_relayed_read_emptied,
+ global_relayed_read_bucket,
+ milliseconds_elapsed, &tvnow);
+ relay_write_empty_time = bucket_millis_empty(prev_relay_write,
+ global_relayed_write_emptied,
+ global_relayed_write_bucket,
+ milliseconds_elapsed, &tvnow);
+ control_event_tb_empty("RELAY", relay_read_empty_time,
+ relay_write_empty_time, milliseconds_elapsed);
+ }
+
/* refill the per-connection buckets */
SMARTLIST_FOREACH_BEGIN(conns, connection_t *, conn) {
if (connection_speaks_cells(conn)) {
or_connection_t *or_conn = TO_OR_CONN(conn);
int orbandwidthrate = or_conn->bandwidthrate;
int orbandwidthburst = or_conn->bandwidthburst;
+
+ int prev_conn_read = or_conn->read_bucket;
+ int prev_conn_write = or_conn->write_bucket;
+
if (connection_bucket_should_increase(or_conn->read_bucket, or_conn)) {
connection_bucket_refill_helper(&or_conn->read_bucket,
orbandwidthrate,
@@ -2495,6 +2960,27 @@ connection_bucket_refill(int milliseconds_elapsed, time_t now)
milliseconds_elapsed,
"or_conn->write_bucket");
}
+
+ /* If buckets were empty before and have now been refilled, tell any
+ * interested controllers. */
+ if (get_options()->TestingEnableTbEmptyEvent) {
+ char *bucket;
+ uint32_t conn_read_empty_time, conn_write_empty_time;
+ tor_asprintf(&bucket, "ORCONN ID="U64_FORMAT,
+ U64_PRINTF_ARG(or_conn->base_.global_identifier));
+ conn_read_empty_time = bucket_millis_empty(prev_conn_read,
+ or_conn->read_emptied_time,
+ or_conn->read_bucket,
+ milliseconds_elapsed, &tvnow);
+ conn_write_empty_time = bucket_millis_empty(prev_conn_write,
+ or_conn->write_emptied_time,
+ or_conn->write_bucket,
+ milliseconds_elapsed, &tvnow);
+ control_event_tb_empty(bucket, conn_read_empty_time,
+ conn_write_empty_time,
+ milliseconds_elapsed);
+ tor_free(bucket);
+ }
}
if (conn->read_blocked_on_bw == 1 /* marked to turn reading back on now */
@@ -2534,7 +3020,7 @@ connection_bucket_should_increase(int bucket, or_connection_t *conn)
{
tor_assert(conn);
- if (conn->_base.state != OR_CONN_STATE_OPEN)
+ if (conn->base_.state != OR_CONN_STATE_OPEN)
return 0; /* only open connections play the rate limiting game */
if (bucket >= conn->bandwidthburst)
return 0;
@@ -2651,6 +3137,8 @@ connection_handle_read_impl(connection_t *conn)
switch (conn->type) {
case CONN_TYPE_OR_LISTENER:
return connection_handle_listener_read(conn, CONN_TYPE_OR);
+ case CONN_TYPE_EXT_OR_LISTENER:
+ return connection_handle_listener_read(conn, CONN_TYPE_EXT_OR);
case CONN_TYPE_AP_LISTENER:
case CONN_TYPE_AP_TRANS_LISTENER:
case CONN_TYPE_AP_NATD_LISTENER:
@@ -2672,11 +3160,14 @@ connection_handle_read_impl(connection_t *conn)
before = buf_datalen(conn->inbuf);
if (connection_read_to_buf(conn, &max_to_read, &socket_error) < 0) {
/* There's a read error; kill the connection.*/
- if (conn->type == CONN_TYPE_OR &&
- conn->state == OR_CONN_STATE_CONNECTING) {
- connection_or_connect_failed(TO_OR_CONN(conn),
- errno_to_orconn_end_reason(socket_error),
- tor_socket_strerror(socket_error));
+ if (conn->type == CONN_TYPE_OR) {
+ connection_or_notify_error(TO_OR_CONN(conn),
+ socket_error != 0 ?
+ errno_to_orconn_end_reason(socket_error) :
+ END_OR_CONN_REASON_CONNRESET,
+ socket_error != 0 ?
+ tor_socket_strerror(socket_error) :
+ "(unknown, errno was 0)");
}
if (CONN_IS_EDGE(conn)) {
edge_connection_t *edge_conn = TO_EDGE_CONN(conn);
@@ -2687,7 +3178,11 @@ connection_handle_read_impl(connection_t *conn)
}
}
connection_close_immediate(conn); /* Don't flush; connection is dead. */
- connection_mark_for_close(conn);
+ /*
+ * This can bypass normal channel checking since we did
+ * connection_or_notify_error() above.
+ */
+ connection_mark_for_close_internal(conn);
return -1;
}
n_read += buf_datalen(conn->inbuf) - before;
@@ -2825,7 +3320,20 @@ connection_read_to_buf(connection_t *conn, ssize_t *max_to_read,
case TOR_TLS_WANTWRITE:
connection_start_writing(conn);
return 0;
- case TOR_TLS_WANTREAD: /* we're already reading */
+ case TOR_TLS_WANTREAD:
+ if (conn->in_connection_handle_write) {
+ /* We've been invoked from connection_handle_write, because we're
+ * waiting for a TLS renegotiation, the renegotiation started, and
+ * SSL_read returned WANTWRITE. But now SSL_read is saying WANTREAD
+ * again. Stop waiting for write events now, or else we'll
+ * busy-loop until data arrives for us to read. */
+ connection_stop_writing(conn);
+ if (!connection_is_reading(conn))
+ connection_start_reading(conn);
+ }
+ /* we're already reading, one hopes */
+ result = 0;
+ break;
case TOR_TLS_DONE: /* no data read, so nothing to process */
result = 0;
break; /* so we call bucket_decrement below */
@@ -2883,14 +3391,37 @@ connection_read_to_buf(connection_t *conn, ssize_t *max_to_read,
/* change *max_to_read */
*max_to_read = at_most - n_read;
- /* Update edge_conn->n_read */
+ /* Update edge_conn->n_read and ocirc->n_read_circ_bw */
if (conn->type == CONN_TYPE_AP) {
edge_connection_t *edge_conn = TO_EDGE_CONN(conn);
+ circuit_t *circ = circuit_get_by_edge_conn(edge_conn);
+ origin_circuit_t *ocirc;
+
/* Check for overflow: */
if (PREDICT_LIKELY(UINT32_MAX - edge_conn->n_read > n_read))
edge_conn->n_read += (int)n_read;
else
edge_conn->n_read = UINT32_MAX;
+
+ if (circ && CIRCUIT_IS_ORIGIN(circ)) {
+ ocirc = TO_ORIGIN_CIRCUIT(circ);
+ if (PREDICT_LIKELY(UINT32_MAX - ocirc->n_read_circ_bw > n_read))
+ ocirc->n_read_circ_bw += (int)n_read;
+ else
+ ocirc->n_read_circ_bw = UINT32_MAX;
+ }
+ }
+
+ /* If CONN_BW events are enabled, update conn->n_read_conn_bw for
+ * OR/DIR/EXIT connections, checking for overflow. */
+ if (get_options()->TestingEnableConnBwEvent &&
+ (conn->type == CONN_TYPE_OR ||
+ conn->type == CONN_TYPE_DIR ||
+ conn->type == CONN_TYPE_EXIT)) {
+ if (PREDICT_LIKELY(UINT32_MAX - conn->n_read_conn_bw > n_read))
+ conn->n_read_conn_bw += (int)n_read;
+ else
+ conn->n_read_conn_bw = UINT32_MAX;
}
}
@@ -3143,8 +3674,8 @@ connection_outbuf_too_full(connection_t *conn)
/** Try to flush more bytes onto <b>conn</b>-\>s.
*
- * This function gets called either from conn_write() in main.c
- * when poll() has declared that conn wants to write, or below
+ * This function gets called either from conn_write_callback() in main.c
+ * when libevent tells us that conn wants to write, or below
* from connection_write_to_buf() when an entire TLS record is ready.
*
* Update <b>conn</b>-\>timestamp_lastwritten to now, and call flush_buf
@@ -3168,6 +3699,7 @@ connection_handle_write_impl(connection_t *conn, int force)
ssize_t max_to_write;
time_t now = approx_time();
size_t n_read = 0, n_written = 0;
+ int dont_stop_writing = 0;
tor_assert(!connection_is_listener(conn));
@@ -3198,12 +3730,16 @@ connection_handle_write_impl(connection_t *conn, int force)
if (CONN_IS_EDGE(conn))
connection_edge_end_errno(TO_EDGE_CONN(conn));
if (conn->type == CONN_TYPE_OR)
- connection_or_connect_failed(TO_OR_CONN(conn),
- errno_to_orconn_end_reason(e),
- tor_socket_strerror(e));
+ connection_or_notify_error(TO_OR_CONN(conn),
+ errno_to_orconn_end_reason(e),
+ tor_socket_strerror(e));
connection_close_immediate(conn);
- connection_mark_for_close(conn);
+ /*
+ * This can bypass normal channel checking since we did
+ * connection_or_notify_error() above.
+ */
+ connection_mark_for_close_internal(conn);
return -1;
} else {
return 0; /* no change, see if next time is better */
@@ -3220,13 +3756,22 @@ connection_handle_write_impl(connection_t *conn, int force)
if (connection_speaks_cells(conn) &&
conn->state > OR_CONN_STATE_PROXY_HANDSHAKING) {
or_connection_t *or_conn = TO_OR_CONN(conn);
+ size_t initial_size;
if (conn->state == OR_CONN_STATE_TLS_HANDSHAKING ||
conn->state == OR_CONN_STATE_TLS_CLIENT_RENEGOTIATING) {
connection_stop_writing(conn);
if (connection_tls_continue_handshake(or_conn) < 0) {
/* Don't flush; connection is dead. */
+ connection_or_notify_error(or_conn,
+ END_OR_CONN_REASON_MISC,
+ "TLS error in connection_tls_"
+ "continue_handshake()");
connection_close_immediate(conn);
- connection_mark_for_close(conn);
+ /*
+ * This can bypass normal channel checking since we did
+ * connection_or_notify_error() above.
+ */
+ connection_mark_for_close_internal(conn);
return -1;
}
return 0;
@@ -3235,29 +3780,39 @@ connection_handle_write_impl(connection_t *conn, int force)
}
/* else open, or closing */
+ initial_size = buf_datalen(conn->outbuf);
result = flush_buf_tls(or_conn->tls, conn->outbuf,
max_to_write, &conn->outbuf_flushlen);
- /* If we just flushed the last bytes, check if this tunneled dir
- * request is done. */
+ /* If we just flushed the last bytes, tell the channel on the
+ * or_conn to check if it needs to geoip_change_dirreq_state() */
/* XXXX move this to flushed_some or finished_flushing -NM */
- if (buf_datalen(conn->outbuf) == 0 && conn->dirreq_id)
- geoip_change_dirreq_state(conn->dirreq_id, DIRREQ_TUNNELED,
- DIRREQ_OR_CONN_BUFFER_FLUSHED);
+ if (buf_datalen(conn->outbuf) == 0 && or_conn->chan)
+ channel_notify_flushed(TLS_CHAN_TO_BASE(or_conn->chan));
switch (result) {
CASE_TOR_TLS_ERROR_ANY:
case TOR_TLS_CLOSE:
- log_info(LD_NET,result!=TOR_TLS_CLOSE?
+ log_info(LD_NET, result != TOR_TLS_CLOSE ?
"tls error. breaking.":"TLS connection closed on flush");
/* Don't flush; connection is dead. */
+ connection_or_notify_error(or_conn,
+ END_OR_CONN_REASON_MISC,
+ result != TOR_TLS_CLOSE ?
+ "TLS error in during flush" :
+ "TLS closed during flush");
connection_close_immediate(conn);
- connection_mark_for_close(conn);
+ /*
+ * This can bypass normal channel checking since we did
+ * connection_or_notify_error() above.
+ */
+ connection_mark_for_close_internal(conn);
return -1;
case TOR_TLS_WANTWRITE:
log_debug(LD_NET,"wanted write.");
/* we're already writing */
- return 0;
+ dont_stop_writing = 1;
+ break;
case TOR_TLS_WANTREAD:
/* Make sure to avoid a loop if the receive buckets are empty. */
log_debug(LD_NET,"wanted read.");
@@ -3279,6 +3834,12 @@ connection_handle_write_impl(connection_t *conn, int force)
tor_tls_get_n_raw_bytes(or_conn->tls, &n_read, &n_written);
log_debug(LD_GENERAL, "After TLS write of %d: %ld read, %ld written",
result, (long)n_read, (long)n_written);
+ /* So we notice bytes were written even on error */
+ /* XXXX024 This cast is safe since we can never write INT_MAX bytes in a
+ * single set of TLS operations. But it looks kinda ugly. If we refactor
+ * the *_buf_tls functions, we should make them return ssize_t or size_t
+ * or something. */
+ result = (int)(initial_size-buf_datalen(conn->outbuf));
} else {
CONN_LOG_PROTECT(conn,
result = flush_buf(conn->s, conn->outbuf,
@@ -3286,6 +3847,10 @@ connection_handle_write_impl(connection_t *conn, int force)
if (result < 0) {
if (CONN_IS_EDGE(conn))
connection_edge_end_errno(TO_EDGE_CONN(conn));
+ if (conn->type == CONN_TYPE_AP) {
+ /* writing failed; we couldn't send a SOCKS reply if we wanted to */
+ TO_ENTRY_CONN(conn)->socks_request->has_finished = 1;
+ }
connection_close_immediate(conn); /* Don't flush; connection is dead. */
connection_mark_for_close(conn);
@@ -3296,12 +3861,34 @@ connection_handle_write_impl(connection_t *conn, int force)
if (n_written && conn->type == CONN_TYPE_AP) {
edge_connection_t *edge_conn = TO_EDGE_CONN(conn);
+ circuit_t *circ = circuit_get_by_edge_conn(edge_conn);
+ origin_circuit_t *ocirc;
/* Check for overflow: */
if (PREDICT_LIKELY(UINT32_MAX - edge_conn->n_written > n_written))
edge_conn->n_written += (int)n_written;
else
edge_conn->n_written = UINT32_MAX;
+
+ if (circ && CIRCUIT_IS_ORIGIN(circ)) {
+ ocirc = TO_ORIGIN_CIRCUIT(circ);
+ if (PREDICT_LIKELY(UINT32_MAX - ocirc->n_written_circ_bw > n_written))
+ ocirc->n_written_circ_bw += (int)n_written;
+ else
+ ocirc->n_written_circ_bw = UINT32_MAX;
+ }
+ }
+
+ /* If CONN_BW events are enabled, update conn->n_written_conn_bw for
+ * OR/DIR/EXIT connections, checking for overflow. */
+ if (n_written && get_options()->TestingEnableConnBwEvent &&
+ (conn->type == CONN_TYPE_OR ||
+ conn->type == CONN_TYPE_DIR ||
+ conn->type == CONN_TYPE_EXIT)) {
+ if (PREDICT_LIKELY(UINT32_MAX - conn->n_written_conn_bw > n_written))
+ conn->n_written_conn_bw += (int)n_written;
+ else
+ conn->n_written_conn_bw = UINT32_MAX;
}
connection_buckets_decrement(conn, approx_time(), n_read, n_written);
@@ -3309,11 +3896,24 @@ connection_handle_write_impl(connection_t *conn, int force)
if (result > 0) {
/* If we wrote any bytes from our buffer, then call the appropriate
* functions. */
- if (connection_flushed_some(conn) < 0)
- connection_mark_for_close(conn);
+ if (connection_flushed_some(conn) < 0) {
+ if (connection_speaks_cells(conn)) {
+ connection_or_notify_error(TO_OR_CONN(conn),
+ END_OR_CONN_REASON_MISC,
+ "Got error back from "
+ "connection_flushed_some()");
+ }
+
+ /*
+ * This can bypass normal channel checking since we did
+ * connection_or_notify_error() above.
+ */
+ connection_mark_for_close_internal(conn);
+ }
}
- if (!connection_wants_to_flush(conn)) { /* it's done flushing */
+ if (!connection_wants_to_flush(conn) &&
+ !dont_stop_writing) { /* it's done flushing */
if (connection_finished_flushing(conn) < 0) {
/* already marked */
return -1;
@@ -3337,7 +3937,9 @@ connection_handle_write(connection_t *conn, int force)
{
int res;
tor_gettimeofday_cache_clear();
+ conn->in_connection_handle_write = 1;
res = connection_handle_write_impl(conn, force);
+ conn->in_connection_handle_write = 0;
return res;
}
@@ -3360,13 +3962,6 @@ connection_flush(connection_t *conn)
return connection_handle_write(conn, 1);
}
-/** OpenSSL TLS record size is 16383; this is close. The goal here is to
- * push data out as soon as we know there's enough for a TLS record, so
- * during periods of high load we won't read entire megabytes from
- * input before pushing any data out. It also has the feature of not
- * growing huge outbufs unless something is slow. */
-#define MIN_TLS_FLUSHLEN 15872
-
/** Append <b>len</b> bytes of <b>string</b> onto <b>conn</b>'s
* outbuf, and ask it to start writing.
*
@@ -3375,14 +3970,13 @@ connection_flush(connection_t *conn)
* negative, this is the last data to be compressed, and the connection's zlib
* state should be flushed.
*
- * If it's an OR conn and an entire TLS record is ready, then try to
- * flush the record now. Similarly, if it's a local control connection
- * and a 64k chunk is ready, try to flush it all, so we don't end up with
- * many megabytes of controller info queued at once.
+ * If it's a local control connection and a 64k chunk is ready, try to flush
+ * it all, so we don't end up with many megabytes of controller info queued at
+ * once.
*/
-void
-_connection_write_to_buf_impl(const char *string, size_t len,
- connection_t *conn, int zlib)
+MOCK_IMPL(void,
+connection_write_to_buf_impl_,(const char *string, size_t len,
+ connection_t *conn, int zlib))
{
/* XXXX This function really needs to return -1 on failure. */
int r;
@@ -3427,6 +4021,12 @@ _connection_write_to_buf_impl(const char *string, size_t len,
"write_to_buf failed. Closing circuit (fd %d).", (int)conn->s);
circuit_mark_for_close(circuit_get_by_edge_conn(TO_EDGE_CONN(conn)),
END_CIRC_REASON_INTERNAL);
+ } else if (conn->type == CONN_TYPE_OR) {
+ or_connection_t *orconn = TO_OR_CONN(conn);
+ log_warn(LD_NET,
+ "write_to_buf failed on an orconn; notifying of error "
+ "(fd %d)", (int)(conn->s));
+ connection_or_close_for_error(orconn, 0);
} else {
log_warn(LD_NET,
"write_to_buf failed. Closing connection (fd %d).",
@@ -3446,7 +4046,6 @@ _connection_write_to_buf_impl(const char *string, size_t len,
if (zlib) {
conn->outbuf_flushlen += buf_datalen(conn->outbuf) - old_datalen;
} else {
- ssize_t extra = 0;
conn->outbuf_flushlen += len;
/* Should we try flushing the outbuf now? */
@@ -3456,14 +4055,7 @@ _connection_write_to_buf_impl(const char *string, size_t len,
return;
}
- if (conn->type == CONN_TYPE_OR &&
- conn->outbuf_flushlen-len < MIN_TLS_FLUSHLEN &&
- conn->outbuf_flushlen >= MIN_TLS_FLUSHLEN) {
- /* We just pushed outbuf_flushlen to MIN_TLS_FLUSHLEN or above;
- * we can send out a full TLS frame now if we like. */
- extra = conn->outbuf_flushlen - MIN_TLS_FLUSHLEN;
- conn->outbuf_flushlen = MIN_TLS_FLUSHLEN;
- } else if (conn->type == CONN_TYPE_CONTROL &&
+ if (conn->type == CONN_TYPE_CONTROL &&
!connection_is_rate_limited(conn) &&
conn->outbuf_flushlen-len < 1<<16 &&
conn->outbuf_flushlen >= 1<<16) {
@@ -3483,10 +4075,6 @@ _connection_write_to_buf_impl(const char *string, size_t len,
}
return;
}
- if (extra) {
- conn->outbuf_flushlen += extra;
- connection_start_writing(conn);
- }
}
}
@@ -3613,20 +4201,29 @@ connection_dir_get_by_purpose_and_resource(int purpose,
return NULL;
}
-/** Return an open, non-marked connection of a given type and purpose, or NULL
- * if no such connection exists. */
-connection_t *
-connection_get_by_type_purpose(int type, int purpose)
+/** Return 1 if there are any active OR connections apart from
+ * <b>this_conn</b>.
+ *
+ * We use this to guess if we should tell the controller that we
+ * didn't manage to connect to any of our bridges. */
+int
+any_other_active_or_conns(const or_connection_t *this_conn)
{
smartlist_t *conns = get_connection_array();
- SMARTLIST_FOREACH(conns, connection_t *, conn,
- {
- if (conn->type == type &&
- !conn->marked_for_close &&
- (purpose == conn->purpose))
- return conn;
- });
- return NULL;
+ SMARTLIST_FOREACH_BEGIN(conns, connection_t *, conn) {
+ if (conn == TO_CONN(this_conn)) { /* don't consider this conn */
+ continue;
+ }
+
+ if (conn->type == CONN_TYPE_OR &&
+ !conn->marked_for_close) {
+ log_debug(LD_DIR, "%s: Found an OR connection: %s",
+ __func__, conn->address);
+ return 1;
+ }
+ } SMARTLIST_FOREACH_END(conn);
+
+ return 0;
}
/** Return 1 if <b>conn</b> is a listener conn, else return 0. */
@@ -3634,6 +4231,7 @@ int
connection_is_listener(connection_t *conn)
{
if (conn->type == CONN_TYPE_OR_LISTENER ||
+ conn->type == CONN_TYPE_EXT_OR_LISTENER ||
conn->type == CONN_TYPE_AP_LISTENER ||
conn->type == CONN_TYPE_AP_TRANS_LISTENER ||
conn->type == CONN_TYPE_AP_DNS_LISTENER ||
@@ -3656,6 +4254,7 @@ connection_state_is_open(connection_t *conn)
return 0;
if ((conn->type == CONN_TYPE_OR && conn->state == OR_CONN_STATE_OPEN) ||
+ (conn->type == CONN_TYPE_EXT_OR) ||
(conn->type == CONN_TYPE_AP && conn->state == AP_CONN_STATE_OPEN) ||
(conn->type == CONN_TYPE_EXIT && conn->state == EXIT_CONN_STATE_OPEN) ||
(conn->type == CONN_TYPE_CONTROL &&
@@ -3777,7 +4376,7 @@ client_check_address_changed(tor_socket_t sock)
} else {
/* The interface changed. We're a client, so we need to regenerate our
* keys. First, reset the state. */
- log(LOG_NOTICE, LD_NET, "Our IP address has changed. Rotating keys...");
+ log_notice(LD_NET, "Our IP address has changed. Rotating keys...");
tor_addr_copy(*last_interface_ip_ptr, &iface_addr);
SMARTLIST_FOREACH(outgoing_addrs, tor_addr_t*, a_ptr, tor_free(a_ptr));
smartlist_clear(outgoing_addrs);
@@ -3825,6 +4424,8 @@ connection_process_inbuf(connection_t *conn, int package_partial)
switch (conn->type) {
case CONN_TYPE_OR:
return connection_or_process_inbuf(TO_OR_CONN(conn));
+ case CONN_TYPE_EXT_OR:
+ return connection_ext_or_process_inbuf(TO_OR_CONN(conn));
case CONN_TYPE_EXIT:
case CONN_TYPE_AP:
return connection_edge_process_inbuf(TO_EDGE_CONN(conn),
@@ -3861,8 +4462,9 @@ connection_flushed_some(connection_t *conn)
return r;
}
-/** We just finished flushing bytes from conn-\>outbuf, and there
- * are no more bytes remaining.
+/** We just finished flushing bytes to the appropriately low network layer,
+ * and there are no more bytes remaining in conn-\>outbuf, conn-\>bev, or
+ * conn-\>tls to be flushed.
*
* This function just passes conn to the connection-specific
* connection_*_finished_flushing() function.
@@ -3884,6 +4486,8 @@ connection_finished_flushing(connection_t *conn)
switch (conn->type) {
case CONN_TYPE_OR:
return connection_or_finished_flushing(TO_OR_CONN(conn));
+ case CONN_TYPE_EXT_OR:
+ return connection_ext_or_finished_flushing(TO_OR_CONN(conn));
case CONN_TYPE_AP:
case CONN_TYPE_EXIT:
return connection_edge_finished_flushing(TO_EDGE_CONN(conn));
@@ -3939,6 +4543,7 @@ connection_reached_eof(connection_t *conn)
{
switch (conn->type) {
case CONN_TYPE_OR:
+ case CONN_TYPE_EXT_OR:
return connection_or_reached_eof(TO_OR_CONN(conn));
case CONN_TYPE_AP:
case CONN_TYPE_EXIT:
@@ -3960,9 +4565,9 @@ connection_reached_eof(connection_t *conn)
void
connection_dump_buffer_mem_stats(int severity)
{
- uint64_t used_by_type[_CONN_TYPE_MAX+1];
- uint64_t alloc_by_type[_CONN_TYPE_MAX+1];
- int n_conns_by_type[_CONN_TYPE_MAX+1];
+ uint64_t used_by_type[CONN_TYPE_MAX_+1];
+ uint64_t alloc_by_type[CONN_TYPE_MAX_+1];
+ int n_conns_by_type[CONN_TYPE_MAX_+1];
uint64_t total_alloc = 0;
uint64_t total_used = 0;
int i;
@@ -3984,19 +4589,19 @@ connection_dump_buffer_mem_stats(int severity)
alloc_by_type[tp] += buf_allocation(c->outbuf);
}
} SMARTLIST_FOREACH_END(c);
- for (i=0; i <= _CONN_TYPE_MAX; ++i) {
+ for (i=0; i <= CONN_TYPE_MAX_; ++i) {
total_used += used_by_type[i];
total_alloc += alloc_by_type[i];
}
- log(severity, LD_GENERAL,
+ tor_log(severity, LD_GENERAL,
"In buffers for %d connections: "U64_FORMAT" used/"U64_FORMAT" allocated",
smartlist_len(conns),
U64_PRINTF_ARG(total_used), U64_PRINTF_ARG(total_alloc));
- for (i=_CONN_TYPE_MIN; i <= _CONN_TYPE_MAX; ++i) {
+ for (i=CONN_TYPE_MIN_; i <= CONN_TYPE_MAX_; ++i) {
if (!n_conns_by_type[i])
continue;
- log(severity, LD_GENERAL,
+ tor_log(severity, LD_GENERAL,
" For %d %s connections: "U64_FORMAT" used/"U64_FORMAT" allocated",
n_conns_by_type[i], conn_type_to_string(i),
U64_PRINTF_ARG(used_by_type[i]), U64_PRINTF_ARG(alloc_by_type[i]));
@@ -4011,8 +4616,8 @@ assert_connection_ok(connection_t *conn, time_t now)
{
(void) now; /* XXXX unused. */
tor_assert(conn);
- tor_assert(conn->type >= _CONN_TYPE_MIN);
- tor_assert(conn->type <= _CONN_TYPE_MAX);
+ tor_assert(conn->type >= CONN_TYPE_MIN_);
+ tor_assert(conn->type <= CONN_TYPE_MAX_);
#ifdef USE_BUFFEREVENTS
if (conn->bufev) {
@@ -4025,6 +4630,7 @@ assert_connection_ok(connection_t *conn, time_t now)
switch (conn->type) {
case CONN_TYPE_OR:
+ case CONN_TYPE_EXT_OR:
tor_assert(conn->magic == OR_CONNECTION_MAGIC);
break;
case CONN_TYPE_AP:
@@ -4127,34 +4733,37 @@ assert_connection_ok(connection_t *conn, time_t now)
tor_assert(conn->state == LISTENER_STATE_READY);
break;
case CONN_TYPE_OR:
- tor_assert(conn->state >= _OR_CONN_STATE_MIN);
- tor_assert(conn->state <= _OR_CONN_STATE_MAX);
- tor_assert(TO_OR_CONN(conn)->n_circuits >= 0);
+ tor_assert(conn->state >= OR_CONN_STATE_MIN_);
+ tor_assert(conn->state <= OR_CONN_STATE_MAX_);
+ break;
+ case CONN_TYPE_EXT_OR:
+ tor_assert(conn->state >= EXT_OR_CONN_STATE_MIN_);
+ tor_assert(conn->state <= EXT_OR_CONN_STATE_MAX_);
break;
case CONN_TYPE_EXIT:
- tor_assert(conn->state >= _EXIT_CONN_STATE_MIN);
- tor_assert(conn->state <= _EXIT_CONN_STATE_MAX);
- tor_assert(conn->purpose >= _EXIT_PURPOSE_MIN);
- tor_assert(conn->purpose <= _EXIT_PURPOSE_MAX);
+ tor_assert(conn->state >= EXIT_CONN_STATE_MIN_);
+ tor_assert(conn->state <= EXIT_CONN_STATE_MAX_);
+ tor_assert(conn->purpose >= EXIT_PURPOSE_MIN_);
+ tor_assert(conn->purpose <= EXIT_PURPOSE_MAX_);
break;
case CONN_TYPE_AP:
- tor_assert(conn->state >= _AP_CONN_STATE_MIN);
- tor_assert(conn->state <= _AP_CONN_STATE_MAX);
+ tor_assert(conn->state >= AP_CONN_STATE_MIN_);
+ tor_assert(conn->state <= AP_CONN_STATE_MAX_);
tor_assert(TO_ENTRY_CONN(conn)->socks_request);
break;
case CONN_TYPE_DIR:
- tor_assert(conn->state >= _DIR_CONN_STATE_MIN);
- tor_assert(conn->state <= _DIR_CONN_STATE_MAX);
- tor_assert(conn->purpose >= _DIR_PURPOSE_MIN);
- tor_assert(conn->purpose <= _DIR_PURPOSE_MAX);
+ tor_assert(conn->state >= DIR_CONN_STATE_MIN_);
+ tor_assert(conn->state <= DIR_CONN_STATE_MAX_);
+ tor_assert(conn->purpose >= DIR_PURPOSE_MIN_);
+ tor_assert(conn->purpose <= DIR_PURPOSE_MAX_);
break;
case CONN_TYPE_CPUWORKER:
- tor_assert(conn->state >= _CPUWORKER_STATE_MIN);
- tor_assert(conn->state <= _CPUWORKER_STATE_MAX);
+ tor_assert(conn->state >= CPUWORKER_STATE_MIN_);
+ tor_assert(conn->state <= CPUWORKER_STATE_MAX_);
break;
case CONN_TYPE_CONTROL:
- tor_assert(conn->state >= _CONTROL_CONN_STATE_MIN);
- tor_assert(conn->state <= _CONTROL_CONN_STATE_MAX);
+ tor_assert(conn->state >= CONTROL_CONN_STATE_MIN_);
+ tor_assert(conn->state <= CONTROL_CONN_STATE_MAX_);
break;
default:
tor_assert(0);
@@ -4192,7 +4801,7 @@ get_proxy_addrport(tor_addr_t *addr, uint16_t *port, int *proxy_type,
options->Bridges) {
const transport_t *transport = NULL;
int r;
- r = find_transport_by_bridge_addrport(&conn->addr, conn->port, &transport);
+ r = get_transport_by_bridge_addrport(&conn->addr, conn->port, &transport);
if (r<0)
return -1;
if (transport) { /* transport found */
@@ -4203,28 +4812,12 @@ get_proxy_addrport(tor_addr_t *addr, uint16_t *port, int *proxy_type,
}
}
+ tor_addr_make_unspec(addr);
+ *port = 0;
*proxy_type = PROXY_NONE;
return 0;
}
-/** Returns the global proxy type used by tor. */
-static int
-get_proxy_type(void)
-{
- const or_options_t *options = get_options();
-
- if (options->HTTPSProxy)
- return PROXY_CONNECT;
- else if (options->Socks4Proxy)
- return PROXY_SOCKS4;
- else if (options->Socks5Proxy)
- return PROXY_SOCKS5;
- else if (options->ClientTransportPlugin)
- return PROXY_PLUGGABLE;
- else
- return PROXY_NONE;
-}
-
/** Log a failed connection to a proxy server.
* <b>conn</b> is the connection we use the proxy server for. */
void
@@ -4238,10 +4831,10 @@ log_failed_proxy_connection(connection_t *conn)
return; /* if we have no proxy set up, leave this function. */
log_warn(LD_NET,
- "The connection to the %s proxy server at %s:%u just failed. "
+ "The connection to the %s proxy server at %s just failed. "
"Make sure that the proxy server is up and running.",
- proxy_type_to_string(get_proxy_type()), fmt_addr(&proxy_addr),
- proxy_port);
+ proxy_type_to_string(get_proxy_type()),
+ fmt_addrport(&proxy_addr, proxy_port));
}
/** Return string representation of <b>proxy_type</b>. */
@@ -4259,7 +4852,7 @@ proxy_type_to_string(int proxy_type)
return NULL; /*Unreached*/
}
-/** Call _connection_free() on every connection in our array, and release all
+/** Call connection_free_() on every connection in our array, and release all
* storage held by connection.c. This is used by cpuworkers and dnsworkers
* when they fork, so they don't keep resources held open (especially
* sockets).
@@ -4281,11 +4874,12 @@ connection_free_all(void)
/* Unlink everything from the identity map. */
connection_or_clear_identity_map();
+ connection_or_clear_ext_or_id_map();
/* Clear out our list of broken connections */
clear_broken_connection_map(0);
- SMARTLIST_FOREACH(conns, connection_t *, conn, _connection_free(conn));
+ SMARTLIST_FOREACH(conns, connection_t *, conn, connection_free_(conn));
if (outgoing_addrs) {
SMARTLIST_FOREACH(outgoing_addrs, tor_addr_t *, addr, tor_free(addr));
@@ -4293,6 +4887,9 @@ connection_free_all(void)
outgoing_addrs = NULL;
}
+ tor_free(last_interface_ipv4);
+ tor_free(last_interface_ipv6);
+
#ifdef USE_BUFFEREVENTS
if (global_rate_limit)
bufferevent_rate_limit_group_free(global_rate_limit);
diff --git a/src/or/connection.h b/src/or/connection.h
index 785625e44..13dcbcd91 100644
--- a/src/or/connection.h
+++ b/src/or/connection.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,8 +9,8 @@
* \brief Header file for connection.c.
**/
-#ifndef _TOR_CONNECTION_H
-#define _TOR_CONNECTION_H
+#ifndef TOR_CONNECTION_H
+#define TOR_CONNECTION_H
/* XXXX For buf_datalen in inline function */
#include "buffers.h"
@@ -19,7 +19,7 @@ const char *conn_type_to_string(int type);
const char *conn_state_to_string(int type, int state);
dir_connection_t *dir_connection_new(int socket_family);
-or_connection_t *or_connection_new(int socket_family);
+or_connection_t *or_connection_new(int type, int socket_family);
edge_connection_t *edge_connection_new(int type, int socket_family);
entry_connection_t *entry_connection_new(int type, int socket_family);
control_connection_t *control_connection_new(int socket_family);
@@ -31,25 +31,57 @@ void connection_free(connection_t *conn);
void connection_free_all(void);
void connection_about_to_close_connection(connection_t *conn);
void connection_close_immediate(connection_t *conn);
-void _connection_mark_for_close(connection_t *conn,int line, const char *file);
+void connection_mark_for_close_(connection_t *conn,
+ int line, const char *file);
+void connection_mark_for_close_internal_(connection_t *conn,
+ int line, const char *file);
#define connection_mark_for_close(c) \
- _connection_mark_for_close((c), __LINE__, _SHORT_FILE_)
+ connection_mark_for_close_((c), __LINE__, SHORT_FILE__)
+#define connection_mark_for_close_internal(c) \
+ connection_mark_for_close_internal_((c), __LINE__, SHORT_FILE__)
/**
* Mark 'c' for close, but try to hold it open until all the data is written.
+ * Use the _internal versions of connection_mark_for_close; this should be
+ * called when you either are sure that if this is an or_connection_t the
+ * controlling channel has been notified (e.g. with
+ * connection_or_notify_error()), or you actually are the
+ * connection_or_close_for_error() or connection_or_close_normally function.
+ * For all other cases, use connection_mark_and_flush() instead, which
+ * checks for or_connection_t properly, instead. See below.
*/
-#define _connection_mark_and_flush(c,line,file) \
- do { \
- connection_t *tmp_conn_ = (c); \
- _connection_mark_for_close(tmp_conn_, (line), (file)); \
- tmp_conn_->hold_open_until_flushed = 1; \
- IF_HAS_BUFFEREVENT(tmp_conn_, \
- connection_start_writing(tmp_conn_)); \
+#define connection_mark_and_flush_internal_(c,line,file) \
+ do { \
+ connection_t *tmp_conn_ = (c); \
+ connection_mark_for_close_internal_(tmp_conn_, (line), (file)); \
+ tmp_conn_->hold_open_until_flushed = 1; \
+ IF_HAS_BUFFEREVENT(tmp_conn_, \
+ connection_start_writing(tmp_conn_)); \
+ } while (0)
+
+#define connection_mark_and_flush_internal(c) \
+ connection_mark_and_flush_internal_((c), __LINE__, SHORT_FILE__)
+
+/**
+ * Mark 'c' for close, but try to hold it open until all the data is written.
+ */
+#define connection_mark_and_flush_(c,line,file) \
+ do { \
+ connection_t *tmp_conn_ = (c); \
+ if (tmp_conn_->type == CONN_TYPE_OR) { \
+ log_warn(LD_CHANNEL | LD_BUG, \
+ "Something tried to close (and flush) an or_connection_t" \
+ " without going through channels at %s:%d", \
+ file, line); \
+ connection_or_close_for_error(TO_OR_CONN(tmp_conn_), 1); \
+ } else { \
+ connection_mark_and_flush_internal_(c, line, file); \
+ } \
} while (0)
#define connection_mark_and_flush(c) \
- _connection_mark_and_flush((c), __LINE__, _SHORT_FILE_)
+ connection_mark_and_flush_((c), __LINE__, SHORT_FILE__)
void connection_expire_held_open(void);
@@ -57,6 +89,14 @@ int connection_connect(connection_t *conn, const char *address,
const tor_addr_t *addr,
uint16_t port, int *socket_error);
+/** Maximum size of information that we can fit into SOCKS5 username
+ or password fields. */
+#define MAX_SOCKS5_AUTH_FIELD_SIZE 255
+
+/** Total maximum size of information that we can fit into SOCKS5
+ username and password fields. */
+#define MAX_SOCKS5_AUTH_SIZE_TOTAL 2*MAX_SOCKS5_AUTH_FIELD_SIZE
+
int connection_proxy_connect(connection_t *conn, int type);
int connection_read_proxy_handshake(connection_t *conn);
void log_failed_proxy_connection(connection_t *conn);
@@ -90,8 +130,8 @@ int connection_outbuf_too_full(connection_t *conn);
int connection_handle_write(connection_t *conn, int force);
int connection_flush(connection_t *conn);
-void _connection_write_to_buf_impl(const char *string, size_t len,
- connection_t *conn, int zlib);
+MOCK_DECL(void, connection_write_to_buf_impl_,
+ (const char *string, size_t len, connection_t *conn, int zlib));
/* DOCDOC connection_write_to_buf */
static void connection_write_to_buf(const char *string, size_t len,
connection_t *conn);
@@ -101,13 +141,13 @@ static void connection_write_to_buf_zlib(const char *string, size_t len,
static INLINE void
connection_write_to_buf(const char *string, size_t len, connection_t *conn)
{
- _connection_write_to_buf_impl(string, len, conn, 0);
+ connection_write_to_buf_impl_(string, len, conn, 0);
}
static INLINE void
connection_write_to_buf_zlib(const char *string, size_t len,
dir_connection_t *conn, int done)
{
- _connection_write_to_buf_impl(string, len, TO_CONN(conn), done ? -1 : 1);
+ connection_write_to_buf_impl_(string, len, TO_CONN(conn), done ? -1 : 1);
}
/* DOCDOC connection_get_inbuf_len */
@@ -138,7 +178,6 @@ connection_get_outbuf_len(connection_t *conn)
connection_t *connection_get_by_global_id(uint64_t id);
connection_t *connection_get_by_type(int type);
-connection_t *connection_get_by_type_purpose(int type, int purpose);
connection_t *connection_get_by_type_addr_port_purpose(int type,
const tor_addr_t *addr,
uint16_t port, int purpose);
@@ -148,6 +187,8 @@ connection_t *connection_get_by_type_state_rendquery(int type, int state,
dir_connection_t *connection_dir_get_by_purpose_and_resource(
int state, const char *resource);
+int any_other_active_or_conns(const or_connection_t *this_conn);
+
#define connection_speaks_cells(conn) ((conn)->type == CONN_TYPE_OR)
int connection_is_listener(connection_t *conn);
int connection_state_is_open(connection_t *conn);
@@ -174,5 +215,18 @@ void connection_enable_rate_limiting(connection_t *conn);
#define connection_type_uses_bufferevent(c) (0)
#endif
+#ifdef CONNECTION_PRIVATE
+STATIC void connection_free_(connection_t *conn);
+
+/* Used only by connection.c and test*.c */
+uint32_t bucket_millis_empty(int tokens_before, uint32_t last_empty_time,
+ int tokens_after, int milliseconds_elapsed,
+ const struct timeval *tvnow);
+void connection_buckets_note_empty_ts(uint32_t *timestamp_var,
+ int tokens_before,
+ size_t tokens_removed,
+ const struct timeval *tvnow);
+#endif
+
#endif
diff --git a/src/or/connection_edge.c b/src/or/connection_edge.c
index 9563ca622..49f9ba497 100644
--- a/src/or/connection_edge.c
+++ b/src/or/connection_edge.c
@@ -1,16 +1,20 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
* \file connection_edge.c
* \brief Handle edge streams.
**/
+#define CONNECTION_EDGE_PRIVATE
#include "or.h"
+#include "addressmap.h"
#include "buffers.h"
+#include "channel.h"
+#include "circpathbias.h"
#include "circuitlist.h"
#include "circuituse.h"
#include "config.h"
@@ -33,6 +37,8 @@
#include "rephist.h"
#include "router.h"
#include "routerlist.h"
+#include "routerset.h"
+#include "circuitbuild.h"
#ifdef HAVE_LINUX_TYPES_H
#include <linux/types.h>
@@ -54,18 +60,16 @@
static int connection_ap_handshake_process_socks(entry_connection_t *conn);
static int connection_ap_process_natd(entry_connection_t *conn);
static int connection_exit_connect_dir(edge_connection_t *exitconn);
-static int address_is_in_virtual_range(const char *addr);
static int consider_plaintext_ports(entry_connection_t *conn, uint16_t port);
-static void clear_trackexithost_mappings(const char *exitname);
static int connection_ap_supports_optimistic_data(const entry_connection_t *);
/** An AP stream has failed/finished. If it hasn't already sent back
* a socks reply, send one now (based on endreason). Also set
* has_sent_end to 1, and mark the conn.
*/
-void
-_connection_mark_unattached_ap(entry_connection_t *conn, int endreason,
- int line, const char *file)
+MOCK_IMPL(void,
+connection_mark_unattached_ap_,(entry_connection_t *conn, int endreason,
+ int line, const char *file))
{
connection_t *base_conn = ENTRY_TO_CONN(conn);
edge_connection_t *edge_conn = ENTRY_TO_EDGE_CONN(conn);
@@ -87,7 +91,7 @@ _connection_mark_unattached_ap(entry_connection_t *conn, int endreason,
if (base_conn->marked_for_close) {
/* This call will warn as appropriate. */
- _connection_mark_for_close(base_conn, line, file);
+ connection_mark_for_close_(base_conn, line, file);
return;
}
@@ -107,7 +111,7 @@ _connection_mark_unattached_ap(entry_connection_t *conn, int endreason,
conn->socks_request->has_finished = 1;
}
- _connection_mark_and_flush(base_conn, line, file);
+ connection_mark_and_flush_(base_conn, line, file);
ENTRY_TO_EDGE_CONN(conn)->end_reason = endreason;
}
@@ -122,12 +126,13 @@ connection_edge_reached_eof(edge_connection_t *conn)
/* it still has stuff to process. don't let it die yet. */
return 0;
}
- log_info(LD_EDGE,"conn (fd %d) reached eof. Closing.", conn->_base.s);
- if (!conn->_base.marked_for_close) {
+ log_info(LD_EDGE,"conn (fd "TOR_SOCKET_T_FORMAT") reached eof. Closing.",
+ conn->base_.s);
+ if (!conn->base_.marked_for_close) {
/* only mark it if not already marked. it's possible to
* get the 'end' right around when the client hangs up on us. */
connection_edge_end(conn, END_STREAM_REASON_DONE);
- if (conn->_base.type == CONN_TYPE_AP) {
+ if (conn->base_.type == CONN_TYPE_AP) {
/* eof, so don't send a socks reply back */
if (EDGE_TO_ENTRY_CONN(conn)->socks_request)
EDGE_TO_ENTRY_CONN(conn)->socks_request->has_finished = 1;
@@ -152,7 +157,7 @@ connection_edge_process_inbuf(edge_connection_t *conn, int package_partial)
{
tor_assert(conn);
- switch (conn->_base.state) {
+ switch (conn->base_.state) {
case AP_CONN_STATE_SOCKS_WAIT:
if (connection_ap_handshake_process_socks(EDGE_TO_ENTRY_CONN(conn)) <0) {
/* already marked */
@@ -178,7 +183,7 @@ connection_edge_process_inbuf(edge_connection_t *conn, int package_partial)
log_info(LD_EDGE,
"data from edge while in '%s' state. Sending it anyway. "
"package_partial=%d, buflen=%ld",
- conn_state_to_string(conn->_base.type, conn->_base.state),
+ conn_state_to_string(conn->base_.type, conn->base_.state),
package_partial,
(long)connection_get_inbuf_len(TO_CONN(conn)));
if (connection_edge_package_raw_inbuf(conn, package_partial, NULL)<0) {
@@ -197,10 +202,10 @@ connection_edge_process_inbuf(edge_connection_t *conn, int package_partial)
case AP_CONN_STATE_CONTROLLER_WAIT:
log_info(LD_EDGE,
"data from edge while in '%s' state. Leaving it on buffer.",
- conn_state_to_string(conn->_base.type, conn->_base.state));
+ conn_state_to_string(conn->base_.type, conn->base_.state));
return 0;
}
- log_warn(LD_BUG,"Got unexpected state %d. Closing.",conn->_base.state);
+ log_warn(LD_BUG,"Got unexpected state %d. Closing.",conn->base_.state);
tor_fragile_assert();
connection_edge_end(conn, END_STREAM_REASON_INTERNAL);
connection_mark_for_close(TO_CONN(conn));
@@ -213,10 +218,10 @@ connection_edge_process_inbuf(edge_connection_t *conn, int package_partial)
int
connection_edge_destroy(circid_t circ_id, edge_connection_t *conn)
{
- if (!conn->_base.marked_for_close) {
- log_info(LD_EDGE,
- "CircID %d: At an edge. Marking connection for close.", circ_id);
- if (conn->_base.type == CONN_TYPE_AP) {
+ if (!conn->base_.marked_for_close) {
+ log_info(LD_EDGE, "CircID %u: At an edge. Marking connection for close.",
+ (unsigned) circ_id);
+ if (conn->base_.type == CONN_TYPE_AP) {
entry_connection_t *entry_conn = EDGE_TO_ENTRY_CONN(conn);
connection_mark_unattached_ap(entry_conn, END_STREAM_REASON_DESTROY);
control_event_stream_bandwidth(conn);
@@ -280,10 +285,10 @@ connection_edge_end(edge_connection_t *conn, uint8_t reason)
return -1;
}
- if (conn->_base.marked_for_close) {
+ if (conn->base_.marked_for_close) {
log_warn(LD_BUG,
"called on conn that's already marked for close at %s:%d.",
- conn->_base.marked_for_close_file, conn->_base.marked_for_close);
+ conn->base_.marked_for_close_file, conn->base_.marked_for_close);
return 0;
}
@@ -299,11 +304,11 @@ connection_edge_end(edge_connection_t *conn, uint8_t reason)
if (reason == END_STREAM_REASON_EXITPOLICY &&
!connection_edge_is_rendezvous_stream(conn)) {
int addrlen;
- if (tor_addr_family(&conn->_base.addr) == AF_INET) {
- set_uint32(payload+1, tor_addr_to_ipv4n(&conn->_base.addr));
+ if (tor_addr_family(&conn->base_.addr) == AF_INET) {
+ set_uint32(payload+1, tor_addr_to_ipv4n(&conn->base_.addr));
addrlen = 4;
} else {
- memcpy(payload+1, tor_addr_to_in6_addr8(&conn->_base.addr), 16);
+ memcpy(payload+1, tor_addr_to_in6_addr8(&conn->base_.addr), 16);
addrlen = 16;
}
set_uint32(payload+1+addrlen, htonl(dns_clip_ttl(conn->address_ttl)));
@@ -311,12 +316,14 @@ connection_edge_end(edge_connection_t *conn, uint8_t reason)
}
if (circ && !circ->marked_for_close) {
- log_debug(LD_EDGE,"Sending end on conn (fd %d).",conn->_base.s);
+ log_debug(LD_EDGE,"Sending end on conn (fd "TOR_SOCKET_T_FORMAT").",
+ conn->base_.s);
connection_edge_send_command(conn, RELAY_COMMAND_END,
payload, payload_len);
} else {
- log_debug(LD_EDGE,"No circ to send end on conn (fd %d).",
- conn->_base.s);
+ log_debug(LD_EDGE,"No circ to send end on conn "
+ "(fd "TOR_SOCKET_T_FORMAT").",
+ conn->base_.s);
}
conn->edge_has_sent_end = 1;
@@ -333,7 +340,7 @@ connection_edge_end_errno(edge_connection_t *conn)
{
uint8_t reason;
tor_assert(conn);
- reason = errno_to_stream_end_reason(tor_socket_errno(conn->_base.s));
+ reason = errno_to_stream_end_reason(tor_socket_errno(conn->base_.s));
return connection_edge_end(conn, reason);
}
@@ -345,7 +352,7 @@ connection_edge_end_errno(edge_connection_t *conn)
int
connection_edge_flushed_some(edge_connection_t *conn)
{
- switch (conn->_base.state) {
+ switch (conn->base_.state) {
case AP_CONN_STATE_OPEN:
case EXIT_CONN_STATE_OPEN:
connection_edge_consider_sending_sendme(conn);
@@ -369,7 +376,7 @@ connection_edge_finished_flushing(edge_connection_t *conn)
{
tor_assert(conn);
- switch (conn->_base.state) {
+ switch (conn->base_.state) {
case AP_CONN_STATE_OPEN:
case EXIT_CONN_STATE_OPEN:
connection_edge_consider_sending_sendme(conn);
@@ -383,13 +390,55 @@ connection_edge_finished_flushing(edge_connection_t *conn)
case AP_CONN_STATE_RESOLVE_WAIT:
return 0;
default:
- log_warn(LD_BUG, "Called in unexpected state %d.",conn->_base.state);
+ log_warn(LD_BUG, "Called in unexpected state %d.",conn->base_.state);
tor_fragile_assert();
return -1;
}
return 0;
}
+/** Longest size for the relay payload of a RELAY_CONNECTED cell that we're
+ * able to generate. */
+/* 4 zero bytes; 1 type byte; 16 byte IPv6 address; 4 byte TTL. */
+#define MAX_CONNECTED_CELL_PAYLOAD_LEN 25
+
+/** Set the buffer at <b>payload_out</b> -- which must have at least
+ * MAX_CONNECTED_CELL_PAYLOAD_LEN bytes available -- to the body of a
+ * RELAY_CONNECTED cell indicating that we have connected to <b>addr</b>, and
+ * that the name resolution that led us to <b>addr</b> will be valid for
+ * <b>ttl</b> seconds. Return -1 on error, or the number of bytes used on
+ * success. */
+STATIC int
+connected_cell_format_payload(uint8_t *payload_out,
+ const tor_addr_t *addr,
+ uint32_t ttl)
+{
+ const sa_family_t family = tor_addr_family(addr);
+ int connected_payload_len;
+
+ /* should be needless */
+ memset(payload_out, 0, MAX_CONNECTED_CELL_PAYLOAD_LEN);
+
+ if (family == AF_INET) {
+ set_uint32(payload_out, tor_addr_to_ipv4n(addr));
+ connected_payload_len = 4;
+ } else if (family == AF_INET6) {
+ set_uint32(payload_out, 0);
+ set_uint8(payload_out + 4, 6);
+ memcpy(payload_out + 5, tor_addr_to_in6_addr8(addr), 16);
+ connected_payload_len = 21;
+ } else {
+ return -1;
+ }
+
+ set_uint32(payload_out + connected_payload_len, htonl(dns_clip_ttl(ttl)));
+ connected_payload_len += 4;
+
+ tor_assert(connected_payload_len <= MAX_CONNECTED_CELL_PAYLOAD_LEN);
+
+ return connected_payload_len;
+}
+
/** Connected handler for exit connections: start writing pending
* data, deliver 'CONNECTED' relay cells as appropriate, and check
* any pending data that may have been received. */
@@ -399,13 +448,13 @@ connection_edge_finished_connecting(edge_connection_t *edge_conn)
connection_t *conn;
tor_assert(edge_conn);
- tor_assert(edge_conn->_base.type == CONN_TYPE_EXIT);
+ tor_assert(edge_conn->base_.type == CONN_TYPE_EXIT);
conn = TO_CONN(edge_conn);
tor_assert(conn->state == EXIT_CONN_STATE_CONNECTING);
log_info(LD_EXIT,"Exit connection to %s:%u (%s) established.",
escaped_safe_str(conn->address), conn->port,
- safe_str(fmt_addr(&conn->addr)));
+ safe_str(fmt_and_decorate_addr(&conn->addr)));
rep_hist_note_exit_stream_opened(conn->port);
@@ -421,22 +470,16 @@ connection_edge_finished_connecting(edge_connection_t *edge_conn)
RELAY_COMMAND_CONNECTED, NULL, 0) < 0)
return 0; /* circuit is closed, don't continue */
} else {
- char connected_payload[20];
- int connected_payload_len;
- if (tor_addr_family(&conn->addr) == AF_INET) {
- set_uint32(connected_payload, tor_addr_to_ipv4n(&conn->addr));
- set_uint32(connected_payload+4,
- htonl(dns_clip_ttl(edge_conn->address_ttl)));
- connected_payload_len = 8;
- } else {
- memcpy(connected_payload, tor_addr_to_in6_addr8(&conn->addr), 16);
- set_uint32(connected_payload+16,
- htonl(dns_clip_ttl(edge_conn->address_ttl)));
- connected_payload_len = 20;
- }
+ uint8_t connected_payload[MAX_CONNECTED_CELL_PAYLOAD_LEN];
+ int connected_payload_len =
+ connected_cell_format_payload(connected_payload, &conn->addr,
+ edge_conn->address_ttl);
+ if (connected_payload_len < 0)
+ return -1;
+
if (connection_edge_send_command(edge_conn,
- RELAY_COMMAND_CONNECTED,
- connected_payload, connected_payload_len) < 0)
+ RELAY_COMMAND_CONNECTED,
+ (char*)connected_payload, connected_payload_len) < 0)
return 0; /* circuit is closed, don't continue */
}
tor_assert(edge_conn->package_window > 0);
@@ -600,12 +643,27 @@ connection_ap_expire_beginning(void)
" '%s.onion'.",
seconds_idle,
safe_str_client(entry_conn->socks_request->address));
+ /* Roll back path bias use state so that we probe the circuit
+ * if nothing else succeeds on it */
+ pathbias_mark_use_rollback(TO_ORIGIN_CIRCUIT(circ));
+
connection_edge_end(conn, END_STREAM_REASON_TIMEOUT);
connection_mark_unattached_ap(entry_conn, END_STREAM_REASON_TIMEOUT);
}
continue;
}
- tor_assert(circ->purpose == CIRCUIT_PURPOSE_C_GENERAL);
+ if (circ->purpose != CIRCUIT_PURPOSE_C_GENERAL &&
+ circ->purpose != CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT &&
+ circ->purpose != CIRCUIT_PURPOSE_PATH_BIAS_TESTING) {
+ log_warn(LD_BUG, "circuit->purpose == CIRCUIT_PURPOSE_C_GENERAL failed. "
+ "The purpose on the circuit was %s; it was in state %s, "
+ "path_state %s.",
+ circuit_purpose_to_string(circ->purpose),
+ circuit_state_to_string(circ->state),
+ CIRCUIT_IS_ORIGIN(circ) ?
+ pathbias_state_to_string(TO_ORIGIN_CIRCUIT(circ)->path_state) :
+ "none");
+ }
log_fn(cutoff < 15 ? LOG_INFO : severity, LD_APP,
"We tried for %d seconds to connect to '%s' using exit %s."
" Retrying on a new circuit.",
@@ -619,14 +677,12 @@ connection_ap_expire_beginning(void)
/* un-mark it as ending, since we're going to reuse it */
conn->edge_has_sent_end = 0;
conn->end_reason = 0;
- /* kludge to make us not try this circuit again, yet to allow
- * current streams on it to survive if they can: make it
- * unattractive to use for new streams */
- /* XXXX024 this is a kludgy way to do this. */
- tor_assert(circ->timestamp_dirty);
- circ->timestamp_dirty -= options->MaxCircuitDirtiness;
+ /* make us not try this circuit again, but allow
+ * current streams on it to survive if they can */
+ mark_circuit_unusable_for_new_conns(TO_ORIGIN_CIRCUIT(circ));
+
/* give our stream another 'cutoff' seconds to try */
- conn->_base.timestamp_lastread += cutoff;
+ conn->base_.timestamp_lastread += cutoff;
if (entry_conn->num_socks_retries < 250) /* avoid overflow */
entry_conn->num_socks_retries++;
/* move it back into 'pending' state, and try to attach. */
@@ -752,7 +808,7 @@ circuit_discard_optional_exit_enclaves(extend_info_t *info)
/** The AP connection <b>conn</b> has just failed while attaching or
* sending a BEGIN or resolving on <b>circ</b>, but another circuit
* might work. Detach the circuit, and either reattach it, launch a
- * new circuit, tell the controller, or give up as a appropriate.
+ * new circuit, tell the controller, or give up as appropriate.
*
* Returns -1 on err, 1 on success, 0 on not-yet-sure.
*/
@@ -764,6 +820,10 @@ connection_ap_detach_retriable(entry_connection_t *conn,
control_event_stream_status(conn, STREAM_EVENT_FAILED_RETRIABLE, reason);
ENTRY_TO_CONN(conn)->timestamp_lastread = time(NULL);
+ /* Roll back path bias use state so that we probe the circuit
+ * if nothing else succeeds on it */
+ pathbias_mark_use_rollback(circ);
+
if (conn->pending_optimistic_data) {
generic_buffer_set_to_copy(&conn->sending_optimistic_data,
conn->pending_optimistic_data);
@@ -782,957 +842,16 @@ connection_ap_detach_retriable(entry_connection_t *conn,
}
}
-/** A client-side struct to remember requests to rewrite addresses
- * to new addresses. These structs are stored in the hash table
- * "addressmap" below.
- *
- * There are 5 ways to set an address mapping:
- * - A MapAddress command from the controller [permanent]
- * - An AddressMap directive in the torrc [permanent]
- * - When a TrackHostExits torrc directive is triggered [temporary]
- * - When a DNS resolve succeeds [temporary]
- * - When a DNS resolve fails [temporary]
- *
- * When an addressmap request is made but one is already registered,
- * the new one is replaced only if the currently registered one has
- * no "new_address" (that is, it's in the process of DNS resolve),
- * or if the new one is permanent (expires==0 or 1).
- *
- * (We overload the 'expires' field, using "0" for mappings set via
- * the configuration file, "1" for mappings set from the control
- * interface, and other values for DNS and TrackHostExit mappings that can
- * expire.)
- *
- * A mapping may be 'wildcarded'. If "src_wildcard" is true, then
- * any address that ends with a . followed by the key for this entry will
- * get remapped by it. If "dst_wildcard" is also true, then only the
- * matching suffix of such addresses will get replaced by new_address.
- */
-typedef struct {
- char *new_address;
- time_t expires;
- addressmap_entry_source_t source:3;
- unsigned src_wildcard:1;
- unsigned dst_wildcard:1;
- short num_resolve_failures;
-} addressmap_entry_t;
-
-/** Entry for mapping addresses to which virtual address we mapped them to. */
-typedef struct {
- char *ipv4_address;
- char *hostname_address;
-} virtaddress_entry_t;
-
-/** A hash table to store client-side address rewrite instructions. */
-static strmap_t *addressmap=NULL;
-/**
- * Table mapping addresses to which virtual address, if any, we
- * assigned them to.
- *
- * We maintain the following invariant: if [A,B] is in
- * virtaddress_reversemap, then B must be a virtual address, and [A,B]
- * must be in addressmap. We do not require that the converse hold:
- * if it fails, then we could end up mapping two virtual addresses to
- * the same address, which is no disaster.
- **/
-static strmap_t *virtaddress_reversemap=NULL;
-
-/** Initialize addressmap. */
-void
-addressmap_init(void)
-{
- addressmap = strmap_new();
- virtaddress_reversemap = strmap_new();
-}
-
-/** Free the memory associated with the addressmap entry <b>_ent</b>. */
-static void
-addressmap_ent_free(void *_ent)
-{
- addressmap_entry_t *ent;
- if (!_ent)
- return;
-
- ent = _ent;
- tor_free(ent->new_address);
- tor_free(ent);
-}
-
-/** Free storage held by a virtaddress_entry_t* entry in <b>ent</b>. */
-static void
-addressmap_virtaddress_ent_free(void *_ent)
-{
- virtaddress_entry_t *ent;
- if (!_ent)
- return;
-
- ent = _ent;
- tor_free(ent->ipv4_address);
- tor_free(ent->hostname_address);
- tor_free(ent);
-}
-
-/** Free storage held by a virtaddress_entry_t* entry in <b>ent</b>. */
-static void
-addressmap_virtaddress_remove(const char *address, addressmap_entry_t *ent)
-{
- if (ent && ent->new_address &&
- address_is_in_virtual_range(ent->new_address)) {
- virtaddress_entry_t *ve =
- strmap_get(virtaddress_reversemap, ent->new_address);
- /*log_fn(LOG_NOTICE,"remove reverse mapping for %s",ent->new_address);*/
- if (ve) {
- if (!strcmp(address, ve->ipv4_address))
- tor_free(ve->ipv4_address);
- if (!strcmp(address, ve->hostname_address))
- tor_free(ve->hostname_address);
- if (!ve->ipv4_address && !ve->hostname_address) {
- tor_free(ve);
- strmap_remove(virtaddress_reversemap, ent->new_address);
- }
- }
- }
-}
-
-/** Remove <b>ent</b> (which must be mapped to by <b>address</b>) from the
- * client address maps. */
-static void
-addressmap_ent_remove(const char *address, addressmap_entry_t *ent)
-{
- addressmap_virtaddress_remove(address, ent);
- addressmap_ent_free(ent);
-}
-
-/** Unregister all TrackHostExits mappings from any address to
- * *.exitname.exit. */
-static void
-clear_trackexithost_mappings(const char *exitname)
-{
- char *suffix = NULL;
- if (!addressmap || !exitname)
- return;
- tor_asprintf(&suffix, ".%s.exit", exitname);
- tor_strlower(suffix);
-
- STRMAP_FOREACH_MODIFY(addressmap, address, addressmap_entry_t *, ent) {
- if (ent->source == ADDRMAPSRC_TRACKEXIT &&
- !strcmpend(ent->new_address, suffix)) {
- addressmap_ent_remove(address, ent);
- MAP_DEL_CURRENT(address);
- }
- } STRMAP_FOREACH_END;
-
- tor_free(suffix);
-}
-
-/** Remove all TRACKEXIT mappings from the addressmap for which the target
- * host is unknown or no longer allowed, or for which the source address
- * is no longer in trackexithosts. */
-void
-addressmap_clear_excluded_trackexithosts(const or_options_t *options)
-{
- const routerset_t *allow_nodes = options->ExitNodes;
- const routerset_t *exclude_nodes = options->_ExcludeExitNodesUnion;
-
- if (!addressmap)
- return;
- if (routerset_is_empty(allow_nodes))
- allow_nodes = NULL;
- if (allow_nodes == NULL && routerset_is_empty(exclude_nodes))
- return;
-
- STRMAP_FOREACH_MODIFY(addressmap, address, addressmap_entry_t *, ent) {
- size_t len;
- const char *target = ent->new_address, *dot;
- char *nodename;
- const node_t *node;
-
- if (!target) {
- /* DNS resolving in progress */
- continue;
- } else if (strcmpend(target, ".exit")) {
- /* Not a .exit mapping */
- continue;
- } else if (ent->source != ADDRMAPSRC_TRACKEXIT) {
- /* Not a trackexit mapping. */
- continue;
- }
- len = strlen(target);
- if (len < 6)
- continue; /* malformed. */
- dot = target + len - 6; /* dot now points to just before .exit */
- while (dot > target && *dot != '.')
- dot--;
- if (*dot == '.') dot++;
- nodename = tor_strndup(dot, len-5-(dot-target));;
- node = node_get_by_nickname(nodename, 0);
- tor_free(nodename);
- if (!node ||
- (allow_nodes && !routerset_contains_node(allow_nodes, node)) ||
- routerset_contains_node(exclude_nodes, node) ||
- !hostname_in_track_host_exits(options, address)) {
- /* We don't know this one, or we want to be rid of it. */
- addressmap_ent_remove(address, ent);
- MAP_DEL_CURRENT(address);
- }
- } STRMAP_FOREACH_END;
-}
-
-/** Remove all AUTOMAP mappings from the addressmap for which the
- * source address no longer matches AutomapHostsSuffixes, which is
- * no longer allowed by AutomapHostsOnResolve, or for which the
- * target address is no longer in the virtual network. */
-void
-addressmap_clear_invalid_automaps(const or_options_t *options)
-{
- int clear_all = !options->AutomapHostsOnResolve;
- const smartlist_t *suffixes = options->AutomapHostsSuffixes;
-
- if (!addressmap)
- return;
-
- if (!suffixes)
- clear_all = 1; /* This should be impossible, but let's be sure. */
-
- STRMAP_FOREACH_MODIFY(addressmap, src_address, addressmap_entry_t *, ent) {
- int remove = clear_all;
- if (ent->source != ADDRMAPSRC_AUTOMAP)
- continue; /* not an automap mapping. */
-
- if (!remove) {
- int suffix_found = 0;
- SMARTLIST_FOREACH(suffixes, const char *, suffix, {
- if (!strcasecmpend(src_address, suffix)) {
- suffix_found = 1;
- break;
- }
- });
- if (!suffix_found)
- remove = 1;
- }
-
- if (!remove && ! address_is_in_virtual_range(ent->new_address))
- remove = 1;
-
- if (remove) {
- addressmap_ent_remove(src_address, ent);
- MAP_DEL_CURRENT(src_address);
- }
- } STRMAP_FOREACH_END;
-}
-
-/** Remove all entries from the addressmap that were set via the
- * configuration file or the command line. */
-void
-addressmap_clear_configured(void)
-{
- addressmap_get_mappings(NULL, 0, 0, 0);
-}
-
-/** Remove all entries from the addressmap that are set to expire, ever. */
-void
-addressmap_clear_transient(void)
-{
- addressmap_get_mappings(NULL, 2, TIME_MAX, 0);
-}
-
-/** Clean out entries from the addressmap cache that were
- * added long enough ago that they are no longer valid.
- */
-void
-addressmap_clean(time_t now)
-{
- addressmap_get_mappings(NULL, 2, now, 0);
-}
-
-/** Free all the elements in the addressmap, and free the addressmap
- * itself. */
-void
-addressmap_free_all(void)
-{
- strmap_free(addressmap, addressmap_ent_free);
- addressmap = NULL;
-
- strmap_free(virtaddress_reversemap, addressmap_virtaddress_ent_free);
- virtaddress_reversemap = NULL;
-}
-
-/** Try to find a match for AddressMap expressions that use
- * wildcard notation such as '*.c.d *.e.f' (so 'a.c.d' will map to 'a.e.f') or
- * '*.c.d a.b.c' (so 'a.c.d' will map to a.b.c).
- * Return the matching entry in AddressMap or NULL if no match is found.
- * For expressions such as '*.c.d *.e.f', truncate <b>address</b> 'a.c.d'
- * to 'a' before we return the matching AddressMap entry.
- *
- * This function does not handle the case where a pattern of the form "*.c.d"
- * matches the address c.d -- that's done by the main addressmap_rewrite
- * function.
- */
-static addressmap_entry_t *
-addressmap_match_superdomains(char *address)
-{
- addressmap_entry_t *val;
- char *cp;
-
- cp = address;
- while ((cp = strchr(cp, '.'))) {
- /* cp now points to a suffix of address that begins with a . */
- val = strmap_get_lc(addressmap, cp+1);
- if (val && val->src_wildcard) {
- if (val->dst_wildcard)
- *cp = '\0';
- return val;
- }
- ++cp;
- }
- return NULL;
-}
-
-/** Look at address, and rewrite it until it doesn't want any
- * more rewrites; but don't get into an infinite loop.
- * Don't write more than maxlen chars into address. Return true if the
- * address changed; false otherwise. Set *<b>expires_out</b> to the
- * expiry time of the result, or to <b>time_max</b> if the result does
- * not expire.
- *
- * If <b>exit_source_out</b> is non-null, we set it as follows. If we the
- * address starts out as a non-exit address, and we remap it to an .exit
- * address at any point, then set *<b>exit_source_out</b> to the
- * address_entry_source_t of the first such rule. Set *<b>exit_source_out</b>
- * to ADDRMAPSRC_NONE if there is no such rewrite, or if the original address
- * was a .exit.
- */
-int
-addressmap_rewrite(char *address, size_t maxlen, time_t *expires_out,
- addressmap_entry_source_t *exit_source_out)
-{
- addressmap_entry_t *ent;
- int rewrites;
- time_t expires = TIME_MAX;
- addressmap_entry_source_t exit_source = ADDRMAPSRC_NONE;
- char *addr_orig = tor_strdup(address);
- char *log_addr_orig = NULL;
-
- for (rewrites = 0; rewrites < 16; rewrites++) {
- int exact_match = 0;
- log_addr_orig = tor_strdup(escaped_safe_str_client(address));
-
- ent = strmap_get(addressmap, address);
-
- if (!ent || !ent->new_address) {
- ent = addressmap_match_superdomains(address);
- } else {
- if (ent->src_wildcard && !ent->dst_wildcard &&
- !strcasecmp(address, ent->new_address)) {
- /* This is a rule like *.example.com example.com, and we just got
- * "example.com" */
- goto done;
- }
-
- exact_match = 1;
- }
-
- if (!ent || !ent->new_address) {
- goto done;
- }
-
- if (ent->dst_wildcard && !exact_match) {
- strlcat(address, ".", maxlen);
- strlcat(address, ent->new_address, maxlen);
- } else {
- strlcpy(address, ent->new_address, maxlen);
- }
-
- if (!strcmpend(address, ".exit") &&
- strcmpend(addr_orig, ".exit") &&
- exit_source == ADDRMAPSRC_NONE) {
- exit_source = ent->source;
- }
-
- log_info(LD_APP, "Addressmap: rewriting %s to %s",
- log_addr_orig, escaped_safe_str_client(address));
- if (ent->expires > 1 && ent->expires < expires)
- expires = ent->expires;
-
- tor_free(log_addr_orig);
- }
- log_warn(LD_CONFIG,
- "Loop detected: we've rewritten %s 16 times! Using it as-is.",
- escaped_safe_str_client(address));
- /* it's fine to rewrite a rewrite, but don't loop forever */
-
- done:
- tor_free(addr_orig);
- tor_free(log_addr_orig);
- if (exit_source_out)
- *exit_source_out = exit_source;
- if (expires_out)
- *expires_out = TIME_MAX;
- return (rewrites > 0);
-}
-
-/** If we have a cached reverse DNS entry for the address stored in the
- * <b>maxlen</b>-byte buffer <b>address</b> (typically, a dotted quad) then
- * rewrite to the cached value and return 1. Otherwise return 0. Set
- * *<b>expires_out</b> to the expiry time of the result, or to <b>time_max</b>
- * if the result does not expire. */
-static int
-addressmap_rewrite_reverse(char *address, size_t maxlen, time_t *expires_out)
-{
- char *s, *cp;
- addressmap_entry_t *ent;
- int r = 0;
- tor_asprintf(&s, "REVERSE[%s]", address);
- ent = strmap_get(addressmap, s);
- if (ent) {
- cp = tor_strdup(escaped_safe_str_client(ent->new_address));
- log_info(LD_APP, "Rewrote reverse lookup %s -> %s",
- escaped_safe_str_client(s), cp);
- tor_free(cp);
- strlcpy(address, ent->new_address, maxlen);
- r = 1;
- }
-
- if (expires_out)
- *expires_out = (ent && ent->expires > 1) ? ent->expires : TIME_MAX;
-
- tor_free(s);
- return r;
-}
-
-/** Return 1 if <b>address</b> is already registered, else return 0. If address
- * is already registered, and <b>update_expires</b> is non-zero, then update
- * the expiry time on the mapping with update_expires if it is a
- * mapping created by TrackHostExits. */
-int
-addressmap_have_mapping(const char *address, int update_expiry)
-{
- addressmap_entry_t *ent;
- if (!(ent=strmap_get_lc(addressmap, address)))
- return 0;
- if (update_expiry && ent->source==ADDRMAPSRC_TRACKEXIT)
- ent->expires=time(NULL) + update_expiry;
- return 1;
-}
-
-/** Register a request to map <b>address</b> to <b>new_address</b>,
- * which will expire on <b>expires</b> (or 0 if never expires from
- * config file, 1 if never expires from controller, 2 if never expires
- * (virtual address mapping) from the controller.)
- *
- * <b>new_address</b> should be a newly dup'ed string, which we'll use or
- * free as appropriate. We will leave address alone.
- *
- * If <b>wildcard_addr</b> is true, then the mapping will match any address
- * equal to <b>address</b>, or any address ending with a period followed by
- * <b>address</b>. If <b>wildcard_addr</b> and <b>wildcard_new_addr</b> are
- * both true, the mapping will rewrite addresses that end with
- * ".<b>address</b>" into ones that end with ".<b>new_address</b>."
- *
- * If <b>new_address</b> is NULL, or <b>new_address</b> is equal to
- * <b>address</b> and <b>wildcard_addr</b> is equal to
- * <b>wildcard_new_addr</b>, remove any mappings that exist from
- * <b>address</b>.
- *
- *
- * It is an error to set <b>wildcard_new_addr</b> if <b>wildcard_addr</b> is
- * not set. */
-void
-addressmap_register(const char *address, char *new_address, time_t expires,
- addressmap_entry_source_t source,
- const int wildcard_addr,
- const int wildcard_new_addr)
-{
- addressmap_entry_t *ent;
-
- if (wildcard_new_addr)
- tor_assert(wildcard_addr);
-
- ent = strmap_get(addressmap, address);
- if (!new_address || (!strcasecmp(address,new_address) &&
- wildcard_addr == wildcard_new_addr)) {
- /* Remove the mapping, if any. */
- tor_free(new_address);
- if (ent) {
- addressmap_ent_remove(address,ent);
- strmap_remove(addressmap, address);
- }
- return;
- }
- if (!ent) { /* make a new one and register it */
- ent = tor_malloc_zero(sizeof(addressmap_entry_t));
- strmap_set(addressmap, address, ent);
- } else if (ent->new_address) { /* we need to clean up the old mapping. */
- if (expires > 1) {
- log_info(LD_APP,"Temporary addressmap ('%s' to '%s') not performed, "
- "since it's already mapped to '%s'",
- safe_str_client(address),
- safe_str_client(new_address),
- safe_str_client(ent->new_address));
- tor_free(new_address);
- return;
- }
- if (address_is_in_virtual_range(ent->new_address) &&
- expires != 2) {
- /* XXX This isn't the perfect test; we want to avoid removing
- * mappings set from the control interface _as virtual mapping */
- addressmap_virtaddress_remove(address, ent);
- }
- tor_free(ent->new_address);
- } /* else { we have an in-progress resolve with no mapping. } */
-
- ent->new_address = new_address;
- ent->expires = expires==2 ? 1 : expires;
- ent->num_resolve_failures = 0;
- ent->source = source;
- ent->src_wildcard = wildcard_addr ? 1 : 0;
- ent->dst_wildcard = wildcard_new_addr ? 1 : 0;
-
- log_info(LD_CONFIG, "Addressmap: (re)mapped '%s' to '%s'",
- safe_str_client(address),
- safe_str_client(ent->new_address));
- control_event_address_mapped(address, ent->new_address, expires, NULL);
-}
-
-/** An attempt to resolve <b>address</b> failed at some OR.
- * Increment the number of resolve failures we have on record
- * for it, and then return that number.
- */
-int
-client_dns_incr_failures(const char *address)
-{
- addressmap_entry_t *ent = strmap_get(addressmap, address);
- if (!ent) {
- ent = tor_malloc_zero(sizeof(addressmap_entry_t));
- ent->expires = time(NULL) + MAX_DNS_ENTRY_AGE;
- strmap_set(addressmap,address,ent);
- }
- if (ent->num_resolve_failures < SHORT_MAX)
- ++ent->num_resolve_failures; /* don't overflow */
- log_info(LD_APP, "Address %s now has %d resolve failures.",
- safe_str_client(address),
- ent->num_resolve_failures);
- return ent->num_resolve_failures;
-}
-
-/** If <b>address</b> is in the client DNS addressmap, reset
- * the number of resolve failures we have on record for it.
- * This is used when we fail a stream because it won't resolve:
- * otherwise future attempts on that address will only try once.
- */
-void
-client_dns_clear_failures(const char *address)
-{
- addressmap_entry_t *ent = strmap_get(addressmap, address);
- if (ent)
- ent->num_resolve_failures = 0;
-}
-
-/** Record the fact that <b>address</b> resolved to <b>name</b>.
- * We can now use this in subsequent streams via addressmap_rewrite()
- * so we can more correctly choose an exit that will allow <b>address</b>.
- *
- * If <b>exitname</b> is defined, then append the addresses with
- * ".exitname.exit" before registering the mapping.
- *
- * If <b>ttl</b> is nonnegative, the mapping will be valid for
- * <b>ttl</b>seconds; otherwise, we use the default.
- */
-static void
-client_dns_set_addressmap_impl(const char *address, const char *name,
- const char *exitname,
- int ttl)
-{
- /* <address>.<hex or nickname>.exit\0 or just <address>\0 */
- char extendedaddress[MAX_SOCKS_ADDR_LEN+MAX_VERBOSE_NICKNAME_LEN+10];
- /* 123.123.123.123.<hex or nickname>.exit\0 or just 123.123.123.123\0 */
- char extendedval[INET_NTOA_BUF_LEN+MAX_VERBOSE_NICKNAME_LEN+10];
-
- tor_assert(address);
- tor_assert(name);
-
- if (ttl<0)
- ttl = DEFAULT_DNS_TTL;
- else
- ttl = dns_clip_ttl(ttl);
-
- if (exitname) {
- /* XXXX fails to ever get attempts to get an exit address of
- * google.com.digest[=~]nickname.exit; we need a syntax for this that
- * won't make strict RFC952-compliant applications (like us) barf. */
- tor_snprintf(extendedaddress, sizeof(extendedaddress),
- "%s.%s.exit", address, exitname);
- tor_snprintf(extendedval, sizeof(extendedval),
- "%s.%s.exit", name, exitname);
- } else {
- tor_snprintf(extendedaddress, sizeof(extendedaddress),
- "%s", address);
- tor_snprintf(extendedval, sizeof(extendedval),
- "%s", name);
- }
- addressmap_register(extendedaddress, tor_strdup(extendedval),
- time(NULL) + ttl, ADDRMAPSRC_DNS, 0, 0);
-}
-
-/** Record the fact that <b>address</b> resolved to <b>val</b>.
- * We can now use this in subsequent streams via addressmap_rewrite()
- * so we can more correctly choose an exit that will allow <b>address</b>.
- *
- * If <b>exitname</b> is defined, then append the addresses with
- * ".exitname.exit" before registering the mapping.
- *
- * If <b>ttl</b> is nonnegative, the mapping will be valid for
- * <b>ttl</b>seconds; otherwise, we use the default.
- */
-void
-client_dns_set_addressmap(const char *address, uint32_t val,
- const char *exitname,
- int ttl)
-{
- struct in_addr in;
- char valbuf[INET_NTOA_BUF_LEN];
-
- tor_assert(address);
-
- if (tor_inet_aton(address, &in))
- return; /* If address was an IP address already, don't add a mapping. */
- in.s_addr = htonl(val);
- tor_inet_ntoa(&in,valbuf,sizeof(valbuf));
-
- client_dns_set_addressmap_impl(address, valbuf, exitname, ttl);
-}
-
-/** Add a cache entry noting that <b>address</b> (ordinarily a dotted quad)
- * resolved via a RESOLVE_PTR request to the hostname <b>v</b>.
- *
- * If <b>exitname</b> is defined, then append the addresses with
- * ".exitname.exit" before registering the mapping.
- *
- * If <b>ttl</b> is nonnegative, the mapping will be valid for
- * <b>ttl</b>seconds; otherwise, we use the default.
- */
-static void
-client_dns_set_reverse_addressmap(const char *address, const char *v,
- const char *exitname,
- int ttl)
-{
- char *s = NULL;
- tor_asprintf(&s, "REVERSE[%s]", address);
- client_dns_set_addressmap_impl(s, v, exitname, ttl);
- tor_free(s);
-}
-
-/* By default, we hand out 127.192.0.1 through 127.254.254.254.
- * These addresses should map to localhost, so even if the
- * application accidentally tried to connect to them directly (not
- * via Tor), it wouldn't get too far astray.
- *
- * These options are configured by parse_virtual_addr_network().
- */
-/** Which network should we use for virtual IPv4 addresses? Only the first
- * bits of this value are fixed. */
-static uint32_t virtual_addr_network = 0x7fc00000u;
-/** How many bits of <b>virtual_addr_network</b> are fixed? */
-static maskbits_t virtual_addr_netmask_bits = 10;
-/** What's the next virtual address we will hand out? */
-static uint32_t next_virtual_addr = 0x7fc00000u;
-
-/** Read a netmask of the form 127.192.0.0/10 from "val", and check whether
- * it's a valid set of virtual addresses to hand out in response to MAPADDRESS
- * requests. Return 0 on success; set *msg (if provided) to a newly allocated
- * string and return -1 on failure. If validate_only is false, sets the
- * actual virtual address range to the parsed value. */
-int
-parse_virtual_addr_network(const char *val, int validate_only,
- char **msg)
-{
- uint32_t addr;
- uint16_t port_min, port_max;
- maskbits_t bits;
-
- if (parse_addr_and_port_range(val, &addr, &bits, &port_min, &port_max)) {
- if (msg) *msg = tor_strdup("Error parsing VirtualAddressNetwork");
- return -1;
- }
-
- if (port_min != 1 || port_max != 65535) {
- if (msg) *msg = tor_strdup("Can't specify ports on VirtualAddressNetwork");
- return -1;
- }
-
- if (bits > 16) {
- if (msg) *msg = tor_strdup("VirtualAddressNetwork expects a /16 "
- "network or larger");
- return -1;
- }
-
- if (validate_only)
- return 0;
-
- virtual_addr_network = (uint32_t)( addr & (0xfffffffful << (32-bits)) );
- virtual_addr_netmask_bits = bits;
-
- if (addr_mask_cmp_bits(next_virtual_addr, addr, bits))
- next_virtual_addr = addr;
-
- return 0;
-}
-
-/**
- * Return true iff <b>addr</b> is likely to have been returned by
- * client_dns_get_unused_address.
- **/
-static int
-address_is_in_virtual_range(const char *address)
-{
- struct in_addr in;
- tor_assert(address);
- if (!strcasecmpend(address, ".virtual")) {
- return 1;
- } else if (tor_inet_aton(address, &in)) {
- uint32_t addr = ntohl(in.s_addr);
- if (!addr_mask_cmp_bits(addr, virtual_addr_network,
- virtual_addr_netmask_bits))
- return 1;
- }
- return 0;
-}
-
-/** Increment the value of next_virtual_addr; reset it to the start of the
- * virtual address range if it wraps around.
- */
-static INLINE void
-increment_virtual_addr(void)
-{
- ++next_virtual_addr;
- if (addr_mask_cmp_bits(next_virtual_addr, virtual_addr_network,
- virtual_addr_netmask_bits))
- next_virtual_addr = virtual_addr_network;
-}
-
-/** Return a newly allocated string holding an address of <b>type</b>
- * (one of RESOLVED_TYPE_{IPV4|HOSTNAME}) that has not yet been mapped,
- * and that is very unlikely to be the address of any real host.
- *
- * May return NULL if we have run out of virtual addresses.
- */
-static char *
-addressmap_get_virtual_address(int type)
-{
- char buf[64];
- tor_assert(addressmap);
-
- if (type == RESOLVED_TYPE_HOSTNAME) {
- char rand[10];
- do {
- crypto_rand(rand, sizeof(rand));
- base32_encode(buf,sizeof(buf),rand,sizeof(rand));
- strlcat(buf, ".virtual", sizeof(buf));
- } while (strmap_get(addressmap, buf));
- return tor_strdup(buf);
- } else if (type == RESOLVED_TYPE_IPV4) {
- // This is an imperfect estimate of how many addresses are available, but
- // that's ok.
- struct in_addr in;
- uint32_t available = 1u << (32-virtual_addr_netmask_bits);
- while (available) {
- /* Don't hand out any .0 or .255 address. */
- while ((next_virtual_addr & 0xff) == 0 ||
- (next_virtual_addr & 0xff) == 0xff) {
- increment_virtual_addr();
- if (! --available) {
- log_warn(LD_CONFIG, "Ran out of virtual addresses!");
- return NULL;
- }
- }
- in.s_addr = htonl(next_virtual_addr);
- tor_inet_ntoa(&in, buf, sizeof(buf));
- if (!strmap_get(addressmap, buf)) {
- increment_virtual_addr();
- break;
- }
-
- increment_virtual_addr();
- --available;
- // log_info(LD_CONFIG, "%d addrs available", (int)available);
- if (! available) {
- log_warn(LD_CONFIG, "Ran out of virtual addresses!");
- return NULL;
- }
- }
- return tor_strdup(buf);
- } else {
- log_warn(LD_BUG, "Called with unsupported address type (%d)", type);
- return NULL;
- }
-}
-
-/** A controller has requested that we map some address of type
- * <b>type</b> to the address <b>new_address</b>. Choose an address
- * that is unlikely to be used, and map it, and return it in a newly
- * allocated string. If another address of the same type is already
- * mapped to <b>new_address</b>, try to return a copy of that address.
- *
- * The string in <b>new_address</b> may be freed or inserted into a map
- * as appropriate. May return NULL if are out of virtual addresses.
- **/
-const char *
-addressmap_register_virtual_address(int type, char *new_address)
-{
- char **addrp;
- virtaddress_entry_t *vent;
- int vent_needs_to_be_added = 0;
-
- tor_assert(new_address);
- tor_assert(addressmap);
- tor_assert(virtaddress_reversemap);
-
- vent = strmap_get(virtaddress_reversemap, new_address);
- if (!vent) {
- vent = tor_malloc_zero(sizeof(virtaddress_entry_t));
- vent_needs_to_be_added = 1;
- }
-
- addrp = (type == RESOLVED_TYPE_IPV4) ?
- &vent->ipv4_address : &vent->hostname_address;
- if (*addrp) {
- addressmap_entry_t *ent = strmap_get(addressmap, *addrp);
- if (ent && ent->new_address &&
- !strcasecmp(new_address, ent->new_address)) {
- tor_free(new_address);
- tor_assert(!vent_needs_to_be_added);
- return tor_strdup(*addrp);
- } else
- log_warn(LD_BUG,
- "Internal confusion: I thought that '%s' was mapped to by "
- "'%s', but '%s' really maps to '%s'. This is a harmless bug.",
- safe_str_client(new_address),
- safe_str_client(*addrp),
- safe_str_client(*addrp),
- ent?safe_str_client(ent->new_address):"(nothing)");
- }
-
- tor_free(*addrp);
- *addrp = addressmap_get_virtual_address(type);
- if (!*addrp) {
- tor_free(vent);
- tor_free(new_address);
- return NULL;
- }
- log_info(LD_APP, "Registering map from %s to %s", *addrp, new_address);
- if (vent_needs_to_be_added)
- strmap_set(virtaddress_reversemap, new_address, vent);
- addressmap_register(*addrp, new_address, 2, ADDRMAPSRC_AUTOMAP, 0, 0);
-
-#if 0
- {
- /* Try to catch possible bugs */
- addressmap_entry_t *ent;
- ent = strmap_get(addressmap, *addrp);
- tor_assert(ent);
- tor_assert(!strcasecmp(ent->new_address,new_address));
- vent = strmap_get(virtaddress_reversemap, new_address);
- tor_assert(vent);
- tor_assert(!strcasecmp(*addrp,
- (type == RESOLVED_TYPE_IPV4) ?
- vent->ipv4_address : vent->hostname_address));
- log_info(LD_APP, "Map from %s to %s okay.",
- safe_str_client(*addrp),
- safe_str_client(new_address));
- }
-#endif
-
- return *addrp;
-}
-
-/** Return 1 if <b>address</b> has funny characters in it like colons. Return
- * 0 if it's fine, or if we're configured to allow it anyway. <b>client</b>
- * should be true if we're using this address as a client; false if we're
- * using it as a server.
- */
-int
-address_is_invalid_destination(const char *address, int client)
-{
- if (client) {
- if (get_options()->AllowNonRFC953Hostnames)
- return 0;
- } else {
- if (get_options()->ServerDNSAllowNonRFC953Hostnames)
- return 0;
- }
-
- while (*address) {
- if (TOR_ISALNUM(*address) ||
- *address == '-' ||
- *address == '.' ||
- *address == '_') /* Underscore is not allowed, but Windows does it
- * sometimes, just to thumb its nose at the IETF. */
- ++address;
- else
- return 1;
- }
- return 0;
-}
-
-/** Iterate over all address mappings which have expiry times between
- * min_expires and max_expires, inclusive. If sl is provided, add an
- * "old-addr new-addr expiry" string to sl for each mapping, omitting
- * the expiry time if want_expiry is false. If sl is NULL, remove the
- * mappings.
- */
-void
-addressmap_get_mappings(smartlist_t *sl, time_t min_expires,
- time_t max_expires, int want_expiry)
-{
- strmap_iter_t *iter;
- const char *key;
- void *_val;
- addressmap_entry_t *val;
-
- if (!addressmap)
- addressmap_init();
-
- for (iter = strmap_iter_init(addressmap); !strmap_iter_done(iter); ) {
- strmap_iter_get(iter, &key, &_val);
- val = _val;
- if (val->expires >= min_expires && val->expires <= max_expires) {
- if (!sl) {
- iter = strmap_iter_next_rmv(addressmap,iter);
- addressmap_ent_remove(key, val);
- continue;
- } else if (val->new_address) {
- const char *src_wc = val->src_wildcard ? "*." : "";
- const char *dst_wc = val->dst_wildcard ? "*." : "";
- if (want_expiry) {
- if (val->expires < 3 || val->expires == TIME_MAX)
- smartlist_add_asprintf(sl, "%s%s %s%s NEVER",
- src_wc, key, dst_wc, val->new_address);
- else {
- char time[ISO_TIME_LEN+1];
- format_iso_time(time, val->expires);
- smartlist_add_asprintf(sl, "%s%s %s%s \"%s\"",
- src_wc, key, dst_wc, val->new_address,
- time);
- }
- } else {
- smartlist_add_asprintf(sl, "%s%s %s%s",
- src_wc, key, dst_wc, val->new_address);
- }
- }
- }
- iter = strmap_iter_next(addressmap,iter);
- }
-}
-
/** Check if <b>conn</b> is using a dangerous port. Then warn and/or
* reject depending on our config options. */
static int
consider_plaintext_ports(entry_connection_t *conn, uint16_t port)
{
const or_options_t *options = get_options();
- int reject = smartlist_string_num_isin(options->RejectPlaintextPorts, port);
+ int reject = smartlist_contains_int_as_string(
+ options->RejectPlaintextPorts, port);
- if (smartlist_string_num_isin(options->WarnPlaintextPorts, port)) {
+ if (smartlist_contains_int_as_string(options->WarnPlaintextPorts, port)) {
log_warn(LD_APP, "Application request to port %d: this port is "
"commonly used for unencrypted protocols. Please make sure "
"you don't send anything you would mind the rest of the "
@@ -1798,7 +917,7 @@ connection_ap_handshake_rewrite_and_attach(entry_connection_t *conn,
socks_request_t *socks = conn->socks_request;
hostname_type_t addresstype;
const or_options_t *options = get_options();
- struct in_addr addr_tmp;
+ tor_addr_t addr_tmp;
/* We set this to true if this is an address we should automatically
* remap to a local address in VirtualAddrNetwork */
int automap = 0;
@@ -1828,17 +947,20 @@ connection_ap_handshake_rewrite_and_attach(entry_connection_t *conn,
conn->original_dest_address = tor_strdup(conn->socks_request->address);
if (socks->command == SOCKS_COMMAND_RESOLVE &&
- !tor_inet_aton(socks->address, &addr_tmp) &&
- options->AutomapHostsOnResolve && options->AutomapHostsSuffixes) {
- SMARTLIST_FOREACH(options->AutomapHostsSuffixes, const char *, cp,
- if (!strcasecmpend(socks->address, cp)) {
- automap = 1;
- break;
- });
+ tor_addr_parse(&addr_tmp, socks->address)<0 &&
+ options->AutomapHostsOnResolve) {
+ automap = addressmap_address_should_automap(socks->address, options);
if (automap) {
const char *new_addr;
+ int addr_type = RESOLVED_TYPE_IPV4;
+ if (conn->socks_request->socks_version != 4) {
+ if (!conn->ipv4_traffic_ok ||
+ (conn->ipv6_traffic_ok && conn->prefer_ipv6_traffic) ||
+ conn->prefer_ipv6_virtaddr)
+ addr_type = RESOLVED_TYPE_IPV6;
+ }
new_addr = addressmap_register_virtual_address(
- RESOLVED_TYPE_IPV4, tor_strdup(socks->address));
+ addr_type, tor_strdup(socks->address));
if (! new_addr) {
log_warn(LD_APP, "Unable to automap address %s",
escaped_safe_str(socks->address));
@@ -1853,8 +975,14 @@ connection_ap_handshake_rewrite_and_attach(entry_connection_t *conn,
}
if (socks->command == SOCKS_COMMAND_RESOLVE_PTR) {
+ unsigned rewrite_flags = 0;
+ if (conn->use_cached_ipv4_answers)
+ rewrite_flags |= AMR_FLAG_USE_IPV4_DNS;
+ if (conn->use_cached_ipv6_answers)
+ rewrite_flags |= AMR_FLAG_USE_IPV6_DNS;
+
if (addressmap_rewrite_reverse(socks->address, sizeof(socks->address),
- &map_expires)) {
+ rewrite_flags, &map_expires)) {
char *result = tor_strdup(socks->address);
/* remember _what_ is supposed to have been resolved. */
tor_snprintf(socks->address, sizeof(socks->address), "REVERSE[%s]",
@@ -1885,8 +1013,13 @@ connection_ap_handshake_rewrite_and_attach(entry_connection_t *conn,
}
} else if (!automap) {
/* For address map controls, remap the address. */
+ unsigned rewrite_flags = 0;
+ if (conn->use_cached_ipv4_answers)
+ rewrite_flags |= AMR_FLAG_USE_IPV4_DNS;
+ if (conn->use_cached_ipv6_answers)
+ rewrite_flags |= AMR_FLAG_USE_IPV6_DNS;
if (addressmap_rewrite(socks->address, sizeof(socks->address),
- &map_expires, &exit_source)) {
+ rewrite_flags, &map_expires, &exit_source)) {
control_event_stream_status(conn, STREAM_EVENT_REMAP,
REMAP_STREAM_SOURCE_CACHE);
}
@@ -1923,7 +1056,7 @@ connection_ap_handshake_rewrite_and_attach(entry_connection_t *conn,
/* If StrictNodes is not set, then .exit overrides ExcludeNodes. */
routerset_t *excludeset = options->StrictNodes ?
- options->_ExcludeExitNodesUnion : options->ExcludeExitNodes;
+ options->ExcludeExitNodesUnion_ : options->ExcludeExitNodes;
const node_t *node;
if (exit_source == ADDRMAPSRC_AUTOMAP && !options->AllowDotExit) {
@@ -2024,17 +1157,13 @@ connection_ap_handshake_rewrite_and_attach(entry_connection_t *conn,
}
if (socks->command == SOCKS_COMMAND_RESOLVE) {
- uint32_t answer;
- struct in_addr in;
+ tor_addr_t answer;
/* Reply to resolves immediately if we can. */
- if (tor_inet_aton(socks->address, &in)) { /* see if it's an IP already */
- /* leave it in network order */
- answer = in.s_addr;
+ if (tor_addr_parse(&answer, socks->address) >= 0) {/* is it an IP? */
/* remember _what_ is supposed to have been resolved. */
strlcpy(socks->address, orig_address, sizeof(socks->address));
- connection_ap_handshake_socks_resolved(conn,RESOLVED_TYPE_IPV4,4,
- (uint8_t*)&answer,
- -1,map_expires);
+ connection_ap_handshake_socks_resolved_addr(conn, &answer, -1,
+ map_expires);
connection_mark_unattached_ap(conn,
END_STREAM_REASON_DONE |
END_STREAM_REASON_FLAG_ALREADY_SOCKS_REPLIED);
@@ -2087,6 +1216,37 @@ connection_ap_handshake_rewrite_and_attach(entry_connection_t *conn,
}
}
+ {
+ tor_addr_t addr;
+ /* XXX Duplicate call to tor_addr_parse. */
+ if (tor_addr_parse(&addr, socks->address) >= 0) {
+ sa_family_t family = tor_addr_family(&addr);
+ if ((family == AF_INET && ! conn->ipv4_traffic_ok) ||
+ (family == AF_INET6 && ! conn->ipv4_traffic_ok)) {
+ log_warn(LD_NET, "Rejecting SOCKS request for an IP address "
+ "family that this listener does not support.");
+ connection_mark_unattached_ap(conn, END_STREAM_REASON_ENTRYPOLICY);
+ return -1;
+ } else if (family == AF_INET6 && socks->socks_version == 4) {
+ log_warn(LD_NET, "Rejecting SOCKS4 request for an IPv6 address.");
+ connection_mark_unattached_ap(conn, END_STREAM_REASON_ENTRYPOLICY);
+ return -1;
+ } else if (socks->socks_version == 4 && !conn->ipv4_traffic_ok) {
+ log_warn(LD_NET, "Rejecting SOCKS4 request on a listener with "
+ "no IPv4 traffic supported.");
+ connection_mark_unattached_ap(conn, END_STREAM_REASON_ENTRYPOLICY);
+ return -1;
+ } else if (family == AF_INET6) {
+ conn->ipv4_traffic_ok = 0;
+ } else if (family == AF_INET) {
+ conn->ipv6_traffic_ok = 0;
+ }
+ }
+ }
+
+ if (socks->socks_version == 4)
+ conn->ipv6_traffic_ok = 0;
+
if (!conn->use_begindir && !conn->chosen_exit_name && !circ) {
/* see if we can find a suitable enclave exit */
const node_t *r =
@@ -2231,35 +1391,48 @@ get_pf_socket(void)
}
#endif
-/** Fetch the original destination address and port from a
- * system-specific interface and put them into a
- * socks_request_t as if they came from a socks request.
- *
- * Return -1 if an error prevents fetching the destination,
- * else return 0.
- */
+#if defined(TRANS_NETFILTER) || defined(TRANS_PF)
+/** Try fill in the address of <b>req</b> from the socket configured
+ * with <b>conn</b>. */
static int
-connection_ap_get_original_destination(entry_connection_t *conn,
- socks_request_t *req)
+destination_from_socket(entry_connection_t *conn, socks_request_t *req)
{
-#ifdef TRANS_NETFILTER
- /* Linux 2.4+ */
struct sockaddr_storage orig_dst;
socklen_t orig_dst_len = sizeof(orig_dst);
tor_addr_t addr;
+#ifdef TRANS_NETFILTER
if (getsockopt(ENTRY_TO_CONN(conn)->s, SOL_IP, SO_ORIGINAL_DST,
(struct sockaddr*)&orig_dst, &orig_dst_len) < 0) {
int e = tor_socket_errno(ENTRY_TO_CONN(conn)->s);
log_warn(LD_NET, "getsockopt() failed: %s", tor_socket_strerror(e));
return -1;
}
+#elif defined(TRANS_PF)
+ if (getsockname(ENTRY_TO_CONN(conn)->s, (struct sockaddr*)&orig_dst,
+ &orig_dst_len) < 0) {
+ int e = tor_socket_errno(ENTRY_TO_CONN(conn)->s);
+ log_warn(LD_NET, "getsockname() failed: %s", tor_socket_strerror(e));
+ return -1;
+ }
+#else
+ (void)conn;
+ (void)req;
+ log_warn(LD_BUG, "Unable to determine destination from socket.");
+ return -1;
+#endif
tor_addr_from_sockaddr(&addr, (struct sockaddr*)&orig_dst, &req->port);
- tor_addr_to_str(req->address, &addr, sizeof(req->address), 0);
+ tor_addr_to_str(req->address, &addr, sizeof(req->address), 1);
return 0;
-#elif defined(TRANS_PF)
+}
+#endif
+
+#ifdef TRANS_PF
+static int
+destination_from_pf(entry_connection_t *conn, socks_request_t *req)
+{
struct sockaddr_storage proxy_addr;
socklen_t proxy_addr_len = sizeof(proxy_addr);
struct sockaddr *proxy_sa = (struct sockaddr*) &proxy_addr;
@@ -2275,6 +1448,21 @@ connection_ap_get_original_destination(entry_connection_t *conn,
return -1;
}
+#ifdef __FreeBSD__
+ if (get_options()->TransProxyType_parsed == TPT_IPFW) {
+ /* ipfw(8) is used and in this case getsockname returned the original
+ destination */
+ if (tor_addr_from_sockaddr(&addr, proxy_sa, &req->port) < 0) {
+ tor_fragile_assert();
+ return -1;
+ }
+
+ tor_addr_to_str(req->address, &addr, sizeof(req->address), 0);
+
+ return 0;
+ }
+#endif
+
memset(&pnl, 0, sizeof(pnl));
pnl.proto = IPPROTO_TCP;
pnl.direction = PF_OUT;
@@ -2317,10 +1505,40 @@ connection_ap_get_original_destination(entry_connection_t *conn,
return -1;
}
- tor_addr_to_str(req->address, &addr, sizeof(req->address), 0);
+ tor_addr_to_str(req->address, &addr, sizeof(req->address), 1);
req->port = ntohs(pnl.rdport);
return 0;
+}
+#endif
+
+/** Fetch the original destination address and port from a
+ * system-specific interface and put them into a
+ * socks_request_t as if they came from a socks request.
+ *
+ * Return -1 if an error prevents fetching the destination,
+ * else return 0.
+ */
+static int
+connection_ap_get_original_destination(entry_connection_t *conn,
+ socks_request_t *req)
+{
+#ifdef TRANS_NETFILTER
+ return destination_from_socket(conn, req);
+#elif defined(TRANS_PF)
+ const or_options_t *options = get_options();
+
+ if (options->TransProxyType_parsed == TPT_PF_DIVERT)
+ return destination_from_socket(conn, req);
+
+ if (options->TransProxyType_parsed == TPT_DEFAULT)
+ return destination_from_pf(conn, req);
+
+ (void)conn;
+ (void)req;
+ log_warn(LD_BUG, "Proxy destination determination mechanism %s unknown.",
+ options->TransProxyType);
+ return -1;
#else
(void)conn;
(void)req;
@@ -2517,7 +1735,7 @@ connection_ap_process_natd(entry_connection_t *conn)
/** Iterate over the two bytes of stream_id until we get one that is not
* already in use; return it. Return 0 if can't get a unique stream_id.
*/
-static streamid_t
+streamid_t
get_unique_stream_id_by_circ(origin_circuit_t *circ)
{
edge_connection_t *tmpconn;
@@ -2555,6 +1773,66 @@ connection_ap_supports_optimistic_data(const entry_connection_t *conn)
return conn->may_use_optimistic_data;
}
+/** Return a bitmask of BEGIN_FLAG_* flags that we should transmit in the
+ * RELAY_BEGIN cell for <b>ap_conn</b>. */
+static uint32_t
+connection_ap_get_begincell_flags(entry_connection_t *ap_conn)
+{
+ edge_connection_t *edge_conn = ENTRY_TO_EDGE_CONN(ap_conn);
+ const node_t *exitnode = NULL;
+ const crypt_path_t *cpath_layer = edge_conn->cpath_layer;
+ uint32_t flags = 0;
+
+ /* No flags for begindir */
+ if (ap_conn->use_begindir)
+ return 0;
+
+ /* No flags for hidden services. */
+ if (edge_conn->on_circuit->purpose != CIRCUIT_PURPOSE_C_GENERAL)
+ return 0;
+
+ /* If only IPv4 is supported, no flags */
+ if (ap_conn->ipv4_traffic_ok && !ap_conn->ipv6_traffic_ok)
+ return 0;
+
+ if (! cpath_layer ||
+ ! cpath_layer->extend_info)
+ return 0;
+
+ if (!ap_conn->ipv4_traffic_ok)
+ flags |= BEGIN_FLAG_IPV4_NOT_OK;
+
+ exitnode = node_get_by_id(cpath_layer->extend_info->identity_digest);
+
+ if (ap_conn->ipv6_traffic_ok && exitnode) {
+ tor_addr_t a;
+ tor_addr_make_null(&a, AF_INET6);
+ if (compare_tor_addr_to_node_policy(&a, ap_conn->socks_request->port,
+ exitnode)
+ != ADDR_POLICY_REJECTED) {
+ /* Only say "IPv6 OK" if the exit node supports IPv6. Otherwise there's
+ * no point. */
+ flags |= BEGIN_FLAG_IPV6_OK;
+ }
+ }
+
+ if (flags == BEGIN_FLAG_IPV6_OK) {
+ /* When IPv4 and IPv6 are both allowed, consider whether to say we
+ * prefer IPv6. Otherwise there's no point in declaring a preference */
+ if (ap_conn->prefer_ipv6_traffic)
+ flags |= BEGIN_FLAG_IPV6_PREFERRED;
+ }
+
+ if (flags == BEGIN_FLAG_IPV4_NOT_OK) {
+ log_warn(LD_EDGE, "I'm about to ask a node for a connection that I "
+ "am telling it to fulfil with neither IPv4 nor IPv6. That's "
+ "not going to work. Did you perhaps ask for an IPv6 address "
+ "on an IPv4Only port, or vice versa?");
+ }
+
+ return flags;
+}
+
/** Write a relay begin cell, using destaddr and destport from ap_conn's
* socks_request field, and send it down circ.
*
@@ -2584,17 +1862,22 @@ connection_ap_handshake_send_begin(entry_connection_t *ap_conn)
connection_mark_unattached_ap(ap_conn, END_STREAM_REASON_INTERNAL);
/* Mark this circuit "unusable for new streams". */
- /* XXXX024 this is a kludgy way to do this. */
- tor_assert(circ->_base.timestamp_dirty);
- circ->_base.timestamp_dirty -= get_options()->MaxCircuitDirtiness;
+ mark_circuit_unusable_for_new_conns(circ);
return -1;
}
+ /* Set up begin cell flags. */
+ edge_conn->begincell_flags = connection_ap_get_begincell_flags(ap_conn);
+
tor_snprintf(payload,RELAY_PAYLOAD_SIZE, "%s:%d",
- (circ->_base.purpose == CIRCUIT_PURPOSE_C_GENERAL) ?
+ (circ->base_.purpose == CIRCUIT_PURPOSE_C_GENERAL) ?
ap_conn->socks_request->address : "",
ap_conn->socks_request->port);
payload_len = (int)strlen(payload)+1;
+ if (payload_len <= RELAY_PAYLOAD_SIZE - 4 && edge_conn->begincell_flags) {
+ set_uint32(payload + payload_len, htonl(edge_conn->begincell_flags));
+ payload_len += 4;
+ }
log_info(LD_APP,
"Sending relay cell %d to begin stream %d.",
@@ -2617,8 +1900,9 @@ connection_ap_handshake_send_begin(entry_connection_t *ap_conn)
edge_conn->package_window = STREAMWINDOW_START;
edge_conn->deliver_window = STREAMWINDOW_START;
base_conn->state = AP_CONN_STATE_CONNECT_WAIT;
- log_info(LD_APP,"Address/port sent, ap socket %d, n_circ_id %d",
- base_conn->s, circ->_base.n_circ_id);
+ log_info(LD_APP,"Address/port sent, ap socket "TOR_SOCKET_T_FORMAT
+ ", n_circ_id %u",
+ base_conn->s, (unsigned)circ->base_.n_circ_id);
control_event_stream_status(ap_conn, STREAM_EVENT_SENT_CONNECT, 0);
/* If there's queued-up data, send it now */
@@ -2657,7 +1941,7 @@ connection_ap_handshake_send_resolve(entry_connection_t *ap_conn)
tor_assert(base_conn->type == CONN_TYPE_AP);
tor_assert(base_conn->state == AP_CONN_STATE_CIRCUIT_WAIT);
tor_assert(ap_conn->socks_request);
- tor_assert(circ->_base.purpose == CIRCUIT_PURPOSE_C_GENERAL);
+ tor_assert(circ->base_.purpose == CIRCUIT_PURPOSE_C_GENERAL);
command = ap_conn->socks_request->command;
tor_assert(SOCKS_COMMAND_IS_RESOLVE(command));
@@ -2669,9 +1953,7 @@ connection_ap_handshake_send_resolve(entry_connection_t *ap_conn)
connection_mark_unattached_ap(ap_conn, END_STREAM_REASON_INTERNAL);
/* Mark this circuit "unusable for new streams". */
- /* XXXX024 this is a kludgy way to do this. */
- tor_assert(circ->_base.timestamp_dirty);
- circ->_base.timestamp_dirty -= get_options()->MaxCircuitDirtiness;
+ mark_circuit_unusable_for_new_conns(circ);
return -1;
}
@@ -2686,7 +1968,7 @@ connection_ap_handshake_send_resolve(entry_connection_t *ap_conn)
/* We're doing a reverse lookup. The input could be an IP address, or
* could be an .in-addr.arpa or .ip6.arpa address */
- r = tor_addr_parse_PTR_name(&addr, a, AF_INET, 1);
+ r = tor_addr_parse_PTR_name(&addr, a, AF_UNSPEC, 1);
if (r <= 0) {
log_warn(LD_APP, "Rejecting ill-formed reverse lookup of %s",
safe_str_client(a));
@@ -2715,12 +1997,14 @@ connection_ap_handshake_send_resolve(entry_connection_t *ap_conn)
string_addr, payload_len) < 0)
return -1; /* circuit is closed, don't continue */
- tor_free(base_conn->address); /* Maybe already set by dnsserv. */
- base_conn->address = tor_strdup("(Tor_internal)");
+ if (!base_conn->address) {
+ /* This might be unnecessary. XXXX */
+ base_conn->address = tor_dup_addr(&base_conn->addr);
+ }
base_conn->state = AP_CONN_STATE_RESOLVE_WAIT;
- log_info(LD_APP,"Address sent for resolve, ap socket %d, n_circ_id %d",
- base_conn->s, circ->_base.n_circ_id);
- control_event_stream_status(ap_conn, STREAM_EVENT_NEW, 0);
+ log_info(LD_APP,"Address sent for resolve, ap socket "TOR_SOCKET_T_FORMAT
+ ", n_circ_id %u",
+ base_conn->s, (unsigned)circ->base_.n_circ_id);
control_event_stream_status(ap_conn, STREAM_EVENT_SENT_RESOLVE, 0);
return 0;
}
@@ -2812,25 +2096,49 @@ tell_controller_about_resolved_result(entry_connection_t *conn,
int ttl,
time_t expires)
{
-
- if (ttl >= 0 && (answer_type == RESOLVED_TYPE_IPV4 ||
- answer_type == RESOLVED_TYPE_HOSTNAME)) {
- return; /* we already told the controller. */
- } else if (answer_type == RESOLVED_TYPE_IPV4 && answer_len >= 4) {
+ expires = time(NULL) + ttl;
+ if (answer_type == RESOLVED_TYPE_IPV4 && answer_len >= 4) {
char *cp = tor_dup_ip(ntohl(get_uint32(answer)));
control_event_address_mapped(conn->socks_request->address,
- cp, expires, NULL);
+ cp, expires, NULL, 0);
tor_free(cp);
} else if (answer_type == RESOLVED_TYPE_HOSTNAME && answer_len < 256) {
char *cp = tor_strndup(answer, answer_len);
control_event_address_mapped(conn->socks_request->address,
- cp, expires, NULL);
+ cp, expires, NULL, 0);
tor_free(cp);
} else {
control_event_address_mapped(conn->socks_request->address,
- "<error>",
- time(NULL)+ttl,
- "error=yes");
+ "<error>", time(NULL)+ttl,
+ "error=yes", 0);
+ }
+}
+
+/**
+ * As connection_ap_handshake_socks_resolved, but take a tor_addr_t to send
+ * as the answer.
+ */
+void
+connection_ap_handshake_socks_resolved_addr(entry_connection_t *conn,
+ const tor_addr_t *answer,
+ int ttl,
+ time_t expires)
+{
+ if (tor_addr_family(answer) == AF_INET) {
+ uint32_t a = tor_addr_to_ipv4n(answer); /* network order */
+ connection_ap_handshake_socks_resolved(conn,RESOLVED_TYPE_IPV4,4,
+ (uint8_t*)&a,
+ ttl, expires);
+ } else if (tor_addr_family(answer) == AF_INET6) {
+ const uint8_t *a = tor_addr_to_in6_addr8(answer);
+ connection_ap_handshake_socks_resolved(conn,RESOLVED_TYPE_IPV6,16,
+ a,
+ ttl, expires);
+ } else {
+ log_warn(LD_BUG, "Got called with address of unexpected family %d",
+ tor_addr_family(answer));
+ connection_ap_handshake_socks_resolved(conn,
+ RESOLVED_TYPE_ERROR,0,NULL,-1,-1);
}
}
@@ -2843,26 +2151,38 @@ tell_controller_about_resolved_result(entry_connection_t *conn,
**/
/* XXXX the use of the ttl and expires fields is nutty. Let's make this
* interface and those that use it less ugly. */
-void
-connection_ap_handshake_socks_resolved(entry_connection_t *conn,
+MOCK_IMPL(void,
+connection_ap_handshake_socks_resolved,(entry_connection_t *conn,
int answer_type,
size_t answer_len,
const uint8_t *answer,
int ttl,
- time_t expires)
+ time_t expires))
{
char buf[384];
size_t replylen;
if (ttl >= 0) {
if (answer_type == RESOLVED_TYPE_IPV4 && answer_len == 4) {
- uint32_t a = ntohl(get_uint32(answer));
- if (a)
- client_dns_set_addressmap(conn->socks_request->address, a,
+ tor_addr_t a;
+ tor_addr_from_ipv4n(&a, get_uint32(answer));
+ if (! tor_addr_is_null(&a)) {
+ client_dns_set_addressmap(conn,
+ conn->socks_request->address, &a,
+ conn->chosen_exit_name, ttl);
+ }
+ } else if (answer_type == RESOLVED_TYPE_IPV6 && answer_len == 16) {
+ tor_addr_t a;
+ tor_addr_from_ipv6_bytes(&a, (char*)answer);
+ if (! tor_addr_is_null(&a)) {
+ client_dns_set_addressmap(conn,
+ conn->socks_request->address, &a,
conn->chosen_exit_name, ttl);
+ }
} else if (answer_type == RESOLVED_TYPE_HOSTNAME && answer_len < 256) {
char *cp = tor_strndup((char*)answer, answer_len);
- client_dns_set_reverse_addressmap(conn->socks_request->address,
+ client_dns_set_reverse_addressmap(conn,
+ conn->socks_request->address,
cp,
conn->chosen_exit_name, ttl);
tor_free(cp);
@@ -2876,8 +2196,9 @@ connection_ap_handshake_socks_resolved(entry_connection_t *conn,
conn->socks_request->has_finished = 1;
return;
} else {
- /* This must be a request from the controller. We already sent
- * a mapaddress if there's a ttl. */
+ /* This must be a request from the controller. Since answers to those
+ * requests are not cached, they do not generate an ADDRMAP event on
+ * their own. */
tell_controller_about_resolved_result(conn, answer_type, answer_len,
(char*)answer, ttl, expires);
conn->socks_request->has_finished = 1;
@@ -2958,9 +2279,44 @@ connection_ap_handshake_socks_reply(entry_connection_t *conn, char *reply,
tor_assert(conn->socks_request); /* make sure it's an AP stream */
- control_event_stream_status(conn,
- status==SOCKS5_SUCCEEDED ? STREAM_EVENT_SUCCEEDED : STREAM_EVENT_FAILED,
- endreason);
+ if (!SOCKS_COMMAND_IS_RESOLVE(conn->socks_request->command)) {
+ control_event_stream_status(conn, status==SOCKS5_SUCCEEDED ?
+ STREAM_EVENT_SUCCEEDED : STREAM_EVENT_FAILED,
+ endreason);
+ }
+
+ /* Flag this stream's circuit as having completed a stream successfully
+ * (for path bias) */
+ if (status == SOCKS5_SUCCEEDED ||
+ endreason == END_STREAM_REASON_RESOLVEFAILED ||
+ endreason == END_STREAM_REASON_CONNECTREFUSED ||
+ endreason == END_STREAM_REASON_CONNRESET ||
+ endreason == END_STREAM_REASON_NOROUTE ||
+ endreason == END_STREAM_REASON_RESOURCELIMIT) {
+ if (!conn->edge_.on_circuit ||
+ !CIRCUIT_IS_ORIGIN(conn->edge_.on_circuit)) {
+ if (endreason != END_STREAM_REASON_RESOLVEFAILED) {
+ log_info(LD_BUG,
+ "No origin circuit for successful SOCKS stream "U64_FORMAT
+ ". Reason: %d",
+ U64_PRINTF_ARG(ENTRY_TO_CONN(conn)->global_identifier),
+ endreason);
+ }
+ /*
+ * Else DNS remaps and failed hidden service lookups can send us
+ * here with END_STREAM_REASON_RESOLVEFAILED; ignore it
+ *
+ * Perhaps we could make the test more precise; we can tell hidden
+ * services by conn->edge_.renddata != NULL; anything analogous for
+ * the DNS remap case?
+ */
+ } else {
+ // XXX: Hrmm. It looks like optimistic data can't go through this
+ // codepath, but someone should probably test it and make sure.
+ // We don't want to mark optimistically opened streams as successful.
+ pathbias_mark_use_success(TO_ORIGIN_CIRCUIT(conn->edge_.on_circuit));
+ }
+ }
if (conn->socks_request->has_finished) {
log_warn(LD_BUG, "(Harmless.) duplicate calls to "
@@ -2978,13 +2334,24 @@ connection_ap_handshake_socks_reply(entry_connection_t *conn, char *reply,
/* leave version, destport, destip zero */
connection_write_to_buf(buf, SOCKS4_NETWORK_LEN, ENTRY_TO_CONN(conn));
} else if (conn->socks_request->socks_version == 5) {
- buf[0] = 5; /* version 5 */
- buf[1] = (char)status;
- buf[2] = 0;
- buf[3] = 1; /* ipv4 addr */
- memset(buf+4,0,6); /* Set external addr/port to 0.
- The spec doesn't seem to say what to do here. -RD */
- connection_write_to_buf(buf,10,ENTRY_TO_CONN(conn));
+ size_t buf_len;
+ memset(buf,0,sizeof(buf));
+ if (tor_addr_family(&conn->edge_.base_.addr) == AF_INET) {
+ buf[0] = 5; /* version 5 */
+ buf[1] = (char)status;
+ buf[2] = 0;
+ buf[3] = 1; /* ipv4 addr */
+ /* 4 bytes for the header, 2 bytes for the port, 4 for the address. */
+ buf_len = 10;
+ } else { /* AF_INET6. */
+ buf[0] = 5; /* version 5 */
+ buf[1] = (char)status;
+ buf[2] = 0;
+ buf[3] = 4; /* ipv6 addr */
+ /* 4 bytes for the header, 2 bytes for the port, 16 for the address. */
+ buf_len = 22;
+ }
+ connection_write_to_buf(buf,buf_len,ENTRY_TO_CONN(conn));
}
/* If socks_version isn't 4 or 5, don't send anything.
* This can happen in the case of AP bridges. */
@@ -2992,6 +2359,70 @@ connection_ap_handshake_socks_reply(entry_connection_t *conn, char *reply,
return;
}
+/** Read a RELAY_BEGIN or RELAY_BEGINDIR cell from <b>cell</b>, decode it, and
+ * place the result in <b>bcell</b>. On success return 0; on failure return
+ * <0 and set *<b>end_reason_out</b> to the end reason we should send back to
+ * the client.
+ *
+ * Return -1 in the case where want to send a RELAY_END cell, and < -1 when
+ * we don't.
+ **/
+STATIC int
+begin_cell_parse(const cell_t *cell, begin_cell_t *bcell,
+ uint8_t *end_reason_out)
+{
+ relay_header_t rh;
+ const uint8_t *body, *nul;
+
+ memset(bcell, 0, sizeof(*bcell));
+ *end_reason_out = END_STREAM_REASON_MISC;
+
+ relay_header_unpack(&rh, cell->payload);
+ if (rh.length > RELAY_PAYLOAD_SIZE) {
+ return -2; /*XXXX why not TORPROTOCOL? */
+ }
+
+ bcell->stream_id = rh.stream_id;
+
+ if (rh.command == RELAY_COMMAND_BEGIN_DIR) {
+ bcell->is_begindir = 1;
+ return 0;
+ } else if (rh.command != RELAY_COMMAND_BEGIN) {
+ log_warn(LD_BUG, "Got an unexpected command %d", (int)rh.command);
+ *end_reason_out = END_STREAM_REASON_INTERNAL;
+ return -1;
+ }
+
+ body = cell->payload + RELAY_HEADER_SIZE;
+ nul = memchr(body, 0, rh.length);
+ if (! nul) {
+ log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
+ "Relay begin cell has no \\0. Closing.");
+ *end_reason_out = END_STREAM_REASON_TORPROTOCOL;
+ return -1;
+ }
+
+ if (tor_addr_port_split(LOG_PROTOCOL_WARN,
+ (char*)(body),
+ &bcell->address,&bcell->port)<0) {
+ log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
+ "Unable to parse addr:port in relay begin cell. Closing.");
+ *end_reason_out = END_STREAM_REASON_TORPROTOCOL;
+ return -1;
+ }
+ if (bcell->port == 0) {
+ log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
+ "Missing port in relay begin cell. Closing.");
+ tor_free(bcell->address);
+ *end_reason_out = END_STREAM_REASON_TORPROTOCOL;
+ return -1;
+ }
+ if (body + rh.length >= nul + 4)
+ bcell->flags = ntohl(get_uint32(nul+1));
+
+ return 0;
+}
+
/** A relay 'begin' or 'begin_dir' cell has arrived, and either we are
* an exit hop for the circuit, or we are the origin and it is a
* rendezvous begin.
@@ -3015,10 +2446,13 @@ connection_exit_begin_conn(cell_t *cell, circuit_t *circ)
{
edge_connection_t *n_stream;
relay_header_t rh;
- char *address=NULL;
- uint16_t port;
+ char *address = NULL;
+ uint16_t port = 0;
or_circuit_t *or_circ = NULL;
const or_options_t *options = get_options();
+ begin_cell_t bcell;
+ int r;
+ uint8_t end_reason=0;
assert_circuit_ok(circ);
if (!CIRCUIT_IS_ORIGIN(circ))
@@ -3042,52 +2476,43 @@ connection_exit_begin_conn(cell_t *cell, circuit_t *circ)
return 0;
}
- if (rh.command == RELAY_COMMAND_BEGIN) {
- if (!memchr(cell->payload+RELAY_HEADER_SIZE, 0, rh.length)) {
- log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
- "Relay begin cell has no \\0. Closing.");
- relay_send_end_cell_from_edge(rh.stream_id, circ,
- END_STREAM_REASON_TORPROTOCOL, NULL);
- return 0;
- }
- if (tor_addr_port_split(LOG_PROTOCOL_WARN,
- (char*)(cell->payload+RELAY_HEADER_SIZE),
- &address,&port)<0) {
- log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
- "Unable to parse addr:port in relay begin cell. Closing.");
- relay_send_end_cell_from_edge(rh.stream_id, circ,
- END_STREAM_REASON_TORPROTOCOL, NULL);
- return 0;
- }
- if (port==0) {
- log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
- "Missing port in relay begin cell. Closing.");
- relay_send_end_cell_from_edge(rh.stream_id, circ,
- END_STREAM_REASON_TORPROTOCOL, NULL);
- tor_free(address);
- return 0;
- }
- if (or_circ && or_circ->p_conn && !options->AllowSingleHopExits &&
- (or_circ->is_first_hop ||
- (!connection_or_digest_is_known_relay(
- or_circ->p_conn->identity_digest) &&
+ r = begin_cell_parse(cell, &bcell, &end_reason);
+ if (r < -1) {
+ return -1;
+ } else if (r == -1) {
+ tor_free(bcell.address);
+ relay_send_end_cell_from_edge(rh.stream_id, circ, end_reason, NULL);
+ return 0;
+ }
+
+ if (! bcell.is_begindir) {
+ /* Steal reference */
+ address = bcell.address;
+ port = bcell.port;
+
+ if (or_circ && or_circ->p_chan) {
+ if (!options->AllowSingleHopExits &&
+ (or_circ->is_first_hop ||
+ (!connection_or_digest_is_known_relay(
+ or_circ->p_chan->identity_digest) &&
should_refuse_unknown_exits(options)))) {
- /* Don't let clients use us as a single-hop proxy, unless the user
- * has explicitly allowed that in the config. It attracts attackers
- * and users who'd be better off with, well, single-hop proxies.
- */
- log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
- "Attempt by %s to open a stream %s. Closing.",
- safe_str(or_circ->p_conn->_base.address),
- or_circ->is_first_hop ? "on first hop of circuit" :
- "from unknown relay");
- relay_send_end_cell_from_edge(rh.stream_id, circ,
- or_circ->is_first_hop ?
- END_STREAM_REASON_TORPROTOCOL :
- END_STREAM_REASON_MISC,
- NULL);
- tor_free(address);
- return 0;
+ /* Don't let clients use us as a single-hop proxy, unless the user
+ * has explicitly allowed that in the config. It attracts attackers
+ * and users who'd be better off with, well, single-hop proxies.
+ */
+ log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
+ "Attempt by %s to open a stream %s. Closing.",
+ safe_str(channel_get_canonical_remote_descr(or_circ->p_chan)),
+ or_circ->is_first_hop ? "on first hop of circuit" :
+ "from unknown relay");
+ relay_send_end_cell_from_edge(rh.stream_id, circ,
+ or_circ->is_first_hop ?
+ END_STREAM_REASON_TORPROTOCOL :
+ END_STREAM_REASON_MISC,
+ NULL);
+ tor_free(address);
+ return 0;
+ }
}
} else if (rh.command == RELAY_COMMAND_BEGIN_DIR) {
if (!directory_permits_begindir_requests(options) ||
@@ -3098,10 +2523,10 @@ connection_exit_begin_conn(cell_t *cell, circuit_t *circ)
}
/* Make sure to get the 'real' address of the previous hop: the
* caller might want to know whether his IP address has changed, and
- * we might already have corrected _base.addr[ess] for the relay's
+ * we might already have corrected base_.addr[ess] for the relay's
* canonical IP address. */
- if (or_circ && or_circ->p_conn)
- address = tor_dup_addr(&or_circ->p_conn->real_addr);
+ if (or_circ && or_circ->p_chan)
+ address = tor_strdup(channel_get_actual_remote_address(or_circ->p_chan));
else
address = tor_strdup("127.0.0.1");
port = 1; /* XXXX This value is never actually used anywhere, and there
@@ -3114,17 +2539,31 @@ connection_exit_begin_conn(cell_t *cell, circuit_t *circ)
return 0;
}
+ if (! options->IPv6Exit) {
+ /* I don't care if you prefer IPv6; I can't give you any. */
+ bcell.flags &= ~BEGIN_FLAG_IPV6_PREFERRED;
+ /* If you don't want IPv4, I can't help. */
+ if (bcell.flags & BEGIN_FLAG_IPV4_NOT_OK) {
+ tor_free(address);
+ relay_send_end_cell_from_edge(rh.stream_id, circ,
+ END_STREAM_REASON_EXITPOLICY, NULL);
+ return 0;
+ }
+ }
+
log_debug(LD_EXIT,"Creating new exit connection.");
+ /* The 'AF_INET' here is temporary; we might need to change it later in
+ * connection_exit_connect(). */
n_stream = edge_connection_new(CONN_TYPE_EXIT, AF_INET);
/* Remember the tunneled request ID in the new edge connection, so that
* we can measure download times. */
- TO_CONN(n_stream)->dirreq_id = circ->dirreq_id;
-
- n_stream->_base.purpose = EXIT_PURPOSE_CONNECT;
+ n_stream->dirreq_id = circ->dirreq_id;
+ n_stream->base_.purpose = EXIT_PURPOSE_CONNECT;
+ n_stream->begincell_flags = bcell.flags;
n_stream->stream_id = rh.stream_id;
- n_stream->_base.port = port;
+ n_stream->base_.port = port;
/* leave n_stream->s at -1, because it's not yet valid */
n_stream->package_window = STREAMWINDOW_START;
n_stream->deliver_window = STREAMWINDOW_START;
@@ -3132,14 +2571,14 @@ connection_exit_begin_conn(cell_t *cell, circuit_t *circ)
if (circ->purpose == CIRCUIT_PURPOSE_S_REND_JOINED) {
origin_circuit_t *origin_circ = TO_ORIGIN_CIRCUIT(circ);
log_info(LD_REND,"begin is for rendezvous. configuring stream.");
- n_stream->_base.address = tor_strdup("(rendezvous)");
- n_stream->_base.state = EXIT_CONN_STATE_CONNECTING;
+ n_stream->base_.address = tor_strdup("(rendezvous)");
+ n_stream->base_.state = EXIT_CONN_STATE_CONNECTING;
n_stream->rend_data = rend_data_dup(origin_circ->rend_data);
tor_assert(connection_edge_is_rendezvous_stream(n_stream));
assert_circuit_ok(circ);
if (rend_service_set_connection_addr_port(n_stream, origin_circ) < 0) {
log_info(LD_REND,"Didn't find rendezvous service (port %d)",
- n_stream->_base.port);
+ n_stream->base_.port);
relay_send_end_cell_from_edge(rh.stream_id, circ,
END_STREAM_REASON_EXITPOLICY,
origin_circ->cpath->prev);
@@ -3158,12 +2597,16 @@ connection_exit_begin_conn(cell_t *cell, circuit_t *circ)
assert_circuit_ok(circ);
connection_exit_connect(n_stream);
+
+ /* For path bias: This circuit was used successfully */
+ pathbias_mark_use_success(origin_circ);
+
tor_free(address);
return 0;
}
tor_strlower(address);
- n_stream->_base.address = address;
- n_stream->_base.state = EXIT_CONN_STATE_RESOLVEFAILED;
+ n_stream->base_.address = address;
+ n_stream->base_.state = EXIT_CONN_STATE_RESOLVEFAILED;
/* default to failed, change in dns_resolve if it turns out not to fail */
if (we_are_hibernating()) {
@@ -3176,9 +2619,12 @@ connection_exit_begin_conn(cell_t *cell, circuit_t *circ)
n_stream->on_circuit = circ;
if (rh.command == RELAY_COMMAND_BEGIN_DIR) {
+ tor_addr_t tmp_addr;
tor_assert(or_circ);
- if (or_circ->p_conn && !tor_addr_is_null(&or_circ->p_conn->real_addr))
- tor_addr_copy(&n_stream->_base.addr, &or_circ->p_conn->real_addr);
+ if (or_circ->p_chan &&
+ channel_get_addr_if_possible(or_circ->p_chan, &tmp_addr)) {
+ tor_addr_copy(&n_stream->base_.addr, &tmp_addr);
+ }
return connection_exit_connect_dir(n_stream);
}
@@ -3228,12 +2674,12 @@ connection_exit_begin_resolve(cell_t *cell, or_circuit_t *circ)
*/
dummy_conn = edge_connection_new(CONN_TYPE_EXIT, AF_INET);
dummy_conn->stream_id = rh.stream_id;
- dummy_conn->_base.address = tor_strndup(
+ dummy_conn->base_.address = tor_strndup(
(char*)cell->payload+RELAY_HEADER_SIZE,
rh.length);
- dummy_conn->_base.port = 0;
- dummy_conn->_base.state = EXIT_CONN_STATE_RESOLVEFAILED;
- dummy_conn->_base.purpose = EXIT_PURPOSE_RESOLVE;
+ dummy_conn->base_.port = 0;
+ dummy_conn->base_.state = EXIT_CONN_STATE_RESOLVEFAILED;
+ dummy_conn->base_.purpose = EXIT_PURPOSE_RESOLVE;
dummy_conn->on_circuit = TO_CIRCUIT(circ);
@@ -3243,7 +2689,7 @@ connection_exit_begin_resolve(cell_t *cell, or_circuit_t *circ)
/* Connection freed; don't touch it. */
return 0;
case 1: /* The result was cached; a resolved cell was sent. */
- if (!dummy_conn->_base.marked_for_close)
+ if (!dummy_conn->base_.marked_for_close)
connection_free(TO_CONN(dummy_conn));
return 0;
case 0: /* resolve added to pending list */
@@ -3268,8 +2714,11 @@ connection_exit_connect(edge_connection_t *edge_conn)
connection_t *conn = TO_CONN(edge_conn);
int socket_error = 0;
- if (!connection_edge_is_rendezvous_stream(edge_conn) &&
- router_compare_to_my_exit_policy(edge_conn)) {
+ if ( (!connection_edge_is_rendezvous_stream(edge_conn) &&
+ router_compare_to_my_exit_policy(&edge_conn->base_.addr,
+ edge_conn->base_.port)) ||
+ (tor_addr_family(&conn->addr) == AF_INET6 &&
+ ! get_options()->IPv6Exit)) {
log_info(LD_EXIT,"%s:%d failed exit policy. Closing.",
escaped_safe_str_client(conn->address), conn->port);
connection_edge_end(edge_conn, END_STREAM_REASON_EXITPOLICY);
@@ -3281,6 +2730,9 @@ connection_exit_connect(edge_connection_t *edge_conn)
addr = &conn->addr;
port = conn->port;
+ if (tor_addr_family(addr) == AF_INET6)
+ conn->socket_family = AF_INET6;
+
log_debug(LD_EXIT,"about to try connecting");
switch (connection_connect(conn, conn->address, addr, port, &socket_error)) {
case -1: {
@@ -3302,12 +2754,13 @@ connection_exit_connect(edge_connection_t *edge_conn)
conn->state = EXIT_CONN_STATE_OPEN;
if (connection_get_outbuf_len(conn)) {
- /* in case there are any queued data cells */
- log_warn(LD_BUG,"newly connected conn had data waiting!");
-// connection_start_writing(conn);
+ /* in case there are any queued data cells, from e.g. optimistic data */
+ IF_HAS_NO_BUFFEREVENT(conn)
+ connection_watch_events(conn, READ_EVENT|WRITE_EVENT);
+ } else {
+ IF_HAS_NO_BUFFEREVENT(conn)
+ connection_watch_events(conn, READ_EVENT);
}
- IF_HAS_NO_BUFFEREVENT(conn)
- connection_watch_events(conn, READ_EVENT);
/* also, deliver a 'connected' cell back through the circuit. */
if (connection_edge_is_rendezvous_stream(edge_conn)) {
@@ -3317,21 +2770,21 @@ connection_exit_connect(edge_connection_t *edge_conn)
RELAY_COMMAND_CONNECTED,
NULL, 0);
} else { /* normal stream */
- char connected_payload[20];
- int connected_payload_len;
- if (tor_addr_family(&conn->addr) == AF_INET) {
- set_uint32(connected_payload, tor_addr_to_ipv4n(&conn->addr));
- connected_payload_len = 4;
- } else {
- memcpy(connected_payload, tor_addr_to_in6_addr8(&conn->addr), 16);
- connected_payload_len = 16;
+ uint8_t connected_payload[MAX_CONNECTED_CELL_PAYLOAD_LEN];
+ int connected_payload_len =
+ connected_cell_format_payload(connected_payload, &conn->addr,
+ edge_conn->address_ttl);
+ if (connected_payload_len < 0) {
+ connection_edge_end(edge_conn, END_STREAM_REASON_INTERNAL);
+ circuit_detach_stream(circuit_get_by_edge_conn(edge_conn), edge_conn);
+ connection_free(conn);
+ return;
}
- set_uint32(connected_payload+connected_payload_len,
- htonl(dns_clip_ttl(edge_conn->address_ttl)));
- connected_payload_len += 4;
+
connection_edge_send_command(edge_conn,
RELAY_COMMAND_CONNECTED,
- connected_payload, connected_payload_len);
+ (char*)connected_payload,
+ connected_payload_len);
}
}
@@ -3350,20 +2803,20 @@ connection_exit_connect_dir(edge_connection_t *exitconn)
log_info(LD_EXIT, "Opening local connection for anonymized directory exit");
- exitconn->_base.state = EXIT_CONN_STATE_OPEN;
+ exitconn->base_.state = EXIT_CONN_STATE_OPEN;
- dirconn = dir_connection_new(tor_addr_family(&exitconn->_base.addr));
+ dirconn = dir_connection_new(tor_addr_family(&exitconn->base_.addr));
- tor_addr_copy(&dirconn->_base.addr, &exitconn->_base.addr);
- dirconn->_base.port = 0;
- dirconn->_base.address = tor_strdup(exitconn->_base.address);
- dirconn->_base.type = CONN_TYPE_DIR;
- dirconn->_base.purpose = DIR_PURPOSE_SERVER;
- dirconn->_base.state = DIR_CONN_STATE_SERVER_COMMAND_WAIT;
+ tor_addr_copy(&dirconn->base_.addr, &exitconn->base_.addr);
+ dirconn->base_.port = 0;
+ dirconn->base_.address = tor_strdup(exitconn->base_.address);
+ dirconn->base_.type = CONN_TYPE_DIR;
+ dirconn->base_.purpose = DIR_PURPOSE_SERVER;
+ dirconn->base_.state = DIR_CONN_STATE_SERVER_COMMAND_WAIT;
/* Note that the new dir conn belongs to the same tunneled request as
* the edge conn, so that we can measure download times. */
- TO_CONN(dirconn)->dirreq_id = TO_CONN(exitconn)->dirreq_id;
+ dirconn->dirreq_id = exitconn->dirreq_id;
connection_link_connections(TO_CONN(dirconn), TO_CONN(exitconn));
@@ -3446,11 +2899,15 @@ connection_ap_can_use_exit(const entry_connection_t *conn, const node_t *exit)
}
if (conn->socks_request->command == SOCKS_COMMAND_CONNECT) {
- struct in_addr in;
tor_addr_t addr, *addrp = NULL;
addr_policy_result_t r;
- if (tor_inet_aton(conn->socks_request->address, &in)) {
- tor_addr_from_in(&addr, &in);
+ if (0 == tor_addr_parse(&addr, conn->socks_request->address)) {
+ addrp = &addr;
+ } else if (!conn->ipv4_traffic_ok && conn->ipv6_traffic_ok) {
+ tor_addr_make_null(&addr, AF_INET6);
+ addrp = &addr;
+ } else if (conn->ipv4_traffic_ok && !conn->ipv6_traffic_ok) {
+ tor_addr_make_null(&addr, AF_INET);
addrp = &addr;
}
r = compare_tor_addr_to_node_policy(addrp, conn->socks_request->port,exit);
@@ -3465,7 +2922,7 @@ connection_ap_can_use_exit(const entry_connection_t *conn, const node_t *exit)
if (!conn->chosen_exit_name && node_exit_policy_rejects_all(exit))
return 0;
}
- if (routerset_contains_node(options->_ExcludeExitNodesUnion, exit)) {
+ if (routerset_contains_node(options->ExcludeExitNodesUnion_, exit)) {
/* Not a suitable exit. Refuse it. */
return 0;
}
@@ -3476,6 +2933,9 @@ connection_ap_can_use_exit(const entry_connection_t *conn, const node_t *exit)
/** If address is of the form "y.onion" with a well-formed handle y:
* Put a NUL after y, lower-case it, and return ONION_HOSTNAME.
*
+ * If address is of the form "x.y.onion" with a well-formed handle x:
+ * Drop "x.", put a NUL after y, lower-case it, and return ONION_HOSTNAME.
+ *
* If address is of the form "y.onion" with a badly-formed handle y:
* Return BAD_HOSTNAME and log a message.
*
@@ -3489,6 +2949,7 @@ hostname_type_t
parse_extended_hostname(char *address)
{
char *s;
+ char *q;
char query[REND_SERVICE_ID_LEN_BASE32+1];
s = strrchr(address,'.');
@@ -3503,9 +2964,18 @@ parse_extended_hostname(char *address)
/* so it is .onion */
*s = 0; /* NUL-terminate it */
- if (strlcpy(query, address, REND_SERVICE_ID_LEN_BASE32+1) >=
+ /* locate a 'sub-domain' component, in order to remove it */
+ q = strrchr(address, '.');
+ if (q == address) {
+ goto failed; /* reject sub-domain, as DNS does */
+ }
+ q = (NULL == q) ? address : q + 1;
+ if (strlcpy(query, q, REND_SERVICE_ID_LEN_BASE32+1) >=
REND_SERVICE_ID_LEN_BASE32+1)
goto failed;
+ if (q != address) {
+ memmove(address, q, strlen(q) + 1 /* also get \0 */);
+ }
if (rend_valid_service_id(query)) {
return ONION_HOSTNAME; /* success */
}
diff --git a/src/or/connection_edge.h b/src/or/connection_edge.h
index c320d6ba4..3c0e30a97 100644
--- a/src/or/connection_edge.h
+++ b/src/or/connection_edge.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,14 +9,17 @@
* \brief Header file for connection_edge.c.
**/
-#ifndef _TOR_CONNECTION_EDGE_H
-#define _TOR_CONNECTION_EDGE_H
+#ifndef TOR_CONNECTION_EDGE_H
+#define TOR_CONNECTION_EDGE_H
+
+#include "testsupport.h"
#define connection_mark_unattached_ap(conn, endreason) \
- _connection_mark_unattached_ap((conn), (endreason), __LINE__, _SHORT_FILE_)
+ connection_mark_unattached_ap_((conn), (endreason), __LINE__, SHORT_FILE__)
-void _connection_mark_unattached_ap(entry_connection_t *conn, int endreason,
- int line, const char *file);
+MOCK_DECL(void,connection_mark_unattached_ap_,
+ (entry_connection_t *conn, int endreason,
+ int line, const char *file));
int connection_edge_reached_eof(edge_connection_t *conn);
int connection_edge_process_inbuf(edge_connection_t *conn,
int package_partial);
@@ -42,12 +45,17 @@ entry_connection_t *connection_ap_make_link(connection_t *partner,
void connection_ap_handshake_socks_reply(entry_connection_t *conn, char *reply,
size_t replylen,
int endreason);
-void connection_ap_handshake_socks_resolved(entry_connection_t *conn,
- int answer_type,
- size_t answer_len,
- const uint8_t *answer,
- int ttl,
- time_t expires);
+MOCK_DECL(void,connection_ap_handshake_socks_resolved,
+ (entry_connection_t *conn,
+ int answer_type,
+ size_t answer_len,
+ const uint8_t *answer,
+ int ttl,
+ time_t expires));
+void connection_ap_handshake_socks_resolved_addr(entry_connection_t *conn,
+ const tor_addr_t *answer,
+ int ttl,
+ time_t expires);
int connection_exit_begin_conn(cell_t *cell, circuit_t *circ);
int connection_exit_begin_resolve(cell_t *cell, or_circuit_t *circ);
@@ -67,30 +75,6 @@ int connection_ap_process_transparent(entry_connection_t *conn);
int address_is_invalid_destination(const char *address, int client);
-void addressmap_init(void);
-void addressmap_clear_excluded_trackexithosts(const or_options_t *options);
-void addressmap_clear_invalid_automaps(const or_options_t *options);
-void addressmap_clean(time_t now);
-void addressmap_clear_configured(void);
-void addressmap_clear_transient(void);
-void addressmap_free_all(void);
-int addressmap_rewrite(char *address, size_t maxlen, time_t *expires_out,
- addressmap_entry_source_t *exit_source_out);
-int addressmap_have_mapping(const char *address, int update_timeout);
-
-void addressmap_register(const char *address, char *new_address,
- time_t expires, addressmap_entry_source_t source,
- const int address_wildcard,
- const int new_address_wildcard);
-int parse_virtual_addr_network(const char *val, int validate_only,
- char **msg);
-int client_dns_incr_failures(const char *address);
-void client_dns_clear_failures(const char *address);
-void client_dns_set_addressmap(const char *address, uint32_t val,
- const char *exitname, int ttl);
-const char *addressmap_register_virtual_address(int type, char *new_address);
-void addressmap_get_mappings(smartlist_t *sl, time_t min_expires,
- time_t max_expires, int want_expiry);
int connection_ap_rewrite_and_attach_if_allowed(entry_connection_t *conn,
origin_circuit_t *circ,
crypt_path_t *cpath);
@@ -114,6 +98,52 @@ int connection_edge_update_circuit_isolation(const entry_connection_t *conn,
origin_circuit_t *circ,
int dry_run);
void circuit_clear_isolation(origin_circuit_t *circ);
+streamid_t get_unique_stream_id_by_circ(origin_circuit_t *circ);
+
+/** @name Begin-cell flags
+ *
+ * These flags are used in RELAY_BEGIN cells to change the default behavior
+ * of the cell.
+ *
+ * @{
+ **/
+/** When this flag is set, the client is willing to get connected to IPv6
+ * addresses */
+#define BEGIN_FLAG_IPV6_OK (1u<<0)
+/** When this flag is set, the client DOES NOT support connecting to IPv4
+ * addresses. (The sense of this flag is inverted from IPV6_OK, so that the
+ * old default behavior of Tor is equivalent to having all flags set to 0.)
+ **/
+#define BEGIN_FLAG_IPV4_NOT_OK (1u<<1)
+/** When this flag is set, if we find both an IPv4 and an IPv6 address,
+ * we use the IPv6 address. Otherwise we use the IPv4 address. */
+#define BEGIN_FLAG_IPV6_PREFERRED (1u<<2)
+/**@}*/
+
+#ifdef CONNECTION_EDGE_PRIVATE
+
+/** A parsed BEGIN or BEGIN_DIR cell */
+typedef struct begin_cell_t {
+ /** The address the client has asked us to connect to, or NULL if this is
+ * a BEGIN_DIR cell*/
+ char *address;
+ /** The flags specified in the BEGIN cell's body. One or more of
+ * BEGIN_FLAG_*. */
+ uint32_t flags;
+ /** The client's requested port. */
+ uint16_t port;
+ /** The client's requested Stream ID */
+ uint16_t stream_id;
+ /** True iff this is a BEGIN_DIR cell. */
+ unsigned is_begindir : 1;
+} begin_cell_t;
+
+STATIC int begin_cell_parse(const cell_t *cell, begin_cell_t *bcell,
+ uint8_t *end_reason_out);
+STATIC int connected_cell_format_payload(uint8_t *payload_out,
+ const tor_addr_t *addr,
+ uint32_t ttl);
+#endif
#endif
diff --git a/src/or/connection_or.c b/src/or/connection_or.c
index 5eecee074..6572a918e 100644
--- a/src/or/connection_or.c
+++ b/src/or/connection_or.c
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,17 +9,25 @@
* \brief Functions to handle OR connections, TLS handshaking, and
* cells on the network.
**/
-
#include "or.h"
#include "buffers.h"
+/*
+ * Define this so we get channel internal functions, since we're implementing
+ * part of a subclass (channel_tls_t).
+ */
+#define TOR_CHANNEL_INTERNAL_
+#include "channel.h"
+#include "channeltls.h"
#include "circuitbuild.h"
#include "circuitlist.h"
+#include "circuitstats.h"
#include "command.h"
#include "config.h"
#include "connection.h"
#include "connection_or.h"
#include "control.h"
#include "dirserv.h"
+#include "entrynodes.h"
#include "geoip.h"
#include "main.h"
#include "networkstatus.h"
@@ -29,7 +37,7 @@
#include "rephist.h"
#include "router.h"
#include "routerlist.h"
-
+#include "ext_orport.h"
#ifdef USE_BUFFEREVENTS
#include <event2/bufferevent_ssl.h>
#endif
@@ -43,6 +51,17 @@ static int connection_or_check_valid_tls_handshake(or_connection_t *conn,
static void connection_or_tls_renegotiated_cb(tor_tls_t *tls, void *_conn);
+static unsigned int
+connection_or_is_bad_for_new_circs(or_connection_t *or_conn);
+static void connection_or_mark_bad_for_new_circs(or_connection_t *or_conn);
+
+/*
+ * Call this when changing connection state, so notifications to the owning
+ * channel can be handled.
+ */
+
+static void connection_or_change_state(or_connection_t *conn, uint8_t state);
+
#ifdef USE_BUFFEREVENTS
static void connection_or_handle_event_cb(struct bufferevent *bufev,
short event, void *arg);
@@ -56,6 +75,10 @@ static void connection_or_handle_event_cb(struct bufferevent *bufev,
* they form a linked list, with next_with_same_id as the next pointer. */
static digestmap_t *orconn_identity_map = NULL;
+/** Global map between Extended ORPort identifiers and OR
+ * connections. */
+static digestmap_t *orconn_ext_or_id_map = NULL;
+
/** If conn is listed in orconn_identity_map, remove it, and clear
* conn->identity_digest. Otherwise do nothing. */
void
@@ -127,8 +150,11 @@ connection_or_set_identity_digest(or_connection_t *conn, const char *digest)
return;
/* If the identity was set previously, remove the old mapping. */
- if (! tor_digest_is_zero(conn->identity_digest))
+ if (! tor_digest_is_zero(conn->identity_digest)) {
connection_or_remove_from_identity_map(conn);
+ if (conn->chan)
+ channel_clear_identity_digest(TLS_CHAN_TO_BASE(conn->chan));
+ }
memcpy(conn->identity_digest, digest, DIGEST_LEN);
@@ -139,6 +165,10 @@ connection_or_set_identity_digest(or_connection_t *conn, const char *digest)
tmp = digestmap_set(orconn_identity_map, digest, conn);
conn->next_with_same_id = tmp;
+ /* Deal with channels */
+ if (conn->chan)
+ channel_set_identity_digest(TLS_CHAN_TO_BASE(conn->chan), digest);
+
#if 1
/* Testing code to check for bugs in representation. */
for (; tmp; tmp = tmp->next_with_same_id) {
@@ -148,6 +178,71 @@ connection_or_set_identity_digest(or_connection_t *conn, const char *digest)
#endif
}
+/** Remove the Extended ORPort identifier of <b>conn</b> from the
+ * global identifier list. Also, clear the identifier from the
+ * connection itself. */
+void
+connection_or_remove_from_ext_or_id_map(or_connection_t *conn)
+{
+ or_connection_t *tmp;
+ if (!orconn_ext_or_id_map)
+ return;
+ if (!conn->ext_or_conn_id)
+ return;
+
+ tmp = digestmap_remove(orconn_ext_or_id_map, conn->ext_or_conn_id);
+ if (!tor_digest_is_zero(conn->ext_or_conn_id))
+ tor_assert(tmp == conn);
+
+ memset(conn->ext_or_conn_id, 0, EXT_OR_CONN_ID_LEN);
+}
+
+/** Return the connection whose ext_or_id is <b>id</b>. Return NULL if no such
+ * connection is found. */
+or_connection_t *
+connection_or_get_by_ext_or_id(const char *id)
+{
+ if (!orconn_ext_or_id_map)
+ return NULL;
+ return digestmap_get(orconn_ext_or_id_map, id);
+}
+
+/** Deallocate the global Extended ORPort identifier list */
+void
+connection_or_clear_ext_or_id_map(void)
+{
+ digestmap_free(orconn_ext_or_id_map, NULL);
+ orconn_ext_or_id_map = NULL;
+}
+
+/** Creates an Extended ORPort identifier for <b>conn</b> and deposits
+ * it into the global list of identifiers. */
+void
+connection_or_set_ext_or_identifier(or_connection_t *conn)
+{
+ char random_id[EXT_OR_CONN_ID_LEN];
+ or_connection_t *tmp;
+
+ if (!orconn_ext_or_id_map)
+ orconn_ext_or_id_map = digestmap_new();
+
+ /* Remove any previous identifiers: */
+ if (conn->ext_or_conn_id && !tor_digest_is_zero(conn->ext_or_conn_id))
+ connection_or_remove_from_ext_or_id_map(conn);
+
+ do {
+ crypto_rand(random_id, sizeof(random_id));
+ } while (digestmap_get(orconn_ext_or_id_map, random_id));
+
+ if (!conn->ext_or_conn_id)
+ conn->ext_or_conn_id = tor_malloc_zero(EXT_OR_CONN_ID_LEN);
+
+ memcpy(conn->ext_or_conn_id, random_id, EXT_OR_CONN_ID_LEN);
+
+ tmp = digestmap_set(orconn_ext_or_id_map, random_id, conn);
+ tor_assert(!tmp);
+}
+
/**************************************************************/
/** Map from a string describing what a non-open OR connection was doing when
@@ -202,7 +297,7 @@ connection_or_get_state_description(or_connection_t *orconn,
const char *conn_state;
char tls_state[256];
- tor_assert(conn->type == CONN_TYPE_OR);
+ tor_assert(conn->type == CONN_TYPE_OR || conn->type == CONN_TYPE_EXT_OR);
conn_state = conn_state_to_string(conn->type, conn->state);
tor_tls_get_state_description(orconn->tls, tls_state, sizeof(tls_state));
@@ -268,13 +363,13 @@ connection_or_report_broken_states(int severity, int domain)
smartlist_sort(items, broken_state_count_compare);
- log(severity, domain, "%d connections have failed%s", total,
+ tor_log(severity, domain, "%d connections have failed%s", total,
smartlist_len(items) > MAX_REASONS_TO_REPORT ? ". Top reasons:" : ":");
SMARTLIST_FOREACH_BEGIN(items, const broken_state_count_t *, c) {
if (c_sl_idx > MAX_REASONS_TO_REPORT)
break;
- log(severity, domain,
+ tor_log(severity, domain,
" %d connections died in state %s", (int)c->count, c->state);
} SMARTLIST_FOREACH_END(c);
@@ -282,6 +377,39 @@ connection_or_report_broken_states(int severity, int domain)
smartlist_free(items);
}
+/** Call this to change or_connection_t states, so the owning channel_tls_t can
+ * be notified.
+ */
+
+static void
+connection_or_change_state(or_connection_t *conn, uint8_t state)
+{
+ uint8_t old_state;
+
+ tor_assert(conn);
+
+ old_state = conn->base_.state;
+ conn->base_.state = state;
+
+ if (conn->chan)
+ channel_tls_handle_state_change_on_orconn(conn->chan, conn,
+ old_state, state);
+}
+
+/** Return the number of circuits using an or_connection_t; this used to
+ * be an or_connection_t field, but it got moved to channel_t and we
+ * shouldn't maintain two copies. */
+
+int
+connection_or_get_num_circuits(or_connection_t *conn)
+{
+ tor_assert(conn);
+
+ if (conn->chan) {
+ return channel_num_circuits(TLS_CHAN_TO_BASE(conn->chan));
+ } else return 0;
+}
+
/**************************************************************/
/** Pack the cell_t host-order structure <b>src</b> into network-order
@@ -292,33 +420,56 @@ connection_or_report_broken_states(int severity, int domain)
* should set it or clear it as appropriate.
*/
void
-cell_pack(packed_cell_t *dst, const cell_t *src)
+cell_pack(packed_cell_t *dst, const cell_t *src, int wide_circ_ids)
{
char *dest = dst->body;
- set_uint16(dest, htons(src->circ_id));
- *(uint8_t*)(dest+2) = src->command;
- memcpy(dest+3, src->payload, CELL_PAYLOAD_SIZE);
+ if (wide_circ_ids) {
+ set_uint32(dest, htonl(src->circ_id));
+ dest += 4;
+ } else {
+ set_uint16(dest, htons(src->circ_id));
+ dest += 2;
+ memset(dest+CELL_MAX_NETWORK_SIZE-2, 0, 2); /*make sure it's clear */
+ }
+ set_uint8(dest, src->command);
+ memcpy(dest+1, src->payload, CELL_PAYLOAD_SIZE);
}
/** Unpack the network-order buffer <b>src</b> into a host-order
* cell_t structure <b>dest</b>.
*/
static void
-cell_unpack(cell_t *dest, const char *src)
+cell_unpack(cell_t *dest, const char *src, int wide_circ_ids)
{
- dest->circ_id = ntohs(get_uint16(src));
- dest->command = *(uint8_t*)(src+2);
- memcpy(dest->payload, src+3, CELL_PAYLOAD_SIZE);
+ if (wide_circ_ids) {
+ dest->circ_id = ntohl(get_uint32(src));
+ src += 4;
+ } else {
+ dest->circ_id = ntohs(get_uint16(src));
+ src += 2;
+ }
+ dest->command = get_uint8(src);
+ memcpy(dest->payload, src+1, CELL_PAYLOAD_SIZE);
}
-/** Write the header of <b>cell</b> into the first VAR_CELL_HEADER_SIZE
- * bytes of <b>hdr_out</b>. */
-void
-var_cell_pack_header(const var_cell_t *cell, char *hdr_out)
+/** Write the header of <b>cell</b> into the first VAR_CELL_MAX_HEADER_SIZE
+ * bytes of <b>hdr_out</b>. Returns number of bytes used. */
+int
+var_cell_pack_header(const var_cell_t *cell, char *hdr_out, int wide_circ_ids)
{
- set_uint16(hdr_out, htons(cell->circ_id));
- set_uint8(hdr_out+2, cell->command);
- set_uint16(hdr_out+3, htons(cell->payload_len));
+ int r;
+ if (wide_circ_ids) {
+ set_uint32(hdr_out, htonl(cell->circ_id));
+ hdr_out += 4;
+ r = VAR_CELL_MAX_HEADER_SIZE;
+ } else {
+ set_uint16(hdr_out, htons(cell->circ_id));
+ hdr_out += 2;
+ r = VAR_CELL_MAX_HEADER_SIZE - 2;
+ }
+ set_uint8(hdr_out, cell->command);
+ set_uint16(hdr_out+1, htons(cell->payload_len));
+ return r;
}
/** Allocate and return a new var_cell_t with <b>payload_len</b> bytes of
@@ -327,7 +478,7 @@ var_cell_t *
var_cell_new(uint16_t payload_len)
{
size_t size = STRUCT_OFFSET(var_cell_t, payload) + payload_len;
- var_cell_t *cell = tor_malloc(size);
+ var_cell_t *cell = tor_malloc_zero(size);
cell->payload_len = payload_len;
cell->command = 0;
cell->circ_id = 0;
@@ -345,8 +496,11 @@ var_cell_free(var_cell_t *cell)
int
connection_or_reached_eof(or_connection_t *conn)
{
+ tor_assert(conn);
+
log_info(LD_OR,"OR connection reached EOF. Closing.");
- connection_mark_for_close(TO_CONN(conn));
+ connection_or_close_normally(conn, 1);
+
return 0;
}
@@ -366,7 +520,7 @@ connection_or_process_inbuf(or_connection_t *conn)
int ret = 0;
tor_assert(conn);
- switch (conn->_base.state) {
+ switch (conn->base_.state) {
case OR_CONN_STATE_PROXY_HANDSHAKING:
ret = connection_read_proxy_handshake(TO_CONN(conn));
@@ -375,9 +529,12 @@ connection_or_process_inbuf(or_connection_t *conn)
tor_assert(TO_CONN(conn)->proxy_state == PROXY_CONNECTED);
if (connection_tls_start_handshake(conn, 0) < 0)
ret = -1;
+ /* Touch the channel's active timestamp if there is one */
+ if (conn->chan)
+ channel_timestamp_active(TLS_CHAN_TO_BASE(conn->chan));
}
if (ret < 0) {
- connection_mark_for_close(TO_CONN(conn));
+ connection_or_close_for_error(conn, 0);
}
return ret;
@@ -385,7 +542,7 @@ connection_or_process_inbuf(or_connection_t *conn)
#ifdef USE_BUFFEREVENTS
if (tor_tls_server_got_renegotiate(conn->tls))
connection_or_tls_renegotiated_cb(conn->tls, conn);
- if (conn->_base.marked_for_close)
+ if (conn->base_.marked_for_close)
return 0;
/* fall through. */
#endif
@@ -403,14 +560,14 @@ connection_or_process_inbuf(or_connection_t *conn)
*
* XXX024 Remove this check once we verify that the above paragraph is
* 100% true. */
- if (buf_datalen(conn->_base.inbuf) > MAX_OR_INBUF_WHEN_NONOPEN) {
+ if (buf_datalen(conn->base_.inbuf) > MAX_OR_INBUF_WHEN_NONOPEN) {
log_fn(LOG_PROTOCOL_WARN, LD_NET, "Accumulated too much data (%d bytes) "
"on nonopen OR connection %s %s:%u in state %s; closing.",
- (int)buf_datalen(conn->_base.inbuf),
+ (int)buf_datalen(conn->base_.inbuf),
connection_or_nonopen_was_started_here(conn) ? "to" : "from",
- conn->_base.address, conn->_base.port,
- conn_state_to_string(conn->_base.type, conn->_base.state));
- connection_mark_for_close(TO_CONN(conn));
+ conn->base_.address, conn->base_.port,
+ conn_state_to_string(conn->base_.type, conn->base_.state));
+ connection_or_close_for_error(conn, 0);
ret = -1;
}
@@ -430,18 +587,32 @@ connection_or_process_inbuf(or_connection_t *conn)
int
connection_or_flushed_some(or_connection_t *conn)
{
- size_t datalen = connection_get_outbuf_len(TO_CONN(conn));
+ size_t datalen, temp;
+ ssize_t n, flushed;
+ size_t cell_network_size = get_cell_network_size(conn->wide_circ_ids);
+
/* If we're under the low water mark, add cells until we're just over the
* high water mark. */
+ datalen = connection_get_outbuf_len(TO_CONN(conn));
if (datalen < OR_CONN_LOWWATER) {
- ssize_t n = CEIL_DIV(OR_CONN_HIGHWATER - datalen, CELL_NETWORK_SIZE);
- time_t now = approx_time();
- while (conn->active_circuits && n > 0) {
- int flushed;
- flushed = connection_or_flush_from_first_active_circuit(conn, 1, now);
- n -= flushed;
+ while ((conn->chan) && channel_tls_more_to_flush(conn->chan)) {
+ /* Compute how many more cells we want at most */
+ n = CEIL_DIV(OR_CONN_HIGHWATER - datalen, cell_network_size);
+ /* Bail out if we don't want any more */
+ if (n <= 0) break;
+ /* We're still here; try to flush some more cells */
+ flushed = channel_tls_flush_some_cells(conn->chan, n);
+ /* Bail out if it says it didn't flush anything */
+ if (flushed <= 0) break;
+ /* How much in the outbuf now? */
+ temp = connection_get_outbuf_len(TO_CONN(conn));
+ /* Bail out if we didn't actually increase the outbuf size */
+ if (temp <= datalen) break;
+ /* Update datalen for the next iteration */
+ datalen = temp;
}
}
+
return 0;
}
@@ -459,14 +630,14 @@ connection_or_finished_flushing(or_connection_t *conn)
tor_assert(conn);
assert_connection_ok(TO_CONN(conn),0);
- switch (conn->_base.state) {
+ switch (conn->base_.state) {
case OR_CONN_STATE_PROXY_HANDSHAKING:
case OR_CONN_STATE_OPEN:
case OR_CONN_STATE_OR_HANDSHAKING_V2:
case OR_CONN_STATE_OR_HANDSHAKING_V3:
break;
default:
- log_err(LD_BUG,"Called in unexpected state %d.", conn->_base.state);
+ log_err(LD_BUG,"Called in unexpected state %d.", conn->base_.state);
tor_fragile_assert();
return -1;
}
@@ -480,6 +651,7 @@ connection_or_finished_connecting(or_connection_t *or_conn)
{
const int proxy_type = or_conn->proxy_type;
connection_t *conn;
+
tor_assert(or_conn);
conn = TO_CONN(or_conn);
tor_assert(conn->state == OR_CONN_STATE_CONNECTING);
@@ -491,18 +663,18 @@ connection_or_finished_connecting(or_connection_t *or_conn)
if (proxy_type != PROXY_NONE) {
/* start proxy handshake */
if (connection_proxy_connect(conn, proxy_type) < 0) {
- connection_mark_for_close(conn);
+ connection_or_close_for_error(or_conn, 0);
return -1;
}
connection_start_reading(conn);
- conn->state = OR_CONN_STATE_PROXY_HANDSHAKING;
+ connection_or_change_state(or_conn, OR_CONN_STATE_PROXY_HANDSHAKING);
return 0;
}
if (connection_tls_start_handshake(or_conn, 0) < 0) {
/* TLS handshaking error of some kind. */
- connection_mark_for_close(conn);
+ connection_or_close_for_error(or_conn, 0);
return -1;
}
return 0;
@@ -516,11 +688,19 @@ connection_or_about_to_close(or_connection_t *or_conn)
time_t now = time(NULL);
connection_t *conn = TO_CONN(or_conn);
+ /* Tell the controlling channel we're closed */
+ if (or_conn->chan) {
+ channel_closed(TLS_CHAN_TO_BASE(or_conn->chan));
+ /*
+ * NULL this out because the channel might hang around a little
+ * longer before channel_run_cleanup() gets it.
+ */
+ or_conn->chan->conn = NULL;
+ or_conn->chan = NULL;
+ }
+
/* Remember why we're closing this connection. */
if (conn->state != OR_CONN_STATE_OPEN) {
- /* Inform any pending (not attached) circs that they should
- * give up. */
- circuit_n_conn_done(TO_OR_CONN(conn), 0);
/* now mark things down as needed */
if (connection_or_nonopen_was_started_here(or_conn)) {
const or_options_t *options = get_options();
@@ -534,7 +714,8 @@ connection_or_about_to_close(or_connection_t *or_conn)
reason);
if (!authdir_mode_tests_reachability(options))
control_event_bootstrap_problem(
- orconn_end_reason_to_control_string(reason), reason);
+ orconn_end_reason_to_control_string(reason),
+ reason, or_conn);
}
}
} else if (conn->hold_open_until_flushed) {
@@ -548,9 +729,6 @@ connection_or_about_to_close(or_connection_t *or_conn)
control_event_or_conn_status(or_conn, OR_CONN_EVENT_CLOSED,
tls_error_to_orconn_end_reason(or_conn->tls_error));
}
- /* Now close all the attached circuits on it. */
- circuit_unlink_all_from_or_conn(TO_OR_CONN(conn),
- END_CIRC_REASON_OR_CONN_CLOSED);
}
/** Return 1 if identity digest <b>id_digest</b> is known to be a
@@ -613,8 +791,8 @@ connection_or_update_token_buckets_helper(or_connection_t *conn, int reset,
cfg = ev_token_bucket_cfg_new(rate_per_tick, burst, rate_per_tick,
burst, tick);
old_cfg = conn->bucket_cfg;
- if (conn->_base.bufev)
- tor_set_bufferevent_rate_limit(conn->_base.bufev, cfg);
+ if (conn->base_.bufev)
+ tor_set_bufferevent_rate_limit(conn->base_.bufev, cfg);
if (old_cfg)
ev_token_bucket_cfg_free(old_cfg);
conn->bucket_cfg = cfg;
@@ -663,15 +841,15 @@ connection_or_init_conn_from_address(or_connection_t *conn,
connection_or_set_identity_digest(conn, id_digest);
connection_or_update_token_buckets_helper(conn, 1, get_options());
- conn->_base.port = port;
- tor_addr_copy(&conn->_base.addr, addr);
+ conn->base_.port = port;
+ tor_addr_copy(&conn->base_.addr, addr);
tor_addr_copy(&conn->real_addr, addr);
if (r) {
tor_addr_port_t node_ap;
node_get_pref_orport(r, &node_ap);
/* XXXX proposal 186 is making this more complex. For now, a conn
is canonical when it uses the _preferred_ address. */
- if (tor_addr_eq(&conn->_base.addr, &node_ap.addr))
+ if (tor_addr_eq(&conn->base_.addr, &node_ap.addr))
conn->is_canonical = 1;
if (!started_here) {
/* Override the addr/port, so our log messages will make sense.
@@ -684,12 +862,12 @@ connection_or_init_conn_from_address(or_connection_t *conn,
* right IP address and port 56244, that wouldn't be as helpful. now we
* log the "right" port too, so we know if it's moria1 or moria2.
*/
- tor_addr_copy(&conn->_base.addr, &node_ap.addr);
- conn->_base.port = node_ap.port;
+ tor_addr_copy(&conn->base_.addr, &node_ap.addr);
+ conn->base_.port = node_ap.port;
}
conn->nickname = tor_strdup(node_get_nickname(r));
- tor_free(conn->_base.address);
- conn->_base.address = tor_dup_addr(&node_ap.addr);
+ tor_free(conn->base_.address);
+ conn->base_.address = tor_dup_addr(&node_ap.addr);
} else {
const char *n;
/* If we're an authoritative directory server, we may know a
@@ -703,157 +881,31 @@ connection_or_init_conn_from_address(or_connection_t *conn,
base16_encode(conn->nickname+1, HEX_DIGEST_LEN+1,
conn->identity_digest, DIGEST_LEN);
}
- tor_free(conn->_base.address);
- conn->_base.address = tor_dup_addr(addr);
+ tor_free(conn->base_.address);
+ conn->base_.address = tor_dup_addr(addr);
}
}
-/** Return true iff <b>a</b> is "better" than <b>b</b> for new circuits.
- *
- * A more canonical connection is always better than a less canonical
- * connection. That aside, a connection is better if it has circuits and the
- * other does not, or if it was created more recently.
- *
- * Requires that both input connections are open; not is_bad_for_new_circs,
- * and not impossibly non-canonical.
- *
- * If <b>forgive_new_connections</b> is true, then we do not call
- * <b>a</b>better than <b>b</b> simply because b has no circuits,
- * unless b is also relatively old.
- */
-static int
-connection_or_is_better(time_t now,
- const or_connection_t *a,
- const or_connection_t *b,
- int forgive_new_connections)
-{
- int newer;
-/** Do not definitively deprecate a new connection with no circuits on it
- * until this much time has passed. */
-#define NEW_CONN_GRACE_PERIOD (15*60)
-
- if (b->is_canonical && !a->is_canonical)
- return 0; /* A canonical connection is better than a non-canonical
- * one, no matter how new it is or which has circuits. */
-
- newer = b->_base.timestamp_created < a->_base.timestamp_created;
-
- if (
- /* We prefer canonical connections regardless of newness. */
- (!b->is_canonical && a->is_canonical) ||
- /* If both have circuits we prefer the newer: */
- (b->n_circuits && a->n_circuits && newer) ||
- /* If neither has circuits we prefer the newer: */
- (!b->n_circuits && !a->n_circuits && newer))
- return 1;
+/** These just pass all the is_bad_for_new_circs manipulation on to
+ * channel_t */
- /* If one has no circuits and the other does... */
- if (!b->n_circuits && a->n_circuits) {
- /* Then it's bad, unless it's in its grace period and we're forgiving. */
- if (forgive_new_connections &&
- now < b->_base.timestamp_created + NEW_CONN_GRACE_PERIOD)
- return 0;
- else
- return 1;
- }
+static unsigned int
+connection_or_is_bad_for_new_circs(or_connection_t *or_conn)
+{
+ tor_assert(or_conn);
- return 0;
+ if (or_conn->chan)
+ return channel_is_bad_for_new_circs(TLS_CHAN_TO_BASE(or_conn->chan));
+ else return 0;
}
-/** Return the OR connection we should use to extend a circuit to the router
- * whose identity is <b>digest</b>, and whose address we believe (or have been
- * told in an extend cell) is <b>target_addr</b>. If there is no good
- * connection, set *<b>msg_out</b> to a message describing the connection's
- * state and our next action, and set <b>launch_out</b> to a boolean for
- * whether we should launch a new connection or not.
- */
-or_connection_t *
-connection_or_get_for_extend(const char *digest,
- const tor_addr_t *target_addr,
- const char **msg_out,
- int *launch_out)
+static void
+connection_or_mark_bad_for_new_circs(or_connection_t *or_conn)
{
- or_connection_t *conn, *best=NULL;
- int n_inprogress_goodaddr = 0, n_old = 0, n_noncanonical = 0, n_possible = 0;
- time_t now = approx_time();
-
- tor_assert(msg_out);
- tor_assert(launch_out);
-
- if (!orconn_identity_map) {
- *msg_out = "Router not connected (nothing is). Connecting.";
- *launch_out = 1;
- return NULL;
- }
-
- conn = digestmap_get(orconn_identity_map, digest);
-
- for (; conn; conn = conn->next_with_same_id) {
- tor_assert(conn->_base.magic == OR_CONNECTION_MAGIC);
- tor_assert(conn->_base.type == CONN_TYPE_OR);
- tor_assert(tor_memeq(conn->identity_digest, digest, DIGEST_LEN));
- if (conn->_base.marked_for_close)
- continue;
- /* Never return a connection on which the other end appears to be
- * a client. */
- if (conn->is_connection_with_client) {
- continue;
- }
- /* Never return a non-open connection. */
- if (conn->_base.state != OR_CONN_STATE_OPEN) {
- /* If the address matches, don't launch a new connection for this
- * circuit. */
- if (!tor_addr_compare(&conn->real_addr, target_addr, CMP_EXACT))
- ++n_inprogress_goodaddr;
- continue;
- }
- /* Never return a connection that shouldn't be used for circs. */
- if (conn->is_bad_for_new_circs) {
- ++n_old;
- continue;
- }
- /* Never return a non-canonical connection using a recent link protocol
- * if the address is not what we wanted.
- *
- * (For old link protocols, we can't rely on is_canonical getting
- * set properly if we're talking to the right address, since we might
- * have an out-of-date descriptor, and we will get no NETINFO cell to
- * tell us about the right address.) */
- if (!conn->is_canonical && conn->link_proto >= 2 &&
- tor_addr_compare(&conn->real_addr, target_addr, CMP_EXACT)) {
- ++n_noncanonical;
- continue;
- }
-
- ++n_possible;
-
- if (!best) {
- best = conn; /* If we have no 'best' so far, this one is good enough. */
- continue;
- }
-
- if (connection_or_is_better(now, conn, best, 0))
- best = conn;
- }
+ tor_assert(or_conn);
- if (best) {
- *msg_out = "Connection is fine; using it.";
- *launch_out = 0;
- return best;
- } else if (n_inprogress_goodaddr) {
- *msg_out = "Connection in progress; waiting.";
- *launch_out = 0;
- return NULL;
- } else if (n_old || n_noncanonical) {
- *msg_out = "Connections all too old, or too non-canonical. "
- " Launching a new one.";
- *launch_out = 1;
- return NULL;
- } else {
- *msg_out = "Not connected. Connecting.";
- *launch_out = 1;
- return NULL;
- }
+ if (or_conn->chan)
+ channel_mark_bad_for_new_circs(TLS_CHAN_TO_BASE(or_conn->chan));
}
/** How old do we let a connection to an OR get before deciding it's
@@ -874,8 +926,8 @@ connection_or_get_for_extend(const char *digest,
* - all open non-canonical connections for which a 'better' non-canonical
* connection exists to the same router at the same address.
*
- * See connection_or_is_better() for our idea of what makes one OR connection
- * better than another.
+ * See channel_is_better() in channel.c for our idea of what makes one OR
+ * connection better than another.
*/
static void
connection_or_group_set_badness(or_connection_t *head, int force)
@@ -887,23 +939,23 @@ connection_or_group_set_badness(or_connection_t *head, int force)
/* Pass 1: expire everything that's old, and see what the status of
* everything else is. */
for (or_conn = head; or_conn; or_conn = or_conn->next_with_same_id) {
- if (or_conn->_base.marked_for_close ||
- or_conn->is_bad_for_new_circs)
+ if (or_conn->base_.marked_for_close ||
+ connection_or_is_bad_for_new_circs(or_conn))
continue;
if (force ||
- or_conn->_base.timestamp_created + TIME_BEFORE_OR_CONN_IS_TOO_OLD
+ or_conn->base_.timestamp_created + TIME_BEFORE_OR_CONN_IS_TOO_OLD
< now) {
log_info(LD_OR,
"Marking OR conn to %s:%d as too old for new circuits "
- "(fd %d, %d secs old).",
- or_conn->_base.address, or_conn->_base.port, or_conn->_base.s,
- (int)(now - or_conn->_base.timestamp_created));
- or_conn->is_bad_for_new_circs = 1;
+ "(fd "TOR_SOCKET_T_FORMAT", %d secs old).",
+ or_conn->base_.address, or_conn->base_.port, or_conn->base_.s,
+ (int)(now - or_conn->base_.timestamp_created));
+ connection_or_mark_bad_for_new_circs(or_conn);
}
- if (or_conn->is_bad_for_new_circs) {
+ if (connection_or_is_bad_for_new_circs(or_conn)) {
++n_old;
- } else if (or_conn->_base.state != OR_CONN_STATE_OPEN) {
+ } else if (or_conn->base_.state != OR_CONN_STATE_OPEN) {
++n_inprogress;
} else if (or_conn->is_canonical) {
++n_canonical;
@@ -915,10 +967,10 @@ connection_or_group_set_badness(or_connection_t *head, int force)
/* Pass 2: We know how about how good the best connection is.
* expire everything that's worse, and find the very best if we can. */
for (or_conn = head; or_conn; or_conn = or_conn->next_with_same_id) {
- if (or_conn->_base.marked_for_close ||
- or_conn->is_bad_for_new_circs)
+ if (or_conn->base_.marked_for_close ||
+ connection_or_is_bad_for_new_circs(or_conn))
continue; /* This one doesn't need to be marked bad. */
- if (or_conn->_base.state != OR_CONN_STATE_OPEN)
+ if (or_conn->base_.state != OR_CONN_STATE_OPEN)
continue; /* Don't mark anything bad until we have seen what happens
* when the connection finishes. */
if (n_canonical && !or_conn->is_canonical) {
@@ -926,16 +978,21 @@ connection_or_group_set_badness(or_connection_t *head, int force)
* and this one is open but not canonical. Mark it bad. */
log_info(LD_OR,
"Marking OR conn to %s:%d as unsuitable for new circuits: "
- "(fd %d, %d secs old). It is not canonical, and we have "
- "another connection to that OR that is.",
- or_conn->_base.address, or_conn->_base.port, or_conn->_base.s,
- (int)(now - or_conn->_base.timestamp_created));
- or_conn->is_bad_for_new_circs = 1;
+ "(fd "TOR_SOCKET_T_FORMAT", %d secs old). It is not "
+ "canonical, and we have another connection to that OR that is.",
+ or_conn->base_.address, or_conn->base_.port, or_conn->base_.s,
+ (int)(now - or_conn->base_.timestamp_created));
+ connection_or_mark_bad_for_new_circs(or_conn);
continue;
}
- if (!best || connection_or_is_better(now, or_conn, best, 0))
+ if (!best ||
+ channel_is_better(now,
+ TLS_CHAN_TO_BASE(or_conn->chan),
+ TLS_CHAN_TO_BASE(best->chan),
+ 0)) {
best = or_conn;
+ }
}
if (!best)
@@ -956,32 +1013,37 @@ connection_or_group_set_badness(or_connection_t *head, int force)
* "mostly harmless", so a fix can wait until somebody is bored.
*/
for (or_conn = head; or_conn; or_conn = or_conn->next_with_same_id) {
- if (or_conn->_base.marked_for_close ||
- or_conn->is_bad_for_new_circs ||
- or_conn->_base.state != OR_CONN_STATE_OPEN)
+ if (or_conn->base_.marked_for_close ||
+ connection_or_is_bad_for_new_circs(or_conn) ||
+ or_conn->base_.state != OR_CONN_STATE_OPEN)
continue;
- if (or_conn != best && connection_or_is_better(now, best, or_conn, 1)) {
+ if (or_conn != best &&
+ channel_is_better(now,
+ TLS_CHAN_TO_BASE(best->chan),
+ TLS_CHAN_TO_BASE(or_conn->chan), 1)) {
/* This isn't the best conn, _and_ the best conn is better than it,
even when we're being forgiving. */
if (best->is_canonical) {
log_info(LD_OR,
"Marking OR conn to %s:%d as unsuitable for new circuits: "
- "(fd %d, %d secs old). We have a better canonical one "
- "(fd %d; %d secs old).",
- or_conn->_base.address, or_conn->_base.port, or_conn->_base.s,
- (int)(now - or_conn->_base.timestamp_created),
- best->_base.s, (int)(now - best->_base.timestamp_created));
- or_conn->is_bad_for_new_circs = 1;
+ "(fd "TOR_SOCKET_T_FORMAT", %d secs old). "
+ "We have a better canonical one "
+ "(fd "TOR_SOCKET_T_FORMAT"; %d secs old).",
+ or_conn->base_.address, or_conn->base_.port, or_conn->base_.s,
+ (int)(now - or_conn->base_.timestamp_created),
+ best->base_.s, (int)(now - best->base_.timestamp_created));
+ connection_or_mark_bad_for_new_circs(or_conn);
} else if (!tor_addr_compare(&or_conn->real_addr,
&best->real_addr, CMP_EXACT)) {
log_info(LD_OR,
"Marking OR conn to %s:%d as unsuitable for new circuits: "
- "(fd %d, %d secs old). We have a better one with the "
- "same address (fd %d; %d secs old).",
- or_conn->_base.address, or_conn->_base.port, or_conn->_base.s,
- (int)(now - or_conn->_base.timestamp_created),
- best->_base.s, (int)(now - best->_base.timestamp_created));
- or_conn->is_bad_for_new_circs = 1;
+ "(fd "TOR_SOCKET_T_FORMAT", %d secs old). We have a better "
+ "one with the "
+ "same address (fd "TOR_SOCKET_T_FORMAT"; %d secs old).",
+ or_conn->base_.address, or_conn->base_.port, or_conn->base_.s,
+ (int)(now - or_conn->base_.timestamp_created),
+ best->base_.s, (int)(now - best->base_.timestamp_created));
+ connection_or_mark_bad_for_new_circs(or_conn);
}
}
}
@@ -1016,11 +1078,44 @@ connection_or_connect_failed(or_connection_t *conn,
{
control_event_or_conn_status(conn, OR_CONN_EVENT_FAILED, reason);
if (!authdir_mode_tests_reachability(get_options()))
- control_event_bootstrap_problem(msg, reason);
+ control_event_bootstrap_problem(msg, reason, conn);
+}
+
+/** <b>conn</b> got an error in connection_handle_read_impl() or
+ * connection_handle_write_impl() and is going to die soon.
+ *
+ * <b>reason</b> specifies the or_conn_end_reason for the failure;
+ * <b>msg</b> specifies the strerror-style error message.
+ */
+void
+connection_or_notify_error(or_connection_t *conn,
+ int reason, const char *msg)
+{
+ channel_t *chan;
+
+ tor_assert(conn);
+
+ /* If we're connecting, call connect_failed() too */
+ if (TO_CONN(conn)->state == OR_CONN_STATE_CONNECTING)
+ connection_or_connect_failed(conn, reason, msg);
+
+ /* Tell the controlling channel if we have one */
+ if (conn->chan) {
+ chan = TLS_CHAN_TO_BASE(conn->chan);
+ /* Don't transition if we're already in closing, closed or error */
+ if (!(chan->state == CHANNEL_STATE_CLOSING ||
+ chan->state == CHANNEL_STATE_CLOSED ||
+ chan->state == CHANNEL_STATE_ERROR)) {
+ channel_close_for_error(chan);
+ }
+ }
+
+ /* No need to mark for error because connection.c is about to do that */
}
/** Launch a new OR connection to <b>addr</b>:<b>port</b> and expect to
- * handshake with an OR with identity digest <b>id_digest</b>.
+ * handshake with an OR with identity digest <b>id_digest</b>. Optionally,
+ * pass in a pointer to a channel using this connection.
*
* If <b>id_digest</b> is me, do nothing. If we're already connected to it,
* return that connection. If the connect() is in progress, set the
@@ -1035,7 +1130,8 @@ connection_or_connect_failed(or_connection_t *conn,
*/
or_connection_t *
connection_or_connect(const tor_addr_t *_addr, uint16_t port,
- const char *id_digest)
+ const char *id_digest,
+ channel_tls_t *chan)
{
or_connection_t *conn;
const or_options_t *options = get_options();
@@ -1056,11 +1152,19 @@ connection_or_connect(const tor_addr_t *_addr, uint16_t port,
return NULL;
}
- conn = or_connection_new(tor_addr_family(&addr));
+ conn = or_connection_new(CONN_TYPE_OR, tor_addr_family(&addr));
- /* set up conn so it's got all the data we need to remember */
+ /*
+ * Set up conn so it's got all the data we need to remember for channels
+ *
+ * This stuff needs to happen before connection_or_init_conn_from_address()
+ * so connection_or_set_identity_digest() and such know where to look to
+ * keep the channel up to date.
+ */
+ conn->chan = chan;
+ chan->conn = conn;
connection_or_init_conn_from_address(conn, &addr, port, id_digest, 1);
- conn->_base.state = OR_CONN_STATE_CONNECTING;
+ connection_or_change_state(conn, OR_CONN_STATE_CONNECTING);
control_event_or_conn_status(conn, OR_CONN_EVENT_LAUNCHED, 0);
conn->is_outgoing = 1;
@@ -1072,7 +1176,7 @@ connection_or_connect(const tor_addr_t *_addr, uint16_t port,
if (proxy_type != PROXY_NONE) {
tor_addr_copy(&addr, &proxy_addr);
port = proxy_port;
- conn->_base.proxy_state = PROXY_INFANT;
+ conn->base_.proxy_state = PROXY_INFANT;
}
} else {
/* get_proxy_addrport() might fail if we have a Bridge line that
@@ -1084,29 +1188,35 @@ connection_or_connect(const tor_addr_t *_addr, uint16_t port,
TO_CONN(conn)->port);
if (transport_name) {
- log_warn(LD_GENERAL, "We were supposed to connect to bridge '%s:%u' "
+ log_warn(LD_GENERAL, "We were supposed to connect to bridge '%s' "
"using pluggable transport '%s', but we can't find a pluggable "
"transport proxy supporting '%s'. This can happen if you "
"haven't provided a ClientTransportPlugin line, or if "
"your pluggable transport proxy stopped running.",
- fmt_addr(&TO_CONN(conn)->addr), TO_CONN(conn)->port,
+ fmt_addrport(&TO_CONN(conn)->addr, TO_CONN(conn)->port),
transport_name, transport_name);
+
+ control_event_bootstrap_problem(
+ "Can't connect to bridge",
+ END_OR_CONN_REASON_PT_MISSING,
+ conn);
+
} else {
- log_warn(LD_GENERAL, "Tried to connect to '%s:%u' through a proxy, but "
+ log_warn(LD_GENERAL, "Tried to connect to '%s' through a proxy, but "
"the proxy address could not be found.",
- fmt_addr(&TO_CONN(conn)->addr), TO_CONN(conn)->port);
+ fmt_addrport(&TO_CONN(conn)->addr, TO_CONN(conn)->port));
}
connection_free(TO_CONN(conn));
return NULL;
}
- switch (connection_connect(TO_CONN(conn), conn->_base.address,
+ switch (connection_connect(TO_CONN(conn), conn->base_.address,
&addr, port, &socket_error)) {
case -1:
/* If the connection failed immediately, and we're using
* a proxy, our proxy is down. Don't blame the Tor server. */
- if (conn->_base.proxy_state == PROXY_INFANT)
+ if (conn->base_.proxy_state == PROXY_INFANT)
entry_guard_register_connect_status(conn->identity_digest,
0, 1, time(NULL));
connection_or_connect_failed(conn,
@@ -1129,6 +1239,62 @@ connection_or_connect(const tor_addr_t *_addr, uint16_t port,
return conn;
}
+/** Mark orconn for close and transition the associated channel, if any, to
+ * the closing state.
+ *
+ * It's safe to call this and connection_or_close_for_error() any time, and
+ * channel layer will treat it as a connection closing for reasons outside
+ * its control, like the remote end closing it. It can also be a local
+ * reason that's specific to connection_t/or_connection_t rather than
+ * the channel mechanism, such as expiration of old connections in
+ * run_connection_housekeeping(). If you want to close a channel_t
+ * from somewhere that logically works in terms of generic channels
+ * rather than connections, use channel_mark_for_close(); see also
+ * the comment on that function in channel.c.
+ */
+
+void
+connection_or_close_normally(or_connection_t *orconn, int flush)
+{
+ channel_t *chan = NULL;
+
+ tor_assert(orconn);
+ if (flush) connection_mark_and_flush_internal(TO_CONN(orconn));
+ else connection_mark_for_close_internal(TO_CONN(orconn));
+ if (orconn->chan) {
+ chan = TLS_CHAN_TO_BASE(orconn->chan);
+ /* Don't transition if we're already in closing, closed or error */
+ if (!(chan->state == CHANNEL_STATE_CLOSING ||
+ chan->state == CHANNEL_STATE_CLOSED ||
+ chan->state == CHANNEL_STATE_ERROR)) {
+ channel_close_from_lower_layer(chan);
+ }
+ }
+}
+
+/** Mark orconn for close and transition the associated channel, if any, to
+ * the error state.
+ */
+
+void
+connection_or_close_for_error(or_connection_t *orconn, int flush)
+{
+ channel_t *chan = NULL;
+
+ tor_assert(orconn);
+ if (flush) connection_mark_and_flush_internal(TO_CONN(orconn));
+ else connection_mark_for_close_internal(TO_CONN(orconn));
+ if (orconn->chan) {
+ chan = TLS_CHAN_TO_BASE(orconn->chan);
+ /* Don't transition if we're already in closing, closed or error */
+ if (!(chan->state == CHANNEL_STATE_CLOSING ||
+ chan->state == CHANNEL_STATE_CLOSED ||
+ chan->state == CHANNEL_STATE_ERROR)) {
+ channel_close_for_error(chan);
+ }
+ }
+}
+
/** Begin the tls handshake with <b>conn</b>. <b>receiving</b> is 0 if
* we initiated the connection, else it's 1.
*
@@ -1137,32 +1303,49 @@ connection_or_connect(const tor_addr_t *_addr, uint16_t port,
*
* Return -1 if <b>conn</b> is broken, else return 0.
*/
-int
-connection_tls_start_handshake(or_connection_t *conn, int receiving)
+MOCK_IMPL(int,
+connection_tls_start_handshake,(or_connection_t *conn, int receiving))
{
- conn->_base.state = OR_CONN_STATE_TLS_HANDSHAKING;
+ channel_listener_t *chan_listener;
+ channel_t *chan;
+
+ /* Incoming connections will need a new channel passed to the
+ * channel_tls_listener */
+ if (receiving) {
+ /* It shouldn't already be set */
+ tor_assert(!(conn->chan));
+ chan_listener = channel_tls_get_listener();
+ if (!chan_listener) {
+ chan_listener = channel_tls_start_listener();
+ command_setup_listener(chan_listener);
+ }
+ chan = channel_tls_handle_incoming(conn);
+ channel_listener_queue_incoming(chan_listener, chan);
+ }
+
+ connection_or_change_state(conn, OR_CONN_STATE_TLS_HANDSHAKING);
tor_assert(!conn->tls);
- conn->tls = tor_tls_new(conn->_base.s, receiving);
+ conn->tls = tor_tls_new(conn->base_.s, receiving);
if (!conn->tls) {
log_warn(LD_BUG,"tor_tls_new failed. Closing.");
return -1;
}
tor_tls_set_logged_address(conn->tls, // XXX client and relay?
- escaped_safe_str(conn->_base.address));
+ escaped_safe_str(conn->base_.address));
#ifdef USE_BUFFEREVENTS
if (connection_type_uses_bufferevent(TO_CONN(conn))) {
- const int filtering = get_options()->_UseFilteringSSLBufferevents;
+ const int filtering = get_options()->UseFilteringSSLBufferevents;
struct bufferevent *b =
- tor_tls_init_bufferevent(conn->tls, conn->_base.bufev, conn->_base.s,
+ tor_tls_init_bufferevent(conn->tls, conn->base_.bufev, conn->base_.s,
receiving, filtering);
if (!b) {
log_warn(LD_BUG,"tor_tls_init_bufferevent failed. Closing.");
return -1;
}
- conn->_base.bufev = b;
+ conn->base_.bufev = b;
if (conn->bucket_cfg)
- tor_set_bufferevent_rate_limit(conn->_base.bufev, conn->bucket_cfg);
+ tor_set_bufferevent_rate_limit(conn->base_.bufev, conn->bucket_cfg);
connection_enable_rate_limiting(TO_CONN(conn));
connection_configure_bufferevent_callbacks(TO_CONN(conn));
@@ -1174,7 +1357,8 @@ connection_tls_start_handshake(or_connection_t *conn, int receiving)
}
#endif
connection_start_reading(TO_CONN(conn));
- log_debug(LD_HANDSHAKE,"starting TLS handshake on fd %d", conn->_base.s);
+ log_debug(LD_HANDSHAKE,"starting TLS handshake on fd "TOR_SOCKET_T_FORMAT,
+ conn->base_.s);
note_crypto_pk_op(receiving ? TLS_HANDSHAKE_S : TLS_HANDSHAKE_C);
IF_HAS_BUFFEREVENT(TO_CONN(conn), {
@@ -1211,7 +1395,7 @@ connection_or_tls_renegotiated_cb(tor_tls_t *tls, void *_conn)
if (connection_tls_finish_handshake(conn) < 0) {
/* XXXX_TLS double-check that it's ok to do this from inside read. */
/* XXXX_TLS double-check that this verifies certificates. */
- connection_mark_for_close(TO_CONN(conn));
+ connection_or_close_for_error(conn, 0);
}
}
@@ -1226,12 +1410,12 @@ connection_tls_continue_handshake(or_connection_t *conn)
int result;
check_no_tls_errors();
again:
- if (conn->_base.state == OR_CONN_STATE_TLS_CLIENT_RENEGOTIATING) {
+ if (conn->base_.state == OR_CONN_STATE_TLS_CLIENT_RENEGOTIATING) {
// log_notice(LD_OR, "Renegotiate with %p", conn->tls);
result = tor_tls_renegotiate(conn->tls);
// log_notice(LD_OR, "Result: %d", result);
} else {
- tor_assert(conn->_base.state == OR_CONN_STATE_TLS_HANDSHAKING);
+ tor_assert(conn->base_.state == OR_CONN_STATE_TLS_HANDSHAKING);
// log_notice(LD_OR, "Continue handshake with %p", conn->tls);
result = tor_tls_handshake(conn->tls);
// log_notice(LD_OR, "Result: %d", result);
@@ -1244,19 +1428,21 @@ connection_tls_continue_handshake(or_connection_t *conn)
case TOR_TLS_DONE:
if (! tor_tls_used_v1_handshake(conn->tls)) {
if (!tor_tls_is_server(conn->tls)) {
- if (conn->_base.state == OR_CONN_STATE_TLS_HANDSHAKING) {
+ if (conn->base_.state == OR_CONN_STATE_TLS_HANDSHAKING) {
if (tor_tls_received_v3_certificate(conn->tls)) {
log_info(LD_OR, "Client got a v3 cert! Moving on to v3 "
- "handshake.");
+ "handshake with ciphersuite %s",
+ tor_tls_get_ciphersuite_name(conn->tls));
return connection_or_launch_v3_or_handshake(conn);
} else {
log_debug(LD_OR, "Done with initial SSL handshake (client-side)."
" Requesting renegotiation.");
- conn->_base.state = OR_CONN_STATE_TLS_CLIENT_RENEGOTIATING;
+ connection_or_change_state(conn,
+ OR_CONN_STATE_TLS_CLIENT_RENEGOTIATING);
goto again;
}
}
- // log_notice(LD_OR,"Done. state was %d.", conn->_base.state);
+ // log_notice(LD_OR,"Done. state was %d.", conn->base_.state);
} else {
/* v2/v3 handshake, but not a client. */
log_debug(LD_OR, "Done with initial SSL handshake (server-side). "
@@ -1264,7 +1450,8 @@ connection_tls_continue_handshake(or_connection_t *conn)
tor_tls_set_renegotiate_callback(conn->tls,
connection_or_tls_renegotiated_cb,
conn);
- conn->_base.state = OR_CONN_STATE_TLS_SERVER_RENEGOTIATING;
+ connection_or_change_state(conn,
+ OR_CONN_STATE_TLS_SERVER_RENEGOTIATING);
connection_stop_writing(TO_CONN(conn));
connection_start_reading(TO_CONN(conn));
return 0;
@@ -1294,28 +1481,29 @@ connection_or_handle_event_cb(struct bufferevent *bufev, short event,
/* XXXX cut-and-paste code; should become a function. */
if (event & BEV_EVENT_CONNECTED) {
- if (conn->_base.state == OR_CONN_STATE_TLS_HANDSHAKING) {
+ if (conn->base_.state == OR_CONN_STATE_TLS_HANDSHAKING) {
if (tor_tls_finish_handshake(conn->tls) < 0) {
log_warn(LD_OR, "Problem finishing handshake");
- connection_mark_for_close(TO_CONN(conn));
+ connection_or_close_for_error(conn, 0);
return;
}
}
if (! tor_tls_used_v1_handshake(conn->tls)) {
if (!tor_tls_is_server(conn->tls)) {
- if (conn->_base.state == OR_CONN_STATE_TLS_HANDSHAKING) {
+ if (conn->base_.state == OR_CONN_STATE_TLS_HANDSHAKING) {
if (tor_tls_received_v3_certificate(conn->tls)) {
log_info(LD_OR, "Client got a v3 cert!");
if (connection_or_launch_v3_or_handshake(conn) < 0)
- connection_mark_for_close(TO_CONN(conn));
+ connection_or_close_for_error(conn, 0);
return;
} else {
- conn->_base.state = OR_CONN_STATE_TLS_CLIENT_RENEGOTIATING;
+ connection_or_change_state(conn,
+ OR_CONN_STATE_TLS_CLIENT_RENEGOTIATING);
tor_tls_unblock_renegotiation(conn->tls);
- if (bufferevent_ssl_renegotiate(conn->_base.bufev)<0) {
+ if (bufferevent_ssl_renegotiate(conn->base_.bufev)<0) {
log_warn(LD_OR, "Start_renegotiating went badly.");
- connection_mark_for_close(TO_CONN(conn));
+ connection_or_close_for_error(conn, 0);
}
tor_tls_unblock_renegotiation(conn->tls);
return; /* ???? */
@@ -1330,7 +1518,8 @@ connection_or_handle_event_cb(struct bufferevent *bufev, short event,
tor_tls_set_renegotiate_callback(conn->tls,
connection_or_tls_renegotiated_cb,
conn);
- conn->_base.state = OR_CONN_STATE_TLS_SERVER_RENEGOTIATING;
+ connection_or_change_state(conn,
+ OR_CONN_STATE_TLS_SERVER_RENEGOTIATING);
} else if (handshakes == 2) {
/* v2 handshake, as a server. Two handshakes happened already,
* so we treat renegotiation as done.
@@ -1339,18 +1528,18 @@ connection_or_handle_event_cb(struct bufferevent *bufev, short event,
} else if (handshakes > 2) {
log_warn(LD_OR, "More than two handshakes done on connection. "
"Closing.");
- connection_mark_for_close(TO_CONN(conn));
+ connection_or_close_for_error(conn, 0);
} else {
log_warn(LD_BUG, "We were unexpectedly told that a connection "
"got %d handshakes. Closing.", handshakes);
- connection_mark_for_close(TO_CONN(conn));
+ connection_or_close_for_error(conn, 0);
}
return;
}
}
connection_watch_events(TO_CONN(conn), READ_EVENT|WRITE_EVENT);
if (connection_tls_finish_handshake(conn) < 0)
- connection_mark_for_close(TO_CONN(conn)); /* ???? */
+ connection_or_close_for_error(conn, 0); /* ???? */
return;
}
@@ -1372,7 +1561,8 @@ connection_or_handle_event_cb(struct bufferevent *bufev, short event,
int
connection_or_nonopen_was_started_here(or_connection_t *conn)
{
- tor_assert(conn->_base.type == CONN_TYPE_OR);
+ tor_assert(conn->base_.type == CONN_TYPE_OR ||
+ conn->base_.type == CONN_TYPE_EXT_OR);
if (!conn->tls)
return 1; /* it's still in proxy states or something */
if (conn->handshake_state)
@@ -1380,29 +1570,6 @@ connection_or_nonopen_was_started_here(or_connection_t *conn)
return !tor_tls_is_server(conn->tls);
}
-/** Set the circid_type field of <b>conn</b> (which determines which part of
- * the circuit ID space we're willing to use) based on comparing our ID to
- * <b>identity_rcvd</b> */
-void
-connection_or_set_circid_type(or_connection_t *conn,
- crypto_pk_t *identity_rcvd)
-{
- const int started_here = connection_or_nonopen_was_started_here(conn);
- crypto_pk_t *our_identity =
- started_here ? get_tlsclient_identity_key() :
- get_server_identity_key();
-
- if (identity_rcvd) {
- if (crypto_pk_cmp_keys(our_identity, identity_rcvd)<0) {
- conn->circ_id_type = CIRC_ID_TYPE_LOWER;
- } else {
- conn->circ_id_type = CIRC_ID_TYPE_HIGHER;
- }
- } else {
- conn->circ_id_type = CIRC_ID_TYPE_NEITHER;
- }
-}
-
/** <b>Conn</b> just completed its handshake. Return 0 if all is well, and
* return -1 if he is lying, broken, or otherwise something is wrong.
*
@@ -1437,8 +1604,8 @@ connection_or_check_valid_tls_handshake(or_connection_t *conn,
const or_options_t *options = get_options();
int severity = server_mode(options) ? LOG_PROTOCOL_WARN : LOG_WARN;
const char *safe_address =
- started_here ? conn->_base.address :
- safe_str_client(conn->_base.address);
+ started_here ? conn->base_.address :
+ safe_str_client(conn->base_.address);
const char *conn_type = started_here ? "outgoing" : "incoming";
int has_cert = 0;
@@ -1447,7 +1614,7 @@ connection_or_check_valid_tls_handshake(or_connection_t *conn,
if (started_here && !has_cert) {
log_info(LD_HANDSHAKE,"Tried connecting to router at %s:%d, but it didn't "
"send a cert! Closing.",
- safe_address, conn->_base.port);
+ safe_address, conn->base_.port);
return -1;
} else if (!has_cert) {
log_debug(LD_HANDSHAKE,"Got incoming connection with no certificate. "
@@ -1461,7 +1628,7 @@ connection_or_check_valid_tls_handshake(or_connection_t *conn,
if (started_here && v<0) {
log_fn(severity,LD_HANDSHAKE,"Tried connecting to router at %s:%d: It"
" has a cert but it's invalid. Closing.",
- safe_address, conn->_base.port);
+ safe_address, conn->base_.port);
return -1;
} else if (v<0) {
log_info(LD_HANDSHAKE,"Incoming connection gave us an invalid cert "
@@ -1469,7 +1636,7 @@ connection_or_check_valid_tls_handshake(or_connection_t *conn,
} else {
log_debug(LD_HANDSHAKE,
"The certificate seems to be valid on %s connection "
- "with %s:%d", conn_type, safe_address, conn->_base.port);
+ "with %s:%d", conn_type, safe_address, conn->base_.port);
}
check_no_tls_errors();
}
@@ -1480,7 +1647,9 @@ connection_or_check_valid_tls_handshake(or_connection_t *conn,
memset(digest_rcvd_out, 0, DIGEST_LEN);
}
- connection_or_set_circid_type(conn, identity_rcvd);
+ tor_assert(conn->chan);
+ channel_set_circid_type(TLS_CHAN_TO_BASE(conn->chan), identity_rcvd, 1);
+
crypto_pk_free(identity_rcvd);
if (started_here)
@@ -1521,10 +1690,10 @@ connection_or_client_learned_peer_id(or_connection_t *conn,
conn->identity_digest, DIGEST_LEN);
log_info(LD_HANDSHAKE, "Connected to router %s at %s:%d without knowing "
"its key. Hoping for the best.",
- conn->nickname, conn->_base.address, conn->_base.port);
+ conn->nickname, conn->base_.address, conn->base_.port);
/* if it's a bridge and we didn't know its identity fingerprint, now
* we do -- remember it for future attempts. */
- learned_router_identity(&conn->_base.addr, conn->_base.port,
+ learned_router_identity(&conn->base_.addr, conn->base_.port,
(const char*)peer_id);
}
@@ -1538,7 +1707,7 @@ connection_or_client_learned_peer_id(or_connection_t *conn,
log_fn(severity, LD_HANDSHAKE,
"Tried connecting to router at %s:%d, but identity key was not "
"as expected: wanted %s but got %s.",
- conn->_base.address, conn->_base.port, expected, seen);
+ conn->base_.address, conn->base_.port, expected, seen);
entry_guard_register_connect_status(conn->identity_digest, 0, 1,
time(NULL));
control_event_or_conn_status(conn, OR_CONN_EVENT_FAILED,
@@ -1546,17 +1715,31 @@ connection_or_client_learned_peer_id(or_connection_t *conn,
if (!authdir_mode_tests_reachability(options))
control_event_bootstrap_problem(
"Unexpected identity in router certificate",
- END_OR_CONN_REASON_OR_IDENTITY);
+ END_OR_CONN_REASON_OR_IDENTITY,
+ conn);
return -1;
}
if (authdir_mode_tests_reachability(options)) {
- dirserv_orconn_tls_done(conn->_base.address, conn->_base.port,
+ dirserv_orconn_tls_done(&conn->base_.addr, conn->base_.port,
(const char*)peer_id);
}
return 0;
}
+/** Return when a client used this, for connection.c, since client_used
+ * is now one of the timestamps of channel_t */
+
+time_t
+connection_or_client_used(or_connection_t *conn)
+{
+ tor_assert(conn);
+
+ if (conn->chan) {
+ return channel_when_last_client(TLS_CHAN_TO_BASE(conn->chan));
+ } else return 0;
+}
+
/** The v1/v2 TLS handshake is finished.
*
* Make sure we are happy with the person we just handshaked with.
@@ -1576,34 +1759,34 @@ connection_tls_finish_handshake(or_connection_t *conn)
char digest_rcvd[DIGEST_LEN];
int started_here = connection_or_nonopen_was_started_here(conn);
- log_debug(LD_HANDSHAKE,"%s tls handshake on %p with %s done. verifying.",
+ log_debug(LD_HANDSHAKE,"%s tls handshake on %p with %s done, using "
+ "ciphersuite %s. verifying.",
started_here?"outgoing":"incoming",
conn,
- safe_str_client(conn->_base.address));
-
- directory_set_dirty();
+ safe_str_client(conn->base_.address),
+ tor_tls_get_ciphersuite_name(conn->tls));
if (connection_or_check_valid_tls_handshake(conn, started_here,
digest_rcvd) < 0)
return -1;
- circuit_build_times_network_is_live(&circ_times);
+ circuit_build_times_network_is_live(get_circuit_build_times_mutable());
if (tor_tls_used_v1_handshake(conn->tls)) {
conn->link_proto = 1;
if (!started_here) {
- connection_or_init_conn_from_address(conn, &conn->_base.addr,
- conn->_base.port, digest_rcvd, 0);
+ connection_or_init_conn_from_address(conn, &conn->base_.addr,
+ conn->base_.port, digest_rcvd, 0);
}
tor_tls_block_renegotiation(conn->tls);
return connection_or_set_state_open(conn);
} else {
- conn->_base.state = OR_CONN_STATE_OR_HANDSHAKING_V2;
+ connection_or_change_state(conn, OR_CONN_STATE_OR_HANDSHAKING_V2);
if (connection_init_or_handshake_state(conn, started_here) < 0)
return -1;
if (!started_here) {
- connection_or_init_conn_from_address(conn, &conn->_base.addr,
- conn->_base.port, digest_rcvd, 0);
+ connection_or_init_conn_from_address(conn, &conn->base_.addr,
+ conn->base_.port, digest_rcvd, 0);
}
return connection_or_send_versions(conn, 0);
}
@@ -1621,9 +1804,9 @@ connection_or_launch_v3_or_handshake(or_connection_t *conn)
tor_assert(connection_or_nonopen_was_started_here(conn));
tor_assert(tor_tls_received_v3_certificate(conn->tls));
- circuit_build_times_network_is_live(&circ_times);
+ circuit_build_times_network_is_live(get_circuit_build_times_mutable());
- conn->_base.state = OR_CONN_STATE_OR_HANDSHAKING_V3;
+ connection_or_change_state(conn, OR_CONN_STATE_OR_HANDSHAKING_V3);
if (connection_init_or_handshake_state(conn, 1) < 0)
return -1;
@@ -1671,10 +1854,12 @@ or_handshake_state_free(or_handshake_state_t *state)
* authenticate cell.)
*/
void
-or_handshake_state_record_cell(or_handshake_state_t *state,
+or_handshake_state_record_cell(or_connection_t *conn,
+ or_handshake_state_t *state,
const cell_t *cell,
int incoming)
{
+ size_t cell_network_size = get_cell_network_size(conn->wide_circ_ids);
crypto_digest_t *d, **dptr;
packed_cell_t packed;
if (incoming) {
@@ -1696,8 +1881,8 @@ or_handshake_state_record_cell(or_handshake_state_t *state,
d = *dptr;
/* Re-packing like this is a little inefficient, but we don't have to do
this very often at all. */
- cell_pack(&packed, cell);
- crypto_digest_add_bytes(d, packed.body, sizeof(packed.body));
+ cell_pack(&packed, cell, conn->wide_circ_ids);
+ crypto_digest_add_bytes(d, packed.body, cell_network_size);
memwipe(&packed, 0, sizeof(packed));
}
@@ -1710,12 +1895,14 @@ or_handshake_state_record_cell(or_handshake_state_t *state,
* authenticate cell.)
*/
void
-or_handshake_state_record_var_cell(or_handshake_state_t *state,
+or_handshake_state_record_var_cell(or_connection_t *conn,
+ or_handshake_state_t *state,
const var_cell_t *cell,
int incoming)
{
crypto_digest_t *d, **dptr;
- char buf[VAR_CELL_HEADER_SIZE];
+ int n;
+ char buf[VAR_CELL_MAX_HEADER_SIZE];
if (incoming) {
if (!state->digest_received_data)
return;
@@ -1729,8 +1916,8 @@ or_handshake_state_record_var_cell(or_handshake_state_t *state,
d = *dptr;
- var_cell_pack_header(cell, buf);
- crypto_digest_add_bytes(d, buf, sizeof(buf));
+ n = var_cell_pack_header(cell, buf, conn->wide_circ_ids);
+ crypto_digest_add_bytes(d, buf, n);
crypto_digest_add_bytes(d, (const char *)cell->payload, cell->payload_len);
memwipe(buf, 0, sizeof(buf));
@@ -1742,35 +1929,9 @@ or_handshake_state_record_var_cell(or_handshake_state_t *state,
int
connection_or_set_state_open(or_connection_t *conn)
{
- int started_here = connection_or_nonopen_was_started_here(conn);
- time_t now = time(NULL);
- conn->_base.state = OR_CONN_STATE_OPEN;
+ connection_or_change_state(conn, OR_CONN_STATE_OPEN);
control_event_or_conn_status(conn, OR_CONN_EVENT_CONNECTED, 0);
- if (started_here) {
- circuit_build_times_network_is_live(&circ_times);
- rep_hist_note_connect_succeeded(conn->identity_digest, now);
- if (entry_guard_register_connect_status(conn->identity_digest,
- 1, 0, now) < 0) {
- /* Close any circuits pending on this conn. We leave it in state
- * 'open' though, because it didn't actually *fail* -- we just
- * chose not to use it. (Otherwise
- * connection_about_to_close_connection() will call a big pile of
- * functions to indicate we shouldn't try it again.) */
- log_debug(LD_OR, "New entry guard was reachable, but closing this "
- "connection so we can retry the earlier entry guards.");
- circuit_n_conn_done(conn, 0);
- return -1;
- }
- router_set_status(conn->identity_digest, 1);
- } else {
- /* only report it to the geoip module if it's not a known router */
- if (!router_get_by_id_digest(conn->identity_digest)) {
- geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &TO_CONN(conn)->addr,
- now);
- }
- }
-
or_handshake_state_free(conn->handshake_state);
conn->handshake_state = NULL;
IF_HAS_BUFFEREVENT(TO_CONN(conn), {
@@ -1779,8 +1940,6 @@ connection_or_set_state_open(or_connection_t *conn)
connection_start_reading(TO_CONN(conn));
}
- circuit_n_conn_done(conn, 1); /* send the pending creates, if any. */
-
return 0;
}
@@ -1792,16 +1951,21 @@ void
connection_or_write_cell_to_buf(const cell_t *cell, or_connection_t *conn)
{
packed_cell_t networkcell;
+ size_t cell_network_size = get_cell_network_size(conn->wide_circ_ids);
tor_assert(cell);
tor_assert(conn);
- cell_pack(&networkcell, cell);
+ cell_pack(&networkcell, cell, conn->wide_circ_ids);
- connection_write_to_buf(networkcell.body, CELL_NETWORK_SIZE, TO_CONN(conn));
+ connection_write_to_buf(networkcell.body, cell_network_size, TO_CONN(conn));
- if (conn->_base.state == OR_CONN_STATE_OR_HANDSHAKING_V3)
- or_handshake_state_record_cell(conn->handshake_state, cell, 0);
+ /* Touch the channel's active timestamp if there is one */
+ if (conn->chan)
+ channel_timestamp_active(TLS_CHAN_TO_BASE(conn->chan));
+
+ if (conn->base_.state == OR_CONN_STATE_OR_HANDSHAKING_V3)
+ or_handshake_state_record_cell(conn, conn->handshake_state, cell, 0);
if (cell->command != CELL_PADDING)
conn->timestamp_last_added_nonpadding = approx_time();
@@ -1815,17 +1979,22 @@ void
connection_or_write_var_cell_to_buf(const var_cell_t *cell,
or_connection_t *conn)
{
- char hdr[VAR_CELL_HEADER_SIZE];
+ int n;
+ char hdr[VAR_CELL_MAX_HEADER_SIZE];
tor_assert(cell);
tor_assert(conn);
- var_cell_pack_header(cell, hdr);
- connection_write_to_buf(hdr, sizeof(hdr), TO_CONN(conn));
+ n = var_cell_pack_header(cell, hdr, conn->wide_circ_ids);
+ connection_write_to_buf(hdr, n, TO_CONN(conn));
connection_write_to_buf((char*)cell->payload,
cell->payload_len, TO_CONN(conn));
- if (conn->_base.state == OR_CONN_STATE_OR_HANDSHAKING_V3)
- or_handshake_state_record_var_cell(conn->handshake_state, cell, 0);
+ if (conn->base_.state == OR_CONN_STATE_OR_HANDSHAKING_V3)
+ or_handshake_state_record_var_cell(conn, conn->handshake_state, cell, 0);
if (cell->command != CELL_PADDING)
conn->timestamp_last_added_nonpadding = approx_time();
+
+ /* Touch the channel's active timestamp if there is one */
+ if (conn->chan)
+ channel_timestamp_active(TLS_CHAN_TO_BASE(conn->chan));
}
/** See whether there's a variable-length cell waiting on <b>or_conn</b>'s
@@ -1856,59 +2025,48 @@ connection_or_process_cells_from_inbuf(or_connection_t *conn)
while (1) {
log_debug(LD_OR,
- "%d: starting, inbuf_datalen %d (%d pending in tls object).",
- conn->_base.s,(int)connection_get_inbuf_len(TO_CONN(conn)),
+ TOR_SOCKET_T_FORMAT": starting, inbuf_datalen %d "
+ "(%d pending in tls object).",
+ conn->base_.s,(int)connection_get_inbuf_len(TO_CONN(conn)),
tor_tls_get_pending_bytes(conn->tls));
if (connection_fetch_var_cell_from_buf(conn, &var_cell)) {
if (!var_cell)
return 0; /* not yet. */
- circuit_build_times_network_is_live(&circ_times);
- command_process_var_cell(var_cell, conn);
+
+ /* Touch the channel's active timestamp if there is one */
+ if (conn->chan)
+ channel_timestamp_active(TLS_CHAN_TO_BASE(conn->chan));
+
+ circuit_build_times_network_is_live(get_circuit_build_times_mutable());
+ channel_tls_handle_var_cell(var_cell, conn);
var_cell_free(var_cell);
} else {
- char buf[CELL_NETWORK_SIZE];
+ const int wide_circ_ids = conn->wide_circ_ids;
+ size_t cell_network_size = get_cell_network_size(conn->wide_circ_ids);
+ char buf[CELL_MAX_NETWORK_SIZE];
cell_t cell;
if (connection_get_inbuf_len(TO_CONN(conn))
- < CELL_NETWORK_SIZE) /* whole response available? */
+ < cell_network_size) /* whole response available? */
return 0; /* not yet */
- circuit_build_times_network_is_live(&circ_times);
- connection_fetch_from_buf(buf, CELL_NETWORK_SIZE, TO_CONN(conn));
+ /* Touch the channel's active timestamp if there is one */
+ if (conn->chan)
+ channel_timestamp_active(TLS_CHAN_TO_BASE(conn->chan));
+
+ circuit_build_times_network_is_live(get_circuit_build_times_mutable());
+ connection_fetch_from_buf(buf, cell_network_size, TO_CONN(conn));
/* retrieve cell info from buf (create the host-order struct from the
* network-order string) */
- cell_unpack(&cell, buf);
+ cell_unpack(&cell, buf, wide_circ_ids);
- command_process_cell(&cell, conn);
+ channel_tls_handle_cell(&cell, conn);
}
}
}
-/** Write a destroy cell with circ ID <b>circ_id</b> and reason <b>reason</b>
- * onto OR connection <b>conn</b>. Don't perform range-checking on reason:
- * we may want to propagate reasons from other cells.
- *
- * Return 0.
- */
-int
-connection_or_send_destroy(circid_t circ_id, or_connection_t *conn, int reason)
-{
- cell_t cell;
-
- tor_assert(conn);
-
- memset(&cell, 0, sizeof(cell_t));
- cell.circ_id = circ_id;
- cell.command = CELL_DESTROY;
- cell.payload[0] = (uint8_t) reason;
- log_debug(LD_OR,"Sending destroy (circID %d).", circ_id);
-
- connection_or_write_cell_to_buf(&cell, conn);
- return 0;
-}
-
/** Array of recognized link protocol versions. */
-static const uint16_t or_protocol_versions[] = { 1, 2, 3 };
+static const uint16_t or_protocol_versions[] = { 1, 2, 3, 4 };
/** Number of versions in <b>or_protocol_versions</b>. */
static const int n_or_protocol_versions =
(int)( sizeof(or_protocol_versions)/sizeof(uint16_t) );
@@ -1975,19 +2133,26 @@ connection_or_send_netinfo(or_connection_t *conn)
tor_assert(conn->handshake_state);
+ if (conn->handshake_state->sent_netinfo) {
+ log_warn(LD_BUG, "Attempted to send an extra netinfo cell on a connection "
+ "where we already sent one.");
+ return 0;
+ }
+
memset(&cell, 0, sizeof(cell_t));
cell.command = CELL_NETINFO;
- /* Timestamp. */
- set_uint32(cell.payload, htonl((uint32_t)now));
+ /* Timestamp, if we're a relay. */
+ if (public_server_mode(get_options()) || ! conn->is_outgoing)
+ set_uint32(cell.payload, htonl((uint32_t)now));
/* Their address. */
out = cell.payload + 4;
/* We use &conn->real_addr below, unless it hasn't yet been set. If it
- * hasn't yet been set, we know that _base.addr hasn't been tampered with
+ * hasn't yet been set, we know that base_.addr hasn't been tampered with
* yet either. */
len = append_address_to_payload(out, !tor_addr_is_null(&conn->real_addr)
- ? &conn->real_addr : &conn->_base.addr);
+ ? &conn->real_addr : &conn->base_.addr);
if (len<0)
return -1;
out += len;
@@ -1998,17 +2163,25 @@ connection_or_send_netinfo(or_connection_t *conn)
if ((public_server_mode(get_options()) || !conn->is_outgoing) &&
(me = router_get_my_routerinfo())) {
tor_addr_t my_addr;
- *out++ = 1; /* only one address is supported. */
+ *out++ = 1 + !tor_addr_is_null(&me->ipv6_addr);
tor_addr_from_ipv4h(&my_addr, me->addr);
len = append_address_to_payload(out, &my_addr);
if (len < 0)
return -1;
+ out += len;
+
+ if (!tor_addr_is_null(&me->ipv6_addr)) {
+ len = append_address_to_payload(out, &me->ipv6_addr);
+ if (len < 0)
+ return -1;
+ }
} else {
*out = 0;
}
conn->handshake_state->digest_sent_data = 0;
+ conn->handshake_state->sent_netinfo = 1;
connection_or_write_cell_to_buf(&cell, conn);
return 0;
@@ -2027,7 +2200,7 @@ connection_or_send_certs_cell(or_connection_t *conn)
ssize_t pos;
int server_mode;
- tor_assert(conn->_base.state == OR_CONN_STATE_OR_HANDSHAKING_V3);
+ tor_assert(conn->base_.state == OR_CONN_STATE_OR_HANDSHAKING_V3);
if (! conn->handshake_state)
return -1;
@@ -2074,7 +2247,7 @@ connection_or_send_auth_challenge_cell(or_connection_t *conn)
var_cell_t *cell;
uint8_t *cp;
uint8_t challenge[OR_AUTH_CHALLENGE_LEN];
- tor_assert(conn->_base.state == OR_CONN_STATE_OR_HANDSHAKING_V3);
+ tor_assert(conn->base_.state == OR_CONN_STATE_OR_HANDSHAKING_V3);
if (! conn->handshake_state)
return -1;
@@ -2137,7 +2310,7 @@ connection_or_compute_authenticate_cell_body(or_connection_t *conn,
const tor_cert_t *id_cert=NULL, *link_cert=NULL;
const digests_t *my_digests, *their_digests;
const uint8_t *my_id, *their_id, *client_id, *server_id;
- if (tor_tls_get_my_certs(0, &link_cert, &id_cert))
+ if (tor_tls_get_my_certs(server, &link_cert, &id_cert))
return -1;
my_digests = tor_cert_get_id_digests(id_cert);
their_digests = tor_cert_get_id_digests(conn->handshake_state->id_cert);
@@ -2205,19 +2378,11 @@ connection_or_compute_authenticate_cell_body(or_connection_t *conn,
if (server)
return V3_AUTH_FIXED_PART_LEN; // ptr-out
- /* Time: 8 octets. */
- {
- uint64_t now = time(NULL);
- if ((time_t)now < 0)
- return -1;
- set_uint32(ptr, htonl((uint32_t)(now>>32)));
- set_uint32(ptr+4, htonl((uint32_t)now));
- ptr += 8;
- }
-
- /* Nonce: 16 octets. */
- crypto_rand((char*)ptr, 16);
- ptr += 16;
+ /* 8 octets were reserved for the current time, but we're trying to get out
+ * of the habit of sending time around willynilly. Fortunately, nothing
+ * checks it. That's followed by 16 bytes of nonce. */
+ crypto_rand((char*)ptr, 24);
+ ptr += 24;
tor_assert(ptr - out == V3_AUTH_BODY_LEN);
diff --git a/src/or/connection_or.h b/src/or/connection_or.h
index b78c44492..8d9302893 100644
--- a/src/or/connection_or.h
+++ b/src/or/connection_or.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,8 +9,8 @@
* \brief Header file for connection_or.c.
**/
-#ifndef _TOR_CONNECTION_OR_H
-#define _TOR_CONNECTION_OR_H
+#ifndef TOR_CONNECTION_OR_H
+#define TOR_CONNECTION_OR_H
void connection_or_remove_from_identity_map(or_connection_t *conn);
void connection_or_clear_identity_map(void);
@@ -34,12 +34,19 @@ void connection_or_update_token_buckets(smartlist_t *conns,
void connection_or_connect_failed(or_connection_t *conn,
int reason, const char *msg);
+void connection_or_notify_error(or_connection_t *conn,
+ int reason, const char *msg);
or_connection_t *connection_or_connect(const tor_addr_t *addr, uint16_t port,
- const char *id_digest);
+ const char *id_digest,
+ channel_tls_t *chan);
+
+void connection_or_close_normally(or_connection_t *orconn, int flush);
+void connection_or_close_for_error(or_connection_t *orconn, int flush);
void connection_or_report_broken_states(int severity, int domain);
-int connection_tls_start_handshake(or_connection_t *conn, int receiving);
+MOCK_DECL(int,connection_tls_start_handshake,(or_connection_t *conn,
+ int receiving));
int connection_tls_continue_handshake(or_connection_t *conn);
int connection_init_or_handshake_state(or_connection_t *conn,
@@ -51,13 +58,15 @@ void connection_or_init_conn_from_address(or_connection_t *conn,
int started_here);
int connection_or_client_learned_peer_id(or_connection_t *conn,
const uint8_t *peer_id);
-void connection_or_set_circid_type(or_connection_t *conn,
- crypto_pk_t *identity_rcvd);
+time_t connection_or_client_used(or_connection_t *conn);
+int connection_or_get_num_circuits(or_connection_t *conn);
void or_handshake_state_free(or_handshake_state_t *state);
-void or_handshake_state_record_cell(or_handshake_state_t *state,
+void or_handshake_state_record_cell(or_connection_t *conn,
+ or_handshake_state_t *state,
const cell_t *cell,
int incoming);
-void or_handshake_state_record_var_cell(or_handshake_state_t *state,
+void or_handshake_state_record_var_cell(or_connection_t *conn,
+ or_handshake_state_t *state,
const var_cell_t *cell,
int incoming);
@@ -66,8 +75,6 @@ void connection_or_write_cell_to_buf(const cell_t *cell,
or_connection_t *conn);
void connection_or_write_var_cell_to_buf(const var_cell_t *cell,
or_connection_t *conn);
-int connection_or_send_destroy(circid_t circ_id, or_connection_t *conn,
- int reason);
int connection_or_send_versions(or_connection_t *conn, int v3_plus);
int connection_or_send_netinfo(or_connection_t *conn);
int connection_or_send_certs_cell(or_connection_t *conn);
@@ -80,10 +87,14 @@ int connection_or_send_authenticate_cell(or_connection_t *conn, int type);
int is_or_protocol_version_known(uint16_t version);
-void cell_pack(packed_cell_t *dest, const cell_t *src);
-void var_cell_pack_header(const var_cell_t *cell, char *hdr_out);
+void cell_pack(packed_cell_t *dest, const cell_t *src, int wide_circ_ids);
+int var_cell_pack_header(const var_cell_t *cell, char *hdr_out,
+ int wide_circ_ids);
var_cell_t *var_cell_new(uint16_t payload_len);
void var_cell_free(var_cell_t *cell);
+/** DOCDOC */
+#define MIN_LINK_PROTO_FOR_WIDE_CIRC_IDS 4
+
#endif
diff --git a/src/or/control.c b/src/or/control.c
index 913d18a7f..21504e685 100644..100755
--- a/src/or/control.c
+++ b/src/or/control.c
@@ -1,5 +1,5 @@
/* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -11,11 +11,17 @@
#define CONTROL_PRIVATE
#include "or.h"
+#include "addressmap.h"
#include "buffers.h"
+#include "channel.h"
+#include "channeltls.h"
#include "circuitbuild.h"
#include "circuitlist.h"
+#include "circuitstats.h"
#include "circuituse.h"
+#include "command.h"
#include "config.h"
+#include "confparse.h"
#include "connection.h"
#include "connection_edge.h"
#include "connection_or.h"
@@ -23,6 +29,7 @@
#include "directory.h"
#include "dirserv.h"
#include "dnsserv.h"
+#include "entrynodes.h"
#include "geoip.h"
#include "hibernate.h"
#include "main.h"
@@ -46,46 +53,13 @@
* finished authentication and is accepting commands. */
#define STATE_IS_OPEN(s) ((s) == CONTROL_CONN_STATE_OPEN)
-/* Recognized asynchronous event types. It's okay to expand this list
- * because it is used both as a list of v0 event types, and as indices
- * into the bitfield to determine which controllers want which events.
- */
-#define _EVENT_MIN 0x0001
-#define EVENT_CIRCUIT_STATUS 0x0001
-#define EVENT_STREAM_STATUS 0x0002
-#define EVENT_OR_CONN_STATUS 0x0003
-#define EVENT_BANDWIDTH_USED 0x0004
-#define EVENT_CIRCUIT_STATUS_MINOR 0x0005
-#define EVENT_NEW_DESC 0x0006
-#define EVENT_DEBUG_MSG 0x0007
-#define EVENT_INFO_MSG 0x0008
-#define EVENT_NOTICE_MSG 0x0009
-#define EVENT_WARN_MSG 0x000A
-#define EVENT_ERR_MSG 0x000B
-#define EVENT_ADDRMAP 0x000C
-// #define EVENT_AUTHDIR_NEWDESCS 0x000D
-#define EVENT_DESCCHANGED 0x000E
-// #define EVENT_NS 0x000F
-#define EVENT_STATUS_CLIENT 0x0010
-#define EVENT_STATUS_SERVER 0x0011
-#define EVENT_STATUS_GENERAL 0x0012
-#define EVENT_GUARD 0x0013
-#define EVENT_STREAM_BANDWIDTH_USED 0x0014
-#define EVENT_CLIENTS_SEEN 0x0015
-#define EVENT_NEWCONSENSUS 0x0016
-#define EVENT_BUILDTIMEOUT_SET 0x0017
-#define EVENT_SIGNAL 0x0018
-#define EVENT_CONF_CHANGED 0x0019
-#define _EVENT_MAX 0x0019
-/* If _EVENT_MAX ever hits 0x0020, we need to make the mask wider. */
-
/** Bitfield: The bit 1&lt;&lt;e is set if <b>any</b> open control
* connection is interested in events of type <b>e</b>. We use this
* so that we can decide to skip generating event messages that nobody
* has interest in without having to walk over the global connection
* list to find out.
**/
-typedef uint32_t event_mask_t;
+typedef uint64_t event_mask_t;
/** An event mask of all the events that any controller is interested in
* receiving. */
@@ -97,7 +71,7 @@ static int disable_log_messages = 0;
/** Macro: true if any control connection is interested in events of type
* <b>e</b>. */
#define EVENT_IS_INTERESTING(e) \
- (global_event_mask & (1<<(e)))
+ (!! (global_event_mask & (((uint64_t)1)<<(e))))
/** If we're using cookie-type authentication, how long should our cookies be?
*/
@@ -109,7 +83,7 @@ static int authentication_cookie_is_set = 0;
/** If authentication_cookie_is_set, a secret cookie that we've stored to disk
* and which we're using to authenticate controllers. (If the controller can
* read it off disk, it has permission to connect.) */
-static char authentication_cookie[AUTHENTICATION_COOKIE_LEN];
+static uint8_t *authentication_cookie = NULL;
#define SAFECOOKIE_SERVER_TO_CONTROLLER_CONSTANT \
"Tor safe cookie authentication server-to-controller hash"
@@ -124,15 +98,6 @@ static char authentication_cookie[AUTHENTICATION_COOKIE_LEN];
* of this so we can respond to getinfo status/bootstrap-phase queries. */
static char last_sent_bootstrap_message[BOOTSTRAP_MSG_LEN];
-/** Flag for event_format_t. Indicates that we should use the one standard
- format.
- */
-#define ALL_FORMATS 1
-
-/** Bit field of flags to select how to format a controller event. Recognized
- * flag is ALL_FORMATS. */
-typedef int event_format_t;
-
static void connection_printf_to_buf(control_connection_t *conn,
const char *format, ...)
CHECK_PRINTF(2,3);
@@ -195,7 +160,6 @@ static int write_stream_target_to_buf(entry_connection_t *conn, char *buf,
size_t len);
static void orconn_target_get_name(char *buf, size_t len,
or_connection_t *conn);
-static char *get_cookie_file(void);
/** Given a control event code for a message event, return the corresponding
* log severity. */
@@ -226,6 +190,20 @@ log_severity_to_event(int severity)
}
}
+/** Helper: clear bandwidth counters of all origin circuits. */
+static void
+clear_circ_bw_fields(void)
+{
+ circuit_t *circ;
+ origin_circuit_t *ocirc;
+ TOR_LIST_FOREACH(circ, circuit_get_global_list(), head) {
+ if (!CIRCUIT_IS_ORIGIN(circ))
+ continue;
+ ocirc = TO_ORIGIN_CIRCUIT(circ);
+ ocirc->n_written_circ_bw = ocirc->n_read_circ_bw = 0;
+ }
+}
+
/** Set <b>global_event_mask*</b> to the bitwise OR of each live control
* connection's event_mask field. */
void
@@ -251,8 +229,8 @@ control_update_global_event_mask(void)
* we want to hear...*/
control_adjust_event_log_severity();
- /* ...then, if we've started logging stream bw, clear the appropriate
- * fields. */
+ /* ...then, if we've started logging stream or circ bw, clear the
+ * appropriate fields. */
if (! (old_mask & EVENT_STREAM_BANDWIDTH_USED) &&
(new_mask & EVENT_STREAM_BANDWIDTH_USED)) {
SMARTLIST_FOREACH(conns, connection_t *, conn,
@@ -263,6 +241,10 @@ control_update_global_event_mask(void)
}
});
}
+ if (! (old_mask & EVENT_CIRC_BANDWIDTH_USED) &&
+ (new_mask & EVENT_CIRC_BANDWIDTH_USED)) {
+ clear_circ_bw_fields();
+ }
}
/** Adjust the log severities that result in control_event_logmsg being called
@@ -328,7 +310,7 @@ connection_write_str_to_buf(const char *s, control_connection_t *conn)
* the end. Replace all LF characters sequences with CRLF. Return the number
* of bytes in *<b>out</b>.
*/
-/* static */ size_t
+STATIC size_t
write_escaped_data(const char *data, size_t len, char **out)
{
size_t sz_out = len+8;
@@ -376,7 +358,7 @@ write_escaped_data(const char *data, size_t len, char **out)
* that appears at the start of a line, and replacing all CRLF sequences
* with LF. Return the number of
* bytes in *<b>out</b>. */
-/* static */ size_t
+STATIC size_t
read_escaped_data(const char *data, size_t len, char **out)
{
char *outp;
@@ -586,13 +568,13 @@ send_control_done(control_connection_t *conn)
*
* The EXTENDED_FORMAT and NONEXTENDED_FORMAT flags behave similarly with
* respect to the EXTENDED_EVENTS feature. */
-static void
-send_control_event_string(uint16_t event, event_format_t which,
- const char *msg)
+MOCK_IMPL(STATIC void,
+send_control_event_string,(uint16_t event, event_format_t which,
+ const char *msg))
{
smartlist_t *conns = get_connection_array();
(void)which;
- tor_assert(event >= _EVENT_MIN && event <= _EVENT_MAX);
+ tor_assert(event >= EVENT_MIN_ && event <= EVENT_MAX_);
SMARTLIST_FOREACH_BEGIN(conns, connection_t *, conn) {
if (conn->type == CONN_TYPE_CONTROL &&
@@ -952,6 +934,12 @@ static const struct control_event_t control_event_table[] = {
{ EVENT_BUILDTIMEOUT_SET, "BUILDTIMEOUT_SET" },
{ EVENT_SIGNAL, "SIGNAL" },
{ EVENT_CONF_CHANGED, "CONF_CHANGED"},
+ { EVENT_CONN_BW, "CONN_BW" },
+ { EVENT_CELL_STATS, "CELL_STATS" },
+ { EVENT_TB_EMPTY, "TB_EMPTY" },
+ { EVENT_CIRC_BANDWIDTH_USED, "CIRC_BW" },
+ { EVENT_TRANSPORT_LAUNCHED, "TRANSPORT_LAUNCHED" },
+ { EVENT_HS_DESC, "HS_DESC" },
{ 0, NULL },
};
@@ -1215,9 +1203,10 @@ handle_control_authenticate(control_connection_t *conn, uint32_t len,
connection_mark_for_close(TO_CONN(conn));
return 0;
ok:
- log_info(LD_CONTROL, "Authenticated control connection (%d)", conn->_base.s);
+ log_info(LD_CONTROL, "Authenticated control connection ("TOR_SOCKET_T_FORMAT
+ ")", conn->base_.s);
send_control_done(conn);
- conn->_base.state = CONTROL_CONN_STATE_OPEN;
+ conn->base_.state = CONTROL_CONN_STATE_OPEN;
tor_free(password);
if (sl) { /* clean up */
SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
@@ -1243,6 +1232,27 @@ handle_control_saveconf(control_connection_t *conn, uint32_t len,
return 0;
}
+struct signal_t {
+ int sig;
+ const char *signal_name;
+};
+
+static const struct signal_t signal_table[] = {
+ { SIGHUP, "RELOAD" },
+ { SIGHUP, "HUP" },
+ { SIGINT, "SHUTDOWN" },
+ { SIGUSR1, "DUMP" },
+ { SIGUSR1, "USR1" },
+ { SIGUSR2, "DEBUG" },
+ { SIGUSR2, "USR2" },
+ { SIGTERM, "HALT" },
+ { SIGTERM, "TERM" },
+ { SIGTERM, "INT" },
+ { SIGNEWNYM, "NEWNYM" },
+ { SIGCLEARDNSCACHE, "CLEARDNSCACHE"},
+ { 0, NULL },
+};
+
/** Called when we get a SIGNAL command. React to the provided signal, and
* report success or failure. (If the signal results in a shutdown, success
* may not be reported.) */
@@ -1250,7 +1260,8 @@ static int
handle_control_signal(control_connection_t *conn, uint32_t len,
const char *body)
{
- int sig;
+ int sig = -1;
+ int i;
int n = 0;
char *s;
@@ -1259,27 +1270,19 @@ handle_control_signal(control_connection_t *conn, uint32_t len,
while (body[n] && ! TOR_ISSPACE(body[n]))
++n;
s = tor_strndup(body, n);
- if (!strcasecmp(s, "RELOAD") || !strcasecmp(s, "HUP"))
- sig = SIGHUP;
- else if (!strcasecmp(s, "SHUTDOWN") || !strcasecmp(s, "INT"))
- sig = SIGINT;
- else if (!strcasecmp(s, "DUMP") || !strcasecmp(s, "USR1"))
- sig = SIGUSR1;
- else if (!strcasecmp(s, "DEBUG") || !strcasecmp(s, "USR2"))
- sig = SIGUSR2;
- else if (!strcasecmp(s, "HALT") || !strcasecmp(s, "TERM"))
- sig = SIGTERM;
- else if (!strcasecmp(s, "NEWNYM"))
- sig = SIGNEWNYM;
- else if (!strcasecmp(s, "CLEARDNSCACHE"))
- sig = SIGCLEARDNSCACHE;
- else {
+
+ for (i = 0; signal_table[i].signal_name != NULL; ++i) {
+ if (!strcasecmp(s, signal_table[i].signal_name)) {
+ sig = signal_table[i].sig;
+ break;
+ }
+ }
+
+ if (sig < 0)
connection_printf_to_buf(conn, "552 Unrecognized signal code \"%s\"\r\n",
s);
- sig = -1;
- }
tor_free(s);
- if (sig<0)
+ if (sig < 0)
return 0;
send_control_done(conn);
@@ -1306,7 +1309,7 @@ handle_control_takeownership(control_connection_t *conn, uint32_t len,
log_info(LD_CONTROL, "Control connection %d has taken ownership of this "
"Tor instance.",
- (int)(conn->_base.s));
+ (int)(conn->base_.s));
send_control_done(conn);
return 0;
@@ -1352,10 +1355,13 @@ handle_control_mapaddress(control_connection_t *conn, uint32_t len,
"512-syntax error: invalid address '%s'", to);
log_warn(LD_CONTROL,
"Skipping invalid argument '%s' in MapAddress msg", to);
- } else if (!strcmp(from, ".") || !strcmp(from, "0.0.0.0")) {
+ } else if (!strcmp(from, ".") || !strcmp(from, "0.0.0.0") ||
+ !strcmp(from, "::")) {
+ const char type =
+ !strcmp(from,".") ? RESOLVED_TYPE_HOSTNAME :
+ (!strcmp(from, "0.0.0.0") ? RESOLVED_TYPE_IPV4 : RESOLVED_TYPE_IPV6);
const char *address = addressmap_register_virtual_address(
- !strcmp(from,".") ? RESOLVED_TYPE_HOSTNAME : RESOLVED_TYPE_IPV4,
- tor_strdup(to));
+ type, tor_strdup(to));
if (!address) {
smartlist_add_asprintf(reply,
"451-resource exhausted: skipping '%s'", line);
@@ -1423,7 +1429,7 @@ getinfo_helper_misc(control_connection_t *conn, const char *question,
} else if (!strcmp(question, "config-defaults-file")) {
*answer = tor_strdup(get_torrc_fname(1));
} else if (!strcmp(question, "config-text")) {
- *answer = options_dump(get_options(), 1);
+ *answer = options_dump(get_options(), OPTIONS_DUMP_MINIMAL);
} else if (!strcmp(question, "info/names")) {
*answer = list_getinfo_options();
} else if (!strcmp(question, "dormant")) {
@@ -1440,6 +1446,16 @@ getinfo_helper_misc(control_connection_t *conn, const char *question,
*answer = smartlist_join_strings(event_names, " ", 0, NULL);
smartlist_free(event_names);
+ } else if (!strcmp(question, "signal/names")) {
+ smartlist_t *signal_names = smartlist_new();
+ int j;
+ for (j = 0; signal_table[j].signal_name != NULL; ++j) {
+ smartlist_add(signal_names, (char*)signal_table[j].signal_name);
+ }
+
+ *answer = smartlist_join_strings(signal_names, " ", 0, NULL);
+
+ smartlist_free(signal_names);
} else if (!strcmp(question, "features/names")) {
*answer = tor_strdup("VERBOSE_NAMES EXTENDED_EVENTS");
} else if (!strcmp(question, "address")) {
@@ -1475,7 +1491,7 @@ getinfo_helper_misc(control_connection_t *conn, const char *question,
*answer = tor_strdup("");
#else
int myUid = geteuid();
- struct passwd *myPwEntry = getpwuid(myUid);
+ const struct passwd *myPwEntry = tor_getpwuid(myUid);
if (myPwEntry) {
*answer = tor_strdup(myPwEntry->pw_name);
@@ -1487,6 +1503,9 @@ getinfo_helper_misc(control_connection_t *conn, const char *question,
int max_fds=-1;
set_max_file_descriptors(0, &max_fds);
tor_asprintf(answer, "%d", max_fds);
+ } else if (!strcmp(question, "limits/max-mem-in-queues")) {
+ tor_asprintf(answer, U64_FORMAT,
+ U64_PRINTF_ARG(get_options()->MaxMemInQueues));
} else if (!strcmp(question, "dir-usage")) {
*answer = directory_dump_request_log();
} else if (!strcmp(question, "fingerprint")) {
@@ -1533,12 +1552,13 @@ munge_extrainfo_into_routerinfo(const char *ri_body,
outp += router_sig-ri_body;
for (i=0; i < 2; ++i) {
- const char *kwd = i?"\nwrite-history ":"\nread-history ";
+ const char *kwd = i ? "\nwrite-history " : "\nread-history ";
const char *cp, *eol;
if (!(cp = tor_memstr(ei_body, ei_len, kwd)))
continue;
++cp;
- eol = memchr(cp, '\n', ei_len - (cp-ei_body));
+ if (!(eol = memchr(cp, '\n', ei_len - (cp-ei_body))))
+ continue;
memcpy(outp, cp, eol-cp+1);
outp += eol-cp+1;
}
@@ -1614,10 +1634,13 @@ getinfo_helper_dir(control_connection_t *control_conn,
const char *question, char **answer,
const char **errmsg)
{
- const routerinfo_t *ri;
+ const node_t *node;
+ const routerinfo_t *ri = NULL;
(void) control_conn;
if (!strcmpstart(question, "desc/id/")) {
- ri = router_get_by_hexdigest(question+strlen("desc/id/"));
+ node = node_get_by_hex_id(question+strlen("desc/id/"));
+ if (node)
+ ri = node->ri;
if (ri) {
const char *body = signed_descriptor_get_body(&ri->cache_info);
if (body)
@@ -1626,7 +1649,9 @@ getinfo_helper_dir(control_connection_t *control_conn,
} else if (!strcmpstart(question, "desc/name/")) {
/* XXX023 Setting 'warn_if_unnamed' here is a bit silly -- the
* warning goes to the user, not to the controller. */
- ri = router_get_by_nickname(question+strlen("desc/name/"),1);
+ node = node_get_by_nickname(question+strlen("desc/name/"), 1);
+ if (node)
+ ri = node->ri;
if (ri) {
const char *body = signed_descriptor_get_body(&ri->cache_info);
if (body)
@@ -1672,8 +1697,7 @@ getinfo_helper_dir(control_connection_t *control_conn,
const node_t *node = node_get_by_hex_id(question+strlen("md/id/"));
const microdesc_t *md = NULL;
if (node) md = node->md;
- if (md) {
- tor_assert(md->body);
+ if (md && md->body) {
*answer = tor_strndup(md->body, md->bodylen);
}
} else if (!strcmpstart(question, "md/name/")) {
@@ -1683,13 +1707,13 @@ getinfo_helper_dir(control_connection_t *control_conn,
/* XXXX duplicated code */
const microdesc_t *md = NULL;
if (node) md = node->md;
- if (md) {
- tor_assert(md->body);
+ if (md && md->body) {
*answer = tor_strndup(md->body, md->bodylen);
}
} else if (!strcmpstart(question, "desc-annotations/id/")) {
- ri = router_get_by_hexdigest(question+
- strlen("desc-annotations/id/"));
+ node = node_get_by_hex_id(question+strlen("desc-annotations/id/"));
+ if (node)
+ ri = node->ri;
if (ri) {
const char *annotations =
signed_descriptor_get_annotations(&ri->cache_info);
@@ -1726,39 +1750,7 @@ getinfo_helper_dir(control_connection_t *control_conn,
tor_free(url);
smartlist_free(descs);
} else if (!strcmpstart(question, "dir/status/")) {
- if (directory_permits_controller_requests(get_options())) {
- size_t len=0;
- char *cp;
- smartlist_t *status_list = smartlist_new();
- dirserv_get_networkstatus_v2(status_list,
- question+strlen("dir/status/"));
- SMARTLIST_FOREACH(status_list, cached_dir_t *, d, len += d->dir_len);
- cp = *answer = tor_malloc(len+1);
- SMARTLIST_FOREACH(status_list, cached_dir_t *, d, {
- memcpy(cp, d->dir, d->dir_len);
- cp += d->dir_len;
- });
- *cp = '\0';
- smartlist_free(status_list);
- } else {
- smartlist_t *fp_list = smartlist_new();
- smartlist_t *status_list = smartlist_new();
- dirserv_get_networkstatus_v2_fingerprints(
- fp_list, question+strlen("dir/status/"));
- SMARTLIST_FOREACH(fp_list, const char *, fp, {
- char *s;
- char *fname = networkstatus_get_cache_filename(fp);
- s = read_file_to_str(fname, 0, NULL);
- if (s)
- smartlist_add(status_list, s);
- tor_free(fname);
- });
- SMARTLIST_FOREACH(fp_list, char *, fp, tor_free(fp));
- smartlist_free(fp_list);
- *answer = smartlist_join_strings(status_list, "", 0, NULL);
- SMARTLIST_FOREACH(status_list, char *, s, tor_free(s));
- smartlist_free(status_list);
- }
+ *answer = tor_strdup("");
} else if (!strcmp(question, "dir/status-vote/current/consensus")) { /* v3 */
if (directory_caches_dir_info(get_options())) {
const cached_dir_t *consensus = dirserv_get_consensus("ns");
@@ -1847,11 +1839,11 @@ circuit_describe_status_for_controller(origin_circuit_t *circ)
}
smartlist_add_asprintf(descparts, "PURPOSE=%s",
- circuit_purpose_to_controller_string(circ->_base.purpose));
+ circuit_purpose_to_controller_string(circ->base_.purpose));
{
const char *hs_state =
- circuit_purpose_to_controller_hs_state_string(circ->_base.purpose);
+ circuit_purpose_to_controller_hs_state_string(circ->base_.purpose);
if (hs_state != NULL) {
smartlist_add_asprintf(descparts, "HS_STATE=%s", hs_state);
@@ -1865,7 +1857,7 @@ circuit_describe_status_for_controller(origin_circuit_t *circ)
{
char tbuf[ISO_TIME_USEC_LEN+1];
- format_iso_time_nospace_usec(tbuf, &circ->_base.timestamp_created);
+ format_iso_time_nospace_usec(tbuf, &circ->base_.timestamp_created);
smartlist_add_asprintf(descparts, "TIME_CREATED=%s", tbuf);
}
@@ -1889,7 +1881,7 @@ getinfo_helper_events(control_connection_t *control_conn,
if (!strcmp(question, "circuit-status")) {
circuit_t *circ_;
smartlist_t *status = smartlist_new();
- for (circ_ = _circuit_get_global_list(); circ_; circ_ = circ_->next) {
+ TOR_LIST_FOREACH(circ_, circuit_get_global_list(), head) {
origin_circuit_t *circ;
char *circdesc;
const char *state;
@@ -1897,7 +1889,7 @@ getinfo_helper_events(control_connection_t *control_conn,
continue;
circ = TO_ORIGIN_CIRCUIT(circ_);
- if (circ->_base.state == CIRCUIT_STATE_OPEN)
+ if (circ->base_.state == CIRCUIT_STATE_OPEN)
state = "BUILT";
else if (circ->cpath)
state = "EXTENDED";
@@ -1974,7 +1966,7 @@ getinfo_helper_events(control_connection_t *control_conn,
if (base_conn->type != CONN_TYPE_OR || base_conn->marked_for_close)
continue;
conn = TO_OR_CONN(base_conn);
- if (conn->_base.state == OR_CONN_STATE_OPEN)
+ if (conn->base_.state == OR_CONN_STATE_OPEN)
state = "CONNECTED";
else if (conn->nickname)
state = "LAUNCHED";
@@ -2130,10 +2122,14 @@ static const getinfo_item_t getinfo_items[] = {
PREFIX("config/", config, "Current configuration values."),
DOC("config/names",
"List of configuration options, types, and documentation."),
+ DOC("config/defaults",
+ "List of default values for configuration options. "
+ "See also config/names"),
ITEM("info/names", misc,
"List of GETINFO options, types, and documentation."),
ITEM("events/names", misc,
"Events that the controller can ask for with SETEVENTS."),
+ ITEM("signal/names", misc, "Signal names recognized by the SIGNAL command"),
ITEM("features/names", misc, "What arguments can USEFEATURE take?"),
PREFIX("desc/id/", dir, "Router descriptors by ID."),
PREFIX("desc/name/", dir, "Router descriptors by nickname."),
@@ -2190,6 +2186,7 @@ static const getinfo_item_t getinfo_items[] = {
ITEM("process/user", misc,
"Username under which the tor process is running."),
ITEM("process/descriptor-limit", misc, "File descriptor limit."),
+ ITEM("limits/max-mem-in-queues", misc, "Actual limit on memory in queues"),
ITEM("dir-usage", misc, "Breakdown of bytes transferred over DirPort."),
PREFIX("desc-annotations/id/", dir, "Router annotations by hexdigest."),
PREFIX("dir/server/", dir,"Router descriptors as retrieved from a DirPort."),
@@ -2199,6 +2196,9 @@ static const getinfo_item_t getinfo_items[] = {
"v3 Networkstatus consensus as retrieved from a DirPort."),
ITEM("exit-policy/default", policies,
"The default value appended to the configured exit policy."),
+ ITEM("exit-policy/full", policies, "The entire exit policy of onion router"),
+ ITEM("exit-policy/ipv4", policies, "IPv4 parts of exit policy"),
+ ITEM("exit-policy/ipv6", policies, "IPv6 parts of exit policy"),
PREFIX("ip-to-country/", geoip, "Perform a GEOIP lookup"),
{ NULL, NULL, NULL, 0 }
};
@@ -2497,7 +2497,7 @@ handle_control_extendcircuit(control_connection_t *conn, uint32_t len,
goto done;
}
} else {
- if (circ->_base.state == CIRCUIT_STATE_OPEN) {
+ if (circ->base_.state == CIRCUIT_STATE_OPEN) {
int err_reason = 0;
circuit_set_state(TO_CIRCUIT(circ), CIRCUIT_STATE_BUILDING);
if ((err_reason = circuit_send_next_onion_skin(circ)) < 0) {
@@ -2630,7 +2630,7 @@ handle_control_attachstream(control_connection_t *conn, uint32_t len,
TO_CONN(edge_conn)->state = AP_CONN_STATE_CONTROLLER_WAIT;
}
- if (circ && (circ->_base.state != CIRCUIT_STATE_OPEN)) {
+ if (circ && (circ->base_.state != CIRCUIT_STATE_OPEN)) {
connection_write_str_to_buf(
"551 Can't attach stream to non-open origin circuit\r\n",
conn);
@@ -2895,7 +2895,7 @@ handle_control_resolve(control_connection_t *conn, uint32_t len,
failed = smartlist_new();
SMARTLIST_FOREACH(args, const char *, arg, {
if (!is_keyval_pair(arg)) {
- if (dnsserv_launch_request(arg, is_reverse)<0)
+ if (dnsserv_launch_request(arg, is_reverse, conn)<0)
smartlist_add(failed, (char*)arg);
}
});
@@ -2903,7 +2903,7 @@ handle_control_resolve(control_connection_t *conn, uint32_t len,
send_control_done(conn);
SMARTLIST_FOREACH(failed, const char *, arg, {
control_event_address_mapped(arg, arg, time(NULL),
- "Unable to launch resolve request");
+ "internal", 0);
});
SMARTLIST_FOREACH(args, char *, cp, tor_free(cp));
@@ -2943,7 +2943,7 @@ handle_control_protocolinfo(control_connection_t *conn, uint32_t len,
} else {
const or_options_t *options = get_options();
int cookies = options->CookieAuthentication;
- char *cfile = get_cookie_file();
+ char *cfile = get_controller_cookie_file_name();
char *abs_cfile;
char *esc_cfile;
char *methods;
@@ -3099,6 +3099,8 @@ handle_control_authchallenge(control_connection_t *conn, uint32_t len,
"SERVERNONCE=%s\r\n",
server_hash_encoded,
server_nonce_encoded);
+
+ tor_free(client_nonce);
return 0;
}
@@ -3137,6 +3139,30 @@ handle_control_usefeature(control_connection_t *conn,
return 0;
}
+/** Implementation for the DROPGUARDS command. */
+static int
+handle_control_dropguards(control_connection_t *conn,
+ uint32_t len,
+ const char *body)
+{
+ smartlist_t *args;
+ (void) len; /* body is nul-terminated; it's safe to ignore the length */
+ args = smartlist_new();
+ smartlist_split_string(args, body, " ",
+ SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
+
+ if (smartlist_len(args)) {
+ connection_printf_to_buf(conn, "512 Too many arguments to DROPGUARDS\r\n");
+ } else {
+ remove_all_entry_guards();
+ send_control_done(conn);
+ }
+
+ SMARTLIST_FOREACH(args, char *, cp, tor_free(cp));
+ smartlist_free(args);
+ return 0;
+}
+
/** Called when <b>conn</b> has no more bytes left on its outbuf. */
int
connection_control_finished_flushing(control_connection_t *conn)
@@ -3156,27 +3182,22 @@ connection_control_reached_eof(control_connection_t *conn)
return 0;
}
+static void lost_owning_controller(const char *owner_type,
+ const char *loss_manner)
+ ATTR_NORETURN;
+
/** Shut down this Tor instance in the same way that SIGINT would, but
* with a log message appropriate for the loss of an owning controller. */
static void
lost_owning_controller(const char *owner_type, const char *loss_manner)
{
- int shutdown_slowly = server_mode(get_options());
-
- log_notice(LD_CONTROL, "Owning controller %s has %s -- %s.",
- owner_type, loss_manner,
- shutdown_slowly ? "shutting down" : "exiting now");
+ log_notice(LD_CONTROL, "Owning controller %s has %s -- exiting now.",
+ owner_type, loss_manner);
/* XXXX Perhaps this chunk of code should be a separate function,
* called here and by process_signal(SIGINT). */
-
- if (!shutdown_slowly) {
- tor_cleanup();
- exit(0);
- }
- /* XXXX This will close all listening sockets except control-port
- * listeners. Perhaps we should close those too. */
- hibernate_begin_shutdown();
+ tor_cleanup();
+ exit(0);
}
/** Called when <b>conn</b> is being freed. */
@@ -3198,7 +3219,7 @@ connection_control_closed(control_connection_t *conn)
static int
is_valid_initial_command(control_connection_t *conn, const char *cmd)
{
- if (conn->_base.state == CONTROL_CONN_STATE_OPEN)
+ if (conn->base_.state == CONTROL_CONN_STATE_OPEN)
return 1;
if (!strcasecmp(cmd, "PROTOCOLINFO"))
return (!conn->have_sent_protocolinfo &&
@@ -3243,8 +3264,8 @@ connection_control_process_inbuf(control_connection_t *conn)
char *args;
tor_assert(conn);
- tor_assert(conn->_base.state == CONTROL_CONN_STATE_OPEN ||
- conn->_base.state == CONTROL_CONN_STATE_NEEDAUTH);
+ tor_assert(conn->base_.state == CONTROL_CONN_STATE_OPEN ||
+ conn->base_.state == CONTROL_CONN_STATE_NEEDAUTH);
if (!conn->incoming_cmd) {
conn->incoming_cmd = tor_malloc(1024);
@@ -3252,7 +3273,7 @@ connection_control_process_inbuf(control_connection_t *conn)
conn->incoming_cmd_cur_len = 0;
}
- if (conn->_base.state == CONTROL_CONN_STATE_NEEDAUTH &&
+ if (conn->base_.state == CONTROL_CONN_STATE_NEEDAUTH &&
peek_connection_has_control0_command(TO_CONN(conn))) {
/* Detect v0 commands and send a "no more v0" message. */
size_t body_len;
@@ -3351,7 +3372,7 @@ connection_control_process_inbuf(control_connection_t *conn)
return 0;
}
- if (conn->_base.state == CONTROL_CONN_STATE_NEEDAUTH &&
+ if (conn->base_.state == CONTROL_CONN_STATE_NEEDAUTH &&
!is_valid_initial_command(conn, conn->incoming_cmd)) {
connection_write_str_to_buf("514 Authentication required.\r\n", conn);
connection_mark_for_close(TO_CONN(conn));
@@ -3436,6 +3457,9 @@ connection_control_process_inbuf(control_connection_t *conn)
} else if (!strcasecmp(conn->incoming_cmd, "AUTHCHALLENGE")) {
if (handle_control_authchallenge(conn, cmd_data_len, args))
return -1;
+ } else if (!strcasecmp(conn->incoming_cmd, "DROPGUARDS")) {
+ if (handle_control_dropguards(conn, cmd_data_len, args))
+ return -1;
} else {
connection_printf_to_buf(conn, "510 Unrecognized command \"%s\"\r\n",
conn->incoming_cmd);
@@ -3538,9 +3562,9 @@ control_event_circuit_status_minor(origin_circuit_t *circ,
/* event_tail can currently be up to 130 chars long */
const char *hs_state_str =
circuit_purpose_to_controller_hs_state_string(purpose);
- const struct timeval *old_timestamp_created = tv;
+ const struct timeval *old_timestamp_began = tv;
char tbuf[ISO_TIME_USEC_LEN+1];
- format_iso_time_nospace_usec(tbuf, old_timestamp_created);
+ format_iso_time_nospace_usec(tbuf, old_timestamp_began);
tor_snprintf(event_tail, sizeof(event_tail),
" OLD_PURPOSE=%s%s%s OLD_TIME_CREATED=%s",
@@ -3696,9 +3720,22 @@ control_event_stream_status(entry_connection_t *conn, stream_status_event_t tp,
}
}
- if (tp == STREAM_EVENT_NEW) {
- tor_snprintf(addrport_buf,sizeof(addrport_buf), " SOURCE_ADDR=%s:%d",
- ENTRY_TO_CONN(conn)->address, ENTRY_TO_CONN(conn)->port);
+ if (tp == STREAM_EVENT_NEW || tp == STREAM_EVENT_NEW_RESOLVE) {
+ /*
+ * When the control conn is an AF_UNIX socket and we have no address,
+ * it gets set to "(Tor_internal)"; see dnsserv_launch_request() in
+ * dnsserv.c.
+ */
+ if (strcmp(ENTRY_TO_CONN(conn)->address, "(Tor_internal)") != 0) {
+ tor_snprintf(addrport_buf,sizeof(addrport_buf), " SOURCE_ADDR=%s:%d",
+ ENTRY_TO_CONN(conn)->address, ENTRY_TO_CONN(conn)->port);
+ } else {
+ /*
+ * else leave it blank so control on AF_UNIX doesn't need to make
+ * something up.
+ */
+ addrport_buf[0] = '\0';
+ }
} else {
addrport_buf[0] = '\0';
}
@@ -3706,11 +3743,7 @@ control_event_stream_status(entry_connection_t *conn, stream_status_event_t tp,
if (tp == STREAM_EVENT_NEW_RESOLVE) {
purpose = " PURPOSE=DNS_REQUEST";
} else if (tp == STREAM_EVENT_NEW) {
- if (ENTRY_TO_EDGE_CONN(conn)->is_dns_request ||
- (conn->socks_request &&
- SOCKS_COMMAND_IS_RESOLVE(conn->socks_request->command)))
- purpose = " PURPOSE=DNS_REQUEST";
- else if (conn->use_begindir) {
+ if (conn->use_begindir) {
connection_t *linked = ENTRY_TO_CONN(conn)->linked_conn;
int linked_dir_purpose = -1;
if (linked && linked->type == CONN_TYPE_DIR)
@@ -3755,7 +3788,7 @@ orconn_target_get_name(char *name, size_t len, or_connection_t *conn)
DIGEST_LEN);
} else {
tor_snprintf(name, len, "%s:%d",
- conn->_base.address, conn->_base.port);
+ conn->base_.address, conn->base_.port);
}
}
@@ -3787,20 +3820,24 @@ control_event_or_conn_status(or_connection_t *conn, or_conn_status_event_t tp,
log_warn(LD_BUG, "Unrecognized status code %d", (int)tp);
return 0;
}
- ncircs = circuit_count_pending_on_or_conn(conn);
- ncircs += conn->n_circuits;
+ if (conn->chan) {
+ ncircs = circuit_count_pending_on_channel(TLS_CHAN_TO_BASE(conn->chan));
+ } else {
+ ncircs = 0;
+ }
+ ncircs += connection_or_get_num_circuits(conn);
if (ncircs && (tp == OR_CONN_EVENT_FAILED || tp == OR_CONN_EVENT_CLOSED)) {
- tor_snprintf(ncircs_buf, sizeof(ncircs_buf), "%sNCIRCS=%d",
- reason ? " " : "", ncircs);
+ tor_snprintf(ncircs_buf, sizeof(ncircs_buf), " NCIRCS=%d", ncircs);
}
orconn_target_get_name(name, sizeof(name), conn);
send_control_event(EVENT_OR_CONN_STATUS, ALL_FORMATS,
- "650 ORCONN %s %s %s%s%s\r\n",
+ "650 ORCONN %s %s%s%s%s ID="U64_FORMAT"\r\n",
name, status,
- reason ? "REASON=" : "",
+ reason ? " REASON=" : "",
orconn_end_reason_to_control_string(reason),
- ncircs_buf);
+ ncircs_buf,
+ U64_PRINTF_ARG(conn->base_.global_identifier));
return 0;
}
@@ -3811,16 +3848,24 @@ control_event_or_conn_status(or_connection_t *conn, or_conn_status_event_t tp,
int
control_event_stream_bandwidth(edge_connection_t *edge_conn)
{
+ circuit_t *circ;
+ origin_circuit_t *ocirc;
if (EVENT_IS_INTERESTING(EVENT_STREAM_BANDWIDTH_USED)) {
if (!edge_conn->n_read && !edge_conn->n_written)
return 0;
send_control_event(EVENT_STREAM_BANDWIDTH_USED, ALL_FORMATS,
"650 STREAM_BW "U64_FORMAT" %lu %lu\r\n",
- U64_PRINTF_ARG(edge_conn->_base.global_identifier),
+ U64_PRINTF_ARG(edge_conn->base_.global_identifier),
(unsigned long)edge_conn->n_read,
(unsigned long)edge_conn->n_written);
+ circ = circuit_get_by_edge_conn(edge_conn);
+ if (circ && CIRCUIT_IS_ORIGIN(circ)) {
+ ocirc = TO_ORIGIN_CIRCUIT(circ);
+ ocirc->n_read_circ_bw += edge_conn->n_read;
+ ocirc->n_written_circ_bw += edge_conn->n_written;
+ }
edge_conn->n_written = edge_conn->n_read = 0;
}
@@ -3846,7 +3891,7 @@ control_event_stream_bandwidth_used(void)
send_control_event(EVENT_STREAM_BANDWIDTH_USED, ALL_FORMATS,
"650 STREAM_BW "U64_FORMAT" %lu %lu\r\n",
- U64_PRINTF_ARG(edge_conn->_base.global_identifier),
+ U64_PRINTF_ARG(edge_conn->base_.global_identifier),
(unsigned long)edge_conn->n_read,
(unsigned long)edge_conn->n_written);
@@ -3858,6 +3903,235 @@ control_event_stream_bandwidth_used(void)
return 0;
}
+/** A second or more has elapsed: tell any interested control connections
+ * how much bandwidth origin circuits have used. */
+int
+control_event_circ_bandwidth_used(void)
+{
+ circuit_t *circ;
+ origin_circuit_t *ocirc;
+ if (!EVENT_IS_INTERESTING(EVENT_CIRC_BANDWIDTH_USED))
+ return 0;
+
+ TOR_LIST_FOREACH(circ, circuit_get_global_list(), head) {
+ if (!CIRCUIT_IS_ORIGIN(circ))
+ continue;
+ ocirc = TO_ORIGIN_CIRCUIT(circ);
+ if (!ocirc->n_read_circ_bw && !ocirc->n_written_circ_bw)
+ continue;
+ send_control_event(EVENT_CIRC_BANDWIDTH_USED, ALL_FORMATS,
+ "650 CIRC_BW ID=%d READ=%lu WRITTEN=%lu\r\n",
+ ocirc->global_identifier,
+ (unsigned long)ocirc->n_read_circ_bw,
+ (unsigned long)ocirc->n_written_circ_bw);
+ ocirc->n_written_circ_bw = ocirc->n_read_circ_bw = 0;
+ }
+
+ return 0;
+}
+
+/** Print out CONN_BW event for a single OR/DIR/EXIT <b>conn</b> and reset
+ * bandwidth counters. */
+int
+control_event_conn_bandwidth(connection_t *conn)
+{
+ const char *conn_type_str;
+ if (!get_options()->TestingEnableConnBwEvent ||
+ !EVENT_IS_INTERESTING(EVENT_CONN_BW))
+ return 0;
+ if (!conn->n_read_conn_bw && !conn->n_written_conn_bw)
+ return 0;
+ switch (conn->type) {
+ case CONN_TYPE_OR:
+ conn_type_str = "OR";
+ break;
+ case CONN_TYPE_DIR:
+ conn_type_str = "DIR";
+ break;
+ case CONN_TYPE_EXIT:
+ conn_type_str = "EXIT";
+ break;
+ default:
+ return 0;
+ }
+ send_control_event(EVENT_CONN_BW, ALL_FORMATS,
+ "650 CONN_BW ID="U64_FORMAT" TYPE=%s "
+ "READ=%lu WRITTEN=%lu\r\n",
+ U64_PRINTF_ARG(conn->global_identifier),
+ conn_type_str,
+ (unsigned long)conn->n_read_conn_bw,
+ (unsigned long)conn->n_written_conn_bw);
+ conn->n_written_conn_bw = conn->n_read_conn_bw = 0;
+ return 0;
+}
+
+/** A second or more has elapsed: tell any interested control
+ * connections how much bandwidth connections have used. */
+int
+control_event_conn_bandwidth_used(void)
+{
+ if (get_options()->TestingEnableConnBwEvent &&
+ EVENT_IS_INTERESTING(EVENT_CONN_BW)) {
+ SMARTLIST_FOREACH(get_connection_array(), connection_t *, conn,
+ control_event_conn_bandwidth(conn));
+ }
+ return 0;
+}
+
+/** Helper: iterate over cell statistics of <b>circ</b> and sum up added
+ * cells, removed cells, and waiting times by cell command and direction.
+ * Store results in <b>cell_stats</b>. Free cell statistics of the
+ * circuit afterwards. */
+void
+sum_up_cell_stats_by_command(circuit_t *circ, cell_stats_t *cell_stats)
+{
+ memset(cell_stats, 0, sizeof(cell_stats_t));
+ SMARTLIST_FOREACH_BEGIN(circ->testing_cell_stats,
+ testing_cell_stats_entry_t *, ent) {
+ tor_assert(ent->command <= CELL_COMMAND_MAX_);
+ if (!ent->removed && !ent->exitward) {
+ cell_stats->added_cells_appward[ent->command] += 1;
+ } else if (!ent->removed && ent->exitward) {
+ cell_stats->added_cells_exitward[ent->command] += 1;
+ } else if (!ent->exitward) {
+ cell_stats->removed_cells_appward[ent->command] += 1;
+ cell_stats->total_time_appward[ent->command] += ent->waiting_time * 10;
+ } else {
+ cell_stats->removed_cells_exitward[ent->command] += 1;
+ cell_stats->total_time_exitward[ent->command] += ent->waiting_time * 10;
+ }
+ tor_free(ent);
+ } SMARTLIST_FOREACH_END(ent);
+ smartlist_free(circ->testing_cell_stats);
+ circ->testing_cell_stats = NULL;
+}
+
+/** Helper: append a cell statistics string to <code>event_parts</code>,
+ * prefixed with <code>key</code>=. Statistics consist of comma-separated
+ * key:value pairs with lower-case command strings as keys and cell
+ * numbers or total waiting times as values. A key:value pair is included
+ * if the entry in <code>include_if_non_zero</code> is not zero, but with
+ * the (possibly zero) entry from <code>number_to_include</code>. Both
+ * arrays are expected to have a length of CELL_COMMAND_MAX_ + 1. If no
+ * entry in <code>include_if_non_zero</code> is positive, no string will
+ * be added to <code>event_parts</code>. */
+void
+append_cell_stats_by_command(smartlist_t *event_parts, const char *key,
+ const uint64_t *include_if_non_zero,
+ const uint64_t *number_to_include)
+{
+ smartlist_t *key_value_strings = smartlist_new();
+ int i;
+ for (i = 0; i <= CELL_COMMAND_MAX_; i++) {
+ if (include_if_non_zero[i] > 0) {
+ smartlist_add_asprintf(key_value_strings, "%s:"U64_FORMAT,
+ cell_command_to_string(i),
+ U64_PRINTF_ARG(number_to_include[i]));
+ }
+ }
+ if (smartlist_len(key_value_strings) > 0) {
+ char *joined = smartlist_join_strings(key_value_strings, ",", 0, NULL);
+ smartlist_add_asprintf(event_parts, "%s=%s", key, joined);
+ SMARTLIST_FOREACH(key_value_strings, char *, cp, tor_free(cp));
+ tor_free(joined);
+ }
+ smartlist_free(key_value_strings);
+}
+
+/** Helper: format <b>cell_stats</b> for <b>circ</b> for inclusion in a
+ * CELL_STATS event and write result string to <b>event_string</b>. */
+void
+format_cell_stats(char **event_string, circuit_t *circ,
+ cell_stats_t *cell_stats)
+{
+ smartlist_t *event_parts = smartlist_new();
+ if (CIRCUIT_IS_ORIGIN(circ)) {
+ origin_circuit_t *ocirc = TO_ORIGIN_CIRCUIT(circ);
+ smartlist_add_asprintf(event_parts, "ID=%lu",
+ (unsigned long)ocirc->global_identifier);
+ } else if (TO_OR_CIRCUIT(circ)->p_chan) {
+ or_circuit_t *or_circ = TO_OR_CIRCUIT(circ);
+ smartlist_add_asprintf(event_parts, "InboundQueue=%lu",
+ (unsigned long)or_circ->p_circ_id);
+ smartlist_add_asprintf(event_parts, "InboundConn="U64_FORMAT,
+ U64_PRINTF_ARG(or_circ->p_chan->global_identifier));
+ append_cell_stats_by_command(event_parts, "InboundAdded",
+ cell_stats->added_cells_appward,
+ cell_stats->added_cells_appward);
+ append_cell_stats_by_command(event_parts, "InboundRemoved",
+ cell_stats->removed_cells_appward,
+ cell_stats->removed_cells_appward);
+ append_cell_stats_by_command(event_parts, "InboundTime",
+ cell_stats->removed_cells_appward,
+ cell_stats->total_time_appward);
+ }
+ if (circ->n_chan) {
+ smartlist_add_asprintf(event_parts, "OutboundQueue=%lu",
+ (unsigned long)circ->n_circ_id);
+ smartlist_add_asprintf(event_parts, "OutboundConn="U64_FORMAT,
+ U64_PRINTF_ARG(circ->n_chan->global_identifier));
+ append_cell_stats_by_command(event_parts, "OutboundAdded",
+ cell_stats->added_cells_exitward,
+ cell_stats->added_cells_exitward);
+ append_cell_stats_by_command(event_parts, "OutboundRemoved",
+ cell_stats->removed_cells_exitward,
+ cell_stats->removed_cells_exitward);
+ append_cell_stats_by_command(event_parts, "OutboundTime",
+ cell_stats->removed_cells_exitward,
+ cell_stats->total_time_exitward);
+ }
+ *event_string = smartlist_join_strings(event_parts, " ", 0, NULL);
+ SMARTLIST_FOREACH(event_parts, char *, cp, tor_free(cp));
+ smartlist_free(event_parts);
+}
+
+/** A second or more has elapsed: tell any interested control connection
+ * how many cells have been processed for a given circuit. */
+int
+control_event_circuit_cell_stats(void)
+{
+ circuit_t *circ;
+ cell_stats_t *cell_stats;
+ char *event_string;
+ if (!get_options()->TestingEnableCellStatsEvent ||
+ !EVENT_IS_INTERESTING(EVENT_CELL_STATS))
+ return 0;
+ cell_stats = tor_malloc(sizeof(cell_stats_t));;
+ TOR_LIST_FOREACH(circ, circuit_get_global_list(), head) {
+ if (!circ->testing_cell_stats)
+ continue;
+ sum_up_cell_stats_by_command(circ, cell_stats);
+ format_cell_stats(&event_string, circ, cell_stats);
+ send_control_event(EVENT_CELL_STATS, ALL_FORMATS,
+ "650 CELL_STATS %s\r\n", event_string);
+ tor_free(event_string);
+ }
+ tor_free(cell_stats);
+ return 0;
+}
+
+/** Tokens in <b>bucket</b> have been refilled: the read bucket was empty
+ * for <b>read_empty_time</b> millis, the write bucket was empty for
+ * <b>write_empty_time</b> millis, and buckets were last refilled
+ * <b>milliseconds_elapsed</b> millis ago. Only emit TB_EMPTY event if
+ * either read or write bucket have been empty before. */
+int
+control_event_tb_empty(const char *bucket, uint32_t read_empty_time,
+ uint32_t write_empty_time,
+ int milliseconds_elapsed)
+{
+ if (get_options()->TestingEnableTbEmptyEvent &&
+ EVENT_IS_INTERESTING(EVENT_TB_EMPTY) &&
+ (read_empty_time > 0 || write_empty_time > 0)) {
+ send_control_event(EVENT_TB_EMPTY, ALL_FORMATS,
+ "650 TB_EMPTY %s READ=%d WRITTEN=%d "
+ "LAST=%d\r\n",
+ bucket, read_empty_time, write_empty_time,
+ milliseconds_elapsed);
+ }
+ return 0;
+}
+
/** A second or more has elapsed: tell any interested control
* connections how much bandwidth we used. */
int
@@ -3978,15 +4252,17 @@ control_event_descriptors_changed(smartlist_t *routers)
*/
int
control_event_address_mapped(const char *from, const char *to, time_t expires,
- const char *error)
+ const char *error, const int cached)
{
if (!EVENT_IS_INTERESTING(EVENT_ADDRMAP))
return 0;
if (expires < 3 || expires == TIME_MAX)
send_control_event(EVENT_ADDRMAP, ALL_FORMATS,
- "650 ADDRMAP %s %s NEVER %s\r\n", from, to,
- error?error:"");
+ "650 ADDRMAP %s %s NEVER %s%s"
+ "CACHED=\"%s\"\r\n",
+ from, to, error?error:"", error?" ":"",
+ cached?"YES":"NO");
else {
char buf[ISO_TIME_LEN+1];
char buf2[ISO_TIME_LEN+1];
@@ -3994,10 +4270,10 @@ control_event_address_mapped(const char *from, const char *to, time_t expires,
format_iso_time(buf2,expires);
send_control_event(EVENT_ADDRMAP, ALL_FORMATS,
"650 ADDRMAP %s %s \"%s\""
- " %s%sEXPIRES=\"%s\"\r\n",
+ " %s%sEXPIRES=\"%s\" CACHED=\"%s\"\r\n",
from, to, buf,
error?error:"", error?" ":"",
- buf2);
+ buf2, cached?"YES":"NO");
}
return 0;
@@ -4103,32 +4379,26 @@ control_event_newconsensus(const networkstatus_t *consensus)
/** Called when we compute a new circuitbuildtimeout */
int
-control_event_buildtimeout_set(const circuit_build_times_t *cbt,
- buildtimeout_set_event_t type)
+control_event_buildtimeout_set(buildtimeout_set_event_t type,
+ const char *args)
{
const char *type_string = NULL;
- double qnt;
if (!control_event_is_interesting(EVENT_BUILDTIMEOUT_SET))
return 0;
- qnt = circuit_build_times_quantile_cutoff();
-
switch (type) {
case BUILDTIMEOUT_SET_EVENT_COMPUTED:
type_string = "COMPUTED";
break;
case BUILDTIMEOUT_SET_EVENT_RESET:
type_string = "RESET";
- qnt = 1.0;
break;
case BUILDTIMEOUT_SET_EVENT_SUSPENDED:
type_string = "SUSPENDED";
- qnt = 1.0;
break;
case BUILDTIMEOUT_SET_EVENT_DISCARD:
type_string = "DISCARD";
- qnt = 1.0;
break;
case BUILDTIMEOUT_SET_EVENT_RESUME:
type_string = "RESUME";
@@ -4139,15 +4409,8 @@ control_event_buildtimeout_set(const circuit_build_times_t *cbt,
}
send_control_event(EVENT_BUILDTIMEOUT_SET, ALL_FORMATS,
- "650 BUILDTIMEOUT_SET %s TOTAL_TIMES=%lu "
- "TIMEOUT_MS=%lu XM=%lu ALPHA=%f CUTOFF_QUANTILE=%f "
- "TIMEOUT_RATE=%f CLOSE_MS=%lu CLOSE_RATE=%f\r\n",
- type_string, (unsigned long)cbt->total_build_times,
- (unsigned long)cbt->timeout_ms,
- (unsigned long)cbt->Xm, cbt->alpha, qnt,
- circuit_build_times_timeout_rate(cbt),
- (unsigned long)cbt->close_ms,
- circuit_build_times_close_rate(cbt));
+ "650 BUILDTIMEOUT_SET %s %s\r\n",
+ type_string, args);
return 0;
}
@@ -4345,7 +4608,7 @@ control_event_guard(const char *nickname, const char *digest,
* a smartlist_t containing (key, value, ...) pairs in sequence.
* <b>value</b> can be NULL. */
int
-control_event_conf_changed(smartlist_t *elements)
+control_event_conf_changed(const smartlist_t *elements)
{
int i;
char *result;
@@ -4375,8 +4638,8 @@ control_event_conf_changed(smartlist_t *elements)
/** Helper: Return a newly allocated string containing a path to the
* file where we store our authentication cookie. */
-static char *
-get_cookie_file(void)
+char *
+get_controller_cookie_file_name(void)
{
const or_options_t *options = get_options();
if (options->CookieAuthFile && strlen(options->CookieAuthFile)) {
@@ -4386,44 +4649,27 @@ get_cookie_file(void)
}
}
-/** Choose a random authentication cookie and write it to disk.
- * Anybody who can read the cookie from disk will be considered
- * authorized to use the control connection. Return -1 if we can't
- * write the file, or 0 on success. */
+/* Initialize the cookie-based authentication system of the
+ * ControlPort. If <b>enabled</b> is 0, then disable the cookie
+ * authentication system. */
int
-init_cookie_authentication(int enabled)
+init_control_cookie_authentication(int enabled)
{
- char *fname;
+ char *fname = NULL;
+ int retval;
+
if (!enabled) {
authentication_cookie_is_set = 0;
return 0;
}
- /* We don't want to generate a new cookie every time we call
- * options_act(). One should be enough. */
- if (authentication_cookie_is_set)
- return 0; /* all set */
-
- fname = get_cookie_file();
- crypto_rand(authentication_cookie, AUTHENTICATION_COOKIE_LEN);
- authentication_cookie_is_set = 1;
- if (write_bytes_to_file(fname, authentication_cookie,
- AUTHENTICATION_COOKIE_LEN, 1)) {
- log_warn(LD_FS,"Error writing authentication cookie to %s.",
- escaped(fname));
- tor_free(fname);
- return -1;
- }
-#ifndef _WIN32
- if (get_options()->CookieAuthFileGroupReadable) {
- if (chmod(fname, 0640)) {
- log_warn(LD_FS,"Unable to make %s group-readable.", escaped(fname));
- }
- }
-#endif
-
+ fname = get_controller_cookie_file_name();
+ retval = init_cookie_authentication(fname, "", /* no header */
+ AUTHENTICATION_COOKIE_LEN,
+ &authentication_cookie,
+ &authentication_cookie_is_set);
tor_free(fname);
- return 0;
+ return retval;
}
/** A copy of the process specifier of Tor's owning controller, or
@@ -4434,6 +4680,8 @@ static char *owning_controller_process_spec = NULL;
* if this Tor instance is not currently owned by a process. */
static tor_process_monitor_t *owning_controller_process_monitor = NULL;
+static void owning_controller_procmon_cb(void *unused) ATTR_NORETURN;
+
/** Process-termination monitor callback for Tor's owning controller
* process. */
static void
@@ -4577,16 +4825,28 @@ bootstrap_status_to_string(bootstrap_status_t s, const char **tag,
* Tor initializes. */
static int bootstrap_percent = BOOTSTRAP_STATUS_UNDEF;
+/** As bootstrap_percent, but holds the bootstrapping level at which we last
+ * logged a NOTICE-level message. We use this, plus BOOTSTRAP_PCT_INCREMENT,
+ * to avoid flooding the log with a new message every time we get a few more
+ * microdescriptors */
+static int notice_bootstrap_percent = 0;
+
/** How many problems have we had getting to the next bootstrapping phase?
* These include failure to establish a connection to a Tor relay,
* failures to finish the TLS handshake, failures to validate the
* consensus document, etc. */
static int bootstrap_problems = 0;
-/* We only tell the controller once we've hit a threshold of problems
+/** We only tell the controller once we've hit a threshold of problems
* for the current phase. */
#define BOOTSTRAP_PROBLEM_THRESHOLD 10
+/** When our bootstrapping progress level changes, but our bootstrapping
+ * status has not advanced, we only log at NOTICE when we have made at least
+ * this much progress.
+ */
+#define BOOTSTRAP_PCT_INCREMENT 5
+
/** Called when Tor has made progress at bootstrapping its directory
* information and initial circuits.
*
@@ -4606,7 +4866,7 @@ control_event_bootstrap(bootstrap_status_t status, int progress)
* can't distinguish what the connection is going to be for. */
if (status == BOOTSTRAP_STATUS_HANDSHAKE) {
if (bootstrap_percent < BOOTSTRAP_STATUS_CONN_OR) {
- status = BOOTSTRAP_STATUS_HANDSHAKE_DIR;
+ status = BOOTSTRAP_STATUS_HANDSHAKE_DIR;
} else {
status = BOOTSTRAP_STATUS_HANDSHAKE_OR;
}
@@ -4614,9 +4874,19 @@ control_event_bootstrap(bootstrap_status_t status, int progress)
if (status > bootstrap_percent ||
(progress && progress > bootstrap_percent)) {
+ int loglevel = LOG_NOTICE;
bootstrap_status_to_string(status, &tag, &summary);
- log(status ? LOG_NOTICE : LOG_INFO, LD_CONTROL,
- "Bootstrapped %d%%: %s.", progress ? progress : status, summary);
+
+ if (status <= bootstrap_percent &&
+ (progress < notice_bootstrap_percent + BOOTSTRAP_PCT_INCREMENT)) {
+ /* We log the message at info if the status hasn't advanced, and if less
+ * than BOOTSTRAP_PCT_INCREMENT progress has been made.
+ */
+ loglevel = LOG_INFO;
+ }
+
+ tor_log(loglevel, LD_CONTROL,
+ "Bootstrapped %d%%: %s", progress ? progress : status, summary);
tor_snprintf(buf, sizeof(buf),
"BOOTSTRAP PROGRESS=%d TAG=%s SUMMARY=\"%s\"",
progress ? progress : status, tag, summary);
@@ -4632,15 +4902,22 @@ control_event_bootstrap(bootstrap_status_t status, int progress)
bootstrap_percent = progress;
bootstrap_problems = 0; /* Progress! Reset our problem counter. */
}
+ if (loglevel == LOG_NOTICE &&
+ bootstrap_percent > notice_bootstrap_percent) {
+ /* Remember that we gave a notice at this level. */
+ notice_bootstrap_percent = bootstrap_percent;
+ }
}
}
/** Called when Tor has failed to make bootstrapping progress in a way
* that indicates a problem. <b>warn</b> gives a hint as to why, and
- * <b>reason</b> provides an "or_conn_end_reason" tag.
+ * <b>reason</b> provides an "or_conn_end_reason" tag. <b>or_conn</b>
+ * is the connection that caused this problem.
*/
-void
-control_event_bootstrap_problem(const char *warn, int reason)
+MOCK_IMPL(void,
+ control_event_bootstrap_problem, (const char *warn, int reason,
+ or_connection_t *or_conn))
{
int status = bootstrap_percent;
const char *tag, *summary;
@@ -4651,6 +4928,11 @@ control_event_bootstrap_problem(const char *warn, int reason)
/* bootstrap_percent must not be in "undefined" state here. */
tor_assert(status >= 0);
+ if (or_conn->have_noted_bootstrap_problem)
+ return;
+
+ or_conn->have_noted_bootstrap_problem = 1;
+
if (bootstrap_percent == 100)
return; /* already bootstrapped; nothing to be done here. */
@@ -4662,11 +4944,15 @@ control_event_bootstrap_problem(const char *warn, int reason)
if (reason == END_OR_CONN_REASON_NO_ROUTE)
recommendation = "warn";
- if (get_options()->UseBridges &&
- !any_bridge_descriptors_known() &&
- !any_pending_bridge_descriptor_fetches())
+ /* If we are using bridges and all our OR connections are now
+ closed, it means that we totally failed to connect to our
+ bridges. Throw a warning. */
+ if (get_options()->UseBridges && !any_other_active_or_conns(or_conn))
recommendation = "warn";
+ if (we_are_hibernating())
+ recommendation = "ignore";
+
while (status>=0 && bootstrap_status_to_string(status, &tag, &summary) < 0)
status--; /* find a recognized status string based on current progress */
status = bootstrap_percent; /* set status back to the actual number */
@@ -4704,3 +4990,159 @@ control_event_clients_seen(const char *controller_str)
"650 CLIENTS_SEEN %s\r\n", controller_str);
}
+/** A new pluggable transport called <b>transport_name</b> was
+ * launched on <b>addr</b>:<b>port</b>. <b>mode</b> is either
+ * "server" or "client" depending on the mode of the pluggable
+ * transport.
+ * "650" SP "TRANSPORT_LAUNCHED" SP Mode SP Name SP Address SP Port
+ */
+void
+control_event_transport_launched(const char *mode, const char *transport_name,
+ tor_addr_t *addr, uint16_t port)
+{
+ send_control_event(EVENT_TRANSPORT_LAUNCHED, ALL_FORMATS,
+ "650 TRANSPORT_LAUNCHED %s %s %s %u\r\n",
+ mode, transport_name, fmt_addr(addr), port);
+}
+
+/** Convert rendezvous auth type to string for HS_DESC control events
+ */
+const char *
+rend_auth_type_to_string(rend_auth_type_t auth_type)
+{
+ const char *str;
+
+ switch (auth_type) {
+ case REND_NO_AUTH:
+ str = "NO_AUTH";
+ break;
+ case REND_BASIC_AUTH:
+ str = "BASIC_AUTH";
+ break;
+ case REND_STEALTH_AUTH:
+ str = "STEALTH_AUTH";
+ break;
+ default:
+ str = "UNKNOWN";
+ }
+
+ return str;
+}
+
+/** Return a longname the node whose identity is <b>id_digest</b>. If
+ * node_get_by_id() returns NULL, base 16 encoding of <b>id_digest</b> is
+ * returned instead.
+ *
+ * This function is not thread-safe. Each call to this function invalidates
+ * previous values returned by this function.
+ */
+MOCK_IMPL(const char *,
+node_describe_longname_by_id,(const char *id_digest))
+{
+ static char longname[MAX_VERBOSE_NICKNAME_LEN+1];
+ node_get_verbose_nickname_by_id(id_digest, longname);
+ return longname;
+}
+
+/** send HS_DESC requested event.
+ *
+ * <b>rend_query</b> is used to fetch requested onion address and auth type.
+ * <b>hs_dir</b> is the description of contacting hs directory.
+ * <b>desc_id_base32</b> is the ID of requested hs descriptor.
+ */
+void
+control_event_hs_descriptor_requested(const rend_data_t *rend_query,
+ const char *id_digest,
+ const char *desc_id_base32)
+{
+ if (!id_digest || !rend_query || !desc_id_base32) {
+ log_warn(LD_BUG, "Called with rend_query==%p, "
+ "id_digest==%p, desc_id_base32==%p",
+ rend_query, id_digest, desc_id_base32);
+ return;
+ }
+
+ send_control_event(EVENT_HS_DESC, ALL_FORMATS,
+ "650 HS_DESC REQUESTED %s %s %s %s\r\n",
+ rend_query->onion_address,
+ rend_auth_type_to_string(rend_query->auth_type),
+ node_describe_longname_by_id(id_digest),
+ desc_id_base32);
+}
+
+/** send HS_DESC event after got response from hs directory.
+ *
+ * NOTE: this is an internal function used by following functions:
+ * control_event_hs_descriptor_received
+ * control_event_hs_descriptor_failed
+ *
+ * So do not call this function directly.
+ */
+void
+control_event_hs_descriptor_receive_end(const char *action,
+ const rend_data_t *rend_query,
+ const char *id_digest)
+{
+ if (!action || !rend_query || !id_digest) {
+ log_warn(LD_BUG, "Called with action==%p, rend_query==%p, "
+ "id_digest==%p", action, rend_query, id_digest);
+ return;
+ }
+
+ send_control_event(EVENT_HS_DESC, ALL_FORMATS,
+ "650 HS_DESC %s %s %s %s\r\n",
+ action,
+ rend_query->onion_address,
+ rend_auth_type_to_string(rend_query->auth_type),
+ node_describe_longname_by_id(id_digest));
+}
+
+/** send HS_DESC RECEIVED event
+ *
+ * called when a we successfully received a hidden service descriptor.
+ */
+void
+control_event_hs_descriptor_received(const rend_data_t *rend_query,
+ const char *id_digest)
+{
+ if (!rend_query || !id_digest) {
+ log_warn(LD_BUG, "Called with rend_query==%p, id_digest==%p",
+ rend_query, id_digest);
+ return;
+ }
+ control_event_hs_descriptor_receive_end("RECEIVED", rend_query, id_digest);
+}
+
+/** send HS_DESC FAILED event
+ *
+ * called when request for hidden service descriptor returned failure.
+ */
+void
+control_event_hs_descriptor_failed(const rend_data_t *rend_query,
+ const char *id_digest)
+{
+ if (!rend_query || !id_digest) {
+ log_warn(LD_BUG, "Called with rend_query==%p, id_digest==%p",
+ rend_query, id_digest);
+ return;
+ }
+ control_event_hs_descriptor_receive_end("FAILED", rend_query, id_digest);
+}
+
+/** Free any leftover allocated memory of the control.c subsystem. */
+void
+control_free_all(void)
+{
+ if (authentication_cookie) /* Free the auth cookie */
+ tor_free(authentication_cookie);
+}
+
+#ifdef TOR_UNIT_TESTS
+/* For testing: change the value of global_event_mask */
+void
+control_testing_set_global_event_mask(uint64_t mask)
+{
+ global_event_mask = mask;
+}
+#endif
+
diff --git a/src/or/control.h b/src/or/control.h
index f301ce91b..68a6c244d 100644
--- a/src/or/control.h
+++ b/src/or/control.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,8 +9,8 @@
* \brief Header file for control.c.
**/
-#ifndef _TOR_CONTROL_H
-#define _TOR_CONTROL_H
+#ifndef TOR_CONTROL_H
+#define TOR_CONTROL_H
void control_update_global_event_mask(void);
void control_adjust_event_log_severity(void);
@@ -50,10 +50,18 @@ int control_event_or_conn_status(or_connection_t *conn,
int control_event_bandwidth_used(uint32_t n_read, uint32_t n_written);
int control_event_stream_bandwidth(edge_connection_t *edge_conn);
int control_event_stream_bandwidth_used(void);
+int control_event_circ_bandwidth_used(void);
+int control_event_conn_bandwidth(connection_t *conn);
+int control_event_conn_bandwidth_used(void);
+int control_event_circuit_cell_stats(void);
+int control_event_tb_empty(const char *bucket, uint32_t read_empty_time,
+ uint32_t write_empty_time,
+ int milliseconds_elapsed);
void control_event_logmsg(int severity, uint32_t domain, const char *msg);
int control_event_descriptors_changed(smartlist_t *routers);
int control_event_address_mapped(const char *from, const char *to,
- time_t expires, const char *error);
+ time_t expires, const char *error,
+ const int cached);
int control_event_or_authdir_new_descriptor(const char *action,
const char *desc,
size_t desclen,
@@ -71,12 +79,13 @@ int control_event_server_status(int severity, const char *format, ...)
CHECK_PRINTF(2,3);
int control_event_guard(const char *nickname, const char *digest,
const char *status);
-int control_event_conf_changed(smartlist_t *elements);
-int control_event_buildtimeout_set(const circuit_build_times_t *cbt,
- buildtimeout_set_event_t type);
+int control_event_conf_changed(const smartlist_t *elements);
+int control_event_buildtimeout_set(buildtimeout_set_event_t type,
+ const char *args);
int control_event_signal(uintptr_t signal);
-int init_cookie_authentication(int enabled);
+int init_control_cookie_authentication(int enabled);
+char *get_controller_cookie_file_name(void);
smartlist_t *decode_hashed_passwords(config_line_t *passwords);
void disable_control_logging(void);
void enable_control_logging(void);
@@ -84,14 +93,114 @@ void enable_control_logging(void);
void monitor_owning_controller_process(const char *process_spec);
void control_event_bootstrap(bootstrap_status_t status, int progress);
-void control_event_bootstrap_problem(const char *warn, int reason);
+MOCK_DECL(void, control_event_bootstrap_problem,(const char *warn,
+ int reason,
+ or_connection_t *or_conn));
void control_event_clients_seen(const char *controller_str);
+void control_event_transport_launched(const char *mode,
+ const char *transport_name,
+ tor_addr_t *addr, uint16_t port);
+const char *rend_auth_type_to_string(rend_auth_type_t auth_type);
+MOCK_DECL(const char *, node_describe_longname_by_id,(const char *id_digest));
+void control_event_hs_descriptor_requested(const rend_data_t *rend_query,
+ const char *desc_id_base32,
+ const char *hs_dir);
+void control_event_hs_descriptor_receive_end(const char *action,
+ const rend_data_t *rend_query,
+ const char *hs_dir);
+void control_event_hs_descriptor_received(const rend_data_t *rend_query,
+ const char *hs_dir);
+void control_event_hs_descriptor_failed(const rend_data_t *rend_query,
+ const char *hs_dir);
+
+void control_free_all(void);
#ifdef CONTROL_PRIVATE
+/* Recognized asynchronous event types. It's okay to expand this list
+ * because it is used both as a list of v0 event types, and as indices
+ * into the bitfield to determine which controllers want which events.
+ */
+#define EVENT_MIN_ 0x0001
+#define EVENT_CIRCUIT_STATUS 0x0001
+#define EVENT_STREAM_STATUS 0x0002
+#define EVENT_OR_CONN_STATUS 0x0003
+#define EVENT_BANDWIDTH_USED 0x0004
+#define EVENT_CIRCUIT_STATUS_MINOR 0x0005
+#define EVENT_NEW_DESC 0x0006
+#define EVENT_DEBUG_MSG 0x0007
+#define EVENT_INFO_MSG 0x0008
+#define EVENT_NOTICE_MSG 0x0009
+#define EVENT_WARN_MSG 0x000A
+#define EVENT_ERR_MSG 0x000B
+#define EVENT_ADDRMAP 0x000C
+/* Exposed above */
+// #define EVENT_AUTHDIR_NEWDESCS 0x000D
+#define EVENT_DESCCHANGED 0x000E
+/* Exposed above */
+// #define EVENT_NS 0x000F
+#define EVENT_STATUS_CLIENT 0x0010
+#define EVENT_STATUS_SERVER 0x0011
+#define EVENT_STATUS_GENERAL 0x0012
+#define EVENT_GUARD 0x0013
+#define EVENT_STREAM_BANDWIDTH_USED 0x0014
+#define EVENT_CLIENTS_SEEN 0x0015
+#define EVENT_NEWCONSENSUS 0x0016
+#define EVENT_BUILDTIMEOUT_SET 0x0017
+#define EVENT_SIGNAL 0x0018
+#define EVENT_CONF_CHANGED 0x0019
+#define EVENT_CONN_BW 0x001A
+#define EVENT_CELL_STATS 0x001B
+#define EVENT_TB_EMPTY 0x001C
+#define EVENT_CIRC_BANDWIDTH_USED 0x001D
+#define EVENT_TRANSPORT_LAUNCHED 0x0020
+#define EVENT_HS_DESC 0x0021
+#define EVENT_MAX_ 0x0021
+/* If EVENT_MAX_ ever hits 0x0040, we need to make the mask into a
+ * different structure. */
+
/* Used only by control.c and test.c */
-size_t write_escaped_data(const char *data, size_t len, char **out);
-size_t read_escaped_data(const char *data, size_t len, char **out);
+STATIC size_t write_escaped_data(const char *data, size_t len, char **out);
+STATIC size_t read_escaped_data(const char *data, size_t len, char **out);
+/** Flag for event_format_t. Indicates that we should use the one standard
+ format. (Other formats previous existed, and are now deprecated)
+ */
+#define ALL_FORMATS 1
+/** Bit field of flags to select how to format a controller event. Recognized
+ * flag is ALL_FORMATS. */
+typedef int event_format_t;
+
+#ifdef TOR_UNIT_TESTS
+MOCK_DECL(STATIC void,
+send_control_event_string,(uint16_t event, event_format_t which,
+ const char *msg));
+
+void control_testing_set_global_event_mask(uint64_t mask);
+#endif
+
+/** Helper structure: temporarily stores cell statistics for a circuit. */
+typedef struct cell_stats_t {
+ /** Number of cells added in app-ward direction by command. */
+ uint64_t added_cells_appward[CELL_COMMAND_MAX_ + 1];
+ /** Number of cells added in exit-ward direction by command. */
+ uint64_t added_cells_exitward[CELL_COMMAND_MAX_ + 1];
+ /** Number of cells removed in app-ward direction by command. */
+ uint64_t removed_cells_appward[CELL_COMMAND_MAX_ + 1];
+ /** Number of cells removed in exit-ward direction by command. */
+ uint64_t removed_cells_exitward[CELL_COMMAND_MAX_ + 1];
+ /** Total waiting time of cells in app-ward direction by command. */
+ uint64_t total_time_appward[CELL_COMMAND_MAX_ + 1];
+ /** Total waiting time of cells in exit-ward direction by command. */
+ uint64_t total_time_exitward[CELL_COMMAND_MAX_ + 1];
+} cell_stats_t;
+void sum_up_cell_stats_by_command(circuit_t *circ,
+ cell_stats_t *cell_stats);
+void append_cell_stats_by_command(smartlist_t *event_parts,
+ const char *key,
+ const uint64_t *include_if_non_zero,
+ const uint64_t *number_to_include);
+void format_cell_stats(char **event_string, circuit_t *circ,
+ cell_stats_t *cell_stats);
#endif
#endif
diff --git a/src/or/cpuworker.c b/src/or/cpuworker.c
index 0255227e7..61b2c29b3 100644
--- a/src/or/cpuworker.c
+++ b/src/or/cpuworker.c
@@ -1,6 +1,6 @@
/* Copyright (c) 2003-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -11,16 +11,19 @@
*
* Right now, we only use this for processing onionskins.
**/
-
#include "or.h"
#include "buffers.h"
+#include "channel.h"
+#include "channeltls.h"
#include "circuitbuild.h"
#include "circuitlist.h"
#include "config.h"
#include "connection.h"
+#include "connection_or.h"
#include "cpuworker.h"
#include "main.h"
#include "onion.h"
+#include "rephist.h"
#include "router.h"
/** The maximum number of cpuworker processes we will keep around. */
@@ -29,10 +32,7 @@
#define MIN_CPUWORKERS 1
/** The tag specifies which circuit this onionskin was from. */
-#define TAG_LEN 10
-/** How many bytes are sent from the cpuworker back to tor? */
-#define LEN_ONION_RESPONSE \
- (1+TAG_LEN+ONIONSKIN_REPLY_LEN+CPATH_KEY_MATERIAL_LEN)
+#define TAG_LEN 12
/** How many cpuworkers we have running right now. */
static int num_cpuworkers=0;
@@ -68,22 +68,80 @@ connection_cpu_finished_flushing(connection_t *conn)
/** Pack global_id and circ_id; set *tag to the result. (See note on
* cpuworker_main for wire format.) */
static void
-tag_pack(char *tag, uint64_t conn_id, circid_t circ_id)
+tag_pack(uint8_t *tag, uint64_t chan_id, circid_t circ_id)
{
/*XXXX RETHINK THIS WHOLE MESS !!!! !NM NM NM NM*/
- set_uint64(tag, conn_id);
- set_uint16(tag+8, circ_id);
+ /*XXXX DOUBLEPLUSTHIS!!!! AS AS AS AS*/
+ set_uint64(tag, chan_id);
+ set_uint32(tag+8, circ_id);
}
/** Unpack <b>tag</b> into addr, port, and circ_id.
*/
static void
-tag_unpack(const char *tag, uint64_t *conn_id, circid_t *circ_id)
+tag_unpack(const uint8_t *tag, uint64_t *chan_id, circid_t *circ_id)
{
- *conn_id = get_uint64(tag);
- *circ_id = get_uint16(tag+8);
+ *chan_id = get_uint64(tag);
+ *circ_id = get_uint32(tag+8);
}
+/** Magic numbers to make sure our cpuworker_requests don't grow any
+ * mis-framing bugs. */
+#define CPUWORKER_REQUEST_MAGIC 0xda4afeed
+#define CPUWORKER_REPLY_MAGIC 0x5eedf00d
+
+/** A request sent to a cpuworker. */
+typedef struct cpuworker_request_t {
+ /** Magic number; must be CPUWORKER_REQUEST_MAGIC. */
+ uint32_t magic;
+ /** Opaque tag to identify the job */
+ uint8_t tag[TAG_LEN];
+ /** Task code. Must be one of CPUWORKER_TASK_* */
+ uint8_t task;
+
+ /** Flag: Are we timing this request? */
+ unsigned timed : 1;
+ /** If we're timing this request, when was it sent to the cpuworker? */
+ struct timeval started_at;
+
+ /** A create cell for the cpuworker to process. */
+ create_cell_t create_cell;
+
+ /* Turn the above into a tagged union if needed. */
+} cpuworker_request_t;
+
+/** A reply sent by a cpuworker. */
+typedef struct cpuworker_reply_t {
+ /** Magic number; must be CPUWORKER_REPLY_MAGIC. */
+ uint32_t magic;
+ /** Opaque tag to identify the job; matches the request's tag.*/
+ uint8_t tag[TAG_LEN];
+ /** True iff we got a successful request. */
+ uint8_t success;
+
+ /** Are we timing this request? */
+ unsigned int timed : 1;
+ /** What handshake type was the request? (Used for timing) */
+ uint16_t handshake_type;
+ /** When did we send the request to the cpuworker? */
+ struct timeval started_at;
+ /** Once the cpuworker received the request, how many microseconds did it
+ * take? (This shouldn't overflow; 4 billion micoseconds is over an hour,
+ * and we'll never have an onion handshake that takes so long.) */
+ uint32_t n_usec;
+
+ /** Output of processing a create cell
+ *
+ * @{
+ */
+ /** The created cell to send back. */
+ created_cell_t created_cell;
+ /** The keys to use on this circuit. */
+ uint8_t keys[CPATH_KEY_MATERIAL_LEN];
+ /** Input to use for authenticating introduce1 cells. */
+ uint8_t rend_auth_material[DIGEST_LEN];
+} cpuworker_reply_t;
+
/** Called when the onion key has changed and we need to spawn new
* cpuworkers. Close all currently idle cpuworkers, and mark the last
* rotation time as now.
@@ -122,6 +180,112 @@ connection_cpu_reached_eof(connection_t *conn)
return 0;
}
+/** Indexed by handshake type: how many onionskins have we processed and
+ * counted of that type? */
+static uint64_t onionskins_n_processed[MAX_ONION_HANDSHAKE_TYPE+1];
+/** Indexed by handshake type, corresponding to the onionskins counted in
+ * onionskins_n_processed: how many microseconds have we spent in cpuworkers
+ * processing that kind of onionskin? */
+static uint64_t onionskins_usec_internal[MAX_ONION_HANDSHAKE_TYPE+1];
+/** Indexed by handshake type, corresponding to onionskins counted in
+ * onionskins_n_processed: how many microseconds have we spent waiting for
+ * cpuworkers to give us answers for that kind of onionskin?
+ */
+static uint64_t onionskins_usec_roundtrip[MAX_ONION_HANDSHAKE_TYPE+1];
+
+/** If any onionskin takes longer than this, we clip them to this
+ * time. (microseconds) */
+#define MAX_BELIEVABLE_ONIONSKIN_DELAY (2*1000*1000)
+
+static tor_weak_rng_t request_sample_rng = TOR_WEAK_RNG_INIT;
+
+/** Return true iff we'd like to measure a handshake of type
+ * <b>onionskin_type</b>. Call only from the main thread. */
+static int
+should_time_request(uint16_t onionskin_type)
+{
+ /* If we've never heard of this type, we shouldn't even be here. */
+ if (onionskin_type > MAX_ONION_HANDSHAKE_TYPE)
+ return 0;
+ /* Measure the first N handshakes of each type, to ensure we have a
+ * sample */
+ if (onionskins_n_processed[onionskin_type] < 4096)
+ return 1;
+ /** Otherwise, measure with P=1/128. We avoid doing this for every
+ * handshake, since the measurement itself can take a little time. */
+ return tor_weak_random_one_in_n(&request_sample_rng, 128);
+}
+
+/** Return an estimate of how many microseconds we will need for a single
+ * cpuworker to to process <b>n_requests</b> onionskins of type
+ * <b>onionskin_type</b>. */
+uint64_t
+estimated_usec_for_onionskins(uint32_t n_requests, uint16_t onionskin_type)
+{
+ if (onionskin_type > MAX_ONION_HANDSHAKE_TYPE) /* should be impossible */
+ return 1000 * (uint64_t)n_requests;
+ if (PREDICT_UNLIKELY(onionskins_n_processed[onionskin_type] < 100)) {
+ /* Until we have 100 data points, just asssume everything takes 1 msec. */
+ return 1000 * (uint64_t)n_requests;
+ } else {
+ /* This can't overflow: we'll never have more than 500000 onionskins
+ * measured in onionskin_usec_internal, and they won't take anything near
+ * 1 sec each, and we won't have anything like 1 million queued
+ * onionskins. But that's 5e5 * 1e6 * 1e6, which is still less than
+ * UINT64_MAX. */
+ return (onionskins_usec_internal[onionskin_type] * n_requests) /
+ onionskins_n_processed[onionskin_type];
+ }
+}
+
+/** Compute the absolute and relative overhead of using the cpuworker
+ * framework for onionskins of type <b>onionskin_type</b>.*/
+static int
+get_overhead_for_onionskins(uint32_t *usec_out, double *frac_out,
+ uint16_t onionskin_type)
+{
+ uint64_t overhead;
+
+ *usec_out = 0;
+ *frac_out = 0.0;
+
+ if (onionskin_type > MAX_ONION_HANDSHAKE_TYPE) /* should be impossible */
+ return -1;
+ if (onionskins_n_processed[onionskin_type] == 0 ||
+ onionskins_usec_internal[onionskin_type] == 0 ||
+ onionskins_usec_roundtrip[onionskin_type] == 0)
+ return -1;
+
+ overhead = onionskins_usec_roundtrip[onionskin_type] -
+ onionskins_usec_internal[onionskin_type];
+
+ *usec_out = (uint32_t)(overhead / onionskins_n_processed[onionskin_type]);
+ *frac_out = U64_TO_DBL(overhead) / onionskins_usec_internal[onionskin_type];
+
+ return 0;
+}
+
+/** If we've measured overhead for onionskins of type <b>onionskin_type</b>,
+ * log it. */
+void
+cpuworker_log_onionskin_overhead(int severity, int onionskin_type,
+ const char *onionskin_type_name)
+{
+ uint32_t overhead;
+ double relative_overhead;
+ int r;
+
+ r = get_overhead_for_onionskins(&overhead, &relative_overhead,
+ onionskin_type);
+ if (!overhead || r<0)
+ return;
+
+ log_fn(severity, LD_OR,
+ "%s onionskins have averaged %u usec overhead (%.2f%%) in "
+ "cpuworker code ",
+ onionskin_type_name, (unsigned)overhead, relative_overhead*100);
+}
+
/** Called when we get data from a cpuworker. If the answer is not complete,
* wait for a complete answer. If the answer is complete,
* process it as appropriate.
@@ -129,12 +293,9 @@ connection_cpu_reached_eof(connection_t *conn)
int
connection_cpu_process_inbuf(connection_t *conn)
{
- char success;
- char buf[LEN_ONION_RESPONSE];
- uint64_t conn_id;
+ uint64_t chan_id;
circid_t circ_id;
- connection_t *tmp_conn;
- or_connection_t *p_conn = NULL;
+ channel_t *p_chan = NULL;
circuit_t *circ;
tor_assert(conn);
@@ -144,25 +305,51 @@ connection_cpu_process_inbuf(connection_t *conn)
return 0;
if (conn->state == CPUWORKER_STATE_BUSY_ONION) {
- if (connection_get_inbuf_len(conn) < LEN_ONION_RESPONSE)
+ cpuworker_reply_t rpl;
+ if (connection_get_inbuf_len(conn) < sizeof(cpuworker_reply_t))
return 0; /* not yet */
- tor_assert(connection_get_inbuf_len(conn) == LEN_ONION_RESPONSE);
-
- connection_fetch_from_buf(&success,1,conn);
- connection_fetch_from_buf(buf,LEN_ONION_RESPONSE-1,conn);
-
+ tor_assert(connection_get_inbuf_len(conn) == sizeof(cpuworker_reply_t));
+
+ connection_fetch_from_buf((void*)&rpl,sizeof(cpuworker_reply_t),conn);
+
+ tor_assert(rpl.magic == CPUWORKER_REPLY_MAGIC);
+
+ if (rpl.timed && rpl.success &&
+ rpl.handshake_type <= MAX_ONION_HANDSHAKE_TYPE) {
+ /* Time how long this request took. The handshake_type check should be
+ needless, but let's leave it in to be safe. */
+ struct timeval tv_end, tv_diff;
+ int64_t usec_roundtrip;
+ tor_gettimeofday(&tv_end);
+ timersub(&tv_end, &rpl.started_at, &tv_diff);
+ usec_roundtrip = ((int64_t)tv_diff.tv_sec)*1000000 + tv_diff.tv_usec;
+ if (usec_roundtrip >= 0 &&
+ usec_roundtrip < MAX_BELIEVABLE_ONIONSKIN_DELAY) {
+ ++onionskins_n_processed[rpl.handshake_type];
+ onionskins_usec_internal[rpl.handshake_type] += rpl.n_usec;
+ onionskins_usec_roundtrip[rpl.handshake_type] += usec_roundtrip;
+ if (onionskins_n_processed[rpl.handshake_type] >= 500000) {
+ /* Scale down every 500000 handshakes. On a busy server, that's
+ * less impressive than it sounds. */
+ onionskins_n_processed[rpl.handshake_type] /= 2;
+ onionskins_usec_internal[rpl.handshake_type] /= 2;
+ onionskins_usec_roundtrip[rpl.handshake_type] /= 2;
+ }
+ }
+ }
/* parse out the circ it was talking about */
- tag_unpack(buf, &conn_id, &circ_id);
+ tag_unpack(rpl.tag, &chan_id, &circ_id);
circ = NULL;
- tmp_conn = connection_get_by_global_id(conn_id);
- if (tmp_conn && !tmp_conn->marked_for_close &&
- tmp_conn->type == CONN_TYPE_OR)
- p_conn = TO_OR_CONN(tmp_conn);
+ log_debug(LD_OR,
+ "Unpacking cpuworker reply, chan_id is " U64_FORMAT
+ ", circ_id is %u",
+ U64_PRINTF_ARG(chan_id), (unsigned)circ_id);
+ p_chan = channel_find_by_global_id(chan_id);
- if (p_conn)
- circ = circuit_get_by_circid_orconn(circ_id, p_conn);
+ if (p_chan)
+ circ = circuit_get_by_circid_channel(circ_id, p_chan);
- if (success == 0) {
+ if (rpl.success == 0) {
log_debug(LD_OR,
"decoding onionskin failed. "
"(Old key or bad software.) Closing.");
@@ -180,8 +367,10 @@ connection_cpu_process_inbuf(connection_t *conn)
goto done_processing;
}
tor_assert(! CIRCUIT_IS_ORIGIN(circ));
- if (onionskin_answer(TO_OR_CIRCUIT(circ), CELL_CREATED, buf+TAG_LEN,
- buf+TAG_LEN+ONIONSKIN_REPLY_LEN) < 0) {
+ if (onionskin_answer(TO_OR_CIRCUIT(circ),
+ &rpl.created_cell,
+ (const char*)rpl.keys,
+ rpl.rend_auth_material) < 0) {
log_warn(LD_OR,"onionskin_answer failed. Closing.");
circuit_mark_for_close(circ, END_CIRC_REASON_INTERNAL);
goto done_processing;
@@ -208,32 +397,21 @@ connection_cpu_process_inbuf(connection_t *conn)
* Read and writes from fdarray[1]. Reads requests, writes answers.
*
* Request format:
- * Task type [1 byte, always CPUWORKER_TASK_ONION]
- * Opaque tag TAG_LEN
- * Onionskin challenge ONIONSKIN_CHALLENGE_LEN
+ * cpuworker_request_t.
* Response format:
- * Success/failure [1 byte, boolean.]
- * Opaque tag TAG_LEN
- * Onionskin challenge ONIONSKIN_REPLY_LEN
- * Negotiated keys KEY_LEN*2+DIGEST_LEN*2
- *
- * (Note: this _should_ be by addr/port, since we're concerned with specific
- * connections, not with routers (where we'd use identity).)
+ * cpuworker_reply_t
*/
static void
cpuworker_main(void *data)
{
- char question[ONIONSKIN_CHALLENGE_LEN];
- uint8_t question_type;
+ /* For talking to the parent thread/process */
tor_socket_t *fdarray = data;
tor_socket_t fd;
/* variables for onion processing */
- char keys[CPATH_KEY_MATERIAL_LEN];
- char reply_to_proxy[ONIONSKIN_REPLY_LEN];
- char buf[LEN_ONION_RESPONSE];
- char tag[TAG_LEN];
- crypto_pk_t *onion_key = NULL, *last_onion_key = NULL;
+ server_onion_keys_t onion_keys;
+ cpuworker_request_t req;
+ cpuworker_reply_t rpl;
fd = fdarray[1]; /* this side is ours */
#ifndef TOR_IS_MULTITHREADED
@@ -244,68 +422,85 @@ cpuworker_main(void *data)
#endif
tor_free(data);
- dup_onion_keys(&onion_key, &last_onion_key);
+ setup_server_onion_keys(&onion_keys);
for (;;) {
- ssize_t r;
-
- if ((r = recv(fd, (void *)&question_type, 1, 0)) != 1) {
-// log_fn(LOG_ERR,"read type failed. Exiting.");
- if (r == 0) {
- log_info(LD_OR,
- "CPU worker exiting because Tor process closed connection "
- "(either rotated keys or died).");
- } else {
- log_info(LD_OR,
- "CPU worker exiting because of error on connection to Tor "
- "process.");
- log_info(LD_OR,"(Error on %d was %s)",
- fd, tor_socket_strerror(tor_socket_errno(fd)));
- }
- goto end;
- }
- tor_assert(question_type == CPUWORKER_TASK_ONION);
-
- if (read_all(fd, tag, TAG_LEN, 1) != TAG_LEN) {
- log_err(LD_BUG,"read tag failed. Exiting.");
+ if (read_all(fd, (void *)&req, sizeof(req), 1) != sizeof(req)) {
+ log_info(LD_OR, "read request failed. Exiting.");
goto end;
}
-
- if (read_all(fd, question, ONIONSKIN_CHALLENGE_LEN, 1) !=
- ONIONSKIN_CHALLENGE_LEN) {
- log_err(LD_BUG,"read question failed. Exiting.");
- goto end;
- }
-
- if (question_type == CPUWORKER_TASK_ONION) {
- if (onion_skin_server_handshake(question, onion_key, last_onion_key,
- reply_to_proxy, keys, CPATH_KEY_MATERIAL_LEN) < 0) {
+ tor_assert(req.magic == CPUWORKER_REQUEST_MAGIC);
+
+ memset(&rpl, 0, sizeof(rpl));
+
+ if (req.task == CPUWORKER_TASK_ONION) {
+ const create_cell_t *cc = &req.create_cell;
+ created_cell_t *cell_out = &rpl.created_cell;
+ struct timeval tv_start = {0,0}, tv_end;
+ int n;
+ rpl.timed = req.timed;
+ rpl.started_at = req.started_at;
+ rpl.handshake_type = cc->handshake_type;
+ if (req.timed)
+ tor_gettimeofday(&tv_start);
+ n = onion_skin_server_handshake(cc->handshake_type,
+ cc->onionskin, cc->handshake_len,
+ &onion_keys,
+ cell_out->reply,
+ rpl.keys, CPATH_KEY_MATERIAL_LEN,
+ rpl.rend_auth_material);
+ if (n < 0) {
/* failure */
log_debug(LD_OR,"onion_skin_server_handshake failed.");
- *buf = 0; /* indicate failure in first byte */
- memcpy(buf+1,tag,TAG_LEN);
- /* send all zeros as answer */
- memset(buf+1+TAG_LEN, 0, LEN_ONION_RESPONSE-(1+TAG_LEN));
+ memset(&rpl, 0, sizeof(rpl));
+ memcpy(rpl.tag, req.tag, TAG_LEN);
+ rpl.success = 0;
} else {
/* success */
log_debug(LD_OR,"onion_skin_server_handshake succeeded.");
- buf[0] = 1; /* 1 means success */
- memcpy(buf+1,tag,TAG_LEN);
- memcpy(buf+1+TAG_LEN,reply_to_proxy,ONIONSKIN_REPLY_LEN);
- memcpy(buf+1+TAG_LEN+ONIONSKIN_REPLY_LEN,keys,CPATH_KEY_MATERIAL_LEN);
+ memcpy(rpl.tag, req.tag, TAG_LEN);
+ cell_out->handshake_len = n;
+ switch (cc->cell_type) {
+ case CELL_CREATE:
+ cell_out->cell_type = CELL_CREATED; break;
+ case CELL_CREATE2:
+ cell_out->cell_type = CELL_CREATED2; break;
+ case CELL_CREATE_FAST:
+ cell_out->cell_type = CELL_CREATED_FAST; break;
+ default:
+ tor_assert(0);
+ goto end;
+ }
+ rpl.success = 1;
}
- if (write_all(fd, buf, LEN_ONION_RESPONSE, 1) != LEN_ONION_RESPONSE) {
+ rpl.magic = CPUWORKER_REPLY_MAGIC;
+ if (req.timed) {
+ struct timeval tv_diff;
+ int64_t usec;
+ tor_gettimeofday(&tv_end);
+ timersub(&tv_end, &tv_start, &tv_diff);
+ usec = ((int64_t)tv_diff.tv_sec)*1000000 + tv_diff.tv_usec;
+ if (usec < 0 || usec > MAX_BELIEVABLE_ONIONSKIN_DELAY)
+ rpl.n_usec = MAX_BELIEVABLE_ONIONSKIN_DELAY;
+ else
+ rpl.n_usec = (uint32_t) usec;
+ }
+ if (write_all(fd, (void*)&rpl, sizeof(rpl), 1) != sizeof(rpl)) {
log_err(LD_BUG,"writing response buf failed. Exiting.");
goto end;
}
log_debug(LD_OR,"finished writing response.");
+ } else if (req.task == CPUWORKER_TASK_SHUTDOWN) {
+ log_info(LD_OR,"Clean shutdown: exiting");
+ goto end;
}
+ memwipe(&req, 0, sizeof(req));
+ memwipe(&rpl, 0, sizeof(req));
}
end:
- if (onion_key)
- crypto_pk_free(onion_key);
- if (last_onion_key)
- crypto_pk_free(last_onion_key);
+ memwipe(&req, 0, sizeof(req));
+ memwipe(&rpl, 0, sizeof(req));
+ release_server_onion_keys(&onion_keys);
tor_close_socket(fd);
crypto_thread_cleanup();
spawn_exit();
@@ -333,7 +528,12 @@ spawn_cpuworker(void)
tor_assert(SOCKET_OK(fdarray[1]));
fd = fdarray[0];
- spawn_func(cpuworker_main, (void*)fdarray);
+ if (spawn_func(cpuworker_main, (void*)fdarray) < 0) {
+ tor_close_socket(fdarray[0]);
+ tor_close_socket(fdarray[1]);
+ tor_free(fdarray);
+ return -1;
+ }
log_debug(LD_OR,"just spawned a cpu worker.");
#ifndef TOR_IS_MULTITHREADED
tor_close_socket(fdarray[1]); /* don't need the worker's side of the pipe */
@@ -342,13 +542,16 @@ spawn_cpuworker(void)
conn = connection_new(CONN_TYPE_CPUWORKER, AF_UNIX);
- set_socket_nonblocking(fd);
-
/* set up conn so it's got all the data we need to remember */
conn->s = fd;
conn->address = tor_strdup("localhost");
tor_addr_make_unspec(&conn->addr);
+ if (set_socket_nonblocking(fd) == -1) {
+ connection_free(conn); /* this closes fd */
+ return -1;
+ }
+
if (connection_add(conn) < 0) { /* no space, forget it */
log_warn(LD_NET,"connection_add for cpuworker failed. Giving up.");
connection_free(conn); /* this closes fd */
@@ -368,6 +571,7 @@ static void
spawn_enough_cpuworkers(void)
{
int num_cpuworkers_needed = get_num_cpus(get_options());
+ int reseed = 0;
if (num_cpuworkers_needed < MIN_CPUWORKERS)
num_cpuworkers_needed = MIN_CPUWORKERS;
@@ -380,7 +584,11 @@ spawn_enough_cpuworkers(void)
return;
}
num_cpuworkers++;
+ reseed++;
}
+
+ if (reseed)
+ crypto_seed_weak_rng(&request_sample_rng);
}
/** Take a pending task from the queue and assign it to 'cpuworker'. */
@@ -388,7 +596,7 @@ static void
process_pending_task(connection_t *cpuworker)
{
or_circuit_t *circ;
- char *onionskin = NULL;
+ create_cell_t *onionskin = NULL;
tor_assert(cpuworker);
@@ -441,12 +649,13 @@ cull_wedged_cpuworkers(void)
*/
int
assign_onionskin_to_cpuworker(connection_t *cpuworker,
- or_circuit_t *circ, char *onionskin)
+ or_circuit_t *circ,
+ create_cell_t *onionskin)
{
- char qbuf[1];
- char tag[TAG_LEN];
+ cpuworker_request_t req;
time_t now = approx_time();
static time_t last_culled_cpuworkers = 0;
+ int should_time;
/* Checking for wedged cpuworkers requires a linear search over all
* connections, so let's do it only once a minute.
@@ -475,26 +684,39 @@ assign_onionskin_to_cpuworker(connection_t *cpuworker,
tor_assert(cpuworker);
- if (!circ->p_conn) {
- log_info(LD_OR,"circ->p_conn gone. Failing circ.");
+ if (!circ->p_chan) {
+ log_info(LD_OR,"circ->p_chan gone. Failing circ.");
tor_free(onionskin);
return -1;
}
- tag_pack(tag, circ->p_conn->_base.global_identifier,
+
+ if (connection_or_digest_is_known_relay(circ->p_chan->identity_digest))
+ rep_hist_note_circuit_handshake_assigned(onionskin->handshake_type);
+
+ should_time = should_time_request(onionskin->handshake_type);
+ memset(&req, 0, sizeof(req));
+ req.magic = CPUWORKER_REQUEST_MAGIC;
+ tag_pack(req.tag, circ->p_chan->global_identifier,
circ->p_circ_id);
+ req.timed = should_time;
cpuworker->state = CPUWORKER_STATE_BUSY_ONION;
/* touch the lastwritten timestamp, since that's how we check to
* see how long it's been since we asked the question, and sometimes
* we check before the first call to connection_handle_write(). */
- cpuworker->timestamp_lastwritten = time(NULL);
+ cpuworker->timestamp_lastwritten = now;
num_cpuworkers_busy++;
- qbuf[0] = CPUWORKER_TASK_ONION;
- connection_write_to_buf(qbuf, 1, cpuworker);
- connection_write_to_buf(tag, sizeof(tag), cpuworker);
- connection_write_to_buf(onionskin, ONIONSKIN_CHALLENGE_LEN, cpuworker);
+ req.task = CPUWORKER_TASK_ONION;
+ memcpy(&req.create_cell, onionskin, sizeof(create_cell_t));
+
tor_free(onionskin);
+
+ if (should_time)
+ tor_gettimeofday(&req.started_at);
+
+ connection_write_to_buf((void*)&req, sizeof(req), cpuworker);
+ memwipe(&req, 0, sizeof(req));
}
return 0;
}
diff --git a/src/or/cpuworker.h b/src/or/cpuworker.h
index 91172caa5..317cef43b 100644
--- a/src/or/cpuworker.h
+++ b/src/or/cpuworker.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,17 +9,23 @@
* \brief Header file for cpuworker.c.
**/
-#ifndef _TOR_CPUWORKER_H
-#define _TOR_CPUWORKER_H
+#ifndef TOR_CPUWORKER_H
+#define TOR_CPUWORKER_H
void cpu_init(void);
void cpuworkers_rotate(void);
int connection_cpu_finished_flushing(connection_t *conn);
int connection_cpu_reached_eof(connection_t *conn);
int connection_cpu_process_inbuf(connection_t *conn);
+struct create_cell_t;
int assign_onionskin_to_cpuworker(connection_t *cpuworker,
or_circuit_t *circ,
- char *onionskin);
+ struct create_cell_t *onionskin);
+
+uint64_t estimated_usec_for_onionskins(uint32_t n_requests,
+ uint16_t onionskin_type);
+void cpuworker_log_onionskin_overhead(int severity, int onionskin_type,
+ const char *onionskin_type_name);
#endif
diff --git a/src/or/directory.c b/src/or/directory.c
index f235bf3b4..22ba056ee 100644
--- a/src/or/directory.c
+++ b/src/or/directory.c
@@ -1,6 +1,6 @@
/* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#include "or.h"
@@ -13,6 +13,7 @@
#include "directory.h"
#include "dirserv.h"
#include "dirvote.h"
+#include "entrynodes.h"
#include "geoip.h"
#include "main.h"
#include "microdesc.h"
@@ -25,6 +26,7 @@
#include "router.h"
#include "routerlist.h"
#include "routerparse.h"
+#include "routerset.h"
#if defined(EXPORTMALLINFO) && defined(HAVE_MALLOC_H) && defined(HAVE_MALLINFO)
#ifndef OPENBSD
@@ -58,7 +60,6 @@
static void directory_send_command(dir_connection_t *conn,
int purpose, int direct, const char *resource,
const char *payload, size_t payload_len,
- int supports_conditional_consensus,
time_t if_modified_since);
static int directory_handle_command(dir_connection_t *conn);
static int body_is_plausible(const char *body, size_t body_len, int purpose);
@@ -66,15 +67,11 @@ static int purpose_needs_anonymity(uint8_t dir_purpose,
uint8_t router_purpose);
static char *http_get_header(const char *headers, const char *which);
static void http_set_address_origin(const char *headers, connection_t *conn);
-static void connection_dir_download_v2_networkstatus_failed(
- dir_connection_t *conn, int status_code);
static void connection_dir_download_routerdesc_failed(dir_connection_t *conn);
static void connection_dir_bridge_routerdesc_failed(dir_connection_t *conn);
static void connection_dir_download_cert_failed(
dir_connection_t *conn, int status_code);
static void connection_dir_retry_bridges(smartlist_t *descs);
-static void dir_networkstatus_download_failed(smartlist_t *failed,
- int status_code);
static void dir_routerdesc_download_failed(smartlist_t *failed,
int status_code,
int router_purpose,
@@ -85,16 +82,13 @@ static void dir_microdesc_download_failed(smartlist_t *failed,
static void note_client_request(int purpose, int compressed, size_t bytes);
static int client_likes_consensus(networkstatus_t *v, const char *want_url);
-static void directory_initiate_command_rend(const char *address,
- const tor_addr_t *addr,
+static void directory_initiate_command_rend(const tor_addr_t *addr,
uint16_t or_port,
uint16_t dir_port,
- int supports_conditional_consensus,
- int supports_begindir,
const char *digest,
uint8_t dir_purpose,
uint8_t router_purpose,
- int anonymized_connection,
+ dir_indirection_t indirection,
const char *resource,
const char *payload,
size_t payload_len,
@@ -136,7 +130,6 @@ purpose_needs_anonymity(uint8_t dir_purpose, uint8_t router_purpose)
if (dir_purpose == DIR_PURPOSE_UPLOAD_DIR ||
dir_purpose == DIR_PURPOSE_UPLOAD_VOTE ||
dir_purpose == DIR_PURPOSE_UPLOAD_SIGNATURES ||
- dir_purpose == DIR_PURPOSE_FETCH_V2_NETWORKSTATUS ||
dir_purpose == DIR_PURPOSE_FETCH_STATUS_VOTE ||
dir_purpose == DIR_PURPOSE_FETCH_DETACHED_SIGNATURES ||
dir_purpose == DIR_PURPOSE_FETCH_CONSENSUS ||
@@ -155,16 +148,10 @@ authdir_type_to_string(dirinfo_type_t auth)
{
char *result;
smartlist_t *lst = smartlist_new();
- if (auth & V1_DIRINFO)
- smartlist_add(lst, (void*)"V1");
- if (auth & V2_DIRINFO)
- smartlist_add(lst, (void*)"V2");
if (auth & V3_DIRINFO)
smartlist_add(lst, (void*)"V3");
if (auth & BRIDGE_DIRINFO)
smartlist_add(lst, (void*)"Bridge");
- if (auth & HIDSERV_DIRINFO)
- smartlist_add(lst, (void*)"Hidden service");
if (smartlist_len(lst)) {
result = smartlist_join_strings(lst, ", ", 0, NULL);
} else {
@@ -180,18 +167,12 @@ dir_conn_purpose_to_string(int purpose)
{
switch (purpose)
{
- case DIR_PURPOSE_FETCH_RENDDESC:
- return "hidden-service descriptor fetch";
case DIR_PURPOSE_UPLOAD_DIR:
return "server descriptor upload";
- case DIR_PURPOSE_UPLOAD_RENDDESC:
- return "hidden-service descriptor upload";
case DIR_PURPOSE_UPLOAD_VOTE:
return "server vote upload";
case DIR_PURPOSE_UPLOAD_SIGNATURES:
return "consensus signature upload";
- case DIR_PURPOSE_FETCH_V2_NETWORKSTATUS:
- return "network-status fetch";
case DIR_PURPOSE_FETCH_SERVERDESC:
return "server descriptor fetch";
case DIR_PURPOSE_FETCH_EXTRAINFO:
@@ -227,16 +208,9 @@ router_supports_extrainfo(const char *identity_digest, int is_authority)
if (node && node->ri) {
if (node->ri->caches_extra_info)
return 1;
- if (is_authority && node->ri->platform &&
- tor_version_as_new_as(node->ri->platform,
- "Tor 0.2.0.0-alpha-dev (r10070)"))
- return 1;
}
if (is_authority) {
- const routerstatus_t *rs =
- router_get_consensus_status_by_id(identity_digest);
- if (rs && rs->version_supports_extrainfo_upload)
- return 1;
+ return 1;
}
return 0;
}
@@ -252,10 +226,10 @@ router_supports_extrainfo(const char *identity_digest, int is_authority)
int
directories_have_accepted_server_descriptor(void)
{
- smartlist_t *servers = router_get_trusted_dir_servers();
+ const smartlist_t *servers = router_get_trusted_dir_servers();
const or_options_t *options = get_options();
- SMARTLIST_FOREACH(servers, trusted_dir_server_t *, d, {
- if ((d->type & options->_PublishServerDescriptor) &&
+ SMARTLIST_FOREACH(servers, dir_server_t *, d, {
+ if ((d->type & options->PublishServerDescriptor_) &&
d->has_accepted_serverdesc) {
return 1;
}
@@ -266,13 +240,13 @@ directories_have_accepted_server_descriptor(void)
/** Start a connection to every suitable directory authority, using
* connection purpose <b>dir_purpose</b> and uploading <b>payload</b>
* (of length <b>payload_len</b>). The dir_purpose should be one of
- * 'DIR_PURPOSE_UPLOAD_DIR' or 'DIR_PURPOSE_UPLOAD_RENDDESC'.
+ * 'DIR_PURPOSE_UPLOAD_{DIR|VOTE|SIGNATURES}'.
*
* <b>router_purpose</b> describes the type of descriptor we're
* publishing, if we're publishing a descriptor -- e.g. general or bridge.
*
- * <b>type</b> specifies what sort of dir authorities (V1, V2,
- * HIDSERV, BRIDGE) we should upload to.
+ * <b>type</b> specifies what sort of dir authorities (V3,
+ * BRIDGE, etc) we should upload to.
*
* If <b>extrainfo_len</b> is nonzero, the first <b>payload_len</b> bytes of
* <b>payload</b> hold a router descriptor, and the next <b>extrainfo_len</b>
@@ -287,8 +261,8 @@ directory_post_to_dirservers(uint8_t dir_purpose, uint8_t router_purpose,
size_t payload_len, size_t extrainfo_len)
{
const or_options_t *options = get_options();
- int post_via_tor;
- smartlist_t *dirservers = router_get_trusted_dir_servers();
+ dir_indirection_t indirection;
+ const smartlist_t *dirservers = router_get_trusted_dir_servers();
int found = 0;
const int exclude_self = (dir_purpose == DIR_PURPOSE_UPLOAD_VOTE ||
dir_purpose == DIR_PURPOSE_UPLOAD_SIGNATURES);
@@ -296,7 +270,7 @@ directory_post_to_dirservers(uint8_t dir_purpose, uint8_t router_purpose,
/* This tries dirservers which we believe to be down, but ultimately, that's
* harmless, and we may as well err on the side of getting things uploaded.
*/
- SMARTLIST_FOREACH_BEGIN(dirservers, trusted_dir_server_t *, ds) {
+ SMARTLIST_FOREACH_BEGIN(dirservers, dir_server_t *, ds) {
routerstatus_t *rs = &(ds->fake_status);
size_t upload_len = payload_len;
tor_addr_t ds_addr;
@@ -304,8 +278,12 @@ directory_post_to_dirservers(uint8_t dir_purpose, uint8_t router_purpose,
if ((type & ds->type) == 0)
continue;
- if (exclude_self && router_digest_is_me(ds->digest))
+ if (exclude_self && router_digest_is_me(ds->digest)) {
+ /* we don't upload to ourselves, but at least there's now at least
+ * one authority of this type that has what we wanted to upload. */
+ found = 1;
continue;
+ }
if (options->StrictNodes &&
routerset_contains_routerstatus(options->ExcludeNodes, rs, -1)) {
@@ -327,11 +305,19 @@ directory_post_to_dirservers(uint8_t dir_purpose, uint8_t router_purpose,
(int) extrainfo_len);
}
tor_addr_from_ipv4h(&ds_addr, ds->addr);
- post_via_tor = purpose_needs_anonymity(dir_purpose, router_purpose) ||
- !fascist_firewall_allows_address_dir(&ds_addr, ds->dir_port);
+ if (purpose_needs_anonymity(dir_purpose, router_purpose)) {
+ indirection = DIRIND_ANONYMOUS;
+ } else if (!fascist_firewall_allows_address_dir(&ds_addr,ds->dir_port)) {
+ if (fascist_firewall_allows_address_or(&ds_addr,ds->or_port))
+ indirection = DIRIND_ONEHOP;
+ else
+ indirection = DIRIND_ANONYMOUS;
+ } else {
+ indirection = DIRIND_DIRECT_CONN;
+ }
directory_initiate_command_routerstatus(rs, dir_purpose,
router_purpose,
- post_via_tor,
+ indirection,
NULL, payload, upload_len, 0);
} SMARTLIST_FOREACH_END(ds);
if (!found) {
@@ -342,6 +328,57 @@ directory_post_to_dirservers(uint8_t dir_purpose, uint8_t router_purpose,
}
}
+/** Return true iff, according to the values in <b>options</b>, we should be
+ * using directory guards for direct downloads of directory information. */
+static int
+should_use_directory_guards(const or_options_t *options)
+{
+ /* Public (non-bridge) servers never use directory guards. */
+ if (public_server_mode(options))
+ return 0;
+ /* If guards are disabled, or directory guards are disabled, we can't
+ * use directory guards.
+ */
+ if (!options->UseEntryGuards || !options->UseEntryGuardsAsDirGuards)
+ return 0;
+ /* If we're configured to fetch directory info aggressively or of a
+ * nonstandard type, don't use directory guards. */
+ if (options->DownloadExtraInfo || options->FetchDirInfoEarly ||
+ options->FetchDirInfoExtraEarly || options->FetchUselessDescriptors)
+ return 0;
+ return 1;
+}
+
+/** Pick an unconsetrained directory server from among our guards, the latest
+ * networkstatus, or the fallback dirservers, for use in downloading
+ * information of type <b>type</b>, and return its routerstatus. */
+static const routerstatus_t *
+directory_pick_generic_dirserver(dirinfo_type_t type, int pds_flags,
+ uint8_t dir_purpose)
+{
+ const routerstatus_t *rs = NULL;
+ const or_options_t *options = get_options();
+
+ if (options->UseBridges)
+ log_warn(LD_BUG, "Called when we have UseBridges set.");
+
+ if (should_use_directory_guards(options)) {
+ const node_t *node = choose_random_dirguard(type);
+ if (node)
+ rs = node->rs;
+ } else {
+ /* anybody with a non-zero dirport will do */
+ rs = router_pick_directory_server(type, pds_flags);
+ }
+ if (!rs) {
+ log_info(LD_DIR, "No router found for %s; falling back to "
+ "dirserver list.", dir_conn_purpose_to_string(dir_purpose));
+ rs = router_pick_fallback_dirserver(type, pds_flags);
+ }
+
+ return rs;
+}
+
/** Start a connection to a random running directory server, using
* connection purpose <b>dir_purpose</b>, intending to fetch descriptors
* of purpose <b>router_purpose</b>, and requesting <b>resource</b>.
@@ -368,18 +405,10 @@ directory_get_from_dirserver(uint8_t dir_purpose, uint8_t router_purpose,
(router_purpose == ROUTER_PURPOSE_BRIDGE ? BRIDGE_DIRINFO :
V3_DIRINFO);
break;
- case DIR_PURPOSE_FETCH_V2_NETWORKSTATUS:
- type = V2_DIRINFO;
- prefer_authority = 1; /* Only v2 authorities have these anyway. */
- require_authority = 1; /* Don't fallback to asking a non-authority */
- break;
case DIR_PURPOSE_FETCH_SERVERDESC:
type = (router_purpose == ROUTER_PURPOSE_BRIDGE ? BRIDGE_DIRINFO :
V3_DIRINFO);
break;
- case DIR_PURPOSE_FETCH_RENDDESC:
- type = HIDSERV_DIRINFO;
- break;
case DIR_PURPOSE_FETCH_STATUS_VOTE:
case DIR_PURPOSE_FETCH_DETACHED_SIGNATURES:
case DIR_PURPOSE_FETCH_CERTIFICATE:
@@ -419,33 +448,32 @@ directory_get_from_dirserver(uint8_t dir_purpose, uint8_t router_purpose,
}
}
- if (!options->FetchServerDescriptors && type != HIDSERV_DIRINFO)
+ if (!options->FetchServerDescriptors)
return;
if (!get_via_tor) {
if (options->UseBridges && type != BRIDGE_DIRINFO) {
/* We want to ask a running bridge for which we have a descriptor.
*
- * Be careful here: we should only ask questions that we know our
- * bridges can answer. So far we're solving that by backing off to
- * the behavior supported by our oldest bridge; see for example
- * any_bridges_dont_support_microdescriptors().
+ * When we ask choose_random_entry() for a bridge, we specify what
+ * sort of dir fetch we'll be doing, so it won't return a bridge
+ * that can't answer our question.
*/
/* XXX024 Not all bridges handle conditional consensus downloading,
* so, for now, never assume the server supports that. -PP */
- const node_t *node = choose_random_entry(NULL);
+ const node_t *node = choose_random_dirguard(type);
if (node && node->ri) {
/* every bridge has a routerinfo. */
tor_addr_t addr;
routerinfo_t *ri = node->ri;
node_get_addr(node, &addr);
- directory_initiate_command(ri->address, &addr,
- ri->or_port, 0,
- 0, /* don't use conditional consensus url */
- 1, ri->cache_info.identity_digest,
+ directory_initiate_command(&addr,
+ ri->or_port, 0/*no dirport*/,
+ ri->cache_info.identity_digest,
dir_purpose,
router_purpose,
- 0, resource, NULL, 0, if_modified_since);
+ DIRIND_ONEHOP,
+ resource, NULL, 0, if_modified_since);
} else
log_notice(LD_DIR, "Ignoring directory request, since no bridge "
"nodes are available yet.");
@@ -479,24 +507,19 @@ directory_get_from_dirserver(uint8_t dir_purpose, uint8_t router_purpose,
}
}
if (!rs && type != BRIDGE_DIRINFO) {
- /* anybody with a non-zero dirport will do */
- rs = router_pick_directory_server(type, pds_flags);
+ /* */
+ rs = directory_pick_generic_dirserver(type, pds_flags,
+ dir_purpose);
if (!rs) {
- log_info(LD_DIR, "No router found for %s; falling back to "
- "dirserver list.", dir_conn_purpose_to_string(dir_purpose));
- rs = router_pick_trusteddirserver(type, pds_flags);
- if (!rs)
- get_via_tor = 1; /* last resort: try routing it via Tor */
+ /*XXXX024 I'm pretty sure this can never do any good, since
+ * rs isn't set. */
+ get_via_tor = 1; /* last resort: try routing it via Tor */
}
}
}
} else { /* get_via_tor */
/* Never use fascistfirewall; we're going via Tor. */
- if (dir_purpose == DIR_PURPOSE_FETCH_RENDDESC) {
- /* only ask hidserv authorities, any of them will do */
- pds_flags |= PDS_IGNORE_FASCISTFIREWALL|PDS_ALLOW_SELF;
- rs = router_pick_trusteddirserver(HIDSERV_DIRINFO, pds_flags);
- } else {
+ if (1) {
/* anybody with a non-zero dirport will do. Disregard firewalls. */
pds_flags |= PDS_IGNORE_FASCISTFIREWALL;
rs = router_pick_directory_server(type, pds_flags);
@@ -506,13 +529,15 @@ directory_get_from_dirserver(uint8_t dir_purpose, uint8_t router_purpose,
}
}
- if (rs)
+ if (rs) {
+ const dir_indirection_t indirection =
+ get_via_tor ? DIRIND_ANONYMOUS : DIRIND_ONEHOP;
directory_initiate_command_routerstatus(rs, dir_purpose,
router_purpose,
- get_via_tor,
+ indirection,
resource, NULL, 0,
if_modified_since);
- else {
+ } else {
log_notice(LD_DIR,
"While fetching directory info, "
"no running dirservers known. Will try again later. "
@@ -536,7 +561,7 @@ directory_get_from_all_authorities(uint8_t dir_purpose,
dir_purpose == DIR_PURPOSE_FETCH_DETACHED_SIGNATURES);
SMARTLIST_FOREACH_BEGIN(router_get_trusted_dir_servers(),
- trusted_dir_server_t *, ds) {
+ dir_server_t *, ds) {
routerstatus_t *rs;
if (router_digest_is_me(ds->digest))
continue;
@@ -544,17 +569,25 @@ directory_get_from_all_authorities(uint8_t dir_purpose,
continue;
rs = &ds->fake_status;
directory_initiate_command_routerstatus(rs, dir_purpose, router_purpose,
- 0, resource, NULL, 0, 0);
+ DIRIND_ONEHOP, resource, NULL,
+ 0, 0);
} SMARTLIST_FOREACH_END(ds);
}
+/** Return true iff <b>ind</b> requires a multihop circuit. */
+static int
+dirind_is_anon(dir_indirection_t ind)
+{
+ return ind == DIRIND_ANON_DIRPORT || ind == DIRIND_ANONYMOUS;
+}
+
/** Same as directory_initiate_command_routerstatus(), but accepts
* rendezvous data to fetch a hidden service descriptor. */
void
directory_initiate_command_routerstatus_rend(const routerstatus_t *status,
uint8_t dir_purpose,
uint8_t router_purpose,
- int anonymized_connection,
+ dir_indirection_t indirection,
const char *resource,
const char *payload,
size_t payload_len,
@@ -563,10 +596,8 @@ directory_initiate_command_routerstatus_rend(const routerstatus_t *status,
{
const or_options_t *options = get_options();
const node_t *node;
- char address_buf[INET_NTOA_BUF_LEN+1];
- struct in_addr in;
- const char *address;
tor_addr_t addr;
+ const int anonymized_connection = dirind_is_anon(indirection);
node = node_get_by_id(status->identity_digest);
if (!node && anonymized_connection) {
@@ -574,13 +605,6 @@ directory_initiate_command_routerstatus_rend(const routerstatus_t *status,
"don't have its router descriptor.",
routerstatus_describe(status));
return;
- } else if (node) {
- node_get_address_string(node, address_buf, sizeof(address_buf));
- address = address_buf;
- } else {
- in.s_addr = htonl(status->addr);
- tor_inet_ntoa(&in, address_buf, sizeof(address_buf));
- address = address_buf;
}
tor_addr_from_ipv4h(&addr, status->addr);
@@ -594,13 +618,11 @@ directory_initiate_command_routerstatus_rend(const routerstatus_t *status,
return;
}
- directory_initiate_command_rend(address, &addr,
+ directory_initiate_command_rend(&addr,
status->or_port, status->dir_port,
- status->version_supports_conditional_consensus,
- status->version_supports_begindir,
status->identity_digest,
dir_purpose, router_purpose,
- anonymized_connection, resource,
+ indirection, resource,
payload, payload_len, if_modified_since,
rend_query);
}
@@ -609,7 +631,7 @@ directory_initiate_command_routerstatus_rend(const routerstatus_t *status,
* upload or download a server or rendezvous
* descriptor. <b>dir_purpose</b> determines what
* kind of directory connection we're launching, and must be one of
- * DIR_PURPOSE_{FETCH|UPLOAD}_{DIR|RENDDESC|RENDDESC_V2}. <b>router_purpose</b>
+ * DIR_PURPOSE_{FETCH|UPLOAD}_{DIR|RENDDESC_V2}. <b>router_purpose</b>
* specifies the descriptor purposes we have in mind (currently only
* used for FETCH_DIR).
*
@@ -623,7 +645,7 @@ void
directory_initiate_command_routerstatus(const routerstatus_t *status,
uint8_t dir_purpose,
uint8_t router_purpose,
- int anonymized_connection,
+ dir_indirection_t indirection,
const char *resource,
const char *payload,
size_t payload_len,
@@ -631,7 +653,7 @@ directory_initiate_command_routerstatus(const routerstatus_t *status,
{
directory_initiate_command_routerstatus_rend(status, dir_purpose,
router_purpose,
- anonymized_connection, resource,
+ indirection, resource,
payload, payload_len,
if_modified_since, NULL);
}
@@ -647,8 +669,8 @@ directory_conn_is_self_reachability_test(dir_connection_t *conn)
const routerinfo_t *me = router_get_my_routerinfo();
if (me &&
router_digest_is_me(conn->identity_digest) &&
- tor_addr_eq_ipv4h(&conn->_base.addr, me->addr) && /*XXXX prop 118*/
- me->dir_port == conn->_base.port)
+ tor_addr_eq_ipv4h(&conn->base_.addr, me->addr) && /*XXXX prop 118*/
+ me->dir_port == conn->base_.port)
return 1;
}
return 0;
@@ -666,76 +688,35 @@ connection_dir_request_failed(dir_connection_t *conn)
}
if (!entry_list_is_constrained(get_options()))
router_set_status(conn->identity_digest, 0); /* don't try him again */
- if (conn->_base.purpose == DIR_PURPOSE_FETCH_V2_NETWORKSTATUS) {
- log_info(LD_DIR, "Giving up on directory server at '%s'; retrying",
- conn->_base.address);
- connection_dir_download_v2_networkstatus_failed(conn, -1);
- } else if (conn->_base.purpose == DIR_PURPOSE_FETCH_SERVERDESC ||
- conn->_base.purpose == DIR_PURPOSE_FETCH_EXTRAINFO) {
+ if (conn->base_.purpose == DIR_PURPOSE_FETCH_SERVERDESC ||
+ conn->base_.purpose == DIR_PURPOSE_FETCH_EXTRAINFO) {
log_info(LD_DIR, "Giving up on serverdesc/extrainfo fetch from "
"directory server at '%s'; retrying",
- conn->_base.address);
+ conn->base_.address);
if (conn->router_purpose == ROUTER_PURPOSE_BRIDGE)
connection_dir_bridge_routerdesc_failed(conn);
connection_dir_download_routerdesc_failed(conn);
- } else if (conn->_base.purpose == DIR_PURPOSE_FETCH_CONSENSUS) {
+ } else if (conn->base_.purpose == DIR_PURPOSE_FETCH_CONSENSUS) {
if (conn->requested_resource)
networkstatus_consensus_download_failed(0, conn->requested_resource);
- } else if (conn->_base.purpose == DIR_PURPOSE_FETCH_CERTIFICATE) {
+ } else if (conn->base_.purpose == DIR_PURPOSE_FETCH_CERTIFICATE) {
log_info(LD_DIR, "Giving up on certificate fetch from directory server "
"at '%s'; retrying",
- conn->_base.address);
+ conn->base_.address);
connection_dir_download_cert_failed(conn, 0);
- } else if (conn->_base.purpose == DIR_PURPOSE_FETCH_DETACHED_SIGNATURES) {
+ } else if (conn->base_.purpose == DIR_PURPOSE_FETCH_DETACHED_SIGNATURES) {
log_info(LD_DIR, "Giving up downloading detached signatures from '%s'",
- conn->_base.address);
- } else if (conn->_base.purpose == DIR_PURPOSE_FETCH_STATUS_VOTE) {
+ conn->base_.address);
+ } else if (conn->base_.purpose == DIR_PURPOSE_FETCH_STATUS_VOTE) {
log_info(LD_DIR, "Giving up downloading votes from '%s'",
- conn->_base.address);
- } else if (conn->_base.purpose == DIR_PURPOSE_FETCH_MICRODESC) {
+ conn->base_.address);
+ } else if (conn->base_.purpose == DIR_PURPOSE_FETCH_MICRODESC) {
log_info(LD_DIR, "Giving up on downloading microdescriptors from "
- " directory server at '%s'; will retry", conn->_base.address);
+ "directory server at '%s'; will retry", conn->base_.address);
connection_dir_download_routerdesc_failed(conn);
}
}
-/** Called when an attempt to download one or more network status
- * documents on connection <b>conn</b> failed. Decide whether to
- * retry the fetch now, later, or never.
- */
-static void
-connection_dir_download_v2_networkstatus_failed(dir_connection_t *conn,
- int status_code)
-{
- if (!conn->requested_resource) {
- /* We never reached directory_send_command, which means that we never
- * opened a network connection. Either we're out of sockets, or the
- * network is down. Either way, retrying would be pointless. */
- return;
- }
- if (!strcmpstart(conn->requested_resource, "all")) {
- /* We're a non-authoritative directory cache; try again. Ignore status
- * code, since we don't want to keep trying forever in a tight loop
- * if all the authorities are shutting us out. */
- smartlist_t *trusted_dirs = router_get_trusted_dir_servers();
- SMARTLIST_FOREACH(trusted_dirs, trusted_dir_server_t *, ds,
- download_status_failed(&ds->v2_ns_dl_status, 0));
- directory_get_from_dirserver(conn->_base.purpose, conn->router_purpose,
- "all.z", 0 /* don't retry_if_no_servers */);
- } else if (!strcmpstart(conn->requested_resource, "fp/")) {
- /* We were trying to download by fingerprint; mark them all as having
- * failed, and possibly retry them later.*/
- smartlist_t *failed = smartlist_new();
- dir_split_resource_into_fingerprints(conn->requested_resource+3,
- failed, NULL, 0);
- if (smartlist_len(failed)) {
- dir_networkstatus_download_failed(failed, status_code);
- SMARTLIST_FOREACH(failed, char *, cp, tor_free(cp));
- }
- smartlist_free(failed);
- }
-}
-
/** Helper: Attempt to fetch directly the descriptors of each bridge
* listed in <b>failed</b>.
*/
@@ -765,9 +746,9 @@ connection_dir_download_routerdesc_failed(dir_connection_t *conn)
/* No need to relaunch descriptor downloads here: we already do it
* every 10 or 60 seconds (FOO_DESCRIPTOR_RETRY_INTERVAL) in main.c. */
- tor_assert(conn->_base.purpose == DIR_PURPOSE_FETCH_SERVERDESC ||
- conn->_base.purpose == DIR_PURPOSE_FETCH_EXTRAINFO ||
- conn->_base.purpose == DIR_PURPOSE_FETCH_MICRODESC);
+ tor_assert(conn->base_.purpose == DIR_PURPOSE_FETCH_SERVERDESC ||
+ conn->base_.purpose == DIR_PURPOSE_FETCH_EXTRAINFO ||
+ conn->base_.purpose == DIR_PURPOSE_FETCH_MICRODESC);
(void) conn;
}
@@ -791,7 +772,7 @@ connection_dir_bridge_routerdesc_failed(dir_connection_t *conn)
+ strlen("fp/"),
which, NULL, 0);
- tor_assert(conn->_base.purpose != DIR_PURPOSE_FETCH_EXTRAINFO);
+ tor_assert(conn->base_.purpose != DIR_PURPOSE_FETCH_EXTRAINFO);
if (smartlist_len(which)) {
connection_dir_retry_bridges(which);
SMARTLIST_FOREACH(which, char *, cp, tor_free(cp));
@@ -803,19 +784,43 @@ connection_dir_bridge_routerdesc_failed(dir_connection_t *conn)
static void
connection_dir_download_cert_failed(dir_connection_t *conn, int status)
{
+ const char *fp_pfx = "fp/";
+ const char *fpsk_pfx = "fp-sk/";
smartlist_t *failed;
- tor_assert(conn->_base.purpose == DIR_PURPOSE_FETCH_CERTIFICATE);
+ tor_assert(conn->base_.purpose == DIR_PURPOSE_FETCH_CERTIFICATE);
if (!conn->requested_resource)
return;
failed = smartlist_new();
- dir_split_resource_into_fingerprints(conn->requested_resource+3,
- failed, NULL, DSR_HEX);
- SMARTLIST_FOREACH(failed, char *, cp,
- {
- authority_cert_dl_failed(cp, status);
- tor_free(cp);
- });
+ /*
+ * We have two cases download by fingerprint (resource starts
+ * with "fp/") or download by fingerprint/signing key pair
+ * (resource starts with "fp-sk/").
+ */
+ if (!strcmpstart(conn->requested_resource, fp_pfx)) {
+ /* Download by fingerprint case */
+ dir_split_resource_into_fingerprints(conn->requested_resource +
+ strlen(fp_pfx),
+ failed, NULL, DSR_HEX);
+ SMARTLIST_FOREACH_BEGIN(failed, char *, cp) {
+ /* Null signing key digest indicates download by fp only */
+ authority_cert_dl_failed(cp, NULL, status);
+ tor_free(cp);
+ } SMARTLIST_FOREACH_END(cp);
+ } else if (!strcmpstart(conn->requested_resource, fpsk_pfx)) {
+ /* Download by (fp,sk) pairs */
+ dir_split_resource_into_fingerprint_pairs(conn->requested_resource +
+ strlen(fpsk_pfx), failed);
+ SMARTLIST_FOREACH_BEGIN(failed, fp_pair_t *, cp) {
+ authority_cert_dl_failed(cp->first, cp->second, status);
+ tor_free(cp);
+ } SMARTLIST_FOREACH_END(cp);
+ } else {
+ log_warn(LD_DIR,
+ "Don't know what to do with failure for cert fetch %s",
+ conn->requested_resource);
+ }
+
smartlist_free(failed);
update_certificate_downloads(time(NULL));
@@ -833,17 +838,17 @@ static int
directory_command_should_use_begindir(const or_options_t *options,
const tor_addr_t *addr,
int or_port, uint8_t router_purpose,
- int anonymized_connection)
+ dir_indirection_t indirection)
{
+ (void) router_purpose;
if (!or_port)
return 0; /* We don't know an ORPort -- no chance. */
- if (!anonymized_connection)
+ if (indirection == DIRIND_DIRECT_CONN || indirection == DIRIND_ANON_DIRPORT)
+ return 0;
+ if (indirection == DIRIND_ONEHOP)
if (!fascist_firewall_allows_address_or(addr, or_port) ||
directory_fetches_from_authorities(options))
return 0; /* We're firewalled or are acting like a relay -- also no. */
- if (!options->TunnelDirConns &&
- router_purpose != ROUTER_PURPOSE_BRIDGE)
- return 0; /* We prefer to avoid using begindir conns. Fine. */
return 1;
}
@@ -853,19 +858,17 @@ directory_command_should_use_begindir(const or_options_t *options,
* <b>supports_begindir</b>, and whose identity key digest is
* <b>digest</b>. */
void
-directory_initiate_command(const char *address, const tor_addr_t *_addr,
+directory_initiate_command(const tor_addr_t *_addr,
uint16_t or_port, uint16_t dir_port,
- int supports_conditional_consensus,
- int supports_begindir, const char *digest,
+ const char *digest,
uint8_t dir_purpose, uint8_t router_purpose,
- int anonymized_connection, const char *resource,
+ dir_indirection_t indirection, const char *resource,
const char *payload, size_t payload_len,
time_t if_modified_since)
{
- directory_initiate_command_rend(address, _addr, or_port, dir_port,
- supports_conditional_consensus,
- supports_begindir, digest, dir_purpose,
- router_purpose, anonymized_connection,
+ directory_initiate_command_rend(_addr, or_port, dir_port,
+ digest, dir_purpose,
+ router_purpose, indirection,
resource, payload, payload_len,
if_modified_since, NULL);
}
@@ -877,9 +880,7 @@ directory_initiate_command(const char *address, const tor_addr_t *_addr,
static int
is_sensitive_dir_purpose(uint8_t dir_purpose)
{
- return ((dir_purpose == DIR_PURPOSE_FETCH_RENDDESC) ||
- (dir_purpose == DIR_PURPOSE_HAS_FETCHED_RENDDESC) ||
- (dir_purpose == DIR_PURPOSE_UPLOAD_RENDDESC) ||
+ return ((dir_purpose == DIR_PURPOSE_HAS_FETCHED_RENDDESC_V2) ||
(dir_purpose == DIR_PURPOSE_UPLOAD_RENDDESC_V2) ||
(dir_purpose == DIR_PURPOSE_FETCH_RENDDESC_V2));
}
@@ -887,12 +888,11 @@ is_sensitive_dir_purpose(uint8_t dir_purpose)
/** Same as directory_initiate_command(), but accepts rendezvous data to
* fetch a hidden service descriptor. */
static void
-directory_initiate_command_rend(const char *address, const tor_addr_t *_addr,
+directory_initiate_command_rend(const tor_addr_t *_addr,
uint16_t or_port, uint16_t dir_port,
- int supports_conditional_consensus,
- int supports_begindir, const char *digest,
+ const char *digest,
uint8_t dir_purpose, uint8_t router_purpose,
- int anonymized_connection,
+ dir_indirection_t indirection,
const char *resource,
const char *payload, size_t payload_len,
time_t if_modified_since,
@@ -901,12 +901,11 @@ directory_initiate_command_rend(const char *address, const tor_addr_t *_addr,
dir_connection_t *conn;
const or_options_t *options = get_options();
int socket_error = 0;
- int use_begindir = supports_begindir &&
- directory_command_should_use_begindir(options, _addr,
- or_port, router_purpose, anonymized_connection);
+ int use_begindir = directory_command_should_use_begindir(options, _addr,
+ or_port, router_purpose, indirection);
+ const int anonymized_connection = dirind_is_anon(indirection);
tor_addr_t addr;
- tor_assert(address);
tor_assert(_addr);
tor_assert(or_port || dir_port);
tor_assert(digest);
@@ -937,18 +936,19 @@ directory_initiate_command_rend(const char *address, const tor_addr_t *_addr,
conn = dir_connection_new(tor_addr_family(&addr));
/* set up conn so it's got all the data we need to remember */
- tor_addr_copy(&conn->_base.addr, &addr);
- conn->_base.port = use_begindir ? or_port : dir_port;
- conn->_base.address = tor_strdup(address);
+ tor_addr_copy(&conn->base_.addr, &addr);
+ conn->base_.port = use_begindir ? or_port : dir_port;
+ conn->base_.address = tor_dup_addr(&addr);
memcpy(conn->identity_digest, digest, DIGEST_LEN);
- conn->_base.purpose = dir_purpose;
+ conn->base_.purpose = dir_purpose;
conn->router_purpose = router_purpose;
/* give it an initial state */
- conn->_base.state = DIR_CONN_STATE_CONNECTING;
+ conn->base_.state = DIR_CONN_STATE_CONNECTING;
/* decide whether we can learn our IP address from this conn */
+ /* XXXX This is a bad name for this field now. */
conn->dirconn_direct = !anonymized_connection;
/* copy rendezvous data, if any */
@@ -963,7 +963,7 @@ directory_initiate_command_rend(const char *address, const tor_addr_t *_addr,
dir_port = options->HTTPProxyPort;
}
- switch (connection_connect(TO_CONN(conn), conn->_base.address, &addr,
+ switch (connection_connect(TO_CONN(conn), conn->base_.address, &addr,
dir_port, &socket_error)) {
case -1:
connection_dir_request_failed(conn); /* retry if we want */
@@ -973,13 +973,12 @@ directory_initiate_command_rend(const char *address, const tor_addr_t *_addr,
return;
case 1:
/* start flushing conn */
- conn->_base.state = DIR_CONN_STATE_CLIENT_SENDING;
+ conn->base_.state = DIR_CONN_STATE_CLIENT_SENDING;
/* fall through */
case 0:
/* queue the command on the outbuf */
directory_send_command(conn, dir_purpose, 1, resource,
payload, payload_len,
- supports_conditional_consensus,
if_modified_since);
connection_watch_events(TO_CONN(conn), READ_EVENT | WRITE_EVENT);
/* writable indicates finish, readable indicates broken link,
@@ -997,7 +996,7 @@ directory_initiate_command_rend(const char *address, const tor_addr_t *_addr,
if (anonymized_connection && use_begindir)
rep_hist_note_used_internal(time(NULL), 0, 1);
else if (anonymized_connection && !use_begindir)
- rep_hist_note_used_port(time(NULL), conn->_base.port);
+ rep_hist_note_used_port(time(NULL), conn->base_.port);
/* make an AP connection
* populate it and add it at the right state
@@ -1005,7 +1004,7 @@ directory_initiate_command_rend(const char *address, const tor_addr_t *_addr,
*/
linked_conn =
connection_ap_make_link(TO_CONN(conn),
- conn->_base.address, conn->_base.port,
+ conn->base_.address, conn->base_.port,
digest,
SESSION_GROUP_DIRCONN, iso_flags,
use_begindir, conn->dirconn_direct);
@@ -1020,11 +1019,10 @@ directory_initiate_command_rend(const char *address, const tor_addr_t *_addr,
connection_mark_for_close(TO_CONN(conn));
return;
}
- conn->_base.state = DIR_CONN_STATE_CLIENT_SENDING;
+ conn->base_.state = DIR_CONN_STATE_CLIENT_SENDING;
/* queue the command on the outbuf */
directory_send_command(conn, dir_purpose, 0, resource,
payload, payload_len,
- supports_conditional_consensus,
if_modified_since);
connection_watch_events(TO_CONN(conn), READ_EVENT|WRITE_EVENT);
@@ -1054,7 +1052,7 @@ connection_dir_is_encrypted(dir_connection_t *conn)
* sort strings alphabetically
*/
static int
-_compare_strs(const void **a, const void **b)
+compare_strs_(const void **a, const void **b)
{
const char *s1 = *a, *s2 = *b;
return strcmp(s1, s2);
@@ -1074,8 +1072,7 @@ _compare_strs(const void **a, const void **b)
* If 'resource' is provided, it is the name of a consensus flavor to request.
*/
static char *
-directory_get_consensus_url(int supports_conditional_consensus,
- const char *resource)
+directory_get_consensus_url(const char *resource)
{
char *url = NULL;
const char *hyphen, *flavor;
@@ -1087,12 +1084,12 @@ directory_get_consensus_url(int supports_conditional_consensus,
hyphen = "-";
}
- if (supports_conditional_consensus) {
+ {
char *authority_id_list;
smartlist_t *authority_digests = smartlist_new();
SMARTLIST_FOREACH_BEGIN(router_get_trusted_dir_servers(),
- trusted_dir_server_t *, ds) {
+ dir_server_t *, ds) {
char *hex;
if (!(ds->type & V3_DIRINFO))
continue;
@@ -1102,7 +1099,7 @@ directory_get_consensus_url(int supports_conditional_consensus,
ds->v3_identity_digest, CONDITIONAL_CONSENSUS_FPR_LEN);
smartlist_add(authority_digests, hex);
} SMARTLIST_FOREACH_END(ds);
- smartlist_sort(authority_digests, _compare_strs);
+ smartlist_sort(authority_digests, compare_strs_);
authority_id_list = smartlist_join_strings(authority_digests,
"+", 0, NULL);
@@ -1112,9 +1109,6 @@ directory_get_consensus_url(int supports_conditional_consensus,
SMARTLIST_FOREACH(authority_digests, char *, cp, tor_free(cp));
smartlist_free(authority_digests);
tor_free(authority_id_list);
- } else {
- tor_asprintf(&url, "/tor/status-vote/current/consensus%s%s.z",
- hyphen, flavor);
}
return url;
}
@@ -1126,7 +1120,6 @@ static void
directory_send_command(dir_connection_t *conn,
int purpose, int direct, const char *resource,
const char *payload, size_t payload_len,
- int supports_conditional_consensus,
time_t if_modified_since)
{
char proxystring[256];
@@ -1137,18 +1130,18 @@ directory_send_command(dir_connection_t *conn,
const char *httpcommand = NULL;
tor_assert(conn);
- tor_assert(conn->_base.type == CONN_TYPE_DIR);
+ tor_assert(conn->base_.type == CONN_TYPE_DIR);
tor_free(conn->requested_resource);
if (resource)
conn->requested_resource = tor_strdup(resource);
/* come up with a string for which Host: we want */
- if (conn->_base.port == 80) {
- strlcpy(hoststring, conn->_base.address, sizeof(hoststring));
+ if (conn->base_.port == 80) {
+ strlcpy(hoststring, conn->base_.address, sizeof(hoststring));
} else {
tor_snprintf(hoststring, sizeof(hoststring),"%s:%d",
- conn->_base.address, conn->_base.port);
+ conn->base_.address, conn->base_.port);
}
/* Format if-modified-since */
@@ -1180,17 +1173,11 @@ directory_send_command(dir_connection_t *conn,
}
switch (purpose) {
- case DIR_PURPOSE_FETCH_V2_NETWORKSTATUS:
- tor_assert(resource);
- httpcommand = "GET";
- tor_asprintf(&url, "/tor/status/%s", resource);
- break;
case DIR_PURPOSE_FETCH_CONSENSUS:
/* resource is optional. If present, it's a flavor name */
tor_assert(!payload);
httpcommand = "GET";
- url = directory_get_consensus_url(supports_conditional_consensus,
- resource);
+ url = directory_get_consensus_url(resource);
log_info(LD_DIR, "Downloading consensus from %s using %s",
hoststring, url);
break;
@@ -1257,12 +1244,6 @@ directory_send_command(dir_connection_t *conn,
httpcommand = "GET";
tor_asprintf(&url, "/tor/rendezvous2/%s", resource);
break;
- case DIR_PURPOSE_UPLOAD_RENDDESC:
- tor_assert(!resource);
- tor_assert(payload);
- httpcommand = "POST";
- url = tor_strdup("/tor/rendezvous/publish");
- break;
case DIR_PURPOSE_UPLOAD_RENDDESC_V2:
tor_assert(!resource);
tor_assert(payload);
@@ -1318,7 +1299,7 @@ directory_send_command(dir_connection_t *conn,
* so it does. Return 0.
* Otherwise, return -1.
*/
-static int
+STATIC int
parse_http_url(const char *headers, char **url)
{
char *s, *start, *tmp;
@@ -1347,6 +1328,19 @@ parse_http_url(const char *headers, char **url)
}
}
+ /* Check if the header is well formed (next sequence
+ * should be HTTP/1.X\r\n). Assumes we're supporting 1.0? */
+ {
+ unsigned minor_ver;
+ char ch;
+ char *e = (char *)eat_whitespace_no_nl(s);
+ if (2 != tor_sscanf(e, "HTTP/1.%u%c", &minor_ver, &ch)) {
+ return -1;
+ }
+ if (ch != '\r')
+ return -1;
+ }
+
if (s-start < 5 || strcmpstart(start,"/tor/")) { /* need to rewrite it */
*url = tor_malloc(s - start + 5);
strlcpy(*url,"/tor", s-start+5);
@@ -1393,13 +1387,14 @@ http_set_address_origin(const char *headers, connection_t *conn)
if (!fwd)
fwd = http_get_header(headers, "X-Forwarded-For: ");
if (fwd) {
- struct in_addr in;
- if (!tor_inet_aton(fwd, &in) || is_internal_IP(ntohl(in.s_addr), 0)) {
- log_debug(LD_DIR, "Ignoring unrecognized or internal IP %s",
- escaped(fwd));
+ tor_addr_t toraddr;
+ if (tor_addr_parse(&toraddr,fwd) == -1 ||
+ tor_addr_is_internal(&toraddr,0)) {
+ log_debug(LD_DIR, "Ignoring local/internal IP %s", escaped(fwd));
tor_free(fwd);
return;
}
+
tor_free(conn->address);
conn->address = tor_strdup(fwd);
tor_free(fwd);
@@ -1496,8 +1491,8 @@ parse_http_response(const char *headers, int *code, time_t *date,
}
/** Return true iff <b>body</b> doesn't start with a plausible router or
- * running-list or directory opening. This is a sign of possible compression.
- **/
+ * network-status or microdescriptor opening. This is a sign of possible
+ * compression. */
static int
body_is_plausible(const char *body, size_t len, int purpose)
{
@@ -1509,20 +1504,16 @@ body_is_plausible(const char *body, size_t len, int purpose)
if (purpose == DIR_PURPOSE_FETCH_MICRODESC) {
return (!strcmpstart(body,"onion-key"));
}
- if (purpose != DIR_PURPOSE_FETCH_RENDDESC) {
+ if (1) {
if (!strcmpstart(body,"router") ||
- !strcmpstart(body,"signed-directory") ||
- !strcmpstart(body,"network-status") ||
- !strcmpstart(body,"running-routers"))
- return 1;
+ !strcmpstart(body,"network-status"))
+ return 1;
for (i=0;i<32;++i) {
if (!TOR_ISPRINT(body[i]) && !TOR_ISSPACE(body[i]))
return 0;
}
- return 1;
- } else {
- return 1;
}
+ return 1;
}
/** Called when we've just fetched a bunch of router descriptors in
@@ -1557,8 +1548,9 @@ load_downloaded_routers(const char *body, smartlist_t *which,
added = router_load_routers_from_string(body, NULL, SAVED_NOWHERE, which,
descriptor_digests, buf);
- control_event_bootstrap(BOOTSTRAP_STATUS_LOADING_DESCRIPTORS,
- count_loading_descriptors_progress());
+ if (general)
+ control_event_bootstrap(BOOTSTRAP_STATUS_LOADING_DESCRIPTORS,
+ count_loading_descriptors_progress());
return added;
}
@@ -1577,18 +1569,19 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
char *body;
char *headers;
char *reason = NULL;
- size_t body_len=0, orig_len=0;
+ size_t body_len = 0, orig_len = 0;
int status_code;
- time_t date_header=0;
+ time_t date_header = 0;
long delta;
compress_method_t compression;
int plausible;
- int skewed=0;
- int allow_partial = (conn->_base.purpose == DIR_PURPOSE_FETCH_SERVERDESC ||
- conn->_base.purpose == DIR_PURPOSE_FETCH_EXTRAINFO ||
- conn->_base.purpose == DIR_PURPOSE_FETCH_MICRODESC);
- int was_compressed=0;
+ int skewed = 0;
+ int allow_partial = (conn->base_.purpose == DIR_PURPOSE_FETCH_SERVERDESC ||
+ conn->base_.purpose == DIR_PURPOSE_FETCH_EXTRAINFO ||
+ conn->base_.purpose == DIR_PURPOSE_FETCH_MICRODESC);
+ int was_compressed = 0;
time_t now = time(NULL);
+ int src_code;
switch (connection_fetch_from_buf_http(TO_CONN(conn),
&headers, MAX_HEADERS_SIZE,
@@ -1597,7 +1590,7 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
case -1: /* overflow */
log_warn(LD_PROTOCOL,
"'fetch' response too large (server '%s:%d'). Closing.",
- conn->_base.address, conn->_base.port);
+ conn->base_.address, conn->base_.port);
return -1;
case 0:
log_info(LD_HTTP,
@@ -1610,7 +1603,7 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
if (parse_http_response(headers, &status_code, &date_header,
&compression, &reason) < 0) {
log_warn(LD_HTTP,"Unparseable headers (server '%s:%d'). Closing.",
- conn->_base.address, conn->_base.port);
+ conn->base_.address, conn->base_.port);
tor_free(body); tor_free(headers);
return -1;
}
@@ -1619,9 +1612,9 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
log_debug(LD_DIR,
"Received response from directory server '%s:%d': %d %s "
"(purpose: %d)",
- conn->_base.address, conn->_base.port, status_code,
+ conn->base_.address, conn->base_.port, status_code,
escaped(reason),
- conn->_base.purpose);
+ conn->base_.purpose);
/* now check if it's got any hints for us about our IP address. */
if (conn->dirconn_direct) {
@@ -1638,7 +1631,7 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
* and the date header. (We used to check now-date_header, but that's
* inaccurate if we spend a lot of time downloading.)
*/
- delta = conn->_base.timestamp_lastwritten - date_header;
+ delta = conn->base_.timestamp_lastwritten - date_header;
if (labs(delta)>ALLOW_DIRECTORY_TIME_SKEW) {
char dbuf[64];
int trusted = router_digest_is_trusted_dir(conn->identity_digest);
@@ -1649,14 +1642,14 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
"It seems that our clock is %s by %s, or that theirs is %s. "
"Tor requires an accurate clock to work: please check your time, "
"timezone, and date settings.",
- conn->_base.address, conn->_base.port,
+ conn->base_.address, conn->base_.port,
delta>0 ? "ahead" : "behind", dbuf,
delta>0 ? "behind" : "ahead");
skewed = 1; /* don't check the recommended-versions line */
if (trusted)
control_event_general_status(LOG_WARN,
"CLOCK_SKEW SKEW=%ld SOURCE=DIRSERV:%s:%d",
- delta, conn->_base.address, conn->_base.port);
+ delta, conn->base_.address, conn->base_.port);
} else {
log_debug(LD_HTTP, "Time on received directory is within tolerance; "
"we are %ld seconds skewed. (That's okay.)", delta);
@@ -1666,22 +1659,22 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
if (status_code == 503) {
routerstatus_t *rs;
- trusted_dir_server_t *ds;
+ dir_server_t *ds;
const char *id_digest = conn->identity_digest;
log_info(LD_DIR,"Received http status code %d (%s) from server "
"'%s:%d'. I'll try again soon.",
- status_code, escaped(reason), conn->_base.address,
- conn->_base.port);
+ status_code, escaped(reason), conn->base_.address,
+ conn->base_.port);
if ((rs = router_get_mutable_consensus_status_by_id(id_digest)))
rs->last_dir_503_at = now;
- if ((ds = router_get_trusteddirserver_by_digest(id_digest)))
+ if ((ds = router_get_fallback_dirserver_by_digest(id_digest)))
ds->fake_status.last_dir_503_at = now;
tor_free(body); tor_free(headers); tor_free(reason);
return -1;
}
- plausible = body_is_plausible(body, body_len, conn->_base.purpose);
+ plausible = body_is_plausible(body, body_len, conn->base_.purpose);
if (compression != NO_METHOD || !plausible) {
char *new_body = NULL;
size_t new_len = 0;
@@ -1708,7 +1701,7 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
log_info(LD_HTTP, "HTTP body from server '%s:%d' was labeled %s, "
"but it seems to be %s.%s",
- conn->_base.address, conn->_base.port, description1,
+ conn->base_.address, conn->base_.port, description1,
description2,
(compression>0 && guessed>0)?" Trying both.":"");
}
@@ -1728,7 +1721,7 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
if (!plausible && !new_body) {
log_fn(LOG_PROTOCOL_WARN, LD_HTTP,
"Unable to decompress HTTP body (server '%s:%d').",
- conn->_base.address, conn->_base.port);
+ conn->base_.address, conn->base_.port);
tor_free(body); tor_free(headers); tor_free(reason);
return -1;
}
@@ -1740,98 +1733,27 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
}
}
- if (conn->_base.purpose == DIR_PURPOSE_FETCH_V2_NETWORKSTATUS) {
- smartlist_t *which = NULL;
- v2_networkstatus_source_t source;
- char *cp;
- log_info(LD_DIR,"Received networkstatus objects (size %d) from server "
- "'%s:%d'", (int)body_len, conn->_base.address, conn->_base.port);
- if (status_code != 200) {
- static ratelim_t warning_limit = RATELIM_INIT(3600);
- char *m;
- if ((m = rate_limit_log(&warning_limit, now))) {
- log_warn(LD_DIR,
- "Received http status code %d (%s) from server "
- "'%s:%d' while fetching \"/tor/status/%s\". "
- "I'll try again soon.%s",
- status_code, escaped(reason), conn->_base.address,
- conn->_base.port, conn->requested_resource, m);
- tor_free(m);
- }
- tor_free(body); tor_free(headers); tor_free(reason);
- connection_dir_download_v2_networkstatus_failed(conn, status_code);
- return -1;
- }
- if (conn->requested_resource &&
- !strcmpstart(conn->requested_resource,"fp/")) {
- source = NS_FROM_DIR_BY_FP;
- which = smartlist_new();
- dir_split_resource_into_fingerprints(conn->requested_resource+3,
- which, NULL, 0);
- } else if (conn->requested_resource &&
- !strcmpstart(conn->requested_resource, "all")) {
- source = NS_FROM_DIR_ALL;
- which = smartlist_new();
- SMARTLIST_FOREACH(router_get_trusted_dir_servers(),
- trusted_dir_server_t *, ds,
- {
- char *hex = tor_malloc(HEX_DIGEST_LEN+1);
- base16_encode(hex, HEX_DIGEST_LEN+1, ds->digest, DIGEST_LEN);
- smartlist_add(which, hex);
- });
- } else {
- /* XXXX Can we even end up here? -- weasel*/
- source = NS_FROM_DIR_BY_FP;
- log_warn(LD_BUG, "We received a networkstatus but we didn't ask "
- "for it by fp, nor did we ask for all.");
- }
- cp = body;
- while (*cp) {
- char *next = strstr(cp, "\nnetwork-status-version");
- if (next)
- next[1] = '\0';
- /* learn from it, and then remove it from 'which' */
- if (router_set_networkstatus_v2(cp, now, source, which)<0)
- break;
- if (next) {
- next[1] = 'n';
- cp = next+1;
- } else
- break;
- }
- /* launches router downloads as needed */
- routers_update_all_from_networkstatus(now, 2);
- directory_info_has_arrived(now, 0);
- if (which) {
- if (smartlist_len(which)) {
- dir_networkstatus_download_failed(which, status_code);
- }
- SMARTLIST_FOREACH(which, char *, s, tor_free(s));
- smartlist_free(which);
- }
- }
-
- if (conn->_base.purpose == DIR_PURPOSE_FETCH_CONSENSUS) {
+ if (conn->base_.purpose == DIR_PURPOSE_FETCH_CONSENSUS) {
int r;
const char *flavname = conn->requested_resource;
if (status_code != 200) {
int severity = (status_code == 304) ? LOG_INFO : LOG_WARN;
- log(severity, LD_DIR,
+ tor_log(severity, LD_DIR,
"Received http status code %d (%s) from server "
"'%s:%d' while fetching consensus directory.",
- status_code, escaped(reason), conn->_base.address,
- conn->_base.port);
+ status_code, escaped(reason), conn->base_.address,
+ conn->base_.port);
tor_free(body); tor_free(headers); tor_free(reason);
networkstatus_consensus_download_failed(status_code, flavname);
return -1;
}
log_info(LD_DIR,"Received consensus directory (size %d) from server "
- "'%s:%d'", (int)body_len, conn->_base.address, conn->_base.port);
+ "'%s:%d'", (int)body_len, conn->base_.address, conn->base_.port);
if ((r=networkstatus_set_current_consensus(body, flavname, 0))<0) {
log_fn(r<-1?LOG_WARN:LOG_INFO, LD_DIR,
"Unable to load %s consensus directory downloaded from "
"server '%s:%d'. I'll try again soon.",
- flavname, conn->_base.address, conn->_base.port);
+ flavname, conn->base_.address, conn->base_.port);
tor_free(body); tor_free(headers); tor_free(reason);
networkstatus_consensus_download_failed(0, flavname);
return -1;
@@ -1844,40 +1766,60 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
log_info(LD_DIR, "Successfully loaded consensus.");
}
- if (conn->_base.purpose == DIR_PURPOSE_FETCH_CERTIFICATE) {
+ if (conn->base_.purpose == DIR_PURPOSE_FETCH_CERTIFICATE) {
if (status_code != 200) {
log_warn(LD_DIR,
"Received http status code %d (%s) from server "
"'%s:%d' while fetching \"/tor/keys/%s\".",
- status_code, escaped(reason), conn->_base.address,
- conn->_base.port, conn->requested_resource);
+ status_code, escaped(reason), conn->base_.address,
+ conn->base_.port, conn->requested_resource);
connection_dir_download_cert_failed(conn, status_code);
tor_free(body); tor_free(headers); tor_free(reason);
return -1;
}
log_info(LD_DIR,"Received authority certificates (size %d) from server "
- "'%s:%d'", (int)body_len, conn->_base.address, conn->_base.port);
- if (trusted_dirs_load_certs_from_string(body, 0, 1)<0) {
- log_warn(LD_DIR, "Unable to parse fetched certificates");
- /* if we fetched more than one and only some failed, the successful
- * ones got flushed to disk so it's safe to call this on them */
- connection_dir_download_cert_failed(conn, status_code);
+ "'%s:%d'", (int)body_len, conn->base_.address, conn->base_.port);
+
+ /*
+ * Tell trusted_dirs_load_certs_from_string() whether it was by fp
+ * or fp-sk pair.
+ */
+ src_code = -1;
+ if (!strcmpstart(conn->requested_resource, "fp/")) {
+ src_code = TRUSTED_DIRS_CERTS_SRC_DL_BY_ID_DIGEST;
+ } else if (!strcmpstart(conn->requested_resource, "fp-sk/")) {
+ src_code = TRUSTED_DIRS_CERTS_SRC_DL_BY_ID_SK_DIGEST;
+ }
+
+ if (src_code != -1) {
+ if (trusted_dirs_load_certs_from_string(body, src_code, 1)<0) {
+ log_warn(LD_DIR, "Unable to parse fetched certificates");
+ /* if we fetched more than one and only some failed, the successful
+ * ones got flushed to disk so it's safe to call this on them */
+ connection_dir_download_cert_failed(conn, status_code);
+ } else {
+ directory_info_has_arrived(now, 0);
+ log_info(LD_DIR, "Successfully loaded certificates from fetch.");
+ }
} else {
- directory_info_has_arrived(now, 0);
- log_info(LD_DIR, "Successfully loaded certificates from fetch.");
+ log_warn(LD_DIR,
+ "Couldn't figure out what to do with fetched certificates for "
+ "unknown resource %s",
+ conn->requested_resource);
+ connection_dir_download_cert_failed(conn, status_code);
}
}
- if (conn->_base.purpose == DIR_PURPOSE_FETCH_STATUS_VOTE) {
+ if (conn->base_.purpose == DIR_PURPOSE_FETCH_STATUS_VOTE) {
const char *msg;
int st;
log_info(LD_DIR,"Got votes (size %d) from server %s:%d",
- (int)body_len, conn->_base.address, conn->_base.port);
+ (int)body_len, conn->base_.address, conn->base_.port);
if (status_code != 200) {
log_warn(LD_DIR,
"Received http status code %d (%s) from server "
"'%s:%d' while fetching \"/tor/status-vote/next/%s.z\".",
- status_code, escaped(reason), conn->_base.address,
- conn->_base.port, conn->requested_resource);
+ status_code, escaped(reason), conn->base_.address,
+ conn->base_.port, conn->requested_resource);
tor_free(body); tor_free(headers); tor_free(reason);
return -1;
}
@@ -1888,35 +1830,35 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
log_info(LD_DIR, "Added vote(s) successfully [msg: %s]", msg);
}
}
- if (conn->_base.purpose == DIR_PURPOSE_FETCH_DETACHED_SIGNATURES) {
+ if (conn->base_.purpose == DIR_PURPOSE_FETCH_DETACHED_SIGNATURES) {
const char *msg = NULL;
log_info(LD_DIR,"Got detached signatures (size %d) from server %s:%d",
- (int)body_len, conn->_base.address, conn->_base.port);
+ (int)body_len, conn->base_.address, conn->base_.port);
if (status_code != 200) {
log_warn(LD_DIR,
"Received http status code %d (%s) from server '%s:%d' while fetching "
"\"/tor/status-vote/next/consensus-signatures.z\".",
- status_code, escaped(reason), conn->_base.address,
- conn->_base.port);
+ status_code, escaped(reason), conn->base_.address,
+ conn->base_.port);
tor_free(body); tor_free(headers); tor_free(reason);
return -1;
}
- if (dirvote_add_signatures(body, conn->_base.address, &msg)<0) {
+ if (dirvote_add_signatures(body, conn->base_.address, &msg)<0) {
log_warn(LD_DIR, "Problem adding detached signatures from %s:%d: %s",
- conn->_base.address, conn->_base.port, msg?msg:"???");
+ conn->base_.address, conn->base_.port, msg?msg:"???");
}
}
- if (conn->_base.purpose == DIR_PURPOSE_FETCH_SERVERDESC ||
- conn->_base.purpose == DIR_PURPOSE_FETCH_EXTRAINFO) {
- int was_ei = conn->_base.purpose == DIR_PURPOSE_FETCH_EXTRAINFO;
+ if (conn->base_.purpose == DIR_PURPOSE_FETCH_SERVERDESC ||
+ conn->base_.purpose == DIR_PURPOSE_FETCH_EXTRAINFO) {
+ int was_ei = conn->base_.purpose == DIR_PURPOSE_FETCH_EXTRAINFO;
smartlist_t *which = NULL;
int n_asked_for = 0;
int descriptor_digests = conn->requested_resource &&
!strcmpstart(conn->requested_resource,"d/");
log_info(LD_DIR,"Received %s (size %d) from server '%s:%d'",
was_ei ? "extra server info" : "server info",
- (int)body_len, conn->_base.address, conn->_base.port);
+ (int)body_len, conn->base_.address, conn->base_.port);
if (conn->requested_resource &&
(!strcmpstart(conn->requested_resource,"d/") ||
!strcmpstart(conn->requested_resource,"fp/"))) {
@@ -1934,8 +1876,8 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
log_fn(dir_okay ? LOG_INFO : LOG_WARN, LD_DIR,
"Received http status code %d (%s) from server '%s:%d' "
"while fetching \"/tor/server/%s\". I'll try again soon.",
- status_code, escaped(reason), conn->_base.address,
- conn->_base.port, conn->requested_resource);
+ status_code, escaped(reason), conn->base_.address,
+ conn->base_.port, conn->requested_resource);
if (!which) {
connection_dir_download_routerdesc_failed(conn);
} else {
@@ -1969,7 +1911,7 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
// descriptor_digests, conn->router_purpose);
if (load_downloaded_routers(body, which, descriptor_digests,
conn->router_purpose,
- conn->_base.address))
+ conn->base_.address))
directory_info_has_arrived(now, 0);
}
}
@@ -1977,7 +1919,7 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
log_info(LD_DIR, "Received %d/%d %s requested from %s:%d",
n_asked_for-smartlist_len(which), n_asked_for,
was_ei ? "extra-info documents" : "router descriptors",
- conn->_base.address, (int)conn->_base.port);
+ conn->base_.address, (int)conn->base_.port);
if (smartlist_len(which)) {
dir_routerdesc_download_failed(which, status_code,
conn->router_purpose,
@@ -1989,12 +1931,12 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
if (directory_conn_is_self_reachability_test(conn))
router_dirport_found_reachable();
}
- if (conn->_base.purpose == DIR_PURPOSE_FETCH_MICRODESC) {
+ if (conn->base_.purpose == DIR_PURPOSE_FETCH_MICRODESC) {
smartlist_t *which = NULL;
log_info(LD_DIR,"Received answer to microdescriptor request (status %d, "
"size %d) from server '%s:%d'",
- status_code, (int)body_len, conn->_base.address,
- conn->_base.port);
+ status_code, (int)body_len, conn->base_.address,
+ conn->base_.port);
tor_assert(conn->requested_resource &&
!strcmpstart(conn->requested_resource, "d/"));
which = smartlist_new();
@@ -2005,8 +1947,8 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
log_info(LD_DIR, "Received status code %d (%s) from server "
"'%s:%d' while fetching \"/tor/micro/%s\". I'll try again "
"soon.",
- status_code, escaped(reason), conn->_base.address,
- (int)conn->_base.port, conn->requested_resource);
+ status_code, escaped(reason), conn->base_.address,
+ (int)conn->base_.port, conn->requested_resource);
dir_microdesc_download_failed(which, status_code);
SMARTLIST_FOREACH(which, char *, cp, tor_free(cp));
smartlist_free(which);
@@ -2021,16 +1963,18 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
/* Mark remaining ones as failed. */
dir_microdesc_download_failed(which, status_code);
}
+ control_event_bootstrap(BOOTSTRAP_STATUS_LOADING_DESCRIPTORS,
+ count_loading_descriptors_progress());
SMARTLIST_FOREACH(which, char *, cp, tor_free(cp));
smartlist_free(which);
smartlist_free(mds);
}
}
- if (conn->_base.purpose == DIR_PURPOSE_UPLOAD_DIR) {
+ if (conn->base_.purpose == DIR_PURPOSE_UPLOAD_DIR) {
switch (status_code) {
case 200: {
- trusted_dir_server_t *ds =
+ dir_server_t *ds =
router_get_trusteddirserver_by_digest(conn->identity_digest);
char *rejected_hdr = http_get_header(headers,
"X-Descriptor-Not-New: ");
@@ -2053,7 +1997,7 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
"descriptor: finished.");
control_event_server_status(
LOG_NOTICE, "ACCEPTED_SERVER_DESCRIPTOR DIRAUTH=%s:%d",
- conn->_base.address, conn->_base.port);
+ conn->base_.address, conn->base_.port);
ds->has_accepted_serverdesc = 1;
if (directories_have_accepted_server_descriptor())
@@ -2063,112 +2007,75 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
case 400:
log_warn(LD_GENERAL,"http status 400 (%s) response from "
"dirserver '%s:%d'. Please correct.",
- escaped(reason), conn->_base.address, conn->_base.port);
+ escaped(reason), conn->base_.address, conn->base_.port);
control_event_server_status(LOG_WARN,
"BAD_SERVER_DESCRIPTOR DIRAUTH=%s:%d REASON=\"%s\"",
- conn->_base.address, conn->_base.port, escaped(reason));
+ conn->base_.address, conn->base_.port, escaped(reason));
break;
default:
log_warn(LD_GENERAL,
"http status %d (%s) reason unexpected while uploading "
"descriptor to server '%s:%d').",
- status_code, escaped(reason), conn->_base.address,
- conn->_base.port);
+ status_code, escaped(reason), conn->base_.address,
+ conn->base_.port);
break;
}
/* return 0 in all cases, since we don't want to mark any
* dirservers down just because they don't like us. */
}
- if (conn->_base.purpose == DIR_PURPOSE_UPLOAD_VOTE) {
+ if (conn->base_.purpose == DIR_PURPOSE_UPLOAD_VOTE) {
switch (status_code) {
case 200: {
log_notice(LD_DIR,"Uploaded a vote to dirserver %s:%d",
- conn->_base.address, conn->_base.port);
+ conn->base_.address, conn->base_.port);
}
break;
case 400:
log_warn(LD_DIR,"http status 400 (%s) response after uploading "
"vote to dirserver '%s:%d'. Please correct.",
- escaped(reason), conn->_base.address, conn->_base.port);
+ escaped(reason), conn->base_.address, conn->base_.port);
break;
default:
log_warn(LD_GENERAL,
"http status %d (%s) reason unexpected while uploading "
"vote to server '%s:%d').",
- status_code, escaped(reason), conn->_base.address,
- conn->_base.port);
+ status_code, escaped(reason), conn->base_.address,
+ conn->base_.port);
break;
}
/* return 0 in all cases, since we don't want to mark any
* dirservers down just because they don't like us. */
}
- if (conn->_base.purpose == DIR_PURPOSE_UPLOAD_SIGNATURES) {
+ if (conn->base_.purpose == DIR_PURPOSE_UPLOAD_SIGNATURES) {
switch (status_code) {
case 200: {
log_notice(LD_DIR,"Uploaded signature(s) to dirserver %s:%d",
- conn->_base.address, conn->_base.port);
+ conn->base_.address, conn->base_.port);
}
break;
case 400:
log_warn(LD_DIR,"http status 400 (%s) response after uploading "
"signatures to dirserver '%s:%d'. Please correct.",
- escaped(reason), conn->_base.address, conn->_base.port);
+ escaped(reason), conn->base_.address, conn->base_.port);
break;
default:
log_warn(LD_GENERAL,
"http status %d (%s) reason unexpected while uploading "
"signatures to server '%s:%d').",
- status_code, escaped(reason), conn->_base.address,
- conn->_base.port);
+ status_code, escaped(reason), conn->base_.address,
+ conn->base_.port);
break;
}
/* return 0 in all cases, since we don't want to mark any
* dirservers down just because they don't like us. */
}
- if (conn->_base.purpose == DIR_PURPOSE_FETCH_RENDDESC) {
- tor_assert(conn->rend_data);
- log_info(LD_REND,"Received rendezvous descriptor (size %d, status %d "
- "(%s))",
- (int)body_len, status_code, escaped(reason));
- switch (status_code) {
- case 200:
- if (rend_cache_store(body, body_len, 0,
- conn->rend_data->onion_address) < -1) {
- log_warn(LD_REND,"Failed to parse rendezvous descriptor.");
- /* Any pending rendezvous attempts will notice when
- * connection_about_to_close_connection()
- * cleans this dir conn up. */
- /* We could retry. But since v0 descriptors are going out of
- * style, it isn't worth the hassle. We'll do better in v2. */
- } else {
- /* Success, or at least there's a v2 descriptor already
- * present. Notify pending connections about this. */
- conn->_base.purpose = DIR_PURPOSE_HAS_FETCHED_RENDDESC;
- rend_client_desc_trynow(conn->rend_data->onion_address);
- }
- break;
- case 404:
- /* Not there. Pending connections will be notified when
- * connection_about_to_close_connection() cleans this conn up. */
- break;
- case 400:
- log_warn(LD_REND,
- "http status 400 (%s). Dirserver didn't like our "
- "rendezvous query?", escaped(reason));
- break;
- default:
- log_warn(LD_REND,"http status %d (%s) response unexpected while "
- "fetching hidden service descriptor (server '%s:%d').",
- status_code, escaped(reason), conn->_base.address,
- conn->_base.port);
- break;
- }
- }
-
- if (conn->_base.purpose == DIR_PURPOSE_FETCH_RENDDESC_V2) {
+ if (conn->base_.purpose == DIR_PURPOSE_FETCH_RENDDESC_V2) {
+ #define SEND_HS_DESC_FAILED_EVENT() ( \
+ control_event_hs_descriptor_failed(conn->rend_data, \
+ conn->identity_digest) )
tor_assert(conn->rend_data);
log_info(LD_REND,"Received rendezvous descriptor (size %d, status %d "
"(%s))",
@@ -2176,24 +2083,22 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
switch (status_code) {
case 200:
switch (rend_cache_store_v2_desc_as_client(body, conn->rend_data)) {
- case -2:
+ case RCS_BADDESC:
+ case RCS_NOTDIR: /* Impossible */
log_warn(LD_REND,"Fetching v2 rendezvous descriptor failed. "
"Retrying at another directory.");
/* We'll retry when connection_about_to_close_connection()
* cleans this dir conn up. */
+ SEND_HS_DESC_FAILED_EVENT();
break;
- case -1:
- /* We already have a v0 descriptor here. Ignoring this one
- * and _not_ performing another request. */
- log_info(LD_REND, "Successfully fetched v2 rendezvous "
- "descriptor, but we already have a v0 descriptor.");
- conn->_base.purpose = DIR_PURPOSE_HAS_FETCHED_RENDDESC;
- break;
+ case RCS_OKAY:
default:
/* success. notify pending connections about this. */
log_info(LD_REND, "Successfully fetched v2 rendezvous "
"descriptor.");
- conn->_base.purpose = DIR_PURPOSE_HAS_FETCHED_RENDDESC;
+ control_event_hs_descriptor_received(conn->rend_data,
+ conn->identity_digest);
+ conn->base_.purpose = DIR_PURPOSE_HAS_FETCHED_RENDDESC_V2;
rend_client_desc_trynow(conn->rend_data->onion_address);
break;
}
@@ -2203,26 +2108,28 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
* connection_about_to_close_connection() cleans this conn up. */
log_info(LD_REND,"Fetching v2 rendezvous descriptor failed: "
"Retrying at another directory.");
+ SEND_HS_DESC_FAILED_EVENT();
break;
case 400:
log_warn(LD_REND, "Fetching v2 rendezvous descriptor failed: "
"http status 400 (%s). Dirserver didn't like our "
"v2 rendezvous query? Retrying at another directory.",
escaped(reason));
+ SEND_HS_DESC_FAILED_EVENT();
break;
default:
log_warn(LD_REND, "Fetching v2 rendezvous descriptor failed: "
"http status %d (%s) response unexpected while "
"fetching v2 hidden service descriptor (server '%s:%d'). "
"Retrying at another directory.",
- status_code, escaped(reason), conn->_base.address,
- conn->_base.port);
+ status_code, escaped(reason), conn->base_.address,
+ conn->base_.port);
+ SEND_HS_DESC_FAILED_EVENT();
break;
}
}
- if (conn->_base.purpose == DIR_PURPOSE_UPLOAD_RENDDESC ||
- conn->_base.purpose == DIR_PURPOSE_UPLOAD_RENDDESC_V2) {
+ if (conn->base_.purpose == DIR_PURPOSE_UPLOAD_RENDDESC_V2) {
log_info(LD_REND,"Uploaded rendezvous descriptor (status %d "
"(%s))",
status_code, escaped(reason));
@@ -2235,17 +2142,17 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
case 400:
log_warn(LD_REND,"http status 400 (%s) response from dirserver "
"'%s:%d'. Malformed rendezvous descriptor?",
- escaped(reason), conn->_base.address, conn->_base.port);
+ escaped(reason), conn->base_.address, conn->base_.port);
break;
default:
log_warn(LD_REND,"http status %d (%s) response unexpected (server "
"'%s:%d').",
- status_code, escaped(reason), conn->_base.address,
- conn->_base.port);
+ status_code, escaped(reason), conn->base_.address,
+ conn->base_.port);
break;
}
}
- note_client_request(conn->_base.purpose, was_compressed, orig_len);
+ note_client_request(conn->base_.purpose, was_compressed, orig_len);
tor_free(body); tor_free(headers); tor_free(reason);
return 0;
}
@@ -2255,9 +2162,9 @@ int
connection_dir_reached_eof(dir_connection_t *conn)
{
int retval;
- if (conn->_base.state != DIR_CONN_STATE_CLIENT_READING) {
+ if (conn->base_.state != DIR_CONN_STATE_CLIENT_READING) {
log_info(LD_HTTP,"conn reached eof, not reading. [state=%d] Closing.",
- conn->_base.state);
+ conn->base_.state);
connection_close_immediate(TO_CONN(conn)); /* error: give up on flushing */
connection_mark_for_close(TO_CONN(conn));
return -1;
@@ -2265,7 +2172,7 @@ connection_dir_reached_eof(dir_connection_t *conn)
retval = connection_dir_client_reached_eof(conn);
if (retval == 0) /* success */
- conn->_base.state = DIR_CONN_STATE_CLIENT_FINISHED;
+ conn->base_.state = DIR_CONN_STATE_CLIENT_FINISHED;
connection_mark_for_close(TO_CONN(conn));
return retval;
}
@@ -2283,7 +2190,7 @@ int
connection_dir_process_inbuf(dir_connection_t *conn)
{
tor_assert(conn);
- tor_assert(conn->_base.type == CONN_TYPE_DIR);
+ tor_assert(conn->base_.type == CONN_TYPE_DIR);
/* Directory clients write, then read data until they receive EOF;
* directory servers read data until they get an HTTP command, then
@@ -2292,7 +2199,7 @@ connection_dir_process_inbuf(dir_connection_t *conn)
*/
/* If we're on the dirserver side, look for a command. */
- if (conn->_base.state == DIR_CONN_STATE_SERVER_COMMAND_WAIT) {
+ if (conn->base_.state == DIR_CONN_STATE_SERVER_COMMAND_WAIT) {
if (directory_handle_command(conn) < 0) {
connection_mark_for_close(TO_CONN(conn));
return -1;
@@ -2307,7 +2214,7 @@ connection_dir_process_inbuf(dir_connection_t *conn)
return -1;
}
- if (!conn->_base.inbuf_reached_eof)
+ if (!conn->base_.inbuf_reached_eof)
log_debug(LD_HTTP,"Got data, not eof. Leaving on inbuf.");
return 0;
}
@@ -2326,7 +2233,7 @@ connection_dir_about_to_close(dir_connection_t *dir_conn)
}
/* If we were trying to fetch a v2 rend desc and did not succeed,
* retry as needed. (If a fetch is successful, the connection state
- * is changed to DIR_PURPOSE_HAS_FETCHED_RENDDESC to mark that
+ * is changed to DIR_PURPOSE_HAS_FETCHED_RENDDESC_V2 to mark that
* refetching is unnecessary.) */
if (conn->purpose == DIR_PURPOSE_FETCH_RENDDESC_V2 &&
dir_conn->rend_data &&
@@ -2380,12 +2287,12 @@ write_http_response_header_impl(dir_connection_t *conn, ssize_t length,
tor_snprintf(cp, sizeof(tmp)-(cp-tmp), "Content-Type: %s\r\n", type);
cp += strlen(cp);
}
- if (!is_local_addr(&conn->_base.addr)) {
+ if (!is_local_addr(&conn->base_.addr)) {
/* Don't report the source address for a nearby/private connection.
* Otherwise we tend to mis-report in cases where incoming ports are
* being forwarded to a Tor server running behind the firewall. */
tor_snprintf(cp, sizeof(tmp)-(cp-tmp),
- X_ADDRESS_HEADER "%s\r\n", conn->_base.address);
+ X_ADDRESS_HEADER "%s\r\n", conn->base_.address);
cp += strlen(cp);
}
if (encoding) {
@@ -2400,7 +2307,7 @@ write_http_response_header_impl(dir_connection_t *conn, ssize_t length,
}
if (cache_lifetime > 0) {
char expbuf[RFC1123_TIME_LEN+1];
- format_rfc1123_time(expbuf, now + cache_lifetime);
+ format_rfc1123_time(expbuf, (time_t)(now + cache_lifetime));
/* We could say 'Cache-control: max-age=%d' here if we start doing
* http/1.1 */
tor_snprintf(cp, sizeof(tmp)-(cp-tmp),
@@ -2457,7 +2364,6 @@ note_client_request(int purpose, int compressed, size_t bytes)
char *key;
const char *kind = NULL;
switch (purpose) {
- case DIR_PURPOSE_FETCH_V2_NETWORKSTATUS: kind = "dl/status"; break;
case DIR_PURPOSE_FETCH_CONSENSUS: kind = "dl/consensus"; break;
case DIR_PURPOSE_FETCH_CERTIFICATE: kind = "dl/cert"; break;
case DIR_PURPOSE_FETCH_STATUS_VOTE: kind = "dl/vote"; break;
@@ -2468,9 +2374,7 @@ note_client_request(int purpose, int compressed, size_t bytes)
case DIR_PURPOSE_UPLOAD_DIR: kind = "dl/ul-dir"; break;
case DIR_PURPOSE_UPLOAD_VOTE: kind = "dl/ul-vote"; break;
case DIR_PURPOSE_UPLOAD_SIGNATURES: kind = "dl/ul-sig"; break;
- case DIR_PURPOSE_FETCH_RENDDESC: kind = "dl/rend"; break;
case DIR_PURPOSE_FETCH_RENDDESC_V2: kind = "dl/rend2"; break;
- case DIR_PURPOSE_UPLOAD_RENDDESC: kind = "dl/ul-rend"; break;
case DIR_PURPOSE_UPLOAD_RENDDESC_V2: kind = "dl/ul-rend2"; break;
}
if (kind) {
@@ -2637,7 +2541,7 @@ directory_handle_command_get(dir_connection_t *conn, const char *headers,
log_debug(LD_DIRSERV,"Received GET command.");
- conn->_base.state = DIR_CONN_STATE_SERVER_WRITING;
+ conn->base_.state = DIR_CONN_STATE_SERVER_WRITING;
if (parse_http_url(headers, &url) < 0) {
write_http_status_line(conn, 400, "Bad request");
@@ -2682,98 +2586,13 @@ directory_handle_command_get(dir_connection_t *conn, const char *headers,
/* if no disclaimer file, fall through and continue */
}
- if (!strcmp(url,"/tor/") || !strcmp(url,"/tor/dir")) { /* v1 dir fetch */
- cached_dir_t *d = dirserv_get_directory();
-
- if (!d) {
- log_info(LD_DIRSERV,"Client asked for the mirrored directory, but we "
- "don't have a good one yet. Sending 503 Dir not available.");
- write_http_status_line(conn, 503, "Directory unavailable");
- goto done;
- }
- if (d->published < if_modified_since) {
- write_http_status_line(conn, 304, "Not modified");
- goto done;
- }
-
- dlen = compressed ? d->dir_z_len : d->dir_len;
-
- if (global_write_bucket_low(TO_CONN(conn), dlen, 1)) {
- log_debug(LD_DIRSERV,
- "Client asked for the mirrored directory, but we've been "
- "writing too many bytes lately. Sending 503 Dir busy.");
- write_http_status_line(conn, 503, "Directory busy, try again later");
- goto done;
- }
-
- note_request(url, dlen);
-
- log_debug(LD_DIRSERV,"Dumping %sdirectory to client.",
- compressed?"compressed ":"");
- write_http_response_header(conn, dlen, compressed,
- FULL_DIR_CACHE_LIFETIME);
- conn->cached_dir = d;
- conn->cached_dir_offset = 0;
- if (!compressed)
- conn->zlib_state = tor_zlib_new(0, ZLIB_METHOD);
- ++d->refcnt;
-
- /* Prime the connection with some data. */
- conn->dir_spool_src = DIR_SPOOL_CACHED_DIR;
- connection_dirserv_flushed_some(conn);
- goto done;
- }
-
- if (!strcmp(url,"/tor/running-routers")) { /* running-routers fetch */
- cached_dir_t *d = dirserv_get_runningrouters();
- if (!d) {
- write_http_status_line(conn, 503, "Directory unavailable");
- goto done;
- }
- if (d->published < if_modified_since) {
- write_http_status_line(conn, 304, "Not modified");
- goto done;
- }
- dlen = compressed ? d->dir_z_len : d->dir_len;
-
- if (global_write_bucket_low(TO_CONN(conn), dlen, 1)) {
- log_info(LD_DIRSERV,
- "Client asked for running-routers, but we've been "
- "writing too many bytes lately. Sending 503 Dir busy.");
- write_http_status_line(conn, 503, "Directory busy, try again later");
- goto done;
- }
- note_request(url, dlen);
- write_http_response_header(conn, dlen, compressed,
- RUNNINGROUTERS_CACHE_LIFETIME);
- connection_write_to_buf(compressed ? d->dir_z : d->dir, dlen,
- TO_CONN(conn));
- goto done;
- }
-
- if (!strcmpstart(url,"/tor/status/")
- || !strcmpstart(url, "/tor/status-vote/current/consensus")) {
- /* v2 or v3 network status fetch. */
+ if (!strcmpstart(url, "/tor/status-vote/current/consensus")) {
+ /* v3 network status fetch. */
smartlist_t *dir_fps = smartlist_new();
- int is_v3 = !strcmpstart(url, "/tor/status-vote");
- geoip_client_action_t act =
- is_v3 ? GEOIP_CLIENT_NETWORKSTATUS : GEOIP_CLIENT_NETWORKSTATUS_V2;
const char *request_type = NULL;
- const char *key = url + strlen("/tor/status/");
long lifetime = NETWORKSTATUS_CACHE_LIFETIME;
- if (!is_v3) {
- dirserv_get_networkstatus_v2_fingerprints(dir_fps, key);
- if (!strcmpstart(key, "fp/"))
- request_type = compressed?"/tor/status/fp.z":"/tor/status/fp";
- else if (!strcmpstart(key, "authority"))
- request_type = compressed?"/tor/status/authority.z":
- "/tor/status/authority";
- else if (!strcmpstart(key, "all"))
- request_type = compressed?"/tor/status/all.z":"/tor/status/all";
- else
- request_type = "/tor/status/?";
- } else {
+ if (1) {
networkstatus_t *v;
time_t now = time(NULL);
const char *want_fps = NULL;
@@ -2807,7 +2626,7 @@ directory_handle_command_get(dir_connection_t *conn, const char *headers,
write_http_status_line(conn, 404, "Consensus not signed by sufficient "
"number of requested authorities");
smartlist_free(dir_fps);
- geoip_note_ns_response(act, GEOIP_REJECT_NOT_ENOUGH_SIGS);
+ geoip_note_ns_response(GEOIP_REJECT_NOT_ENOUGH_SIGS);
tor_free(flavor);
goto done;
}
@@ -2826,7 +2645,7 @@ directory_handle_command_get(dir_connection_t *conn, const char *headers,
if (!smartlist_len(dir_fps)) { /* we failed to create/cache cp */
write_http_status_line(conn, 503, "Network status object unavailable");
smartlist_free(dir_fps);
- geoip_note_ns_response(act, GEOIP_REJECT_UNAVAILABLE);
+ geoip_note_ns_response(GEOIP_REJECT_UNAVAILABLE);
goto done;
}
@@ -2834,13 +2653,13 @@ directory_handle_command_get(dir_connection_t *conn, const char *headers,
write_http_status_line(conn, 404, "Not found");
SMARTLIST_FOREACH(dir_fps, char *, cp, tor_free(cp));
smartlist_free(dir_fps);
- geoip_note_ns_response(act, GEOIP_REJECT_NOT_FOUND);
+ geoip_note_ns_response(GEOIP_REJECT_NOT_FOUND);
goto done;
} else if (!smartlist_len(dir_fps)) {
write_http_status_line(conn, 304, "Not modified");
SMARTLIST_FOREACH(dir_fps, char *, cp, tor_free(cp));
smartlist_free(dir_fps);
- geoip_note_ns_response(act, GEOIP_REJECT_NOT_MODIFIED);
+ geoip_note_ns_response(GEOIP_REJECT_NOT_MODIFIED);
goto done;
}
@@ -2852,24 +2671,26 @@ directory_handle_command_get(dir_connection_t *conn, const char *headers,
write_http_status_line(conn, 503, "Directory busy, try again later");
SMARTLIST_FOREACH(dir_fps, char *, fp, tor_free(fp));
smartlist_free(dir_fps);
- geoip_note_ns_response(act, GEOIP_REJECT_BUSY);
+
+ geoip_note_ns_response(GEOIP_REJECT_BUSY);
goto done;
}
- {
+ if (1) {
struct in_addr in;
tor_addr_t addr;
if (tor_inet_aton((TO_CONN(conn))->address, &in)) {
tor_addr_from_ipv4h(&addr, ntohl(in.s_addr));
- geoip_note_client_seen(act, &addr, time(NULL));
- geoip_note_ns_response(act, GEOIP_SUCCESS);
+ geoip_note_client_seen(GEOIP_CLIENT_NETWORKSTATUS,
+ &addr, NULL,
+ time(NULL));
+ geoip_note_ns_response(GEOIP_SUCCESS);
/* Note that a request for a network status has started, so that we
* can measure the download time later on. */
- if (TO_CONN(conn)->dirreq_id)
- geoip_start_dirreq(TO_CONN(conn)->dirreq_id, dlen, act,
- DIRREQ_TUNNELED);
+ if (conn->dirreq_id)
+ geoip_start_dirreq(conn->dirreq_id, dlen, DIRREQ_TUNNELED);
else
- geoip_start_dirreq(TO_CONN(conn)->global_identifier, dlen, act,
+ geoip_start_dirreq(TO_CONN(conn)->global_identifier, dlen,
DIRREQ_DIRECT);
}
}
@@ -3204,34 +3025,8 @@ directory_handle_command_get(dir_connection_t *conn, const char *headers,
goto done;
}
- if (options->HSAuthoritativeDir && !strcmpstart(url,"/tor/rendezvous/")) {
- /* rendezvous descriptor fetch */
- const char *descp;
- size_t desc_len;
- const char *query = url+strlen("/tor/rendezvous/");
-
- log_info(LD_REND, "Handling rendezvous descriptor get");
- switch (rend_cache_lookup_desc(query, 0, &descp, &desc_len)) {
- case 1: /* valid */
- write_http_response_header_impl(conn, desc_len,
- "application/octet-stream",
- NULL, NULL, 0);
- note_request("/tor/rendezvous?/", desc_len);
- /* need to send descp separately, because it may include NULs */
- connection_write_to_buf(descp, desc_len, TO_CONN(conn));
- break;
- case 0: /* well-formed but not present */
- write_http_status_line(conn, 404, "Not found");
- break;
- case -1: /* not well-formed */
- write_http_status_line(conn, 400, "Bad request");
- break;
- }
- goto done;
- }
-
if (options->BridgeAuthoritativeDir &&
- options->_BridgePassword_AuthDigest &&
+ options->BridgePassword_AuthDigest_ &&
connection_dir_is_encrypted(conn) &&
!strcmp(url,"/tor/networkstatus-bridges")) {
char *status;
@@ -3244,7 +3039,7 @@ directory_handle_command_get(dir_connection_t *conn, const char *headers,
/* now make sure the password is there and right */
if (!header ||
tor_memneq(digest,
- options->_BridgePassword_AuthDigest, DIGEST256_LEN)) {
+ options->BridgePassword_AuthDigest_, DIGEST256_LEN)) {
write_http_status_line(conn, 404, "Not found");
tor_free(header);
goto done;
@@ -3278,29 +3073,13 @@ directory_handle_command_get(dir_connection_t *conn, const char *headers,
goto done;
}
- if (!strcmp(url,"/tor/dbg-stability.txt")) {
- const char *stability;
- size_t len;
- if (options->BridgeAuthoritativeDir ||
- ! authdir_mode_tests_reachability(options) ||
- ! (stability = rep_hist_get_router_stability_doc(time(NULL)))) {
- write_http_status_line(conn, 404, "Not found.");
- goto done;
- }
-
- len = strlen(stability);
- write_http_response_header(conn, len, 0, 0);
- connection_write_to_buf(stability, len, TO_CONN(conn));
- goto done;
- }
-
#if defined(EXPORTMALLINFO) && defined(HAVE_MALLOC_H) && defined(HAVE_MALLINFO)
#define ADD_MALLINFO_LINE(x) do { \
smartlist_add_asprintf(lines, "%s %d\n", #x, mi.x); \
}while(0);
if (!strcmp(url,"/tor/mallinfo.txt") &&
- (tor_addr_eq_ipv4h(&conn->_base.addr, 0x7f000001ul))) {
+ (tor_addr_eq_ipv4h(&conn->base_.addr, 0x7f000001ul))) {
char *result;
size_t len;
struct mallinfo mi;
@@ -3355,7 +3134,7 @@ directory_handle_command_post(dir_connection_t *conn, const char *headers,
log_debug(LD_DIRSERV,"Received POST command.");
- conn->_base.state = DIR_CONN_STATE_SERVER_WRITING;
+ conn->base_.state = DIR_CONN_STATE_SERVER_WRITING;
if (parse_http_url(headers, &url) < 0) {
write_http_status_line(conn, 400, "Bad request");
@@ -3368,19 +3147,20 @@ directory_handle_command_post(dir_connection_t *conn, const char *headers,
connection_dir_is_encrypted(conn) &&
!strcmpstart(url,"/tor/rendezvous2/publish")) {
switch (rend_cache_store_v2_desc_as_dir(body)) {
- case -2:
+ case RCS_NOTDIR:
log_info(LD_REND, "Rejected v2 rend descriptor (length %d) from %s "
"since we're not currently a hidden service directory.",
- (int)body_len, conn->_base.address);
+ (int)body_len, conn->base_.address);
write_http_status_line(conn, 503, "Currently not acting as v2 "
"hidden service directory");
break;
- case -1:
+ case RCS_BADDESC:
log_warn(LD_REND, "Rejected v2 rend descriptor (length %d) from %s.",
- (int)body_len, conn->_base.address);
+ (int)body_len, conn->base_.address);
write_http_status_line(conn, 400,
"Invalid v2 service descriptor rejected");
break;
+ case RCS_OKAY:
default:
write_http_status_line(conn, 200, "Service descriptor (v2) stored");
log_info(LD_REND, "Handled v2 rendezvous descriptor post: accepted");
@@ -3402,17 +3182,15 @@ directory_handle_command_post(dir_connection_t *conn, const char *headers,
uint8_t purpose = authdir_mode_bridge(options) ?
ROUTER_PURPOSE_BRIDGE : ROUTER_PURPOSE_GENERAL;
was_router_added_t r = dirserv_add_multiple_descriptors(body, purpose,
- conn->_base.address, &msg);
+ conn->base_.address, &msg);
tor_assert(msg);
- if (WRA_WAS_ADDED(r))
- dirserv_get_directory(); /* rebuild and write to disk */
if (r == ROUTER_ADDED_NOTIFY_GENERATOR) {
/* Accepted with a message. */
log_info(LD_DIRSERV,
"Problematic router descriptor or extra-info from %s "
"(\"%s\").",
- conn->_base.address, msg);
+ conn->base_.address, msg);
write_http_status_line(conn, 400, msg);
} else if (r == ROUTER_ADDED_SUCCESSFULLY) {
write_http_status_line(conn, 200, msg);
@@ -3423,28 +3201,12 @@ directory_handle_command_post(dir_connection_t *conn, const char *headers,
log_info(LD_DIRSERV,
"Rejected router descriptor or extra-info from %s "
"(\"%s\").",
- conn->_base.address, msg);
+ conn->base_.address, msg);
write_http_status_line(conn, 400, msg);
}
goto done;
}
- if (options->HSAuthoritativeDir &&
- !strcmpstart(url,"/tor/rendezvous/publish")) {
- /* rendezvous descriptor post */
- log_info(LD_REND, "Handling rendezvous descriptor post.");
- if (rend_cache_store(body, body_len, 1, NULL) < 0) {
- log_fn(LOG_PROTOCOL_WARN, LD_DIRSERV,
- "Rejected rend descriptor (length %d) from %s.",
- (int)body_len, conn->_base.address);
- write_http_status_line(conn, 400,
- "Invalid v0 service descriptor rejected");
- } else {
- write_http_status_line(conn, 200, "Service descriptor (v0) stored");
- }
- goto done;
- }
-
if (authdir_mode_v3(options) &&
!strcmp(url,"/tor/post/vote")) { /* v3 networkstatus vote */
const char *msg = "OK";
@@ -3454,7 +3216,7 @@ directory_handle_command_post(dir_connection_t *conn, const char *headers,
} else {
tor_assert(msg);
log_warn(LD_DIRSERV, "Rejected vote from %s (\"%s\").",
- conn->_base.address, msg);
+ conn->base_.address, msg);
write_http_status_line(conn, status, msg);
}
goto done;
@@ -3463,11 +3225,11 @@ directory_handle_command_post(dir_connection_t *conn, const char *headers,
if (authdir_mode_v3(options) &&
!strcmp(url,"/tor/post/consensus-signature")) { /* sigs on consensus. */
const char *msg = NULL;
- if (dirvote_add_signatures(body, conn->_base.address, &msg)>=0) {
+ if (dirvote_add_signatures(body, conn->base_.address, &msg)>=0) {
write_http_status_line(conn, 200, msg?msg:"Signatures stored");
} else {
log_warn(LD_DIR, "Unable to store signatures posted by %s: %s",
- conn->_base.address, msg?msg:"???");
+ conn->base_.address, msg?msg:"???");
write_http_status_line(conn, 400, msg?msg:"Unable to store signatures");
}
goto done;
@@ -3494,7 +3256,7 @@ directory_handle_command(dir_connection_t *conn)
int r;
tor_assert(conn);
- tor_assert(conn->_base.type == CONN_TYPE_DIR);
+ tor_assert(conn->base_.type == CONN_TYPE_DIR);
switch (connection_fetch_from_buf_http(TO_CONN(conn),
&headers, MAX_HEADERS_SIZE,
@@ -3502,7 +3264,7 @@ directory_handle_command(dir_connection_t *conn)
case -1: /* overflow */
log_warn(LD_DIRSERV,
"Request too large from address '%s' to DirPort. Closing.",
- safe_str(conn->_base.address));
+ safe_str(conn->base_.address));
return -1;
case 0:
log_debug(LD_DIRSERV,"command not all here yet.");
@@ -3536,23 +3298,23 @@ int
connection_dir_finished_flushing(dir_connection_t *conn)
{
tor_assert(conn);
- tor_assert(conn->_base.type == CONN_TYPE_DIR);
+ tor_assert(conn->base_.type == CONN_TYPE_DIR);
/* Note that we have finished writing the directory response. For direct
* connections this means we're done, for tunneled connections its only
* an intermediate step. */
- if (TO_CONN(conn)->dirreq_id)
- geoip_change_dirreq_state(TO_CONN(conn)->dirreq_id, DIRREQ_TUNNELED,
+ if (conn->dirreq_id)
+ geoip_change_dirreq_state(conn->dirreq_id, DIRREQ_TUNNELED,
DIRREQ_FLUSHING_DIR_CONN_FINISHED);
else
geoip_change_dirreq_state(TO_CONN(conn)->global_identifier,
DIRREQ_DIRECT,
DIRREQ_FLUSHING_DIR_CONN_FINISHED);
- switch (conn->_base.state) {
+ switch (conn->base_.state) {
case DIR_CONN_STATE_CONNECTING:
case DIR_CONN_STATE_CLIENT_SENDING:
log_debug(LD_DIR,"client finished sending command.");
- conn->_base.state = DIR_CONN_STATE_CLIENT_READING;
+ conn->base_.state = DIR_CONN_STATE_CLIENT_READING;
return 0;
case DIR_CONN_STATE_SERVER_WRITING:
if (conn->dir_spool_src != DIR_SPOOL_NONE) {
@@ -3573,7 +3335,7 @@ connection_dir_finished_flushing(dir_connection_t *conn)
return 0;
default:
log_warn(LD_BUG,"called in unexpected state %d.",
- conn->_base.state);
+ conn->base_.state);
tor_fragile_assert();
return -1;
}
@@ -3586,90 +3348,37 @@ int
connection_dir_finished_connecting(dir_connection_t *conn)
{
tor_assert(conn);
- tor_assert(conn->_base.type == CONN_TYPE_DIR);
- tor_assert(conn->_base.state == DIR_CONN_STATE_CONNECTING);
+ tor_assert(conn->base_.type == CONN_TYPE_DIR);
+ tor_assert(conn->base_.state == DIR_CONN_STATE_CONNECTING);
log_debug(LD_HTTP,"Dir connection to router %s:%u established.",
- conn->_base.address,conn->_base.port);
+ conn->base_.address,conn->base_.port);
- conn->_base.state = DIR_CONN_STATE_CLIENT_SENDING; /* start flushing conn */
+ conn->base_.state = DIR_CONN_STATE_CLIENT_SENDING; /* start flushing conn */
return 0;
}
-/** Called when one or more networkstatus fetches have failed (with uppercase
- * fingerprints listed in <b>failed</b>). Mark those fingerprints as having
- * failed once, unless they failed with status code 503. */
-static void
-dir_networkstatus_download_failed(smartlist_t *failed, int status_code)
-{
- if (status_code == 503)
- return;
- SMARTLIST_FOREACH_BEGIN(failed, const char *, fp) {
- char digest[DIGEST_LEN];
- trusted_dir_server_t *dir;
- if (base16_decode(digest, DIGEST_LEN, fp, strlen(fp))<0) {
- log_warn(LD_BUG, "Called with bad fingerprint in list: %s",
- escaped(fp));
- continue;
- }
- dir = router_get_trusteddirserver_by_digest(digest);
-
- if (dir)
- download_status_failed(&dir->v2_ns_dl_status, status_code);
- } SMARTLIST_FOREACH_END(fp);
-}
-
-/** Schedule for when servers should download things in general. */
-static const int server_dl_schedule[] = {
- 0, 0, 0, 60, 60, 60*2, 60*5, 60*15, INT_MAX
-};
-/** Schedule for when clients should download things in general. */
-static const int client_dl_schedule[] = {
- 0, 0, 60, 60*5, 60*10, INT_MAX
-};
-/** Schedule for when servers should download consensuses. */
-static const int server_consensus_dl_schedule[] = {
- 0, 0, 60, 60*5, 60*10, 60*30, 60*30, 60*30, 60*30, 60*30, 60*60, 60*60*2
-};
-/** Schedule for when clients should download consensuses. */
-static const int client_consensus_dl_schedule[] = {
- 0, 0, 60, 60*5, 60*10, 60*30, 60*60, 60*60, 60*60, 60*60*3, 60*60*6, 60*60*12
-};
-/** Schedule for when clients should download bridge descriptors. */
-static const int bridge_dl_schedule[] = {
- 60*60, 15*60, 15*60, 60*60
-};
-
-/** Decide which download schedule we want to use, and then return a
- * pointer to it along with a pointer to its length. Helper function for
- * download_status_increment_failure() and download_status_reset(). */
-static void
-find_dl_schedule_and_len(download_status_t *dls, int server,
- const int **schedule, size_t *schedule_len)
+/** Decide which download schedule we want to use based on descriptor type
+ * in <b>dls</b> and whether we are acting as directory <b>server</b>, and
+ * then return a list of int pointers defining download delays in seconds.
+ * Helper function for download_status_increment_failure() and
+ * download_status_reset(). */
+static const smartlist_t *
+find_dl_schedule_and_len(download_status_t *dls, int server)
{
switch (dls->schedule) {
case DL_SCHED_GENERIC:
- if (server) {
- *schedule = server_dl_schedule;
- *schedule_len = sizeof(server_dl_schedule)/sizeof(int);
- } else {
- *schedule = client_dl_schedule;
- *schedule_len = sizeof(client_dl_schedule)/sizeof(int);
- }
- break;
+ if (server)
+ return get_options()->TestingServerDownloadSchedule;
+ else
+ return get_options()->TestingClientDownloadSchedule;
case DL_SCHED_CONSENSUS:
- if (server) {
- *schedule = server_consensus_dl_schedule;
- *schedule_len = sizeof(server_consensus_dl_schedule)/sizeof(int);
- } else {
- *schedule = client_consensus_dl_schedule;
- *schedule_len = sizeof(client_consensus_dl_schedule)/sizeof(int);
- }
- break;
+ if (server)
+ return get_options()->TestingServerConsensusDownloadSchedule;
+ else
+ return get_options()->TestingClientConsensusDownloadSchedule;
case DL_SCHED_BRIDGE:
- *schedule = bridge_dl_schedule;
- *schedule_len = sizeof(bridge_dl_schedule)/sizeof(int);
- break;
+ return get_options()->TestingBridgeDownloadSchedule;
default:
tor_assert(0);
}
@@ -3683,8 +3392,7 @@ time_t
download_status_increment_failure(download_status_t *dls, int status_code,
const char *item, int server, time_t now)
{
- const int *schedule;
- size_t schedule_len;
+ const smartlist_t *schedule;
int increment;
tor_assert(dls);
if (status_code != 503 || server) {
@@ -3692,14 +3400,14 @@ download_status_increment_failure(download_status_t *dls, int status_code,
++dls->n_download_failures;
}
- find_dl_schedule_and_len(dls, server, &schedule, &schedule_len);
+ schedule = find_dl_schedule_and_len(dls, server);
- if (dls->n_download_failures < schedule_len)
- increment = schedule[dls->n_download_failures];
+ if (dls->n_download_failures < smartlist_len(schedule))
+ increment = *(int *)smartlist_get(schedule, dls->n_download_failures);
else if (dls->n_download_failures == IMPOSSIBLE_TO_DOWNLOAD)
increment = INT_MAX;
else
- increment = schedule[schedule_len-1];
+ increment = *(int *)smartlist_get(schedule, smartlist_len(schedule) - 1);
if (increment < INT_MAX)
dls->next_attempt_at = now+increment;
@@ -3732,14 +3440,11 @@ download_status_increment_failure(download_status_t *dls, int status_code,
void
download_status_reset(download_status_t *dls)
{
- const int *schedule;
- size_t schedule_len;
-
- find_dl_schedule_and_len(dls, get_options()->DirPort_set,
- &schedule, &schedule_len);
+ const smartlist_t *schedule = find_dl_schedule_and_len(
+ dls, get_options()->DirPort_set);
dls->n_download_failures = 0;
- dls->next_attempt_at = time(NULL) + schedule[0];
+ dls->next_attempt_at = time(NULL) + *(int *)smartlist_get(schedule, 0);
}
/** Return the number of failures on <b>dls</b> since the last success (if
@@ -3784,7 +3489,8 @@ dir_routerdesc_download_failed(smartlist_t *failed, int status_code,
} else {
dls = router_get_dl_status_by_descriptor_digest(digest);
}
- if (!dls || dls->n_download_failures >= MAX_ROUTERDESC_DOWNLOAD_FAILURES)
+ if (!dls || dls->n_download_failures >=
+ get_options()->TestingDescriptorMaxDownloadTries)
continue;
download_status_increment_failure(dls, status_code, cp, server, now);
} SMARTLIST_FOREACH_END(cp);
@@ -3815,7 +3521,8 @@ dir_microdesc_download_failed(smartlist_t *failed,
if (!rs)
continue;
dls = &rs->dl_status;
- if (dls->n_download_failures >= MAX_MICRODESC_DOWNLOAD_FAILURES)
+ if (dls->n_download_failures >=
+ get_options()->TestingMicrodescMaxDownloadTries)
continue;
{
char buf[BASE64_DIGEST256_LEN+1];
@@ -3829,7 +3536,7 @@ dir_microdesc_download_failed(smartlist_t *failed,
/** Helper. Compare two fp_pair_t objects, and return negative, 0, or
* positive as appropriate. */
static int
-_compare_pairs(const void **a, const void **b)
+compare_pairs_(const void **a, const void **b)
{
const fp_pair_t *fp1 = *a, *fp2 = *b;
int r;
@@ -3880,8 +3587,8 @@ dir_split_resource_into_fingerprint_pairs(const char *res,
smartlist_free(pairs_tmp);
/* Uniq-and-sort */
- smartlist_sort(pairs_result, _compare_pairs);
- smartlist_uniq(pairs_result, _compare_pairs, _tor_free);
+ smartlist_sort(pairs_result, compare_pairs_);
+ smartlist_uniq(pairs_result, compare_pairs_, tor_free_);
smartlist_add_all(pairs_out, pairs_result);
smartlist_free(pairs_result);
diff --git a/src/or/directory.h b/src/or/directory.h
index 1ca1c5a6e..bc200797d 100644
--- a/src/or/directory.h
+++ b/src/or/directory.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,8 +9,8 @@
* \brief Header file for directory.c.
**/
-#ifndef _TOR_DIRECTORY_H
-#define _TOR_DIRECTORY_H
+#ifndef TOR_DIRECTORY_H
+#define TOR_DIRECTORY_H
int directories_have_accepted_server_descriptor(void);
void directory_post_to_dirservers(uint8_t dir_purpose, uint8_t router_purpose,
@@ -22,10 +22,24 @@ void directory_get_from_dirserver(uint8_t dir_purpose, uint8_t router_purpose,
void directory_get_from_all_authorities(uint8_t dir_purpose,
uint8_t router_purpose,
const char *resource);
+
+/** Enumeration of ways to connect to a directory server */
+typedef enum {
+ /** Default: connect over a one-hop Tor circuit but fall back to direct
+ * connection */
+ DIRIND_ONEHOP=0,
+ /** Connect over a multi-hop anonymizing Tor circuit */
+ DIRIND_ANONYMOUS=1,
+ /** Connect to the DirPort directly */
+ DIRIND_DIRECT_CONN,
+ /** Connect over a multi-hop anonymizing Tor circuit to our dirport */
+ DIRIND_ANON_DIRPORT,
+} dir_indirection_t;
+
void directory_initiate_command_routerstatus(const routerstatus_t *status,
uint8_t dir_purpose,
uint8_t router_purpose,
- int anonymized_connection,
+ dir_indirection_t indirection,
const char *resource,
const char *payload,
size_t payload_len,
@@ -33,7 +47,7 @@ void directory_initiate_command_routerstatus(const routerstatus_t *status,
void directory_initiate_command_routerstatus_rend(const routerstatus_t *status,
uint8_t dir_purpose,
uint8_t router_purpose,
- int anonymized_connection,
+ dir_indirection_t indirection,
const char *resource,
const char *payload,
size_t payload_len,
@@ -49,12 +63,11 @@ int connection_dir_process_inbuf(dir_connection_t *conn);
int connection_dir_finished_flushing(dir_connection_t *conn);
int connection_dir_finished_connecting(dir_connection_t *conn);
void connection_dir_about_to_close(dir_connection_t *dir_conn);
-void directory_initiate_command(const char *address, const tor_addr_t *addr,
+void directory_initiate_command(const tor_addr_t *addr,
uint16_t or_port, uint16_t dir_port,
- int supports_conditional_consensus,
- int supports_begindir, const char *digest,
+ const char *digest,
uint8_t dir_purpose, uint8_t router_purpose,
- int anonymized_connection,
+ dir_indirection_t indirection,
const char *resource,
const char *payload, size_t payload_len,
time_t if_modified_since);
@@ -105,5 +118,10 @@ download_status_mark_impossible(download_status_t *dl)
int download_status_get_n_failures(const download_status_t *dls);
+#ifdef TOR_UNIT_TESTS
+/* Used only by directory.c and test_dir.c */
+STATIC int parse_http_url(const char *headers, char **url);
+#endif
+
#endif
diff --git a/src/or/dirserv.c b/src/or/dirserv.c
index f1c9c6232..aedd09252 100644
--- a/src/or/dirserv.c
+++ b/src/or/dirserv.c
@@ -1,12 +1,16 @@
/* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#define DIRSERV_PRIVATE
#include "or.h"
#include "buffers.h"
#include "config.h"
+#include "confparse.h"
+#include "channel.h"
+#include "channeltls.h"
+#include "command.h"
#include "connection.h"
#include "connection_or.h"
#include "control.h"
@@ -22,6 +26,7 @@
#include "router.h"
#include "routerlist.h"
#include "routerparse.h"
+#include "routerset.h"
/**
* \file dirserv.c
@@ -37,40 +42,24 @@
* directory authorities. */
#define MAX_UNTRUSTED_NETWORKSTATUSES 16
-/** If a v1 directory is older than this, discard it. */
-#define MAX_V1_DIRECTORY_AGE (30*24*60*60)
-/** If a v1 running-routers is older than this, discard it. */
-#define MAX_V1_RR_AGE (7*24*60*60)
-
extern time_t time_of_process_start; /* from main.c */
extern long stats_n_seconds_working; /* from main.c */
-/** Do we need to regenerate the v1 directory when someone asks for it? */
-static time_t the_directory_is_dirty = 1;
-/** Do we need to regenerate the v1 runningrouters document when somebody
- * asks for it? */
-static time_t runningrouters_is_dirty = 1;
-/** Do we need to regenerate our v2 networkstatus document when somebody asks
- * for it? */
-static time_t the_v2_networkstatus_is_dirty = 1;
-
-/** Most recently generated encoded signed v1 directory. (v1 auth dirservers
- * only.) */
-static cached_dir_t *the_directory = NULL;
-
-/** For authoritative directories: the current (v1) network status. */
-static cached_dir_t the_runningrouters;
+/** Total number of routers with measured bandwidth; this is set by
+ * dirserv_count_measured_bws() before the loop in
+ * dirserv_generate_networkstatus_vote_obj() and checked by
+ * dirserv_get_credible_bandwidth() and
+ * dirserv_compute_performance_thresholds() */
+static int routers_with_measured_bw = 0;
static void directory_remove_invalid(void);
-static cached_dir_t *dirserv_regenerate_directory(void);
static char *format_versions_list(config_line_t *ln);
struct authdir_config_t;
static int add_fingerprint_to_dir(const char *nickname, const char *fp,
struct authdir_config_t *list);
static uint32_t
dirserv_get_status_impl(const char *fp, const char *nickname,
- const char *address,
uint32_t addr, uint16_t or_port,
const char *platform, const char *contact,
const char **msg, int should_log);
@@ -79,10 +68,10 @@ static const signed_descriptor_t *get_signed_descriptor_by_fp(
const char *fp,
int extrainfo,
time_t publish_cutoff);
-static int dirserv_add_extrainfo(extrainfo_t *ei, const char **msg);
-
-/************** Measured Bandwidth parsing code ******/
-#define MAX_MEASUREMENT_AGE (3*24*60*60) /* 3 days */
+static was_router_added_t dirserv_add_extrainfo(extrainfo_t *ei,
+ const char **msg);
+static uint32_t dirserv_get_bandwidth_for_router_kb(const routerinfo_t *ri);
+static uint32_t dirserv_get_credible_bandwidth_kb(const routerinfo_t *ri);
/************** Fingerprint handling code ************/
@@ -318,7 +307,6 @@ dirserv_router_get_status(const routerinfo_t *router, const char **msg)
}
return dirserv_get_status_impl(d, router->nickname,
- router->address,
router->addr, router->or_port,
router->platform, router->contact_info,
msg, 1);
@@ -332,7 +320,6 @@ dirserv_would_reject_router(const routerstatus_t *rs)
uint32_t res;
res = dirserv_get_status_impl(rs->identity_digest, rs->nickname,
- "", /* address is only used in logs */
rs->addr, rs->or_port,
NULL, NULL,
NULL, 0);
@@ -371,7 +358,6 @@ dirserv_get_name_status(const char *id_digest, const char *nickname)
*/
static uint32_t
dirserv_get_status_impl(const char *id_digest, const char *nickname,
- const char *address,
uint32_t addr, uint16_t or_port,
const char *platform, const char *contact,
const char **msg, int should_log)
@@ -388,21 +374,24 @@ dirserv_get_status_impl(const char *id_digest, const char *nickname,
strmap_size(fingerprint_list->fp_by_name),
digestmap_size(fingerprint_list->status_by_digest));
- /* Versions before Tor 0.2.1.30 have known security issues that
- * make them unsuitable for the current network. */
- if (platform && !tor_version_as_new_as(platform,"0.2.1.30")) {
+ /* Versions before Tor 0.2.3.16-alpha are too old to support, and are
+ * missing some important security fixes too. Disable them. */
+ if (platform && !tor_version_as_new_as(platform,"0.2.3.16-alpha")) {
if (msg)
- *msg = "Tor version is insecure. Please upgrade!";
+ *msg = "Tor version is insecure or unsupported. Please upgrade!";
return FP_REJECT;
- } else if (platform && tor_version_as_new_as(platform,"0.2.2.1-alpha")) {
- /* Versions from 0.2.2.1-alpha...0.2.2.20-alpha have known security
+ }
+#if 0
+ else if (platform && tor_version_as_new_as(platform,"0.2.3.0-alpha")) {
+ /* Versions from 0.2.3-alpha...0.2.3.9-alpha have known security
* issues that make them unusable for the current network */
- if (!tor_version_as_new_as(platform, "0.2.2.21-alpha")) {
+ if (!tor_version_as_new_as(platform, "0.2.3.10-alpha")) {
if (msg)
- *msg = "Tor version is insecure. Please upgrade!";
+ *msg = "Tor version is insecure or unsupported. Please upgrade!";
return FP_REJECT;
}
}
+#endif
result = dirserv_get_name_status(id_digest, nickname);
if (result & FP_NAMED) {
@@ -443,14 +432,14 @@ dirserv_get_status_impl(const char *id_digest, const char *nickname,
if (should_log)
log_info(LD_DIRSERV,
"Marking '%s' as bad directory because of address '%s'",
- nickname, address);
+ nickname, fmt_addr32(addr));
result |= FP_BADDIR;
}
if (authdir_policy_badexit_address(addr, or_port)) {
if (should_log)
log_info(LD_DIRSERV, "Marking '%s' as bad exit because of address '%s'",
- nickname, address);
+ nickname, fmt_addr32(addr));
result |= FP_BADEXIT;
}
@@ -458,7 +447,7 @@ dirserv_get_status_impl(const char *id_digest, const char *nickname,
if (!authdir_policy_permits_address(addr, or_port)) {
if (should_log)
log_info(LD_DIRSERV, "Rejecting '%s' because of address '%s'",
- nickname, address);
+ nickname, fmt_addr32(addr));
if (msg)
*msg = "Authdir is rejecting routers in this range.";
return FP_REJECT;
@@ -466,7 +455,7 @@ dirserv_get_status_impl(const char *id_digest, const char *nickname,
if (!authdir_policy_valid_address(addr, or_port)) {
if (should_log)
log_info(LD_DIRSERV, "Not marking '%s' valid because of address '%s'",
- nickname, address);
+ nickname, fmt_addr32(addr));
result |= FP_INVALID;
}
if (reject_unlisted) {
@@ -501,8 +490,8 @@ dirserv_free_fingerprint_list(void)
if (!fingerprint_list)
return;
- strmap_free(fingerprint_list->fp_by_name, _tor_free);
- digestmap_free(fingerprint_list->status_by_digest, _tor_free);
+ strmap_free(fingerprint_list->fp_by_name, tor_free_);
+ digestmap_free(fingerprint_list->status_by_digest, tor_free_);
tor_free(fingerprint_list);
}
@@ -515,19 +504,15 @@ dirserv_free_fingerprint_list(void)
static int
dirserv_router_has_valid_address(routerinfo_t *ri)
{
- struct in_addr iaddr;
+ tor_addr_t addr;
if (get_options()->DirAllowPrivateAddresses)
return 0; /* whatever it is, we're fine with it */
- if (!tor_inet_aton(ri->address, &iaddr)) {
- log_info(LD_DIRSERV,"Router %s published non-IP address '%s'. Refusing.",
- router_describe(ri),
- ri->address);
- return -1;
- }
- if (is_internal_IP(ntohl(iaddr.s_addr), 0)) {
+ tor_addr_from_ipv4h(&addr, ri->addr);
+
+ if (tor_addr_is_internal(&addr, 0)) {
log_info(LD_DIRSERV,
- "Router %s published internal IP address '%s'. Refusing.",
- router_describe(ri), ri->address);
+ "Router %s published internal IP address. Refusing.",
+ router_describe(ri));
return -1; /* it's a private IP, we should reject it */
}
return 0;
@@ -579,12 +564,10 @@ authdir_wants_to_reject_router(routerinfo_t *ri, const char **msg,
}
if (dirserv_router_has_valid_address(ri) < 0) {
log_fn(severity, LD_DIRSERV,
- "Router %s has invalid address '%s'. "
- "Not adding (%s).",
+ "Router %s has invalid address. Not adding (%s).",
router_describe(ri),
- ri->address,
esc_router_info(ri));
- *msg = "Rejected: Address is not an IP, or IP is a private address.";
+ *msg = "Rejected: Address is a private address.";
return -1;
}
@@ -717,7 +700,7 @@ dirserv_add_descriptor(routerinfo_t *ri, const char **msg, const char *source)
"MAX_DESCRIPTOR_UPLOAD_SIZE (%d) constant is too low.",
ri->nickname, source, (int)ri->cache_info.signed_descriptor_len,
MAX_DESCRIPTOR_UPLOAD_SIZE);
- *msg = "Router descriptor was too large";
+ *msg = "Router descriptor was too large.";
control_event_or_authdir_new_descriptor("REJECTED",
ri->cache_info.signed_descriptor_body,
ri->cache_info.signed_descriptor_len, *msg);
@@ -828,7 +811,6 @@ dirserv_add_extrainfo(extrainfo_t *ei, const char **msg)
static void
directory_remove_invalid(void)
{
- int changed = 0;
routerlist_t *rl = router_get_routerlist();
smartlist_t *nodes = smartlist_new();
smartlist_add_all(nodes, nodelist_get_list());
@@ -846,7 +828,6 @@ directory_remove_invalid(void)
log_info(LD_DIRSERV, "Router %s is now rejected: %s",
description, msg?msg:"");
routerlist_remove(rl, ent, 0, time(NULL));
- changed = 1;
continue;
}
#if 0
@@ -855,72 +836,35 @@ directory_remove_invalid(void)
"Router %s is now %snamed.", description,
(r&FP_NAMED)?"":"un");
ent->is_named = (r&FP_NAMED)?1:0;
- changed = 1;
}
if (bool_neq((r & FP_UNNAMED), ent->auth_says_is_unnamed)) {
log_info(LD_DIRSERV,
"Router '%s' is now %snamed. (FP_UNNAMED)", description,
(r&FP_NAMED)?"":"un");
ent->is_named = (r&FP_NUNAMED)?0:1;
- changed = 1;
}
#endif
if (bool_neq((r & FP_INVALID), !node->is_valid)) {
log_info(LD_DIRSERV, "Router '%s' is now %svalid.", description,
(r&FP_INVALID) ? "in" : "");
node->is_valid = (r&FP_INVALID)?0:1;
- changed = 1;
}
if (bool_neq((r & FP_BADDIR), node->is_bad_directory)) {
log_info(LD_DIRSERV, "Router '%s' is now a %s directory", description,
(r & FP_BADDIR) ? "bad" : "good");
node->is_bad_directory = (r&FP_BADDIR) ? 1: 0;
- changed = 1;
}
if (bool_neq((r & FP_BADEXIT), node->is_bad_exit)) {
log_info(LD_DIRSERV, "Router '%s' is now a %s exit", description,
(r & FP_BADEXIT) ? "bad" : "good");
node->is_bad_exit = (r&FP_BADEXIT) ? 1: 0;
- changed = 1;
}
} SMARTLIST_FOREACH_END(node);
- if (changed)
- directory_set_dirty();
routerlist_assert_ok(rl);
smartlist_free(nodes);
}
-/** Mark the directory as <b>dirty</b> -- when we're next asked for a
- * directory, we will rebuild it instead of reusing the most recently
- * generated one.
- */
-void
-directory_set_dirty(void)
-{
- time_t now = time(NULL);
- int set_v1_dirty=0;
-
- /* Regenerate stubs only every 8 hours.
- * XXXX It would be nice to generate less often, but these are just
- * stubs: it doesn't matter. */
-#define STUB_REGENERATE_INTERVAL (8*60*60)
- if (!the_directory || !the_runningrouters.dir)
- set_v1_dirty = 1;
- else if (the_directory->published < now - STUB_REGENERATE_INTERVAL ||
- the_runningrouters.published < now - STUB_REGENERATE_INTERVAL)
- set_v1_dirty = 1;
-
- if (set_v1_dirty) {
- if (!the_directory_is_dirty)
- the_directory_is_dirty = now;
- if (!runningrouters_is_dirty)
- runningrouters_is_dirty = now;
- }
- if (!the_v2_networkstatus_is_dirty)
- the_v2_networkstatus_is_dirty = now;
-}
-
/**
* Allocate and return a description of the status of the server <b>desc</b>,
* for use in a v1-style router-status line. The server is listed
@@ -980,6 +924,7 @@ dirserv_set_router_is_running(routerinfo_t *router, time_t now)
unreachable.
*/
int answer;
+ const or_options_t *options = get_options();
node_t *node = node_get_mutable_by_id(router->cache_info.identity_digest);
tor_assert(node);
@@ -988,17 +933,27 @@ dirserv_set_router_is_running(routerinfo_t *router, time_t now)
answer = ! we_are_hibernating();
} else if (router->is_hibernating &&
(router->cache_info.published_on +
- HIBERNATION_PUBLICATION_SKEW) > router->last_reachable) {
+ HIBERNATION_PUBLICATION_SKEW) > node->last_reachable) {
/* A hibernating router is down unless we (somehow) had contact with it
* since it declared itself to be hibernating. */
answer = 0;
- } else if (get_options()->AssumeReachable) {
+ } else if (options->AssumeReachable) {
/* If AssumeReachable, everybody is up unless they say they are down! */
answer = 1;
} else {
- /* Otherwise, a router counts as up if we found it reachable in the last
- REACHABLE_TIMEOUT seconds. */
- answer = (now < router->last_reachable + REACHABLE_TIMEOUT);
+ /* Otherwise, a router counts as up if we found all announced OR
+ ports reachable in the last REACHABLE_TIMEOUT seconds.
+
+ XXX prop186 For now there's always one IPv4 and at most one
+ IPv6 OR port.
+
+ If we're not on IPv6, don't consider reachability of potential
+ IPv6 OR port since that'd kill all dual stack relays until a
+ majority of the dir auths have IPv6 connectivity. */
+ answer = (now < node->last_reachable + REACHABLE_TIMEOUT &&
+ (options->AuthDirHasIPv6Connectivity != 1 ||
+ tor_addr_is_null(&router->ipv6_addr) ||
+ now < node->last_reachable6 + REACHABLE_TIMEOUT));
}
if (!answer && running_long_enough_to_decide_unreachable()) {
@@ -1008,11 +963,13 @@ dirserv_set_router_is_running(routerinfo_t *router, time_t now)
REACHABILITY_TEST_CYCLE_PERIOD seconds, then the router has probably
been down since at least that time after we last successfully reached
it.
+
+ XXX ipv6
*/
time_t when = now;
- if (router->last_reachable &&
- router->last_reachable + REACHABILITY_TEST_CYCLE_PERIOD < now)
- when = router->last_reachable + REACHABILITY_TEST_CYCLE_PERIOD;
+ if (node->last_reachable &&
+ node->last_reachable + REACHABILITY_TEST_CYCLE_PERIOD < now)
+ when = node->last_reachable + REACHABILITY_TEST_CYCLE_PERIOD;
rep_hist_note_router_unreachable(router->cache_info.identity_digest, when);
}
@@ -1117,6 +1074,8 @@ int
dirserv_dump_directory_to_string(char **dir_out,
crypto_pk_t *private_key)
{
+ /* XXXX 024 Get rid of this function if we can confirm that nobody's
+ * fetching these any longer */
char *cp;
char *identity_pkey; /* Identity key, DER64-encoded. */
char *recommended_versions;
@@ -1245,14 +1204,6 @@ directory_fetches_dir_info_later(const or_options_t *options)
return options->UseBridges != 0;
}
-/** Return 1 if we want to cache v2 dir info (each status file).
- */
-int
-directory_caches_v2_dir_info(const or_options_t *options)
-{
- return options->DirPort_set;
-}
-
/** Return true iff we want to fetch and keep certificates for authorities
* that we don't acknowledge as aurthorities ourself.
*/
@@ -1287,15 +1238,6 @@ directory_permits_begindir_requests(const or_options_t *options)
return options->BridgeRelay != 0 || options->DirPort_set;
}
-/** Return 1 if we want to allow controllers to ask us directory
- * requests via the controller interface, which doesn't require
- * having any separate port open. */
-int
-directory_permits_controller_requests(const or_options_t *options)
-{
- return options->DirPort_set;
-}
-
/** Return 1 if we have no need to fetch new descriptors. This generally
* happens when we're not a dir cache and we haven't built any circuits
* lately.
@@ -1311,55 +1253,10 @@ directory_too_idle_to_fetch_descriptors(const or_options_t *options,
/********************************************************************/
-/* Used only by non-v1-auth dirservers: The v1 directory and
- * runningrouters we'll serve when requested. */
-
-/** The v1 directory we'll serve (as a cache or as an authority) if
- * requested. */
-static cached_dir_t *cached_directory = NULL;
-/** The v1 runningrouters document we'll serve (as a cache or as an authority)
- * if requested. */
-static cached_dir_t cached_runningrouters;
-
-/** Used for other dirservers' v2 network statuses. Map from hexdigest to
- * cached_dir_t. */
-static digestmap_t *cached_v2_networkstatus = NULL;
-
/** Map from flavor name to the cached_dir_t for the v3 consensuses that we're
* currently serving. */
static strmap_t *cached_consensuses = NULL;
-/** Possibly replace the contents of <b>d</b> with the value of
- * <b>directory</b> published on <b>when</b>, unless <b>when</b> is older than
- * the last value, or too far in the future.
- *
- * Does not copy <b>directory</b>; frees it if it isn't used.
- */
-static void
-set_cached_dir(cached_dir_t *d, char *directory, time_t when)
-{
- time_t now = time(NULL);
- if (when<=d->published) {
- log_info(LD_DIRSERV, "Ignoring old directory; not caching.");
- tor_free(directory);
- } else if (when>=now+ROUTER_MAX_AGE_TO_PUBLISH) {
- log_info(LD_DIRSERV, "Ignoring future directory; not caching.");
- tor_free(directory);
- } else {
- /* if (when>d->published && when<now+ROUTER_MAX_AGE) */
- log_debug(LD_DIRSERV, "Caching directory.");
- tor_free(d->dir);
- d->dir = directory;
- d->dir_len = strlen(directory);
- tor_free(d->dir_z);
- if (tor_gzip_compress(&(d->dir_z), &(d->dir_z_len), d->dir, d->dir_len,
- ZLIB_METHOD)) {
- log_warn(LD_BUG,"Error compressing cached directory");
- }
- d->published = when;
- }
-}
-
/** Decrement the reference count on <b>d</b>, and free it if it no longer has
* any references. */
void
@@ -1399,7 +1296,7 @@ clear_cached_dir(cached_dir_t *d)
/** Free all storage held by the cached_dir_t in <b>d</b>. */
static void
-_free_cached_dir(void *_d)
+free_cached_dir_(void *_d)
{
cached_dir_t *d;
if (!_d)
@@ -1409,96 +1306,6 @@ _free_cached_dir(void *_d)
cached_dir_decref(d);
}
-/** If we have no cached v1 directory, or it is older than <b>published</b>,
- * then replace it with <b>directory</b>, published at <b>published</b>.
- *
- * If <b>published</b> is too old, do nothing.
- *
- * If <b>is_running_routers</b>, this is really a v1 running_routers
- * document rather than a v1 directory.
- */
-void
-dirserv_set_cached_directory(const char *directory, time_t published,
- int is_running_routers)
-{
- time_t now = time(NULL);
-
- if (is_running_routers) {
- if (published >= now - MAX_V1_RR_AGE)
- set_cached_dir(&cached_runningrouters, tor_strdup(directory), published);
- } else {
- if (published >= now - MAX_V1_DIRECTORY_AGE) {
- cached_dir_decref(cached_directory);
- cached_directory = new_cached_dir(tor_strdup(directory), published);
- }
- }
-}
-
-/** If <b>networkstatus</b> is non-NULL, we've just received a v2
- * network-status for an authoritative directory with identity digest
- * <b>identity</b> published at <b>published</b> -- store it so we can
- * serve it to others.
- *
- * If <b>networkstatus</b> is NULL, remove the entry with the given
- * identity fingerprint from the v2 cache.
- */
-void
-dirserv_set_cached_networkstatus_v2(const char *networkstatus,
- const char *identity,
- time_t published)
-{
- cached_dir_t *d, *old_d;
- smartlist_t *trusted_dirs;
- if (!cached_v2_networkstatus)
- cached_v2_networkstatus = digestmap_new();
-
- old_d = digestmap_get(cached_v2_networkstatus, identity);
- if (!old_d && !networkstatus)
- return;
-
- if (networkstatus) {
- if (!old_d || published > old_d->published) {
- d = new_cached_dir(tor_strdup(networkstatus), published);
- digestmap_set(cached_v2_networkstatus, identity, d);
- if (old_d)
- cached_dir_decref(old_d);
- }
- } else {
- if (old_d) {
- digestmap_remove(cached_v2_networkstatus, identity);
- cached_dir_decref(old_d);
- }
- }
-
- /* Now purge old entries. */
- trusted_dirs = router_get_trusted_dir_servers();
- if (digestmap_size(cached_v2_networkstatus) >
- smartlist_len(trusted_dirs) + MAX_UNTRUSTED_NETWORKSTATUSES) {
- /* We need to remove the oldest untrusted networkstatus. */
- const char *oldest = NULL;
- time_t oldest_published = TIME_MAX;
- digestmap_iter_t *iter;
-
- for (iter = digestmap_iter_init(cached_v2_networkstatus);
- !digestmap_iter_done(iter);
- iter = digestmap_iter_next(cached_v2_networkstatus, iter)) {
- const char *ident;
- void *val;
- digestmap_iter_get(iter, &ident, &val);
- d = val;
- if (d->published < oldest_published &&
- !router_digest_is_trusted_dir(ident)) {
- oldest = ident;
- oldest_published = d->published;
- }
- }
- tor_assert(oldest);
- d = digestmap_remove(cached_v2_networkstatus, oldest);
- if (d)
- cached_dir_decref(d);
- }
-}
-
/** Replace the v3 consensus networkstatus of type <b>flavor_name</b> that
* we're serving with <b>networkstatus</b>, published at <b>published</b>. No
* validation is performed. */
@@ -1521,184 +1328,6 @@ dirserv_set_cached_consensus_networkstatus(const char *networkstatus,
cached_dir_decref(old_networkstatus);
}
-/** Remove any v2 networkstatus from the directory cache that was published
- * before <b>cutoff</b>. */
-void
-dirserv_clear_old_networkstatuses(time_t cutoff)
-{
- if (!cached_v2_networkstatus)
- return;
-
- DIGESTMAP_FOREACH_MODIFY(cached_v2_networkstatus, id, cached_dir_t *, dir) {
- if (dir->published < cutoff) {
- char *fname;
- fname = networkstatus_get_cache_filename(id);
- if (file_status(fname) == FN_FILE) {
- log_info(LD_DIR, "Removing too-old untrusted networkstatus in %s",
- fname);
- unlink(fname);
- }
- tor_free(fname);
- cached_dir_decref(dir);
- MAP_DEL_CURRENT(id);
- }
- } DIGESTMAP_FOREACH_END
-}
-
-/** Remove any v1 info from the directory cache that was published
- * too long ago. */
-void
-dirserv_clear_old_v1_info(time_t now)
-{
- if (cached_directory &&
- cached_directory->published < (now - MAX_V1_DIRECTORY_AGE)) {
- cached_dir_decref(cached_directory);
- cached_directory = NULL;
- }
- if (cached_runningrouters.published < (now - MAX_V1_RR_AGE)) {
- clear_cached_dir(&cached_runningrouters);
- }
-}
-
-/** Helper: If we're an authority for the right directory version (v1 or v2)
- * (based on <b>auth_type</b>), try to regenerate
- * auth_src as appropriate and return it, falling back to cache_src on
- * failure. If we're a cache, simply return cache_src.
- */
-static cached_dir_t *
-dirserv_pick_cached_dir_obj(cached_dir_t *cache_src,
- cached_dir_t *auth_src,
- time_t dirty, cached_dir_t *(*regenerate)(void),
- const char *name,
- dirinfo_type_t auth_type)
-{
- const or_options_t *options = get_options();
- int authority = (auth_type == V1_DIRINFO && authdir_mode_v1(options)) ||
- (auth_type == V2_DIRINFO && authdir_mode_v2(options));
-
- if (!authority || authdir_mode_bridge(options)) {
- return cache_src;
- } else {
- /* We're authoritative. */
- if (regenerate != NULL) {
- if (dirty && dirty + DIR_REGEN_SLACK_TIME < time(NULL)) {
- if (!(auth_src = regenerate())) {
- log_err(LD_BUG, "Couldn't generate %s?", name);
- exit(1);
- }
- } else {
- log_info(LD_DIRSERV, "The %s is still clean; reusing.", name);
- }
- }
- return auth_src ? auth_src : cache_src;
- }
-}
-
-/** Return the most recently generated encoded signed v1 directory,
- * generating a new one as necessary. If not a v1 authoritative directory
- * may return NULL if no directory is yet cached. */
-cached_dir_t *
-dirserv_get_directory(void)
-{
- return dirserv_pick_cached_dir_obj(cached_directory, the_directory,
- the_directory_is_dirty,
- dirserv_regenerate_directory,
- "v1 server directory", V1_DIRINFO);
-}
-
-/** Only called by v1 auth dirservers.
- * Generate a fresh v1 directory; set the_directory and return a pointer
- * to the new value.
- */
-static cached_dir_t *
-dirserv_regenerate_directory(void)
-{
- char *new_directory=NULL;
-
- if (dirserv_dump_directory_to_string(&new_directory,
- get_server_identity_key())) {
- log_warn(LD_BUG, "Error creating directory.");
- tor_free(new_directory);
- return NULL;
- }
- cached_dir_decref(the_directory);
- the_directory = new_cached_dir(new_directory, time(NULL));
- log_info(LD_DIRSERV,"New directory (size %d) has been built.",
- (int)the_directory->dir_len);
- log_debug(LD_DIRSERV,"New directory (size %d):\n%s",
- (int)the_directory->dir_len, the_directory->dir);
-
- the_directory_is_dirty = 0;
-
- /* Save the directory to disk so we re-load it quickly on startup.
- */
- dirserv_set_cached_directory(the_directory->dir, time(NULL), 0);
-
- return the_directory;
-}
-
-/** Only called by v1 auth dirservers.
- * Replace the current running-routers list with a newly generated one. */
-static cached_dir_t *
-generate_runningrouters(void)
-{
- char *s=NULL;
- char digest[DIGEST_LEN];
- char published[ISO_TIME_LEN+1];
- size_t len;
- crypto_pk_t *private_key = get_server_identity_key();
- char *identity_pkey; /* Identity key, DER64-encoded. */
- size_t identity_pkey_len;
-
- if (crypto_pk_write_public_key_to_string(private_key,&identity_pkey,
- &identity_pkey_len)<0) {
- log_warn(LD_BUG,"write identity_pkey to string failed!");
- goto err;
- }
- format_iso_time(published, time(NULL));
-
- len = 2048;
- s = tor_malloc_zero(len);
- tor_snprintf(s, len,
- "network-status\n"
- "published %s\n"
- "router-status %s\n"
- "dir-signing-key\n%s"
- "directory-signature %s\n",
- published, "", identity_pkey,
- get_options()->Nickname);
- tor_free(identity_pkey);
- if (router_get_runningrouters_hash(s,digest)) {
- log_warn(LD_BUG,"couldn't compute digest");
- goto err;
- }
- note_crypto_pk_op(SIGN_DIR);
- if (router_append_dirobj_signature(s, len, digest, DIGEST_LEN,
- private_key)<0)
- goto err;
-
- set_cached_dir(&the_runningrouters, s, time(NULL));
- runningrouters_is_dirty = 0;
-
- return &the_runningrouters;
- err:
- tor_free(s);
- return NULL;
-}
-
-/** Set *<b>rr</b> to the most recently generated encoded signed
- * running-routers list, generating a new one as necessary. Return the
- * size of the directory on success, and 0 on failure. */
-cached_dir_t *
-dirserv_get_runningrouters(void)
-{
- return dirserv_pick_cached_dir_obj(
- &cached_runningrouters, &the_runningrouters,
- runningrouters_is_dirty,
- generate_runningrouters,
- "v1 network status list", V1_DIRINFO);
-}
-
/** Return the latest downloaded consensus networkstatus in encoded, signed,
* optionally compressed format, suitable for sending to clients. */
cached_dir_t *
@@ -1709,19 +1338,6 @@ dirserv_get_consensus(const char *flavor_name)
return strmap_get(cached_consensuses, flavor_name);
}
-/** For authoritative directories: the current (v2) network status. */
-static cached_dir_t *the_v2_networkstatus = NULL;
-
-/** Return true iff our opinion of the routers has been stale for long
- * enough that we should generate a new v2 network status doc. */
-static int
-should_generate_v2_networkstatus(void)
-{
- return authdir_mode_v2(get_options()) &&
- the_v2_networkstatus_is_dirty &&
- the_v2_networkstatus_is_dirty + DIR_REGEN_SLACK_TIME < time(NULL);
-}
-
/** If a router's uptime is at least this value, then it is always
* considered stable, regardless of the rest of the network. This
* way we resist attacks where an attacker doubles the size of the
@@ -1758,17 +1374,13 @@ static double guard_wfu = 0.0;
* many seconds. */
static long guard_tk = 0;
/** Any router with a bandwidth at least this high is "Fast" */
-static uint32_t fast_bandwidth = 0;
+static uint32_t fast_bandwidth_kb = 0;
/** If exits can be guards, then all guards must have a bandwidth this
* high. */
-static uint32_t guard_bandwidth_including_exits = 0;
+static uint32_t guard_bandwidth_including_exits_kb = 0;
/** If exits can't be guards, then all guards must have a bandwidth this
* high. */
-static uint32_t guard_bandwidth_excluding_exits = 0;
-/** Total bandwidth of all the routers we're considering. */
-static uint64_t total_bandwidth = 0;
-/** Total bandwidth of all the exit routers we're considering. */
-static uint64_t total_exit_bandwidth = 0;
+static uint32_t guard_bandwidth_excluding_exits_kb = 0;
/** Helper: estimate the uptime of a router given its stated uptime and the
* amount of time since it last stated its stated uptime. */
@@ -1812,8 +1424,8 @@ dirserv_thinks_router_is_unreliable(time_t now,
}
}
if (need_capacity) {
- uint32_t bw = router_get_advertised_bandwidth(router);
- if (bw < fast_bandwidth)
+ uint32_t bw_kb = dirserv_get_credible_bandwidth_kb(router);
+ if (bw_kb < fast_bandwidth_kb)
return 1;
}
return 0;
@@ -1859,34 +1471,67 @@ dirserv_thinks_router_is_hs_dir(const routerinfo_t *router,
node->is_running);
}
+/** Don't consider routers with less bandwidth than this when computing
+ * thresholds. */
+#define ABSOLUTE_MIN_BW_VALUE_TO_CONSIDER_KB 4
+
+/** Helper for dirserv_compute_performance_thresholds(): Decide whether to
+ * include a router in our calculations, and return true iff we should; the
+ * require_mbw parameter is passed in by
+ * dirserv_compute_performance_thresholds() and controls whether we ever
+ * count routers with only advertised bandwidths */
+static int
+router_counts_toward_thresholds(const node_t *node, time_t now,
+ const digestmap_t *omit_as_sybil,
+ int require_mbw)
+{
+ /* Have measured bw? */
+ int have_mbw =
+ dirserv_has_measured_bw(node->identity);
+ uint64_t min_bw_kb = ABSOLUTE_MIN_BW_VALUE_TO_CONSIDER_KB;
+ const or_options_t *options = get_options();
+
+ if (options->TestingTorNetwork) {
+ min_bw_kb = (int64_t)options->TestingMinExitFlagThreshold / 1000;
+ }
+
+ return node->ri && router_is_active(node->ri, node, now) &&
+ !digestmap_get(omit_as_sybil, node->identity) &&
+ (dirserv_get_credible_bandwidth_kb(node->ri) >= min_bw_kb) &&
+ (have_mbw || !require_mbw);
+}
+
/** Look through the routerlist, the Mean Time Between Failure history, and
* the Weighted Fractional Uptime history, and use them to set thresholds for
* the Stable, Fast, and Guard flags. Update the fields stable_uptime,
* stable_mtbf, enough_mtbf_info, guard_wfu, guard_tk, fast_bandwidth,
- * guard_bandwidh_including_exits, guard_bandwidth_excluding_exits,
- * total_bandwidth, and total_exit_bandwidth.
+ * guard_bandwidth_including_exits, and guard_bandwidth_excluding_exits.
*
* Also, set the is_exit flag of each router appropriately. */
static void
-dirserv_compute_performance_thresholds(routerlist_t *rl)
+dirserv_compute_performance_thresholds(routerlist_t *rl,
+ digestmap_t *omit_as_sybil)
{
int n_active, n_active_nonexit, n_familiar;
- uint32_t *uptimes, *bandwidths, *bandwidths_excluding_exits;
+ uint32_t *uptimes, *bandwidths_kb, *bandwidths_excluding_exits_kb;
long *tks;
double *mtbfs, *wfus;
time_t now = time(NULL);
const or_options_t *options = get_options();
+ /* Require mbw? */
+ int require_mbw =
+ (routers_with_measured_bw >
+ options->MinMeasuredBWsForAuthToIgnoreAdvertised) ? 1 : 0;
+
/* initialize these all here, in case there are no routers */
stable_uptime = 0;
stable_mtbf = 0;
- fast_bandwidth = 0;
- guard_bandwidth_including_exits = 0;
- guard_bandwidth_excluding_exits = 0;
+ fast_bandwidth_kb = 0;
+ guard_bandwidth_including_exits_kb = 0;
+ guard_bandwidth_excluding_exits_kb = 0;
guard_tk = 0;
guard_wfu = 0;
- total_bandwidth = 0;
- total_exit_bandwidth = 0;
/* Initialize arrays that will hold values for each router. We'll
* sort them and use that to compute thresholds. */
@@ -1894,9 +1539,9 @@ dirserv_compute_performance_thresholds(routerlist_t *rl)
/* Uptime for every active router. */
uptimes = tor_malloc(sizeof(uint32_t)*smartlist_len(rl->routers));
/* Bandwidth for every active router. */
- bandwidths = tor_malloc(sizeof(uint32_t)*smartlist_len(rl->routers));
+ bandwidths_kb = tor_malloc(sizeof(uint32_t)*smartlist_len(rl->routers));
/* Bandwidth for every active non-exit router. */
- bandwidths_excluding_exits =
+ bandwidths_excluding_exits_kb =
tor_malloc(sizeof(uint32_t)*smartlist_len(rl->routers));
/* Weighted mean time between failure for each active router. */
mtbfs = tor_malloc(sizeof(double)*smartlist_len(rl->routers));
@@ -1909,21 +1554,23 @@ dirserv_compute_performance_thresholds(routerlist_t *rl)
/* Now, fill in the arrays. */
SMARTLIST_FOREACH_BEGIN(nodelist_get_list(), node_t *, node) {
- routerinfo_t *ri = node->ri;
- if (ri && router_is_active(ri, node, now)) {
- const char *id = ri->cache_info.identity_digest;
- uint32_t bw;
+ if (options->BridgeAuthoritativeDir &&
+ node->ri &&
+ node->ri->purpose != ROUTER_PURPOSE_BRIDGE)
+ continue;
+ if (router_counts_toward_thresholds(node, now, omit_as_sybil,
+ require_mbw)) {
+ routerinfo_t *ri = node->ri;
+ const char *id = node->identity;
+ uint32_t bw_kb;
node->is_exit = (!router_exit_policy_rejects_all(ri) &&
exit_policy_is_general_exit(ri->exit_policy));
uptimes[n_active] = (uint32_t)real_uptime(ri, now);
mtbfs[n_active] = rep_hist_get_stability(id, now);
tks [n_active] = rep_hist_get_weighted_time_known(id, now);
- bandwidths[n_active] = bw = router_get_advertised_bandwidth(ri);
- total_bandwidth += bw;
- if (node->is_exit && !node->is_bad_exit) {
- total_exit_bandwidth += bw;
- } else {
- bandwidths_excluding_exits[n_active_nonexit] = bw;
+ bandwidths_kb[n_active] = bw_kb = dirserv_get_credible_bandwidth_kb(ri);
+ if (!node->is_exit || node->is_bad_exit) {
+ bandwidths_excluding_exits_kb[n_active_nonexit] = bw_kb;
++n_active_nonexit;
}
++n_active;
@@ -1937,11 +1584,11 @@ dirserv_compute_performance_thresholds(routerlist_t *rl)
/* The median mtbf is stable, if we have enough mtbf info */
stable_mtbf = median_double(mtbfs, n_active);
/* The 12.5th percentile bandwidth is fast. */
- fast_bandwidth = find_nth_uint32(bandwidths, n_active, n_active/8);
+ fast_bandwidth_kb = find_nth_uint32(bandwidths_kb, n_active, n_active/8);
/* (Now bandwidths is sorted.) */
- if (fast_bandwidth < ROUTER_REQUIRED_MIN_BANDWIDTH/2)
- fast_bandwidth = bandwidths[n_active/4];
- guard_bandwidth_including_exits = bandwidths[(n_active-1)/2];
+ if (fast_bandwidth_kb < ROUTER_REQUIRED_MIN_BANDWIDTH/(2 * 1000))
+ fast_bandwidth_kb = bandwidths_kb[n_active/4];
+ guard_bandwidth_including_exits_kb = bandwidths_kb[(n_active-1)/2];
guard_tk = find_nth_long(tks, n_active, n_active/8);
}
@@ -1950,29 +1597,39 @@ dirserv_compute_performance_thresholds(routerlist_t *rl)
{
/* We can vote on a parameter for the minimum and maximum. */
- int32_t min_fast, max_fast;
+#define ABSOLUTE_MIN_VALUE_FOR_FAST_FLAG 4
+ int32_t min_fast_kb, max_fast_kb, min_fast, max_fast;
min_fast = networkstatus_get_param(NULL, "FastFlagMinThreshold",
- 0, 0, INT32_MAX);
+ ABSOLUTE_MIN_VALUE_FOR_FAST_FLAG,
+ ABSOLUTE_MIN_VALUE_FOR_FAST_FLAG,
+ INT32_MAX);
+ if (options->TestingTorNetwork) {
+ min_fast = (int32_t)options->TestingMinFastFlagThreshold;
+ }
max_fast = networkstatus_get_param(NULL, "FastFlagMaxThreshold",
INT32_MAX, min_fast, INT32_MAX);
- if (fast_bandwidth < (uint32_t)min_fast)
- fast_bandwidth = min_fast;
- if (fast_bandwidth > (uint32_t)max_fast)
- fast_bandwidth = max_fast;
+ min_fast_kb = min_fast / 1000;
+ max_fast_kb = max_fast / 1000;
+
+ if (fast_bandwidth_kb < (uint32_t)min_fast_kb)
+ fast_bandwidth_kb = min_fast_kb;
+ if (fast_bandwidth_kb > (uint32_t)max_fast_kb)
+ fast_bandwidth_kb = max_fast_kb;
}
/* Protect sufficiently fast nodes from being pushed out of the set
* of Fast nodes. */
if (options->AuthDirFastGuarantee &&
- fast_bandwidth > options->AuthDirFastGuarantee)
- fast_bandwidth = (uint32_t)options->AuthDirFastGuarantee;
+ fast_bandwidth_kb > options->AuthDirFastGuarantee/1000)
+ fast_bandwidth_kb = (uint32_t)options->AuthDirFastGuarantee/1000;
/* Now that we have a time-known that 7/8 routers are known longer than,
* fill wfus with the wfu of every such "familiar" router. */
n_familiar = 0;
SMARTLIST_FOREACH_BEGIN(nodelist_get_list(), node_t *, node) {
- routerinfo_t *ri = node->ri;
- if (ri && router_is_active(ri, node, now)) {
+ if (router_counts_toward_thresholds(node, now,
+ omit_as_sybil, require_mbw)) {
+ routerinfo_t *ri = node->ri;
const char *id = ri->cache_info.identity_digest;
long tk = rep_hist_get_weighted_time_known(id, now);
if (tk < guard_tk)
@@ -1988,32 +1645,274 @@ dirserv_compute_performance_thresholds(routerlist_t *rl)
enough_mtbf_info = rep_hist_have_measured_enough_stability();
if (n_active_nonexit) {
- guard_bandwidth_excluding_exits =
- median_uint32(bandwidths_excluding_exits, n_active_nonexit);
+ guard_bandwidth_excluding_exits_kb =
+ median_uint32(bandwidths_excluding_exits_kb, n_active_nonexit);
}
- log(LOG_INFO, LD_DIRSERV,
+ log_info(LD_DIRSERV,
"Cutoffs: For Stable, %lu sec uptime, %lu sec MTBF. "
- "For Fast: %lu bytes/sec. "
+ "For Fast: %lu kilobytes/sec. "
"For Guard: WFU %.03f%%, time-known %lu sec, "
- "and bandwidth %lu or %lu bytes/sec. We%s have enough stability data.",
+ "and bandwidth %lu or %lu kilobytes/sec. "
+ "We%s have enough stability data.",
(unsigned long)stable_uptime,
(unsigned long)stable_mtbf,
- (unsigned long)fast_bandwidth,
+ (unsigned long)fast_bandwidth_kb,
guard_wfu*100,
(unsigned long)guard_tk,
- (unsigned long)guard_bandwidth_including_exits,
- (unsigned long)guard_bandwidth_excluding_exits,
+ (unsigned long)guard_bandwidth_including_exits_kb,
+ (unsigned long)guard_bandwidth_excluding_exits_kb,
enough_mtbf_info ? "" : " don't ");
tor_free(uptimes);
tor_free(mtbfs);
- tor_free(bandwidths);
- tor_free(bandwidths_excluding_exits);
+ tor_free(bandwidths_kb);
+ tor_free(bandwidths_excluding_exits_kb);
tor_free(tks);
tor_free(wfus);
}
+/* Use dirserv_compute_performance_thresholds() to compute the thresholds
+ * for the status flags, specifically for bridges.
+ *
+ * This is only called by a Bridge Authority from
+ * networkstatus_getinfo_by_purpose().
+ */
+void
+dirserv_compute_bridge_flag_thresholds(routerlist_t *rl)
+{
+
+ digestmap_t *omit_as_sybil = digestmap_new();
+ dirserv_compute_performance_thresholds(rl, omit_as_sybil);
+ digestmap_free(omit_as_sybil, NULL);
+}
+
+/** Measured bandwidth cache entry */
+typedef struct mbw_cache_entry_s {
+ long mbw_kb;
+ time_t as_of;
+} mbw_cache_entry_t;
+
+/** Measured bandwidth cache - keys are identity_digests, values are
+ * mbw_cache_entry_t *. */
+static digestmap_t *mbw_cache = NULL;
+
+/** Store a measured bandwidth cache entry when reading the measured
+ * bandwidths file. */
+STATIC void
+dirserv_cache_measured_bw(const measured_bw_line_t *parsed_line,
+ time_t as_of)
+{
+ mbw_cache_entry_t *e = NULL;
+
+ tor_assert(parsed_line);
+
+ /* Allocate a cache if we need */
+ if (!mbw_cache) mbw_cache = digestmap_new();
+
+ /* Check if we have an existing entry */
+ e = digestmap_get(mbw_cache, parsed_line->node_id);
+ /* If we do, we can re-use it */
+ if (e) {
+ /* Check that we really are newer, and update */
+ if (as_of > e->as_of) {
+ e->mbw_kb = parsed_line->bw_kb;
+ e->as_of = as_of;
+ }
+ } else {
+ /* We'll have to insert a new entry */
+ e = tor_malloc(sizeof(*e));
+ e->mbw_kb = parsed_line->bw_kb;
+ e->as_of = as_of;
+ digestmap_set(mbw_cache, parsed_line->node_id, e);
+ }
+}
+
+/** Clear and free the measured bandwidth cache */
+STATIC void
+dirserv_clear_measured_bw_cache(void)
+{
+ if (mbw_cache) {
+ /* Free the map and all entries */
+ digestmap_free(mbw_cache, tor_free_);
+ mbw_cache = NULL;
+ }
+}
+
+/** Scan the measured bandwidth cache and remove expired entries */
+STATIC void
+dirserv_expire_measured_bw_cache(time_t now)
+{
+
+ if (mbw_cache) {
+ /* Iterate through the cache and check each entry */
+ DIGESTMAP_FOREACH_MODIFY(mbw_cache, k, mbw_cache_entry_t *, e) {
+ if (now > e->as_of + MAX_MEASUREMENT_AGE) {
+ tor_free(e);
+ MAP_DEL_CURRENT(k);
+ }
+ } DIGESTMAP_FOREACH_END;
+
+ /* Check if we cleared the whole thing and free if so */
+ if (digestmap_size(mbw_cache) == 0) {
+ digestmap_free(mbw_cache, tor_free_);
+ mbw_cache = 0;
+ }
+ }
+}
+
+/** Get the current size of the measured bandwidth cache */
+STATIC int
+dirserv_get_measured_bw_cache_size(void)
+{
+ if (mbw_cache) return digestmap_size(mbw_cache);
+ else return 0;
+}
+
+/** Query the cache by identity digest, return value indicates whether
+ * we found it. The bw_out and as_of_out pointers receive the cached
+ * bandwidth value and the time it was cached if not NULL. */
+STATIC int
+dirserv_query_measured_bw_cache_kb(const char *node_id, long *bw_kb_out,
+ time_t *as_of_out)
+{
+ mbw_cache_entry_t *v = NULL;
+ int rv = 0;
+
+ if (mbw_cache && node_id) {
+ v = digestmap_get(mbw_cache, node_id);
+ if (v) {
+ /* Found something */
+ rv = 1;
+ if (bw_kb_out) *bw_kb_out = v->mbw_kb;
+ if (as_of_out) *as_of_out = v->as_of;
+ }
+ }
+
+ return rv;
+}
+
+/** Predicate wrapper for dirserv_query_measured_bw_cache() */
+STATIC int
+dirserv_has_measured_bw(const char *node_id)
+{
+ return dirserv_query_measured_bw_cache_kb(node_id, NULL, NULL);
+}
+
+/** Get the best estimate of a router's bandwidth for dirauth purposes,
+ * preferring measured to advertised values if available. */
+
+static uint32_t
+dirserv_get_bandwidth_for_router_kb(const routerinfo_t *ri)
+{
+ uint32_t bw_kb = 0;
+ /*
+ * Yeah, measured bandwidths in measured_bw_line_t are (implicitly
+ * signed) longs and the ones router_get_advertised_bandwidth() returns
+ * are uint32_t.
+ */
+ long mbw_kb = 0;
+
+ if (ri) {
+ /*
+ * * First try to see if we have a measured bandwidth; don't bother with
+ * as_of_out here, on the theory that a stale measured bandwidth is still
+ * better to trust than an advertised one.
+ */
+ if (dirserv_query_measured_bw_cache_kb(ri->cache_info.identity_digest,
+ &mbw_kb, NULL)) {
+ /* Got one! */
+ bw_kb = (uint32_t)mbw_kb;
+ } else {
+ /* If not, fall back to advertised */
+ bw_kb = router_get_advertised_bandwidth(ri) / 1000;
+ }
+ }
+
+ return bw_kb;
+}
+
+/** Look through the routerlist, and using the measured bandwidth cache count
+ * how many measured bandwidths we know. This is used to decide whether we
+ * ever trust advertised bandwidths for purposes of assigning flags. */
+static void
+dirserv_count_measured_bws(routerlist_t *rl)
+{
+ /* Initialize this first */
+ routers_with_measured_bw = 0;
+
+ tor_assert(rl);
+ tor_assert(rl->routers);
+
+ /* Iterate over the routerlist and count measured bandwidths */
+ SMARTLIST_FOREACH_BEGIN(rl->routers, routerinfo_t *, ri) {
+ /* Check if we know a measured bandwidth for this one */
+ if (dirserv_has_measured_bw(ri->cache_info.identity_digest)) {
+ ++routers_with_measured_bw;
+ }
+ } SMARTLIST_FOREACH_END(ri);
+}
+
+/** Return the bandwidth we believe for assigning flags; prefer measured
+ * over advertised, and if we have above a threshold quantity of measured
+ * bandwidths, we don't want to ever give flags to unmeasured routers, so
+ * return 0. */
+static uint32_t
+dirserv_get_credible_bandwidth_kb(const routerinfo_t *ri)
+{
+ int threshold;
+ uint32_t bw_kb = 0;
+ long mbw_kb;
+
+ tor_assert(ri);
+ /* Check if we have a measured bandwidth, and check the threshold if not */
+ if (!(dirserv_query_measured_bw_cache_kb(ri->cache_info.identity_digest,
+ &mbw_kb, NULL))) {
+ threshold = get_options()->MinMeasuredBWsForAuthToIgnoreAdvertised;
+ if (routers_with_measured_bw > threshold) {
+ /* Return zero for unmeasured bandwidth if we are above threshold */
+ bw_kb = 0;
+ } else {
+ /* Return an advertised bandwidth otherwise */
+ bw_kb = router_get_advertised_bandwidth_capped(ri) / 1000;
+ }
+ } else {
+ /* We have the measured bandwidth in mbw */
+ bw_kb = (uint32_t)mbw_kb;
+ }
+
+ return bw_kb;
+}
+
+/** Give a statement of our current performance thresholds for inclusion
+ * in a vote document. */
+char *
+dirserv_get_flag_thresholds_line(void)
+{
+ char *result=NULL;
+ const int measured_threshold =
+ get_options()->MinMeasuredBWsForAuthToIgnoreAdvertised;
+ const int enough_measured_bw = routers_with_measured_bw > measured_threshold;
+
+ tor_asprintf(&result,
+ "stable-uptime=%lu stable-mtbf=%lu "
+ "fast-speed=%lu "
+ "guard-wfu=%.03f%% guard-tk=%lu "
+ "guard-bw-inc-exits=%lu guard-bw-exc-exits=%lu "
+ "enough-mtbf=%d ignoring-advertised-bws=%d",
+ (unsigned long)stable_uptime,
+ (unsigned long)stable_mtbf,
+ (unsigned long)fast_bandwidth_kb*1000,
+ guard_wfu*100,
+ (unsigned long)guard_tk,
+ (unsigned long)guard_bandwidth_including_exits_kb*1000,
+ (unsigned long)guard_bandwidth_excluding_exits_kb*1000,
+ enough_mtbf_info ? 1 : 0,
+ enough_measured_bw ? 1 : 0);
+
+ return result;
+}
+
/** Given a platform string as in a routerinfo_t (possibly null), return a
* newly allocated version string for a networkstatus document, or NULL if the
* platform doesn't give a Tor version. */
@@ -2034,38 +1933,39 @@ version_from_platform(const char *platform)
return NULL;
}
-/** Helper: write the router-status information in <b>rs</b> into <b>buf</b>,
- * which has at least <b>buf_len</b> free characters. Do NUL-termination.
- * Use the same format as in network-status documents. If <b>version</b> is
- * non-NULL, add a "v" line for the platform. Return 0 on success, -1 on
- * failure.
+/** Helper: write the router-status information in <b>rs</b> into a newly
+ * allocated character buffer. Use the same format as in network-status
+ * documents. If <b>version</b> is non-NULL, add a "v" line for the platform.
+ * Return 0 on success, -1 on failure.
*
- * The format argument has three possible values:
+ * The format argument has one of the following values:
* NS_V2 - Output an entry suitable for a V2 NS opinion document
* NS_V3_CONSENSUS - Output the first portion of a V3 NS consensus entry
* NS_V3_CONSENSUS_MICRODESC - Output the first portion of a V3 microdesc
* consensus entry.
- * NS_V3_VOTE - Output a complete V3 NS vote
+ * NS_V3_VOTE - Output a complete V3 NS vote. If <b>vrs</b> is present,
+ * it contains additional information for the vote.
* NS_CONTROL_PORT - Output a NS document for the control port
*/
-int
-routerstatus_format_entry(char *buf, size_t buf_len,
- const routerstatus_t *rs, const char *version,
- routerstatus_format_type_t format)
+char *
+routerstatus_format_entry(const routerstatus_t *rs, const char *version,
+ routerstatus_format_type_t format,
+ const vote_routerstatus_t *vrs)
{
- int r;
- char *cp;
char *summary;
+ char *result = NULL;
char published[ISO_TIME_LEN+1];
char identity64[BASE64_DIGEST_LEN+1];
char digest64[BASE64_DIGEST_LEN+1];
+ smartlist_t *chunks = NULL;
format_iso_time(published, rs->published_on);
digest_to_base64(identity64, rs->identity_digest);
digest_to_base64(digest64, rs->descriptor_digest);
- r = tor_snprintf(buf, buf_len,
+ chunks = smartlist_new();
+ smartlist_add_asprintf(chunks,
"r %s %s %s%s%s %s %d %d\n",
rs->nickname,
identity64,
@@ -2075,21 +1975,26 @@ routerstatus_format_entry(char *buf, size_t buf_len,
fmt_addr32(rs->addr),
(int)rs->or_port,
(int)rs->dir_port);
- if (r<0) {
- log_warn(LD_BUG, "Not enough space in buffer.");
- return -1;
- }
/* TODO: Maybe we want to pass in what we need to build the rest of
* this here, instead of in the caller. Then we could use the
* networkstatus_type_t values, with an additional control port value
* added -MP */
- if (format == NS_V3_CONSENSUS || format == NS_V3_CONSENSUS_MICRODESC)
- return 0;
- cp = buf + strlen(buf);
- /* NOTE: Whenever this list expands, be sure to increase MAX_FLAG_LINE_LEN*/
- r = tor_snprintf(cp, buf_len - (cp-buf),
+ /* V3 microdesc consensuses don't have "a" lines. */
+ if (format == NS_V3_CONSENSUS_MICRODESC)
+ goto done;
+
+ /* Possible "a" line. At most one for now. */
+ if (!tor_addr_is_null(&rs->ipv6_addr)) {
+ smartlist_add_asprintf(chunks, "a %s\n",
+ fmt_addrport(&rs->ipv6_addr, rs->ipv6_orport));
+ }
+
+ if (format == NS_V3_CONSENSUS)
+ goto done;
+
+ smartlist_add_asprintf(chunks,
"s%s%s%s%s%s%s%s%s%s%s%s%s%s\n",
/* These must stay in alphabetical order. */
rs->is_authority?" Authority":"",
@@ -2103,27 +2008,18 @@ routerstatus_format_entry(char *buf, size_t buf_len,
rs->is_flagged_running?" Running":"",
rs->is_stable?" Stable":"",
rs->is_unnamed?" Unnamed":"",
- rs->is_v2_dir?" V2Dir":"",
+ (rs->dir_port!=0)?" V2Dir":"",
rs->is_valid?" Valid":"");
- if (r<0) {
- log_warn(LD_BUG, "Not enough space in buffer.");
- return -1;
- }
- cp += strlen(cp);
/* length of "opt v \n" */
#define V_LINE_OVERHEAD 7
if (version && strlen(version) < MAX_V_LINE_LEN - V_LINE_OVERHEAD) {
- if (tor_snprintf(cp, buf_len - (cp-buf), "opt v %s\n", version)<0) {
- log_warn(LD_BUG, "Unable to print router version.");
- return -1;
- }
- cp += strlen(cp);
+ smartlist_add_asprintf(chunks, "v %s\n", version);
}
if (format != NS_V2) {
const routerinfo_t* desc = router_get_by_id_digest(rs->identity_digest);
- uint32_t bw;
+ uint32_t bw_kb;
if (format != NS_CONTROL_PORT) {
/* Blow up more or less nicely if we didn't get anything or not the
@@ -2138,12 +2034,13 @@ routerstatus_format_entry(char *buf, size_t buf_len,
log_warn(LD_BUG, "Cannot get any descriptor for %s "
"(wanted descriptor %s).",
id, dd);
- return -1;
- };
+ goto err;
+ }
- /* This assert can fire for the control port, because
+ /* This assert could fire for the control port, because
* it can request NS documents before all descriptors
- * have been fetched. */
+ * have been fetched. Therefore, we only do this test when
+ * format != NS_CONTROL_PORT. */
if (tor_memneq(desc->cache_info.signed_descriptor_digest,
rs->descriptor_digest,
DIGEST_LEN)) {
@@ -2163,48 +2060,41 @@ routerstatus_format_entry(char *buf, size_t buf_len,
tor_assert(tor_memeq(desc->cache_info.signed_descriptor_digest,
rs->descriptor_digest,
DIGEST_LEN));
- };
+ }
}
if (format == NS_CONTROL_PORT && rs->has_bandwidth) {
- bw = rs->bandwidth;
+ bw_kb = rs->bandwidth_kb;
} else {
tor_assert(desc);
- bw = router_get_advertised_bandwidth_capped(desc) / 1000;
+ bw_kb = router_get_advertised_bandwidth_capped(desc) / 1000;
}
- r = tor_snprintf(cp, buf_len - (cp-buf),
- "w Bandwidth=%d\n", bw);
+ smartlist_add_asprintf(chunks,
+ "w Bandwidth=%d", bw_kb);
- if (r<0) {
- log_warn(LD_BUG, "Not enough space in buffer.");
- return -1;
- }
- cp += strlen(cp);
- if (format == NS_V3_VOTE && rs->has_measured_bw) {
- *--cp = '\0'; /* Kill "\n" */
- r = tor_snprintf(cp, buf_len - (cp-buf),
- " Measured=%d\n", rs->measured_bw);
- if (r<0) {
- log_warn(LD_BUG, "Not enough space in buffer for weight line.");
- return -1;
- }
- cp += strlen(cp);
+ if (format == NS_V3_VOTE && vrs && vrs->has_measured_bw) {
+ smartlist_add_asprintf(chunks,
+ " Measured=%d", vrs->measured_bw_kb);
}
+ smartlist_add(chunks, tor_strdup("\n"));
if (desc) {
- summary = policy_summarize(desc->exit_policy);
- r = tor_snprintf(cp, buf_len - (cp-buf), "p %s\n", summary);
- if (r<0) {
- log_warn(LD_BUG, "Not enough space in buffer.");
- tor_free(summary);
- return -1;
- }
- cp += strlen(cp);
+ summary = policy_summarize(desc->exit_policy, AF_INET);
+ smartlist_add_asprintf(chunks, "p %s\n", summary);
tor_free(summary);
}
}
- return 0;
+ done:
+ result = smartlist_join_strings(chunks, "", 0, NULL);
+
+ err:
+ if (chunks) {
+ SMARTLIST_FOREACH(chunks, char *, cp, tor_free(cp));
+ smartlist_free(chunks);
+ }
+
+ return result;
}
/** Helper for sorting: compares two routerinfos first by address, and then by
@@ -2213,11 +2103,11 @@ routerstatus_format_entry(char *buf, size_t buf_len,
* and a router with more bandwidth is more useful than one with less.)
**/
static int
-_compare_routerinfo_by_ip_and_bw(const void **a, const void **b)
+compare_routerinfo_by_ip_and_bw_(const void **a, const void **b)
{
routerinfo_t *first = *(routerinfo_t **)a, *second = *(routerinfo_t **)b;
int first_is_auth, second_is_auth;
- uint32_t bw_first, bw_second;
+ uint32_t bw_kb_first, bw_kb_second;
const node_t *node_first, *node_second;
int first_is_running, second_is_running;
@@ -2228,7 +2118,7 @@ _compare_routerinfo_by_ip_and_bw(const void **a, const void **b)
else if (first->addr > second->addr)
return 1;
- /* Potentially, this next bit could cause k n lg n memcmp calls. But in
+ /* Potentially, this next bit could cause k n lg n memeq calls. But in
* reality, we will almost never get here, since addresses will usually be
* different. */
@@ -2252,12 +2142,12 @@ _compare_routerinfo_by_ip_and_bw(const void **a, const void **b)
else if (!first_is_running && second_is_running)
return 1;
- bw_first = router_get_advertised_bandwidth(first);
- bw_second = router_get_advertised_bandwidth(second);
+ bw_kb_first = dirserv_get_bandwidth_for_router_kb(first);
+ bw_kb_second = dirserv_get_bandwidth_for_router_kb(second);
- if (bw_first > bw_second)
+ if (bw_kb_first > bw_kb_second)
return -1;
- else if (bw_first < bw_second)
+ else if (bw_kb_first < bw_kb_second)
return 1;
/* They're equal! Compare by identity digest, so there's a
@@ -2288,7 +2178,7 @@ get_possible_sybil_list(const smartlist_t *routers)
max_with_same_addr_on_authority = INT_MAX;
smartlist_add_all(routers_by_ip, routers);
- smartlist_sort(routers_by_ip, _compare_routerinfo_by_ip_and_bw);
+ smartlist_sort(routers_by_ip, compare_routerinfo_by_ip_and_bw_);
omit_as_sybil = digestmap_new();
last_addr = 0;
@@ -2393,9 +2283,7 @@ set_routerstatus_from_routerinfo(routerstatus_t *rs,
int listbaddirs, int vote_on_hsdirs)
{
const or_options_t *options = get_options();
- int unstable_version =
- !tor_version_as_new_as(ri->platform,"0.1.1.16-rc-cvs");
- uint32_t routerbw = router_get_advertised_bandwidth(ri);
+ uint32_t routerbw_kb = dirserv_get_credible_bandwidth_kb(ri);
memset(rs, 0, sizeof(routerstatus_t));
@@ -2406,8 +2294,7 @@ set_routerstatus_from_routerinfo(routerstatus_t *rs,
rs->is_exit = node->is_exit;
rs->is_stable = node->is_stable =
router_is_active(ri, node, now) &&
- !dirserv_thinks_router_is_unreliable(now, ri, 1, 0) &&
- !unstable_version;
+ !dirserv_thinks_router_is_unreliable(now, ri, 1, 0);
rs->is_fast = node->is_fast =
router_is_active(ri, node, now) &&
!dirserv_thinks_router_is_unreliable(now, ri, 0, 1);
@@ -2423,9 +2310,9 @@ set_routerstatus_from_routerinfo(routerstatus_t *rs,
if (node->is_fast &&
((options->AuthDirGuardBWGuarantee &&
- routerbw >= options->AuthDirGuardBWGuarantee) ||
- routerbw >= MIN(guard_bandwidth_including_exits,
- guard_bandwidth_excluding_exits)) &&
+ routerbw_kb >= options->AuthDirGuardBWGuarantee/1000) ||
+ routerbw_kb >= MIN(guard_bandwidth_including_exits_kb,
+ guard_bandwidth_excluding_exits_kb)) &&
is_router_version_good_for_possible_guard(ri->platform)) {
long tk = rep_hist_get_weighted_time_known(
node->identity, now);
@@ -2435,12 +2322,16 @@ set_routerstatus_from_routerinfo(routerstatus_t *rs,
} else {
rs->is_possible_guard = 0;
}
+ if (options->TestingTorNetwork &&
+ routerset_contains_routerstatus(options->TestingDirAuthVoteGuard,
+ rs, 0)) {
+ rs->is_possible_guard = 1;
+ }
rs->is_bad_directory = listbaddirs && node->is_bad_directory;
rs->is_bad_exit = listbadexits && node->is_bad_exit;
node->is_hs_dir = dirserv_thinks_router_is_hs_dir(ri, node, now);
rs->is_hs_dir = vote_on_hsdirs && node->is_hs_dir;
- rs->is_v2_dir = ri->dir_port != 0;
if (!strcasecmp(ri->nickname, UNNAMED_ROUTER_NICKNAME))
rs->is_named = rs->is_unnamed = 0;
@@ -2453,6 +2344,14 @@ set_routerstatus_from_routerinfo(routerstatus_t *rs,
strlcpy(rs->nickname, ri->nickname, sizeof(rs->nickname));
rs->or_port = ri->or_port;
rs->dir_port = ri->dir_port;
+ if (options->AuthDirHasIPv6Connectivity == 1 &&
+ !tor_addr_is_null(&ri->ipv6_addr) &&
+ node->last_reachable6 >= now - REACHABLE_TIMEOUT) {
+ /* We're configured as having IPv6 connectivity. There's an IPv6
+ OR port and it's reachable so copy it to the routerstatus. */
+ tor_addr_copy(&rs->ipv6_addr, &ri->ipv6_addr);
+ rs->ipv6_orport = ri->ipv6_orport;
+ }
}
/** Routerstatus <b>rs</b> is part of a group of routers that are on
@@ -2463,7 +2362,7 @@ static void
clear_status_flags_on_sybil(routerstatus_t *rs)
{
rs->is_authority = rs->is_exit = rs->is_stable = rs->is_fast =
- rs->is_flagged_running = rs->is_named = rs->is_valid = rs->is_v2_dir =
+ rs->is_flagged_running = rs->is_named = rs->is_valid =
rs->is_hs_dir = rs->is_possible_guard = rs->is_bad_exit =
rs->is_bad_directory = 0;
/* FFFF we might want some mechanism to check later on if we
@@ -2476,7 +2375,7 @@ clear_status_flags_on_sybil(routerstatus_t *rs)
* into a measured_bw_line_t output structure. Returns -1 on failure
* or 0 on success.
*/
-int
+STATIC int
measured_bw_line_parse(measured_bw_line_t *out, const char *orig_line)
{
char *line = tor_strdup(orig_line);
@@ -2512,7 +2411,7 @@ measured_bw_line_parse(measured_bw_line_t *out, const char *orig_line)
}
cp+=strlen("bw=");
- out->bw = tor_parse_long(cp, 0, 0, LONG_MAX, &parse_ok, &endptr);
+ out->bw_kb = tor_parse_long(cp, 0, 0, LONG_MAX, &parse_ok, &endptr);
if (!parse_ok || (*endptr && !TOR_ISSPACE(*endptr))) {
log_warn(LD_DIRSERV, "Invalid bandwidth in bandwidth file line: %s",
escaped(orig_line));
@@ -2557,20 +2456,20 @@ measured_bw_line_parse(measured_bw_line_t *out, const char *orig_line)
* of bandwidth statuses. Returns true if a line is found,
* false otherwise.
*/
-int
+STATIC int
measured_bw_line_apply(measured_bw_line_t *parsed_line,
smartlist_t *routerstatuses)
{
- routerstatus_t *rs = NULL;
+ vote_routerstatus_t *rs = NULL;
if (!routerstatuses)
return 0;
rs = smartlist_bsearch(routerstatuses, parsed_line->node_id,
- compare_digest_to_routerstatus_entry);
+ compare_digest_to_vote_routerstatus_entry);
if (rs) {
rs->has_measured_bw = 1;
- rs->measured_bw = (uint32_t)parsed_line->bw;
+ rs->measured_bw_kb = (uint32_t)parsed_line->bw_kb;
} else {
log_info(LD_DIRSERV, "Node ID %s not found in routerstatus list",
parsed_line->node_hex);
@@ -2581,7 +2480,7 @@ measured_bw_line_apply(measured_bw_line_t *parsed_line,
/**
* Read the measured bandwidth file and apply it to the list of
- * routerstatuses. Returns -1 on error, 0 otherwise.
+ * vote_routerstatus_t. Returns -1 on error, 0 otherwise.
*/
int
dirserv_read_measured_bandwidths(const char *from_file,
@@ -2590,8 +2489,9 @@ dirserv_read_measured_bandwidths(const char *from_file,
char line[256];
FILE *fp = tor_fopen_cloexec(from_file, "r");
int applied_lines = 0;
- time_t file_time;
+ time_t file_time, now;
int ok;
+
if (fp == NULL) {
log_warn(LD_CONFIG, "Can't open bandwidth file at configured location: %s",
from_file);
@@ -2607,7 +2507,7 @@ dirserv_read_measured_bandwidths(const char *from_file,
}
line[strlen(line)-1] = '\0';
- file_time = tor_parse_ulong(line, 10, 0, ULONG_MAX, &ok, NULL);
+ file_time = (time_t)tor_parse_ulong(line, 10, 0, ULONG_MAX, &ok, NULL);
if (!ok) {
log_warn(LD_DIRSERV, "Non-integer time in bandwidth file: %s",
escaped(line));
@@ -2615,7 +2515,8 @@ dirserv_read_measured_bandwidths(const char *from_file,
return -1;
}
- if ((time(NULL) - file_time) > MAX_MEASUREMENT_AGE) {
+ now = time(NULL);
+ if ((now - file_time) > MAX_MEASUREMENT_AGE) {
log_warn(LD_DIRSERV, "Bandwidth measurement file stale. Age: %u",
(unsigned)(time(NULL) - file_time));
fclose(fp);
@@ -2623,18 +2524,23 @@ dirserv_read_measured_bandwidths(const char *from_file,
}
if (routerstatuses)
- smartlist_sort(routerstatuses, compare_routerstatus_entries);
+ smartlist_sort(routerstatuses, compare_vote_routerstatus_entries);
while (!feof(fp)) {
measured_bw_line_t parsed_line;
if (fgets(line, sizeof(line), fp) && strlen(line)) {
if (measured_bw_line_parse(&parsed_line, line) != -1) {
+ /* Also cache the line for dirserv_get_bandwidth_for_router() */
+ dirserv_cache_measured_bw(&parsed_line, file_time);
if (measured_bw_line_apply(&parsed_line, routerstatuses) > 0)
applied_lines++;
}
}
}
+ /* Now would be a nice time to clean the cache, too */
+ dirserv_expire_measured_bw_cache(now);
+
fclose(fp);
log_info(LD_DIRSERV,
"Bandwidth measurement file successfully read. "
@@ -2672,14 +2578,6 @@ dirserv_generate_networkstatus_vote_obj(crypto_pk_t *private_key,
tor_assert(private_key);
tor_assert(cert);
- if (resolve_my_address(LOG_WARN, options, &addr, &hostname)<0) {
- log_warn(LD_NET, "Couldn't resolve my hostname");
- return NULL;
- }
- if (!strchr(hostname, '.')) {
- tor_free(hostname);
- hostname = tor_dup_ip(addr);
- }
if (crypto_pk_get_digest(private_key, signing_key_digest)<0) {
log_err(LD_BUG, "Error computing signing key digest");
return NULL;
@@ -2688,6 +2586,14 @@ dirserv_generate_networkstatus_vote_obj(crypto_pk_t *private_key,
log_err(LD_BUG, "Error computing identity key digest");
return NULL;
}
+ if (resolve_my_address(LOG_WARN, options, &addr, NULL, &hostname)<0) {
+ log_warn(LD_NET, "Couldn't resolve my hostname");
+ return NULL;
+ }
+ if (!hostname || !strchr(hostname, '.')) {
+ tor_free(hostname);
+ hostname = tor_dup_ip(addr);
+ }
if (options->VersioningAuthoritativeDir) {
client_versions = format_versions_list(options->RecommendedClientVersions);
@@ -2698,19 +2604,44 @@ dirserv_generate_networkstatus_vote_obj(crypto_pk_t *private_key,
if (!contact)
contact = "(none)";
+ /*
+ * Do this so dirserv_compute_performance_thresholds() and
+ * set_routerstatus_from_routerinfo() see up-to-date bandwidth info.
+ */
+ if (options->V3BandwidthsFile) {
+ dirserv_read_measured_bandwidths(options->V3BandwidthsFile, NULL);
+ } else {
+ /*
+ * No bandwidths file; clear the measured bandwidth cache in case we had
+ * one last time around.
+ */
+ if (dirserv_get_measured_bw_cache_size() > 0) {
+ dirserv_clear_measured_bw_cache();
+ }
+ }
+
/* precompute this part, since we need it to decide what "stable"
* means. */
SMARTLIST_FOREACH(rl->routers, routerinfo_t *, ri, {
dirserv_set_router_is_running(ri, now);
});
- dirserv_compute_performance_thresholds(rl);
-
routers = smartlist_new();
smartlist_add_all(routers, rl->routers);
routers_sort_by_identity(routers);
omit_as_sybil = get_possible_sybil_list(routers);
+ DIGESTMAP_FOREACH(omit_as_sybil, sybil_id, void *, ignore) {
+ (void) ignore;
+ rep_hist_make_router_pessimal(sybil_id, now);
+ } DIGESTMAP_FOREACH_END;
+
+ /* Count how many have measured bandwidths so we know how to assign flags;
+ * this must come before dirserv_compute_performance_thresholds() */
+ dirserv_count_measured_bws(rl);
+
+ dirserv_compute_performance_thresholds(rl, omit_as_sybil);
+
routerstatuses = smartlist_new();
microdescriptors = smartlist_new();
@@ -2718,7 +2649,6 @@ dirserv_generate_networkstatus_vote_obj(crypto_pk_t *private_key,
if (ri->cache_info.published_on >= cutoff) {
routerstatus_t *rs;
vote_routerstatus_t *vrs;
- microdesc_t *md;
node_t *node = node_get_mutable_by_id(ri->cache_info.identity_digest);
if (!node)
continue;
@@ -2736,18 +2666,8 @@ dirserv_generate_networkstatus_vote_obj(crypto_pk_t *private_key,
rs->is_flagged_running = 0;
vrs->version = version_from_platform(ri->platform);
- md = dirvote_create_microdescriptor(ri);
- if (md) {
- char buf[128];
- vote_microdesc_hash_t *h;
- dirvote_format_microdesc_vote_line(buf, sizeof(buf), md);
- h = tor_malloc(sizeof(vote_microdesc_hash_t));
- h->microdesc_hash_line = tor_strdup(buf);
- h->next = NULL;
- vrs->microdesc = h;
- md->last_listed = now;
- smartlist_add(microdescriptors, md);
- }
+ vrs->microdesc = dirvote_format_all_microdesc_vote_lines(ri, now,
+ microdescriptors);
smartlist_add(routerstatuses, vrs);
}
@@ -2764,9 +2684,18 @@ dirserv_generate_networkstatus_vote_obj(crypto_pk_t *private_key,
smartlist_free(routers);
digestmap_free(omit_as_sybil, NULL);
+ /* This pass through applies the measured bw lines to the routerstatuses */
if (options->V3BandwidthsFile) {
dirserv_read_measured_bandwidths(options->V3BandwidthsFile,
routerstatuses);
+ } else {
+ /*
+ * No bandwidths file; clear the measured bandwidth cache in case we had
+ * one last time around.
+ */
+ if (dirserv_get_measured_bw_cache_size() > 0) {
+ dirserv_clear_measured_bw_cache();
+ }
}
v3_out = tor_malloc_zero(sizeof(networkstatus_t));
@@ -2785,7 +2714,8 @@ dirserv_generate_networkstatus_vote_obj(crypto_pk_t *private_key,
else
last_consensus_interval = options->TestingV3AuthInitialVotingInterval;
v3_out->valid_after =
- dirvote_get_start_of_next_interval(now, (int)last_consensus_interval);
+ dirvote_get_start_of_next_interval(now, (int)last_consensus_interval,
+ options->TestingV3AuthVotingStartOffset);
format_iso_time(tbuf, v3_out->valid_after);
log_notice(LD_DIR,"Choosing valid-after time in vote as %s: "
"consensus_set=%d, last_interval=%d",
@@ -2856,272 +2786,6 @@ dirserv_generate_networkstatus_vote_obj(crypto_pk_t *private_key,
return v3_out;
}
-/** For v2 authoritative directories only: Replace the contents of
- * <b>the_v2_networkstatus</b> with a newly generated network status
- * object. */
-static cached_dir_t *
-generate_v2_networkstatus_opinion(void)
-{
- cached_dir_t *r = NULL;
- size_t len, identity_pkey_len;
- char *status = NULL, *client_versions = NULL, *server_versions = NULL,
- *identity_pkey = NULL, *hostname = NULL;
- char *outp, *endp;
- const or_options_t *options = get_options();
- char fingerprint[FINGERPRINT_LEN+1];
- char published[ISO_TIME_LEN+1];
- char digest[DIGEST_LEN];
- uint32_t addr;
- crypto_pk_t *private_key;
- routerlist_t *rl = router_get_routerlist();
- time_t now = time(NULL);
- time_t cutoff = now - ROUTER_MAX_AGE_TO_PUBLISH;
- int naming = options->NamingAuthoritativeDir;
- int versioning = options->VersioningAuthoritativeDir;
- int listbaddirs = options->AuthDirListBadDirs;
- int listbadexits = options->AuthDirListBadExits;
- int vote_on_hsdirs = options->VoteOnHidServDirectoriesV2;
- const char *contact;
- char *version_lines = NULL;
- smartlist_t *routers = NULL;
- digestmap_t *omit_as_sybil = NULL;
-
- private_key = get_server_identity_key();
-
- if (resolve_my_address(LOG_WARN, options, &addr, &hostname)<0) {
- log_warn(LD_NET, "Couldn't resolve my hostname");
- goto done;
- }
-
- format_iso_time(published, now);
-
- client_versions = format_versions_list(options->RecommendedClientVersions);
- server_versions = format_versions_list(options->RecommendedServerVersions);
-
- if (crypto_pk_write_public_key_to_string(private_key, &identity_pkey,
- &identity_pkey_len)<0) {
- log_warn(LD_BUG,"Writing public key to string failed.");
- goto done;
- }
-
- if (crypto_pk_get_fingerprint(private_key, fingerprint, 0)<0) {
- log_err(LD_BUG, "Error computing fingerprint");
- goto done;
- }
-
- contact = options->ContactInfo;
- if (!contact)
- contact = "(none)";
-
- if (versioning) {
- tor_asprintf(&version_lines,
- "client-versions %s\nserver-versions %s\n",
- client_versions, server_versions);
- } else {
- version_lines = tor_strdup("");
- }
-
- len = 4096+strlen(client_versions)+strlen(server_versions);
- len += identity_pkey_len*2;
- len += (RS_ENTRY_LEN)*smartlist_len(rl->routers);
-
- status = tor_malloc(len);
- tor_snprintf(status, len,
- "network-status-version 2\n"
- "dir-source %s %s %d\n"
- "fingerprint %s\n"
- "contact %s\n"
- "published %s\n"
- "dir-options%s%s%s%s\n"
- "%s" /* client version line, server version line. */
- "dir-signing-key\n%s",
- hostname, fmt_addr32(addr),
- (int)router_get_advertised_dir_port(options, 0),
- fingerprint,
- contact,
- published,
- naming ? " Names" : "",
- listbaddirs ? " BadDirectories" : "",
- listbadexits ? " BadExits" : "",
- versioning ? " Versions" : "",
- version_lines,
- identity_pkey);
- outp = status + strlen(status);
- endp = status + len;
-
- /* precompute this part, since we need it to decide what "stable"
- * means. */
- SMARTLIST_FOREACH(rl->routers, routerinfo_t *, ri, {
- dirserv_set_router_is_running(ri, now);
- });
-
- dirserv_compute_performance_thresholds(rl);
-
- routers = smartlist_new();
- smartlist_add_all(routers, rl->routers);
- routers_sort_by_identity(routers);
-
- omit_as_sybil = get_possible_sybil_list(routers);
-
- SMARTLIST_FOREACH_BEGIN(routers, routerinfo_t *, ri) {
- if (ri->cache_info.published_on >= cutoff) {
- routerstatus_t rs;
- char *version = version_from_platform(ri->platform);
- node_t *node = node_get_mutable_by_id(ri->cache_info.identity_digest);
- if (!node) {
- tor_free(version);
- continue;
- }
- set_routerstatus_from_routerinfo(&rs, node, ri, now,
- naming, listbadexits, listbaddirs,
- vote_on_hsdirs);
-
- if (digestmap_get(omit_as_sybil, ri->cache_info.identity_digest))
- clear_status_flags_on_sybil(&rs);
-
- if (routerstatus_format_entry(outp, endp-outp, &rs, version, NS_V2)) {
- log_warn(LD_BUG, "Unable to print router status.");
- tor_free(version);
- goto done;
- }
- tor_free(version);
- outp += strlen(outp);
- }
- } SMARTLIST_FOREACH_END(ri);
-
- if (tor_snprintf(outp, endp-outp, "directory-signature %s\n",
- options->Nickname)<0) {
- log_warn(LD_BUG, "Unable to write signature line.");
- goto done;
- }
- if (router_get_networkstatus_v2_hash(status, digest)<0) {
- log_warn(LD_BUG, "Unable to hash network status");
- goto done;
- }
- outp += strlen(outp);
-
- note_crypto_pk_op(SIGN_DIR);
- if (router_append_dirobj_signature(outp,endp-outp,digest,DIGEST_LEN,
- private_key)<0) {
- log_warn(LD_BUG, "Unable to sign router status.");
- goto done;
- }
-
- {
- networkstatus_v2_t *ns;
- if (!(ns = networkstatus_v2_parse_from_string(status))) {
- log_err(LD_BUG,"Generated a networkstatus we couldn't parse.");
- goto done;
- }
- networkstatus_v2_free(ns);
- }
-
- {
- cached_dir_t **ns_ptr = &the_v2_networkstatus;
- if (*ns_ptr)
- cached_dir_decref(*ns_ptr);
- *ns_ptr = new_cached_dir(status, now);
- status = NULL; /* So it doesn't get double-freed. */
- the_v2_networkstatus_is_dirty = 0;
- router_set_networkstatus_v2((*ns_ptr)->dir, now, NS_GENERATED, NULL);
- r = *ns_ptr;
- }
-
- done:
- tor_free(client_versions);
- tor_free(server_versions);
- tor_free(version_lines);
- tor_free(status);
- tor_free(hostname);
- tor_free(identity_pkey);
- smartlist_free(routers);
- digestmap_free(omit_as_sybil, NULL);
- return r;
-}
-
-/** Given the portion of a networkstatus request URL after "tor/status/" in
- * <b>key</b>, append to <b>result</b> the digests of the identity keys of the
- * networkstatus objects that the client has requested. */
-void
-dirserv_get_networkstatus_v2_fingerprints(smartlist_t *result,
- const char *key)
-{
- tor_assert(result);
-
- if (!cached_v2_networkstatus)
- cached_v2_networkstatus = digestmap_new();
-
- if (should_generate_v2_networkstatus())
- generate_v2_networkstatus_opinion();
-
- if (!strcmp(key,"authority")) {
- if (authdir_mode_v2(get_options())) {
- const routerinfo_t *me = router_get_my_routerinfo();
- if (me)
- smartlist_add(result,
- tor_memdup(me->cache_info.identity_digest, DIGEST_LEN));
- }
- } else if (!strcmp(key, "all")) {
- if (digestmap_size(cached_v2_networkstatus)) {
- digestmap_iter_t *iter;
- iter = digestmap_iter_init(cached_v2_networkstatus);
- while (!digestmap_iter_done(iter)) {
- const char *ident;
- void *val;
- digestmap_iter_get(iter, &ident, &val);
- smartlist_add(result, tor_memdup(ident, DIGEST_LEN));
- iter = digestmap_iter_next(cached_v2_networkstatus, iter);
- }
- } else {
- SMARTLIST_FOREACH(router_get_trusted_dir_servers(),
- trusted_dir_server_t *, ds,
- if (ds->type & V2_DIRINFO)
- smartlist_add(result, tor_memdup(ds->digest, DIGEST_LEN)));
- }
- smartlist_sort_digests(result);
- if (smartlist_len(result) == 0)
- log_info(LD_DIRSERV,
- "Client requested 'all' network status objects; we have none.");
- } else if (!strcmpstart(key, "fp/")) {
- dir_split_resource_into_fingerprints(key+3, result, NULL,
- DSR_HEX|DSR_SORT_UNIQ);
- }
-}
-
-/** Look for a network status object as specified by <b>key</b>, which should
- * be either "authority" (to find a network status generated by us), a hex
- * identity digest (to find a network status generated by given directory), or
- * "all" (to return all the v2 network status objects we have).
- */
-void
-dirserv_get_networkstatus_v2(smartlist_t *result,
- const char *key)
-{
- cached_dir_t *cached;
- smartlist_t *fingerprints = smartlist_new();
- tor_assert(result);
-
- if (!cached_v2_networkstatus)
- cached_v2_networkstatus = digestmap_new();
-
- dirserv_get_networkstatus_v2_fingerprints(fingerprints, key);
- SMARTLIST_FOREACH_BEGIN(fingerprints, const char *, fp) {
- if (router_digest_is_me(fp) && should_generate_v2_networkstatus())
- generate_v2_networkstatus_opinion();
- cached = digestmap_get(cached_v2_networkstatus, fp);
- if (cached) {
- smartlist_add(result, cached);
- } else {
- char hexbuf[HEX_DIGEST_LEN+1];
- base16_encode(hexbuf, sizeof(hexbuf), fp, DIGEST_LEN);
- log_info(LD_DIRSERV, "Don't know about any network status with "
- "fingerprint '%s'", hexbuf);
- }
- } SMARTLIST_FOREACH_END(fp);
- SMARTLIST_FOREACH(fingerprints, char *, cp, tor_free(cp));
- smartlist_free(fingerprints);
-}
-
/** As dirserv_get_routerdescs(), but instead of getting signed_descriptor_t
* pointers, adds copies of digests to fps_out, and doesn't use the
* /tor/server/ prefix. For a /d/ request, adds descriptor digests; for other
@@ -3273,36 +2937,42 @@ dirserv_get_routerdescs(smartlist_t *descs_out, const char *key,
* Inform the reachability checker that we could get to this guy.
*/
void
-dirserv_orconn_tls_done(const char *address,
+dirserv_orconn_tls_done(const tor_addr_t *addr,
uint16_t or_port,
const char *digest_rcvd)
{
- routerinfo_t *ri;
+ node_t *node = NULL;
+ tor_addr_port_t orport;
+ routerinfo_t *ri = NULL;
time_t now = time(NULL);
- tor_assert(address);
+ tor_assert(addr);
tor_assert(digest_rcvd);
- ri = router_get_mutable_by_digest(digest_rcvd);
-
- if (ri == NULL)
+ node = node_get_mutable_by_id(digest_rcvd);
+ if (node == NULL || node->ri == NULL)
return;
+ ri = node->ri;
- if (!strcasecmp(address, ri->address) && or_port == ri->or_port) {
+ tor_addr_copy(&orport.addr, addr);
+ orport.port = or_port;
+ if (router_has_orport(ri, &orport)) {
/* Found the right router. */
if (!authdir_mode_bridge(get_options()) ||
ri->purpose == ROUTER_PURPOSE_BRIDGE) {
+ char addrstr[TOR_ADDR_BUF_LEN];
/* This is a bridge or we're not a bridge authorititative --
mark it as reachable. */
- tor_addr_t addr, *addrp=NULL;
log_info(LD_DIRSERV, "Found router %s to be reachable at %s:%d. Yay.",
router_describe(ri),
- address, ri->or_port);
- if (tor_addr_parse(&addr, ri->address) != -1)
- addrp = &addr;
- else
- log_warn(LD_BUG, "Couldn't parse IP address \"%s\"", ri->address);
- rep_hist_note_router_reachable(digest_rcvd, addrp, or_port, now);
- ri->last_reachable = now;
+ tor_addr_to_str(addrstr, addr, sizeof(addrstr), 1),
+ ri->or_port);
+ if (tor_addr_family(addr) == AF_INET) {
+ rep_hist_note_router_reachable(digest_rcvd, addr, or_port, now);
+ node->last_reachable = now;
+ } else if (tor_addr_family(addr) == AF_INET6) {
+ /* No rephist for IPv6. */
+ node->last_reachable6 = now;
+ }
}
}
}
@@ -3325,7 +2995,7 @@ dirserv_should_launch_reachability_test(const routerinfo_t *ri,
/* It just came out of hibernation; launch a reachability test */
return 1;
}
- if (! routers_have_same_or_addr(ri, ri_old)) {
+ if (! routers_have_same_or_addrs(ri, ri_old)) {
/* Address or port changed; launch a reachability test */
return 1;
}
@@ -3338,15 +3008,35 @@ dirserv_should_launch_reachability_test(const routerinfo_t *ri,
void
dirserv_single_reachability_test(time_t now, routerinfo_t *router)
{
+ channel_t *chan = NULL;
+ node_t *node = NULL;
tor_addr_t router_addr;
+ (void) now;
+
+ tor_assert(router);
+ node = node_get_mutable_by_id(router->cache_info.identity_digest);
+ tor_assert(node);
+
+ /* IPv4. */
log_debug(LD_OR,"Testing reachability of %s at %s:%u.",
- router->nickname, router->address, router->or_port);
- /* Remember when we started trying to determine reachability */
- if (!router->testing_since)
- router->testing_since = now;
+ router->nickname, fmt_addr32(router->addr), router->or_port);
tor_addr_from_ipv4h(&router_addr, router->addr);
- connection_or_connect(&router_addr, router->or_port,
- router->cache_info.identity_digest);
+ chan = channel_tls_connect(&router_addr, router->or_port,
+ router->cache_info.identity_digest);
+ if (chan) command_setup_channel(chan);
+
+ /* Possible IPv6. */
+ if (get_options()->AuthDirHasIPv6Connectivity == 1 &&
+ !tor_addr_is_null(&router->ipv6_addr)) {
+ char addrstr[TOR_ADDR_BUF_LEN];
+ log_debug(LD_OR, "Testing reachability of %s at %s:%u.",
+ router->nickname,
+ tor_addr_to_str(addrstr, &router->ipv6_addr, sizeof(addrstr), 1),
+ router->ipv6_orport);
+ chan = channel_tls_connect(&router->ipv6_addr, router->ipv6_orport,
+ router->cache_info.identity_digest);
+ if (chan) command_setup_channel(chan);
+ }
}
/** Auth dir server only: load balance such that we only
@@ -3395,15 +3085,12 @@ static cached_dir_t *
lookup_cached_dir_by_fp(const char *fp)
{
cached_dir_t *d = NULL;
- if (tor_digest_is_zero(fp) && cached_consensuses)
+ if (tor_digest_is_zero(fp) && cached_consensuses) {
d = strmap_get(cached_consensuses, "ns");
- else if (memchr(fp, '\0', DIGEST_LEN) && cached_consensuses &&
+ } else if (memchr(fp, '\0', DIGEST_LEN) && cached_consensuses &&
(d = strmap_get(cached_consensuses, fp))) {
/* this here interface is a nasty hack XXXX024 */;
- } else if (router_digest_is_me(fp) && the_v2_networkstatus)
- d = the_v2_networkstatus;
- else if (cached_v2_networkstatus)
- d = digestmap_get(cached_v2_networkstatus, fp);
+ }
return d;
}
@@ -3609,8 +3296,6 @@ connection_dirserv_add_servers_to_outbuf(dir_connection_t *conn)
}
body = signed_descriptor_get_body(sd);
if (conn->zlib_state) {
- /* XXXX024 This 'last' business should actually happen on the last
- * routerinfo, not on the last fingerprint. */
int last = ! smartlist_len(conn->fingerprint_stack);
connection_write_to_buf_zlib(body, sd->signed_descriptor_len, conn,
last);
@@ -3627,6 +3312,11 @@ connection_dirserv_add_servers_to_outbuf(dir_connection_t *conn)
if (!smartlist_len(conn->fingerprint_stack)) {
/* We just wrote the last one; finish up. */
+ if (conn->zlib_state) {
+ connection_write_to_buf_zlib("", 0, conn, 1);
+ tor_zlib_free(conn->zlib_state);
+ conn->zlib_state = NULL;
+ }
conn->dir_spool_src = DIR_SPOOL_NONE;
smartlist_free(conn->fingerprint_stack);
conn->fingerprint_stack = NULL;
@@ -3649,11 +3339,9 @@ connection_dirserv_add_microdescs_to_outbuf(dir_connection_t *conn)
char *fp256 = smartlist_pop_last(conn->fingerprint_stack);
microdesc_t *md = microdesc_cache_lookup_by_digest256(cache, fp256);
tor_free(fp256);
- if (!md)
+ if (!md || !md->body)
continue;
if (conn->zlib_state) {
- /* XXXX024 This 'last' business should actually happen on the last
- * routerinfo, not on the last fingerprint. */
int last = !smartlist_len(conn->fingerprint_stack);
connection_write_to_buf_zlib(md->body, md->bodylen, conn, last);
if (last) {
@@ -3665,6 +3353,11 @@ connection_dirserv_add_microdescs_to_outbuf(dir_connection_t *conn)
}
}
if (!smartlist_len(conn->fingerprint_stack)) {
+ if (conn->zlib_state) {
+ connection_write_to_buf_zlib("", 0, conn, 1);
+ tor_zlib_free(conn->zlib_state);
+ conn->zlib_state = NULL;
+ }
conn->dir_spool_src = DIR_SPOOL_NONE;
smartlist_free(conn->fingerprint_stack);
conn->fingerprint_stack = NULL;
@@ -3767,7 +3460,7 @@ connection_dirserv_add_networkstatus_bytes_to_outbuf(dir_connection_t *conn)
int
connection_dirserv_flushed_some(dir_connection_t *conn)
{
- tor_assert(conn->_base.state == DIR_CONN_STATE_SERVER_WRITING);
+ tor_assert(conn->base_.state == DIR_CONN_STATE_SERVER_WRITING);
if (connection_get_outbuf_len(TO_CONN(conn)) >= DIRSERV_BUFFER_MIN)
return 0;
@@ -3796,15 +3489,9 @@ dirserv_free_all(void)
{
dirserv_free_fingerprint_list();
- cached_dir_decref(the_directory);
- clear_cached_dir(&the_runningrouters);
- cached_dir_decref(the_v2_networkstatus);
- cached_dir_decref(cached_directory);
- clear_cached_dir(&cached_runningrouters);
-
- digestmap_free(cached_v2_networkstatus, _free_cached_dir);
- cached_v2_networkstatus = NULL;
- strmap_free(cached_consensuses, _free_cached_dir);
+ strmap_free(cached_consensuses, free_cached_dir_);
cached_consensuses = NULL;
+
+ dirserv_clear_measured_bw_cache();
}
diff --git a/src/or/dirserv.h b/src/or/dirserv.h
index 22269b200..858e6e3a0 100644
--- a/src/or/dirserv.h
+++ b/src/or/dirserv.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,8 +9,10 @@
* \brief Header file for dirserv.c.
**/
-#ifndef _TOR_DIRSERV_H
-#define _TOR_DIRSERV_H
+#ifndef TOR_DIRSERV_H
+#define TOR_DIRSERV_H
+
+#include "testsupport.h"
/** What fraction (1 over this number) of the relay ID space do we
* (as a directory authority) launch connections to at each reachability
@@ -29,28 +31,6 @@
/** Maximum allowable length of a version line in a networkstatus. */
#define MAX_V_LINE_LEN 128
-/** Length of "r Authority BadDirectory BadExit Exit Fast Guard HSDir Named
- * Running Stable Unnamed V2Dir Valid\n". */
-#define MAX_FLAG_LINE_LEN 96
-/** Length of "w" line for weighting. Currently at most
- * "w Bandwidth=<uint32t> Measured=<uint32t>\n" */
-#define MAX_WEIGHT_LINE_LEN (12+10+10+10+1)
-/** Maximum length of an exit policy summary line. */
-#define MAX_POLICY_LINE_LEN (3+MAX_EXITPOLICY_SUMMARY_LEN)
-/** Amount of space to allocate for each entry: r, s, and v lines. */
-#define RS_ENTRY_LEN \
- ( /* first line */ \
- MAX_NICKNAME_LEN+BASE64_DIGEST_LEN*2+ISO_TIME_LEN+INET_NTOA_BUF_LEN+ \
- 5*2 /* ports */ + 10 /* punctuation */ + \
- /* second line */ \
- MAX_FLAG_LINE_LEN + \
- /* weight line */ \
- MAX_WEIGHT_LINE_LEN + \
- /* p line. */ \
- MAX_POLICY_LINE_LEN + \
- /* v line. */ \
- MAX_V_LINE_LEN \
- )
int connection_dirserv_flushed_some(dir_connection_t *conn);
@@ -70,44 +50,31 @@ int list_server_status_v1(smartlist_t *routers, char **router_status_out,
int for_controller);
int dirserv_dump_directory_to_string(char **dir_out,
crypto_pk_t *private_key);
+char *dirserv_get_flag_thresholds_line(void);
+void dirserv_compute_bridge_flag_thresholds(routerlist_t *rl);
int directory_fetches_from_authorities(const or_options_t *options);
int directory_fetches_dir_info_early(const or_options_t *options);
int directory_fetches_dir_info_later(const or_options_t *options);
-int directory_caches_v2_dir_info(const or_options_t *options);
-#define directory_caches_v1_dir_info(o) directory_caches_v2_dir_info(o)
int directory_caches_unknown_auth_certs(const or_options_t *options);
int directory_caches_dir_info(const or_options_t *options);
int directory_permits_begindir_requests(const or_options_t *options);
-int directory_permits_controller_requests(const or_options_t *options);
int directory_too_idle_to_fetch_descriptors(const or_options_t *options,
time_t now);
-void directory_set_dirty(void);
-cached_dir_t *dirserv_get_directory(void);
-cached_dir_t *dirserv_get_runningrouters(void);
cached_dir_t *dirserv_get_consensus(const char *flavor_name);
-void dirserv_set_cached_directory(const char *directory, time_t when,
- int is_running_routers);
-void dirserv_set_cached_networkstatus_v2(const char *directory,
- const char *identity,
- time_t published);
void dirserv_set_cached_consensus_networkstatus(const char *consensus,
const char *flavor_name,
const digests_t *digests,
time_t published);
void dirserv_clear_old_networkstatuses(time_t cutoff);
-void dirserv_clear_old_v1_info(time_t now);
-void dirserv_get_networkstatus_v2(smartlist_t *result, const char *key);
-void dirserv_get_networkstatus_v2_fingerprints(smartlist_t *result,
- const char *key);
int dirserv_get_routerdesc_fingerprints(smartlist_t *fps_out, const char *key,
const char **msg,
int for_unencrypted_conn,
int is_extrainfo);
int dirserv_get_routerdescs(smartlist_t *descs_out, const char *key,
const char **msg);
-void dirserv_orconn_tls_done(const char *address,
+void dirserv_orconn_tls_done(const tor_addr_t *addr,
uint16_t or_port,
const char *digest_rcvd);
int dirserv_should_launch_reachability_test(const routerinfo_t *ri,
@@ -130,18 +97,33 @@ size_t dirserv_estimate_data_size(smartlist_t *fps, int is_serverdescs,
int compressed);
size_t dirserv_estimate_microdesc_size(const smartlist_t *fps, int compressed);
-int routerstatus_format_entry(char *buf, size_t buf_len,
+char *routerstatus_format_entry(
const routerstatus_t *rs, const char *platform,
- routerstatus_format_type_t format);
+ routerstatus_format_type_t format,
+ const vote_routerstatus_t *vrs);
void dirserv_free_all(void);
void cached_dir_decref(cached_dir_t *d);
cached_dir_t *new_cached_dir(char *s, time_t published);
#ifdef DIRSERV_PRIVATE
-int measured_bw_line_parse(measured_bw_line_t *out, const char *line);
-int measured_bw_line_apply(measured_bw_line_t *parsed_line,
+/* Put the MAX_MEASUREMENT_AGE #define here so unit tests can see it */
+#define MAX_MEASUREMENT_AGE (3*24*60*60) /* 3 days */
+
+STATIC int measured_bw_line_parse(measured_bw_line_t *out, const char *line);
+
+STATIC int measured_bw_line_apply(measured_bw_line_t *parsed_line,
smartlist_t *routerstatuses);
+
+STATIC void dirserv_cache_measured_bw(const measured_bw_line_t *parsed_line,
+ time_t as_of);
+STATIC void dirserv_clear_measured_bw_cache(void);
+STATIC void dirserv_expire_measured_bw_cache(time_t now);
+STATIC int dirserv_get_measured_bw_cache_size(void);
+STATIC int dirserv_query_measured_bw_cache_kb(const char *node_id,
+ long *bw_out,
+ time_t *as_of_out);
+STATIC int dirserv_has_measured_bw(const char *node_id);
#endif
int dirserv_read_measured_bandwidths(const char *from_file,
diff --git a/src/or/dirvote.c b/src/or/dirvote.c
index 144859ae0..c7be343ca 100644
--- a/src/or/dirvote.c
+++ b/src/or/dirvote.c
@@ -1,6 +1,6 @@
/* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#define DIRVOTE_PRIVATE
@@ -53,54 +53,25 @@ static int dirvote_compute_consensuses(void);
static int dirvote_publish_consensus(void);
static char *make_consensus_method_list(int low, int high, const char *sep);
-/** The highest consensus method that we currently support. */
-#define MAX_SUPPORTED_CONSENSUS_METHOD 13
-
-/** Lowest consensus method that contains a 'directory-footer' marker */
-#define MIN_METHOD_FOR_FOOTER 9
-
-/** Lowest consensus method that contains bandwidth weights */
-#define MIN_METHOD_FOR_BW_WEIGHTS 9
-
-/** Lowest consensus method that contains consensus params */
-#define MIN_METHOD_FOR_PARAMS 7
-
-/** Lowest consensus method that generates microdescriptors */
-#define MIN_METHOD_FOR_MICRODESC 8
-
-/** Lowest consensus method that ensures a majority of authorities voted
- * for a param. */
-#define MIN_METHOD_FOR_MAJORITY_PARAMS 12
-
-/** Lowest consensus method where microdesc consensuses omit any entry
- * with no microdesc. */
-#define MIN_METHOD_FOR_MANDATORY_MICRODESC 13
-
/* =====
* Voting
* =====*/
-/* Overestimated. */
-#define MICRODESC_LINE_LEN 80
-
/** Return a new string containing the string representation of the vote in
* <b>v3_ns</b>, signed with our v3 signing key <b>private_signing_key</b>.
* For v3 authorities. */
-char *
+STATIC char *
format_networkstatus_vote(crypto_pk_t *private_signing_key,
networkstatus_t *v3_ns)
{
- size_t len;
- char *status = NULL;
+ smartlist_t *chunks;
const char *client_versions = NULL, *server_versions = NULL;
- char *outp, *endp;
char fingerprint[FINGERPRINT_LEN+1];
char digest[DIGEST_LEN];
uint32_t addr;
- routerlist_t *rl = router_get_routerlist();
- char *version_lines = NULL;
- int r;
+ char *client_versions_line = NULL, *server_versions_line = NULL;
networkstatus_voter_info_t *voter;
+ char *status = NULL;
tor_assert(private_signing_key);
tor_assert(v3_ns->type == NS_TYPE_VOTE || v3_ns->type == NS_TYPE_OPINION);
@@ -114,49 +85,28 @@ format_networkstatus_vote(crypto_pk_t *private_signing_key,
client_versions = v3_ns->client_versions;
server_versions = v3_ns->server_versions;
- if (client_versions || server_versions) {
- size_t v_len = 64;
- char *cp;
- if (client_versions)
- v_len += strlen(client_versions);
- if (server_versions)
- v_len += strlen(server_versions);
- version_lines = tor_malloc(v_len);
- cp = version_lines;
- if (client_versions) {
- r = tor_snprintf(cp, v_len-(cp-version_lines),
- "client-versions %s\n", client_versions);
- if (r < 0) {
- log_err(LD_BUG, "Insufficient memory for client-versions line");
- tor_assert(0);
- }
- cp += strlen(cp);
- }
- if (server_versions) {
- r = tor_snprintf(cp, v_len-(cp-version_lines),
- "server-versions %s\n", server_versions);
- if (r < 0) {
- log_err(LD_BUG, "Insufficient memory for server-versions line");
- tor_assert(0);
- }
- }
+ if (client_versions) {
+ tor_asprintf(&client_versions_line, "client-versions %s\n",
+ client_versions);
} else {
- version_lines = tor_strdup("");
+ client_versions_line = tor_strdup("");
+ }
+ if (server_versions) {
+ tor_asprintf(&server_versions_line, "server-versions %s\n",
+ server_versions);
+ } else {
+ server_versions_line = tor_strdup("");
}
- len = 8192;
- len += strlen(version_lines);
- len += (RS_ENTRY_LEN+MICRODESC_LINE_LEN)*smartlist_len(rl->routers);
- len += strlen("\ndirectory-footer\n");
- len += v3_ns->cert->cache_info.signed_descriptor_len;
-
- status = tor_malloc(len);
+ chunks = smartlist_new();
{
char published[ISO_TIME_LEN+1];
char va[ISO_TIME_LEN+1];
char fu[ISO_TIME_LEN+1];
char vu[ISO_TIME_LEN+1];
char *flags = smartlist_join_strings(v3_ns->known_flags, " ", 0, NULL);
+ /* XXXX Abstraction violation: should be pulling a field out of v3_ns.*/
+ char *flag_thresholds = dirserv_get_flag_thresholds_line();
char *params;
authority_cert_t *cert = v3_ns->cert;
char *methods =
@@ -172,7 +122,7 @@ format_networkstatus_vote(crypto_pk_t *private_signing_key,
params = tor_strdup("");
tor_assert(cert);
- r = tor_snprintf(status, len,
+ smartlist_add_asprintf(chunks,
"network-status-version 3\n"
"vote-status %s\n"
"consensus-methods %s\n"
@@ -181,8 +131,9 @@ format_networkstatus_vote(crypto_pk_t *private_signing_key,
"fresh-until %s\n"
"valid-until %s\n"
"voting-delay %d %d\n"
- "%s" /* versions */
+ "%s%s" /* versions */
"known-flags %s\n"
+ "flag-thresholds %s\n"
"params %s\n"
"dir-source %s %s %s %s %d %d\n"
"contact %s\n",
@@ -190,99 +141,76 @@ format_networkstatus_vote(crypto_pk_t *private_signing_key,
methods,
published, va, fu, vu,
v3_ns->vote_seconds, v3_ns->dist_seconds,
- version_lines,
+ client_versions_line,
+ server_versions_line,
flags,
+ flag_thresholds,
params,
voter->nickname, fingerprint, voter->address,
fmt_addr32(addr), voter->dir_port, voter->or_port,
voter->contact);
- if (r < 0) {
- log_err(LD_BUG, "Insufficient memory for network status line");
- tor_assert(0);
- }
-
tor_free(params);
tor_free(flags);
+ tor_free(flag_thresholds);
tor_free(methods);
- outp = status + strlen(status);
- endp = status + len;
if (!tor_digest_is_zero(voter->legacy_id_digest)) {
char fpbuf[HEX_DIGEST_LEN+1];
base16_encode(fpbuf, sizeof(fpbuf), voter->legacy_id_digest, DIGEST_LEN);
- r = tor_snprintf(outp, endp-outp, "legacy-dir-key %s\n", fpbuf);
- if (r < 0) {
- log_err(LD_BUG, "Insufficient memory for legacy-dir-key line");
- tor_assert(0);
- }
- outp += strlen(outp);
+ smartlist_add_asprintf(chunks, "legacy-dir-key %s\n", fpbuf);
}
- tor_assert(outp + cert->cache_info.signed_descriptor_len < endp);
- memcpy(outp, cert->cache_info.signed_descriptor_body,
- cert->cache_info.signed_descriptor_len);
-
- outp += cert->cache_info.signed_descriptor_len;
+ smartlist_add(chunks, tor_strndup(cert->cache_info.signed_descriptor_body,
+ cert->cache_info.signed_descriptor_len));
}
SMARTLIST_FOREACH_BEGIN(v3_ns->routerstatus_list, vote_routerstatus_t *,
vrs) {
+ char *rsf;
vote_microdesc_hash_t *h;
- if (routerstatus_format_entry(outp, endp-outp, &vrs->status,
- vrs->version, NS_V3_VOTE) < 0) {
- log_warn(LD_BUG, "Unable to print router status.");
- goto err;
- }
- outp += strlen(outp);
+ rsf = routerstatus_format_entry(&vrs->status,
+ vrs->version, NS_V3_VOTE, vrs);
+ if (rsf)
+ smartlist_add(chunks, rsf);
for (h = vrs->microdesc; h; h = h->next) {
- size_t mlen = strlen(h->microdesc_hash_line);
- if (outp+mlen >= endp) {
- log_warn(LD_BUG, "Can't fit microdesc line in vote.");
- }
- memcpy(outp, h->microdesc_hash_line, mlen+1);
- outp += strlen(outp);
+ smartlist_add(chunks, tor_strdup(h->microdesc_hash_line));
}
} SMARTLIST_FOREACH_END(vrs);
- r = tor_snprintf(outp, endp-outp, "directory-footer\n");
- if (r < 0) {
- log_err(LD_BUG, "Insufficient memory for directory-footer line");
- tor_assert(0);
- }
- outp += strlen(outp);
+ smartlist_add(chunks, tor_strdup("directory-footer\n"));
+
+ /* The digest includes everything up through the space after
+ * directory-signature. (Yuck.) */
+ crypto_digest_smartlist(digest, DIGEST_LEN, chunks,
+ "directory-signature ", DIGEST_SHA1);
{
char signing_key_fingerprint[FINGERPRINT_LEN+1];
- if (tor_snprintf(outp, endp-outp, "directory-signature ")<0) {
- log_warn(LD_BUG, "Unable to start signature line.");
- goto err;
- }
- outp += strlen(outp);
-
if (crypto_pk_get_fingerprint(private_signing_key,
signing_key_fingerprint, 0)<0) {
log_warn(LD_BUG, "Unable to get fingerprint for signing key");
goto err;
}
- if (tor_snprintf(outp, endp-outp, "%s %s\n", fingerprint,
- signing_key_fingerprint)<0) {
- log_warn(LD_BUG, "Unable to end signature line.");
- goto err;
- }
- outp += strlen(outp);
+
+ smartlist_add_asprintf(chunks, "directory-signature %s %s\n", fingerprint,
+ signing_key_fingerprint);
}
- if (router_get_networkstatus_v3_hash(status, digest, DIGEST_SHA1)<0)
- goto err;
note_crypto_pk_op(SIGN_DIR);
- if (router_append_dirobj_signature(outp,endp-outp,digest, DIGEST_LEN,
- private_signing_key)<0) {
- log_warn(LD_BUG, "Unable to sign networkstatus vote.");
- goto err;
+ {
+ char *sig = router_get_dirobj_signature(digest, DIGEST_LEN,
+ private_signing_key);
+ if (!sig) {
+ log_warn(LD_BUG, "Unable to sign networkstatus vote.");
+ goto err;
+ }
+ smartlist_add(chunks, sig);
}
+ status = smartlist_join_strings(chunks, "", 0, NULL);
+
{
networkstatus_t *v;
if (!(v = networkstatus_parse_vote_from_string(status, NULL,
@@ -300,7 +228,12 @@ format_networkstatus_vote(crypto_pk_t *private_signing_key,
err:
tor_free(status);
done:
- tor_free(version_lines);
+ tor_free(client_versions_line);
+ tor_free(server_versions_line);
+ if (chunks) {
+ SMARTLIST_FOREACH(chunks, char *, cp, tor_free(cp));
+ smartlist_free(chunks);
+ }
return status;
}
@@ -346,7 +279,7 @@ typedef struct dir_src_ent_t {
/** Helper for sorting networkstatus_t votes (not consensuses) by the
* hash of their voters' identity digests. */
static int
-_compare_votes_by_authority_id(const void **_a, const void **_b)
+compare_votes_by_authority_id_(const void **_a, const void **_b)
{
const networkstatus_t *a = *_a, *b = *_b;
return fast_memcmp(get_voter(a)->identity_digest,
@@ -357,7 +290,7 @@ _compare_votes_by_authority_id(const void **_a, const void **_b)
* their identity digests, and return -1, 0, or 1 depending on their
* ordering */
static int
-_compare_dir_src_ents_by_authority_id(const void **_a, const void **_b)
+compare_dir_src_ents_by_authority_id_(const void **_a, const void **_b)
{
const dir_src_ent_t *a = *_a, *b = *_b;
const networkstatus_voter_info_t *a_v = get_voter(a->v),
@@ -424,12 +357,27 @@ compare_vote_rs(const vote_routerstatus_t *a, const vote_routerstatus_t *b)
/** Helper for sorting routerlists based on compare_vote_rs. */
static int
-_compare_vote_rs(const void **_a, const void **_b)
+compare_vote_rs_(const void **_a, const void **_b)
{
const vote_routerstatus_t *a = *_a, *b = *_b;
return compare_vote_rs(a,b);
}
+/** Helper for sorting OR ports. */
+static int
+compare_orports_(const void **_a, const void **_b)
+{
+ const tor_addr_port_t *a = *_a, *b = *_b;
+ int r;
+
+ if ((r = tor_addr_compare(&a->addr, &b->addr, CMP_EXACT)))
+ return r;
+ if ((r = (((int) b->port) - ((int) a->port))))
+ return r;
+
+ return 0;
+}
+
/** Given a list of vote_routerstatus_t, all for the same router identity,
* return whichever is most frequent, breaking ties in favor of more
* recently published vote_routerstatus_t and in case of ties there,
@@ -437,17 +385,18 @@ _compare_vote_rs(const void **_a, const void **_b)
*/
static vote_routerstatus_t *
compute_routerstatus_consensus(smartlist_t *votes, int consensus_method,
- char *microdesc_digest256_out)
+ char *microdesc_digest256_out,
+ tor_addr_port_t *best_alt_orport_out)
{
vote_routerstatus_t *most = NULL, *cur = NULL;
int most_n = 0, cur_n = 0;
time_t most_published = 0;
- /* _compare_vote_rs() sorts the items by identity digest (all the same),
+ /* compare_vote_rs_() sorts the items by identity digest (all the same),
* then by SD digest. That way, if we have a tie that the published_on
* date cannot tie, we use the descriptor with the smaller digest.
*/
- smartlist_sort(votes, _compare_vote_rs);
+ smartlist_sort(votes, compare_vote_rs_);
SMARTLIST_FOREACH_BEGIN(votes, vote_routerstatus_t *, rs) {
if (cur && !compare_vote_rs(cur, rs)) {
++cur_n;
@@ -473,6 +422,38 @@ compute_routerstatus_consensus(smartlist_t *votes, int consensus_method,
tor_assert(most);
+ /* If we're producing "a" lines, vote on potential alternative (sets
+ * of) OR port(s) in the winning routerstatuses.
+ *
+ * XXX prop186 There's at most one alternative OR port (_the_ IPv6
+ * port) for now. */
+ if (consensus_method >= MIN_METHOD_FOR_A_LINES && best_alt_orport_out) {
+ smartlist_t *alt_orports = smartlist_new();
+ const tor_addr_port_t *most_alt_orport = NULL;
+
+ SMARTLIST_FOREACH_BEGIN(votes, vote_routerstatus_t *, rs) {
+ if (compare_vote_rs(most, rs) == 0 &&
+ !tor_addr_is_null(&rs->status.ipv6_addr)
+ && rs->status.ipv6_orport) {
+ smartlist_add(alt_orports, tor_addr_port_new(&rs->status.ipv6_addr,
+ rs->status.ipv6_orport));
+ }
+ } SMARTLIST_FOREACH_END(rs);
+
+ smartlist_sort(alt_orports, compare_orports_);
+ most_alt_orport = smartlist_get_most_frequent(alt_orports,
+ compare_orports_);
+ if (most_alt_orport) {
+ memcpy(best_alt_orport_out, most_alt_orport, sizeof(tor_addr_port_t));
+ log_debug(LD_DIR, "\"a\" line winner for %s is %s",
+ most->status.nickname,
+ fmt_addrport(&most_alt_orport->addr, most_alt_orport->port));
+ }
+
+ SMARTLIST_FOREACH(alt_orports, tor_addr_port_t *, ap, tor_free(ap));
+ smartlist_free(alt_orports);
+ }
+
if (consensus_method >= MIN_METHOD_FOR_MICRODESC &&
microdesc_digest256_out) {
smartlist_t *digests = smartlist_new();
@@ -496,29 +477,11 @@ compute_routerstatus_consensus(smartlist_t *votes, int consensus_method,
return most;
}
-/** Given a list of strings in <b>lst</b>, set the <b>len_out</b>-byte digest
- * at <b>digest_out</b> to the hash of the concatenation of those strings,
- * computed with the algorithm <b>alg</b>. */
-static void
-hash_list_members(char *digest_out, size_t len_out,
- smartlist_t *lst, digest_algorithm_t alg)
-{
- crypto_digest_t *d;
- if (alg == DIGEST_SHA1)
- d = crypto_digest_new();
- else
- d = crypto_digest256_new(alg);
- SMARTLIST_FOREACH(lst, const char *, cp,
- crypto_digest_add_bytes(d, cp, strlen(cp)));
- crypto_digest_get_digest(d, digest_out, len_out);
- crypto_digest_free(d);
-}
-
/** Sorting helper: compare two strings based on their values as base-ten
* positive integers. (Non-integers are treated as prior to all integers, and
* compared lexically.) */
static int
-_cmp_int_strings(const void **_a, const void **_b)
+cmp_int_strings_(const void **_a, const void **_b)
{
const char *a = *_a, *b = *_b;
int ai = (int)tor_parse_long(a, 10, 1, INT_MAX, NULL, NULL);
@@ -549,13 +512,13 @@ compute_consensus_method(smartlist_t *votes)
{
tor_assert(vote->supported_methods);
smartlist_add_all(tmp, vote->supported_methods);
- smartlist_sort(tmp, _cmp_int_strings);
- smartlist_uniq(tmp, _cmp_int_strings, NULL);
+ smartlist_sort(tmp, cmp_int_strings_);
+ smartlist_uniq(tmp, cmp_int_strings_, NULL);
smartlist_add_all(all_methods, tmp);
smartlist_clear(tmp);
});
- smartlist_sort(all_methods, _cmp_int_strings);
+ smartlist_sort(all_methods, cmp_int_strings_);
get_frequent_members(acceptable_methods, all_methods, min);
n_ok = smartlist_len(acceptable_methods);
if (n_ok) {
@@ -624,7 +587,7 @@ compute_consensus_versions_list(smartlist_t *lst, int n_versioning)
/** Helper: given a list of valid networkstatus_t, return a new string
* containing the contents of the consensus network parameter set.
*/
-/* private */ char *
+STATIC char *
dirvote_compute_params(smartlist_t *votes, int method, int total_authorities)
{
int i;
@@ -1358,6 +1321,7 @@ networkstatus_compute_consensus(smartlist_t *votes,
char *client_versions = NULL, *server_versions = NULL;
smartlist_t *flags;
const char *flavor_name;
+ uint32_t max_unmeasured_bw_kb = DEFAULT_MAX_UNMEASURED_BW_KB;
int64_t G=0, M=0, E=0, D=0, T=0; /* For bandwidth weights */
const routerstatus_format_type_t rs_format =
flavor == FLAV_NS ? NS_V3_CONSENSUS : NS_V3_CONSENSUS_MICRODESC;
@@ -1504,7 +1468,7 @@ networkstatus_compute_consensus(smartlist_t *votes,
}
/* Sort the votes. */
- smartlist_sort(votes, _compare_votes_by_authority_id);
+ smartlist_sort(votes, compare_votes_by_authority_id_);
/* Add the authority sections. */
{
smartlist_t *dir_sources = smartlist_new();
@@ -1523,7 +1487,7 @@ networkstatus_compute_consensus(smartlist_t *votes,
smartlist_add(dir_sources, e_legacy);
}
} SMARTLIST_FOREACH_END(v);
- smartlist_sort(dir_sources, _compare_dir_src_ents_by_authority_id);
+ smartlist_sort(dir_sources, compare_dir_src_ents_by_authority_id_);
SMARTLIST_FOREACH_BEGIN(dir_sources, const dir_src_ent_t *, e) {
char fingerprint[HEX_DIGEST_LEN+1];
@@ -1556,6 +1520,30 @@ networkstatus_compute_consensus(smartlist_t *votes,
smartlist_free(dir_sources);
}
+ if (consensus_method >= MIN_METHOD_TO_CLIP_UNMEASURED_BW) {
+ char *max_unmeasured_param = NULL;
+ /* XXXX Extract this code into a common function */
+ if (params) {
+ if (strcmpstart(params, "maxunmeasuredbw=") == 0)
+ max_unmeasured_param = params;
+ else
+ max_unmeasured_param = strstr(params, " maxunmeasuredbw=");
+ }
+ if (max_unmeasured_param) {
+ int ok = 0;
+ char *eq = strchr(max_unmeasured_param, '=');
+ if (eq) {
+ max_unmeasured_bw_kb = (uint32_t)
+ tor_parse_ulong(eq+1, 10, 1, UINT32_MAX, &ok, NULL);
+ if (!ok) {
+ log_warn(LD_DIR, "Bad element '%s' in max unmeasured bw param",
+ escaped(max_unmeasured_param));
+ max_unmeasured_bw_kb = DEFAULT_MAX_UNMEASURED_BW_KB;
+ }
+ }
+ }
+ }
+
/* Add the actual router entries. */
{
int *index; /* index[j] is the current index into votes[j]. */
@@ -1567,9 +1555,10 @@ networkstatus_compute_consensus(smartlist_t *votes,
smartlist_t *chosen_flags = smartlist_new();
smartlist_t *versions = smartlist_new();
smartlist_t *exitsummaries = smartlist_new();
- uint32_t *bandwidths = tor_malloc(sizeof(uint32_t) * smartlist_len(votes));
- uint32_t *measured_bws = tor_malloc(sizeof(uint32_t) *
- smartlist_len(votes));
+ uint32_t *bandwidths_kb = tor_malloc(sizeof(uint32_t) *
+ smartlist_len(votes));
+ uint32_t *measured_bws_kb = tor_malloc(sizeof(uint32_t) *
+ smartlist_len(votes));
int num_bandwidths;
int num_mbws;
@@ -1582,6 +1571,7 @@ networkstatus_compute_consensus(smartlist_t *votes,
int *named_flag; /* Index of the flag "Named" for votes[j] */
int *unnamed_flag; /* Index of the flag "Unnamed" for votes[j] */
int chosen_named_idx;
+ int n_authorities_measuring_bandwidth;
strmap_t *name_to_id_map = strmap_new();
char conflict[DIGEST_LEN];
@@ -1600,10 +1590,19 @@ networkstatus_compute_consensus(smartlist_t *votes,
unnamed_flag[i] = named_flag[i] = -1;
chosen_named_idx = smartlist_string_pos(flags, "Named");
- /* Build the flag index. */
+ /* Build the flag indexes. Note that no vote can have more than 64 members
+ * for known_flags, so no value will be greater than 63, so it's safe to
+ * do U64_LITERAL(1) << index on these values. But note also that
+ * named_flag and unnamed_flag are initialized to -1, so we need to check
+ * that they're actually set before doing U64_LITERAL(1) << index with
+ * them.*/
SMARTLIST_FOREACH_BEGIN(votes, networkstatus_t *, v) {
flag_map[v_sl_idx] = tor_malloc_zero(
sizeof(int)*smartlist_len(v->known_flags));
+ if (smartlist_len(v->known_flags) > MAX_KNOWN_FLAGS_IN_VOTE) {
+ log_warn(LD_BUG, "Somehow, a vote has %d entries in known_flags",
+ smartlist_len(v->known_flags));
+ }
SMARTLIST_FOREACH_BEGIN(v->known_flags, const char *, fl) {
int p = smartlist_string_pos(flags, fl);
tor_assert(p >= 0);
@@ -1670,6 +1669,14 @@ networkstatus_compute_consensus(smartlist_t *votes,
} SMARTLIST_FOREACH_END(v);
}
+ /* We need to know how many votes measure bandwidth. */
+ n_authorities_measuring_bandwidth = 0;
+ SMARTLIST_FOREACH(votes, networkstatus_t *, v,
+ if (v->has_measured_bws) {
+ ++n_authorities_measuring_bandwidth;
+ }
+ );
+
/* Now go through all the votes */
flag_counts = tor_malloc(sizeof(int) * smartlist_len(flags));
while (1) {
@@ -1685,6 +1692,7 @@ networkstatus_compute_consensus(smartlist_t *votes,
int n_listing = 0;
int i;
char microdesc_digest[DIGEST256_LEN];
+ tor_addr_port_t alt_orport = {TOR_ADDR_NULL, 0};
/* Of the next-to-be-considered digest in each voter, which is first? */
SMARTLIST_FOREACH(votes, networkstatus_t *, v, {
@@ -1728,7 +1736,8 @@ networkstatus_compute_consensus(smartlist_t *votes,
if (rs->flags & (U64_LITERAL(1) << i))
++flag_counts[flag_map[v_sl_idx][i]];
}
- if (rs->flags & (U64_LITERAL(1) << named_flag[v_sl_idx])) {
+ if (named_flag[v_sl_idx] >= 0 &&
+ (rs->flags & (U64_LITERAL(1) << named_flag[v_sl_idx]))) {
if (chosen_name && strcmp(chosen_name, rs->status.nickname)) {
log_notice(LD_DIR, "Conflict on naming for router: %s vs %s",
chosen_name, rs->status.nickname);
@@ -1738,11 +1747,11 @@ networkstatus_compute_consensus(smartlist_t *votes,
}
/* count bandwidths */
- if (rs->status.has_measured_bw)
- measured_bws[num_mbws++] = rs->status.measured_bw;
+ if (rs->has_measured_bw)
+ measured_bws_kb[num_mbws++] = rs->measured_bw_kb;
if (rs->status.has_bandwidth)
- bandwidths[num_bandwidths++] = rs->status.bandwidth;
+ bandwidths_kb[num_bandwidths++] = rs->status.bandwidth_kb;
} SMARTLIST_FOREACH_END(v);
/* We don't include this router at all unless more than half of
@@ -1754,7 +1763,7 @@ networkstatus_compute_consensus(smartlist_t *votes,
* routerinfo and its contents are. */
memset(microdesc_digest, 0, sizeof(microdesc_digest));
rs = compute_routerstatus_consensus(matching_descs, consensus_method,
- microdesc_digest);
+ microdesc_digest, &alt_orport);
/* Copy bits of that into rs_out. */
memset(&rs_out, 0, sizeof(rs_out));
tor_assert(fast_memeq(lowest_id, rs->status.identity_digest,DIGEST_LEN));
@@ -1765,6 +1774,10 @@ networkstatus_compute_consensus(smartlist_t *votes,
rs_out.published_on = rs->status.published_on;
rs_out.dir_port = rs->status.dir_port;
rs_out.or_port = rs->status.or_port;
+ if (consensus_method >= MIN_METHOD_FOR_A_LINES) {
+ tor_addr_copy(&rs_out.ipv6_addr, &alt_orport.addr);
+ rs_out.ipv6_orport = alt_orport.port;
+ }
rs_out.has_bandwidth = 0;
rs_out.has_exitsummary = 0;
@@ -1828,28 +1841,37 @@ networkstatus_compute_consensus(smartlist_t *votes,
/* Pick a bandwidth */
if (consensus_method >= 6 && num_mbws > 2) {
rs_out.has_bandwidth = 1;
- rs_out.bandwidth = median_uint32(measured_bws, num_mbws);
+ rs_out.bw_is_unmeasured = 0;
+ rs_out.bandwidth_kb = median_uint32(measured_bws_kb, num_mbws);
} else if (consensus_method >= 5 && num_bandwidths > 0) {
rs_out.has_bandwidth = 1;
- rs_out.bandwidth = median_uint32(bandwidths, num_bandwidths);
+ rs_out.bw_is_unmeasured = 1;
+ rs_out.bandwidth_kb = median_uint32(bandwidths_kb, num_bandwidths);
+ if (consensus_method >= MIN_METHOD_TO_CLIP_UNMEASURED_BW &&
+ n_authorities_measuring_bandwidth > 2) {
+ /* Cap non-measured bandwidths. */
+ if (rs_out.bandwidth_kb > max_unmeasured_bw_kb) {
+ rs_out.bandwidth_kb = max_unmeasured_bw_kb;
+ }
+ }
}
/* Fix bug 2203: Do not count BadExit nodes as Exits for bw weights */
- if (consensus_method >= 11) {
+ if (consensus_method >= MIN_METHOD_TO_CUT_BADEXIT_WEIGHT) {
is_exit = is_exit && !is_bad_exit;
}
if (consensus_method >= MIN_METHOD_FOR_BW_WEIGHTS) {
if (rs_out.has_bandwidth) {
- T += rs_out.bandwidth;
+ T += rs_out.bandwidth_kb;
if (is_exit && is_guard)
- D += rs_out.bandwidth;
+ D += rs_out.bandwidth_kb;
else if (is_exit)
- E += rs_out.bandwidth;
+ E += rs_out.bandwidth_kb;
else if (is_guard)
- G += rs_out.bandwidth;
+ G += rs_out.bandwidth_kb;
else
- M += rs_out.bandwidth;
+ M += rs_out.bandwidth_kb;
} else {
log_warn(LD_BUG, "Missing consensus bandwidth for router %s",
rs_out.nickname);
@@ -1862,7 +1884,7 @@ networkstatus_compute_consensus(smartlist_t *votes,
* listed that descriptor will have the same summary. If not then
* something is fishy and we'll use the most common one (breaking
* ties in favor of lexicographically larger one (only because it
- * lets me reuse more existing code.
+ * lets me reuse more existing code)).
*
* The other case that can happen is that no authority that voted
* for that descriptor has an exit policy summary. That's
@@ -1948,12 +1970,12 @@ networkstatus_compute_consensus(smartlist_t *votes,
}
{
- char buf[4096];
+ char *buf;
/* Okay!! Now we can write the descriptor... */
/* First line goes into "buf". */
- routerstatus_format_entry(buf, sizeof(buf), &rs_out, NULL,
- rs_format);
- smartlist_add(chunks, tor_strdup(buf));
+ buf = routerstatus_format_entry(&rs_out, NULL, rs_format, NULL);
+ if (buf)
+ smartlist_add(chunks, buf);
}
/* Now an m line, if applicable. */
if (flavor == FLAV_MICRODESC &&
@@ -1973,7 +1995,11 @@ networkstatus_compute_consensus(smartlist_t *votes,
smartlist_add(chunks, tor_strdup("\n"));
/* Now the weight line. */
if (rs_out.has_bandwidth) {
- smartlist_add_asprintf(chunks, "w Bandwidth=%d\n", rs_out.bandwidth);
+ int unmeasured = rs_out.bw_is_unmeasured &&
+ consensus_method >= MIN_METHOD_TO_CLIP_UNMEASURED_BW;
+ smartlist_add_asprintf(chunks, "w Bandwidth=%d%s\n",
+ rs_out.bandwidth_kb,
+ unmeasured?" Unmeasured=1":"");
}
/* Now the exitpolicy summary line. */
@@ -1999,8 +2025,8 @@ networkstatus_compute_consensus(smartlist_t *votes,
smartlist_free(chosen_flags);
smartlist_free(versions);
smartlist_free(exitsummaries);
- tor_free(bandwidths);
- tor_free(measured_bws);
+ tor_free(bandwidths_kb);
+ tor_free(measured_bws_kb);
}
if (consensus_method >= MIN_METHOD_FOR_FOOTER) {
@@ -2016,6 +2042,7 @@ networkstatus_compute_consensus(smartlist_t *votes,
// Parse params, extract BW_WEIGHT_SCALE if present
// DO NOT use consensus_param_bw_weight_scale() in this code!
// The consensus is not formed yet!
+ /* XXXX Extract this code into a common function */
if (params) {
if (strcmpstart(params, "bwweightscale=") == 0)
bw_weight_param = params;
@@ -2060,12 +2087,12 @@ networkstatus_compute_consensus(smartlist_t *votes,
size_t digest_len =
flavor == FLAV_NS ? DIGEST_LEN : DIGEST256_LEN;
const char *algname = crypto_digest_algorithm_get_name(digest_alg);
- char sigbuf[4096];
+ char *signature;
smartlist_add(chunks, tor_strdup("directory-signature "));
/* Compute the hash of the chunks. */
- hash_list_members(digest, digest_len, chunks, digest_alg);
+ crypto_digest_smartlist(digest, digest_len, chunks, "", digest_alg);
/* Get the fingerprints */
crypto_pk_get_fingerprint(identity_key, fingerprint, 0);
@@ -2081,14 +2108,12 @@ networkstatus_compute_consensus(smartlist_t *votes,
signing_key_fingerprint);
}
/* And the signature. */
- sigbuf[0] = '\0';
- if (router_append_dirobj_signature(sigbuf, sizeof(sigbuf),
- digest, digest_len,
- signing_key)) {
+ if (!(signature = router_get_dirobj_signature(digest, digest_len,
+ signing_key))) {
log_warn(LD_BUG, "Couldn't sign consensus networkstatus.");
- return NULL; /* This leaks, but it should never happen. */
+ goto done;
}
- smartlist_add(chunks, tor_strdup(sigbuf));
+ smartlist_add(chunks, signature);
if (legacy_id_key_digest && legacy_signing_key && consensus_method >= 3) {
smartlist_add(chunks, tor_strdup("directory-signature "));
@@ -2104,26 +2129,18 @@ networkstatus_compute_consensus(smartlist_t *votes,
algname, fingerprint,
signing_key_fingerprint);
}
- sigbuf[0] = '\0';
- if (router_append_dirobj_signature(sigbuf, sizeof(sigbuf),
- digest, digest_len,
- legacy_signing_key)) {
+
+ if (!(signature = router_get_dirobj_signature(digest, digest_len,
+ legacy_signing_key))) {
log_warn(LD_BUG, "Couldn't sign consensus networkstatus.");
- return NULL; /* This leaks, but it should never happen. */
+ goto done;
}
- smartlist_add(chunks, tor_strdup(sigbuf));
+ smartlist_add(chunks, signature);
}
}
result = smartlist_join_strings(chunks, "", 0, NULL);
- tor_free(client_versions);
- tor_free(server_versions);
- SMARTLIST_FOREACH(flags, char *, cp, tor_free(cp));
- smartlist_free(flags);
- SMARTLIST_FOREACH(chunks, char *, cp, tor_free(cp));
- smartlist_free(chunks);
-
{
networkstatus_t *c;
if (!(c = networkstatus_parse_vote_from_string(result, NULL,
@@ -2131,15 +2148,24 @@ networkstatus_compute_consensus(smartlist_t *votes,
log_err(LD_BUG, "Generated a networkstatus consensus we couldn't "
"parse.");
tor_free(result);
- return NULL;
+ goto done;
}
// Verify balancing parameters
if (consensus_method >= MIN_METHOD_FOR_BW_WEIGHTS && added_weights) {
- networkstatus_verify_bw_weights(c);
+ networkstatus_verify_bw_weights(c, consensus_method);
}
networkstatus_vote_free(c);
}
+ done:
+
+ tor_free(client_versions);
+ tor_free(server_versions);
+ SMARTLIST_FOREACH(flags, char *, cp, tor_free(cp));
+ smartlist_free(flags);
+ SMARTLIST_FOREACH(chunks, char *, cp, tor_free(cp));
+ smartlist_free(chunks);
+
return result;
}
@@ -2193,7 +2219,7 @@ networkstatus_add_detached_signatures(networkstatus_t *target,
{
digests_t *digests = strmap_get(sigs->digests, flavor);
int n_matches = 0;
- digest_algorithm_t alg;
+ int alg;
if (!digests) {
*msg_out = "No digests for given consensus flavor";
return -1;
@@ -2258,7 +2284,7 @@ networkstatus_add_detached_signatures(networkstatus_t *target,
if (sig->good_signature || !old_sig || old_sig->bad_signature) {
log_info(LD_DIR, "Adding signature from %s with %s", voter_identity,
algorithm);
- log(severity, LD_DIR, "Added a signature for %s from %s.",
+ tor_log(severity, LD_DIR, "Added a signature for %s from %s.",
target_voter->nickname, source);
++r;
if (old_sig) {
@@ -2457,7 +2483,7 @@ ns_detached_signatures_free(ns_detached_signatures_t *s)
smartlist_free(sigs);
} STRMAP_FOREACH_END;
strmap_free(s->signatures, NULL);
- strmap_free(s->digests, _tor_free);
+ strmap_free(s->digests, tor_free_);
}
tor_free(s);
@@ -2507,12 +2533,13 @@ dirvote_get_preferred_voting_intervals(vote_timing_t *timing_out)
timing_out->dist_delay = options->V3AuthDistDelay;
}
-/** Return the start of the next interval of size <b>interval</b> (in seconds)
- * after <b>now</b>. Midnight always starts a fresh interval, and if the last
- * interval of a day would be truncated to less than half its size, it is
- * rolled into the previous interval. */
+/** Return the start of the next interval of size <b>interval</b> (in
+ * seconds) after <b>now</b>, plus <b>offset</b>. Midnight always
+ * starts a fresh interval, and if the last interval of a day would be
+ * truncated to less than half its size, it is rolled into the
+ * previous interval. */
time_t
-dirvote_get_start_of_next_interval(time_t now, int interval)
+dirvote_get_start_of_next_interval(time_t now, int interval, int offset)
{
struct tm tm;
time_t midnight_today=0;
@@ -2540,6 +2567,10 @@ dirvote_get_start_of_next_interval(time_t now, int interval)
if (next + interval/2 > midnight_tomorrow)
next = midnight_tomorrow;
+ next += offset;
+ if (next - interval > now)
+ next -= interval;
+
return next;
}
@@ -2603,8 +2634,10 @@ dirvote_recalculate_timing(const or_options_t *options, time_t now)
vote_delay = dist_delay = interval / 4;
start = voting_schedule.interval_starts =
- dirvote_get_start_of_next_interval(now,interval);
- end = dirvote_get_start_of_next_interval(start+1, interval);
+ dirvote_get_start_of_next_interval(now,interval,
+ options->TestingV3AuthVotingStartOffset);
+ end = dirvote_get_start_of_next_interval(start+1, interval,
+ options->TestingV3AuthVotingStartOffset);
tor_assert(end > start);
@@ -2757,7 +2790,7 @@ dirvote_fetch_missing_votes(void)
char *resource;
SMARTLIST_FOREACH_BEGIN(router_get_trusted_dir_servers(),
- trusted_dir_server_t *, ds) {
+ dir_server_t *, ds) {
if (!(ds->type & V3_DIRINFO))
continue;
if (!dirvote_get_vote(ds->v3_identity_digest,
@@ -2875,7 +2908,7 @@ list_v3_auth_ids(void)
smartlist_t *known_v3_keys = smartlist_new();
char *keys;
SMARTLIST_FOREACH(router_get_trusted_dir_servers(),
- trusted_dir_server_t *, ds,
+ dir_server_t *, ds,
if ((ds->type & V3_DIRINFO) &&
!tor_digest_is_zero(ds->v3_identity_digest))
smartlist_add(known_v3_keys,
@@ -2896,7 +2929,7 @@ dirvote_add_vote(const char *vote_body, const char **msg_out, int *status_out)
{
networkstatus_t *vote;
networkstatus_voter_info_t *vi;
- trusted_dir_server_t *ds;
+ dir_server_t *ds;
pending_vote_t *pending_vote = NULL;
const char *end_of_vote = NULL;
int any_failed = 0;
@@ -2947,7 +2980,7 @@ dirvote_add_vote(const char *vote_body, const char **msg_out, int *status_out)
/* Hey, it's a new cert! */
trusted_dirs_load_certs_from_string(
vote->cert->cache_info.signed_descriptor_body,
- 0 /* from_store */, 1 /*flush*/);
+ TRUSTED_DIRS_CERTS_SRC_FROM_VOTE, 1 /*flush*/);
if (!authority_cert_get_by_digests(vote->cert->cache_info.identity_digest,
vote->cert->signing_key_digest)) {
log_warn(LD_BUG, "We added a cert, but still couldn't find it.");
@@ -3080,7 +3113,7 @@ dirvote_compute_consensuses(void)
}
tor_assert(pending_vote_list);
SMARTLIST_FOREACH(pending_vote_list, pending_vote_t *, v, {
- if (smartlist_string_isin(v->vote->known_flags, "Running"))
+ if (smartlist_contains_string(v->vote->known_flags, "Running"))
n_vote_running++;
});
if (!n_vote_running) {
@@ -3110,7 +3143,7 @@ dirvote_compute_consensuses(void)
});
votefile = get_datadir_fname("v3-status-votes");
- write_chunks_to_file(votefile, votestrings, 0);
+ write_chunks_to_file(votefile, votestrings, 0, 0);
tor_free(votefile);
SMARTLIST_FOREACH(votestrings, sized_chunk_t *, c, tor_free(c));
smartlist_free(votestrings);
@@ -3441,7 +3474,7 @@ dirvote_free_all(void)
const char *
dirvote_get_pending_consensus(consensus_flavor_t flav)
{
- tor_assert(((int)flav) >= 0 && flav < N_CONSENSUS_FLAVORS);
+ tor_assert(((int)flav) >= 0 && (int)flav < N_CONSENSUS_FLAVORS);
return pending_consensuses[flav].body;
}
@@ -3504,15 +3537,11 @@ dirvote_get_vote(const char *fp, int flags)
return NULL;
}
-/** Construct and return a new microdescriptor from a routerinfo <b>ri</b>.
- *
- * XXX Right now, there is only one way to generate microdescriptors from
- * router descriptors. This may change in future consensus methods. If so,
- * we'll need an internal way to remember which method we used, and ask for a
- * particular method.
+/** Construct and return a new microdescriptor from a routerinfo <b>ri</b>
+ * according to <b>consensus_method</b>.
**/
microdesc_t *
-dirvote_create_microdescriptor(const routerinfo_t *ri)
+dirvote_create_microdescriptor(const routerinfo_t *ri, int consensus_method)
{
microdesc_t *result = NULL;
char *key = NULL, *summary = NULL, *family = NULL;
@@ -3522,23 +3551,55 @@ dirvote_create_microdescriptor(const routerinfo_t *ri)
if (crypto_pk_write_public_key_to_string(ri->onion_pkey, &key, &keylen)<0)
goto done;
- summary = policy_summarize(ri->exit_policy);
+ summary = policy_summarize(ri->exit_policy, AF_INET);
if (ri->declared_family)
family = smartlist_join_strings(ri->declared_family, " ", 0, NULL);
smartlist_add_asprintf(chunks, "onion-key\n%s", key);
+ if (consensus_method >= MIN_METHOD_FOR_NTOR_KEY &&
+ ri->onion_curve25519_pkey) {
+ char kbuf[128];
+ base64_encode(kbuf, sizeof(kbuf),
+ (const char*)ri->onion_curve25519_pkey->public_key,
+ CURVE25519_PUBKEY_LEN);
+ smartlist_add_asprintf(chunks, "ntor-onion-key %s", kbuf);
+ }
+
+ if (consensus_method >= MIN_METHOD_FOR_A_LINES &&
+ !tor_addr_is_null(&ri->ipv6_addr) && ri->ipv6_orport)
+ smartlist_add_asprintf(chunks, "a %s\n",
+ fmt_addrport(&ri->ipv6_addr, ri->ipv6_orport));
+
if (family)
smartlist_add_asprintf(chunks, "family %s\n", family);
if (summary && strcmp(summary, "reject 1-65535"))
smartlist_add_asprintf(chunks, "p %s\n", summary);
+ if (consensus_method >= MIN_METHOD_FOR_P6_LINES &&
+ ri->ipv6_exit_policy) {
+ /* XXXX024 This doesn't match proposal 208, which says these should
+ * be taken unchanged from the routerinfo. That's bogosity, IMO:
+ * the proposal should have said to do this instead.*/
+ char *p6 = write_short_policy(ri->ipv6_exit_policy);
+ if (p6 && strcmp(p6, "reject 1-65535"))
+ smartlist_add_asprintf(chunks, "p6 %s\n", p6);
+ tor_free(p6);
+ }
+
+ if (consensus_method >= MIN_METHOD_FOR_ID_HASH_IN_MD) {
+ char idbuf[BASE64_DIGEST_LEN+1];
+ digest_to_base64(idbuf, ri->cache_info.identity_digest);
+ smartlist_add_asprintf(chunks, "id rsa1024 %s\n", idbuf);
+ }
+
output = smartlist_join_strings(chunks, "", 0, NULL);
{
smartlist_t *lst = microdescs_parse_from_string(output,
- output+strlen(output), 0, 1);
+ output+strlen(output), 0,
+ SAVED_NOWHERE);
if (smartlist_len(lst) != 1) {
log_warn(LD_DIR, "We generated a microdescriptor we couldn't parse.");
SMARTLIST_FOREACH(lst, microdesc_t *, md, microdesc_free(md));
@@ -3561,33 +3622,118 @@ dirvote_create_microdescriptor(const routerinfo_t *ri)
return result;
}
-/** Cached space-separated string to hold */
-static char *microdesc_consensus_methods = NULL;
-
/** Format the appropriate vote line to describe the microdescriptor <b>md</b>
* in a consensus vote document. Write it into the <b>out_len</b>-byte buffer
* in <b>out</b>. Return -1 on failure and the number of characters written
* on success. */
ssize_t
-dirvote_format_microdesc_vote_line(char *out, size_t out_len,
- const microdesc_t *md)
+dirvote_format_microdesc_vote_line(char *out_buf, size_t out_buf_len,
+ const microdesc_t *md,
+ int consensus_method_low,
+ int consensus_method_high)
{
+ ssize_t ret = -1;
char d64[BASE64_DIGEST256_LEN+1];
- if (!microdesc_consensus_methods) {
- microdesc_consensus_methods =
- make_consensus_method_list(MIN_METHOD_FOR_MICRODESC,
- MAX_SUPPORTED_CONSENSUS_METHOD,
- ",");
- tor_assert(microdesc_consensus_methods);
- }
+ char *microdesc_consensus_methods =
+ make_consensus_method_list(consensus_method_low,
+ consensus_method_high,
+ ",");
+ tor_assert(microdesc_consensus_methods);
+
if (digest256_to_base64(d64, md->digest)<0)
- return -1;
+ goto out;
- if (tor_snprintf(out, out_len, "m %s sha256=%s\n",
+ if (tor_snprintf(out_buf, out_buf_len, "m %s sha256=%s\n",
microdesc_consensus_methods, d64)<0)
- return -1;
+ goto out;
+
+ ret = strlen(out_buf);
- return strlen(out);
+ out:
+ tor_free(microdesc_consensus_methods);
+ return ret;
+}
+
+/** Array of start and end of consensus methods used for supported
+ microdescriptor formats. */
+static const struct consensus_method_range_t {
+ int low;
+ int high;
+} microdesc_consensus_methods[] = {
+ {MIN_METHOD_FOR_MICRODESC, MIN_METHOD_FOR_A_LINES - 1},
+ {MIN_METHOD_FOR_A_LINES, MIN_METHOD_FOR_P6_LINES - 1},
+ {MIN_METHOD_FOR_P6_LINES, MIN_METHOD_FOR_NTOR_KEY - 1},
+ {MIN_METHOD_FOR_NTOR_KEY, MIN_METHOD_FOR_ID_HASH_IN_MD - 1},
+ {MIN_METHOD_FOR_ID_HASH_IN_MD, MAX_SUPPORTED_CONSENSUS_METHOD},
+ {-1, -1}
+};
+
+/** Helper type used when generating the microdescriptor lines in a directory
+ * vote. */
+typedef struct microdesc_vote_line_t {
+ int low;
+ int high;
+ microdesc_t *md;
+ struct microdesc_vote_line_t *next;
+} microdesc_vote_line_t;
+
+/** Generate and return a linked list of all the lines that should appear to
+ * describe a router's microdescriptor versions in a directory vote.
+ * Add the generated microdescriptors to <b>microdescriptors_out</b>. */
+vote_microdesc_hash_t *
+dirvote_format_all_microdesc_vote_lines(const routerinfo_t *ri, time_t now,
+ smartlist_t *microdescriptors_out)
+{
+ const struct consensus_method_range_t *cmr;
+ microdesc_vote_line_t *entries = NULL, *ep;
+ vote_microdesc_hash_t *result = NULL;
+
+ /* Generate the microdescriptors. */
+ for (cmr = microdesc_consensus_methods;
+ cmr->low != -1 && cmr->high != -1;
+ cmr++) {
+ microdesc_t *md = dirvote_create_microdescriptor(ri, cmr->low);
+ if (md) {
+ microdesc_vote_line_t *e =
+ tor_malloc_zero(sizeof(microdesc_vote_line_t));
+ e->md = md;
+ e->low = cmr->low;
+ e->high = cmr->high;
+ e->next = entries;
+ entries = e;
+ }
+ }
+
+ /* Compress adjacent identical ones */
+ for (ep = entries; ep; ep = ep->next) {
+ while (ep->next &&
+ fast_memeq(ep->md->digest, ep->next->md->digest, DIGEST256_LEN) &&
+ ep->low == ep->next->high + 1) {
+ microdesc_vote_line_t *next = ep->next;
+ ep->low = next->low;
+ microdesc_free(next->md);
+ ep->next = next->next;
+ tor_free(next);
+ }
+ }
+
+ /* Format them into vote_microdesc_hash_t, and add to microdescriptors_out.*/
+ while ((ep = entries)) {
+ char buf[128];
+ vote_microdesc_hash_t *h;
+ dirvote_format_microdesc_vote_line(buf, sizeof(buf), ep->md,
+ ep->low, ep->high);
+ h = tor_malloc_zero(sizeof(vote_microdesc_hash_t));
+ h->microdesc_hash_line = tor_strdup(buf);
+ h->next = result;
+ result = h;
+ ep->md->last_listed = now;
+ smartlist_add(microdescriptors_out, ep->md);
+ entries = ep->next;
+ tor_free(ep);
+ }
+
+ return result;
}
/** If <b>vrs</b> has a hash made for the consensus method <b>method</b> with
diff --git a/src/or/dirvote.h b/src/or/dirvote.h
index e6f970061..4c57e4366 100644
--- a/src/or/dirvote.h
+++ b/src/or/dirvote.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,16 +9,66 @@
* \brief Header file for dirvote.c.
**/
-#ifndef _TOR_DIRVOTE_H
-#define _TOR_DIRVOTE_H
+#ifndef TOR_DIRVOTE_H
+#define TOR_DIRVOTE_H
+
+#include "testsupport.h"
/** Lowest allowable value for VoteSeconds. */
-#define MIN_VOTE_SECONDS 20
+#define MIN_VOTE_SECONDS 2
/** Lowest allowable value for DistSeconds. */
-#define MIN_DIST_SECONDS 20
+#define MIN_DIST_SECONDS 2
/** Smallest allowable voting interval. */
#define MIN_VOTE_INTERVAL 300
+/** The highest consensus method that we currently support. */
+#define MAX_SUPPORTED_CONSENSUS_METHOD 18
+
+/** Lowest consensus method that contains a 'directory-footer' marker */
+#define MIN_METHOD_FOR_FOOTER 9
+
+/** Lowest consensus method that contains bandwidth weights */
+#define MIN_METHOD_FOR_BW_WEIGHTS 9
+
+/** Lowest consensus method that contains consensus params */
+#define MIN_METHOD_FOR_PARAMS 7
+
+/** Lowest consensus method that generates microdescriptors */
+#define MIN_METHOD_FOR_MICRODESC 8
+
+/** Lowest consensus method that doesn't count bad exits as exits for weight */
+#define MIN_METHOD_TO_CUT_BADEXIT_WEIGHT 11
+
+/** Lowest consensus method that ensures a majority of authorities voted
+ * for a param. */
+#define MIN_METHOD_FOR_MAJORITY_PARAMS 12
+
+/** Lowest consensus method where microdesc consensuses omit any entry
+ * with no microdesc. */
+#define MIN_METHOD_FOR_MANDATORY_MICRODESC 13
+
+/** Lowest consensus method that contains "a" lines. */
+#define MIN_METHOD_FOR_A_LINES 14
+
+/** Lowest consensus method where microdescs may include a "p6" line. */
+#define MIN_METHOD_FOR_P6_LINES 15
+
+/** Lowest consensus method where microdescs may include an onion-key-ntor
+ * line */
+#define MIN_METHOD_FOR_NTOR_KEY 16
+
+/** Lowest consensus method that ensures that authorities output an
+ * Unmeasured=1 flag for unmeasured bandwidths */
+#define MIN_METHOD_TO_CLIP_UNMEASURED_BW 17
+
+/** Lowest consensus method where authorities may include an "id" line in
+ * microdescriptors. */
+#define MIN_METHOD_FOR_ID_HASH_IN_MD 18
+
+/** Default bandwidth to clip unmeasured bandwidths to using method >=
+ * MIN_METHOD_TO_CLIP_UNMEASURED_BW */
+#define DEFAULT_MAX_UNMEASURED_BW_KB 20
+
void dirvote_free_all(void);
/* vote manipulation */
@@ -42,7 +92,9 @@ authority_cert_t *authority_cert_dup(authority_cert_t *cert);
/* vote scheduling */
void dirvote_get_preferred_voting_intervals(vote_timing_t *timing_out);
-time_t dirvote_get_start_of_next_interval(time_t now, int interval);
+time_t dirvote_get_start_of_next_interval(time_t now,
+ int interval,
+ int offset);
void dirvote_recalculate_timing(const or_options_t *options, time_t now);
void dirvote_act(const or_options_t *options, time_t now);
@@ -70,9 +122,16 @@ networkstatus_t *
dirserv_generate_networkstatus_vote_obj(crypto_pk_t *private_key,
authority_cert_t *cert);
-microdesc_t *dirvote_create_microdescriptor(const routerinfo_t *ri);
+microdesc_t *dirvote_create_microdescriptor(const routerinfo_t *ri,
+ int consensus_method);
ssize_t dirvote_format_microdesc_vote_line(char *out, size_t out_len,
- const microdesc_t *md);
+ const microdesc_t *md,
+ int consensus_method_low,
+ int consensus_method_high);
+vote_microdesc_hash_t *dirvote_format_all_microdesc_vote_lines(
+ const routerinfo_t *ri,
+ time_t now,
+ smartlist_t *microdescriptors_out);
int vote_routerstatus_find_microdesc_hash(char *digest256_out,
const vote_routerstatus_t *vrs,
@@ -83,9 +142,9 @@ document_signature_t *voter_get_sig_by_algorithm(
digest_algorithm_t alg);
#ifdef DIRVOTE_PRIVATE
-char *format_networkstatus_vote(crypto_pk_t *private_key,
+STATIC char *format_networkstatus_vote(crypto_pk_t *private_key,
networkstatus_t *v3_ns);
-char *dirvote_compute_params(smartlist_t *votes, int method,
+STATIC char *dirvote_compute_params(smartlist_t *votes, int method,
int total_authorities);
#endif
diff --git a/src/or/dns.c b/src/or/dns.c
index 78893bfbe..a9c431865 100644
--- a/src/or/dns.c
+++ b/src/or/dns.c
@@ -1,6 +1,6 @@
/* Copyright (c) 2003-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -24,6 +24,7 @@
#include "relay.h"
#include "router.h"
#include "ht.h"
+#include "../common/sandbox.h"
#ifdef HAVE_EVENT2_DNS_H
#include <event2/event.h>
#include <event2/dns.h>
@@ -61,6 +62,9 @@ struct evdns_request;
#define evdns_base_resolve_ipv4(base, addr, options, cb, ptr) \
((evdns_resolve_ipv4((addr), (options), (cb), (ptr))!=0) \
? NULL : ((void*)1))
+#define evdns_base_resolve_ipv6(base, addr, options, cb, ptr) \
+ ((evdns_resolve_ipv6((addr), (options), (cb), (ptr))!=0) \
+ ? NULL : ((void*)1))
#define evdns_base_resolve_reverse(base, addr, options, cb, ptr) \
((evdns_resolve_reverse((addr), (options), (cb), (ptr))!=0) \
? NULL : ((void*)1))
@@ -84,12 +88,6 @@ struct evdns_request;
* that the resolver is wedged? */
#define RESOLVE_MAX_TIMEOUT 300
-/** Possible outcomes from hostname lookup: permanent failure,
- * transient (retryable) failure, and success. */
-#define DNS_RESOLVE_FAILED_TRANSIENT 1
-#define DNS_RESOLVE_FAILED_PERMANENT 2
-#define DNS_RESOLVE_SUCCEEDED 3
-
/** Our evdns_base; this structure handles all our name lookups. */
static struct evdns_base *the_evdns_base = NULL;
@@ -117,7 +115,7 @@ typedef struct pending_connection_t {
/* Possible states for a cached resolve_t */
/** We are waiting for the resolver system to tell us an answer here.
* When we get one, or when we time out, the state of this cached_resolve_t
- * will become "DONE" and we'll possibly add a CACHED_VALID or a CACHED_FAILED
+ * will become "DONE" and we'll possibly add a CACHED
* entry. This cached_resolve_t will be in the hash table so that we will
* know not to launch more requests for this addr, but rather to add more
* connections to the pending list for the addr. */
@@ -128,10 +126,18 @@ typedef struct pending_connection_t {
#define CACHE_STATE_DONE 1
/** We are caching an answer for this address. This should have no pending
* connections, and should appear in the hash table. */
-#define CACHE_STATE_CACHED_VALID 2
-/** We are caching a failure for this address. This should have no pending
- * connections, and should appear in the hash table */
-#define CACHE_STATE_CACHED_FAILED 3
+#define CACHE_STATE_CACHED 2
+
+/** @name status values for a single DNS request.
+ *
+ * @{ */
+/** The DNS request is in progress. */
+#define RES_STATUS_INFLIGHT 1
+/** The DNS request finished and gave an answer */
+#define RES_STATUS_DONE_OK 2
+/** The DNS request finished and gave an error */
+#define RES_STATUS_DONE_ERR 3
+/**@}*/
/** A DNS request: possibly completed, possibly pending; cached_resolve
* structs are stored at the OR side in a hash table, and as a linked
@@ -139,19 +145,39 @@ typedef struct pending_connection_t {
*/
typedef struct cached_resolve_t {
HT_ENTRY(cached_resolve_t) node;
- uint32_t magic;
+ uint32_t magic; /**< Must be CACHED_RESOLVE_MAGIC */
char address[MAX_ADDRESSLEN]; /**< The hostname to be resolved. */
+
+ union {
+ uint32_t addr_ipv4; /**< IPv4 addr for <b>address</b>, if successful.
+ * (In host order.) */
+ int err_ipv4; /**< One of DNS_ERR_*, if IPv4 lookup failed. */
+ } result_ipv4; /**< Outcome of IPv4 lookup */
+ union {
+ struct in6_addr addr_ipv6; /**< IPv6 addr for <b>address</b>, if
+ * successful */
+ int err_ipv6; /**< One of DNS_ERR_*, if IPv6 lookup failed. */
+ } result_ipv6; /**< Outcome of IPv6 lookup, if any */
union {
- struct {
- struct in6_addr addr6; /**< IPv6 addr for <b>address</b>. */
- uint32_t addr; /**< IPv4 addr for <b>address</b>. */
- } a;
- char *hostname; /**< Hostname for <b>address</b> (if a reverse lookup) */
- } result;
- uint8_t state; /**< Is this cached entry pending/done/valid/failed? */
- uint8_t is_reverse; /**< Is this a reverse (addr-to-hostname) lookup? */
+ char *hostname; /** A hostname, if PTR lookup happened successfully*/
+ int err_hostname; /** One of DNS_ERR_*, if PTR lookup failed. */
+ } result_ptr;
+ /** @name Status fields
+ *
+ * These take one of the RES_STATUS_* values, depending on the state
+ * of the corresponding lookup.
+ *
+ * @{ */
+ unsigned int res_status_ipv4 : 2;
+ unsigned int res_status_ipv6 : 2;
+ unsigned int res_status_hostname : 2;
+ /**@}*/
+ uint8_t state; /**< Is this cached entry pending/done/informative? */
+
time_t expire; /**< Remove items from cache after this time. */
- uint32_t ttl; /**< What TTL did the nameserver tell us? */
+ uint32_t ttl_ipv4; /**< What TTL did the nameserver tell us? */
+ uint32_t ttl_ipv6; /**< What TTL did the nameserver tell us? */
+ uint32_t ttl_hostname; /**< What TTL did the nameserver tell us? */
/** Connections that want to know when we get an answer for this resolve. */
pending_connection_t *pending_connections;
/** Position of this element in the heap*/
@@ -159,20 +185,31 @@ typedef struct cached_resolve_t {
} cached_resolve_t;
static void purge_expired_resolves(time_t now);
-static void dns_found_answer(const char *address, uint8_t is_reverse,
- uint32_t addr, const char *hostname, char outcome,
+static void dns_found_answer(const char *address, uint8_t query_type,
+ int dns_answer,
+ const tor_addr_t *addr,
+ const char *hostname,
uint32_t ttl);
-static void send_resolved_cell(edge_connection_t *conn, uint8_t answer_type);
-static int launch_resolve(edge_connection_t *exitconn);
+static void send_resolved_cell(edge_connection_t *conn, uint8_t answer_type,
+ const cached_resolve_t *resolve);
+static int launch_resolve(cached_resolve_t *resolve);
static void add_wildcarded_test_address(const char *address);
static int configure_nameservers(int force);
static int answer_is_wildcarded(const char *ip);
static int dns_resolve_impl(edge_connection_t *exitconn, int is_resolve,
or_circuit_t *oncirc, char **resolved_to_hostname,
- int *made_connection_pending_out);
+ int *made_connection_pending_out,
+ cached_resolve_t **resolve_out);
+static int set_exitconn_info_from_resolve(edge_connection_t *exitconn,
+ const cached_resolve_t *resolve,
+ char **hostname_out);
+static int evdns_err_is_transient(int err);
+static void inform_pending_connections(cached_resolve_t *resolve);
+static void make_pending_resolve_cached(cached_resolve_t *cached);
+
#ifdef DEBUG_DNS_CACHE
-static void _assert_cache_ok(void);
-#define assert_cache_ok() _assert_cache_ok()
+static void assert_cache_ok_(void);
+#define assert_cache_ok() assert_cache_ok_()
#else
#define assert_cache_ok() STMT_NIL
#endif
@@ -181,6 +218,13 @@ static void assert_resolve_ok(cached_resolve_t *resolve);
/** Hash table of cached_resolve objects. */
static HT_HEAD(cache_map, cached_resolve_t) cache_root;
+/** Global: how many IPv6 requests have we made in all? */
+static uint64_t n_ipv6_requests_made = 0;
+/** Global: how many IPv6 requests have timed out? */
+static uint64_t n_ipv6_timeouts = 0;
+/** Global: Do we think that IPv6 DNS is broken? */
+static int dns_is_broken_for_ipv6 = 0;
+
/** Function to compare hashed resolves on their addresses; used to
* implement hash tables. */
static INLINE int
@@ -195,7 +239,7 @@ cached_resolves_eq(cached_resolve_t *a, cached_resolve_t *b)
static INLINE unsigned int
cached_resolve_hash(cached_resolve_t *a)
{
- return ht_string_hash(a->address);
+ return (unsigned) siphash24g((const uint8_t*)a->address, strlen(a->address));
}
HT_PROTOTYPE(cache_map, cached_resolve_t, node, cached_resolve_hash,
@@ -219,7 +263,7 @@ evdns_log_cb(int warn, const char *msg)
int severity = warn ? LOG_WARN : LOG_INFO;
if (!strcmpstart(msg, "Resolve requested for") &&
get_options()->SafeLogging) {
- log(LOG_INFO, LD_EXIT, "eventdns: Resolve requested.");
+ log_info(LD_EXIT, "eventdns: Resolve requested.");
return;
} else if (!strcmpstart(msg, "Search: ")) {
return;
@@ -248,13 +292,13 @@ evdns_log_cb(int warn, const char *msg)
control_event_server_status(LOG_WARN, "NAMESERVER_ALL_DOWN");
all_down = 1;
}
- log(severity, LD_EXIT, "eventdns: %s", msg);
+ tor_log(severity, LD_EXIT, "eventdns: %s", msg);
}
/** Helper: passed to eventdns.c as a callback so it can generate random
* numbers for transaction IDs and 0x20-hack coding. */
static void
-_dns_randfn(char *b, size_t n)
+dns_randfn_(char *b, size_t n)
{
crypto_rand(b,n);
}
@@ -264,7 +308,7 @@ int
dns_init(void)
{
init_cache_map();
- evdns_set_random_bytes_fn(_dns_randfn);
+ evdns_set_random_bytes_fn(dns_randfn_);
if (server_mode(get_options())) {
int r = configure_nameservers(1);
return r;
@@ -336,7 +380,7 @@ dns_get_expiry_ttl(uint32_t ttl)
/** Helper: free storage held by an entry in the DNS cache. */
static void
-_free_cached_resolve(cached_resolve_t *r)
+free_cached_resolve_(cached_resolve_t *r)
{
if (!r)
return;
@@ -345,8 +389,8 @@ _free_cached_resolve(cached_resolve_t *r)
r->pending_connections = victim->next;
tor_free(victim);
}
- if (r->is_reverse)
- tor_free(r->result.hostname);
+ if (r->res_status_hostname == RES_STATUS_DONE_OK)
+ tor_free(r->result_ptr.hostname);
r->magic = 0xFF00FF00;
tor_free(r);
}
@@ -355,7 +399,7 @@ _free_cached_resolve(cached_resolve_t *r)
* less-than-zero, zero, or greater-than-zero as appropriate. Used for
* the priority queue implementation. */
static int
-_compare_cached_resolves_by_expiry(const void *_a, const void *_b)
+compare_cached_resolves_by_expiry_(const void *_a, const void *_b)
{
const cached_resolve_t *a = _a, *b = _b;
if (a->expire < b->expire)
@@ -370,6 +414,65 @@ _compare_cached_resolves_by_expiry(const void *_a, const void *_b)
* will expire. */
static smartlist_t *cached_resolve_pqueue = NULL;
+static void
+cached_resolve_add_answer(cached_resolve_t *resolve,
+ int query_type,
+ int dns_result,
+ const tor_addr_t *answer_addr,
+ const char *answer_hostname,
+ uint32_t ttl)
+{
+ if (query_type == DNS_PTR) {
+ if (resolve->res_status_hostname != RES_STATUS_INFLIGHT)
+ return;
+
+ if (dns_result == DNS_ERR_NONE && answer_hostname) {
+ resolve->result_ptr.hostname = tor_strdup(answer_hostname);
+ resolve->res_status_hostname = RES_STATUS_DONE_OK;
+ } else {
+ resolve->result_ptr.err_hostname = dns_result;
+ resolve->res_status_hostname = RES_STATUS_DONE_ERR;
+ }
+ resolve->ttl_hostname = ttl;
+ } else if (query_type == DNS_IPv4_A) {
+ if (resolve->res_status_ipv4 != RES_STATUS_INFLIGHT)
+ return;
+
+ if (dns_result == DNS_ERR_NONE && answer_addr &&
+ tor_addr_family(answer_addr) == AF_INET) {
+ resolve->result_ipv4.addr_ipv4 = tor_addr_to_ipv4h(answer_addr);
+ resolve->res_status_ipv4 = RES_STATUS_DONE_OK;
+ } else {
+ resolve->result_ipv4.err_ipv4 = dns_result;
+ resolve->res_status_ipv4 = RES_STATUS_DONE_ERR;
+ }
+
+ } else if (query_type == DNS_IPv6_AAAA) {
+ if (resolve->res_status_ipv6 != RES_STATUS_INFLIGHT)
+ return;
+
+ if (dns_result == DNS_ERR_NONE && answer_addr &&
+ tor_addr_family(answer_addr) == AF_INET6) {
+ memcpy(&resolve->result_ipv6.addr_ipv6,
+ tor_addr_to_in6(answer_addr),
+ sizeof(struct in6_addr));
+ resolve->res_status_ipv6 = RES_STATUS_DONE_OK;
+ } else {
+ resolve->result_ipv6.err_ipv6 = dns_result;
+ resolve->res_status_ipv6 = RES_STATUS_DONE_ERR;
+ }
+ }
+}
+
+/** Return true iff there are no in-flight requests for <b>resolve</b>. */
+static int
+cached_resolve_have_all_answers(const cached_resolve_t *resolve)
+{
+ return (resolve->res_status_ipv4 != RES_STATUS_INFLIGHT &&
+ resolve->res_status_ipv6 != RES_STATUS_INFLIGHT &&
+ resolve->res_status_hostname != RES_STATUS_INFLIGHT);
+}
+
/** Set an expiry time for a cached_resolve_t, and add it to the expiry
* priority queue */
static void
@@ -380,7 +483,7 @@ set_expiry(cached_resolve_t *resolve, time_t expires)
cached_resolve_pqueue = smartlist_new();
resolve->expire = expires;
smartlist_pqueue_add(cached_resolve_pqueue,
- _compare_cached_resolves_by_expiry,
+ compare_cached_resolves_by_expiry_,
STRUCT_OFFSET(cached_resolve_t, minheap_idx),
resolve);
}
@@ -395,13 +498,13 @@ dns_free_all(void)
SMARTLIST_FOREACH(cached_resolve_pqueue, cached_resolve_t *, res,
{
if (res->state == CACHE_STATE_DONE)
- _free_cached_resolve(res);
+ free_cached_resolve_(res);
});
}
for (ptr = HT_START(cache_map, &cache_root); ptr != NULL; ptr = next) {
item = *ptr;
next = HT_NEXT_RMV(cache_map, &cache_root, ptr);
- _free_cached_resolve(item);
+ free_cached_resolve_(item);
}
HT_CLEAR(cache_map, &cache_root);
smartlist_free(cached_resolve_pqueue);
@@ -427,7 +530,7 @@ purge_expired_resolves(time_t now)
if (resolve->expire > now)
break;
smartlist_pqueue_pop(cached_resolve_pqueue,
- _compare_cached_resolves_by_expiry,
+ compare_cached_resolves_by_expiry_,
STRUCT_OFFSET(cached_resolve_t, minheap_idx));
if (resolve->state == CACHE_STATE_PENDING) {
@@ -435,8 +538,7 @@ purge_expired_resolves(time_t now)
"Expiring a dns resolve %s that's still pending. Forgot to "
"cull it? DNS resolve didn't tell us about the timeout?",
escaped_safe_str(resolve->address));
- } else if (resolve->state == CACHE_STATE_CACHED_VALID ||
- resolve->state == CACHE_STATE_CACHED_FAILED) {
+ } else if (resolve->state == CACHE_STATE_CACHED) {
log_debug(LD_EXIT,
"Forgetting old cached resolve (address %s, expires %lu)",
escaped_safe_str(resolve->address),
@@ -454,9 +556,9 @@ purge_expired_resolves(time_t now)
pend = resolve->pending_connections;
resolve->pending_connections = pend->next;
/* Connections should only be pending if they have no socket. */
- tor_assert(!SOCKET_OK(pend->conn->_base.s));
+ tor_assert(!SOCKET_OK(pend->conn->base_.s));
pendconn = pend->conn;
- if (!pendconn->_base.marked_for_close) {
+ if (!pendconn->base_.marked_for_close) {
connection_edge_end(pendconn, END_STREAM_REASON_TIMEOUT);
circuit_detach_stream(circuit_get_by_edge_conn(pendconn), pendconn);
connection_free(TO_CONN(pendconn));
@@ -465,8 +567,7 @@ purge_expired_resolves(time_t now)
}
}
- if (resolve->state == CACHE_STATE_CACHED_VALID ||
- resolve->state == CACHE_STATE_CACHED_FAILED ||
+ if (resolve->state == CACHE_STATE_CACHED ||
resolve->state == CACHE_STATE_PENDING) {
removed = HT_REMOVE(cache_map, &cache_root, resolve);
if (removed != resolve) {
@@ -481,8 +582,8 @@ purge_expired_resolves(time_t now)
cached_resolve_t *tmp = HT_FIND(cache_map, &cache_root, resolve);
tor_assert(tmp != resolve);
}
- if (resolve->is_reverse)
- tor_free(resolve->result.hostname);
+ if (resolve->res_status_hostname == RES_STATUS_DONE_OK)
+ tor_free(resolve->result_ptr.hostname);
resolve->magic = 0xF0BBF0BB;
tor_free(resolve);
}
@@ -490,19 +591,24 @@ purge_expired_resolves(time_t now)
assert_cache_ok();
}
+/* argument for send_resolved_cell only, meaning "let the answer type be ipv4
+ * or ipv6 depending on the connection's address". */
+#define RESOLVED_TYPE_AUTO 0xff
+
/** Send a response to the RESOLVE request of a connection.
* <b>answer_type</b> must be one of
- * RESOLVED_TYPE_(IPV4|ERROR|ERROR_TRANSIENT).
+ * RESOLVED_TYPE_(AUTO|ERROR|ERROR_TRANSIENT|).
*
* If <b>circ</b> is provided, and we have a cached answer, send the
* answer back along circ; otherwise, send the answer back along
* <b>conn</b>'s attached circuit.
*/
static void
-send_resolved_cell(edge_connection_t *conn, uint8_t answer_type)
+send_resolved_cell(edge_connection_t *conn, uint8_t answer_type,
+ const cached_resolve_t *resolved)
{
- char buf[RELAY_PAYLOAD_SIZE];
- size_t buflen;
+ char buf[RELAY_PAYLOAD_SIZE], *cp = buf;
+ size_t buflen = 0;
uint32_t ttl;
buf[0] = answer_type;
@@ -510,19 +616,36 @@ send_resolved_cell(edge_connection_t *conn, uint8_t answer_type)
switch (answer_type)
{
- case RESOLVED_TYPE_IPV4:
- buf[1] = 4;
- set_uint32(buf+2, tor_addr_to_ipv4n(&conn->_base.addr));
- set_uint32(buf+6, htonl(ttl));
- buflen = 10;
- break;
- /*XXXX IP6 need ipv6 implementation */
+ case RESOLVED_TYPE_AUTO:
+ if (resolved && resolved->res_status_ipv4 == RES_STATUS_DONE_OK) {
+ cp[0] = RESOLVED_TYPE_IPV4;
+ cp[1] = 4;
+ set_uint32(cp+2, htonl(resolved->result_ipv4.addr_ipv4));
+ set_uint32(cp+6, htonl(ttl));
+ cp += 10;
+ }
+ if (resolved && resolved->res_status_ipv6 == RES_STATUS_DONE_OK) {
+ const uint8_t *bytes = resolved->result_ipv6.addr_ipv6.s6_addr;
+ cp[0] = RESOLVED_TYPE_IPV6;
+ cp[1] = 16;
+ memcpy(cp+2, bytes, 16);
+ set_uint32(cp+18, htonl(ttl));
+ cp += 22;
+ }
+ if (cp != buf) {
+ buflen = cp - buf;
+ break;
+ } else {
+ answer_type = RESOLVED_TYPE_ERROR;
+ /* fall through. */
+ }
case RESOLVED_TYPE_ERROR_TRANSIENT:
case RESOLVED_TYPE_ERROR:
{
const char *errmsg = "Error resolving hostname";
size_t msglen = strlen(errmsg);
+ buf[0] = answer_type;
buf[1] = msglen;
strlcpy(buf+2, errmsg, sizeof(buf)-2);
set_uint32(buf+2+msglen, htonl(ttl));
@@ -600,10 +723,11 @@ dns_resolve(edge_connection_t *exitconn)
int is_resolve, r;
int made_connection_pending = 0;
char *hostname = NULL;
- is_resolve = exitconn->_base.purpose == EXIT_PURPOSE_RESOLVE;
+ cached_resolve_t *resolve = NULL;
+ is_resolve = exitconn->base_.purpose == EXIT_PURPOSE_RESOLVE;
r = dns_resolve_impl(exitconn, is_resolve, oncirc, &hostname,
- &made_connection_pending);
+ &made_connection_pending, &resolve);
switch (r) {
case 1:
@@ -614,7 +738,7 @@ dns_resolve(edge_connection_t *exitconn)
if (hostname)
send_resolved_hostname_cell(exitconn, hostname);
else
- send_resolved_cell(exitconn, RESOLVED_TYPE_IPV4);
+ send_resolved_cell(exitconn, RESOLVED_TYPE_AUTO, resolve);
exitconn->on_circuit = NULL;
} else {
/* Add to the n_streams list; the calling function will send back a
@@ -626,7 +750,7 @@ dns_resolve(edge_connection_t *exitconn)
case 0:
/* The request is pending: add the connection into the linked list of
* resolving_streams on this circuit. */
- exitconn->_base.state = EXIT_CONN_STATE_RESOLVING;
+ exitconn->base_.state = EXIT_CONN_STATE_RESOLVING;
exitconn->next_stream = oncirc->resolving_streams;
oncirc->resolving_streams = exitconn;
break;
@@ -636,14 +760,15 @@ dns_resolve(edge_connection_t *exitconn)
* and stop everybody waiting for the same connection. */
if (is_resolve) {
send_resolved_cell(exitconn,
- (r == -1) ? RESOLVED_TYPE_ERROR : RESOLVED_TYPE_ERROR_TRANSIENT);
+ (r == -1) ? RESOLVED_TYPE_ERROR : RESOLVED_TYPE_ERROR_TRANSIENT,
+ NULL);
}
exitconn->on_circuit = NULL;
- dns_cancel_pending_resolve(exitconn->_base.address);
+ dns_cancel_pending_resolve(exitconn->base_.address);
- if (!made_connection_pending && !exitconn->_base.marked_for_close) {
+ if (!made_connection_pending && !exitconn->base_.marked_for_close) {
/* If we made the connection pending, then we freed it already in
* dns_cancel_pending_resolve(). If we marked it for close, it'll
* get freed from the main loop. Otherwise, can free it now. */
@@ -670,48 +795,50 @@ dns_resolve(edge_connection_t *exitconn)
* Set *<b>made_connection_pending_out</b> to true if we have placed
* <b>exitconn</b> on the list of pending connections for some resolve; set it
* to false otherwise.
+ *
+ * Set *<b>resolve_out</b> to a cached resolve, if we found one.
*/
static int
dns_resolve_impl(edge_connection_t *exitconn, int is_resolve,
or_circuit_t *oncirc, char **hostname_out,
- int *made_connection_pending_out)
+ int *made_connection_pending_out,
+ cached_resolve_t **resolve_out)
{
cached_resolve_t *resolve;
cached_resolve_t search;
pending_connection_t *pending_connection;
- const routerinfo_t *me;
+ int is_reverse = 0;
tor_addr_t addr;
time_t now = time(NULL);
- uint8_t is_reverse = 0;
int r;
assert_connection_ok(TO_CONN(exitconn), 0);
- tor_assert(!SOCKET_OK(exitconn->_base.s));
+ tor_assert(!SOCKET_OK(exitconn->base_.s));
assert_cache_ok();
tor_assert(oncirc);
*made_connection_pending_out = 0;
- /* first check if exitconn->_base.address is an IP. If so, we already
+ /* first check if exitconn->base_.address is an IP. If so, we already
* know the answer. */
- if (tor_addr_parse(&addr, exitconn->_base.address) >= 0) {
- if (tor_addr_family(&addr) == AF_INET) {
- tor_addr_copy(&exitconn->_base.addr, &addr);
+ if (tor_addr_parse(&addr, exitconn->base_.address) >= 0) {
+ if (tor_addr_family(&addr) == AF_INET ||
+ tor_addr_family(&addr) == AF_INET6) {
+ tor_addr_copy(&exitconn->base_.addr, &addr);
exitconn->address_ttl = DEFAULT_DNS_TTL;
return 1;
} else {
- /* XXXX IPv6 */
+ /* XXXX unspec? Bogus? */
return -1;
}
}
/* If we're a non-exit, don't even do DNS lookups. */
- if (!(me = router_get_my_routerinfo()) ||
- policy_is_reject_star(me->exit_policy)) {
+ if (router_my_exit_policy_is_reject_star())
return -1;
- }
- if (address_is_invalid_destination(exitconn->_base.address, 0)) {
- log(LOG_PROTOCOL_WARN, LD_EXIT,
+
+ if (address_is_invalid_destination(exitconn->base_.address, 0)) {
+ tor_log(LOG_PROTOCOL_WARN, LD_EXIT,
"Rejecting invalid destination address %s",
- escaped_safe_str(exitconn->_base.address));
+ escaped_safe_str(exitconn->base_.address));
return -1;
}
@@ -719,14 +846,14 @@ dns_resolve_impl(edge_connection_t *exitconn, int is_resolve,
* resolves in the hash table. */
purge_expired_resolves(now);
- /* lower-case exitconn->_base.address, so it's in canonical form */
- tor_strlower(exitconn->_base.address);
+ /* lower-case exitconn->base_.address, so it's in canonical form */
+ tor_strlower(exitconn->base_.address);
/* Check whether this is a reverse lookup. If it's malformed, or it's a
* .in-addr.arpa address but this isn't a resolve request, kill the
* connection.
*/
- if ((r = tor_addr_parse_PTR_name(&addr, exitconn->_base.address,
+ if ((r = tor_addr_parse_PTR_name(&addr, exitconn->base_.address,
AF_UNSPEC, 0)) != 0) {
if (r == 1) {
is_reverse = 1;
@@ -737,21 +864,22 @@ dns_resolve_impl(edge_connection_t *exitconn, int is_resolve,
if (!is_reverse || !is_resolve) {
if (!is_reverse)
log_info(LD_EXIT, "Bad .in-addr.arpa address \"%s\"; sending error.",
- escaped_safe_str(exitconn->_base.address));
+ escaped_safe_str(exitconn->base_.address));
else if (!is_resolve)
log_info(LD_EXIT,
"Attempt to connect to a .in-addr.arpa address \"%s\"; "
"sending error.",
- escaped_safe_str(exitconn->_base.address));
+ escaped_safe_str(exitconn->base_.address));
return -1;
}
//log_notice(LD_EXIT, "Looks like an address %s",
- //exitconn->_base.address);
+ //exitconn->base_.address);
}
+ exitconn->is_reverse_dns_lookup = is_reverse;
/* now check the hash table to see if 'address' is already there. */
- strlcpy(search.address, exitconn->_base.address, sizeof(search.address));
+ strlcpy(search.address, exitconn->base_.address, sizeof(search.address));
resolve = HT_FIND(cache_map, &cache_root, &search);
if (resolve && resolve->expire > now) { /* already there */
switch (resolve->state) {
@@ -763,27 +891,19 @@ dns_resolve_impl(edge_connection_t *exitconn, int is_resolve,
pending_connection->next = resolve->pending_connections;
resolve->pending_connections = pending_connection;
*made_connection_pending_out = 1;
- log_debug(LD_EXIT,"Connection (fd %d) waiting for pending DNS "
- "resolve of %s", exitconn->_base.s,
- escaped_safe_str(exitconn->_base.address));
+ log_debug(LD_EXIT,"Connection (fd "TOR_SOCKET_T_FORMAT") waiting "
+ "for pending DNS resolve of %s", exitconn->base_.s,
+ escaped_safe_str(exitconn->base_.address));
return 0;
- case CACHE_STATE_CACHED_VALID:
- log_debug(LD_EXIT,"Connection (fd %d) found cached answer for %s",
- exitconn->_base.s,
+ case CACHE_STATE_CACHED:
+ log_debug(LD_EXIT,"Connection (fd "TOR_SOCKET_T_FORMAT") found "
+ "cached answer for %s",
+ exitconn->base_.s,
escaped_safe_str(resolve->address));
- exitconn->address_ttl = resolve->ttl;
- if (resolve->is_reverse) {
- tor_assert(is_resolve);
- *hostname_out = tor_strdup(resolve->result.hostname);
- } else {
- tor_addr_from_ipv4h(&exitconn->_base.addr, resolve->result.a.addr);
- }
- return 1;
- case CACHE_STATE_CACHED_FAILED:
- log_debug(LD_EXIT,"Connection (fd %d) found cached error for %s",
- exitconn->_base.s,
- escaped_safe_str(exitconn->_base.address));
- return -1;
+
+ *resolve_out = resolve;
+
+ return set_exitconn_info_from_resolve(exitconn, resolve, hostname_out);
case CACHE_STATE_DONE:
log_err(LD_BUG, "Found a 'DONE' dns resolve still in the cache.");
tor_fragile_assert();
@@ -796,8 +916,7 @@ dns_resolve_impl(edge_connection_t *exitconn, int is_resolve,
resolve->magic = CACHED_RESOLVE_MAGIC;
resolve->state = CACHE_STATE_PENDING;
resolve->minheap_idx = -1;
- resolve->is_reverse = is_reverse;
- strlcpy(resolve->address, exitconn->_base.address, sizeof(resolve->address));
+ strlcpy(resolve->address, exitconn->base_.address, sizeof(resolve->address));
/* add this connection to the pending list */
pending_connection = tor_malloc_zero(sizeof(pending_connection_t));
@@ -810,10 +929,115 @@ dns_resolve_impl(edge_connection_t *exitconn, int is_resolve,
set_expiry(resolve, now + RESOLVE_MAX_TIMEOUT);
log_debug(LD_EXIT,"Launching %s.",
- escaped_safe_str(exitconn->_base.address));
+ escaped_safe_str(exitconn->base_.address));
assert_cache_ok();
- return launch_resolve(exitconn);
+ return launch_resolve(resolve);
+}
+
+/** Given an exit connection <b>exitconn</b>, and a cached_resolve_t
+ * <b>resolve</b> whose DNS lookups have all succeeded or failed, update the
+ * appropriate fields (address_ttl and addr) of <b>exitconn</b>.
+ *
+ * If this is a reverse lookup, set *<b>hostname_out</b> to a newly allocated
+ * copy of the name resulting hostname.
+ *
+ * Return -2 on a transient error, -1 on a permenent error, and 1 on
+ * a successful lookup.
+ */
+static int
+set_exitconn_info_from_resolve(edge_connection_t *exitconn,
+ const cached_resolve_t *resolve,
+ char **hostname_out)
+{
+ int ipv4_ok, ipv6_ok, answer_with_ipv4, r;
+ uint32_t begincell_flags;
+ const int is_resolve = exitconn->base_.purpose == EXIT_PURPOSE_RESOLVE;
+ tor_assert(exitconn);
+ tor_assert(resolve);
+
+ if (exitconn->is_reverse_dns_lookup) {
+ exitconn->address_ttl = resolve->ttl_hostname;
+ if (resolve->res_status_hostname == RES_STATUS_DONE_OK) {
+ *hostname_out = tor_strdup(resolve->result_ptr.hostname);
+ return 1;
+ } else {
+ return -1;
+ }
+ }
+
+ /* If we're here then the connection wants one or either of ipv4, ipv6, and
+ * we can give it one or both. */
+ if (is_resolve) {
+ begincell_flags = BEGIN_FLAG_IPV6_OK;
+ } else {
+ begincell_flags = exitconn->begincell_flags;
+ }
+
+ ipv4_ok = (resolve->res_status_ipv4 == RES_STATUS_DONE_OK) &&
+ ! (begincell_flags & BEGIN_FLAG_IPV4_NOT_OK);
+ ipv6_ok = (resolve->res_status_ipv6 == RES_STATUS_DONE_OK) &&
+ (begincell_flags & BEGIN_FLAG_IPV6_OK) &&
+ get_options()->IPv6Exit;
+
+ /* Now decide which one to actually give. */
+ if (ipv4_ok && ipv6_ok && is_resolve) {
+ answer_with_ipv4 = 1;
+ } else if (ipv4_ok && ipv6_ok) {
+ /* If we have both, see if our exit policy has an opinion. */
+ const uint16_t port = exitconn->base_.port;
+ int ipv4_allowed, ipv6_allowed;
+ tor_addr_t a4, a6;
+ tor_addr_from_ipv4h(&a4, resolve->result_ipv4.addr_ipv4);
+ tor_addr_from_in6(&a6, &resolve->result_ipv6.addr_ipv6);
+ ipv4_allowed = !router_compare_to_my_exit_policy(&a4, port);
+ ipv6_allowed = !router_compare_to_my_exit_policy(&a6, port);
+ if (ipv4_allowed && !ipv6_allowed) {
+ answer_with_ipv4 = 1;
+ } else if (ipv6_allowed && !ipv4_allowed) {
+ answer_with_ipv4 = 0;
+ } else {
+ /* Our exit policy would permit both. Answer with whichever the user
+ * prefers */
+ answer_with_ipv4 = !(begincell_flags &
+ BEGIN_FLAG_IPV6_PREFERRED);
+ }
+ } else {
+ /* Otherwise if one is okay, send it back. */
+ if (ipv4_ok) {
+ answer_with_ipv4 = 1;
+ } else if (ipv6_ok) {
+ answer_with_ipv4 = 0;
+ } else {
+ /* Neither one was okay. Choose based on user preference. */
+ answer_with_ipv4 = !(begincell_flags &
+ BEGIN_FLAG_IPV6_PREFERRED);
+ }
+ }
+
+ /* Finally, we write the answer back. */
+ r = 1;
+ if (answer_with_ipv4) {
+ if (resolve->res_status_ipv4 == RES_STATUS_DONE_OK) {
+ tor_addr_from_ipv4h(&exitconn->base_.addr,
+ resolve->result_ipv4.addr_ipv4);
+ } else {
+ r = evdns_err_is_transient(resolve->result_ipv4.err_ipv4) ? -2 : -1;
+ }
+
+ exitconn->address_ttl = resolve->ttl_ipv4;
+ } else {
+ if (resolve->res_status_ipv6 == RES_STATUS_DONE_OK) {
+ tor_addr_from_in6(&exitconn->base_.addr,
+ &resolve->result_ipv6.addr_ipv6);
+ } else {
+ r = evdns_err_is_transient(resolve->result_ipv6.err_ipv6) ? -2 : -1;
+ }
+
+ exitconn->address_ttl = resolve->ttl_ipv6;
+ }
+
+ return r;
}
/** Log an error and abort if conn is waiting for a DNS resolve.
@@ -826,7 +1050,7 @@ assert_connection_edge_not_dns_pending(edge_connection_t *conn)
#if 1
cached_resolve_t *resolve;
- strlcpy(search.address, conn->_base.address, sizeof(search.address));
+ strlcpy(search.address, conn->base_.address, sizeof(search.address));
resolve = HT_FIND(cache_map, &cache_root, &search);
if (!resolve)
return;
@@ -856,7 +1080,7 @@ assert_all_pending_dns_resolves_ok(void)
pend;
pend = pend->next) {
assert_connection_ok(TO_CONN(pend->conn), 0);
- tor_assert(!SOCKET_OK(pend->conn->_base.s));
+ tor_assert(!SOCKET_OK(pend->conn->base_.s));
tor_assert(!connection_in_array(TO_CONN(pend->conn)));
}
}
@@ -871,15 +1095,15 @@ connection_dns_remove(edge_connection_t *conn)
cached_resolve_t search;
cached_resolve_t *resolve;
- tor_assert(conn->_base.type == CONN_TYPE_EXIT);
- tor_assert(conn->_base.state == EXIT_CONN_STATE_RESOLVING);
+ tor_assert(conn->base_.type == CONN_TYPE_EXIT);
+ tor_assert(conn->base_.state == EXIT_CONN_STATE_RESOLVING);
- strlcpy(search.address, conn->_base.address, sizeof(search.address));
+ strlcpy(search.address, conn->base_.address, sizeof(search.address));
resolve = HT_FIND(cache_map, &cache_root, &search);
if (!resolve) {
log_notice(LD_BUG, "Address %s is not pending. Dropping.",
- escaped_safe_str(conn->_base.address));
+ escaped_safe_str(conn->base_.address));
return;
}
@@ -891,10 +1115,10 @@ connection_dns_remove(edge_connection_t *conn)
if (pend->conn == conn) {
resolve->pending_connections = pend->next;
tor_free(pend);
- log_debug(LD_EXIT, "First connection (fd %d) no longer waiting "
- "for resolve of %s",
- conn->_base.s,
- escaped_safe_str(conn->_base.address));
+ log_debug(LD_EXIT, "First connection (fd "TOR_SOCKET_T_FORMAT") no "
+ "longer waiting for resolve of %s",
+ conn->base_.s,
+ escaped_safe_str(conn->base_.address));
return;
} else {
for ( ; pend->next; pend = pend->next) {
@@ -903,8 +1127,9 @@ connection_dns_remove(edge_connection_t *conn)
pend->next = victim->next;
tor_free(victim);
log_debug(LD_EXIT,
- "Connection (fd %d) no longer waiting for resolve of %s",
- conn->_base.s, escaped_safe_str(conn->_base.address));
+ "Connection (fd "TOR_SOCKET_T_FORMAT") no longer waiting "
+ "for resolve of %s",
+ conn->base_.s, escaped_safe_str(conn->base_.address));
return; /* more are pending */
}
}
@@ -959,17 +1184,17 @@ dns_cancel_pending_resolve(const char *address)
escaped_safe_str(address));
while (resolve->pending_connections) {
pend = resolve->pending_connections;
- pend->conn->_base.state = EXIT_CONN_STATE_RESOLVEFAILED;
+ pend->conn->base_.state = EXIT_CONN_STATE_RESOLVEFAILED;
pendconn = pend->conn;
assert_connection_ok(TO_CONN(pendconn), 0);
- tor_assert(!SOCKET_OK(pendconn->_base.s));
- if (!pendconn->_base.marked_for_close) {
+ tor_assert(!SOCKET_OK(pendconn->base_.s));
+ if (!pendconn->base_.marked_for_close) {
connection_edge_end(pendconn, END_STREAM_REASON_RESOLVEFAILED);
}
circ = circuit_get_by_edge_conn(pendconn);
if (circ)
circuit_detach_stream(circ, pendconn);
- if (!pendconn->_base.marked_for_close)
+ if (!pendconn->base_.marked_for_close)
connection_free(TO_CONN(pendconn));
resolve->pending_connections = pend->next;
tor_free(pend);
@@ -987,47 +1212,6 @@ dns_cancel_pending_resolve(const char *address)
resolve->state = CACHE_STATE_DONE;
}
-/** Helper: adds an entry to the DNS cache mapping <b>address</b> to the ipv4
- * address <b>addr</b> (if is_reverse is 0) or the hostname <b>hostname</b> (if
- * is_reverse is 1). <b>ttl</b> is a cache ttl; <b>outcome</b> is one of
- * DNS_RESOLVE_{FAILED_TRANSIENT|FAILED_PERMANENT|SUCCEEDED}.
- **/
-static void
-add_answer_to_cache(const char *address, uint8_t is_reverse, uint32_t addr,
- const char *hostname, char outcome, uint32_t ttl)
-{
- cached_resolve_t *resolve;
- if (outcome == DNS_RESOLVE_FAILED_TRANSIENT)
- return;
-
- //log_notice(LD_EXIT, "Adding to cache: %s -> %s (%lx, %s), %d",
- // address, is_reverse?"(reverse)":"", (unsigned long)addr,
- // hostname?hostname:"NULL",(int)outcome);
-
- resolve = tor_malloc_zero(sizeof(cached_resolve_t));
- resolve->magic = CACHED_RESOLVE_MAGIC;
- resolve->state = (outcome == DNS_RESOLVE_SUCCEEDED) ?
- CACHE_STATE_CACHED_VALID : CACHE_STATE_CACHED_FAILED;
- strlcpy(resolve->address, address, sizeof(resolve->address));
- resolve->is_reverse = is_reverse;
- if (is_reverse) {
- if (outcome == DNS_RESOLVE_SUCCEEDED) {
- tor_assert(hostname);
- resolve->result.hostname = tor_strdup(hostname);
- } else {
- tor_assert(! hostname);
- resolve->result.hostname = NULL;
- }
- } else {
- tor_assert(!hostname);
- resolve->result.a.addr = addr;
- }
- resolve->ttl = ttl;
- assert_resolve_ok(resolve);
- HT_INSERT(cache_map, &cache_root, resolve);
- set_expiry(resolve, time(NULL) + dns_get_expiry_ttl(ttl));
-}
-
/** Return true iff <b>address</b> is one of the addresses we use to verify
* that well-known sites aren't being hijacked by our DNS servers. */
static INLINE int
@@ -1035,25 +1219,26 @@ is_test_address(const char *address)
{
const or_options_t *options = get_options();
return options->ServerDNSTestAddresses &&
- smartlist_string_isin_case(options->ServerDNSTestAddresses, address);
+ smartlist_contains_string_case(options->ServerDNSTestAddresses, address);
}
-/** Called on the OR side when a DNS worker or the eventdns library tells us
- * the outcome of a DNS resolve: tell all pending connections about the result
- * of the lookup, and cache the value. (<b>address</b> is a NUL-terminated
- * string containing the address to look up; <b>addr</b> is an IPv4 address in
- * host order; <b>outcome</b> is one of
- * DNS_RESOLVE_{FAILED_TRANSIENT|FAILED_PERMANENT|SUCCEEDED}.
+/** Called on the OR side when the eventdns library tells us the outcome of a
+ * single DNS resolve: remember the answer, and tell all pending connections
+ * about the result of the lookup if the lookup is now done. (<b>address</b>
+ * is a NUL-terminated string containing the address to look up;
+ * <b>query_type</b> is one of DNS_{IPv4_A,IPv6_AAAA,PTR}; <b>dns_answer</b>
+ * is DNS_OK or one of DNS_ERR_*, <b>addr</b> is an IPv4 or IPv6 address if we
+ * got one; <b>hostname</b> is a hostname fora PTR request if we got one, and
+ * <b>ttl</b> is the time-to-live of this answer, in seconds.)
*/
static void
-dns_found_answer(const char *address, uint8_t is_reverse, uint32_t addr,
- const char *hostname, char outcome, uint32_t ttl)
+dns_found_answer(const char *address, uint8_t query_type,
+ int dns_answer,
+ const tor_addr_t *addr,
+ const char *hostname, uint32_t ttl)
{
- pending_connection_t *pend;
cached_resolve_t search;
- cached_resolve_t *resolve, *removed;
- edge_connection_t *pendconn;
- circuit_t *circ;
+ cached_resolve_t *resolve;
assert_cache_ok();
@@ -1063,9 +1248,8 @@ dns_found_answer(const char *address, uint8_t is_reverse, uint32_t addr,
if (!resolve) {
int is_test_addr = is_test_address(address);
if (!is_test_addr)
- log_info(LD_EXIT,"Resolved unasked address %s; caching anyway.",
+ log_info(LD_EXIT,"Resolved unasked address %s; ignoring.",
escaped_safe_str(address));
- add_answer_to_cache(address, is_reverse, addr, hostname, outcome, ttl);
return;
}
assert_resolve_ok(resolve);
@@ -1081,46 +1265,66 @@ dns_found_answer(const char *address, uint8_t is_reverse, uint32_t addr,
tor_assert(resolve->pending_connections == NULL);
return;
}
- /* Removed this assertion: in fact, we'll sometimes get a double answer
- * to the same question. This can happen when we ask one worker to resolve
- * X.Y.Z., then we cancel the request, and then we ask another worker to
- * resolve X.Y.Z. */
- /* tor_assert(resolve->state == CACHE_STATE_PENDING); */
+
+ cached_resolve_add_answer(resolve, query_type, dns_answer,
+ addr, hostname, ttl);
+
+ if (cached_resolve_have_all_answers(resolve)) {
+ inform_pending_connections(resolve);
+
+ make_pending_resolve_cached(resolve);
+ }
+}
+
+/** Given a pending cached_resolve_t that we just finished resolving,
+ * inform every connection that was waiting for the outcome of that
+ * resolution. */
+static void
+inform_pending_connections(cached_resolve_t *resolve)
+{
+ pending_connection_t *pend;
+ edge_connection_t *pendconn;
+ int r;
while (resolve->pending_connections) {
+ char *hostname = NULL;
pend = resolve->pending_connections;
pendconn = pend->conn; /* don't pass complex things to the
connection_mark_for_close macro */
assert_connection_ok(TO_CONN(pendconn),time(NULL));
- if (pendconn->_base.marked_for_close) {
+
+ if (pendconn->base_.marked_for_close) {
/* prevent double-remove. */
- pendconn->_base.state = EXIT_CONN_STATE_RESOLVEFAILED;
+ pendconn->base_.state = EXIT_CONN_STATE_RESOLVEFAILED;
resolve->pending_connections = pend->next;
tor_free(pend);
continue;
}
- tor_addr_from_ipv4h(&pendconn->_base.addr, addr);
- pendconn->address_ttl = ttl;
- if (outcome != DNS_RESOLVE_SUCCEEDED) {
+ r = set_exitconn_info_from_resolve(pendconn,
+ resolve,
+ &hostname);
+
+ if (r < 0) {
/* prevent double-remove. */
- pendconn->_base.state = EXIT_CONN_STATE_RESOLVEFAILED;
- if (pendconn->_base.purpose == EXIT_PURPOSE_CONNECT) {
+ pendconn->base_.state = EXIT_CONN_STATE_RESOLVEFAILED;
+ if (pendconn->base_.purpose == EXIT_PURPOSE_CONNECT) {
connection_edge_end(pendconn, END_STREAM_REASON_RESOLVEFAILED);
/* This detach must happen after we send the end cell. */
circuit_detach_stream(circuit_get_by_edge_conn(pendconn), pendconn);
} else {
- send_resolved_cell(pendconn, outcome == DNS_RESOLVE_FAILED_PERMANENT ?
- RESOLVED_TYPE_ERROR : RESOLVED_TYPE_ERROR_TRANSIENT);
+ send_resolved_cell(pendconn, r == -1 ?
+ RESOLVED_TYPE_ERROR : RESOLVED_TYPE_ERROR_TRANSIENT,
+ NULL);
/* This detach must happen after we send the resolved cell. */
circuit_detach_stream(circuit_get_by_edge_conn(pendconn), pendconn);
}
connection_free(TO_CONN(pendconn));
} else {
- if (pendconn->_base.purpose == EXIT_PURPOSE_CONNECT) {
- tor_assert(!is_reverse);
+ circuit_t *circ;
+ if (pendconn->base_.purpose == EXIT_PURPOSE_CONNECT) {
/* prevent double-remove. */
- pend->conn->_base.state = EXIT_CONN_STATE_CONNECTING;
+ pend->conn->base_.state = EXIT_CONN_STATE_CONNECTING;
circ = circuit_get_by_edge_conn(pend->conn);
tor_assert(circ);
@@ -1136,11 +1340,11 @@ dns_found_answer(const char *address, uint8_t is_reverse, uint32_t addr,
} else {
/* prevent double-remove. This isn't really an accurate state,
* but it does the right thing. */
- pendconn->_base.state = EXIT_CONN_STATE_RESOLVEFAILED;
- if (is_reverse)
+ pendconn->base_.state = EXIT_CONN_STATE_RESOLVEFAILED;
+ if (pendconn->is_reverse_dns_lookup)
send_resolved_hostname_cell(pendconn, hostname);
else
- send_resolved_cell(pendconn, RESOLVED_TYPE_IPV4);
+ send_resolved_cell(pendconn, RESOLVED_TYPE_AUTO, resolve);
circ = circuit_get_by_edge_conn(pendconn);
tor_assert(circ);
circuit_detach_stream(circ, pendconn);
@@ -1149,10 +1353,23 @@ dns_found_answer(const char *address, uint8_t is_reverse, uint32_t addr,
}
resolve->pending_connections = pend->next;
tor_free(pend);
+ tor_free(hostname);
}
+}
+
+/** Remove a pending cached_resolve_t from the hashtable, and add a
+ * corresponding cached cached_resolve_t.
+ *
+ * This function is only necessary because of the perversity of our
+ * cache timeout code; see inline comment for ideas on eliminating it.
+ **/
+static void
+make_pending_resolve_cached(cached_resolve_t *resolve)
+{
+ cached_resolve_t *removed;
resolve->state = CACHE_STATE_DONE;
- removed = HT_REMOVE(cache_map, &cache_root, &search);
+ removed = HT_REMOVE(cache_map, &cache_root, resolve);
if (removed != resolve) {
log_err(LD_BUG, "The pending resolve we found wasn't removable from"
" the cache. Tried to purge %s (%p); instead got %s (%p).",
@@ -1161,8 +1378,42 @@ dns_found_answer(const char *address, uint8_t is_reverse, uint32_t addr,
}
assert_resolve_ok(resolve);
assert_cache_ok();
+ /* The resolve will eventually just hit the time-out in the expiry queue and
+ * expire. See fd0bafb0dedc7e2 for a brief explanation of how this got that
+ * way. XXXXX we could do better!*/
+
+ {
+ cached_resolve_t *new_resolve = tor_memdup(resolve,
+ sizeof(cached_resolve_t));
+ uint32_t ttl = UINT32_MAX;
+ new_resolve->expire = 0; /* So that set_expiry won't croak. */
+ if (resolve->res_status_hostname == RES_STATUS_DONE_OK)
+ new_resolve->result_ptr.hostname =
+ tor_strdup(resolve->result_ptr.hostname);
+
+ new_resolve->state = CACHE_STATE_CACHED;
+
+ assert_resolve_ok(new_resolve);
+ HT_INSERT(cache_map, &cache_root, new_resolve);
+
+ if ((resolve->res_status_ipv4 == RES_STATUS_DONE_OK ||
+ resolve->res_status_ipv4 == RES_STATUS_DONE_ERR) &&
+ resolve->ttl_ipv4 < ttl)
+ ttl = resolve->ttl_ipv4;
+
+ if ((resolve->res_status_ipv6 == RES_STATUS_DONE_OK ||
+ resolve->res_status_ipv6 == RES_STATUS_DONE_ERR) &&
+ resolve->ttl_ipv6 < ttl)
+ ttl = resolve->ttl_ipv6;
+
+ if ((resolve->res_status_hostname == RES_STATUS_DONE_OK ||
+ resolve->res_status_hostname == RES_STATUS_DONE_ERR) &&
+ resolve->ttl_hostname < ttl)
+ ttl = resolve->ttl_hostname;
+
+ set_expiry(new_resolve, time(NULL) + dns_get_expiry_ttl(ttl));
+ }
- add_answer_to_cache(address, is_reverse, addr, hostname, outcome, ttl);
assert_cache_ok();
}
@@ -1194,13 +1445,14 @@ configure_nameservers(int force)
const or_options_t *options;
const char *conf_fname;
struct stat st;
- int r;
+ int r, flags;
options = get_options();
conf_fname = options->ServerDNSResolvConfFile;
#ifndef _WIN32
if (!conf_fname)
conf_fname = "/etc/resolv.conf";
#endif
+ flags = DNS_OPTIONS_ALL;
if (!the_evdns_base) {
if (!(the_evdns_base = evdns_base_new(tor_libevent_get_base(), 0))) {
@@ -1210,31 +1462,26 @@ configure_nameservers(int force)
}
#ifdef HAVE_EVDNS_SET_DEFAULT_OUTGOING_BIND_ADDRESS
- if (options->OutboundBindAddress) {
- tor_addr_t addr;
- if (tor_addr_parse(&addr, options->OutboundBindAddress) < 0) {
- log_warn(LD_CONFIG,"Outbound bind address '%s' didn't parse. Ignoring.",
- options->OutboundBindAddress);
+ if (! tor_addr_is_null(&options->OutboundBindAddressIPv4_)) {
+ int socklen;
+ struct sockaddr_storage ss;
+ socklen = tor_addr_to_sockaddr(&options->OutboundBindAddressIPv4_, 0,
+ (struct sockaddr *)&ss, sizeof(ss));
+ if (socklen <= 0) {
+ log_warn(LD_BUG, "Couldn't convert outbound bind address to sockaddr."
+ " Ignoring.");
} else {
- int socklen;
- struct sockaddr_storage ss;
- socklen = tor_addr_to_sockaddr(&addr, 0,
- (struct sockaddr *)&ss, sizeof(ss));
- if (socklen <= 0) {
- log_warn(LD_BUG, "Couldn't convert outbound bind address to sockaddr."
- " Ignoring.");
- } else {
- evdns_base_set_default_outgoing_bind_address(the_evdns_base,
- (struct sockaddr *)&ss,
- socklen);
- }
+ evdns_base_set_default_outgoing_bind_address(the_evdns_base,
+ (struct sockaddr *)&ss,
+ socklen);
}
}
#endif
evdns_set_log_fn(evdns_log_cb);
if (conf_fname) {
- if (stat(conf_fname, &st)) {
+ log_debug(LD_FS, "stat()ing %s", conf_fname);
+ if (stat(sandbox_intern_string(conf_fname), &st)) {
log_warn(LD_EXIT, "Unable to stat resolver configuration in '%s': %s",
conf_fname, strerror(errno));
goto err;
@@ -1248,9 +1495,17 @@ configure_nameservers(int force)
evdns_base_search_clear(the_evdns_base);
evdns_base_clear_nameservers_and_suspend(the_evdns_base);
}
+#if defined(DNS_OPTION_HOSTSFILE) && defined(USE_LIBSECCOMP)
+ if (flags & DNS_OPTION_HOSTSFILE) {
+ flags ^= DNS_OPTION_HOSTSFILE;
+ log_debug(LD_FS, "Loading /etc/hosts");
+ evdns_base_load_hosts(the_evdns_base,
+ sandbox_intern_string("/etc/hosts"));
+ }
+#endif
log_info(LD_EXIT, "Parsing resolver configuration in '%s'", conf_fname);
- if ((r = evdns_base_resolv_conf_parse(the_evdns_base,
- DNS_OPTIONS_ALL, conf_fname))) {
+ if ((r = evdns_base_resolv_conf_parse(the_evdns_base, flags,
+ sandbox_intern_string(conf_fname)))) {
log_warn(LD_EXIT, "Unable to parse '%s', or no nameservers in '%s' (%d)",
conf_fname, conf_fname, r);
goto err;
@@ -1331,23 +1586,62 @@ static void
evdns_callback(int result, char type, int count, int ttl, void *addresses,
void *arg)
{
- char *string_address = arg;
- uint8_t is_reverse = 0;
- int status = DNS_RESOLVE_FAILED_PERMANENT;
- uint32_t addr = 0;
+ char *arg_ = arg;
+ uint8_t orig_query_type = arg_[0];
+ char *string_address = arg_ + 1;
+ tor_addr_t addr;
const char *hostname = NULL;
int was_wildcarded = 0;
+ tor_addr_make_unspec(&addr);
+
+ /* Keep track of whether IPv6 is working */
+ if (type == DNS_IPv6_AAAA) {
+ if (result == DNS_ERR_TIMEOUT) {
+ ++n_ipv6_timeouts;
+ }
+
+ if (n_ipv6_timeouts > 10 &&
+ n_ipv6_timeouts > n_ipv6_requests_made / 2) {
+ if (! dns_is_broken_for_ipv6) {
+ log_notice(LD_EXIT, "More than half of our IPv6 requests seem to "
+ "have timed out. I'm going to assume I can't get AAAA "
+ "responses.");
+ dns_is_broken_for_ipv6 = 1;
+ }
+ }
+ }
+
if (result == DNS_ERR_NONE) {
if (type == DNS_IPv4_A && count) {
char answer_buf[INET_NTOA_BUF_LEN+1];
- struct in_addr in;
char *escaped_address;
uint32_t *addrs = addresses;
- in.s_addr = addrs[0];
- addr = ntohl(addrs[0]);
- status = DNS_RESOLVE_SUCCEEDED;
- tor_inet_ntoa(&in, answer_buf, sizeof(answer_buf));
+ tor_addr_from_ipv4n(&addr, addrs[0]);
+
+ tor_addr_to_str(answer_buf, &addr, sizeof(answer_buf), 0);
+ escaped_address = esc_for_log(string_address);
+
+ if (answer_is_wildcarded(answer_buf)) {
+ log_debug(LD_EXIT, "eventdns said that %s resolves to ISP-hijacked "
+ "address %s; treating as a failure.",
+ safe_str(escaped_address),
+ escaped_safe_str(answer_buf));
+ was_wildcarded = 1;
+ tor_addr_make_unspec(&addr);
+ result = DNS_ERR_NOTEXIST;
+ } else {
+ log_debug(LD_EXIT, "eventdns said that %s resolves to %s",
+ safe_str(escaped_address),
+ escaped_safe_str(answer_buf));
+ }
+ tor_free(escaped_address);
+ } else if (type == DNS_IPv6_AAAA && count) {
+ char answer_buf[TOR_ADDR_BUF_LEN];
+ char *escaped_address;
+ struct in6_addr *addrs = addresses;
+ tor_addr_from_in6(&addr, &addrs[0]);
+ tor_inet_ntop(AF_INET6, &addrs[0], answer_buf, sizeof(answer_buf));
escaped_address = esc_for_log(string_address);
if (answer_is_wildcarded(answer_buf)) {
@@ -1356,8 +1650,8 @@ evdns_callback(int result, char type, int count, int ttl, void *addresses,
safe_str(escaped_address),
escaped_safe_str(answer_buf));
was_wildcarded = 1;
- addr = 0;
- status = DNS_RESOLVE_FAILED_PERMANENT;
+ tor_addr_make_unspec(&addr);
+ result = DNS_ERR_NOTEXIST;
} else {
log_debug(LD_EXIT, "eventdns said that %s resolves to %s",
safe_str(escaped_address),
@@ -1366,9 +1660,7 @@ evdns_callback(int result, char type, int count, int ttl, void *addresses,
tor_free(escaped_address);
} else if (type == DNS_PTR && count) {
char *escaped_address;
- is_reverse = 1;
hostname = ((char**)addresses)[0];
- status = DNS_RESOLVE_SUCCEEDED;
escaped_address = esc_for_log(string_address);
log_debug(LD_EXIT, "eventdns said that %s resolves to %s",
safe_str(escaped_address),
@@ -1381,9 +1673,6 @@ evdns_callback(int result, char type, int count, int ttl, void *addresses,
log_warn(LD_BUG, "eventdns returned no addresses or error for %s!",
escaped_safe_str(string_address));
}
- } else {
- if (evdns_err_is_transient(result))
- status = DNS_RESOLVE_FAILED_TRANSIENT;
}
if (was_wildcarded) {
if (is_test_address(string_address)) {
@@ -1392,23 +1681,78 @@ evdns_callback(int result, char type, int count, int ttl, void *addresses,
add_wildcarded_test_address(string_address);
}
}
+
+ if (orig_query_type && type && orig_query_type != type) {
+ log_warn(LD_BUG, "Weird; orig_query_type == %d but type == %d",
+ (int)orig_query_type, (int)type);
+ }
if (result != DNS_ERR_SHUTDOWN)
- dns_found_answer(string_address, is_reverse, addr, hostname, status, ttl);
- tor_free(string_address);
+ dns_found_answer(string_address, orig_query_type,
+ result, &addr, hostname, ttl);
+
+ tor_free(arg_);
+}
+
+/** Start a single DNS resolve for <b>address</b> (if <b>query_type</b> is
+ * DNS_IPv4_A or DNS_IPv6_AAAA) <b>ptr_address</b> (if <b>query_type</b> is
+ * DNS_PTR). Return 0 if we launched the request, -1 otherwise. */
+static int
+launch_one_resolve(const char *address, uint8_t query_type,
+ const tor_addr_t *ptr_address)
+{
+ const int options = get_options()->ServerDNSSearchDomains ? 0
+ : DNS_QUERY_NO_SEARCH;
+ const size_t addr_len = strlen(address);
+ struct evdns_request *req = 0;
+ char *addr = tor_malloc(addr_len + 2);
+ addr[0] = (char) query_type;
+ memcpy(addr+1, address, addr_len + 1);
+
+ switch (query_type) {
+ case DNS_IPv4_A:
+ req = evdns_base_resolve_ipv4(the_evdns_base,
+ address, options, evdns_callback, addr);
+ break;
+ case DNS_IPv6_AAAA:
+ req = evdns_base_resolve_ipv6(the_evdns_base,
+ address, options, evdns_callback, addr);
+ ++n_ipv6_requests_made;
+ break;
+ case DNS_PTR:
+ if (tor_addr_family(ptr_address) == AF_INET)
+ req = evdns_base_resolve_reverse(the_evdns_base,
+ tor_addr_to_in(ptr_address),
+ DNS_QUERY_NO_SEARCH,
+ evdns_callback, addr);
+ else if (tor_addr_family(ptr_address) == AF_INET6)
+ req = evdns_base_resolve_reverse_ipv6(the_evdns_base,
+ tor_addr_to_in6(ptr_address),
+ DNS_QUERY_NO_SEARCH,
+ evdns_callback, addr);
+ else
+ log_warn(LD_BUG, "Called with PTR query and unexpected address family");
+ break;
+ default:
+ log_warn(LD_BUG, "Called with unexpectd query type %d", (int)query_type);
+ break;
+ }
+
+ if (req) {
+ return 0;
+ } else {
+ tor_free(addr);
+ return -1;
+ }
}
/** For eventdns: start resolving as necessary to find the target for
* <b>exitconn</b>. Returns -1 on error, -2 on transient error,
* 0 on "resolve launched." */
static int
-launch_resolve(edge_connection_t *exitconn)
+launch_resolve(cached_resolve_t *resolve)
{
- char *addr;
- struct evdns_request *req = NULL;
tor_addr_t a;
int r;
- int options = get_options()->ServerDNSSearchDomains ? 0
- : DNS_QUERY_NO_SEARCH;
if (get_options()->DisableNetwork)
return -1;
@@ -1422,40 +1766,45 @@ launch_resolve(edge_connection_t *exitconn)
}
}
- addr = tor_strdup(exitconn->_base.address);
-
r = tor_addr_parse_PTR_name(
- &a, exitconn->_base.address, AF_UNSPEC, 0);
+ &a, resolve->address, AF_UNSPEC, 0);
tor_assert(the_evdns_base);
if (r == 0) {
log_info(LD_EXIT, "Launching eventdns request for %s",
- escaped_safe_str(exitconn->_base.address));
- req = evdns_base_resolve_ipv4(the_evdns_base,
- exitconn->_base.address, options,
- evdns_callback, addr);
+ escaped_safe_str(resolve->address));
+ resolve->res_status_ipv4 = RES_STATUS_INFLIGHT;
+ if (get_options()->IPv6Exit)
+ resolve->res_status_ipv6 = RES_STATUS_INFLIGHT;
+
+ if (launch_one_resolve(resolve->address, DNS_IPv4_A, NULL) < 0) {
+ resolve->res_status_ipv4 = 0;
+ r = -1;
+ }
+
+ if (r==0 && get_options()->IPv6Exit) {
+ /* We ask for an IPv6 address for *everything*. */
+ if (launch_one_resolve(resolve->address, DNS_IPv6_AAAA, NULL) < 0) {
+ resolve->res_status_ipv6 = 0;
+ r = -1;
+ }
+ }
} else if (r == 1) {
+ r = 0;
log_info(LD_EXIT, "Launching eventdns reverse request for %s",
- escaped_safe_str(exitconn->_base.address));
- if (tor_addr_family(&a) == AF_INET)
- req = evdns_base_resolve_reverse(the_evdns_base,
- tor_addr_to_in(&a), DNS_QUERY_NO_SEARCH,
- evdns_callback, addr);
- else
- req = evdns_base_resolve_reverse_ipv6(the_evdns_base,
- tor_addr_to_in6(&a), DNS_QUERY_NO_SEARCH,
- evdns_callback, addr);
+ escaped_safe_str(resolve->address));
+ resolve->res_status_hostname = RES_STATUS_INFLIGHT;
+ if (launch_one_resolve(resolve->address, DNS_PTR, &a) < 0) {
+ resolve->res_status_hostname = 0;
+ r = -1;
+ }
} else if (r == -1) {
log_warn(LD_BUG, "Somehow a malformed in-addr.arpa address reached here.");
}
- r = 0;
- if (!req) {
+ if (r < 0) {
log_fn(LOG_PROTOCOL_WARN, LD_EXIT, "eventdns rejected address %s.",
- escaped_safe_str(addr));
- r = -1;
- tor_free(addr); /* There is no evdns request in progress; stop
- * addr from getting leaked. */
+ escaped_safe_str(resolve->address));
}
return r;
}
@@ -1488,8 +1837,8 @@ static int dns_wildcarded_test_address_notice_given = 0;
/** True iff all addresses seem to be getting wildcarded. */
static int dns_is_completely_invalid = 0;
-/** Called when we see <b>id</b> (a dotted quad) in response to a request for
- * a hopefully bogus address. */
+/** Called when we see <b>id</b> (a dotted quad or IPv6 address) in response
+ * to a request for a hopefully bogus address. */
static void
wildcard_increment_answer(const char *id)
{
@@ -1506,8 +1855,8 @@ wildcard_increment_answer(const char *id)
if (*ip > 5 && n_wildcard_requests > 10) {
if (!dns_wildcard_list) dns_wildcard_list = smartlist_new();
- if (!smartlist_string_isin(dns_wildcard_list, id)) {
- log(dns_wildcard_notice_given ? LOG_INFO : LOG_NOTICE, LD_EXIT,
+ if (!smartlist_contains_string(dns_wildcard_list, id)) {
+ tor_log(dns_wildcard_notice_given ? LOG_INFO : LOG_NOTICE, LD_EXIT,
"Your DNS provider has given \"%s\" as an answer for %d different "
"invalid addresses. Apparently they are hijacking DNS failures. "
"I'll try to correct for this by treating future occurrences of "
@@ -1529,7 +1878,8 @@ add_wildcarded_test_address(const char *address)
if (!dns_wildcarded_test_address_list)
dns_wildcarded_test_address_list = smartlist_new();
- if (smartlist_string_isin_case(dns_wildcarded_test_address_list, address))
+ if (smartlist_contains_string_case(dns_wildcarded_test_address_list,
+ address))
return;
n_test_addrs = get_options()->ServerDNSTestAddresses ?
@@ -1538,7 +1888,7 @@ add_wildcarded_test_address(const char *address)
smartlist_add(dns_wildcarded_test_address_list, tor_strdup(address));
n = smartlist_len(dns_wildcarded_test_address_list);
if (n > n_test_addrs/2) {
- log(dns_wildcarded_test_address_notice_given ? LOG_INFO : LOG_NOTICE,
+ tor_log(dns_wildcarded_test_address_notice_given ? LOG_INFO : LOG_NOTICE,
LD_EXIT, "Your DNS provider tried to redirect \"%s\" to a junk "
"address. It has done this with %d test addresses so far. I'm "
"going to stop being an exit node for now, since our DNS seems so "
@@ -1561,18 +1911,28 @@ evdns_wildcard_check_callback(int result, char type, int count, int ttl,
{
(void)ttl;
++n_wildcard_requests;
- if (result == DNS_ERR_NONE && type == DNS_IPv4_A && count) {
- uint32_t *addrs = addresses;
- int i;
+ if (result == DNS_ERR_NONE && count) {
char *string_address = arg;
- for (i = 0; i < count; ++i) {
- char answer_buf[INET_NTOA_BUF_LEN+1];
- struct in_addr in;
- in.s_addr = addrs[i];
- tor_inet_ntoa(&in, answer_buf, sizeof(answer_buf));
- wildcard_increment_answer(answer_buf);
+ int i;
+ if (type == DNS_IPv4_A) {
+ const uint32_t *addrs = addresses;
+ for (i = 0; i < count; ++i) {
+ char answer_buf[INET_NTOA_BUF_LEN+1];
+ struct in_addr in;
+ in.s_addr = addrs[i];
+ tor_inet_ntoa(&in, answer_buf, sizeof(answer_buf));
+ wildcard_increment_answer(answer_buf);
+ }
+ } else if (type == DNS_IPv6_AAAA) {
+ const struct in6_addr *addrs = addresses;
+ for (i = 0; i < count; ++i) {
+ char answer_buf[TOR_ADDR_BUF_LEN+1];
+ tor_inet_ntop(AF_INET6, &addrs[i], answer_buf, sizeof(answer_buf));
+ wildcard_increment_answer(answer_buf);
+ }
}
- log(dns_wildcard_one_notice_given ? LOG_INFO : LOG_NOTICE, LD_EXIT,
+
+ tor_log(dns_wildcard_one_notice_given ? LOG_INFO : LOG_NOTICE, LD_EXIT,
"Your DNS provider gave an answer for \"%s\", which "
"is not supposed to exist. Apparently they are hijacking "
"DNS failures. Trying to correct for this. We've noticed %d "
@@ -1588,7 +1948,8 @@ evdns_wildcard_check_callback(int result, char type, int count, int ttl,
* <b>min_len</b> and <b>max_len</b> random (plausible) characters followed by
* <b>suffix</b> */
static void
-launch_wildcard_check(int min_len, int max_len, const char *suffix)
+launch_wildcard_check(int min_len, int max_len, int is_ipv6,
+ const char *suffix)
{
char *addr;
struct evdns_request *req;
@@ -1598,7 +1959,15 @@ launch_wildcard_check(int min_len, int max_len, const char *suffix)
"domains with request for bogus hostname \"%s\"", addr);
tor_assert(the_evdns_base);
- req = evdns_base_resolve_ipv4(
+ if (is_ipv6)
+ req = evdns_base_resolve_ipv6(
+ the_evdns_base,
+ /* This "addr" tells us which address to resolve */
+ addr,
+ DNS_QUERY_NO_SEARCH, evdns_wildcard_check_callback,
+ /* This "addr" is an argument to the callback*/ addr);
+ else
+ req = evdns_base_resolve_ipv4(
the_evdns_base,
/* This "addr" tells us which address to resolve */
addr,
@@ -1613,10 +1982,9 @@ launch_wildcard_check(int min_len, int max_len, const char *suffix)
/** Launch attempts to resolve a bunch of known-good addresses (configured in
* ServerDNSTestAddresses). [Callback for a libevent timer] */
static void
-launch_test_addresses(int fd, short event, void *args)
+launch_test_addresses(evutil_socket_t fd, short event, void *args)
{
const or_options_t *options = get_options();
- struct evdns_request *req;
(void)fd;
(void)event;
(void)args;
@@ -1629,21 +1997,22 @@ launch_test_addresses(int fd, short event, void *args)
/* This situation is worse than the failure-hijacking situation. When this
* happens, we're no good for DNS requests at all, and we shouldn't really
* be an exit server.*/
- if (!options->ServerDNSTestAddresses)
- return;
- tor_assert(the_evdns_base);
- SMARTLIST_FOREACH_BEGIN(options->ServerDNSTestAddresses,
- const char *, address) {
- char *a = tor_strdup(address);
- req = evdns_base_resolve_ipv4(the_evdns_base,
- address, DNS_QUERY_NO_SEARCH, evdns_callback, a);
+ if (options->ServerDNSTestAddresses) {
- if (!req) {
- log_info(LD_EXIT, "eventdns rejected test address %s",
- escaped_safe_str(address));
- tor_free(a);
- }
- } SMARTLIST_FOREACH_END(address);
+ tor_assert(the_evdns_base);
+ SMARTLIST_FOREACH_BEGIN(options->ServerDNSTestAddresses,
+ const char *, address) {
+ if (launch_one_resolve(address, DNS_IPv4_A, NULL) < 0) {
+ log_info(LD_EXIT, "eventdns rejected test address %s",
+ escaped_safe_str(address));
+ }
+
+ if (launch_one_resolve(address, DNS_IPv6_AAAA, NULL) < 0) {
+ log_info(LD_EXIT, "eventdns rejected test address %s",
+ escaped_safe_str(address));
+ }
+ } SMARTLIST_FOREACH_END(address);
+ }
}
#define N_WILDCARD_CHECKS 2
@@ -1655,27 +2024,29 @@ launch_test_addresses(int fd, short event, void *args)
static void
dns_launch_wildcard_checks(void)
{
- int i;
+ int i, ipv6;
log_info(LD_EXIT, "Launching checks to see whether our nameservers like "
"to hijack DNS failures.");
- for (i = 0; i < N_WILDCARD_CHECKS; ++i) {
- /* RFC2606 reserves these. Sadly, some DNS hijackers, in a silly attempt
- * to 'comply' with rfc2606, refrain from giving A records for these.
- * This is the standards-compliance equivalent of making sure that your
- * crackhouse's elevator inspection certificate is up to date.
- */
- launch_wildcard_check(2, 16, ".invalid");
- launch_wildcard_check(2, 16, ".test");
-
- /* These will break specs if there are ever any number of
- * 8+-character top-level domains. */
- launch_wildcard_check(8, 16, "");
-
- /* Try some random .com/org/net domains. This will work fine so long as
- * not too many resolve to the same place. */
- launch_wildcard_check(8, 16, ".com");
- launch_wildcard_check(8, 16, ".org");
- launch_wildcard_check(8, 16, ".net");
+ for (ipv6 = 0; ipv6 <= 1; ++ipv6) {
+ for (i = 0; i < N_WILDCARD_CHECKS; ++i) {
+ /* RFC2606 reserves these. Sadly, some DNS hijackers, in a silly
+ * attempt to 'comply' with rfc2606, refrain from giving A records for
+ * these. This is the standards-compliance equivalent of making sure
+ * that your crackhouse's elevator inspection certificate is up to date.
+ */
+ launch_wildcard_check(2, 16, ipv6, ".invalid");
+ launch_wildcard_check(2, 16, ipv6, ".test");
+
+ /* These will break specs if there are ever any number of
+ * 8+-character top-level domains. */
+ launch_wildcard_check(8, 16, ipv6, "");
+
+ /* Try some random .com/org/net domains. This will work fine so long as
+ * not too many resolve to the same place. */
+ launch_wildcard_check(8, 16, ipv6, ".com");
+ launch_wildcard_check(8, 16, ipv6, ".org");
+ launch_wildcard_check(8, 16, ipv6, ".net");
+ }
}
}
@@ -1709,15 +2080,24 @@ dns_seems_to_be_broken(void)
return dns_is_completely_invalid;
}
+/** Return true iff we think that IPv6 hostname lookup is broken */
+int
+dns_seems_to_be_broken_for_ipv6(void)
+{
+ return dns_is_broken_for_ipv6;
+}
+
/** Forget what we've previously learned about our DNS servers' correctness. */
void
dns_reset_correctness_checks(void)
{
- strmap_free(dns_wildcard_response_count, _tor_free);
+ strmap_free(dns_wildcard_response_count, tor_free_);
dns_wildcard_response_count = NULL;
n_wildcard_requests = 0;
+ n_ipv6_requests_made = n_ipv6_timeouts = 0;
+
if (dns_wildcard_list) {
SMARTLIST_FOREACH(dns_wildcard_list, char *, cp, tor_free(cp));
smartlist_clear(dns_wildcard_list);
@@ -1728,7 +2108,8 @@ dns_reset_correctness_checks(void)
smartlist_clear(dns_wildcarded_test_address_list);
}
dns_wildcard_one_notice_given = dns_wildcard_notice_given =
- dns_wildcarded_test_address_notice_given = dns_is_completely_invalid = 0;
+ dns_wildcarded_test_address_notice_given = dns_is_completely_invalid =
+ dns_is_broken_for_ipv6 = 0;
}
/** Return true iff we have noticed that the dotted-quad <b>ip</b> has been
@@ -1736,7 +2117,7 @@ dns_reset_correctness_checks(void)
static int
answer_is_wildcarded(const char *ip)
{
- return dns_wildcard_list && smartlist_string_isin(dns_wildcard_list, ip);
+ return dns_wildcard_list && smartlist_contains_string(dns_wildcard_list, ip);
}
/** Exit with an assertion if <b>resolve</b> is corrupt. */
@@ -1752,11 +2133,14 @@ assert_resolve_ok(cached_resolve_t *resolve)
}
if (resolve->state == CACHE_STATE_PENDING ||
resolve->state == CACHE_STATE_DONE) {
+#if 0
tor_assert(!resolve->ttl);
if (resolve->is_reverse)
- tor_assert(!resolve->result.hostname);
+ tor_assert(!resolve->hostname);
else
- tor_assert(!resolve->result.a.addr);
+ tor_assert(!resolve->result_ipv4.addr_ipv4);
+#endif
+ /*XXXXX ADD MORE */
}
}
@@ -1779,18 +2163,18 @@ dump_dns_mem_usage(int severity)
/* Print out the count and estimated size of our &cache_root. It undercounts
hostnames in cached reverse resolves.
*/
- log(severity, LD_MM, "Our DNS cache has %d entries.", hash_count);
- log(severity, LD_MM, "Our DNS cache size is approximately %u bytes.",
+ tor_log(severity, LD_MM, "Our DNS cache has %d entries.", hash_count);
+ tor_log(severity, LD_MM, "Our DNS cache size is approximately %u bytes.",
(unsigned)hash_mem);
}
#ifdef DEBUG_DNS_CACHE
/** Exit with an assertion if the DNS cache is corrupt. */
static void
-_assert_cache_ok(void)
+assert_cache_ok_(void)
{
cached_resolve_t **resolve;
- int bad_rep = _cache_map_HT_REP_IS_BAD(&cache_root);
+ int bad_rep = HT_REP_IS_BAD_(cache_map, &cache_root);
if (bad_rep) {
log_err(LD_BUG, "Bad rep type %d on dns cache hash table", bad_rep);
tor_assert(!bad_rep);
@@ -1804,7 +2188,7 @@ _assert_cache_ok(void)
return;
smartlist_pqueue_assert_ok(cached_resolve_pqueue,
- _compare_cached_resolves_by_expiry,
+ compare_cached_resolves_by_expiry_,
STRUCT_OFFSET(cached_resolve_t, minheap_idx));
SMARTLIST_FOREACH(cached_resolve_pqueue, cached_resolve_t *, res,
diff --git a/src/or/dns.h b/src/or/dns.h
index 8c8b476ac..022cd4ac6 100644
--- a/src/or/dns.h
+++ b/src/or/dns.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,8 +9,8 @@
* \brief Header file for dns.c.
**/
-#ifndef _TOR_DNS_H
-#define _TOR_DNS_H
+#ifndef TOR_DNS_H
+#define TOR_DNS_H
int dns_init(void);
int has_dns_init_failed(void);
@@ -24,6 +24,7 @@ void dns_cancel_pending_resolve(const char *question);
int dns_resolve(edge_connection_t *exitconn);
void dns_launch_correctness_checks(void);
int dns_seems_to_be_broken(void);
+int dns_seems_to_be_broken_for_ipv6(void);
void dns_reset_correctness_checks(void);
void dump_dns_mem_usage(int severity);
diff --git a/src/or/dnsserv.c b/src/or/dnsserv.c
index 69adcef9e..ecd45be77 100644
--- a/src/or/dnsserv.c
+++ b/src/or/dnsserv.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2007-2012, The Tor Project, Inc. */
+/* Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -35,7 +35,7 @@ evdns_server_callback(struct evdns_server_request *req, void *data_)
entry_connection_t *entry_conn;
edge_connection_t *conn;
int i = 0;
- struct evdns_server_question *q = NULL;
+ struct evdns_server_question *q = NULL, *supported_q = NULL;
struct sockaddr_storage addr;
struct sockaddr *sa;
int addrlen;
@@ -87,30 +87,37 @@ evdns_server_callback(struct evdns_server_request *req, void *data_)
for (i = 0; i < req->nquestions; ++i) {
if (req->questions[i]->dns_question_class != EVDNS_CLASS_INET)
continue;
+ if (! q)
+ q = req->questions[i];
switch (req->questions[i]->type) {
case EVDNS_TYPE_A:
+ case EVDNS_TYPE_AAAA:
case EVDNS_TYPE_PTR:
- q = req->questions[i];
+ /* We always pick the first one of these questions, if there is
+ one. */
+ if (! supported_q)
+ supported_q = q;
+ break;
default:
break;
}
}
+ if (supported_q)
+ q = supported_q;
if (!q) {
log_info(LD_APP, "None of the questions we got were ones we're willing "
"to support. Sending NOTIMPL.");
evdns_server_request_respond(req, DNS_ERR_NOTIMPL);
return;
}
- if (q->type != EVDNS_TYPE_A) {
- tor_assert(q->type == EVDNS_TYPE_PTR);
- }
/* Make sure the name isn't too long: This should be impossible, I think. */
if (err == DNS_ERR_NONE && strlen(q->name) > MAX_SOCKS_ADDR_LEN-1)
err = DNS_ERR_FORMAT;
- if (err != DNS_ERR_NONE) {
- /* We got an error? Then send back an answer immediately; we're done. */
+ if (err != DNS_ERR_NONE || !supported_q) {
+ /* We got an error? There's no question we're willing to answer? Then
+ * send back an answer immediately; we're done. */
evdns_server_request_respond(req, err);
return;
}
@@ -125,15 +132,28 @@ evdns_server_callback(struct evdns_server_request *req, void *data_)
TO_CONN(conn)->port = port;
TO_CONN(conn)->address = tor_dup_addr(&tor_addr);
- if (q->type == EVDNS_TYPE_A)
+ if (q->type == EVDNS_TYPE_A || q->type == EVDNS_TYPE_AAAA ||
+ q->type == EVDNS_QTYPE_ALL) {
entry_conn->socks_request->command = SOCKS_COMMAND_RESOLVE;
- else
+ } else {
+ tor_assert(q->type == EVDNS_TYPE_PTR);
entry_conn->socks_request->command = SOCKS_COMMAND_RESOLVE_PTR;
+ }
+
+ if (q->type == EVDNS_TYPE_A || q->type == EVDNS_QTYPE_ALL) {
+ entry_conn->ipv4_traffic_ok = 1;
+ entry_conn->ipv6_traffic_ok = 0;
+ entry_conn->prefer_ipv6_traffic = 0;
+ } else if (q->type == EVDNS_TYPE_AAAA) {
+ entry_conn->ipv4_traffic_ok = 0;
+ entry_conn->ipv6_traffic_ok = 1;
+ entry_conn->prefer_ipv6_traffic = 1;
+ }
strlcpy(entry_conn->socks_request->address, q->name,
sizeof(entry_conn->socks_request->address));
- entry_conn->socks_request->listener_type = listener->_base.type;
+ entry_conn->socks_request->listener_type = listener->base_.type;
entry_conn->dns_server_request = req;
entry_conn->isolation_flags = listener->isolation_flags;
entry_conn->session_group = listener->session_group;
@@ -146,7 +166,7 @@ evdns_server_callback(struct evdns_server_request *req, void *data_)
return;
}
- control_event_stream_status(entry_conn, STREAM_EVENT_NEW, 0);
+ control_event_stream_status(entry_conn, STREAM_EVENT_NEW_RESOLVE, 0);
/* Now, unless a controller asked us to leave streams unattached,
* throw the connection over to get rewritten (which will
@@ -169,7 +189,8 @@ evdns_server_callback(struct evdns_server_request *req, void *data_)
* response; -1 if we couldn't launch the request.
*/
int
-dnsserv_launch_request(const char *name, int reverse)
+dnsserv_launch_request(const char *name, int reverse,
+ control_connection_t *control_conn)
{
entry_connection_t *entry_conn;
edge_connection_t *conn;
@@ -178,7 +199,26 @@ dnsserv_launch_request(const char *name, int reverse)
/* Make a new dummy AP connection, and attach the request to it. */
entry_conn = entry_connection_new(CONN_TYPE_AP, AF_INET);
conn = ENTRY_TO_EDGE_CONN(entry_conn);
- conn->_base.state = AP_CONN_STATE_RESOLVE_WAIT;
+ conn->base_.state = AP_CONN_STATE_RESOLVE_WAIT;
+
+ tor_addr_copy(&TO_CONN(conn)->addr, &control_conn->base_.addr);
+#ifdef AF_UNIX
+ /*
+ * The control connection can be AF_UNIX and if so tor_dup_addr will
+ * unhelpfully say "<unknown address type>"; say "(Tor_internal)"
+ * instead.
+ */
+ if (control_conn->base_.socket_family == AF_UNIX) {
+ TO_CONN(conn)->port = 0;
+ TO_CONN(conn)->address = tor_strdup("(Tor_internal)");
+ } else {
+ TO_CONN(conn)->port = control_conn->base_.port;
+ TO_CONN(conn)->address = tor_dup_addr(&control_conn->base_.addr);
+ }
+#else
+ TO_CONN(conn)->port = control_conn->base_.port;
+ TO_CONN(conn)->address = tor_dup_addr(&control_conn->base_.addr);
+#endif
if (reverse)
entry_conn->socks_request->command = SOCKS_COMMAND_RESOLVE_PTR;
@@ -202,6 +242,8 @@ dnsserv_launch_request(const char *name, int reverse)
return -1;
}
+ control_event_stream_status(entry_conn, STREAM_EVENT_NEW_RESOLVE, 0);
+
/* Now, unless a controller asked us to leave streams unattached,
* throw the connection over to get rewritten (which will
* answer it immediately if it's in the cache, or completely bogus, or
@@ -289,8 +331,9 @@ dnsserv_resolved(entry_connection_t *conn,
* or more of the questions in the request); then, call
* evdns_server_request_respond. */
if (answer_type == RESOLVED_TYPE_IPV6) {
- log_info(LD_APP, "Got an IPv6 answer; that's not implemented.");
- err = DNS_ERR_NOTIMPL;
+ evdns_server_request_add_aaaa_reply(req,
+ name,
+ 1, answer, ttl);
} else if (answer_type == RESOLVED_TYPE_IPV4 && answer_len == 4 &&
conn->socks_request->command == SOCKS_COMMAND_RESOLVE) {
evdns_server_request_add_a_reply(req,
diff --git a/src/or/dnsserv.h b/src/or/dnsserv.h
index 3aaa038d2..687a77e59 100644
--- a/src/or/dnsserv.h
+++ b/src/or/dnsserv.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,8 +9,8 @@
* \brief Header file for dnsserv.c.
**/
-#ifndef _TOR_DNSSERV_H
-#define _TOR_DNSSERV_H
+#ifndef TOR_DNSSERV_H
+#define TOR_DNSSERV_H
void dnsserv_configure_listener(connection_t *conn);
void dnsserv_close_listener(connection_t *conn);
@@ -20,7 +20,8 @@ void dnsserv_resolved(entry_connection_t *conn,
const char *answer,
int ttl);
void dnsserv_reject_request(entry_connection_t *conn);
-int dnsserv_launch_request(const char *name, int is_reverse);
+int dnsserv_launch_request(const char *name, int is_reverse,
+ control_connection_t *control_conn);
#endif
diff --git a/src/or/entrynodes.c b/src/or/entrynodes.c
new file mode 100644
index 000000000..957217ac6
--- /dev/null
+++ b/src/or/entrynodes.c
@@ -0,0 +1,2327 @@
+/* Copyright (c) 2001 Matej Pfajfar.
+ * Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file entrynodes.c
+ * \brief Code to manage our fixed first nodes for various functions.
+ *
+ * Entry nodes can be guards (for general use) or bridges (for censorship
+ * circumvention).
+ **/
+
+#include "or.h"
+#include "circpathbias.h"
+#include "circuitbuild.h"
+#include "circuitstats.h"
+#include "config.h"
+#include "confparse.h"
+#include "connection.h"
+#include "connection_or.h"
+#include "control.h"
+#include "directory.h"
+#include "entrynodes.h"
+#include "main.h"
+#include "microdesc.h"
+#include "networkstatus.h"
+#include "nodelist.h"
+#include "policies.h"
+#include "router.h"
+#include "routerlist.h"
+#include "routerparse.h"
+#include "routerset.h"
+#include "transports.h"
+#include "statefile.h"
+
+/** Information about a configured bridge. Currently this just matches the
+ * ones in the torrc file, but one day we may be able to learn about new
+ * bridges on our own, and remember them in the state file. */
+typedef struct {
+ /** Address of the bridge. */
+ tor_addr_t addr;
+ /** TLS port for the bridge. */
+ uint16_t port;
+ /** Boolean: We are re-parsing our bridge list, and we are going to remove
+ * this one if we don't find it in the list of configured bridges. */
+ unsigned marked_for_removal : 1;
+ /** Expected identity digest, or all zero bytes if we don't know what the
+ * digest should be. */
+ char identity[DIGEST_LEN];
+
+ /** Name of pluggable transport protocol taken from its config line. */
+ char *transport_name;
+
+ /** When should we next try to fetch a descriptor for this bridge? */
+ download_status_t fetch_status;
+
+ /** A smartlist of k=v values to be passed to the SOCKS proxy, if
+ transports are used for this bridge. */
+ smartlist_t *socks_args;
+} bridge_info_t;
+
+/** A list of our chosen entry guards. */
+static smartlist_t *entry_guards = NULL;
+/** A value of 1 means that the entry_guards list has changed
+ * and those changes need to be flushed to disk. */
+static int entry_guards_dirty = 0;
+
+static void bridge_free(bridge_info_t *bridge);
+static const node_t *choose_random_entry_impl(cpath_build_state_t *state,
+ int for_directory,
+ dirinfo_type_t dirtype,
+ int *n_options_out);
+static int num_bridges_usable(void);
+
+/** Return the list of entry guards, creating it if necessary. */
+const smartlist_t *
+get_entry_guards(void)
+{
+ if (! entry_guards)
+ entry_guards = smartlist_new();
+ return entry_guards;
+}
+
+/** Check whether the entry guard <b>e</b> is usable, given the directory
+ * authorities' opinion about the router (stored in <b>ri</b>) and the user's
+ * configuration (in <b>options</b>). Set <b>e</b>-&gt;bad_since
+ * accordingly. Return true iff the entry guard's status changes.
+ *
+ * If it's not usable, set *<b>reason</b> to a static string explaining why.
+ */
+static int
+entry_guard_set_status(entry_guard_t *e, const node_t *node,
+ time_t now, const or_options_t *options,
+ const char **reason)
+{
+ char buf[HEX_DIGEST_LEN+1];
+ int changed = 0;
+
+ *reason = NULL;
+
+ /* Do we want to mark this guard as bad? */
+ if (!node)
+ *reason = "unlisted";
+ else if (!node->is_running)
+ *reason = "down";
+ else if (options->UseBridges && (!node->ri ||
+ node->ri->purpose != ROUTER_PURPOSE_BRIDGE))
+ *reason = "not a bridge";
+ else if (options->UseBridges && !node_is_a_configured_bridge(node))
+ *reason = "not a configured bridge";
+ else if (!options->UseBridges && !node->is_possible_guard &&
+ !routerset_contains_node(options->EntryNodes,node))
+ *reason = "not recommended as a guard";
+ else if (routerset_contains_node(options->ExcludeNodes, node))
+ *reason = "excluded";
+ else if (e->path_bias_disabled)
+ *reason = "path-biased";
+
+ if (*reason && ! e->bad_since) {
+ /* Router is newly bad. */
+ base16_encode(buf, sizeof(buf), e->identity, DIGEST_LEN);
+ log_info(LD_CIRC, "Entry guard %s (%s) is %s: marking as unusable.",
+ e->nickname, buf, *reason);
+
+ e->bad_since = now;
+ control_event_guard(e->nickname, e->identity, "BAD");
+ changed = 1;
+ } else if (!*reason && e->bad_since) {
+ /* There's nothing wrong with the router any more. */
+ base16_encode(buf, sizeof(buf), e->identity, DIGEST_LEN);
+ log_info(LD_CIRC, "Entry guard %s (%s) is no longer unusable: "
+ "marking as ok.", e->nickname, buf);
+
+ e->bad_since = 0;
+ control_event_guard(e->nickname, e->identity, "GOOD");
+ changed = 1;
+ }
+
+ if (node) {
+ int is_dir = node_is_dir(node) && node->rs &&
+ node->rs->version_supports_microdesc_cache;
+ if (options->UseBridges && node_is_a_configured_bridge(node))
+ is_dir = 1;
+ if (e->is_dir_cache != is_dir) {
+ e->is_dir_cache = is_dir;
+ changed = 1;
+ }
+ }
+
+ return changed;
+}
+
+/** Return true iff enough time has passed since we last tried to connect
+ * to the unreachable guard <b>e</b> that we're willing to try again. */
+static int
+entry_is_time_to_retry(entry_guard_t *e, time_t now)
+{
+ long diff;
+ if (e->last_attempted < e->unreachable_since)
+ return 1;
+ diff = now - e->unreachable_since;
+ if (diff < 6*60*60)
+ return now > (e->last_attempted + 60*60);
+ else if (diff < 3*24*60*60)
+ return now > (e->last_attempted + 4*60*60);
+ else if (diff < 7*24*60*60)
+ return now > (e->last_attempted + 18*60*60);
+ else
+ return now > (e->last_attempted + 36*60*60);
+}
+
+/** Return the node corresponding to <b>e</b>, if <b>e</b> is
+ * working well enough that we are willing to use it as an entry
+ * right now. (Else return NULL.) In particular, it must be
+ * - Listed as either up or never yet contacted;
+ * - Present in the routerlist;
+ * - Listed as 'stable' or 'fast' by the current dirserver consensus,
+ * if demanded by <b>need_uptime</b> or <b>need_capacity</b>
+ * (unless it's a configured EntryNode);
+ * - Allowed by our current ReachableORAddresses config option; and
+ * - Currently thought to be reachable by us (unless <b>assume_reachable</b>
+ * is true).
+ *
+ * If the answer is no, set *<b>msg</b> to an explanation of why.
+ *
+ * If need_descriptor is true, only return the node if we currently have
+ * a descriptor (routerinfo or microdesc) for it.
+ */
+static INLINE const node_t *
+entry_is_live(entry_guard_t *e, int need_uptime, int need_capacity,
+ int assume_reachable, int need_descriptor, const char **msg)
+{
+ const node_t *node;
+ const or_options_t *options = get_options();
+ tor_assert(msg);
+
+ if (e->path_bias_disabled) {
+ *msg = "path-biased";
+ return NULL;
+ }
+ if (e->bad_since) {
+ *msg = "bad";
+ return NULL;
+ }
+ /* no good if it's unreachable, unless assume_unreachable or can_retry. */
+ if (!assume_reachable && !e->can_retry &&
+ e->unreachable_since && !entry_is_time_to_retry(e, time(NULL))) {
+ *msg = "unreachable";
+ return NULL;
+ }
+ node = node_get_by_id(e->identity);
+ if (!node) {
+ *msg = "no node info";
+ return NULL;
+ }
+ if (need_descriptor && !node_has_descriptor(node)) {
+ *msg = "no descriptor";
+ return NULL;
+ }
+ if (get_options()->UseBridges) {
+ if (node_get_purpose(node) != ROUTER_PURPOSE_BRIDGE) {
+ *msg = "not a bridge";
+ return NULL;
+ }
+ if (!node_is_a_configured_bridge(node)) {
+ *msg = "not a configured bridge";
+ return NULL;
+ }
+ } else { /* !get_options()->UseBridges */
+ if (node_get_purpose(node) != ROUTER_PURPOSE_GENERAL) {
+ *msg = "not general-purpose";
+ return NULL;
+ }
+ }
+ if (routerset_contains_node(options->EntryNodes, node)) {
+ /* they asked for it, they get it */
+ need_uptime = need_capacity = 0;
+ }
+ if (node_is_unreliable(node, need_uptime, need_capacity, 0)) {
+ *msg = "not fast/stable";
+ return NULL;
+ }
+ if (!fascist_firewall_allows_node(node)) {
+ *msg = "unreachable by config";
+ return NULL;
+ }
+ return node;
+}
+
+/** Return the number of entry guards that we think are usable. */
+int
+num_live_entry_guards(int for_directory)
+{
+ int n = 0;
+ const char *msg;
+ if (! entry_guards)
+ return 0;
+ SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, entry) {
+ if (for_directory && !entry->is_dir_cache)
+ continue;
+ if (entry_is_live(entry, 0, 1, 0, !for_directory, &msg))
+ ++n;
+ } SMARTLIST_FOREACH_END(entry);
+ return n;
+}
+
+/** If <b>digest</b> matches the identity of any node in the
+ * entry_guards list, return that node. Else return NULL. */
+entry_guard_t *
+entry_guard_get_by_id_digest(const char *digest)
+{
+ SMARTLIST_FOREACH(entry_guards, entry_guard_t *, entry,
+ if (tor_memeq(digest, entry->identity, DIGEST_LEN))
+ return entry;
+ );
+ return NULL;
+}
+
+/** Dump a description of our list of entry guards to the log at level
+ * <b>severity</b>. */
+static void
+log_entry_guards(int severity)
+{
+ smartlist_t *elements = smartlist_new();
+ char *s;
+
+ SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, e)
+ {
+ const char *msg = NULL;
+ if (entry_is_live(e, 0, 1, 0, 0, &msg))
+ smartlist_add_asprintf(elements, "%s [%s] (up %s)",
+ e->nickname,
+ hex_str(e->identity, DIGEST_LEN),
+ e->made_contact ? "made-contact" : "never-contacted");
+ else
+ smartlist_add_asprintf(elements, "%s [%s] (%s, %s)",
+ e->nickname,
+ hex_str(e->identity, DIGEST_LEN),
+ msg,
+ e->made_contact ? "made-contact" : "never-contacted");
+ }
+ SMARTLIST_FOREACH_END(e);
+
+ s = smartlist_join_strings(elements, ",", 0, NULL);
+ SMARTLIST_FOREACH(elements, char*, cp, tor_free(cp));
+ smartlist_free(elements);
+ log_fn(severity,LD_CIRC,"%s",s);
+ tor_free(s);
+}
+
+/** Called when one or more guards that we would previously have used for some
+ * purpose are no longer in use because a higher-priority guard has become
+ * usable again. */
+static void
+control_event_guard_deferred(void)
+{
+ /* XXXX We don't actually have a good way to figure out _how many_ entries
+ * are live for some purpose. We need an entry_is_even_slightly_live()
+ * function for this to work right. NumEntryGuards isn't reliable: if we
+ * need guards with weird properties, we can have more than that number
+ * live.
+ **/
+#if 0
+ int n = 0;
+ const char *msg;
+ const or_options_t *options = get_options();
+ if (!entry_guards)
+ return;
+ SMARTLIST_FOREACH(entry_guards, entry_guard_t *, entry,
+ {
+ if (entry_is_live(entry, 0, 1, 0, &msg)) {
+ if (n++ == options->NumEntryGuards) {
+ control_event_guard(entry->nickname, entry->identity, "DEFERRED");
+ return;
+ }
+ }
+ });
+#endif
+}
+
+/** Largest amount that we'll backdate chosen_on_date */
+#define CHOSEN_ON_DATE_SLOP (30*86400)
+
+/** Add a new (preferably stable and fast) router to our
+ * entry_guards list. Return a pointer to the router if we succeed,
+ * or NULL if we can't find any more suitable entries.
+ *
+ * If <b>chosen</b> is defined, use that one, and if it's not
+ * already in our entry_guards list, put it at the *beginning*.
+ * Else, put the one we pick at the end of the list. */
+static const node_t *
+add_an_entry_guard(const node_t *chosen, int reset_status, int prepend,
+ int for_discovery, int for_directory)
+{
+ const node_t *node;
+ entry_guard_t *entry;
+
+ if (chosen) {
+ node = chosen;
+ entry = entry_guard_get_by_id_digest(node->identity);
+ if (entry) {
+ if (reset_status) {
+ entry->bad_since = 0;
+ entry->can_retry = 1;
+ }
+ entry->is_dir_cache = node->rs &&
+ node->rs->version_supports_microdesc_cache;
+ if (get_options()->UseBridges && node_is_a_configured_bridge(node))
+ entry->is_dir_cache = 1;
+ return NULL;
+ }
+ } else if (!for_directory) {
+ node = choose_good_entry_server(CIRCUIT_PURPOSE_C_GENERAL, NULL);
+ if (!node)
+ return NULL;
+ } else {
+ const routerstatus_t *rs;
+ rs = router_pick_directory_server(MICRODESC_DIRINFO|V3_DIRINFO,
+ PDS_FOR_GUARD);
+ if (!rs)
+ return NULL;
+ node = node_get_by_id(rs->identity_digest);
+ if (!node)
+ return NULL;
+ }
+ if (node->using_as_guard)
+ return NULL;
+ if (entry_guard_get_by_id_digest(node->identity) != NULL) {
+ log_info(LD_CIRC, "I was about to add a duplicate entry guard.");
+ /* This can happen if we choose a guard, then the node goes away, then
+ * comes back. */
+ ((node_t*) node)->using_as_guard = 1;
+ return NULL;
+ }
+ entry = tor_malloc_zero(sizeof(entry_guard_t));
+ log_info(LD_CIRC, "Chose %s as new entry guard.",
+ node_describe(node));
+ strlcpy(entry->nickname, node_get_nickname(node), sizeof(entry->nickname));
+ memcpy(entry->identity, node->identity, DIGEST_LEN);
+ entry->is_dir_cache = node_is_dir(node) && node->rs &&
+ node->rs->version_supports_microdesc_cache;
+ if (get_options()->UseBridges && node_is_a_configured_bridge(node))
+ entry->is_dir_cache = 1;
+
+ /* Choose expiry time smudged over the past month. The goal here
+ * is to a) spread out when Tor clients rotate their guards, so they
+ * don't all select them on the same day, and b) avoid leaving a
+ * precise timestamp in the state file about when we first picked
+ * this guard. For details, see the Jan 2010 or-dev thread. */
+ entry->chosen_on_date = time(NULL) - crypto_rand_int(3600*24*30);
+ entry->chosen_by_version = tor_strdup(VERSION);
+
+ /* Are we picking this guard because all of our current guards are
+ * down so we need another one (for_discovery is 1), or because we
+ * decided we need more variety in our guard list (for_discovery is 0)?
+ *
+ * Currently we hack this behavior into place by setting "made_contact"
+ * for guards of the latter variety, so we'll be willing to use any of
+ * them right off the bat.
+ */
+ if (!for_discovery)
+ entry->made_contact = 1;
+
+ ((node_t*)node)->using_as_guard = 1;
+ if (prepend)
+ smartlist_insert(entry_guards, 0, entry);
+ else
+ smartlist_add(entry_guards, entry);
+ control_event_guard(entry->nickname, entry->identity, "NEW");
+ control_event_guard_deferred();
+ log_entry_guards(LOG_INFO);
+ return node;
+}
+
+/** Choose how many entry guards or directory guards we'll use. If
+ * <b>for_directory</b> is true, we return how many directory guards to
+ * use; else we return how many entry guards to use. */
+static int
+decide_num_guards(const or_options_t *options, int for_directory)
+{
+ if (for_directory && options->NumDirectoryGuards != 0)
+ return options->NumDirectoryGuards;
+ return options->NumEntryGuards;
+}
+
+/** If the use of entry guards is configured, choose more entry guards
+ * until we have enough in the list. */
+static void
+pick_entry_guards(const or_options_t *options, int for_directory)
+{
+ int changed = 0;
+ const int num_needed = decide_num_guards(options, for_directory);
+
+ tor_assert(entry_guards);
+
+ while (num_live_entry_guards(for_directory) < num_needed) {
+ if (!add_an_entry_guard(NULL, 0, 0, 0, for_directory))
+ break;
+ changed = 1;
+ }
+ if (changed)
+ entry_guards_changed();
+}
+
+/** How long (in seconds) do we allow an entry guard to be nonfunctional,
+ * unlisted, excluded, or otherwise nonusable before we give up on it? */
+#define ENTRY_GUARD_REMOVE_AFTER (30*24*60*60)
+
+/** Release all storage held by <b>e</b>. */
+static void
+entry_guard_free(entry_guard_t *e)
+{
+ if (!e)
+ return;
+ tor_free(e->chosen_by_version);
+ tor_free(e);
+}
+
+/**
+ * Return the minimum lifetime of working entry guard, in seconds,
+ * as given in the consensus networkstatus. (Plus CHOSEN_ON_DATE_SLOP,
+ * so that we can do the chosen_on_date randomization while achieving the
+ * desired minimum lifetime.)
+ */
+static int32_t
+guards_get_lifetime(void)
+{
+ const or_options_t *options = get_options();
+#define DFLT_GUARD_LIFETIME (86400 * 60) /* Two months. */
+#define MIN_GUARD_LIFETIME (86400 * 30) /* One months. */
+#define MAX_GUARD_LIFETIME (86400 * 1826) /* Five years. */
+
+ if (options->GuardLifetime >= 1) {
+ return CLAMP(MIN_GUARD_LIFETIME,
+ options->GuardLifetime,
+ MAX_GUARD_LIFETIME) + CHOSEN_ON_DATE_SLOP;
+ }
+
+ return networkstatus_get_param(NULL, "GuardLifetime",
+ DFLT_GUARD_LIFETIME,
+ MIN_GUARD_LIFETIME,
+ MAX_GUARD_LIFETIME) + CHOSEN_ON_DATE_SLOP;
+}
+
+/** Remove any entry guard which was selected by an unknown version of Tor,
+ * or which was selected by a version of Tor that's known to select
+ * entry guards badly, or which was selected more 2 months ago. */
+/* XXXX The "obsolete guards" and "chosen long ago guards" things should
+ * probably be different functions. */
+static int
+remove_obsolete_entry_guards(time_t now)
+{
+ int changed = 0, i;
+ int32_t guard_lifetime = guards_get_lifetime();
+
+ for (i = 0; i < smartlist_len(entry_guards); ++i) {
+ entry_guard_t *entry = smartlist_get(entry_guards, i);
+ const char *ver = entry->chosen_by_version;
+ const char *msg = NULL;
+ tor_version_t v;
+ int version_is_bad = 0, date_is_bad = 0;
+ if (!ver) {
+ msg = "does not say what version of Tor it was selected by";
+ version_is_bad = 1;
+ } else if (tor_version_parse(ver, &v)) {
+ msg = "does not seem to be from any recognized version of Tor";
+ version_is_bad = 1;
+ } else {
+ char *tor_ver = NULL;
+ tor_asprintf(&tor_ver, "Tor %s", ver);
+ if ((tor_version_as_new_as(tor_ver, "0.1.0.10-alpha") &&
+ !tor_version_as_new_as(tor_ver, "0.1.2.16-dev")) ||
+ (tor_version_as_new_as(tor_ver, "0.2.0.0-alpha") &&
+ !tor_version_as_new_as(tor_ver, "0.2.0.6-alpha")) ||
+ /* above are bug 440; below are bug 1217 */
+ (tor_version_as_new_as(tor_ver, "0.2.1.3-alpha") &&
+ !tor_version_as_new_as(tor_ver, "0.2.1.23")) ||
+ (tor_version_as_new_as(tor_ver, "0.2.2.0-alpha") &&
+ !tor_version_as_new_as(tor_ver, "0.2.2.7-alpha"))) {
+ msg = "was selected without regard for guard bandwidth";
+ version_is_bad = 1;
+ }
+ tor_free(tor_ver);
+ }
+ if (!version_is_bad && entry->chosen_on_date + guard_lifetime < now) {
+ /* It's been too long since the date listed in our state file. */
+ msg = "was selected several months ago";
+ date_is_bad = 1;
+ }
+
+ if (version_is_bad || date_is_bad) { /* we need to drop it */
+ char dbuf[HEX_DIGEST_LEN+1];
+ tor_assert(msg);
+ base16_encode(dbuf, sizeof(dbuf), entry->identity, DIGEST_LEN);
+ log_fn(version_is_bad ? LOG_NOTICE : LOG_INFO, LD_CIRC,
+ "Entry guard '%s' (%s) %s. (Version=%s.) Replacing it.",
+ entry->nickname, dbuf, msg, ver?escaped(ver):"none");
+ control_event_guard(entry->nickname, entry->identity, "DROPPED");
+ entry_guard_free(entry);
+ smartlist_del_keeporder(entry_guards, i--);
+ log_entry_guards(LOG_INFO);
+ changed = 1;
+ }
+ }
+
+ return changed ? 1 : 0;
+}
+
+/** Remove all entry guards that have been down or unlisted for so
+ * long that we don't think they'll come up again. Return 1 if we
+ * removed any, or 0 if we did nothing. */
+static int
+remove_dead_entry_guards(time_t now)
+{
+ char dbuf[HEX_DIGEST_LEN+1];
+ char tbuf[ISO_TIME_LEN+1];
+ int i;
+ int changed = 0;
+
+ for (i = 0; i < smartlist_len(entry_guards); ) {
+ entry_guard_t *entry = smartlist_get(entry_guards, i);
+ if (entry->bad_since &&
+ ! entry->path_bias_disabled &&
+ entry->bad_since + ENTRY_GUARD_REMOVE_AFTER < now) {
+
+ base16_encode(dbuf, sizeof(dbuf), entry->identity, DIGEST_LEN);
+ format_local_iso_time(tbuf, entry->bad_since);
+ log_info(LD_CIRC, "Entry guard '%s' (%s) has been down or unlisted "
+ "since %s local time; removing.",
+ entry->nickname, dbuf, tbuf);
+ control_event_guard(entry->nickname, entry->identity, "DROPPED");
+ entry_guard_free(entry);
+ smartlist_del_keeporder(entry_guards, i);
+ log_entry_guards(LOG_INFO);
+ changed = 1;
+ } else
+ ++i;
+ }
+ return changed ? 1 : 0;
+}
+
+/** Remove all currently listed entry guards. So new ones will be chosen. */
+void
+remove_all_entry_guards(void)
+{
+ char dbuf[HEX_DIGEST_LEN+1];
+
+ while (smartlist_len(entry_guards)) {
+ entry_guard_t *entry = smartlist_get(entry_guards, 0);
+ base16_encode(dbuf, sizeof(dbuf), entry->identity, DIGEST_LEN);
+ log_info(LD_CIRC, "Entry guard '%s' (%s) has been dropped.",
+ entry->nickname, dbuf);
+ control_event_guard(entry->nickname, entry->identity, "DROPPED");
+ entry_guard_free(entry);
+ smartlist_del(entry_guards, 0);
+ }
+ log_entry_guards(LOG_INFO);
+ entry_guards_changed();
+}
+
+/** A new directory or router-status has arrived; update the down/listed
+ * status of the entry guards.
+ *
+ * An entry is 'down' if the directory lists it as nonrunning.
+ * An entry is 'unlisted' if the directory doesn't include it.
+ *
+ * Don't call this on startup; only on a fresh download. Otherwise we'll
+ * think that things are unlisted.
+ */
+void
+entry_guards_compute_status(const or_options_t *options, time_t now)
+{
+ int changed = 0;
+ digestmap_t *reasons;
+
+ if (! entry_guards)
+ return;
+
+ if (options->EntryNodes) /* reshuffle the entry guard list if needed */
+ entry_nodes_should_be_added();
+
+ reasons = digestmap_new();
+ SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, entry)
+ {
+ const node_t *r = node_get_by_id(entry->identity);
+ const char *reason = NULL;
+ if (entry_guard_set_status(entry, r, now, options, &reason))
+ changed = 1;
+
+ if (entry->bad_since)
+ tor_assert(reason);
+ if (reason)
+ digestmap_set(reasons, entry->identity, (char*)reason);
+ }
+ SMARTLIST_FOREACH_END(entry);
+
+ if (remove_dead_entry_guards(now))
+ changed = 1;
+ if (remove_obsolete_entry_guards(now))
+ changed = 1;
+
+ if (changed) {
+ SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, entry) {
+ const char *reason = digestmap_get(reasons, entry->identity);
+ const char *live_msg = "";
+ const node_t *r = entry_is_live(entry, 0, 1, 0, 0, &live_msg);
+ log_info(LD_CIRC, "Summary: Entry %s [%s] is %s, %s%s%s, and %s%s.",
+ entry->nickname,
+ hex_str(entry->identity, DIGEST_LEN),
+ entry->unreachable_since ? "unreachable" : "reachable",
+ entry->bad_since ? "unusable" : "usable",
+ reason ? ", ": "",
+ reason ? reason : "",
+ r ? "live" : "not live / ",
+ r ? "" : live_msg);
+ } SMARTLIST_FOREACH_END(entry);
+ log_info(LD_CIRC, " (%d/%d entry guards are usable/new)",
+ num_live_entry_guards(0), smartlist_len(entry_guards));
+ log_entry_guards(LOG_INFO);
+ entry_guards_changed();
+ }
+
+ digestmap_free(reasons, NULL);
+}
+
+/** Called when a connection to an OR with the identity digest <b>digest</b>
+ * is established (<b>succeeded</b>==1) or has failed (<b>succeeded</b>==0).
+ * If the OR is an entry, change that entry's up/down status.
+ * Return 0 normally, or -1 if we want to tear down the new connection.
+ *
+ * If <b>mark_relay_status</b>, also call router_set_status() on this
+ * relay.
+ *
+ * XXX024 change succeeded and mark_relay_status into 'int flags'.
+ */
+int
+entry_guard_register_connect_status(const char *digest, int succeeded,
+ int mark_relay_status, time_t now)
+{
+ int changed = 0;
+ int refuse_conn = 0;
+ int first_contact = 0;
+ entry_guard_t *entry = NULL;
+ int idx = -1;
+ char buf[HEX_DIGEST_LEN+1];
+
+ if (! entry_guards)
+ return 0;
+
+ SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, e) {
+ tor_assert(e);
+ if (tor_memeq(e->identity, digest, DIGEST_LEN)) {
+ entry = e;
+ idx = e_sl_idx;
+ break;
+ }
+ } SMARTLIST_FOREACH_END(e);
+
+ if (!entry)
+ return 0;
+
+ base16_encode(buf, sizeof(buf), entry->identity, DIGEST_LEN);
+
+ if (succeeded) {
+ if (entry->unreachable_since) {
+ log_info(LD_CIRC, "Entry guard '%s' (%s) is now reachable again. Good.",
+ entry->nickname, buf);
+ entry->can_retry = 0;
+ entry->unreachable_since = 0;
+ entry->last_attempted = now;
+ control_event_guard(entry->nickname, entry->identity, "UP");
+ changed = 1;
+ }
+ if (!entry->made_contact) {
+ entry->made_contact = 1;
+ first_contact = changed = 1;
+ }
+ } else { /* ! succeeded */
+ if (!entry->made_contact) {
+ /* We've never connected to this one. */
+ log_info(LD_CIRC,
+ "Connection to never-contacted entry guard '%s' (%s) failed. "
+ "Removing from the list. %d/%d entry guards usable/new.",
+ entry->nickname, buf,
+ num_live_entry_guards(0)-1, smartlist_len(entry_guards)-1);
+ control_event_guard(entry->nickname, entry->identity, "DROPPED");
+ entry_guard_free(entry);
+ smartlist_del_keeporder(entry_guards, idx);
+ log_entry_guards(LOG_INFO);
+ changed = 1;
+ } else if (!entry->unreachable_since) {
+ log_info(LD_CIRC, "Unable to connect to entry guard '%s' (%s). "
+ "Marking as unreachable.", entry->nickname, buf);
+ entry->unreachable_since = entry->last_attempted = now;
+ control_event_guard(entry->nickname, entry->identity, "DOWN");
+ changed = 1;
+ entry->can_retry = 0; /* We gave it an early chance; no good. */
+ } else {
+ char tbuf[ISO_TIME_LEN+1];
+ format_iso_time(tbuf, entry->unreachable_since);
+ log_debug(LD_CIRC, "Failed to connect to unreachable entry guard "
+ "'%s' (%s). It has been unreachable since %s.",
+ entry->nickname, buf, tbuf);
+ entry->last_attempted = now;
+ entry->can_retry = 0; /* We gave it an early chance; no good. */
+ }
+ }
+
+ /* if the caller asked us to, also update the is_running flags for this
+ * relay */
+ if (mark_relay_status)
+ router_set_status(digest, succeeded);
+
+ if (first_contact) {
+ /* We've just added a new long-term entry guard. Perhaps the network just
+ * came back? We should give our earlier entries another try too,
+ * and close this connection so we don't use it before we've given
+ * the others a shot. */
+ SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, e) {
+ if (e == entry)
+ break;
+ if (e->made_contact) {
+ const char *msg;
+ const node_t *r = entry_is_live(e, 0, 1, 1, 0, &msg);
+ if (r && e->unreachable_since) {
+ refuse_conn = 1;
+ e->can_retry = 1;
+ }
+ }
+ } SMARTLIST_FOREACH_END(e);
+ if (refuse_conn) {
+ log_info(LD_CIRC,
+ "Connected to new entry guard '%s' (%s). Marking earlier "
+ "entry guards up. %d/%d entry guards usable/new.",
+ entry->nickname, buf,
+ num_live_entry_guards(0), smartlist_len(entry_guards));
+ log_entry_guards(LOG_INFO);
+ changed = 1;
+ }
+ }
+
+ if (changed)
+ entry_guards_changed();
+ return refuse_conn ? -1 : 0;
+}
+
+/** When we try to choose an entry guard, should we parse and add
+ * config's EntryNodes first? */
+static int should_add_entry_nodes = 0;
+
+/** Called when the value of EntryNodes changes in our configuration. */
+void
+entry_nodes_should_be_added(void)
+{
+ log_info(LD_CIRC, "EntryNodes config option set. Putting configured "
+ "relays at the front of the entry guard list.");
+ should_add_entry_nodes = 1;
+}
+
+/** Update the using_as_guard fields of all the nodes. We do this after we
+ * remove entry guards from the list: This is the only function that clears
+ * the using_as_guard field. */
+static void
+update_node_guard_status(void)
+{
+ smartlist_t *nodes = nodelist_get_list();
+ SMARTLIST_FOREACH(nodes, node_t *, node, node->using_as_guard = 0);
+ SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, entry) {
+ node_t *node = node_get_mutable_by_id(entry->identity);
+ if (node)
+ node->using_as_guard = 1;
+ } SMARTLIST_FOREACH_END(entry);
+}
+
+/** Adjust the entry guards list so that it only contains entries from
+ * EntryNodes, adding new entries from EntryNodes to the list as needed. */
+static void
+entry_guards_set_from_config(const or_options_t *options)
+{
+ smartlist_t *entry_nodes, *worse_entry_nodes, *entry_fps;
+ smartlist_t *old_entry_guards_on_list, *old_entry_guards_not_on_list;
+ tor_assert(entry_guards);
+
+ should_add_entry_nodes = 0;
+
+ if (!options->EntryNodes) {
+ /* It's possible that a controller set EntryNodes, thus making
+ * should_add_entry_nodes set, then cleared it again, all before the
+ * call to choose_random_entry() that triggered us. If so, just return.
+ */
+ return;
+ }
+
+ {
+ char *string = routerset_to_string(options->EntryNodes);
+ log_info(LD_CIRC,"Adding configured EntryNodes '%s'.", string);
+ tor_free(string);
+ }
+
+ entry_nodes = smartlist_new();
+ worse_entry_nodes = smartlist_new();
+ entry_fps = smartlist_new();
+ old_entry_guards_on_list = smartlist_new();
+ old_entry_guards_not_on_list = smartlist_new();
+
+ /* Split entry guards into those on the list and those not. */
+
+ routerset_get_all_nodes(entry_nodes, options->EntryNodes,
+ options->ExcludeNodes, 0);
+ SMARTLIST_FOREACH(entry_nodes, const node_t *,node,
+ smartlist_add(entry_fps, (void*)node->identity));
+
+ SMARTLIST_FOREACH(entry_guards, entry_guard_t *, e, {
+ if (smartlist_contains_digest(entry_fps, e->identity))
+ smartlist_add(old_entry_guards_on_list, e);
+ else
+ smartlist_add(old_entry_guards_not_on_list, e);
+ });
+
+ /* Remove all currently configured guard nodes, excluded nodes, unreachable
+ * nodes, or non-Guard nodes from entry_nodes. */
+ SMARTLIST_FOREACH_BEGIN(entry_nodes, const node_t *, node) {
+ if (entry_guard_get_by_id_digest(node->identity)) {
+ SMARTLIST_DEL_CURRENT(entry_nodes, node);
+ continue;
+ } else if (routerset_contains_node(options->ExcludeNodes, node)) {
+ SMARTLIST_DEL_CURRENT(entry_nodes, node);
+ continue;
+ } else if (!fascist_firewall_allows_node(node)) {
+ SMARTLIST_DEL_CURRENT(entry_nodes, node);
+ continue;
+ } else if (! node->is_possible_guard) {
+ smartlist_add(worse_entry_nodes, (node_t*)node);
+ SMARTLIST_DEL_CURRENT(entry_nodes, node);
+ }
+ } SMARTLIST_FOREACH_END(node);
+
+ /* Now build the new entry_guards list. */
+ smartlist_clear(entry_guards);
+ /* First, the previously configured guards that are in EntryNodes. */
+ smartlist_add_all(entry_guards, old_entry_guards_on_list);
+ /* Next, scramble the rest of EntryNodes, putting the guards first. */
+ smartlist_shuffle(entry_nodes);
+ smartlist_shuffle(worse_entry_nodes);
+ smartlist_add_all(entry_nodes, worse_entry_nodes);
+
+ /* Next, the rest of EntryNodes */
+ SMARTLIST_FOREACH_BEGIN(entry_nodes, const node_t *, node) {
+ add_an_entry_guard(node, 0, 0, 1, 0);
+ if (smartlist_len(entry_guards) > options->NumEntryGuards * 10)
+ break;
+ } SMARTLIST_FOREACH_END(node);
+ log_notice(LD_GENERAL, "%d entries in guards", smartlist_len(entry_guards));
+ /* Finally, free the remaining previously configured guards that are not in
+ * EntryNodes. */
+ SMARTLIST_FOREACH(old_entry_guards_not_on_list, entry_guard_t *, e,
+ entry_guard_free(e));
+
+ update_node_guard_status();
+
+ smartlist_free(entry_nodes);
+ smartlist_free(worse_entry_nodes);
+ smartlist_free(entry_fps);
+ smartlist_free(old_entry_guards_on_list);
+ smartlist_free(old_entry_guards_not_on_list);
+ entry_guards_changed();
+}
+
+/** Return 0 if we're fine adding arbitrary routers out of the
+ * directory to our entry guard list, or return 1 if we have a
+ * list already and we must stick to it.
+ */
+int
+entry_list_is_constrained(const or_options_t *options)
+{
+ if (options->EntryNodes)
+ return 1;
+ if (options->UseBridges)
+ return 1;
+ return 0;
+}
+
+/** Return true iff this node can answer directory questions about
+ * microdescriptors. */
+static int
+node_understands_microdescriptors(const node_t *node)
+{
+ tor_assert(node);
+ if (node->rs && node->rs->version_supports_microdesc_cache)
+ return 1;
+ if (node->ri && tor_version_supports_microdescriptors(node->ri->platform))
+ return 1;
+ return 0;
+}
+
+/** Return true iff <b>node</b> is able to answer directory questions
+ * of type <b>dirinfo</b>. */
+static int
+node_can_handle_dirinfo(const node_t *node, dirinfo_type_t dirinfo)
+{
+ /* Checking dirinfo for any type other than microdescriptors isn't required
+ yet, since we only choose directory guards that can support microdescs,
+ routerinfos, and networkstatuses, AND we don't use directory guards if
+ we're configured to do direct downloads of anything else. The only case
+ where we might have a guard that doesn't know about a type of directory
+ information is when we're retrieving directory information from a
+ bridge. */
+
+ if ((dirinfo & MICRODESC_DIRINFO) &&
+ !node_understands_microdescriptors(node))
+ return 0;
+ return 1;
+}
+
+/** Pick a live (up and listed) entry guard from entry_guards. If
+ * <b>state</b> is non-NULL, this is for a specific circuit --
+ * make sure not to pick this circuit's exit or any node in the
+ * exit's family. If <b>state</b> is NULL, we're looking for a random
+ * guard (likely a bridge). If <b>dirinfo</b> is not NO_DIRINFO, then
+ * only select from nodes that know how to answer directory questions
+ * of that type. */
+const node_t *
+choose_random_entry(cpath_build_state_t *state)
+{
+ return choose_random_entry_impl(state, 0, 0, NULL);
+}
+
+/** Pick a live (up and listed) directory guard from entry_guards for
+ * downloading information of type <b>type</b>. */
+const node_t *
+choose_random_dirguard(dirinfo_type_t type)
+{
+ return choose_random_entry_impl(NULL, 1, type, NULL);
+}
+
+/** Helper for choose_random{entry,dirguard}. */
+static const node_t *
+choose_random_entry_impl(cpath_build_state_t *state, int for_directory,
+ dirinfo_type_t dirinfo_type, int *n_options_out)
+{
+ const or_options_t *options = get_options();
+ smartlist_t *live_entry_guards = smartlist_new();
+ smartlist_t *exit_family = smartlist_new();
+ const node_t *chosen_exit =
+ state?build_state_get_exit_node(state) : NULL;
+ const node_t *node = NULL;
+ int need_uptime = state ? state->need_uptime : 0;
+ int need_capacity = state ? state->need_capacity : 0;
+ int preferred_min, consider_exit_family = 0;
+ int need_descriptor = !for_directory;
+ const int num_needed = decide_num_guards(options, for_directory);
+
+ if (n_options_out)
+ *n_options_out = 0;
+
+ if (chosen_exit) {
+ nodelist_add_node_and_family(exit_family, chosen_exit);
+ consider_exit_family = 1;
+ }
+
+ if (!entry_guards)
+ entry_guards = smartlist_new();
+
+ if (should_add_entry_nodes)
+ entry_guards_set_from_config(options);
+
+ if (!entry_list_is_constrained(options) &&
+ smartlist_len(entry_guards) < num_needed)
+ pick_entry_guards(options, for_directory);
+
+ retry:
+ smartlist_clear(live_entry_guards);
+ SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, entry) {
+ const char *msg;
+ node = entry_is_live(entry, need_uptime, need_capacity, 0,
+ need_descriptor, &msg);
+ if (!node)
+ continue; /* down, no point */
+ if (for_directory) {
+ if (!entry->is_dir_cache)
+ continue; /* We need a directory and didn't get one. */
+ }
+ if (node == chosen_exit)
+ continue; /* don't pick the same node for entry and exit */
+ if (consider_exit_family && smartlist_contains(exit_family, node))
+ continue; /* avoid relays that are family members of our exit */
+ if (dirinfo_type != NO_DIRINFO &&
+ !node_can_handle_dirinfo(node, dirinfo_type))
+ continue; /* this node won't be able to answer our dir questions */
+#if 0 /* since EntryNodes is always strict now, this clause is moot */
+ if (options->EntryNodes &&
+ !routerset_contains_node(options->EntryNodes, node)) {
+ /* We've come to the end of our preferred entry nodes. */
+ if (smartlist_len(live_entry_guards))
+ goto choose_and_finish; /* only choose from the ones we like */
+ if (options->StrictNodes) {
+ /* in theory this case should never happen, since
+ * entry_guards_set_from_config() drops unwanted relays */
+ tor_fragile_assert();
+ } else {
+ log_info(LD_CIRC,
+ "No relays from EntryNodes available. Using others.");
+ }
+ }
+#endif
+ smartlist_add(live_entry_guards, (void*)node);
+ if (!entry->made_contact) {
+ /* Always start with the first not-yet-contacted entry
+ * guard. Otherwise we might add several new ones, pick
+ * the second new one, and now we've expanded our entry
+ * guard list without needing to. */
+ goto choose_and_finish;
+ }
+ if (smartlist_len(live_entry_guards) >= num_needed)
+ goto choose_and_finish; /* we have enough */
+ } SMARTLIST_FOREACH_END(entry);
+
+ if (entry_list_is_constrained(options)) {
+ /* If we prefer the entry nodes we've got, and we have at least
+ * one choice, that's great. Use it. */
+ preferred_min = 1;
+ } else {
+ /* Try to have at least 2 choices available. This way we don't
+ * get stuck with a single live-but-crummy entry and just keep
+ * using him.
+ * (We might get 2 live-but-crummy entry guards, but so be it.) */
+ preferred_min = 2;
+ }
+
+ if (smartlist_len(live_entry_guards) < preferred_min) {
+ if (!entry_list_is_constrained(options)) {
+ /* still no? try adding a new entry then */
+ /* XXX if guard doesn't imply fast and stable, then we need
+ * to tell add_an_entry_guard below what we want, or it might
+ * be a long time til we get it. -RD */
+ node = add_an_entry_guard(NULL, 0, 0, 1, for_directory);
+ if (node) {
+ entry_guards_changed();
+ /* XXX we start over here in case the new node we added shares
+ * a family with our exit node. There's a chance that we'll just
+ * load up on entry guards here, if the network we're using is
+ * one big family. Perhaps we should teach add_an_entry_guard()
+ * to understand nodes-to-avoid-if-possible? -RD */
+ goto retry;
+ }
+ }
+ if (!node && need_uptime) {
+ need_uptime = 0; /* try without that requirement */
+ goto retry;
+ }
+ if (!node && need_capacity) {
+ /* still no? last attempt, try without requiring capacity */
+ need_capacity = 0;
+ goto retry;
+ }
+#if 0
+ /* Removing this retry logic: if we only allow one exit, and it is in the
+ same family as all our entries, then we are just plain not going to win
+ here. */
+ if (!node && entry_list_is_constrained(options) && consider_exit_family) {
+ /* still no? if we're using bridges or have strictentrynodes
+ * set, and our chosen exit is in the same family as all our
+ * bridges/entry guards, then be flexible about families. */
+ consider_exit_family = 0;
+ goto retry;
+ }
+#endif
+ /* live_entry_guards may be empty below. Oh well, we tried. */
+ }
+
+ choose_and_finish:
+ if (entry_list_is_constrained(options)) {
+ /* We need to weight by bandwidth, because our bridges or entryguards
+ * were not already selected proportional to their bandwidth. */
+ node = node_sl_choose_by_bandwidth(live_entry_guards, WEIGHT_FOR_GUARD);
+ } else {
+ /* We choose uniformly at random here, because choose_good_entry_server()
+ * already weights its choices by bandwidth, so we don't want to
+ * *double*-weight our guard selection. */
+ node = smartlist_choose(live_entry_guards);
+ }
+ if (n_options_out)
+ *n_options_out = smartlist_len(live_entry_guards);
+ smartlist_free(live_entry_guards);
+ smartlist_free(exit_family);
+ return node;
+}
+
+/** Parse <b>state</b> and learn about the entry guards it describes.
+ * If <b>set</b> is true, and there are no errors, replace the global
+ * entry_list with what we find.
+ * On success, return 0. On failure, alloc into *<b>msg</b> a string
+ * describing the error, and return -1.
+ */
+int
+entry_guards_parse_state(or_state_t *state, int set, char **msg)
+{
+ entry_guard_t *node = NULL;
+ smartlist_t *new_entry_guards = smartlist_new();
+ config_line_t *line;
+ time_t now = time(NULL);
+ const char *state_version = state->TorVersion;
+ digestmap_t *added_by = digestmap_new();
+
+ *msg = NULL;
+ for (line = state->EntryGuards; line; line = line->next) {
+ if (!strcasecmp(line->key, "EntryGuard")) {
+ smartlist_t *args = smartlist_new();
+ node = tor_malloc_zero(sizeof(entry_guard_t));
+ /* all entry guards on disk have been contacted */
+ node->made_contact = 1;
+ smartlist_add(new_entry_guards, node);
+ smartlist_split_string(args, line->value, " ",
+ SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
+ if (smartlist_len(args)<2) {
+ *msg = tor_strdup("Unable to parse entry nodes: "
+ "Too few arguments to EntryGuard");
+ } else if (!is_legal_nickname(smartlist_get(args,0))) {
+ *msg = tor_strdup("Unable to parse entry nodes: "
+ "Bad nickname for EntryGuard");
+ } else {
+ strlcpy(node->nickname, smartlist_get(args,0), MAX_NICKNAME_LEN+1);
+ if (base16_decode(node->identity, DIGEST_LEN, smartlist_get(args,1),
+ strlen(smartlist_get(args,1)))<0) {
+ *msg = tor_strdup("Unable to parse entry nodes: "
+ "Bad hex digest for EntryGuard");
+ }
+ }
+ if (smartlist_len(args) >= 3) {
+ const char *is_cache = smartlist_get(args, 2);
+ if (!strcasecmp(is_cache, "DirCache")) {
+ node->is_dir_cache = 1;
+ } else if (!strcasecmp(is_cache, "NoDirCache")) {
+ node->is_dir_cache = 0;
+ } else {
+ log_warn(LD_CONFIG, "Bogus third argument to EntryGuard line: %s",
+ escaped(is_cache));
+ }
+ }
+ SMARTLIST_FOREACH(args, char*, cp, tor_free(cp));
+ smartlist_free(args);
+ if (*msg)
+ break;
+ } else if (!strcasecmp(line->key, "EntryGuardDownSince") ||
+ !strcasecmp(line->key, "EntryGuardUnlistedSince")) {
+ time_t when;
+ time_t last_try = 0;
+ if (!node) {
+ *msg = tor_strdup("Unable to parse entry nodes: "
+ "EntryGuardDownSince/UnlistedSince without EntryGuard");
+ break;
+ }
+ if (parse_iso_time(line->value, &when)<0) {
+ *msg = tor_strdup("Unable to parse entry nodes: "
+ "Bad time in EntryGuardDownSince/UnlistedSince");
+ break;
+ }
+ if (when > now) {
+ /* It's a bad idea to believe info in the future: you can wind
+ * up with timeouts that aren't allowed to happen for years. */
+ continue;
+ }
+ if (strlen(line->value) >= ISO_TIME_LEN+ISO_TIME_LEN+1) {
+ /* ignore failure */
+ (void) parse_iso_time(line->value+ISO_TIME_LEN+1, &last_try);
+ }
+ if (!strcasecmp(line->key, "EntryGuardDownSince")) {
+ node->unreachable_since = when;
+ node->last_attempted = last_try;
+ } else {
+ node->bad_since = when;
+ }
+ } else if (!strcasecmp(line->key, "EntryGuardAddedBy")) {
+ char d[DIGEST_LEN];
+ /* format is digest version date */
+ if (strlen(line->value) < HEX_DIGEST_LEN+1+1+1+ISO_TIME_LEN) {
+ log_warn(LD_BUG, "EntryGuardAddedBy line is not long enough.");
+ continue;
+ }
+ if (base16_decode(d, sizeof(d), line->value, HEX_DIGEST_LEN)<0 ||
+ line->value[HEX_DIGEST_LEN] != ' ') {
+ log_warn(LD_BUG, "EntryGuardAddedBy line %s does not begin with "
+ "hex digest", escaped(line->value));
+ continue;
+ }
+ digestmap_set(added_by, d, tor_strdup(line->value+HEX_DIGEST_LEN+1));
+ } else if (!strcasecmp(line->key, "EntryGuardPathUseBias")) {
+ const or_options_t *options = get_options();
+ double use_cnt, success_cnt;
+
+ if (!node) {
+ *msg = tor_strdup("Unable to parse entry nodes: "
+ "EntryGuardPathUseBias without EntryGuard");
+ break;
+ }
+
+ if (tor_sscanf(line->value, "%lf %lf",
+ &use_cnt, &success_cnt) != 2) {
+ log_info(LD_GENERAL, "Malformed path use bias line for node %s",
+ node->nickname);
+ continue;
+ }
+
+ if (use_cnt < success_cnt) {
+ int severity = LOG_INFO;
+ /* If this state file was written by a Tor that would have
+ * already fixed it, then the overcounting bug is still there.. */
+ if (tor_version_as_new_as(state_version, "0.2.4.13-alpha")) {
+ severity = LOG_NOTICE;
+ }
+ log_fn(severity, LD_BUG,
+ "State file contains unexpectedly high usage success "
+ "counts %lf/%lf for Guard %s ($%s)",
+ success_cnt, use_cnt,
+ node->nickname, hex_str(node->identity, DIGEST_LEN));
+ success_cnt = use_cnt;
+ }
+
+ node->use_attempts = use_cnt;
+ node->use_successes = success_cnt;
+
+ log_info(LD_GENERAL, "Read %f/%f path use bias for node %s",
+ node->use_successes, node->use_attempts, node->nickname);
+
+ /* Note: We rely on the < comparison here to allow us to set a 0
+ * rate and disable the feature entirely. If refactoring, don't
+ * change to <= */
+ if (pathbias_get_use_success_count(node)/node->use_attempts
+ < pathbias_get_extreme_use_rate(options) &&
+ pathbias_get_dropguards(options)) {
+ node->path_bias_disabled = 1;
+ log_info(LD_GENERAL,
+ "Path use bias is too high (%f/%f); disabling node %s",
+ node->circ_successes, node->circ_attempts, node->nickname);
+ }
+ } else if (!strcasecmp(line->key, "EntryGuardPathBias")) {
+ const or_options_t *options = get_options();
+ double hop_cnt, success_cnt, timeouts, collapsed, successful_closed,
+ unusable;
+
+ if (!node) {
+ *msg = tor_strdup("Unable to parse entry nodes: "
+ "EntryGuardPathBias without EntryGuard");
+ break;
+ }
+
+ /* First try 3 params, then 2. */
+ /* In the long run: circuit_success ~= successful_circuit_close +
+ * collapsed_circuits +
+ * unusable_circuits */
+ if (tor_sscanf(line->value, "%lf %lf %lf %lf %lf %lf",
+ &hop_cnt, &success_cnt, &successful_closed,
+ &collapsed, &unusable, &timeouts) != 6) {
+ int old_success, old_hops;
+ if (tor_sscanf(line->value, "%u %u", &old_success, &old_hops) != 2) {
+ continue;
+ }
+ log_info(LD_GENERAL, "Reading old-style EntryGuardPathBias %s",
+ escaped(line->value));
+
+ success_cnt = old_success;
+ successful_closed = old_success;
+ hop_cnt = old_hops;
+ timeouts = 0;
+ collapsed = 0;
+ unusable = 0;
+ }
+
+ if (hop_cnt < success_cnt) {
+ int severity = LOG_INFO;
+ /* If this state file was written by a Tor that would have
+ * already fixed it, then the overcounting bug is still there.. */
+ if (tor_version_as_new_as(state_version, "0.2.4.13-alpha")) {
+ severity = LOG_NOTICE;
+ }
+ log_fn(severity, LD_BUG,
+ "State file contains unexpectedly high success counts "
+ "%lf/%lf for Guard %s ($%s)",
+ success_cnt, hop_cnt,
+ node->nickname, hex_str(node->identity, DIGEST_LEN));
+ success_cnt = hop_cnt;
+ }
+
+ node->circ_attempts = hop_cnt;
+ node->circ_successes = success_cnt;
+
+ node->successful_circuits_closed = successful_closed;
+ node->timeouts = timeouts;
+ node->collapsed_circuits = collapsed;
+ node->unusable_circuits = unusable;
+
+ log_info(LD_GENERAL, "Read %f/%f path bias for node %s",
+ node->circ_successes, node->circ_attempts, node->nickname);
+ /* Note: We rely on the < comparison here to allow us to set a 0
+ * rate and disable the feature entirely. If refactoring, don't
+ * change to <= */
+ if (pathbias_get_close_success_count(node)/node->circ_attempts
+ < pathbias_get_extreme_rate(options) &&
+ pathbias_get_dropguards(options)) {
+ node->path_bias_disabled = 1;
+ log_info(LD_GENERAL,
+ "Path bias is too high (%f/%f); disabling node %s",
+ node->circ_successes, node->circ_attempts, node->nickname);
+ }
+
+ } else {
+ log_warn(LD_BUG, "Unexpected key %s", line->key);
+ }
+ }
+
+ SMARTLIST_FOREACH_BEGIN(new_entry_guards, entry_guard_t *, e) {
+ char *sp;
+ char *val = digestmap_get(added_by, e->identity);
+ if (val && (sp = strchr(val, ' '))) {
+ time_t when;
+ *sp++ = '\0';
+ if (parse_iso_time(sp, &when)<0) {
+ log_warn(LD_BUG, "Can't read time %s in EntryGuardAddedBy", sp);
+ } else {
+ e->chosen_by_version = tor_strdup(val);
+ e->chosen_on_date = when;
+ }
+ } else {
+ if (state_version) {
+ e->chosen_by_version = tor_strdup(state_version);
+ e->chosen_on_date = time(NULL) - crypto_rand_int(3600*24*30);
+ }
+ }
+ if (e->path_bias_disabled && !e->bad_since)
+ e->bad_since = time(NULL);
+ }
+ SMARTLIST_FOREACH_END(e);
+
+ if (*msg || !set) {
+ SMARTLIST_FOREACH(new_entry_guards, entry_guard_t *, e,
+ entry_guard_free(e));
+ smartlist_free(new_entry_guards);
+ } else { /* !err && set */
+ if (entry_guards) {
+ SMARTLIST_FOREACH(entry_guards, entry_guard_t *, e,
+ entry_guard_free(e));
+ smartlist_free(entry_guards);
+ }
+ entry_guards = new_entry_guards;
+ entry_guards_dirty = 0;
+ /* XXX024 hand new_entry_guards to this func, and move it up a
+ * few lines, so we don't have to re-dirty it */
+ if (remove_obsolete_entry_guards(now))
+ entry_guards_dirty = 1;
+
+ update_node_guard_status();
+ }
+ digestmap_free(added_by, tor_free_);
+ return *msg ? -1 : 0;
+}
+
+/** Our list of entry guards has changed, or some element of one
+ * of our entry guards has changed. Write the changes to disk within
+ * the next few minutes.
+ */
+void
+entry_guards_changed(void)
+{
+ time_t when;
+ entry_guards_dirty = 1;
+
+ /* or_state_save() will call entry_guards_update_state(). */
+ when = get_options()->AvoidDiskWrites ? time(NULL) + 3600 : time(NULL)+600;
+ or_state_mark_dirty(get_or_state(), when);
+}
+
+/** If the entry guard info has not changed, do nothing and return.
+ * Otherwise, free the EntryGuards piece of <b>state</b> and create
+ * a new one out of the global entry_guards list, and then mark
+ * <b>state</b> dirty so it will get saved to disk.
+ */
+void
+entry_guards_update_state(or_state_t *state)
+{
+ config_line_t **next, *line;
+ if (! entry_guards_dirty)
+ return;
+
+ config_free_lines(state->EntryGuards);
+ next = &state->EntryGuards;
+ *next = NULL;
+ if (!entry_guards)
+ entry_guards = smartlist_new();
+ SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, e) {
+ char dbuf[HEX_DIGEST_LEN+1];
+ if (!e->made_contact)
+ continue; /* don't write this one to disk */
+ *next = line = tor_malloc_zero(sizeof(config_line_t));
+ line->key = tor_strdup("EntryGuard");
+ base16_encode(dbuf, sizeof(dbuf), e->identity, DIGEST_LEN);
+ tor_asprintf(&line->value, "%s %s %sDirCache", e->nickname, dbuf,
+ e->is_dir_cache ? "" : "No");
+ next = &(line->next);
+ if (e->unreachable_since) {
+ *next = line = tor_malloc_zero(sizeof(config_line_t));
+ line->key = tor_strdup("EntryGuardDownSince");
+ line->value = tor_malloc(ISO_TIME_LEN+1+ISO_TIME_LEN+1);
+ format_iso_time(line->value, e->unreachable_since);
+ if (e->last_attempted) {
+ line->value[ISO_TIME_LEN] = ' ';
+ format_iso_time(line->value+ISO_TIME_LEN+1, e->last_attempted);
+ }
+ next = &(line->next);
+ }
+ if (e->bad_since) {
+ *next = line = tor_malloc_zero(sizeof(config_line_t));
+ line->key = tor_strdup("EntryGuardUnlistedSince");
+ line->value = tor_malloc(ISO_TIME_LEN+1);
+ format_iso_time(line->value, e->bad_since);
+ next = &(line->next);
+ }
+ if (e->chosen_on_date && e->chosen_by_version &&
+ !strchr(e->chosen_by_version, ' ')) {
+ char d[HEX_DIGEST_LEN+1];
+ char t[ISO_TIME_LEN+1];
+ *next = line = tor_malloc_zero(sizeof(config_line_t));
+ line->key = tor_strdup("EntryGuardAddedBy");
+ base16_encode(d, sizeof(d), e->identity, DIGEST_LEN);
+ format_iso_time(t, e->chosen_on_date);
+ tor_asprintf(&line->value, "%s %s %s",
+ d, e->chosen_by_version, t);
+ next = &(line->next);
+ }
+ if (e->circ_attempts > 0) {
+ *next = line = tor_malloc_zero(sizeof(config_line_t));
+ line->key = tor_strdup("EntryGuardPathBias");
+ /* In the long run: circuit_success ~= successful_circuit_close +
+ * collapsed_circuits +
+ * unusable_circuits */
+ tor_asprintf(&line->value, "%f %f %f %f %f %f",
+ e->circ_attempts, e->circ_successes,
+ pathbias_get_close_success_count(e),
+ e->collapsed_circuits,
+ e->unusable_circuits, e->timeouts);
+ next = &(line->next);
+ }
+ if (e->use_attempts > 0) {
+ *next = line = tor_malloc_zero(sizeof(config_line_t));
+ line->key = tor_strdup("EntryGuardPathUseBias");
+
+ tor_asprintf(&line->value, "%f %f",
+ e->use_attempts,
+ pathbias_get_use_success_count(e));
+ next = &(line->next);
+ }
+
+ } SMARTLIST_FOREACH_END(e);
+ if (!get_options()->AvoidDiskWrites)
+ or_state_mark_dirty(get_or_state(), 0);
+ entry_guards_dirty = 0;
+}
+
+/** If <b>question</b> is the string "entry-guards", then dump
+ * to *<b>answer</b> a newly allocated string describing all of
+ * the nodes in the global entry_guards list. See control-spec.txt
+ * for details.
+ * For backward compatibility, we also handle the string "helper-nodes".
+ * */
+int
+getinfo_helper_entry_guards(control_connection_t *conn,
+ const char *question, char **answer,
+ const char **errmsg)
+{
+ (void) conn;
+ (void) errmsg;
+
+ if (!strcmp(question,"entry-guards") ||
+ !strcmp(question,"helper-nodes")) {
+ smartlist_t *sl = smartlist_new();
+ char tbuf[ISO_TIME_LEN+1];
+ char nbuf[MAX_VERBOSE_NICKNAME_LEN+1];
+ if (!entry_guards)
+ entry_guards = smartlist_new();
+ SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, e) {
+ const char *status = NULL;
+ time_t when = 0;
+ const node_t *node;
+
+ if (!e->made_contact) {
+ status = "never-connected";
+ } else if (e->bad_since) {
+ when = e->bad_since;
+ status = "unusable";
+ } else {
+ status = "up";
+ }
+
+ node = node_get_by_id(e->identity);
+ if (node) {
+ node_get_verbose_nickname(node, nbuf);
+ } else {
+ nbuf[0] = '$';
+ base16_encode(nbuf+1, sizeof(nbuf)-1, e->identity, DIGEST_LEN);
+ /* e->nickname field is not very reliable if we don't know about
+ * this router any longer; don't include it. */
+ }
+
+ if (when) {
+ format_iso_time(tbuf, when);
+ smartlist_add_asprintf(sl, "%s %s %s\n", nbuf, status, tbuf);
+ } else {
+ smartlist_add_asprintf(sl, "%s %s\n", nbuf, status);
+ }
+ } SMARTLIST_FOREACH_END(e);
+ *answer = smartlist_join_strings(sl, "", 0, NULL);
+ SMARTLIST_FOREACH(sl, char *, c, tor_free(c));
+ smartlist_free(sl);
+ }
+ return 0;
+}
+
+/** A list of configured bridges. Whenever we actually get a descriptor
+ * for one, we add it as an entry guard. Note that the order of bridges
+ * in this list does not necessarily correspond to the order of bridges
+ * in the torrc. */
+static smartlist_t *bridge_list = NULL;
+
+/** Mark every entry of the bridge list to be removed on our next call to
+ * sweep_bridge_list unless it has first been un-marked. */
+void
+mark_bridge_list(void)
+{
+ if (!bridge_list)
+ bridge_list = smartlist_new();
+ SMARTLIST_FOREACH(bridge_list, bridge_info_t *, b,
+ b->marked_for_removal = 1);
+}
+
+/** Remove every entry of the bridge list that was marked with
+ * mark_bridge_list if it has not subsequently been un-marked. */
+void
+sweep_bridge_list(void)
+{
+ if (!bridge_list)
+ bridge_list = smartlist_new();
+ SMARTLIST_FOREACH_BEGIN(bridge_list, bridge_info_t *, b) {
+ if (b->marked_for_removal) {
+ SMARTLIST_DEL_CURRENT(bridge_list, b);
+ bridge_free(b);
+ }
+ } SMARTLIST_FOREACH_END(b);
+}
+
+/** Initialize the bridge list to empty, creating it if needed. */
+static void
+clear_bridge_list(void)
+{
+ if (!bridge_list)
+ bridge_list = smartlist_new();
+ SMARTLIST_FOREACH(bridge_list, bridge_info_t *, b, bridge_free(b));
+ smartlist_clear(bridge_list);
+}
+
+/** Free the bridge <b>bridge</b>. */
+static void
+bridge_free(bridge_info_t *bridge)
+{
+ if (!bridge)
+ return;
+
+ tor_free(bridge->transport_name);
+ if (bridge->socks_args) {
+ SMARTLIST_FOREACH(bridge->socks_args, char*, s, tor_free(s));
+ smartlist_free(bridge->socks_args);
+ }
+
+ tor_free(bridge);
+}
+
+/** If we have a bridge configured whose digest matches <b>digest</b>, or a
+ * bridge with no known digest whose address matches any of the
+ * tor_addr_port_t's in <b>orports</b>, return that bridge. Else return
+ * NULL. */
+static bridge_info_t *
+get_configured_bridge_by_orports_digest(const char *digest,
+ const smartlist_t *orports)
+{
+ if (!bridge_list)
+ return NULL;
+ SMARTLIST_FOREACH_BEGIN(bridge_list, bridge_info_t *, bridge)
+ {
+ if (tor_digest_is_zero(bridge->identity)) {
+ SMARTLIST_FOREACH_BEGIN(orports, tor_addr_port_t *, ap)
+ {
+ if (tor_addr_compare(&bridge->addr, &ap->addr, CMP_EXACT) == 0 &&
+ bridge->port == ap->port)
+ return bridge;
+ }
+ SMARTLIST_FOREACH_END(ap);
+ }
+ if (digest && tor_memeq(bridge->identity, digest, DIGEST_LEN))
+ return bridge;
+ }
+ SMARTLIST_FOREACH_END(bridge);
+ return NULL;
+}
+
+/** If we have a bridge configured whose digest matches <b>digest</b>, or a
+ * bridge with no known digest whose address matches <b>addr</b>:<b>/port</b>,
+ * return that bridge. Else return NULL. If <b>digest</b> is NULL, check for
+ * address/port matches only. */
+static bridge_info_t *
+get_configured_bridge_by_addr_port_digest(const tor_addr_t *addr,
+ uint16_t port,
+ const char *digest)
+{
+ if (!bridge_list)
+ return NULL;
+ SMARTLIST_FOREACH_BEGIN(bridge_list, bridge_info_t *, bridge)
+ {
+ if ((tor_digest_is_zero(bridge->identity) || digest == NULL) &&
+ !tor_addr_compare(&bridge->addr, addr, CMP_EXACT) &&
+ bridge->port == port)
+ return bridge;
+ if (digest && tor_memeq(bridge->identity, digest, DIGEST_LEN))
+ return bridge;
+ }
+ SMARTLIST_FOREACH_END(bridge);
+ return NULL;
+}
+
+/** Wrapper around get_configured_bridge_by_addr_port_digest() to look
+ * it up via router descriptor <b>ri</b>. */
+static bridge_info_t *
+get_configured_bridge_by_routerinfo(const routerinfo_t *ri)
+{
+ bridge_info_t *bi = NULL;
+ smartlist_t *orports = router_get_all_orports(ri);
+ bi = get_configured_bridge_by_orports_digest(ri->cache_info.identity_digest,
+ orports);
+ SMARTLIST_FOREACH(orports, tor_addr_port_t *, p, tor_free(p));
+ smartlist_free(orports);
+ return bi;
+}
+
+/** Return 1 if <b>ri</b> is one of our known bridges, else 0. */
+int
+routerinfo_is_a_configured_bridge(const routerinfo_t *ri)
+{
+ return get_configured_bridge_by_routerinfo(ri) ? 1 : 0;
+}
+
+/** Return 1 if <b>node</b> is one of our configured bridges, else 0. */
+int
+node_is_a_configured_bridge(const node_t *node)
+{
+ int retval = 0;
+ smartlist_t *orports = node_get_all_orports(node);
+ retval = get_configured_bridge_by_orports_digest(node->identity,
+ orports) != NULL;
+ SMARTLIST_FOREACH(orports, tor_addr_port_t *, p, tor_free(p));
+ smartlist_free(orports);
+ return retval;
+}
+
+/** We made a connection to a router at <b>addr</b>:<b>port</b>
+ * without knowing its digest. Its digest turned out to be <b>digest</b>.
+ * If it was a bridge, and we still don't know its digest, record it.
+ */
+void
+learned_router_identity(const tor_addr_t *addr, uint16_t port,
+ const char *digest)
+{
+ bridge_info_t *bridge =
+ get_configured_bridge_by_addr_port_digest(addr, port, digest);
+ if (bridge && tor_digest_is_zero(bridge->identity)) {
+ char *transport_info = NULL;
+ const char *transport_name =
+ find_transport_name_by_bridge_addrport(addr, port);
+ if (transport_name)
+ tor_asprintf(&transport_info, " (with transport '%s')", transport_name);
+
+ memcpy(bridge->identity, digest, DIGEST_LEN);
+ log_notice(LD_DIR, "Learned fingerprint %s for bridge %s%s.",
+ hex_str(digest, DIGEST_LEN), fmt_addrport(addr, port),
+ transport_info ? transport_info : "");
+ tor_free(transport_info);
+ }
+}
+
+/** Return true if <b>bridge</b> has the same identity digest as
+ * <b>digest</b>. If <b>digest</b> is NULL, it matches
+ * bridges with unspecified identity digests. */
+static int
+bridge_has_digest(const bridge_info_t *bridge, const char *digest)
+{
+ if (digest)
+ return tor_memeq(digest, bridge->identity, DIGEST_LEN);
+ else
+ return tor_digest_is_zero(bridge->identity);
+}
+
+/** We are about to add a new bridge at <b>addr</b>:<b>port</b>, with optional
+ * <b>digest</b> and <b>transport_name</b>. Mark for removal any previously
+ * existing bridge with the same address and port, and warn the user as
+ * appropriate.
+ */
+static void
+bridge_resolve_conflicts(const tor_addr_t *addr, uint16_t port,
+ const char *digest, const char *transport_name)
+{
+ /* Iterate the already-registered bridge list:
+
+ If you find a bridge with the same adress and port, mark it for
+ removal. It doesn't make sense to have two active bridges with
+ the same IP:PORT. If the bridge in question has a different
+ digest or transport than <b>digest</b>/<b>transport_name</b>,
+ it's probably a misconfiguration and we should warn the user.
+ */
+ SMARTLIST_FOREACH_BEGIN(bridge_list, bridge_info_t *, bridge) {
+ if (bridge->marked_for_removal)
+ continue;
+
+ if (tor_addr_eq(&bridge->addr, addr) && (bridge->port == port)) {
+
+ bridge->marked_for_removal = 1;
+
+ if (!bridge_has_digest(bridge, digest) ||
+ strcmp_opt(bridge->transport_name, transport_name)) {
+ /* warn the user */
+ char *bridge_description_new, *bridge_description_old;
+ tor_asprintf(&bridge_description_new, "%s:%s:%s",
+ fmt_addrport(addr, port),
+ digest ? hex_str(digest, DIGEST_LEN) : "",
+ transport_name ? transport_name : "");
+ tor_asprintf(&bridge_description_old, "%s:%s:%s",
+ fmt_addrport(&bridge->addr, bridge->port),
+ tor_digest_is_zero(bridge->identity) ?
+ "" : hex_str(bridge->identity,DIGEST_LEN),
+ bridge->transport_name ? bridge->transport_name : "");
+
+ log_warn(LD_GENERAL,"Tried to add bridge '%s', but we found a conflict"
+ " with the already registered bridge '%s'. We will discard"
+ " the old bridge and keep '%s'. If this is not what you"
+ " wanted, please change your configuration file accordingly.",
+ bridge_description_new, bridge_description_old,
+ bridge_description_new);
+
+ tor_free(bridge_description_new);
+ tor_free(bridge_description_old);
+ }
+ }
+ } SMARTLIST_FOREACH_END(bridge);
+}
+
+/** Return True if we have a bridge that uses a transport with name
+ * <b>transport_name</b>. */
+int
+transport_is_needed(const char *transport_name)
+{
+ if (!bridge_list)
+ return 0;
+
+ SMARTLIST_FOREACH_BEGIN(bridge_list, const bridge_info_t *, bridge) {
+ if (bridge->transport_name &&
+ !strcmp(bridge->transport_name, transport_name))
+ return 1;
+ } SMARTLIST_FOREACH_END(bridge);
+
+ return 0;
+}
+
+/** Register the bridge information in <b>bridge_line</b> to the
+ * bridge subsystem. Steals reference of <b>bridge_line</b>. */
+void
+bridge_add_from_config(bridge_line_t *bridge_line)
+{
+ bridge_info_t *b;
+
+ { /* Log the bridge we are about to register: */
+ log_debug(LD_GENERAL, "Registering bridge at %s (transport: %s) (%s)",
+ fmt_addrport(&bridge_line->addr, bridge_line->port),
+ bridge_line->transport_name ?
+ bridge_line->transport_name : "no transport",
+ tor_digest_is_zero(bridge_line->digest) ?
+ "no key listed" : hex_str(bridge_line->digest, DIGEST_LEN));
+
+ if (bridge_line->socks_args) { /* print socks arguments */
+ int i = 0;
+
+ tor_assert(smartlist_len(bridge_line->socks_args) > 0);
+
+ log_debug(LD_GENERAL, "Bridge uses %d SOCKS arguments:",
+ smartlist_len(bridge_line->socks_args));
+ SMARTLIST_FOREACH(bridge_line->socks_args, const char *, arg,
+ log_debug(LD_CONFIG, "%d: %s", ++i, arg));
+ }
+ }
+
+ bridge_resolve_conflicts(&bridge_line->addr,
+ bridge_line->port,
+ bridge_line->digest,
+ bridge_line->transport_name);
+
+ b = tor_malloc_zero(sizeof(bridge_info_t));
+ tor_addr_copy(&b->addr, &bridge_line->addr);
+ b->port = bridge_line->port;
+ memcpy(b->identity, bridge_line->digest, DIGEST_LEN);
+ if (bridge_line->transport_name)
+ b->transport_name = bridge_line->transport_name;
+ b->fetch_status.schedule = DL_SCHED_BRIDGE;
+ b->socks_args = bridge_line->socks_args;
+ if (!bridge_list)
+ bridge_list = smartlist_new();
+
+ tor_free(bridge_line); /* Deallocate bridge_line now. */
+
+ smartlist_add(bridge_list, b);
+}
+
+/** Return true iff <b>routerset</b> contains the bridge <b>bridge</b>. */
+static int
+routerset_contains_bridge(const routerset_t *routerset,
+ const bridge_info_t *bridge)
+{
+ int result;
+ extend_info_t *extinfo;
+ tor_assert(bridge);
+ if (!routerset)
+ return 0;
+
+ extinfo = extend_info_new(
+ NULL, bridge->identity, NULL, NULL, &bridge->addr, bridge->port);
+ result = routerset_contains_extendinfo(routerset, extinfo);
+ extend_info_free(extinfo);
+ return result;
+}
+
+/** If <b>digest</b> is one of our known bridges, return it. */
+static bridge_info_t *
+find_bridge_by_digest(const char *digest)
+{
+ SMARTLIST_FOREACH(bridge_list, bridge_info_t *, bridge,
+ {
+ if (tor_memeq(bridge->identity, digest, DIGEST_LEN))
+ return bridge;
+ });
+ return NULL;
+}
+
+/** Given the <b>addr</b> and <b>port</b> of a bridge, if that bridge
+ * supports a pluggable transport, return its name. Otherwise, return
+ * NULL. */
+const char *
+find_transport_name_by_bridge_addrport(const tor_addr_t *addr, uint16_t port)
+{
+ if (!bridge_list)
+ return NULL;
+
+ SMARTLIST_FOREACH_BEGIN(bridge_list, const bridge_info_t *, bridge) {
+ if (tor_addr_eq(&bridge->addr, addr) &&
+ (bridge->port == port))
+ return bridge->transport_name;
+ } SMARTLIST_FOREACH_END(bridge);
+
+ return NULL;
+}
+
+/** If <b>addr</b> and <b>port</b> match the address and port of a
+ * bridge of ours that uses pluggable transports, place its transport
+ * in <b>transport</b>.
+ *
+ * Return 0 on success (found a transport, or found a bridge with no
+ * transport, or found no bridge); return -1 if we should be using a
+ * transport, but the transport could not be found.
+ */
+int
+get_transport_by_bridge_addrport(const tor_addr_t *addr, uint16_t port,
+ const transport_t **transport)
+{
+ *transport = NULL;
+ if (!bridge_list)
+ return 0;
+
+ SMARTLIST_FOREACH_BEGIN(bridge_list, const bridge_info_t *, bridge) {
+ if (tor_addr_eq(&bridge->addr, addr) &&
+ (bridge->port == port)) { /* bridge matched */
+ if (bridge->transport_name) { /* it also uses pluggable transports */
+ *transport = transport_get_by_name(bridge->transport_name);
+ if (*transport == NULL) { /* it uses pluggable transports, but
+ the transport could not be found! */
+ return -1;
+ }
+ return 0;
+ } else { /* bridge matched, but it doesn't use transports. */
+ break;
+ }
+ }
+ } SMARTLIST_FOREACH_END(bridge);
+
+ *transport = NULL;
+ return 0;
+}
+
+/** Return a smartlist containing all the SOCKS arguments that we
+ * should pass to the SOCKS proxy. */
+const smartlist_t *
+get_socks_args_by_bridge_addrport(const tor_addr_t *addr, uint16_t port)
+{
+ bridge_info_t *bridge = get_configured_bridge_by_addr_port_digest(addr,
+ port,
+ NULL);
+ return bridge ? bridge->socks_args : NULL;
+}
+
+/** We need to ask <b>bridge</b> for its server descriptor. */
+static void
+launch_direct_bridge_descriptor_fetch(bridge_info_t *bridge)
+{
+ const or_options_t *options = get_options();
+
+ if (connection_get_by_type_addr_port_purpose(
+ CONN_TYPE_DIR, &bridge->addr, bridge->port,
+ DIR_PURPOSE_FETCH_SERVERDESC))
+ return; /* it's already on the way */
+
+ if (routerset_contains_bridge(options->ExcludeNodes, bridge)) {
+ download_status_mark_impossible(&bridge->fetch_status);
+ log_warn(LD_APP, "Not using bridge at %s: it is in ExcludeNodes.",
+ safe_str_client(fmt_and_decorate_addr(&bridge->addr)));
+ return;
+ }
+
+ directory_initiate_command(&bridge->addr,
+ bridge->port, 0/*no dirport*/,
+ bridge->identity,
+ DIR_PURPOSE_FETCH_SERVERDESC,
+ ROUTER_PURPOSE_BRIDGE,
+ DIRIND_ONEHOP, "authority.z", NULL, 0, 0);
+}
+
+/** Fetching the bridge descriptor from the bridge authority returned a
+ * "not found". Fall back to trying a direct fetch. */
+void
+retry_bridge_descriptor_fetch_directly(const char *digest)
+{
+ bridge_info_t *bridge = find_bridge_by_digest(digest);
+ if (!bridge)
+ return; /* not found? oh well. */
+
+ launch_direct_bridge_descriptor_fetch(bridge);
+}
+
+/** For each bridge in our list for which we don't currently have a
+ * descriptor, fetch a new copy of its descriptor -- either directly
+ * from the bridge or via a bridge authority. */
+void
+fetch_bridge_descriptors(const or_options_t *options, time_t now)
+{
+ int num_bridge_auths = get_n_authorities(BRIDGE_DIRINFO);
+ int ask_bridge_directly;
+ int can_use_bridge_authority;
+
+ if (!bridge_list)
+ return;
+
+ /* If we still have unconfigured managed proxies, don't go and
+ connect to a bridge. */
+ if (pt_proxies_configuration_pending())
+ return;
+
+ SMARTLIST_FOREACH_BEGIN(bridge_list, bridge_info_t *, bridge)
+ {
+ if (!download_status_is_ready(&bridge->fetch_status, now,
+ IMPOSSIBLE_TO_DOWNLOAD))
+ continue; /* don't bother, no need to retry yet */
+ if (routerset_contains_bridge(options->ExcludeNodes, bridge)) {
+ download_status_mark_impossible(&bridge->fetch_status);
+ log_warn(LD_APP, "Not using bridge at %s: it is in ExcludeNodes.",
+ safe_str_client(fmt_and_decorate_addr(&bridge->addr)));
+ continue;
+ }
+
+ /* schedule another fetch as if this one will fail, in case it does */
+ download_status_failed(&bridge->fetch_status, 0);
+
+ can_use_bridge_authority = !tor_digest_is_zero(bridge->identity) &&
+ num_bridge_auths;
+ ask_bridge_directly = !can_use_bridge_authority ||
+ !options->UpdateBridgesFromAuthority;
+ log_debug(LD_DIR, "ask_bridge_directly=%d (%d, %d, %d)",
+ ask_bridge_directly, tor_digest_is_zero(bridge->identity),
+ !options->UpdateBridgesFromAuthority, !num_bridge_auths);
+
+ if (ask_bridge_directly &&
+ !fascist_firewall_allows_address_or(&bridge->addr, bridge->port)) {
+ log_notice(LD_DIR, "Bridge at '%s' isn't reachable by our "
+ "firewall policy. %s.",
+ fmt_addrport(&bridge->addr, bridge->port),
+ can_use_bridge_authority ?
+ "Asking bridge authority instead" : "Skipping");
+ if (can_use_bridge_authority)
+ ask_bridge_directly = 0;
+ else
+ continue;
+ }
+
+ if (ask_bridge_directly) {
+ /* we need to ask the bridge itself for its descriptor. */
+ launch_direct_bridge_descriptor_fetch(bridge);
+ } else {
+ /* We have a digest and we want to ask an authority. We could
+ * combine all the requests into one, but that may give more
+ * hints to the bridge authority than we want to give. */
+ char resource[10 + HEX_DIGEST_LEN];
+ memcpy(resource, "fp/", 3);
+ base16_encode(resource+3, HEX_DIGEST_LEN+1,
+ bridge->identity, DIGEST_LEN);
+ memcpy(resource+3+HEX_DIGEST_LEN, ".z", 3);
+ log_info(LD_DIR, "Fetching bridge info '%s' from bridge authority.",
+ resource);
+ directory_get_from_dirserver(DIR_PURPOSE_FETCH_SERVERDESC,
+ ROUTER_PURPOSE_BRIDGE, resource, 0);
+ }
+ }
+ SMARTLIST_FOREACH_END(bridge);
+}
+
+/** If our <b>bridge</b> is configured to be a different address than
+ * the bridge gives in <b>node</b>, rewrite the routerinfo
+ * we received to use the address we meant to use. Now we handle
+ * multihomed bridges better.
+ */
+static void
+rewrite_node_address_for_bridge(const bridge_info_t *bridge, node_t *node)
+{
+ /* XXXX move this function. */
+ /* XXXX overridden addresses should really live in the node_t, so that the
+ * routerinfo_t and the microdesc_t can be immutable. But we can only
+ * do that safely if we know that no function that connects to an OR
+ * does so through an address from any source other than node_get_addr().
+ */
+ tor_addr_t addr;
+
+ if (node->ri) {
+ routerinfo_t *ri = node->ri;
+ tor_addr_from_ipv4h(&addr, ri->addr);
+
+ if ((!tor_addr_compare(&bridge->addr, &addr, CMP_EXACT) &&
+ bridge->port == ri->or_port) ||
+ (!tor_addr_compare(&bridge->addr, &ri->ipv6_addr, CMP_EXACT) &&
+ bridge->port == ri->ipv6_orport)) {
+ /* they match, so no need to do anything */
+ } else {
+ if (tor_addr_family(&bridge->addr) == AF_INET) {
+ ri->addr = tor_addr_to_ipv4h(&bridge->addr);
+ ri->or_port = bridge->port;
+ log_info(LD_DIR,
+ "Adjusted bridge routerinfo for '%s' to match configured "
+ "address %s:%d.",
+ ri->nickname, fmt_addr32(ri->addr), ri->or_port);
+ } else if (tor_addr_family(&bridge->addr) == AF_INET6) {
+ tor_addr_copy(&ri->ipv6_addr, &bridge->addr);
+ ri->ipv6_orport = bridge->port;
+ log_info(LD_DIR,
+ "Adjusted bridge routerinfo for '%s' to match configured "
+ "address %s.",
+ ri->nickname, fmt_addrport(&ri->ipv6_addr, ri->ipv6_orport));
+ } else {
+ log_err(LD_BUG, "Address family not supported: %d.",
+ tor_addr_family(&bridge->addr));
+ return;
+ }
+ }
+
+ /* Mark which address to use based on which bridge_t we got. */
+ node->ipv6_preferred = (tor_addr_family(&bridge->addr) == AF_INET6 &&
+ !tor_addr_is_null(&node->ri->ipv6_addr));
+
+ /* XXXipv6 we lack support for falling back to another address for
+ the same relay, warn the user */
+ if (!tor_addr_is_null(&ri->ipv6_addr)) {
+ tor_addr_port_t ap;
+ node_get_pref_orport(node, &ap);
+ log_notice(LD_CONFIG,
+ "Bridge '%s' has both an IPv4 and an IPv6 address. "
+ "Will prefer using its %s address (%s).",
+ ri->nickname,
+ tor_addr_family(&ap.addr) == AF_INET6 ? "IPv6" : "IPv4",
+ fmt_addrport(&ap.addr, ap.port));
+ }
+ }
+ if (node->rs) {
+ routerstatus_t *rs = node->rs;
+ tor_addr_from_ipv4h(&addr, rs->addr);
+
+ if (!tor_addr_compare(&bridge->addr, &addr, CMP_EXACT) &&
+ bridge->port == rs->or_port) {
+ /* they match, so no need to do anything */
+ } else {
+ rs->addr = tor_addr_to_ipv4h(&bridge->addr);
+ rs->or_port = bridge->port;
+ log_info(LD_DIR,
+ "Adjusted bridge routerstatus for '%s' to match "
+ "configured address %s.",
+ rs->nickname, fmt_addrport(&bridge->addr, rs->or_port));
+ }
+ }
+}
+
+/** We just learned a descriptor for a bridge. See if that
+ * digest is in our entry guard list, and add it if not. */
+void
+learned_bridge_descriptor(routerinfo_t *ri, int from_cache)
+{
+ tor_assert(ri);
+ tor_assert(ri->purpose == ROUTER_PURPOSE_BRIDGE);
+ if (get_options()->UseBridges) {
+ int first = num_bridges_usable() <= 1;
+ bridge_info_t *bridge = get_configured_bridge_by_routerinfo(ri);
+ time_t now = time(NULL);
+ router_set_status(ri->cache_info.identity_digest, 1);
+
+ if (bridge) { /* if we actually want to use this one */
+ node_t *node;
+ /* it's here; schedule its re-fetch for a long time from now. */
+ if (!from_cache)
+ download_status_reset(&bridge->fetch_status);
+
+ node = node_get_mutable_by_id(ri->cache_info.identity_digest);
+ tor_assert(node);
+ rewrite_node_address_for_bridge(bridge, node);
+ add_an_entry_guard(node, 1, 1, 0, 0);
+
+ log_notice(LD_DIR, "new bridge descriptor '%s' (%s): %s", ri->nickname,
+ from_cache ? "cached" : "fresh", router_describe(ri));
+ /* set entry->made_contact so if it goes down we don't drop it from
+ * our entry node list */
+ entry_guard_register_connect_status(ri->cache_info.identity_digest,
+ 1, 0, now);
+ if (first) {
+ routerlist_retry_directory_downloads(now);
+ }
+ }
+ }
+}
+
+/** Return the number of bridges that have descriptors that
+ * are marked with purpose 'bridge' and are running.
+ *
+ * We use this function to decide if we're ready to start building
+ * circuits through our bridges, or if we need to wait until the
+ * directory "server/authority" requests finish. */
+int
+any_bridge_descriptors_known(void)
+{
+ tor_assert(get_options()->UseBridges);
+ return choose_random_entry(NULL) != NULL;
+}
+
+/** Return the number of bridges that have descriptors that are marked with
+ * purpose 'bridge' and are running.
+ */
+static int
+num_bridges_usable(void)
+{
+ int n_options = 0;
+ tor_assert(get_options()->UseBridges);
+ (void) choose_random_entry_impl(NULL, 0, 0, &n_options);
+ return n_options;
+}
+
+/** Return 1 if we have at least one descriptor for an entry guard
+ * (bridge or member of EntryNodes) and all descriptors we know are
+ * down. Else return 0. If <b>act</b> is 1, then mark the down guards
+ * up; else just observe and report. */
+static int
+entries_retry_helper(const or_options_t *options, int act)
+{
+ const node_t *node;
+ int any_known = 0;
+ int any_running = 0;
+ int need_bridges = options->UseBridges != 0;
+ if (!entry_guards)
+ entry_guards = smartlist_new();
+ SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, e) {
+ node = node_get_by_id(e->identity);
+ if (node && node_has_descriptor(node) &&
+ node_is_bridge(node) == need_bridges) {
+ any_known = 1;
+ if (node->is_running)
+ any_running = 1; /* some entry is both known and running */
+ else if (act) {
+ /* Mark all current connections to this OR as unhealthy, since
+ * otherwise there could be one that started 30 seconds
+ * ago, and in 30 seconds it will time out, causing us to mark
+ * the node down and undermine the retry attempt. We mark even
+ * the established conns, since if the network just came back
+ * we'll want to attach circuits to fresh conns. */
+ connection_or_set_bad_connections(node->identity, 1);
+
+ /* mark this entry node for retry */
+ router_set_status(node->identity, 1);
+ e->can_retry = 1;
+ e->bad_since = 0;
+ }
+ }
+ } SMARTLIST_FOREACH_END(e);
+ log_debug(LD_DIR, "%d: any_known %d, any_running %d",
+ act, any_known, any_running);
+ return any_known && !any_running;
+}
+
+/** Do we know any descriptors for our bridges / entrynodes, and are
+ * all the ones we have descriptors for down? */
+int
+entries_known_but_down(const or_options_t *options)
+{
+ tor_assert(entry_list_is_constrained(options));
+ return entries_retry_helper(options, 0);
+}
+
+/** Mark all down known bridges / entrynodes up. */
+void
+entries_retry_all(const or_options_t *options)
+{
+ tor_assert(entry_list_is_constrained(options));
+ entries_retry_helper(options, 1);
+}
+
+/** Return true if at least one of our bridges runs a Tor version that can
+ * provide microdescriptors to us. If not, we'll fall back to asking for
+ * full descriptors. */
+int
+any_bridge_supports_microdescriptors(void)
+{
+ const node_t *node;
+ if (!get_options()->UseBridges || !entry_guards)
+ return 0;
+ SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, e) {
+ node = node_get_by_id(e->identity);
+ if (node && node->is_running &&
+ node_is_bridge(node) && node_is_a_configured_bridge(node) &&
+ node_understands_microdescriptors(node)) {
+ /* This is one of our current bridges, and we know enough about
+ * it to know that it will be able to answer our microdescriptor
+ * questions. */
+ return 1;
+ }
+ } SMARTLIST_FOREACH_END(e);
+ return 0;
+}
+
+/** Release all storage held by the list of entry guards and related
+ * memory structs. */
+void
+entry_guards_free_all(void)
+{
+ if (entry_guards) {
+ SMARTLIST_FOREACH(entry_guards, entry_guard_t *, e,
+ entry_guard_free(e));
+ smartlist_free(entry_guards);
+ entry_guards = NULL;
+ }
+ clear_bridge_list();
+ smartlist_free(bridge_list);
+ bridge_list = NULL;
+ circuit_build_times_free_timeouts(get_circuit_build_times_mutable());
+}
+
diff --git a/src/or/entrynodes.h b/src/or/entrynodes.h
new file mode 100644
index 000000000..e229f3b79
--- /dev/null
+++ b/src/or/entrynodes.h
@@ -0,0 +1,132 @@
+/* Copyright (c) 2001 Matej Pfajfar.
+ * Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file entrynodes.h
+ * \brief Header file for circuitbuild.c.
+ **/
+
+#ifndef TOR_ENTRYNODES_H
+#define TOR_ENTRYNODES_H
+
+#if 1
+/* XXXX NM I would prefer that all of this stuff be private to
+ * entrynodes.c. */
+
+/** An entry_guard_t represents our information about a chosen long-term
+ * first hop, known as a "helper" node in the literature. We can't just
+ * use a node_t, since we want to remember these even when we
+ * don't have any directory info. */
+typedef struct entry_guard_t {
+ char nickname[MAX_NICKNAME_LEN+1];
+ char identity[DIGEST_LEN];
+ time_t chosen_on_date; /**< Approximately when was this guard added?
+ * "0" if we don't know. */
+ char *chosen_by_version; /**< What tor version added this guard? NULL
+ * if we don't know. */
+ unsigned int made_contact : 1; /**< 0 if we have never connected to this
+ * router, 1 if we have. */
+ unsigned int can_retry : 1; /**< Should we retry connecting to this entry,
+ * in spite of having it marked as unreachable?*/
+ unsigned int path_bias_noticed : 1; /**< Did we alert the user about path
+ * bias for this node already? */
+ unsigned int path_bias_warned : 1; /**< Did we alert the user about path bias
+ * for this node already? */
+ unsigned int path_bias_extreme : 1; /**< Did we alert the user about path
+ * bias for this node already? */
+ unsigned int path_bias_disabled : 1; /**< Have we disabled this node because
+ * of path bias issues? */
+ unsigned int path_bias_use_noticed : 1; /**< Did we alert the user about path
+ * use bias for this node already? */
+ unsigned int path_bias_use_extreme : 1; /**< Did we alert the user about path
+ * use bias for this node already? */
+ unsigned int is_dir_cache : 1; /**< Is this node a directory cache? */
+ time_t bad_since; /**< 0 if this guard is currently usable, or the time at
+ * which it was observed to become (according to the
+ * directory or the user configuration) unusable. */
+ time_t unreachable_since; /**< 0 if we can connect to this guard, or the
+ * time at which we first noticed we couldn't
+ * connect to it. */
+ time_t last_attempted; /**< 0 if we can connect to this guard, or the time
+ * at which we last failed to connect to it. */
+
+ double circ_attempts; /**< Number of circuits this guard has "attempted" */
+ double circ_successes; /**< Number of successfully built circuits using
+ * this guard as first hop. */
+ double successful_circuits_closed; /**< Number of circuits that carried
+ * streams successfully. */
+ double collapsed_circuits; /**< Number of fully built circuits that were
+ * remotely closed before any streams were
+ * attempted. */
+ double unusable_circuits; /**< Number of circuits for which streams were
+ * attempted, but none succeeded. */
+ double timeouts; /**< Number of 'right-censored' circuit timeouts for this
+ * guard. */
+ double use_attempts; /**< Number of circuits we tried to use with streams */
+ double use_successes; /**< Number of successfully used circuits using
+ * this guard as first hop. */
+} entry_guard_t;
+
+entry_guard_t *entry_guard_get_by_id_digest(const char *digest);
+void entry_guards_changed(void);
+const smartlist_t *get_entry_guards(void);
+int num_live_entry_guards(int for_directory);
+
+#endif
+
+void remove_all_entry_guards(void);
+
+void entry_guards_compute_status(const or_options_t *options, time_t now);
+int entry_guard_register_connect_status(const char *digest, int succeeded,
+ int mark_relay_status, time_t now);
+void entry_nodes_should_be_added(void);
+int entry_list_is_constrained(const or_options_t *options);
+const node_t *choose_random_entry(cpath_build_state_t *state);
+const node_t *choose_random_dirguard(dirinfo_type_t t);
+int entry_guards_parse_state(or_state_t *state, int set, char **msg);
+void entry_guards_update_state(or_state_t *state);
+int getinfo_helper_entry_guards(control_connection_t *conn,
+ const char *question, char **answer,
+ const char **errmsg);
+
+void mark_bridge_list(void);
+void sweep_bridge_list(void);
+
+int routerinfo_is_a_configured_bridge(const routerinfo_t *ri);
+int node_is_a_configured_bridge(const node_t *node);
+void learned_router_identity(const tor_addr_t *addr, uint16_t port,
+ const char *digest);
+struct bridge_line_t;
+void bridge_add_from_config(struct bridge_line_t *bridge_line);
+void retry_bridge_descriptor_fetch_directly(const char *digest);
+void fetch_bridge_descriptors(const or_options_t *options, time_t now);
+void learned_bridge_descriptor(routerinfo_t *ri, int from_cache);
+int any_bridge_descriptors_known(void);
+int entries_known_but_down(const or_options_t *options);
+void entries_retry_all(const or_options_t *options);
+
+int any_bridge_supports_microdescriptors(void);
+const smartlist_t *get_socks_args_by_bridge_addrport(const tor_addr_t *addr,
+ uint16_t port);
+
+int any_bridges_dont_support_microdescriptors(void);
+
+void entry_guards_free_all(void);
+
+const char *find_transport_name_by_bridge_addrport(const tor_addr_t *addr,
+ uint16_t port);
+struct transport_t;
+int get_transport_by_bridge_addrport(const tor_addr_t *addr, uint16_t port,
+ const struct transport_t **transport);
+
+int transport_is_needed(const char *transport_name);
+int validate_pluggable_transports_config(void);
+
+double pathbias_get_close_success_count(entry_guard_t *guard);
+double pathbias_get_use_success_count(entry_guard_t *guard);
+
+#endif
+
diff --git a/src/or/eventdns_tor.h b/src/or/eventdns_tor.h
index 4c40b3524..69662281b 100644
--- a/src/or/eventdns_tor.h
+++ b/src/or/eventdns_tor.h
@@ -1,6 +1,9 @@
-/* Copyright (c) 2007-2012, The Tor Project, Inc. */
+/* Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
+#ifndef TOR_EVENTDNS_TOR_H
+#define TOR_EVENTDNS_TOR_H
+
#include "orconfig.h"
#define DNS_USE_OPENSSL_FOR_ID
#ifndef HAVE_UINT
@@ -18,3 +21,5 @@ typedef unsigned char u_char;
#include "util.h"
#include "compat.h"
+#endif
+
diff --git a/src/or/ext_orport.c b/src/or/ext_orport.c
new file mode 100644
index 000000000..0d28a9199
--- /dev/null
+++ b/src/or/ext_orport.c
@@ -0,0 +1,648 @@
+/* Copyright (c) 2012, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file ext_orport.c
+ * \brief Code implementing the Extended ORPort.
+*/
+
+#define EXT_ORPORT_PRIVATE
+#include "or.h"
+#include "connection.h"
+#include "connection_or.h"
+#include "ext_orport.h"
+#include "control.h"
+#include "config.h"
+#include "util.h"
+#include "main.h"
+
+/** Allocate and return a structure capable of holding an Extended
+ * ORPort message of body length <b>len</b>. */
+ext_or_cmd_t *
+ext_or_cmd_new(uint16_t len)
+{
+ size_t size = STRUCT_OFFSET(ext_or_cmd_t, body) + len;
+ ext_or_cmd_t *cmd = tor_malloc(size);
+ cmd->len = len;
+ return cmd;
+}
+
+/** Deallocate the Extended ORPort message in <b>cmd</b>. */
+void
+ext_or_cmd_free(ext_or_cmd_t *cmd)
+{
+ tor_free(cmd);
+}
+
+/** Get an Extended ORPort message from <b>conn</b>, and place it in
+ * <b>out</b>. Return -1 on fail, 0 if we need more data, and 1 if we
+ * successfully extracted an Extended ORPort command from the
+ * buffer. */
+static int
+connection_fetch_ext_or_cmd_from_buf(connection_t *conn, ext_or_cmd_t **out)
+{
+ IF_HAS_BUFFEREVENT(conn, {
+ struct evbuffer *input = bufferevent_get_input(conn->bufev);
+ return fetch_ext_or_command_from_evbuffer(input, out);
+ }) ELSE_IF_NO_BUFFEREVENT {
+ return fetch_ext_or_command_from_buf(conn->inbuf, out);
+ }
+}
+
+/** Write an Extended ORPort message to <b>conn</b>. Use
+ * <b>command</b> as the command type, <b>bodylen</b> as the body
+ * length, and <b>body</b>, if it's present, as the body of the
+ * message. */
+STATIC int
+connection_write_ext_or_command(connection_t *conn,
+ uint16_t command,
+ const char *body,
+ size_t bodylen)
+{
+ char header[4];
+ if (bodylen > UINT16_MAX)
+ return -1;
+ set_uint16(header, htons(command));
+ set_uint16(header+2, htons(bodylen));
+ connection_write_to_buf(header, 4, conn);
+ if (bodylen) {
+ tor_assert(body);
+ connection_write_to_buf(body, bodylen, conn);
+ }
+ return 0;
+}
+
+/** Transition from an Extended ORPort which accepts Extended ORPort
+ * messages, to an Extended ORport which accepts OR traffic. */
+static void
+connection_ext_or_transition(or_connection_t *conn)
+{
+ tor_assert(conn->base_.type == CONN_TYPE_EXT_OR);
+
+ conn->base_.type = CONN_TYPE_OR;
+ TO_CONN(conn)->state = 0; // set the state to a neutral value
+ control_event_or_conn_status(conn, OR_CONN_EVENT_NEW, 0);
+ connection_tls_start_handshake(conn, 1);
+}
+
+/** Length of authentication cookie. */
+#define EXT_OR_PORT_AUTH_COOKIE_LEN 32
+/** Length of the header of the cookie file. */
+#define EXT_OR_PORT_AUTH_COOKIE_HEADER_LEN 32
+/** Static cookie file header. */
+#define EXT_OR_PORT_AUTH_COOKIE_HEADER "! Extended ORPort Auth Cookie !\x0a"
+/** Length of safe-cookie protocol hashes. */
+#define EXT_OR_PORT_AUTH_HASH_LEN DIGEST256_LEN
+/** Length of safe-cookie protocol nonces. */
+#define EXT_OR_PORT_AUTH_NONCE_LEN 32
+/** Safe-cookie protocol constants. */
+#define EXT_OR_PORT_AUTH_SERVER_TO_CLIENT_CONST \
+ "ExtORPort authentication server-to-client hash"
+#define EXT_OR_PORT_AUTH_CLIENT_TO_SERVER_CONST \
+ "ExtORPort authentication client-to-server hash"
+
+/* Code to indicate cookie authentication */
+#define EXT_OR_AUTHTYPE_SAFECOOKIE 0x01
+
+/** If true, we've set ext_or_auth_cookie to a secret code and stored
+ * it to disk. */
+STATIC int ext_or_auth_cookie_is_set = 0;
+/** If ext_or_auth_cookie_is_set, a secret cookie that we've stored to disk
+ * and which we're using to authenticate controllers. (If the controller can
+ * read it off disk, it has permission to connect.) */
+STATIC uint8_t *ext_or_auth_cookie = NULL;
+
+/** Helper: Return a newly allocated string containing a path to the
+ * file where we store our authentication cookie. */
+char *
+get_ext_or_auth_cookie_file_name(void)
+{
+ const or_options_t *options = get_options();
+ if (options->ExtORPortCookieAuthFile &&
+ strlen(options->ExtORPortCookieAuthFile)) {
+ return tor_strdup(options->ExtORPortCookieAuthFile);
+ } else {
+ return get_datadir_fname("extended_orport_auth_cookie");
+ }
+}
+
+/* Initialize the cookie-based authentication system of the
+ * Extended ORPort. If <b>is_enabled</b> is 0, then disable the cookie
+ * authentication system. */
+int
+init_ext_or_cookie_authentication(int is_enabled)
+{
+ char *fname = NULL;
+ int retval;
+
+ if (!is_enabled) {
+ ext_or_auth_cookie_is_set = 0;
+ return 0;
+ }
+
+ fname = get_ext_or_auth_cookie_file_name();
+ retval = init_cookie_authentication(fname, EXT_OR_PORT_AUTH_COOKIE_HEADER,
+ EXT_OR_PORT_AUTH_COOKIE_HEADER_LEN,
+ &ext_or_auth_cookie,
+ &ext_or_auth_cookie_is_set);
+ tor_free(fname);
+ return retval;
+}
+
+/** Read data from <b>conn</b> and see if the client sent us the
+ * authentication type that she prefers to use in this session.
+ *
+ * Return -1 if we received corrupted data or if we don't support the
+ * authentication type. Return 0 if we need more data in
+ * <b>conn</b>. Return 1 if the authentication type negotiation was
+ * successful. */
+static int
+connection_ext_or_auth_neg_auth_type(connection_t *conn)
+{
+ char authtype[1] = {0};
+
+ if (connection_get_inbuf_len(conn) < 1)
+ return 0;
+
+ if (connection_fetch_from_buf(authtype, 1, conn) < 0)
+ return -1;
+
+ log_debug(LD_GENERAL, "Client wants us to use %d auth type", authtype[0]);
+ if (authtype[0] != EXT_OR_AUTHTYPE_SAFECOOKIE) {
+ /* '1' is the only auth type supported atm */
+ return -1;
+ }
+
+ conn->state = EXT_OR_CONN_STATE_AUTH_WAIT_CLIENT_NONCE;
+ return 1;
+}
+
+/** DOCDOC */
+STATIC int
+handle_client_auth_nonce(const char *client_nonce, size_t client_nonce_len,
+ char **client_hash_out,
+ char **reply_out, size_t *reply_len_out)
+{
+ char server_hash[EXT_OR_PORT_AUTH_HASH_LEN] = {0};
+ char server_nonce[EXT_OR_PORT_AUTH_NONCE_LEN] = {0};
+ char *reply;
+ size_t reply_len;
+
+ if (client_nonce_len != EXT_OR_PORT_AUTH_NONCE_LEN)
+ return -1;
+
+ /* Get our nonce */
+ if (crypto_rand(server_nonce, EXT_OR_PORT_AUTH_NONCE_LEN) < 0)
+ return -1;
+
+ { /* set up macs */
+ size_t hmac_s_msg_len = strlen(EXT_OR_PORT_AUTH_SERVER_TO_CLIENT_CONST) +
+ 2*EXT_OR_PORT_AUTH_NONCE_LEN;
+ size_t hmac_c_msg_len = strlen(EXT_OR_PORT_AUTH_CLIENT_TO_SERVER_CONST) +
+ 2*EXT_OR_PORT_AUTH_NONCE_LEN;
+
+ char *hmac_s_msg = tor_malloc_zero(hmac_s_msg_len);
+ char *hmac_c_msg = tor_malloc_zero(hmac_c_msg_len);
+ char *correct_client_hash = tor_malloc_zero(EXT_OR_PORT_AUTH_HASH_LEN);
+
+ memcpy(hmac_s_msg,
+ EXT_OR_PORT_AUTH_SERVER_TO_CLIENT_CONST,
+ strlen(EXT_OR_PORT_AUTH_SERVER_TO_CLIENT_CONST));
+ memcpy(hmac_s_msg + strlen(EXT_OR_PORT_AUTH_SERVER_TO_CLIENT_CONST),
+ client_nonce, EXT_OR_PORT_AUTH_NONCE_LEN);
+ memcpy(hmac_s_msg + strlen(EXT_OR_PORT_AUTH_SERVER_TO_CLIENT_CONST) +
+ EXT_OR_PORT_AUTH_NONCE_LEN,
+ server_nonce, EXT_OR_PORT_AUTH_NONCE_LEN);
+
+ memcpy(hmac_c_msg,
+ EXT_OR_PORT_AUTH_CLIENT_TO_SERVER_CONST,
+ strlen(EXT_OR_PORT_AUTH_CLIENT_TO_SERVER_CONST));
+ memcpy(hmac_c_msg + strlen(EXT_OR_PORT_AUTH_CLIENT_TO_SERVER_CONST),
+ client_nonce, EXT_OR_PORT_AUTH_NONCE_LEN);
+ memcpy(hmac_c_msg + strlen(EXT_OR_PORT_AUTH_CLIENT_TO_SERVER_CONST) +
+ EXT_OR_PORT_AUTH_NONCE_LEN,
+ server_nonce, EXT_OR_PORT_AUTH_NONCE_LEN);
+
+ crypto_hmac_sha256(server_hash,
+ (char*)ext_or_auth_cookie,
+ EXT_OR_PORT_AUTH_COOKIE_LEN,
+ hmac_s_msg,
+ hmac_s_msg_len);
+
+ crypto_hmac_sha256(correct_client_hash,
+ (char*)ext_or_auth_cookie,
+ EXT_OR_PORT_AUTH_COOKIE_LEN,
+ hmac_c_msg,
+ hmac_c_msg_len);
+
+ /* Store the client hash we generated. We will need to compare it
+ with the hash sent by the client. */
+ *client_hash_out = correct_client_hash;
+
+ memwipe(hmac_s_msg, 0, hmac_s_msg_len);
+ memwipe(hmac_c_msg, 0, hmac_c_msg_len);
+
+ tor_free(hmac_s_msg);
+ tor_free(hmac_c_msg);
+ }
+
+ { /* debug logging */ /* XXX disable this codepath if not logging on debug?*/
+ char server_hash_encoded[(2*EXT_OR_PORT_AUTH_HASH_LEN) + 1];
+ char server_nonce_encoded[(2*EXT_OR_PORT_AUTH_NONCE_LEN) + 1];
+ char client_nonce_encoded[(2*EXT_OR_PORT_AUTH_NONCE_LEN) + 1];
+
+ base16_encode(server_hash_encoded, sizeof(server_hash_encoded),
+ server_hash, sizeof(server_hash));
+ base16_encode(server_nonce_encoded, sizeof(server_nonce_encoded),
+ server_nonce, sizeof(server_nonce));
+ base16_encode(client_nonce_encoded, sizeof(client_nonce_encoded),
+ client_nonce, EXT_OR_PORT_AUTH_NONCE_LEN);
+
+ log_debug(LD_GENERAL,
+ "server_hash: '%s'\nserver_nonce: '%s'\nclient_nonce: '%s'",
+ server_hash_encoded, server_nonce_encoded, client_nonce_encoded);
+
+ memwipe(server_hash_encoded, 0, sizeof(server_hash_encoded));
+ memwipe(server_nonce_encoded, 0, sizeof(server_nonce_encoded));
+ memwipe(client_nonce_encoded, 0, sizeof(client_nonce_encoded));
+ }
+
+ { /* write reply: (server_hash, server_nonce) */
+
+ reply_len = EXT_OR_PORT_AUTH_COOKIE_LEN+EXT_OR_PORT_AUTH_NONCE_LEN;
+ reply = tor_malloc_zero(reply_len);
+ memcpy(reply, server_hash, EXT_OR_PORT_AUTH_HASH_LEN);
+ memcpy(reply + EXT_OR_PORT_AUTH_HASH_LEN, server_nonce,
+ EXT_OR_PORT_AUTH_NONCE_LEN);
+ }
+
+ *reply_out = reply;
+ *reply_len_out = reply_len;
+
+ return 0;
+}
+
+/** Read the client's nonce out of <b>conn</b>, setup the safe-cookie
+ * crypto, and then send our own hash and nonce to the client
+ *
+ * Return -1 if there was an error; return 0 if we need more data in
+ * <b>conn</b>, and return 1 if we successfully retrieved the
+ * client's nonce and sent our own. */
+static int
+connection_ext_or_auth_handle_client_nonce(connection_t *conn)
+{
+ char client_nonce[EXT_OR_PORT_AUTH_NONCE_LEN];
+ char *reply=NULL;
+ size_t reply_len=0;
+
+ if (!ext_or_auth_cookie_is_set) { /* this should not happen */
+ log_warn(LD_BUG, "Extended ORPort authentication cookie was not set. "
+ "That's weird since we should have done that on startup. "
+ "This might be a Tor bug, please file a bug report. ");
+ return -1;
+ }
+
+ if (connection_get_inbuf_len(conn) < EXT_OR_PORT_AUTH_NONCE_LEN)
+ return 0;
+
+ if (connection_fetch_from_buf(client_nonce,
+ EXT_OR_PORT_AUTH_NONCE_LEN, conn) < 0)
+ return -1;
+
+ /* We extract the ClientNonce from the received data, and use it to
+ calculate ServerHash and ServerNonce according to proposal 217.
+
+ We also calculate our own ClientHash value and save it in the
+ connection state. We validate it later against the ClientHash
+ sent by the client. */
+ if (handle_client_auth_nonce(client_nonce, sizeof(client_nonce),
+ &TO_OR_CONN(conn)->ext_or_auth_correct_client_hash,
+ &reply, &reply_len) < 0)
+ return -1;
+
+ connection_write_to_buf(reply, reply_len, conn);
+
+ memwipe(reply, 0, reply_len);
+ tor_free(reply);
+
+ log_debug(LD_GENERAL, "Got client nonce, and sent our own nonce and hash.");
+
+ conn->state = EXT_OR_CONN_STATE_AUTH_WAIT_CLIENT_HASH;
+ return 1;
+}
+
+#define connection_ext_or_auth_send_result_success(c) \
+ connection_ext_or_auth_send_result(c, 1)
+#define connection_ext_or_auth_send_result_fail(c) \
+ connection_ext_or_auth_send_result(c, 0)
+
+/** Send authentication results to <b>conn</b>. Successful results if
+ * <b>success</b> is set; failure results otherwise. */
+static void
+connection_ext_or_auth_send_result(connection_t *conn, int success)
+{
+ if (success)
+ connection_write_to_buf("\x01", 1, conn);
+ else
+ connection_write_to_buf("\x00", 1, conn);
+}
+
+/** Receive the client's hash from <b>conn</b>, validate that it's
+ * correct, and then send the authentication results to the client.
+ *
+ * Return -1 if there was an error during validation; return 0 if we
+ * need more data in <b>conn</b>, and return 1 if we successfully
+ * validated the client's hash and sent a happy authentication
+ * result. */
+static int
+connection_ext_or_auth_handle_client_hash(connection_t *conn)
+{
+ char provided_client_hash[EXT_OR_PORT_AUTH_HASH_LEN] = {0};
+
+ if (connection_get_inbuf_len(conn) < EXT_OR_PORT_AUTH_HASH_LEN)
+ return 0;
+
+ if (connection_fetch_from_buf(provided_client_hash,
+ EXT_OR_PORT_AUTH_HASH_LEN, conn) < 0)
+ return -1;
+
+ if (tor_memneq(TO_OR_CONN(conn)->ext_or_auth_correct_client_hash,
+ provided_client_hash, EXT_OR_PORT_AUTH_HASH_LEN)) {
+ log_warn(LD_GENERAL, "Incorrect client hash. Authentication failed.");
+ connection_ext_or_auth_send_result_fail(conn);
+ return -1;
+ }
+
+ log_debug(LD_GENERAL, "Got client's hash and it was legit.");
+
+ /* send positive auth result */
+ connection_ext_or_auth_send_result_success(conn);
+ conn->state = EXT_OR_CONN_STATE_OPEN;
+ return 1;
+}
+
+/** Handle data from <b>or_conn</b> received on Extended ORPort.
+ * Return -1 on error. 0 on unsufficient data. 1 on correct. */
+static int
+connection_ext_or_auth_process_inbuf(or_connection_t *or_conn)
+{
+ connection_t *conn = TO_CONN(or_conn);
+
+ /* State transitions of the Extended ORPort authentication protocol:
+
+ EXT_OR_CONN_STATE_AUTH_WAIT_AUTH_TYPE (start state) ->
+ EXT_OR_CONN_STATE_AUTH_WAIT_CLIENT_NONCE ->
+ EXT_OR_CONN_STATE_AUTH_WAIT_CLIENT_HASH ->
+ EXT_OR_CONN_STATE_OPEN
+
+ During EXT_OR_CONN_STATE_OPEN, data is handled by
+ connection_ext_or_process_inbuf().
+ */
+
+ switch (conn->state) { /* Functionify */
+ case EXT_OR_CONN_STATE_AUTH_WAIT_AUTH_TYPE:
+ return connection_ext_or_auth_neg_auth_type(conn);
+
+ case EXT_OR_CONN_STATE_AUTH_WAIT_CLIENT_NONCE:
+ return connection_ext_or_auth_handle_client_nonce(conn);
+
+ case EXT_OR_CONN_STATE_AUTH_WAIT_CLIENT_HASH:
+ return connection_ext_or_auth_handle_client_hash(conn);
+
+ default:
+ log_warn(LD_BUG, "Encountered unexpected connection state %d while trying "
+ "to process Extended ORPort authentication data.", conn->state);
+ return -1;
+ }
+}
+
+/** Extended ORPort commands (Transport-to-Bridge) */
+#define EXT_OR_CMD_TB_DONE 0x0000
+#define EXT_OR_CMD_TB_USERADDR 0x0001
+#define EXT_OR_CMD_TB_TRANSPORT 0x0002
+
+/** Extended ORPort commands (Bridge-to-Transport) */
+#define EXT_OR_CMD_BT_OKAY 0x1000
+#define EXT_OR_CMD_BT_DENY 0x1001
+#define EXT_OR_CMD_BT_CONTROL 0x1002
+
+/** Process a USERADDR command from the Extended
+ * ORPort. <b>payload</b> is a payload of size <b>len</b>.
+ *
+ * If the USERADDR command was well formed, change the address of
+ * <b>conn</b> to the address on the USERADDR command.
+ *
+ * Return 0 on success and -1 on error. */
+static int
+connection_ext_or_handle_cmd_useraddr(connection_t *conn,
+ const char *payload, uint16_t len)
+{
+ /* Copy address string. */
+ tor_addr_t addr;
+ uint16_t port;
+ char *addr_str;
+ char *address_part=NULL;
+ int res;
+ if (memchr(payload, '\0', len)) {
+ log_fn(LOG_PROTOCOL_WARN, LD_NET, "Unexpected NUL in ExtORPort UserAddr");
+ return -1;
+ }
+
+ addr_str = tor_memdup_nulterm(payload, len);
+
+ res = tor_addr_port_split(LOG_INFO, addr_str, &address_part, &port);
+ tor_free(addr_str);
+ if (res<0)
+ return -1;
+
+ res = tor_addr_parse(&addr, address_part);
+ tor_free(address_part);
+ if (res<0)
+ return -1;
+
+ { /* do some logging */
+ char *old_address = tor_dup_addr(&conn->addr);
+ char *new_address = tor_dup_addr(&addr);
+
+ log_debug(LD_NET, "Received USERADDR."
+ "We rewrite our address from '%s:%u' to '%s:%u'.",
+ safe_str(old_address), conn->port, safe_str(new_address), port);
+
+ tor_free(old_address);
+ tor_free(new_address);
+ }
+
+ /* record the address */
+ tor_addr_copy(&conn->addr, &addr);
+ conn->port = port;
+ if (conn->address) {
+ tor_free(conn->address);
+ }
+ conn->address = tor_dup_addr(&addr);
+
+ return 0;
+}
+
+/** Process a TRANSPORT command from the Extended
+ * ORPort. <b>payload</b> is a payload of size <b>len</b>.
+ *
+ * If the TRANSPORT command was well formed, register the name of the
+ * transport on <b>conn</b>.
+ *
+ * Return 0 on success and -1 on error. */
+static int
+connection_ext_or_handle_cmd_transport(or_connection_t *conn,
+ const char *payload, uint16_t len)
+{
+ char *transport_str;
+ if (memchr(payload, '\0', len)) {
+ log_fn(LOG_PROTOCOL_WARN, LD_NET, "Unexpected NUL in ExtORPort Transport");
+ return -1;
+ }
+
+ transport_str = tor_memdup_nulterm(payload, len);
+
+ /* Transport names MUST be C-identifiers. */
+ if (!string_is_C_identifier(transport_str)) {
+ tor_free(transport_str);
+ return -1;
+ }
+
+ /* If ext_or_transport is already occupied (because the PT sent two
+ * TRANSPORT commands), deallocate the old name and keep the new
+ * one */
+ if (conn->ext_or_transport)
+ tor_free(conn->ext_or_transport);
+
+ conn->ext_or_transport = transport_str;
+ return 0;
+}
+
+#define EXT_OR_CONN_STATE_IS_AUTHENTICATING(st) \
+ ((st) <= EXT_OR_CONN_STATE_AUTH_MAX)
+
+/** Process Extended ORPort messages from <b>or_conn</b>. */
+int
+connection_ext_or_process_inbuf(or_connection_t *or_conn)
+{
+ connection_t *conn = TO_CONN(or_conn);
+ ext_or_cmd_t *command;
+ int r;
+
+ /* DOCDOC Document the state machine and transitions in this function */
+
+ /* If we are still in the authentication stage, process traffic as
+ authentication data: */
+ while (EXT_OR_CONN_STATE_IS_AUTHENTICATING(conn->state)) {
+ log_debug(LD_GENERAL, "Got Extended ORPort authentication data (%u).",
+ (unsigned int) connection_get_inbuf_len(conn));
+ r = connection_ext_or_auth_process_inbuf(or_conn);
+ if (r < 0) {
+ connection_mark_for_close(conn);
+ return -1;
+ } else if (r == 0) {
+ return 0;
+ }
+ /* if r > 0, loop and process more data (if any). */
+ }
+
+ while (1) {
+ log_debug(LD_GENERAL, "Got Extended ORPort data.");
+ command = NULL;
+ r = connection_fetch_ext_or_cmd_from_buf(conn, &command);
+ if (r < 0)
+ goto err;
+ else if (r == 0)
+ return 0; /* need to wait for more data */
+
+ /* Got a command! */
+ tor_assert(command);
+
+ if (command->cmd == EXT_OR_CMD_TB_DONE) {
+ if (connection_get_inbuf_len(conn)) {
+ /* The inbuf isn't empty; the client is misbehaving. */
+ goto err;
+ }
+
+ log_debug(LD_NET, "Received DONE.");
+
+ /* If the transport proxy did not use the TRANSPORT command to
+ * specify the transport name, mark this as unknown transport. */
+ if (!or_conn->ext_or_transport) {
+ /* We write this string this way to avoid ??>, which is a C
+ * trigraph. */
+ or_conn->ext_or_transport = tor_strdup("<?" "?>");
+ }
+
+ connection_write_ext_or_command(conn, EXT_OR_CMD_BT_OKAY, NULL, 0);
+
+ /* can't transition immediately; need to flush first. */
+ conn->state = EXT_OR_CONN_STATE_FLUSHING;
+ connection_stop_reading(conn);
+ } else if (command->cmd == EXT_OR_CMD_TB_USERADDR) {
+ if (connection_ext_or_handle_cmd_useraddr(conn,
+ command->body, command->len) < 0)
+ goto err;
+ } else if (command->cmd == EXT_OR_CMD_TB_TRANSPORT) {
+ if (connection_ext_or_handle_cmd_transport(or_conn,
+ command->body, command->len) < 0)
+ goto err;
+ } else {
+ log_notice(LD_NET,"Got Extended ORPort command we don't regognize (%u).",
+ command->cmd);
+ }
+
+ ext_or_cmd_free(command);
+ }
+
+ return 0;
+
+ err:
+ ext_or_cmd_free(command);
+ connection_mark_for_close(conn);
+ return -1;
+}
+
+/** <b>conn</b> finished flushing Extended ORPort messages to the
+ * network, and is now ready to accept OR traffic. This function
+ * does the transition. */
+int
+connection_ext_or_finished_flushing(or_connection_t *conn)
+{
+ if (conn->base_.state == EXT_OR_CONN_STATE_FLUSHING) {
+ connection_start_reading(TO_CONN(conn));
+ connection_ext_or_transition(conn);
+ }
+ return 0;
+}
+
+/** Initiate Extended ORPort authentication, by sending the list of
+ * supported authentication types to the client. */
+int
+connection_ext_or_start_auth(or_connection_t *or_conn)
+{
+ connection_t *conn = TO_CONN(or_conn);
+ const uint8_t authtypes[] = {
+ /* We only support authtype '1' for now. */
+ EXT_OR_AUTHTYPE_SAFECOOKIE,
+ /* Marks the end of the list. */
+ 0
+ };
+
+ log_debug(LD_GENERAL,
+ "ExtORPort authentication: Sending supported authentication types");
+
+ connection_write_to_buf((const char *)authtypes, sizeof(authtypes), conn);
+ conn->state = EXT_OR_CONN_STATE_AUTH_WAIT_AUTH_TYPE;
+
+ return 0;
+}
+
+/** Free any leftover allocated memory of the ext_orport.c subsystem. */
+void
+ext_orport_free_all(void)
+{
+ if (ext_or_auth_cookie) /* Free the auth cookie */
+ tor_free(ext_or_auth_cookie);
+}
+
diff --git a/src/or/ext_orport.h b/src/or/ext_orport.h
new file mode 100644
index 000000000..ce45e5f41
--- /dev/null
+++ b/src/or/ext_orport.h
@@ -0,0 +1,42 @@
+/* Copyright (c) 2001 Matej Pfajfar.
+ * Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#ifndef EXT_ORPORT_H
+#define EXT_ORPORT_H
+
+int connection_ext_or_start_auth(or_connection_t *or_conn);
+
+ext_or_cmd_t *ext_or_cmd_new(uint16_t len);
+void ext_or_cmd_free(ext_or_cmd_t *cmd);
+void connection_or_set_ext_or_identifier(or_connection_t *conn);
+void connection_or_remove_from_ext_or_id_map(or_connection_t *conn);
+void connection_or_clear_ext_or_id_map(void);
+or_connection_t *connection_or_get_by_ext_or_id(const char *id);
+
+int connection_ext_or_finished_flushing(or_connection_t *conn);
+int connection_ext_or_process_inbuf(or_connection_t *or_conn);
+
+int init_ext_or_cookie_authentication(int is_enabled);
+char *get_ext_or_auth_cookie_file_name(void);
+void ext_orport_free_all(void);
+
+#ifdef EXT_ORPORT_PRIVATE
+STATIC int connection_write_ext_or_command(connection_t *conn,
+ uint16_t command,
+ const char *body,
+ size_t bodylen);
+STATIC int handle_client_auth_nonce(const char *client_nonce,
+ size_t client_nonce_len,
+ char **client_hash_out,
+ char **reply_out, size_t *reply_len_out);
+#ifdef TOR_UNIT_TESTS
+extern uint8_t *ext_or_auth_cookie;
+extern int ext_or_auth_cookie_is_set;
+#endif
+#endif
+
+#endif
+
diff --git a/src/or/fp_pair.c b/src/or/fp_pair.c
new file mode 100644
index 000000000..55e4c89a4
--- /dev/null
+++ b/src/or/fp_pair.c
@@ -0,0 +1,299 @@
+/* Copyright (c) 2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#include "or.h"
+#include "fp_pair.h"
+
+/* Define fp_pair_map_t structures */
+
+struct fp_pair_map_entry_s {
+ HT_ENTRY(fp_pair_map_entry_s) node;
+ void *val;
+ fp_pair_t key;
+};
+
+struct fp_pair_map_s {
+ HT_HEAD(fp_pair_map_impl, fp_pair_map_entry_s) head;
+};
+
+/*
+ * Hash function and equality checker for fp_pair_map_t
+ */
+
+/** Compare fp_pair_entry_t objects by key value. */
+static INLINE int
+fp_pair_map_entries_eq(const fp_pair_map_entry_t *a,
+ const fp_pair_map_entry_t *b)
+{
+ return tor_memeq(&(a->key), &(b->key), sizeof(fp_pair_t));
+}
+
+/** Return a hash value for an fp_pair_entry_t. */
+static INLINE unsigned int
+fp_pair_map_entry_hash(const fp_pair_map_entry_t *a)
+{
+ tor_assert(sizeof(a->key) == DIGEST_LEN*2);
+ return (unsigned) siphash24g(&a->key, DIGEST_LEN*2);
+}
+
+/*
+ * Hash table functions for fp_pair_map_t
+ */
+
+HT_PROTOTYPE(fp_pair_map_impl, fp_pair_map_entry_s, node,
+ fp_pair_map_entry_hash, fp_pair_map_entries_eq)
+HT_GENERATE(fp_pair_map_impl, fp_pair_map_entry_s, node,
+ fp_pair_map_entry_hash, fp_pair_map_entries_eq,
+ 0.6, tor_malloc, tor_realloc, tor_free)
+
+/** Constructor to create a new empty map from fp_pair_t to void *
+ */
+
+fp_pair_map_t *
+fp_pair_map_new(void)
+{
+ fp_pair_map_t *result;
+
+ result = tor_malloc(sizeof(fp_pair_map_t));
+ HT_INIT(fp_pair_map_impl, &result->head);
+ return result;
+}
+
+/** Set the current value for key to val; returns the previous
+ * value for key if one was set, or NULL if one was not.
+ */
+
+void *
+fp_pair_map_set(fp_pair_map_t *map, const fp_pair_t *key, void *val)
+{
+ fp_pair_map_entry_t *resolve;
+ fp_pair_map_entry_t search;
+ void *oldval;
+
+ tor_assert(map);
+ tor_assert(key);
+ tor_assert(val);
+
+ memcpy(&(search.key), key, sizeof(*key));
+ resolve = HT_FIND(fp_pair_map_impl, &(map->head), &search);
+ if (resolve) {
+ oldval = resolve->val;
+ resolve->val = val;
+ } else {
+ resolve = tor_malloc_zero(sizeof(fp_pair_map_entry_t));
+ memcpy(&(resolve->key), key, sizeof(*key));
+ resolve->val = val;
+ HT_INSERT(fp_pair_map_impl, &(map->head), resolve);
+ oldval = NULL;
+ }
+
+ return oldval;
+}
+
+/** Set the current value for the key (first, second) to val; returns
+ * the previous value for key if one was set, or NULL if one was not.
+ */
+
+void *
+fp_pair_map_set_by_digests(fp_pair_map_t *map,
+ const char *first, const char *second,
+ void *val)
+{
+ fp_pair_t k;
+
+ tor_assert(first);
+ tor_assert(second);
+
+ memcpy(k.first, first, DIGEST_LEN);
+ memcpy(k.second, second, DIGEST_LEN);
+
+ return fp_pair_map_set(map, &k, val);
+}
+
+/** Return the current value associated with key, or NULL if no value is set.
+ */
+
+void *
+fp_pair_map_get(const fp_pair_map_t *map, const fp_pair_t *key)
+{
+ fp_pair_map_entry_t *resolve;
+ fp_pair_map_entry_t search;
+ void *val = NULL;
+
+ tor_assert(map);
+ tor_assert(key);
+
+ memcpy(&(search.key), key, sizeof(*key));
+ resolve = HT_FIND(fp_pair_map_impl, &(map->head), &search);
+ if (resolve) val = resolve->val;
+
+ return val;
+}
+
+/** Return the current value associated the key (first, second), or
+ * NULL if no value is set.
+ */
+
+void *
+fp_pair_map_get_by_digests(const fp_pair_map_t *map,
+ const char *first, const char *second)
+{
+ fp_pair_t k;
+
+ tor_assert(first);
+ tor_assert(second);
+
+ memcpy(k.first, first, DIGEST_LEN);
+ memcpy(k.second, second, DIGEST_LEN);
+
+ return fp_pair_map_get(map, &k);
+}
+
+/** Remove the value currently associated with key from the map.
+ * Return the value if one was set, or NULL if there was no entry for
+ * key. The caller must free any storage associated with the
+ * returned value.
+ */
+
+void *
+fp_pair_map_remove(fp_pair_map_t *map, const fp_pair_t *key)
+{
+ fp_pair_map_entry_t *resolve;
+ fp_pair_map_entry_t search;
+ void *val = NULL;
+
+ tor_assert(map);
+ tor_assert(key);
+
+ memcpy(&(search.key), key, sizeof(*key));
+ resolve = HT_REMOVE(fp_pair_map_impl, &(map->head), &search);
+ if (resolve) {
+ val = resolve->val;
+ tor_free(resolve);
+ }
+
+ return val;
+}
+
+/** Remove all entries from map, and deallocate storage for those entries.
+ * If free_val is provided, it is invoked on every value in map.
+ */
+
+void
+fp_pair_map_free(fp_pair_map_t *map, void (*free_val)(void*))
+{
+ fp_pair_map_entry_t **ent, **next, *this;
+
+ if (map) {
+ for (ent = HT_START(fp_pair_map_impl, &(map->head));
+ ent != NULL; ent = next) {
+ this = *ent;
+ next = HT_NEXT_RMV(fp_pair_map_impl, &(map->head), ent);
+ if (free_val) free_val(this->val);
+ tor_free(this);
+ }
+ tor_assert(HT_EMPTY(&(map->head)));
+ HT_CLEAR(fp_pair_map_impl, &(map->head));
+ tor_free(map);
+ }
+}
+
+/** Return true iff map has no entries.
+ */
+
+int
+fp_pair_map_isempty(const fp_pair_map_t *map)
+{
+ tor_assert(map);
+
+ return HT_EMPTY(&(map->head));
+}
+
+/** Return the number of items in map.
+ */
+
+int
+fp_pair_map_size(const fp_pair_map_t *map)
+{
+ tor_assert(map);
+
+ return HT_SIZE(&(map->head));
+}
+
+/** return an iterator pointing to the start of map.
+ */
+
+fp_pair_map_iter_t *
+fp_pair_map_iter_init(fp_pair_map_t *map)
+{
+ tor_assert(map);
+
+ return HT_START(fp_pair_map_impl, &(map->head));
+}
+
+/** Advance iter a single step to the next entry of map, and return
+ * its new value.
+ */
+
+fp_pair_map_iter_t *
+fp_pair_map_iter_next(fp_pair_map_t *map, fp_pair_map_iter_t *iter)
+{
+ tor_assert(map);
+ tor_assert(iter);
+
+ return HT_NEXT(fp_pair_map_impl, &(map->head), iter);
+}
+
+/** Advance iter a single step to the next entry of map, removing the current
+ * entry, and return its new value.
+ */
+
+fp_pair_map_iter_t *
+fp_pair_map_iter_next_rmv(fp_pair_map_t *map, fp_pair_map_iter_t *iter)
+{
+ fp_pair_map_entry_t *rmv;
+
+ tor_assert(map);
+ tor_assert(iter);
+ tor_assert(*iter);
+
+ rmv = *iter;
+ iter = HT_NEXT_RMV(fp_pair_map_impl, &(map->head), iter);
+ tor_free(rmv);
+
+ return iter;
+}
+
+/** Set *key_out and *val_out to the current entry pointed to by iter.
+ */
+
+void
+fp_pair_map_iter_get(fp_pair_map_iter_t *iter,
+ fp_pair_t *key_out, void **val_out)
+{
+ tor_assert(iter);
+ tor_assert(*iter);
+
+ if (key_out) memcpy(key_out, &((*iter)->key), sizeof(fp_pair_t));
+ if (val_out) *val_out = (*iter)->val;
+}
+
+/** Return true iff iter has advanced past the last entry of its map.
+ */
+
+int
+fp_pair_map_iter_done(fp_pair_map_iter_t *iter)
+{
+ return (iter == NULL);
+}
+
+/** Assert if anything has gone wrong with the internal
+ * representation of map.
+ */
+
+void
+fp_pair_map_assert_ok(const fp_pair_map_t *map)
+{
+ tor_assert(!fp_pair_map_impl_HT_REP_IS_BAD_(&(map->head)));
+}
+
diff --git a/src/or/fp_pair.h b/src/or/fp_pair.h
new file mode 100644
index 000000000..89f664a81
--- /dev/null
+++ b/src/or/fp_pair.h
@@ -0,0 +1,45 @@
+/* Copyright (c) 2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file fp_pair.h
+ * \brief Header file for fp_pair.c.
+ **/
+
+#ifndef _TOR_FP_PAIR_H
+#define _TOR_FP_PAIR_H
+
+/*
+ * Declare fp_pair_map_t functions and structs
+ */
+
+typedef struct fp_pair_map_entry_s fp_pair_map_entry_t;
+typedef struct fp_pair_map_s fp_pair_map_t;
+typedef fp_pair_map_entry_t *fp_pair_map_iter_t;
+
+fp_pair_map_t * fp_pair_map_new(void);
+void * fp_pair_map_set(fp_pair_map_t *map, const fp_pair_t *key, void *val);
+void * fp_pair_map_set_by_digests(fp_pair_map_t *map,
+ const char *first, const char *second,
+ void *val);
+void * fp_pair_map_get(const fp_pair_map_t *map, const fp_pair_t *key);
+void * fp_pair_map_get_by_digests(const fp_pair_map_t *map,
+ const char *first, const char *second);
+void * fp_pair_map_remove(fp_pair_map_t *map, const fp_pair_t *key);
+void fp_pair_map_free(fp_pair_map_t *map, void (*free_val)(void*));
+int fp_pair_map_isempty(const fp_pair_map_t *map);
+int fp_pair_map_size(const fp_pair_map_t *map);
+fp_pair_map_iter_t * fp_pair_map_iter_init(fp_pair_map_t *map);
+fp_pair_map_iter_t * fp_pair_map_iter_next(fp_pair_map_t *map,
+ fp_pair_map_iter_t *iter);
+fp_pair_map_iter_t * fp_pair_map_iter_next_rmv(fp_pair_map_t *map,
+ fp_pair_map_iter_t *iter);
+void fp_pair_map_iter_get(fp_pair_map_iter_t *iter,
+ fp_pair_t *key_out, void **val_out);
+int fp_pair_map_iter_done(fp_pair_map_iter_t *iter);
+void fp_pair_map_assert_ok(const fp_pair_map_t *map);
+
+#undef DECLARE_MAP_FNS
+
+#endif
+
diff --git a/src/or/geoip.c b/src/or/geoip.c
index 6b7cc82b8..f722bac46 100644
--- a/src/or/geoip.c
+++ b/src/or/geoip.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2007-2012, The Tor Project, Inc. */
+/* Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -21,17 +21,23 @@
static void clear_geoip_db(void);
static void init_geoip_countries(void);
-/** An entry from the GeoIP file: maps an IP range to a country. */
-typedef struct geoip_entry_t {
+/** An entry from the GeoIP IPv4 file: maps an IPv4 range to a country. */
+typedef struct geoip_ipv4_entry_t {
uint32_t ip_low; /**< The lowest IP in the range, in host order */
uint32_t ip_high; /**< The highest IP in the range, in host order */
intptr_t country; /**< An index into geoip_countries */
-} geoip_entry_t;
+} geoip_ipv4_entry_t;
+
+/** An entry from the GeoIP IPv6 file: maps an IPv6 range to a country. */
+typedef struct geoip_ipv6_entry_t {
+ struct in6_addr ip_low; /**< The lowest IP in the range, in host order */
+ struct in6_addr ip_high; /**< The highest IP in the range, in host order */
+ intptr_t country; /**< An index into geoip_countries */
+} geoip_ipv6_entry_t;
/** A per-country record for GeoIP request history. */
typedef struct geoip_country_t {
char countrycode[3];
- uint32_t n_v2_ns_requests;
uint32_t n_v3_ns_requests;
} geoip_country_t;
@@ -41,45 +47,48 @@ static smartlist_t *geoip_countries = NULL;
* The index is encoded in the pointer, and 1 is added so that NULL can mean
* not found. */
static strmap_t *country_idxplus1_by_lc_code = NULL;
-/** A list of all known geoip_entry_t, sorted by ip_low. */
-static smartlist_t *geoip_entries = NULL;
+/** Lists of all known geoip_ipv4_entry_t and geoip_ipv6_entry_t, sorted
+ * by their respective ip_low. */
+static smartlist_t *geoip_ipv4_entries = NULL, *geoip_ipv6_entries = NULL;
-/** SHA1 digest of the GeoIP file to include in extra-info descriptors. */
+/** SHA1 digest of the GeoIP files to include in extra-info descriptors. */
static char geoip_digest[DIGEST_LEN];
+static char geoip6_digest[DIGEST_LEN];
-/** Return the index of the <b>country</b>'s entry in the GeoIP DB
- * if it is a valid 2-letter country code, otherwise return -1.
- */
+/** Return the index of the <b>country</b>'s entry in the GeoIP
+ * country list if it is a valid 2-letter country code, otherwise
+ * return -1. */
country_t
geoip_get_country(const char *country)
{
- void *_idxplus1;
+ void *idxplus1_;
intptr_t idx;
- _idxplus1 = strmap_get_lc(country_idxplus1_by_lc_code, country);
- if (!_idxplus1)
+ idxplus1_ = strmap_get_lc(country_idxplus1_by_lc_code, country);
+ if (!idxplus1_)
return -1;
- idx = ((uintptr_t)_idxplus1)-1;
+ idx = ((uintptr_t)idxplus1_)-1;
return (country_t)idx;
}
-/** Add an entry to the GeoIP table, mapping all IPs between <b>low</b> and
- * <b>high</b>, inclusive, to the 2-letter country code <b>country</b>.
- */
+/** Add an entry to a GeoIP table, mapping all IP addresses between <b>low</b>
+ * and <b>high</b>, inclusive, to the 2-letter country code <b>country</b>. */
static void
-geoip_add_entry(uint32_t low, uint32_t high, const char *country)
+geoip_add_entry(const tor_addr_t *low, const tor_addr_t *high,
+ const char *country)
{
intptr_t idx;
- geoip_entry_t *ent;
- void *_idxplus1;
+ void *idxplus1_;
- if (high < low)
+ if (tor_addr_family(low) != tor_addr_family(high))
+ return;
+ if (tor_addr_compare(high, low, CMP_EXACT) < 0)
return;
- _idxplus1 = strmap_get_lc(country_idxplus1_by_lc_code, country);
+ idxplus1_ = strmap_get_lc(country_idxplus1_by_lc_code, country);
- if (!_idxplus1) {
+ if (!idxplus1_) {
geoip_country_t *c = tor_malloc_zero(sizeof(geoip_country_t));
strlcpy(c->countrycode, country, sizeof(c->countrycode));
tor_strlower(c->countrycode);
@@ -87,54 +96,103 @@ geoip_add_entry(uint32_t low, uint32_t high, const char *country)
idx = smartlist_len(geoip_countries) - 1;
strmap_set_lc(country_idxplus1_by_lc_code, country, (void*)(idx+1));
} else {
- idx = ((uintptr_t)_idxplus1)-1;
+ idx = ((uintptr_t)idxplus1_)-1;
}
{
geoip_country_t *c = smartlist_get(geoip_countries, idx);
tor_assert(!strcasecmp(c->countrycode, country));
}
- ent = tor_malloc_zero(sizeof(geoip_entry_t));
- ent->ip_low = low;
- ent->ip_high = high;
- ent->country = idx;
- smartlist_add(geoip_entries, ent);
+
+ if (tor_addr_family(low) == AF_INET) {
+ geoip_ipv4_entry_t *ent = tor_malloc_zero(sizeof(geoip_ipv4_entry_t));
+ ent->ip_low = tor_addr_to_ipv4h(low);
+ ent->ip_high = tor_addr_to_ipv4h(high);
+ ent->country = idx;
+ smartlist_add(geoip_ipv4_entries, ent);
+ } else if (tor_addr_family(low) == AF_INET6) {
+ geoip_ipv6_entry_t *ent = tor_malloc_zero(sizeof(geoip_ipv6_entry_t));
+ ent->ip_low = *tor_addr_to_in6(low);
+ ent->ip_high = *tor_addr_to_in6(high);
+ ent->country = idx;
+ smartlist_add(geoip_ipv6_entries, ent);
+ }
}
-/** Add an entry to the GeoIP table, parsing it from <b>line</b>. The
- * format is as for geoip_load_file(). */
-/*private*/ int
-geoip_parse_entry(const char *line)
+/** Add an entry to the GeoIP table indicated by <b>family</b>,
+ * parsing it from <b>line</b>. The format is as for geoip_load_file(). */
+STATIC int
+geoip_parse_entry(const char *line, sa_family_t family)
{
- unsigned int low, high;
- char b[3];
+ tor_addr_t low_addr, high_addr;
+ char c[3];
+ char *country = NULL;
+
if (!geoip_countries)
init_geoip_countries();
- if (!geoip_entries)
- geoip_entries = smartlist_new();
+ if (family == AF_INET) {
+ if (!geoip_ipv4_entries)
+ geoip_ipv4_entries = smartlist_new();
+ } else if (family == AF_INET6) {
+ if (!geoip_ipv6_entries)
+ geoip_ipv6_entries = smartlist_new();
+ } else {
+ log_warn(LD_GENERAL, "Unsupported family: %d", family);
+ return -1;
+ }
while (TOR_ISSPACE(*line))
++line;
if (*line == '#')
return 0;
- if (tor_sscanf(line,"%u,%u,%2s", &low, &high, b) == 3) {
- geoip_add_entry(low, high, b);
- return 0;
- } else if (tor_sscanf(line,"\"%u\",\"%u\",\"%2s\",", &low, &high, b) == 3) {
- geoip_add_entry(low, high, b);
- return 0;
- } else {
- log_warn(LD_GENERAL, "Unable to parse line from GEOIP file: %s",
- escaped(line));
- return -1;
+
+ if (family == AF_INET) {
+ unsigned int low, high;
+ if (tor_sscanf(line,"%u,%u,%2s", &low, &high, c) == 3 ||
+ tor_sscanf(line,"\"%u\",\"%u\",\"%2s\",", &low, &high, c) == 3) {
+ tor_addr_from_ipv4h(&low_addr, low);
+ tor_addr_from_ipv4h(&high_addr, high);
+ } else
+ goto fail;
+ country = c;
+ } else { /* AF_INET6 */
+ char buf[512];
+ char *low_str, *high_str;
+ struct in6_addr low, high;
+ char *strtok_state;
+ strlcpy(buf, line, sizeof(buf));
+ low_str = tor_strtok_r(buf, ",", &strtok_state);
+ if (!low_str)
+ goto fail;
+ high_str = tor_strtok_r(NULL, ",", &strtok_state);
+ if (!high_str)
+ goto fail;
+ country = tor_strtok_r(NULL, "\n", &strtok_state);
+ if (!country)
+ goto fail;
+ if (strlen(country) != 2)
+ goto fail;
+ if (tor_inet_pton(AF_INET6, low_str, &low) <= 0)
+ goto fail;
+ tor_addr_from_in6(&low_addr, &low);
+ if (tor_inet_pton(AF_INET6, high_str, &high) <= 0)
+ goto fail;
+ tor_addr_from_in6(&high_addr, &high);
}
+ geoip_add_entry(&low_addr, &high_addr, country);
+ return 0;
+
+ fail:
+ log_warn(LD_GENERAL, "Unable to parse line from GEOIP %s file: %s",
+ family == AF_INET ? "IPv4" : "IPv6", escaped(line));
+ return -1;
}
/** Sorting helper: return -1, 1, or 0 based on comparison of two
- * geoip_entry_t */
+ * geoip_ipv4_entry_t */
static int
-_geoip_compare_entries(const void **_a, const void **_b)
+geoip_ipv4_compare_entries_(const void **_a, const void **_b)
{
- const geoip_entry_t *a = *_a, *b = *_b;
+ const geoip_ipv4_entry_t *a = *_a, *b = *_b;
if (a->ip_low < b->ip_low)
return -1;
else if (a->ip_low > b->ip_low)
@@ -144,13 +202,13 @@ _geoip_compare_entries(const void **_a, const void **_b)
}
/** bsearch helper: return -1, 1, or 0 based on comparison of an IP (a pointer
- * to a uint32_t in host order) to a geoip_entry_t */
+ * to a uint32_t in host order) to a geoip_ipv4_entry_t */
static int
-_geoip_compare_key_to_entry(const void *_key, const void **_member)
+geoip_ipv4_compare_key_to_entry_(const void *_key, const void **_member)
{
/* No alignment issue here, since _key really is a pointer to uint32_t */
const uint32_t addr = *(uint32_t *)_key;
- const geoip_entry_t *entry = *_member;
+ const geoip_ipv4_entry_t *entry = *_member;
if (addr < entry->ip_low)
return -1;
else if (addr > entry->ip_high)
@@ -159,6 +217,34 @@ _geoip_compare_key_to_entry(const void *_key, const void **_member)
return 0;
}
+/** Sorting helper: return -1, 1, or 0 based on comparison of two
+ * geoip_ipv6_entry_t */
+static int
+geoip_ipv6_compare_entries_(const void **_a, const void **_b)
+{
+ const geoip_ipv6_entry_t *a = *_a, *b = *_b;
+ return fast_memcmp(a->ip_low.s6_addr, b->ip_low.s6_addr,
+ sizeof(struct in6_addr));
+}
+
+/** bsearch helper: return -1, 1, or 0 based on comparison of an IPv6
+ * (a pointer to a in6_addr) to a geoip_ipv6_entry_t */
+static int
+geoip_ipv6_compare_key_to_entry_(const void *_key, const void **_member)
+{
+ const struct in6_addr *addr = (struct in6_addr *)_key;
+ const geoip_ipv6_entry_t *entry = *_member;
+
+ if (fast_memcmp(addr->s6_addr, entry->ip_low.s6_addr,
+ sizeof(struct in6_addr)) < 0)
+ return -1;
+ else if (fast_memcmp(addr->s6_addr, entry->ip_high.s6_addr,
+ sizeof(struct in6_addr)) > 0)
+ return 1;
+ else
+ return 0;
+}
+
/** Return 1 if we should collect geoip stats on bridge users, and
* include them in our extrainfo descriptor. Else return 0. */
int
@@ -185,27 +271,35 @@ init_geoip_countries(void)
strmap_set_lc(country_idxplus1_by_lc_code, "??", (void*)(1));
}
-/** Clear the GeoIP database and reload it from the file
- * <b>filename</b>. Return 0 on success, -1 on failure.
+/** Clear appropriate GeoIP database, based on <b>family</b>, and
+ * reload it from the file <b>filename</b>. Return 0 on success, -1 on
+ * failure.
*
- * Recognized line formats are:
+ * Recognized line formats for IPv4 are:
* INTIPLOW,INTIPHIGH,CC
* and
* "INTIPLOW","INTIPHIGH","CC","CC3","COUNTRY NAME"
* where INTIPLOW and INTIPHIGH are IPv4 addresses encoded as 4-byte unsigned
* integers, and CC is a country code.
*
+ * Recognized line format for IPv6 is:
+ * IPV6LOW,IPV6HIGH,CC
+ * where IPV6LOW and IPV6HIGH are IPv6 addresses and CC is a country code.
+ *
* It also recognizes, and skips over, blank lines and lines that start
* with '#' (comments).
*/
int
-geoip_load_file(const char *filename, const or_options_t *options)
+geoip_load_file(sa_family_t family, const char *filename)
{
FILE *f;
const char *msg = "";
+ const or_options_t *options = get_options();
int severity = options_need_geoip_info(options, &msg) ? LOG_WARN : LOG_INFO;
crypto_digest_t *geoip_digest_env = NULL;
- clear_geoip_db();
+
+ tor_assert(family == AF_INET || family == AF_INET6);
+
if (!(f = tor_fopen_cloexec(filename, "r"))) {
log_fn(severity, LD_GENERAL, "Failed to open GEOIP file %s. %s",
filename, msg);
@@ -213,33 +307,51 @@ geoip_load_file(const char *filename, const or_options_t *options)
}
if (!geoip_countries)
init_geoip_countries();
- if (geoip_entries) {
- SMARTLIST_FOREACH(geoip_entries, geoip_entry_t *, e, tor_free(e));
- smartlist_free(geoip_entries);
+
+ if (family == AF_INET) {
+ if (geoip_ipv4_entries) {
+ SMARTLIST_FOREACH(geoip_ipv4_entries, geoip_ipv4_entry_t *, e,
+ tor_free(e));
+ smartlist_free(geoip_ipv4_entries);
+ }
+ geoip_ipv4_entries = smartlist_new();
+ } else { /* AF_INET6 */
+ if (geoip_ipv6_entries) {
+ SMARTLIST_FOREACH(geoip_ipv6_entries, geoip_ipv6_entry_t *, e,
+ tor_free(e));
+ smartlist_free(geoip_ipv6_entries);
+ }
+ geoip_ipv6_entries = smartlist_new();
}
- geoip_entries = smartlist_new();
geoip_digest_env = crypto_digest_new();
- log_notice(LD_GENERAL, "Parsing GEOIP file %s.", filename);
+
+ log_notice(LD_GENERAL, "Parsing GEOIP %s file %s.",
+ (family == AF_INET) ? "IPv4" : "IPv6", filename);
while (!feof(f)) {
char buf[512];
if (fgets(buf, (int)sizeof(buf), f) == NULL)
break;
crypto_digest_add_bytes(geoip_digest_env, buf, strlen(buf));
/* FFFF track full country name. */
- geoip_parse_entry(buf);
+ geoip_parse_entry(buf, family);
}
/*XXXX abort and return -1 if no entries/illformed?*/
fclose(f);
- smartlist_sort(geoip_entries, _geoip_compare_entries);
-
- /* Okay, now we need to maybe change our mind about what is in which
- * country. */
- refresh_all_country_info();
-
- /* Remember file digest so that we can include it in our extra-info
- * descriptors. */
- crypto_digest_get_digest(geoip_digest_env, geoip_digest, DIGEST_LEN);
+ /* Sort list and remember file digests so that we can include it in
+ * our extra-info descriptors. */
+ if (family == AF_INET) {
+ smartlist_sort(geoip_ipv4_entries, geoip_ipv4_compare_entries_);
+ /* Okay, now we need to maybe change our mind about what is in
+ * which country. We do this for IPv4 only since that's what we
+ * store in node->country. */
+ refresh_all_country_info();
+ crypto_digest_get_digest(geoip_digest_env, geoip_digest, DIGEST_LEN);
+ } else {
+ /* AF_INET6 */
+ smartlist_sort(geoip_ipv6_entries, geoip_ipv6_compare_entries_);
+ crypto_digest_get_digest(geoip_digest_env, geoip6_digest, DIGEST_LEN);
+ }
crypto_digest_free(geoip_digest_env);
return 0;
@@ -251,13 +363,31 @@ geoip_load_file(const char *filename, const or_options_t *options)
* be less than geoip_get_n_countries(). To decode it, call
* geoip_get_country_name().
*/
-int
-geoip_get_country_by_ip(uint32_t ipaddr)
+STATIC int
+geoip_get_country_by_ipv4(uint32_t ipaddr)
+{
+ geoip_ipv4_entry_t *ent;
+ if (!geoip_ipv4_entries)
+ return -1;
+ ent = smartlist_bsearch(geoip_ipv4_entries, &ipaddr,
+ geoip_ipv4_compare_key_to_entry_);
+ return ent ? (int)ent->country : 0;
+}
+
+/** Given an IPv6 address, return a number representing the country to
+ * which that address belongs, -1 for "No geoip information available", or
+ * 0 for the 'unknown country'. The return value will always be less than
+ * geoip_get_n_countries(). To decode it, call geoip_get_country_name().
+ */
+STATIC int
+geoip_get_country_by_ipv6(const struct in6_addr *addr)
{
- geoip_entry_t *ent;
- if (!geoip_entries)
+ geoip_ipv6_entry_t *ent;
+
+ if (!geoip_ipv6_entries)
return -1;
- ent = smartlist_bsearch(geoip_entries, &ipaddr, _geoip_compare_key_to_entry);
+ ent = smartlist_bsearch(geoip_ipv6_entries, addr,
+ geoip_ipv6_compare_key_to_entry_);
return ent ? (int)ent->country : 0;
}
@@ -269,14 +399,16 @@ geoip_get_country_by_ip(uint32_t ipaddr)
int
geoip_get_country_by_addr(const tor_addr_t *addr)
{
- if (tor_addr_family(addr) != AF_INET) {
- /*XXXX IP6 support ipv6 geoip.*/
+ if (tor_addr_family(addr) == AF_INET) {
+ return geoip_get_country_by_ipv4(tor_addr_to_ipv4h(addr));
+ } else if (tor_addr_family(addr) == AF_INET6) {
+ return geoip_get_country_by_ipv6(tor_addr_to_in6(addr));
+ } else {
return -1;
}
- return geoip_get_country_by_ip(tor_addr_to_ipv4h(addr));
}
-/** Return the number of countries recognized by the GeoIP database. */
+/** Return the number of countries recognized by the GeoIP country list. */
int
geoip_get_n_countries(void)
{
@@ -299,18 +431,28 @@ geoip_get_country_name(country_t num)
/** Return true iff we have loaded a GeoIP database.*/
int
-geoip_is_loaded(void)
+geoip_is_loaded(sa_family_t family)
{
- return geoip_countries != NULL && geoip_entries != NULL;
+ tor_assert(family == AF_INET || family == AF_INET6);
+ if (geoip_countries == NULL)
+ return 0;
+ if (family == AF_INET)
+ return geoip_ipv4_entries != NULL;
+ else /* AF_INET6 */
+ return geoip_ipv6_entries != NULL;
}
/** Return the hex-encoded SHA1 digest of the loaded GeoIP file. The
* result does not need to be deallocated, but will be overwritten by the
* next call of hex_str(). */
const char *
-geoip_db_digest(void)
+geoip_db_digest(sa_family_t family)
{
- return hex_str(geoip_digest, DIGEST_LEN);
+ tor_assert(family == AF_INET || family == AF_INET6);
+ if (family == AF_INET)
+ return hex_str(geoip_digest, DIGEST_LEN);
+ else /* AF_INET6 */
+ return hex_str(geoip6_digest, DIGEST_LEN);
}
/** Entry in a map from IP address to the last time we've seen an incoming
@@ -319,6 +461,10 @@ geoip_db_digest(void)
typedef struct clientmap_entry_t {
HT_ENTRY(clientmap_entry_t) node;
tor_addr_t addr;
+ /* Name of pluggable transport used by this client. NULL if no
+ pluggable transport was used. */
+ char *transport_name;
+
/** Time when we last saw this IP address, in MINUTES since the epoch.
*
* (This will run out of space around 4011 CE. If Tor is still in use around
@@ -340,12 +486,20 @@ static HT_HEAD(clientmap, clientmap_entry_t) client_history =
static INLINE unsigned
clientmap_entry_hash(const clientmap_entry_t *a)
{
- return ht_improve_hash(tor_addr_hash(&a->addr));
+ unsigned h = (unsigned) tor_addr_hash(&a->addr);
+
+ if (a->transport_name)
+ h += (unsigned) siphash24g(a->transport_name, strlen(a->transport_name));
+
+ return h;
}
/** Hashtable helper: compare two clientmap_entry_t values for equality. */
static INLINE int
clientmap_entries_eq(const clientmap_entry_t *a, const clientmap_entry_t *b)
{
+ if (strcmp_opt(a->transport_name, b->transport_name))
+ return 0;
+
return !tor_addr_compare(&a->addr, &b->addr, CMP_EXACT) &&
a->action == b->action;
}
@@ -355,6 +509,17 @@ HT_PROTOTYPE(clientmap, clientmap_entry_t, node, clientmap_entry_hash,
HT_GENERATE(clientmap, clientmap_entry_t, node, clientmap_entry_hash,
clientmap_entries_eq, 0.6, malloc, realloc, free);
+/** Free all storage held by <b>ent</b>. */
+static void
+clientmap_entry_free(clientmap_entry_t *ent)
+{
+ if (!ent)
+ return;
+
+ tor_free(ent->transport_name);
+ tor_free(ent);
+}
+
/** Clear history of connecting clients used by entry and bridge stats. */
static void
client_history_clear(void)
@@ -365,100 +530,52 @@ client_history_clear(void)
if ((*ent)->action == GEOIP_CLIENT_CONNECT) {
this = *ent;
next = HT_NEXT_RMV(clientmap, &client_history, ent);
- tor_free(this);
+ clientmap_entry_free(this);
} else {
next = HT_NEXT(clientmap, &client_history, ent);
}
}
}
-/** How often do we update our estimate which share of v2 and v3 directory
- * requests is sent to us? We could as well trigger updates of shares from
- * network status updates, but that means adding a lot of calls into code
- * that is independent from geoip stats (and keeping them up-to-date). We
- * are perfectly fine with an approximation of 15-minute granularity. */
-#define REQUEST_SHARE_INTERVAL (15 * 60)
-
-/** When did we last determine which share of v2 and v3 directory requests
- * is sent to us? */
-static time_t last_time_determined_shares = 0;
-
-/** Sum of products of v2 shares times the number of seconds for which we
- * consider these shares as valid. */
-static double v2_share_times_seconds;
-
-/** Sum of products of v3 shares times the number of seconds for which we
- * consider these shares as valid. */
-static double v3_share_times_seconds;
-
-/** Number of seconds we are determining v2 and v3 shares. */
-static int share_seconds;
-
-/** Try to determine which fraction of v2 and v3 directory requests aimed at
- * caches will be sent to us at time <b>now</b> and store that value in
- * order to take a mean value later on. */
-static void
-geoip_determine_shares(time_t now)
-{
- double v2_share = 0.0, v3_share = 0.0;
- if (router_get_my_share_of_directory_requests(&v2_share, &v3_share) < 0)
- return;
- if (last_time_determined_shares) {
- v2_share_times_seconds += v2_share *
- ((double) (now - last_time_determined_shares));
- v3_share_times_seconds += v3_share *
- ((double) (now - last_time_determined_shares));
- share_seconds += (int)(now - last_time_determined_shares);
- }
- last_time_determined_shares = now;
-}
-
-/** Calculate which fraction of v2 and v3 directory requests aimed at caches
- * have been sent to us since the last call of this function up to time
- * <b>now</b>. Set *<b>v2_share_out</b> and *<b>v3_share_out</b> to the
- * fractions of v2 and v3 protocol shares we expect to have seen. Reset
- * counters afterwards. Return 0 on success, -1 on failure (e.g. when zero
- * seconds have passed since the last call).*/
-static int
-geoip_get_mean_shares(time_t now, double *v2_share_out,
- double *v3_share_out)
-{
- geoip_determine_shares(now);
- if (!share_seconds)
- return -1;
- *v2_share_out = v2_share_times_seconds / ((double) share_seconds);
- *v3_share_out = v3_share_times_seconds / ((double) share_seconds);
- v2_share_times_seconds = v3_share_times_seconds = 0.0;
- share_seconds = 0;
- return 0;
-}
-
/** Note that we've seen a client connect from the IP <b>addr</b>
* at time <b>now</b>. Ignored by all but bridges and directories if
* configured accordingly. */
void
geoip_note_client_seen(geoip_client_action_t action,
- const tor_addr_t *addr, time_t now)
+ const tor_addr_t *addr,
+ const char *transport_name,
+ time_t now)
{
const or_options_t *options = get_options();
clientmap_entry_t lookup, *ent;
+ memset(&lookup, 0, sizeof(clientmap_entry_t));
+
if (action == GEOIP_CLIENT_CONNECT) {
/* Only remember statistics as entry guard or as bridge. */
if (!options->EntryStatistics &&
(!(options->BridgeRelay && options->BridgeRecordUsageByCountry)))
return;
} else {
- if (options->BridgeRelay || options->BridgeAuthoritativeDir ||
- !options->DirReqStatistics)
+ /* Only gather directory-request statistics if configured, and
+ * forcibly disable them on bridge authorities. */
+ if (!options->DirReqStatistics || options->BridgeAuthoritativeDir)
return;
}
+ log_debug(LD_GENERAL, "Seen client from '%s' with transport '%s'.",
+ safe_str_client(fmt_addr((addr))),
+ transport_name ? transport_name : "<no transport>");
+
tor_addr_copy(&lookup.addr, addr);
lookup.action = (int)action;
+ lookup.transport_name = (char*) transport_name;
ent = HT_FIND(clientmap, &client_history, &lookup);
+
if (! ent) {
ent = tor_malloc_zero(sizeof(clientmap_entry_t));
tor_addr_copy(&ent->addr, addr);
+ if (transport_name)
+ ent->transport_name = tor_strdup(transport_name);
ent->action = (int)action;
HT_INSERT(clientmap, &client_history, ent);
}
@@ -467,33 +584,25 @@ geoip_note_client_seen(geoip_client_action_t action,
else
ent->last_seen_in_minutes = 0;
- if (action == GEOIP_CLIENT_NETWORKSTATUS ||
- action == GEOIP_CLIENT_NETWORKSTATUS_V2) {
+ if (action == GEOIP_CLIENT_NETWORKSTATUS) {
int country_idx = geoip_get_country_by_addr(addr);
if (country_idx < 0)
country_idx = 0; /** unresolved requests are stored at index 0. */
if (country_idx >= 0 && country_idx < smartlist_len(geoip_countries)) {
geoip_country_t *country = smartlist_get(geoip_countries, country_idx);
- if (action == GEOIP_CLIENT_NETWORKSTATUS)
- ++country->n_v3_ns_requests;
- else
- ++country->n_v2_ns_requests;
+ ++country->n_v3_ns_requests;
}
-
- /* Periodically determine share of requests that we should see */
- if (last_time_determined_shares + REQUEST_SHARE_INTERVAL < now)
- geoip_determine_shares(now);
}
}
/** HT_FOREACH helper: remove a clientmap_entry_t from the hashtable if it's
* older than a certain time. */
static int
-_remove_old_client_helper(struct clientmap_entry_t *ent, void *_cutoff)
+remove_old_client_helper_(struct clientmap_entry_t *ent, void *_cutoff)
{
time_t cutoff = *(time_t*)_cutoff / 60;
if (ent->last_seen_in_minutes < cutoff) {
- tor_free(ent);
+ clientmap_entry_free(ent);
return 1;
} else {
return 0;
@@ -505,40 +614,28 @@ void
geoip_remove_old_clients(time_t cutoff)
{
clientmap_HT_FOREACH_FN(&client_history,
- _remove_old_client_helper,
+ remove_old_client_helper_,
&cutoff);
}
-/** How many responses are we giving to clients requesting v2 network
- * statuses? */
-static uint32_t ns_v2_responses[GEOIP_NS_RESPONSE_NUM];
-
/** How many responses are we giving to clients requesting v3 network
* statuses? */
static uint32_t ns_v3_responses[GEOIP_NS_RESPONSE_NUM];
-/** Note that we've rejected a client's request for a v2 or v3 network
- * status, encoded in <b>action</b> for reason <b>reason</b> at time
- * <b>now</b>. */
+/** Note that we've rejected a client's request for a v3 network status
+ * for reason <b>reason</b> at time <b>now</b>. */
void
-geoip_note_ns_response(geoip_client_action_t action,
- geoip_ns_response_t response)
+geoip_note_ns_response(geoip_ns_response_t response)
{
static int arrays_initialized = 0;
if (!get_options()->DirReqStatistics)
return;
if (!arrays_initialized) {
- memset(ns_v2_responses, 0, sizeof(ns_v2_responses));
memset(ns_v3_responses, 0, sizeof(ns_v3_responses));
arrays_initialized = 1;
}
- tor_assert(action == GEOIP_CLIENT_NETWORKSTATUS ||
- action == GEOIP_CLIENT_NETWORKSTATUS_V2);
tor_assert(response < GEOIP_NS_RESPONSE_NUM);
- if (action == GEOIP_CLIENT_NETWORKSTATUS)
- ns_v3_responses[response]++;
- else
- ns_v2_responses[response]++;
+ ns_v3_responses[response]++;
}
/** Do not mention any country from which fewer than this number of IPs have
@@ -559,10 +656,10 @@ typedef struct c_hist_t {
} c_hist_t;
/** Sorting helper: return -1, 1, or 0 based on comparison of two
- * geoip_entry_t. Sort in descending order of total, and then by country
+ * geoip_ipv4_entry_t. Sort in descending order of total, and then by country
* code. */
static int
-_c_hist_compare(const void **_a, const void **_b)
+c_hist_compare_(const void **_a, const void **_b)
{
const c_hist_t *a = *_a, *b = *_b;
if (a->total > b->total)
@@ -578,7 +675,7 @@ _c_hist_compare(const void **_a, const void **_b)
* failed, the others as still running. */
#define DIRREQ_TIMEOUT (10*60)
-/** Entry in a map from either conn->global_identifier for direct requests
+/** Entry in a map from either chan->global_identifier for direct requests
* or a unique circuit identifier for tunneled requests to request time,
* response size, and completion time of a network status request. Used to
* measure download times of requests to derive average client
@@ -586,14 +683,13 @@ _c_hist_compare(const void **_a, const void **_b)
typedef struct dirreq_map_entry_t {
HT_ENTRY(dirreq_map_entry_t) node;
/** Unique identifier for this network status request; this is either the
- * conn->global_identifier of the dir conn (direct request) or a new
+ * chan->global_identifier of the dir channel (direct request) or a new
* locally unique identifier of a circuit (tunneled request). This ID is
* only unique among other direct or tunneled requests, respectively. */
uint64_t dirreq_id;
unsigned int state:3; /**< State of this directory request. */
unsigned int type:1; /**< Is this a direct or a tunneled request? */
unsigned int completed:1; /**< Is this request complete? */
- unsigned int action:2; /**< Is this a v2 or v3 request? */
/** When did we receive the request and started sending the response? */
struct timeval request_time;
size_t response_size; /**< What is the size of the response in bytes? */
@@ -631,7 +727,7 @@ HT_GENERATE(dirreqmap, dirreq_map_entry_t, node, dirreq_map_ent_hash,
* <b>type</b> and <b>dirreq_id</b> as key parts. If there is
* already an entry for that key, print out a BUG warning and return. */
static void
-_dirreq_map_put(dirreq_map_entry_t *entry, dirreq_type_t type,
+dirreq_map_put_(dirreq_map_entry_t *entry, dirreq_type_t type,
uint64_t dirreq_id)
{
dirreq_map_entry_t *old_ent;
@@ -653,7 +749,7 @@ _dirreq_map_put(dirreq_map_entry_t *entry, dirreq_type_t type,
* using <b>type</b> and <b>dirreq_id</b> as key parts. If there
* is no such entry, return NULL. */
static dirreq_map_entry_t *
-_dirreq_map_get(dirreq_type_t type, uint64_t dirreq_id)
+dirreq_map_get_(dirreq_type_t type, uint64_t dirreq_id)
{
dirreq_map_entry_t lookup;
lookup.type = type;
@@ -662,12 +758,11 @@ _dirreq_map_get(dirreq_type_t type, uint64_t dirreq_id)
}
/** Note that an either direct or tunneled (see <b>type</b>) directory
- * request for a network status with unique ID <b>dirreq_id</b> of size
- * <b>response_size</b> and action <b>action</b> (either v2 or v3) has
- * started. */
+ * request for a v3 network status with unique ID <b>dirreq_id</b> of size
+ * <b>response_size</b> has started. */
void
geoip_start_dirreq(uint64_t dirreq_id, size_t response_size,
- geoip_client_action_t action, dirreq_type_t type)
+ dirreq_type_t type)
{
dirreq_map_entry_t *ent;
if (!get_options()->DirReqStatistics)
@@ -676,9 +771,8 @@ geoip_start_dirreq(uint64_t dirreq_id, size_t response_size,
ent->dirreq_id = dirreq_id;
tor_gettimeofday(&ent->request_time);
ent->response_size = response_size;
- ent->action = action;
ent->type = type;
- _dirreq_map_put(ent, type, dirreq_id);
+ dirreq_map_put_(ent, type, dirreq_id);
}
/** Change the state of the either direct or tunneled (see <b>type</b>)
@@ -694,7 +788,7 @@ geoip_change_dirreq_state(uint64_t dirreq_id, dirreq_type_t type,
dirreq_map_entry_t *ent;
if (!get_options()->DirReqStatistics)
return;
- ent = _dirreq_map_get(type, dirreq_id);
+ ent = dirreq_map_get_(type, dirreq_id);
if (!ent)
return;
if (new_state == DIRREQ_IS_FOR_NETWORK_STATUS)
@@ -705,20 +799,119 @@ geoip_change_dirreq_state(uint64_t dirreq_id, dirreq_type_t type,
if ((type == DIRREQ_DIRECT &&
new_state == DIRREQ_FLUSHING_DIR_CONN_FINISHED) ||
(type == DIRREQ_TUNNELED &&
- new_state == DIRREQ_OR_CONN_BUFFER_FLUSHED)) {
+ new_state == DIRREQ_CHANNEL_BUFFER_FLUSHED)) {
tor_gettimeofday(&ent->completion_time);
ent->completed = 1;
}
}
+/** Return the bridge-ip-transports string that should be inserted in
+ * our extra-info descriptor. Return NULL if the bridge-ip-transports
+ * line should be empty. */
+char *
+geoip_get_transport_history(void)
+{
+ unsigned granularity = IP_GRANULARITY;
+ /** String hash table (name of transport) -> (number of users). */
+ strmap_t *transport_counts = strmap_new();
+
+ /** Smartlist that contains copies of the names of the transports
+ that have been used. */
+ smartlist_t *transports_used = smartlist_new();
+
+ /* Special string to signify that no transport was used for this
+ connection. Pluggable transport names can't have symbols in their
+ names, so this string will never collide with a real transport. */
+ static const char* no_transport_str = "<OR>";
+
+ clientmap_entry_t **ent;
+ const char *transport_name = NULL;
+ smartlist_t *string_chunks = smartlist_new();
+ char *the_string = NULL;
+
+ /* If we haven't seen any clients yet, return NULL. */
+ if (HT_EMPTY(&client_history))
+ goto done;
+
+ /** We do the following steps to form the transport history string:
+ * a) Foreach client that uses a pluggable transport, we increase the
+ * times that transport was used by one. If the client did not use
+ * a transport, we increase the number of times someone connected
+ * without obfuscation.
+ * b) Foreach transport we observed, we write its transport history
+ * string and push it to string_chunks. So, for example, if we've
+ * seen 665 obfs2 clients, we write "obfs2=665".
+ * c) We concatenate string_chunks to form the final string.
+ */
+
+ log_debug(LD_GENERAL,"Starting iteration for transport history. %d clients.",
+ HT_SIZE(&client_history));
+
+ /* Loop through all clients. */
+ HT_FOREACH(ent, clientmap, &client_history) {
+ uintptr_t val;
+ void *ptr;
+ transport_name = (*ent)->transport_name;
+ if (!transport_name)
+ transport_name = no_transport_str;
+
+ /* Increase the count for this transport name. */
+ ptr = strmap_get(transport_counts, transport_name);
+ val = (uintptr_t)ptr;
+ val++;
+ ptr = (void*)val;
+ strmap_set(transport_counts, transport_name, ptr);
+
+ /* If it's the first time we see this transport, note it. */
+ if (val == 1)
+ smartlist_add(transports_used, tor_strdup(transport_name));
+
+ log_debug(LD_GENERAL, "Client from '%s' with transport '%s'. "
+ "I've now seen %d clients.",
+ safe_str_client(fmt_addr(&(*ent)->addr)),
+ transport_name ? transport_name : "<no transport>",
+ (int)val);
+ }
+
+ /* Sort the transport names (helps with unit testing). */
+ smartlist_sort_strings(transports_used);
+
+ /* Loop through all seen transports. */
+ SMARTLIST_FOREACH_BEGIN(transports_used, const char *, transport_name) {
+ void *transport_count_ptr = strmap_get(transport_counts, transport_name);
+ uintptr_t transport_count = (uintptr_t) transport_count_ptr;
+
+ log_debug(LD_GENERAL, "We got "U64_FORMAT" clients with transport '%s'.",
+ U64_PRINTF_ARG((uint64_t)transport_count), transport_name);
+
+ smartlist_add_asprintf(string_chunks, "%s="U64_FORMAT,
+ transport_name,
+ U64_PRINTF_ARG(round_uint64_to_next_multiple_of(
+ (uint64_t)transport_count,
+ granularity)));
+ } SMARTLIST_FOREACH_END(transport_name);
+
+ the_string = smartlist_join_strings(string_chunks, ",", 0, NULL);
+
+ log_debug(LD_GENERAL, "Final bridge-ip-transports string: '%s'", the_string);
+
+ done:
+ strmap_free(transport_counts, NULL);
+ SMARTLIST_FOREACH(transports_used, char *, s, tor_free(s));
+ smartlist_free(transports_used);
+ SMARTLIST_FOREACH(string_chunks, char *, s, tor_free(s));
+ smartlist_free(string_chunks);
+
+ return the_string;
+}
+
/** Return a newly allocated comma-separated string containing statistics
* on network status downloads. The string contains the number of completed
* requests, timeouts, and still running requests as well as the download
* times by deciles and quartiles. Return NULL if we have not observed
* requests for long enough. */
static char *
-geoip_get_dirreq_history(geoip_client_action_t action,
- dirreq_type_t type)
+geoip_get_dirreq_history(dirreq_type_t type)
{
char *result = NULL;
smartlist_t *dirreq_completed = NULL;
@@ -728,13 +921,10 @@ geoip_get_dirreq_history(geoip_client_action_t action,
struct timeval now;
tor_gettimeofday(&now);
- if (action != GEOIP_CLIENT_NETWORKSTATUS &&
- action != GEOIP_CLIENT_NETWORKSTATUS_V2)
- return NULL;
dirreq_completed = smartlist_new();
for (ptr = HT_START(dirreqmap, &dirreq_map); ptr; ptr = next) {
ent = *ptr;
- if (ent->action != action || ent->type != type) {
+ if (ent->type != type) {
next = HT_NEXT(dirreqmap, &dirreq_map, ptr);
continue;
} else {
@@ -813,27 +1003,35 @@ geoip_get_dirreq_history(geoip_client_action_t action,
return result;
}
-/** Return a newly allocated comma-separated string containing entries for
- * all the countries from which we've seen enough clients connect as a
- * bridge, directory server, or entry guard. The entry format is cc=num
- * where num is the number of IPs we've seen connecting from that country,
- * and cc is a lowercased country code. Returns NULL if we don't want
- * to export geoip data yet. */
-char *
-geoip_get_client_history(geoip_client_action_t action)
+/** Store a newly allocated comma-separated string in
+ * *<a>country_str</a> containing entries for all the countries from
+ * which we've seen enough clients connect as a bridge, directory
+ * server, or entry guard. The entry format is cc=num where num is the
+ * number of IPs we've seen connecting from that country, and cc is a
+ * lowercased country code. *<a>country_str</a> is set to NULL if
+ * we're not ready to export per country data yet.
+ *
+ * Store a newly allocated comma-separated string in <a>ipver_str</a>
+ * containing entries for clients connecting over IPv4 and IPv6. The
+ * format is family=num where num is the nubmer of IPs we've seen
+ * connecting over that protocol family, and family is 'v4' or 'v6'.
+ *
+ * Return 0 on success and -1 if we're missing geoip data. */
+int
+geoip_get_client_history(geoip_client_action_t action,
+ char **country_str, char **ipver_str)
{
- char *result = NULL;
unsigned granularity = IP_GRANULARITY;
- smartlist_t *chunks = NULL;
smartlist_t *entries = NULL;
int n_countries = geoip_get_n_countries();
int i;
clientmap_entry_t **ent;
unsigned *counts = NULL;
unsigned total = 0;
+ unsigned ipv4_count = 0, ipv6_count = 0;
- if (!geoip_is_loaded())
- return NULL;
+ if (!geoip_is_loaded(AF_INET) && !geoip_is_loaded(AF_INET6))
+ return -1;
counts = tor_malloc_zero(sizeof(unsigned)*n_countries);
HT_FOREACH(ent, clientmap, &client_history) {
@@ -846,10 +1044,34 @@ geoip_get_client_history(geoip_client_action_t action)
tor_assert(0 <= country && country < n_countries);
++counts[country];
++total;
+ switch (tor_addr_family(&(*ent)->addr)) {
+ case AF_INET:
+ ipv4_count++;
+ break;
+ case AF_INET6:
+ ipv6_count++;
+ break;
+ }
}
- /* Don't record anything if we haven't seen enough IPs. */
- if (total < MIN_IPS_TO_NOTE_ANYTHING)
- goto done;
+ if (ipver_str) {
+ smartlist_t *chunks = smartlist_new();
+ smartlist_add_asprintf(chunks, "v4=%u",
+ round_to_next_multiple_of(ipv4_count, granularity));
+ smartlist_add_asprintf(chunks, "v6=%u",
+ round_to_next_multiple_of(ipv6_count, granularity));
+ *ipver_str = smartlist_join_strings(chunks, ",", 0, NULL);
+ SMARTLIST_FOREACH(chunks, char *, c, tor_free(c));
+ smartlist_free(chunks);
+ }
+
+ /* Don't record per country data if we haven't seen enough IPs. */
+ if (total < MIN_IPS_TO_NOTE_ANYTHING) {
+ tor_free(counts);
+ if (country_str)
+ *country_str = NULL;
+ return 0;
+ }
+
/* Make a list of c_hist_t */
entries = smartlist_new();
for (i = 0; i < n_countries; ++i) {
@@ -868,40 +1090,35 @@ geoip_get_client_history(geoip_client_action_t action)
}
/* Sort entries. Note that we must do this _AFTER_ rounding, or else
* the sort order could leak info. */
- smartlist_sort(entries, _c_hist_compare);
-
- /* Build the result. */
- chunks = smartlist_new();
- SMARTLIST_FOREACH(entries, c_hist_t *, ch, {
- smartlist_add_asprintf(chunks, "%s=%u", ch->country, ch->total);
- });
- result = smartlist_join_strings(chunks, ",", 0, NULL);
- done:
- tor_free(counts);
- if (chunks) {
+ smartlist_sort(entries, c_hist_compare_);
+
+ if (country_str) {
+ smartlist_t *chunks = smartlist_new();
+ SMARTLIST_FOREACH(entries, c_hist_t *, ch, {
+ smartlist_add_asprintf(chunks, "%s=%u", ch->country, ch->total);
+ });
+ *country_str = smartlist_join_strings(chunks, ",", 0, NULL);
SMARTLIST_FOREACH(chunks, char *, c, tor_free(c));
smartlist_free(chunks);
}
- if (entries) {
- SMARTLIST_FOREACH(entries, c_hist_t *, c, tor_free(c));
- smartlist_free(entries);
- }
- return result;
+
+ SMARTLIST_FOREACH(entries, c_hist_t *, c, tor_free(c));
+ smartlist_free(entries);
+ tor_free(counts);
+
+ return 0;
}
/** Return a newly allocated string holding the per-country request history
- * for <b>action</b> in a format suitable for an extra-info document, or NULL
- * on failure. */
+ * for v3 network statuses in a format suitable for an extra-info document,
+ * or NULL on failure. */
char *
-geoip_get_request_history(geoip_client_action_t action)
+geoip_get_request_history(void)
{
smartlist_t *entries, *strings;
char *result;
unsigned granularity = IP_GRANULARITY;
- if (action != GEOIP_CLIENT_NETWORKSTATUS &&
- action != GEOIP_CLIENT_NETWORKSTATUS_V2)
- return NULL;
if (!geoip_countries)
return NULL;
@@ -909,8 +1126,7 @@ geoip_get_request_history(geoip_client_action_t action)
SMARTLIST_FOREACH_BEGIN(geoip_countries, geoip_country_t *, c) {
uint32_t tot = 0;
c_hist_t *ent;
- tot = (action == GEOIP_CLIENT_NETWORKSTATUS) ?
- c->n_v3_ns_requests : c->n_v2_ns_requests;
+ tot = c->n_v3_ns_requests;
if (!tot)
continue;
ent = tor_malloc_zero(sizeof(c_hist_t));
@@ -918,7 +1134,7 @@ geoip_get_request_history(geoip_client_action_t action)
ent->total = round_to_next_multiple_of(tot, granularity);
smartlist_add(entries, ent);
} SMARTLIST_FOREACH_END(c);
- smartlist_sort(entries, _c_hist_compare);
+ smartlist_sort(entries, c_hist_compare_);
strings = smartlist_new();
SMARTLIST_FOREACH(entries, c_hist_t *, ent, {
@@ -948,26 +1164,21 @@ void
geoip_reset_dirreq_stats(time_t now)
{
SMARTLIST_FOREACH(geoip_countries, geoip_country_t *, c, {
- c->n_v2_ns_requests = c->n_v3_ns_requests = 0;
+ c->n_v3_ns_requests = 0;
});
{
clientmap_entry_t **ent, **next, *this;
for (ent = HT_START(clientmap, &client_history); ent != NULL;
ent = next) {
- if ((*ent)->action == GEOIP_CLIENT_NETWORKSTATUS ||
- (*ent)->action == GEOIP_CLIENT_NETWORKSTATUS_V2) {
+ if ((*ent)->action == GEOIP_CLIENT_NETWORKSTATUS) {
this = *ent;
next = HT_NEXT_RMV(clientmap, &client_history, ent);
- tor_free(this);
+ clientmap_entry_free(this);
} else {
next = HT_NEXT(clientmap, &client_history, ent);
}
}
}
- v2_share_times_seconds = v3_share_times_seconds = 0.0;
- last_time_determined_shares = 0;
- share_seconds = 0;
- memset(ns_v2_responses, 0, sizeof(ns_v2_responses));
memset(ns_v3_responses, 0, sizeof(ns_v3_responses));
{
dirreq_map_entry_t **ent, **next, *this;
@@ -995,12 +1206,9 @@ char *
geoip_format_dirreq_stats(time_t now)
{
char t[ISO_TIME_LEN+1];
- double v2_share = 0.0, v3_share = 0.0;
int i;
- char *v3_ips_string, *v2_ips_string, *v3_reqs_string, *v2_reqs_string,
- *v2_share_string = NULL, *v3_share_string = NULL,
- *v3_direct_dl_string, *v2_direct_dl_string,
- *v3_tunneled_dl_string, *v2_tunneled_dl_string;
+ char *v3_ips_string, *v3_reqs_string, *v3_direct_dl_string,
+ *v3_tunneled_dl_string;
char *result;
if (!start_of_dirreq_stats_interval)
@@ -1009,89 +1217,45 @@ geoip_format_dirreq_stats(time_t now)
tor_assert(now >= start_of_dirreq_stats_interval);
format_iso_time(t, now);
- v2_ips_string = geoip_get_client_history(GEOIP_CLIENT_NETWORKSTATUS_V2);
- v3_ips_string = geoip_get_client_history(GEOIP_CLIENT_NETWORKSTATUS);
- v2_reqs_string = geoip_get_request_history(
- GEOIP_CLIENT_NETWORKSTATUS_V2);
- v3_reqs_string = geoip_get_request_history(GEOIP_CLIENT_NETWORKSTATUS);
+ geoip_get_client_history(GEOIP_CLIENT_NETWORKSTATUS, &v3_ips_string, NULL);
+ v3_reqs_string = geoip_get_request_history();
#define RESPONSE_GRANULARITY 8
for (i = 0; i < GEOIP_NS_RESPONSE_NUM; i++) {
- ns_v2_responses[i] = round_uint32_to_next_multiple_of(
- ns_v2_responses[i], RESPONSE_GRANULARITY);
ns_v3_responses[i] = round_uint32_to_next_multiple_of(
ns_v3_responses[i], RESPONSE_GRANULARITY);
}
#undef RESPONSE_GRANULARITY
- if (!geoip_get_mean_shares(now, &v2_share, &v3_share)) {
- tor_asprintf(&v2_share_string, "dirreq-v2-share %0.2f%%\n",
- v2_share*100);
- tor_asprintf(&v3_share_string, "dirreq-v3-share %0.2f%%\n",
- v3_share*100);
- }
-
- v2_direct_dl_string = geoip_get_dirreq_history(
- GEOIP_CLIENT_NETWORKSTATUS_V2, DIRREQ_DIRECT);
- v3_direct_dl_string = geoip_get_dirreq_history(
- GEOIP_CLIENT_NETWORKSTATUS, DIRREQ_DIRECT);
-
- v2_tunneled_dl_string = geoip_get_dirreq_history(
- GEOIP_CLIENT_NETWORKSTATUS_V2, DIRREQ_TUNNELED);
- v3_tunneled_dl_string = geoip_get_dirreq_history(
- GEOIP_CLIENT_NETWORKSTATUS, DIRREQ_TUNNELED);
+ v3_direct_dl_string = geoip_get_dirreq_history(DIRREQ_DIRECT);
+ v3_tunneled_dl_string = geoip_get_dirreq_history(DIRREQ_TUNNELED);
/* Put everything together into a single string. */
tor_asprintf(&result, "dirreq-stats-end %s (%d s)\n"
"dirreq-v3-ips %s\n"
- "dirreq-v2-ips %s\n"
"dirreq-v3-reqs %s\n"
- "dirreq-v2-reqs %s\n"
"dirreq-v3-resp ok=%u,not-enough-sigs=%u,unavailable=%u,"
"not-found=%u,not-modified=%u,busy=%u\n"
- "dirreq-v2-resp ok=%u,unavailable=%u,"
- "not-found=%u,not-modified=%u,busy=%u\n"
- "%s"
- "%s"
"dirreq-v3-direct-dl %s\n"
- "dirreq-v2-direct-dl %s\n"
- "dirreq-v3-tunneled-dl %s\n"
- "dirreq-v2-tunneled-dl %s\n",
+ "dirreq-v3-tunneled-dl %s\n",
t,
(unsigned) (now - start_of_dirreq_stats_interval),
v3_ips_string ? v3_ips_string : "",
- v2_ips_string ? v2_ips_string : "",
v3_reqs_string ? v3_reqs_string : "",
- v2_reqs_string ? v2_reqs_string : "",
ns_v3_responses[GEOIP_SUCCESS],
ns_v3_responses[GEOIP_REJECT_NOT_ENOUGH_SIGS],
ns_v3_responses[GEOIP_REJECT_UNAVAILABLE],
ns_v3_responses[GEOIP_REJECT_NOT_FOUND],
ns_v3_responses[GEOIP_REJECT_NOT_MODIFIED],
ns_v3_responses[GEOIP_REJECT_BUSY],
- ns_v2_responses[GEOIP_SUCCESS],
- ns_v2_responses[GEOIP_REJECT_UNAVAILABLE],
- ns_v2_responses[GEOIP_REJECT_NOT_FOUND],
- ns_v2_responses[GEOIP_REJECT_NOT_MODIFIED],
- ns_v2_responses[GEOIP_REJECT_BUSY],
- v2_share_string ? v2_share_string : "",
- v3_share_string ? v3_share_string : "",
v3_direct_dl_string ? v3_direct_dl_string : "",
- v2_direct_dl_string ? v2_direct_dl_string : "",
- v3_tunneled_dl_string ? v3_tunneled_dl_string : "",
- v2_tunneled_dl_string ? v2_tunneled_dl_string : "");
+ v3_tunneled_dl_string ? v3_tunneled_dl_string : "");
/* Free partial strings. */
tor_free(v3_ips_string);
- tor_free(v2_ips_string);
tor_free(v3_reqs_string);
- tor_free(v2_reqs_string);
- tor_free(v2_share_string);
- tor_free(v3_share_string);
tor_free(v3_direct_dl_string);
- tor_free(v2_direct_dl_string);
tor_free(v3_tunneled_dl_string);
- tor_free(v2_tunneled_dl_string);
return result;
}
@@ -1104,7 +1268,7 @@ geoip_format_dirreq_stats(time_t now)
time_t
geoip_dirreq_stats_write(time_t now)
{
- char *statsdir = NULL, *filename = NULL, *str = NULL;
+ char *str = NULL;
if (!start_of_dirreq_stats_interval)
return 0; /* Not initialized. */
@@ -1118,21 +1282,13 @@ geoip_dirreq_stats_write(time_t now)
str = geoip_format_dirreq_stats(now);
/* Write dirreq-stats string to disk. */
- statsdir = get_datadir_fname("stats");
- if (check_private_dir(statsdir, CPD_CREATE, get_options()->User) < 0) {
- log_warn(LD_HIST, "Unable to create stats/ directory!");
- goto done;
+ if (!check_or_create_data_subdir("stats")) {
+ write_to_data_subdir("stats", "dirreq-stats", str, "dirreq statistics");
+ /* Reset measurement interval start. */
+ geoip_reset_dirreq_stats(now);
}
- filename = get_datadir_fname2("stats", "dirreq-stats");
- if (write_str_to_file(filename, str, 0) < 0)
- log_warn(LD_HIST, "Unable to write dirreq statistics to disk!");
-
- /* Reset measurement interval start. */
- geoip_reset_dirreq_stats(now);
done:
- tor_free(statsdir);
- tor_free(filename);
tor_free(str);
return start_of_dirreq_stats_interval + WRITE_STATS_INTERVAL;
}
@@ -1169,6 +1325,8 @@ validate_bridge_stats(const char *stats_str, time_t now)
const char *BRIDGE_STATS_END = "bridge-stats-end ";
const char *BRIDGE_IPS = "bridge-ips ";
const char *BRIDGE_IPS_EMPTY_LINE = "bridge-ips\n";
+ const char *BRIDGE_TRANSPORTS = "bridge-ip-transports ";
+ const char *BRIDGE_TRANSPORTS_EMPTY_LINE = "bridge-ip-transports\n";
const char *tmp;
time_t stats_end_time;
int seconds;
@@ -1203,6 +1361,15 @@ validate_bridge_stats(const char *stats_str, time_t now)
return 0;
}
+ /* Parse: "bridge-ip-transports PT=N,PT=N,..." */
+ tmp = find_str_at_start_of_line(stats_str, BRIDGE_TRANSPORTS);
+ if (!tmp) {
+ /* Look if there is an empty "bridge-ip-transports" line */
+ tmp = find_str_at_start_of_line(stats_str, BRIDGE_TRANSPORTS_EMPTY_LINE);
+ if (!tmp)
+ return 0;
+ }
+
return 1;
}
@@ -1216,7 +1383,8 @@ static char *bridge_stats_extrainfo = NULL;
char *
geoip_format_bridge_stats(time_t now)
{
- char *out = NULL, *data = NULL;
+ char *out = NULL;
+ char *country_data = NULL, *ipver_data = NULL, *transport_data = NULL;
long duration = now - start_of_bridge_stats_interval;
char written[ISO_TIME_LEN+1];
@@ -1226,14 +1394,21 @@ geoip_format_bridge_stats(time_t now)
return NULL; /* Not initialized. */
format_iso_time(written, now);
- data = geoip_get_client_history(GEOIP_CLIENT_CONNECT);
+ geoip_get_client_history(GEOIP_CLIENT_CONNECT, &country_data, &ipver_data);
+ transport_data = geoip_get_transport_history();
tor_asprintf(&out,
"bridge-stats-end %s (%ld s)\n"
- "bridge-ips %s\n",
+ "bridge-ips %s\n"
+ "bridge-ip-versions %s\n"
+ "bridge-ip-transports %s\n",
written, duration,
- data ? data : "");
- tor_free(data);
+ country_data ? country_data : "",
+ ipver_data ? ipver_data : "",
+ transport_data ? transport_data : "");
+ tor_free(country_data);
+ tor_free(ipver_data);
+ tor_free(transport_data);
return out;
}
@@ -1244,17 +1419,20 @@ geoip_format_bridge_stats(time_t now)
static char *
format_bridge_stats_controller(time_t now)
{
- char *out = NULL, *data = NULL;
+ char *out = NULL, *country_data = NULL, *ipver_data = NULL;
char started[ISO_TIME_LEN+1];
(void) now;
format_iso_time(started, start_of_bridge_stats_interval);
- data = geoip_get_client_history(GEOIP_CLIENT_CONNECT);
+ geoip_get_client_history(GEOIP_CLIENT_CONNECT, &country_data, &ipver_data);
tor_asprintf(&out,
- "TimeStarted=\"%s\" CountrySummary=%s",
- started, data ? data : "");
- tor_free(data);
+ "TimeStarted=\"%s\" CountrySummary=%s IPVersions=%s",
+ started,
+ country_data ? country_data : "",
+ ipver_data ? ipver_data : "");
+ tor_free(country_data);
+ tor_free(ipver_data);
return out;
}
@@ -1263,7 +1441,7 @@ format_bridge_stats_controller(time_t now)
time_t
geoip_bridge_stats_write(time_t now)
{
- char *filename = NULL, *val = NULL, *statsdir = NULL;
+ char *val = NULL;
/* Check if 24 hours have passed since starting measurements. */
if (now < start_of_bridge_stats_interval + WRITE_STATS_INTERVAL)
@@ -1283,24 +1461,20 @@ geoip_bridge_stats_write(time_t now)
start_of_bridge_stats_interval = now;
/* Write it to disk. */
- statsdir = get_datadir_fname("stats");
- if (check_private_dir(statsdir, CPD_CREATE, get_options()->User) < 0)
- goto done;
- filename = get_datadir_fname2("stats", "bridge-stats");
-
- write_str_to_file(filename, bridge_stats_extrainfo, 0);
-
- /* Tell the controller, "hey, there are clients!" */
- {
- char *controller_str = format_bridge_stats_controller(now);
- if (controller_str)
- control_event_clients_seen(controller_str);
- tor_free(controller_str);
+ if (!check_or_create_data_subdir("stats")) {
+ write_to_data_subdir("stats", "bridge-stats",
+ bridge_stats_extrainfo, "bridge statistics");
+
+ /* Tell the controller, "hey, there are clients!" */
+ {
+ char *controller_str = format_bridge_stats_controller(now);
+ if (controller_str)
+ control_event_clients_seen(controller_str);
+ tor_free(controller_str);
+ }
}
- done:
- tor_free(filename);
- tor_free(statsdir);
+ done:
return start_of_bridge_stats_interval + WRITE_STATS_INTERVAL;
}
@@ -1316,8 +1490,11 @@ load_bridge_stats(time_t now)
fname = get_datadir_fname2("stats", "bridge-stats");
contents = read_file_to_str(fname, RFTS_IGNORE_MISSING, NULL);
- if (contents && validate_bridge_stats(contents, now))
+ if (contents && validate_bridge_stats(contents, now)) {
bridge_stats_extrainfo = contents;
+ } else {
+ tor_free(contents);
+ }
tor_free(fname);
}
@@ -1381,11 +1558,13 @@ geoip_format_entry_stats(time_t now)
tor_assert(now >= start_of_entry_stats_interval);
- data = geoip_get_client_history(GEOIP_CLIENT_CONNECT);
+ geoip_get_client_history(GEOIP_CLIENT_CONNECT, &data, NULL);
format_iso_time(t, now);
- tor_asprintf(&result, "entry-stats-end %s (%u s)\nentry-ips %s\n",
- t, (unsigned) (now - start_of_entry_stats_interval),
- data ? data : "");
+ tor_asprintf(&result,
+ "entry-stats-end %s (%u s)\n"
+ "entry-ips %s\n",
+ t, (unsigned) (now - start_of_entry_stats_interval),
+ data ? data : "");
tor_free(data);
return result;
}
@@ -1397,7 +1576,7 @@ geoip_format_entry_stats(time_t now)
time_t
geoip_entry_stats_write(time_t now)
{
- char *statsdir = NULL, *filename = NULL, *str = NULL;
+ char *str = NULL;
if (!start_of_entry_stats_interval)
return 0; /* Not initialized. */
@@ -1411,21 +1590,14 @@ geoip_entry_stats_write(time_t now)
str = geoip_format_entry_stats(now);
/* Write entry-stats string to disk. */
- statsdir = get_datadir_fname("stats");
- if (check_private_dir(statsdir, CPD_CREATE, get_options()->User) < 0) {
- log_warn(LD_HIST, "Unable to create stats/ directory!");
- goto done;
- }
- filename = get_datadir_fname2("stats", "entry-stats");
- if (write_str_to_file(filename, str, 0) < 0)
- log_warn(LD_HIST, "Unable to write entry statistics to disk!");
+ if (!check_or_create_data_subdir("stats")) {
+ write_to_data_subdir("stats", "entry-stats", str, "entry statistics");
- /* Reset measurement interval start. */
- geoip_reset_entry_stats(now);
+ /* Reset measurement interval start. */
+ geoip_reset_entry_stats(now);
+ }
done:
- tor_free(statsdir);
- tor_free(filename);
tor_free(str);
return start_of_entry_stats_interval + WRITE_STATS_INTERVAL;
}
@@ -1437,25 +1609,30 @@ getinfo_helper_geoip(control_connection_t *control_conn,
const char **errmsg)
{
(void)control_conn;
- if (!geoip_is_loaded()) {
- *errmsg = "GeoIP data not loaded";
- return -1;
- }
if (!strcmpstart(question, "ip-to-country/")) {
int c;
- uint32_t ip;
- struct in_addr in;
+ sa_family_t family;
+ tor_addr_t addr;
question += strlen("ip-to-country/");
- if (tor_inet_aton(question, &in) != 0) {
- ip = ntohl(in.s_addr);
- c = geoip_get_country_by_ip(ip);
- *answer = tor_strdup(geoip_get_country_name(c));
+ family = tor_addr_parse(&addr, question);
+ if (family != AF_INET && family != AF_INET6) {
+ *errmsg = "Invalid address family";
+ return -1;
+ }
+ if (!geoip_is_loaded(family)) {
+ *errmsg = "GeoIP data not loaded";
+ return -1;
}
+ if (family == AF_INET)
+ c = geoip_get_country_by_ipv4(tor_addr_to_ipv4h(&addr));
+ else /* AF_INET6 */
+ c = geoip_get_country_by_ipv6(tor_addr_to_in6(&addr));
+ *answer = tor_strdup(geoip_get_country_name(c));
}
return 0;
}
-/** Release all storage held by the GeoIP database. */
+/** Release all storage held by the GeoIP databases and country list. */
static void
clear_geoip_db(void)
{
@@ -1465,13 +1642,20 @@ clear_geoip_db(void)
}
strmap_free(country_idxplus1_by_lc_code, NULL);
- if (geoip_entries) {
- SMARTLIST_FOREACH(geoip_entries, geoip_entry_t *, ent, tor_free(ent));
- smartlist_free(geoip_entries);
+ if (geoip_ipv4_entries) {
+ SMARTLIST_FOREACH(geoip_ipv4_entries, geoip_ipv4_entry_t *, ent,
+ tor_free(ent));
+ smartlist_free(geoip_ipv4_entries);
+ }
+ if (geoip_ipv6_entries) {
+ SMARTLIST_FOREACH(geoip_ipv6_entries, geoip_ipv6_entry_t *, ent,
+ tor_free(ent));
+ smartlist_free(geoip_ipv6_entries);
}
geoip_countries = NULL;
country_idxplus1_by_lc_code = NULL;
- geoip_entries = NULL;
+ geoip_ipv4_entries = NULL;
+ geoip_ipv6_entries = NULL;
}
/** Release all storage held in this file. */
@@ -1483,7 +1667,7 @@ geoip_free_all(void)
for (ent = HT_START(clientmap, &client_history); ent != NULL; ent = next) {
this = *ent;
next = HT_NEXT_RMV(clientmap, &client_history, ent);
- tor_free(this);
+ clientmap_entry_free(this);
}
HT_CLEAR(clientmap, &client_history);
}
@@ -1498,5 +1682,6 @@ geoip_free_all(void)
}
clear_geoip_db();
+ tor_free(bridge_stats_extrainfo);
}
diff --git a/src/or/geoip.h b/src/or/geoip.h
index 4aed4e07b..b9b53c300 100644
--- a/src/or/geoip.h
+++ b/src/or/geoip.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,37 +9,42 @@
* \brief Header file for geoip.c.
**/
-#ifndef _TOR_GEOIP_H
-#define _TOR_GEOIP_H
+#ifndef TOR_GEOIP_H
+#define TOR_GEOIP_H
+
+#include "testsupport.h"
#ifdef GEOIP_PRIVATE
-int geoip_parse_entry(const char *line);
+STATIC int geoip_parse_entry(const char *line, sa_family_t family);
+STATIC int geoip_get_country_by_ipv4(uint32_t ipaddr);
+STATIC int geoip_get_country_by_ipv6(const struct in6_addr *addr);
#endif
int should_record_bridge_info(const or_options_t *options);
-int geoip_load_file(const char *filename, const or_options_t *options);
-int geoip_get_country_by_ip(uint32_t ipaddr);
+int geoip_load_file(sa_family_t family, const char *filename);
int geoip_get_country_by_addr(const tor_addr_t *addr);
int geoip_get_n_countries(void);
const char *geoip_get_country_name(country_t num);
-int geoip_is_loaded(void);
-const char *geoip_db_digest(void);
+int geoip_is_loaded(sa_family_t family);
+const char *geoip_db_digest(sa_family_t family);
country_t geoip_get_country(const char *countrycode);
void geoip_note_client_seen(geoip_client_action_t action,
- const tor_addr_t *addr, time_t now);
+ const tor_addr_t *addr, const char *transport_name,
+ time_t now);
void geoip_remove_old_clients(time_t cutoff);
-void geoip_note_ns_response(geoip_client_action_t action,
- geoip_ns_response_t response);
-char *geoip_get_client_history(geoip_client_action_t action);
-char *geoip_get_request_history(geoip_client_action_t action);
+void geoip_note_ns_response(geoip_ns_response_t response);
+char *geoip_get_transport_history(void);
+int geoip_get_client_history(geoip_client_action_t action,
+ char **country_str, char **ipver_str);
+char *geoip_get_request_history(void);
int getinfo_helper_geoip(control_connection_t *control_conn,
const char *question, char **answer,
const char **errmsg);
void geoip_free_all(void);
void geoip_start_dirreq(uint64_t dirreq_id, size_t response_size,
- geoip_client_action_t action, dirreq_type_t type);
+ dirreq_type_t type);
void geoip_change_dirreq_state(uint64_t dirreq_id, dirreq_type_t type,
dirreq_state_t new_state);
diff --git a/src/or/hibernate.c b/src/or/hibernate.c
index 3a9c1e422..c433ac1be 100644
--- a/src/or/hibernate.c
+++ b/src/or/hibernate.c
@@ -1,5 +1,5 @@
/* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -23,12 +23,15 @@ hibernating, phase 2:
#define HIBERNATE_PRIVATE
#include "or.h"
+#include "channel.h"
+#include "channeltls.h"
#include "config.h"
#include "connection.h"
#include "connection_edge.h"
#include "hibernate.h"
#include "main.h"
#include "router.h"
+#include "statefile.h"
extern long stats_n_seconds_working; /* published uptime */
@@ -236,8 +239,8 @@ accounting_parse_options(const or_options_t *options, int validate_only)
/** If we want to manage the accounting system and potentially
* hibernate, return 1, else return 0.
*/
-int
-accounting_is_enabled(const or_options_t *options)
+MOCK_IMPL(int,
+accounting_is_enabled,(const or_options_t *options))
{
if (options->AccountingMax)
return 1;
@@ -252,6 +255,13 @@ accounting_get_interval_length(void)
return (int)(interval_end_time - interval_start_time);
}
+/** Return the time at which the current accounting interval will end. */
+MOCK_IMPL(time_t,
+accounting_get_end_time,(void))
+{
+ return interval_end_time;
+}
+
/** Called from main.c to tell us that <b>seconds</b> seconds have
* passed, <b>n_read</b> bytes have been read, and <b>n_written</b>
* bytes have been written. */
@@ -503,10 +513,6 @@ accounting_run_housekeeping(time_t now)
}
}
-/** When we have no idea how fast we are, how long do we assume it will take
- * us to exhaust our bandwidth? */
-#define GUESS_TIME_TO_USE_BANDWIDTH (24*60*60)
-
/** Based on our interval and our estimated bandwidth, choose a
* deterministic (but random-ish) time to wake up. */
static void
@@ -642,7 +648,15 @@ read_bandwidth_usage(void)
{
char *fname = get_datadir_fname("bw_accounting");
- unlink(fname);
+ int res;
+
+ res = unlink(fname);
+ if (res != 0) {
+ log_warn(LD_FS,
+ "Failed to unlink %s: %s",
+ fname, strerror(errno));
+ }
+
tor_free(fname);
}
@@ -809,8 +823,8 @@ hibernate_begin_shutdown(void)
}
/** Return true iff we are currently hibernating. */
-int
-we_are_hibernating(void)
+MOCK_IMPL(int,
+we_are_hibernating,(void))
{
return hibernate_state != HIBERNATE_STATE_LIVE;
}
@@ -845,7 +859,13 @@ hibernate_go_dormant(time_t now)
if (conn->type == CONN_TYPE_AP) /* send socks failure if needed */
connection_mark_unattached_ap(TO_ENTRY_CONN(conn),
END_STREAM_REASON_HIBERNATING);
- else
+ else if (conn->type == CONN_TYPE_OR) {
+ if (TO_OR_CONN(conn)->chan) {
+ channel_mark_for_close(TLS_CHAN_TO_BASE(TO_OR_CONN(conn)->chan));
+ } else {
+ connection_mark_for_close(conn);
+ }
+ } else
connection_mark_for_close(conn);
}
@@ -881,12 +901,12 @@ hibernate_end_time_elapsed(time_t now)
/* We weren't sleeping before; we should sleep now. */
log_notice(LD_ACCT,
"Accounting period ended. Commencing hibernation until "
- "%s GMT", buf);
+ "%s UTC", buf);
hibernate_go_dormant(now);
} else {
log_notice(LD_ACCT,
"Accounting period ended. This period, we will hibernate"
- " until %s GMT",buf);
+ " until %s UTC",buf);
}
}
}
@@ -1005,6 +1025,7 @@ getinfo_helper_accounting(control_connection_t *conn,
return 0;
}
+#ifdef TOR_UNIT_TESTS
/**
* Manually change the hibernation state. Private; used only by the unit
* tests.
@@ -1014,4 +1035,5 @@ hibernate_set_state_for_testing_(hibernate_state_t newstate)
{
hibernate_state = newstate;
}
+#endif
diff --git a/src/or/hibernate.h b/src/or/hibernate.h
index 9aa026b7b..38ecb7512 100644
--- a/src/or/hibernate.h
+++ b/src/or/hibernate.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,18 +9,21 @@
* \brief Header file for hibernate.c.
**/
-#ifndef _TOR_HIBERNATE_H
-#define _TOR_HIBERNATE_H
+#ifndef TOR_HIBERNATE_H
+#define TOR_HIBERNATE_H
+
+#include "testsupport.h"
int accounting_parse_options(const or_options_t *options, int validate_only);
-int accounting_is_enabled(const or_options_t *options);
+MOCK_DECL(int, accounting_is_enabled, (const or_options_t *options));
int accounting_get_interval_length(void);
+MOCK_DECL(time_t, accounting_get_end_time, (void));
void configure_accounting(time_t now);
void accounting_run_housekeeping(time_t now);
void accounting_add_bytes(size_t n_read, size_t n_written, int seconds);
int accounting_record_bandwidth_usage(time_t now, or_state_t *state);
void hibernate_begin_shutdown(void);
-int we_are_hibernating(void);
+MOCK_DECL(int, we_are_hibernating, (void));
void consider_hibernation(time_t now);
int getinfo_helper_accounting(control_connection_t *conn,
const char *question, char **answer,
@@ -45,8 +48,10 @@ typedef enum {
HIBERNATE_STATE_INITIAL=5
} hibernate_state_t;
+#ifdef TOR_UNIT_TESTS
void hibernate_set_state_for_testing_(hibernate_state_t newstate);
#endif
+#endif
#endif
diff --git a/src/or/include.am b/src/or/include.am
new file mode 100644
index 000000000..47bdd0990
--- /dev/null
+++ b/src/or/include.am
@@ -0,0 +1,225 @@
+bin_PROGRAMS+= src/or/tor
+noinst_LIBRARIES += \
+ src/or/libtor.a
+if UNITTESTS_ENABLED
+noinst_LIBRARIES += \
+ src/or/libtor-testing.a
+endif
+if COVERAGE_ENABLED
+noinst_PROGRAMS+= src/or/tor-cov
+endif
+
+if BUILD_NT_SERVICES
+tor_platform_source=src/or/ntmain.c
+else
+tor_platform_source=
+endif
+
+EXTRA_DIST+= src/or/ntmain.c src/or/or_sha1.i src/or/Makefile.nmake
+
+if USE_EXTERNAL_EVDNS
+evdns_source=
+else
+evdns_source=src/ext/eventdns.c
+endif
+
+if CURVE25519_ENABLED
+onion_ntor_source=src/or/onion_ntor.c
+else
+onion_ntor_source=
+endif
+
+LIBTOR_A_SOURCES = \
+ src/or/addressmap.c \
+ src/or/buffers.c \
+ src/or/channel.c \
+ src/or/channeltls.c \
+ src/or/circpathbias.c \
+ src/or/circuitbuild.c \
+ src/or/circuitlist.c \
+ src/or/circuitmux.c \
+ src/or/circuitmux_ewma.c \
+ src/or/circuitstats.c \
+ src/or/circuituse.c \
+ src/or/command.c \
+ src/or/config.c \
+ src/or/confparse.c \
+ src/or/connection.c \
+ src/or/connection_edge.c \
+ src/or/connection_or.c \
+ src/or/control.c \
+ src/or/cpuworker.c \
+ src/or/directory.c \
+ src/or/dirserv.c \
+ src/or/dirvote.c \
+ src/or/dns.c \
+ src/or/dnsserv.c \
+ src/or/fp_pair.c \
+ src/or/geoip.c \
+ src/or/entrynodes.c \
+ src/or/ext_orport.c \
+ src/or/hibernate.c \
+ src/or/main.c \
+ src/or/microdesc.c \
+ src/or/networkstatus.c \
+ src/or/nodelist.c \
+ src/or/onion.c \
+ src/or/onion_fast.c \
+ src/or/onion_tap.c \
+ src/or/transports.c \
+ src/or/policies.c \
+ src/or/reasons.c \
+ src/or/relay.c \
+ src/or/rendclient.c \
+ src/or/rendcommon.c \
+ src/or/rendmid.c \
+ src/or/rendservice.c \
+ src/or/rephist.c \
+ src/or/replaycache.c \
+ src/or/router.c \
+ src/or/routerlist.c \
+ src/or/routerparse.c \
+ src/or/routerset.c \
+ src/or/statefile.c \
+ src/or/status.c \
+ $(evdns_source) \
+ $(tor_platform_source) \
+ $(onion_ntor_source) \
+ src/or/config_codedigest.c
+
+src_or_libtor_a_SOURCES = $(LIBTOR_A_SOURCES)
+src_or_libtor_testing_a_SOURCES = $(LIBTOR_A_SOURCES)
+
+#libtor_a_LIBADD = ../common/libor.a ../common/libor-crypto.a \
+# ../common/libor-event.a
+
+
+src_or_tor_SOURCES = src/or/tor_main.c
+AM_CPPFLAGS += -I$(srcdir)/src/or -Isrc/or
+
+src/or/tor_main.o: micro-revision.i
+
+AM_CPPFLAGS += -DSHARE_DATADIR="\"$(datadir)\"" \
+ -DLOCALSTATEDIR="\"$(localstatedir)\"" \
+ -DBINDIR="\"$(bindir)\""
+
+src_or_libtor_testing_a_CPPFLAGS = -DTOR_UNIT_TESTS $(AM_CPPFLAGS)
+src_or_libtor_testing_a_CFLAGS = $(AM_CFLAGS) $(TEST_CFLAGS)
+
+# -L flags need to go in LDFLAGS. -l flags need to go in LDADD.
+# This seems to matter nowhere but on windows, but I assure you that it
+# matters a lot there, and is quite hard to debug if you forget to do it.
+
+
+src_or_tor_LDFLAGS = @TOR_LDFLAGS_zlib@ @TOR_LDFLAGS_openssl@ @TOR_LDFLAGS_libevent@
+src_or_tor_LDADD = src/or/libtor.a src/common/libor.a \
+ src/common/libor-crypto.a $(LIBDONNA) \
+ src/common/libor-event.a \
+ @TOR_ZLIB_LIBS@ @TOR_LIB_MATH@ @TOR_LIBEVENT_LIBS@ @TOR_OPENSSL_LIBS@ \
+ @TOR_LIB_WS32@ @TOR_LIB_GDI@ @CURVE25519_LIBS@
+
+if COVERAGE_ENABLED
+src_or_tor_cov_SOURCES = src/or/tor_main.c
+src_or_tor_cov_CPPFLAGS = -DTOR_UNIT_TESTS $(AM_CPPFLAGS)
+src_or_tor_cov_CFLAGS = $(AM_CFLAGS) $(TEST_CFLAGS)
+src_or_tor_cov_LDFLAGS = @TOR_LDFLAGS_zlib@ @TOR_LDFLAGS_openssl@ @TOR_LDFLAGS_libevent@
+src_or_tor_cov_LDADD = src/or/libtor-testing.a src/common/libor-testing.a \
+ src/common/libor-crypto-testing.a $(LIBDONNA) \
+ src/common/libor-event-testing.a \
+ @TOR_ZLIB_LIBS@ @TOR_LIB_MATH@ @TOR_LIBEVENT_LIBS@ @TOR_OPENSSL_LIBS@ \
+ @TOR_LIB_WS32@ @TOR_LIB_GDI@ @CURVE25519_LIBS@
+endif
+
+ORHEADERS = \
+ src/or/addressmap.h \
+ src/or/buffers.h \
+ src/or/channel.h \
+ src/or/channeltls.h \
+ src/or/circpathbias.h \
+ src/or/circuitbuild.h \
+ src/or/circuitlist.h \
+ src/or/circuitmux.h \
+ src/or/circuitmux_ewma.h \
+ src/or/circuitstats.h \
+ src/or/circuituse.h \
+ src/or/command.h \
+ src/or/config.h \
+ src/or/confparse.h \
+ src/or/connection.h \
+ src/or/connection_edge.h \
+ src/or/connection_or.h \
+ src/or/control.h \
+ src/or/cpuworker.h \
+ src/or/directory.h \
+ src/or/dirserv.h \
+ src/or/dirvote.h \
+ src/or/dns.h \
+ src/or/dnsserv.h \
+ src/or/eventdns_tor.h \
+ src/or/ext_orport.h \
+ src/or/fp_pair.h \
+ src/or/geoip.h \
+ src/or/entrynodes.h \
+ src/or/hibernate.h \
+ src/or/main.h \
+ src/or/microdesc.h \
+ src/or/networkstatus.h \
+ src/or/nodelist.h \
+ src/or/ntmain.h \
+ src/or/onion.h \
+ src/or/onion_fast.h \
+ src/or/onion_ntor.h \
+ src/or/onion_tap.h \
+ src/or/or.h \
+ src/or/transports.h \
+ src/or/policies.h \
+ src/or/reasons.h \
+ src/or/relay.h \
+ src/or/rendclient.h \
+ src/or/rendcommon.h \
+ src/or/rendmid.h \
+ src/or/rendservice.h \
+ src/or/rephist.h \
+ src/or/replaycache.h \
+ src/or/router.h \
+ src/or/routerlist.h \
+ src/or/routerset.h \
+ src/or/routerparse.h \
+ src/or/statefile.h \
+ src/or/status.h
+
+noinst_HEADERS+= $(ORHEADERS) micro-revision.i
+
+src/or/config_codedigest.o: src/or/or_sha1.i
+
+micro-revision.i: FORCE
+ @rm -f micro-revision.tmp; \
+ if test -d "$(top_srcdir)/.git" && \
+ test -x "`which git 2>&1;true`"; then \
+ HASH="`cd "$(top_srcdir)" && git rev-parse --short=16 HEAD`"; \
+ echo \"$$HASH\" > micro-revision.tmp; \
+ fi; \
+ if test ! -f micro-revision.tmp ; then \
+ if test ! -f micro-revision.i ; then \
+ echo '""' > micro-revision.i; \
+ fi; \
+ elif test ! -f micro-revision.i || \
+ test x"`cat micro-revision.tmp`" != x"`cat micro-revision.i`"; then \
+ mv micro-revision.tmp micro-revision.i; \
+ fi; true
+
+src/or/or_sha1.i: $(src_or_tor_SOURCES) $(src_or_libtor_a_SOURCES) $(ORHEADERS)
+ $(AM_V_GEN)if test "@SHA1SUM@" != none; then \
+ (cd "$(srcdir)" && "@SHA1SUM@" $(src_or_tor_SOURCES) $(src_or_libtor_a_SOURCES) $(ORHEADERS) ) | \
+ "@SED@" -n 's/^\(.*\)$$/"\1\\n"/p' > src/or/or_sha1.i; \
+ elif test "@OPENSSL@" != none; then \
+ (cd "$(srcdir)" && "@OPENSSL@" sha1 $(src_or_tor_SOURCES) $(src_or_libtor_a_SOURCES) $(ORHEADERS)) | \
+ "@SED@" -n 's/SHA1(\(.*\))= \(.*\)/"\2 \1\\n"/p' > src/or/or_sha1.i; \
+ else \
+ rm src/or/or_sha1.i; \
+ touch src/or/or_sha1.i; \
+ fi
+
+CLEANFILES+= micro-revision.i src/or/micro-revision.i
+
+FORCE:
diff --git a/src/or/main.c b/src/or/main.c
index 34bf3e50f..3c661cd12 100644
--- a/src/or/main.c
+++ b/src/or/main.c
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -12,12 +12,17 @@
#define MAIN_PRIVATE
#include "or.h"
+#include "addressmap.h"
+#include "backtrace.h"
#include "buffers.h"
+#include "channel.h"
+#include "channeltls.h"
#include "circuitbuild.h"
#include "circuitlist.h"
#include "circuituse.h"
#include "command.h"
#include "config.h"
+#include "confparse.h"
#include "connection.h"
#include "connection_edge.h"
#include "connection_or.h"
@@ -28,6 +33,7 @@
#include "dirvote.h"
#include "dns.h"
#include "dnsserv.h"
+#include "entrynodes.h"
#include "geoip.h"
#include "hibernate.h"
#include "main.h"
@@ -46,12 +52,15 @@
#include "router.h"
#include "routerlist.h"
#include "routerparse.h"
+#include "statefile.h"
#include "status.h"
+#include "ext_orport.h"
#ifdef USE_DMALLOC
#include <dmalloc.h>
#include <openssl/crypto.h>
#endif
#include "memarea.h"
+#include "../common/sandbox.h"
#ifdef HAVE_EVENT2_EVENT_H
#include <event2/event.h>
@@ -150,12 +159,6 @@ int can_complete_circuit=0;
/** How often do we 'forgive' undownloadable router descriptors and attempt
* to download them again? */
#define DESCRIPTOR_FAILURE_RESET_INTERVAL (60*60)
-/** How long do we let a directory connection stall before expiring it? */
-#define DIR_CONN_MAX_STALL (5*60)
-
-/** How long do we let OR connections handshake before we decide that
- * they are obsolete? */
-#define TLS_HANDSHAKE_TIMEOUT (60)
/** Decides our behavior when no logs are configured/before any
* logs have been configured. For 0, we log notice to stdout as normal.
@@ -350,6 +353,8 @@ connection_remove(connection_t *conn)
(int)conn->s, conn_type_to_string(conn->type),
smartlist_len(connection_array));
+ control_event_conn_bandwidth(conn);
+
tor_assert(conn->conn_array_index >= 0);
current_index = conn->conn_array_index;
connection_unregister_events(conn); /* This is redundant, but cheap. */
@@ -397,15 +402,40 @@ connection_unlink(connection_t *conn)
if (conn->type == CONN_TYPE_OR) {
if (!tor_digest_is_zero(TO_OR_CONN(conn)->identity_digest))
connection_or_remove_from_identity_map(TO_OR_CONN(conn));
+ /* connection_unlink() can only get called if the connection
+ * was already on the closeable list, and it got there by
+ * connection_mark_for_close(), which was called from
+ * connection_or_close_normally() or
+ * connection_or_close_for_error(), so the channel should
+ * already be in CHANNEL_STATE_CLOSING, and then the
+ * connection_about_to_close_connection() goes to
+ * connection_or_about_to_close(), which calls channel_closed()
+ * to notify the channel_t layer, and closed the channel, so
+ * nothing more to do here to deal with the channel associated
+ * with an orconn.
+ */
}
connection_free(conn);
}
+/** Initialize the global connection list, closeable connection list,
+ * and active connection list. */
+STATIC void
+init_connection_lists(void)
+{
+ if (!connection_array)
+ connection_array = smartlist_new();
+ if (!closeable_connection_lst)
+ closeable_connection_lst = smartlist_new();
+ if (!active_linked_connection_lst)
+ active_linked_connection_lst = smartlist_new();
+}
+
/** Schedule <b>conn</b> to be closed. **/
void
add_connection_to_closeable_list(connection_t *conn)
{
- tor_assert(!smartlist_isin(closeable_connection_lst, conn));
+ tor_assert(!smartlist_contains(closeable_connection_lst, conn));
tor_assert(conn->marked_for_close);
assert_connection_ok(conn, time(NULL));
smartlist_add(closeable_connection_lst, conn);
@@ -415,14 +445,14 @@ add_connection_to_closeable_list(connection_t *conn)
int
connection_is_on_closeable_list(connection_t *conn)
{
- return smartlist_isin(closeable_connection_lst, conn);
+ return smartlist_contains(closeable_connection_lst, conn);
}
/** Return true iff conn is in the current poll array. */
int
connection_in_array(connection_t *conn)
{
- return smartlist_isin(connection_array, conn);
+ return smartlist_contains(connection_array, conn);
}
/** Set <b>*array</b> to an array of all connections, and <b>*n</b>
@@ -439,15 +469,15 @@ get_connection_array(void)
/** Provides the traffic read and written over the life of the process. */
-uint64_t
-get_bytes_read(void)
+MOCK_IMPL(uint64_t,
+get_bytes_read,(void))
{
return stats_n_bytes_read;
}
/* DOCDOC get_bytes_written */
-uint64_t
-get_bytes_written(void)
+MOCK_IMPL(uint64_t,
+get_bytes_written,(void))
{
return stats_n_bytes_written;
}
@@ -494,8 +524,8 @@ connection_is_reading(connection_t *conn)
}
/** Tell the main loop to stop notifying <b>conn</b> of any read events. */
-void
-connection_stop_reading(connection_t *conn)
+MOCK_IMPL(void,
+connection_stop_reading,(connection_t *conn))
{
tor_assert(conn);
@@ -519,8 +549,8 @@ connection_stop_reading(connection_t *conn)
}
/** Tell the main loop to start notifying <b>conn</b> of any read events. */
-void
-connection_start_reading(connection_t *conn)
+MOCK_IMPL(void,
+connection_start_reading,(connection_t *conn))
{
tor_assert(conn);
@@ -559,8 +589,8 @@ connection_is_writing(connection_t *conn)
}
/** Tell the main loop to stop notifying <b>conn</b> of any write events. */
-void
-connection_stop_writing(connection_t *conn)
+MOCK_IMPL(void,
+connection_stop_writing,(connection_t *conn))
{
tor_assert(conn);
@@ -585,8 +615,8 @@ connection_stop_writing(connection_t *conn)
}
/** Tell the main loop to start notifying <b>conn</b> of any write events. */
-void
-connection_start_writing(connection_t *conn)
+MOCK_IMPL(void,
+connection_start_writing,(connection_t *conn))
{
tor_assert(conn);
@@ -649,7 +679,7 @@ connection_start_reading_from_linked_conn(connection_t *conn)
tor_event_base_loopexit(tor_libevent_get_base(), &tv);
}
} else {
- tor_assert(smartlist_isin(active_linked_connection_lst, conn));
+ tor_assert(smartlist_contains(active_linked_connection_lst, conn));
}
}
@@ -669,12 +699,12 @@ connection_stop_reading_from_linked_conn(connection_t *conn)
* so let's leave it alone for now. */
smartlist_remove(active_linked_connection_lst, conn);
} else {
- tor_assert(!smartlist_isin(active_linked_connection_lst, conn));
+ tor_assert(!smartlist_contains(active_linked_connection_lst, conn));
}
}
/** Close all connections that have been scheduled to get closed. */
-static void
+STATIC void
close_closeable_connections(void)
{
int i;
@@ -796,7 +826,8 @@ conn_close_if_marked(int i)
}
#endif
- log_debug(LD_NET,"Cleaning up connection (fd %d).",conn->s);
+ log_debug(LD_NET,"Cleaning up connection (fd "TOR_SOCKET_T_FORMAT").",
+ conn->s);
/* If the connection we are about to close was trying to connect to
a proxy server and failed, the client won't be able to use that
@@ -888,16 +919,7 @@ conn_close_if_marked(int i)
return 0;
}
if (connection_wants_to_flush(conn)) {
- int severity;
- if (conn->type == CONN_TYPE_EXIT ||
- (conn->type == CONN_TYPE_OR && server_mode(get_options())) ||
- (conn->type == CONN_TYPE_DIR && conn->purpose == DIR_PURPOSE_SERVER))
- severity = LOG_INFO;
- else
- severity = LOG_NOTICE;
- /* XXXX Maybe allow this to happen a certain amount per hour; it usually
- * is meaningless. */
- log_fn(severity, LD_NET, "We stalled too much while trying to write %d "
+ log_fn(LOG_INFO, LD_NET, "We stalled too much while trying to write %d "
"bytes to address %s. If this happens a lot, either "
"something is wrong with your network connection, or "
"something is wrong with theirs. "
@@ -953,8 +975,9 @@ directory_info_has_arrived(time_t now, int from_cache)
const or_options_t *options = get_options();
if (!router_have_minimum_dir_info()) {
- int quiet = directory_too_idle_to_fetch_descriptors(options, now);
- log(quiet ? LOG_INFO : LOG_NOTICE, LD_DIR,
+ int quiet = from_cache ||
+ directory_too_idle_to_fetch_descriptors(options, now);
+ tor_log(quiet ? LOG_INFO : LOG_NOTICE, LD_DIR,
"I learned some more directory information, but not enough to "
"build a circuit: %s", get_dir_info_status_string());
update_all_descriptor_downloads(now);
@@ -1013,9 +1036,11 @@ run_connection_housekeeping(int i, time_t now)
* if a server or received if a client) for 5 min */
if (conn->type == CONN_TYPE_DIR &&
((DIR_CONN_IS_SERVER(conn) &&
- conn->timestamp_lastwritten + DIR_CONN_MAX_STALL < now) ||
+ conn->timestamp_lastwritten
+ + options->TestingDirConnectionMaxStall < now) ||
(!DIR_CONN_IS_SERVER(conn) &&
- conn->timestamp_lastread + DIR_CONN_MAX_STALL < now))) {
+ conn->timestamp_lastread
+ + options->TestingDirConnectionMaxStall < now))) {
log_info(LD_DIR,"Expiring wedged directory conn (fd %d, purpose %d)",
(int)conn->s, conn->purpose);
/* This check is temporary; it's to let us know whether we should consider
@@ -1044,7 +1069,8 @@ run_connection_housekeeping(int i, time_t now)
tor_assert(conn->outbuf);
#endif
- if (or_conn->is_bad_for_new_circs && !or_conn->n_circuits) {
+ if (channel_is_bad_for_new_circs(TLS_CHAN_TO_BASE(or_conn->chan)) &&
+ !connection_or_get_num_circuits(or_conn)) {
/* It's bad for new circuits, and has no unmarked circuits on it:
* mark it now. */
log_info(LD_OR,
@@ -1054,28 +1080,29 @@ run_connection_housekeeping(int i, time_t now)
connection_or_connect_failed(TO_OR_CONN(conn),
END_OR_CONN_REASON_TIMEOUT,
"Tor gave up on the connection");
- connection_mark_and_flush(conn);
+ connection_or_close_normally(TO_OR_CONN(conn), 1);
} else if (!connection_state_is_open(conn)) {
if (past_keepalive) {
/* We never managed to actually get this connection open and happy. */
log_info(LD_OR,"Expiring non-open OR connection to fd %d (%s:%d).",
(int)conn->s,conn->address, conn->port);
- connection_mark_for_close(conn);
+ connection_or_close_normally(TO_OR_CONN(conn), 0);
}
- } else if (we_are_hibernating() && !or_conn->n_circuits &&
+ } else if (we_are_hibernating() &&
+ !connection_or_get_num_circuits(or_conn) &&
!connection_get_outbuf_len(conn)) {
/* We're hibernating, there's no circuits, and nothing to flush.*/
log_info(LD_OR,"Expiring non-used OR connection to fd %d (%s:%d) "
"[Hibernating or exiting].",
(int)conn->s,conn->address, conn->port);
- connection_mark_and_flush(conn);
- } else if (!or_conn->n_circuits &&
+ connection_or_close_normally(TO_OR_CONN(conn), 1);
+ } else if (!connection_or_get_num_circuits(or_conn) &&
now >= or_conn->timestamp_last_added_nonpadding +
IDLE_OR_CONN_TIMEOUT) {
log_info(LD_OR,"Expiring non-used OR connection to fd %d (%s:%d) "
"[idle %d].", (int)conn->s,conn->address, conn->port,
(int)(now - or_conn->timestamp_last_added_nonpadding));
- connection_mark_for_close(conn);
+ connection_or_close_normally(TO_OR_CONN(conn), 0);
} else if (
now >= or_conn->timestamp_lastempty + options->KeepalivePeriod*10 &&
now >= conn->timestamp_lastwritten + options->KeepalivePeriod*10) {
@@ -1085,7 +1112,7 @@ run_connection_housekeeping(int i, time_t now)
(int)conn->s, conn->address, conn->port,
(int)connection_get_outbuf_len(conn),
(int)(now-conn->timestamp_lastwritten));
- connection_mark_for_close(conn);
+ connection_or_close_normally(TO_OR_CONN(conn), 0);
} else if (past_keepalive && !connection_get_outbuf_len(conn)) {
/* send a padding cell */
log_fn(LOG_DEBUG,LD_OR,"Sending keepalive to (%s:%d)",
@@ -1108,7 +1135,7 @@ signewnym_impl(time_t now)
return;
}
- circuit_expire_all_dirty_circs();
+ circuit_mark_all_dirty_circs_as_unusable();
addressmap_clear_transient();
rend_client_purge_state();
time_of_last_signewnym = now;
@@ -1126,6 +1153,18 @@ get_signewnym_epoch(void)
return newnym_epoch;
}
+static time_t time_to_check_descriptor = 0;
+/**
+ * Update our schedule so that we'll check whether we need to update our
+ * descriptor immediately, rather than after up to CHECK_DESCRIPTOR_INTERVAL
+ * seconds.
+ */
+void
+reschedule_descriptor_update_check(void)
+{
+ time_to_check_descriptor = 0;
+}
+
/** Perform regular maintenance tasks. This function gets run once per
* second by second_elapsed_callback().
*/
@@ -1135,8 +1174,7 @@ run_scheduled_events(time_t now)
static time_t last_rotated_x509_certificate = 0;
static time_t time_to_check_v3_certificate = 0;
static time_t time_to_check_listeners = 0;
- static time_t time_to_check_descriptor = 0;
- static time_t time_to_check_ipaddress = 0;
+ static time_t time_to_download_networkstatus = 0;
static time_t time_to_shrink_memory = 0;
static time_t time_to_try_getting_descriptors = 0;
static time_t time_to_reset_descriptor_failures = 0;
@@ -1160,34 +1198,24 @@ run_scheduled_events(time_t now)
int i;
int have_dir_info;
- /** 0. See if we've been asked to shut down and our timeout has
+ /* 0. See if we've been asked to shut down and our timeout has
* expired; or if our bandwidth limits are exhausted and we
* should hibernate; or if it's time to wake up from hibernation.
*/
consider_hibernation(now);
-#if 0
- {
- static time_t nl_check_time = 0;
- if (nl_check_time <= now) {
- nodelist_assert_ok();
- nl_check_time = now + 30;
- }
- }
-#endif
-
/* 0b. If we've deferred a signewnym, make sure it gets handled
* eventually. */
if (signewnym_is_pending &&
time_of_last_signewnym + MAX_SIGNEWNYM_RATE <= now) {
- log(LOG_INFO, LD_CONTROL, "Honoring delayed NEWNYM request");
+ log_info(LD_CONTROL, "Honoring delayed NEWNYM request");
signewnym_impl(now);
}
/* 0c. If we've deferred log messages for the controller, handle them now */
flush_pending_log_callbacks();
- /** 1a. Every MIN_ONION_KEY_LIFETIME seconds, rotate the onion keys,
+ /* 1a. Every MIN_ONION_KEY_LIFETIME seconds, rotate the onion keys,
* shut down and restart all cpuworkers, and update the directory if
* necessary.
*/
@@ -1203,7 +1231,8 @@ run_scheduled_events(time_t now)
router_upload_dir_desc_to_dirservers(0);
}
- if (!options->DisableNetwork && time_to_try_getting_descriptors < now) {
+ if (!should_delay_dir_fetches(options, NULL) &&
+ time_to_try_getting_descriptors < now) {
update_all_descriptor_downloads(now);
update_extrainfo_downloads(now);
if (router_have_minimum_dir_info())
@@ -1218,10 +1247,10 @@ run_scheduled_events(time_t now)
now + DESCRIPTOR_FAILURE_RESET_INTERVAL;
}
- if (options->UseBridges)
+ if (options->UseBridges && !options->DisableNetwork)
fetch_bridge_descriptors(options, now);
- /** 1b. Every MAX_SSL_KEY_LIFETIME_INTERNAL seconds, we change our
+ /* 1b. Every MAX_SSL_KEY_LIFETIME_INTERNAL seconds, we change our
* TLS context. */
if (!last_rotated_x509_certificate)
last_rotated_x509_certificate = now;
@@ -1247,7 +1276,7 @@ run_scheduled_events(time_t now)
time_to_add_entropy = now + ENTROPY_INTERVAL;
}
- /** 1c. If we have to change the accounting interval or record
+ /* 1c. If we have to change the accounting interval or record
* bandwidth used in this accounting interval, do so. */
if (accounting_is_enabled(options))
accounting_run_housekeeping(now);
@@ -1260,7 +1289,7 @@ run_scheduled_events(time_t now)
dirserv_test_reachability(now);
}
- /** 1d. Periodically, we discount older stability information so that new
+ /* 1d. Periodically, we discount older stability information so that new
* stability info counts more, and save the stability information to disk as
* appropriate. */
if (time_to_downrate_stability < now)
@@ -1379,14 +1408,13 @@ run_scheduled_events(time_t now)
dns_init();
}
- /** 2. Periodically, we consider force-uploading our descriptor
+ /* 2. Periodically, we consider force-uploading our descriptor
* (if we've passed our internal checks). */
-/** How often do we check whether part of our router info has changed in a way
- * that would require an upload? */
+/** How often do we check whether part of our router info has changed in a
+ * way that would require an upload? That includes checking whether our IP
+ * address has changed. */
#define CHECK_DESCRIPTOR_INTERVAL (60)
-/** How often do we (as a router) check whether our IP address has changed? */
-#define CHECK_IPADDRESS_INTERVAL (15*60)
/* 2b. Once per minute, regenerate and upload the descriptor if the old
* one is inaccurate. */
@@ -1394,10 +1422,7 @@ run_scheduled_events(time_t now)
static int dirport_reachability_count = 0;
time_to_check_descriptor = now + CHECK_DESCRIPTOR_INTERVAL;
check_descriptor_bandwidth_changed(now);
- if (time_to_check_ipaddress < now) {
- time_to_check_ipaddress = now + CHECK_IPADDRESS_INTERVAL;
- check_descriptor_ipaddress_changed(now);
- }
+ check_descriptor_ipaddress_changed(now);
mark_my_descriptor_dirty_if_too_old(now);
consider_publishable_server(0);
/* also, check religiously for reachability, if it's within the first
@@ -1426,22 +1451,29 @@ run_scheduled_events(time_t now)
/* If any networkstatus documents are no longer recent, we need to
* update all the descriptors' running status. */
- /* purge obsolete entries */
- networkstatus_v2_list_clean(now);
/* Remove dead routers. */
routerlist_remove_old_routers();
+ }
- /* Also, once per minute, check whether we want to download any
- * networkstatus documents.
- */
+ /* 2c. Every minute (or every second if TestingTorNetwork), check
+ * whether we want to download any networkstatus documents. */
+
+/* How often do we check whether we should download network status
+ * documents? */
+#define networkstatus_dl_check_interval(o) ((o)->TestingTorNetwork ? 1 : 60)
+
+ if (!should_delay_dir_fetches(options, NULL) &&
+ time_to_download_networkstatus < now) {
+ time_to_download_networkstatus =
+ now + networkstatus_dl_check_interval(options);
update_networkstatus_downloads(now);
}
- /** 2c. Let directory voting happen. */
+ /* 2c. Let directory voting happen. */
if (authdir_mode_v3(options))
dirvote_act(options, now);
- /** 3a. Every second, we examine pending circuits and prune the
+ /* 3a. Every second, we examine pending circuits and prune the
* ones which have been pending for more than a few seconds.
* We do this before step 4, so it can try building more if
* it's not comfortable with the number of available circuits.
@@ -1450,24 +1482,24 @@ run_scheduled_events(time_t now)
* it can't, currently), we should do this more often.) */
circuit_expire_building();
- /** 3b. Also look at pending streams and prune the ones that 'began'
+ /* 3b. Also look at pending streams and prune the ones that 'began'
* a long time ago but haven't gotten a 'connected' yet.
* Do this before step 4, so we can put them back into pending
* state to be picked up by the new circuit.
*/
connection_ap_expire_beginning();
- /** 3c. And expire connections that we've held open for too long.
+ /* 3c. And expire connections that we've held open for too long.
*/
connection_expire_held_open();
- /** 3d. And every 60 seconds, we relaunch listeners if any died. */
+ /* 3d. And every 60 seconds, we relaunch listeners if any died. */
if (!net_is_disabled() && time_to_check_listeners < now) {
retry_all_listeners(NULL, NULL, 0);
time_to_check_listeners = now+60;
}
- /** 4. Every second, we try a new circuit if there are no valid
+ /* 4. Every second, we try a new circuit if there are no valid
* circuits. Every NewCircuitPeriod seconds, we expire circuits
* that became dirty more than MaxCircuitDirtiness seconds ago,
* and we make a new circ if there are no clean circuits.
@@ -1480,7 +1512,7 @@ run_scheduled_events(time_t now)
if (now % 10 == 5)
circuit_expire_old_circuits_serverside(now);
- /** 5. We do housekeeping for each connection... */
+ /* 5. We do housekeeping for each connection... */
connection_or_set_bad_connections(NULL, 0);
for (i=0;i<smartlist_len(connection_array);i++) {
run_connection_housekeeping(i, now);
@@ -1492,7 +1524,9 @@ run_scheduled_events(time_t now)
if (conn->inbuf)
buf_shrink(conn->inbuf);
});
+#ifdef ENABLE_MEMPOOL
clean_cell_pool();
+#endif /* ENABLE_MEMPOOL */
buf_shrink_freelists(0);
/** How often do we check buffers and pools for empty space that can be
* deallocated? */
@@ -1500,29 +1534,35 @@ run_scheduled_events(time_t now)
time_to_shrink_memory = now + MEM_SHRINK_INTERVAL;
}
- /** 6. And remove any marked circuits... */
+ /* 6. And remove any marked circuits... */
circuit_close_all_marked();
- /** 7. And upload service descriptors if necessary. */
+ /* 7. And upload service descriptors if necessary. */
if (can_complete_circuit && !net_is_disabled()) {
rend_consider_services_upload(now);
rend_consider_descriptor_republication();
}
- /** 8. and blow away any connections that need to die. have to do this now,
+ /* 8. and blow away any connections that need to die. have to do this now,
* because if we marked a conn for close and left its socket -1, then
* we'll pass it to poll/select and bad things will happen.
*/
close_closeable_connections();
- /** 8b. And if anything in our state is ready to get flushed to disk, we
+ /* 8b. And if anything in our state is ready to get flushed to disk, we
* flush it. */
or_state_save(now);
- /** 9. and if we're a server, check whether our DNS is telling stories to
- * us. */
+ /* 8c. Do channel cleanup just like for connections */
+ channel_run_cleanup();
+ channel_listener_run_cleanup();
+
+ /* 9. and if we're an exit node, check whether our DNS is telling stories
+ * to us. */
if (!net_is_disabled() &&
- public_server_mode(options) && time_to_check_for_correct_dns < now) {
+ public_server_mode(options) &&
+ time_to_check_for_correct_dns < now &&
+ ! router_my_exit_policy_is_reject_star()) {
if (!time_to_check_for_correct_dns) {
time_to_check_for_correct_dns = now + 60 + crypto_rand_int(120);
} else {
@@ -1532,7 +1572,7 @@ run_scheduled_events(time_t now)
}
}
- /** 10. write bridge networkstatus file to disk */
+ /* 10. write bridge networkstatus file to disk */
if (options->BridgeAuthoritativeDir &&
time_to_write_bridge_status_file < now) {
networkstatus_dump_bridge_status_to_file(now);
@@ -1540,28 +1580,33 @@ run_scheduled_events(time_t now)
time_to_write_bridge_status_file = now+BRIDGE_STATUSFILE_INTERVAL;
}
- /** 11. check the port forwarding app */
+ /* 11. check the port forwarding app */
if (!net_is_disabled() &&
time_to_check_port_forwarding < now &&
options->PortForwarding &&
is_server) {
#define PORT_FORWARDING_CHECK_INTERVAL 5
- /* XXXXX this should take a list of ports, not just two! */
- tor_check_port_forwarding(options->PortForwardingHelper,
- get_primary_dir_port(),
- get_primary_or_port(),
- now);
+ smartlist_t *ports_to_forward = get_list_of_ports_to_forward();
+ if (ports_to_forward) {
+ tor_check_port_forwarding(options->PortForwardingHelper,
+ ports_to_forward,
+ now);
+
+ SMARTLIST_FOREACH(ports_to_forward, char *, cp, tor_free(cp));
+ smartlist_free(ports_to_forward);
+ }
time_to_check_port_forwarding = now+PORT_FORWARDING_CHECK_INTERVAL;
}
- /** 11b. check pending unconfigured managed proxies */
+ /* 11b. check pending unconfigured managed proxies */
if (!net_is_disabled() && pt_proxies_configuration_pending())
pt_configure_remaining_proxies();
- /** 12. write the heartbeat message */
+ /* 12. write the heartbeat message */
if (options->HeartbeatPeriod &&
time_to_next_heartbeat <= now) {
- log_heartbeat(now);
+ if (time_to_next_heartbeat) /* don't log the first heartbeat */
+ log_heartbeat(now);
time_to_next_heartbeat = now+options->HeartbeatPeriod;
}
}
@@ -1617,6 +1662,9 @@ second_elapsed_callback(periodic_timer_t *timer, void *arg)
control_event_bandwidth_used((uint32_t)bytes_read,(uint32_t)bytes_written);
control_event_stream_bandwidth_used();
+ control_event_conn_bandwidth_used();
+ control_event_circ_bandwidth_used();
+ control_event_circuit_cell_stats();
if (server_mode(options) &&
!net_is_disabled() &&
@@ -1628,24 +1676,28 @@ second_elapsed_callback(periodic_timer_t *timer, void *arg)
/* every 20 minutes, check and complain if necessary */
const routerinfo_t *me = router_get_my_routerinfo();
if (me && !check_whether_orport_reachable()) {
+ char *address = tor_dup_ip(me->addr);
log_warn(LD_CONFIG,"Your server (%s:%d) has not managed to confirm that "
"its ORPort is reachable. Please check your firewalls, ports, "
"address, /etc/hosts file, etc.",
- me->address, me->or_port);
+ address, me->or_port);
control_event_server_status(LOG_WARN,
"REACHABILITY_FAILED ORADDRESS=%s:%d",
- me->address, me->or_port);
+ address, me->or_port);
+ tor_free(address);
}
if (me && !check_whether_dirport_reachable()) {
+ char *address = tor_dup_ip(me->addr);
log_warn(LD_CONFIG,
"Your server (%s:%d) has not managed to confirm that its "
"DirPort is reachable. Please check your firewalls, ports, "
"address, /etc/hosts file, etc.",
- me->address, me->dir_port);
+ address, me->dir_port);
control_event_server_status(LOG_WARN,
"REACHABILITY_FAILED DIRADDRESS=%s:%d",
- me->address, me->dir_port);
+ address, me->dir_port);
+ tor_free(address);
}
}
@@ -1707,7 +1759,7 @@ refill_callback(periodic_timer_t *timer, void *arg)
accounting_add_bytes(bytes_read, bytes_written, seconds_rolled_over);
if (milliseconds_elapsed > 0)
- connection_bucket_refill(milliseconds_elapsed, now.tv_sec);
+ connection_bucket_refill(milliseconds_elapsed, (time_t)now.tv_sec);
stats_prev_global_read_bucket = global_read_bucket;
stats_prev_global_write_bucket = global_write_bucket;
@@ -1823,7 +1875,7 @@ do_hup(void)
/* Rotate away from the old dirty circuits. This has to be done
* after we've read the new options, but before we start using
* circuits for directory fetches. */
- circuit_expire_all_dirty_circs();
+ circuit_mark_all_dirty_circs_as_unusable();
/* retry appropriate downloads */
router_reset_status_download_failures();
@@ -1844,7 +1896,7 @@ do_hup(void)
}
/** Tor main loop. */
-/* static */ int
+int
do_main_loop(void)
{
int loop_result;
@@ -1861,6 +1913,13 @@ do_main_loop(void)
}
}
+#ifdef USE_BUFFEREVENTS
+ log_warn(LD_GENERAL, "Tor was compiled with the --enable-bufferevents "
+ "option. This is still experimental, and might cause strange "
+ "bugs. If you want a more stable Tor, be sure to build without "
+ "--enable-bufferevents.");
+#endif
+
handle_signals(1);
/* load the private keys, if we're supposed to have them, and set up the
@@ -1872,8 +1931,10 @@ do_main_loop(void)
}
}
+#ifdef ENABLE_MEMPOOLS
/* Set up the packed_cell_t memory pool. */
init_cell_pool();
+#endif /* ENABLE_MEMPOOLS */
/* Set up our buckets */
connection_bucket_init();
@@ -1889,9 +1950,6 @@ do_main_loop(void)
log_warn(LD_DIR,
"Couldn't load all cached v3 certificates. Starting anyway.");
}
- if (router_reload_v2_networkstatus()) {
- return -1;
- }
if (router_reload_consensus_networkstatus()) {
return -1;
}
@@ -2053,7 +2111,7 @@ process_signal(uintptr_t sig)
time_t now = time(NULL);
if (time_of_last_signewnym + MAX_SIGNEWNYM_RATE > now) {
signewnym_is_pending = 1;
- log(LOG_NOTICE, LD_CONTROL,
+ log_notice(LD_CONTROL,
"Rate limiting NEWNYM request: delaying by %d second(s)",
(int)(MAX_SIGNEWNYM_RATE+time_of_last_signewnym-now));
} else {
@@ -2069,8 +2127,8 @@ process_signal(uintptr_t sig)
}
/** Returns Tor's uptime. */
-long
-get_uptime(void)
+MOCK_IMPL(long,
+get_uptime,(void))
{
return stats_n_seconds_working;
}
@@ -2085,7 +2143,7 @@ static void
dumpmemusage(int severity)
{
connection_dump_buffer_mem_stats(severity);
- log(severity, LD_GENERAL, "In rephist: "U64_FORMAT" used by %d Tors.",
+ tor_log(severity, LD_GENERAL, "In rephist: "U64_FORMAT" used by %d Tors.",
U64_PRINTF_ARG(rephist_total_alloc), rephist_total_num);
dump_routerlist_mem_usage(severity);
dump_cell_pool_usage(severity);
@@ -2103,27 +2161,27 @@ dumpstats(int severity)
time_t elapsed;
size_t rbuf_cap, wbuf_cap, rbuf_len, wbuf_len;
- log(severity, LD_GENERAL, "Dumping stats:");
+ tor_log(severity, LD_GENERAL, "Dumping stats:");
SMARTLIST_FOREACH_BEGIN(connection_array, connection_t *, conn) {
int i = conn_sl_idx;
- log(severity, LD_GENERAL,
+ tor_log(severity, LD_GENERAL,
"Conn %d (socket %d) type %d (%s), state %d (%s), created %d secs ago",
i, (int)conn->s, conn->type, conn_type_to_string(conn->type),
conn->state, conn_state_to_string(conn->type, conn->state),
(int)(now - conn->timestamp_created));
if (!connection_is_listener(conn)) {
- log(severity,LD_GENERAL,
+ tor_log(severity,LD_GENERAL,
"Conn %d is to %s:%d.", i,
safe_str_client(conn->address),
conn->port);
- log(severity,LD_GENERAL,
+ tor_log(severity,LD_GENERAL,
"Conn %d: %d bytes waiting on inbuf (len %d, last read %d secs ago)",
i,
(int)connection_get_inbuf_len(conn),
(int)buf_allocation(conn->inbuf),
(int)(now - conn->timestamp_lastread));
- log(severity,LD_GENERAL,
+ tor_log(severity,LD_GENERAL,
"Conn %d: %d bytes waiting on outbuf "
"(len %d, last written %d secs ago)",i,
(int)connection_get_outbuf_len(conn),
@@ -2134,7 +2192,7 @@ dumpstats(int severity)
if (or_conn->tls) {
tor_tls_get_buffer_sizes(or_conn->tls, &rbuf_cap, &rbuf_len,
&wbuf_cap, &wbuf_len);
- log(severity, LD_GENERAL,
+ tor_log(severity, LD_GENERAL,
"Conn %d: %d/%d bytes used on OpenSSL read buffer; "
"%d/%d bytes used on write buffer.",
i, (int)rbuf_len, (int)rbuf_cap, (int)wbuf_len, (int)wbuf_cap);
@@ -2144,7 +2202,11 @@ dumpstats(int severity)
circuit_dump_by_conn(conn, severity); /* dump info about all the circuits
* using this conn */
} SMARTLIST_FOREACH_END(conn);
- log(severity, LD_NET,
+
+ channel_dumpstats(severity);
+ channel_listener_dumpstats(severity);
+
+ tor_log(severity, LD_NET,
"Cells processed: "U64_FORMAT" padding\n"
" "U64_FORMAT" create\n"
" "U64_FORMAT" created\n"
@@ -2160,33 +2222,36 @@ dumpstats(int severity)
U64_PRINTF_ARG(stats_n_relay_cells_delivered),
U64_PRINTF_ARG(stats_n_destroy_cells_processed));
if (stats_n_data_cells_packaged)
- log(severity,LD_NET,"Average packaged cell fullness: %2.3f%%",
+ tor_log(severity,LD_NET,"Average packaged cell fullness: %2.3f%%",
100*(U64_TO_DBL(stats_n_data_bytes_packaged) /
U64_TO_DBL(stats_n_data_cells_packaged*RELAY_PAYLOAD_SIZE)) );
if (stats_n_data_cells_received)
- log(severity,LD_NET,"Average delivered cell fullness: %2.3f%%",
+ tor_log(severity,LD_NET,"Average delivered cell fullness: %2.3f%%",
100*(U64_TO_DBL(stats_n_data_bytes_received) /
U64_TO_DBL(stats_n_data_cells_received*RELAY_PAYLOAD_SIZE)) );
+ cpuworker_log_onionskin_overhead(severity, ONION_HANDSHAKE_TYPE_TAP, "TAP");
+ cpuworker_log_onionskin_overhead(severity, ONION_HANDSHAKE_TYPE_NTOR,"ntor");
+
if (now - time_of_process_start >= 0)
elapsed = now - time_of_process_start;
else
elapsed = 0;
if (elapsed) {
- log(severity, LD_NET,
+ tor_log(severity, LD_NET,
"Average bandwidth: "U64_FORMAT"/%d = %d bytes/sec reading",
U64_PRINTF_ARG(stats_n_bytes_read),
(int)elapsed,
(int) (stats_n_bytes_read/elapsed));
- log(severity, LD_NET,
+ tor_log(severity, LD_NET,
"Average bandwidth: "U64_FORMAT"/%d = %d bytes/sec writing",
U64_PRINTF_ARG(stats_n_bytes_written),
(int)elapsed,
(int) (stats_n_bytes_written/elapsed));
}
- log(severity, LD_NET, "--------------- Dumping memory information:");
+ tor_log(severity, LD_NET, "--------------- Dumping memory information:");
dumpmemusage(severity);
rep_hist_dump_stats(now,severity);
@@ -2257,21 +2322,24 @@ handle_signals(int is_parent)
/** Main entry point for the Tor command-line client.
*/
-/* static */ int
+int
tor_init(int argc, char *argv[])
{
- char buf[256];
- int i, quiet = 0;
+ char progname[256];
+ int quiet = 0;
+
time_of_process_start = time(NULL);
- if (!connection_array)
- connection_array = smartlist_new();
- if (!closeable_connection_lst)
- closeable_connection_lst = smartlist_new();
- if (!active_linked_connection_lst)
- active_linked_connection_lst = smartlist_new();
+ init_connection_lists();
/* Have the log set up with our application name. */
- tor_snprintf(buf, sizeof(buf), "Tor %s", get_version());
- log_set_application_name(buf);
+ tor_snprintf(progname, sizeof(progname), "Tor %s", get_version());
+ log_set_application_name(progname);
+
+ /* Set up the crypto nice and early */
+ if (crypto_early_init() < 0) {
+ log_err(LD_GENERAL, "Unable to initialize the crypto subsystem!");
+ return 1;
+ }
+
/* Initialize the history structures. */
rep_hist_init();
/* Initialize the service cache. */
@@ -2279,14 +2347,31 @@ tor_init(int argc, char *argv[])
addressmap_init(); /* Init the client dns cache. Do it always, since it's
* cheap. */
+ {
/* We search for the "quiet" option first, since it decides whether we
* will log anything at all to the command line. */
- for (i=1;i<argc;++i) {
- if (!strcmp(argv[i], "--hush"))
- quiet = 1;
- if (!strcmp(argv[i], "--quiet"))
- quiet = 2;
+ config_line_t *opts = NULL, *cmdline_opts = NULL;
+ const config_line_t *cl;
+ (void) config_parse_commandline(argc, argv, 1, &opts, &cmdline_opts);
+ for (cl = cmdline_opts; cl; cl = cl->next) {
+ if (!strcmp(cl->key, "--hush"))
+ quiet = 1;
+ if (!strcmp(cl->key, "--quiet") ||
+ !strcmp(cl->key, "--dump-config"))
+ quiet = 2;
+ /* --version, --digests, and --help imply --hush */
+ if (!strcmp(cl->key, "--version") || !strcmp(cl->key, "--digests") ||
+ !strcmp(cl->key, "--list-torrc-options") ||
+ !strcmp(cl->key, "--library-versions") ||
+ !strcmp(cl->key, "-h") || !strcmp(cl->key, "--help")) {
+ if (quiet < 1)
+ quiet = 1;
+ }
+ }
+ config_free_lines(opts);
+ config_free_lines(cmdline_opts);
}
+
/* give it somewhere to log to initially */
switch (quiet) {
case 2:
@@ -2302,12 +2387,18 @@ tor_init(int argc, char *argv[])
{
const char *version = get_version();
+ const char *bev_str =
#ifdef USE_BUFFEREVENTS
- log_notice(LD_GENERAL, "Tor v%s (with bufferevents) running on %s.",
- version, get_uname());
+ "(with bufferevents) ";
#else
- log_notice(LD_GENERAL, "Tor v%s running on %s.", version, get_uname());
+ "";
#endif
+ log_notice(LD_GENERAL, "Tor v%s %srunning on %s with Libevent %s, "
+ "OpenSSL %s and Zlib %s.", version, bev_str,
+ get_uname(),
+ tor_libevent_get_version_str(),
+ crypto_openssl_get_version_str(),
+ tor_zlib_get_version_str());
log_notice(LD_GENERAL, "Tor can't help you if you use it wrong! "
"Learn how to be safe at "
@@ -2319,7 +2410,7 @@ tor_init(int argc, char *argv[])
}
#ifdef NON_ANONYMOUS_MODE_ENABLED
- log(LOG_WARN, LD_GENERAL, "This copy of Tor was compiled to run in a "
+ log_warn(LD_GENERAL, "This copy of Tor was compiled to run in a "
"non-anonymous mode. It will provide NO ANONYMITY.");
#endif
@@ -2346,6 +2437,10 @@ tor_init(int argc, char *argv[])
log_err(LD_BUG, "Unable to initialize OpenSSL. Exiting.");
return -1;
}
+ stream_choice_seed_weak_rng();
+ if (tor_init_libevent_rng() < 0) {
+ log_warn(LD_NET, "Problem initializing libevent RNG.");
+ }
return 0;
}
@@ -2441,19 +2536,29 @@ tor_free_all(int postfork)
circuit_free_all();
entry_guards_free_all();
pt_free_all();
+ channel_tls_free_all();
+ channel_free_all();
connection_free_all();
buf_shrink_freelists(1);
memarea_clear_freelist();
nodelist_free_all();
microdesc_free_all();
+ ext_orport_free_all();
+ control_free_all();
if (!postfork) {
config_free_all();
+ or_state_free_all();
router_free_all();
policies_free_all();
}
+#ifdef ENABLE_MEMPOOLS
free_cell_pool();
+#endif /* ENABLE_MEMPOOLS */
if (!postfork) {
tor_tls_free_all();
+#ifndef _WIN32
+ tor_getpwnam(NULL);
+#endif
}
/* stuff in main.c */
@@ -2461,6 +2566,10 @@ tor_free_all(int postfork)
smartlist_free(closeable_connection_lst);
smartlist_free(active_linked_connection_lst);
periodic_timer_free(second_timer);
+#ifndef USE_BUFFEREVENTS
+ periodic_timer_free(refill_timer);
+#endif
+
if (!postfork) {
release_lockfile();
}
@@ -2481,10 +2590,19 @@ tor_cleanup(void)
time_t now = time(NULL);
/* Remove our pid file. We don't care if there was an error when we
* unlink, nothing we could do about it anyways. */
- if (options->PidFile)
- unlink(options->PidFile);
- if (options->ControlPortWriteToFile)
- unlink(options->ControlPortWriteToFile);
+ if (options->PidFile) {
+ if (unlink(options->PidFile) != 0) {
+ log_warn(LD_FS, "Couldn't unlink pid file %s: %s",
+ options->PidFile, strerror(errno));
+ }
+ }
+ if (options->ControlPortWriteToFile) {
+ if (unlink(options->ControlPortWriteToFile) != 0) {
+ log_warn(LD_FS, "Couldn't unlink control port file %s: %s",
+ options->ControlPortWriteToFile,
+ strerror(errno));
+ }
+ }
if (accounting_is_enabled(options))
accounting_record_bandwidth_usage(now, get_or_state());
or_state_mark_dirty(get_or_state(), 0); /* force an immediate save. */
@@ -2507,7 +2625,7 @@ tor_cleanup(void)
}
/** Read/create keys as needed, and echo our fingerprint to stdout. */
-/* static */ int
+static int
do_list_fingerprint(void)
{
char buf[FINGERPRINT_LEN+1];
@@ -2515,7 +2633,7 @@ do_list_fingerprint(void)
const char *nickname = get_options()->Nickname;
if (!server_mode(get_options())) {
log_err(LD_GENERAL,
- "Clients don't have long-term identity keys. Exiting.\n");
+ "Clients don't have long-term identity keys. Exiting.");
return -1;
}
tor_assert(nickname);
@@ -2537,7 +2655,7 @@ do_list_fingerprint(void)
/** Entry point for password hashing: take the desired password from
* the command line, and print its salted hash to stdout. **/
-/* static */ void
+static void
do_hash_password(void)
{
@@ -2553,6 +2671,34 @@ do_hash_password(void)
printf("16:%s\n",output);
}
+/** Entry point for configuration dumping: write the configuration to
+ * stdout. */
+static int
+do_dump_config(void)
+{
+ const or_options_t *options = get_options();
+ const char *arg = options->command_arg;
+ int how;
+ char *opts;
+ if (!strcmp(arg, "short")) {
+ how = OPTIONS_DUMP_MINIMAL;
+ } else if (!strcmp(arg, "non-builtin")) {
+ how = OPTIONS_DUMP_DEFAULTS;
+ } else if (!strcmp(arg, "full")) {
+ how = OPTIONS_DUMP_ALL;
+ } else {
+ printf("%s is not a recognized argument to --dump-config. "
+ "Please select 'short', 'non-builtin', or 'full'", arg);
+ return -1;
+ }
+
+ opts = options_dump(options, how);
+ printf("%s", opts);
+ tor_free(opts);
+
+ return 0;
+}
+
#if defined (WINCE)
int
find_flashcard_path(PWCHAR path, size_t size)
@@ -2578,6 +2724,226 @@ find_flashcard_path(PWCHAR path, size_t size)
}
#endif
+static void
+init_addrinfo(void)
+{
+ char hname[256];
+
+ // host name to sandbox
+ gethostname(hname, sizeof(hname));
+ sandbox_add_addrinfo(hname);
+}
+
+static sandbox_cfg_t*
+sandbox_init_filter(void)
+{
+ const or_options_t *options = get_options();
+ sandbox_cfg_t *cfg = sandbox_cfg_new();
+ int i;
+
+ sandbox_cfg_allow_openat_filename(&cfg,
+ get_datadir_fname("cached-status"));
+
+ sandbox_cfg_allow_open_filename_array(&cfg,
+ get_datadir_fname("cached-certs"),
+ get_datadir_fname("cached-certs.tmp"),
+ get_datadir_fname("cached-consensus"),
+ get_datadir_fname("cached-consensus.tmp"),
+ get_datadir_fname("unverified-consensus"),
+ get_datadir_fname("unverified-consensus.tmp"),
+ get_datadir_fname("unverified-microdesc-consensus"),
+ get_datadir_fname("unverified-microdesc-consensus.tmp"),
+ get_datadir_fname("cached-microdesc-consensus"),
+ get_datadir_fname("cached-microdesc-consensus.tmp"),
+ get_datadir_fname("cached-microdescs"),
+ get_datadir_fname("cached-microdescs.tmp"),
+ get_datadir_fname("cached-microdescs.new"),
+ get_datadir_fname("cached-microdescs.new.tmp"),
+ get_datadir_fname("cached-descriptors"),
+ get_datadir_fname("cached-descriptors.new"),
+ get_datadir_fname("cached-descriptors.tmp"),
+ get_datadir_fname("cached-descriptors.new.tmp"),
+ get_datadir_fname("cached-descriptors.tmp.tmp"),
+ get_datadir_fname("cached-extrainfo"),
+ get_datadir_fname("cached-extrainfo.new"),
+ get_datadir_fname("cached-extrainfo.tmp"),
+ get_datadir_fname("cached-extrainfo.new.tmp"),
+ get_datadir_fname("cached-extrainfo.tmp.tmp"),
+ get_datadir_fname("state.tmp"),
+ get_datadir_fname("unparseable-desc.tmp"),
+ get_datadir_fname("unparseable-desc"),
+ get_datadir_fname("v3-status-votes"),
+ get_datadir_fname("v3-status-votes.tmp"),
+ tor_strdup("/dev/srandom"),
+ tor_strdup("/dev/urandom"),
+ tor_strdup("/dev/random"),
+ tor_strdup("/etc/hosts"),
+ tor_strdup("/proc/meminfo"),
+ NULL, 0
+ );
+ if (options->ServerDNSResolvConfFile)
+ sandbox_cfg_allow_open_filename(&cfg,
+ tor_strdup(options->ServerDNSResolvConfFile));
+ else
+ sandbox_cfg_allow_open_filename(&cfg, tor_strdup("/etc/resolv.conf"));
+
+ for (i = 0; i < 2; ++i) {
+ if (get_torrc_fname(i)) {
+ sandbox_cfg_allow_open_filename(&cfg, tor_strdup(get_torrc_fname(i)));
+ }
+ }
+
+#define RENAME_SUFFIX(name, suffix) \
+ sandbox_cfg_allow_rename(&cfg, \
+ get_datadir_fname(name suffix), \
+ get_datadir_fname(name))
+
+#define RENAME_SUFFIX2(prefix, name, suffix) \
+ sandbox_cfg_allow_rename(&cfg, \
+ get_datadir_fname2(prefix, name suffix), \
+ get_datadir_fname2(prefix, name))
+
+ RENAME_SUFFIX("cached-certs", ".tmp");
+ RENAME_SUFFIX("cached-consensus", ".tmp");
+ RENAME_SUFFIX("unverified-consensus", ".tmp");
+ RENAME_SUFFIX("unverified-microdesc-consensus", ".tmp");
+ RENAME_SUFFIX("cached-microdesc-consensus", ".tmp");
+ RENAME_SUFFIX("cached-microdescs", ".tmp");
+ RENAME_SUFFIX("cached-microdescs", ".new");
+ RENAME_SUFFIX("cached-microdescs.new", ".tmp");
+ RENAME_SUFFIX("cached-descriptors", ".tmp");
+ RENAME_SUFFIX("cached-descriptors", ".new");
+ RENAME_SUFFIX("cached-descriptors.new", ".tmp");
+ RENAME_SUFFIX("cached-extrainfo", ".tmp");
+ RENAME_SUFFIX("cached-extrainfo", ".new");
+ RENAME_SUFFIX("cached-extrainfo.new", ".tmp");
+ RENAME_SUFFIX("state", ".tmp");
+ RENAME_SUFFIX("unparseable-desc", ".tmp");
+ RENAME_SUFFIX("v3-status-votes", ".tmp");
+
+ sandbox_cfg_allow_stat_filename_array(&cfg,
+ get_datadir_fname(NULL),
+ get_datadir_fname("lock"),
+ get_datadir_fname("state"),
+ get_datadir_fname("router-stability"),
+ get_datadir_fname("cached-extrainfo.new"),
+ NULL, 0
+ );
+
+ {
+ smartlist_t *files = smartlist_new();
+ tor_log_get_logfile_names(files);
+ SMARTLIST_FOREACH(files, char *, file_name, {
+ /* steals reference */
+ sandbox_cfg_allow_open_filename(&cfg, file_name);
+ });
+ smartlist_free(files);
+ }
+
+ {
+ smartlist_t *files = smartlist_new();
+ smartlist_t *dirs = smartlist_new();
+ rend_services_add_filenames_to_lists(files, dirs);
+ SMARTLIST_FOREACH(files, char *, file_name, {
+ char *tmp_name = NULL;
+ tor_asprintf(&tmp_name, "%s.tmp", file_name);
+ sandbox_cfg_allow_rename(&cfg,
+ tor_strdup(tmp_name), tor_strdup(file_name));
+ /* steals references */
+ sandbox_cfg_allow_open_filename_array(&cfg, file_name, tmp_name, NULL);
+ });
+ SMARTLIST_FOREACH(dirs, char *, dir, {
+ /* steals reference */
+ sandbox_cfg_allow_stat_filename(&cfg, dir);
+ });
+ smartlist_free(files);
+ smartlist_free(dirs);
+ }
+
+ {
+ char *fname;
+ if ((fname = get_controller_cookie_file_name())) {
+ sandbox_cfg_allow_open_filename(&cfg, fname);
+ }
+ if ((fname = get_ext_or_auth_cookie_file_name())) {
+ sandbox_cfg_allow_open_filename(&cfg, fname);
+ }
+ }
+
+ if (options->DirPortFrontPage) {
+ sandbox_cfg_allow_open_filename(&cfg,
+ tor_strdup(options->DirPortFrontPage));
+ }
+
+ // orport
+ if (server_mode(get_options())) {
+ sandbox_cfg_allow_open_filename_array(&cfg,
+ get_datadir_fname2("keys", "secret_id_key"),
+ get_datadir_fname2("keys", "secret_onion_key"),
+ get_datadir_fname2("keys", "secret_onion_key_ntor"),
+ get_datadir_fname2("keys", "secret_onion_key_ntor.tmp"),
+ get_datadir_fname2("keys", "secret_id_key.old"),
+ get_datadir_fname2("keys", "secret_onion_key.old"),
+ get_datadir_fname2("keys", "secret_onion_key_ntor.old"),
+ get_datadir_fname2("keys", "secret_onion_key.tmp"),
+ get_datadir_fname2("keys", "secret_id_key.tmp"),
+ get_datadir_fname2("stats", "bridge-stats"),
+ get_datadir_fname2("stats", "bridge-stats.tmp"),
+ get_datadir_fname2("stats", "dirreq-stats"),
+ get_datadir_fname2("stats", "dirreq-stats.tmp"),
+ get_datadir_fname2("stats", "entry-stats"),
+ get_datadir_fname2("stats", "entry-stats.tmp"),
+ get_datadir_fname2("stats", "exit-stats"),
+ get_datadir_fname2("stats", "exit-stats.tmp"),
+ get_datadir_fname2("stats", "buffer-stats"),
+ get_datadir_fname2("stats", "buffer-stats.tmp"),
+ get_datadir_fname2("stats", "conn-stats"),
+ get_datadir_fname2("stats", "conn-stats.tmp"),
+ get_datadir_fname("approved-routers"),
+ get_datadir_fname("fingerprint"),
+ get_datadir_fname("fingerprint.tmp"),
+ get_datadir_fname("hashed-fingerprint"),
+ get_datadir_fname("hashed-fingerprint.tmp"),
+ get_datadir_fname("router-stability"),
+ get_datadir_fname("router-stability.tmp"),
+ tor_strdup("/etc/resolv.conf"),
+ NULL, 0
+ );
+
+ RENAME_SUFFIX("fingerprint", ".tmp");
+ RENAME_SUFFIX2("keys", "secret_onion_key_ntor", ".tmp");
+ RENAME_SUFFIX2("keys", "secret_id_key", ".tmp");
+ RENAME_SUFFIX2("keys", "secret_id_key.old", ".tmp");
+ RENAME_SUFFIX2("keys", "secret_onion_key", ".tmp");
+ RENAME_SUFFIX2("keys", "secret_onion_key.old", ".tmp");
+ RENAME_SUFFIX2("stats", "bridge-stats", ".tmp");
+ RENAME_SUFFIX2("stats", "dirreq-stats", ".tmp");
+ RENAME_SUFFIX2("stats", "entry-stats", ".tmp");
+ RENAME_SUFFIX2("stats", "exit-stats", ".tmp");
+ RENAME_SUFFIX2("stats", "buffer-stats", ".tmp");
+ RENAME_SUFFIX2("stats", "conn-stats", ".tmp");
+ RENAME_SUFFIX("hashed-fingerprint", ".tmp");
+ RENAME_SUFFIX("router-stability", ".tmp");
+
+ sandbox_cfg_allow_rename(&cfg,
+ get_datadir_fname2("keys", "secret_onion_key"),
+ get_datadir_fname2("keys", "secret_onion_key.old"));
+ sandbox_cfg_allow_rename(&cfg,
+ get_datadir_fname2("keys", "secret_onion_key_ntor"),
+ get_datadir_fname2("keys", "secret_onion_key_ntor.old"));
+
+ sandbox_cfg_allow_stat_filename_array(&cfg,
+ get_datadir_fname("keys"),
+ get_datadir_fname2("stats", "dirreq-stats"),
+ NULL, 0
+ );
+ }
+
+ init_addrinfo();
+
+ return cfg;
+}
+
/** Main entry point for the Tor process. Called from main(). */
/* This function is distinct from main() only so we can link main.c into
* the unittest binary without conflicting with the unittests' main. */
@@ -2624,6 +2990,8 @@ tor_main(int argc, char *argv[])
}
#endif
+ configure_backtrace_handler(get_version());
+
update_approx_time(time(NULL));
tor_threads_init();
init_logging();
@@ -2631,7 +2999,7 @@ tor_main(int argc, char *argv[])
{
/* Instruct OpenSSL to use our internal wrappers for malloc,
realloc and free. */
- int r = CRYPTO_set_mem_ex_functions(_tor_malloc, _tor_realloc, _tor_free);
+ int r = CRYPTO_set_mem_ex_functions(tor_malloc_, tor_realloc_, tor_free_);
tor_assert(r);
}
#endif
@@ -2644,6 +3012,22 @@ tor_main(int argc, char *argv[])
#endif
if (tor_init(argc, argv)<0)
return -1;
+
+ if (get_options()->Sandbox && get_options()->command == CMD_RUN_TOR) {
+ sandbox_cfg_t* cfg = sandbox_init_filter();
+
+ if (sandbox_init(cfg)) {
+ log_err(LD_BUG,"Failed to create syscall sandbox filter");
+ return -1;
+ }
+
+ // registering libevent rng
+#ifdef HAVE_EVUTIL_SECURE_RNG_SET_URANDOM_DEVICE_FILE
+ evutil_secure_rng_set_urandom_device_file(
+ (char*) sandbox_intern_string("/dev/urandom"));
+#endif
+ }
+
switch (get_options()->command) {
case CMD_RUN_TOR:
#ifdef NT_SERVICE
@@ -2662,6 +3046,9 @@ tor_main(int argc, char *argv[])
printf("Configuration was valid\n");
result = 0;
break;
+ case CMD_DUMP_CONFIG:
+ result = do_dump_config();
+ break;
case CMD_RUN_UNITTESTS: /* only set by test.c */
default:
log_warn(LD_BUG,"Illegal command number %d: internal error.",
diff --git a/src/or/main.h b/src/or/main.h
index f843b6f9f..a3bce3486 100644
--- a/src/or/main.h
+++ b/src/or/main.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,8 +9,8 @@
* \brief Header file for main.c.
**/
-#ifndef _TOR_MAIN_H
-#define _TOR_MAIN_H
+#ifndef TOR_MAIN_H
+#define TOR_MAIN_H
extern int can_complete_circuit;
@@ -24,8 +24,8 @@ void add_connection_to_closeable_list(connection_t *conn);
int connection_is_on_closeable_list(connection_t *conn);
smartlist_t *get_connection_array(void);
-uint64_t get_bytes_read(void);
-uint64_t get_bytes_written(void);
+MOCK_DECL(uint64_t,get_bytes_read,(void));
+MOCK_DECL(uint64_t,get_bytes_written,(void));
/** Bitmask for events that we can turn on and off with
* connection_watch_events. */
@@ -36,12 +36,12 @@ typedef enum watchable_events {
} watchable_events_t;
void connection_watch_events(connection_t *conn, watchable_events_t events);
int connection_is_reading(connection_t *conn);
-void connection_stop_reading(connection_t *conn);
-void connection_start_reading(connection_t *conn);
+MOCK_DECL(void,connection_stop_reading,(connection_t *conn));
+MOCK_DECL(void,connection_start_reading,(connection_t *conn));
int connection_is_writing(connection_t *conn);
-void connection_stop_writing(connection_t *conn);
-void connection_start_writing(connection_t *conn);
+MOCK_DECL(void,connection_stop_writing,(connection_t *conn));
+MOCK_DECL(void,connection_start_writing,(connection_t *conn));
void connection_stop_reading_from_linked_conn(connection_t *conn);
@@ -50,8 +50,10 @@ void directory_info_has_arrived(time_t now, int from_cache);
void ip_address_changed(int at_interface);
void dns_servers_relaunch_checks(void);
+void reschedule_descriptor_update_check(void);
+
+MOCK_DECL(long,get_uptime,(void));
-long get_uptime(void);
unsigned get_signewnym_epoch(void);
void handle_signals(int is_parent);
@@ -66,11 +68,12 @@ void tor_free_all(int postfork);
int tor_main(int argc, char *argv[]);
-#ifdef MAIN_PRIVATE
int do_main_loop(void);
-int do_list_fingerprint(void);
-void do_hash_password(void);
int tor_init(int argc, char **argv);
+
+#ifdef MAIN_PRIVATE
+STATIC void init_connection_lists(void);
+STATIC void close_closeable_connections(void);
#endif
#endif
diff --git a/src/or/microdesc.c b/src/or/microdesc.c
index b4d22c1c6..fdb549a9a 100644
--- a/src/or/microdesc.c
+++ b/src/or/microdesc.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2009-2012, The Tor Project, Inc. */
+/* Copyright (c) 2009-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#include "or.h"
@@ -6,6 +6,7 @@
#include "config.h"
#include "directory.h"
#include "dirserv.h"
+#include "entrynodes.h"
#include "microdesc.h"
#include "networkstatus.h"
#include "nodelist.h"
@@ -42,27 +43,22 @@ struct microdesc_cache_t {
/** Helper: computes a hash of <b>md</b> to place it in a hash table. */
static INLINE unsigned int
-_microdesc_hash(microdesc_t *md)
+microdesc_hash_(microdesc_t *md)
{
- unsigned *d = (unsigned*)md->digest;
-#if SIZEOF_INT == 4
- return d[0] ^ d[1] ^ d[2] ^ d[3] ^ d[4] ^ d[5] ^ d[6] ^ d[7];
-#else
- return d[0] ^ d[1] ^ d[2] ^ d[3];
-#endif
+ return (unsigned) siphash24g(md->digest, sizeof(md->digest));
}
/** Helper: compares <b>a</b> and </b> for equality for hash-table purposes. */
static INLINE int
-_microdesc_eq(microdesc_t *a, microdesc_t *b)
+microdesc_eq_(microdesc_t *a, microdesc_t *b)
{
return tor_memeq(a->digest, b->digest, DIGEST256_LEN);
}
HT_PROTOTYPE(microdesc_map, microdesc_t, node,
- _microdesc_hash, _microdesc_eq);
+ microdesc_hash_, microdesc_eq_);
HT_GENERATE(microdesc_map, microdesc_t, node,
- _microdesc_hash, _microdesc_eq, 0.6,
+ microdesc_hash_, microdesc_eq_, 0.6,
malloc, realloc, free);
/** Write the body of <b>md</b> into <b>f</b>, with appropriate annotations.
@@ -70,20 +66,24 @@ HT_GENERATE(microdesc_map, microdesc_t, node,
* *<b>annotation_len_out</b> to the number of bytes written as
* annotations. */
static ssize_t
-dump_microdescriptor(FILE *f, microdesc_t *md, size_t *annotation_len_out)
+dump_microdescriptor(int fd, microdesc_t *md, size_t *annotation_len_out)
{
ssize_t r = 0;
- size_t written;
- /* XXXX drops unkown annotations. */
+ ssize_t written;
+ if (md->body == NULL) {
+ *annotation_len_out = 0;
+ return 0;
+ }
+ /* XXXX drops unknown annotations. */
if (md->last_listed) {
char buf[ISO_TIME_LEN+1];
char annotation[ISO_TIME_LEN+32];
format_iso_time(buf, md->last_listed);
tor_snprintf(annotation, sizeof(annotation), "@last-listed %s\n", buf);
- if (fputs(annotation, f) < 0) {
+ if (write_all(fd, annotation, strlen(annotation), 0) < 0) {
log_warn(LD_DIR,
"Couldn't write microdescriptor annotation: %s",
- strerror(ferror(f)));
+ strerror(errno));
return -1;
}
r += strlen(annotation);
@@ -92,13 +92,13 @@ dump_microdescriptor(FILE *f, microdesc_t *md, size_t *annotation_len_out)
*annotation_len_out = 0;
}
- md->off = (off_t) ftell(f);
- written = fwrite(md->body, 1, md->bodylen, f);
- if (written != md->bodylen) {
+ md->off = tor_fd_getpos(fd);
+ written = write_all(fd, md->body, md->bodylen, 0);
+ if (written != (ssize_t)md->bodylen) {
log_warn(LD_DIR,
- "Couldn't dump microdescriptor (wrote %lu out of %lu): %s",
- (unsigned long)written, (unsigned long)md->bodylen,
- strerror(ferror(f)));
+ "Couldn't dump microdescriptor (wrote %ld out of %lu): %s",
+ (long)written, (unsigned long)md->bodylen,
+ strerror(errno));
return -1;
}
r += md->bodylen;
@@ -131,10 +131,10 @@ get_microdesc_cache(void)
*/
/** Decode the microdescriptors from the string starting at <b>s</b> and
- * ending at <b>eos</b>, and store them in <b>cache</b>. If <b>no-save</b>,
+ * ending at <b>eos</b>, and store them in <b>cache</b>. If <b>no_save</b>,
* mark them as non-writable to disk. If <b>where</b> is SAVED_IN_CACHE,
* leave their bodies as pointers to the mmap'd cache. If where is
- * <b>SAVED_NOWHERE</b>, do not allow annotations. If listed_at is positive,
+ * <b>SAVED_NOWHERE</b>, do not allow annotations. If listed_at is not -1,
* set the last_listed field of every microdesc to listed_at. If
* requested_digests is non-null, then it contains a list of digests we mean
* to allow, so we should reject any non-requested microdesc with a different
@@ -149,17 +149,16 @@ microdescs_add_to_cache(microdesc_cache_t *cache,
{
smartlist_t *descriptors, *added;
const int allow_annotations = (where != SAVED_NOWHERE);
- const int copy_body = (where != SAVED_IN_CACHE);
descriptors = microdescs_parse_from_string(s, eos,
allow_annotations,
- copy_body);
- if (listed_at > 0) {
+ where);
+ if (listed_at != (time_t)-1) {
SMARTLIST_FOREACH(descriptors, microdesc_t *, md,
md->last_listed = listed_at);
}
if (requested_digests256) {
- digestmap_t *requested; /* XXXX actuqlly we should just use a
+ digestmap_t *requested; /* XXXX actually we should just use a
digest256map */
requested = digestmap_new();
SMARTLIST_FOREACH(requested_digests256, const char *, cp,
@@ -168,7 +167,7 @@ microdescs_add_to_cache(microdesc_cache_t *cache,
if (digestmap_get(requested, md->digest)) {
digestmap_set(requested, md->digest, (void*)2);
} else {
- log_fn(LOG_PROTOCOL_WARN, LD_DIR, "Received non-requested microcdesc");
+ log_fn(LOG_PROTOCOL_WARN, LD_DIR, "Received non-requested microdesc");
microdesc_free(md);
SMARTLIST_DEL_CURRENT(descriptors, md);
}
@@ -187,7 +186,7 @@ microdescs_add_to_cache(microdesc_cache_t *cache,
return added;
}
-/** As microdescs_add_to_cache, but takes a list of micrdescriptors instead of
+/** As microdescs_add_to_cache, but takes a list of microdescriptors instead of
* a string to decode. Frees any members of <b>descriptors</b> that it does
* not add. */
smartlist_t *
@@ -197,18 +196,17 @@ microdescs_add_list_to_cache(microdesc_cache_t *cache,
{
smartlist_t *added;
open_file_t *open_file = NULL;
- FILE *f = NULL;
+ int fd = -1;
// int n_added = 0;
ssize_t size = 0;
if (where == SAVED_NOWHERE && !no_save) {
- f = start_writing_to_stdio_file(cache->journal_fname,
- OPEN_FLAGS_APPEND|O_BINARY,
- 0600, &open_file);
- if (!f) {
+ fd = start_writing_to_file(cache->journal_fname,
+ OPEN_FLAGS_APPEND|O_BINARY,
+ 0600, &open_file);
+ if (fd < 0) {
log_warn(LD_DIR, "Couldn't append to journal in %s: %s",
cache->journal_fname, strerror(errno));
- return NULL;
}
}
@@ -227,17 +225,17 @@ microdescs_add_list_to_cache(microdesc_cache_t *cache,
}
/* Okay, it's a new one. */
- if (f) {
+ if (fd >= 0) {
size_t annotation_len;
- size = dump_microdescriptor(f, md, &annotation_len);
+ size = dump_microdescriptor(fd, md, &annotation_len);
if (size < 0) {
- /* we already warned in dump_microdescriptor; */
+ /* we already warned in dump_microdescriptor */
abort_writing_to_file(open_file);
- smartlist_clear(added);
- return added;
+ fd = -1;
+ } else {
+ md->saved_location = SAVED_IN_JOURNAL;
+ cache->journal_len += size;
}
- md->saved_location = SAVED_IN_JOURNAL;
- cache->journal_len += size;
} else {
md->saved_location = where;
}
@@ -251,8 +249,14 @@ microdescs_add_list_to_cache(microdesc_cache_t *cache,
cache->total_len_seen += md->bodylen;
} SMARTLIST_FOREACH_END(md);
- if (f)
- finish_writing_to_file(open_file); /*XXX Check me.*/
+ if (fd >= 0) {
+ if (finish_writing_to_file(open_file) < 0) {
+ log_warn(LD_DIR, "Error appending to microdescriptor file: %s",
+ strerror(errno));
+ smartlist_clear(added);
+ return added;
+ }
+ }
{
networkstatus_t *ns = networkstatus_get_latest_consensus();
@@ -271,6 +275,7 @@ void
microdesc_cache_clear(microdesc_cache_t *cache)
{
microdesc_t **entry, **next;
+
for (entry = HT_START(microdesc_map, &cache->map); entry; entry = next) {
microdesc_t *md = *entry;
next = HT_NEXT_RMV(microdesc_map, &cache->map, entry);
@@ -279,7 +284,13 @@ microdesc_cache_clear(microdesc_cache_t *cache)
}
HT_CLEAR(microdesc_map, &cache->map);
if (cache->cache_content) {
- tor_munmap_file(cache->cache_content);
+ int res = tor_munmap_file(cache->cache_content);
+ if (res != 0) {
+ log_warn(LD_FS,
+ "tor_munmap_file() failed clearing microdesc cache; "
+ "we are probably about to leak memory.");
+ /* TODO something smarter? */
+ }
cache->cache_content = NULL;
}
cache->total_len_seen = 0;
@@ -323,8 +334,8 @@ microdesc_cache_reload(microdesc_cache_t *cache)
}
tor_free(journal_content);
}
- log_notice(LD_DIR, "Reloaded microdescriptor cache. Found %d descriptors.",
- total);
+ log_info(LD_DIR, "Reloaded microdescriptor cache. Found %d descriptors.",
+ total);
microdesc_cache_rebuild(cache, 0 /* don't force */);
@@ -359,7 +370,9 @@ microdesc_cache_clean(microdesc_cache_t *cache, time_t cutoff, int force)
cutoff = now - TOLERATE_MICRODESC_AGE;
for (mdp = HT_START(microdesc_map, &cache->map); mdp != NULL; ) {
- if ((*mdp)->last_listed < cutoff) {
+ const int is_old = (*mdp)->last_listed < cutoff;
+ const unsigned held_by_nodes = (*mdp)->held_by_nodes;
+ if (is_old && !held_by_nodes) {
++dropped;
victim = *mdp;
mdp = HT_NEXT_RMV(microdesc_map, &cache->map, mdp);
@@ -367,6 +380,57 @@ microdesc_cache_clean(microdesc_cache_t *cache, time_t cutoff, int force)
bytes_dropped += victim->bodylen;
microdesc_free(victim);
} else {
+ if (is_old) {
+ /* It's old, but it has held_by_nodes set. That's not okay. */
+ /* Let's try to diagnose and fix #7164 . */
+ smartlist_t *nodes = nodelist_find_nodes_with_microdesc(*mdp);
+ const networkstatus_t *ns = networkstatus_get_latest_consensus();
+ long networkstatus_age = -1;
+ const int ht_badness = HT_REP_IS_BAD_(microdesc_map, &cache->map);
+ if (ns) {
+ networkstatus_age = now - ns->valid_after;
+ }
+ log_warn(LD_BUG, "Microdescriptor seemed very old "
+ "(last listed %d hours ago vs %d hour cutoff), but is still "
+ "marked as being held by %d node(s). I found %d node(s) "
+ "holding it. Current networkstatus is %ld hours old. "
+ "Hashtable badness is %d.",
+ (int)((now - (*mdp)->last_listed) / 3600),
+ (int)((now - cutoff) / 3600),
+ held_by_nodes,
+ smartlist_len(nodes),
+ networkstatus_age / 3600,
+ ht_badness);
+
+ SMARTLIST_FOREACH_BEGIN(nodes, const node_t *, node) {
+ const char *rs_match = "No RS";
+ const char *rs_present = "";
+ if (node->rs) {
+ if (tor_memeq(node->rs->descriptor_digest,
+ (*mdp)->digest, DIGEST256_LEN)) {
+ rs_match = "Microdesc digest in RS matches";
+ } else {
+ rs_match = "Microdesc digest in RS does match";
+ }
+ if (ns) {
+ /* This should be impossible, but let's see! */
+ rs_present = " RS not present in networkstatus.";
+ SMARTLIST_FOREACH(ns->routerstatus_list, routerstatus_t *,rs, {
+ if (rs == node->rs) {
+ rs_present = " RS okay in networkstatus.";
+ }
+ });
+ }
+ }
+ log_warn(LD_BUG, " [%d]: ID=%s. md=%p, rs=%p, ri=%p. %s.%s",
+ node_sl_idx,
+ hex_str(node->identity, DIGEST_LEN),
+ node->md, node->rs, node->ri, rs_match, rs_present);
+ } SMARTLIST_FOREACH_END(node);
+ smartlist_free(nodes);
+ (*mdp)->last_listed = now;
+ }
+
++kept;
mdp = HT_NEXT(microdesc_map, &cache->map, mdp);
}
@@ -397,6 +461,26 @@ should_rebuild_md_cache(microdesc_cache_t *cache)
return 0;
}
+/**
+ * Mark <b>md</b> as having no body, and release any storage previously held
+ * by its body.
+ */
+static void
+microdesc_wipe_body(microdesc_t *md)
+{
+ if (!md)
+ return;
+
+ if (md->saved_location != SAVED_IN_CACHE)
+ tor_free(md->body);
+
+ md->off = 0;
+ md->saved_location = SAVED_NOWHERE;
+ md->body = NULL;
+ md->bodylen = 0;
+ md->no_save = 1;
+}
+
/** Regenerate the main cache file for <b>cache</b>, clear the journal file,
* and update every microdesc_t in the cache with pointers to its new
* location. If <b>force</b> is true, do this unconditionally. If
@@ -405,11 +489,11 @@ int
microdesc_cache_rebuild(microdesc_cache_t *cache, int force)
{
open_file_t *open_file;
- FILE *f;
+ int fd = -1, res;
microdesc_t **mdp;
smartlist_t *wrote;
ssize_t size;
- off_t off = 0;
+ off_t off = 0, off_real;
int orig_size, new_size;
if (cache == NULL) {
@@ -429,10 +513,10 @@ microdesc_cache_rebuild(microdesc_cache_t *cache, int force)
orig_size = (int)(cache->cache_content ? cache->cache_content->size : 0);
orig_size += (int)cache->journal_len;
- f = start_writing_to_stdio_file(cache->cache_fname,
- OPEN_FLAGS_REPLACE|O_BINARY,
- 0600, &open_file);
- if (!f)
+ fd = start_writing_to_file(cache->cache_fname,
+ OPEN_FLAGS_REPLACE|O_BINARY,
+ 0600, &open_file);
+ if (fd < 0)
return -1;
wrote = smartlist_new();
@@ -440,18 +524,29 @@ microdesc_cache_rebuild(microdesc_cache_t *cache, int force)
HT_FOREACH(mdp, microdesc_map, &cache->map) {
microdesc_t *md = *mdp;
size_t annotation_len;
- if (md->no_save)
+ if (md->no_save || !md->body)
continue;
- size = dump_microdescriptor(f, md, &annotation_len);
+ size = dump_microdescriptor(fd, md, &annotation_len);
if (size < 0) {
- /* XXX handle errors from dump_microdescriptor() */
- /* log? return -1? die? coredump the universe? */
+ microdesc_wipe_body(md);
+
+ /* rewind, in case it was a partial write. */
+ tor_fd_setpos(fd, off);
continue;
}
tor_assert(((size_t)size) == annotation_len + md->bodylen);
md->off = off + annotation_len;
off += size;
+ off_real = tor_fd_getpos(fd);
+ if (off_real != off) {
+ log_warn(LD_BUG, "Discontinuity in position in microdescriptor cache."
+ "By my count, I'm at "I64_FORMAT
+ ", but I should be at "I64_FORMAT,
+ I64_PRINTF_ARG(off), I64_PRINTF_ARG(off_real));
+ if (off_real >= 0)
+ off = off_real;
+ }
if (md->saved_location != SAVED_IN_CACHE) {
tor_free(md->body);
md->saved_location = SAVED_IN_CACHE;
@@ -459,10 +554,30 @@ microdesc_cache_rebuild(microdesc_cache_t *cache, int force)
smartlist_add(wrote, md);
}
- if (cache->cache_content)
- tor_munmap_file(cache->cache_content);
+ /* We must do this unmap _before_ we call finish_writing_to_file(), or
+ * windows will not actually replace the file. */
+ if (cache->cache_content) {
+ res = tor_munmap_file(cache->cache_content);
+ if (res != 0) {
+ log_warn(LD_FS,
+ "Failed to unmap old microdescriptor cache while rebuilding");
+ }
+ cache->cache_content = NULL;
+ }
- finish_writing_to_file(open_file); /*XXX Check me.*/
+ if (finish_writing_to_file(open_file) < 0) {
+ log_warn(LD_DIR, "Error rebuilding microdescriptor cache: %s",
+ strerror(errno));
+ /* Okay. Let's prevent from making things worse elsewhere. */
+ cache->cache_content = NULL;
+ HT_FOREACH(mdp, microdesc_map, &cache->map) {
+ microdesc_t *md = *mdp;
+ if (md->saved_location == SAVED_IN_CACHE) {
+ microdesc_wipe_body(md);
+ }
+ }
+ return -1;
+ }
cache->cache_content = tor_mmap_file(cache->cache_fname);
@@ -478,7 +593,7 @@ microdesc_cache_rebuild(microdesc_cache_t *cache, int force)
if (PREDICT_UNLIKELY(
md->bodylen < 9 || fast_memneq(md->body, "onion-key", 9) != 0)) {
/* XXXX once bug 2022 is solved, we can kill this block and turn it
- * into just the tor_assert(!memcmp) */
+ * into just the tor_assert(fast_memeq) */
off_t avail = cache->cache_content->size - md->off;
char *bad_str;
tor_assert(avail >= 0);
@@ -531,7 +646,7 @@ microdesc_check_counts(void)
/** Deallocate a single microdescriptor. Note: the microdescriptor MUST have
* previously been removed from the cache if it had ever been inserted. */
void
-microdesc_free(microdesc_t *md)
+microdesc_free_(microdesc_t *md, const char *fname, int lineno)
{
if (!md)
return;
@@ -542,18 +657,20 @@ microdesc_free(microdesc_t *md)
microdesc_cache_t *cache = get_microdesc_cache();
microdesc_t *md2 = HT_FIND(microdesc_map, &cache->map, md);
if (md2 == md) {
- log_warn(LD_BUG, "microdesc_free() called, but md was still in "
- "microdesc_map");
+ log_warn(LD_BUG, "microdesc_free() called from %s:%d, but md was still "
+ "in microdesc_map", fname, lineno);
HT_REMOVE(microdesc_map, &cache->map, md);
} else {
- log_warn(LD_BUG, "microdesc_free() called with held_in_map set, but "
- "microdesc was not in the map.");
+ log_warn(LD_BUG, "microdesc_free() called from %s:%d with held_in_map "
+ "set, but microdesc was not in the map.", fname, lineno);
}
tor_fragile_assert();
}
if (md->held_by_nodes) {
+ microdesc_cache_t *cache = get_microdesc_cache();
int found=0;
const smartlist_t *nodes = nodelist_get_list();
+ const int ht_badness = HT_REP_IS_BAD_(microdesc_map, &cache->map);
SMARTLIST_FOREACH(nodes, node_t *, node, {
if (node->md == md) {
++found;
@@ -561,11 +678,14 @@ microdesc_free(microdesc_t *md)
}
});
if (found) {
- log_warn(LD_BUG, "microdesc_free() called, but md was still referenced "
- "%d node(s); held_by_nodes == %u", found, md->held_by_nodes);
+ log_warn(LD_BUG, "microdesc_free() called from %s:%d, but md was still "
+ "referenced %d node(s); held_by_nodes == %u, ht_badness == %d",
+ fname, lineno, found, md->held_by_nodes, ht_badness);
} else {
- log_warn(LD_BUG, "microdesc_free() called with held_by_nodes set to %u, "
- "but md was not referenced by any nodes", md->held_by_nodes);
+ log_warn(LD_BUG, "microdesc_free() called from %s:%d with held_by_nodes "
+ "set to %u, but md was not referenced by any nodes. "
+ "ht_badness == %d",
+ fname, lineno, md->held_by_nodes, ht_badness);
}
tor_fragile_assert();
}
@@ -574,6 +694,7 @@ microdesc_free(microdesc_t *md)
if (md->onion_pkey)
crypto_pk_free(md->onion_pkey);
+ tor_free(md->onion_curve25519_pkey);
if (md->body && md->saved_location != SAVED_IN_CACHE)
tor_free(md->body);
@@ -582,6 +703,7 @@ microdesc_free(microdesc_t *md)
smartlist_free(md->family);
}
short_policy_free(md->exit_policy);
+ short_policy_free(md->ipv6_exit_policy);
tor_free(md);
}
@@ -639,7 +761,7 @@ microdesc_list_missing_digest256(networkstatus_t *ns, microdesc_cache_t *cache,
continue;
if (downloadable_only &&
!download_status_is_ready(&rs->dl_status, now,
- MAX_MICRODESC_DOWNLOAD_FAILURES))
+ get_options()->TestingMicrodescMaxDownloadTries))
continue;
if (skip && digestmap_get(skip, rs->descriptor_digest))
continue;
@@ -668,7 +790,7 @@ update_microdesc_downloads(time_t now)
smartlist_t *missing;
digestmap_t *pending;
- if (should_delay_dir_fetches(options))
+ if (should_delay_dir_fetches(options, NULL))
return;
if (directory_too_idle_to_fetch_descriptors(options, now))
return;
@@ -727,9 +849,9 @@ we_use_microdescriptors_for_circuits(const or_options_t *options)
int ret = options->UseMicrodescriptors;
if (ret == -1) {
/* UseMicrodescriptors is "auto"; we need to decide: */
- /* If we are configured to use bridges and one of our bridges doesn't
+ /* If we are configured to use bridges and none of our bridges
* know what a microdescriptor is, the answer is no. */
- if (options->UseBridges && any_bridges_dont_support_microdescriptors())
+ if (options->UseBridges && !any_bridge_supports_microdescriptors())
return 0;
/* Otherwise, we decide that we'll use microdescriptors iff we are
* not a server, and we're not autofetching everything. */
diff --git a/src/or/microdesc.h b/src/or/microdesc.h
index 5646fc7a8..7adb8c68a 100644
--- a/src/or/microdesc.h
+++ b/src/or/microdesc.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,8 +9,8 @@
* \brief Header file for microdesc.c.
**/
-#ifndef _TOR_MICRODESC_H
-#define _TOR_MICRODESC_H
+#ifndef TOR_MICRODESC_H
+#define TOR_MICRODESC_H
microdesc_cache_t *get_microdesc_cache(void);
@@ -39,7 +39,9 @@ smartlist_t *microdesc_list_missing_digest256(networkstatus_t *ns,
int downloadable_only,
digestmap_t *skip);
-void microdesc_free(microdesc_t *md);
+void microdesc_free_(microdesc_t *md, const char *fname, int line);
+#define microdesc_free(md) \
+ microdesc_free_((md), __FILE__, __LINE__)
void microdesc_free_all(void);
void update_microdesc_downloads(time_t now);
diff --git a/src/or/networkstatus.c b/src/or/networkstatus.c
index 2553a74e5..890da0ad1 100644
--- a/src/or/networkstatus.c
+++ b/src/or/networkstatus.c
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -10,8 +10,12 @@
* client or cache.
*/
+#define NETWORKSTATUS_PRIVATE
#include "or.h"
-#include "circuitbuild.h"
+#include "channel.h"
+#include "circuitmux.h"
+#include "circuitmux_ewma.h"
+#include "circuitstats.h"
#include "config.h"
#include "connection.h"
#include "connection_or.h"
@@ -19,6 +23,7 @@
#include "directory.h"
#include "dirserv.h"
#include "dirvote.h"
+#include "entrynodes.h"
#include "main.h"
#include "microdesc.h"
#include "networkstatus.h"
@@ -27,18 +32,7 @@
#include "router.h"
#include "routerlist.h"
#include "routerparse.h"
-
-/* For tracking v2 networkstatus documents. Only caches do this now. */
-
-/** Map from descriptor digest of routers listed in the v2 networkstatus
- * documents to download_status_t* */
-static digestmap_t *v2_download_status_map = NULL;
-/** Global list of all of the current v2 network_status documents that we know
- * about. This list is kept sorted by published_on. */
-static smartlist_t *networkstatus_v2_list = NULL;
-/** True iff any member of networkstatus_v2_list has changed since the last
- * time we called download_status_map_update_from_v2_networkstatus() */
-static int networkstatus_v2_list_has_changed = 0;
+#include "transports.h"
/** Map from lowercase nickname to identity digest of named server, if any. */
static strmap_t *named_server_map = NULL;
@@ -84,11 +78,6 @@ typedef struct consensus_waiting_for_certs_t {
static consensus_waiting_for_certs_t
consensus_waiting_for_certs[N_CONSENSUS_FLAVORS];
-/** The last time we tried to download a networkstatus, or 0 for "never". We
- * use this to rate-limit download attempts for directory caches (including
- * mirrors). Clients don't use this now. */
-static time_t last_networkstatus_download_attempted = 0;
-
/** A time before which we shouldn't try to replace the current consensus:
* this will be at some point after the next consensus becomes valid, but
* before the current consensus becomes invalid. */
@@ -103,7 +92,6 @@ static int have_warned_about_old_version = 0;
* listed by the authorities. */
static int have_warned_about_new_version = 0;
-static void download_status_map_update_from_v2_networkstatus(void);
static void routerstatus_list_update_named_server_map(void);
/** Forget that we've warned about anything networkstatus-related, so we will
@@ -127,86 +115,9 @@ void
networkstatus_reset_download_failures(void)
{
int i;
- const smartlist_t *networkstatus_v2_list = networkstatus_get_v2_list();
- SMARTLIST_FOREACH_BEGIN(networkstatus_v2_list, networkstatus_v2_t *, ns) {
- SMARTLIST_FOREACH_BEGIN(ns->entries, routerstatus_t *, rs) {
- if (!router_get_by_descriptor_digest(rs->descriptor_digest))
- rs->need_to_mirror = 1;
- } SMARTLIST_FOREACH_END(rs);
- } SMARTLIST_FOREACH_END(ns);
for (i=0; i < N_CONSENSUS_FLAVORS; ++i)
download_status_reset(&consensus_dl_status[i]);
- if (v2_download_status_map) {
- digestmap_iter_t *iter;
- digestmap_t *map = v2_download_status_map;
- const char *key;
- void *val;
- download_status_t *dls;
- for (iter = digestmap_iter_init(map); !digestmap_iter_done(iter);
- iter = digestmap_iter_next(map, iter) ) {
- digestmap_iter_get(iter, &key, &val);
- dls = val;
- download_status_reset(dls);
- }
- }
-}
-
-/** Repopulate our list of network_status_t objects from the list cached on
- * disk. Return 0 on success, -1 on failure. */
-int
-router_reload_v2_networkstatus(void)
-{
- smartlist_t *entries;
- struct stat st;
- char *s;
- char *filename = get_datadir_fname("cached-status");
- int maybe_delete = !directory_caches_v2_dir_info(get_options());
- time_t now = time(NULL);
- if (!networkstatus_v2_list)
- networkstatus_v2_list = smartlist_new();
-
- entries = tor_listdir(filename);
- if (!entries) { /* dir doesn't exist */
- tor_free(filename);
- return 0;
- } else if (!smartlist_len(entries) && maybe_delete) {
- rmdir(filename);
- tor_free(filename);
- smartlist_free(entries);
- return 0;
- }
- tor_free(filename);
- SMARTLIST_FOREACH_BEGIN(entries, const char *, fn) {
- char buf[DIGEST_LEN];
- if (maybe_delete) {
- filename = get_datadir_fname2("cached-status", fn);
- remove_file_if_very_old(filename, now);
- tor_free(filename);
- continue;
- }
- if (strlen(fn) != HEX_DIGEST_LEN ||
- base16_decode(buf, sizeof(buf), fn, strlen(fn))) {
- log_info(LD_DIR,
- "Skipping cached-status file with unexpected name \"%s\"",fn);
- continue;
- }
- filename = get_datadir_fname2("cached-status", fn);
- s = read_file_to_str(filename, 0, &st);
- if (s) {
- if (router_set_networkstatus_v2(s, st.st_mtime, NS_FROM_CACHE,
- NULL)<0) {
- log_warn(LD_FS, "Couldn't load networkstatus from \"%s\"",filename);
- }
- tor_free(s);
- }
- tor_free(filename);
- } SMARTLIST_FOREACH_END(fn);
- SMARTLIST_FOREACH(entries, char *, fn, tor_free(fn));
- smartlist_free(entries);
- networkstatus_v2_list_clean(time(NULL));
- routers_update_all_from_networkstatus(time(NULL), 2);
- return 0;
}
/** Read every cached v3 consensus networkstatus from the disk. */
@@ -215,8 +126,6 @@ router_reload_consensus_networkstatus(void)
{
char *filename;
char *s;
- struct stat st;
- const or_options_t *options = get_options();
const unsigned int flags = NSSET_FROM_CACHE | NSSET_DONT_DOWNLOAD_CERTS;
int flav;
@@ -259,25 +168,6 @@ router_reload_consensus_networkstatus(void)
tor_free(filename);
}
- if (!current_consensus ||
- (stat(options->FallbackNetworkstatusFile, &st)==0 &&
- st.st_mtime > current_consensus->valid_after)) {
- s = read_file_to_str(options->FallbackNetworkstatusFile,
- RFTS_IGNORE_MISSING, NULL);
- if (s) {
- if (networkstatus_set_current_consensus(s, "ns",
- flags|NSSET_ACCEPT_OBSOLETE)) {
- log_info(LD_FS, "Couldn't load consensus networkstatus from \"%s\"",
- options->FallbackNetworkstatusFile);
- } else {
- log_notice(LD_FS,
- "Loaded fallback consensus networkstatus from \"%s\"",
- options->FallbackNetworkstatusFile);
- }
- tor_free(s);
- }
- }
-
if (!current_consensus) {
if (!named_server_map)
named_server_map = strmap_new();
@@ -294,7 +184,7 @@ router_reload_consensus_networkstatus(void)
}
/** Free all storage held by the vote_routerstatus object <b>rs</b>. */
-static void
+STATIC void
vote_routerstatus_free(vote_routerstatus_t *rs)
{
vote_microdesc_hash_t *h, *next;
@@ -320,26 +210,6 @@ routerstatus_free(routerstatus_t *rs)
tor_free(rs);
}
-/** Free all storage held by the networkstatus object <b>ns</b>. */
-void
-networkstatus_v2_free(networkstatus_v2_t *ns)
-{
- if (!ns)
- return;
- tor_free(ns->source_address);
- tor_free(ns->contact);
- if (ns->signing_key)
- crypto_pk_free(ns->signing_key);
- tor_free(ns->client_versions);
- tor_free(ns->server_versions);
- if (ns->entries) {
- SMARTLIST_FOREACH(ns->entries, routerstatus_t *, rs,
- routerstatus_free(rs));
- smartlist_free(ns->entries);
- }
- tor_free(ns);
-}
-
/** Free all storage held in <b>sig</b> */
void
document_signature_free(document_signature_t *sig)
@@ -453,6 +323,17 @@ networkstatus_check_document_signature(const networkstatus_t *consensus,
DIGEST_LEN))
return -1;
+ if (authority_cert_is_blacklisted(cert)) {
+ /* We implement blacklisting for authority signing keys by treating
+ * all their signatures as always bad. That way we don't get into
+ * crazy loops of dropping and re-fetching signatures. */
+ log_warn(LD_DIR, "Ignoring a consensus signature made with deprecated"
+ " signing key %s",
+ hex_str(cert->signing_key_digest, DIGEST_LEN));
+ sig->bad_signature = 1;
+ return 0;
+ }
+
signed_digest_len = crypto_pk_keysize(cert->signing_key);
signed_digest = tor_malloc(signed_digest_len);
if (crypto_pk_public_checksig(cert->signing_key,
@@ -561,7 +442,7 @@ networkstatus_check_consensus_signature(networkstatus_t *consensus,
/* Now see whether we're missing any voters entirely. */
SMARTLIST_FOREACH(router_get_trusted_dir_servers(),
- trusted_dir_server_t *, ds,
+ dir_server_t *, ds,
{
if ((ds->type & V3_DIRINFO) &&
!networkstatus_get_voter_by_id(consensus, ds->v3_identity_digest))
@@ -578,7 +459,7 @@ networkstatus_check_consensus_signature(networkstatus_t *consensus,
if (warn >= 0) {
SMARTLIST_FOREACH(unrecognized, networkstatus_voter_info_t *, voter,
{
- log(severity, LD_DIR, "Consensus includes unrecognized authority "
+ tor_log(severity, LD_DIR, "Consensus includes unrecognized authority "
"'%s' at %s:%d (contact %s; identity %s)",
voter->nickname, voter->address, (int)voter->dir_port,
voter->contact?voter->contact:"n/a",
@@ -586,16 +467,16 @@ networkstatus_check_consensus_signature(networkstatus_t *consensus,
});
SMARTLIST_FOREACH(need_certs_from, networkstatus_voter_info_t *, voter,
{
- log(severity, LD_DIR, "Looks like we need to download a new "
+ tor_log(severity, LD_DIR, "Looks like we need to download a new "
"certificate from authority '%s' at %s:%d (contact %s; "
"identity %s)",
voter->nickname, voter->address, (int)voter->dir_port,
voter->contact?voter->contact:"n/a",
hex_str(voter->identity_digest, DIGEST_LEN));
});
- SMARTLIST_FOREACH(missing_authorities, trusted_dir_server_t *, ds,
+ SMARTLIST_FOREACH(missing_authorities, dir_server_t *, ds,
{
- log(severity, LD_DIR, "Consensus does not include configured "
+ tor_log(severity, LD_DIR, "Consensus does not include configured "
"authority '%s' at %s:%d (identity %s)",
ds->nickname, ds->address, (int)ds->dir_port,
hex_str(ds->v3_identity_digest, DIGEST_LEN));
@@ -631,7 +512,7 @@ networkstatus_check_consensus_signature(networkstatus_t *consensus,
"because we were missing the keys.", n_missing_key);
}
joined = smartlist_join_strings(sl, " ", 0, NULL);
- log(severity, LD_DIR, "%s", joined);
+ tor_log(severity, LD_DIR, "%s", joined);
tor_free(joined);
SMARTLIST_FOREACH(sl, char *, c, tor_free(c));
smartlist_free(sl);
@@ -654,296 +535,10 @@ networkstatus_check_consensus_signature(networkstatus_t *consensus,
return -2;
}
-/** Helper: return a newly allocated string containing the name of the filename
- * where we plan to cache the network status with the given identity digest. */
-char *
-networkstatus_get_cache_filename(const char *identity_digest)
-{
- char fp[HEX_DIGEST_LEN+1];
- base16_encode(fp, HEX_DIGEST_LEN+1, identity_digest, DIGEST_LEN);
- return get_datadir_fname2("cached-status", fp);
-}
-
-/** Helper for smartlist_sort: Compare two networkstatus objects by
- * publication date. */
-static int
-_compare_networkstatus_v2_published_on(const void **_a, const void **_b)
-{
- const networkstatus_v2_t *a = *_a, *b = *_b;
- if (a->published_on < b->published_on)
- return -1;
- else if (a->published_on > b->published_on)
- return 1;
- else
- return 0;
-}
-
-/** Add the parsed v2 networkstatus in <b>ns</b> (with original document in
- * <b>s</b>) to the disk cache (and the in-memory directory server cache) as
- * appropriate. */
-static int
-add_networkstatus_to_cache(const char *s,
- v2_networkstatus_source_t source,
- networkstatus_v2_t *ns)
-{
- if (source != NS_FROM_CACHE) {
- char *fn = networkstatus_get_cache_filename(ns->identity_digest);
- if (write_str_to_file(fn, s, 0)<0) {
- log_notice(LD_FS, "Couldn't write cached network status to \"%s\"", fn);
- }
- tor_free(fn);
- }
-
- if (directory_caches_v2_dir_info(get_options()))
- dirserv_set_cached_networkstatus_v2(s,
- ns->identity_digest,
- ns->published_on);
-
- return 0;
-}
-
/** How far in the future do we allow a network-status to get before removing
* it? (seconds) */
#define NETWORKSTATUS_ALLOW_SKEW (24*60*60)
-/** Given a string <b>s</b> containing a network status that we received at
- * <b>arrived_at</b> from <b>source</b>, try to parse it, see if we want to
- * store it, and put it into our cache as necessary.
- *
- * If <b>source</b> is NS_FROM_DIR or NS_FROM_CACHE, do not replace our
- * own networkstatus_t (if we're an authoritative directory server).
- *
- * If <b>source</b> is NS_FROM_CACHE, do not write our networkstatus_t to the
- * cache.
- *
- * If <b>requested_fingerprints</b> is provided, it must contain a list of
- * uppercased identity fingerprints. Do not update any networkstatus whose
- * fingerprint is not on the list; after updating a networkstatus, remove its
- * fingerprint from the list.
- *
- * Return 0 on success, -1 on failure.
- *
- * Callers should make sure that routers_update_all_from_networkstatus() is
- * invoked after this function succeeds.
- */
-int
-router_set_networkstatus_v2(const char *s, time_t arrived_at,
- v2_networkstatus_source_t source,
- smartlist_t *requested_fingerprints)
-{
- networkstatus_v2_t *ns;
- int i, found;
- time_t now;
- int skewed = 0;
- trusted_dir_server_t *trusted_dir = NULL;
- const char *source_desc = NULL;
- char fp[HEX_DIGEST_LEN+1];
- char published[ISO_TIME_LEN+1];
-
- if (!directory_caches_v2_dir_info(get_options()))
- return 0; /* Don't bother storing it. */
-
- ns = networkstatus_v2_parse_from_string(s);
- if (!ns) {
- log_warn(LD_DIR, "Couldn't parse network status.");
- return -1;
- }
- base16_encode(fp, HEX_DIGEST_LEN+1, ns->identity_digest, DIGEST_LEN);
- if (!(trusted_dir =
- router_get_trusteddirserver_by_digest(ns->identity_digest)) ||
- !(trusted_dir->type & V2_DIRINFO)) {
- log_info(LD_DIR, "Network status was signed, but not by an authoritative "
- "directory we recognize.");
- source_desc = fp;
- } else {
- source_desc = trusted_dir->description;
- }
- now = time(NULL);
- if (arrived_at > now)
- arrived_at = now;
-
- ns->received_on = arrived_at;
-
- format_iso_time(published, ns->published_on);
-
- if (ns->published_on > now + NETWORKSTATUS_ALLOW_SKEW) {
- char dbuf[64];
- long delta = now - ns->published_on;
- format_time_interval(dbuf, sizeof(dbuf), delta);
- log_warn(LD_GENERAL, "Network status from %s was published %s in the "
- "future (%s GMT). Check your time and date settings! "
- "Not caching.",
- source_desc, dbuf, published);
- control_event_general_status(LOG_WARN,
- "CLOCK_SKEW MIN_SKEW=%ld SOURCE=NETWORKSTATUS:%s:%d",
- delta, ns->source_address, ns->source_dirport);
- skewed = 1;
- }
-
- if (!networkstatus_v2_list)
- networkstatus_v2_list = smartlist_new();
-
- if ( (source == NS_FROM_DIR_BY_FP || source == NS_FROM_DIR_ALL) &&
- router_digest_is_me(ns->identity_digest)) {
- /* Don't replace our own networkstatus when we get it from somebody else.*/
- networkstatus_v2_free(ns);
- return 0;
- }
-
- if (requested_fingerprints) {
- if (smartlist_string_isin(requested_fingerprints, fp)) {
- smartlist_string_remove(requested_fingerprints, fp);
- } else {
- if (source != NS_FROM_DIR_ALL) {
- char *requested =
- smartlist_join_strings(requested_fingerprints," ",0,NULL);
- log_warn(LD_DIR,
- "We received a network status with a fingerprint (%s) that we "
- "never requested. (We asked for: %s.) Dropping.",
- fp, requested);
- tor_free(requested);
- return 0;
- }
- }
- }
-
- if (!trusted_dir) {
- if (!skewed) {
- /* We got a non-trusted networkstatus, and we're a directory cache.
- * This means that we asked an authority, and it told us about another
- * authority we didn't recognize. */
- log_info(LD_DIR,
- "We do not recognize authority (%s) but we are willing "
- "to cache it.", fp);
- add_networkstatus_to_cache(s, source, ns);
- networkstatus_v2_free(ns);
- }
- return 0;
- }
-
- found = 0;
- for (i=0; i < smartlist_len(networkstatus_v2_list); ++i) {
- networkstatus_v2_t *old_ns = smartlist_get(networkstatus_v2_list, i);
-
- if (tor_memeq(old_ns->identity_digest, ns->identity_digest, DIGEST_LEN)) {
- if (tor_memeq(old_ns->networkstatus_digest,
- ns->networkstatus_digest, DIGEST_LEN)) {
- /* Same one we had before. */
- networkstatus_v2_free(ns);
- tor_assert(trusted_dir);
- log_info(LD_DIR,
- "Not replacing network-status from %s (published %s); "
- "we already have it.",
- trusted_dir->description, published);
- if (old_ns->received_on < arrived_at) {
- if (source != NS_FROM_CACHE) {
- char *fn;
- fn = networkstatus_get_cache_filename(old_ns->identity_digest);
- /* We use mtime to tell when it arrived, so update that. */
- touch_file(fn);
- tor_free(fn);
- }
- old_ns->received_on = arrived_at;
- }
- download_status_failed(&trusted_dir->v2_ns_dl_status, 0);
- return 0;
- } else if (old_ns->published_on >= ns->published_on) {
- char old_published[ISO_TIME_LEN+1];
- format_iso_time(old_published, old_ns->published_on);
- tor_assert(trusted_dir);
- log_info(LD_DIR,
- "Not replacing network-status from %s (published %s);"
- " we have a newer one (published %s) for this authority.",
- trusted_dir->description, published,
- old_published);
- networkstatus_v2_free(ns);
- download_status_failed(&trusted_dir->v2_ns_dl_status, 0);
- return 0;
- } else {
- networkstatus_v2_free(old_ns);
- smartlist_set(networkstatus_v2_list, i, ns);
- found = 1;
- break;
- }
- }
- }
-
- if (source != NS_FROM_CACHE && trusted_dir) {
- download_status_reset(&trusted_dir->v2_ns_dl_status);
- }
-
- if (!found)
- smartlist_add(networkstatus_v2_list, ns);
-
-/** Retain any routerinfo mentioned in a V2 networkstatus for at least this
- * long. */
-#define V2_NETWORKSTATUS_ROUTER_LIFETIME (3*60*60)
-
- {
- time_t live_until = ns->published_on + V2_NETWORKSTATUS_ROUTER_LIFETIME;
- SMARTLIST_FOREACH_BEGIN(ns->entries, routerstatus_t *, rs) {
- signed_descriptor_t *sd =
- router_get_by_descriptor_digest(rs->descriptor_digest);
- if (sd) {
- if (sd->last_listed_as_valid_until < live_until)
- sd->last_listed_as_valid_until = live_until;
- } else {
- rs->need_to_mirror = 1;
- }
- } SMARTLIST_FOREACH_END(rs);
- }
-
- log_info(LD_DIR, "Setting networkstatus %s %s (published %s)",
- source == NS_FROM_CACHE?"cached from":
- ((source == NS_FROM_DIR_BY_FP || source == NS_FROM_DIR_ALL) ?
- "downloaded from":"generated for"),
- trusted_dir->description, published);
- networkstatus_v2_list_has_changed = 1;
-
- smartlist_sort(networkstatus_v2_list,
- _compare_networkstatus_v2_published_on);
-
- if (!skewed)
- add_networkstatus_to_cache(s, source, ns);
-
- return 0;
-}
-
-/** Remove all very-old network_status_t objects from memory and from the
- * disk cache. */
-void
-networkstatus_v2_list_clean(time_t now)
-{
- int i;
- if (!networkstatus_v2_list)
- return;
-
- for (i = 0; i < smartlist_len(networkstatus_v2_list); ++i) {
- networkstatus_v2_t *ns = smartlist_get(networkstatus_v2_list, i);
- char *fname = NULL;
- if (ns->published_on + MAX_NETWORKSTATUS_AGE > now)
- continue;
- /* Okay, this one is too old. Remove it from the list, and delete it
- * from the cache. */
- smartlist_del(networkstatus_v2_list, i--);
- fname = networkstatus_get_cache_filename(ns->identity_digest);
- if (file_status(fname) == FN_FILE) {
- log_info(LD_DIR, "Removing too-old networkstatus in %s", fname);
- unlink(fname);
- }
- tor_free(fname);
- if (directory_caches_v2_dir_info(get_options())) {
- dirserv_set_cached_networkstatus_v2(NULL, ns->identity_digest, 0);
- }
- networkstatus_v2_free(ns);
- }
-
- /* And now go through the directory cache for any cached untrusted
- * networkstatuses and other network info. */
- dirserv_clear_old_networkstatuses(now - MAX_NETWORKSTATUS_AGE);
- dirserv_clear_old_v1_info(now);
-}
-
/** Helper for bsearching a list of routerstatus_t pointers: compare a
* digest in the key to the identity digest of a routerstatus_t. */
int
@@ -954,20 +549,15 @@ compare_digest_to_routerstatus_entry(const void *_key, const void **_member)
return tor_memcmp(key, rs->identity_digest, DIGEST_LEN);
}
-/** As networkstatus_v2_find_entry, but do not return a const pointer */
-routerstatus_t *
-networkstatus_v2_find_mutable_entry(networkstatus_v2_t *ns, const char *digest)
-{
- return smartlist_bsearch(ns->entries, digest,
- compare_digest_to_routerstatus_entry);
-}
-
-/** Return the entry in <b>ns</b> for the identity digest <b>digest</b>, or
- * NULL if none was found. */
-const routerstatus_t *
-networkstatus_v2_find_entry(networkstatus_v2_t *ns, const char *digest)
+/** Helper for bsearching a list of routerstatus_t pointers: compare a
+ * digest in the key to the identity digest of a routerstatus_t. */
+int
+compare_digest_to_vote_routerstatus_entry(const void *_key,
+ const void **_member)
{
- return networkstatus_v2_find_mutable_entry(ns, digest);
+ const char *key = _key;
+ const vote_routerstatus_t *vrs = *_member;
+ return tor_memcmp(key, vrs->status.identity_digest, DIGEST_LEN);
}
/** As networkstatus_find_entry, but do not return a const pointer */
@@ -999,15 +589,6 @@ networkstatus_vote_find_entry_idx(networkstatus_t *ns,
found_out);
}
-/** Return a list of the v2 networkstatus documents. */
-const smartlist_t *
-networkstatus_get_v2_list(void)
-{
- if (!networkstatus_v2_list)
- networkstatus_v2_list = smartlist_new();
- return networkstatus_v2_list;
-}
-
/** As router_get_consensus_status_by_descriptor_digest, but does not return
* a const pointer. */
routerstatus_t *
@@ -1052,8 +633,6 @@ router_get_dl_status_by_descriptor_digest(const char *d)
if ((rs = router_get_mutable_consensus_status_by_descriptor_digest(
current_ns_consensus, d)))
return &rs->dl_status;
- if (v2_download_status_map)
- return digestmap_get(v2_download_status_map, d);
return NULL;
}
@@ -1119,72 +698,6 @@ networkstatus_nickname_is_unnamed(const char *nickname)
* networkstatus documents? */
#define NONAUTHORITY_NS_CACHE_INTERVAL (60*60)
-/** We are a directory server, and so cache network_status documents.
- * Initiate downloads as needed to update them. For v2 authorities,
- * this means asking each trusted directory for its network-status.
- * For caches, this means asking a random v2 authority for all
- * network-statuses.
- */
-static void
-update_v2_networkstatus_cache_downloads(time_t now)
-{
- int authority = authdir_mode_v2(get_options());
- int interval =
- authority ? AUTHORITY_NS_CACHE_INTERVAL : NONAUTHORITY_NS_CACHE_INTERVAL;
- const smartlist_t *trusted_dir_servers = router_get_trusted_dir_servers();
-
- if (last_networkstatus_download_attempted + interval >= now)
- return;
-
- last_networkstatus_download_attempted = now;
-
- if (authority) {
- /* An authority launches a separate connection for everybody. */
- SMARTLIST_FOREACH_BEGIN(trusted_dir_servers, trusted_dir_server_t *, ds)
- {
- char resource[HEX_DIGEST_LEN+6]; /* fp/hexdigit.z\0 */
- tor_addr_t addr;
- if (!(ds->type & V2_DIRINFO))
- continue;
- if (router_digest_is_me(ds->digest))
- continue;
- tor_addr_from_ipv4h(&addr, ds->addr);
- /* Is this quite sensible with IPv6 or multiple addresses? */
- if (connection_get_by_type_addr_port_purpose(
- CONN_TYPE_DIR, &addr, ds->dir_port,
- DIR_PURPOSE_FETCH_V2_NETWORKSTATUS)) {
- /* XXX the above dir_port won't be accurate if we're
- * doing a tunneled conn. In that case it should be or_port.
- * How to guess from here? Maybe make the function less general
- * and have it know that it's looking for dir conns. -RD */
- /* Only directory caches download v2 networkstatuses, and they
- * don't use tunneled connections. I think it's okay to ignore
- * this. */
- continue;
- }
- strlcpy(resource, "fp/", sizeof(resource));
- base16_encode(resource+3, sizeof(resource)-3, ds->digest, DIGEST_LEN);
- strlcat(resource, ".z", sizeof(resource));
- directory_initiate_command_routerstatus(
- &ds->fake_status, DIR_PURPOSE_FETCH_V2_NETWORKSTATUS,
- ROUTER_PURPOSE_GENERAL,
- 0, /* Not private */
- resource,
- NULL, 0 /* No payload. */,
- 0 /* No I-M-S. */);
- }
- SMARTLIST_FOREACH_END(ds);
- } else {
- /* A non-authority cache launches one connection to a random authority. */
- /* (Check whether we're currently fetching network-status objects.) */
- if (!connection_get_by_type_purpose(CONN_TYPE_DIR,
- DIR_PURPOSE_FETCH_V2_NETWORKSTATUS))
- directory_get_from_dirserver(DIR_PURPOSE_FETCH_V2_NETWORKSTATUS,
- ROUTER_PURPOSE_GENERAL, "all.z",
- PDS_RETRY_IF_NO_SERVERS);
- }
-}
-
/** Return true iff, given the options listed in <b>options</b>, <b>flavor</b>
* is the flavor of a consensus networkstatus that we would like to fetch. */
static int
@@ -1209,8 +722,6 @@ we_want_to_fetch_flavor(const or_options_t *options, int flavor)
return flavor == usable_consensus_flavor();
}
-/** How many times will we try to fetch a consensus before we give up? */
-#define CONSENSUS_NETWORKSTATUS_MAX_DL_TRIES 8
/** How long will we hang onto a possibly live consensus for which we're
* fetching certs before we check whether there is a better one? */
#define DELAY_WHILE_FETCHING_CERTS (20*60)
@@ -1239,12 +750,12 @@ update_consensus_networkstatus_downloads(time_t now)
}
if (time_to_download_next_consensus[i] > now)
- return; /* Wait until the current consensus is older. */
+ continue; /* Wait until the current consensus is older. */
resource = networkstatus_get_flavor_name(i);
if (!download_status_is_ready(&consensus_dl_status[i], now,
- CONSENSUS_NETWORKSTATUS_MAX_DL_TRIES))
+ options->TestingConsensusMaxDownloadTries))
continue; /* We failed downloading a consensus too recently. */
if (connection_dir_get_by_purpose_and_resource(
DIR_PURPOSE_FETCH_CONSENSUS, resource))
@@ -1319,7 +830,7 @@ update_consensus_networkstatus_fetch_time_impl(time_t now, int flav)
if (directory_fetches_dir_info_early(options)) {
/* We want to cache the next one at some point after this one
* is no longer fresh... */
- start = c->fresh_until + min_sec_before_caching;
+ start = (time_t)(c->fresh_until + min_sec_before_caching);
/* Some clients may need the consensus sooner than others. */
if (options->FetchDirInfoExtraEarly || authdir_mode_v3(options)) {
dl_interval = 60;
@@ -1332,7 +843,7 @@ update_consensus_networkstatus_fetch_time_impl(time_t now, int flav)
} else {
/* We're an ordinary client or a bridge. Give all the caches enough
* time to download the consensus. */
- start = c->fresh_until + (interval*3)/4;
+ start = (time_t)(c->fresh_until + (interval*3)/4);
/* But download the next one well before this one is expired. */
dl_interval = ((c->valid_until - start) * 7 )/ 8;
@@ -1340,7 +851,7 @@ update_consensus_networkstatus_fetch_time_impl(time_t now, int flav)
* to choose the rest of the interval *after* them. */
if (directory_fetches_dir_info_later(options)) {
/* Give all the *clients* enough time to download the consensus. */
- start = start + dl_interval + min_sec_before_caching;
+ start = (time_t)(start + dl_interval + min_sec_before_caching);
/* But try to get it before ours actually expires. */
dl_interval = (c->valid_until - start) - min_sec_before_caching;
}
@@ -1386,14 +897,45 @@ update_consensus_networkstatus_fetch_time(time_t now)
/** Return 1 if there's a reason we shouldn't try any directory
* fetches yet (e.g. we demand bridges and none are yet known).
- * Else return 0. */
+ * Else return 0.
+
+ * If we return 1 and <b>msg_out</b> is provided, set <b>msg_out</b>
+ * to an explanation of why directory fetches are delayed. (If we
+ * return 0, we set msg_out to NULL.)
+ */
int
-should_delay_dir_fetches(const or_options_t *options)
+should_delay_dir_fetches(const or_options_t *options, const char **msg_out)
{
- if (options->UseBridges && !any_bridge_descriptors_known()) {
- log_info(LD_DIR, "delaying dir fetches (no running bridges known)");
+ if (msg_out) {
+ *msg_out = NULL;
+ }
+
+ if (options->DisableNetwork) {
+ if (msg_out) {
+ *msg_out = "DisableNetwork is set.";
+ }
+ log_info(LD_DIR, "Delaying dir fetches (DisableNetwork is set)");
return 1;
}
+
+ if (options->UseBridges) {
+ if (!any_bridge_descriptors_known()) {
+ if (msg_out) {
+ *msg_out = "No running bridges";
+ }
+ log_info(LD_DIR, "Delaying dir fetches (no running bridges known)");
+ return 1;
+ }
+
+ if (pt_proxies_configuration_pending()) {
+ if (msg_out) {
+ *msg_out = "Pluggable transport proxies still configuring";
+ }
+ log_info(LD_DIR, "Delaying dir fetches (pt proxies still configuring)");
+ return 1;
+ }
+ }
+
return 0;
}
@@ -1403,10 +945,8 @@ void
update_networkstatus_downloads(time_t now)
{
const or_options_t *options = get_options();
- if (should_delay_dir_fetches(options))
+ if (should_delay_dir_fetches(options, NULL))
return;
- if (authdir_mode_any_main(options) || options->FetchV2Networkstatus)
- update_v2_networkstatus_cache_downloads(now);
update_consensus_networkstatus_downloads(now);
update_certificate_downloads(now);
}
@@ -1438,18 +978,6 @@ consensus_is_waiting_for_certs(void)
? 1 : 0;
}
-/** Return the network status with a given identity digest. */
-networkstatus_v2_t *
-networkstatus_v2_get_by_digest(const char *digest)
-{
- SMARTLIST_FOREACH(networkstatus_v2_list, networkstatus_v2_t *, ns,
- {
- if (tor_memeq(ns->identity_digest, digest, DIGEST_LEN))
- return ns;
- });
- return NULL;
-}
-
/** Return the most recent consensus that we have downloaded, or NULL if we
* don't have one. */
networkstatus_t *
@@ -1525,18 +1053,11 @@ routerstatus_has_changed(const routerstatus_t *a, const routerstatus_t *b)
a->is_named != b->is_named ||
a->is_unnamed != b->is_unnamed ||
a->is_valid != b->is_valid ||
- a->is_v2_dir != b->is_v2_dir ||
a->is_possible_guard != b->is_possible_guard ||
a->is_bad_exit != b->is_bad_exit ||
a->is_bad_directory != b->is_bad_directory ||
a->is_hs_dir != b->is_hs_dir ||
- a->version_known != b->version_known ||
- a->version_supports_begindir != b->version_supports_begindir ||
- a->version_supports_extrainfo_upload !=
- b->version_supports_extrainfo_upload ||
- a->version_supports_conditional_consensus !=
- b->version_supports_conditional_consensus ||
- a->version_supports_v3_dir != b->version_supports_v3_dir;
+ a->version_known != b->version_known;
}
/** Notify controllers of any router status entries that changed between
@@ -1640,6 +1161,7 @@ networkstatus_set_current_consensus(const char *consensus,
consensus_waiting_for_certs_t *waiting = NULL;
time_t current_valid_after = 0;
int free_consensus = 1; /* Free 'c' at the end of the function */
+ int old_ewma_enabled;
if (flav < 0) {
/* XXXX we don't handle unrecognized flavors yet. */
@@ -1675,9 +1197,6 @@ networkstatus_set_current_consensus(const char *consensus,
if (from_cache && !accept_obsolete &&
c->valid_until < now-OLD_ROUTER_DESC_MAX_AGE) {
- /* XXXX If we try to make fallbackconsensus work again, we should
- * consider taking this out. Until then, believing obsolete consensuses
- * is causing more harm than good. See also bug 887. */
log_info(LD_DIR, "Loaded an expired consensus. Discarding.");
goto done;
}
@@ -1755,7 +1274,11 @@ networkstatus_set_current_consensus(const char *consensus,
/* Even if we had enough signatures, we'd never use this as the
* latest consensus. */
if (was_waiting_for_certs && from_cache)
- unlink(unverified_fname);
+ if (unlink(unverified_fname) != 0) {
+ log_warn(LD_FS,
+ "Failed to unlink %s: %s",
+ unverified_fname, strerror(errno));
+ }
}
goto done;
} else {
@@ -1765,8 +1288,13 @@ networkstatus_set_current_consensus(const char *consensus,
"consensus");
result = -2;
}
- if (was_waiting_for_certs && (r < -1) && from_cache)
- unlink(unverified_fname);
+ if (was_waiting_for_certs && (r < -1) && from_cache) {
+ if (unlink(unverified_fname) != 0) {
+ log_warn(LD_FS,
+ "Failed to unlink %s: %s",
+ unverified_fname, strerror(errno));
+ }
+ }
goto done;
}
}
@@ -1814,7 +1342,11 @@ networkstatus_set_current_consensus(const char *consensus,
waiting->body = NULL;
waiting->set_at = 0;
waiting->dl_failed = 0;
- unlink(unverified_fname);
+ if (unlink(unverified_fname) != 0) {
+ log_warn(LD_FS,
+ "Failed to unlink %s: %s",
+ unverified_fname, strerror(errno));
+ }
}
/* Reset the failure count only if this consensus is actually valid. */
@@ -1833,13 +1365,25 @@ networkstatus_set_current_consensus(const char *consensus,
dirvote_recalculate_timing(options, now);
routerstatus_list_update_named_server_map();
- cell_ewma_set_scale_factor(options, current_consensus);
+
+ /* Update ewma and adjust policy if needed; first cache the old value */
+ old_ewma_enabled = cell_ewma_enabled();
+ /* Change the cell EWMA settings */
+ cell_ewma_set_scale_factor(options, networkstatus_get_latest_consensus());
+ /* If we just enabled ewma, set the cmux policy on all active channels */
+ if (cell_ewma_enabled() && !old_ewma_enabled) {
+ channel_set_cmux_policy_everywhere(&ewma_policy);
+ } else if (!cell_ewma_enabled() && old_ewma_enabled) {
+ /* Turn it off everywhere */
+ channel_set_cmux_policy_everywhere(NULL);
+ }
/* XXXX024 this call might be unnecessary here: can changing the
* current consensus really alter our view of any OR's rate limits? */
connection_or_update_token_buckets(get_connection_array(), options);
- circuit_build_times_new_consensus_params(&circ_times, current_consensus);
+ circuit_build_times_new_consensus_params(get_circuit_build_times_mutable(),
+ current_consensus);
}
if (directory_caches_dir_info(options)) {
@@ -1864,7 +1408,7 @@ networkstatus_set_current_consensus(const char *consensus,
format_iso_time(tbuf, c->valid_after);
format_time_interval(dbuf, sizeof(dbuf), delta);
log_warn(LD_GENERAL, "Our clock is %s behind the time published in the "
- "consensus network status document (%s GMT). Tor needs an "
+ "consensus network status document (%s UTC). Tor needs an "
"accurate clock to work correctly. Please check your time and "
"date settings!", dbuf, tbuf);
control_event_general_status(LOG_WARN,
@@ -1893,11 +1437,12 @@ networkstatus_note_certs_arrived(void)
if (!waiting->consensus)
continue;
if (networkstatus_check_consensus_signature(waiting->consensus, 0)>=0) {
+ char *waiting_body = waiting->body;
if (!networkstatus_set_current_consensus(
- waiting->body,
+ waiting_body,
networkstatus_get_flavor_name(i),
NSSET_WAS_WAITING_FOR_CERTS)) {
- tor_free(waiting->body);
+ tor_free(waiting_body);
}
}
}
@@ -1915,9 +1460,6 @@ routers_update_all_from_networkstatus(time_t now, int dir_version)
networkstatus_t *consensus = networkstatus_get_reasonably_live_consensus(now,
FLAV_NS);
- if (networkstatus_v2_list_has_changed)
- download_status_map_update_from_v2_networkstatus();
-
if (!consensus || dir_version < 3) /* nothing more we should do */
return;
@@ -1972,35 +1514,6 @@ routers_update_all_from_networkstatus(time_t now, int dir_version)
}
}
-/** Update v2_download_status_map to contain an entry for every router
- * descriptor listed in the v2 networkstatuses. */
-static void
-download_status_map_update_from_v2_networkstatus(void)
-{
- digestmap_t *dl_status;
- if (!networkstatus_v2_list)
- return;
- if (!v2_download_status_map)
- v2_download_status_map = digestmap_new();
-
- dl_status = digestmap_new();
- SMARTLIST_FOREACH_BEGIN(networkstatus_v2_list, networkstatus_v2_t *, ns) {
- SMARTLIST_FOREACH_BEGIN(ns->entries, const routerstatus_t *, rs) {
- const char *d = rs->descriptor_digest;
- download_status_t *s;
- if (digestmap_get(dl_status, d))
- continue;
- if (!(s = digestmap_remove(v2_download_status_map, d))) {
- s = tor_malloc_zero(sizeof(download_status_t));
- }
- digestmap_set(dl_status, d, s);
- } SMARTLIST_FOREACH_END(rs);
- } SMARTLIST_FOREACH_END(ns);
- digestmap_free(v2_download_status_map, _tor_free);
- v2_download_status_map = dl_status;
- networkstatus_v2_list_has_changed = 0;
-}
-
/** Update our view of the list of named servers from the most recently
* retrieved networkstatus consensus. */
static void
@@ -2009,7 +1522,7 @@ routerstatus_list_update_named_server_map(void)
if (!current_consensus)
return;
- strmap_free(named_server_map, _tor_free);
+ strmap_free(named_server_map, tor_free_);
named_server_map = strmap_new();
strmap_free(unnamed_server_map, NULL);
unnamed_server_map = strmap_new();
@@ -2032,14 +1545,11 @@ void
routers_update_status_from_consensus_networkstatus(smartlist_t *routers,
int reset_failures)
{
- trusted_dir_server_t *ds;
const or_options_t *options = get_options();
- int authdir = authdir_mode_v2(options) || authdir_mode_v3(options);
+ int authdir = authdir_mode_v3(options);
networkstatus_t *ns = current_consensus;
if (!ns || !smartlist_len(ns->routerstatus_list))
return;
- if (!networkstatus_v2_list)
- networkstatus_v2_list = smartlist_new();
routers_sort_by_identity(routers);
@@ -2049,11 +1559,6 @@ routers_update_status_from_consensus_networkstatus(smartlist_t *routers,
router->cache_info.identity_digest, DIGEST_LEN),
{
}) {
- /* We have a routerstatus for this router. */
- const char *digest = router->cache_info.identity_digest;
-
- ds = router_get_trusteddirserver_by_digest(digest);
-
/* Is it the same descriptor, or only the same identity? */
if (tor_memeq(router->cache_info.signed_descriptor_digest,
rs->descriptor_digest, DIGEST_LEN)) {
@@ -2071,30 +1576,11 @@ routers_update_status_from_consensus_networkstatus(smartlist_t *routers,
dirserv_should_launch_reachability_test(router, old_router);
}
}
- if (rs->is_flagged_running && ds) {
- download_status_reset(&ds->v2_ns_dl_status);
- }
if (reset_failures) {
download_status_reset(&rs->dl_status);
}
} SMARTLIST_FOREACH_JOIN_END(rs, router);
- /* Now update last_listed_as_valid_until from v2 networkstatuses. */
- SMARTLIST_FOREACH_BEGIN(networkstatus_v2_list, networkstatus_v2_t *, ns) {
- time_t live_until = ns->published_on + V2_NETWORKSTATUS_ROUTER_LIFETIME;
- SMARTLIST_FOREACH_JOIN(ns->entries, const routerstatus_t *, rs,
- routers, routerinfo_t *, ri,
- tor_memcmp(rs->identity_digest,
- ri->cache_info.identity_digest, DIGEST_LEN),
- STMT_NIL) {
- if (tor_memeq(ri->cache_info.signed_descriptor_digest,
- rs->descriptor_digest, DIGEST_LEN)) {
- if (live_until > ri->cache_info.last_listed_as_valid_until)
- ri->cache_info.last_listed_as_valid_until = live_until;
- }
- } SMARTLIST_FOREACH_JOIN_END(rs, ri);
- } SMARTLIST_FOREACH_END(ns);
-
router_dir_info_changed();
}
@@ -2130,9 +1616,7 @@ signed_descs_update_status_from_consensus_networkstatus(smartlist_t *descs)
char *
networkstatus_getinfo_helper_single(const routerstatus_t *rs)
{
- char buf[RS_ENTRY_LEN+1];
- routerstatus_format_entry(buf, sizeof(buf), rs, NULL, NS_CONTROL_PORT);
- return tor_strdup(buf);
+ return routerstatus_format_entry(rs, NULL, NS_CONTROL_PORT, NULL);
}
/** Alloc and return a string describing routerstatuses for the most
@@ -2188,9 +1672,17 @@ networkstatus_dump_bridge_status_to_file(time_t now)
char *status = networkstatus_getinfo_by_purpose("bridge", now);
const or_options_t *options = get_options();
char *fname = NULL;
+ char *thresholds = NULL, *thresholds_and_status = NULL;
+ routerlist_t *rl = router_get_routerlist();
+ dirserv_compute_bridge_flag_thresholds(rl);
+ thresholds = dirserv_get_flag_thresholds_line();
+ tor_asprintf(&thresholds_and_status, "flag-thresholds %s\n%s",
+ thresholds, status);
tor_asprintf(&fname, "%s"PATH_SEPARATOR"networkstatus-bridges",
options->DataDirectory);
- write_str_to_file(fname,status,0);
+ write_str_to_file(fname,thresholds_and_status,0);
+ tor_free(thresholds);
+ tor_free(thresholds_and_status);
tor_free(fname);
tor_free(status);
}
@@ -2253,6 +1745,21 @@ networkstatus_get_param(const networkstatus_t *ns, const char *param_name,
default_val, min_val, max_val);
}
+/**
+ * Retrieve the consensus parameter that governs the
+ * fixed-point precision of our network balancing 'bandwidth-weights'
+ * (which are themselves integer consensus values). We divide them
+ * by this value and ensure they never exceed this value.
+ */
+int
+networkstatus_get_weight_scale_param(networkstatus_t *ns)
+{
+ return networkstatus_get_param(ns, "bwweightscale",
+ BW_WEIGHT_SCALE,
+ BW_MIN_WEIGHT_SCALE,
+ BW_MAX_WEIGHT_SCALE);
+}
+
/** Return the value of a integer bw weight parameter from the networkstatus
* <b>ns</b> whose name is <b>weight_name</b>. If <b>ns</b> is NULL, try
* loading the latest consensus ourselves. Return <b>default_val</b> if no
@@ -2269,7 +1776,7 @@ networkstatus_get_bw_weight(networkstatus_t *ns, const char *weight_name,
if (!ns || !ns->weight_params)
return default_val;
- max = circuit_build_times_get_bw_scale(ns);
+ max = networkstatus_get_weight_scale_param(ns);
param = get_net_param_from_list(ns->weight_params, weight_name,
default_val, -1,
BW_MAX_WEIGHT_SCALE);
@@ -2310,6 +1817,30 @@ networkstatus_parse_flavor_name(const char *flavname)
return -1;
}
+/** Return 0 if this routerstatus is obsolete, too new, isn't
+ * running, or otherwise not a descriptor that we would make any
+ * use of even if we had it. Else return 1. */
+int
+client_would_use_router(const routerstatus_t *rs, time_t now,
+ const or_options_t *options)
+{
+ if (!rs->is_flagged_running && !options->FetchUselessDescriptors) {
+ /* If we had this router descriptor, we wouldn't even bother using it.
+ * But, if we want to have a complete list, fetch it anyway. */
+ return 0;
+ }
+ if (rs->published_on + options->TestingEstimatedDescriptorPropagationTime
+ > now) {
+ /* Most caches probably don't have this descriptor yet. */
+ return 0;
+ }
+ if (rs->published_on + OLD_ROUTER_DESC_MAX_AGE < now) {
+ /* We'd drop it immediately for being too old. */
+ return 0;
+ }
+ return 1;
+}
+
/** If <b>question</b> is a string beginning with "ns/" in a format the
* control interface expects for a GETINFO question, set *<b>answer</b> to a
* newly-allocated string containing networkstatus lines for the appropriate
@@ -2340,8 +1871,11 @@ getinfo_helper_networkstatus(control_connection_t *conn,
return 0;
} else if (!strcmpstart(question, "ns/id/")) {
char d[DIGEST_LEN];
+ const char *q = question + 6;
+ if (*q == '$')
+ ++q;
- if (base16_decode(d, DIGEST_LEN, question+6, strlen(question+6))) {
+ if (base16_decode(d, DIGEST_LEN, q, strlen(q))) {
*errmsg = "Data not decodeable as hex";
return -1;
}
@@ -2365,15 +1899,6 @@ void
networkstatus_free_all(void)
{
int i;
- if (networkstatus_v2_list) {
- SMARTLIST_FOREACH(networkstatus_v2_list, networkstatus_v2_t *, ns,
- networkstatus_v2_free(ns));
- smartlist_free(networkstatus_v2_list);
- networkstatus_v2_list = NULL;
- }
-
- digestmap_free(v2_download_status_map, _tor_free);
- v2_download_status_map = NULL;
networkstatus_vote_free(current_ns_consensus);
networkstatus_vote_free(current_md_consensus);
current_md_consensus = current_ns_consensus = NULL;
@@ -2387,7 +1912,7 @@ networkstatus_free_all(void)
tor_free(waiting->body);
}
- strmap_free(named_server_map, _tor_free);
+ strmap_free(named_server_map, tor_free_);
strmap_free(unnamed_server_map, NULL);
}
diff --git a/src/or/networkstatus.h b/src/or/networkstatus.h
index 0af17512d..be0a86cdd 100644
--- a/src/or/networkstatus.h
+++ b/src/or/networkstatus.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,19 +9,13 @@
* \brief Header file for networkstatus.c.
**/
-#ifndef _TOR_NETWORKSTATUS_H
-#define _TOR_NETWORKSTATUS_H
-
-/** How old do we allow a v2 network-status to get before removing it
- * completely? */
-#define MAX_NETWORKSTATUS_AGE (10*24*60*60)
+#ifndef TOR_NETWORKSTATUS_H
+#define TOR_NETWORKSTATUS_H
void networkstatus_reset_warnings(void);
void networkstatus_reset_download_failures(void);
-int router_reload_v2_networkstatus(void);
int router_reload_consensus_networkstatus(void);
void routerstatus_free(routerstatus_t *rs);
-void networkstatus_v2_free(networkstatus_v2_t *ns);
void networkstatus_vote_free(networkstatus_t *ns);
networkstatus_voter_info_t *networkstatus_get_voter_by_id(
networkstatus_t *vote,
@@ -31,24 +25,16 @@ int networkstatus_check_consensus_signature(networkstatus_t *consensus,
int networkstatus_check_document_signature(const networkstatus_t *consensus,
document_signature_t *sig,
const authority_cert_t *cert);
-char *networkstatus_get_cache_filename(const char *identity_digest);
-int router_set_networkstatus_v2(const char *s, time_t arrived_at,
- v2_networkstatus_source_t source,
- smartlist_t *requested_fingerprints);
-void networkstatus_v2_list_clean(time_t now);
int compare_digest_to_routerstatus_entry(const void *_key,
const void **_member);
-const routerstatus_t *networkstatus_v2_find_entry(networkstatus_v2_t *ns,
- const char *digest);
+int compare_digest_to_vote_routerstatus_entry(const void *_key,
+ const void **_member);
const routerstatus_t *networkstatus_vote_find_entry(networkstatus_t *ns,
const char *digest);
-routerstatus_t *networkstatus_v2_find_mutable_entry(networkstatus_v2_t *ns,
- const char *digest);
routerstatus_t *networkstatus_vote_find_mutable_entry(networkstatus_t *ns,
const char *digest);
int networkstatus_vote_find_entry_idx(networkstatus_t *ns,
const char *digest, int *found_out);
-const smartlist_t *networkstatus_get_v2_list(void);
download_status_t *router_get_dl_status_by_descriptor_digest(const char *d);
const routerstatus_t *router_get_consensus_status_by_id(const char *digest);
routerstatus_t *router_get_mutable_consensus_status_by_id(
@@ -67,11 +53,12 @@ int networkstatus_nickname_is_unnamed(const char *nickname);
void networkstatus_consensus_download_failed(int status_code,
const char *flavname);
void update_consensus_networkstatus_fetch_time(time_t now);
-int should_delay_dir_fetches(const or_options_t *options);
+int should_delay_dir_fetches(const or_options_t *options,const char **msg_out);
void update_networkstatus_downloads(time_t now);
void update_certificate_downloads(time_t now);
int consensus_is_waiting_for_certs(void);
-networkstatus_v2_t *networkstatus_v2_get_by_digest(const char *digest);
+int client_would_use_router(const routerstatus_t *rs, time_t now,
+ const or_options_t *options);
networkstatus_t *networkstatus_get_latest_consensus(void);
networkstatus_t *networkstatus_get_latest_consensus_by_flavor(
consensus_flavor_t f);
@@ -110,6 +97,11 @@ int networkstatus_parse_flavor_name(const char *flavname);
void document_signature_free(document_signature_t *sig);
document_signature_t *document_signature_dup(const document_signature_t *sig);
void networkstatus_free_all(void);
+int networkstatus_get_weight_scale_param(networkstatus_t *ns);
+
+#ifdef NETWORKSTATUS_PRIVATE
+STATIC void vote_routerstatus_free(vote_routerstatus_t *rs);
+#endif
#endif
diff --git a/src/or/nodelist.c b/src/or/nodelist.c
index d17850888..8f870816d 100644
--- a/src/or/nodelist.c
+++ b/src/or/nodelist.c
@@ -1,23 +1,32 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#include "or.h"
+#include "address.h"
#include "config.h"
+#include "control.h"
#include "dirserv.h"
+#include "geoip.h"
+#include "main.h"
#include "microdesc.h"
#include "networkstatus.h"
#include "nodelist.h"
#include "policies.h"
+#include "rendservice.h"
#include "router.h"
#include "routerlist.h"
+#include "routerset.h"
#include <string.h>
static void nodelist_drop_node(node_t *node, int remove_from_ht);
static void node_free(node_t *node);
+static void update_router_have_minimum_dir_info(void);
+static double get_frac_paths_needed_for_circs(const or_options_t *options,
+ const networkstatus_t *ns);
/** A nodelist_t holds a node_t object for every router we're "willing to use
* for something". Specifically, it should hold a node_t for every node that
@@ -34,14 +43,7 @@ typedef struct nodelist_t {
static INLINE unsigned int
node_id_hash(const node_t *node)
{
-#if SIZEOF_INT == 4
- const uint32_t *p = (const uint32_t*)node->identity;
- return p[0] ^ p[1] ^ p[2] ^ p[3] ^ p[4];
-#elif SIZEOF_INT == 8
- const uint64_t *p = (const uint32_t*)node->identity;
- const uint32_t *p32 = (const uint32_t*)node->identity;
- return p[0] ^ p[1] ^ p32[4];
-#endif
+ return (unsigned) siphash24g(node->identity, DIGEST_LEN);
}
static INLINE unsigned int
@@ -83,8 +85,8 @@ node_get_mutable_by_id(const char *identity_digest)
/** Return the node_t whose identity is <b>identity_digest</b>, or NULL
* if no such node exists. */
-const node_t *
-node_get_by_id(const char *identity_digest)
+MOCK_IMPL(const node_t *,
+node_get_by_id,(const char *identity_digest))
{
return node_get_mutable_by_id(identity_digest);
}
@@ -115,19 +117,47 @@ node_get_or_create(const char *identity_digest)
return node;
}
-/** Add <b>ri</b> to the nodelist. */
+/** Called when a node's address changes. */
+static void
+node_addrs_changed(node_t *node)
+{
+ node->last_reachable = node->last_reachable6 = 0;
+ node->country = -1;
+}
+
+/** Add <b>ri</b> to an appropriate node in the nodelist. If we replace an
+ * old routerinfo, and <b>ri_old_out</b> is not NULL, set *<b>ri_old_out</b>
+ * to the previous routerinfo.
+ */
node_t *
-nodelist_add_routerinfo(routerinfo_t *ri)
+nodelist_set_routerinfo(routerinfo_t *ri, routerinfo_t **ri_old_out)
{
node_t *node;
+ const char *id_digest;
+ int had_router = 0;
+ tor_assert(ri);
+
init_nodelist();
- node = node_get_or_create(ri->cache_info.identity_digest);
+ id_digest = ri->cache_info.identity_digest;
+ node = node_get_or_create(id_digest);
+
+ if (node->ri) {
+ if (!routers_have_same_or_addrs(node->ri, ri)) {
+ node_addrs_changed(node);
+ }
+ had_router = 1;
+ if (ri_old_out)
+ *ri_old_out = node->ri;
+ } else {
+ if (ri_old_out)
+ *ri_old_out = NULL;
+ }
node->ri = ri;
if (node->country == -1)
node_set_country(node);
- if (authdir_mode(get_options())) {
+ if (authdir_mode(get_options()) && !had_router) {
const char *discard=NULL;
uint32_t status = dirserv_router_get_status(ri, &discard);
dirserv_set_node_flags_from_authoritative_status(node, status);
@@ -167,7 +197,7 @@ nodelist_add_microdesc(microdesc_t *md)
return node;
}
-/** Tell the nodelist that the current usable consensus to <b>ns</b>.
+/** Tell the nodelist that the current usable consensus is <b>ns</b>.
* This makes the nodelist change all of the routerstatus entries for
* the nodes, drop nodes that no longer have enough info to get used,
* and grab microdescriptors into nodes as appropriate.
@@ -176,7 +206,8 @@ void
nodelist_set_consensus(networkstatus_t *ns)
{
const or_options_t *options = get_options();
- int authdir = authdir_mode_v2(options) || authdir_mode_v3(options);
+ int authdir = authdir_mode_v3(options);
+ int client = !server_mode(options);
init_nodelist();
if (ns->flavor == FLAV_MICRODESC)
@@ -213,6 +244,11 @@ nodelist_set_consensus(networkstatus_t *ns)
node->is_bad_directory = rs->is_bad_directory;
node->is_bad_exit = rs->is_bad_exit;
node->is_hs_dir = rs->is_hs_dir;
+ node->ipv6_preferred = 0;
+ if (client && options->ClientPreferIPv6ORPort == 1 &&
+ (tor_addr_is_null(&rs->ipv6_addr) == 0 ||
+ (node->md && tor_addr_is_null(&node->md->ipv6_addr) == 0)))
+ node->ipv6_preferred = 1;
}
} SMARTLIST_FOREACH_END(rs);
@@ -231,7 +267,8 @@ nodelist_set_consensus(networkstatus_t *ns)
node->is_valid = node->is_running = node->is_hs_dir =
node->is_fast = node->is_stable =
node->is_possible_guard = node->is_exit =
- node->is_bad_exit = node->is_bad_directory = 0;
+ node->is_bad_exit = node->is_bad_directory =
+ node->ipv6_preferred = 0;
}
}
} SMARTLIST_FOREACH_END(node);
@@ -295,6 +332,25 @@ nodelist_drop_node(node_t *node, int remove_from_ht)
node->nodelist_idx = -1;
}
+/** Return a newly allocated smartlist of the nodes that have <b>md</b> as
+ * their microdescriptor. */
+smartlist_t *
+nodelist_find_nodes_with_microdesc(const microdesc_t *md)
+{
+ smartlist_t *result = smartlist_new();
+
+ if (the_nodelist == NULL)
+ return result;
+
+ SMARTLIST_FOREACH_BEGIN(the_nodelist->nodes, node_t *, node) {
+ if (node->md == md) {
+ smartlist_add(result, node);
+ }
+ } SMARTLIST_FOREACH_END(node);
+
+ return result;
+}
+
/** Release storage held by <b>node</b> */
static void
node_free(node_t *node)
@@ -582,7 +638,7 @@ node_is_dir(const node_t *node)
}
/** Return true iff <b>node</b> has either kind of usable descriptor -- that
- * is, a routerdecriptor or a microdescriptor. */
+ * is, a routerdescriptor or a microdescriptor. */
int
node_has_descriptor(const node_t *node)
{
@@ -602,7 +658,7 @@ node_get_purpose(const node_t *node)
/** Compute the verbose ("extended") nickname of <b>node</b> and store it
* into the MAX_VERBOSE_NICKNAME_LEN+1 character buffer at
- * <b>verbose_nickname_out</b> */
+ * <b>verbose_name_out</b> */
void
node_get_verbose_nickname(const node_t *node,
char *verbose_name_out)
@@ -618,6 +674,25 @@ node_get_verbose_nickname(const node_t *node,
strlcpy(verbose_name_out+1+HEX_DIGEST_LEN+1, nickname, MAX_NICKNAME_LEN+1);
}
+/** Compute the verbose ("extended") nickname of node with
+ * given <b>id_digest</b> and store it into the MAX_VERBOSE_NICKNAME_LEN+1
+ * character buffer at <b>verbose_name_out</b>
+ *
+ * If node_get_by_id() returns NULL, base 16 encoding of
+ * <b>id_digest</b> is returned instead. */
+void
+node_get_verbose_nickname_by_id(const char *id_digest,
+ char *verbose_name_out)
+{
+ const node_t *node = node_get_by_id(id_digest);
+ if (!node) {
+ verbose_name_out[0] = '$';
+ base16_encode(verbose_name_out+1, HEX_DIGEST_LEN+1, id_digest, DIGEST_LEN);
+ } else {
+ node_get_verbose_nickname(node, verbose_name_out);
+ }
+}
+
/** Return true iff it seems that <b>node</b> allows circuits to exit
* through it directlry from the client. */
int
@@ -646,6 +721,24 @@ node_exit_policy_rejects_all(const node_t *node)
return 1;
}
+/** Return true iff the exit policy for <b>node</b> is such that we can treat
+ * rejecting an address of type <b>family</b> unexpectedly as a sign of that
+ * node's failure. */
+int
+node_exit_policy_is_exact(const node_t *node, sa_family_t family)
+{
+ if (family == AF_UNSPEC) {
+ return 1; /* Rejecting an address but not telling us what address
+ * is a bad sign. */
+ } else if (family == AF_INET) {
+ return node->ri != NULL;
+ } else if (family == AF_INET6) {
+ return 0;
+ }
+ tor_fragile_assert();
+ return 1;
+}
+
/** Return list of tor_addr_port_t with all OR ports (in the sense IP
* addr + TCP port) for <b>node</b>. Caller must free all elements
* using tor_free() and free the list using smartlist_free().
@@ -682,19 +775,6 @@ node_get_all_orports(const node_t *node)
return sl;
}
-/** Copy the primary (IPv4) OR port (IP address and TCP port) for
- * <b>node</b> into *<b>ap_out</b>. */
-void
-node_get_prim_orport(const node_t *node, tor_addr_port_t *ap_out)
-{
- if (node->ri) {
- router_get_prim_orport(node->ri, ap_out);
- } else if (node->rs) {
- tor_addr_from_ipv4h(&ap_out->addr, node->rs->addr);
- ap_out->port = node->rs->or_port;
- }
-}
-
/** Wrapper around node_get_prim_orport for backward
compatibility. */
void
@@ -718,43 +798,13 @@ node_get_prim_addr_ipv4h(const node_t *node)
return 0;
}
-/** Copy the preferred OR port (IP address and TCP port) for
- * <b>node</b> into <b>ap_out</b>. */
-void
-node_get_pref_orport(const node_t *node, tor_addr_port_t *ap_out)
-{
- if (node->ri) {
- router_get_pref_orport(node->ri, ap_out);
- } else if (node->rs) {
- /* No IPv6 in routerstatus_t yet. XXXprop186 ok for private
- bridges but needs fixing */
- tor_addr_from_ipv4h(&ap_out->addr, node->rs->addr);
- ap_out->port = node->rs->or_port;
- }
-}
-
-/** Copy the preferred IPv6 OR port (address and TCP port) for
- * <b>node</b> into *<b>ap_out</b>. */
-void
-node_get_pref_ipv6_orport(const node_t *node, tor_addr_port_t *ap_out)
-{
- if (node->ri) {
- router_get_pref_ipv6_orport(node->ri, ap_out);
- } else if (node->rs) {
- /* No IPv6 in routerstatus_t yet. XXXprop186 ok for private
- bridges but needs fixing */
- tor_addr_make_unspec(&ap_out->addr);
- ap_out->port = 0;
- }
-}
-
/** Copy a string representation of an IP address for <b>node</b> into
* the <b>len</b>-byte buffer at <b>buf</b>. */
void
node_get_address_string(const node_t *node, char *buf, size_t len)
{
if (node->ri) {
- strlcpy(buf, node->ri->address, len);
+ strlcpy(buf, fmt_addr32(node->ri->addr), len);
} else if (node->rs) {
tor_addr_t addr;
tor_addr_from_ipv4h(&addr, node->rs->addr);
@@ -818,3 +868,704 @@ node_get_declared_family(const node_t *node)
return NULL;
}
+/** Return 1 if we prefer the IPv6 address and OR TCP port of
+ * <b>node</b>, else 0.
+ *
+ * We prefer the IPv6 address if the router has an IPv6 address and
+ * i) the node_t says that it prefers IPv6
+ * or
+ * ii) the router has no IPv4 address. */
+int
+node_ipv6_preferred(const node_t *node)
+{
+ tor_addr_port_t ipv4_addr;
+ node_assert_ok(node);
+
+ if (node->ipv6_preferred || node_get_prim_orport(node, &ipv4_addr)) {
+ if (node->ri)
+ return !tor_addr_is_null(&node->ri->ipv6_addr);
+ if (node->md)
+ return !tor_addr_is_null(&node->md->ipv6_addr);
+ if (node->rs)
+ return !tor_addr_is_null(&node->rs->ipv6_addr);
+ }
+ return 0;
+}
+
+/** Copy the primary (IPv4) OR port (IP address and TCP port) for
+ * <b>node</b> into *<b>ap_out</b>. Return 0 if a valid address and
+ * port was copied, else return non-zero.*/
+int
+node_get_prim_orport(const node_t *node, tor_addr_port_t *ap_out)
+{
+ node_assert_ok(node);
+ tor_assert(ap_out);
+
+ if (node->ri) {
+ if (node->ri->addr == 0 || node->ri->or_port == 0)
+ return -1;
+ tor_addr_from_ipv4h(&ap_out->addr, node->ri->addr);
+ ap_out->port = node->ri->or_port;
+ return 0;
+ }
+ if (node->rs) {
+ if (node->rs->addr == 0 || node->rs->or_port == 0)
+ return -1;
+ tor_addr_from_ipv4h(&ap_out->addr, node->rs->addr);
+ ap_out->port = node->rs->or_port;
+ return 0;
+ }
+ return -1;
+}
+
+/** Copy the preferred OR port (IP address and TCP port) for
+ * <b>node</b> into *<b>ap_out</b>. */
+void
+node_get_pref_orport(const node_t *node, tor_addr_port_t *ap_out)
+{
+ const or_options_t *options = get_options();
+ tor_assert(ap_out);
+
+ /* Cheap implementation of config option ClientUseIPv6 -- simply
+ don't prefer IPv6 when ClientUseIPv6 is not set and we're not a
+ client running with bridges. See #4455 for more on this subject.
+
+ Note that this filter is too strict since we're hindering not
+ only clients! Erring on the safe side shouldn't be a problem
+ though. XXX move this check to where outgoing connections are
+ made? -LN */
+ if ((options->ClientUseIPv6 || options->UseBridges) &&
+ node_ipv6_preferred(node)) {
+ node_get_pref_ipv6_orport(node, ap_out);
+ } else {
+ node_get_prim_orport(node, ap_out);
+ }
+}
+
+/** Copy the preferred IPv6 OR port (IP address and TCP port) for
+ * <b>node</b> into *<b>ap_out</b>. */
+void
+node_get_pref_ipv6_orport(const node_t *node, tor_addr_port_t *ap_out)
+{
+ node_assert_ok(node);
+ tor_assert(ap_out);
+
+ /* We prefer the microdesc over a potential routerstatus here. They
+ are not being synchronised atm so there might be a chance that
+ they differ at some point, f.ex. when flipping
+ UseMicrodescriptors? -LN */
+
+ if (node->ri) {
+ tor_addr_copy(&ap_out->addr, &node->ri->ipv6_addr);
+ ap_out->port = node->ri->ipv6_orport;
+ } else if (node->md) {
+ tor_addr_copy(&ap_out->addr, &node->md->ipv6_addr);
+ ap_out->port = node->md->ipv6_orport;
+ } else if (node->rs) {
+ tor_addr_copy(&ap_out->addr, &node->rs->ipv6_addr);
+ ap_out->port = node->rs->ipv6_orport;
+ }
+}
+
+/** Return true iff <b>node</b> has a curve25519 onion key. */
+int
+node_has_curve25519_onion_key(const node_t *node)
+{
+ if (node->ri)
+ return node->ri->onion_curve25519_pkey != NULL;
+ else if (node->md)
+ return node->md->onion_curve25519_pkey != NULL;
+ else
+ return 0;
+}
+
+/** Refresh the country code of <b>ri</b>. This function MUST be called on
+ * each router when the GeoIP database is reloaded, and on all new routers. */
+void
+node_set_country(node_t *node)
+{
+ tor_addr_t addr = TOR_ADDR_NULL;
+
+ /* XXXXipv6 */
+ if (node->rs)
+ tor_addr_from_ipv4h(&addr, node->rs->addr);
+ else if (node->ri)
+ tor_addr_from_ipv4h(&addr, node->ri->addr);
+
+ node->country = geoip_get_country_by_addr(&addr);
+}
+
+/** Set the country code of all routers in the routerlist. */
+void
+nodelist_refresh_countries(void)
+{
+ smartlist_t *nodes = nodelist_get_list();
+ SMARTLIST_FOREACH(nodes, node_t *, node,
+ node_set_country(node));
+}
+
+/** Return true iff router1 and router2 have similar enough network addresses
+ * that we should treat them as being in the same family */
+static INLINE int
+addrs_in_same_network_family(const tor_addr_t *a1,
+ const tor_addr_t *a2)
+{
+ return 0 == tor_addr_compare_masked(a1, a2, 16, CMP_SEMANTIC);
+}
+
+/** Return true if <b>node</b>'s nickname matches <b>nickname</b>
+ * (case-insensitive), or if <b>node's</b> identity key digest
+ * matches a hexadecimal value stored in <b>nickname</b>. Return
+ * false otherwise. */
+static int
+node_nickname_matches(const node_t *node, const char *nickname)
+{
+ const char *n = node_get_nickname(node);
+ if (n && nickname[0]!='$' && !strcasecmp(n, nickname))
+ return 1;
+ return hex_digest_nickname_matches(nickname,
+ node->identity,
+ n,
+ node_is_named(node));
+}
+
+/** Return true iff <b>node</b> is named by some nickname in <b>lst</b>. */
+static INLINE int
+node_in_nickname_smartlist(const smartlist_t *lst, const node_t *node)
+{
+ if (!lst) return 0;
+ SMARTLIST_FOREACH(lst, const char *, name, {
+ if (node_nickname_matches(node, name))
+ return 1;
+ });
+ return 0;
+}
+
+/** Return true iff r1 and r2 are in the same family, but not the same
+ * router. */
+int
+nodes_in_same_family(const node_t *node1, const node_t *node2)
+{
+ const or_options_t *options = get_options();
+
+ /* Are they in the same family because of their addresses? */
+ if (options->EnforceDistinctSubnets) {
+ tor_addr_t a1, a2;
+ node_get_addr(node1, &a1);
+ node_get_addr(node2, &a2);
+ if (addrs_in_same_network_family(&a1, &a2))
+ return 1;
+ }
+
+ /* Are they in the same family because the agree they are? */
+ {
+ const smartlist_t *f1, *f2;
+ f1 = node_get_declared_family(node1);
+ f2 = node_get_declared_family(node2);
+ if (f1 && f2 &&
+ node_in_nickname_smartlist(f1, node2) &&
+ node_in_nickname_smartlist(f2, node1))
+ return 1;
+ }
+
+ /* Are they in the same option because the user says they are? */
+ if (options->NodeFamilySets) {
+ SMARTLIST_FOREACH(options->NodeFamilySets, const routerset_t *, rs, {
+ if (routerset_contains_node(rs, node1) &&
+ routerset_contains_node(rs, node2))
+ return 1;
+ });
+ }
+
+ return 0;
+}
+
+/**
+ * Add all the family of <b>node</b>, including <b>node</b> itself, to
+ * the smartlist <b>sl</b>.
+ *
+ * This is used to make sure we don't pick siblings in a single path, or
+ * pick more than one relay from a family for our entry guard list.
+ * Note that a node may be added to <b>sl</b> more than once if it is
+ * part of <b>node</b>'s family for more than one reason.
+ */
+void
+nodelist_add_node_and_family(smartlist_t *sl, const node_t *node)
+{
+ const smartlist_t *all_nodes = nodelist_get_list();
+ const smartlist_t *declared_family;
+ const or_options_t *options = get_options();
+
+ tor_assert(node);
+
+ declared_family = node_get_declared_family(node);
+
+ /* Let's make sure that we have the node itself, if it's a real node. */
+ {
+ const node_t *real_node = node_get_by_id(node->identity);
+ if (real_node)
+ smartlist_add(sl, (node_t*)real_node);
+ }
+
+ /* First, add any nodes with similar network addresses. */
+ if (options->EnforceDistinctSubnets) {
+ tor_addr_t node_addr;
+ node_get_addr(node, &node_addr);
+
+ SMARTLIST_FOREACH_BEGIN(all_nodes, const node_t *, node2) {
+ tor_addr_t a;
+ node_get_addr(node2, &a);
+ if (addrs_in_same_network_family(&a, &node_addr))
+ smartlist_add(sl, (void*)node2);
+ } SMARTLIST_FOREACH_END(node2);
+ }
+
+ /* Now, add all nodes in the declared_family of this node, if they
+ * also declare this node to be in their family. */
+ if (declared_family) {
+ /* Add every r such that router declares familyness with node, and node
+ * declares familyhood with router. */
+ SMARTLIST_FOREACH_BEGIN(declared_family, const char *, name) {
+ const node_t *node2;
+ const smartlist_t *family2;
+ if (!(node2 = node_get_by_nickname(name, 0)))
+ continue;
+ if (!(family2 = node_get_declared_family(node2)))
+ continue;
+ SMARTLIST_FOREACH_BEGIN(family2, const char *, name2) {
+ if (node_nickname_matches(node, name2)) {
+ smartlist_add(sl, (void*)node2);
+ break;
+ }
+ } SMARTLIST_FOREACH_END(name2);
+ } SMARTLIST_FOREACH_END(name);
+ }
+
+ /* If the user declared any families locally, honor those too. */
+ if (options->NodeFamilySets) {
+ SMARTLIST_FOREACH(options->NodeFamilySets, const routerset_t *, rs, {
+ if (routerset_contains_node(rs, node)) {
+ routerset_get_all_nodes(sl, rs, NULL, 0);
+ }
+ });
+ }
+}
+
+/** Find a router that's up, that has this IP address, and
+ * that allows exit to this address:port, or return NULL if there
+ * isn't a good one.
+ * Don't exit enclave to excluded relays -- it wouldn't actually
+ * hurt anything, but this way there are fewer confused users.
+ */
+const node_t *
+router_find_exact_exit_enclave(const char *address, uint16_t port)
+{/*XXXX MOVE*/
+ uint32_t addr;
+ struct in_addr in;
+ tor_addr_t a;
+ const or_options_t *options = get_options();
+
+ if (!tor_inet_aton(address, &in))
+ return NULL; /* it's not an IP already */
+ addr = ntohl(in.s_addr);
+
+ tor_addr_from_ipv4h(&a, addr);
+
+ SMARTLIST_FOREACH(nodelist_get_list(), const node_t *, node, {
+ if (node_get_addr_ipv4h(node) == addr &&
+ node->is_running &&
+ compare_tor_addr_to_node_policy(&a, port, node) ==
+ ADDR_POLICY_ACCEPTED &&
+ !routerset_contains_node(options->ExcludeExitNodesUnion_, node))
+ return node;
+ });
+ return NULL;
+}
+
+/** Return 1 if <b>router</b> is not suitable for these parameters, else 0.
+ * If <b>need_uptime</b> is non-zero, we require a minimum uptime.
+ * If <b>need_capacity</b> is non-zero, we require a minimum advertised
+ * bandwidth.
+ * If <b>need_guard</b>, we require that the router is a possible entry guard.
+ */
+int
+node_is_unreliable(const node_t *node, int need_uptime,
+ int need_capacity, int need_guard)
+{
+ if (need_uptime && !node->is_stable)
+ return 1;
+ if (need_capacity && !node->is_fast)
+ return 1;
+ if (need_guard && !node->is_possible_guard)
+ return 1;
+ return 0;
+}
+
+/** Return 1 if all running sufficiently-stable routers we can use will reject
+ * addr:port. Return 0 if any might accept it. */
+int
+router_exit_policy_all_nodes_reject(const tor_addr_t *addr, uint16_t port,
+ int need_uptime)
+{
+ addr_policy_result_t r;
+
+ SMARTLIST_FOREACH_BEGIN(nodelist_get_list(), const node_t *, node) {
+ if (node->is_running &&
+ !node_is_unreliable(node, need_uptime, 0, 0)) {
+
+ r = compare_tor_addr_to_node_policy(addr, port, node);
+
+ if (r != ADDR_POLICY_REJECTED && r != ADDR_POLICY_PROBABLY_REJECTED)
+ return 0; /* this one could be ok. good enough. */
+ }
+ } SMARTLIST_FOREACH_END(node);
+ return 1; /* all will reject. */
+}
+
+/** Mark the router with ID <b>digest</b> as running or non-running
+ * in our routerlist. */
+void
+router_set_status(const char *digest, int up)
+{
+ node_t *node;
+ tor_assert(digest);
+
+ SMARTLIST_FOREACH(router_get_fallback_dir_servers(),
+ dir_server_t *, d,
+ if (tor_memeq(d->digest, digest, DIGEST_LEN))
+ d->is_running = up);
+
+ SMARTLIST_FOREACH(router_get_trusted_dir_servers(),
+ dir_server_t *, d,
+ if (tor_memeq(d->digest, digest, DIGEST_LEN))
+ d->is_running = up);
+
+ node = node_get_mutable_by_id(digest);
+ if (node) {
+#if 0
+ log_debug(LD_DIR,"Marking router %s as %s.",
+ node_describe(node), up ? "up" : "down");
+#endif
+ if (!up && node_is_me(node) && !net_is_disabled())
+ log_warn(LD_NET, "We just marked ourself as down. Are your external "
+ "addresses reachable?");
+
+ if (bool_neq(node->is_running, up))
+ router_dir_info_changed();
+
+ node->is_running = up;
+ }
+}
+
+/** True iff, the last time we checked whether we had enough directory info
+ * to build circuits, the answer was "yes". */
+static int have_min_dir_info = 0;
+/** True iff enough has changed since the last time we checked whether we had
+ * enough directory info to build circuits that our old answer can no longer
+ * be trusted. */
+static int need_to_update_have_min_dir_info = 1;
+/** String describing what we're missing before we have enough directory
+ * info. */
+static char dir_info_status[256] = "";
+
+/** Return true iff we have enough networkstatus and router information to
+ * start building circuits. Right now, this means "more than half the
+ * networkstatus documents, and at least 1/4 of expected routers." */
+//XXX should consider whether we have enough exiting nodes here.
+int
+router_have_minimum_dir_info(void)
+{
+ if (PREDICT_UNLIKELY(need_to_update_have_min_dir_info)) {
+ update_router_have_minimum_dir_info();
+ need_to_update_have_min_dir_info = 0;
+ }
+ return have_min_dir_info;
+}
+
+/** Called when our internal view of the directory has changed. This can be
+ * when the authorities change, networkstatuses change, the list of routerdescs
+ * changes, or number of running routers changes.
+ */
+void
+router_dir_info_changed(void)
+{
+ need_to_update_have_min_dir_info = 1;
+ rend_hsdir_routers_changed();
+}
+
+/** Return a string describing what we're missing before we have enough
+ * directory info. */
+const char *
+get_dir_info_status_string(void)
+{
+ return dir_info_status;
+}
+
+/** Iterate over the servers listed in <b>consensus</b>, and count how many of
+ * them seem like ones we'd use, and how many of <em>those</em> we have
+ * descriptors for. Store the former in *<b>num_usable</b> and the latter in
+ * *<b>num_present</b>. If <b>in_set</b> is non-NULL, only consider those
+ * routers in <b>in_set</b>. If <b>exit_only</b> is true, only consider nodes
+ * with the Exit flag. If *descs_out is present, add a node_t for each
+ * usable descriptor to it.
+ */
+static void
+count_usable_descriptors(int *num_present, int *num_usable,
+ smartlist_t *descs_out,
+ const networkstatus_t *consensus,
+ const or_options_t *options, time_t now,
+ routerset_t *in_set, int exit_only)
+{
+ const int md = (consensus->flavor == FLAV_MICRODESC);
+ *num_present = 0, *num_usable=0;
+
+ SMARTLIST_FOREACH_BEGIN(consensus->routerstatus_list, routerstatus_t *, rs)
+ {
+ const node_t *node = node_get_by_id(rs->identity_digest);
+ if (!node)
+ continue; /* This would be a bug: every entry in the consensus is
+ * supposed to have a node. */
+ if (exit_only && ! rs->is_exit)
+ continue;
+ if (in_set && ! routerset_contains_routerstatus(in_set, rs, -1))
+ continue;
+ if (client_would_use_router(rs, now, options)) {
+ const char * const digest = rs->descriptor_digest;
+ int present;
+ ++*num_usable; /* the consensus says we want it. */
+ if (md)
+ present = NULL != microdesc_cache_lookup_by_digest256(NULL, digest);
+ else
+ present = NULL != router_get_by_descriptor_digest(digest);
+ if (present) {
+ /* we have the descriptor listed in the consensus. */
+ ++*num_present;
+ }
+ if (descs_out)
+ smartlist_add(descs_out, (node_t*)node);
+ }
+ }
+ SMARTLIST_FOREACH_END(rs);
+
+ log_debug(LD_DIR, "%d usable, %d present (%s%s).",
+ *num_usable, *num_present,
+ md ? "microdesc" : "desc", exit_only ? " exits" : "s");
+}
+
+/** Return an estimate of which fraction of usable paths through the Tor
+ * network we have available for use. */
+static double
+compute_frac_paths_available(const networkstatus_t *consensus,
+ const or_options_t *options, time_t now,
+ int *num_present_out, int *num_usable_out,
+ char **status_out)
+{
+ smartlist_t *guards = smartlist_new();
+ smartlist_t *mid = smartlist_new();
+ smartlist_t *exits = smartlist_new();
+ smartlist_t *myexits= smartlist_new();
+ smartlist_t *myexits_unflagged = smartlist_new();
+ double f_guard, f_mid, f_exit, f_myexit, f_myexit_unflagged;
+ int np, nu; /* Ignored */
+ const int authdir = authdir_mode_v3(options);
+
+ count_usable_descriptors(num_present_out, num_usable_out,
+ mid, consensus, options, now, NULL, 0);
+ if (options->EntryNodes) {
+ count_usable_descriptors(&np, &nu, guards, consensus, options, now,
+ options->EntryNodes, 0);
+ } else {
+ SMARTLIST_FOREACH(mid, const node_t *, node, {
+ if (authdir) {
+ if (node->rs && node->rs->is_possible_guard)
+ smartlist_add(guards, (node_t*)node);
+ } else {
+ if (node->is_possible_guard)
+ smartlist_add(guards, (node_t*)node);
+ }
+ });
+ }
+
+ /* All nodes with exit flag */
+ count_usable_descriptors(&np, &nu, exits, consensus, options, now,
+ NULL, 1);
+ /* All nodes with exit flag in ExitNodes option */
+ count_usable_descriptors(&np, &nu, myexits, consensus, options, now,
+ options->ExitNodes, 1);
+ /* Now compute the nodes in the ExitNodes option where which we don't know
+ * what their exit policy is, or we know it permits something. */
+ count_usable_descriptors(&np, &nu, myexits_unflagged,
+ consensus, options, now,
+ options->ExitNodes, 0);
+ SMARTLIST_FOREACH_BEGIN(myexits_unflagged, const node_t *, node) {
+ if (node_has_descriptor(node) && node_exit_policy_rejects_all(node))
+ SMARTLIST_DEL_CURRENT(myexits_unflagged, node);
+ } SMARTLIST_FOREACH_END(node);
+
+ f_guard = frac_nodes_with_descriptors(guards, WEIGHT_FOR_GUARD);
+ f_mid = frac_nodes_with_descriptors(mid, WEIGHT_FOR_MID);
+ f_exit = frac_nodes_with_descriptors(exits, WEIGHT_FOR_EXIT);
+ f_myexit= frac_nodes_with_descriptors(myexits,WEIGHT_FOR_EXIT);
+ f_myexit_unflagged=
+ frac_nodes_with_descriptors(myexits_unflagged,WEIGHT_FOR_EXIT);
+
+ /* If our ExitNodes list has eliminated every possible Exit node, and there
+ * were some possible Exit nodes, then instead consider nodes that permit
+ * exiting to some ports. */
+ if (smartlist_len(myexits) == 0 &&
+ smartlist_len(myexits_unflagged)) {
+ f_myexit = f_myexit_unflagged;
+ }
+
+ smartlist_free(guards);
+ smartlist_free(mid);
+ smartlist_free(exits);
+ smartlist_free(myexits);
+ smartlist_free(myexits_unflagged);
+
+ /* This is a tricky point here: we don't want to make it easy for a
+ * directory to trickle exits to us until it learns which exits we have
+ * configured, so require that we have a threshold both of total exits
+ * and usable exits. */
+ if (f_myexit < f_exit)
+ f_exit = f_myexit;
+
+ if (status_out)
+ tor_asprintf(status_out,
+ "%d%% of guards bw, "
+ "%d%% of midpoint bw, and "
+ "%d%% of exit bw",
+ (int)(f_guard*100),
+ (int)(f_mid*100),
+ (int)(f_exit*100));
+
+ return f_guard * f_mid * f_exit;
+}
+
+/** We just fetched a new set of descriptors. Compute how far through
+ * the "loading descriptors" bootstrapping phase we are, so we can inform
+ * the controller of our progress. */
+int
+count_loading_descriptors_progress(void)
+{
+ int num_present = 0, num_usable=0;
+ time_t now = time(NULL);
+ const or_options_t *options = get_options();
+ const networkstatus_t *consensus =
+ networkstatus_get_reasonably_live_consensus(now,usable_consensus_flavor());
+ double paths, fraction;
+
+ if (!consensus)
+ return 0; /* can't count descriptors if we have no list of them */
+
+ paths = compute_frac_paths_available(consensus, options, now,
+ &num_present, &num_usable,
+ NULL);
+
+ fraction = paths / get_frac_paths_needed_for_circs(options,consensus);
+ if (fraction > 1.0)
+ return 0; /* it's not the number of descriptors holding us back */
+ return BOOTSTRAP_STATUS_LOADING_DESCRIPTORS + (int)
+ (fraction*(BOOTSTRAP_STATUS_CONN_OR-1 -
+ BOOTSTRAP_STATUS_LOADING_DESCRIPTORS));
+}
+
+/** Return the fraction of paths needed before we're willing to build
+ * circuits, as configured in <b>options</b>, or in the consensus <b>ns</b>. */
+static double
+get_frac_paths_needed_for_circs(const or_options_t *options,
+ const networkstatus_t *ns)
+{
+#define DFLT_PCT_USABLE_NEEDED 60
+ if (options->PathsNeededToBuildCircuits >= 0.0) {
+ return options->PathsNeededToBuildCircuits;
+ } else {
+ return networkstatus_get_param(ns, "min_paths_for_circs_pct",
+ DFLT_PCT_USABLE_NEEDED,
+ 25, 95)/100.0;
+ }
+}
+
+/** Change the value of have_min_dir_info, setting it true iff we have enough
+ * network and router information to build circuits. Clear the value of
+ * need_to_update_have_min_dir_info. */
+static void
+update_router_have_minimum_dir_info(void)
+{
+ time_t now = time(NULL);
+ int res;
+ const or_options_t *options = get_options();
+ const networkstatus_t *consensus =
+ networkstatus_get_reasonably_live_consensus(now,usable_consensus_flavor());
+ int using_md;
+ const char *delay_fetches_msg = NULL;
+
+ if (!consensus) {
+ if (!networkstatus_get_latest_consensus())
+ strlcpy(dir_info_status, "We have no usable consensus.",
+ sizeof(dir_info_status));
+ else
+ strlcpy(dir_info_status, "We have no recent usable consensus.",
+ sizeof(dir_info_status));
+ res = 0;
+ goto done;
+ }
+
+ if (should_delay_dir_fetches(get_options(), &delay_fetches_msg)) {
+ log_notice(LD_DIR, "Delaying directory fetches: %s", delay_fetches_msg);
+ strlcpy(dir_info_status, delay_fetches_msg, sizeof(dir_info_status));
+ res = 0;
+ goto done;
+ }
+
+ using_md = consensus->flavor == FLAV_MICRODESC;
+
+ {
+ char *status = NULL;
+ int num_present=0, num_usable=0;
+ double paths = compute_frac_paths_available(consensus, options, now,
+ &num_present, &num_usable,
+ &status);
+
+ if (paths < get_frac_paths_needed_for_circs(options,consensus)) {
+ tor_snprintf(dir_info_status, sizeof(dir_info_status),
+ "We need more %sdescriptors: we have %d/%d, and "
+ "can only build %d%% of likely paths. (We have %s.)",
+ using_md?"micro":"", num_present, num_usable,
+ (int)(paths*100), status);
+ /* log_notice(LD_NET, "%s", dir_info_status); */
+ tor_free(status);
+ res = 0;
+ control_event_bootstrap(BOOTSTRAP_STATUS_REQUESTING_DESCRIPTORS, 0);
+ goto done;
+ }
+
+ tor_free(status);
+ res = 1;
+ }
+
+ done:
+ if (res && !have_min_dir_info) {
+ log_notice(LD_DIR,
+ "We now have enough directory information to build circuits.");
+ control_event_client_status(LOG_NOTICE, "ENOUGH_DIR_INFO");
+ control_event_bootstrap(BOOTSTRAP_STATUS_CONN_OR, 0);
+ }
+ if (!res && have_min_dir_info) {
+ int quiet = directory_too_idle_to_fetch_descriptors(options, now);
+ tor_log(quiet ? LOG_INFO : LOG_NOTICE, LD_DIR,
+ "Our directory information is no longer up-to-date "
+ "enough to build circuits: %s", dir_info_status);
+
+ /* a) make us log when we next complete a circuit, so we know when Tor
+ * is back up and usable, and b) disable some activities that Tor
+ * should only do while circuits are working, like reachability tests
+ * and fetching bridge descriptors only over circuits. */
+ can_complete_circuit = 0;
+
+ control_event_client_status(LOG_NOTICE, "NOT_ENOUGH_DIR_INFO");
+ }
+ have_min_dir_info = res;
+ need_to_update_have_min_dir_info = 0;
+}
+
diff --git a/src/or/nodelist.h b/src/or/nodelist.h
index 1e9da88d4..8e719e012 100644
--- a/src/or/nodelist.h
+++ b/src/or/nodelist.h
@@ -1,27 +1,32 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
- * \file microdesc.h
- * \brief Header file for microdesc.c.
+ * \file nodelist.h
+ * \brief Header file for nodelist.c.
**/
-#ifndef _TOR_NODELIST_H
-#define _TOR_NODELIST_H
+#ifndef TOR_NODELIST_H
+#define TOR_NODELIST_H
+
+#define node_assert_ok(n) STMT_BEGIN { \
+ tor_assert((n)->ri || (n)->rs); \
+ } STMT_END
node_t *node_get_mutable_by_id(const char *identity_digest);
-const node_t *node_get_by_id(const char *identity_digest);
+MOCK_DECL(const node_t *, node_get_by_id, (const char *identity_digest));
const node_t *node_get_by_hex_id(const char *identity_digest);
-node_t *nodelist_add_routerinfo(routerinfo_t *ri);
+node_t *nodelist_set_routerinfo(routerinfo_t *ri, routerinfo_t **ri_old_out);
node_t *nodelist_add_microdesc(microdesc_t *md);
void nodelist_set_consensus(networkstatus_t *ns);
void nodelist_remove_microdesc(const char *identity_digest, microdesc_t *md);
void nodelist_remove_routerinfo(routerinfo_t *ri);
void nodelist_purge(void);
+smartlist_t *nodelist_find_nodes_with_microdesc(const microdesc_t *md);
void nodelist_free_all(void);
void nodelist_assert_ok(void);
@@ -29,6 +34,8 @@ void nodelist_assert_ok(void);
const node_t *node_get_by_nickname(const char *nickname, int warn_if_unnamed);
void node_get_verbose_nickname(const node_t *node,
char *verbose_name_out);
+void node_get_verbose_nickname_by_id(const char *id_digest,
+ char *verbose_name_out);
int node_is_named(const node_t *node);
int node_is_dir(const node_t *node);
int node_has_descriptor(const node_t *node);
@@ -37,19 +44,21 @@ int node_get_purpose(const node_t *node);
(node_get_purpose((node)) == ROUTER_PURPOSE_BRIDGE)
int node_is_me(const node_t *node);
int node_exit_policy_rejects_all(const node_t *node);
+int node_exit_policy_is_exact(const node_t *node, sa_family_t family);
smartlist_t *node_get_all_orports(const node_t *node);
-void node_get_prim_orport(const node_t *node, tor_addr_port_t *addr_port_out);
-void node_get_pref_orport(const node_t *node, tor_addr_port_t *addr_port_out);
-void node_get_pref_ipv6_orport(const node_t *node,
- tor_addr_port_t *addr_port_out);
-uint32_t node_get_prim_addr_ipv4h(const node_t *node);
int node_allows_single_hop_exits(const node_t *node);
const char *node_get_nickname(const node_t *node);
const char *node_get_platform(const node_t *node);
+uint32_t node_get_prim_addr_ipv4h(const node_t *node);
void node_get_address_string(const node_t *node, char *cp, size_t len);
long node_get_declared_uptime(const node_t *node);
time_t node_get_published_on(const node_t *node);
const smartlist_t *node_get_declared_family(const node_t *node);
+int node_ipv6_preferred(const node_t *node);
+int node_get_prim_orport(const node_t *node, tor_addr_port_t *ap_out);
+void node_get_pref_orport(const node_t *node, tor_addr_port_t *ap_out);
+void node_get_pref_ipv6_orport(const node_t *node, tor_addr_port_t *ap_out);
+int node_has_curve25519_onion_key(const node_t *node);
smartlist_t *nodelist_get_list(void);
@@ -57,11 +66,22 @@ smartlist_t *nodelist_get_list(void);
void node_get_addr(const node_t *node, tor_addr_t *addr_out);
#define node_get_addr_ipv4h(n) node_get_prim_addr_ipv4h((n))
-/* XXXX These need to move out of routerlist.c */
void nodelist_refresh_countries(void);
void node_set_country(node_t *node);
void nodelist_add_node_and_family(smartlist_t *nodes, const node_t *node);
int nodes_in_same_family(const node_t *node1, const node_t *node2);
+const node_t *router_find_exact_exit_enclave(const char *address,
+ uint16_t port);
+int node_is_unreliable(const node_t *router, int need_uptime,
+ int need_capacity, int need_guard);
+int router_exit_policy_all_nodes_reject(const tor_addr_t *addr, uint16_t port,
+ int need_uptime);
+void router_set_status(const char *digest, int up);
+int router_have_minimum_dir_info(void);
+void router_dir_info_changed(void);
+const char *get_dir_info_status_string(void);
+int count_loading_descriptors_progress(void);
+
#endif
diff --git a/src/or/ntmain.c b/src/or/ntmain.c
index d001f7be1..e84831404 100644
--- a/src/or/ntmain.c
+++ b/src/or/ntmain.c
@@ -1,9 +1,8 @@
/* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
-#define MAIN_PRIVATE
#include "or.h"
#include "config.h"
#include "main.h"
@@ -315,6 +314,7 @@ nt_service_main(void)
case CMD_LIST_FINGERPRINT:
case CMD_HASH_PASSWORD:
case CMD_VERIFY_CONFIG:
+ case CMD_DUMP_CONFIG:
log_err(LD_CONFIG, "Unsupported command (--list-fingerprint, "
"--hash-password, or --verify-config) in NT service.");
break;
diff --git a/src/or/ntmain.h b/src/or/ntmain.h
index 07fdcf466..d3027936c 100644
--- a/src/or/ntmain.h
+++ b/src/or/ntmain.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,8 +9,8 @@
* \brief Header file for ntmain.c.
**/
-#ifndef _TOR_NTMAIN_H
-#define _TOR_NTMAIN_H
+#ifndef TOR_NTMAIN_H
+#define TOR_NTMAIN_H
#ifdef _WIN32
#if !defined (WINCE)
diff --git a/src/or/onion.c b/src/or/onion.c
index f8c4d72b5..ae39f451f 100644
--- a/src/or/onion.c
+++ b/src/or/onion.c
@@ -1,74 +1,157 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
* \file onion.c
- * \brief Functions to queue create cells, and handle onionskin
- * parsing and creation.
+ * \brief Functions to queue create cells, wrap the various onionskin types,
+ * and parse and create the CREATE cell and its allies.
**/
#include "or.h"
#include "circuitlist.h"
#include "config.h"
+#include "cpuworker.h"
+#include "networkstatus.h"
#include "onion.h"
+#include "onion_fast.h"
+#include "onion_ntor.h"
+#include "onion_tap.h"
+#include "relay.h"
#include "rephist.h"
+#include "router.h"
/** Type for a linked list of circuits that are waiting for a free CPU worker
* to process a waiting onion handshake. */
typedef struct onion_queue_t {
+ TOR_TAILQ_ENTRY(onion_queue_t) next;
or_circuit_t *circ;
- char *onionskin;
+ uint16_t handshake_type;
+ create_cell_t *onionskin;
time_t when_added;
- struct onion_queue_t *next;
} onion_queue_t;
/** 5 seconds on the onion queue til we just send back a destroy */
#define ONIONQUEUE_WAIT_CUTOFF 5
-/** First and last elements in the linked list of circuits waiting for CPU
- * workers, or NULL if the list is empty.
- * @{ */
-static onion_queue_t *ol_list=NULL;
-static onion_queue_t *ol_tail=NULL;
-/**@}*/
-/** Length of ol_list */
-static int ol_length=0;
+/** Array of queues of circuits waiting for CPU workers. An element is NULL
+ * if that queue is empty.*/
+TOR_TAILQ_HEAD(onion_queue_head_t, onion_queue_t)
+ ol_list[MAX_ONION_HANDSHAKE_TYPE+1] = {
+ TOR_TAILQ_HEAD_INITIALIZER(ol_list[0]), /* tap */
+ TOR_TAILQ_HEAD_INITIALIZER(ol_list[1]), /* fast */
+ TOR_TAILQ_HEAD_INITIALIZER(ol_list[2]), /* ntor */
+};
+
+/** Number of entries of each type currently in each element of ol_list[]. */
+static int ol_entries[MAX_ONION_HANDSHAKE_TYPE+1];
+
+static int num_ntors_per_tap(void);
+static void onion_queue_entry_remove(onion_queue_t *victim);
+
+/* XXXX024 Check lengths vs MAX_ONIONSKIN_{CHALLENGE,REPLY}_LEN.
+ *
+ * (By which I think I meant, "make sure that no
+ * X_ONIONSKIN_CHALLENGE/REPLY_LEN is greater than
+ * MAX_ONIONSKIN_CHALLENGE/REPLY_LEN." Also, make sure that we can pass
+ * over-large values via EXTEND2/EXTENDED2, for future-compatibility.*/
+
+/** Return true iff we have room to queue another onionskin of type
+ * <b>type</b>. */
+static int
+have_room_for_onionskin(uint16_t type)
+{
+ const or_options_t *options = get_options();
+ int num_cpus;
+ uint64_t tap_usec, ntor_usec;
+ uint64_t ntor_during_tap_usec, tap_during_ntor_usec;
+
+ /* If we've got fewer than 50 entries, we always have room for one more. */
+ if (ol_entries[type] < 50)
+ return 1;
+ num_cpus = get_num_cpus(options);
+ /* Compute how many microseconds we'd expect to need to clear all
+ * onionskins in various combinations of the queues. */
+
+ /* How long would it take to process all the TAP cells in the queue? */
+ tap_usec = estimated_usec_for_onionskins(
+ ol_entries[ONION_HANDSHAKE_TYPE_TAP],
+ ONION_HANDSHAKE_TYPE_TAP) / num_cpus;
+
+ /* How long would it take to process all the NTor cells in the queue? */
+ ntor_usec = estimated_usec_for_onionskins(
+ ol_entries[ONION_HANDSHAKE_TYPE_NTOR],
+ ONION_HANDSHAKE_TYPE_NTOR) / num_cpus;
+
+ /* How long would it take to process the tap cells that we expect to
+ * process while draining the ntor queue? */
+ tap_during_ntor_usec = estimated_usec_for_onionskins(
+ MIN(ol_entries[ONION_HANDSHAKE_TYPE_TAP],
+ ol_entries[ONION_HANDSHAKE_TYPE_NTOR] / num_ntors_per_tap()),
+ ONION_HANDSHAKE_TYPE_TAP) / num_cpus;
+
+ /* How long would it take to process the ntor cells that we expect to
+ * process while draining the tap queue? */
+ ntor_during_tap_usec = estimated_usec_for_onionskins(
+ MIN(ol_entries[ONION_HANDSHAKE_TYPE_NTOR],
+ ol_entries[ONION_HANDSHAKE_TYPE_TAP] * num_ntors_per_tap()),
+ ONION_HANDSHAKE_TYPE_NTOR) / num_cpus;
+
+ /* See whether that exceeds MaxOnionQueueDelay. If so, we can't queue
+ * this. */
+ if (type == ONION_HANDSHAKE_TYPE_NTOR &&
+ (ntor_usec + tap_during_ntor_usec) / 1000 >
+ (uint64_t)options->MaxOnionQueueDelay)
+ return 0;
+
+ if (type == ONION_HANDSHAKE_TYPE_TAP &&
+ (tap_usec + ntor_during_tap_usec) / 1000 >
+ (uint64_t)options->MaxOnionQueueDelay)
+ return 0;
+
+#ifdef CURVE25519_ENABLED
+ /* If we support the ntor handshake, then don't let TAP handshakes use
+ * more than 2/3 of the space on the queue. */
+ if (type == ONION_HANDSHAKE_TYPE_TAP &&
+ tap_usec / 1000 > (uint64_t)options->MaxOnionQueueDelay * 2 / 3)
+ return 0;
+#else
+ (void) type;
+#endif
+
+ return 1;
+}
/** Add <b>circ</b> to the end of ol_list and return 0, except
* if ol_list is too long, in which case do nothing and return -1.
*/
int
-onion_pending_add(or_circuit_t *circ, char *onionskin)
+onion_pending_add(or_circuit_t *circ, create_cell_t *onionskin)
{
onion_queue_t *tmp;
time_t now = time(NULL);
+ if (onionskin->handshake_type > MAX_ONION_HANDSHAKE_TYPE) {
+ log_warn(LD_BUG, "Handshake %d out of range! Dropping.",
+ onionskin->handshake_type);
+ return -1;
+ }
+
tmp = tor_malloc_zero(sizeof(onion_queue_t));
tmp->circ = circ;
+ tmp->handshake_type = onionskin->handshake_type;
tmp->onionskin = onionskin;
tmp->when_added = now;
- if (!ol_tail) {
- tor_assert(!ol_list);
- tor_assert(!ol_length);
- ol_list = tmp;
- ol_tail = tmp;
- ol_length++;
- return 0;
- }
-
- tor_assert(ol_list);
- tor_assert(!ol_tail->next);
-
- if (ol_length >= get_options()->MaxOnionsPending) {
+ if (!have_room_for_onionskin(onionskin->handshake_type)) {
#define WARN_TOO_MANY_CIRC_CREATIONS_INTERVAL (60)
static ratelim_t last_warned =
RATELIM_INIT(WARN_TOO_MANY_CIRC_CREATIONS_INTERVAL);
char *m;
- if ((m = rate_limit_log(&last_warned, approx_time()))) {
+ if (onionskin->handshake_type == ONION_HANDSHAKE_TYPE_NTOR &&
+ (m = rate_limit_log(&last_warned, approx_time()))) {
log_warn(LD_GENERAL,
"Your computer is too slow to handle this many circuit "
"creation requests! Please consider using the "
@@ -80,13 +163,24 @@ onion_pending_add(or_circuit_t *circ, char *onionskin)
return -1;
}
- ol_length++;
- ol_tail->next = tmp;
- ol_tail = tmp;
- while ((int)(now - ol_list->when_added) >= ONIONQUEUE_WAIT_CUTOFF) {
- /* cull elderly requests. */
- circ = ol_list->circ;
- onion_pending_remove(ol_list->circ);
+ ++ol_entries[onionskin->handshake_type];
+ log_info(LD_OR, "New create (%s). Queues now ntor=%d and tap=%d.",
+ onionskin->handshake_type == ONION_HANDSHAKE_TYPE_NTOR ? "ntor" : "tap",
+ ol_entries[ONION_HANDSHAKE_TYPE_NTOR],
+ ol_entries[ONION_HANDSHAKE_TYPE_TAP]);
+
+ circ->onionqueue_entry = tmp;
+ TOR_TAILQ_INSERT_TAIL(&ol_list[onionskin->handshake_type], tmp, next);
+
+ /* cull elderly requests. */
+ while (1) {
+ onion_queue_t *head = TOR_TAILQ_FIRST(&ol_list[onionskin->handshake_type]);
+ if (now - head->when_added < (time_t)ONIONQUEUE_WAIT_CUTOFF)
+ break;
+
+ circ = head->circ;
+ circ->onionqueue_entry = NULL;
+ onion_queue_entry_remove(head);
log_info(LD_CIRC,
"Circuit create request is too old; canceling due to overload.");
circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_RESOURCELIMIT);
@@ -94,355 +188,1004 @@ onion_pending_add(or_circuit_t *circ, char *onionskin)
return 0;
}
-/** Remove the first item from ol_list and return it, or return
- * NULL if the list is empty.
+/** Return a fairness parameter, to prefer processing NTOR style
+ * handshakes but still slowly drain the TAP queue so we don't starve
+ * it entirely. */
+static int
+num_ntors_per_tap(void)
+{
+#define DEFAULT_NUM_NTORS_PER_TAP 10
+#define MIN_NUM_NTORS_PER_TAP 1
+#define MAX_NUM_NTORS_PER_TAP 100000
+
+ return networkstatus_get_param(NULL, "NumNTorsPerTAP",
+ DEFAULT_NUM_NTORS_PER_TAP,
+ MIN_NUM_NTORS_PER_TAP,
+ MAX_NUM_NTORS_PER_TAP);
+}
+
+/** Choose which onion queue we'll pull from next. If one is empty choose
+ * the other; if they both have elements, load balance across them but
+ * favoring NTOR. */
+static uint16_t
+decide_next_handshake_type(void)
+{
+ /* The number of times we've chosen ntor lately when both were available. */
+ static int recently_chosen_ntors = 0;
+
+ if (!ol_entries[ONION_HANDSHAKE_TYPE_NTOR])
+ return ONION_HANDSHAKE_TYPE_TAP; /* no ntors? try tap */
+
+ if (!ol_entries[ONION_HANDSHAKE_TYPE_TAP]) {
+
+ /* Nick wants us to prioritize new tap requests when there aren't
+ * any in the queue and we've processed k ntor cells since the last
+ * tap cell. This strategy is maybe a good idea, since it starves tap
+ * less in the case where tap is rare, or maybe a poor idea, since it
+ * makes the new tap cell unfairly jump in front of ntor cells that
+ * got here first. In any case this edge case will only become relevant
+ * once tap is rare. We should reevaluate whether we like this decision
+ * once tap gets more rare. */
+ if (ol_entries[ONION_HANDSHAKE_TYPE_NTOR] &&
+ recently_chosen_ntors <= num_ntors_per_tap())
+ ++recently_chosen_ntors;
+
+ return ONION_HANDSHAKE_TYPE_NTOR; /* no taps? try ntor */
+ }
+
+ /* They both have something queued. Pick ntor if we haven't done that
+ * too much lately. */
+ if (++recently_chosen_ntors <= num_ntors_per_tap()) {
+ return ONION_HANDSHAKE_TYPE_NTOR;
+ }
+
+ /* Else, it's time to let tap have its turn. */
+ recently_chosen_ntors = 0;
+ return ONION_HANDSHAKE_TYPE_TAP;
+}
+
+/** Remove the highest priority item from ol_list[] and return it, or
+ * return NULL if the lists are empty.
*/
or_circuit_t *
-onion_next_task(char **onionskin_out)
+onion_next_task(create_cell_t **onionskin_out)
{
or_circuit_t *circ;
+ uint16_t handshake_to_choose = decide_next_handshake_type();
+ onion_queue_t *head = TOR_TAILQ_FIRST(&ol_list[handshake_to_choose]);
- if (!ol_list)
+ if (!head)
return NULL; /* no onions pending, we're done */
- tor_assert(ol_list->circ);
- tor_assert(ol_list->circ->p_conn); /* make sure it's still valid */
- tor_assert(ol_length > 0);
- circ = ol_list->circ;
- *onionskin_out = ol_list->onionskin;
- ol_list->onionskin = NULL; /* prevent free. */
- onion_pending_remove(ol_list->circ);
+ tor_assert(head->circ);
+ tor_assert(head->handshake_type <= MAX_ONION_HANDSHAKE_TYPE);
+// tor_assert(head->circ->p_chan); /* make sure it's still valid */
+/* XXX I only commented out the above line to make the unit tests
+ * more manageable. That's probably not good long-term. -RD */
+ circ = head->circ;
+ if (head->onionskin)
+ --ol_entries[head->handshake_type];
+ log_info(LD_OR, "Processing create (%s). Queues now ntor=%d and tap=%d.",
+ head->handshake_type == ONION_HANDSHAKE_TYPE_NTOR ? "ntor" : "tap",
+ ol_entries[ONION_HANDSHAKE_TYPE_NTOR],
+ ol_entries[ONION_HANDSHAKE_TYPE_TAP]);
+
+ *onionskin_out = head->onionskin;
+ head->onionskin = NULL; /* prevent free. */
+ circ->onionqueue_entry = NULL;
+ onion_queue_entry_remove(head);
return circ;
}
+/** Return the number of <b>handshake_type</b>-style create requests pending.
+ */
+int
+onion_num_pending(uint16_t handshake_type)
+{
+ return ol_entries[handshake_type];
+}
+
/** Go through ol_list, find the onion_queue_t element which points to
* circ, remove and free that element. Leave circ itself alone.
*/
void
onion_pending_remove(or_circuit_t *circ)
{
- onion_queue_t *tmpo, *victim;
-
- if (!ol_list)
- return; /* nothing here. */
-
- /* first check to see if it's the first entry */
- tmpo = ol_list;
- if (tmpo->circ == circ) {
- /* it's the first one. remove it from the list. */
- ol_list = tmpo->next;
- if (!ol_list)
- ol_tail = NULL;
- ol_length--;
- victim = tmpo;
- } else { /* we need to hunt through the rest of the list */
- for ( ;tmpo->next && tmpo->next->circ != circ; tmpo=tmpo->next) ;
- if (!tmpo->next) {
- log_debug(LD_GENERAL,
- "circ (p_circ_id %d) not in list, probably at cpuworker.",
- circ->p_circ_id);
- return;
- }
- /* now we know tmpo->next->circ == circ */
- victim = tmpo->next;
- tmpo->next = victim->next;
- if (ol_tail == victim)
- ol_tail = tmpo;
- ol_length--;
+ onion_queue_t *victim;
+
+ if (!circ)
+ return;
+
+ victim = circ->onionqueue_entry;
+ if (victim)
+ onion_queue_entry_remove(victim);
+}
+
+/** Remove a queue entry <b>victim</b> from the queue, unlinking it from
+ * its circuit and freeing it and any structures it owns.*/
+static void
+onion_queue_entry_remove(onion_queue_t *victim)
+{
+ if (victim->handshake_type > MAX_ONION_HANDSHAKE_TYPE) {
+ log_warn(LD_BUG, "Handshake %d out of range! Dropping.",
+ victim->handshake_type);
+ /* XXX leaks */
+ return;
}
- /* now victim points to the element that needs to be removed */
+ TOR_TAILQ_REMOVE(&ol_list[victim->handshake_type], victim, next);
+
+ if (victim->circ)
+ victim->circ->onionqueue_entry = NULL;
+
+ if (victim->onionskin)
+ --ol_entries[victim->handshake_type];
tor_free(victim->onionskin);
tor_free(victim);
}
-/*----------------------------------------------------------------------*/
+/** Remove all circuits from the pending list. Called from tor_free_all. */
+void
+clear_pending_onions(void)
+{
+ onion_queue_t *victim, *next;
+ int i;
+ for (i=0; i<=MAX_ONION_HANDSHAKE_TYPE; i++) {
+ for (victim = TOR_TAILQ_FIRST(&ol_list[i]); victim; victim = next) {
+ next = TOR_TAILQ_NEXT(victim,next);
+ onion_queue_entry_remove(victim);
+ }
+ tor_assert(TOR_TAILQ_EMPTY(&ol_list[i]));
+ }
+ memset(ol_entries, 0, sizeof(ol_entries));
+}
-/** Given a router's 128 byte public key,
- * stores the following in onion_skin_out:
- * - [42 bytes] OAEP padding
- * - [16 bytes] Symmetric key for encrypting blob past RSA
- * - [70 bytes] g^x part 1 (inside the RSA)
- * - [58 bytes] g^x part 2 (symmetrically encrypted)
- *
- * Stores the DH private key into handshake_state_out for later completion
- * of the handshake.
- *
- * The meeting point/cookies and auth are zeroed out for now.
+/* ============================================================ */
+
+/** Fill in a server_onion_keys_t object at <b>keys</b> with all of the keys
+ * and other info we might need to do onion handshakes. (We make a copy of
+ * our keys for each cpuworker to avoid race conditions with the main thread,
+ * and to avoid locking) */
+void
+setup_server_onion_keys(server_onion_keys_t *keys)
+{
+ memset(keys, 0, sizeof(server_onion_keys_t));
+ memcpy(keys->my_identity, router_get_my_id_digest(), DIGEST_LEN);
+ dup_onion_keys(&keys->onion_key, &keys->last_onion_key);
+#ifdef CURVE25519_ENABLED
+ keys->curve25519_key_map = construct_ntor_key_map();
+ keys->junk_keypair = tor_malloc_zero(sizeof(curve25519_keypair_t));
+ curve25519_keypair_generate(keys->junk_keypair, 0);
+#endif
+}
+
+/** Release all storage held in <b>keys</b>, but do not free <b>keys</b>
+ * itself (as it's likely to be stack-allocated.) */
+void
+release_server_onion_keys(server_onion_keys_t *keys)
+{
+ if (! keys)
+ return;
+
+ crypto_pk_free(keys->onion_key);
+ crypto_pk_free(keys->last_onion_key);
+#ifdef CURVE25519_ENABLED
+ ntor_key_map_free(keys->curve25519_key_map);
+ tor_free(keys->junk_keypair);
+#endif
+ memset(keys, 0, sizeof(server_onion_keys_t));
+}
+
+/** Release whatever storage is held in <b>state</b>, depending on its
+ * type, and clear its pointer. */
+void
+onion_handshake_state_release(onion_handshake_state_t *state)
+{
+ switch (state->tag) {
+ case ONION_HANDSHAKE_TYPE_TAP:
+ crypto_dh_free(state->u.tap);
+ state->u.tap = NULL;
+ break;
+ case ONION_HANDSHAKE_TYPE_FAST:
+ fast_handshake_state_free(state->u.fast);
+ state->u.fast = NULL;
+ break;
+#ifdef CURVE25519_ENABLED
+ case ONION_HANDSHAKE_TYPE_NTOR:
+ ntor_handshake_state_free(state->u.ntor);
+ state->u.ntor = NULL;
+ break;
+#endif
+ default:
+ log_warn(LD_BUG, "called with unknown handshake state type %d",
+ (int)state->tag);
+ tor_fragile_assert();
+ }
+}
+
+/** Perform the first step of a circuit-creation handshake of type <b>type</b>
+ * (one of ONION_HANDSHAKE_TYPE_*): generate the initial "onion skin" in
+ * <b>onion_skin_out</b>, and store any state information in <b>state_out</b>.
+ * Return -1 on failure, and the length of the onionskin on acceptance.
*/
int
-onion_skin_create(crypto_pk_t *dest_router_key,
- crypto_dh_t **handshake_state_out,
- char *onion_skin_out) /* ONIONSKIN_CHALLENGE_LEN bytes */
+onion_skin_create(int type,
+ const extend_info_t *node,
+ onion_handshake_state_t *state_out,
+ uint8_t *onion_skin_out)
{
- char challenge[DH_KEY_LEN];
- crypto_dh_t *dh = NULL;
- int dhbytes, pkbytes;
-
- tor_assert(dest_router_key);
- tor_assert(handshake_state_out);
- tor_assert(onion_skin_out);
- *handshake_state_out = NULL;
- memset(onion_skin_out, 0, ONIONSKIN_CHALLENGE_LEN);
+ int r = -1;
- if (!(dh = crypto_dh_new(DH_TYPE_CIRCUIT)))
- goto err;
+ switch (type) {
+ case ONION_HANDSHAKE_TYPE_TAP:
+ if (!node->onion_key)
+ return -1;
- dhbytes = crypto_dh_get_bytes(dh);
- pkbytes = (int) crypto_pk_keysize(dest_router_key);
- tor_assert(dhbytes == 128);
- tor_assert(pkbytes == 128);
+ if (onion_skin_TAP_create(node->onion_key,
+ &state_out->u.tap,
+ (char*)onion_skin_out) < 0)
+ return -1;
- if (crypto_dh_get_public(dh, challenge, dhbytes))
- goto err;
+ r = TAP_ONIONSKIN_CHALLENGE_LEN;
+ break;
+ case ONION_HANDSHAKE_TYPE_FAST:
+ if (fast_onionskin_create(&state_out->u.fast, onion_skin_out) < 0)
+ return -1;
- note_crypto_pk_op(ENC_ONIONSKIN);
+ r = CREATE_FAST_LEN;
+ break;
+ case ONION_HANDSHAKE_TYPE_NTOR:
+#ifdef CURVE25519_ENABLED
+ if (tor_mem_is_zero((const char*)node->curve25519_onion_key.public_key,
+ CURVE25519_PUBKEY_LEN))
+ return -1;
+ if (onion_skin_ntor_create((const uint8_t*)node->identity_digest,
+ &node->curve25519_onion_key,
+ &state_out->u.ntor,
+ onion_skin_out) < 0)
+ return -1;
- /* set meeting point, meeting cookie, etc here. Leave zero for now. */
- if (crypto_pk_public_hybrid_encrypt(dest_router_key, onion_skin_out,
- ONIONSKIN_CHALLENGE_LEN,
- challenge, DH_KEY_LEN,
- PK_PKCS1_OAEP_PADDING, 1)<0)
- goto err;
+ r = NTOR_ONIONSKIN_LEN;
+#else
+ return -1;
+#endif
+ break;
+ default:
+ log_warn(LD_BUG, "called with unknown handshake state type %d", type);
+ tor_fragile_assert();
+ r = -1;
+ }
- memwipe(challenge, 0, sizeof(challenge));
- *handshake_state_out = dh;
+ if (r > 0)
+ state_out->tag = (uint16_t) type;
- return 0;
- err:
- memwipe(challenge, 0, sizeof(challenge));
- if (dh) crypto_dh_free(dh);
- return -1;
+ return r;
}
-/** Given an encrypted DH public key as generated by onion_skin_create,
- * and the private key for this onion router, generate the reply (128-byte
- * DH plus the first 20 bytes of shared key material), and store the
- * next key_out_len bytes of key material in key_out.
+/** Perform the second (server-side) step of a circuit-creation handshake of
+ * type <b>type</b>, responding to the client request in <b>onion_skin</b>
+ * using the keys in <b>keys</b>. On success, write our response into
+ * <b>reply_out</b>, generate <b>keys_out_len</b> bytes worth of key material
+ * in <b>keys_out_len</b>, a hidden service nonce to <b>rend_nonce_out</b>,
+ * and return the length of the reply. On failure, return -1.
*/
int
-onion_skin_server_handshake(const char *onion_skin, /*ONIONSKIN_CHALLENGE_LEN*/
- crypto_pk_t *private_key,
- crypto_pk_t *prev_private_key,
- char *handshake_reply_out, /*ONIONSKIN_REPLY_LEN*/
- char *key_out,
- size_t key_out_len)
+onion_skin_server_handshake(int type,
+ const uint8_t *onion_skin, size_t onionskin_len,
+ const server_onion_keys_t *keys,
+ uint8_t *reply_out,
+ uint8_t *keys_out, size_t keys_out_len,
+ uint8_t *rend_nonce_out)
{
- char challenge[ONIONSKIN_CHALLENGE_LEN];
- crypto_dh_t *dh = NULL;
- ssize_t len;
- char *key_material=NULL;
- size_t key_material_len=0;
- int i;
- crypto_pk_t *k;
+ int r = -1;
- len = -1;
- for (i=0;i<2;++i) {
- k = i==0?private_key:prev_private_key;
- if (!k)
- break;
- note_crypto_pk_op(DEC_ONIONSKIN);
- len = crypto_pk_private_hybrid_decrypt(k, challenge,
- ONIONSKIN_CHALLENGE_LEN,
- onion_skin, ONIONSKIN_CHALLENGE_LEN,
- PK_PKCS1_OAEP_PADDING,0);
- if (len>0)
- break;
+ switch (type) {
+ case ONION_HANDSHAKE_TYPE_TAP:
+ if (onionskin_len != TAP_ONIONSKIN_CHALLENGE_LEN)
+ return -1;
+ if (onion_skin_TAP_server_handshake((const char*)onion_skin,
+ keys->onion_key, keys->last_onion_key,
+ (char*)reply_out,
+ (char*)keys_out, keys_out_len)<0)
+ return -1;
+ r = TAP_ONIONSKIN_REPLY_LEN;
+ memcpy(rend_nonce_out, reply_out+DH_KEY_LEN, DIGEST_LEN);
+ break;
+ case ONION_HANDSHAKE_TYPE_FAST:
+ if (onionskin_len != CREATE_FAST_LEN)
+ return -1;
+ if (fast_server_handshake(onion_skin, reply_out, keys_out, keys_out_len)<0)
+ return -1;
+ r = CREATED_FAST_LEN;
+ memcpy(rend_nonce_out, reply_out+DIGEST_LEN, DIGEST_LEN);
+ break;
+ case ONION_HANDSHAKE_TYPE_NTOR:
+#ifdef CURVE25519_ENABLED
+ if (onionskin_len < NTOR_ONIONSKIN_LEN)
+ return -1;
+ {
+ size_t keys_tmp_len = keys_out_len + DIGEST_LEN;
+ uint8_t *keys_tmp = tor_malloc(keys_out_len + DIGEST_LEN);
+
+ if (onion_skin_ntor_server_handshake(
+ onion_skin, keys->curve25519_key_map,
+ keys->junk_keypair,
+ keys->my_identity,
+ reply_out, keys_tmp, keys_tmp_len)<0) {
+ tor_free(keys_tmp);
+ return -1;
+ }
+ memcpy(keys_out, keys_tmp, keys_out_len);
+ memcpy(rend_nonce_out, keys_tmp+keys_out_len, DIGEST_LEN);
+ memwipe(keys_tmp, 0, keys_tmp_len);
+ tor_free(keys_tmp);
+ r = NTOR_REPLY_LEN;
+ }
+#else
+ return -1;
+#endif
+ break;
+ default:
+ log_warn(LD_BUG, "called with unknown handshake state type %d", type);
+ tor_fragile_assert();
+ return -1;
}
- if (len<0) {
- log_info(LD_PROTOCOL,
- "Couldn't decrypt onionskin: client may be using old onion key");
- goto err;
- } else if (len != DH_KEY_LEN) {
- log_warn(LD_PROTOCOL, "Unexpected onionskin length after decryption: %ld",
- (long)len);
- goto err;
+
+ return r;
+}
+
+/** Perform the final (client-side) step of a circuit-creation handshake of
+ * type <b>type</b>, using our state in <b>handshake_state</b> and the
+ * server's response in <b>reply</b>. On success, generate <b>keys_out_len</b>
+ * bytes worth of key material in <b>keys_out_len</b>, set
+ * <b>rend_authenticator_out</b> to the "KH" field that can be used to
+ * establish introduction points at this hop, and return 0. On failure,
+ * return -1. */
+int
+onion_skin_client_handshake(int type,
+ const onion_handshake_state_t *handshake_state,
+ const uint8_t *reply, size_t reply_len,
+ uint8_t *keys_out, size_t keys_out_len,
+ uint8_t *rend_authenticator_out)
+{
+ if (handshake_state->tag != type)
+ return -1;
+
+ switch (type) {
+ case ONION_HANDSHAKE_TYPE_TAP:
+ if (reply_len != TAP_ONIONSKIN_REPLY_LEN) {
+ log_warn(LD_CIRC, "TAP reply was not of the correct length.");
+ return -1;
+ }
+ if (onion_skin_TAP_client_handshake(handshake_state->u.tap,
+ (const char*)reply,
+ (char *)keys_out, keys_out_len) < 0)
+ return -1;
+
+ memcpy(rend_authenticator_out, reply+DH_KEY_LEN, DIGEST_LEN);
+
+ return 0;
+ case ONION_HANDSHAKE_TYPE_FAST:
+ if (reply_len != CREATED_FAST_LEN) {
+ log_warn(LD_CIRC, "CREATED_FAST reply was not of the correct length.");
+ return -1;
+ }
+ if (fast_client_handshake(handshake_state->u.fast, reply,
+ keys_out, keys_out_len) < 0)
+ return -1;
+
+ memcpy(rend_authenticator_out, reply+DIGEST_LEN, DIGEST_LEN);
+ return 0;
+#ifdef CURVE25519_ENABLED
+ case ONION_HANDSHAKE_TYPE_NTOR:
+ if (reply_len < NTOR_REPLY_LEN) {
+ log_warn(LD_CIRC, "ntor reply was not of the correct length.");
+ return -1;
+ }
+ {
+ size_t keys_tmp_len = keys_out_len + DIGEST_LEN;
+ uint8_t *keys_tmp = tor_malloc(keys_tmp_len);
+ if (onion_skin_ntor_client_handshake(handshake_state->u.ntor,
+ reply,
+ keys_tmp, keys_tmp_len) < 0) {
+ tor_free(keys_tmp);
+ return -1;
+ }
+ memcpy(keys_out, keys_tmp, keys_out_len);
+ memcpy(rend_authenticator_out, keys_tmp + keys_out_len, DIGEST_LEN);
+ memwipe(keys_tmp, 0, keys_tmp_len);
+ tor_free(keys_tmp);
+ }
+ return 0;
+#endif
+ default:
+ log_warn(LD_BUG, "called with unknown handshake state type %d", type);
+ tor_fragile_assert();
+ return -1;
}
+}
- dh = crypto_dh_new(DH_TYPE_CIRCUIT);
- if (!dh) {
- log_warn(LD_BUG, "Couldn't allocate DH key");
- goto err;
+/** Helper: return 0 if <b>cell</b> appears valid, -1 otherwise. If
+ * <b>unknown_ok</b> is true, allow cells with handshake types we don't
+ * recognize. */
+static int
+check_create_cell(const create_cell_t *cell, int unknown_ok)
+{
+ switch (cell->cell_type) {
+ case CELL_CREATE:
+ if (cell->handshake_type != ONION_HANDSHAKE_TYPE_TAP &&
+ cell->handshake_type != ONION_HANDSHAKE_TYPE_NTOR)
+ return -1;
+ break;
+ case CELL_CREATE_FAST:
+ if (cell->handshake_type != ONION_HANDSHAKE_TYPE_FAST)
+ return -1;
+ break;
+ case CELL_CREATE2:
+ break;
+ default:
+ return -1;
}
- if (crypto_dh_get_public(dh, handshake_reply_out, DH_KEY_LEN)) {
- log_info(LD_GENERAL, "crypto_dh_get_public failed.");
- goto err;
+
+ switch (cell->handshake_type) {
+ case ONION_HANDSHAKE_TYPE_TAP:
+ if (cell->handshake_len != TAP_ONIONSKIN_CHALLENGE_LEN)
+ return -1;
+ break;
+ case ONION_HANDSHAKE_TYPE_FAST:
+ if (cell->handshake_len != CREATE_FAST_LEN)
+ return -1;
+ break;
+#ifdef CURVE25519_ENABLED
+ case ONION_HANDSHAKE_TYPE_NTOR:
+ if (cell->handshake_len != NTOR_ONIONSKIN_LEN)
+ return -1;
+ break;
+#endif
+ default:
+ if (! unknown_ok)
+ return -1;
}
- key_material_len = DIGEST_LEN+key_out_len;
- key_material = tor_malloc(key_material_len);
- len = crypto_dh_compute_secret(LOG_PROTOCOL_WARN, dh, challenge,
- DH_KEY_LEN, key_material,
- key_material_len);
- if (len < 0) {
- log_info(LD_GENERAL, "crypto_dh_compute_secret failed.");
- goto err;
+ return 0;
+}
+
+/** Write the various parameters into the create cell. Separate from
+ * create_cell_parse() to make unit testing easier.
+ */
+void
+create_cell_init(create_cell_t *cell_out, uint8_t cell_type,
+ uint16_t handshake_type, uint16_t handshake_len,
+ const uint8_t *onionskin)
+{
+ memset(cell_out, 0, sizeof(*cell_out));
+
+ cell_out->cell_type = cell_type;
+ cell_out->handshake_type = handshake_type;
+ cell_out->handshake_len = handshake_len;
+ memcpy(cell_out->onionskin, onionskin, handshake_len);
+}
+
+/** Helper: parse the CREATE2 payload at <b>p</b>, which could be up to
+ * <b>p_len</b> bytes long, and use it to fill the fields of
+ * <b>cell_out</b>. Return 0 on success and -1 on failure.
+ *
+ * Note that part of the body of an EXTEND2 cell is a CREATE2 payload, so
+ * this function is also used for parsing those.
+ */
+static int
+parse_create2_payload(create_cell_t *cell_out, const uint8_t *p, size_t p_len)
+{
+ uint16_t handshake_type, handshake_len;
+
+ if (p_len < 4)
+ return -1;
+
+ handshake_type = ntohs(get_uint16(p));
+ handshake_len = ntohs(get_uint16(p+2));
+
+ if (handshake_len > CELL_PAYLOAD_SIZE - 4 || handshake_len > p_len - 4)
+ return -1;
+ if (handshake_type == ONION_HANDSHAKE_TYPE_FAST)
+ return -1;
+
+ create_cell_init(cell_out, CELL_CREATE2, handshake_type, handshake_len,
+ p+4);
+ return 0;
+}
+
+/** Magic string which, in a CREATE or EXTEND cell, indicates that a seeming
+ * TAP payload is really an ntor payload. We'd do away with this if every
+ * relay supported EXTEND2, but we want to be able to extend from A to B with
+ * ntor even when A doesn't understand EXTEND2 and so can't generate a
+ * CREATE2 cell.
+ **/
+#define NTOR_CREATE_MAGIC "ntorNTORntorNTOR"
+
+/** Parse a CREATE, CREATE_FAST, or CREATE2 cell from <b>cell_in</b> into
+ * <b>cell_out</b>. Return 0 on success, -1 on failure. (We reject some
+ * syntactically valid CREATE2 cells that we can't generate or react to.) */
+int
+create_cell_parse(create_cell_t *cell_out, const cell_t *cell_in)
+{
+ switch (cell_in->command) {
+ case CELL_CREATE:
+ if (tor_memeq(cell_in->payload, NTOR_CREATE_MAGIC, 16)) {
+ create_cell_init(cell_out, CELL_CREATE, ONION_HANDSHAKE_TYPE_NTOR,
+ NTOR_ONIONSKIN_LEN, cell_in->payload+16);
+ } else {
+ create_cell_init(cell_out, CELL_CREATE, ONION_HANDSHAKE_TYPE_TAP,
+ TAP_ONIONSKIN_CHALLENGE_LEN, cell_in->payload);
+ }
+ break;
+ case CELL_CREATE_FAST:
+ create_cell_init(cell_out, CELL_CREATE_FAST, ONION_HANDSHAKE_TYPE_FAST,
+ CREATE_FAST_LEN, cell_in->payload);
+ break;
+ case CELL_CREATE2:
+ if (parse_create2_payload(cell_out, cell_in->payload,
+ CELL_PAYLOAD_SIZE) < 0)
+ return -1;
+ break;
+ default:
+ return -1;
}
- /* send back H(K|0) as proof that we learned K. */
- memcpy(handshake_reply_out+DH_KEY_LEN, key_material, DIGEST_LEN);
+ return check_create_cell(cell_out, 0);
+}
- /* use the rest of the key material for our shared keys, digests, etc */
- memcpy(key_out, key_material+DIGEST_LEN, key_out_len);
+/** Helper: return 0 if <b>cell</b> appears valid, -1 otherwise. */
+static int
+check_created_cell(const created_cell_t *cell)
+{
+ switch (cell->cell_type) {
+ case CELL_CREATED:
+ if (cell->handshake_len != TAP_ONIONSKIN_REPLY_LEN &&
+ cell->handshake_len != NTOR_REPLY_LEN)
+ return -1;
+ break;
+ case CELL_CREATED_FAST:
+ if (cell->handshake_len != CREATED_FAST_LEN)
+ return -1;
+ break;
+ case CELL_CREATED2:
+ if (cell->handshake_len > RELAY_PAYLOAD_SIZE-2)
+ return -1;
+ break;
+ }
- memwipe(challenge, 0, sizeof(challenge));
- memwipe(key_material, 0, key_material_len);
- tor_free(key_material);
- crypto_dh_free(dh);
return 0;
- err:
- memwipe(challenge, 0, sizeof(challenge));
- if (key_material) {
- memwipe(key_material, 0, key_material_len);
- tor_free(key_material);
+}
+
+/** Parse a CREATED, CREATED_FAST, or CREATED2 cell from <b>cell_in</b> into
+ * <b>cell_out</b>. Return 0 on success, -1 on failure. */
+int
+created_cell_parse(created_cell_t *cell_out, const cell_t *cell_in)
+{
+ memset(cell_out, 0, sizeof(*cell_out));
+
+ switch (cell_in->command) {
+ case CELL_CREATED:
+ cell_out->cell_type = CELL_CREATED;
+ cell_out->handshake_len = TAP_ONIONSKIN_REPLY_LEN;
+ memcpy(cell_out->reply, cell_in->payload, TAP_ONIONSKIN_REPLY_LEN);
+ break;
+ case CELL_CREATED_FAST:
+ cell_out->cell_type = CELL_CREATED_FAST;
+ cell_out->handshake_len = CREATED_FAST_LEN;
+ memcpy(cell_out->reply, cell_in->payload, CREATED_FAST_LEN);
+ break;
+ case CELL_CREATED2:
+ {
+ const uint8_t *p = cell_in->payload;
+ cell_out->cell_type = CELL_CREATED2;
+ cell_out->handshake_len = ntohs(get_uint16(p));
+ if (cell_out->handshake_len > CELL_PAYLOAD_SIZE - 2)
+ return -1;
+ memcpy(cell_out->reply, p+2, cell_out->handshake_len);
+ break;
+ }
}
- if (dh) crypto_dh_free(dh);
- return -1;
+ return check_created_cell(cell_out);
}
-/** Finish the client side of the DH handshake.
- * Given the 128 byte DH reply + 20 byte hash as generated by
- * onion_skin_server_handshake and the handshake state generated by
- * onion_skin_create, verify H(K) with the first 20 bytes of shared
- * key material, then generate key_out_len more bytes of shared key
- * material and store them in key_out.
- *
- * After the invocation, call crypto_dh_free on handshake_state.
+/** Helper: return 0 if <b>cell</b> appears valid, -1 otherwise. */
+static int
+check_extend_cell(const extend_cell_t *cell)
+{
+ if (tor_digest_is_zero((const char*)cell->node_id))
+ return -1;
+ /* We don't currently allow EXTEND2 cells without an IPv4 address */
+ if (tor_addr_family(&cell->orport_ipv4.addr) == AF_UNSPEC)
+ return -1;
+ if (cell->create_cell.cell_type == CELL_CREATE) {
+ if (cell->cell_type != RELAY_COMMAND_EXTEND)
+ return -1;
+ } else if (cell->create_cell.cell_type == CELL_CREATE2) {
+ if (cell->cell_type != RELAY_COMMAND_EXTEND2 &&
+ cell->cell_type != RELAY_COMMAND_EXTEND)
+ return -1;
+ } else {
+ /* In particular, no CREATE_FAST cells are allowed */
+ return -1;
+ }
+ if (cell->create_cell.handshake_type == ONION_HANDSHAKE_TYPE_FAST)
+ return -1;
+
+ return check_create_cell(&cell->create_cell, 1);
+}
+
+/** Protocol constants for specifier types in EXTEND2
+ * @{
*/
+#define SPECTYPE_IPV4 0
+#define SPECTYPE_IPV6 1
+#define SPECTYPE_LEGACY_ID 2
+/** @} */
+
+/** Parse an EXTEND or EXTEND2 cell (according to <b>command</b>) from the
+ * <b>payload_length</b> bytes of <b>payload</b> into <b>cell_out</b>. Return
+ * 0 on success, -1 on failure. */
int
-onion_skin_client_handshake(crypto_dh_t *handshake_state,
- const char *handshake_reply, /* ONIONSKIN_REPLY_LEN bytes */
- char *key_out,
- size_t key_out_len)
+extend_cell_parse(extend_cell_t *cell_out, const uint8_t command,
+ const uint8_t *payload, size_t payload_length)
{
- ssize_t len;
- char *key_material=NULL;
- size_t key_material_len;
- tor_assert(crypto_dh_get_bytes(handshake_state) == DH_KEY_LEN);
-
- key_material_len = DIGEST_LEN + key_out_len;
- key_material = tor_malloc(key_material_len);
- len = crypto_dh_compute_secret(LOG_PROTOCOL_WARN, handshake_state,
- handshake_reply, DH_KEY_LEN, key_material,
- key_material_len);
- if (len < 0)
- goto err;
-
- if (tor_memneq(key_material, handshake_reply+DH_KEY_LEN, DIGEST_LEN)) {
- /* H(K) does *not* match. Something fishy. */
- log_warn(LD_PROTOCOL,"Digest DOES NOT MATCH on onion handshake. "
- "Bug or attack.");
- goto err;
+ const uint8_t *eop;
+
+ memset(cell_out, 0, sizeof(*cell_out));
+ if (payload_length > RELAY_PAYLOAD_SIZE)
+ return -1;
+ eop = payload + payload_length;
+
+ switch (command) {
+ case RELAY_COMMAND_EXTEND:
+ {
+ if (payload_length != 6 + TAP_ONIONSKIN_CHALLENGE_LEN + DIGEST_LEN)
+ return -1;
+
+ cell_out->cell_type = RELAY_COMMAND_EXTEND;
+ tor_addr_from_ipv4n(&cell_out->orport_ipv4.addr, get_uint32(payload));
+ cell_out->orport_ipv4.port = ntohs(get_uint16(payload+4));
+ tor_addr_make_unspec(&cell_out->orport_ipv6.addr);
+ if (tor_memeq(payload + 6, NTOR_CREATE_MAGIC, 16)) {
+ cell_out->create_cell.cell_type = CELL_CREATE2;
+ cell_out->create_cell.handshake_type = ONION_HANDSHAKE_TYPE_NTOR;
+ cell_out->create_cell.handshake_len = NTOR_ONIONSKIN_LEN;
+ memcpy(cell_out->create_cell.onionskin, payload + 22,
+ NTOR_ONIONSKIN_LEN);
+ } else {
+ cell_out->create_cell.cell_type = CELL_CREATE;
+ cell_out->create_cell.handshake_type = ONION_HANDSHAKE_TYPE_TAP;
+ cell_out->create_cell.handshake_len = TAP_ONIONSKIN_CHALLENGE_LEN;
+ memcpy(cell_out->create_cell.onionskin, payload + 6,
+ TAP_ONIONSKIN_CHALLENGE_LEN);
+ }
+ memcpy(cell_out->node_id, payload + 6 + TAP_ONIONSKIN_CHALLENGE_LEN,
+ DIGEST_LEN);
+ break;
+ }
+ case RELAY_COMMAND_EXTEND2:
+ {
+ uint8_t n_specs, spectype, speclen;
+ int i;
+ int found_ipv4 = 0, found_ipv6 = 0, found_id = 0;
+ tor_addr_make_unspec(&cell_out->orport_ipv4.addr);
+ tor_addr_make_unspec(&cell_out->orport_ipv6.addr);
+
+ if (payload_length == 0)
+ return -1;
+
+ cell_out->cell_type = RELAY_COMMAND_EXTEND2;
+ n_specs = *payload++;
+ /* Parse the specifiers. We'll only take the first IPv4 and first IPv6
+ * address, and the node ID, and ignore everything else */
+ for (i = 0; i < n_specs; ++i) {
+ if (eop - payload < 2)
+ return -1;
+ spectype = payload[0];
+ speclen = payload[1];
+ payload += 2;
+ if (eop - payload < speclen)
+ return -1;
+ switch (spectype) {
+ case SPECTYPE_IPV4:
+ if (speclen != 6)
+ return -1;
+ if (!found_ipv4) {
+ tor_addr_from_ipv4n(&cell_out->orport_ipv4.addr,
+ get_uint32(payload));
+ cell_out->orport_ipv4.port = ntohs(get_uint16(payload+4));
+ found_ipv4 = 1;
+ }
+ break;
+ case SPECTYPE_IPV6:
+ if (speclen != 18)
+ return -1;
+ if (!found_ipv6) {
+ tor_addr_from_ipv6_bytes(&cell_out->orport_ipv6.addr,
+ (const char*)payload);
+ cell_out->orport_ipv6.port = ntohs(get_uint16(payload+16));
+ found_ipv6 = 1;
+ }
+ break;
+ case SPECTYPE_LEGACY_ID:
+ if (speclen != 20)
+ return -1;
+ if (found_id)
+ return -1;
+ memcpy(cell_out->node_id, payload, 20);
+ found_id = 1;
+ break;
+ }
+ payload += speclen;
+ }
+ if (!found_id || !found_ipv4)
+ return -1;
+ if (parse_create2_payload(&cell_out->create_cell,payload,eop-payload)<0)
+ return -1;
+ break;
+ }
+ default:
+ return -1;
}
- /* use the rest of the key material for our shared keys, digests, etc */
- memcpy(key_out, key_material+DIGEST_LEN, key_out_len);
+ return check_extend_cell(cell_out);
+}
- memwipe(key_material, 0, key_material_len);
- tor_free(key_material);
- return 0;
- err:
- memwipe(key_material, 0, key_material_len);
- tor_free(key_material);
- return -1;
+/** Helper: return 0 if <b>cell</b> appears valid, -1 otherwise. */
+static int
+check_extended_cell(const extended_cell_t *cell)
+{
+ if (cell->created_cell.cell_type == CELL_CREATED) {
+ if (cell->cell_type != RELAY_COMMAND_EXTENDED)
+ return -1;
+ } else if (cell->created_cell.cell_type == CELL_CREATED2) {
+ if (cell->cell_type != RELAY_COMMAND_EXTENDED2)
+ return -1;
+ } else {
+ return -1;
+ }
+
+ return check_created_cell(&cell->created_cell);
}
-/** Implement the server side of the CREATE_FAST abbreviated handshake. The
- * client has provided DIGEST_LEN key bytes in <b>key_in</b> ("x"). We
- * generate a reply of DIGEST_LEN*2 bytes in <b>key_out</b>, consisting of a
- * new random "y", followed by H(x|y) to check for correctness. We set
- * <b>key_out_len</b> bytes of key material in <b>key_out</b>.
- * Return 0 on success, &lt;0 on failure.
- **/
+/** Parse an EXTENDED or EXTENDED2 cell (according to <b>command</b>) from the
+ * <b>payload_length</b> bytes of <b>payload</b> into <b>cell_out</b>. Return
+ * 0 on success, -1 on failure. */
int
-fast_server_handshake(const uint8_t *key_in, /* DIGEST_LEN bytes */
- uint8_t *handshake_reply_out, /* DIGEST_LEN*2 bytes */
- uint8_t *key_out,
- size_t key_out_len)
+extended_cell_parse(extended_cell_t *cell_out,
+ const uint8_t command, const uint8_t *payload,
+ size_t payload_len)
{
- char tmp[DIGEST_LEN+DIGEST_LEN];
- char *out = NULL;
- size_t out_len;
- int r = -1;
+ memset(cell_out, 0, sizeof(*cell_out));
+ if (payload_len > RELAY_PAYLOAD_SIZE)
+ return -1;
+
+ switch (command) {
+ case RELAY_COMMAND_EXTENDED:
+ if (payload_len != TAP_ONIONSKIN_REPLY_LEN)
+ return -1;
+ cell_out->cell_type = RELAY_COMMAND_EXTENDED;
+ cell_out->created_cell.cell_type = CELL_CREATED;
+ cell_out->created_cell.handshake_len = TAP_ONIONSKIN_REPLY_LEN;
+ memcpy(cell_out->created_cell.reply, payload, TAP_ONIONSKIN_REPLY_LEN);
+ break;
+ case RELAY_COMMAND_EXTENDED2:
+ {
+ cell_out->cell_type = RELAY_COMMAND_EXTENDED2;
+ cell_out->created_cell.cell_type = CELL_CREATED2;
+ cell_out->created_cell.handshake_len = ntohs(get_uint16(payload));
+ if (cell_out->created_cell.handshake_len > RELAY_PAYLOAD_SIZE - 2 ||
+ cell_out->created_cell.handshake_len > payload_len - 2)
+ return -1;
+ memcpy(cell_out->created_cell.reply, payload+2,
+ cell_out->created_cell.handshake_len);
+ }
+ break;
+ default:
+ return -1;
+ }
+
+ return check_extended_cell(cell_out);
+}
- if (crypto_rand((char*)handshake_reply_out, DIGEST_LEN)<0)
+/** Fill <b>cell_out</b> with a correctly formatted version of the
+ * CREATE{,_FAST,2} cell in <b>cell_in</b>. Return 0 on success, -1 on
+ * failure. This is a cell we didn't originate if <b>relayed</b> is true. */
+static int
+create_cell_format_impl(cell_t *cell_out, const create_cell_t *cell_in,
+ int relayed)
+{
+ uint8_t *p;
+ size_t space;
+ if (check_create_cell(cell_in, relayed) < 0)
return -1;
- memcpy(tmp, key_in, DIGEST_LEN);
- memcpy(tmp+DIGEST_LEN, handshake_reply_out, DIGEST_LEN);
- out_len = key_out_len+DIGEST_LEN;
- out = tor_malloc(out_len);
- if (crypto_expand_key_material(tmp, sizeof(tmp), out, out_len)) {
- goto done;
+ memset(cell_out->payload, 0, sizeof(cell_out->payload));
+ cell_out->command = cell_in->cell_type;
+
+ p = cell_out->payload;
+ space = sizeof(cell_out->payload);
+
+ switch (cell_in->cell_type) {
+ case CELL_CREATE:
+ if (cell_in->handshake_type == ONION_HANDSHAKE_TYPE_NTOR) {
+ memcpy(p, NTOR_CREATE_MAGIC, 16);
+ p += 16;
+ space -= 16;
+ }
+ /* Fall through */
+ case CELL_CREATE_FAST:
+ tor_assert(cell_in->handshake_len <= space);
+ memcpy(p, cell_in->onionskin, cell_in->handshake_len);
+ break;
+ case CELL_CREATE2:
+ tor_assert(cell_in->handshake_len <= sizeof(cell_out->payload)-4);
+ set_uint16(cell_out->payload, htons(cell_in->handshake_type));
+ set_uint16(cell_out->payload+2, htons(cell_in->handshake_len));
+ memcpy(cell_out->payload + 4, cell_in->onionskin, cell_in->handshake_len);
+ break;
+ default:
+ return -1;
}
- memcpy(handshake_reply_out+DIGEST_LEN, out, DIGEST_LEN);
- memcpy(key_out, out+DIGEST_LEN, key_out_len);
- r = 0;
- done:
- memwipe(tmp, 0, sizeof(tmp));
- memwipe(out, 0, out_len);
- tor_free(out);
- return r;
+
+ return 0;
}
-/** Implement the second half of the client side of the CREATE_FAST handshake.
- * We sent the server <b>handshake_state</b> ("x") already, and the server
- * told us <b>handshake_reply_out</b> (y|H(x|y)). Make sure that the hash is
- * correct, and generate key material in <b>key_out</b>. Return 0 on success,
- * true on failure.
- *
- * NOTE: The "CREATE_FAST" handshake path is distinguishable from regular
- * "onionskin" handshakes, and is not secure if an adversary can see or modify
- * the messages. Therefore, it should only be used by clients, and only as
- * the first hop of a circuit (since the first hop is already authenticated
- * and protected by TLS).
- */
int
-fast_client_handshake(const uint8_t *handshake_state,/*DIGEST_LEN bytes*/
- const uint8_t *handshake_reply_out,/*DIGEST_LEN*2 bytes*/
- uint8_t *key_out,
- size_t key_out_len)
+create_cell_format(cell_t *cell_out, const create_cell_t *cell_in)
{
- char tmp[DIGEST_LEN+DIGEST_LEN];
- char *out;
- size_t out_len;
- int r = -1;
+ return create_cell_format_impl(cell_out, cell_in, 0);
+}
+
+int
+create_cell_format_relayed(cell_t *cell_out, const create_cell_t *cell_in)
+{
+ return create_cell_format_impl(cell_out, cell_in, 1);
+}
- memcpy(tmp, handshake_state, DIGEST_LEN);
- memcpy(tmp+DIGEST_LEN, handshake_reply_out, DIGEST_LEN);
- out_len = key_out_len+DIGEST_LEN;
- out = tor_malloc(out_len);
- if (crypto_expand_key_material(tmp, sizeof(tmp), out, out_len)) {
- goto done;
+/** Fill <b>cell_out</b> with a correctly formatted version of the
+ * CREATED{,_FAST,2} cell in <b>cell_in</b>. Return 0 on success, -1 on
+ * failure. */
+int
+created_cell_format(cell_t *cell_out, const created_cell_t *cell_in)
+{
+ if (check_created_cell(cell_in) < 0)
+ return -1;
+
+ memset(cell_out->payload, 0, sizeof(cell_out->payload));
+ cell_out->command = cell_in->cell_type;
+
+ switch (cell_in->cell_type) {
+ case CELL_CREATED:
+ case CELL_CREATED_FAST:
+ tor_assert(cell_in->handshake_len <= sizeof(cell_out->payload));
+ memcpy(cell_out->payload, cell_in->reply, cell_in->handshake_len);
+ break;
+ case CELL_CREATED2:
+ tor_assert(cell_in->handshake_len <= sizeof(cell_out->payload)-2);
+ set_uint16(cell_out->payload, htons(cell_in->handshake_len));
+ memcpy(cell_out->payload + 2, cell_in->reply, cell_in->handshake_len);
+ break;
+ default:
+ return -1;
}
- if (tor_memneq(out, handshake_reply_out+DIGEST_LEN, DIGEST_LEN)) {
- /* H(K) does *not* match. Something fishy. */
- log_warn(LD_PROTOCOL,"Digest DOES NOT MATCH on fast handshake. "
- "Bug or attack.");
- goto done;
+ return 0;
+}
+
+/** Format the EXTEND{,2} cell in <b>cell_in</b>, storing its relay payload in
+ * <b>payload_out</b>, the number of bytes used in *<b>len_out</b>, and the
+ * relay command in *<b>command_out</b>. The <b>payload_out</b> must have
+ * RELAY_PAYLOAD_SIZE bytes available. Return 0 on success, -1 on failure. */
+int
+extend_cell_format(uint8_t *command_out, uint16_t *len_out,
+ uint8_t *payload_out, const extend_cell_t *cell_in)
+{
+ uint8_t *p, *eop;
+ if (check_extend_cell(cell_in) < 0)
+ return -1;
+
+ p = payload_out;
+ eop = payload_out + RELAY_PAYLOAD_SIZE;
+
+ memset(p, 0, RELAY_PAYLOAD_SIZE);
+
+ switch (cell_in->cell_type) {
+ case RELAY_COMMAND_EXTEND:
+ {
+ *command_out = RELAY_COMMAND_EXTEND;
+ *len_out = 6 + TAP_ONIONSKIN_CHALLENGE_LEN + DIGEST_LEN;
+ set_uint32(p, tor_addr_to_ipv4n(&cell_in->orport_ipv4.addr));
+ set_uint16(p+4, ntohs(cell_in->orport_ipv4.port));
+ if (cell_in->create_cell.handshake_type == ONION_HANDSHAKE_TYPE_NTOR) {
+ memcpy(p+6, NTOR_CREATE_MAGIC, 16);
+ memcpy(p+22, cell_in->create_cell.onionskin, NTOR_ONIONSKIN_LEN);
+ } else {
+ memcpy(p+6, cell_in->create_cell.onionskin,
+ TAP_ONIONSKIN_CHALLENGE_LEN);
+ }
+ memcpy(p+6+TAP_ONIONSKIN_CHALLENGE_LEN, cell_in->node_id, DIGEST_LEN);
+ }
+ break;
+ case RELAY_COMMAND_EXTEND2:
+ {
+ uint8_t n = 2;
+ *command_out = RELAY_COMMAND_EXTEND2;
+
+ *p++ = n; /* 2 identifiers */
+ *p++ = SPECTYPE_IPV4; /* First is IPV4. */
+ *p++ = 6; /* It's 6 bytes long. */
+ set_uint32(p, tor_addr_to_ipv4n(&cell_in->orport_ipv4.addr));
+ set_uint16(p+4, htons(cell_in->orport_ipv4.port));
+ p += 6;
+ *p++ = SPECTYPE_LEGACY_ID; /* Next is an identity digest. */
+ *p++ = 20; /* It's 20 bytes long */
+ memcpy(p, cell_in->node_id, DIGEST_LEN);
+ p += 20;
+
+ /* Now we can send the handshake */
+ set_uint16(p, htons(cell_in->create_cell.handshake_type));
+ set_uint16(p+2, htons(cell_in->create_cell.handshake_len));
+ p += 4;
+
+ if (cell_in->create_cell.handshake_len > eop - p)
+ return -1;
+
+ memcpy(p, cell_in->create_cell.onionskin,
+ cell_in->create_cell.handshake_len);
+
+ p += cell_in->create_cell.handshake_len;
+ *len_out = p - payload_out;
+ }
+ break;
+ default:
+ return -1;
}
- memcpy(key_out, out+DIGEST_LEN, key_out_len);
- r = 0;
- done:
- memwipe(tmp, 0, sizeof(tmp));
- memwipe(out, 0, out_len);
- tor_free(out);
- return r;
+
+ return 0;
}
-/** Remove all circuits from the pending list. Called from tor_free_all. */
-void
-clear_pending_onions(void)
+/** Format the EXTENDED{,2} cell in <b>cell_in</b>, storing its relay payload
+ * in <b>payload_out</b>, the number of bytes used in *<b>len_out</b>, and the
+ * relay command in *<b>command_out</b>. The <b>payload_out</b> must have
+ * RELAY_PAYLOAD_SIZE bytes available. Return 0 on success, -1 on failure. */
+int
+extended_cell_format(uint8_t *command_out, uint16_t *len_out,
+ uint8_t *payload_out, const extended_cell_t *cell_in)
{
- while (ol_list) {
- onion_queue_t *victim = ol_list;
- ol_list = victim->next;
- tor_free(victim->onionskin);
- tor_free(victim);
+ uint8_t *p;
+ if (check_extended_cell(cell_in) < 0)
+ return -1;
+
+ p = payload_out;
+ memset(p, 0, RELAY_PAYLOAD_SIZE);
+
+ switch (cell_in->cell_type) {
+ case RELAY_COMMAND_EXTENDED:
+ {
+ *command_out = RELAY_COMMAND_EXTENDED;
+ *len_out = TAP_ONIONSKIN_REPLY_LEN;
+ memcpy(payload_out, cell_in->created_cell.reply,
+ TAP_ONIONSKIN_REPLY_LEN);
+ }
+ break;
+ case RELAY_COMMAND_EXTENDED2:
+ {
+ *command_out = RELAY_COMMAND_EXTENDED2;
+ *len_out = 2 + cell_in->created_cell.handshake_len;
+ set_uint16(payload_out, htons(cell_in->created_cell.handshake_len));
+ if (2+cell_in->created_cell.handshake_len > RELAY_PAYLOAD_SIZE)
+ return -1;
+ memcpy(payload_out+2, cell_in->created_cell.reply,
+ cell_in->created_cell.handshake_len);
+ }
+ break;
+ default:
+ return -1;
}
- ol_list = ol_tail = NULL;
- ol_length = 0;
+
+ return 0;
}
diff --git a/src/or/onion.h b/src/or/onion.h
index 7e0f873c7..d62f032b8 100644
--- a/src/or/onion.h
+++ b/src/or/onion.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,40 +9,114 @@
* \brief Header file for onion.c.
**/
-#ifndef _TOR_ONION_H
-#define _TOR_ONION_H
+#ifndef TOR_ONION_H
+#define TOR_ONION_H
-int onion_pending_add(or_circuit_t *circ, char *onionskin);
-or_circuit_t *onion_next_task(char **onionskin_out);
+struct create_cell_t;
+int onion_pending_add(or_circuit_t *circ, struct create_cell_t *onionskin);
+or_circuit_t *onion_next_task(struct create_cell_t **onionskin_out);
+int onion_num_pending(uint16_t handshake_type);
void onion_pending_remove(or_circuit_t *circ);
+void clear_pending_onions(void);
+
+typedef struct server_onion_keys_t {
+ uint8_t my_identity[DIGEST_LEN];
+ crypto_pk_t *onion_key;
+ crypto_pk_t *last_onion_key;
+#ifdef CURVE25519_ENABLED
+ di_digest256_map_t *curve25519_key_map;
+ curve25519_keypair_t *junk_keypair;
+#endif
+} server_onion_keys_t;
-int onion_skin_create(crypto_pk_t *router_key,
- crypto_dh_t **handshake_state_out,
- char *onion_skin_out);
+#define MAX_ONIONSKIN_CHALLENGE_LEN 255
+#define MAX_ONIONSKIN_REPLY_LEN 255
-int onion_skin_server_handshake(const char *onion_skin,
- crypto_pk_t *private_key,
- crypto_pk_t *prev_private_key,
- char *handshake_reply_out,
- char *key_out,
- size_t key_out_len);
+void setup_server_onion_keys(server_onion_keys_t *keys);
+void release_server_onion_keys(server_onion_keys_t *keys);
-int onion_skin_client_handshake(crypto_dh_t *handshake_state,
- const char *handshake_reply,
- char *key_out,
- size_t key_out_len);
+void onion_handshake_state_release(onion_handshake_state_t *state);
-int fast_server_handshake(const uint8_t *key_in,
- uint8_t *handshake_reply_out,
- uint8_t *key_out,
- size_t key_out_len);
+int onion_skin_create(int type,
+ const extend_info_t *node,
+ onion_handshake_state_t *state_out,
+ uint8_t *onion_skin_out);
+int onion_skin_server_handshake(int type,
+ const uint8_t *onion_skin, size_t onionskin_len,
+ const server_onion_keys_t *keys,
+ uint8_t *reply_out,
+ uint8_t *keys_out, size_t key_out_len,
+ uint8_t *rend_nonce_out);
+int onion_skin_client_handshake(int type,
+ const onion_handshake_state_t *handshake_state,
+ const uint8_t *reply, size_t reply_len,
+ uint8_t *keys_out, size_t key_out_len,
+ uint8_t *rend_authenticator_out);
-int fast_client_handshake(const uint8_t *handshake_state,
- const uint8_t *handshake_reply_out,
- uint8_t *key_out,
- size_t key_out_len);
+/** A parsed CREATE, CREATE_FAST, or CREATE2 cell. */
+typedef struct create_cell_t {
+ /** The cell command. One of CREATE{,_FAST,2} */
+ uint8_t cell_type;
+ /** One of the ONION_HANDSHAKE_TYPE_* values */
+ uint16_t handshake_type;
+ /** The number of bytes used in <b>onionskin</b>. */
+ uint16_t handshake_len;
+ /** The client-side message for the circuit creation handshake. */
+ uint8_t onionskin[CELL_PAYLOAD_SIZE - 4];
+} create_cell_t;
-void clear_pending_onions(void);
+/** A parsed CREATED, CREATED_FAST, or CREATED2 cell. */
+typedef struct created_cell_t {
+ /** The cell command. One of CREATED{,_FAST,2} */
+ uint8_t cell_type;
+ /** The number of bytes used in <b>reply</b>. */
+ uint16_t handshake_len;
+ /** The server-side message for the circuit creation handshake. */
+ uint8_t reply[CELL_PAYLOAD_SIZE - 2];
+} created_cell_t;
+
+/** A parsed RELAY_EXTEND or RELAY_EXTEND2 cell */
+typedef struct extend_cell_t {
+ /** One of RELAY_EXTEND or RELAY_EXTEND2 */
+ uint8_t cell_type;
+ /** An IPv4 address and port for the node we're connecting to. */
+ tor_addr_port_t orport_ipv4;
+ /** An IPv6 address and port for the node we're connecting to. Not currently
+ * used. */
+ tor_addr_port_t orport_ipv6;
+ /** Identity fingerprint of the node we're conecting to.*/
+ uint8_t node_id[DIGEST_LEN];
+ /** The "create cell" embedded in this extend cell. Note that unlike the
+ * create cells we generate ourself, this once can have a handshake type we
+ * don't recognize. */
+ create_cell_t create_cell;
+} extend_cell_t;
+
+/** A parsed RELAY_EXTEND or RELAY_EXTEND2 cell */
+typedef struct extended_cell_t {
+ /** One of RELAY_EXTENDED or RELAY_EXTENDED2. */
+ uint8_t cell_type;
+ /** The "created cell" embedded in this extended cell. */
+ created_cell_t created_cell;
+} extended_cell_t;
+
+void create_cell_init(create_cell_t *cell_out, uint8_t cell_type,
+ uint16_t handshake_type, uint16_t handshake_len,
+ const uint8_t *onionskin);
+int create_cell_parse(create_cell_t *cell_out, const cell_t *cell_in);
+int created_cell_parse(created_cell_t *cell_out, const cell_t *cell_in);
+int extend_cell_parse(extend_cell_t *cell_out, const uint8_t command,
+ const uint8_t *payload_in, size_t payload_len);
+int extended_cell_parse(extended_cell_t *cell_out, const uint8_t command,
+ const uint8_t *payload_in, size_t payload_len);
+
+int create_cell_format(cell_t *cell_out, const create_cell_t *cell_in);
+int create_cell_format_relayed(cell_t *cell_out, const create_cell_t *cell_in);
+int created_cell_format(cell_t *cell_out, const created_cell_t *cell_in);
+int extend_cell_format(uint8_t *command_out, uint16_t *len_out,
+ uint8_t *payload_out, const extend_cell_t *cell_in);
+int extended_cell_format(uint8_t *command_out, uint16_t *len_out,
+ uint8_t *payload_out, const extended_cell_t *cell_in);
#endif
diff --git a/src/or/onion_fast.c b/src/or/onion_fast.c
new file mode 100644
index 000000000..38b62decc
--- /dev/null
+++ b/src/or/onion_fast.c
@@ -0,0 +1,124 @@
+/* Copyright (c) 2001 Matej Pfajfar.
+ * Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file onion_fast.c
+ * \brief Functions implement the CREATE_FAST circuit handshake.
+ **/
+
+#include "or.h"
+#include "onion_fast.h"
+
+/** Release all state held in <b>victim</b>. */
+void
+fast_handshake_state_free(fast_handshake_state_t *victim)
+{
+ if (! victim)
+ return;
+ memwipe(victim, 0, sizeof(fast_handshake_state_t));
+ tor_free(victim);
+}
+
+/** Create the state needed to perform a CREATE_FAST handshake. Return 0
+ * on success, -1 on failure. */
+int
+fast_onionskin_create(fast_handshake_state_t **handshake_state_out,
+ uint8_t *handshake_out)
+{
+ fast_handshake_state_t *s;
+ *handshake_state_out = s = tor_malloc(sizeof(fast_handshake_state_t));
+ if (crypto_rand((char*)s->state, sizeof(s->state)) < 0) {
+ tor_free(s);
+ return -1;
+ }
+ memcpy(handshake_out, s->state, DIGEST_LEN);
+ return 0;
+}
+
+/** Implement the server side of the CREATE_FAST abbreviated handshake. The
+ * client has provided DIGEST_LEN key bytes in <b>key_in</b> ("x"). We
+ * generate a reply of DIGEST_LEN*2 bytes in <b>key_out</b>, consisting of a
+ * new random "y", followed by H(x|y) to check for correctness. We set
+ * <b>key_out_len</b> bytes of key material in <b>key_out</b>.
+ * Return 0 on success, &lt;0 on failure.
+ **/
+int
+fast_server_handshake(const uint8_t *key_in, /* DIGEST_LEN bytes */
+ uint8_t *handshake_reply_out, /* DIGEST_LEN*2 bytes */
+ uint8_t *key_out,
+ size_t key_out_len)
+{
+ uint8_t tmp[DIGEST_LEN+DIGEST_LEN];
+ uint8_t *out = NULL;
+ size_t out_len;
+ int r = -1;
+
+ if (crypto_rand((char*)handshake_reply_out, DIGEST_LEN)<0)
+ return -1;
+
+ memcpy(tmp, key_in, DIGEST_LEN);
+ memcpy(tmp+DIGEST_LEN, handshake_reply_out, DIGEST_LEN);
+ out_len = key_out_len+DIGEST_LEN;
+ out = tor_malloc(out_len);
+ if (crypto_expand_key_material_TAP(tmp, sizeof(tmp), out, out_len)) {
+ goto done;
+ }
+ memcpy(handshake_reply_out+DIGEST_LEN, out, DIGEST_LEN);
+ memcpy(key_out, out+DIGEST_LEN, key_out_len);
+ r = 0;
+ done:
+ memwipe(tmp, 0, sizeof(tmp));
+ memwipe(out, 0, out_len);
+ tor_free(out);
+ return r;
+}
+
+/** Implement the second half of the client side of the CREATE_FAST handshake.
+ * We sent the server <b>handshake_state</b> ("x") already, and the server
+ * told us <b>handshake_reply_out</b> (y|H(x|y)). Make sure that the hash is
+ * correct, and generate key material in <b>key_out</b>. Return 0 on success,
+ * true on failure.
+ *
+ * NOTE: The "CREATE_FAST" handshake path is distinguishable from regular
+ * "onionskin" handshakes, and is not secure if an adversary can see or modify
+ * the messages. Therefore, it should only be used by clients, and only as
+ * the first hop of a circuit (since the first hop is already authenticated
+ * and protected by TLS).
+ */
+int
+fast_client_handshake(const fast_handshake_state_t *handshake_state,
+ const uint8_t *handshake_reply_out,/*DIGEST_LEN*2 bytes*/
+ uint8_t *key_out,
+ size_t key_out_len)
+{
+ uint8_t tmp[DIGEST_LEN+DIGEST_LEN];
+ uint8_t *out;
+ size_t out_len;
+ int r = -1;
+
+ memcpy(tmp, handshake_state->state, DIGEST_LEN);
+ memcpy(tmp+DIGEST_LEN, handshake_reply_out, DIGEST_LEN);
+ out_len = key_out_len+DIGEST_LEN;
+ out = tor_malloc(out_len);
+ if (crypto_expand_key_material_TAP(tmp, sizeof(tmp), out, out_len)) {
+ log_warn(LD_CIRC, "Failed to expand key material");
+ goto done;
+ }
+ if (tor_memneq(out, handshake_reply_out+DIGEST_LEN, DIGEST_LEN)) {
+ /* H(K) does *not* match. Something fishy. */
+ log_warn(LD_PROTOCOL,"Digest DOES NOT MATCH on fast handshake. "
+ "Bug or attack.");
+ goto done;
+ }
+ memcpy(key_out, out+DIGEST_LEN, key_out_len);
+ r = 0;
+ done:
+ memwipe(tmp, 0, sizeof(tmp));
+ memwipe(out, 0, out_len);
+ tor_free(out);
+ return r;
+}
+
diff --git a/src/or/onion_fast.h b/src/or/onion_fast.h
new file mode 100644
index 000000000..8c078378d
--- /dev/null
+++ b/src/or/onion_fast.h
@@ -0,0 +1,38 @@
+/* Copyright (c) 2001 Matej Pfajfar.
+ * Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file onion_fast.h
+ * \brief Header file for onion_fast.c.
+ **/
+
+#ifndef TOR_ONION_FAST_H
+#define TOR_ONION_FAST_H
+
+#define CREATE_FAST_LEN DIGEST_LEN
+#define CREATED_FAST_LEN (DIGEST_LEN*2)
+
+typedef struct fast_handshake_state_t {
+ uint8_t state[DIGEST_LEN];
+} fast_handshake_state_t;
+
+void fast_handshake_state_free(fast_handshake_state_t *victim);
+
+int fast_onionskin_create(fast_handshake_state_t **handshake_state_out,
+ uint8_t *handshake_out);
+
+int fast_server_handshake(const uint8_t *message_in,
+ uint8_t *handshake_reply_out,
+ uint8_t *key_out,
+ size_t key_out_len);
+
+int fast_client_handshake(const fast_handshake_state_t *handshake_state,
+ const uint8_t *handshake_reply_out,
+ uint8_t *key_out,
+ size_t key_out_len);
+
+#endif
+
diff --git a/src/or/onion_ntor.c b/src/or/onion_ntor.c
new file mode 100644
index 000000000..ef501f69d
--- /dev/null
+++ b/src/or/onion_ntor.c
@@ -0,0 +1,300 @@
+/* Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#include "orconfig.h"
+
+#include "crypto.h"
+#define ONION_NTOR_PRIVATE
+#include "onion_ntor.h"
+#include "torlog.h"
+#include "util.h"
+
+/** Free storage held in an ntor handshake state. */
+void
+ntor_handshake_state_free(ntor_handshake_state_t *state)
+{
+ if (!state)
+ return;
+ memwipe(state, 0, sizeof(*state));
+ tor_free(state);
+}
+
+/** Convenience function to represent HMAC_SHA256 as our instantiation of
+ * ntor's "tweaked hash'. Hash the <b>inp_len</b> bytes at <b>inp</b> into
+ * a DIGEST256_LEN-byte digest at <b>out</b>, with the hash changing
+ * depending on the value of <b>tweak</b>. */
+static void
+h_tweak(uint8_t *out,
+ const uint8_t *inp, size_t inp_len,
+ const char *tweak)
+{
+ size_t tweak_len = strlen(tweak);
+ crypto_hmac_sha256((char*)out, tweak, tweak_len, (const char*)inp, inp_len);
+}
+
+/** Wrapper around a set of tweak-values for use with the ntor handshake. */
+typedef struct tweakset_t {
+ const char *t_mac;
+ const char *t_key;
+ const char *t_verify;
+ const char *m_expand;
+} tweakset_t;
+
+/** The tweaks to be used with our handshake. */
+const tweakset_t proto1_tweaks = {
+#define PROTOID "ntor-curve25519-sha256-1"
+#define PROTOID_LEN 24
+ PROTOID ":mac",
+ PROTOID ":key_extract",
+ PROTOID ":verify",
+ PROTOID ":key_expand"
+};
+
+/** Convenience macro: copy <b>len</b> bytes from <b>inp</b> to <b>ptr</b>,
+ * and advance <b>ptr</b> by the number of bytes copied. */
+#define APPEND(ptr, inp, len) \
+ STMT_BEGIN { \
+ memcpy(ptr, (inp), (len)); \
+ ptr += len; \
+ } STMT_END
+
+/**
+ * Compute the first client-side step of the ntor handshake for communicating
+ * with a server whose DIGEST_LEN-byte server identity is <b>router_id</b>,
+ * and whose onion key is <b>router_key</b>. Store the NTOR_ONIONSKIN_LEN-byte
+ * message in <b>onion_skin_out</b>, and store the handshake state in
+ * *<b>handshake_state_out</b>. Return 0 on success, -1 on failure.
+ */
+int
+onion_skin_ntor_create(const uint8_t *router_id,
+ const curve25519_public_key_t *router_key,
+ ntor_handshake_state_t **handshake_state_out,
+ uint8_t *onion_skin_out)
+{
+ ntor_handshake_state_t *state;
+ uint8_t *op;
+
+ state = tor_malloc_zero(sizeof(ntor_handshake_state_t));
+
+ memcpy(state->router_id, router_id, DIGEST_LEN);
+ memcpy(&state->pubkey_B, router_key, sizeof(curve25519_public_key_t));
+ if (curve25519_secret_key_generate(&state->seckey_x, 0) < 0) {
+ tor_free(state);
+ return -1;
+ }
+ curve25519_public_key_generate(&state->pubkey_X, &state->seckey_x);
+
+ op = onion_skin_out;
+ APPEND(op, router_id, DIGEST_LEN);
+ APPEND(op, router_key->public_key, CURVE25519_PUBKEY_LEN);
+ APPEND(op, state->pubkey_X.public_key, CURVE25519_PUBKEY_LEN);
+ tor_assert(op == onion_skin_out + NTOR_ONIONSKIN_LEN);
+
+ *handshake_state_out = state;
+
+ return 0;
+}
+
+#define SERVER_STR "Server"
+#define SERVER_STR_LEN 6
+
+#define SECRET_INPUT_LEN (CURVE25519_PUBKEY_LEN * 3 + \
+ CURVE25519_OUTPUT_LEN * 2 + \
+ DIGEST_LEN + PROTOID_LEN)
+#define AUTH_INPUT_LEN (DIGEST256_LEN + DIGEST_LEN + \
+ CURVE25519_PUBKEY_LEN*3 + \
+ PROTOID_LEN + SERVER_STR_LEN)
+
+/**
+ * Perform the server side of an ntor handshake. Given an
+ * NTOR_ONIONSKIN_LEN-byte message in <b>onion_skin</b>, our own identity
+ * fingerprint as <b>my_node_id</b>, and an associative array mapping public
+ * onion keys to curve25519_keypair_t in <b>private_keys</b>, attempt to
+ * perform the handshake. Use <b>junk_keys</b> if present if the handshake
+ * indicates an unrecognized public key. Write an NTOR_REPLY_LEN-byte
+ * message to send back to the client into <b>handshake_reply_out</b>, and
+ * generate <b>key_out_len</b> bytes of key material in <b>key_out</b>. Return
+ * 0 on success, -1 on failure.
+ */
+int
+onion_skin_ntor_server_handshake(const uint8_t *onion_skin,
+ const di_digest256_map_t *private_keys,
+ const curve25519_keypair_t *junk_keys,
+ const uint8_t *my_node_id,
+ uint8_t *handshake_reply_out,
+ uint8_t *key_out,
+ size_t key_out_len)
+{
+ const tweakset_t *T = &proto1_tweaks;
+ /* Sensitive stack-allocated material. Kept in an anonymous struct to make
+ * it easy to wipe. */
+ struct {
+ uint8_t secret_input[SECRET_INPUT_LEN];
+ uint8_t auth_input[AUTH_INPUT_LEN];
+ curve25519_public_key_t pubkey_X;
+ curve25519_secret_key_t seckey_y;
+ curve25519_public_key_t pubkey_Y;
+ uint8_t verify[DIGEST256_LEN];
+ } s;
+ uint8_t *si = s.secret_input, *ai = s.auth_input;
+ const curve25519_keypair_t *keypair_bB;
+ int bad;
+
+ /* Decode the onion skin */
+ /* XXXX Does this possible early-return business threaten our security? */
+ if (tor_memneq(onion_skin, my_node_id, DIGEST_LEN))
+ return -1;
+ /* Note that on key-not-found, we go through with this operation anyway,
+ * using "junk_keys". This will result in failed authentication, but won't
+ * leak whether we recognized the key. */
+ keypair_bB = dimap_search(private_keys, onion_skin + DIGEST_LEN,
+ (void*)junk_keys);
+ if (!keypair_bB)
+ return -1;
+
+ memcpy(s.pubkey_X.public_key, onion_skin+DIGEST_LEN+DIGEST256_LEN,
+ CURVE25519_PUBKEY_LEN);
+
+ /* Make y, Y */
+ curve25519_secret_key_generate(&s.seckey_y, 0);
+ curve25519_public_key_generate(&s.pubkey_Y, &s.seckey_y);
+
+ /* NOTE: If we ever use a group other than curve25519, or a different
+ * representation for its points, we may need to perform different or
+ * additional checks on X here and on Y in the client handshake, or lose our
+ * security properties. What checks we need would depend on the properties
+ * of the group and its representation.
+ *
+ * In short: if you use anything other than curve25519, this aspect of the
+ * code will need to be reconsidered carefully. */
+
+ /* build secret_input */
+ curve25519_handshake(si, &s.seckey_y, &s.pubkey_X);
+ bad = safe_mem_is_zero(si, CURVE25519_OUTPUT_LEN);
+ si += CURVE25519_OUTPUT_LEN;
+ curve25519_handshake(si, &keypair_bB->seckey, &s.pubkey_X);
+ bad |= safe_mem_is_zero(si, CURVE25519_OUTPUT_LEN);
+ si += CURVE25519_OUTPUT_LEN;
+
+ APPEND(si, my_node_id, DIGEST_LEN);
+ APPEND(si, keypair_bB->pubkey.public_key, CURVE25519_PUBKEY_LEN);
+ APPEND(si, s.pubkey_X.public_key, CURVE25519_PUBKEY_LEN);
+ APPEND(si, s.pubkey_Y.public_key, CURVE25519_PUBKEY_LEN);
+ APPEND(si, PROTOID, PROTOID_LEN);
+ tor_assert(si == s.secret_input + sizeof(s.secret_input));
+
+ /* Compute hashes of secret_input */
+ h_tweak(s.verify, s.secret_input, sizeof(s.secret_input), T->t_verify);
+
+ /* Compute auth_input */
+ APPEND(ai, s.verify, DIGEST256_LEN);
+ APPEND(ai, my_node_id, DIGEST_LEN);
+ APPEND(ai, keypair_bB->pubkey.public_key, CURVE25519_PUBKEY_LEN);
+ APPEND(ai, s.pubkey_Y.public_key, CURVE25519_PUBKEY_LEN);
+ APPEND(ai, s.pubkey_X.public_key, CURVE25519_PUBKEY_LEN);
+ APPEND(ai, PROTOID, PROTOID_LEN);
+ APPEND(ai, SERVER_STR, SERVER_STR_LEN);
+ tor_assert(ai == s.auth_input + sizeof(s.auth_input));
+
+ /* Build the reply */
+ memcpy(handshake_reply_out, s.pubkey_Y.public_key, CURVE25519_PUBKEY_LEN);
+ h_tweak(handshake_reply_out+CURVE25519_PUBKEY_LEN,
+ s.auth_input, sizeof(s.auth_input),
+ T->t_mac);
+
+ /* Generate the key material */
+ crypto_expand_key_material_rfc5869_sha256(
+ s.secret_input, sizeof(s.secret_input),
+ (const uint8_t*)T->t_key, strlen(T->t_key),
+ (const uint8_t*)T->m_expand, strlen(T->m_expand),
+ key_out, key_out_len);
+
+ /* Wipe all of our local state */
+ memwipe(&s, 0, sizeof(s));
+
+ return bad ? -1 : 0;
+}
+
+/**
+ * Perform the final client side of the ntor handshake, using the state in
+ * <b>handshake_state</b> and the server's NTOR_REPLY_LEN-byte reply in
+ * <b>handshake_reply</b>. Generate <b>key_out_len</b> bytes of key material
+ * in <b>key_out</b>. Return 0 on success, -1 on failure.
+ */
+int
+onion_skin_ntor_client_handshake(
+ const ntor_handshake_state_t *handshake_state,
+ const uint8_t *handshake_reply,
+ uint8_t *key_out,
+ size_t key_out_len)
+{
+ const tweakset_t *T = &proto1_tweaks;
+ /* Sensitive stack-allocated material. Kept in an anonymous struct to make
+ * it easy to wipe. */
+ struct {
+ curve25519_public_key_t pubkey_Y;
+ uint8_t secret_input[SECRET_INPUT_LEN];
+ uint8_t verify[DIGEST256_LEN];
+ uint8_t auth_input[AUTH_INPUT_LEN];
+ uint8_t auth[DIGEST256_LEN];
+ } s;
+ uint8_t *ai = s.auth_input, *si = s.secret_input;
+ const uint8_t *auth_candidate;
+ int bad;
+
+ /* Decode input */
+ memcpy(s.pubkey_Y.public_key, handshake_reply, CURVE25519_PUBKEY_LEN);
+ auth_candidate = handshake_reply + CURVE25519_PUBKEY_LEN;
+
+ /* See note in server_handshake above about checking points. The
+ * circumstances under which we'd need to check Y for membership are
+ * different than those under which we'd be checking X. */
+
+ /* Compute secret_input */
+ curve25519_handshake(si, &handshake_state->seckey_x, &s.pubkey_Y);
+ bad = safe_mem_is_zero(si, CURVE25519_OUTPUT_LEN);
+ si += CURVE25519_OUTPUT_LEN;
+ curve25519_handshake(si, &handshake_state->seckey_x,
+ &handshake_state->pubkey_B);
+ bad |= (safe_mem_is_zero(si, CURVE25519_OUTPUT_LEN) << 1);
+ si += CURVE25519_OUTPUT_LEN;
+ APPEND(si, handshake_state->router_id, DIGEST_LEN);
+ APPEND(si, handshake_state->pubkey_B.public_key, CURVE25519_PUBKEY_LEN);
+ APPEND(si, handshake_state->pubkey_X.public_key, CURVE25519_PUBKEY_LEN);
+ APPEND(si, s.pubkey_Y.public_key, CURVE25519_PUBKEY_LEN);
+ APPEND(si, PROTOID, PROTOID_LEN);
+ tor_assert(si == s.secret_input + sizeof(s.secret_input));
+
+ /* Compute verify from secret_input */
+ h_tweak(s.verify, s.secret_input, sizeof(s.secret_input), T->t_verify);
+
+ /* Compute auth_input */
+ APPEND(ai, s.verify, DIGEST256_LEN);
+ APPEND(ai, handshake_state->router_id, DIGEST_LEN);
+ APPEND(ai, handshake_state->pubkey_B.public_key, CURVE25519_PUBKEY_LEN);
+ APPEND(ai, s.pubkey_Y.public_key, CURVE25519_PUBKEY_LEN);
+ APPEND(ai, handshake_state->pubkey_X.public_key, CURVE25519_PUBKEY_LEN);
+ APPEND(ai, PROTOID, PROTOID_LEN);
+ APPEND(ai, SERVER_STR, SERVER_STR_LEN);
+ tor_assert(ai == s.auth_input + sizeof(s.auth_input));
+
+ /* Compute auth */
+ h_tweak(s.auth, s.auth_input, sizeof(s.auth_input), T->t_mac);
+
+ bad |= (tor_memneq(s.auth, auth_candidate, DIGEST256_LEN) << 2);
+
+ crypto_expand_key_material_rfc5869_sha256(
+ s.secret_input, sizeof(s.secret_input),
+ (const uint8_t*)T->t_key, strlen(T->t_key),
+ (const uint8_t*)T->m_expand, strlen(T->m_expand),
+ key_out, key_out_len);
+
+ memwipe(&s, 0, sizeof(s));
+
+ if (bad) {
+ log_warn(LD_PROTOCOL, "Invalid result from curve25519 handshake: %d", bad);
+ }
+
+ return bad ? -1 : 0;
+}
+
diff --git a/src/or/onion_ntor.h b/src/or/onion_ntor.h
new file mode 100644
index 000000000..c942e6e0f
--- /dev/null
+++ b/src/or/onion_ntor.h
@@ -0,0 +1,63 @@
+/* Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#ifndef TOR_ONION_NTOR_H
+#define TOR_ONION_NTOR_H
+
+#include "torint.h"
+#include "crypto_curve25519.h"
+#include "di_ops.h"
+
+/** State to be maintained by a client between sending an ntor onionskin
+ * and receiving a reply. */
+typedef struct ntor_handshake_state_t ntor_handshake_state_t;
+
+/** Length of an ntor onionskin, as sent from the client to server. */
+#define NTOR_ONIONSKIN_LEN 84
+/** Length of an ntor reply, as sent from server to client. */
+#define NTOR_REPLY_LEN 64
+
+#ifdef CURVE25519_ENABLED
+void ntor_handshake_state_free(ntor_handshake_state_t *state);
+
+int onion_skin_ntor_create(const uint8_t *router_id,
+ const curve25519_public_key_t *router_key,
+ ntor_handshake_state_t **handshake_state_out,
+ uint8_t *onion_skin_out);
+
+int onion_skin_ntor_server_handshake(const uint8_t *onion_skin,
+ const di_digest256_map_t *private_keys,
+ const curve25519_keypair_t *junk_keypair,
+ const uint8_t *my_node_id,
+ uint8_t *handshake_reply_out,
+ uint8_t *key_out,
+ size_t key_out_len);
+
+int onion_skin_ntor_client_handshake(
+ const ntor_handshake_state_t *handshake_state,
+ const uint8_t *handshake_reply,
+ uint8_t *key_out,
+ size_t key_out_len);
+
+#ifdef ONION_NTOR_PRIVATE
+
+/** Storage held by a client while waiting for an ntor reply from a server. */
+struct ntor_handshake_state_t {
+ /** Identity digest of the router we're talking to. */
+ uint8_t router_id[DIGEST_LEN];
+ /** Onion key of the router we're talking to. */
+ curve25519_public_key_t pubkey_B;
+
+ /**
+ * Short-lived keypair for use with this handshake.
+ * @{ */
+ curve25519_secret_key_t seckey_x;
+ curve25519_public_key_t pubkey_X;
+ /** @} */
+};
+#endif
+
+#endif
+
+#endif
+
diff --git a/src/or/onion_tap.c b/src/or/onion_tap.c
new file mode 100644
index 000000000..9a9f374b9
--- /dev/null
+++ b/src/or/onion_tap.c
@@ -0,0 +1,220 @@
+/* Copyright (c) 2001 Matej Pfajfar.
+ * Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file onion_tap.c
+ * \brief Functions to implement the original Tor circuit extension handshake
+ * (a.k.a TAP).
+ *
+ * We didn't call it "TAP" ourselves -- Ian Goldberg named it in "On the
+ * Security of the Tor Authentication Protocol". (Spoiler: it's secure, but
+ * its security is kind of fragile and implementation dependent. Never modify
+ * this implementation without reading and understanding that paper at least.)
+ **/
+
+#include "or.h"
+#include "config.h"
+#include "onion_tap.h"
+#include "rephist.h"
+
+/*----------------------------------------------------------------------*/
+
+/** Given a router's 128 byte public key,
+ * stores the following in onion_skin_out:
+ * - [42 bytes] OAEP padding
+ * - [16 bytes] Symmetric key for encrypting blob past RSA
+ * - [70 bytes] g^x part 1 (inside the RSA)
+ * - [58 bytes] g^x part 2 (symmetrically encrypted)
+ *
+ * Stores the DH private key into handshake_state_out for later completion
+ * of the handshake.
+ *
+ * The meeting point/cookies and auth are zeroed out for now.
+ */
+int
+onion_skin_TAP_create(crypto_pk_t *dest_router_key,
+ crypto_dh_t **handshake_state_out,
+ char *onion_skin_out) /* TAP_ONIONSKIN_CHALLENGE_LEN bytes */
+{
+ char challenge[DH_KEY_LEN];
+ crypto_dh_t *dh = NULL;
+ int dhbytes, pkbytes;
+
+ tor_assert(dest_router_key);
+ tor_assert(handshake_state_out);
+ tor_assert(onion_skin_out);
+ *handshake_state_out = NULL;
+ memset(onion_skin_out, 0, TAP_ONIONSKIN_CHALLENGE_LEN);
+
+ if (!(dh = crypto_dh_new(DH_TYPE_CIRCUIT)))
+ goto err;
+
+ dhbytes = crypto_dh_get_bytes(dh);
+ pkbytes = (int) crypto_pk_keysize(dest_router_key);
+ tor_assert(dhbytes == 128);
+ tor_assert(pkbytes == 128);
+
+ if (crypto_dh_get_public(dh, challenge, dhbytes))
+ goto err;
+
+ note_crypto_pk_op(ENC_ONIONSKIN);
+
+ /* set meeting point, meeting cookie, etc here. Leave zero for now. */
+ if (crypto_pk_public_hybrid_encrypt(dest_router_key, onion_skin_out,
+ TAP_ONIONSKIN_CHALLENGE_LEN,
+ challenge, DH_KEY_LEN,
+ PK_PKCS1_OAEP_PADDING, 1)<0)
+ goto err;
+
+ memwipe(challenge, 0, sizeof(challenge));
+ *handshake_state_out = dh;
+
+ return 0;
+ err:
+ memwipe(challenge, 0, sizeof(challenge));
+ if (dh) crypto_dh_free(dh);
+ return -1;
+}
+
+/** Given an encrypted DH public key as generated by onion_skin_create,
+ * and the private key for this onion router, generate the reply (128-byte
+ * DH plus the first 20 bytes of shared key material), and store the
+ * next key_out_len bytes of key material in key_out.
+ */
+int
+onion_skin_TAP_server_handshake(
+ /*TAP_ONIONSKIN_CHALLENGE_LEN*/
+ const char *onion_skin,
+ crypto_pk_t *private_key,
+ crypto_pk_t *prev_private_key,
+ /*TAP_ONIONSKIN_REPLY_LEN*/
+ char *handshake_reply_out,
+ char *key_out,
+ size_t key_out_len)
+{
+ char challenge[TAP_ONIONSKIN_CHALLENGE_LEN];
+ crypto_dh_t *dh = NULL;
+ ssize_t len;
+ char *key_material=NULL;
+ size_t key_material_len=0;
+ int i;
+ crypto_pk_t *k;
+
+ len = -1;
+ for (i=0;i<2;++i) {
+ k = i==0?private_key:prev_private_key;
+ if (!k)
+ break;
+ note_crypto_pk_op(DEC_ONIONSKIN);
+ len = crypto_pk_private_hybrid_decrypt(k, challenge,
+ TAP_ONIONSKIN_CHALLENGE_LEN,
+ onion_skin,
+ TAP_ONIONSKIN_CHALLENGE_LEN,
+ PK_PKCS1_OAEP_PADDING,0);
+ if (len>0)
+ break;
+ }
+ if (len<0) {
+ log_info(LD_PROTOCOL,
+ "Couldn't decrypt onionskin: client may be using old onion key");
+ goto err;
+ } else if (len != DH_KEY_LEN) {
+ log_warn(LD_PROTOCOL, "Unexpected onionskin length after decryption: %ld",
+ (long)len);
+ goto err;
+ }
+
+ dh = crypto_dh_new(DH_TYPE_CIRCUIT);
+ if (!dh) {
+ log_warn(LD_BUG, "Couldn't allocate DH key");
+ goto err;
+ }
+ if (crypto_dh_get_public(dh, handshake_reply_out, DH_KEY_LEN)) {
+ log_info(LD_GENERAL, "crypto_dh_get_public failed.");
+ goto err;
+ }
+
+ key_material_len = DIGEST_LEN+key_out_len;
+ key_material = tor_malloc(key_material_len);
+ len = crypto_dh_compute_secret(LOG_PROTOCOL_WARN, dh, challenge,
+ DH_KEY_LEN, key_material,
+ key_material_len);
+ if (len < 0) {
+ log_info(LD_GENERAL, "crypto_dh_compute_secret failed.");
+ goto err;
+ }
+
+ /* send back H(K|0) as proof that we learned K. */
+ memcpy(handshake_reply_out+DH_KEY_LEN, key_material, DIGEST_LEN);
+
+ /* use the rest of the key material for our shared keys, digests, etc */
+ memcpy(key_out, key_material+DIGEST_LEN, key_out_len);
+
+ memwipe(challenge, 0, sizeof(challenge));
+ memwipe(key_material, 0, key_material_len);
+ tor_free(key_material);
+ crypto_dh_free(dh);
+ return 0;
+ err:
+ memwipe(challenge, 0, sizeof(challenge));
+ if (key_material) {
+ memwipe(key_material, 0, key_material_len);
+ tor_free(key_material);
+ }
+ if (dh) crypto_dh_free(dh);
+
+ return -1;
+}
+
+/** Finish the client side of the DH handshake.
+ * Given the 128 byte DH reply + 20 byte hash as generated by
+ * onion_skin_server_handshake and the handshake state generated by
+ * onion_skin_create, verify H(K) with the first 20 bytes of shared
+ * key material, then generate key_out_len more bytes of shared key
+ * material and store them in key_out.
+ *
+ * After the invocation, call crypto_dh_free on handshake_state.
+ */
+int
+onion_skin_TAP_client_handshake(crypto_dh_t *handshake_state,
+ const char *handshake_reply, /* TAP_ONIONSKIN_REPLY_LEN bytes */
+ char *key_out,
+ size_t key_out_len)
+{
+ ssize_t len;
+ char *key_material=NULL;
+ size_t key_material_len;
+ tor_assert(crypto_dh_get_bytes(handshake_state) == DH_KEY_LEN);
+
+ key_material_len = DIGEST_LEN + key_out_len;
+ key_material = tor_malloc(key_material_len);
+ len = crypto_dh_compute_secret(LOG_PROTOCOL_WARN, handshake_state,
+ handshake_reply, DH_KEY_LEN, key_material,
+ key_material_len);
+ if (len < 0) {
+ log_warn(LD_PROTOCOL,"DH computation failed.");
+ goto err;
+ }
+
+ if (tor_memneq(key_material, handshake_reply+DH_KEY_LEN, DIGEST_LEN)) {
+ /* H(K) does *not* match. Something fishy. */
+ log_warn(LD_PROTOCOL,"Digest DOES NOT MATCH on onion handshake. "
+ "Bug or attack.");
+ goto err;
+ }
+
+ /* use the rest of the key material for our shared keys, digests, etc */
+ memcpy(key_out, key_material+DIGEST_LEN, key_out_len);
+
+ memwipe(key_material, 0, key_material_len);
+ tor_free(key_material);
+ return 0;
+ err:
+ memwipe(key_material, 0, key_material_len);
+ tor_free(key_material);
+ return -1;
+}
+
diff --git a/src/or/onion_tap.h b/src/or/onion_tap.h
new file mode 100644
index 000000000..b978b6673
--- /dev/null
+++ b/src/or/onion_tap.h
@@ -0,0 +1,37 @@
+/* Copyright (c) 2001 Matej Pfajfar.
+ * Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file onion_tap.h
+ * \brief Header file for onion_tap.c.
+ **/
+
+#ifndef TOR_ONION_TAP_H
+#define TOR_ONION_TAP_H
+
+#define TAP_ONIONSKIN_CHALLENGE_LEN (PKCS1_OAEP_PADDING_OVERHEAD+\
+ CIPHER_KEY_LEN+\
+ DH_KEY_LEN)
+#define TAP_ONIONSKIN_REPLY_LEN (DH_KEY_LEN+DIGEST_LEN)
+
+int onion_skin_TAP_create(crypto_pk_t *router_key,
+ crypto_dh_t **handshake_state_out,
+ char *onion_skin_out);
+
+int onion_skin_TAP_server_handshake(const char *onion_skin,
+ crypto_pk_t *private_key,
+ crypto_pk_t *prev_private_key,
+ char *handshake_reply_out,
+ char *key_out,
+ size_t key_out_len);
+
+int onion_skin_TAP_client_handshake(crypto_dh_t *handshake_state,
+ const char *handshake_reply,
+ char *key_out,
+ size_t key_out_len);
+
+#endif
+
diff --git a/src/or/or.h b/src/or/or.h
index 51c23d305..6aa6b59e8 100644
--- a/src/or/or.h
+++ b/src/or/or.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,8 +9,8 @@
* \brief Master header file for Tor-specific functionality.
**/
-#ifndef _TOR_OR_H
-#define _TOR_OR_H
+#ifndef TOR_OR_H
+#define TOR_OR_H
#include "orconfig.h"
@@ -81,7 +81,6 @@
#include <process.h>
#include <direct.h>
#include <windows.h>
-#define snprintf _snprintf
#endif
#ifdef USE_BUFFEREVENTS
@@ -98,6 +97,9 @@
#include "address.h"
#include "compat_libevent.h"
#include "ht.h"
+#include "replaycache.h"
+#include "crypto_curve25519.h"
+#include "tor_queue.h"
/* These signals are defined to help handle_control_signal work.
*/
@@ -176,8 +178,6 @@
#define MIN_ONION_KEY_LIFETIME (7*24*60*60)
/** How often do we rotate TLS contexts? */
#define MAX_SSL_KEY_LIFETIME_INTERNAL (2*60*60)
-/** What expiry time shall we place on our SSL certs? */
-#define MAX_SSL_KEY_LIFETIME_ADVERTISED (365*24*60*60)
/** How old do we allow a router to get before removing it
* from the router list? In seconds. */
@@ -196,8 +196,9 @@ typedef enum {
* and let it use any circuit ID it wants. */
CIRC_ID_TYPE_NEITHER=2
} circ_id_type_t;
+#define circ_id_type_bitfield_t ENUM_BF(circ_id_type_t)
-#define _CONN_TYPE_MIN 3
+#define CONN_TYPE_MIN_ 3
/** Type for sockets listening for OR connections. */
#define CONN_TYPE_OR_LISTENER 3
/** A bidirectional TLS connection transmitting a sequence of cells.
@@ -228,8 +229,14 @@ typedef enum {
#define CONN_TYPE_AP_NATD_LISTENER 14
/** Type for sockets listening for DNS requests. */
#define CONN_TYPE_AP_DNS_LISTENER 15
-#define _CONN_TYPE_MAX 15
-/* !!!! If _CONN_TYPE_MAX is ever over 15, we must grow the type field in
+
+/** Type for connections from the Extended ORPort. */
+#define CONN_TYPE_EXT_OR 16
+/** Type for sockets listening for Extended ORPort connections. */
+#define CONN_TYPE_EXT_OR_LISTENER 17
+
+#define CONN_TYPE_MAX_ 17
+/* !!!! If _CONN_TYPE_MAX is ever over 31, we must grow the type field in
* connection_t. */
/* Proxy client types */
@@ -239,7 +246,9 @@ typedef enum {
#define PROXY_SOCKS5 3
/* !!!! If there is ever a PROXY_* type over 2, we must grow the proxy_type
* field in or_connection_t */
-/* pluggable transports proxy type */
+
+/* Pluggable transport proxy type. Don't use this in or_connection_t,
+ * instead use the actual underlying proxy type (see above). */
#define PROXY_PLUGGABLE 4
/* Proxy client handshake states */
@@ -269,17 +278,18 @@ typedef enum {
/** State for any listener connection. */
#define LISTENER_STATE_READY 0
-#define _CPUWORKER_STATE_MIN 1
+#define CPUWORKER_STATE_MIN_ 1
/** State for a connection to a cpuworker process that's idle. */
#define CPUWORKER_STATE_IDLE 1
/** State for a connection to a cpuworker process that's processing a
* handshake. */
#define CPUWORKER_STATE_BUSY_ONION 2
-#define _CPUWORKER_STATE_MAX 2
+#define CPUWORKER_STATE_MAX_ 2
#define CPUWORKER_TASK_ONION CPUWORKER_STATE_BUSY_ONION
+#define CPUWORKER_TASK_SHUTDOWN 255
-#define _OR_CONN_STATE_MIN 1
+#define OR_CONN_STATE_MIN_ 1
/** State for a connection to an OR: waiting for connect() to finish. */
#define OR_CONN_STATE_CONNECTING 1
/** State for a connection to an OR: waiting for proxy handshake to complete */
@@ -304,9 +314,28 @@ typedef enum {
#define OR_CONN_STATE_OR_HANDSHAKING_V3 7
/** State for an OR connection: Ready to send/receive cells. */
#define OR_CONN_STATE_OPEN 8
-#define _OR_CONN_STATE_MAX 8
-
-#define _EXIT_CONN_STATE_MIN 1
+#define OR_CONN_STATE_MAX_ 8
+
+/** States of the Extended ORPort protocol. Be careful before changing
+ * the numbers: they matter. */
+#define EXT_OR_CONN_STATE_MIN_ 1
+/** Extended ORPort authentication is waiting for the authentication
+ * type selected by the client. */
+#define EXT_OR_CONN_STATE_AUTH_WAIT_AUTH_TYPE 1
+/** Extended ORPort authentication is waiting for the client nonce. */
+#define EXT_OR_CONN_STATE_AUTH_WAIT_CLIENT_NONCE 2
+/** Extended ORPort authentication is waiting for the client hash. */
+#define EXT_OR_CONN_STATE_AUTH_WAIT_CLIENT_HASH 3
+#define EXT_OR_CONN_STATE_AUTH_MAX 3
+/** Authentication finished and the Extended ORPort is now accepting
+ * traffic. */
+#define EXT_OR_CONN_STATE_OPEN 4
+/** Extended ORPort is flushing its last messages and preparing to
+ * start accepting OR connections. */
+#define EXT_OR_CONN_STATE_FLUSHING 5
+#define EXT_OR_CONN_STATE_MAX_ 5
+
+#define EXIT_CONN_STATE_MIN_ 1
/** State for an exit connection: waiting for response from DNS farm. */
#define EXIT_CONN_STATE_RESOLVING 1
/** State for an exit connection: waiting for connect() to finish. */
@@ -315,10 +344,10 @@ typedef enum {
#define EXIT_CONN_STATE_OPEN 3
/** State for an exit connection: waiting to be removed. */
#define EXIT_CONN_STATE_RESOLVEFAILED 4
-#define _EXIT_CONN_STATE_MAX 4
+#define EXIT_CONN_STATE_MAX_ 4
/* The AP state values must be disjoint from the EXIT state values. */
-#define _AP_CONN_STATE_MIN 5
+#define AP_CONN_STATE_MIN_ 5
/** State for a SOCKS connection: waiting for SOCKS request. */
#define AP_CONN_STATE_SOCKS_WAIT 5
/** State for a SOCKS connection: got a y.onion URL; waiting to receive
@@ -338,14 +367,14 @@ typedef enum {
/** State for a transparent natd connection: waiting for original
* destination. */
#define AP_CONN_STATE_NATD_WAIT 12
-#define _AP_CONN_STATE_MAX 12
+#define AP_CONN_STATE_MAX_ 12
/** True iff the AP_CONN_STATE_* value <b>s</b> means that the corresponding
* edge connection is not attached to any circuit. */
#define AP_CONN_STATE_IS_UNATTACHED(s) \
((s) <= AP_CONN_STATE_CIRCUIT_WAIT || (s) == AP_CONN_STATE_NATD_WAIT)
-#define _DIR_CONN_STATE_MIN 1
+#define DIR_CONN_STATE_MIN_ 1
/** State for connection to directory server: waiting for connect(). */
#define DIR_CONN_STATE_CONNECTING 1
/** State for connection to directory server: sending HTTP request. */
@@ -358,30 +387,24 @@ typedef enum {
#define DIR_CONN_STATE_SERVER_COMMAND_WAIT 5
/** State for connection at directory server: sending HTTP response. */
#define DIR_CONN_STATE_SERVER_WRITING 6
-#define _DIR_CONN_STATE_MAX 6
+#define DIR_CONN_STATE_MAX_ 6
/** True iff the purpose of <b>conn</b> means that it's a server-side
* directory connection. */
#define DIR_CONN_IS_SERVER(conn) ((conn)->purpose == DIR_PURPOSE_SERVER)
-#define _CONTROL_CONN_STATE_MIN 1
+#define CONTROL_CONN_STATE_MIN_ 1
/** State for a control connection: Authenticated and accepting v1 commands. */
#define CONTROL_CONN_STATE_OPEN 1
/** State for a control connection: Waiting for authentication; speaking
* protocol v1. */
#define CONTROL_CONN_STATE_NEEDAUTH 2
-#define _CONTROL_CONN_STATE_MAX 2
+#define CONTROL_CONN_STATE_MAX_ 2
-#define _DIR_PURPOSE_MIN 3
-/** A connection to a directory server: download a rendezvous
- * descriptor. */
-#define DIR_PURPOSE_FETCH_RENDDESC 3
-/** A connection to a directory server: set after a rendezvous
+#define DIR_PURPOSE_MIN_ 4
+/** A connection to a directory server: set after a v2 rendezvous
* descriptor is downloaded. */
-#define DIR_PURPOSE_HAS_FETCHED_RENDDESC 4
-/** A connection to a directory server: download one or more v2
- * network-status objects */
-#define DIR_PURPOSE_FETCH_V2_NETWORKSTATUS 5
+#define DIR_PURPOSE_HAS_FETCHED_RENDDESC_V2 4
/** A connection to a directory server: download one or more server
* descriptors. */
#define DIR_PURPOSE_FETCH_SERVERDESC 6
@@ -390,9 +413,6 @@ typedef enum {
#define DIR_PURPOSE_FETCH_EXTRAINFO 7
/** A connection to a directory server: upload a server descriptor. */
#define DIR_PURPOSE_UPLOAD_DIR 8
-/** A connection to a directory server: upload a rendezvous
- * descriptor. */
-#define DIR_PURPOSE_UPLOAD_RENDDESC 9
/** A connection to a directory server: upload a v3 networkstatus vote. */
#define DIR_PURPOSE_UPLOAD_VOTE 10
/** A connection to a directory server: upload a v3 consensus signature */
@@ -420,22 +440,21 @@ typedef enum {
#define DIR_PURPOSE_FETCH_RENDDESC_V2 18
/** A connection to a directory server: download a microdescriptor. */
#define DIR_PURPOSE_FETCH_MICRODESC 19
-#define _DIR_PURPOSE_MAX 19
+#define DIR_PURPOSE_MAX_ 19
/** True iff <b>p</b> is a purpose corresponding to uploading data to a
* directory server. */
#define DIR_PURPOSE_IS_UPLOAD(p) \
((p)==DIR_PURPOSE_UPLOAD_DIR || \
- (p)==DIR_PURPOSE_UPLOAD_RENDDESC || \
(p)==DIR_PURPOSE_UPLOAD_VOTE || \
(p)==DIR_PURPOSE_UPLOAD_SIGNATURES)
-#define _EXIT_PURPOSE_MIN 1
+#define EXIT_PURPOSE_MIN_ 1
/** This exit stream wants to do an ordinary connect. */
#define EXIT_PURPOSE_CONNECT 1
/** This exit stream wants to do a resolve (either normal or reverse). */
#define EXIT_PURPOSE_RESOLVE 2
-#define _EXIT_PURPOSE_MAX 2
+#define EXIT_PURPOSE_MAX_ 2
/* !!!! If any connection purpose is ever over 31, we must grow the type
* field in connection_t. */
@@ -444,16 +463,16 @@ typedef enum {
#define CIRCUIT_STATE_BUILDING 0
/** Circuit state: Waiting to process the onionskin. */
#define CIRCUIT_STATE_ONIONSKIN_PENDING 1
-/** Circuit state: I'd like to deliver a create, but my n_conn is still
+/** Circuit state: I'd like to deliver a create, but my n_chan is still
* connecting. */
-#define CIRCUIT_STATE_OR_WAIT 2
+#define CIRCUIT_STATE_CHAN_WAIT 2
/** Circuit state: onionskin(s) processed, ready to send/receive cells. */
#define CIRCUIT_STATE_OPEN 3
-#define _CIRCUIT_PURPOSE_MIN 1
+#define CIRCUIT_PURPOSE_MIN_ 1
/* these circuits were initiated elsewhere */
-#define _CIRCUIT_PURPOSE_OR_MIN 1
+#define CIRCUIT_PURPOSE_OR_MIN_ 1
/** OR-side circuit purpose: normal circuit, at OR. */
#define CIRCUIT_PURPOSE_OR 1
/** OR-side circuit purpose: At OR, from Bob, waiting for intro from Alices. */
@@ -462,7 +481,7 @@ typedef enum {
#define CIRCUIT_PURPOSE_REND_POINT_WAITING 3
/** OR-side circuit purpose: At OR, both circuits have this purpose. */
#define CIRCUIT_PURPOSE_REND_ESTABLISHED 4
-#define _CIRCUIT_PURPOSE_OR_MAX 4
+#define CIRCUIT_PURPOSE_OR_MAX_ 4
/* these circuits originate at this node */
@@ -505,7 +524,7 @@ typedef enum {
#define CIRCUIT_PURPOSE_C_REND_JOINED 12
/** This circuit is used for build time measurement only */
#define CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT 13
-#define _CIRCUIT_PURPOSE_C_MAX 13
+#define CIRCUIT_PURPOSE_C_MAX_ 13
/** Hidden-service-side circuit purpose: at Bob, waiting for introductions. */
#define CIRCUIT_PURPOSE_S_ESTABLISH_INTRO 14
/** Hidden-service-side circuit purpose: at Bob, successfully established
@@ -519,19 +538,21 @@ typedef enum {
#define CIRCUIT_PURPOSE_TESTING 18
/** A controller made this circuit and Tor should not use it. */
#define CIRCUIT_PURPOSE_CONTROLLER 19
-#define _CIRCUIT_PURPOSE_MAX 19
+/** This circuit is used for path bias probing only */
+#define CIRCUIT_PURPOSE_PATH_BIAS_TESTING 20
+#define CIRCUIT_PURPOSE_MAX_ 20
/** A catch-all for unrecognized purposes. Currently we don't expect
* to make or see any circuits with this purpose. */
#define CIRCUIT_PURPOSE_UNKNOWN 255
/** True iff the circuit purpose <b>p</b> is for a circuit that
* originated at this node. */
-#define CIRCUIT_PURPOSE_IS_ORIGIN(p) ((p)>_CIRCUIT_PURPOSE_OR_MAX)
+#define CIRCUIT_PURPOSE_IS_ORIGIN(p) ((p)>CIRCUIT_PURPOSE_OR_MAX_)
/** True iff the circuit purpose <b>p</b> is for a circuit that originated
* here to serve as a client. (Hidden services don't count here.) */
#define CIRCUIT_PURPOSE_IS_CLIENT(p) \
- ((p)> _CIRCUIT_PURPOSE_OR_MAX && \
- (p)<=_CIRCUIT_PURPOSE_C_MAX)
+ ((p)> CIRCUIT_PURPOSE_OR_MAX_ && \
+ (p)<=CIRCUIT_PURPOSE_C_MAX_)
/** True iff the circuit_t <b>c</b> is actually an origin_circuit_t. */
#define CIRCUIT_IS_ORIGIN(c) (CIRCUIT_PURPOSE_IS_ORIGIN((c)->purpose))
/** True iff the circuit purpose <b>p</b> is for an established rendezvous
@@ -539,6 +560,8 @@ typedef enum {
#define CIRCUIT_PURPOSE_IS_ESTABLISHED_REND(p) \
((p) == CIRCUIT_PURPOSE_C_REND_JOINED || \
(p) == CIRCUIT_PURPOSE_S_REND_JOINED)
+/** True iff the circuit_t c is actually an or_circuit_t */
+#define CIRCUIT_IS_ORCIRC(c) (((circuit_t *)(c))->magic == OR_CIRCUIT_MAGIC)
/** How many circuits do we want simultaneously in-progress to handle
* a given stream? */
@@ -559,6 +582,8 @@ typedef enum {
#define RELAY_COMMAND_RESOLVE 11
#define RELAY_COMMAND_RESOLVED 12
#define RELAY_COMMAND_BEGIN_DIR 13
+#define RELAY_COMMAND_EXTEND2 14
+#define RELAY_COMMAND_EXTENDED2 15
#define RELAY_COMMAND_ESTABLISH_INTRO 32
#define RELAY_COMMAND_ESTABLISH_RENDEZVOUS 33
@@ -579,7 +604,8 @@ typedef enum {
#define END_OR_CONN_REASON_NO_ROUTE 6 /* no route to host/net */
#define END_OR_CONN_REASON_IO_ERROR 7 /* read/write error */
#define END_OR_CONN_REASON_RESOURCE_LIMIT 8 /* sockets, buffers, etc */
-#define END_OR_CONN_REASON_MISC 9
+#define END_OR_CONN_REASON_PT_MISSING 9 /* PT failed or not available */
+#define END_OR_CONN_REASON_MISC 10
/* Reasons why we (or a remote OR) might close a stream. See tor-spec.txt for
* documentation of these. The values must match. */
@@ -664,7 +690,7 @@ typedef enum {
/* Reasons why we (or a remote OR) might close a circuit. See tor-spec.txt for
* documentation of these. */
-#define _END_CIRC_REASON_MIN 0
+#define END_CIRC_REASON_MIN_ 0
#define END_CIRC_REASON_NONE 0
#define END_CIRC_REASON_TORPROTOCOL 1
#define END_CIRC_REASON_INTERNAL 2
@@ -673,12 +699,12 @@ typedef enum {
#define END_CIRC_REASON_RESOURCELIMIT 5
#define END_CIRC_REASON_CONNECTFAILED 6
#define END_CIRC_REASON_OR_IDENTITY 7
-#define END_CIRC_REASON_OR_CONN_CLOSED 8
+#define END_CIRC_REASON_CHANNEL_CLOSED 8
#define END_CIRC_REASON_FINISHED 9
#define END_CIRC_REASON_TIMEOUT 10
#define END_CIRC_REASON_DESTROYED 11
#define END_CIRC_REASON_NOSUCHSERVICE 12
-#define _END_CIRC_REASON_MAX 12
+#define END_CIRC_REASON_MAX_ 12
/** Bitwise-OR this with the argument to circuit_mark_for_close() or
* control_event_circuit_status() to indicate that the reason was
@@ -814,6 +840,19 @@ typedef enum {
/** Amount to increment a stream window when we get a stream SENDME. */
#define STREAMWINDOW_INCREMENT 50
+/** Maximum number of queued cells on a circuit for which we are the
+ * midpoint before we give up and kill it. This must be >= circwindow
+ * to avoid killing innocent circuits, and >= circwindow*2 to give
+ * leaky-pipe a chance of working someday. The ORCIRC_MAX_MIDDLE_KILL_THRESH
+ * ratio controls the margin of error between emitting a warning and
+ * killing the circuit.
+ */
+#define ORCIRC_MAX_MIDDLE_CELLS (CIRCWINDOW_START_MAX*2)
+/** Ratio of hard (circuit kill) to soft (warning) thresholds for the
+ * ORCIRC_MAX_MIDDLE_CELLS tests.
+ */
+#define ORCIRC_MAX_MIDDLE_KILL_THRESH (1.1f)
+
/* Cell commands. These values are defined in tor-spec.txt. */
#define CELL_PADDING 0
#define CELL_CREATE 1
@@ -825,12 +864,15 @@ typedef enum {
#define CELL_VERSIONS 7
#define CELL_NETINFO 8
#define CELL_RELAY_EARLY 9
+#define CELL_CREATE2 10
+#define CELL_CREATED2 11
#define CELL_VPADDING 128
#define CELL_CERTS 129
#define CELL_AUTH_CHALLENGE 130
#define CELL_AUTHENTICATE 131
#define CELL_AUTHORIZE 132
+#define CELL_COMMAND_MAX_ 132
/** How long to test reachability before complaining to the user. */
#define TIMEOUT_UNTIL_UNREACHABILITY_COMPLAINT (20*60)
@@ -861,11 +903,29 @@ typedef enum {
/** Number of bytes in a cell, minus cell header. */
#define CELL_PAYLOAD_SIZE 509
-/** Number of bytes in a cell transmitted over the network. */
-#define CELL_NETWORK_SIZE 512
+/** Number of bytes in a cell transmitted over the network, in the longest
+ * form */
+#define CELL_MAX_NETWORK_SIZE 514
-/** Length of a header on a variable-length cell. */
-#define VAR_CELL_HEADER_SIZE 5
+/** Maximum length of a header on a variable-length cell. */
+#define VAR_CELL_MAX_HEADER_SIZE 7
+
+static int get_cell_network_size(int wide_circ_ids);
+static INLINE int get_cell_network_size(int wide_circ_ids)
+{
+ return wide_circ_ids ? CELL_MAX_NETWORK_SIZE : CELL_MAX_NETWORK_SIZE - 2;
+}
+static int get_var_cell_header_size(int wide_circ_ids);
+static INLINE int get_var_cell_header_size(int wide_circ_ids)
+{
+ return wide_circ_ids ? VAR_CELL_MAX_HEADER_SIZE :
+ VAR_CELL_MAX_HEADER_SIZE - 2;
+}
+static int get_circ_id_size(int wide_circ_ids);
+static INLINE int get_circ_id_size(int wide_circ_ids)
+{
+ return wide_circ_ids ? 4 : 2;
+}
/** Number of bytes in a relay cell's header (not including general cell
* header). */
@@ -874,10 +934,151 @@ typedef enum {
#define RELAY_PAYLOAD_SIZE (CELL_PAYLOAD_SIZE-RELAY_HEADER_SIZE)
/** Identifies a circuit on an or_connection */
-typedef uint16_t circid_t;
+typedef uint32_t circid_t;
/** Identifies a stream on a circuit */
typedef uint16_t streamid_t;
+/* channel_t typedef; struct channel_s is in channel.h */
+
+typedef struct channel_s channel_t;
+
+/* channel_listener_t typedef; struct channel_listener_s is in channel.h */
+
+typedef struct channel_listener_s channel_listener_t;
+
+/* channel states for channel_t */
+
+typedef enum {
+ /*
+ * Closed state - channel is inactive
+ *
+ * Permitted transitions from:
+ * - CHANNEL_STATE_CLOSING
+ * Permitted transitions to:
+ * - CHANNEL_STATE_OPENING
+ */
+ CHANNEL_STATE_CLOSED = 0,
+ /*
+ * Opening state - channel is trying to connect
+ *
+ * Permitted transitions from:
+ * - CHANNEL_STATE_CLOSED
+ * Permitted transitions to:
+ * - CHANNEL_STATE_CLOSING
+ * - CHANNEL_STATE_ERROR
+ * - CHANNEL_STATE_OPEN
+ */
+ CHANNEL_STATE_OPENING,
+ /*
+ * Open state - channel is active and ready for use
+ *
+ * Permitted transitions from:
+ * - CHANNEL_STATE_MAINT
+ * - CHANNEL_STATE_OPENING
+ * Permitted transitions to:
+ * - CHANNEL_STATE_CLOSING
+ * - CHANNEL_STATE_ERROR
+ * - CHANNEL_STATE_MAINT
+ */
+ CHANNEL_STATE_OPEN,
+ /*
+ * Maintenance state - channel is temporarily offline for subclass specific
+ * maintenance activities such as TLS renegotiation.
+ *
+ * Permitted transitions from:
+ * - CHANNEL_STATE_OPEN
+ * Permitted transitions to:
+ * - CHANNEL_STATE_CLOSING
+ * - CHANNEL_STATE_ERROR
+ * - CHANNEL_STATE_OPEN
+ */
+ CHANNEL_STATE_MAINT,
+ /*
+ * Closing state - channel is shutting down
+ *
+ * Permitted transitions from:
+ * - CHANNEL_STATE_MAINT
+ * - CHANNEL_STATE_OPEN
+ * Permitted transitions to:
+ * - CHANNEL_STATE_CLOSED,
+ * - CHANNEL_STATE_ERROR
+ */
+ CHANNEL_STATE_CLOSING,
+ /*
+ * Error state - channel has experienced a permanent error
+ *
+ * Permitted transitions from:
+ * - CHANNEL_STATE_CLOSING
+ * - CHANNEL_STATE_MAINT
+ * - CHANNEL_STATE_OPENING
+ * - CHANNEL_STATE_OPEN
+ * Permitted transitions to:
+ * - None
+ */
+ CHANNEL_STATE_ERROR,
+ /*
+ * Placeholder for maximum state value
+ */
+ CHANNEL_STATE_LAST
+} channel_state_t;
+
+/* channel listener states for channel_listener_t */
+
+typedef enum {
+ /*
+ * Closed state - channel listener is inactive
+ *
+ * Permitted transitions from:
+ * - CHANNEL_LISTENER_STATE_CLOSING
+ * Permitted transitions to:
+ * - CHANNEL_LISTENER_STATE_LISTENING
+ */
+ CHANNEL_LISTENER_STATE_CLOSED = 0,
+ /*
+ * Listening state - channel listener is listening for incoming
+ * connections
+ *
+ * Permitted transitions from:
+ * - CHANNEL_LISTENER_STATE_CLOSED
+ * Permitted transitions to:
+ * - CHANNEL_LISTENER_STATE_CLOSING
+ * - CHANNEL_LISTENER_STATE_ERROR
+ */
+ CHANNEL_LISTENER_STATE_LISTENING,
+ /*
+ * Closing state - channel listener is shutting down
+ *
+ * Permitted transitions from:
+ * - CHANNEL_LISTENER_STATE_LISTENING
+ * Permitted transitions to:
+ * - CHANNEL_LISTENER_STATE_CLOSED,
+ * - CHANNEL_LISTENER_STATE_ERROR
+ */
+ CHANNEL_LISTENER_STATE_CLOSING,
+ /*
+ * Error state - channel listener has experienced a permanent error
+ *
+ * Permitted transitions from:
+ * - CHANNEL_STATE_CLOSING
+ * - CHANNEL_STATE_LISTENING
+ * Permitted transitions to:
+ * - None
+ */
+ CHANNEL_LISTENER_STATE_ERROR,
+ /*
+ * Placeholder for maximum state value
+ */
+ CHANNEL_LISTENER_STATE_LAST
+} channel_listener_state_t;
+
+/* TLS channel stuff */
+
+typedef struct channel_tls_s channel_tls_t;
+
+/* circuitmux_t typedef; struct circuitmux_s is in circuitmux.h */
+
+typedef struct circuitmux_s circuitmux_t;
+
/** Parsed onion routing cell. All communication between nodes
* is via cells. */
typedef struct cell_t {
@@ -899,34 +1100,28 @@ typedef struct var_cell_t {
uint8_t payload[FLEXIBLE_ARRAY_MEMBER];
} var_cell_t;
+/** A parsed Extended ORPort message. */
+typedef struct ext_or_cmd_t {
+ uint16_t cmd; /** Command type */
+ uint16_t len; /** Body length */
+ char body[FLEXIBLE_ARRAY_MEMBER]; /** Message body */
+} ext_or_cmd_t;
+
/** A cell as packed for writing to the network. */
typedef struct packed_cell_t {
- struct packed_cell_t *next; /**< Next cell queued on this circuit. */
- char body[CELL_NETWORK_SIZE]; /**< Cell as packed for network. */
+ /** Next cell queued on this circuit. */
+ TOR_SIMPLEQ_ENTRY(packed_cell_t) next;
+ char body[CELL_MAX_NETWORK_SIZE]; /**< Cell as packed for network. */
+ uint32_t inserted_time; /**< Time (in milliseconds since epoch, with high
+ * bits truncated) when this cell was inserted. */
} packed_cell_t;
-/** Number of cells added to a circuit queue including their insertion
- * time on 10 millisecond detail; used for buffer statistics. */
-typedef struct insertion_time_elem_t {
- struct insertion_time_elem_t *next; /**< Next element in queue. */
- uint32_t insertion_time; /**< When were cells inserted (in 10 ms steps
- * starting at 0:00 of the current day)? */
- unsigned counter; /**< How many cells were inserted? */
-} insertion_time_elem_t;
-
-/** Queue of insertion times. */
-typedef struct insertion_time_queue_t {
- struct insertion_time_elem_t *first; /**< First element in queue. */
- struct insertion_time_elem_t *last; /**< Last element in queue. */
-} insertion_time_queue_t;
-
/** A queue of cells on a circuit, waiting to be added to the
* or_connection_t's outbuf. */
typedef struct cell_queue_t {
- packed_cell_t *head; /**< The first cell, or NULL if the queue is empty. */
- packed_cell_t *tail; /**< The last cell, or NULL if the queue is empty. */
+ /** Linked list of packed_cell_t*/
+ TOR_SIMPLEQ_HEAD(cell_simpleq, packed_cell_t) head;
int n; /**< The number of cells in the queue. */
- insertion_time_queue_t *insertion_times; /**< Insertion times of cells. */
} cell_queue_t;
/** Beginning of a RELAY cell payload. */
@@ -979,7 +1174,7 @@ typedef struct connection_t {
* *_CONNECTION_MAGIC. */
uint8_t state; /**< Current state of this connection. */
- unsigned int type:4; /**< What kind of connection is this? */
+ unsigned int type:5; /**< What kind of connection is this? */
unsigned int purpose:5; /**< Only used for DIR and EXIT types currently. */
/* The next fields are all one-bit booleans. Some are only applicable to
@@ -998,6 +1193,9 @@ typedef struct connection_t {
/** Set to 1 when we're inside connection_flushed_some to keep us from
* calling connection_handle_write() recursively. */
unsigned int in_flushed_some:1;
+ /** True if connection_handle_write is currently running on this connection.
+ */
+ unsigned int in_connection_handle_write:1;
/* For linked connections:
*/
@@ -1061,13 +1259,18 @@ typedef struct connection_t {
/** Unique identifier for this connection on this Tor instance. */
uint64_t global_identifier;
- /** Unique ID for measuring tunneled network status requests. */
- uint64_t dirreq_id;
+ /** Bytes read since last call to control_event_conn_bandwidth_used().
+ * Only used if we're configured to emit CONN_BW events. */
+ uint32_t n_read_conn_bw;
+
+ /** Bytes written since last call to control_event_conn_bandwidth_used().
+ * Only used if we're configured to emit CONN_BW events. */
+ uint32_t n_written_conn_bw;
} connection_t;
/** Subtype of connection_t; used for a listener socket. */
typedef struct listener_connection_t {
- connection_t _base;
+ connection_t base_;
/** If the connection is a CONN_TYPE_AP_DNS_LISTENER, this field points
* to the evdns_server_port it uses to listen to and answer connections. */
@@ -1085,6 +1288,40 @@ typedef struct listener_connection_t {
/** One or more ISO_ flags to describe how to isolate streams. */
uint8_t isolation_flags;
/**@}*/
+ /** For SOCKS connections only: If this is set, we will choose "no
+ * authentication" instead of "username/password" authentication if both
+ * are offered. Used as input to parse_socks. */
+ unsigned int socks_prefer_no_auth : 1;
+
+ /** For a SOCKS listeners, these fields describe whether we should
+ * allow IPv4 and IPv6 addresses from our exit nodes, respectively.
+ *
+ * @{
+ */
+ unsigned int socks_ipv4_traffic : 1;
+ unsigned int socks_ipv6_traffic : 1;
+ /** @} */
+ /** For a socks listener: should we tell the exit that we prefer IPv6
+ * addresses? */
+ unsigned int socks_prefer_ipv6 : 1;
+
+ /** For a socks listener: should we cache IPv4/IPv6 DNS information that
+ * exit nodes tell us?
+ *
+ * @{ */
+ unsigned int cache_ipv4_answers : 1;
+ unsigned int cache_ipv6_answers : 1;
+ /** @} */
+ /** For a socks listeners: if we find an answer in our client-side DNS cache,
+ * should we use it?
+ *
+ * @{ */
+ unsigned int use_cached_ipv4_answers : 1;
+ unsigned int use_cached_ipv6_answers : 1;
+ /** @} */
+ /** For socks listeners: When we can automap an address to IPv4 or IPv6,
+ * do we prefer IPv6? */
+ unsigned int prefer_ipv6_virtaddr : 1;
} listener_connection_t;
@@ -1149,6 +1386,9 @@ typedef struct or_handshake_state_t {
/* True iff we've received valid authentication to some identity. */
unsigned int authenticated : 1;
+ /* True iff we have sent a netinfo cell */
+ unsigned int sent_netinfo : 1;
+
/** True iff we should feed outgoing cells into digest_sent and
* digest_received respectively.
*
@@ -1187,43 +1427,53 @@ typedef struct or_handshake_state_t {
/**@}*/
} or_handshake_state_t;
+/** Length of Extended ORPort connection identifier. */
+#define EXT_OR_CONN_ID_LEN DIGEST_LEN /* 20 */
+
/** Subtype of connection_t for an "OR connection" -- that is, one that speaks
* cells over TLS. */
typedef struct or_connection_t {
- connection_t _base;
+ connection_t base_;
/** Hash of the public RSA key for the other side's identity key, or zeroes
* if the other side hasn't shown us a valid identity key. */
char identity_digest[DIGEST_LEN];
+
+ /** Extended ORPort connection identifier. */
+ char *ext_or_conn_id;
+ /** This is the ClientHash value we expect to receive from the
+ * client during the Extended ORPort authentication protocol. We
+ * compute it upon receiving the ClientNoce from the client, and we
+ * compare it with the acual ClientHash value sent by the
+ * client. */
+ char *ext_or_auth_correct_client_hash;
+ /** String carrying the name of the pluggable transport
+ * (e.g. "obfs2") that is obfuscating this connection. If no
+ * pluggable transports are used, it's NULL. */
+ char *ext_or_transport;
+
char *nickname; /**< Nickname of OR on other side (if any). */
tor_tls_t *tls; /**< TLS connection state. */
int tls_error; /**< Last tor_tls error code. */
/** When we last used this conn for any client traffic. If not
* recent, we can rate limit it further. */
- time_t client_used;
+
+ /* Channel using this connection */
+ channel_tls_t *chan;
tor_addr_t real_addr; /**< The actual address that this connection came from
* or went to. The <b>addr</b> field is prone to
* getting overridden by the address from the router
* descriptor matching <b>identity_digest</b>. */
- circ_id_type_t circ_id_type:2; /**< When we send CREATE cells along this
- * connection, which half of the space should
- * we use? */
/** Should this connection be used for extending circuits to the server
* matching the <b>identity_digest</b> field? Set to true if we're pretty
* sure we aren't getting MITMed, either because we're connected to an
* address listed in a server descriptor, or because an authenticated
* NETINFO cell listed the address we're connected to as recognized. */
unsigned int is_canonical:1;
- /** True iff this connection shouldn't get any new circs attached to it,
- * because the connection is too old, or because there's a better one.
- * More generally, this flag is used to note an unhealthy connection;
- * for example, if a bad connection fails we shouldn't assume that the
- * router itself has a problem.
- */
- unsigned int is_bad_for_new_circs:1;
+
/** True iff we have decided that the other end of this connection
* is a client. Connections with this flag set should never be used
* to satisfy an EXTEND request. */
@@ -1231,14 +1481,17 @@ typedef struct or_connection_t {
/** True iff this is an outgoing connection. */
unsigned int is_outgoing:1;
unsigned int proxy_type:2; /**< One of PROXY_NONE...PROXY_SOCKS5 */
- uint8_t link_proto; /**< What protocol version are we using? 0 for
- * "none negotiated yet." */
- circid_t next_circ_id; /**< Which circ_id do we try to use next on
- * this connection? This is always in the
- * range 0..1<<15-1. */
+ unsigned int wide_circ_ids:1;
+ /** True iff this connection has had its bootstrap failure logged with
+ * control_event_bootstrap_problem. */
+ unsigned int have_noted_bootstrap_problem:1;
+
+ uint16_t link_proto; /**< What protocol version are we using? 0 for
+ * "none negotiated yet." */
or_handshake_state_t *handshake_state; /**< If we are setting this connection
* up, state information to do so. */
+
time_t timestamp_lastempty; /**< When was the outbuf last completely empty?*/
time_t timestamp_last_added_nonpadding; /** When did we last add a
* non-padding cell to the outbuf? */
@@ -1257,32 +1510,21 @@ typedef struct or_connection_t {
/* XXXX we could share this among all connections. */
struct ev_token_bucket_cfg *bucket_cfg;
#endif
- int n_circuits; /**< How many circuits use this connection as p_conn or
- * n_conn ? */
-
- /** Double-linked ring of circuits with queued cells waiting for room to
- * free up on this connection's outbuf. Every time we pull cells from a
- * circuit, we advance this pointer to the next circuit in the ring. */
- struct circuit_t *active_circuits;
- /** Priority queue of cell_ewma_t for circuits with queued cells waiting for
- * room to free up on this connection's outbuf. Kept in heap order
- * according to EWMA.
- *
- * This is redundant with active_circuits; if we ever decide only to use the
- * cell_ewma algorithm for choosing circuits, we can remove active_circuits.
- */
- smartlist_t *active_circuit_pqueue;
- /** The tick on which the cell_ewma_ts in active_circuit_pqueue last had
- * their ewma values rescaled. */
- unsigned active_circuit_pqueue_last_recalibrated;
+
struct or_connection_t *next_with_same_id; /**< Next connection with same
* identity digest as this one. */
+ /** Last emptied read token bucket in msec since midnight; only used if
+ * TB_EMPTY events are enabled. */
+ uint32_t read_emptied_time;
+ /** Last emptied write token bucket in msec since midnight; only used if
+ * TB_EMPTY events are enabled. */
+ uint32_t write_emptied_time;
} or_connection_t;
/** Subtype of connection_t for an "edge connection" -- that is, an entry (ap)
* connection, or an exit. */
typedef struct edge_connection_t {
- connection_t _base;
+ connection_t base_;
struct edge_connection_t *next_stream; /**< Points to the next stream at this
* edge, if any */
@@ -1302,6 +1544,8 @@ typedef struct edge_connection_t {
uint32_t address_ttl; /**< TTL for address-to-addr mapping on exit
* connection. Exit connections only. */
+ uint32_t begincell_flags; /** Flags sent or received in the BEGIN cell
+ * for this connection */
streamid_t stream_id; /**< The stream ID used for this edge connection on its
* circuit */
@@ -1317,6 +1561,8 @@ typedef struct edge_connection_t {
/** True iff this connection is for a DNS request only. */
unsigned int is_dns_request:1;
+ /** True iff this connection is for a PTR DNS request. (exit only) */
+ unsigned int is_reverse_dns_lookup:1;
unsigned int edge_has_sent_end:1; /**< For debugging; only used on edge
* connections. Set once we've set the stream end,
@@ -1326,12 +1572,16 @@ typedef struct edge_connection_t {
* cells. */
unsigned int edge_blocked_on_circ:1;
+ /** Unique ID for directory requests; this used to be in connection_t, but
+ * that's going away and being used on channels instead. We still tag
+ * edge connections with dirreq_id from circuits, so it's copied here. */
+ uint64_t dirreq_id;
} edge_connection_t;
/** Subtype of edge_connection_t for an "entry connection" -- that is, a SOCKS
* connection, a DNS request, a TransPort connection or a NATD connection */
typedef struct entry_connection_t {
- edge_connection_t _edge;
+ edge_connection_t edge_;
/** Nickname of planned exit node -- used with .exit support. */
char *chosen_exit_name;
@@ -1404,12 +1654,47 @@ typedef struct entry_connection_t {
*/
unsigned int may_use_optimistic_data : 1;
+ /** Should we permit IPv4 and IPv6 traffic to use this connection?
+ *
+ * @{ */
+ unsigned int ipv4_traffic_ok : 1;
+ unsigned int ipv6_traffic_ok : 1;
+ /** @} */
+ /** Should we say we prefer IPv6 traffic? */
+ unsigned int prefer_ipv6_traffic : 1;
+
+ /** For a socks listener: should we cache IPv4/IPv6 DNS information that
+ * exit nodes tell us?
+ *
+ * @{ */
+ unsigned int cache_ipv4_answers : 1;
+ unsigned int cache_ipv6_answers : 1;
+ /** @} */
+ /** For a socks listeners: if we find an answer in our client-side DNS cache,
+ * should we use it?
+ *
+ * @{ */
+ unsigned int use_cached_ipv4_answers : 1;
+ unsigned int use_cached_ipv6_answers : 1;
+ /** @} */
+ /** For socks listeners: When we can automap an address to IPv4 or IPv6,
+ * do we prefer IPv6? */
+ unsigned int prefer_ipv6_virtaddr : 1;
+
} entry_connection_t;
+typedef enum {
+ DIR_SPOOL_NONE=0, DIR_SPOOL_SERVER_BY_DIGEST, DIR_SPOOL_SERVER_BY_FP,
+ DIR_SPOOL_EXTRA_BY_DIGEST, DIR_SPOOL_EXTRA_BY_FP,
+ DIR_SPOOL_CACHED_DIR, DIR_SPOOL_NETWORKSTATUS,
+ DIR_SPOOL_MICRODESC, /* NOTE: if we add another entry, add another bit. */
+} dir_spool_source_t;
+#define dir_spool_source_bitfield_t ENUM_BF(dir_spool_source_t)
+
/** Subtype of connection_t for an "directory connection" -- that is, an HTTP
* connection to retrieve or serve directory material. */
typedef struct dir_connection_t {
- connection_t _base;
+ connection_t base_;
/** Which 'resource' did we ask the directory for? This is typically the part
* of the URL string that defines, relative to the directory conn purpose,
@@ -1424,12 +1709,8 @@ typedef struct dir_connection_t {
* "spooling" of directory material to the outbuf. Otherwise, we'd have
* to append everything to the outbuf in one enormous chunk. */
/** What exactly are we spooling right now? */
- enum {
- DIR_SPOOL_NONE=0, DIR_SPOOL_SERVER_BY_DIGEST, DIR_SPOOL_SERVER_BY_FP,
- DIR_SPOOL_EXTRA_BY_DIGEST, DIR_SPOOL_EXTRA_BY_FP,
- DIR_SPOOL_CACHED_DIR, DIR_SPOOL_NETWORKSTATUS,
- DIR_SPOOL_MICRODESC, /* NOTE: if we add another entry, add another bit. */
- } dir_spool_src : 3;
+ dir_spool_source_bitfield_t dir_spool_src : 3;
+
/** If we're fetching descriptors, what router purpose shall we assign
* to them? */
uint8_t router_purpose;
@@ -1448,11 +1729,15 @@ typedef struct dir_connection_t {
char identity_digest[DIGEST_LEN]; /**< Hash of the public RSA key for
* the directory server's signing key. */
+ /** Unique ID for directory requests; this used to be in connection_t, but
+ * that's going away and being used on channels instead. The dirserver still
+ * needs this for the incoming side, so it's moved here. */
+ uint64_t dirreq_id;
} dir_connection_t;
/** Subtype of connection_t for an connection to a controller. */
typedef struct control_connection_t {
- connection_t _base;
+ connection_t base_;
uint32_t event_mask; /**< Bitfield: which events does this controller
* care about? */
@@ -1479,12 +1764,12 @@ typedef struct control_connection_t {
} control_connection_t;
/** Cast a connection_t subtype pointer to a connection_t **/
-#define TO_CONN(c) (&(((c)->_base)))
-/** Helper macro: Given a pointer to to._base, of type from*, return &to. */
-#define DOWNCAST(to, ptr) ((to*)SUBTYPE_P(ptr, to, _base))
+#define TO_CONN(c) (&(((c)->base_)))
+/** Helper macro: Given a pointer to to.base_, of type from*, return &to. */
+#define DOWNCAST(to, ptr) ((to*)SUBTYPE_P(ptr, to, base_))
/** Cast a entry_connection_t subtype pointer to a edge_connection_t **/
-#define ENTRY_TO_EDGE_CONN(c) (&(((c))->_edge))
+#define ENTRY_TO_EDGE_CONN(c) (&(((c))->edge_))
/** Cast a entry_connection_t subtype pointer to a connection_t **/
#define ENTRY_TO_CONN(c) (TO_CONN(ENTRY_TO_EDGE_CONN(c)))
@@ -1529,12 +1814,12 @@ static INLINE edge_connection_t *TO_EDGE_CONN(connection_t *c)
static INLINE entry_connection_t *TO_ENTRY_CONN(connection_t *c)
{
tor_assert(c->magic == ENTRY_CONNECTION_MAGIC);
- return (entry_connection_t*) SUBTYPE_P(c, entry_connection_t, _edge._base);
+ return (entry_connection_t*) SUBTYPE_P(c, entry_connection_t, edge_.base_);
}
static INLINE entry_connection_t *EDGE_TO_ENTRY_CONN(edge_connection_t *c)
{
- tor_assert(c->_base.magic == ENTRY_CONNECTION_MAGIC);
- return (entry_connection_t*) SUBTYPE_P(c, entry_connection_t, _edge);
+ tor_assert(c->base_.magic == ENTRY_CONNECTION_MAGIC);
+ return (entry_connection_t*) SUBTYPE_P(c, entry_connection_t, edge_);
}
static INLINE control_connection_t *TO_CONTROL_CONN(connection_t *c)
{
@@ -1597,11 +1882,13 @@ typedef enum {
ADDR_POLICY_ACCEPT=1,
ADDR_POLICY_REJECT=2,
} addr_policy_action_t;
+#define addr_policy_action_bitfield_t ENUM_BF(addr_policy_action_t)
/** A reference-counted address policy rule. */
typedef struct addr_policy_t {
int refcnt; /**< Reference count */
- addr_policy_action_t policy_type:2;/**< What to do when the policy matches.*/
+ /** What to do when the policy matches.*/
+ addr_policy_action_bitfield_t policy_type:2;
unsigned int is_private:1; /**< True iff this is the pseudo-address,
* "private". */
unsigned int is_canonical:1; /**< True iff this policy is the canonical
@@ -1610,7 +1897,15 @@ typedef struct addr_policy_t {
maskbits_t maskbits; /**< Accept/reject all addresses <b>a</b> such that the
* first <b>maskbits</b> bits of <b>a</b> match
* <b>addr</b>. */
- tor_addr_t addr; /**< Base address to accept or reject. */
+ /** Base address to accept or reject.
+ *
+ * Note that wildcards are treated
+ * differntly depending on address family. An AF_UNSPEC address means
+ * "All addresses, IPv4 or IPv6." An AF_INET address with maskbits==0 means
+ * "All IPv4 addresses" and an AF_INET6 address with maskbits == 0 means
+ * "All IPv6 addresses".
+ **/
+ tor_addr_t addr;
uint16_t prt_min; /**< Lowest port number to accept/reject. */
uint16_t prt_max; /**< Highest port number to accept/reject. */
} addr_policy_t;
@@ -1645,6 +1940,7 @@ typedef enum {
*/
SAVED_IN_JOURNAL
} saved_location_t;
+#define saved_location_bitfield_t ENUM_BF(saved_location_t)
/** Enumeration: what kind of download schedule are we using for a given
* object? */
@@ -1653,6 +1949,7 @@ typedef enum {
DL_SCHED_CONSENSUS = 1,
DL_SCHED_BRIDGE = 2,
} download_schedule_t;
+#define download_schedule_bitfield_t ENUM_BF(download_schedule_t)
/** Information about our plans for retrying downloads for a downloadable
* object. */
@@ -1661,7 +1958,7 @@ typedef struct download_status_t {
* again? */
uint8_t n_download_failures; /**< Number of failures trying to download the
* most recent descriptor. */
- download_schedule_t schedule : 8;
+ download_schedule_bitfield_t schedule : 8;
} download_status_t;
/** If n_download_failures is this high, the download can never happen. */
@@ -1703,9 +2000,7 @@ typedef struct signed_descriptor_t {
* routerlist->old_routers? -1 for none. */
int routerlist_index;
/** The valid-until time of the most recent consensus that listed this
- * descriptor, or a bit after the publication time of the most recent v2
- * networkstatus that listed it. 0 for "never listed in a consensus or
- * status, so far as we know." */
+ * descriptor. 0 for "never listed in a consensus, so far as we know." */
time_t last_listed_as_valid_until;
/* If true, we do not ever try to save this object in the cache. */
unsigned int do_not_cache : 1;
@@ -1724,7 +2019,6 @@ typedef int16_t country_t;
/** Information about another onion router in the network. */
typedef struct {
signed_descriptor_t cache_info;
- char *address; /**< Location of OR: either a hostname or an IP address. */
char *nickname; /**< Human-readable OR name. */
uint32_t addr; /**< IPv4 address of OR, in host order. */
@@ -1740,6 +2034,8 @@ typedef struct {
crypto_pk_t *onion_pkey; /**< Public RSA key for onions. */
crypto_pk_t *identity_pkey; /**< Public RSA key for signing. */
+ /** Public curve25519 key for onions */
+ curve25519_public_key_t *onion_curve25519_pkey;
char *platform; /**< What software/operating system is this OR using? */
@@ -1750,7 +2046,10 @@ typedef struct {
/** How many bytes/s is this router known to handle? */
uint32_t bandwidthcapacity;
smartlist_t *exit_policy; /**< What streams will this OR permit
- * to exit? NULL for 'reject *:*'. */
+ * to exit on IPv4? NULL for 'reject *:*'. */
+ /** What streams will this OR permit to exit on IPv6?
+ * NULL for 'reject *:*' */
+ struct short_policy_t *ipv6_exit_policy;
long uptime; /**< How many seconds the router claims to have been up */
smartlist_t *declared_family; /**< Nicknames of router which this router
* claims are its family. */
@@ -1769,8 +2068,6 @@ typedef struct {
/** True if, after we have added this router, we should re-launch
* tests for it. */
unsigned int needs_retest_if_added:1;
- /** True if ipv6_addr:ipv6_orport is preferred. */
- unsigned int ipv6_preferred:1;
/** Tor can use this router for general positions in circuits; we got it
* from a directory server as usual, or we're an authority and a server
@@ -1793,15 +2090,6 @@ typedef struct {
* things; see notes on ROUTER_PURPOSE_* macros above.
*/
uint8_t purpose;
-
- /* The below items are used only by authdirservers for
- * reachability testing. */
-
- /** When was the last time we could reach this OR? */
- time_t last_reachable;
- /** When did we start testing reachability for this OR? */
- time_t testing_since;
-
} routerinfo_t;
/** Information needed to keep and cache a signed extra-info document. */
@@ -1833,6 +2121,8 @@ typedef struct routerstatus_t {
uint32_t addr; /**< IPv4 address for this router. */
uint16_t or_port; /**< OR port for this router. */
uint16_t dir_port; /**< Directory port for this router. */
+ tor_addr_t ipv6_addr; /**< IPv6 address for this router. */
+ uint16_t ipv6_orport; /**<IPV6 OR port for this router. */
unsigned int is_authority:1; /**< True iff this router is an authority. */
unsigned int is_exit:1; /**< True iff this router is a good exit. */
unsigned int is_stable:1; /**< True iff this router stays up a long time. */
@@ -1846,10 +2136,6 @@ typedef struct routerstatus_t {
unsigned int is_unnamed:1; /**< True iff "nickname" belongs to another
* router. */
unsigned int is_valid:1; /**< True iff this router isn't invalid. */
- unsigned int is_v2_dir:1; /**< True iff this router can serve directory
- * information with v2 of the directory
- * protocol. (All directory caches cache v1
- * directories.) */
unsigned int is_possible_guard:1; /**< True iff this router would be a good
* choice as an entry guard. */
unsigned int is_bad_exit:1; /**< True iff this node is a bad choice for
@@ -1862,30 +2148,23 @@ typedef struct routerstatus_t {
* included.) We'll replace all these with a big tor_version_t or a char[]
* if the number of traits we care about ever becomes incredibly big. */
unsigned int version_known:1;
- /** True iff this router is a version that supports BEGIN_DIR cells. */
- unsigned int version_supports_begindir:1;
- /** True iff this router is a version that supports conditional consensus
- * downloads (signed by list of authorities). */
- unsigned int version_supports_conditional_consensus:1;
- /** True iff this router is a version that we can post extrainfo docs to. */
- unsigned int version_supports_extrainfo_upload:1;
- /** True iff this router is a version that, if it caches directory info,
- * we can get v3 downloads from. */
- unsigned int version_supports_v3_dir:1;
+
/** True iff this router is a version that, if it caches directory info,
* we can get microdescriptors from. */
unsigned int version_supports_microdesc_cache:1;
/** True iff this router is a version that allows DATA cells to arrive on
* a stream before it has sent a CONNECTED cell. */
unsigned int version_supports_optimistic_data:1;
+ /** True iff this router has a version that allows it to accept EXTEND2
+ * cells */
+ unsigned int version_supports_extend2_cells:1;
unsigned int has_bandwidth:1; /**< The vote/consensus had bw info */
unsigned int has_exitsummary:1; /**< The vote/consensus had exit summaries */
- unsigned int has_measured_bw:1; /**< The vote/consensus had a measured bw */
+ unsigned int bw_is_unmeasured:1; /**< This is a consensus entry, with
+ * the Unmeasured flag set. */
- uint32_t measured_bw; /**< Measured bandwidth (capacity) of the router */
-
- uint32_t bandwidth; /**< Bandwidth (capacity) of the router as reported in
+ uint32_t bandwidth_kb; /**< Bandwidth (capacity) of the router as reported in
* the vote/consensus, in kilobytes/sec. */
char *exitsummary; /**< exit policy summary -
* XXX weasel: this probably should not stay a string. */
@@ -1893,12 +2172,6 @@ typedef struct routerstatus_t {
/* ---- The fields below aren't derived from the networkstatus; they
* hold local information only. */
- /** True if we, as a directory mirror, want to download the corresponding
- * routerinfo from the authority who gave us this routerstatus. (That is,
- * if we don't have the routerinfo, and if we haven't already tried to get it
- * from this authority.) Applies in v2 networkstatus document only.
- */
- unsigned int need_to_mirror:1;
time_t last_dir_503_at; /**< When did this router last tell us that it
* was too busy to serve directory info? */
download_status_t dl_status;
@@ -1940,7 +2213,7 @@ typedef struct microdesc_t {
*/
time_t last_listed;
/** Where is this microdescriptor currently stored? */
- saved_location_t saved_location : 3;
+ saved_location_bitfield_t saved_location : 3;
/** If true, do not attempt to cache this microdescriptor on disk. */
unsigned int no_save : 1;
/** If true, this microdesc has an entry in the microdesc_map */
@@ -1968,10 +2241,19 @@ typedef struct microdesc_t {
/** As routerinfo_t.onion_pkey */
crypto_pk_t *onion_pkey;
+ /** As routerinfo_t.onion_curve25519_pkey */
+ curve25519_public_key_t *onion_curve25519_pkey;
+ /** As routerinfo_t.ipv6_add */
+ tor_addr_t ipv6_addr;
+ /** As routerinfo_t.ipv6_orport */
+ uint16_t ipv6_orport;
/** As routerinfo_t.family */
smartlist_t *family;
- /** Exit policy summary */
+ /** IPv4 exit policy summary */
short_policy_t *exit_policy;
+ /** IPv6 exit policy summary */
+ short_policy_t *ipv6_exit_policy;
+
} microdesc_t;
/** A node_t represents a Tor router.
@@ -2006,13 +2288,13 @@ typedef struct node_t {
routerstatus_t *rs;
/* local info: copied from routerstatus, then possibly frobbed based
- * on experience. Authorities set this stuff directly. */
+ * on experience. Authorities set this stuff directly. Note that
+ * these reflect knowledge of the primary (IPv4) OR port only. */
unsigned int is_running:1; /**< As far as we know, is this OR currently
* running? */
unsigned int is_valid:1; /**< Has a trusted dirserver validated this OR?
- * (For Authdir: Have we validated this OR?)
- */
+ * (For Authdir: Have we validated this OR?) */
unsigned int is_fast:1; /** Do we think this is a fast OR? */
unsigned int is_stable:1; /** Do we think this is a stable OR? */
unsigned int is_possible_guard:1; /**< Do we think this is an OK guard? */
@@ -2033,57 +2315,26 @@ typedef struct node_t {
/** Local info: we treat this node as if it rejects everything */
unsigned int rejects_all:1;
+ /** Local info: this node is in our list of guards */
+ unsigned int using_as_guard:1;
+
/* Local info: derived. */
+ /** True if the IPv6 OR port is preferred over the IPv4 OR port. */
+ unsigned int ipv6_preferred:1;
+
/** According to the geoip db what country is this router in? */
+ /* XXXprop186 what is this suppose to mean with multiple OR ports? */
country_t country;
-} node_t;
-/** How many times will we try to download a router's descriptor before giving
- * up? */
-#define MAX_ROUTERDESC_DOWNLOAD_FAILURES 8
-
-/** How many times will we try to download a microdescriptor before giving
- * up? */
-#define MAX_MICRODESC_DOWNLOAD_FAILURES 8
-
-/** Contents of a v2 (non-consensus, non-vote) network status object. */
-typedef struct networkstatus_v2_t {
- /** When did we receive the network-status document? */
- time_t received_on;
-
- /** What was the digest of the document? */
- char networkstatus_digest[DIGEST_LEN];
-
- /* These fields come from the actual network-status document.*/
- time_t published_on; /**< Declared publication date. */
-
- char *source_address; /**< Canonical directory server hostname. */
- uint32_t source_addr; /**< Canonical directory server IP. */
- uint16_t source_dirport; /**< Canonical directory server dirport. */
-
- unsigned int binds_names:1; /**< True iff this directory server binds
- * names. */
- unsigned int recommends_versions:1; /**< True iff this directory server
- * recommends client and server software
- * versions. */
- unsigned int lists_bad_exits:1; /**< True iff this directory server marks
- * malfunctioning exits as bad. */
- /** True iff this directory server marks malfunctioning directories as
- * bad. */
- unsigned int lists_bad_directories:1;
-
- char identity_digest[DIGEST_LEN]; /**< Digest of signing key. */
- char *contact; /**< How to contact directory admin? (may be NULL). */
- crypto_pk_t *signing_key; /**< Key used to sign this directory. */
- char *client_versions; /**< comma-separated list of recommended client
- * versions. */
- char *server_versions; /**< comma-separated list of recommended server
- * versions. */
-
- smartlist_t *entries; /**< List of routerstatus_t*. This list is kept
- * sorted by identity_digest. */
-} networkstatus_v2_t;
+ /* The below items are used only by authdirservers for
+ * reachability testing. */
+
+ /** When was the last time we could reach this OR? */
+ time_t last_reachable; /* IPv4. */
+ time_t last_reachable6; /* IPv6. */
+
+} node_t;
/** Linked list of microdesc hash lines for a single router in a directory
* vote.
@@ -2091,7 +2342,8 @@ typedef struct networkstatus_v2_t {
typedef struct vote_microdesc_hash_t {
/** Next element in the list, or NULL. */
struct vote_microdesc_hash_t *next;
- /** The raw contents of the microdesc hash line, excluding the "m". */
+ /** The raw contents of the microdesc hash line, from the "m" through the
+ * newline. */
char *microdesc_hash_line;
} vote_microdesc_hash_t;
@@ -2099,10 +2351,15 @@ typedef struct vote_microdesc_hash_t {
typedef struct vote_routerstatus_t {
routerstatus_t status; /**< Underlying 'status' object for this router.
* Flags are redundant. */
+ /** How many known-flags are allowed in a vote? This is the width of
+ * the flags field of vote_routerstatus_t */
+#define MAX_KNOWN_FLAGS_IN_VOTE 64
uint64_t flags; /**< Bit-field for all recognized flags; index into
* networkstatus_t.known_flags. */
char *version; /**< The version that the authority says this router is
* running. */
+ unsigned int has_measured_bw:1; /**< The vote had a measured bw */
+ uint32_t measured_bw_kb; /**< Measured bandwidth (capacity) of the router */
/** The hash or hashes that the authority claims this microdesc has. */
vote_microdesc_hash_t *microdesc;
} vote_routerstatus_t;
@@ -2166,8 +2423,11 @@ typedef enum {
/** A common structure to hold a v3 network status vote, or a v3 network
* status consensus. */
typedef struct networkstatus_t {
- networkstatus_type_t type : 8; /**< Vote, consensus, or opinion? */
- consensus_flavor_t flavor : 8; /**< If a consensus, what kind? */
+ networkstatus_type_t type; /**< Vote, consensus, or opinion? */
+ consensus_flavor_t flavor; /**< If a consensus, what kind? */
+ unsigned int has_measured_bws : 1;/**< True iff this networkstatus contains
+ * measured= bandwidth values. */
+
time_t published; /**< Vote only: Time when vote was written. */
time_t valid_after; /**< Time after which this vote or consensus applies. */
time_t fresh_until; /**< Time before which this is the most recent vote or
@@ -2247,10 +2507,6 @@ typedef struct desc_store_t {
* filename for a temporary file when rebuilding the store, and .new to this
* filename for the journal. */
const char *fname_base;
- /** Alternative (obsolete) value for fname_base: if the file named by
- * fname_base isn't present, we read from here instead, but we never write
- * here. */
- const char *fname_alt_base;
/** Human-readable description of what this store contains. */
const char *description;
@@ -2305,6 +2561,9 @@ typedef struct extend_info_t {
uint16_t port; /**< OR port. */
tor_addr_t addr; /**< IP address. */
crypto_pk_t *onion_key; /**< Current onionskin key. */
+#ifdef CURVE25519_ENABLED
+ curve25519_public_key_t curve25519_onion_key;
+#endif
} extend_info_t;
/** Certificate for v3 directory protocol: binds long-term authority identity
@@ -2324,9 +2583,6 @@ typedef struct authority_cert_t {
uint32_t addr;
/** This authority's directory port. */
uint16_t dir_port;
- /** True iff this certificate was cross-certified by signing the identity
- * key with the signing key. */
- uint8_t is_cross_certified;
} authority_cert_t;
/** Bitfield enum type listing types of information that directory authorities
@@ -2340,15 +2596,8 @@ typedef struct authority_cert_t {
*/
typedef enum {
NO_DIRINFO = 0,
- /** Serves/signs v1 directory information: Big lists of routers, and short
- * routerstatus documents. */
- V1_DIRINFO = 1 << 0,
- /** Serves/signs v2 directory information: i.e. v2 networkstatus documents */
- V2_DIRINFO = 1 << 1,
/** Serves/signs v3 directory information: votes, consensuses, certs */
V3_DIRINFO = 1 << 2,
- /** Serves hidden service descriptors. */
- HIDSERV_DIRINFO = 1 << 3,
/** Serves bridge descriptors. */
BRIDGE_DIRINFO = 1 << 4,
/** Serves extrainfo documents. */
@@ -2357,8 +2606,25 @@ typedef enum {
MICRODESC_DIRINFO=1 << 6,
} dirinfo_type_t;
+#define ALL_DIRINFO ((dirinfo_type_t)((1<<7)-1))
+
#define CRYPT_PATH_MAGIC 0x70127012u
+struct fast_handshake_state_t;
+struct ntor_handshake_state_t;
+#define ONION_HANDSHAKE_TYPE_TAP 0x0000
+#define ONION_HANDSHAKE_TYPE_FAST 0x0001
+#define ONION_HANDSHAKE_TYPE_NTOR 0x0002
+#define MAX_ONION_HANDSHAKE_TYPE 0x0002
+typedef struct {
+ uint16_t tag;
+ union {
+ struct fast_handshake_state_t *fast;
+ crypto_dh_t *tap;
+ struct ntor_handshake_state_t *ntor;
+ } u;
+} onion_handshake_state_t;
+
/** Holds accounting information for a single step in the layered encryption
* performed by a circuit. Used only at the client edge of a circuit. */
typedef struct crypt_path_t {
@@ -2377,17 +2643,15 @@ typedef struct crypt_path_t {
/** Digest state for cells heading away from the OR at this step. */
crypto_digest_t *b_digest;
- /** Current state of Diffie-Hellman key negotiation with the OR at this
+ /** Current state of the handshake as performed with the OR at this
* step. */
- crypto_dh_t *dh_handshake_state;
- /** Current state of 'fast' (non-PK) key negotiation with the OR at this
- * step. Used to save CPU when TLS is already providing all the
- * authentication, secrecy, and integrity we need, and we're already
- * distinguishable from an OR.
- */
- uint8_t fast_handshake_state[DIGEST_LEN];
+ onion_handshake_state_t handshake_state;
+ /** Diffie-hellman handshake state for performing an introduction
+ * operations */
+ crypto_dh_t *rend_dh_handshake_state;
+
/** Negotiated key material shared with the OR at this step. */
- char handshake_digest[DIGEST_LEN];/* KH in tor-spec.txt */
+ char rend_circ_nonce[DIGEST_LEN];/* KH in tor-spec.txt */
/** Information to extend to the OR at this step. */
extend_info_t *extend_info;
@@ -2428,10 +2692,6 @@ typedef struct {
#define CPATH_KEY_MATERIAL_LEN (20*2+16*2)
#define DH_KEY_LEN DH_BYTES
-#define ONIONSKIN_CHALLENGE_LEN (PKCS1_OAEP_PADDING_OVERHEAD+\
- CIPHER_KEY_LEN+\
- DH_KEY_LEN)
-#define ONIONSKIN_REPLY_LEN (DH_KEY_LEN+DIGEST_LEN)
/** Information used to build a circuit. */
typedef struct {
@@ -2460,32 +2720,24 @@ typedef struct {
time_t expiry_time;
} cpath_build_state_t;
-/**
- * The cell_ewma_t structure keeps track of how many cells a circuit has
- * transferred recently. It keeps an EWMA (exponentially weighted moving
- * average) of the number of cells flushed from the circuit queue onto a
- * connection in connection_or_flush_from_first_active_circuit().
- */
-typedef struct {
- /** The last 'tick' at which we recalibrated cell_count.
- *
- * A cell sent at exactly the start of this tick has weight 1.0. Cells sent
- * since the start of this tick have weight greater than 1.0; ones sent
- * earlier have less weight. */
- unsigned last_adjusted_tick;
- /** The EWMA of the cell count. */
- double cell_count;
- /** True iff this is the cell count for a circuit's previous
- * connection. */
- unsigned int is_for_p_conn : 1;
- /** The position of the circuit within the OR connection's priority
- * queue. */
- int heap_index;
-} cell_ewma_t;
-
#define ORIGIN_CIRCUIT_MAGIC 0x35315243u
#define OR_CIRCUIT_MAGIC 0x98ABC04Fu
+struct create_cell_t;
+
+/** Entry in the cell stats list of a circuit; used only if CELL_STATS
+ * events are enabled. */
+typedef struct testing_cell_stats_entry_t {
+ uint8_t command; /**< cell command number. */
+ /** Waiting time in centiseconds if this event is for a removed cell,
+ * or 0 if this event is for adding a cell to the queue. 22 bits can
+ * store more than 11 hours, enough to assume that a circuit with this
+ * delay would long have been closed. */
+ unsigned int waiting_time:22;
+ unsigned int removed:1; /**< 0 for added to, 1 for removed from queue. */
+ unsigned int exitward:1; /**< 0 for app-ward, 1 for exit-ward. */
+} testing_cell_stats_entry_t;
+
/**
* A circuit is a path over the onion routing
* network. Applications can connect to one end of the circuit, and can
@@ -2513,23 +2765,49 @@ typedef struct circuit_t {
uint32_t magic; /**< For memory and type debugging: must equal
* ORIGIN_CIRCUIT_MAGIC or OR_CIRCUIT_MAGIC. */
- /** Queue of cells waiting to be transmitted on n_conn. */
- cell_queue_t n_conn_cells;
- /** The OR connection that is next in this circuit. */
- or_connection_t *n_conn;
- /** The circuit_id used in the next (forward) hop of this circuit. */
+ /** The channel that is next in this circuit. */
+ channel_t *n_chan;
+
+ /**
+ * The circuit_id used in the next (forward) hop of this circuit;
+ * this is unique to n_chan, but this ordered pair is globally
+ * unique:
+ *
+ * (n_chan->global_identifier, n_circ_id)
+ */
circid_t n_circ_id;
- /** The hop to which we want to extend this circuit. Should be NULL if
- * the circuit has attached to a connection. */
+ /**
+ * Circuit mux associated with n_chan to which this circuit is attached;
+ * NULL if we have no n_chan.
+ */
+ circuitmux_t *n_mux;
+
+ /** Queue of cells waiting to be transmitted on n_chan */
+ cell_queue_t n_chan_cells;
+
+ /**
+ * The hop to which we want to extend this circuit. Should be NULL if
+ * the circuit has attached to a channel.
+ */
extend_info_t *n_hop;
- /** True iff we are waiting for n_conn_cells to become less full before
+ /** True iff we are waiting for n_chan_cells to become less full before
* allowing p_streams to add any more cells. (Origin circuit only.) */
- unsigned int streams_blocked_on_n_conn : 1;
- /** True iff we are waiting for p_conn_cells to become less full before
+ unsigned int streams_blocked_on_n_chan : 1;
+ /** True iff we are waiting for p_chan_cells to become less full before
* allowing n_streams to add any more cells. (OR circuit only.) */
- unsigned int streams_blocked_on_p_conn : 1;
+ unsigned int streams_blocked_on_p_chan : 1;
+
+ /** True iff we have queued a delete backwards on this circuit, but not put
+ * it on the output buffer. */
+ unsigned int p_delete_pending : 1;
+ /** True iff we have queued a delete forwards on this circuit, but not put
+ * it on the output buffer. */
+ unsigned int n_delete_pending : 1;
+
+ /** True iff this circuit has received a DESTROY cell in either direction */
+ unsigned int received_destroy : 1;
uint8_t state; /**< Current status of this circuit. */
uint8_t purpose; /**< Why are we creating this circuit? */
@@ -2544,15 +2822,27 @@ typedef struct circuit_t {
* more. */
int deliver_window;
- /** For storage while n_conn is pending
- * (state CIRCUIT_STATE_OR_WAIT). When defined, it is always
- * length ONIONSKIN_CHALLENGE_LEN. */
- char *n_conn_onionskin;
+ /** Temporary field used during circuits_handle_oom. */
+ uint32_t age_tmp;
- /** When was this circuit created? We keep this timestamp with a higher
- * resolution than most so that the circuit-build-time tracking code can
- * get millisecond resolution. */
+ /** For storage while n_chan is pending (state CIRCUIT_STATE_CHAN_WAIT). */
+ struct create_cell_t *n_chan_create_cell;
+
+ /** When did circuit construction actually begin (ie send the
+ * CREATE cell or begin cannibalization).
+ *
+ * Note: This timer will get reset if we decide to cannibalize
+ * a circuit. It may also get reset during certain phases of hidden
+ * service circuit use.
+ *
+ * We keep this timestamp with a higher resolution than most so that the
+ * circuit-build-time tracking code can get millisecond resolution.
+ */
+ struct timeval timestamp_began;
+
+ /** This timestamp marks when the init_circuit_base constructor ran. */
struct timeval timestamp_created;
+
/** When the circuit was first used, or 0 if the circuit is clean.
*
* XXXX023 Note that some code will artifically adjust this value backward
@@ -2573,23 +2863,25 @@ typedef struct circuit_t {
const char *marked_for_close_file; /**< For debugging: in which file was this
* circuit marked for close? */
+ /** Unique ID for measuring tunneled network status requests. */
+ uint64_t dirreq_id;
+
+ /** Next circuit in linked list of all circuits (global_circuitlist). */
+ TOR_LIST_ENTRY(circuit_t) head;
+
/** Next circuit in the doubly-linked ring of circuits waiting to add
* cells to n_conn. NULL if we have no cells pending, or if we're not
* linked to an OR connection. */
- struct circuit_t *next_active_on_n_conn;
+ struct circuit_t *next_active_on_n_chan;
/** Previous circuit in the doubly-linked ring of circuits waiting to add
* cells to n_conn. NULL if we have no cells pending, or if we're not
* linked to an OR connection. */
- struct circuit_t *prev_active_on_n_conn;
- struct circuit_t *next; /**< Next circuit in linked list of all circuits. */
+ struct circuit_t *prev_active_on_n_chan;
- /** Unique ID for measuring tunneled network status requests. */
- uint64_t dirreq_id;
-
- /** The EWMA count for the number of cells flushed from the
- * n_conn_cells queue. Used to determine which circuit to flush from next.
- */
- cell_ewma_t n_cell_ewma;
+ /** Various statistics about cells being added to or removed from this
+ * circuit's queues; used only if CELL_STATS events are enabled and
+ * cleared after being sent to control port. */
+ smartlist_t *testing_cell_stats;
} circuit_t;
/** Largest number of relay_early cells that we can send on a given
@@ -2598,29 +2890,80 @@ typedef struct circuit_t {
/**
* Describes the circuit building process in simplified terms based
- * on the path bias accounting state for a circuit. Created to prevent
- * overcounting due to unknown cases of circuit reuse. See Bug #6475.
+ * on the path bias accounting state for a circuit.
+ *
+ * NOTE: These state values are enumerated in the order for which we
+ * expect circuits to transition through them. If you add states,
+ * you need to preserve this overall ordering. The various pathbias
+ * state transition and accounting functions (pathbias_mark_* and
+ * pathbias_count_*) contain ordinal comparisons to enforce proper
+ * state transitions for corrections.
+ *
+ * This state machine and the associated logic was created to prevent
+ * miscounting due to unknown cases of circuit reuse. See also tickets
+ * #6475 and #7802.
*/
typedef enum {
/** This circuit is "new". It has not yet completed a first hop
* or been counted by the path bias code. */
PATH_STATE_NEW_CIRC = 0,
- /** This circuit has completed a first hop, and has been counted by
+ /** This circuit has completed one/two hops, and has been counted by
* the path bias logic. */
- PATH_STATE_DID_FIRST_HOP = 1,
- /** This circuit has been completely built, and has been counted as
- * successful by the path bias logic. */
- PATH_STATE_SUCCEEDED = 2,
+ PATH_STATE_BUILD_ATTEMPTED = 1,
+ /** This circuit has been completely built */
+ PATH_STATE_BUILD_SUCCEEDED = 2,
+ /** Did we try to attach any SOCKS streams or hidserv introductions to
+ * this circuit?
+ *
+ * Note: If we ever implement end-to-end stream timing through test
+ * stream probes (#5707), we must *not* set this for those probes
+ * (or any other automatic streams) because the adversary could
+ * just tag at a later point.
+ */
+ PATH_STATE_USE_ATTEMPTED = 3,
+ /** Did any SOCKS streams or hidserv introductions actually succeed on
+ * this circuit?
+ *
+ * If any streams detatch/fail from this circuit, the code transitions
+ * the circuit back to PATH_STATE_USE_ATTEMPTED to ensure we probe. See
+ * pathbias_mark_use_rollback() for that.
+ */
+ PATH_STATE_USE_SUCCEEDED = 4,
+
+ /**
+ * This is a special state to indicate that we got a corrupted
+ * relay cell on a circuit and we don't intend to probe it.
+ */
+ PATH_STATE_USE_FAILED = 5,
+
+ /**
+ * This is a special state to indicate that we already counted
+ * the circuit. Used to guard against potential state machine
+ * violations.
+ */
+ PATH_STATE_ALREADY_COUNTED = 6,
} path_state_t;
+#define path_state_bitfield_t ENUM_BF(path_state_t)
/** An origin_circuit_t holds data necessary to build and use a circuit.
*/
typedef struct origin_circuit_t {
- circuit_t _base;
+ circuit_t base_;
/** Linked list of AP streams (or EXIT streams if hidden service)
* associated with this circuit. */
edge_connection_t *p_streams;
+
+ /** Bytes read from any attached stream since last call to
+ * control_event_circ_bandwidth_used(). Only used if we're configured
+ * to emit CIRC_BW events. */
+ uint32_t n_read_circ_bw;
+
+ /** Bytes written to any attached stream since last call to
+ * control_event_circ_bandwidth_used(). Only used if we're configured
+ * to emit CIRC_BW events. */
+ uint32_t n_written_circ_bw;
+
/** Build state for this circuit. It includes the intended path
* length, the chosen exit router, rendezvous information, etc.
*/
@@ -2646,9 +2989,36 @@ typedef struct origin_circuit_t {
* cannibalized circuits. */
unsigned int has_opened : 1;
- /** Kludge to help us prevent the warn in bug #6475 and eventually
- * debug why we are not seeing first hops in some cases. */
- path_state_t path_state : 2;
+ /**
+ * Path bias state machine. Used to ensure integrity of our
+ * circuit building and usage accounting. See path_state_t
+ * for more details.
+ */
+ path_state_bitfield_t path_state : 3;
+
+ /* If this flag is set, we should not consider attaching any more
+ * connections to this circuit. */
+ unsigned int unusable_for_new_conns : 1;
+
+ /**
+ * Tristate variable to guard against pathbias miscounting
+ * due to circuit purpose transitions changing the decision
+ * of pathbias_should_count(). This variable is informational
+ * only. The current results of pathbias_should_count() are
+ * the official decision for pathbias accounting.
+ */
+ uint8_t pathbias_shouldcount;
+#define PATHBIAS_SHOULDCOUNT_UNDECIDED 0
+#define PATHBIAS_SHOULDCOUNT_IGNORED 1
+#define PATHBIAS_SHOULDCOUNT_COUNTED 2
+
+ /** For path probing. Store the temporary probe stream ID
+ * for response comparison */
+ streamid_t pathbias_probe_id;
+
+ /** For path probing. Store the temporary probe address nonce
+ * (in host byte order) for response comparison. */
+ uint32_t pathbias_probe_nonce;
/** Set iff this is a hidden-service circuit which has timed out
* according to our current circuit-build timeout, but which has
@@ -2666,6 +3036,10 @@ typedef struct origin_circuit_t {
* service-side introduction circuits never have this flag set.) */
unsigned int hs_circ_has_timed_out : 1;
+ /** Set iff this circuit has been given a relaxed timeout because
+ * no circuits have opened. Used to prevent spamming logs. */
+ unsigned int relaxed_timeout : 1;
+
/** Set iff this is a service-side rendezvous circuit for which a
* new connection attempt has been launched. We consider launching
* a new service-side rend circ to a client when the previous one
@@ -2743,29 +3117,42 @@ typedef struct origin_circuit_t {
* ISO_STREAM. */
uint64_t associated_isolated_stream_global_id;
/**@}*/
-
+ /** A list of addr_policy_t for this circuit in particular. Used by
+ * adjust_exit_policy_from_exitpolicy_failure.
+ */
+ smartlist_t *prepend_policy;
} origin_circuit_t;
+struct onion_queue_t;
+
/** An or_circuit_t holds information needed to implement a circuit at an
* OR. */
typedef struct or_circuit_t {
- circuit_t _base;
+ circuit_t base_;
/** Next circuit in the doubly-linked ring of circuits waiting to add
- * cells to p_conn. NULL if we have no cells pending, or if we're not
+ * cells to p_chan. NULL if we have no cells pending, or if we're not
* linked to an OR connection. */
- struct circuit_t *next_active_on_p_conn;
+ struct circuit_t *next_active_on_p_chan;
/** Previous circuit in the doubly-linked ring of circuits waiting to add
- * cells to p_conn. NULL if we have no cells pending, or if we're not
+ * cells to p_chan. NULL if we have no cells pending, or if we're not
* linked to an OR connection. */
- struct circuit_t *prev_active_on_p_conn;
+ struct circuit_t *prev_active_on_p_chan;
+ /** Pointer to an entry on the onion queue, if this circuit is waiting for a
+ * chance to give an onionskin to a cpuworker. Used only in onion.c */
+ struct onion_queue_t *onionqueue_entry;
/** The circuit_id used in the previous (backward) hop of this circuit. */
circid_t p_circ_id;
/** Queue of cells waiting to be transmitted on p_conn. */
- cell_queue_t p_conn_cells;
- /** The OR connection that is previous in this circuit. */
- or_connection_t *p_conn;
+ cell_queue_t p_chan_cells;
+ /** The channel that is previous in this circuit. */
+ channel_t *p_chan;
+ /**
+ * Circuit mux associated with p_chan to which this circuit is attached;
+ * NULL if we have no p_chan.
+ */
+ circuitmux_t *p_mux;
/** Linked list of Exit streams associated with this circuit. */
edge_connection_t *n_streams;
/** Linked list of Exit streams associated with this circuit that are
@@ -2791,21 +3178,10 @@ typedef struct or_circuit_t {
* is not marked for close. */
struct or_circuit_t *rend_splice;
-#if REND_COOKIE_LEN >= DIGEST_LEN
-#define REND_TOKEN_LEN REND_COOKIE_LEN
-#else
-#define REND_TOKEN_LEN DIGEST_LEN
-#endif
+ struct or_circuit_rendinfo_s *rendinfo;
- /** A hash of location-hidden service's PK if purpose is INTRO_POINT, or a
- * rendezvous cookie if purpose is REND_POINT_WAITING. Filled with zeroes
- * otherwise.
- * ???? move to a subtype or adjunct structure? Wastes 20 bytes. -NM
- */
- char rend_token[REND_TOKEN_LEN];
-
- /* ???? move to a subtype or adjunct structure? Wastes 20 bytes -NM */
- char handshake_digest[DIGEST_LEN]; /**< Stores KH for the handshake. */
+ /** Stores KH for the handshake. */
+ char rend_circ_nonce[DIGEST_LEN];/* KH in tor-spec.txt */
/** How many more relay_early cells can we send on this circuit, according
* to the specification? */
@@ -2823,31 +3199,65 @@ typedef struct or_circuit_t {
* buffer stats to disk. */
uint64_t total_cell_waiting_time;
- /** The EWMA count for the number of cells flushed from the
- * p_conn_cells queue. */
- cell_ewma_t p_cell_ewma;
+ /** Maximum cell queue size for a middle relay; this is stored per circuit
+ * so append_cell_to_circuit_queue() can adjust it if it changes. If set
+ * to zero, it is initialized to the default value.
+ */
+ uint32_t max_middle_cells;
} or_circuit_t;
+typedef struct or_circuit_rendinfo_s {
+
+#if REND_COOKIE_LEN != DIGEST_LEN
+#error "The REND_TOKEN_LEN macro assumes REND_COOKIE_LEN == DIGEST_LEN"
+#endif
+#define REND_TOKEN_LEN DIGEST_LEN
+
+ /** A hash of location-hidden service's PK if purpose is INTRO_POINT, or a
+ * rendezvous cookie if purpose is REND_POINT_WAITING. Filled with zeroes
+ * otherwise.
+ */
+ char rend_token[REND_TOKEN_LEN];
+
+ /** True if this is a rendezvous point circuit; false if this is an
+ * introduction point. */
+ unsigned is_rend_circ;
+
+} or_circuit_rendinfo_t;
+
/** Convert a circuit subtype to a circuit_t. */
-#define TO_CIRCUIT(x) (&((x)->_base))
+#define TO_CIRCUIT(x) (&((x)->base_))
/** Convert a circuit_t* to a pointer to the enclosing or_circuit_t. Assert
* if the cast is impossible. */
static or_circuit_t *TO_OR_CIRCUIT(circuit_t *);
+static const or_circuit_t *CONST_TO_OR_CIRCUIT(const circuit_t *);
/** Convert a circuit_t* to a pointer to the enclosing origin_circuit_t.
* Assert if the cast is impossible. */
static origin_circuit_t *TO_ORIGIN_CIRCUIT(circuit_t *);
+static const origin_circuit_t *CONST_TO_ORIGIN_CIRCUIT(const circuit_t *);
static INLINE or_circuit_t *TO_OR_CIRCUIT(circuit_t *x)
{
tor_assert(x->magic == OR_CIRCUIT_MAGIC);
return DOWNCAST(or_circuit_t, x);
}
+static INLINE const or_circuit_t *CONST_TO_OR_CIRCUIT(const circuit_t *x)
+{
+ tor_assert(x->magic == OR_CIRCUIT_MAGIC);
+ return DOWNCAST(or_circuit_t, x);
+}
static INLINE origin_circuit_t *TO_ORIGIN_CIRCUIT(circuit_t *x)
{
tor_assert(x->magic == ORIGIN_CIRCUIT_MAGIC);
return DOWNCAST(origin_circuit_t, x);
}
+static INLINE const origin_circuit_t *CONST_TO_ORIGIN_CIRCUIT(
+ const circuit_t *x)
+{
+ tor_assert(x->magic == ORIGIN_CIRCUIT_MAGIC);
+ return DOWNCAST(origin_circuit_t, x);
+}
/** Bitfield type: things that we're willing to use invalid routers for. */
typedef enum invalid_router_usage_t {
@@ -2910,13 +3320,40 @@ typedef struct port_cfg_t {
uint8_t isolation_flags; /**< Zero or more isolation flags */
int session_group; /**< A session group, or -1 if this port is not in a
* session group. */
+ /* Socks only: */
+ /** When both no-auth and user/pass are advertised by a SOCKS client, select
+ * no-auth. */
+ unsigned int socks_prefer_no_auth : 1;
/* Server port types (or, dir) only: */
unsigned int no_advertise : 1;
unsigned int no_listen : 1;
unsigned int all_addrs : 1;
- unsigned int ipv4_only : 1;
- unsigned int ipv6_only : 1;
+ unsigned int bind_ipv4_only : 1;
+ unsigned int bind_ipv6_only : 1;
+
+ /* Client port types only: */
+ unsigned int ipv4_traffic : 1;
+ unsigned int ipv6_traffic : 1;
+ unsigned int prefer_ipv6 : 1;
+
+ /** For a socks listener: should we cache IPv4/IPv6 DNS information that
+ * exit nodes tell us?
+ *
+ * @{ */
+ unsigned int cache_ipv4_answers : 1;
+ unsigned int cache_ipv6_answers : 1;
+ /** @} */
+ /** For a socks listeners: if we find an answer in our client-side DNS cache,
+ * should we use it?
+ *
+ * @{ */
+ unsigned int use_cached_ipv4_answers : 1;
+ unsigned int use_cached_ipv6_answers : 1;
+ /** @} */
+ /** For socks listeners: When we can automap an address to IPv4 or IPv6,
+ * do we prefer IPv6? */
+ unsigned int prefer_ipv6_virtaddr : 1;
/* Unix sockets only: */
/** Path for an AF_UNIX address */
@@ -2952,14 +3389,14 @@ typedef struct routerset_t routerset_t;
/** Configuration options for a Tor process. */
typedef struct {
- uint32_t _magic;
+ uint32_t magic_;
/** What should the tor process actually do? */
enum {
CMD_RUN_TOR=0, CMD_LIST_FINGERPRINT, CMD_HASH_PASSWORD,
- CMD_VERIFY_CONFIG, CMD_RUN_UNITTESTS
+ CMD_VERIFY_CONFIG, CMD_RUN_UNITTESTS, CMD_DUMP_CONFIG
} command;
- const char *command_arg; /**< Argument for command-line option. */
+ char *command_arg; /**< Argument for command-line option. */
config_line_t *Logs; /**< New-style list of configuration lines
* for logs */
@@ -2994,7 +3431,7 @@ typedef struct {
* ORs not to consider as exits. */
/** Union of ExcludeNodes and ExcludeExitNodes */
- routerset_t *_ExcludeExitNodesUnion;
+ routerset_t *ExcludeExitNodesUnion_;
int DisableAllSwap; /**< Boolean: Attempt to call mlockall() on our
* process for all current and future memory. */
@@ -3002,7 +3439,7 @@ typedef struct {
/** List of "entry", "middle", "exit", "introduction", "rendezvous". */
smartlist_t *AllowInvalidNodes;
/** Bitmask; derived from AllowInvalidNodes. */
- invalid_router_usage_t _AllowInvalid;
+ invalid_router_usage_t AllowInvalid_;
config_line_t *ExitPolicy; /**< Lists of exit policy components. */
int ExitPolicyRejectPrivate; /**< Should we not exit to local addresses? */
config_line_t *SocksPolicy; /**< Lists of socks policy components */
@@ -3023,7 +3460,11 @@ typedef struct {
/** Addresses to bind for listening for control connections. */
config_line_t *ControlListenAddress;
/** Local address to bind outbound sockets */
- char *OutboundBindAddress;
+ config_line_t *OutboundBindAddress;
+ /** IPv4 address derived from OutboundBindAddress. */
+ tor_addr_t OutboundBindAddressIPv4_;
+ /** IPv6 address derived from OutboundBindAddress. */
+ tor_addr_t OutboundBindAddressIPv6_;
/** Directory server only: which versions of
* Tor should we tell users to run? */
config_line_t *RecommendedVersions;
@@ -3036,10 +3477,21 @@ typedef struct {
char *User; /**< Name of user to run Tor as. */
char *Group; /**< Name of group to run Tor as. */
config_line_t *ORPort_lines; /**< Ports to listen on for OR connections. */
+ /** Ports to listen on for extended OR connections. */
+ config_line_t *ExtORPort_lines;
/** Ports to listen on for SOCKS connections. */
config_line_t *SocksPort_lines;
/** Ports to listen on for transparent pf/netfilter connections. */
config_line_t *TransPort_lines;
+ const char *TransProxyType; /**< What kind of transparent proxy
+ * implementation are we using? */
+ /** Parsed value of TransProxyType. */
+ enum {
+ TPT_DEFAULT,
+ TPT_PF_DIVERT,
+ TPT_IPFW,
+ TPT_TPROXY,
+ } TransProxyType_parsed;
config_line_t *NATDPort_lines; /**< Ports to listen on for transparent natd
* connections. */
config_line_t *ControlPort_lines; /**< Ports to listen on for control
@@ -3052,6 +3504,12 @@ typedef struct {
config_line_t *DirPort_lines;
config_line_t *DNSPort_lines; /**< Ports to listen on for DNS requests. */
+ /* MaxMemInQueues value as input by the user. We clean this up to be
+ * MaxMemInQueues. */
+ uint64_t MaxMemInQueues_raw;
+ uint64_t MaxMemInQueues;/**< If we have more memory than this allocated
+ * for queues and buffers, run the OOM handler */
+
/** @name port booleans
*
* Derived booleans: True iff there is a non-listener port on an AF_INET or
@@ -3067,18 +3525,13 @@ typedef struct {
unsigned int ControlPort_set : 1;
unsigned int DirPort_set : 1;
unsigned int DNSPort_set : 1;
+ unsigned int ExtORPort_set : 1;
/**@}*/
int AssumeReachable; /**< Whether to publish our descriptor regardless. */
int AuthoritativeDir; /**< Boolean: is this an authoritative directory? */
- int V1AuthoritativeDir; /**< Boolean: is this an authoritative directory
- * for version 1 directories? */
- int V2AuthoritativeDir; /**< Boolean: is this an authoritative directory
- * for version 2 directories? */
int V3AuthoritativeDir; /**< Boolean: is this an authoritative directory
* for version 3 directories? */
- int HSAuthoritativeDir; /**< Boolean: does this an authoritative directory
- * handle hidden service requests? */
int NamingAuthoritativeDir; /**< Boolean: is this an authoritative directory
* that's willing to bind names? */
int VersioningAuthoritativeDir; /**< Boolean: is this an authoritative
@@ -3092,7 +3545,7 @@ typedef struct {
char *BridgePassword;
/** If BridgePassword is set, this is a SHA256 digest of the basic http
* authenticator for it. Used so we can do a time-independent comparison. */
- char *_BridgePassword_AuthDigest;
+ char *BridgePassword_AuthDigest_;
int UseBridges; /**< Boolean: should we start all circuits with a bridge? */
config_line_t *Bridges; /**< List of bootstrap bridge addresses. */
@@ -3103,6 +3556,12 @@ typedef struct {
config_line_t *ServerTransportPlugin; /**< List of client
transport plugins. */
+ /** List of TCP/IP addresses that transports should listen at. */
+ config_line_t *ServerTransportListenAddr;
+
+ /** List of options that must be passed to pluggable transports. */
+ config_line_t *ServerTransportOptions;
+
int BridgeRelay; /**< Boolean: are we acting as a bridge relay? We make
* this explicit so we can change how we behave in the
* future. */
@@ -3118,13 +3577,11 @@ typedef struct {
* "v1", "v2", "v3", "bridge", or "". */
smartlist_t *PublishServerDescriptor;
/** A bitfield of authority types, derived from PublishServerDescriptor. */
- dirinfo_type_t _PublishServerDescriptor;
+ dirinfo_type_t PublishServerDescriptor_;
/** Boolean: do we publish hidden service descriptors to the HS auths? */
int PublishHidServDescriptors;
int FetchServerDescriptors; /**< Do we fetch server descriptors as normal? */
int FetchHidServDescriptors; /**< and hidden service descriptors? */
- int FetchV2Networkstatus; /**< Do we fetch v2 networkstatus documents when
- * we don't need to? */
int HidServDirectoryV2; /**< Do we participate in the HS DHT? */
int VoteOnHidServDirectoriesV2; /**< As a directory authority, vote on
@@ -3151,7 +3608,7 @@ typedef struct {
int CloseHSServiceRendCircuitsImmediatelyOnTimeout;
int ConnLimit; /**< Demanded minimum number of simultaneous connections. */
- int _ConnLimit; /**< Maximum allowed number of simultaneous connections. */
+ int ConnLimit_; /**< Maximum allowed number of simultaneous connections. */
int RunAsDaemon; /**< If true, run in the background. (Unix only) */
int FascistFirewall; /**< Whether to prefer ORs reachable on open ports. */
smartlist_t *FirewallPorts; /**< Which ports our firewall allows
@@ -3210,13 +3667,15 @@ typedef struct {
* and try a new circuit if the stream has been
* waiting for this many seconds. If zero, use
* our default internal timeout schedule. */
- int MaxOnionsPending; /**< How many circuit CREATE requests do we allow
- * to wait simultaneously before we start dropping
- * them? */
+ int MaxOnionQueueDelay; /**<DOCDOC*/
int NewCircuitPeriod; /**< How long do we use a circuit before building
* a new one? */
int MaxCircuitDirtiness; /**< Never use circs that were first used more than
this interval ago. */
+ int PredictedPortsRelevanceTime; /** How long after we've requested a
+ * connection for a given port, do we want
+ * to continue to pick exits that support
+ * that port? */
uint64_t BandwidthRate; /**< How much bandwidth, on average, are we willing
* to use in a second? */
uint64_t BandwidthBurst; /**< How much bandwidth, at maximum, are we willing
@@ -3264,7 +3723,14 @@ typedef struct {
/** List of configuration lines for replacement directory authorities.
* If you just want to replace one class of authority at a time,
* use the "Alternate*Authority" options below instead. */
- config_line_t *DirServers;
+ config_line_t *DirAuthorities;
+
+ /** List of fallback directory servers */
+ config_line_t *FallbackDir;
+
+ /** Weight to apply to all directory authority rates if considering them
+ * along with fallbackdirs */
+ double DirAuthorityFallbackRate;
/** If set, use these main (currently v3) directory authorities and
* not the default ones. */
@@ -3273,9 +3739,6 @@ typedef struct {
/** If set, use these bridge authorities and not the default one. */
config_line_t *AlternateBridgeAuthority;
- /** If set, use these HS authorities and not the default ones. */
- config_line_t *AlternateHSAuthority;
-
char *MyFamily; /**< Declared family for this OR. */
config_line_t *NodeFamilies; /**< List of config lines for
* node families */
@@ -3312,6 +3775,7 @@ typedef struct {
int AuthDirMaxServersPerAuthAddr; /**< Do not permit more than this
* number of servers per IP address shared
* with an authority. */
+ int AuthDirHasIPv6Connectivity; /**< Boolean: are we on IPv6? */
/** If non-zero, always vote the Fast flag for any relay advertising
* this amount of capacity or more. */
@@ -3334,7 +3798,10 @@ typedef struct {
int CookieAuthentication; /**< Boolean: do we enable cookie-based auth for
* the control system? */
- char *CookieAuthFile; /**< Location of a cookie authentication file. */
+ char *CookieAuthFile; /**< Filesystem location of a ControlPort
+ * authentication cookie. */
+ char *ExtORPortCookieAuthFile; /**< Filesystem location of Extended
+ * ORPort authentication cookie. */
int CookieAuthFileGroupReadable; /**< Boolean: Is the CookieAuthFile g+r? */
int LeaveStreamsUnattached; /**< Boolean: Does Tor attach new streams to
* circuits itself (0), or does it expect a controller
@@ -3354,8 +3821,9 @@ typedef struct {
/* Derived from SafeLogging */
enum {
SAFELOG_SCRUB_ALL, SAFELOG_SCRUB_RELAY, SAFELOG_SCRUB_NONE
- } _SafeLogging;
+ } SafeLogging_;
+ int Sandbox; /**< Boolean: should sandboxing be enabled? */
int SafeSocks; /**< Boolean: should we outright refuse application
* connections that use socks4 or socks5-with-local-dns? */
#define LOG_PROTOCOL_WARN (get_options()->ProtocolWarnings ? \
@@ -3373,6 +3841,10 @@ typedef struct {
int UseEntryGuards; /**< Boolean: Do we try to enter from a smallish number
* of fixed nodes? */
int NumEntryGuards; /**< How many entry guards do we try to establish? */
+ int UseEntryGuardsAsDirGuards; /** Boolean: Do we try to get directory info
+ * from a smallish number of fixed nodes? */
+ int NumDirectoryGuards; /**< How many dir guards do we try to establish?
+ * If 0, use value from NumEntryGuards. */
int RephistTrackTime; /**< How many seconds do we keep rephist info? */
int FastFirstHopPK; /**< If Tor believes it is safe, should we save a third
* of our PK time by sending CREATE_FAST cells? */
@@ -3383,8 +3855,10 @@ typedef struct {
/** Should we fetch our dir info at the start of the consensus period? */
int FetchDirInfoExtraEarly;
- char *VirtualAddrNetwork; /**< Address and mask to hand out for virtual
- * MAPADDRESS requests. */
+ char *VirtualAddrNetworkIPv4; /**< Address and mask to hand out for virtual
+ * MAPADDRESS requests for IPv4 addresses */
+ char *VirtualAddrNetworkIPv6; /**< Address and mask to hand out for virtual
+ * MAPADDRESS requests for IPv6 addresses */
int ServerDNSSearchDomains; /**< Boolean: If set, we don't force exit
* addresses to be FQDNs, but rather search for them in
* the local domains. */
@@ -3412,10 +3886,6 @@ typedef struct {
* testing our DNS server. */
int EnforceDistinctSubnets; /**< If true, don't allow multiple routers in the
* same network zone in the same circuit. */
- int TunnelDirConns; /**< If true, use BEGIN_DIR rather than BEGIN when
- * possible. */
- int PreferTunneledDirConns; /**< If true, avoid dirservers that don't
- * support BEGIN_DIR, when possible. */
int PortForwarding; /**< If true, use NAT-PMP or UPnP to automatically
* forward the DirPort and ORPort on the NAT device */
char *PortForwardingHelper; /** < Filename or full path of the port
@@ -3478,6 +3948,13 @@ typedef struct {
* over randomly chosen exits. */
int ClientRejectInternalAddresses;
+ /** If true, clients may connect over IPv6. XXX we don't really
+ enforce this -- clients _may_ set up outgoing IPv6 connections
+ even when this option is not set. */
+ int ClientUseIPv6;
+ /** If true, prefer an IPv6 OR port over an IPv4 one. */
+ int ClientPreferIPv6ORPort;
+
/** The length of time that we think a consensus should be fresh. */
int V3AuthVotingInterval;
/** The length of time we think it will take to distribute votes. */
@@ -3498,6 +3975,10 @@ typedef struct {
* consensus vote on the 'params' line. */
char *ConsensusParams;
+ /** Authority only: minimum number of measured bandwidths we must see
+ * before we only beliee measured bandwidths to assign flags. */
+ int MinMeasuredBWsForAuthToIgnoreAdvertised;
+
/** The length of time that we think an initial consensus should be fresh.
* Only altered on testing networks. */
int TestingV3AuthInitialVotingInterval;
@@ -3510,6 +3991,10 @@ typedef struct {
* signatures. Only altered on testing networks.*/
int TestingV3AuthInitialDistDelay;
+ /** Offset in seconds added to the starting time for consensus
+ voting. Only altered on testing networks. */
+ int TestingV3AuthVotingStartOffset;
+
/** If an authority has been around for less than this amount of time, it
* does not believe its reachability information is accurate. Only
* altered on testing networks. */
@@ -3520,22 +4005,88 @@ typedef struct {
* networks. */
int TestingEstimatedDescriptorPropagationTime;
+ /** Schedule for when servers should download things in general. Only
+ * altered on testing networks. */
+ smartlist_t *TestingServerDownloadSchedule;
+
+ /** Schedule for when clients should download things in general. Only
+ * altered on testing networks. */
+ smartlist_t *TestingClientDownloadSchedule;
+
+ /** Schedule for when servers should download consensuses. Only altered
+ * on testing networks. */
+ smartlist_t *TestingServerConsensusDownloadSchedule;
+
+ /** Schedule for when clients should download consensuses. Only altered
+ * on testing networks. */
+ smartlist_t *TestingClientConsensusDownloadSchedule;
+
+ /** Schedule for when clients should download bridge descriptors. Only
+ * altered on testing networks. */
+ smartlist_t *TestingBridgeDownloadSchedule;
+
+ /** When directory clients have only a few descriptors to request, they
+ * batch them until they have more, or until this amount of time has
+ * passed. Only altered on testing networks. */
+ int TestingClientMaxIntervalWithoutRequest;
+
+ /** How long do we let a directory connection stall before expiring
+ * it? Only altered on testing networks. */
+ int TestingDirConnectionMaxStall;
+
+ /** How many times will we try to fetch a consensus before we give
+ * up? Only altered on testing networks. */
+ int TestingConsensusMaxDownloadTries;
+
+ /** How many times will we try to download a router's descriptor before
+ * giving up? Only altered on testing networks. */
+ int TestingDescriptorMaxDownloadTries;
+
+ /** How many times will we try to download a microdescriptor before
+ * giving up? Only altered on testing networks. */
+ int TestingMicrodescMaxDownloadTries;
+
+ /** How many times will we try to fetch a certificate before giving
+ * up? Only altered on testing networks. */
+ int TestingCertMaxDownloadTries;
+
/** If true, we take part in a testing network. Change the defaults of a
* couple of other configuration options and allow to change the values
* of certain configuration options. */
int TestingTorNetwork;
- /** File to check for a consensus networkstatus, if we don't have one
- * cached. */
- char *FallbackNetworkstatusFile;
+ /** Minimum value for the Exit flag threshold on testing networks. */
+ uint64_t TestingMinExitFlagThreshold;
+
+ /** Minimum value for the Fast flag threshold on testing networks. */
+ uint64_t TestingMinFastFlagThreshold;
+
+ /** Relays in a testing network which should be voted Guard
+ * regardless of uptime and bandwidth. */
+ routerset_t *TestingDirAuthVoteGuard;
+
+ /** Enable CONN_BW events. Only altered on testing networks. */
+ int TestingEnableConnBwEvent;
+
+ /** Enable CELL_STATS events. Only altered on testing networks. */
+ int TestingEnableCellStatsEvent;
+
+ /** Enable TB_EMPTY events. Only altered on testing networks. */
+ int TestingEnableTbEmptyEvent;
/** If true, and we have GeoIP data, and we're a bridge, keep a per-country
* count of how many client addresses have contacted us so that we can help
* the bridge authority guess which countries have blocked access to us. */
int BridgeRecordUsageByCountry;
- /** Optionally, a file with GeoIP data. */
+ /** Optionally, IPv4 and IPv6 GeoIP data. */
char *GeoIPFile;
+ char *GeoIPv6File;
+
+ /** Autobool: if auto, then any attempt to Exclude{Exit,}Nodes a particular
+ * country code will exclude all nodes in ?? and A1. If true, all nodes in
+ * ?? and A1 are excluded. Has no effect if we don't know any GeoIP data. */
+ int GeoIPExcludeUnknown;
/** If true, SIGHUP should reload the torrc. Sometimes controllers want
* to make this false. */
@@ -3559,13 +4110,13 @@ typedef struct {
/** If true, do not enable IOCP on windows with bufferevents, even if
* we think we could. */
int DisableIOCP;
- /** For testing only: will go away in 0.2.3.x. */
- int _UseFilteringSSLBufferevents;
+ /** For testing only: will go away eventually. */
+ int UseFilteringSSLBufferevents;
/** Set to true if the TestingTorNetwork configuration option is set.
* This is used so that options_validate() has a chance to realize that
* the defaults have changed. */
- int _UsingTestNetworkDefaults;
+ int UsingTestNetworkDefaults_;
/** If 1, we try to use microdescriptors to build circuits. If 0, we don't.
* If -1, Tor decides. */
@@ -3597,19 +4148,84 @@ typedef struct {
/**
* Parameters for path-bias detection.
* @{
+ * These options override the default behavior of Tor's (**currently
+ * experimental**) path bias detection algorithm. To try to find broken or
+ * misbehaving guard nodes, Tor looks for nodes where more than a certain
+ * fraction of circuits through that guard fail to get built.
+ *
+ * The PathBiasCircThreshold option controls how many circuits we need to
+ * build through a guard before we make these checks. The
+ * PathBiasNoticeRate, PathBiasWarnRate and PathBiasExtremeRate options
+ * control what fraction of circuits must succeed through a guard so we
+ * won't write log messages. If less than PathBiasExtremeRate circuits
+ * succeed *and* PathBiasDropGuards is set to 1, we disable use of that
+ * guard.
+ *
+ * When we have seen more than PathBiasScaleThreshold circuits through a
+ * guard, we scale our observations by 0.5 (governed by the consensus) so
+ * that new observations don't get swamped by old ones.
+ *
+ * By default, or if a negative value is provided for one of these options,
+ * Tor uses reasonable defaults from the networkstatus consensus document.
+ * If no defaults are available there, these options default to 150, .70,
+ * .50, .30, 0, and 300 respectively.
*/
int PathBiasCircThreshold;
double PathBiasNoticeRate;
- double PathBiasDisableRate;
+ double PathBiasWarnRate;
+ double PathBiasExtremeRate;
+ int PathBiasDropGuards;
int PathBiasScaleThreshold;
- int PathBiasScaleFactor;
/** @} */
+ /**
+ * Parameters for path-bias use detection
+ * @{
+ * Similar to the above options, these options override the default behavior
+ * of Tor's (**currently experimental**) path use bias detection algorithm.
+ *
+ * Where as the path bias parameters govern thresholds for successfully
+ * building circuits, these four path use bias parameters govern thresholds
+ * only for circuit usage. Circuits which receive no stream usage are not
+ * counted by this detection algorithm. A used circuit is considered
+ * successful if it is capable of carrying streams or otherwise receiving
+ * well-formed responses to RELAY cells.
+ *
+ * By default, or if a negative value is provided for one of these options,
+ * Tor uses reasonable defaults from the networkstatus consensus document.
+ * If no defaults are available there, these options default to 20, .80,
+ * .60, and 100, respectively.
+ */
+ int PathBiasUseThreshold;
+ double PathBiasNoticeUseRate;
+ double PathBiasExtremeUseRate;
+ int PathBiasScaleUseThreshold;
+ /** @} */
+
+ int IPv6Exit; /**< Do we support exiting to IPv6 addresses? */
+
+ char *TLSECGroup; /**< One of "P256", "P224", or nil for auto */
+
+ /** Autobool: should we use the ntor handshake if we can? */
+ int UseNTorHandshake;
+
+ /** Fraction: */
+ double PathsNeededToBuildCircuits;
+
+ /** What expiry time shall we place on our SSL certs? "0" means we
+ * should guess a suitable value. */
+ int SSLKeyLifetime;
+
+ /** How long (seconds) do we keep a guard before picking a new one? */
+ int GuardLifetime;
+
+ /** Should we send the timestamps that pre-023 hidden services want? */
+ int Support022HiddenServices;
} or_options_t;
/** Persistent state for an onion router, as saved to disk. */
typedef struct {
- uint32_t _magic;
+ uint32_t magic_;
/** The time at which we next plan to write the state to the disk. Equal to
* TIME_MAX if there are no savable changes, 0 if there are changes that
* should be saved right away. */
@@ -3729,6 +4345,10 @@ struct socks_request_t {
* make sure we send back a socks reply for
* every connection. */
unsigned int got_auth : 1; /**< Have we received any authentication data? */
+ /** If this is set, we will choose "no authentication" instead of
+ * "username/password" authentication if both are offered. Used as input to
+ * parse_socks. */
+ unsigned int socks_prefer_no_auth : 1;
/** Number of bytes in username; 0 if username is NULL */
size_t usernamelen;
@@ -3856,30 +4476,7 @@ typedef struct {
int after_firsthop_idx;
} network_liveness_t;
-/** Structure for circuit build times history */
-typedef struct {
- /** The circular array of recorded build times in milliseconds */
- build_time_t circuit_build_times[CBT_NCIRCUITS_TO_OBSERVE];
- /** Current index in the circuit_build_times circular array */
- int build_times_idx;
- /** Total number of build times accumulated. Max CBT_NCIRCUITS_TO_OBSERVE */
- int total_build_times;
- /** Information about the state of our local network connection */
- network_liveness_t liveness;
- /** Last time we built a circuit. Used to decide to build new test circs */
- time_t last_circ_at;
- /** "Minimum" value of our pareto distribution (actually mode) */
- build_time_t Xm;
- /** alpha exponent for pareto dist. */
- double alpha;
- /** Have we computed a timeout? */
- int have_computed_timeout;
- /** The exact value for that timeout in milliseconds. Stored as a double
- * to maintain precision from calculations to and from quantile value. */
- double timeout_ms;
- /** How long we wait before actually closing the circuit. */
- double close_ms;
-} circuit_build_times_t;
+typedef struct circuit_build_times_s circuit_build_times_t;
/********************************* config.c ***************************/
@@ -3916,6 +4513,7 @@ typedef enum {
* did this remapping happen." */
ADDRMAPSRC_NONE
} addressmap_entry_source_t;
+#define addressmap_entry_source_bitfield_t ENUM_BF(addressmap_entry_source_t)
/********************************* control.c ***************************/
@@ -4036,7 +4634,7 @@ typedef enum {
typedef struct measured_bw_line_t {
char node_id[DIGEST_LEN];
char node_hex[MAX_HEX_NICKNAME_LEN+1];
- long int bw;
+ long int bw_kb;
} measured_bw_line_t;
#endif
@@ -4058,15 +4656,6 @@ typedef struct vote_timing_t {
/********************************* geoip.c **************************/
-/** Round all GeoIP results to the next multiple of this value, to avoid
- * leaking information. */
-#define DIR_RECORD_USAGE_GRANULARITY 8
-/** Time interval: Flush geoip data to disk this often. */
-#define DIR_ENTRY_RECORD_USAGE_RETAIN_IPS (24*60*60)
-/** How long do we have to have observed per-country request history before
- * we are willing to talk about it? */
-#define DIR_RECORD_USAGE_MIN_OBSERVATION_TIME (12*60*60)
-
/** Indicates an action that we might be noting geoip statistics on.
* Note that if we're noticing CONNECT, we're a bridge, and if we're noticing
* the others, we're not.
@@ -4076,8 +4665,6 @@ typedef enum {
GEOIP_CLIENT_CONNECT = 0,
/** We've served a networkstatus consensus as a directory server. */
GEOIP_CLIENT_NETWORKSTATUS = 1,
- /** We've served a v2 networkstatus consensus as a directory server. */
- GEOIP_CLIENT_NETWORKSTATUS_V2 = 2,
} geoip_client_action_t;
/** Indicates either a positive reply or a reason for rejectng a network
* status request that will be included in geoip statistics. */
@@ -4121,10 +4708,10 @@ typedef enum {
/** Flushed last cell from queue of the circuit that initiated a
* tunneled request to the outbuf of the OR connection. */
DIRREQ_CIRC_QUEUE_FLUSHED = 3,
- /** Flushed last byte from buffer of the OR connection belonging to the
+ /** Flushed last byte from buffer of the channel belonging to the
* circuit that initiated a tunneled request; completes a tunneled
* request. */
- DIRREQ_OR_CONN_BUFFER_FLUSHED = 4
+ DIRREQ_CHANNEL_BUFFER_FLUSHED = 4
} dirreq_state_t;
#define WRITE_STATS_INTERVAL (24*60*60)
@@ -4135,11 +4722,6 @@ typedef struct microdesc_cache_t microdesc_cache_t;
/********************************* networkstatus.c *********************/
-/** Location where we found a v2 networkstatus. */
-typedef enum {
- NS_FROM_CACHE, NS_FROM_DIR_BY_FP, NS_FROM_DIR_ALL, NS_GENERATED
-} v2_networkstatus_source_t;
-
/** Possible statuses of a version of Tor, given opinions from the directory
* servers. */
typedef enum version_status_t {
@@ -4215,12 +4797,12 @@ typedef struct rend_encoded_v2_service_descriptor_t {
* sooner.)
*
* XXX023 Should this be configurable? */
-#define INTRO_POINT_LIFETIME_MIN_SECONDS 18*60*60
+#define INTRO_POINT_LIFETIME_MIN_SECONDS (18*60*60)
/** The maximum number of seconds that an introduction point will last
* before expiring due to old age.
*
* XXX023 Should this be configurable? */
-#define INTRO_POINT_LIFETIME_MAX_SECONDS 24*60*60
+#define INTRO_POINT_LIFETIME_MAX_SECONDS (24*60*60)
/** Introduction point information. Used both in rend_service_t (on
* the service side) and in rend_service_descriptor_t (on both the
@@ -4251,12 +4833,15 @@ typedef struct rend_intro_point_t {
* intro point. */
unsigned int rend_service_note_removing_intro_point_called : 1;
- /** (Service side only) A digestmap recording the INTRODUCE2 cells
- * this intro point's circuit has received. Each key is the digest
- * of the RSA-encrypted part of a received INTRODUCE2 cell; each
- * value is a pointer to the time_t at which the cell was received.
- * This digestmap is used to prevent replay attacks. */
- digestmap_t *accepted_intro_rsa_parts;
+ /** (Service side only) A replay cache recording the RSA-encrypted parts
+ * of INTRODUCE2 cells this intro point's circuit has received. This is
+ * used to prevent replay attacks. */
+ replaycache_t *accepted_intro_rsa_parts;
+
+ /** (Service side only) Count of INTRODUCE2 cells accepted from this
+ * intro point.
+ */
+ int accepted_introduce2_count;
/** (Service side only) The time at which this intro point was first
* published, or -1 if this intro point has not yet been
@@ -4287,9 +4872,9 @@ typedef struct rend_service_descriptor_t {
crypto_pk_t *pk; /**< This service's public key. */
int version; /**< Version of the descriptor format: 0 or 2. */
time_t timestamp; /**< Time when the descriptor was generated. */
- /** Bitmask: which rendezvous protocols are supported?
- * (We allow bits '0', '1', and '2' to be set.) */
- int protocols : REND_PROTOCOL_VERSION_BITMASK_WIDTH;
+ /** Bitmask: which introduce/rendezvous protocols are supported?
+ * (We allow bits '0', '1', '2' and '3' to be set.) */
+ unsigned protocols : REND_PROTOCOL_VERSION_BITMASK_WIDTH;
/** List of the service's introduction points. Elements are removed if
* introduction attempts fail. */
smartlist_t *intro_nodes;
@@ -4312,19 +4897,23 @@ typedef struct rend_cache_entry_t {
/********************************* routerlist.c ***************************/
-/** Represents information about a single trusted directory server. */
-typedef struct trusted_dir_server_t {
+/** Represents information about a single trusted or fallback directory
+ * server. */
+typedef struct dir_server_t {
char *description;
char *nickname;
char *address; /**< Hostname. */
uint32_t addr; /**< IPv4 address. */
uint16_t dir_port; /**< Directory port. */
uint16_t or_port; /**< OR port: Used for tunneling connections. */
+ double weight; /** Weight used when selecting this node at random */
char digest[DIGEST_LEN]; /**< Digest of identity key. */
char v3_identity_digest[DIGEST_LEN]; /**< Digest of v3 (authority only,
* high-security) identity key. */
unsigned int is_running:1; /**< True iff we think this server is running. */
+ unsigned int is_authority:1; /**< True iff this is a directory authority
+ * of some kind. */
/** True iff this server has accepted the most recent server descriptor
* we tried to upload to it. */
@@ -4333,8 +4922,6 @@ typedef struct trusted_dir_server_t {
/** What kind of authority is this? (Bitfield.) */
dirinfo_type_t type;
- download_status_t v2_ns_dl_status; /**< Status of downloading this server's
- * v2 network status. */
time_t addr_current_at; /**< When was the document that we derived the
* address information from published? */
@@ -4343,7 +4930,7 @@ typedef struct trusted_dir_server_t {
* as a routerstatus_t. Not updated by the
* router-status management code!
**/
-} trusted_dir_server_t;
+} dir_server_t;
#define ROUTER_REQUIRED_MIN_BANDWIDTH (20*1024)
@@ -4379,7 +4966,9 @@ typedef struct trusted_dir_server_t {
#define PDS_NO_EXISTING_SERVERDESC_FETCH (1<<3)
#define PDS_NO_EXISTING_MICRODESC_FETCH (1<<4)
-#define _PDS_PREFER_TUNNELED_DIR_CONNS (1<<16)
+/** This node is to be chosen as a directory guard, so don't choose any
+ * node that's currently a guard. */
+#define PDS_FOR_GUARD (1<<5)
/** Possible ways to weight routers when choosing one randomly. See
* routerlist_sl_choose_by_bandwidth() for more information.*/
diff --git a/src/or/policies.c b/src/or/policies.c
index 81e480968..8a91509a7 100644
--- a/src/or/policies.c
+++ b/src/or/policies.c
@@ -1,6 +1,6 @@
/* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -13,6 +13,7 @@
#include "dirserv.h"
#include "nodelist.h"
#include "policies.h"
+#include "router.h"
#include "routerparse.h"
#include "geoip.h"
#include "ht.h"
@@ -59,8 +60,10 @@ typedef struct policy_summary_item_t {
static const char *private_nets[] = {
"0.0.0.0/8", "169.254.0.0/16",
"127.0.0.0/8", "192.168.0.0/16", "10.0.0.0/8", "172.16.0.0/12",
- // "fc00::/7", "fe80::/10", "fec0::/10", "::/127",
- NULL };
+ "[::]/8",
+ "[fc00::]/7", "[fe80::]/10", "[fec0::]/10", "[ff00::]/8", "[::]/127",
+ NULL
+};
/** Replace all "private" entries in *<b>policy</b> with their expanded
* equivalents. */
@@ -87,7 +90,8 @@ policy_expand_private(smartlist_t **policy)
memcpy(&newpolicy, p, sizeof(addr_policy_t));
newpolicy.is_private = 0;
newpolicy.is_canonical = 0;
- if (tor_addr_parse_mask_ports(private_nets[i], &newpolicy.addr,
+ if (tor_addr_parse_mask_ports(private_nets[i], 0,
+ &newpolicy.addr,
&newpolicy.maskbits, &port_min, &port_max)<0) {
tor_assert(0);
}
@@ -100,6 +104,49 @@ policy_expand_private(smartlist_t **policy)
*policy = tmp;
}
+/** Expand each of the AF_UNSPEC elements in *<b>policy</b> (which indicate
+ * protocol-neutral wildcards) into a pair of wildcard elements: one IPv4-
+ * specific and one IPv6-specific. */
+void
+policy_expand_unspec(smartlist_t **policy)
+{
+ smartlist_t *tmp;
+ if (!*policy)
+ return;
+
+ tmp = smartlist_new();
+ SMARTLIST_FOREACH_BEGIN(*policy, addr_policy_t *, p) {
+ sa_family_t family = tor_addr_family(&p->addr);
+ if (family == AF_INET6 || family == AF_INET || p->is_private) {
+ smartlist_add(tmp, p);
+ } else if (family == AF_UNSPEC) {
+ addr_policy_t newpolicy_ipv4;
+ addr_policy_t newpolicy_ipv6;
+ memcpy(&newpolicy_ipv4, p, sizeof(addr_policy_t));
+ memcpy(&newpolicy_ipv6, p, sizeof(addr_policy_t));
+ newpolicy_ipv4.is_canonical = 0;
+ newpolicy_ipv6.is_canonical = 0;
+ if (p->maskbits != 0) {
+ log_warn(LD_BUG, "AF_UNSPEC policy with maskbits==%d", p->maskbits);
+ newpolicy_ipv4.maskbits = 0;
+ newpolicy_ipv6.maskbits = 0;
+ }
+ tor_addr_from_ipv4h(&newpolicy_ipv4.addr, 0);
+ tor_addr_from_ipv6_bytes(&newpolicy_ipv6.addr,
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0");
+ smartlist_add(tmp, addr_policy_get_canonical_entry(&newpolicy_ipv4));
+ smartlist_add(tmp, addr_policy_get_canonical_entry(&newpolicy_ipv6));
+ addr_policy_free(p);
+ } else {
+ log_warn(LD_BUG, "Funny-looking address policy with family %d", family);
+ smartlist_add(tmp, p);
+ }
+ } SMARTLIST_FOREACH_END(p);
+
+ smartlist_free(*policy);
+ *policy = tmp;
+}
+
/**
* Given a linked list of config lines containing "allow" and "deny"
* tokens, parse them and append the result to <b>dest</b>. Return -1
@@ -144,6 +191,7 @@ parse_addr_policy(config_line_t *cfg, smartlist_t **dest,
addr_policy_list_free(result);
} else {
policy_expand_private(&result);
+ policy_expand_unspec(&result);
if (*dest) {
smartlist_add_all(*dest, result);
@@ -319,11 +367,15 @@ addr_is_in_cc_list(uint32_t addr, const smartlist_t *cc_list)
{
country_t country;
const char *name;
+ tor_addr_t tar;
+
if (!cc_list)
return 0;
- country = geoip_get_country_by_ip(addr);
+ /* XXXXipv6 */
+ tor_addr_from_ipv4h(&tar, addr);
+ country = geoip_get_country_by_addr(&tar);
name = geoip_get_country_name(country);
- return smartlist_string_isin_case(cc_list, name);
+ return smartlist_contains_string_case(cc_list, name);
}
/** Return 1 if <b>addr</b>:<b>port</b> is permitted to publish to our
@@ -386,7 +438,8 @@ validate_addr_policies(const or_options_t *options, char **msg)
*msg = NULL;
if (policies_parse_exit_policy(options->ExitPolicy, &addr_policy,
- options->ExitPolicyRejectPrivate, NULL,
+ options->IPv6Exit,
+ options->ExitPolicyRejectPrivate, 0,
!options->BridgeRelay))
REJECT("Error in ExitPolicy entry.");
@@ -430,10 +483,12 @@ validate_addr_policies(const or_options_t *options, char **msg)
* Ignore port specifiers.
*/
static int
-load_policy_from_option(config_line_t *config, smartlist_t **policy,
+load_policy_from_option(config_line_t *config, const char *option_name,
+ smartlist_t **policy,
int assume_action)
{
int r;
+ int killed_any_ports = 0;
addr_policy_list_free(*policy);
*policy = NULL;
r = parse_addr_policy(config, policy, assume_action);
@@ -452,9 +507,13 @@ load_policy_from_option(config_line_t *config, smartlist_t **policy,
c = addr_policy_get_canonical_entry(&newp);
SMARTLIST_REPLACE_CURRENT(*policy, n, c);
addr_policy_free(n);
+ killed_any_ports = 1;
}
} SMARTLIST_FOREACH_END(n);
}
+ if (killed_any_ports) {
+ log_warn(LD_CONFIG, "Ignoring ports in %s option.", option_name);
+ }
return 0;
}
@@ -464,20 +523,22 @@ int
policies_parse_from_options(const or_options_t *options)
{
int ret = 0;
- if (load_policy_from_option(options->SocksPolicy, &socks_policy, -1) < 0)
+ if (load_policy_from_option(options->SocksPolicy, "SocksPolicy",
+ &socks_policy, -1) < 0)
ret = -1;
- if (load_policy_from_option(options->DirPolicy, &dir_policy, -1) < 0)
+ if (load_policy_from_option(options->DirPolicy, "DirPolicy",
+ &dir_policy, -1) < 0)
ret = -1;
- if (load_policy_from_option(options->AuthDirReject,
+ if (load_policy_from_option(options->AuthDirReject, "AuthDirReject",
&authdir_reject_policy, ADDR_POLICY_REJECT) < 0)
ret = -1;
- if (load_policy_from_option(options->AuthDirInvalid,
+ if (load_policy_from_option(options->AuthDirInvalid, "AuthDirInvalid",
&authdir_invalid_policy, ADDR_POLICY_REJECT) < 0)
ret = -1;
- if (load_policy_from_option(options->AuthDirBadDir,
+ if (load_policy_from_option(options->AuthDirBadDir, "AuthDirBadDir",
&authdir_baddir_policy, ADDR_POLICY_REJECT) < 0)
ret = -1;
- if (load_policy_from_option(options->AuthDirBadExit,
+ if (load_policy_from_option(options->AuthDirBadExit, "AuthDirBadExit",
&authdir_badexit_policy, ADDR_POLICY_REJECT) < 0)
ret = -1;
if (parse_reachable_addresses() < 0)
@@ -545,21 +606,25 @@ policy_eq(policy_map_ent_t *a, policy_map_ent_t *b)
/** Return a hashcode for <b>ent</b> */
static unsigned int
-policy_hash(policy_map_ent_t *ent)
+policy_hash(const policy_map_ent_t *ent)
{
- addr_policy_t *a = ent->policy;
- unsigned int r;
- if (a->is_private)
- r = 0x1234abcd;
- else
- r = tor_addr_hash(&a->addr);
- r += a->prt_min << 8;
- r += a->prt_max << 16;
- r += a->maskbits;
- if (a->policy_type == ADDR_POLICY_REJECT)
- r ^= 0xffffffff;
+ const addr_policy_t *a = ent->policy;
+ addr_policy_t aa;
+ memset(&aa, 0, sizeof(aa));
+
+ aa.prt_min = a->prt_min;
+ aa.prt_max = a->prt_max;
+ aa.maskbits = a->maskbits;
+ aa.policy_type = a->policy_type;
+ aa.is_private = a->is_private;
+
+ if (a->is_private) {
+ aa.is_private = 1;
+ } else {
+ tor_addr_copy_tight(&aa.addr, &a->addr);
+ }
- return r;
+ return (unsigned) siphash24g(&aa, sizeof(aa));
}
HT_PROTOTYPE(policy_map, policy_map_ent_t, node, policy_hash,
@@ -730,6 +795,10 @@ compare_tor_addr_to_addr_policy(const tor_addr_t *addr, uint16_t port,
static int
addr_policy_covers(addr_policy_t *a, addr_policy_t *b)
{
+ if (tor_addr_family(&a->addr) != tor_addr_family(&b->addr)) {
+ /* You can't cover a different family. */
+ return 0;
+ }
/* We can ignore accept/reject, since "accept *:80, reject *:80" reduces
* to "accept *:80". */
if (a->maskbits > b->maskbits) {
@@ -781,24 +850,54 @@ append_exit_policy_string(smartlist_t **policy, const char *more)
}
}
+/** Add "reject <b>addr</b>:*" to <b>dest</b>, creating the list as needed. */
+void
+addr_policy_append_reject_addr(smartlist_t **dest, const tor_addr_t *addr)
+{
+ addr_policy_t p, *add;
+ memset(&p, 0, sizeof(p));
+ p.policy_type = ADDR_POLICY_REJECT;
+ p.maskbits = tor_addr_family(addr) == AF_INET6 ? 128 : 32;
+ tor_addr_copy(&p.addr, addr);
+ p.prt_min = 1;
+ p.prt_max = 65535;
+
+ add = addr_policy_get_canonical_entry(&p);
+ if (!*dest)
+ *dest = smartlist_new();
+ smartlist_add(*dest, add);
+}
+
/** Detect and excise "dead code" from the policy *<b>dest</b>. */
static void
exit_policy_remove_redundancies(smartlist_t *dest)
{
- addr_policy_t *ap, *tmp, *victim;
+ addr_policy_t *ap, *tmp;
int i, j;
- /* Step one: find a *:* entry and cut off everything after it. */
- for (i = 0; i < smartlist_len(dest); ++i) {
- ap = smartlist_get(dest, i);
- if (ap->maskbits == 0 && ap->prt_min <= 1 && ap->prt_max >= 65535) {
- /* This is a catch-all line -- later lines are unreachable. */
- while (i+1 < smartlist_len(dest)) {
- victim = smartlist_get(dest, i+1);
- smartlist_del(dest, i+1);
- addr_policy_free(victim);
+ /* Step one: kill every ipv4 thing after *4:*, every IPv6 thing after *6:*
+ */
+ {
+ int kill_v4=0, kill_v6=0;
+ for (i = 0; i < smartlist_len(dest); ++i) {
+ sa_family_t family;
+ ap = smartlist_get(dest, i);
+ family = tor_addr_family(&ap->addr);
+ if ((family == AF_INET && kill_v4) ||
+ (family == AF_INET6 && kill_v6)) {
+ smartlist_del_keeporder(dest, i--);
+ addr_policy_free(ap);
+ continue;
+ }
+
+ if (ap->maskbits == 0 && ap->prt_min <= 1 && ap->prt_max >= 65535) {
+ /* This is a catch-all line -- later lines are unreachable. */
+ if (family == AF_INET) {
+ kill_v4 = 1;
+ } else if (family == AF_INET6) {
+ kill_v6 = 1;
+ }
}
- break;
}
}
@@ -813,7 +912,7 @@ exit_policy_remove_redundancies(smartlist_t *dest)
char p1[POLICY_BUF_LEN], p2[POLICY_BUF_LEN];
policy_write_item(p1, sizeof(p1), tmp, 0);
policy_write_item(p2, sizeof(p2), ap, 0);
- log(LOG_DEBUG, LD_CONFIG, "Removing exit policy %s (%d). It is made "
+ log_debug(LD_CONFIG, "Removing exit policy %s (%d). It is made "
"redundant by %s (%d).", p1, j, p2, i);
smartlist_del_keeporder(dest, j--);
addr_policy_free(tmp);
@@ -842,7 +941,7 @@ exit_policy_remove_redundancies(smartlist_t *dest)
char p1[POLICY_BUF_LEN], p2[POLICY_BUF_LEN];
policy_write_item(p1, sizeof(p1), ap, 0);
policy_write_item(p2, sizeof(p2), tmp, 0);
- log(LOG_DEBUG, LD_CONFIG, "Removing exit policy %s. It is already "
+ log_debug(LD_CONFIG, "Removing exit policy %s. It is already "
"covered by %s.", p1, p2);
smartlist_del_keeporder(dest, i--);
addr_policy_free(ap);
@@ -864,26 +963,36 @@ exit_policy_remove_redundancies(smartlist_t *dest)
* policy afterwards. If <b>rejectprivate</b> is true, prepend
* "reject private:*" to the policy. Return -1 if we can't parse cfg,
* else return 0.
+ *
+ * This function is used to parse the exit policy from our torrc. For
+ * the functions used to parse the exit policy from a router descriptor,
+ * see router_add_exit_policy.
*/
int
policies_parse_exit_policy(config_line_t *cfg, smartlist_t **dest,
- int rejectprivate, const char *local_address,
+ int ipv6_exit,
+ int rejectprivate, uint32_t local_address,
int add_default_policy)
{
+ if (!ipv6_exit) {
+ append_exit_policy_string(dest, "reject *6:*");
+ }
if (rejectprivate) {
append_exit_policy_string(dest, "reject private:*");
if (local_address) {
char buf[POLICY_BUF_LEN];
- tor_snprintf(buf, sizeof(buf), "reject %s:*", local_address);
+ tor_snprintf(buf, sizeof(buf), "reject %s:*", fmt_addr32(local_address));
append_exit_policy_string(dest, buf);
}
}
if (parse_addr_policy(cfg, dest, -1))
return -1;
- if (add_default_policy)
+ if (add_default_policy) {
append_exit_policy_string(dest, DEFAULT_EXIT_POLICY);
- else
- append_exit_policy_string(dest, "reject *:*");
+ } else {
+ append_exit_policy_string(dest, "reject *4:*");
+ append_exit_policy_string(dest, "reject *6:*");
+ }
exit_policy_remove_redundancies(*dest);
return 0;
@@ -894,7 +1003,8 @@ policies_parse_exit_policy(config_line_t *cfg, smartlist_t **dest,
void
policies_exit_policy_append_reject_star(smartlist_t **dest)
{
- append_exit_policy_string(dest, "reject *:*");
+ append_exit_policy_string(dest, "reject *4:*");
+ append_exit_policy_string(dest, "reject *6:*");
}
/** Replace the exit policy of <b>node</b> with reject *:* */
@@ -970,18 +1080,23 @@ exit_policy_is_general_exit(smartlist_t *policy)
/** Return false if <b>policy</b> might permit access to some addr:port;
* otherwise if we are certain it rejects everything, return true. */
int
-policy_is_reject_star(const smartlist_t *policy)
+policy_is_reject_star(const smartlist_t *policy, sa_family_t family)
{
if (!policy) /*XXXX disallow NULL policies? */
return 1;
- SMARTLIST_FOREACH(policy, addr_policy_t *, p, {
- if (p->policy_type == ADDR_POLICY_ACCEPT)
+ SMARTLIST_FOREACH_BEGIN(policy, addr_policy_t *, p) {
+ if (p->policy_type == ADDR_POLICY_ACCEPT &&
+ (tor_addr_family(&p->addr) == family ||
+ tor_addr_family(&p->addr) == AF_UNSPEC)) {
return 0;
- else if (p->policy_type == ADDR_POLICY_REJECT &&
- p->prt_min <= 1 && p->prt_max == 65535 &&
- p->maskbits == 0)
+ } else if (p->policy_type == ADDR_POLICY_REJECT &&
+ p->prt_min <= 1 && p->prt_max == 65535 &&
+ p->maskbits == 0 &&
+ (tor_addr_family(&p->addr) == family ||
+ tor_addr_family(&p->addr) == AF_UNSPEC)) {
return 1;
- });
+ }
+ } SMARTLIST_FOREACH_END(p);
return 1;
}
@@ -996,20 +1111,28 @@ policy_write_item(char *buf, size_t buflen, addr_policy_t *policy,
const char *addrpart;
int result;
const int is_accept = policy->policy_type == ADDR_POLICY_ACCEPT;
- const int is_ip6 = tor_addr_family(&policy->addr) == AF_INET6;
+ const sa_family_t family = tor_addr_family(&policy->addr);
+ const int is_ip6 = (family == AF_INET6);
tor_addr_to_str(addrbuf, &policy->addr, sizeof(addrbuf), 1);
/* write accept/reject 1.2.3.4 */
- if (policy->is_private)
+ if (policy->is_private) {
addrpart = "private";
- else if (policy->maskbits == 0)
- addrpart = "*";
- else
+ } else if (policy->maskbits == 0) {
+ if (format_for_desc)
+ addrpart = "*";
+ else if (family == AF_INET6)
+ addrpart = "*6";
+ else if (family == AF_INET)
+ addrpart = "*4";
+ else
+ addrpart = "*";
+ } else {
addrpart = addrbuf;
+ }
- result = tor_snprintf(buf, buflen, "%s%s%s %s",
- (is_ip6&&format_for_desc)?"opt ":"",
+ result = tor_snprintf(buf, buflen, "%s%s %s",
is_accept ? "accept" : "reject",
(is_ip6&&format_for_desc)?"6":"",
addrpart);
@@ -1189,8 +1312,8 @@ policy_summary_add_item(smartlist_t *summary, addr_policy_t *p)
for (i = 0; private_nets[i]; ++i) {
tor_addr_t addr;
maskbits_t maskbits;
- if (tor_addr_parse_mask_ports(private_nets[i], &addr,
- &maskbits, NULL, NULL)<0) {
+ if (tor_addr_parse_mask_ports(private_nets[i], 0, &addr,
+ &maskbits, NULL, NULL)<0) {
tor_assert(0);
}
if (tor_addr_compare(&p->addr, &addr, CMP_EXACT) == 0 &&
@@ -1216,7 +1339,7 @@ policy_summary_add_item(smartlist_t *summary, addr_policy_t *p)
* is an exception to the shorter-representation-wins rule).
*/
char *
-policy_summarize(smartlist_t *policy)
+policy_summarize(smartlist_t *policy, sa_family_t family)
{
smartlist_t *summary = policy_summary_create();
smartlist_t *accepts, *rejects;
@@ -1228,9 +1351,16 @@ policy_summarize(smartlist_t *policy)
tor_assert(policy);
/* Create the summary list */
- SMARTLIST_FOREACH(policy, addr_policy_t *, p, {
+ SMARTLIST_FOREACH_BEGIN(policy, addr_policy_t *, p) {
+ sa_family_t f = tor_addr_family(&p->addr);
+ if (f != AF_INET && f != AF_INET6) {
+ log_warn(LD_BUG, "Weird family when summarizing address policy");
+ }
+ if (f != family)
+ continue;
+ /* XXXX-ipv6 More family work is needed */
policy_summary_add_item(summary, p);
- });
+ } SMARTLIST_FOREACH_END(p);
/* Now create two lists of strings, one for accepted and one
* for rejected ports. We take care to merge ranges so that
@@ -1517,7 +1647,7 @@ short_policy_is_reject_star(const short_policy_t *policy)
policy->entries[0].max_port == 65535);
}
-/** Decides whether addr:port is probably or definitely accepted or rejcted by
+/** Decide whether addr:port is probably or definitely accepted or rejected by
* <b>node</b>. See compare_tor_addr_to_addr_policy for details on addr/port
* interpretation. */
addr_policy_result_t
@@ -1527,16 +1657,29 @@ compare_tor_addr_to_node_policy(const tor_addr_t *addr, uint16_t port,
if (node->rejects_all)
return ADDR_POLICY_REJECTED;
- if (node->ri)
+ if (addr && tor_addr_family(addr) == AF_INET6) {
+ const short_policy_t *p = NULL;
+ if (node->ri)
+ p = node->ri->ipv6_exit_policy;
+ else if (node->md)
+ p = node->md->ipv6_exit_policy;
+ if (p)
+ return compare_tor_addr_to_short_policy(addr, port, p);
+ else
+ return ADDR_POLICY_REJECTED;
+ }
+
+ if (node->ri) {
return compare_tor_addr_to_addr_policy(addr, port, node->ri->exit_policy);
- else if (node->md) {
+ } else if (node->md) {
if (node->md->exit_policy == NULL)
return ADDR_POLICY_REJECTED;
else
return compare_tor_addr_to_short_policy(addr, port,
node->md->exit_policy);
- } else
+ } else {
return ADDR_POLICY_PROBABLY_REJECTED;
+ }
}
/** Implementation for GETINFO control command: knows the answer for questions
@@ -1550,6 +1693,28 @@ getinfo_helper_policies(control_connection_t *conn,
(void) errmsg;
if (!strcmp(question, "exit-policy/default")) {
*answer = tor_strdup(DEFAULT_EXIT_POLICY);
+ } else if (!strcmpstart(question, "exit-policy/")) {
+ const routerinfo_t *me = router_get_my_routerinfo();
+
+ int include_ipv4 = 0;
+ int include_ipv6 = 0;
+
+ if (!strcmp(question, "exit-policy/ipv4")) {
+ include_ipv4 = 1;
+ } else if (!strcmp(question, "exit-policy/ipv6")) {
+ include_ipv6 = 1;
+ } else if (!strcmp(question, "exit-policy/full")) {
+ include_ipv4 = include_ipv6 = 1;
+ } else {
+ return 0; /* No such key. */
+ }
+
+ if (!me) {
+ *errmsg = "router_get_my_routerinfo returned NULL";
+ return -1;
+ }
+
+ *answer = router_dump_exit_policy_to_string(me,include_ipv4,include_ipv6);
}
return 0;
}
diff --git a/src/or/policies.h b/src/or/policies.h
index f00d8299b..91ac42749 100644
--- a/src/or/policies.h
+++ b/src/or/policies.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,13 +9,14 @@
* \brief Header file for policies.c.
**/
-#ifndef _TOR_POLICIES_H
-#define _TOR_POLICIES_H
+#ifndef TOR_POLICIES_H
+#define TOR_POLICIES_H
-/* (length of "accept 255.255.255.255/255.255.255.255:65535-65535\n" plus a
- * NUL.)
+/* (length of
+ * "accept6 [ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]/128:65535-65535\n"
+ * plus a terminating NUL, rounded up to a nice number.)
*/
-#define POLICY_BUF_LEN 52
+#define POLICY_BUF_LEN 72
int firewall_is_fascist_or(void);
int fascist_firewall_allows_address_or(const tor_addr_t *addr, uint16_t port);
@@ -31,6 +32,7 @@ int authdir_policy_badexit_address(uint32_t addr, uint16_t port);
int validate_addr_policies(const or_options_t *options, char **msg);
void policy_expand_private(smartlist_t **policy);
+void policy_expand_unspec(smartlist_t **policy);
int policies_parse_from_options(const or_options_t *options);
addr_policy_t *addr_policy_get_canonical_entry(addr_policy_t *ent);
@@ -42,12 +44,15 @@ addr_policy_result_t compare_tor_addr_to_node_policy(const tor_addr_t *addr,
uint16_t port, const node_t *node);
int policies_parse_exit_policy(config_line_t *cfg, smartlist_t **dest,
- int rejectprivate, const char *local_address,
+ int ipv6exit,
+ int rejectprivate, uint32_t local_address,
int add_default_policy);
void policies_exit_policy_append_reject_star(smartlist_t **dest);
+void addr_policy_append_reject_addr(smartlist_t **dest,
+ const tor_addr_t *addr);
void policies_set_node_exitpolicy_to_reject_all(node_t *exitrouter);
int exit_policy_is_general_exit(smartlist_t *policy);
-int policy_is_reject_star(const smartlist_t *policy);
+int policy_is_reject_star(const smartlist_t *policy, sa_family_t family);
int getinfo_helper_policies(control_connection_t *conn,
const char *question, char **answer,
const char **errmsg);
@@ -58,7 +63,7 @@ void addr_policy_list_free(smartlist_t *p);
void addr_policy_free(addr_policy_t *p);
void policies_free_all(void);
-char *policy_summarize(smartlist_t *policy);
+char *policy_summarize(smartlist_t *policy, sa_family_t family);
short_policy_t *parse_short_policy(const char *summary);
char *write_short_policy(const short_policy_t *policy);
diff --git a/src/or/reasons.c b/src/or/reasons.c
index c51d8ee6f..750e89bbe 100644
--- a/src/or/reasons.c
+++ b/src/or/reasons.c
@@ -1,5 +1,5 @@
/* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -105,7 +105,12 @@ stream_end_reason_to_socks5_response(int reason)
case END_STREAM_REASON_DESTROY:
return SOCKS5_GENERAL_ERROR;
case END_STREAM_REASON_DONE:
- return SOCKS5_SUCCEEDED;
+ /* Note that 'DONE' usually indicates a successful close from the other
+ * side of the stream... but if we receive it before a connected cell --
+ * that is, before we have sent a SOCKS reply -- that means that the
+ * other side of the circuit closed the connection before telling us it
+ * was complete. */
+ return SOCKS5_CONNECTION_REFUSED;
case END_STREAM_REASON_TIMEOUT:
return SOCKS5_TTL_EXPIRED;
case END_STREAM_REASON_NOROUTE:
@@ -169,11 +174,12 @@ errno_to_stream_end_reason(int e)
S_CASE(ENOTSOCK):
S_CASE(EPROTONOSUPPORT):
S_CASE(EAFNOSUPPORT):
- E_CASE(EACCES):
S_CASE(ENOTCONN):
- S_CASE(ENETUNREACH):
return END_STREAM_REASON_INTERNAL;
+ S_CASE(ENETUNREACH):
S_CASE(EHOSTUNREACH):
+ E_CASE(EACCES):
+ case EPERM:
return END_STREAM_REASON_NOROUTE;
S_CASE(ECONNREFUSED):
return END_STREAM_REASON_CONNECTREFUSED;
@@ -225,6 +231,8 @@ orconn_end_reason_to_control_string(int r)
return "RESOURCELIMIT";
case END_OR_CONN_REASON_MISC:
return "MISC";
+ case END_OR_CONN_REASON_PT_MISSING:
+ return "PT_MISSING";
case 0:
return "";
default:
@@ -300,8 +308,13 @@ errno_to_orconn_end_reason(int e)
const char *
circuit_end_reason_to_control_string(int reason)
{
- if (reason >= 0 && reason & END_CIRC_REASON_FLAG_REMOTE)
+ int is_remote = 0;
+
+ if (reason >= 0 && reason & END_CIRC_REASON_FLAG_REMOTE) {
reason &= ~END_CIRC_REASON_FLAG_REMOTE;
+ is_remote = 1;
+ }
+
switch (reason) {
case END_CIRC_AT_ORIGIN:
/* This shouldn't get passed here; it's a catch-all reason. */
@@ -323,8 +336,8 @@ circuit_end_reason_to_control_string(int reason)
return "CONNECTFAILED";
case END_CIRC_REASON_OR_IDENTITY:
return "OR_IDENTITY";
- case END_CIRC_REASON_OR_CONN_CLOSED:
- return "OR_CONN_CLOSED";
+ case END_CIRC_REASON_CHANNEL_CLOSED:
+ return "CHANNEL_CLOSED";
case END_CIRC_REASON_FINISHED:
return "FINISHED";
case END_CIRC_REASON_TIMEOUT:
@@ -338,7 +351,18 @@ circuit_end_reason_to_control_string(int reason)
case END_CIRC_REASON_MEASUREMENT_EXPIRED:
return "MEASUREMENT_EXPIRED";
default:
- log_warn(LD_BUG, "Unrecognized reason code %d", (int)reason);
+ if (is_remote) {
+ /*
+ * If it's remote, it's not a bug *here*, so don't use LD_BUG, but
+ * do note that the someone we're talking to is speaking the Tor
+ * protocol with a weird accent.
+ */
+ log_warn(LD_PROTOCOL,
+ "Remote server sent bogus reason code %d", reason);
+ } else {
+ log_warn(LD_BUG,
+ "Unrecognized reason code %d", reason);
+ }
return NULL;
}
}
diff --git a/src/or/reasons.h b/src/or/reasons.h
index 377b61b11..fe7e67722 100644
--- a/src/or/reasons.h
+++ b/src/or/reasons.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,8 +9,8 @@
* \brief Header file for reasons.c.
**/
-#ifndef _TOR_REASONS_H
-#define _TOR_REASONS_H
+#ifndef TOR_REASONS_H
+#define TOR_REASONS_H
const char *stream_end_reason_to_control_string(int reason);
const char *stream_end_reason_to_string(int reason);
diff --git a/src/or/relay.c b/src/or/relay.c
index 628937404..66d1251eb 100644
--- a/src/or/relay.c
+++ b/src/or/relay.c
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -10,12 +10,15 @@
* receiving from circuits, plus queuing on circuits.
**/
-#include <math.h>
#define RELAY_PRIVATE
#include "or.h"
+#include "addressmap.h"
#include "buffers.h"
+#include "channel.h"
+#include "circpathbias.h"
#include "circuitbuild.h"
#include "circuitlist.h"
+#include "circuituse.h"
#include "config.h"
#include "connection.h"
#include "connection_edge.h"
@@ -23,9 +26,12 @@
#include "control.h"
#include "geoip.h"
#include "main.h"
+#ifdef ENABLE_MEMPOOLS
#include "mempool.h"
+#endif
#include "networkstatus.h"
#include "nodelist.h"
+#include "onion.h"
#include "policies.h"
#include "reasons.h"
#include "relay.h"
@@ -51,6 +57,13 @@ static int circuit_resume_edge_reading_helper(edge_connection_t *conn,
static int circuit_consider_stop_edge_reading(circuit_t *circ,
crypt_path_t *layer_hint);
static int circuit_queue_streams_are_blocked(circuit_t *circ);
+static void adjust_exit_policy_from_exitpolicy_failure(origin_circuit_t *circ,
+ entry_connection_t *conn,
+ node_t *node,
+ const tor_addr_t *addr);
+#if 0
+static int get_max_middle_cells(void);
+#endif
/** Stop reading on edge connections when we have this many cells
* waiting on the appropriate queue. */
@@ -68,6 +81,9 @@ uint64_t stats_n_relay_cells_relayed = 0;
*/
uint64_t stats_n_relay_cells_delivered = 0;
+/** Used to tell which stream to read from first on a circuit. */
+static tor_weak_rng_t stream_choice_rng = TOR_WEAK_RNG_INIT;
+
/** Update digest from the payload of cell. Assign integrity part to
* cell.
*/
@@ -95,14 +111,14 @@ relay_set_digest(crypto_digest_t *digest, cell_t *cell)
static int
relay_digest_matches(crypto_digest_t *digest, cell_t *cell)
{
- char received_integrity[4], calculated_integrity[4];
+ uint32_t received_integrity, calculated_integrity;
relay_header_t rh;
crypto_digest_t *backup_digest=NULL;
backup_digest = crypto_digest_dup(digest);
relay_header_unpack(&rh, cell->payload);
- memcpy(received_integrity, rh.integrity, 4);
+ memcpy(&received_integrity, rh.integrity, 4);
memset(rh.integrity, 0, 4);
relay_header_pack(cell->payload, &rh);
@@ -111,15 +127,15 @@ relay_digest_matches(crypto_digest_t *digest, cell_t *cell)
// received_integrity[2], received_integrity[3]);
crypto_digest_add_bytes(digest, (char*) cell->payload, CELL_PAYLOAD_SIZE);
- crypto_digest_get_digest(digest, calculated_integrity, 4);
+ crypto_digest_get_digest(digest, (char*) &calculated_integrity, 4);
- if (tor_memneq(received_integrity, calculated_integrity, 4)) {
+ if (calculated_integrity != received_integrity) {
// log_fn(LOG_INFO,"Recognized=0 but bad digest. Not recognizing.");
// (%d vs %d).", received_integrity, calculated_integrity);
/* restore digest to its old form */
crypto_digest_assign(digest, backup_digest);
/* restore the relay header */
- memcpy(rh.integrity, received_integrity, 4);
+ memcpy(rh.integrity, &received_integrity, 4);
relay_header_pack(cell->payload, &rh);
crypto_digest_free(backup_digest);
return 0;
@@ -166,7 +182,7 @@ int
circuit_receive_relay_cell(cell_t *cell, circuit_t *circ,
cell_direction_t cell_direction)
{
- or_connection_t *or_conn=NULL;
+ channel_t *chan = NULL;
crypt_path_t *layer_hint=NULL;
char recognized=0;
int reason;
@@ -184,7 +200,17 @@ circuit_receive_relay_cell(cell_t *cell, circuit_t *circ,
}
if (recognized) {
- edge_connection_t *conn = relay_lookup_conn(circ, cell, cell_direction,
+ edge_connection_t *conn = NULL;
+
+ if (circ->purpose == CIRCUIT_PURPOSE_PATH_BIAS_TESTING) {
+ pathbias_check_probe_response(circ, cell);
+
+ /* We need to drop this cell no matter what to avoid code that expects
+ * a certain purpose (such as the hidserv code). */
+ return 0;
+ }
+
+ conn = relay_lookup_conn(circ, cell, cell_direction,
layer_hint);
if (cell_direction == CELL_DIRECTION_OUT) {
++stats_n_relay_cells_delivered;
@@ -213,24 +239,32 @@ circuit_receive_relay_cell(cell_t *cell, circuit_t *circ,
/* not recognized. pass it on. */
if (cell_direction == CELL_DIRECTION_OUT) {
cell->circ_id = circ->n_circ_id; /* switch it */
- or_conn = circ->n_conn;
+ chan = circ->n_chan;
} else if (! CIRCUIT_IS_ORIGIN(circ)) {
cell->circ_id = TO_OR_CIRCUIT(circ)->p_circ_id; /* switch it */
- or_conn = TO_OR_CIRCUIT(circ)->p_conn;
+ chan = TO_OR_CIRCUIT(circ)->p_chan;
} else {
log_fn(LOG_PROTOCOL_WARN, LD_OR,
"Dropping unrecognized inbound cell on origin circuit.");
- return 0;
+ /* If we see unrecognized cells on path bias testing circs,
+ * it's bad mojo. Those circuits need to die.
+ * XXX: Shouldn't they always die? */
+ if (circ->purpose == CIRCUIT_PURPOSE_PATH_BIAS_TESTING) {
+ TO_ORIGIN_CIRCUIT(circ)->path_state = PATH_STATE_USE_FAILED;
+ return -END_CIRC_REASON_TORPROTOCOL;
+ } else {
+ return 0;
+ }
}
- if (!or_conn) {
+ if (!chan) {
// XXXX Can this splice stuff be done more cleanly?
if (! CIRCUIT_IS_ORIGIN(circ) &&
TO_OR_CIRCUIT(circ)->rend_splice &&
cell_direction == CELL_DIRECTION_OUT) {
or_circuit_t *splice = TO_OR_CIRCUIT(circ)->rend_splice;
tor_assert(circ->purpose == CIRCUIT_PURPOSE_REND_ESTABLISHED);
- tor_assert(splice->_base.purpose == CIRCUIT_PURPOSE_REND_ESTABLISHED);
+ tor_assert(splice->base_.purpose == CIRCUIT_PURPOSE_REND_ESTABLISHED);
cell->circ_id = splice->p_circ_id;
cell->command = CELL_RELAY; /* can't be relay_early anyway */
if ((reason = circuit_receive_relay_cell(cell, TO_CIRCUIT(splice),
@@ -254,7 +288,7 @@ circuit_receive_relay_cell(cell_t *cell, circuit_t *circ,
* we might kill the circ before we relay
* the cells. */
- append_cell_to_circuit_queue(circ, or_conn, cell, cell_direction, 0);
+ append_cell_to_circuit_queue(circ, chan, cell, cell_direction, 0);
return 0;
}
@@ -351,15 +385,22 @@ relay_crypt(circuit_t *circ, cell_t *cell, cell_direction_t cell_direction,
static int
circuit_package_relay_cell(cell_t *cell, circuit_t *circ,
cell_direction_t cell_direction,
- crypt_path_t *layer_hint, streamid_t on_stream)
+ crypt_path_t *layer_hint, streamid_t on_stream,
+ const char *filename, int lineno)
{
- or_connection_t *conn; /* where to send the cell */
+ channel_t *chan; /* where to send the cell */
if (cell_direction == CELL_DIRECTION_OUT) {
crypt_path_t *thishop; /* counter for repeated crypts */
- conn = circ->n_conn;
- if (!CIRCUIT_IS_ORIGIN(circ) || !conn) {
- log_warn(LD_BUG,"outgoing relay cell has n_conn==NULL. Dropping.");
+ chan = circ->n_chan;
+ if (!chan) {
+ log_warn(LD_BUG,"outgoing relay cell sent from %s:%d has n_chan==NULL."
+ " Dropping.", filename, lineno);
+ return 0; /* just drop it */
+ }
+ if (!CIRCUIT_IS_ORIGIN(circ)) {
+ log_warn(LD_BUG,"outgoing relay cell sent from %s:%d on non-origin "
+ "circ. Dropping.", filename, lineno);
return 0; /* just drop it */
}
@@ -388,14 +429,14 @@ circuit_package_relay_cell(cell_t *cell, circuit_t *circ,
return 0; /* just drop it */
}
or_circ = TO_OR_CIRCUIT(circ);
- conn = or_circ->p_conn;
+ chan = or_circ->p_chan;
relay_set_digest(or_circ->p_digest, cell);
if (relay_crypt_one_payload(or_circ->p_crypto, cell->payload, 1) < 0)
return -1;
}
++stats_n_relay_cells_relayed;
- append_cell_to_circuit_queue(circ, conn, cell, cell_direction, on_stream);
+ append_cell_to_circuit_queue(circ, chan, cell, cell_direction, on_stream);
return 0;
}
@@ -422,7 +463,7 @@ relay_lookup_conn(circuit_t *circ, cell_t *cell,
for (tmpconn = TO_ORIGIN_CIRCUIT(circ)->p_streams; tmpconn;
tmpconn=tmpconn->next_stream) {
if (rh.stream_id == tmpconn->stream_id &&
- !tmpconn->_base.marked_for_close &&
+ !tmpconn->base_.marked_for_close &&
tmpconn->cpath_layer == layer_hint) {
log_debug(LD_APP,"found conn for stream %d.", rh.stream_id);
return tmpconn;
@@ -432,7 +473,7 @@ relay_lookup_conn(circuit_t *circ, cell_t *cell,
for (tmpconn = TO_OR_CIRCUIT(circ)->n_streams; tmpconn;
tmpconn=tmpconn->next_stream) {
if (rh.stream_id == tmpconn->stream_id &&
- !tmpconn->_base.marked_for_close) {
+ !tmpconn->base_.marked_for_close) {
log_debug(LD_EXIT,"found conn for stream %d.", rh.stream_id);
if (cell_direction == CELL_DIRECTION_OUT ||
connection_edge_is_rendezvous_stream(tmpconn))
@@ -442,7 +483,7 @@ relay_lookup_conn(circuit_t *circ, cell_t *cell,
for (tmpconn = TO_OR_CIRCUIT(circ)->resolving_streams; tmpconn;
tmpconn=tmpconn->next_stream) {
if (rh.stream_id == tmpconn->stream_id &&
- !tmpconn->_base.marked_for_close) {
+ !tmpconn->base_.marked_for_close) {
log_debug(LD_EXIT,"found conn for stream %d.", rh.stream_id);
return tmpconn;
}
@@ -520,9 +561,10 @@ relay_command_to_string(uint8_t command)
* return 0.
*/
int
-relay_send_command_from_edge(streamid_t stream_id, circuit_t *circ,
- uint8_t relay_command, const char *payload,
- size_t payload_len, crypt_path_t *cpath_layer)
+relay_send_command_from_edge_(streamid_t stream_id, circuit_t *circ,
+ uint8_t relay_command, const char *payload,
+ size_t payload_len, crypt_path_t *cpath_layer,
+ const char *filename, int lineno)
{
cell_t cell;
relay_header_t rh;
@@ -561,15 +603,16 @@ relay_send_command_from_edge(streamid_t stream_id, circuit_t *circ,
geoip_change_dirreq_state(circ->dirreq_id, DIRREQ_TUNNELED,
DIRREQ_END_CELL_SENT);
- if (cell_direction == CELL_DIRECTION_OUT && circ->n_conn) {
+ if (cell_direction == CELL_DIRECTION_OUT && circ->n_chan) {
/* if we're using relaybandwidthrate, this conn wants priority */
- circ->n_conn->client_used = approx_time();
+ channel_timestamp_client(circ->n_chan);
}
if (cell_direction == CELL_DIRECTION_OUT) {
origin_circuit_t *origin_circ = TO_ORIGIN_CIRCUIT(circ);
if (origin_circ->remaining_relay_early_cells > 0 &&
(relay_command == RELAY_COMMAND_EXTEND ||
+ relay_command == RELAY_COMMAND_EXTEND2 ||
cpath_layer != origin_circ->cpath)) {
/* If we've got any relay_early cells left and (we're sending
* an extend cell or we're not talking to the first hop), use
@@ -583,7 +626,8 @@ relay_send_command_from_edge(streamid_t stream_id, circuit_t *circ,
* task 878. */
origin_circ->relay_early_commands[
origin_circ->relay_early_cells_sent++] = relay_command;
- } else if (relay_command == RELAY_COMMAND_EXTEND) {
+ } else if (relay_command == RELAY_COMMAND_EXTEND ||
+ relay_command == RELAY_COMMAND_EXTEND2) {
/* If no RELAY_EARLY cells can be sent over this circuit, log which
* commands have been sent as RELAY_EARLY cells before; helps debug
* task 878. */
@@ -603,7 +647,7 @@ relay_send_command_from_edge(streamid_t stream_id, circuit_t *circ,
}
if (circuit_package_relay_cell(&cell, circ, cell_direction, cpath_layer,
- stream_id) < 0) {
+ stream_id, filename, lineno) < 0) {
log_warn(LD_BUG,"circuit_package_relay_cell failed. Closing.");
circuit_mark_for_close(circ, END_CIRC_REASON_INTERNAL);
return -1;
@@ -631,16 +675,16 @@ connection_edge_send_command(edge_connection_t *fromconn,
tor_assert(fromconn);
circ = fromconn->on_circuit;
- if (fromconn->_base.marked_for_close) {
+ if (fromconn->base_.marked_for_close) {
log_warn(LD_BUG,
"called on conn that's already marked for close at %s:%d.",
- fromconn->_base.marked_for_close_file,
- fromconn->_base.marked_for_close);
+ fromconn->base_.marked_for_close_file,
+ fromconn->base_.marked_for_close);
return 0;
}
if (!circ) {
- if (fromconn->_base.type == CONN_TYPE_AP) {
+ if (fromconn->base_.type == CONN_TYPE_AP) {
log_info(LD_APP,"no circ. Closing conn.");
connection_mark_unattached_ap(EDGE_TO_ENTRY_CONN(fromconn),
END_STREAM_REASON_INTERNAL);
@@ -685,14 +729,41 @@ connection_ap_process_end_not_open(
relay_header_t *rh, cell_t *cell, origin_circuit_t *circ,
entry_connection_t *conn, crypt_path_t *layer_hint)
{
- struct in_addr in;
node_t *exitrouter;
int reason = *(cell->payload+RELAY_HEADER_SIZE);
- int control_reason = reason | END_STREAM_REASON_FLAG_REMOTE;
+ int control_reason;
edge_connection_t *edge_conn = ENTRY_TO_EDGE_CONN(conn);
(void) layer_hint; /* unused */
- if (rh->length > 0 && edge_reason_is_retriable(reason) &&
+ if (rh->length > 0) {
+ if (reason == END_STREAM_REASON_TORPROTOCOL ||
+ reason == END_STREAM_REASON_DESTROY) {
+ /* Both of these reasons could mean a failed tag
+ * hit the exit and it complained. Do not probe.
+ * Fail the circuit. */
+ circ->path_state = PATH_STATE_USE_FAILED;
+ return -END_CIRC_REASON_TORPROTOCOL;
+ } else if (reason == END_STREAM_REASON_INTERNAL) {
+ /* We can't infer success or failure, since older Tors report
+ * ENETUNREACH as END_STREAM_REASON_INTERNAL. */
+ } else {
+ /* Path bias: If we get a valid reason code from the exit,
+ * it wasn't due to tagging.
+ *
+ * We rely on recognized+digest being strong enough to make
+ * tags unlikely to allow us to get tagged, yet 'recognized'
+ * reason codes here. */
+ pathbias_mark_use_success(circ);
+ }
+ }
+
+ if (rh->length == 0) {
+ reason = END_STREAM_REASON_MISC;
+ }
+
+ control_reason = reason | END_STREAM_REASON_FLAG_REMOTE;
+
+ if (edge_reason_is_retriable(reason) &&
/* avoid retry if rend */
!connection_edge_is_rendezvous_stream(edge_conn)) {
const char *chosen_exit_digest =
@@ -702,48 +773,67 @@ connection_ap_process_end_not_open(
stream_end_reason_to_string(reason));
exitrouter = node_get_mutable_by_id(chosen_exit_digest);
switch (reason) {
- case END_STREAM_REASON_EXITPOLICY:
+ case END_STREAM_REASON_EXITPOLICY: {
+ tor_addr_t addr;
+ tor_addr_make_unspec(&addr);
if (rh->length >= 5) {
- uint32_t addr = ntohl(get_uint32(cell->payload+RELAY_HEADER_SIZE+1));
- int ttl;
- if (!addr) {
+ int ttl = -1;
+ tor_addr_make_unspec(&addr);
+ if (rh->length == 5 || rh->length == 9) {
+ tor_addr_from_ipv4n(&addr,
+ get_uint32(cell->payload+RELAY_HEADER_SIZE+1));
+ if (rh->length == 9)
+ ttl = (int)ntohl(get_uint32(cell->payload+RELAY_HEADER_SIZE+5));
+ } else if (rh->length == 17 || rh->length == 21) {
+ tor_addr_from_ipv6_bytes(&addr,
+ (char*)(cell->payload+RELAY_HEADER_SIZE+1));
+ if (rh->length == 21)
+ ttl = (int)ntohl(get_uint32(cell->payload+RELAY_HEADER_SIZE+17));
+ }
+ if (tor_addr_is_null(&addr)) {
log_info(LD_APP,"Address '%s' resolved to 0.0.0.0. Closing,",
safe_str(conn->socks_request->address));
connection_mark_unattached_ap(conn, END_STREAM_REASON_TORPROTOCOL);
return 0;
}
- if (rh->length >= 9)
- ttl = (int)ntohl(get_uint32(cell->payload+RELAY_HEADER_SIZE+5));
- else
- ttl = -1;
+ if ((tor_addr_family(&addr) == AF_INET && !conn->ipv4_traffic_ok) ||
+ (tor_addr_family(&addr) == AF_INET6 && !conn->ipv6_traffic_ok)) {
+ log_fn(LOG_PROTOCOL_WARN, LD_APP,
+ "Got an EXITPOLICY failure on a connection with a "
+ "mismatched family. Closing.");
+ connection_mark_unattached_ap(conn, END_STREAM_REASON_TORPROTOCOL);
+ return 0;
+ }
if (get_options()->ClientDNSRejectInternalAddresses &&
- is_internal_IP(addr, 0)) {
+ tor_addr_is_internal(&addr, 0)) {
log_info(LD_APP,"Address '%s' resolved to internal. Closing,",
safe_str(conn->socks_request->address));
connection_mark_unattached_ap(conn, END_STREAM_REASON_TORPROTOCOL);
return 0;
}
- client_dns_set_addressmap(conn->socks_request->address, addr,
+
+ client_dns_set_addressmap(conn,
+ conn->socks_request->address, &addr,
conn->chosen_exit_name, ttl);
+
+ {
+ char new_addr[TOR_ADDR_BUF_LEN];
+ tor_addr_to_str(new_addr, &addr, sizeof(new_addr), 1);
+ if (strcmp(conn->socks_request->address, new_addr)) {
+ strlcpy(conn->socks_request->address, new_addr,
+ sizeof(conn->socks_request->address));
+ control_event_stream_status(conn, STREAM_EVENT_REMAP, 0);
+ }
+ }
}
/* check if he *ought* to have allowed it */
- if (exitrouter &&
- (rh->length < 5 ||
- (tor_inet_aton(conn->socks_request->address, &in) &&
- !conn->chosen_exit_name))) {
- log_info(LD_APP,
- "Exitrouter %s seems to be more restrictive than its exit "
- "policy. Not using this router as exit for now.",
- node_describe(exitrouter));
- policies_set_node_exitpolicy_to_reject_all(exitrouter);
- }
- /* rewrite it to an IP if we learned one. */
- if (addressmap_rewrite(conn->socks_request->address,
- sizeof(conn->socks_request->address),
- NULL, NULL)) {
- control_event_stream_status(conn, STREAM_EVENT_REMAP, 0);
- }
+
+ adjust_exit_policy_from_exitpolicy_failure(circ,
+ conn,
+ exitrouter,
+ &addr);
+
if (conn->chosen_exit_optional ||
conn->chosen_exit_retries) {
/* stop wanting a specific exit */
@@ -762,6 +852,7 @@ connection_ap_process_end_not_open(
return 0;
/* else, conn will get closed below */
break;
+ }
case END_STREAM_REASON_CONNECTREFUSED:
if (!conn->chosen_exit_optional)
break; /* break means it'll close, below */
@@ -776,9 +867,7 @@ connection_ap_process_end_not_open(
/* We haven't retried too many times; reattach the connection. */
circuit_log_path(LOG_INFO,LD_APP,circ);
/* Mark this circuit "unusable for new streams". */
- /* XXXX024 this is a kludgy way to do this. */
- tor_assert(circ->_base.timestamp_dirty);
- circ->_base.timestamp_dirty -= get_options()->MaxCircuitDirtiness;
+ mark_circuit_unusable_for_new_conns(circ);
if (conn->chosen_exit_optional) {
/* stop wanting a specific exit */
@@ -826,21 +915,350 @@ connection_ap_process_end_not_open(
return 0;
}
+/** Called when we have gotten an END_REASON_EXITPOLICY failure on <b>circ</b>
+ * for <b>conn</b>, while attempting to connect via <b>node</b>. If the node
+ * told us which address it rejected, then <b>addr</b> is that address;
+ * otherwise it is AF_UNSPEC.
+ *
+ * If we are sure the node should have allowed this address, mark the node as
+ * having a reject *:* exit policy. Otherwise, mark the circuit as unusable
+ * for this particular address.
+ **/
+static void
+adjust_exit_policy_from_exitpolicy_failure(origin_circuit_t *circ,
+ entry_connection_t *conn,
+ node_t *node,
+ const tor_addr_t *addr)
+{
+ int make_reject_all = 0;
+ const sa_family_t family = tor_addr_family(addr);
+
+ if (node) {
+ tor_addr_t tmp;
+ int asked_for_family = tor_addr_parse(&tmp, conn->socks_request->address);
+ if (family == AF_UNSPEC) {
+ make_reject_all = 1;
+ } else if (node_exit_policy_is_exact(node, family) &&
+ asked_for_family != -1 && !conn->chosen_exit_name) {
+ make_reject_all = 1;
+ }
+
+ if (make_reject_all) {
+ log_info(LD_APP,
+ "Exitrouter %s seems to be more restrictive than its exit "
+ "policy. Not using this router as exit for now.",
+ node_describe(node));
+ policies_set_node_exitpolicy_to_reject_all(node);
+ }
+ }
+
+ if (family != AF_UNSPEC)
+ addr_policy_append_reject_addr(&circ->prepend_policy, addr);
+}
+
/** Helper: change the socks_request-&gt;address field on conn to the
- * dotted-quad representation of <b>new_addr</b> (given in host order),
+ * dotted-quad representation of <b>new_addr</b>,
* and send an appropriate REMAP event. */
static void
-remap_event_helper(entry_connection_t *conn, uint32_t new_addr)
+remap_event_helper(entry_connection_t *conn, const tor_addr_t *new_addr)
{
- struct in_addr in;
-
- in.s_addr = htonl(new_addr);
- tor_inet_ntoa(&in, conn->socks_request->address,
- sizeof(conn->socks_request->address));
+ tor_addr_to_str(conn->socks_request->address, new_addr,
+ sizeof(conn->socks_request->address),
+ 1);
control_event_stream_status(conn, STREAM_EVENT_REMAP,
REMAP_STREAM_SOURCE_EXIT);
}
+/** Extract the contents of a connected cell in <b>cell</b>, whose relay
+ * header has already been parsed into <b>rh</b>. On success, set
+ * <b>addr_out</b> to the address we're connected to, and <b>ttl_out</b> to
+ * the ttl of that address, in seconds, and return 0. On failure, return
+ * -1. */
+STATIC int
+connected_cell_parse(const relay_header_t *rh, const cell_t *cell,
+ tor_addr_t *addr_out, int *ttl_out)
+{
+ uint32_t bytes;
+ const uint8_t *payload = cell->payload + RELAY_HEADER_SIZE;
+
+ tor_addr_make_unspec(addr_out);
+ *ttl_out = -1;
+ if (rh->length == 0)
+ return 0;
+ if (rh->length < 4)
+ return -1;
+ bytes = ntohl(get_uint32(payload));
+
+ /* If bytes is 0, this is maybe a v6 address. Otherwise it's a v4 address */
+ if (bytes != 0) {
+ /* v4 address */
+ tor_addr_from_ipv4h(addr_out, bytes);
+ if (rh->length >= 8) {
+ bytes = ntohl(get_uint32(payload + 4));
+ if (bytes <= INT32_MAX)
+ *ttl_out = bytes;
+ }
+ } else {
+ if (rh->length < 25) /* 4 bytes of 0s, 1 addr, 16 ipv4, 4 ttl. */
+ return -1;
+ if (get_uint8(payload + 4) != 6)
+ return -1;
+ tor_addr_from_ipv6_bytes(addr_out, (char*)(payload + 5));
+ bytes = ntohl(get_uint32(payload + 21));
+ if (bytes <= INT32_MAX)
+ *ttl_out = (int) bytes;
+ }
+ return 0;
+}
+
+/** Drop all storage held by <b>addr</b>. */
+STATIC void
+address_ttl_free(address_ttl_t *addr)
+{
+ if (!addr)
+ return;
+ tor_free(addr->hostname);
+ tor_free(addr);
+}
+
+/** Parse a resolved cell in <b>cell</b>, with parsed header in <b>rh</b>.
+ * Return -1 on parse error. On success, add one or more newly allocated
+ * address_ttl_t to <b>addresses_out</b>; set *<b>errcode_out</b> to
+ * one of 0, RESOLVED_TYPE_ERROR, or RESOLVED_TYPE_ERROR_TRANSIENT, and
+ * return 0. */
+STATIC int
+resolved_cell_parse(const cell_t *cell, const relay_header_t *rh,
+ smartlist_t *addresses_out, int *errcode_out)
+{
+ const uint8_t *cp;
+ uint8_t answer_type;
+ size_t answer_len;
+ address_ttl_t *addr;
+ size_t remaining;
+ int errcode = 0;
+ smartlist_t *addrs;
+
+ tor_assert(cell);
+ tor_assert(rh);
+ tor_assert(addresses_out);
+ tor_assert(errcode_out);
+
+ *errcode_out = 0;
+
+ if (rh->length > RELAY_PAYLOAD_SIZE)
+ return -1;
+
+ addrs = smartlist_new();
+
+ cp = cell->payload + RELAY_HEADER_SIZE;
+
+ remaining = rh->length;
+ while (remaining) {
+ const uint8_t *cp_orig = cp;
+ if (remaining < 2)
+ goto err;
+ answer_type = *cp++;
+ answer_len = *cp++;
+ if (remaining < 2 + answer_len + 4) {
+ goto err;
+ }
+ if (answer_type == RESOLVED_TYPE_IPV4) {
+ if (answer_len != 4) {
+ goto err;
+ }
+ addr = tor_malloc_zero(sizeof(*addr));
+ tor_addr_from_ipv4n(&addr->addr, get_uint32(cp));
+ cp += 4;
+ addr->ttl = ntohl(get_uint32(cp));
+ cp += 4;
+ smartlist_add(addrs, addr);
+ } else if (answer_type == RESOLVED_TYPE_IPV6) {
+ if (answer_len != 16)
+ goto err;
+ addr = tor_malloc_zero(sizeof(*addr));
+ tor_addr_from_ipv6_bytes(&addr->addr, (const char*) cp);
+ cp += 16;
+ addr->ttl = ntohl(get_uint32(cp));
+ cp += 4;
+ smartlist_add(addrs, addr);
+ } else if (answer_type == RESOLVED_TYPE_HOSTNAME) {
+ if (answer_len == 0) {
+ goto err;
+ }
+ addr = tor_malloc_zero(sizeof(*addr));
+ addr->hostname = tor_memdup_nulterm(cp, answer_len);
+ cp += answer_len;
+ addr->ttl = ntohl(get_uint32(cp));
+ cp += 4;
+ smartlist_add(addrs, addr);
+ } else if (answer_type == RESOLVED_TYPE_ERROR_TRANSIENT ||
+ answer_type == RESOLVED_TYPE_ERROR) {
+ errcode = answer_type;
+ /* Ignore the error contents */
+ cp += answer_len + 4;
+ } else {
+ cp += answer_len + 4;
+ }
+ tor_assert(((ssize_t)remaining) >= (cp - cp_orig));
+ remaining -= (cp - cp_orig);
+ }
+
+ if (errcode && smartlist_len(addrs) == 0) {
+ /* Report an error only if there were no results. */
+ *errcode_out = errcode;
+ }
+
+ smartlist_add_all(addresses_out, addrs);
+ smartlist_free(addrs);
+
+ return 0;
+
+ err:
+ /* On parse error, don't report any results */
+ SMARTLIST_FOREACH(addrs, address_ttl_t *, a, address_ttl_free(a));
+ smartlist_free(addrs);
+ return -1;
+}
+
+/** Helper for connection_edge_process_resolved_cell: given an error code,
+ * an entry_connection, and a list of address_ttl_t *, report the best answer
+ * to the entry_connection. */
+static void
+connection_ap_handshake_socks_got_resolved_cell(entry_connection_t *conn,
+ int error_code,
+ smartlist_t *results)
+{
+ address_ttl_t *addr_ipv4 = NULL;
+ address_ttl_t *addr_ipv6 = NULL;
+ address_ttl_t *addr_hostname = NULL;
+ address_ttl_t *addr_best = NULL;
+
+ /* If it's an error code, that's easy. */
+ if (error_code) {
+ tor_assert(error_code == RESOLVED_TYPE_ERROR ||
+ error_code == RESOLVED_TYPE_ERROR_TRANSIENT);
+ connection_ap_handshake_socks_resolved(conn,
+ error_code,0,NULL,-1,-1);
+ return;
+ }
+
+ /* Get the first answer of each type. */
+ SMARTLIST_FOREACH_BEGIN(results, address_ttl_t *, addr) {
+ if (addr->hostname) {
+ if (!addr_hostname) {
+ addr_hostname = addr;
+ }
+ } else if (tor_addr_family(&addr->addr) == AF_INET) {
+ if (!addr_ipv4 && conn->ipv4_traffic_ok) {
+ addr_ipv4 = addr;
+ }
+ } else if (tor_addr_family(&addr->addr) == AF_INET6) {
+ if (!addr_ipv6 && conn->ipv6_traffic_ok) {
+ addr_ipv6 = addr;
+ }
+ }
+ } SMARTLIST_FOREACH_END(addr);
+
+ /* Now figure out which type we wanted to deliver. */
+ if (conn->socks_request->command == SOCKS_COMMAND_RESOLVE_PTR) {
+ if (addr_hostname) {
+ connection_ap_handshake_socks_resolved(conn,
+ RESOLVED_TYPE_HOSTNAME,
+ strlen(addr_hostname->hostname),
+ (uint8_t*)addr_hostname->hostname,
+ addr_hostname->ttl,-1);
+ } else {
+ connection_ap_handshake_socks_resolved(conn,
+ RESOLVED_TYPE_ERROR,0,NULL,-1,-1);
+ }
+ return;
+ }
+
+ if (conn->prefer_ipv6_traffic) {
+ addr_best = addr_ipv6 ? addr_ipv6 : addr_ipv4;
+ } else {
+ addr_best = addr_ipv4 ? addr_ipv4 : addr_ipv6;
+ }
+
+ /* Now convert it to the ugly old interface */
+ if (! addr_best) {
+ connection_ap_handshake_socks_resolved(conn,
+ RESOLVED_TYPE_ERROR,0,NULL,-1,-1);
+ return;
+ }
+
+ connection_ap_handshake_socks_resolved_addr(conn,
+ &addr_best->addr,
+ addr_best->ttl,
+ -1);
+
+ remap_event_helper(conn, &addr_best->addr);
+}
+
+/** Handle a RELAY_COMMAND_RESOLVED cell that we received on a non-open AP
+ * stream. */
+STATIC int
+connection_edge_process_resolved_cell(edge_connection_t *conn,
+ const cell_t *cell,
+ const relay_header_t *rh)
+{
+ entry_connection_t *entry_conn = EDGE_TO_ENTRY_CONN(conn);
+ smartlist_t *resolved_addresses = NULL;
+ int errcode = 0;
+
+ if (conn->base_.state != AP_CONN_STATE_RESOLVE_WAIT) {
+ log_fn(LOG_PROTOCOL_WARN, LD_APP, "Got a 'resolved' cell while "
+ "not in state resolve_wait. Dropping.");
+ return 0;
+ }
+ tor_assert(SOCKS_COMMAND_IS_RESOLVE(entry_conn->socks_request->command));
+
+ resolved_addresses = smartlist_new();
+ if (resolved_cell_parse(cell, rh, resolved_addresses, &errcode)) {
+ log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
+ "Dropping malformed 'resolved' cell");
+ connection_mark_unattached_ap(entry_conn, END_STREAM_REASON_TORPROTOCOL);
+ goto done;
+ }
+
+ if (get_options()->ClientDNSRejectInternalAddresses) {
+ int orig_len = smartlist_len(resolved_addresses);
+ SMARTLIST_FOREACH_BEGIN(resolved_addresses, address_ttl_t *, addr) {
+ if (addr->hostname == NULL && tor_addr_is_internal(&addr->addr, 0)) {
+ log_info(LD_APP, "Got a resolved cell with answer %s; dropping that "
+ "answer.",
+ safe_str_client(fmt_addr(&addr->addr)));
+ address_ttl_free(addr);
+ SMARTLIST_DEL_CURRENT(resolved_addresses, addr);
+ }
+ } SMARTLIST_FOREACH_END(addr);
+ if (orig_len && smartlist_len(resolved_addresses) == 0) {
+ log_info(LD_APP, "Got a resolved cell with only private addresses; "
+ "dropping it.");
+ connection_ap_handshake_socks_resolved(entry_conn,
+ RESOLVED_TYPE_ERROR_TRANSIENT,
+ 0, NULL, 0, TIME_MAX);
+ connection_mark_unattached_ap(entry_conn,
+ END_STREAM_REASON_TORPROTOCOL);
+ goto done;
+ }
+ }
+
+ connection_ap_handshake_socks_got_resolved_cell(entry_conn,
+ errcode,
+ resolved_addresses);
+
+ connection_mark_unattached_ap(entry_conn,
+ END_STREAM_REASON_DONE |
+ END_STREAM_REASON_FLAG_ALREADY_SOCKS_REPLIED);
+
+ done:
+ SMARTLIST_FOREACH(resolved_addresses, address_ttl_t *, addr,
+ address_ttl_free(addr));
+ smartlist_free(resolved_addresses);
+ return 0;
+}
+
/** An incoming relay cell has arrived from circuit <b>circ</b> to
* stream <b>conn</b>.
*
@@ -854,7 +1272,7 @@ connection_edge_process_relay_cell_not_open(
edge_connection_t *conn, crypt_path_t *layer_hint)
{
if (rh->command == RELAY_COMMAND_END) {
- if (CIRCUIT_IS_ORIGIN(circ) && conn->_base.type == CONN_TYPE_AP) {
+ if (CIRCUIT_IS_ORIGIN(circ) && conn->base_.type == CONN_TYPE_AP) {
return connection_ap_process_end_not_open(rh, cell,
TO_ORIGIN_CIRCUIT(circ),
EDGE_TO_ENTRY_CONN(conn),
@@ -869,38 +1287,55 @@ connection_edge_process_relay_cell_not_open(
}
}
- if (conn->_base.type == CONN_TYPE_AP &&
+ if (conn->base_.type == CONN_TYPE_AP &&
rh->command == RELAY_COMMAND_CONNECTED) {
+ tor_addr_t addr;
+ int ttl;
entry_connection_t *entry_conn = EDGE_TO_ENTRY_CONN(conn);
tor_assert(CIRCUIT_IS_ORIGIN(circ));
- if (conn->_base.state != AP_CONN_STATE_CONNECT_WAIT) {
+ if (conn->base_.state != AP_CONN_STATE_CONNECT_WAIT) {
log_fn(LOG_PROTOCOL_WARN, LD_APP,
"Got 'connected' while not in state connect_wait. Dropping.");
return 0;
}
- conn->_base.state = AP_CONN_STATE_OPEN;
+ conn->base_.state = AP_CONN_STATE_OPEN;
log_info(LD_APP,"'connected' received after %d seconds.",
- (int)(time(NULL) - conn->_base.timestamp_lastread));
- if (rh->length >= 4) {
- uint32_t addr = ntohl(get_uint32(cell->payload+RELAY_HEADER_SIZE));
- int ttl;
- if (!addr || (get_options()->ClientDNSRejectInternalAddresses &&
- is_internal_IP(addr, 0))) {
+ (int)(time(NULL) - conn->base_.timestamp_lastread));
+ if (connected_cell_parse(rh, cell, &addr, &ttl) < 0) {
+ log_fn(LOG_PROTOCOL_WARN, LD_APP,
+ "Got a badly formatted connected cell. Closing.");
+ connection_edge_end(conn, END_STREAM_REASON_TORPROTOCOL);
+ connection_mark_unattached_ap(entry_conn, END_STREAM_REASON_TORPROTOCOL);
+ }
+ if (tor_addr_family(&addr) != AF_UNSPEC) {
+ const sa_family_t family = tor_addr_family(&addr);
+ if (tor_addr_is_null(&addr) ||
+ (get_options()->ClientDNSRejectInternalAddresses &&
+ tor_addr_is_internal(&addr, 0))) {
log_info(LD_APP, "...but it claims the IP address was %s. Closing.",
- fmt_addr32(addr));
+ fmt_addr(&addr));
+ connection_edge_end(conn, END_STREAM_REASON_TORPROTOCOL);
+ connection_mark_unattached_ap(entry_conn,
+ END_STREAM_REASON_TORPROTOCOL);
+ return 0;
+ }
+
+ if ((family == AF_INET && ! entry_conn->ipv4_traffic_ok) ||
+ (family == AF_INET6 && ! entry_conn->ipv6_traffic_ok)) {
+ log_fn(LOG_PROTOCOL_WARN, LD_APP,
+ "Got a connected cell to %s with unsupported address family."
+ " Closing.", fmt_addr(&addr));
connection_edge_end(conn, END_STREAM_REASON_TORPROTOCOL);
connection_mark_unattached_ap(entry_conn,
END_STREAM_REASON_TORPROTOCOL);
return 0;
}
- if (rh->length >= 8)
- ttl = (int)ntohl(get_uint32(cell->payload+RELAY_HEADER_SIZE+4));
- else
- ttl = -1;
- client_dns_set_addressmap(entry_conn->socks_request->address, addr,
+
+ client_dns_set_addressmap(entry_conn,
+ entry_conn->socks_request->address, &addr,
entry_conn->chosen_exit_name, ttl);
- remap_event_helper(entry_conn, addr);
+ remap_event_helper(entry_conn, &addr);
}
circuit_log_path(LOG_INFO,LD_APP,TO_ORIGIN_CIRCUIT(circ));
/* don't send a socks reply to transparent conns */
@@ -924,8 +1359,10 @@ connection_edge_process_relay_cell_not_open(
control_event_bootstrap(BOOTSTRAP_STATUS_LOADING_STATUS, 0);
break;
case DIR_PURPOSE_FETCH_SERVERDESC:
- control_event_bootstrap(BOOTSTRAP_STATUS_LOADING_DESCRIPTORS,
- count_loading_descriptors_progress());
+ case DIR_PURPOSE_FETCH_MICRODESC:
+ if (TO_DIR_CONN(dirconn)->router_purpose == ROUTER_PURPOSE_GENERAL)
+ control_event_bootstrap(BOOTSTRAP_STATUS_LOADING_DESCRIPTORS,
+ count_loading_descriptors_progress());
break;
}
}
@@ -944,65 +1381,15 @@ connection_edge_process_relay_cell_not_open(
}
return 0;
}
- if (conn->_base.type == CONN_TYPE_AP &&
+ if (conn->base_.type == CONN_TYPE_AP &&
rh->command == RELAY_COMMAND_RESOLVED) {
- int ttl;
- int answer_len;
- uint8_t answer_type;
- entry_connection_t *entry_conn = EDGE_TO_ENTRY_CONN(conn);
- if (conn->_base.state != AP_CONN_STATE_RESOLVE_WAIT) {
- log_fn(LOG_PROTOCOL_WARN, LD_APP, "Got a 'resolved' cell while "
- "not in state resolve_wait. Dropping.");
- return 0;
- }
- tor_assert(SOCKS_COMMAND_IS_RESOLVE(entry_conn->socks_request->command));
- answer_len = cell->payload[RELAY_HEADER_SIZE+1];
- if (rh->length < 2 || answer_len+2>rh->length) {
- log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
- "Dropping malformed 'resolved' cell");
- connection_mark_unattached_ap(entry_conn, END_STREAM_REASON_TORPROTOCOL);
- return 0;
- }
- answer_type = cell->payload[RELAY_HEADER_SIZE];
- if (rh->length >= answer_len+6)
- ttl = (int)ntohl(get_uint32(cell->payload+RELAY_HEADER_SIZE+
- 2+answer_len));
- else
- ttl = -1;
- if (answer_type == RESOLVED_TYPE_IPV4 && answer_len == 4) {
- uint32_t addr = ntohl(get_uint32(cell->payload+RELAY_HEADER_SIZE+2));
- if (get_options()->ClientDNSRejectInternalAddresses &&
- is_internal_IP(addr, 0)) {
- log_info(LD_APP,"Got a resolve with answer %s. Rejecting.",
- fmt_addr32(addr));
- connection_ap_handshake_socks_resolved(entry_conn,
- RESOLVED_TYPE_ERROR_TRANSIENT,
- 0, NULL, 0, TIME_MAX);
- connection_mark_unattached_ap(entry_conn,
- END_STREAM_REASON_TORPROTOCOL);
- return 0;
- }
- }
- connection_ap_handshake_socks_resolved(entry_conn,
- answer_type,
- cell->payload[RELAY_HEADER_SIZE+1], /*answer_len*/
- cell->payload+RELAY_HEADER_SIZE+2, /*answer*/
- ttl,
- -1);
- if (answer_type == RESOLVED_TYPE_IPV4 && answer_len == 4) {
- uint32_t addr = ntohl(get_uint32(cell->payload+RELAY_HEADER_SIZE+2));
- remap_event_helper(entry_conn, addr);
- }
- connection_mark_unattached_ap(entry_conn,
- END_STREAM_REASON_DONE |
- END_STREAM_REASON_FLAG_ALREADY_SOCKS_REPLIED);
- return 0;
+ return connection_edge_process_resolved_cell(conn, cell, rh);
}
log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
"Got an unexpected relay command %d, in state %d (%s). Dropping.",
- rh->command, conn->_base.state,
- conn_state_to_string(conn->_base.type, conn->_base.state));
+ rh->command, conn->base_.state,
+ conn_state_to_string(conn->base_.type, conn->base_.state));
return 0; /* for forward compatibility, don't kill the circuit */
// connection_edge_end(conn, END_STREAM_REASON_TORPROTOCOL);
// connection_mark_for_close(conn);
@@ -1066,9 +1453,9 @@ connection_edge_process_relay_cell(cell_t *cell, circuit_t *circ,
* conn points to the recognized stream. */
if (conn && !connection_state_is_open(TO_CONN(conn))) {
- if (conn->_base.type == CONN_TYPE_EXIT &&
- (conn->_base.state == EXIT_CONN_STATE_CONNECTING ||
- conn->_base.state == EXIT_CONN_STATE_RESOLVING) &&
+ if (conn->base_.type == CONN_TYPE_EXIT &&
+ (conn->base_.state == EXIT_CONN_STATE_CONNECTING ||
+ conn->base_.state == EXIT_CONN_STATE_RESOLVING) &&
rh.command == RELAY_COMMAND_DATA) {
/* Allow DATA cells to be delivered to an exit node in state
* EXIT_CONN_STATE_CONNECTING or EXIT_CONN_STATE_RESOLVING.
@@ -1114,7 +1501,7 @@ connection_edge_process_relay_cell(cell_t *cell, circuit_t *circ,
* and linked. */
static uint64_t next_id = 0;
circ->dirreq_id = ++next_id;
- TO_CONN(TO_OR_CIRCUIT(circ)->p_conn)->dirreq_id = circ->dirreq_id;
+ TO_OR_CIRCUIT(circ)->p_chan->dirreq_id = circ->dirreq_id;
}
return connection_exit_begin_conn(cell, circ);
@@ -1174,11 +1561,12 @@ connection_edge_process_relay_cell(cell_t *cell, circuit_t *circ,
return 0;
}
/* XXX add to this log_fn the exit node's nickname? */
- log_info(domain,"%d: end cell (%s) for stream %d. Removing stream.",
- conn->_base.s,
+ log_info(domain,TOR_SOCKET_T_FORMAT": end cell (%s) for stream %d. "
+ "Removing stream.",
+ conn->base_.s,
stream_end_reason_to_string(reason),
conn->stream_id);
- if (conn->_base.type == CONN_TYPE_AP) {
+ if (conn->base_.type == CONN_TYPE_AP) {
entry_connection_t *entry_conn = EDGE_TO_ENTRY_CONN(conn);
if (entry_conn->socks_request &&
!entry_conn->socks_request->has_finished)
@@ -1189,16 +1577,17 @@ connection_edge_process_relay_cell(cell_t *cell, circuit_t *circ,
conn->edge_has_sent_end = 1;
if (!conn->end_reason)
conn->end_reason = reason | END_STREAM_REASON_FLAG_REMOTE;
- if (!conn->_base.marked_for_close) {
+ if (!conn->base_.marked_for_close) {
/* only mark it if not already marked. it's possible to
* get the 'end' right around when the client hangs up on us. */
connection_mark_and_flush(TO_CONN(conn));
}
return 0;
- case RELAY_COMMAND_EXTEND: {
+ case RELAY_COMMAND_EXTEND:
+ case RELAY_COMMAND_EXTEND2: {
static uint64_t total_n_extend=0, total_nonearly=0;
total_n_extend++;
- if (conn) {
+ if (rh.stream_id) {
log_fn(LOG_PROTOCOL_WARN, domain,
"'extend' cell received for non-zero stream. Dropping.");
return 0;
@@ -1230,17 +1619,27 @@ connection_edge_process_relay_cell(cell_t *cell, circuit_t *circ,
return circuit_extend(cell, circ);
}
case RELAY_COMMAND_EXTENDED:
+ case RELAY_COMMAND_EXTENDED2:
if (!layer_hint) {
log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
"'extended' unsupported at non-origin. Dropping.");
return 0;
}
log_debug(domain,"Got an extended cell! Yay.");
- if ((reason = circuit_finish_handshake(TO_ORIGIN_CIRCUIT(circ),
- CELL_CREATED,
- cell->payload+RELAY_HEADER_SIZE)) < 0) {
- log_warn(domain,"circuit_finish_handshake failed.");
- return reason;
+ {
+ extended_cell_t extended_cell;
+ if (extended_cell_parse(&extended_cell, rh.command,
+ (const uint8_t*)cell->payload+RELAY_HEADER_SIZE,
+ rh.length)<0) {
+ log_warn(LD_PROTOCOL,
+ "Can't parse EXTENDED cell; killing circuit.");
+ return -END_CIRC_REASON_TORPROTOCOL;
+ }
+ if ((reason = circuit_finish_handshake(TO_ORIGIN_CIRCUIT(circ),
+ &extended_cell.created_cell)) < 0) {
+ log_warn(domain,"circuit_finish_handshake failed.");
+ return reason;
+ }
}
if ((reason=circuit_send_next_onion_skin(TO_ORIGIN_CIRCUIT(circ)))<0) {
log_info(domain,"circuit_send_next_onion_skin() failed.");
@@ -1253,12 +1652,20 @@ connection_edge_process_relay_cell(cell_t *cell, circuit_t *circ,
"'truncate' unsupported at origin. Dropping.");
return 0;
}
- if (circ->n_conn) {
- uint8_t trunc_reason = *(uint8_t*)(cell->payload + RELAY_HEADER_SIZE);
- circuit_clear_cell_queue(circ, circ->n_conn);
- connection_or_send_destroy(circ->n_circ_id, circ->n_conn,
- trunc_reason);
- circuit_set_n_circid_orconn(circ, 0, NULL);
+ if (circ->n_hop) {
+ if (circ->n_chan)
+ log_warn(LD_BUG, "n_chan and n_hop set on the same circuit!");
+ extend_info_free(circ->n_hop);
+ circ->n_hop = NULL;
+ tor_free(circ->n_chan_create_cell);
+ circuit_set_state(circ, CIRCUIT_STATE_OPEN);
+ }
+ if (circ->n_chan) {
+ uint8_t trunc_reason = get_uint8(cell->payload + RELAY_HEADER_SIZE);
+ circuit_clear_cell_queue(circ, circ->n_chan);
+ channel_send_destroy(circ->n_circ_id, circ->n_chan,
+ trunc_reason);
+ circuit_set_n_circid_chan(circ, 0, NULL);
}
log_debug(LD_EXIT, "Processed 'truncate', replying.");
{
@@ -1274,7 +1681,8 @@ connection_edge_process_relay_cell(cell_t *cell, circuit_t *circ,
"'truncated' unsupported at non-origin. Dropping.");
return 0;
}
- circuit_truncated(TO_ORIGIN_CIRCUIT(circ), layer_hint);
+ circuit_truncated(TO_ORIGIN_CIRCUIT(circ), layer_hint,
+ get_uint8(cell->payload + RELAY_HEADER_SIZE));
return 0;
case RELAY_COMMAND_CONNECTED:
if (conn) {
@@ -1290,8 +1698,9 @@ connection_edge_process_relay_cell(cell_t *cell, circuit_t *circ,
if (layer_hint) {
if (layer_hint->package_window + CIRCWINDOW_INCREMENT >
CIRCWINDOW_START_MAX) {
- log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
- "Bug/attack: unexpected sendme cell from exit relay. "
+ static struct ratelim_t exit_warn_ratelim = RATELIM_INIT(600);
+ log_fn_ratelim(&exit_warn_ratelim, LOG_WARN, LD_PROTOCOL,
+ "Unexpected sendme cell from exit relay. "
"Closing circ.");
return -END_CIRC_REASON_TORPROTOCOL;
}
@@ -1302,9 +1711,11 @@ connection_edge_process_relay_cell(cell_t *cell, circuit_t *circ,
} else {
if (circ->package_window + CIRCWINDOW_INCREMENT >
CIRCWINDOW_START_MAX) {
- log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
- "Bug/attack: unexpected sendme cell from client. "
- "Closing circ.");
+ static struct ratelim_t client_warn_ratelim = RATELIM_INIT(600);
+ log_fn_ratelim(&client_warn_ratelim, LOG_WARN, LD_PROTOCOL,
+ "Unexpected sendme cell from client. "
+ "Closing circ (window %d).",
+ circ->package_window);
return -END_CIRC_REASON_TORPROTOCOL;
}
circ->package_window += CIRCWINDOW_INCREMENT;
@@ -1412,21 +1823,22 @@ connection_edge_package_raw_inbuf(edge_connection_t *conn, int package_partial,
size_t bytes_to_process, length;
char payload[CELL_PAYLOAD_SIZE];
circuit_t *circ;
- const unsigned domain = conn->_base.type == CONN_TYPE_AP ? LD_APP : LD_EXIT;
+ const unsigned domain = conn->base_.type == CONN_TYPE_AP ? LD_APP : LD_EXIT;
int sending_from_optimistic = 0;
- const int sending_optimistically =
- conn->_base.type == CONN_TYPE_AP &&
- conn->_base.state != AP_CONN_STATE_OPEN;
entry_connection_t *entry_conn =
- conn->_base.type == CONN_TYPE_AP ? EDGE_TO_ENTRY_CONN(conn) : NULL;
+ conn->base_.type == CONN_TYPE_AP ? EDGE_TO_ENTRY_CONN(conn) : NULL;
+ const int sending_optimistically =
+ entry_conn &&
+ conn->base_.type == CONN_TYPE_AP &&
+ conn->base_.state != AP_CONN_STATE_OPEN;
crypt_path_t *cpath_layer = conn->cpath_layer;
tor_assert(conn);
- if (conn->_base.marked_for_close) {
+ if (conn->base_.marked_for_close) {
log_warn(LD_BUG,
"called on conn that's already marked for close at %s:%d.",
- conn->_base.marked_for_close_file, conn->_base.marked_for_close);
+ conn->base_.marked_for_close_file, conn->base_.marked_for_close);
return 0;
}
@@ -1493,7 +1905,8 @@ connection_edge_package_raw_inbuf(edge_connection_t *conn, int package_partial,
connection_fetch_from_buf(payload, length, TO_CONN(conn));
}
- log_debug(domain,"(%d) Packaging %d bytes (%d waiting).", conn->_base.s,
+ log_debug(domain,TOR_SOCKET_T_FORMAT": Packaging %d bytes (%d waiting).",
+ conn->base_.s,
(int)length, (int)connection_get_inbuf_len(TO_CONN(conn)));
if (sending_optimistically && !sending_from_optimistic) {
@@ -1559,9 +1972,9 @@ connection_edge_consider_sending_sendme(edge_connection_t *conn)
}
while (conn->deliver_window <= STREAMWINDOW_START - STREAMWINDOW_INCREMENT) {
- log_debug(conn->_base.type == CONN_TYPE_AP ?LD_APP:LD_EXIT,
+ log_debug(conn->base_.type == CONN_TYPE_AP ?LD_APP:LD_EXIT,
"Outbuf %d, Queuing stream sendme.",
- (int)conn->_base.outbuf_flushlen);
+ (int)conn->base_.outbuf_flushlen);
conn->deliver_window += STREAMWINDOW_INCREMENT;
if (connection_edge_send_command(conn, RELAY_COMMAND_SENDME,
NULL, 0) < 0) {
@@ -1593,6 +2006,12 @@ circuit_resume_edge_reading(circuit_t *circ, crypt_path_t *layer_hint)
circ, layer_hint);
}
+void
+stream_choice_seed_weak_rng(void)
+{
+ crypto_seed_weak_rng(&stream_choice_rng);
+}
+
/** A helper function for circuit_resume_edge_reading() above.
* The arguments are the same, except that <b>conn</b> is the head
* of a linked list of edge streams that should each be considered.
@@ -1608,16 +2027,23 @@ circuit_resume_edge_reading_helper(edge_connection_t *first_conn,
int cells_on_queue;
int cells_per_conn;
edge_connection_t *chosen_stream = NULL;
+ int max_to_package;
+
+ if (first_conn == NULL) {
+ /* Don't bother to try to do the rest of this if there are no connections
+ * to resume. */
+ return 0;
+ }
/* How many cells do we have space for? It will be the minimum of
* the number needed to exhaust the package window, and the minimum
* needed to fill the cell queue. */
- int max_to_package = circ->package_window;
+ max_to_package = circ->package_window;
if (CIRCUIT_IS_ORIGIN(circ)) {
- cells_on_queue = circ->n_conn_cells.n;
+ cells_on_queue = circ->n_chan_cells.n;
} else {
or_circuit_t *or_circ = TO_OR_CIRCUIT(circ);
- cells_on_queue = or_circ->p_conn_cells.n;
+ cells_on_queue = or_circ->p_chan_cells.n;
}
if (CELL_QUEUE_HIGHWATER_SIZE - cells_on_queue < max_to_package)
max_to_package = CELL_QUEUE_HIGHWATER_SIZE - cells_on_queue;
@@ -1637,10 +2063,19 @@ circuit_resume_edge_reading_helper(edge_connection_t *first_conn,
int num_streams = 0;
for (conn = first_conn; conn; conn = conn->next_stream) {
num_streams++;
- if ((tor_weak_random() % num_streams)==0)
+ if (tor_weak_random_one_in_n(&stream_choice_rng, num_streams)) {
chosen_stream = conn;
+ }
/* Invariant: chosen_stream has been chosen uniformly at random from
- * among the first num_streams streams on first_conn. */
+ * among the first num_streams streams on first_conn.
+ *
+ * (Note that we iterate over every stream on the circuit, so that after
+ * we've considered the first stream, we've chosen it with P=1; and
+ * after we consider the second stream, we've switched to it with P=1/2
+ * and stayed with the first stream with P=1/2; and after we've
+ * considered the third stream, we've switched to it with P=1/3 and
+ * remained with one of the first two streams with P=(2/3), giving each
+ * one P=(1/2)(2/3) )=(1/3).) */
}
}
@@ -1650,7 +2085,7 @@ circuit_resume_edge_reading_helper(edge_connection_t *first_conn,
/* Activate reading starting from the chosen stream */
for (conn=chosen_stream; conn; conn = conn->next_stream) {
/* Start reading for the streams starting from here */
- if (conn->_base.marked_for_close || conn->package_window <= 0)
+ if (conn->base_.marked_for_close || conn->package_window <= 0)
continue;
if (!layer_hint || conn->cpath_layer == layer_hint) {
connection_start_reading(TO_CONN(conn));
@@ -1661,7 +2096,7 @@ circuit_resume_edge_reading_helper(edge_connection_t *first_conn,
}
/* Go back and do the ones we skipped, circular-style */
for (conn = first_conn; conn != chosen_stream; conn = conn->next_stream) {
- if (conn->_base.marked_for_close || conn->package_window <= 0)
+ if (conn->base_.marked_for_close || conn->package_window <= 0)
continue;
if (!layer_hint || conn->cpath_layer == layer_hint) {
connection_start_reading(TO_CONN(conn));
@@ -1687,7 +2122,7 @@ circuit_resume_edge_reading_helper(edge_connection_t *first_conn,
* package.
*/
for (conn=first_conn; conn; conn=conn->next_stream) {
- if (conn->_base.marked_for_close || conn->package_window <= 0)
+ if (conn->base_.marked_for_close || conn->package_window <= 0)
continue;
if (!layer_hint || conn->cpath_layer == layer_hint) {
int n = cells_per_conn, r;
@@ -1798,22 +2233,19 @@ circuit_consider_sending_sendme(circuit_t *circ, crypt_path_t *layer_hint)
}
#ifdef ACTIVE_CIRCUITS_PARANOIA
-#define assert_active_circuits_ok_paranoid(conn) \
- assert_active_circuits_ok(conn)
+#define assert_cmux_ok_paranoid(chan) \
+ assert_circuit_mux_okay(chan)
#else
-#define assert_active_circuits_ok_paranoid(conn)
+#define assert_cmux_ok_paranoid(chan)
#endif
-/** The total number of cells we have allocated from the memory pool. */
-static int total_cells_allocated = 0;
+/** The total number of cells we have allocated. */
+static size_t total_cells_allocated = 0;
+#ifdef ENABLE_MEMPOOLS
/** A memory pool to allocate packed_cell_t objects. */
static mp_pool_t *cell_pool = NULL;
-/** Memory pool to allocate insertion_time_elem_t objects used for cell
- * statistics. */
-static mp_pool_t *it_pool = NULL;
-
/** Allocate structures to hold cells. */
void
init_cell_pool(void)
@@ -1822,8 +2254,8 @@ init_cell_pool(void)
cell_pool = mp_pool_new(sizeof(packed_cell_t), 128*1024);
}
-/** Free all storage used to hold cells (and insertion times if we measure
- * cell statistics). */
+/** Free all storage used to hold cells (and insertion times/commands if we
+ * measure cell statistics and/or if CELL_STATS events are enabled). */
void
free_cell_pool(void)
{
@@ -1832,10 +2264,6 @@ free_cell_pool(void)
mp_pool_destroy(cell_pool);
cell_pool = NULL;
}
- if (it_pool) {
- mp_pool_destroy(it_pool);
- it_pool = NULL;
- }
}
/** Free excess storage in cell pool. */
@@ -1846,20 +2274,47 @@ clean_cell_pool(void)
mp_pool_clean(cell_pool, 0, 1);
}
+#define relay_alloc_cell() \
+ mp_pool_get(cell_pool)
+#define relay_free_cell(cell) \
+ mp_pool_release(cell)
+
+#define RELAY_CELL_MEM_COST (sizeof(packed_cell_t) + MP_POOL_ITEM_OVERHEAD)
+
+#else /* !ENABLE_MEMPOOLS case */
+
+#define relay_alloc_cell() \
+ tor_malloc_zero(sizeof(packed_cell_t))
+#define relay_free_cell(cell) \
+ tor_free(cell)
+
+#define RELAY_CELL_MEM_COST (sizeof(packed_cell_t))
+
+#endif /* ENABLE_MEMPOOLS */
+
/** Release storage held by <b>cell</b>. */
static INLINE void
packed_cell_free_unchecked(packed_cell_t *cell)
{
--total_cells_allocated;
- mp_pool_release(cell);
+ relay_free_cell(cell);
}
/** Allocate and return a new packed_cell_t. */
-static INLINE packed_cell_t *
-packed_cell_alloc(void)
+STATIC packed_cell_t *
+packed_cell_new(void)
{
++total_cells_allocated;
- return mp_pool_get(cell_pool);
+ return relay_alloc_cell();
+}
+
+/** Return a packed cell used outside by channel_t lower layer */
+void
+packed_cell_free(packed_cell_t *cell)
+{
+ if (!cell)
+ return;
+ packed_cell_free_unchecked(cell);
}
/** Log current statistics for cell pool allocation at log level
@@ -1870,24 +2325,26 @@ dump_cell_pool_usage(int severity)
circuit_t *c;
int n_circs = 0;
int n_cells = 0;
- for (c = _circuit_get_global_list(); c; c = c->next) {
- n_cells += c->n_conn_cells.n;
+ TOR_LIST_FOREACH(c, circuit_get_global_list(), head) {
+ n_cells += c->n_chan_cells.n;
if (!CIRCUIT_IS_ORIGIN(c))
- n_cells += TO_OR_CIRCUIT(c)->p_conn_cells.n;
+ n_cells += TO_OR_CIRCUIT(c)->p_chan_cells.n;
++n_circs;
}
- log(severity, LD_MM, "%d cells allocated on %d circuits. %d cells leaked.",
- n_cells, n_circs, total_cells_allocated - n_cells);
+ tor_log(severity, LD_MM,
+ "%d cells allocated on %d circuits. %d cells leaked.",
+ n_cells, n_circs, (int)total_cells_allocated - n_cells);
+#ifdef ENABLE_MEMPOOLS
mp_pool_log_status(cell_pool, severity);
+#endif
}
/** Allocate a new copy of packed <b>cell</b>. */
static INLINE packed_cell_t *
-packed_cell_copy(const cell_t *cell)
+packed_cell_copy(const cell_t *cell, int wide_circ_ids)
{
- packed_cell_t *c = packed_cell_alloc();
- cell_pack(c, cell);
- c->next = NULL;
+ packed_cell_t *c = packed_cell_new();
+ cell_pack(c, cell, wide_circ_ids);
return c;
}
@@ -1895,452 +2352,160 @@ packed_cell_copy(const cell_t *cell)
void
cell_queue_append(cell_queue_t *queue, packed_cell_t *cell)
{
- if (queue->tail) {
- tor_assert(!queue->tail->next);
- queue->tail->next = cell;
- } else {
- queue->head = cell;
- }
- queue->tail = cell;
- cell->next = NULL;
+ TOR_SIMPLEQ_INSERT_TAIL(&queue->head, cell, next);
++queue->n;
}
-/** Append a newly allocated copy of <b>cell</b> to the end of <b>queue</b> */
+/** Append a newly allocated copy of <b>cell</b> to the end of the
+ * <b>exitward</b> (or app-ward) <b>queue</b> of <b>circ</b>. If
+ * <b>use_stats</b> is true, record statistics about the cell.
+ */
void
-cell_queue_append_packed_copy(cell_queue_t *queue, const cell_t *cell)
+cell_queue_append_packed_copy(circuit_t *circ, cell_queue_t *queue,
+ int exitward, const cell_t *cell,
+ int wide_circ_ids, int use_stats)
{
- packed_cell_t *copy = packed_cell_copy(cell);
- /* Remember the time when this cell was put in the queue. */
- if (get_options()->CellStatistics) {
- struct timeval now;
- uint32_t added;
- insertion_time_queue_t *it_queue = queue->insertion_times;
- if (!it_pool)
- it_pool = mp_pool_new(sizeof(insertion_time_elem_t), 1024);
- tor_gettimeofday_cached(&now);
-#define SECONDS_IN_A_DAY 86400L
- added = (uint32_t)(((now.tv_sec % SECONDS_IN_A_DAY) * 100L)
- + ((uint32_t)now.tv_usec / (uint32_t)10000L));
- if (!it_queue) {
- it_queue = tor_malloc_zero(sizeof(insertion_time_queue_t));
- queue->insertion_times = it_queue;
- }
- if (it_queue->last && it_queue->last->insertion_time == added) {
- it_queue->last->counter++;
- } else {
- insertion_time_elem_t *elem = mp_pool_get(it_pool);
- elem->next = NULL;
- elem->insertion_time = added;
- elem->counter = 1;
- if (it_queue->last) {
- it_queue->last->next = elem;
- it_queue->last = elem;
- } else {
- it_queue->first = it_queue->last = elem;
- }
- }
- }
+ struct timeval now;
+ packed_cell_t *copy = packed_cell_copy(cell, wide_circ_ids);
+ (void)circ;
+ (void)exitward;
+ (void)use_stats;
+ tor_gettimeofday_cached_monotonic(&now);
+
+ copy->inserted_time = (uint32_t)tv_to_msec(&now);
+
cell_queue_append(queue, copy);
}
+/** Initialize <b>queue</b> as an empty cell queue. */
+void
+cell_queue_init(cell_queue_t *queue)
+{
+ memset(queue, 0, sizeof(cell_queue_t));
+ TOR_SIMPLEQ_INIT(&queue->head);
+}
+
/** Remove and free every cell in <b>queue</b>. */
void
cell_queue_clear(cell_queue_t *queue)
{
- packed_cell_t *cell, *next;
- cell = queue->head;
- while (cell) {
- next = cell->next;
+ packed_cell_t *cell;
+ while ((cell = TOR_SIMPLEQ_FIRST(&queue->head))) {
+ TOR_SIMPLEQ_REMOVE_HEAD(&queue->head, next);
packed_cell_free_unchecked(cell);
- cell = next;
}
- queue->head = queue->tail = NULL;
+ TOR_SIMPLEQ_INIT(&queue->head);
queue->n = 0;
- if (queue->insertion_times) {
- while (queue->insertion_times->first) {
- insertion_time_elem_t *elem = queue->insertion_times->first;
- queue->insertion_times->first = elem->next;
- mp_pool_release(elem);
- }
- tor_free(queue->insertion_times);
- }
}
/** Extract and return the cell at the head of <b>queue</b>; return NULL if
* <b>queue</b> is empty. */
-static INLINE packed_cell_t *
+STATIC packed_cell_t *
cell_queue_pop(cell_queue_t *queue)
{
- packed_cell_t *cell = queue->head;
+ packed_cell_t *cell = TOR_SIMPLEQ_FIRST(&queue->head);
if (!cell)
return NULL;
- queue->head = cell->next;
- if (cell == queue->tail) {
- tor_assert(!queue->head);
- queue->tail = NULL;
- }
+ TOR_SIMPLEQ_REMOVE_HEAD(&queue->head, next);
--queue->n;
return cell;
}
-/** Return a pointer to the "next_active_on_{n,p}_conn" pointer of <b>circ</b>,
- * depending on whether <b>conn</b> matches n_conn or p_conn. */
-static INLINE circuit_t **
-next_circ_on_conn_p(circuit_t *circ, or_connection_t *conn)
+/** Return the total number of bytes used for each packed_cell in a queue.
+ * Approximate. */
+size_t
+packed_cell_mem_cost(void)
{
- tor_assert(circ);
- tor_assert(conn);
- if (conn == circ->n_conn) {
- return &circ->next_active_on_n_conn;
- } else {
- or_circuit_t *orcirc = TO_OR_CIRCUIT(circ);
- tor_assert(conn == orcirc->p_conn);
- return &orcirc->next_active_on_p_conn;
- }
+ return RELAY_CELL_MEM_COST;
}
-/** Return a pointer to the "prev_active_on_{n,p}_conn" pointer of <b>circ</b>,
- * depending on whether <b>conn</b> matches n_conn or p_conn. */
-static INLINE circuit_t **
-prev_circ_on_conn_p(circuit_t *circ, or_connection_t *conn)
+/** DOCDOC */
+STATIC size_t
+cell_queues_get_total_allocation(void)
{
- tor_assert(circ);
- tor_assert(conn);
- if (conn == circ->n_conn) {
- return &circ->prev_active_on_n_conn;
- } else {
- or_circuit_t *orcirc = TO_OR_CIRCUIT(circ);
- tor_assert(conn == orcirc->p_conn);
- return &orcirc->prev_active_on_p_conn;
- }
+ return total_cells_allocated * packed_cell_mem_cost();
}
-/** Helper for sorting cell_ewma_t values in their priority queue. */
-static int
-compare_cell_ewma_counts(const void *p1, const void *p2)
+/** Check whether we've got too much space used for cells. If so,
+ * call the OOM handler and return 1. Otherwise, return 0. */
+STATIC int
+cell_queues_check_size(void)
{
- const cell_ewma_t *e1=p1, *e2=p2;
- if (e1->cell_count < e2->cell_count)
- return -1;
- else if (e1->cell_count > e2->cell_count)
+ size_t alloc = cell_queues_get_total_allocation();
+ alloc += buf_get_total_allocation();
+ if (alloc >= get_options()->MaxMemInQueues) {
+ circuits_handle_oom(alloc);
return 1;
- else
- return 0;
-}
-
-/** Given a cell_ewma_t, return a pointer to the circuit containing it. */
-static circuit_t *
-cell_ewma_to_circuit(cell_ewma_t *ewma)
-{
- if (ewma->is_for_p_conn) {
- /* This is an or_circuit_t's p_cell_ewma. */
- or_circuit_t *orcirc = SUBTYPE_P(ewma, or_circuit_t, p_cell_ewma);
- return TO_CIRCUIT(orcirc);
- } else {
- /* This is some circuit's n_cell_ewma. */
- return SUBTYPE_P(ewma, circuit_t, n_cell_ewma);
}
+ return 0;
}
-/* ==== Functions for scaling cell_ewma_t ====
-
- When choosing which cells to relay first, we favor circuits that have been
- quiet recently. This gives better latency on connections that aren't
- pushing lots of data, and makes the network feel more interactive.
-
- Conceptually, we take an exponentially weighted mean average of the number
- of cells a circuit has sent, and allow active circuits (those with cells to
- relay) to send cells in reverse order of their exponentially-weighted mean
- average (EWMA) cell count. [That is, a cell sent N seconds ago 'counts'
- F^N times as much as a cell sent now, for 0<F<1.0, and we favor the
- circuit that has sent the fewest cells]
-
- If 'double' had infinite precision, we could do this simply by counting a
- cell sent at startup as having weight 1.0, and a cell sent N seconds later
- as having weight F^-N. This way, we would never need to re-scale
- any already-sent cells.
-
- To prevent double from overflowing, we could count a cell sent now as
- having weight 1.0 and a cell sent N seconds ago as having weight F^N.
- This, however, would mean we'd need to re-scale *ALL* old circuits every
- time we wanted to send a cell.
-
- So as a compromise, we divide time into 'ticks' (currently, 10-second
- increments) and say that a cell sent at the start of a current tick is
- worth 1.0, a cell sent N seconds before the start of the current tick is
- worth F^N, and a cell sent N seconds after the start of the current tick is
- worth F^-N. This way we don't overflow, and we don't need to constantly
- rescale.
- */
-
-/** How long does a tick last (seconds)? */
-#define EWMA_TICK_LEN 10
-
-/** The default per-tick scale factor, if it hasn't been overridden by a
- * consensus or a configuration setting. zero means "disabled". */
-#define EWMA_DEFAULT_HALFLIFE 0.0
-
-/** Given a timeval <b>now</b>, compute the cell_ewma tick in which it occurs
- * and the fraction of the tick that has elapsed between the start of the tick
- * and <b>now</b>. Return the former and store the latter in
- * *<b>remainder_out</b>.
- *
- * These tick values are not meant to be shared between Tor instances, or used
- * for other purposes. */
-static unsigned
-cell_ewma_tick_from_timeval(const struct timeval *now,
- double *remainder_out)
-{
- unsigned res = (unsigned) (now->tv_sec / EWMA_TICK_LEN);
- /* rem */
- double rem = (now->tv_sec % EWMA_TICK_LEN) +
- ((double)(now->tv_usec)) / 1.0e6;
- *remainder_out = rem / EWMA_TICK_LEN;
- return res;
-}
-
-/** Compute and return the current cell_ewma tick. */
-unsigned
-cell_ewma_get_tick(void)
-{
- return ((unsigned)approx_time() / EWMA_TICK_LEN);
-}
-
-/** The per-tick scale factor to be used when computing cell-count EWMA
- * values. (A cell sent N ticks before the start of the current tick
- * has value ewma_scale_factor ** N.)
+/**
+ * Update the number of cells available on the circuit's n_chan or p_chan's
+ * circuit mux.
*/
-static double ewma_scale_factor = 0.1;
-/* DOCDOC ewma_enabled */
-static int ewma_enabled = 0;
-
-/*DOCDOC*/
-#define EPSILON 0.00001
-/*DOCDOC*/
-#define LOG_ONEHALF -0.69314718055994529
-
-/** Adjust the global cell scale factor based on <b>options</b> */
-void
-cell_ewma_set_scale_factor(const or_options_t *options,
- const networkstatus_t *consensus)
-{
- int32_t halflife_ms;
- double halflife;
- const char *source;
- if (options && options->CircuitPriorityHalflife >= -EPSILON) {
- halflife = options->CircuitPriorityHalflife;
- source = "CircuitPriorityHalflife in configuration";
- } else if (consensus && (halflife_ms = networkstatus_get_param(
- consensus, "CircuitPriorityHalflifeMsec",
- -1, -1, INT32_MAX)) >= 0) {
- halflife = ((double)halflife_ms)/1000.0;
- source = "CircuitPriorityHalflifeMsec in consensus";
- } else {
- halflife = EWMA_DEFAULT_HALFLIFE;
- source = "Default value";
- }
-
- if (halflife <= EPSILON) {
- /* The cell EWMA algorithm is disabled. */
- ewma_scale_factor = 0.1;
- ewma_enabled = 0;
- log_info(LD_OR,
- "Disabled cell_ewma algorithm because of value in %s",
- source);
- } else {
- /* convert halflife into halflife-per-tick. */
- halflife /= EWMA_TICK_LEN;
- /* compute per-tick scale factor. */
- ewma_scale_factor = exp( LOG_ONEHALF / halflife );
- ewma_enabled = 1;
- log_info(LD_OR,
- "Enabled cell_ewma algorithm because of value in %s; "
- "scale factor is %f per %d seconds",
- source, ewma_scale_factor, EWMA_TICK_LEN);
- }
-}
-
-/** Return the multiplier necessary to convert the value of a cell sent in
- * 'from_tick' to one sent in 'to_tick'. */
-static INLINE double
-get_scale_factor(unsigned from_tick, unsigned to_tick)
-{
- /* This math can wrap around, but that's okay: unsigned overflow is
- well-defined */
- int diff = (int)(to_tick - from_tick);
- return pow(ewma_scale_factor, diff);
-}
-
-/** Adjust the cell count of <b>ewma</b> so that it is scaled with respect to
- * <b>cur_tick</b> */
-static void
-scale_single_cell_ewma(cell_ewma_t *ewma, unsigned cur_tick)
-{
- double factor = get_scale_factor(ewma->last_adjusted_tick, cur_tick);
- ewma->cell_count *= factor;
- ewma->last_adjusted_tick = cur_tick;
-}
-
-/** Adjust the cell count of every active circuit on <b>conn</b> so
- * that they are scaled with respect to <b>cur_tick</b> */
-static void
-scale_active_circuits(or_connection_t *conn, unsigned cur_tick)
-{
-
- double factor = get_scale_factor(
- conn->active_circuit_pqueue_last_recalibrated,
- cur_tick);
- /** Ordinarily it isn't okay to change the value of an element in a heap,
- * but it's okay here, since we are preserving the order. */
- SMARTLIST_FOREACH(conn->active_circuit_pqueue, cell_ewma_t *, e, {
- tor_assert(e->last_adjusted_tick ==
- conn->active_circuit_pqueue_last_recalibrated);
- e->cell_count *= factor;
- e->last_adjusted_tick = cur_tick;
- });
- conn->active_circuit_pqueue_last_recalibrated = cur_tick;
-}
-
-/** Rescale <b>ewma</b> to the same scale as <b>conn</b>, and add it to
- * <b>conn</b>'s priority queue of active circuits */
-static void
-add_cell_ewma_to_conn(or_connection_t *conn, cell_ewma_t *ewma)
-{
- tor_assert(ewma->heap_index == -1);
- scale_single_cell_ewma(ewma,
- conn->active_circuit_pqueue_last_recalibrated);
-
- smartlist_pqueue_add(conn->active_circuit_pqueue,
- compare_cell_ewma_counts,
- STRUCT_OFFSET(cell_ewma_t, heap_index),
- ewma);
-}
-
-/** Remove <b>ewma</b> from <b>conn</b>'s priority queue of active circuits */
-static void
-remove_cell_ewma_from_conn(or_connection_t *conn, cell_ewma_t *ewma)
-{
- tor_assert(ewma->heap_index != -1);
- smartlist_pqueue_remove(conn->active_circuit_pqueue,
- compare_cell_ewma_counts,
- STRUCT_OFFSET(cell_ewma_t, heap_index),
- ewma);
-}
-
-/** Remove and return the first cell_ewma_t from conn's priority queue of
- * active circuits. Requires that the priority queue is nonempty. */
-static cell_ewma_t *
-pop_first_cell_ewma_from_conn(or_connection_t *conn)
-{
- return smartlist_pqueue_pop(conn->active_circuit_pqueue,
- compare_cell_ewma_counts,
- STRUCT_OFFSET(cell_ewma_t, heap_index));
-}
-
-/** Add <b>circ</b> to the list of circuits with pending cells on
- * <b>conn</b>. No effect if <b>circ</b> is already linked. */
void
-make_circuit_active_on_conn(circuit_t *circ, or_connection_t *conn)
+update_circuit_on_cmux_(circuit_t *circ, cell_direction_t direction,
+ const char *file, int lineno)
{
- circuit_t **nextp = next_circ_on_conn_p(circ, conn);
- circuit_t **prevp = prev_circ_on_conn_p(circ, conn);
+ channel_t *chan = NULL;
+ or_circuit_t *or_circ = NULL;
+ circuitmux_t *cmux = NULL;
- if (*nextp && *prevp) {
- /* Already active. */
- return;
- }
-
- assert_active_circuits_ok_paranoid(conn);
-
- if (! conn->active_circuits) {
- conn->active_circuits = circ;
- *prevp = *nextp = circ;
- } else {
- circuit_t *head = conn->active_circuits;
- circuit_t *old_tail = *prev_circ_on_conn_p(head, conn);
- *next_circ_on_conn_p(old_tail, conn) = circ;
- *nextp = head;
- *prev_circ_on_conn_p(head, conn) = circ;
- *prevp = old_tail;
- }
+ tor_assert(circ);
- if (circ->n_conn == conn) {
- add_cell_ewma_to_conn(conn, &circ->n_cell_ewma);
+ /* Okay, get the channel */
+ if (direction == CELL_DIRECTION_OUT) {
+ chan = circ->n_chan;
} else {
- or_circuit_t *orcirc = TO_OR_CIRCUIT(circ);
- tor_assert(conn == orcirc->p_conn);
- add_cell_ewma_to_conn(conn, &orcirc->p_cell_ewma);
+ or_circ = TO_OR_CIRCUIT(circ);
+ chan = or_circ->p_chan;
}
- assert_active_circuits_ok_paranoid(conn);
-}
+ tor_assert(chan);
+ tor_assert(chan->cmux);
-/** Remove <b>circ</b> from the list of circuits with pending cells on
- * <b>conn</b>. No effect if <b>circ</b> is already unlinked. */
-void
-make_circuit_inactive_on_conn(circuit_t *circ, or_connection_t *conn)
-{
- circuit_t **nextp = next_circ_on_conn_p(circ, conn);
- circuit_t **prevp = prev_circ_on_conn_p(circ, conn);
- circuit_t *next = *nextp, *prev = *prevp;
+ /* Now get the cmux */
+ cmux = chan->cmux;
- if (!next && !prev) {
- /* Already inactive. */
+ /* Cmux sanity check */
+ if (! circuitmux_is_circuit_attached(cmux, circ)) {
+ log_warn(LD_BUG, "called on non-attachd circuit from %s:%d",
+ file, lineno);
return;
}
+ tor_assert(circuitmux_attached_circuit_direction(cmux, circ) == direction);
- assert_active_circuits_ok_paranoid(conn);
-
- tor_assert(next && prev);
- tor_assert(*prev_circ_on_conn_p(next, conn) == circ);
- tor_assert(*next_circ_on_conn_p(prev, conn) == circ);
+ assert_cmux_ok_paranoid(chan);
- if (next == circ) {
- conn->active_circuits = NULL;
- } else {
- *prev_circ_on_conn_p(next, conn) = prev;
- *next_circ_on_conn_p(prev, conn) = next;
- if (conn->active_circuits == circ)
- conn->active_circuits = next;
- }
- *prevp = *nextp = NULL;
-
- if (circ->n_conn == conn) {
- remove_cell_ewma_from_conn(conn, &circ->n_cell_ewma);
+ /* Update the number of cells we have for the circuit mux */
+ if (direction == CELL_DIRECTION_OUT) {
+ circuitmux_set_num_cells(cmux, circ, circ->n_chan_cells.n);
} else {
- or_circuit_t *orcirc = TO_OR_CIRCUIT(circ);
- tor_assert(conn == orcirc->p_conn);
- remove_cell_ewma_from_conn(conn, &orcirc->p_cell_ewma);
+ circuitmux_set_num_cells(cmux, circ, or_circ->p_chan_cells.n);
}
- assert_active_circuits_ok_paranoid(conn);
+ assert_cmux_ok_paranoid(chan);
}
-/** Remove all circuits from the list of circuits with pending cells on
- * <b>conn</b>. */
+/** Remove all circuits from the cmux on <b>chan</b>.
+ *
+ * If <b>circuits_out</b> is non-NULL, add all detached circuits to
+ * <b>circuits_out</b>.
+ **/
void
-connection_or_unlink_all_active_circs(or_connection_t *orconn)
+channel_unlink_all_circuits(channel_t *chan, smartlist_t *circuits_out)
{
- circuit_t *head = orconn->active_circuits;
- circuit_t *cur = head;
- if (! head)
- return;
- do {
- circuit_t *next = *next_circ_on_conn_p(cur, orconn);
- *prev_circ_on_conn_p(cur, orconn) = NULL;
- *next_circ_on_conn_p(cur, orconn) = NULL;
- cur = next;
- } while (cur != head);
- orconn->active_circuits = NULL;
-
- SMARTLIST_FOREACH(orconn->active_circuit_pqueue, cell_ewma_t *, e,
- e->heap_index = -1);
- smartlist_clear(orconn->active_circuit_pqueue);
+ tor_assert(chan);
+ tor_assert(chan->cmux);
+
+ circuitmux_detach_all_circuits(chan->cmux, circuits_out);
+ chan->num_n_circuits = 0;
+ chan->num_p_circuits = 0;
}
/** Block (if <b>block</b> is true) or unblock (if <b>block</b> is false)
- * every edge connection that is using <b>circ</b> to write to <b>orconn</b>,
+ * every edge connection that is using <b>circ</b> to write to <b>chan</b>,
* and start or stop reading as appropriate.
*
* If <b>stream_id</b> is nonzero, block only the edge connection whose
@@ -2349,17 +2514,17 @@ connection_or_unlink_all_active_circs(or_connection_t *orconn)
* Returns the number of streams whose status we changed.
*/
static int
-set_streams_blocked_on_circ(circuit_t *circ, or_connection_t *orconn,
+set_streams_blocked_on_circ(circuit_t *circ, channel_t *chan,
int block, streamid_t stream_id)
{
edge_connection_t *edge = NULL;
int n = 0;
- if (circ->n_conn == orconn) {
- circ->streams_blocked_on_n_conn = block;
+ if (circ->n_chan == chan) {
+ circ->streams_blocked_on_n_chan = block;
if (CIRCUIT_IS_ORIGIN(circ))
edge = TO_ORIGIN_CIRCUIT(circ)->p_streams;
} else {
- circ->streams_blocked_on_p_conn = block;
+ circ->streams_blocked_on_p_chan = block;
tor_assert(!CIRCUIT_IS_ORIGIN(circ));
edge = TO_OR_CIRCUIT(circ)->n_streams;
}
@@ -2393,191 +2558,305 @@ set_streams_blocked_on_circ(circuit_t *circ, or_connection_t *orconn,
return n;
}
+/** Extract the command from a packed cell. */
+static uint8_t
+packed_cell_get_command(const packed_cell_t *cell, int wide_circ_ids)
+{
+ if (wide_circ_ids) {
+ return get_uint8(cell->body+4);
+ } else {
+ return get_uint8(cell->body+2);
+ }
+}
+
/** Pull as many cells as possible (but no more than <b>max</b>) from the
- * queue of the first active circuit on <b>conn</b>, and write them to
- * <b>conn</b>-&gt;outbuf. Return the number of cells written. Advance
+ * queue of the first active circuit on <b>chan</b>, and write them to
+ * <b>chan</b>-&gt;outbuf. Return the number of cells written. Advance
* the active circuit pointer to the next active circuit in the ring. */
int
-connection_or_flush_from_first_active_circuit(or_connection_t *conn, int max,
- time_t now)
+channel_flush_from_first_active_circuit(channel_t *chan, int max)
{
- int n_flushed;
- cell_queue_t *queue;
+ circuitmux_t *cmux = NULL;
+ int n_flushed = 0;
+ cell_queue_t *queue, *destroy_queue=NULL;
circuit_t *circ;
+ or_circuit_t *or_circ;
int streams_blocked;
-
- /* The current (hi-res) time */
- struct timeval now_hires;
-
- /* The EWMA cell counter for the circuit we're flushing. */
- cell_ewma_t *cell_ewma = NULL;
- double ewma_increment = -1;
-
- circ = conn->active_circuits;
- if (!circ) return 0;
- assert_active_circuits_ok_paranoid(conn);
-
- /* See if we're doing the ewma circuit selection algorithm. */
- if (ewma_enabled) {
- unsigned tick;
- double fractional_tick;
- tor_gettimeofday_cached(&now_hires);
- tick = cell_ewma_tick_from_timeval(&now_hires, &fractional_tick);
-
- if (tick != conn->active_circuit_pqueue_last_recalibrated) {
- scale_active_circuits(conn, tick);
+ packed_cell_t *cell;
+
+ /* Get the cmux */
+ tor_assert(chan);
+ tor_assert(chan->cmux);
+ cmux = chan->cmux;
+
+ /* Main loop: pick a circuit, send a cell, update the cmux */
+ while (n_flushed < max) {
+ circ = circuitmux_get_first_active_circuit(cmux, &destroy_queue);
+ if (destroy_queue) {
+ /* this code is duplicated from some of the logic below. Ugly! XXXX */
+ tor_assert(destroy_queue->n > 0);
+ cell = cell_queue_pop(destroy_queue);
+ channel_write_packed_cell(chan, cell);
+ /* Update the cmux destroy counter */
+ circuitmux_notify_xmit_destroy(cmux);
+ cell = NULL;
+ ++n_flushed;
+ continue;
}
+ /* If it returns NULL, no cells left to send */
+ if (!circ) break;
+ assert_cmux_ok_paranoid(chan);
- ewma_increment = pow(ewma_scale_factor, -fractional_tick);
-
- cell_ewma = smartlist_get(conn->active_circuit_pqueue, 0);
- circ = cell_ewma_to_circuit(cell_ewma);
- }
+ if (circ->n_chan == chan) {
+ queue = &circ->n_chan_cells;
+ streams_blocked = circ->streams_blocked_on_n_chan;
+ } else {
+ or_circ = TO_OR_CIRCUIT(circ);
+ tor_assert(or_circ->p_chan == chan);
+ queue = &TO_OR_CIRCUIT(circ)->p_chan_cells;
+ streams_blocked = circ->streams_blocked_on_p_chan;
+ }
- if (circ->n_conn == conn) {
- queue = &circ->n_conn_cells;
- streams_blocked = circ->streams_blocked_on_n_conn;
- } else {
- queue = &TO_OR_CIRCUIT(circ)->p_conn_cells;
- streams_blocked = circ->streams_blocked_on_p_conn;
- }
- tor_assert(*next_circ_on_conn_p(circ,conn));
+ /* Circuitmux told us this was active, so it should have cells */
+ tor_assert(queue->n > 0);
- for (n_flushed = 0; n_flushed < max && queue->head; ) {
- packed_cell_t *cell = cell_queue_pop(queue);
- tor_assert(*next_circ_on_conn_p(circ,conn));
+ /*
+ * Get just one cell here; once we've sent it, that can change the circuit
+ * selection, so we have to loop around for another even if this circuit
+ * has more than one.
+ */
+ cell = cell_queue_pop(queue);
/* Calculate the exact time that this cell has spent in the queue. */
- if (get_options()->CellStatistics && !CIRCUIT_IS_ORIGIN(circ)) {
+ if (get_options()->CellStatistics ||
+ get_options()->TestingEnableCellStatsEvent) {
+ uint32_t msec_waiting;
struct timeval tvnow;
- uint32_t flushed;
- uint32_t cell_waiting_time;
- insertion_time_queue_t *it_queue = queue->insertion_times;
tor_gettimeofday_cached(&tvnow);
- flushed = (uint32_t)((tvnow.tv_sec % SECONDS_IN_A_DAY) * 100L +
- (uint32_t)tvnow.tv_usec / (uint32_t)10000L);
- if (!it_queue || !it_queue->first) {
- log_info(LD_GENERAL, "Cannot determine insertion time of cell. "
- "Looks like the CellStatistics option was "
- "recently enabled.");
- } else {
- or_circuit_t *orcirc = TO_OR_CIRCUIT(circ);
- insertion_time_elem_t *elem = it_queue->first;
- cell_waiting_time =
- (uint32_t)((flushed * 10L + SECONDS_IN_A_DAY * 1000L -
- elem->insertion_time * 10L) %
- (SECONDS_IN_A_DAY * 1000L));
-#undef SECONDS_IN_A_DAY
- elem->counter--;
- if (elem->counter < 1) {
- it_queue->first = elem->next;
- if (elem == it_queue->last)
- it_queue->last = NULL;
- mp_pool_release(elem);
- }
- orcirc->total_cell_waiting_time += cell_waiting_time;
- orcirc->processed_cells++;
+ msec_waiting = ((uint32_t)tv_to_msec(&tvnow)) - cell->inserted_time;
+
+ if (get_options()->CellStatistics && !CIRCUIT_IS_ORIGIN(circ)) {
+ or_circ = TO_OR_CIRCUIT(circ);
+ or_circ->total_cell_waiting_time += msec_waiting;
+ or_circ->processed_cells++;
+ }
+
+ if (get_options()->TestingEnableCellStatsEvent) {
+ uint8_t command = packed_cell_get_command(cell, chan->wide_circ_ids);
+
+ testing_cell_stats_entry_t *ent =
+ tor_malloc_zero(sizeof(testing_cell_stats_entry_t));
+ ent->command = command;
+ ent->waiting_time = msec_waiting / 10;
+ ent->removed = 1;
+ if (circ->n_chan == chan)
+ ent->exitward = 1;
+ if (!circ->testing_cell_stats)
+ circ->testing_cell_stats = smartlist_new();
+ smartlist_add(circ->testing_cell_stats, ent);
}
}
/* If we just flushed our queue and this circuit is used for a
* tunneled directory request, possibly advance its state. */
- if (queue->n == 0 && TO_CONN(conn)->dirreq_id)
- geoip_change_dirreq_state(TO_CONN(conn)->dirreq_id,
+ if (queue->n == 0 && chan->dirreq_id)
+ geoip_change_dirreq_state(chan->dirreq_id,
DIRREQ_TUNNELED,
DIRREQ_CIRC_QUEUE_FLUSHED);
- connection_write_to_buf(cell->body, CELL_NETWORK_SIZE, TO_CONN(conn));
+ /* Now send the cell */
+ channel_write_packed_cell(chan, cell);
+ cell = NULL;
- packed_cell_free_unchecked(cell);
+ /*
+ * Don't packed_cell_free_unchecked(cell) here because the channel will
+ * do so when it gets out of the channel queue (probably already did, in
+ * which case that was an immediate double-free bug).
+ */
+
+ /* Update the counter */
++n_flushed;
- if (cell_ewma) {
- cell_ewma_t *tmp;
- cell_ewma->cell_count += ewma_increment;
- /* We pop and re-add the cell_ewma_t here, not above, since we need to
- * re-add it immediately to keep the priority queue consistent with
- * the linked-list implementation */
- tmp = pop_first_cell_ewma_from_conn(conn);
- tor_assert(tmp == cell_ewma);
- add_cell_ewma_to_conn(conn, cell_ewma);
- }
- if (!ewma_enabled && circ != conn->active_circuits) {
- /* If this happens, the current circuit just got made inactive by
- * a call in connection_write_to_buf(). That's nothing to worry about:
- * circuit_make_inactive_on_conn() already advanced conn->active_circuits
- * for us.
- */
- assert_active_circuits_ok_paranoid(conn);
- goto done;
- }
- }
- tor_assert(*next_circ_on_conn_p(circ,conn));
- assert_active_circuits_ok_paranoid(conn);
- conn->active_circuits = *next_circ_on_conn_p(circ, conn);
- /* Is the cell queue low enough to unblock all the streams that are waiting
- * to write to this circuit? */
- if (streams_blocked && queue->n <= CELL_QUEUE_LOWWATER_SIZE)
- set_streams_blocked_on_circ(circ, conn, 0, 0); /* unblock streams */
+ /*
+ * Now update the cmux; tell it we've just sent a cell, and how many
+ * we have left.
+ */
+ circuitmux_notify_xmit_cells(cmux, circ, 1);
+ circuitmux_set_num_cells(cmux, circ, queue->n);
+ if (queue->n == 0)
+ log_debug(LD_GENERAL, "Made a circuit inactive.");
+
+ /* Is the cell queue low enough to unblock all the streams that are waiting
+ * to write to this circuit? */
+ if (streams_blocked && queue->n <= CELL_QUEUE_LOWWATER_SIZE)
+ set_streams_blocked_on_circ(circ, chan, 0, 0); /* unblock streams */
- /* Did we just run out of cells on this circuit's queue? */
- if (queue->n == 0) {
- log_debug(LD_GENERAL, "Made a circuit inactive.");
- make_circuit_inactive_on_conn(circ, conn);
+ /* If n_flushed < max still, loop around and pick another circuit */
}
- done:
- if (n_flushed)
- conn->timestamp_last_added_nonpadding = now;
+
+ /* Okay, we're done sending now */
+ assert_cmux_ok_paranoid(chan);
+
return n_flushed;
}
-/** Add <b>cell</b> to the queue of <b>circ</b> writing to <b>orconn</b>
+#if 0
+/** Indicate the current preferred cap for middle circuits; zero disables
+ * the cap. Right now it's just a constant, ORCIRC_MAX_MIDDLE_CELLS, but
+ * the logic in append_cell_to_circuit_queue() is written to be correct
+ * if we want to base it on a consensus param or something that might change
+ * in the future.
+ */
+static int
+get_max_middle_cells(void)
+{
+ return ORCIRC_MAX_MIDDLE_CELLS;
+}
+#endif
+
+/** Add <b>cell</b> to the queue of <b>circ</b> writing to <b>chan</b>
* transmitting in <b>direction</b>. */
void
-append_cell_to_circuit_queue(circuit_t *circ, or_connection_t *orconn,
+append_cell_to_circuit_queue(circuit_t *circ, channel_t *chan,
cell_t *cell, cell_direction_t direction,
streamid_t fromstream)
{
+ or_circuit_t *orcirc = NULL;
cell_queue_t *queue;
int streams_blocked;
+#if 0
+ uint32_t tgt_max_middle_cells, p_len, n_len, tmp, hard_max_middle_cells;
+#endif
+
+ int exitward;
if (circ->marked_for_close)
return;
- if (direction == CELL_DIRECTION_OUT) {
- queue = &circ->n_conn_cells;
- streams_blocked = circ->streams_blocked_on_n_conn;
+ exitward = (direction == CELL_DIRECTION_OUT);
+ if (exitward) {
+ queue = &circ->n_chan_cells;
+ streams_blocked = circ->streams_blocked_on_n_chan;
} else {
- or_circuit_t *orcirc = TO_OR_CIRCUIT(circ);
- queue = &orcirc->p_conn_cells;
- streams_blocked = circ->streams_blocked_on_p_conn;
+ orcirc = TO_OR_CIRCUIT(circ);
+ queue = &orcirc->p_chan_cells;
+ streams_blocked = circ->streams_blocked_on_p_chan;
}
- cell_queue_append_packed_copy(queue, cell);
+ /*
+ * Disabling this for now because of a possible guard discovery attack
+ */
+#if 0
+ /* Are we a middle circuit about to exceed ORCIRC_MAX_MIDDLE_CELLS? */
+ if ((circ->n_chan != NULL) && CIRCUIT_IS_ORCIRC(circ)) {
+ orcirc = TO_OR_CIRCUIT(circ);
+ if (orcirc->p_chan) {
+ /* We are a middle circuit if we have both n_chan and p_chan */
+ /* We'll need to know the current preferred maximum */
+ tgt_max_middle_cells = get_max_middle_cells();
+ if (tgt_max_middle_cells > 0) {
+ /* Do we need to initialize middle_max_cells? */
+ if (orcirc->max_middle_cells == 0) {
+ orcirc->max_middle_cells = tgt_max_middle_cells;
+ } else {
+ if (tgt_max_middle_cells > orcirc->max_middle_cells) {
+ /* If we want to increase the cap, we can do so right away */
+ orcirc->max_middle_cells = tgt_max_middle_cells;
+ } else if (tgt_max_middle_cells < orcirc->max_middle_cells) {
+ /*
+ * If we're shrinking the cap, we can't shrink past either queue;
+ * compare tgt_max_middle_cells rather than tgt_max_middle_cells *
+ * ORCIRC_MAX_MIDDLE_KILL_THRESH so the queues don't shrink enough
+ * to generate spurious warnings, either.
+ */
+ n_len = circ->n_chan_cells.n;
+ p_len = orcirc->p_chan_cells.n;
+ tmp = tgt_max_middle_cells;
+ if (tmp < n_len) tmp = n_len;
+ if (tmp < p_len) tmp = p_len;
+ orcirc->max_middle_cells = tmp;
+ }
+ /* else no change */
+ }
+ } else {
+ /* tgt_max_middle_cells == 0 indicates we should disable the cap */
+ orcirc->max_middle_cells = 0;
+ }
+
+ /* Now we know orcirc->max_middle_cells is set correctly */
+ if (orcirc->max_middle_cells > 0) {
+ hard_max_middle_cells =
+ (uint32_t)(((double)orcirc->max_middle_cells) *
+ ORCIRC_MAX_MIDDLE_KILL_THRESH);
+
+ if ((unsigned)queue->n + 1 >= hard_max_middle_cells) {
+ /* Queueing this cell would put queue over the kill theshold */
+ log_warn(LD_CIRC,
+ "Got a cell exceeding the hard cap of %u in the "
+ "%s direction on middle circ ID %u on chan ID "
+ U64_FORMAT "; killing the circuit.",
+ hard_max_middle_cells,
+ (direction == CELL_DIRECTION_OUT) ? "n" : "p",
+ (direction == CELL_DIRECTION_OUT) ?
+ circ->n_circ_id : orcirc->p_circ_id,
+ U64_PRINTF_ARG(
+ (direction == CELL_DIRECTION_OUT) ?
+ circ->n_chan->global_identifier :
+ orcirc->p_chan->global_identifier));
+ circuit_mark_for_close(circ, END_CIRC_REASON_RESOURCELIMIT);
+ return;
+ } else if ((unsigned)queue->n + 1 == orcirc->max_middle_cells) {
+ /* Only use ==, not >= for this test so we don't spam the log */
+ log_warn(LD_CIRC,
+ "While trying to queue a cell, reached the soft cap of %u "
+ "in the %s direction on middle circ ID %u "
+ "on chan ID " U64_FORMAT ".",
+ orcirc->max_middle_cells,
+ (direction == CELL_DIRECTION_OUT) ? "n" : "p",
+ (direction == CELL_DIRECTION_OUT) ?
+ circ->n_circ_id : orcirc->p_circ_id,
+ U64_PRINTF_ARG(
+ (direction == CELL_DIRECTION_OUT) ?
+ circ->n_chan->global_identifier :
+ orcirc->p_chan->global_identifier));
+ }
+ }
+ }
+ }
+#endif
+
+ cell_queue_append_packed_copy(circ, queue, exitward, cell,
+ chan->wide_circ_ids, 1);
+
+ if (PREDICT_UNLIKELY(cell_queues_check_size())) {
+ /* We ran the OOM handler */
+ if (circ->marked_for_close)
+ return;
+ }
/* If we have too many cells on the circuit, we should stop reading from
* the edge streams for a while. */
if (!streams_blocked && queue->n >= CELL_QUEUE_HIGHWATER_SIZE)
- set_streams_blocked_on_circ(circ, orconn, 1, 0); /* block streams */
+ set_streams_blocked_on_circ(circ, chan, 1, 0); /* block streams */
if (streams_blocked && fromstream) {
/* This edge connection is apparently not blocked; block it. */
- set_streams_blocked_on_circ(circ, orconn, 1, fromstream);
+ set_streams_blocked_on_circ(circ, chan, 1, fromstream);
}
+ update_circuit_on_cmux(circ, direction);
if (queue->n == 1) {
- /* This was the first cell added to the queue. We need to make this
+ /* This was the first cell added to the queue. We just made this
* circuit active. */
log_debug(LD_GENERAL, "Made a circuit active.");
- make_circuit_active_on_conn(circ, orconn);
}
- if (! connection_get_outbuf_len(TO_CONN(orconn))) {
+ if (!channel_has_queued_writes(chan)) {
/* There is no data at all waiting to be sent on the outbuf. Add a
* cell, so that we can notice when it gets flushed, flushed_some can
* get called, and we can start putting more data onto the buffer then.
*/
log_debug(LD_GENERAL, "Primed a buffer.");
- connection_or_flush_from_first_active_circuit(orconn, 1, approx_time());
+ channel_flush_from_first_active_circuit(chan, 1);
}
}
@@ -2641,58 +2920,40 @@ decode_address_from_payload(tor_addr_t *addr_out, const uint8_t *payload,
return payload + 2 + payload[1];
}
-/** Remove all the cells queued on <b>circ</b> for <b>orconn</b>. */
+/** Remove all the cells queued on <b>circ</b> for <b>chan</b>. */
void
-circuit_clear_cell_queue(circuit_t *circ, or_connection_t *orconn)
+circuit_clear_cell_queue(circuit_t *circ, channel_t *chan)
{
cell_queue_t *queue;
- if (circ->n_conn == orconn) {
- queue = &circ->n_conn_cells;
+ cell_direction_t direction;
+
+ if (circ->n_chan == chan) {
+ queue = &circ->n_chan_cells;
+ direction = CELL_DIRECTION_OUT;
} else {
or_circuit_t *orcirc = TO_OR_CIRCUIT(circ);
- tor_assert(orcirc->p_conn == orconn);
- queue = &orcirc->p_conn_cells;
+ tor_assert(orcirc->p_chan == chan);
+ queue = &orcirc->p_chan_cells;
+ direction = CELL_DIRECTION_IN;
}
- if (queue->n)
- make_circuit_inactive_on_conn(circ,orconn);
-
+ /* Clear the queue */
cell_queue_clear(queue);
+
+ /* Update the cell counter in the cmux */
+ if (chan->cmux && circuitmux_is_circuit_attached(chan->cmux, circ))
+ update_circuit_on_cmux(circ, direction);
}
-/** Fail with an assert if the active circuits ring on <b>orconn</b> is
- * corrupt. */
+/** Fail with an assert if the circuit mux on chan is corrupt
+ */
void
-assert_active_circuits_ok(or_connection_t *orconn)
+assert_circuit_mux_okay(channel_t *chan)
{
- circuit_t *head = orconn->active_circuits;
- circuit_t *cur = head;
- int n = 0;
- if (! head)
- return;
- do {
- circuit_t *next = *next_circ_on_conn_p(cur, orconn);
- circuit_t *prev = *prev_circ_on_conn_p(cur, orconn);
- cell_ewma_t *ewma;
- tor_assert(next);
- tor_assert(prev);
- tor_assert(*next_circ_on_conn_p(prev, orconn) == cur);
- tor_assert(*prev_circ_on_conn_p(next, orconn) == cur);
- if (orconn == cur->n_conn) {
- ewma = &cur->n_cell_ewma;
- tor_assert(!ewma->is_for_p_conn);
- } else {
- ewma = &TO_OR_CIRCUIT(cur)->p_cell_ewma;
- tor_assert(ewma->is_for_p_conn);
- }
- tor_assert(ewma->heap_index != -1);
- tor_assert(ewma == smartlist_get(orconn->active_circuit_pqueue,
- ewma->heap_index));
- n++;
- cur = next;
- } while (cur != head);
-
- tor_assert(n == smartlist_len(orconn->active_circuit_pqueue));
+ tor_assert(chan);
+ tor_assert(chan->cmux);
+
+ circuitmux_assert_okay(chan->cmux);
}
/** Return 1 if we shouldn't restart reading on this circuit, even if
@@ -2702,9 +2963,9 @@ static int
circuit_queue_streams_are_blocked(circuit_t *circ)
{
if (CIRCUIT_IS_ORIGIN(circ)) {
- return circ->streams_blocked_on_n_conn;
+ return circ->streams_blocked_on_n_chan;
} else {
- return circ->streams_blocked_on_p_conn;
+ return circ->streams_blocked_on_p_chan;
}
}
diff --git a/src/or/relay.h b/src/or/relay.h
index 41675e210..479d474b3 100644
--- a/src/or/relay.h
+++ b/src/or/relay.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,8 +9,8 @@
* \brief Header file for relay.c.
**/
-#ifndef _TOR_RELAY_H
-#define _TOR_RELAY_H
+#ifndef TOR_RELAY_H
+#define TOR_RELAY_H
extern uint64_t stats_n_relay_cells_relayed;
extern uint64_t stats_n_relay_cells_delivered;
@@ -20,9 +20,15 @@ int circuit_receive_relay_cell(cell_t *cell, circuit_t *circ,
void relay_header_pack(uint8_t *dest, const relay_header_t *src);
void relay_header_unpack(relay_header_t *dest, const uint8_t *src);
-int relay_send_command_from_edge(streamid_t stream_id, circuit_t *circ,
+int relay_send_command_from_edge_(streamid_t stream_id, circuit_t *circ,
uint8_t relay_command, const char *payload,
- size_t payload_len, crypt_path_t *cpath_layer);
+ size_t payload_len, crypt_path_t *cpath_layer,
+ const char *filename, int lineno);
+#define relay_send_command_from_edge(stream_id, circ, relay_command, payload, \
+ payload_len, cpath_layer) \
+ relay_send_command_from_edge_((stream_id), (circ), (relay_command), \
+ (payload), (payload_len), (cpath_layer), \
+ __FILE__, __LINE__)
int connection_edge_send_command(edge_connection_t *fromconn,
uint8_t relay_command, const char *payload,
size_t payload_len);
@@ -36,37 +42,65 @@ extern uint64_t stats_n_data_bytes_packaged;
extern uint64_t stats_n_data_cells_received;
extern uint64_t stats_n_data_bytes_received;
+#ifdef ENABLE_MEMPOOLS
void init_cell_pool(void);
void free_cell_pool(void);
void clean_cell_pool(void);
+#endif /* ENABLE_MEMPOOLS */
void dump_cell_pool_usage(int severity);
+size_t packed_cell_mem_cost(void);
+/* For channeltls.c */
+void packed_cell_free(packed_cell_t *cell);
+
+void cell_queue_init(cell_queue_t *queue);
void cell_queue_clear(cell_queue_t *queue);
void cell_queue_append(cell_queue_t *queue, packed_cell_t *cell);
-void cell_queue_append_packed_copy(cell_queue_t *queue, const cell_t *cell);
+void cell_queue_append_packed_copy(circuit_t *circ, cell_queue_t *queue,
+ int exitward, const cell_t *cell,
+ int wide_circ_ids, int use_stats);
-void append_cell_to_circuit_queue(circuit_t *circ, or_connection_t *orconn,
+void append_cell_to_circuit_queue(circuit_t *circ, channel_t *chan,
cell_t *cell, cell_direction_t direction,
streamid_t fromstream);
-void connection_or_unlink_all_active_circs(or_connection_t *conn);
-int connection_or_flush_from_first_active_circuit(or_connection_t *conn,
- int max, time_t now);
-void assert_active_circuits_ok(or_connection_t *orconn);
-void make_circuit_inactive_on_conn(circuit_t *circ, or_connection_t *conn);
-void make_circuit_active_on_conn(circuit_t *circ, or_connection_t *conn);
+void channel_unlink_all_circuits(channel_t *chan, smartlist_t *detached_out);
+int channel_flush_from_first_active_circuit(channel_t *chan, int max);
+void assert_circuit_mux_okay(channel_t *chan);
+void update_circuit_on_cmux_(circuit_t *circ, cell_direction_t direction,
+ const char *file, int lineno);
+#define update_circuit_on_cmux(circ, direction) \
+ update_circuit_on_cmux_((circ), (direction), SHORT_FILE__, __LINE__)
int append_address_to_payload(uint8_t *payload_out, const tor_addr_t *addr);
const uint8_t *decode_address_from_payload(tor_addr_t *addr_out,
const uint8_t *payload,
int payload_len);
-unsigned cell_ewma_get_tick(void);
-void cell_ewma_set_scale_factor(const or_options_t *options,
- const networkstatus_t *consensus);
-void circuit_clear_cell_queue(circuit_t *circ, or_connection_t *orconn);
+void circuit_clear_cell_queue(circuit_t *circ, channel_t *chan);
+
+void stream_choice_seed_weak_rng(void);
-#ifdef RELAY_PRIVATE
int relay_crypt(circuit_t *circ, cell_t *cell, cell_direction_t cell_direction,
crypt_path_t **layer_hint, char *recognized);
+
+#ifdef RELAY_PRIVATE
+STATIC int connected_cell_parse(const relay_header_t *rh, const cell_t *cell,
+ tor_addr_t *addr_out, int *ttl_out);
+/** An address-and-ttl tuple as yielded by resolved_cell_parse */
+typedef struct address_ttl_s {
+ tor_addr_t addr;
+ char *hostname;
+ int ttl;
+} address_ttl_t;
+STATIC void address_ttl_free(address_ttl_t *addr);
+STATIC int resolved_cell_parse(const cell_t *cell, const relay_header_t *rh,
+ smartlist_t *addresses_out, int *errcode_out);
+STATIC int connection_edge_process_resolved_cell(edge_connection_t *conn,
+ const cell_t *cell,
+ const relay_header_t *rh);
+STATIC packed_cell_t *packed_cell_new(void);
+STATIC packed_cell_t *cell_queue_pop(cell_queue_t *queue);
+STATIC size_t cell_queues_get_total_allocation(void);
+STATIC int cell_queues_check_size(void);
#endif
#endif
diff --git a/src/or/rendclient.c b/src/or/rendclient.c
index 3a0cd1a66..d42024010 100644
--- a/src/or/rendclient.c
+++ b/src/or/rendclient.c
@@ -1,5 +1,5 @@
/* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -8,6 +8,7 @@
**/
#include "or.h"
+#include "circpathbias.h"
#include "circuitbuild.h"
#include "circuitlist.h"
#include "circuituse.h"
@@ -16,6 +17,7 @@
#include "connection_edge.h"
#include "directory.h"
#include "main.h"
+#include "networkstatus.h"
#include "nodelist.h"
#include "relay.h"
#include "rendclient.h"
@@ -23,6 +25,8 @@
#include "rephist.h"
#include "router.h"
#include "routerlist.h"
+#include "routerset.h"
+#include "control.h"
static extend_info_t *rend_client_get_random_intro_impl(
const rend_cache_entry_t *rend_query,
@@ -43,7 +47,7 @@ rend_client_purge_state(void)
void
rend_client_introcirc_has_opened(origin_circuit_t *circ)
{
- tor_assert(circ->_base.purpose == CIRCUIT_PURPOSE_C_INTRODUCING);
+ tor_assert(circ->base_.purpose == CIRCUIT_PURPOSE_C_INTRODUCING);
tor_assert(circ->cpath);
log_info(LD_REND,"introcirc is open");
@@ -56,7 +60,7 @@ rend_client_introcirc_has_opened(origin_circuit_t *circ)
static int
rend_client_send_establish_rendezvous(origin_circuit_t *circ)
{
- tor_assert(circ->_base.purpose == CIRCUIT_PURPOSE_C_ESTABLISH_REND);
+ tor_assert(circ->base_.purpose == CIRCUIT_PURPOSE_C_ESTABLISH_REND);
tor_assert(circ->rend_data);
log_info(LD_REND, "Sending an ESTABLISH_RENDEZVOUS cell");
@@ -65,6 +69,14 @@ rend_client_send_establish_rendezvous(origin_circuit_t *circ)
circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_INTERNAL);
return -1;
}
+
+ /* Set timestamp_dirty, because circuit_expire_building expects it,
+ * and the rend cookie also means we've used the circ. */
+ circ->base_.timestamp_dirty = time(NULL);
+
+ /* We've attempted to use this circuit. Probe it if we fail */
+ pathbias_count_use_attempt(circ);
+
if (relay_send_command_from_edge(0, TO_CIRCUIT(circ),
RELAY_COMMAND_ESTABLISH_RENDEZVOUS,
circ->rend_data->rend_cookie,
@@ -99,16 +111,17 @@ rend_client_reextend_intro_circuit(origin_circuit_t *circ)
circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_INTERNAL);
return -1;
}
+ // XXX: should we not re-extend if hs_circ_has_timed_out?
if (circ->remaining_relay_early_cells) {
log_info(LD_REND,
- "Re-extending circ %d, this time to %s.",
- circ->_base.n_circ_id,
+ "Re-extending circ %u, this time to %s.",
+ (unsigned)circ->base_.n_circ_id,
safe_str_client(extend_info_describe(extend_info)));
result = circuit_extend_to_new_exit(circ, extend_info);
} else {
log_info(LD_REND,
- "Closing intro circ %d (out of RELAY_EARLY cells).",
- circ->_base.n_circ_id);
+ "Closing intro circ %u (out of RELAY_EARLY cells).",
+ (unsigned)circ->base_.n_circ_id);
circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_FINISHED);
/* connection_ap_handshake_attach_circuit will launch a new intro circ. */
result = 0;
@@ -117,6 +130,16 @@ rend_client_reextend_intro_circuit(origin_circuit_t *circ)
return result;
}
+/** Return true iff we should send timestamps in our INTRODUCE1 cells */
+static int
+rend_client_should_send_timestamp(void)
+{
+ if (get_options()->Support022HiddenServices >= 0)
+ return get_options()->Support022HiddenServices;
+
+ return networkstatus_get_param(NULL, "Support022HiddenServices", 1, 0, 1);
+}
+
/** Called when we're trying to connect an ap conn; sends an INTRODUCE1 cell
* down introcirc if possible.
*/
@@ -132,9 +155,10 @@ rend_client_send_introduction(origin_circuit_t *introcirc,
crypt_path_t *cpath;
off_t dh_offset;
crypto_pk_t *intro_key = NULL;
+ int status = 0;
- tor_assert(introcirc->_base.purpose == CIRCUIT_PURPOSE_C_INTRODUCING);
- tor_assert(rendcirc->_base.purpose == CIRCUIT_PURPOSE_C_REND_READY);
+ tor_assert(introcirc->base_.purpose == CIRCUIT_PURPOSE_C_INTRODUCING);
+ tor_assert(rendcirc->base_.purpose == CIRCUIT_PURPOSE_C_REND_READY);
tor_assert(introcirc->rend_data);
tor_assert(rendcirc->rend_data);
tor_assert(!rend_cmp_service_ids(introcirc->rend_data->onion_address,
@@ -161,7 +185,8 @@ rend_client_send_introduction(origin_circuit_t *introcirc,
}
}
- return -1;
+ status = -1;
+ goto cleanup;
}
/* first 20 bytes of payload are the hash of Bob's pk */
@@ -184,13 +209,16 @@ rend_client_send_introduction(origin_circuit_t *introcirc,
smartlist_len(entry->parsed->intro_nodes));
if (rend_client_reextend_intro_circuit(introcirc)) {
+ status = -2;
goto perm_err;
} else {
- return -1;
+ status = -1;
+ goto cleanup;
}
}
if (crypto_pk_get_digest(intro_key, payload)<0) {
log_warn(LD_BUG, "Internal error: couldn't hash public key.");
+ status = -2;
goto perm_err;
}
@@ -200,12 +228,14 @@ rend_client_send_introduction(origin_circuit_t *introcirc,
cpath = rendcirc->build_state->pending_final_cpath =
tor_malloc_zero(sizeof(crypt_path_t));
cpath->magic = CRYPT_PATH_MAGIC;
- if (!(cpath->dh_handshake_state = crypto_dh_new(DH_TYPE_REND))) {
+ if (!(cpath->rend_dh_handshake_state = crypto_dh_new(DH_TYPE_REND))) {
log_warn(LD_BUG, "Internal error: couldn't allocate DH.");
+ status = -2;
goto perm_err;
}
- if (crypto_dh_generate_public(cpath->dh_handshake_state)<0) {
+ if (crypto_dh_generate_public(cpath->rend_dh_handshake_state)<0) {
log_warn(LD_BUG, "Internal error: couldn't generate g^x.");
+ status = -2;
goto perm_err;
}
}
@@ -221,7 +251,14 @@ rend_client_send_introduction(origin_circuit_t *introcirc,
REND_DESC_COOKIE_LEN);
v3_shift += 2+REND_DESC_COOKIE_LEN;
}
- set_uint32(tmp+v3_shift+1, htonl((uint32_t)time(NULL)));
+ if (rend_client_should_send_timestamp()) {
+ uint32_t now = (uint32_t)time(NULL);
+ now += 300;
+ now -= now % 600;
+ set_uint32(tmp+v3_shift+1, htonl(now));
+ } else {
+ set_uint32(tmp+v3_shift+1, 0);
+ }
v3_shift += 4;
} /* if version 2 only write version number */
else if (entry->parsed->protocols & (1<<2)) {
@@ -253,9 +290,10 @@ rend_client_send_introduction(origin_circuit_t *introcirc,
dh_offset = MAX_NICKNAME_LEN+1+REND_COOKIE_LEN;
}
- if (crypto_dh_get_public(cpath->dh_handshake_state, tmp+dh_offset,
+ if (crypto_dh_get_public(cpath->rend_dh_handshake_state, tmp+dh_offset,
DH_KEY_LEN)<0) {
log_warn(LD_BUG, "Internal error: couldn't extract g^x.");
+ status = -2;
goto perm_err;
}
@@ -269,6 +307,7 @@ rend_client_send_introduction(origin_circuit_t *introcirc,
PK_PKCS1_OAEP_PADDING, 0);
if (r<0) {
log_warn(LD_BUG,"Internal error: hybrid pk encrypt failed.");
+ status = -2;
goto perm_err;
}
@@ -288,7 +327,8 @@ rend_client_send_introduction(origin_circuit_t *introcirc,
introcirc->cpath->prev)<0) {
/* introcirc is already marked for close. leave rendcirc alone. */
log_warn(LD_BUG, "Couldn't send INTRODUCE1 cell");
- return -2;
+ status = -2;
+ goto cleanup;
}
/* Now, we wait for an ACK or NAK on this circuit. */
@@ -297,14 +337,21 @@ rend_client_send_introduction(origin_circuit_t *introcirc,
/* Set timestamp_dirty, because circuit_expire_building expects it
* to specify when a circuit entered the _C_INTRODUCE_ACK_WAIT
* state. */
- introcirc->_base.timestamp_dirty = time(NULL);
+ introcirc->base_.timestamp_dirty = time(NULL);
+
+ pathbias_count_use_attempt(introcirc);
+
+ goto cleanup;
- return 0;
perm_err:
- if (!introcirc->_base.marked_for_close)
+ if (!introcirc->base_.marked_for_close)
circuit_mark_for_close(TO_CIRCUIT(introcirc), END_CIRC_REASON_INTERNAL);
circuit_mark_for_close(TO_CIRCUIT(rendcirc), END_CIRC_REASON_INTERNAL);
- return -2;
+ cleanup:
+ memwipe(payload, 0, sizeof(payload));
+ memwipe(tmp, 0, sizeof(tmp));
+
+ return status;
}
/** Called when a rendezvous circuit is open; sends a establish
@@ -312,7 +359,7 @@ rend_client_send_introduction(origin_circuit_t *introcirc,
void
rend_client_rendcirc_has_opened(origin_circuit_t *circ)
{
- tor_assert(circ->_base.purpose == CIRCUIT_PURPOSE_C_ESTABLISH_REND);
+ tor_assert(circ->base_.purpose == CIRCUIT_PURPOSE_C_ESTABLISH_REND);
log_info(LD_REND,"rendcirc is open");
@@ -322,6 +369,32 @@ rend_client_rendcirc_has_opened(origin_circuit_t *circ)
}
}
+/**
+ * Called to close other intro circuits we launched in parallel
+ * due to timeout.
+ */
+static void
+rend_client_close_other_intros(const char *onion_address)
+{
+ circuit_t *c;
+ /* abort parallel intro circs, if any */
+ TOR_LIST_FOREACH(c, circuit_get_global_list(), head) {
+ if ((c->purpose == CIRCUIT_PURPOSE_C_INTRODUCING ||
+ c->purpose == CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT) &&
+ !c->marked_for_close && CIRCUIT_IS_ORIGIN(c)) {
+ origin_circuit_t *oc = TO_ORIGIN_CIRCUIT(c);
+ if (oc->rend_data &&
+ !rend_cmp_service_ids(onion_address,
+ oc->rend_data->onion_address)) {
+ log_info(LD_REND|LD_CIRC, "Closing introduction circuit %d that we "
+ "built in parallel (Purpose %d).", oc->global_identifier,
+ c->purpose);
+ circuit_mark_for_close(c, END_CIRC_REASON_TIMEOUT);
+ }
+ }
+ }
+}
+
/** Called when get an ACK or a NAK for a REND_INTRODUCE1 cell.
*/
int
@@ -331,10 +404,10 @@ rend_client_introduction_acked(origin_circuit_t *circ,
origin_circuit_t *rendcirc;
(void) request; // XXXX Use this.
- if (circ->_base.purpose != CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT) {
+ if (circ->base_.purpose != CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT) {
log_warn(LD_PROTOCOL,
- "Received REND_INTRODUCE_ACK on unexpected circuit %d.",
- circ->_base.n_circ_id);
+ "Received REND_INTRODUCE_ACK on unexpected circuit %u.",
+ (unsigned)circ->base_.n_circ_id);
circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_TORPROTOCOL);
return -1;
}
@@ -345,6 +418,10 @@ rend_client_introduction_acked(origin_circuit_t *circ,
#endif
tor_assert(circ->rend_data);
+ /* For path bias: This circuit was used successfully. Valid
+ * nacks and acks count. */
+ pathbias_mark_use_success(circ);
+
if (request_len == 0) {
/* It's an ACK; the introduction point relayed our introduction request. */
/* Locate the rend circ which is waiting to hear about this ack,
@@ -361,7 +438,7 @@ rend_client_introduction_acked(origin_circuit_t *circ,
/* Set timestamp_dirty, because circuit_expire_building expects
* it to specify when a circuit entered the
* _C_REND_READY_INTRO_ACKED state. */
- rendcirc->_base.timestamp_dirty = time(NULL);
+ rendcirc->base_.timestamp_dirty = time(NULL);
} else {
log_info(LD_REND,"...Found no rend circ. Dropping on the floor.");
}
@@ -369,6 +446,9 @@ rend_client_introduction_acked(origin_circuit_t *circ,
circuit_change_purpose(TO_CIRCUIT(circ),
CIRCUIT_PURPOSE_C_INTRODUCE_ACKED);
circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_FINISHED);
+
+ /* close any other intros launched in parallel */
+ rend_client_close_other_intros(circ->rend_data->onion_address);
} else {
/* It's a NAK; the introduction point didn't relay our request. */
circuit_change_purpose(TO_CIRCUIT(circ), CIRCUIT_PURPOSE_C_INTRODUCING);
@@ -525,7 +605,7 @@ rend_client_purge_last_hid_serv_requests(void)
if (old_last_hid_serv_requests != NULL) {
log_info(LD_REND, "Purging client last-HS-desc-request-time table");
- strmap_free(old_last_hid_serv_requests, _tor_free);
+ strmap_free(old_last_hid_serv_requests, tor_free_);
}
}
@@ -539,11 +619,14 @@ static int
directory_get_from_hs_dir(const char *desc_id, const rend_data_t *rend_query)
{
smartlist_t *responsible_dirs = smartlist_new();
+ smartlist_t *usable_responsible_dirs = smartlist_new();
+ const or_options_t *options = get_options();
routerstatus_t *hs_dir;
char desc_id_base32[REND_DESC_ID_V2_LEN_BASE32 + 1];
time_t now = time(NULL);
char descriptor_cookie_base64[3*REND_DESC_COOKIE_LEN_BASE64];
- int tor2web_mode = get_options()->Tor2webMode;
+ const int tor2web_mode = options->Tor2webMode;
+ int excluded_some;
tor_assert(desc_id);
tor_assert(rend_query);
/* Determine responsible dirs. Even if we can't get all we want,
@@ -564,16 +647,33 @@ directory_get_from_hs_dir(const char *desc_id, const rend_data_t *rend_query)
dir, desc_id_base32, rend_query, 0, 0);
const node_t *node = node_get_by_id(dir->identity_digest);
if (last + REND_HID_SERV_DIR_REQUERY_PERIOD >= now ||
- !node || !node_has_descriptor(node))
- SMARTLIST_DEL_CURRENT(responsible_dirs, dir);
+ !node || !node_has_descriptor(node)) {
+ SMARTLIST_DEL_CURRENT(responsible_dirs, dir);
+ continue;
+ }
+ if (! routerset_contains_node(options->ExcludeNodes, node)) {
+ smartlist_add(usable_responsible_dirs, dir);
+ }
});
- hs_dir = smartlist_choose(responsible_dirs);
+ excluded_some =
+ smartlist_len(usable_responsible_dirs) < smartlist_len(responsible_dirs);
+
+ hs_dir = smartlist_choose(usable_responsible_dirs);
+ if (! hs_dir && ! options->StrictNodes)
+ hs_dir = smartlist_choose(responsible_dirs);
+
smartlist_free(responsible_dirs);
+ smartlist_free(usable_responsible_dirs);
if (!hs_dir) {
log_info(LD_REND, "Could not pick one of the responsible hidden "
"service directories, because we requested them all "
"recently without success.");
+ if (options->StrictNodes && excluded_some) {
+ log_warn(LD_REND, "Could not pick a hidden service directory for the "
+ "requested hidden service: they are all either down or "
+ "excluded, and StrictNodes is set.");
+ }
return 0;
}
@@ -602,7 +702,8 @@ directory_get_from_hs_dir(const char *desc_id, const rend_data_t *rend_query)
directory_initiate_command_routerstatus_rend(hs_dir,
DIR_PURPOSE_FETCH_RENDDESC_V2,
ROUTER_PURPOSE_GENERAL,
- !tor2web_mode, desc_id_base32,
+ tor2web_mode?DIRIND_ONEHOP:DIRIND_ANONYMOUS,
+ desc_id_base32,
NULL, 0, 0,
rend_query);
log_info(LD_REND, "Sending fetch request for v2 descriptor for "
@@ -614,6 +715,9 @@ directory_get_from_hs_dir(const char *desc_id, const rend_data_t *rend_query)
(rend_query->auth_type == REND_NO_AUTH ? "[none]" :
escaped_safe_str_client(descriptor_cookie_base64)),
routerstatus_describe(hs_dir));
+ control_event_hs_descriptor_requested(rend_query,
+ hs_dir->identity_digest,
+ desc_id_base32);
return 1;
}
@@ -659,10 +763,17 @@ rend_client_refetch_v2_renddesc(const rend_data_t *rend_query)
time(NULL), chosen_replica) < 0) {
log_warn(LD_REND, "Internal error: Computing v2 rendezvous "
"descriptor ID did not succeed.");
- return;
+ /*
+ * Hmm, can this write anything to descriptor_id and still fail?
+ * Let's clear it just to be safe.
+ *
+ * From here on, any returns should goto done which clears
+ * descriptor_id so we don't leave key-derived material on the stack.
+ */
+ goto done;
}
if (directory_get_from_hs_dir(descriptor_id, rend_query) != 0)
- return; /* either success or failure, but we're done */
+ goto done; /* either success or failure, but we're done */
}
/* If we come here, there are no hidden service directories left. */
log_info(LD_REND, "Could not pick one of the responsible hidden "
@@ -670,6 +781,10 @@ rend_client_refetch_v2_renddesc(const rend_data_t *rend_query)
"we already tried them all unsuccessfully.");
/* Close pending connections. */
rend_client_desc_trynow(rend_query->onion_address);
+
+ done:
+ memwipe(descriptor_id, 0, sizeof(descriptor_id));
+
return;
}
@@ -682,8 +797,7 @@ rend_client_cancel_descriptor_fetches(void)
SMARTLIST_FOREACH_BEGIN(connection_array, connection_t *, conn) {
if (conn->type == CONN_TYPE_DIR &&
- (conn->purpose == DIR_PURPOSE_FETCH_RENDDESC ||
- conn->purpose == DIR_PURPOSE_FETCH_RENDDESC_V2)) {
+ conn->purpose == DIR_PURPOSE_FETCH_RENDDESC_V2) {
/* It's a rendezvous descriptor fetch in progress -- cancel it
* by marking the connection for close.
*
@@ -818,7 +932,7 @@ rend_client_rendezvous_acked(origin_circuit_t *circ, const uint8_t *request,
(void) request;
(void) request_len;
/* we just got an ack for our establish-rendezvous. switch purposes. */
- if (circ->_base.purpose != CIRCUIT_PURPOSE_C_ESTABLISH_REND) {
+ if (circ->base_.purpose != CIRCUIT_PURPOSE_C_ESTABLISH_REND) {
log_warn(LD_PROTOCOL,"Got a rendezvous ack when we weren't expecting one. "
"Closing circ.");
circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_TORPROTOCOL);
@@ -829,7 +943,14 @@ rend_client_rendezvous_acked(origin_circuit_t *circ, const uint8_t *request,
circuit_change_purpose(TO_CIRCUIT(circ), CIRCUIT_PURPOSE_C_REND_READY);
/* Set timestamp_dirty, because circuit_expire_building expects it
* to specify when a circuit entered the _C_REND_READY state. */
- circ->_base.timestamp_dirty = time(NULL);
+ circ->base_.timestamp_dirty = time(NULL);
+
+ /* From a path bias point of view, this circuit is now successfully used.
+ * Waiting any longer opens us up to attacks from Bob. He could induce
+ * Alice to attempt to connect to his hidden service and never reply
+ * to her rend requests */
+ pathbias_mark_use_success(circ);
+
/* XXXX This is a pretty brute-force approach. It'd be better to
* attach only the connections that are waiting on this circuit, rather
* than trying to attach them all. See comments bug 743. */
@@ -847,8 +968,8 @@ rend_client_receive_rendezvous(origin_circuit_t *circ, const uint8_t *request,
crypt_path_t *hop;
char keys[DIGEST_LEN+CPATH_KEY_MATERIAL_LEN];
- if ((circ->_base.purpose != CIRCUIT_PURPOSE_C_REND_READY &&
- circ->_base.purpose != CIRCUIT_PURPOSE_C_REND_READY_INTRO_ACKED)
+ if ((circ->base_.purpose != CIRCUIT_PURPOSE_C_REND_READY &&
+ circ->base_.purpose != CIRCUIT_PURPOSE_C_REND_READY_INTRO_ACKED)
|| !circ->build_state->pending_final_cpath) {
log_warn(LD_PROTOCOL,"Got rendezvous2 cell from hidden service, but not "
"expecting it. Closing.");
@@ -868,9 +989,9 @@ rend_client_receive_rendezvous(origin_circuit_t *circ, const uint8_t *request,
tor_assert(circ->build_state);
tor_assert(circ->build_state->pending_final_cpath);
hop = circ->build_state->pending_final_cpath;
- tor_assert(hop->dh_handshake_state);
+ tor_assert(hop->rend_dh_handshake_state);
if (crypto_dh_compute_secret(LOG_PROTOCOL_WARN,
- hop->dh_handshake_state, (char*)request,
+ hop->rend_dh_handshake_state, (char*)request,
DH_KEY_LEN,
keys, DIGEST_LEN+CPATH_KEY_MATERIAL_LEN)<0) {
log_warn(LD_GENERAL, "Couldn't complete DH handshake.");
@@ -886,8 +1007,8 @@ rend_client_receive_rendezvous(origin_circuit_t *circ, const uint8_t *request,
goto err;
}
- crypto_dh_free(hop->dh_handshake_state);
- hop->dh_handshake_state = NULL;
+ crypto_dh_free(hop->rend_dh_handshake_state);
+ hop->rend_dh_handshake_state = NULL;
/* All is well. Extend the circuit. */
circuit_change_purpose(TO_CIRCUIT(circ), CIRCUIT_PURPOSE_C_REND_JOINED);
@@ -1172,11 +1293,11 @@ rend_parse_service_authorization(const or_options_t *options,
strmap_t *parsed = strmap_new();
smartlist_t *sl = smartlist_new();
rend_service_authorization_t *auth = NULL;
+ char descriptor_cookie_tmp[REND_DESC_COOKIE_LEN+2];
+ char descriptor_cookie_base64ext[REND_DESC_COOKIE_LEN_BASE64+2+1];
for (line = options->HidServAuth; line; line = line->next) {
char *onion_address, *descriptor_cookie;
- char descriptor_cookie_tmp[REND_DESC_COOKIE_LEN+2];
- char descriptor_cookie_base64ext[REND_DESC_COOKIE_LEN_BASE64+2+1];
int auth_type_val = 0;
auth = NULL;
SMARTLIST_FOREACH(sl, char *, c, tor_free(c););
@@ -1222,7 +1343,7 @@ rend_parse_service_authorization(const or_options_t *options,
descriptor_cookie);
goto err;
}
- auth_type_val = (descriptor_cookie_tmp[16] >> 4) + 1;
+ auth_type_val = (((uint8_t)descriptor_cookie_tmp[16]) >> 4) + 1;
if (auth_type_val < 1 || auth_type_val > 2) {
log_warn(LD_CONFIG, "Authorization cookie has unknown authorization "
"type encoded.");
@@ -1253,6 +1374,8 @@ rend_parse_service_authorization(const or_options_t *options,
} else {
strmap_free(parsed, rend_service_authorization_strmap_item_free);
}
+ memwipe(descriptor_cookie_tmp, 0, sizeof(descriptor_cookie_tmp));
+ memwipe(descriptor_cookie_base64ext, 0, sizeof(descriptor_cookie_base64ext));
return res;
}
diff --git a/src/or/rendclient.h b/src/or/rendclient.h
index 393b556e3..1f731d0ae 100644
--- a/src/or/rendclient.h
+++ b/src/or/rendclient.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,8 +9,8 @@
* \brief Header file for rendclient.c.
**/
-#ifndef _TOR_RENDCLIENT_H
-#define _TOR_RENDCLIENT_H
+#ifndef TOR_RENDCLIENT_H
+#define TOR_RENDCLIENT_H
void rend_client_purge_state(void);
diff --git a/src/or/rendcommon.c b/src/or/rendcommon.c
index 4722690c1..a664b5d50 100644
--- a/src/or/rendcommon.c
+++ b/src/or/rendcommon.c
@@ -1,5 +1,5 @@
/* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -439,7 +439,7 @@ rend_intro_point_free(rend_intro_point_t *intro)
crypto_pk_free(intro->intro_key);
if (intro->accepted_intro_rsa_parts != NULL) {
- digestmap_free(intro->accepted_intro_rsa_parts, _tor_free);
+ replaycache_free(intro->accepted_intro_rsa_parts);
}
tor_free(intro);
@@ -672,79 +672,6 @@ rend_encode_v2_descriptors(smartlist_t *descs_out,
return seconds_valid;
}
-/** Parse a service descriptor at <b>str</b> (<b>len</b> bytes). On
- * success, return a newly alloced service_descriptor_t. On failure,
- * return NULL.
- */
-rend_service_descriptor_t *
-rend_parse_service_descriptor(const char *str, size_t len)
-{
- rend_service_descriptor_t *result = NULL;
- int i, n_intro_points;
- size_t keylen, asn1len;
- const char *end, *cp, *eos;
- rend_intro_point_t *intro;
-
- result = tor_malloc_zero(sizeof(rend_service_descriptor_t));
- cp = str;
- end = str+len;
- if (end-cp<2) goto truncated;
- result->version = 0;
- if (end-cp < 2) goto truncated;
- asn1len = ntohs(get_uint16(cp));
- cp += 2;
- if ((size_t)(end-cp) < asn1len) goto truncated;
- result->pk = crypto_pk_asn1_decode(cp, asn1len);
- if (!result->pk) goto truncated;
- cp += asn1len;
- if (end-cp < 4) goto truncated;
- result->timestamp = (time_t) ntohl(get_uint32(cp));
- cp += 4;
- result->protocols = 1<<2; /* always use intro format 2 */
- if (end-cp < 2) goto truncated;
- n_intro_points = ntohs(get_uint16(cp));
- cp += 2;
-
- result->intro_nodes = smartlist_new();
- for (i=0;i<n_intro_points;++i) {
- if (end-cp < 2) goto truncated;
- eos = (const char *)memchr(cp,'\0',end-cp);
- if (!eos) goto truncated;
- /* Write nickname to extend info, but postpone the lookup whether
- * we know that router. It's not part of the parsing process. */
- intro = tor_malloc_zero(sizeof(rend_intro_point_t));
- intro->extend_info = tor_malloc_zero(sizeof(extend_info_t));
- strlcpy(intro->extend_info->nickname, cp,
- sizeof(intro->extend_info->nickname));
- smartlist_add(result->intro_nodes, intro);
- cp = eos+1;
- }
- keylen = crypto_pk_keysize(result->pk);
- tor_assert(end-cp >= 0);
- if ((size_t)(end-cp) < keylen) goto truncated;
- if ((size_t)(end-cp) > keylen) {
- log_warn(LD_PROTOCOL,
- "Signature is %d bytes too long on service descriptor.",
- (int)((size_t)(end-cp) - keylen));
- goto error;
- }
- note_crypto_pk_op(REND_CLIENT);
- if (crypto_pk_public_checksig_digest(result->pk,
- (char*)str,cp-str, /* data */
- (char*)cp,end-cp /* signature*/
- )<0) {
- log_warn(LD_PROTOCOL, "Bad signature on service descriptor.");
- goto error;
- }
-
- return result;
- truncated:
- log_warn(LD_PROTOCOL, "Truncated service descriptor.");
- error:
- rend_service_descriptor_free(result);
- return NULL;
-}
-
/** Sets <b>out</b> to the first 10 bytes of the digest of <b>pk</b>,
* base32 encoded. NUL-terminates out. (We use this string to
* identify services in directory requests and .onion URLs.)
@@ -800,7 +727,7 @@ rend_cache_entry_free(rend_cache_entry_t *e)
/** Helper: deallocate a rend_cache_entry_t. (Used with strmap_free(), which
* requires a function pointer whose argument is void*). */
static void
-_rend_cache_entry_free(void *p)
+rend_cache_entry_free_(void *p)
{
rend_cache_entry_free(p);
}
@@ -809,8 +736,8 @@ _rend_cache_entry_free(void *p)
void
rend_cache_free_all(void)
{
- strmap_free(rend_cache, _rend_cache_entry_free);
- digestmap_free(rend_cache_v2_dir, _rend_cache_entry_free);
+ strmap_free(rend_cache, rend_cache_entry_free_);
+ digestmap_free(rend_cache_v2_dir, rend_cache_entry_free_);
rend_cache = NULL;
rend_cache_v2_dir = NULL;
}
@@ -843,8 +770,8 @@ void
rend_cache_purge(void)
{
if (rend_cache) {
- log_info(LD_REND, "Purging client/v0-HS-authority HS descriptor cache");
- strmap_free(rend_cache, _rend_cache_entry_free);
+ log_info(LD_REND, "Purging HS descriptor cache");
+ strmap_free(rend_cache, rend_cache_entry_free_);
}
rend_cache = strmap_new();
}
@@ -954,27 +881,6 @@ rend_cache_lookup_entry(const char *query, int version, rend_cache_entry_t **e)
return 1;
}
-/** <b>query</b> is a base-32'ed service id. If it's malformed, return -1.
- * Else look it up.
- * - If it is found, point *desc to it, and write its length into
- * *desc_len, and return 1.
- * - If it is not found, return 0.
- * Note: calls to rend_cache_clean or rend_cache_store may invalidate
- * *desc.
- */
-int
-rend_cache_lookup_desc(const char *query, int version, const char **desc,
- size_t *desc_len)
-{
- rend_cache_entry_t *e;
- int r;
- r = rend_cache_lookup_entry(query,version,&e);
- if (r <= 0) return r;
- *desc = e->desc;
- *desc_len = e->len;
- return 1;
-}
-
/** Lookup the v2 service descriptor with base32-encoded <b>desc_id</b> and
* copy the pointer to it to *<b>desc</b>. Return 1 on success, 0 on
* well-formed-but-not-found, and -1 on failure.
@@ -1002,107 +908,9 @@ rend_cache_lookup_v2_desc_as_dir(const char *desc_id, const char **desc)
return 0;
}
-/** Parse *desc, calculate its service id, and store it in the cache.
- * If we have a newer v0 descriptor with the same ID, ignore this one.
- * If we have an older descriptor with the same ID, replace it.
- * If we are acting as client due to the published flag and have any v2
- * descriptor with the same ID, reject this one in order to not get
- * confused with having both versions for the same service.
- *
- * Return -2 if it's malformed or otherwise rejected; return -1 if we
- * already have a v2 descriptor here; return 0 if it's the same or older
- * than one we've already got; return 1 if it's novel.
- *
- * The published flag tells us if we store the descriptor
- * in our role as directory (1) or if we cache it as client (0).
- *
- * If <b>service_id</b> is non-NULL and the descriptor is not for that
- * service ID, reject it. <b>service_id</b> must be specified if and
- * only if <b>published</b> is 0 (we fetched this descriptor).
- */
-int
-rend_cache_store(const char *desc, size_t desc_len, int published,
- const char *service_id)
-{
- rend_cache_entry_t *e;
- rend_service_descriptor_t *parsed;
- char query[REND_SERVICE_ID_LEN_BASE32+1];
- char key[REND_SERVICE_ID_LEN_BASE32+2]; /* 0<query>\0 */
- time_t now;
- tor_assert(rend_cache);
- parsed = rend_parse_service_descriptor(desc,desc_len);
- if (!parsed) {
- log_warn(LD_PROTOCOL,"Couldn't parse service descriptor.");
- return -2;
- }
- if (rend_get_service_id(parsed->pk, query)<0) {
- log_warn(LD_BUG,"Couldn't compute service ID.");
- rend_service_descriptor_free(parsed);
- return -2;
- }
- if ((service_id != NULL) && strcmp(query, service_id)) {
- log_warn(LD_REND, "Received service descriptor for service ID %s; "
- "expected descriptor for service ID %s.",
- query, safe_str(service_id));
- rend_service_descriptor_free(parsed);
- return -2;
- }
- now = time(NULL);
- if (parsed->timestamp < now-REND_CACHE_MAX_AGE-REND_CACHE_MAX_SKEW) {
- log_fn(LOG_PROTOCOL_WARN, LD_REND,
- "Service descriptor %s is too old.",
- safe_str_client(query));
- rend_service_descriptor_free(parsed);
- return -2;
- }
- if (parsed->timestamp > now+REND_CACHE_MAX_SKEW) {
- log_fn(LOG_PROTOCOL_WARN, LD_REND,
- "Service descriptor %s is too far in the future.",
- safe_str_client(query));
- rend_service_descriptor_free(parsed);
- return -2;
- }
- /* Do we have a v2 descriptor and fetched this descriptor as a client? */
- tor_snprintf(key, sizeof(key), "2%s", query);
- if (!published && strmap_get_lc(rend_cache, key)) {
- log_info(LD_REND, "We already have a v2 descriptor for service %s.",
- safe_str_client(query));
- rend_service_descriptor_free(parsed);
- return -1;
- }
- tor_snprintf(key, sizeof(key), "0%s", query);
- e = (rend_cache_entry_t*) strmap_get_lc(rend_cache, key);
- if (e && e->parsed->timestamp > parsed->timestamp) {
- log_info(LD_REND,"We already have a newer service descriptor %s with the "
- "same ID and version.",
- safe_str_client(query));
- rend_service_descriptor_free(parsed);
- return 0;
- }
- if (e && e->len == desc_len && tor_memeq(desc,e->desc,desc_len)) {
- log_info(LD_REND,"We already have this service descriptor %s.",
- safe_str_client(query));
- e->received = time(NULL);
- rend_service_descriptor_free(parsed);
- return 0;
- }
- if (!e) {
- e = tor_malloc_zero(sizeof(rend_cache_entry_t));
- strmap_set_lc(rend_cache, key, e);
- } else {
- rend_service_descriptor_free(e->parsed);
- tor_free(e->desc);
- }
- e->received = time(NULL);
- e->parsed = parsed;
- e->len = desc_len;
- e->desc = tor_malloc(desc_len);
- memcpy(e->desc, desc, desc_len);
-
- log_debug(LD_REND,"Successfully stored rend desc '%s', len %d.",
- safe_str_client(query), (int)desc_len);
- return 1;
-}
+/* Do not allow more than this many introduction points in a hidden service
+ * descriptor */
+#define MAX_INTRO_POINTS 10
/** Parse the v2 service descriptor(s) in <b>desc</b> and store it/them to the
* local rend cache. Don't attempt to decrypt the included list of introduction
@@ -1110,12 +918,10 @@ rend_cache_store(const char *desc, size_t desc_len, int published,
*
* If we have a newer descriptor with the same ID, ignore this one.
* If we have an older descriptor with the same ID, replace it.
- * Return -2 if we are not acting as hidden service directory;
- * return -1 if the descriptor(s) were not parsable; return 0 if all
- * descriptors are the same or older than those we've already got;
- * return a positive number for the number of novel stored descriptors.
+ *
+ * Return an appropriate rend_cache_store_status_t.
*/
-int
+rend_cache_store_status_t
rend_cache_store_v2_desc_as_dir(const char *desc)
{
rend_service_descriptor_t *parsed;
@@ -1135,7 +941,7 @@ rend_cache_store_v2_desc_as_dir(const char *desc)
/* Cannot store descs, because we are (currently) not acting as
* hidden service directory. */
log_info(LD_REND, "Cannot store descs: Not acting as hs dir");
- return -2;
+ return RCS_NOTDIR;
}
while (rend_parse_v2_service_descriptor(&parsed, desc_id, &intro_content,
&intro_size, &encoded_size,
@@ -1211,11 +1017,11 @@ rend_cache_store_v2_desc_as_dir(const char *desc)
}
if (!number_parsed) {
log_info(LD_REND, "Could not parse any descriptor.");
- return -1;
+ return RCS_BADDESC;
}
log_info(LD_REND, "Parsed %d and added %d descriptor%s.",
number_parsed, number_stored, number_stored != 1 ? "s" : "");
- return number_stored;
+ return RCS_OKAY;
}
/** Parse the v2 service descriptor in <b>desc</b>, decrypt the included list
@@ -1225,15 +1031,12 @@ rend_cache_store_v2_desc_as_dir(const char *desc)
*
* If we have a newer v2 descriptor with the same ID, ignore this one.
* If we have an older descriptor with the same ID, replace it.
- * If we have any v0 descriptor with the same ID, reject this one in order
- * to not get confused with having both versions for the same service.
* If the descriptor's service ID does not match
* <b>rend_query</b>-\>onion_address, reject it.
- * Return -2 if it's malformed or otherwise rejected; return -1 if we
- * already have a v0 descriptor here; return 0 if it's the same or older
- * than one we've already got; return 1 if it's novel.
+ *
+ * Return an appropriate rend_cache_store_status_t.
*/
-int
+rend_cache_store_status_t
rend_cache_store_v2_desc_as_client(const char *desc,
const rend_data_t *rend_query)
{
@@ -1262,7 +1065,7 @@ rend_cache_store_v2_desc_as_client(const char *desc,
char key[REND_SERVICE_ID_LEN_BASE32+2];
char service_id[REND_SERVICE_ID_LEN_BASE32+1];
rend_cache_entry_t *e;
- int retval;
+ rend_cache_store_status_t retval = RCS_BADDESC;
tor_assert(rend_cache);
tor_assert(desc);
/* Parse the descriptor. */
@@ -1270,24 +1073,22 @@ rend_cache_store_v2_desc_as_client(const char *desc,
&intro_size, &encoded_size,
&next_desc, desc) < 0) {
log_warn(LD_REND, "Could not parse descriptor.");
- retval = -2;
goto err;
}
/* Compute service ID from public key. */
if (rend_get_service_id(parsed->pk, service_id)<0) {
log_warn(LD_REND, "Couldn't compute service ID.");
- retval = -2;
goto err;
}
if (strcmp(rend_query->onion_address, service_id)) {
log_warn(LD_REND, "Received service descriptor for service ID %s; "
"expected descriptor for service ID %s.",
service_id, safe_str(rend_query->onion_address));
- retval = -2;
goto err;
}
/* Decode/decrypt introduction points. */
if (intro_content) {
+ int n_intro_points;
if (rend_query->auth_type != REND_NO_AUTH &&
!tor_mem_is_zero(rend_query->descriptor_cookie,
sizeof(rend_query->descriptor_cookie))) {
@@ -1308,12 +1109,20 @@ rend_cache_store_v2_desc_as_client(const char *desc,
intro_size = ipos_decrypted_size;
}
}
- if (rend_parse_introduction_points(parsed, intro_content,
- intro_size) <= 0) {
+ n_intro_points = rend_parse_introduction_points(parsed, intro_content,
+ intro_size);
+ if (n_intro_points <= 0) {
log_warn(LD_REND, "Failed to parse introduction points. Either the "
"service has published a corrupt descriptor or you have "
"provided invalid authorization data.");
- retval = -2;
+ goto err;
+ } else if (n_intro_points > MAX_INTRO_POINTS) {
+ log_warn(LD_REND, "Found too many introduction points on a hidden "
+ "service descriptor for %s. This is probably a (misguided) "
+ "attempt to improve reliability, but it could also be an "
+ "attempt to do a guard enumeration attack. Rejecting.",
+ safe_str_client(rend_query->onion_address));
+
goto err;
}
} else {
@@ -1326,22 +1135,12 @@ rend_cache_store_v2_desc_as_client(const char *desc,
if (parsed->timestamp < now - REND_CACHE_MAX_AGE-REND_CACHE_MAX_SKEW) {
log_warn(LD_REND, "Service descriptor with service ID %s is too old.",
safe_str_client(service_id));
- retval = -2;
goto err;
}
/* Is descriptor too far in the future? */
if (parsed->timestamp > now + REND_CACHE_MAX_SKEW) {
log_warn(LD_REND, "Service descriptor with service ID %s is too far in "
"the future.", safe_str_client(service_id));
- retval = -2;
- goto err;
- }
- /* Do we have a v0 descriptor? */
- tor_snprintf(key, sizeof(key), "0%s", service_id);
- if (strmap_get_lc(rend_cache, key)) {
- log_info(LD_REND, "We already have a v0 descriptor for service ID %s.",
- safe_str_client(service_id));
- retval = -1;
goto err;
}
/* Do we already have a newer descriptor? */
@@ -1351,16 +1150,14 @@ rend_cache_store_v2_desc_as_client(const char *desc,
log_info(LD_REND, "We already have a newer service descriptor for "
"service ID %s with the same desc ID and version.",
safe_str_client(service_id));
- retval = 0;
- goto err;
+ goto okay;
}
/* Do we already have this descriptor? */
if (e && !strcmp(desc, e->desc)) {
log_info(LD_REND,"We already have this service descriptor %s.",
safe_str_client(service_id));
e->received = time(NULL);
- retval = 0;
- goto err;
+ goto okay;
}
if (!e) {
e = tor_malloc_zero(sizeof(rend_cache_entry_t));
@@ -1376,7 +1173,10 @@ rend_cache_store_v2_desc_as_client(const char *desc,
e->len = encoded_size;
log_debug(LD_REND,"Successfully stored rend desc '%s', len %d.",
safe_str_client(service_id), (int)encoded_size);
- return 1;
+ return RCS_OKAY;
+
+ okay:
+ retval = RCS_OKAY;
err:
rend_service_descriptor_free(parsed);
@@ -1452,13 +1252,6 @@ rend_process_relay_cell(circuit_t *circ, const crypt_path_t *layer_hint,
command);
}
-/** Return the number of entries in our rendezvous descriptor cache. */
-int
-rend_cache_size(void)
-{
- return strmap_size(rend_cache);
-}
-
/** Allocate and return a new rend_data_t with the same
* contents as <b>query</b>. */
rend_data_t *
diff --git a/src/or/rendcommon.h b/src/or/rendcommon.h
index be6bd13d2..07a47accf 100644
--- a/src/or/rendcommon.h
+++ b/src/or/rendcommon.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,8 +9,8 @@
* \brief Header file for rendcommon.c.
**/
-#ifndef _TOR_RENDCOMMON_H
-#define _TOR_RENDCOMMON_H
+#ifndef TOR_RENDCOMMON_H
+#define TOR_RENDCOMMON_H
/** Free all storage associated with <b>data</b> */
static INLINE void
@@ -26,8 +26,6 @@ void rend_process_relay_cell(circuit_t *circ, const crypt_path_t *layer_hint,
const uint8_t *payload);
void rend_service_descriptor_free(rend_service_descriptor_t *desc);
-rend_service_descriptor_t *rend_parse_service_descriptor(const char *str,
- size_t len);
int rend_get_service_id(crypto_pk_t *pk, char *out);
void rend_encoded_v2_service_descriptor_free(
rend_encoded_v2_service_descriptor_t *desc);
@@ -39,17 +37,20 @@ void rend_cache_clean_v2_descs_as_dir(time_t now);
void rend_cache_purge(void);
void rend_cache_free_all(void);
int rend_valid_service_id(const char *query);
-int rend_cache_lookup_desc(const char *query, int version, const char **desc,
- size_t *desc_len);
int rend_cache_lookup_entry(const char *query, int version,
rend_cache_entry_t **entry_out);
int rend_cache_lookup_v2_desc_as_dir(const char *query, const char **desc);
-int rend_cache_store(const char *desc, size_t desc_len, int published,
- const char *service_id);
-int rend_cache_store_v2_desc_as_client(const char *desc,
+/** Return value from rend_cache_store_v2_desc_as_{dir,client}. */
+typedef enum {
+ RCS_NOTDIR = -2, /**< We're not a directory */
+ RCS_BADDESC = -1, /**< This descriptor is no good. */
+ RCS_OKAY = 0 /**< All worked as expected */
+} rend_cache_store_status_t;
+
+rend_cache_store_status_t rend_cache_store_v2_desc_as_dir(const char *desc);
+rend_cache_store_status_t rend_cache_store_v2_desc_as_client(const char *desc,
const rend_data_t *rend_query);
-int rend_cache_store_v2_desc_as_dir(const char *desc);
-int rend_cache_size(void);
+
int rend_encode_v2_descriptors(smartlist_t *descs_out,
rend_service_descriptor_t *desc, time_t now,
uint8_t period, rend_auth_type_t auth_type,
diff --git a/src/or/rendmid.c b/src/or/rendmid.c
index bacd0ef93..110381680 100644
--- a/src/or/rendmid.c
+++ b/src/or/rendmid.c
@@ -1,5 +1,5 @@
/* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -32,10 +32,10 @@ rend_mid_establish_intro(or_circuit_t *circ, const uint8_t *request,
int reason = END_CIRC_REASON_INTERNAL;
log_info(LD_REND,
- "Received an ESTABLISH_INTRO request on circuit %d",
- circ->p_circ_id);
+ "Received an ESTABLISH_INTRO request on circuit %u",
+ (unsigned) circ->p_circ_id);
- if (circ->_base.purpose != CIRCUIT_PURPOSE_OR || circ->_base.n_conn) {
+ if (circ->base_.purpose != CIRCUIT_PURPOSE_OR || circ->base_.n_chan) {
log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
"Rejecting ESTABLISH_INTRO on non-OR or non-edge circuit.");
reason = END_CIRC_REASON_TORPROTOCOL;
@@ -56,8 +56,8 @@ rend_mid_establish_intro(or_circuit_t *circ, const uint8_t *request,
goto err;
}
- /* Next 20 bytes: Hash of handshake_digest | "INTRODUCE" */
- memcpy(buf, circ->handshake_digest, DIGEST_LEN);
+ /* Next 20 bytes: Hash of rend_circ_nonce | "INTRODUCE" */
+ memcpy(buf, circ->rend_circ_nonce, DIGEST_LEN);
memcpy(buf+DIGEST_LEN, "INTRODUCE", 9);
if (crypto_digest(expected_digest, buf, DIGEST_LEN+9) < 0) {
log_warn(LD_BUG, "Internal error computing digest.");
@@ -94,7 +94,7 @@ rend_mid_establish_intro(or_circuit_t *circ, const uint8_t *request,
/* Close any other intro circuits with the same pk. */
c = NULL;
- while ((c = circuit_get_intro_point(pk_digest))) {
+ while ((c = circuit_get_intro_point((const uint8_t *)pk_digest))) {
log_info(LD_REND, "Replacing old circuit for service %s",
safe_str(serviceid));
circuit_mark_for_close(TO_CIRCUIT(c), END_CIRC_REASON_FINISHED);
@@ -111,11 +111,11 @@ rend_mid_establish_intro(or_circuit_t *circ, const uint8_t *request,
/* Now, set up this circuit. */
circuit_change_purpose(TO_CIRCUIT(circ), CIRCUIT_PURPOSE_INTRO_POINT);
- memcpy(circ->rend_token, pk_digest, DIGEST_LEN);
+ circuit_set_intro_point_digest(circ, (uint8_t *)pk_digest);
log_info(LD_REND,
- "Established introduction point on circuit %d for service %s",
- circ->p_circ_id, safe_str(serviceid));
+ "Established introduction point on circuit %u for service %s",
+ (unsigned) circ->p_circ_id, safe_str(serviceid));
return 0;
truncated:
@@ -139,13 +139,13 @@ rend_mid_introduce(or_circuit_t *circ, const uint8_t *request,
char serviceid[REND_SERVICE_ID_LEN_BASE32+1];
char nak_body[1];
- log_info(LD_REND, "Received an INTRODUCE1 request on circuit %d",
- circ->p_circ_id);
+ log_info(LD_REND, "Received an INTRODUCE1 request on circuit %u",
+ (unsigned)circ->p_circ_id);
- if (circ->_base.purpose != CIRCUIT_PURPOSE_OR || circ->_base.n_conn) {
+ if (circ->base_.purpose != CIRCUIT_PURPOSE_OR || circ->base_.n_chan) {
log_warn(LD_PROTOCOL,
- "Rejecting INTRODUCE1 on non-OR or non-edge circuit %d.",
- circ->p_circ_id);
+ "Rejecting INTRODUCE1 on non-OR or non-edge circuit %u.",
+ (unsigned)circ->p_circ_id);
goto err;
}
@@ -155,9 +155,9 @@ rend_mid_introduce(or_circuit_t *circ, const uint8_t *request,
*/
if (request_len < (DIGEST_LEN+(MAX_NICKNAME_LEN+1)+REND_COOKIE_LEN+
DH_KEY_LEN+CIPHER_KEY_LEN+PKCS1_OAEP_PADDING_OVERHEAD)) {
- log_warn(LD_PROTOCOL, "Impossibly short INTRODUCE1 cell on circuit %d; "
+ log_warn(LD_PROTOCOL, "Impossibly short INTRODUCE1 cell on circuit %u; "
"responding with nack.",
- circ->p_circ_id);
+ (unsigned)circ->p_circ_id);
goto err;
}
@@ -165,20 +165,20 @@ rend_mid_introduce(or_circuit_t *circ, const uint8_t *request,
(char*)request, REND_SERVICE_ID_LEN);
/* The first 20 bytes are all we look at: they have a hash of Bob's PK. */
- intro_circ = circuit_get_intro_point((char*)request);
+ intro_circ = circuit_get_intro_point((const uint8_t*)request);
if (!intro_circ) {
log_info(LD_REND,
- "No intro circ found for INTRODUCE1 cell (%s) from circuit %d; "
+ "No intro circ found for INTRODUCE1 cell (%s) from circuit %u; "
"responding with nack.",
- safe_str(serviceid), circ->p_circ_id);
+ safe_str(serviceid), (unsigned)circ->p_circ_id);
goto err;
}
log_info(LD_REND,
"Sending introduction request for service %s "
- "from circ %d to circ %d",
- safe_str(serviceid), circ->p_circ_id,
- intro_circ->p_circ_id);
+ "from circ %u to circ %u",
+ safe_str(serviceid), (unsigned)circ->p_circ_id,
+ (unsigned)intro_circ->p_circ_id);
/* Great. Now we just relay the cell down the circuit. */
if (relay_send_command_from_edge(0, TO_CIRCUIT(intro_circ),
@@ -221,21 +221,22 @@ rend_mid_establish_rendezvous(or_circuit_t *circ, const uint8_t *request,
char hexid[9];
int reason = END_CIRC_REASON_TORPROTOCOL;
- log_info(LD_REND, "Received an ESTABLISH_RENDEZVOUS request on circuit %d",
- circ->p_circ_id);
+ log_info(LD_REND, "Received an ESTABLISH_RENDEZVOUS request on circuit %u",
+ (unsigned)circ->p_circ_id);
- if (circ->_base.purpose != CIRCUIT_PURPOSE_OR || circ->_base.n_conn) {
+ if (circ->base_.purpose != CIRCUIT_PURPOSE_OR || circ->base_.n_chan) {
log_warn(LD_PROTOCOL,
"Tried to establish rendezvous on non-OR or non-edge circuit.");
goto err;
}
if (request_len != REND_COOKIE_LEN) {
- log_warn(LD_PROTOCOL, "Invalid length on ESTABLISH_RENDEZVOUS.");
+ log_fn(LOG_PROTOCOL_WARN,
+ LD_PROTOCOL, "Invalid length on ESTABLISH_RENDEZVOUS.");
goto err;
}
- if (circuit_get_rendezvous((char*)request)) {
+ if (circuit_get_rendezvous(request)) {
log_warn(LD_PROTOCOL,
"Duplicate rendezvous cookie in ESTABLISH_RENDEZVOUS.");
goto err;
@@ -251,13 +252,13 @@ rend_mid_establish_rendezvous(or_circuit_t *circ, const uint8_t *request,
}
circuit_change_purpose(TO_CIRCUIT(circ), CIRCUIT_PURPOSE_REND_POINT_WAITING);
- memcpy(circ->rend_token, request, REND_COOKIE_LEN);
+ circuit_set_rendezvous_cookie(circ, request);
base16_encode(hexid,9,(char*)request,4);
log_info(LD_REND,
- "Established rendezvous point on circuit %d for cookie %s",
- circ->p_circ_id, hexid);
+ "Established rendezvous point on circuit %u for cookie %s",
+ (unsigned)circ->p_circ_id, hexid);
return 0;
err:
@@ -277,18 +278,18 @@ rend_mid_rendezvous(or_circuit_t *circ, const uint8_t *request,
char hexid[9];
int reason = END_CIRC_REASON_INTERNAL;
- if (circ->_base.purpose != CIRCUIT_PURPOSE_OR || circ->_base.n_conn) {
+ if (circ->base_.purpose != CIRCUIT_PURPOSE_OR || circ->base_.n_chan) {
log_info(LD_REND,
- "Tried to complete rendezvous on non-OR or non-edge circuit %d.",
- circ->p_circ_id);
+ "Tried to complete rendezvous on non-OR or non-edge circuit %u.",
+ (unsigned)circ->p_circ_id);
reason = END_CIRC_REASON_TORPROTOCOL;
goto err;
}
if (request_len != REND_COOKIE_LEN+DH_KEY_LEN+DIGEST_LEN) {
log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
- "Rejecting RENDEZVOUS1 cell with bad length (%d) on circuit %d.",
- (int)request_len, circ->p_circ_id);
+ "Rejecting RENDEZVOUS1 cell with bad length (%d) on circuit %u.",
+ (int)request_len, (unsigned)circ->p_circ_id);
reason = END_CIRC_REASON_TORPROTOCOL;
goto err;
}
@@ -296,10 +297,10 @@ rend_mid_rendezvous(or_circuit_t *circ, const uint8_t *request,
base16_encode(hexid, sizeof(hexid), (const char*)request, 4);
log_info(LD_REND,
- "Got request for rendezvous from circuit %d to cookie %s.",
- circ->p_circ_id, hexid);
+ "Got request for rendezvous from circuit %u to cookie %s.",
+ (unsigned)circ->p_circ_id, hexid);
- rend_circ = circuit_get_rendezvous((char*)request);
+ rend_circ = circuit_get_rendezvous(request);
if (!rend_circ) {
log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
"Rejecting RENDEZVOUS1 cell with unrecognized rendezvous cookie %s.",
@@ -314,20 +315,20 @@ rend_mid_rendezvous(or_circuit_t *circ, const uint8_t *request,
(char*)(request+REND_COOKIE_LEN),
request_len-REND_COOKIE_LEN, NULL)) {
log_warn(LD_GENERAL,
- "Unable to send RENDEZVOUS2 cell to client on circuit %d.",
- rend_circ->p_circ_id);
+ "Unable to send RENDEZVOUS2 cell to client on circuit %u.",
+ (unsigned)rend_circ->p_circ_id);
goto err;
}
/* Join the circuits. */
log_info(LD_REND,
- "Completing rendezvous: circuit %d joins circuit %d (cookie %s)",
- circ->p_circ_id, rend_circ->p_circ_id, hexid);
+ "Completing rendezvous: circuit %u joins circuit %u (cookie %s)",
+ (unsigned)circ->p_circ_id, (unsigned)rend_circ->p_circ_id, hexid);
circuit_change_purpose(TO_CIRCUIT(circ), CIRCUIT_PURPOSE_REND_ESTABLISHED);
circuit_change_purpose(TO_CIRCUIT(rend_circ),
CIRCUIT_PURPOSE_REND_ESTABLISHED);
- memset(circ->rend_token, 0, REND_COOKIE_LEN);
+ circuit_set_rendezvous_cookie(circ, NULL);
rend_circ->rend_splice = circ;
circ->rend_splice = rend_circ;
diff --git a/src/or/rendmid.h b/src/or/rendmid.h
index 0af6436de..310276ac9 100644
--- a/src/or/rendmid.h
+++ b/src/or/rendmid.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,8 +9,8 @@
* \brief Header file for rendmid.c.
**/
-#ifndef _TOR_RENDMID_H
-#define _TOR_RENDMID_H
+#ifndef TOR_RENDMID_H
+#define TOR_RENDMID_H
int rend_mid_establish_intro(or_circuit_t *circ, const uint8_t *request,
size_t request_len);
diff --git a/src/or/rendservice.c b/src/or/rendservice.c
index d235f089f..a7c1e32f1 100644
--- a/src/or/rendservice.c
+++ b/src/or/rendservice.c
@@ -1,5 +1,5 @@
/* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -7,7 +7,10 @@
* \brief The hidden-service side of rendezvous functionality.
**/
+#define RENDSERVICE_PRIVATE
+
#include "or.h"
+#include "circpathbias.h"
#include "circuitbuild.h"
#include "circuitlist.h"
#include "circuituse.h"
@@ -21,16 +24,42 @@
#include "router.h"
#include "relay.h"
#include "rephist.h"
+#include "replaycache.h"
#include "routerlist.h"
#include "routerparse.h"
+#include "routerset.h"
static origin_circuit_t *find_intro_circuit(rend_intro_point_t *intro,
const char *pk_digest);
static rend_intro_point_t *find_intro_point(origin_circuit_t *circ);
+static extend_info_t *find_rp_for_intro(
+ const rend_intro_cell_t *intro,
+ uint8_t *need_free_out, char **err_msg_out);
+
static int intro_point_accepted_intro_count(rend_intro_point_t *intro);
static int intro_point_should_expire_now(rend_intro_point_t *intro,
time_t now);
+struct rend_service_t;
+static int rend_service_load_keys(struct rend_service_t *s);
+static int rend_service_load_auth_keys(struct rend_service_t *s,
+ const char *hfname);
+
+static ssize_t rend_service_parse_intro_for_v0_or_v1(
+ rend_intro_cell_t *intro,
+ const uint8_t *buf,
+ size_t plaintext_len,
+ char **err_msg_out);
+static ssize_t rend_service_parse_intro_for_v2(
+ rend_intro_cell_t *intro,
+ const uint8_t *buf,
+ size_t plaintext_len,
+ char **err_msg_out);
+static ssize_t rend_service_parse_intro_for_v3(
+ rend_intro_cell_t *intro,
+ const uint8_t *buf,
+ size_t plaintext_len,
+ char **err_msg_out);
/** Represents the mapping from a virtual port of a rendezvous service to
* a real port on some IP.
@@ -53,14 +82,14 @@ typedef struct rend_service_port_config_t {
#define MAX_INTRO_CIRCS_PER_PERIOD 10
/** How many times will a hidden service operator attempt to connect to
* a requested rendezvous point before giving up? */
-#define MAX_REND_FAILURES 30
+#define MAX_REND_FAILURES 8
/** How many seconds should we spend trying to connect to a requested
* rendezvous point before giving up? */
#define MAX_REND_TIMEOUT 30
/** How many seconds should we wait for new HS descriptors to reach
* our clients before we close an expiring intro point? */
-#define INTRO_POINT_EXPIRATION_GRACE_PERIOD 5*60
+#define INTRO_POINT_EXPIRATION_GRACE_PERIOD (5*60)
/** Represents a single hidden service running at this OP. */
typedef struct rend_service_t {
@@ -91,16 +120,12 @@ typedef struct rend_service_t {
* up-to-date. */
time_t next_upload_time; /**< Scheduled next hidden service descriptor
* upload time. */
- /** Map from digests of Diffie-Hellman values INTRODUCE2 to time_t
- * of when they were received. Clients may send INTRODUCE1 cells
- * for the same rendezvous point through two or more different
- * introduction points; when they do, this digestmap keeps us from
- * launching multiple simultaneous attempts to connect to the same
- * rend point. */
- digestmap_t *accepted_intro_dh_parts;
- /** Time at which we last removed expired values from
- * accepted_intro_dh_parts. */
- time_t last_cleaned_accepted_intro_dh_parts;
+ /** Replay cache for Diffie-Hellman values of INTRODUCE2 cells, to
+ * detect repeats. Clients may send INTRODUCE1 cells for the same
+ * rendezvous point through two or more different introduction points;
+ * when they do, this keeps us from launching multiple simultaneous attempts
+ * to connect to the same rend point. */
+ replaycache_t *accepted_intro_dh_parts;
} rend_service_t;
/** A list of rend_service_t's for services run on this OP.
@@ -135,7 +160,9 @@ rend_authorized_client_free(rend_authorized_client_t *client)
return;
if (client->client_key)
crypto_pk_free(client->client_key);
+ tor_strclear(client->client_name);
tor_free(client->client_name);
+ memwipe(client->descriptor_cookie, 0, sizeof(client->descriptor_cookie));
tor_free(client);
}
@@ -171,7 +198,9 @@ rend_service_free(rend_service_t *service)
rend_authorized_client_free(c););
smartlist_free(service->clients);
}
- digestmap_free(service->accepted_intro_dh_parts, _tor_free);
+ if (service->accepted_intro_dh_parts) {
+ replaycache_free(service->accepted_intro_dh_parts);
+ }
tor_free(service);
}
@@ -244,8 +273,8 @@ rend_add_service(rend_service_t *service)
service->directory);
for (i = 0; i < smartlist_len(service->ports); ++i) {
p = smartlist_get(service->ports, i);
- log_debug(LD_REND,"Service maps port %d to %s:%d",
- p->virtual_port, fmt_addr(&p->real_addr), p->real_port);
+ log_debug(LD_REND,"Service maps port %d to %s",
+ p->virtual_port, fmt_addrport(&p->real_addr, p->real_port));
}
}
}
@@ -515,7 +544,7 @@ rend_config_services(const or_options_t *options, int validate_only)
/* XXXX it would be nicer if we had a nicer abstraction to use here,
* so we could just iterate over the list of services to close, but
* once again, this isn't critical-path code. */
- for (circ = _circuit_get_global_list(); circ; circ = circ->next) {
+ TOR_LIST_FOREACH(circ, circuit_get_global_list(), head) {
if (!circ->marked_for_close &&
circ->state == CIRCUIT_STATE_OPEN &&
(circ->purpose == CIRCUIT_PURPOSE_S_ESTABLISH_INTRO ||
@@ -565,6 +594,7 @@ rend_service_update_descriptor(rend_service_t *service)
d = service->desc = tor_malloc_zero(sizeof(rend_service_descriptor_t));
d->pk = crypto_pk_dup_key(service->private_key);
d->timestamp = time(NULL);
+ d->timestamp -= d->timestamp % 3600; /* Round down to nearest hour */
d->intro_nodes = smartlist_new();
/* Support intro protocols 2 and 3. */
d->protocols = (1 << 2) + (1 << 3);
@@ -582,7 +612,7 @@ rend_service_update_descriptor(rend_service_t *service)
}
circ = find_intro_circuit(intro_svc, service->pk_digest);
- if (!circ || circ->_base.purpose != CIRCUIT_PURPOSE_S_INTRO) {
+ if (!circ || circ->base_.purpose != CIRCUIT_PURPOSE_S_INTRO) {
/* This intro point's circuit isn't finished yet. Don't list it. */
continue;
}
@@ -609,231 +639,303 @@ rend_service_update_descriptor(rend_service_t *service)
/** Load and/or generate private keys for all hidden services, possibly
* including keys for client authorization. Return 0 on success, -1 on
- * failure.
- */
+ * failure. */
int
-rend_service_load_keys(void)
+rend_service_load_all_keys(void)
{
- int r = 0;
- char fname[512];
- char buf[1500];
-
SMARTLIST_FOREACH_BEGIN(rend_service_list, rend_service_t *, s) {
if (s->private_key)
continue;
log_info(LD_REND, "Loading hidden-service keys from \"%s\"",
s->directory);
- /* Check/create directory */
- if (check_private_dir(s->directory, CPD_CREATE, get_options()->User) < 0)
+ if (rend_service_load_keys(s) < 0)
return -1;
+ } SMARTLIST_FOREACH_END(s);
+
+ return 0;
+}
+
+/** Add to <b>lst</b> every filename used by <b>s</b>. */
+static void
+rend_service_add_filenames_to_list(smartlist_t *lst, const rend_service_t *s)
+{
+ tor_assert(lst);
+ tor_assert(s);
+ smartlist_add_asprintf(lst, "%s"PATH_SEPARATOR"private_key",
+ s->directory);
+ smartlist_add_asprintf(lst, "%s"PATH_SEPARATOR"hostname",
+ s->directory);
+ smartlist_add_asprintf(lst, "%s"PATH_SEPARATOR"client_keys",
+ s->directory);
+}
+
+/** Add to <b>open_lst</b> every filename used by a configured hidden service,
+ * and to <b>stat_lst</b> every directory used by a configured hidden
+ * service */
+void
+rend_services_add_filenames_to_lists(smartlist_t *open_lst,
+ smartlist_t *stat_lst)
+{
+ if (!rend_service_list)
+ return;
+ SMARTLIST_FOREACH_BEGIN(rend_service_list, rend_service_t *, s) {
+ rend_service_add_filenames_to_list(open_lst, s);
+ smartlist_add(stat_lst, tor_strdup(s->directory));
+ } SMARTLIST_FOREACH_END(s);
+}
+
+/** Load and/or generate private keys for the hidden service <b>s</b>,
+ * possibly including keys for client authorization. Return 0 on success, -1
+ * on failure. */
+static int
+rend_service_load_keys(rend_service_t *s)
+{
+ char fname[512];
+ char buf[128];
+
+ /* Check/create directory */
+ if (check_private_dir(s->directory, CPD_CREATE, get_options()->User) < 0)
+ return -1;
+
+ /* Load key */
+ if (strlcpy(fname,s->directory,sizeof(fname)) >= sizeof(fname) ||
+ strlcat(fname,PATH_SEPARATOR"private_key",sizeof(fname))
+ >= sizeof(fname)) {
+ log_warn(LD_CONFIG, "Directory name too long to store key file: \"%s\".",
+ s->directory);
+ return -1;
+ }
+ s->private_key = init_key_from_file(fname, 1, LOG_ERR);
+ if (!s->private_key)
+ return -1;
+
+ /* Create service file */
+ if (rend_get_service_id(s->private_key, s->service_id)<0) {
+ log_warn(LD_BUG, "Internal error: couldn't encode service ID.");
+ return -1;
+ }
+ if (crypto_pk_get_digest(s->private_key, s->pk_digest)<0) {
+ log_warn(LD_BUG, "Couldn't compute hash of public key.");
+ return -1;
+ }
+ if (strlcpy(fname,s->directory,sizeof(fname)) >= sizeof(fname) ||
+ strlcat(fname,PATH_SEPARATOR"hostname",sizeof(fname))
+ >= sizeof(fname)) {
+ log_warn(LD_CONFIG, "Directory name too long to store hostname file:"
+ " \"%s\".", s->directory);
+ return -1;
+ }
+
+ tor_snprintf(buf, sizeof(buf),"%s.onion\n", s->service_id);
+ if (write_str_to_file(fname,buf,0)<0) {
+ log_warn(LD_CONFIG, "Could not write onion address to hostname file.");
+ memwipe(buf, 0, sizeof(buf));
+ return -1;
+ }
+ memwipe(buf, 0, sizeof(buf));
- /* Load key */
- if (strlcpy(fname,s->directory,sizeof(fname)) >= sizeof(fname) ||
- strlcat(fname,PATH_SEPARATOR"private_key",sizeof(fname))
- >= sizeof(fname)) {
- log_warn(LD_CONFIG, "Directory name too long to store key file: \"%s\".",
- s->directory);
+ /* If client authorization is configured, load or generate keys. */
+ if (s->auth_type != REND_NO_AUTH) {
+ if (rend_service_load_auth_keys(s, fname) < 0)
return -1;
+ }
+
+ return 0;
+}
+
+/** Load and/or generate client authorization keys for the hidden service
+ * <b>s</b>, which stores its hostname in <b>hfname</b>. Return 0 on success,
+ * -1 on failure. */
+static int
+rend_service_load_auth_keys(rend_service_t *s, const char *hfname)
+{
+ int r = 0;
+ char cfname[512];
+ char *client_keys_str = NULL;
+ strmap_t *parsed_clients = strmap_new();
+ FILE *cfile, *hfile;
+ open_file_t *open_cfile = NULL, *open_hfile = NULL;
+ char extended_desc_cookie[REND_DESC_COOKIE_LEN+1];
+ char desc_cook_out[3*REND_DESC_COOKIE_LEN_BASE64+1];
+ char service_id[16+1];
+ char buf[1500];
+
+ /* Load client keys and descriptor cookies, if available. */
+ if (tor_snprintf(cfname, sizeof(cfname), "%s"PATH_SEPARATOR"client_keys",
+ s->directory)<0) {
+ log_warn(LD_CONFIG, "Directory name too long to store client keys "
+ "file: \"%s\".", s->directory);
+ goto err;
+ }
+ client_keys_str = read_file_to_str(cfname, RFTS_IGNORE_MISSING, NULL);
+ if (client_keys_str) {
+ if (rend_parse_client_keys(parsed_clients, client_keys_str) < 0) {
+ log_warn(LD_CONFIG, "Previously stored client_keys file could not "
+ "be parsed.");
+ goto err;
+ } else {
+ log_info(LD_CONFIG, "Parsed %d previously stored client entries.",
+ strmap_size(parsed_clients));
}
- s->private_key = init_key_from_file(fname, 1, LOG_ERR);
- if (!s->private_key)
- return -1;
+ }
- /* Create service file */
- if (rend_get_service_id(s->private_key, s->service_id)<0) {
- log_warn(LD_BUG, "Internal error: couldn't encode service ID.");
- return -1;
+ /* Prepare client_keys and hostname files. */
+ if (!(cfile = start_writing_to_stdio_file(cfname,
+ OPEN_FLAGS_REPLACE | O_TEXT,
+ 0600, &open_cfile))) {
+ log_warn(LD_CONFIG, "Could not open client_keys file %s",
+ escaped(cfname));
+ goto err;
+ }
+
+ if (!(hfile = start_writing_to_stdio_file(hfname,
+ OPEN_FLAGS_REPLACE | O_TEXT,
+ 0600, &open_hfile))) {
+ log_warn(LD_CONFIG, "Could not open hostname file %s", escaped(hfname));
+ goto err;
+ }
+
+ /* Either use loaded keys for configured clients or generate new
+ * ones if a client is new. */
+ SMARTLIST_FOREACH_BEGIN(s->clients, rend_authorized_client_t *, client) {
+ rend_authorized_client_t *parsed =
+ strmap_get(parsed_clients, client->client_name);
+ int written;
+ size_t len;
+ /* Copy descriptor cookie from parsed entry or create new one. */
+ if (parsed) {
+ memcpy(client->descriptor_cookie, parsed->descriptor_cookie,
+ REND_DESC_COOKIE_LEN);
+ } else {
+ crypto_rand(client->descriptor_cookie, REND_DESC_COOKIE_LEN);
}
- if (crypto_pk_get_digest(s->private_key, s->pk_digest)<0) {
- log_warn(LD_BUG, "Couldn't compute hash of public key.");
- return -1;
+ if (base64_encode(desc_cook_out, 3*REND_DESC_COOKIE_LEN_BASE64+1,
+ client->descriptor_cookie,
+ REND_DESC_COOKIE_LEN) < 0) {
+ log_warn(LD_BUG, "Could not base64-encode descriptor cookie.");
+ goto err;
}
- if (strlcpy(fname,s->directory,sizeof(fname)) >= sizeof(fname) ||
- strlcat(fname,PATH_SEPARATOR"hostname",sizeof(fname))
- >= sizeof(fname)) {
- log_warn(LD_CONFIG, "Directory name too long to store hostname file:"
- " \"%s\".", s->directory);
- return -1;
+ /* Copy client key from parsed entry or create new one if required. */
+ if (parsed && parsed->client_key) {
+ client->client_key = crypto_pk_dup_key(parsed->client_key);
+ } else if (s->auth_type == REND_STEALTH_AUTH) {
+ /* Create private key for client. */
+ crypto_pk_t *prkey = NULL;
+ if (!(prkey = crypto_pk_new())) {
+ log_warn(LD_BUG,"Error constructing client key");
+ goto err;
+ }
+ if (crypto_pk_generate_key(prkey)) {
+ log_warn(LD_BUG,"Error generating client key");
+ crypto_pk_free(prkey);
+ goto err;
+ }
+ if (crypto_pk_check_key(prkey) <= 0) {
+ log_warn(LD_BUG,"Generated client key seems invalid");
+ crypto_pk_free(prkey);
+ goto err;
+ }
+ client->client_key = prkey;
}
- tor_snprintf(buf, sizeof(buf),"%s.onion\n", s->service_id);
- if (write_str_to_file(fname,buf,0)<0) {
- log_warn(LD_CONFIG, "Could not write onion address to hostname file.");
- return -1;
+ /* Add entry to client_keys file. */
+ desc_cook_out[strlen(desc_cook_out)-1] = '\0'; /* Remove newline. */
+ written = tor_snprintf(buf, sizeof(buf),
+ "client-name %s\ndescriptor-cookie %s\n",
+ client->client_name, desc_cook_out);
+ if (written < 0) {
+ log_warn(LD_BUG, "Could not write client entry.");
+ goto err;
}
-
- /* If client authorization is configured, load or generate keys. */
- if (s->auth_type != REND_NO_AUTH) {
- char *client_keys_str = NULL;
- strmap_t *parsed_clients = strmap_new();
- char cfname[512];
- FILE *cfile, *hfile;
- open_file_t *open_cfile = NULL, *open_hfile = NULL;
-
- /* Load client keys and descriptor cookies, if available. */
- if (tor_snprintf(cfname, sizeof(cfname), "%s"PATH_SEPARATOR"client_keys",
- s->directory)<0) {
- log_warn(LD_CONFIG, "Directory name too long to store client keys "
- "file: \"%s\".", s->directory);
+ if (client->client_key) {
+ char *client_key_out = NULL;
+ if (crypto_pk_write_private_key_to_string(client->client_key,
+ &client_key_out, &len) != 0) {
+ log_warn(LD_BUG, "Internal error: "
+ "crypto_pk_write_private_key_to_string() failed.");
goto err;
}
- client_keys_str = read_file_to_str(cfname, RFTS_IGNORE_MISSING, NULL);
- if (client_keys_str) {
- if (rend_parse_client_keys(parsed_clients, client_keys_str) < 0) {
- log_warn(LD_CONFIG, "Previously stored client_keys file could not "
- "be parsed.");
- goto err;
- } else {
- log_info(LD_CONFIG, "Parsed %d previously stored client entries.",
- strmap_size(parsed_clients));
- tor_free(client_keys_str);
- }
- }
-
- /* Prepare client_keys and hostname files. */
- if (!(cfile = start_writing_to_stdio_file(cfname,
- OPEN_FLAGS_REPLACE | O_TEXT,
- 0600, &open_cfile))) {
- log_warn(LD_CONFIG, "Could not open client_keys file %s",
- escaped(cfname));
+ if (rend_get_service_id(client->client_key, service_id)<0) {
+ log_warn(LD_BUG, "Internal error: couldn't encode service ID.");
+ /*
+ * len is string length, not buffer length, but last byte is NUL
+ * anyway.
+ */
+ memwipe(client_key_out, 0, len);
+ tor_free(client_key_out);
goto err;
}
- if (!(hfile = start_writing_to_stdio_file(fname,
- OPEN_FLAGS_REPLACE | O_TEXT,
- 0600, &open_hfile))) {
- log_warn(LD_CONFIG, "Could not open hostname file %s", escaped(fname));
+ written = tor_snprintf(buf + written, sizeof(buf) - written,
+ "client-key\n%s", client_key_out);
+ memwipe(client_key_out, 0, len);
+ tor_free(client_key_out);
+ if (written < 0) {
+ log_warn(LD_BUG, "Could not write client entry.");
goto err;
}
+ }
- /* Either use loaded keys for configured clients or generate new
- * ones if a client is new. */
- SMARTLIST_FOREACH_BEGIN(s->clients, rend_authorized_client_t *, client)
- {
- char desc_cook_out[3*REND_DESC_COOKIE_LEN_BASE64+1];
- char service_id[16+1];
- rend_authorized_client_t *parsed =
- strmap_get(parsed_clients, client->client_name);
- int written;
- size_t len;
- /* Copy descriptor cookie from parsed entry or create new one. */
- if (parsed) {
- memcpy(client->descriptor_cookie, parsed->descriptor_cookie,
- REND_DESC_COOKIE_LEN);
- } else {
- crypto_rand(client->descriptor_cookie, REND_DESC_COOKIE_LEN);
- }
- if (base64_encode(desc_cook_out, 3*REND_DESC_COOKIE_LEN_BASE64+1,
- client->descriptor_cookie,
- REND_DESC_COOKIE_LEN) < 0) {
- log_warn(LD_BUG, "Could not base64-encode descriptor cookie.");
- strmap_free(parsed_clients, rend_authorized_client_strmap_item_free);
- return -1;
- }
- /* Copy client key from parsed entry or create new one if required. */
- if (parsed && parsed->client_key) {
- client->client_key = crypto_pk_dup_key(parsed->client_key);
- } else if (s->auth_type == REND_STEALTH_AUTH) {
- /* Create private key for client. */
- crypto_pk_t *prkey = NULL;
- if (!(prkey = crypto_pk_new())) {
- log_warn(LD_BUG,"Error constructing client key");
- goto err;
- }
- if (crypto_pk_generate_key(prkey)) {
- log_warn(LD_BUG,"Error generating client key");
- crypto_pk_free(prkey);
- goto err;
- }
- if (crypto_pk_check_key(prkey) <= 0) {
- log_warn(LD_BUG,"Generated client key seems invalid");
- crypto_pk_free(prkey);
- goto err;
- }
- client->client_key = prkey;
- }
- /* Add entry to client_keys file. */
- desc_cook_out[strlen(desc_cook_out)-1] = '\0'; /* Remove newline. */
- written = tor_snprintf(buf, sizeof(buf),
- "client-name %s\ndescriptor-cookie %s\n",
- client->client_name, desc_cook_out);
- if (written < 0) {
- log_warn(LD_BUG, "Could not write client entry.");
- goto err;
- }
- if (client->client_key) {
- char *client_key_out = NULL;
- crypto_pk_write_private_key_to_string(client->client_key,
- &client_key_out, &len);
- if (rend_get_service_id(client->client_key, service_id)<0) {
- log_warn(LD_BUG, "Internal error: couldn't encode service ID.");
- tor_free(client_key_out);
- goto err;
- }
- written = tor_snprintf(buf + written, sizeof(buf) - written,
- "client-key\n%s", client_key_out);
- tor_free(client_key_out);
- if (written < 0) {
- log_warn(LD_BUG, "Could not write client entry.");
- goto err;
- }
- }
-
- if (fputs(buf, cfile) < 0) {
- log_warn(LD_FS, "Could not append client entry to file: %s",
- strerror(errno));
- goto err;
- }
-
- /* Add line to hostname file. */
- if (s->auth_type == REND_BASIC_AUTH) {
- /* Remove == signs (newline has been removed above). */
- desc_cook_out[strlen(desc_cook_out)-2] = '\0';
- tor_snprintf(buf, sizeof(buf),"%s.onion %s # client: %s\n",
- s->service_id, desc_cook_out, client->client_name);
- } else {
- char extended_desc_cookie[REND_DESC_COOKIE_LEN+1];
- memcpy(extended_desc_cookie, client->descriptor_cookie,
- REND_DESC_COOKIE_LEN);
- extended_desc_cookie[REND_DESC_COOKIE_LEN] =
- ((int)s->auth_type - 1) << 4;
- if (base64_encode(desc_cook_out, 3*REND_DESC_COOKIE_LEN_BASE64+1,
- extended_desc_cookie,
- REND_DESC_COOKIE_LEN+1) < 0) {
- log_warn(LD_BUG, "Could not base64-encode descriptor cookie.");
- goto err;
- }
- desc_cook_out[strlen(desc_cook_out)-3] = '\0'; /* Remove A= and
- newline. */
- tor_snprintf(buf, sizeof(buf),"%s.onion %s # client: %s\n",
- service_id, desc_cook_out, client->client_name);
- }
+ if (fputs(buf, cfile) < 0) {
+ log_warn(LD_FS, "Could not append client entry to file: %s",
+ strerror(errno));
+ goto err;
+ }
- if (fputs(buf, hfile)<0) {
- log_warn(LD_FS, "Could not append host entry to file: %s",
- strerror(errno));
- goto err;
- }
+ /* Add line to hostname file. */
+ if (s->auth_type == REND_BASIC_AUTH) {
+ /* Remove == signs (newline has been removed above). */
+ desc_cook_out[strlen(desc_cook_out)-2] = '\0';
+ tor_snprintf(buf, sizeof(buf),"%s.onion %s # client: %s\n",
+ s->service_id, desc_cook_out, client->client_name);
+ } else {
+ memcpy(extended_desc_cookie, client->descriptor_cookie,
+ REND_DESC_COOKIE_LEN);
+ extended_desc_cookie[REND_DESC_COOKIE_LEN] =
+ ((int)s->auth_type - 1) << 4;
+ if (base64_encode(desc_cook_out, 3*REND_DESC_COOKIE_LEN_BASE64+1,
+ extended_desc_cookie,
+ REND_DESC_COOKIE_LEN+1) < 0) {
+ log_warn(LD_BUG, "Could not base64-encode descriptor cookie.");
+ goto err;
}
- SMARTLIST_FOREACH_END(client);
+ desc_cook_out[strlen(desc_cook_out)-3] = '\0'; /* Remove A= and
+ newline. */
+ tor_snprintf(buf, sizeof(buf),"%s.onion %s # client: %s\n",
+ service_id, desc_cook_out, client->client_name);
+ }
- goto done;
- err:
- r = -1;
- done:
- tor_free(client_keys_str);
- strmap_free(parsed_clients, rend_authorized_client_strmap_item_free);
- if (r<0) {
- if (open_cfile)
- abort_writing_to_file(open_cfile);
- if (open_hfile)
- abort_writing_to_file(open_hfile);
- return r;
- } else {
- finish_writing_to_file(open_cfile);
- finish_writing_to_file(open_hfile);
- }
+ if (fputs(buf, hfile)<0) {
+ log_warn(LD_FS, "Could not append host entry to file: %s",
+ strerror(errno));
+ goto err;
}
- } SMARTLIST_FOREACH_END(s);
+ } SMARTLIST_FOREACH_END(client);
+
+ finish_writing_to_file(open_cfile);
+ finish_writing_to_file(open_hfile);
+
+ goto done;
+ err:
+ r = -1;
+ if (open_cfile)
+ abort_writing_to_file(open_cfile);
+ if (open_hfile)
+ abort_writing_to_file(open_hfile);
+ done:
+ if (client_keys_str) {
+ tor_strclear(client_keys_str);
+ tor_free(client_keys_str);
+ }
+ strmap_free(parsed_clients, rend_authorized_client_strmap_item_free);
+
+ memwipe(cfname, 0, sizeof(cfname));
+
+ /* Clear stack buffers that held key-derived material. */
+ memwipe(buf, 0, sizeof(buf));
+ memwipe(desc_cook_out, 0, sizeof(desc_cook_out));
+ memwipe(service_id, 0, sizeof(service_id));
+ memwipe(extended_desc_cookie, 0, sizeof(extended_desc_cookie));
+
return r;
}
@@ -860,7 +962,7 @@ rend_service_requires_uptime(rend_service_t *service)
for (i=0; i < smartlist_len(service->ports); ++i) {
p = smartlist_get(service->ports, i);
- if (smartlist_string_num_isin(get_options()->LongLivedPorts,
+ if (smartlist_contains_int_as_string(get_options()->LongLivedPorts,
p->virtual_port))
return 1;
}
@@ -906,26 +1008,6 @@ rend_check_authorization(rend_service_t *service,
return 1;
}
-/** Remove elements from <b>service</b>'s replay cache that are old enough to
- * be noticed by timestamp checking. */
-static void
-clean_accepted_intro_dh_parts(rend_service_t *service, time_t now)
-{
- const time_t cutoff = now - REND_REPLAY_TIME_INTERVAL;
-
- service->last_cleaned_accepted_intro_dh_parts = now;
- if (!service->accepted_intro_dh_parts)
- return;
-
- DIGESTMAP_FOREACH_MODIFY(service->accepted_intro_dh_parts, digest,
- time_t *, t) {
- if (*t < cutoff) {
- tor_free(t);
- MAP_DEL_CURRENT(digest);
- }
- } DIGESTMAP_FOREACH_END;
-}
-
/** Called when <b>intro</b> will soon be removed from
* <b>service</b>'s list of intro points. */
static void
@@ -1033,42 +1115,51 @@ rend_service_note_removing_intro_point(rend_service_t *service,
/** Respond to an INTRODUCE2 cell by launching a circuit to the chosen
* rendezvous point.
*/
- /* XXXX024 this function sure could use some organizing. -RD */
int
rend_service_introduce(origin_circuit_t *circuit, const uint8_t *request,
size_t request_len)
{
- char *ptr, *r_cookie;
- extend_info_t *extend_info = NULL;
+ /* Global status stuff */
+ int status = 0, result;
+ const or_options_t *options = get_options();
+ char *err_msg = NULL;
+ const char *stage_descr = NULL;
+ int reason = END_CIRC_REASON_TORPROTOCOL;
+ /* Service/circuit/key stuff we can learn before parsing */
+ char serviceid[REND_SERVICE_ID_LEN_BASE32+1];
+ rend_service_t *service = NULL;
+ rend_intro_point_t *intro_point = NULL;
+ crypto_pk_t *intro_key = NULL;
+ /* Parsed cell */
+ rend_intro_cell_t *parsed_req = NULL;
+ /* Rendezvous point */
+ extend_info_t *rp = NULL;
+ /*
+ * We need to look up and construct the extend_info_t for v0 and v1,
+ * but all the info is in the cell and it's constructed by the parser
+ * for v2 and v3, so freeing it would be a double-free. Use this to
+ * keep track of whether we should free it.
+ */
+ uint8_t need_rp_free = 0;
+ /* XXX not handled yet */
char buf[RELAY_PAYLOAD_SIZE];
char keys[DIGEST_LEN+CPATH_KEY_MATERIAL_LEN]; /* Holds KH, Df, Db, Kf, Kb */
- rend_service_t *service;
- rend_intro_point_t *intro_point;
- int r, i, v3_shift = 0;
- size_t len, keylen;
+ int i;
crypto_dh_t *dh = NULL;
origin_circuit_t *launched = NULL;
crypt_path_t *cpath = NULL;
- char serviceid[REND_SERVICE_ID_LEN_BASE32+1];
char hexcookie[9];
int circ_needs_uptime;
- int reason = END_CIRC_REASON_TORPROTOCOL;
- crypto_pk_t *intro_key;
- char intro_key_digest[DIGEST_LEN];
- int auth_type;
- size_t auth_len = 0;
- char auth_data[REND_DESC_COOKIE_LEN];
- crypto_digest_t *digest = NULL;
time_t now = time(NULL);
- char diffie_hellman_hash[DIGEST_LEN];
- time_t *access_time;
- const or_options_t *options = get_options();
+ time_t elapsed;
+ int replay;
- if (circuit->_base.purpose != CIRCUIT_PURPOSE_S_INTRO) {
+ /* Do some initial validation and logging before we parse the cell */
+ if (circuit->base_.purpose != CIRCUIT_PURPOSE_S_INTRO) {
log_warn(LD_PROTOCOL,
- "Got an INTRODUCE2 over a non-introduction circuit %d.",
- circuit->_base.n_circ_id);
- return -1;
+ "Got an INTRODUCE2 over a non-introduction circuit %u.",
+ (unsigned) circuit->base_.n_circ_id);
+ goto err;
}
#ifndef NON_ANONYMOUS_MODE_ENABLED
@@ -1076,218 +1167,150 @@ rend_service_introduce(origin_circuit_t *circuit, const uint8_t *request,
#endif
tor_assert(circuit->rend_data);
+ /* We'll use this in a bazillion log messages */
base32_encode(serviceid, REND_SERVICE_ID_LEN_BASE32+1,
circuit->rend_data->rend_pk_digest, REND_SERVICE_ID_LEN);
- log_info(LD_REND, "Received INTRODUCE2 cell for service %s on circ %d.",
- escaped(serviceid), circuit->_base.n_circ_id);
-
- /* min key length plus digest length plus nickname length */
- if (request_len < DIGEST_LEN+REND_COOKIE_LEN+(MAX_NICKNAME_LEN+1)+
- DH_KEY_LEN+42) {
- log_warn(LD_PROTOCOL, "Got a truncated INTRODUCE2 cell on circ %d.",
- circuit->_base.n_circ_id);
- return -1;
- }
/* look up service depending on circuit. */
- service = rend_service_get_by_pk_digest(
- circuit->rend_data->rend_pk_digest);
+ service =
+ rend_service_get_by_pk_digest(circuit->rend_data->rend_pk_digest);
if (!service) {
- log_warn(LD_BUG, "Internal error: Got an INTRODUCE2 cell on an intro "
+ log_warn(LD_BUG,
+ "Internal error: Got an INTRODUCE2 cell on an intro "
"circ for an unrecognized service %s.",
escaped(serviceid));
- return -1;
- }
-
- /* use intro key instead of service key. */
- intro_key = circuit->intro_key;
-
- /* first DIGEST_LEN bytes of request is intro or service pk digest */
- crypto_pk_get_digest(intro_key, intro_key_digest);
- if (tor_memneq(intro_key_digest, request, DIGEST_LEN)) {
- base32_encode(serviceid, REND_SERVICE_ID_LEN_BASE32+1,
- (char*)request, REND_SERVICE_ID_LEN);
- log_warn(LD_REND, "Got an INTRODUCE2 cell for the wrong service (%s).",
- escaped(serviceid));
- return -1;
- }
-
- keylen = crypto_pk_keysize(intro_key);
- if (request_len < keylen+DIGEST_LEN) {
- log_warn(LD_PROTOCOL,
- "PK-encrypted portion of INTRODUCE2 cell was truncated.");
- return -1;
+ goto err;
}
intro_point = find_intro_point(circuit);
if (intro_point == NULL) {
- log_warn(LD_BUG, "Internal error: Got an INTRODUCE2 cell on an intro circ "
- "(for service %s) with no corresponding rend_intro_point_t.",
+ log_warn(LD_BUG,
+ "Internal error: Got an INTRODUCE2 cell on an "
+ "intro circ (for service %s) with no corresponding "
+ "rend_intro_point_t.",
escaped(serviceid));
- return -1;
- }
-
- if (!service->accepted_intro_dh_parts)
- service->accepted_intro_dh_parts = digestmap_new();
-
- if (!intro_point->accepted_intro_rsa_parts)
- intro_point->accepted_intro_rsa_parts = digestmap_new();
-
- {
- char pkpart_digest[DIGEST_LEN];
- /* Check for replay of PK-encrypted portion. */
- crypto_digest(pkpart_digest, (char*)request+DIGEST_LEN, keylen);
- access_time = digestmap_get(intro_point->accepted_intro_rsa_parts,
- pkpart_digest);
- if (access_time != NULL) {
- log_warn(LD_REND, "Possible replay detected! We received an "
- "INTRODUCE2 cell with same PK-encrypted part %d seconds ago. "
- "Dropping cell.", (int)(now-*access_time));
- return -1;
- }
- access_time = tor_malloc(sizeof(time_t));
- *access_time = now;
- digestmap_set(intro_point->accepted_intro_rsa_parts,
- pkpart_digest, access_time);
- }
-
- /* Next N bytes is encrypted with service key */
- note_crypto_pk_op(REND_SERVER);
- r = crypto_pk_private_hybrid_decrypt(
- intro_key,buf,sizeof(buf),
- (char*)(request+DIGEST_LEN),request_len-DIGEST_LEN,
- PK_PKCS1_OAEP_PADDING,1);
- if (r<0) {
- log_warn(LD_PROTOCOL, "Couldn't decrypt INTRODUCE2 cell.");
- return -1;
+ goto err;
}
- len = r;
- if (*buf == 3) {
- /* Version 3 INTRODUCE2 cell. */
- v3_shift = 1;
- auth_type = buf[1];
- switch (auth_type) {
- case REND_BASIC_AUTH:
- /* fall through */
- case REND_STEALTH_AUTH:
- auth_len = ntohs(get_uint16(buf+2));
- if (auth_len != REND_DESC_COOKIE_LEN) {
- log_info(LD_REND, "Wrong auth data size %d, should be %d.",
- (int)auth_len, REND_DESC_COOKIE_LEN);
- return -1;
- }
- memcpy(auth_data, buf+4, sizeof(auth_data));
- v3_shift += 2+REND_DESC_COOKIE_LEN;
- break;
- case REND_NO_AUTH:
- break;
- default:
- log_info(LD_REND, "Unknown authorization type '%d'", auth_type);
- }
- /* Skip the timestamp field. We no longer use it. */
- v3_shift += 4;
- }
- if (*buf == 2 || *buf == 3) {
- /* Version 2 INTRODUCE2 cell. */
- int klen;
- extend_info = tor_malloc_zero(sizeof(extend_info_t));
- tor_addr_from_ipv4n(&extend_info->addr, get_uint32(buf+v3_shift+1));
- extend_info->port = ntohs(get_uint16(buf+v3_shift+5));
- memcpy(extend_info->identity_digest, buf+v3_shift+7,
- DIGEST_LEN);
- extend_info->nickname[0] = '$';
- base16_encode(extend_info->nickname+1, sizeof(extend_info->nickname)-1,
- extend_info->identity_digest, DIGEST_LEN);
-
- klen = ntohs(get_uint16(buf+v3_shift+7+DIGEST_LEN));
- if ((int)len != v3_shift+7+DIGEST_LEN+2+klen+20+128) {
- log_warn(LD_PROTOCOL, "Bad length %u for version %d INTRODUCE2 cell.",
- (int)len, *buf);
- reason = END_CIRC_REASON_TORPROTOCOL;
- goto err;
- }
- extend_info->onion_key =
- crypto_pk_asn1_decode(buf+v3_shift+7+DIGEST_LEN+2, klen);
- if (!extend_info->onion_key) {
- log_warn(LD_PROTOCOL, "Error decoding onion key in version %d "
- "INTRODUCE2 cell.", *buf);
- reason = END_CIRC_REASON_TORPROTOCOL;
- goto err;
- }
- ptr = buf+v3_shift+7+DIGEST_LEN+2+klen;
- len -= v3_shift+7+DIGEST_LEN+2+klen;
- } else {
- char *rp_nickname;
- size_t nickname_field_len;
- const node_t *node;
- int version;
- if (*buf == 1) {
- rp_nickname = buf+1;
- nickname_field_len = MAX_HEX_NICKNAME_LEN+1;
- version = 1;
- } else {
- nickname_field_len = MAX_NICKNAME_LEN+1;
- rp_nickname = buf;
- version = 0;
- }
- ptr=memchr(rp_nickname,0,nickname_field_len);
- if (!ptr || ptr == rp_nickname) {
- log_warn(LD_PROTOCOL,
- "Couldn't find a nul-padded nickname in INTRODUCE2 cell.");
- return -1;
- }
- if ((version == 0 && !is_legal_nickname(rp_nickname)) ||
- (version == 1 && !is_legal_nickname_or_hexdigest(rp_nickname))) {
- log_warn(LD_PROTOCOL, "Bad nickname in INTRODUCE2 cell.");
- return -1;
- }
- /* Okay, now we know that a nickname is at the start of the buffer. */
- ptr = rp_nickname+nickname_field_len;
- len -= nickname_field_len;
- len -= rp_nickname - buf; /* also remove header space used by version, if
- * any */
- node = node_get_by_nickname(rp_nickname, 0);
- if (!node) {
- log_info(LD_REND, "Couldn't find router %s named in introduce2 cell.",
- escaped_safe_str_client(rp_nickname));
- /* XXXX Add a no-such-router reason? */
- reason = END_CIRC_REASON_TORPROTOCOL;
- goto err;
- }
+ log_info(LD_REND, "Received INTRODUCE2 cell for service %s on circ %u.",
+ escaped(serviceid), (unsigned)circuit->base_.n_circ_id);
- extend_info = extend_info_from_node(node, 0);
- }
+ /* use intro key instead of service key. */
+ intro_key = circuit->intro_key;
- if (len != REND_COOKIE_LEN+DH_KEY_LEN) {
- log_warn(LD_PROTOCOL, "Bad length %u for INTRODUCE2 cell.", (int)len);
- reason = END_CIRC_REASON_TORPROTOCOL;
+ tor_free(err_msg);
+ stage_descr = NULL;
+
+ stage_descr = "early parsing";
+ /* Early parsing pass (get pk, ciphertext); type 2 is INTRODUCE2 */
+ parsed_req =
+ rend_service_begin_parse_intro(request, request_len, 2, &err_msg);
+ if (!parsed_req) {
+ goto log_error;
+ } else if (err_msg) {
+ log_info(LD_REND, "%s on circ %u.", err_msg,
+ (unsigned)circuit->base_.n_circ_id);
+ tor_free(err_msg);
+ }
+
+ stage_descr = "early validation";
+ /* Early validation of pk/ciphertext part */
+ result = rend_service_validate_intro_early(parsed_req, &err_msg);
+ if (result < 0) {
+ goto log_error;
+ } else if (err_msg) {
+ log_info(LD_REND, "%s on circ %u.", err_msg,
+ (unsigned)circuit->base_.n_circ_id);
+ tor_free(err_msg);
+ }
+
+ /* make sure service replay caches are present */
+ if (!service->accepted_intro_dh_parts) {
+ service->accepted_intro_dh_parts =
+ replaycache_new(REND_REPLAY_TIME_INTERVAL,
+ REND_REPLAY_TIME_INTERVAL);
+ }
+
+ if (!intro_point->accepted_intro_rsa_parts) {
+ intro_point->accepted_intro_rsa_parts = replaycache_new(0, 0);
+ }
+
+ /* check for replay of PK-encrypted portion. */
+ replay = replaycache_add_test_and_elapsed(
+ intro_point->accepted_intro_rsa_parts,
+ parsed_req->ciphertext, parsed_req->ciphertext_len,
+ &elapsed);
+
+ if (replay) {
+ log_warn(LD_REND,
+ "Possible replay detected! We received an "
+ "INTRODUCE2 cell with same PK-encrypted part %d "
+ "seconds ago. Dropping cell.",
+ (int)elapsed);
goto err;
}
+ stage_descr = "decryption";
+ /* Now try to decrypt it */
+ result = rend_service_decrypt_intro(parsed_req, intro_key, &err_msg);
+ if (result < 0) {
+ goto log_error;
+ } else if (err_msg) {
+ log_info(LD_REND, "%s on circ %u.", err_msg,
+ (unsigned)circuit->base_.n_circ_id);
+ tor_free(err_msg);
+ }
+
+ stage_descr = "late parsing";
+ /* Parse the plaintext */
+ result = rend_service_parse_intro_plaintext(parsed_req, &err_msg);
+ if (result < 0) {
+ goto log_error;
+ } else if (err_msg) {
+ log_info(LD_REND, "%s on circ %u.", err_msg,
+ (unsigned)circuit->base_.n_circ_id);
+ tor_free(err_msg);
+ }
+
+ stage_descr = "late validation";
+ /* Validate the parsed plaintext parts */
+ result = rend_service_validate_intro_late(parsed_req, &err_msg);
+ if (result < 0) {
+ goto log_error;
+ } else if (err_msg) {
+ log_info(LD_REND, "%s on circ %u.", err_msg,
+ (unsigned)circuit->base_.n_circ_id);
+ tor_free(err_msg);
+ }
+ stage_descr = NULL;
+
+ /* Increment INTRODUCE2 counter */
+ ++(intro_point->accepted_introduce2_count);
+
+ /* Find the rendezvous point */
+ rp = find_rp_for_intro(parsed_req, &need_rp_free, &err_msg);
+ if (!rp)
+ goto log_error;
+
/* Check if we'd refuse to talk to this router */
if (options->StrictNodes &&
- routerset_contains_extendinfo(options->ExcludeNodes, extend_info)) {
+ routerset_contains_extendinfo(options->ExcludeNodes, rp)) {
log_warn(LD_REND, "Client asked to rendezvous at a relay that we "
"exclude, and StrictNodes is set. Refusing service.");
reason = END_CIRC_REASON_INTERNAL; /* XXX might leak why we refused */
goto err;
}
- r_cookie = ptr;
- base16_encode(hexcookie,9,r_cookie,4);
-
- /* Determine hash of Diffie-Hellman, part 1 to detect replays. */
- digest = crypto_digest_new();
- crypto_digest_add_bytes(digest, ptr+REND_COOKIE_LEN, DH_KEY_LEN);
- crypto_digest_get_digest(digest, diffie_hellman_hash, DIGEST_LEN);
- crypto_digest_free(digest);
+ base16_encode(hexcookie, 9, (const char *)(parsed_req->rc), 4);
/* Check whether there is a past request with the same Diffie-Hellman,
* part 1. */
- access_time = digestmap_get(service->accepted_intro_dh_parts,
- diffie_hellman_hash);
- if (access_time != NULL) {
+ replay = replaycache_add_test_and_elapsed(
+ service->accepted_intro_dh_parts,
+ parsed_req->dh, DH_KEY_LEN,
+ &elapsed);
+
+ if (replay) {
/* A Tor client will send a new INTRODUCE1 cell with the same rend
* cookie and DH public key as its previous one if its intro circ
* times out while in state CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT .
@@ -1299,25 +1322,15 @@ rend_service_introduce(origin_circuit_t *circuit, const uint8_t *request,
"INTRODUCE2 cell with same first part of "
"Diffie-Hellman handshake %d seconds ago. Dropping "
"cell.",
- (int) (now - *access_time));
+ (int) elapsed);
goto err;
}
- /* Add request to access history, including time and hash of Diffie-Hellman,
- * part 1, and possibly remove requests from the history that are older than
- * one hour. */
- access_time = tor_malloc(sizeof(time_t));
- *access_time = now;
- digestmap_set(service->accepted_intro_dh_parts,
- diffie_hellman_hash, access_time);
- if (service->last_cleaned_accepted_intro_dh_parts + REND_REPLAY_TIME_INTERVAL
- < now)
- clean_accepted_intro_dh_parts(service, now);
-
/* If the service performs client authorization, check included auth data. */
if (service->clients) {
- if (auth_len > 0) {
- if (rend_check_authorization(service, auth_data)) {
+ if (parsed_req->version == 3 && parsed_req->u.v3.auth_len > 0) {
+ if (rend_check_authorization(service,
+ (const char*)parsed_req->u.v3.auth_data)) {
log_info(LD_REND, "Authorization data in INTRODUCE2 cell are valid.");
} else {
log_info(LD_REND, "The authorization data that are contained in "
@@ -1341,7 +1354,8 @@ rend_service_introduce(origin_circuit_t *circuit, const uint8_t *request,
reason = END_CIRC_REASON_INTERNAL;
goto err;
}
- if (crypto_dh_compute_secret(LOG_PROTOCOL_WARN, dh, ptr+REND_COOKIE_LEN,
+ if (crypto_dh_compute_secret(LOG_PROTOCOL_WARN, dh,
+ (char *)(parsed_req->dh),
DH_KEY_LEN, keys,
DIGEST_LEN+CPATH_KEY_MATERIAL_LEN)<0) {
log_warn(LD_BUG, "Internal error: couldn't complete DH handshake");
@@ -1360,7 +1374,7 @@ rend_service_introduce(origin_circuit_t *circuit, const uint8_t *request,
int flags = CIRCLAUNCH_NEED_CAPACITY | CIRCLAUNCH_IS_INTERNAL;
if (circ_needs_uptime) flags |= CIRCLAUNCH_NEED_UPTIME;
launched = circuit_launch_by_extend_info(
- CIRCUIT_PURPOSE_S_CONNECT_REND, extend_info, flags);
+ CIRCUIT_PURPOSE_S_CONNECT_REND, rp, flags);
if (launched)
break;
@@ -1368,7 +1382,7 @@ rend_service_introduce(origin_circuit_t *circuit, const uint8_t *request,
if (!launched) { /* give up */
log_warn(LD_REND, "Giving up launching first hop of circuit to rendezvous "
"point %s for service %s.",
- safe_str_client(extend_info_describe(extend_info)),
+ safe_str_client(extend_info_describe(rp)),
serviceid);
reason = END_CIRC_REASON_CONNECTFAILED;
goto err;
@@ -1376,7 +1390,7 @@ rend_service_introduce(origin_circuit_t *circuit, const uint8_t *request,
log_info(LD_REND,
"Accepted intro; launching circuit to %s "
"(cookie %s) for service %s.",
- safe_str_client(extend_info_describe(extend_info)),
+ safe_str_client(extend_info_describe(rp)),
hexcookie, serviceid);
tor_assert(launched->build_state);
/* Fill in the circuit's state. */
@@ -1384,7 +1398,7 @@ rend_service_introduce(origin_circuit_t *circuit, const uint8_t *request,
memcpy(launched->rend_data->rend_pk_digest,
circuit->rend_data->rend_pk_digest,
DIGEST_LEN);
- memcpy(launched->rend_data->rend_cookie, r_cookie, REND_COOKIE_LEN);
+ memcpy(launched->rend_data->rend_cookie, parsed_req->rc, REND_COOKIE_LEN);
strlcpy(launched->rend_data->onion_address, service->service_id,
sizeof(launched->rend_data->onion_address));
@@ -1397,24 +1411,854 @@ rend_service_introduce(origin_circuit_t *circuit, const uint8_t *request,
cpath->magic = CRYPT_PATH_MAGIC;
launched->build_state->expiry_time = now + MAX_REND_TIMEOUT;
- cpath->dh_handshake_state = dh;
+ cpath->rend_dh_handshake_state = dh;
dh = NULL;
if (circuit_init_cpath_crypto(cpath,keys+DIGEST_LEN,1)<0)
goto err;
- memcpy(cpath->handshake_digest, keys, DIGEST_LEN);
- if (extend_info) extend_info_free(extend_info);
+ memcpy(cpath->rend_circ_nonce, keys, DIGEST_LEN);
- memwipe(keys, 0, sizeof(keys));
- return 0;
+ goto done;
+
+ log_error:
+ if (!err_msg) {
+ if (stage_descr) {
+ tor_asprintf(&err_msg,
+ "unknown %s error for INTRODUCE2", stage_descr);
+ } else {
+ err_msg = tor_strdup("unknown error for INTRODUCE2");
+ }
+ }
+
+ log_warn(LD_REND, "%s on circ %u", err_msg,
+ (unsigned)circuit->base_.n_circ_id);
err:
- memwipe(keys, 0, sizeof(keys));
+ status = -1;
if (dh) crypto_dh_free(dh);
- if (launched)
+ if (launched) {
circuit_mark_for_close(TO_CIRCUIT(launched), reason);
- if (extend_info) extend_info_free(extend_info);
+ }
+ tor_free(err_msg);
+
+ done:
+ memwipe(keys, 0, sizeof(keys));
+ memwipe(buf, 0, sizeof(buf));
+ memwipe(serviceid, 0, sizeof(serviceid));
+ memwipe(hexcookie, 0, sizeof(hexcookie));
+
+ /* Free the parsed cell */
+ if (parsed_req) {
+ rend_service_free_intro(parsed_req);
+ parsed_req = NULL;
+ }
+
+ /* Free rp if we must */
+ if (need_rp_free) extend_info_free(rp);
+
+ return status;
+}
+
+/** Given a parsed and decrypted INTRODUCE2, find the rendezvous point or
+ * return NULL and an error string if we can't.
+ */
+
+static extend_info_t *
+find_rp_for_intro(const rend_intro_cell_t *intro,
+ uint8_t *need_free_out, char **err_msg_out)
+{
+ extend_info_t *rp = NULL;
+ char *err_msg = NULL;
+ const char *rp_nickname = NULL;
+ const node_t *node = NULL;
+ uint8_t need_free = 0;
+
+ if (!intro || !need_free_out) {
+ if (err_msg_out)
+ err_msg = tor_strdup("Bad parameters to find_rp_for_intro()");
+
+ goto err;
+ }
+
+ if (intro->version == 0 || intro->version == 1) {
+ if (intro->version == 1) rp_nickname = (const char *)(intro->u.v1.rp);
+ else rp_nickname = (const char *)(intro->u.v0.rp);
+
+ node = node_get_by_nickname(rp_nickname, 0);
+ if (!node) {
+ if (err_msg_out) {
+ tor_asprintf(&err_msg,
+ "Couldn't find router %s named in INTRODUCE2 cell",
+ escaped_safe_str_client(rp_nickname));
+ }
+
+ goto err;
+ }
+
+ rp = extend_info_from_node(node, 0);
+ if (!rp) {
+ if (err_msg_out) {
+ tor_asprintf(&err_msg,
+ "Could build extend_info_t for router %s named "
+ "in INTRODUCE2 cell",
+ escaped_safe_str_client(rp_nickname));
+ }
+
+ goto err;
+ } else {
+ need_free = 1;
+ }
+ } else if (intro->version == 2) {
+ rp = intro->u.v2.extend_info;
+ } else if (intro->version == 3) {
+ rp = intro->u.v3.extend_info;
+ } else {
+ if (err_msg_out) {
+ tor_asprintf(&err_msg,
+ "Unknown version %d in INTRODUCE2 cell",
+ (int)(intro->version));
+ }
+
+ goto err;
+ }
+
+ goto done;
+
+ err:
+ if (err_msg_out) *err_msg_out = err_msg;
+ else tor_free(err_msg);
+
+ done:
+ if (rp && need_free_out) *need_free_out = need_free;
+
+ return rp;
+}
+
+/** Free a parsed INTRODUCE1 or INTRODUCE2 cell that was allocated by
+ * rend_service_parse_intro().
+ */
+void
+rend_service_free_intro(rend_intro_cell_t *request)
+{
+ if (!request) {
+ log_info(LD_BUG, "rend_service_free_intro() called with NULL request!");
+ return;
+ }
+
+ /* Free ciphertext */
+ tor_free(request->ciphertext);
+ request->ciphertext_len = 0;
+
+ /* Have plaintext? */
+ if (request->plaintext) {
+ /* Zero it out just to be safe */
+ memwipe(request->plaintext, 0, request->plaintext_len);
+ tor_free(request->plaintext);
+ request->plaintext_len = 0;
+ }
+
+ /* Have parsed plaintext? */
+ if (request->parsed) {
+ switch (request->version) {
+ case 0:
+ case 1:
+ /*
+ * Nothing more to do; these formats have no further pointers
+ * in them.
+ */
+ break;
+ case 2:
+ extend_info_free(request->u.v2.extend_info);
+ request->u.v2.extend_info = NULL;
+ break;
+ case 3:
+ if (request->u.v3.auth_data) {
+ memwipe(request->u.v3.auth_data, 0, request->u.v3.auth_len);
+ tor_free(request->u.v3.auth_data);
+ }
+
+ extend_info_free(request->u.v3.extend_info);
+ request->u.v3.extend_info = NULL;
+ break;
+ default:
+ log_info(LD_BUG,
+ "rend_service_free_intro() saw unknown protocol "
+ "version %d.",
+ request->version);
+ }
+ }
+
+ /* Zero it out to make sure sensitive stuff doesn't hang around in memory */
+ memwipe(request, 0, sizeof(*request));
+
+ tor_free(request);
+}
+
+/** Parse an INTRODUCE1 or INTRODUCE2 cell into a newly allocated
+ * rend_intro_cell_t structure. Free it with rend_service_free_intro()
+ * when finished. The type parameter should be 1 or 2 to indicate whether
+ * this is INTRODUCE1 or INTRODUCE2. This parses only the non-encrypted
+ * parts; after this, call rend_service_decrypt_intro() with a key, then
+ * rend_service_parse_intro_plaintext() to finish parsing. The optional
+ * err_msg_out parameter is set to a string suitable for log output
+ * if parsing fails. This function does some validation, but only
+ * that which depends solely on the contents of the cell and the
+ * key; it can be unit-tested. Further validation is done in
+ * rend_service_validate_intro().
+ */
+
+rend_intro_cell_t *
+rend_service_begin_parse_intro(const uint8_t *request,
+ size_t request_len,
+ uint8_t type,
+ char **err_msg_out)
+{
+ rend_intro_cell_t *rv = NULL;
+ char *err_msg = NULL;
+
+ if (!request || request_len <= 0) goto err;
+ if (!(type == 1 || type == 2)) goto err;
+
+ /* First, check that the cell is long enough to be a sensible INTRODUCE */
+
+ /* min key length plus digest length plus nickname length */
+ if (request_len <
+ (DIGEST_LEN + REND_COOKIE_LEN + (MAX_NICKNAME_LEN + 1) +
+ DH_KEY_LEN + 42)) {
+ if (err_msg_out) {
+ tor_asprintf(&err_msg,
+ "got a truncated INTRODUCE%d cell",
+ (int)type);
+ }
+ goto err;
+ }
+
+ /* Allocate a new parsed cell structure */
+ rv = tor_malloc_zero(sizeof(*rv));
+
+ /* Set the type */
+ rv->type = type;
+
+ /* Copy in the ID */
+ memcpy(rv->pk, request, DIGEST_LEN);
+
+ /* Copy in the ciphertext */
+ rv->ciphertext = tor_malloc(request_len - DIGEST_LEN);
+ memcpy(rv->ciphertext, request + DIGEST_LEN, request_len - DIGEST_LEN);
+ rv->ciphertext_len = request_len - DIGEST_LEN;
+
+ goto done;
+
+ err:
+ if (rv) rend_service_free_intro(rv);
+ rv = NULL;
+ if (err_msg_out && !err_msg) {
+ tor_asprintf(&err_msg,
+ "unknown INTRODUCE%d error",
+ (int)type);
+ }
+
+ done:
+ if (err_msg_out) *err_msg_out = err_msg;
+ else tor_free(err_msg);
+
+ return rv;
+}
+
+/** Parse the version-specific parts of a v0 or v1 INTRODUCE1 or INTRODUCE2
+ * cell
+ */
+
+static ssize_t
+rend_service_parse_intro_for_v0_or_v1(
+ rend_intro_cell_t *intro,
+ const uint8_t *buf,
+ size_t plaintext_len,
+ char **err_msg_out)
+{
+ const char *rp_nickname, *endptr;
+ size_t nickname_field_len, ver_specific_len;
+
+ if (intro->version == 1) {
+ ver_specific_len = MAX_HEX_NICKNAME_LEN + 2;
+ rp_nickname = ((const char *)buf) + 1;
+ nickname_field_len = MAX_HEX_NICKNAME_LEN + 1;
+ } else if (intro->version == 0) {
+ ver_specific_len = MAX_NICKNAME_LEN + 1;
+ rp_nickname = (const char *)buf;
+ nickname_field_len = MAX_NICKNAME_LEN + 1;
+ } else {
+ if (err_msg_out)
+ tor_asprintf(err_msg_out,
+ "rend_service_parse_intro_for_v0_or_v1() called with "
+ "bad version %d on INTRODUCE%d cell (this is a bug)",
+ intro->version,
+ (int)(intro->type));
+ goto err;
+ }
+
+ if (plaintext_len < ver_specific_len) {
+ if (err_msg_out)
+ tor_asprintf(err_msg_out,
+ "short plaintext of encrypted part in v1 INTRODUCE%d "
+ "cell (%lu bytes, needed %lu)",
+ (int)(intro->type),
+ (unsigned long)plaintext_len,
+ (unsigned long)ver_specific_len);
+ goto err;
+ }
+
+ endptr = memchr(rp_nickname, 0, nickname_field_len);
+ if (!endptr || endptr == rp_nickname) {
+ if (err_msg_out) {
+ tor_asprintf(err_msg_out,
+ "couldn't find a nul-padded nickname in "
+ "INTRODUCE%d cell",
+ (int)(intro->type));
+ }
+ goto err;
+ }
+
+ if ((intro->version == 0 &&
+ !is_legal_nickname(rp_nickname)) ||
+ (intro->version == 1 &&
+ !is_legal_nickname_or_hexdigest(rp_nickname))) {
+ if (err_msg_out) {
+ tor_asprintf(err_msg_out,
+ "bad nickname in INTRODUCE%d cell",
+ (int)(intro->type));
+ }
+ goto err;
+ }
+
+ if (intro->version == 1) {
+ memcpy(intro->u.v1.rp, rp_nickname, endptr - rp_nickname + 1);
+ } else {
+ memcpy(intro->u.v0.rp, rp_nickname, endptr - rp_nickname + 1);
+ }
+
+ return ver_specific_len;
+
+ err:
+ return -1;
+}
+
+/** Parse the version-specific parts of a v2 INTRODUCE1 or INTRODUCE2 cell
+ */
+
+static ssize_t
+rend_service_parse_intro_for_v2(
+ rend_intro_cell_t *intro,
+ const uint8_t *buf,
+ size_t plaintext_len,
+ char **err_msg_out)
+{
+ unsigned int klen;
+ extend_info_t *extend_info = NULL;
+ ssize_t ver_specific_len;
+
+ /*
+ * We accept version 3 too so that the v3 parser can call this with
+ * and adjusted buffer for the latter part of a v3 cell, which is
+ * identical to a v2 cell.
+ */
+ if (!(intro->version == 2 ||
+ intro->version == 3)) {
+ if (err_msg_out)
+ tor_asprintf(err_msg_out,
+ "rend_service_parse_intro_for_v2() called with "
+ "bad version %d on INTRODUCE%d cell (this is a bug)",
+ intro->version,
+ (int)(intro->type));
+ goto err;
+ }
+
+ /* 7 == version, IP and port, DIGEST_LEN == id, 2 == key length */
+ if (plaintext_len < 7 + DIGEST_LEN + 2) {
+ if (err_msg_out) {
+ tor_asprintf(err_msg_out,
+ "truncated plaintext of encrypted parted of "
+ "version %d INTRODUCE%d cell",
+ intro->version,
+ (int)(intro->type));
+ }
+
+ goto err;
+ }
+
+ extend_info = tor_malloc_zero(sizeof(extend_info_t));
+ tor_addr_from_ipv4n(&extend_info->addr, get_uint32(buf + 1));
+ extend_info->port = ntohs(get_uint16(buf + 5));
+ memcpy(extend_info->identity_digest, buf + 7, DIGEST_LEN);
+ extend_info->nickname[0] = '$';
+ base16_encode(extend_info->nickname + 1, sizeof(extend_info->nickname) - 1,
+ extend_info->identity_digest, DIGEST_LEN);
+ klen = ntohs(get_uint16(buf + 7 + DIGEST_LEN));
+
+ /* 7 == version, IP and port, DIGEST_LEN == id, 2 == key length */
+ if (plaintext_len < 7 + DIGEST_LEN + 2 + klen) {
+ if (err_msg_out) {
+ tor_asprintf(err_msg_out,
+ "truncated plaintext of encrypted parted of "
+ "version %d INTRODUCE%d cell",
+ intro->version,
+ (int)(intro->type));
+ }
+
+ goto err;
+ }
+
+ extend_info->onion_key =
+ crypto_pk_asn1_decode((const char *)(buf + 7 + DIGEST_LEN + 2), klen);
+ if (!extend_info->onion_key) {
+ if (err_msg_out) {
+ tor_asprintf(err_msg_out,
+ "error decoding onion key in version %d "
+ "INTRODUCE%d cell",
+ intro->version,
+ (intro->type));
+ }
+
+ goto err;
+ }
+
+ ver_specific_len = 7+DIGEST_LEN+2+klen;
+
+ if (intro->version == 2) intro->u.v2.extend_info = extend_info;
+ else intro->u.v3.extend_info = extend_info;
+
+ return ver_specific_len;
+
+ err:
+ extend_info_free(extend_info);
+
return -1;
}
+/** Parse the version-specific parts of a v3 INTRODUCE1 or INTRODUCE2 cell
+ */
+
+static ssize_t
+rend_service_parse_intro_for_v3(
+ rend_intro_cell_t *intro,
+ const uint8_t *buf,
+ size_t plaintext_len,
+ char **err_msg_out)
+{
+ ssize_t adjust, v2_ver_specific_len, ts_offset;
+
+ /* This should only be called on v3 cells */
+ if (intro->version != 3) {
+ if (err_msg_out)
+ tor_asprintf(err_msg_out,
+ "rend_service_parse_intro_for_v3() called with "
+ "bad version %d on INTRODUCE%d cell (this is a bug)",
+ intro->version,
+ (int)(intro->type));
+ goto err;
+ }
+
+ /*
+ * Check that we have at least enough to get auth_len:
+ *
+ * 1 octet for version, 1 for auth_type, 2 for auth_len
+ */
+ if (plaintext_len < 4) {
+ if (err_msg_out) {
+ tor_asprintf(err_msg_out,
+ "truncated plaintext of encrypted parted of "
+ "version %d INTRODUCE%d cell",
+ intro->version,
+ (int)(intro->type));
+ }
+
+ goto err;
+ }
+
+ /*
+ * The rend_client_send_introduction() function over in rendclient.c is
+ * broken (i.e., fails to match the spec) in such a way that we can't
+ * change it without breaking the protocol. Specifically, it doesn't
+ * emit auth_len when auth-type is REND_NO_AUTH, so everything is off
+ * by two bytes after that. Calculate ts_offset and do everything from
+ * the timestamp on relative to that to handle this dain bramage.
+ */
+
+ intro->u.v3.auth_type = buf[1];
+ if (intro->u.v3.auth_type != REND_NO_AUTH) {
+ intro->u.v3.auth_len = ntohs(get_uint16(buf + 2));
+ ts_offset = 4 + intro->u.v3.auth_len;
+ } else {
+ intro->u.v3.auth_len = 0;
+ ts_offset = 2;
+ }
+
+ /* Check that auth len makes sense for this auth type */
+ if (intro->u.v3.auth_type == REND_BASIC_AUTH ||
+ intro->u.v3.auth_type == REND_STEALTH_AUTH) {
+ if (intro->u.v3.auth_len != REND_DESC_COOKIE_LEN) {
+ if (err_msg_out) {
+ tor_asprintf(err_msg_out,
+ "wrong auth data size %d for INTRODUCE%d cell, "
+ "should be %d",
+ (int)(intro->u.v3.auth_len),
+ (int)(intro->type),
+ REND_DESC_COOKIE_LEN);
+ }
+
+ goto err;
+ }
+ }
+
+ /* Check that we actually have everything up through the timestamp */
+ if (plaintext_len < (size_t)(ts_offset)+4) {
+ if (err_msg_out) {
+ tor_asprintf(err_msg_out,
+ "truncated plaintext of encrypted parted of "
+ "version %d INTRODUCE%d cell",
+ intro->version,
+ (int)(intro->type));
+ }
+
+ goto err;
+ }
+
+ if (intro->u.v3.auth_type != REND_NO_AUTH &&
+ intro->u.v3.auth_len > 0) {
+ /* Okay, we can go ahead and copy auth_data */
+ intro->u.v3.auth_data = tor_malloc(intro->u.v3.auth_len);
+ /*
+ * We know we had an auth_len field in this case, so 4 is
+ * always right.
+ */
+ memcpy(intro->u.v3.auth_data, buf + 4, intro->u.v3.auth_len);
+ }
+
+ /*
+ * From here on, the format is as in v2, so we call the v2 parser with
+ * adjusted buffer and length. We are 4 + ts_offset octets in, but the
+ * v2 parser expects to skip over a version byte at the start, so we
+ * adjust by 3 + ts_offset.
+ */
+ adjust = 3 + ts_offset;
+
+ v2_ver_specific_len =
+ rend_service_parse_intro_for_v2(intro,
+ buf + adjust, plaintext_len - adjust,
+ err_msg_out);
+
+ /* Success in v2 parser */
+ if (v2_ver_specific_len >= 0) return v2_ver_specific_len + adjust;
+ /* Failure in v2 parser; it will have provided an err_msg */
+ else return v2_ver_specific_len;
+
+ err:
+ return -1;
+}
+
+/** Table of parser functions for version-specific parts of an INTRODUCE2
+ * cell.
+ */
+
+static ssize_t
+ (*intro_version_handlers[])(
+ rend_intro_cell_t *,
+ const uint8_t *,
+ size_t,
+ char **) =
+{ rend_service_parse_intro_for_v0_or_v1,
+ rend_service_parse_intro_for_v0_or_v1,
+ rend_service_parse_intro_for_v2,
+ rend_service_parse_intro_for_v3 };
+
+/** Decrypt the encrypted part of an INTRODUCE1 or INTRODUCE2 cell,
+ * return 0 if successful, or < 0 and write an error message to
+ * *err_msg_out if provided.
+ */
+
+int
+rend_service_decrypt_intro(
+ rend_intro_cell_t *intro,
+ crypto_pk_t *key,
+ char **err_msg_out)
+{
+ char *err_msg = NULL;
+ uint8_t key_digest[DIGEST_LEN];
+ char service_id[REND_SERVICE_ID_LEN_BASE32+1];
+ ssize_t key_len;
+ uint8_t buf[RELAY_PAYLOAD_SIZE];
+ int result, status = 0;
+
+ if (!intro || !key) {
+ if (err_msg_out) {
+ err_msg =
+ tor_strdup("rend_service_decrypt_intro() called with bad "
+ "parameters");
+ }
+
+ status = -2;
+ goto err;
+ }
+
+ /* Make sure we have ciphertext */
+ if (!(intro->ciphertext) || intro->ciphertext_len <= 0) {
+ if (err_msg_out) {
+ tor_asprintf(&err_msg,
+ "rend_intro_cell_t was missing ciphertext for "
+ "INTRODUCE%d cell",
+ (int)(intro->type));
+ }
+ status = -3;
+ goto err;
+ }
+
+ /* Check that this cell actually matches this service key */
+
+ /* first DIGEST_LEN bytes of request is intro or service pk digest */
+ crypto_pk_get_digest(key, (char *)key_digest);
+ if (tor_memneq(key_digest, intro->pk, DIGEST_LEN)) {
+ if (err_msg_out) {
+ base32_encode(service_id, REND_SERVICE_ID_LEN_BASE32 + 1,
+ (char*)(intro->pk), REND_SERVICE_ID_LEN);
+ tor_asprintf(&err_msg,
+ "got an INTRODUCE%d cell for the wrong service (%s)",
+ (int)(intro->type),
+ escaped(service_id));
+ }
+
+ status = -4;
+ goto err;
+ }
+
+ /* Make sure the encrypted part is long enough to decrypt */
+
+ key_len = crypto_pk_keysize(key);
+ if (intro->ciphertext_len < key_len) {
+ if (err_msg_out) {
+ tor_asprintf(&err_msg,
+ "got an INTRODUCE%d cell with a truncated PK-encrypted "
+ "part",
+ (int)(intro->type));
+ }
+
+ status = -5;
+ goto err;
+ }
+
+ /* Decrypt the encrypted part */
+
+ note_crypto_pk_op(REND_SERVER);
+ result =
+ crypto_pk_private_hybrid_decrypt(
+ key, (char *)buf, sizeof(buf),
+ (const char *)(intro->ciphertext), intro->ciphertext_len,
+ PK_PKCS1_OAEP_PADDING, 1);
+ if (result < 0) {
+ if (err_msg_out) {
+ tor_asprintf(&err_msg,
+ "couldn't decrypt INTRODUCE%d cell",
+ (int)(intro->type));
+ }
+ status = -6;
+ goto err;
+ }
+ intro->plaintext_len = result;
+ intro->plaintext = tor_malloc(intro->plaintext_len);
+ memcpy(intro->plaintext, buf, intro->plaintext_len);
+
+ goto done;
+
+ err:
+ if (err_msg_out && !err_msg) {
+ tor_asprintf(&err_msg,
+ "unknown INTRODUCE%d error decrypting encrypted part",
+ intro ? (int)(intro->type) : -1);
+ }
+ if (status >= 0) status = -1;
+
+ done:
+ if (err_msg_out) *err_msg_out = err_msg;
+ else tor_free(err_msg);
+
+ /* clean up potentially sensitive material */
+ memwipe(buf, 0, sizeof(buf));
+ memwipe(key_digest, 0, sizeof(key_digest));
+ memwipe(service_id, 0, sizeof(service_id));
+
+ return status;
+}
+
+/** Parse the plaintext of the encrypted part of an INTRODUCE1 or
+ * INTRODUCE2 cell, return 0 if successful, or < 0 and write an error
+ * message to *err_msg_out if provided.
+ */
+
+int
+rend_service_parse_intro_plaintext(
+ rend_intro_cell_t *intro,
+ char **err_msg_out)
+{
+ char *err_msg = NULL;
+ ssize_t ver_specific_len, ver_invariant_len;
+ uint8_t version;
+ int status = 0;
+
+ if (!intro) {
+ if (err_msg_out) {
+ err_msg =
+ tor_strdup("rend_service_parse_intro_plaintext() called with NULL "
+ "rend_intro_cell_t");
+ }
+
+ status = -2;
+ goto err;
+ }
+
+ /* Check that we have plaintext */
+ if (!(intro->plaintext) || intro->plaintext_len <= 0) {
+ if (err_msg_out) {
+ err_msg = tor_strdup("rend_intro_cell_t was missing plaintext");
+ }
+ status = -3;
+ goto err;
+ }
+
+ /* In all formats except v0, the first byte is a version number */
+ version = intro->plaintext[0];
+
+ /* v0 has no version byte (stupid...), so handle it as a fallback */
+ if (version > 3) version = 0;
+
+ /* Copy the version into the parsed cell structure */
+ intro->version = version;
+
+ /* Call the version-specific parser from the table */
+ ver_specific_len =
+ intro_version_handlers[version](intro,
+ intro->plaintext, intro->plaintext_len,
+ &err_msg);
+ if (ver_specific_len < 0) {
+ status = -4;
+ goto err;
+ }
+
+ /** The rendezvous cookie and Diffie-Hellman stuff are version-invariant
+ * and at the end of the plaintext of the encrypted part of the cell.
+ */
+
+ ver_invariant_len = intro->plaintext_len - ver_specific_len;
+ if (ver_invariant_len < REND_COOKIE_LEN + DH_KEY_LEN) {
+ tor_asprintf(&err_msg,
+ "decrypted plaintext of INTRODUCE%d cell was truncated (%ld bytes)",
+ (int)(intro->type),
+ (long)(intro->plaintext_len));
+ status = -5;
+ goto err;
+ } else if (ver_invariant_len > REND_COOKIE_LEN + DH_KEY_LEN) {
+ tor_asprintf(&err_msg,
+ "decrypted plaintext of INTRODUCE%d cell was too long (%ld bytes)",
+ (int)(intro->type),
+ (long)(intro->plaintext_len));
+ status = -6;
+ } else {
+ memcpy(intro->rc,
+ intro->plaintext + ver_specific_len,
+ REND_COOKIE_LEN);
+ memcpy(intro->dh,
+ intro->plaintext + ver_specific_len + REND_COOKIE_LEN,
+ DH_KEY_LEN);
+ }
+
+ /* Flag it as being fully parsed */
+ intro->parsed = 1;
+
+ goto done;
+
+ err:
+ if (err_msg_out && !err_msg) {
+ tor_asprintf(&err_msg,
+ "unknown INTRODUCE%d error parsing encrypted part",
+ intro ? (int)(intro->type) : -1);
+ }
+ if (status >= 0) status = -1;
+
+ done:
+ if (err_msg_out) *err_msg_out = err_msg;
+ else tor_free(err_msg);
+
+ return status;
+}
+
+/** Do validity checks on a parsed intro cell before decryption; some of
+ * these are not done in rend_service_begin_parse_intro() itself because
+ * they depend on a lot of other state and would make it hard to unit test.
+ * Returns >= 0 if successful or < 0 if the intro cell is invalid, and
+ * optionally writes out an error message for logging. If an err_msg
+ * pointer is provided, it is the caller's responsibility to free any
+ * provided message.
+ */
+
+int
+rend_service_validate_intro_early(const rend_intro_cell_t *intro,
+ char **err_msg_out)
+{
+ int status = 0;
+
+ if (!intro) {
+ if (err_msg_out)
+ *err_msg_out =
+ tor_strdup("NULL intro cell passed to "
+ "rend_service_validate_intro_early()");
+
+ status = -1;
+ goto err;
+ }
+
+ /* TODO */
+
+ err:
+ return status;
+}
+
+/** Do validity checks on a parsed intro cell after decryption; some of
+ * these are not done in rend_service_parse_intro_plaintext() itself because
+ * they depend on a lot of other state and would make it hard to unit test.
+ * Returns >= 0 if successful or < 0 if the intro cell is invalid, and
+ * optionally writes out an error message for logging. If an err_msg
+ * pointer is provided, it is the caller's responsibility to free any
+ * provided message.
+ */
+
+int
+rend_service_validate_intro_late(const rend_intro_cell_t *intro,
+ char **err_msg_out)
+{
+ int status = 0;
+
+ if (!intro) {
+ if (err_msg_out)
+ *err_msg_out =
+ tor_strdup("NULL intro cell passed to "
+ "rend_service_validate_intro_late()");
+
+ status = -1;
+ goto err;
+ }
+
+ if (intro->version == 3 && intro->parsed) {
+ if (!(intro->u.v3.auth_type == REND_NO_AUTH ||
+ intro->u.v3.auth_type == REND_BASIC_AUTH ||
+ intro->u.v3.auth_type == REND_STEALTH_AUTH)) {
+ /* This is an informative message, not an error, as in the old code */
+ if (err_msg_out)
+ tor_asprintf(err_msg_out,
+ "unknown authorization type %d",
+ intro->u.v3.auth_type);
+ }
+ }
+
+ err:
+ return status;
+}
+
/** Called when we fail building a rendezvous circuit at some point other
* than the last hop: launches a new circuit to the same rendezvous point.
*/
@@ -1424,7 +2268,7 @@ rend_service_relaunch_rendezvous(origin_circuit_t *oldcirc)
origin_circuit_t *newcirc;
cpath_build_state_t *newstate, *oldstate;
- tor_assert(oldcirc->_base.purpose == CIRCUIT_PURPOSE_S_CONNECT_REND);
+ tor_assert(oldcirc->base_.purpose == CIRCUIT_PURPOSE_S_CONNECT_REND);
/* Don't relaunch the same rend circ twice. */
if (oldcirc->hs_service_side_rend_circ_has_been_relaunched) {
@@ -1529,7 +2373,7 @@ rend_service_launch_establish_intro(rend_service_t *service,
sizeof(launched->rend_data->onion_address));
memcpy(launched->rend_data->rend_pk_digest, service->pk_digest, DIGEST_LEN);
launched->intro_key = crypto_pk_dup_key(intro->intro_key);
- if (launched->_base.state == CIRCUIT_STATE_OPEN)
+ if (launched->base_.state == CIRCUIT_STATE_OPEN)
rend_service_intro_has_opened(launched);
return 0;
}
@@ -1541,7 +2385,7 @@ count_established_intro_points(const char *query)
{
int num_ipos = 0;
circuit_t *circ;
- for (circ = _circuit_get_global_list(); circ; circ = circ->next) {
+ TOR_LIST_FOREACH(circ, circuit_get_global_list(), head) {
if (!circ->marked_for_close &&
circ->state == CIRCUIT_STATE_OPEN &&
(circ->purpose == CIRCUIT_PURPOSE_S_ESTABLISH_INTRO ||
@@ -1570,7 +2414,7 @@ rend_service_intro_has_opened(origin_circuit_t *circuit)
int reason = END_CIRC_REASON_TORPROTOCOL;
crypto_pk_t *intro_key;
- tor_assert(circuit->_base.purpose == CIRCUIT_PURPOSE_S_ESTABLISH_INTRO);
+ tor_assert(circuit->base_.purpose == CIRCUIT_PURPOSE_S_ESTABLISH_INTRO);
#ifndef NON_ANONYMOUS_MODE_ENABLED
tor_assert(!(circuit->build_state->onehop_tunnel));
#endif
@@ -1583,8 +2427,8 @@ rend_service_intro_has_opened(origin_circuit_t *circuit)
service = rend_service_get_by_pk_digest(
circuit->rend_data->rend_pk_digest);
if (!service) {
- log_warn(LD_REND, "Unrecognized service ID %s on introduction circuit %d.",
- serviceid, circuit->_base.n_circ_id);
+ log_warn(LD_REND, "Unrecognized service ID %s on introduction circuit %u.",
+ serviceid, (unsigned)circuit->base_.n_circ_id);
reason = END_CIRC_REASON_NOSUCHSERVICE;
goto err;
}
@@ -1600,8 +2444,8 @@ rend_service_intro_has_opened(origin_circuit_t *circuit)
this case, we might as well close the thing. */
log_info(LD_CIRC|LD_REND, "We have just finished an introduction "
"circuit, but we already have enough. Closing it.");
- circuit_mark_for_close(TO_CIRCUIT(circuit), END_CIRC_REASON_NONE);
- return;
+ reason = END_CIRC_REASON_NONE;
+ goto err;
} else {
tor_assert(circuit->build_state->is_internal);
log_info(LD_CIRC|LD_REND, "We have just finished an introduction "
@@ -1622,13 +2466,13 @@ rend_service_intro_has_opened(origin_circuit_t *circuit)
}
circuit_has_opened(circuit);
- return;
+ goto done;
}
}
log_info(LD_REND,
- "Established circuit %d as introduction point for service %s",
- circuit->_base.n_circ_id, serviceid);
+ "Established circuit %u as introduction point for service %s",
+ (unsigned)circuit->base_.n_circ_id, serviceid);
/* Use the intro key instead of the service key in ESTABLISH_INTRO. */
intro_key = circuit->intro_key;
@@ -1643,7 +2487,7 @@ rend_service_intro_has_opened(origin_circuit_t *circuit)
len = r;
set_uint16(buf, htons((uint16_t)len));
len += 2;
- memcpy(auth, circuit->cpath->prev->handshake_digest, DIGEST_LEN);
+ memcpy(auth, circuit->cpath->prev->rend_circ_nonce, DIGEST_LEN);
memcpy(auth+DIGEST_LEN, "INTRODUCE", 9);
if (crypto_digest(buf+len, auth, DIGEST_LEN+9))
goto err;
@@ -1662,15 +2506,25 @@ rend_service_intro_has_opened(origin_circuit_t *circuit)
RELAY_COMMAND_ESTABLISH_INTRO,
buf, len, circuit->cpath->prev)<0) {
log_info(LD_GENERAL,
- "Couldn't send introduction request for service %s on circuit %d",
- serviceid, circuit->_base.n_circ_id);
+ "Couldn't send introduction request for service %s on circuit %u",
+ serviceid, (unsigned)circuit->base_.n_circ_id);
reason = END_CIRC_REASON_INTERNAL;
goto err;
}
- return;
+ /* We've attempted to use this circuit */
+ pathbias_count_use_attempt(circuit);
+
+ goto done;
+
err:
circuit_mark_for_close(TO_CIRCUIT(circuit), reason);
+ done:
+ memwipe(buf, 0, sizeof(buf));
+ memwipe(auth, 0, sizeof(auth));
+ memwipe(serviceid, 0, sizeof(serviceid));
+
+ return;
}
/** Called when we get an INTRO_ESTABLISHED cell; mark the circuit as a
@@ -1686,7 +2540,7 @@ rend_service_intro_established(origin_circuit_t *circuit,
(void) request;
(void) request_len;
- if (circuit->_base.purpose != CIRCUIT_PURPOSE_S_ESTABLISH_INTRO) {
+ if (circuit->base_.purpose != CIRCUIT_PURPOSE_S_ESTABLISH_INTRO) {
log_warn(LD_PROTOCOL,
"received INTRO_ESTABLISHED cell on non-intro circuit.");
goto err;
@@ -1695,8 +2549,8 @@ rend_service_intro_established(origin_circuit_t *circuit,
service = rend_service_get_by_pk_digest(
circuit->rend_data->rend_pk_digest);
if (!service) {
- log_warn(LD_REND, "Unknown service on introduction circuit %d.",
- circuit->_base.n_circ_id);
+ log_warn(LD_REND, "Unknown service on introduction circuit %u.",
+ (unsigned)circuit->base_.n_circ_id);
goto err;
}
service->desc_is_dirty = time(NULL);
@@ -1705,8 +2559,12 @@ rend_service_intro_established(origin_circuit_t *circuit,
base32_encode(serviceid, REND_SERVICE_ID_LEN_BASE32 + 1,
circuit->rend_data->rend_pk_digest, REND_SERVICE_ID_LEN);
log_info(LD_REND,
- "Received INTRO_ESTABLISHED cell on circuit %d for service %s",
- circuit->_base.n_circ_id, serviceid);
+ "Received INTRO_ESTABLISHED cell on circuit %u for service %s",
+ (unsigned)circuit->base_.n_circ_id, serviceid);
+
+ /* Getting a valid INTRODUCE_ESTABLISHED means we've successfully
+ * used the circ */
+ pathbias_mark_use_success(circuit);
return 0;
err:
@@ -1727,13 +2585,21 @@ rend_service_rendezvous_has_opened(origin_circuit_t *circuit)
char hexcookie[9];
int reason;
- tor_assert(circuit->_base.purpose == CIRCUIT_PURPOSE_S_CONNECT_REND);
+ tor_assert(circuit->base_.purpose == CIRCUIT_PURPOSE_S_CONNECT_REND);
tor_assert(circuit->cpath);
tor_assert(circuit->build_state);
#ifndef NON_ANONYMOUS_MODE_ENABLED
tor_assert(!(circuit->build_state->onehop_tunnel));
#endif
tor_assert(circuit->rend_data);
+
+ /* Declare the circuit dirty to avoid reuse, and for path-bias */
+ if (!circuit->base_.timestamp_dirty)
+ circuit->base_.timestamp_dirty = time(NULL);
+
+ /* This may be redundant */
+ pathbias_count_use_attempt(circuit);
+
hop = circuit->build_state->service_pending_final_cpath_ref->cpath;
base16_encode(hexcookie,9,circuit->rend_data->rend_cookie,4);
@@ -1741,9 +2607,9 @@ rend_service_rendezvous_has_opened(origin_circuit_t *circuit)
circuit->rend_data->rend_pk_digest, REND_SERVICE_ID_LEN);
log_info(LD_REND,
- "Done building circuit %d to rendezvous with "
+ "Done building circuit %u to rendezvous with "
"cookie %s for service %s",
- circuit->_base.n_circ_id, hexcookie, serviceid);
+ (unsigned)circuit->base_.n_circ_id, hexcookie, serviceid);
/* Clear the 'in-progress HS circ has timed out' flag for
* consistency with what happens on the client side; this line has
@@ -1777,13 +2643,13 @@ rend_service_rendezvous_has_opened(origin_circuit_t *circuit)
/* All we need to do is send a RELAY_RENDEZVOUS1 cell... */
memcpy(buf, circuit->rend_data->rend_cookie, REND_COOKIE_LEN);
- if (crypto_dh_get_public(hop->dh_handshake_state,
+ if (crypto_dh_get_public(hop->rend_dh_handshake_state,
buf+REND_COOKIE_LEN, DH_KEY_LEN)<0) {
log_warn(LD_GENERAL,"Couldn't get DH public key.");
reason = END_CIRC_REASON_INTERNAL;
goto err;
}
- memcpy(buf+REND_COOKIE_LEN+DH_KEY_LEN, hop->handshake_digest,
+ memcpy(buf+REND_COOKIE_LEN+DH_KEY_LEN, hop->rend_circ_nonce,
DIGEST_LEN);
/* Send the cell */
@@ -1796,8 +2662,8 @@ rend_service_rendezvous_has_opened(origin_circuit_t *circuit)
goto err;
}
- crypto_dh_free(hop->dh_handshake_state);
- hop->dh_handshake_state = NULL;
+ crypto_dh_free(hop->rend_dh_handshake_state);
+ hop->rend_dh_handshake_state = NULL;
/* Append the cpath entry. */
hop->state = CPATH_STATE_OPEN;
@@ -1813,9 +2679,16 @@ rend_service_rendezvous_has_opened(origin_circuit_t *circuit)
/* Change the circuit purpose. */
circuit_change_purpose(TO_CIRCUIT(circuit), CIRCUIT_PURPOSE_S_REND_JOINED);
- return;
+ goto done;
+
err:
circuit_mark_for_close(TO_CIRCUIT(circuit), reason);
+ done:
+ memwipe(buf, 0, sizeof(buf));
+ memwipe(serviceid, 0, sizeof(serviceid));
+ memwipe(hexcookie, 0, sizeof(hexcookie));
+
+ return;
}
/*
@@ -1876,7 +2749,7 @@ find_intro_point(origin_circuit_t *circ)
if (service == NULL) return NULL;
SMARTLIST_FOREACH(service->intro_nodes, rend_intro_point_t *, intro_point,
- if (crypto_pk_cmp_keys(intro_point->intro_key, circ->intro_key) == 0) {
+ if (crypto_pk_eq_keys(intro_point->intro_key, circ->intro_key)) {
return intro_point;
});
@@ -1912,7 +2785,7 @@ directory_post_to_hs_dir(rend_service_descriptor_t *renddesc,
char *hs_dir_ip;
const node_t *node;
hs_dir = smartlist_get(responsible_dirs, j);
- if (smartlist_digest_isin(renddesc->successful_uploads,
+ if (smartlist_contains_digest(renddesc->successful_uploads,
hs_dir->identity_digest))
/* Don't upload descriptor if we succeeded in doing so last time. */
continue;
@@ -1929,7 +2802,8 @@ directory_post_to_hs_dir(rend_service_descriptor_t *renddesc,
directory_initiate_command_routerstatus(hs_dir,
DIR_PURPOSE_UPLOAD_RENDDESC_V2,
ROUTER_PURPOSE_GENERAL,
- 1, NULL, desc->desc_str,
+ DIRIND_ANONYMOUS, NULL,
+ desc->desc_str,
strlen(desc->desc_str), 0);
base32_encode(desc_id_base32, sizeof(desc_id_base32),
desc->desc_id, DIGEST_LEN);
@@ -1946,7 +2820,8 @@ directory_post_to_hs_dir(rend_service_descriptor_t *renddesc,
hs_dir->or_port);
tor_free(hs_dir_ip);
/* Remember successful upload to this router for next time. */
- if (!smartlist_digest_isin(successful_uploads, hs_dir->identity_digest))
+ if (!smartlist_contains_digest(successful_uploads,
+ hs_dir->identity_digest))
smartlist_add(successful_uploads, hs_dir->identity_digest);
}
smartlist_clear(responsible_dirs);
@@ -1964,7 +2839,7 @@ directory_post_to_hs_dir(rend_service_descriptor_t *renddesc,
if (!renddesc->successful_uploads)
renddesc->successful_uploads = smartlist_new();
SMARTLIST_FOREACH(successful_uploads, const char *, c, {
- if (!smartlist_digest_isin(renddesc->successful_uploads, c)) {
+ if (!smartlist_contains_digest(renddesc->successful_uploads, c)) {
char *hsdir_id = tor_memdup(c, DIGEST_LEN);
smartlist_add(renddesc->successful_uploads, hsdir_id);
}
@@ -2091,11 +2966,7 @@ upload_service_descriptor(rend_service_t *service)
static int
intro_point_accepted_intro_count(rend_intro_point_t *intro)
{
- if (intro->accepted_intro_rsa_parts == NULL) {
- return 0;
- } else {
- return digestmap_size(intro->accepted_intro_rsa_parts);
- }
+ return intro->accepted_introduce2_count;
}
/** Return non-zero iff <b>intro</b> should 'expire' now (i.e. we
@@ -2201,7 +3072,8 @@ rend_services_introduce(void)
if (intro->time_expiring + INTRO_POINT_EXPIRATION_GRACE_PERIOD > now) {
/* This intro point has completely expired. Remove it, and
* mark the circuit for close if it's still alive. */
- if (intro_circ != NULL) {
+ if (intro_circ != NULL &&
+ intro_circ->base_.purpose != CIRCUIT_PURPOSE_PATH_BIAS_TESTING) {
circuit_mark_for_close(TO_CIRCUIT(intro_circ),
END_CIRC_REASON_FINISHED);
}
@@ -2299,7 +3171,7 @@ rend_services_introduce(void)
j < (int)n_intro_points_to_open;
++j) { /* XXXX remove casts */
router_crn_flags_t flags = CRN_NEED_UPTIME|CRN_NEED_DESC;
- if (get_options()->_AllowInvalid & ALLOW_INVALID_INTRODUCTION)
+ if (get_options()->AllowInvalid_ & ALLOW_INVALID_INTRODUCTION)
flags |= CRN_ALLOW_INVALID;
node = router_choose_random_node(intro_nodes,
options->ExcludeNodes, flags);
@@ -2436,7 +3308,7 @@ rend_service_dump_stats(int severity)
for (i=0; i < smartlist_len(rend_service_list); ++i) {
service = smartlist_get(rend_service_list, i);
- log(severity, LD_GENERAL, "Service configured in \"%s\":",
+ tor_log(severity, LD_GENERAL, "Service configured in \"%s\":",
service->directory);
for (j=0; j < smartlist_len(service->intro_nodes); ++j) {
intro = smartlist_get(service->intro_nodes, j);
@@ -2444,12 +3316,12 @@ rend_service_dump_stats(int severity)
circ = find_intro_circuit(intro, service->pk_digest);
if (!circ) {
- log(severity, LD_GENERAL, " Intro point %d at %s: no circuit",
+ tor_log(severity, LD_GENERAL, " Intro point %d at %s: no circuit",
j, safe_name);
continue;
}
- log(severity, LD_GENERAL, " Intro point %d at %s: circuit is %s",
- j, safe_name, circuit_state_to_string(circ->_base.state));
+ tor_log(severity, LD_GENERAL, " Intro point %d at %s: circuit is %s",
+ j, safe_name, circuit_state_to_string(circ->base_.state));
}
}
}
@@ -2468,7 +3340,7 @@ rend_service_set_connection_addr_port(edge_connection_t *conn,
smartlist_t *matching_ports;
rend_service_port_config_t *chosen_port;
- tor_assert(circ->_base.purpose == CIRCUIT_PURPOSE_S_REND_JOINED);
+ tor_assert(circ->base_.purpose == CIRCUIT_PURPOSE_S_REND_JOINED);
tor_assert(circ->rend_data);
log_debug(LD_REND,"beginning to hunt for addr/port");
base32_encode(serviceid, REND_SERVICE_ID_LEN_BASE32+1,
@@ -2477,26 +3349,26 @@ rend_service_set_connection_addr_port(edge_connection_t *conn,
circ->rend_data->rend_pk_digest);
if (!service) {
log_warn(LD_REND, "Couldn't find any service associated with pk %s on "
- "rendezvous circuit %d; closing.",
- serviceid, circ->_base.n_circ_id);
+ "rendezvous circuit %u; closing.",
+ serviceid, (unsigned)circ->base_.n_circ_id);
return -1;
}
matching_ports = smartlist_new();
SMARTLIST_FOREACH(service->ports, rend_service_port_config_t *, p,
{
- if (conn->_base.port == p->virtual_port) {
+ if (conn->base_.port == p->virtual_port) {
smartlist_add(matching_ports, p);
}
});
chosen_port = smartlist_choose(matching_ports);
smartlist_free(matching_ports);
if (chosen_port) {
- tor_addr_copy(&conn->_base.addr, &chosen_port->real_addr);
- conn->_base.port = chosen_port->real_port;
+ tor_addr_copy(&conn->base_.addr, &chosen_port->real_addr);
+ conn->base_.port = chosen_port->real_port;
return 0;
}
log_info(LD_REND, "No virtual port mapping exists for port %d on service %s",
- conn->_base.port,serviceid);
+ conn->base_.port,serviceid);
return -1;
}
diff --git a/src/or/rendservice.h b/src/or/rendservice.h
index e5848785a..40198b07e 100644
--- a/src/or/rendservice.h
+++ b/src/or/rendservice.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,12 +9,70 @@
* \brief Header file for rendservice.c.
**/
-#ifndef _TOR_RENDSERVICE_H
-#define _TOR_RENDSERVICE_H
+#ifndef TOR_RENDSERVICE_H
+#define TOR_RENDSERVICE_H
+
+#include "or.h"
+
+typedef struct rend_intro_cell_s rend_intro_cell_t;
+
+#ifdef RENDSERVICE_PRIVATE
+
+/* This can be used for both INTRODUCE1 and INTRODUCE2 */
+
+struct rend_intro_cell_s {
+ /* Is this an INTRODUCE1 or INTRODUCE2? (set to 1 or 2) */
+ uint8_t type;
+ /* Public key digest */
+ uint8_t pk[DIGEST_LEN];
+ /* Optionally, store ciphertext here */
+ uint8_t *ciphertext;
+ ssize_t ciphertext_len;
+ /* Optionally, store plaintext */
+ uint8_t *plaintext;
+ ssize_t plaintext_len;
+ /* Have we parsed the plaintext? */
+ uint8_t parsed;
+ /* intro protocol version (0, 1, 2 or 3) */
+ uint8_t version;
+ /* Version-specific parts */
+ union {
+ struct {
+ /* Rendezvous point nickname */
+ uint8_t rp[20];
+ } v0;
+ struct {
+ /* Rendezvous point nickname or hex-encoded key digest */
+ uint8_t rp[42];
+ } v1;
+ struct {
+ /* The extend_info_t struct has everything v2 uses */
+ extend_info_t *extend_info;
+ } v2;
+ struct {
+ /* Auth type used */
+ uint8_t auth_type;
+ /* Length of auth data */
+ uint16_t auth_len;
+ /* Auth data */
+ uint8_t *auth_data;
+ /* Rendezvous point's IP address/port, identity digest and onion key */
+ extend_info_t *extend_info;
+ } v3;
+ } u;
+ /* Rendezvous cookie */
+ uint8_t rc[REND_COOKIE_LEN];
+ /* Diffie-Hellman data */
+ uint8_t dh[DH_KEY_LEN];
+};
+
+#endif
int num_rend_services(void);
int rend_config_services(const or_options_t *options, int validate_only);
-int rend_service_load_keys(void);
+int rend_service_load_all_keys(void);
+void rend_services_add_filenames_to_lists(smartlist_t *open_lst,
+ smartlist_t *stat_lst);
void rend_services_introduce(void);
void rend_consider_services_upload(time_t now);
void rend_hsdir_routers_changed(void);
@@ -27,6 +85,20 @@ int rend_service_intro_established(origin_circuit_t *circuit,
void rend_service_rendezvous_has_opened(origin_circuit_t *circuit);
int rend_service_introduce(origin_circuit_t *circuit, const uint8_t *request,
size_t request_len);
+int rend_service_decrypt_intro(rend_intro_cell_t *request,
+ crypto_pk_t *key,
+ char **err_msg_out);
+void rend_service_free_intro(rend_intro_cell_t *request);
+rend_intro_cell_t * rend_service_begin_parse_intro(const uint8_t *request,
+ size_t request_len,
+ uint8_t type,
+ char **err_msg_out);
+int rend_service_parse_intro_plaintext(rend_intro_cell_t *intro,
+ char **err_msg_out);
+int rend_service_validate_intro_early(const rend_intro_cell_t *intro,
+ char **err_msg_out);
+int rend_service_validate_intro_late(const rend_intro_cell_t *intro,
+ char **err_msg_out);
void rend_service_relaunch_rendezvous(origin_circuit_t *oldcirc);
int rend_service_set_connection_addr_port(edge_connection_t *conn,
origin_circuit_t *circ);
diff --git a/src/or/rephist.c b/src/or/rephist.c
index 3b0d9dd35..5446c25e3 100644
--- a/src/or/rephist.c
+++ b/src/or/rephist.c
@@ -1,5 +1,5 @@
/* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -160,7 +160,7 @@ get_link_history(const char *from_id, const char *to_id)
/** Helper: free storage held by a single link history entry. */
static void
-_free_link_history(void *val)
+free_link_history_(void *val)
{
rephist_total_alloc -= sizeof(link_history_t);
tor_free(val);
@@ -171,7 +171,7 @@ static void
free_or_history(void *_hist)
{
or_history_t *hist = _hist;
- digestmap_free(hist->link_history_map, _free_link_history);
+ digestmap_free(hist->link_history_map, free_link_history_);
rephist_total_alloc -= sizeof(or_history_t);
rephist_total_num--;
tor_free(hist);
@@ -310,9 +310,10 @@ rep_hist_note_router_reachable(const char *id, const tor_addr_t *at_addr,
tor_assert(hist);
tor_assert((!at_addr && !at_port) || (at_addr && at_port));
- addr_changed = at_addr &&
+ addr_changed = at_addr && !tor_addr_is_null(&hist->last_reached_addr) &&
tor_addr_compare(at_addr, &hist->last_reached_addr, CMP_EXACT) != 0;
- port_changed = at_port && at_port != hist->last_reached_port;
+ port_changed = at_port && hist->last_reached_port &&
+ at_port != hist->last_reached_port;
if (!started_tracking_stability)
started_tracking_stability = time(NULL);
@@ -422,6 +423,21 @@ rep_hist_note_router_unreachable(const char *id, time_t when)
}
}
+/** Mark a router with ID <b>id</b> as non-Running, and retroactively declare
+ * that it has never been running: give it no stability and no WFU. */
+void
+rep_hist_make_router_pessimal(const char *id, time_t when)
+{
+ or_history_t *hist = get_or_history(id);
+ tor_assert(hist);
+
+ rep_hist_note_router_unreachable(id, when);
+ mark_or_down(hist, when, 1);
+
+ hist->weighted_run_length = 0;
+ hist->weighted_uptime = 0;
+}
+
/** Helper: Discount all old MTBF data, if it is time to do so. Return
* the time at which we should next discount MTBF data. */
time_t
@@ -648,7 +664,7 @@ rep_hist_dump_stats(time_t now, int severity)
rep_history_clean(now - get_options()->RephistTrackTime);
- log(severity, LD_HIST, "--------------- Dumping history information:");
+ tor_log(severity, LD_HIST, "--------------- Dumping history information:");
for (orhist_it = digestmap_iter_init(history_map);
!digestmap_iter_done(orhist_it);
@@ -673,7 +689,7 @@ rep_hist_dump_stats(time_t now, int severity)
} else {
uptime=1.0;
}
- log(severity, LD_HIST,
+ tor_log(severity, LD_HIST,
"OR %s [%s]: %ld/%ld good connections; uptime %ld/%ld sec (%.2f%%); "
"wmtbf %lu:%02lu:%02lu",
name1, hexdigest1,
@@ -707,7 +723,7 @@ rep_hist_dump_stats(time_t now, int severity)
else
len += ret;
}
- log(severity, LD_HIST, "%s", buffer);
+ tor_log(severity, LD_HIST, "%s", buffer);
}
}
}
@@ -863,126 +879,6 @@ rep_hist_record_mtbf_data(time_t now, int missing_means_down)
return -1;
}
-/** Format the current tracked status of the router in <b>hist</b> at time
- * <b>now</b> for analysis; return it in a newly allocated string. */
-static char *
-rep_hist_format_router_status(or_history_t *hist, time_t now)
-{
- char sor_buf[ISO_TIME_LEN+1];
- char sod_buf[ISO_TIME_LEN+1];
- double wfu;
- double mtbf;
- int up = 0, down = 0;
- char *cp = NULL;
-
- if (hist->start_of_run) {
- format_iso_time(sor_buf, hist->start_of_run);
- up = 1;
- }
- if (hist->start_of_downtime) {
- format_iso_time(sod_buf, hist->start_of_downtime);
- down = 1;
- }
-
- wfu = get_weighted_fractional_uptime(hist, now);
- mtbf = get_stability(hist, now);
- tor_asprintf(&cp,
- "%s%s%s"
- "%s%s%s"
- "wfu %0.3f\n"
- " weighted-time %lu\n"
- " weighted-uptime %lu\n"
- "mtbf %0.1f\n"
- " weighted-run-length %lu\n"
- " total-run-weights %f\n",
- up?"uptime-started ":"", up?sor_buf:"", up?" UTC\n":"",
- down?"downtime-started ":"", down?sod_buf:"", down?" UTC\n":"",
- wfu,
- hist->total_weighted_time,
- hist->weighted_uptime,
- mtbf,
- hist->weighted_run_length,
- hist->total_run_weights
- );
- return cp;
-}
-
-/** The last stability analysis document that we created, or NULL if we never
- * have created one. */
-static char *last_stability_doc = NULL;
-/** The last time we created a stability analysis document, or 0 if we never
- * have created one. */
-static time_t built_last_stability_doc_at = 0;
-/** Shortest allowable time between building two stability documents. */
-#define MAX_STABILITY_DOC_BUILD_RATE (3*60)
-
-/** Return a pointer to a NUL-terminated document describing our view of the
- * stability of the routers we've been tracking. Return NULL on failure. */
-const char *
-rep_hist_get_router_stability_doc(time_t now)
-{
- char *result;
- smartlist_t *chunks;
- if (built_last_stability_doc_at + MAX_STABILITY_DOC_BUILD_RATE > now)
- return last_stability_doc;
-
- if (!history_map)
- return NULL;
-
- tor_free(last_stability_doc);
- chunks = smartlist_new();
-
- if (rep_hist_have_measured_enough_stability()) {
- smartlist_add(chunks, tor_strdup("we-have-enough-measurements\n"));
- } else {
- smartlist_add(chunks, tor_strdup("we-do-not-have-enough-measurements\n"));
- }
-
- DIGESTMAP_FOREACH(history_map, id, or_history_t *, hist) {
- const node_t *node;
- char dbuf[BASE64_DIGEST_LEN+1];
- char *info;
- digest_to_base64(dbuf, id);
- node = node_get_by_id(id);
- if (node) {
- char ip[INET_NTOA_BUF_LEN+1];
- char tbuf[ISO_TIME_LEN+1];
- time_t published = node_get_published_on(node);
- node_get_address_string(node,ip,sizeof(ip));
- if (published > 0)
- format_iso_time(tbuf, published);
- else
- strlcpy(tbuf, "???", sizeof(tbuf));
- smartlist_add_asprintf(chunks,
- "router %s %s %s\n"
- "published %s\n"
- "relevant-flags %s%s%s\n"
- "declared-uptime %ld\n",
- dbuf, node_get_nickname(node), ip,
- tbuf,
- node->is_running ? "Running " : "",
- node->is_valid ? "Valid " : "",
- node->ri && node->ri->is_hibernating ? "Hibernating " : "",
- node_get_declared_uptime(node));
- } else {
- smartlist_add_asprintf(chunks,
- "router %s {no descriptor}\n", dbuf);
- }
- info = rep_hist_format_router_status(hist, now);
- if (info)
- smartlist_add(chunks, info);
-
- } DIGESTMAP_FOREACH_END;
-
- result = smartlist_join_strings(chunks, "", 0, NULL);
- SMARTLIST_FOREACH(chunks, char *, cp, tor_free(cp));
- smartlist_free(chunks);
-
- last_stability_doc = result;
- built_last_stability_doc_at = time(NULL);
- return result;
-}
-
/** Helper: return the first j >= i such that !strcmpstart(sl[j], prefix) and
* such that no line sl[k] with i <= k < j starts with "R ". Return -1 if no
* such line exists. */
@@ -1035,7 +931,7 @@ correct_time(time_t t, time_t now, time_t stored_at, time_t started_measuring)
return 0;
else {
long run_length = stored_at - t;
- t = now - run_length;
+ t = (time_t)(now - run_length);
if (t < started_measuring)
t = started_measuring;
return t;
@@ -1136,7 +1032,7 @@ rep_hist_load_mtbf_data(time_t now)
wfu_timebuf[0] = '\0';
if (format == 1) {
- n = sscanf(line, "%40s %ld %lf S=%10s %8s",
+ n = tor_sscanf(line, "%40s %ld %lf S=%10s %8s",
hexbuf, &wrl, &trw, mtbf_timebuf, mtbf_timebuf+11);
if (n != 3 && n != 5) {
log_warn(LD_HIST, "Couldn't scan line %s", escaped(line));
@@ -1153,7 +1049,7 @@ rep_hist_load_mtbf_data(time_t now)
wfu_idx = find_next_with(lines, i+1, "+WFU ");
if (mtbf_idx >= 0) {
const char *mtbfline = smartlist_get(lines, mtbf_idx);
- n = sscanf(mtbfline, "+MTBF %lu %lf S=%10s %8s",
+ n = tor_sscanf(mtbfline, "+MTBF %lu %lf S=%10s %8s",
&wrl, &trw, mtbf_timebuf, mtbf_timebuf+11);
if (n == 2 || n == 4) {
have_mtbf = 1;
@@ -1164,7 +1060,7 @@ rep_hist_load_mtbf_data(time_t now)
}
if (wfu_idx >= 0) {
const char *wfuline = smartlist_get(lines, wfu_idx);
- n = sscanf(wfuline, "+WFU %lu %lu S=%10s %8s",
+ n = tor_sscanf(wfuline, "+WFU %lu %lu S=%10s %8s",
&wt_uptime, &total_wt_time,
wfu_timebuf, wfu_timebuf+11);
if (n == 2 || n == 4) {
@@ -1196,7 +1092,7 @@ rep_hist_load_mtbf_data(time_t now)
hist->start_of_run = correct_time(start_of_run, now, stored_at,
tracked_since);
if (hist->start_of_run < latest_possible_start + wrl)
- latest_possible_start = hist->start_of_run - wrl;
+ latest_possible_start = (time_t)(hist->start_of_run - wrl);
hist->weighted_run_length = wrl;
hist->total_run_weights = trw;
@@ -1531,10 +1427,10 @@ rep_hist_get_bandwidth_lines(void)
const char *desc = NULL;
size_t len;
- /* opt [dirreq-](read|write)-history yyyy-mm-dd HH:MM:SS (n s) n,n,n... */
+ /* [dirreq-](read|write)-history yyyy-mm-dd HH:MM:SS (n s) n,n,n... */
/* The n,n,n part above. Largest representation of a uint64_t is 20 chars
* long, plus the comma. */
-#define MAX_HIST_VALUE_LEN 21*NUM_TOTALS
+#define MAX_HIST_VALUE_LEN (21*NUM_TOTALS)
len = (67+MAX_HIST_VALUE_LEN)*4;
buf = tor_malloc_zero(len);
cp = buf;
@@ -1846,22 +1742,20 @@ rep_hist_note_used_port(time_t now, uint16_t port)
add_predicted_port(now, port);
}
-/** For this long after we've seen a request for a given port, assume that
- * we'll want to make connections to the same port in the future. */
-#define PREDICTED_CIRCS_RELEVANCE_TIME (60*60)
-
/** Return a newly allocated pointer to a list of uint16_t * for ports that
* are likely to be asked for in the near future.
*/
smartlist_t *
rep_hist_get_predicted_ports(time_t now)
{
+ int predicted_circs_relevance_time;
smartlist_t *out = smartlist_new();
tor_assert(predicted_ports_list);
+ predicted_circs_relevance_time = get_options()->PredictedPortsRelevanceTime;
/* clean out obsolete entries */
SMARTLIST_FOREACH_BEGIN(predicted_ports_list, predicted_port_t *, pp) {
- if (pp->time + PREDICTED_CIRCS_RELEVANCE_TIME < now) {
+ if (pp->time + predicted_circs_relevance_time < now) {
log_debug(LD_CIRC, "Expiring predicted port %d", pp->port);
rephist_total_alloc -= sizeof(predicted_port_t);
@@ -1928,14 +1822,17 @@ int
rep_hist_get_predicted_internal(time_t now, int *need_uptime,
int *need_capacity)
{
+ int predicted_circs_relevance_time;
+ predicted_circs_relevance_time = get_options()->PredictedPortsRelevanceTime;
+
if (!predicted_internal_time) { /* initialize it */
predicted_internal_time = now;
predicted_internal_uptime_time = now;
predicted_internal_capacity_time = now;
}
- if (predicted_internal_time + PREDICTED_CIRCS_RELEVANCE_TIME < now)
+ if (predicted_internal_time + predicted_circs_relevance_time < now)
return 0; /* too long ago */
- if (predicted_internal_uptime_time + PREDICTED_CIRCS_RELEVANCE_TIME >= now)
+ if (predicted_internal_uptime_time + predicted_circs_relevance_time >= now)
*need_uptime = 1;
// Always predict that we need capacity.
*need_capacity = 1;
@@ -1947,8 +1844,11 @@ rep_hist_get_predicted_internal(time_t now, int *need_uptime,
int
any_predicted_circuits(time_t now)
{
+ int predicted_circs_relevance_time;
+ predicted_circs_relevance_time = get_options()->PredictedPortsRelevanceTime;
+
return smartlist_len(predicted_ports_list) ||
- predicted_internal_time + PREDICTED_CIRCS_RELEVANCE_TIME >= now;
+ predicted_internal_time + predicted_circs_relevance_time >= now;
}
/** Return 1 if we have no need for circuits currently, else return 0. */
@@ -2042,7 +1942,7 @@ note_crypto_pk_op(pk_op_t operation)
void
dump_pk_ops(int severity)
{
- log(severity, LD_HIST,
+ tor_log(severity, LD_HIST,
"PK operations: %lu directory objects signed, "
"%lu directory objects verified, "
"%lu routerdescs signed, "
@@ -2131,7 +2031,7 @@ rep_hist_exit_stats_term(void)
* but works fine for sorting an array of port numbers, which is what we use
* it for. */
static int
-_compare_int(const void *x, const void *y)
+compare_int_(const void *x, const void *y)
{
return (*(int*)x - *(int*)y);
}
@@ -2218,7 +2118,7 @@ rep_hist_format_exit_stats(time_t now)
other_streams = total_streams;
/* Sort the ports; this puts them out of sync with top_bytes, but we
* won't be using top_bytes again anyway */
- qsort(top_ports, top_elements, sizeof(int), _compare_int);
+ qsort(top_ports, top_elements, sizeof(int), compare_int_);
for (j = 0; j < top_elements; j++) {
cur_port = top_ports[j];
if (exit_bytes_written[cur_port] > 0) {
@@ -2297,7 +2197,7 @@ rep_hist_format_exit_stats(time_t now)
time_t
rep_hist_exit_stats_write(time_t now)
{
- char *statsdir = NULL, *filename = NULL, *str = NULL;
+ char *str = NULL;
if (!start_of_exit_stats_interval)
return 0; /* Not initialized. */
@@ -2313,19 +2213,12 @@ rep_hist_exit_stats_write(time_t now)
rep_hist_reset_exit_stats(now);
/* Try to write to disk. */
- statsdir = get_datadir_fname("stats");
- if (check_private_dir(statsdir, CPD_CREATE, get_options()->User) < 0) {
- log_warn(LD_HIST, "Unable to create stats/ directory!");
- goto done;
+ if (!check_or_create_data_subdir("stats")) {
+ write_to_data_subdir("stats", "exit-stats", str, "exit port statistics");
}
- filename = get_datadir_fname2("stats", "exit-stats");
- if (write_str_to_file(filename, str, 0) < 0)
- log_warn(LD_HIST, "Unable to write exit port statistics to disk!");
done:
tor_free(str);
- tor_free(statsdir);
- tor_free(filename);
return start_of_exit_stats_interval + WRITE_STATS_INTERVAL;
}
@@ -2418,7 +2311,7 @@ rep_hist_buffer_stats_add_circ(circuit_t *circ, time_t end_of_interval)
return;
start_of_interval = (circ->timestamp_created.tv_sec >
start_of_buffer_stats_interval) ?
- circ->timestamp_created.tv_sec :
+ (time_t)circ->timestamp_created.tv_sec :
start_of_buffer_stats_interval;
interval_length = (int) (end_of_interval - start_of_interval);
if (interval_length <= 0)
@@ -2440,7 +2333,7 @@ rep_hist_buffer_stats_add_circ(circuit_t *circ, time_t end_of_interval)
/** Sorting helper: return -1, 1, or 0 based on comparison of two
* circ_buffer_stats_t */
static int
-_buffer_stats_compare_entries(const void **_a, const void **_b)
+buffer_stats_compare_entries_(const void **_a, const void **_b)
{
const circ_buffer_stats_t *a = *_a, *b = *_b;
if (a->processed_cells < b->processed_cells)
@@ -2505,7 +2398,7 @@ rep_hist_format_buffer_stats(time_t now)
number_of_circuits = smartlist_len(circuits_for_buffer_stats);
if (number_of_circuits > 0) {
smartlist_sort(circuits_for_buffer_stats,
- _buffer_stats_compare_entries);
+ buffer_stats_compare_entries_);
i = 0;
SMARTLIST_FOREACH_BEGIN(circuits_for_buffer_stats,
circ_buffer_stats_t *, stat)
@@ -2582,7 +2475,7 @@ time_t
rep_hist_buffer_stats_write(time_t now)
{
circuit_t *circ;
- char *statsdir = NULL, *filename = NULL, *str = NULL;
+ char *str = NULL;
if (!start_of_buffer_stats_interval)
return 0; /* Not initialized. */
@@ -2590,7 +2483,7 @@ rep_hist_buffer_stats_write(time_t now)
goto done; /* Not ready to write */
/* Add open circuits to the history. */
- for (circ = _circuit_get_global_list(); circ; circ = circ->next) {
+ TOR_LIST_FOREACH(circ, circuit_get_global_list(), head) {
rep_hist_buffer_stats_add_circ(circ, now);
}
@@ -2601,19 +2494,12 @@ rep_hist_buffer_stats_write(time_t now)
rep_hist_reset_buffer_stats(now);
/* Try to write to disk. */
- statsdir = get_datadir_fname("stats");
- if (check_private_dir(statsdir, CPD_CREATE, get_options()->User) < 0) {
- log_warn(LD_HIST, "Unable to create stats/ directory!");
- goto done;
+ if (!check_or_create_data_subdir("stats")) {
+ write_to_data_subdir("stats", "buffer-stats", str, "buffer statistics");
}
- filename = get_datadir_fname2("stats", "buffer-stats");
- if (write_str_to_file(filename, str, 0) < 0)
- log_warn(LD_HIST, "Unable to write buffer stats to disk!");
done:
tor_free(str);
- tor_free(filename);
- tor_free(statsdir);
return start_of_buffer_stats_interval + WRITE_STATS_INTERVAL;
}
@@ -2725,7 +2611,7 @@ rep_hist_format_desc_stats(time_t now)
time_t
rep_hist_desc_stats_write(time_t now)
{
- char *statsdir = NULL, *filename = NULL, *str = NULL;
+ char *filename = NULL, *str = NULL;
if (!start_of_served_descs_stats_interval)
return 0; /* We're not collecting stats. */
@@ -2735,10 +2621,8 @@ rep_hist_desc_stats_write(time_t now)
str = rep_hist_format_desc_stats(now);
tor_assert(str != NULL);
- statsdir = get_datadir_fname("stats");
- if (check_private_dir(statsdir, CPD_CREATE, get_options()->User) < 0) {
- log_warn(LD_HIST, "Unable to create stats/ directory!");
- goto done;
+ if (check_or_create_data_subdir("stats") < 0) {
+ goto done;
}
filename = get_datadir_fname2("stats", "served-desc-stats");
if (append_bytes_to_file(filename, str, strlen(str), 0) < 0)
@@ -2747,7 +2631,6 @@ rep_hist_desc_stats_write(time_t now)
rep_hist_reset_desc_stats(now);
done:
- tor_free(statsdir);
tor_free(filename);
tor_free(str);
return start_of_served_descs_stats_interval + WRITE_STATS_INTERVAL;
@@ -2965,7 +2848,7 @@ rep_hist_format_conn_stats(time_t now)
time_t
rep_hist_conn_stats_write(time_t now)
{
- char *statsdir = NULL, *filename = NULL, *str = NULL;
+ char *str = NULL;
if (!start_of_conn_stats_interval)
return 0; /* Not initialized. */
@@ -2979,22 +2862,55 @@ rep_hist_conn_stats_write(time_t now)
rep_hist_reset_conn_stats(now);
/* Try to write to disk. */
- statsdir = get_datadir_fname("stats");
- if (check_private_dir(statsdir, CPD_CREATE, get_options()->User) < 0) {
- log_warn(LD_HIST, "Unable to create stats/ directory!");
- goto done;
+ if (!check_or_create_data_subdir("stats")) {
+ write_to_data_subdir("stats", "conn-stats", str, "connection statistics");
}
- filename = get_datadir_fname2("stats", "conn-stats");
- if (write_str_to_file(filename, str, 0) < 0)
- log_warn(LD_HIST, "Unable to write conn stats to disk!");
done:
tor_free(str);
- tor_free(filename);
- tor_free(statsdir);
return start_of_conn_stats_interval + WRITE_STATS_INTERVAL;
}
+/** Internal statistics to track how many requests of each type of
+ * handshake we've received, and how many we've assigned to cpuworkers.
+ * Useful for seeing trends in cpu load.
+ * @{ */
+STATIC int onion_handshakes_requested[MAX_ONION_HANDSHAKE_TYPE+1] = {0};
+STATIC int onion_handshakes_assigned[MAX_ONION_HANDSHAKE_TYPE+1] = {0};
+/**@}*/
+
+/** A new onionskin (using the <b>type</b> handshake) has arrived. */
+void
+rep_hist_note_circuit_handshake_requested(uint16_t type)
+{
+ if (type <= MAX_ONION_HANDSHAKE_TYPE)
+ onion_handshakes_requested[type]++;
+}
+
+/** We've sent an onionskin (using the <b>type</b> handshake) to a
+ * cpuworker. */
+void
+rep_hist_note_circuit_handshake_assigned(uint16_t type)
+{
+ if (type <= MAX_ONION_HANDSHAKE_TYPE)
+ onion_handshakes_assigned[type]++;
+}
+
+/** Log our onionskin statistics since the last time we were called. */
+void
+rep_hist_log_circuit_handshake_stats(time_t now)
+{
+ (void)now;
+ log_notice(LD_HEARTBEAT, "Circuit handshake stats since last time: "
+ "%d/%d TAP, %d/%d NTor.",
+ onion_handshakes_assigned[ONION_HANDSHAKE_TYPE_TAP],
+ onion_handshakes_requested[ONION_HANDSHAKE_TYPE_TAP],
+ onion_handshakes_assigned[ONION_HANDSHAKE_TYPE_NTOR],
+ onion_handshakes_requested[ONION_HANDSHAKE_TYPE_NTOR]);
+ memset(onion_handshakes_assigned, 0, sizeof(onion_handshakes_assigned));
+ memset(onion_handshakes_requested, 0, sizeof(onion_handshakes_requested));
+}
+
/** Free all storage held by the OR/link history caches, by the
* bandwidth history arrays, by the port history, or by statistics . */
void
@@ -3003,11 +2919,11 @@ rep_hist_free_all(void)
digestmap_free(history_map, free_or_history);
tor_free(read_array);
tor_free(write_array);
- tor_free(last_stability_doc);
+ tor_free(dir_read_array);
+ tor_free(dir_write_array);
tor_free(exit_bytes_read);
tor_free(exit_bytes_written);
tor_free(exit_streams);
- built_last_stability_doc_at = 0;
predicted_ports_free();
bidi_map_free();
diff --git a/src/or/rephist.h b/src/or/rephist.h
index d47724edb..cd6231e6e 100644
--- a/src/or/rephist.h
+++ b/src/or/rephist.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,8 +9,8 @@
* \brief Header file for rephist.c.
**/
-#ifndef _TOR_REPHIST_H
-#define _TOR_REPHIST_H
+#ifndef TOR_REPHIST_H
+#define TOR_REPHIST_H
void rep_hist_init(void);
void rep_hist_note_connect_failed(const char* nickname, time_t when);
@@ -24,6 +24,8 @@ void rep_hist_dump_stats(time_t now, int severity);
void rep_hist_note_bytes_read(size_t num_bytes, time_t when);
void rep_hist_note_bytes_written(size_t num_bytes, time_t when);
+void rep_hist_make_router_pessimal(const char *id, time_t when);
+
void rep_hist_note_dir_bytes_read(size_t num_bytes, time_t when);
void rep_hist_note_dir_bytes_written(size_t num_bytes, time_t when);
@@ -45,7 +47,6 @@ double rep_hist_get_stability(const char *id, time_t when);
double rep_hist_get_weighted_fractional_uptime(const char *id, time_t when);
long rep_hist_get_weighted_time_known(const char *id, time_t when);
int rep_hist_have_measured_enough_stability(void);
-const char *rep_hist_get_router_stability_doc(time_t now);
void rep_hist_note_used_port(time_t now, uint16_t port);
smartlist_t *rep_hist_get_predicted_ports(time_t now);
@@ -62,8 +63,6 @@ int rep_hist_circbuilding_dormant(time_t now);
void note_crypto_pk_op(pk_op_t operation);
void dump_pk_ops(int severity);
-void rep_hist_free_all(void);
-
void rep_hist_exit_stats_init(time_t now);
void rep_hist_reset_exit_stats(time_t now);
void rep_hist_exit_stats_term(void);
@@ -96,5 +95,11 @@ char *rep_hist_format_conn_stats(time_t now);
time_t rep_hist_conn_stats_write(time_t now);
void rep_hist_conn_stats_term(void);
+void rep_hist_note_circuit_handshake_requested(uint16_t type);
+void rep_hist_note_circuit_handshake_assigned(uint16_t type);
+void rep_hist_log_circuit_handshake_stats(time_t now);
+
+void rep_hist_free_all(void);
+
#endif
diff --git a/src/or/replaycache.c b/src/or/replaycache.c
new file mode 100644
index 000000000..90f87c12d
--- /dev/null
+++ b/src/or/replaycache.c
@@ -0,0 +1,204 @@
+ /* Copyright (c) 2012-2013, The Tor Project, Inc. */
+ /* See LICENSE for licensing information */
+
+/*
+ * \file replaycache.c
+ *
+ * \brief Self-scrubbing replay cache for rendservice.c
+ */
+
+#define REPLAYCACHE_PRIVATE
+
+#include "or.h"
+#include "replaycache.h"
+
+/** Free the replaycache r and all of its entries.
+ */
+
+void
+replaycache_free(replaycache_t *r)
+{
+ if (!r) {
+ log_info(LD_BUG, "replaycache_free() called on NULL");
+ return;
+ }
+
+ if (r->digests_seen) digestmap_free(r->digests_seen, tor_free_);
+
+ tor_free(r);
+}
+
+/** Allocate a new, empty replay detection cache, where horizon is the time
+ * for entries to age out and interval is the time after which the cache
+ * should be scrubbed for old entries.
+ */
+
+replaycache_t *
+replaycache_new(time_t horizon, time_t interval)
+{
+ replaycache_t *r = NULL;
+
+ if (horizon < 0) {
+ log_info(LD_BUG, "replaycache_new() called with negative"
+ " horizon parameter");
+ goto err;
+ }
+
+ if (interval < 0) {
+ log_info(LD_BUG, "replaycache_new() called with negative interval"
+ " parameter");
+ interval = 0;
+ }
+
+ r = tor_malloc(sizeof(*r));
+ r->scrub_interval = interval;
+ r->scrubbed = 0;
+ r->horizon = horizon;
+ r->digests_seen = digestmap_new();
+
+ err:
+ return r;
+}
+
+/** See documentation for replaycache_add_and_test()
+ */
+
+STATIC int
+replaycache_add_and_test_internal(
+ time_t present, replaycache_t *r, const void *data, size_t len,
+ time_t *elapsed)
+{
+ int rv = 0;
+ char digest[DIGEST_LEN];
+ time_t *access_time;
+
+ /* sanity check */
+ if (present <= 0 || !r || !data || len == 0) {
+ log_info(LD_BUG, "replaycache_add_and_test_internal() called with stupid"
+ " parameters; please fix this.");
+ goto done;
+ }
+
+ /* compute digest */
+ crypto_digest(digest, (const char *)data, len);
+
+ /* check map */
+ access_time = digestmap_get(r->digests_seen, digest);
+
+ /* seen before? */
+ if (access_time != NULL) {
+ /*
+ * If it's far enough in the past, no hit. If the horizon is zero, we
+ * never expire.
+ */
+ if (*access_time >= present - r->horizon || r->horizon == 0) {
+ /* replay cache hit, return 1 */
+ rv = 1;
+ /* If we want to output an elapsed time, do so */
+ if (elapsed) {
+ if (present >= *access_time) {
+ *elapsed = present - *access_time;
+ } else {
+ /* We shouldn't really be seeing hits from the future, but... */
+ *elapsed = 0;
+ }
+ }
+ }
+ /*
+ * If it's ahead of the cached time, update
+ */
+ if (*access_time < present) {
+ *access_time = present;
+ }
+ } else {
+ /* No, so no hit and update the digest map with the current time */
+ access_time = tor_malloc(sizeof(*access_time));
+ *access_time = present;
+ digestmap_set(r->digests_seen, digest, access_time);
+ }
+
+ /* now scrub the cache if it's time */
+ replaycache_scrub_if_needed_internal(present, r);
+
+ done:
+ return rv;
+}
+
+/** See documentation for replaycache_scrub_if_needed()
+ */
+
+STATIC void
+replaycache_scrub_if_needed_internal(time_t present, replaycache_t *r)
+{
+ digestmap_iter_t *itr = NULL;
+ const char *digest;
+ void *valp;
+ time_t *access_time;
+
+ /* sanity check */
+ if (!r || !(r->digests_seen)) {
+ log_info(LD_BUG, "replaycache_scrub_if_needed_internal() called with"
+ " stupid parameters; please fix this.");
+ return;
+ }
+
+ /* scrub time yet? (scrubbed == 0 indicates never scrubbed before) */
+ if (present - r->scrubbed < r->scrub_interval && r->scrubbed > 0) return;
+
+ /* if we're never expiring, don't bother scrubbing */
+ if (r->horizon == 0) return;
+
+ /* okay, scrub time */
+ itr = digestmap_iter_init(r->digests_seen);
+ while (!digestmap_iter_done(itr)) {
+ digestmap_iter_get(itr, &digest, &valp);
+ access_time = (time_t *)valp;
+ /* aged out yet? */
+ if (*access_time < present - r->horizon) {
+ /* Advance the iterator and remove this one */
+ itr = digestmap_iter_next_rmv(r->digests_seen, itr);
+ /* Free the value removed */
+ tor_free(access_time);
+ } else {
+ /* Just advance the iterator */
+ itr = digestmap_iter_next(r->digests_seen, itr);
+ }
+ }
+
+ /* update scrubbed timestamp */
+ if (present > r->scrubbed) r->scrubbed = present;
+}
+
+/** Test the buffer of length len point to by data against the replay cache r;
+ * the digest of the buffer will be added to the cache at the current time,
+ * and the function will return 1 if it was already seen within the cache's
+ * horizon, or 0 otherwise.
+ */
+
+int
+replaycache_add_and_test(replaycache_t *r, const void *data, size_t len)
+{
+ return replaycache_add_and_test_internal(time(NULL), r, data, len, NULL);
+}
+
+/** Like replaycache_add_and_test(), but if it's a hit also return the time
+ * elapsed since this digest was last seen.
+ */
+
+int
+replaycache_add_test_and_elapsed(
+ replaycache_t *r, const void *data, size_t len, time_t *elapsed)
+{
+ return replaycache_add_and_test_internal(time(NULL), r, data, len, elapsed);
+}
+
+/** Scrub aged entries out of r if sufficiently long has elapsed since r was
+ * last scrubbed.
+ */
+
+void
+replaycache_scrub_if_needed(replaycache_t *r)
+{
+ replaycache_scrub_if_needed_internal(time(NULL), r);
+}
+
diff --git a/src/or/replaycache.h b/src/or/replaycache.h
new file mode 100644
index 000000000..cd713fe89
--- /dev/null
+++ b/src/or/replaycache.h
@@ -0,0 +1,66 @@
+/* Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file replaycache.h
+ * \brief Header file for replaycache.c.
+ **/
+
+#ifndef TOR_REPLAYCACHE_H
+#define TOR_REPLAYCACHE_H
+
+typedef struct replaycache_s replaycache_t;
+
+#ifdef REPLAYCACHE_PRIVATE
+
+struct replaycache_s {
+ /* Scrub interval */
+ time_t scrub_interval;
+ /* Last scrubbed */
+ time_t scrubbed;
+ /*
+ * Horizon
+ * (don't return true on digests in the cache but older than this)
+ */
+ time_t horizon;
+ /*
+ * Digest map: keys are digests, values are times the digest was last seen
+ */
+ digestmap_t *digests_seen;
+};
+
+#endif /* REPLAYCACHE_PRIVATE */
+
+/* replaycache_t free/new */
+
+void replaycache_free(replaycache_t *r);
+replaycache_t * replaycache_new(time_t horizon, time_t interval);
+
+#ifdef REPLAYCACHE_PRIVATE
+
+/*
+ * replaycache_t internal functions:
+ *
+ * These take the time to treat as the present as an argument for easy unit
+ * testing. For everything else, use the wrappers below instead.
+ */
+
+STATIC int replaycache_add_and_test_internal(
+ time_t present, replaycache_t *r, const void *data, size_t len,
+ time_t *elapsed);
+STATIC void replaycache_scrub_if_needed_internal(
+ time_t present, replaycache_t *r);
+
+#endif /* REPLAYCACHE_PRIVATE */
+
+/*
+ * replaycache_t methods
+ */
+
+int replaycache_add_and_test(replaycache_t *r, const void *data, size_t len);
+int replaycache_add_test_and_elapsed(
+ replaycache_t *r, const void *data, size_t len, time_t *elapsed);
+void replaycache_scrub_if_needed(replaycache_t *r);
+
+#endif
+
diff --git a/src/or/router.c b/src/or/router.c
index 1ace8e249..2cdbb0c8b 100644..100755
--- a/src/or/router.c
+++ b/src/or/router.c
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#define ROUTER_PRIVATE
@@ -13,6 +13,7 @@
#include "config.h"
#include "connection.h"
#include "control.h"
+#include "crypto_curve25519.h"
#include "directory.h"
#include "dirserv.h"
#include "dns.h"
@@ -27,6 +28,9 @@
#include "router.h"
#include "routerlist.h"
#include "routerparse.h"
+#include "statefile.h"
+#include "transports.h"
+#include "routerset.h"
/**
* \file router.c
@@ -51,6 +55,13 @@ static crypto_pk_t *onionkey=NULL;
/** Previous private onionskin decryption key: used to decode CREATE cells
* generated by clients that have an older version of our descriptor. */
static crypto_pk_t *lastonionkey=NULL;
+#ifdef CURVE25519_ENABLED
+/** Current private ntor secret key: used to perform the ntor handshake. */
+static curve25519_keypair_t curve25519_onion_key;
+/** Previous private ntor secret key: used to perform the ntor handshake
+ * with clients that have an older version of our descriptor. */
+static curve25519_keypair_t last_curve25519_onion_key;
+#endif
/** Private server "identity key": used to sign directory info and TLS
* certificates. Never changes. */
static crypto_pk_t *server_identitykey=NULL;
@@ -84,7 +95,7 @@ static authority_cert_t *legacy_key_certificate = NULL;
static void
set_onion_key(crypto_pk_t *k)
{
- if (onionkey && !crypto_pk_cmp_keys(onionkey, k)) {
+ if (onionkey && crypto_pk_eq_keys(onionkey, k)) {
/* k is already our onion key; free it and return */
crypto_pk_free(k);
return;
@@ -123,6 +134,55 @@ dup_onion_keys(crypto_pk_t **key, crypto_pk_t **last)
tor_mutex_release(key_lock);
}
+#ifdef CURVE25519_ENABLED
+/** Return the current secret onion key for the ntor handshake. Must only
+ * be called from the main thread. */
+static const curve25519_keypair_t *
+get_current_curve25519_keypair(void)
+{
+ return &curve25519_onion_key;
+}
+/** Return a map from KEYID (the key itself) to keypairs for use in the ntor
+ * handshake. Must only be called from the main thread. */
+di_digest256_map_t *
+construct_ntor_key_map(void)
+{
+ di_digest256_map_t *m = NULL;
+
+ dimap_add_entry(&m,
+ curve25519_onion_key.pubkey.public_key,
+ tor_memdup(&curve25519_onion_key,
+ sizeof(curve25519_keypair_t)));
+ if (!tor_mem_is_zero((const char*)
+ last_curve25519_onion_key.pubkey.public_key,
+ CURVE25519_PUBKEY_LEN)) {
+ dimap_add_entry(&m,
+ last_curve25519_onion_key.pubkey.public_key,
+ tor_memdup(&last_curve25519_onion_key,
+ sizeof(curve25519_keypair_t)));
+ }
+
+ return m;
+}
+/** Helper used to deallocate a di_digest256_map_t returned by
+ * construct_ntor_key_map. */
+static void
+ntor_key_map_free_helper(void *arg)
+{
+ curve25519_keypair_t *k = arg;
+ memwipe(k, 0, sizeof(*k));
+ tor_free(k);
+}
+/** Release all storage from a keymap returned by construct_ntor_key_map. */
+void
+ntor_key_map_free(di_digest256_map_t *map)
+{
+ if (!map)
+ return;
+ dimap_free(map, ntor_key_map_free_helper);
+}
+#endif
+
/** Return the time when the onion key was last set. This is either the time
* when the process launched, or the time of the most recent key rotation since
* the process launched.
@@ -152,12 +212,11 @@ assert_identity_keys_ok(void)
if (public_server_mode(get_options())) {
/* assert that we have set the client and server keys to be equal */
tor_assert(server_identitykey);
- tor_assert(0==crypto_pk_cmp_keys(client_identitykey, server_identitykey));
+ tor_assert(crypto_pk_eq_keys(client_identitykey, server_identitykey));
} else {
/* assert that we have set the client and server keys to be unequal */
if (server_identitykey)
- tor_assert(0!=crypto_pk_cmp_keys(client_identitykey,
- server_identitykey));
+ tor_assert(!crypto_pk_eq_keys(client_identitykey, server_identitykey));
}
}
@@ -173,11 +232,12 @@ get_server_identity_key(void)
return server_identitykey;
}
-/** Return true iff the server identity key has been set. */
+/** Return true iff we are a server and the server identity key
+ * has been set. */
int
server_identity_key_is_set(void)
{
- return server_identitykey != NULL;
+ return server_mode(get_options()) && server_identitykey != NULL;
}
/** Set the current client identity key to <b>k</b>.
@@ -251,11 +311,18 @@ void
rotate_onion_key(void)
{
char *fname, *fname_prev;
- crypto_pk_t *prkey;
+ crypto_pk_t *prkey = NULL;
or_state_t *state = get_or_state();
+#ifdef CURVE25519_ENABLED
+ curve25519_keypair_t new_curve25519_keypair;
+#endif
time_t now;
fname = get_datadir_fname2("keys", "secret_onion_key");
fname_prev = get_datadir_fname2("keys", "secret_onion_key.old");
+ if (file_status(fname) == FN_FILE) {
+ if (replace_file(fname, fname_prev))
+ goto error;
+ }
if (!(prkey = crypto_pk_new())) {
log_err(LD_GENERAL,"Error constructing rotated onion key");
goto error;
@@ -264,19 +331,38 @@ rotate_onion_key(void)
log_err(LD_BUG,"Error generating onion key");
goto error;
}
+ if (crypto_pk_write_private_key_to_filename(prkey, fname)) {
+ log_err(LD_FS,"Couldn't write generated onion key to \"%s\".", fname);
+ goto error;
+ }
+#ifdef CURVE25519_ENABLED
+ tor_free(fname);
+ tor_free(fname_prev);
+ fname = get_datadir_fname2("keys", "secret_onion_key_ntor");
+ fname_prev = get_datadir_fname2("keys", "secret_onion_key_ntor.old");
+ if (curve25519_keypair_generate(&new_curve25519_keypair, 1) < 0)
+ goto error;
if (file_status(fname) == FN_FILE) {
if (replace_file(fname, fname_prev))
goto error;
}
- if (crypto_pk_write_private_key_to_filename(prkey, fname)) {
- log_err(LD_FS,"Couldn't write generated onion key to \"%s\".", fname);
+ if (curve25519_keypair_write_to_file(&new_curve25519_keypair, fname,
+ "onion") < 0) {
+ log_err(LD_FS,"Couldn't write curve25519 onion key to \"%s\".",fname);
goto error;
}
+#endif
log_info(LD_GENERAL, "Rotating onion key");
tor_mutex_acquire(key_lock);
crypto_pk_free(lastonionkey);
lastonionkey = onionkey;
onionkey = prkey;
+#ifdef CURVE25519_ENABLED
+ memcpy(&last_curve25519_onion_key, &curve25519_onion_key,
+ sizeof(curve25519_keypair_t));
+ memcpy(&curve25519_onion_key, &new_curve25519_keypair,
+ sizeof(curve25519_keypair_t));
+#endif
now = time(NULL);
state->LastRotatedOnionKey = onionkey_set_at = now;
tor_mutex_release(key_lock);
@@ -288,6 +374,9 @@ rotate_onion_key(void)
if (prkey)
crypto_pk_free(prkey);
done:
+#ifdef CURVE25519_ENABLED
+ memwipe(&new_curve25519_keypair, 0, sizeof(new_curve25519_keypair));
+#endif
tor_free(fname);
tor_free(fname_prev);
}
@@ -303,14 +392,14 @@ init_key_from_file(const char *fname, int generate, int severity)
crypto_pk_t *prkey = NULL;
if (!(prkey = crypto_pk_new())) {
- log(severity, LD_GENERAL,"Error constructing key");
+ tor_log(severity, LD_GENERAL,"Error constructing key");
goto error;
}
switch (file_status(fname)) {
case FN_DIR:
case FN_ERROR:
- log(severity, LD_FS,"Can't read key from \"%s\"", fname);
+ tor_log(severity, LD_FS,"Can't read key from \"%s\"", fname);
goto error;
case FN_NOENT:
if (generate) {
@@ -318,8 +407,8 @@ init_key_from_file(const char *fname, int generate, int severity)
if (try_locking(get_options(), 0)<0) {
/* Make sure that --list-fingerprint only creates new keys
* if there is no possibility for a deadlock. */
- log(severity, LD_FS, "Another Tor process has locked \"%s\". Not "
- "writing any new keys.", fname);
+ tor_log(severity, LD_FS, "Another Tor process has locked \"%s\". "
+ "Not writing any new keys.", fname);
/*XXXX The 'other process' might make a key in a second or two;
* maybe we should wait for it. */
goto error;
@@ -328,16 +417,16 @@ init_key_from_file(const char *fname, int generate, int severity)
log_info(LD_GENERAL, "No key found in \"%s\"; generating fresh key.",
fname);
if (crypto_pk_generate_key(prkey)) {
- log(severity, LD_GENERAL,"Error generating onion key");
+ tor_log(severity, LD_GENERAL,"Error generating onion key");
goto error;
}
if (crypto_pk_check_key(prkey) <= 0) {
- log(severity, LD_GENERAL,"Generated key seems invalid");
+ tor_log(severity, LD_GENERAL,"Generated key seems invalid");
goto error;
}
log_info(LD_GENERAL, "Generated key seems valid");
if (crypto_pk_write_private_key_to_filename(prkey, fname)) {
- log(severity, LD_FS,
+ tor_log(severity, LD_FS,
"Couldn't write generated key to \"%s\".", fname);
goto error;
}
@@ -347,7 +436,7 @@ init_key_from_file(const char *fname, int generate, int severity)
return prkey;
case FN_FILE:
if (crypto_pk_read_private_key_from_filename(prkey, fname)) {
- log(severity, LD_GENERAL,"Error loading private key.");
+ tor_log(severity, LD_GENERAL,"Error loading private key.");
goto error;
}
return prkey;
@@ -361,6 +450,77 @@ init_key_from_file(const char *fname, int generate, int severity)
return NULL;
}
+#ifdef CURVE25519_ENABLED
+/** Load a curve25519 keypair from the file <b>fname</b>, writing it into
+ * <b>keys_out</b>. If the file isn't found and <b>generate</b> is true,
+ * create a new keypair and write it into the file. If there are errors, log
+ * them at level <b>severity</b>. Generate files using <b>tag</b> in their
+ * ASCII wrapper. */
+static int
+init_curve25519_keypair_from_file(curve25519_keypair_t *keys_out,
+ const char *fname,
+ int generate,
+ int severity,
+ const char *tag)
+{
+ switch (file_status(fname)) {
+ case FN_DIR:
+ case FN_ERROR:
+ tor_log(severity, LD_FS,"Can't read key from \"%s\"", fname);
+ goto error;
+ case FN_NOENT:
+ if (generate) {
+ if (!have_lockfile()) {
+ if (try_locking(get_options(), 0)<0) {
+ /* Make sure that --list-fingerprint only creates new keys
+ * if there is no possibility for a deadlock. */
+ tor_log(severity, LD_FS, "Another Tor process has locked \"%s\". "
+ "Not writing any new keys.", fname);
+ /*XXXX The 'other process' might make a key in a second or two;
+ * maybe we should wait for it. */
+ goto error;
+ }
+ }
+ log_info(LD_GENERAL, "No key found in \"%s\"; generating fresh key.",
+ fname);
+ if (curve25519_keypair_generate(keys_out, 1) < 0)
+ goto error;
+ if (curve25519_keypair_write_to_file(keys_out, fname, tag)<0) {
+ tor_log(severity, LD_FS,
+ "Couldn't write generated key to \"%s\".", fname);
+ memset(keys_out, 0, sizeof(*keys_out));
+ goto error;
+ }
+ } else {
+ log_info(LD_GENERAL, "No key found in \"%s\"", fname);
+ }
+ return 0;
+ case FN_FILE:
+ {
+ char *tag_in=NULL;
+ if (curve25519_keypair_read_from_file(keys_out, &tag_in, fname) < 0) {
+ tor_log(severity, LD_GENERAL,"Error loading private key.");
+ tor_free(tag_in);
+ goto error;
+ }
+ if (!tag_in || strcmp(tag_in, tag)) {
+ tor_log(severity, LD_GENERAL,"Unexpected tag %s on private key.",
+ escaped(tag_in));
+ tor_free(tag_in);
+ goto error;
+ }
+ tor_free(tag_in);
+ return 0;
+ }
+ default:
+ tor_assert(0);
+ }
+
+ error:
+ return -1;
+}
+#endif
+
/** Try to load the vote-signing private key and certificate for being a v3
* directory authority, and make sure they match. If <b>legacy</b>, load a
* legacy key/cert set for emergency key migration; otherwise load the regular
@@ -397,7 +557,7 @@ load_authority_keyset(int legacy, crypto_pk_t **key_out,
log_warn(LD_DIR, "Unable to parse certificate in %s", fname);
goto done;
}
- if (crypto_pk_cmp_keys(signing_key, parsed->signing_key) != 0) {
+ if (!crypto_pk_eq_keys(signing_key, parsed->signing_key)) {
log_warn(LD_DIR, "Stored signing key does not match signing key in "
"certificate");
goto done;
@@ -472,14 +632,14 @@ v3_authority_check_key_expiry(void)
return;
if (time_left <= 0) {
- log(badness, LD_DIR, "Your v3 authority certificate has expired."
- " Generate a new one NOW.");
+ tor_log(badness, LD_DIR, "Your v3 authority certificate has expired."
+ " Generate a new one NOW.");
} else if (time_left <= 24*60*60) {
- log(badness, LD_DIR, "Your v3 authority certificate expires in %d hours;"
- " Generate a new one NOW.", time_left/(60*60));
+ tor_log(badness, LD_DIR, "Your v3 authority certificate expires in %d "
+ "hours; Generate a new one NOW.", time_left/(60*60));
} else {
- log(badness, LD_DIR, "Your v3 authority certificate expires in %d days;"
- " Generate a new one soon.", time_left/(24*60*60));
+ tor_log(badness, LD_DIR, "Your v3 authority certificate expires in %d "
+ "days; Generate a new one soon.", time_left/(24*60*60));
}
last_warned = now;
}
@@ -489,11 +649,96 @@ v3_authority_check_key_expiry(void)
int
router_initialize_tls_context(void)
{
- return tor_tls_context_init(public_server_mode(get_options()),
+ unsigned int flags = 0;
+ const or_options_t *options = get_options();
+ int lifetime = options->SSLKeyLifetime;
+ if (public_server_mode(options))
+ flags |= TOR_TLS_CTX_IS_PUBLIC_SERVER;
+ if (options->TLSECGroup) {
+ if (!strcasecmp(options->TLSECGroup, "P256"))
+ flags |= TOR_TLS_CTX_USE_ECDHE_P256;
+ else if (!strcasecmp(options->TLSECGroup, "P224"))
+ flags |= TOR_TLS_CTX_USE_ECDHE_P224;
+ }
+ if (!lifetime) { /* we should guess a good ssl cert lifetime */
+
+ /* choose between 5 and 365 days, and round to the day */
+ lifetime = 5*24*3600 + crypto_rand_int(361*24*3600);
+ lifetime -= lifetime % (24*3600);
+
+ if (crypto_rand_int(2)) {
+ /* Half the time we expire at midnight, and half the time we expire
+ * one second before midnight. (Some CAs wobble their expiry times a
+ * bit in practice, perhaps to reduce collision attacks; see ticket
+ * 8443 for details about observed certs in the wild.) */
+ lifetime--;
+ }
+ }
+
+ /* It's ok to pass lifetime in as an unsigned int, since
+ * config_parse_interval() checked it. */
+ return tor_tls_context_init(flags,
get_tlsclient_identity_key(),
- server_mode(get_options()) ?
+ server_mode(options) ?
get_server_identity_key() : NULL,
- MAX_SSL_KEY_LIFETIME_ADVERTISED);
+ (unsigned int)lifetime);
+}
+
+/** Compute fingerprint (or hashed fingerprint if hashed is 1) and write
+ * it to 'fingerprint' (or 'hashed-fingerprint'). Return 0 on success, or
+ * -1 if Tor should die,
+ */
+STATIC int
+router_write_fingerprint(int hashed)
+{
+ char *keydir = NULL, *cp = NULL;
+ const char *fname = hashed ? "hashed-fingerprint" :
+ "fingerprint";
+ char fingerprint[FINGERPRINT_LEN+1];
+ const or_options_t *options = get_options();
+ char *fingerprint_line = NULL;
+ int result = -1;
+
+ keydir = get_datadir_fname(fname);
+ log_info(LD_GENERAL,"Dumping %sfingerprint to \"%s\"...",
+ hashed ? "hashed " : "", keydir);
+ if (!hashed) {
+ if (crypto_pk_get_fingerprint(get_server_identity_key(),
+ fingerprint, 0) < 0) {
+ log_err(LD_GENERAL,"Error computing fingerprint");
+ goto done;
+ }
+ } else {
+ if (crypto_pk_get_hashed_fingerprint(get_server_identity_key(),
+ fingerprint) < 0) {
+ log_err(LD_GENERAL,"Error computing hashed fingerprint");
+ goto done;
+ }
+ }
+
+ tor_asprintf(&fingerprint_line, "%s %s\n", options->Nickname, fingerprint);
+
+ /* Check whether we need to write the (hashed-)fingerprint file. */
+
+ cp = read_file_to_str(keydir, RFTS_IGNORE_MISSING, NULL);
+ if (!cp || strcmp(cp, fingerprint_line)) {
+ if (write_str_to_file(keydir, fingerprint_line, 0)) {
+ log_err(LD_FS, "Error writing %sfingerprint line to file",
+ hashed ? "hashed " : "");
+ goto done;
+ }
+ }
+
+ log_notice(LD_GENERAL, "Your Tor %s identity key fingerprint is '%s %s'",
+ hashed ? "bridge's hashed" : "server's", options->Nickname,
+ fingerprint);
+
+ result = 0;
+ done:
+ tor_free(cp);
+ tor_free(keydir);
+ tor_free(fingerprint_line);
+ return result;
}
/** Initialize all OR private keys, and the TLS context, as necessary.
@@ -504,18 +749,14 @@ int
init_keys(void)
{
char *keydir;
- char fingerprint[FINGERPRINT_LEN+1];
- /*nickname<space>fp\n\0 */
- char fingerprint_line[MAX_NICKNAME_LEN+FINGERPRINT_LEN+3];
const char *mydesc;
crypto_pk_t *prkey;
char digest[DIGEST_LEN];
char v3_digest[DIGEST_LEN];
- char *cp;
const or_options_t *options = get_options();
dirinfo_type_t type;
time_t now = time(NULL);
- trusted_dir_server_t *ds;
+ dir_server_t *ds;
int v3_digest_set = 0;
authority_cert_t *cert = NULL;
@@ -628,12 +869,35 @@ init_keys(void)
keydir = get_datadir_fname2("keys", "secret_onion_key.old");
if (!lastonionkey && file_status(keydir) == FN_FILE) {
- prkey = init_key_from_file(keydir, 1, LOG_ERR);
+ prkey = init_key_from_file(keydir, 1, LOG_ERR); /* XXXX Why 1? */
if (prkey)
lastonionkey = prkey;
}
tor_free(keydir);
+#ifdef CURVE25519_ENABLED
+ {
+ /* 2b. Load curve25519 onion keys. */
+ int r;
+ keydir = get_datadir_fname2("keys", "secret_onion_key_ntor");
+ r = init_curve25519_keypair_from_file(&curve25519_onion_key,
+ keydir, 1, LOG_ERR, "onion");
+ tor_free(keydir);
+ if (r<0)
+ return -1;
+
+ keydir = get_datadir_fname2("keys", "secret_onion_key_ntor.old");
+ if (tor_mem_is_zero((const char *)
+ last_curve25519_onion_key.pubkey.public_key,
+ CURVE25519_PUBKEY_LEN) &&
+ file_status(keydir) == FN_FILE) {
+ init_curve25519_keypair_from_file(&last_curve25519_onion_key,
+ keydir, 0, LOG_ERR, "onion");
+ }
+ tor_free(keydir);
+ }
+#endif
+
/* 3. Initialize link key and TLS context. */
if (router_initialize_tls_context() < 0) {
log_err(LD_GENERAL,"Error initializing TLS context");
@@ -671,47 +935,23 @@ init_keys(void)
* we don't really need new keys yet so the descriptor doesn't
* change and the old one is still fresh. */
log_info(LD_GENERAL, "Couldn't add own descriptor to directory "
- "after key init: %s. This is usually not a problem.",
+ "after key init: %s This is usually not a problem.",
m?m:"<unknown error>");
}
}
}
}
- /* 5. Dump fingerprint to 'fingerprint' */
- keydir = get_datadir_fname("fingerprint");
- log_info(LD_GENERAL,"Dumping fingerprint to \"%s\"...",keydir);
- if (crypto_pk_get_fingerprint(get_server_identity_key(),
- fingerprint, 0) < 0) {
- log_err(LD_GENERAL,"Error computing fingerprint");
- tor_free(keydir);
+ /* 5. Dump fingerprint and possibly hashed fingerprint to files. */
+ if (router_write_fingerprint(0)) {
+ log_err(LD_FS, "Error writing fingerprint to file");
return -1;
}
- tor_assert(strlen(options->Nickname) <= MAX_NICKNAME_LEN);
- if (tor_snprintf(fingerprint_line, sizeof(fingerprint_line),
- "%s %s\n",options->Nickname, fingerprint) < 0) {
- log_err(LD_GENERAL,"Error writing fingerprint line");
- tor_free(keydir);
+ if (!public_server_mode(options) && router_write_fingerprint(1)) {
+ log_err(LD_FS, "Error writing hashed fingerprint to file");
return -1;
}
- /* Check whether we need to write the fingerprint file. */
- cp = NULL;
- if (file_status(keydir) == FN_FILE)
- cp = read_file_to_str(keydir, 0, NULL);
- if (!cp || strcmp(cp, fingerprint_line)) {
- if (write_str_to_file(keydir, fingerprint_line, 0)) {
- log_err(LD_FS, "Error writing fingerprint line to file");
- tor_free(keydir);
- tor_free(cp);
- return -1;
- }
- }
- tor_free(cp);
- tor_free(keydir);
- log(LOG_NOTICE, LD_GENERAL,
- "Your Tor server's identity key fingerprint is '%s %s'",
- options->Nickname, fingerprint);
if (!authdir_mode(options))
return 0;
/* 6. [authdirserver only] load approved-routers file */
@@ -721,44 +961,43 @@ init_keys(void)
}
/* 6b. [authdirserver only] add own key to approved directories. */
crypto_pk_get_digest(get_server_identity_key(), digest);
- type = ((options->V1AuthoritativeDir ? V1_DIRINFO : NO_DIRINFO) |
- (options->V2AuthoritativeDir ? V2_DIRINFO : NO_DIRINFO) |
- (options->V3AuthoritativeDir ?
+ type = ((options->V3AuthoritativeDir ?
(V3_DIRINFO|MICRODESC_DIRINFO|EXTRAINFO_DIRINFO) : NO_DIRINFO) |
- (options->BridgeAuthoritativeDir ? BRIDGE_DIRINFO : NO_DIRINFO) |
- (options->HSAuthoritativeDir ? HIDSERV_DIRINFO : NO_DIRINFO));
+ (options->BridgeAuthoritativeDir ? BRIDGE_DIRINFO : NO_DIRINFO));
ds = router_get_trusteddirserver_by_digest(digest);
if (!ds) {
- ds = add_trusted_dir_server(options->Nickname, NULL,
+ ds = trusted_dir_server_new(options->Nickname, NULL,
router_get_advertised_dir_port(options, 0),
router_get_advertised_or_port(options),
digest,
v3_digest,
- type);
+ type, 0.0);
if (!ds) {
log_err(LD_GENERAL,"We want to be a directory authority, but we "
"couldn't add ourselves to the authority list. Failing.");
return -1;
}
+ dir_server_add(ds);
}
if (ds->type != type) {
log_warn(LD_DIR, "Configured authority type does not match authority "
- "type in DirServer list. Adjusting. (%d v %d)",
+ "type in DirAuthority list. Adjusting. (%d v %d)",
type, ds->type);
ds->type = type;
}
if (v3_digest_set && (ds->type & V3_DIRINFO) &&
tor_memneq(v3_digest, ds->v3_identity_digest, DIGEST_LEN)) {
log_warn(LD_DIR, "V3 identity key does not match identity declared in "
- "DirServer line. Adjusting.");
+ "DirAuthority line. Adjusting.");
memcpy(ds->v3_identity_digest, v3_digest, DIGEST_LEN);
}
if (cert) { /* add my own cert to the list of known certs */
log_info(LD_DIR, "adding my own v3 cert");
if (trusted_dirs_load_certs_from_string(
- cert->cache_info.signed_descriptor_body, 0, 0)<0) {
+ cert->cache_info.signed_descriptor_body,
+ TRUSTED_DIRS_CERTS_SRC_SELF, 0)<0) {
log_warn(LD_DIR, "Unable to parse my own v3 cert! Failing.");
return -1;
}
@@ -868,10 +1107,10 @@ decide_to_advertise_dirport(const or_options_t *options, uint16_t dir_port)
if (advertising != new_choice) {
if (new_choice == 1) {
- log(LOG_NOTICE, LD_DIR, "Advertising DirPort as %d", dir_port);
+ log_notice(LD_DIR, "Advertising DirPort as %d", dir_port);
} else {
tor_assert(reason);
- log(LOG_NOTICE, LD_DIR, "Not advertising DirPort (Reason: %s)", reason);
+ log_notice(LD_DIR, "Not advertising DirPort (Reason: %s)", reason);
}
advertising = new_choice;
}
@@ -879,6 +1118,22 @@ decide_to_advertise_dirport(const or_options_t *options, uint16_t dir_port)
return advertising ? dir_port : 0;
}
+/** Allocate and return a new extend_info_t that can be used to build
+ * a circuit to or through the router <b>r</b>. Use the primary
+ * address of the router unless <b>for_direct_connect</b> is true, in
+ * which case the preferred address is used instead. */
+static extend_info_t *
+extend_info_from_router(const routerinfo_t *r)
+{
+ tor_addr_port_t ap;
+ tor_assert(r);
+
+ router_get_prim_orport(r, &ap);
+ return extend_info_new(r->nickname, r->cache_info.identity_digest,
+ r->onion_pkey, r->onion_curve25519_pkey,
+ &ap.addr, ap.port);
+}
+
/** Some time has passed, or we just got new directory information.
* See if we currently believe our ORPort or DirPort to be
* unreachable. If so, launch a new test for it.
@@ -907,25 +1162,21 @@ consider_testing_reachability(int test_or, int test_dir)
if (test_or || test_dir) {
#define SELF_EXCLUDED_WARN_INTERVAL 3600
static ratelim_t warning_limit=RATELIM_INIT(SELF_EXCLUDED_WARN_INTERVAL);
- char *msg;
- if ((msg = rate_limit_log(&warning_limit, approx_time()))) {
- log_warn(LD_CIRC, "Can't peform self-tests for this relay: we have "
+ log_fn_ratelim(&warning_limit, LOG_WARN, LD_CIRC,
+ "Can't peform self-tests for this relay: we have "
"listed ourself in ExcludeNodes, and StrictNodes is set. "
"We cannot learn whether we are usable, and will not "
- "be able to advertise ourself.%s", msg);
- tor_free(msg);
- }
+ "be able to advertise ourself.");
}
return;
}
if (test_or && (!orport_reachable || !circuit_enough_testing_circs())) {
- extend_info_t *ei;
+ extend_info_t *ei = extend_info_from_router(me);
+ /* XXX IPv6 self testing */
log_info(LD_CIRC, "Testing %s of my ORPort: %s:%d.",
!orport_reachable ? "reachability" : "bandwidth",
- me->address, me->or_port);
- /* XXX IPv6 self testing IPv6 orports will need pref_addr */
- ei = extend_info_from_router(me, 0);
+ fmt_addr32(me->addr), me->or_port);
circuit_launch_by_extend_info(CIRCUIT_PURPOSE_TESTING, ei,
CIRCLAUNCH_NEED_CAPACITY|CIRCLAUNCH_IS_INTERNAL);
extend_info_free(ei);
@@ -937,13 +1188,12 @@ consider_testing_reachability(int test_or, int test_dir)
CONN_TYPE_DIR, &addr, me->dir_port,
DIR_PURPOSE_FETCH_SERVERDESC)) {
/* ask myself, via tor, for my server descriptor. */
- directory_initiate_command(me->address, &addr,
+ directory_initiate_command(&addr,
me->or_port, me->dir_port,
- 0, /* does not matter */
- 0, me->cache_info.identity_digest,
+ me->cache_info.identity_digest,
DIR_PURPOSE_FETCH_SERVERDESC,
ROUTER_PURPOSE_GENERAL,
- 1, "authority.z", NULL, 0, 0);
+ DIRIND_ANON_DIRPORT, "authority.z", NULL, 0, 0);
}
}
@@ -953,15 +1203,17 @@ router_orport_found_reachable(void)
{
const routerinfo_t *me = router_get_my_routerinfo();
if (!can_reach_or_port && me) {
+ char *address = tor_dup_ip(me->addr);
log_notice(LD_OR,"Self-testing indicates your ORPort is reachable from "
"the outside. Excellent.%s",
- get_options()->_PublishServerDescriptor != NO_DIRINFO ?
+ get_options()->PublishServerDescriptor_ != NO_DIRINFO ?
" Publishing server descriptor." : "");
can_reach_or_port = 1;
mark_my_descriptor_dirty("ORPort found reachable");
control_event_server_status(LOG_NOTICE,
"REACHABILITY_SUCCEEDED ORADDRESS=%s:%d",
- me->address, me->or_port);
+ address, me->or_port);
+ tor_free(address);
}
}
@@ -971,6 +1223,7 @@ router_dirport_found_reachable(void)
{
const routerinfo_t *me = router_get_my_routerinfo();
if (!can_reach_dir_port && me) {
+ char *address = tor_dup_ip(me->addr);
log_notice(LD_DIRSERV,"Self-testing indicates your DirPort is reachable "
"from the outside. Excellent.");
can_reach_dir_port = 1;
@@ -978,7 +1231,8 @@ router_dirport_found_reachable(void)
mark_my_descriptor_dirty("DirPort found reachable");
control_event_server_status(LOG_NOTICE,
"REACHABILITY_SUCCEEDED DIRADDRESS=%s:%d",
- me->address, me->dir_port);
+ address, me->dir_port);
+ tor_free(address);
}
}
@@ -987,7 +1241,8 @@ router_dirport_found_reachable(void)
void
router_perform_bandwidth_test(int num_circs, time_t now)
{
- int num_cells = (int)(get_options()->BandwidthRate * 10 / CELL_NETWORK_SIZE);
+ int num_cells = (int)(get_options()->BandwidthRate * 10 /
+ CELL_MAX_NETWORK_SIZE);
int max_cells = num_cells < CIRCWINDOW_START ?
num_cells : CIRCWINDOW_START;
int cells_per_circuit = max_cells / num_circs;
@@ -998,9 +1253,9 @@ router_perform_bandwidth_test(int num_circs, time_t now)
CIRCUIT_PURPOSE_TESTING))) {
/* dump cells_per_circuit drop cells onto this circ */
int i = cells_per_circuit;
- if (circ->_base.state != CIRCUIT_STATE_OPEN)
+ if (circ->base_.state != CIRCUIT_STATE_OPEN)
continue;
- circ->_base.timestamp_dirty = now;
+ circ->base_.timestamp_dirty = now;
while (i-- > 0) {
if (relay_send_command_from_edge(0, TO_CIRCUIT(circ),
RELAY_COMMAND_DROP,
@@ -1012,7 +1267,8 @@ router_perform_bandwidth_test(int num_circs, time_t now)
}
/** Return true iff our network is in some sense disabled: either we're
- * hibernating, entering hibernation, or */
+ * hibernating, entering hibernation, or the network is turned off with
+ * DisableNetwork. */
int
net_is_disabled(void)
{
@@ -1027,22 +1283,6 @@ authdir_mode(const or_options_t *options)
{
return options->AuthoritativeDir != 0;
}
-/** Return true iff we believe ourselves to be a v1 authoritative
- * directory server.
- */
-int
-authdir_mode_v1(const or_options_t *options)
-{
- return authdir_mode(options) && options->V1AuthoritativeDir != 0;
-}
-/** Return true iff we believe ourselves to be a v2 authoritative
- * directory server.
- */
-int
-authdir_mode_v2(const or_options_t *options)
-{
- return authdir_mode(options) && options->V2AuthoritativeDir != 0;
-}
/** Return true iff we believe ourselves to be a v3 authoritative
* directory server.
*/
@@ -1051,13 +1291,11 @@ authdir_mode_v3(const or_options_t *options)
{
return authdir_mode(options) && options->V3AuthoritativeDir != 0;
}
-/** Return true iff we are a v1, v2, or v3 directory authority. */
+/** Return true iff we are a v3 directory authority. */
int
authdir_mode_any_main(const or_options_t *options)
{
- return options->V1AuthoritativeDir ||
- options->V2AuthoritativeDir ||
- options->V3AuthoritativeDir;
+ return options->V3AuthoritativeDir;
}
/** Return true if we believe ourselves to be any kind of
* authoritative directory beyond just a hidserv authority. */
@@ -1111,8 +1349,8 @@ authdir_mode_bridge(const or_options_t *options)
/** Return true iff we are trying to be a server.
*/
-int
-server_mode(const or_options_t *options)
+MOCK_IMPL(int,
+server_mode,(const or_options_t *options))
{
if (options->ClientOnly) return 0;
/* XXXX024 I believe we can kill off ORListenAddress here.*/
@@ -1121,8 +1359,8 @@ server_mode(const or_options_t *options)
/** Return true iff we are trying to be a non-bridge server.
*/
-int
-public_server_mode(const or_options_t *options)
+MOCK_IMPL(int,
+public_server_mode,(const or_options_t *options))
{
if (!server_mode(options)) return 0;
return (!options->BridgeRelay);
@@ -1194,7 +1432,7 @@ decide_if_publishable_server(void)
if (options->ClientOnly)
return 0;
- if (options->_PublishServerDescriptor == NO_DIRINFO)
+ if (options->PublishServerDescriptor_ == NO_DIRINFO)
return 0;
if (!server_mode(options))
return 0;
@@ -1236,13 +1474,18 @@ consider_publishable_server(int force)
/** XXX not a very good interface. it's not reliable when there are
multiple listeners. */
uint16_t
-router_get_active_listener_port_by_type(int listener_type)
+router_get_active_listener_port_by_type_af(int listener_type,
+ sa_family_t family)
{
/* Iterate all connections, find one of the right kind and return
the port. Not very sophisticated or fast, but effective. */
- const connection_t *c = connection_get_by_type(listener_type);
- if (c)
- return c->port;
+ smartlist_t *conns = get_connection_array();
+ SMARTLIST_FOREACH_BEGIN(conns, connection_t *, conn) {
+ if (conn->type == listener_type && !conn->marked_for_close &&
+ conn->socket_family == family) {
+ return conn->port;
+ }
+ } SMARTLIST_FOREACH_END(conn);
return 0;
}
@@ -1254,13 +1497,24 @@ router_get_active_listener_port_by_type(int listener_type)
uint16_t
router_get_advertised_or_port(const or_options_t *options)
{
- int port = get_primary_or_port();
+ return router_get_advertised_or_port_by_af(options, AF_INET);
+}
+
+/** As router_get_advertised_or_port(), but allows an address family argument.
+ */
+uint16_t
+router_get_advertised_or_port_by_af(const or_options_t *options,
+ sa_family_t family)
+{
+ int port = get_first_advertised_port_by_type_af(CONN_TYPE_OR_LISTENER,
+ family);
(void)options;
/* If the port is in 'auto' mode, we have to use
router_get_listener_port_by_type(). */
if (port == CFG_AUTO_PORT)
- return router_get_active_listener_port_by_type(CONN_TYPE_OR_LISTENER);
+ return router_get_active_listener_port_by_type_af(CONN_TYPE_OR_LISTENER,
+ family);
return port;
}
@@ -1280,7 +1534,8 @@ router_get_advertised_dir_port(const or_options_t *options, uint16_t dirport)
return dirport;
if (dirport_configured == CFG_AUTO_PORT)
- return router_get_active_listener_port_by_type(CONN_TYPE_DIR_LISTENER);
+ return router_get_active_listener_port_by_type_af(CONN_TYPE_DIR_LISTENER,
+ AF_INET);
return dirport_configured;
}
@@ -1315,7 +1570,7 @@ router_upload_dir_desc_to_dirservers(int force)
extrainfo_t *ei;
char *msg;
size_t desc_len, extra_len = 0, total_len;
- dirinfo_type_t auth = get_options()->_PublishServerDescriptor;
+ dirinfo_type_t auth = get_options()->PublishServerDescriptor_;
ri = router_get_my_routerinfo();
if (!ri) {
@@ -1355,22 +1610,34 @@ router_upload_dir_desc_to_dirservers(int force)
* conn. Return 0 if we accept; non-0 if we reject.
*/
int
-router_compare_to_my_exit_policy(edge_connection_t *conn)
+router_compare_to_my_exit_policy(const tor_addr_t *addr, uint16_t port)
{
if (!router_get_my_routerinfo()) /* make sure desc_routerinfo exists */
return -1;
/* make sure it's resolved to something. this way we can't get a
'maybe' below. */
- if (tor_addr_is_null(&conn->_base.addr))
+ if (tor_addr_is_null(addr))
return -1;
- /* XXXX IPv6 */
- if (tor_addr_family(&conn->_base.addr) != AF_INET)
+ /* look at desc_routerinfo->exit_policy for both the v4 and the v6
+ * policies. The exit_policy field in desc_routerinfo is a bit unusual,
+ * in that it contains IPv6 and IPv6 entries. We don't want to look
+ * at desc_routerinfio->ipv6_exit_policy, since that's a port summary. */
+ if ((tor_addr_family(addr) == AF_INET ||
+ tor_addr_family(addr) == AF_INET6)) {
+ return compare_tor_addr_to_addr_policy(addr, port,
+ desc_routerinfo->exit_policy) != ADDR_POLICY_ACCEPTED;
+#if 0
+ } else if (tor_addr_family(addr) == AF_INET6) {
+ return get_options()->IPv6Exit &&
+ desc_routerinfo->ipv6_exit_policy &&
+ compare_tor_addr_to_short_policy(addr, port,
+ desc_routerinfo->ipv6_exit_policy) != ADDR_POLICY_ACCEPTED;
+#endif
+ } else {
return -1;
-
- return compare_tor_addr_to_addr_policy(&conn->_base.addr, conn->_base.port,
- desc_routerinfo->exit_policy) != ADDR_POLICY_ACCEPTED;
+ }
}
/** Return true iff my exit policy is reject *:*. Return -1 if we don't
@@ -1393,6 +1660,13 @@ router_digest_is_me(const char *digest)
tor_memeq(server_identitykey_digest, digest, DIGEST_LEN));
}
+/** Return my identity digest. */
+const uint8_t *
+router_get_my_id_digest(void)
+{
+ return (const uint8_t *)server_identitykey_digest;
+}
+
/** Return true iff I'm a server and <b>digest</b> is equal to
* my identity digest. */
int
@@ -1414,22 +1688,10 @@ router_is_me(const routerinfo_t *router)
return router_digest_is_me(router->cache_info.identity_digest);
}
-/** Return true iff <b>fp</b> is a hex fingerprint of my identity digest. */
-int
-router_fingerprint_is_me(const char *fp)
-{
- char digest[DIGEST_LEN];
- if (strlen(fp) == HEX_DIGEST_LEN &&
- base16_decode(digest, sizeof(digest), fp, HEX_DIGEST_LEN) == 0)
- return router_digest_is_me(digest);
-
- return 0;
-}
-
/** Return a routerinfo for this OR, rebuilding a fresh one if
* necessary. Return NULL on error, or if called on an OP. */
-const routerinfo_t *
-router_get_my_routerinfo(void)
+MOCK_IMPL(const routerinfo_t *,
+router_get_my_routerinfo,(void))
{
if (!server_mode(get_options()))
return NULL;
@@ -1488,7 +1750,9 @@ static int router_guess_address_from_dir_headers(uint32_t *guess);
int
router_pick_published_address(const or_options_t *options, uint32_t *addr)
{
- if (resolve_my_address(LOG_INFO, options, addr, NULL) < 0) {
+ *addr = get_last_resolved_addr();
+ if (!*addr &&
+ resolve_my_address(LOG_INFO, options, addr, NULL, NULL) < 0) {
log_info(LD_CONFIG, "Could not determine our address locally. "
"Checking if directory headers provide any hints.");
if (router_guess_address_from_dir_headers(addr) < 0) {
@@ -1531,7 +1795,6 @@ router_rebuild_descriptor(int force)
ri = tor_malloc_zero(sizeof(routerinfo_t));
ri->cache_info.routerlist_index = -1;
- ri->address = tor_dup_ip(addr);
ri->nickname = tor_strdup(options->Nickname);
ri->addr = addr;
ri->or_port = router_get_advertised_or_port(options);
@@ -1539,13 +1802,19 @@ router_rebuild_descriptor(int force)
ri->cache_info.published_on = time(NULL);
ri->onion_pkey = crypto_pk_dup_key(get_onion_key()); /* must invoke from
* main thread */
- if (options->BridgeRelay) {
- /* For now, only bridges advertise an ipv6 or-address. And only one. */
+#ifdef CURVE25519_ENABLED
+ ri->onion_curve25519_pkey =
+ tor_memdup(&get_current_curve25519_keypair()->pubkey,
+ sizeof(curve25519_public_key_t));
+#endif
+
+ /* For now, at most one IPv6 or-address is being advertised. */
+ {
const port_cfg_t *ipv6_orport = NULL;
SMARTLIST_FOREACH_BEGIN(get_configured_ports(), const port_cfg_t *, p) {
if (p->type == CONN_TYPE_OR_LISTENER &&
! p->no_advertise &&
- ! p->ipv4_only &&
+ ! p->bind_ipv4_only &&
tor_addr_family(&p->addr) == AF_INET6) {
if (! tor_addr_is_internal(&p->addr, 0)) {
ipv6_orport = p;
@@ -1565,6 +1834,7 @@ router_rebuild_descriptor(int force)
ri->ipv6_orport = ipv6_orport->port;
}
}
+
ri->identity_pkey = crypto_pk_dup_key(get_server_identity_key());
if (crypto_pk_get_digest(ri->identity_pkey,
ri->cache_info.identity_digest)<0) {
@@ -1587,17 +1857,20 @@ router_rebuild_descriptor(int force)
policies_exit_policy_append_reject_star(&ri->exit_policy);
} else {
policies_parse_exit_policy(options->ExitPolicy, &ri->exit_policy,
+ options->IPv6Exit,
options->ExitPolicyRejectPrivate,
- ri->address, !options->BridgeRelay);
+ ri->addr, !options->BridgeRelay);
}
ri->policy_is_reject_star =
- policy_is_reject_star(ri->exit_policy);
+ policy_is_reject_star(ri->exit_policy, AF_INET) &&
+ policy_is_reject_star(ri->exit_policy, AF_INET6);
-#if 0
- /* XXXX NM NM I belive this is safe to remove */
- if (authdir_mode(options))
- ri->is_valid = ri->is_named = 1; /* believe in yourself */
-#endif
+ if (options->IPv6Exit) {
+ char *p_tmp = policy_summarize(ri->exit_policy, AF_INET6);
+ if (p_tmp)
+ ri->ipv6_exit_policy = parse_short_policy(p_tmp);
+ tor_free(p_tmp);
+ }
if (options->MyFamily && ! options->BridgeRelay) {
smartlist_t *family;
@@ -1615,7 +1888,7 @@ router_rebuild_descriptor(int force)
member = node_get_by_nickname(name, 1);
if (!member) {
int is_legal = is_legal_nickname_or_hexdigest(name);
- if (!smartlist_string_isin(warned_nonexistent_family, name) &&
+ if (!smartlist_contains_string(warned_nonexistent_family, name) &&
!is_legal_hexdigest(name)) {
if (is_legal)
log_warn(LD_CONFIG,
@@ -1641,7 +1914,7 @@ router_rebuild_descriptor(int force)
base16_encode(fp+1,HEX_DIGEST_LEN+1,
member->identity, DIGEST_LEN);
smartlist_add(ri->declared_family, fp);
- if (smartlist_string_isin(warned_nonexistent_family, name))
+ if (smartlist_contains_string(warned_nonexistent_family, name))
smartlist_string_remove(warned_nonexistent_family, name);
}
skip:
@@ -1684,9 +1957,8 @@ router_rebuild_descriptor(int force)
/* ri was allocated with tor_malloc_zero, so there is no need to
* zero ri->cache_info.extra_info_digest here. */
}
- ri->cache_info.signed_descriptor_body = tor_malloc(8192);
- if (router_dump_router_to_string(ri->cache_info.signed_descriptor_body, 8192,
- ri, get_server_identity_key()) < 0) {
+ if (! (ri->cache_info.signed_descriptor_body = router_dump_router_to_string(
+ ri, get_server_identity_key()))) {
log_warn(LD_BUG, "Couldn't generate router descriptor.");
routerinfo_free(ri);
extrainfo_free(ei);
@@ -1783,7 +2055,7 @@ void
mark_my_descriptor_dirty(const char *reason)
{
const or_options_t *options = get_options();
- if (server_mode(options) && options->_PublishServerDescriptor)
+ if (server_mode(options) && options->PublishServerDescriptor_)
log_info(LD_OR, "Decided to publish new relay descriptor: %s", reason);
desc_clean_since = 0;
if (!desc_dirty_reason)
@@ -1853,6 +2125,9 @@ check_descriptor_ipaddress_changed(time_t now)
{
uint32_t prev, cur;
const or_options_t *options = get_options();
+ const char *method = NULL;
+ char *hostname = NULL;
+
(void) now;
if (!desc_routerinfo)
@@ -1860,18 +2135,29 @@ check_descriptor_ipaddress_changed(time_t now)
/* XXXX ipv6 */
prev = desc_routerinfo->addr;
- if (resolve_my_address(LOG_INFO, options, &cur, NULL) < 0) {
+ if (resolve_my_address(LOG_INFO, options, &cur, &method, &hostname) < 0) {
log_info(LD_CONFIG,"options->Address didn't resolve into an IP.");
return;
}
if (prev != cur) {
+ char *source;
tor_addr_t tmp_prev, tmp_cur;
+
tor_addr_from_ipv4h(&tmp_prev, prev);
tor_addr_from_ipv4h(&tmp_cur, cur);
- log_addr_has_changed(LOG_NOTICE, &tmp_prev, &tmp_cur, "resolve");
+
+ tor_asprintf(&source, "METHOD=%s%s%s", method,
+ hostname ? " HOSTNAME=" : "",
+ hostname ? hostname : "");
+
+ log_addr_has_changed(LOG_NOTICE, &tmp_prev, &tmp_cur, source);
+ tor_free(source);
+
ip_address_changed(0);
}
+
+ tor_free(hostname);
}
/** The most recently guessed value of our IP address, based on directory
@@ -1905,7 +2191,9 @@ router_new_address_suggestion(const char *suggestion,
}
/* XXXX ipv6 */
- if (resolve_my_address(LOG_INFO, options, &cur, NULL) >= 0) {
+ cur = get_last_resolved_addr();
+ if (cur ||
+ resolve_my_address(LOG_INFO, options, &cur, NULL, NULL) >= 0) {
/* We're all set -- we already know our address. Great. */
tor_addr_from_ipv4h(&last_guessed_ip, cur); /* store it in case we
need it later */
@@ -1915,7 +2203,7 @@ router_new_address_suggestion(const char *suggestion,
/* Don't believe anybody who says our IP is, say, 127.0.0.1. */
return;
}
- if (tor_addr_eq(&d_conn->_base.addr, &addr)) {
+ if (tor_addr_eq(&d_conn->base_.addr, &addr)) {
/* Don't believe anybody who says our IP is their IP. */
log_debug(LD_DIR, "A directory server told us our IP address is %s, "
"but he's just reporting his own IP address. Ignoring.",
@@ -1931,7 +2219,7 @@ router_new_address_suggestion(const char *suggestion,
"EXTERNAL_ADDRESS ADDRESS=%s METHOD=DIRSERV",
suggestion);
log_addr_has_changed(LOG_NOTICE, &last_guessed_ip, &addr,
- d_conn->_base.address);
+ d_conn->base_.address);
ip_address_changed(0);
tor_addr_copy(&last_guessed_ip, &addr); /* router_rebuild_descriptor()
will fetch it */
@@ -1956,7 +2244,7 @@ router_guess_address_from_dir_headers(uint32_t *guess)
* string describing the version of Tor and the operating system we're
* currently running on.
*/
-void
+STATIC void
get_platform_str(char *platform, size_t len)
{
tor_snprintf(platform, len, "Tor %s on %s",
@@ -1970,55 +2258,53 @@ get_platform_str(char *platform, size_t len)
#define DEBUG_ROUTER_DUMP_ROUTER_TO_STRING
/** OR only: Given a routerinfo for this router, and an identity key to sign
- * with, encode the routerinfo as a signed server descriptor and write the
- * result into <b>s</b>, using at most <b>maxlen</b> bytes. Return -1 on
- * failure, and the number of bytes used on success.
+ * with, encode the routerinfo as a signed server descriptor and return a new
+ * string encoding the result, or NULL on failure.
*/
-int
-router_dump_router_to_string(char *s, size_t maxlen, routerinfo_t *router,
+char *
+router_dump_router_to_string(routerinfo_t *router,
crypto_pk_t *ident_key)
{
- char *onion_pkey; /* Onion key, PEM-encoded. */
- char *identity_pkey; /* Identity key, PEM-encoded. */
+ char *address = NULL;
+ char *onion_pkey = NULL; /* Onion key, PEM-encoded. */
+ char *identity_pkey = NULL; /* Identity key, PEM-encoded. */
char digest[DIGEST_LEN];
char published[ISO_TIME_LEN+1];
char fingerprint[FINGERPRINT_LEN+1];
int has_extra_info_digest;
char extra_info_digest[HEX_DIGEST_LEN+1];
size_t onion_pkeylen, identity_pkeylen;
- size_t written;
- int result=0;
- addr_policy_t *tmpe;
- char *family_line;
+ char *family_line = NULL;
char *extra_or_address = NULL;
const or_options_t *options = get_options();
+ smartlist_t *chunks = NULL;
+ char *output = NULL;
/* Make sure the identity key matches the one in the routerinfo. */
- if (crypto_pk_cmp_keys(ident_key, router->identity_pkey)) {
+ if (!crypto_pk_eq_keys(ident_key, router->identity_pkey)) {
log_warn(LD_BUG,"Tried to sign a router with a private key that didn't "
"match router's public key!");
- return -1;
+ goto err;
}
/* record our fingerprint, so we can include it in the descriptor */
if (crypto_pk_get_fingerprint(router->identity_pkey, fingerprint, 1)<0) {
log_err(LD_BUG,"Error computing fingerprint");
- return -1;
+ goto err;
}
/* PEM-encode the onion key */
if (crypto_pk_write_public_key_to_string(router->onion_pkey,
&onion_pkey,&onion_pkeylen)<0) {
log_warn(LD_BUG,"write onion_pkey to string failed!");
- return -1;
+ goto err;
}
/* PEM-encode the identity key */
if (crypto_pk_write_public_key_to_string(router->identity_pkey,
&identity_pkey,&identity_pkeylen)<0) {
log_warn(LD_BUG,"write identity_pkey to string failed!");
- tor_free(onion_pkey);
- return -1;
+ goto err;
}
/* Encode the publication time. */
@@ -2053,14 +2339,17 @@ router_dump_router_to_string(char *s, size_t maxlen, routerinfo_t *router,
}
}
+ address = tor_dup_ip(router->addr);
+ chunks = smartlist_new();
+
/* Generate the easy portion of the router descriptor. */
- result = tor_snprintf(s, maxlen,
+ smartlist_add_asprintf(chunks,
"router %s %s %d 0 %d\n"
"%s"
"platform %s\n"
- "opt protocols Link 1 2 Circuit 1\n"
+ "protocols Link 1 2 Circuit 1\n"
"published %s\n"
- "opt fingerprint %s\n"
+ "fingerprint %s\n"
"uptime %ld\n"
"bandwidth %d %d %d\n"
"%s%s%s%s"
@@ -2068,7 +2357,7 @@ router_dump_router_to_string(char *s, size_t maxlen, routerinfo_t *router,
"signing-key\n%s"
"%s%s%s%s",
router->nickname,
- router->address,
+ address,
router->or_port,
decide_to_advertise_dirport(options, router->dir_port),
extra_or_address ? extra_or_address : "",
@@ -2079,113 +2368,159 @@ router_dump_router_to_string(char *s, size_t maxlen, routerinfo_t *router,
(int) router->bandwidthrate,
(int) router->bandwidthburst,
(int) router->bandwidthcapacity,
- has_extra_info_digest ? "opt extra-info-digest " : "",
+ has_extra_info_digest ? "extra-info-digest " : "",
has_extra_info_digest ? extra_info_digest : "",
has_extra_info_digest ? "\n" : "",
- options->DownloadExtraInfo ? "opt caches-extra-info\n" : "",
+ options->DownloadExtraInfo ? "caches-extra-info\n" : "",
onion_pkey, identity_pkey,
family_line,
- we_are_hibernating() ? "opt hibernating 1\n" : "",
- options->HidServDirectoryV2 ? "opt hidden-service-dir\n" : "",
- options->AllowSingleHopExits ? "opt allow-single-hop-exits\n" : "");
-
- tor_free(family_line);
- tor_free(onion_pkey);
- tor_free(identity_pkey);
- tor_free(extra_or_address);
-
- if (result < 0) {
- log_warn(LD_BUG,"descriptor snprintf #1 ran out of room!");
- return -1;
- }
- /* From now on, we use 'written' to remember the current length of 's'. */
- written = result;
+ we_are_hibernating() ? "hibernating 1\n" : "",
+ options->HidServDirectoryV2 ? "hidden-service-dir\n" : "",
+ options->AllowSingleHopExits ? "allow-single-hop-exits\n" : "");
if (options->ContactInfo && strlen(options->ContactInfo)) {
const char *ci = options->ContactInfo;
if (strchr(ci, '\n') || strchr(ci, '\r'))
ci = escaped(ci);
- result = tor_snprintf(s+written,maxlen-written, "contact %s\n", ci);
- if (result<0) {
- log_warn(LD_BUG,"descriptor snprintf #2 ran out of room!");
- return -1;
- }
- written += result;
+ smartlist_add_asprintf(chunks, "contact %s\n", ci);
}
+#ifdef CURVE25519_ENABLED
+ if (router->onion_curve25519_pkey) {
+ char kbuf[128];
+ base64_encode(kbuf, sizeof(kbuf),
+ (const char *)router->onion_curve25519_pkey->public_key,
+ CURVE25519_PUBKEY_LEN);
+ smartlist_add_asprintf(chunks, "ntor-onion-key %s", kbuf);
+ }
+#endif
+
/* Write the exit policy to the end of 's'. */
if (!router->exit_policy || !smartlist_len(router->exit_policy)) {
- strlcat(s+written, "reject *:*\n", maxlen-written);
- written += strlen("reject *:*\n");
- tmpe = NULL;
+ smartlist_add(chunks, tor_strdup("reject *:*\n"));
} else if (router->exit_policy) {
- int i;
- for (i = 0; i < smartlist_len(router->exit_policy); ++i) {
- tmpe = smartlist_get(router->exit_policy, i);
- result = policy_write_item(s+written, maxlen-written, tmpe, 1);
- if (result < 0) {
- log_warn(LD_BUG,"descriptor policy_write_item ran out of room!");
- return -1;
- }
- tor_assert(result == (int)strlen(s+written));
- written += result;
- if (written+2 > maxlen) {
- log_warn(LD_BUG,"descriptor policy_write_item ran out of room (2)!");
- return -1;
- }
- s[written++] = '\n';
- }
+ char *exit_policy = router_dump_exit_policy_to_string(router,1,0);
+
+ if (!exit_policy)
+ goto err;
+
+ smartlist_add_asprintf(chunks, "%s\n", exit_policy);
+ tor_free(exit_policy);
}
- if (written + DIROBJ_MAX_SIG_LEN > maxlen) {
- /* Not enough room for signature. */
- log_warn(LD_BUG,"not enough room left in descriptor for signature!");
- return -1;
+ if (router->ipv6_exit_policy) {
+ char *p6 = write_short_policy(router->ipv6_exit_policy);
+ if (p6 && strcmp(p6, "reject 1-65535")) {
+ smartlist_add_asprintf(chunks,
+ "ipv6-policy %s\n", p6);
+ }
+ tor_free(p6);
}
/* Sign the descriptor */
- strlcpy(s+written, "router-signature\n", maxlen-written);
- written += strlen(s+written);
- s[written] = '\0';
- if (router_get_router_hash(s, strlen(s), digest) < 0) {
- return -1;
- }
+ smartlist_add(chunks, tor_strdup("router-signature\n"));
+
+ crypto_digest_smartlist(digest, DIGEST_LEN, chunks, "", DIGEST_SHA1);
note_crypto_pk_op(SIGN_RTR);
- if (router_append_dirobj_signature(s+written,maxlen-written,
- digest,DIGEST_LEN,ident_key)<0) {
- log_warn(LD_BUG, "Couldn't sign router descriptor");
- return -1;
+ {
+ char *sig;
+ if (!(sig = router_get_dirobj_signature(digest, DIGEST_LEN, ident_key))) {
+ log_warn(LD_BUG, "Couldn't sign router descriptor");
+ goto err;
+ }
+ smartlist_add(chunks, sig);
}
- written += strlen(s+written);
- if (written+2 > maxlen) {
- log_warn(LD_BUG,"Not enough room to finish descriptor.");
- return -1;
- }
/* include a last '\n' */
- s[written] = '\n';
- s[written+1] = 0;
+ smartlist_add(chunks, tor_strdup("\n"));
+
+ output = smartlist_join_strings(chunks, "", 0, NULL);
#ifdef DEBUG_ROUTER_DUMP_ROUTER_TO_STRING
{
char *s_dup;
const char *cp;
routerinfo_t *ri_tmp;
- cp = s_dup = tor_strdup(s);
+ cp = s_dup = tor_strdup(output);
ri_tmp = router_parse_entry_from_string(cp, NULL, 1, 0, NULL);
if (!ri_tmp) {
log_err(LD_BUG,
"We just generated a router descriptor we can't parse.");
- log_err(LD_BUG, "Descriptor was: <<%s>>", s);
- return -1;
+ log_err(LD_BUG, "Descriptor was: <<%s>>", output);
+ goto err;
}
tor_free(s_dup);
routerinfo_free(ri_tmp);
}
#endif
- return (int)written+1;
+ goto done;
+
+ err:
+ tor_free(output); /* sets output to NULL */
+ done:
+ if (chunks) {
+ SMARTLIST_FOREACH(chunks, char *, cp, tor_free(cp));
+ smartlist_free(chunks);
+ }
+ tor_free(address);
+ tor_free(family_line);
+ tor_free(onion_pkey);
+ tor_free(identity_pkey);
+ tor_free(extra_or_address);
+
+ return output;
+}
+
+/**
+ * OR only: Given <b>router</b>, produce a string with its exit policy.
+ * If <b>include_ipv4</b> is true, include IPv4 entries.
+ * If <b>include_ipv6</b> is true, include IPv6 entries.
+ */
+char *
+router_dump_exit_policy_to_string(const routerinfo_t *router,
+ int include_ipv4,
+ int include_ipv6)
+{
+ smartlist_t *exit_policy_strings;
+ char *policy_string = NULL;
+
+ if ((!router->exit_policy) || (router->policy_is_reject_star)) {
+ return tor_strdup("reject *:*");
+ }
+
+ exit_policy_strings = smartlist_new();
+
+ SMARTLIST_FOREACH_BEGIN(router->exit_policy, addr_policy_t *, tmpe) {
+ char *pbuf;
+ int bytes_written_to_pbuf;
+ if ((tor_addr_family(&tmpe->addr) == AF_INET6) && (!include_ipv6)) {
+ continue; /* Don't include IPv6 parts of address policy */
+ }
+ if ((tor_addr_family(&tmpe->addr) == AF_INET) && (!include_ipv4)) {
+ continue; /* Don't include IPv4 parts of address policy */
+ }
+
+ pbuf = tor_malloc(POLICY_BUF_LEN);
+ bytes_written_to_pbuf = policy_write_item(pbuf,POLICY_BUF_LEN, tmpe, 1);
+
+ if (bytes_written_to_pbuf < 0) {
+ log_warn(LD_BUG, "router_dump_exit_policy_to_string ran out of room!");
+ tor_free(pbuf);
+ goto done;
+ }
+
+ smartlist_add(exit_policy_strings,pbuf);
+ } SMARTLIST_FOREACH_END(tmpe);
+
+ policy_string = smartlist_join_strings(exit_policy_strings, "\n", 0, NULL);
+
+ done:
+ SMARTLIST_FOREACH(exit_policy_strings, char *, str, tor_free(str));
+ smartlist_free(exit_policy_strings);
+
+ return policy_string;
}
/** Copy the primary (IPv4) OR port (IP address and TCP port) for
@@ -2198,40 +2533,24 @@ router_get_prim_orport(const routerinfo_t *router, tor_addr_port_t *ap_out)
ap_out->port = router->or_port;
}
-/** Return 1 if we prefer the IPv6 address and OR TCP port of
- * <b>router</b>, else 0.
- *
- * We prefer the IPv6 address if the router has one and
- * i) the routerinfo_t says so
- * or
- * ii) the router has no IPv4 address. */
+/** Return 1 if any of <b>router</b>'s addresses are <b>addr</b>.
+ * Otherwise return 0. */
int
-router_ipv6_preferred(const routerinfo_t *router)
+router_has_addr(const routerinfo_t *router, const tor_addr_t *addr)
{
- return (!tor_addr_is_null(&router->ipv6_addr)
- && (router->ipv6_preferred || router->addr == 0));
+ return
+ tor_addr_eq_ipv4h(addr, router->addr) ||
+ tor_addr_eq(&router->ipv6_addr, addr);
}
-/** Copy the preferred OR port (IP address and TCP port) for
- * <b>router</b> into *<b>addr_out</b>. */
-void
-router_get_pref_orport(const routerinfo_t *router, tor_addr_port_t *ap_out)
-{
- if (router_ipv6_preferred(router))
- router_get_pref_ipv6_orport(router, ap_out);
- else
- router_get_prim_orport(router, ap_out);
-}
-
-/** Copy the preferred IPv6 OR port (IP address and TCP port) for
- * <b>router</b> into *<b>ap_out</b>. */
-void
-router_get_pref_ipv6_orport(const routerinfo_t *router,
- tor_addr_port_t *ap_out)
+int
+router_has_orport(const routerinfo_t *router, const tor_addr_port_t *orport)
{
- tor_assert(ap_out != NULL);
- tor_addr_copy(&ap_out->addr, &router->ipv6_addr);
- ap_out->port = router->ipv6_orport;
+ return
+ (tor_addr_eq_ipv4h(&orport->addr, router->addr) &&
+ orport->port == router->or_port) ||
+ (tor_addr_eq(&orport->addr, &router->ipv6_addr) &&
+ orport->port == router->ipv6_orport);
}
/** Load the contents of <b>filename</b>, find the last line starting with
@@ -2316,9 +2635,12 @@ extrainfo_dump_to_string(char **s_out, extrainfo_t *extrainfo,
tor_free(bandwidth_usage);
smartlist_add(chunks, pre);
- if (geoip_is_loaded()) {
- smartlist_add_asprintf(chunks, "geoip-db-digest %s\n", geoip_db_digest());
- }
+ if (geoip_is_loaded(AF_INET))
+ smartlist_add_asprintf(chunks, "geoip-db-digest %s\n",
+ geoip_db_digest(AF_INET));
+ if (geoip_is_loaded(AF_INET6))
+ smartlist_add_asprintf(chunks, "geoip6-db-digest %s\n",
+ geoip_db_digest(AF_INET6));
if (options->ExtraInfoStatistics && write_stats_to_extrainfo) {
log_info(LD_GENERAL, "Adding stats to extra-info descriptor.");
@@ -2349,6 +2671,13 @@ extrainfo_dump_to_string(char **s_out, extrainfo_t *extrainfo,
}
}
+ /* Add information about the pluggable transports we support. */
+ if (options->ServerTransportPlugin) {
+ char *pluggable_transports = pt_get_extra_info_descriptor_string();
+ if (pluggable_transports)
+ smartlist_add(chunks, pluggable_transports);
+ }
+
if (should_record_bridge_info(options) && write_stats_to_extrainfo) {
const char *bridge_stats = geoip_get_bridge_stats_extrainfo(now);
if (bridge_stats) {
@@ -2431,7 +2760,9 @@ extrainfo_dump_to_string(char **s_out, extrainfo_t *extrainfo,
return result;
}
-/** Return true iff <b>s</b> is a legally valid server nickname. */
+/** Return true iff <b>s</b> is a valid server nickname. (That is, a string
+ * containing between 1 and MAX_NICKNAME_LEN characters from
+ * LEGAL_NICKNAME_CHARACTERS.) */
int
is_legal_nickname(const char *s)
{
@@ -2442,7 +2773,7 @@ is_legal_nickname(const char *s)
strspn(s,LEGAL_NICKNAME_CHARACTERS) == len;
}
-/** Return true iff <b>s</b> is a legally valid server nickname or
+/** Return true iff <b>s</b> is a valid server nickname or
* hex-encoded identity-key digest. */
int
is_legal_nickname_or_hexdigest(const char *s)
@@ -2453,8 +2784,11 @@ is_legal_nickname_or_hexdigest(const char *s)
return is_legal_hexdigest(s);
}
-/** Return true iff <b>s</b> is a legally valid hex-encoded identity-key
- * digest. */
+/** Return true iff <b>s</b> is a valid hex-encoded identity-key
+ * digest. (That is, an optional $, followed by 40 hex characters,
+ * followed by either nothing, or = or ~ followed by a nickname, or
+ * a character other than =, ~, or a hex character.)
+ */
int
is_legal_hexdigest(const char *s)
{
@@ -2677,23 +3011,6 @@ router_get_verbose_nickname(char *buf, const routerinfo_t *router)
strlcpy(buf+1+HEX_DIGEST_LEN+1, router->nickname, MAX_NICKNAME_LEN+1);
}
-/** Set <b>buf</b> (which must have MAX_VERBOSE_NICKNAME_LEN+1 bytes) to the
- * verbose representation of the identity of <b>router</b>. The format is:
- * A dollar sign.
- * The upper-case hexadecimal encoding of the SHA1 hash of router's identity.
- * A "=" if the router is named; a "~" if it is not.
- * The router's nickname.
- **/
-void
-routerstatus_get_verbose_nickname(char *buf, const routerstatus_t *router)
-{
- buf[0] = '$';
- base16_encode(buf+1, HEX_DIGEST_LEN+1, router->identity_digest,
- DIGEST_LEN);
- buf[1+HEX_DIGEST_LEN] = router->is_named ? '=' : '~';
- strlcpy(buf+1+HEX_DIGEST_LEN+1, router->nickname, MAX_NICKNAME_LEN+1);
-}
-
/** Forget that we have issued any router-related warnings, so that we'll
* warn again if we see the same errors. */
void
@@ -2752,9 +3069,41 @@ router_free_all(void)
crypto_pk_free(legacy_signing_key);
authority_cert_free(legacy_key_certificate);
+#ifdef CURVE25519_ENABLED
+ memwipe(&curve25519_onion_key, 0, sizeof(curve25519_onion_key));
+ memwipe(&last_curve25519_onion_key, 0, sizeof(last_curve25519_onion_key));
+#endif
+
if (warned_nonexistent_family) {
SMARTLIST_FOREACH(warned_nonexistent_family, char *, cp, tor_free(cp));
smartlist_free(warned_nonexistent_family);
}
}
+/** Return a smartlist of tor_addr_port_t's with all the OR ports of
+ <b>ri</b>. Note that freeing of the items in the list as well as
+ the smartlist itself is the callers responsibility.
+
+ XXX duplicating code from node_get_all_orports(). */
+smartlist_t *
+router_get_all_orports(const routerinfo_t *ri)
+{
+ smartlist_t *sl = smartlist_new();
+ tor_assert(ri);
+
+ if (ri->addr != 0) {
+ tor_addr_port_t *ap = tor_malloc(sizeof(tor_addr_port_t));
+ tor_addr_from_ipv4h(&ap->addr, ri->addr);
+ ap->port = ri->or_port;
+ smartlist_add(sl, ap);
+ }
+ if (!tor_addr_is_null(&ri->ipv6_addr)) {
+ tor_addr_port_t *ap = tor_malloc(sizeof(tor_addr_port_t));
+ tor_addr_copy(&ap->addr, &ri->ipv6_addr);
+ ap->port = ri->or_port;
+ smartlist_add(sl, ap);
+ }
+
+ return sl;
+}
+
diff --git a/src/or/router.h b/src/or/router.h
index 69805d6f2..d18ff065e 100644
--- a/src/or/router.h
+++ b/src/or/router.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,8 +9,10 @@
* \brief Header file for router.c.
**/
-#ifndef _TOR_ROUTER_H
-#define _TOR_ROUTER_H
+#ifndef TOR_ROUTER_H
+#define TOR_ROUTER_H
+
+#include "testsupport.h"
crypto_pk_t *get_onion_key(void);
time_t get_onion_key_set_at(void);
@@ -30,6 +32,11 @@ crypto_pk_t *init_key_from_file(const char *fname, int generate,
int severity);
void v3_authority_check_key_expiry(void);
+#ifdef CURVE25519_ENABLED
+di_digest256_map_t *construct_ntor_key_map(void);
+void ntor_key_map_free(di_digest256_map_t *map);
+#endif
+
int router_initialize_tls_context(void);
int init_keys(void);
@@ -43,8 +50,6 @@ void router_perform_bandwidth_test(int num_circs, time_t now);
int net_is_disabled(void);
int authdir_mode(const or_options_t *options);
-int authdir_mode_v1(const or_options_t *options);
-int authdir_mode_v2(const or_options_t *options);
int authdir_mode_v3(const or_options_t *options);
int authdir_mode_any_main(const or_options_t *options);
int authdir_mode_any_nonhidserv(const or_options_t *options);
@@ -53,13 +58,16 @@ int authdir_mode_publishes_statuses(const or_options_t *options);
int authdir_mode_tests_reachability(const or_options_t *options);
int authdir_mode_bridge(const or_options_t *options);
-uint16_t router_get_active_listener_port_by_type(int listener_type);
+uint16_t router_get_active_listener_port_by_type_af(int listener_type,
+ sa_family_t family);
uint16_t router_get_advertised_or_port(const or_options_t *options);
+uint16_t router_get_advertised_or_port_by_af(const or_options_t *options,
+ sa_family_t family);
uint16_t router_get_advertised_dir_port(const or_options_t *options,
uint16_t dirport);
-int server_mode(const or_options_t *options);
-int public_server_mode(const or_options_t *options);
+MOCK_DECL(int, server_mode, (const or_options_t *options));
+MOCK_DECL(int, public_server_mode, (const or_options_t *options));
int advertised_server_mode(void);
int proxy_mode(const or_options_t *options);
void consider_publishable_server(int force);
@@ -72,20 +80,23 @@ void check_descriptor_bandwidth_changed(time_t now);
void check_descriptor_ipaddress_changed(time_t now);
void router_new_address_suggestion(const char *suggestion,
const dir_connection_t *d_conn);
-int router_compare_to_my_exit_policy(edge_connection_t *conn);
+int router_compare_to_my_exit_policy(const tor_addr_t *addr, uint16_t port);
int router_my_exit_policy_is_reject_star(void);
-const routerinfo_t *router_get_my_routerinfo(void);
+MOCK_DECL(const routerinfo_t *, router_get_my_routerinfo, (void));
extrainfo_t *router_get_my_extrainfo(void);
const char *router_get_my_descriptor(void);
const char *router_get_descriptor_gen_reason(void);
int router_digest_is_me(const char *digest);
+const uint8_t *router_get_my_id_digest(void);
int router_extrainfo_digest_is_me(const char *digest);
int router_is_me(const routerinfo_t *router);
-int router_fingerprint_is_me(const char *fp);
int router_pick_published_address(const or_options_t *options, uint32_t *addr);
int router_rebuild_descriptor(int force);
-int router_dump_router_to_string(char *s, size_t maxlen, routerinfo_t *router,
- crypto_pk_t *ident_key);
+char *router_dump_router_to_string(routerinfo_t *router,
+ crypto_pk_t *ident_key);
+char *router_dump_exit_policy_to_string(const routerinfo_t *router,
+ int include_ipv4,
+ int include_ipv6);
void router_get_prim_orport(const routerinfo_t *router,
tor_addr_port_t *addr_port_out);
void router_get_pref_orport(const routerinfo_t *router,
@@ -93,6 +104,9 @@ void router_get_pref_orport(const routerinfo_t *router,
void router_get_pref_ipv6_orport(const routerinfo_t *router,
tor_addr_port_t *addr_port_out);
int router_ipv6_preferred(const routerinfo_t *router);
+int router_has_addr(const routerinfo_t *router, const tor_addr_t *addr);
+int router_has_orport(const routerinfo_t *router,
+ const tor_addr_port_t *orport);
int extrainfo_dump_to_string(char **s, extrainfo_t *extrainfo,
crypto_pk_t *ident_key);
int is_legal_nickname(const char *s);
@@ -123,8 +137,6 @@ const char *routerstatus_describe(const routerstatus_t *ri);
const char *extend_info_describe(const extend_info_t *ei);
void router_get_verbose_nickname(char *buf, const routerinfo_t *router);
-void routerstatus_get_verbose_nickname(char *buf,
- const routerstatus_t *router);
void router_reset_warnings(void);
void router_reset_reachability(void);
void router_free_all(void);
@@ -132,9 +144,12 @@ void router_free_all(void);
const char *router_purpose_to_string(uint8_t p);
uint8_t router_purpose_from_string(const char *s);
+smartlist_t *router_get_all_orports(const routerinfo_t *ri);
+
#ifdef ROUTER_PRIVATE
/* Used only by router.c and test.c */
-void get_platform_str(char *platform, size_t len);
+STATIC void get_platform_str(char *platform, size_t len);
+STATIC int router_write_fingerprint(int hashed);
#endif
#endif
diff --git a/src/or/routerlist.c b/src/or/routerlist.c
index 3c39e362d..8f3477a4a 100644
--- a/src/or/routerlist.c
+++ b/src/or/routerlist.c
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -11,14 +11,17 @@
* servers.
**/
+#define ROUTERLIST_PRIVATE
#include "or.h"
-#include "circuitbuild.h"
+#include "circuitstats.h"
#include "config.h"
#include "connection.h"
#include "control.h"
#include "directory.h"
#include "dirserv.h"
#include "dirvote.h"
+#include "entrynodes.h"
+#include "fp_pair.h"
#include "geoip.h"
#include "hibernate.h"
#include "main.h"
@@ -33,55 +36,82 @@
#include "router.h"
#include "routerlist.h"
#include "routerparse.h"
-
+#include "routerset.h"
+#include "../common/sandbox.h"
// #define DEBUG_ROUTERLIST
/****************************************************************************/
+DECLARE_TYPED_DIGESTMAP_FNS(sdmap_, digest_sd_map_t, signed_descriptor_t)
+DECLARE_TYPED_DIGESTMAP_FNS(rimap_, digest_ri_map_t, routerinfo_t)
+DECLARE_TYPED_DIGESTMAP_FNS(eimap_, digest_ei_map_t, extrainfo_t)
+DECLARE_TYPED_DIGESTMAP_FNS(dsmap_, digest_ds_map_t, download_status_t)
+#define SDMAP_FOREACH(map, keyvar, valvar) \
+ DIGESTMAP_FOREACH(sdmap_to_digestmap(map), keyvar, signed_descriptor_t *, \
+ valvar)
+#define RIMAP_FOREACH(map, keyvar, valvar) \
+ DIGESTMAP_FOREACH(rimap_to_digestmap(map), keyvar, routerinfo_t *, valvar)
+#define EIMAP_FOREACH(map, keyvar, valvar) \
+ DIGESTMAP_FOREACH(eimap_to_digestmap(map), keyvar, extrainfo_t *, valvar)
+#define DSMAP_FOREACH(map, keyvar, valvar) \
+ DIGESTMAP_FOREACH(dsmap_to_digestmap(map), keyvar, download_status_t *, \
+ valvar)
+
+/* Forward declaration for cert_list_t */
+typedef struct cert_list_t cert_list_t;
+
/* static function prototypes */
+static int compute_weighted_bandwidths(const smartlist_t *sl,
+ bandwidth_weight_rule_t rule,
+ u64_dbl_t **bandwidths_out);
static const routerstatus_t *router_pick_directory_server_impl(
dirinfo_type_t auth, int flags);
static const routerstatus_t *router_pick_trusteddirserver_impl(
- dirinfo_type_t auth, int flags, int *n_busy_out);
-static void mark_all_trusteddirservers_up(void);
-static int router_nickname_matches(const routerinfo_t *router,
- const char *nickname);
-static int node_nickname_matches(const node_t *router,
- const char *nickname);
-static void trusted_dir_server_free(trusted_dir_server_t *ds);
+ const smartlist_t *sourcelist, dirinfo_type_t auth,
+ int flags, int *n_busy_out);
+static const routerstatus_t *router_pick_dirserver_generic(
+ smartlist_t *sourcelist,
+ dirinfo_type_t type, int flags);
+static void mark_all_dirservers_up(smartlist_t *server_list);
+static void dir_server_free(dir_server_t *ds);
static int signed_desc_digest_is_recognized(signed_descriptor_t *desc);
-static void update_router_have_minimum_dir_info(void);
static const char *signed_descriptor_get_body_impl(
const signed_descriptor_t *desc,
int with_annotations);
static void list_pending_downloads(digestmap_t *result,
int purpose, const char *prefix);
+static void list_pending_fpsk_downloads(fp_pair_map_t *result);
static void launch_dummy_descriptor_download_as_needed(time_t now,
const or_options_t *options);
-
-DECLARE_TYPED_DIGESTMAP_FNS(sdmap_, digest_sd_map_t, signed_descriptor_t)
-DECLARE_TYPED_DIGESTMAP_FNS(rimap_, digest_ri_map_t, routerinfo_t)
-DECLARE_TYPED_DIGESTMAP_FNS(eimap_, digest_ei_map_t, extrainfo_t)
-#define SDMAP_FOREACH(map, keyvar, valvar) \
- DIGESTMAP_FOREACH(sdmap_to_digestmap(map), keyvar, signed_descriptor_t *, \
- valvar)
-#define RIMAP_FOREACH(map, keyvar, valvar) \
- DIGESTMAP_FOREACH(rimap_to_digestmap(map), keyvar, routerinfo_t *, valvar)
-#define EIMAP_FOREACH(map, keyvar, valvar) \
- DIGESTMAP_FOREACH(eimap_to_digestmap(map), keyvar, extrainfo_t *, valvar)
+static void download_status_reset_by_sk_in_cl(cert_list_t *cl,
+ const char *digest);
+static int download_status_is_ready_by_sk_in_cl(cert_list_t *cl,
+ const char *digest,
+ time_t now, int max_failures);
/****************************************************************************/
-/** Global list of a trusted_dir_server_t object for each trusted directory
- * server. */
+/** Global list of a dir_server_t object for each directory
+ * authority. */
static smartlist_t *trusted_dir_servers = NULL;
+/** Global list of dir_server_t objects for all directory authorities
+ * and all fallback directory servers. */
+static smartlist_t *fallback_dir_servers = NULL;
-/** List of for a given authority, and download status for latest certificate.
+/** List of certificates for a single authority, and download status for
+ * latest certificate.
*/
-typedef struct cert_list_t {
- download_status_t dl_status;
+struct cert_list_t {
+ /*
+ * The keys of download status map are cert->signing_key_digest for pending
+ * downloads by (identity digest/signing key digest) pair; functions such
+ * as authority_cert_get_by_digest() already assume these are unique.
+ */
+ struct digest_ds_map_t *dl_status_map;
+ /* There is also a dlstatus for the download by identity key only */
+ download_status_t dl_status_by_id;
smartlist_t *certs;
-} cert_list_t;
+};
/** Map from v3 identity key digest to cert_list_t. */
static digestmap_t *trusted_dir_certs = NULL;
/** True iff any key certificate in at least one member of
@@ -101,16 +131,6 @@ static smartlist_t *warned_nicknames = NULL;
* download is low. */
static time_t last_descriptor_download_attempted = 0;
-/** When we last computed the weights to use for bandwidths on directory
- * requests, what were the total weighted bandwidth, and our share of that
- * bandwidth? Used to determine what fraction of directory requests we should
- * expect to see.
- *
- * @{ */
-static uint64_t sl_last_total_weighted_bw = 0,
- sl_last_weighted_bw_of_me = 0;
-/**@}*/
-
/** Return the number of directory authorities whose type matches some bit set
* in <b>type</b> */
int
@@ -119,13 +139,77 @@ get_n_authorities(dirinfo_type_t type)
int n = 0;
if (!trusted_dir_servers)
return 0;
- SMARTLIST_FOREACH(trusted_dir_servers, trusted_dir_server_t *, ds,
+ SMARTLIST_FOREACH(trusted_dir_servers, dir_server_t *, ds,
if (ds->type & type)
++n);
return n;
}
-#define get_n_v2_authorities() get_n_authorities(V2_DIRINFO)
+/** Reset the download status of a specified element in a dsmap */
+static void
+download_status_reset_by_sk_in_cl(cert_list_t *cl, const char *digest)
+{
+ download_status_t *dlstatus = NULL;
+
+ tor_assert(cl);
+ tor_assert(digest);
+
+ /* Make sure we have a dsmap */
+ if (!(cl->dl_status_map)) {
+ cl->dl_status_map = dsmap_new();
+ }
+ /* Look for a download_status_t in the map with this digest */
+ dlstatus = dsmap_get(cl->dl_status_map, digest);
+ /* Got one? */
+ if (!dlstatus) {
+ /* Insert before we reset */
+ dlstatus = tor_malloc_zero(sizeof(*dlstatus));
+ dsmap_set(cl->dl_status_map, digest, dlstatus);
+ }
+ tor_assert(dlstatus);
+ /* Go ahead and reset it */
+ download_status_reset(dlstatus);
+}
+
+/**
+ * Return true if the download for this signing key digest in cl is ready
+ * to be re-attempted.
+ */
+static int
+download_status_is_ready_by_sk_in_cl(cert_list_t *cl,
+ const char *digest,
+ time_t now, int max_failures)
+{
+ int rv = 0;
+ download_status_t *dlstatus = NULL;
+
+ tor_assert(cl);
+ tor_assert(digest);
+
+ /* Make sure we have a dsmap */
+ if (!(cl->dl_status_map)) {
+ cl->dl_status_map = dsmap_new();
+ }
+ /* Look for a download_status_t in the map with this digest */
+ dlstatus = dsmap_get(cl->dl_status_map, digest);
+ /* Got one? */
+ if (dlstatus) {
+ /* Use download_status_is_ready() */
+ rv = download_status_is_ready(dlstatus, now, max_failures);
+ } else {
+ /*
+ * If we don't know anything about it, return 1, since we haven't
+ * tried this one before. We need to create a new entry here,
+ * too.
+ */
+ dlstatus = tor_malloc_zero(sizeof(*dlstatus));
+ download_status_reset(dlstatus);
+ dsmap_set(cl->dl_status_map, digest, dlstatus);
+ rv = 1;
+ }
+
+ return rv;
+}
/** Helper: Return the cert_list_t for an authority whose authority ID is
* <b>id_digest</b>, allocating a new list if necessary. */
@@ -138,13 +222,35 @@ get_cert_list(const char *id_digest)
cl = digestmap_get(trusted_dir_certs, id_digest);
if (!cl) {
cl = tor_malloc_zero(sizeof(cert_list_t));
- cl->dl_status.schedule = DL_SCHED_CONSENSUS;
+ cl->dl_status_by_id.schedule = DL_SCHED_CONSENSUS;
cl->certs = smartlist_new();
+ cl->dl_status_map = dsmap_new();
digestmap_set(trusted_dir_certs, id_digest, cl);
}
return cl;
}
+/** Release all space held by a cert_list_t */
+static void
+cert_list_free(cert_list_t *cl)
+{
+ if (!cl)
+ return;
+
+ SMARTLIST_FOREACH(cl->certs, authority_cert_t *, cert,
+ authority_cert_free(cert));
+ smartlist_free(cl->certs);
+ dsmap_free(cl->dl_status_map, tor_free_);
+ tor_free(cl);
+}
+
+/** Wrapper for cert_list_free so we can pass it to digestmap_free */
+static void
+cert_list_free_(void *cl)
+{
+ cert_list_free(cl);
+}
+
/** Reload the cached v3 key certificates from the cached-certs file in
* the data directory. Return 0 on success, -1 on failure. */
int
@@ -159,7 +265,9 @@ trusted_dirs_reload_certs(void)
tor_free(filename);
if (!contents)
return 0;
- r = trusted_dirs_load_certs_from_string(contents, 1, 1);
+ r = trusted_dirs_load_certs_from_string(
+ contents,
+ TRUSTED_DIRS_CERTS_SRC_FROM_STORE, 1);
tor_free(contents);
return r;
}
@@ -182,17 +290,23 @@ already_have_cert(authority_cert_t *cert)
}
/** Load a bunch of new key certificates from the string <b>contents</b>. If
- * <b>from_store</b> is true, the certificates are from the cache, and we
- * don't need to flush them to disk. If <b>flush</b> is true, we need
- * to flush any changed certificates to disk now. Return 0 on success, -1
- * if any certs fail to parse. */
+ * <b>source</b> is TRUSTED_DIRS_CERTS_SRC_FROM_STORE, the certificates are
+ * from the cache, and we don't need to flush them to disk. If we are a
+ * dirauth loading our own cert, source is TRUSTED_DIRS_CERTS_SRC_SELF.
+ * Otherwise, source is download type: TRUSTED_DIRS_CERTS_SRC_DL_BY_ID_DIGEST
+ * or TRUSTED_DIRS_CERTS_SRC_DL_BY_ID_SK_DIGEST. If <b>flush</b> is true, we
+ * need to flush any changed certificates to disk now. Return 0 on success,
+ * -1 if any certs fail to parse.
+ */
+
int
-trusted_dirs_load_certs_from_string(const char *contents, int from_store,
+trusted_dirs_load_certs_from_string(const char *contents, int source,
int flush)
{
- trusted_dir_server_t *ds;
+ dir_server_t *ds;
const char *s, *eos;
int failure_code = 0;
+ int from_store = (source == TRUSTED_DIRS_CERTS_SRC_FROM_STORE);
for (s = contents; *s; s = eos) {
authority_cert_t *cert = authority_cert_parse_from_string(s, &eos);
@@ -213,9 +327,13 @@ trusted_dirs_load_certs_from_string(const char *contents, int from_store,
from_store ? "cached" : "downloaded",
ds ? ds->nickname : "an old or new authority");
- /* a duplicate on a download should be treated as a failure, since it
- * probably means we wanted a different secret key or we are trying to
- * replace an expired cert that has not in fact been updated. */
+ /*
+ * A duplicate on download should be treated as a failure, so we call
+ * authority_cert_dl_failed() to reset the download status to make sure
+ * we can't try again. Since we've implemented the fp-sk mechanism
+ * to download certs by signing key, this should be much rarer than it
+ * was and is perhaps cause for concern.
+ */
if (!from_store) {
if (authdir_mode(get_options())) {
log_warn(LD_DIR,
@@ -229,7 +347,18 @@ trusted_dirs_load_certs_from_string(const char *contents, int from_store,
ds ? ds->nickname : "an old or new authority");
}
- authority_cert_dl_failed(cert->cache_info.identity_digest, 404);
+ /*
+ * This is where we care about the source; authority_cert_dl_failed()
+ * needs to know whether the download was by fp or (fp,sk) pair to
+ * twiddle the right bit in the download map.
+ */
+ if (source == TRUSTED_DIRS_CERTS_SRC_DL_BY_ID_DIGEST) {
+ authority_cert_dl_failed(cert->cache_info.identity_digest,
+ NULL, 404);
+ } else if (source == TRUSTED_DIRS_CERTS_SRC_DL_BY_ID_SK_DIGEST) {
+ authority_cert_dl_failed(cert->cache_info.identity_digest,
+ cert->signing_key_digest, 404);
+ }
}
authority_cert_free(cert);
@@ -309,7 +438,7 @@ trusted_dirs_flush_certs_to_disk(void)
} DIGESTMAP_FOREACH_END;
filename = get_datadir_fname("cached-certs");
- if (write_chunks_to_file(filename, chunks, 0)) {
+ if (write_chunks_to_file(filename, chunks, 0, 0)) {
log_warn(LD_FS, "Error writing certificates to disk.");
}
tor_free(filename);
@@ -329,7 +458,6 @@ trusted_dirs_remove_old_certs(void)
time_t now = time(NULL);
#define DEAD_CERT_LIFETIME (2*24*60*60)
#define OLD_CERT_LIFETIME (7*24*60*60)
-#define CERT_EXPIRY_SKEW (60*60)
if (!trusted_dir_certs)
return;
@@ -445,17 +573,84 @@ authority_cert_get_all(smartlist_t *certs_out)
}
/** Called when an attempt to download a certificate with the authority with
- * ID <b>id_digest</b> fails with HTTP response code <b>status</b>: remember
- * the failure, so we don't try again immediately. */
+ * ID <b>id_digest</b> and, if not NULL, signed with key signing_key_digest
+ * fails with HTTP response code <b>status</b>: remember the failure, so we
+ * don't try again immediately. */
void
-authority_cert_dl_failed(const char *id_digest, int status)
+authority_cert_dl_failed(const char *id_digest,
+ const char *signing_key_digest, int status)
{
cert_list_t *cl;
+ download_status_t *dlstatus = NULL;
+ char id_digest_str[2*DIGEST_LEN+1];
+ char sk_digest_str[2*DIGEST_LEN+1];
+
if (!trusted_dir_certs ||
!(cl = digestmap_get(trusted_dir_certs, id_digest)))
return;
- download_status_failed(&cl->dl_status, status);
+ /*
+ * Are we noting a failed download of the latest cert for the id digest,
+ * or of a download by (id, signing key) digest pair?
+ */
+ if (!signing_key_digest) {
+ /* Just by id digest */
+ download_status_failed(&cl->dl_status_by_id, status);
+ } else {
+ /* Reset by (id, signing key) digest pair
+ *
+ * Look for a download_status_t in the map with this digest
+ */
+ dlstatus = dsmap_get(cl->dl_status_map, signing_key_digest);
+ /* Got one? */
+ if (dlstatus) {
+ download_status_failed(dlstatus, status);
+ } else {
+ /*
+ * Do this rather than hex_str(), since hex_str clobbers
+ * old results and we call twice in the param list.
+ */
+ base16_encode(id_digest_str, sizeof(id_digest_str),
+ id_digest, DIGEST_LEN);
+ base16_encode(sk_digest_str, sizeof(sk_digest_str),
+ signing_key_digest, DIGEST_LEN);
+ log_warn(LD_BUG,
+ "Got failure for cert fetch with (fp,sk) = (%s,%s), with "
+ "status %d, but knew nothing about the download.",
+ id_digest_str, sk_digest_str, status);
+ }
+ }
+}
+
+static const char *BAD_SIGNING_KEYS[] = {
+ "09CD84F751FD6E955E0F8ADB497D5401470D697E", // Expires 2015-01-11 16:26:31
+ "0E7E9C07F0969D0468AD741E172A6109DC289F3C", // Expires 2014-08-12 10:18:26
+ "57B85409891D3FB32137F642FDEDF8B7F8CDFDCD", // Expires 2015-02-11 17:19:09
+ "87326329007AF781F587AF5B594E540B2B6C7630", // Expires 2014-07-17 11:10:09
+ "98CC82342DE8D298CF99D3F1A396475901E0D38E", // Expires 2014-11-10 13:18:56
+ "9904B52336713A5ADCB13E4FB14DC919E0D45571", // Expires 2014-04-20 20:01:01
+ "9DCD8E3F1DD1597E2AD476BBA28A1A89F3095227", // Expires 2015-01-16 03:52:30
+ "A61682F34B9BB9694AC98491FE1ABBFE61923941", // Expires 2014-06-11 09:25:09
+ "B59F6E99C575113650C99F1C425BA7B20A8C071D", // Expires 2014-07-31 13:22:10
+ "D27178388FA75B96D37FA36E0B015227DDDBDA51", // Expires 2014-08-04 04:01:57
+ NULL,
+};
+
+/** DOCDOC */
+int
+authority_cert_is_blacklisted(const authority_cert_t *cert)
+{
+ char hex_digest[HEX_DIGEST_LEN+1];
+ int i;
+ base16_encode(hex_digest, sizeof(hex_digest),
+ cert->signing_key_digest, sizeof(cert->signing_key_digest));
+
+ for (i = 0; BAD_SIGNING_KEYS[i]; ++i) {
+ if (!strcasecmp(hex_digest, BAD_SIGNING_KEYS[i])) {
+ return 1;
+ }
+ }
+ return 0;
}
/** Return true iff when we've been getting enough failures when trying to
@@ -471,13 +666,10 @@ authority_cert_dl_looks_uncertain(const char *id_digest)
!(cl = digestmap_get(trusted_dir_certs, id_digest)))
return 0;
- n_failures = download_status_get_n_failures(&cl->dl_status);
+ n_failures = download_status_get_n_failures(&cl->dl_status_by_id);
return n_failures >= N_AUTH_CERT_DL_FAILURES_TO_BUG_USER;
}
-/** How many times will we try to fetch a certificate before giving up? */
-#define MAX_CERT_DL_FAILURES 8
-
/** Try to download any v3 authority certificates that we may be missing. If
* <b>status</b> is provided, try to get all the ones that were used to sign
* <b>status</b>. Additionally, try to have a non-expired certificate for
@@ -487,20 +679,88 @@ authority_cert_dl_looks_uncertain(const char *id_digest)
void
authority_certs_fetch_missing(networkstatus_t *status, time_t now)
{
- digestmap_t *pending;
+ /*
+ * The pending_id digestmap tracks pending certificate downloads by
+ * identity digest; the pending_cert digestmap tracks pending downloads
+ * by (identity digest, signing key digest) pairs.
+ */
+ digestmap_t *pending_id;
+ fp_pair_map_t *pending_cert;
authority_cert_t *cert;
- smartlist_t *missing_digests;
+ /*
+ * The missing_id_digests smartlist will hold a list of id digests
+ * we want to fetch the newest cert for; the missing_cert_digests
+ * smartlist will hold a list of fp_pair_t with an identity and
+ * signing key digest.
+ */
+ smartlist_t *missing_cert_digests, *missing_id_digests;
char *resource = NULL;
cert_list_t *cl;
const int cache = directory_caches_unknown_auth_certs(get_options());
+ fp_pair_t *fp_tmp = NULL;
+ char id_digest_str[2*DIGEST_LEN+1];
+ char sk_digest_str[2*DIGEST_LEN+1];
- if (should_delay_dir_fetches(get_options()))
+ if (should_delay_dir_fetches(get_options(), NULL))
return;
- pending = digestmap_new();
- missing_digests = smartlist_new();
+ pending_cert = fp_pair_map_new();
+ pending_id = digestmap_new();
+ missing_cert_digests = smartlist_new();
+ missing_id_digests = smartlist_new();
+
+ /*
+ * First, we get the lists of already pending downloads so we don't
+ * duplicate effort.
+ */
+ list_pending_downloads(pending_id, DIR_PURPOSE_FETCH_CERTIFICATE, "fp/");
+ list_pending_fpsk_downloads(pending_cert);
+
+ /*
+ * Now, we download any trusted authority certs we don't have by
+ * identity digest only. This gets the latest cert for that authority.
+ */
+ SMARTLIST_FOREACH_BEGIN(trusted_dir_servers, dir_server_t *, ds) {
+ int found = 0;
+ if (!(ds->type & V3_DIRINFO))
+ continue;
+ if (smartlist_contains_digest(missing_id_digests,
+ ds->v3_identity_digest))
+ continue;
+ cl = get_cert_list(ds->v3_identity_digest);
+ SMARTLIST_FOREACH_BEGIN(cl->certs, authority_cert_t *, cert) {
+ if (now < cert->expires) {
+ /* It's not expired, and we weren't looking for something to
+ * verify a consensus with. Call it done. */
+ download_status_reset(&(cl->dl_status_by_id));
+ /* No sense trying to download it specifically by signing key hash */
+ download_status_reset_by_sk_in_cl(cl, cert->signing_key_digest);
+ found = 1;
+ break;
+ }
+ } SMARTLIST_FOREACH_END(cert);
+ if (!found &&
+ download_status_is_ready(&(cl->dl_status_by_id), now,
+ get_options()->TestingCertMaxDownloadTries) &&
+ !digestmap_get(pending_id, ds->v3_identity_digest)) {
+ log_info(LD_DIR,
+ "No current certificate known for authority %s "
+ "(ID digest %s); launching request.",
+ ds->nickname, hex_str(ds->v3_identity_digest, DIGEST_LEN));
+ smartlist_add(missing_id_digests, ds->v3_identity_digest);
+ }
+ } SMARTLIST_FOREACH_END(ds);
- list_pending_downloads(pending, DIR_PURPOSE_FETCH_CERTIFICATE, "fp/");
+ /*
+ * Next, if we have a consensus, scan through it and look for anything
+ * signed with a key from a cert we don't have. Those get downloaded
+ * by (fp,sk) pair, but if we don't know any certs at all for the fp
+ * (identity digest), and it's one of the trusted dir server certs
+ * we started off above or a pending download in pending_id, don't
+ * try to get it yet. Most likely, the one we'll get for that will
+ * have the right signing key too, and we'd just be downloading
+ * redundantly.
+ */
if (status) {
SMARTLIST_FOREACH_BEGIN(status->voters, networkstatus_voter_info_t *,
voter) {
@@ -510,84 +770,164 @@ authority_certs_fetch_missing(networkstatus_t *status, time_t now)
if (!cache &&
!trusteddirserver_get_by_v3_auth_digest(voter->identity_digest))
continue; /* We are not a cache, and we don't know this authority.*/
+
+ /*
+ * If we don't know *any* cert for this authority, and a download by ID
+ * is pending or we added it to missing_id_digests above, skip this
+ * one for now to avoid duplicate downloads.
+ */
cl = get_cert_list(voter->identity_digest);
+ if (smartlist_len(cl->certs) == 0) {
+ /* We have no certs at all for this one */
+
+ /* Do we have a download of one pending? */
+ if (digestmap_get(pending_id, voter->identity_digest))
+ continue;
+
+ /*
+ * Are we about to launch a download of one due to the trusted
+ * dir server check above?
+ */
+ if (smartlist_contains_digest(missing_id_digests,
+ voter->identity_digest))
+ continue;
+ }
+
SMARTLIST_FOREACH_BEGIN(voter->sigs, document_signature_t *, sig) {
cert = authority_cert_get_by_digests(voter->identity_digest,
sig->signing_key_digest);
if (cert) {
if (now < cert->expires)
- download_status_reset(&cl->dl_status);
+ download_status_reset_by_sk_in_cl(cl, sig->signing_key_digest);
continue;
}
- if (download_status_is_ready(&cl->dl_status, now,
- MAX_CERT_DL_FAILURES) &&
- !digestmap_get(pending, voter->identity_digest)) {
- log_info(LD_DIR, "We're missing a certificate from authority "
- "with signing key %s: launching request.",
- hex_str(sig->signing_key_digest, DIGEST_LEN));
- smartlist_add(missing_digests, sig->identity_digest);
+ if (download_status_is_ready_by_sk_in_cl(
+ cl, sig->signing_key_digest,
+ now, get_options()->TestingCertMaxDownloadTries) &&
+ !fp_pair_map_get_by_digests(pending_cert,
+ voter->identity_digest,
+ sig->signing_key_digest)) {
+ /*
+ * Do this rather than hex_str(), since hex_str clobbers
+ * old results and we call twice in the param list.
+ */
+ base16_encode(id_digest_str, sizeof(id_digest_str),
+ voter->identity_digest, DIGEST_LEN);
+ base16_encode(sk_digest_str, sizeof(sk_digest_str),
+ sig->signing_key_digest, DIGEST_LEN);
+
+ if (voter->nickname) {
+ log_info(LD_DIR,
+ "We're missing a certificate from authority %s "
+ "(ID digest %s) with signing key %s: "
+ "launching request.",
+ voter->nickname, id_digest_str, sk_digest_str);
+ } else {
+ log_info(LD_DIR,
+ "We're missing a certificate from authority ID digest "
+ "%s with signing key %s: launching request.",
+ id_digest_str, sk_digest_str);
+ }
+
+ /* Allocate a new fp_pair_t to append */
+ fp_tmp = tor_malloc(sizeof(*fp_tmp));
+ memcpy(fp_tmp->first, voter->identity_digest, sizeof(fp_tmp->first));
+ memcpy(fp_tmp->second, sig->signing_key_digest,
+ sizeof(fp_tmp->second));
+ smartlist_add(missing_cert_digests, fp_tmp);
}
} SMARTLIST_FOREACH_END(sig);
} SMARTLIST_FOREACH_END(voter);
}
- SMARTLIST_FOREACH_BEGIN(trusted_dir_servers, trusted_dir_server_t *, ds) {
- int found = 0;
- if (!(ds->type & V3_DIRINFO))
- continue;
- if (smartlist_digest_isin(missing_digests, ds->v3_identity_digest))
- continue;
- cl = get_cert_list(ds->v3_identity_digest);
- SMARTLIST_FOREACH(cl->certs, authority_cert_t *, cert, {
- if (now < cert->expires) {
- /* It's not expired, and we weren't looking for something to
- * verify a consensus with. Call it done. */
- download_status_reset(&cl->dl_status);
- found = 1;
- break;
- }
- });
- if (!found &&
- download_status_is_ready(&cl->dl_status, now,MAX_CERT_DL_FAILURES) &&
- !digestmap_get(pending, ds->v3_identity_digest)) {
- log_info(LD_DIR, "No current certificate known for authority %s; "
- "launching request.", ds->nickname);
- smartlist_add(missing_digests, ds->v3_identity_digest);
- }
- } SMARTLIST_FOREACH_END(ds);
- if (!smartlist_len(missing_digests)) {
- goto done;
- } else {
+ /* Do downloads by identity digest */
+ if (smartlist_len(missing_id_digests) > 0) {
+ int need_plus = 0;
smartlist_t *fps = smartlist_new();
+
smartlist_add(fps, tor_strdup("fp/"));
- SMARTLIST_FOREACH(missing_digests, const char *, d, {
- char *fp;
- if (digestmap_get(pending, d))
- continue;
- fp = tor_malloc(HEX_DIGEST_LEN+2);
- base16_encode(fp, HEX_DIGEST_LEN+1, d, DIGEST_LEN);
- fp[HEX_DIGEST_LEN] = '+';
- fp[HEX_DIGEST_LEN+1] = '\0';
- smartlist_add(fps, fp);
- });
- if (smartlist_len(fps) == 1) {
- /* we didn't add any: they were all pending */
- SMARTLIST_FOREACH(fps, char *, cp, tor_free(cp));
- smartlist_free(fps);
- goto done;
+
+ SMARTLIST_FOREACH_BEGIN(missing_id_digests, const char *, d) {
+ char *fp = NULL;
+
+ if (digestmap_get(pending_id, d))
+ continue;
+
+ base16_encode(id_digest_str, sizeof(id_digest_str),
+ d, DIGEST_LEN);
+
+ if (need_plus) {
+ tor_asprintf(&fp, "+%s", id_digest_str);
+ } else {
+ /* No need for tor_asprintf() in this case; first one gets no '+' */
+ fp = tor_strdup(id_digest_str);
+ need_plus = 1;
+ }
+
+ smartlist_add(fps, fp);
+ } SMARTLIST_FOREACH_END(d);
+
+ if (smartlist_len(fps) > 1) {
+ resource = smartlist_join_strings(fps, "", 0, NULL);
+ directory_get_from_dirserver(DIR_PURPOSE_FETCH_CERTIFICATE, 0,
+ resource, PDS_RETRY_IF_NO_SERVERS);
+ tor_free(resource);
}
- resource = smartlist_join_strings(fps, "", 0, NULL);
- resource[strlen(resource)-1] = '\0';
+ /* else we didn't add any: they were all pending */
+
SMARTLIST_FOREACH(fps, char *, cp, tor_free(cp));
smartlist_free(fps);
}
- directory_get_from_dirserver(DIR_PURPOSE_FETCH_CERTIFICATE, 0,
- resource, PDS_RETRY_IF_NO_SERVERS);
- done:
- tor_free(resource);
- smartlist_free(missing_digests);
- digestmap_free(pending, NULL);
+ /* Do downloads by identity digest/signing key pair */
+ if (smartlist_len(missing_cert_digests) > 0) {
+ int need_plus = 0;
+ smartlist_t *fp_pairs = smartlist_new();
+
+ smartlist_add(fp_pairs, tor_strdup("fp-sk/"));
+
+ SMARTLIST_FOREACH_BEGIN(missing_cert_digests, const fp_pair_t *, d) {
+ char *fp_pair = NULL;
+
+ if (fp_pair_map_get(pending_cert, d))
+ continue;
+
+ /* Construct string encodings of the digests */
+ base16_encode(id_digest_str, sizeof(id_digest_str),
+ d->first, DIGEST_LEN);
+ base16_encode(sk_digest_str, sizeof(sk_digest_str),
+ d->second, DIGEST_LEN);
+
+ /* Now tor_asprintf() */
+ if (need_plus) {
+ tor_asprintf(&fp_pair, "+%s-%s", id_digest_str, sk_digest_str);
+ } else {
+ /* First one in the list doesn't get a '+' */
+ tor_asprintf(&fp_pair, "%s-%s", id_digest_str, sk_digest_str);
+ need_plus = 1;
+ }
+
+ /* Add it to the list of pairs to request */
+ smartlist_add(fp_pairs, fp_pair);
+ } SMARTLIST_FOREACH_END(d);
+
+ if (smartlist_len(fp_pairs) > 1) {
+ resource = smartlist_join_strings(fp_pairs, "", 0, NULL);
+ directory_get_from_dirserver(DIR_PURPOSE_FETCH_CERTIFICATE, 0,
+ resource, PDS_RETRY_IF_NO_SERVERS);
+ tor_free(resource);
+ }
+ /* else they were all pending */
+
+ SMARTLIST_FOREACH(fp_pairs, char *, p, tor_free(p));
+ smartlist_free(fp_pairs);
+ }
+
+ smartlist_free(missing_id_digests);
+ SMARTLIST_FOREACH(missing_cert_digests, fp_pair_t *, p, tor_free(p));
+ smartlist_free(missing_cert_digests);
+ digestmap_free(pending_id, NULL);
+ fp_pair_map_free(pending_cert, NULL);
}
/* Router descriptor storage.
@@ -655,7 +995,7 @@ signed_desc_append_to_journal(signed_descriptor_t *desc,
* signed_descriptor_t* in *<b>a</b> is older, the same age as, or newer than
* the signed_descriptor_t* in *<b>b</b>. */
static int
-_compare_signed_descriptors_by_age(const void **_a, const void **_b)
+compare_signed_descriptors_by_age_(const void **_a, const void **_b)
{
const signed_descriptor_t *r1 = *_a, *r2 = *_b;
return (int)(r1->published_on - r2->published_on);
@@ -728,7 +1068,7 @@ router_rebuild_store(int flags, desc_store_t *store)
smartlist_add(signed_descriptors, &ri->cache_info));
}
- smartlist_sort(signed_descriptors, _compare_signed_descriptors_by_age);
+ smartlist_sort(signed_descriptors, compare_signed_descriptors_by_age_);
/* Now, add the appropriate members to chunk_list */
SMARTLIST_FOREACH_BEGIN(signed_descriptors, signed_descriptor_t *, sd) {
@@ -749,15 +1089,18 @@ router_rebuild_store(int flags, desc_store_t *store)
smartlist_add(chunk_list, c);
} SMARTLIST_FOREACH_END(sd);
- if (write_chunks_to_file(fname_tmp, chunk_list, 1)<0) {
+ if (write_chunks_to_file(fname_tmp, chunk_list, 1, 1)<0) {
log_warn(LD_FS, "Error writing router store to disk.");
goto done;
}
/* Our mmap is now invalid. */
if (store->mmap) {
- tor_munmap_file(store->mmap);
+ int res = tor_munmap_file(store->mmap);
store->mmap = NULL;
+ if (res != 0) {
+ log_warn(LD_FS, "Unable to munmap route store in %s", fname);
+ }
}
if (replace_file(fname_tmp, fname)<0) {
@@ -824,32 +1167,25 @@ router_rebuild_store(int flags, desc_store_t *store)
static int
router_reload_router_list_impl(desc_store_t *store)
{
- char *fname = NULL, *altname = NULL, *contents = NULL;
+ char *fname = NULL, *contents = NULL;
struct stat st;
- int read_from_old_location = 0;
int extrainfo = (store->type == EXTRAINFO_STORE);
- time_t now = time(NULL);
store->journal_len = store->store_len = 0;
fname = get_datadir_fname(store->fname_base);
- if (store->fname_alt_base)
- altname = get_datadir_fname(store->fname_alt_base);
- if (store->mmap) /* get rid of it first */
- tor_munmap_file(store->mmap);
- store->mmap = NULL;
+ if (store->mmap) {
+ /* get rid of it first */
+ int res = tor_munmap_file(store->mmap);
+ store->mmap = NULL;
+ if (res != 0) {
+ log_warn(LD_FS, "Failed to munmap %s", fname);
+ tor_free(fname);
+ return -1;
+ }
+ }
store->mmap = tor_mmap_file(fname);
- if (!store->mmap && altname && file_status(altname) == FN_FILE) {
- read_from_old_location = 1;
- log_notice(LD_DIR, "Couldn't read %s; trying to load routers from old "
- "location %s.", fname, altname);
- if ((store->mmap = tor_mmap_file(altname)))
- read_from_old_location = 1;
- }
- if (altname && !read_from_old_location) {
- remove_file_if_very_old(altname, now);
- }
if (store->mmap) {
store->store_len = store->mmap->size;
if (extrainfo)
@@ -866,14 +1202,6 @@ router_reload_router_list_impl(desc_store_t *store)
fname = get_datadir_fname_suffix(store->fname_base, ".new");
if (file_status(fname) == FN_FILE)
contents = read_file_to_str(fname, RFTS_BIN|RFTS_IGNORE_MISSING, &st);
- if (read_from_old_location) {
- tor_free(altname);
- altname = get_datadir_fname_suffix(store->fname_alt_base, ".new");
- if (!contents)
- contents = read_file_to_str(altname, RFTS_BIN|RFTS_IGNORE_MISSING, &st);
- else
- remove_file_if_very_old(altname, now);
- }
if (contents) {
if (extrainfo)
router_load_extrainfo_from_string(contents, NULL,SAVED_IN_JOURNAL,
@@ -886,9 +1214,8 @@ router_reload_router_list_impl(desc_store_t *store)
}
tor_free(fname);
- tor_free(altname);
- if (store->journal_len || read_from_old_location) {
+ if (store->journal_len) {
/* Always clear the journal on startup.*/
router_rebuild_store(RRS_FORCE, store);
} else if (!extrainfo) {
@@ -914,11 +1241,11 @@ router_reload_router_list(void)
return 0;
}
-/** Return a smartlist containing a list of trusted_dir_server_t * for all
+/** Return a smartlist containing a list of dir_server_t * for all
* known trusted dirservers. Callers must not modify the list or its
* contents.
*/
-smartlist_t *
+const smartlist_t *
router_get_trusted_dir_servers(void)
{
if (!trusted_dir_servers)
@@ -927,6 +1254,15 @@ router_get_trusted_dir_servers(void)
return trusted_dir_servers;
}
+const smartlist_t *
+router_get_fallback_dir_servers(void)
+{
+ if (!fallback_dir_servers)
+ fallback_dir_servers = smartlist_new();
+
+ return fallback_dir_servers;
+}
+
/** Try to find a running dirserver that supports operations of <b>type</b>.
*
* If there are no running dirservers in our routerlist and the
@@ -946,8 +1282,6 @@ const routerstatus_t *
router_pick_directory_server(dirinfo_type_t type, int flags)
{
const routerstatus_t *choice;
- if (get_options()->PreferTunneledDirConns)
- flags |= _PDS_PREFER_TUNNELED_DIR_CONNS;
if (!routerlist)
return NULL;
@@ -960,63 +1294,40 @@ router_pick_directory_server(dirinfo_type_t type, int flags)
"No reachable router entries for dirservers. "
"Trying them all again.");
/* mark all authdirservers as up again */
- mark_all_trusteddirservers_up();
+ mark_all_dirservers_up(fallback_dir_servers);
/* try again */
choice = router_pick_directory_server_impl(type, flags);
return choice;
}
-/** Try to determine which fraction of v2 and v3 directory requests aimed at
- * caches will be sent to us. Set *<b>v2_share_out</b> and
- * *<b>v3_share_out</b> to the fractions of v2 and v3 protocol shares we
- * expect to see, respectively. Return 0 on success, negative on failure. */
-int
-router_get_my_share_of_directory_requests(double *v2_share_out,
- double *v3_share_out)
+/** Return the dir_server_t for the directory authority whose identity
+ * key hashes to <b>digest</b>, or NULL if no such authority is known.
+ */
+dir_server_t *
+router_get_trusteddirserver_by_digest(const char *digest)
{
- const routerinfo_t *me = router_get_my_routerinfo();
- const routerstatus_t *rs;
- const int pds_flags = PDS_ALLOW_SELF|PDS_IGNORE_FASCISTFIREWALL;
- *v2_share_out = *v3_share_out = 0.0;
- if (!me)
- return -1;
- rs = router_get_consensus_status_by_id(me->cache_info.identity_digest);
- if (!rs)
- return -1;
-
- /* Calling for side effect */
- /* XXXX This is a bit of a kludge */
- if (rs->is_v2_dir) {
- sl_last_total_weighted_bw = 0;
- router_pick_directory_server(V2_DIRINFO, pds_flags);
- if (sl_last_total_weighted_bw != 0) {
- *v2_share_out = U64_TO_DBL(sl_last_weighted_bw_of_me) /
- U64_TO_DBL(sl_last_total_weighted_bw);
- }
- }
+ if (!trusted_dir_servers)
+ return NULL;
- if (rs->version_supports_v3_dir) {
- sl_last_total_weighted_bw = 0;
- router_pick_directory_server(V3_DIRINFO, pds_flags);
- if (sl_last_total_weighted_bw != 0) {
- *v3_share_out = U64_TO_DBL(sl_last_weighted_bw_of_me) /
- U64_TO_DBL(sl_last_total_weighted_bw);
- }
- }
+ SMARTLIST_FOREACH(trusted_dir_servers, dir_server_t *, ds,
+ {
+ if (tor_memeq(ds->digest, digest, DIGEST_LEN))
+ return ds;
+ });
- return 0;
+ return NULL;
}
-/** Return the trusted_dir_server_t for the directory authority whose identity
+/** Return the dir_server_t for the fallback dirserver whose identity
* key hashes to <b>digest</b>, or NULL if no such authority is known.
*/
-trusted_dir_server_t *
-router_get_trusteddirserver_by_digest(const char *digest)
+dir_server_t *
+router_get_fallback_dirserver_by_digest(const char *digest)
{
if (!trusted_dir_servers)
return NULL;
- SMARTLIST_FOREACH(trusted_dir_servers, trusted_dir_server_t *, ds,
+ SMARTLIST_FOREACH(trusted_dir_servers, dir_server_t *, ds,
{
if (tor_memeq(ds->digest, digest, DIGEST_LEN))
return ds;
@@ -1025,17 +1336,17 @@ router_get_trusteddirserver_by_digest(const char *digest)
return NULL;
}
-/** Return the trusted_dir_server_t for the directory authority whose
+/** Return the dir_server_t for the directory authority whose
* v3 identity key hashes to <b>digest</b>, or NULL if no such authority
* is known.
*/
-trusted_dir_server_t *
+dir_server_t *
trusteddirserver_get_by_v3_auth_digest(const char *digest)
{
if (!trusted_dir_servers)
return NULL;
- SMARTLIST_FOREACH(trusted_dir_servers, trusted_dir_server_t *, ds,
+ SMARTLIST_FOREACH(trusted_dir_servers, dir_server_t *, ds,
{
if (tor_memeq(ds->v3_identity_digest, digest, DIGEST_LEN) &&
(ds->type & V3_DIRINFO))
@@ -1045,18 +1356,35 @@ trusteddirserver_get_by_v3_auth_digest(const char *digest)
return NULL;
}
-/** Try to find a running trusted dirserver. Flags are as for
+/** Try to find a running directory authority. Flags are as for
* router_pick_directory_server.
*/
const routerstatus_t *
router_pick_trusteddirserver(dirinfo_type_t type, int flags)
{
+ return router_pick_dirserver_generic(trusted_dir_servers, type, flags);
+}
+
+/** Try to find a running fallback directory Flags are as for
+ * router_pick_directory_server.
+ */
+const routerstatus_t *
+router_pick_fallback_dirserver(dirinfo_type_t type, int flags)
+{
+ return router_pick_dirserver_generic(fallback_dir_servers, type, flags);
+}
+
+/** Try to find a running fallback directory Flags are as for
+ * router_pick_directory_server.
+ */
+static const routerstatus_t *
+router_pick_dirserver_generic(smartlist_t *sourcelist,
+ dirinfo_type_t type, int flags)
+{
const routerstatus_t *choice;
int busy = 0;
- if (get_options()->PreferTunneledDirConns)
- flags |= _PDS_PREFER_TUNNELED_DIR_CONNS;
- choice = router_pick_trusteddirserver_impl(type, flags, &busy);
+ choice = router_pick_trusteddirserver_impl(sourcelist, type, flags, &busy);
if (choice || !(flags & PDS_RETRY_IF_NO_SERVERS))
return choice;
if (busy) {
@@ -1069,9 +1397,9 @@ router_pick_trusteddirserver(dirinfo_type_t type, int flags)
}
log_info(LD_DIR,
- "No trusted dirservers are reachable. Trying them all again.");
- mark_all_trusteddirservers_up();
- return router_pick_trusteddirserver_impl(type, flags, NULL);
+ "No dirservers are reachable. Trying them all again.");
+ mark_all_dirservers_up(sourcelist);
+ return router_pick_trusteddirserver_impl(sourcelist, type, flags, NULL);
}
/** How long do we avoid using a directory server after it's given us a 503? */
@@ -1079,10 +1407,7 @@ router_pick_trusteddirserver(dirinfo_type_t type, int flags)
/** Pick a random running valid directory server/mirror from our
* routerlist. Arguments are as for router_pick_directory_server(), except
- * that RETRY_IF_NO_SERVERS is ignored, and:
- *
- * If the _PDS_PREFER_TUNNELED_DIR_CONNS flag is set, prefer directory servers
- * that we can use with BEGINDIR.
+ * that RETRY_IF_NO_SERVERS is ignored.
*/
static const routerstatus_t *
router_pick_directory_server_impl(dirinfo_type_t type, int flags)
@@ -1096,7 +1421,7 @@ router_pick_directory_server_impl(dirinfo_type_t type, int flags)
const networkstatus_t *consensus = networkstatus_get_latest_consensus();
int requireother = ! (flags & PDS_ALLOW_SELF);
int fascistfirewall = ! (flags & PDS_IGNORE_FASCISTFIREWALL);
- int prefer_tunnel = (flags & _PDS_PREFER_TUNNELED_DIR_CONNS);
+ int for_guard = (flags & PDS_FOR_GUARD);
int try_excluding = 1, n_excluded = 0;
if (!consensus)
@@ -1127,21 +1452,15 @@ router_pick_directory_server_impl(dirinfo_type_t type, int flags)
continue;
if (requireother && router_digest_is_me(node->identity))
continue;
- if (type & V3_DIRINFO) {
- if (!(status->version_supports_v3_dir ||
- router_digest_is_trusted_dir_type(node->identity,
- V3_DIRINFO)))
- continue;
- }
is_trusted = router_digest_is_trusted_dir(node->identity);
- if ((type & V2_DIRINFO) && !(node->rs->is_v2_dir || is_trusted))
- continue;
if ((type & EXTRAINFO_DIRINFO) &&
!router_supports_extrainfo(node->identity, 0))
continue;
if ((type & MICRODESC_DIRINFO) && !is_trusted &&
!node->rs->version_supports_microdesc_cache)
continue;
+ if (for_guard && node->using_as_guard)
+ continue; /* Don't make the same node a guard twice. */
if (try_excluding &&
routerset_contains_routerstatus(options->ExcludeNodes, status,
country)) {
@@ -1154,9 +1473,7 @@ router_pick_directory_server_impl(dirinfo_type_t type, int flags)
is_overloaded = status->last_dir_503_at + DIR_503_TIMEOUT > now;
- if (prefer_tunnel &&
- status->version_supports_begindir &&
- (!fascistfirewall ||
+ if ((!fascistfirewall ||
fascist_firewall_allows_address_or(&addr, status->or_port)))
smartlist_add(is_trusted ? trusted_tunnel :
is_overloaded ? overloaded_tunnel : tunnel, (void*)node);
@@ -1203,28 +1520,55 @@ router_pick_directory_server_impl(dirinfo_type_t type, int flags)
return result ? result->rs : NULL;
}
-/** Choose randomly from among the trusted dirservers that are up. Flags
- * are as for router_pick_directory_server_impl().
+/** Pick a random element from a list of dir_server_t, weighting by their
+ * <b>weight</b> field. */
+static const dir_server_t *
+dirserver_choose_by_weight(const smartlist_t *servers, double authority_weight)
+{
+ int n = smartlist_len(servers);
+ int i;
+ u64_dbl_t *weights;
+ const dir_server_t *ds;
+
+ weights = tor_malloc(sizeof(u64_dbl_t) * n);
+ for (i = 0; i < n; ++i) {
+ ds = smartlist_get(servers, i);
+ weights[i].dbl = ds->weight;
+ if (ds->is_authority)
+ weights[i].dbl *= authority_weight;
+ }
+
+ scale_array_elements_to_u64(weights, n, NULL);
+ i = choose_array_element_by_weight(weights, n);
+ tor_free(weights);
+ return (i < 0) ? NULL : smartlist_get(servers, i);
+}
+
+/** Choose randomly from among the dir_server_ts in sourcelist that
+ * are up. Flags are as for router_pick_directory_server_impl().
*/
static const routerstatus_t *
-router_pick_trusteddirserver_impl(dirinfo_type_t type, int flags,
+router_pick_trusteddirserver_impl(const smartlist_t *sourcelist,
+ dirinfo_type_t type, int flags,
int *n_busy_out)
{
const or_options_t *options = get_options();
smartlist_t *direct, *tunnel;
smartlist_t *overloaded_direct, *overloaded_tunnel;
const routerinfo_t *me = router_get_my_routerinfo();
- const routerstatus_t *result;
+ const routerstatus_t *result = NULL;
time_t now = time(NULL);
const int requireother = ! (flags & PDS_ALLOW_SELF);
const int fascistfirewall = ! (flags & PDS_IGNORE_FASCISTFIREWALL);
- const int prefer_tunnel = (flags & _PDS_PREFER_TUNNELED_DIR_CONNS);
const int no_serverdesc_fetching =(flags & PDS_NO_EXISTING_SERVERDESC_FETCH);
const int no_microdesc_fetching =(flags & PDS_NO_EXISTING_MICRODESC_FETCH);
+ const double auth_weight = (sourcelist == fallback_dir_servers) ?
+ options->DirAuthorityFallbackRate : 1.0;
+ smartlist_t *pick_from;
int n_busy = 0;
int try_excluding = 1, n_excluded = 0;
- if (!trusted_dir_servers)
+ if (!sourcelist)
return NULL;
retry_without_exclude:
@@ -1234,7 +1578,7 @@ router_pick_trusteddirserver_impl(dirinfo_type_t type, int flags,
overloaded_direct = smartlist_new();
overloaded_tunnel = smartlist_new();
- SMARTLIST_FOREACH_BEGIN(trusted_dir_servers, trusted_dir_server_t *, d)
+ SMARTLIST_FOREACH_BEGIN(sourcelist, const dir_server_t *, d)
{
int is_overloaded =
d->fake_status.last_dir_503_at + DIR_503_TIMEOUT > now;
@@ -1276,27 +1620,32 @@ router_pick_trusteddirserver_impl(dirinfo_type_t type, int flags,
}
}
- if (prefer_tunnel &&
- d->or_port &&
+ if (d->or_port &&
(!fascistfirewall ||
fascist_firewall_allows_address_or(&addr, d->or_port)))
- smartlist_add(is_overloaded ? overloaded_tunnel : tunnel,
- &d->fake_status);
+ smartlist_add(is_overloaded ? overloaded_tunnel : tunnel, (void*)d);
else if (!fascistfirewall ||
fascist_firewall_allows_address_dir(&addr, d->dir_port))
- smartlist_add(is_overloaded ? overloaded_direct : direct,
- &d->fake_status);
+ smartlist_add(is_overloaded ? overloaded_direct : direct, (void*)d);
}
SMARTLIST_FOREACH_END(d);
if (smartlist_len(tunnel)) {
- result = smartlist_choose(tunnel);
+ pick_from = tunnel;
} else if (smartlist_len(overloaded_tunnel)) {
- result = smartlist_choose(overloaded_tunnel);
+ pick_from = overloaded_tunnel;
} else if (smartlist_len(direct)) {
- result = smartlist_choose(direct);
+ pick_from = direct;
} else {
- result = smartlist_choose(overloaded_direct);
+ pick_from = overloaded_direct;
+ }
+
+ {
+ const dir_server_t *selection =
+ dirserver_choose_by_weight(pick_from, auth_weight);
+
+ if (selection)
+ result = &selection->fake_status;
}
if (n_busy_out)
@@ -1318,19 +1667,18 @@ router_pick_trusteddirserver_impl(dirinfo_type_t type, int flags,
return result;
}
-/** Go through and mark the authoritative dirservers as up. */
+/** Mark as running every dir_server_t in <b>server_list</b>. */
static void
-mark_all_trusteddirservers_up(void)
+mark_all_dirservers_up(smartlist_t *server_list)
{
- SMARTLIST_FOREACH(nodelist_get_list(), node_t *, node, {
- if (router_digest_is_trusted_dir(node->identity))
- node->is_running = 1;
- });
- if (trusted_dir_servers) {
- SMARTLIST_FOREACH_BEGIN(trusted_dir_servers, trusted_dir_server_t *, dir) {
+ if (server_list) {
+ SMARTLIST_FOREACH_BEGIN(server_list, dir_server_t *, dir) {
routerstatus_t *rs;
+ node_t *node;
dir->is_running = 1;
- download_status_reset(&dir->v2_ns_dl_status);
+ node = node_get_mutable_by_id(dir->digest);
+ if (node)
+ node->is_running = 1;
rs = router_get_mutable_consensus_status_by_id(dir->digest);
if (rs) {
rs->last_dir_503_at = 0;
@@ -1343,9 +1691,11 @@ mark_all_trusteddirservers_up(void)
/** Return true iff r1 and r2 have the same address and OR port. */
int
-routers_have_same_or_addr(const routerinfo_t *r1, const routerinfo_t *r2)
+routers_have_same_or_addrs(const routerinfo_t *r1, const routerinfo_t *r2)
{
- return r1->addr == r2->addr && r1->or_port == r2->or_port;
+ return r1->addr == r2->addr && r1->or_port == r2->or_port &&
+ tor_addr_eq(&r1->ipv6_addr, &r2->ipv6_addr) &&
+ r1->ipv6_orport == r2->ipv6_orport;
}
/** Reset all internal variables used to count failed downloads of network
@@ -1353,89 +1703,7 @@ routers_have_same_or_addr(const routerinfo_t *r1, const routerinfo_t *r2)
void
router_reset_status_download_failures(void)
{
- mark_all_trusteddirservers_up();
-}
-
-/** Return true iff router1 and router2 have similar enough network addresses
- * that we should treat them as being in the same family */
-static INLINE int
-addrs_in_same_network_family(const tor_addr_t *a1,
- const tor_addr_t *a2)
-{
- /* XXXX MOVE ? */
- return 0 == tor_addr_compare_masked(a1, a2, 16, CMP_SEMANTIC);
-}
-
-/**
- * Add all the family of <b>node</b>, including <b>node</b> itself, to
- * the smartlist <b>sl</b>.
- *
- * This is used to make sure we don't pick siblings in a single path, or
- * pick more than one relay from a family for our entry guard list.
- * Note that a node may be added to <b>sl</b> more than once if it is
- * part of <b>node</b>'s family for more than one reason.
- */
-void
-nodelist_add_node_and_family(smartlist_t *sl, const node_t *node)
-{
- /* XXXX MOVE */
- const smartlist_t *all_nodes = nodelist_get_list();
- const smartlist_t *declared_family;
- const or_options_t *options = get_options();
-
- tor_assert(node);
-
- declared_family = node_get_declared_family(node);
-
- /* Let's make sure that we have the node itself, if it's a real node. */
- {
- const node_t *real_node = node_get_by_id(node->identity);
- if (real_node)
- smartlist_add(sl, (node_t*)real_node);
- }
-
- /* First, add any nodes with similar network addresses. */
- if (options->EnforceDistinctSubnets) {
- tor_addr_t node_addr;
- node_get_addr(node, &node_addr);
-
- SMARTLIST_FOREACH_BEGIN(all_nodes, const node_t *, node2) {
- tor_addr_t a;
- node_get_addr(node2, &a);
- if (addrs_in_same_network_family(&a, &node_addr))
- smartlist_add(sl, (void*)node2);
- } SMARTLIST_FOREACH_END(node2);
- }
-
- /* Now, add all nodes in the declared_family of this node, if they
- * also declare this node to be in their family. */
- if (declared_family) {
- /* Add every r such that router declares familyness with node, and node
- * declares familyhood with router. */
- SMARTLIST_FOREACH_BEGIN(declared_family, const char *, name) {
- const node_t *node2;
- const smartlist_t *family2;
- if (!(node2 = node_get_by_nickname(name, 0)))
- continue;
- if (!(family2 = node_get_declared_family(node2)))
- continue;
- SMARTLIST_FOREACH_BEGIN(family2, const char *, name2) {
- if (node_nickname_matches(node, name2)) {
- smartlist_add(sl, (void*)node2);
- break;
- }
- } SMARTLIST_FOREACH_END(name2);
- } SMARTLIST_FOREACH_END(name);
- }
-
- /* If the user declared any families locally, honor those too. */
- if (options->NodeFamilySets) {
- SMARTLIST_FOREACH(options->NodeFamilySets, const routerset_t *, rs, {
- if (routerset_contains_node(rs, node)) {
- routerset_get_all_nodes(sl, rs, NULL, 0);
- }
- });
- }
+ mark_all_dirservers_up(fallback_dir_servers);
}
/** Given a <b>router</b>, add every node_t in its family (including the
@@ -1459,83 +1727,6 @@ routerlist_add_node_and_family(smartlist_t *sl, const routerinfo_t *router)
nodelist_add_node_and_family(sl, node);
}
-/** Return true iff <b>node</b> is named by some nickname in <b>lst</b>. */
-static INLINE int
-node_in_nickname_smartlist(const smartlist_t *lst, const node_t *node)
-{
- /* XXXX MOVE */
- if (!lst) return 0;
- SMARTLIST_FOREACH(lst, const char *, name, {
- if (node_nickname_matches(node, name))
- return 1;
- });
- return 0;
-}
-
-/** Return true iff r1 and r2 are in the same family, but not the same
- * router. */
-int
-nodes_in_same_family(const node_t *node1, const node_t *node2)
-{
- /* XXXX MOVE */
- const or_options_t *options = get_options();
-
- /* Are they in the same family because of their addresses? */
- if (options->EnforceDistinctSubnets) {
- tor_addr_t a1, a2;
- node_get_addr(node1, &a1);
- node_get_addr(node2, &a2);
- if (addrs_in_same_network_family(&a1, &a2))
- return 1;
- }
-
- /* Are they in the same family because the agree they are? */
- {
- const smartlist_t *f1, *f2;
- f1 = node_get_declared_family(node1);
- f2 = node_get_declared_family(node2);
- if (f1 && f2 &&
- node_in_nickname_smartlist(f1, node2) &&
- node_in_nickname_smartlist(f2, node1))
- return 1;
- }
-
- /* Are they in the same option because the user says they are? */
- if (options->NodeFamilySets) {
- SMARTLIST_FOREACH(options->NodeFamilySets, const routerset_t *, rs, {
- if (routerset_contains_node(rs, node1) &&
- routerset_contains_node(rs, node2))
- return 1;
- });
- }
-
- return 0;
-}
-
-/** Return 1 iff any member of the (possibly NULL) comma-separated list
- * <b>list</b> is an acceptable nickname or hexdigest for <b>router</b>. Else
- * return 0.
- */
-int
-router_nickname_is_in_list(const routerinfo_t *router, const char *list)
-{
- smartlist_t *nickname_list;
- int v = 0;
-
- if (!list)
- return 0; /* definitely not */
- tor_assert(router);
-
- nickname_list = smartlist_new();
- smartlist_split_string(nickname_list, list, ",",
- SPLIT_SKIP_SPACE|SPLIT_STRIP_SPACE|SPLIT_IGNORE_BLANK, 0);
- SMARTLIST_FOREACH(nickname_list, const char *, cp,
- if (router_nickname_matches(router, cp)) {v=1;break;});
- SMARTLIST_FOREACH(nickname_list, char *, cp, tor_free(cp));
- smartlist_free(nickname_list);
- return v;
-}
-
/** Add every suitable node from our nodelist to <b>sl</b>, so that
* we can pick a node for a circuit.
*/
@@ -1575,56 +1766,6 @@ routerlist_find_my_routerinfo(void)
return NULL;
}
-/** Find a router that's up, that has this IP address, and
- * that allows exit to this address:port, or return NULL if there
- * isn't a good one.
- * Don't exit enclave to excluded relays -- it wouldn't actually
- * hurt anything, but this way there are fewer confused users.
- */
-const node_t *
-router_find_exact_exit_enclave(const char *address, uint16_t port)
-{/*XXXX MOVE*/
- uint32_t addr;
- struct in_addr in;
- tor_addr_t a;
- const or_options_t *options = get_options();
-
- if (!tor_inet_aton(address, &in))
- return NULL; /* it's not an IP already */
- addr = ntohl(in.s_addr);
-
- tor_addr_from_ipv4h(&a, addr);
-
- SMARTLIST_FOREACH(nodelist_get_list(), const node_t *, node, {
- if (node_get_addr_ipv4h(node) == addr &&
- node->is_running &&
- compare_tor_addr_to_node_policy(&a, port, node) ==
- ADDR_POLICY_ACCEPTED &&
- !routerset_contains_node(options->_ExcludeExitNodesUnion, node))
- return node;
- });
- return NULL;
-}
-
-/** Return 1 if <b>router</b> is not suitable for these parameters, else 0.
- * If <b>need_uptime</b> is non-zero, we require a minimum uptime.
- * If <b>need_capacity</b> is non-zero, we require a minimum advertised
- * bandwidth.
- * If <b>need_guard</b>, we require that the router is a possible entry guard.
- */
-int
-node_is_unreliable(const node_t *node, int need_uptime,
- int need_capacity, int need_guard)
-{
- if (need_uptime && !node->is_stable)
- return 1;
- if (need_capacity && !node->is_fast)
- return 1;
- if (need_guard && !node->is_possible_guard)
- return 1;
- return 0;
-}
-
/** Return the smaller of the router's configured BandwidthRate
* and its advertised capacity. */
uint32_t
@@ -1652,6 +1793,92 @@ router_get_advertised_bandwidth_capped(const routerinfo_t *router)
return result;
}
+/** Given an array of double/uint64_t unions that are currently being used as
+ * doubles, convert them to uint64_t, and try to scale them linearly so as to
+ * much of the range of uint64_t. If <b>total_out</b> is provided, set it to
+ * the sum of all elements in the array _before_ scaling. */
+STATIC void
+scale_array_elements_to_u64(u64_dbl_t *entries, int n_entries,
+ uint64_t *total_out)
+{
+ double total = 0.0;
+ double scale_factor;
+ int i;
+ /* big, but far away from overflowing an int64_t */
+#define SCALE_TO_U64_MAX (INT64_MAX / 4)
+
+ for (i = 0; i < n_entries; ++i)
+ total += entries[i].dbl;
+
+ scale_factor = SCALE_TO_U64_MAX / total;
+
+ for (i = 0; i < n_entries; ++i)
+ entries[i].u64 = tor_llround(entries[i].dbl * scale_factor);
+
+ if (total_out)
+ *total_out = (uint64_t) total;
+
+#undef SCALE_TO_U64_MAX
+}
+
+/** Time-invariant 64-bit greater-than; works on two integers in the range
+ * (0,INT64_MAX). */
+#if SIZEOF_VOID_P == 8
+#define gt_i64_timei(a,b) ((a) > (b))
+#else
+static INLINE int
+gt_i64_timei(uint64_t a, uint64_t b)
+{
+ int64_t diff = (int64_t) (b - a);
+ int res = diff >> 63;
+ return res & 1;
+}
+#endif
+
+/** Pick a random element of <b>n_entries</b>-element array <b>entries</b>,
+ * choosing each element with a probability proportional to its (uint64_t)
+ * value, and return the index of that element. If all elements are 0, choose
+ * an index at random. Return -1 on error.
+ */
+STATIC int
+choose_array_element_by_weight(const u64_dbl_t *entries, int n_entries)
+{
+ int i, i_chosen=-1, n_chosen=0;
+ uint64_t total_so_far = 0;
+ uint64_t rand_val;
+ uint64_t total = 0;
+
+ for (i = 0; i < n_entries; ++i)
+ total += entries[i].u64;
+
+ if (n_entries < 1)
+ return -1;
+
+ if (total == 0)
+ return crypto_rand_int(n_entries);
+
+ tor_assert(total < INT64_MAX);
+
+ rand_val = crypto_rand_uint64(total);
+
+ for (i = 0; i < n_entries; ++i) {
+ total_so_far += entries[i].u64;
+ if (gt_i64_timei(total_so_far, rand_val)) {
+ i_chosen = i;
+ n_chosen++;
+ /* Set rand_val to INT64_MAX rather than stopping the loop. This way,
+ * the time we spend in the loop does not leak which element we chose. */
+ rand_val = INT64_MAX;
+ }
+ }
+ tor_assert(total_so_far == total);
+ tor_assert(n_chosen == 1);
+ tor_assert(i_chosen >= 0);
+ tor_assert(i_chosen < n_entries);
+
+ return i_chosen;
+}
+
/** When weighting bridges, enforce these values as lower and upper
* bound for believable bandwidth, because there is no way for us
* to verify a bridge's bandwidth currently. */
@@ -1698,20 +1925,39 @@ kb_to_bytes(uint32_t bw)
* guards proportionally less.
*/
static const node_t *
-smartlist_choose_node_by_bandwidth_weights(smartlist_t *sl,
+smartlist_choose_node_by_bandwidth_weights(const smartlist_t *sl,
bandwidth_weight_rule_t rule)
{
+ u64_dbl_t *bandwidths=NULL;
+
+ if (compute_weighted_bandwidths(sl, rule, &bandwidths) < 0)
+ return NULL;
+
+ scale_array_elements_to_u64(bandwidths, smartlist_len(sl), NULL);
+
+ {
+ int idx = choose_array_element_by_weight(bandwidths,
+ smartlist_len(sl));
+ tor_free(bandwidths);
+ return idx < 0 ? NULL : smartlist_get(sl, idx);
+ }
+}
+
+/** Given a list of routers and a weighting rule as in
+ * smartlist_choose_node_by_bandwidth_weights, compute weighted bandwidth
+ * values for each node and store them in a freshly allocated
+ * *<b>bandwidths_out</b> of the same length as <b>sl</b>, and holding results
+ * as doubles. Return 0 on success, -1 on failure. */
+static int
+compute_weighted_bandwidths(const smartlist_t *sl,
+ bandwidth_weight_rule_t rule,
+ u64_dbl_t **bandwidths_out)
+{
int64_t weight_scale;
- int64_t rand_bw;
double Wg = -1, Wm = -1, We = -1, Wd = -1;
double Wgb = -1, Wmb = -1, Web = -1, Wdb = -1;
- double weighted_bw = 0, unweighted_bw = 0;
- double *bandwidths;
- double tmp = 0;
- unsigned int i;
- unsigned int i_chosen;
- unsigned int i_has_been_chosen;
- int have_unknown = 0; /* true iff sl contains element not in consensus. */
+ uint64_t weighted_bw = 0;
+ u64_dbl_t *bandwidths;
/* Can't choose exit and guard at same time */
tor_assert(rule == NO_WEIGHTING ||
@@ -1725,10 +1971,10 @@ smartlist_choose_node_by_bandwidth_weights(smartlist_t *sl,
"Empty routerlist passed in to consensus weight node "
"selection for rule %s",
bandwidth_weight_rule_to_string(rule));
- return NULL;
+ return -1;
}
- weight_scale = circuit_build_times_get_bw_scale(NULL);
+ weight_scale = networkstatus_get_weight_scale_param(NULL);
if (rule == WEIGHT_FOR_GUARD) {
Wg = networkstatus_get_bw_weight(NULL, "Wgg", -1);
@@ -1779,7 +2025,7 @@ smartlist_choose_node_by_bandwidth_weights(smartlist_t *sl,
log_debug(LD_CIRC,
"Got negative bandwidth weights. Defaulting to old selection"
" algorithm.");
- return NULL; // Use old algorithm.
+ return -1; // Use old algorithm.
}
Wg /= weight_scale;
@@ -1792,11 +2038,11 @@ smartlist_choose_node_by_bandwidth_weights(smartlist_t *sl,
Web /= weight_scale;
Wdb /= weight_scale;
- bandwidths = tor_malloc_zero(sizeof(double)*smartlist_len(sl));
+ bandwidths = tor_malloc_zero(sizeof(u64_dbl_t)*smartlist_len(sl));
// Cycle through smartlist and total the bandwidth.
SMARTLIST_FOREACH_BEGIN(sl, const node_t *, node) {
- int is_exit = 0, is_guard = 0, is_dir = 0, this_bw = 0, is_me = 0;
+ int is_exit = 0, is_guard = 0, is_dir = 0, this_bw = 0;
double weight = 1;
is_exit = node->is_exit && ! node->is_bad_exit;
is_guard = node->is_possible_guard;
@@ -1809,18 +2055,16 @@ smartlist_choose_node_by_bandwidth_weights(smartlist_t *sl,
log_warn(LD_BUG,
"Consensus is not listing bandwidths. Defaulting back to "
"old router selection algorithm.");
- return NULL;
+ return -1;
}
- this_bw = kb_to_bytes(node->rs->bandwidth);
+ this_bw = kb_to_bytes(node->rs->bandwidth_kb);
} else if (node->ri) {
/* bridge or other descriptor not in our consensus */
this_bw = bridge_get_advertised_bandwidth_bounded(node->ri);
- have_unknown = 1;
} else {
/* We can't use this one. */
continue;
}
- is_me = router_digest_is_me(node->identity);
if (is_guard && is_exit) {
weight = (is_dir ? Wdb*Wd : Wd);
@@ -1831,72 +2075,63 @@ smartlist_choose_node_by_bandwidth_weights(smartlist_t *sl,
} else { // middle
weight = (is_dir ? Wmb*Wm : Wm);
}
-
- bandwidths[node_sl_idx] = weight*this_bw;
- weighted_bw += weight*this_bw;
- unweighted_bw += this_bw;
- if (is_me)
- sl_last_weighted_bw_of_me = weight*this_bw;
+ /* These should be impossible; but overflows here would be bad, so let's
+ * make sure. */
+ if (this_bw < 0)
+ this_bw = 0;
+ if (weight < 0.0)
+ weight = 0.0;
+
+ bandwidths[node_sl_idx].dbl = weight*this_bw + 0.5;
} SMARTLIST_FOREACH_END(node);
- /* XXXX this is a kludge to expose these values. */
- sl_last_total_weighted_bw = weighted_bw;
-
- log_debug(LD_CIRC, "Choosing node for rule %s based on weights "
- "Wg=%f Wm=%f We=%f Wd=%f with total bw %f",
+ log_debug(LD_CIRC, "Generated weighted bandwidths for rule %s based "
+ "on weights "
+ "Wg=%f Wm=%f We=%f Wd=%f with total bw "U64_FORMAT,
bandwidth_weight_rule_to_string(rule),
- Wg, Wm, We, Wd, weighted_bw);
-
- /* If there is no bandwidth, choose at random */
- if (DBL_TO_U64(weighted_bw) == 0) {
- /* Don't warn when using bridges/relays not in the consensus */
- if (!have_unknown) {
-#define ZERO_BANDWIDTH_WARNING_INTERVAL (15)
- static ratelim_t zero_bandwidth_warning_limit =
- RATELIM_INIT(ZERO_BANDWIDTH_WARNING_INTERVAL);
- char *msg;
- if ((msg = rate_limit_log(&zero_bandwidth_warning_limit,
- approx_time()))) {
- log_warn(LD_CIRC,
- "Weighted bandwidth is %f in node selection for rule %s "
- "(unweighted was %f) %s",
- weighted_bw, bandwidth_weight_rule_to_string(rule),
- unweighted_bw, msg);
- }
- }
- tor_free(bandwidths);
- return smartlist_choose(sl);
- }
+ Wg, Wm, We, Wd, U64_PRINTF_ARG(weighted_bw));
- rand_bw = crypto_rand_uint64(DBL_TO_U64(weighted_bw));
- rand_bw++; /* crypto_rand_uint64() counts from 0, and we need to count
- * from 1 below. See bug 1203 for details. */
-
- /* Last, count through sl until we get to the element we picked */
- i_chosen = (unsigned)smartlist_len(sl);
- i_has_been_chosen = 0;
- tmp = 0.0;
- for (i=0; i < (unsigned)smartlist_len(sl); i++) {
- tmp += bandwidths[i];
- if (tmp >= rand_bw && !i_has_been_chosen) {
- i_chosen = i;
- i_has_been_chosen = 1;
- }
- }
- i = i_chosen;
-
- if (i == (unsigned)smartlist_len(sl)) {
- /* This was once possible due to round-off error, but shouldn't be able
- * to occur any longer. */
- tor_fragile_assert();
- --i;
- log_warn(LD_BUG, "Round-off error in computing bandwidth had an effect on "
- " which router we chose. Please tell the developers. "
- "%f " U64_FORMAT " %f", tmp, U64_PRINTF_ARG(rand_bw),
- weighted_bw);
+ *bandwidths_out = bandwidths;
+
+ return 0;
+}
+
+/** For all nodes in <b>sl</b>, return the fraction of those nodes, weighted
+ * by their weighted bandwidths with rule <b>rule</b>, for which we have
+ * descriptors. */
+double
+frac_nodes_with_descriptors(const smartlist_t *sl,
+ bandwidth_weight_rule_t rule)
+{
+ u64_dbl_t *bandwidths = NULL;
+ double total, present;
+
+ if (smartlist_len(sl) == 0)
+ return 0.0;
+
+ if (compute_weighted_bandwidths(sl, rule, &bandwidths) < 0) {
+ int n_with_descs = 0;
+ SMARTLIST_FOREACH(sl, const node_t *, node, {
+ if (node_has_descriptor(node))
+ n_with_descs++;
+ });
+ return ((double)n_with_descs) / (double)smartlist_len(sl);
}
+
+ total = present = 0.0;
+ SMARTLIST_FOREACH_BEGIN(sl, const node_t *, node) {
+ const double bw = bandwidths[node_sl_idx].dbl;
+ total += bw;
+ if (node_has_descriptor(node))
+ present += bw;
+ } SMARTLIST_FOREACH_END(node);
+
tor_free(bandwidths);
- return smartlist_get(sl, i);
+
+ if (total < 1.0)
+ return 0;
+
+ return present / total;
}
/** Helper function:
@@ -1913,24 +2148,22 @@ smartlist_choose_node_by_bandwidth_weights(smartlist_t *sl,
* guards proportionally less.
*/
static const node_t *
-smartlist_choose_node_by_bandwidth(smartlist_t *sl,
+smartlist_choose_node_by_bandwidth(const smartlist_t *sl,
bandwidth_weight_rule_t rule)
{
unsigned int i;
- unsigned int i_chosen;
- unsigned int i_has_been_chosen;
- int32_t *bandwidths;
+ u64_dbl_t *bandwidths;
int is_exit;
int is_guard;
- uint64_t total_nonexit_bw = 0, total_exit_bw = 0, total_bw = 0;
- uint64_t total_nonguard_bw = 0, total_guard_bw = 0;
- uint64_t rand_bw, tmp;
+ int is_fast;
+ double total_nonexit_bw = 0, total_exit_bw = 0;
+ double total_nonguard_bw = 0, total_guard_bw = 0;
double exit_weight;
double guard_weight;
int n_unknown = 0;
+ bitarray_t *fast_bits;
bitarray_t *exit_bits;
bitarray_t *guard_bits;
- int me_idx = -1;
// This function does not support WEIGHT_FOR_DIR
// or WEIGHT_FOR_MID
@@ -1951,10 +2184,9 @@ smartlist_choose_node_by_bandwidth(smartlist_t *sl,
}
/* First count the total bandwidth weight, and make a list
- * of each value. <0 means "unknown; no routerinfo." We use the
- * bits of negative values to remember whether the router was fast (-x)&1
- * and whether it was an exit (-x)&2 or guard (-x)&4. Yes, it's a hack. */
- bandwidths = tor_malloc(sizeof(int32_t)*smartlist_len(sl));
+ * of each value. We use UINT64_MAX to indicate "unknown". */
+ bandwidths = tor_malloc_zero(sizeof(u64_dbl_t)*smartlist_len(sl));
+ fast_bits = bitarray_init_zero(smartlist_len(sl));
exit_bits = bitarray_init_zero(smartlist_len(sl));
guard_bits = bitarray_init_zero(smartlist_len(sl));
@@ -1962,25 +2194,16 @@ smartlist_choose_node_by_bandwidth(smartlist_t *sl,
SMARTLIST_FOREACH_BEGIN(sl, const node_t *, node) {
/* first, learn what bandwidth we think i has */
int is_known = 1;
- int32_t flags = 0;
uint32_t this_bw = 0;
i = node_sl_idx;
- if (router_digest_is_me(node->identity))
- me_idx = node_sl_idx;
-
is_exit = node->is_exit;
is_guard = node->is_possible_guard;
if (node->rs) {
if (node->rs->has_bandwidth) {
- this_bw = kb_to_bytes(node->rs->bandwidth);
+ this_bw = kb_to_bytes(node->rs->bandwidth_kb);
} else { /* guess */
- /* XXX024 once consensuses always list bandwidths, we can take
- * this guessing business out. -RD */
is_known = 0;
- flags = node->rs->is_fast ? 1 : 0;
- flags |= is_exit ? 2 : 0;
- flags |= is_guard ? 4 : 0;
}
} else if (node->ri) {
/* Must be a bridge if we're willing to use it */
@@ -1991,12 +2214,11 @@ smartlist_choose_node_by_bandwidth(smartlist_t *sl,
bitarray_set(exit_bits, i);
if (is_guard)
bitarray_set(guard_bits, i);
+ if (node->is_fast)
+ bitarray_set(fast_bits, i);
+
if (is_known) {
- bandwidths[i] = (int32_t) this_bw;
- /* Casting this_bw to int32_t is safe because both kb_to_bytes
- and bridge_get_advertised_bandwidth_bounded limit it to below
- INT32_MAX. */
- tor_assert(bandwidths[i] >= 0);
+ bandwidths[i].dbl = this_bw;
if (is_guard)
total_guard_bw += this_bw;
else
@@ -2007,14 +2229,16 @@ smartlist_choose_node_by_bandwidth(smartlist_t *sl,
total_nonexit_bw += this_bw;
} else {
++n_unknown;
- bandwidths[node_sl_idx] = -flags;
+ bandwidths[i].dbl = -1.0;
}
} SMARTLIST_FOREACH_END(node);
+#define EPSILON .1
+
/* Now, fill in the unknown values. */
if (n_unknown) {
int32_t avg_fast, avg_slow;
- if (total_exit_bw+total_nonexit_bw) {
+ if (total_exit_bw+total_nonexit_bw < EPSILON) {
/* if there's some bandwidth, there's at least one known router,
* so no worries about div by 0 here */
int n_known = smartlist_len(sl)-n_unknown;
@@ -2025,26 +2249,27 @@ smartlist_choose_node_by_bandwidth(smartlist_t *sl,
avg_slow = 20000;
}
for (i=0; i<(unsigned)smartlist_len(sl); ++i) {
- int32_t bw = bandwidths[i];
- if (bw>=0)
+ if (bandwidths[i].dbl >= 0.0)
continue;
- is_exit = ((-bw)&2);
- is_guard = ((-bw)&4);
- bandwidths[i] = ((-bw)&1) ? avg_fast : avg_slow;
+ is_fast = bitarray_is_set(fast_bits, i);
+ is_exit = bitarray_is_set(exit_bits, i);
+ is_guard = bitarray_is_set(guard_bits, i);
+ bandwidths[i].dbl = is_fast ? avg_fast : avg_slow;
if (is_exit)
- total_exit_bw += bandwidths[i];
+ total_exit_bw += bandwidths[i].dbl;
else
- total_nonexit_bw += bandwidths[i];
+ total_nonexit_bw += bandwidths[i].dbl;
if (is_guard)
- total_guard_bw += bandwidths[i];
+ total_guard_bw += bandwidths[i].dbl;
else
- total_nonguard_bw += bandwidths[i];
+ total_nonguard_bw += bandwidths[i].dbl;
}
}
/* If there's no bandwidth at all, pick at random. */
- if (!(total_exit_bw+total_nonexit_bw)) {
+ if (total_exit_bw+total_nonexit_bw < EPSILON) {
tor_free(bandwidths);
+ tor_free(fast_bits);
tor_free(exit_bits);
tor_free(guard_bits);
return smartlist_choose(sl);
@@ -2059,12 +2284,12 @@ smartlist_choose_node_by_bandwidth(smartlist_t *sl,
* For detailed derivation of this formula, see
* http://archives.seul.org/or/dev/Jul-2007/msg00056.html
*/
- if (rule == WEIGHT_FOR_EXIT || !total_exit_bw)
+ if (rule == WEIGHT_FOR_EXIT || total_exit_bw<EPSILON)
exit_weight = 1.0;
else
exit_weight = 1.0 - all_bw/(3.0*exit_bw);
- if (rule == WEIGHT_FOR_GUARD || !total_guard_bw)
+ if (rule == WEIGHT_FOR_GUARD || total_guard_bw<EPSILON)
guard_weight = 1.0;
else
guard_weight = 1.0 - all_bw/(3.0*guard_bw);
@@ -2075,29 +2300,21 @@ smartlist_choose_node_by_bandwidth(smartlist_t *sl,
if (guard_weight <= 0.0)
guard_weight = 0.0;
- total_bw = 0;
- sl_last_weighted_bw_of_me = 0;
for (i=0; i < (unsigned)smartlist_len(sl); i++) {
- uint64_t bw;
+ tor_assert(bandwidths[i].dbl >= 0.0);
+
is_exit = bitarray_is_set(exit_bits, i);
is_guard = bitarray_is_set(guard_bits, i);
if (is_exit && is_guard)
- bw = ((uint64_t)(bandwidths[i] * exit_weight * guard_weight));
+ bandwidths[i].dbl *= exit_weight * guard_weight;
else if (is_guard)
- bw = ((uint64_t)(bandwidths[i] * guard_weight));
+ bandwidths[i].dbl *= guard_weight;
else if (is_exit)
- bw = ((uint64_t)(bandwidths[i] * exit_weight));
- else
- bw = bandwidths[i];
- total_bw += bw;
- if (i == (unsigned) me_idx)
- sl_last_weighted_bw_of_me = bw;
+ bandwidths[i].dbl *= exit_weight;
}
}
- /* XXXX this is a kludge to expose these values. */
- sl_last_total_weighted_bw = total_bw;
-
+#if 0
log_debug(LD_CIRC, "Total weighted bw = "U64_FORMAT
", exit bw = "U64_FORMAT
", nonexit bw = "U64_FORMAT", exit weight = %f "
@@ -2110,56 +2327,25 @@ smartlist_choose_node_by_bandwidth(smartlist_t *sl,
exit_weight, (int)(rule == WEIGHT_FOR_EXIT),
U64_PRINTF_ARG(total_guard_bw), U64_PRINTF_ARG(total_nonguard_bw),
guard_weight, (int)(rule == WEIGHT_FOR_GUARD));
+#endif
- /* Almost done: choose a random value from the bandwidth weights. */
- rand_bw = crypto_rand_uint64(total_bw);
- rand_bw++; /* crypto_rand_uint64() counts from 0, and we need to count
- * from 1 below. See bug 1203 for details. */
-
- /* Last, count through sl until we get to the element we picked */
- tmp = 0;
- i_chosen = (unsigned)smartlist_len(sl);
- i_has_been_chosen = 0;
- for (i=0; i < (unsigned)smartlist_len(sl); i++) {
- is_exit = bitarray_is_set(exit_bits, i);
- is_guard = bitarray_is_set(guard_bits, i);
-
- /* Weights can be 0 if not counting guards/exits */
- if (is_exit && is_guard)
- tmp += ((uint64_t)(bandwidths[i] * exit_weight * guard_weight));
- else if (is_guard)
- tmp += ((uint64_t)(bandwidths[i] * guard_weight));
- else if (is_exit)
- tmp += ((uint64_t)(bandwidths[i] * exit_weight));
- else
- tmp += bandwidths[i];
+ scale_array_elements_to_u64(bandwidths, smartlist_len(sl), NULL);
- if (tmp >= rand_bw && !i_has_been_chosen) {
- i_chosen = i;
- i_has_been_chosen = 1;
- }
- }
- i = i_chosen;
- if (i == (unsigned)smartlist_len(sl)) {
- /* This was once possible due to round-off error, but shouldn't be able
- * to occur any longer. */
- tor_fragile_assert();
- --i;
- log_warn(LD_BUG, "Round-off error in computing bandwidth had an effect on "
- " which router we chose. Please tell the developers. "
- U64_FORMAT " " U64_FORMAT " " U64_FORMAT, U64_PRINTF_ARG(tmp),
- U64_PRINTF_ARG(rand_bw), U64_PRINTF_ARG(total_bw));
+ {
+ int idx = choose_array_element_by_weight(bandwidths,
+ smartlist_len(sl));
+ tor_free(bandwidths);
+ tor_free(fast_bits);
+ tor_free(exit_bits);
+ tor_free(guard_bits);
+ return idx < 0 ? NULL : smartlist_get(sl, idx);
}
- tor_free(bandwidths);
- tor_free(exit_bits);
- tor_free(guard_bits);
- return smartlist_get(sl, i);
}
/** Choose a random element of status list <b>sl</b>, weighted by
* the advertised bandwidth of each node */
const node_t *
-node_sl_choose_by_bandwidth(smartlist_t *sl,
+node_sl_choose_by_bandwidth(const smartlist_t *sl,
bandwidth_weight_rule_t rule)
{ /*XXXX MOVE */
const node_t *ret;
@@ -2306,7 +2492,7 @@ hex_digest_nickname_decode(const char *hexdigest,
* combination of a router, encoded in hexadecimal, matches <b>hexdigest</b>
* (which is optionally prefixed with a single dollar sign). Return false if
* <b>hexdigest</b> is malformed, or it doesn't match. */
-static int
+int
hex_digest_nickname_matches(const char *hexdigest, const char *identity_digest,
const char *nickname, int is_named)
{
@@ -2341,154 +2527,6 @@ router_is_named(const routerinfo_t *router)
tor_memeq(digest, router->cache_info.identity_digest, DIGEST_LEN));
}
-/** Return true iff the digest of <b>router</b>'s identity key,
- * encoded in hexadecimal, matches <b>hexdigest</b> (which is
- * optionally prefixed with a single dollar sign). Return false if
- * <b>hexdigest</b> is malformed, or it doesn't match. */
-static INLINE int
-router_hex_digest_matches(const routerinfo_t *router, const char *hexdigest)
-{
- return hex_digest_nickname_matches(hexdigest,
- router->cache_info.identity_digest,
- router->nickname,
- router_is_named(router));
-}
-
-/** Return true if <b>router</b>'s nickname matches <b>nickname</b>
- * (case-insensitive), or if <b>router's</b> identity key digest
- * matches a hexadecimal value stored in <b>nickname</b>. Return
- * false otherwise. */
-static int
-router_nickname_matches(const routerinfo_t *router, const char *nickname)
-{
- if (nickname[0]!='$' && !strcasecmp(router->nickname, nickname))
- return 1;
- return router_hex_digest_matches(router, nickname);
-}
-
-/** Return true if <b>node</b>'s nickname matches <b>nickname</b>
- * (case-insensitive), or if <b>node's</b> identity key digest
- * matches a hexadecimal value stored in <b>nickname</b>. Return
- * false otherwise. */
-static int
-node_nickname_matches(const node_t *node, const char *nickname)
-{
- const char *n = node_get_nickname(node);
- if (n && nickname[0]!='$' && !strcasecmp(n, nickname))
- return 1;
- return hex_digest_nickname_matches(nickname,
- node->identity,
- n,
- node_is_named(node));
-}
-
-/** Return the router in our routerlist whose (case-insensitive)
- * nickname or (case-sensitive) hexadecimal key digest is
- * <b>nickname</b>. Return NULL if no such router is known.
- */
-const routerinfo_t *
-router_get_by_nickname(const char *nickname, int warn_if_unnamed)
-{
-#if 1
- const node_t *node = node_get_by_nickname(nickname, warn_if_unnamed);
- if (node)
- return node->ri;
- else
- return NULL;
-#else
- int maybedigest;
- char digest[DIGEST_LEN];
- routerinfo_t *best_match=NULL;
- int n_matches = 0;
- const char *named_digest = NULL;
-
- tor_assert(nickname);
- if (!routerlist)
- return NULL;
- if (nickname[0] == '$')
- return router_get_by_hexdigest(nickname);
- if (!strcasecmp(nickname, UNNAMED_ROUTER_NICKNAME))
- return NULL;
-
- maybedigest = (strlen(nickname) >= HEX_DIGEST_LEN) &&
- (base16_decode(digest,DIGEST_LEN,nickname,HEX_DIGEST_LEN) == 0);
-
- if ((named_digest = networkstatus_get_router_digest_by_nickname(nickname))) {
- return rimap_get(routerlist->identity_map, named_digest);
- }
- if (networkstatus_nickname_is_unnamed(nickname))
- return NULL;
-
- /* If we reach this point, there's no canonical value for the nickname. */
-
- SMARTLIST_FOREACH(routerlist->routers, routerinfo_t *, router,
- {
- if (!strcasecmp(router->nickname, nickname)) {
- ++n_matches;
- if (n_matches <= 1 || router->is_running)
- best_match = router;
- } else if (maybedigest &&
- tor_memeq(digest, router->cache_info.identity_digest,
- DIGEST_LEN)) {
- if (router_hex_digest_matches(router, nickname))
- return router;
- /* If we reach this point, we have a ID=name syntax that matches the
- * identity but not the name. That isn't an acceptable match. */
- }
- });
-
- if (best_match) {
- if (warn_if_unnamed && n_matches > 1) {
- smartlist_t *fps = smartlist_new();
- int any_unwarned = 0;
- SMARTLIST_FOREACH_BEGIN(routerlist->routers, routerinfo_t *, router) {
- routerstatus_t *rs;
- char fp[HEX_DIGEST_LEN+1];
- if (strcasecmp(router->nickname, nickname))
- continue;
- rs = router_get_mutable_consensus_status_by_id(
- router->cache_info.identity_digest);
- if (rs && !rs->name_lookup_warned) {
- rs->name_lookup_warned = 1;
- any_unwarned = 1;
- }
- base16_encode(fp, sizeof(fp),
- router->cache_info.identity_digest, DIGEST_LEN);
- smartlist_add_asprintf(fps, "\"$%s\" for the one at %s:%d",
- fp, router->address, router->or_port);
- } SMARTLIST_FOREACH_END(router);
- if (any_unwarned) {
- char *alternatives = smartlist_join_strings(fps, "; ",0,NULL);
- log_warn(LD_CONFIG,
- "There are multiple matches for the nickname \"%s\","
- " but none is listed as named by the directory authorities. "
- "Choosing one arbitrarily. If you meant one in particular, "
- "you should say %s.", nickname, alternatives);
- tor_free(alternatives);
- }
- SMARTLIST_FOREACH(fps, char *, cp, tor_free(cp));
- smartlist_free(fps);
- } else if (warn_if_unnamed) {
- routerstatus_t *rs = router_get_mutable_consensus_status_by_id(
- best_match->cache_info.identity_digest);
- if (rs && !rs->name_lookup_warned) {
- char fp[HEX_DIGEST_LEN+1];
- base16_encode(fp, sizeof(fp),
- best_match->cache_info.identity_digest, DIGEST_LEN);
- log_warn(LD_CONFIG, "You specified a server \"%s\" by name, but this "
- "name is not registered, so it could be used by any server, "
- "not just the one you meant. "
- "To make sure you get the same server in the future, refer to "
- "it by key, as \"$%s\".", nickname, fp);
- rs->name_lookup_warned = 1;
- }
- }
- return best_match;
- }
- return NULL;
-#endif
-}
-
/** Return true iff <b>digest</b> is the digest of the identity key of a
* trusted directory matching at least one bit of <b>type</b>. If <b>type</b>
* is zero, any authority is okay. */
@@ -2499,7 +2537,7 @@ router_digest_is_trusted_dir_type(const char *digest, dirinfo_type_t type)
return 0;
if (authdir_mode(get_options()) && router_digest_is_me(digest))
return 1;
- SMARTLIST_FOREACH(trusted_dir_servers, trusted_dir_server_t *, ent,
+ SMARTLIST_FOREACH(trusted_dir_servers, dir_server_t *, ent,
if (tor_memeq(digest, ent->digest, DIGEST_LEN)) {
return (!type) || ((type & ent->type) != 0);
});
@@ -2513,7 +2551,7 @@ router_addr_is_trusted_dir(uint32_t addr)
{
if (!trusted_dir_servers)
return 0;
- SMARTLIST_FOREACH(trusted_dir_servers, trusted_dir_server_t *, ent,
+ SMARTLIST_FOREACH(trusted_dir_servers, dir_server_t *, ent,
if (ent->addr == addr)
return 1;
);
@@ -2535,18 +2573,6 @@ hexdigest_to_digest(const char *hexdigest, char *digest)
return 0;
}
-/** Return the router in our routerlist whose hexadecimal key digest
- * is <b>hexdigest</b>. Return NULL if no such router is known. */
-const routerinfo_t *
-router_get_by_hexdigest(const char *hexdigest)
-{
- if (is_legal_nickname(hexdigest))
- return NULL;
-
- /* It's not a legal nickname, so it must be a hexdigest or nothing. */
- return router_get_by_nickname(hexdigest, 1);
-}
-
/** As router_get_by_id_digest,but return a pointer that you're allowed to
* modify */
routerinfo_t *
@@ -2695,7 +2721,6 @@ router_get_routerlist(void)
routerlist->extra_info_map = eimap_new();
routerlist->desc_store.fname_base = "cached-descriptors";
- routerlist->desc_store.fname_alt_base = "cached-routers";
routerlist->extrainfo_store.fname_base = "cached-extrainfo";
routerlist->desc_store.type = ROUTER_STORE;
@@ -2715,12 +2740,12 @@ routerinfo_free(routerinfo_t *router)
return;
tor_free(router->cache_info.signed_descriptor_body);
- tor_free(router->address);
tor_free(router->nickname);
tor_free(router->platform);
tor_free(router->contact_info);
if (router->onion_pkey)
crypto_pk_free(router->onion_pkey);
+ tor_free(router->onion_curve25519_pkey);
if (router->identity_pkey)
crypto_pk_free(router->identity_pkey);
if (router->declared_family) {
@@ -2728,6 +2753,7 @@ routerinfo_free(routerinfo_t *router)
smartlist_free(router->declared_family);
}
addr_policy_list_free(router->exit_policy);
+ short_policy_free(router->ipv6_exit_policy);
memset(router, 77, sizeof(routerinfo_t));
@@ -2778,7 +2804,7 @@ signed_descriptor_from_routerinfo(routerinfo_t *ri)
/** Helper: free the storage held by the extrainfo_t in <b>e</b>. */
static void
-_extrainfo_free(void *e)
+extrainfo_free_(void *e)
{
extrainfo_free(e);
}
@@ -2792,17 +2818,25 @@ routerlist_free(routerlist_t *rl)
rimap_free(rl->identity_map, NULL);
sdmap_free(rl->desc_digest_map, NULL);
sdmap_free(rl->desc_by_eid_map, NULL);
- eimap_free(rl->extra_info_map, _extrainfo_free);
+ eimap_free(rl->extra_info_map, extrainfo_free_);
SMARTLIST_FOREACH(rl->routers, routerinfo_t *, r,
routerinfo_free(r));
SMARTLIST_FOREACH(rl->old_routers, signed_descriptor_t *, sd,
signed_descriptor_free(sd));
smartlist_free(rl->routers);
smartlist_free(rl->old_routers);
- if (routerlist->desc_store.mmap)
- tor_munmap_file(routerlist->desc_store.mmap);
- if (routerlist->extrainfo_store.mmap)
- tor_munmap_file(routerlist->extrainfo_store.mmap);
+ if (rl->desc_store.mmap) {
+ int res = tor_munmap_file(routerlist->desc_store.mmap);
+ if (res != 0) {
+ log_warn(LD_FS, "Failed to munmap routerlist->desc_store.mmap");
+ }
+ }
+ if (rl->extrainfo_store.mmap) {
+ int res = tor_munmap_file(routerlist->extrainfo_store.mmap);
+ if (res != 0) {
+ log_warn(LD_FS, "Failed to munmap routerlist->extrainfo_store.mmap");
+ }
+ }
tor_free(rl);
router_dir_info_changed();
@@ -2822,7 +2856,7 @@ dump_routerlist_mem_usage(int severity)
SMARTLIST_FOREACH(routerlist->old_routers, signed_descriptor_t *, sd,
olddescs += sd->signed_descriptor_len);
- log(severity, LD_DIR,
+ tor_log(severity, LD_DIR,
"In %d live descriptors: "U64_FORMAT" bytes. "
"In %d old descriptors: "U64_FORMAT" bytes.",
smartlist_len(routerlist->routers), U64_PRINTF_ARG(livedescs),
@@ -2834,7 +2868,7 @@ dump_routerlist_mem_usage(int severity)
* <b>ri</b>. Return the index of <b>ri</b> in <b>sl</b>, or -1 if <b>ri</b>
* is not in <b>sl</b>. */
static INLINE int
-_routerlist_find_elt(smartlist_t *sl, void *ri, int idx)
+routerlist_find_elt_(smartlist_t *sl, void *ri, int idx)
{
if (idx < 0) {
idx = -1;
@@ -2890,7 +2924,7 @@ routerlist_insert(routerlist_t *rl, routerinfo_t *ri)
&ri->cache_info);
smartlist_add(rl->routers, ri);
ri->cache_info.routerlist_index = smartlist_len(rl->routers) - 1;
- nodelist_add_routerinfo(ri);
+ nodelist_set_routerinfo(ri, NULL);
router_dir_info_changed();
#ifdef DEBUG_ROUTERLIST
routerlist_assert_ok(rl);
@@ -3119,8 +3153,11 @@ routerlist_replace(routerlist_t *rl, routerinfo_t *ri_old,
tor_assert(0 <= idx && idx < smartlist_len(rl->routers));
tor_assert(smartlist_get(rl->routers, idx) == ri_old);
- nodelist_remove_routerinfo(ri_old);
- nodelist_add_routerinfo(ri_new);
+ {
+ routerinfo_t *ri_old_tmp=NULL;
+ nodelist_set_routerinfo(ri_new, &ri_old_tmp);
+ tor_assert(ri_old == ri_old_tmp);
+ }
router_dir_info_changed();
if (idx >= 0) {
@@ -3128,7 +3165,7 @@ routerlist_replace(routerlist_t *rl, routerinfo_t *ri_old,
ri_old->cache_info.routerlist_index = -1;
ri_new->cache_info.routerlist_index = idx;
/* Check that ri_old is not in rl->routers anymore: */
- tor_assert( _routerlist_find_elt(rl->routers, ri_old, -1) == -1 );
+ tor_assert( routerlist_find_elt_(rl->routers, ri_old, -1) == -1 );
} else {
log_warn(LD_BUG, "Appending entry from routerlist_replace.");
routerlist_insert(rl, ri_new);
@@ -3232,20 +3269,12 @@ routerlist_free_all(void)
smartlist_free(warned_nicknames);
warned_nicknames = NULL;
}
- if (trusted_dir_servers) {
- SMARTLIST_FOREACH(trusted_dir_servers, trusted_dir_server_t *, ds,
- trusted_dir_server_free(ds));
- smartlist_free(trusted_dir_servers);
- trusted_dir_servers = NULL;
- }
+ clear_dir_servers();
+ smartlist_free(trusted_dir_servers);
+ smartlist_free(fallback_dir_servers);
+ trusted_dir_servers = fallback_dir_servers = NULL;
if (trusted_dir_certs) {
- DIGESTMAP_FOREACH(trusted_dir_certs, key, cert_list_t *, cl) {
- SMARTLIST_FOREACH(cl->certs, authority_cert_t *, cert,
- authority_cert_free(cert));
- smartlist_free(cl->certs);
- tor_free(cl);
- } DIGESTMAP_FOREACH_END;
- digestmap_free(trusted_dir_certs, NULL);
+ digestmap_free(trusted_dir_certs, cert_list_free_);
trusted_dir_certs = NULL;
}
}
@@ -3263,33 +3292,6 @@ routerlist_reset_warnings(void)
networkstatus_reset_warnings();
}
-/** Mark the router with ID <b>digest</b> as running or non-running
- * in our routerlist. */
-void
-router_set_status(const char *digest, int up)
-{
- node_t *node;
- tor_assert(digest);
-
- SMARTLIST_FOREACH(trusted_dir_servers, trusted_dir_server_t *, d,
- if (tor_memeq(d->digest, digest, DIGEST_LEN))
- d->is_running = up);
-
- node = node_get_mutable_by_id(digest);
- if (node) {
-#if 0
- log_debug(LD_DIR,"Marking router %s as %s.",
- node_describe(node), up ? "up" : "down");
-#endif
- if (!up && node_is_me(node) && !net_is_disabled())
- log_warn(LD_NET, "We just marked ourself as down. Are your external "
- "addresses reachable?");
- node->is_running = up;
- }
-
- router_dir_info_changed();
-}
-
/** Add <b>router</b> to the routerlist, if we don't already have it. Replace
* older entries (if any) with the same key. Note: Callers should not hold
* their pointers to <b>router</b> if this function fails; <b>router</b>
@@ -3321,7 +3323,6 @@ router_add_to_routerlist(routerinfo_t *router, const char **msg,
routerinfo_t *old_router;
networkstatus_t *consensus =
networkstatus_get_latest_consensus_by_flavor(FLAV_NS);
- const smartlist_t *networkstatus_v2_list = networkstatus_get_v2_list();
int in_consensus = 0;
tor_assert(msg);
@@ -3392,15 +3393,6 @@ router_add_to_routerlist(routerinfo_t *router, const char **msg,
}
/* We no longer need a router with this descriptor digest. */
- SMARTLIST_FOREACH(networkstatus_v2_list, networkstatus_v2_t *, ns,
- {
- routerstatus_t *rs =
- networkstatus_v2_find_mutable_entry(ns, id_digest);
- if (rs && tor_memeq(rs->descriptor_digest,
- router->cache_info.signed_descriptor_digest,
- DIGEST_LEN))
- rs->need_to_mirror = 0;
- });
if (consensus) {
routerstatus_t *rs = networkstatus_vote_find_mutable_entry(
consensus, id_digest);
@@ -3408,7 +3400,6 @@ router_add_to_routerlist(routerinfo_t *router, const char **msg,
router->cache_info.signed_descriptor_digest,
DIGEST_LEN)) {
in_consensus = 1;
- rs->need_to_mirror = 0;
}
}
@@ -3457,17 +3448,11 @@ router_add_to_routerlist(routerinfo_t *router, const char **msg,
/* Same key, and either new, or listed in the consensus. */
log_debug(LD_DIR, "Replacing entry for router %s",
router_describe(router));
- if (routers_have_same_or_addr(router, old_router)) {
- /* these carry over when the address and orport are unchanged. */
- router->last_reachable = old_router->last_reachable;
- router->testing_since = old_router->testing_since;
- }
routerlist_replace(routerlist, old_router, router);
if (!from_cache) {
signed_desc_append_to_journal(&router->cache_info,
&routerlist->desc_store);
}
- directory_set_dirty();
*msg = authdir_believes_valid ? "Valid server updated" :
("Invalid server updated. (This dirserver is marking your "
"server as unapproved.)");
@@ -3489,7 +3474,6 @@ router_add_to_routerlist(routerinfo_t *router, const char **msg,
signed_desc_append_to_journal(&router->cache_info,
&routerlist->desc_store);
}
- directory_set_dirty();
return ROUTER_ADDED_SUCCESSFULLY;
}
@@ -3522,7 +3506,7 @@ router_add_extrainfo_to_routerlist(extrainfo_t *ei, const char **msg,
* signed_descriptor_t* in *<b>a</b> has an identity digest preceding, equal
* to, or later than that of *<b>b</b>. */
static int
-_compare_old_routers_by_identity(const void **_a, const void **_b)
+compare_old_routers_by_identity_(const void **_a, const void **_b)
{
int i;
const signed_descriptor_t *r1 = *_a, *r2 = *_b;
@@ -3542,7 +3526,7 @@ struct duration_idx_t {
/** Sorting helper: compare two duration_idx_t by their duration. */
static int
-_compare_duration_idx(const void *_d1, const void *_d2)
+compare_duration_idx_(const void *_d1, const void *_d2)
{
const struct duration_idx_t *d1 = _d1;
const struct duration_idx_t *d2 = _d2;
@@ -3595,7 +3579,7 @@ routerlist_remove_old_cached_routers_with_id(time_t now,
signed_descriptor_t *r_next;
lifespans[i-lo].idx = i;
if (r->last_listed_as_valid_until >= now ||
- (retain && digestset_isin(retain, r->signed_descriptor_digest))) {
+ (retain && digestset_contains(retain, r->signed_descriptor_digest))) {
must_keep[i-lo] = 1;
}
if (i < hi) {
@@ -3619,7 +3603,7 @@ routerlist_remove_old_cached_routers_with_id(time_t now,
* the duration of liveness, and remove the ones we're not already going to
* remove based on how long they were alive.
**/
- qsort(lifespans, n, sizeof(struct duration_idx_t), _compare_duration_idx);
+ qsort(lifespans, n, sizeof(struct duration_idx_t), compare_duration_idx_);
for (i = 0; i < n && n_rmv < n_extra; ++i) {
if (!must_keep[lifespans[i].idx-lo] && !lifespans[i].old) {
rmv[lifespans[i].idx-lo] = 1;
@@ -3652,11 +3636,7 @@ routerlist_remove_old_routers(void)
routerinfo_t *router;
signed_descriptor_t *sd;
digestset_t *retain;
- int caches = directory_caches_dir_info(get_options());
const networkstatus_t *consensus = networkstatus_get_latest_consensus();
- const smartlist_t *networkstatus_v2_list = networkstatus_get_v2_list();
- int have_enough_v2;
- const or_options_t *options = get_options();
trusted_dirs_remove_old_certs();
@@ -3672,38 +3652,10 @@ routerlist_remove_old_routers(void)
{
/* We'll probably retain everything in the consensus. */
int n_max_retain = smartlist_len(consensus->routerstatus_list);
- if (caches && networkstatus_v2_list) {
- /* If we care about v2 statuses, we'll retain at most as many as are
- listed any of the v2 statues. This will be at least the length of
- the largest v2 networkstatus, and in the worst case, this set will be
- equal to the sum of the lengths of all v2 consensuses. Take the
- worst case.
- */
- SMARTLIST_FOREACH(networkstatus_v2_list, networkstatus_v2_t *, ns,
- n_max_retain += smartlist_len(ns->entries));
- }
retain = digestset_new(n_max_retain);
}
cutoff = now - OLD_ROUTER_DESC_MAX_AGE;
- /* Build a list of all the descriptors that _anybody_ lists. */
- if (caches && networkstatus_v2_list) {
- SMARTLIST_FOREACH_BEGIN(networkstatus_v2_list, networkstatus_v2_t *, ns) {
- /* XXXX The inner loop here gets pretty expensive, and actually shows up
- * on some profiles. It may be the reason digestmap_set shows up in
- * profiles too. If instead we kept a per-descriptor digest count of
- * how many networkstatuses recommended each descriptor, and changed
- * that only when the networkstatuses changed, that would be a speed
- * improvement, possibly 1-4% if it also removes digestmap_set from the
- * profile. Not worth it for 0.1.2.x, though. The new directory
- * system will obsolete this whole thing in 0.2.0.x. */
- SMARTLIST_FOREACH_BEGIN(ns->entries, routerstatus_t *, rs) {
- if (rs->published_on >= cutoff)
- digestset_add(retain, rs->descriptor_digest);
- } SMARTLIST_FOREACH_END(rs);
- } SMARTLIST_FOREACH_END(ns);
- }
-
/* Retain anything listed in the consensus. */
if (consensus) {
SMARTLIST_FOREACH(consensus->routerstatus_list, routerstatus_t *, rs,
@@ -3711,25 +3663,18 @@ routerlist_remove_old_routers(void)
digestset_add(retain, rs->descriptor_digest));
}
- /* If we have a consensus, and nearly as many v2 networkstatuses as we want,
- * we should consider pruning current routers that are too old and that
- * nobody recommends. (If we don't have a consensus or enough v2
- * networkstatuses, then we should get more before we decide to kill
- * routers.) */
- /* we set this to true iff we don't care about v2 info, or we have enough. */
- have_enough_v2 = !caches ||
- !(authdir_mode_any_main(options) || options->FetchV2Networkstatus) ||
- (networkstatus_v2_list &&
- smartlist_len(networkstatus_v2_list) > get_n_v2_authorities() / 2);
-
- if (have_enough_v2 && consensus) {
+ /* If we have a consensus, we should consider pruning current routers that
+ * are too old and that nobody recommends. (If we don't have a consensus,
+ * then we should get one before we decide to kill routers.) */
+
+ if (consensus) {
cutoff = now - ROUTER_MAX_AGE;
/* Remove too-old unrecommended members of routerlist->routers. */
for (i = 0; i < smartlist_len(routerlist->routers); ++i) {
router = smartlist_get(routerlist->routers, i);
if (router->cache_info.published_on <= cutoff &&
router->cache_info.last_listed_as_valid_until < now &&
- !digestset_isin(retain,
+ !digestset_contains(retain,
router->cache_info.signed_descriptor_digest)) {
/* Too old: remove it. (If we're a cache, just move it into
* old_routers.) */
@@ -3750,7 +3695,7 @@ routerlist_remove_old_routers(void)
sd = smartlist_get(routerlist->old_routers, i);
if (sd->published_on <= cutoff &&
sd->last_listed_as_valid_until < now &&
- !digestset_isin(retain, sd->signed_descriptor_digest)) {
+ !digestset_contains(retain, sd->signed_descriptor_digest)) {
/* Too old. Remove it. */
routerlist_remove_old(routerlist, sd, i--);
}
@@ -3773,7 +3718,7 @@ routerlist_remove_old_routers(void)
goto done;
/* Sort by identity, then fix indices. */
- smartlist_sort(routerlist->old_routers, _compare_old_routers_by_identity);
+ smartlist_sort(routerlist->old_routers, compare_old_routers_by_identity_);
/* Fix indices. */
for (i = 0; i < smartlist_len(routerlist->old_routers); ++i) {
signed_descriptor_t *r = smartlist_get(routerlist->old_routers, i);
@@ -3929,7 +3874,7 @@ router_load_routers_from_string(const char *s, const char *eos,
ri->cache_info.signed_descriptor_digest :
ri->cache_info.identity_digest,
DIGEST_LEN);
- if (smartlist_string_isin(requested_fingerprints, fp)) {
+ if (smartlist_contains_string(requested_fingerprints, fp)) {
smartlist_string_remove(requested_fingerprints, fp);
} else {
char *requested =
@@ -4021,8 +3966,6 @@ signed_desc_digest_is_recognized(signed_descriptor_t *desc)
{
const routerstatus_t *rs;
networkstatus_t *consensus = networkstatus_get_latest_consensus();
- int caches = directory_caches_dir_info(get_options());
- const smartlist_t *networkstatus_v2_list = networkstatus_get_v2_list();
if (consensus) {
rs = networkstatus_vote_find_entry(consensus, desc->identity_digest);
@@ -4030,16 +3973,6 @@ signed_desc_digest_is_recognized(signed_descriptor_t *desc)
desc->signed_descriptor_digest, DIGEST_LEN))
return 1;
}
- if (caches && networkstatus_v2_list) {
- SMARTLIST_FOREACH(networkstatus_v2_list, networkstatus_v2_t *, ns,
- {
- if (!(rs = networkstatus_v2_find_entry(ns, desc->identity_digest)))
- continue;
- if (tor_memeq(rs->descriptor_digest,
- desc->signed_descriptor_digest, DIGEST_LEN))
- return 1;
- });
- }
return 0;
}
@@ -4055,7 +3988,7 @@ update_all_descriptor_downloads(time_t now)
launch_dummy_descriptor_download_as_needed(now, get_options());
}
-/** Clear all our timeouts for fetching v2 and v3 directory stuff, and then
+/** Clear all our timeouts for fetching v3 directory stuff, and then
* give it all a try again. */
void
routerlist_retry_directory_downloads(time_t now)
@@ -4068,27 +4001,6 @@ routerlist_retry_directory_downloads(time_t now)
update_all_descriptor_downloads(now);
}
-/** Return 1 if all running sufficiently-stable routers we can use will reject
- * addr:port, return 0 if any might accept it. */
-int
-router_exit_policy_all_nodes_reject(const tor_addr_t *addr, uint16_t port,
- int need_uptime)
-{ /* XXXX MOVE */
- addr_policy_result_t r;
-
- SMARTLIST_FOREACH_BEGIN(nodelist_get_list(), const node_t *, node) {
- if (node->is_running &&
- !node_is_unreliable(node, need_uptime, 0, 0)) {
-
- r = compare_tor_addr_to_node_policy(addr, port, node);
-
- if (r != ADDR_POLICY_REJECTED && r != ADDR_POLICY_PROBABLY_REJECTED)
- return 0; /* this one could be ok. good enough. */
- }
- } SMARTLIST_FOREACH_END(node);
- return 1; /* all will reject. */
-}
-
/** Return true iff <b>router</b> does not permit exit streams.
*/
int
@@ -4097,47 +4009,47 @@ router_exit_policy_rejects_all(const routerinfo_t *router)
return router->policy_is_reject_star;
}
-/** Add to the list of authoritative directory servers one at
- * <b>address</b>:<b>port</b>, with identity key <b>digest</b>. If
- * <b>address</b> is NULL, add ourself. Return the new trusted directory
- * server entry on success or NULL if we couldn't add it. */
-trusted_dir_server_t *
-add_trusted_dir_server(const char *nickname, const char *address,
- uint16_t dir_port, uint16_t or_port,
- const char *digest, const char *v3_auth_digest,
- dirinfo_type_t type)
-{
- trusted_dir_server_t *ent;
+/** Create an directory server at <b>address</b>:<b>port</b>, with OR identity
+ * key <b>digest</b>. If <b>address</b> is NULL, add ourself. If
+ * <b>is_authority</b>, this is a directory authority. Return the new
+ * directory server entry on success or NULL on failure. */
+static dir_server_t *
+dir_server_new(int is_authority,
+ const char *nickname,
+ const tor_addr_t *addr,
+ const char *hostname,
+ uint16_t dir_port, uint16_t or_port,
+ const char *digest, const char *v3_auth_digest,
+ dirinfo_type_t type,
+ double weight)
+{
+ dir_server_t *ent;
uint32_t a;
- char *hostname = NULL;
- if (!trusted_dir_servers)
- trusted_dir_servers = smartlist_new();
+ char *hostname_ = NULL;
- if (!address) { /* The address is us; we should guess. */
- if (resolve_my_address(LOG_WARN, get_options(), &a, &hostname) < 0) {
- log_warn(LD_CONFIG,
- "Couldn't find a suitable address when adding ourself as a "
- "trusted directory server.");
- return NULL;
- }
- } else {
- if (tor_lookup_hostname(address, &a)) {
- log_warn(LD_CONFIG,
- "Unable to lookup address for directory server at '%s'",
- address);
- return NULL;
- }
- hostname = tor_strdup(address);
- }
+ if (weight < 0)
+ return NULL;
+
+ if (tor_addr_family(addr) == AF_INET)
+ a = tor_addr_to_ipv4h(addr);
+ else
+ return NULL; /*XXXX Support IPv6 */
+
+ if (!hostname)
+ hostname_ = tor_dup_addr(addr);
+ else
+ hostname_ = tor_strdup(hostname);
- ent = tor_malloc_zero(sizeof(trusted_dir_server_t));
+ ent = tor_malloc_zero(sizeof(dir_server_t));
ent->nickname = nickname ? tor_strdup(nickname) : NULL;
- ent->address = hostname;
+ ent->address = hostname_;
ent->addr = a;
ent->dir_port = dir_port;
ent->or_port = or_port;
ent->is_running = 1;
+ ent->is_authority = is_authority;
ent->type = type;
+ ent->weight = weight;
memcpy(ent->digest, digest, DIGEST_LEN);
if (v3_auth_digest && (type & V3_DIRINFO))
memcpy(ent->v3_identity_digest, v3_auth_digest, DIGEST_LEN);
@@ -4159,14 +4071,78 @@ add_trusted_dir_server(const char *nickname, const char *address,
ent->fake_status.dir_port = ent->dir_port;
ent->fake_status.or_port = ent->or_port;
- if (ent->or_port)
- ent->fake_status.version_supports_begindir = 1;
+ return ent;
+}
- ent->fake_status.version_supports_conditional_consensus = 1;
+/** Create an authoritative directory server at
+ * <b>address</b>:<b>port</b>, with identity key <b>digest</b>. If
+ * <b>address</b> is NULL, add ourself. Return the new trusted directory
+ * server entry on success or NULL if we couldn't add it. */
+dir_server_t *
+trusted_dir_server_new(const char *nickname, const char *address,
+ uint16_t dir_port, uint16_t or_port,
+ const char *digest, const char *v3_auth_digest,
+ dirinfo_type_t type, double weight)
+{
+ uint32_t a;
+ tor_addr_t addr;
+ char *hostname=NULL;
+ dir_server_t *result;
- smartlist_add(trusted_dir_servers, ent);
+ if (!address) { /* The address is us; we should guess. */
+ if (resolve_my_address(LOG_WARN, get_options(),
+ &a, NULL, &hostname) < 0) {
+ log_warn(LD_CONFIG,
+ "Couldn't find a suitable address when adding ourself as a "
+ "trusted directory server.");
+ return NULL;
+ }
+ if (!hostname)
+ hostname = tor_dup_ip(a);
+ } else {
+ if (tor_lookup_hostname(address, &a)) {
+ log_warn(LD_CONFIG,
+ "Unable to lookup address for directory server at '%s'",
+ address);
+ return NULL;
+ }
+ hostname = tor_strdup(address);
+ }
+ tor_addr_from_ipv4h(&addr, a);
+
+ result = dir_server_new(1, nickname, &addr, hostname,
+ dir_port, or_port, digest,
+ v3_auth_digest, type, weight);
+ tor_free(hostname);
+ return result;
+}
+
+/** Return a new dir_server_t for a fallback directory server at
+ * <b>addr</b>:<b>or_port</b>/<b>dir_port</b>, with identity key digest
+ * <b>id_digest</b> */
+dir_server_t *
+fallback_dir_server_new(const tor_addr_t *addr,
+ uint16_t dir_port, uint16_t or_port,
+ const char *id_digest, double weight)
+{
+ return dir_server_new(0, NULL, addr, NULL, dir_port, or_port, id_digest,
+ NULL, ALL_DIRINFO, weight);
+}
+
+/** Add a directory server to the global list(s). */
+void
+dir_server_add(dir_server_t *ent)
+{
+ if (!trusted_dir_servers)
+ trusted_dir_servers = smartlist_new();
+ if (!fallback_dir_servers)
+ fallback_dir_servers = smartlist_new();
+
+ if (ent->is_authority)
+ smartlist_add(trusted_dir_servers, ent);
+
+ smartlist_add(fallback_dir_servers, ent);
router_dir_info_changed();
- return ent;
}
/** Free storage held in <b>cert</b>. */
@@ -4185,7 +4161,7 @@ authority_cert_free(authority_cert_t *cert)
/** Free storage held in <b>ds</b>. */
static void
-trusted_dir_server_free(trusted_dir_server_t *ds)
+dir_server_free(dir_server_t *ds)
{
if (!ds)
return;
@@ -4196,13 +4172,18 @@ trusted_dir_server_free(trusted_dir_server_t *ds)
tor_free(ds);
}
-/** Remove all members from the list of trusted dir servers. */
+/** Remove all members from the list of dir servers. */
void
-clear_trusted_dir_servers(void)
+clear_dir_servers(void)
{
+ if (fallback_dir_servers) {
+ SMARTLIST_FOREACH(fallback_dir_servers, dir_server_t *, ent,
+ dir_server_free(ent));
+ smartlist_clear(fallback_dir_servers);
+ } else {
+ fallback_dir_servers = smartlist_new();
+ }
if (trusted_dir_servers) {
- SMARTLIST_FOREACH(trusted_dir_servers, trusted_dir_server_t *, ent,
- trusted_dir_server_free(ent));
smartlist_clear(trusted_dir_servers);
} else {
trusted_dir_servers = smartlist_new();
@@ -4210,17 +4191,6 @@ clear_trusted_dir_servers(void)
router_dir_info_changed();
}
-/** Return 1 if any trusted dir server supports v1 directories,
- * else return 0. */
-int
-any_trusted_dir_is_v1_authority(void)
-{
- if (trusted_dir_servers)
- return get_n_authorities(V1_DIRINFO) > 0;
-
- return 0;
-}
-
/** For every current directory connection whose purpose is <b>purpose</b>,
* and where the resource being downloaded begins with <b>prefix</b>, split
* rest of the resource into base16 fingerprints (or base64 fingerprints if
@@ -4283,6 +4253,41 @@ list_pending_microdesc_downloads(digestmap_t *result)
list_pending_downloads(result, DIR_PURPOSE_FETCH_MICRODESC, "d/");
}
+/** For every certificate we are currently downloading by (identity digest,
+ * signing key digest) pair, set result[fp_pair] to (void *1).
+ */
+static void
+list_pending_fpsk_downloads(fp_pair_map_t *result)
+{
+ const char *pfx = "fp-sk/";
+ smartlist_t *tmp;
+ smartlist_t *conns;
+ const char *resource;
+
+ tor_assert(result);
+
+ tmp = smartlist_new();
+ conns = get_connection_array();
+
+ SMARTLIST_FOREACH_BEGIN(conns, connection_t *, conn) {
+ if (conn->type == CONN_TYPE_DIR &&
+ conn->purpose == DIR_PURPOSE_FETCH_CERTIFICATE &&
+ !conn->marked_for_close) {
+ resource = TO_DIR_CONN(conn)->requested_resource;
+ if (!strcmpstart(resource, pfx))
+ dir_split_resource_into_fingerprint_pairs(resource + strlen(pfx),
+ tmp);
+ }
+ } SMARTLIST_FOREACH_END(conn);
+
+ SMARTLIST_FOREACH_BEGIN(tmp, fp_pair_t *, fp) {
+ fp_pair_map_set(result, fp, (void*)1);
+ tor_free(fp);
+ } SMARTLIST_FOREACH_END(fp);
+
+ smartlist_free(tmp);
+}
+
/** Launch downloads for all the descriptors whose digests or digests256
* are listed as digests[i] for lo <= i < hi. (Lo and hi may be out of
* range.) If <b>source</b> is given, download from <b>source</b>;
@@ -4338,7 +4343,7 @@ initiate_descriptor_downloads(const routerstatus_t *source,
/* We know which authority we want. */
directory_initiate_command_routerstatus(source, purpose,
ROUTER_PURPOSE_GENERAL,
- 0, /* not private */
+ DIRIND_ONEHOP,
resource, NULL, 0, 0);
} else {
directory_get_from_dirserver(purpose, ROUTER_PURPOSE_GENERAL, resource,
@@ -4347,30 +4352,6 @@ initiate_descriptor_downloads(const routerstatus_t *source,
tor_free(resource);
}
-/** Return 0 if this routerstatus is obsolete, too new, isn't
- * running, or otherwise not a descriptor that we would make any
- * use of even if we had it. Else return 1. */
-static INLINE int
-client_would_use_router(const routerstatus_t *rs, time_t now,
- const or_options_t *options)
-{
- if (!rs->is_flagged_running && !options->FetchUselessDescriptors) {
- /* If we had this router descriptor, we wouldn't even bother using it.
- * But, if we want to have a complete list, fetch it anyway. */
- return 0;
- }
- if (rs->published_on + options->TestingEstimatedDescriptorPropagationTime
- > now) {
- /* Most caches probably don't have this descriptor yet. */
- return 0;
- }
- if (rs->published_on + OLD_ROUTER_DESC_MAX_AGE < now) {
- /* We'd drop it immediately for being too old. */
- return 0;
- }
- return 1;
-}
-
/** Max amount of hashes to download per request.
* Since squid does not like URLs >= 4096 bytes we limit it to 96.
* 4096 - strlen(http://255.255.255.255/tor/server/d/.z) == 4058
@@ -4386,12 +4367,8 @@ client_would_use_router(const routerstatus_t *rs, time_t now,
* try to split our requests into at least this many requests. */
#define MIN_REQUESTS 3
/** If we want fewer than this many descriptors, wait until we
- * want more, or until MAX_CLIENT_INTERVAL_WITHOUT_REQUEST has
- * passed. */
+ * want more, or until TestingClientMaxIntervalWithoutRequest has passed. */
#define MAX_DL_TO_DELAY 16
-/** When directory clients have only a few servers to request, they batch
- * them until they have more, or until this amount of time has passed. */
-#define MAX_CLIENT_INTERVAL_WITHOUT_REQUEST (10*60)
/** Given a <b>purpose</b> (FETCH_MICRODESC or FETCH_SERVERDESC) and a list of
* router descriptor digests or microdescriptor digest256s in
@@ -4423,7 +4400,7 @@ launch_descriptor_downloads(int purpose,
should_delay = 0;
} else {
should_delay = (last_descriptor_download_attempted +
- MAX_CLIENT_INTERVAL_WITHOUT_REQUEST) > now;
+ options->TestingClientMaxIntervalWithoutRequest) > now;
if (!should_delay && n_downloadable) {
if (last_descriptor_download_attempted) {
log_info(LD_DIR,
@@ -4440,11 +4417,6 @@ launch_descriptor_downloads(int purpose,
}
}
}
- /* XXX should we consider having even the dir mirrors delay
- * a little bit, so we don't load the authorities as much? -RD
- * I don't think so. If we do, clients that want those descriptors may
- * not actually find them if the caches haven't got them yet. -NM
- */
if (! should_delay && n_downloadable) {
int i, n_per_request;
@@ -4484,9 +4456,9 @@ launch_descriptor_downloads(int purpose,
rtr_plural = "s";
log_info(LD_DIR,
- "Launching %d request%s for %d router%s, %d at a time",
- CEIL_DIV(n_downloadable, n_per_request),
- req_plural, n_downloadable, rtr_plural, n_per_request);
+ "Launching %d request%s for %d %s%s, %d at a time",
+ CEIL_DIV(n_downloadable, n_per_request), req_plural,
+ n_downloadable, descname, rtr_plural, n_per_request);
smartlist_sort_digests(downloadable);
for (i=0; i < n_downloadable; i += n_per_request) {
initiate_descriptor_downloads(source, purpose,
@@ -4497,152 +4469,6 @@ launch_descriptor_downloads(int purpose,
}
}
-/** Launch downloads for router status as needed, using the strategy used by
- * authorities and caches: based on the v2 networkstatuses we have, download
- * every descriptor we don't have but would serve, from a random authority
- * that lists it. */
-static void
-update_router_descriptor_cache_downloads_v2(time_t now)
-{
- smartlist_t **downloadable; /* For each authority, what can we dl from it? */
- smartlist_t **download_from; /* ... and, what will we dl from it? */
- digestmap_t *map; /* Which descs are in progress, or assigned? */
- int i, j, n;
- int n_download;
- const or_options_t *options = get_options();
- const smartlist_t *networkstatus_v2_list = networkstatus_get_v2_list();
-
- if (! directory_fetches_dir_info_early(options)) {
- log_warn(LD_BUG, "Called update_router_descriptor_cache_downloads_v2() "
- "on a non-dir-mirror?");
- }
-
- if (!networkstatus_v2_list || !smartlist_len(networkstatus_v2_list))
- return;
-
- map = digestmap_new();
- n = smartlist_len(networkstatus_v2_list);
-
- downloadable = tor_malloc_zero(sizeof(smartlist_t*) * n);
- download_from = tor_malloc_zero(sizeof(smartlist_t*) * n);
-
- /* Set map[d]=1 for the digest of every descriptor that we are currently
- * downloading. */
- list_pending_descriptor_downloads(map, 0);
-
- /* For the digest of every descriptor that we don't have, and that we aren't
- * downloading, add d to downloadable[i] if the i'th networkstatus knows
- * about that descriptor, and we haven't already failed to get that
- * descriptor from the corresponding authority.
- */
- n_download = 0;
- SMARTLIST_FOREACH_BEGIN(networkstatus_v2_list, networkstatus_v2_t *, ns) {
- trusted_dir_server_t *ds;
- smartlist_t *dl;
- dl = downloadable[ns_sl_idx] = smartlist_new();
- download_from[ns_sl_idx] = smartlist_new();
- if (ns->published_on + MAX_NETWORKSTATUS_AGE+10*60 < now) {
- /* Don't download if the networkstatus is almost ancient. */
- /* Actually, I suspect what's happening here is that we ask
- * for the descriptor when we have a given networkstatus,
- * and then we get a newer networkstatus, and then we receive
- * the descriptor. Having a networkstatus actually expire is
- * probably a rare event, and we'll probably be happiest if
- * we take this clause out. -RD */
- continue;
- }
-
- /* Don't try dirservers that we think are down -- we might have
- * just tried them and just marked them as down. */
- ds = router_get_trusteddirserver_by_digest(ns->identity_digest);
- if (ds && !ds->is_running)
- continue;
-
- SMARTLIST_FOREACH_BEGIN(ns->entries, routerstatus_t * , rs) {
- if (!rs->need_to_mirror)
- continue;
- if (router_get_by_descriptor_digest(rs->descriptor_digest)) {
- log_warn(LD_BUG,
- "We have a router descriptor, but need_to_mirror=1.");
- rs->need_to_mirror = 0;
- continue;
- }
- if (authdir_mode(options) && dirserv_would_reject_router(rs)) {
- rs->need_to_mirror = 0;
- continue;
- }
- if (digestmap_get(map, rs->descriptor_digest)) {
- /* We're downloading it already. */
- continue;
- } else {
- /* We could download it from this guy. */
- smartlist_add(dl, rs->descriptor_digest);
- ++n_download;
- }
- } SMARTLIST_FOREACH_END(rs);
- } SMARTLIST_FOREACH_END(ns);
-
- /* At random, assign descriptors to authorities such that:
- * - if d is a member of some downloadable[x], d is a member of some
- * download_from[y]. (Everything we want to download, we try to download
- * from somebody.)
- * - If d is a member of download_from[y], d is a member of downloadable[y].
- * (We only try to download descriptors from authorities who claim to have
- * them.)
- * - No d is a member of download_from[x] and download_from[y] s.t. x != y.
- * (We don't try to download anything from two authorities concurrently.)
- */
- while (n_download) {
- int which_ns = crypto_rand_int(n);
- smartlist_t *dl = downloadable[which_ns];
- int idx;
- char *d;
- if (!smartlist_len(dl))
- continue;
- idx = crypto_rand_int(smartlist_len(dl));
- d = smartlist_get(dl, idx);
- if (! digestmap_get(map, d)) {
- smartlist_add(download_from[which_ns], d);
- digestmap_set(map, d, (void*) 1);
- }
- smartlist_del(dl, idx);
- --n_download;
- }
-
- /* Now, we can actually launch our requests. */
- for (i=0; i<n; ++i) {
- networkstatus_v2_t *ns = smartlist_get(networkstatus_v2_list, i);
- trusted_dir_server_t *ds =
- router_get_trusteddirserver_by_digest(ns->identity_digest);
- smartlist_t *dl = download_from[i];
- int pds_flags = PDS_RETRY_IF_NO_SERVERS;
- if (! authdir_mode_any_nonhidserv(options))
- pds_flags |= PDS_NO_EXISTING_SERVERDESC_FETCH; /* XXXX ignored*/
-
- if (!ds) {
- log_info(LD_DIR, "Networkstatus with no corresponding authority!");
- continue;
- }
- if (! smartlist_len(dl))
- continue;
- log_info(LD_DIR, "Requesting %d descriptors from authority \"%s\"",
- smartlist_len(dl), ds->nickname);
- for (j=0; j < smartlist_len(dl); j += MAX_DL_PER_REQUEST) {
- initiate_descriptor_downloads(&(ds->fake_status),
- DIR_PURPOSE_FETCH_SERVERDESC, dl, j,
- j+MAX_DL_PER_REQUEST, pds_flags);
- }
- }
-
- for (i=0; i<n; ++i) {
- smartlist_free(download_from[i]);
- smartlist_free(downloadable[i]);
- }
- tor_free(download_from);
- tor_free(downloadable);
- digestmap_free(map,NULL);
-}
-
/** For any descriptor that we want that's currently listed in
* <b>consensus</b>, download it as appropriate. */
void
@@ -4665,7 +4491,7 @@ update_consensus_router_descriptor_downloads(time_t now, int is_vote,
if (is_vote) {
/* where's it from, so we know whom to ask for descriptors */
- trusted_dir_server_t *ds;
+ dir_server_t *ds;
networkstatus_voter_info_t *voter = smartlist_get(consensus->voters, 0);
tor_assert(voter);
ds = trusteddirserver_get_by_v3_auth_digest(voter->identity_digest);
@@ -4689,7 +4515,7 @@ update_consensus_router_descriptor_downloads(time_t now, int is_vote,
sd->signed_descriptor_digest, DIGEST_LEN)) {
/* We have a descriptor with this digest, but either there is no
* entry in routerlist with the same ID (!ri), or there is one,
- * but the identity digest differs (memcmp).
+ * but the identity digest differs (memneq).
*/
smartlist_add(no_longer_old, sd);
++n_in_oldrouters; /* We have it in old_routers. */
@@ -4701,7 +4527,7 @@ update_consensus_router_descriptor_downloads(time_t now, int is_vote,
continue; /* We have an in-progress download. */
}
if (!download_status_is_ready(&rs->dl_status, now,
- MAX_ROUTERDESC_DOWNLOAD_FAILURES)) {
+ options->TestingDescriptorMaxDownloadTries)) {
++n_delayed; /* Not ready for retry. */
continue;
}
@@ -4803,13 +4629,10 @@ void
update_router_descriptor_downloads(time_t now)
{
const or_options_t *options = get_options();
- if (should_delay_dir_fetches(options))
+ if (should_delay_dir_fetches(options, NULL))
return;
if (!we_fetch_router_descriptors(options))
return;
- if (directory_fetches_dir_info_early(options)) {
- update_router_descriptor_cache_downloads_v2(now);
- }
update_consensus_router_descriptor_downloads(now, 0,
networkstatus_get_reasonably_live_consensus(now, FLAV_NS));
@@ -4827,7 +4650,7 @@ update_extrainfo_downloads(time_t now)
int n_no_ei = 0, n_pending = 0, n_have = 0, n_delay = 0;
if (! options->DownloadExtraInfo)
return;
- if (should_delay_dir_fetches(options))
+ if (should_delay_dir_fetches(options, NULL))
return;
if (!router_have_minimum_dir_info())
return;
@@ -4861,7 +4684,7 @@ update_extrainfo_downloads(time_t now)
continue;
}
if (!download_status_is_ready(&sd->ei_dl_status, now,
- MAX_ROUTERDESC_DOWNLOAD_FAILURES)) {
+ options->TestingDescriptorMaxDownloadTries)) {
++n_delay;
continue;
}
@@ -4888,230 +4711,6 @@ update_extrainfo_downloads(time_t now)
smartlist_free(wanted);
}
-/** True iff, the last time we checked whether we had enough directory info
- * to build circuits, the answer was "yes". */
-static int have_min_dir_info = 0;
-/** True iff enough has changed since the last time we checked whether we had
- * enough directory info to build circuits that our old answer can no longer
- * be trusted. */
-static int need_to_update_have_min_dir_info = 1;
-/** String describing what we're missing before we have enough directory
- * info. */
-static char dir_info_status[128] = "";
-
-/** Return true iff we have enough networkstatus and router information to
- * start building circuits. Right now, this means "more than half the
- * networkstatus documents, and at least 1/4 of expected routers." */
-//XXX should consider whether we have enough exiting nodes here.
-int
-router_have_minimum_dir_info(void)
-{
- if (PREDICT_UNLIKELY(need_to_update_have_min_dir_info)) {
- update_router_have_minimum_dir_info();
- need_to_update_have_min_dir_info = 0;
- }
- return have_min_dir_info;
-}
-
-/** Called when our internal view of the directory has changed. This can be
- * when the authorities change, networkstatuses change, the list of routerdescs
- * changes, or number of running routers changes.
- */
-void
-router_dir_info_changed(void)
-{
- need_to_update_have_min_dir_info = 1;
- rend_hsdir_routers_changed();
-}
-
-/** Return a string describing what we're missing before we have enough
- * directory info. */
-const char *
-get_dir_info_status_string(void)
-{
- return dir_info_status;
-}
-
-/** Iterate over the servers listed in <b>consensus</b>, and count how many of
- * them seem like ones we'd use, and how many of <em>those</em> we have
- * descriptors for. Store the former in *<b>num_usable</b> and the latter in
- * *<b>num_present</b>. If <b>in_set</b> is non-NULL, only consider those
- * routers in <b>in_set</b>. If <b>exit_only</b> is true, only consider nodes
- * with the Exit flag.
- */
-static void
-count_usable_descriptors(int *num_present, int *num_usable,
- const networkstatus_t *consensus,
- const or_options_t *options, time_t now,
- routerset_t *in_set, int exit_only)
-{
- const int md = (consensus->flavor == FLAV_MICRODESC);
- *num_present = 0, *num_usable=0;
-
- SMARTLIST_FOREACH_BEGIN(consensus->routerstatus_list, routerstatus_t *, rs)
- {
- if (exit_only && ! rs->is_exit)
- continue;
- if (in_set && ! routerset_contains_routerstatus(in_set, rs, -1))
- continue;
- if (client_would_use_router(rs, now, options)) {
- const char * const digest = rs->descriptor_digest;
- int present;
- ++*num_usable; /* the consensus says we want it. */
- if (md)
- present = NULL != microdesc_cache_lookup_by_digest256(NULL, digest);
- else
- present = NULL != router_get_by_descriptor_digest(digest);
- if (present) {
- /* we have the descriptor listed in the consensus. */
- ++*num_present;
- }
- }
- }
- SMARTLIST_FOREACH_END(rs);
-
- log_debug(LD_DIR, "%d usable, %d present.", *num_usable, *num_present);
-}
-
-/** We just fetched a new set of descriptors. Compute how far through
- * the "loading descriptors" bootstrapping phase we are, so we can inform
- * the controller of our progress. */
-int
-count_loading_descriptors_progress(void)
-{
- int num_present = 0, num_usable=0;
- time_t now = time(NULL);
- const networkstatus_t *consensus =
- networkstatus_get_reasonably_live_consensus(now,usable_consensus_flavor());
- double fraction;
-
- if (!consensus)
- return 0; /* can't count descriptors if we have no list of them */
-
- count_usable_descriptors(&num_present, &num_usable,
- consensus, get_options(), now, NULL, 0);
-
- if (num_usable == 0)
- return 0; /* don't div by 0 */
- fraction = num_present / (num_usable/4.);
- if (fraction > 1.0)
- return 0; /* it's not the number of descriptors holding us back */
- return BOOTSTRAP_STATUS_LOADING_DESCRIPTORS + (int)
- (fraction*(BOOTSTRAP_STATUS_CONN_OR-1 -
- BOOTSTRAP_STATUS_LOADING_DESCRIPTORS));
-}
-
-/** Change the value of have_min_dir_info, setting it true iff we have enough
- * network and router information to build circuits. Clear the value of
- * need_to_update_have_min_dir_info. */
-static void
-update_router_have_minimum_dir_info(void)
-{
- int num_present = 0, num_usable=0;
- int num_exit_present = 0, num_exit_usable = 0;
- time_t now = time(NULL);
- int res;
- const or_options_t *options = get_options();
- const networkstatus_t *consensus =
- networkstatus_get_reasonably_live_consensus(now,usable_consensus_flavor());
- int using_md;
-
- if (!consensus) {
- if (!networkstatus_get_latest_consensus())
- strlcpy(dir_info_status, "We have no usable consensus.",
- sizeof(dir_info_status));
- else
- strlcpy(dir_info_status, "We have no recent usable consensus.",
- sizeof(dir_info_status));
- res = 0;
- goto done;
- }
-
- if (should_delay_dir_fetches(get_options())) {
- log_notice(LD_DIR, "no known bridge descriptors running yet; stalling");
- strlcpy(dir_info_status, "No live bridge descriptors.",
- sizeof(dir_info_status));
- res = 0;
- goto done;
- }
-
- using_md = consensus->flavor == FLAV_MICRODESC;
-
- count_usable_descriptors(&num_present, &num_usable, consensus, options, now,
- NULL, 0);
- count_usable_descriptors(&num_exit_present, &num_exit_usable,
- consensus, options, now, options->ExitNodes, 1);
-
-/* What fraction of desired server descriptors do we need before we will
- * build circuits? */
-#define FRAC_USABLE_NEEDED .75
-/* What fraction of desired _exit_ server descriptors do we need before we
- * will build circuits? */
-#define FRAC_EXIT_USABLE_NEEDED .5
-
- if (num_present < num_usable * FRAC_USABLE_NEEDED) {
- tor_snprintf(dir_info_status, sizeof(dir_info_status),
- "We have only %d/%d usable %sdescriptors.",
- num_present, num_usable, using_md ? "micro" : "");
- res = 0;
- control_event_bootstrap(BOOTSTRAP_STATUS_REQUESTING_DESCRIPTORS, 0);
- goto done;
- } else if (num_present < 2) {
- tor_snprintf(dir_info_status, sizeof(dir_info_status),
- "Only %d %sdescriptor%s here and believed reachable!",
- num_present, using_md ? "micro" : "", num_present ? "" : "s");
- res = 0;
- goto done;
- } else if (num_exit_present < num_exit_usable * FRAC_EXIT_USABLE_NEEDED) {
- tor_snprintf(dir_info_status, sizeof(dir_info_status),
- "We have only %d/%d usable exit node descriptors.",
- num_exit_present, num_exit_usable);
- res = 0;
- control_event_bootstrap(BOOTSTRAP_STATUS_REQUESTING_DESCRIPTORS, 0);
- goto done;
- }
-
- /* Check for entry nodes. */
- if (options->EntryNodes) {
- count_usable_descriptors(&num_present, &num_usable, consensus, options,
- now, options->EntryNodes, 0);
-
- if (!num_usable || !num_present) {
- tor_snprintf(dir_info_status, sizeof(dir_info_status),
- "We have only %d/%d usable entry node %sdescriptors.",
- num_present, num_usable, using_md?"micro":"");
- res = 0;
- goto done;
- }
- }
-
- res = 1;
-
- done:
- if (res && !have_min_dir_info) {
- log(LOG_NOTICE, LD_DIR,
- "We now have enough directory information to build circuits.");
- control_event_client_status(LOG_NOTICE, "ENOUGH_DIR_INFO");
- control_event_bootstrap(BOOTSTRAP_STATUS_CONN_OR, 0);
- }
- if (!res && have_min_dir_info) {
- int quiet = directory_too_idle_to_fetch_descriptors(options, now);
- log(quiet ? LOG_INFO : LOG_NOTICE, LD_DIR,
- "Our directory information is no longer up-to-date "
- "enough to build circuits: %s", dir_info_status);
-
- /* a) make us log when we next complete a circuit, so we know when Tor
- * is back up and usable, and b) disable some activities that Tor
- * should only do while circuits are working, like reachability tests
- * and fetching bridge descriptors only over circuits. */
- can_complete_circuit = 0;
-
- control_event_client_status(LOG_NOTICE, "NOT_ENOUGH_DIR_INFO");
- }
- have_min_dir_info = res;
- need_to_update_have_min_dir_info = 0;
-}
-
/** Reset the descriptor download failure count on all routers, so that we
* can retry any long-failed routers immediately.
*/
@@ -5157,15 +4756,15 @@ router_differences_are_cosmetic(const routerinfo_t *r1, const routerinfo_t *r2)
}
/* If any key fields differ, they're different. */
- if (strcasecmp(r1->address, r2->address) ||
+ if (r1->addr != r2->addr ||
strcasecmp(r1->nickname, r2->nickname) ||
r1->or_port != r2->or_port ||
!tor_addr_eq(&r1->ipv6_addr, &r2->ipv6_addr) ||
r1->ipv6_orport != r2->ipv6_orport ||
r1->dir_port != r2->dir_port ||
r1->purpose != r2->purpose ||
- crypto_pk_cmp_keys(r1->onion_pkey, r2->onion_pkey) ||
- crypto_pk_cmp_keys(r1->identity_pkey, r2->identity_pkey) ||
+ !crypto_pk_eq_keys(r1->onion_pkey, r2->onion_pkey) ||
+ !crypto_pk_eq_keys(r1->identity_pkey, r2->identity_pkey) ||
strcasecmp(r1->platform, r2->platform) ||
(r1->contact_info && !r2->contact_info) || /* contact_info is optional */
(!r1->contact_info && r2->contact_info) ||
@@ -5410,7 +5009,7 @@ esc_router_info(const routerinfo_t *router)
/** Helper for sorting: compare two routerinfos by their identity
* digest. */
static int
-_compare_routerinfo_by_id_digest(const void **a, const void **b)
+compare_routerinfo_by_id_digest_(const void **a, const void **b)
{
routerinfo_t *first = *(routerinfo_t **)a, *second = *(routerinfo_t **)b;
return fast_memcmp(first->cache_info.identity_digest,
@@ -5422,153 +5021,10 @@ _compare_routerinfo_by_id_digest(const void **a, const void **b)
void
routers_sort_by_identity(smartlist_t *routers)
{
- smartlist_sort(routers, _compare_routerinfo_by_id_digest);
-}
-
-/** A routerset specifies constraints on a set of possible routerinfos, based
- * on their names, identities, or addresses. It is optimized for determining
- * whether a router is a member or not, in O(1+P) time, where P is the number
- * of address policy constraints. */
-struct routerset_t {
- /** A list of strings for the elements of the policy. Each string is either
- * a nickname, a hexadecimal identity fingerprint, or an address policy. A
- * router belongs to the set if its nickname OR its identity OR its address
- * matches an entry here. */
- smartlist_t *list;
- /** A map from lowercase nicknames of routers in the set to (void*)1 */
- strmap_t *names;
- /** A map from identity digests routers in the set to (void*)1 */
- digestmap_t *digests;
- /** An address policy for routers in the set. For implementation reasons,
- * a router belongs to the set if it is _rejected_ by this policy. */
- smartlist_t *policies;
-
- /** A human-readable description of what this routerset is for. Used in
- * log messages. */
- char *description;
-
- /** A list of the country codes in this set. */
- smartlist_t *country_names;
- /** Total number of countries we knew about when we built <b>countries</b>.*/
- int n_countries;
- /** Bit array mapping the return value of geoip_get_country() to 1 iff the
- * country is a member of this routerset. Note that we MUST call
- * routerset_refresh_countries() whenever the geoip country list is
- * reloaded. */
- bitarray_t *countries;
-};
-
-/** Return a new empty routerset. */
-routerset_t *
-routerset_new(void)
-{
- routerset_t *result = tor_malloc_zero(sizeof(routerset_t));
- result->list = smartlist_new();
- result->names = strmap_new();
- result->digests = digestmap_new();
- result->policies = smartlist_new();
- result->country_names = smartlist_new();
- return result;
+ smartlist_sort(routers, compare_routerinfo_by_id_digest_);
}
-/** If <b>c</b> is a country code in the form {cc}, return a newly allocated
- * string holding the "cc" part. Else, return NULL. */
-static char *
-routerset_get_countryname(const char *c)
-{
- char *country;
-
- if (strlen(c) < 4 || c[0] !='{' || c[3] !='}')
- return NULL;
-
- country = tor_strndup(c+1, 2);
- tor_strlower(country);
- return country;
-}
-
-/** Update the routerset's <b>countries</b> bitarray_t. Called whenever
- * the GeoIP database is reloaded.
- */
-void
-routerset_refresh_countries(routerset_t *target)
-{
- int cc;
- bitarray_free(target->countries);
-
- if (!geoip_is_loaded()) {
- target->countries = NULL;
- target->n_countries = 0;
- return;
- }
- target->n_countries = geoip_get_n_countries();
- target->countries = bitarray_init_zero(target->n_countries);
- SMARTLIST_FOREACH_BEGIN(target->country_names, const char *, country) {
- cc = geoip_get_country(country);
- if (cc >= 0) {
- tor_assert(cc < target->n_countries);
- bitarray_set(target->countries, cc);
- } else {
- log(LOG_WARN, LD_CONFIG, "Country code '%s' is not recognized.",
- country);
- }
- } SMARTLIST_FOREACH_END(country);
-}
-
-/** Parse the string <b>s</b> to create a set of routerset entries, and add
- * them to <b>target</b>. In log messages, refer to the string as
- * <b>description</b>. Return 0 on success, -1 on failure.
- *
- * Three kinds of elements are allowed in routersets: nicknames, IP address
- * patterns, and fingerprints. They may be surrounded by optional space, and
- * must be separated by commas.
- */
-int
-routerset_parse(routerset_t *target, const char *s, const char *description)
-{
- int r = 0;
- int added_countries = 0;
- char *countryname;
- smartlist_t *list = smartlist_new();
- smartlist_split_string(list, s, ",",
- SPLIT_SKIP_SPACE | SPLIT_IGNORE_BLANK, 0);
- SMARTLIST_FOREACH_BEGIN(list, char *, nick) {
- addr_policy_t *p;
- if (is_legal_hexdigest(nick)) {
- char d[DIGEST_LEN];
- if (*nick == '$')
- ++nick;
- log_debug(LD_CONFIG, "Adding identity %s to %s", nick, description);
- base16_decode(d, sizeof(d), nick, HEX_DIGEST_LEN);
- digestmap_set(target->digests, d, (void*)1);
- } else if (is_legal_nickname(nick)) {
- log_debug(LD_CONFIG, "Adding nickname %s to %s", nick, description);
- strmap_set_lc(target->names, nick, (void*)1);
- } else if ((countryname = routerset_get_countryname(nick)) != NULL) {
- log_debug(LD_CONFIG, "Adding country %s to %s", nick,
- description);
- smartlist_add(target->country_names, countryname);
- added_countries = 1;
- } else if ((strchr(nick,'.') || strchr(nick, '*')) &&
- (p = router_parse_addr_policy_item_from_string(
- nick, ADDR_POLICY_REJECT))) {
- log_debug(LD_CONFIG, "Adding address %s to %s", nick, description);
- smartlist_add(target->policies, p);
- } else {
- log_warn(LD_CONFIG, "Entry '%s' in %s is misformed.", nick,
- description);
- r = -1;
- tor_free(nick);
- SMARTLIST_DEL_CURRENT(list, nick);
- }
- } SMARTLIST_FOREACH_END(nick);
- smartlist_add_all(target->list, list);
- smartlist_free(list);
- if (added_countries)
- routerset_refresh_countries(target);
- return r;
-}
-
-/** Called when we change a node set, or when we reload the geoip list:
+/** Called when we change a node set, or when we reload the geoip IPv4 list:
* recompute all country info in all configuration node sets and in the
* routerlist. */
void
@@ -5584,303 +5040,12 @@ refresh_all_country_info(void)
routerset_refresh_countries(options->ExcludeNodes);
if (options->ExcludeExitNodes)
routerset_refresh_countries(options->ExcludeExitNodes);
- if (options->_ExcludeExitNodesUnion)
- routerset_refresh_countries(options->_ExcludeExitNodesUnion);
+ if (options->ExcludeExitNodesUnion_)
+ routerset_refresh_countries(options->ExcludeExitNodesUnion_);
nodelist_refresh_countries();
}
-/** Add all members of the set <b>source</b> to <b>target</b>. */
-void
-routerset_union(routerset_t *target, const routerset_t *source)
-{
- char *s;
- tor_assert(target);
- if (!source || !source->list)
- return;
- s = routerset_to_string(source);
- routerset_parse(target, s, "other routerset");
- tor_free(s);
-}
-
-/** Return true iff <b>set</b> lists only nicknames and digests, and includes
- * no IP ranges or countries. */
-int
-routerset_is_list(const routerset_t *set)
-{
- return smartlist_len(set->country_names) == 0 &&
- smartlist_len(set->policies) == 0;
-}
-
-/** Return true iff we need a GeoIP IP-to-country database to make sense of
- * <b>set</b>. */
-int
-routerset_needs_geoip(const routerset_t *set)
-{
- return set && smartlist_len(set->country_names);
-}
-
-/** Return true iff there are no entries in <b>set</b>. */
-int
-routerset_is_empty(const routerset_t *set)
-{
- return !set || smartlist_len(set->list) == 0;
-}
-
-/** Helper. Return true iff <b>set</b> contains a router based on the other
- * provided fields. Return higher values for more specific subentries: a
- * single router is more specific than an address range of routers, which is
- * more specific in turn than a country code.
- *
- * (If country is -1, then we take the country
- * from addr.) */
-static int
-routerset_contains(const routerset_t *set, const tor_addr_t *addr,
- uint16_t orport,
- const char *nickname, const char *id_digest,
- country_t country)
-{
- if (!set || !set->list)
- return 0;
- if (nickname && strmap_get_lc(set->names, nickname))
- return 4;
- if (id_digest && digestmap_get(set->digests, id_digest))
- return 4;
- if (addr && compare_tor_addr_to_addr_policy(addr, orport, set->policies)
- == ADDR_POLICY_REJECTED)
- return 3;
- if (set->countries) {
- if (country < 0 && addr)
- country = geoip_get_country_by_ip(tor_addr_to_ipv4h(addr));
-
- if (country >= 0 && country < set->n_countries &&
- bitarray_is_set(set->countries, country))
- return 2;
- }
- return 0;
-}
-
-/** Return true iff we can tell that <b>ei</b> is a member of <b>set</b>. */
-int
-routerset_contains_extendinfo(const routerset_t *set, const extend_info_t *ei)
-{
- return routerset_contains(set,
- &ei->addr,
- ei->port,
- ei->nickname,
- ei->identity_digest,
- -1 /*country*/);
-}
-
-/** Return true iff <b>ri</b> is in <b>set</b>. If country is <b>-1</b>, we
- * look up the country. */
-int
-routerset_contains_router(const routerset_t *set, const routerinfo_t *ri,
- country_t country)
-{
- tor_addr_t addr;
- tor_addr_from_ipv4h(&addr, ri->addr);
- return routerset_contains(set,
- &addr,
- ri->or_port,
- ri->nickname,
- ri->cache_info.identity_digest,
- country);
-}
-
-/** Return true iff <b>rs</b> is in <b>set</b>. If country is <b>-1</b>, we
- * look up the country. */
-int
-routerset_contains_routerstatus(const routerset_t *set,
- const routerstatus_t *rs,
- country_t country)
-{
- tor_addr_t addr;
- tor_addr_from_ipv4h(&addr, rs->addr);
- return routerset_contains(set,
- &addr,
- rs->or_port,
- rs->nickname,
- rs->identity_digest,
- country);
-}
-
-/** Return true iff <b>node</b> is in <b>set</b>. */
-int
-routerset_contains_node(const routerset_t *set, const node_t *node)
-{
- if (node->rs)
- return routerset_contains_routerstatus(set, node->rs, node->country);
- else if (node->ri)
- return routerset_contains_router(set, node->ri, node->country);
- else
- return 0;
-}
-
-/** Add every known node_t that is a member of <b>routerset</b> to
- * <b>out</b>, but never add any that are part of <b>excludeset</b>.
- * If <b>running_only</b>, only add the running ones. */
-void
-routerset_get_all_nodes(smartlist_t *out, const routerset_t *routerset,
- const routerset_t *excludeset, int running_only)
-{ /* XXXX MOVE */
- tor_assert(out);
- if (!routerset || !routerset->list)
- return;
-
- if (routerset_is_list(routerset)) {
- /* No routers are specified by type; all are given by name or digest.
- * we can do a lookup in O(len(routerset)). */
- SMARTLIST_FOREACH(routerset->list, const char *, name, {
- const node_t *node = node_get_by_nickname(name, 1);
- if (node) {
- if (!running_only || node->is_running)
- if (!routerset_contains_node(excludeset, node))
- smartlist_add(out, (void*)node);
- }
- });
- } else {
- /* We need to iterate over the routerlist to get all the ones of the
- * right kind. */
- smartlist_t *nodes = nodelist_get_list();
- SMARTLIST_FOREACH(nodes, const node_t *, node, {
- if (running_only && !node->is_running)
- continue;
- if (routerset_contains_node(routerset, node) &&
- !routerset_contains_node(excludeset, node))
- smartlist_add(out, (void*)node);
- });
- }
-}
-
-#if 0
-/** Add to <b>target</b> every node_t from <b>source</b> except:
- *
- * 1) Don't add it if <b>include</b> is non-empty and the relay isn't in
- * <b>include</b>; and
- * 2) Don't add it if <b>exclude</b> is non-empty and the relay is
- * excluded in a more specific fashion by <b>exclude</b>.
- * 3) If <b>running_only</b>, don't add non-running routers.
- */
-void
-routersets_get_node_disjunction(smartlist_t *target,
- const smartlist_t *source,
- const routerset_t *include,
- const routerset_t *exclude, int running_only)
-{
- SMARTLIST_FOREACH(source, const node_t *, node, {
- int include_result;
- if (running_only && !node->is_running)
- continue;
- if (!routerset_is_empty(include))
- include_result = routerset_contains_node(include, node);
- else
- include_result = 1;
-
- if (include_result) {
- int exclude_result = routerset_contains_node(exclude, node);
- if (include_result >= exclude_result)
- smartlist_add(target, (void*)node);
- }
- });
-}
-#endif
-
-/** Remove every node_t from <b>lst</b> that is in <b>routerset</b>. */
-void
-routerset_subtract_nodes(smartlist_t *lst, const routerset_t *routerset)
-{ /*XXXX MOVE ? */
- tor_assert(lst);
- if (!routerset)
- return;
- SMARTLIST_FOREACH(lst, const node_t *, node, {
- if (routerset_contains_node(routerset, node)) {
- //log_debug(LD_DIR, "Subtracting %s",r->nickname);
- SMARTLIST_DEL_CURRENT(lst, node);
- }
- });
-}
-
-/** Return a new string that when parsed by routerset_parse_string() will
- * yield <b>set</b>. */
-char *
-routerset_to_string(const routerset_t *set)
-{
- if (!set || !set->list)
- return tor_strdup("");
- return smartlist_join_strings(set->list, ",", 0, NULL);
-}
-
-/** Helper: return true iff old and new are both NULL, or both non-NULL
- * equal routersets. */
-int
-routerset_equal(const routerset_t *old, const routerset_t *new)
-{
- if (routerset_is_empty(old) && routerset_is_empty(new)) {
- /* Two empty sets are equal */
- return 1;
- } else if (routerset_is_empty(old) || routerset_is_empty(new)) {
- /* An empty set is equal to nothing else. */
- return 0;
- }
- tor_assert(old != NULL);
- tor_assert(new != NULL);
-
- if (smartlist_len(old->list) != smartlist_len(new->list))
- return 0;
-
- SMARTLIST_FOREACH(old->list, const char *, cp1, {
- const char *cp2 = smartlist_get(new->list, cp1_sl_idx);
- if (strcmp(cp1, cp2))
- return 0;
- });
-
- return 1;
-}
-
-/** Free all storage held in <b>routerset</b>. */
-void
-routerset_free(routerset_t *routerset)
-{
- if (!routerset)
- return;
-
- SMARTLIST_FOREACH(routerset->list, char *, cp, tor_free(cp));
- smartlist_free(routerset->list);
- SMARTLIST_FOREACH(routerset->policies, addr_policy_t *, p,
- addr_policy_free(p));
- smartlist_free(routerset->policies);
- SMARTLIST_FOREACH(routerset->country_names, char *, cp, tor_free(cp));
- smartlist_free(routerset->country_names);
-
- strmap_free(routerset->names, NULL);
- digestmap_free(routerset->digests, NULL);
- bitarray_free(routerset->countries);
- tor_free(routerset);
-}
-
-/** Refresh the country code of <b>ri</b>. This function MUST be called on
- * each router when the GeoIP database is reloaded, and on all new routers. */
-void
-node_set_country(node_t *node)
-{
- if (node->rs)
- node->country = geoip_get_country_by_ip(node->rs->addr);
- else if (node->ri)
- node->country = geoip_get_country_by_ip(node->ri->addr);
- else
- node->country = -1;
-}
-
-/** Set the country code of all routers in the routerlist. */
-void
-nodelist_refresh_countries(void) /* MOVE */
-{
- smartlist_t *nodes = nodelist_get_list();
- SMARTLIST_FOREACH(nodes, node_t *, node,
- node_set_country(node));
-}
-
/** Determine the routers that are responsible for <b>id</b> (binary) and
* add pointers to those routers' routerstatus_t to <b>responsible_dirs</b>.
* Return -1 if we're returning an empty smartlist, else return 0.
diff --git a/src/or/routerlist.h b/src/or/routerlist.h
index 8dcc6eb02..6e2f2eaea 100644
--- a/src/or/routerlist.h
+++ b/src/or/routerlist.h
@@ -1,6 +1,6 @@
/* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -8,12 +8,27 @@
* \brief Header file for routerlist.c.
**/
-#ifndef _TOR_ROUTERLIST_H
-#define _TOR_ROUTERLIST_H
+#ifndef TOR_ROUTERLIST_H
+#define TOR_ROUTERLIST_H
+
+#include "testsupport.h"
int get_n_authorities(dirinfo_type_t type);
int trusted_dirs_reload_certs(void);
-int trusted_dirs_load_certs_from_string(const char *contents, int from_store,
+
+/*
+ * Pass one of these as source to trusted_dirs_load_certs_from_string()
+ * to indicate whence string originates; this controls error handling
+ * behavior such as marking downloads as failed.
+ */
+
+#define TRUSTED_DIRS_CERTS_SRC_SELF 0
+#define TRUSTED_DIRS_CERTS_SRC_FROM_STORE 1
+#define TRUSTED_DIRS_CERTS_SRC_DL_BY_ID_DIGEST 2
+#define TRUSTED_DIRS_CERTS_SRC_DL_BY_ID_SK_DIGEST 3
+#define TRUSTED_DIRS_CERTS_SRC_FROM_VOTE 4
+
+int trusted_dirs_load_certs_from_string(const char *contents, int source,
int flush);
void trusted_dirs_flush_certs_to_disk(void);
authority_cert_t *authority_cert_get_newest_by_id(const char *id_digest);
@@ -21,40 +36,41 @@ authority_cert_t *authority_cert_get_by_sk_digest(const char *sk_digest);
authority_cert_t *authority_cert_get_by_digests(const char *id_digest,
const char *sk_digest);
void authority_cert_get_all(smartlist_t *certs_out);
-void authority_cert_dl_failed(const char *id_digest, int status);
+void authority_cert_dl_failed(const char *id_digest,
+ const char *signing_key_digest, int status);
void authority_certs_fetch_missing(networkstatus_t *status, time_t now);
int router_reload_router_list(void);
int authority_cert_dl_looks_uncertain(const char *id_digest);
-smartlist_t *router_get_trusted_dir_servers(void);
+const smartlist_t *router_get_trusted_dir_servers(void);
+const smartlist_t *router_get_fallback_dir_servers(void);
+int authority_cert_is_blacklisted(const authority_cert_t *cert);
const routerstatus_t *router_pick_directory_server(dirinfo_type_t type,
int flags);
-trusted_dir_server_t *router_get_trusteddirserver_by_digest(const char *d);
-trusted_dir_server_t *trusteddirserver_get_by_v3_auth_digest(const char *d);
+dir_server_t *router_get_trusteddirserver_by_digest(const char *d);
+dir_server_t *router_get_fallback_dirserver_by_digest(
+ const char *digest);
+dir_server_t *trusteddirserver_get_by_v3_auth_digest(const char *d);
const routerstatus_t *router_pick_trusteddirserver(dirinfo_type_t type,
int flags);
-int router_get_my_share_of_directory_requests(double *v2_share_out,
- double *v3_share_out);
+const routerstatus_t *router_pick_fallback_dirserver(dirinfo_type_t type,
+ int flags);
+int router_get_my_share_of_directory_requests(double *v3_share_out);
void router_reset_status_download_failures(void);
-int routers_have_same_or_addr(const routerinfo_t *r1, const routerinfo_t *r2);
-int router_nickname_is_in_list(const routerinfo_t *router, const char *list);
+int routers_have_same_or_addrs(const routerinfo_t *r1, const routerinfo_t *r2);
const routerinfo_t *routerlist_find_my_routerinfo(void);
-const node_t *router_find_exact_exit_enclave(const char *address,
- uint16_t port);
-int node_is_unreliable(const node_t *router, int need_uptime,
- int need_capacity, int need_guard);
uint32_t router_get_advertised_bandwidth(const routerinfo_t *router);
uint32_t router_get_advertised_bandwidth_capped(const routerinfo_t *router);
-const node_t *node_sl_choose_by_bandwidth(smartlist_t *sl,
+const node_t *node_sl_choose_by_bandwidth(const smartlist_t *sl,
bandwidth_weight_rule_t rule);
+double frac_nodes_with_descriptors(const smartlist_t *sl,
+ bandwidth_weight_rule_t rule);
const node_t *router_choose_random_node(smartlist_t *excludedsmartlist,
struct routerset_t *excludedset,
router_crn_flags_t flags);
-const routerinfo_t *router_get_by_nickname(const char *nickname,
- int warn_if_unnamed);
int router_is_named(const routerinfo_t *router);
int router_digest_is_trusted_dir_type(const char *digest,
dirinfo_type_t type);
@@ -63,7 +79,6 @@ int router_digest_is_trusted_dir_type(const char *digest,
int router_addr_is_trusted_dir(uint32_t addr);
int hexdigest_to_digest(const char *hexdigest, char *digest);
-const routerinfo_t *router_get_by_hexdigest(const char *hexdigest);
const routerinfo_t *router_get_by_id_digest(const char *digest);
routerinfo_t *router_get_mutable_by_digest(const char *digest);
signed_descriptor_t *router_get_by_descriptor_digest(const char *digest);
@@ -80,7 +95,6 @@ void routerlist_remove(routerlist_t *rl, routerinfo_t *ri, int make_old,
time_t now);
void routerlist_free_all(void);
void routerlist_reset_warnings(void);
-void router_set_status(const char *digest, int up);
static int WRA_WAS_ADDED(was_router_added_t s);
static int WRA_WAS_OUTDATED(was_router_added_t s);
@@ -133,27 +147,25 @@ void router_load_extrainfo_from_string(const char *s, const char *eos,
int descriptor_digests);
void routerlist_retry_directory_downloads(time_t now);
-int router_exit_policy_all_nodes_reject(const tor_addr_t *addr, uint16_t port,
- int need_uptime);
int router_exit_policy_rejects_all(const routerinfo_t *router);
-trusted_dir_server_t *add_trusted_dir_server(const char *nickname,
- const char *address,
- uint16_t dir_port, uint16_t or_port,
- const char *digest, const char *v3_auth_digest,
- dirinfo_type_t type);
+
+dir_server_t *trusted_dir_server_new(const char *nickname, const char *address,
+ uint16_t dir_port, uint16_t or_port,
+ const char *digest, const char *v3_auth_digest,
+ dirinfo_type_t type, double weight);
+dir_server_t *fallback_dir_server_new(const tor_addr_t *addr,
+ uint16_t dir_port, uint16_t or_port,
+ const char *id_digest, double weight);
+void dir_server_add(dir_server_t *ent);
+
void authority_cert_free(authority_cert_t *cert);
-void clear_trusted_dir_servers(void);
-int any_trusted_dir_is_v1_authority(void);
+void clear_dir_servers(void);
void update_consensus_router_descriptor_downloads(time_t now, int is_vote,
networkstatus_t *consensus);
void update_router_descriptor_downloads(time_t now);
void update_all_descriptor_downloads(time_t now);
void update_extrainfo_downloads(time_t now);
-int router_have_minimum_dir_info(void);
-void router_dir_info_changed(void);
-const char *get_dir_info_status_string(void);
-int count_loading_descriptors_progress(void);
void router_reset_descriptor_download_failures(void);
int router_differences_are_cosmetic(const routerinfo_t *r1,
const routerinfo_t *r2);
@@ -166,38 +178,6 @@ void routerlist_assert_ok(const routerlist_t *rl);
const char *esc_router_info(const routerinfo_t *router);
void routers_sort_by_identity(smartlist_t *routers);
-routerset_t *routerset_new(void);
-void routerset_refresh_countries(routerset_t *rs);
-int routerset_parse(routerset_t *target, const char *s,
- const char *description);
-void routerset_union(routerset_t *target, const routerset_t *source);
-int routerset_is_list(const routerset_t *set);
-int routerset_needs_geoip(const routerset_t *set);
-int routerset_is_empty(const routerset_t *set);
-int routerset_contains_router(const routerset_t *set, const routerinfo_t *ri,
- country_t country);
-int routerset_contains_routerstatus(const routerset_t *set,
- const routerstatus_t *rs,
- country_t country);
-int routerset_contains_extendinfo(const routerset_t *set,
- const extend_info_t *ei);
-
-int routerset_contains_node(const routerset_t *set, const node_t *node);
-void routerset_get_all_nodes(smartlist_t *out, const routerset_t *routerset,
- const routerset_t *excludeset,
- int running_only);
-#if 0
-void routersets_get_node_disjunction(smartlist_t *target,
- const smartlist_t *source,
- const routerset_t *include,
- const routerset_t *exclude, int running_only);
-#endif
-void routerset_subtract_nodes(smartlist_t *out,
- const routerset_t *routerset);
-
-char *routerset_to_string(const routerset_t *routerset);
-int routerset_equal(const routerset_t *old, const routerset_t *new);
-void routerset_free(routerset_t *routerset);
void refresh_all_country_info(void);
int hid_serv_get_responsible_directories(smartlist_t *responsible_dirs,
@@ -215,6 +195,24 @@ int hex_digest_nickname_decode(const char *hexdigest,
char *digest_out,
char *nickname_qualifier_out,
char *nickname_out);
+int hex_digest_nickname_matches(const char *hexdigest,
+ const char *identity_digest,
+ const char *nickname, int is_named);
+
+#ifdef ROUTERLIST_PRIVATE
+/** Helper type for choosing routers by bandwidth: contains a union of
+ * double and uint64_t. Before we call scale_array_elements_to_u64, it holds
+ * a double; after, it holds a uint64_t. */
+typedef union u64_dbl_t {
+ uint64_t u64;
+ double dbl;
+} u64_dbl_t;
+
+STATIC int choose_array_element_by_weight(const u64_dbl_t *entries,
+ int n_entries);
+STATIC void scale_array_elements_to_u64(u64_dbl_t *entries, int n_entries,
+ uint64_t *total_out);
+#endif
#endif
diff --git a/src/or/routerparse.c b/src/or/routerparse.c
index 299d07d37..5add728d6 100644
--- a/src/or/routerparse.c
+++ b/src/or/routerparse.c
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -11,7 +11,7 @@
#include "or.h"
#include "config.h"
-#include "circuitbuild.h"
+#include "circuitstats.h"
#include "dirserv.h"
#include "dirvote.h"
#include "policies.h"
@@ -29,8 +29,8 @@
/****************************************************************************/
/** Enumeration of possible token types. The ones starting with K_ correspond
- * to directory 'keywords'. _ERR is an error in the tokenizing process, _EOF
- * is an end-of-file marker, and _NIL is used to encode not-a-token.
+ * to directory 'keywords'. ERR_ is an error in the tokenizing process, EOF_
+ * is an end-of-file marker, and NIL_ is used to encode not-a-token.
*/
typedef enum {
K_ACCEPT = 0,
@@ -43,6 +43,7 @@ typedef enum {
K_SIGNED_DIRECTORY,
K_SIGNING_KEY,
K_ONION_KEY,
+ K_ONION_KEY_NTOR,
K_ROUTER_SIGNATURE,
K_PUBLISHED,
K_RUNNING_ROUTERS,
@@ -66,7 +67,9 @@ typedef enum {
K_SERVER_VERSIONS,
K_OR_ADDRESS,
K_P,
+ K_P6,
K_R,
+ K_A,
K_S,
K_V,
K_W,
@@ -76,6 +79,7 @@ typedef enum {
K_CACHES_EXTRA_INFO,
K_HIDDEN_SERVICE_DIR,
K_ALLOW_SINGLE_HOP_EXITS,
+ K_IPV6_POLICY,
K_DIRREQ_END,
K_DIRREQ_V2_IPS,
@@ -130,7 +134,7 @@ typedef enum {
A_PURPOSE,
A_LAST_LISTED,
- _A_UNKNOWN,
+ A_UNKNOWN_,
R_RENDEZVOUS_SERVICE_DESCRIPTOR,
R_VERSION,
@@ -151,13 +155,13 @@ typedef enum {
C_DESCRIPTOR_COOKIE,
C_CLIENT_KEY,
- _ERR,
- _EOF,
- _NIL
+ ERR_,
+ EOF_,
+ NIL_
} directory_keyword;
#define MIN_ANNOTATION A_PURPOSE
-#define MAX_ANNOTATION _A_UNKNOWN
+#define MAX_ANNOTATION A_UNKNOWN_
/** Structure to hold a single directory token.
*
@@ -180,7 +184,7 @@ typedef struct directory_token_t {
crypto_pk_t *key; /**< For public keys only. Heap-allocated. */
- char *error; /**< For _ERR tokens only. */
+ char *error; /**< For ERR_ tokens only. */
} directory_token_t;
/* ********************************************************************** */
@@ -234,7 +238,7 @@ typedef struct token_rule_t {
*/
/** Appears to indicate the end of a table. */
-#define END_OF_TABLE { NULL, _NIL, 0,0,0, NO_OBJ, 0, INT_MAX, 0, 0 }
+#define END_OF_TABLE { NULL, NIL_, 0,0,0, NO_OBJ, 0, INT_MAX, 0, 0 }
/** An item with no restrictions: used for obsolete document types */
#define T(s,t,a,o) { s, t, a, o, 0, INT_MAX, 0, 0 }
/** An item with no restrictions on multiplicity or location. */
@@ -270,8 +274,10 @@ static token_rule_t routerdesc_token_table[] = {
T0N("reject6", K_REJECT6, ARGS, NO_OBJ ),
T0N("accept6", K_ACCEPT6, ARGS, NO_OBJ ),
T1_START( "router", K_ROUTER, GE(5), NO_OBJ ),
+ T01("ipv6-policy", K_IPV6_POLICY, CONCAT_ARGS, NO_OBJ),
T1( "signing-key", K_SIGNING_KEY, NO_ARGS, NEED_KEY_1024 ),
T1( "onion-key", K_ONION_KEY, NO_ARGS, NEED_KEY_1024 ),
+ T01("ntor-onion-key", K_ONION_KEY_NTOR, GE(1), NO_OBJ ),
T1_END( "router-signature", K_ROUTER_SIGNATURE, NO_ARGS, NEED_OBJ ),
T1( "published", K_PUBLISHED, CONCAT_ARGS, NO_OBJ ),
T01("uptime", K_UPTIME, GE(1), NO_OBJ ),
@@ -333,11 +339,12 @@ static token_rule_t extrainfo_token_table[] = {
END_OF_TABLE
};
-/** List of tokens recognized in the body part of v2 and v3 networkstatus
+/** List of tokens recognized in the body part of v3 networkstatus
* documents. */
static token_rule_t rtrstatus_token_table[] = {
T01("p", K_P, CONCAT_ARGS, NO_OBJ ),
T1( "r", K_R, GE(7), NO_OBJ ),
+ T0N("a", K_A, GE(1), NO_OBJ ),
T1( "s", K_S, ARGS, NO_OBJ ),
T01("v", K_V, CONCAT_ARGS, NO_OBJ ),
T01("w", K_W, ARGS, NO_OBJ ),
@@ -346,50 +353,6 @@ static token_rule_t rtrstatus_token_table[] = {
END_OF_TABLE
};
-/** List of tokens recognized in the header part of v2 networkstatus documents.
- */
-static token_rule_t netstatus_token_table[] = {
- T1( "published", K_PUBLISHED, CONCAT_ARGS, NO_OBJ ),
- T0N("opt", K_OPT, CONCAT_ARGS, OBJ_OK ),
- T1( "contact", K_CONTACT, CONCAT_ARGS, NO_OBJ ),
- T1( "dir-signing-key", K_DIR_SIGNING_KEY, NO_ARGS, NEED_KEY_1024 ),
- T1( "fingerprint", K_FINGERPRINT, CONCAT_ARGS, NO_OBJ ),
- T1_START("network-status-version", K_NETWORK_STATUS_VERSION,
- GE(1), NO_OBJ ),
- T1( "dir-source", K_DIR_SOURCE, GE(3), NO_OBJ ),
- T01("dir-options", K_DIR_OPTIONS, ARGS, NO_OBJ ),
- T01("client-versions", K_CLIENT_VERSIONS, CONCAT_ARGS, NO_OBJ ),
- T01("server-versions", K_SERVER_VERSIONS, CONCAT_ARGS, NO_OBJ ),
-
- END_OF_TABLE
-};
-
-/** List of tokens recognized in the footer of v1/v2 directory/networkstatus
- * footers. */
-static token_rule_t dir_footer_token_table[] = {
- T1("directory-signature", K_DIRECTORY_SIGNATURE, EQ(1), NEED_OBJ ),
- END_OF_TABLE
-};
-
-/** List of tokens recognized in v1 directory headers/footers. */
-static token_rule_t dir_token_table[] = {
- /* don't enforce counts; this is obsolete. */
- T( "network-status", K_NETWORK_STATUS, NO_ARGS, NO_OBJ ),
- T( "directory-signature", K_DIRECTORY_SIGNATURE, ARGS, NEED_OBJ ),
- T( "recommended-software",K_RECOMMENDED_SOFTWARE,CONCAT_ARGS, NO_OBJ ),
- T( "signed-directory", K_SIGNED_DIRECTORY, NO_ARGS, NO_OBJ ),
-
- T( "running-routers", K_RUNNING_ROUTERS, ARGS, NO_OBJ ),
- T( "router-status", K_ROUTER_STATUS, ARGS, NO_OBJ ),
- T( "published", K_PUBLISHED, CONCAT_ARGS, NO_OBJ ),
- T( "opt", K_OPT, CONCAT_ARGS, OBJ_OK ),
- T( "contact", K_CONTACT, CONCAT_ARGS, NO_OBJ ),
- T( "dir-signing-key", K_DIR_SIGNING_KEY, ARGS, OBJ_OK ),
- T( "fingerprint", K_FINGERPRINT, CONCAT_ARGS, NO_OBJ ),
-
- END_OF_TABLE
-};
-
/** List of tokens common to V3 authority certificates and V3 consensuses. */
#define CERTIFICATE_MEMBERS \
T1("dir-key-certificate-version", K_DIR_KEY_CERTIFICATE_VERSION, \
@@ -398,7 +361,7 @@ static token_rule_t dir_token_table[] = {
T1("dir-key-published",K_DIR_KEY_PUBLISHED, CONCAT_ARGS, NO_OBJ), \
T1("dir-key-expires", K_DIR_KEY_EXPIRES, CONCAT_ARGS, NO_OBJ), \
T1("dir-signing-key", K_DIR_SIGNING_KEY, NO_ARGS, NEED_KEY ),\
- T01("dir-key-crosscert", K_DIR_KEY_CROSSCERT, NO_ARGS, NEED_OBJ ),\
+ T1("dir-key-crosscert", K_DIR_KEY_CROSSCERT, NO_ARGS, NEED_OBJ ),\
T1("dir-key-certification", K_DIR_KEY_CERTIFICATION, \
NO_ARGS, NEED_OBJ), \
T01("dir-address", K_DIR_ADDRESS, GE(1), NO_OBJ),
@@ -498,8 +461,7 @@ static token_rule_t networkstatus_consensus_token_table[] = {
END_OF_TABLE
};
-/** List of tokens recognized in the footer of v1/v2 directory/networkstatus
- * footers. */
+/** List of tokens recognized in the footer of v1 directory footers. */
static token_rule_t networkstatus_vote_footer_token_table[] = {
T01("directory-footer", K_DIRECTORY_FOOTER, NO_ARGS, NO_OBJ ),
T01("bandwidth-weights", K_BW_WEIGHTS, ARGS, NO_OBJ ),
@@ -522,8 +484,11 @@ static token_rule_t networkstatus_detached_signature_token_table[] = {
/** List of tokens recognized in microdescriptors */
static token_rule_t microdesc_token_table[] = {
T1_START("onion-key", K_ONION_KEY, NO_ARGS, NEED_KEY_1024),
+ T01("ntor-onion-key", K_ONION_KEY_NTOR, GE(1), NO_OBJ ),
+ T0N("a", K_A, GE(1), NO_OBJ ),
T01("family", K_FAMILY, ARGS, NO_OBJ ),
T01("p", K_P, CONCAT_ARGS, NO_OBJ ),
+ T01("p6", K_P6, CONCAT_ARGS, NO_OBJ ),
A01("@last-listed", A_LAST_LISTED, CONCAT_ARGS, NO_OBJ ),
END_OF_TABLE
};
@@ -532,7 +497,8 @@ static token_rule_t microdesc_token_table[] = {
/* static function prototypes */
static int router_add_exit_policy(routerinfo_t *router,directory_token_t *tok);
-static addr_policy_t *router_parse_addr_policy(directory_token_t *tok);
+static addr_policy_t *router_parse_addr_policy(directory_token_t *tok,
+ unsigned fmt_flags);
static addr_policy_t *router_parse_addr_policy_private(directory_token_t *tok);
static int router_get_hash_impl(const char *s, size_t s_len, char *digest,
@@ -546,10 +512,10 @@ static int router_get_hashes_impl(const char *s, size_t s_len,
static void token_clear(directory_token_t *tok);
static smartlist_t *find_all_by_keyword(smartlist_t *s, directory_keyword k);
static smartlist_t *find_all_exitpolicy(smartlist_t *s);
-static directory_token_t *_find_by_keyword(smartlist_t *s,
+static directory_token_t *find_by_keyword_(smartlist_t *s,
directory_keyword keyword,
const char *keyword_str);
-#define find_by_keyword(s, keyword) _find_by_keyword((s), (keyword), #keyword)
+#define find_by_keyword(s, keyword) find_by_keyword_((s), (keyword), #keyword)
static directory_token_t *find_opt_by_keyword(smartlist_t *s,
directory_keyword keyword);
@@ -573,7 +539,6 @@ static int check_signature_token(const char *digest,
crypto_pk_t *pkey,
int flags,
const char *doctype);
-static crypto_pk_t *find_dir_signing_key(const char *str, const char *eos);
#undef DEBUG_AREA_ALLOC
@@ -607,7 +572,7 @@ dump_desc(const char *desc, const char *type)
char *content = tor_malloc_zero(filelen);
tor_snprintf(content, filelen, "Unable to parse descriptor of type "
"%s:\n%s", type, desc);
- write_str_to_file(debugfile, content, 0);
+ write_str_to_file(debugfile, content, 1);
log_info(LD_DIR, "Unable to parse descriptor of type %s. See file "
"unparseable-desc in data directory for details.", type);
tor_free(content);
@@ -638,28 +603,6 @@ router_get_router_hash(const char *s, size_t s_len, char *digest)
DIGEST_SHA1);
}
-/** Set <b>digest</b> to the SHA-1 digest of the hash of the running-routers
- * string in <b>s</b>. Return 0 on success, -1 on failure.
- */
-int
-router_get_runningrouters_hash(const char *s, char *digest)
-{
- return router_get_hash_impl(s, strlen(s), digest,
- "network-status","\ndirectory-signature", '\n',
- DIGEST_SHA1);
-}
-
-/** Set <b>digest</b> to the SHA-1 digest of the hash of the network-status
- * string in <b>s</b>. Return 0 on success, -1 on failure. */
-int
-router_get_networkstatus_v2_hash(const char *s, char *digest)
-{
- return router_get_hash_impl(s, strlen(s), digest,
- "network-status-version","\ndirectory-signature",
- '\n',
- DIGEST_SHA1);
-}
-
/** Set <b>digests</b> to all the digests of the consensus document in
* <b>s</b> */
int
@@ -671,18 +614,6 @@ router_get_networkstatus_v3_hashes(const char *s, digests_t *digests)
' ');
}
-/** Set <b>digest</b> to the SHA-1 digest of the hash of the network-status
- * string in <b>s</b>. Return 0 on success, -1 on failure. */
-int
-router_get_networkstatus_v3_hash(const char *s, char *digest,
- digest_algorithm_t alg)
-{
- return router_get_hash_impl(s, strlen(s), digest,
- "network-status-version",
- "\ndirectory-signature",
- ' ', alg);
-}
-
/** Set <b>digest</b> to the SHA-1 digest of the hash of the <b>s_len</b>-byte
* extrainfo string at <b>s</b>. Return 0 on success, -1 on failure. */
int
@@ -693,19 +624,23 @@ router_get_extrainfo_hash(const char *s, size_t s_len, char *digest)
}
/** Helper: used to generate signatures for routers, directories and
- * network-status objects. Given a digest in <b>digest</b> and a secret
- * <b>private_key</b>, generate an PKCS1-padded signature, BASE64-encode it,
- * surround it with -----BEGIN/END----- pairs, and write it to the
- * <b>buf_len</b>-byte buffer at <b>buf</b>. Return 0 on success, -1 on
- * failure.
+ * network-status objects. Given a <b>digest_len</b>-byte digest in
+ * <b>digest</b> and a secret <b>private_key</b>, generate an PKCS1-padded
+ * signature, BASE64-encode it, surround it with -----BEGIN/END----- pairs,
+ * and return the new signature on success or NULL on failure.
*/
-int
-router_append_dirobj_signature(char *buf, size_t buf_len, const char *digest,
- size_t digest_len, crypto_pk_t *private_key)
+char *
+router_get_dirobj_signature(const char *digest,
+ size_t digest_len,
+ crypto_pk_t *private_key)
{
char *signature;
size_t i, keysize;
int siglen;
+ char *buf = NULL;
+ size_t buf_len;
+ /* overestimate of BEGIN/END lines total len. */
+#define BEGIN_END_OVERHEAD_LEN 64
keysize = crypto_pk_keysize(private_key);
signature = tor_malloc(keysize);
@@ -715,7 +650,12 @@ router_append_dirobj_signature(char *buf, size_t buf_len, const char *digest,
log_warn(LD_BUG,"Couldn't sign digest.");
goto err;
}
- if (strlcat(buf, "-----BEGIN SIGNATURE-----\n", buf_len) >= buf_len)
+
+ /* The *2 here is a ridiculous overestimate of base-64 overhead. */
+ buf_len = (siglen * 2) + BEGIN_END_OVERHEAD_LEN;
+ buf = tor_malloc(buf_len);
+
+ if (strlcpy(buf, "-----BEGIN SIGNATURE-----\n", buf_len) >= buf_len)
goto truncated;
i = strlen(buf);
@@ -728,13 +668,43 @@ router_append_dirobj_signature(char *buf, size_t buf_len, const char *digest,
goto truncated;
tor_free(signature);
- return 0;
+ return buf;
truncated:
log_warn(LD_BUG,"tried to exceed string length.");
err:
tor_free(signature);
- return -1;
+ tor_free(buf);
+ return NULL;
+}
+
+/** Helper: used to generate signatures for routers, directories and
+ * network-status objects. Given a digest in <b>digest</b> and a secret
+ * <b>private_key</b>, generate a PKCS1-padded signature, BASE64-encode it,
+ * surround it with -----BEGIN/END----- pairs, and write it to the
+ * <b>buf_len</b>-byte buffer at <b>buf</b>. Return 0 on success, -1 on
+ * failure.
+ */
+int
+router_append_dirobj_signature(char *buf, size_t buf_len, const char *digest,
+ size_t digest_len, crypto_pk_t *private_key)
+{
+ size_t sig_len, s_len;
+ char *sig = router_get_dirobj_signature(digest, digest_len, private_key);
+ if (!sig) {
+ log_warn(LD_BUG, "No signature generated");
+ return -1;
+ }
+ sig_len = strlen(sig);
+ s_len = strlen(buf);
+ if (sig_len + s_len + 1 > buf_len) {
+ log_warn(LD_BUG, "Not enough room for signature");
+ tor_free(sig);
+ return -1;
+ }
+ memcpy(buf+s_len, sig, sig_len+1);
+ tor_free(sig);
+ return 0;
}
/** Return VS_RECOMMENDED if <b>myversion</b> is contained in
@@ -816,218 +786,6 @@ tor_version_is_obsolete(const char *myversion, const char *versionlist)
return ret;
}
-/** Read a signed directory from <b>str</b>. If it's well-formed, return 0.
- * Otherwise, return -1. If we're a directory cache, cache it.
- */
-int
-router_parse_directory(const char *str)
-{
- directory_token_t *tok;
- char digest[DIGEST_LEN];
- time_t published_on;
- int r;
- const char *end, *cp, *str_dup = str;
- smartlist_t *tokens = NULL;
- crypto_pk_t *declared_key = NULL;
- memarea_t *area = memarea_new();
-
- /* XXXX This could be simplified a lot, but it will all go away
- * once pre-0.1.1.8 is obsolete, and for now it's better not to
- * touch it. */
-
- if (router_get_dir_hash(str, digest)) {
- log_warn(LD_DIR, "Unable to compute digest of directory");
- goto err;
- }
- log_debug(LD_DIR,"Received directory hashes to %s",hex_str(digest,4));
-
- /* Check signature first, before we try to tokenize. */
- cp = str;
- while (cp && (end = strstr(cp+1, "\ndirectory-signature")))
- cp = end;
- if (cp == str || !cp) {
- log_warn(LD_DIR, "No signature found on directory."); goto err;
- }
- ++cp;
- tokens = smartlist_new();
- if (tokenize_string(area,cp,strchr(cp,'\0'),tokens,dir_token_table,0)) {
- log_warn(LD_DIR, "Error tokenizing directory signature"); goto err;
- }
- if (smartlist_len(tokens) != 1) {
- log_warn(LD_DIR, "Unexpected number of tokens in signature"); goto err;
- }
- tok=smartlist_get(tokens,0);
- if (tok->tp != K_DIRECTORY_SIGNATURE) {
- log_warn(LD_DIR,"Expected a single directory signature"); goto err;
- }
- declared_key = find_dir_signing_key(str, str+strlen(str));
- note_crypto_pk_op(VERIFY_DIR);
- if (check_signature_token(digest, DIGEST_LEN, tok, declared_key,
- CST_CHECK_AUTHORITY, "directory")<0)
- goto err;
-
- SMARTLIST_FOREACH(tokens, directory_token_t *, t, token_clear(t));
- smartlist_clear(tokens);
- memarea_clear(area);
-
- /* Now try to parse the first part of the directory. */
- if ((end = strstr(str,"\nrouter "))) {
- ++end;
- } else if ((end = strstr(str, "\ndirectory-signature"))) {
- ++end;
- } else {
- end = str + strlen(str);
- }
-
- if (tokenize_string(area,str,end,tokens,dir_token_table,0)) {
- log_warn(LD_DIR, "Error tokenizing directory"); goto err;
- }
-
- tok = find_by_keyword(tokens, K_PUBLISHED);
- tor_assert(tok->n_args == 1);
-
- if (parse_iso_time(tok->args[0], &published_on) < 0) {
- goto err;
- }
-
- /* Now that we know the signature is okay, and we have a
- * publication time, cache the directory. */
- if (directory_caches_v1_dir_info(get_options()) &&
- !authdir_mode_v1(get_options()))
- dirserv_set_cached_directory(str, published_on, 0);
-
- r = 0;
- goto done;
- err:
- dump_desc(str_dup, "v1 directory");
- r = -1;
- done:
- if (declared_key) crypto_pk_free(declared_key);
- if (tokens) {
- SMARTLIST_FOREACH(tokens, directory_token_t *, t, token_clear(t));
- smartlist_free(tokens);
- }
- if (area) {
- DUMP_AREA(area, "v1 directory");
- memarea_drop_all(area);
- }
- return r;
-}
-
-/** Read a signed router status statement from <b>str</b>. If it's
- * well-formed, return 0. Otherwise, return -1. If we're a directory cache,
- * cache it.*/
-int
-router_parse_runningrouters(const char *str)
-{
- char digest[DIGEST_LEN];
- directory_token_t *tok;
- time_t published_on;
- int r = -1;
- crypto_pk_t *declared_key = NULL;
- smartlist_t *tokens = NULL;
- const char *eos = str + strlen(str), *str_dup = str;
- memarea_t *area = NULL;
-
- if (router_get_runningrouters_hash(str, digest)) {
- log_warn(LD_DIR, "Unable to compute digest of running-routers");
- goto err;
- }
- area = memarea_new();
- tokens = smartlist_new();
- if (tokenize_string(area,str,eos,tokens,dir_token_table,0)) {
- log_warn(LD_DIR, "Error tokenizing running-routers"); goto err;
- }
- tok = smartlist_get(tokens,0);
- if (tok->tp != K_NETWORK_STATUS) {
- log_warn(LD_DIR, "Network-status starts with wrong token");
- goto err;
- }
-
- tok = find_by_keyword(tokens, K_PUBLISHED);
- tor_assert(tok->n_args == 1);
- if (parse_iso_time(tok->args[0], &published_on) < 0) {
- goto err;
- }
- if (!(tok = find_opt_by_keyword(tokens, K_DIRECTORY_SIGNATURE))) {
- log_warn(LD_DIR, "Missing signature on running-routers");
- goto err;
- }
- declared_key = find_dir_signing_key(str, eos);
- note_crypto_pk_op(VERIFY_DIR);
- if (check_signature_token(digest, DIGEST_LEN, tok, declared_key,
- CST_CHECK_AUTHORITY, "running-routers")
- < 0)
- goto err;
-
- /* Now that we know the signature is okay, and we have a
- * publication time, cache the list. */
- if (get_options()->DirPort_set && !authdir_mode_v1(get_options()))
- dirserv_set_cached_directory(str, published_on, 1);
-
- r = 0;
- err:
- dump_desc(str_dup, "v1 running-routers");
- if (declared_key) crypto_pk_free(declared_key);
- if (tokens) {
- SMARTLIST_FOREACH(tokens, directory_token_t *, t, token_clear(t));
- smartlist_free(tokens);
- }
- if (area) {
- DUMP_AREA(area, "v1 running-routers");
- memarea_drop_all(area);
- }
- return r;
-}
-
-/** Given a directory or running-routers string in <b>str</b>, try to
- * find the its dir-signing-key token (if any). If this token is
- * present, extract and return the key. Return NULL on failure. */
-static crypto_pk_t *
-find_dir_signing_key(const char *str, const char *eos)
-{
- const char *cp;
- directory_token_t *tok;
- crypto_pk_t *key = NULL;
- memarea_t *area = NULL;
- tor_assert(str);
- tor_assert(eos);
-
- /* Is there a dir-signing-key in the directory? */
- cp = tor_memstr(str, eos-str, "\nopt dir-signing-key");
- if (!cp)
- cp = tor_memstr(str, eos-str, "\ndir-signing-key");
- if (!cp)
- return NULL;
- ++cp; /* Now cp points to the start of the token. */
-
- area = memarea_new();
- tok = get_next_token(area, &cp, eos, dir_token_table);
- if (!tok) {
- log_warn(LD_DIR, "Unparseable dir-signing-key token");
- goto done;
- }
- if (tok->tp != K_DIR_SIGNING_KEY) {
- log_warn(LD_DIR, "Dir-signing-key token did not parse as expected");
- goto done;
- }
-
- if (tok->key) {
- key = tok->key;
- tok->key = NULL; /* steal reference. */
- } else {
- log_warn(LD_DIR, "Dir-signing-key token contained no key");
- }
-
- done:
- if (tok) token_clear(tok);
- if (area) {
- DUMP_AREA(area, "dir-signing-key token");
- memarea_drop_all(area);
- }
- return key;
-}
-
/** Return true iff <b>key</b> is allowed to sign directories.
*/
static int
@@ -1250,13 +1008,50 @@ dump_distinct_digest_count(int severity)
#ifdef COUNT_DISTINCT_DIGESTS
if (!verified_digests)
verified_digests = digestmap_new();
- log(severity, LD_GENERAL, "%d *distinct* router digests verified",
+ tor_log(severity, LD_GENERAL, "%d *distinct* router digests verified",
digestmap_size(verified_digests));
#else
(void)severity; /* suppress "unused parameter" warning */
#endif
}
+/** Try to find an IPv6 OR port in <b>list</b> of directory_token_t's
+ * with at least one argument (use GE(1) in setup). If found, store
+ * address and port number to <b>addr_out</b> and
+ * <b>port_out</b>. Return number of OR ports found. */
+static int
+find_single_ipv6_orport(const smartlist_t *list,
+ tor_addr_t *addr_out,
+ uint16_t *port_out)
+{
+ int ret = 0;
+ tor_assert(list != NULL);
+ tor_assert(addr_out != NULL);
+ tor_assert(port_out != NULL);
+
+ SMARTLIST_FOREACH_BEGIN(list, directory_token_t *, t) {
+ tor_addr_t a;
+ maskbits_t bits;
+ uint16_t port_min, port_max;
+ tor_assert(t->n_args >= 1);
+ /* XXXX Prop186 the full spec allows much more than this. */
+ if (tor_addr_parse_mask_ports(t->args[0], 0,
+ &a, &bits, &port_min,
+ &port_max) == AF_INET6 &&
+ bits == 128 &&
+ port_min == port_max) {
+ /* Okay, this is one we can understand. Use it and ignore
+ any potential more addresses in list. */
+ tor_addr_copy(addr_out, &a);
+ *port_out = port_min;
+ ret = 1;
+ break;
+ }
+ } SMARTLIST_FOREACH_END(t);
+
+ return ret;
+}
+
/** Helper function: reads a single router entry from *<b>s</b> ...
* *<b>end</b>. Mallocs a new router and returns it if all goes well, else
* returns NULL. If <b>cache_copy</b> is true, duplicate the contents of
@@ -1390,8 +1185,7 @@ router_parse_entry_from_string(const char *s, const char *end,
log_warn(LD_DIR,"Router nickname is invalid");
goto err;
}
- router->address = tor_strdup(tok->args[1]);
- if (!tor_inet_aton(router->address, &in)) {
+ if (!tor_inet_aton(tok->args[1], &in)) {
log_warn(LD_DIR,"Router address is not an IP address.");
goto err;
}
@@ -1471,6 +1265,17 @@ router_parse_entry_from_string(const char *s, const char *end,
router->onion_pkey = tok->key;
tok->key = NULL; /* Prevent free */
+ if ((tok = find_opt_by_keyword(tokens, K_ONION_KEY_NTOR))) {
+ curve25519_public_key_t k;
+ tor_assert(tok->n_args >= 1);
+ if (curve25519_public_from_base64(&k, tok->args[0]) < 0) {
+ log_warn(LD_DIR, "Bogus ntor-onion-key in routerinfo");
+ goto err;
+ }
+ router->onion_curve25519_pkey =
+ tor_memdup(&k, sizeof(curve25519_public_key_t));
+ }
+
tok = find_by_keyword(tokens, K_SIGNING_KEY);
router->identity_pkey = tok->key;
tok->key = NULL; /* Prevent free */
@@ -1513,21 +1318,8 @@ router_parse_entry_from_string(const char *s, const char *end,
{
smartlist_t *or_addresses = find_all_by_keyword(tokens, K_OR_ADDRESS);
if (or_addresses) {
- SMARTLIST_FOREACH_BEGIN(or_addresses, directory_token_t *, t) {
- tor_addr_t a;
- maskbits_t bits;
- uint16_t port_min, port_max;
- /* XXXX Prop186 the full spec allows much more than this. */
- if (tor_addr_parse_mask_ports(t->args[0], &a, &bits, &port_min,
- &port_max) == AF_INET6 &&
- bits == 128 &&
- port_min == port_max) {
- /* Okay, this is one we can understand. */
- tor_addr_copy(&router->ipv6_addr, &a);
- router->ipv6_orport = port_min;
- break;
- }
- } SMARTLIST_FOREACH_END(t);
+ find_single_ipv6_orport(or_addresses, &router->ipv6_addr,
+ &router->ipv6_orport);
smartlist_free(or_addresses);
}
}
@@ -1542,7 +1334,18 @@ router_parse_entry_from_string(const char *s, const char *end,
goto err;
});
policy_expand_private(&router->exit_policy);
- if (policy_is_reject_star(router->exit_policy))
+
+ if ((tok = find_opt_by_keyword(tokens, K_IPV6_POLICY)) && tok->n_args) {
+ router->ipv6_exit_policy = parse_short_policy(tok->args[0]);
+ if (! router->ipv6_exit_policy) {
+ log_warn(LD_DIR , "Error in ipv6-policy %s", escaped(tok->args[0]));
+ goto err;
+ }
+ }
+
+ if (policy_is_reject_star(router->exit_policy, AF_INET) &&
+ (!router->ipv6_exit_policy ||
+ short_policy_is_reject_star(router->ipv6_exit_policy)))
router->policy_is_reject_star = 1;
if ((tok = find_opt_by_keyword(tokens, K_FAMILY)) && tok->n_args) {
@@ -1669,7 +1472,7 @@ extrainfo_parse_entry_from_string(const char *s, const char *end,
extrainfo = tor_malloc_zero(sizeof(extrainfo_t));
extrainfo->cache_info.is_extrainfo = 1;
if (cache_copy)
- extrainfo->cache_info.signed_descriptor_body = tor_strndup(s, end-s);
+ extrainfo->cache_info.signed_descriptor_body = tor_memdup_nulterm(s,end-s);
extrainfo->cache_info.signed_descriptor_len = end-s;
memcpy(extrainfo->cache_info.signed_descriptor_digest, digest, DIGEST_LEN);
@@ -1877,7 +1680,6 @@ authority_cert_parse_from_string(const char *s, const char **end_of_string)
log_debug(LD_DIR, "We already checked the signature on this "
"certificate; no need to do so again.");
found = 1;
- cert->is_cross_certified = old_cert->is_cross_certified;
}
}
if (!found) {
@@ -1886,18 +1688,14 @@ authority_cert_parse_from_string(const char *s, const char **end_of_string)
goto err;
}
- if ((tok = find_opt_by_keyword(tokens, K_DIR_KEY_CROSSCERT))) {
- /* XXXX Once all authorities generate cross-certified certificates,
- * make this field mandatory. */
- if (check_signature_token(cert->cache_info.identity_digest,
- DIGEST_LEN,
- tok,
- cert->signing_key,
- CST_NO_CHECK_OBJTYPE,
- "key cross-certification")) {
- goto err;
- }
- cert->is_cross_certified = 1;
+ tok = find_by_keyword(tokens, K_DIR_KEY_CROSSCERT);
+ if (check_signature_token(cert->cache_info.identity_digest,
+ DIGEST_LEN,
+ tok,
+ cert->signing_key,
+ CST_NO_CHECK_OBJTYPE,
+ "key cross-certification")) {
+ goto err;
}
}
@@ -2060,6 +1858,14 @@ routerstatus_parse_entry_from_string(memarea_t *area,
rs->dir_port = (uint16_t) tor_parse_long(tok->args[7+offset],
10,0,65535,NULL,NULL);
+ {
+ smartlist_t *a_lines = find_all_by_keyword(tokens, K_A);
+ if (a_lines) {
+ find_single_ipv6_orport(a_lines, &rs->ipv6_addr, &rs->ipv6_orport);
+ smartlist_free(a_lines);
+ }
+ }
+
tok = find_opt_by_keyword(tokens, K_S);
if (tok && vote) {
int i;
@@ -2067,7 +1873,7 @@ routerstatus_parse_entry_from_string(memarea_t *area,
for (i=0; i < tok->n_args; ++i) {
int p = smartlist_string_pos(vote->known_flags, tok->args[i]);
if (p >= 0) {
- vote_rs->flags |= (1<<p);
+ vote_rs->flags |= (U64_LITERAL(1)<<p);
} else {
log_warn(LD_DIR, "Flags line had a flag %s not listed in known_flags.",
escaped(tok->args[i]));
@@ -2089,8 +1895,6 @@ routerstatus_parse_entry_from_string(memarea_t *area,
rs->is_named = 1;
else if (!strcmp(tok->args[i], "Valid"))
rs->is_valid = 1;
- else if (!strcmp(tok->args[i], "V2Dir"))
- rs->is_v2_dir = 1;
else if (!strcmp(tok->args[i], "Guard"))
rs->is_possible_guard = 1;
else if (!strcmp(tok->args[i], "BadExit"))
@@ -2112,24 +1916,15 @@ routerstatus_parse_entry_from_string(memarea_t *area,
tor_assert(tok->n_args == 1);
rs->version_known = 1;
if (strcmpstart(tok->args[0], "Tor ")) {
- rs->version_supports_begindir = 1;
- rs->version_supports_extrainfo_upload = 1;
- rs->version_supports_conditional_consensus = 1;
rs->version_supports_microdesc_cache = 1;
rs->version_supports_optimistic_data = 1;
} else {
- rs->version_supports_begindir =
- tor_version_as_new_as(tok->args[0], "0.2.0.1-alpha");
- rs->version_supports_extrainfo_upload =
- tor_version_as_new_as(tok->args[0], "0.2.0.0-alpha-dev (r10070)");
- rs->version_supports_v3_dir =
- tor_version_as_new_as(tok->args[0], "0.2.0.8-alpha");
- rs->version_supports_conditional_consensus =
- tor_version_as_new_as(tok->args[0], "0.2.1.1-alpha");
rs->version_supports_microdesc_cache =
tor_version_supports_microdescriptors(tok->args[0]);
rs->version_supports_optimistic_data =
tor_version_as_new_as(tok->args[0], "0.2.3.1-alpha");
+ rs->version_supports_extend2_cells =
+ tor_version_as_new_as(tok->args[0], "0.2.4.8-alpha");
}
if (vote_rs) {
vote_rs->version = tor_strdup(tok->args[0]);
@@ -2142,17 +1937,18 @@ routerstatus_parse_entry_from_string(memarea_t *area,
for (i=0; i < tok->n_args; ++i) {
if (!strcmpstart(tok->args[i], "Bandwidth=")) {
int ok;
- rs->bandwidth = (uint32_t)tor_parse_ulong(strchr(tok->args[i], '=')+1,
- 10, 0, UINT32_MAX,
- &ok, NULL);
+ rs->bandwidth_kb =
+ (uint32_t)tor_parse_ulong(strchr(tok->args[i], '=')+1,
+ 10, 0, UINT32_MAX,
+ &ok, NULL);
if (!ok) {
log_warn(LD_DIR, "Invalid Bandwidth %s", escaped(tok->args[i]));
goto err;
}
rs->has_bandwidth = 1;
- } else if (!strcmpstart(tok->args[i], "Measured=")) {
+ } else if (!strcmpstart(tok->args[i], "Measured=") && vote_rs) {
int ok;
- rs->measured_bw =
+ vote_rs->measured_bw_kb =
(uint32_t)tor_parse_ulong(strchr(tok->args[i], '=')+1,
10, 0, UINT32_MAX, &ok, NULL);
if (!ok) {
@@ -2160,7 +1956,10 @@ routerstatus_parse_entry_from_string(memarea_t *area,
escaped(tok->args[i]));
goto err;
}
- rs->has_measured_bw = 1;
+ vote_rs->has_measured_bw = 1;
+ vote->has_measured_bws = 1;
+ } else if (!strcmpstart(tok->args[i], "Unmeasured=1")) {
+ rs->bw_is_unmeasured = 1;
}
}
}
@@ -2203,7 +2002,7 @@ routerstatus_parse_entry_from_string(memarea_t *area,
}
} else {
log_info(LD_BUG, "Found an entry in networkstatus with no "
- "microdescriptor digest. (Router %s=%s at %s:%d.)",
+ "microdescriptor digest. (Router %s ($%s) at %s:%d.)",
rs->nickname, hex_str(rs->identity_digest, DIGEST_LEN),
fmt_addr32(rs->addr), rs->or_port);
}
@@ -2230,199 +2029,17 @@ routerstatus_parse_entry_from_string(memarea_t *area,
return rs;
}
-/** Helper to sort a smartlist of pointers to routerstatus_t */
int
-compare_routerstatus_entries(const void **_a, const void **_b)
-{
- const routerstatus_t *a = *_a, *b = *_b;
- return fast_memcmp(a->identity_digest, b->identity_digest, DIGEST_LEN);
-}
-
-/** Helper: used in call to _smartlist_uniq to clear out duplicate entries. */
-static void
-_free_duplicate_routerstatus_entry(void *e)
+compare_vote_routerstatus_entries(const void **_a, const void **_b)
{
- log_warn(LD_DIR,
- "Network-status has two entries for the same router. "
- "Dropping one.");
- routerstatus_free(e);
-}
-
-/** Given a v2 network-status object in <b>s</b>, try to
- * parse it and return the result. Return NULL on failure. Check the
- * signature of the network status, but do not (yet) check the signing key for
- * authority.
- */
-networkstatus_v2_t *
-networkstatus_v2_parse_from_string(const char *s)
-{
- const char *eos, *s_dup = s;
- smartlist_t *tokens = smartlist_new();
- smartlist_t *footer_tokens = smartlist_new();
- networkstatus_v2_t *ns = NULL;
- char ns_digest[DIGEST_LEN];
- char tmp_digest[DIGEST_LEN];
- struct in_addr in;
- directory_token_t *tok;
- int i;
- memarea_t *area = NULL;
-
- if (router_get_networkstatus_v2_hash(s, ns_digest)) {
- log_warn(LD_DIR, "Unable to compute digest of network-status");
- goto err;
- }
-
- area = memarea_new();
- eos = find_start_of_next_routerstatus(s);
- if (tokenize_string(area, s, eos, tokens, netstatus_token_table,0)) {
- log_warn(LD_DIR, "Error tokenizing network-status header.");
- goto err;
- }
- ns = tor_malloc_zero(sizeof(networkstatus_v2_t));
- memcpy(ns->networkstatus_digest, ns_digest, DIGEST_LEN);
-
- tok = find_by_keyword(tokens, K_NETWORK_STATUS_VERSION);
- tor_assert(tok->n_args >= 1);
- if (strcmp(tok->args[0], "2")) {
- log_warn(LD_BUG, "Got a non-v2 networkstatus. Version was "
- "%s", escaped(tok->args[0]));
- goto err;
- }
-
- tok = find_by_keyword(tokens, K_DIR_SOURCE);
- tor_assert(tok->n_args >= 3);
- ns->source_address = tor_strdup(tok->args[0]);
- if (tor_inet_aton(tok->args[1], &in) == 0) {
- log_warn(LD_DIR, "Error parsing network-status source address %s",
- escaped(tok->args[1]));
- goto err;
- }
- ns->source_addr = ntohl(in.s_addr);
- ns->source_dirport =
- (uint16_t) tor_parse_long(tok->args[2],10,0,65535,NULL,NULL);
- if (ns->source_dirport == 0) {
- log_warn(LD_DIR, "Directory source without dirport; skipping.");
- goto err;
- }
-
- tok = find_by_keyword(tokens, K_FINGERPRINT);
- tor_assert(tok->n_args);
- if (base16_decode(ns->identity_digest, DIGEST_LEN, tok->args[0],
- strlen(tok->args[0]))) {
- log_warn(LD_DIR, "Couldn't decode networkstatus fingerprint %s",
- escaped(tok->args[0]));
- goto err;
- }
-
- if ((tok = find_opt_by_keyword(tokens, K_CONTACT))) {
- tor_assert(tok->n_args);
- ns->contact = tor_strdup(tok->args[0]);
- }
-
- tok = find_by_keyword(tokens, K_DIR_SIGNING_KEY);
- tor_assert(tok->key);
- ns->signing_key = tok->key;
- tok->key = NULL;
-
- if (crypto_pk_get_digest(ns->signing_key, tmp_digest)<0) {
- log_warn(LD_DIR, "Couldn't compute signing key digest");
- goto err;
- }
- if (tor_memneq(tmp_digest, ns->identity_digest, DIGEST_LEN)) {
- log_warn(LD_DIR,
- "network-status fingerprint did not match dir-signing-key");
- goto err;
- }
-
- if ((tok = find_opt_by_keyword(tokens, K_DIR_OPTIONS))) {
- for (i=0; i < tok->n_args; ++i) {
- if (!strcmp(tok->args[i], "Names"))
- ns->binds_names = 1;
- if (!strcmp(tok->args[i], "Versions"))
- ns->recommends_versions = 1;
- if (!strcmp(tok->args[i], "BadExits"))
- ns->lists_bad_exits = 1;
- if (!strcmp(tok->args[i], "BadDirectories"))
- ns->lists_bad_directories = 1;
- }
- }
-
- if (ns->recommends_versions) {
- if (!(tok = find_opt_by_keyword(tokens, K_CLIENT_VERSIONS))) {
- log_warn(LD_DIR, "Missing client-versions on versioning directory");
- goto err;
- }
- ns->client_versions = tor_strdup(tok->args[0]);
-
- if (!(tok = find_opt_by_keyword(tokens, K_SERVER_VERSIONS)) ||
- tok->n_args<1) {
- log_warn(LD_DIR, "Missing server-versions on versioning directory");
- goto err;
- }
- ns->server_versions = tor_strdup(tok->args[0]);
- }
-
- tok = find_by_keyword(tokens, K_PUBLISHED);
- tor_assert(tok->n_args == 1);
- if (parse_iso_time(tok->args[0], &ns->published_on) < 0) {
- goto err;
- }
-
- ns->entries = smartlist_new();
- s = eos;
- SMARTLIST_FOREACH(tokens, directory_token_t *, t, token_clear(t));
- smartlist_clear(tokens);
- memarea_clear(area);
- while (!strcmpstart(s, "r ")) {
- routerstatus_t *rs;
- if ((rs = routerstatus_parse_entry_from_string(area, &s, tokens,
- NULL, NULL, 0, 0)))
- smartlist_add(ns->entries, rs);
- }
- smartlist_sort(ns->entries, compare_routerstatus_entries);
- smartlist_uniq(ns->entries, compare_routerstatus_entries,
- _free_duplicate_routerstatus_entry);
-
- if (tokenize_string(area,s, NULL, footer_tokens, dir_footer_token_table,0)) {
- log_warn(LD_DIR, "Error tokenizing network-status footer.");
- goto err;
- }
- if (smartlist_len(footer_tokens) < 1) {
- log_warn(LD_DIR, "Too few items in network-status footer.");
- goto err;
- }
- tok = smartlist_get(footer_tokens, smartlist_len(footer_tokens)-1);
- if (tok->tp != K_DIRECTORY_SIGNATURE) {
- log_warn(LD_DIR,
- "Expected network-status footer to end with a signature.");
- goto err;
- }
-
- note_crypto_pk_op(VERIFY_DIR);
- if (check_signature_token(ns_digest, DIGEST_LEN, tok, ns->signing_key, 0,
- "network-status") < 0)
- goto err;
-
- goto done;
- err:
- dump_desc(s_dup, "v2 networkstatus");
- networkstatus_v2_free(ns);
- ns = NULL;
- done:
- SMARTLIST_FOREACH(tokens, directory_token_t *, t, token_clear(t));
- smartlist_free(tokens);
- SMARTLIST_FOREACH(footer_tokens, directory_token_t *, t, token_clear(t));
- smartlist_free(footer_tokens);
- if (area) {
- DUMP_AREA(area, "v2 networkstatus");
- memarea_drop_all(area);
- }
- return ns;
+ const vote_routerstatus_t *a = *_a, *b = *_b;
+ return fast_memcmp(a->status.identity_digest, b->status.identity_digest,
+ DIGEST_LEN);
}
/** Verify the bandwidth weights of a network status document */
int
-networkstatus_verify_bw_weights(networkstatus_t *ns)
+networkstatus_verify_bw_weights(networkstatus_t *ns, int consensus_method)
{
int64_t weight_scale;
int64_t G=0, M=0, E=0, D=0, T=0;
@@ -2431,7 +2048,7 @@ networkstatus_verify_bw_weights(networkstatus_t *ns)
const char *casename = NULL;
int valid = 1;
- weight_scale = circuit_build_times_get_bw_scale(ns);
+ weight_scale = networkstatus_get_weight_scale_param(ns);
Wgg = networkstatus_get_bw_weight(ns, "Wgg", -1);
Wgm = networkstatus_get_bw_weight(ns, "Wgm", -1);
Wgd = networkstatus_get_bw_weight(ns, "Wgd", -1);
@@ -2508,24 +2125,31 @@ networkstatus_verify_bw_weights(networkstatus_t *ns)
// Then, gather G, M, E, D, T to determine case
SMARTLIST_FOREACH_BEGIN(ns->routerstatus_list, routerstatus_t *, rs) {
+ int is_exit = 0;
+ if (consensus_method >= MIN_METHOD_TO_CUT_BADEXIT_WEIGHT) {
+ /* Bug #2203: Don't count bad exits as exits for balancing */
+ is_exit = rs->is_exit && !rs->is_bad_exit;
+ } else {
+ is_exit = rs->is_exit;
+ }
if (rs->has_bandwidth) {
- T += rs->bandwidth;
- if (rs->is_exit && rs->is_possible_guard) {
- D += rs->bandwidth;
- Gtotal += Wgd*rs->bandwidth;
- Mtotal += Wmd*rs->bandwidth;
- Etotal += Wed*rs->bandwidth;
- } else if (rs->is_exit) {
- E += rs->bandwidth;
- Mtotal += Wme*rs->bandwidth;
- Etotal += Wee*rs->bandwidth;
+ T += rs->bandwidth_kb;
+ if (is_exit && rs->is_possible_guard) {
+ D += rs->bandwidth_kb;
+ Gtotal += Wgd*rs->bandwidth_kb;
+ Mtotal += Wmd*rs->bandwidth_kb;
+ Etotal += Wed*rs->bandwidth_kb;
+ } else if (is_exit) {
+ E += rs->bandwidth_kb;
+ Mtotal += Wme*rs->bandwidth_kb;
+ Etotal += Wee*rs->bandwidth_kb;
} else if (rs->is_possible_guard) {
- G += rs->bandwidth;
- Gtotal += Wgg*rs->bandwidth;
- Mtotal += Wmg*rs->bandwidth;
+ G += rs->bandwidth_kb;
+ Gtotal += Wgg*rs->bandwidth_kb;
+ Mtotal += Wmg*rs->bandwidth_kb;
} else {
- M += rs->bandwidth;
- Mtotal += Wmm*rs->bandwidth;
+ M += rs->bandwidth_kb;
+ Mtotal += Wmm*rs->bandwidth_kb;
}
} else {
log_warn(LD_BUG, "Missing consensus bandwidth for router %s",
@@ -2981,6 +2605,16 @@ networkstatus_parse_vote_from_string(const char *s, const char **eos_out,
log_warn(LD_DIR, "known-flags not in order");
goto err;
}
+ if (ns->type != NS_TYPE_CONSENSUS &&
+ smartlist_len(ns->known_flags) > MAX_KNOWN_FLAGS_IN_VOTE) {
+ /* If we allowed more than 64 flags in votes, then parsing them would make
+ * us invoke undefined behavior whenever we used 1<<flagnum to do a
+ * bit-shift. This is only for votes and opinions: consensus users don't
+ * care about flags they don't recognize, and so don't build a bitfield
+ * for them. */
+ log_warn(LD_DIR, "Too many known-flags in consensus vote or opinion");
+ goto err;
+ }
tok = find_opt_by_keyword(tokens, K_PARAMS);
if (tok) {
@@ -3053,6 +2687,14 @@ networkstatus_parse_vote_from_string(const char *s, const char **eos_out,
log_warn(LD_DIR,"Mismatch between identities in certificate and vote");
goto err;
}
+ if (ns->type != NS_TYPE_CONSENSUS) {
+ if (authority_cert_is_blacklisted(ns->cert)) {
+ log_warn(LD_DIR, "Rejecting vote signature made with blacklisted "
+ "signing key %s",
+ hex_str(ns->cert->signing_key_digest, DIGEST_LEN));
+ goto err;
+ }
+ }
voter->address = tor_strdup(tok->args[2]);
if (!tor_inet_aton(tok->args[3], &in)) {
log_warn(LD_DIR, "Error decoding IP address %s in network-status.",
@@ -3599,6 +3241,10 @@ networkstatus_parse_detached_signatures(const char *s, const char *eos)
/** Parse the addr policy in the string <b>s</b> and return it. If
* assume_action is nonnegative, then insert its action (ADDR_POLICY_ACCEPT or
* ADDR_POLICY_REJECT) for items that specify no action.
+ *
+ * The addr_policy_t returned by this function can have its address set to
+ * AF_UNSPEC for '*'. Use policy_expand_unspec() to turn this into a pair
+ * of AF_INET and AF_INET6 items.
*/
addr_policy_t *
router_parse_addr_policy_item_from_string(const char *s, int assume_action)
@@ -3628,7 +3274,7 @@ router_parse_addr_policy_item_from_string(const char *s, int assume_action)
eos = cp + strlen(cp);
area = memarea_new();
tok = get_next_token(area, &cp, eos, routerdesc_token_table);
- if (tok->tp == _ERR) {
+ if (tok->tp == ERR_) {
log_warn(LD_DIR, "Error reading address policy: %s", tok->error);
goto err;
}
@@ -3638,7 +3284,7 @@ router_parse_addr_policy_item_from_string(const char *s, int assume_action)
goto err;
}
- r = router_parse_addr_policy(tok);
+ r = router_parse_addr_policy(tok, TAPMP_EXTENDED_STAR);
goto done;
err:
r = NULL;
@@ -3657,7 +3303,7 @@ static int
router_add_exit_policy(routerinfo_t *router, directory_token_t *tok)
{
addr_policy_t *newe;
- newe = router_parse_addr_policy(tok);
+ newe = router_parse_addr_policy(tok, 0);
if (!newe)
return -1;
if (! router->exit_policy)
@@ -3682,7 +3328,7 @@ router_add_exit_policy(routerinfo_t *router, directory_token_t *tok)
/** Given a K_ACCEPT or K_REJECT token and a router, create and return
* a new exit_policy_t corresponding to the token. */
static addr_policy_t *
-router_parse_addr_policy(directory_token_t *tok)
+router_parse_addr_policy(directory_token_t *tok, unsigned fmt_flags)
{
addr_policy_t newe;
char *arg;
@@ -3704,7 +3350,7 @@ router_parse_addr_policy(directory_token_t *tok)
else
newe.policy_type = ADDR_POLICY_ACCEPT;
- if (tor_addr_parse_mask_ports(arg, &newe.addr, &newe.maskbits,
+ if (tor_addr_parse_mask_ports(arg, fmt_flags, &newe.addr, &newe.maskbits,
&newe.prt_min, &newe.prt_max) < 0) {
log_warn(LD_DIR,"Couldn't parse line %s. Dropping", escaped(arg));
return NULL;
@@ -3781,14 +3427,14 @@ token_clear(directory_token_t *tok)
STMT_BEGIN \
if (tok) token_clear(tok); \
tok = ALLOC_ZERO(sizeof(directory_token_t)); \
- tok->tp = _ERR; \
+ tok->tp = ERR_; \
tok->error = STRDUP(msg); \
goto done_tokenizing; \
STMT_END
/** Helper: make sure that the token <b>tok</b> with keyword <b>kwd</b> obeys
* the object syntax of <b>o_syn</b>. Allocate all storage in <b>area</b>.
- * Return <b>tok</b> on success, or a new _ERR token if the token didn't
+ * Return <b>tok</b> on success, or a new ERR_ token if the token didn't
* conform to the syntax we wanted.
**/
static INLINE directory_token_t *
@@ -3907,7 +3553,7 @@ get_next_token(memarea_t *area,
tor_assert(area);
tok = ALLOC_ZERO(sizeof(directory_token_t));
- tok->tp = _ERR;
+ tok->tp = ERR_;
/* Set *s to first token, eol to end-of-line, next to after first token */
*s = eat_whitespace_eos(*s, eos); /* eat multi-line whitespace */
@@ -3964,10 +3610,10 @@ get_next_token(memarea_t *area,
}
}
- if (tok->tp == _ERR) {
+ if (tok->tp == ERR_) {
/* No keyword matched; call it an "K_opt" or "A_unrecognized" */
if (**s == '@')
- tok->tp = _A_UNKNOWN;
+ tok->tp = A_UNKNOWN_;
else
tok->tp = K_OPT;
tok->args = ALLOC(sizeof(char*));
@@ -4006,7 +3652,7 @@ get_next_token(memarea_t *area,
if ((size_t)(eol-next) != 9+obname_len+5 ||
strcmp_len(next+9, tok->object_type, obname_len) ||
strcmp_len(eol-5, "-----", 5)) {
- snprintf(ebuf, sizeof(ebuf), "Malformed object: mismatched end tag %s",
+ tor_snprintf(ebuf, sizeof(ebuf), "Malformed object: mismatched end tag %s",
tok->object_type);
ebuf[sizeof(ebuf)-1] = '\0';
RET_ERR(ebuf);
@@ -4057,23 +3703,30 @@ tokenize_string(memarea_t *area,
{
const char **s;
directory_token_t *tok = NULL;
- int counts[_NIL];
+ int counts[NIL_];
int i;
int first_nonannotation;
int prev_len = smartlist_len(out);
tor_assert(area);
s = &start;
- if (!end)
+ if (!end) {
end = start+strlen(start);
- for (i = 0; i < _NIL; ++i)
+ } else {
+ /* it's only meaningful to check for nuls if we got an end-of-string ptr */
+ if (memchr(start, '\0', end-start)) {
+ log_warn(LD_DIR, "parse error: internal NUL character.");
+ return -1;
+ }
+ }
+ for (i = 0; i < NIL_; ++i)
counts[i] = 0;
SMARTLIST_FOREACH(out, const directory_token_t *, t, ++counts[t->tp]);
- while (*s < end && (!tok || tok->tp != _EOF)) {
+ while (*s < end && (!tok || tok->tp != EOF_)) {
tok = get_next_token(area, s, end, table);
- if (tok->tp == _ERR) {
+ if (tok->tp == ERR_) {
log_warn(LD_DIR, "parse error: %s", tok->error);
token_clear(tok);
return -1;
@@ -4163,7 +3816,7 @@ find_opt_by_keyword(smartlist_t *s, directory_keyword keyword)
* with an assert if no such keyword is found.
*/
static directory_token_t *
-_find_by_keyword(smartlist_t *s, directory_keyword keyword,
+find_by_keyword_(smartlist_t *s, directory_keyword keyword,
const char *keyword_as_string)
{
directory_token_t *tok = find_opt_by_keyword(s, keyword);
@@ -4251,8 +3904,8 @@ router_get_hash_impl_helper(const char *s, size_t s_len,
/** Compute the digest of the substring of <b>s</b> taken from the first
* occurrence of <b>start_str</b> through the first instance of c after the
- * first subsequent occurrence of <b>end_str</b>; store the 20-byte result in
- * <b>digest</b>; return 0 on success.
+ * first subsequent occurrence of <b>end_str</b>; store the 20-byte or 32-byte
+ * result in <b>digest</b>; return 0 on success.
*
* If no such substring exists, return -1.
*/
@@ -4355,12 +4008,17 @@ find_start_of_next_microdesc(const char *s, const char *eos)
/** Parse as many microdescriptors as are found from the string starting at
* <b>s</b> and ending at <b>eos</b>. If allow_annotations is set, read any
- * annotations we recognize and ignore ones we don't. If <b>copy_body</b> is
- * true, then strdup the bodies of the microdescriptors. Return all newly
+ * annotations we recognize and ignore ones we don't.
+ *
+ * If <b>saved_location</b> isn't SAVED_IN_CACHE, make a local copy of each
+ * descriptor in the body field of each microdesc_t.
+ *
+ * Return all newly
* parsed microdescriptors in a newly allocated smartlist_t. */
smartlist_t *
microdescs_parse_from_string(const char *s, const char *eos,
- int allow_annotations, int copy_body)
+ int allow_annotations,
+ saved_location_t where)
{
smartlist_t *tokens;
smartlist_t *result;
@@ -4369,6 +4027,7 @@ microdescs_parse_from_string(const char *s, const char *eos,
const char *start = s;
const char *start_of_next_microdesc;
int flags = allow_annotations ? TS_ANNOTATIONS_OK : 0;
+ const int copy_body = (where != SAVED_IN_CACHE);
directory_token_t *tok;
@@ -4398,8 +4057,9 @@ microdescs_parse_from_string(const char *s, const char *eos,
tor_assert(cp);
md->bodylen = start_of_next_microdesc - cp;
+ md->saved_location = where;
if (copy_body)
- md->body = tor_strndup(cp, md->bodylen);
+ md->body = tor_memdup_nulterm(cp, md->bodylen);
else
md->body = (char*)cp;
md->off = cp - start;
@@ -4421,6 +4081,25 @@ microdescs_parse_from_string(const char *s, const char *eos,
md->onion_pkey = tok->key;
tok->key = NULL;
+ if ((tok = find_opt_by_keyword(tokens, K_ONION_KEY_NTOR))) {
+ curve25519_public_key_t k;
+ tor_assert(tok->n_args >= 1);
+ if (curve25519_public_from_base64(&k, tok->args[0]) < 0) {
+ log_warn(LD_DIR, "Bogus ntor-onion-key in microdesc");
+ goto next;
+ }
+ md->onion_curve25519_pkey =
+ tor_memdup(&k, sizeof(curve25519_public_key_t));
+ }
+
+ {
+ smartlist_t *a_lines = find_all_by_keyword(tokens, K_A);
+ if (a_lines) {
+ find_single_ipv6_orport(a_lines, &md->ipv6_addr, &md->ipv6_orport);
+ smartlist_free(a_lines);
+ }
+ }
+
if ((tok = find_opt_by_keyword(tokens, K_FAMILY))) {
int i;
md->family = smartlist_new();
@@ -4437,6 +4116,9 @@ microdescs_parse_from_string(const char *s, const char *eos,
if ((tok = find_opt_by_keyword(tokens, K_P))) {
md->exit_policy = parse_short_policy(tok->args[0]);
}
+ if ((tok = find_opt_by_keyword(tokens, K_P6))) {
+ md->ipv6_exit_policy = parse_short_policy(tok->args[0]);
+ }
crypto_digest256(md->digest, md->body, md->bodylen, DIGEST_SHA256);
@@ -4447,11 +4129,13 @@ microdescs_parse_from_string(const char *s, const char *eos,
microdesc_free(md);
md = NULL;
+ SMARTLIST_FOREACH(tokens, directory_token_t *, t, token_clear(t));
memarea_clear(area);
smartlist_clear(tokens);
s = start_of_next_microdesc;
}
+ SMARTLIST_FOREACH(tokens, directory_token_t *, t, token_clear(t));
memarea_drop_all(area);
smartlist_free(tokens);
@@ -4654,7 +4338,7 @@ tor_version_same_series(tor_version_t *a, tor_version_t *b)
* if _a precedes _b, 1 if _b precedes _a, and 0 if they are equivalent.
* Used to sort a list of versions. */
static int
-_compare_tor_version_str_ptr(const void **_a, const void **_b)
+compare_tor_version_str_ptr_(const void **_a, const void **_b)
{
const char *a = *_a, *b = *_b;
int ca, cb;
@@ -4678,10 +4362,10 @@ _compare_tor_version_str_ptr(const void **_a, const void **_b)
void
sort_version_list(smartlist_t *versions, int remove_duplicates)
{
- smartlist_sort(versions, _compare_tor_version_str_ptr);
+ smartlist_sort(versions, compare_tor_version_str_ptr_);
if (remove_duplicates)
- smartlist_uniq(versions, _compare_tor_version_str_ptr, _tor_free);
+ smartlist_uniq(versions, compare_tor_version_str_ptr_, tor_free_);
}
/** Parse and validate the ASCII-encoded v2 descriptor in <b>desc</b>,
diff --git a/src/or/routerparse.h b/src/or/routerparse.h
index c6382a7f6..5d5d9e59e 100644
--- a/src/or/routerparse.h
+++ b/src/or/routerparse.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,18 +9,17 @@
* \brief Header file for routerparse.c.
**/
-#ifndef _TOR_ROUTERPARSE_H
-#define _TOR_ROUTERPARSE_H
+#ifndef TOR_ROUTERPARSE_H
+#define TOR_ROUTERPARSE_H
int router_get_router_hash(const char *s, size_t s_len, char *digest);
int router_get_dir_hash(const char *s, char *digest);
-int router_get_runningrouters_hash(const char *s, char *digest);
-int router_get_networkstatus_v2_hash(const char *s, char *digest);
-int router_get_networkstatus_v3_hash(const char *s, char *digest,
- digest_algorithm_t algorithm);
int router_get_networkstatus_v3_hashes(const char *s, digests_t *digests);
int router_get_extrainfo_hash(const char *s, size_t s_len, char *digest);
#define DIROBJ_MAX_SIG_LEN 256
+char *router_get_dirobj_signature(const char *digest,
+ size_t digest_len,
+ crypto_pk_t *private_key);
int router_append_dirobj_signature(char *buf, size_t buf_len,
const char *digest,
size_t digest_len,
@@ -31,8 +30,6 @@ int router_parse_list_from_string(const char **s, const char *eos,
int is_extrainfo,
int allow_annotations,
const char *prepend_annotations);
-int router_parse_runningrouters(const char *str);
-int router_parse_directory(const char *str);
routerinfo_t *router_parse_entry_from_string(const char *s, const char *end,
int cache_copy,
@@ -53,9 +50,8 @@ void sort_version_list(smartlist_t *lst, int remove_duplicates);
void assert_addr_policy_ok(smartlist_t *t);
void dump_distinct_digest_count(int severity);
-int compare_routerstatus_entries(const void **_a, const void **_b);
-networkstatus_v2_t *networkstatus_v2_parse_from_string(const char *s);
-int networkstatus_verify_bw_weights(networkstatus_t *ns);
+int compare_vote_routerstatus_entries(const void **_a, const void **_b);
+int networkstatus_verify_bw_weights(networkstatus_t *ns, int);
networkstatus_t *networkstatus_parse_vote_from_string(const char *s,
const char **eos_out,
networkstatus_type_t ns_type);
@@ -64,7 +60,7 @@ ns_detached_signatures_t *networkstatus_parse_detached_signatures(
smartlist_t *microdescs_parse_from_string(const char *s, const char *eos,
int allow_annotations,
- int copy_body);
+ saved_location_t where);
authority_cert_t *authority_cert_parse_from_string(const char *s,
const char **end_of_string);
diff --git a/src/or/routerset.c b/src/or/routerset.c
new file mode 100644
index 000000000..7aee90d6d
--- /dev/null
+++ b/src/or/routerset.c
@@ -0,0 +1,433 @@
+/* Copyright (c) 2001 Matej Pfajfar.
+ * Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#include "or.h"
+#include "geoip.h"
+#include "nodelist.h"
+#include "policies.h"
+#include "router.h"
+#include "routerparse.h"
+#include "routerset.h"
+
+/** A routerset specifies constraints on a set of possible routerinfos, based
+ * on their names, identities, or addresses. It is optimized for determining
+ * whether a router is a member or not, in O(1+P) time, where P is the number
+ * of address policy constraints. */
+struct routerset_t {
+ /** A list of strings for the elements of the policy. Each string is either
+ * a nickname, a hexadecimal identity fingerprint, or an address policy. A
+ * router belongs to the set if its nickname OR its identity OR its address
+ * matches an entry here. */
+ smartlist_t *list;
+ /** A map from lowercase nicknames of routers in the set to (void*)1 */
+ strmap_t *names;
+ /** A map from identity digests routers in the set to (void*)1 */
+ digestmap_t *digests;
+ /** An address policy for routers in the set. For implementation reasons,
+ * a router belongs to the set if it is _rejected_ by this policy. */
+ smartlist_t *policies;
+
+ /** A human-readable description of what this routerset is for. Used in
+ * log messages. */
+ char *description;
+
+ /** A list of the country codes in this set. */
+ smartlist_t *country_names;
+ /** Total number of countries we knew about when we built <b>countries</b>.*/
+ int n_countries;
+ /** Bit array mapping the return value of geoip_get_country() to 1 iff the
+ * country is a member of this routerset. Note that we MUST call
+ * routerset_refresh_countries() whenever the geoip country list is
+ * reloaded. */
+ bitarray_t *countries;
+};
+
+/** Return a new empty routerset. */
+routerset_t *
+routerset_new(void)
+{
+ routerset_t *result = tor_malloc_zero(sizeof(routerset_t));
+ result->list = smartlist_new();
+ result->names = strmap_new();
+ result->digests = digestmap_new();
+ result->policies = smartlist_new();
+ result->country_names = smartlist_new();
+ return result;
+}
+
+/** If <b>c</b> is a country code in the form {cc}, return a newly allocated
+ * string holding the "cc" part. Else, return NULL. */
+static char *
+routerset_get_countryname(const char *c)
+{
+ char *country;
+
+ if (strlen(c) < 4 || c[0] !='{' || c[3] !='}')
+ return NULL;
+
+ country = tor_strndup(c+1, 2);
+ tor_strlower(country);
+ return country;
+}
+
+/** Update the routerset's <b>countries</b> bitarray_t. Called whenever
+ * the GeoIP IPv4 database is reloaded.
+ */
+void
+routerset_refresh_countries(routerset_t *target)
+{
+ int cc;
+ bitarray_free(target->countries);
+
+ if (!geoip_is_loaded(AF_INET)) {
+ target->countries = NULL;
+ target->n_countries = 0;
+ return;
+ }
+ target->n_countries = geoip_get_n_countries();
+ target->countries = bitarray_init_zero(target->n_countries);
+ SMARTLIST_FOREACH_BEGIN(target->country_names, const char *, country) {
+ cc = geoip_get_country(country);
+ if (cc >= 0) {
+ tor_assert(cc < target->n_countries);
+ bitarray_set(target->countries, cc);
+ } else {
+ log_warn(LD_CONFIG, "Country code '%s' is not recognized.",
+ country);
+ }
+ } SMARTLIST_FOREACH_END(country);
+}
+
+/** Parse the string <b>s</b> to create a set of routerset entries, and add
+ * them to <b>target</b>. In log messages, refer to the string as
+ * <b>description</b>. Return 0 on success, -1 on failure.
+ *
+ * Three kinds of elements are allowed in routersets: nicknames, IP address
+ * patterns, and fingerprints. They may be surrounded by optional space, and
+ * must be separated by commas.
+ */
+int
+routerset_parse(routerset_t *target, const char *s, const char *description)
+{
+ int r = 0;
+ int added_countries = 0;
+ char *countryname;
+ smartlist_t *list = smartlist_new();
+ smartlist_split_string(list, s, ",",
+ SPLIT_SKIP_SPACE | SPLIT_IGNORE_BLANK, 0);
+ SMARTLIST_FOREACH_BEGIN(list, char *, nick) {
+ addr_policy_t *p;
+ if (is_legal_hexdigest(nick)) {
+ char d[DIGEST_LEN];
+ if (*nick == '$')
+ ++nick;
+ log_debug(LD_CONFIG, "Adding identity %s to %s", nick, description);
+ base16_decode(d, sizeof(d), nick, HEX_DIGEST_LEN);
+ digestmap_set(target->digests, d, (void*)1);
+ } else if (is_legal_nickname(nick)) {
+ log_debug(LD_CONFIG, "Adding nickname %s to %s", nick, description);
+ strmap_set_lc(target->names, nick, (void*)1);
+ } else if ((countryname = routerset_get_countryname(nick)) != NULL) {
+ log_debug(LD_CONFIG, "Adding country %s to %s", nick,
+ description);
+ smartlist_add(target->country_names, countryname);
+ added_countries = 1;
+ } else if ((strchr(nick,'.') || strchr(nick, '*')) &&
+ (p = router_parse_addr_policy_item_from_string(
+ nick, ADDR_POLICY_REJECT))) {
+ log_debug(LD_CONFIG, "Adding address %s to %s", nick, description);
+ smartlist_add(target->policies, p);
+ } else {
+ log_warn(LD_CONFIG, "Entry '%s' in %s is malformed.", nick,
+ description);
+ r = -1;
+ tor_free(nick);
+ SMARTLIST_DEL_CURRENT(list, nick);
+ }
+ } SMARTLIST_FOREACH_END(nick);
+ policy_expand_unspec(&target->policies);
+ smartlist_add_all(target->list, list);
+ smartlist_free(list);
+ if (added_countries)
+ routerset_refresh_countries(target);
+ return r;
+}
+
+/** Add all members of the set <b>source</b> to <b>target</b>. */
+void
+routerset_union(routerset_t *target, const routerset_t *source)
+{
+ char *s;
+ tor_assert(target);
+ if (!source || !source->list)
+ return;
+ s = routerset_to_string(source);
+ routerset_parse(target, s, "other routerset");
+ tor_free(s);
+}
+
+/** Return true iff <b>set</b> lists only nicknames and digests, and includes
+ * no IP ranges or countries. */
+int
+routerset_is_list(const routerset_t *set)
+{
+ return smartlist_len(set->country_names) == 0 &&
+ smartlist_len(set->policies) == 0;
+}
+
+/** Return true iff we need a GeoIP IP-to-country database to make sense of
+ * <b>set</b>. */
+int
+routerset_needs_geoip(const routerset_t *set)
+{
+ return set && smartlist_len(set->country_names);
+}
+
+/** Return true iff there are no entries in <b>set</b>. */
+int
+routerset_is_empty(const routerset_t *set)
+{
+ return !set || smartlist_len(set->list) == 0;
+}
+
+/** Helper. Return true iff <b>set</b> contains a router based on the other
+ * provided fields. Return higher values for more specific subentries: a
+ * single router is more specific than an address range of routers, which is
+ * more specific in turn than a country code.
+ *
+ * (If country is -1, then we take the country
+ * from addr.) */
+static int
+routerset_contains(const routerset_t *set, const tor_addr_t *addr,
+ uint16_t orport,
+ const char *nickname, const char *id_digest,
+ country_t country)
+{
+ if (!set || !set->list)
+ return 0;
+ if (nickname && strmap_get_lc(set->names, nickname))
+ return 4;
+ if (id_digest && digestmap_get(set->digests, id_digest))
+ return 4;
+ if (addr && compare_tor_addr_to_addr_policy(addr, orport, set->policies)
+ == ADDR_POLICY_REJECTED)
+ return 3;
+ if (set->countries) {
+ if (country < 0 && addr)
+ country = geoip_get_country_by_addr(addr);
+
+ if (country >= 0 && country < set->n_countries &&
+ bitarray_is_set(set->countries, country))
+ return 2;
+ }
+ return 0;
+}
+
+/** If *<b>setp</b> includes at least one country code, or if
+ * <b>only_some_cc_set</b> is 0, add the ?? and A1 country codes to
+ * *<b>setp</b>, creating it as needed. Return true iff *<b>setp</b> changed.
+ */
+int
+routerset_add_unknown_ccs(routerset_t **setp, int only_if_some_cc_set)
+{
+ routerset_t *set;
+ int add_unknown, add_a1;
+ if (only_if_some_cc_set) {
+ if (!*setp || smartlist_len((*setp)->country_names) == 0)
+ return 0;
+ }
+ if (!*setp)
+ *setp = routerset_new();
+
+ set = *setp;
+
+ add_unknown = ! smartlist_contains_string_case(set->country_names, "??") &&
+ geoip_get_country("??") >= 0;
+ add_a1 = ! smartlist_contains_string_case(set->country_names, "a1") &&
+ geoip_get_country("A1") >= 0;
+
+ if (add_unknown) {
+ smartlist_add(set->country_names, tor_strdup("??"));
+ smartlist_add(set->list, tor_strdup("{??}"));
+ }
+ if (add_a1) {
+ smartlist_add(set->country_names, tor_strdup("a1"));
+ smartlist_add(set->list, tor_strdup("{a1}"));
+ }
+
+ if (add_unknown || add_a1) {
+ routerset_refresh_countries(set);
+ return 1;
+ }
+ return 0;
+}
+
+/** Return true iff we can tell that <b>ei</b> is a member of <b>set</b>. */
+int
+routerset_contains_extendinfo(const routerset_t *set, const extend_info_t *ei)
+{
+ return routerset_contains(set,
+ &ei->addr,
+ ei->port,
+ ei->nickname,
+ ei->identity_digest,
+ -1 /*country*/);
+}
+
+/** Return true iff <b>ri</b> is in <b>set</b>. If country is <b>-1</b>, we
+ * look up the country. */
+int
+routerset_contains_router(const routerset_t *set, const routerinfo_t *ri,
+ country_t country)
+{
+ tor_addr_t addr;
+ tor_addr_from_ipv4h(&addr, ri->addr);
+ return routerset_contains(set,
+ &addr,
+ ri->or_port,
+ ri->nickname,
+ ri->cache_info.identity_digest,
+ country);
+}
+
+/** Return true iff <b>rs</b> is in <b>set</b>. If country is <b>-1</b>, we
+ * look up the country. */
+int
+routerset_contains_routerstatus(const routerset_t *set,
+ const routerstatus_t *rs,
+ country_t country)
+{
+ tor_addr_t addr;
+ tor_addr_from_ipv4h(&addr, rs->addr);
+ return routerset_contains(set,
+ &addr,
+ rs->or_port,
+ rs->nickname,
+ rs->identity_digest,
+ country);
+}
+
+/** Return true iff <b>node</b> is in <b>set</b>. */
+int
+routerset_contains_node(const routerset_t *set, const node_t *node)
+{
+ if (node->rs)
+ return routerset_contains_routerstatus(set, node->rs, node->country);
+ else if (node->ri)
+ return routerset_contains_router(set, node->ri, node->country);
+ else
+ return 0;
+}
+
+/** Add every known node_t that is a member of <b>routerset</b> to
+ * <b>out</b>, but never add any that are part of <b>excludeset</b>.
+ * If <b>running_only</b>, only add the running ones. */
+void
+routerset_get_all_nodes(smartlist_t *out, const routerset_t *routerset,
+ const routerset_t *excludeset, int running_only)
+{
+ tor_assert(out);
+ if (!routerset || !routerset->list)
+ return;
+
+ if (routerset_is_list(routerset)) {
+ /* No routers are specified by type; all are given by name or digest.
+ * we can do a lookup in O(len(routerset)). */
+ SMARTLIST_FOREACH(routerset->list, const char *, name, {
+ const node_t *node = node_get_by_nickname(name, 1);
+ if (node) {
+ if (!running_only || node->is_running)
+ if (!routerset_contains_node(excludeset, node))
+ smartlist_add(out, (void*)node);
+ }
+ });
+ } else {
+ /* We need to iterate over the routerlist to get all the ones of the
+ * right kind. */
+ smartlist_t *nodes = nodelist_get_list();
+ SMARTLIST_FOREACH(nodes, const node_t *, node, {
+ if (running_only && !node->is_running)
+ continue;
+ if (routerset_contains_node(routerset, node) &&
+ !routerset_contains_node(excludeset, node))
+ smartlist_add(out, (void*)node);
+ });
+ }
+}
+
+/** Remove every node_t from <b>lst</b> that is in <b>routerset</b>. */
+void
+routerset_subtract_nodes(smartlist_t *lst, const routerset_t *routerset)
+{
+ tor_assert(lst);
+ if (!routerset)
+ return;
+ SMARTLIST_FOREACH(lst, const node_t *, node, {
+ if (routerset_contains_node(routerset, node)) {
+ //log_debug(LD_DIR, "Subtracting %s",r->nickname);
+ SMARTLIST_DEL_CURRENT(lst, node);
+ }
+ });
+}
+
+/** Return a new string that when parsed by routerset_parse_string() will
+ * yield <b>set</b>. */
+char *
+routerset_to_string(const routerset_t *set)
+{
+ if (!set || !set->list)
+ return tor_strdup("");
+ return smartlist_join_strings(set->list, ",", 0, NULL);
+}
+
+/** Helper: return true iff old and new are both NULL, or both non-NULL
+ * equal routersets. */
+int
+routerset_equal(const routerset_t *old, const routerset_t *new)
+{
+ if (routerset_is_empty(old) && routerset_is_empty(new)) {
+ /* Two empty sets are equal */
+ return 1;
+ } else if (routerset_is_empty(old) || routerset_is_empty(new)) {
+ /* An empty set is equal to nothing else. */
+ return 0;
+ }
+ tor_assert(old != NULL);
+ tor_assert(new != NULL);
+
+ if (smartlist_len(old->list) != smartlist_len(new->list))
+ return 0;
+
+ SMARTLIST_FOREACH(old->list, const char *, cp1, {
+ const char *cp2 = smartlist_get(new->list, cp1_sl_idx);
+ if (strcmp(cp1, cp2))
+ return 0;
+ });
+
+ return 1;
+}
+
+/** Free all storage held in <b>routerset</b>. */
+void
+routerset_free(routerset_t *routerset)
+{
+ if (!routerset)
+ return;
+
+ SMARTLIST_FOREACH(routerset->list, char *, cp, tor_free(cp));
+ smartlist_free(routerset->list);
+ SMARTLIST_FOREACH(routerset->policies, addr_policy_t *, p,
+ addr_policy_free(p));
+ smartlist_free(routerset->policies);
+ SMARTLIST_FOREACH(routerset->country_names, char *, cp, tor_free(cp));
+ smartlist_free(routerset->country_names);
+
+ strmap_free(routerset->names, NULL);
+ digestmap_free(routerset->digests, NULL);
+ bitarray_free(routerset->countries);
+ tor_free(routerset);
+}
+
diff --git a/src/or/routerset.h b/src/or/routerset.h
new file mode 100644
index 000000000..8261c7fb0
--- /dev/null
+++ b/src/or/routerset.h
@@ -0,0 +1,43 @@
+/* Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file routerlist.h
+ * \brief Header file for routerset.c
+ **/
+
+#ifndef TOR_ROUTERSET_H
+#define TOR_ROUTERSET_H
+
+routerset_t *routerset_new(void);
+void routerset_refresh_countries(routerset_t *rs);
+int routerset_parse(routerset_t *target, const char *s,
+ const char *description);
+void routerset_union(routerset_t *target, const routerset_t *source);
+int routerset_is_list(const routerset_t *set);
+int routerset_needs_geoip(const routerset_t *set);
+int routerset_is_empty(const routerset_t *set);
+int routerset_contains_router(const routerset_t *set, const routerinfo_t *ri,
+ country_t country);
+int routerset_contains_routerstatus(const routerset_t *set,
+ const routerstatus_t *rs,
+ country_t country);
+int routerset_contains_extendinfo(const routerset_t *set,
+ const extend_info_t *ei);
+
+int routerset_contains_node(const routerset_t *set, const node_t *node);
+void routerset_get_all_nodes(smartlist_t *out, const routerset_t *routerset,
+ const routerset_t *excludeset,
+ int running_only);
+int routerset_add_unknown_ccs(routerset_t **setp, int only_if_some_cc_set);
+void routerset_subtract_nodes(smartlist_t *out,
+ const routerset_t *routerset);
+
+char *routerset_to_string(const routerset_t *routerset);
+int routerset_equal(const routerset_t *old, const routerset_t *new);
+void routerset_free(routerset_t *routerset);
+
+#endif
+
diff --git a/src/or/statefile.c b/src/or/statefile.c
new file mode 100644
index 000000000..7b9998fc1
--- /dev/null
+++ b/src/or/statefile.c
@@ -0,0 +1,649 @@
+/* Copyright (c) 2001 Matej Pfajfar.
+ * Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#define STATEFILE_PRIVATE
+#include "or.h"
+#include "circuitstats.h"
+#include "config.h"
+#include "confparse.h"
+#include "entrynodes.h"
+#include "hibernate.h"
+#include "rephist.h"
+#include "router.h"
+#include "sandbox.h"
+#include "statefile.h"
+
+/** A list of state-file "abbreviations," for compatibility. */
+static config_abbrev_t state_abbrevs_[] = {
+ { "AccountingBytesReadInterval", "AccountingBytesReadInInterval", 0, 0 },
+ { "HelperNode", "EntryGuard", 0, 0 },
+ { "HelperNodeDownSince", "EntryGuardDownSince", 0, 0 },
+ { "HelperNodeUnlistedSince", "EntryGuardUnlistedSince", 0, 0 },
+ { "EntryNode", "EntryGuard", 0, 0 },
+ { "EntryNodeDownSince", "EntryGuardDownSince", 0, 0 },
+ { "EntryNodeUnlistedSince", "EntryGuardUnlistedSince", 0, 0 },
+ { NULL, NULL, 0, 0},
+};
+
+/*XXXX these next two are duplicates or near-duplicates from config.c */
+#define VAR(name,conftype,member,initvalue) \
+ { name, CONFIG_TYPE_ ## conftype, STRUCT_OFFSET(or_state_t, member), \
+ initvalue }
+/** As VAR, but the option name and member name are the same. */
+#define V(member,conftype,initvalue) \
+ VAR(#member, conftype, member, initvalue)
+
+/** Array of "state" variables saved to the ~/.tor/state file. */
+static config_var_t state_vars_[] = {
+ /* Remember to document these in state-contents.txt ! */
+
+ V(AccountingBytesReadInInterval, MEMUNIT, NULL),
+ V(AccountingBytesWrittenInInterval, MEMUNIT, NULL),
+ V(AccountingExpectedUsage, MEMUNIT, NULL),
+ V(AccountingIntervalStart, ISOTIME, NULL),
+ V(AccountingSecondsActive, INTERVAL, NULL),
+ V(AccountingSecondsToReachSoftLimit,INTERVAL, NULL),
+ V(AccountingSoftLimitHitAt, ISOTIME, NULL),
+ V(AccountingBytesAtSoftLimit, MEMUNIT, NULL),
+
+ VAR("EntryGuard", LINELIST_S, EntryGuards, NULL),
+ VAR("EntryGuardDownSince", LINELIST_S, EntryGuards, NULL),
+ VAR("EntryGuardUnlistedSince", LINELIST_S, EntryGuards, NULL),
+ VAR("EntryGuardAddedBy", LINELIST_S, EntryGuards, NULL),
+ VAR("EntryGuardPathBias", LINELIST_S, EntryGuards, NULL),
+ VAR("EntryGuardPathUseBias", LINELIST_S, EntryGuards, NULL),
+ V(EntryGuards, LINELIST_V, NULL),
+
+ VAR("TransportProxy", LINELIST_S, TransportProxies, NULL),
+ V(TransportProxies, LINELIST_V, NULL),
+
+ V(BWHistoryReadEnds, ISOTIME, NULL),
+ V(BWHistoryReadInterval, UINT, "900"),
+ V(BWHistoryReadValues, CSV, ""),
+ V(BWHistoryReadMaxima, CSV, ""),
+ V(BWHistoryWriteEnds, ISOTIME, NULL),
+ V(BWHistoryWriteInterval, UINT, "900"),
+ V(BWHistoryWriteValues, CSV, ""),
+ V(BWHistoryWriteMaxima, CSV, ""),
+ V(BWHistoryDirReadEnds, ISOTIME, NULL),
+ V(BWHistoryDirReadInterval, UINT, "900"),
+ V(BWHistoryDirReadValues, CSV, ""),
+ V(BWHistoryDirReadMaxima, CSV, ""),
+ V(BWHistoryDirWriteEnds, ISOTIME, NULL),
+ V(BWHistoryDirWriteInterval, UINT, "900"),
+ V(BWHistoryDirWriteValues, CSV, ""),
+ V(BWHistoryDirWriteMaxima, CSV, ""),
+
+ V(TorVersion, STRING, NULL),
+
+ V(LastRotatedOnionKey, ISOTIME, NULL),
+ V(LastWritten, ISOTIME, NULL),
+
+ V(TotalBuildTimes, UINT, NULL),
+ V(CircuitBuildAbandonedCount, UINT, "0"),
+ VAR("CircuitBuildTimeBin", LINELIST_S, BuildtimeHistogram, NULL),
+ VAR("BuildtimeHistogram", LINELIST_V, BuildtimeHistogram, NULL),
+ { NULL, CONFIG_TYPE_OBSOLETE, 0, NULL }
+};
+
+#undef VAR
+#undef V
+
+static int or_state_validate(or_state_t *state, char **msg);
+
+static int or_state_validate_cb(void *old_options, void *options,
+ void *default_options,
+ int from_setconf, char **msg);
+
+/** Magic value for or_state_t. */
+#define OR_STATE_MAGIC 0x57A73f57
+
+/** "Extra" variable in the state that receives lines we can't parse. This
+ * lets us preserve options from versions of Tor newer than us. */
+static config_var_t state_extra_var = {
+ "__extra", CONFIG_TYPE_LINELIST, STRUCT_OFFSET(or_state_t, ExtraLines), NULL
+};
+
+/** Configuration format for or_state_t. */
+static const config_format_t state_format = {
+ sizeof(or_state_t),
+ OR_STATE_MAGIC,
+ STRUCT_OFFSET(or_state_t, magic_),
+ state_abbrevs_,
+ state_vars_,
+ or_state_validate_cb,
+ &state_extra_var,
+};
+
+/** Persistent serialized state. */
+static or_state_t *global_state = NULL;
+
+/** Return the persistent state struct for this Tor. */
+MOCK_IMPL(or_state_t *,
+get_or_state, (void))
+{
+ tor_assert(global_state);
+ return global_state;
+}
+
+/** Return true iff we have loaded the global state for this Tor */
+int
+or_state_loaded(void)
+{
+ return global_state != NULL;
+}
+
+/** Return true if <b>line</b> is a valid state TransportProxy line.
+ * Return false otherwise. */
+static int
+state_transport_line_is_valid(const char *line)
+{
+ smartlist_t *items = NULL;
+ char *addrport=NULL;
+ tor_addr_t addr;
+ uint16_t port = 0;
+ int r;
+
+ items = smartlist_new();
+ smartlist_split_string(items, line, NULL,
+ SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, -1);
+
+ if (smartlist_len(items) != 2) {
+ log_warn(LD_CONFIG, "state: Not enough arguments in TransportProxy line.");
+ goto err;
+ }
+
+ addrport = smartlist_get(items, 1);
+ if (tor_addr_port_lookup(addrport, &addr, &port) < 0) {
+ log_warn(LD_CONFIG, "state: Could not parse addrport.");
+ goto err;
+ }
+
+ if (!port) {
+ log_warn(LD_CONFIG, "state: Transport line did not contain port.");
+ goto err;
+ }
+
+ r = 1;
+ goto done;
+
+ err:
+ r = 0;
+
+ done:
+ SMARTLIST_FOREACH(items, char*, s, tor_free(s));
+ smartlist_free(items);
+ return r;
+}
+
+/** Return 0 if all TransportProxy lines in <b>state</b> are well
+ * formed. Otherwise, return -1. */
+static int
+validate_transports_in_state(or_state_t *state)
+{
+ int broken = 0;
+ config_line_t *line;
+
+ for (line = state->TransportProxies ; line ; line = line->next) {
+ tor_assert(!strcmp(line->key, "TransportProxy"));
+ if (!state_transport_line_is_valid(line->value))
+ broken = 1;
+ }
+
+ if (broken)
+ log_warn(LD_CONFIG, "state: State file seems to be broken.");
+
+ return 0;
+}
+
+static int
+or_state_validate_cb(void *old_state, void *state, void *default_state,
+ int from_setconf, char **msg)
+{
+ /* We don't use these; only options do. Still, we need to match that
+ * signature. */
+ (void) from_setconf;
+ (void) default_state;
+ (void) old_state;
+
+ return or_state_validate(state, msg);
+}
+
+/** Return 0 if every setting in <b>state</b> is reasonable, and a
+ * permissible transition from <b>old_state</b>. Else warn and return -1.
+ * Should have no side effects, except for normalizing the contents of
+ * <b>state</b>.
+ */
+static int
+or_state_validate(or_state_t *state, char **msg)
+{
+ if (entry_guards_parse_state(state, 0, msg)<0)
+ return -1;
+
+ if (validate_transports_in_state(state)<0)
+ return -1;
+
+ return 0;
+}
+
+/** Replace the current persistent state with <b>new_state</b> */
+static int
+or_state_set(or_state_t *new_state)
+{
+ char *err = NULL;
+ int ret = 0;
+ tor_assert(new_state);
+ config_free(&state_format, global_state);
+ global_state = new_state;
+ if (entry_guards_parse_state(global_state, 1, &err)<0) {
+ log_warn(LD_GENERAL,"%s",err);
+ tor_free(err);
+ ret = -1;
+ }
+ if (rep_hist_load_state(global_state, &err)<0) {
+ log_warn(LD_GENERAL,"Unparseable bandwidth history state: %s",err);
+ tor_free(err);
+ ret = -1;
+ }
+ if (circuit_build_times_parse_state(
+ get_circuit_build_times_mutable(),global_state) < 0) {
+ ret = -1;
+ }
+ return ret;
+}
+
+/**
+ * Save a broken state file to a backup location.
+ */
+static void
+or_state_save_broken(char *fname)
+{
+ int i, res;
+ file_status_t status;
+ char *fname2 = NULL;
+ for (i = 0; i < 100; ++i) {
+ tor_asprintf(&fname2, "%s.%d", fname, i);
+ status = file_status(fname2);
+ if (status == FN_NOENT)
+ break;
+ tor_free(fname2);
+ }
+ if (i == 100) {
+ log_warn(LD_BUG, "Unable to parse state in \"%s\"; too many saved bad "
+ "state files to move aside. Discarding the old state file.",
+ fname);
+ res = unlink(fname);
+ if (res != 0) {
+ log_warn(LD_FS,
+ "Also couldn't discard old state file \"%s\" because "
+ "unlink() failed: %s",
+ fname, strerror(errno));
+ }
+ } else {
+ log_warn(LD_BUG, "Unable to parse state in \"%s\". Moving it aside "
+ "to \"%s\". This could be a bug in Tor; please tell "
+ "the developers.", fname, fname2);
+ if (tor_rename(fname, fname2) < 0) {//XXXX sandbox prohibits
+ log_warn(LD_BUG, "Weirdly, I couldn't even move the state aside. The "
+ "OS gave an error of %s", strerror(errno));
+ }
+ }
+ tor_free(fname2);
+}
+
+STATIC or_state_t *
+or_state_new(void)
+{
+ or_state_t *new_state = tor_malloc_zero(sizeof(or_state_t));
+ new_state->magic_ = OR_STATE_MAGIC;
+ config_init(&state_format, new_state);
+
+ return new_state;
+}
+
+/** Reload the persistent state from disk, generating a new state as needed.
+ * Return 0 on success, less than 0 on failure.
+ */
+int
+or_state_load(void)
+{
+ or_state_t *new_state = NULL;
+ char *contents = NULL, *fname;
+ char *errmsg = NULL;
+ int r = -1, badstate = 0;
+
+ fname = get_datadir_fname("state");
+ switch (file_status(fname)) {
+ case FN_FILE:
+ if (!(contents = read_file_to_str(fname, 0, NULL))) {
+ log_warn(LD_FS, "Unable to read state file \"%s\"", fname);
+ goto done;
+ }
+ break;
+ case FN_NOENT:
+ break;
+ case FN_ERROR:
+ case FN_DIR:
+ default:
+ log_warn(LD_GENERAL,"State file \"%s\" is not a file? Failing.", fname);
+ goto done;
+ }
+ new_state = or_state_new();
+ if (contents) {
+ config_line_t *lines=NULL;
+ int assign_retval;
+ if (config_get_lines(contents, &lines, 0)<0)
+ goto done;
+ assign_retval = config_assign(&state_format, new_state,
+ lines, 0, 0, &errmsg);
+ config_free_lines(lines);
+ if (assign_retval<0)
+ badstate = 1;
+ if (errmsg) {
+ log_warn(LD_GENERAL, "%s", errmsg);
+ tor_free(errmsg);
+ }
+ }
+
+ if (!badstate && or_state_validate(new_state, &errmsg) < 0)
+ badstate = 1;
+
+ if (errmsg) {
+ log_warn(LD_GENERAL, "%s", errmsg);
+ tor_free(errmsg);
+ }
+
+ if (badstate && !contents) {
+ log_warn(LD_BUG, "Uh oh. We couldn't even validate our own default state."
+ " This is a bug in Tor.");
+ goto done;
+ } else if (badstate && contents) {
+ or_state_save_broken(fname);
+
+ tor_free(contents);
+ config_free(&state_format, new_state);
+
+ new_state = or_state_new();
+ } else if (contents) {
+ log_info(LD_GENERAL, "Loaded state from \"%s\"", fname);
+ } else {
+ log_info(LD_GENERAL, "Initialized state");
+ }
+ if (or_state_set(new_state) == -1) {
+ or_state_save_broken(fname);
+ }
+ new_state = NULL;
+ if (!contents) {
+ global_state->next_write = 0;
+ or_state_save(time(NULL));
+ }
+ r = 0;
+
+ done:
+ tor_free(fname);
+ tor_free(contents);
+ if (new_state)
+ config_free(&state_format, new_state);
+
+ return r;
+}
+
+/** Did the last time we tried to write the state file fail? If so, we
+ * should consider disabling such features as preemptive circuit generation
+ * to compute circuit-build-time. */
+static int last_state_file_write_failed = 0;
+
+/** Return whether the state file failed to write last time we tried. */
+int
+did_last_state_file_write_fail(void)
+{
+ return last_state_file_write_failed;
+}
+
+/** If writing the state to disk fails, try again after this many seconds. */
+#define STATE_WRITE_RETRY_INTERVAL 3600
+
+/** If we're a relay, how often should we checkpoint our state file even
+ * if nothing else dirties it? This will checkpoint ongoing stats like
+ * bandwidth used, per-country user stats, etc. */
+#define STATE_RELAY_CHECKPOINT_INTERVAL (12*60*60)
+
+/** Write the persistent state to disk. Return 0 for success, <0 on failure. */
+int
+or_state_save(time_t now)
+{
+ char *state, *contents;
+ char tbuf[ISO_TIME_LEN+1];
+ char *fname;
+
+ tor_assert(global_state);
+
+ if (global_state->next_write > now)
+ return 0;
+
+ /* Call everything else that might dirty the state even more, in order
+ * to avoid redundant writes. */
+ entry_guards_update_state(global_state);
+ rep_hist_update_state(global_state);
+ circuit_build_times_update_state(get_circuit_build_times(), global_state);
+ if (accounting_is_enabled(get_options()))
+ accounting_run_housekeeping(now);
+
+ global_state->LastWritten = now;
+
+ tor_free(global_state->TorVersion);
+ tor_asprintf(&global_state->TorVersion, "Tor %s", get_version());
+
+ state = config_dump(&state_format, NULL, global_state, 1, 0);
+ format_local_iso_time(tbuf, now);
+ tor_asprintf(&contents,
+ "# Tor state file last generated on %s local time\n"
+ "# Other times below are in UTC\n"
+ "# You *do not* need to edit this file.\n\n%s",
+ tbuf, state);
+ tor_free(state);
+ fname = get_datadir_fname("state");
+ if (write_str_to_file(fname, contents, 0)<0) {
+ log_warn(LD_FS, "Unable to write state to file \"%s\"; "
+ "will try again later", fname);
+ last_state_file_write_failed = 1;
+ tor_free(fname);
+ tor_free(contents);
+ /* Try again after STATE_WRITE_RETRY_INTERVAL (or sooner, if the state
+ * changes sooner). */
+ global_state->next_write = now + STATE_WRITE_RETRY_INTERVAL;
+ return -1;
+ }
+
+ last_state_file_write_failed = 0;
+ log_info(LD_GENERAL, "Saved state to \"%s\"", fname);
+ tor_free(fname);
+ tor_free(contents);
+
+ if (server_mode(get_options()))
+ global_state->next_write = now + STATE_RELAY_CHECKPOINT_INTERVAL;
+ else
+ global_state->next_write = TIME_MAX;
+
+ return 0;
+}
+
+/** Return the config line for transport <b>transport</b> in the current state.
+ * Return NULL if there is no config line for <b>transport</b>. */
+STATIC config_line_t *
+get_transport_in_state_by_name(const char *transport)
+{
+ or_state_t *or_state = get_or_state();
+ config_line_t *line;
+ config_line_t *ret = NULL;
+ smartlist_t *items = NULL;
+
+ for (line = or_state->TransportProxies ; line ; line = line->next) {
+ tor_assert(!strcmp(line->key, "TransportProxy"));
+
+ items = smartlist_new();
+ smartlist_split_string(items, line->value, NULL,
+ SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, -1);
+ if (smartlist_len(items) != 2) /* broken state */
+ goto done;
+
+ if (!strcmp(smartlist_get(items, 0), transport)) {
+ ret = line;
+ goto done;
+ }
+
+ SMARTLIST_FOREACH(items, char*, s, tor_free(s));
+ smartlist_free(items);
+ items = NULL;
+ }
+
+ done:
+ if (items) {
+ SMARTLIST_FOREACH(items, char*, s, tor_free(s));
+ smartlist_free(items);
+ }
+ return ret;
+}
+
+/** Return string containing the address:port part of the
+ * TransportProxy <b>line</b> for transport <b>transport</b>.
+ * If the line is corrupted, return NULL. */
+static const char *
+get_transport_bindaddr(const char *line, const char *transport)
+{
+ char *line_tmp = NULL;
+
+ if (strlen(line) < strlen(transport) + 2) {
+ goto broken_state;
+ } else {
+ /* line should start with the name of the transport and a space.
+ (for example, "obfs2 127.0.0.1:47245") */
+ tor_asprintf(&line_tmp, "%s ", transport);
+ if (strcmpstart(line, line_tmp))
+ goto broken_state;
+
+ tor_free(line_tmp);
+ return (line+strlen(transport)+1);
+ }
+
+ broken_state:
+ tor_free(line_tmp);
+ return NULL;
+}
+
+/** Return a string containing the address:port that a proxy transport
+ * should bind on. The string is stored on the heap and must be freed
+ * by the caller of this function. */
+char *
+get_stored_bindaddr_for_server_transport(const char *transport)
+{
+ char *default_addrport = NULL;
+ const char *stored_bindaddr = NULL;
+ config_line_t *line = NULL;
+
+ {
+ /* See if the user explicitly asked for a specific listening
+ address for this transport. */
+ char *conf_bindaddr = get_transport_bindaddr_from_config(transport);
+ if (conf_bindaddr)
+ return conf_bindaddr;
+ }
+
+ line = get_transport_in_state_by_name(transport);
+ if (!line) /* Found no references in state for this transport. */
+ goto no_bindaddr_found;
+
+ stored_bindaddr = get_transport_bindaddr(line->value, transport);
+ if (stored_bindaddr) /* found stored bindaddr in state file. */
+ return tor_strdup(stored_bindaddr);
+
+ no_bindaddr_found:
+ /** If we didn't find references for this pluggable transport in the
+ state file, we should instruct the pluggable transport proxy to
+ listen on INADDR_ANY on a random ephemeral port. */
+ tor_asprintf(&default_addrport, "%s:%s", fmt_addr32(INADDR_ANY), "0");
+ return default_addrport;
+}
+
+/** Save <b>transport</b> listening on <b>addr</b>:<b>port</b> to
+ state */
+void
+save_transport_to_state(const char *transport,
+ const tor_addr_t *addr, uint16_t port)
+{
+ or_state_t *state = get_or_state();
+
+ char *transport_addrport=NULL;
+
+ /** find where to write on the state */
+ config_line_t **next, *line;
+
+ /* see if this transport is already stored in state */
+ config_line_t *transport_line =
+ get_transport_in_state_by_name(transport);
+
+ if (transport_line) { /* if transport already exists in state... */
+ const char *prev_bindaddr = /* get its addrport... */
+ get_transport_bindaddr(transport_line->value, transport);
+ transport_addrport = tor_strdup(fmt_addrport(addr, port));
+
+ /* if transport in state has the same address as this one, life is good */
+ if (!strcmp(prev_bindaddr, transport_addrport)) {
+ log_info(LD_CONFIG, "Transport seems to have spawned on its usual "
+ "address:port.");
+ goto done;
+ } else { /* if addrport in state is different than the one we got */
+ log_info(LD_CONFIG, "Transport seems to have spawned on different "
+ "address:port. Let's update the state file with the new "
+ "address:port");
+ tor_free(transport_line->value); /* free the old line */
+ /* replace old addrport line with new line */
+ tor_asprintf(&transport_line->value, "%s %s", transport,
+ fmt_addrport(addr, port));
+ }
+ } else { /* never seen this one before; save it in state for next time */
+ log_info(LD_CONFIG, "It's the first time we see this transport. "
+ "Let's save its address:port");
+ next = &state->TransportProxies;
+ /* find the last TransportProxy line in the state and point 'next'
+ right after it */
+ line = state->TransportProxies;
+ while (line) {
+ next = &(line->next);
+ line = line->next;
+ }
+
+ /* allocate space for the new line and fill it in */
+ *next = line = tor_malloc_zero(sizeof(config_line_t));
+ line->key = tor_strdup("TransportProxy");
+ tor_asprintf(&line->value, "%s %s", transport, fmt_addrport(addr, port));
+
+ next = &(line->next);
+ }
+
+ if (!get_options()->AvoidDiskWrites)
+ or_state_mark_dirty(state, 0);
+
+ done:
+ tor_free(transport_addrport);
+}
+
+STATIC void
+or_state_free(or_state_t *state)
+{
+ if (!state)
+ return;
+
+ config_free(&state_format, state);
+}
+
+void
+or_state_free_all(void)
+{
+ or_state_free(global_state);
+ global_state = NULL;
+}
+
diff --git a/src/or/statefile.h b/src/or/statefile.h
new file mode 100644
index 000000000..15bb0b4aa
--- /dev/null
+++ b/src/or/statefile.h
@@ -0,0 +1,28 @@
+/* Copyright (c) 2001 Matej Pfajfar.
+ * Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#ifndef TOR_STATEFILE_H
+#define TOR_STATEFILE_H
+
+MOCK_DECL(or_state_t *,get_or_state,(void));
+int did_last_state_file_write_fail(void);
+int or_state_save(time_t now);
+
+void save_transport_to_state(const char *transport_name,
+ const tor_addr_t *addr, uint16_t port);
+char *get_stored_bindaddr_for_server_transport(const char *transport);
+int or_state_load(void);
+int or_state_loaded(void);
+void or_state_free_all(void);
+
+#ifdef STATEFILE_PRIVATE
+STATIC config_line_t *get_transport_in_state_by_name(const char *transport);
+STATIC void or_state_free(or_state_t *state);
+STATIC or_state_t *or_state_new(void);
+#endif
+
+#endif
+
diff --git a/src/or/status.c b/src/or/status.c
index 04cd96eed..afaa9de84 100644
--- a/src/or/status.c
+++ b/src/or/status.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010-2012, The Tor Project, Inc. */
+/* Copyright (c) 2010-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -6,22 +6,32 @@
* \brief Keep status information and log the heartbeat messages.
**/
+#define STATUS_PRIVATE
+
#include "or.h"
+#include "circuituse.h"
#include "config.h"
#include "status.h"
#include "nodelist.h"
+#include "relay.h"
#include "router.h"
#include "circuitlist.h"
#include "main.h"
+#include "rephist.h"
+#include "hibernate.h"
+#include "rephist.h"
+#include "statefile.h"
+
+static void log_accounting(const time_t now, const or_options_t *options);
/** Return the total number of circuits. */
-static int
+STATIC int
count_circuits(void)
{
circuit_t *circ;
int nr=0;
- for (circ = _circuit_get_global_list(); circ; circ = circ->next)
+ TOR_LIST_FOREACH(circ, circuit_get_global_list(), head)
nr++;
return nr;
@@ -29,7 +39,7 @@ count_circuits(void)
/** Take seconds <b>secs</b> and return a newly allocated human-readable
* uptime string */
-static char *
+STATIC char *
secs_to_uptime(long secs)
{
long int days = secs / 86400;
@@ -56,7 +66,7 @@ secs_to_uptime(long secs)
/** Take <b>bytes</b> and returns a newly allocated human-readable usage
* string. */
-static char *
+STATIC char *
bytes_to_usage(uint64_t bytes)
{
char *bw_string = NULL;
@@ -84,11 +94,13 @@ log_heartbeat(time_t now)
char *bw_rcvd = NULL;
char *uptime = NULL;
const routerinfo_t *me;
+ double r = tls_get_write_overhead_ratio();
+ const int hibernating = we_are_hibernating();
const or_options_t *options = get_options();
(void)now;
- if (public_server_mode(options)) {
+ if (public_server_mode(options) && !hibernating) {
/* Let's check if we are in the current cached consensus. */
if (!(me = router_get_my_routerinfo()))
return -1; /* Something stinks, we won't even attempt this. */
@@ -103,8 +115,28 @@ log_heartbeat(time_t now)
bw_sent = bytes_to_usage(get_bytes_written());
log_fn(LOG_NOTICE, LD_HEARTBEAT, "Heartbeat: Tor's uptime is %s, with %d "
- "circuits open. I've sent %s and received %s.",
- uptime, count_circuits(),bw_sent,bw_rcvd);
+ "circuits open. I've sent %s and received %s.%s",
+ uptime, count_circuits(),bw_sent,bw_rcvd,
+ hibernating?" We are currently hibernating.":"");
+
+ if (server_mode(options) && accounting_is_enabled(options) && !hibernating) {
+ log_accounting(now, options);
+ }
+
+ if (stats_n_data_cells_packaged && !hibernating)
+ log_notice(LD_HEARTBEAT, "Average packaged cell fullness: %2.3f%%",
+ 100*(U64_TO_DBL(stats_n_data_bytes_packaged) /
+ U64_TO_DBL(stats_n_data_cells_packaged*RELAY_PAYLOAD_SIZE)) );
+
+ if (r > 1.0) {
+ double overhead = ( r - 1.0 ) * 100.0;
+ log_notice(LD_HEARTBEAT, "TLS write overhead: %.f%%", overhead);
+ }
+
+ if (public_server_mode(options))
+ rep_hist_log_circuit_handshake_stats(now);
+
+ circuit_log_ancient_one_hop_circuits(1800);
tor_free(uptime);
tor_free(bw_sent);
@@ -113,3 +145,27 @@ log_heartbeat(time_t now)
return 0;
}
+static void
+log_accounting(const time_t now, const or_options_t *options)
+{
+ or_state_t *state = get_or_state();
+ char *acc_rcvd = bytes_to_usage(state->AccountingBytesReadInInterval);
+ char *acc_sent = bytes_to_usage(state->AccountingBytesWrittenInInterval);
+ char *acc_max = bytes_to_usage(options->AccountingMax);
+ time_t interval_end = accounting_get_end_time();
+ char end_buf[ISO_TIME_LEN + 1];
+ char *remaining = NULL;
+ format_local_iso_time(end_buf, interval_end);
+ remaining = secs_to_uptime(interval_end - now);
+
+ log_notice(LD_HEARTBEAT, "Heartbeat: Accounting enabled. "
+ "Sent: %s / %s, Received: %s / %s. The "
+ "current accounting interval ends on %s, in %s.",
+ acc_sent, acc_max, acc_rcvd, acc_max, end_buf, remaining);
+
+ tor_free(acc_rcvd);
+ tor_free(acc_sent);
+ tor_free(acc_max);
+ tor_free(remaining);
+}
+
diff --git a/src/or/status.h b/src/or/status.h
index 189ac789e..13458ea47 100644
--- a/src/or/status.h
+++ b/src/or/status.h
@@ -1,10 +1,18 @@
-/* Copyright (c) 2010-2012, The Tor Project, Inc. */
+/* Copyright (c) 2010-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
-#ifndef _TOR_STATUS_H
-#define _TOR_STATUS_H
+#ifndef TOR_STATUS_H
+#define TOR_STATUS_H
+
+#include "testsupport.h"
int log_heartbeat(time_t now);
+#ifdef STATUS_PRIVATE
+STATIC int count_circuits(void);
+STATIC char *secs_to_uptime(long secs);
+STATIC char *bytes_to_usage(uint64_t bytes);
+#endif
+
#endif
diff --git a/src/or/tor_main.c b/src/or/tor_main.c
index 2f4922317..05dc0bf0b 100644
--- a/src/or/tor_main.c
+++ b/src/or/tor_main.c
@@ -1,11 +1,11 @@
/* Copyright 2001-2004 Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
-/** String describing which Tor subversion repository version the source was
- * built from. This string is generated by a bit of shell kludging int
- * src/or/Makefile.am, and is usually right.
+/** String describing which Tor Git repository version the source was
+ * built from. This string is generated by a bit of shell kludging in
+ * src/or/include.am, and is usually right.
*/
const char tor_git_revision[] =
#ifndef _MSC_VER
diff --git a/src/or/transports.c b/src/or/transports.c
index 4ba239562..dc3075416 100644
--- a/src/or/transports.c
+++ b/src/or/transports.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011-2012, The Tor Project, Inc. */
+/* Copyright (c) 2011-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -39,43 +39,49 @@
* transport_t structs.
*
* When the managed proxy stops spitting METHOD lines (signified by a
- * '{S,C}METHODS DONE' message) we register all the transports
- * collected to the circuitbuild.c subsystem. At this point, the
- * pointers to transport_t can be transformed into dangling pointers
- * at any point by the circuitbuild.c subsystem, and so we replace all
- * transport_t pointers with strings describing the transport names.
- * We can still go from a transport name to a transport_t using the
- * fact that each transport name uniquely identifies a transport_t.
+ * '{S,C}METHODS DONE' message) we pass copies of its transports to
+ * the bridge subsystem. We keep copies of the 'transport_t's on the
+ * managed proxy to be able to associate the proxy with its
+ * transports, and we pass copies to the bridge subsystem so that
+ * transports can be associated with bridges.
+ * [ XXX We should try see whether the two copies are really needed
+ * and maybe cut it into a single copy of the 'transport_t' shared
+ * between the managed proxy and the bridge subsystem. Preliminary
+ * analysis shows that both copies are needed with the current code
+ * logic, because of race conditions that can cause dangling
+ * pointers. ]
*
- * <b>In even more detail, this is what happens when a SIGHUP
- * occurs:</b>
+ * <b>In even more detail, this is what happens when a config read
+ * (like a SIGHUP or a SETCONF) occurs:</b>
*
* We immediately destroy all unconfigured proxies (We shouldn't have
- * unconfigured proxies in the first place, except when SIGHUP rings
- * immediately after tor is launched.).
+ * unconfigured proxies in the first place, except when the config
+ * read happens immediately after tor is launched.).
*
* We mark all managed proxies and transports to signify that they
* must be removed if they don't contribute by the new torrc
* (we mark using the <b>marked_for_removal</b> element).
* We also mark all managed proxies to signify that they might need to
* be restarted so that they end up supporting all the transports the
- * new torrc wants them to support (using the <b>got_hup</b> element).
+ * new torrc wants them to support
+ * (we mark using the <b>was_around_before_config_read</b> element).
* We also clear their <b>transports_to_launch</b> list so that we can
* put there the transports we need to launch according to the new
* torrc.
*
* We then start parsing torrc again.
*
- * Everytime we encounter a transport line using a known pre-SIGHUP
- * managed proxy, we cleanse that proxy from the removal mark.
- * We also mark it as unconfigured so that on the next scheduled
- * events tick, we investigate whether we need to restart the proxy
- * so that it also spawns the new transports.
- * If the post-SIGHUP <b>transports_to_launch</b> list is identical to
- * the pre-SIGHUP one, it means that no changes were introduced to
- * this proxy during the SIGHUP and no restart has to take place.
+ * Everytime we encounter a transport line using a managed proxy that
+ * was around before the config read, we cleanse that proxy from the
+ * removal mark. We also toggle the <b>check_if_restarts_needed</b>
+ * flag, so that on the next <b>pt_configure_remaining_proxies</b>
+ * tick, we investigate whether we need to restart the proxy so that
+ * it also spawns the new transports. If the post-config-read
+ * <b>transports_to_launch</b> list is identical to the pre-config-read
+ * one, it means that no changes were introduced to this proxy during
+ * the config read and no restart has to take place.
*
- * During the post-SIGHUP torrc parsing, we unmark all transports
+ * During the post-config-read torrc parsing, we unmark all transports
* spawned by managed proxies that we find in our torrc.
* We do that so that if we don't need to restart a managed proxy, we
* can continue using its old transports normally.
@@ -90,18 +96,18 @@
#include "transports.h"
#include "util.h"
#include "router.h"
+#include "statefile.h"
+#include "entrynodes.h"
+#include "connection_or.h"
+#include "ext_orport.h"
+#include "control.h"
static process_environment_t *
create_managed_proxy_environment(const managed_proxy_t *mp);
static INLINE int proxy_configuration_finished(const managed_proxy_t *mp);
-static void managed_proxy_destroy(managed_proxy_t *mp,
- int also_terminate_process);
-
static void handle_finished_proxy(managed_proxy_t *mp);
-static void configure_proxy(managed_proxy_t *mp);
-
static void parse_method_error(const char *line, int is_server_method);
#define parse_server_method_error(l) parse_method_error(l, 1)
#define parse_client_method_error(l) parse_method_error(l, 0)
@@ -119,14 +125,232 @@ static INLINE void free_execve_args(char **arg);
#define PROTO_CMETHODS_DONE "CMETHODS DONE"
#define PROTO_SMETHODS_DONE "SMETHODS DONE"
-/** Number of environment variables for managed proxy clients/servers. */
-#define ENVIRON_SIZE_CLIENT 3
-#define ENVIRON_SIZE_SERVER 7 /* XXX known to be too high, but that's ok */
-
/** The first and only supported - at the moment - configuration
protocol version. */
#define PROTO_VERSION_ONE 1
+/** A list of pluggable transports found in torrc. */
+static smartlist_t *transport_list = NULL;
+
+/** Returns a transport_t struct for a transport proxy supporting the
+ protocol <b>name</b> listening at <b>addr</b>:<b>port</b> using
+ SOCKS version <b>socks_ver</b>. */
+static transport_t *
+transport_new(const tor_addr_t *addr, uint16_t port,
+ const char *name, int socks_ver,
+ const char *extra_info_args)
+{
+ transport_t *t = tor_malloc_zero(sizeof(transport_t));
+
+ tor_addr_copy(&t->addr, addr);
+ t->port = port;
+ t->name = tor_strdup(name);
+ t->socks_version = socks_ver;
+ if (extra_info_args)
+ t->extra_info_args = tor_strdup(extra_info_args);
+
+ return t;
+}
+
+/** Free the pluggable transport struct <b>transport</b>. */
+void
+transport_free(transport_t *transport)
+{
+ if (!transport)
+ return;
+
+ tor_free(transport->name);
+ tor_free(transport->extra_info_args);
+ tor_free(transport);
+}
+
+/** Mark every entry of the transport list to be removed on our next call to
+ * sweep_transport_list unless it has first been un-marked. */
+void
+mark_transport_list(void)
+{
+ if (!transport_list)
+ transport_list = smartlist_new();
+ SMARTLIST_FOREACH(transport_list, transport_t *, t,
+ t->marked_for_removal = 1);
+}
+
+/** Remove every entry of the transport list that was marked with
+ * mark_transport_list if it has not subsequently been un-marked. */
+void
+sweep_transport_list(void)
+{
+ if (!transport_list)
+ transport_list = smartlist_new();
+ SMARTLIST_FOREACH_BEGIN(transport_list, transport_t *, t) {
+ if (t->marked_for_removal) {
+ SMARTLIST_DEL_CURRENT(transport_list, t);
+ transport_free(t);
+ }
+ } SMARTLIST_FOREACH_END(t);
+}
+
+/** Initialize the pluggable transports list to empty, creating it if
+ * needed. */
+static void
+clear_transport_list(void)
+{
+ if (!transport_list)
+ transport_list = smartlist_new();
+ SMARTLIST_FOREACH(transport_list, transport_t *, t, transport_free(t));
+ smartlist_clear(transport_list);
+}
+
+/** Return a deep copy of <b>transport</b>. */
+static transport_t *
+transport_copy(const transport_t *transport)
+{
+ transport_t *new_transport = NULL;
+
+ tor_assert(transport);
+
+ new_transport = tor_malloc_zero(sizeof(transport_t));
+
+ new_transport->socks_version = transport->socks_version;
+ new_transport->name = tor_strdup(transport->name);
+ tor_addr_copy(&new_transport->addr, &transport->addr);
+ new_transport->port = transport->port;
+ new_transport->marked_for_removal = transport->marked_for_removal;
+
+ return new_transport;
+}
+
+/** Returns the transport in our transport list that has the name <b>name</b>.
+ * Else returns NULL. */
+transport_t *
+transport_get_by_name(const char *name)
+{
+ tor_assert(name);
+
+ if (!transport_list)
+ return NULL;
+
+ SMARTLIST_FOREACH_BEGIN(transport_list, transport_t *, transport) {
+ if (!strcmp(transport->name, name))
+ return transport;
+ } SMARTLIST_FOREACH_END(transport);
+
+ return NULL;
+}
+
+/** Resolve any conflicts that the insertion of transport <b>t</b>
+ * might cause.
+ * Return 0 if <b>t</b> is OK and should be registered, 1 if there is
+ * a transport identical to <b>t</b> already registered and -1 if
+ * <b>t</b> cannot be added due to conflicts. */
+static int
+transport_resolve_conflicts(const transport_t *t)
+{
+ /* This is how we resolve transport conflicts:
+
+ If there is already a transport with the same name and addrport,
+ we either have duplicate torrc lines OR we are here post-HUP and
+ this transport was here pre-HUP as well. In any case, mark the
+ old transport so that it doesn't get removed and ignore the new
+ one. Our caller has to free the new transport so we return '1' to
+ signify this.
+
+ If there is already a transport with the same name but different
+ addrport:
+ * if it's marked for removal, it means that it either has a lower
+ priority than 't' in torrc (otherwise the mark would have been
+ cleared by the paragraph above), or it doesn't exist at all in
+ the post-HUP torrc. We destroy the old transport and register 't'.
+ * if it's *not* marked for removal, it means that it was newly
+ added in the post-HUP torrc or that it's of higher priority, in
+ this case we ignore 't'. */
+ transport_t *t_tmp = transport_get_by_name(t->name);
+ if (t_tmp) { /* same name */
+ if (tor_addr_eq(&t->addr, &t_tmp->addr) && (t->port == t_tmp->port)) {
+ /* same name *and* addrport */
+ t_tmp->marked_for_removal = 0;
+ return 1;
+ } else { /* same name but different addrport */
+ char *new_transport_addrport =
+ tor_strdup(fmt_addrport(&t->addr, t->port));
+ if (t_tmp->marked_for_removal) { /* marked for removal */
+ log_notice(LD_GENERAL, "You tried to add transport '%s' at '%s' "
+ "but there was already a transport marked for deletion at "
+ "'%s'. We deleted the old transport and registered the "
+ "new one.", t->name, new_transport_addrport,
+ fmt_addrport(&t_tmp->addr, t_tmp->port));
+ smartlist_remove(transport_list, t_tmp);
+ transport_free(t_tmp);
+ tor_free(new_transport_addrport);
+ } else { /* *not* marked for removal */
+ log_notice(LD_GENERAL, "You tried to add transport '%s' at '%s' "
+ "but the same transport already exists at '%s'. "
+ "Skipping.", t->name, new_transport_addrport,
+ fmt_addrport(&t_tmp->addr, t_tmp->port));
+ tor_free(new_transport_addrport);
+ return -1;
+ }
+ tor_free(new_transport_addrport);
+ }
+ }
+
+ return 0;
+}
+
+/** Add transport <b>t</b> to the internal list of pluggable
+ * transports.
+ * Returns 0 if the transport was added correctly, 1 if the same
+ * transport was already registered (in this case the caller must
+ * free the transport) and -1 if there was an error. */
+static int
+transport_add(transport_t *t)
+{
+ int r;
+ tor_assert(t);
+
+ r = transport_resolve_conflicts(t);
+
+ switch (r) {
+ case 0: /* should register transport */
+ if (!transport_list)
+ transport_list = smartlist_new();
+ smartlist_add(transport_list, t);
+ return 0;
+ default: /* let our caller know the return code */
+ return r;
+ }
+}
+
+/** Remember a new pluggable transport proxy at <b>addr</b>:<b>port</b>.
+ * <b>name</b> is set to the name of the protocol this proxy uses.
+ * <b>socks_ver</b> is set to the SOCKS version of the proxy. */
+int
+transport_add_from_config(const tor_addr_t *addr, uint16_t port,
+ const char *name, int socks_ver)
+{
+ transport_t *t = transport_new(addr, port, name, socks_ver, NULL);
+
+ int r = transport_add(t);
+
+ switch (r) {
+ case -1:
+ default:
+ log_notice(LD_GENERAL, "Could not add transport %s at %s. Skipping.",
+ t->name, fmt_addrport(&t->addr, t->port));
+ transport_free(t);
+ return -1;
+ case 1:
+ log_info(LD_GENERAL, "Successfully registered transport %s at %s.",
+ t->name, fmt_addrport(&t->addr, t->port));
+ transport_free(t); /* falling */
+ return 0;
+ case 0:
+ log_info(LD_GENERAL, "Successfully registered transport %s at %s.",
+ t->name, fmt_addrport(&t->addr, t->port));
+ return 0;
+ }
+}
+
/** List of unconfigured managed proxies. */
static smartlist_t *managed_proxy_list = NULL;
/** Number of still unconfigured proxies. */
@@ -205,7 +429,7 @@ static void
add_transport_to_proxy(const char *transport, managed_proxy_t *mp)
{
tor_assert(mp->transports_to_launch);
- if (!smartlist_string_isin(mp->transports_to_launch, transport))
+ if (!smartlist_contains_string(mp->transports_to_launch, transport))
smartlist_add(mp->transports_to_launch, tor_strdup(transport));
}
@@ -217,11 +441,11 @@ proxy_needs_restart(const managed_proxy_t *mp)
{
/* mp->transport_to_launch is populated with the names of the
transports that must be launched *after* the SIGHUP.
- mp->transports is populated with the names of the transports that
- were launched *before* the SIGHUP.
+ mp->transports is populated with the transports that were
+ launched *before* the SIGHUP.
- If the two lists contain the same strings, we don't need to
- restart the proxy, since it already does what we want. */
+ Check if all the transports that need to be launched are already
+ launched: */
tor_assert(smartlist_len(mp->transports_to_launch) > 0);
tor_assert(mp->conf_state == PT_PROTO_COMPLETED);
@@ -229,11 +453,11 @@ proxy_needs_restart(const managed_proxy_t *mp)
if (smartlist_len(mp->transports_to_launch) != smartlist_len(mp->transports))
goto needs_restart;
- SMARTLIST_FOREACH_BEGIN(mp->transports_to_launch, char *, t_t_l) {
- if (!smartlist_string_isin(mp->transports, t_t_l))
+ SMARTLIST_FOREACH_BEGIN(mp->transports, const transport_t *, t) {
+ if (!smartlist_contains_string(mp->transports_to_launch, t->name))
goto needs_restart;
- } SMARTLIST_FOREACH_END(t_t_l);
+ } SMARTLIST_FOREACH_END(t);
return 0;
@@ -245,6 +469,7 @@ proxy_needs_restart(const managed_proxy_t *mp)
* preparations and then flag its state so that it will be relaunched
* in the next tick. */
static void
+
proxy_prepare_for_restart(managed_proxy_t *mp)
{
transport_t *t_tmp = NULL;
@@ -255,16 +480,17 @@ proxy_prepare_for_restart(managed_proxy_t *mp)
tor_process_handle_destroy(mp->process_handle, 1);
mp->process_handle = NULL;
- /* destroy all its old transports. we no longer use them. */
- SMARTLIST_FOREACH_BEGIN(mp->transports, const char *, t_name) {
- t_tmp = transport_get_by_name(t_name);
+ /* destroy all its registered transports, since we will no longer
+ use them. */
+ SMARTLIST_FOREACH_BEGIN(mp->transports, const transport_t *, t) {
+ t_tmp = transport_get_by_name(t->name);
if (t_tmp)
t_tmp->marked_for_removal = 1;
- } SMARTLIST_FOREACH_END(t_name);
+ } SMARTLIST_FOREACH_END(t);
sweep_transport_list();
- /* free the transport names in mp->transports */
- SMARTLIST_FOREACH(mp->transports, char *, t_name, tor_free(t_name));
+ /* free the transport in mp->transports */
+ SMARTLIST_FOREACH(mp->transports, transport_t *, t, transport_free(t));
smartlist_clear(mp->transports);
/* flag it as an infant proxy so that it gets launched on next tick */
@@ -310,11 +536,11 @@ launch_managed_proxy(managed_proxy_t *mp)
}
/** Check if any of the managed proxies we are currently trying to
- * configure have anything new to say. This is called from
- * run_scheduled_events(). */
+ * configure has anything new to say. */
void
pt_configure_remaining_proxies(void)
{
+ int at_least_a_proxy_config_finished = 0;
smartlist_t *tmp = smartlist_new();
log_debug(LD_CONFIG, "Configuring remaining managed proxies (%d)!",
@@ -327,14 +553,15 @@ pt_configure_remaining_proxies(void)
assert_unconfigured_count_ok();
SMARTLIST_FOREACH_BEGIN(tmp, managed_proxy_t *, mp) {
- tor_assert(mp->conf_state != PT_PROTO_BROKEN ||
+ tor_assert(mp->conf_state != PT_PROTO_BROKEN &&
mp->conf_state != PT_PROTO_FAILED_LAUNCH);
- if (mp->got_hup) {
- mp->got_hup = 0;
+ if (mp->was_around_before_config_read) {
+ /* This proxy is marked by a config read. Check whether we need
+ to restart it. */
+
+ mp->was_around_before_config_read = 0;
- /* This proxy is marked by a SIGHUP. Check whether we need to
- restart it. */
if (proxy_needs_restart(mp)) {
log_info(LD_GENERAL, "Preparing managed proxy '%s' for restart.",
mp->argv[0]);
@@ -350,24 +577,29 @@ pt_configure_remaining_proxies(void)
/* If the proxy is not fully configured, try to configure it
futher. */
if (!proxy_configuration_finished(mp))
- configure_proxy(mp);
+ if (configure_proxy(mp) == 1)
+ at_least_a_proxy_config_finished = 1;
} SMARTLIST_FOREACH_END(mp);
smartlist_free(tmp);
check_if_restarts_needed = 0;
assert_unconfigured_count_ok();
-}
-#ifdef _WIN32
+ if (at_least_a_proxy_config_finished)
+ mark_my_descriptor_dirty("configured managed proxies");
+}
-/** Attempt to continue configuring managed proxy <b>mp</b>. */
-static void
+/** Attempt to continue configuring managed proxy <b>mp</b>.
+ * Return 1 if the transport configuration finished, and return 0
+ * otherwise (if we still have more configuring to do for this
+ * proxy). */
+STATIC int
configure_proxy(managed_proxy_t *mp)
{
- int pos;
- char stdout_buf[200];
- smartlist_t *lines = NULL;
+ int configuration_finished = 0;
+ smartlist_t *proxy_output = NULL;
+ enum stream_status stream_status = 0;
/* if we haven't launched the proxy yet, do it now */
if (mp->conf_state == PT_PROTO_INFANT) {
@@ -375,34 +607,31 @@ configure_proxy(managed_proxy_t *mp)
mp->conf_state = PT_PROTO_FAILED_LAUNCH;
handle_finished_proxy(mp);
}
- return;
+ return 0;
}
tor_assert(mp->conf_state != PT_PROTO_INFANT);
tor_assert(mp->process_handle);
- pos = tor_read_all_handle(tor_process_get_stdout_pipe(mp->process_handle),
- stdout_buf, sizeof(stdout_buf) - 1, NULL);
- if (pos < 0) {
- log_notice(LD_GENERAL, "Failed to read data from managed proxy '%s'.",
- mp->argv[0]);
- mp->conf_state = PT_PROTO_BROKEN;
+ proxy_output =
+ tor_get_lines_from_handle(tor_process_get_stdout_pipe(mp->process_handle),
+ &stream_status);
+ if (!proxy_output) { /* failed to get input from proxy */
+ if (stream_status != IO_STREAM_EAGAIN) { /* bad stream status! */
+ mp->conf_state = PT_PROTO_BROKEN;
+ log_warn(LD_GENERAL, "The communication stream of managed proxy '%s' "
+ "is '%s'. Most probably the managed proxy stopped running. "
+ "This might be a bug of the managed proxy, a bug of Tor, or "
+ "a misconfiguration. Please enable logging on your managed "
+ "proxy and check the logs for errors.",
+ mp->argv[0], stream_status_to_string(stream_status));
+ }
+
goto done;
}
- if (pos == 0) /* proxy has nothing interesting to say. */
- return;
-
- /* End with a null even if there isn't a \r\n at the end */
- /* TODO: What if this is a partial line? */
- stdout_buf[pos] = '\0';
-
- /* Split up the buffer */
- lines = smartlist_new();
- tor_split_lines(lines, stdout_buf, pos);
-
/* Handle lines. */
- SMARTLIST_FOREACH_BEGIN(lines, const char *, line) {
+ SMARTLIST_FOREACH_BEGIN(proxy_output, const char *, line) {
handle_proxy_line(line, mp);
if (proxy_configuration_finished(mp))
goto done;
@@ -410,126 +639,66 @@ configure_proxy(managed_proxy_t *mp)
done:
/* if the proxy finished configuring, exit the loop. */
- if (proxy_configuration_finished(mp))
+ if (proxy_configuration_finished(mp)) {
handle_finished_proxy(mp);
-
- if (lines)
- smartlist_free(lines);
-}
-
-#else /* _WIN32 */
-
-/** Attempt to continue configuring managed proxy <b>mp</b>. */
-static void
-configure_proxy(managed_proxy_t *mp)
-{
- enum stream_status r;
- char stdout_buf[200];
-
- /* if we haven't launched the proxy yet, do it now */
- if (mp->conf_state == PT_PROTO_INFANT) {
- if (launch_managed_proxy(mp) < 0) { /* launch fail */
- mp->conf_state = PT_PROTO_FAILED_LAUNCH;
- handle_finished_proxy(mp);
- }
- return;
+ configuration_finished = 1;
}
- tor_assert(mp->conf_state != PT_PROTO_INFANT);
- tor_assert(mp->process_handle);
-
- while (1) {
- r = get_string_from_pipe(tor_process_get_stdout_pipe(mp->process_handle),
- stdout_buf, sizeof(stdout_buf) - 1);
-
- if (r == IO_STREAM_OKAY) { /* got a line; handle it! */
- handle_proxy_line((const char *)stdout_buf, mp);
- } else if (r == IO_STREAM_EAGAIN) { /* check back later */
- return;
- } else if (r == IO_STREAM_CLOSED || r == IO_STREAM_TERM) { /* snap! */
- log_warn(LD_GENERAL, "Our communication channel with the managed proxy "
- "'%s' closed. Most probably application stopped running.",
- mp->argv[0]);
- mp->conf_state = PT_PROTO_BROKEN;
- } else { /* unknown stream status */
- log_warn(LD_BUG, "Unknown stream status '%d' while configuring managed "
- "proxy '%s'.", (int)r, mp->argv[0]);
- }
-
- /* if the proxy finished configuring, exit the loop. */
- if (proxy_configuration_finished(mp)) {
- handle_finished_proxy(mp);
- return;
- }
+ if (proxy_output) {
+ SMARTLIST_FOREACH(proxy_output, char *, cp, tor_free(cp));
+ smartlist_free(proxy_output);
}
-}
-#endif /* _WIN32 */
+ return configuration_finished;
+}
/** Register server managed proxy <b>mp</b> transports to state */
static void
-register_server_proxy(managed_proxy_t *mp)
+register_server_proxy(const managed_proxy_t *mp)
{
- /* After we register this proxy's transports, we switch its
- mp->transports to a list containing strings of its transport
- names. (See transports.h) */
- smartlist_t *sm_tmp = smartlist_new();
-
tor_assert(mp->conf_state != PT_PROTO_COMPLETED);
+
SMARTLIST_FOREACH_BEGIN(mp->transports, transport_t *, t) {
save_transport_to_state(t->name, &t->addr, t->port);
- log_notice(LD_GENERAL, "Registered server transport '%s' at '%s:%d'",
- t->name, fmt_addr(&t->addr), (int)t->port);
- smartlist_add(sm_tmp, tor_strdup(t->name));
+ log_notice(LD_GENERAL, "Registered server transport '%s' at '%s'",
+ t->name, fmt_addrport(&t->addr, t->port));
+ control_event_transport_launched("server", t->name, &t->addr, t->port);
} SMARTLIST_FOREACH_END(t);
-
- /* Since server proxies don't register their transports in the
- circuitbuild.c subsystem, it's our duty to free them when we
- switch mp->transports to strings. */
- SMARTLIST_FOREACH(mp->transports, transport_t *, t, transport_free(t));
- smartlist_free(mp->transports);
-
- mp->transports = sm_tmp;
}
/** Register all the transports supported by client managed proxy
* <b>mp</b> to the bridge subsystem. */
static void
-register_client_proxy(managed_proxy_t *mp)
+register_client_proxy(const managed_proxy_t *mp)
{
int r;
- /* After we register this proxy's transports, we switch its
- mp->transports to a list containing strings of its transport
- names. (See transports.h) */
- smartlist_t *sm_tmp = smartlist_new();
tor_assert(mp->conf_state != PT_PROTO_COMPLETED);
+
SMARTLIST_FOREACH_BEGIN(mp->transports, transport_t *, t) {
- r = transport_add(t);
+ transport_t *transport_tmp = transport_copy(t);
+ r = transport_add(transport_tmp);
switch (r) {
case -1:
log_notice(LD_GENERAL, "Could not add transport %s. Skipping.", t->name);
- transport_free(t);
+ transport_free(transport_tmp);
break;
case 0:
- log_info(LD_GENERAL, "Succesfully registered transport %s", t->name);
- smartlist_add(sm_tmp, tor_strdup(t->name));
+ log_info(LD_GENERAL, "Successfully registered transport %s", t->name);
+ control_event_transport_launched("client", t->name, &t->addr, t->port);
break;
case 1:
- log_info(LD_GENERAL, "Succesfully registered transport %s", t->name);
- smartlist_add(sm_tmp, tor_strdup(t->name));
- transport_free(t);
+ log_info(LD_GENERAL, "Successfully registered transport %s", t->name);
+ control_event_transport_launched("client", t->name, &t->addr, t->port);
+ transport_free(transport_tmp);
break;
}
} SMARTLIST_FOREACH_END(t);
-
- smartlist_free(mp->transports);
- mp->transports = sm_tmp;
}
/** Register the transports of managed proxy <b>mp</b>. */
static INLINE void
-register_proxy(managed_proxy_t *mp)
+register_proxy(const managed_proxy_t *mp)
{
if (mp->is_server)
register_server_proxy(mp);
@@ -538,14 +707,11 @@ register_proxy(managed_proxy_t *mp)
}
/** Free memory allocated by managed proxy <b>mp</b>. */
-static void
+STATIC void
managed_proxy_destroy(managed_proxy_t *mp,
int also_terminate_process)
{
- if (mp->conf_state != PT_PROTO_COMPLETED)
- SMARTLIST_FOREACH(mp->transports, transport_t *, t, transport_free(t));
- else
- SMARTLIST_FOREACH(mp->transports, char *, t_name, tor_free(t_name));
+ SMARTLIST_FOREACH(mp->transports, transport_t *, t, transport_free(t));
/* free the transports smartlist */
smartlist_free(mp->transports);
@@ -555,7 +721,8 @@ managed_proxy_destroy(managed_proxy_t *mp,
smartlist_free(mp->transports_to_launch);
/* remove it from the list of managed proxies */
- smartlist_remove(managed_proxy_list, mp);
+ if (managed_proxy_list)
+ smartlist_remove(managed_proxy_list, mp);
/* free the argv */
free_execve_args(mp->argv);
@@ -592,7 +759,6 @@ handle_finished_proxy(managed_proxy_t *mp)
}
unconfigured_proxies_n--;
- tor_assert(unconfigured_proxies_n >= 0);
}
/** Return true if the configuration of the managed proxy <b>mp</b> is
@@ -623,7 +789,7 @@ handle_methods_done(const managed_proxy_t *mp)
/** Handle a configuration protocol <b>line</b> received from a
* managed proxy <b>mp</b>. */
-void
+STATIC void
handle_proxy_line(const char *line, managed_proxy_t *mp)
{
log_info(LD_GENERAL, "Got a line from managed proxy '%s': (%s)",
@@ -724,7 +890,7 @@ handle_proxy_line(const char *line, managed_proxy_t *mp)
}
/** Parses an ENV-ERROR <b>line</b> and warns the user accordingly. */
-void
+STATIC void
parse_env_error(const char *line)
{
/* (Length of the protocol string) plus (a space) and (the first char of
@@ -740,7 +906,7 @@ parse_env_error(const char *line)
/** Handles a VERSION <b>line</b>. Updates the configuration protocol
* version in <b>mp</b>. */
-int
+STATIC int
parse_version(const char *line, managed_proxy_t *mp)
{
if (strlen(line) < (strlen(PROTO_NEG_SUCCESS) + 2)) {
@@ -781,14 +947,14 @@ parse_method_error(const char *line, int is_server)
/** Parses an SMETHOD <b>line</b> and if well-formed it registers the
* new transport in <b>mp</b>. */
-int
+STATIC int
parse_smethod_line(const char *line, managed_proxy_t *mp)
{
int r;
smartlist_t *items = NULL;
char *method_name=NULL;
-
+ char *args_string=NULL;
char *addrport=NULL;
tor_addr_t tor_addr;
char *address=NULL;
@@ -805,6 +971,9 @@ parse_smethod_line(const char *line, managed_proxy_t *mp)
goto err;
}
+ /* Example of legit SMETHOD line:
+ SMETHOD obfs2 0.0.0.0:25612 ARGS:secret=supersekrit,key=superkey */
+
tor_assert(!strcmp(smartlist_get(items,0),PROTO_SMETHOD));
method_name = smartlist_get(items,1);
@@ -815,7 +984,7 @@ parse_smethod_line(const char *line, managed_proxy_t *mp)
}
addrport = smartlist_get(items, 2);
- if (tor_addr_port_split(LOG_PROTOCOL_WARN, addrport, &address, &port)<0) {
+ if (tor_addr_port_split(LOG_WARN, addrport, &address, &port)<0) {
log_warn(LD_CONFIG, "Error parsing transport "
"address '%s'", addrport);
goto err;
@@ -832,7 +1001,19 @@ parse_smethod_line(const char *line, managed_proxy_t *mp)
goto err;
}
- transport = transport_new(&tor_addr, port, method_name, PROXY_NONE);
+ if (smartlist_len(items) > 3) {
+ /* Seems like there are also some [options] in the SMETHOD line.
+ Let's see if we can parse them. */
+ char *options_string = smartlist_get(items, 3);
+ log_debug(LD_CONFIG, "Got options_string: %s", options_string);
+ if (!strcmpstart(options_string, "ARGS:")) {
+ args_string = options_string+strlen("ARGS:");
+ log_debug(LD_CONFIG, "Got ARGS: %s", args_string);
+ }
+ }
+
+ transport = transport_new(&tor_addr, port, method_name,
+ PROXY_NONE, args_string);
if (!transport)
goto err;
@@ -858,7 +1039,7 @@ parse_smethod_line(const char *line, managed_proxy_t *mp)
/** Parses a CMETHOD <b>line</b>, and if well-formed it registers
* the new transport in <b>mp</b>. */
-int
+STATIC int
parse_cmethod_line(const char *line, managed_proxy_t *mp)
{
int r;
@@ -907,7 +1088,7 @@ parse_cmethod_line(const char *line, managed_proxy_t *mp)
}
addrport = smartlist_get(items, 3);
- if (tor_addr_port_split(LOG_PROTOCOL_WARN, addrport, &address, &port)<0) {
+ if (tor_addr_port_split(LOG_WARN, addrport, &address, &port)<0) {
log_warn(LD_CONFIG, "Error parsing transport "
"address '%s'", addrport);
goto err;
@@ -924,7 +1105,7 @@ parse_cmethod_line(const char *line, managed_proxy_t *mp)
goto err;
}
- transport = transport_new(&tor_addr, port, method_name, socks_ver);
+ transport = transport_new(&tor_addr, port, method_name, socks_ver, NULL);
if (!transport)
goto err;
@@ -947,6 +1128,50 @@ parse_cmethod_line(const char *line, managed_proxy_t *mp)
return r;
}
+/** Return a newly allocated string that tor should place in
+ * TOR_PT_SERVER_TRANSPORT_OPTIONS while configuring the server
+ * manged proxy in <b>mp</b>. Return NULL if no such options are found. */
+STATIC char *
+get_transport_options_for_server_proxy(const managed_proxy_t *mp)
+{
+ char *options_string = NULL;
+ smartlist_t *string_sl = smartlist_new();
+
+ tor_assert(mp->is_server);
+
+ /** Loop over the transports of the proxy. If we have options for
+ any of them, format them appropriately and place them in our
+ smartlist. Finally, join our smartlist to get the final
+ string. */
+ SMARTLIST_FOREACH_BEGIN(mp->transports_to_launch, const char *, transport) {
+ smartlist_t *options_tmp_sl = NULL;
+ options_tmp_sl = get_options_for_server_transport(transport);
+ if (!options_tmp_sl)
+ continue;
+
+ /** Loop over the options of this transport, escape them, and
+ place them in the smartlist. */
+ SMARTLIST_FOREACH_BEGIN(options_tmp_sl, const char *, options) {
+ char *escaped_opts = tor_escape_str_for_pt_args(options, ":;\\");
+ smartlist_add_asprintf(string_sl, "%s:%s",
+ transport, escaped_opts);
+ tor_free(escaped_opts);
+ } SMARTLIST_FOREACH_END(options);
+
+ SMARTLIST_FOREACH(options_tmp_sl, char *, c, tor_free(c));
+ smartlist_free(options_tmp_sl);
+ } SMARTLIST_FOREACH_END(transport);
+
+ if (smartlist_len(string_sl)) {
+ options_string = smartlist_join_strings(string_sl, ";", 0, NULL);
+ }
+
+ SMARTLIST_FOREACH(string_sl, char *, t, tor_free(t));
+ smartlist_free(string_sl);
+
+ return options_string;
+}
+
/** Return the string that tor should place in TOR_PT_SERVER_BINDADDR
* while configuring the server managed proxy in <b>mp</b>. The
* string is stored in the heap, and it's the the responsibility of
@@ -981,6 +1206,8 @@ get_bindaddr_for_server_proxy(const managed_proxy_t *mp)
static process_environment_t *
create_managed_proxy_environment(const managed_proxy_t *mp)
{
+ const or_options_t *options = get_options();
+
/* Environment variables to be added to or set in mp's environment. */
smartlist_t *envs = smartlist_new();
/* XXXX The next time someone touches this code, shorten the name of
@@ -1018,8 +1245,10 @@ create_managed_proxy_environment(const managed_proxy_t *mp)
{
char *orport_tmp =
get_first_listener_addrport_string(CONN_TYPE_OR_LISTENER);
- smartlist_add_asprintf(envs, "TOR_PT_ORPORT=%s", orport_tmp);
- tor_free(orport_tmp);
+ if (orport_tmp) {
+ smartlist_add_asprintf(envs, "TOR_PT_ORPORT=%s", orport_tmp);
+ tor_free(orport_tmp);
+ }
}
{
@@ -1028,18 +1257,46 @@ create_managed_proxy_environment(const managed_proxy_t *mp)
tor_free(bindaddr_tmp);
}
+ {
+ char *server_transport_options =
+ get_transport_options_for_server_proxy(mp);
+ if (server_transport_options) {
+ smartlist_add_asprintf(envs, "TOR_PT_SERVER_TRANSPORT_OPTIONS=%s",
+ server_transport_options);
+ tor_free(server_transport_options);
+ }
+ }
+
/* XXX024 Remove the '=' here once versions of obfsproxy which
* assert that this env var exists are sufficiently dead.
*
* (If we remove this line entirely, some joker will stick this
* variable in Tor's environment and crash PTs that try to parse
* it even when not run in server mode.) */
- smartlist_add(envs, tor_strdup("TOR_PT_EXTENDED_SERVER_PORT="));
+
+ if (options->ExtORPort_lines) {
+ char *ext_or_addrport_tmp =
+ get_first_listener_addrport_string(CONN_TYPE_EXT_OR_LISTENER);
+ char *cookie_file_loc = get_ext_or_auth_cookie_file_name();
+
+ if (ext_or_addrport_tmp) {
+ smartlist_add_asprintf(envs, "TOR_PT_EXTENDED_SERVER_PORT=%s",
+ ext_or_addrport_tmp);
+ }
+ smartlist_add_asprintf(envs, "TOR_PT_AUTH_COOKIE_FILE=%s",
+ cookie_file_loc);
+
+ tor_free(ext_or_addrport_tmp);
+ tor_free(cookie_file_loc);
+
+ } else {
+ smartlist_add_asprintf(envs, "TOR_PT_EXTENDED_SERVER_PORT=");
+ }
}
SMARTLIST_FOREACH_BEGIN(envs, const char *, env_var) {
set_environment_variable_in_smartlist(merged_env_vars, env_var,
- _tor_free, 1);
+ tor_free_, 1);
} SMARTLIST_FOREACH_END(env_var);
env = process_environment_make(merged_env_vars);
@@ -1058,7 +1315,7 @@ create_managed_proxy_environment(const managed_proxy_t *mp)
* <b>proxy_argv</b>.
*
* Requires that proxy_argv have at least one element. */
-static managed_proxy_t *
+STATIC managed_proxy_t *
managed_proxy_create(const smartlist_t *transport_list,
char **proxy_argv, int is_server)
{
@@ -1109,19 +1366,20 @@ pt_kickstart_proxy(const smartlist_t *transport_list,
managed_proxy_create(transport_list, proxy_argv, is_server);
} else { /* known proxy. add its transport to its transport list */
- if (mp->got_hup) {
- /* If the managed proxy we found is marked by a SIGHUP, it means
- that it's not useless and should be kept. If it's marked for
- removal, unmark it and increase the unconfigured proxies so
- that we try to restart it if we need to. Afterwards, check if
- a transport_t for 'transport' used to exist before the SIGHUP
- and make sure it doesn't get deleted because we might reuse
- it. */
+ if (mp->was_around_before_config_read) {
+ /* If this managed proxy was around even before we read the
+ config this time, it means that it was already enabled before
+ and is not useless and should be kept. If it's marked for
+ removal, unmark it and make sure that we check whether it
+ needs to be restarted. */
if (mp->marked_for_removal) {
mp->marked_for_removal = 0;
check_if_restarts_needed = 1;
}
+ /* For each new transport, check if the managed proxy used to
+ support it before the SIGHUP. If that was the case, make sure
+ it doesn't get removed because we might reuse it. */
SMARTLIST_FOREACH_BEGIN(transport_list, const char *, transport) {
old_transport = transport_get_by_name(transport);
if (old_transport)
@@ -1143,7 +1401,7 @@ free_execve_args(char **arg)
char **tmp = arg;
while (*tmp) /* use the fact that the last element of the array is a
NULL pointer to know when to stop freeing */
- _tor_free(*tmp++);
+ tor_free_(*tmp++);
tor_free(arg);
}
@@ -1170,8 +1428,10 @@ pt_prepare_proxy_list_for_config_read(void)
tor_assert(mp->conf_state == PT_PROTO_COMPLETED);
+ /* Mark all proxies for removal, and also note that they have been
+ here before the config read. */
mp->marked_for_removal = 1;
- mp->got_hup = 1;
+ mp->was_around_before_config_read = 1;
SMARTLIST_FOREACH(mp->transports_to_launch, char *, t, tor_free(t));
smartlist_clear(mp->transports_to_launch);
} SMARTLIST_FOREACH_END(mp);
@@ -1181,6 +1441,153 @@ pt_prepare_proxy_list_for_config_read(void)
tor_assert(unconfigured_proxies_n == 0);
}
+/** Return a smartlist containing the ports where our pluggable
+ * transports are listening. */
+smartlist_t *
+get_transport_proxy_ports(void)
+{
+ smartlist_t *sl = NULL;
+
+ if (!managed_proxy_list)
+ return NULL;
+
+ /** XXX assume that external proxy ports have been forwarded
+ manually */
+ SMARTLIST_FOREACH_BEGIN(managed_proxy_list, const managed_proxy_t *, mp) {
+ if (!mp->is_server || mp->conf_state != PT_PROTO_COMPLETED)
+ continue;
+
+ if (!sl) sl = smartlist_new();
+
+ tor_assert(mp->transports);
+ SMARTLIST_FOREACH(mp->transports, const transport_t *, t,
+ smartlist_add_asprintf(sl, "%u:%u", t->port, t->port));
+
+ } SMARTLIST_FOREACH_END(mp);
+
+ return sl;
+}
+
+/** Return the pluggable transport string that we should display in
+ * our extra-info descriptor. If we shouldn't display such a string,
+ * or we have nothing to display, return NULL. The string is
+ * allocated on the heap and it's the responsibility of the caller to
+ * free it. */
+char *
+pt_get_extra_info_descriptor_string(void)
+{
+ char *the_string = NULL;
+ smartlist_t *string_chunks = NULL;
+
+ if (!managed_proxy_list)
+ return NULL;
+
+ string_chunks = smartlist_new();
+
+ /* For each managed proxy, add its transports to the chunks list. */
+ SMARTLIST_FOREACH_BEGIN(managed_proxy_list, const managed_proxy_t *, mp) {
+ if ((!mp->is_server) || (mp->conf_state != PT_PROTO_COMPLETED))
+ continue;
+
+ tor_assert(mp->transports);
+
+ SMARTLIST_FOREACH_BEGIN(mp->transports, const transport_t *, t) {
+ char *transport_args = NULL;
+
+ /* If the transport proxy returned "0.0.0.0" as its address, and
+ * we know our external IP address, use it. Otherwise, use the
+ * returned address. */
+ const char *addrport = NULL;
+ uint32_t external_ip_address = 0;
+ if (tor_addr_is_null(&t->addr) &&
+ router_pick_published_address(get_options(),
+ &external_ip_address) >= 0) {
+ tor_addr_t addr;
+ tor_addr_from_ipv4h(&addr, external_ip_address);
+ addrport = fmt_addrport(&addr, t->port);
+ } else {
+ addrport = fmt_addrport(&t->addr, t->port);
+ }
+
+ /* If this transport has any arguments with it, prepend a space
+ to them so that we can add them to the transport line. */
+ if (t->extra_info_args)
+ tor_asprintf(&transport_args, " %s", t->extra_info_args);
+
+ smartlist_add_asprintf(string_chunks,
+ "transport %s %s%s",
+ t->name, addrport,
+ transport_args ? transport_args : "");
+ tor_free(transport_args);
+ } SMARTLIST_FOREACH_END(t);
+
+ } SMARTLIST_FOREACH_END(mp);
+
+ if (smartlist_len(string_chunks) == 0) {
+ smartlist_free(string_chunks);
+ return NULL;
+ }
+
+ /* Join all the chunks into the final string. */
+ the_string = smartlist_join_strings(string_chunks, "\n", 1, NULL);
+
+ SMARTLIST_FOREACH(string_chunks, char *, s, tor_free(s));
+ smartlist_free(string_chunks);
+
+ return the_string;
+}
+
+/** Stringify the SOCKS arguments in <b>socks_args</b> according to
+ * 180_pluggable_transport.txt. The string is allocated on the heap
+ * and it's the responsibility of the caller to free it after use. */
+char *
+pt_stringify_socks_args(const smartlist_t *socks_args)
+{
+ /* tmp place to store escaped socks arguments, so that we can
+ concatenate them up afterwards */
+ smartlist_t *sl_tmp = NULL;
+ char *escaped_string = NULL;
+ char *new_string = NULL;
+
+ tor_assert(socks_args);
+ tor_assert(smartlist_len(socks_args) > 0);
+
+ sl_tmp = smartlist_new();
+
+ SMARTLIST_FOREACH_BEGIN(socks_args, const char *, s) {
+ /* Escape ';' and '\'. */
+ escaped_string = tor_escape_str_for_pt_args(s, ";\\");
+ if (!escaped_string)
+ goto done;
+
+ smartlist_add(sl_tmp, escaped_string);
+ } SMARTLIST_FOREACH_END(s);
+
+ new_string = smartlist_join_strings(sl_tmp, ";", 0, NULL);
+
+ done:
+ SMARTLIST_FOREACH(sl_tmp, char *, s, tor_free(s));
+ smartlist_free(sl_tmp);
+
+ return new_string;
+}
+
+/** Return a string of the SOCKS arguments that we should pass to the
+ * pluggable transports proxy in <b>addr</b>:<b>port</b> according to
+ * 180_pluggable_transport.txt. The string is allocated on the heap
+ * and it's the responsibility of the caller to free it after use. */
+char *
+pt_get_socks_args_for_proxy_addrport(const tor_addr_t *addr, uint16_t port)
+{
+ const smartlist_t *socks_args = NULL;
+
+ socks_args = get_socks_args_by_bridge_addrport(addr, port);
+ if (!socks_args)
+ return NULL;
+
+ return pt_stringify_socks_args(socks_args);
+}
+
/** The tor config was read.
* Destroy all managed proxies that were marked by a previous call to
* prepare_proxy_list_for_config_read() and are not used by the new
@@ -1204,6 +1611,12 @@ sweep_proxy_list(void)
void
pt_free_all(void)
{
+ if (transport_list) {
+ clear_transport_list();
+ smartlist_free(transport_list);
+ transport_list = NULL;
+ }
+
if (managed_proxy_list) {
/* If the proxy is in PT_PROTO_COMPLETED, it has registered its
transports and it's the duty of the circuitbuild.c subsystem to
diff --git a/src/or/transports.h b/src/or/transports.h
index 02f159a5d..1365ead00 100644
--- a/src/or/transports.h
+++ b/src/or/transports.h
@@ -1,6 +1,6 @@
/* Copyright (c) 2003-2004, Roger Dingledine
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -11,6 +11,33 @@
#ifndef TOR_TRANSPORTS_H
#define TOR_TRANSPORTS_H
+/** Represents a pluggable transport used by a bridge. */
+typedef struct transport_t {
+ /** SOCKS version: One of PROXY_SOCKS4, PROXY_SOCKS5. */
+ int socks_version;
+ /** Name of pluggable transport protocol */
+ char *name;
+ /** The IP address where the transport bound and is waiting for
+ * connections. */
+ tor_addr_t addr;
+ /** Port of proxy */
+ uint16_t port;
+ /** Boolean: We are re-parsing our transport list, and we are going to remove
+ * this one if we don't find it in the list of configured transports. */
+ unsigned marked_for_removal : 1;
+ /** Arguments for this transport that must be written to the
+ extra-info descriptor. */
+ char *extra_info_args;
+} transport_t;
+
+void mark_transport_list(void);
+void sweep_transport_list(void);
+int transport_add_from_config(const tor_addr_t *addr, uint16_t port,
+ const char *name, int socks_ver);
+void transport_free(transport_t *transport);
+
+transport_t *transport_get_by_name(const char *name);
+
void pt_kickstart_proxy(const smartlist_t *transport_list, char **proxy_argv,
int is_server);
@@ -23,11 +50,19 @@ void pt_configure_remaining_proxies(void);
int pt_proxies_configuration_pending(void);
+char *pt_get_extra_info_descriptor_string(void);
+
void pt_free_all(void);
void pt_prepare_proxy_list_for_config_read(void);
void sweep_proxy_list(void);
+smartlist_t *get_transport_proxy_ports(void);
+char *pt_stringify_socks_args(const smartlist_t *socks_args);
+
+char *pt_get_socks_args_for_proxy_addrport(const tor_addr_t *addr,
+ uint16_t port);
+
#ifdef PT_PRIVATE
/** State of the managed proxy configuration protocol. */
enum pt_proto_state {
@@ -62,43 +97,31 @@ typedef struct {
* this flag to signify that this proxy might need to be restarted
* so that it can listen for other transports according to the new
* torrc. */
- unsigned int got_hup : 1;
+ unsigned int was_around_before_config_read : 1;
/* transports to-be-launched by this proxy */
smartlist_t *transports_to_launch;
/* The 'transports' list contains all the transports this proxy has
- launched.
-
- Before a managed_proxy_t reaches the PT_PROTO_COMPLETED phase,
- this smartlist contains a 'transport_t' for every transport it
- has launched.
-
- When the managed_proxy_t reaches the PT_PROTO_COMPLETED phase, it
- registers all its transports to the circuitbuild.c subsystem. At
- that point the 'transport_t's are owned by the circuitbuild.c
- subsystem.
-
- To avoid carrying dangling 'transport_t's in this smartlist,
- right before the managed_proxy_t reaches the PT_PROTO_COMPLETED
- phase we replace all 'transport_t's with strings of their
- transport names.
-
- So, tl;dr:
- When (conf_state != PT_PROTO_COMPLETED) this list carries
- (transport_t *).
- When (conf_state == PT_PROTO_COMPLETED) this list carries
- (char *).
- */
+ launched. */
smartlist_t *transports;
} managed_proxy_t;
-int parse_cmethod_line(const char *line, managed_proxy_t *mp);
-int parse_smethod_line(const char *line, managed_proxy_t *mp);
+STATIC int parse_cmethod_line(const char *line, managed_proxy_t *mp);
+STATIC int parse_smethod_line(const char *line, managed_proxy_t *mp);
+
+STATIC int parse_version(const char *line, managed_proxy_t *mp);
+STATIC void parse_env_error(const char *line);
+STATIC void handle_proxy_line(const char *line, managed_proxy_t *mp);
+STATIC char *get_transport_options_for_server_proxy(const managed_proxy_t *mp);
+
+STATIC void managed_proxy_destroy(managed_proxy_t *mp,
+ int also_terminate_process);
+
+STATIC managed_proxy_t *managed_proxy_create(const smartlist_t *transport_list,
+ char **proxy_argv, int is_server);
-int parse_version(const char *line, managed_proxy_t *mp);
-void parse_env_error(const char *line);
-void handle_proxy_line(const char *line, managed_proxy_t *mp);
+STATIC int configure_proxy(managed_proxy_t *mp);
#endif
diff --git a/src/test/Makefile.am b/src/test/Makefile.am
deleted file mode 100644
index 31a464ee7..000000000
--- a/src/test/Makefile.am
+++ /dev/null
@@ -1,49 +0,0 @@
-TESTS = test
-
-noinst_PROGRAMS = test test-child bench
-
-AM_CPPFLAGS = -DSHARE_DATADIR="\"$(datadir)\"" \
- -DLOCALSTATEDIR="\"$(localstatedir)\"" \
- -DBINDIR="\"$(bindir)\"" \
- -I"$(top_srcdir)/src/or"
-
-# -L flags need to go in LDFLAGS. -l flags need to go in LDADD.
-# This seems to matter nowhere but on Windows, but I assure you that it
-# matters a lot there, and is quite hard to debug if you forget to do it.
-
-test_SOURCES = \
- test.c \
- test_addr.c \
- test_containers.c \
- test_crypto.c \
- test_data.c \
- test_dir.c \
- test_microdesc.c \
- test_pt.c \
- test_util.c \
- test_config.c \
- tinytest.c
-
-bench_SOURCES = \
- bench.c
-
-test_LDFLAGS = @TOR_LDFLAGS_zlib@ @TOR_LDFLAGS_openssl@ \
- @TOR_LDFLAGS_libevent@
-test_LDADD = ../or/libtor.a ../common/libor.a ../common/libor-crypto.a \
- ../common/libor-event.a \
- @TOR_ZLIB_LIBS@ @TOR_LIB_MATH@ @TOR_LIBEVENT_LIBS@ \
- @TOR_OPENSSL_LIBS@ @TOR_LIB_WS32@ @TOR_LIB_GDI@
-
-bench_LDFLAGS = @TOR_LDFLAGS_zlib@ @TOR_LDFLAGS_openssl@ \
- @TOR_LDFLAGS_libevent@
-bench_LDADD = ../or/libtor.a ../common/libor.a ../common/libor-crypto.a \
- ../common/libor-event.a \
- @TOR_ZLIB_LIBS@ @TOR_LIB_MATH@ @TOR_LIBEVENT_LIBS@ \
- @TOR_OPENSSL_LIBS@ @TOR_LIB_WS32@ @TOR_LIB_GDI@
-
-noinst_HEADERS = \
- tinytest.h \
- tinytest_macros.h \
- test.h
-
-
diff --git a/src/test/Makefile.nmake b/src/test/Makefile.nmake
index aec477cf9..822431f3b 100644
--- a/src/test/Makefile.nmake
+++ b/src/test/Makefile.nmake
@@ -1,20 +1,33 @@
-all: test.exe
+all: test.exe test-child.exe bench.exe
-CFLAGS = /I ..\win32 /I ..\..\..\build-alpha\include /I ..\common /I ..\or
+CFLAGS = /I ..\win32 /I ..\..\..\build-alpha\include /I ..\common /I ..\or \
+ /I ..\ext
LIBS = ..\..\..\build-alpha\lib\libevent.lib \
..\..\..\build-alpha\lib\libcrypto.lib \
..\..\..\build-alpha\lib\libssl.lib \
..\..\..\build-alpha\lib\libz.lib \
..\or\libtor.lib \
- ws2_32.lib advapi32.lib shell32.lib
+ ws2_32.lib advapi32.lib shell32.lib \
+ crypt32.lib gdi32.lib user32.lib
TEST_OBJECTS = test.obj test_addr.obj test_containers.obj \
- test_crypto.obj test_data.obj test_dir.obj test_microdesc.obj \
- test_pt.obj test_util.obj test_config.obj tinytest.obj
+ test_controller_events.ogj test_crypto.obj test_data.obj test_dir.obj \
+ test_microdesc.obj test_pt.obj test_util.obj test_config.obj \
+ test_cell_formats.obj test_replay.obj test_introduce.obj tinytest.obj \
+ test_hs.obj
+
+tinytest.obj: ..\ext\tinytest.c
+ $(CC) $(CFLAGS) /D snprintf=_snprintf /c ..\ext\tinytest.c
test.exe: $(TEST_OBJECTS)
- $(CC) $(CFLAGS) $(LIBS) ..\common\*.lib $(TEST_OBJECTS)
+ $(CC) $(CFLAGS) $(LIBS) ..\common\*.lib $(TEST_OBJECTS) /Fe$@
+
+bench.exe: bench.obj
+ $(CC) $(CFLAGS) bench.obj $(LIBS) ..\common\*.lib /Fe$@
+
+test-child.exe: test-child.obj
+ $(CC) $(CFLAGS) test-child.obj /Fe$@
clean:
- del $(TEST_OBJECTS) *.lib test.exe
+ del *.obj *.lib test.exe bench.exe test-child.exe
diff --git a/src/test/bench.c b/src/test/bench.c
index 3eae532d3..f6c33626f 100644
--- a/src/test/bench.c
+++ b/src/test/bench.c
@@ -1,6 +1,6 @@
/* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/* Ordinarily defined in tor_main.c; this bit is just here to provide one
@@ -14,10 +14,22 @@ const char tor_git_revision[] = "";
#include "orconfig.h"
-#define RELAY_PRIVATE
-
#include "or.h"
+#include "onion_tap.h"
#include "relay.h"
+#include <openssl/opensslv.h>
+#include <openssl/evp.h>
+#ifndef OPENSSL_NO_EC
+#include <openssl/ec.h>
+#include <openssl/ecdh.h>
+#include <openssl/obj_mac.h>
+#endif
+
+#include "config.h"
+#ifdef CURVE25519_ENABLED
+#include "crypto_curve25519.h"
+#include "onion_ntor.h"
+#endif
#if defined(HAVE_CLOCK_GETTIME) && defined(CLOCK_PROCESS_CPUTIME_ID)
static uint64_t nanostart;
@@ -97,6 +109,132 @@ bench_aes(void)
}
static void
+bench_onion_TAP(void)
+{
+ const int iters = 1<<9;
+ int i;
+ crypto_pk_t *key, *key2;
+ uint64_t start, end;
+ char os[TAP_ONIONSKIN_CHALLENGE_LEN];
+ char or[TAP_ONIONSKIN_REPLY_LEN];
+ crypto_dh_t *dh_out;
+
+ key = crypto_pk_new();
+ key2 = crypto_pk_new();
+ if (crypto_pk_generate_key_with_bits(key, 1024) < 0)
+ goto done;
+ if (crypto_pk_generate_key_with_bits(key2, 1024) < 0)
+ goto done;
+
+ reset_perftime();
+ start = perftime();
+ for (i = 0; i < iters; ++i) {
+ onion_skin_TAP_create(key, &dh_out, os);
+ crypto_dh_free(dh_out);
+ }
+ end = perftime();
+ printf("Client-side, part 1: %f usec.\n", NANOCOUNT(start, end, iters)/1e3);
+
+ onion_skin_TAP_create(key, &dh_out, os);
+ start = perftime();
+ for (i = 0; i < iters; ++i) {
+ char key_out[CPATH_KEY_MATERIAL_LEN];
+ onion_skin_TAP_server_handshake(os, key, NULL, or,
+ key_out, sizeof(key_out));
+ }
+ end = perftime();
+ printf("Server-side, key guessed right: %f usec\n",
+ NANOCOUNT(start, end, iters)/1e3);
+
+ start = perftime();
+ for (i = 0; i < iters; ++i) {
+ char key_out[CPATH_KEY_MATERIAL_LEN];
+ onion_skin_TAP_server_handshake(os, key2, key, or,
+ key_out, sizeof(key_out));
+ }
+ end = perftime();
+ printf("Server-side, key guessed wrong: %f usec.\n",
+ NANOCOUNT(start, end, iters)/1e3);
+
+ start = perftime();
+ for (i = 0; i < iters; ++i) {
+ crypto_dh_t *dh;
+ char key_out[CPATH_KEY_MATERIAL_LEN];
+ int s;
+ dh = crypto_dh_dup(dh_out);
+ s = onion_skin_TAP_client_handshake(dh, or, key_out, sizeof(key_out));
+ crypto_dh_free(dh);
+ tor_assert(s == 0);
+ }
+ end = perftime();
+ printf("Client-side, part 2: %f usec.\n",
+ NANOCOUNT(start, end, iters)/1e3);
+
+ done:
+ crypto_pk_free(key);
+ crypto_pk_free(key2);
+}
+
+#ifdef CURVE25519_ENABLED
+static void
+bench_onion_ntor(void)
+{
+ const int iters = 1<<10;
+ int i;
+ curve25519_keypair_t keypair1, keypair2;
+ uint64_t start, end;
+ uint8_t os[NTOR_ONIONSKIN_LEN];
+ uint8_t or[NTOR_REPLY_LEN];
+ ntor_handshake_state_t *state = NULL;
+ uint8_t nodeid[DIGEST_LEN];
+ di_digest256_map_t *keymap = NULL;
+
+ curve25519_secret_key_generate(&keypair1.seckey, 0);
+ curve25519_public_key_generate(&keypair1.pubkey, &keypair1.seckey);
+ curve25519_secret_key_generate(&keypair2.seckey, 0);
+ curve25519_public_key_generate(&keypair2.pubkey, &keypair2.seckey);
+ dimap_add_entry(&keymap, keypair1.pubkey.public_key, &keypair1);
+ dimap_add_entry(&keymap, keypair2.pubkey.public_key, &keypair2);
+
+ reset_perftime();
+ start = perftime();
+ for (i = 0; i < iters; ++i) {
+ onion_skin_ntor_create(nodeid, &keypair1.pubkey, &state, os);
+ ntor_handshake_state_free(state);
+ state = NULL;
+ }
+ end = perftime();
+ printf("Client-side, part 1: %f usec.\n", NANOCOUNT(start, end, iters)/1e3);
+
+ state = NULL;
+ onion_skin_ntor_create(nodeid, &keypair1.pubkey, &state, os);
+ start = perftime();
+ for (i = 0; i < iters; ++i) {
+ uint8_t key_out[CPATH_KEY_MATERIAL_LEN];
+ onion_skin_ntor_server_handshake(os, keymap, NULL, nodeid, or,
+ key_out, sizeof(key_out));
+ }
+ end = perftime();
+ printf("Server-side: %f usec\n",
+ NANOCOUNT(start, end, iters)/1e3);
+
+ start = perftime();
+ for (i = 0; i < iters; ++i) {
+ uint8_t key_out[CPATH_KEY_MATERIAL_LEN];
+ int s;
+ s = onion_skin_ntor_client_handshake(state, or, key_out, sizeof(key_out));
+ tor_assert(s == 0);
+ }
+ end = perftime();
+ printf("Client-side, part 2: %f usec.\n",
+ NANOCOUNT(start, end, iters)/1e3);
+
+ ntor_handshake_state_free(state);
+ dimap_free(keymap, NULL);
+}
+#endif
+
+static void
bench_cell_aes(void)
{
uint64_t start, end;
@@ -175,18 +313,18 @@ bench_dmap(void)
NANOCOUNT(pt3, pt4, iters*elts));
for (i = 0; i < iters; ++i) {
- SMARTLIST_FOREACH(sl, const char *, cp, n += digestset_isin(ds, cp));
- SMARTLIST_FOREACH(sl2, const char *, cp, n += digestset_isin(ds, cp));
+ SMARTLIST_FOREACH(sl, const char *, cp, n += digestset_contains(ds, cp));
+ SMARTLIST_FOREACH(sl2, const char *, cp, n += digestset_contains(ds, cp));
}
end = perftime();
- printf("digestset_isin: %.2f ns per element.\n",
+ printf("digestset_contains: %.2f ns per element.\n",
NANOCOUNT(pt4, end, iters*elts*2));
/* We need to use this, or else the whole loop gets optimized out. */
printf("Hits == %d\n", n);
for (i = 0; i < fpostests; ++i) {
crypto_rand(d, 20);
- if (digestset_isin(ds, d)) ++fp;
+ if (digestset_contains(ds, d)) ++fp;
}
printf("False positive rate on digestset: %.2f%%\n",
(fp/(double)fpostests)*100);
@@ -200,6 +338,28 @@ bench_dmap(void)
}
static void
+bench_siphash(void)
+{
+ char buf[128];
+ int lens[] = { 7, 8, 15, 16, 20, 32, 111, 128, -1 };
+ int i, j;
+ uint64_t start, end;
+ const int N = 300000;
+ crypto_rand(buf, sizeof(buf));
+
+ for (i = 0; lens[i] > 0; ++i) {
+ reset_perftime();
+ start = perftime();
+ for (j = 0; j < N; ++j) {
+ siphash24g(buf, lens[i]);
+ }
+ end = perftime();
+ printf("siphash24g(%d): %.2f ns per call\n",
+ lens[i], NANOCOUNT(start,end,N));
+ }
+}
+
+static void
bench_cell_ops(void)
{
const int iters = 1<<16;
@@ -214,8 +374,8 @@ bench_cell_ops(void)
crypto_rand((char*)cell->payload, sizeof(cell->payload));
/* Mock-up or_circuit_t */
- or_circ->_base.magic = OR_CIRCUIT_MAGIC;
- or_circ->_base.purpose = CIRCUIT_PURPOSE_OR;
+ or_circ->base_.magic = OR_CIRCUIT_MAGIC;
+ or_circ->base_.purpose = CIRCUIT_PURPOSE_OR;
/* Initialize crypto */
or_circ->p_crypto = crypto_cipher_new(NULL);
@@ -248,6 +408,95 @@ bench_cell_ops(void)
tor_free(cell);
}
+static void
+bench_dh(void)
+{
+ const int iters = 1<<10;
+ int i;
+ uint64_t start, end;
+
+ reset_perftime();
+ start = perftime();
+ for (i = 0; i < iters; ++i) {
+ char dh_pubkey_a[DH_BYTES], dh_pubkey_b[DH_BYTES];
+ char secret_a[DH_BYTES], secret_b[DH_BYTES];
+ ssize_t slen_a, slen_b;
+ crypto_dh_t *dh_a = crypto_dh_new(DH_TYPE_TLS);
+ crypto_dh_t *dh_b = crypto_dh_new(DH_TYPE_TLS);
+ crypto_dh_generate_public(dh_a);
+ crypto_dh_generate_public(dh_b);
+ crypto_dh_get_public(dh_a, dh_pubkey_a, sizeof(dh_pubkey_a));
+ crypto_dh_get_public(dh_b, dh_pubkey_b, sizeof(dh_pubkey_b));
+ slen_a = crypto_dh_compute_secret(LOG_NOTICE,
+ dh_a, dh_pubkey_b, sizeof(dh_pubkey_b),
+ secret_a, sizeof(secret_a));
+ slen_b = crypto_dh_compute_secret(LOG_NOTICE,
+ dh_b, dh_pubkey_a, sizeof(dh_pubkey_a),
+ secret_b, sizeof(secret_b));
+ tor_assert(slen_a == slen_b);
+ tor_assert(!memcmp(secret_a, secret_b, slen_a));
+ crypto_dh_free(dh_a);
+ crypto_dh_free(dh_b);
+ }
+ end = perftime();
+ printf("Complete DH handshakes (1024 bit, public and private ops):\n"
+ " %f millisec each.\n", NANOCOUNT(start, end, iters)/1e6);
+}
+
+#if (!defined(OPENSSL_NO_EC) \
+ && OPENSSL_VERSION_NUMBER >= OPENSSL_V_SERIES(1,0,0))
+#define HAVE_EC_BENCHMARKS
+static void
+bench_ecdh_impl(int nid, const char *name)
+{
+ const int iters = 1<<10;
+ int i;
+ uint64_t start, end;
+
+ reset_perftime();
+ start = perftime();
+ for (i = 0; i < iters; ++i) {
+ char secret_a[DH_BYTES], secret_b[DH_BYTES];
+ ssize_t slen_a, slen_b;
+ EC_KEY *dh_a = EC_KEY_new_by_curve_name(nid);
+ EC_KEY *dh_b = EC_KEY_new_by_curve_name(nid);
+ if (!dh_a || !dh_b) {
+ puts("Skipping. (No implementation?)");
+ return;
+ }
+
+ EC_KEY_generate_key(dh_a);
+ EC_KEY_generate_key(dh_b);
+ slen_a = ECDH_compute_key(secret_a, DH_BYTES,
+ EC_KEY_get0_public_key(dh_b), dh_a,
+ NULL);
+ slen_b = ECDH_compute_key(secret_b, DH_BYTES,
+ EC_KEY_get0_public_key(dh_a), dh_b,
+ NULL);
+
+ tor_assert(slen_a == slen_b);
+ tor_assert(!memcmp(secret_a, secret_b, slen_a));
+ EC_KEY_free(dh_a);
+ EC_KEY_free(dh_b);
+ }
+ end = perftime();
+ printf("Complete ECDH %s handshakes (2 public and 2 private ops):\n"
+ " %f millisec each.\n", name, NANOCOUNT(start, end, iters)/1e6);
+}
+
+static void
+bench_ecdh_p256(void)
+{
+ bench_ecdh_impl(NID_X9_62_prime256v1, "P-256");
+}
+
+static void
+bench_ecdh_p224(void)
+{
+ bench_ecdh_impl(NID_secp224r1, "P-224");
+}
+#endif
+
typedef void (*bench_fn)(void);
typedef struct benchmark_t {
@@ -260,9 +509,19 @@ typedef struct benchmark_t {
static struct benchmark_t benchmarks[] = {
ENT(dmap),
+ ENT(siphash),
ENT(aes),
+ ENT(onion_TAP),
+#ifdef CURVE25519_ENABLED
+ ENT(onion_ntor),
+#endif
ENT(cell_aes),
ENT(cell_ops),
+ ENT(dh),
+#ifdef HAVE_EC_BENCHMARKS
+ ENT(ecdh_p256),
+ ENT(ecdh_p224),
+#endif
{NULL,NULL,0}
};
@@ -286,6 +545,8 @@ main(int argc, const char **argv)
int i;
int list=0, n_enabled=0;
benchmark_t *b;
+ char *errmsg;
+ or_options_t *options;
tor_threads_init();
@@ -306,6 +567,17 @@ main(int argc, const char **argv)
reset_perftime();
crypto_seed_rng(1);
+ crypto_init_siphash_key();
+ options = options_new();
+ init_logging();
+ options->command = CMD_RUN_UNITTESTS;
+ options->DataDirectory = tor_strdup("");
+ options_init(options);
+ if (set_options(options, &errmsg) < 0) {
+ printf("Failed to set initial options: %s\n", errmsg);
+ tor_free(errmsg);
+ return 1;
+ }
for (b = benchmarks; b->name; ++b) {
if (b->enabled || n_enabled == 0) {
diff --git a/src/test/bt_test.py b/src/test/bt_test.py
new file mode 100755
index 000000000..8290509fa
--- /dev/null
+++ b/src/test/bt_test.py
@@ -0,0 +1,42 @@
+# Copyright 2013, The Tor Project, Inc
+# See LICENSE for licensing information
+
+"""
+bt_test.py
+
+This file tests the output from test-bt-cl to make sure it's as expected.
+
+Example usage:
+
+$ ./src/test/test-bt-cl crash | ./src/test/bt_test.py
+OK
+$ ./src/test/test-bt-cl assert | ./src/test/bt_test.py
+OK
+
+"""
+
+import sys
+
+
+def matches(lines, funcs):
+ if len(lines) < len(funcs):
+ return False
+ try:
+ for l, f in zip(lines, funcs):
+ l.index(f)
+ except ValueError:
+ return False
+ else:
+ return True
+
+FUNCNAMES = "crash oh_what a_tangled_web we_weave main".split()
+
+LINES = sys.stdin.readlines()
+
+for I in range(len(LINES)):
+ if matches(LINES[I:], FUNCNAMES):
+ print("OK")
+ break
+else:
+ print("BAD")
+
diff --git a/src/test/include.am b/src/test/include.am
new file mode 100644
index 000000000..fba439a61
--- /dev/null
+++ b/src/test/include.am
@@ -0,0 +1,121 @@
+TESTS += src/test/test
+
+noinst_PROGRAMS+= src/test/bench
+if UNITTESTS_ENABLED
+noinst_PROGRAMS+= src/test/test src/test/test-child
+endif
+
+src_test_AM_CPPFLAGS = -DSHARE_DATADIR="\"$(datadir)\"" \
+ -DLOCALSTATEDIR="\"$(localstatedir)\"" \
+ -DBINDIR="\"$(bindir)\"" \
+ -I"$(top_srcdir)/src/or" -I"$(top_srcdir)/src/ext" \
+ -DTOR_UNIT_TESTS
+
+# -L flags need to go in LDFLAGS. -l flags need to go in LDADD.
+# This seems to matter nowhere but on Windows, but I assure you that it
+# matters a lot there, and is quite hard to debug if you forget to do it.
+
+src_test_test_SOURCES = \
+ src/test/test.c \
+ src/test/test_addr.c \
+ src/test/test_buffers.c \
+ src/test/test_cell_formats.c \
+ src/test/test_circuitlist.c \
+ src/test/test_circuitmux.c \
+ src/test/test_containers.c \
+ src/test/test_controller_events.c \
+ src/test/test_crypto.c \
+ src/test/test_cell_queue.c \
+ src/test/test_data.c \
+ src/test/test_dir.c \
+ src/test/test_extorport.c \
+ src/test/test_introduce.c \
+ src/test/test_logging.c \
+ src/test/test_microdesc.c \
+ src/test/test_oom.c \
+ src/test/test_options.c \
+ src/test/test_pt.c \
+ src/test/test_relaycell.c \
+ src/test/test_replay.c \
+ src/test/test_routerkeys.c \
+ src/test/test_socks.c \
+ src/test/test_util.c \
+ src/test/test_config.c \
+ src/test/test_hs.c \
+ src/test/test_nodelist.c \
+ src/test/test_policy.c \
+ src/test/test_status.c \
+ src/ext/tinytest.c
+
+src_test_test_CFLAGS = $(AM_CFLAGS) $(TEST_CFLAGS)
+
+src_test_test_CPPFLAGS= $(src_test_AM_CPPFLAGS)
+
+src_test_bench_SOURCES = \
+ src/test/bench.c
+
+src_test_test_LDFLAGS = @TOR_LDFLAGS_zlib@ @TOR_LDFLAGS_openssl@ \
+ @TOR_LDFLAGS_libevent@
+src_test_test_LDADD = src/or/libtor-testing.a src/common/libor-testing.a \
+ src/common/libor-crypto-testing.a $(LIBDONNA) \
+ src/common/libor-event-testing.a \
+ @TOR_ZLIB_LIBS@ @TOR_LIB_MATH@ @TOR_LIBEVENT_LIBS@ \
+ @TOR_OPENSSL_LIBS@ @TOR_LIB_WS32@ @TOR_LIB_GDI@ @CURVE25519_LIBS@
+
+src_test_bench_LDFLAGS = @TOR_LDFLAGS_zlib@ @TOR_LDFLAGS_openssl@ \
+ @TOR_LDFLAGS_libevent@
+src_test_bench_LDADD = src/or/libtor.a src/common/libor.a \
+ src/common/libor-crypto.a $(LIBDONNA) \
+ src/common/libor-event.a \
+ @TOR_ZLIB_LIBS@ @TOR_LIB_MATH@ @TOR_LIBEVENT_LIBS@ \
+ @TOR_OPENSSL_LIBS@ @TOR_LIB_WS32@ @TOR_LIB_GDI@ @CURVE25519_LIBS@
+
+noinst_HEADERS+= \
+ src/test/test.h
+
+if CURVE25519_ENABLED
+noinst_PROGRAMS+= src/test/test-ntor-cl
+src_test_test_ntor_cl_SOURCES = src/test/test_ntor_cl.c
+src_test_test_ntor_cl_LDFLAGS = @TOR_LDFLAGS_zlib@ @TOR_LDFLAGS_openssl@
+src_test_test_ntor_cl_LDADD = src/or/libtor.a src/common/libor.a \
+ src/common/libor-crypto.a $(LIBDONNA) \
+ @TOR_ZLIB_LIBS@ @TOR_LIB_MATH@ \
+ @TOR_OPENSSL_LIBS@ @TOR_LIB_WS32@ @TOR_LIB_GDI@ @CURVE25519_LIBS@
+src_test_test_ntor_cl_AM_CPPFLAGS = \
+ -I"$(top_srcdir)/src/or"
+NTOR_TEST_DEPS=src/test/test-ntor-cl
+else
+NTOR_TEST_DEPS=
+endif
+
+if COVERAGE_ENABLED
+CMDLINE_TEST_TOR = ./src/or/tor-cov
+else
+CMDLINE_TEST_TOR = ./src/or/tor
+endif
+
+noinst_PROGRAMS += src/test/test-bt-cl
+src_test_test_bt_cl_SOURCES = src/test/test_bt_cl.c
+src_test_test_bt_cl_LDADD = src/common/libor-testing.a \
+ @TOR_LIB_MATH@ \
+ @TOR_LIB_WS32@ @TOR_LIB_GDI@
+src_test_test_bt_cl_CFLAGS = $(AM_CFLAGS) $(TEST_CFLAGS)
+src_test_test_bt_cl_CPPFLAGS= $(src_test_AM_CPPFLAGS)
+
+
+check-local: $(NTOR_TEST_DEPS) $(CMDLINE_TEST_TOR)
+if USEPYTHON
+ $(PYTHON) $(top_srcdir)/src/test/test_cmdline_args.py $(CMDLINE_TEST_TOR) "${top_srcdir}"
+if CURVE25519_ENABLED
+ $(PYTHON) $(top_srcdir)/src/test/ntor_ref.py test-tor
+ $(PYTHON) $(top_srcdir)/src/test/ntor_ref.py self-test
+endif
+ ./src/test/test-bt-cl assert | $(PYTHON) $(top_srcdir)/src/test/bt_test.py
+ ./src/test/test-bt-cl crash | $(PYTHON) $(top_srcdir)/src/test/bt_test.py
+endif
+
+EXTRA_DIST += \
+ src/test/bt_test.py \
+ src/test/ntor_ref.py \
+ src/test/slownacl_curve25519.py \
+ src/test/test_cmdline_args.py
diff --git a/src/test/ntor_ref.py b/src/test/ntor_ref.py
new file mode 100755
index 000000000..7d6e43e71
--- /dev/null
+++ b/src/test/ntor_ref.py
@@ -0,0 +1,405 @@
+#!/usr/bin/python
+# Copyright 2012-2013, The Tor Project, Inc
+# See LICENSE for licensing information
+
+"""
+ntor_ref.py
+
+
+This module is a reference implementation for the "ntor" protocol
+s proposed by Goldberg, Stebila, and Ustaoglu and as instantiated in
+Tor Proposal 216.
+
+It's meant to be used to validate Tor's ntor implementation. It
+requirs the curve25519 python module from the curve25519-donna
+package.
+
+ *** DO NOT USE THIS IN PRODUCTION. ***
+
+commands:
+
+ gen_kdf_vectors: Print out some test vectors for the RFC5869 KDF.
+ timing: Print a little timing information about this implementation's
+ handshake.
+ self-test: Try handshaking with ourself; make sure we can.
+ test-tor: Handshake with tor's ntor implementation via the program
+ src/test/test-ntor-cl; make sure we can.
+
+"""
+
+import binascii
+try:
+ import curve25519
+ curve25519mod = curve25519.keys
+except ImportError:
+ curve25519 = None
+ import slownacl_curve25519
+ curve25519mod = slownacl_curve25519
+
+import hashlib
+import hmac
+import subprocess
+import sys
+
+# **********************************************************************
+# Helpers and constants
+
+def HMAC(key,msg):
+ "Return the HMAC-SHA256 of 'msg' using the key 'key'."
+ H = hmac.new(key, b"", hashlib.sha256)
+ H.update(msg)
+ return H.digest()
+
+def H(msg,tweak):
+ """Return the hash of 'msg' using tweak 'tweak'. (In this version of ntor,
+ the tweaked hash is just HMAC with the tweak as the key.)"""
+ return HMAC(key=tweak,
+ msg=msg)
+
+def keyid(k):
+ """Return the 32-byte key ID of a public key 'k'. (Since we're
+ using curve25519, we let k be its own keyid.)
+ """
+ return k.serialize()
+
+NODE_ID_LENGTH = 20
+KEYID_LENGTH = 32
+G_LENGTH = 32
+H_LENGTH = 32
+
+PROTOID = b"ntor-curve25519-sha256-1"
+M_EXPAND = PROTOID + b":key_expand"
+T_MAC = PROTOID + b":mac"
+T_KEY = PROTOID + b":key_extract"
+T_VERIFY = PROTOID + b":verify"
+
+def H_mac(msg): return H(msg, tweak=T_MAC)
+def H_verify(msg): return H(msg, tweak=T_VERIFY)
+
+class PrivateKey(curve25519mod.Private):
+ """As curve25519mod.Private, but doesn't regenerate its public key
+ every time you ask for it.
+ """
+ def __init__(self):
+ curve25519mod.Private.__init__(self)
+ self._memo_public = None
+
+ def get_public(self):
+ if self._memo_public is None:
+ self._memo_public = curve25519mod.Private.get_public(self)
+
+ return self._memo_public
+
+# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+if sys.version < '3':
+ def int2byte(i):
+ return chr(i)
+else:
+ def int2byte(i):
+ return bytes([i])
+
+def kdf_rfc5869(key, salt, info, n):
+
+ prk = HMAC(key=salt, msg=key)
+
+ out = b""
+ last = b""
+ i = 1
+ while len(out) < n:
+ m = last + info + int2byte(i)
+ last = h = HMAC(key=prk, msg=m)
+ out += h
+ i = i + 1
+ return out[:n]
+
+def kdf_ntor(key, n):
+ return kdf_rfc5869(key, T_KEY, M_EXPAND, n)
+
+# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+def client_part1(node_id, pubkey_B):
+ """Initial handshake, client side.
+
+ From the specification:
+
+ <<To send a create cell, the client generates a keypair x,X =
+ KEYGEN(), and sends a CREATE cell with contents:
+
+ NODEID: ID -- ID_LENGTH bytes
+ KEYID: KEYID(B) -- H_LENGTH bytes
+ CLIENT_PK: X -- G_LENGTH bytes
+ >>
+
+ Takes node_id -- a digest of the server's identity key,
+ pubkey_B -- a public key for the server.
+ Returns a tuple of (client secret key x, client->server message)"""
+
+ assert len(node_id) == NODE_ID_LENGTH
+
+ key_id = keyid(pubkey_B)
+ seckey_x = PrivateKey()
+ pubkey_X = seckey_x.get_public().serialize()
+
+ message = node_id + key_id + pubkey_X
+
+ assert len(message) == NODE_ID_LENGTH + H_LENGTH + H_LENGTH
+ return seckey_x , message
+
+def hash_nil(x):
+ """Identity function: if we don't pass a hash function that does nothing,
+ the curve25519 python lib will try to sha256 it for us."""
+ return x
+
+def bad_result(r):
+ """Helper: given a result of multiplying a public key by a private key,
+ return True iff one of the inputs was broken"""
+ assert len(r) == 32
+ return r == '\x00'*32
+
+def server(seckey_b, my_node_id, message, keyBytes=72):
+ """Handshake step 2, server side.
+
+ From the spec:
+
+ <<
+ The server generates a keypair of y,Y = KEYGEN(), and computes
+
+ secret_input = EXP(X,y) | EXP(X,b) | ID | B | X | Y | PROTOID
+ KEY_SEED = H(secret_input, t_key)
+ verify = H(secret_input, t_verify)
+ auth_input = verify | ID | B | Y | X | PROTOID | "Server"
+
+ The server sends a CREATED cell containing:
+
+ SERVER_PK: Y -- G_LENGTH bytes
+ AUTH: H(auth_input, t_mac) -- H_LENGTH byets
+ >>
+
+ Takes seckey_b -- the server's secret key
+ my_node_id -- the servers's public key digest,
+ message -- a message from a client
+ keybytes -- amount of key material to generate
+
+ Returns a tuple of (key material, sever->client reply), or None on
+ error.
+ """
+
+ assert len(message) == NODE_ID_LENGTH + H_LENGTH + H_LENGTH
+
+ if my_node_id != message[:NODE_ID_LENGTH]:
+ return None
+
+ badness = (keyid(seckey_b.get_public()) !=
+ message[NODE_ID_LENGTH:NODE_ID_LENGTH+H_LENGTH])
+
+ pubkey_X = curve25519mod.Public(message[NODE_ID_LENGTH+H_LENGTH:])
+ seckey_y = PrivateKey()
+ pubkey_Y = seckey_y.get_public()
+ pubkey_B = seckey_b.get_public()
+ xy = seckey_y.get_shared_key(pubkey_X, hash_nil)
+ xb = seckey_b.get_shared_key(pubkey_X, hash_nil)
+
+ # secret_input = EXP(X,y) | EXP(X,b) | ID | B | X | Y | PROTOID
+ secret_input = (xy + xb + my_node_id +
+ pubkey_B.serialize() +
+ pubkey_X.serialize() +
+ pubkey_Y.serialize() +
+ PROTOID)
+
+ verify = H_verify(secret_input)
+
+ # auth_input = verify | ID | B | Y | X | PROTOID | "Server"
+ auth_input = (verify +
+ my_node_id +
+ pubkey_B.serialize() +
+ pubkey_Y.serialize() +
+ pubkey_X.serialize() +
+ PROTOID +
+ b"Server")
+
+ msg = pubkey_Y.serialize() + H_mac(auth_input)
+
+ badness += bad_result(xb)
+ badness += bad_result(xy)
+
+ if badness:
+ return None
+
+ keys = kdf_ntor(secret_input, keyBytes)
+
+ return keys, msg
+
+def client_part2(seckey_x, msg, node_id, pubkey_B, keyBytes=72):
+ """Handshake step 3: client side again.
+
+ From the spec:
+
+ <<
+ The client then checks Y is in G^* [see NOTE below], and computes
+
+ secret_input = EXP(Y,x) | EXP(B,x) | ID | B | X | Y | PROTOID
+ KEY_SEED = H(secret_input, t_key)
+ verify = H(secret_input, t_verify)
+ auth_input = verify | ID | B | Y | X | PROTOID | "Server"
+
+ The client verifies that AUTH == H(auth_input, t_mac).
+ >>
+
+ Takes seckey_x -- the secret key we generated in step 1.
+ msg -- the message from the server.
+ node_id -- the node_id we used in step 1.
+ server_key -- the same public key we used in step 1.
+ keyBytes -- the number of bytes we want to generate
+ Returns key material, or None on error
+
+ """
+ assert len(msg) == G_LENGTH + H_LENGTH
+
+ pubkey_Y = curve25519mod.Public(msg[:G_LENGTH])
+ their_auth = msg[G_LENGTH:]
+
+ pubkey_X = seckey_x.get_public()
+
+ yx = seckey_x.get_shared_key(pubkey_Y, hash_nil)
+ bx = seckey_x.get_shared_key(pubkey_B, hash_nil)
+
+
+ # secret_input = EXP(Y,x) | EXP(B,x) | ID | B | X | Y | PROTOID
+ secret_input = (yx + bx + node_id +
+ pubkey_B.serialize() +
+ pubkey_X.serialize() +
+ pubkey_Y.serialize() + PROTOID)
+
+ verify = H_verify(secret_input)
+
+ # auth_input = verify | ID | B | Y | X | PROTOID | "Server"
+ auth_input = (verify + node_id +
+ pubkey_B.serialize() +
+ pubkey_Y.serialize() +
+ pubkey_X.serialize() + PROTOID +
+ b"Server")
+
+ my_auth = H_mac(auth_input)
+
+ badness = my_auth != their_auth
+ badness = bad_result(yx) + bad_result(bx)
+
+ if badness:
+ return None
+
+ return kdf_ntor(secret_input, keyBytes)
+
+# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+def demo(node_id=b"iToldYouAboutStairs.", server_key=PrivateKey()):
+ """
+ Try to handshake with ourself.
+ """
+ x, create = client_part1(node_id, server_key.get_public())
+ skeys, created = server(server_key, node_id, create)
+ ckeys = client_part2(x, created, node_id, server_key.get_public())
+ assert len(skeys) == 72
+ assert len(ckeys) == 72
+ assert skeys == ckeys
+ print("OK")
+
+# ======================================================================
+def timing():
+ """
+ Use Python's timeit module to see how fast this nonsense is
+ """
+ import timeit
+ t = timeit.Timer(stmt="ntor_ref.demo(N,SK)",
+ setup="import ntor_ref,curve25519;N='ABCD'*5;SK=ntor_ref.PrivateKey()")
+ print(t.timeit(number=1000))
+
+# ======================================================================
+
+def kdf_vectors():
+ """
+ Generate some vectors to check our KDF.
+ """
+ import binascii
+ def kdf_vec(inp):
+ k = kdf(inp, T_KEY, M_EXPAND, 100)
+ print(repr(inp), "\n\""+ binascii.b2a_hex(k)+ "\"")
+ kdf_vec("")
+ kdf_vec("Tor")
+ kdf_vec("AN ALARMING ITEM TO FIND ON YOUR CREDIT-RATING STATEMENT")
+
+# ======================================================================
+
+
+def test_tor():
+ """
+ Call the test-ntor-cl command-line program to make sure we can
+ interoperate with Tor's ntor program
+ """
+ enhex=lambda s: binascii.b2a_hex(s)
+ dehex=lambda s: binascii.a2b_hex(s.strip())
+
+ PROG = b"./src/test/test-ntor-cl"
+ def tor_client1(node_id, pubkey_B):
+ " returns (msg, state) "
+ p = subprocess.Popen([PROG, b"client1", enhex(node_id),
+ enhex(pubkey_B.serialize())],
+ stdout=subprocess.PIPE)
+ return map(dehex, p.stdout.readlines())
+ def tor_server1(seckey_b, node_id, msg, n):
+ " returns (msg, keys) "
+ p = subprocess.Popen([PROG, "server1", enhex(seckey_b.serialize()),
+ enhex(node_id), enhex(msg), str(n)],
+ stdout=subprocess.PIPE)
+ return map(dehex, p.stdout.readlines())
+ def tor_client2(state, msg, n):
+ " returns (keys,) "
+ p = subprocess.Popen([PROG, "client2", enhex(state),
+ enhex(msg), str(n)],
+ stdout=subprocess.PIPE)
+ return map(dehex, p.stdout.readlines())
+
+
+ node_id = b"thisisatornodeid$#%^"
+ seckey_b = PrivateKey()
+ pubkey_B = seckey_b.get_public()
+
+ # Do a pure-Tor handshake
+ c2s_msg, c_state = tor_client1(node_id, pubkey_B)
+ s2c_msg, s_keys = tor_server1(seckey_b, node_id, c2s_msg, 90)
+ c_keys, = tor_client2(c_state, s2c_msg, 90)
+ assert c_keys == s_keys
+ assert len(c_keys) == 90
+
+ # Try a mixed handshake with Tor as the client
+ c2s_msg, c_state = tor_client1(node_id, pubkey_B)
+ s_keys, s2c_msg = server(seckey_b, node_id, c2s_msg, 90)
+ c_keys, = tor_client2(c_state, s2c_msg, 90)
+ assert c_keys == s_keys
+ assert len(c_keys) == 90
+
+ # Now do a mixed handshake with Tor as the server
+ c_x, c2s_msg = client_part1(node_id, pubkey_B)
+ s2c_msg, s_keys = tor_server1(seckey_b, node_id, c2s_msg, 90)
+ c_keys = client_part2(c_x, s2c_msg, node_id, pubkey_B, 90)
+ assert c_keys == s_keys
+ assert len(c_keys) == 90
+
+ print("OK")
+
+# ======================================================================
+
+if __name__ == '__main__':
+ if len(sys.argv) < 2:
+ print(__doc__)
+ elif sys.argv[1] == 'gen_kdf_vectors':
+ kdf_vectors()
+ elif sys.argv[1] == 'timing':
+ timing()
+ elif sys.argv[1] == 'self-test':
+ demo()
+ elif sys.argv[1] == 'test-tor':
+ test_tor()
+
+ else:
+ print(__doc__)
diff --git a/src/test/slownacl_curve25519.py b/src/test/slownacl_curve25519.py
new file mode 100644
index 000000000..4dabab61b
--- /dev/null
+++ b/src/test/slownacl_curve25519.py
@@ -0,0 +1,117 @@
+# This is the curve25519 implementation from Matthew Dempsky's "Slownacl"
+# library. It is in the public domain.
+#
+# It isn't constant-time. Don't use it except for testing.
+#
+# Nick got the slownacl source from:
+# https://github.com/mdempsky/dnscurve/tree/master/slownacl
+
+__all__ = ['smult_curve25519_base', 'smult_curve25519']
+
+import sys
+
+P = 2 ** 255 - 19
+A = 486662
+
+def expmod(b, e, m):
+ if e == 0: return 1
+ t = expmod(b, e // 2, m) ** 2 % m
+ if e & 1: t = (t * b) % m
+ return t
+
+def inv(x):
+ return expmod(x, P - 2, P)
+
+# Addition and doubling formulas taken from Appendix D of "Curve25519:
+# new Diffie-Hellman speed records".
+
+def add(n,m,d):
+ (xn,zn), (xm,zm), (xd,zd) = n, m, d
+ x = 4 * (xm * xn - zm * zn) ** 2 * zd
+ z = 4 * (xm * zn - zm * xn) ** 2 * xd
+ return (x % P, z % P)
+
+def double(n):
+ (xn,zn) = n
+ x = (xn ** 2 - zn ** 2) ** 2
+ z = 4 * xn * zn * (xn ** 2 + A * xn * zn + zn ** 2)
+ return (x % P, z % P)
+
+def curve25519(n, base):
+ one = (base,1)
+ two = double(one)
+ # f(m) evaluates to a tuple containing the mth multiple and the
+ # (m+1)th multiple of base.
+ def f(m):
+ if m == 1: return (one, two)
+ (pm, pm1) = f(m // 2)
+ if (m & 1):
+ return (add(pm, pm1, one), double(pm1))
+ return (double(pm), add(pm, pm1, one))
+ ((x,z), _) = f(n)
+ return (x * inv(z)) % P
+
+if sys.version < '3':
+ def b2i(c):
+ return ord(c)
+ def i2b(i):
+ return chr(i)
+ def ba2bs(ba):
+ return "".join(ba)
+else:
+ def b2i(c):
+ return c
+ def i2b(i):
+ return i
+ def ba2bs(ba):
+ return bytes(ba)
+
+def unpack(s):
+ if len(s) != 32: raise ValueError('Invalid Curve25519 argument')
+ return sum(b2i(s[i]) << (8 * i) for i in range(32))
+
+def pack(n):
+ return ba2bs([i2b((n >> (8 * i)) & 255) for i in range(32)])
+
+def clamp(n):
+ n &= ~7
+ n &= ~(128 << 8 * 31)
+ n |= 64 << 8 * 31
+ return n
+
+def smult_curve25519(n, p):
+ n = clamp(unpack(n))
+ p = unpack(p)
+ return pack(curve25519(n, p))
+
+def smult_curve25519_base(n):
+ n = clamp(unpack(n))
+ return pack(curve25519(n, 9))
+
+
+#
+# This part I'm adding in for compatibility with the curve25519 python
+# module. -Nick
+#
+import os
+
+class Private:
+ def __init__(self, secret=None, seed=None):
+ self.private = pack(clamp(unpack(os.urandom(32))))
+
+ def get_public(self):
+ return Public(smult_curve25519_base(self.private))
+
+ def get_shared_key(self, public, hashfn):
+ return hashfn(smult_curve25519(self.private, public.public))
+
+ def serialize(self):
+ return self.private
+
+class Public:
+ def __init__(self, public):
+ self.public = public
+
+ def serialize(self):
+ return self.public
+
diff --git a/src/test/test-child.c b/src/test/test-child.c
index c5725f1c5..ef10fbb92 100644
--- a/src/test/test-child.c
+++ b/src/test/test-child.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011-2012, The Tor Project, Inc. */
+/* Copyright (c) 2011-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#include <stdio.h>
diff --git a/src/test/test-network.sh b/src/test/test-network.sh
new file mode 100755
index 000000000..7b5986416
--- /dev/null
+++ b/src/test/test-network.sh
@@ -0,0 +1,47 @@
+#! /bin/sh
+
+until [ -z $1 ]
+do
+ case $1 in
+ --chutney-path)
+ export CHUTNEY_PATH="$2"
+ shift
+ ;;
+ --tor-path)
+ export TOR_DIR="$2"
+ shift
+ ;;
+ --flavo?r|--network-flavo?r)
+ export NETWORK_FLAVOUR="$2"
+ shift
+ ;;
+ *)
+ echo "Sorry, I don't know what to do with '$1'."
+ exit 2
+ ;;
+ esac
+ shift
+done
+
+TOR_DIR="${TOR_DIR:-$PWD}"
+NETWORK_FLAVOUR=${NETWORK_FLAVOUR:-basic}
+CHUTNEY_NETWORK=networks/$NETWORK_FLAVOUR
+myname=$(basename $0)
+
+[ -d "$CHUTNEY_PATH" ] && [ -x "$CHUTNEY_PATH/chutney" ] || {
+ echo "$myname: missing 'chutney' in CHUTNEY_PATH ($CHUTNEY_PATH)"
+ exit 1
+}
+cd "$CHUTNEY_PATH"
+# For picking up the right tor binaries.
+PATH="$TOR_DIR/src/or:$TOR_DIR/src/tools:$PATH"
+./tools/bootstrap-network.sh $NETWORK_FLAVOUR || exit 2
+
+# Sleep some, waiting for the network to bootstrap.
+# TODO: Add chutney command 'bootstrap-status' and use that instead.
+BOOTSTRAP_TIME=18
+echo -n "$myname: sleeping for $BOOTSTRAP_TIME seconds"
+n=$BOOTSTRAP_TIME; while [ $n -gt 0 ]; do
+ sleep 1; n=$(expr $n - 1); echo -n .
+done; echo ""
+./chutney verify $CHUTNEY_NETWORK
diff --git a/src/test/test.c b/src/test/test.c
index ddfd6337b..8bce9c91f 100644
--- a/src/test/test.c
+++ b/src/test/test.c
@@ -1,6 +1,6 @@
/* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/* Ordinarily defined in tor_main.c; this bit is just here to provide one
@@ -28,11 +28,11 @@ const char tor_git_revision[] = "";
/* These macros pull in declarations for some functions and structures that
* are typically file-private. */
-#define BUFFERS_PRIVATE
-#define CONFIG_PRIVATE
#define GEOIP_PRIVATE
#define ROUTER_PRIVATE
-#define CIRCUIT_PRIVATE
+#define CIRCUITSTATS_PRIVATE
+#define CIRCUITLIST_PRIVATE
+#define STATEFILE_PRIVATE
/*
* Linux doesn't provide lround in math.h by default, but mac os does...
@@ -44,19 +44,29 @@ double fabs(double x);
#include "or.h"
#include "buffers.h"
-#include "circuitbuild.h"
+#include "circuitlist.h"
+#include "circuitstats.h"
#include "config.h"
#include "connection_edge.h"
#include "geoip.h"
#include "rendcommon.h"
#include "test.h"
#include "torgzip.h"
+#ifdef ENABLE_MEMPOOLS
#include "mempool.h"
+#endif
#include "memarea.h"
#include "onion.h"
+#include "onion_ntor.h"
+#include "onion_tap.h"
#include "policies.h"
#include "rephist.h"
#include "routerparse.h"
+#include "statefile.h"
+#ifdef CURVE25519_ENABLED
+#include "crypto_curve25519.h"
+#include "onion_ntor.h"
+#endif
#ifdef USE_DMALLOC
#include <dmalloc.h>
@@ -84,8 +94,14 @@ setup_directory(void)
{
static int is_setup = 0;
int r;
+ char rnd[256], rnd32[256];
if (is_setup) return;
+/* Due to base32 limitation needs to be a multiple of 5. */
+#define RAND_PATH_BYTES 5
+ crypto_rand(rnd, RAND_PATH_BYTES);
+ base32_encode(rnd32, sizeof(rnd32), rnd, RAND_PATH_BYTES);
+
#ifdef _WIN32
{
char buf[MAX_PATH];
@@ -94,11 +110,12 @@ setup_directory(void)
if (!GetTempPathA(sizeof(buf),buf))
tmp = "c:\\windows\\temp";
tor_snprintf(temp_dir, sizeof(temp_dir),
- "%s\\tor_test_%d", tmp, (int)getpid());
+ "%s\\tor_test_%d_%s", tmp, (int)getpid(), rnd32);
r = mkdir(temp_dir);
}
#else
- tor_snprintf(temp_dir, sizeof(temp_dir), "/tmp/tor_test_%d", (int) getpid());
+ tor_snprintf(temp_dir, sizeof(temp_dir), "/tmp/tor_test_%d_%s",
+ (int) getpid(), rnd32);
r = mkdir(temp_dir, 0700);
#endif
if (r) {
@@ -205,655 +222,239 @@ free_pregenerated_keys(void)
}
}
-typedef struct socks_test_data_t {
- socks_request_t *req;
- buf_t *buf;
-} socks_test_data_t;
-
-static void *
-socks_test_setup(const struct testcase_t *testcase)
-{
- socks_test_data_t *data = tor_malloc(sizeof(socks_test_data_t));
- (void)testcase;
- data->buf = buf_new_with_capacity(256);
- data->req = socks_request_new();
- config_register_addressmaps(get_options());
- return data;
-}
-static int
-socks_test_cleanup(const struct testcase_t *testcase, void *ptr)
-{
- socks_test_data_t *data = ptr;
- (void)testcase;
- buf_free(data->buf);
- socks_request_free(data->req);
- tor_free(data);
- return 1;
-}
-
-const struct testcase_setup_t socks_setup = {
- socks_test_setup, socks_test_cleanup
-};
-
-#define SOCKS_TEST_INIT() \
- socks_test_data_t *testdata = ptr; \
- buf_t *buf = testdata->buf; \
- socks_request_t *socks = testdata->req;
-#define ADD_DATA(buf, s) \
- write_to_buf(s, sizeof(s)-1, buf)
-
-static void
-socks_request_clear(socks_request_t *socks)
-{
- tor_free(socks->username);
- tor_free(socks->password);
- memset(socks, 0, sizeof(socks_request_t));
-}
-
-/** Perform unsupported SOCKS 4 commands */
-static void
-test_socks_4_unsupported_commands(void *ptr)
-{
- SOCKS_TEST_INIT();
-
- /* SOCKS 4 Send BIND [02] to IP address 2.2.2.2:4369 */
- ADD_DATA(buf, "\x04\x02\x11\x11\x02\x02\x02\x02\x00");
- test_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
- get_options()->SafeSocks) == -1);
- test_eq(4, socks->socks_version);
- test_eq(0, socks->replylen); /* XXX: shouldn't tor reply? */
-
- done:
- ;
-}
-
-/** Perform supported SOCKS 4 commands */
+/** Run unit tests for the onion handshake code. */
static void
-test_socks_4_supported_commands(void *ptr)
+test_onion_handshake(void)
{
- SOCKS_TEST_INIT();
-
- test_eq(0, buf_datalen(buf));
-
- /* SOCKS 4 Send CONNECT [01] to IP address 2.2.2.2:4370 */
- ADD_DATA(buf, "\x04\x01\x11\x12\x02\x02\x02\x03\x00");
- test_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
- get_options()->SafeSocks) == 1);
- test_eq(4, socks->socks_version);
- test_eq(0, socks->replylen); /* XXX: shouldn't tor reply? */
- test_eq(SOCKS_COMMAND_CONNECT, socks->command);
- test_streq("2.2.2.3", socks->address);
- test_eq(4370, socks->port);
- test_assert(socks->got_auth == 0);
- test_assert(! socks->username);
-
- test_eq(0, buf_datalen(buf));
- socks_request_clear(socks);
-
- /* SOCKS 4 Send CONNECT [01] to IP address 2.2.2.2:4369 with userid*/
- ADD_DATA(buf, "\x04\x01\x11\x12\x02\x02\x02\x04me\x00");
- test_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
- get_options()->SafeSocks) == 1);
- test_eq(4, socks->socks_version);
- test_eq(0, socks->replylen); /* XXX: shouldn't tor reply? */
- test_eq(SOCKS_COMMAND_CONNECT, socks->command);
- test_streq("2.2.2.4", socks->address);
- test_eq(4370, socks->port);
- test_assert(socks->got_auth == 1);
- test_assert(socks->username);
- test_eq(2, socks->usernamelen);
- test_memeq("me", socks->username, 2);
-
- test_eq(0, buf_datalen(buf));
- socks_request_clear(socks);
-
- /* SOCKS 4a Send RESOLVE [F0] request for torproject.org */
- ADD_DATA(buf, "\x04\xF0\x01\x01\x00\x00\x00\x02me\x00torproject.org\x00");
- test_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
- get_options()->SafeSocks) == 1);
- test_eq(4, socks->socks_version);
- test_eq(0, socks->replylen); /* XXX: shouldn't tor reply? */
- test_streq("torproject.org", socks->address);
-
- test_eq(0, buf_datalen(buf));
+ /* client-side */
+ crypto_dh_t *c_dh = NULL;
+ char c_buf[TAP_ONIONSKIN_CHALLENGE_LEN];
+ char c_keys[40];
+ /* server-side */
+ char s_buf[TAP_ONIONSKIN_REPLY_LEN];
+ char s_keys[40];
+ int i;
+ /* shared */
+ crypto_pk_t *pk = NULL, *pk2 = NULL;
- done:
- ;
-}
+ pk = pk_generate(0);
+ pk2 = pk_generate(1);
-/** Perform unsupported SOCKS 5 commands */
-static void
-test_socks_5_unsupported_commands(void *ptr)
-{
- SOCKS_TEST_INIT();
-
- /* SOCKS 5 Send unsupported BIND [02] command */
- ADD_DATA(buf, "\x05\x02\x00\x01");
-
- test_eq(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
- get_options()->SafeSocks), 0);
- test_eq(0, buf_datalen(buf));
- test_eq(5, socks->socks_version);
- test_eq(2, socks->replylen);
- test_eq(5, socks->reply[0]);
- test_eq(0, socks->reply[1]);
- ADD_DATA(buf, "\x05\x02\x00\x01\x02\x02\x02\x01\x01\x01");
- test_eq(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
- get_options()->SafeSocks), -1);
- /* XXX: shouldn't tor reply 'command not supported' [07]? */
-
- buf_clear(buf);
- socks_request_clear(socks);
-
- /* SOCKS 5 Send unsupported UDP_ASSOCIATE [03] command */
- ADD_DATA(buf, "\x05\x03\x00\x01\x02");
- test_eq(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
- get_options()->SafeSocks), 0);
- test_eq(5, socks->socks_version);
- test_eq(2, socks->replylen);
- test_eq(5, socks->reply[0]);
- test_eq(0, socks->reply[1]);
- ADD_DATA(buf, "\x05\x03\x00\x01\x02\x02\x02\x01\x01\x01");
- test_eq(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
- get_options()->SafeSocks), -1);
- /* XXX: shouldn't tor reply 'command not supported' [07]? */
+ /* client handshake 1. */
+ memset(c_buf, 0, TAP_ONIONSKIN_CHALLENGE_LEN);
+ test_assert(! onion_skin_TAP_create(pk, &c_dh, c_buf));
+
+ for (i = 1; i <= 3; ++i) {
+ crypto_pk_t *k1, *k2;
+ if (i==1) {
+ /* server handshake: only one key known. */
+ k1 = pk; k2 = NULL;
+ } else if (i==2) {
+ /* server handshake: try the right key first. */
+ k1 = pk; k2 = pk2;
+ } else {
+ /* server handshake: try the right key second. */
+ k1 = pk2; k2 = pk;
+ }
- done:
- ;
-}
+ memset(s_buf, 0, TAP_ONIONSKIN_REPLY_LEN);
+ memset(s_keys, 0, 40);
+ test_assert(! onion_skin_TAP_server_handshake(c_buf, k1, k2,
+ s_buf, s_keys, 40));
-/** Perform supported SOCKS 5 commands */
-static void
-test_socks_5_supported_commands(void *ptr)
-{
- SOCKS_TEST_INIT();
-
- /* SOCKS 5 Send CONNECT [01] to IP address 2.2.2.2:4369 */
- ADD_DATA(buf, "\x05\x01\x00");
- test_eq(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
- get_options()->SafeSocks), 0);
- test_eq(5, socks->socks_version);
- test_eq(2, socks->replylen);
- test_eq(5, socks->reply[0]);
- test_eq(0, socks->reply[1]);
-
- ADD_DATA(buf, "\x05\x01\x00\x01\x02\x02\x02\x02\x11\x11");
- test_eq(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
- get_options()->SafeSocks), 1);
- test_streq("2.2.2.2", socks->address);
- test_eq(4369, socks->port);
-
- test_eq(0, buf_datalen(buf));
- socks_request_clear(socks);
-
- /* SOCKS 5 Send CONNECT [01] to FQDN torproject.org:4369 */
- ADD_DATA(buf, "\x05\x01\x00");
- ADD_DATA(buf, "\x05\x01\x00\x03\x0Etorproject.org\x11\x11");
- test_eq(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
- get_options()->SafeSocks), 1);
-
- test_eq(5, socks->socks_version);
- test_eq(2, socks->replylen);
- test_eq(5, socks->reply[0]);
- test_eq(0, socks->reply[1]);
- test_streq("torproject.org", socks->address);
- test_eq(4369, socks->port);
-
- test_eq(0, buf_datalen(buf));
- socks_request_clear(socks);
-
- /* SOCKS 5 Send RESOLVE [F0] request for torproject.org:4369 */
- ADD_DATA(buf, "\x05\x01\x00");
- ADD_DATA(buf, "\x05\xF0\x00\x03\x0Etorproject.org\x01\x02");
- test_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
- get_options()->SafeSocks) == 1);
- test_eq(5, socks->socks_version);
- test_eq(2, socks->replylen);
- test_eq(5, socks->reply[0]);
- test_eq(0, socks->reply[1]);
- test_streq("torproject.org", socks->address);
-
- test_eq(0, buf_datalen(buf));
- socks_request_clear(socks);
-
- /* SOCKS 5 Send RESOLVE_PTR [F1] for IP address 2.2.2.5 */
- ADD_DATA(buf, "\x05\x01\x00");
- ADD_DATA(buf, "\x05\xF1\x00\x01\x02\x02\x02\x05\x01\x03");
- test_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
- get_options()->SafeSocks) == 1);
- test_eq(5, socks->socks_version);
- test_eq(2, socks->replylen);
- test_eq(5, socks->reply[0]);
- test_eq(0, socks->reply[1]);
- test_streq("2.2.2.5", socks->address);
-
- test_eq(0, buf_datalen(buf));
+ /* client handshake 2 */
+ memset(c_keys, 0, 40);
+ test_assert(! onion_skin_TAP_client_handshake(c_dh, s_buf, c_keys, 40));
+ test_memeq(c_keys, s_keys, 40);
+ memset(s_buf, 0, 40);
+ test_memneq(c_keys, s_buf, 40);
+ }
done:
- ;
+ crypto_dh_free(c_dh);
+ crypto_pk_free(pk);
+ crypto_pk_free(pk2);
}
-/** Perform SOCKS 5 authentication */
static void
-test_socks_5_no_authenticate(void *ptr)
+test_bad_onion_handshake(void *arg)
{
- SOCKS_TEST_INIT();
-
- /*SOCKS 5 No Authentication */
- ADD_DATA(buf,"\x05\x01\x00");
- test_assert(!fetch_from_buf_socks(buf, socks,
- get_options()->TestSocks,
- get_options()->SafeSocks));
- test_eq(2, socks->replylen);
- test_eq(5, socks->reply[0]);
- test_eq(SOCKS_NO_AUTH, socks->reply[1]);
-
- test_eq(0, buf_datalen(buf));
-
- /*SOCKS 5 Send username/password anyway - pretend to be broken */
- ADD_DATA(buf,"\x01\x02\x01\x01\x02\x01\x01");
- test_assert(!fetch_from_buf_socks(buf, socks,
- get_options()->TestSocks,
- get_options()->SafeSocks));
- test_eq(5, socks->socks_version);
- test_eq(2, socks->replylen);
- test_eq(5, socks->reply[0]);
- test_eq(0, socks->reply[1]);
-
- test_eq(2, socks->usernamelen);
- test_eq(2, socks->passwordlen);
-
- test_memeq("\x01\x01", socks->username, 2);
- test_memeq("\x01\x01", socks->password, 2);
-
- done:
- ;
-}
+ char junk_buf[TAP_ONIONSKIN_CHALLENGE_LEN];
+ char junk_buf2[TAP_ONIONSKIN_CHALLENGE_LEN];
+ /* client-side */
+ crypto_dh_t *c_dh = NULL;
+ char c_buf[TAP_ONIONSKIN_CHALLENGE_LEN];
+ char c_keys[40];
+ /* server-side */
+ char s_buf[TAP_ONIONSKIN_REPLY_LEN];
+ char s_keys[40];
+ /* shared */
+ crypto_pk_t *pk = NULL, *pk2 = NULL;
-/** Perform SOCKS 5 authentication */
-static void
-test_socks_5_authenticate(void *ptr)
-{
- SOCKS_TEST_INIT();
+ (void)arg;
- /* SOCKS 5 Negotiate username/password authentication */
- ADD_DATA(buf, "\x05\x01\x02");
+ pk = pk_generate(0);
+ pk2 = pk_generate(1);
- test_assert(!fetch_from_buf_socks(buf, socks,
- get_options()->TestSocks,
- get_options()->SafeSocks));
- test_eq(2, socks->replylen);
- test_eq(5, socks->reply[0]);
- test_eq(SOCKS_USER_PASS, socks->reply[1]);
- test_eq(5, socks->socks_version);
+ /* Server: Case 1: the encrypted data is degenerate. */
+ memset(junk_buf, 0, sizeof(junk_buf));
+ crypto_pk_public_hybrid_encrypt(pk, junk_buf2, TAP_ONIONSKIN_CHALLENGE_LEN,
+ junk_buf, DH_KEY_LEN, PK_PKCS1_OAEP_PADDING, 1);
+ tt_int_op(-1, ==,
+ onion_skin_TAP_server_handshake(junk_buf2, pk, NULL,
+ s_buf, s_keys, 40));
- test_eq(0, buf_datalen(buf));
+ /* Server: Case 2: the encrypted data is not long enough. */
+ memset(junk_buf, 0, sizeof(junk_buf));
+ memset(junk_buf2, 0, sizeof(junk_buf2));
+ crypto_pk_public_encrypt(pk, junk_buf2, sizeof(junk_buf2),
+ junk_buf, 48, PK_PKCS1_OAEP_PADDING);
+ tt_int_op(-1, ==,
+ onion_skin_TAP_server_handshake(junk_buf2, pk, NULL,
+ s_buf, s_keys, 40));
- /* SOCKS 5 Send username/password */
- ADD_DATA(buf, "\x01\x02me\x08mypasswd");
- test_assert(!fetch_from_buf_socks(buf, socks,
- get_options()->TestSocks,
- get_options()->SafeSocks));
- test_eq(5, socks->socks_version);
- test_eq(2, socks->replylen);
- test_eq(5, socks->reply[0]);
- test_eq(0, socks->reply[1]);
+ /* client handshake 1: do it straight. */
+ memset(c_buf, 0, TAP_ONIONSKIN_CHALLENGE_LEN);
+ test_assert(! onion_skin_TAP_create(pk, &c_dh, c_buf));
- test_eq(2, socks->usernamelen);
- test_eq(8, socks->passwordlen);
+ /* Server: Case 3: we just don't have the right key. */
+ tt_int_op(-1, ==,
+ onion_skin_TAP_server_handshake(c_buf, pk2, NULL,
+ s_buf, s_keys, 40));
- test_memeq("me", socks->username, 2);
- test_memeq("mypasswd", socks->password, 8);
+ /* Server: Case 4: The RSA-encrypted portion is corrupt. */
+ c_buf[64] ^= 33;
+ tt_int_op(-1, ==,
+ onion_skin_TAP_server_handshake(c_buf, pk, NULL,
+ s_buf, s_keys, 40));
+ c_buf[64] ^= 33;
- done:
- ;
-}
+ /* (Let the server procede) */
+ tt_int_op(0, ==,
+ onion_skin_TAP_server_handshake(c_buf, pk, NULL,
+ s_buf, s_keys, 40));
-/** Perform SOCKS 5 authentication and send data all in one go */
-static void
-test_socks_5_authenticate_with_data(void *ptr)
-{
- SOCKS_TEST_INIT();
-
- /* SOCKS 5 Negotiate username/password authentication */
- ADD_DATA(buf, "\x05\x01\x02");
-
- test_assert(!fetch_from_buf_socks(buf, socks,
- get_options()->TestSocks,
- get_options()->SafeSocks));
- test_eq(2, socks->replylen);
- test_eq(5, socks->reply[0]);
- test_eq(SOCKS_USER_PASS, socks->reply[1]);
- test_eq(5, socks->socks_version);
-
- test_eq(0, buf_datalen(buf));
-
- /* SOCKS 5 Send username/password */
- /* SOCKS 5 Send CONNECT [01] to IP address 2.2.2.2:4369 */
- ADD_DATA(buf, "\x01\x02me\x03you\x05\x01\x00\x01\x02\x02\x02\x02\x11\x11");
- test_assert(fetch_from_buf_socks(buf, socks,
- get_options()->TestSocks,
- get_options()->SafeSocks) == 1);
- test_eq(5, socks->socks_version);
- test_eq(2, socks->replylen);
- test_eq(5, socks->reply[0]);
- test_eq(0, socks->reply[1]);
-
- test_streq("2.2.2.2", socks->address);
- test_eq(4369, socks->port);
-
- test_eq(2, socks->usernamelen);
- test_eq(3, socks->passwordlen);
- test_memeq("me", socks->username, 2);
- test_memeq("you", socks->password, 3);
+ /* Client: Case 1: The server sent back junk. */
+ s_buf[64] ^= 33;
+ tt_int_op(-1, ==,
+ onion_skin_TAP_client_handshake(c_dh, s_buf, c_keys, 40));
+ s_buf[64] ^= 33;
- done:
- ;
-}
+ /* Let the client finish; make sure it can. */
+ tt_int_op(0, ==,
+ onion_skin_TAP_client_handshake(c_dh, s_buf, c_keys, 40));
+ test_memeq(s_keys, c_keys, 40);
-/** Perform SOCKS 5 authentication before method negotiated */
-static void
-test_socks_5_auth_before_negotiation(void *ptr)
-{
- SOCKS_TEST_INIT();
-
- /* SOCKS 5 Send username/password */
- ADD_DATA(buf, "\x01\x02me\x02me");
- test_assert(fetch_from_buf_socks(buf, socks,
- get_options()->TestSocks,
- get_options()->SafeSocks) == -1);
- test_eq(0, socks->socks_version);
- test_eq(0, socks->replylen);
- test_eq(0, socks->reply[0]);
- test_eq(0, socks->reply[1]);
+ /* Client: Case 2: The server sent back a degenerate DH. */
+ memset(s_buf, 0, sizeof(s_buf));
+ tt_int_op(-1, ==,
+ onion_skin_TAP_client_handshake(c_dh, s_buf, c_keys, 40));
done:
- ;
+ crypto_dh_free(c_dh);
+ crypto_pk_free(pk);
+ crypto_pk_free(pk2);
}
+#ifdef CURVE25519_ENABLED
static void
-test_buffer_copy(void *arg)
+test_ntor_handshake(void *arg)
{
- generic_buffer_t *buf=NULL, *buf2=NULL;
- const char *s;
- size_t len;
- char b[256];
- int i;
- (void)arg;
-
- buf = generic_buffer_new();
- tt_assert(buf);
-
- /* Copy an empty buffer. */
- tt_int_op(0, ==, generic_buffer_set_to_copy(&buf2, buf));
- tt_assert(buf2);
- tt_int_op(0, ==, generic_buffer_len(buf2));
-
- /* Now try with a short buffer. */
- s = "And now comes an act of enormous enormance!";
- len = strlen(s);
- generic_buffer_add(buf, s, len);
- tt_int_op(len, ==, generic_buffer_len(buf));
- /* Add junk to buf2 so we can test replacing.*/
- generic_buffer_add(buf2, "BLARG", 5);
- tt_int_op(0, ==, generic_buffer_set_to_copy(&buf2, buf));
- tt_int_op(len, ==, generic_buffer_len(buf2));
- generic_buffer_get(buf2, b, len);
- test_mem_op(b, ==, s, len);
- /* Now free buf2 and retry so we can test allocating */
- generic_buffer_free(buf2);
- buf2 = NULL;
- tt_int_op(0, ==, generic_buffer_set_to_copy(&buf2, buf));
- tt_int_op(len, ==, generic_buffer_len(buf2));
- generic_buffer_get(buf2, b, len);
- test_mem_op(b, ==, s, len);
- /* Clear buf for next test */
- generic_buffer_get(buf, b, len);
- tt_int_op(generic_buffer_len(buf),==,0);
-
- /* Okay, now let's try a bigger buffer. */
- s = "Quis autem vel eum iure reprehenderit qui in ea voluptate velit "
- "esse quam nihil molestiae consequatur, vel illum qui dolorem eum "
- "fugiat quo voluptas nulla pariatur?";
- len = strlen(s);
- for (i = 0; i < 256; ++i) {
- b[0]=i;
- generic_buffer_add(buf, b, 1);
- generic_buffer_add(buf, s, len);
- }
- tt_int_op(0, ==, generic_buffer_set_to_copy(&buf2, buf));
- tt_int_op(generic_buffer_len(buf2), ==, generic_buffer_len(buf));
- for (i = 0; i < 256; ++i) {
- generic_buffer_get(buf2, b, len+1);
- tt_int_op((unsigned char)b[0],==,i);
- test_mem_op(b+1, ==, s, len);
- }
-
- done:
- if (buf)
- generic_buffer_free(buf);
- if (buf2)
- generic_buffer_free(buf2);
-}
+ /* client-side */
+ ntor_handshake_state_t *c_state = NULL;
+ uint8_t c_buf[NTOR_ONIONSKIN_LEN];
+ uint8_t c_keys[400];
-/** Run unit tests for buffers.c */
-static void
-test_buffers(void)
-{
- char str[256];
- char str2[256];
+ /* server-side */
+ di_digest256_map_t *s_keymap=NULL;
+ curve25519_keypair_t s_keypair;
+ uint8_t s_buf[NTOR_REPLY_LEN];
+ uint8_t s_keys[400];
- buf_t *buf = NULL, *buf2 = NULL;
- const char *cp;
+ /* shared */
+ const curve25519_public_key_t *server_pubkey;
+ uint8_t node_id[20] = "abcdefghijklmnopqrst";
- int j;
- size_t r;
+ (void) arg;
- /****
- * buf_new
- ****/
- if (!(buf = buf_new()))
- test_fail();
+ /* Make the server some keys */
+ curve25519_secret_key_generate(&s_keypair.seckey, 0);
+ curve25519_public_key_generate(&s_keypair.pubkey, &s_keypair.seckey);
+ dimap_add_entry(&s_keymap, s_keypair.pubkey.public_key, &s_keypair);
+ server_pubkey = &s_keypair.pubkey;
- //test_eq(buf_capacity(buf), 4096);
- test_eq(buf_datalen(buf), 0);
+ /* client handshake 1. */
+ memset(c_buf, 0, NTOR_ONIONSKIN_LEN);
+ tt_int_op(0, ==, onion_skin_ntor_create(node_id, server_pubkey,
+ &c_state, c_buf));
- /****
- * General pointer frobbing
- */
- for (j=0;j<256;++j) {
- str[j] = (char)j;
- }
- write_to_buf(str, 256, buf);
- write_to_buf(str, 256, buf);
- test_eq(buf_datalen(buf), 512);
- fetch_from_buf(str2, 200, buf);
- test_memeq(str, str2, 200);
- test_eq(buf_datalen(buf), 312);
- memset(str2, 0, sizeof(str2));
-
- fetch_from_buf(str2, 256, buf);
- test_memeq(str+200, str2, 56);
- test_memeq(str, str2+56, 200);
- test_eq(buf_datalen(buf), 56);
- memset(str2, 0, sizeof(str2));
- /* Okay, now we should be 512 bytes into the 4096-byte buffer. If we add
- * another 3584 bytes, we hit the end. */
- for (j=0;j<15;++j) {
- write_to_buf(str, 256, buf);
- }
- assert_buf_ok(buf);
- test_eq(buf_datalen(buf), 3896);
- fetch_from_buf(str2, 56, buf);
- test_eq(buf_datalen(buf), 3840);
- test_memeq(str+200, str2, 56);
- for (j=0;j<15;++j) {
- memset(str2, 0, sizeof(str2));
- fetch_from_buf(str2, 256, buf);
- test_memeq(str, str2, 256);
- }
- test_eq(buf_datalen(buf), 0);
- buf_free(buf);
- buf = NULL;
-
- /* Okay, now make sure growing can work. */
- buf = buf_new_with_capacity(16);
- //test_eq(buf_capacity(buf), 16);
- write_to_buf(str+1, 255, buf);
- //test_eq(buf_capacity(buf), 256);
- fetch_from_buf(str2, 254, buf);
- test_memeq(str+1, str2, 254);
- //test_eq(buf_capacity(buf), 256);
- assert_buf_ok(buf);
- write_to_buf(str, 32, buf);
- //test_eq(buf_capacity(buf), 256);
- assert_buf_ok(buf);
- write_to_buf(str, 256, buf);
- assert_buf_ok(buf);
- //test_eq(buf_capacity(buf), 512);
- test_eq(buf_datalen(buf), 33+256);
- fetch_from_buf(str2, 33, buf);
- test_eq(*str2, str[255]);
-
- test_memeq(str2+1, str, 32);
- //test_eq(buf_capacity(buf), 512);
- test_eq(buf_datalen(buf), 256);
- fetch_from_buf(str2, 256, buf);
- test_memeq(str, str2, 256);
-
- /* now try shrinking: case 1. */
- buf_free(buf);
- buf = buf_new_with_capacity(33668);
- for (j=0;j<67;++j) {
- write_to_buf(str,255, buf);
- }
- //test_eq(buf_capacity(buf), 33668);
- test_eq(buf_datalen(buf), 17085);
- for (j=0; j < 40; ++j) {
- fetch_from_buf(str2, 255,buf);
- test_memeq(str2, str, 255);
- }
+ /* server handshake */
+ memset(s_buf, 0, NTOR_REPLY_LEN);
+ memset(s_keys, 0, 40);
+ tt_int_op(0, ==, onion_skin_ntor_server_handshake(c_buf, s_keymap, NULL,
+ node_id,
+ s_buf, s_keys, 400));
- /* now try shrinking: case 2. */
- buf_free(buf);
- buf = buf_new_with_capacity(33668);
- for (j=0;j<67;++j) {
- write_to_buf(str,255, buf);
- }
- for (j=0; j < 20; ++j) {
- fetch_from_buf(str2, 255,buf);
- test_memeq(str2, str, 255);
- }
- for (j=0;j<80;++j) {
- write_to_buf(str,255, buf);
- }
- //test_eq(buf_capacity(buf),33668);
- for (j=0; j < 120; ++j) {
- fetch_from_buf(str2, 255,buf);
- test_memeq(str2, str, 255);
- }
+ /* client handshake 2 */
+ memset(c_keys, 0, 40);
+ tt_int_op(0, ==, onion_skin_ntor_client_handshake(c_state, s_buf,
+ c_keys, 400));
- /* Move from buf to buf. */
- buf_free(buf);
- buf = buf_new_with_capacity(4096);
- buf2 = buf_new_with_capacity(4096);
- for (j=0;j<100;++j)
- write_to_buf(str, 255, buf);
- test_eq(buf_datalen(buf), 25500);
- for (j=0;j<100;++j) {
- r = 10;
- move_buf_to_buf(buf2, buf, &r);
- test_eq(r, 0);
- }
- test_eq(buf_datalen(buf), 24500);
- test_eq(buf_datalen(buf2), 1000);
- for (j=0;j<3;++j) {
- fetch_from_buf(str2, 255, buf2);
- test_memeq(str2, str, 255);
- }
- r = 8192; /*big move*/
- move_buf_to_buf(buf2, buf, &r);
- test_eq(r, 0);
- r = 30000; /* incomplete move */
- move_buf_to_buf(buf2, buf, &r);
- test_eq(r, 13692);
- for (j=0;j<97;++j) {
- fetch_from_buf(str2, 255, buf2);
- test_memeq(str2, str, 255);
- }
- buf_free(buf);
- buf_free(buf2);
- buf = buf2 = NULL;
-
- buf = buf_new_with_capacity(5);
- cp = "Testing. This is a moderately long Testing string.";
- for (j = 0; cp[j]; j++)
- write_to_buf(cp+j, 1, buf);
- test_eq(0, buf_find_string_offset(buf, "Testing", 7));
- test_eq(1, buf_find_string_offset(buf, "esting", 6));
- test_eq(1, buf_find_string_offset(buf, "est", 3));
- test_eq(39, buf_find_string_offset(buf, "ing str", 7));
- test_eq(35, buf_find_string_offset(buf, "Testing str", 11));
- test_eq(32, buf_find_string_offset(buf, "ng ", 3));
- test_eq(43, buf_find_string_offset(buf, "string.", 7));
- test_eq(-1, buf_find_string_offset(buf, "shrdlu", 6));
- test_eq(-1, buf_find_string_offset(buf, "Testing thing", 13));
- test_eq(-1, buf_find_string_offset(buf, "ngx", 3));
- buf_free(buf);
- buf = NULL;
+ test_memeq(c_keys, s_keys, 400);
+ memset(s_buf, 0, 40);
+ test_memneq(c_keys, s_buf, 40);
done:
- if (buf)
- buf_free(buf);
- if (buf2)
- buf_free(buf2);
+ ntor_handshake_state_free(c_state);
+ dimap_free(s_keymap, NULL);
}
+#endif
-/** Run unit tests for the onion handshake code. */
+/** Run unit tests for the onion queues. */
static void
-test_onion_handshake(void)
+test_onion_queues(void)
{
- /* client-side */
- crypto_dh_t *c_dh = NULL;
- char c_buf[ONIONSKIN_CHALLENGE_LEN];
- char c_keys[40];
+ uint8_t buf1[TAP_ONIONSKIN_CHALLENGE_LEN] = {0};
+ uint8_t buf2[NTOR_ONIONSKIN_LEN] = {0};
- /* server-side */
- char s_buf[ONIONSKIN_REPLY_LEN];
- char s_keys[40];
+ or_circuit_t *circ1 = or_circuit_new(0, NULL);
+ or_circuit_t *circ2 = or_circuit_new(0, NULL);
- /* shared */
- crypto_pk_t *pk = NULL;
+ create_cell_t *onionskin = NULL, *create2_ptr;
+ create_cell_t *create1 = tor_malloc_zero(sizeof(create_cell_t));
+ create_cell_t *create2 = tor_malloc_zero(sizeof(create_cell_t));
+ create2_ptr = create2; /* remember, but do not free */
- pk = pk_generate(0);
+ create_cell_init(create1, CELL_CREATE, ONION_HANDSHAKE_TYPE_TAP,
+ TAP_ONIONSKIN_CHALLENGE_LEN, buf1);
+ create_cell_init(create2, CELL_CREATE, ONION_HANDSHAKE_TYPE_NTOR,
+ NTOR_ONIONSKIN_LEN, buf2);
- /* client handshake 1. */
- memset(c_buf, 0, ONIONSKIN_CHALLENGE_LEN);
- test_assert(! onion_skin_create(pk, &c_dh, c_buf));
+ test_eq(0, onion_num_pending(ONION_HANDSHAKE_TYPE_TAP));
+ test_eq(0, onion_pending_add(circ1, create1));
+ create1 = NULL;
+ test_eq(1, onion_num_pending(ONION_HANDSHAKE_TYPE_TAP));
- /* server handshake */
- memset(s_buf, 0, ONIONSKIN_REPLY_LEN);
- memset(s_keys, 0, 40);
- test_assert(! onion_skin_server_handshake(c_buf, pk, NULL,
- s_buf, s_keys, 40));
+ test_eq(0, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR));
+ test_eq(0, onion_pending_add(circ2, create2));
+ create2 = NULL;
+ test_eq(1, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR));
- /* client handshake 2 */
- memset(c_keys, 0, 40);
- test_assert(! onion_skin_client_handshake(c_dh, s_buf, c_keys, 40));
+ test_eq_ptr(circ2, onion_next_task(&onionskin));
+ test_eq(1, onion_num_pending(ONION_HANDSHAKE_TYPE_TAP));
+ test_eq(0, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR));
+ tt_ptr_op(onionskin, ==, create2_ptr);
- if (memcmp(c_keys, s_keys, 40)) {
- puts("Aiiiie");
- exit(1);
- }
- test_memeq(c_keys, s_keys, 40);
- memset(s_buf, 0, 40);
- test_memneq(c_keys, s_buf, 40);
+ clear_pending_onions();
+ test_eq(0, onion_num_pending(ONION_HANDSHAKE_TYPE_TAP));
+ test_eq(0, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR));
done:
- if (c_dh)
- crypto_dh_free(c_dh);
- if (pk)
- crypto_pk_free(pk);
+ circuit_free(TO_CIRCUIT(circ1));
+ circuit_free(TO_CIRCUIT(circ2));
+ tor_free(create1);
+ tor_free(create2);
+ tor_free(onionskin);
}
static void
@@ -872,14 +473,14 @@ test_circuit_timeout(void)
circuit_build_times_t estimate;
circuit_build_times_t final;
double timeout1, timeout2;
- or_state_t state;
+ or_state_t *state=NULL;
int i, runs;
double close_ms;
circuit_build_times_init(&initial);
circuit_build_times_init(&estimate);
circuit_build_times_init(&final);
- memset(&state, 0, sizeof(or_state_t));
+ state = or_state_new();
circuitbuild_running_unit_tests();
#define timeout0 (build_time_t)(30*1000.0)
@@ -911,8 +512,9 @@ test_circuit_timeout(void)
test_assert(estimate.total_build_times <= CBT_NCIRCUITS_TO_OBSERVE);
- circuit_build_times_update_state(&estimate, &state);
- test_assert(circuit_build_times_parse_state(&final, &state) == 0);
+ circuit_build_times_update_state(&estimate, state);
+ circuit_build_times_free_timeouts(&final);
+ test_assert(circuit_build_times_parse_state(&final, state) == 0);
circuit_build_times_update_alpha(&final);
timeout2 = circuit_build_times_calculate_timeout(&final,
@@ -1001,336 +603,10 @@ test_circuit_timeout(void)
}
done:
- return;
-}
-
-/* Helper: assert that short_policy parses and writes back out as itself,
- or as <b>expected</b> if that's provided. */
-static void
-test_short_policy_parse(const char *input,
- const char *expected)
-{
- short_policy_t *short_policy = NULL;
- char *out = NULL;
-
- if (expected == NULL)
- expected = input;
-
- short_policy = parse_short_policy(input);
- tt_assert(short_policy);
- out = write_short_policy(short_policy);
- tt_str_op(out, ==, expected);
-
- done:
- tor_free(out);
- short_policy_free(short_policy);
-}
-
-/** Helper: Parse the exit policy string in <b>policy_str</b>, and make sure
- * that policies_summarize() produces the string <b>expected_summary</b> from
- * it. */
-static void
-test_policy_summary_helper(const char *policy_str,
- const char *expected_summary)
-{
- config_line_t line;
- smartlist_t *policy = smartlist_new();
- char *summary = NULL;
- char *summary_after = NULL;
- int r;
- short_policy_t *short_policy = NULL;
-
- line.key = (char*)"foo";
- line.value = (char *)policy_str;
- line.next = NULL;
-
- r = policies_parse_exit_policy(&line, &policy, 0, NULL, 1);
- test_eq(r, 0);
- summary = policy_summarize(policy);
-
- test_assert(summary != NULL);
- test_streq(summary, expected_summary);
-
- short_policy = parse_short_policy(summary);
- tt_assert(short_policy);
- summary_after = write_short_policy(short_policy);
- test_streq(summary, summary_after);
-
- done:
- tor_free(summary_after);
- tor_free(summary);
- if (policy)
- addr_policy_list_free(policy);
- short_policy_free(short_policy);
-}
-
-/** Run unit tests for generating summary lines of exit policies */
-static void
-test_policies(void)
-{
- int i;
- smartlist_t *policy = NULL, *policy2 = NULL, *policy3 = NULL,
- *policy4 = NULL, *policy5 = NULL, *policy6 = NULL,
- *policy7 = NULL;
- addr_policy_t *p;
- tor_addr_t tar;
- config_line_t line;
- smartlist_t *sm = NULL;
- char *policy_str = NULL;
-
- policy = smartlist_new();
-
- p = router_parse_addr_policy_item_from_string("reject 192.168.0.0/16:*",-1);
- test_assert(p != NULL);
- test_eq(ADDR_POLICY_REJECT, p->policy_type);
- tor_addr_from_ipv4h(&tar, 0xc0a80000u);
- test_eq(0, tor_addr_compare(&p->addr, &tar, CMP_EXACT));
- test_eq(16, p->maskbits);
- test_eq(1, p->prt_min);
- test_eq(65535, p->prt_max);
-
- smartlist_add(policy, p);
-
- tor_addr_from_ipv4h(&tar, 0x01020304u);
- test_assert(ADDR_POLICY_ACCEPTED ==
- compare_tor_addr_to_addr_policy(&tar, 2, policy));
- tor_addr_make_unspec(&tar);
- test_assert(ADDR_POLICY_PROBABLY_ACCEPTED ==
- compare_tor_addr_to_addr_policy(&tar, 2, policy));
- tor_addr_from_ipv4h(&tar, 0xc0a80102);
- test_assert(ADDR_POLICY_REJECTED ==
- compare_tor_addr_to_addr_policy(&tar, 2, policy));
-
- test_assert(0 == policies_parse_exit_policy(NULL, &policy2, 1, NULL, 1));
- test_assert(policy2);
-
- policy3 = smartlist_new();
- p = router_parse_addr_policy_item_from_string("reject *:*",-1);
- test_assert(p != NULL);
- smartlist_add(policy3, p);
- p = router_parse_addr_policy_item_from_string("accept *:*",-1);
- test_assert(p != NULL);
- smartlist_add(policy3, p);
-
- policy4 = smartlist_new();
- p = router_parse_addr_policy_item_from_string("accept *:443",-1);
- test_assert(p != NULL);
- smartlist_add(policy4, p);
- p = router_parse_addr_policy_item_from_string("accept *:443",-1);
- test_assert(p != NULL);
- smartlist_add(policy4, p);
-
- policy5 = smartlist_new();
- p = router_parse_addr_policy_item_from_string("reject 0.0.0.0/8:*",-1);
- test_assert(p != NULL);
- smartlist_add(policy5, p);
- p = router_parse_addr_policy_item_from_string("reject 169.254.0.0/16:*",-1);
- test_assert(p != NULL);
- smartlist_add(policy5, p);
- p = router_parse_addr_policy_item_from_string("reject 127.0.0.0/8:*",-1);
- test_assert(p != NULL);
- smartlist_add(policy5, p);
- p = router_parse_addr_policy_item_from_string("reject 192.168.0.0/16:*",-1);
- test_assert(p != NULL);
- smartlist_add(policy5, p);
- p = router_parse_addr_policy_item_from_string("reject 10.0.0.0/8:*",-1);
- test_assert(p != NULL);
- smartlist_add(policy5, p);
- p = router_parse_addr_policy_item_from_string("reject 172.16.0.0/12:*",-1);
- test_assert(p != NULL);
- smartlist_add(policy5, p);
- p = router_parse_addr_policy_item_from_string("reject 80.190.250.90:*",-1);
- test_assert(p != NULL);
- smartlist_add(policy5, p);
- p = router_parse_addr_policy_item_from_string("reject *:1-65534",-1);
- test_assert(p != NULL);
- smartlist_add(policy5, p);
- p = router_parse_addr_policy_item_from_string("reject *:65535",-1);
- test_assert(p != NULL);
- smartlist_add(policy5, p);
- p = router_parse_addr_policy_item_from_string("accept *:1-65535",-1);
- test_assert(p != NULL);
- smartlist_add(policy5, p);
-
- policy6 = smartlist_new();
- p = router_parse_addr_policy_item_from_string("accept 43.3.0.0/9:*",-1);
- test_assert(p != NULL);
- smartlist_add(policy6, p);
-
- policy7 = smartlist_new();
- p = router_parse_addr_policy_item_from_string("accept 0.0.0.0/8:*",-1);
- test_assert(p != NULL);
- smartlist_add(policy7, p);
-
- test_assert(!exit_policy_is_general_exit(policy));
- test_assert(exit_policy_is_general_exit(policy2));
- test_assert(!exit_policy_is_general_exit(NULL));
- test_assert(!exit_policy_is_general_exit(policy3));
- test_assert(!exit_policy_is_general_exit(policy4));
- test_assert(!exit_policy_is_general_exit(policy5));
- test_assert(!exit_policy_is_general_exit(policy6));
- test_assert(!exit_policy_is_general_exit(policy7));
-
- test_assert(cmp_addr_policies(policy, policy2));
- test_assert(cmp_addr_policies(policy, NULL));
- test_assert(!cmp_addr_policies(policy2, policy2));
- test_assert(!cmp_addr_policies(NULL, NULL));
-
- test_assert(!policy_is_reject_star(policy2));
- test_assert(policy_is_reject_star(policy));
- test_assert(policy_is_reject_star(NULL));
-
- addr_policy_list_free(policy);
- policy = NULL;
-
- /* make sure compacting logic works. */
- policy = NULL;
- line.key = (char*)"foo";
- line.value = (char*)"accept *:80,reject private:*,reject *:*";
- line.next = NULL;
- test_assert(0 == policies_parse_exit_policy(&line, &policy, 0, NULL, 1));
- test_assert(policy);
- //test_streq(policy->string, "accept *:80");
- //test_streq(policy->next->string, "reject *:*");
- test_eq(smartlist_len(policy), 2);
-
- /* test policy summaries */
- /* check if we properly ignore private IP addresses */
- test_policy_summary_helper("reject 192.168.0.0/16:*,"
- "reject 0.0.0.0/8:*,"
- "reject 10.0.0.0/8:*,"
- "accept *:10-30,"
- "accept *:90,"
- "reject *:*",
- "accept 10-30,90");
- /* check all accept policies, and proper counting of rejects */
- test_policy_summary_helper("reject 11.0.0.0/9:80,"
- "reject 12.0.0.0/9:80,"
- "reject 13.0.0.0/9:80,"
- "reject 14.0.0.0/9:80,"
- "accept *:*", "accept 1-65535");
- test_policy_summary_helper("reject 11.0.0.0/9:80,"
- "reject 12.0.0.0/9:80,"
- "reject 13.0.0.0/9:80,"
- "reject 14.0.0.0/9:80,"
- "reject 15.0.0.0:81,"
- "accept *:*", "accept 1-65535");
- test_policy_summary_helper("reject 11.0.0.0/9:80,"
- "reject 12.0.0.0/9:80,"
- "reject 13.0.0.0/9:80,"
- "reject 14.0.0.0/9:80,"
- "reject 15.0.0.0:80,"
- "accept *:*",
- "reject 80");
- /* no exits */
- test_policy_summary_helper("accept 11.0.0.0/9:80,"
- "reject *:*",
- "reject 1-65535");
- /* port merging */
- test_policy_summary_helper("accept *:80,"
- "accept *:81,"
- "accept *:100-110,"
- "accept *:111,"
- "reject *:*",
- "accept 80-81,100-111");
- /* border ports */
- test_policy_summary_helper("accept *:1,"
- "accept *:3,"
- "accept *:65535,"
- "reject *:*",
- "accept 1,3,65535");
- /* holes */
- test_policy_summary_helper("accept *:1,"
- "accept *:3,"
- "accept *:5,"
- "accept *:7,"
- "reject *:*",
- "accept 1,3,5,7");
- test_policy_summary_helper("reject *:1,"
- "reject *:3,"
- "reject *:5,"
- "reject *:7,"
- "accept *:*",
- "reject 1,3,5,7");
-
- /* Short policies with unrecognized formats should get accepted. */
- test_short_policy_parse("accept fred,2,3-5", "accept 2,3-5");
- test_short_policy_parse("accept 2,fred,3", "accept 2,3");
- test_short_policy_parse("accept 2,fred,3,bob", "accept 2,3");
- test_short_policy_parse("accept 2,-3,500-600", "accept 2,500-600");
- /* Short policies with nil entries are accepted too. */
- test_short_policy_parse("accept 1,,3", "accept 1,3");
- test_short_policy_parse("accept 100-200,,", "accept 100-200");
- test_short_policy_parse("reject ,1-10,,,,30-40", "reject 1-10,30-40");
-
- /* Try parsing various broken short policies */
- tt_ptr_op(NULL, ==, parse_short_policy("accept 200-199"));
- tt_ptr_op(NULL, ==, parse_short_policy(""));
- tt_ptr_op(NULL, ==, parse_short_policy("rejekt 1,2,3"));
- tt_ptr_op(NULL, ==, parse_short_policy("reject "));
- tt_ptr_op(NULL, ==, parse_short_policy("reject"));
- tt_ptr_op(NULL, ==, parse_short_policy("rej"));
- tt_ptr_op(NULL, ==, parse_short_policy("accept 2,3,100000"));
- tt_ptr_op(NULL, ==, parse_short_policy("accept 2,3x,4"));
- tt_ptr_op(NULL, ==, parse_short_policy("accept 2,3x,4"));
- tt_ptr_op(NULL, ==, parse_short_policy("accept 2-"));
- tt_ptr_op(NULL, ==, parse_short_policy("accept 2-x"));
- tt_ptr_op(NULL, ==, parse_short_policy("accept 1-,3"));
- tt_ptr_op(NULL, ==, parse_short_policy("accept 1-,3"));
- /* Test a too-long policy. */
- {
- int i;
- char *policy = NULL;
- smartlist_t *chunks = smartlist_new();
- smartlist_add(chunks, tor_strdup("accept "));
- for (i=1; i<10000; ++i)
- smartlist_add_asprintf(chunks, "%d,", i);
- smartlist_add(chunks, tor_strdup("20000"));
- policy = smartlist_join_strings(chunks, "", 0, NULL);
- SMARTLIST_FOREACH(chunks, char *, ch, tor_free(ch));
- smartlist_free(chunks);
- tt_ptr_op(NULL, ==, parse_short_policy(policy));/* shouldn't be accepted */
- tor_free(policy); /* could leak. */
- }
-
- /* truncation ports */
- sm = smartlist_new();
- for (i=1; i<2000; i+=2) {
- char buf[POLICY_BUF_LEN];
- tor_snprintf(buf, sizeof(buf), "reject *:%d", i);
- smartlist_add(sm, tor_strdup(buf));
- }
- smartlist_add(sm, tor_strdup("accept *:*"));
- policy_str = smartlist_join_strings(sm, ",", 0, NULL);
- test_policy_summary_helper( policy_str,
- "accept 2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,"
- "46,48,50,52,54,56,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,"
- "92,94,96,98,100,102,104,106,108,110,112,114,116,118,120,122,124,126,128,"
- "130,132,134,136,138,140,142,144,146,148,150,152,154,156,158,160,162,164,"
- "166,168,170,172,174,176,178,180,182,184,186,188,190,192,194,196,198,200,"
- "202,204,206,208,210,212,214,216,218,220,222,224,226,228,230,232,234,236,"
- "238,240,242,244,246,248,250,252,254,256,258,260,262,264,266,268,270,272,"
- "274,276,278,280,282,284,286,288,290,292,294,296,298,300,302,304,306,308,"
- "310,312,314,316,318,320,322,324,326,328,330,332,334,336,338,340,342,344,"
- "346,348,350,352,354,356,358,360,362,364,366,368,370,372,374,376,378,380,"
- "382,384,386,388,390,392,394,396,398,400,402,404,406,408,410,412,414,416,"
- "418,420,422,424,426,428,430,432,434,436,438,440,442,444,446,448,450,452,"
- "454,456,458,460,462,464,466,468,470,472,474,476,478,480,482,484,486,488,"
- "490,492,494,496,498,500,502,504,506,508,510,512,514,516,518,520,522");
-
- done:
- addr_policy_list_free(policy);
- addr_policy_list_free(policy2);
- addr_policy_list_free(policy3);
- addr_policy_list_free(policy4);
- addr_policy_list_free(policy5);
- addr_policy_list_free(policy6);
- addr_policy_list_free(policy7);
- tor_free(policy_str);
- if (sm) {
- SMARTLIST_FOREACH(sm, char *, s, tor_free(s));
- smartlist_free(sm);
- }
+ circuit_build_times_free_timeouts(&initial);
+ circuit_build_times_free_timeouts(&estimate);
+ circuit_build_times_free_timeouts(&final);
+ or_state_free(state);
}
/** Test encoding and parsing of rendezvous service descriptors. */
@@ -1354,11 +630,20 @@ test_rend_fns(void)
char address2[] = "aaaaaaaaaaaaaaaa.onion";
char address3[] = "fooaddress.exit";
char address4[] = "www.torproject.org";
+ char address5[] = "foo.abcdefghijklmnop.onion";
+ char address6[] = "foo.bar.abcdefghijklmnop.onion";
+ char address7[] = ".abcdefghijklmnop.onion";
test_assert(BAD_HOSTNAME == parse_extended_hostname(address1));
test_assert(ONION_HOSTNAME == parse_extended_hostname(address2));
+ test_streq(address2, "aaaaaaaaaaaaaaaa");
test_assert(EXIT_HOSTNAME == parse_extended_hostname(address3));
test_assert(NORMAL_HOSTNAME == parse_extended_hostname(address4));
+ test_assert(ONION_HOSTNAME == parse_extended_hostname(address5));
+ test_streq(address5, "abcdefghijklmnop");
+ test_assert(ONION_HOSTNAME == parse_extended_hostname(address6));
+ test_streq(address6, "abcdefghijklmnop");
+ test_assert(BAD_HOSTNAME == parse_extended_hostname(address7));
pk1 = pk_generate(0);
pk2 = pk_generate(1);
@@ -1448,72 +733,78 @@ test_rend_fns(void)
tor_free(intro_points_encrypted);
}
+ /* Record odd numbered fake-IPs using ipv6, even numbered fake-IPs
+ * using ipv4. Since our fake geoip database is the same between
+ * ipv4 and ipv6, we should get the same result no matter which
+ * address family we pick for each IP. */
+#define SET_TEST_ADDRESS(i) do { \
+ if ((i) & 1) { \
+ SET_TEST_IPV6(i); \
+ tor_addr_from_in6(&addr, &in6); \
+ } else { \
+ tor_addr_from_ipv4h(&addr, (uint32_t) i); \
+ } \
+ } while (0)
+
+ /* Make sure that country ID actually works. */
+#define SET_TEST_IPV6(i) \
+ do { \
+ set_uint32(in6.s6_addr + 12, htonl((uint32_t) (i))); \
+ } while (0)
+#define CHECK_COUNTRY(country, val) do { \
+ /* test ipv4 country lookup */ \
+ test_streq(country, \
+ geoip_get_country_name(geoip_get_country_by_ipv4(val))); \
+ /* test ipv6 country lookup */ \
+ SET_TEST_IPV6(val); \
+ test_streq(country, \
+ geoip_get_country_name(geoip_get_country_by_ipv6(&in6))); \
+ } while (0)
+
/** Run unit tests for GeoIP code. */
static void
test_geoip(void)
{
int i, j;
time_t now = 1281533250; /* 2010-08-11 13:27:30 UTC */
- char *s = NULL;
+ char *s = NULL, *v = NULL;
const char *bridge_stats_1 =
"bridge-stats-end 2010-08-12 13:27:30 (86400 s)\n"
- "bridge-ips zz=24,xy=8\n",
+ "bridge-ips zz=24,xy=8\n"
+ "bridge-ip-versions v4=16,v6=16\n"
+ "bridge-ip-transports <OR>=24\n",
*dirreq_stats_1 =
"dirreq-stats-end 2010-08-12 13:27:30 (86400 s)\n"
"dirreq-v3-ips ab=8\n"
- "dirreq-v2-ips \n"
"dirreq-v3-reqs ab=8\n"
- "dirreq-v2-reqs \n"
"dirreq-v3-resp ok=0,not-enough-sigs=0,unavailable=0,not-found=0,"
"not-modified=0,busy=0\n"
- "dirreq-v2-resp ok=0,unavailable=0,not-found=0,not-modified=0,"
- "busy=0\n"
"dirreq-v3-direct-dl complete=0,timeout=0,running=0\n"
- "dirreq-v2-direct-dl complete=0,timeout=0,running=0\n"
- "dirreq-v3-tunneled-dl complete=0,timeout=0,running=0\n"
- "dirreq-v2-tunneled-dl complete=0,timeout=0,running=0\n",
+ "dirreq-v3-tunneled-dl complete=0,timeout=0,running=0\n",
*dirreq_stats_2 =
"dirreq-stats-end 2010-08-12 13:27:30 (86400 s)\n"
"dirreq-v3-ips \n"
- "dirreq-v2-ips \n"
"dirreq-v3-reqs \n"
- "dirreq-v2-reqs \n"
"dirreq-v3-resp ok=0,not-enough-sigs=0,unavailable=0,not-found=0,"
"not-modified=0,busy=0\n"
- "dirreq-v2-resp ok=0,unavailable=0,not-found=0,not-modified=0,"
- "busy=0\n"
"dirreq-v3-direct-dl complete=0,timeout=0,running=0\n"
- "dirreq-v2-direct-dl complete=0,timeout=0,running=0\n"
- "dirreq-v3-tunneled-dl complete=0,timeout=0,running=0\n"
- "dirreq-v2-tunneled-dl complete=0,timeout=0,running=0\n",
+ "dirreq-v3-tunneled-dl complete=0,timeout=0,running=0\n",
*dirreq_stats_3 =
"dirreq-stats-end 2010-08-12 13:27:30 (86400 s)\n"
"dirreq-v3-ips \n"
- "dirreq-v2-ips \n"
"dirreq-v3-reqs \n"
- "dirreq-v2-reqs \n"
"dirreq-v3-resp ok=8,not-enough-sigs=0,unavailable=0,not-found=0,"
"not-modified=0,busy=0\n"
- "dirreq-v2-resp ok=0,unavailable=0,not-found=0,not-modified=0,"
- "busy=0\n"
"dirreq-v3-direct-dl complete=0,timeout=0,running=0\n"
- "dirreq-v2-direct-dl complete=0,timeout=0,running=0\n"
- "dirreq-v3-tunneled-dl complete=0,timeout=0,running=0\n"
- "dirreq-v2-tunneled-dl complete=0,timeout=0,running=0\n",
+ "dirreq-v3-tunneled-dl complete=0,timeout=0,running=0\n",
*dirreq_stats_4 =
"dirreq-stats-end 2010-08-12 13:27:30 (86400 s)\n"
"dirreq-v3-ips \n"
- "dirreq-v2-ips \n"
"dirreq-v3-reqs \n"
- "dirreq-v2-reqs \n"
"dirreq-v3-resp ok=8,not-enough-sigs=0,unavailable=0,not-found=0,"
"not-modified=0,busy=0\n"
- "dirreq-v2-resp ok=0,unavailable=0,not-found=0,not-modified=0,"
- "busy=0\n"
"dirreq-v3-direct-dl complete=0,timeout=0,running=0\n"
- "dirreq-v2-direct-dl complete=0,timeout=0,running=0\n"
- "dirreq-v3-tunneled-dl complete=0,timeout=0,running=4\n"
- "dirreq-v2-tunneled-dl complete=0,timeout=0,running=0\n",
+ "dirreq-v3-tunneled-dl complete=0,timeout=0,running=4\n",
*entry_stats_1 =
"entry-stats-end 2010-08-12 13:27:30 (86400 s)\n"
"entry-ips ab=8\n",
@@ -1521,61 +812,79 @@ test_geoip(void)
"entry-stats-end 2010-08-12 13:27:30 (86400 s)\n"
"entry-ips \n";
tor_addr_t addr;
+ struct in6_addr in6;
/* Populate the DB a bit. Add these in order, since we can't do the final
* 'sort' step. These aren't very good IP addresses, but they're perfectly
* fine uint32_t values. */
- test_eq(0, geoip_parse_entry("10,50,AB"));
- test_eq(0, geoip_parse_entry("52,90,XY"));
- test_eq(0, geoip_parse_entry("95,100,AB"));
- test_eq(0, geoip_parse_entry("\"105\",\"140\",\"ZZ\""));
- test_eq(0, geoip_parse_entry("\"150\",\"190\",\"XY\""));
- test_eq(0, geoip_parse_entry("\"200\",\"250\",\"AB\""));
+ test_eq(0, geoip_parse_entry("10,50,AB", AF_INET));
+ test_eq(0, geoip_parse_entry("52,90,XY", AF_INET));
+ test_eq(0, geoip_parse_entry("95,100,AB", AF_INET));
+ test_eq(0, geoip_parse_entry("\"105\",\"140\",\"ZZ\"", AF_INET));
+ test_eq(0, geoip_parse_entry("\"150\",\"190\",\"XY\"", AF_INET));
+ test_eq(0, geoip_parse_entry("\"200\",\"250\",\"AB\"", AF_INET));
+
+ /* Populate the IPv6 DB equivalently with fake IPs in the same range */
+ test_eq(0, geoip_parse_entry("::a,::32,AB", AF_INET6));
+ test_eq(0, geoip_parse_entry("::34,::5a,XY", AF_INET6));
+ test_eq(0, geoip_parse_entry("::5f,::64,AB", AF_INET6));
+ test_eq(0, geoip_parse_entry("::69,::8c,ZZ", AF_INET6));
+ test_eq(0, geoip_parse_entry("::96,::be,XY", AF_INET6));
+ test_eq(0, geoip_parse_entry("::c8,::fa,AB", AF_INET6));
/* We should have 4 countries: ??, ab, xy, zz. */
test_eq(4, geoip_get_n_countries());
- /* Make sure that country ID actually works. */
-#define NAMEFOR(x) geoip_get_country_name(geoip_get_country_by_ip(x))
- test_streq("??", NAMEFOR(3));
- test_eq(0, geoip_get_country_by_ip(3));
- test_streq("ab", NAMEFOR(32));
- test_streq("??", NAMEFOR(5));
- test_streq("??", NAMEFOR(51));
- test_streq("xy", NAMEFOR(150));
- test_streq("xy", NAMEFOR(190));
- test_streq("??", NAMEFOR(2000));
-#undef NAMEFOR
+ memset(&in6, 0, sizeof(in6));
+
+ CHECK_COUNTRY("??", 3);
+ CHECK_COUNTRY("ab", 32);
+ CHECK_COUNTRY("??", 5);
+ CHECK_COUNTRY("??", 51);
+ CHECK_COUNTRY("xy", 150);
+ CHECK_COUNTRY("xy", 190);
+ CHECK_COUNTRY("??", 2000);
+
+ test_eq(0, geoip_get_country_by_ipv4(3));
+ SET_TEST_IPV6(3);
+ test_eq(0, geoip_get_country_by_ipv6(&in6));
get_options_mutable()->BridgeRelay = 1;
get_options_mutable()->BridgeRecordUsageByCountry = 1;
/* Put 9 observations in AB... */
for (i=32; i < 40; ++i) {
- tor_addr_from_ipv4h(&addr, (uint32_t) i);
- geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, now-7200);
+ SET_TEST_ADDRESS(i);
+ geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, NULL, now-7200);
}
- tor_addr_from_ipv4h(&addr, (uint32_t) 225);
- geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, now-7200);
+ SET_TEST_ADDRESS(225);
+ geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, NULL, now-7200);
/* and 3 observations in XY, several times. */
for (j=0; j < 10; ++j)
for (i=52; i < 55; ++i) {
- tor_addr_from_ipv4h(&addr, (uint32_t) i);
- geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, now-3600);
+ SET_TEST_ADDRESS(i);
+ geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, NULL, now-3600);
}
/* and 17 observations in ZZ... */
for (i=110; i < 127; ++i) {
- tor_addr_from_ipv4h(&addr, (uint32_t) i);
- geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, now);
+ SET_TEST_ADDRESS(i);
+ geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, NULL, now);
}
- s = geoip_get_client_history(GEOIP_CLIENT_CONNECT);
+ geoip_get_client_history(GEOIP_CLIENT_CONNECT, &s, &v);
test_assert(s);
+ test_assert(v);
test_streq("zz=24,ab=16,xy=8", s);
+ test_streq("v4=16,v6=16", v);
tor_free(s);
+ tor_free(v);
/* Now clear out all the AB observations. */
geoip_remove_old_clients(now-6000);
- s = geoip_get_client_history(GEOIP_CLIENT_CONNECT);
+ geoip_get_client_history(GEOIP_CLIENT_CONNECT, &s, &v);
test_assert(s);
+ test_assert(v);
test_streq("zz=24,xy=8", s);
+ test_streq("v4=16,v6=16", v);
+ tor_free(s);
+ tor_free(v);
/* Start testing bridge statistics by making sure that we don't output
* bridge stats without initializing them. */
@@ -1586,6 +895,7 @@ test_geoip(void)
* the connecting clients added above. */
geoip_bridge_stats_init(now);
s = geoip_format_bridge_stats(now + 86400);
+ test_assert(s);
test_streq(bridge_stats_1, s);
tor_free(s);
@@ -1604,16 +914,16 @@ test_geoip(void)
/* Start testing dirreq statistics by making sure that we don't collect
* dirreq stats without initializing them. */
- tor_addr_from_ipv4h(&addr, (uint32_t) 100);
- geoip_note_client_seen(GEOIP_CLIENT_NETWORKSTATUS, &addr, now);
+ SET_TEST_ADDRESS(100);
+ geoip_note_client_seen(GEOIP_CLIENT_NETWORKSTATUS, &addr, NULL, now);
s = geoip_format_dirreq_stats(now + 86400);
test_assert(!s);
/* Initialize stats, note one connecting client, and generate the
* dirreq-stats history string. */
geoip_dirreq_stats_init(now);
- tor_addr_from_ipv4h(&addr, (uint32_t) 100);
- geoip_note_client_seen(GEOIP_CLIENT_NETWORKSTATUS, &addr, now);
+ SET_TEST_ADDRESS(100);
+ geoip_note_client_seen(GEOIP_CLIENT_NETWORKSTATUS, &addr, NULL, now);
s = geoip_format_dirreq_stats(now + 86400);
test_streq(dirreq_stats_1, s);
tor_free(s);
@@ -1621,16 +931,16 @@ test_geoip(void)
/* Stop collecting stats, add another connecting client, and ensure we
* don't generate a history string. */
geoip_dirreq_stats_term();
- tor_addr_from_ipv4h(&addr, (uint32_t) 101);
- geoip_note_client_seen(GEOIP_CLIENT_NETWORKSTATUS, &addr, now);
+ SET_TEST_ADDRESS(101);
+ geoip_note_client_seen(GEOIP_CLIENT_NETWORKSTATUS, &addr, NULL, now);
s = geoip_format_dirreq_stats(now + 86400);
test_assert(!s);
/* Re-start stats, add a connecting client, reset stats, and make sure
* that we get an all empty history string. */
geoip_dirreq_stats_init(now);
- tor_addr_from_ipv4h(&addr, (uint32_t) 100);
- geoip_note_client_seen(GEOIP_CLIENT_NETWORKSTATUS, &addr, now);
+ SET_TEST_ADDRESS(100);
+ geoip_note_client_seen(GEOIP_CLIENT_NETWORKSTATUS, &addr, NULL, now);
geoip_reset_dirreq_stats(now);
s = geoip_format_dirreq_stats(now + 86400);
test_streq(dirreq_stats_2, s);
@@ -1638,16 +948,16 @@ test_geoip(void)
/* Note a successful network status response and make sure that it
* appears in the history string. */
- geoip_note_ns_response(GEOIP_CLIENT_NETWORKSTATUS, GEOIP_SUCCESS);
+ geoip_note_ns_response(GEOIP_SUCCESS);
s = geoip_format_dirreq_stats(now + 86400);
test_streq(dirreq_stats_3, s);
tor_free(s);
/* Start a tunneled directory request. */
- geoip_start_dirreq((uint64_t) 1, 1024, GEOIP_CLIENT_NETWORKSTATUS,
- DIRREQ_TUNNELED);
+ geoip_start_dirreq((uint64_t) 1, 1024, DIRREQ_TUNNELED);
s = geoip_format_dirreq_stats(now + 86400);
test_streq(dirreq_stats_4, s);
+ tor_free(s);
/* Stop collecting directory request statistics and start gathering
* entry stats. */
@@ -1657,16 +967,16 @@ test_geoip(void)
/* Start testing entry statistics by making sure that we don't collect
* anything without initializing entry stats. */
- tor_addr_from_ipv4h(&addr, (uint32_t) 100);
- geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, now);
+ SET_TEST_ADDRESS(100);
+ geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, NULL, now);
s = geoip_format_entry_stats(now + 86400);
test_assert(!s);
/* Initialize stats, note one connecting client, and generate the
* entry-stats history string. */
geoip_entry_stats_init(now);
- tor_addr_from_ipv4h(&addr, (uint32_t) 100);
- geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, now);
+ SET_TEST_ADDRESS(100);
+ geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, NULL, now);
s = geoip_format_entry_stats(now + 86400);
test_streq(entry_stats_1, s);
tor_free(s);
@@ -1674,16 +984,16 @@ test_geoip(void)
/* Stop collecting stats, add another connecting client, and ensure we
* don't generate a history string. */
geoip_entry_stats_term();
- tor_addr_from_ipv4h(&addr, (uint32_t) 101);
- geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, now);
+ SET_TEST_ADDRESS(101);
+ geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, NULL, now);
s = geoip_format_entry_stats(now + 86400);
test_assert(!s);
/* Re-start stats, add a connecting client, reset stats, and make sure
* that we get an all empty history string. */
geoip_entry_stats_init(now);
- tor_addr_from_ipv4h(&addr, (uint32_t) 100);
- geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, now);
+ SET_TEST_ADDRESS(100);
+ geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, NULL, now);
geoip_reset_entry_stats(now);
s = geoip_format_entry_stats(now + 86400);
test_streq(entry_stats_2, s);
@@ -1695,8 +1005,84 @@ test_geoip(void)
done:
tor_free(s);
+ tor_free(v);
+}
+
+static void
+test_geoip_with_pt(void)
+{
+ time_t now = 1281533250; /* 2010-08-11 13:27:30 UTC */
+ char *s = NULL;
+ int i;
+ tor_addr_t addr;
+ struct in6_addr in6;
+
+ get_options_mutable()->BridgeRelay = 1;
+ get_options_mutable()->BridgeRecordUsageByCountry = 1;
+
+ memset(&in6, 0, sizeof(in6));
+
+ /* No clients seen yet. */
+ s = geoip_get_transport_history();
+ tor_assert(!s);
+
+ /* 4 connections without a pluggable transport */
+ for (i=0; i < 4; ++i) {
+ SET_TEST_ADDRESS(i);
+ geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, NULL, now-7200);
+ }
+
+ /* 9 connections with "alpha" */
+ for (i=4; i < 13; ++i) {
+ SET_TEST_ADDRESS(i);
+ geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, "alpha", now-7200);
+ }
+
+ /* one connection with "beta" */
+ SET_TEST_ADDRESS(13);
+ geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, "beta", now-7200);
+
+ /* 14 connections with "charlie" */
+ for (i=14; i < 28; ++i) {
+ SET_TEST_ADDRESS(i);
+ geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, "charlie", now-7200);
+ }
+
+ /* 131 connections with "ddr" */
+ for (i=28; i < 159; ++i) {
+ SET_TEST_ADDRESS(i);
+ geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, "ddr", now-7200);
+ }
+
+ /* 8 connections with "entropy" */
+ for (i=159; i < 167; ++i) {
+ SET_TEST_ADDRESS(i);
+ geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, "entropy", now-7200);
+ }
+
+ /* 2 connections from the same IP with two different transports. */
+ SET_TEST_ADDRESS(++i);
+ geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, "fire", now-7200);
+ geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, "google", now-7200);
+
+ /* Test the transport history string. */
+ s = geoip_get_transport_history();
+ tor_assert(s);
+ test_streq(s, "<OR>=8,alpha=16,beta=8,charlie=16,ddr=136,"
+ "entropy=8,fire=8,google=8");
+
+ /* Stop collecting entry statistics. */
+ geoip_entry_stats_term();
+ get_options_mutable()->EntryStatistics = 0;
+
+ done:
+ tor_free(s);
}
+#undef SET_TEST_ADDRESS
+#undef SET_TEST_IPV6
+#undef CHECK_COUNTRY
+
/** Run unit tests for stats code. */
static void
test_stats(void)
@@ -1883,45 +1269,27 @@ const struct testcase_setup_t legacy_setup = {
#define ENT(name) \
{ #name, legacy_test_helper, 0, &legacy_setup, test_ ## name }
-#define SUBENT(group, name) \
- { #group "_" #name, legacy_test_helper, 0, &legacy_setup, \
- test_ ## group ## _ ## name }
-#define DISABLED(name) \
- { #name, legacy_test_helper, TT_SKIP, &legacy_setup, test_ ## name }
#define FORK(name) \
{ #name, legacy_test_helper, TT_FORK, &legacy_setup, test_ ## name }
static struct testcase_t test_array[] = {
- ENT(buffers),
- { "buffer_copy", test_buffer_copy, 0, NULL, NULL },
ENT(onion_handshake),
+ { "bad_onion_handshake", test_bad_onion_handshake, 0, NULL, NULL },
+ ENT(onion_queues),
+#ifdef CURVE25519_ENABLED
+ { "ntor_handshake", test_ntor_handshake, 0, NULL, NULL },
+#endif
ENT(circuit_timeout),
- ENT(policies),
ENT(rend_fns),
ENT(geoip),
+ FORK(geoip_with_pt),
FORK(stats),
END_OF_TESTCASES
};
-#define SOCKSENT(name) \
- { #name, test_socks_##name, TT_FORK, &socks_setup, NULL }
-
-static struct testcase_t socks_tests[] = {
- SOCKSENT(4_unsupported_commands),
- SOCKSENT(4_supported_commands),
-
- SOCKSENT(5_unsupported_commands),
- SOCKSENT(5_supported_commands),
- SOCKSENT(5_no_authenticate),
- SOCKSENT(5_auth_before_negotiation),
- SOCKSENT(5_authenticate),
- SOCKSENT(5_authenticate_with_data),
-
- END_OF_TESTCASES
-};
-
extern struct testcase_t addr_tests[];
+extern struct testcase_t buffer_tests[];
extern struct testcase_t crypto_tests[];
extern struct testcase_t container_tests[];
extern struct testcase_t util_tests[];
@@ -1929,18 +1297,54 @@ extern struct testcase_t dir_tests[];
extern struct testcase_t microdesc_tests[];
extern struct testcase_t pt_tests[];
extern struct testcase_t config_tests[];
+extern struct testcase_t introduce_tests[];
+extern struct testcase_t replaycache_tests[];
+extern struct testcase_t relaycell_tests[];
+extern struct testcase_t cell_format_tests[];
+extern struct testcase_t circuitlist_tests[];
+extern struct testcase_t circuitmux_tests[];
+extern struct testcase_t cell_queue_tests[];
+extern struct testcase_t options_tests[];
+extern struct testcase_t socks_tests[];
+extern struct testcase_t extorport_tests[];
+extern struct testcase_t controller_event_tests[];
+extern struct testcase_t logging_tests[];
+extern struct testcase_t hs_tests[];
+extern struct testcase_t nodelist_tests[];
+extern struct testcase_t routerkeys_tests[];
+extern struct testcase_t oom_tests[];
+extern struct testcase_t policy_tests[];
+extern struct testcase_t status_tests[];
static struct testgroup_t testgroups[] = {
{ "", test_array },
+ { "buffer/", buffer_tests },
{ "socks/", socks_tests },
{ "addr/", addr_tests },
{ "crypto/", crypto_tests },
{ "container/", container_tests },
{ "util/", util_tests },
+ { "util/logging/", logging_tests },
+ { "cellfmt/", cell_format_tests },
+ { "cellqueue/", cell_queue_tests },
{ "dir/", dir_tests },
{ "dir/md/", microdesc_tests },
{ "pt/", pt_tests },
{ "config/", config_tests },
+ { "replaycache/", replaycache_tests },
+ { "relaycell/", relaycell_tests },
+ { "introduce/", introduce_tests },
+ { "circuitlist/", circuitlist_tests },
+ { "circuitmux/", circuitmux_tests },
+ { "options/", options_tests },
+ { "extorport/", extorport_tests },
+ { "control/", controller_event_tests },
+ { "hs/", hs_tests },
+ { "nodelist/", nodelist_tests },
+ { "routerkeys/", routerkeys_tests },
+ { "oom/", oom_tests },
+ { "policy/" , policy_tests },
+ { "status/" , status_tests },
END_OF_GROUPS
};
@@ -1953,10 +1357,11 @@ main(int c, const char **v)
char *errmsg = NULL;
int i, i_out;
int loglevel = LOG_ERR;
+ int accel_crypto = 0;
#ifdef USE_DMALLOC
{
- int r = CRYPTO_set_mem_ex_functions(_tor_malloc, _tor_realloc, _tor_free);
+ int r = CRYPTO_set_mem_ex_functions(tor_malloc_, tor_realloc_, tor_free_);
tor_assert(r);
}
#endif
@@ -1975,6 +1380,8 @@ main(int c, const char **v)
loglevel = LOG_INFO;
} else if (!strcmp(v[i], "--debug")) {
loglevel = LOG_DEBUG;
+ } else if (!strcmp(v[i], "--accel")) {
+ accel_crypto = 1;
} else {
v[i_out++] = v[i];
}
@@ -1989,11 +1396,12 @@ main(int c, const char **v)
}
options->command = CMD_RUN_UNITTESTS;
- if (crypto_global_init(0, NULL, NULL)) {
+ if (crypto_global_init(accel_crypto, NULL, NULL)) {
printf("Can't initialize crypto subsystem; exiting.\n");
return 1;
}
crypto_set_tls_dh_prime(NULL);
+ crypto_seed_rng(1);
rep_hist_init();
network_init();
setup_directory();
@@ -2006,8 +1414,6 @@ main(int c, const char **v)
return 1;
}
- crypto_seed_rng(1);
-
atexit(remove_directory);
have_failed = (tinytest_main(c, v, testgroups) != 0);
diff --git a/src/test/test.h b/src/test/test.h
index 0b6e6c60c..861ce5ac3 100644
--- a/src/test/test.h
+++ b/src/test/test.h
@@ -1,10 +1,10 @@
/* Copyright (c) 2001-2003, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
-#ifndef _TOR_TEST_H
-#define _TOR_TEST_H
+#ifndef TOR_TEST_H
+#define TOR_TEST_H
/**
* \file test.h
@@ -36,17 +36,7 @@
#define test_strneq(expr1, expr2) tt_str_op((expr1), !=, (expr2))
#define test_mem_op(expr1, op, expr2, len) \
- tt_assert_test_fmt_type(expr1,expr2,#expr1" "#op" "#expr2, \
- const char *, \
- (memcmp(val1_, val2_, len) op 0), \
- char *, "%s", \
- { size_t printlen = (len)*2+1; \
- print_ = tor_malloc(printlen); \
- base16_encode(print_, printlen, value_, \
- (len)); }, \
- { tor_free(print_); }, \
- TT_EXIT_TEST_FUNCTION \
- );
+ tt_mem_op((expr1), op, (expr2), (len))
#define test_memeq(expr1, expr2, len) test_mem_op((expr1), ==, (expr2), len)
#define test_memneq(expr1, expr2, len) test_mem_op((expr1), !=, (expr2), len)
@@ -65,11 +55,130 @@
#define test_memeq_hex(expr1, hex) test_mem_op_hex(expr1, ==, hex)
+#define tt_double_op(a,op,b) \
+ tt_assert_test_type(a,b,#a" "#op" "#b,double,(val1_ op val2_),"%f", \
+ TT_EXIT_TEST_FUNCTION)
+
+#ifdef _MSC_VER
+#define U64_PRINTF_TYPE uint64_t
+#define U64_PRINTF_TYPE int64_t
+#else
+#define U64_PRINTF_TYPE unsigned long long
+#define I64_PRINTF_TYPE long long
+#endif
+
+#define tt_size_op(a,op,b) \
+ tt_assert_test_fmt_type(a,b,#a" "#op" "#b,size_t,(val1_ op val2_), \
+ U64_PRINTF_TYPE, U64_FORMAT, \
+ {print_ = (U64_PRINTF_TYPE) value_;}, {}, TT_EXIT_TEST_FUNCTION)
+
+#define tt_u64_op(a,op,b) \
+ tt_assert_test_fmt_type(a,b,#a" "#op" "#b,uint64_t,(val1_ op val2_), \
+ U64_PRINTF_TYPE, U64_FORMAT, \
+ {print_ = (U64_PRINTF_TYPE) value_;}, {}, TT_EXIT_TEST_FUNCTION)
+
+#define tt_i64_op(a,op,b) \
+ tt_assert_test_fmt_type(a,b,#a" "#op" "#b,int64_t,(val1_ op val2_), \
+ I64_PRINTF_TYPE, I64_FORMAT, \
+ {print_ = (I64_PRINTF_TYPE) value_;}, {}, TT_EXIT_TEST_FUNCTION)
+
const char *get_fname(const char *name);
crypto_pk_t *pk_generate(int idx);
void legacy_test_helper(void *data);
extern const struct testcase_setup_t legacy_setup;
+#define US2_CONCAT_2__(a, b) a ## __ ## b
+#define US_CONCAT_2__(a, b) a ## _ ## b
+#define US_CONCAT_3__(a, b, c) a ## _ ## b ## _ ## c
+#define US_CONCAT_2_(a, b) US_CONCAT_2__(a, b)
+#define US_CONCAT_3_(a, b, c) US_CONCAT_3__(a, b, c)
+
+/*
+ * These macros are helpful for streamlining the authorship of several test
+ * cases that use mocks.
+ *
+ * The pattern is as follows.
+ * * Declare a top level namespace:
+ * #define NS_MODULE foo
+ *
+ * * For each test case you want to write, create a new submodule in the
+ * namespace. All mocks and other information should belong to a single
+ * submodule to avoid interference with other test cases.
+ * You can simply name the submodule after the function in the module you
+ * are testing:
+ * #define NS_SUBMODULE some_function
+ * or, if you're wanting to write several tests against the same function,
+ * ie., you are testing an aspect of that function, you can use:
+ * #define NS_SUBMODULE ASPECT(some_function, behavior)
+ *
+ * * Declare all the mocks you will use. The NS_DECL macro serves to declare
+ * the mock in the current namespace (defined by NS_MODULE and NS_SUBMODULE).
+ * It behaves like MOCK_DECL:
+ * NS_DECL(int, dependent_function, (void *));
+ * Here, dependent_function must be declared and implemented with the
+ * MOCK_DECL and MOCK_IMPL macros. The NS_DECL macro also defines an integer
+ * global for use for tracking how many times a mock was called, and can be
+ * accessed by CALLED(mock_name). For example, you might put
+ * CALLED(dependent_function)++;
+ * in your mock body.
+ *
+ * * Define a function called NS(main) that will contain the body of the
+ * test case. The NS macro can be used to reference a name in the current
+ * namespace.
+ *
+ * * In NS(main), indicate that a mock function in the current namespace,
+ * declared with NS_DECL is to override that in the global namespace,
+ * with the NS_MOCK macro:
+ * NS_MOCK(dependent_function)
+ * Unmock with:
+ * NS_UNMOCK(dependent_function)
+ *
+ * * Define the mocks with the NS macro, eg.,
+ * int
+ * NS(dependent_function)(void *)
+ * {
+ * CALLED(dependent_function)++;
+ * }
+ *
+ * * In the struct testcase_t array, you can use the TEST_CASE and
+ * TEST_CASE_ASPECT macros to define the cases without having to do so
+ * explicitly nor without having to reset NS_SUBMODULE, eg.,
+ * struct testcase_t foo_tests[] = {
+ * TEST_CASE_ASPECT(some_function, behavior),
+ * ...
+ * END_OF_TESTCASES
+ * which will define a test case named "some_function__behavior".
+ */
+
+#define NAME_TEST_(name) #name
+#define NAME_TEST(name) NAME_TEST_(name)
+#define ASPECT(test_module, test_name) US2_CONCAT_2__(test_module, test_name)
+#define TEST_CASE(function) \
+ { \
+ NAME_TEST(function), \
+ NS_FULL(NS_MODULE, function, test_main), \
+ TT_FORK, \
+ NULL, \
+ NULL, \
+ }
+#define TEST_CASE_ASPECT(function, aspect) \
+ { \
+ NAME_TEST(ASPECT(function, aspect)), \
+ NS_FULL(NS_MODULE, ASPECT(function, aspect), test_main), \
+ TT_FORK, \
+ NULL, \
+ NULL, \
+ }
+
+#define NS(name) US_CONCAT_3_(NS_MODULE, NS_SUBMODULE, name)
+#define NS_FULL(module, submodule, name) US_CONCAT_3_(module, submodule, name)
+
+#define CALLED(mock_name) US_CONCAT_2_(NS(mock_name), called)
+#define NS_DECL(retval, mock_fn, args) \
+ static retval NS(mock_fn) args; int CALLED(mock_fn) = 0
+#define NS_MOCK(name) MOCK(name, NS(name))
+#define NS_UNMOCK(name) UNMOCK(name)
+
#endif
diff --git a/src/test/test_addr.c b/src/test/test_addr.c
index e3f38073e..50011e606 100644
--- a/src/test/test_addr.c
+++ b/src/test/test_addr.c
@@ -1,11 +1,13 @@
/* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
+#define ADDRESSMAP_PRIVATE
#include "orconfig.h"
#include "or.h"
#include "test.h"
+#include "addressmap.h"
static void
test_addr_basic(void)
@@ -38,10 +40,14 @@ test_addr_basic(void)
tor_free(cp);
u32 = 3;
test_assert(!addr_port_lookup(LOG_WARN, "localhost", NULL, &u32, &u16));
- test_eq(cp, NULL);
+ test_eq_ptr(cp, NULL);
test_eq(u32, 0x7f000001u);
test_eq(u16, 0);
tor_free(cp);
+
+ test_assert(addr_port_lookup(LOG_WARN, "localhost:3", &cp, &u32, NULL));
+ tor_free(cp);
+
test_eq(0, addr_mask_get_bits(0x0u));
test_eq(32, addr_mask_get_bits(0xFFFFFFFFu));
test_eq(16, addr_mask_get_bits(0xFFFF0000u));
@@ -67,10 +73,10 @@ test_addr_basic(void)
}
done:
- ;
+ tor_free(cp);
}
-#define _test_op_ip6(a,op,b,e1,e2) \
+#define test_op_ip6_(a,op,b,e1,e2) \
STMT_BEGIN \
tt_assert_test_fmt_type(a,b,e1" "#op" "e2,struct in6_addr*, \
(memcmp(val1_->s6_addr, val2_->s6_addr, 16) op 0), \
@@ -93,7 +99,7 @@ test_addr_basic(void)
#define test_pton6_same(a,b) STMT_BEGIN \
test_eq(tor_inet_pton(AF_INET6, a, &a1), 1); \
test_eq(tor_inet_pton(AF_INET6, b, &a2), 1); \
- _test_op_ip6(&a1,==,&a2,#a,#b); \
+ test_op_ip6_(&a1,==,&a2,#a,#b); \
STMT_END
/** Helper: Assert that <b>a</b> is recognized as a bad IPv6 address by
@@ -108,7 +114,7 @@ test_addr_basic(void)
test_eq(tor_inet_pton(AF_INET6, a, &a1), 1); \
test_streq(tor_inet_ntop(AF_INET6, &a1, buf, sizeof(buf)), b); \
test_eq(tor_inet_pton(AF_INET6, b, &a2), 1); \
- _test_op_ip6(&a1, ==, &a2, a, b); \
+ test_op_ip6_(&a1, ==, &a2, a, b); \
STMT_END
/** Helper: assert that <b>a</b> parses by tor_inet_pton() into a address that
@@ -159,7 +165,8 @@ test_addr_basic(void)
* as <b>pt1..pt2</b>. */
#define test_addr_mask_ports_parse(xx, f, ip1, ip2, ip3, ip4, mm, pt1, pt2) \
STMT_BEGIN \
- test_eq(tor_addr_parse_mask_ports(xx, &t1, &mask, &port1, &port2), f); \
+ test_eq(tor_addr_parse_mask_ports(xx, 0, &t1, &mask, &port1, &port2), \
+ f); \
p1=tor_inet_ntop(AF_INET6, &t1.addr.in6_addr, bug, sizeof(bug)); \
test_eq(htonl(ip1), tor_addr_to_in6_addr32(&t1)[0]); \
test_eq(htonl(ip2), tor_addr_to_in6_addr32(&t1)[1]); \
@@ -214,11 +221,12 @@ test_addr_ip6_helpers(void)
/* ==== Converting to and from sockaddr_t. */
sin = (struct sockaddr_in *)&sa_storage;
sin->sin_family = AF_INET;
- sin->sin_port = 9090;
+ sin->sin_port = htons(9090);
sin->sin_addr.s_addr = htonl(0x7f7f0102); /*127.127.1.2*/
- tor_addr_from_sockaddr(&t1, (struct sockaddr *)sin, NULL);
+ tor_addr_from_sockaddr(&t1, (struct sockaddr *)sin, &port1);
test_eq(tor_addr_family(&t1), AF_INET);
test_eq(tor_addr_to_ipv4h(&t1), 0x7f7f0102);
+ tt_int_op(port1, ==, 9090);
memset(&sa_storage, 0, sizeof(sa_storage));
test_eq(sizeof(struct sockaddr_in),
@@ -232,8 +240,9 @@ test_addr_ip6_helpers(void)
sin6->sin6_family = AF_INET6;
sin6->sin6_port = htons(7070);
sin6->sin6_addr.s6_addr[0] = 128;
- tor_addr_from_sockaddr(&t1, (struct sockaddr *)sin6, NULL);
+ tor_addr_from_sockaddr(&t1, (struct sockaddr *)sin6, &port1);
test_eq(tor_addr_family(&t1), AF_INET6);
+ tt_int_op(port1, ==, 7070);
p1 = tor_addr_to_str(buf, &t1, sizeof(buf), 0);
test_streq(p1, "8000::");
@@ -337,6 +346,9 @@ test_addr_ip6_helpers(void)
test_pton6_bad("a:::b:c");
test_pton6_bad(":::a:b:c");
test_pton6_bad("a:b:c:::");
+ test_pton6_bad("1.2.3.4");
+ test_pton6_bad(":1.2.3.4");
+ test_pton6_bad(".2.3.4");
/* test internal checking */
test_external_ip("fbff:ffff::2:7", 0);
@@ -393,7 +405,6 @@ test_addr_ip6_helpers(void)
test_internal_ip("::ffff:169.254.0.0", 0);
test_internal_ip("::ffff:169.254.255.255", 0);
test_external_ip("::ffff:169.255.0.0", 0);
- test_assert(is_internal_IP(0x7f000001, 0));
/* tor_addr_compare(tor_addr_t x2) */
test_addr_compare("ffff::", ==, "ffff::0");
@@ -401,11 +412,11 @@ test_addr_ip6_helpers(void)
test_addr_compare("0::2:2:1", <, "0::ffff:0.3.2.1");
test_addr_compare("0::ffff:0.3.2.1", >, "0::0:0:0");
test_addr_compare("0::ffff:5.2.2.1", <, "::ffff:6.0.0.0"); /* XXXX wrong. */
- tor_addr_parse_mask_ports("[::ffff:2.3.4.5]", &t1, NULL, NULL, NULL);
- tor_addr_parse_mask_ports("2.3.4.5", &t2, NULL, NULL, NULL);
+ tor_addr_parse_mask_ports("[::ffff:2.3.4.5]", 0, &t1, NULL, NULL, NULL);
+ tor_addr_parse_mask_ports("2.3.4.5", 0, &t2, NULL, NULL, NULL);
test_assert(tor_addr_compare(&t1, &t2, CMP_SEMANTIC) == 0);
- tor_addr_parse_mask_ports("[::ffff:2.3.4.4]", &t1, NULL, NULL, NULL);
- tor_addr_parse_mask_ports("2.3.4.5", &t2, NULL, NULL, NULL);
+ tor_addr_parse_mask_ports("[::ffff:2.3.4.4]", 0, &t1, NULL, NULL, NULL);
+ tor_addr_parse_mask_ports("2.3.4.5", 0, &t2, NULL, NULL, NULL);
test_assert(tor_addr_compare(&t1, &t2, CMP_SEMANTIC) < 0);
/* test compare_masked */
@@ -461,6 +472,9 @@ test_addr_ip6_helpers(void)
test_eq(0, i);
i = tor_addr_parse_PTR_name(&t1, "Foobar.baz", AF_UNSPEC, 1);
test_eq(0, i);
+ i = tor_addr_parse_PTR_name(&t1, "9999999999999999999999999999.in-addr.arpa",
+ AF_UNSPEC, 1);
+ test_eq(-1, i);
i = tor_addr_parse_PTR_name(&t1, "1.0.168.192.in-addr.arpa",
AF_UNSPEC, 1);
test_eq(1, i);
@@ -568,6 +582,7 @@ test_addr_ip6_helpers(void)
test_streq(rbuf, addr_PTR);
}
+ /* XXXX turn this into a separate function; it's not all IPv6. */
/* test tor_addr_parse_mask_ports */
test_addr_mask_ports_parse("[::f]/17:47-95", AF_INET6,
0, 0, 0, 0x0000000f, 17, 47, 95);
@@ -581,27 +596,123 @@ test_addr_ip6_helpers(void)
0xabcd0002, 0, 0, 0x044a0000, 128, 2, 65000);
test_streq(p1, "abcd:2::44a:0");
- r=tor_addr_parse_mask_ports("[fefef::]/112", &t1, NULL, NULL, NULL);
+ /* Try some long addresses. */
+ r=tor_addr_parse_mask_ports("[ffff:1111:1111:1111:1111:1111:1111:1111]",
+ 0, &t1, NULL, NULL, NULL);
+ test_assert(r == AF_INET6);
+ r=tor_addr_parse_mask_ports("[ffff:1111:1111:1111:1111:1111:1111:11111]",
+ 0, &t1, NULL, NULL, NULL);
+ test_assert(r == -1);
+ r=tor_addr_parse_mask_ports("[ffff:1111:1111:1111:1111:1111:1111:1111:1]",
+ 0, &t1, NULL, NULL, NULL);
+ test_assert(r == -1);
+ r=tor_addr_parse_mask_ports(
+ "[ffff:1111:1111:1111:1111:1111:1111:ffff:"
+ "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:"
+ "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:"
+ "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]",
+ 0, &t1, NULL, NULL, NULL);
+ test_assert(r == -1);
+ /* Try some failing cases. */
+ r=tor_addr_parse_mask_ports("[fefef::]/112", 0, &t1, NULL, NULL, NULL);
+ test_assert(r == -1);
+ r=tor_addr_parse_mask_ports("[fefe::/112", 0, &t1, NULL, NULL, NULL);
test_assert(r == -1);
- r=tor_addr_parse_mask_ports("efef::/112", &t1, NULL, NULL, NULL);
+ r=tor_addr_parse_mask_ports("[fefe::", 0, &t1, NULL, NULL, NULL);
test_assert(r == -1);
- r=tor_addr_parse_mask_ports("[f:f:f:f:f:f:f:f::]", &t1, NULL, NULL, NULL);
+ r=tor_addr_parse_mask_ports("[fefe::X]", 0, &t1, NULL, NULL, NULL);
test_assert(r == -1);
- r=tor_addr_parse_mask_ports("[::f:f:f:f:f:f:f:f]", &t1, NULL, NULL, NULL);
+ r=tor_addr_parse_mask_ports("efef::/112", 0, &t1, NULL, NULL, NULL);
test_assert(r == -1);
- r=tor_addr_parse_mask_ports("[f:f:f:f:f:f:f:f:f]", &t1, NULL, NULL, NULL);
+ r=tor_addr_parse_mask_ports("[f:f:f:f:f:f:f:f::]",0,&t1, NULL, NULL, NULL);
+ test_assert(r == -1);
+ r=tor_addr_parse_mask_ports("[::f:f:f:f:f:f:f:f]",0,&t1, NULL, NULL, NULL);
+ test_assert(r == -1);
+ r=tor_addr_parse_mask_ports("[f:f:f:f:f:f:f:f:f]",0,&t1, NULL, NULL, NULL);
+ test_assert(r == -1);
+ r=tor_addr_parse_mask_ports("[f:f:f:f:f::]/fred",0,&t1,&mask, NULL, NULL);
+ test_assert(r == -1);
+ r=tor_addr_parse_mask_ports("[f:f:f:f:f::]/255.255.0.0",
+ 0,&t1, NULL, NULL, NULL);
+ test_assert(r == -1);
+ /* This one will get rejected because it isn't a pure prefix. */
+ r=tor_addr_parse_mask_ports("1.1.2.3/255.255.64.0",0,&t1, &mask,NULL,NULL);
test_assert(r == -1);
/* Test for V4-mapped address with mask < 96. (arguably not valid) */
- r=tor_addr_parse_mask_ports("[::ffff:1.1.2.2/33]", &t1, &mask, NULL, NULL);
+ r=tor_addr_parse_mask_ports("[::ffff:1.1.2.2/33]",0,&t1, &mask, NULL, NULL);
+ test_assert(r == -1);
+ r=tor_addr_parse_mask_ports("1.1.2.2/33",0,&t1, &mask, NULL, NULL);
test_assert(r == -1);
- r=tor_addr_parse_mask_ports("1.1.2.2/33", &t1, &mask, NULL, NULL);
+ /* Try extended wildcard addresses with out TAPMP_EXTENDED_STAR*/
+ r=tor_addr_parse_mask_ports("*4",0,&t1, &mask, NULL, NULL);
test_assert(r == -1);
- r=tor_addr_parse_mask_ports("1.1.2.2/31", &t1, &mask, NULL, NULL);
+ r=tor_addr_parse_mask_ports("*6",0,&t1, &mask, NULL, NULL);
+ test_assert(r == -1);
+#if 0
+ /* Try a mask with a wildcard. */
+ r=tor_addr_parse_mask_ports("*/16",0,&t1, &mask, NULL, NULL);
+ test_assert(r == -1);
+ r=tor_addr_parse_mask_ports("*4/16",TAPMP_EXTENDED_STAR,
+ &t1, &mask, NULL, NULL);
+ test_assert(r == -1);
+ r=tor_addr_parse_mask_ports("*6/30",TAPMP_EXTENDED_STAR,
+ &t1, &mask, NULL, NULL);
+ test_assert(r == -1);
+#endif
+ /* Basic mask tests*/
+ r=tor_addr_parse_mask_ports("1.1.2.2/31",0,&t1, &mask, NULL, NULL);
+ test_assert(r == AF_INET);
+ tt_int_op(mask,==,31);
+ tt_int_op(tor_addr_family(&t1),==,AF_INET);
+ tt_int_op(tor_addr_to_ipv4h(&t1),==,0x01010202);
+ r=tor_addr_parse_mask_ports("3.4.16.032:1-2",0,&t1, &mask, &port1, &port2);
test_assert(r == AF_INET);
- r=tor_addr_parse_mask_ports("[efef::]/112", &t1, &mask, &port1, &port2);
+ tt_int_op(mask,==,32);
+ tt_int_op(tor_addr_family(&t1),==,AF_INET);
+ tt_int_op(tor_addr_to_ipv4h(&t1),==,0x03041020);
+ test_assert(port1 == 1);
+ test_assert(port2 == 2);
+ r=tor_addr_parse_mask_ports("1.1.2.3/255.255.128.0",0,&t1, &mask,NULL,NULL);
+ test_assert(r == AF_INET);
+ tt_int_op(mask,==,17);
+ tt_int_op(tor_addr_family(&t1),==,AF_INET);
+ tt_int_op(tor_addr_to_ipv4h(&t1),==,0x01010203);
+ r=tor_addr_parse_mask_ports("[efef::]/112",0,&t1, &mask, &port1, &port2);
test_assert(r == AF_INET6);
test_assert(port1 == 1);
test_assert(port2 == 65535);
+ /* Try regular wildcard behavior without TAPMP_EXTENDED_STAR */
+ r=tor_addr_parse_mask_ports("*:80-443",0,&t1,&mask,&port1,&port2);
+ tt_int_op(r,==,AF_INET); /* Old users of this always get inet */
+ tt_int_op(tor_addr_family(&t1),==,AF_INET);
+ tt_int_op(tor_addr_to_ipv4h(&t1),==,0);
+ tt_int_op(mask,==,0);
+ tt_int_op(port1,==,80);
+ tt_int_op(port2,==,443);
+ /* Now try wildcards *with* TAPMP_EXTENDED_STAR */
+ r=tor_addr_parse_mask_ports("*:8000-9000",TAPMP_EXTENDED_STAR,
+ &t1,&mask,&port1,&port2);
+ tt_int_op(r,==,AF_UNSPEC);
+ tt_int_op(tor_addr_family(&t1),==,AF_UNSPEC);
+ tt_int_op(mask,==,0);
+ tt_int_op(port1,==,8000);
+ tt_int_op(port2,==,9000);
+ r=tor_addr_parse_mask_ports("*4:6667",TAPMP_EXTENDED_STAR,
+ &t1,&mask,&port1,&port2);
+ tt_int_op(r,==,AF_INET);
+ tt_int_op(tor_addr_family(&t1),==,AF_INET);
+ tt_int_op(tor_addr_to_ipv4h(&t1),==,0);
+ tt_int_op(mask,==,0);
+ tt_int_op(port1,==,6667);
+ tt_int_op(port2,==,6667);
+ r=tor_addr_parse_mask_ports("*6",TAPMP_EXTENDED_STAR,
+ &t1,&mask,&port1,&port2);
+ tt_int_op(r,==,AF_INET6);
+ tt_int_op(tor_addr_family(&t1),==,AF_INET6);
+ tt_assert(tor_mem_is_zero((const char*)tor_addr_to_in6_addr32(&t1), 16));
+ tt_int_op(mask,==,0);
+ tt_int_op(port1,==,1);
+ tt_int_op(port2,==,65535);
/* make sure inet address lengths >= max */
test_assert(INET_NTOA_BUF_LEN >= sizeof("255.255.255.255"));
@@ -623,6 +734,257 @@ test_addr_ip6_helpers(void)
;
}
+/** Test tor_addr_port_parse(). */
+static void
+test_addr_parse(void)
+{
+ int r;
+ tor_addr_t addr;
+ char buf[TOR_ADDR_BUF_LEN];
+ uint16_t port = 0;
+
+ /* Correct call. */
+ r= tor_addr_port_parse(LOG_DEBUG,
+ "192.0.2.1:1234",
+ &addr, &port, -1);
+ test_assert(r == 0);
+ tor_addr_to_str(buf, &addr, sizeof(buf), 0);
+ test_streq(buf, "192.0.2.1");
+ test_eq(port, 1234);
+
+ r= tor_addr_port_parse(LOG_DEBUG,
+ "[::1]:1234",
+ &addr, &port, -1);
+ test_assert(r == 0);
+ tor_addr_to_str(buf, &addr, sizeof(buf), 0);
+ test_streq(buf, "::1");
+ test_eq(port, 1234);
+
+ /* Domain name. */
+ r= tor_addr_port_parse(LOG_DEBUG,
+ "torproject.org:1234",
+ &addr, &port, -1);
+ test_assert(r == -1);
+
+ /* Only IP. */
+ r= tor_addr_port_parse(LOG_DEBUG,
+ "192.0.2.2",
+ &addr, &port, -1);
+ test_assert(r == -1);
+
+ r= tor_addr_port_parse(LOG_DEBUG,
+ "192.0.2.2",
+ &addr, &port, 200);
+ test_assert(r == 0);
+ tt_int_op(port,==,200);
+
+ r= tor_addr_port_parse(LOG_DEBUG,
+ "[::1]",
+ &addr, &port, -1);
+ test_assert(r == -1);
+
+ r= tor_addr_port_parse(LOG_DEBUG,
+ "[::1]",
+ &addr, &port, 400);
+ test_assert(r == 0);
+ tt_int_op(port,==,400);
+
+ /* Bad port. */
+ r= tor_addr_port_parse(LOG_DEBUG,
+ "192.0.2.2:66666",
+ &addr, &port, -1);
+ test_assert(r == -1);
+ r= tor_addr_port_parse(LOG_DEBUG,
+ "192.0.2.2:66666",
+ &addr, &port, 200);
+ test_assert(r == -1);
+
+ /* Only domain name */
+ r= tor_addr_port_parse(LOG_DEBUG,
+ "torproject.org",
+ &addr, &port, -1);
+ test_assert(r == -1);
+ r= tor_addr_port_parse(LOG_DEBUG,
+ "torproject.org",
+ &addr, &port, 200);
+ test_assert(r == -1);
+
+ /* Bad IP address */
+ r= tor_addr_port_parse(LOG_DEBUG,
+ "192.0.2:1234",
+ &addr, &port, -1);
+ test_assert(r == -1);
+
+ /* Make sure that the default port has lower priority than the real
+ one */
+ r= tor_addr_port_parse(LOG_DEBUG,
+ "192.0.2.2:1337",
+ &addr, &port, 200);
+ test_assert(r == 0);
+ tt_int_op(port,==,1337);
+
+ r= tor_addr_port_parse(LOG_DEBUG,
+ "[::1]:1369",
+ &addr, &port, 200);
+ test_assert(r == 0);
+ tt_int_op(port,==,1369);
+
+ done:
+ ;
+}
+
+static void
+update_difference(int ipv6, uint8_t *d,
+ const tor_addr_t *a, const tor_addr_t *b)
+{
+ const int n_bytes = ipv6 ? 16 : 4;
+ uint8_t a_tmp[4], b_tmp[4];
+ const uint8_t *ba, *bb;
+ int i;
+
+ if (ipv6) {
+ ba = tor_addr_to_in6_addr8(a);
+ bb = tor_addr_to_in6_addr8(b);
+ } else {
+ set_uint32(a_tmp, tor_addr_to_ipv4n(a));
+ set_uint32(b_tmp, tor_addr_to_ipv4n(b));
+ ba = a_tmp; bb = b_tmp;
+ }
+
+ for (i = 0; i < n_bytes; ++i) {
+ d[i] |= ba[i] ^ bb[i];
+ }
+}
+
+static void
+test_virtaddrmap(void *data)
+{
+ /* Let's start with a bunch of random addresses. */
+ int ipv6, bits, iter, b;
+ virtual_addr_conf_t cfg[2];
+ uint8_t bytes[16];
+
+ (void)data;
+
+ tor_addr_parse(&cfg[0].addr, "64.65.0.0");
+ tor_addr_parse(&cfg[1].addr, "3491:c0c0::");
+
+ for (ipv6 = 0; ipv6 <= 1; ++ipv6) {
+ for (bits = 0; bits < 18; ++bits) {
+ tor_addr_t last_a;
+ cfg[ipv6].bits = bits;
+ memset(bytes, 0, sizeof(bytes));
+ tor_addr_copy(&last_a, &cfg[ipv6].addr);
+ /* Generate 128 addresses with each addr/bits combination. */
+ for (iter = 0; iter < 128; ++iter) {
+ tor_addr_t a;
+
+ get_random_virtual_addr(&cfg[ipv6], &a);
+ //printf("%s\n", fmt_addr(&a));
+ /* Make sure that the first b bits match the configured network */
+ tt_int_op(0, ==, tor_addr_compare_masked(&a, &cfg[ipv6].addr,
+ bits, CMP_EXACT));
+
+ /* And track which bits have been different between pairs of
+ * addresses */
+ update_difference(ipv6, bytes, &last_a, &a);
+ }
+
+ /* Now make sure all but the first 'bits' bits of bytes are true */
+ for (b = bits+1; b < (ipv6?128:32); ++b) {
+ tt_assert(1 & (bytes[b/8] >> (7-(b&7))));
+ }
+ }
+ }
+
+ done:
+ ;
+}
+
+static void
+test_addr_localname(void *arg)
+{
+ (void)arg;
+ tt_assert(tor_addr_hostname_is_local("localhost"));
+ tt_assert(tor_addr_hostname_is_local("LOCALHOST"));
+ tt_assert(tor_addr_hostname_is_local("LocalHost"));
+ tt_assert(tor_addr_hostname_is_local("local"));
+ tt_assert(tor_addr_hostname_is_local("LOCAL"));
+ tt_assert(tor_addr_hostname_is_local("here.now.local"));
+ tt_assert(tor_addr_hostname_is_local("here.now.LOCAL"));
+
+ tt_assert(!tor_addr_hostname_is_local(" localhost"));
+ tt_assert(!tor_addr_hostname_is_local("www.torproject.org"));
+ done:
+ ;
+}
+
+static void
+test_addr_dup_ip(void *arg)
+{
+ char *v = NULL;
+ (void)arg;
+#define CHECK(ip, s) do { \
+ v = tor_dup_ip(ip); \
+ tt_str_op(v,==,(s)); \
+ tor_free(v); \
+ } while (0)
+
+ CHECK(0xffffffff, "255.255.255.255");
+ CHECK(0x00000000, "0.0.0.0");
+ CHECK(0x7f000001, "127.0.0.1");
+ CHECK(0x01020304, "1.2.3.4");
+
+#undef CHECK
+ done:
+ tor_free(v);
+}
+
+static void
+test_addr_sockaddr_to_str(void *arg)
+{
+ char *v = NULL;
+ struct sockaddr_in sin;
+ struct sockaddr_in6 sin6;
+ struct sockaddr_storage ss;
+#ifdef HAVE_SYS_UN_H
+ struct sockaddr_un s_un;
+#endif
+#define CHECK(sa, s) do { \
+ v = tor_sockaddr_to_str((const struct sockaddr*) &(sa)); \
+ tt_str_op(v,==,(s)); \
+ tor_free(v); \
+ } while (0)
+ (void)arg;
+
+ memset(&ss,0,sizeof(ss));
+ ss.ss_family = AF_UNSPEC;
+ CHECK(ss, "unspec");
+
+ memset(&sin,0,sizeof(sin));
+ sin.sin_family = AF_INET;
+ sin.sin_addr.s_addr = htonl(0x7f808001);
+ sin.sin_port = htons(1234);
+ CHECK(sin, "127.128.128.1:1234");
+
+#ifdef HAVE_SYS_UN_H
+ memset(&s_un,0,sizeof(s_un));
+ s_un.sun_family = AF_UNIX;
+ strlcpy(s_un.sun_path, "/here/is/a/path", sizeof(s_un.sun_path));
+ CHECK(s_un, "unix:/here/is/a/path");
+#endif
+
+ memset(&sin6,0,sizeof(sin6));
+ sin6.sin6_family = AF_INET6;
+ memcpy(sin6.sin6_addr.s6_addr, "\x20\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x1a\x2b\x3c\x4d\x5e\x00\x01", 16);
+ sin6.sin6_port = htons(1234);
+ CHECK(sin6, "[2000::1a:2b3c:4d5e:1]:1234");
+
+ done:
+ tor_free(v);
+}
+
static void
test_addr_is_loopback(void *data)
{
@@ -658,13 +1020,45 @@ test_addr_is_loopback(void *data)
;
}
+static void
+test_addr_make_null(void *data)
+{
+ tor_addr_t *addr = tor_malloc(sizeof(*addr));
+ tor_addr_t *zeros = tor_malloc_zero(sizeof(*addr));
+ char buf[TOR_ADDR_BUF_LEN];
+ (void) data;
+ /* Ensure that before tor_addr_make_null, addr != 0's */
+ memset(addr, 1, sizeof(*addr));
+ tt_int_op(memcmp(addr, zeros, sizeof(*addr)), !=, 0);
+ /* Test with AF == AF_INET */
+ zeros->family = AF_INET;
+ tor_addr_make_null(addr, AF_INET);
+ tt_int_op(memcmp(addr, zeros, sizeof(*addr)), ==, 0);
+ tt_str_op(tor_addr_to_str(buf, addr, sizeof(buf), 0), ==, "0.0.0.0");
+ /* Test with AF == AF_INET6 */
+ memset(addr, 1, sizeof(*addr));
+ zeros->family = AF_INET6;
+ tor_addr_make_null(addr, AF_INET6);
+ tt_int_op(memcmp(addr, zeros, sizeof(*addr)), ==, 0);
+ tt_str_op(tor_addr_to_str(buf, addr, sizeof(buf), 0), ==, "::");
+ done:
+ tor_free(addr);
+ tor_free(zeros);
+}
+
#define ADDR_LEGACY(name) \
{ #name, legacy_test_helper, 0, &legacy_setup, test_addr_ ## name }
struct testcase_t addr_tests[] = {
ADDR_LEGACY(basic),
ADDR_LEGACY(ip6_helpers),
+ ADDR_LEGACY(parse),
+ { "virtaddr", test_virtaddrmap, 0, NULL, NULL },
+ { "localname", test_addr_localname, 0, NULL, NULL },
+ { "dup_ip", test_addr_dup_ip, 0, NULL, NULL },
+ { "sockaddr_to_str", test_addr_sockaddr_to_str, 0, NULL, NULL },
{ "is_loopback", test_addr_is_loopback, 0, NULL, NULL },
+ { "make_null", test_addr_make_null, 0, NULL, NULL },
END_OF_TESTCASES
};
diff --git a/src/test/test_bt_cl.c b/src/test/test_bt_cl.c
new file mode 100644
index 000000000..45ae82fb8
--- /dev/null
+++ b/src/test/test_bt_cl.c
@@ -0,0 +1,109 @@
+/* Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#include "orconfig.h"
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "or.h"
+#include "util.h"
+#include "backtrace.h"
+#include "torlog.h"
+
+/* -1: no crash.
+ * 0: crash with a segmentation fault.
+ * 1x: crash with an assertion failure. */
+static int crashtype = 0;
+
+#ifdef __GNUC__
+#define NOINLINE __attribute__((noinline))
+#define NORETURN __attribute__((noreturn))
+#endif
+
+int crash(int x) NOINLINE;
+int oh_what(int x) NOINLINE;
+int a_tangled_web(int x) NOINLINE;
+int we_weave(int x) NOINLINE;
+static void abort_handler(int s) NORETURN;
+
+int
+crash(int x)
+{
+ if (crashtype == 0) {
+ *(volatile int *)0 = 0;
+ } else if (crashtype == 1) {
+ tor_assert(1 == 0);
+ } else if (crashtype == -1) {
+ ;
+ }
+
+ crashtype *= x;
+ return crashtype;
+}
+
+int
+oh_what(int x)
+{
+ /* We call crash() twice here, so that the compiler won't try to do a
+ * tail-call optimization. Only the first call will actually happen, but
+ * telling the compiler to maybe do the second call will prevent it from
+ * replacing the first call with a jump. */
+ return crash(x) + crash(x*2);
+}
+
+int
+a_tangled_web(int x)
+{
+ return oh_what(x) * 99 + oh_what(x);
+}
+
+int
+we_weave(int x)
+{
+ return a_tangled_web(x) + a_tangled_web(x+1);
+}
+
+static void
+abort_handler(int s)
+{
+ (void)s;
+ exit(0);
+}
+
+int
+main(int argc, char **argv)
+{
+ log_severity_list_t severity;
+
+ if (argc < 2) {
+ puts("I take an argument. It should be \"assert\" or \"crash\" or "
+ "\"none\"");
+ return 1;
+ }
+ if (!strcmp(argv[1], "assert")) {
+ crashtype = 1;
+ } else if (!strcmp(argv[1], "crash")) {
+ crashtype = 0;
+ } else if (!strcmp(argv[1], "none")) {
+ crashtype = -1;
+ } else {
+ puts("Argument should be \"assert\" or \"crash\" or \"none\"");
+ return 1;
+ }
+
+ init_logging();
+ set_log_severity_config(LOG_WARN, LOG_ERR, &severity);
+ add_stream_log(&severity, "stdout", STDOUT_FILENO);
+ tor_log_update_sigsafe_err_fds();
+
+ configure_backtrace_handler(NULL);
+
+ signal(SIGABRT, abort_handler);
+
+ printf("%d\n", we_weave(2));
+
+ clean_up_backtrace_handler();
+
+ return 0;
+}
+
diff --git a/src/test/test_buffers.c b/src/test/test_buffers.c
new file mode 100644
index 000000000..61ac5bc36
--- /dev/null
+++ b/src/test/test_buffers.c
@@ -0,0 +1,732 @@
+/* Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#define BUFFERS_PRIVATE
+#include "or.h"
+#include "buffers.h"
+#include "ext_orport.h"
+#include "test.h"
+
+/** Run unit tests for buffers.c */
+static void
+test_buffers_basic(void *arg)
+{
+ char str[256];
+ char str2[256];
+
+ buf_t *buf = NULL, *buf2 = NULL;
+ const char *cp;
+
+ int j;
+ size_t r;
+ (void) arg;
+
+ /****
+ * buf_new
+ ****/
+ if (!(buf = buf_new()))
+ test_fail();
+
+ //test_eq(buf_capacity(buf), 4096);
+ test_eq(buf_datalen(buf), 0);
+
+ /****
+ * General pointer frobbing
+ */
+ for (j=0;j<256;++j) {
+ str[j] = (char)j;
+ }
+ write_to_buf(str, 256, buf);
+ write_to_buf(str, 256, buf);
+ test_eq(buf_datalen(buf), 512);
+ fetch_from_buf(str2, 200, buf);
+ test_memeq(str, str2, 200);
+ test_eq(buf_datalen(buf), 312);
+ memset(str2, 0, sizeof(str2));
+
+ fetch_from_buf(str2, 256, buf);
+ test_memeq(str+200, str2, 56);
+ test_memeq(str, str2+56, 200);
+ test_eq(buf_datalen(buf), 56);
+ memset(str2, 0, sizeof(str2));
+ /* Okay, now we should be 512 bytes into the 4096-byte buffer. If we add
+ * another 3584 bytes, we hit the end. */
+ for (j=0;j<15;++j) {
+ write_to_buf(str, 256, buf);
+ }
+ assert_buf_ok(buf);
+ test_eq(buf_datalen(buf), 3896);
+ fetch_from_buf(str2, 56, buf);
+ test_eq(buf_datalen(buf), 3840);
+ test_memeq(str+200, str2, 56);
+ for (j=0;j<15;++j) {
+ memset(str2, 0, sizeof(str2));
+ fetch_from_buf(str2, 256, buf);
+ test_memeq(str, str2, 256);
+ }
+ test_eq(buf_datalen(buf), 0);
+ buf_free(buf);
+ buf = NULL;
+
+ /* Okay, now make sure growing can work. */
+ buf = buf_new_with_capacity(16);
+ //test_eq(buf_capacity(buf), 16);
+ write_to_buf(str+1, 255, buf);
+ //test_eq(buf_capacity(buf), 256);
+ fetch_from_buf(str2, 254, buf);
+ test_memeq(str+1, str2, 254);
+ //test_eq(buf_capacity(buf), 256);
+ assert_buf_ok(buf);
+ write_to_buf(str, 32, buf);
+ //test_eq(buf_capacity(buf), 256);
+ assert_buf_ok(buf);
+ write_to_buf(str, 256, buf);
+ assert_buf_ok(buf);
+ //test_eq(buf_capacity(buf), 512);
+ test_eq(buf_datalen(buf), 33+256);
+ fetch_from_buf(str2, 33, buf);
+ test_eq(*str2, str[255]);
+
+ test_memeq(str2+1, str, 32);
+ //test_eq(buf_capacity(buf), 512);
+ test_eq(buf_datalen(buf), 256);
+ fetch_from_buf(str2, 256, buf);
+ test_memeq(str, str2, 256);
+
+ /* now try shrinking: case 1. */
+ buf_free(buf);
+ buf = buf_new_with_capacity(33668);
+ for (j=0;j<67;++j) {
+ write_to_buf(str,255, buf);
+ }
+ //test_eq(buf_capacity(buf), 33668);
+ test_eq(buf_datalen(buf), 17085);
+ for (j=0; j < 40; ++j) {
+ fetch_from_buf(str2, 255,buf);
+ test_memeq(str2, str, 255);
+ }
+
+ /* now try shrinking: case 2. */
+ buf_free(buf);
+ buf = buf_new_with_capacity(33668);
+ for (j=0;j<67;++j) {
+ write_to_buf(str,255, buf);
+ }
+ for (j=0; j < 20; ++j) {
+ fetch_from_buf(str2, 255,buf);
+ test_memeq(str2, str, 255);
+ }
+ for (j=0;j<80;++j) {
+ write_to_buf(str,255, buf);
+ }
+ //test_eq(buf_capacity(buf),33668);
+ for (j=0; j < 120; ++j) {
+ fetch_from_buf(str2, 255,buf);
+ test_memeq(str2, str, 255);
+ }
+
+ /* Move from buf to buf. */
+ buf_free(buf);
+ buf = buf_new_with_capacity(4096);
+ buf2 = buf_new_with_capacity(4096);
+ for (j=0;j<100;++j)
+ write_to_buf(str, 255, buf);
+ test_eq(buf_datalen(buf), 25500);
+ for (j=0;j<100;++j) {
+ r = 10;
+ move_buf_to_buf(buf2, buf, &r);
+ test_eq(r, 0);
+ }
+ test_eq(buf_datalen(buf), 24500);
+ test_eq(buf_datalen(buf2), 1000);
+ for (j=0;j<3;++j) {
+ fetch_from_buf(str2, 255, buf2);
+ test_memeq(str2, str, 255);
+ }
+ r = 8192; /*big move*/
+ move_buf_to_buf(buf2, buf, &r);
+ test_eq(r, 0);
+ r = 30000; /* incomplete move */
+ move_buf_to_buf(buf2, buf, &r);
+ test_eq(r, 13692);
+ for (j=0;j<97;++j) {
+ fetch_from_buf(str2, 255, buf2);
+ test_memeq(str2, str, 255);
+ }
+ buf_free(buf);
+ buf_free(buf2);
+ buf = buf2 = NULL;
+
+ buf = buf_new_with_capacity(5);
+ cp = "Testing. This is a moderately long Testing string.";
+ for (j = 0; cp[j]; j++)
+ write_to_buf(cp+j, 1, buf);
+ test_eq(0, buf_find_string_offset(buf, "Testing", 7));
+ test_eq(1, buf_find_string_offset(buf, "esting", 6));
+ test_eq(1, buf_find_string_offset(buf, "est", 3));
+ test_eq(39, buf_find_string_offset(buf, "ing str", 7));
+ test_eq(35, buf_find_string_offset(buf, "Testing str", 11));
+ test_eq(32, buf_find_string_offset(buf, "ng ", 3));
+ test_eq(43, buf_find_string_offset(buf, "string.", 7));
+ test_eq(-1, buf_find_string_offset(buf, "shrdlu", 6));
+ test_eq(-1, buf_find_string_offset(buf, "Testing thing", 13));
+ test_eq(-1, buf_find_string_offset(buf, "ngx", 3));
+ buf_free(buf);
+ buf = NULL;
+
+ /* Try adding a string too long for any freelist. */
+ {
+ char *cp = tor_malloc_zero(65536);
+ buf = buf_new();
+ write_to_buf(cp, 65536, buf);
+ tor_free(cp);
+
+ tt_int_op(buf_datalen(buf), ==, 65536);
+ buf_free(buf);
+ buf = NULL;
+ }
+
+ done:
+ if (buf)
+ buf_free(buf);
+ if (buf2)
+ buf_free(buf2);
+ buf_shrink_freelists(1);
+}
+
+static void
+test_buffer_pullup(void *arg)
+{
+ buf_t *buf;
+ char *stuff, *tmp;
+ const char *cp;
+ size_t sz;
+ (void)arg;
+ stuff = tor_malloc(16384);
+ tmp = tor_malloc(16384);
+
+ /* Note: this test doesn't check the nulterminate argument to buf_pullup,
+ since nothing actually uses it. We should remove it some time. */
+
+ buf = buf_new_with_capacity(3000); /* rounds up to next power of 2. */
+
+ tt_assert(buf);
+ tt_int_op(buf_get_default_chunk_size(buf), ==, 4096);
+
+ tt_int_op(buf_get_total_allocation(), ==, 0);
+
+ /* There are a bunch of cases for pullup. One is the trivial case. Let's
+ mess around with an empty buffer. */
+ buf_pullup(buf, 16, 1);
+ buf_get_first_chunk_data(buf, &cp, &sz);
+ tt_ptr_op(cp, ==, NULL);
+ tt_uint_op(sz, ==, 0);
+
+ /* Let's make sure nothing got allocated */
+ tt_int_op(buf_get_total_allocation(), ==, 0);
+
+ /* Case 1: everything puts into the first chunk with some moving. */
+
+ /* Let's add some data. */
+ crypto_rand(stuff, 16384);
+ write_to_buf(stuff, 3000, buf);
+ write_to_buf(stuff+3000, 3000, buf);
+ buf_get_first_chunk_data(buf, &cp, &sz);
+ tt_ptr_op(cp, !=, NULL);
+ tt_int_op(sz, <=, 4096);
+
+ /* Make room for 3000 bytes in the first chunk, so that the pullup-move code
+ * can get tested. */
+ tt_int_op(fetch_from_buf(tmp, 3000, buf), ==, 3000);
+ test_memeq(tmp, stuff, 3000);
+ buf_pullup(buf, 2048, 0);
+ assert_buf_ok(buf);
+ buf_get_first_chunk_data(buf, &cp, &sz);
+ tt_ptr_op(cp, !=, NULL);
+ tt_int_op(sz, >=, 2048);
+ test_memeq(cp, stuff+3000, 2048);
+ tt_int_op(3000, ==, buf_datalen(buf));
+ tt_int_op(fetch_from_buf(tmp, 3000, buf), ==, 0);
+ test_memeq(tmp, stuff+3000, 2048);
+
+ buf_free(buf);
+
+ /* Now try the large-chunk case. */
+ buf = buf_new_with_capacity(3000); /* rounds up to next power of 2. */
+ write_to_buf(stuff, 4000, buf);
+ write_to_buf(stuff+4000, 4000, buf);
+ write_to_buf(stuff+8000, 4000, buf);
+ write_to_buf(stuff+12000, 4000, buf);
+ tt_int_op(buf_datalen(buf), ==, 16000);
+ buf_get_first_chunk_data(buf, &cp, &sz);
+ tt_ptr_op(cp, !=, NULL);
+ tt_int_op(sz, <=, 4096);
+
+ buf_pullup(buf, 12500, 0);
+ assert_buf_ok(buf);
+ buf_get_first_chunk_data(buf, &cp, &sz);
+ tt_ptr_op(cp, !=, NULL);
+ tt_int_op(sz, >=, 12500);
+ test_memeq(cp, stuff, 12500);
+ tt_int_op(buf_datalen(buf), ==, 16000);
+
+ fetch_from_buf(tmp, 12400, buf);
+ test_memeq(tmp, stuff, 12400);
+ tt_int_op(buf_datalen(buf), ==, 3600);
+ fetch_from_buf(tmp, 3500, buf);
+ test_memeq(tmp, stuff+12400, 3500);
+ fetch_from_buf(tmp, 100, buf);
+ test_memeq(tmp, stuff+15900, 10);
+
+ buf_free(buf);
+
+ /* Make sure that the pull-up-whole-buffer case works */
+ buf = buf_new_with_capacity(3000); /* rounds up to next power of 2. */
+ write_to_buf(stuff, 4000, buf);
+ write_to_buf(stuff+4000, 4000, buf);
+ fetch_from_buf(tmp, 100, buf); /* dump 100 bytes from first chunk */
+ buf_pullup(buf, 16000, 0); /* Way too much. */
+ assert_buf_ok(buf);
+ buf_get_first_chunk_data(buf, &cp, &sz);
+ tt_ptr_op(cp, !=, NULL);
+ tt_int_op(sz, ==, 7900);
+ test_memeq(cp, stuff+100, 7900);
+
+ buf_free(buf);
+ buf = NULL;
+
+ buf_shrink_freelists(1);
+
+ tt_int_op(buf_get_total_allocation(), ==, 0);
+ done:
+ buf_free(buf);
+ buf_shrink_freelists(1);
+ tor_free(stuff);
+ tor_free(tmp);
+}
+
+static void
+test_buffer_copy(void *arg)
+{
+ generic_buffer_t *buf=NULL, *buf2=NULL;
+ const char *s;
+ size_t len;
+ char b[256];
+ int i;
+ (void)arg;
+
+ buf = generic_buffer_new();
+ tt_assert(buf);
+
+ /* Copy an empty buffer. */
+ tt_int_op(0, ==, generic_buffer_set_to_copy(&buf2, buf));
+ tt_assert(buf2);
+ tt_int_op(0, ==, generic_buffer_len(buf2));
+
+ /* Now try with a short buffer. */
+ s = "And now comes an act of enormous enormance!";
+ len = strlen(s);
+ generic_buffer_add(buf, s, len);
+ tt_int_op(len, ==, generic_buffer_len(buf));
+ /* Add junk to buf2 so we can test replacing.*/
+ generic_buffer_add(buf2, "BLARG", 5);
+ tt_int_op(0, ==, generic_buffer_set_to_copy(&buf2, buf));
+ tt_int_op(len, ==, generic_buffer_len(buf2));
+ generic_buffer_get(buf2, b, len);
+ test_mem_op(b, ==, s, len);
+ /* Now free buf2 and retry so we can test allocating */
+ generic_buffer_free(buf2);
+ buf2 = NULL;
+ tt_int_op(0, ==, generic_buffer_set_to_copy(&buf2, buf));
+ tt_int_op(len, ==, generic_buffer_len(buf2));
+ generic_buffer_get(buf2, b, len);
+ test_mem_op(b, ==, s, len);
+ /* Clear buf for next test */
+ generic_buffer_get(buf, b, len);
+ tt_int_op(generic_buffer_len(buf),==,0);
+
+ /* Okay, now let's try a bigger buffer. */
+ s = "Quis autem vel eum iure reprehenderit qui in ea voluptate velit "
+ "esse quam nihil molestiae consequatur, vel illum qui dolorem eum "
+ "fugiat quo voluptas nulla pariatur?";
+ len = strlen(s);
+ for (i = 0; i < 256; ++i) {
+ b[0]=i;
+ generic_buffer_add(buf, b, 1);
+ generic_buffer_add(buf, s, len);
+ }
+ tt_int_op(0, ==, generic_buffer_set_to_copy(&buf2, buf));
+ tt_int_op(generic_buffer_len(buf2), ==, generic_buffer_len(buf));
+ for (i = 0; i < 256; ++i) {
+ generic_buffer_get(buf2, b, len+1);
+ tt_int_op((unsigned char)b[0],==,i);
+ test_mem_op(b+1, ==, s, len);
+ }
+
+ done:
+ if (buf)
+ generic_buffer_free(buf);
+ if (buf2)
+ generic_buffer_free(buf2);
+ buf_shrink_freelists(1);
+}
+
+static void
+test_buffer_ext_or_cmd(void *arg)
+{
+ ext_or_cmd_t *cmd = NULL;
+ generic_buffer_t *buf = generic_buffer_new();
+ char *tmp = NULL;
+ (void) arg;
+
+ /* Empty -- should give "not there. */
+ tt_int_op(0, ==, generic_buffer_fetch_ext_or_cmd(buf, &cmd));
+ tt_ptr_op(NULL, ==, cmd);
+
+ /* Three bytes: shouldn't work. */
+ generic_buffer_add(buf, "\x00\x20\x00", 3);
+ tt_int_op(0, ==, generic_buffer_fetch_ext_or_cmd(buf, &cmd));
+ tt_ptr_op(NULL, ==, cmd);
+ tt_int_op(3, ==, generic_buffer_len(buf));
+
+ /* 0020 0000: That's a nil command. It should work. */
+ generic_buffer_add(buf, "\x00", 1);
+ tt_int_op(1, ==, generic_buffer_fetch_ext_or_cmd(buf, &cmd));
+ tt_ptr_op(NULL, !=, cmd);
+ tt_int_op(0x20, ==, cmd->cmd);
+ tt_int_op(0, ==, cmd->len);
+ tt_int_op(0, ==, generic_buffer_len(buf));
+ ext_or_cmd_free(cmd);
+ cmd = NULL;
+
+ /* Now try a length-6 command with one byte missing. */
+ generic_buffer_add(buf, "\x10\x21\x00\x06""abcde", 9);
+ tt_int_op(0, ==, generic_buffer_fetch_ext_or_cmd(buf, &cmd));
+ tt_ptr_op(NULL, ==, cmd);
+ generic_buffer_add(buf, "f", 1);
+ tt_int_op(1, ==, generic_buffer_fetch_ext_or_cmd(buf, &cmd));
+ tt_ptr_op(NULL, !=, cmd);
+ tt_int_op(0x1021, ==, cmd->cmd);
+ tt_int_op(6, ==, cmd->len);
+ test_mem_op("abcdef", ==, cmd->body, 6);
+ tt_int_op(0, ==, generic_buffer_len(buf));
+ ext_or_cmd_free(cmd);
+ cmd = NULL;
+
+ /* Now try a length-10 command with 4 extra bytes. */
+ generic_buffer_add(buf, "\xff\xff\x00\x0a"
+ "loremipsum\x10\x00\xff\xff", 18);
+ tt_int_op(1, ==, generic_buffer_fetch_ext_or_cmd(buf, &cmd));
+ tt_ptr_op(NULL, !=, cmd);
+ tt_int_op(0xffff, ==, cmd->cmd);
+ tt_int_op(10, ==, cmd->len);
+ test_mem_op("loremipsum", ==, cmd->body, 10);
+ tt_int_op(4, ==, generic_buffer_len(buf));
+ ext_or_cmd_free(cmd);
+ cmd = NULL;
+
+ /* Finally, let's try a maximum-length command. We already have the header
+ * waiting. */
+ tt_int_op(0, ==, generic_buffer_fetch_ext_or_cmd(buf, &cmd));
+ tmp = tor_malloc_zero(65535);
+ generic_buffer_add(buf, tmp, 65535);
+ tt_int_op(1, ==, generic_buffer_fetch_ext_or_cmd(buf, &cmd));
+ tt_ptr_op(NULL, !=, cmd);
+ tt_int_op(0x1000, ==, cmd->cmd);
+ tt_int_op(0xffff, ==, cmd->len);
+ test_mem_op(tmp, ==, cmd->body, 65535);
+ tt_int_op(0, ==, generic_buffer_len(buf));
+ ext_or_cmd_free(cmd);
+ cmd = NULL;
+
+ done:
+ ext_or_cmd_free(cmd);
+ generic_buffer_free(buf);
+ tor_free(tmp);
+ buf_shrink_freelists(1);
+}
+
+static void
+test_buffer_allocation_tracking(void *arg)
+{
+ char *junk = tor_malloc(16384);
+ buf_t *buf1 = NULL, *buf2 = NULL;
+ int i;
+
+ (void)arg;
+
+ crypto_rand(junk, 16384);
+ tt_int_op(buf_get_total_allocation(), ==, 0);
+
+ buf1 = buf_new();
+ tt_assert(buf1);
+ buf2 = buf_new();
+ tt_assert(buf2);
+
+ tt_int_op(buf_allocation(buf1), ==, 0);
+ tt_int_op(buf_get_total_allocation(), ==, 0);
+
+ write_to_buf(junk, 4000, buf1);
+ write_to_buf(junk, 4000, buf1);
+ write_to_buf(junk, 4000, buf1);
+ write_to_buf(junk, 4000, buf1);
+ tt_int_op(buf_allocation(buf1), ==, 16384);
+ fetch_from_buf(junk, 100, buf1);
+ tt_int_op(buf_allocation(buf1), ==, 16384); /* still 4 4k chunks */
+
+ tt_int_op(buf_get_total_allocation(), ==, 16384);
+
+ fetch_from_buf(junk, 4096, buf1); /* drop a 1k chunk... */
+ tt_int_op(buf_allocation(buf1), ==, 3*4096); /* now 3 4k chunks */
+
+#ifdef ENABLE_BUF_FREELISTS
+ tt_int_op(buf_get_total_allocation(), ==, 16384); /* that chunk went onto
+ the freelist. */
+#else
+ tt_int_op(buf_get_total_allocation(), ==, 12288); /* that chunk was really
+ freed. */
+#endif
+
+ write_to_buf(junk, 4000, buf2);
+ tt_int_op(buf_allocation(buf2), ==, 4096); /* another 4k chunk. */
+ /*
+ * If we're using freelists, size stays at 16384 because we just pulled a
+ * chunk from the freelist. If we aren't, we bounce back up to 16384 by
+ * allocating a new chunk.
+ */
+ tt_int_op(buf_get_total_allocation(), ==, 16384);
+ write_to_buf(junk, 4000, buf2);
+ tt_int_op(buf_allocation(buf2), ==, 8192); /* another 4k chunk. */
+ tt_int_op(buf_get_total_allocation(), ==, 5*4096); /* that chunk was new. */
+
+ /* Make a really huge buffer */
+ for (i = 0; i < 1000; ++i) {
+ write_to_buf(junk, 4000, buf2);
+ }
+ tt_int_op(buf_allocation(buf2), >=, 4008000);
+ tt_int_op(buf_get_total_allocation(), >=, 4008000);
+ buf_free(buf2);
+ buf2 = NULL;
+
+ tt_int_op(buf_get_total_allocation(), <, 4008000);
+ buf_shrink_freelists(1);
+ tt_int_op(buf_get_total_allocation(), ==, buf_allocation(buf1));
+ buf_free(buf1);
+ buf1 = NULL;
+ buf_shrink_freelists(1);
+ tt_int_op(buf_get_total_allocation(), ==, 0);
+
+ done:
+ buf_free(buf1);
+ buf_free(buf2);
+ buf_shrink_freelists(1);
+ tor_free(junk);
+}
+
+static void
+test_buffer_time_tracking(void *arg)
+{
+ buf_t *buf=NULL, *buf2=NULL;
+ struct timeval tv0;
+ const time_t START = 1389288246;
+ const uint32_t START_MSEC = (uint32_t) ((uint64_t)START * 1000);
+ int i;
+ char tmp[4096];
+ (void)arg;
+
+ crypto_rand(tmp, sizeof(tmp));
+
+ tv0.tv_sec = START;
+ tv0.tv_usec = 0;
+
+ buf = buf_new_with_capacity(3000); /* rounds up to next power of 2. */
+ tt_assert(buf);
+
+ /* Empty buffer means the timestamp is 0. */
+ tt_int_op(0, ==, buf_get_oldest_chunk_timestamp(buf, START_MSEC));
+ tt_int_op(0, ==, buf_get_oldest_chunk_timestamp(buf, START_MSEC+1000));
+
+ tor_gettimeofday_cache_set(&tv0);
+ write_to_buf("ABCDEFG", 7, buf);
+ tt_int_op(1000, ==, buf_get_oldest_chunk_timestamp(buf, START_MSEC+1000));
+
+ buf2 = buf_copy(buf);
+ tt_assert(buf2);
+ tt_int_op(1234, ==, buf_get_oldest_chunk_timestamp(buf2, START_MSEC+1234));
+
+ /* Now add more bytes; enough to overflow the first chunk. */
+ tv0.tv_usec += 123 * 1000;
+ tor_gettimeofday_cache_set(&tv0);
+ for (i = 0; i < 600; ++i)
+ write_to_buf("ABCDEFG", 7, buf);
+ tt_int_op(4207, ==, buf_datalen(buf));
+
+ /* The oldest bytes are still in the front. */
+ tt_int_op(2000, ==, buf_get_oldest_chunk_timestamp(buf, START_MSEC+2000));
+
+ /* Once those bytes are dropped, the chunk is still on the first
+ * timestamp. */
+ fetch_from_buf(tmp, 100, buf);
+ tt_int_op(2000, ==, buf_get_oldest_chunk_timestamp(buf, START_MSEC+2000));
+
+ /* But once we discard the whole first chunk, we get the data in the second
+ * chunk. */
+ fetch_from_buf(tmp, 4000, buf);
+ tt_int_op(107, ==, buf_datalen(buf));
+ tt_int_op(2000, ==, buf_get_oldest_chunk_timestamp(buf, START_MSEC+2123));
+
+ /* This time we'll be grabbing a chunk from the freelist, and making sure
+ its time gets updated */
+ tv0.tv_sec += 5;
+ tv0.tv_usec = 617*1000;
+ tor_gettimeofday_cache_set(&tv0);
+ for (i = 0; i < 600; ++i)
+ write_to_buf("ABCDEFG", 7, buf);
+ tt_int_op(4307, ==, buf_datalen(buf));
+
+ tt_int_op(2000, ==, buf_get_oldest_chunk_timestamp(buf, START_MSEC+2123));
+ fetch_from_buf(tmp, 4000, buf);
+ fetch_from_buf(tmp, 306, buf);
+ tt_int_op(0, ==, buf_get_oldest_chunk_timestamp(buf, START_MSEC+5617));
+ tt_int_op(383, ==, buf_get_oldest_chunk_timestamp(buf, START_MSEC+6000));
+
+ done:
+ buf_free(buf);
+ buf_free(buf2);
+}
+
+static void
+test_buffers_zlib_impl(int finalize_with_nil)
+{
+ char *msg = NULL;
+ char *contents = NULL;
+ char *expanded = NULL;
+ buf_t *buf = NULL;
+ tor_zlib_state_t *zlib_state = NULL;
+ size_t out_len, in_len;
+ int done;
+
+ buf = buf_new_with_capacity(128); /* will round up */
+ zlib_state = tor_zlib_new(1, ZLIB_METHOD);
+
+ msg = tor_malloc(512);
+ crypto_rand(msg, 512);
+ tt_int_op(write_to_buf_zlib(buf, zlib_state, msg, 128, 0), ==, 0);
+ tt_int_op(write_to_buf_zlib(buf, zlib_state, msg+128, 128, 0), ==, 0);
+ tt_int_op(write_to_buf_zlib(buf, zlib_state, msg+256, 256, 0), ==, 0);
+ done = !finalize_with_nil;
+ tt_int_op(write_to_buf_zlib(buf, zlib_state, "all done", 9, done), ==, 0);
+ if (finalize_with_nil) {
+ tt_int_op(write_to_buf_zlib(buf, zlib_state, "", 0, 1), ==, 0);
+ }
+
+ in_len = buf_datalen(buf);
+ contents = tor_malloc(in_len);
+
+ tt_int_op(fetch_from_buf(contents, in_len, buf), ==, 0);
+
+ tt_int_op(0, ==, tor_gzip_uncompress(&expanded, &out_len,
+ contents, in_len,
+ ZLIB_METHOD, 1,
+ LOG_WARN));
+
+ tt_int_op(out_len, >=, 128);
+ tt_mem_op(msg, ==, expanded, 128);
+ tt_int_op(out_len, >=, 512);
+ tt_mem_op(msg, ==, expanded, 512);
+ tt_int_op(out_len, ==, 512+9);
+ tt_mem_op("all done", ==, expanded+512, 9);
+
+ done:
+ buf_free(buf);
+ tor_zlib_free(zlib_state);
+ tor_free(contents);
+ tor_free(expanded);
+ tor_free(msg);
+}
+
+static void
+test_buffers_zlib(void *arg)
+{
+ (void) arg;
+ test_buffers_zlib_impl(0);
+}
+static void
+test_buffers_zlib_fin_with_nil(void *arg)
+{
+ (void) arg;
+ test_buffers_zlib_impl(1);
+}
+
+static void
+test_buffers_zlib_fin_at_chunk_end(void *arg)
+{
+ char *msg = NULL;
+ char *contents = NULL;
+ char *expanded = NULL;
+ buf_t *buf = NULL;
+ tor_zlib_state_t *zlib_state = NULL;
+ size_t out_len, in_len;
+ size_t sz, headerjunk;
+ (void) arg;
+
+ buf = buf_new_with_capacity(128); /* will round up */
+ sz = buf_get_default_chunk_size(buf);
+ msg = tor_malloc_zero(sz);
+
+ write_to_buf(msg, 1, buf);
+ tt_assert(buf->head);
+
+ /* Fill up the chunk so the zlib stuff won't fit in one chunk. */
+ tt_uint_op(buf->head->memlen, <, sz);
+ headerjunk = buf->head->memlen - 7;
+ write_to_buf(msg, headerjunk-1, buf);
+ tt_uint_op(buf->head->datalen, ==, headerjunk);
+ printf("<%u>\n", (unsigned)buf_datalen(buf));
+ tt_uint_op(buf_datalen(buf), ==, headerjunk);
+ /* Write an empty string, with finalization on. */
+ zlib_state = tor_zlib_new(1, ZLIB_METHOD);
+ tt_int_op(write_to_buf_zlib(buf, zlib_state, "", 0, 1), ==, 0);
+
+ printf("<%u>\n", (unsigned)buf_datalen(buf));
+
+ in_len = buf_datalen(buf);
+ contents = tor_malloc(in_len);
+
+ tt_int_op(fetch_from_buf(contents, in_len, buf), ==, 0);
+
+ tt_uint_op(in_len, >, headerjunk);
+
+ tt_int_op(0, ==, tor_gzip_uncompress(&expanded, &out_len,
+ contents + headerjunk, in_len - headerjunk,
+ ZLIB_METHOD, 1,
+ LOG_WARN));
+
+ tt_int_op(out_len, ==, 0);
+ tt_assert(expanded);
+
+ done:
+ buf_free(buf);
+ tor_zlib_free(zlib_state);
+ tor_free(contents);
+ tor_free(expanded);
+ tor_free(msg);
+}
+
+struct testcase_t buffer_tests[] = {
+ { "basic", test_buffers_basic, TT_FORK, NULL, NULL },
+ { "copy", test_buffer_copy, TT_FORK, NULL, NULL },
+ { "pullup", test_buffer_pullup, TT_FORK, NULL, NULL },
+ { "ext_or_cmd", test_buffer_ext_or_cmd, TT_FORK, NULL, NULL },
+ { "allocation_tracking", test_buffer_allocation_tracking, TT_FORK,
+ NULL, NULL },
+ { "time_tracking", test_buffer_time_tracking, TT_FORK, NULL, NULL },
+ { "zlib", test_buffers_zlib, TT_FORK, NULL, NULL },
+ { "zlib_fin_with_nil", test_buffers_zlib_fin_with_nil, TT_FORK, NULL, NULL },
+ { "zlib_fin_at_chunk_end", test_buffers_zlib_fin_at_chunk_end, TT_FORK,
+ NULL, NULL},
+ END_OF_TESTCASES
+};
+
diff --git a/src/test/test_cell_formats.c b/src/test/test_cell_formats.c
new file mode 100644
index 000000000..d7f60680c
--- /dev/null
+++ b/src/test/test_cell_formats.c
@@ -0,0 +1,1273 @@
+/* Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#include "orconfig.h"
+
+#define CONNECTION_EDGE_PRIVATE
+#define RELAY_PRIVATE
+#include "or.h"
+#include "channel.h"
+#include "connection_edge.h"
+#include "connection_or.h"
+#include "onion.h"
+#include "onion_tap.h"
+#include "onion_fast.h"
+#include "onion_ntor.h"
+#include "relay.h"
+#include "test.h"
+
+#include <stdlib.h>
+#include <string.h>
+
+static void
+test_cfmt_relay_header(void *arg)
+{
+ relay_header_t rh;
+ const uint8_t hdr_1[RELAY_HEADER_SIZE] =
+ "\x03" "\x00\x00" "\x21\x22" "ABCD" "\x01\x03";
+ uint8_t hdr_out[RELAY_HEADER_SIZE];
+ (void)arg;
+
+ tt_int_op(sizeof(hdr_1), ==, RELAY_HEADER_SIZE);
+ relay_header_unpack(&rh, hdr_1);
+ tt_int_op(rh.command, ==, 3);
+ tt_int_op(rh.recognized, ==, 0);
+ tt_int_op(rh.stream_id, ==, 0x2122);
+ test_mem_op(rh.integrity, ==, "ABCD", 4);
+ tt_int_op(rh.length, ==, 0x103);
+
+ relay_header_pack(hdr_out, &rh);
+ test_mem_op(hdr_out, ==, hdr_1, RELAY_HEADER_SIZE);
+
+ done:
+ ;
+}
+
+static void
+make_relay_cell(cell_t *out, uint8_t command,
+ const void *body, size_t bodylen)
+{
+ relay_header_t rh;
+
+ memset(&rh, 0, sizeof(rh));
+ rh.stream_id = 5;
+ rh.command = command;
+ rh.length = bodylen;
+
+ out->command = CELL_RELAY;
+ out->circ_id = 10;
+ relay_header_pack(out->payload, &rh);
+
+ memcpy(out->payload + RELAY_HEADER_SIZE, body, bodylen);
+}
+
+static void
+test_cfmt_begin_cells(void *arg)
+{
+ cell_t cell;
+ begin_cell_t bcell;
+ uint8_t end_reason;
+ (void)arg;
+
+ /* Try begindir. */
+ memset(&bcell, 0x7f, sizeof(bcell));
+ make_relay_cell(&cell, RELAY_COMMAND_BEGIN_DIR, "", 0);
+ tt_int_op(0, ==, begin_cell_parse(&cell, &bcell, &end_reason));
+ tt_ptr_op(NULL, ==, bcell.address);
+ tt_int_op(0, ==, bcell.flags);
+ tt_int_op(0, ==, bcell.port);
+ tt_int_op(5, ==, bcell.stream_id);
+ tt_int_op(1, ==, bcell.is_begindir);
+
+ /* A Begindir with extra stuff. */
+ memset(&bcell, 0x7f, sizeof(bcell));
+ make_relay_cell(&cell, RELAY_COMMAND_BEGIN_DIR, "12345", 5);
+ tt_int_op(0, ==, begin_cell_parse(&cell, &bcell, &end_reason));
+ tt_ptr_op(NULL, ==, bcell.address);
+ tt_int_op(0, ==, bcell.flags);
+ tt_int_op(0, ==, bcell.port);
+ tt_int_op(5, ==, bcell.stream_id);
+ tt_int_op(1, ==, bcell.is_begindir);
+
+ /* A short but valid begin cell */
+ memset(&bcell, 0x7f, sizeof(bcell));
+ make_relay_cell(&cell, RELAY_COMMAND_BEGIN, "a.b:9", 6);
+ tt_int_op(0, ==, begin_cell_parse(&cell, &bcell, &end_reason));
+ tt_str_op("a.b", ==, bcell.address);
+ tt_int_op(0, ==, bcell.flags);
+ tt_int_op(9, ==, bcell.port);
+ tt_int_op(5, ==, bcell.stream_id);
+ tt_int_op(0, ==, bcell.is_begindir);
+ tor_free(bcell.address);
+
+ /* A significantly loner begin cell */
+ memset(&bcell, 0x7f, sizeof(bcell));
+ {
+ const char c[] = "here-is-a-nice-long.hostname.com:65535";
+ make_relay_cell(&cell, RELAY_COMMAND_BEGIN, c, strlen(c)+1);
+ }
+ tt_int_op(0, ==, begin_cell_parse(&cell, &bcell, &end_reason));
+ tt_str_op("here-is-a-nice-long.hostname.com", ==, bcell.address);
+ tt_int_op(0, ==, bcell.flags);
+ tt_int_op(65535, ==, bcell.port);
+ tt_int_op(5, ==, bcell.stream_id);
+ tt_int_op(0, ==, bcell.is_begindir);
+ tor_free(bcell.address);
+
+ /* An IPv4 begin cell. */
+ memset(&bcell, 0x7f, sizeof(bcell));
+ make_relay_cell(&cell, RELAY_COMMAND_BEGIN, "18.9.22.169:80", 15);
+ tt_int_op(0, ==, begin_cell_parse(&cell, &bcell, &end_reason));
+ tt_str_op("18.9.22.169", ==, bcell.address);
+ tt_int_op(0, ==, bcell.flags);
+ tt_int_op(80, ==, bcell.port);
+ tt_int_op(5, ==, bcell.stream_id);
+ tt_int_op(0, ==, bcell.is_begindir);
+ tor_free(bcell.address);
+
+ /* An IPv6 begin cell. Let's make sure we handle colons*/
+ memset(&bcell, 0x7f, sizeof(bcell));
+ make_relay_cell(&cell, RELAY_COMMAND_BEGIN,
+ "[2620::6b0:b:1a1a:0:26e5:480e]:80", 34);
+ tt_int_op(0, ==, begin_cell_parse(&cell, &bcell, &end_reason));
+ tt_str_op("[2620::6b0:b:1a1a:0:26e5:480e]", ==, bcell.address);
+ tt_int_op(0, ==, bcell.flags);
+ tt_int_op(80, ==, bcell.port);
+ tt_int_op(5, ==, bcell.stream_id);
+ tt_int_op(0, ==, bcell.is_begindir);
+ tor_free(bcell.address);
+
+ /* a begin cell with extra junk but not enough for flags. */
+ memset(&bcell, 0x7f, sizeof(bcell));
+ {
+ const char c[] = "another.example.com:80\x00\x01\x02";
+ make_relay_cell(&cell, RELAY_COMMAND_BEGIN, c, sizeof(c)-1);
+ }
+ tt_int_op(0, ==, begin_cell_parse(&cell, &bcell, &end_reason));
+ tt_str_op("another.example.com", ==, bcell.address);
+ tt_int_op(0, ==, bcell.flags);
+ tt_int_op(80, ==, bcell.port);
+ tt_int_op(5, ==, bcell.stream_id);
+ tt_int_op(0, ==, bcell.is_begindir);
+ tor_free(bcell.address);
+
+ /* a begin cell with flags. */
+ memset(&bcell, 0x7f, sizeof(bcell));
+ {
+ const char c[] = "another.example.com:443\x00\x01\x02\x03\x04";
+ make_relay_cell(&cell, RELAY_COMMAND_BEGIN, c, sizeof(c)-1);
+ }
+ tt_int_op(0, ==, begin_cell_parse(&cell, &bcell, &end_reason));
+ tt_str_op("another.example.com", ==, bcell.address);
+ tt_int_op(0x1020304, ==, bcell.flags);
+ tt_int_op(443, ==, bcell.port);
+ tt_int_op(5, ==, bcell.stream_id);
+ tt_int_op(0, ==, bcell.is_begindir);
+ tor_free(bcell.address);
+
+ /* a begin cell with flags and even more cruft after that. */
+ memset(&bcell, 0x7f, sizeof(bcell));
+ {
+ const char c[] = "a-further.example.com:22\x00\xee\xaa\x00\xffHi mom";
+ make_relay_cell(&cell, RELAY_COMMAND_BEGIN, c, sizeof(c)-1);
+ }
+ tt_int_op(0, ==, begin_cell_parse(&cell, &bcell, &end_reason));
+ tt_str_op("a-further.example.com", ==, bcell.address);
+ tt_int_op(0xeeaa00ff, ==, bcell.flags);
+ tt_int_op(22, ==, bcell.port);
+ tt_int_op(5, ==, bcell.stream_id);
+ tt_int_op(0, ==, bcell.is_begindir);
+ tor_free(bcell.address);
+
+ /* bad begin cell: impossible length. */
+ memset(&bcell, 0x7f, sizeof(bcell));
+ make_relay_cell(&cell, RELAY_COMMAND_BEGIN, "a.b:80", 7);
+ cell.payload[9] = 0x01; /* Set length to 510 */
+ cell.payload[10] = 0xfe;
+ {
+ relay_header_t rh;
+ relay_header_unpack(&rh, cell.payload);
+ tt_int_op(rh.length, ==, 510);
+ }
+ tt_int_op(-2, ==, begin_cell_parse(&cell, &bcell, &end_reason));
+
+ /* Bad begin cell: no body. */
+ memset(&bcell, 0x7f, sizeof(bcell));
+ make_relay_cell(&cell, RELAY_COMMAND_BEGIN, "", 0);
+ tt_int_op(-1, ==, begin_cell_parse(&cell, &bcell, &end_reason));
+
+ /* bad begin cell: no body. */
+ memset(&bcell, 0x7f, sizeof(bcell));
+ make_relay_cell(&cell, RELAY_COMMAND_BEGIN, "", 0);
+ tt_int_op(-1, ==, begin_cell_parse(&cell, &bcell, &end_reason));
+
+ /* bad begin cell: no colon */
+ memset(&bcell, 0x7f, sizeof(bcell));
+ make_relay_cell(&cell, RELAY_COMMAND_BEGIN, "a.b", 4);
+ tt_int_op(-1, ==, begin_cell_parse(&cell, &bcell, &end_reason));
+
+ /* bad begin cell: no ports */
+ memset(&bcell, 0x7f, sizeof(bcell));
+ make_relay_cell(&cell, RELAY_COMMAND_BEGIN, "a.b:", 5);
+ tt_int_op(-1, ==, begin_cell_parse(&cell, &bcell, &end_reason));
+
+ /* bad begin cell: bad port */
+ memset(&bcell, 0x7f, sizeof(bcell));
+ make_relay_cell(&cell, RELAY_COMMAND_BEGIN, "a.b:xyz", 8);
+ tt_int_op(-1, ==, begin_cell_parse(&cell, &bcell, &end_reason));
+ memset(&bcell, 0x7f, sizeof(bcell));
+ make_relay_cell(&cell, RELAY_COMMAND_BEGIN, "a.b:100000", 11);
+ tt_int_op(-1, ==, begin_cell_parse(&cell, &bcell, &end_reason));
+
+ /* bad begin cell: no nul */
+ memset(&bcell, 0x7f, sizeof(bcell));
+ make_relay_cell(&cell, RELAY_COMMAND_BEGIN, "a.b:80", 6);
+ tt_int_op(-1, ==, begin_cell_parse(&cell, &bcell, &end_reason));
+
+ done:
+ tor_free(bcell.address);
+}
+
+static void
+test_cfmt_connected_cells(void *arg)
+{
+ relay_header_t rh;
+ cell_t cell;
+ tor_addr_t addr;
+ int ttl, r;
+ char *mem_op_hex_tmp = NULL;
+ (void)arg;
+
+ /* Let's try an oldschool one with nothing in it. */
+ make_relay_cell(&cell, RELAY_COMMAND_CONNECTED, "", 0);
+ relay_header_unpack(&rh, cell.payload);
+ r = connected_cell_parse(&rh, &cell, &addr, &ttl);
+ tt_int_op(r, ==, 0);
+ tt_int_op(tor_addr_family(&addr), ==, AF_UNSPEC);
+ tt_int_op(ttl, ==, -1);
+
+ /* A slightly less oldschool one: only an IPv4 address */
+ make_relay_cell(&cell, RELAY_COMMAND_CONNECTED, "\x20\x30\x40\x50", 4);
+ relay_header_unpack(&rh, cell.payload);
+ r = connected_cell_parse(&rh, &cell, &addr, &ttl);
+ tt_int_op(r, ==, 0);
+ tt_int_op(tor_addr_family(&addr), ==, AF_INET);
+ tt_str_op(fmt_addr(&addr), ==, "32.48.64.80");
+ tt_int_op(ttl, ==, -1);
+
+ /* Bogus but understandable: truncated TTL */
+ make_relay_cell(&cell, RELAY_COMMAND_CONNECTED, "\x11\x12\x13\x14\x15", 5);
+ relay_header_unpack(&rh, cell.payload);
+ r = connected_cell_parse(&rh, &cell, &addr, &ttl);
+ tt_int_op(r, ==, 0);
+ tt_int_op(tor_addr_family(&addr), ==, AF_INET);
+ tt_str_op(fmt_addr(&addr), ==, "17.18.19.20");
+ tt_int_op(ttl, ==, -1);
+
+ /* Regular IPv4 one: address and TTL */
+ make_relay_cell(&cell, RELAY_COMMAND_CONNECTED,
+ "\x02\x03\x04\x05\x00\x00\x0e\x10", 8);
+ relay_header_unpack(&rh, cell.payload);
+ r = connected_cell_parse(&rh, &cell, &addr, &ttl);
+ tt_int_op(r, ==, 0);
+ tt_int_op(tor_addr_family(&addr), ==, AF_INET);
+ tt_str_op(fmt_addr(&addr), ==, "2.3.4.5");
+ tt_int_op(ttl, ==, 3600);
+
+ /* IPv4 with too-big TTL */
+ make_relay_cell(&cell, RELAY_COMMAND_CONNECTED,
+ "\x02\x03\x04\x05\xf0\x00\x00\x00", 8);
+ relay_header_unpack(&rh, cell.payload);
+ r = connected_cell_parse(&rh, &cell, &addr, &ttl);
+ tt_int_op(r, ==, 0);
+ tt_int_op(tor_addr_family(&addr), ==, AF_INET);
+ tt_str_op(fmt_addr(&addr), ==, "2.3.4.5");
+ tt_int_op(ttl, ==, -1);
+
+ /* IPv6 (ttl is mandatory) */
+ make_relay_cell(&cell, RELAY_COMMAND_CONNECTED,
+ "\x00\x00\x00\x00\x06"
+ "\x26\x07\xf8\xb0\x40\x0c\x0c\x02"
+ "\x00\x00\x00\x00\x00\x00\x00\x68"
+ "\x00\x00\x02\x58", 25);
+ relay_header_unpack(&rh, cell.payload);
+ r = connected_cell_parse(&rh, &cell, &addr, &ttl);
+ tt_int_op(r, ==, 0);
+ tt_int_op(tor_addr_family(&addr), ==, AF_INET6);
+ tt_str_op(fmt_addr(&addr), ==, "2607:f8b0:400c:c02::68");
+ tt_int_op(ttl, ==, 600);
+
+ /* IPv6 (ttl too big) */
+ make_relay_cell(&cell, RELAY_COMMAND_CONNECTED,
+ "\x00\x00\x00\x00\x06"
+ "\x26\x07\xf8\xb0\x40\x0c\x0c\x02"
+ "\x00\x00\x00\x00\x00\x00\x00\x68"
+ "\x90\x00\x02\x58", 25);
+ relay_header_unpack(&rh, cell.payload);
+ r = connected_cell_parse(&rh, &cell, &addr, &ttl);
+ tt_int_op(r, ==, 0);
+ tt_int_op(tor_addr_family(&addr), ==, AF_INET6);
+ tt_str_op(fmt_addr(&addr), ==, "2607:f8b0:400c:c02::68");
+ tt_int_op(ttl, ==, -1);
+
+ /* Bogus size: 3. */
+ make_relay_cell(&cell, RELAY_COMMAND_CONNECTED,
+ "\x00\x01\x02", 3);
+ relay_header_unpack(&rh, cell.payload);
+ r = connected_cell_parse(&rh, &cell, &addr, &ttl);
+ tt_int_op(r, ==, -1);
+
+ /* Bogus family: 7. */
+ make_relay_cell(&cell, RELAY_COMMAND_CONNECTED,
+ "\x00\x00\x00\x00\x07"
+ "\x26\x07\xf8\xb0\x40\x0c\x0c\x02"
+ "\x00\x00\x00\x00\x00\x00\x00\x68"
+ "\x90\x00\x02\x58", 25);
+ relay_header_unpack(&rh, cell.payload);
+ r = connected_cell_parse(&rh, &cell, &addr, &ttl);
+ tt_int_op(r, ==, -1);
+
+ /* Truncated IPv6. */
+ make_relay_cell(&cell, RELAY_COMMAND_CONNECTED,
+ "\x00\x00\x00\x00\x06"
+ "\x26\x07\xf8\xb0\x40\x0c\x0c\x02"
+ "\x00\x00\x00\x00\x00\x00\x00\x68"
+ "\x00\x00\x02", 24);
+ relay_header_unpack(&rh, cell.payload);
+ r = connected_cell_parse(&rh, &cell, &addr, &ttl);
+ tt_int_op(r, ==, -1);
+
+ /* Now make sure we can generate connected cells correctly. */
+ /* Try an IPv4 address */
+ memset(&rh, 0, sizeof(rh));
+ memset(&cell, 0, sizeof(cell));
+ tor_addr_parse(&addr, "30.40.50.60");
+ rh.length = connected_cell_format_payload(cell.payload+RELAY_HEADER_SIZE,
+ &addr, 128);
+ tt_int_op(rh.length, ==, 8);
+ test_memeq_hex(cell.payload+RELAY_HEADER_SIZE, "1e28323c" "00000080");
+
+ /* Try parsing it. */
+ tor_addr_make_unspec(&addr);
+ r = connected_cell_parse(&rh, &cell, &addr, &ttl);
+ tt_int_op(r, ==, 0);
+ tt_int_op(tor_addr_family(&addr), ==, AF_INET);
+ tt_str_op(fmt_addr(&addr), ==, "30.40.50.60");
+ tt_int_op(ttl, ==, 128);
+
+ /* Try an IPv6 address */
+ memset(&rh, 0, sizeof(rh));
+ memset(&cell, 0, sizeof(cell));
+ tor_addr_parse(&addr, "2620::6b0:b:1a1a:0:26e5:480e");
+ rh.length = connected_cell_format_payload(cell.payload+RELAY_HEADER_SIZE,
+ &addr, 3600);
+ tt_int_op(rh.length, ==, 25);
+ test_memeq_hex(cell.payload + RELAY_HEADER_SIZE,
+ "00000000" "06"
+ "2620000006b0000b1a1a000026e5480e" "00000e10");
+
+ /* Try parsing it. */
+ tor_addr_make_unspec(&addr);
+ r = connected_cell_parse(&rh, &cell, &addr, &ttl);
+ tt_int_op(r, ==, 0);
+ tt_int_op(tor_addr_family(&addr), ==, AF_INET6);
+ tt_str_op(fmt_addr(&addr), ==, "2620:0:6b0:b:1a1a:0:26e5:480e");
+ tt_int_op(ttl, ==, 3600);
+
+ done:
+ tor_free(mem_op_hex_tmp);
+}
+
+static void
+test_cfmt_create_cells(void *arg)
+{
+ uint8_t b[MAX_ONIONSKIN_CHALLENGE_LEN];
+ create_cell_t cc;
+ cell_t cell;
+ cell_t cell2;
+
+ (void)arg;
+
+ /* === Let's try parsing some good cells! */
+
+ /* A valid create cell. */
+ memset(&cell, 0, sizeof(cell));
+ memset(b, 0, sizeof(b));
+ crypto_rand((char*)b, TAP_ONIONSKIN_CHALLENGE_LEN);
+ cell.command = CELL_CREATE;
+ memcpy(cell.payload, b, TAP_ONIONSKIN_CHALLENGE_LEN);
+ tt_int_op(0, ==, create_cell_parse(&cc, &cell));
+ tt_int_op(CELL_CREATE, ==, cc.cell_type);
+ tt_int_op(ONION_HANDSHAKE_TYPE_TAP, ==, cc.handshake_type);
+ tt_int_op(TAP_ONIONSKIN_CHALLENGE_LEN, ==, cc.handshake_len);
+ test_memeq(cc.onionskin, b, TAP_ONIONSKIN_CHALLENGE_LEN + 10);
+ tt_int_op(0, ==, create_cell_format(&cell2, &cc));
+ tt_int_op(cell.command, ==, cell2.command);
+ test_memeq(cell.payload, cell2.payload, CELL_PAYLOAD_SIZE);
+
+ /* A valid create_fast cell. */
+ memset(&cell, 0, sizeof(cell));
+ memset(b, 0, sizeof(b));
+ crypto_rand((char*)b, CREATE_FAST_LEN);
+ cell.command = CELL_CREATE_FAST;
+ memcpy(cell.payload, b, CREATE_FAST_LEN);
+ tt_int_op(0, ==, create_cell_parse(&cc, &cell));
+ tt_int_op(CELL_CREATE_FAST, ==, cc.cell_type);
+ tt_int_op(ONION_HANDSHAKE_TYPE_FAST, ==, cc.handshake_type);
+ tt_int_op(CREATE_FAST_LEN, ==, cc.handshake_len);
+ test_memeq(cc.onionskin, b, CREATE_FAST_LEN + 10);
+ tt_int_op(0, ==, create_cell_format(&cell2, &cc));
+ tt_int_op(cell.command, ==, cell2.command);
+ test_memeq(cell.payload, cell2.payload, CELL_PAYLOAD_SIZE);
+
+ /* A valid create2 cell with a TAP payload */
+ memset(&cell, 0, sizeof(cell));
+ memset(b, 0, sizeof(b));
+ crypto_rand((char*)b, TAP_ONIONSKIN_CHALLENGE_LEN);
+ cell.command = CELL_CREATE2;
+ memcpy(cell.payload, "\x00\x00\x00\xBA", 4); /* TAP, 186 bytes long */
+ memcpy(cell.payload+4, b, TAP_ONIONSKIN_CHALLENGE_LEN);
+ tt_int_op(0, ==, create_cell_parse(&cc, &cell));
+ tt_int_op(CELL_CREATE2, ==, cc.cell_type);
+ tt_int_op(ONION_HANDSHAKE_TYPE_TAP, ==, cc.handshake_type);
+ tt_int_op(TAP_ONIONSKIN_CHALLENGE_LEN, ==, cc.handshake_len);
+ test_memeq(cc.onionskin, b, TAP_ONIONSKIN_CHALLENGE_LEN + 10);
+ tt_int_op(0, ==, create_cell_format(&cell2, &cc));
+ tt_int_op(cell.command, ==, cell2.command);
+ test_memeq(cell.payload, cell2.payload, CELL_PAYLOAD_SIZE);
+
+ /* A valid create2 cell with an ntor payload */
+ memset(&cell, 0, sizeof(cell));
+ memset(b, 0, sizeof(b));
+ crypto_rand((char*)b, NTOR_ONIONSKIN_LEN);
+ cell.command = CELL_CREATE2;
+ memcpy(cell.payload, "\x00\x02\x00\x54", 4); /* ntor, 84 bytes long */
+ memcpy(cell.payload+4, b, NTOR_ONIONSKIN_LEN);
+#ifdef CURVE25519_ENABLED
+ tt_int_op(0, ==, create_cell_parse(&cc, &cell));
+ tt_int_op(CELL_CREATE2, ==, cc.cell_type);
+ tt_int_op(ONION_HANDSHAKE_TYPE_NTOR, ==, cc.handshake_type);
+ tt_int_op(NTOR_ONIONSKIN_LEN, ==, cc.handshake_len);
+ test_memeq(cc.onionskin, b, NTOR_ONIONSKIN_LEN + 10);
+ tt_int_op(0, ==, create_cell_format(&cell2, &cc));
+ tt_int_op(cell.command, ==, cell2.command);
+ test_memeq(cell.payload, cell2.payload, CELL_PAYLOAD_SIZE);
+#else
+ tt_int_op(-1, ==, create_cell_parse(&cc, &cell));
+#endif
+
+ /* A valid create cell with an ntor payload, in legacy format. */
+ memset(&cell, 0, sizeof(cell));
+ memset(b, 0, sizeof(b));
+ crypto_rand((char*)b, NTOR_ONIONSKIN_LEN);
+ cell.command = CELL_CREATE;
+ memcpy(cell.payload, "ntorNTORntorNTOR", 16);
+ memcpy(cell.payload+16, b, NTOR_ONIONSKIN_LEN);
+#ifdef CURVE25519_ENABLED
+ tt_int_op(0, ==, create_cell_parse(&cc, &cell));
+ tt_int_op(CELL_CREATE, ==, cc.cell_type);
+ tt_int_op(ONION_HANDSHAKE_TYPE_NTOR, ==, cc.handshake_type);
+ tt_int_op(NTOR_ONIONSKIN_LEN, ==, cc.handshake_len);
+ test_memeq(cc.onionskin, b, NTOR_ONIONSKIN_LEN + 10);
+ tt_int_op(0, ==, create_cell_format(&cell2, &cc));
+ tt_int_op(cell.command, ==, cell2.command);
+ test_memeq(cell.payload, cell2.payload, CELL_PAYLOAD_SIZE);
+#else
+ tt_int_op(-1, ==, create_cell_parse(&cc, &cell));
+#endif
+
+ /* == Okay, now let's try to parse some impossible stuff. */
+
+ /* It has to be some kind of a create cell! */
+ cell.command = CELL_CREATED;
+ tt_int_op(-1, ==, create_cell_parse(&cc, &cell));
+
+ /* You can't acutally make an unparseable CREATE or CREATE_FAST cell. */
+
+ /* Try some CREATE2 cells. First with a bad type. */
+ cell.command = CELL_CREATE2;
+ memcpy(cell.payload, "\x00\x50\x00\x99", 4); /* Type 0x50???? */
+ tt_int_op(-1, ==, create_cell_parse(&cc, &cell));
+ /* Now a good type with an incorrect length. */
+ memcpy(cell.payload, "\x00\x00\x00\xBC", 4); /* TAP, 187 bytes.*/
+ tt_int_op(-1, ==, create_cell_parse(&cc, &cell));
+ /* Now a good type with a ridiculous length. */
+ memcpy(cell.payload, "\x00\x00\x02\x00", 4); /* TAP, 512 bytes.*/
+ tt_int_op(-1, ==, create_cell_parse(&cc, &cell));
+
+ /* == Time to try formatting bad cells. The important thing is that
+ we reject big lengths, so just check that for now. */
+ cc.handshake_len = 512;
+ tt_int_op(-1, ==, create_cell_format(&cell2, &cc));
+
+ /* == Try formatting a create2 cell we don't understand. XXXX */
+
+ done:
+ ;
+}
+
+static void
+test_cfmt_created_cells(void *arg)
+{
+ uint8_t b[512];
+ created_cell_t cc;
+ cell_t cell;
+ cell_t cell2;
+
+ (void)arg;
+
+ /* A good CREATED cell */
+ memset(&cell, 0, sizeof(cell));
+ memset(b, 0, sizeof(b));
+ crypto_rand((char*)b, TAP_ONIONSKIN_REPLY_LEN);
+ cell.command = CELL_CREATED;
+ memcpy(cell.payload, b, TAP_ONIONSKIN_REPLY_LEN);
+ tt_int_op(0, ==, created_cell_parse(&cc, &cell));
+ tt_int_op(CELL_CREATED, ==, cc.cell_type);
+ tt_int_op(TAP_ONIONSKIN_REPLY_LEN, ==, cc.handshake_len);
+ test_memeq(cc.reply, b, TAP_ONIONSKIN_REPLY_LEN + 10);
+ tt_int_op(0, ==, created_cell_format(&cell2, &cc));
+ tt_int_op(cell.command, ==, cell2.command);
+ test_memeq(cell.payload, cell2.payload, CELL_PAYLOAD_SIZE);
+
+ /* A good CREATED_FAST cell */
+ memset(&cell, 0, sizeof(cell));
+ memset(b, 0, sizeof(b));
+ crypto_rand((char*)b, CREATED_FAST_LEN);
+ cell.command = CELL_CREATED_FAST;
+ memcpy(cell.payload, b, CREATED_FAST_LEN);
+ tt_int_op(0, ==, created_cell_parse(&cc, &cell));
+ tt_int_op(CELL_CREATED_FAST, ==, cc.cell_type);
+ tt_int_op(CREATED_FAST_LEN, ==, cc.handshake_len);
+ test_memeq(cc.reply, b, CREATED_FAST_LEN + 10);
+ tt_int_op(0, ==, created_cell_format(&cell2, &cc));
+ tt_int_op(cell.command, ==, cell2.command);
+ test_memeq(cell.payload, cell2.payload, CELL_PAYLOAD_SIZE);
+
+ /* A good CREATED2 cell with short reply */
+ memset(&cell, 0, sizeof(cell));
+ memset(b, 0, sizeof(b));
+ crypto_rand((char*)b, 64);
+ cell.command = CELL_CREATED2;
+ memcpy(cell.payload, "\x00\x40", 2);
+ memcpy(cell.payload+2, b, 64);
+ tt_int_op(0, ==, created_cell_parse(&cc, &cell));
+ tt_int_op(CELL_CREATED2, ==, cc.cell_type);
+ tt_int_op(64, ==, cc.handshake_len);
+ test_memeq(cc.reply, b, 80);
+ tt_int_op(0, ==, created_cell_format(&cell2, &cc));
+ tt_int_op(cell.command, ==, cell2.command);
+ test_memeq(cell.payload, cell2.payload, CELL_PAYLOAD_SIZE);
+
+ /* A good CREATED2 cell with maximal reply */
+ memset(&cell, 0, sizeof(cell));
+ memset(b, 0, sizeof(b));
+ crypto_rand((char*)b, 496);
+ cell.command = CELL_CREATED2;
+ memcpy(cell.payload, "\x01\xF0", 2);
+ memcpy(cell.payload+2, b, 496);
+ tt_int_op(0, ==, created_cell_parse(&cc, &cell));
+ tt_int_op(CELL_CREATED2, ==, cc.cell_type);
+ tt_int_op(496, ==, cc.handshake_len);
+ test_memeq(cc.reply, b, 496);
+ tt_int_op(0, ==, created_cell_format(&cell2, &cc));
+ tt_int_op(cell.command, ==, cell2.command);
+ test_memeq(cell.payload, cell2.payload, CELL_PAYLOAD_SIZE);
+
+ /* Bogus CREATED2 cell: too long! */
+ memset(&cell, 0, sizeof(cell));
+ memset(b, 0, sizeof(b));
+ crypto_rand((char*)b, 496);
+ cell.command = CELL_CREATED2;
+ memcpy(cell.payload, "\x01\xF1", 2);
+ tt_int_op(-1, ==, created_cell_parse(&cc, &cell));
+
+ /* Unformattable CREATED2 cell: too long! */
+ cc.handshake_len = 497;
+ tt_int_op(-1, ==, created_cell_format(&cell2, &cc));
+
+ done:
+ ;
+}
+
+static void
+test_cfmt_extend_cells(void *arg)
+{
+ cell_t cell;
+ uint8_t b[512];
+ extend_cell_t ec;
+ create_cell_t *cc = &ec.create_cell;
+ uint8_t p[RELAY_PAYLOAD_SIZE];
+ uint8_t p2[RELAY_PAYLOAD_SIZE];
+ uint8_t p2_cmd;
+ uint16_t p2_len;
+ char *mem_op_hex_tmp = NULL;
+
+ (void) arg;
+
+ /* Let's start with a simple EXTEND cell. */
+ memset(p, 0, sizeof(p));
+ memset(b, 0, sizeof(b));
+ crypto_rand((char*)b, TAP_ONIONSKIN_CHALLENGE_LEN);
+ memcpy(p, "\x12\xf4\x00\x01\x01\x02", 6); /* 18 244 0 1 : 258 */
+ memcpy(p+6,b,TAP_ONIONSKIN_CHALLENGE_LEN);
+ memcpy(p+6+TAP_ONIONSKIN_CHALLENGE_LEN, "electroencephalogram", 20);
+ tt_int_op(0, ==, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND,
+ p, 26+TAP_ONIONSKIN_CHALLENGE_LEN));
+ tt_int_op(RELAY_COMMAND_EXTEND, ==, ec.cell_type);
+ tt_str_op("18.244.0.1", ==, fmt_addr(&ec.orport_ipv4.addr));
+ tt_int_op(258, ==, ec.orport_ipv4.port);
+ tt_int_op(AF_UNSPEC, ==, tor_addr_family(&ec.orport_ipv6.addr));
+ test_memeq(ec.node_id, "electroencephalogram", 20);
+ tt_int_op(cc->cell_type, ==, CELL_CREATE);
+ tt_int_op(cc->handshake_type, ==, ONION_HANDSHAKE_TYPE_TAP);
+ tt_int_op(cc->handshake_len, ==, TAP_ONIONSKIN_CHALLENGE_LEN);
+ test_memeq(cc->onionskin, b, TAP_ONIONSKIN_CHALLENGE_LEN+20);
+ tt_int_op(0, ==, extend_cell_format(&p2_cmd, &p2_len, p2, &ec));
+ tt_int_op(p2_cmd, ==, RELAY_COMMAND_EXTEND);
+ tt_int_op(p2_len, ==, 26+TAP_ONIONSKIN_CHALLENGE_LEN);
+ test_memeq(p2, p, RELAY_PAYLOAD_SIZE);
+
+ /* Let's do an ntor stuffed in a legacy EXTEND cell */
+ memset(p, 0, sizeof(p));
+ memset(b, 0, sizeof(b));
+ crypto_rand((char*)b, NTOR_ONIONSKIN_LEN);
+ memcpy(p, "\x12\xf4\x00\x01\x01\x02", 6); /* 18 244 0 1 : 258 */
+ memcpy(p+6,"ntorNTORntorNTOR", 16);
+ memcpy(p+22, b, NTOR_ONIONSKIN_LEN);
+ memcpy(p+6+TAP_ONIONSKIN_CHALLENGE_LEN, "electroencephalogram", 20);
+ tt_int_op(0, ==, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND,
+ p, 26+TAP_ONIONSKIN_CHALLENGE_LEN));
+ tt_int_op(RELAY_COMMAND_EXTEND, ==, ec.cell_type);
+ tt_str_op("18.244.0.1", ==, fmt_addr(&ec.orport_ipv4.addr));
+ tt_int_op(258, ==, ec.orport_ipv4.port);
+ tt_int_op(AF_UNSPEC, ==, tor_addr_family(&ec.orport_ipv6.addr));
+ test_memeq(ec.node_id, "electroencephalogram", 20);
+ tt_int_op(cc->cell_type, ==, CELL_CREATE2);
+ tt_int_op(cc->handshake_type, ==, ONION_HANDSHAKE_TYPE_NTOR);
+ tt_int_op(cc->handshake_len, ==, NTOR_ONIONSKIN_LEN);
+ test_memeq(cc->onionskin, b, NTOR_ONIONSKIN_LEN+20);
+ tt_int_op(0, ==, extend_cell_format(&p2_cmd, &p2_len, p2, &ec));
+ tt_int_op(p2_cmd, ==, RELAY_COMMAND_EXTEND);
+ tt_int_op(p2_len, ==, 26+TAP_ONIONSKIN_CHALLENGE_LEN);
+ test_memeq(p2, p, RELAY_PAYLOAD_SIZE);
+ tt_int_op(0, ==, create_cell_format_relayed(&cell, cc));
+
+ /* Now let's do a minimal ntor EXTEND2 cell. */
+ memset(&ec, 0xff, sizeof(ec));
+ memset(p, 0, sizeof(p));
+ memset(b, 0, sizeof(b));
+ crypto_rand((char*)b, NTOR_ONIONSKIN_LEN);
+ /* 2 items; one 18.244.0.1:61681 */
+ memcpy(p, "\x02\x00\x06\x12\xf4\x00\x01\xf0\xf1", 9);
+ /* The other is a digest. */
+ memcpy(p+9, "\x02\x14" "anarchoindividualist", 22);
+ /* Prep for the handshake: type and length */
+ memcpy(p+31, "\x00\x02\x00\x54", 4);
+ memcpy(p+35, b, NTOR_ONIONSKIN_LEN);
+ tt_int_op(0, ==, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND2,
+ p, 35+NTOR_ONIONSKIN_LEN));
+ tt_int_op(RELAY_COMMAND_EXTEND2, ==, ec.cell_type);
+ tt_str_op("18.244.0.1", ==, fmt_addr(&ec.orport_ipv4.addr));
+ tt_int_op(61681, ==, ec.orport_ipv4.port);
+ tt_int_op(AF_UNSPEC, ==, tor_addr_family(&ec.orport_ipv6.addr));
+ test_memeq(ec.node_id, "anarchoindividualist", 20);
+ tt_int_op(cc->cell_type, ==, CELL_CREATE2);
+ tt_int_op(cc->handshake_type, ==, ONION_HANDSHAKE_TYPE_NTOR);
+ tt_int_op(cc->handshake_len, ==, NTOR_ONIONSKIN_LEN);
+ test_memeq(cc->onionskin, b, NTOR_ONIONSKIN_LEN+20);
+ tt_int_op(0, ==, extend_cell_format(&p2_cmd, &p2_len, p2, &ec));
+ tt_int_op(p2_cmd, ==, RELAY_COMMAND_EXTEND2);
+ tt_int_op(p2_len, ==, 35+NTOR_ONIONSKIN_LEN);
+ test_memeq(p2, p, RELAY_PAYLOAD_SIZE);
+
+ /* Now let's do a fanciful EXTEND2 cell. */
+ memset(&ec, 0xff, sizeof(ec));
+ memset(p, 0, sizeof(p));
+ memset(b, 0, sizeof(b));
+ crypto_rand((char*)b, 99);
+ /* 4 items; one 18 244 0 1 61681 */
+ memcpy(p, "\x04\x00\x06\x12\xf4\x00\x01\xf0\xf1", 9);
+ /* One is a digest. */
+ memcpy(p+9, "\x02\x14" "anthropomorphization", 22);
+ /* One is an ipv6 address */
+ memcpy(p+31, "\x01\x12\x20\x02\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\xf0\xc5\x1e\x11\x12", 20);
+ /* One is the Konami code. */
+ memcpy(p+51, "\xf0\x20upupdowndownleftrightleftrightba", 34);
+ /* Prep for the handshake: weird type and length */
+ memcpy(p+85, "\x01\x05\x00\x63", 4);
+ memcpy(p+89, b, 99);
+ tt_int_op(0, ==, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND2, p, 89+99));
+ tt_int_op(RELAY_COMMAND_EXTEND2, ==, ec.cell_type);
+ tt_str_op("18.244.0.1", ==, fmt_addr(&ec.orport_ipv4.addr));
+ tt_int_op(61681, ==, ec.orport_ipv4.port);
+ tt_str_op("2002::f0:c51e", ==, fmt_addr(&ec.orport_ipv6.addr));
+ tt_int_op(4370, ==, ec.orport_ipv6.port);
+ test_memeq(ec.node_id, "anthropomorphization", 20);
+ tt_int_op(cc->cell_type, ==, CELL_CREATE2);
+ tt_int_op(cc->handshake_type, ==, 0x105);
+ tt_int_op(cc->handshake_len, ==, 99);
+ test_memeq(cc->onionskin, b, 99+20);
+ tt_int_op(0, ==, extend_cell_format(&p2_cmd, &p2_len, p2, &ec));
+ tt_int_op(p2_cmd, ==, RELAY_COMMAND_EXTEND2);
+ /* We'll generate it minus the IPv6 address and minus the konami code */
+ tt_int_op(p2_len, ==, 89+99-34-20);
+ test_memeq_hex(p2,
+ /* Two items: one that same darn IP address. */
+ "02000612F40001F0F1"
+ /* The next is a digest : anthropomorphization */
+ "0214616e7468726f706f6d6f727068697a6174696f6e"
+ /* Now the handshake prologue */
+ "01050063");
+ test_memeq(p2+1+8+22+4, b, 99+20);
+ tt_int_op(0, ==, create_cell_format_relayed(&cell, cc));
+
+ /* == Now try parsing some junk */
+
+ /* Try a too-long handshake */
+ memset(p, 0, sizeof(p));
+ memcpy(p, "\x02\x00\x06\x12\xf4\x00\x01\xf0\xf1", 9);
+ memcpy(p+9, "\x02\x14" "anarchoindividualist", 22);
+ memcpy(p+31, "\xff\xff\x01\xd0", 4);
+ tt_int_op(-1, ==, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND2,
+ p, sizeof(p)));
+
+ /* Try two identities. */
+ memset(p, 0, sizeof(p));
+ memcpy(p, "\x03\x00\x06\x12\xf4\x00\x01\xf0\xf1", 9);
+ memcpy(p+9, "\x02\x14" "anarchoindividualist", 22);
+ memcpy(p+31, "\x02\x14" "autodepolymerization", 22);
+ memcpy(p+53, "\xff\xff\x00\x10", 4);
+ tt_int_op(-1, ==, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND2,
+ p, sizeof(p)));
+
+ /* No identities. */
+ memset(p, 0, sizeof(p));
+ memcpy(p, "\x01\x00\x06\x12\xf4\x00\x01\xf0\xf1", 9);
+ memcpy(p+53, "\xff\xff\x00\x10", 4);
+ tt_int_op(-1, ==, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND2,
+ p, sizeof(p)));
+
+ /* Try a bad IPv4 address (too long, too short)*/
+ memset(p, 0, sizeof(p));
+ memcpy(p, "\x02\x00\x07\x12\xf4\x00\x01\xf0\xf1\xff", 10);
+ memcpy(p+10, "\x02\x14" "anarchoindividualist", 22);
+ memcpy(p+32, "\xff\xff\x00\x10", 4);
+ tt_int_op(-1, ==, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND2,
+ p, sizeof(p)));
+ memset(p, 0, sizeof(p));
+ memcpy(p, "\x02\x00\x05\x12\xf4\x00\x01\xf0", 8);
+ memcpy(p+8, "\x02\x14" "anarchoindividualist", 22);
+ memcpy(p+30, "\xff\xff\x00\x10", 4);
+ tt_int_op(-1, ==, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND2,
+ p, sizeof(p)));
+
+ /* IPv6 address (too long, too short, no IPv4)*/
+ memset(p, 0, sizeof(p));
+ memcpy(p, "\x03\x00\x06\x12\xf4\x00\x01\xf0\xf1", 9);
+ memcpy(p+9, "\x02\x14" "anarchoindividualist", 22);
+ memcpy(p+31, "\x01\x13" "xxxxxxxxxxxxxxxxYYZ", 19);
+ memcpy(p+50, "\xff\xff\x00\x20", 4);
+ tt_int_op(-1, ==, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND2,
+ p, sizeof(p)));
+ memset(p, 0, sizeof(p));
+ memcpy(p, "\x03\x00\x06\x12\xf4\x00\x01\xf0\xf1", 9);
+ memcpy(p+9, "\x02\x14" "anarchoindividualist", 22);
+ memcpy(p+31, "\x01\x11" "xxxxxxxxxxxxxxxxY", 17);
+ memcpy(p+48, "\xff\xff\x00\x20", 4);
+ tt_int_op(-1, ==, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND2,
+ p, sizeof(p)));
+ memset(p, 0, sizeof(p));
+ memcpy(p, "\x02", 1);
+ memcpy(p+1, "\x02\x14" "anarchoindividualist", 22);
+ memcpy(p+23, "\x01\x12" "xxxxxxxxxxxxxxxxYY", 18);
+ memcpy(p+41, "\xff\xff\x00\x20", 4);
+ tt_int_op(-1, ==, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND2,
+ p, sizeof(p)));
+
+ /* Running out of space in specifiers */
+ memset(p,0,sizeof(p));
+ memcpy(p, "\x05\x0a\xff", 3);
+ memcpy(p+3+255, "\x0a\xff", 2);
+ tt_int_op(-1, ==, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND2,
+ p, sizeof(p)));
+
+ /* Fuzz, because why not. */
+ memset(&ec, 0xff, sizeof(ec));
+ {
+ int i;
+ memset(p, 0, sizeof(p));
+ for (i = 0; i < 10000; ++i) {
+ int n = crypto_rand_int(sizeof(p));
+ crypto_rand((char *)p, n);
+ extend_cell_parse(&ec, RELAY_COMMAND_EXTEND2, p, n);
+ }
+ }
+
+ done:
+ tor_free(mem_op_hex_tmp);
+}
+
+static void
+test_cfmt_extended_cells(void *arg)
+{
+ uint8_t b[512];
+ extended_cell_t ec;
+ created_cell_t *cc = &ec.created_cell;
+ uint8_t p[RELAY_PAYLOAD_SIZE];
+ uint8_t p2[RELAY_PAYLOAD_SIZE];
+ uint8_t p2_cmd;
+ uint16_t p2_len;
+ char *mem_op_hex_tmp = NULL;
+
+ (void) arg;
+
+ /* Try a regular EXTENDED cell. */
+ memset(&ec, 0xff, sizeof(ec));
+ memset(p, 0, sizeof(p));
+ memset(b, 0, sizeof(b));
+ crypto_rand((char*)b, TAP_ONIONSKIN_REPLY_LEN);
+ memcpy(p,b,TAP_ONIONSKIN_REPLY_LEN);
+ tt_int_op(0, ==, extended_cell_parse(&ec, RELAY_COMMAND_EXTENDED, p,
+ TAP_ONIONSKIN_REPLY_LEN));
+ tt_int_op(RELAY_COMMAND_EXTENDED, ==, ec.cell_type);
+ tt_int_op(cc->cell_type, ==, CELL_CREATED);
+ tt_int_op(cc->handshake_len, ==, TAP_ONIONSKIN_REPLY_LEN);
+ test_memeq(cc->reply, b, TAP_ONIONSKIN_REPLY_LEN);
+ tt_int_op(0, ==, extended_cell_format(&p2_cmd, &p2_len, p2, &ec));
+ tt_int_op(RELAY_COMMAND_EXTENDED, ==, p2_cmd);
+ tt_int_op(TAP_ONIONSKIN_REPLY_LEN, ==, p2_len);
+ test_memeq(p2, p, sizeof(p2));
+
+ /* Try an EXTENDED2 cell */
+ memset(&ec, 0xff, sizeof(ec));
+ memset(p, 0, sizeof(p));
+ memset(b, 0, sizeof(b));
+ crypto_rand((char*)b, 42);
+ memcpy(p,"\x00\x2a",2);
+ memcpy(p+2,b,42);
+ tt_int_op(0, ==, extended_cell_parse(&ec, RELAY_COMMAND_EXTENDED2, p, 2+42));
+ tt_int_op(RELAY_COMMAND_EXTENDED2, ==, ec.cell_type);
+ tt_int_op(cc->cell_type, ==, CELL_CREATED2);
+ tt_int_op(cc->handshake_len, ==, 42);
+ test_memeq(cc->reply, b, 42+10);
+ tt_int_op(0, ==, extended_cell_format(&p2_cmd, &p2_len, p2, &ec));
+ tt_int_op(RELAY_COMMAND_EXTENDED2, ==, p2_cmd);
+ tt_int_op(2+42, ==, p2_len);
+ test_memeq(p2, p, sizeof(p2));
+
+ /* Try an almost-too-long EXTENDED2 cell */
+ memcpy(p, "\x01\xf0", 2);
+ tt_int_op(0, ==,
+ extended_cell_parse(&ec, RELAY_COMMAND_EXTENDED2, p, sizeof(p)));
+
+ /* Now try a too-long extended2 cell. That's the only misparse I can think
+ * of. */
+ memcpy(p, "\x01\xf1", 2);
+ tt_int_op(-1, ==,
+ extended_cell_parse(&ec, RELAY_COMMAND_EXTENDED2, p, sizeof(p)));
+
+ done:
+ tor_free(mem_op_hex_tmp);
+}
+
+static void
+test_cfmt_resolved_cells(void *arg)
+{
+ smartlist_t *addrs = smartlist_new();
+ relay_header_t rh;
+ cell_t cell;
+ int r, errcode;
+ address_ttl_t *a;
+
+ (void)arg;
+#define CLEAR_CELL() do { \
+ memset(&cell, 0, sizeof(cell)); \
+ memset(&rh, 0, sizeof(rh)); \
+ } while (0)
+#define CLEAR_ADDRS() do { \
+ SMARTLIST_FOREACH(addrs, address_ttl_t *, a, \
+ address_ttl_free(a); ); \
+ smartlist_clear(addrs); \
+ } while (0)
+#define SET_CELL(s) do { \
+ CLEAR_CELL(); \
+ memcpy(cell.payload + RELAY_HEADER_SIZE, (s), sizeof((s))-1); \
+ rh.length = sizeof((s))-1; \
+ rh.command = RELAY_COMMAND_RESOLVED; \
+ errcode = -1; \
+ } while (0)
+
+ /* The cell format is one or more answers; each of the form
+ * type [1 byte---0:hostname, 4:ipv4, 6:ipv6, f0:err-transient, f1:err]
+ * length [1 byte]
+ * body [length bytes]
+ * ttl [4 bytes]
+ */
+
+ /* Let's try an empty cell */
+ SET_CELL("");
+ r = resolved_cell_parse(&cell, &rh, addrs, &errcode);
+ tt_int_op(errcode, ==, 0);
+ tt_int_op(r, ==, 0);
+ tt_int_op(smartlist_len(addrs), ==, 0);
+ CLEAR_ADDRS(); /* redundant but let's be consistent */
+
+ /* Cell with one ipv4 addr */
+ SET_CELL("\x04\x04" "\x7f\x00\x02\x0a" "\x00\00\x01\x00");
+ tt_int_op(rh.length, ==, 10);
+ r = resolved_cell_parse(&cell, &rh, addrs, &errcode);
+ tt_int_op(errcode, ==, 0);
+ tt_int_op(r, ==, 0);
+ tt_int_op(smartlist_len(addrs), ==, 1);
+ a = smartlist_get(addrs, 0);
+ tt_str_op(fmt_addr(&a->addr), ==, "127.0.2.10");
+ tt_ptr_op(a->hostname, ==, NULL);
+ tt_int_op(a->ttl, ==, 256);
+ CLEAR_ADDRS();
+
+ /* Cell with one ipv6 addr */
+ SET_CELL("\x06\x10"
+ "\x20\x02\x90\x90\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\xf0\xf0\xab\xcd"
+ "\x02\00\x00\x01");
+ tt_int_op(rh.length, ==, 22);
+ r = resolved_cell_parse(&cell, &rh, addrs, &errcode);
+ tt_int_op(errcode, ==, 0);
+ tt_int_op(r, ==, 0);
+ tt_int_op(smartlist_len(addrs), ==, 1);
+ a = smartlist_get(addrs, 0);
+ tt_str_op(fmt_addr(&a->addr), ==, "2002:9090::f0f0:abcd");
+ tt_ptr_op(a->hostname, ==, NULL);
+ tt_int_op(a->ttl, ==, 0x2000001);
+ CLEAR_ADDRS();
+
+ /* Cell with one hostname */
+ SET_CELL("\x00\x11"
+ "motherbrain.zebes"
+ "\x00\00\x00\x00");
+ tt_int_op(rh.length, ==, 23);
+ r = resolved_cell_parse(&cell, &rh, addrs, &errcode);
+ tt_int_op(errcode, ==, 0);
+ tt_int_op(r, ==, 0);
+ tt_int_op(smartlist_len(addrs), ==, 1);
+ a = smartlist_get(addrs, 0);
+ tt_assert(tor_addr_is_null(&a->addr));
+ tt_str_op(a->hostname, ==, "motherbrain.zebes");
+ tt_int_op(a->ttl, ==, 0);
+ CLEAR_ADDRS();
+
+#define LONG_NAME \
+ "this-hostname-has-255-characters.in-order-to-test-whether-very-long.ho" \
+ "stnames-are-accepted.i-am-putting-it-in-a-macro-because-although.this-" \
+ "function-is-already-very-full.of-copy-and-pasted-stuff.having-this-app" \
+ "ear-more-than-once-would-bother-me-somehow.is"
+
+ tt_int_op(strlen(LONG_NAME), ==, 255);
+ SET_CELL("\x00\xff"
+ LONG_NAME
+ "\x00\01\x00\x00");
+ tt_int_op(rh.length, ==, 261);
+ r = resolved_cell_parse(&cell, &rh, addrs, &errcode);
+ tt_int_op(errcode, ==, 0);
+ tt_int_op(r, ==, 0);
+ tt_int_op(smartlist_len(addrs), ==, 1);
+ a = smartlist_get(addrs, 0);
+ tt_assert(tor_addr_is_null(&a->addr));
+ tt_str_op(a->hostname, ==, LONG_NAME);
+ tt_int_op(a->ttl, ==, 65536);
+ CLEAR_ADDRS();
+
+ /* Cells with an error */
+ SET_CELL("\xf0\x2b"
+ "I'm sorry, Dave. I'm afraid I can't do that"
+ "\x00\x11\x22\x33");
+ tt_int_op(rh.length, ==, 49);
+ r = resolved_cell_parse(&cell, &rh, addrs, &errcode);
+ tt_int_op(errcode, ==, RESOLVED_TYPE_ERROR_TRANSIENT);
+ tt_int_op(r, ==, 0);
+ tt_int_op(smartlist_len(addrs), ==, 0);
+ CLEAR_ADDRS();
+
+ SET_CELL("\xf1\x40"
+ "This hostname is too important for me to allow you to resolve it"
+ "\x00\x00\x00\x00");
+ tt_int_op(rh.length, ==, 70);
+ r = resolved_cell_parse(&cell, &rh, addrs, &errcode);
+ tt_int_op(errcode, ==, RESOLVED_TYPE_ERROR);
+ tt_int_op(r, ==, 0);
+ tt_int_op(smartlist_len(addrs), ==, 0);
+ CLEAR_ADDRS();
+
+ /* Cell with an unrecognized type */
+ SET_CELL("\xee\x16"
+ "fault in the AE35 unit"
+ "\x09\x09\x01\x01");
+ tt_int_op(rh.length, ==, 28);
+ r = resolved_cell_parse(&cell, &rh, addrs, &errcode);
+ tt_int_op(errcode, ==, 0);
+ tt_int_op(r, ==, 0);
+ tt_int_op(smartlist_len(addrs), ==, 0);
+ CLEAR_ADDRS();
+
+ /* Cell with one of each */
+ SET_CELL(/* unrecognized: */
+ "\xee\x16"
+ "fault in the AE35 unit"
+ "\x09\x09\x01\x01"
+ /* error: */
+ "\xf0\x2b"
+ "I'm sorry, Dave. I'm afraid I can't do that"
+ "\x00\x11\x22\x33"
+ /* IPv6: */
+ "\x06\x10"
+ "\x20\x02\x90\x90\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\xf0\xf0\xab\xcd"
+ "\x02\00\x00\x01"
+ /* IPv4: */
+ "\x04\x04" "\x7f\x00\x02\x0a" "\x00\00\x01\x00"
+ /* Hostname: */
+ "\x00\x11"
+ "motherbrain.zebes"
+ "\x00\00\x00\x00"
+ );
+ r = resolved_cell_parse(&cell, &rh, addrs, &errcode);
+ tt_int_op(errcode, ==, 0); /* no error reported; we got answers */
+ tt_int_op(r, ==, 0);
+ tt_int_op(smartlist_len(addrs), ==, 3);
+ a = smartlist_get(addrs, 0);
+ tt_str_op(fmt_addr(&a->addr), ==, "2002:9090::f0f0:abcd");
+ tt_ptr_op(a->hostname, ==, NULL);
+ tt_int_op(a->ttl, ==, 0x2000001);
+ a = smartlist_get(addrs, 1);
+ tt_str_op(fmt_addr(&a->addr), ==, "127.0.2.10");
+ tt_ptr_op(a->hostname, ==, NULL);
+ tt_int_op(a->ttl, ==, 256);
+ a = smartlist_get(addrs, 2);
+ tt_assert(tor_addr_is_null(&a->addr));
+ tt_str_op(a->hostname, ==, "motherbrain.zebes");
+ tt_int_op(a->ttl, ==, 0);
+ CLEAR_ADDRS();
+
+ /* Cell with several of similar type */
+ SET_CELL(/* IPv4 */
+ "\x04\x04" "\x7f\x00\x02\x0a" "\x00\00\x01\x00"
+ "\x04\x04" "\x08\x08\x08\x08" "\x00\00\x01\x05"
+ "\x04\x04" "\x7f\xb0\x02\xb0" "\x00\01\xff\xff"
+ /* IPv6 */
+ "\x06\x10"
+ "\x20\x02\x90\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\xca\xfe\xf0\x0d"
+ "\x00\00\x00\x01"
+ "\x06\x10"
+ "\x20\x02\x90\x01\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\xfa\xca\xde"
+ "\x00\00\x00\x03");
+ r = resolved_cell_parse(&cell, &rh, addrs, &errcode);
+ tt_int_op(errcode, ==, 0);
+ tt_int_op(r, ==, 0);
+ tt_int_op(smartlist_len(addrs), ==, 5);
+ a = smartlist_get(addrs, 0);
+ tt_str_op(fmt_addr(&a->addr), ==, "127.0.2.10");
+ tt_ptr_op(a->hostname, ==, NULL);
+ tt_int_op(a->ttl, ==, 256);
+ a = smartlist_get(addrs, 1);
+ tt_str_op(fmt_addr(&a->addr), ==, "8.8.8.8");
+ tt_ptr_op(a->hostname, ==, NULL);
+ tt_int_op(a->ttl, ==, 261);
+ a = smartlist_get(addrs, 2);
+ tt_str_op(fmt_addr(&a->addr), ==, "127.176.2.176");
+ tt_ptr_op(a->hostname, ==, NULL);
+ tt_int_op(a->ttl, ==, 131071);
+ a = smartlist_get(addrs, 3);
+ tt_str_op(fmt_addr(&a->addr), ==, "2002:9000::cafe:f00d");
+ tt_ptr_op(a->hostname, ==, NULL);
+ tt_int_op(a->ttl, ==, 1);
+ a = smartlist_get(addrs, 4);
+ tt_str_op(fmt_addr(&a->addr), ==, "2002:9001::fa:cade");
+ tt_ptr_op(a->hostname, ==, NULL);
+ tt_int_op(a->ttl, ==, 3);
+ CLEAR_ADDRS();
+
+ /* Full cell */
+#define LONG_NAME2 \
+ "this-name-has-231-characters.so-that-it-plus-LONG_NAME-can-completely-" \
+ "fill-up-the-payload-of-a-cell.its-important-to-check-for-the-full-thin" \
+ "g-case.to-avoid-off-by-one-errors.where-full-things-are-misreported-as" \
+ ".overflowing-by-one.z"
+
+ tt_int_op(strlen(LONG_NAME2), ==, 231);
+ SET_CELL("\x00\xff"
+ LONG_NAME
+ "\x00\01\x00\x00"
+ "\x00\xe7"
+ LONG_NAME2
+ "\x00\01\x00\x00");
+ tt_int_op(rh.length, ==, RELAY_PAYLOAD_SIZE);
+ r = resolved_cell_parse(&cell, &rh, addrs, &errcode);
+ tt_int_op(errcode, ==, 0);
+ tt_int_op(r, ==, 0);
+ tt_int_op(smartlist_len(addrs), ==, 2);
+ a = smartlist_get(addrs, 0);
+ tt_str_op(a->hostname, ==, LONG_NAME);
+ a = smartlist_get(addrs, 1);
+ tt_str_op(a->hostname, ==, LONG_NAME2);
+ CLEAR_ADDRS();
+
+ /* BAD CELLS */
+
+ /* Invalid length on an IPv4 */
+ SET_CELL("\x04\x03zzz1234");
+ r = resolved_cell_parse(&cell, &rh, addrs, &errcode);
+ tt_int_op(errcode, ==, 0);
+ tt_int_op(r, ==, -1);
+ tt_int_op(smartlist_len(addrs), ==, 0);
+ SET_CELL("\x04\x04" "\x7f\x00\x02\x0a" "\x00\00\x01\x00"
+ "\x04\x05zzzzz1234");
+ r = resolved_cell_parse(&cell, &rh, addrs, &errcode);
+ tt_int_op(errcode, ==, 0);
+ tt_int_op(r, ==, -1);
+ tt_int_op(smartlist_len(addrs), ==, 0);
+
+ /* Invalid length on an IPv6 */
+ SET_CELL("\x06\x03zzz1234");
+ r = resolved_cell_parse(&cell, &rh, addrs, &errcode);
+ tt_int_op(errcode, ==, 0);
+ tt_int_op(r, ==, -1);
+ tt_int_op(smartlist_len(addrs), ==, 0);
+ SET_CELL("\x04\x04" "\x7f\x00\x02\x0a" "\x00\00\x01\x00"
+ "\x06\x17wwwwwwwwwwwwwwwww1234");
+ r = resolved_cell_parse(&cell, &rh, addrs, &errcode);
+ tt_int_op(errcode, ==, 0);
+ tt_int_op(r, ==, -1);
+ tt_int_op(smartlist_len(addrs), ==, 0);
+ SET_CELL("\x04\x04" "\x7f\x00\x02\x0a" "\x00\00\x01\x00"
+ "\x06\x10xxxx");
+ r = resolved_cell_parse(&cell, &rh, addrs, &errcode);
+ tt_int_op(errcode, ==, 0);
+ tt_int_op(r, ==, -1);
+ tt_int_op(smartlist_len(addrs), ==, 0);
+
+ /* Empty hostname */
+ SET_CELL("\x00\x00xxxx");
+ r = resolved_cell_parse(&cell, &rh, addrs, &errcode);
+ tt_int_op(errcode, ==, 0);
+ tt_int_op(r, ==, -1);
+ tt_int_op(smartlist_len(addrs), ==, 0);
+
+ /* rh.length out of range */
+ CLEAR_CELL();
+ rh.length = 499;
+ r = resolved_cell_parse(&cell, &rh, addrs, &errcode);
+ tt_int_op(errcode, ==, 0);
+ tt_int_op(r, ==, -1);
+ tt_int_op(smartlist_len(addrs), ==, 0);
+
+ /* Item length extends beyond rh.length */
+ CLEAR_CELL();
+ SET_CELL("\x00\xff"
+ LONG_NAME
+ "\x00\01\x00\x00");
+ rh.length -= 1;
+ r = resolved_cell_parse(&cell, &rh, addrs, &errcode);
+ tt_int_op(r, ==, -1);
+ tt_int_op(smartlist_len(addrs), ==, 0);
+ rh.length -= 5;
+ r = resolved_cell_parse(&cell, &rh, addrs, &errcode);
+ tt_int_op(r, ==, -1);
+ tt_int_op(smartlist_len(addrs), ==, 0);
+
+ SET_CELL("\x04\x04" "\x7f\x00\x02\x0a" "\x00\00\x01\x00");
+ rh.length -= 1;
+ r = resolved_cell_parse(&cell, &rh, addrs, &errcode);
+ tt_int_op(r, ==, -1);
+ tt_int_op(smartlist_len(addrs), ==, 0);
+
+ SET_CELL("\xee\x10"
+ "\x20\x02\x90\x01\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\xfa\xca\xde"
+ "\x00\00\x00\x03");
+ rh.length -= 1;
+ r = resolved_cell_parse(&cell, &rh, addrs, &errcode);
+ tt_int_op(r, ==, -1);
+ tt_int_op(smartlist_len(addrs), ==, 0);
+
+ /* Truncated item after first character */
+ SET_CELL("\x04");
+ r = resolved_cell_parse(&cell, &rh, addrs, &errcode);
+ tt_int_op(r, ==, -1);
+ tt_int_op(smartlist_len(addrs), ==, 0);
+
+ SET_CELL("\xee");
+ r = resolved_cell_parse(&cell, &rh, addrs, &errcode);
+ tt_int_op(r, ==, -1);
+ tt_int_op(smartlist_len(addrs), ==, 0);
+
+ done:
+ CLEAR_ADDRS();
+ CLEAR_CELL();
+ smartlist_free(addrs);
+#undef CLEAR_ADDRS
+#undef CLEAR_CELL
+}
+
+static void
+test_cfmt_is_destroy(void *arg)
+{
+ cell_t cell;
+ packed_cell_t packed;
+ circid_t circid = 0;
+ channel_t *chan;
+ (void)arg;
+
+ chan = tor_malloc_zero(sizeof(channel_t));
+
+ memset(&cell, 0xff, sizeof(cell));
+ cell.circ_id = 3003;
+ cell.command = CELL_RELAY;
+
+ cell_pack(&packed, &cell, 0);
+ chan->wide_circ_ids = 0;
+ tt_assert(! packed_cell_is_destroy(chan, &packed, &circid));
+ tt_int_op(circid, ==, 0);
+
+ cell_pack(&packed, &cell, 1);
+ chan->wide_circ_ids = 1;
+ tt_assert(! packed_cell_is_destroy(chan, &packed, &circid));
+ tt_int_op(circid, ==, 0);
+
+ cell.command = CELL_DESTROY;
+
+ cell_pack(&packed, &cell, 0);
+ chan->wide_circ_ids = 0;
+ tt_assert(packed_cell_is_destroy(chan, &packed, &circid));
+ tt_int_op(circid, ==, 3003);
+
+ circid = 0;
+ cell_pack(&packed, &cell, 1);
+ chan->wide_circ_ids = 1;
+ tt_assert(packed_cell_is_destroy(chan, &packed, &circid));
+
+ done:
+ tor_free(chan);
+}
+
+#define TEST(name, flags) \
+ { #name, test_cfmt_ ## name, flags, 0, NULL }
+
+struct testcase_t cell_format_tests[] = {
+ TEST(relay_header, 0),
+ TEST(begin_cells, 0),
+ TEST(connected_cells, 0),
+ TEST(create_cells, 0),
+ TEST(created_cells, 0),
+ TEST(extend_cells, 0),
+ TEST(extended_cells, 0),
+ TEST(resolved_cells, 0),
+ TEST(is_destroy, 0),
+ END_OF_TESTCASES
+};
+
diff --git a/src/test/test_cell_queue.c b/src/test/test_cell_queue.c
new file mode 100644
index 000000000..92629823e
--- /dev/null
+++ b/src/test/test_cell_queue.c
@@ -0,0 +1,158 @@
+/* Copyright (c) 2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#define CIRCUITLIST_PRIVATE
+#define RELAY_PRIVATE
+#include "or.h"
+#include "circuitlist.h"
+#include "relay.h"
+#include "test.h"
+
+static void
+test_cq_manip(void *arg)
+{
+ packed_cell_t *pc1=NULL, *pc2=NULL, *pc3=NULL, *pc4=NULL, *pc_tmp=NULL;
+ cell_queue_t cq;
+ cell_t cell;
+ (void) arg;
+
+#ifdef ENABLE_MEMPOOLS
+ init_cell_pool();
+#endif /* ENABLE_MEMPOOLS */
+
+ cell_queue_init(&cq);
+ tt_int_op(cq.n, ==, 0);
+
+ pc1 = packed_cell_new();
+ pc2 = packed_cell_new();
+ pc3 = packed_cell_new();
+ pc4 = packed_cell_new();
+ tt_assert(pc1 && pc2 && pc3 && pc4);
+
+ tt_ptr_op(NULL, ==, cell_queue_pop(&cq));
+
+ /* Add and remove a singleton. */
+ cell_queue_append(&cq, pc1);
+ tt_int_op(cq.n, ==, 1);
+ tt_ptr_op(pc1, ==, cell_queue_pop(&cq));
+ tt_int_op(cq.n, ==, 0);
+
+ /* Add and remove four items */
+ cell_queue_append(&cq, pc4);
+ cell_queue_append(&cq, pc3);
+ cell_queue_append(&cq, pc2);
+ cell_queue_append(&cq, pc1);
+ tt_int_op(cq.n, ==, 4);
+ tt_ptr_op(pc4, ==, cell_queue_pop(&cq));
+ tt_ptr_op(pc3, ==, cell_queue_pop(&cq));
+ tt_ptr_op(pc2, ==, cell_queue_pop(&cq));
+ tt_ptr_op(pc1, ==, cell_queue_pop(&cq));
+ tt_int_op(cq.n, ==, 0);
+ tt_ptr_op(NULL, ==, cell_queue_pop(&cq));
+
+ /* Try a packed copy (wide, then narrow, which is a bit of a cheat, since a
+ * real cell queue has only one type.) */
+ memset(&cell, 0, sizeof(cell));
+ cell.circ_id = 0x12345678;
+ cell.command = 10;
+ strlcpy((char*)cell.payload, "Lorax ipsum gruvvulus thneed amet, snergelly "
+ "once-ler lerkim, sed do barbaloot tempor gluppitus ut labore et "
+ "truffula magna aliqua.",
+ sizeof(cell.payload));
+ cell_queue_append_packed_copy(NULL /*circ*/, &cq, 0 /*exitward*/, &cell,
+ 1 /*wide*/, 0 /*stats*/);
+ cell.circ_id = 0x2013;
+ cell_queue_append_packed_copy(NULL /*circ*/, &cq, 0 /*exitward*/, &cell,
+ 0 /*wide*/, 0 /*stats*/);
+ tt_int_op(cq.n, ==, 2);
+
+ pc_tmp = cell_queue_pop(&cq);
+ tt_int_op(cq.n, ==, 1);
+ tt_ptr_op(pc_tmp, !=, NULL);
+ test_mem_op(pc_tmp->body, ==, "\x12\x34\x56\x78\x0a", 5);
+ test_mem_op(pc_tmp->body+5, ==, cell.payload, sizeof(cell.payload));
+ packed_cell_free(pc_tmp);
+
+ pc_tmp = cell_queue_pop(&cq);
+ tt_int_op(cq.n, ==, 0);
+ tt_ptr_op(pc_tmp, !=, NULL);
+ test_mem_op(pc_tmp->body, ==, "\x20\x13\x0a", 3);
+ test_mem_op(pc_tmp->body+3, ==, cell.payload, sizeof(cell.payload));
+ packed_cell_free(pc_tmp);
+ pc_tmp = NULL;
+
+ tt_ptr_op(NULL, ==, cell_queue_pop(&cq));
+
+ /* Now make sure cell_queue_clear works. */
+ cell_queue_append(&cq, pc2);
+ cell_queue_append(&cq, pc1);
+ tt_int_op(cq.n, ==, 2);
+ cell_queue_clear(&cq);
+ pc2 = pc1 = NULL; /* prevent double-free */
+ tt_int_op(cq.n, ==, 0);
+
+ done:
+ packed_cell_free(pc1);
+ packed_cell_free(pc2);
+ packed_cell_free(pc3);
+ packed_cell_free(pc4);
+ packed_cell_free(pc_tmp);
+
+ cell_queue_clear(&cq);
+
+#ifdef ENABLE_MEMPOOLS
+ free_cell_pool();
+#endif /* ENABLE_MEMPOOLS */
+}
+
+static void
+test_circuit_n_cells(void *arg)
+{
+ packed_cell_t *pc1=NULL, *pc2=NULL, *pc3=NULL, *pc4=NULL, *pc5=NULL;
+ origin_circuit_t *origin_c=NULL;
+ or_circuit_t *or_c=NULL;
+
+ (void)arg;
+
+#ifdef ENABLE_MEMPOOLS
+ init_cell_pool();
+#endif /* ENABLE_MEMPOOLS */
+
+ pc1 = packed_cell_new();
+ pc2 = packed_cell_new();
+ pc3 = packed_cell_new();
+ pc4 = packed_cell_new();
+ pc5 = packed_cell_new();
+ tt_assert(pc1 && pc2 && pc3 && pc4 && pc5);
+
+ or_c = or_circuit_new(0, NULL);
+ origin_c = origin_circuit_new();
+ origin_c->base_.purpose = CIRCUIT_PURPOSE_C_GENERAL;
+
+ tt_int_op(n_cells_in_circ_queues(TO_CIRCUIT(or_c)), ==, 0);
+ cell_queue_append(&or_c->p_chan_cells, pc1);
+ tt_int_op(n_cells_in_circ_queues(TO_CIRCUIT(or_c)), ==, 1);
+ cell_queue_append(&or_c->base_.n_chan_cells, pc2);
+ cell_queue_append(&or_c->base_.n_chan_cells, pc3);
+ tt_int_op(n_cells_in_circ_queues(TO_CIRCUIT(or_c)), ==, 3);
+
+ tt_int_op(n_cells_in_circ_queues(TO_CIRCUIT(origin_c)), ==, 0);
+ cell_queue_append(&origin_c->base_.n_chan_cells, pc4);
+ cell_queue_append(&origin_c->base_.n_chan_cells, pc5);
+ tt_int_op(n_cells_in_circ_queues(TO_CIRCUIT(origin_c)), ==, 2);
+
+ done:
+ circuit_free(TO_CIRCUIT(or_c));
+ circuit_free(TO_CIRCUIT(origin_c));
+
+#ifdef ENABLE_MEMPOOLS
+ free_cell_pool();
+#endif /* ENABLE_MEMPOOLS */
+}
+
+struct testcase_t cell_queue_tests[] = {
+ { "basic", test_cq_manip, TT_FORK, NULL, NULL, },
+ { "circ_n_cells", test_circuit_n_cells, TT_FORK, NULL, NULL },
+ END_OF_TESTCASES
+};
+
diff --git a/src/test/test_circuitlist.c b/src/test/test_circuitlist.c
new file mode 100644
index 000000000..b19edd1fd
--- /dev/null
+++ b/src/test/test_circuitlist.c
@@ -0,0 +1,342 @@
+/* Copyright (c) 2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#define TOR_CHANNEL_INTERNAL_
+#define CIRCUITBUILD_PRIVATE
+#define CIRCUITLIST_PRIVATE
+#include "or.h"
+#include "channel.h"
+#include "circuitbuild.h"
+#include "circuitlist.h"
+#include "test.h"
+
+static channel_t *
+new_fake_channel(void)
+{
+ channel_t *chan = tor_malloc_zero(sizeof(channel_t));
+ channel_init(chan);
+ return chan;
+}
+
+static struct {
+ int ncalls;
+ void *cmux;
+ void *circ;
+ cell_direction_t dir;
+} cam;
+
+static void
+circuitmux_attach_mock(circuitmux_t *cmux, circuit_t *circ,
+ cell_direction_t dir)
+{
+ ++cam.ncalls;
+ cam.cmux = cmux;
+ cam.circ = circ;
+ cam.dir = dir;
+}
+
+static struct {
+ int ncalls;
+ void *cmux;
+ void *circ;
+} cdm;
+
+static void
+circuitmux_detach_mock(circuitmux_t *cmux, circuit_t *circ)
+{
+ ++cdm.ncalls;
+ cdm.cmux = cmux;
+ cdm.circ = circ;
+}
+
+#define GOT_CMUX_ATTACH(mux_, circ_, dir_) do { \
+ tt_int_op(cam.ncalls, ==, 1); \
+ tt_ptr_op(cam.cmux, ==, (mux_)); \
+ tt_ptr_op(cam.circ, ==, (circ_)); \
+ tt_int_op(cam.dir, ==, (dir_)); \
+ memset(&cam, 0, sizeof(cam)); \
+ } while (0)
+
+#define GOT_CMUX_DETACH(mux_, circ_) do { \
+ tt_int_op(cdm.ncalls, ==, 1); \
+ tt_ptr_op(cdm.cmux, ==, (mux_)); \
+ tt_ptr_op(cdm.circ, ==, (circ_)); \
+ memset(&cdm, 0, sizeof(cdm)); \
+ } while (0)
+
+static void
+test_clist_maps(void *arg)
+{
+ channel_t *ch1 = new_fake_channel();
+ channel_t *ch2 = new_fake_channel();
+ channel_t *ch3 = new_fake_channel();
+ or_circuit_t *or_c1=NULL, *or_c2=NULL;
+
+ (void) arg;
+
+ MOCK(circuitmux_attach_circuit, circuitmux_attach_mock);
+ MOCK(circuitmux_detach_circuit, circuitmux_detach_mock);
+ memset(&cam, 0, sizeof(cam));
+ memset(&cdm, 0, sizeof(cdm));
+
+ ch1->cmux = (void*)0x1001;
+ ch2->cmux = (void*)0x1002;
+ ch3->cmux = (void*)0x1003;
+
+ or_c1 = or_circuit_new(100, ch2);
+ tt_assert(or_c1);
+ GOT_CMUX_ATTACH(ch2->cmux, or_c1, CELL_DIRECTION_IN);
+ tt_int_op(or_c1->p_circ_id, ==, 100);
+ tt_ptr_op(or_c1->p_chan, ==, ch2);
+
+ or_c2 = or_circuit_new(100, ch1);
+ tt_assert(or_c2);
+ GOT_CMUX_ATTACH(ch1->cmux, or_c2, CELL_DIRECTION_IN);
+ tt_int_op(or_c2->p_circ_id, ==, 100);
+ tt_ptr_op(or_c2->p_chan, ==, ch1);
+
+ circuit_set_n_circid_chan(TO_CIRCUIT(or_c1), 200, ch1);
+ GOT_CMUX_ATTACH(ch1->cmux, or_c1, CELL_DIRECTION_OUT);
+
+ circuit_set_n_circid_chan(TO_CIRCUIT(or_c2), 200, ch2);
+ GOT_CMUX_ATTACH(ch2->cmux, or_c2, CELL_DIRECTION_OUT);
+
+ tt_ptr_op(circuit_get_by_circid_channel(200, ch1), ==, TO_CIRCUIT(or_c1));
+ tt_ptr_op(circuit_get_by_circid_channel(200, ch2), ==, TO_CIRCUIT(or_c2));
+ tt_ptr_op(circuit_get_by_circid_channel(100, ch2), ==, TO_CIRCUIT(or_c1));
+ /* Try the same thing again, to test the "fast" path. */
+ tt_ptr_op(circuit_get_by_circid_channel(100, ch2), ==, TO_CIRCUIT(or_c1));
+ tt_assert(circuit_id_in_use_on_channel(100, ch2));
+ tt_assert(! circuit_id_in_use_on_channel(101, ch2));
+
+ /* Try changing the circuitid and channel of that circuit. */
+ circuit_set_p_circid_chan(or_c1, 500, ch3);
+ GOT_CMUX_DETACH(ch2->cmux, TO_CIRCUIT(or_c1));
+ GOT_CMUX_ATTACH(ch3->cmux, TO_CIRCUIT(or_c1), CELL_DIRECTION_IN);
+ tt_ptr_op(circuit_get_by_circid_channel(100, ch2), ==, NULL);
+ tt_assert(! circuit_id_in_use_on_channel(100, ch2));
+ tt_ptr_op(circuit_get_by_circid_channel(500, ch3), ==, TO_CIRCUIT(or_c1));
+
+ /* Now let's see about destroy handling. */
+ tt_assert(! circuit_id_in_use_on_channel(205, ch2));
+ tt_assert(circuit_id_in_use_on_channel(200, ch2));
+ channel_note_destroy_pending(ch2, 200);
+ channel_note_destroy_pending(ch2, 205);
+ channel_note_destroy_pending(ch1, 100);
+ tt_assert(circuit_id_in_use_on_channel(205, ch2))
+ tt_assert(circuit_id_in_use_on_channel(200, ch2));
+ tt_assert(circuit_id_in_use_on_channel(100, ch1));
+
+ tt_assert(TO_CIRCUIT(or_c2)->n_delete_pending != 0);
+ tt_ptr_op(circuit_get_by_circid_channel(200, ch2), ==, TO_CIRCUIT(or_c2));
+ tt_ptr_op(circuit_get_by_circid_channel(100, ch1), ==, TO_CIRCUIT(or_c2));
+
+ /* Okay, now free ch2 and make sure that the circuit ID is STILL not
+ * usable, because we haven't declared the destroy to be nonpending */
+ tt_int_op(cdm.ncalls, ==, 0);
+ circuit_free(TO_CIRCUIT(or_c2));
+ or_c2 = NULL; /* prevent free */
+ tt_int_op(cdm.ncalls, ==, 2);
+ memset(&cdm, 0, sizeof(cdm));
+ tt_assert(circuit_id_in_use_on_channel(200, ch2));
+ tt_assert(circuit_id_in_use_on_channel(100, ch1));
+ tt_ptr_op(circuit_get_by_circid_channel(200, ch2), ==, NULL);
+ tt_ptr_op(circuit_get_by_circid_channel(100, ch1), ==, NULL);
+
+ /* Now say that the destroy is nonpending */
+ channel_note_destroy_not_pending(ch2, 200);
+ tt_ptr_op(circuit_get_by_circid_channel(200, ch2), ==, NULL);
+ channel_note_destroy_not_pending(ch1, 100);
+ tt_ptr_op(circuit_get_by_circid_channel(100, ch1), ==, NULL);
+ tt_assert(! circuit_id_in_use_on_channel(200, ch2));
+ tt_assert(! circuit_id_in_use_on_channel(100, ch1));
+
+ done:
+ if (or_c1)
+ circuit_free(TO_CIRCUIT(or_c1));
+ if (or_c2)
+ circuit_free(TO_CIRCUIT(or_c2));
+ tor_free(ch1);
+ tor_free(ch2);
+ tor_free(ch3);
+ UNMOCK(circuitmux_attach_circuit);
+ UNMOCK(circuitmux_detach_circuit);
+}
+
+static void
+test_rend_token_maps(void *arg)
+{
+ or_circuit_t *c1, *c2, *c3, *c4;
+ const uint8_t tok1[REND_TOKEN_LEN] = "The cat can't tell y";
+ const uint8_t tok2[REND_TOKEN_LEN] = "ou its name, and it ";
+ const uint8_t tok3[REND_TOKEN_LEN] = "doesn't really care.";
+ /* -- Adapted from a quote by Fredrik Lundh. */
+
+ (void)arg;
+ (void)tok1; //xxxx
+ c1 = or_circuit_new(0, NULL);
+ c2 = or_circuit_new(0, NULL);
+ c3 = or_circuit_new(0, NULL);
+ c4 = or_circuit_new(0, NULL);
+
+ /* Make sure we really filled up the tok* variables */
+ tt_int_op(tok1[REND_TOKEN_LEN-1], ==, 'y');
+ tt_int_op(tok2[REND_TOKEN_LEN-1], ==, ' ');
+ tt_int_op(tok3[REND_TOKEN_LEN-1], ==, '.');
+
+ /* No maps; nothing there. */
+ tt_ptr_op(NULL, ==, circuit_get_rendezvous(tok1));
+ tt_ptr_op(NULL, ==, circuit_get_intro_point(tok1));
+
+ circuit_set_rendezvous_cookie(c1, tok1);
+ circuit_set_intro_point_digest(c2, tok2);
+
+ tt_ptr_op(NULL, ==, circuit_get_rendezvous(tok3));
+ tt_ptr_op(NULL, ==, circuit_get_intro_point(tok3));
+ tt_ptr_op(NULL, ==, circuit_get_rendezvous(tok2));
+ tt_ptr_op(NULL, ==, circuit_get_intro_point(tok1));
+
+ /* Without purpose set, we don't get the circuits */
+ tt_ptr_op(NULL, ==, circuit_get_rendezvous(tok1));
+ tt_ptr_op(NULL, ==, circuit_get_intro_point(tok2));
+
+ c1->base_.purpose = CIRCUIT_PURPOSE_REND_POINT_WAITING;
+ c2->base_.purpose = CIRCUIT_PURPOSE_INTRO_POINT;
+
+ /* Okay, make sure they show up now. */
+ tt_ptr_op(c1, ==, circuit_get_rendezvous(tok1));
+ tt_ptr_op(c2, ==, circuit_get_intro_point(tok2));
+
+ /* Two items at the same place with the same token. */
+ c3->base_.purpose = CIRCUIT_PURPOSE_REND_POINT_WAITING;
+ circuit_set_rendezvous_cookie(c3, tok2);
+ tt_ptr_op(c2, ==, circuit_get_intro_point(tok2));
+ tt_ptr_op(c3, ==, circuit_get_rendezvous(tok2));
+
+ /* Marking a circuit makes it not get returned any more */
+ circuit_mark_for_close(TO_CIRCUIT(c1), END_CIRC_REASON_FINISHED);
+ tt_ptr_op(NULL, ==, circuit_get_rendezvous(tok1));
+ circuit_free(TO_CIRCUIT(c1));
+ c1 = NULL;
+
+ /* Freeing a circuit makes it not get returned any more. */
+ circuit_free(TO_CIRCUIT(c2));
+ c2 = NULL;
+ tt_ptr_op(NULL, ==, circuit_get_intro_point(tok2));
+
+ /* c3 -- are you still there? */
+ tt_ptr_op(c3, ==, circuit_get_rendezvous(tok2));
+ /* Change its cookie. This never happens in Tor per se, but hey. */
+ c3->base_.purpose = CIRCUIT_PURPOSE_INTRO_POINT;
+ circuit_set_intro_point_digest(c3, tok3);
+
+ tt_ptr_op(NULL, ==, circuit_get_rendezvous(tok2));
+ tt_ptr_op(c3, ==, circuit_get_intro_point(tok3));
+
+ /* Now replace c3 with c4. */
+ c4->base_.purpose = CIRCUIT_PURPOSE_INTRO_POINT;
+ circuit_set_intro_point_digest(c4, tok3);
+
+ tt_ptr_op(c4, ==, circuit_get_intro_point(tok3));
+
+ tt_ptr_op(c3->rendinfo, ==, NULL);
+ tt_ptr_op(c4->rendinfo, !=, NULL);
+ test_mem_op(c4->rendinfo, ==, tok3, REND_TOKEN_LEN);
+
+ /* Now clear c4's cookie. */
+ circuit_set_intro_point_digest(c4, NULL);
+ tt_ptr_op(c4->rendinfo, ==, NULL);
+ tt_ptr_op(NULL, ==, circuit_get_intro_point(tok3));
+
+ done:
+ if (c1)
+ circuit_free(TO_CIRCUIT(c1));
+ if (c2)
+ circuit_free(TO_CIRCUIT(c2));
+ if (c3)
+ circuit_free(TO_CIRCUIT(c3));
+ if (c4)
+ circuit_free(TO_CIRCUIT(c4));
+}
+
+static void
+test_pick_circid(void *arg)
+{
+ bitarray_t *ba = NULL;
+ channel_t *chan1, *chan2;
+ circid_t circid;
+ int i;
+ (void) arg;
+
+ chan1 = tor_malloc_zero(sizeof(channel_t));
+ chan2 = tor_malloc_zero(sizeof(channel_t));
+ chan2->wide_circ_ids = 1;
+
+ chan1->circ_id_type = CIRC_ID_TYPE_NEITHER;
+ tt_int_op(0, ==, get_unique_circ_id_by_chan(chan1));
+
+ /* Basic tests, with no collisions */
+ chan1->circ_id_type = CIRC_ID_TYPE_LOWER;
+ for (i = 0; i < 50; ++i) {
+ circid = get_unique_circ_id_by_chan(chan1);
+ tt_uint_op(0, <, circid);
+ tt_uint_op(circid, <, (1<<15));
+ }
+ chan1->circ_id_type = CIRC_ID_TYPE_HIGHER;
+ for (i = 0; i < 50; ++i) {
+ circid = get_unique_circ_id_by_chan(chan1);
+ tt_uint_op((1<<15), <, circid);
+ tt_uint_op(circid, <, (1<<16));
+ }
+
+ chan2->circ_id_type = CIRC_ID_TYPE_LOWER;
+ for (i = 0; i < 50; ++i) {
+ circid = get_unique_circ_id_by_chan(chan2);
+ tt_uint_op(0, <, circid);
+ tt_uint_op(circid, <, (1u<<31));
+ }
+ chan2->circ_id_type = CIRC_ID_TYPE_HIGHER;
+ for (i = 0; i < 50; ++i) {
+ circid = get_unique_circ_id_by_chan(chan2);
+ tt_uint_op((1u<<31), <, circid);
+ }
+
+ /* Now make sure that we can behave well when we are full up on circuits */
+ chan1->circ_id_type = CIRC_ID_TYPE_LOWER;
+ chan2->circ_id_type = CIRC_ID_TYPE_LOWER;
+ chan1->wide_circ_ids = chan2->wide_circ_ids = 0;
+ ba = bitarray_init_zero((1<<15));
+ for (i = 0; i < (1<<15); ++i) {
+ circid = get_unique_circ_id_by_chan(chan1);
+ if (circid == 0) {
+ tt_int_op(i, >, (1<<14));
+ break;
+ }
+ tt_uint_op(circid, <, (1<<15));
+ tt_assert(! bitarray_is_set(ba, circid));
+ bitarray_set(ba, circid);
+ channel_mark_circid_unusable(chan1, circid);
+ }
+ tt_int_op(i, <, (1<<15));
+ /* Make sure that being full on chan1 does not interfere with chan2 */
+ for (i = 0; i < 100; ++i) {
+ circid = get_unique_circ_id_by_chan(chan2);
+ tt_uint_op(circid, >, 0);
+ tt_uint_op(circid, <, (1<<15));
+ channel_mark_circid_unusable(chan2, circid);
+ }
+
+ done:
+ tor_free(chan1);
+ tor_free(chan2);
+ bitarray_free(ba);
+ circuit_free_all();
+}
+
+struct testcase_t circuitlist_tests[] = {
+ { "maps", test_clist_maps, TT_FORK, NULL, NULL },
+ { "rend_token_maps", test_rend_token_maps, TT_FORK, NULL, NULL },
+ { "pick_circid", test_pick_circid, TT_FORK, NULL, NULL },
+ END_OF_TESTCASES
+};
+
diff --git a/src/test/test_circuitmux.c b/src/test/test_circuitmux.c
new file mode 100644
index 000000000..b9c0436eb
--- /dev/null
+++ b/src/test/test_circuitmux.c
@@ -0,0 +1,88 @@
+/* Copyright (c) 2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#define TOR_CHANNEL_INTERNAL_
+#define CIRCUITMUX_PRIVATE
+#define RELAY_PRIVATE
+#include "or.h"
+#include "channel.h"
+#include "circuitmux.h"
+#include "relay.h"
+#include "test.h"
+
+/* XXXX duplicated function from test_circuitlist.c */
+static channel_t *
+new_fake_channel(void)
+{
+ channel_t *chan = tor_malloc_zero(sizeof(channel_t));
+ channel_init(chan);
+ return chan;
+}
+
+static int
+has_queued_writes(channel_t *c)
+{
+ (void) c;
+ return 1;
+}
+
+/** Test destroy cell queue with no interference from other queues. */
+static void
+test_cmux_destroy_cell_queue(void *arg)
+{
+ circuitmux_t *cmux = NULL;
+ channel_t *ch = NULL;
+ circuit_t *circ = NULL;
+ cell_queue_t *cq = NULL;
+ packed_cell_t *pc = NULL;
+
+#ifdef ENABLE_MEMPOOLS
+ init_cell_pool();
+#endif /* ENABLE_MEMPOOLS */
+ (void) arg;
+
+ cmux = circuitmux_alloc();
+ tt_assert(cmux);
+ ch = new_fake_channel();
+ ch->has_queued_writes = has_queued_writes;
+ ch->wide_circ_ids = 1;
+
+ circ = circuitmux_get_first_active_circuit(cmux, &cq);
+ tt_assert(!circ);
+ tt_assert(!cq);
+
+ circuitmux_append_destroy_cell(ch, cmux, 100, 10);
+ circuitmux_append_destroy_cell(ch, cmux, 190, 6);
+ circuitmux_append_destroy_cell(ch, cmux, 30, 1);
+
+ tt_int_op(circuitmux_num_cells(cmux), ==, 3);
+
+ circ = circuitmux_get_first_active_circuit(cmux, &cq);
+ tt_assert(!circ);
+ tt_assert(cq);
+
+ tt_int_op(cq->n, ==, 3);
+
+ pc = cell_queue_pop(cq);
+ tt_assert(pc);
+ test_mem_op(pc->body, ==, "\x00\x00\x00\x64\x04\x0a\x00\x00\x00", 9);
+ packed_cell_free(pc);
+ pc = NULL;
+
+ tt_int_op(circuitmux_num_cells(cmux), ==, 2);
+
+ done:
+ circuitmux_free(cmux);
+ channel_free(ch);
+ packed_cell_free(pc);
+
+#ifdef ENABLE_MEMPOOLS
+ free_cell_pool();
+#endif /* ENABLE_MEMPOOLS */
+}
+
+struct testcase_t circuitmux_tests[] = {
+ { "destroy_cell_queue", test_cmux_destroy_cell_queue, TT_FORK, NULL, NULL },
+ END_OF_TESTCASES
+};
+
diff --git a/src/test/test_cmdline_args.py b/src/test/test_cmdline_args.py
new file mode 100755
index 000000000..55d1cdb80
--- /dev/null
+++ b/src/test/test_cmdline_args.py
@@ -0,0 +1,292 @@
+#!/usr/bin/python
+
+import binascii
+import hashlib
+import os
+import re
+import shutil
+import subprocess
+import sys
+import tempfile
+import unittest
+
+TOR = "./src/or/tor"
+TOP_SRCDIR = "."
+
+if len(sys.argv) > 1:
+ TOR = sys.argv[1]
+ del sys.argv[1]
+
+if len(sys.argv) > 1:
+ TOP_SRCDIR = sys.argv[1]
+ del sys.argv[1]
+
+class UnexpectedSuccess(Exception):
+ pass
+
+class UnexpectedFailure(Exception):
+ pass
+
+if sys.version < '3':
+ def b2s(b):
+ return b
+ def s2b(s):
+ return s
+ def NamedTemporaryFile():
+ return tempfile.NamedTemporaryFile(delete=False)
+else:
+ def b2s(b):
+ return str(b, 'ascii')
+ def s2b(s):
+ return s.encode('ascii')
+ def NamedTemporaryFile():
+ return tempfile.NamedTemporaryFile(mode="w",delete=False,encoding="ascii")
+
+def contents(fn):
+ f = open(fn)
+ try:
+ return f.read()
+ finally:
+ f.close()
+
+def run_tor(args, failure=False):
+ p = subprocess.Popen([TOR] + args, stdout=subprocess.PIPE)
+ output, _ = p.communicate()
+ result = p.poll()
+ if result and not failure:
+ raise UnexpectedFailure()
+ elif not result and failure:
+ raise UnexpectedSuccess()
+ return b2s(output)
+
+def spaceify_fp(fp):
+ for i in range(0, len(fp), 4):
+ yield fp[i:i+4]
+
+def lines(s):
+ out = s.split("\n")
+ if out and out[-1] == '':
+ del out[-1]
+ return out
+
+def strip_log_junk(line):
+ m = re.match(r'([^\[]+\[[a-z]*\] *)(.*)', line)
+ if not m:
+ return ""+line
+ return m.group(2).strip()
+
+def randstring(entropy_bytes):
+ s = os.urandom(entropy_bytes)
+ return b2s(binascii.b2a_hex(s))
+
+def findLineContaining(lines, s):
+ for ln in lines:
+ if s in ln:
+ return True
+ return False
+
+class CmdlineTests(unittest.TestCase):
+
+ def test_version(self):
+ out = run_tor(["--version"])
+ self.assertTrue(out.startswith("Tor version "))
+ self.assertEqual(len(lines(out)), 1)
+
+ def test_quiet(self):
+ out = run_tor(["--quiet", "--quumblebluffin", "1"], failure=True)
+ self.assertEqual(out, "")
+
+ def test_help(self):
+ out = run_tor(["--help"], failure=False)
+ out2 = run_tor(["-h"], failure=False)
+ self.assertTrue(out.startswith("Copyright (c) 2001"))
+ self.assertTrue(out.endswith(
+ "tor -f <torrc> [args]\n"
+ "See man page for options, or https://www.torproject.org/ for documentation.\n"))
+ self.assertTrue(out == out2)
+
+ def test_hush(self):
+ torrc = NamedTemporaryFile()
+ torrc.close()
+ try:
+ out = run_tor(["--hush", "-f", torrc.name,
+ "--quumblebluffin", "1"], failure=True)
+ finally:
+ os.unlink(torrc.name)
+ self.assertEqual(len(lines(out)), 2)
+ ln = [ strip_log_junk(l) for l in lines(out) ]
+ self.assertEqual(ln[0], "Failed to parse/validate config: Unknown option 'quumblebluffin'. Failing.")
+ self.assertEqual(ln[1], "Reading config failed--see warnings above.")
+
+ def test_missing_argument(self):
+ out = run_tor(["--hush", "--hash-password"], failure=True)
+ self.assertEqual(len(lines(out)), 2)
+ ln = [ strip_log_junk(l) for l in lines(out) ]
+ self.assertEqual(ln[0], "Command-line option '--hash-password' with no value. Failing.")
+
+ def test_hash_password(self):
+ out = run_tor(["--hash-password", "woodwose"])
+ result = lines(out)[-1]
+ self.assertEqual(result[:3], "16:")
+ self.assertEqual(len(result), 61)
+ r = binascii.a2b_hex(result[3:])
+ self.assertEqual(len(r), 29)
+
+ salt, how, hashed = r[:8], r[8], r[9:]
+ self.assertEqual(len(hashed), 20)
+ if type(how) == type("A"):
+ how = ord(how)
+
+ count = (16 + (how & 15)) << ((how >> 4) + 6)
+ stuff = salt + s2b("woodwose")
+ repetitions = count // len(stuff) + 1
+ inp = stuff * repetitions
+ inp = inp[:count]
+
+ self.assertEqual(hashlib.sha1(inp).digest(), hashed)
+
+ def test_digests(self):
+ main_c = os.path.join(TOP_SRCDIR, "src", "or", "main.c")
+
+ if os.stat(TOR).st_mtime < os.stat(main_c).st_mtime:
+ self.skipTest(TOR+" not up to date")
+ out = run_tor(["--digests"])
+ main_line = [ l for l in lines(out) if l.endswith("/main.c") ]
+ digest, name = main_line[0].split()
+ f = open(main_c, 'rb')
+ actual = hashlib.sha1(f.read()).hexdigest()
+ f.close()
+ self.assertEqual(digest, actual)
+
+ def test_dump_options(self):
+ default_torrc = NamedTemporaryFile()
+ torrc = NamedTemporaryFile()
+ torrc.write("SocksPort 9999")
+ torrc.close()
+ default_torrc.write("SafeLogging 0")
+ default_torrc.close()
+ out_sh = out_nb = out_fl = None
+ opts = [ "-f", torrc.name,
+ "--defaults-torrc", default_torrc.name ]
+ try:
+ out_sh = run_tor(["--dump-config", "short"]+opts)
+ out_nb = run_tor(["--dump-config", "non-builtin"]+opts)
+ out_fl = run_tor(["--dump-config", "full"]+opts)
+ out_nr = run_tor(["--dump-config", "bliznert"]+opts,
+ failure=True)
+
+ out_verif = run_tor(["--verify-config"]+opts)
+ finally:
+ os.unlink(torrc.name)
+ os.unlink(default_torrc.name)
+
+ self.assertEqual(len(lines(out_sh)), 2)
+ self.assertTrue(lines(out_sh)[0].startswith("DataDirectory "))
+ self.assertEqual(lines(out_sh)[1:],
+ [ "SocksPort 9999" ])
+
+ self.assertEqual(len(lines(out_nb)), 2)
+ self.assertEqual(lines(out_nb),
+ [ "SafeLogging 0",
+ "SocksPort 9999" ])
+
+ out_fl = lines(out_fl)
+ self.assertTrue(len(out_fl) > 100)
+ self.assertTrue("SocksPort 9999" in out_fl)
+ self.assertTrue("SafeLogging 0" in out_fl)
+ self.assertTrue("ClientOnly 0" in out_fl)
+
+ self.assertTrue(out_verif.endswith("Configuration was valid\n"))
+
+ def test_list_fingerprint(self):
+ tmpdir = tempfile.mkdtemp(prefix='ttca_')
+ torrc = NamedTemporaryFile()
+ torrc.write("ORPort 9999\n")
+ torrc.write("DataDirectory %s\n"%tmpdir)
+ torrc.write("Nickname tippi")
+ torrc.close()
+ opts = ["-f", torrc.name]
+ try:
+ out = run_tor(["--list-fingerprint"]+opts)
+ fp = contents(os.path.join(tmpdir, "fingerprint"))
+ finally:
+ os.unlink(torrc.name)
+ shutil.rmtree(tmpdir)
+
+ out = lines(out)
+ lastlog = strip_log_junk(out[-2])
+ lastline = out[-1]
+ fp = fp.strip()
+ nn_fp = fp.split()[0]
+ space_fp = " ".join(spaceify_fp(fp.split()[1]))
+ self.assertEqual(lastlog,
+ "Your Tor server's identity key fingerprint is '%s'"%fp)
+ self.assertEqual(lastline, "tippi %s"%space_fp)
+ self.assertEqual(nn_fp, "tippi")
+
+ def test_list_options(self):
+ out = lines(run_tor(["--list-torrc-options"]))
+ self.assertTrue(len(out)>100)
+ self.assertTrue(out[0] <= 'AccountingMax')
+ self.assertTrue("UseBridges" in out)
+ self.assertTrue("SocksPort" in out)
+
+ def test_cmdline_args(self):
+ default_torrc = NamedTemporaryFile()
+ torrc = NamedTemporaryFile()
+ torrc.write("SocksPort 9999\n")
+ torrc.write("SocksPort 9998\n")
+ torrc.write("ORPort 9000\n")
+ torrc.write("ORPort 9001\n")
+ torrc.write("Nickname eleventeen\n")
+ torrc.write("ControlPort 9500\n")
+ torrc.close()
+ default_torrc.write("")
+ default_torrc.close()
+ out_sh = out_nb = out_fl = None
+ opts = [ "-f", torrc.name,
+ "--defaults-torrc", default_torrc.name,
+ "--dump-config", "short" ]
+ try:
+ out_1 = run_tor(opts)
+ out_2 = run_tor(opts+["+ORPort", "9003",
+ "SocksPort", "9090",
+ "/ControlPort",
+ "/TransPort",
+ "+ExtORPort", "9005"])
+ finally:
+ os.unlink(torrc.name)
+ os.unlink(default_torrc.name)
+
+ out_1 = [ l for l in lines(out_1) if not l.startswith("DataDir") ]
+ out_2 = [ l for l in lines(out_2) if not l.startswith("DataDir") ]
+
+ self.assertEqual(out_1,
+ ["ControlPort 9500",
+ "Nickname eleventeen",
+ "ORPort 9000",
+ "ORPort 9001",
+ "SocksPort 9999",
+ "SocksPort 9998"])
+ self.assertEqual(out_2,
+ ["ExtORPort 9005",
+ "Nickname eleventeen",
+ "ORPort 9000",
+ "ORPort 9001",
+ "ORPort 9003",
+ "SocksPort 9090"])
+
+ def test_missing_torrc(self):
+ fname = "nonexistent_file_"+randstring(8)
+ out = run_tor(["-f", fname, "--verify-config"], failure=True)
+ ln = [ strip_log_junk(l) for l in lines(out) ]
+ self.assertTrue("Unable to open configuration file" in ln[-2])
+ self.assertTrue("Reading config failed" in ln[-1])
+
+ out = run_tor(["-f", fname, "--verify-config", "--ignore-missing-torrc"])
+ ln = [ strip_log_junk(l) for l in lines(out) ]
+ self.assertTrue(findLineContaining(ln, ", using reasonable defaults"))
+ self.assertTrue("Configuration was valid" in ln[-1])
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/src/test/test_config.c b/src/test/test_config.c
index ff251a24d..94ac4dca1 100644
--- a/src/test/test_config.c
+++ b/src/test/test_config.c
@@ -1,13 +1,19 @@
/* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#include "orconfig.h"
+
+#define CONFIG_PRIVATE
#include "or.h"
+#include "addressmap.h"
#include "config.h"
+#include "confparse.h"
#include "connection_edge.h"
#include "test.h"
+#include "util.h"
+#include "address.h"
static void
test_config_addressmap(void *arg)
@@ -40,6 +46,11 @@ test_config_addressmap(void *arg)
config_get_lines(buf, &(get_options_mutable()->AddressMap), 0);
config_register_addressmaps(get_options());
+/* Use old interface for now, so we don't need to rewrite the unit tests */
+#define addressmap_rewrite(a,s,eo,ao) \
+ addressmap_rewrite((a),(s),AMR_FLAG_USE_IPV4_DNS|AMR_FLAG_USE_IPV6_DNS, \
+ (eo),(ao))
+
/* MapAddress .invalidwildcard.com .torserver.exit - no match */
strlcpy(address, "www.invalidwildcard.com", sizeof(address));
test_assert(!addressmap_rewrite(address, sizeof(address), &expires, NULL));
@@ -113,6 +124,7 @@ test_config_addressmap(void *arg)
test_assert(!addressmap_rewrite(address, sizeof(address), &expires, NULL));
/* Test top-level-domain matching a bit harder */
+ config_free_lines(get_options_mutable()->AddressMap);
addressmap_clear_configured();
strlcpy(buf, "MapAddress *.com *.torserver.exit\n"
"MapAddress *.torproject.org 1.1.1.1\n"
@@ -142,6 +154,7 @@ test_config_addressmap(void *arg)
test_streq(address, "2.2.2.2");
/* We don't support '*' as a mapping directive */
+ config_free_lines(get_options_mutable()->AddressMap);
addressmap_clear_configured();
strlcpy(buf, "MapAddress * *.torserver.exit\n", sizeof(buf));
config_get_lines(buf, &(get_options_mutable()->AddressMap), 0);
@@ -156,8 +169,424 @@ test_config_addressmap(void *arg)
strlcpy(address, "www.torproject.org", sizeof(address));
test_assert(!addressmap_rewrite(address, sizeof(address), &expires, NULL));
+#undef addressmap_rewrite
+
+ done:
+ config_free_lines(get_options_mutable()->AddressMap);
+ get_options_mutable()->AddressMap = NULL;
+}
+
+static int
+is_private_dir(const char* path)
+{
+ struct stat st;
+ int r = stat(path, &st);
+ if (r) {
+ return 0;
+ }
+#if !defined (_WIN32) || defined (WINCE)
+ if ((st.st_mode & (S_IFDIR | 0777)) != (S_IFDIR | 0700)) {
+ return 0;
+ }
+#endif
+ return 1;
+}
+
+static void
+test_config_check_or_create_data_subdir(void *arg)
+{
+ or_options_t *options = get_options_mutable();
+ char *datadir;
+ const char *subdir = "test_stats";
+ char *subpath;
+ struct stat st;
+ int r;
+#if !defined (_WIN32) || defined (WINCE)
+ unsigned group_permission;
+#endif
+ (void)arg;
+
+ tor_free(options->DataDirectory);
+ datadir = options->DataDirectory = tor_strdup(get_fname("datadir-0"));
+ subpath = get_datadir_fname(subdir);
+
+#if defined (_WIN32) && !defined (WINCE)
+ tt_int_op(mkdir(options->DataDirectory), ==, 0);
+#else
+ tt_int_op(mkdir(options->DataDirectory, 0700), ==, 0);
+#endif
+
+ r = stat(subpath, &st);
+
+ // The subdirectory shouldn't exist yet,
+ // but should be created by the call to check_or_create_data_subdir.
+ test_assert(r && (errno == ENOENT));
+ test_assert(!check_or_create_data_subdir(subdir));
+ test_assert(is_private_dir(subpath));
+
+ // The check should return 0, if the directory already exists
+ // and is private to the user.
+ test_assert(!check_or_create_data_subdir(subdir));
+
+ r = stat(subpath, &st);
+ if (r) {
+ tt_abort_perror("stat");
+ }
+
+#if !defined (_WIN32) || defined (WINCE)
+ group_permission = st.st_mode | 0070;
+ r = chmod(subpath, group_permission);
+
+ if (r) {
+ tt_abort_perror("chmod");
+ }
+
+ // If the directory exists, but its mode is too permissive
+ // a call to check_or_create_data_subdir should reset the mode.
+ test_assert(!is_private_dir(subpath));
+ test_assert(!check_or_create_data_subdir(subdir));
+ test_assert(is_private_dir(subpath));
+#endif
+
+ done:
+ rmdir(subpath);
+ tor_free(datadir);
+ tor_free(subpath);
+}
+
+static void
+test_config_write_to_data_subdir(void *arg)
+{
+ or_options_t* options = get_options_mutable();
+ char *datadir;
+ char *cp = NULL;
+ const char* subdir = "test_stats";
+ const char* fname = "test_file";
+ const char* str =
+ "Lorem ipsum dolor sit amet, consetetur sadipscing\n"
+ "elitr, sed diam nonumy eirmod\n"
+ "tempor invidunt ut labore et dolore magna aliquyam\n"
+ "erat, sed diam voluptua.\n"
+ "At vero eos et accusam et justo duo dolores et ea\n"
+ "rebum. Stet clita kasd gubergren,\n"
+ "no sea takimata sanctus est Lorem ipsum dolor sit amet.\n"
+ "Lorem ipsum dolor sit amet,\n"
+ "consetetur sadipscing elitr, sed diam nonumy eirmod\n"
+ "tempor invidunt ut labore et dolore\n"
+ "magna aliquyam erat, sed diam voluptua. At vero eos et\n"
+ "accusam et justo duo dolores et\n"
+ "ea rebum. Stet clita kasd gubergren, no sea takimata\n"
+ "sanctus est Lorem ipsum dolor sit amet.";
+ char* filepath = NULL;
+ (void)arg;
+
+ tor_free(options->DataDirectory);
+ datadir = options->DataDirectory = tor_strdup(get_fname("datadir-1"));
+ filepath = get_datadir_fname2(subdir, fname);
+
+#if defined (_WIN32) && !defined (WINCE)
+ tt_int_op(mkdir(options->DataDirectory), ==, 0);
+#else
+ tt_int_op(mkdir(options->DataDirectory, 0700), ==, 0);
+#endif
+
+ // Write attempt shoudl fail, if subdirectory doesn't exist.
+ test_assert(write_to_data_subdir(subdir, fname, str, NULL));
+ test_assert(! check_or_create_data_subdir(subdir));
+
+ // Content of file after write attempt should be
+ // equal to the original string.
+ test_assert(!write_to_data_subdir(subdir, fname, str, NULL));
+ cp = read_file_to_str(filepath, 0, NULL);
+ test_streq(cp, str);
+ tor_free(cp);
+
+ // A second write operation should overwrite the old content.
+ test_assert(!write_to_data_subdir(subdir, fname, str, NULL));
+ cp = read_file_to_str(filepath, 0, NULL);
+ test_streq(cp, str);
+ tor_free(cp);
+
done:
- ;
+ (void) unlink(filepath);
+ rmdir(options->DataDirectory);
+ tor_free(datadir);
+ tor_free(filepath);
+ tor_free(cp);
+}
+
+/* Test helper function: Make sure that a bridge line gets parsed
+ * properly. Also make sure that the resulting bridge_line_t structure
+ * has its fields set correctly. */
+static void
+good_bridge_line_test(const char *string, const char *test_addrport,
+ const char *test_digest, const char *test_transport,
+ const smartlist_t *test_socks_args)
+{
+ char *tmp = NULL;
+ bridge_line_t *bridge_line = parse_bridge_line(string);
+ test_assert(bridge_line);
+
+ /* test addrport */
+ tmp = tor_strdup(fmt_addrport(&bridge_line->addr, bridge_line->port));
+ test_streq(test_addrport, tmp);
+ tor_free(tmp);
+
+ /* If we were asked to validate a digest, but we did not get a
+ digest after parsing, we failed. */
+ if (test_digest && tor_digest_is_zero(bridge_line->digest))
+ test_assert(0);
+
+ /* If we were not asked to validate a digest, and we got a digest
+ after parsing, we failed again. */
+ if (!test_digest && !tor_digest_is_zero(bridge_line->digest))
+ test_assert(0);
+
+ /* If we were asked to validate a digest, and we got a digest after
+ parsing, make sure it's correct. */
+ if (test_digest) {
+ tmp = tor_strdup(hex_str(bridge_line->digest, DIGEST_LEN));
+ tor_strlower(tmp);
+ test_streq(test_digest, tmp);
+ tor_free(tmp);
+ }
+
+ /* If we were asked to validate a transport name, make sure tha it
+ matches with the transport name that was parsed. */
+ if (test_transport && !bridge_line->transport_name)
+ test_assert(0);
+ if (!test_transport && bridge_line->transport_name)
+ test_assert(0);
+ if (test_transport)
+ test_streq(test_transport, bridge_line->transport_name);
+
+ /* Validate the SOCKS argument smartlist. */
+ if (test_socks_args && !bridge_line->socks_args)
+ test_assert(0);
+ if (!test_socks_args && bridge_line->socks_args)
+ test_assert(0);
+ if (test_socks_args)
+ test_assert(smartlist_strings_eq(test_socks_args,
+ bridge_line->socks_args));
+
+ done:
+ tor_free(tmp);
+ bridge_line_free(bridge_line);
+}
+
+/* Test helper function: Make sure that a bridge line is
+ * unparseable. */
+static void
+bad_bridge_line_test(const char *string)
+{
+ bridge_line_t *bridge_line = parse_bridge_line(string);
+ if (bridge_line)
+ TT_FAIL(("%s was supposed to fail, but it didn't.", string));
+ test_assert(!bridge_line);
+
+ done:
+ bridge_line_free(bridge_line);
+}
+
+static void
+test_config_parse_bridge_line(void *arg)
+{
+ (void) arg;
+ good_bridge_line_test("192.0.2.1:4123",
+ "192.0.2.1:4123", NULL, NULL, NULL);
+
+ good_bridge_line_test("192.0.2.1",
+ "192.0.2.1:443", NULL, NULL, NULL);
+
+ good_bridge_line_test("transport [::1]",
+ "[::1]:443", NULL, "transport", NULL);
+
+ good_bridge_line_test("transport 192.0.2.1:12 "
+ "4352e58420e68f5e40bf7c74faddccd9d1349413",
+ "192.0.2.1:12",
+ "4352e58420e68f5e40bf7c74faddccd9d1349413",
+ "transport", NULL);
+
+ {
+ smartlist_t *sl_tmp = smartlist_new();
+ smartlist_add_asprintf(sl_tmp, "twoandtwo=five");
+
+ good_bridge_line_test("transport 192.0.2.1:12 "
+ "4352e58420e68f5e40bf7c74faddccd9d1349413 twoandtwo=five",
+ "192.0.2.1:12", "4352e58420e68f5e40bf7c74faddccd9d1349413",
+ "transport", sl_tmp);
+
+ SMARTLIST_FOREACH(sl_tmp, char *, s, tor_free(s));
+ smartlist_free(sl_tmp);
+ }
+
+ {
+ smartlist_t *sl_tmp = smartlist_new();
+ smartlist_add_asprintf(sl_tmp, "twoandtwo=five");
+ smartlist_add_asprintf(sl_tmp, "z=z");
+
+ good_bridge_line_test("transport 192.0.2.1:12 twoandtwo=five z=z",
+ "192.0.2.1:12", NULL, "transport", sl_tmp);
+
+ SMARTLIST_FOREACH(sl_tmp, char *, s, tor_free(s));
+ smartlist_free(sl_tmp);
+ }
+
+ {
+ smartlist_t *sl_tmp = smartlist_new();
+ smartlist_add_asprintf(sl_tmp, "dub=come");
+ smartlist_add_asprintf(sl_tmp, "save=me");
+
+ good_bridge_line_test("transport 192.0.2.1:12 "
+ "4352e58420e68f5e40bf7c74faddccd9d1349666 "
+ "dub=come save=me",
+
+ "192.0.2.1:12",
+ "4352e58420e68f5e40bf7c74faddccd9d1349666",
+ "transport", sl_tmp);
+
+ SMARTLIST_FOREACH(sl_tmp, char *, s, tor_free(s));
+ smartlist_free(sl_tmp);
+ }
+
+ good_bridge_line_test("192.0.2.1:1231 "
+ "4352e58420e68f5e40bf7c74faddccd9d1349413",
+ "192.0.2.1:1231",
+ "4352e58420e68f5e40bf7c74faddccd9d1349413",
+ NULL, NULL);
+
+ /* Empty line */
+ bad_bridge_line_test("");
+ /* bad transport name */
+ bad_bridge_line_test("tr$n_sp0r7 190.20.2.2");
+ /* weird ip address */
+ bad_bridge_line_test("a.b.c.d");
+ /* invalid fpr */
+ bad_bridge_line_test("2.2.2.2:1231 4352e58420e68f5e40bf7c74faddccd9d1349");
+ /* no k=v in the end */
+ bad_bridge_line_test("obfs2 2.2.2.2:1231 "
+ "4352e58420e68f5e40bf7c74faddccd9d1349413 what");
+ /* no addrport */
+ bad_bridge_line_test("asdw");
+ /* huge k=v value that can't fit in SOCKS fields */
+ bad_bridge_line_test(
+ "obfs2 2.2.2.2:1231 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aa=b");
+}
+
+static void
+test_config_parse_transport_options_line(void *arg)
+{
+ smartlist_t *options_sl = NULL, *sl_tmp = NULL;
+
+ (void) arg;
+
+ { /* too small line */
+ options_sl = get_options_from_transport_options_line("valley", NULL);
+ test_assert(!options_sl);
+ }
+
+ { /* no k=v values */
+ options_sl = get_options_from_transport_options_line("hit it!", NULL);
+ test_assert(!options_sl);
+ }
+
+ { /* correct line, but wrong transport specified */
+ options_sl =
+ get_options_from_transport_options_line("trebuchet k=v", "rook");
+ test_assert(!options_sl);
+ }
+
+ { /* correct -- no transport specified */
+ sl_tmp = smartlist_new();
+ smartlist_add_asprintf(sl_tmp, "ladi=dadi");
+ smartlist_add_asprintf(sl_tmp, "weliketo=party");
+
+ options_sl =
+ get_options_from_transport_options_line("rook ladi=dadi weliketo=party",
+ NULL);
+ test_assert(options_sl);
+ test_assert(smartlist_strings_eq(options_sl, sl_tmp));
+
+ SMARTLIST_FOREACH(sl_tmp, char *, s, tor_free(s));
+ smartlist_free(sl_tmp);
+ sl_tmp = NULL;
+ SMARTLIST_FOREACH(options_sl, char *, s, tor_free(s));
+ smartlist_free(options_sl);
+ options_sl = NULL;
+ }
+
+ { /* correct -- correct transport specified */
+ sl_tmp = smartlist_new();
+ smartlist_add_asprintf(sl_tmp, "ladi=dadi");
+ smartlist_add_asprintf(sl_tmp, "weliketo=party");
+
+ options_sl =
+ get_options_from_transport_options_line("rook ladi=dadi weliketo=party",
+ "rook");
+ test_assert(options_sl);
+ test_assert(smartlist_strings_eq(options_sl, sl_tmp));
+ SMARTLIST_FOREACH(sl_tmp, char *, s, tor_free(s));
+ smartlist_free(sl_tmp);
+ sl_tmp = NULL;
+ SMARTLIST_FOREACH(options_sl, char *, s, tor_free(s));
+ smartlist_free(options_sl);
+ options_sl = NULL;
+ }
+
+ done:
+ if (options_sl) {
+ SMARTLIST_FOREACH(options_sl, char *, s, tor_free(s));
+ smartlist_free(options_sl);
+ }
+ if (sl_tmp) {
+ SMARTLIST_FOREACH(sl_tmp, char *, s, tor_free(s));
+ smartlist_free(sl_tmp);
+ }
+}
+
+// Tests if an options with MyFamily fingerprints missing '$' normalises
+// them correctly and also ensure it also works with multiple fingerprints
+static void
+test_config_fix_my_family(void *arg)
+{
+ char *err = NULL;
+ const char *family = "$1111111111111111111111111111111111111111, "
+ "1111111111111111111111111111111111111112, "
+ "$1111111111111111111111111111111111111113";
+
+ or_options_t* options = options_new();
+ or_options_t* defaults = options_new();
+ (void) arg;
+
+ options_init(options);
+ options_init(defaults);
+ options->MyFamily = tor_strdup(family);
+
+ options_validate(NULL, options, defaults, 0, &err) ;
+
+ if (err != NULL) {
+ TT_FAIL(("options_validate failed: %s", err));
+ }
+
+ test_streq(options->MyFamily, "$1111111111111111111111111111111111111111, "
+ "$1111111111111111111111111111111111111112, "
+ "$1111111111111111111111111111111111111113");
+
+ done:
+ if (err != NULL) {
+ tor_free(err);
+ }
+
+ or_options_free(options);
+ or_options_free(defaults);
}
#define CONFIG_TEST(name, flags) \
@@ -165,6 +594,11 @@ test_config_addressmap(void *arg)
struct testcase_t config_tests[] = {
CONFIG_TEST(addressmap, 0),
+ CONFIG_TEST(parse_bridge_line, 0),
+ CONFIG_TEST(parse_transport_options_line, 0),
+ CONFIG_TEST(check_or_create_data_subdir, TT_FORK),
+ CONFIG_TEST(write_to_data_subdir, TT_FORK),
+ CONFIG_TEST(fix_my_family, 0),
END_OF_TESTCASES
};
diff --git a/src/test/test_containers.c b/src/test/test_containers.c
index 45898df4e..067c4c190 100644
--- a/src/test/test_containers.c
+++ b/src/test/test_containers.c
@@ -1,16 +1,17 @@
/* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#include "orconfig.h"
#include "or.h"
+#include "fp_pair.h"
#include "test.h"
/** Helper: return a tristate based on comparing the strings in *<b>a</b> and
* *<b>b</b>. */
static int
-_compare_strs(const void **a, const void **b)
+compare_strs_(const void **a, const void **b)
{
const char *s1 = *a, *s2 = *b;
return strcmp(s1, s2);
@@ -28,7 +29,7 @@ compare_strs_for_bsearch_(const void *a, const void **b)
/** Helper: return a tristate based on comparing the strings in *<b>a</b> and
* *<b>b</b>, excluding a's first character, and ignoring case. */
static int
-_compare_without_first_ch(const void *a, const void **b)
+compare_without_first_ch_(const void *a, const void **b)
{
const char *s1 = a, *s2 = *b;
return strcasecmp(s1+1, s2);
@@ -66,8 +67,8 @@ test_container_smartlist_basic(void)
test_eq(4, smartlist_len(sl));
/* test isin. */
- test_assert(smartlist_isin(sl, (void*)3));
- test_assert(!smartlist_isin(sl, (void*)99));
+ test_assert(smartlist_contains(sl, (void*)3));
+ test_assert(!smartlist_contains(sl, (void*)99));
done:
smartlist_free(sl);
@@ -185,7 +186,7 @@ test_container_smartlist_strings(void)
/* Test swapping, shuffling, and sorting. */
smartlist_split_string(sl, "the,onion,router,by,arma,and,nickm", ",", 0, 0);
test_eq(7, smartlist_len(sl));
- smartlist_sort(sl, _compare_strs);
+ smartlist_sort(sl, compare_strs_);
cp_alloc = smartlist_join_strings(sl, ",", 0, NULL);
test_streq(cp_alloc,"and,arma,by,nickm,onion,router,the");
tor_free(cp_alloc);
@@ -195,37 +196,37 @@ test_container_smartlist_strings(void)
tor_free(cp_alloc);
smartlist_shuffle(sl);
test_eq(7, smartlist_len(sl));
- test_assert(smartlist_string_isin(sl, "and"));
- test_assert(smartlist_string_isin(sl, "router"));
- test_assert(smartlist_string_isin(sl, "by"));
- test_assert(smartlist_string_isin(sl, "nickm"));
- test_assert(smartlist_string_isin(sl, "onion"));
- test_assert(smartlist_string_isin(sl, "arma"));
- test_assert(smartlist_string_isin(sl, "the"));
+ test_assert(smartlist_contains_string(sl, "and"));
+ test_assert(smartlist_contains_string(sl, "router"));
+ test_assert(smartlist_contains_string(sl, "by"));
+ test_assert(smartlist_contains_string(sl, "nickm"));
+ test_assert(smartlist_contains_string(sl, "onion"));
+ test_assert(smartlist_contains_string(sl, "arma"));
+ test_assert(smartlist_contains_string(sl, "the"));
/* Test bsearch. */
- smartlist_sort(sl, _compare_strs);
+ smartlist_sort(sl, compare_strs_);
test_streq("nickm", smartlist_bsearch(sl, "zNicKM",
- _compare_without_first_ch));
- test_streq("and", smartlist_bsearch(sl, " AND", _compare_without_first_ch));
- test_eq_ptr(NULL, smartlist_bsearch(sl, " ANz", _compare_without_first_ch));
+ compare_without_first_ch_));
+ test_streq("and", smartlist_bsearch(sl, " AND", compare_without_first_ch_));
+ test_eq_ptr(NULL, smartlist_bsearch(sl, " ANz", compare_without_first_ch_));
/* Test bsearch_idx */
{
int f;
smartlist_t *tmp = NULL;
- test_eq(0, smartlist_bsearch_idx(sl," aaa",_compare_without_first_ch,&f));
+ test_eq(0, smartlist_bsearch_idx(sl," aaa",compare_without_first_ch_,&f));
test_eq(f, 0);
- test_eq(0, smartlist_bsearch_idx(sl," and",_compare_without_first_ch,&f));
+ test_eq(0, smartlist_bsearch_idx(sl," and",compare_without_first_ch_,&f));
test_eq(f, 1);
- test_eq(1, smartlist_bsearch_idx(sl," arm",_compare_without_first_ch,&f));
+ test_eq(1, smartlist_bsearch_idx(sl," arm",compare_without_first_ch_,&f));
test_eq(f, 0);
- test_eq(1, smartlist_bsearch_idx(sl," arma",_compare_without_first_ch,&f));
+ test_eq(1, smartlist_bsearch_idx(sl," arma",compare_without_first_ch_,&f));
test_eq(f, 1);
- test_eq(2, smartlist_bsearch_idx(sl," armb",_compare_without_first_ch,&f));
+ test_eq(2, smartlist_bsearch_idx(sl," armb",compare_without_first_ch_,&f));
test_eq(f, 0);
- test_eq(7, smartlist_bsearch_idx(sl," zzzz",_compare_without_first_ch,&f));
+ test_eq(7, smartlist_bsearch_idx(sl," zzzz",compare_without_first_ch_,&f));
test_eq(f, 0);
/* Test trivial cases for list of length 0 or 1 */
@@ -266,25 +267,25 @@ test_container_smartlist_strings(void)
SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
smartlist_clear(sl);
cp_alloc = smartlist_pop_last(sl);
- test_eq(cp_alloc, NULL);
+ test_eq_ptr(cp_alloc, NULL);
/* Test uniq() */
smartlist_split_string(sl,
"50,noon,radar,a,man,a,plan,a,canal,panama,radar,noon,50",
",", 0, 0);
- smartlist_sort(sl, _compare_strs);
- smartlist_uniq(sl, _compare_strs, _tor_free);
+ smartlist_sort(sl, compare_strs_);
+ smartlist_uniq(sl, compare_strs_, tor_free_);
cp_alloc = smartlist_join_strings(sl, ",", 0, NULL);
test_streq(cp_alloc, "50,a,canal,man,noon,panama,plan,radar");
tor_free(cp_alloc);
- /* Test string_isin and isin_case and num_isin */
- test_assert(smartlist_string_isin(sl, "noon"));
- test_assert(!smartlist_string_isin(sl, "noonoon"));
- test_assert(smartlist_string_isin_case(sl, "nOOn"));
- test_assert(!smartlist_string_isin_case(sl, "nooNooN"));
- test_assert(smartlist_string_num_isin(sl, 50));
- test_assert(!smartlist_string_num_isin(sl, 60));
+ /* Test contains_string, contains_string_case and contains_int_as_string */
+ test_assert(smartlist_contains_string(sl, "noon"));
+ test_assert(!smartlist_contains_string(sl, "noonoon"));
+ test_assert(smartlist_contains_string_case(sl, "nOOn"));
+ test_assert(!smartlist_contains_string_case(sl, "nooNooN"));
+ test_assert(smartlist_contains_int_as_string(sl, 50));
+ test_assert(!smartlist_contains_int_as_string(sl, 60));
/* Test smartlist_choose */
{
@@ -292,12 +293,12 @@ test_container_smartlist_strings(void)
int allsame = 1;
int allin = 1;
void *first = smartlist_choose(sl);
- test_assert(smartlist_isin(sl, first));
+ test_assert(smartlist_contains(sl, first));
for (i = 0; i < 100; ++i) {
void *second = smartlist_choose(sl);
if (second != first)
allsame = 0;
- if (!smartlist_isin(sl, second))
+ if (!smartlist_contains(sl, second))
allin = 0;
}
test_assert(!allsame);
@@ -365,15 +366,15 @@ test_container_smartlist_overlap(void)
smartlist_add_all(sl, odds);
smartlist_intersect(sl, primes);
test_eq(smartlist_len(sl), 3);
- test_assert(smartlist_isin(sl, (void*)3));
- test_assert(smartlist_isin(sl, (void*)5));
- test_assert(smartlist_isin(sl, (void*)7));
+ test_assert(smartlist_contains(sl, (void*)3));
+ test_assert(smartlist_contains(sl, (void*)5));
+ test_assert(smartlist_contains(sl, (void*)7));
/* subtract */
smartlist_add_all(sl, primes);
smartlist_subtract(sl, odds);
test_eq(smartlist_len(sl), 1);
- test_assert(smartlist_isin(sl, (void*)2));
+ test_assert(smartlist_contains(sl, (void*)2));
done:
smartlist_free(odds);
@@ -389,14 +390,14 @@ test_container_smartlist_digests(void)
{
smartlist_t *sl = smartlist_new();
- /* digest_isin. */
+ /* contains_digest */
smartlist_add(sl, tor_memdup("AAAAAAAAAAAAAAAAAAAA", DIGEST_LEN));
smartlist_add(sl, tor_memdup("\00090AAB2AAAAaasdAAAAA", DIGEST_LEN));
smartlist_add(sl, tor_memdup("\00090AAB2AAAAaasdAAAAA", DIGEST_LEN));
- test_eq(0, smartlist_digest_isin(NULL, "AAAAAAAAAAAAAAAAAAAA"));
- test_assert(smartlist_digest_isin(sl, "AAAAAAAAAAAAAAAAAAAA"));
- test_assert(smartlist_digest_isin(sl, "\00090AAB2AAAAaasdAAAAA"));
- test_eq(0, smartlist_digest_isin(sl, "\00090AAB2AAABaasdAAAAA"));
+ test_eq(0, smartlist_contains_digest(NULL, "AAAAAAAAAAAAAAAAAAAA"));
+ test_assert(smartlist_contains_digest(sl, "AAAAAAAAAAAAAAAAAAAA"));
+ test_assert(smartlist_contains_digest(sl, "\00090AAB2AAAAaasdAAAAA"));
+ test_eq(0, smartlist_contains_digest(sl, "\00090AAB2AAABaasdAAAAA"));
/* sort digests */
smartlist_sort_digests(sl);
@@ -445,11 +446,11 @@ test_container_smartlist_join(void)
} SMARTLIST_FOREACH_JOIN_END(cp1, cp2);
SMARTLIST_FOREACH(sl3, const char *, cp,
- test_assert(smartlist_isin(sl2, cp) &&
- !smartlist_string_isin(sl, cp)));
+ test_assert(smartlist_contains(sl2, cp) &&
+ !smartlist_contains_string(sl, cp)));
SMARTLIST_FOREACH(sl4, const char *, cp,
- test_assert(smartlist_isin(sl, cp) &&
- smartlist_string_isin(sl2, cp)));
+ test_assert(smartlist_contains(sl, cp) &&
+ smartlist_contains_string(sl2, cp)));
joined = smartlist_join_strings(sl3, ",", 0, NULL);
test_streq(joined, "Anemias,Anemias,Crossbowmen,Work");
tor_free(joined);
@@ -468,6 +469,51 @@ test_container_smartlist_join(void)
tor_free(joined);
}
+static void
+test_container_smartlist_ints_eq(void *arg)
+{
+ smartlist_t *sl1 = NULL, *sl2 = NULL;
+ int x;
+ (void)arg;
+
+ tt_assert(smartlist_ints_eq(NULL, NULL));
+
+ sl1 = smartlist_new();
+ tt_assert(!smartlist_ints_eq(sl1, NULL));
+ tt_assert(!smartlist_ints_eq(NULL, sl1));
+
+ sl2 = smartlist_new();
+ tt_assert(smartlist_ints_eq(sl1, sl2));
+
+ x = 5;
+ smartlist_add(sl1, tor_memdup(&x, sizeof(int)));
+ smartlist_add(sl2, tor_memdup(&x, sizeof(int)));
+ x = 90;
+ smartlist_add(sl1, tor_memdup(&x, sizeof(int)));
+ smartlist_add(sl2, tor_memdup(&x, sizeof(int)));
+ tt_assert(smartlist_ints_eq(sl1, sl2));
+
+ x = -50;
+ smartlist_add(sl1, tor_memdup(&x, sizeof(int)));
+ tt_assert(! smartlist_ints_eq(sl1, sl2));
+ tt_assert(! smartlist_ints_eq(sl2, sl1));
+ smartlist_add(sl2, tor_memdup(&x, sizeof(int)));
+ tt_assert(smartlist_ints_eq(sl1, sl2));
+
+ *(int*)smartlist_get(sl1, 1) = 101010;
+ tt_assert(! smartlist_ints_eq(sl2, sl1));
+ *(int*)smartlist_get(sl2, 1) = 101010;
+ tt_assert(smartlist_ints_eq(sl1, sl2));
+
+ done:
+ if (sl1)
+ SMARTLIST_FOREACH(sl1, int *, ip, tor_free(ip));
+ if (sl2)
+ SMARTLIST_FOREACH(sl2, int *, ip, tor_free(ip));
+ smartlist_free(sl1);
+ smartlist_free(sl2);
+}
+
/** Run unit tests for bitarray code */
static void
test_container_bitarray(void)
@@ -528,18 +574,18 @@ test_container_digestset(void)
}
set = digestset_new(1000);
SMARTLIST_FOREACH(included, const char *, cp,
- if (digestset_isin(set, cp))
+ if (digestset_contains(set, cp))
ok = 0);
test_assert(ok);
SMARTLIST_FOREACH(included, const char *, cp,
digestset_add(set, cp));
SMARTLIST_FOREACH(included, const char *, cp,
- if (!digestset_isin(set, cp))
+ if (!digestset_contains(set, cp))
ok = 0);
test_assert(ok);
for (i = 0; i < 1000; ++i) {
crypto_rand(d, DIGEST_LEN);
- if (digestset_isin(set, d))
+ if (digestset_contains(set, d))
++false_positives;
}
test_assert(false_positives < 50); /* Should be far lower. */
@@ -558,7 +604,7 @@ typedef struct pq_entry_t {
/** Helper: return a tristate based on comparing two pq_entry_t values. */
static int
-_compare_strings_for_pqueue(const void *p1, const void *p2)
+compare_strings_for_pqueue_(const void *p1, const void *p2)
{
const pq_entry_t *e1=p1, *e2=p2;
return strcmp(e1->val, e2->val);
@@ -588,7 +634,7 @@ test_container_pqueue(void)
#define OK() smartlist_pqueue_assert_ok(sl, cmp, offset)
- cmp = _compare_strings_for_pqueue;
+ cmp = compare_strings_for_pqueue_;
smartlist_pqueue_add(sl, cmp, offset, &cows);
smartlist_pqueue_add(sl, cmp, offset, &zebras);
smartlist_pqueue_add(sl, cmp, offset, &fish);
@@ -677,12 +723,12 @@ test_container_strmap(void)
test_eq(strmap_size(map), 0);
test_assert(strmap_isempty(map));
v = strmap_set(map, "K1", (void*)99);
- test_eq(v, NULL);
+ test_eq_ptr(v, NULL);
test_assert(!strmap_isempty(map));
v = strmap_set(map, "K2", (void*)101);
- test_eq(v, NULL);
+ test_eq_ptr(v, NULL);
v = strmap_set(map, "K1", (void*)100);
- test_eq(v, (void*)99);
+ test_eq_ptr(v, (void*)99);
test_eq_ptr(strmap_get(map,"K1"), (void*)100);
test_eq_ptr(strmap_get(map,"K2"), (void*)101);
test_eq_ptr(strmap_get(map,"K-not-there"), NULL);
@@ -782,20 +828,152 @@ test_container_order_functions(void)
;
}
+static void
+test_container_di_map(void *arg)
+{
+ di_digest256_map_t *map = NULL;
+ const uint8_t key1[] = "In view of the fact that it was ";
+ const uint8_t key2[] = "superficially convincing, being ";
+ const uint8_t key3[] = "properly enciphered in a one-tim";
+ const uint8_t key4[] = "e cipher scheduled for use today";
+ char *v1 = tor_strdup(", it came close to causing a disaster...");
+ char *v2 = tor_strdup("I regret to have to advise you that the mission");
+ char *v3 = tor_strdup("was actually initiated...");
+ /* -- John Brunner, _The Shockwave Rider_ */
+
+ (void)arg;
+
+ /* Try searching on an empty map. */
+ tt_ptr_op(NULL, ==, dimap_search(map, key1, NULL));
+ tt_ptr_op(NULL, ==, dimap_search(map, key2, NULL));
+ tt_ptr_op(v3, ==, dimap_search(map, key2, v3));
+ dimap_free(map, NULL);
+ map = NULL;
+
+ /* Add a single entry. */
+ dimap_add_entry(&map, key1, v1);
+ tt_ptr_op(NULL, ==, dimap_search(map, key2, NULL));
+ tt_ptr_op(v3, ==, dimap_search(map, key2, v3));
+ tt_ptr_op(v1, ==, dimap_search(map, key1, NULL));
+
+ /* Now try it with three entries in the map. */
+ dimap_add_entry(&map, key2, v2);
+ dimap_add_entry(&map, key3, v3);
+ tt_ptr_op(v1, ==, dimap_search(map, key1, NULL));
+ tt_ptr_op(v2, ==, dimap_search(map, key2, NULL));
+ tt_ptr_op(v3, ==, dimap_search(map, key3, NULL));
+ tt_ptr_op(NULL, ==, dimap_search(map, key4, NULL));
+ tt_ptr_op(v1, ==, dimap_search(map, key4, v1));
+
+ done:
+ tor_free(v1);
+ tor_free(v2);
+ tor_free(v3);
+ dimap_free(map, NULL);
+}
+
+/** Run unit tests for fp_pair-to-void* map functions */
+static void
+test_container_fp_pair_map(void)
+{
+ fp_pair_map_t *map;
+ fp_pair_t fp1, fp2, fp3, fp4, fp5, fp6;
+ void *v;
+ fp_pair_map_iter_t *iter;
+ fp_pair_t k;
+
+ map = fp_pair_map_new();
+ test_assert(map);
+ test_eq(fp_pair_map_size(map), 0);
+ test_assert(fp_pair_map_isempty(map));
+
+ memset(fp1.first, 0x11, DIGEST_LEN);
+ memset(fp1.second, 0x12, DIGEST_LEN);
+ memset(fp2.first, 0x21, DIGEST_LEN);
+ memset(fp2.second, 0x22, DIGEST_LEN);
+ memset(fp3.first, 0x31, DIGEST_LEN);
+ memset(fp3.second, 0x32, DIGEST_LEN);
+ memset(fp4.first, 0x41, DIGEST_LEN);
+ memset(fp4.second, 0x42, DIGEST_LEN);
+ memset(fp5.first, 0x51, DIGEST_LEN);
+ memset(fp5.second, 0x52, DIGEST_LEN);
+ memset(fp6.first, 0x61, DIGEST_LEN);
+ memset(fp6.second, 0x62, DIGEST_LEN);
+
+ v = fp_pair_map_set(map, &fp1, (void*)99);
+ tt_ptr_op(v, ==, NULL);
+ test_assert(!fp_pair_map_isempty(map));
+ v = fp_pair_map_set(map, &fp2, (void*)101);
+ tt_ptr_op(v, ==, NULL);
+ v = fp_pair_map_set(map, &fp1, (void*)100);
+ tt_ptr_op(v, ==, (void*)99);
+ test_eq_ptr(fp_pair_map_get(map, &fp1), (void*)100);
+ test_eq_ptr(fp_pair_map_get(map, &fp2), (void*)101);
+ test_eq_ptr(fp_pair_map_get(map, &fp3), NULL);
+ fp_pair_map_assert_ok(map);
+
+ v = fp_pair_map_remove(map, &fp2);
+ fp_pair_map_assert_ok(map);
+ test_eq_ptr(v, (void*)101);
+ test_eq_ptr(fp_pair_map_get(map, &fp2), NULL);
+ test_eq_ptr(fp_pair_map_remove(map, &fp2), NULL);
+
+ fp_pair_map_set(map, &fp2, (void*)101);
+ fp_pair_map_set(map, &fp3, (void*)102);
+ fp_pair_map_set(map, &fp4, (void*)103);
+ test_eq(fp_pair_map_size(map), 4);
+ fp_pair_map_assert_ok(map);
+ fp_pair_map_set(map, &fp5, (void*)104);
+ fp_pair_map_set(map, &fp6, (void*)105);
+ fp_pair_map_assert_ok(map);
+
+ /* Test iterator. */
+ iter = fp_pair_map_iter_init(map);
+ while (!fp_pair_map_iter_done(iter)) {
+ fp_pair_map_iter_get(iter, &k, &v);
+ test_eq_ptr(v, fp_pair_map_get(map, &k));
+
+ if (tor_memeq(&fp2, &k, sizeof(fp2))) {
+ iter = fp_pair_map_iter_next_rmv(map, iter);
+ } else {
+ iter = fp_pair_map_iter_next(map, iter);
+ }
+ }
+
+ /* Make sure we removed fp2, but not the others. */
+ test_eq_ptr(fp_pair_map_get(map, &fp2), NULL);
+ test_eq_ptr(fp_pair_map_get(map, &fp5), (void*)104);
+
+ fp_pair_map_assert_ok(map);
+ /* Clean up after ourselves. */
+ fp_pair_map_free(map, NULL);
+ map = NULL;
+
+ done:
+ if (map)
+ fp_pair_map_free(map, NULL);
+}
+
#define CONTAINER_LEGACY(name) \
{ #name, legacy_test_helper, 0, &legacy_setup, test_container_ ## name }
+#define CONTAINER(name, flags) \
+ { #name, test_container_ ## name, (flags), NULL, NULL }
+
struct testcase_t container_tests[] = {
CONTAINER_LEGACY(smartlist_basic),
CONTAINER_LEGACY(smartlist_strings),
CONTAINER_LEGACY(smartlist_overlap),
CONTAINER_LEGACY(smartlist_digests),
CONTAINER_LEGACY(smartlist_join),
+ CONTAINER(smartlist_ints_eq, 0),
CONTAINER_LEGACY(bitarray),
CONTAINER_LEGACY(digestset),
CONTAINER_LEGACY(strmap),
CONTAINER_LEGACY(pqueue),
CONTAINER_LEGACY(order_functions),
+ CONTAINER(di_map, 0),
+ CONTAINER_LEGACY(fp_pair_map),
END_OF_TESTCASES
};
diff --git a/src/test/test_controller_events.c b/src/test/test_controller_events.c
new file mode 100644
index 000000000..b45e97a41
--- /dev/null
+++ b/src/test/test_controller_events.c
@@ -0,0 +1,307 @@
+/* Copyright (c) 2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#define CONNECTION_PRIVATE
+#define TOR_CHANNEL_INTERNAL_
+#define CONTROL_PRIVATE
+#include "or.h"
+#include "channel.h"
+#include "channeltls.h"
+#include "connection.h"
+#include "control.h"
+#include "test.h"
+
+static void
+help_test_bucket_note_empty(uint32_t expected_msec_since_midnight,
+ int tokens_before, size_t tokens_removed,
+ uint32_t msec_since_epoch)
+{
+ uint32_t timestamp_var = 0;
+ struct timeval tvnow;
+ tvnow.tv_sec = msec_since_epoch / 1000;
+ tvnow.tv_usec = (msec_since_epoch % 1000) * 1000;
+ connection_buckets_note_empty_ts(&timestamp_var, tokens_before,
+ tokens_removed, &tvnow);
+ tt_int_op(expected_msec_since_midnight, ==, timestamp_var);
+
+ done:
+ ;
+}
+
+static void
+test_cntev_bucket_note_empty(void *arg)
+{
+ (void)arg;
+
+ /* Two cases with nothing to note, because bucket was empty before;
+ * 86442200 == 1970-01-02 00:00:42.200000 */
+ help_test_bucket_note_empty(0, 0, 0, 86442200);
+ help_test_bucket_note_empty(0, -100, 100, 86442200);
+
+ /* Nothing to note, because bucket has not been emptied. */
+ help_test_bucket_note_empty(0, 101, 100, 86442200);
+
+ /* Bucket was emptied, note 42200 msec since midnight. */
+ help_test_bucket_note_empty(42200, 101, 101, 86442200);
+ help_test_bucket_note_empty(42200, 101, 102, 86442200);
+}
+
+static void
+test_cntev_bucket_millis_empty(void *arg)
+{
+ struct timeval tvnow;
+ (void)arg;
+
+ /* 1970-01-02 00:00:42.200000 */
+ tvnow.tv_sec = 86400 + 42;
+ tvnow.tv_usec = 200000;
+
+ /* Bucket has not been refilled. */
+ tt_int_op(0, ==, bucket_millis_empty(0, 42120, 0, 100, &tvnow));
+ tt_int_op(0, ==, bucket_millis_empty(-10, 42120, -10, 100, &tvnow));
+
+ /* Bucket was not empty. */
+ tt_int_op(0, ==, bucket_millis_empty(10, 42120, 20, 100, &tvnow));
+
+ /* Bucket has been emptied 80 msec ago and has just been refilled. */
+ tt_int_op(80, ==, bucket_millis_empty(-20, 42120, -10, 100, &tvnow));
+ tt_int_op(80, ==, bucket_millis_empty(-10, 42120, 0, 100, &tvnow));
+ tt_int_op(80, ==, bucket_millis_empty(0, 42120, 10, 100, &tvnow));
+
+ /* Bucket has been emptied 180 msec ago, last refill was 100 msec ago
+ * which was insufficient to make it positive, so cap msec at 100. */
+ tt_int_op(100, ==, bucket_millis_empty(0, 42020, 1, 100, &tvnow));
+
+ /* 1970-01-02 00:00:00:050000 */
+ tvnow.tv_sec = 86400;
+ tvnow.tv_usec = 50000;
+
+ /* Last emptied 30 msec before midnight, tvnow is 50 msec after
+ * midnight, that's 80 msec in total. */
+ tt_int_op(80, ==, bucket_millis_empty(0, 86400000 - 30, 1, 100, &tvnow));
+
+ done:
+ ;
+}
+
+static void
+add_testing_cell_stats_entry(circuit_t *circ, uint8_t command,
+ unsigned int waiting_time,
+ unsigned int removed, unsigned int exitward)
+{
+ testing_cell_stats_entry_t *ent = tor_malloc_zero(
+ sizeof(testing_cell_stats_entry_t));
+ ent->command = command;
+ ent->waiting_time = waiting_time;
+ ent->removed = removed;
+ ent->exitward = exitward;
+ if (!circ->testing_cell_stats)
+ circ->testing_cell_stats = smartlist_new();
+ smartlist_add(circ->testing_cell_stats, ent);
+}
+
+static void
+test_cntev_sum_up_cell_stats(void *arg)
+{
+ or_circuit_t *or_circ;
+ circuit_t *circ;
+ cell_stats_t *cell_stats = NULL;
+ (void)arg;
+
+ /* This circuit is fake. */
+ or_circ = tor_malloc_zero(sizeof(or_circuit_t));
+ or_circ->base_.magic = OR_CIRCUIT_MAGIC;
+ or_circ->base_.purpose = CIRCUIT_PURPOSE_OR;
+ circ = TO_CIRCUIT(or_circ);
+
+ /* A single RELAY cell was added to the appward queue. */
+ cell_stats = tor_malloc_zero(sizeof(cell_stats_t));
+ add_testing_cell_stats_entry(circ, CELL_RELAY, 0, 0, 0);
+ sum_up_cell_stats_by_command(circ, cell_stats);
+ tt_u64_op(1, ==, cell_stats->added_cells_appward[CELL_RELAY]);
+
+ /* A single RELAY cell was added to the exitward queue. */
+ add_testing_cell_stats_entry(circ, CELL_RELAY, 0, 0, 1);
+ sum_up_cell_stats_by_command(circ, cell_stats);
+ tt_u64_op(1, ==, cell_stats->added_cells_exitward[CELL_RELAY]);
+
+ /* A single RELAY cell was removed from the appward queue where it spent
+ * 20 msec. */
+ add_testing_cell_stats_entry(circ, CELL_RELAY, 2, 1, 0);
+ sum_up_cell_stats_by_command(circ, cell_stats);
+ tt_u64_op(20, ==, cell_stats->total_time_appward[CELL_RELAY]);
+ tt_u64_op(1, ==, cell_stats->removed_cells_appward[CELL_RELAY]);
+
+ /* A single RELAY cell was removed from the exitward queue where it
+ * spent 30 msec. */
+ add_testing_cell_stats_entry(circ, CELL_RELAY, 3, 1, 1);
+ sum_up_cell_stats_by_command(circ, cell_stats);
+ tt_u64_op(30, ==, cell_stats->total_time_exitward[CELL_RELAY]);
+ tt_u64_op(1, ==, cell_stats->removed_cells_exitward[CELL_RELAY]);
+
+ done:
+ tor_free(cell_stats);
+ tor_free(or_circ);
+}
+
+static void
+test_cntev_append_cell_stats(void *arg)
+{
+ smartlist_t *event_parts;
+ char *cp = NULL;
+ const char *key = "Z";
+ uint64_t include_if_non_zero[CELL_COMMAND_MAX_ + 1],
+ number_to_include[CELL_COMMAND_MAX_ + 1];
+ (void)arg;
+
+ event_parts = smartlist_new();
+ memset(include_if_non_zero, 0,
+ (CELL_COMMAND_MAX_ + 1) * sizeof(uint64_t));
+ memset(number_to_include, 0,
+ (CELL_COMMAND_MAX_ + 1) * sizeof(uint64_t));
+
+ /* All array entries empty. */
+ append_cell_stats_by_command(event_parts, key,
+ include_if_non_zero,
+ number_to_include);
+ tt_int_op(0, ==, smartlist_len(event_parts));
+
+ /* There's a RELAY cell to include, but the corresponding field in
+ * include_if_non_zero is still zero. */
+ number_to_include[CELL_RELAY] = 1;
+ append_cell_stats_by_command(event_parts, key,
+ include_if_non_zero,
+ number_to_include);
+ tt_int_op(0, ==, smartlist_len(event_parts));
+
+ /* Now include single RELAY cell. */
+ include_if_non_zero[CELL_RELAY] = 2;
+ append_cell_stats_by_command(event_parts, key,
+ include_if_non_zero,
+ number_to_include);
+ cp = smartlist_pop_last(event_parts);
+ tt_str_op("Z=relay:1", ==, cp);
+ tor_free(cp);
+
+ /* Add four CREATE cells. */
+ include_if_non_zero[CELL_CREATE] = 3;
+ number_to_include[CELL_CREATE] = 4;
+ append_cell_stats_by_command(event_parts, key,
+ include_if_non_zero,
+ number_to_include);
+ cp = smartlist_pop_last(event_parts);
+ tt_str_op("Z=create:4,relay:1", ==, cp);
+
+ done:
+ tor_free(cp);
+ smartlist_free(event_parts);
+}
+
+static void
+test_cntev_format_cell_stats(void *arg)
+{
+ char *event_string = NULL;
+ origin_circuit_t *ocirc = NULL;
+ or_circuit_t *or_circ = NULL;
+ cell_stats_t *cell_stats = NULL;
+ channel_tls_t *n_chan=NULL, *p_chan=NULL;
+ (void)arg;
+
+ n_chan = tor_malloc_zero(sizeof(channel_tls_t));
+ n_chan->base_.global_identifier = 1;
+
+ ocirc = tor_malloc_zero(sizeof(origin_circuit_t));
+ ocirc->base_.magic = ORIGIN_CIRCUIT_MAGIC;
+ ocirc->base_.purpose = CIRCUIT_PURPOSE_C_GENERAL;
+ ocirc->global_identifier = 2;
+ ocirc->base_.n_circ_id = 3;
+ ocirc->base_.n_chan = &(n_chan->base_);
+
+ /* Origin circuit was completely idle. */
+ cell_stats = tor_malloc_zero(sizeof(cell_stats_t));
+ format_cell_stats(&event_string, TO_CIRCUIT(ocirc), cell_stats);
+ tt_str_op("ID=2 OutboundQueue=3 OutboundConn=1", ==, event_string);
+ tor_free(event_string);
+
+ /* Origin circuit had 4 RELAY cells added to its exitward queue. */
+ cell_stats->added_cells_exitward[CELL_RELAY] = 4;
+ format_cell_stats(&event_string, TO_CIRCUIT(ocirc), cell_stats);
+ tt_str_op("ID=2 OutboundQueue=3 OutboundConn=1 OutboundAdded=relay:4",
+ ==, event_string);
+ tor_free(event_string);
+
+ /* Origin circuit also had 5 CREATE2 cells added to its exitward
+ * queue. */
+ cell_stats->added_cells_exitward[CELL_CREATE2] = 5;
+ format_cell_stats(&event_string, TO_CIRCUIT(ocirc), cell_stats);
+ tt_str_op("ID=2 OutboundQueue=3 OutboundConn=1 OutboundAdded=relay:4,"
+ "create2:5", ==, event_string);
+ tor_free(event_string);
+
+ /* Origin circuit also had 7 RELAY cells removed from its exitward queue
+ * which together spent 6 msec in the queue. */
+ cell_stats->total_time_exitward[CELL_RELAY] = 6;
+ cell_stats->removed_cells_exitward[CELL_RELAY] = 7;
+ format_cell_stats(&event_string, TO_CIRCUIT(ocirc), cell_stats);
+ tt_str_op("ID=2 OutboundQueue=3 OutboundConn=1 OutboundAdded=relay:4,"
+ "create2:5 OutboundRemoved=relay:7 OutboundTime=relay:6",
+ ==, event_string);
+ tor_free(event_string);
+
+ p_chan = tor_malloc_zero(sizeof(channel_tls_t));
+ p_chan->base_.global_identifier = 2;
+
+ or_circ = tor_malloc_zero(sizeof(or_circuit_t));
+ or_circ->base_.magic = OR_CIRCUIT_MAGIC;
+ or_circ->base_.purpose = CIRCUIT_PURPOSE_OR;
+ or_circ->p_circ_id = 8;
+ or_circ->p_chan = &(p_chan->base_);
+ or_circ->base_.n_circ_id = 9;
+ or_circ->base_.n_chan = &(n_chan->base_);
+
+ tor_free(cell_stats);
+
+ /* OR circuit was idle. */
+ cell_stats = tor_malloc_zero(sizeof(cell_stats_t));
+ format_cell_stats(&event_string, TO_CIRCUIT(or_circ), cell_stats);
+ tt_str_op("InboundQueue=8 InboundConn=2 OutboundQueue=9 OutboundConn=1",
+ ==, event_string);
+ tor_free(event_string);
+
+ /* OR circuit had 3 RELAY cells added to its appward queue. */
+ cell_stats->added_cells_appward[CELL_RELAY] = 3;
+ format_cell_stats(&event_string, TO_CIRCUIT(or_circ), cell_stats);
+ tt_str_op("InboundQueue=8 InboundConn=2 InboundAdded=relay:3 "
+ "OutboundQueue=9 OutboundConn=1", ==, event_string);
+ tor_free(event_string);
+
+ /* OR circuit had 7 RELAY cells removed from its appward queue which
+ * together spent 6 msec in the queue. */
+ cell_stats->total_time_appward[CELL_RELAY] = 6;
+ cell_stats->removed_cells_appward[CELL_RELAY] = 7;
+ format_cell_stats(&event_string, TO_CIRCUIT(or_circ), cell_stats);
+ tt_str_op("InboundQueue=8 InboundConn=2 InboundAdded=relay:3 "
+ "InboundRemoved=relay:7 InboundTime=relay:6 "
+ "OutboundQueue=9 OutboundConn=1", ==, event_string);
+
+ done:
+ tor_free(cell_stats);
+ tor_free(event_string);
+ tor_free(or_circ);
+ tor_free(ocirc);
+ tor_free(p_chan);
+ tor_free(n_chan);
+}
+
+#define TEST(name, flags) \
+ { #name, test_cntev_ ## name, flags, 0, NULL }
+
+struct testcase_t controller_event_tests[] = {
+ TEST(bucket_note_empty, 0),
+ TEST(bucket_millis_empty, 0),
+ TEST(sum_up_cell_stats, 0),
+ TEST(append_cell_stats, 0),
+ TEST(format_cell_stats, 0),
+ END_OF_TESTCASES
+};
+
diff --git a/src/test/test_crypto.c b/src/test/test_crypto.c
index 7f4347a41..5d8edb655 100644
--- a/src/test/test_crypto.c
+++ b/src/test/test_crypto.c
@@ -1,13 +1,22 @@
/* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#include "orconfig.h"
-#define CRYPTO_PRIVATE
+#define CRYPTO_CURVE25519_PRIVATE
#include "or.h"
#include "test.h"
#include "aes.h"
+#include "util.h"
+#include "siphash.h"
+#ifdef CURVE25519_ENABLED
+#include "crypto_curve25519.h"
+#endif
+
+extern const char AUTHORITY_SIGNKEY_3[];
+extern const char AUTHORITY_SIGNKEY_A_DIGEST[];
+extern const char AUTHORITY_SIGNKEY_A_DIGEST256[];
/** Run unit tests for Diffie-Hellman functionality. */
static void
@@ -119,9 +128,9 @@ test_crypto_aes(void *arg)
memset(data2, 0, 1024);
memset(data3, 0, 1024);
env1 = crypto_cipher_new(NULL);
- test_neq(env1, 0);
+ test_neq_ptr(env1, 0);
env2 = crypto_cipher_new(crypto_cipher_get_key(env1));
- test_neq(env2, 0);
+ test_neq_ptr(env2, 0);
/* Try encrypting 512 chars. */
crypto_cipher_encrypt(env1, data2, data1, 512);
@@ -152,7 +161,7 @@ test_crypto_aes(void *arg)
memset(data3, 0, 1024);
env2 = crypto_cipher_new(crypto_cipher_get_key(env1));
- test_neq(env2, 0);
+ test_neq_ptr(env2, NULL);
for (j = 0; j < 1024-16; j += 17) {
crypto_cipher_encrypt(env2, data3+j, data1+j, 17);
}
@@ -264,34 +273,6 @@ test_crypto_sha(void)
"96177A9CB410FF61F20015AD");
tt_int_op(i, ==, 0);
- /* Test HMAC-SHA-1 with test cases from RFC2202. */
-
- /* Case 1. */
- memset(key, 0x0b, 20);
- crypto_hmac_sha1(digest, key, 20, "Hi There", 8);
- test_streq(hex_str(digest, 20),
- "B617318655057264E28BC0B6FB378C8EF146BE00");
- /* Case 2. */
- crypto_hmac_sha1(digest, "Jefe", 4, "what do ya want for nothing?", 28);
- test_streq(hex_str(digest, 20),
- "EFFCDF6AE5EB2FA2D27416D5F184DF9C259A7C79");
-
- /* Case 4. */
- base16_decode(key, 25,
- "0102030405060708090a0b0c0d0e0f10111213141516171819", 50);
- memset(data, 0xcd, 50);
- crypto_hmac_sha1(digest, key, 25, data, 50);
- test_streq(hex_str(digest, 20),
- "4C9007F4026250C6BC8414F9BF50C86C2D7235DA");
-
- /* Case 5. */
- memset(key, 0xaa, 80);
- crypto_hmac_sha1(digest, key, 80,
- "Test Using Larger Than Block-Size Key - Hash Key First",
- 54);
- test_streq(hex_str(digest, 20),
- "AA4AE5E15272D00E95705637CE8A3B55ED402112");
-
/* Test HMAC-SHA256 with test cases from wikipedia and RFC 4231 */
/* Case empty (wikipedia) */
@@ -417,7 +398,7 @@ test_crypto_pk(void)
char *encoded = NULL;
char data1[1024], data2[1024], data3[1024];
size_t size;
- int i, j, p, len;
+ int i, len;
/* Public-key ciphers */
pk1 = pk_generate(0);
@@ -427,6 +408,11 @@ test_crypto_pk(void)
test_assert(! crypto_pk_read_public_key_from_string(pk2, encoded, size));
test_eq(0, crypto_pk_cmp_keys(pk1, pk2));
+ /* comparison between keys and NULL */
+ tt_int_op(crypto_pk_cmp_keys(NULL, pk1), <, 0);
+ tt_int_op(crypto_pk_cmp_keys(NULL, NULL), ==, 0);
+ tt_int_op(crypto_pk_cmp_keys(pk1, NULL), >, 0);
+
test_eq(128, crypto_pk_keysize(pk1));
test_eq(1024, crypto_pk_num_bits(pk1));
test_eq(128, crypto_pk_keysize(pk2));
@@ -496,19 +482,16 @@ test_crypto_pk(void)
/* Try with hybrid encryption wrappers. */
crypto_rand(data1, 1024);
- for (i = 0; i < 2; ++i) {
- for (j = 85; j < 140; ++j) {
- memset(data2,0,1024);
- memset(data3,0,1024);
- p = (i==0)?PK_PKCS1_PADDING:PK_PKCS1_OAEP_PADDING;
- len = crypto_pk_public_hybrid_encrypt(pk1,data2,sizeof(data2),
- data1,j,p,0);
- test_assert(len>=0);
- len = crypto_pk_private_hybrid_decrypt(pk1,data3,sizeof(data3),
- data2,len,p,1);
- test_eq(len,j);
- test_memeq(data1,data3,j);
- }
+ for (i = 85; i < 140; ++i) {
+ memset(data2,0,1024);
+ memset(data3,0,1024);
+ len = crypto_pk_public_hybrid_encrypt(pk1,data2,sizeof(data2),
+ data1,i,PK_PKCS1_OAEP_PADDING,0);
+ test_assert(len>=0);
+ len = crypto_pk_private_hybrid_decrypt(pk1,data3,sizeof(data3),
+ data2,len,PK_PKCS1_OAEP_PADDING,1);
+ test_eq(len,i);
+ test_memeq(data1,data3,i);
}
/* Try copy_full */
@@ -526,6 +509,85 @@ test_crypto_pk(void)
tor_free(encoded);
}
+static void
+test_crypto_pk_fingerprints(void *arg)
+{
+ crypto_pk_t *pk = NULL;
+ char encoded[512];
+ char d[DIGEST_LEN], d2[DIGEST_LEN];
+ char fingerprint[FINGERPRINT_LEN+1];
+ int n;
+ unsigned i;
+ char *mem_op_hex_tmp=NULL;
+
+ (void)arg;
+
+ pk = pk_generate(1);
+ tt_assert(pk);
+ n = crypto_pk_asn1_encode(pk, encoded, sizeof(encoded));
+ tt_int_op(n, >, 0);
+ tt_int_op(n, >, 128);
+ tt_int_op(n, <, 256);
+
+ /* Is digest as expected? */
+ crypto_digest(d, encoded, n);
+ tt_int_op(0, ==, crypto_pk_get_digest(pk, d2));
+ test_memeq(d, d2, DIGEST_LEN);
+
+ /* Is fingerprint right? */
+ tt_int_op(0, ==, crypto_pk_get_fingerprint(pk, fingerprint, 0));
+ tt_int_op(strlen(fingerprint), ==, DIGEST_LEN * 2);
+ test_memeq_hex(d, fingerprint);
+
+ /* Are spaces right? */
+ tt_int_op(0, ==, crypto_pk_get_fingerprint(pk, fingerprint, 1));
+ for (i = 4; i < strlen(fingerprint); i += 5) {
+ tt_int_op(fingerprint[i], ==, ' ');
+ }
+ tor_strstrip(fingerprint, " ");
+ tt_int_op(strlen(fingerprint), ==, DIGEST_LEN * 2);
+ test_memeq_hex(d, fingerprint);
+
+ /* Now hash again and check crypto_pk_get_hashed_fingerprint. */
+ crypto_digest(d2, d, sizeof(d));
+ tt_int_op(0, ==, crypto_pk_get_hashed_fingerprint(pk, fingerprint));
+ tt_int_op(strlen(fingerprint), ==, DIGEST_LEN * 2);
+ test_memeq_hex(d2, fingerprint);
+
+ done:
+ crypto_pk_free(pk);
+ tor_free(mem_op_hex_tmp);
+}
+
+/** Sanity check for crypto pk digests */
+static void
+test_crypto_digests(void)
+{
+ crypto_pk_t *k = NULL;
+ ssize_t r;
+ digests_t pkey_digests;
+ char digest[DIGEST_LEN];
+
+ k = crypto_pk_new();
+ test_assert(k);
+ r = crypto_pk_read_private_key_from_string(k, AUTHORITY_SIGNKEY_3, -1);
+ test_assert(!r);
+
+ r = crypto_pk_get_digest(k, digest);
+ test_assert(r == 0);
+ test_memeq(hex_str(digest, DIGEST_LEN),
+ AUTHORITY_SIGNKEY_A_DIGEST, HEX_DIGEST_LEN);
+
+ r = crypto_pk_get_all_digests(k, &pkey_digests);
+
+ test_memeq(hex_str(pkey_digests.d[DIGEST_SHA1], DIGEST_LEN),
+ AUTHORITY_SIGNKEY_A_DIGEST, HEX_DIGEST_LEN);
+ test_memeq(hex_str(pkey_digests.d[DIGEST_SHA256], DIGEST256_LEN),
+ AUTHORITY_SIGNKEY_A_DIGEST256, HEX_DIGEST256_LEN);
+ done:
+ crypto_pk_free(k);
+}
+
/** Run unit tests for misc crypto formatting functionality (base64, base32,
* fingerprints, etc) */
static void
@@ -620,28 +682,12 @@ test_crypto_formats(void)
data1 = tor_strdup("ABCD1234ABCD56780000ABCD1234ABCD56780000");
test_eq(strlen(data1), 40);
data2 = tor_malloc(FINGERPRINT_LEN+1);
- add_spaces_to_fp(data2, FINGERPRINT_LEN+1, data1);
+ crypto_add_spaces_to_fp(data2, FINGERPRINT_LEN+1, data1);
test_streq(data2, "ABCD 1234 ABCD 5678 0000 ABCD 1234 ABCD 5678 0000");
tor_free(data1);
tor_free(data2);
}
- /* Check fingerprint */
- {
- test_assert(crypto_pk_check_fingerprint_syntax(
- "ABCD 1234 ABCD 5678 0000 ABCD 1234 ABCD 5678 0000"));
- test_assert(!crypto_pk_check_fingerprint_syntax(
- "ABCD 1234 ABCD 5678 0000 ABCD 1234 ABCD 5678 000"));
- test_assert(!crypto_pk_check_fingerprint_syntax(
- "ABCD 1234 ABCD 5678 0000 ABCD 1234 ABCD 5678 00000"));
- test_assert(!crypto_pk_check_fingerprint_syntax(
- "ABCD 1234 ABCD 5678 0000 ABCD1234 ABCD 5678 0000"));
- test_assert(!crypto_pk_check_fingerprint_syntax(
- "ABCD 1234 ABCD 5678 0000 ABCD1234 ABCD 5678 00000"));
- test_assert(!crypto_pk_check_fingerprint_syntax(
- "ACD 1234 ABCD 5678 0000 ABCD 1234 ABCD 5678 00000"));
- }
-
done:
tor_free(data1);
tor_free(data2);
@@ -736,11 +782,13 @@ test_crypto_aes_iv(void *arg)
/* Decrypt with the wrong key. */
decrypted_size = crypto_cipher_decrypt_with_iv(key2, decrypted2, 4095,
encrypted1, encrypted_size);
- test_memneq(plain, decrypted2, encrypted_size);
+ test_eq(decrypted_size, 4095);
+ test_memneq(plain, decrypted2, decrypted_size);
/* Alter the initialization vector. */
encrypted1[0] += 42;
decrypted_size = crypto_cipher_decrypt_with_iv(key1, decrypted1, 4095,
encrypted1, encrypted_size);
+ test_eq(decrypted_size, 4095);
test_memneq(plain, decrypted2, 4095);
/* Special length case: 1. */
encrypted_size = crypto_cipher_encrypt_with_iv(key1, encrypted1, 16 + 1,
@@ -827,6 +875,390 @@ test_crypto_base32_decode(void)
;
}
+static void
+test_crypto_kdf_TAP(void *arg)
+{
+ uint8_t key_material[100];
+ int r;
+ char *mem_op_hex_tmp = NULL;
+
+ (void)arg;
+#define EXPAND(s) \
+ r = crypto_expand_key_material_TAP( \
+ (const uint8_t*)(s), strlen(s), \
+ key_material, 100)
+
+ /* Test vectors generated with a little python script; feel free to write
+ * your own. */
+ memset(key_material, 0, sizeof(key_material));
+ EXPAND("");
+ tt_int_op(r, ==, 0);
+ test_memeq_hex(key_material,
+ "5ba93c9db0cff93f52b521d7420e43f6eda2784fbf8b4530d8"
+ "d246dd74ac53a13471bba17941dff7c4ea21bb365bbeeaf5f2"
+ "c654883e56d11e43c44e9842926af7ca0a8cca12604f945414"
+ "f07b01e13da42c6cf1de3abfdea9b95f34687cbbe92b9a7383");
+
+ EXPAND("Tor");
+ tt_int_op(r, ==, 0);
+ test_memeq_hex(key_material,
+ "776c6214fc647aaa5f683c737ee66ec44f03d0372e1cce6922"
+ "7950f236ddf1e329a7ce7c227903303f525a8c6662426e8034"
+ "870642a6dabbd41b5d97ec9bf2312ea729992f48f8ea2d0ba8"
+ "3f45dfda1a80bdc8b80de01b23e3e0ffae099b3e4ccf28dc28");
+
+ EXPAND("AN ALARMING ITEM TO FIND ON A MONTHLY AUTO-DEBIT NOTICE");
+ tt_int_op(r, ==, 0);
+ test_memeq_hex(key_material,
+ "a340b5d126086c3ab29c2af4179196dbf95e1c72431419d331"
+ "4844bf8f6afb6098db952b95581fb6c33625709d6f4400b8e7"
+ "ace18a70579fad83c0982ef73f89395bcc39493ad53a685854"
+ "daf2ba9b78733b805d9a6824c907ee1dba5ac27a1e466d4d10");
+
+ done:
+ tor_free(mem_op_hex_tmp);
+
+#undef EXPAND
+}
+
+static void
+test_crypto_hkdf_sha256(void *arg)
+{
+ uint8_t key_material[100];
+ const uint8_t salt[] = "ntor-curve25519-sha256-1:key_extract";
+ const size_t salt_len = strlen((char*)salt);
+ const uint8_t m_expand[] = "ntor-curve25519-sha256-1:key_expand";
+ const size_t m_expand_len = strlen((char*)m_expand);
+ int r;
+ char *mem_op_hex_tmp = NULL;
+
+ (void)arg;
+
+#define EXPAND(s) \
+ r = crypto_expand_key_material_rfc5869_sha256( \
+ (const uint8_t*)(s), strlen(s), \
+ salt, salt_len, \
+ m_expand, m_expand_len, \
+ key_material, 100)
+
+ /* Test vectors generated with ntor_ref.py */
+ memset(key_material, 0, sizeof(key_material));
+ EXPAND("");
+ tt_int_op(r, ==, 0);
+ test_memeq_hex(key_material,
+ "d3490ed48b12a48f9547861583573fe3f19aafe3f81dc7fc75"
+ "eeed96d741b3290f941576c1f9f0b2d463d1ec7ab2c6bf71cd"
+ "d7f826c6298c00dbfe6711635d7005f0269493edf6046cc7e7"
+ "dcf6abe0d20c77cf363e8ffe358927817a3d3e73712cee28d8");
+
+ EXPAND("Tor");
+ tt_int_op(r, ==, 0);
+ test_memeq_hex(key_material,
+ "5521492a85139a8d9107a2d5c0d9c91610d0f95989975ebee6"
+ "c02a4f8d622a6cfdf9b7c7edd3832e2760ded1eac309b76f8d"
+ "66c4a3c4d6225429b3a016e3c3d45911152fc87bc2de9630c3"
+ "961be9fdb9f93197ea8e5977180801926d3321fa21513e59ac");
+
+ EXPAND("AN ALARMING ITEM TO FIND ON YOUR CREDIT-RATING STATEMENT");
+ tt_int_op(r, ==, 0);
+ test_memeq_hex(key_material,
+ "a2aa9b50da7e481d30463adb8f233ff06e9571a0ca6ab6df0f"
+ "b206fa34e5bc78d063fc291501beec53b36e5a0e434561200c"
+ "5f8bd13e0f88b3459600b4dc21d69363e2895321c06184879d"
+ "94b18f078411be70b767c7fc40679a9440a0c95ea83a23efbf");
+
+ done:
+ tor_free(mem_op_hex_tmp);
+#undef EXPAND
+}
+
+#ifdef CURVE25519_ENABLED
+static void
+test_crypto_curve25519_impl(void *arg)
+{
+ /* adapted from curve25519_donna, which adapted it from test-curve25519
+ version 20050915, by D. J. Bernstein, Public domain. */
+
+ const int randomize_high_bit = (arg != NULL);
+
+#ifdef SLOW_CURVE25519_TEST
+ const int loop_max=10000;
+ const char e1_expected[] = "4faf81190869fd742a33691b0e0824d5"
+ "7e0329f4dd2819f5f32d130f1296b500";
+ const char e2k_expected[] = "05aec13f92286f3a781ccae98995a3b9"
+ "e0544770bc7de853b38f9100489e3e79";
+ const char e1e2k_expected[] = "cd6e8269104eb5aaee886bd2071fba88"
+ "bd13861475516bc2cd2b6e005e805064";
+#else
+ const int loop_max=200;
+ const char e1_expected[] = "bc7112cde03f97ef7008cad1bdc56be3"
+ "c6a1037d74cceb3712e9206871dcf654";
+ const char e2k_expected[] = "dd8fa254fb60bdb5142fe05b1f5de44d"
+ "8e3ee1a63c7d14274ea5d4c67f065467";
+ const char e1e2k_expected[] = "7ddb98bd89025d2347776b33901b3e7e"
+ "c0ee98cb2257a4545c0cfb2ca3e1812b";
+#endif
+
+ unsigned char e1k[32];
+ unsigned char e2k[32];
+ unsigned char e1e2k[32];
+ unsigned char e2e1k[32];
+ unsigned char e1[32] = {3};
+ unsigned char e2[32] = {5};
+ unsigned char k[32] = {9};
+ int loop, i;
+
+ char *mem_op_hex_tmp = NULL;
+
+ for (loop = 0; loop < loop_max; ++loop) {
+ curve25519_impl(e1k,e1,k);
+ curve25519_impl(e2e1k,e2,e1k);
+ curve25519_impl(e2k,e2,k);
+ if (randomize_high_bit) {
+ /* We require that the high bit of the public key be ignored. So if
+ * we're doing this variant test, we randomize the high bit of e2k, and
+ * make sure that the handshake still works out the same as it would
+ * otherwise. */
+ uint8_t byte;
+ crypto_rand((char*)&byte, 1);
+ e2k[31] |= (byte & 0x80);
+ }
+ curve25519_impl(e1e2k,e1,e2k);
+ test_memeq(e1e2k, e2e1k, 32);
+ if (loop == loop_max-1) {
+ break;
+ }
+ for (i = 0;i < 32;++i) e1[i] ^= e2k[i];
+ for (i = 0;i < 32;++i) e2[i] ^= e1k[i];
+ for (i = 0;i < 32;++i) k[i] ^= e1e2k[i];
+ }
+
+ test_memeq_hex(e1, e1_expected);
+ test_memeq_hex(e2k, e2k_expected);
+ test_memeq_hex(e1e2k, e1e2k_expected);
+
+ done:
+ tor_free(mem_op_hex_tmp);
+}
+
+static void
+test_crypto_curve25519_wrappers(void *arg)
+{
+ curve25519_public_key_t pubkey1, pubkey2;
+ curve25519_secret_key_t seckey1, seckey2;
+
+ uint8_t output1[CURVE25519_OUTPUT_LEN];
+ uint8_t output2[CURVE25519_OUTPUT_LEN];
+ (void)arg;
+
+ /* Test a simple handshake, serializing and deserializing some stuff. */
+ curve25519_secret_key_generate(&seckey1, 0);
+ curve25519_secret_key_generate(&seckey2, 1);
+ curve25519_public_key_generate(&pubkey1, &seckey1);
+ curve25519_public_key_generate(&pubkey2, &seckey2);
+ test_assert(curve25519_public_key_is_ok(&pubkey1));
+ test_assert(curve25519_public_key_is_ok(&pubkey2));
+ curve25519_handshake(output1, &seckey1, &pubkey2);
+ curve25519_handshake(output2, &seckey2, &pubkey1);
+ test_memeq(output1, output2, sizeof(output1));
+
+ done:
+ ;
+}
+
+static void
+test_crypto_curve25519_encode(void *arg)
+{
+ curve25519_secret_key_t seckey;
+ curve25519_public_key_t key1, key2, key3;
+ char buf[64];
+
+ (void)arg;
+
+ curve25519_secret_key_generate(&seckey, 0);
+ curve25519_public_key_generate(&key1, &seckey);
+ tt_int_op(0, ==, curve25519_public_to_base64(buf, &key1));
+ tt_int_op(CURVE25519_BASE64_PADDED_LEN, ==, strlen(buf));
+
+ tt_int_op(0, ==, curve25519_public_from_base64(&key2, buf));
+ test_memeq(key1.public_key, key2.public_key, CURVE25519_PUBKEY_LEN);
+
+ buf[CURVE25519_BASE64_PADDED_LEN - 1] = '\0';
+ tt_int_op(CURVE25519_BASE64_PADDED_LEN-1, ==, strlen(buf));
+ tt_int_op(0, ==, curve25519_public_from_base64(&key3, buf));
+ test_memeq(key1.public_key, key3.public_key, CURVE25519_PUBKEY_LEN);
+
+ /* Now try bogus parses. */
+ strlcpy(buf, "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$=", sizeof(buf));
+ tt_int_op(-1, ==, curve25519_public_from_base64(&key3, buf));
+
+ strlcpy(buf, "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", sizeof(buf));
+ tt_int_op(-1, ==, curve25519_public_from_base64(&key3, buf));
+
+ strlcpy(buf, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", sizeof(buf));
+ tt_int_op(-1, ==, curve25519_public_from_base64(&key3, buf));
+
+ done:
+ ;
+}
+
+static void
+test_crypto_curve25519_persist(void *arg)
+{
+ curve25519_keypair_t keypair, keypair2;
+ char *fname = tor_strdup(get_fname("curve25519_keypair"));
+ char *tag = NULL;
+ char *content = NULL;
+ const char *cp;
+ struct stat st;
+ size_t taglen;
+
+ (void)arg;
+
+ tt_int_op(0,==,curve25519_keypair_generate(&keypair, 0));
+
+ tt_int_op(0,==,curve25519_keypair_write_to_file(&keypair, fname, "testing"));
+ tt_int_op(0,==,curve25519_keypair_read_from_file(&keypair2, &tag, fname));
+ tt_str_op(tag,==,"testing");
+ tor_free(tag);
+
+ test_memeq(keypair.pubkey.public_key,
+ keypair2.pubkey.public_key,
+ CURVE25519_PUBKEY_LEN);
+ test_memeq(keypair.seckey.secret_key,
+ keypair2.seckey.secret_key,
+ CURVE25519_SECKEY_LEN);
+
+ content = read_file_to_str(fname, RFTS_BIN, &st);
+ tt_assert(content);
+ taglen = strlen("== c25519v1: testing ==");
+ tt_u64_op((uint64_t)st.st_size, ==,
+ 32+CURVE25519_PUBKEY_LEN+CURVE25519_SECKEY_LEN);
+ tt_assert(fast_memeq(content, "== c25519v1: testing ==", taglen));
+ tt_assert(tor_mem_is_zero(content+taglen, 32-taglen));
+ cp = content + 32;
+ test_memeq(keypair.seckey.secret_key,
+ cp,
+ CURVE25519_SECKEY_LEN);
+ cp += CURVE25519_SECKEY_LEN;
+ test_memeq(keypair.pubkey.public_key,
+ cp,
+ CURVE25519_SECKEY_LEN);
+
+ tor_free(fname);
+ fname = tor_strdup(get_fname("bogus_keypair"));
+
+ tt_int_op(-1, ==, curve25519_keypair_read_from_file(&keypair2, &tag, fname));
+ tor_free(tag);
+
+ content[69] ^= 0xff;
+ tt_int_op(0, ==, write_bytes_to_file(fname, content, (size_t)st.st_size, 1));
+ tt_int_op(-1, ==, curve25519_keypair_read_from_file(&keypair2, &tag, fname));
+
+ done:
+ tor_free(fname);
+ tor_free(content);
+ tor_free(tag);
+}
+
+#endif
+
+static void
+test_crypto_siphash(void *arg)
+{
+ /* From the reference implementation, taking
+ k = 00 01 02 ... 0f
+ and in = 00; 00 01; 00 01 02; ...
+ */
+ const uint8_t VECTORS[64][8] =
+ {
+ { 0x31, 0x0e, 0x0e, 0xdd, 0x47, 0xdb, 0x6f, 0x72, },
+ { 0xfd, 0x67, 0xdc, 0x93, 0xc5, 0x39, 0xf8, 0x74, },
+ { 0x5a, 0x4f, 0xa9, 0xd9, 0x09, 0x80, 0x6c, 0x0d, },
+ { 0x2d, 0x7e, 0xfb, 0xd7, 0x96, 0x66, 0x67, 0x85, },
+ { 0xb7, 0x87, 0x71, 0x27, 0xe0, 0x94, 0x27, 0xcf, },
+ { 0x8d, 0xa6, 0x99, 0xcd, 0x64, 0x55, 0x76, 0x18, },
+ { 0xce, 0xe3, 0xfe, 0x58, 0x6e, 0x46, 0xc9, 0xcb, },
+ { 0x37, 0xd1, 0x01, 0x8b, 0xf5, 0x00, 0x02, 0xab, },
+ { 0x62, 0x24, 0x93, 0x9a, 0x79, 0xf5, 0xf5, 0x93, },
+ { 0xb0, 0xe4, 0xa9, 0x0b, 0xdf, 0x82, 0x00, 0x9e, },
+ { 0xf3, 0xb9, 0xdd, 0x94, 0xc5, 0xbb, 0x5d, 0x7a, },
+ { 0xa7, 0xad, 0x6b, 0x22, 0x46, 0x2f, 0xb3, 0xf4, },
+ { 0xfb, 0xe5, 0x0e, 0x86, 0xbc, 0x8f, 0x1e, 0x75, },
+ { 0x90, 0x3d, 0x84, 0xc0, 0x27, 0x56, 0xea, 0x14, },
+ { 0xee, 0xf2, 0x7a, 0x8e, 0x90, 0xca, 0x23, 0xf7, },
+ { 0xe5, 0x45, 0xbe, 0x49, 0x61, 0xca, 0x29, 0xa1, },
+ { 0xdb, 0x9b, 0xc2, 0x57, 0x7f, 0xcc, 0x2a, 0x3f, },
+ { 0x94, 0x47, 0xbe, 0x2c, 0xf5, 0xe9, 0x9a, 0x69, },
+ { 0x9c, 0xd3, 0x8d, 0x96, 0xf0, 0xb3, 0xc1, 0x4b, },
+ { 0xbd, 0x61, 0x79, 0xa7, 0x1d, 0xc9, 0x6d, 0xbb, },
+ { 0x98, 0xee, 0xa2, 0x1a, 0xf2, 0x5c, 0xd6, 0xbe, },
+ { 0xc7, 0x67, 0x3b, 0x2e, 0xb0, 0xcb, 0xf2, 0xd0, },
+ { 0x88, 0x3e, 0xa3, 0xe3, 0x95, 0x67, 0x53, 0x93, },
+ { 0xc8, 0xce, 0x5c, 0xcd, 0x8c, 0x03, 0x0c, 0xa8, },
+ { 0x94, 0xaf, 0x49, 0xf6, 0xc6, 0x50, 0xad, 0xb8, },
+ { 0xea, 0xb8, 0x85, 0x8a, 0xde, 0x92, 0xe1, 0xbc, },
+ { 0xf3, 0x15, 0xbb, 0x5b, 0xb8, 0x35, 0xd8, 0x17, },
+ { 0xad, 0xcf, 0x6b, 0x07, 0x63, 0x61, 0x2e, 0x2f, },
+ { 0xa5, 0xc9, 0x1d, 0xa7, 0xac, 0xaa, 0x4d, 0xde, },
+ { 0x71, 0x65, 0x95, 0x87, 0x66, 0x50, 0xa2, 0xa6, },
+ { 0x28, 0xef, 0x49, 0x5c, 0x53, 0xa3, 0x87, 0xad, },
+ { 0x42, 0xc3, 0x41, 0xd8, 0xfa, 0x92, 0xd8, 0x32, },
+ { 0xce, 0x7c, 0xf2, 0x72, 0x2f, 0x51, 0x27, 0x71, },
+ { 0xe3, 0x78, 0x59, 0xf9, 0x46, 0x23, 0xf3, 0xa7, },
+ { 0x38, 0x12, 0x05, 0xbb, 0x1a, 0xb0, 0xe0, 0x12, },
+ { 0xae, 0x97, 0xa1, 0x0f, 0xd4, 0x34, 0xe0, 0x15, },
+ { 0xb4, 0xa3, 0x15, 0x08, 0xbe, 0xff, 0x4d, 0x31, },
+ { 0x81, 0x39, 0x62, 0x29, 0xf0, 0x90, 0x79, 0x02, },
+ { 0x4d, 0x0c, 0xf4, 0x9e, 0xe5, 0xd4, 0xdc, 0xca, },
+ { 0x5c, 0x73, 0x33, 0x6a, 0x76, 0xd8, 0xbf, 0x9a, },
+ { 0xd0, 0xa7, 0x04, 0x53, 0x6b, 0xa9, 0x3e, 0x0e, },
+ { 0x92, 0x59, 0x58, 0xfc, 0xd6, 0x42, 0x0c, 0xad, },
+ { 0xa9, 0x15, 0xc2, 0x9b, 0xc8, 0x06, 0x73, 0x18, },
+ { 0x95, 0x2b, 0x79, 0xf3, 0xbc, 0x0a, 0xa6, 0xd4, },
+ { 0xf2, 0x1d, 0xf2, 0xe4, 0x1d, 0x45, 0x35, 0xf9, },
+ { 0x87, 0x57, 0x75, 0x19, 0x04, 0x8f, 0x53, 0xa9, },
+ { 0x10, 0xa5, 0x6c, 0xf5, 0xdf, 0xcd, 0x9a, 0xdb, },
+ { 0xeb, 0x75, 0x09, 0x5c, 0xcd, 0x98, 0x6c, 0xd0, },
+ { 0x51, 0xa9, 0xcb, 0x9e, 0xcb, 0xa3, 0x12, 0xe6, },
+ { 0x96, 0xaf, 0xad, 0xfc, 0x2c, 0xe6, 0x66, 0xc7, },
+ { 0x72, 0xfe, 0x52, 0x97, 0x5a, 0x43, 0x64, 0xee, },
+ { 0x5a, 0x16, 0x45, 0xb2, 0x76, 0xd5, 0x92, 0xa1, },
+ { 0xb2, 0x74, 0xcb, 0x8e, 0xbf, 0x87, 0x87, 0x0a, },
+ { 0x6f, 0x9b, 0xb4, 0x20, 0x3d, 0xe7, 0xb3, 0x81, },
+ { 0xea, 0xec, 0xb2, 0xa3, 0x0b, 0x22, 0xa8, 0x7f, },
+ { 0x99, 0x24, 0xa4, 0x3c, 0xc1, 0x31, 0x57, 0x24, },
+ { 0xbd, 0x83, 0x8d, 0x3a, 0xaf, 0xbf, 0x8d, 0xb7, },
+ { 0x0b, 0x1a, 0x2a, 0x32, 0x65, 0xd5, 0x1a, 0xea, },
+ { 0x13, 0x50, 0x79, 0xa3, 0x23, 0x1c, 0xe6, 0x60, },
+ { 0x93, 0x2b, 0x28, 0x46, 0xe4, 0xd7, 0x06, 0x66, },
+ { 0xe1, 0x91, 0x5f, 0x5c, 0xb1, 0xec, 0xa4, 0x6c, },
+ { 0xf3, 0x25, 0x96, 0x5c, 0xa1, 0x6d, 0x62, 0x9f, },
+ { 0x57, 0x5f, 0xf2, 0x8e, 0x60, 0x38, 0x1b, 0xe5, },
+ { 0x72, 0x45, 0x06, 0xeb, 0x4c, 0x32, 0x8a, 0x95, }
+ };
+
+ const struct sipkey K = { U64_LITERAL(0x0706050403020100),
+ U64_LITERAL(0x0f0e0d0c0b0a0908) };
+ uint8_t input[64];
+ int i, j;
+
+ (void)arg;
+
+ for (i = 0; i < 64; ++i)
+ input[i] = i;
+
+ for (i = 0; i < 64; ++i) {
+ uint64_t r = siphash24(input, i, &K);
+ for (j = 0; j < 8; ++j) {
+ tt_int_op( (r >> (j*8)) & 0xff, ==, VECTORS[i][j]);
+ }
+ }
+
+ done:
+ ;
+}
+
static void *
pass_data_setup_fn(const struct testcase_t *testcase)
{
@@ -853,11 +1285,23 @@ struct testcase_t crypto_tests[] = {
{ "aes_EVP", test_crypto_aes, TT_FORK, &pass_data, (void*)"evp" },
CRYPTO_LEGACY(sha),
CRYPTO_LEGACY(pk),
+ { "pk_fingerprints", test_crypto_pk_fingerprints, TT_FORK, NULL, NULL },
+ CRYPTO_LEGACY(digests),
CRYPTO_LEGACY(dh),
CRYPTO_LEGACY(s2k),
{ "aes_iv_AES", test_crypto_aes_iv, TT_FORK, &pass_data, (void*)"aes" },
{ "aes_iv_EVP", test_crypto_aes_iv, TT_FORK, &pass_data, (void*)"evp" },
CRYPTO_LEGACY(base32_decode),
+ { "kdf_TAP", test_crypto_kdf_TAP, 0, NULL, NULL },
+ { "hkdf_sha256", test_crypto_hkdf_sha256, 0, NULL, NULL },
+#ifdef CURVE25519_ENABLED
+ { "curve25519_impl", test_crypto_curve25519_impl, 0, NULL, NULL },
+ { "curve25519_impl_hibit", test_crypto_curve25519_impl, 0, NULL, (void*)"y"},
+ { "curve25519_wrappers", test_crypto_curve25519_wrappers, 0, NULL, NULL },
+ { "curve25519_encode", test_crypto_curve25519_encode, 0, NULL, NULL },
+ { "curve25519_persist", test_crypto_curve25519_persist, 0, NULL, NULL },
+#endif
+ { "siphash", test_crypto_siphash, 0, NULL, NULL },
END_OF_TESTCASES
};
diff --git a/src/test/test_data.c b/src/test/test_data.c
index de2f9f58e..0c51c98f1 100644
--- a/src/test/test_data.c
+++ b/src/test/test_data.c
@@ -1,10 +1,20 @@
/* Copyright 2001-2004 Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
+/* Our unit test expect that the AUTHORITY_CERT_* public keys will sort
+ * in this order. */
+#define AUTHORITY_CERT_A AUTHORITY_CERT_3
+#define AUTHORITY_CERT_B AUTHORITY_CERT_1
+#define AUTHORITY_CERT_C AUTHORITY_CERT_2
+
+#define AUTHORITY_SIGNKEY_A AUTHORITY_SIGNKEY_3
+#define AUTHORITY_SIGNKEY_B AUTHORITY_SIGNKEY_1
+#define AUTHORITY_SIGNKEY_C AUTHORITY_SIGNKEY_2
+
/** First of 3 example authority certificates for unit testing. */
-const char AUTHORITY_CERT_1[] =
+const char AUTHORITY_CERT_A[] =
"dir-key-certificate-version 3\n"
"fingerprint D867ACF56A9D229B35C25F0090BC9867E906BE69\n"
"dir-key-published 2008-12-12 18:07:24\n"
@@ -46,7 +56,7 @@ const char AUTHORITY_CERT_1[] =
"-----END SIGNATURE-----\n";
/** The private signing key for AUTHORITY_CERT_1 */
-const char AUTHORITY_SIGNKEY_1[] =
+const char AUTHORITY_SIGNKEY_A[] =
"-----BEGIN RSA PRIVATE KEY-----\n"
"MIICWwIBAAKBgQCz0lCJ8rhLujVdzY6M6ZWp4iBAc0FxI79cff/pqp8GQAaWFZrs\n"
"vQPJ8XqMmN7GRbJ2MDVvyGYwIBtt6RJnr7txfi+JsjI42mujkZdzIEWEOIJrhaqX\n"
@@ -63,111 +73,128 @@ const char AUTHORITY_SIGNKEY_1[] =
"Yx4lqK0ca5IkTp3HevwnlWaJgbaOTUspCVshzJBhDA==\n"
"-----END RSA PRIVATE KEY-----\n";
+const char AUTHORITY_SIGNKEY_A_DIGEST[] =
+ "CBF56A83368A5150F1A9AAADAFB4D77F8C4170E2";
+const char AUTHORITY_SIGNKEY_A_DIGEST256[] =
+ "AF7C5468DBE3BA54A052726038D7F15F3C4CA511B1952645B3D96D83A8DFB51C";
+
/** Second of 3 example authority certificates for unit testing. */
-const char AUTHORITY_CERT_2[] =
+const char AUTHORITY_CERT_B[] =
"dir-key-certificate-version 3\n"
-"fingerprint 4D44AE0470B9E88FD4558EFEC82698FB33715400\n"
-"dir-key-published 2007-06-13 16:52:32\n"
-"dir-key-expires 2008-06-13 16:52:32\n"
+"fingerprint AD011E25302925A9D39A80E0E32576442E956467\n"
+"dir-key-published 2013-11-14 14:12:05\n"
+"dir-key-expires 2014-11-14 14:12:05\n"
"dir-identity-key\n"
"-----BEGIN RSA PUBLIC KEY-----\n"
-"MIIBigKCAYEAqukDwQRm1Oy1pPY+7GNRnRNFJzEVPUBfJwC4tBH19tkvdRQPuIGI\n"
-"2jiTy/rmZ6CLcl1G0oulSgxfKEX75QdptOasZu+rKUrRRSxx0QrXhs9a7up0rpXh\n"
-"13fw3mh1Vl/As3rJYF30Hjk01BTOJMxi/HY2y0ALQytFWjiMGY74A9Y6+uDcHkB2\n"
-"KflBjxIl8zpCsXsTTnUhN5kXqaOOnK46XaUShSpXsyOxTMJXuJEtgLz9XCyA8XjW\n"
-"d75QLHucEnlTqxUAdI5YSN2KIlIJiySCVnAorDpJey2mE9VncpHQWMCv/FPFdnSU\n"
-"EMMPUc4bBShcoNFf0mMJeV2sv+dBkgKAL0GLM19PuJIThJhfN/B6+YQTxw4HEpPV\n"
-"plfUqYRN0fYC+5hCTS6rroO/uCfDR7NBtoeDNm9dQrvjfk3b/Mywah1rdWNjnVqs\n"
-"tPJaz3fc/CVBOUUexhmyktgLuwSNEYIQilQ+BydkWN/4RObhV+YSV5BgekEDVaoS\n"
-"RHw4IbYBDHVxAgMBAAE=\n"
+"MIIBigKCAYEAyXYEMlGNRAixXdg65xf2WPkskYj2Wo8ysKMTls1JCXdIOAPvC2k2\n"
+"+AC6i3x9JHzUgCjWr4Jd5PSi7ODGyFC543igYl4wzkxNTU2L+SQ+hMe9qbEuUNhH\n"
+"sRR0xofdoH//3UuKj+HXEiMhhHbRWQGtWFuJqtGBruJqjZqIGOrp5nFjdlP0R98n\n"
+"Rx5wWlPgdJzifkXjKouu4mV+KzLl7f0gAtngA9DkSjt1wzga5IlL/lxDciD0SyJU\n"
+"tKMmls056omrZNbTnBxnY2pOlq9nx/zFrt/KQm1fTAQMjMBCf9KnDIV7NhaaHx7F\n"
+"7Nk8L7Hha353SvR+bsOFpiu05/EMZFTTIhO3MhUxZiCVZ0hKXvW1xe0HoGC5wbB+\n"
+"NyXu8oa4fIKLJ+WJ8Z60BNc0DcxJiQOf1eolGM/qrBul1lFZznds5/7182d+nF2W\n"
+"+bEjSm0fgXIxPfSD/7hB0FvgtmB3TXybHGBfPZgX0sTzFB6LNtP0BHicRoMXKdLF\n"
+"hM3tgIjEAsoZAgMBAAE=\n"
"-----END RSA PUBLIC KEY-----\n"
"dir-signing-key\n"
"-----BEGIN RSA PUBLIC KEY-----\n"
-"MIGJAoGBAOu3dgrQth3iqvi/UzfywaANw0bBUuMOBhnMBeiLEcRLneJHUJkVvrpR\n"
-"/EDQkdMov1e7CX6aqBKygVnbDNYjJ+bcQej8MKpuuW+zIknnz5lfnAVZO5uAmo3Y\n"
-"DpG574oQ2FFMdkWHSBloIRxSj/E4Jn1M2qJjElBXP0E33Ka/Noo7AgMBAAE=\n"
+"MIGJAoGBAJ567PZIGG/mYWEY4szYi/C5XXvf0BkquzKTHKrqVjysZEys9giz56Gv\n"
+"B08kIRxsxYKEWkq60rv0xtTc1WyEMcDpV1WLU0KSTQSVXzLu7BT8jbTsWzGsxdTV\n"
+"TdeyOirwHh8Cyyon5lppuMH5twUHrL5O7pWWbxjjrQjAHCn3gd+NAgMBAAE=\n"
"-----END RSA PUBLIC KEY-----\n"
+"dir-key-crosscert\n"
+"-----BEGIN ID SIGNATURE-----\n"
+"OC+gaukd4K7xJOsgTPbRhacf5mDUGxsu3ho/J1oJdtni4CK9WscVs6/Goj1o5Lot\n"
+"H1nCAMaR96Jnqq5c63Aaj1sEXdeYHlu5cI7YHgtGI5MmtjiUNXUCWMjCwSQYwGKe\n"
+"2YDYGAKAGt97n7XMKhJWGjAmv1TgmK3DvL1jt/aazL8=\n"
+"-----END ID SIGNATURE-----\n"
"dir-key-certification\n"
"-----BEGIN SIGNATURE-----\n"
-"Fv0Li68QUdAiChY3OklZOakHzwXAUfCzDNxkqe+HLC0n6ZECE9ZCvLVo69XmgVhH\n"
-"L5qYr2rxT6QpF+9yuOHbN9gWn8EsDcli06MlhX9TUt/IYVxHa/9tJwNoTfEw2w2D\n"
-"tyHhWm94IfOK7/Sea6jHnjckl80X+kk0ZNtAGs3/6fP4iltKNGXnvBwfgLpEgW7X\n"
-"NpDl0OLeDuA79zem2GogwQZQdoDbePByU0TJVx9jYi2Bzx2Nb2H0hRTPP6+dY0HQ\n"
-"MHb7yyyTQRad5iAUnExKhhyt22p7X3a6lgkAhq4YrNn/zVPkpnT2dzjsOydTHOW8\n"
-"2BQs33QlGNe095i47pJBDYsUgmJaXfqB/RG6dFg7jwIsc3/7dZcvcqfxY7wKcD/T\n"
-"wtogCIKxDvWbZn7f0hqYkT6uQC8Zom8bcnedmyzufOZCyA2SqQ2wvio6lznR4RIB\n"
-"a8qDHR0tPS9/VkqTPcvUWCZeY3UiDeWPjoK1nea1pz6DHDWglKPx86a0amjjayZQ\n"
-"-----END SIGNATURE-----\n";
+"BddmCKsvS6VoFXIf9Aj9OZnfyVCx527517QtsQHN+NaVm20LzUkJ5MWGXYx4wgh3\n"
+"ExsHvVQguiVfnonkQpEHHKg+TbldlkuDhIdlb9f7dL7V3HLCsEdmS1c3A+TEyrPH\n"
+"i44p6QB5IMFAdgUMV/9ueKMh7pMoam6VNakMOd+Axx9BSJTrCRzcepjtM4Z0cPsj\n"
+"nmDgZi0df1+ca1t+HnuWyt3trxlqoUxRcPZKz28kEFDJsgnRNvoHrIvNTuy9qY4x\n"
+"rONnPuLr5kTO7VQVVZxgxt6WX3p6d8tj+WYHubydr2pG0dwu2vGDTy4qXvDIm/I4\n"
+"Gyo6OAoPbYV8fl0584EgiEbAWcX/Pze8mXr9lmXbf73xbSBHqveAs0UfB+4sBI98\n"
+"v4ax4NZkGs8cCIfugtAOLgZE0WCh/TQYnQ3PFcrUtj0RW+tM1z7S8P3UfEVBHVkJ\n"
+"8SqSB+pbsY6PwMuy6TC3WujW7gmjVanbwkbW19El9l9jRzteFerz7grG/WQkshqF\n"
+ "-----END SIGNATURE-----\n";
/** The private signing key for AUTHORITY_CERT_2 */
-const char AUTHORITY_SIGNKEY_2[] =
+const char AUTHORITY_SIGNKEY_B[] =
"-----BEGIN RSA PRIVATE KEY-----\n"
-"MIICXgIBAAKBgQDrt3YK0LYd4qr4v1M38sGgDcNGwVLjDgYZzAXoixHES53iR1CZ\n"
-"Fb66UfxA0JHTKL9Xuwl+mqgSsoFZ2wzWIyfm3EHo/DCqbrlvsyJJ58+ZX5wFWTub\n"
-"gJqN2A6Rue+KENhRTHZFh0gZaCEcUo/xOCZ9TNqiYxJQVz9BN9ymvzaKOwIDAQAB\n"
-"AoGAJ+I9/ex8tCfTSA2PdisEKiHKBeHWNYb870Z/RW6qje1BhLUOZSixwfL3XLwt\n"
-"wG3nml+SZrKid69uhZaz4FPIf0tqCgURf6dDrF5vuzzr7VLVqkZHYSBp0vE6bu0R\n"
-"Sgc5QNxI2talgc4bsp0O0C+Zd4n3Yto0pXl/I6NHVAxlFBECQQD2mahkY+QEHWPV\n"
-"yRY3w3HhRmWBcrkY2zVyvPpqfn/sdHRPYW/yj4Xr/d1CO9VyFmEs4k324lIvu6LT\n"
-"WDdpPlcJAkEA9LOZv5aNeAm8ckvvXH7iv8KiONiSz0n9wlisxMhNYTEkOCo1g7jG\n"
-"AX5ZknRC9s4sWCPOBpMhloUvemdQ5FCEIwJBAMqCFwoSCf7jD8hRcUBr7QodoF/0\n"
-"kVJ7OeI2lMJ9jZnlbFp/3snn2Qeam2e38SnWfQi582KKKwnt4eIDMMXpntkCQQDI\n"
-"v1Lh11wl3y7nQZ6T7lCNatp08k+2mQgCWYcbRQweMRd6sD4I2xwt+372ZETPfyLo\n"
-"CC+sOyYx+v+RVpMJS3irAkEA6l98nMteZKmhOgyKSjdolP+ahpZunb+WnCdAtP97\n"
-"rjZyXmEZS3oe7TRCDD28GAGMmxSDvNfOOpyn14ishEs5AQ==\n"
+"MIICWwIBAAKBgQCeeuz2SBhv5mFhGOLM2IvwuV1739AZKrsykxyq6lY8rGRMrPYI\n"
+"s+ehrwdPJCEcbMWChFpKutK79MbU3NVshDHA6VdVi1NCkk0ElV8y7uwU/I207Fsx\n"
+"rMXU1U3Xsjoq8B4fAssqJ+ZaabjB+bcFB6y+Tu6Vlm8Y460IwBwp94HfjQIDAQAB\n"
+"AoGAfHQ4ZmfTmPyoeGHcqdVcgBxxh3gJqdnezCavGqGQO3F+CqDBTbBKNLSI3uOW\n"
+"hQX+TTK23Xy9RRFCm6MYj3F4x7OOrSHSFyhMmzRnAZi3zGbtQZn30XoqTwCmVevY\n"
+"p5JbVvhP2BJcvdsyQhiIG23FRQ7MMHWtksAxmovTto1h/hkCQQDNCfMqSztgJZDn\n"
+"JSf5ASHBOw8QzfZBeYi3hqfiDtAN1RxT1uQnEiFQFJqwCz5lCbcwVrfQbrrk5M+h\n"
+"ooYrX7tTAkEAxd6Tl0N0WM3zCKz+3/Hoiyty6olnnpzNoPCg7LLBJcetABQi0KUv\n"
+"swYWlKP3eOFZkiBzTqa9nBK7eYLKV3d9nwJAKNM3WI98Nguky3FJgTnpd6kDuevY\n"
+"gXbqcuhb2xXp9Sceqc7axLDGc0R2/GBwvvttPzG1DcpOai7o7J0Iq/A2wwJAYuKI\n"
+"/99GFdtWyc8q0OAkRui/1VY14p6aZQPcaG4s+KSBYLivbXYgEGfKgR4wXsi/6rcs\n"
+"6PGLcKQr7N3gITYmIQJAaQn6djUWygCn1noKyWU+Sa7G5qqU2GWkLq9dMaRLm1/I\n"
+"nqi+2K1mN15rra0QtFVqSH4JXr8h3KAGyU45voGM7A==\n"
"-----END RSA PRIVATE KEY-----\n";
/** Third of 3 example authority certificates for unit testing. */
-const char AUTHORITY_CERT_3[] =
+const char AUTHORITY_CERT_C[] =
"dir-key-certificate-version 3\n"
-"fingerprint ED3719BF554DE9D7D59F5CA5A4F5AD121D020ED9\n"
-"dir-key-published 2007-06-13 16:52:40\n"
-"dir-key-expires 2008-06-13 16:52:40\n"
+"fingerprint 628C2086EC29C9D26E638C5A8B2065BFBD35829B\n"
+"dir-key-published 2013-11-14 14:12:18\n"
+"dir-key-expires 2014-11-14 14:12:18\n"
"dir-identity-key\n"
"-----BEGIN RSA PUBLIC KEY-----\n"
-"MIIBigKCAYEAtB+yw4BNxtZAG4cPaedkhWNmeij7IuNWmXjh58ZYEGurvGyHs1w4\n"
-"QlwNYI2UftSIeIGdWZ5fJ17h9P3xvO6eeJuOt4KPrNOxUbSGrELEx1Lje1fDAJ1X\n"
-"SvN+dvptusxtyFUr8afgTPrFIvYuazQ6q/Rw+NDagjmDx3h/A/enihpBnjwzeH8j\n"
-"Xzu7b+HKnzFnNfveTDdvSy0NSC6tCOnrfXo31XbXRXtlesnMIpbJClUcAv55eyai\n"
-"/PrVPCCUz8mk0sQnn2Xhv1YJmwOlQTGMfg0a0kWLmh+UWcHsGQ4VWxBZJcuzgFHG\n"
-"hu2/Fz6DXSpX5Q6B9HKoGmnH1oBh24l0kUW1jL8BxPY4YDU1Lt5t3qgcDn9dXYcI\n"
-"o8VvyI0ecSc26Q2PYFWX1hpN4VIBZ8uGaW3IpyTdNiRq0g3iMGRFEXcDlWuyMB9E\n"
-"EbSM7m/79V/z7SjDd75EP8Z0qDPESEVB8a8LbuSJtzFVE0KHd7RzkIEN5sorXspZ\n"
-"/THukftSmkIvAgMBAAE=\n"
+"MIIBigKCAYEAuzPA82lRVUAc1uZgfDehhK0rBU5xt+qhJXUSH0DxsuocYCLW//q+\n"
+"7+L7q9SochqZK3R5+SxJaZRlVK4rAeIHsxXFxsnGvuqasGM3he80EV1RpVRkvLaO\n"
+"2dDmHcfEjYBadft2DEq811yvqSRqbFXmK0hLucA6LI6NnEw9VNWlguaV6ACVLyKQ\n"
+"iYVFz2JOJIAi0Zz57WZg7eHypUAGoyXjtYTJPsh6pUe/0NLFJVd3JHcJX+bNqU2a\n"
+"QU37r+CQ9f3T+8fZGJQ/CXNnYUNHa0j+toOFuPEiZBBh8C4PE7FJWjidvhe9uI7T\n"
+"Py41RZhy8e05MAQmUBNRKBHWPKHoy2zWZZxTkcfWFdJJz/dzsNrIjrqf2fYId9To\n"
+"fDpHzYd/UjzZaaVYRVS/Oyf3pN8DKw8LMhEArS0X9pblPVkWWjmYMU6f0VR7pelc\n"
+"gGYuML3gOiKdNbeMWgAv3HNRsVsuW0HZLrhXUGYzTRPJ/GxVCwA/NmYgMTNVWRwF\n"
+"7M78YHpayyEPAgMBAAE=\n"
"-----END RSA PUBLIC KEY-----\n"
"dir-signing-key\n"
"-----BEGIN RSA PUBLIC KEY-----\n"
-"MIGJAoGBANrSZlUq38Boz3iuUOydYTJV57rTbq1bz805FP2QG2Z+2bwpgKIOZag/\n"
-"gN2A1ySJaIYLgZIg9irxrLkqlY/UAjC23y6V9fJXP1S3TXoqLmHleW8PsaDLuwTo\n"
-"hCWaR61Mx9WG7IXcodn2Z7RiCfZpSW4Rztbk5WtjQa5jPXSFOuBJAgMBAAE=\n"
+"MIGJAoGBANESf/hRRWCK3TLQyNb9Y42tYedCORUc8Rl+Q4wrvdz3R0TNr6rztE9N\n"
+"u8v3Wbvjtiqm1xL1I5PaOObFQQj61QZxKiCm1yU4eFH15dNmcvBEy5BjEXVYiDgy\n"
+"zKRyePzjHYQIZF3ZaQTABUplkXVpY0YvAurluhEy+dKEvZMwWFZTAgMBAAE=\n"
"-----END RSA PUBLIC KEY-----\n"
+"dir-key-crosscert\n"
+"-----BEGIN ID SIGNATURE-----\n"
+"NHNBya6Dt7Ww3qSGA0DBEl6pZFBzmYXM+QdqF+ESpdyYCQ54EYimaxl4VcXoGaxy\n"
+"xk8/VOXPC6h7hVnTWDTsC86G6eXug1yzpd/uhQbcDJMH5q8/Yg5WXGOnGhMWNCBh\n"
+"u2UmbtAjdjLrObQaB50FfOpuOV9kdG4SEzaPUBR2ayU=\n"
+"-----END ID SIGNATURE-----\n"
"dir-key-certification\n"
"-----BEGIN SIGNATURE-----\n"
-"UNXZy+4OQ8iat+gw+vg2ynvKj2BYbqZt+EAZAV3rmw6gux44U9TLRECRd6LsA08N\n"
-"4+Vz01TU81xqMgfrUy94ei2YvcfpO8art9/muWHTP9SmOX8S1uqDqLWA+n723C9A\n"
-"HyVXn4aINncO2081gJcIW5+Ul8WTCeZe/n3LVPTCKbTdqxvmrPUdCWlJTQUmb19M\n"
-"T+kcCjaEfgQGLC+Y2MHqYe/nxz+aBKqpjiWUDdjc35va6r/2e3c0jGi1B1xRZxN1\n"
-"xThPZ+CifjDoWBxJdDGlIfZRK1lMnOCJY9w9ibTXQ1UnvE4whFvmB55/t9/XLq4q\n"
-"3pnZz0H7funey3+ilmTxDohoAYT1GX+4a+3xYH07UmAFqlTzqKClj84XEHn+Cer7\n"
-"Nun9kJlJFuBgUpQjwCkzedFZKKLOHgB2h7trJfnqcBpAM8Rup1Bb5u/RcBx9gy1q\n"
-"pMc65FviIrc/Q5TUku6NNbCbnGll1599PvWuUzkG42lJ17V6psKHIsqGtVdHlCUc\n"
+"NocTkLl9iKglVo+yrpY0slsqgPviuScMyEfOJ3i65KeJb4Dr1huIs0Fip40zFD8D\n"
+"cz/SYu09FbANuRwBJIRdVWZLLwVFLBj5F8U65iJRAPBw/O/xgSVBvWoOhBUZqmJA\n"
+"Jp1IUutQHYFfnAOO9za4r8Ox6yPaOWF9Ks5gL0kU/fI8Bdi5E9p3e9fMtoM7hROg\n"
+"oX1AoV/za3LcM0oMsGsdXQ7B8vRqY0eUX523kpRpF1fUDyvBUvvMsXdZDN6anCV6\n"
+"NtSq2UaM/msTX1oQ8gzyD1gMXH0Ek26YMhd+6WZE6KUeb1x5HJgXtKtYzMLB6nQM\n"
+"4Q/OA4NND/Veflofy6xx8uzXe8H+MoUHK9WiORtwqvBl0E9qk6SVCuo4ipR4Ybgk\n"
+"PAFOXA58j80dlNYYEVgV8MXF1Y/g/thuXlf2dWiLAExdHTtE0AzC4quWshegaImC\n"
+"4aziHeA43TRDszAXcJorREAM0AhSxp3aWDde4Jt46ODOJR8t+gHreks29eDttEIn\n"
"-----END SIGNATURE-----\n";
/** The private signing key for AUTHORITY_CERT_3 */
-const char AUTHORITY_SIGNKEY_3[] =
+const char AUTHORITY_SIGNKEY_C[] =
"-----BEGIN RSA PRIVATE KEY-----\n"
-"MIICXgIBAAKBgQDa0mZVKt/AaM94rlDsnWEyVee6026tW8/NORT9kBtmftm8KYCi\n"
-"DmWoP4DdgNckiWiGC4GSIPYq8ay5KpWP1AIwtt8ulfXyVz9Ut016Ki5h5XlvD7Gg\n"
-"y7sE6IQlmketTMfVhuyF3KHZ9me0Ygn2aUluEc7W5OVrY0GuYz10hTrgSQIDAQAB\n"
-"AoGBAIyoeG1AnQmildKeQpiGZackf0uhg2BeRwpFKg//5Q0Sd0Wza+M/2+q1v1Ei\n"
-"86ihxxV7KfPTykk6hmuUSwVkI28Z+5J9NYTr35EzPiUlqpo0iclTkFqrlbqSPULx\n"
-"9fQhvcOGv1c0m5CnYrHsM8eu3tagLg+6OE4abLOYX4Az5pkxAkEA/NwHhVaVJrXH\n"
-"lGDrRAfGtaD5Tzeeg1H9DNZi5lmFiSNR0O11sgDLkiZNP5oM8knyqo8Gq08hwxEb\n"
-"yqMXM3XtJQJBAN2KJbFhOjDIkvJyYvbmcP6P7vV2c9j+oUTKkFMF7vvfWunxMi9j\n"
-"ghbdUKgl7tU0VFpw7ufDDD0pkN6sua3gp1UCQQCvNzTK861U7p/GtMYyFQVf9JTt\n"
-"jMf9jYHBNInBvwTme6AFG5bz6tMlif77dJ9GAXHzODrR2Hq3thJA/3RjR3M1AkBg\n"
-"+6M4ncmtpYC+5lhwob0Bk90WU/6vFflfdhXsYoKWfNb95vsDR9qhS82Nbt25NClh\n"
-"VmMfzoFDHTkwYgj/F4PpAkEA+RaaSRP7BmbvFNqvlm8J/m0RVdAH4+p/Q5Z5u6Yo\n"
-"N7xC/gFi0qFPGKsDvD2CncAYmt+KNsd8S0JGDN4eieKn+Q==\n"
+"MIICXAIBAAKBgQDREn/4UUVgit0y0MjW/WONrWHnQjkVHPEZfkOMK73c90dEza+q\n"
+"87RPTbvL91m747YqptcS9SOT2jjmxUEI+tUGcSogptclOHhR9eXTZnLwRMuQYxF1\n"
+"WIg4Msykcnj84x2ECGRd2WkEwAVKZZF1aWNGLwLq5boRMvnShL2TMFhWUwIDAQAB\n"
+"AoGAU68L+eDN3C65CzX2rdcOmg7kOSSQpJrJBmM7tkdr3546sJeD0PFrIrMCkEmZ\n"
+"aVNj/v545+WnL+8RB4280lNUIF4AMNaMZUL+4FAtwekqWua3QvvqgRMjCdG3/h/d\n"
+"bOAUiiKKEimflTaIVHNVSCvOIntftOu3PhebctuabnZzg0ECQQD9i+FX7M9UXT1A\n"
+"bVm+bRIJuQtG+u9jD3VxrvHsmh0QnOAL3oa/ofTCwoTJLZs8Qy0GeAoJNf28rY1q\n"
+"AgNMEeEXAkEA0xhxNX2fDQ2yvKwPkPMrRycJVWry+KHvSZG2+XYh+V5sVGQ5H7Gu\n"
+"krc6IzRZlIKQhEGktkw8ih0DEHQbAihiJQJBAKi/SnFcePjrPXL91Hb63MB/2dOZ\n"
+"+21wwnexOe6A+8ssvajop8IvJlnhYMMMiX7oLrVZe0R6HLBQyge94zfjxm0CQGye\n"
+"dRIrE34qAEBo4JGbLjesdHcJUwBwgqn+WoI+MPkZhvBdqa8PRF6l/TpEI5vxGt+S\n"
+"z2gmDjia+QqsU4FmuikCQDDOs85uwNSKJFax9XMzd1qd1QwX20F8lvnOsWErXiDw\n"
+"Fy2+rmIRHoSxn4D+rE5ivqkO99E9jAlz+uuQz/6WqwE=\n"
"-----END RSA PRIVATE KEY-----\n";
diff --git a/src/test/test_dir.c b/src/test/test_dir.c
index 83c612045..c03b63be2 100644
--- a/src/test/test_dir.c
+++ b/src/test/test_dir.c
@@ -1,14 +1,19 @@
/* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#include "orconfig.h"
+#include <math.h>
+
#define DIRSERV_PRIVATE
#define DIRVOTE_PRIVATE
#define ROUTER_PRIVATE
+#define ROUTERLIST_PRIVATE
#define HIBERNATE_PRIVATE
+#define NETWORKSTATUS_PRIVATE
#include "or.h"
+#include "config.h"
#include "directory.h"
#include "dirserv.h"
#include "dirvote.h"
@@ -70,28 +75,29 @@ test_dir_nicknames(void)
static void
test_dir_formats(void)
{
- char buf[8192], buf2[8192];
+ char *buf = NULL;
+ char buf2[8192];
char platform[256];
char fingerprint[FINGERPRINT_LEN+1];
- char *pk1_str = NULL, *pk2_str = NULL, *pk3_str = NULL, *cp;
- size_t pk1_str_len, pk2_str_len, pk3_str_len;
+ char *pk1_str = NULL, *pk2_str = NULL, *cp;
+ size_t pk1_str_len, pk2_str_len;
routerinfo_t *r1=NULL, *r2=NULL;
- crypto_pk_t *pk1 = NULL, *pk2 = NULL, *pk3 = NULL;
- routerinfo_t *rp1 = NULL;
+ crypto_pk_t *pk1 = NULL, *pk2 = NULL;
+ routerinfo_t *rp1 = NULL, *rp2 = NULL;
addr_policy_t *ex1, *ex2;
routerlist_t *dir1 = NULL, *dir2 = NULL;
+ or_options_t *options = get_options_mutable();
+ const addr_policy_t *p;
pk1 = pk_generate(0);
pk2 = pk_generate(1);
- pk3 = pk_generate(2);
- test_assert(pk1 && pk2 && pk3);
+ test_assert(pk1 && pk2);
hibernate_set_state_for_testing_(HIBERNATE_STATE_LIVE);
get_platform_str(platform, sizeof(platform));
r1 = tor_malloc_zero(sizeof(routerinfo_t));
- r1->address = tor_strdup("18.244.0.1");
r1->addr = 0xc0a80001u; /* 192.168.0.1 */
r1->cache_info.published_on = 0;
r1->or_port = 9000;
@@ -118,38 +124,42 @@ test_dir_formats(void)
ex2->maskbits = 8;
ex2->prt_min = ex2->prt_max = 24;
r2 = tor_malloc_zero(sizeof(routerinfo_t));
- r2->address = tor_strdup("1.1.1.1");
r2->addr = 0x0a030201u; /* 10.3.2.1 */
r2->platform = tor_strdup(platform);
r2->cache_info.published_on = 5;
r2->or_port = 9005;
r2->dir_port = 0;
r2->onion_pkey = crypto_pk_dup_key(pk2);
+ r2->onion_curve25519_pkey = tor_malloc_zero(sizeof(curve25519_public_key_t));
+ curve25519_public_from_base64(r2->onion_curve25519_pkey,
+ "skyinAnvardNostarsNomoonNowindormistsorsnow");
r2->identity_pkey = crypto_pk_dup_key(pk1);
r2->bandwidthrate = r2->bandwidthburst = r2->bandwidthcapacity = 3000;
r2->exit_policy = smartlist_new();
- smartlist_add(r2->exit_policy, ex2);
smartlist_add(r2->exit_policy, ex1);
+ smartlist_add(r2->exit_policy, ex2);
r2->nickname = tor_strdup("Fred");
test_assert(!crypto_pk_write_public_key_to_string(pk1, &pk1_str,
&pk1_str_len));
test_assert(!crypto_pk_write_public_key_to_string(pk2 , &pk2_str,
&pk2_str_len));
- test_assert(!crypto_pk_write_public_key_to_string(pk3 , &pk3_str,
- &pk3_str_len));
- memset(buf, 0, 2048);
- test_assert(router_dump_router_to_string(buf, 2048, r1, pk2)>0);
+ /* XXXX025 router_dump_to_string should really take this from ri.*/
+ options->ContactInfo = tor_strdup("Magri White "
+ "<magri@elsewhere.example.com>");
+ buf = router_dump_router_to_string(r1, pk2);
+ tor_free(options->ContactInfo);
+ test_assert(buf);
- strlcpy(buf2, "router Magri 18.244.0.1 9000 0 9003\n"
+ strlcpy(buf2, "router Magri 192.168.0.1 9000 0 9003\n"
"or-address [1:2:3:4::]:9999\n"
"platform Tor "VERSION" on ", sizeof(buf2));
strlcat(buf2, get_uname(), sizeof(buf2));
strlcat(buf2, "\n"
- "opt protocols Link 1 2 Circuit 1\n"
+ "protocols Link 1 2 Circuit 1\n"
"published 1970-01-01 00:00:00\n"
- "opt fingerprint ", sizeof(buf2));
+ "fingerprint ", sizeof(buf2));
test_assert(!crypto_pk_get_fingerprint(pk2, fingerprint, 1));
strlcat(buf2, fingerprint, sizeof(buf2));
strlcat(buf2, "\nuptime 0\n"
@@ -161,18 +171,22 @@ test_dir_formats(void)
strlcat(buf2, pk1_str, sizeof(buf2));
strlcat(buf2, "signing-key\n", sizeof(buf2));
strlcat(buf2, pk2_str, sizeof(buf2));
- strlcat(buf2, "opt hidden-service-dir\n", sizeof(buf2));
+ strlcat(buf2, "hidden-service-dir\n", sizeof(buf2));
+ strlcat(buf2, "contact Magri White <magri@elsewhere.example.com>\n",
+ sizeof(buf2));
strlcat(buf2, "reject *:*\nrouter-signature\n", sizeof(buf2));
buf[strlen(buf2)] = '\0'; /* Don't compare the sig; it's never the same
* twice */
test_streq(buf, buf2);
+ tor_free(buf);
- test_assert(router_dump_router_to_string(buf, 2048, r1, pk2)>0);
+ buf = router_dump_router_to_string(r1, pk2);
+ test_assert(buf);
cp = buf;
rp1 = router_parse_entry_from_string((const char*)cp,NULL,1,0,NULL);
test_assert(rp1);
- test_streq(rp1->address, r1->address);
+ test_eq(rp1->addr, r1->addr);
test_eq(rp1->or_port, r1->or_port);
//test_eq(rp1->dir_port, r1->dir_port);
test_eq(rp1->bandwidthrate, r1->bandwidthrate);
@@ -181,36 +195,73 @@ test_dir_formats(void)
test_assert(crypto_pk_cmp_keys(rp1->onion_pkey, pk1) == 0);
test_assert(crypto_pk_cmp_keys(rp1->identity_pkey, pk2) == 0);
//test_assert(rp1->exit_policy == NULL);
+ tor_free(buf);
-#if 0
- /* XXX Once we have exit policies, test this again. XXX */
- strlcpy(buf2, "router tor.tor.tor 9005 0 0 3000\n", sizeof(buf2));
+ strlcpy(buf2,
+ "router Fred 10.3.2.1 9005 0 0\n"
+ "platform Tor "VERSION" on ", sizeof(buf2));
+ strlcat(buf2, get_uname(), sizeof(buf2));
+ strlcat(buf2, "\n"
+ "protocols Link 1 2 Circuit 1\n"
+ "published 1970-01-01 00:00:05\n"
+ "fingerprint ", sizeof(buf2));
+ test_assert(!crypto_pk_get_fingerprint(pk1, fingerprint, 1));
+ strlcat(buf2, fingerprint, sizeof(buf2));
+ strlcat(buf2, "\nuptime 0\n"
+ "bandwidth 3000 3000 3000\n", sizeof(buf2));
+ strlcat(buf2, "onion-key\n", sizeof(buf2));
strlcat(buf2, pk2_str, sizeof(buf2));
strlcat(buf2, "signing-key\n", sizeof(buf2));
strlcat(buf2, pk1_str, sizeof(buf2));
- strlcat(buf2, "accept *:80\nreject 18.*:24\n\n", sizeof(buf2));
- test_assert(router_dump_router_to_string(buf, 2048, &r2, pk2)>0);
+ strlcat(buf2, "hidden-service-dir\n", sizeof(buf2));
+#ifdef CURVE25519_ENABLED
+ strlcat(buf2, "ntor-onion-key "
+ "skyinAnvardNostarsNomoonNowindormistsorsnow=\n", sizeof(buf2));
+#endif
+ strlcat(buf2, "accept *:80\nreject 18.0.0.0/8:24\n", sizeof(buf2));
+ strlcat(buf2, "router-signature\n", sizeof(buf2));
+
+ buf = router_dump_router_to_string(r2, pk1);
+ buf[strlen(buf2)] = '\0'; /* Don't compare the sig; it's never the same
+ * twice */
test_streq(buf, buf2);
+ tor_free(buf);
+ buf = router_dump_router_to_string(r2, pk1);
cp = buf;
- rp2 = router_parse_entry_from_string(&cp,1);
+ rp2 = router_parse_entry_from_string((const char*)cp,NULL,1,0,NULL);
test_assert(rp2);
- test_streq(rp2->address, r2.address);
- test_eq(rp2->or_port, r2.or_port);
- test_eq(rp2->dir_port, r2.dir_port);
- test_eq(rp2->bandwidth, r2.bandwidth);
+ test_eq(rp2->addr, r2->addr);
+ test_eq(rp2->or_port, r2->or_port);
+ test_eq(rp2->dir_port, r2->dir_port);
+ test_eq(rp2->bandwidthrate, r2->bandwidthrate);
+ test_eq(rp2->bandwidthburst, r2->bandwidthburst);
+ test_eq(rp2->bandwidthcapacity, r2->bandwidthcapacity);
+#ifdef CURVE25519_ENABLED
+ test_memeq(rp2->onion_curve25519_pkey->public_key,
+ r2->onion_curve25519_pkey->public_key,
+ CURVE25519_PUBKEY_LEN);
+#endif
test_assert(crypto_pk_cmp_keys(rp2->onion_pkey, pk2) == 0);
test_assert(crypto_pk_cmp_keys(rp2->identity_pkey, pk1) == 0);
- test_eq(rp2->exit_policy->policy_type, EXIT_POLICY_ACCEPT);
- test_streq(rp2->exit_policy->string, "accept *:80");
- test_streq(rp2->exit_policy->address, "*");
- test_streq(rp2->exit_policy->port, "80");
- test_eq(rp2->exit_policy->next->policy_type, EXIT_POLICY_REJECT);
- test_streq(rp2->exit_policy->next->string, "reject 18.*:24");
- test_streq(rp2->exit_policy->next->address, "18.*");
- test_streq(rp2->exit_policy->next->port, "24");
- test_assert(rp2->exit_policy->next->next == NULL);
+ test_eq(smartlist_len(rp2->exit_policy), 2);
+
+ p = smartlist_get(rp2->exit_policy, 0);
+ test_eq(p->policy_type, ADDR_POLICY_ACCEPT);
+ test_assert(tor_addr_is_null(&p->addr));
+ test_eq(p->maskbits, 0);
+ test_eq(p->prt_min, 80);
+ test_eq(p->prt_max, 80);
+
+ p = smartlist_get(rp2->exit_policy, 1);
+ test_eq(p->policy_type, ADDR_POLICY_REJECT);
+ test_assert(tor_addr_eq(&p->addr, &ex2->addr));
+ test_eq(p->maskbits, 8);
+ test_eq(p->prt_min, 24);
+ test_eq(p->prt_max, 24);
+
+#if 0
/* Okay, now for the directories. */
{
fingerprint_list = smartlist_new();
@@ -220,24 +271,6 @@ test_dir_formats(void)
add_fingerprint_to_dir("Fred", buf, fingerprint_list);
}
- {
- char d[DIGEST_LEN];
- const char *m;
- /* XXXX NM re-enable. */
- /* Make sure routers aren't too far in the past any more. */
- r1->cache_info.published_on = time(NULL);
- r2->cache_info.published_on = time(NULL)-3*60*60;
- test_assert(router_dump_router_to_string(buf, 2048, r1, pk2)>0);
- test_eq(dirserv_add_descriptor(buf,&m,""), ROUTER_ADDED_NOTIFY_GENERATOR);
- test_assert(router_dump_router_to_string(buf, 2048, r2, pk1)>0);
- test_eq(dirserv_add_descriptor(buf,&m,""), ROUTER_ADDED_NOTIFY_GENERATOR);
- get_options()->Nickname = tor_strdup("DirServer");
- test_assert(!dirserv_dump_directory_to_string(&cp,pk3, 0));
- crypto_pk_get_digest(pk3, d);
- test_assert(!router_parse_directory(cp));
- test_eq(2, smartlist_len(dir1->routers));
- tor_free(cp);
- }
#endif
dirserv_free_fingerprint_list();
@@ -246,13 +279,14 @@ test_dir_formats(void)
routerinfo_free(r1);
if (r2)
routerinfo_free(r2);
+ if (rp2)
+ routerinfo_free(rp2);
+ tor_free(buf);
tor_free(pk1_str);
tor_free(pk2_str);
- tor_free(pk3_str);
if (pk1) crypto_pk_free(pk1);
if (pk2) crypto_pk_free(pk2);
- if (pk3) crypto_pk_free(pk3);
if (rp1) routerinfo_free(rp1);
tor_free(dir1); /* XXXX And more !*/
tor_free(dir2); /* And more !*/
@@ -422,10 +456,8 @@ test_dir_split_fps(void *testdata)
"0123456789ABCdef0123456789ABCdef0123456789ABCdef0123456789ABCdef"
#define B64_1 "/g2v+JEnOJvGdVhpEjEjRVEZPu4"
#define B64_2 "3q2+75mZmZERERmZmRERERHwC6Q"
-#define B64_3 "sz/wDbM/8A2zP/ANsz/wDbM/8A0"
#define B64_256_1 "8/Pz8/u7vz8/Pz+7vz8/Pz+7u/Pz8/P7u/Pz8/P7u78"
#define B64_256_2 "zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMw"
-#define B64_256_3 "ASNFZ4mrze8BI0VniavN7wEjRWeJq83vASNFZ4mrze8"
/* no flags set */
dir_split_resource_into_fingerprints("A+C+B", sl, NULL, 0);
@@ -525,7 +557,7 @@ test_dir_split_fps(void *testdata)
}
static void
-test_dir_measured_bw(void)
+test_dir_measured_bw_kb(void)
{
measured_bw_line_t mbwl;
int i;
@@ -581,7 +613,7 @@ test_dir_measured_bw(void)
for (i = 0; strcmp(lines_pass[i], "end"); i++) {
//fprintf(stderr, "Testing: %s %d\n", lines_pass[i], TOR_ISSPACE('\n'));
test_assert(measured_bw_line_parse(&mbwl, lines_pass[i]) == 0);
- test_assert(mbwl.bw == 1024);
+ test_assert(mbwl.bw_kb == 1024);
test_assert(strcmp(mbwl.node_hex,
"557365204145532d32353620696e73746561642e") == 0);
}
@@ -590,6 +622,83 @@ test_dir_measured_bw(void)
return;
}
+#define MBWC_INIT_TIME 1000
+
+/** Do the measured bandwidth cache unit test */
+static void
+test_dir_measured_bw_kb_cache(void)
+{
+ /* Initial fake time_t for testing */
+ time_t curr = MBWC_INIT_TIME;
+ /* Some measured_bw_line_ts */
+ measured_bw_line_t mbwl[3];
+ /* For receiving output on cache queries */
+ long bw;
+ time_t as_of;
+
+ /* First, clear the cache and assert that it's empty */
+ dirserv_clear_measured_bw_cache();
+ test_eq(dirserv_get_measured_bw_cache_size(), 0);
+ /*
+ * Set up test mbwls; none of the dirserv_cache_*() functions care about
+ * the node_hex field.
+ */
+ memset(mbwl[0].node_id, 0x01, DIGEST_LEN);
+ mbwl[0].bw_kb = 20;
+ memset(mbwl[1].node_id, 0x02, DIGEST_LEN);
+ mbwl[1].bw_kb = 40;
+ memset(mbwl[2].node_id, 0x03, DIGEST_LEN);
+ mbwl[2].bw_kb = 80;
+ /* Try caching something */
+ dirserv_cache_measured_bw(&(mbwl[0]), curr);
+ test_eq(dirserv_get_measured_bw_cache_size(), 1);
+ /* Okay, let's see if we can retrieve it */
+ test_assert(dirserv_query_measured_bw_cache_kb(mbwl[0].node_id,&bw, &as_of));
+ test_eq(bw, 20);
+ test_eq(as_of, MBWC_INIT_TIME);
+ /* Try retrieving it without some outputs */
+ test_assert(dirserv_query_measured_bw_cache_kb(mbwl[0].node_id,NULL, NULL));
+ test_assert(dirserv_query_measured_bw_cache_kb(mbwl[0].node_id,&bw, NULL));
+ test_eq(bw, 20);
+ test_assert(dirserv_query_measured_bw_cache_kb(mbwl[0].node_id,NULL,&as_of));
+ test_eq(as_of, MBWC_INIT_TIME);
+ /* Now expire it */
+ curr += MAX_MEASUREMENT_AGE + 1;
+ dirserv_expire_measured_bw_cache(curr);
+ /* Check that the cache is empty */
+ test_eq(dirserv_get_measured_bw_cache_size(), 0);
+ /* Check that we can't retrieve it */
+ test_assert(!dirserv_query_measured_bw_cache_kb(mbwl[0].node_id, NULL,NULL));
+ /* Try caching a few things now */
+ dirserv_cache_measured_bw(&(mbwl[0]), curr);
+ test_eq(dirserv_get_measured_bw_cache_size(), 1);
+ curr += MAX_MEASUREMENT_AGE / 4;
+ dirserv_cache_measured_bw(&(mbwl[1]), curr);
+ test_eq(dirserv_get_measured_bw_cache_size(), 2);
+ curr += MAX_MEASUREMENT_AGE / 4;
+ dirserv_cache_measured_bw(&(mbwl[2]), curr);
+ test_eq(dirserv_get_measured_bw_cache_size(), 3);
+ curr += MAX_MEASUREMENT_AGE / 4 + 1;
+ /* Do an expire that's too soon to get any of them */
+ dirserv_expire_measured_bw_cache(curr);
+ test_eq(dirserv_get_measured_bw_cache_size(), 3);
+ /* Push the oldest one off the cliff */
+ curr += MAX_MEASUREMENT_AGE / 4;
+ dirserv_expire_measured_bw_cache(curr);
+ test_eq(dirserv_get_measured_bw_cache_size(), 2);
+ /* And another... */
+ curr += MAX_MEASUREMENT_AGE / 4;
+ dirserv_expire_measured_bw_cache(curr);
+ test_eq(dirserv_get_measured_bw_cache_size(), 1);
+ /* This should empty it out again */
+ curr += MAX_MEASUREMENT_AGE / 4;
+ dirserv_expire_measured_bw_cache(curr);
+ test_eq(dirserv_get_measured_bw_cache_size(), 0);
+
+ done:
+ return;
+}
+
static void
test_dir_param_voting(void)
{
@@ -761,6 +870,17 @@ generate_ri_from_rs(const vote_routerstatus_t *vrs)
strlen(r->cache_info.signed_descriptor_body);
r->exit_policy = smartlist_new();
r->cache_info.published_on = ++published + time(NULL);
+ if (rs->has_bandwidth) {
+ /*
+ * Multiply by 1000 because the routerinfo_t and the routerstatus_t
+ * seem to use different units (*sigh*) and because we seem stuck on
+ * icky and perverse decimal kilobytes (*double sigh*) - see
+ * router_get_advertised_bandwidth_capped() of routerlist.c and
+ * routerstatus_format_entry() of dirserv.c.
+ */
+ r->bandwidthrate = rs->bandwidth_kb * 1000;
+ r->bandwidthcapacity = rs->bandwidth_kb * 1000;
+ }
return r;
}
@@ -781,15 +901,326 @@ get_detached_sigs(networkstatus_t *ns, networkstatus_t *ns2)
return r;
}
-/** Run unit tests for generating and parsing V3 consensus networkstatus
- * documents. */
+/**
+ * Generate a routerstatus for v3_networkstatus test
+ */
+static vote_routerstatus_t *
+gen_routerstatus_for_v3ns(int idx, time_t now)
+{
+ vote_routerstatus_t *vrs=NULL;
+ routerstatus_t *rs;
+ tor_addr_t addr_ipv6;
+
+ switch (idx) {
+ case 0:
+ /* Generate the first routerstatus. */
+ vrs = tor_malloc_zero(sizeof(vote_routerstatus_t));
+ rs = &vrs->status;
+ vrs->version = tor_strdup("0.1.2.14");
+ rs->published_on = now-1500;
+ strlcpy(rs->nickname, "router2", sizeof(rs->nickname));
+ memset(rs->identity_digest, 3, DIGEST_LEN);
+ memset(rs->descriptor_digest, 78, DIGEST_LEN);
+ rs->addr = 0x99008801;
+ rs->or_port = 443;
+ rs->dir_port = 8000;
+ /* all flags but running cleared */
+ rs->is_flagged_running = 1;
+ break;
+ case 1:
+ /* Generate the second routerstatus. */
+ vrs = tor_malloc_zero(sizeof(vote_routerstatus_t));
+ rs = &vrs->status;
+ vrs->version = tor_strdup("0.2.0.5");
+ rs->published_on = now-1000;
+ strlcpy(rs->nickname, "router1", sizeof(rs->nickname));
+ memset(rs->identity_digest, 5, DIGEST_LEN);
+ memset(rs->descriptor_digest, 77, DIGEST_LEN);
+ rs->addr = 0x99009901;
+ rs->or_port = 443;
+ rs->dir_port = 0;
+ tor_addr_parse(&addr_ipv6, "[1:2:3::4]");
+ tor_addr_copy(&rs->ipv6_addr, &addr_ipv6);
+ rs->ipv6_orport = 4711;
+ rs->is_exit = rs->is_stable = rs->is_fast = rs->is_flagged_running =
+ rs->is_valid = rs->is_possible_guard = 1;
+ break;
+ case 2:
+ /* Generate the third routerstatus. */
+ vrs = tor_malloc_zero(sizeof(vote_routerstatus_t));
+ rs = &vrs->status;
+ vrs->version = tor_strdup("0.1.0.3");
+ rs->published_on = now-1000;
+ strlcpy(rs->nickname, "router3", sizeof(rs->nickname));
+ memset(rs->identity_digest, 33, DIGEST_LEN);
+ memset(rs->descriptor_digest, 79, DIGEST_LEN);
+ rs->addr = 0xAA009901;
+ rs->or_port = 400;
+ rs->dir_port = 9999;
+ rs->is_authority = rs->is_exit = rs->is_stable = rs->is_fast =
+ rs->is_flagged_running = rs->is_valid =
+ rs->is_possible_guard = 1;
+ break;
+ case 3:
+ /* Generate a fourth routerstatus that is not running. */
+ vrs = tor_malloc_zero(sizeof(vote_routerstatus_t));
+ rs = &vrs->status;
+ vrs->version = tor_strdup("0.1.6.3");
+ rs->published_on = now-1000;
+ strlcpy(rs->nickname, "router4", sizeof(rs->nickname));
+ memset(rs->identity_digest, 34, DIGEST_LEN);
+ memset(rs->descriptor_digest, 47, DIGEST_LEN);
+ rs->addr = 0xC0000203;
+ rs->or_port = 500;
+ rs->dir_port = 1999;
+ /* Running flag (and others) cleared */
+ break;
+ case 4:
+ /* No more for this test; return NULL */
+ vrs = NULL;
+ break;
+ default:
+ /* Shouldn't happen */
+ test_assert(0);
+ }
+ if (vrs) {
+ vrs->microdesc = tor_malloc_zero(sizeof(vote_microdesc_hash_t));
+ tor_asprintf(&vrs->microdesc->microdesc_hash_line,
+ "m 9,10,11,12,13,14,15,16,17 "
+ "sha256=xyzajkldsdsajdadlsdjaslsdksdjlsdjsdaskdaaa%d\n",
+ idx);
+ }
+
+ done:
+ return vrs;
+}
+
+/** Apply tweaks to the vote list for each voter */
+static int
+vote_tweaks_for_v3ns(networkstatus_t *v, int voter, time_t now)
+{
+ vote_routerstatus_t *vrs;
+ const char *msg = NULL;
+
+ test_assert(v);
+ (void)now;
+
+ if (voter == 1) {
+ measured_bw_line_t mbw;
+ memset(mbw.node_id, 33, sizeof(mbw.node_id));
+ mbw.bw_kb = 1024;
+ test_assert(measured_bw_line_apply(&mbw,
+ v->routerstatus_list) == 1);
+ } else if (voter == 2 || voter == 3) {
+ /* Monkey around with the list a bit */
+ vrs = smartlist_get(v->routerstatus_list, 2);
+ smartlist_del_keeporder(v->routerstatus_list, 2);
+ vote_routerstatus_free(vrs);
+ vrs = smartlist_get(v->routerstatus_list, 0);
+ vrs->status.is_fast = 1;
+
+ if (voter == 3) {
+ vrs = smartlist_get(v->routerstatus_list, 0);
+ smartlist_del_keeporder(v->routerstatus_list, 0);
+ vote_routerstatus_free(vrs);
+ vrs = smartlist_get(v->routerstatus_list, 0);
+ memset(vrs->status.descriptor_digest, (int)'Z', DIGEST_LEN);
+ test_assert(router_add_to_routerlist(
+ generate_ri_from_rs(vrs), &msg,0,0) >= 0);
+ }
+ }
+
+ done:
+ return 0;
+}
+
+/**
+ * Test a parsed vote_routerstatus_t for v3_networkstatus test
+ */
static void
-test_dir_v3_networkstatus(void)
+test_vrs_for_v3ns(vote_routerstatus_t *vrs, int voter, time_t now)
+{
+ routerstatus_t *rs;
+ tor_addr_t addr_ipv6;
+
+ test_assert(vrs);
+ rs = &(vrs->status);
+ test_assert(rs);
+
+ /* Split out by digests to test */
+ if (tor_memeq(rs->identity_digest,
+ "\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3"
+ "\x3\x3\x3\x3",
+ DIGEST_LEN) &&
+ (voter == 1)) {
+ /* Check the first routerstatus. */
+ test_streq(vrs->version, "0.1.2.14");
+ test_eq(rs->published_on, now-1500);
+ test_streq(rs->nickname, "router2");
+ test_memeq(rs->identity_digest,
+ "\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3"
+ "\x3\x3\x3\x3",
+ DIGEST_LEN);
+ test_memeq(rs->descriptor_digest, "NNNNNNNNNNNNNNNNNNNN", DIGEST_LEN);
+ test_eq(rs->addr, 0x99008801);
+ test_eq(rs->or_port, 443);
+ test_eq(rs->dir_port, 8000);
+ /* no flags except "running" (16) and "v2dir" (64) */
+ tt_u64_op(vrs->flags, ==, U64_LITERAL(80));
+ } else if (tor_memeq(rs->identity_digest,
+ "\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5"
+ "\x5\x5\x5\x5",
+ DIGEST_LEN) &&
+ (voter == 1 || voter == 2)) {
+ test_memeq(rs->identity_digest,
+ "\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5"
+ "\x5\x5\x5\x5",
+ DIGEST_LEN);
+
+ if (voter == 1) {
+ /* Check the second routerstatus. */
+ test_streq(vrs->version, "0.2.0.5");
+ test_eq(rs->published_on, now-1000);
+ test_streq(rs->nickname, "router1");
+ }
+ test_memeq(rs->descriptor_digest, "MMMMMMMMMMMMMMMMMMMM", DIGEST_LEN);
+ test_eq(rs->addr, 0x99009901);
+ test_eq(rs->or_port, 443);
+ test_eq(rs->dir_port, 0);
+ tor_addr_parse(&addr_ipv6, "[1:2:3::4]");
+ test_assert(tor_addr_eq(&rs->ipv6_addr, &addr_ipv6));
+ test_eq(rs->ipv6_orport, 4711);
+ if (voter == 1) {
+ /* all except "authority" (1) and "v2dir" (64) */
+ tt_u64_op(vrs->flags, ==, U64_LITERAL(190));
+ } else {
+ /* 1023 - authority(1) - madeofcheese(16) - madeoftin(32) - v2dir(256) */
+ tt_u64_op(vrs->flags, ==, U64_LITERAL(718));
+ }
+ } else if (tor_memeq(rs->identity_digest,
+ "\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33"
+ "\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33",
+ DIGEST_LEN) &&
+ (voter == 1 || voter == 2)) {
+ /* Check the measured bandwidth bits */
+ test_assert(vrs->has_measured_bw &&
+ vrs->measured_bw_kb == 1024);
+ } else {
+ /*
+ * Didn't expect this, but the old unit test only checked some of them,
+ * so don't assert.
+ */
+ /* test_assert(0); */
+ }
+
+ done:
+ return;
+}
+
+/**
+ * Test a consensus for v3_networkstatus_test
+ */
+static void
+test_consensus_for_v3ns(networkstatus_t *con, time_t now)
+{
+ (void)now;
+
+ test_assert(con);
+ test_assert(!con->cert);
+ test_eq(2, smartlist_len(con->routerstatus_list));
+ /* There should be two listed routers: one with identity 3, one with
+ * identity 5. */
+
+ done:
+ return;
+}
+
+/**
+ * Test a router list entry for v3_networkstatus test
+ */
+static void
+test_routerstatus_for_v3ns(routerstatus_t *rs, time_t now)
+{
+ tor_addr_t addr_ipv6;
+
+ test_assert(rs);
+
+ /* There should be two listed routers: one with identity 3, one with
+ * identity 5. */
+ /* This one showed up in 2 digests. */
+ if (tor_memeq(rs->identity_digest,
+ "\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3"
+ "\x3\x3",
+ DIGEST_LEN)) {
+ test_memeq(rs->identity_digest,
+ "\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3",
+ DIGEST_LEN);
+ test_memeq(rs->descriptor_digest, "NNNNNNNNNNNNNNNNNNNN", DIGEST_LEN);
+ test_assert(!rs->is_authority);
+ test_assert(!rs->is_exit);
+ test_assert(!rs->is_fast);
+ test_assert(!rs->is_possible_guard);
+ test_assert(!rs->is_stable);
+ /* (If it wasn't running it wouldn't be here) */
+ test_assert(rs->is_flagged_running);
+ test_assert(!rs->is_valid);
+ test_assert(!rs->is_named);
+ /* XXXX check version */
+ } else if (tor_memeq(rs->identity_digest,
+ "\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5"
+ "\x5\x5\x5\x5",
+ DIGEST_LEN)) {
+ /* This one showed up in 3 digests. Twice with ID 'M', once with 'Z'. */
+ test_memeq(rs->identity_digest,
+ "\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5",
+ DIGEST_LEN);
+ test_streq(rs->nickname, "router1");
+ test_memeq(rs->descriptor_digest, "MMMMMMMMMMMMMMMMMMMM", DIGEST_LEN);
+ test_eq(rs->published_on, now-1000);
+ test_eq(rs->addr, 0x99009901);
+ test_eq(rs->or_port, 443);
+ test_eq(rs->dir_port, 0);
+ tor_addr_parse(&addr_ipv6, "[1:2:3::4]");
+ test_assert(tor_addr_eq(&rs->ipv6_addr, &addr_ipv6));
+ test_eq(rs->ipv6_orport, 4711);
+ test_assert(!rs->is_authority);
+ test_assert(rs->is_exit);
+ test_assert(rs->is_fast);
+ test_assert(rs->is_possible_guard);
+ test_assert(rs->is_stable);
+ test_assert(rs->is_flagged_running);
+ test_assert(rs->is_valid);
+ test_assert(!rs->is_named);
+ /* XXXX check version */
+ } else {
+ /* Weren't expecting this... */
+ test_assert(0);
+ }
+
+ done:
+ return;
+}
+
+/** Run a unit tests for generating and parsing networkstatuses, with
+ * the supply test fns. */
+static void
+test_a_networkstatus(
+ vote_routerstatus_t * (*vrs_gen)(int idx, time_t now),
+ int (*vote_tweaks)(networkstatus_t *v, int voter, time_t now),
+ void (*vrs_test)(vote_routerstatus_t *vrs, int voter, time_t now),
+ void (*consensus_test)(networkstatus_t *con, time_t now),
+ void (*rs_test)(routerstatus_t *rs, time_t now))
{
authority_cert_t *cert1=NULL, *cert2=NULL, *cert3=NULL;
crypto_pk_t *sign_skey_1=NULL, *sign_skey_2=NULL, *sign_skey_3=NULL;
crypto_pk_t *sign_skey_leg1=NULL;
const char *msg=NULL;
+ /*
+ * Sum the non-zero returns from vote_tweaks() we've seen; if vote_tweaks()
+ * returns non-zero, it changed net_params and we should skip the tests for
+ * that later as they will fail.
+ */
+ int params_tweaked = 0;
time_t now = time(NULL);
networkstatus_voter_info_t *voter;
@@ -798,7 +1229,9 @@ test_dir_v3_networkstatus(void)
*con_md=NULL;
vote_routerstatus_t *vrs;
routerstatus_t *rs;
- char *v1_text=NULL, *v2_text=NULL, *v3_text=NULL, *consensus_text=NULL, *cp;
+ int idx, n_rs, n_vrs;
+ char *v1_text=NULL, *v2_text=NULL, *v3_text=NULL, *consensus_text=NULL,
+ *cp=NULL;
smartlist_t *votes = smartlist_new();
/* For generating the two other consensuses. */
@@ -809,10 +1242,13 @@ test_dir_v3_networkstatus(void)
networkstatus_t *con2=NULL, *con_md2=NULL, *con3=NULL, *con_md3=NULL;
ns_detached_signatures_t *dsig1=NULL, *dsig2=NULL;
+ test_assert(vrs_gen);
+ test_assert(rs_test);
+ test_assert(vrs_test);
+
/* Parse certificates and keys. */
cert1 = authority_cert_parse_from_string(AUTHORITY_CERT_1, NULL);
test_assert(cert1);
- test_assert(cert1->is_cross_certified);
cert2 = authority_cert_parse_from_string(AUTHORITY_CERT_2, NULL);
test_assert(cert2);
cert3 = authority_cert_parse_from_string(AUTHORITY_CERT_3, NULL);
@@ -866,69 +1302,18 @@ test_dir_v3_networkstatus(void)
smartlist_split_string(vote->net_params, "circuitwindow=101 foo=990",
NULL, 0, 0);
vote->routerstatus_list = smartlist_new();
- /* add the first routerstatus. */
- vrs = tor_malloc_zero(sizeof(vote_routerstatus_t));
- rs = &vrs->status;
- vrs->version = tor_strdup("0.1.2.14");
- rs->published_on = now-1500;
- strlcpy(rs->nickname, "router2", sizeof(rs->nickname));
- memset(rs->identity_digest, 3, DIGEST_LEN);
- memset(rs->descriptor_digest, 78, DIGEST_LEN);
- rs->addr = 0x99008801;
- rs->or_port = 443;
- rs->dir_port = 8000;
- /* all flags but running cleared */
- rs->is_flagged_running = 1;
- smartlist_add(vote->routerstatus_list, vrs);
- test_assert(router_add_to_routerlist(generate_ri_from_rs(vrs), &msg,0,0)>=0);
-
- /* add the second routerstatus. */
- vrs = tor_malloc_zero(sizeof(vote_routerstatus_t));
- rs = &vrs->status;
- vrs->version = tor_strdup("0.2.0.5");
- rs->published_on = now-1000;
- strlcpy(rs->nickname, "router1", sizeof(rs->nickname));
- memset(rs->identity_digest, 5, DIGEST_LEN);
- memset(rs->descriptor_digest, 77, DIGEST_LEN);
- rs->addr = 0x99009901;
- rs->or_port = 443;
- rs->dir_port = 0;
- rs->is_exit = rs->is_stable = rs->is_fast = rs->is_flagged_running =
- rs->is_valid = rs->is_v2_dir = rs->is_possible_guard = 1;
- smartlist_add(vote->routerstatus_list, vrs);
- test_assert(router_add_to_routerlist(generate_ri_from_rs(vrs), &msg,0,0)>=0);
-
- /* add the third routerstatus. */
- vrs = tor_malloc_zero(sizeof(vote_routerstatus_t));
- rs = &vrs->status;
- vrs->version = tor_strdup("0.1.0.3");
- rs->published_on = now-1000;
- strlcpy(rs->nickname, "router3", sizeof(rs->nickname));
- memset(rs->identity_digest, 33, DIGEST_LEN);
- memset(rs->descriptor_digest, 79, DIGEST_LEN);
- rs->addr = 0xAA009901;
- rs->or_port = 400;
- rs->dir_port = 9999;
- rs->is_authority = rs->is_exit = rs->is_stable = rs->is_fast =
- rs->is_flagged_running = rs->is_valid = rs->is_v2_dir =
- rs->is_possible_guard = 1;
- smartlist_add(vote->routerstatus_list, vrs);
- test_assert(router_add_to_routerlist(generate_ri_from_rs(vrs), &msg,0,0)>=0);
-
- /* add a fourth routerstatus that is not running. */
- vrs = tor_malloc_zero(sizeof(vote_routerstatus_t));
- rs = &vrs->status;
- vrs->version = tor_strdup("0.1.6.3");
- rs->published_on = now-1000;
- strlcpy(rs->nickname, "router4", sizeof(rs->nickname));
- memset(rs->identity_digest, 34, DIGEST_LEN);
- memset(rs->descriptor_digest, 47, DIGEST_LEN);
- rs->addr = 0xC0000203;
- rs->or_port = 500;
- rs->dir_port = 1999;
- /* Running flag (and others) cleared */
- smartlist_add(vote->routerstatus_list, vrs);
- test_assert(router_add_to_routerlist(generate_ri_from_rs(vrs), &msg,0,0)>=0);
+ /* add routerstatuses */
+ idx = 0;
+ do {
+ vrs = vrs_gen(idx, now);
+ if (vrs) {
+ smartlist_add(vote->routerstatus_list, vrs);
+ test_assert(router_add_to_routerlist(generate_ri_from_rs(vrs),
+ &msg,0,0)>=0);
+ ++idx;
+ }
+ } while (vrs);
+ n_vrs = idx;
/* dump the vote and try to parse it. */
v1_text = format_networkstatus_vote(sign_skey_1, vote);
@@ -959,45 +1344,15 @@ test_dir_v3_networkstatus(void)
cp = smartlist_join_strings(v1->known_flags, ":", 0, NULL);
test_streq(cp, "Authority:Exit:Fast:Guard:Running:Stable:V2Dir:Valid");
tor_free(cp);
- test_eq(smartlist_len(v1->routerstatus_list), 4);
- /* Check the first routerstatus. */
- vrs = smartlist_get(v1->routerstatus_list, 0);
- rs = &vrs->status;
- test_streq(vrs->version, "0.1.2.14");
- test_eq(rs->published_on, now-1500);
- test_streq(rs->nickname, "router2");
- test_memeq(rs->identity_digest,
- "\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3",
- DIGEST_LEN);
- test_memeq(rs->descriptor_digest, "NNNNNNNNNNNNNNNNNNNN", DIGEST_LEN);
- test_eq(rs->addr, 0x99008801);
- test_eq(rs->or_port, 443);
- test_eq(rs->dir_port, 8000);
- test_eq(vrs->flags, U64_LITERAL(16)); // no flags except "running"
- /* Check the second routerstatus. */
- vrs = smartlist_get(v1->routerstatus_list, 1);
- rs = &vrs->status;
- test_streq(vrs->version, "0.2.0.5");
- test_eq(rs->published_on, now-1000);
- test_streq(rs->nickname, "router1");
- test_memeq(rs->identity_digest,
- "\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5",
- DIGEST_LEN);
- test_memeq(rs->descriptor_digest, "MMMMMMMMMMMMMMMMMMMM", DIGEST_LEN);
- test_eq(rs->addr, 0x99009901);
- test_eq(rs->or_port, 443);
- test_eq(rs->dir_port, 0);
- test_eq(vrs->flags, U64_LITERAL(254)); // all flags except "authority."
+ test_eq(smartlist_len(v1->routerstatus_list), n_vrs);
- {
- measured_bw_line_t mbw;
- memset(mbw.node_id, 33, sizeof(mbw.node_id));
- mbw.bw = 1024;
- test_assert(measured_bw_line_apply(&mbw,
- v1->routerstatus_list) == 1);
- vrs = smartlist_get(v1->routerstatus_list, 2);
- test_assert(vrs->status.has_measured_bw &&
- vrs->status.measured_bw == 1024);
+ if (vote_tweaks) params_tweaked += vote_tweaks(v1, 1, now);
+
+ /* Check the routerstatuses. */
+ for (idx = 0; idx < n_vrs; ++idx) {
+ vrs = smartlist_get(v1->routerstatus_list, idx);
+ test_assert(vrs);
+ vrs_test(vrs, 1, now);
}
/* Generate second vote. It disagrees on some of the times,
@@ -1007,7 +1362,8 @@ test_dir_v3_networkstatus(void)
vote->dist_seconds = 300;
authority_cert_free(vote->cert);
vote->cert = authority_cert_dup(cert2);
- vote->net_params = smartlist_new();
+ SMARTLIST_FOREACH(vote->net_params, char *, c, tor_free(c));
+ smartlist_clear(vote->net_params);
smartlist_split_string(vote->net_params, "bar=2000000000 circuitwindow=20",
NULL, 0, 0);
tor_free(vote->client_versions);
@@ -1022,25 +1378,28 @@ test_dir_v3_networkstatus(void)
smartlist_add(vote->known_flags, tor_strdup("MadeOfCheese"));
smartlist_add(vote->known_flags, tor_strdup("MadeOfTin"));
smartlist_sort_strings(vote->known_flags);
- vrs = smartlist_get(vote->routerstatus_list, 2);
- smartlist_del_keeporder(vote->routerstatus_list, 2);
- tor_free(vrs->version);
- tor_free(vrs);
- vrs = smartlist_get(vote->routerstatus_list, 0);
- vrs->status.is_fast = 1;
- /* generate and parse. */
+
+ /* generate and parse v2. */
v2_text = format_networkstatus_vote(sign_skey_2, vote);
test_assert(v2_text);
v2 = networkstatus_parse_vote_from_string(v2_text, NULL, NS_TYPE_VOTE);
test_assert(v2);
+
+ if (vote_tweaks) params_tweaked += vote_tweaks(v2, 2, now);
+
/* Check that flags come out right.*/
cp = smartlist_join_strings(v2->known_flags, ":", 0, NULL);
test_streq(cp, "Authority:Exit:Fast:Guard:MadeOfCheese:MadeOfTin:"
"Running:Stable:V2Dir:Valid");
tor_free(cp);
- vrs = smartlist_get(v2->routerstatus_list, 1);
- /* 1023 - authority(1) - madeofcheese(16) - madeoftin(32) */
- test_eq(vrs->flags, U64_LITERAL(974));
+
+ /* Check the routerstatuses. */
+ n_vrs = smartlist_len(v2->routerstatus_list);
+ for (idx = 0; idx < n_vrs; ++idx) {
+ vrs = smartlist_get(v2->routerstatus_list, idx);
+ test_assert(vrs);
+ vrs_test(vrs, 2, now);
+ }
/* Generate the third vote. */
vote->published = now;
@@ -1048,7 +1407,8 @@ test_dir_v3_networkstatus(void)
vote->dist_seconds = 250;
authority_cert_free(vote->cert);
vote->cert = authority_cert_dup(cert3);
- vote->net_params = smartlist_new();
+ SMARTLIST_FOREACH(vote->net_params, char *, c, tor_free(c));
+ smartlist_clear(vote->net_params);
smartlist_split_string(vote->net_params, "circuitwindow=80 foo=660",
NULL, 0, 0);
smartlist_add(vote->supported_methods, tor_strdup("4"));
@@ -1063,13 +1423,6 @@ test_dir_v3_networkstatus(void)
crypto_pk_get_digest(cert3->identity_key, voter->identity_digest);
/* This one has a legacy id. */
memset(voter->legacy_id_digest, (int)'A', DIGEST_LEN);
- vrs = smartlist_get(vote->routerstatus_list, 0);
- smartlist_del_keeporder(vote->routerstatus_list, 0);
- tor_free(vrs->version);
- tor_free(vrs);
- vrs = smartlist_get(vote->routerstatus_list, 0);
- memset(vrs->status.descriptor_digest, (int)'Z', DIGEST_LEN);
- test_assert(router_add_to_routerlist(generate_ri_from_rs(vrs), &msg,0,0)>=0);
v3_text = format_networkstatus_vote(sign_skey_3, vote);
test_assert(v3_text);
@@ -1077,6 +1430,8 @@ test_dir_v3_networkstatus(void)
v3 = networkstatus_parse_vote_from_string(v3_text, NULL, NS_TYPE_VOTE);
test_assert(v3);
+ if (vote_tweaks) params_tweaked += vote_tweaks(v3, 3, now);
+
/* Compute a consensus as voter 3. */
smartlist_add(votes, v3);
smartlist_add(votes, v1);
@@ -1119,9 +1474,12 @@ test_dir_v3_networkstatus(void)
test_streq(cp, "Authority:Exit:Fast:Guard:MadeOfCheese:MadeOfTin:"
"Running:Stable:V2Dir:Valid");
tor_free(cp);
- cp = smartlist_join_strings(con->net_params, ":", 0, NULL);
- test_streq(cp, "circuitwindow=80:foo=660");
- tor_free(cp);
+ if (!params_tweaked) {
+ /* Skip this one if vote_tweaks() messed with the param lists */
+ cp = smartlist_join_strings(con->net_params, ":", 0, NULL);
+ test_streq(cp, "circuitwindow=80:foo=660");
+ tor_free(cp);
+ }
test_eq(4, smartlist_len(con->voters)); /*3 voters, 1 legacy key.*/
/* The voter id digests should be in this order. */
@@ -1136,49 +1494,15 @@ test_dir_v3_networkstatus(void)
test_same_voter(smartlist_get(con->voters, 3),
smartlist_get(v3->voters, 0));
- test_assert(!con->cert);
- test_eq(2, smartlist_len(con->routerstatus_list));
- /* There should be two listed routers: one with identity 3, one with
- * identity 5. */
- /* This one showed up in 2 digests. */
- rs = smartlist_get(con->routerstatus_list, 0);
- test_memeq(rs->identity_digest,
- "\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3",
- DIGEST_LEN);
- test_memeq(rs->descriptor_digest, "NNNNNNNNNNNNNNNNNNNN", DIGEST_LEN);
- test_assert(!rs->is_authority);
- test_assert(!rs->is_exit);
- test_assert(!rs->is_fast);
- test_assert(!rs->is_possible_guard);
- test_assert(!rs->is_stable);
- /* (If it wasn't running it wouldn't be here) */
- test_assert(rs->is_flagged_running);
- test_assert(!rs->is_v2_dir);
- test_assert(!rs->is_valid);
- test_assert(!rs->is_named);
- /* XXXX check version */
-
- rs = smartlist_get(con->routerstatus_list, 1);
- /* This one showed up in 3 digests. Twice with ID 'M', once with 'Z'. */
- test_memeq(rs->identity_digest,
- "\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5",
- DIGEST_LEN);
- test_streq(rs->nickname, "router1");
- test_memeq(rs->descriptor_digest, "MMMMMMMMMMMMMMMMMMMM", DIGEST_LEN);
- test_eq(rs->published_on, now-1000);
- test_eq(rs->addr, 0x99009901);
- test_eq(rs->or_port, 443);
- test_eq(rs->dir_port, 0);
- test_assert(!rs->is_authority);
- test_assert(rs->is_exit);
- test_assert(rs->is_fast);
- test_assert(rs->is_possible_guard);
- test_assert(rs->is_stable);
- test_assert(rs->is_flagged_running);
- test_assert(rs->is_v2_dir);
- test_assert(rs->is_valid);
- test_assert(!rs->is_named);
- /* XXXX check version */
+ consensus_test(con, now);
+
+ /* Check the routerstatuses. */
+ n_rs = smartlist_len(con->routerstatus_list);
+ for (idx = 0; idx < n_rs; ++idx) {
+ rs = smartlist_get(con->routerstatus_list, idx);
+ test_assert(rs);
+ rs_test(rs, now);
+ }
/* Check signatures. the first voter is a pseudo-entry with a legacy key.
* The second one hasn't signed. The fourth one has signed: validate it. */
@@ -1327,6 +1651,7 @@ test_dir_v3_networkstatus(void)
}
done:
+ tor_free(cp);
smartlist_free(votes);
tor_free(v1_text);
tor_free(v2_text);
@@ -1381,21 +1706,684 @@ test_dir_v3_networkstatus(void)
ns_detached_signatures_free(dsig2);
}
+/** Run unit tests for generating and parsing V3 consensus networkstatus
+ * documents. */
+static void
+test_dir_v3_networkstatus(void)
+{
+ test_a_networkstatus(gen_routerstatus_for_v3ns,
+ vote_tweaks_for_v3ns,
+ test_vrs_for_v3ns,
+ test_consensus_for_v3ns,
+ test_routerstatus_for_v3ns);
+}
+
+static void
+test_dir_scale_bw(void *testdata)
+{
+ double v[8] = { 2.0/3,
+ 7.0,
+ 1.0,
+ 3.0,
+ 1.0/5,
+ 1.0/7,
+ 12.0,
+ 24.0 };
+ u64_dbl_t vals[8];
+ uint64_t total;
+ int i;
+
+ (void) testdata;
+
+ for (i=0; i<8; ++i)
+ vals[i].dbl = v[i];
+
+ scale_array_elements_to_u64(vals, 8, &total);
+
+ tt_int_op((int)total, ==, 48);
+ total = 0;
+ for (i=0; i<8; ++i) {
+ total += vals[i].u64;
+ }
+ tt_assert(total >= (U64_LITERAL(1)<<60));
+ tt_assert(total <= (U64_LITERAL(1)<<62));
+
+ for (i=0; i<8; ++i) {
+ double ratio = ((double)vals[i].u64) / vals[2].u64;
+ tt_double_op(fabs(ratio - v[i]), <, .00001);
+ }
+
+ done:
+ ;
+}
+
+static void
+test_dir_random_weighted(void *testdata)
+{
+ int histogram[10];
+ uint64_t vals[10] = {3,1,2,4,6,0,7,5,8,9}, total=0;
+ u64_dbl_t inp[10];
+ int i, choice;
+ const int n = 50000;
+ double max_sq_error;
+ (void) testdata;
+
+ /* Try a ten-element array with values from 0 through 10. The values are
+ * in a scrambled order to make sure we don't depend on order. */
+ memset(histogram,0,sizeof(histogram));
+ for (i=0; i<10; ++i) {
+ inp[i].u64 = vals[i];
+ total += vals[i];
+ }
+ tt_u64_op(total, ==, 45);
+ for (i=0; i<n; ++i) {
+ choice = choose_array_element_by_weight(inp, 10);
+ tt_int_op(choice, >=, 0);
+ tt_int_op(choice, <, 10);
+ histogram[choice]++;
+ }
+
+ /* Now see if we chose things about frequently enough. */
+ max_sq_error = 0;
+ for (i=0; i<10; ++i) {
+ int expected = (int)(n*vals[i]/total);
+ double frac_diff = 0, sq;
+ TT_BLATHER((" %d : %5d vs %5d\n", (int)vals[i], histogram[i], expected));
+ if (expected)
+ frac_diff = (histogram[i] - expected) / ((double)expected);
+ else
+ tt_int_op(histogram[i], ==, 0);
+
+ sq = frac_diff * frac_diff;
+ if (sq > max_sq_error)
+ max_sq_error = sq;
+ }
+ /* It should almost always be much much less than this. If you want to
+ * figure out the odds, please feel free. */
+ tt_double_op(max_sq_error, <, .05);
+
+ /* Now try a singleton; do we choose it? */
+ for (i = 0; i < 100; ++i) {
+ choice = choose_array_element_by_weight(inp, 1);
+ tt_int_op(choice, ==, 0);
+ }
+
+ /* Now try an array of zeros. We should choose randomly. */
+ memset(histogram,0,sizeof(histogram));
+ for (i = 0; i < 5; ++i)
+ inp[i].u64 = 0;
+ for (i = 0; i < n; ++i) {
+ choice = choose_array_element_by_weight(inp, 5);
+ tt_int_op(choice, >=, 0);
+ tt_int_op(choice, <, 5);
+ histogram[choice]++;
+ }
+ /* Now see if we chose things about frequently enough. */
+ max_sq_error = 0;
+ for (i=0; i<5; ++i) {
+ int expected = n/5;
+ double frac_diff = 0, sq;
+ TT_BLATHER((" %d : %5d vs %5d\n", (int)vals[i], histogram[i], expected));
+ frac_diff = (histogram[i] - expected) / ((double)expected);
+ sq = frac_diff * frac_diff;
+ if (sq > max_sq_error)
+ max_sq_error = sq;
+ }
+ /* It should almost always be much much less than this. If you want to
+ * figure out the odds, please feel free. */
+ tt_double_op(max_sq_error, <, .05);
+ done:
+ ;
+}
+
+/* Function pointers for test_dir_clip_unmeasured_bw_kb() */
+
+static uint32_t alternate_clip_bw = 0;
+
+/**
+ * Generate a routerstatus for clip_unmeasured_bw_kb test; based on the
+ * v3_networkstatus ones.
+ */
+static vote_routerstatus_t *
+gen_routerstatus_for_umbw(int idx, time_t now)
+{
+ vote_routerstatus_t *vrs = NULL;
+ routerstatus_t *rs;
+ tor_addr_t addr_ipv6;
+ uint32_t max_unmeasured_bw_kb = (alternate_clip_bw > 0) ?
+ alternate_clip_bw : DEFAULT_MAX_UNMEASURED_BW_KB;
+
+ switch (idx) {
+ case 0:
+ /* Generate the first routerstatus. */
+ vrs = tor_malloc_zero(sizeof(vote_routerstatus_t));
+ rs = &vrs->status;
+ vrs->version = tor_strdup("0.1.2.14");
+ rs->published_on = now-1500;
+ strlcpy(rs->nickname, "router2", sizeof(rs->nickname));
+ memset(rs->identity_digest, 3, DIGEST_LEN);
+ memset(rs->descriptor_digest, 78, DIGEST_LEN);
+ rs->addr = 0x99008801;
+ rs->or_port = 443;
+ rs->dir_port = 8000;
+ /* all flags but running cleared */
+ rs->is_flagged_running = 1;
+ /*
+ * This one has measured bandwidth below the clip cutoff, and
+ * so shouldn't be clipped; we'll have to test that it isn't
+ * later.
+ */
+ vrs->has_measured_bw = 1;
+ rs->has_bandwidth = 1;
+ vrs->measured_bw_kb = rs->bandwidth_kb = max_unmeasured_bw_kb / 2;
+ break;
+ case 1:
+ /* Generate the second routerstatus. */
+ vrs = tor_malloc_zero(sizeof(vote_routerstatus_t));
+ rs = &vrs->status;
+ vrs->version = tor_strdup("0.2.0.5");
+ rs->published_on = now-1000;
+ strlcpy(rs->nickname, "router1", sizeof(rs->nickname));
+ memset(rs->identity_digest, 5, DIGEST_LEN);
+ memset(rs->descriptor_digest, 77, DIGEST_LEN);
+ rs->addr = 0x99009901;
+ rs->or_port = 443;
+ rs->dir_port = 0;
+ tor_addr_parse(&addr_ipv6, "[1:2:3::4]");
+ tor_addr_copy(&rs->ipv6_addr, &addr_ipv6);
+ rs->ipv6_orport = 4711;
+ rs->is_exit = rs->is_stable = rs->is_fast = rs->is_flagged_running =
+ rs->is_valid = rs->is_possible_guard = 1;
+ /*
+ * This one has measured bandwidth above the clip cutoff, and
+ * so shouldn't be clipped; we'll have to test that it isn't
+ * later.
+ */
+ vrs->has_measured_bw = 1;
+ rs->has_bandwidth = 1;
+ vrs->measured_bw_kb = rs->bandwidth_kb = 2 * max_unmeasured_bw_kb;
+ break;
+ case 2:
+ /* Generate the third routerstatus. */
+ vrs = tor_malloc_zero(sizeof(vote_routerstatus_t));
+ rs = &vrs->status;
+ vrs->version = tor_strdup("0.1.0.3");
+ rs->published_on = now-1000;
+ strlcpy(rs->nickname, "router3", sizeof(rs->nickname));
+ memset(rs->identity_digest, 0x33, DIGEST_LEN);
+ memset(rs->descriptor_digest, 79, DIGEST_LEN);
+ rs->addr = 0xAA009901;
+ rs->or_port = 400;
+ rs->dir_port = 9999;
+ rs->is_authority = rs->is_exit = rs->is_stable = rs->is_fast =
+ rs->is_flagged_running = rs->is_valid =
+ rs->is_possible_guard = 1;
+ /*
+ * This one has unmeasured bandwidth above the clip cutoff, and
+ * so should be clipped; we'll have to test that it isn't
+ * later.
+ */
+ vrs->has_measured_bw = 0;
+ rs->has_bandwidth = 1;
+ vrs->measured_bw_kb = 0;
+ rs->bandwidth_kb = 2 * max_unmeasured_bw_kb;
+ break;
+ case 3:
+ /* Generate a fourth routerstatus that is not running. */
+ vrs = tor_malloc_zero(sizeof(vote_routerstatus_t));
+ rs = &vrs->status;
+ vrs->version = tor_strdup("0.1.6.3");
+ rs->published_on = now-1000;
+ strlcpy(rs->nickname, "router4", sizeof(rs->nickname));
+ memset(rs->identity_digest, 0x34, DIGEST_LEN);
+ memset(rs->descriptor_digest, 47, DIGEST_LEN);
+ rs->addr = 0xC0000203;
+ rs->or_port = 500;
+ rs->dir_port = 1999;
+ /* all flags but running cleared */
+ rs->is_flagged_running = 1;
+ /*
+ * This one has unmeasured bandwidth below the clip cutoff, and
+ * so shouldn't be clipped; we'll have to test that it isn't
+ * later.
+ */
+ vrs->has_measured_bw = 0;
+ rs->has_bandwidth = 1;
+ vrs->measured_bw_kb = 0;
+ rs->bandwidth_kb = max_unmeasured_bw_kb / 2;
+ break;
+ case 4:
+ /* No more for this test; return NULL */
+ vrs = NULL;
+ break;
+ default:
+ /* Shouldn't happen */
+ test_assert(0);
+ }
+ if (vrs) {
+ vrs->microdesc = tor_malloc_zero(sizeof(vote_microdesc_hash_t));
+ tor_asprintf(&vrs->microdesc->microdesc_hash_line,
+ "m 9,10,11,12,13,14,15,16,17 "
+ "sha256=xyzajkldsdsajdadlsdjaslsdksdjlsdjsdaskdaaa%d\n",
+ idx);
+ }
+
+ done:
+ return vrs;
+}
+
+/** Apply tweaks to the vote list for each voter; for the umbw test this is
+ * just adding the right consensus methods to let clipping happen */
+static int
+vote_tweaks_for_umbw(networkstatus_t *v, int voter, time_t now)
+{
+ char *maxbw_param = NULL;
+ int rv = 0;
+
+ test_assert(v);
+ (void)voter;
+ (void)now;
+
+ test_assert(v->supported_methods);
+ SMARTLIST_FOREACH(v->supported_methods, char *, c, tor_free(c));
+ smartlist_clear(v->supported_methods);
+ /* Method 17 is MIN_METHOD_TO_CLIP_UNMEASURED_BW_KB */
+ smartlist_split_string(v->supported_methods,
+ "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17",
+ NULL, 0, -1);
+ /* If we're using a non-default clip bandwidth, add it to net_params */
+ if (alternate_clip_bw > 0) {
+ tor_asprintf(&maxbw_param, "maxunmeasuredbw=%u", alternate_clip_bw);
+ test_assert(maxbw_param);
+ if (maxbw_param) {
+ smartlist_add(v->net_params, maxbw_param);
+ rv = 1;
+ }
+ }
+
+ done:
+ return rv;
+}
+
+/**
+ * Test a parsed vote_routerstatus_t for umbw test.
+ */
+static void
+test_vrs_for_umbw(vote_routerstatus_t *vrs, int voter, time_t now)
+{
+ routerstatus_t *rs;
+ tor_addr_t addr_ipv6;
+ uint32_t max_unmeasured_bw_kb = (alternate_clip_bw > 0) ?
+ alternate_clip_bw : DEFAULT_MAX_UNMEASURED_BW_KB;
+
+ (void)voter;
+ test_assert(vrs);
+ rs = &(vrs->status);
+ test_assert(rs);
+
+ /* Split out by digests to test */
+ if (tor_memeq(rs->identity_digest,
+ "\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3"
+ "\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3",
+ DIGEST_LEN)) {
+ /*
+ * Check the first routerstatus - measured bandwidth below the clip
+ * cutoff.
+ */
+ test_streq(vrs->version, "0.1.2.14");
+ test_eq(rs->published_on, now-1500);
+ test_streq(rs->nickname, "router2");
+ test_memeq(rs->identity_digest,
+ "\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3"
+ "\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3",
+ DIGEST_LEN);
+ test_memeq(rs->descriptor_digest, "NNNNNNNNNNNNNNNNNNNN", DIGEST_LEN);
+ test_eq(rs->addr, 0x99008801);
+ test_eq(rs->or_port, 443);
+ test_eq(rs->dir_port, 8000);
+ test_assert(rs->has_bandwidth);
+ test_assert(vrs->has_measured_bw);
+ test_eq(rs->bandwidth_kb, max_unmeasured_bw_kb / 2);
+ test_eq(vrs->measured_bw_kb, max_unmeasured_bw_kb / 2);
+ } else if (tor_memeq(rs->identity_digest,
+ "\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5"
+ "\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5",
+ DIGEST_LEN)) {
+
+ /*
+ * Check the second routerstatus - measured bandwidth above the clip
+ * cutoff.
+ */
+ test_streq(vrs->version, "0.2.0.5");
+ test_eq(rs->published_on, now-1000);
+ test_streq(rs->nickname, "router1");
+ test_memeq(rs->identity_digest,
+ "\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5"
+ "\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5",
+ DIGEST_LEN);
+ test_memeq(rs->descriptor_digest, "MMMMMMMMMMMMMMMMMMMM", DIGEST_LEN);
+ test_eq(rs->addr, 0x99009901);
+ test_eq(rs->or_port, 443);
+ test_eq(rs->dir_port, 0);
+ tor_addr_parse(&addr_ipv6, "[1:2:3::4]");
+ test_assert(tor_addr_eq(&rs->ipv6_addr, &addr_ipv6));
+ test_eq(rs->ipv6_orport, 4711);
+ test_assert(rs->has_bandwidth);
+ test_assert(vrs->has_measured_bw);
+ test_eq(rs->bandwidth_kb, max_unmeasured_bw_kb * 2);
+ test_eq(vrs->measured_bw_kb, max_unmeasured_bw_kb * 2);
+ } else if (tor_memeq(rs->identity_digest,
+ "\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33"
+ "\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33",
+ DIGEST_LEN)) {
+ /*
+ * Check the third routerstatus - unmeasured bandwidth above the clip
+ * cutoff; this one should be clipped later on in the consensus, but
+ * appears unclipped in the vote.
+ */
+ test_assert(rs->has_bandwidth);
+ test_assert(!(vrs->has_measured_bw));
+ test_eq(rs->bandwidth_kb, max_unmeasured_bw_kb * 2);
+ test_eq(vrs->measured_bw_kb, 0);
+ } else if (tor_memeq(rs->identity_digest,
+ "\x34\x34\x34\x34\x34\x34\x34\x34\x34\x34"
+ "\x34\x34\x34\x34\x34\x34\x34\x34\x34\x34",
+ DIGEST_LEN)) {
+ /*
+ * Check the fourth routerstatus - unmeasured bandwidth below the clip
+ * cutoff; this one should not be clipped.
+ */
+ test_assert(rs->has_bandwidth);
+ test_assert(!(vrs->has_measured_bw));
+ test_eq(rs->bandwidth_kb, max_unmeasured_bw_kb / 2);
+ test_eq(vrs->measured_bw_kb, 0);
+ } else {
+ test_assert(0);
+ }
+
+ done:
+ return;
+}
+
+/**
+ * Test a consensus for v3_networkstatus_test
+ */
+static void
+test_consensus_for_umbw(networkstatus_t *con, time_t now)
+{
+ (void)now;
+
+ test_assert(con);
+ test_assert(!con->cert);
+ // test_assert(con->consensus_method >= MIN_METHOD_TO_CLIP_UNMEASURED_BW_KB);
+ test_assert(con->consensus_method >= 16);
+ test_eq(4, smartlist_len(con->routerstatus_list));
+ /* There should be four listed routers; all voters saw the same in this */
+
+ done:
+ return;
+}
+
+/**
+ * Test a router list entry for umbw test
+ */
+static void
+test_routerstatus_for_umbw(routerstatus_t *rs, time_t now)
+{
+ tor_addr_t addr_ipv6;
+ uint32_t max_unmeasured_bw_kb = (alternate_clip_bw > 0) ?
+ alternate_clip_bw : DEFAULT_MAX_UNMEASURED_BW_KB;
+
+ test_assert(rs);
+
+ /* There should be four listed routers, as constructed above */
+ if (tor_memeq(rs->identity_digest,
+ "\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3"
+ "\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3",
+ DIGEST_LEN)) {
+ test_memeq(rs->identity_digest,
+ "\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3"
+ "\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3",
+ DIGEST_LEN);
+ test_memeq(rs->descriptor_digest, "NNNNNNNNNNNNNNNNNNNN", DIGEST_LEN);
+ test_assert(!rs->is_authority);
+ test_assert(!rs->is_exit);
+ test_assert(!rs->is_fast);
+ test_assert(!rs->is_possible_guard);
+ test_assert(!rs->is_stable);
+ /* (If it wasn't running it wouldn't be here) */
+ test_assert(rs->is_flagged_running);
+ test_assert(!rs->is_valid);
+ test_assert(!rs->is_named);
+ /* This one should have measured bandwidth below the clip cutoff */
+ test_assert(rs->has_bandwidth);
+ test_eq(rs->bandwidth_kb, max_unmeasured_bw_kb / 2);
+ test_assert(!(rs->bw_is_unmeasured));
+ } else if (tor_memeq(rs->identity_digest,
+ "\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5"
+ "\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5",
+ DIGEST_LEN)) {
+ /* This one showed up in 3 digests. Twice with ID 'M', once with 'Z'. */
+ test_memeq(rs->identity_digest,
+ "\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5"
+ "\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5",
+ DIGEST_LEN);
+ test_streq(rs->nickname, "router1");
+ test_memeq(rs->descriptor_digest, "MMMMMMMMMMMMMMMMMMMM", DIGEST_LEN);
+ test_eq(rs->published_on, now-1000);
+ test_eq(rs->addr, 0x99009901);
+ test_eq(rs->or_port, 443);
+ test_eq(rs->dir_port, 0);
+ tor_addr_parse(&addr_ipv6, "[1:2:3::4]");
+ test_assert(tor_addr_eq(&rs->ipv6_addr, &addr_ipv6));
+ test_eq(rs->ipv6_orport, 4711);
+ test_assert(!rs->is_authority);
+ test_assert(rs->is_exit);
+ test_assert(rs->is_fast);
+ test_assert(rs->is_possible_guard);
+ test_assert(rs->is_stable);
+ test_assert(rs->is_flagged_running);
+ test_assert(rs->is_valid);
+ test_assert(!rs->is_named);
+ /* This one should have measured bandwidth above the clip cutoff */
+ test_assert(rs->has_bandwidth);
+ test_eq(rs->bandwidth_kb, max_unmeasured_bw_kb * 2);
+ test_assert(!(rs->bw_is_unmeasured));
+ } else if (tor_memeq(rs->identity_digest,
+ "\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33"
+ "\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33",
+ DIGEST_LEN)) {
+ /*
+ * This one should have unmeasured bandwidth above the clip cutoff,
+ * and so should be clipped
+ */
+ test_assert(rs->has_bandwidth);
+ test_eq(rs->bandwidth_kb, max_unmeasured_bw_kb);
+ test_assert(rs->bw_is_unmeasured);
+ } else if (tor_memeq(rs->identity_digest,
+ "\x34\x34\x34\x34\x34\x34\x34\x34\x34\x34"
+ "\x34\x34\x34\x34\x34\x34\x34\x34\x34\x34",
+ DIGEST_LEN)) {
+ /*
+ * This one should have unmeasured bandwidth below the clip cutoff,
+ * and so should not be clipped
+ */
+ test_assert(rs->has_bandwidth);
+ test_eq(rs->bandwidth_kb, max_unmeasured_bw_kb / 2);
+ test_assert(rs->bw_is_unmeasured);
+ } else {
+ /* Weren't expecting this... */
+ test_assert(0);
+ }
+
+ done:
+ return;
+}
+
+/**
+ * Compute a consensus involving clipping unmeasured bandwidth with consensus
+ * method 17; this uses the same test_a_networkstatus() function that the
+ * v3_networkstatus test uses.
+ */
+
+static void
+test_dir_clip_unmeasured_bw_kb(void)
+{
+ /* Run the test with the default clip bandwidth */
+ alternate_clip_bw = 0;
+ test_a_networkstatus(gen_routerstatus_for_umbw,
+ vote_tweaks_for_umbw,
+ test_vrs_for_umbw,
+ test_consensus_for_umbw,
+ test_routerstatus_for_umbw);
+}
+
+/**
+ * This version of test_dir_clip_unmeasured_bw_kb() uses a non-default choice
+ * of clip bandwidth.
+ */
+
+static void
+test_dir_clip_unmeasured_bw_kb_alt(void)
+{
+ /*
+ * Try a different one; this value is chosen so that the below-the-cutoff
+ * unmeasured nodes the test uses, at alternate_clip_bw / 2, will be above
+ * DEFAULT_MAX_UNMEASURED_BW_KB and if the consensus incorrectly uses that
+ * cutoff it will fail the test.
+ */
+ alternate_clip_bw = 3 * DEFAULT_MAX_UNMEASURED_BW_KB;
+ test_a_networkstatus(gen_routerstatus_for_umbw,
+ vote_tweaks_for_umbw,
+ test_vrs_for_umbw,
+ test_consensus_for_umbw,
+ test_routerstatus_for_umbw);
+}
+
+static void
+test_dir_fmt_control_ns(void *arg)
+{
+ char *s = NULL;
+ routerstatus_t rs;
+ (void)arg;
+
+ memset(&rs, 0, sizeof(rs));
+ rs.published_on = 1364925198;
+ strlcpy(rs.nickname, "TetsuoMilk", sizeof(rs.nickname));
+ memcpy(rs.identity_digest, "Stately, plump Buck ", DIGEST_LEN);
+ memcpy(rs.descriptor_digest, "Mulligan came up fro", DIGEST_LEN);
+ rs.addr = 0x20304050;
+ rs.or_port = 9001;
+ rs.dir_port = 9002;
+ rs.is_exit = 1;
+ rs.is_fast = 1;
+ rs.is_flagged_running = 1;
+ rs.has_bandwidth = 1;
+ rs.bandwidth_kb = 1000;
+
+ s = networkstatus_getinfo_helper_single(&rs);
+ tt_assert(s);
+ tt_str_op(s, ==,
+ "r TetsuoMilk U3RhdGVseSwgcGx1bXAgQnVjayA "
+ "TXVsbGlnYW4gY2FtZSB1cCBmcm8 2013-04-02 17:53:18 "
+ "32.48.64.80 9001 9002\n"
+ "s Exit Fast Running V2Dir\n"
+ "w Bandwidth=1000\n");
+
+ done:
+ tor_free(s);
+}
+
+static void
+test_dir_http_handling(void *args)
+{
+ char *url = NULL;
+ (void)args;
+
+ /* Parse http url tests: */
+ /* Good headers */
+ test_eq(parse_http_url("GET /tor/a/b/c.txt HTTP/1.1\r\n"
+ "Host: example.com\r\n"
+ "User-Agent: Mozilla/5.0 (Windows;"
+ " U; Windows NT 6.1; en-US; rv:1.9.1.5)\r\n",
+ &url), 0);
+ test_streq(url, "/tor/a/b/c.txt");
+ tor_free(url);
+
+ test_eq(parse_http_url("GET /tor/a/b/c.txt HTTP/1.0\r\n", &url), 0);
+ test_streq(url, "/tor/a/b/c.txt");
+ tor_free(url);
+
+ test_eq(parse_http_url("GET /tor/a/b/c.txt HTTP/1.600\r\n", &url), 0);
+ test_streq(url, "/tor/a/b/c.txt");
+ tor_free(url);
+
+ /* Should prepend '/tor/' to url if required */
+ test_eq(parse_http_url("GET /a/b/c.txt HTTP/1.1\r\n"
+ "Host: example.com\r\n"
+ "User-Agent: Mozilla/5.0 (Windows;"
+ " U; Windows NT 6.1; en-US; rv:1.9.1.5)\r\n",
+ &url), 0);
+ test_streq(url, "/tor/a/b/c.txt");
+ tor_free(url);
+
+ /* Bad headers -- no HTTP/1.x*/
+ test_eq(parse_http_url("GET /a/b/c.txt\r\n"
+ "Host: example.com\r\n"
+ "User-Agent: Mozilla/5.0 (Windows;"
+ " U; Windows NT 6.1; en-US; rv:1.9.1.5)\r\n",
+ &url), -1);
+ tt_assert(!url);
+
+ /* Bad headers */
+ test_eq(parse_http_url("GET /a/b/c.txt\r\n"
+ "Host: example.com\r\n"
+ "User-Agent: Mozilla/5.0 (Windows;"
+ " U; Windows NT 6.1; en-US; rv:1.9.1.5)\r\n",
+ &url), -1);
+ tt_assert(!url);
+
+ test_eq(parse_http_url("GET /tor/a/b/c.txt", &url), -1);
+ tt_assert(!url);
+
+ test_eq(parse_http_url("GET /tor/a/b/c.txt HTTP/1.1", &url), -1);
+ tt_assert(!url);
+
+ test_eq(parse_http_url("GET /tor/a/b/c.txt HTTP/1.1x\r\n", &url), -1);
+ tt_assert(!url);
+
+ test_eq(parse_http_url("GET /tor/a/b/c.txt HTTP/1.", &url), -1);
+ tt_assert(!url);
+
+ test_eq(parse_http_url("GET /tor/a/b/c.txt HTTP/1.\r", &url), -1);
+ tt_assert(!url);
+
+ done:
+ tor_free(url);
+}
+
#define DIR_LEGACY(name) \
{ #name, legacy_test_helper, TT_FORK, &legacy_setup, test_dir_ ## name }
-#define DIR(name) \
- { #name, test_dir_##name, 0, NULL, NULL }
+#define DIR(name,flags) \
+ { #name, test_dir_##name, (flags), NULL, NULL }
struct testcase_t dir_tests[] = {
DIR_LEGACY(nicknames),
DIR_LEGACY(formats),
DIR_LEGACY(versions),
DIR_LEGACY(fp_pairs),
- DIR(split_fps),
- DIR_LEGACY(measured_bw),
+ DIR(split_fps, 0),
+ DIR_LEGACY(measured_bw_kb),
+ DIR_LEGACY(measured_bw_kb_cache),
DIR_LEGACY(param_voting),
DIR_LEGACY(v3_networkstatus),
+ DIR(random_weighted, 0),
+ DIR(scale_bw, 0),
+ DIR_LEGACY(clip_unmeasured_bw_kb),
+ DIR_LEGACY(clip_unmeasured_bw_kb_alt),
+ DIR(fmt_control_ns, 0),
+ DIR(http_handling, 0),
END_OF_TESTCASES
};
diff --git a/src/test/test_extorport.c b/src/test/test_extorport.c
new file mode 100644
index 000000000..93c8f77d5
--- /dev/null
+++ b/src/test/test_extorport.c
@@ -0,0 +1,607 @@
+/* Copyright (c) 2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#define CONNECTION_PRIVATE
+#define EXT_ORPORT_PRIVATE
+#define MAIN_PRIVATE
+#include "or.h"
+#include "buffers.h"
+#include "connection.h"
+#include "connection_or.h"
+#include "config.h"
+#include "control.h"
+#include "ext_orport.h"
+#include "main.h"
+#include "test.h"
+
+/* Test connection_or_remove_from_ext_or_id_map and
+ * connection_or_set_ext_or_identifier */
+static void
+test_ext_or_id_map(void *arg)
+{
+ or_connection_t *c1 = NULL, *c2 = NULL, *c3 = NULL;
+ char *idp = NULL, *idp2 = NULL;
+ (void)arg;
+
+ /* pre-initialization */
+ tt_ptr_op(NULL, ==, connection_or_get_by_ext_or_id("xxxxxxxxxxxxxxxxxxxx"));
+
+ c1 = or_connection_new(CONN_TYPE_EXT_OR, AF_INET);
+ c2 = or_connection_new(CONN_TYPE_EXT_OR, AF_INET);
+ c3 = or_connection_new(CONN_TYPE_OR, AF_INET);
+
+ tt_ptr_op(c1->ext_or_conn_id, !=, NULL);
+ tt_ptr_op(c2->ext_or_conn_id, !=, NULL);
+ tt_ptr_op(c3->ext_or_conn_id, ==, NULL);
+
+ tt_ptr_op(c1, ==, connection_or_get_by_ext_or_id(c1->ext_or_conn_id));
+ tt_ptr_op(c2, ==, connection_or_get_by_ext_or_id(c2->ext_or_conn_id));
+ tt_ptr_op(NULL, ==, connection_or_get_by_ext_or_id("xxxxxxxxxxxxxxxxxxxx"));
+
+ idp = tor_memdup(c2->ext_or_conn_id, EXT_OR_CONN_ID_LEN);
+
+ /* Give c2 a new ID. */
+ connection_or_set_ext_or_identifier(c2);
+ test_mem_op(idp, !=, c2->ext_or_conn_id, EXT_OR_CONN_ID_LEN);
+ idp2 = tor_memdup(c2->ext_or_conn_id, EXT_OR_CONN_ID_LEN);
+ tt_assert(!tor_digest_is_zero(idp2));
+
+ tt_ptr_op(NULL, ==, connection_or_get_by_ext_or_id(idp));
+ tt_ptr_op(c2, ==, connection_or_get_by_ext_or_id(idp2));
+
+ /* Now remove it. */
+ connection_or_remove_from_ext_or_id_map(c2);
+ tt_ptr_op(NULL, ==, connection_or_get_by_ext_or_id(idp));
+ tt_ptr_op(NULL, ==, connection_or_get_by_ext_or_id(idp2));
+
+ done:
+ if (c1)
+ connection_free_(TO_CONN(c1));
+ if (c2)
+ connection_free_(TO_CONN(c2));
+ if (c3)
+ connection_free_(TO_CONN(c3));
+ tor_free(idp);
+ tor_free(idp2);
+ connection_or_clear_ext_or_id_map();
+}
+
+/* Simple connection_write_to_buf_impl_ replacement that unconditionally
+ * writes to outbuf. */
+static void
+connection_write_to_buf_impl_replacement(const char *string, size_t len,
+ connection_t *conn, int zlib)
+{
+ (void) zlib;
+
+ tor_assert(string);
+ tor_assert(conn);
+ write_to_buf(string, len, conn->outbuf);
+}
+
+static char *
+buf_get_contents(buf_t *buf, size_t *sz_out)
+{
+ char *out;
+ *sz_out = buf_datalen(buf);
+ if (*sz_out >= ULONG_MAX)
+ return NULL; /* C'mon, really? */
+ out = tor_malloc(*sz_out + 1);
+ if (fetch_from_buf(out, (unsigned long)*sz_out, buf) != 0) {
+ tor_free(out);
+ return NULL;
+ }
+ out[*sz_out] = '\0'; /* Hopefully gratuitous. */
+ return out;
+}
+
+static void
+test_ext_or_write_command(void *arg)
+{
+ or_connection_t *c1;
+ char *cp = NULL;
+ char *buf = NULL;
+ size_t sz;
+
+ (void) arg;
+ MOCK(connection_write_to_buf_impl_,
+ connection_write_to_buf_impl_replacement);
+
+ c1 = or_connection_new(CONN_TYPE_EXT_OR, AF_INET);
+ tt_assert(c1);
+
+ /* Length too long */
+ tt_int_op(connection_write_ext_or_command(TO_CONN(c1), 100, "X", 100000),
+ <, 0);
+
+ /* Empty command */
+ tt_int_op(connection_write_ext_or_command(TO_CONN(c1), 0x99, NULL, 0),
+ ==, 0);
+ cp = buf_get_contents(TO_CONN(c1)->outbuf, &sz);
+ tt_int_op(sz, ==, 4);
+ test_mem_op(cp, ==, "\x00\x99\x00\x00", 4);
+ tor_free(cp);
+
+ /* Medium command. */
+ tt_int_op(connection_write_ext_or_command(TO_CONN(c1), 0x99,
+ "Wai\0Hello", 9), ==, 0);
+ cp = buf_get_contents(TO_CONN(c1)->outbuf, &sz);
+ tt_int_op(sz, ==, 13);
+ test_mem_op(cp, ==, "\x00\x99\x00\x09Wai\x00Hello", 13);
+ tor_free(cp);
+
+ /* Long command */
+ buf = tor_malloc(65535);
+ memset(buf, 'x', 65535);
+ tt_int_op(connection_write_ext_or_command(TO_CONN(c1), 0xf00d,
+ buf, 65535), ==, 0);
+ cp = buf_get_contents(TO_CONN(c1)->outbuf, &sz);
+ tt_int_op(sz, ==, 65539);
+ test_mem_op(cp, ==, "\xf0\x0d\xff\xff", 4);
+ test_mem_op(cp+4, ==, buf, 65535);
+ tor_free(cp);
+
+ done:
+ if (c1)
+ connection_free_(TO_CONN(c1));
+ tor_free(cp);
+ tor_free(buf);
+ UNMOCK(connection_write_to_buf_impl_);
+}
+
+static int
+write_bytes_to_file_fail(const char *fname, const char *str, size_t len,
+ int bin)
+{
+ (void) fname;
+ (void) str;
+ (void) len;
+ (void) bin;
+
+ return -1;
+}
+
+static void
+test_ext_or_init_auth(void *arg)
+{
+ or_options_t *options = get_options_mutable();
+ const char *fn;
+ char *cp = NULL;
+ struct stat st;
+ char cookie0[32];
+ (void)arg;
+
+ /* Check default filename location */
+ tor_free(options->DataDirectory);
+ options->DataDirectory = tor_strdup("foo");
+ cp = get_ext_or_auth_cookie_file_name();
+ tt_str_op(cp, ==, "foo"PATH_SEPARATOR"extended_orport_auth_cookie");
+ tor_free(cp);
+
+ /* Shouldn't be initialized already, or our tests will be a bit
+ * meaningless */
+ ext_or_auth_cookie = tor_malloc_zero(32);
+ test_assert(tor_mem_is_zero((char*)ext_or_auth_cookie, 32));
+
+ /* Now make sure we use a temporary file */
+ fn = get_fname("ext_cookie_file");
+ options->ExtORPortCookieAuthFile = tor_strdup(fn);
+ cp = get_ext_or_auth_cookie_file_name();
+ tt_str_op(cp, ==, fn);
+ tor_free(cp);
+
+ /* Test the initialization function with a broken
+ write_bytes_to_file(). See if the problem is handled properly. */
+ MOCK(write_bytes_to_file, write_bytes_to_file_fail);
+ tt_int_op(-1, ==, init_ext_or_cookie_authentication(1));
+ tt_int_op(ext_or_auth_cookie_is_set, ==, 0);
+ UNMOCK(write_bytes_to_file);
+
+ /* Now do the actual initialization. */
+ tt_int_op(0, ==, init_ext_or_cookie_authentication(1));
+ tt_int_op(ext_or_auth_cookie_is_set, ==, 1);
+ cp = read_file_to_str(fn, RFTS_BIN, &st);
+ tt_ptr_op(cp, !=, NULL);
+ tt_u64_op((uint64_t)st.st_size, ==, 64);
+ test_memeq(cp, "! Extended ORPort Auth Cookie !\x0a", 32);
+ test_memeq(cp+32, ext_or_auth_cookie, 32);
+ memcpy(cookie0, ext_or_auth_cookie, 32);
+ test_assert(!tor_mem_is_zero((char*)ext_or_auth_cookie, 32));
+
+ /* Operation should be idempotent. */
+ tt_int_op(0, ==, init_ext_or_cookie_authentication(1));
+ test_memeq(cookie0, ext_or_auth_cookie, 32);
+
+ done:
+ tor_free(cp);
+ ext_orport_free_all();
+}
+
+static void
+test_ext_or_cookie_auth(void *arg)
+{
+ char *reply=NULL, *reply2=NULL, *client_hash=NULL, *client_hash2=NULL;
+ size_t reply_len=0;
+ char hmac1[32], hmac2[32];
+
+ const char client_nonce[32] =
+ "Who is the third who walks alway";
+ char server_hash_input[] =
+ "ExtORPort authentication server-to-client hash"
+ "Who is the third who walks alway"
+ "................................";
+ char client_hash_input[] =
+ "ExtORPort authentication client-to-server hash"
+ "Who is the third who walks alway"
+ "................................";
+
+ (void)arg;
+
+ tt_int_op(strlen(client_hash_input), ==, 46+32+32);
+ tt_int_op(strlen(server_hash_input), ==, 46+32+32);
+
+ ext_or_auth_cookie = tor_malloc_zero(32);
+ memcpy(ext_or_auth_cookie, "s beside you? When I count, ther", 32);
+ ext_or_auth_cookie_is_set = 1;
+
+ /* For this authentication, the client sends 32 random bytes (ClientNonce)
+ * The server replies with 32 byte ServerHash and 32 byte ServerNonce,
+ * where ServerHash is:
+ * HMAC-SHA256(CookieString,
+ * "ExtORPort authentication server-to-client hash" | ClientNonce |
+ * ServerNonce)"
+ * The client must reply with 32-byte ClientHash, which we compute as:
+ * ClientHash is computed as:
+ * HMAC-SHA256(CookieString,
+ * "ExtORPort authentication client-to-server hash" | ClientNonce |
+ * ServerNonce)
+ */
+
+ /* Wrong length */
+ tt_int_op(-1, ==,
+ handle_client_auth_nonce(client_nonce, 33, &client_hash, &reply,
+ &reply_len));
+ tt_int_op(-1, ==,
+ handle_client_auth_nonce(client_nonce, 31, &client_hash, &reply,
+ &reply_len));
+
+ /* Now let's try this for real! */
+ tt_int_op(0, ==,
+ handle_client_auth_nonce(client_nonce, 32, &client_hash, &reply,
+ &reply_len));
+ tt_int_op(reply_len, ==, 64);
+ tt_ptr_op(reply, !=, NULL);
+ tt_ptr_op(client_hash, !=, NULL);
+ /* Fill in the server nonce into the hash inputs... */
+ memcpy(server_hash_input+46+32, reply+32, 32);
+ memcpy(client_hash_input+46+32, reply+32, 32);
+ /* Check the HMACs are correct... */
+ crypto_hmac_sha256(hmac1, (char*)ext_or_auth_cookie, 32, server_hash_input,
+ 46+32+32);
+ crypto_hmac_sha256(hmac2, (char*)ext_or_auth_cookie, 32, client_hash_input,
+ 46+32+32);
+ test_memeq(hmac1, reply, 32);
+ test_memeq(hmac2, client_hash, 32);
+
+ /* Now do it again and make sure that the results are *different* */
+ tt_int_op(0, ==,
+ handle_client_auth_nonce(client_nonce, 32, &client_hash2, &reply2,
+ &reply_len));
+ test_memneq(reply2, reply, reply_len);
+ test_memneq(client_hash2, client_hash, 32);
+ /* But that this one checks out too. */
+ memcpy(server_hash_input+46+32, reply2+32, 32);
+ memcpy(client_hash_input+46+32, reply2+32, 32);
+ /* Check the HMACs are correct... */
+ crypto_hmac_sha256(hmac1, (char*)ext_or_auth_cookie, 32, server_hash_input,
+ 46+32+32);
+ crypto_hmac_sha256(hmac2, (char*)ext_or_auth_cookie, 32, client_hash_input,
+ 46+32+32);
+ test_memeq(hmac1, reply2, 32);
+ test_memeq(hmac2, client_hash2, 32);
+
+ done:
+ tor_free(reply);
+ tor_free(client_hash);
+ tor_free(reply2);
+ tor_free(client_hash2);
+}
+
+static int
+crypto_rand_return_tse_str(char *to, size_t n)
+{
+ if (n != 32) {
+ TT_FAIL(("Asked for %d bytes, not 32", (int)n));
+ return -1;
+ }
+ memcpy(to, "te road There is always another ", 32);
+ return 0;
+}
+
+static void
+test_ext_or_cookie_auth_testvec(void *arg)
+{
+ char *reply=NULL, *client_hash=NULL;
+ size_t reply_len;
+ char *mem_op_hex_tmp=NULL;
+
+ const char client_nonce[] = "But when I look ahead up the whi";
+ (void)arg;
+
+ ext_or_auth_cookie = tor_malloc_zero(32);
+ memcpy(ext_or_auth_cookie, "Gliding wrapt in a brown mantle," , 32);
+ ext_or_auth_cookie_is_set = 1;
+
+ MOCK(crypto_rand, crypto_rand_return_tse_str);
+
+ tt_int_op(0, ==,
+ handle_client_auth_nonce(client_nonce, 32, &client_hash, &reply,
+ &reply_len));
+ tt_ptr_op(reply, !=, NULL );
+ tt_uint_op(reply_len, ==, 64);
+ test_memeq(reply+32, "te road There is always another ", 32);
+ /* HMACSHA256("Gliding wrapt in a brown mantle,"
+ * "ExtORPort authentication server-to-client hash"
+ * "But when I look ahead up the write road There is always another ");
+ */
+ test_memeq_hex(reply,
+ "ec80ed6e546d3b36fdfc22fe1315416b"
+ "029f1ade7610d910878b62eeb7403821");
+ /* HMACSHA256("Gliding wrapt in a brown mantle,"
+ * "ExtORPort authentication client-to-server hash"
+ * "But when I look ahead up the write road There is always another ");
+ * (Both values computed using Python CLI.)
+ */
+ test_memeq_hex(client_hash,
+ "ab391732dd2ed968cd40c087d1b1f25b"
+ "33b3cd77ff79bd80c2074bbf438119a2");
+
+ done:
+ UNMOCK(crypto_rand);
+ tor_free(reply);
+ tor_free(client_hash);
+ tor_free(mem_op_hex_tmp);
+}
+
+static void
+ignore_bootstrap_problem(const char *warn, int reason,
+ or_connection_t *conn)
+{
+ (void)warn;
+ (void)reason;
+ (void)conn;
+}
+
+static int is_reading = 1;
+static int handshake_start_called = 0;
+
+static void
+note_read_stopped(connection_t *conn)
+{
+ (void)conn;
+ is_reading=0;
+}
+static void
+note_read_started(connection_t *conn)
+{
+ (void)conn;
+ is_reading=1;
+}
+static int
+handshake_start(or_connection_t *conn, int receiving)
+{
+ if (!conn || !receiving)
+ TT_FAIL(("Bad arguments to handshake_start"));
+ handshake_start_called = 1;
+ return 0;
+}
+
+#define WRITE(s,n) \
+ do { \
+ write_to_buf((s), (n), TO_CONN(conn)->inbuf); \
+ } while (0)
+#define CONTAINS(s,n) \
+ do { \
+ tt_int_op((n), <=, sizeof(b)); \
+ tt_int_op(buf_datalen(TO_CONN(conn)->outbuf), ==, (n)); \
+ if ((n)) { \
+ fetch_from_buf(b, (n), TO_CONN(conn)->outbuf); \
+ test_memeq(b, (s), (n)); \
+ } \
+ } while (0)
+
+/* Helper: Do a successful Extended ORPort authentication handshake. */
+static void
+do_ext_or_handshake(or_connection_t *conn)
+{
+ char b[256];
+
+ tt_int_op(0, ==, connection_ext_or_start_auth(conn));
+ CONTAINS("\x01\x00", 2);
+ WRITE("\x01", 1);
+ WRITE("But when I look ahead up the whi", 32);
+ MOCK(crypto_rand, crypto_rand_return_tse_str);
+ tt_int_op(0, ==, connection_ext_or_process_inbuf(conn));
+ UNMOCK(crypto_rand);
+ tt_int_op(TO_CONN(conn)->state, ==, EXT_OR_CONN_STATE_AUTH_WAIT_CLIENT_HASH);
+ CONTAINS("\xec\x80\xed\x6e\x54\x6d\x3b\x36\xfd\xfc\x22\xfe\x13\x15\x41\x6b"
+ "\x02\x9f\x1a\xde\x76\x10\xd9\x10\x87\x8b\x62\xee\xb7\x40\x38\x21"
+ "te road There is always another ", 64);
+ /* Send the right response this time. */
+ WRITE("\xab\x39\x17\x32\xdd\x2e\xd9\x68\xcd\x40\xc0\x87\xd1\xb1\xf2\x5b"
+ "\x33\xb3\xcd\x77\xff\x79\xbd\x80\xc2\x07\x4b\xbf\x43\x81\x19\xa2",
+ 32);
+ tt_int_op(0, ==, connection_ext_or_process_inbuf(conn));
+ CONTAINS("\x01", 1);
+ tt_assert(! TO_CONN(conn)->marked_for_close);
+ tt_int_op(TO_CONN(conn)->state, ==, EXT_OR_CONN_STATE_OPEN);
+
+ done: ;
+}
+
+static void
+test_ext_or_handshake(void *arg)
+{
+ or_connection_t *conn=NULL;
+ char b[256];
+
+ (void) arg;
+ MOCK(connection_write_to_buf_impl_,
+ connection_write_to_buf_impl_replacement);
+ /* Use same authenticators as for test_ext_or_cookie_auth_testvec */
+ ext_or_auth_cookie = tor_malloc_zero(32);
+ memcpy(ext_or_auth_cookie, "Gliding wrapt in a brown mantle," , 32);
+ ext_or_auth_cookie_is_set = 1;
+
+ init_connection_lists();
+
+ conn = or_connection_new(CONN_TYPE_EXT_OR, AF_INET);
+ tt_int_op(0, ==, connection_ext_or_start_auth(conn));
+ /* The server starts by telling us about the one supported authtype. */
+ CONTAINS("\x01\x00", 2);
+ /* Say the client hasn't responded yet. */
+ tt_int_op(0, ==, connection_ext_or_process_inbuf(conn));
+ /* Let's say the client replies badly. */
+ WRITE("\x99", 1);
+ tt_int_op(-1, ==, connection_ext_or_process_inbuf(conn));
+ CONTAINS("", 0);
+ tt_assert(TO_CONN(conn)->marked_for_close);
+ close_closeable_connections();
+ conn = NULL;
+
+ /* Okay, try again. */
+ conn = or_connection_new(CONN_TYPE_EXT_OR, AF_INET);
+ tt_int_op(0, ==, connection_ext_or_start_auth(conn));
+ CONTAINS("\x01\x00", 2);
+ /* Let's say the client replies sensibly this time. "Yes, AUTHTYPE_COOKIE
+ * sounds delicious. Let's have some of that!" */
+ WRITE("\x01", 1);
+ /* Let's say that the client also sends part of a nonce. */
+ WRITE("But when I look ", 16);
+ tt_int_op(0, ==, connection_ext_or_process_inbuf(conn));
+ CONTAINS("", 0);
+ tt_int_op(TO_CONN(conn)->state, ==,
+ EXT_OR_CONN_STATE_AUTH_WAIT_CLIENT_NONCE);
+ /* Pump it again. Nothing should happen. */
+ tt_int_op(0, ==, connection_ext_or_process_inbuf(conn));
+ /* send the rest of the nonce. */
+ WRITE("ahead up the whi", 16);
+ MOCK(crypto_rand, crypto_rand_return_tse_str);
+ tt_int_op(0, ==, connection_ext_or_process_inbuf(conn));
+ UNMOCK(crypto_rand);
+ /* We should get the right reply from the server. */
+ CONTAINS("\xec\x80\xed\x6e\x54\x6d\x3b\x36\xfd\xfc\x22\xfe\x13\x15\x41\x6b"
+ "\x02\x9f\x1a\xde\x76\x10\xd9\x10\x87\x8b\x62\xee\xb7\x40\x38\x21"
+ "te road There is always another ", 64);
+ /* Send the wrong response. */
+ WRITE("not with a bang but a whimper...", 32);
+ MOCK(control_event_bootstrap_problem, ignore_bootstrap_problem);
+ tt_int_op(-1, ==, connection_ext_or_process_inbuf(conn));
+ CONTAINS("\x00", 1);
+ tt_assert(TO_CONN(conn)->marked_for_close);
+ /* XXXX Hold-open-until-flushed. */
+ close_closeable_connections();
+ conn = NULL;
+ UNMOCK(control_event_bootstrap_problem);
+
+ MOCK(connection_start_reading, note_read_started);
+ MOCK(connection_stop_reading, note_read_stopped);
+ MOCK(connection_tls_start_handshake, handshake_start);
+
+ /* Okay, this time let's succeed. */
+ conn = or_connection_new(CONN_TYPE_EXT_OR, AF_INET);
+ do_ext_or_handshake(conn);
+
+ /* Now let's run through some messages. */
+ /* First let's send some junk and make sure it's ignored. */
+ WRITE("\xff\xf0\x00\x03""ABC", 7);
+ tt_int_op(0, ==, connection_ext_or_process_inbuf(conn));
+ CONTAINS("", 0);
+ /* Now let's send a USERADDR command. */
+ WRITE("\x00\x01\x00\x0c""1.2.3.4:5678", 16);
+ tt_int_op(0, ==, connection_ext_or_process_inbuf(conn));
+ tt_int_op(TO_CONN(conn)->port, ==, 5678);
+ tt_int_op(tor_addr_to_ipv4h(&TO_CONN(conn)->addr), ==, 0x01020304);
+ /* Now let's send a TRANSPORT command. */
+ WRITE("\x00\x02\x00\x07""rfc1149", 11);
+ tt_int_op(0, ==, connection_ext_or_process_inbuf(conn));
+ tt_ptr_op(NULL, !=, conn->ext_or_transport);
+ tt_str_op("rfc1149", ==, conn->ext_or_transport);
+ tt_int_op(is_reading,==,1);
+ tt_int_op(TO_CONN(conn)->state, ==, EXT_OR_CONN_STATE_OPEN);
+ /* DONE */
+ WRITE("\x00\x00\x00\x00", 4);
+ tt_int_op(0, ==, connection_ext_or_process_inbuf(conn));
+ tt_int_op(TO_CONN(conn)->state, ==, EXT_OR_CONN_STATE_FLUSHING);
+ tt_int_op(is_reading,==,0);
+ CONTAINS("\x10\x00\x00\x00", 4);
+ tt_int_op(handshake_start_called,==,0);
+ tt_int_op(0, ==, connection_ext_or_finished_flushing(conn));
+ tt_int_op(is_reading,==,1);
+ tt_int_op(handshake_start_called,==,1);
+ tt_int_op(TO_CONN(conn)->type, ==, CONN_TYPE_OR);
+ tt_int_op(TO_CONN(conn)->state, ==, 0);
+ close_closeable_connections();
+ conn = NULL;
+
+ /* Okay, this time let's succeed the handshake but fail the USERADDR
+ command. */
+ conn = or_connection_new(CONN_TYPE_EXT_OR, AF_INET);
+ do_ext_or_handshake(conn);
+ /* USERADDR command with an extra NUL byte */
+ WRITE("\x00\x01\x00\x0d""1.2.3.4:5678\x00", 17);
+ MOCK(control_event_bootstrap_problem, ignore_bootstrap_problem);
+ tt_int_op(-1, ==, connection_ext_or_process_inbuf(conn));
+ CONTAINS("", 0);
+ tt_assert(TO_CONN(conn)->marked_for_close);
+ close_closeable_connections();
+ conn = NULL;
+ UNMOCK(control_event_bootstrap_problem);
+
+ /* Now fail the TRANSPORT command. */
+ conn = or_connection_new(CONN_TYPE_EXT_OR, AF_INET);
+ do_ext_or_handshake(conn);
+ /* TRANSPORT command with an extra NUL byte */
+ WRITE("\x00\x02\x00\x08""rfc1149\x00", 12);
+ MOCK(control_event_bootstrap_problem, ignore_bootstrap_problem);
+ tt_int_op(-1, ==, connection_ext_or_process_inbuf(conn));
+ CONTAINS("", 0);
+ tt_assert(TO_CONN(conn)->marked_for_close);
+ close_closeable_connections();
+ conn = NULL;
+ UNMOCK(control_event_bootstrap_problem);
+
+ /* Now fail the TRANSPORT command. */
+ conn = or_connection_new(CONN_TYPE_EXT_OR, AF_INET);
+ do_ext_or_handshake(conn);
+ /* TRANSPORT command with transport name with symbols (not a
+ C-identifier) */
+ WRITE("\x00\x02\x00\x07""rf*1149", 11);
+ MOCK(control_event_bootstrap_problem, ignore_bootstrap_problem);
+ tt_int_op(-1, ==, connection_ext_or_process_inbuf(conn));
+ CONTAINS("", 0);
+ tt_assert(TO_CONN(conn)->marked_for_close);
+ close_closeable_connections();
+ conn = NULL;
+ UNMOCK(control_event_bootstrap_problem);
+
+ done:
+ UNMOCK(connection_write_to_buf_impl_);
+ UNMOCK(crypto_rand);
+ if (conn)
+ connection_free_(TO_CONN(conn));
+#undef CONTAINS
+#undef WRITE
+}
+
+struct testcase_t extorport_tests[] = {
+ { "id_map", test_ext_or_id_map, TT_FORK, NULL, NULL },
+ { "write_command", test_ext_or_write_command, TT_FORK, NULL, NULL },
+ { "init_auth", test_ext_or_init_auth, TT_FORK, NULL, NULL },
+ { "cookie_auth", test_ext_or_cookie_auth, TT_FORK, NULL, NULL },
+ { "cookie_auth_testvec", test_ext_or_cookie_auth_testvec, TT_FORK,
+ NULL, NULL },
+ { "handshake", test_ext_or_handshake, TT_FORK, NULL, NULL },
+ END_OF_TESTCASES
+};
+
diff --git a/src/test/test_hs.c b/src/test/test_hs.c
new file mode 100644
index 000000000..99ef7dd57
--- /dev/null
+++ b/src/test/test_hs.c
@@ -0,0 +1,129 @@
+/* Copyright (c) 2007-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file test_hs.c
+ * \brief Unit tests for hidden service.
+ **/
+
+#define CONTROL_PRIVATE
+#include "or.h"
+#include "test.h"
+#include "control.h"
+
+/* mock ID digest and longname for node that's in nodelist */
+#define HSDIR_EXIST_ID "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA" \
+ "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA"
+#define STR_HSDIR_EXIST_LONGNAME \
+ "$AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=TestDir"
+/* mock ID digest and longname for node that's not in nodelist */
+#define HSDIR_NONE_EXIST_ID "\xBB\xBB\xBB\xBB\xBB\xBB\xBB\xBB\xBB\xBB" \
+ "\xBB\xBB\xBB\xBB\xBB\xBB\xBB\xBB\xBB\xBB"
+#define STR_HSDIR_NONE_EXIST_LONGNAME \
+ "$BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
+
+/* Helper global variable for hidden service descriptor event test.
+ * It's used as a pointer to dynamically created message buffer in
+ * send_control_event_string_replacement function, which mocks
+ * send_control_event_string function.
+ *
+ * Always free it after use! */
+static char *received_msg = NULL;
+
+/** Mock function for send_control_event_string
+ */
+static void
+send_control_event_string_replacement(uint16_t event, event_format_t which,
+ const char *msg)
+{
+ (void) event;
+ (void) which;
+ tor_free(received_msg);
+ received_msg = tor_strdup(msg);
+}
+
+/** Mock function for node_describe_longname_by_id, it returns either
+ * STR_HSDIR_EXIST_LONGNAME or STR_HSDIR_NONE_EXIST_LONGNAME
+ */
+static const char *
+node_describe_longname_by_id_replacement(const char *id_digest)
+{
+ if (!strcmp(id_digest, HSDIR_EXIST_ID)) {
+ return STR_HSDIR_EXIST_LONGNAME;
+ } else {
+ return STR_HSDIR_NONE_EXIST_LONGNAME;
+ }
+}
+
+/** Make sure each hidden service descriptor async event generation
+ *
+ * function generates the message in expected format.
+ */
+static void
+test_hs_desc_event(void *arg)
+{
+ #define STR_HS_ADDR "ajhb7kljbiru65qo"
+ #define STR_HS_ID "b3oeducbhjmbqmgw2i3jtz4fekkrinwj"
+
+ rend_data_t rend_query;
+ const char *expected_msg;
+
+ (void) arg;
+ MOCK(send_control_event_string,
+ send_control_event_string_replacement);
+ MOCK(node_describe_longname_by_id,
+ node_describe_longname_by_id_replacement);
+
+ /* setup rend_query struct */
+ strncpy(rend_query.onion_address, STR_HS_ADDR,
+ REND_SERVICE_ID_LEN_BASE32+1);
+ rend_query.auth_type = 0;
+
+ /* test request event */
+ control_event_hs_descriptor_requested(&rend_query, HSDIR_EXIST_ID,
+ STR_HS_ID);
+ expected_msg = "650 HS_DESC REQUESTED "STR_HS_ADDR" NO_AUTH "\
+ STR_HSDIR_EXIST_LONGNAME" "STR_HS_ID"\r\n";
+ test_assert(received_msg);
+ test_streq(received_msg, expected_msg);
+ tor_free(received_msg);
+
+ /* test received event */
+ rend_query.auth_type = 1;
+ control_event_hs_descriptor_received(&rend_query, HSDIR_EXIST_ID);
+ expected_msg = "650 HS_DESC RECEIVED "STR_HS_ADDR" BASIC_AUTH "\
+ STR_HSDIR_EXIST_LONGNAME"\r\n";
+ test_assert(received_msg);
+ test_streq(received_msg, expected_msg);
+ tor_free(received_msg);
+
+ /* test failed event */
+ rend_query.auth_type = 2;
+ control_event_hs_descriptor_failed(&rend_query, HSDIR_NONE_EXIST_ID);
+ expected_msg = "650 HS_DESC FAILED "STR_HS_ADDR" STEALTH_AUTH "\
+ STR_HSDIR_NONE_EXIST_LONGNAME"\r\n";
+ test_assert(received_msg);
+ test_streq(received_msg, expected_msg);
+ tor_free(received_msg);
+
+ /* test invalid auth type */
+ rend_query.auth_type = 999;
+ control_event_hs_descriptor_failed(&rend_query, HSDIR_EXIST_ID);
+ expected_msg = "650 HS_DESC FAILED "STR_HS_ADDR" UNKNOWN "\
+ STR_HSDIR_EXIST_LONGNAME"\r\n";
+ test_assert(received_msg);
+ test_streq(received_msg, expected_msg);
+ tor_free(received_msg);
+
+ done:
+ UNMOCK(send_control_event_string);
+ UNMOCK(node_describe_longname_by_id);
+ tor_free(received_msg);
+}
+
+struct testcase_t hs_tests[] = {
+ { "hs_desc_event", test_hs_desc_event, TT_FORK,
+ NULL, NULL },
+ END_OF_TESTCASES
+};
+
diff --git a/src/test/test_introduce.c b/src/test/test_introduce.c
new file mode 100644
index 000000000..69c115222
--- /dev/null
+++ b/src/test/test_introduce.c
@@ -0,0 +1,528 @@
+/* Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#include "orconfig.h"
+#include "crypto.h"
+#include "or.h"
+#include "test.h"
+
+#define RENDSERVICE_PRIVATE
+#include "rendservice.h"
+
+extern const char AUTHORITY_SIGNKEY_1[];
+
+static uint8_t v0_test_plaintext[] =
+ /* 20 bytes of rendezvous point nickname */
+ { 0x4e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ /* 20 bytes dummy rendezvous cookie */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x10, 0x11, 0x12, 0x13,
+ /* 128 bytes dummy DH handshake data */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
+ 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00,
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
+ 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00,
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
+ 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00,
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
+ 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00 };
+
+static uint8_t v1_test_plaintext[] =
+ /* Version byte */
+ { 0x01,
+ /* 42 bytes of dummy rendezvous point hex digest */
+ 0x24, 0x30, 0x30, 0x30, 0x31, 0x30, 0x32, 0x30,
+ 0x33, 0x30, 0x34, 0x30, 0x35, 0x30, 0x36, 0x30,
+ 0x37, 0x30, 0x38, 0x30, 0x39, 0x30, 0x41, 0x30,
+ 0x42, 0x30, 0x43, 0x30, 0x44, 0x30, 0x45, 0x30,
+ 0x46, 0x31, 0x30, 0x31, 0x31, 0x31, 0x32, 0x31,
+ 0x33, 0x00,
+ /* 20 bytes dummy rendezvous cookie */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x10, 0x11, 0x12, 0x13,
+ /* 128 bytes dummy DH handshake data */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
+ 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00,
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
+ 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00,
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
+ 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00,
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
+ 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00 };
+
+static uint8_t v2_test_plaintext[] =
+ /* Version byte */
+ { 0x02,
+ /* 4 bytes rendezvous point's IP address */
+ 0xc0, 0xa8, 0x00, 0x01,
+ /* 2 bytes rendezvous point's OR port */
+ 0x23, 0x5a,
+ /* 20 bytes dummy rendezvous point's identity digest */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x10, 0x11, 0x12, 0x13,
+ /* 2 bytes length of onion key */
+ 0x00, 0x8c,
+ /* Onion key (140 bytes taken from live test) */
+ 0x30, 0x81, 0x89, 0x02, 0x81, 0x81, 0x00, 0xb1,
+ 0xcd, 0x46, 0xa9, 0x18, 0xd2, 0x0f, 0x01, 0xf8,
+ 0xb2, 0xad, 0xa4, 0x79, 0xb4, 0xbb, 0x4b, 0xf4,
+ 0x54, 0x1e, 0x3f, 0x03, 0x54, 0xcf, 0x7c, 0xb6,
+ 0xb5, 0xf0, 0xfe, 0xed, 0x4b, 0x7d, 0xd7, 0x61,
+ 0xdb, 0x6d, 0xd9, 0x19, 0xe2, 0x72, 0x04, 0xaa,
+ 0x3e, 0x89, 0x26, 0x14, 0x62, 0x9a, 0x6c, 0x11,
+ 0x0b, 0x35, 0x99, 0x2c, 0x9f, 0x2c, 0x64, 0xa1,
+ 0xd9, 0xe2, 0x88, 0xce, 0xf6, 0x54, 0xfe, 0x1d,
+ 0x37, 0x5e, 0x6d, 0x73, 0x95, 0x54, 0x90, 0xf0,
+ 0x7b, 0xfa, 0xd4, 0x44, 0xac, 0xb2, 0x23, 0x9f,
+ 0x75, 0x36, 0xe2, 0x78, 0x62, 0x82, 0x80, 0xa4,
+ 0x23, 0x22, 0xc9, 0xbf, 0xc4, 0x36, 0xd1, 0x31,
+ 0x33, 0x8e, 0x64, 0xb4, 0xa9, 0x74, 0xa1, 0xcb,
+ 0x42, 0x8d, 0x60, 0xc7, 0xbb, 0x8e, 0x6e, 0x0f,
+ 0x36, 0x74, 0x8e, 0xf4, 0x08, 0x99, 0x06, 0x92,
+ 0xb1, 0x3f, 0xb3, 0xdd, 0xed, 0xf7, 0xc9, 0x02,
+ 0x03, 0x01, 0x00, 0x01,
+ /* 20 bytes dummy rendezvous cookie */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x10, 0x11, 0x12, 0x13,
+ /* 128 bytes dummy DH handshake data */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
+ 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00,
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
+ 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00,
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
+ 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00,
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
+ 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00 };
+
+static uint8_t v3_no_auth_test_plaintext[] =
+ /* Version byte */
+ { 0x03,
+ /* Auth type (0 for no auth len/auth data) */
+ 0x00,
+ /* Timestamp */
+ 0x50, 0x0b, 0xb5, 0xaa,
+ /* 4 bytes rendezvous point's IP address */
+ 0xc0, 0xa8, 0x00, 0x01,
+ /* 2 bytes rendezvous point's OR port */
+ 0x23, 0x5a,
+ /* 20 bytes dummy rendezvous point's identity digest */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x10, 0x11, 0x12, 0x13,
+ /* 2 bytes length of onion key */
+ 0x00, 0x8c,
+ /* Onion key (140 bytes taken from live test) */
+ 0x30, 0x81, 0x89, 0x02, 0x81, 0x81, 0x00, 0xb1,
+ 0xcd, 0x46, 0xa9, 0x18, 0xd2, 0x0f, 0x01, 0xf8,
+ 0xb2, 0xad, 0xa4, 0x79, 0xb4, 0xbb, 0x4b, 0xf4,
+ 0x54, 0x1e, 0x3f, 0x03, 0x54, 0xcf, 0x7c, 0xb6,
+ 0xb5, 0xf0, 0xfe, 0xed, 0x4b, 0x7d, 0xd7, 0x61,
+ 0xdb, 0x6d, 0xd9, 0x19, 0xe2, 0x72, 0x04, 0xaa,
+ 0x3e, 0x89, 0x26, 0x14, 0x62, 0x9a, 0x6c, 0x11,
+ 0x0b, 0x35, 0x99, 0x2c, 0x9f, 0x2c, 0x64, 0xa1,
+ 0xd9, 0xe2, 0x88, 0xce, 0xf6, 0x54, 0xfe, 0x1d,
+ 0x37, 0x5e, 0x6d, 0x73, 0x95, 0x54, 0x90, 0xf0,
+ 0x7b, 0xfa, 0xd4, 0x44, 0xac, 0xb2, 0x23, 0x9f,
+ 0x75, 0x36, 0xe2, 0x78, 0x62, 0x82, 0x80, 0xa4,
+ 0x23, 0x22, 0xc9, 0xbf, 0xc4, 0x36, 0xd1, 0x31,
+ 0x33, 0x8e, 0x64, 0xb4, 0xa9, 0x74, 0xa1, 0xcb,
+ 0x42, 0x8d, 0x60, 0xc7, 0xbb, 0x8e, 0x6e, 0x0f,
+ 0x36, 0x74, 0x8e, 0xf4, 0x08, 0x99, 0x06, 0x92,
+ 0xb1, 0x3f, 0xb3, 0xdd, 0xed, 0xf7, 0xc9, 0x02,
+ 0x03, 0x01, 0x00, 0x01,
+ /* 20 bytes dummy rendezvous cookie */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x10, 0x11, 0x12, 0x13,
+ /* 128 bytes dummy DH handshake data */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
+ 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00,
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
+ 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00,
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
+ 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00,
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
+ 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00 };
+
+static uint8_t v3_basic_auth_test_plaintext[] =
+ /* Version byte */
+ { 0x03,
+ /* Auth type (1 for REND_BASIC_AUTH) */
+ 0x01,
+ /* Auth len (must be 16 bytes for REND_BASIC_AUTH) */
+ 0x00, 0x10,
+ /* Auth data (a 16-byte dummy descriptor cookie) */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ /* Timestamp */
+ 0x50, 0x0b, 0xb5, 0xaa,
+ /* 4 bytes rendezvous point's IP address */
+ 0xc0, 0xa8, 0x00, 0x01,
+ /* 2 bytes rendezvous point's OR port */
+ 0x23, 0x5a,
+ /* 20 bytes dummy rendezvous point's identity digest */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x10, 0x11, 0x12, 0x13,
+ /* 2 bytes length of onion key */
+ 0x00, 0x8c,
+ /* Onion key (140 bytes taken from live test) */
+ 0x30, 0x81, 0x89, 0x02, 0x81, 0x81, 0x00, 0xb1,
+ 0xcd, 0x46, 0xa9, 0x18, 0xd2, 0x0f, 0x01, 0xf8,
+ 0xb2, 0xad, 0xa4, 0x79, 0xb4, 0xbb, 0x4b, 0xf4,
+ 0x54, 0x1e, 0x3f, 0x03, 0x54, 0xcf, 0x7c, 0xb6,
+ 0xb5, 0xf0, 0xfe, 0xed, 0x4b, 0x7d, 0xd7, 0x61,
+ 0xdb, 0x6d, 0xd9, 0x19, 0xe2, 0x72, 0x04, 0xaa,
+ 0x3e, 0x89, 0x26, 0x14, 0x62, 0x9a, 0x6c, 0x11,
+ 0x0b, 0x35, 0x99, 0x2c, 0x9f, 0x2c, 0x64, 0xa1,
+ 0xd9, 0xe2, 0x88, 0xce, 0xf6, 0x54, 0xfe, 0x1d,
+ 0x37, 0x5e, 0x6d, 0x73, 0x95, 0x54, 0x90, 0xf0,
+ 0x7b, 0xfa, 0xd4, 0x44, 0xac, 0xb2, 0x23, 0x9f,
+ 0x75, 0x36, 0xe2, 0x78, 0x62, 0x82, 0x80, 0xa4,
+ 0x23, 0x22, 0xc9, 0xbf, 0xc4, 0x36, 0xd1, 0x31,
+ 0x33, 0x8e, 0x64, 0xb4, 0xa9, 0x74, 0xa1, 0xcb,
+ 0x42, 0x8d, 0x60, 0xc7, 0xbb, 0x8e, 0x6e, 0x0f,
+ 0x36, 0x74, 0x8e, 0xf4, 0x08, 0x99, 0x06, 0x92,
+ 0xb1, 0x3f, 0xb3, 0xdd, 0xed, 0xf7, 0xc9, 0x02,
+ 0x03, 0x01, 0x00, 0x01,
+ /* 20 bytes dummy rendezvous cookie */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x10, 0x11, 0x12, 0x13,
+ /* 128 bytes dummy DH handshake data */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
+ 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00,
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
+ 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00,
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
+ 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00,
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
+ 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00 };
+
+static void do_decrypt_test(uint8_t *plaintext, size_t plaintext_len);
+static void do_early_parse_test(uint8_t *plaintext, size_t plaintext_len);
+static void do_late_parse_test(uint8_t *plaintext, size_t plaintext_len);
+static void do_parse_test(uint8_t *plaintext, size_t plaintext_len, int phase);
+static ssize_t make_intro_from_plaintext(
+ void *buf, size_t len, crypto_pk_t *key, void **cell_out);
+
+#define EARLY_PARSE_ONLY 1
+#define DECRYPT_ONLY 2
+#define ALL_PARSING 3
+
+static void
+do_early_parse_test(uint8_t *plaintext, size_t plaintext_len)
+{
+ do_parse_test(plaintext, plaintext_len, EARLY_PARSE_ONLY);
+}
+
+static void
+do_decrypt_test(uint8_t *plaintext, size_t plaintext_len)
+{
+ do_parse_test(plaintext, plaintext_len, DECRYPT_ONLY);
+}
+
+static void
+do_late_parse_test(uint8_t *plaintext, size_t plaintext_len)
+{
+ do_parse_test(plaintext, plaintext_len, ALL_PARSING);
+}
+
+/** Test utility function: checks that the <b>plaintext_len</b>-byte string at
+ * <b>plaintext</b> is at least superficially parseable.
+ */
+static void
+do_parse_test(uint8_t *plaintext, size_t plaintext_len, int phase)
+{
+ crypto_pk_t *k = NULL;
+ ssize_t r;
+ uint8_t *cell = NULL;
+ size_t cell_len;
+ rend_intro_cell_t *parsed_req = NULL;
+ char *err_msg = NULL;
+ char digest[DIGEST_LEN];
+
+ /* Get a key */
+ k = crypto_pk_new();
+ test_assert(k);
+ r = crypto_pk_read_private_key_from_string(k, AUTHORITY_SIGNKEY_1, -1);
+ test_assert(!r);
+
+ /* Get digest for future comparison */
+ r = crypto_pk_get_digest(k, digest);
+ test_assert(r >= 0);
+
+ /* Make a cell out of it */
+ r = make_intro_from_plaintext(
+ plaintext, plaintext_len,
+ k, (void **)(&cell));
+ test_assert(r > 0);
+ test_assert(cell);
+ cell_len = r;
+
+ /* Do early parsing */
+ parsed_req = rend_service_begin_parse_intro(cell, cell_len, 2, &err_msg);
+ test_assert(parsed_req);
+ test_assert(!err_msg);
+ test_memeq(parsed_req->pk, digest, DIGEST_LEN);
+ test_assert(parsed_req->ciphertext);
+ test_assert(parsed_req->ciphertext_len > 0);
+
+ if (phase == EARLY_PARSE_ONLY)
+ goto done;
+
+ /* Do decryption */
+ r = rend_service_decrypt_intro(parsed_req, k, &err_msg);
+ test_assert(!r);
+ test_assert(!err_msg);
+ test_assert(parsed_req->plaintext);
+ test_assert(parsed_req->plaintext_len > 0);
+
+ if (phase == DECRYPT_ONLY)
+ goto done;
+
+ /* Do late parsing */
+ r = rend_service_parse_intro_plaintext(parsed_req, &err_msg);
+ test_assert(!r);
+ test_assert(!err_msg);
+ test_assert(parsed_req->parsed);
+
+ done:
+ tor_free(cell);
+ crypto_pk_free(k);
+ rend_service_free_intro(parsed_req);
+ tor_free(err_msg);
+}
+
+/** Given the plaintext of the encrypted part of an INTRODUCE1/2 and a key,
+ * construct the encrypted cell for testing.
+ */
+
+static ssize_t
+make_intro_from_plaintext(
+ void *buf, size_t len, crypto_pk_t *key, void **cell_out)
+{
+ char *cell = NULL;
+ ssize_t cell_len = -1, r;
+ /* Assemble key digest and ciphertext, then construct the cell */
+ ssize_t ciphertext_size;
+
+ if (!(buf && key && len > 0 && cell_out)) goto done;
+
+ /*
+ * Figure out an upper bound on how big the ciphertext will be
+ * (see crypto_pk_public_hybrid_encrypt())
+ */
+ ciphertext_size = PKCS1_OAEP_PADDING_OVERHEAD;
+ ciphertext_size += crypto_pk_keysize(key);
+ ciphertext_size += CIPHER_KEY_LEN;
+ ciphertext_size += len;
+
+ /*
+ * Allocate space for the cell
+ */
+ cell = tor_malloc(DIGEST_LEN + ciphertext_size);
+
+ /* Compute key digest (will be first DIGEST_LEN octets of cell) */
+ r = crypto_pk_get_digest(key, cell);
+ test_assert(r >= 0);
+
+ /* Do encryption */
+ r = crypto_pk_public_hybrid_encrypt(
+ key, cell + DIGEST_LEN, ciphertext_size,
+ buf, len,
+ PK_PKCS1_OAEP_PADDING, 0);
+ test_assert(r >= 0);
+
+ /* Figure out cell length */
+ cell_len = DIGEST_LEN + r;
+
+ /* Output the cell */
+ *cell_out = cell;
+
+ done:
+ return cell_len;
+}
+
+/** Test v0 INTRODUCE2 parsing through decryption only
+ */
+
+static void
+test_introduce_decrypt_v0(void)
+{
+ do_decrypt_test(v0_test_plaintext, sizeof(v0_test_plaintext));
+}
+
+/** Test v1 INTRODUCE2 parsing through decryption only
+ */
+
+static void
+test_introduce_decrypt_v1(void)
+{
+ do_decrypt_test(v1_test_plaintext, sizeof(v1_test_plaintext));
+}
+
+/** Test v2 INTRODUCE2 parsing through decryption only
+ */
+
+static void
+test_introduce_decrypt_v2(void)
+{
+ do_decrypt_test(v2_test_plaintext, sizeof(v2_test_plaintext));
+}
+
+/** Test v3 INTRODUCE2 parsing through decryption only
+ */
+
+static void
+test_introduce_decrypt_v3(void)
+{
+ do_decrypt_test(
+ v3_no_auth_test_plaintext, sizeof(v3_no_auth_test_plaintext));
+ do_decrypt_test(
+ v3_basic_auth_test_plaintext, sizeof(v3_basic_auth_test_plaintext));
+}
+
+/** Test v0 INTRODUCE2 parsing through early parsing only
+ */
+
+static void
+test_introduce_early_parse_v0(void)
+{
+ do_early_parse_test(v0_test_plaintext, sizeof(v0_test_plaintext));
+}
+
+/** Test v1 INTRODUCE2 parsing through early parsing only
+ */
+
+static void
+test_introduce_early_parse_v1(void)
+{
+ do_early_parse_test(v1_test_plaintext, sizeof(v1_test_plaintext));
+}
+
+/** Test v2 INTRODUCE2 parsing through early parsing only
+ */
+
+static void
+test_introduce_early_parse_v2(void)
+{
+ do_early_parse_test(v2_test_plaintext, sizeof(v2_test_plaintext));
+}
+
+/** Test v3 INTRODUCE2 parsing through early parsing only
+ */
+
+static void
+test_introduce_early_parse_v3(void)
+{
+ do_early_parse_test(
+ v3_no_auth_test_plaintext, sizeof(v3_no_auth_test_plaintext));
+ do_early_parse_test(
+ v3_basic_auth_test_plaintext, sizeof(v3_basic_auth_test_plaintext));
+}
+
+/** Test v0 INTRODUCE2 parsing
+ */
+
+static void
+test_introduce_late_parse_v0(void)
+{
+ do_late_parse_test(v0_test_plaintext, sizeof(v0_test_plaintext));
+}
+
+/** Test v1 INTRODUCE2 parsing
+ */
+
+static void
+test_introduce_late_parse_v1(void)
+{
+ do_late_parse_test(v1_test_plaintext, sizeof(v1_test_plaintext));
+}
+
+/** Test v2 INTRODUCE2 parsing
+ */
+
+static void
+test_introduce_late_parse_v2(void)
+{
+ do_late_parse_test(v2_test_plaintext, sizeof(v2_test_plaintext));
+}
+
+/** Test v3 INTRODUCE2 parsing
+ */
+
+static void
+test_introduce_late_parse_v3(void)
+{
+ do_late_parse_test(
+ v3_no_auth_test_plaintext, sizeof(v3_no_auth_test_plaintext));
+ do_late_parse_test(
+ v3_basic_auth_test_plaintext, sizeof(v3_basic_auth_test_plaintext));
+}
+
+#define INTRODUCE_LEGACY(name) \
+ { #name, legacy_test_helper, 0, &legacy_setup, test_introduce_ ## name }
+
+struct testcase_t introduce_tests[] = {
+ INTRODUCE_LEGACY(early_parse_v0),
+ INTRODUCE_LEGACY(early_parse_v1),
+ INTRODUCE_LEGACY(early_parse_v2),
+ INTRODUCE_LEGACY(early_parse_v3),
+ INTRODUCE_LEGACY(decrypt_v0),
+ INTRODUCE_LEGACY(decrypt_v1),
+ INTRODUCE_LEGACY(decrypt_v2),
+ INTRODUCE_LEGACY(decrypt_v3),
+ INTRODUCE_LEGACY(late_parse_v0),
+ INTRODUCE_LEGACY(late_parse_v1),
+ INTRODUCE_LEGACY(late_parse_v2),
+ INTRODUCE_LEGACY(late_parse_v3),
+ END_OF_TESTCASES
+};
+
diff --git a/src/test/test_logging.c b/src/test/test_logging.c
new file mode 100644
index 000000000..7e558f83b
--- /dev/null
+++ b/src/test/test_logging.c
@@ -0,0 +1,135 @@
+/* Copyright (c) 2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#include "orconfig.h"
+#include "or.h"
+#include "torlog.h"
+#include "test.h"
+
+static void
+dummy_cb_fn(int severity, uint32_t domain, const char *msg)
+{
+ (void)severity; (void)domain; (void)msg;
+}
+
+static void
+test_get_sigsafe_err_fds(void *arg)
+{
+ const int *fds;
+ int n;
+ log_severity_list_t include_bug, no_bug, no_bug2;
+ (void) arg;
+ init_logging();
+
+ n = tor_log_get_sigsafe_err_fds(&fds);
+ tt_int_op(n, ==, 1);
+ tt_int_op(fds[0], ==, STDERR_FILENO);
+
+ set_log_severity_config(LOG_WARN, LOG_ERR, &include_bug);
+ set_log_severity_config(LOG_WARN, LOG_ERR, &no_bug);
+ no_bug.masks[0] &= ~(LD_BUG|LD_GENERAL);
+ set_log_severity_config(LOG_INFO, LOG_NOTICE, &no_bug2);
+
+ /* Add some logs; make sure the output is as expected. */
+ mark_logs_temp();
+ add_stream_log(&include_bug, "dummy-1", 3);
+ add_stream_log(&no_bug, "dummy-2", 4);
+ add_stream_log(&no_bug2, "dummy-3", 5);
+ add_callback_log(&include_bug, dummy_cb_fn);
+ close_temp_logs();
+ tor_log_update_sigsafe_err_fds();
+
+ n = tor_log_get_sigsafe_err_fds(&fds);
+ tt_int_op(n, ==, 2);
+ tt_int_op(fds[0], ==, STDERR_FILENO);
+ tt_int_op(fds[1], ==, 3);
+
+ /* Allow STDOUT to replace STDERR. */
+ add_stream_log(&include_bug, "dummy-4", STDOUT_FILENO);
+ tor_log_update_sigsafe_err_fds();
+ n = tor_log_get_sigsafe_err_fds(&fds);
+ tt_int_op(n, ==, 2);
+ tt_int_op(fds[0], ==, 3);
+ tt_int_op(fds[1], ==, STDOUT_FILENO);
+
+ /* But don't allow it to replace explicit STDERR. */
+ add_stream_log(&include_bug, "dummy-5", STDERR_FILENO);
+ tor_log_update_sigsafe_err_fds();
+ n = tor_log_get_sigsafe_err_fds(&fds);
+ tt_int_op(n, ==, 3);
+ tt_int_op(fds[0], ==, STDERR_FILENO);
+ tt_int_op(fds[1], ==, STDOUT_FILENO);
+ tt_int_op(fds[2], ==, 3);
+
+ /* Don't overflow the array. */
+ {
+ int i;
+ for (i=5; i<20; ++i) {
+ add_stream_log(&include_bug, "x-dummy", i);
+ }
+ }
+ tor_log_update_sigsafe_err_fds();
+ n = tor_log_get_sigsafe_err_fds(&fds);
+ tt_int_op(n, ==, 8);
+
+ done:
+ ;
+}
+
+static void
+test_sigsafe_err(void *arg)
+{
+ const char *fn=get_fname("sigsafe_err_log");
+ char *content=NULL;
+ log_severity_list_t include_bug;
+ smartlist_t *lines = smartlist_new();
+ (void)arg;
+
+ set_log_severity_config(LOG_WARN, LOG_ERR, &include_bug);
+
+ init_logging();
+ mark_logs_temp();
+ add_file_log(&include_bug, fn);
+ tor_log_update_sigsafe_err_fds();
+ close_temp_logs();
+
+ close(STDERR_FILENO);
+ log_err(LD_BUG, "Say, this isn't too cool.");
+ tor_log_err_sigsafe("Minimal.\n", NULL);
+
+ set_log_time_granularity(100*1000);
+ tor_log_err_sigsafe("Testing any ",
+ "attempt to manually log ",
+ "from a signal.\n",
+ NULL);
+ mark_logs_temp();
+ close_temp_logs();
+ close(STDERR_FILENO);
+ content = read_file_to_str(fn, 0, NULL);
+
+ tt_assert(content != NULL);
+ tor_split_lines(lines, content, (int)strlen(content));
+ tt_int_op(smartlist_len(lines), >=, 5);
+
+ if (strstr(smartlist_get(lines, 0), "opening new log file"))
+ smartlist_del_keeporder(lines, 0);
+ tt_assert(strstr(smartlist_get(lines, 0), "Say, this isn't too cool"));
+ /* Next line is blank. */
+ tt_assert(!strcmpstart(smartlist_get(lines, 1), "=============="));
+ tt_assert(!strcmpstart(smartlist_get(lines, 2), "Minimal."));
+ /* Next line is blank. */
+ tt_assert(!strcmpstart(smartlist_get(lines, 3), "=============="));
+ tt_str_op(smartlist_get(lines, 4), ==,
+ "Testing any attempt to manually log from a signal.");
+
+ done:
+ tor_free(content);
+ smartlist_free(lines);
+}
+
+struct testcase_t logging_tests[] = {
+ { "sigsafe_err_fds", test_get_sigsafe_err_fds, TT_FORK, NULL, NULL },
+ { "sigsafe_err", test_sigsafe_err, TT_FORK, NULL, NULL },
+ END_OF_TESTCASES
+};
+
diff --git a/src/test/test_microdesc.c b/src/test/test_microdesc.c
index 89c578f4a..78f4823b8 100644
--- a/src/test/test_microdesc.c
+++ b/src/test/test_microdesc.c
@@ -1,11 +1,14 @@
-/* Copyright (c) 2010-2012, The Tor Project, Inc. */
+/* Copyright (c) 2010-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#include "orconfig.h"
#include "or.h"
#include "config.h"
+#include "dirvote.h"
#include "microdesc.h"
+#include "routerlist.h"
+#include "routerparse.h"
#include "test.h"
@@ -208,11 +211,25 @@ test_md_cache(void *data)
md3 = NULL; /* it's history now! */
/* rebuild again, make sure it stays gone. */
- microdesc_cache_rebuild(mc, 1);
+ tt_int_op(microdesc_cache_rebuild(mc, 1), ==, 0);
tt_ptr_op(md1, ==, microdesc_cache_lookup_by_digest256(mc, d1));
tt_ptr_op(md2, ==, microdesc_cache_lookup_by_digest256(mc, d2));
tt_ptr_op(NULL, ==, microdesc_cache_lookup_by_digest256(mc, d3));
+ /* Re-add md3, and make sure we can rebuild the cache. */
+ added = microdescs_add_to_cache(mc, test_md3_noannotation, NULL,
+ SAVED_NOWHERE, 0, time3, NULL);
+ tt_int_op(1, ==, smartlist_len(added));
+ md3 = smartlist_get(added, 0);
+ smartlist_free(added);
+ added = NULL;
+ tt_int_op(md1->saved_location, ==, SAVED_IN_CACHE);
+ tt_int_op(md2->saved_location, ==, SAVED_IN_CACHE);
+ tt_int_op(md3->saved_location, ==, SAVED_IN_JOURNAL);
+
+ tt_int_op(microdesc_cache_rebuild(mc, 1), ==, 0);
+ tt_int_op(md3->saved_location, ==, SAVED_IN_CACHE);
+
done:
if (options)
tor_free(options->DataDirectory);
@@ -226,8 +243,158 @@ test_md_cache(void *data)
tor_free(fn);
}
+static const char truncated_md[] =
+ "@last-listed 2013-08-08 19:02:59\n"
+ "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBAM91vLFNaM+gGhnRIdz2Cm/Kl7Xz0cOobIdVzhS3cKUJfk867hCuTipS\n"
+ "NveLBzNopvgXKruAAzEj3cACxk6Q8lv5UWOGCD1UolkgsWSE62RBjap44g+oc9J1\n"
+ "RI9968xOTZw0VaBQg9giEILNXl0djoikQ+5tQRUvLDDa67gpa5Q1AgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "family @\n";
+
+static void
+test_md_cache_broken(void *data)
+{
+ or_options_t *options;
+ char *fn=NULL;
+ microdesc_cache_t *mc = NULL;
+
+ (void)data;
+
+ options = get_options_mutable();
+ tt_assert(options);
+ tor_free(options->DataDirectory);
+ options->DataDirectory = tor_strdup(get_fname("md_datadir_test2"));
+
+#ifdef _WIN32
+ tt_int_op(0, ==, mkdir(options->DataDirectory));
+#else
+ tt_int_op(0, ==, mkdir(options->DataDirectory, 0700));
+#endif
+
+ tor_asprintf(&fn, "%s"PATH_SEPARATOR"cached-microdescs",
+ options->DataDirectory);
+
+ write_str_to_file(fn, truncated_md, 1);
+
+ mc = get_microdesc_cache();
+ tt_assert(mc);
+
+ done:
+ if (options)
+ tor_free(options->DataDirectory);
+ tor_free(fn);
+ microdesc_free_all();
+}
+
+/* Generated by chutney. */
+static const char test_ri[] =
+ "router test005r 127.0.0.1 5005 0 7005\n"
+ "platform Tor 0.2.5.4-alpha-dev on Linux\n"
+ "protocols Link 1 2 Circuit 1\n"
+ "published 2014-05-06 22:57:55\n"
+ "fingerprint 09DE 3BA2 48C2 1C3F 3760 6CD3 8460 43A6 D5EC F59E\n"
+ "uptime 0\n"
+ "bandwidth 1073741824 1073741824 0\n"
+ "extra-info-digest 361F9428F9FA4DD854C03DDBCC159D0D9FA996C9\n"
+ "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBANBJz8Vldl12aFeSMPLiA4nOetLDN0oxU8bB1SDhO7Uu2zdWYVYAF5J0\n"
+ "st7WvrVy/jA9v/fsezNAPskBanecHRSkdMTpkcgRPMHE7CTGEwIy1Yp1X4bPgDlC\n"
+ "VCnbs5Pcts5HnWEYNK7qHDAUn+IlmjOO+pTUY8uyq+GQVz6H9wFlAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "signing-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBANbGUC4802Ke6C3nOVxN0U0HhIRrs32cQFEL4v+UUMJPgjbistHBvOax\n"
+ "CWVR/sMXM2kKJeGThJ9ZUs2p9dDG4WHPUXgkMqzTTEeeFa7pQKU0brgbmLaJq0Pi\n"
+ "mxmqC5RkTHa5bQvq6QlSFprAEoovV27cWqBM9jVdV9hyc//6kwPzAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "hidden-service-dir\n"
+ "ntor-onion-key Gg73xH7+kTfT6bi1uNVx9gwQdQas9pROIfmc4NpAdC4=\n"
+ "reject *:25\n"
+ "reject *:119\n"
+ "reject *:135-139\n"
+ "reject *:445\n"
+ "reject *:563\n"
+ "reject *:1214\n"
+ "reject *:4661-4666\n"
+ "reject *:6346-6429\n"
+ "reject *:6699\n"
+ "reject *:6881-6999\n"
+ "accept *:*\n"
+ "router-signature\n"
+ "-----BEGIN SIGNATURE-----\n"
+ "ImzX5PF2vRCrG1YzGToyjoxYhgh1vtHEDjmP+tIS/iil1DSnHZNpHSuHp0L1jE9S\n"
+ "yZyrtKaqpBE/aecAM3j4CWCn/ipnAAQkHcyRLin1bYvqBtRzyopVCRlUhF+uWrLq\n"
+ "t0xkIE39ss/EwmQr7iIgkdVH4oRIMsjYnFFJBG26nYY=\n"
+ "-----END SIGNATURE-----\n";
+
+static const char test_md_8[] =
+ "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBANBJz8Vldl12aFeSMPLiA4nOetLDN0oxU8bB1SDhO7Uu2zdWYVYAF5J0\n"
+ "st7WvrVy/jA9v/fsezNAPskBanecHRSkdMTpkcgRPMHE7CTGEwIy1Yp1X4bPgDlC\n"
+ "VCnbs5Pcts5HnWEYNK7qHDAUn+IlmjOO+pTUY8uyq+GQVz6H9wFlAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "p reject 25,119,135-139,445,563,1214,4661-4666,6346-6429,6699,6881-6999\n";
+
+static const char test_md_16[] =
+ "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBANBJz8Vldl12aFeSMPLiA4nOetLDN0oxU8bB1SDhO7Uu2zdWYVYAF5J0\n"
+ "st7WvrVy/jA9v/fsezNAPskBanecHRSkdMTpkcgRPMHE7CTGEwIy1Yp1X4bPgDlC\n"
+ "VCnbs5Pcts5HnWEYNK7qHDAUn+IlmjOO+pTUY8uyq+GQVz6H9wFlAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "ntor-onion-key Gg73xH7+kTfT6bi1uNVx9gwQdQas9pROIfmc4NpAdC4=\n"
+ "p reject 25,119,135-139,445,563,1214,4661-4666,6346-6429,6699,6881-6999\n";
+
+static const char test_md_18[] =
+ "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBANBJz8Vldl12aFeSMPLiA4nOetLDN0oxU8bB1SDhO7Uu2zdWYVYAF5J0\n"
+ "st7WvrVy/jA9v/fsezNAPskBanecHRSkdMTpkcgRPMHE7CTGEwIy1Yp1X4bPgDlC\n"
+ "VCnbs5Pcts5HnWEYNK7qHDAUn+IlmjOO+pTUY8uyq+GQVz6H9wFlAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "ntor-onion-key Gg73xH7+kTfT6bi1uNVx9gwQdQas9pROIfmc4NpAdC4=\n"
+ "p reject 25,119,135-139,445,563,1214,4661-4666,6346-6429,6699,6881-6999\n"
+ "id rsa1024 Cd47okjCHD83YGzThGBDptXs9Z4\n";
+
+static void
+test_md_generate(void *arg)
+{
+ routerinfo_t *ri;
+ microdesc_t *md = NULL;
+ (void)arg;
+
+ ri = router_parse_entry_from_string(test_ri, NULL, 0, 0, NULL);
+ tt_assert(ri);
+ md = dirvote_create_microdescriptor(ri, 8);
+ tt_str_op(md->body, ==, test_md_8);
+
+ /* XXXX test family lines. */
+ /* XXXX test method 14 for A lines. */
+ /* XXXX test method 15 for P6 lines. */
+
+ microdesc_free(md);
+ md = NULL;
+ md = dirvote_create_microdescriptor(ri, 16);
+ tt_str_op(md->body, ==, test_md_16);
+
+ microdesc_free(md);
+ md = NULL;
+ md = dirvote_create_microdescriptor(ri, 18);
+ tt_str_op(md->body, ==, test_md_18);
+
+ done:
+ microdesc_free(md);
+ routerinfo_free(ri);
+}
+
struct testcase_t microdesc_tests[] = {
{ "cache", test_md_cache, TT_FORK, NULL, NULL },
+ { "broken_cache", test_md_cache_broken, TT_FORK, NULL, NULL },
+ { "generate", test_md_generate, 0, NULL, NULL },
END_OF_TESTCASES
};
diff --git a/src/test/test_nodelist.c b/src/test/test_nodelist.c
new file mode 100644
index 000000000..600e6a89d
--- /dev/null
+++ b/src/test/test_nodelist.c
@@ -0,0 +1,71 @@
+/* Copyright (c) 2007-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file test_nodelist.c
+ * \brief Unit tests for nodelist related functions.
+ **/
+
+#include "or.h"
+#include "nodelist.h"
+#include "test.h"
+
+/** Tese the case when node_get_by_id() returns NULL,
+ * node_get_verbose_nickname_by_id should return the base 16 encoding
+ * of the id.
+ */
+static void
+test_nodelist_node_get_verbose_nickname_by_id_null_node(void *arg)
+{
+ char vname[MAX_VERBOSE_NICKNAME_LEN+1];
+ const char ID[] = "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA"
+ "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA";
+ (void) arg;
+
+ /* make sure node_get_by_id returns NULL */
+ test_assert(!node_get_by_id(ID));
+ node_get_verbose_nickname_by_id(ID, vname);
+ test_streq(vname, "$AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
+ done:
+ return;
+}
+
+/** For routers without named flag, get_verbose_nickname should return
+ * "Fingerprint~Nickname"
+ */
+static void
+test_nodelist_node_get_verbose_nickname_not_named(void *arg)
+{
+ node_t mock_node;
+ routerstatus_t mock_rs;
+
+ char vname[MAX_VERBOSE_NICKNAME_LEN+1];
+
+ (void) arg;
+
+ memset(&mock_node, 0, sizeof(node_t));
+ memset(&mock_rs, 0, sizeof(routerstatus_t));
+
+ /* verbose nickname should use ~ instead of = for unnamed routers */
+ strlcpy(mock_rs.nickname, "TestOR", sizeof(mock_rs.nickname));
+ mock_node.rs = &mock_rs;
+ memcpy(mock_node.identity,
+ "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA"
+ "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA",
+ DIGEST_LEN);
+ node_get_verbose_nickname(&mock_node, vname);
+ test_streq(vname, "$AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA~TestOR");
+
+ done:
+ return;
+}
+
+#define NODE(name, flags) \
+ { #name, test_nodelist_##name, (flags), NULL, NULL }
+
+struct testcase_t nodelist_tests[] = {
+ NODE(node_get_verbose_nickname_by_id_null_node, TT_FORK),
+ NODE(node_get_verbose_nickname_not_named, TT_FORK),
+ END_OF_TESTCASES
+};
+
diff --git a/src/test/test_ntor_cl.c b/src/test/test_ntor_cl.c
new file mode 100644
index 000000000..f2b7a72ad
--- /dev/null
+++ b/src/test/test_ntor_cl.c
@@ -0,0 +1,170 @@
+/* Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#include "orconfig.h"
+#include <stdio.h>
+#include <stdlib.h>
+
+#define ONION_NTOR_PRIVATE
+#include "or.h"
+#include "util.h"
+#include "compat.h"
+#include "crypto.h"
+#include "crypto_curve25519.h"
+#include "onion_ntor.h"
+
+#ifndef CURVE25519_ENABLED
+#error "This isn't going to work without curve25519."
+#endif
+
+#define N_ARGS(n) STMT_BEGIN { \
+ if (argc < (n)) { \
+ fprintf(stderr, "%s needs %d arguments.\n",argv[1],n); \
+ return 1; \
+ } \
+ } STMT_END
+#define BASE16(idx, var, n) STMT_BEGIN { \
+ const char *s = argv[(idx)]; \
+ if (base16_decode((char*)var, n, s, strlen(s)) < 0 ) { \
+ fprintf(stderr, "couldn't decode argument %d (%s)\n",idx,s); \
+ return 1; \
+ } \
+ } STMT_END
+#define INT(idx, var) STMT_BEGIN { \
+ var = atoi(argv[(idx)]); \
+ if (var <= 0) { \
+ fprintf(stderr, "bad integer argument %d (%s)\n",idx,argv[(idx)]); \
+ } \
+ } STMT_END
+
+static int
+client1(int argc, char **argv)
+{
+ /* client1 nodeID B -> msg state */
+ curve25519_public_key_t B;
+ uint8_t node_id[DIGEST_LEN];
+ ntor_handshake_state_t *state = NULL;
+ uint8_t msg[NTOR_ONIONSKIN_LEN];
+
+ char buf[1024];
+
+ N_ARGS(4);
+ BASE16(2, node_id, DIGEST_LEN);
+ BASE16(3, B.public_key, CURVE25519_PUBKEY_LEN);
+
+ if (onion_skin_ntor_create(node_id, &B, &state, msg)<0) {
+ fprintf(stderr, "handshake failed");
+ return 2;
+ }
+
+ base16_encode(buf, sizeof(buf), (const char*)msg, sizeof(msg));
+ printf("%s\n", buf);
+ base16_encode(buf, sizeof(buf), (void*)state, sizeof(*state));
+ printf("%s\n", buf);
+
+ ntor_handshake_state_free(state);
+ return 0;
+}
+
+static int
+server1(int argc, char **argv)
+{
+ uint8_t msg_in[NTOR_ONIONSKIN_LEN];
+ curve25519_keypair_t kp;
+ di_digest256_map_t *keymap=NULL;
+ uint8_t node_id[DIGEST_LEN];
+ int keybytes;
+
+ uint8_t msg_out[NTOR_REPLY_LEN];
+ uint8_t *keys = NULL;
+ char *hexkeys = NULL;
+ int result = 0;
+
+ char buf[256];
+
+ /* server1: b nodeID msg N -> msg keys */
+ N_ARGS(6);
+ BASE16(2, kp.seckey.secret_key, CURVE25519_SECKEY_LEN);
+ BASE16(3, node_id, DIGEST_LEN);
+ BASE16(4, msg_in, NTOR_ONIONSKIN_LEN);
+ INT(5, keybytes);
+
+ curve25519_public_key_generate(&kp.pubkey, &kp.seckey);
+ dimap_add_entry(&keymap, kp.pubkey.public_key, &kp);
+
+ keys = tor_malloc(keybytes);
+ hexkeys = tor_malloc(keybytes*2+1);
+ if (onion_skin_ntor_server_handshake(
+ msg_in, keymap, NULL, node_id, msg_out, keys,
+ (size_t)keybytes)<0) {
+ fprintf(stderr, "handshake failed");
+ result = 2;
+ goto done;
+ }
+
+ base16_encode(buf, sizeof(buf), (const char*)msg_out, sizeof(msg_out));
+ printf("%s\n", buf);
+ base16_encode(hexkeys, keybytes*2+1, (const char*)keys, keybytes);
+ printf("%s\n", hexkeys);
+
+ done:
+ tor_free(keys);
+ tor_free(hexkeys);
+ return result;
+}
+
+static int
+client2(int argc, char **argv)
+{
+ struct ntor_handshake_state_t state;
+ uint8_t msg[NTOR_REPLY_LEN];
+ int keybytes;
+ uint8_t *keys;
+ char *hexkeys;
+ int result = 0;
+
+ N_ARGS(5);
+ BASE16(2, (&state), sizeof(state));
+ BASE16(3, msg, sizeof(msg));
+ INT(4, keybytes);
+
+ keys = tor_malloc(keybytes);
+ hexkeys = tor_malloc(keybytes*2+1);
+ if (onion_skin_ntor_client_handshake(&state, msg, keys, keybytes)<0) {
+ fprintf(stderr, "handshake failed");
+ result = 2;
+ goto done;
+ }
+
+ base16_encode(hexkeys, keybytes*2+1, (const char*)keys, keybytes);
+ printf("%s\n", hexkeys);
+
+ done:
+ tor_free(keys);
+ tor_free(hexkeys);
+ return result;
+}
+
+int
+main(int argc, char **argv)
+{
+ /*
+ client1: nodeID B -> msg state
+ server1: b nodeID msg N -> msg keys
+ client2: state msg N -> keys
+ */
+ if (argc < 2) {
+ fprintf(stderr, "I need arguments. Read source for more info.\n");
+ return 1;
+ } else if (!strcmp(argv[1], "client1")) {
+ return client1(argc, argv);
+ } else if (!strcmp(argv[1], "server1")) {
+ return server1(argc, argv);
+ } else if (!strcmp(argv[1], "client2")) {
+ return client2(argc, argv);
+ } else {
+ fprintf(stderr, "What's a %s?\n", argv[1]);
+ return 1;
+ }
+}
+
diff --git a/src/test/test_oom.c b/src/test/test_oom.c
new file mode 100644
index 000000000..32f4803bb
--- /dev/null
+++ b/src/test/test_oom.c
@@ -0,0 +1,372 @@
+/* Copyright (c) 2014, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/* Unit tests for OOM handling logic */
+
+#define RELAY_PRIVATE
+#define BUFFERS_PRIVATE
+#define CIRCUITLIST_PRIVATE
+#define CONNECTION_PRIVATE
+#include "or.h"
+#include "buffers.h"
+#include "circuitlist.h"
+#include "compat_libevent.h"
+#include "connection.h"
+#include "config.h"
+#ifdef ENABLE_MEMPOOLS
+#include "mempool.h"
+#endif
+#include "relay.h"
+#include "test.h"
+
+/* small replacement mock for circuit_mark_for_close_ to avoid doing all
+ * the other bookkeeping that comes with marking circuits. */
+static void
+circuit_mark_for_close_dummy_(circuit_t *circ, int reason, int line,
+ const char *file)
+{
+ (void) reason;
+ if (circ->marked_for_close) {
+ TT_FAIL(("Circuit already marked for close at %s:%d, but we are marking "
+ "it again at %s:%d",
+ circ->marked_for_close_file, (int)circ->marked_for_close,
+ file, line));
+ }
+
+ circ->marked_for_close = line;
+ circ->marked_for_close_file = file;
+}
+
+static circuit_t *
+dummy_or_circuit_new(int n_p_cells, int n_n_cells)
+{
+ or_circuit_t *circ = or_circuit_new(0, NULL);
+ int i;
+ cell_t cell;
+
+ for (i=0; i < n_p_cells; ++i) {
+ crypto_rand((void*)&cell, sizeof(cell));
+ cell_queue_append_packed_copy(TO_CIRCUIT(circ), &circ->p_chan_cells,
+ 0, &cell, 1, 0);
+ }
+
+ for (i=0; i < n_n_cells; ++i) {
+ crypto_rand((void*)&cell, sizeof(cell));
+ cell_queue_append_packed_copy(TO_CIRCUIT(circ),
+ &TO_CIRCUIT(circ)->n_chan_cells,
+ 1, &cell, 1, 0);
+ }
+
+ TO_CIRCUIT(circ)->purpose = CIRCUIT_PURPOSE_OR;
+ return TO_CIRCUIT(circ);
+}
+
+static circuit_t *
+dummy_origin_circuit_new(int n_cells)
+{
+ origin_circuit_t *circ = origin_circuit_new();
+ int i;
+ cell_t cell;
+
+ for (i=0; i < n_cells; ++i) {
+ crypto_rand((void*)&cell, sizeof(cell));
+ cell_queue_append_packed_copy(TO_CIRCUIT(circ),
+ &TO_CIRCUIT(circ)->n_chan_cells,
+ 1, &cell, 1, 0);
+ }
+
+ TO_CIRCUIT(circ)->purpose = CIRCUIT_PURPOSE_C_GENERAL;
+ return TO_CIRCUIT(circ);
+}
+
+static void
+add_bytes_to_buf(generic_buffer_t *buf, size_t n_bytes)
+{
+ char b[3000];
+
+ while (n_bytes) {
+ size_t this_add = n_bytes > sizeof(b) ? sizeof(b) : n_bytes;
+ crypto_rand(b, this_add);
+ generic_buffer_add(buf, b, this_add);
+ n_bytes -= this_add;
+ }
+}
+
+static edge_connection_t *
+dummy_edge_conn_new(circuit_t *circ,
+ int type, size_t in_bytes, size_t out_bytes)
+{
+ edge_connection_t *conn;
+
+ if (type == CONN_TYPE_EXIT)
+ conn = edge_connection_new(type, AF_INET);
+ else
+ conn = ENTRY_TO_EDGE_CONN(entry_connection_new(type, AF_INET));
+
+ /* We add these bytes directly to the buffers, to avoid all the
+ * edge connection read/write machinery. */
+ add_bytes_to_buf(TO_CONN(conn)->inbuf, in_bytes);
+ add_bytes_to_buf(TO_CONN(conn)->outbuf, out_bytes);
+
+ conn->on_circuit = circ;
+ if (type == CONN_TYPE_EXIT) {
+ or_circuit_t *oc = TO_OR_CIRCUIT(circ);
+ conn->next_stream = oc->n_streams;
+ oc->n_streams = conn;
+ } else {
+ origin_circuit_t *oc = TO_ORIGIN_CIRCUIT(circ);
+ conn->next_stream = oc->p_streams;
+ oc->p_streams = conn;
+ }
+
+ return conn;
+}
+
+/** Run unit tests for buffers.c */
+static void
+test_oom_circbuf(void *arg)
+{
+ or_options_t *options = get_options_mutable();
+ circuit_t *c1 = NULL, *c2 = NULL, *c3 = NULL, *c4 = NULL;
+ struct timeval tv = { 1389631048, 0 };
+
+ (void) arg;
+
+ MOCK(circuit_mark_for_close_, circuit_mark_for_close_dummy_);
+
+#ifdef ENABLE_MEMPOOLS
+ init_cell_pool();
+#endif /* ENABLE_MEMPOOLS */
+
+ /* Far too low for real life. */
+ options->MaxMemInQueues = 256*packed_cell_mem_cost();
+ options->CellStatistics = 0;
+
+ tt_int_op(cell_queues_check_size(), ==, 0); /* We don't start out OOM. */
+ tt_int_op(cell_queues_get_total_allocation(), ==, 0);
+ tt_int_op(buf_get_total_allocation(), ==, 0);
+
+ /* Now we're going to fake up some circuits and get them added to the global
+ circuit list. */
+ tv.tv_usec = 0;
+ tor_gettimeofday_cache_set(&tv);
+ c1 = dummy_origin_circuit_new(30);
+ tv.tv_usec = 10*1000;
+ tor_gettimeofday_cache_set(&tv);
+ c2 = dummy_or_circuit_new(20, 20);
+
+#ifdef ENABLE_MEMPOOLS
+ tt_int_op(packed_cell_mem_cost(), ==,
+ sizeof(packed_cell_t) + MP_POOL_ITEM_OVERHEAD);
+#else
+ tt_int_op(packed_cell_mem_cost(), ==,
+ sizeof(packed_cell_t));
+#endif /* ENABLE_MEMPOOLS */
+ tt_int_op(cell_queues_get_total_allocation(), ==,
+ packed_cell_mem_cost() * 70);
+ tt_int_op(cell_queues_check_size(), ==, 0); /* We are still not OOM */
+
+ tv.tv_usec = 20*1000;
+ tor_gettimeofday_cache_set(&tv);
+ c3 = dummy_or_circuit_new(100, 85);
+ tt_int_op(cell_queues_check_size(), ==, 0); /* We are still not OOM */
+ tt_int_op(cell_queues_get_total_allocation(), ==,
+ packed_cell_mem_cost() * 255);
+
+ tv.tv_usec = 30*1000;
+ tor_gettimeofday_cache_set(&tv);
+ /* Adding this cell will trigger our OOM handler. */
+ c4 = dummy_or_circuit_new(2, 0);
+
+ tt_int_op(cell_queues_get_total_allocation(), ==,
+ packed_cell_mem_cost() * 257);
+
+ tt_int_op(cell_queues_check_size(), ==, 1); /* We are now OOM */
+
+ tt_assert(c1->marked_for_close);
+ tt_assert(! c2->marked_for_close);
+ tt_assert(! c3->marked_for_close);
+ tt_assert(! c4->marked_for_close);
+
+ tt_int_op(cell_queues_get_total_allocation(), ==,
+ packed_cell_mem_cost() * (257 - 30));
+
+ circuit_free(c1);
+ tv.tv_usec = 0;
+ tor_gettimeofday_cache_set(&tv); /* go back in time */
+ c1 = dummy_or_circuit_new(90, 0);
+
+ tv.tv_usec = 40*1000; /* go back to the future */
+ tor_gettimeofday_cache_set(&tv);
+
+ tt_int_op(cell_queues_check_size(), ==, 1); /* We are now OOM */
+
+ tt_assert(c1->marked_for_close);
+ tt_assert(! c2->marked_for_close);
+ tt_assert(! c3->marked_for_close);
+ tt_assert(! c4->marked_for_close);
+
+ tt_int_op(cell_queues_get_total_allocation(), ==,
+ packed_cell_mem_cost() * (257 - 30));
+
+ done:
+ circuit_free(c1);
+ circuit_free(c2);
+ circuit_free(c3);
+ circuit_free(c4);
+
+ UNMOCK(circuit_mark_for_close_);
+}
+
+/** Run unit tests for buffers.c */
+static void
+test_oom_streambuf(void *arg)
+{
+ or_options_t *options = get_options_mutable();
+ circuit_t *c1 = NULL, *c2 = NULL, *c3 = NULL, *c4 = NULL, *c5 = NULL;
+ struct timeval tv = { 1389641159, 0 };
+ uint32_t tvms;
+ int i;
+ smartlist_t *edgeconns = smartlist_new();
+
+ (void) arg;
+
+ MOCK(circuit_mark_for_close_, circuit_mark_for_close_dummy_);
+
+#ifdef ENABLE_MEMPOOLS
+ init_cell_pool();
+#endif /* ENABLE_MEMPOOLS */
+
+ /* Far too low for real life. */
+ options->MaxMemInQueues = 81*packed_cell_mem_cost() + 4096 * 34;
+ options->CellStatistics = 0;
+
+ tt_int_op(cell_queues_check_size(), ==, 0); /* We don't start out OOM. */
+ tt_int_op(cell_queues_get_total_allocation(), ==, 0);
+ tt_int_op(buf_get_total_allocation(), ==, 0);
+
+ /* Start all circuits with a bit of data queued in cells */
+ tv.tv_usec = 500*1000; /* go halfway into the second. */
+ tor_gettimeofday_cache_set(&tv);
+ c1 = dummy_or_circuit_new(10,10);
+ tv.tv_usec = 510*1000;
+ tor_gettimeofday_cache_set(&tv);
+ c2 = dummy_origin_circuit_new(20);
+ tv.tv_usec = 520*1000;
+ tor_gettimeofday_cache_set(&tv);
+ c3 = dummy_or_circuit_new(20,20);
+ tv.tv_usec = 530*1000;
+ tor_gettimeofday_cache_set(&tv);
+ c4 = dummy_or_circuit_new(0,0);
+ tt_int_op(cell_queues_get_total_allocation(), ==,
+ packed_cell_mem_cost() * 80);
+
+ tv.tv_usec = 600*1000;
+ tor_gettimeofday_cache_set(&tv);
+
+ /* Add some connections to c1...c4. */
+ for (i = 0; i < 4; ++i) {
+ edge_connection_t *ec;
+ /* link it to a circuit */
+ tv.tv_usec += 10*1000;
+ tor_gettimeofday_cache_set(&tv);
+ ec = dummy_edge_conn_new(c1, CONN_TYPE_EXIT, 1000, 1000);
+ tt_assert(ec);
+ smartlist_add(edgeconns, ec);
+ tv.tv_usec += 10*1000;
+ tor_gettimeofday_cache_set(&tv);
+ ec = dummy_edge_conn_new(c2, CONN_TYPE_AP, 1000, 1000);
+ tt_assert(ec);
+ smartlist_add(edgeconns, ec);
+ tv.tv_usec += 10*1000;
+ tor_gettimeofday_cache_set(&tv);
+ ec = dummy_edge_conn_new(c4, CONN_TYPE_EXIT, 1000, 1000); /* Yes, 4 twice*/
+ tt_assert(ec);
+ smartlist_add(edgeconns, ec);
+ tv.tv_usec += 10*1000;
+ tor_gettimeofday_cache_set(&tv);
+ ec = dummy_edge_conn_new(c4, CONN_TYPE_EXIT, 1000, 1000);
+ smartlist_add(edgeconns, ec);
+ tt_assert(ec);
+ }
+
+ tv.tv_sec += 1;
+ tv.tv_usec = 0;
+ tvms = (uint32_t) tv_to_msec(&tv);
+
+ tt_int_op(circuit_max_queued_cell_age(c1, tvms), ==, 500);
+ tt_int_op(circuit_max_queued_cell_age(c2, tvms), ==, 490);
+ tt_int_op(circuit_max_queued_cell_age(c3, tvms), ==, 480);
+ tt_int_op(circuit_max_queued_cell_age(c4, tvms), ==, 0);
+
+ tt_int_op(circuit_max_queued_data_age(c1, tvms), ==, 390);
+ tt_int_op(circuit_max_queued_data_age(c2, tvms), ==, 380);
+ tt_int_op(circuit_max_queued_data_age(c3, tvms), ==, 0);
+ tt_int_op(circuit_max_queued_data_age(c4, tvms), ==, 370);
+
+ tt_int_op(circuit_max_queued_item_age(c1, tvms), ==, 500);
+ tt_int_op(circuit_max_queued_item_age(c2, tvms), ==, 490);
+ tt_int_op(circuit_max_queued_item_age(c3, tvms), ==, 480);
+ tt_int_op(circuit_max_queued_item_age(c4, tvms), ==, 370);
+
+ tt_int_op(cell_queues_get_total_allocation(), ==,
+ packed_cell_mem_cost() * 80);
+ tt_int_op(buf_get_total_allocation(), ==, 4096*16*2);
+
+ /* Now give c4 a very old buffer of modest size */
+ {
+ edge_connection_t *ec;
+ tv.tv_sec -= 1;
+ tv.tv_usec = 0;
+ tor_gettimeofday_cache_set(&tv);
+ ec = dummy_edge_conn_new(c4, CONN_TYPE_EXIT, 1000, 1000);
+ tt_assert(ec);
+ smartlist_add(edgeconns, ec);
+ }
+ tt_int_op(buf_get_total_allocation(), ==, 4096*17*2);
+ tt_int_op(circuit_max_queued_item_age(c4, tvms), ==, 1000);
+
+ tt_int_op(cell_queues_check_size(), ==, 0);
+
+ /* And run over the limit. */
+ tv.tv_usec = 800*1000;
+ tor_gettimeofday_cache_set(&tv);
+ c5 = dummy_or_circuit_new(0,5);
+
+ tt_int_op(cell_queues_get_total_allocation(), ==,
+ packed_cell_mem_cost() * 85);
+ tt_int_op(buf_get_total_allocation(), ==, 4096*17*2);
+
+ tt_int_op(cell_queues_check_size(), ==, 1); /* We are now OOM */
+
+ /* C4 should have died. */
+ tt_assert(! c1->marked_for_close);
+ tt_assert(! c2->marked_for_close);
+ tt_assert(! c3->marked_for_close);
+ tt_assert(c4->marked_for_close);
+ tt_assert(! c5->marked_for_close);
+
+ tt_int_op(cell_queues_get_total_allocation(), ==,
+ packed_cell_mem_cost() * 85);
+ tt_int_op(buf_get_total_allocation(), ==, 4096*8*2);
+
+ done:
+ circuit_free(c1);
+ circuit_free(c2);
+ circuit_free(c3);
+ circuit_free(c4);
+ circuit_free(c5);
+
+ SMARTLIST_FOREACH(edgeconns, edge_connection_t *, ec,
+ connection_free_(TO_CONN(ec)));
+ smartlist_free(edgeconns);
+
+ UNMOCK(circuit_mark_for_close_);
+}
+
+struct testcase_t oom_tests[] = {
+ { "circbuf", test_oom_circbuf, TT_FORK, NULL, NULL },
+ { "streambuf", test_oom_streambuf, TT_FORK, NULL, NULL },
+ END_OF_TESTCASES
+};
+
diff --git a/src/test/test_options.c b/src/test/test_options.c
new file mode 100644
index 000000000..737f658e2
--- /dev/null
+++ b/src/test/test_options.c
@@ -0,0 +1,170 @@
+/* Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#define CONFIG_PRIVATE
+#include "or.h"
+#include "confparse.h"
+#include "config.h"
+#include "test.h"
+
+typedef struct {
+ int severity;
+ uint32_t domain;
+ char *msg;
+} logmsg_t;
+
+static smartlist_t *messages = NULL;
+
+static void
+log_cback(int severity, uint32_t domain, const char *msg)
+{
+ logmsg_t *x = tor_malloc(sizeof(*x));
+ x->severity = severity;
+ x->domain = domain;
+ x->msg = tor_strdup(msg);
+ if (!messages)
+ messages = smartlist_new();
+ smartlist_add(messages, x);
+}
+
+static void
+setup_log_callback(void)
+{
+ log_severity_list_t lst;
+ memset(&lst, 0, sizeof(lst));
+ lst.masks[LOG_ERR - LOG_ERR] = ~0;
+ lst.masks[LOG_WARN - LOG_ERR] = ~0;
+ lst.masks[LOG_NOTICE - LOG_ERR] = ~0;
+ add_callback_log(&lst, log_cback);
+}
+
+static char *
+dump_logs(void)
+{
+ smartlist_t *msgs;
+ char *out;
+ if (! messages)
+ return tor_strdup("");
+ msgs = smartlist_new();
+ SMARTLIST_FOREACH_BEGIN(messages, logmsg_t *, x) {
+ smartlist_add_asprintf(msgs, "[%s] %s",
+ log_level_to_string(x->severity), x->msg);
+ } SMARTLIST_FOREACH_END(x);
+ out = smartlist_join_strings(msgs, "", 0, NULL);
+ SMARTLIST_FOREACH(msgs, char *, cp, tor_free(cp));
+ smartlist_free(msgs);
+ return out;
+}
+
+static void
+clear_log_messages(void)
+{
+ if (!messages)
+ return;
+ SMARTLIST_FOREACH(messages, logmsg_t *, m,
+ { tor_free(m->msg); tor_free(m); });
+ smartlist_free(messages);
+ messages = NULL;
+}
+
+static void
+test_options_validate_impl(const char *configuration,
+ const char *expect_errmsg,
+ int expect_log_severity,
+ const char *expect_log)
+{
+ or_options_t *opt = options_new();
+ or_options_t *dflt;
+ config_line_t *cl=NULL;
+ char *msg=NULL;
+ int r;
+ opt->command = CMD_RUN_TOR;
+ options_init(opt);
+
+ dflt = config_dup(&options_format, opt);
+ clear_log_messages();
+
+ r = config_get_lines(configuration, &cl, 1);
+ tt_int_op(r, ==, 0);
+
+ r = config_assign(&options_format, opt, cl, 0, 0, &msg);
+ tt_int_op(r, ==, 0);
+
+ r = options_validate(NULL, opt, dflt, 0, &msg);
+ if (expect_errmsg && !msg) {
+ TT_DIE(("Expected error message <%s> from <%s>, but got none.",
+ expect_errmsg, configuration));
+ } else if (expect_errmsg && !strstr(msg, expect_errmsg)) {
+ TT_DIE(("Expected error message <%s> from <%s>, but got <%s>.",
+ expect_errmsg, configuration, msg));
+ } else if (!expect_errmsg && msg) {
+ TT_DIE(("Expected no error message from <%s> but got <%s>.",
+ configuration, msg));
+ }
+ tt_int_op((r == 0), ==, (msg == NULL));
+
+ if (expect_log) {
+ int found = 0;
+ if (messages) {
+ SMARTLIST_FOREACH_BEGIN(messages, logmsg_t *, m) {
+ if (m->severity == expect_log_severity &&
+ strstr(m->msg, expect_log)) {
+ found = 1;
+ break;
+ }
+ } SMARTLIST_FOREACH_END(m);
+ }
+ if (!found) {
+ tor_free(msg);
+ msg = dump_logs();
+ TT_DIE(("Expected log message [%s] %s from <%s>, but got <%s>.",
+ log_level_to_string(expect_log_severity), expect_log,
+ configuration, msg));
+ }
+ }
+
+ done:
+ config_free_lines(cl);
+ or_options_free(opt);
+ or_options_free(dflt);
+ tor_free(msg);
+ clear_log_messages();
+}
+
+#define WANT_ERR(config, msg) \
+ test_options_validate_impl((config), (msg), 0, NULL)
+#define WANT_LOG(config, severity, msg) \
+ test_options_validate_impl((config), NULL, (severity), (msg))
+#define WANT_ERR_LOG(config, msg, severity, logmsg) \
+ test_options_validate_impl((config), (msg), (severity), (logmsg))
+#define OK(config) \
+ test_options_validate_impl((config), NULL, 0, NULL)
+
+static void
+test_options_validate(void *arg)
+{
+ (void)arg;
+ setup_log_callback();
+
+ WANT_ERR("ExtORPort 500000", "Invalid ExtORPort");
+
+ WANT_ERR_LOG("ServerTransportOptions trebuchet",
+ "ServerTransportOptions did not parse",
+ LOG_WARN, "Too few arguments");
+ OK("ServerTransportOptions trebuchet sling=snappy");
+ OK("ServerTransportOptions trebuchet sling=");
+ WANT_ERR_LOG("ServerTransportOptions trebuchet slingsnappy",
+ "ServerTransportOptions did not parse",
+ LOG_WARN, "\"slingsnappy\" is not a k=v");
+
+ clear_log_messages();
+ return;
+}
+
+struct testcase_t options_tests[] = {
+ { "validate", test_options_validate, TT_FORK, NULL, NULL },
+ END_OF_TESTCASES
+};
+
diff --git a/src/test/test_policy.c b/src/test/test_policy.c
new file mode 100644
index 000000000..4cdcd034b
--- /dev/null
+++ b/src/test/test_policy.c
@@ -0,0 +1,437 @@
+/* Copyright (c) 2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#include "or.h"
+#include "router.h"
+#include "routerparse.h"
+#include "policies.h"
+#include "test.h"
+
+/* Helper: assert that short_policy parses and writes back out as itself,
+ or as <b>expected</b> if that's provided. */
+static void
+test_short_policy_parse(const char *input,
+ const char *expected)
+{
+ short_policy_t *short_policy = NULL;
+ char *out = NULL;
+
+ if (expected == NULL)
+ expected = input;
+
+ short_policy = parse_short_policy(input);
+ tt_assert(short_policy);
+ out = write_short_policy(short_policy);
+ tt_str_op(out, ==, expected);
+
+ done:
+ tor_free(out);
+ short_policy_free(short_policy);
+}
+
+/** Helper: Parse the exit policy string in <b>policy_str</b>, and make sure
+ * that policies_summarize() produces the string <b>expected_summary</b> from
+ * it. */
+static void
+test_policy_summary_helper(const char *policy_str,
+ const char *expected_summary)
+{
+ config_line_t line;
+ smartlist_t *policy = smartlist_new();
+ char *summary = NULL;
+ char *summary_after = NULL;
+ int r;
+ short_policy_t *short_policy = NULL;
+
+ line.key = (char*)"foo";
+ line.value = (char *)policy_str;
+ line.next = NULL;
+
+ r = policies_parse_exit_policy(&line, &policy, 1, 0, 0, 1);
+ test_eq(r, 0);
+ summary = policy_summarize(policy, AF_INET);
+
+ test_assert(summary != NULL);
+ test_streq(summary, expected_summary);
+
+ short_policy = parse_short_policy(summary);
+ tt_assert(short_policy);
+ summary_after = write_short_policy(short_policy);
+ test_streq(summary, summary_after);
+
+ done:
+ tor_free(summary_after);
+ tor_free(summary);
+ if (policy)
+ addr_policy_list_free(policy);
+ short_policy_free(short_policy);
+}
+
+/** Run unit tests for generating summary lines of exit policies */
+static void
+test_policies_general(void *arg)
+{
+ int i;
+ smartlist_t *policy = NULL, *policy2 = NULL, *policy3 = NULL,
+ *policy4 = NULL, *policy5 = NULL, *policy6 = NULL,
+ *policy7 = NULL;
+ addr_policy_t *p;
+ tor_addr_t tar;
+ config_line_t line;
+ smartlist_t *sm = NULL;
+ char *policy_str = NULL;
+ short_policy_t *short_parsed = NULL;
+ (void)arg;
+
+ policy = smartlist_new();
+
+ p = router_parse_addr_policy_item_from_string("reject 192.168.0.0/16:*",-1);
+ test_assert(p != NULL);
+ test_eq(ADDR_POLICY_REJECT, p->policy_type);
+ tor_addr_from_ipv4h(&tar, 0xc0a80000u);
+ test_eq(0, tor_addr_compare(&p->addr, &tar, CMP_EXACT));
+ test_eq(16, p->maskbits);
+ test_eq(1, p->prt_min);
+ test_eq(65535, p->prt_max);
+
+ smartlist_add(policy, p);
+
+ tor_addr_from_ipv4h(&tar, 0x01020304u);
+ test_assert(ADDR_POLICY_ACCEPTED ==
+ compare_tor_addr_to_addr_policy(&tar, 2, policy));
+ tor_addr_make_unspec(&tar);
+ test_assert(ADDR_POLICY_PROBABLY_ACCEPTED ==
+ compare_tor_addr_to_addr_policy(&tar, 2, policy));
+ tor_addr_from_ipv4h(&tar, 0xc0a80102);
+ test_assert(ADDR_POLICY_REJECTED ==
+ compare_tor_addr_to_addr_policy(&tar, 2, policy));
+
+ test_assert(0 == policies_parse_exit_policy(NULL, &policy2, 1, 1, 0, 1));
+ test_assert(policy2);
+
+ policy3 = smartlist_new();
+ p = router_parse_addr_policy_item_from_string("reject *:*",-1);
+ test_assert(p != NULL);
+ smartlist_add(policy3, p);
+ p = router_parse_addr_policy_item_from_string("accept *:*",-1);
+ test_assert(p != NULL);
+ smartlist_add(policy3, p);
+
+ policy4 = smartlist_new();
+ p = router_parse_addr_policy_item_from_string("accept *:443",-1);
+ test_assert(p != NULL);
+ smartlist_add(policy4, p);
+ p = router_parse_addr_policy_item_from_string("accept *:443",-1);
+ test_assert(p != NULL);
+ smartlist_add(policy4, p);
+
+ policy5 = smartlist_new();
+ p = router_parse_addr_policy_item_from_string("reject 0.0.0.0/8:*",-1);
+ test_assert(p != NULL);
+ smartlist_add(policy5, p);
+ p = router_parse_addr_policy_item_from_string("reject 169.254.0.0/16:*",-1);
+ test_assert(p != NULL);
+ smartlist_add(policy5, p);
+ p = router_parse_addr_policy_item_from_string("reject 127.0.0.0/8:*",-1);
+ test_assert(p != NULL);
+ smartlist_add(policy5, p);
+ p = router_parse_addr_policy_item_from_string("reject 192.168.0.0/16:*",-1);
+ test_assert(p != NULL);
+ smartlist_add(policy5, p);
+ p = router_parse_addr_policy_item_from_string("reject 10.0.0.0/8:*",-1);
+ test_assert(p != NULL);
+ smartlist_add(policy5, p);
+ p = router_parse_addr_policy_item_from_string("reject 172.16.0.0/12:*",-1);
+ test_assert(p != NULL);
+ smartlist_add(policy5, p);
+ p = router_parse_addr_policy_item_from_string("reject 80.190.250.90:*",-1);
+ test_assert(p != NULL);
+ smartlist_add(policy5, p);
+ p = router_parse_addr_policy_item_from_string("reject *:1-65534",-1);
+ test_assert(p != NULL);
+ smartlist_add(policy5, p);
+ p = router_parse_addr_policy_item_from_string("reject *:65535",-1);
+ test_assert(p != NULL);
+ smartlist_add(policy5, p);
+ p = router_parse_addr_policy_item_from_string("accept *:1-65535",-1);
+ test_assert(p != NULL);
+ smartlist_add(policy5, p);
+
+ policy6 = smartlist_new();
+ p = router_parse_addr_policy_item_from_string("accept 43.3.0.0/9:*",-1);
+ test_assert(p != NULL);
+ smartlist_add(policy6, p);
+
+ policy7 = smartlist_new();
+ p = router_parse_addr_policy_item_from_string("accept 0.0.0.0/8:*",-1);
+ test_assert(p != NULL);
+ smartlist_add(policy7, p);
+
+ test_assert(!exit_policy_is_general_exit(policy));
+ test_assert(exit_policy_is_general_exit(policy2));
+ test_assert(!exit_policy_is_general_exit(NULL));
+ test_assert(!exit_policy_is_general_exit(policy3));
+ test_assert(!exit_policy_is_general_exit(policy4));
+ test_assert(!exit_policy_is_general_exit(policy5));
+ test_assert(!exit_policy_is_general_exit(policy6));
+ test_assert(!exit_policy_is_general_exit(policy7));
+
+ test_assert(cmp_addr_policies(policy, policy2));
+ test_assert(cmp_addr_policies(policy, NULL));
+ test_assert(!cmp_addr_policies(policy2, policy2));
+ test_assert(!cmp_addr_policies(NULL, NULL));
+
+ test_assert(!policy_is_reject_star(policy2, AF_INET));
+ test_assert(policy_is_reject_star(policy, AF_INET));
+ test_assert(policy_is_reject_star(NULL, AF_INET));
+
+ addr_policy_list_free(policy);
+ policy = NULL;
+
+ /* make sure compacting logic works. */
+ policy = NULL;
+ line.key = (char*)"foo";
+ line.value = (char*)"accept *:80,reject private:*,reject *:*";
+ line.next = NULL;
+ test_assert(0 == policies_parse_exit_policy(&line, &policy, 1, 0, 0, 1));
+ test_assert(policy);
+ //test_streq(policy->string, "accept *:80");
+ //test_streq(policy->next->string, "reject *:*");
+ test_eq(smartlist_len(policy), 4);
+
+ /* test policy summaries */
+ /* check if we properly ignore private IP addresses */
+ test_policy_summary_helper("reject 192.168.0.0/16:*,"
+ "reject 0.0.0.0/8:*,"
+ "reject 10.0.0.0/8:*,"
+ "accept *:10-30,"
+ "accept *:90,"
+ "reject *:*",
+ "accept 10-30,90");
+ /* check all accept policies, and proper counting of rejects */
+ test_policy_summary_helper("reject 11.0.0.0/9:80,"
+ "reject 12.0.0.0/9:80,"
+ "reject 13.0.0.0/9:80,"
+ "reject 14.0.0.0/9:80,"
+ "accept *:*", "accept 1-65535");
+ test_policy_summary_helper("reject 11.0.0.0/9:80,"
+ "reject 12.0.0.0/9:80,"
+ "reject 13.0.0.0/9:80,"
+ "reject 14.0.0.0/9:80,"
+ "reject 15.0.0.0:81,"
+ "accept *:*", "accept 1-65535");
+ test_policy_summary_helper("reject 11.0.0.0/9:80,"
+ "reject 12.0.0.0/9:80,"
+ "reject 13.0.0.0/9:80,"
+ "reject 14.0.0.0/9:80,"
+ "reject 15.0.0.0:80,"
+ "accept *:*",
+ "reject 80");
+ /* no exits */
+ test_policy_summary_helper("accept 11.0.0.0/9:80,"
+ "reject *:*",
+ "reject 1-65535");
+ /* port merging */
+ test_policy_summary_helper("accept *:80,"
+ "accept *:81,"
+ "accept *:100-110,"
+ "accept *:111,"
+ "reject *:*",
+ "accept 80-81,100-111");
+ /* border ports */
+ test_policy_summary_helper("accept *:1,"
+ "accept *:3,"
+ "accept *:65535,"
+ "reject *:*",
+ "accept 1,3,65535");
+ /* holes */
+ test_policy_summary_helper("accept *:1,"
+ "accept *:3,"
+ "accept *:5,"
+ "accept *:7,"
+ "reject *:*",
+ "accept 1,3,5,7");
+ test_policy_summary_helper("reject *:1,"
+ "reject *:3,"
+ "reject *:5,"
+ "reject *:7,"
+ "accept *:*",
+ "reject 1,3,5,7");
+
+ /* Short policies with unrecognized formats should get accepted. */
+ test_short_policy_parse("accept fred,2,3-5", "accept 2,3-5");
+ test_short_policy_parse("accept 2,fred,3", "accept 2,3");
+ test_short_policy_parse("accept 2,fred,3,bob", "accept 2,3");
+ test_short_policy_parse("accept 2,-3,500-600", "accept 2,500-600");
+ /* Short policies with nil entries are accepted too. */
+ test_short_policy_parse("accept 1,,3", "accept 1,3");
+ test_short_policy_parse("accept 100-200,,", "accept 100-200");
+ test_short_policy_parse("reject ,1-10,,,,30-40", "reject 1-10,30-40");
+
+ /* Try parsing various broken short policies */
+#define TT_BAD_SHORT_POLICY(s) \
+ do { \
+ tt_ptr_op(NULL, ==, (short_parsed = parse_short_policy((s)))); \
+ } while (0)
+ TT_BAD_SHORT_POLICY("accept 200-199");
+ TT_BAD_SHORT_POLICY("");
+ TT_BAD_SHORT_POLICY("rejekt 1,2,3");
+ TT_BAD_SHORT_POLICY("reject ");
+ TT_BAD_SHORT_POLICY("reject");
+ TT_BAD_SHORT_POLICY("rej");
+ TT_BAD_SHORT_POLICY("accept 2,3,100000");
+ TT_BAD_SHORT_POLICY("accept 2,3x,4");
+ TT_BAD_SHORT_POLICY("accept 2,3x,4");
+ TT_BAD_SHORT_POLICY("accept 2-");
+ TT_BAD_SHORT_POLICY("accept 2-x");
+ TT_BAD_SHORT_POLICY("accept 1-,3");
+ TT_BAD_SHORT_POLICY("accept 1-,3");
+
+ /* Test a too-long policy. */
+ {
+ int i;
+ char *policy = NULL;
+ smartlist_t *chunks = smartlist_new();
+ smartlist_add(chunks, tor_strdup("accept "));
+ for (i=1; i<10000; ++i)
+ smartlist_add_asprintf(chunks, "%d,", i);
+ smartlist_add(chunks, tor_strdup("20000"));
+ policy = smartlist_join_strings(chunks, "", 0, NULL);
+ SMARTLIST_FOREACH(chunks, char *, ch, tor_free(ch));
+ smartlist_free(chunks);
+ short_parsed = parse_short_policy(policy);/* shouldn't be accepted */
+ tor_free(policy);
+ tt_ptr_op(NULL, ==, short_parsed);
+ }
+
+ /* truncation ports */
+ sm = smartlist_new();
+ for (i=1; i<2000; i+=2) {
+ char buf[POLICY_BUF_LEN];
+ tor_snprintf(buf, sizeof(buf), "reject *:%d", i);
+ smartlist_add(sm, tor_strdup(buf));
+ }
+ smartlist_add(sm, tor_strdup("accept *:*"));
+ policy_str = smartlist_join_strings(sm, ",", 0, NULL);
+ test_policy_summary_helper( policy_str,
+ "accept 2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,"
+ "46,48,50,52,54,56,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,"
+ "92,94,96,98,100,102,104,106,108,110,112,114,116,118,120,122,124,126,128,"
+ "130,132,134,136,138,140,142,144,146,148,150,152,154,156,158,160,162,164,"
+ "166,168,170,172,174,176,178,180,182,184,186,188,190,192,194,196,198,200,"
+ "202,204,206,208,210,212,214,216,218,220,222,224,226,228,230,232,234,236,"
+ "238,240,242,244,246,248,250,252,254,256,258,260,262,264,266,268,270,272,"
+ "274,276,278,280,282,284,286,288,290,292,294,296,298,300,302,304,306,308,"
+ "310,312,314,316,318,320,322,324,326,328,330,332,334,336,338,340,342,344,"
+ "346,348,350,352,354,356,358,360,362,364,366,368,370,372,374,376,378,380,"
+ "382,384,386,388,390,392,394,396,398,400,402,404,406,408,410,412,414,416,"
+ "418,420,422,424,426,428,430,432,434,436,438,440,442,444,446,448,450,452,"
+ "454,456,458,460,462,464,466,468,470,472,474,476,478,480,482,484,486,488,"
+ "490,492,494,496,498,500,502,504,506,508,510,512,514,516,518,520,522");
+
+ done:
+ addr_policy_list_free(policy);
+ addr_policy_list_free(policy2);
+ addr_policy_list_free(policy3);
+ addr_policy_list_free(policy4);
+ addr_policy_list_free(policy5);
+ addr_policy_list_free(policy6);
+ addr_policy_list_free(policy7);
+ tor_free(policy_str);
+ if (sm) {
+ SMARTLIST_FOREACH(sm, char *, s, tor_free(s));
+ smartlist_free(sm);
+ }
+ short_policy_free(short_parsed);
+}
+
+static void
+test_dump_exit_policy_to_string(void *arg)
+{
+ char *ep;
+ addr_policy_t *policy_entry;
+
+ routerinfo_t *ri = tor_malloc_zero(sizeof(routerinfo_t));
+
+ (void)arg;
+
+ ri->policy_is_reject_star = 1;
+ ri->exit_policy = NULL; // expecting "reject *:*"
+ ep = router_dump_exit_policy_to_string(ri,1,1);
+
+ test_streq("reject *:*",ep);
+
+ tor_free(ep);
+
+ ri->exit_policy = smartlist_new();
+ ri->policy_is_reject_star = 0;
+
+ policy_entry = router_parse_addr_policy_item_from_string("accept *:*",-1);
+
+ smartlist_add(ri->exit_policy,policy_entry);
+
+ ep = router_dump_exit_policy_to_string(ri,1,1);
+
+ test_streq("accept *:*",ep);
+
+ tor_free(ep);
+
+ policy_entry = router_parse_addr_policy_item_from_string("reject *:25",-1);
+
+ smartlist_add(ri->exit_policy,policy_entry);
+
+ ep = router_dump_exit_policy_to_string(ri,1,1);
+
+ test_streq("accept *:*\nreject *:25",ep);
+
+ tor_free(ep);
+
+ policy_entry =
+ router_parse_addr_policy_item_from_string("reject 8.8.8.8:*",-1);
+
+ smartlist_add(ri->exit_policy,policy_entry);
+
+ ep = router_dump_exit_policy_to_string(ri,1,1);
+
+ test_streq("accept *:*\nreject *:25\nreject 8.8.8.8:*",ep);
+ tor_free(ep);
+
+ policy_entry =
+ router_parse_addr_policy_item_from_string("reject6 [FC00::]/7:*",-1);
+
+ smartlist_add(ri->exit_policy,policy_entry);
+
+ ep = router_dump_exit_policy_to_string(ri,1,1);
+
+ test_streq("accept *:*\nreject *:25\nreject 8.8.8.8:*\n"
+ "reject6 [fc00::]/7:*",ep);
+ tor_free(ep);
+
+ policy_entry =
+ router_parse_addr_policy_item_from_string("accept6 [c000::]/3:*",-1);
+
+ smartlist_add(ri->exit_policy,policy_entry);
+
+ ep = router_dump_exit_policy_to_string(ri,1,1);
+
+ test_streq("accept *:*\nreject *:25\nreject 8.8.8.8:*\n"
+ "reject6 [fc00::]/7:*\naccept6 [c000::]/3:*",ep);
+
+ done:
+
+ if (ri->exit_policy) {
+ SMARTLIST_FOREACH(ri->exit_policy, addr_policy_t *,
+ entry, addr_policy_free(entry));
+ smartlist_free(ri->exit_policy);
+ }
+ tor_free(ri);
+ tor_free(ep);
+}
+
+struct testcase_t policy_tests[] = {
+ { "router_dump_exit_policy_to_string", test_dump_exit_policy_to_string, 0,
+ NULL, NULL },
+ { "general", test_policies_general, 0, NULL, NULL },
+ END_OF_TESTCASES
+};
+
diff --git a/src/test/test_pt.c b/src/test/test_pt.c
index d3dadb9bf..f71627df1 100644
--- a/src/test/test_pt.c
+++ b/src/test/test_pt.c
@@ -1,13 +1,21 @@
/* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#include "orconfig.h"
#define PT_PRIVATE
+#define UTIL_PRIVATE
+#define STATEFILE_PRIVATE
+#define CONTROL_PRIVATE
#include "or.h"
+#include "config.h"
+#include "confparse.h"
+#include "control.h"
#include "transports.h"
#include "circuitbuild.h"
+#include "util.h"
+#include "statefile.h"
#include "test.h"
static void
@@ -22,71 +30,163 @@ static void
test_pt_parsing(void)
{
char line[200];
+ transport_t *transport = NULL;
+ tor_addr_t test_addr;
managed_proxy_t *mp = tor_malloc(sizeof(managed_proxy_t));
mp->conf_state = PT_PROTO_INFANT;
mp->transports = smartlist_new();
/* incomplete cmethod */
- strcpy(line,"CMETHOD trebuchet");
+ strlcpy(line,"CMETHOD trebuchet",sizeof(line));
test_assert(parse_cmethod_line(line, mp) < 0);
reset_mp(mp);
/* wrong proxy type */
- strcpy(line,"CMETHOD trebuchet dog 127.0.0.1:1999");
+ strlcpy(line,"CMETHOD trebuchet dog 127.0.0.1:1999",sizeof(line));
test_assert(parse_cmethod_line(line, mp) < 0);
reset_mp(mp);
/* wrong addrport */
- strcpy(line,"CMETHOD trebuchet socks4 abcd");
+ strlcpy(line,"CMETHOD trebuchet socks4 abcd",sizeof(line));
test_assert(parse_cmethod_line(line, mp) < 0);
reset_mp(mp);
/* correct line */
- strcpy(line,"CMETHOD trebuchet socks5 127.0.0.1:1999");
+ strlcpy(line,"CMETHOD trebuchet socks5 127.0.0.1:1999",sizeof(line));
test_assert(parse_cmethod_line(line, mp) == 0);
- test_assert(smartlist_len(mp->transports));
+ test_assert(smartlist_len(mp->transports) == 1);
+ transport = smartlist_get(mp->transports, 0);
+ /* test registered address of transport */
+ tor_addr_parse(&test_addr, "127.0.0.1");
+ test_assert(tor_addr_eq(&test_addr, &transport->addr));
+ /* test registered port of transport */
+ test_assert(transport->port == 1999);
+ /* test registered SOCKS version of transport */
+ test_assert(transport->socks_version == PROXY_SOCKS5);
+ /* test registered name of transport */
+ test_streq(transport->name, "trebuchet");
reset_mp(mp);
/* incomplete smethod */
- strcpy(line,"SMETHOD trebuchet");
+ strlcpy(line,"SMETHOD trebuchet",sizeof(line));
test_assert(parse_smethod_line(line, mp) < 0);
reset_mp(mp);
/* wrong addr type */
- strcpy(line,"SMETHOD trebuchet abcd");
+ strlcpy(line,"SMETHOD trebuchet abcd",sizeof(line));
test_assert(parse_smethod_line(line, mp) < 0);
reset_mp(mp);
/* cowwect */
- strcpy(line,"SMETHOD trebuchy 127.0.0.1:1999");
+ strlcpy(line,"SMETHOD trebuchy 127.0.0.2:2999",sizeof(line));
test_assert(parse_smethod_line(line, mp) == 0);
+ test_assert(smartlist_len(mp->transports) == 1);
+ transport = smartlist_get(mp->transports, 0);
+ /* test registered address of transport */
+ tor_addr_parse(&test_addr, "127.0.0.2");
+ test_assert(tor_addr_eq(&test_addr, &transport->addr));
+ /* test registered port of transport */
+ test_assert(transport->port == 2999);
+ /* test registered name of transport */
+ test_streq(transport->name, "trebuchy");
reset_mp(mp);
+ /* Include some arguments. Good ones. */
+ strlcpy(line,"SMETHOD trebuchet 127.0.0.1:9999 "
+ "ARGS:counterweight=3,sling=snappy",
+ sizeof(line));
+ test_assert(parse_smethod_line(line, mp) == 0);
+ tt_int_op(1, ==, smartlist_len(mp->transports));
+ {
+ const transport_t *transport = smartlist_get(mp->transports, 0);
+ tt_assert(transport);
+ tt_str_op(transport->name, ==, "trebuchet");
+ tt_int_op(transport->port, ==, 9999);
+ tt_str_op(fmt_addr(&transport->addr), ==, "127.0.0.1");
+ tt_str_op(transport->extra_info_args, ==,
+ "counterweight=3,sling=snappy");
+ }
+ reset_mp(mp);
+
/* unsupported version */
- strcpy(line,"VERSION 666");
+ strlcpy(line,"VERSION 666",sizeof(line));
test_assert(parse_version(line, mp) < 0);
/* incomplete VERSION */
- strcpy(line,"VERSION ");
+ strlcpy(line,"VERSION ",sizeof(line));
test_assert(parse_version(line, mp) < 0);
/* correct VERSION */
- strcpy(line,"VERSION 1");
+ strlcpy(line,"VERSION 1",sizeof(line));
test_assert(parse_version(line, mp) == 0);
done:
+ reset_mp(mp);
+ smartlist_free(mp->transports);
tor_free(mp);
}
static void
+test_pt_get_transport_options(void *arg)
+{
+ char **execve_args;
+ smartlist_t *transport_list = smartlist_new();
+ managed_proxy_t *mp;
+ or_options_t *options = get_options_mutable();
+ char *opt_str = NULL;
+ config_line_t *cl = NULL;
+ (void)arg;
+
+ execve_args = tor_malloc(sizeof(char*)*2);
+ execve_args[0] = tor_strdup("cheeseshop");
+ execve_args[1] = NULL;
+
+ mp = managed_proxy_create(transport_list, execve_args, 1);
+ tt_ptr_op(mp, !=, NULL);
+ opt_str = get_transport_options_for_server_proxy(mp);
+ tt_ptr_op(opt_str, ==, NULL);
+
+ smartlist_add(mp->transports_to_launch, tor_strdup("gruyere"));
+ smartlist_add(mp->transports_to_launch, tor_strdup("roquefort"));
+ smartlist_add(mp->transports_to_launch, tor_strdup("stnectaire"));
+
+ tt_assert(options);
+
+ cl = tor_malloc_zero(sizeof(config_line_t));
+ cl->value = tor_strdup("gruyere melty=10 hardness=se;ven");
+ options->ServerTransportOptions = cl;
+
+ cl = tor_malloc_zero(sizeof(config_line_t));
+ cl->value = tor_strdup("stnectaire melty=4 hardness=three");
+ cl->next = options->ServerTransportOptions;
+ options->ServerTransportOptions = cl;
+
+ cl = tor_malloc_zero(sizeof(config_line_t));
+ cl->value = tor_strdup("pepperjack melty=12 hardness=five");
+ cl->next = options->ServerTransportOptions;
+ options->ServerTransportOptions = cl;
+
+ opt_str = get_transport_options_for_server_proxy(mp);
+ tt_str_op(opt_str, ==,
+ "gruyere:melty=10;gruyere:hardness=se\\;ven;"
+ "stnectaire:melty=4;stnectaire:hardness=three");
+
+ done:
+ tor_free(opt_str);
+ config_free_lines(cl);
+ managed_proxy_destroy(mp, 0);
+ smartlist_free(transport_list);
+}
+
+static void
test_pt_protocol(void)
{
char line[200];
@@ -99,36 +199,254 @@ test_pt_protocol(void)
/* various wrong protocol runs: */
- strcpy(line,"VERSION 1");
+ strlcpy(line,"VERSION 1",sizeof(line));
handle_proxy_line(line, mp);
test_assert(mp->conf_state == PT_PROTO_ACCEPTING_METHODS);
- strcpy(line,"VERSION 1");
+ strlcpy(line,"VERSION 1",sizeof(line));
handle_proxy_line(line, mp);
test_assert(mp->conf_state == PT_PROTO_BROKEN);
reset_mp(mp);
- strcpy(line,"CMETHOD trebuchet socks5 127.0.0.1:1999");
+ strlcpy(line,"CMETHOD trebuchet socks5 127.0.0.1:1999",sizeof(line));
handle_proxy_line(line, mp);
test_assert(mp->conf_state == PT_PROTO_BROKEN);
reset_mp(mp);
/* correct protocol run: */
- strcpy(line,"VERSION 1");
+ strlcpy(line,"VERSION 1",sizeof(line));
handle_proxy_line(line, mp);
test_assert(mp->conf_state == PT_PROTO_ACCEPTING_METHODS);
- strcpy(line,"CMETHOD trebuchet socks5 127.0.0.1:1999");
+ strlcpy(line,"CMETHOD trebuchet socks5 127.0.0.1:1999",sizeof(line));
handle_proxy_line(line, mp);
test_assert(mp->conf_state == PT_PROTO_ACCEPTING_METHODS);
- strcpy(line,"CMETHODS DONE");
+ strlcpy(line,"CMETHODS DONE",sizeof(line));
handle_proxy_line(line, mp);
test_assert(mp->conf_state == PT_PROTO_CONFIGURED);
done:
+ reset_mp(mp);
+ smartlist_free(mp->transports);
+ tor_free(mp->argv[0]);
+ tor_free(mp->argv);
+ tor_free(mp);
+}
+
+static void
+test_pt_get_extrainfo_string(void *arg)
+{
+ managed_proxy_t *mp1 = NULL, *mp2 = NULL;
+ char **argv1, **argv2;
+ smartlist_t *t1 = smartlist_new(), *t2 = smartlist_new();
+ int r;
+ char *s = NULL;
+ (void) arg;
+
+ argv1 = tor_malloc_zero(sizeof(char*)*3);
+ argv1[0] = tor_strdup("ewige");
+ argv1[1] = tor_strdup("Blumenkraft");
+ argv1[2] = NULL;
+ argv2 = tor_malloc_zero(sizeof(char*)*4);
+ argv2[0] = tor_strdup("und");
+ argv2[1] = tor_strdup("ewige");
+ argv2[2] = tor_strdup("Schlangenkraft");
+ argv2[3] = NULL;
+
+ mp1 = managed_proxy_create(t1, argv1, 1);
+ mp2 = managed_proxy_create(t2, argv2, 1);
+
+ r = parse_smethod_line("SMETHOD hagbard 127.0.0.1:5555", mp1);
+ tt_int_op(r, ==, 0);
+ r = parse_smethod_line("SMETHOD celine 127.0.0.1:1723 ARGS:card=no-enemy",
+ mp2);
+ tt_int_op(r, ==, 0);
+
+ /* Force these proxies to look "completed" or they won't generate output. */
+ mp1->conf_state = mp2->conf_state = PT_PROTO_COMPLETED;
+
+ s = pt_get_extra_info_descriptor_string();
+ tt_assert(s);
+ tt_str_op(s, ==,
+ "transport hagbard 127.0.0.1:5555\n"
+ "transport celine 127.0.0.1:1723 card=no-enemy\n");
+
+ done:
+ /* XXXX clean up better */
+ smartlist_free(t1);
+ smartlist_free(t2);
+ tor_free(s);
+}
+
+#ifdef _WIN32
+#define STDIN_HANDLE HANDLE
+#else
+#define STDIN_HANDLE FILE
+#endif
+
+static smartlist_t *
+tor_get_lines_from_handle_replacement(STDIN_HANDLE *handle,
+ enum stream_status *stream_status_out)
+{
+ static int times_called = 0;
+ smartlist_t *retval_sl = smartlist_new();
+
+ (void) handle;
+ (void) stream_status_out;
+
+ /* Generate some dummy CMETHOD lines the first 5 times. The 6th
+ time, send 'CMETHODS DONE' to finish configuring the proxy. */
+ if (times_called++ != 5) {
+ smartlist_add_asprintf(retval_sl, "SMETHOD mock%d 127.0.0.1:555%d",
+ times_called, times_called);
+ } else {
+ smartlist_add(retval_sl, tor_strdup("SMETHODS DONE"));
+ }
+
+ return retval_sl;
+}
+
+/* NOP mock */
+static void
+tor_process_handle_destroy_replacement(process_handle_t *process_handle,
+ int also_terminate_process)
+{
+ (void) process_handle;
+ (void) also_terminate_process;
+}
+
+static or_state_t *dummy_state = NULL;
+
+static or_state_t *
+get_or_state_replacement(void)
+{
+ return dummy_state;
+}
+
+static int controlevent_n = 0;
+static uint16_t controlevent_event = 0;
+static smartlist_t *controlevent_msgs = NULL;
+
+static void
+send_control_event_string_replacement(uint16_t event, event_format_t which,
+ const char *msg)
+{
+ (void) which;
+ ++controlevent_n;
+ controlevent_event = event;
+ if (!controlevent_msgs)
+ controlevent_msgs = smartlist_new();
+ smartlist_add(controlevent_msgs, tor_strdup(msg));
+}
+
+/* Test the configure_proxy() function. */
+static void
+test_pt_configure_proxy(void *arg)
+{
+ int i, retval;
+ managed_proxy_t *mp = NULL;
+ (void) arg;
+
+ dummy_state = tor_malloc_zero(sizeof(or_state_t));
+
+ MOCK(tor_get_lines_from_handle,
+ tor_get_lines_from_handle_replacement);
+ MOCK(tor_process_handle_destroy,
+ tor_process_handle_destroy_replacement);
+ MOCK(get_or_state,
+ get_or_state_replacement);
+ MOCK(send_control_event_string,
+ send_control_event_string_replacement);
+
+ control_testing_set_global_event_mask(EVENT_TRANSPORT_LAUNCHED);
+
+ mp = tor_malloc(sizeof(managed_proxy_t));
+ mp->conf_state = PT_PROTO_ACCEPTING_METHODS;
+ mp->transports = smartlist_new();
+ mp->transports_to_launch = smartlist_new();
+ mp->process_handle = tor_malloc_zero(sizeof(process_handle_t));
+ mp->argv = tor_malloc_zero(sizeof(char*)*2);
+ mp->argv[0] = tor_strdup("<testcase>");
+ mp->is_server = 1;
+
+ /* Test the return value of configure_proxy() by calling it some
+ times while it is uninitialized and then finally finalizing its
+ configuration. */
+ for (i = 0 ; i < 5 ; i++) {
+ retval = configure_proxy(mp);
+ /* retval should be zero because proxy hasn't finished configuring yet */
+ test_assert(retval == 0);
+ /* check the number of registered transports */
+ test_assert(smartlist_len(mp->transports) == i+1);
+ /* check that the mp is still waiting for transports */
+ test_assert(mp->conf_state == PT_PROTO_ACCEPTING_METHODS);
+ }
+
+ /* this last configure_proxy() should finalize the proxy configuration. */
+ retval = configure_proxy(mp);
+ /* retval should be 1 since the proxy finished configuring */
+ test_assert(retval == 1);
+ /* check the mp state */
+ test_assert(mp->conf_state == PT_PROTO_COMPLETED);
+
+ tt_int_op(controlevent_n, ==, 5);
+ tt_int_op(controlevent_event, ==, EVENT_TRANSPORT_LAUNCHED);
+ tt_int_op(smartlist_len(controlevent_msgs), ==, 5);
+ smartlist_sort_strings(controlevent_msgs);
+ tt_str_op(smartlist_get(controlevent_msgs, 0), ==,
+ "650 TRANSPORT_LAUNCHED server mock1 127.0.0.1 5551\r\n");
+ tt_str_op(smartlist_get(controlevent_msgs, 1), ==,
+ "650 TRANSPORT_LAUNCHED server mock2 127.0.0.1 5552\r\n");
+ tt_str_op(smartlist_get(controlevent_msgs, 2), ==,
+ "650 TRANSPORT_LAUNCHED server mock3 127.0.0.1 5553\r\n");
+ tt_str_op(smartlist_get(controlevent_msgs, 3), ==,
+ "650 TRANSPORT_LAUNCHED server mock4 127.0.0.1 5554\r\n");
+ tt_str_op(smartlist_get(controlevent_msgs, 4), ==,
+ "650 TRANSPORT_LAUNCHED server mock5 127.0.0.1 5555\r\n");
+
+ { /* check that the transport info were saved properly in the tor state */
+ config_line_t *transport_in_state = NULL;
+ smartlist_t *transport_info_sl = smartlist_new();
+ char *name_of_transport = NULL;
+ char *bindaddr = NULL;
+
+ /* Get the bindaddr for "mock1" and check it against the bindaddr
+ that the mocked tor_get_lines_from_handle() generated. */
+ transport_in_state = get_transport_in_state_by_name("mock1");
+ test_assert(transport_in_state);
+ smartlist_split_string(transport_info_sl, transport_in_state->value,
+ NULL, 0, 0);
+ name_of_transport = smartlist_get(transport_info_sl, 0);
+ bindaddr = smartlist_get(transport_info_sl, 1);
+ tt_str_op(name_of_transport, ==, "mock1");
+ tt_str_op(bindaddr, ==, "127.0.0.1:5551");
+
+ SMARTLIST_FOREACH(transport_info_sl, char *, cp, tor_free(cp));
+ smartlist_free(transport_info_sl);
+ }
+
+ done:
+ or_state_free(dummy_state);
+ UNMOCK(tor_get_lines_from_handle);
+ UNMOCK(tor_process_handle_destroy);
+ UNMOCK(get_or_state);
+ UNMOCK(send_control_event_string);
+ if (controlevent_msgs) {
+ SMARTLIST_FOREACH(controlevent_msgs, char *, cp, tor_free(cp));
+ smartlist_free(controlevent_msgs);
+ controlevent_msgs = NULL;
+ }
+ if (mp->transports) {
+ SMARTLIST_FOREACH(mp->transports, transport_t *, t, transport_free(t));
+ smartlist_free(mp->transports);
+ }
+ smartlist_free(mp->transports_to_launch);
+ tor_free(mp->process_handle);
+ tor_free(mp->argv[0]);
+ tor_free(mp->argv);
tor_free(mp);
}
@@ -138,6 +456,12 @@ test_pt_protocol(void)
struct testcase_t pt_tests[] = {
PT_LEGACY(parsing),
PT_LEGACY(protocol),
+ { "get_transport_options", test_pt_get_transport_options, TT_FORK,
+ NULL, NULL },
+ { "get_extrainfo_string", test_pt_get_extrainfo_string, TT_FORK,
+ NULL, NULL },
+ { "configure_proxy",test_pt_configure_proxy, TT_FORK,
+ NULL, NULL },
END_OF_TESTCASES
};
diff --git a/src/test/test_relaycell.c b/src/test/test_relaycell.c
new file mode 100644
index 000000000..5deb36260
--- /dev/null
+++ b/src/test/test_relaycell.c
@@ -0,0 +1,249 @@
+/* Copyright (c) 2014, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/* Unit tests for handling different kinds of relay cell */
+
+#define RELAY_PRIVATE
+#include "or.h"
+#include "config.h"
+#include "connection.h"
+#include "connection_edge.h"
+#include "relay.h"
+#include "test.h"
+
+static int srm_ncalls;
+static entry_connection_t *srm_conn;
+static int srm_atype;
+static size_t srm_alen;
+static int srm_answer_is_set;
+static uint8_t srm_answer[512];
+static int srm_ttl;
+static time_t srm_expires;
+
+/* Mock replacement for connection_ap_hannshake_socks_resolved() */
+static void
+socks_resolved_mock(entry_connection_t *conn,
+ int answer_type,
+ size_t answer_len,
+ const uint8_t *answer,
+ int ttl,
+ time_t expires)
+{
+ srm_ncalls++;
+ srm_conn = conn;
+ srm_atype = answer_type;
+ srm_alen = answer_len;
+ if (answer) {
+ memset(srm_answer, 0, sizeof(srm_answer));
+ memcpy(srm_answer, answer, answer_len < 512 ? answer_len : 512);
+ srm_answer_is_set = 1;
+ } else {
+ srm_answer_is_set = 0;
+ }
+ srm_ttl = ttl;
+ srm_expires = expires;
+}
+
+static int mum_ncalls;
+static entry_connection_t *mum_conn;
+static int mum_endreason;
+
+/* Mock replacement for connection_mark_unattached_ap_() */
+static void
+mark_unattached_mock(entry_connection_t *conn, int endreason,
+ int line, const char *file)
+{
+ ++mum_ncalls;
+ mum_conn = conn;
+ mum_endreason = endreason;
+ (void) line;
+ (void) file;
+}
+
+/* Tests for connection_edge_process_resolved_cell().
+
+ The point of ..process_resolved_cell() is to handle an incoming cell
+ on an entry connection, and call connection_mark_unattached_ap() and/or
+ connection_ap_handshake_socks_resolved().
+ */
+static void
+test_relaycell_resolved(void *arg)
+{
+ entry_connection_t *entryconn;
+ edge_connection_t *edgeconn;
+ cell_t cell;
+ relay_header_t rh;
+ int r;
+ or_options_t *options = get_options_mutable();
+
+#define SET_CELL(s) do { \
+ memset(&cell, 0, sizeof(cell)); \
+ memset(&rh, 0, sizeof(rh)); \
+ memcpy(cell.payload + RELAY_HEADER_SIZE, (s), sizeof((s))-1); \
+ rh.length = sizeof((s))-1; \
+ rh.command = RELAY_COMMAND_RESOLVED; \
+ } while (0)
+#define MOCK_RESET() do { \
+ srm_ncalls = mum_ncalls = 0; \
+ } while (0)
+#define ASSERT_MARK_CALLED(reason) do { \
+ tt_int_op(mum_ncalls, ==, 1); \
+ tt_ptr_op(mum_conn, ==, entryconn); \
+ tt_int_op(mum_endreason, ==, (reason)); \
+ } while (0)
+#define ASSERT_RESOLVED_CALLED(atype, answer, ttl, expires) do { \
+ tt_int_op(srm_ncalls, ==, 1); \
+ tt_ptr_op(srm_conn, ==, entryconn); \
+ tt_int_op(srm_atype, ==, (atype)); \
+ if (answer) { \
+ tt_int_op(srm_alen, ==, sizeof(answer)-1); \
+ tt_int_op(srm_alen, <, 512); \
+ tt_int_op(srm_answer_is_set, ==, 1); \
+ tt_mem_op(srm_answer, ==, answer, sizeof(answer)-1); \
+ } else { \
+ tt_int_op(srm_answer_is_set, ==, 0); \
+ } \
+ tt_int_op(srm_ttl, ==, ttl); \
+ tt_int_op(srm_expires, ==, expires); \
+ } while (0)
+
+ (void)arg;
+
+ MOCK(connection_mark_unattached_ap_, mark_unattached_mock);
+ MOCK(connection_ap_handshake_socks_resolved, socks_resolved_mock);
+
+ options->ClientDNSRejectInternalAddresses = 0;
+
+ SET_CELL(/* IPv4: 127.0.1.2, ttl 256 */
+ "\x04\x04\x7f\x00\x01\x02\x00\x00\x01\x00"
+ /* IPv4: 18.0.0.1, ttl 512 */
+ "\x04\x04\x12\x00\x00\x01\x00\x00\x02\x00"
+ /* IPv6: 2003::3, ttl 1024 */
+ "\x06\x10"
+ "\x20\x02\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x03"
+ "\x00\x00\x04\x00");
+
+ entryconn = entry_connection_new(CONN_TYPE_AP, AF_INET);
+ edgeconn = ENTRY_TO_EDGE_CONN(entryconn);
+
+ /* Try with connection in non-RESOLVE_WAIT state: cell gets ignored */
+ MOCK_RESET();
+ r = connection_edge_process_resolved_cell(edgeconn, &cell, &rh);
+ tt_int_op(r, ==, 0);
+ tt_int_op(srm_ncalls, ==, 0);
+ tt_int_op(mum_ncalls, ==, 0);
+
+ /* Now put it in the right state. */
+ ENTRY_TO_CONN(entryconn)->state = AP_CONN_STATE_RESOLVE_WAIT;
+ entryconn->socks_request->command = SOCKS_COMMAND_RESOLVE;
+ entryconn->ipv4_traffic_ok = 1;
+ entryconn->ipv6_traffic_ok = 1;
+ entryconn->prefer_ipv6_traffic = 0;
+
+ /* We prefer ipv4, so we should get the first ipv4 answer */
+ MOCK_RESET();
+ r = connection_edge_process_resolved_cell(edgeconn, &cell, &rh);
+ tt_int_op(r, ==, 0);
+ ASSERT_MARK_CALLED(END_STREAM_REASON_DONE|
+ END_STREAM_REASON_FLAG_ALREADY_SOCKS_REPLIED);
+ ASSERT_RESOLVED_CALLED(RESOLVED_TYPE_IPV4, "\x7f\x00\x01\x02", 256, -1);
+
+ /* But we may be discarding private answers. */
+ MOCK_RESET();
+ options->ClientDNSRejectInternalAddresses = 1;
+ r = connection_edge_process_resolved_cell(edgeconn, &cell, &rh);
+ tt_int_op(r, ==, 0);
+ ASSERT_MARK_CALLED(END_STREAM_REASON_DONE|
+ END_STREAM_REASON_FLAG_ALREADY_SOCKS_REPLIED);
+ ASSERT_RESOLVED_CALLED(RESOLVED_TYPE_IPV4, "\x12\x00\x00\x01", 512, -1);
+
+ /* now prefer ipv6, and get the first ipv6 answer */
+ entryconn->prefer_ipv6_traffic = 1;
+ MOCK_RESET();
+ r = connection_edge_process_resolved_cell(edgeconn, &cell, &rh);
+ tt_int_op(r, ==, 0);
+ ASSERT_MARK_CALLED(END_STREAM_REASON_DONE|
+ END_STREAM_REASON_FLAG_ALREADY_SOCKS_REPLIED);
+ ASSERT_RESOLVED_CALLED(RESOLVED_TYPE_IPV6,
+ "\x20\x02\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x03",
+ 1024, -1);
+
+ /* With a cell that only has IPv4, we report IPv4 even if we prefer IPv6 */
+ MOCK_RESET();
+ SET_CELL("\x04\x04\x12\x00\x00\x01\x00\x00\x02\x00");
+ r = connection_edge_process_resolved_cell(edgeconn, &cell, &rh);
+ tt_int_op(r, ==, 0);
+ ASSERT_MARK_CALLED(END_STREAM_REASON_DONE|
+ END_STREAM_REASON_FLAG_ALREADY_SOCKS_REPLIED);
+ ASSERT_RESOLVED_CALLED(RESOLVED_TYPE_IPV4, "\x12\x00\x00\x01", 512, -1);
+
+ /* But if we don't allow IPv4, we report nothing if the cell contains only
+ * ipv4 */
+ MOCK_RESET();
+ entryconn->ipv4_traffic_ok = 0;
+ r = connection_edge_process_resolved_cell(edgeconn, &cell, &rh);
+ tt_int_op(r, ==, 0);
+ ASSERT_MARK_CALLED(END_STREAM_REASON_DONE|
+ END_STREAM_REASON_FLAG_ALREADY_SOCKS_REPLIED);
+ ASSERT_RESOLVED_CALLED(RESOLVED_TYPE_ERROR, NULL, -1, -1);
+
+ /* If we wanted hostnames, we report nothing, since we only had IPs. */
+ MOCK_RESET();
+ entryconn->ipv4_traffic_ok = 1;
+ entryconn->socks_request->command = SOCKS_COMMAND_RESOLVE_PTR;
+ r = connection_edge_process_resolved_cell(edgeconn, &cell, &rh);
+ tt_int_op(r, ==, 0);
+ ASSERT_MARK_CALLED(END_STREAM_REASON_DONE|
+ END_STREAM_REASON_FLAG_ALREADY_SOCKS_REPLIED);
+ ASSERT_RESOLVED_CALLED(RESOLVED_TYPE_ERROR, NULL, -1, -1);
+
+ /* A hostname cell is fine though. */
+ MOCK_RESET();
+ SET_CELL("\x00\x0fwww.example.com\x00\x01\x00\x00");
+ r = connection_edge_process_resolved_cell(edgeconn, &cell, &rh);
+ tt_int_op(r, ==, 0);
+ ASSERT_MARK_CALLED(END_STREAM_REASON_DONE|
+ END_STREAM_REASON_FLAG_ALREADY_SOCKS_REPLIED);
+ ASSERT_RESOLVED_CALLED(RESOLVED_TYPE_HOSTNAME, "www.example.com", 65536, -1);
+
+ /* error on malformed cell */
+ MOCK_RESET();
+ entryconn->socks_request->command = SOCKS_COMMAND_RESOLVE;
+ SET_CELL("\x04\x04\x01\x02\x03\x04"); /* no ttl */
+ r = connection_edge_process_resolved_cell(edgeconn, &cell, &rh);
+ tt_int_op(r, ==, 0);
+ ASSERT_MARK_CALLED(END_STREAM_REASON_TORPROTOCOL);
+ tt_int_op(srm_ncalls, ==, 0);
+
+ /* error on all addresses private */
+ MOCK_RESET();
+ SET_CELL(/* IPv4: 127.0.1.2, ttl 256 */
+ "\x04\x04\x7f\x00\x01\x02\x00\x00\x01\x00"
+ /* IPv4: 192.168.1.1, ttl 256 */
+ "\x04\x04\xc0\xa8\x01\x01\x00\x00\x01\x00");
+ r = connection_edge_process_resolved_cell(edgeconn, &cell, &rh);
+ tt_int_op(r, ==, 0);
+ ASSERT_MARK_CALLED(END_STREAM_REASON_TORPROTOCOL);
+ ASSERT_RESOLVED_CALLED(RESOLVED_TYPE_ERROR_TRANSIENT, NULL, 0, TIME_MAX);
+
+ /* Legit error code */
+ MOCK_RESET();
+ SET_CELL("\xf0\x15" "quiet and meaningless" "\x00\x00\x0f\xff");
+ r = connection_edge_process_resolved_cell(edgeconn, &cell, &rh);
+ tt_int_op(r, ==, 0);
+ ASSERT_MARK_CALLED(END_STREAM_REASON_DONE|
+ END_STREAM_REASON_FLAG_ALREADY_SOCKS_REPLIED);
+ ASSERT_RESOLVED_CALLED(RESOLVED_TYPE_ERROR_TRANSIENT, NULL, -1, -1);
+
+ done:
+ UNMOCK(connection_mark_unattached_ap_);
+ UNMOCK(connection_ap_handshake_socks_resolved);
+}
+
+struct testcase_t relaycell_tests[] = {
+ { "resolved", test_relaycell_resolved, TT_FORK, NULL, NULL },
+ END_OF_TESTCASES
+};
+
diff --git a/src/test/test_replay.c b/src/test/test_replay.c
new file mode 100644
index 000000000..b48f582f5
--- /dev/null
+++ b/src/test/test_replay.c
@@ -0,0 +1,348 @@
+/* Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#define REPLAYCACHE_PRIVATE
+
+#include "orconfig.h"
+#include "or.h"
+#include "replaycache.h"
+#include "test.h"
+
+static const char *test_buffer =
+ "Lorem ipsum dolor sit amet, consectetur adipisici elit, sed do eiusmod"
+ " tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim"
+ " veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea"
+ " commodo consequat. Duis aute irure dolor in reprehenderit in voluptate"
+ " velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint"
+ " occaecat cupidatat non proident, sunt in culpa qui officia deserunt"
+ " mollit anim id est laborum.";
+
+static void
+test_replaycache_alloc(void)
+{
+ replaycache_t *r = NULL;
+
+ r = replaycache_new(600, 300);
+ test_assert(r != NULL);
+
+ done:
+ if (r) replaycache_free(r);
+
+ return;
+}
+
+static void
+test_replaycache_badalloc(void)
+{
+ replaycache_t *r = NULL;
+
+ /* Negative horizon should fail */
+ r = replaycache_new(-600, 300);
+ test_assert(r == NULL);
+ /* Negative interval should get adjusted to zero */
+ r = replaycache_new(600, -300);
+ test_assert(r != NULL);
+ test_eq(r->scrub_interval, 0);
+ replaycache_free(r);
+ /* Negative horizon and negative interval should still fail */
+ r = replaycache_new(-600, -300);
+ test_assert(r == NULL);
+
+ done:
+ if (r) replaycache_free(r);
+
+ return;
+}
+
+static void
+test_replaycache_free_null(void)
+{
+ replaycache_free(NULL);
+ /* Assert that we're here without horrible death */
+ test_assert(1);
+
+ done:
+ return;
+}
+
+static void
+test_replaycache_miss(void)
+{
+ replaycache_t *r = NULL;
+ int result;
+
+ r = replaycache_new(600, 300);
+ test_assert(r != NULL);
+
+ result =
+ replaycache_add_and_test_internal(1200, r, test_buffer,
+ strlen(test_buffer), NULL);
+ test_eq(result, 0);
+
+ /* poke the bad-parameter error case too */
+ result =
+ replaycache_add_and_test_internal(1200, NULL, test_buffer,
+ strlen(test_buffer), NULL);
+ test_eq(result, 0);
+
+ done:
+ if (r) replaycache_free(r);
+
+ return;
+}
+
+static void
+test_replaycache_hit(void)
+{
+ replaycache_t *r = NULL;
+ int result;
+
+ r = replaycache_new(600, 300);
+ test_assert(r != NULL);
+
+ result =
+ replaycache_add_and_test_internal(1200, r, test_buffer,
+ strlen(test_buffer), NULL);
+ test_eq(result, 0);
+
+ result =
+ replaycache_add_and_test_internal(1300, r, test_buffer,
+ strlen(test_buffer), NULL);
+ test_eq(result, 1);
+
+ done:
+ if (r) replaycache_free(r);
+
+ return;
+}
+
+static void
+test_replaycache_age(void)
+{
+ replaycache_t *r = NULL;
+ int result;
+
+ r = replaycache_new(600, 300);
+ test_assert(r != NULL);
+
+ result =
+ replaycache_add_and_test_internal(1200, r, test_buffer,
+ strlen(test_buffer), NULL);
+ test_eq(result, 0);
+
+ result =
+ replaycache_add_and_test_internal(1300, r, test_buffer,
+ strlen(test_buffer), NULL);
+ test_eq(result, 1);
+
+ result =
+ replaycache_add_and_test_internal(3000, r, test_buffer,
+ strlen(test_buffer), NULL);
+ test_eq(result, 0);
+
+ done:
+ if (r) replaycache_free(r);
+
+ return;
+}
+
+static void
+test_replaycache_elapsed(void)
+{
+ replaycache_t *r = NULL;
+ int result;
+ time_t elapsed;
+
+ r = replaycache_new(600, 300);
+ test_assert(r != NULL);
+
+ result =
+ replaycache_add_and_test_internal(1200, r, test_buffer,
+ strlen(test_buffer), NULL);
+ test_eq(result, 0);
+
+ result =
+ replaycache_add_and_test_internal(1300, r, test_buffer,
+ strlen(test_buffer), &elapsed);
+ test_eq(result, 1);
+ test_eq(elapsed, 100);
+
+ done:
+ if (r) replaycache_free(r);
+
+ return;
+}
+
+static void
+test_replaycache_noexpire(void)
+{
+ replaycache_t *r = NULL;
+ int result;
+
+ r = replaycache_new(0, 0);
+ test_assert(r != NULL);
+
+ result =
+ replaycache_add_and_test_internal(1200, r, test_buffer,
+ strlen(test_buffer), NULL);
+ test_eq(result, 0);
+
+ result =
+ replaycache_add_and_test_internal(1300, r, test_buffer,
+ strlen(test_buffer), NULL);
+ test_eq(result, 1);
+
+ result =
+ replaycache_add_and_test_internal(3000, r, test_buffer,
+ strlen(test_buffer), NULL);
+ test_eq(result, 1);
+
+ done:
+ if (r) replaycache_free(r);
+
+ return;
+}
+
+static void
+test_replaycache_scrub(void)
+{
+ replaycache_t *r = NULL;
+ int result;
+
+ r = replaycache_new(600, 300);
+ test_assert(r != NULL);
+
+ /* Set up like in test_replaycache_hit() */
+ result =
+ replaycache_add_and_test_internal(100, r, test_buffer,
+ strlen(test_buffer), NULL);
+ test_eq(result, 0);
+
+ result =
+ replaycache_add_and_test_internal(200, r, test_buffer,
+ strlen(test_buffer), NULL);
+ test_eq(result, 1);
+
+ /*
+ * Poke a few replaycache_scrub_if_needed_internal() error cases that
+ * can't happen through replaycache_add_and_test_internal()
+ */
+
+ /* Null cache */
+ replaycache_scrub_if_needed_internal(300, NULL);
+ /* Assert we're still here */
+ test_assert(1);
+
+ /* Make sure we hit the aging-out case too */
+ replaycache_scrub_if_needed_internal(1500, r);
+ /* Assert that we aged it */
+ test_eq(digestmap_size(r->digests_seen), 0);
+
+ done:
+ if (r) replaycache_free(r);
+
+ return;
+}
+
+static void
+test_replaycache_future(void)
+{
+ replaycache_t *r = NULL;
+ int result;
+ time_t elapsed = 0;
+
+ r = replaycache_new(600, 300);
+ test_assert(r != NULL);
+
+ /* Set up like in test_replaycache_hit() */
+ result =
+ replaycache_add_and_test_internal(100, r, test_buffer,
+ strlen(test_buffer), &elapsed);
+ test_eq(result, 0);
+ /* elapsed should still be 0, since it wasn't written */
+ test_eq(elapsed, 0);
+
+ result =
+ replaycache_add_and_test_internal(200, r, test_buffer,
+ strlen(test_buffer), &elapsed);
+ test_eq(result, 1);
+ /* elapsed should be the time since the last hit */
+ test_eq(elapsed, 100);
+
+ /*
+ * Now let's turn the clock back to get coverage on the cache entry from the
+ * future not-supposed-to-happen case.
+ */
+ result =
+ replaycache_add_and_test_internal(150, r, test_buffer,
+ strlen(test_buffer), &elapsed);
+ /* We should still get a hit */
+ test_eq(result, 1);
+ /* ...but it shouldn't let us see a negative elapsed time */
+ test_eq(elapsed, 0);
+
+ done:
+ if (r) replaycache_free(r);
+
+ return;
+}
+
+static void
+test_replaycache_realtime(void)
+{
+ replaycache_t *r = NULL;
+ /*
+ * Negative so we fail if replaycache_add_test_and_elapsed() doesn't
+ * write to elapsed.
+ */
+ time_t elapsed = -1;
+ int result;
+
+ /* Test the realtime as well as *_internal() entry points */
+ r = replaycache_new(600, 300);
+ test_assert(r != NULL);
+
+ /* This should miss */
+ result =
+ replaycache_add_and_test(r, test_buffer, strlen(test_buffer));
+ test_eq(result, 0);
+
+ /* This should hit */
+ result =
+ replaycache_add_and_test(r, test_buffer, strlen(test_buffer));
+ test_eq(result, 1);
+
+ /* This should hit and return a small elapsed time */
+ result =
+ replaycache_add_test_and_elapsed(r, test_buffer,
+ strlen(test_buffer), &elapsed);
+ test_eq(result, 1);
+ test_assert(elapsed >= 0);
+ test_assert(elapsed <= 5);
+
+ /* Scrub it to exercise that entry point too */
+ replaycache_scrub_if_needed(r);
+
+ done:
+ if (r) replaycache_free(r);
+ return;
+}
+
+#define REPLAYCACHE_LEGACY(name) \
+ { #name, legacy_test_helper, 0, &legacy_setup, test_replaycache_ ## name }
+
+struct testcase_t replaycache_tests[] = {
+ REPLAYCACHE_LEGACY(alloc),
+ REPLAYCACHE_LEGACY(badalloc),
+ REPLAYCACHE_LEGACY(free_null),
+ REPLAYCACHE_LEGACY(miss),
+ REPLAYCACHE_LEGACY(hit),
+ REPLAYCACHE_LEGACY(age),
+ REPLAYCACHE_LEGACY(elapsed),
+ REPLAYCACHE_LEGACY(noexpire),
+ REPLAYCACHE_LEGACY(scrub),
+ REPLAYCACHE_LEGACY(future),
+ REPLAYCACHE_LEGACY(realtime),
+ END_OF_TESTCASES
+};
+
diff --git a/src/test/test_routerkeys.c b/src/test/test_routerkeys.c
new file mode 100644
index 000000000..182e0f6f8
--- /dev/null
+++ b/src/test/test_routerkeys.c
@@ -0,0 +1,85 @@
+/* Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#include "orconfig.h"
+#define ROUTER_PRIVATE
+#include "or.h"
+#include "config.h"
+#include "router.h"
+#include "util.h"
+#include "crypto.h"
+
+#include "test.h"
+
+static void
+test_routerkeys_write_fingerprint(void *arg)
+{
+ crypto_pk_t *key = pk_generate(2);
+ or_options_t *options = get_options_mutable();
+ const char *ddir = get_fname("write_fingerprint");
+ char *cp = NULL, *cp2 = NULL;
+ char fp[FINGERPRINT_LEN+1];
+
+ (void)arg;
+
+ tt_assert(key);
+
+ options->ORPort_set = 1; /* So that we can get the server ID key */
+ tor_free(options->DataDirectory);
+ options->DataDirectory = tor_strdup(ddir);
+ options->Nickname = tor_strdup("haflinger");
+ set_server_identity_key(key);
+ set_client_identity_key(crypto_pk_dup_key(key));
+
+ tt_int_op(0, ==, check_private_dir(ddir, CPD_CREATE, NULL));
+ tt_int_op(crypto_pk_cmp_keys(get_server_identity_key(),key),==,0);
+
+ /* Write fingerprint file */
+ tt_int_op(0, ==, router_write_fingerprint(0));
+ cp = read_file_to_str(get_fname("write_fingerprint/fingerprint"),
+ 0, NULL);
+ crypto_pk_get_fingerprint(key, fp, 0);
+ tor_asprintf(&cp2, "haflinger %s\n", fp);
+ tt_str_op(cp, ==, cp2);
+ tor_free(cp);
+ tor_free(cp2);
+
+ /* Write hashed-fingerprint file */
+ tt_int_op(0, ==, router_write_fingerprint(1));
+ cp = read_file_to_str(get_fname("write_fingerprint/hashed-fingerprint"),
+ 0, NULL);
+ crypto_pk_get_hashed_fingerprint(key, fp);
+ tor_asprintf(&cp2, "haflinger %s\n", fp);
+ tt_str_op(cp, ==, cp2);
+ tor_free(cp);
+ tor_free(cp2);
+
+ /* Replace outdated file */
+ write_str_to_file(get_fname("write_fingerprint/hashed-fingerprint"),
+ "junk goes here", 0);
+ tt_int_op(0, ==, router_write_fingerprint(1));
+ cp = read_file_to_str(get_fname("write_fingerprint/hashed-fingerprint"),
+ 0, NULL);
+ crypto_pk_get_hashed_fingerprint(key, fp);
+ tor_asprintf(&cp2, "haflinger %s\n", fp);
+ tt_str_op(cp, ==, cp2);
+ tor_free(cp);
+ tor_free(cp2);
+
+ done:
+ crypto_pk_free(key);
+ set_client_identity_key(NULL);
+ tor_free(cp);
+ tor_free(cp2);
+}
+
+#define TEST(name, flags) \
+ { #name , test_routerkeys_ ## name, (flags), NULL, NULL }
+
+struct testcase_t routerkeys_tests[] = {
+ TEST(write_fingerprint, TT_FORK),
+ END_OF_TESTCASES
+};
+
diff --git a/src/test/test_socks.c b/src/test/test_socks.c
new file mode 100644
index 000000000..4ce61e068
--- /dev/null
+++ b/src/test/test_socks.c
@@ -0,0 +1,393 @@
+/* Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#include "or.h"
+#include "buffers.h"
+#include "config.h"
+#include "test.h"
+
+typedef struct socks_test_data_t {
+ socks_request_t *req;
+ buf_t *buf;
+} socks_test_data_t;
+
+static void *
+socks_test_setup(const struct testcase_t *testcase)
+{
+ socks_test_data_t *data = tor_malloc(sizeof(socks_test_data_t));
+ (void)testcase;
+ data->buf = buf_new_with_capacity(256);
+ data->req = socks_request_new();
+ config_register_addressmaps(get_options());
+ return data;
+}
+static int
+socks_test_cleanup(const struct testcase_t *testcase, void *ptr)
+{
+ socks_test_data_t *data = ptr;
+ (void)testcase;
+ buf_free(data->buf);
+ socks_request_free(data->req);
+ tor_free(data);
+ return 1;
+}
+
+const struct testcase_setup_t socks_setup = {
+ socks_test_setup, socks_test_cleanup
+};
+
+#define SOCKS_TEST_INIT() \
+ socks_test_data_t *testdata = ptr; \
+ buf_t *buf = testdata->buf; \
+ socks_request_t *socks = testdata->req;
+#define ADD_DATA(buf, s) \
+ write_to_buf(s, sizeof(s)-1, buf)
+
+static void
+socks_request_clear(socks_request_t *socks)
+{
+ tor_free(socks->username);
+ tor_free(socks->password);
+ memset(socks, 0, sizeof(socks_request_t));
+}
+
+/** Perform unsupported SOCKS 4 commands */
+static void
+test_socks_4_unsupported_commands(void *ptr)
+{
+ SOCKS_TEST_INIT();
+
+ /* SOCKS 4 Send BIND [02] to IP address 2.2.2.2:4369 */
+ ADD_DATA(buf, "\x04\x02\x11\x11\x02\x02\x02\x02\x00");
+ test_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
+ get_options()->SafeSocks) == -1);
+ test_eq(4, socks->socks_version);
+ test_eq(0, socks->replylen); /* XXX: shouldn't tor reply? */
+
+ done:
+ ;
+}
+
+/** Perform supported SOCKS 4 commands */
+static void
+test_socks_4_supported_commands(void *ptr)
+{
+ SOCKS_TEST_INIT();
+
+ test_eq(0, buf_datalen(buf));
+
+ /* SOCKS 4 Send CONNECT [01] to IP address 2.2.2.2:4370 */
+ ADD_DATA(buf, "\x04\x01\x11\x12\x02\x02\x02\x03\x00");
+ test_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
+ get_options()->SafeSocks) == 1);
+ test_eq(4, socks->socks_version);
+ test_eq(0, socks->replylen); /* XXX: shouldn't tor reply? */
+ test_eq(SOCKS_COMMAND_CONNECT, socks->command);
+ test_streq("2.2.2.3", socks->address);
+ test_eq(4370, socks->port);
+ test_assert(socks->got_auth == 0);
+ test_assert(! socks->username);
+
+ test_eq(0, buf_datalen(buf));
+ socks_request_clear(socks);
+
+ /* SOCKS 4 Send CONNECT [01] to IP address 2.2.2.2:4369 with userid*/
+ ADD_DATA(buf, "\x04\x01\x11\x12\x02\x02\x02\x04me\x00");
+ test_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
+ get_options()->SafeSocks) == 1);
+ test_eq(4, socks->socks_version);
+ test_eq(0, socks->replylen); /* XXX: shouldn't tor reply? */
+ test_eq(SOCKS_COMMAND_CONNECT, socks->command);
+ test_streq("2.2.2.4", socks->address);
+ test_eq(4370, socks->port);
+ test_assert(socks->got_auth == 1);
+ test_assert(socks->username);
+ test_eq(2, socks->usernamelen);
+ test_memeq("me", socks->username, 2);
+
+ test_eq(0, buf_datalen(buf));
+ socks_request_clear(socks);
+
+ /* SOCKS 4a Send RESOLVE [F0] request for torproject.org */
+ ADD_DATA(buf, "\x04\xF0\x01\x01\x00\x00\x00\x02me\x00torproject.org\x00");
+ test_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
+ get_options()->SafeSocks) == 1);
+ test_eq(4, socks->socks_version);
+ test_eq(0, socks->replylen); /* XXX: shouldn't tor reply? */
+ test_streq("torproject.org", socks->address);
+
+ test_eq(0, buf_datalen(buf));
+
+ done:
+ ;
+}
+
+/** Perform unsupported SOCKS 5 commands */
+static void
+test_socks_5_unsupported_commands(void *ptr)
+{
+ SOCKS_TEST_INIT();
+
+ /* SOCKS 5 Send unsupported BIND [02] command */
+ ADD_DATA(buf, "\x05\x02\x00\x01");
+
+ test_eq(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
+ get_options()->SafeSocks), 0);
+ test_eq(0, buf_datalen(buf));
+ test_eq(5, socks->socks_version);
+ test_eq(2, socks->replylen);
+ test_eq(5, socks->reply[0]);
+ test_eq(0, socks->reply[1]);
+ ADD_DATA(buf, "\x05\x02\x00\x01\x02\x02\x02\x01\x01\x01");
+ test_eq(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
+ get_options()->SafeSocks), -1);
+ /* XXX: shouldn't tor reply 'command not supported' [07]? */
+
+ buf_clear(buf);
+ socks_request_clear(socks);
+
+ /* SOCKS 5 Send unsupported UDP_ASSOCIATE [03] command */
+ ADD_DATA(buf, "\x05\x03\x00\x01\x02");
+ test_eq(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
+ get_options()->SafeSocks), 0);
+ test_eq(5, socks->socks_version);
+ test_eq(2, socks->replylen);
+ test_eq(5, socks->reply[0]);
+ test_eq(2, socks->reply[1]);
+ ADD_DATA(buf, "\x05\x03\x00\x01\x02\x02\x02\x01\x01\x01");
+ test_eq(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
+ get_options()->SafeSocks), -1);
+ /* XXX: shouldn't tor reply 'command not supported' [07]? */
+
+ done:
+ ;
+}
+
+/** Perform supported SOCKS 5 commands */
+static void
+test_socks_5_supported_commands(void *ptr)
+{
+ SOCKS_TEST_INIT();
+
+ /* SOCKS 5 Send CONNECT [01] to IP address 2.2.2.2:4369 */
+ ADD_DATA(buf, "\x05\x01\x00");
+ test_eq(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
+ get_options()->SafeSocks), 0);
+ test_eq(5, socks->socks_version);
+ test_eq(2, socks->replylen);
+ test_eq(5, socks->reply[0]);
+ test_eq(0, socks->reply[1]);
+
+ ADD_DATA(buf, "\x05\x01\x00\x01\x02\x02\x02\x02\x11\x11");
+ test_eq(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
+ get_options()->SafeSocks), 1);
+ test_streq("2.2.2.2", socks->address);
+ test_eq(4369, socks->port);
+
+ test_eq(0, buf_datalen(buf));
+ socks_request_clear(socks);
+
+ /* SOCKS 5 Send CONNECT [01] to FQDN torproject.org:4369 */
+ ADD_DATA(buf, "\x05\x01\x00");
+ ADD_DATA(buf, "\x05\x01\x00\x03\x0Etorproject.org\x11\x11");
+ test_eq(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
+ get_options()->SafeSocks), 1);
+
+ test_eq(5, socks->socks_version);
+ test_eq(2, socks->replylen);
+ test_eq(5, socks->reply[0]);
+ test_eq(0, socks->reply[1]);
+ test_streq("torproject.org", socks->address);
+ test_eq(4369, socks->port);
+
+ test_eq(0, buf_datalen(buf));
+ socks_request_clear(socks);
+
+ /* SOCKS 5 Send RESOLVE [F0] request for torproject.org:4369 */
+ ADD_DATA(buf, "\x05\x01\x00");
+ ADD_DATA(buf, "\x05\xF0\x00\x03\x0Etorproject.org\x01\x02");
+ test_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
+ get_options()->SafeSocks) == 1);
+ test_eq(5, socks->socks_version);
+ test_eq(2, socks->replylen);
+ test_eq(5, socks->reply[0]);
+ test_eq(0, socks->reply[1]);
+ test_streq("torproject.org", socks->address);
+
+ test_eq(0, buf_datalen(buf));
+ socks_request_clear(socks);
+
+ /* SOCKS 5 Send RESOLVE_PTR [F1] for IP address 2.2.2.5 */
+ ADD_DATA(buf, "\x05\x01\x00");
+ ADD_DATA(buf, "\x05\xF1\x00\x01\x02\x02\x02\x05\x01\x03");
+ test_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
+ get_options()->SafeSocks) == 1);
+ test_eq(5, socks->socks_version);
+ test_eq(2, socks->replylen);
+ test_eq(5, socks->reply[0]);
+ test_eq(0, socks->reply[1]);
+ test_streq("2.2.2.5", socks->address);
+
+ test_eq(0, buf_datalen(buf));
+
+ done:
+ ;
+}
+
+/** Perform SOCKS 5 authentication */
+static void
+test_socks_5_no_authenticate(void *ptr)
+{
+ SOCKS_TEST_INIT();
+
+ /*SOCKS 5 No Authentication */
+ ADD_DATA(buf,"\x05\x01\x00");
+ test_assert(!fetch_from_buf_socks(buf, socks,
+ get_options()->TestSocks,
+ get_options()->SafeSocks));
+ test_eq(2, socks->replylen);
+ test_eq(5, socks->reply[0]);
+ test_eq(SOCKS_NO_AUTH, socks->reply[1]);
+
+ test_eq(0, buf_datalen(buf));
+
+ /*SOCKS 5 Send username/password anyway - pretend to be broken */
+ ADD_DATA(buf,"\x01\x02\x01\x01\x02\x01\x01");
+ test_assert(!fetch_from_buf_socks(buf, socks,
+ get_options()->TestSocks,
+ get_options()->SafeSocks));
+ test_eq(5, socks->socks_version);
+ test_eq(2, socks->replylen);
+ test_eq(1, socks->reply[0]);
+ test_eq(0, socks->reply[1]);
+
+ test_eq(2, socks->usernamelen);
+ test_eq(2, socks->passwordlen);
+
+ test_memeq("\x01\x01", socks->username, 2);
+ test_memeq("\x01\x01", socks->password, 2);
+
+ done:
+ ;
+}
+
+/** Perform SOCKS 5 authentication */
+static void
+test_socks_5_authenticate(void *ptr)
+{
+ SOCKS_TEST_INIT();
+
+ /* SOCKS 5 Negotiate username/password authentication */
+ ADD_DATA(buf, "\x05\x01\x02");
+
+ test_assert(!fetch_from_buf_socks(buf, socks,
+ get_options()->TestSocks,
+ get_options()->SafeSocks));
+ test_eq(2, socks->replylen);
+ test_eq(5, socks->reply[0]);
+ test_eq(SOCKS_USER_PASS, socks->reply[1]);
+ test_eq(5, socks->socks_version);
+
+ test_eq(0, buf_datalen(buf));
+
+ /* SOCKS 5 Send username/password */
+ ADD_DATA(buf, "\x01\x02me\x08mypasswd");
+ test_assert(!fetch_from_buf_socks(buf, socks,
+ get_options()->TestSocks,
+ get_options()->SafeSocks));
+ test_eq(5, socks->socks_version);
+ test_eq(2, socks->replylen);
+ test_eq(1, socks->reply[0]);
+ test_eq(0, socks->reply[1]);
+
+ test_eq(2, socks->usernamelen);
+ test_eq(8, socks->passwordlen);
+
+ test_memeq("me", socks->username, 2);
+ test_memeq("mypasswd", socks->password, 8);
+
+ done:
+ ;
+}
+
+/** Perform SOCKS 5 authentication and send data all in one go */
+static void
+test_socks_5_authenticate_with_data(void *ptr)
+{
+ SOCKS_TEST_INIT();
+
+ /* SOCKS 5 Negotiate username/password authentication */
+ ADD_DATA(buf, "\x05\x01\x02");
+
+ test_assert(!fetch_from_buf_socks(buf, socks,
+ get_options()->TestSocks,
+ get_options()->SafeSocks));
+ test_eq(2, socks->replylen);
+ test_eq(5, socks->reply[0]);
+ test_eq(SOCKS_USER_PASS, socks->reply[1]);
+ test_eq(5, socks->socks_version);
+
+ test_eq(0, buf_datalen(buf));
+
+ /* SOCKS 5 Send username/password */
+ /* SOCKS 5 Send CONNECT [01] to IP address 2.2.2.2:4369 */
+ ADD_DATA(buf, "\x01\x02me\x03you\x05\x01\x00\x01\x02\x02\x02\x02\x11\x11");
+ test_assert(fetch_from_buf_socks(buf, socks,
+ get_options()->TestSocks,
+ get_options()->SafeSocks) == 1);
+ test_eq(5, socks->socks_version);
+ test_eq(2, socks->replylen);
+ test_eq(1, socks->reply[0]);
+ test_eq(0, socks->reply[1]);
+
+ test_streq("2.2.2.2", socks->address);
+ test_eq(4369, socks->port);
+
+ test_eq(2, socks->usernamelen);
+ test_eq(3, socks->passwordlen);
+ test_memeq("me", socks->username, 2);
+ test_memeq("you", socks->password, 3);
+
+ done:
+ ;
+}
+
+/** Perform SOCKS 5 authentication before method negotiated */
+static void
+test_socks_5_auth_before_negotiation(void *ptr)
+{
+ SOCKS_TEST_INIT();
+
+ /* SOCKS 5 Send username/password */
+ ADD_DATA(buf, "\x01\x02me\x02me");
+ test_assert(fetch_from_buf_socks(buf, socks,
+ get_options()->TestSocks,
+ get_options()->SafeSocks) == -1);
+ test_eq(0, socks->socks_version);
+ test_eq(0, socks->replylen);
+ test_eq(0, socks->reply[0]);
+ test_eq(0, socks->reply[1]);
+
+ done:
+ ;
+}
+
+#define SOCKSENT(name) \
+ { #name, test_socks_##name, TT_FORK, &socks_setup, NULL }
+
+struct testcase_t socks_tests[] = {
+ SOCKSENT(4_unsupported_commands),
+ SOCKSENT(4_supported_commands),
+
+ SOCKSENT(5_unsupported_commands),
+ SOCKSENT(5_supported_commands),
+ SOCKSENT(5_no_authenticate),
+ SOCKSENT(5_auth_before_negotiation),
+ SOCKSENT(5_authenticate),
+ SOCKSENT(5_authenticate_with_data),
+
+ END_OF_TESTCASES
+};
+
diff --git a/src/test/test_status.c b/src/test/test_status.c
new file mode 100644
index 000000000..46dd47313
--- /dev/null
+++ b/src/test/test_status.c
@@ -0,0 +1,1114 @@
+#define STATUS_PRIVATE
+#define HIBERNATE_PRIVATE
+#define LOG_PRIVATE
+#define REPHIST_PRIVATE
+
+#include <float.h>
+#include <math.h>
+
+#include "or.h"
+#include "torlog.h"
+#include "tor_queue.h"
+#include "status.h"
+#include "circuitlist.h"
+#include "config.h"
+#include "hibernate.h"
+#include "rephist.h"
+#include "relay.h"
+#include "router.h"
+#include "main.h"
+#include "nodelist.h"
+#include "statefile.h"
+#include "test.h"
+
+#define NS_MODULE status
+
+#define NS_SUBMODULE count_circuits
+
+/*
+ * Test that count_circuits() is correctly counting the number of
+ * global circuits.
+ */
+
+struct global_circuitlist_s mock_global_circuitlist =
+ TOR_LIST_HEAD_INITIALIZER(global_circuitlist);
+
+NS_DECL(struct global_circuitlist_s *, circuit_get_global_list, (void));
+
+static void
+NS(test_main)(void *arg)
+{
+ /* Choose origin_circuit_t wlog. */
+ origin_circuit_t *mock_circuit1, *mock_circuit2;
+ circuit_t *circ, *tmp;
+ int expected_circuits = 2, actual_circuits;
+
+ (void)arg;
+
+ mock_circuit1 = tor_malloc_zero(sizeof(origin_circuit_t));
+ mock_circuit2 = tor_malloc_zero(sizeof(origin_circuit_t));
+ TOR_LIST_INSERT_HEAD(
+ &mock_global_circuitlist, TO_CIRCUIT(mock_circuit1), head);
+ TOR_LIST_INSERT_HEAD(
+ &mock_global_circuitlist, TO_CIRCUIT(mock_circuit2), head);
+
+ NS_MOCK(circuit_get_global_list);
+
+ actual_circuits = count_circuits();
+
+ tt_assert(expected_circuits == actual_circuits);
+
+ done:
+ TOR_LIST_FOREACH_SAFE(
+ circ, NS(circuit_get_global_list)(), head, tmp);
+ tor_free(circ);
+ NS_UNMOCK(circuit_get_global_list);
+}
+
+static struct global_circuitlist_s *
+NS(circuit_get_global_list)(void)
+{
+ return &mock_global_circuitlist;
+}
+
+#undef NS_SUBMODULE
+#define NS_SUBMODULE secs_to_uptime
+
+/*
+ * Test that secs_to_uptime() is converting the number of seconds that
+ * Tor is up for into the appropriate string form containing hours and minutes.
+ */
+
+static void
+NS(test_main)(void *arg)
+{
+ const char *expected;
+ char *actual;
+ (void)arg;
+
+ expected = "0:00 hours";
+ actual = secs_to_uptime(0);
+ tt_str_op(actual, ==, expected);
+ tor_free(actual);
+
+ expected = "0:00 hours";
+ actual = secs_to_uptime(1);
+ tt_str_op(actual, ==, expected);
+ tor_free(actual);
+
+ expected = "0:01 hours";
+ actual = secs_to_uptime(60);
+ tt_str_op(actual, ==, expected);
+ tor_free(actual);
+
+ expected = "0:59 hours";
+ actual = secs_to_uptime(60 * 59);
+ tt_str_op(actual, ==, expected);
+ tor_free(actual);
+
+ expected = "1:00 hours";
+ actual = secs_to_uptime(60 * 60);
+ tt_str_op(actual, ==, expected);
+ tor_free(actual);
+
+ expected = "23:59 hours";
+ actual = secs_to_uptime(60 * 60 * 23 + 60 * 59);
+ tt_str_op(actual, ==, expected);
+ tor_free(actual);
+
+ expected = "1 day 0:00 hours";
+ actual = secs_to_uptime(60 * 60 * 23 + 60 * 60);
+ tt_str_op(actual, ==, expected);
+ tor_free(actual);
+
+ expected = "1 day 0:00 hours";
+ actual = secs_to_uptime(86400 + 1);
+ tt_str_op(actual, ==, expected);
+ tor_free(actual);
+
+ expected = "1 day 0:01 hours";
+ actual = secs_to_uptime(86400 + 60);
+ tt_str_op(actual, ==, expected);
+ tor_free(actual);
+
+ expected = "10 days 0:00 hours";
+ actual = secs_to_uptime(86400 * 10);
+ tt_str_op(actual, ==, expected);
+ tor_free(actual);
+
+ expected = "10 days 0:00 hours";
+ actual = secs_to_uptime(864000 + 1);
+ tt_str_op(actual, ==, expected);
+ tor_free(actual);
+
+ expected = "10 days 0:01 hours";
+ actual = secs_to_uptime(864000 + 60);
+ tt_str_op(actual, ==, expected);
+ tor_free(actual);
+
+ done:
+ if (actual != NULL)
+ tor_free(actual);
+}
+
+#undef NS_SUBMODULE
+#define NS_SUBMODULE bytes_to_usage
+
+/*
+ * Test that bytes_to_usage() is correctly converting the number of bytes that
+ * Tor has read/written into the appropriate string form containing kilobytes,
+ * megabytes, or gigabytes.
+ */
+
+static void
+NS(test_main)(void *arg)
+{
+ const char *expected;
+ char *actual;
+ (void)arg;
+
+ expected = "0 kB";
+ actual = bytes_to_usage(0);
+ tt_str_op(actual, ==, expected);
+ tor_free(actual);
+
+ expected = "0 kB";
+ actual = bytes_to_usage(1);
+ tt_str_op(actual, ==, expected);
+ tor_free(actual);
+
+ expected = "1 kB";
+ actual = bytes_to_usage(1024);
+ tt_str_op(actual, ==, expected);
+ tor_free(actual);
+
+ expected = "1023 kB";
+ actual = bytes_to_usage((1 << 20) - 1);
+ tt_str_op(actual, ==, expected);
+ tor_free(actual);
+
+ expected = "1.00 MB";
+ actual = bytes_to_usage((1 << 20));
+ tt_str_op(actual, ==, expected);
+ tor_free(actual);
+
+ expected = "1.00 MB";
+ actual = bytes_to_usage((1 << 20) + 5242);
+ tt_str_op(actual, ==, expected);
+ tor_free(actual);
+
+ expected = "1.01 MB";
+ actual = bytes_to_usage((1 << 20) + 5243);
+ tt_str_op(actual, ==, expected);
+ tor_free(actual);
+
+ expected = "1024.00 MB";
+ actual = bytes_to_usage((1 << 30) - 1);
+ tt_str_op(actual, ==, expected);
+ tor_free(actual);
+
+ expected = "1.00 GB";
+ actual = bytes_to_usage((1 << 30));
+ tt_str_op(actual, ==, expected);
+ tor_free(actual);
+
+ expected = "1.00 GB";
+ actual = bytes_to_usage((1 << 30) + 5368709);
+ tt_str_op(actual, ==, expected);
+ tor_free(actual);
+
+ expected = "1.01 GB";
+ actual = bytes_to_usage((1 << 30) + 5368710);
+ tt_str_op(actual, ==, expected);
+ tor_free(actual);
+
+ expected = "10.00 GB";
+ actual = bytes_to_usage((U64_LITERAL(1) << 30) * 10L);
+ tt_str_op(actual, ==, expected);
+ tor_free(actual);
+
+ done:
+ if (actual != NULL)
+ tor_free(actual);
+}
+
+#undef NS_SUBMODULE
+#define NS_SUBMODULE ASPECT(log_heartbeat, fails)
+
+/*
+ * Tests that log_heartbeat() fails when in the public server mode,
+ * not hibernating, and we couldn't get the current routerinfo.
+ */
+
+NS_DECL(double, tls_get_write_overhead_ratio, (void));
+NS_DECL(int, we_are_hibernating, (void));
+NS_DECL(const or_options_t *, get_options, (void));
+NS_DECL(int, public_server_mode, (const or_options_t *options));
+NS_DECL(const routerinfo_t *, router_get_my_routerinfo, (void));
+
+static void
+NS(test_main)(void *arg)
+{
+ int expected, actual;
+ (void)arg;
+
+ NS_MOCK(tls_get_write_overhead_ratio);
+ NS_MOCK(we_are_hibernating);
+ NS_MOCK(get_options);
+ NS_MOCK(public_server_mode);
+ NS_MOCK(router_get_my_routerinfo);
+
+ expected = -1;
+ actual = log_heartbeat(0);
+
+ tt_int_op(actual, ==, expected);
+
+ done:
+ NS_UNMOCK(tls_get_write_overhead_ratio);
+ NS_UNMOCK(we_are_hibernating);
+ NS_UNMOCK(get_options);
+ NS_UNMOCK(public_server_mode);
+ NS_UNMOCK(router_get_my_routerinfo);
+}
+
+static double
+NS(tls_get_write_overhead_ratio)(void)
+{
+ return 2.0;
+}
+
+static int
+NS(we_are_hibernating)(void)
+{
+ return 0;
+}
+
+static const or_options_t *
+NS(get_options)(void)
+{
+ return NULL;
+}
+
+static int
+NS(public_server_mode)(const or_options_t *options)
+{
+ (void)options;
+
+ return 1;
+}
+
+static const routerinfo_t *
+NS(router_get_my_routerinfo)(void)
+{
+ return NULL;
+}
+
+#undef NS_SUBMODULE
+#define NS_SUBMODULE ASPECT(log_heartbeat, not_in_consensus)
+
+/*
+ * Tests that log_heartbeat() logs appropriately if we are not in the cached
+ * consensus.
+ */
+
+NS_DECL(double, tls_get_write_overhead_ratio, (void));
+NS_DECL(int, we_are_hibernating, (void));
+NS_DECL(const or_options_t *, get_options, (void));
+NS_DECL(int, public_server_mode, (const or_options_t *options));
+NS_DECL(const routerinfo_t *, router_get_my_routerinfo, (void));
+NS_DECL(const node_t *, node_get_by_id, (const char *identity_digest));
+NS_DECL(void, logv, (int severity, log_domain_mask_t domain,
+ const char *funcname, const char *suffix, const char *format, va_list ap));
+NS_DECL(int, server_mode, (const or_options_t *options));
+
+static routerinfo_t *mock_routerinfo;
+extern int onion_handshakes_requested[MAX_ONION_HANDSHAKE_TYPE+1];
+extern int onion_handshakes_assigned[MAX_ONION_HANDSHAKE_TYPE+1];
+
+static void
+NS(test_main)(void *arg)
+{
+ int expected, actual;
+ (void)arg;
+
+ NS_MOCK(tls_get_write_overhead_ratio);
+ NS_MOCK(we_are_hibernating);
+ NS_MOCK(get_options);
+ NS_MOCK(public_server_mode);
+ NS_MOCK(router_get_my_routerinfo);
+ NS_MOCK(node_get_by_id);
+ NS_MOCK(logv);
+ NS_MOCK(server_mode);
+
+ log_global_min_severity_ = LOG_DEBUG;
+ onion_handshakes_requested[ONION_HANDSHAKE_TYPE_TAP] = 1;
+ onion_handshakes_assigned[ONION_HANDSHAKE_TYPE_TAP] = 1;
+ onion_handshakes_requested[ONION_HANDSHAKE_TYPE_NTOR] = 1;
+ onion_handshakes_assigned[ONION_HANDSHAKE_TYPE_NTOR] = 1;
+
+ expected = 0;
+ actual = log_heartbeat(0);
+
+ tt_int_op(actual, ==, expected);
+ tt_int_op(CALLED(logv), ==, 3);
+
+ done:
+ NS_UNMOCK(tls_get_write_overhead_ratio);
+ NS_UNMOCK(we_are_hibernating);
+ NS_UNMOCK(get_options);
+ NS_UNMOCK(public_server_mode);
+ NS_UNMOCK(router_get_my_routerinfo);
+ NS_UNMOCK(node_get_by_id);
+ NS_UNMOCK(logv);
+ NS_UNMOCK(server_mode);
+ tor_free(mock_routerinfo);
+}
+
+static double
+NS(tls_get_write_overhead_ratio)(void)
+{
+ return 1.0;
+}
+
+static int
+NS(we_are_hibernating)(void)
+{
+ return 0;
+}
+
+static const or_options_t *
+NS(get_options)(void)
+{
+ return NULL;
+}
+
+static int
+NS(public_server_mode)(const or_options_t *options)
+{
+ (void)options;
+
+ return 1;
+}
+
+static const routerinfo_t *
+NS(router_get_my_routerinfo)(void)
+{
+ mock_routerinfo = tor_malloc(sizeof(routerinfo_t));
+
+ return mock_routerinfo;
+}
+
+static const node_t *
+NS(node_get_by_id)(const char *identity_digest)
+{
+ (void)identity_digest;
+
+ return NULL;
+}
+
+static void
+NS(logv)(int severity, log_domain_mask_t domain,
+ const char *funcname, const char *suffix, const char *format, va_list ap)
+{
+ switch (CALLED(logv))
+ {
+ case 0:
+ tt_int_op(severity, ==, LOG_NOTICE);
+ tt_int_op(domain, ==, LD_HEARTBEAT);
+ tt_ptr_op(strstr(funcname, "log_heartbeat"), !=, NULL);
+ tt_ptr_op(suffix, ==, NULL);
+ tt_str_op(format, ==,
+ "Heartbeat: It seems like we are not in the cached consensus.");
+ break;
+ case 1:
+ tt_int_op(severity, ==, LOG_NOTICE);
+ tt_int_op(domain, ==, LD_HEARTBEAT);
+ tt_ptr_op(strstr(funcname, "log_heartbeat"), !=, NULL);
+ tt_ptr_op(suffix, ==, NULL);
+ tt_str_op(format, ==,
+ "Heartbeat: Tor's uptime is %s, with %d circuits open. "
+ "I've sent %s and received %s.%s");
+ tt_str_op(va_arg(ap, char *), ==, "0:00 hours"); /* uptime */
+ tt_int_op(va_arg(ap, int), ==, 0); /* count_circuits() */
+ tt_str_op(va_arg(ap, char *), ==, "0 kB"); /* bw_sent */
+ tt_str_op(va_arg(ap, char *), ==, "0 kB"); /* bw_rcvd */
+ tt_str_op(va_arg(ap, char *), ==, ""); /* hibernating */
+ break;
+ case 2:
+ tt_int_op(severity, ==, LOG_NOTICE);
+ tt_int_op(domain, ==, LD_HEARTBEAT);
+ tt_ptr_op(
+ strstr(funcname, "rep_hist_log_circuit_handshake_stats"), !=, NULL);
+ tt_ptr_op(suffix, ==, NULL);
+ tt_str_op(format, ==,
+ "Circuit handshake stats since last time: %d/%d TAP, %d/%d NTor.");
+ tt_int_op(va_arg(ap, int), ==, 1); /* handshakes assigned (TAP) */
+ tt_int_op(va_arg(ap, int), ==, 1); /* handshakes requested (TAP) */
+ tt_int_op(va_arg(ap, int), ==, 1); /* handshakes assigned (NTOR) */
+ tt_int_op(va_arg(ap, int), ==, 1); /* handshakes requested (NTOR) */
+ break;
+ default:
+ tt_abort_msg("unexpected call to logv()"); // TODO: prettyprint args
+ break;
+ }
+
+ done:
+ CALLED(logv)++;
+}
+
+static int
+NS(server_mode)(const or_options_t *options)
+{
+ (void)options;
+
+ return 0;
+}
+
+#undef NS_SUBMODULE
+#define NS_SUBMODULE ASPECT(log_heartbeat, simple)
+
+/*
+ * Tests that log_heartbeat() correctly logs heartbeat information
+ * normally.
+ */
+
+NS_DECL(double, tls_get_write_overhead_ratio, (void));
+NS_DECL(int, we_are_hibernating, (void));
+NS_DECL(const or_options_t *, get_options, (void));
+NS_DECL(int, public_server_mode, (const or_options_t *options));
+NS_DECL(long, get_uptime, (void));
+NS_DECL(uint64_t, get_bytes_read, (void));
+NS_DECL(uint64_t, get_bytes_written, (void));
+NS_DECL(void, logv, (int severity, log_domain_mask_t domain,
+ const char *funcname, const char *suffix, const char *format, va_list ap));
+NS_DECL(int, server_mode, (const or_options_t *options));
+
+static void
+NS(test_main)(void *arg)
+{
+ int expected, actual;
+ (void)arg;
+
+ NS_MOCK(tls_get_write_overhead_ratio);
+ NS_MOCK(we_are_hibernating);
+ NS_MOCK(get_options);
+ NS_MOCK(public_server_mode);
+ NS_MOCK(get_uptime);
+ NS_MOCK(get_bytes_read);
+ NS_MOCK(get_bytes_written);
+ NS_MOCK(logv);
+ NS_MOCK(server_mode);
+
+ log_global_min_severity_ = LOG_DEBUG;
+
+ expected = 0;
+ actual = log_heartbeat(0);
+
+ tt_int_op(actual, ==, expected);
+
+ done:
+ NS_UNMOCK(tls_get_write_overhead_ratio);
+ NS_UNMOCK(we_are_hibernating);
+ NS_UNMOCK(get_options);
+ NS_UNMOCK(public_server_mode);
+ NS_UNMOCK(get_uptime);
+ NS_UNMOCK(get_bytes_read);
+ NS_UNMOCK(get_bytes_written);
+ NS_UNMOCK(logv);
+ NS_UNMOCK(server_mode);
+}
+
+static double
+NS(tls_get_write_overhead_ratio)(void)
+{
+ return 1.0;
+}
+
+static int
+NS(we_are_hibernating)(void)
+{
+ return 1;
+}
+
+static const or_options_t *
+NS(get_options)(void)
+{
+ return NULL;
+}
+
+static int
+NS(public_server_mode)(const or_options_t *options)
+{
+ (void)options;
+
+ return 0;
+}
+
+static long
+NS(get_uptime)(void)
+{
+ return 0;
+}
+
+static uint64_t
+NS(get_bytes_read)(void)
+{
+ return 0;
+}
+
+static uint64_t
+NS(get_bytes_written)(void)
+{
+ return 0;
+}
+
+static void
+NS(logv)(int severity, log_domain_mask_t domain, const char *funcname,
+ const char *suffix, const char *format, va_list ap)
+{
+ tt_int_op(severity, ==, LOG_NOTICE);
+ tt_int_op(domain, ==, LD_HEARTBEAT);
+ tt_ptr_op(strstr(funcname, "log_heartbeat"), !=, NULL);
+ tt_ptr_op(suffix, ==, NULL);
+ tt_str_op(format, ==,
+ "Heartbeat: Tor's uptime is %s, with %d circuits open. "
+ "I've sent %s and received %s.%s");
+ tt_str_op(va_arg(ap, char *), ==, "0:00 hours"); /* uptime */
+ tt_int_op(va_arg(ap, int), ==, 0); /* count_circuits() */
+ tt_str_op(va_arg(ap, char *), ==, "0 kB"); /* bw_sent */
+ tt_str_op(va_arg(ap, char *), ==, "0 kB"); /* bw_rcvd */
+ tt_str_op(va_arg(ap, char *), ==, " We are currently hibernating.");
+
+ done:
+ ;
+}
+
+static int
+NS(server_mode)(const or_options_t *options)
+{
+ (void)options;
+
+ return 0;
+}
+
+#undef NS_SUBMODULE
+#define NS_SUBMODULE ASPECT(log_heartbeat, calls_log_accounting)
+
+/*
+ * Tests that log_heartbeat() correctly logs heartbeat information
+ * and accounting information when configured.
+ */
+
+NS_DECL(double, tls_get_write_overhead_ratio, (void));
+NS_DECL(int, we_are_hibernating, (void));
+NS_DECL(const or_options_t *, get_options, (void));
+NS_DECL(int, public_server_mode, (const or_options_t *options));
+NS_DECL(long, get_uptime, (void));
+NS_DECL(uint64_t, get_bytes_read, (void));
+NS_DECL(uint64_t, get_bytes_written, (void));
+NS_DECL(void, logv, (int severity, log_domain_mask_t domain,
+ const char *funcname, const char *suffix, const char *format, va_list ap));
+NS_DECL(int, server_mode, (const or_options_t *options));
+NS_DECL(or_state_t *, get_or_state, (void));
+NS_DECL(int, accounting_is_enabled, (const or_options_t *options));
+NS_DECL(time_t, accounting_get_end_time, (void));
+
+static or_state_t * NS(mock_state) = NULL;
+static or_options_t * NS(mock_options) = NULL;
+
+static void
+NS(test_main)(void *arg)
+{
+ int expected, actual;
+ (void)arg;
+
+ NS_MOCK(tls_get_write_overhead_ratio);
+ NS_MOCK(we_are_hibernating);
+ NS_MOCK(get_options);
+ NS_MOCK(public_server_mode);
+ NS_MOCK(get_uptime);
+ NS_MOCK(get_bytes_read);
+ NS_MOCK(get_bytes_written);
+ NS_MOCK(logv);
+ NS_MOCK(server_mode);
+ NS_MOCK(get_or_state);
+ NS_MOCK(accounting_is_enabled);
+ NS_MOCK(accounting_get_end_time);
+
+ log_global_min_severity_ = LOG_DEBUG;
+
+ expected = 0;
+ actual = log_heartbeat(0);
+
+ tt_int_op(actual, ==, expected);
+ tt_int_op(CALLED(logv), ==, 2);
+
+ done:
+ NS_UNMOCK(tls_get_write_overhead_ratio);
+ NS_UNMOCK(we_are_hibernating);
+ NS_UNMOCK(get_options);
+ NS_UNMOCK(public_server_mode);
+ NS_UNMOCK(get_uptime);
+ NS_UNMOCK(get_bytes_read);
+ NS_UNMOCK(get_bytes_written);
+ NS_UNMOCK(logv);
+ NS_UNMOCK(server_mode);
+ NS_UNMOCK(accounting_is_enabled);
+ NS_UNMOCK(accounting_get_end_time);
+ tor_free_(NS(mock_state));
+ tor_free_(NS(mock_options));
+}
+
+static double
+NS(tls_get_write_overhead_ratio)(void)
+{
+ return 1.0;
+}
+
+static int
+NS(we_are_hibernating)(void)
+{
+ return 0;
+}
+
+static const or_options_t *
+NS(get_options)(void)
+{
+ NS(mock_options) = tor_malloc_zero(sizeof(or_options_t));
+ NS(mock_options)->AccountingMax = 0;
+
+ return NS(mock_options);
+}
+
+static int
+NS(public_server_mode)(const or_options_t *options)
+{
+ (void)options;
+
+ return 0;
+}
+
+static long
+NS(get_uptime)(void)
+{
+ return 0;
+}
+
+static uint64_t
+NS(get_bytes_read)(void)
+{
+ return 0;
+}
+
+static uint64_t
+NS(get_bytes_written)(void)
+{
+ return 0;
+}
+
+static void
+NS(logv)(int severity, log_domain_mask_t domain,
+ const char *funcname, const char *suffix, const char *format, va_list ap)
+{
+ switch (CALLED(logv))
+ {
+ case 0:
+ tt_int_op(severity, ==, LOG_NOTICE);
+ tt_int_op(domain, ==, LD_HEARTBEAT);
+ tt_ptr_op(strstr(funcname, "log_heartbeat"), !=, NULL);
+ tt_ptr_op(suffix, ==, NULL);
+ tt_str_op(format, ==,
+ "Heartbeat: Tor's uptime is %s, with %d circuits open. "
+ "I've sent %s and received %s.%s");
+ tt_str_op(va_arg(ap, char *), ==, "0:00 hours"); /* uptime */
+ tt_int_op(va_arg(ap, int), ==, 0); /* count_circuits() */
+ tt_str_op(va_arg(ap, char *), ==, "0 kB"); /* bw_sent */
+ tt_str_op(va_arg(ap, char *), ==, "0 kB"); /* bw_rcvd */
+ tt_str_op(va_arg(ap, char *), ==, ""); /* hibernating */
+ break;
+ case 1:
+ tt_int_op(severity, ==, LOG_NOTICE);
+ tt_int_op(domain, ==, LD_HEARTBEAT);
+ tt_ptr_op(strstr(funcname, "log_accounting"), !=, NULL);
+ tt_ptr_op(suffix, ==, NULL);
+ tt_str_op(format, ==,
+ "Heartbeat: Accounting enabled. Sent: %s / %s, Received: %s / %s. "
+ "The current accounting interval ends on %s, in %s.");
+ tt_str_op(va_arg(ap, char *), ==, "0 kB"); /* acc_sent */
+ tt_str_op(va_arg(ap, char *), ==, "0 kB"); /* acc_max */
+ tt_str_op(va_arg(ap, char *), ==, "0 kB"); /* acc_rcvd */
+ tt_str_op(va_arg(ap, char *), ==, "0 kB"); /* acc_max */
+ /* format_local_iso_time uses local tz, just check mins and secs. */
+ tt_ptr_op(strstr(va_arg(ap, char *), ":01:00"), !=, NULL); /* end_buf */
+ tt_str_op(va_arg(ap, char *), ==, "0:01 hours"); /* remaining */
+ break;
+ default:
+ tt_abort_msg("unexpected call to logv()"); // TODO: prettyprint args
+ break;
+ }
+
+ done:
+ CALLED(logv)++;
+}
+
+static int
+NS(server_mode)(const or_options_t *options)
+{
+ (void)options;
+
+ return 1;
+}
+
+static int
+NS(accounting_is_enabled)(const or_options_t *options)
+{
+ (void)options;
+
+ return 1;
+}
+
+static time_t
+NS(accounting_get_end_time)(void)
+{
+ return 60;
+}
+
+static or_state_t *
+NS(get_or_state)(void)
+{
+ NS(mock_state) = tor_malloc_zero(sizeof(or_state_t));
+ NS(mock_state)->AccountingBytesReadInInterval = 0;
+ NS(mock_state)->AccountingBytesWrittenInInterval = 0;
+
+ return NS(mock_state);
+}
+
+#undef NS_SUBMODULE
+#define NS_SUBMODULE ASPECT(log_heartbeat, packaged_cell_fullness)
+
+/*
+ * Tests that log_heartbeat() correctly logs packaged cell
+ * fullness information.
+ */
+
+NS_DECL(double, tls_get_write_overhead_ratio, (void));
+NS_DECL(int, we_are_hibernating, (void));
+NS_DECL(const or_options_t *, get_options, (void));
+NS_DECL(int, public_server_mode, (const or_options_t *options));
+NS_DECL(long, get_uptime, (void));
+NS_DECL(uint64_t, get_bytes_read, (void));
+NS_DECL(uint64_t, get_bytes_written, (void));
+NS_DECL(void, logv, (int severity, log_domain_mask_t domain,
+ const char *funcname, const char *suffix, const char *format, va_list ap));
+NS_DECL(int, server_mode, (const or_options_t *options));
+NS_DECL(int, accounting_is_enabled, (const or_options_t *options));
+
+static void
+NS(test_main)(void *arg)
+{
+ int expected, actual;
+ (void)arg;
+
+ NS_MOCK(tls_get_write_overhead_ratio);
+ NS_MOCK(we_are_hibernating);
+ NS_MOCK(get_options);
+ NS_MOCK(public_server_mode);
+ NS_MOCK(get_uptime);
+ NS_MOCK(get_bytes_read);
+ NS_MOCK(get_bytes_written);
+ NS_MOCK(logv);
+ NS_MOCK(server_mode);
+ NS_MOCK(accounting_is_enabled);
+ log_global_min_severity_ = LOG_DEBUG;
+
+ stats_n_data_bytes_packaged = RELAY_PAYLOAD_SIZE;
+ stats_n_data_cells_packaged = 1;
+ expected = 0;
+ actual = log_heartbeat(0);
+
+ tt_int_op(actual, ==, expected);
+ tt_int_op(CALLED(logv), ==, 2);
+
+ done:
+ stats_n_data_bytes_packaged = 0;
+ stats_n_data_cells_packaged = 0;
+ NS_UNMOCK(tls_get_write_overhead_ratio);
+ NS_UNMOCK(we_are_hibernating);
+ NS_UNMOCK(get_options);
+ NS_UNMOCK(public_server_mode);
+ NS_UNMOCK(get_uptime);
+ NS_UNMOCK(get_bytes_read);
+ NS_UNMOCK(get_bytes_written);
+ NS_UNMOCK(logv);
+ NS_UNMOCK(server_mode);
+ NS_UNMOCK(accounting_is_enabled);
+}
+
+static double
+NS(tls_get_write_overhead_ratio)(void)
+{
+ return 1.0;
+}
+
+static int
+NS(we_are_hibernating)(void)
+{
+ return 0;
+}
+
+static const or_options_t *
+NS(get_options)(void)
+{
+ return NULL;
+}
+
+static int
+NS(public_server_mode)(const or_options_t *options)
+{
+ (void)options;
+
+ return 0;
+}
+
+static long
+NS(get_uptime)(void)
+{
+ return 0;
+}
+
+static uint64_t
+NS(get_bytes_read)(void)
+{
+ return 0;
+}
+
+static uint64_t
+NS(get_bytes_written)(void)
+{
+ return 0;
+}
+
+static void
+NS(logv)(int severity, log_domain_mask_t domain, const char *funcname,
+ const char *suffix, const char *format, va_list ap)
+{
+ switch (CALLED(logv))
+ {
+ case 0:
+ tt_int_op(severity, ==, LOG_NOTICE);
+ tt_int_op(domain, ==, LD_HEARTBEAT);
+ tt_ptr_op(strstr(funcname, "log_heartbeat"), !=, NULL);
+ tt_ptr_op(suffix, ==, NULL);
+ tt_str_op(format, ==,
+ "Heartbeat: Tor's uptime is %s, with %d circuits open. "
+ "I've sent %s and received %s.%s");
+ tt_str_op(va_arg(ap, char *), ==, "0:00 hours"); /* uptime */
+ tt_int_op(va_arg(ap, int), ==, 0); /* count_circuits() */
+ tt_str_op(va_arg(ap, char *), ==, "0 kB"); /* bw_sent */
+ tt_str_op(va_arg(ap, char *), ==, "0 kB"); /* bw_rcvd */
+ tt_str_op(va_arg(ap, char *), ==, ""); /* hibernating */
+ break;
+ case 1:
+ tt_int_op(severity, ==, LOG_NOTICE);
+ tt_int_op(domain, ==, LD_HEARTBEAT);
+ tt_ptr_op(strstr(funcname, "log_heartbeat"), !=, NULL);
+ tt_ptr_op(suffix, ==, NULL);
+ tt_str_op(format, ==,
+ "Average packaged cell fullness: %2.3f%%");
+ tt_int_op(fabs(va_arg(ap, double) - 100.0) <= DBL_EPSILON, ==, 1);
+ break;
+ default:
+ tt_abort_msg("unexpected call to logv()"); // TODO: prettyprint args
+ break;
+ }
+
+ done:
+ CALLED(logv)++;
+}
+
+static int
+NS(server_mode)(const or_options_t *options)
+{
+ (void)options;
+
+ return 0;
+}
+
+static int
+NS(accounting_is_enabled)(const or_options_t *options)
+{
+ (void)options;
+
+ return 0;
+}
+
+#undef NS_SUBMODULE
+#define NS_SUBMODULE ASPECT(log_heartbeat, tls_write_overhead)
+
+/*
+ * Tests that log_heartbeat() correctly logs the TLS write overhead information
+ * when the TLS write overhead ratio exceeds 1.
+ */
+
+NS_DECL(double, tls_get_write_overhead_ratio, (void));
+NS_DECL(int, we_are_hibernating, (void));
+NS_DECL(const or_options_t *, get_options, (void));
+NS_DECL(int, public_server_mode, (const or_options_t *options));
+NS_DECL(long, get_uptime, (void));
+NS_DECL(uint64_t, get_bytes_read, (void));
+NS_DECL(uint64_t, get_bytes_written, (void));
+NS_DECL(void, logv, (int severity, log_domain_mask_t domain,
+ const char *funcname, const char *suffix, const char *format, va_list ap));
+NS_DECL(int, server_mode, (const or_options_t *options));
+NS_DECL(int, accounting_is_enabled, (const or_options_t *options));
+
+static void
+NS(test_main)(void *arg)
+{
+ int expected, actual;
+ (void)arg;
+
+ NS_MOCK(tls_get_write_overhead_ratio);
+ NS_MOCK(we_are_hibernating);
+ NS_MOCK(get_options);
+ NS_MOCK(public_server_mode);
+ NS_MOCK(get_uptime);
+ NS_MOCK(get_bytes_read);
+ NS_MOCK(get_bytes_written);
+ NS_MOCK(logv);
+ NS_MOCK(server_mode);
+ NS_MOCK(accounting_is_enabled);
+ stats_n_data_cells_packaged = 0;
+ log_global_min_severity_ = LOG_DEBUG;
+
+ expected = 0;
+ actual = log_heartbeat(0);
+
+ tt_int_op(actual, ==, expected);
+ tt_int_op(CALLED(logv), ==, 2);
+
+ done:
+ NS_UNMOCK(tls_get_write_overhead_ratio);
+ NS_UNMOCK(we_are_hibernating);
+ NS_UNMOCK(get_options);
+ NS_UNMOCK(public_server_mode);
+ NS_UNMOCK(get_uptime);
+ NS_UNMOCK(get_bytes_read);
+ NS_UNMOCK(get_bytes_written);
+ NS_UNMOCK(logv);
+ NS_UNMOCK(server_mode);
+ NS_UNMOCK(accounting_is_enabled);
+}
+
+static double
+NS(tls_get_write_overhead_ratio)(void)
+{
+ return 2.0;
+}
+
+static int
+NS(we_are_hibernating)(void)
+{
+ return 0;
+}
+
+static const or_options_t *
+NS(get_options)(void)
+{
+ return NULL;
+}
+
+static int
+NS(public_server_mode)(const or_options_t *options)
+{
+ (void)options;
+
+ return 0;
+}
+
+static long
+NS(get_uptime)(void)
+{
+ return 0;
+}
+
+static uint64_t
+NS(get_bytes_read)(void)
+{
+ return 0;
+}
+
+static uint64_t
+NS(get_bytes_written)(void)
+{
+ return 0;
+}
+
+static void
+NS(logv)(int severity, log_domain_mask_t domain,
+ const char *funcname, const char *suffix, const char *format, va_list ap)
+{
+ switch (CALLED(logv))
+ {
+ case 0:
+ tt_int_op(severity, ==, LOG_NOTICE);
+ tt_int_op(domain, ==, LD_HEARTBEAT);
+ tt_ptr_op(strstr(funcname, "log_heartbeat"), !=, NULL);
+ tt_ptr_op(suffix, ==, NULL);
+ tt_str_op(format, ==,
+ "Heartbeat: Tor's uptime is %s, with %d circuits open. "
+ "I've sent %s and received %s.%s");
+ tt_str_op(va_arg(ap, char *), ==, "0:00 hours"); /* uptime */
+ tt_int_op(va_arg(ap, int), ==, 0); /* count_circuits() */
+ tt_str_op(va_arg(ap, char *), ==, "0 kB"); /* bw_sent */
+ tt_str_op(va_arg(ap, char *), ==, "0 kB"); /* bw_rcvd */
+ tt_str_op(va_arg(ap, char *), ==, ""); /* hibernating */
+ break;
+ case 1:
+ tt_int_op(severity, ==, LOG_NOTICE);
+ tt_int_op(domain, ==, LD_HEARTBEAT);
+ tt_ptr_op(strstr(funcname, "log_heartbeat"), !=, NULL);
+ tt_ptr_op(suffix, ==, NULL);
+ tt_str_op(format, ==, "TLS write overhead: %.f%%");
+ tt_int_op(fabs(va_arg(ap, double) - 100.0) <= DBL_EPSILON, ==, 1);
+ break;
+ default:
+ tt_abort_msg("unexpected call to logv()"); // TODO: prettyprint args
+ break;
+ }
+
+ done:
+ CALLED(logv)++;
+}
+
+static int
+NS(server_mode)(const or_options_t *options)
+{
+ (void)options;
+
+ return 0;
+}
+
+static int
+NS(accounting_is_enabled)(const or_options_t *options)
+{
+ (void)options;
+
+ return 0;
+}
+
+#undef NS_SUBMODULE
+
+struct testcase_t status_tests[] = {
+ TEST_CASE(count_circuits),
+ TEST_CASE(secs_to_uptime),
+ TEST_CASE(bytes_to_usage),
+ TEST_CASE_ASPECT(log_heartbeat, fails),
+ TEST_CASE_ASPECT(log_heartbeat, simple),
+ TEST_CASE_ASPECT(log_heartbeat, not_in_consensus),
+ TEST_CASE_ASPECT(log_heartbeat, calls_log_accounting),
+ TEST_CASE_ASPECT(log_heartbeat, packaged_cell_fullness),
+ TEST_CASE_ASPECT(log_heartbeat, tls_write_overhead),
+ END_OF_TESTCASES
+};
+
diff --git a/src/test/test_util.c b/src/test/test_util.c
index 4f9eb73e0..c7fa14118 100644
--- a/src/test/test_util.c
+++ b/src/test/test_util.c
@@ -1,9 +1,10 @@
/* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#include "orconfig.h"
+#define COMPAT_PRIVATE
#define CONTROL_PRIVATE
#define MEMPOOL_PRIVATE
#define UTIL_PRIVATE
@@ -11,12 +12,15 @@
#include "config.h"
#include "control.h"
#include "test.h"
+#ifdef ENABLE_MEMPOOLS
#include "mempool.h"
+#endif /* ENABLE_MEMPOOLS */
#include "memarea.h"
#ifdef _WIN32
#include <tchar.h>
#endif
+#include <math.h>
/* XXXX this is a minimal wrapper to make the unit tests compile with the
* changed tor_timegm interface. */
@@ -32,6 +36,176 @@ tor_timegm_wrapper(const struct tm *tm)
#define tor_timegm tor_timegm_wrapper
static void
+test_util_read_until_eof_impl(const char *fname, size_t file_len,
+ size_t read_limit)
+{
+ char *fifo_name = NULL;
+ char *test_str = NULL;
+ char *str = NULL;
+ size_t sz = 9999999;
+ int fd = -1;
+ int r;
+
+ fifo_name = tor_strdup(get_fname(fname));
+ test_str = tor_malloc(file_len);
+ crypto_rand(test_str, file_len);
+
+ r = write_bytes_to_file(fifo_name, test_str, file_len, 1);
+ tt_int_op(r, ==, 0);
+
+ fd = open(fifo_name, O_RDONLY|O_BINARY);
+ tt_int_op(fd, >=, 0);
+ str = read_file_to_str_until_eof(fd, read_limit, &sz);
+ tt_assert(str != NULL);
+
+ if (read_limit < file_len)
+ tt_int_op(sz, ==, read_limit);
+ else
+ tt_int_op(sz, ==, file_len);
+
+ test_mem_op(test_str, ==, str, sz);
+ test_assert(str[sz] == '\0');
+
+ done:
+ unlink(fifo_name);
+ tor_free(fifo_name);
+ tor_free(test_str);
+ tor_free(str);
+ if (fd >= 0)
+ close(fd);
+}
+
+static void
+test_util_read_file_eof_tiny_limit(void *arg)
+{
+ (void)arg;
+ // purposely set limit shorter than what we wrote to the FIFO to
+ // test the maximum, and that it puts the NUL in the right spot
+
+ test_util_read_until_eof_impl("tor_test_fifo_tiny", 5, 4);
+}
+
+static void
+test_util_read_file_eof_two_loops(void *arg)
+{
+ (void)arg;
+ // write more than 1024 bytes to the FIFO to test two passes through
+ // the loop in the method; if the re-alloc size is changed this
+ // should be updated as well.
+
+ test_util_read_until_eof_impl("tor_test_fifo_2k", 2048, 10000);
+}
+
+static void
+test_util_read_file_eof_zero_bytes(void *arg)
+{
+ (void)arg;
+ // zero-byte fifo
+ test_util_read_until_eof_impl("tor_test_fifo_empty", 0, 10000);
+}
+
+/* Test the basic expected behaviour for write_chunks_to_file.
+ * NOTE: This will need to be updated if we ever change the tempfile location
+ * or extension */
+static void
+test_util_write_chunks_to_file(void *arg)
+{
+ char *fname = NULL;
+ char *tempname = NULL;
+ char *str = NULL;
+ int r;
+ struct stat st;
+
+ /* These should be two different sizes to ensure the data is different
+ * between the data file and the temp file's 'known string' */
+ int temp_str_len = 1024;
+ int data_str_len = 512;
+ char *data_str = tor_malloc(data_str_len);
+ char *temp_str = tor_malloc(temp_str_len);
+
+ smartlist_t *chunks = smartlist_new();
+ sized_chunk_t c = {data_str, data_str_len/2};
+ sized_chunk_t c2 = {data_str + data_str_len/2, data_str_len/2};
+ (void)arg;
+
+ crypto_rand(temp_str, temp_str_len);
+ crypto_rand(data_str, data_str_len);
+
+ // Ensure it can write multiple chunks
+
+ smartlist_add(chunks, &c);
+ smartlist_add(chunks, &c2);
+
+ /*
+ * Check if it writes using a tempfile
+ */
+ fname = tor_strdup(get_fname("write_chunks_with_tempfile"));
+ tor_asprintf(&tempname, "%s.tmp", fname);
+
+ // write a known string to a file where the tempfile will be
+ r = write_bytes_to_file(tempname, temp_str, temp_str_len, 1);
+ tt_int_op(r, ==, 0);
+
+ // call write_chunks_to_file
+ r = write_chunks_to_file(fname, chunks, 1, 0);
+ tt_int_op(r, ==, 0);
+
+ // assert the file has been written (expected size)
+ str = read_file_to_str(fname, RFTS_BIN, &st);
+ tt_assert(str != NULL);
+ tt_u64_op((uint64_t)st.st_size, ==, data_str_len);
+ test_mem_op(data_str, ==, str, data_str_len);
+ tor_free(str);
+
+ // assert that the tempfile is removed (should not leave artifacts)
+ str = read_file_to_str(tempname, RFTS_BIN|RFTS_IGNORE_MISSING, &st);
+ tt_assert(str == NULL);
+
+ // Remove old testfile for second test
+ r = unlink(fname);
+ tt_int_op(r, ==, 0);
+ tor_free(fname);
+ tor_free(tempname);
+
+ /*
+ * Check if it skips using a tempfile with flags
+ */
+ fname = tor_strdup(get_fname("write_chunks_with_no_tempfile"));
+ tor_asprintf(&tempname, "%s.tmp", fname);
+
+ // write a known string to a file where the tempfile will be
+ r = write_bytes_to_file(tempname, temp_str, temp_str_len, 1);
+ tt_int_op(r, ==, 0);
+
+ // call write_chunks_to_file with no_tempfile = true
+ r = write_chunks_to_file(fname, chunks, 1, 1);
+ tt_int_op(r, ==, 0);
+
+ // assert the file has been written (expected size)
+ str = read_file_to_str(fname, RFTS_BIN, &st);
+ tt_assert(str != NULL);
+ tt_u64_op((uint64_t)st.st_size, ==, data_str_len);
+ test_mem_op(data_str, ==, str, data_str_len);
+ tor_free(str);
+
+ // assert the tempfile still contains the known string
+ str = read_file_to_str(tempname, RFTS_BIN, &st);
+ tt_assert(str != NULL);
+ tt_u64_op((uint64_t)st.st_size, ==, temp_str_len);
+ test_mem_op(temp_str, ==, str, temp_str_len);
+
+ done:
+ unlink(fname);
+ unlink(tempname);
+ smartlist_free(chunks);
+ tor_free(fname);
+ tor_free(tempname);
+ tor_free(str);
+ tor_free(data_str);
+ tor_free(temp_str);
+}
+
+static void
test_util_time(void)
{
struct timeval start, end;
@@ -152,6 +326,7 @@ test_util_time(void)
test_eq(-1, parse_iso_time("2011-03-30 23:59:62 GMT", &t_res));
test_eq(-1, parse_iso_time("1969-03-30 23:59:59 GMT", &t_res));
test_eq(-1, parse_iso_time("2011-00-30 23:59:59 GMT", &t_res));
+ test_eq(-1, parse_iso_time("2147483647-08-29 14:00:00", &t_res));
test_eq(-1, parse_iso_time("2011-03-30 23:59", &t_res));
/* Test tor_gettimeofday */
@@ -171,7 +346,7 @@ test_util_time(void)
tv.tv_sec = (time_t)1326296338;
tv.tv_usec = 3060;
- format_iso_time(timestr, tv.tv_sec);
+ format_iso_time(timestr, (time_t)tv.tv_sec);
test_streq("2012-01-11 15:38:58", timestr);
/* The output of format_local_iso_time will vary by timezone, and setting
our timezone for testing purposes would be a nontrivial flaky pain.
@@ -179,7 +354,7 @@ test_util_time(void)
format_local_iso_time(timestr, tv.tv_sec);
test_streq("2012-01-11 10:38:58", timestr);
*/
- format_iso_time_nospace(timestr, tv.tv_sec);
+ format_iso_time_nospace(timestr, (time_t)tv.tv_sec);
test_streq("2012-01-11T15:38:58", timestr);
test_eq(strlen(timestr), ISO_TIME_LEN);
format_iso_time_nospace_usec(timestr, &tv);
@@ -725,13 +900,71 @@ test_util_expand_filename(void)
}
#endif
+/** Test tor_escape_str_for_pt_args(). */
+static void
+test_util_escape_string_socks(void)
+{
+ char *escaped_string = NULL;
+
+ /** Simple backslash escape. */
+ escaped_string = tor_escape_str_for_pt_args("This is a backslash: \\",";\\");
+ test_assert(escaped_string);
+ test_streq(escaped_string, "This is a backslash: \\\\");
+ tor_free(escaped_string);
+
+ /** Simple semicolon escape. */
+ escaped_string = tor_escape_str_for_pt_args("First rule:Do not use ;",";\\");
+ test_assert(escaped_string);
+ test_streq(escaped_string, "First rule:Do not use \\;");
+ tor_free(escaped_string);
+
+ /** Empty string. */
+ escaped_string = tor_escape_str_for_pt_args("", ";\\");
+ test_assert(escaped_string);
+ test_streq(escaped_string, "");
+ tor_free(escaped_string);
+
+ /** Escape all characters. */
+ escaped_string = tor_escape_str_for_pt_args(";\\;\\", ";\\");
+ test_assert(escaped_string);
+ test_streq(escaped_string, "\\;\\\\\\;\\\\");
+ tor_free(escaped_string);
+
+ escaped_string = tor_escape_str_for_pt_args(";", ";\\");
+ test_assert(escaped_string);
+ test_streq(escaped_string, "\\;");
+ tor_free(escaped_string);
+
+ done:
+ tor_free(escaped_string);
+}
+
+static void
+test_util_string_is_key_value(void *ptr)
+{
+ (void)ptr;
+ test_assert(string_is_key_value(LOG_WARN, "key=value"));
+ test_assert(string_is_key_value(LOG_WARN, "k=v"));
+ test_assert(string_is_key_value(LOG_WARN, "key="));
+ test_assert(string_is_key_value(LOG_WARN, "x="));
+ test_assert(string_is_key_value(LOG_WARN, "xx="));
+ test_assert(!string_is_key_value(LOG_WARN, "=value"));
+ test_assert(!string_is_key_value(LOG_WARN, "=x"));
+ test_assert(!string_is_key_value(LOG_WARN, "="));
+
+ /* ??? */
+ /* test_assert(!string_is_key_value(LOG_WARN, "===")); */
+ done:
+ ;
+}
+
/** Test basic string functionality. */
static void
test_util_strmisc(void)
{
char buf[1024];
int i;
- char *cp;
+ char *cp, *cp_tmp = NULL;
/* Test strl operations */
test_eq(5, strlcpy(buf, "Hello", 0));
@@ -796,6 +1029,8 @@ test_util_strmisc(void)
test_eq(0L, tor_parse_long("10",-2,0,100,NULL,NULL));
test_eq(68284L, tor_parse_long("10abc",16,0,70000,NULL,NULL));
test_eq(68284L, tor_parse_long("10ABC",16,0,70000,NULL,NULL));
+ test_eq(0, tor_parse_long("10ABC",-1,0,70000,&i,NULL));
+ test_eq(i, 0);
/* Test parse_ulong */
test_eq(0UL, tor_parse_ulong("",10,0,100,NULL,NULL));
@@ -807,6 +1042,8 @@ test_util_strmisc(void)
test_eq(0UL, tor_parse_ulong("8",8,0,100,NULL,NULL));
test_eq(50UL, tor_parse_ulong("50",10,50,100,NULL,NULL));
test_eq(0UL, tor_parse_ulong("-50",10,-100,100,NULL,NULL));
+ test_eq(0UL, tor_parse_ulong("50",-1,50,100,&i,NULL));
+ test_eq(0, i);
/* Test parse_uint64 */
test_assert(U64_LITERAL(10) == tor_parse_uint64("10 x",10,0,100, &i, &cp));
@@ -819,6 +1056,9 @@ test_util_strmisc(void)
test_assert(U64_LITERAL(0) ==
tor_parse_uint64("12345678901",10,500,INT32_MAX, &i, &cp));
test_eq(0, i);
+ test_assert(U64_LITERAL(0) ==
+ tor_parse_uint64("123",-1,0,INT32_MAX, &i, &cp));
+ test_eq(0, i);
{
/* Test parse_double */
@@ -852,7 +1092,7 @@ test_util_strmisc(void)
test_eq(i, 0);
test_eq(0UL, tor_parse_ulong(TOOBIG, 10, 0, ULONG_MAX, &i, NULL));
test_eq(i, 0);
- test_eq(U64_LITERAL(0), tor_parse_uint64(TOOBIG, 10,
+ tt_u64_op(U64_LITERAL(0), ==, tor_parse_uint64(TOOBIG, 10,
0, UINT64_MAX, &i, NULL));
test_eq(i, 0);
}
@@ -934,36 +1174,36 @@ test_util_strmisc(void)
/* Test strndup and memdup */
{
const char *s = "abcdefghijklmnopqrstuvwxyz";
- cp = tor_strndup(s, 30);
- test_streq(cp, s); /* same string, */
- test_neq(cp, s); /* but different pointers. */
- tor_free(cp);
+ cp_tmp = tor_strndup(s, 30);
+ test_streq(cp_tmp, s); /* same string, */
+ test_neq_ptr(cp_tmp, s); /* but different pointers. */
+ tor_free(cp_tmp);
- cp = tor_strndup(s, 5);
- test_streq(cp, "abcde");
- tor_free(cp);
+ cp_tmp = tor_strndup(s, 5);
+ test_streq(cp_tmp, "abcde");
+ tor_free(cp_tmp);
s = "a\0b\0c\0d\0e\0";
- cp = tor_memdup(s,10);
- test_memeq(cp, s, 10); /* same ram, */
- test_neq(cp, s); /* but different pointers. */
- tor_free(cp);
+ cp_tmp = tor_memdup(s,10);
+ test_memeq(cp_tmp, s, 10); /* same ram, */
+ test_neq_ptr(cp_tmp, s); /* but different pointers. */
+ tor_free(cp_tmp);
}
/* Test str-foo functions */
- cp = tor_strdup("abcdef");
- test_assert(tor_strisnonupper(cp));
- cp[3] = 'D';
- test_assert(!tor_strisnonupper(cp));
- tor_strupper(cp);
- test_streq(cp, "ABCDEF");
- tor_strlower(cp);
- test_streq(cp, "abcdef");
- test_assert(tor_strisnonupper(cp));
- test_assert(tor_strisprint(cp));
- cp[3] = 3;
- test_assert(!tor_strisprint(cp));
- tor_free(cp);
+ cp_tmp = tor_strdup("abcdef");
+ test_assert(tor_strisnonupper(cp_tmp));
+ cp_tmp[3] = 'D';
+ test_assert(!tor_strisnonupper(cp_tmp));
+ tor_strupper(cp_tmp);
+ test_streq(cp_tmp, "ABCDEF");
+ tor_strlower(cp_tmp);
+ test_streq(cp_tmp, "abcdef");
+ test_assert(tor_strisnonupper(cp_tmp));
+ test_assert(tor_strisprint(cp_tmp));
+ cp_tmp[3] = 3;
+ test_assert(!tor_strisprint(cp_tmp));
+ tor_free(cp_tmp);
/* Test memmem and memstr */
{
@@ -974,6 +1214,10 @@ test_util_strmisc(void)
test_assert(!tor_memmem(haystack, 4, "cde", 3));
haystack = "ababcad";
test_eq_ptr(tor_memmem(haystack, 7, "abc", 3), haystack + 2);
+ test_eq_ptr(tor_memmem(haystack, 7, "ad", 2), haystack + 5);
+ test_eq_ptr(tor_memmem(haystack, 7, "cad", 3), haystack + 4);
+ test_assert(!tor_memmem(haystack, 7, "dadad", 5));
+ test_assert(!tor_memmem(haystack, 7, "abcdefghij", 10));
/* memstr */
test_eq_ptr(tor_memstr(haystack, 7, "abc"), haystack + 2);
test_eq_ptr(tor_memstr(haystack, 7, "cad"), haystack + 4);
@@ -983,79 +1227,6 @@ test_util_strmisc(void)
test_assert(!tor_memstr(haystack, 7, "ababcade"));
}
- /* Test wrap_string */
- {
- smartlist_t *sl = smartlist_new();
- wrap_string(sl,
- "This is a test of string wrapping functionality: woot. "
- "a functionality? w00t w00t...!",
- 10, "", "");
- cp = smartlist_join_strings(sl, "", 0, NULL);
- test_streq(cp,
- "This is a\ntest of\nstring\nwrapping\nfunctional\nity: woot.\n"
- "a\nfunctional\nity? w00t\nw00t...!\n");
- tor_free(cp);
- SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
- smartlist_clear(sl);
-
- wrap_string(sl, "This is a test of string wrapping functionality: woot.",
- 16, "### ", "# ");
- cp = smartlist_join_strings(sl, "", 0, NULL);
- test_streq(cp,
- "### This is a\n# test of string\n# wrapping\n# functionality:\n"
- "# woot.\n");
- tor_free(cp);
- SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
- smartlist_clear(sl);
-
- wrap_string(sl, "A test of string wrapping...", 6, "### ", "# ");
- cp = smartlist_join_strings(sl, "", 0, NULL);
- test_streq(cp,
- "### A\n# test\n# of\n# stri\n# ng\n# wrap\n# ping\n# ...\n");
- tor_free(cp);
- SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
- smartlist_clear(sl);
-
- wrap_string(sl, "Wrapping test", 6, "#### ", "# ");
- cp = smartlist_join_strings(sl, "", 0, NULL);
- test_streq(cp, "#### W\n# rapp\n# ing\n# test\n");
- tor_free(cp);
- SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
- smartlist_clear(sl);
-
- wrap_string(sl, "Small test", 6, "### ", "#### ");
- cp = smartlist_join_strings(sl, "", 0, NULL);
- test_streq(cp, "### Sm\n#### a\n#### l\n#### l\n#### t\n#### e"
- "\n#### s\n#### t\n");
- tor_free(cp);
- SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
- smartlist_clear(sl);
-
- wrap_string(sl, "First null", 6, NULL, "> ");
- cp = smartlist_join_strings(sl, "", 0, NULL);
- test_streq(cp, "First\n> null\n");
- tor_free(cp);
- SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
- smartlist_clear(sl);
-
- wrap_string(sl, "Second null", 6, "> ", NULL);
- cp = smartlist_join_strings(sl, "", 0, NULL);
- test_streq(cp, "> Seco\nnd\nnull\n");
- tor_free(cp);
- SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
- smartlist_clear(sl);
-
- wrap_string(sl, "Both null", 6, NULL, NULL);
- cp = smartlist_join_strings(sl, "", 0, NULL);
- test_streq(cp, "Both\nnull\n");
- tor_free(cp);
- SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
- smartlist_free(sl);
-
- /* Can't test prefixes that have the same length as the line width, because
- the function has an assert */
- }
-
/* Test hex_str */
{
char binary_data[68];
@@ -1099,7 +1270,7 @@ test_util_strmisc(void)
tt_int_op(strcmp_len("blah", "", 0), ==, 0);
done:
- ;
+ tor_free(cp_tmp);
}
static void
@@ -1109,6 +1280,7 @@ test_util_pow2(void)
test_eq(tor_log2(64), 6);
test_eq(tor_log2(65), 6);
test_eq(tor_log2(63), 5);
+ test_eq(tor_log2(0), 0); /* incorrect mathematically, but as specified */
test_eq(tor_log2(1), 0);
test_eq(tor_log2(2), 1);
test_eq(tor_log2(3), 1);
@@ -1118,31 +1290,40 @@ test_util_pow2(void)
test_eq(tor_log2(UINT64_MAX), 63);
/* Test round_to_power_of_2 */
- test_eq(round_to_power_of_2(120), 128);
- test_eq(round_to_power_of_2(128), 128);
- test_eq(round_to_power_of_2(130), 128);
- test_eq(round_to_power_of_2(U64_LITERAL(40000000000000000)),
- U64_LITERAL(1)<<55);
- test_eq(round_to_power_of_2(0), 2);
+ tt_u64_op(round_to_power_of_2(120), ==, 128);
+ tt_u64_op(round_to_power_of_2(128), ==, 128);
+ tt_u64_op(round_to_power_of_2(130), ==, 128);
+ tt_u64_op(round_to_power_of_2(U64_LITERAL(40000000000000000)), ==,
+ U64_LITERAL(1)<<55);
+ tt_u64_op(round_to_power_of_2(U64_LITERAL(0xffffffffffffffff)), ==,
+ U64_LITERAL(1)<<63);
+ tt_u64_op(round_to_power_of_2(0), ==, 1);
+ tt_u64_op(round_to_power_of_2(1), ==, 1);
+ tt_u64_op(round_to_power_of_2(2), ==, 2);
+ tt_u64_op(round_to_power_of_2(3), ==, 2);
+ tt_u64_op(round_to_power_of_2(4), ==, 4);
+ tt_u64_op(round_to_power_of_2(5), ==, 4);
+ tt_u64_op(round_to_power_of_2(6), ==, 4);
+ tt_u64_op(round_to_power_of_2(7), ==, 8);
done:
;
}
/** mutex for thread test to stop the threads hitting data at the same time. */
-static tor_mutex_t *_thread_test_mutex = NULL;
+static tor_mutex_t *thread_test_mutex_ = NULL;
/** mutexes for the thread test to make sure that the threads have to
* interleave somewhat. */
-static tor_mutex_t *_thread_test_start1 = NULL,
- *_thread_test_start2 = NULL;
+static tor_mutex_t *thread_test_start1_ = NULL,
+ *thread_test_start2_ = NULL;
/** Shared strmap for the thread test. */
-static strmap_t *_thread_test_strmap = NULL;
+static strmap_t *thread_test_strmap_ = NULL;
/** The name of thread1 for the thread test */
-static char *_thread1_name = NULL;
+static char *thread1_name_ = NULL;
/** The name of thread2 for the thread test */
-static char *_thread2_name = NULL;
+static char *thread2_name_ = NULL;
-static void _thread_test_func(void* _s) ATTR_NORETURN;
+static void thread_test_func_(void* _s) ATTR_NORETURN;
/** How many iterations have the threads in the unit test run? */
static int t1_count = 0, t2_count = 0;
@@ -1150,9 +1331,9 @@ static int t1_count = 0, t2_count = 0;
/** Helper function for threading unit tests: This function runs in a
* subthread. It grabs its own mutex (start1 or start2) to make sure that it
* should start, then it repeatedly alters _test_thread_strmap protected by
- * _thread_test_mutex. */
+ * thread_test_mutex_. */
static void
-_thread_test_func(void* _s)
+thread_test_func_(void* _s)
{
char *s = _s;
int i, *count;
@@ -1160,12 +1341,12 @@ _thread_test_func(void* _s)
char buf[64];
char **cp;
if (!strcmp(s, "thread 1")) {
- m = _thread_test_start1;
- cp = &_thread1_name;
+ m = thread_test_start1_;
+ cp = &thread1_name_;
count = &t1_count;
} else {
- m = _thread_test_start2;
- cp = &_thread2_name;
+ m = thread_test_start2_;
+ cp = &thread2_name_;
count = &t2_count;
}
@@ -1175,14 +1356,14 @@ _thread_test_func(void* _s)
tor_mutex_acquire(m);
for (i=0; i<10000; ++i) {
- tor_mutex_acquire(_thread_test_mutex);
- strmap_set(_thread_test_strmap, "last to run", *cp);
+ tor_mutex_acquire(thread_test_mutex_);
+ strmap_set(thread_test_strmap_, "last to run", *cp);
++*count;
- tor_mutex_release(_thread_test_mutex);
+ tor_mutex_release(thread_test_mutex_);
}
- tor_mutex_acquire(_thread_test_mutex);
- strmap_set(_thread_test_strmap, s, *cp);
- tor_mutex_release(_thread_test_mutex);
+ tor_mutex_acquire(thread_test_mutex_);
+ strmap_set(thread_test_strmap_, s, *cp);
+ tor_mutex_release(thread_test_mutex_);
tor_mutex_release(m);
@@ -1207,67 +1388,67 @@ test_util_threads(void)
if (1)
return;
#endif
- _thread_test_mutex = tor_mutex_new();
- _thread_test_start1 = tor_mutex_new();
- _thread_test_start2 = tor_mutex_new();
- _thread_test_strmap = strmap_new();
+ thread_test_mutex_ = tor_mutex_new();
+ thread_test_start1_ = tor_mutex_new();
+ thread_test_start2_ = tor_mutex_new();
+ thread_test_strmap_ = strmap_new();
s1 = tor_strdup("thread 1");
s2 = tor_strdup("thread 2");
- tor_mutex_acquire(_thread_test_start1);
- tor_mutex_acquire(_thread_test_start2);
- spawn_func(_thread_test_func, s1);
- spawn_func(_thread_test_func, s2);
- tor_mutex_release(_thread_test_start2);
- tor_mutex_release(_thread_test_start1);
+ tor_mutex_acquire(thread_test_start1_);
+ tor_mutex_acquire(thread_test_start2_);
+ spawn_func(thread_test_func_, s1);
+ spawn_func(thread_test_func_, s2);
+ tor_mutex_release(thread_test_start2_);
+ tor_mutex_release(thread_test_start1_);
started = time(NULL);
while (!done) {
- tor_mutex_acquire(_thread_test_mutex);
- strmap_assert_ok(_thread_test_strmap);
- if (strmap_get(_thread_test_strmap, "thread 1") &&
- strmap_get(_thread_test_strmap, "thread 2")) {
+ tor_mutex_acquire(thread_test_mutex_);
+ strmap_assert_ok(thread_test_strmap_);
+ if (strmap_get(thread_test_strmap_, "thread 1") &&
+ strmap_get(thread_test_strmap_, "thread 2")) {
done = 1;
} else if (time(NULL) > started + 150) {
timedout = done = 1;
}
- tor_mutex_release(_thread_test_mutex);
+ tor_mutex_release(thread_test_mutex_);
#ifndef _WIN32
/* Prevent the main thread from starving the worker threads. */
select(0, NULL, NULL, NULL, &tv);
#endif
}
- tor_mutex_acquire(_thread_test_start1);
- tor_mutex_release(_thread_test_start1);
- tor_mutex_acquire(_thread_test_start2);
- tor_mutex_release(_thread_test_start2);
+ tor_mutex_acquire(thread_test_start1_);
+ tor_mutex_release(thread_test_start1_);
+ tor_mutex_acquire(thread_test_start2_);
+ tor_mutex_release(thread_test_start2_);
- tor_mutex_free(_thread_test_mutex);
+ tor_mutex_free(thread_test_mutex_);
if (timedout) {
printf("\nTimed out: %d %d", t1_count, t2_count);
- test_assert(strmap_get(_thread_test_strmap, "thread 1"));
- test_assert(strmap_get(_thread_test_strmap, "thread 2"));
+ test_assert(strmap_get(thread_test_strmap_, "thread 1"));
+ test_assert(strmap_get(thread_test_strmap_, "thread 2"));
test_assert(!timedout);
}
/* different thread IDs. */
- test_assert(strcmp(strmap_get(_thread_test_strmap, "thread 1"),
- strmap_get(_thread_test_strmap, "thread 2")));
- test_assert(!strcmp(strmap_get(_thread_test_strmap, "thread 1"),
- strmap_get(_thread_test_strmap, "last to run")) ||
- !strcmp(strmap_get(_thread_test_strmap, "thread 2"),
- strmap_get(_thread_test_strmap, "last to run")));
+ test_assert(strcmp(strmap_get(thread_test_strmap_, "thread 1"),
+ strmap_get(thread_test_strmap_, "thread 2")));
+ test_assert(!strcmp(strmap_get(thread_test_strmap_, "thread 1"),
+ strmap_get(thread_test_strmap_, "last to run")) ||
+ !strcmp(strmap_get(thread_test_strmap_, "thread 2"),
+ strmap_get(thread_test_strmap_, "last to run")));
done:
tor_free(s1);
tor_free(s2);
- tor_free(_thread1_name);
- tor_free(_thread2_name);
- if (_thread_test_strmap)
- strmap_free(_thread_test_strmap, NULL);
- if (_thread_test_start1)
- tor_mutex_free(_thread_test_start1);
- if (_thread_test_start2)
- tor_mutex_free(_thread_test_start2);
+ tor_free(thread1_name_);
+ tor_free(thread2_name_);
+ if (thread_test_strmap_)
+ strmap_free(thread_test_strmap_, NULL);
+ if (thread_test_start1_)
+ tor_mutex_free(thread_test_start1_);
+ if (thread_test_start2_)
+ tor_mutex_free(thread_test_start2_);
}
/** Run unit tests for compression functions */
@@ -1402,21 +1583,21 @@ test_util_mmap(void)
test_eq(mapping->size, strlen("Short file."));
test_streq(mapping->data, "Short file.");
#ifdef _WIN32
- tor_munmap_file(mapping);
+ tt_int_op(0, ==, tor_munmap_file(mapping));
mapping = NULL;
test_assert(unlink(fname1) == 0);
#else
/* make sure we can unlink. */
test_assert(unlink(fname1) == 0);
test_streq(mapping->data, "Short file.");
- tor_munmap_file(mapping);
+ tt_int_op(0, ==, tor_munmap_file(mapping));
mapping = NULL;
#endif
/* Now a zero-length file. */
write_str_to_file(fname1, "", 1);
mapping = tor_mmap_file(fname1);
- test_eq(mapping, NULL);
+ test_eq_ptr(mapping, NULL);
test_eq(ERANGE, errno);
unlink(fname1);
@@ -1430,7 +1611,7 @@ test_util_mmap(void)
test_assert(mapping);
test_eq(mapping->size, buflen);
test_memeq(mapping->data, buf, buflen);
- tor_munmap_file(mapping);
+ tt_int_op(0, ==, tor_munmap_file(mapping));
mapping = NULL;
/* Now try a big aligned file. */
@@ -1439,7 +1620,7 @@ test_util_mmap(void)
test_assert(mapping);
test_eq(mapping->size, 16384);
test_memeq(mapping->data, buf, 16384);
- tor_munmap_file(mapping);
+ tt_int_op(0, ==, tor_munmap_file(mapping));
mapping = NULL;
done:
@@ -1452,8 +1633,7 @@ test_util_mmap(void)
tor_free(fname3);
tor_free(buf);
- if (mapping)
- tor_munmap_file(mapping);
+ tor_munmap_file(mapping);
}
/** Run unit tests for escaping/unescaping data for use by controllers. */
@@ -1474,12 +1654,28 @@ test_util_control_formats(void)
tor_free(out);
}
+#define test_feq(value1,value2) do { \
+ double v1 = (value1), v2=(value2); \
+ double tf_diff = v1-v2; \
+ double tf_tolerance = ((v1+v2)/2.0)/1e8; \
+ if (tf_diff<0) tf_diff=-tf_diff; \
+ if (tf_tolerance<0) tf_tolerance=-tf_tolerance; \
+ if (tf_diff<tf_tolerance) { \
+ TT_BLATHER(("%s ~~ %s: %f ~~ %f",#value1,#value2,v1,v2)); \
+ } else { \
+ TT_FAIL(("%s ~~ %s: %f != %f",#value1,#value2,v1,v2)); \
+ } \
+ } while (0)
+
static void
test_util_sscanf(void)
{
unsigned u1, u2, u3;
char s1[20], s2[10], s3[10], ch;
int r;
+ long lng1,lng2;
+ int int1, int2;
+ double d1,d2,d3,d4;
/* Simple tests (malformed patterns, literal matching, ...) */
test_eq(-1, tor_sscanf("123", "%i", &r)); /* %i is not supported */
@@ -1608,6 +1804,65 @@ test_util_sscanf(void)
test_eq(4, tor_sscanf("1.2.3 foobar", "%u.%u.%u%c", &u1, &u2, &u3, &ch));
test_eq(' ', ch);
+ r = tor_sscanf("12345 -67890 -1", "%d %ld %d", &int1, &lng1, &int2);
+ test_eq(r,3);
+ test_eq(int1, 12345);
+ test_eq(lng1, -67890);
+ test_eq(int2, -1);
+
+#if SIZEOF_INT == 4
+ r = tor_sscanf("-2147483648. 2147483647.", "%d. %d.", &int1, &int2);
+ test_eq(r,2);
+ test_eq(int1, -2147483647-1);
+ test_eq(int2, 2147483647);
+
+ r = tor_sscanf("-2147483679.", "%d.", &int1);
+ test_eq(r,0);
+
+ r = tor_sscanf("2147483678.", "%d.", &int1);
+ test_eq(r,0);
+#elif SIZEOF_INT == 8
+ r = tor_sscanf("-9223372036854775808. 9223372036854775807.",
+ "%d. %d.", &int1, &int2);
+ test_eq(r,2);
+ test_eq(int1, -9223372036854775807-1);
+ test_eq(int2, 9223372036854775807);
+
+ r = tor_sscanf("-9223372036854775809.", "%d.", &int1);
+ test_eq(r,0);
+
+ r = tor_sscanf("9223372036854775808.", "%d.", &int1);
+ test_eq(r,0);
+#endif
+
+#if SIZEOF_LONG == 4
+ r = tor_sscanf("-2147483648. 2147483647.", "%ld. %ld.", &lng1, &lng2);
+ test_eq(r,2);
+ test_eq(lng1, -2147483647 - 1);
+ test_eq(lng2, 2147483647);
+#elif SIZEOF_LONG == 8
+ r = tor_sscanf("-9223372036854775808. 9223372036854775807.",
+ "%ld. %ld.", &lng1, &lng2);
+ test_eq(r,2);
+ test_eq(lng1, -9223372036854775807L - 1);
+ test_eq(lng2, 9223372036854775807L);
+
+ r = tor_sscanf("-9223372036854775808. 9223372036854775808.",
+ "%ld. %ld.", &lng1, &lng2);
+ test_eq(r,1);
+ r = tor_sscanf("-9223372036854775809. 9223372036854775808.",
+ "%ld. %ld.", &lng1, &lng2);
+ test_eq(r,0);
+#endif
+
+ r = tor_sscanf("123.456 .000007 -900123123.2000787 00003.2",
+ "%lf %lf %lf %lf", &d1,&d2,&d3,&d4);
+ test_eq(r,4);
+ test_feq(d1, 123.456);
+ test_feq(d2, .000007);
+ test_feq(d3, -900123123.2000787);
+ test_feq(d4, 3.2);
+
done:
;
}
@@ -1646,6 +1901,8 @@ test_util_path_is_relative(void)
;
}
+#ifdef ENABLE_MEMPOOLS
+
/** Run unittests for memory pool allocator */
static void
test_util_mempool(void)
@@ -1704,6 +1961,8 @@ test_util_mempool(void)
mp_pool_destroy(pool);
}
+#endif /* ENABLE_MEMPOOLS */
+
/** Run unittests for memory area allocator */
static void
test_util_memarea(void)
@@ -1735,7 +1994,7 @@ test_util_memarea(void)
/* Make sure we don't overalign. */
p1 = memarea_alloc(area, 1);
p2 = memarea_alloc(area, 1);
- test_eq(p1+sizeof(void*), p2);
+ test_eq_ptr(p1+sizeof(void*), p2);
{
malloced_ptr = tor_malloc(64);
test_assert(!memarea_owns_ptr(area, malloced_ptr));
@@ -1780,7 +2039,7 @@ test_util_memarea(void)
memarea_clear(area);
p1 = memarea_alloc(area, 1);
- test_eq(p1, p1_orig);
+ test_eq_ptr(p1, p1_orig);
memarea_clear(area);
/* Check for running over an area's size. */
@@ -1988,18 +2247,21 @@ test_util_asprintf(void *ptr)
test_assert(cp);
test_streq("simple string 100% safe", cp);
test_eq(strlen(cp), r);
+ tor_free(cp);
/* empty string */
r = tor_asprintf(&cp, "%s", "");
test_assert(cp);
test_streq("", cp);
test_eq(strlen(cp), r);
+ tor_free(cp);
/* numbers (%i) */
r = tor_asprintf(&cp, "I like numbers-%2i, %i, etc.", -1, 2);
test_assert(cp);
test_streq("I like numbers--1, 2, etc.", cp);
test_eq(strlen(cp), r);
+ /* don't free cp; next test uses it. */
/* numbers (%d) */
r = tor_asprintf(&cp2, "First=%d, Second=%d", 101, 202);
@@ -2061,17 +2323,19 @@ test_util_listdir(void *ptr)
dir_contents = tor_listdir(dirname);
test_assert(dir_contents);
/* make sure that each filename is listed. */
- test_assert(smartlist_string_isin_case(dir_contents, "hopscotch"));
- test_assert(smartlist_string_isin_case(dir_contents, "mumblety-peg"));
- test_assert(smartlist_string_isin_case(dir_contents, ".hidden-file"));
- test_assert(smartlist_string_isin_case(dir_contents, "some-directory"));
+ test_assert(smartlist_contains_string_case(dir_contents, "hopscotch"));
+ test_assert(smartlist_contains_string_case(dir_contents, "mumblety-peg"));
+ test_assert(smartlist_contains_string_case(dir_contents, ".hidden-file"));
+ test_assert(smartlist_contains_string_case(dir_contents, "some-directory"));
- test_assert(!smartlist_string_isin(dir_contents, "."));
- test_assert(!smartlist_string_isin(dir_contents, ".."));
+ test_assert(!smartlist_contains_string(dir_contents, "."));
+ test_assert(!smartlist_contains_string(dir_contents, ".."));
done:
tor_free(fname1);
tor_free(fname2);
+ tor_free(fname3);
+ tor_free(dir1);
tor_free(dirname);
if (dir_contents) {
SMARTLIST_FOREACH(dir_contents, char *, cp, tor_free(cp));
@@ -2136,10 +2400,11 @@ test_util_load_win_lib(void *ptr)
tt_assert(h);
done:
if (h)
- CloseHandle(h);
+ FreeLibrary(h);
}
#endif
+#ifndef _WIN32
static void
clear_hex_errno(char *hex_errno)
{
@@ -2169,6 +2434,7 @@ test_util_exit_status(void *ptr)
n = format_helper_exit_status(0xFF, -0x80000000, hex_errno);
test_streq("FF/-80000000\n", hex_errno);
test_eq(n, strlen(hex_errno));
+ test_eq(n, HEX_ERRNO_SIZE);
clear_hex_errno(hex_errno);
n = format_helper_exit_status(0x7F, 0, hex_errno);
@@ -2183,6 +2449,7 @@ test_util_exit_status(void *ptr)
done:
;
}
+#endif
#ifndef _WIN32
/** Check that fgets waits until a full line, and not return a partial line, on
@@ -2484,14 +2751,14 @@ test_util_spawn_background_partial_read(void *ptr)
}
/**
- * Test for format_hex_number_for_helper_exit_status()
+ * Test for format_hex_number_sigsafe()
*/
static void
test_util_format_hex_number(void *ptr)
{
int i, len;
- char buf[HEX_ERRNO_SIZE + 1];
+ char buf[33];
const struct {
const char *str;
unsigned int x;
@@ -2500,6 +2767,8 @@ test_util_format_hex_number(void *ptr)
{"1", 1},
{"273A", 0x273a},
{"FFFF", 0xffff},
+ {"7FFFFFFF", 0x7fffffff},
+ {"FFFFFFFF", 0xffffffff},
#if UINT_MAX >= 0xffffffff
{"31BC421D", 0x31bc421d},
{"FFFFFFFF", 0xffffffff},
@@ -2510,19 +2779,73 @@ test_util_format_hex_number(void *ptr)
(void)ptr;
for (i = 0; test_data[i].str != NULL; ++i) {
- len = format_hex_number_for_helper_exit_status(test_data[i].x,
- buf, HEX_ERRNO_SIZE);
+ len = format_hex_number_sigsafe(test_data[i].x, buf, sizeof(buf));
test_neq(len, 0);
- buf[len] = '\0';
+ test_eq(len, strlen(buf));
test_streq(buf, test_data[i].str);
}
+ test_eq(4, format_hex_number_sigsafe(0xffff, buf, 5));
+ test_streq(buf, "FFFF");
+ test_eq(0, format_hex_number_sigsafe(0xffff, buf, 4));
+ test_eq(0, format_hex_number_sigsafe(0, buf, 1));
+
done:
return;
}
/**
- * Test that we can properly format q Windows command line
+ * Test for format_hex_number_sigsafe()
+ */
+
+static void
+test_util_format_dec_number(void *ptr)
+{
+ int i, len;
+ char buf[33];
+ const struct {
+ const char *str;
+ unsigned int x;
+ } test_data[] = {
+ {"0", 0},
+ {"1", 1},
+ {"1234", 1234},
+ {"12345678", 12345678},
+ {"99999999", 99999999},
+ {"100000000", 100000000},
+ {"4294967295", 4294967295u},
+#if UINT_MAX > 0xffffffff
+ {"18446744073709551615", 18446744073709551615u },
+#endif
+ {NULL, 0}
+ };
+
+ (void)ptr;
+
+ for (i = 0; test_data[i].str != NULL; ++i) {
+ len = format_dec_number_sigsafe(test_data[i].x, buf, sizeof(buf));
+ test_neq(len, 0);
+ test_eq(len, strlen(buf));
+ test_streq(buf, test_data[i].str);
+
+ len = format_dec_number_sigsafe(test_data[i].x, buf,
+ (int)(strlen(test_data[i].str) + 1));
+ test_eq(len, strlen(buf));
+ test_streq(buf, test_data[i].str);
+ }
+
+ test_eq(4, format_dec_number_sigsafe(7331, buf, 5));
+ test_streq(buf, "7331");
+ test_eq(0, format_dec_number_sigsafe(7331, buf, 4));
+ test_eq(1, format_dec_number_sigsafe(0, buf, 2));
+ test_eq(0, format_dec_number_sigsafe(0, buf, 1));
+
+ done:
+ return;
+}
+
+/**
+ * Test that we can properly format a Windows command line
*/
static void
test_util_join_win_cmdline(void *ptr)
@@ -2557,7 +2880,7 @@ test_util_join_win_cmdline(void *ptr)
};
int i;
- char *joined_argv;
+ char *joined_argv = NULL;
(void)ptr;
@@ -2569,7 +2892,7 @@ test_util_join_win_cmdline(void *ptr)
}
done:
- ;
+ tor_free(joined_argv);
}
#define MAX_SPLIT_LINE_COUNT 4
@@ -2689,6 +3012,16 @@ test_util_di_ops(void)
test_eq(neq1, !eq1);
}
+ tt_int_op(1, ==, safe_mem_is_zero("", 0));
+ tt_int_op(1, ==, safe_mem_is_zero("", 1));
+ tt_int_op(0, ==, safe_mem_is_zero("a", 1));
+ tt_int_op(0, ==, safe_mem_is_zero("a", 2));
+ tt_int_op(0, ==, safe_mem_is_zero("\0a", 2));
+ tt_int_op(1, ==, safe_mem_is_zero("\0\0a", 2));
+ tt_int_op(1, ==, safe_mem_is_zero("\0\0\0\0\0\0\0\0", 8));
+ tt_int_op(1, ==, safe_mem_is_zero("\0\0\0\0\0\0\0\0a", 8));
+ tt_int_op(0, ==, safe_mem_is_zero("\0\0\0\0\0\0\0\0a", 9));
+
done:
;
}
@@ -2723,7 +3056,7 @@ test_util_eat_whitespace(void *ptr)
(void)ptr;
/* Try one leading ws */
- strcpy(str, "fuubaar");
+ strlcpy(str, "fuubaar", sizeof(str));
for (i = 0; i < sizeof(ws); ++i) {
str[0] = ws[i];
test_eq_ptr(str + 1, eat_whitespace(str));
@@ -2738,14 +3071,14 @@ test_util_eat_whitespace(void *ptr)
test_eq_ptr(str, eat_whitespace_eos_no_nl(str, str + strlen(str)));
/* Empty string */
- strcpy(str, "");
+ strlcpy(str, "", sizeof(str));
test_eq_ptr(str, eat_whitespace(str));
test_eq_ptr(str, eat_whitespace_eos(str, str));
test_eq_ptr(str, eat_whitespace_no_nl(str));
test_eq_ptr(str, eat_whitespace_eos_no_nl(str, str));
/* Only ws */
- strcpy(str, " \t\r\n");
+ strlcpy(str, " \t\r\n", sizeof(str));
test_eq_ptr(str + strlen(str), eat_whitespace(str));
test_eq_ptr(str + strlen(str), eat_whitespace_eos(str, str + strlen(str)));
test_eq_ptr(str + strlen(str) - 1,
@@ -2753,7 +3086,7 @@ test_util_eat_whitespace(void *ptr)
test_eq_ptr(str + strlen(str) - 1,
eat_whitespace_eos_no_nl(str, str + strlen(str)));
- strcpy(str, " \t\r ");
+ strlcpy(str, " \t\r ", sizeof(str));
test_eq_ptr(str + strlen(str), eat_whitespace(str));
test_eq_ptr(str + strlen(str),
eat_whitespace_eos(str, str + strlen(str)));
@@ -2762,7 +3095,7 @@ test_util_eat_whitespace(void *ptr)
eat_whitespace_eos_no_nl(str, str + strlen(str)));
/* Multiple ws */
- strcpy(str, "fuubaar");
+ strlcpy(str, "fuubaar", sizeof(str));
for (i = 0; i < sizeof(ws); ++i)
str[i] = ws[i];
test_eq_ptr(str + sizeof(ws), eat_whitespace(str));
@@ -2772,28 +3105,28 @@ test_util_eat_whitespace(void *ptr)
eat_whitespace_eos_no_nl(str, str + strlen(str)));
/* Eat comment */
- strcpy(str, "# Comment \n No Comment");
+ strlcpy(str, "# Comment \n No Comment", sizeof(str));
test_streq("No Comment", eat_whitespace(str));
test_streq("No Comment", eat_whitespace_eos(str, str + strlen(str)));
test_eq_ptr(str, eat_whitespace_no_nl(str));
test_eq_ptr(str, eat_whitespace_eos_no_nl(str, str + strlen(str)));
/* Eat comment & ws mix */
- strcpy(str, " # \t Comment \n\t\nNo Comment");
+ strlcpy(str, " # \t Comment \n\t\nNo Comment", sizeof(str));
test_streq("No Comment", eat_whitespace(str));
test_streq("No Comment", eat_whitespace_eos(str, str + strlen(str)));
test_eq_ptr(str + 1, eat_whitespace_no_nl(str));
test_eq_ptr(str + 1, eat_whitespace_eos_no_nl(str, str + strlen(str)));
/* Eat entire comment */
- strcpy(str, "#Comment");
+ strlcpy(str, "#Comment", sizeof(str));
test_eq_ptr(str + strlen(str), eat_whitespace(str));
test_eq_ptr(str + strlen(str), eat_whitespace_eos(str, str + strlen(str)));
test_eq_ptr(str, eat_whitespace_no_nl(str));
test_eq_ptr(str, eat_whitespace_eos_no_nl(str, str + strlen(str)));
/* Blank line, then comment */
- strcpy(str, " \t\n # Comment");
+ strlcpy(str, " \t\n # Comment", sizeof(str));
test_eq_ptr(str + strlen(str), eat_whitespace(str));
test_eq_ptr(str + strlen(str), eat_whitespace_eos(str, str + strlen(str)));
test_eq_ptr(str + 2, eat_whitespace_no_nl(str));
@@ -2819,6 +3152,8 @@ smartlist_new_from_text_lines(const char *lines)
last_line = smartlist_pop_last(sl);
if (last_line != NULL && *last_line != '\0') {
smartlist_add(sl, last_line);
+ } else {
+ tor_free(last_line);
}
return sl;
@@ -3044,7 +3379,7 @@ test_util_set_env_var_in_sl(void *ptr)
SMARTLIST_FOREACH(new_env_vars, char *, env_var,
set_environment_variable_in_smartlist(merged_env_vars,
env_var,
- _tor_free,
+ tor_free_,
1));
smartlist_sort_strings(merged_env_vars);
@@ -3076,12 +3411,246 @@ test_util_set_env_var_in_sl(void *ptr)
smartlist_free(expected_resulting_env_vars);
}
+static void
+test_util_weak_random(void *arg)
+{
+ int i, j, n[16];
+ tor_weak_rng_t rng;
+ (void) arg;
+
+ tor_init_weak_random(&rng, (unsigned)time(NULL));
+
+ for (i = 1; i <= 256; ++i) {
+ for (j=0;j<100;++j) {
+ int r = tor_weak_random_range(&rng, i);
+ tt_int_op(0, <=, r);
+ tt_int_op(r, <, i);
+ }
+ }
+
+ memset(n,0,sizeof(n));
+ for (j=0;j<8192;++j) {
+ n[tor_weak_random_range(&rng, 16)]++;
+ }
+
+ for (i=0;i<16;++i)
+ tt_int_op(n[i], >, 0);
+ done:
+ ;
+}
+
+static void
+test_util_mathlog(void *arg)
+{
+ double d;
+ (void) arg;
+
+ d = tor_mathlog(2.718281828);
+ tt_double_op(fabs(d - 1.0), <, .000001);
+ d = tor_mathlog(10);
+ tt_double_op(fabs(d - 2.30258509), <, .000001);
+ done:
+ ;
+}
+
+static void
+test_util_round_to_next_multiple_of(void *arg)
+{
+ (void)arg;
+
+ test_assert(round_uint64_to_next_multiple_of(0,1) == 0);
+ test_assert(round_uint64_to_next_multiple_of(0,7) == 0);
+
+ test_assert(round_uint64_to_next_multiple_of(99,1) == 99);
+ test_assert(round_uint64_to_next_multiple_of(99,7) == 105);
+ test_assert(round_uint64_to_next_multiple_of(99,9) == 99);
+
+ done:
+ ;
+}
+
+static void
+test_util_strclear(void *arg)
+{
+ static const char *vals[] = { "", "a", "abcdef", "abcdefgh", NULL };
+ int i;
+ char *v = NULL;
+ (void)arg;
+
+ for (i = 0; vals[i]; ++i) {
+ size_t n;
+ v = tor_strdup(vals[i]);
+ n = strlen(v);
+ tor_strclear(v);
+ tt_assert(tor_mem_is_zero(v, n+1));
+ tor_free(v);
+ }
+ done:
+ tor_free(v);
+}
+
#define UTIL_LEGACY(name) \
{ #name, legacy_test_helper, 0, &legacy_setup, test_util_ ## name }
#define UTIL_TEST(name, flags) \
{ #name, test_util_ ## name, flags, NULL, NULL }
+#ifdef FD_CLOEXEC
+#define CAN_CHECK_CLOEXEC
+static int
+fd_is_cloexec(tor_socket_t fd)
+{
+ int flags = fcntl(fd, F_GETFD, 0);
+ return (flags & FD_CLOEXEC) == FD_CLOEXEC;
+}
+#endif
+
+#ifndef _WIN32
+#define CAN_CHECK_NONBLOCK
+static int
+fd_is_nonblocking(tor_socket_t fd)
+{
+ int flags = fcntl(fd, F_GETFL, 0);
+ return (flags & O_NONBLOCK) == O_NONBLOCK;
+}
+#endif
+
+static void
+test_util_socket(void *arg)
+{
+ tor_socket_t fd1 = TOR_INVALID_SOCKET;
+ tor_socket_t fd2 = TOR_INVALID_SOCKET;
+ tor_socket_t fd3 = TOR_INVALID_SOCKET;
+ tor_socket_t fd4 = TOR_INVALID_SOCKET;
+ int n = get_n_open_sockets();
+
+ TT_BLATHER(("Starting with %d open sockets.", n));
+
+ (void)arg;
+
+ fd1 = tor_open_socket_with_extensions(AF_INET, SOCK_STREAM, 0, 0, 0);
+ fd2 = tor_open_socket_with_extensions(AF_INET, SOCK_STREAM, 0, 0, 1);
+ tt_assert(SOCKET_OK(fd1));
+ tt_assert(SOCKET_OK(fd2));
+ tt_int_op(get_n_open_sockets(), ==, n + 2);
+ //fd3 = tor_open_socket_with_extensions(AF_INET, SOCK_STREAM, 0, 1, 0);
+ //fd4 = tor_open_socket_with_extensions(AF_INET, SOCK_STREAM, 0, 1, 1);
+ fd3 = tor_open_socket(AF_INET, SOCK_STREAM, 0);
+ fd4 = tor_open_socket_nonblocking(AF_INET, SOCK_STREAM, 0);
+ tt_assert(SOCKET_OK(fd3));
+ tt_assert(SOCKET_OK(fd4));
+ tt_int_op(get_n_open_sockets(), ==, n + 4);
+
+#ifdef CAN_CHECK_CLOEXEC
+ tt_int_op(fd_is_cloexec(fd1), ==, 0);
+ tt_int_op(fd_is_cloexec(fd2), ==, 0);
+ tt_int_op(fd_is_cloexec(fd3), ==, 1);
+ tt_int_op(fd_is_cloexec(fd4), ==, 1);
+#endif
+#ifdef CAN_CHECK_NONBLOCK
+ tt_int_op(fd_is_nonblocking(fd1), ==, 0);
+ tt_int_op(fd_is_nonblocking(fd2), ==, 1);
+ tt_int_op(fd_is_nonblocking(fd3), ==, 0);
+ tt_int_op(fd_is_nonblocking(fd4), ==, 1);
+#endif
+
+ tor_close_socket(fd1);
+ tor_close_socket(fd2);
+ fd1 = fd2 = TOR_INVALID_SOCKET;
+ tt_int_op(get_n_open_sockets(), ==, n + 2);
+ tor_close_socket(fd3);
+ tor_close_socket(fd4);
+ fd3 = fd4 = TOR_INVALID_SOCKET;
+ tt_int_op(get_n_open_sockets(), ==, n);
+
+ done:
+ if (SOCKET_OK(fd1))
+ tor_close_socket(fd1);
+ if (SOCKET_OK(fd2))
+ tor_close_socket(fd2);
+ if (SOCKET_OK(fd3))
+ tor_close_socket(fd3);
+ if (SOCKET_OK(fd4))
+ tor_close_socket(fd4);
+}
+
+static void *
+socketpair_test_setup(const struct testcase_t *testcase)
+{
+ return testcase->setup_data;
+}
+static int
+socketpair_test_cleanup(const struct testcase_t *testcase, void *ptr)
+{
+ (void)testcase;
+ (void)ptr;
+ return 1;
+}
+
+static const struct testcase_setup_t socketpair_setup = {
+ socketpair_test_setup, socketpair_test_cleanup
+};
+
+/* Test for socketpair and ersatz_socketpair(). We test them both, since
+ * the latter is a tolerably good way to exersize tor_accept_socket(). */
+static void
+test_util_socketpair(void *arg)
+{
+ const int ersatz = !strcmp(arg, "1");
+ int (*const tor_socketpair_fn)(int, int, int, tor_socket_t[2]) =
+ ersatz ? tor_ersatz_socketpair : tor_socketpair;
+ int n = get_n_open_sockets();
+ tor_socket_t fds[2] = {TOR_INVALID_SOCKET, TOR_INVALID_SOCKET};
+ const int family = AF_UNIX;
+
+ tt_int_op(0, ==, tor_socketpair_fn(family, SOCK_STREAM, 0, fds));
+ tt_assert(SOCKET_OK(fds[0]));
+ tt_assert(SOCKET_OK(fds[1]));
+ tt_int_op(get_n_open_sockets(), ==, n + 2);
+#ifdef CAN_CHECK_CLOEXEC
+ tt_int_op(fd_is_cloexec(fds[0]), ==, 1);
+ tt_int_op(fd_is_cloexec(fds[1]), ==, 1);
+#endif
+#ifdef CAN_CHECK_NONBLOCK
+ tt_int_op(fd_is_nonblocking(fds[0]), ==, 0);
+ tt_int_op(fd_is_nonblocking(fds[1]), ==, 0);
+#endif
+
+ done:
+ if (SOCKET_OK(fds[0]))
+ tor_close_socket(fds[0]);
+ if (SOCKET_OK(fds[1]))
+ tor_close_socket(fds[1]);
+}
+
+static void
+test_util_max_mem(void *arg)
+{
+ size_t memory1, memory2;
+ int r, r2;
+ (void) arg;
+
+ r = get_total_system_memory(&memory1);
+ r2 = get_total_system_memory(&memory2);
+ tt_int_op(r, ==, r2);
+ tt_uint_op(memory2, ==, memory1);
+
+ TT_BLATHER(("System memory: "U64_FORMAT, U64_PRINTF_ARG(memory1)));
+
+ if (r==0) {
+ /* You have at least a megabyte. */
+ tt_uint_op(memory1, >, (1<<20));
+ } else {
+ /* You do not have a petabyte. */
+#if SIZEOF_SIZE_T == SIZEOF_UINT64_T
+ tt_uint_op(memory1, <, (U64_LITERAL(1)<<50));
+#endif
+ }
+
+ done:
+ ;
+}
+
struct testcase_t util_tests[] = {
UTIL_LEGACY(time),
UTIL_TEST(parse_http_time, 0),
@@ -3092,11 +3661,15 @@ struct testcase_t util_tests[] = {
#ifndef _WIN32
UTIL_LEGACY(expand_filename),
#endif
+ UTIL_LEGACY(escape_string_socks),
+ UTIL_LEGACY(string_is_key_value),
UTIL_LEGACY(strmisc),
UTIL_LEGACY(pow2),
UTIL_LEGACY(gzip),
UTIL_LEGACY(datadir),
+#ifdef ENABLE_MEMPOOLS
UTIL_LEGACY(mempool),
+#endif
UTIL_LEGACY(memarea),
UTIL_LEGACY(control_formats),
UTIL_LEGACY(mmap),
@@ -3105,6 +3678,8 @@ struct testcase_t util_tests[] = {
UTIL_LEGACY(path_is_relative),
UTIL_LEGACY(strtok),
UTIL_LEGACY(di_ops),
+ UTIL_TEST(round_to_next_multiple_of, 0),
+ UTIL_TEST(strclear, 0),
UTIL_TEST(find_str_at_start_of_line, 0),
UTIL_TEST(string_is_C_identifier, 0),
UTIL_TEST(asprintf, 0),
@@ -3113,14 +3688,15 @@ struct testcase_t util_tests[] = {
#ifdef _WIN32
UTIL_TEST(load_win_lib, 0),
#endif
- UTIL_TEST(exit_status, 0),
#ifndef _WIN32
+ UTIL_TEST(exit_status, 0),
UTIL_TEST(fgets_eagain, TT_SKIP),
#endif
UTIL_TEST(spawn_background_ok, 0),
UTIL_TEST(spawn_background_fail, 0),
UTIL_TEST(spawn_background_partial_read, 0),
UTIL_TEST(format_hex_number, 0),
+ UTIL_TEST(format_dec_number, 0),
UTIL_TEST(join_win_cmdline, 0),
UTIL_TEST(split_lines, 0),
UTIL_TEST(n_bits_set, 0),
@@ -3129,6 +3705,18 @@ struct testcase_t util_tests[] = {
UTIL_TEST(envnames, 0),
UTIL_TEST(make_environment, 0),
UTIL_TEST(set_env_var_in_sl, 0),
+ UTIL_TEST(read_file_eof_tiny_limit, 0),
+ UTIL_TEST(read_file_eof_two_loops, 0),
+ UTIL_TEST(read_file_eof_zero_bytes, 0),
+ UTIL_TEST(write_chunks_to_file, 0),
+ UTIL_TEST(mathlog, 0),
+ UTIL_TEST(weak_random, 0),
+ UTIL_TEST(socket, TT_FORK),
+ { "socketpair", test_util_socketpair, TT_FORK, &socketpair_setup,
+ (void*)"0" },
+ { "socketpair_ersatz", test_util_socketpair, TT_FORK,
+ &socketpair_setup, (void*)"1" },
+ UTIL_TEST(max_mem, 0),
END_OF_TESTCASES
};
diff --git a/src/tools/Makefile.am b/src/tools/Makefile.am
deleted file mode 100644
index 35b0a41f5..000000000
--- a/src/tools/Makefile.am
+++ /dev/null
@@ -1,22 +0,0 @@
-bin_PROGRAMS = tor-resolve tor-gencert
-noinst_PROGRAMS = tor-checkkey
-
-tor_resolve_SOURCES = tor-resolve.c
-tor_resolve_LDFLAGS =
-tor_resolve_LDADD = ../common/libor.a @TOR_LIB_MATH@ @TOR_LIB_WS32@
-
-tor_gencert_SOURCES = tor-gencert.c
-tor_gencert_LDFLAGS = @TOR_LDFLAGS_zlib@ @TOR_LDFLAGS_openssl@
-tor_gencert_LDADD = ../common/libor.a ../common/libor-crypto.a \
- @TOR_LIB_MATH@ @TOR_ZLIB_LIBS@ @TOR_OPENSSL_LIBS@ \
- @TOR_LIB_WS32@ @TOR_LIB_GDI@
-
-tor_checkkey_SOURCES = tor-checkkey.c
-tor_checkkey_LDFLAGS = @TOR_LDFLAGS_zlib@ @TOR_LDFLAGS_openssl@
-tor_checkkey_LDADD = ../common/libor.a ../common/libor-crypto.a \
- @TOR_LIB_MATH@ @TOR_ZLIB_LIBS@ @TOR_OPENSSL_LIBS@ \
- @TOR_LIB_WS32@ @TOR_LIB_GDI@
-
-SUBDIRS = tor-fw-helper
-DIST_SUBDIRS = tor-fw-helper
-
diff --git a/src/tools/Makefile.nmake b/src/tools/Makefile.nmake
index a30a28b2e..fda1990e0 100644
--- a/src/tools/Makefile.nmake
+++ b/src/tools/Makefile.nmake
@@ -6,8 +6,8 @@ LIBS = ..\..\..\build-alpha\lib\libevent.lib \
..\..\..\build-alpha\lib\libcrypto.lib \
..\..\..\build-alpha\lib\libssl.lib \
..\..\..\build-alpha\lib\libz.lib \
- ws2_32.lib advapi32.lib shell32.lib
-
+ ws2_32.lib advapi32.lib shell32.lib \
+ crypt32.lib gdi32.lib user32.lib
tor-gencert.exe: tor-gencert.obj
$(CC) $(CFLAGS) $(LIBS) ..\common\*.lib tor-gencert.obj
diff --git a/src/tools/include.am b/src/tools/include.am
new file mode 100644
index 000000000..54b150a80
--- /dev/null
+++ b/src/tools/include.am
@@ -0,0 +1,24 @@
+bin_PROGRAMS+= src/tools/tor-resolve src/tools/tor-gencert
+noinst_PROGRAMS+= src/tools/tor-checkkey
+
+src_tools_tor_resolve_SOURCES = src/tools/tor-resolve.c
+src_tools_tor_resolve_LDFLAGS =
+src_tools_tor_resolve_LDADD = src/common/libor.a @TOR_LIB_MATH@ @TOR_LIB_WS32@
+
+src_tools_tor_gencert_SOURCES = src/tools/tor-gencert.c
+src_tools_tor_gencert_LDFLAGS = @TOR_LDFLAGS_zlib@ @TOR_LDFLAGS_openssl@
+src_tools_tor_gencert_LDADD = src/common/libor.a src/common/libor-crypto.a \
+ $(LIBDONNA) \
+ @TOR_LIB_MATH@ @TOR_ZLIB_LIBS@ @TOR_OPENSSL_LIBS@ \
+ @TOR_LIB_WS32@ @TOR_LIB_GDI@ @CURVE25519_LIBS@
+
+src_tools_tor_checkkey_SOURCES = src/tools/tor-checkkey.c
+src_tools_tor_checkkey_LDFLAGS = @TOR_LDFLAGS_zlib@ @TOR_LDFLAGS_openssl@
+src_tools_tor_checkkey_LDADD = src/common/libor.a src/common/libor-crypto.a \
+ $(LIBDONNA) \
+ @TOR_LIB_MATH@ @TOR_ZLIB_LIBS@ @TOR_OPENSSL_LIBS@ \
+ @TOR_LIB_WS32@ @TOR_LIB_GDI@ @CURVE25519_LIBS@
+
+include src/tools/tor-fw-helper/include.am
+
+
diff --git a/src/tools/tor-checkkey.c b/src/tools/tor-checkkey.c
index 10d13d837..d50f12ed2 100644
--- a/src/tools/tor-checkkey.c
+++ b/src/tools/tor-checkkey.c
@@ -1,8 +1,6 @@
-/* Copyright (c) 2008-2012, The Tor Project, Inc. */
+/* Copyright (c) 2008-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
-#define CRYPTO_PRIVATE
-
#include "orconfig.h"
#include <stdio.h>
@@ -71,7 +69,7 @@ main(int c, char **v)
return 1;
printf("%s\n",digest);
} else {
- rsa = _crypto_pk_get_rsa(env);
+ rsa = crypto_pk_get_rsa_(env);
str = BN_bn2hex(rsa->n);
printf("%s\n", str);
diff --git a/src/tools/tor-fw-helper/Makefile.am b/src/tools/tor-fw-helper/Makefile.am
deleted file mode 100644
index 393562db0..000000000
--- a/src/tools/tor-fw-helper/Makefile.am
+++ /dev/null
@@ -1,38 +0,0 @@
-if USE_FW_HELPER
-bin_PROGRAMS = tor-fw-helper
-else
-bin_PROGRAMS =
-endif
-
-tor_fw_helper_SOURCES = \
- tor-fw-helper.c \
- tor-fw-helper-natpmp.c \
- tor-fw-helper-upnp.c
-noinst_HEADERS = \
- tor-fw-helper.h \
- tor-fw-helper-natpmp.h \
- tor-fw-helper-upnp.h
-
-if NAT_PMP
-nat_pmp_ldflags = @TOR_LDFLAGS_libnatpmp@
-nat_pmp_ldadd = -lnatpmp @TOR_LIB_IPHLPAPI@
-nat_pmp_cppflags = @TOR_CPPFLAGS_libnatpmp@
-else
-nat_pmp_ldflags =
-nat_pmp_ldadd =
-nat_pmp_cppflags =
-endif
-
-if MINIUPNPC
-miniupnpc_ldflags = @TOR_LDFLAGS_libminiupnpc@
-miniupnpc_ldadd = -lminiupnpc -lm @TOR_LIB_IPHLPAPI@
-miniupnpc_cppflags = @TOR_CPPFLAGS_libminiupnpc@
-else
-miniupnpc_ldflags =
-miniupnpc_ldadd =
-miniupnpc_cppflags =
-endif
-
-tor_fw_helper_LDFLAGS = $(nat_pmp_ldflags) $(miniupnpc_ldflags)
-tor_fw_helper_LDADD = ../../common/libor.a $(nat_pmp_ldadd) $(miniupnpc_ldadd) @TOR_LIB_WS32@
-tor_fw_helper_CPPFLAGS = $(nat_pmp_cppflags) $(miniupnpc_cppflags)
diff --git a/src/tools/tor-fw-helper/include.am b/src/tools/tor-fw-helper/include.am
new file mode 100644
index 000000000..1f862e6f0
--- /dev/null
+++ b/src/tools/tor-fw-helper/include.am
@@ -0,0 +1,36 @@
+if USE_FW_HELPER
+bin_PROGRAMS+= src/tools/tor-fw-helper/tor-fw-helper
+endif
+
+src_tools_tor_fw_helper_tor_fw_helper_SOURCES = \
+ src/tools/tor-fw-helper/tor-fw-helper.c \
+ src/tools/tor-fw-helper/tor-fw-helper-natpmp.c \
+ src/tools/tor-fw-helper/tor-fw-helper-upnp.c
+noinst_HEADERS+= \
+ src/tools/tor-fw-helper/tor-fw-helper.h \
+ src/tools/tor-fw-helper/tor-fw-helper-natpmp.h \
+ src/tools/tor-fw-helper/tor-fw-helper-upnp.h
+
+if NAT_PMP
+nat_pmp_ldflags = @TOR_LDFLAGS_libnatpmp@
+nat_pmp_ldadd = -lnatpmp @TOR_LIB_IPHLPAPI@
+nat_pmp_cppflags = @TOR_CPPFLAGS_libnatpmp@
+else
+nat_pmp_ldflags =
+nat_pmp_ldadd =
+nat_pmp_cppflags =
+endif
+
+if MINIUPNPC
+miniupnpc_ldflags = @TOR_LDFLAGS_libminiupnpc@
+miniupnpc_ldadd = -lminiupnpc @TOR_LIB_IPHLPAPI@
+miniupnpc_cppflags = @TOR_CPPFLAGS_libminiupnpc@
+else
+miniupnpc_ldflags =
+miniupnpc_ldadd =
+miniupnpc_cppflags =
+endif
+
+src_tools_tor_fw_helper_tor_fw_helper_LDFLAGS = $(nat_pmp_ldflags) $(miniupnpc_ldflags)
+src_tools_tor_fw_helper_tor_fw_helper_LDADD = src/common/libor.a $(nat_pmp_ldadd) $(miniupnpc_ldadd) -lm @TOR_LIB_WS32@
+src_tools_tor_fw_helper_tor_fw_helper_CPPFLAGS = $(nat_pmp_cppflags) $(miniupnpc_cppflags) -I"$(top_srcdir)/src/ext"
diff --git a/src/tools/tor-fw-helper/tor-fw-helper-natpmp.c b/src/tools/tor-fw-helper/tor-fw-helper-natpmp.c
index 0e0b385f9..41eb9dcb7 100644
--- a/src/tools/tor-fw-helper/tor-fw-helper-natpmp.c
+++ b/src/tools/tor-fw-helper/tor-fw-helper-natpmp.c
@@ -1,5 +1,5 @@
/* Copyright (c) 2010, Jacob Appelbaum, Steven J. Murdoch.
- * Copyright (c) 2010-2012, The Tor Project, Inc. */
+ * Copyright (c) 2010-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -60,15 +60,15 @@ tor_natpmp_init(tor_fw_options_t *tor_fw_options, void *backend_state)
state->lease = NATPMP_DEFAULT_LEASE;
if (tor_fw_options->verbose)
- fprintf(stdout, "V: natpmp init...\n");
+ fprintf(stderr, "V: natpmp init...\n");
r = initnatpmp(&(state->natpmp), 0, 0);
if (r == 0) {
state->init = 1;
- fprintf(stdout, "tor-fw-helper: natpmp initialized...\n");
+ fprintf(stderr, "V: natpmp initialized...\n");
return r;
} else {
- fprintf(stderr, "tor-fw-helper: natpmp failed to initialize...\n");
+ fprintf(stderr, "V: natpmp failed to initialize...\n");
return r;
}
}
@@ -80,10 +80,10 @@ tor_natpmp_cleanup(tor_fw_options_t *tor_fw_options, void *backend_state)
natpmp_state_t *state = (natpmp_state_t *) backend_state;
int r = 0;
if (tor_fw_options->verbose)
- fprintf(stdout, "V: natpmp cleanup...\n");
+ fprintf(stderr, "V: natpmp cleanup...\n");
r = closenatpmp(&(state->natpmp));
if (tor_fw_options->verbose)
- fprintf(stdout, "V: closing natpmp socket: %d\n", r);
+ fprintf(stderr, "V: closing natpmp socket: %d\n", r);
return r;
}
@@ -93,16 +93,20 @@ wait_until_fd_readable(tor_socket_t fd, struct timeval *timeout)
{
int r;
fd_set fds;
+
+#ifndef WIN32
if (fd >= FD_SETSIZE) {
fprintf(stderr, "E: NAT-PMP FD_SETSIZE error %d\n", fd);
return -1;
}
+#endif
+
FD_ZERO(&fds);
FD_SET(fd, &fds);
r = select(fd+1, &fds, NULL, NULL, timeout);
if (r == -1) {
- fprintf(stdout, "V: select failed in wait_until_fd_readable: %s\n",
- strerror(errno));
+ fprintf(stderr, "V: select failed in wait_until_fd_readable: %s\n",
+ tor_socket_strerror(tor_socket_errno(fd)));
return -1;
}
/* XXXX we should really check to see whether fd was readable, or we timed
@@ -110,27 +114,25 @@ wait_until_fd_readable(tor_socket_t fd, struct timeval *timeout)
return 0;
}
-/** Add a TCP port mapping for a single port stored in <b>tor_fw_options</b>
- * using the <b>natpmp_t</b> stored in <b>backend_state</b>. */
int
-tor_natpmp_add_tcp_mapping(tor_fw_options_t *tor_fw_options,
- void *backend_state)
+tor_natpmp_add_tcp_mapping(uint16_t internal_port, uint16_t external_port,
+ int is_verbose, void *backend_state)
{
- natpmp_state_t *state = (natpmp_state_t *) backend_state;
int r = 0;
int x = 0;
int sav_errno;
+ natpmp_state_t *state = (natpmp_state_t *) backend_state;
struct timeval timeout;
- if (tor_fw_options->verbose)
- fprintf(stdout, "V: sending natpmp portmapping request...\n");
+ if (is_verbose)
+ fprintf(stderr, "V: sending natpmp portmapping request...\n");
r = sendnewportmappingrequest(&(state->natpmp), state->protocol,
- tor_fw_options->internal_port,
- tor_fw_options->external_port,
+ internal_port,
+ external_port,
state->lease);
- if (tor_fw_options->verbose)
- fprintf(stdout, "tor-fw-helper: NAT-PMP sendnewportmappingrequest "
+ if (is_verbose)
+ fprintf(stderr, "tor-fw-helper: NAT-PMP sendnewportmappingrequest "
"returned %d (%s)\n", r, r==12?"SUCCESS":"FAILED");
do {
@@ -139,15 +141,15 @@ tor_natpmp_add_tcp_mapping(tor_fw_options_t *tor_fw_options,
if (x == -1)
return -1;
- if (tor_fw_options->verbose)
- fprintf(stdout, "V: attempting to readnatpmpreponseorretry...\n");
+ if (is_verbose)
+ fprintf(stderr, "V: attempting to readnatpmpreponseorretry...\n");
r = readnatpmpresponseorretry(&(state->natpmp), &(state->response));
- sav_errno = errno;
+ sav_errno = tor_socket_errno(state->natpmp.s);
if (r<0 && r!=NATPMP_TRYAGAIN) {
fprintf(stderr, "E: readnatpmpresponseorretry failed %d\n", r);
fprintf(stderr, "E: errno=%d '%s'\n", sav_errno,
- strerror(sav_errno));
+ tor_socket_strerror(sav_errno));
}
} while (r == NATPMP_TRYAGAIN);
@@ -163,16 +165,14 @@ tor_natpmp_add_tcp_mapping(tor_fw_options_t *tor_fw_options,
}
if (r == NATPMP_SUCCESS) {
- fprintf(stdout, "tor-fw-helper: NAT-PMP mapped public port %hu to"
+ fprintf(stderr, "tor-fw-helper: NAT-PMP mapped public port %hu to"
" localport %hu liftime %u\n",
(state->response).pnu.newportmapping.mappedpublicport,
(state->response).pnu.newportmapping.privateport,
(state->response).pnu.newportmapping.lifetime);
}
- tor_fw_options->nat_pmp_status = 1;
-
- return r;
+ return (r == NATPMP_SUCCESS) ? 0 : -1;
}
/** Fetch our likely public IP from our upstream NAT-PMP enabled NAT device.
@@ -189,7 +189,7 @@ tor_natpmp_fetch_public_ip(tor_fw_options_t *tor_fw_options,
struct timeval timeout;
r = sendpublicaddressrequest(&(state->natpmp));
- fprintf(stdout, "tor-fw-helper: NAT-PMP sendpublicaddressrequest returned"
+ fprintf(stderr, "tor-fw-helper: NAT-PMP sendpublicaddressrequest returned"
" %d (%s)\n", r, r==2?"SUCCESS":"FAILED");
do {
@@ -200,19 +200,19 @@ tor_natpmp_fetch_public_ip(tor_fw_options_t *tor_fw_options,
return -1;
if (tor_fw_options->verbose)
- fprintf(stdout, "V: NAT-PMP attempting to read reponse...\n");
+ fprintf(stderr, "V: NAT-PMP attempting to read reponse...\n");
r = readnatpmpresponseorretry(&(state->natpmp), &(state->response));
- sav_errno = errno;
+ sav_errno = tor_socket_errno(state->natpmp.s);
if (tor_fw_options->verbose)
- fprintf(stdout, "V: NAT-PMP readnatpmpresponseorretry returned"
+ fprintf(stderr, "V: NAT-PMP readnatpmpresponseorretry returned"
" %d\n", r);
if ( r < 0 && r != NATPMP_TRYAGAIN) {
fprintf(stderr, "E: NAT-PMP readnatpmpresponseorretry failed %d\n",
r);
fprintf(stderr, "E: NAT-PMP errno=%d '%s'\n", sav_errno,
- strerror(sav_errno));
+ tor_socket_strerror(sav_errno));
}
} while (r == NATPMP_TRYAGAIN );
@@ -223,15 +223,15 @@ tor_natpmp_fetch_public_ip(tor_fw_options_t *tor_fw_options,
return r;
}
- fprintf(stdout, "tor-fw-helper: ExternalIPAddress = %s\n",
+ fprintf(stderr, "tor-fw-helper: ExternalIPAddress = %s\n",
inet_ntoa((state->response).pnu.publicaddress.addr));
tor_fw_options->public_ip_status = 1;
if (tor_fw_options->verbose) {
- fprintf(stdout, "V: result = %u\n", r);
- fprintf(stdout, "V: type = %u\n", (state->response).type);
- fprintf(stdout, "V: resultcode = %u\n", (state->response).resultcode);
- fprintf(stdout, "V: epoch = %u\n", (state->response).epoch);
+ fprintf(stderr, "V: result = %u\n", r);
+ fprintf(stderr, "V: type = %u\n", (state->response).type);
+ fprintf(stderr, "V: resultcode = %u\n", (state->response).resultcode);
+ fprintf(stderr, "V: epoch = %u\n", (state->response).epoch);
}
return r;
diff --git a/src/tools/tor-fw-helper/tor-fw-helper-natpmp.h b/src/tools/tor-fw-helper/tor-fw-helper-natpmp.h
index 54f541bcf..2d924ce75 100644
--- a/src/tools/tor-fw-helper/tor-fw-helper-natpmp.h
+++ b/src/tools/tor-fw-helper/tor-fw-helper-natpmp.h
@@ -1,5 +1,5 @@
/* Copyright (c) 2010, Jacob Appelbaum, Steven J. Murdoch.
- * Copyright (c) 2010-2012, The Tor Project, Inc. */
+ * Copyright (c) 2010-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -7,8 +7,8 @@
**/
#ifdef NAT_PMP
-#ifndef _TOR_FW_HELPER_NATPMP_H
-#define _TOR_FW_HELPER_NATPMP_H
+#ifndef TOR_TOR_FW_HELPER_NATPMP_H
+#define TOR_TOR_FW_HELPER_NATPMP_H
#include <natpmp.h>
@@ -36,8 +36,8 @@ int tor_natpmp_init(tor_fw_options_t *tor_fw_options, void *backend_state);
int tor_natpmp_cleanup(tor_fw_options_t *tor_fw_options, void *backend_state);
-int tor_natpmp_add_tcp_mapping(tor_fw_options_t *tor_fw_options,
- void *backend_state);
+int tor_natpmp_add_tcp_mapping(uint16_t internal_port, uint16_t external_port,
+ int is_verbose, void *backend_state);
int tor_natpmp_fetch_public_ip(tor_fw_options_t *tor_fw_options,
void *backend_state);
diff --git a/src/tools/tor-fw-helper/tor-fw-helper-upnp.c b/src/tools/tor-fw-helper/tor-fw-helper-upnp.c
index 7c104f11c..692186d37 100644
--- a/src/tools/tor-fw-helper/tor-fw-helper-upnp.c
+++ b/src/tools/tor-fw-helper/tor-fw-helper-upnp.c
@@ -1,5 +1,5 @@
/* Copyright (c) 2010, Jacob Appelbaum, Steven J. Murdoch.
- * Copyright (c) 2010-2012, The Tor Project, Inc. */
+ * Copyright (c) 2010-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -91,7 +91,7 @@ tor_upnp_init(tor_fw_options_t *options, void *backend_state)
assert(options);
r = UPNP_GetValidIGD(devlist, &(state->urls), &(state->data),
state->lanaddr, UPNP_LANADDR_SZ);
- fprintf(stdout, "tor-fw-helper: UPnP GetValidIGD returned: %d (%s)\n", r,
+ fprintf(stderr, "tor-fw-helper: UPnP GetValidIGD returned: %d (%s)\n", r,
r==UPNP_SUCCESS?"SUCCESS":"FAILED");
freeUPNPDevlist(devlist);
@@ -141,7 +141,7 @@ tor_upnp_fetch_public_ip(tor_fw_options_t *options, void *backend_state)
goto err;
if (externalIPAddress[0]) {
- fprintf(stdout, "tor-fw-helper: ExternalIPAddress = %s\n",
+ fprintf(stderr, "tor-fw-helper: ExternalIPAddress = %s\n",
externalIPAddress); tor_upnp_cleanup(options, state);
options->public_ip_status = 1;
return UPNP_ERR_SUCCESS;
@@ -154,44 +154,40 @@ tor_upnp_fetch_public_ip(tor_fw_options_t *options, void *backend_state)
return UPNP_ERR_GETEXTERNALIP;
}
-/** Add a TCP port mapping for a single port stored in <b>tor_fw_options</b>
- * and store the results in <b>backend_state</b>. */
int
-tor_upnp_add_tcp_mapping(tor_fw_options_t *options, void *backend_state)
+tor_upnp_add_tcp_mapping(uint16_t internal_port, uint16_t external_port,
+ int is_verbose, void *backend_state)
{
- miniupnpc_state_t *state = (miniupnpc_state_t *) backend_state;
- int r;
+ int retval;
char internal_port_str[6];
char external_port_str[6];
+ miniupnpc_state_t *state = (miniupnpc_state_t *) backend_state;
if (!state->init) {
- r = tor_upnp_init(options, state);
- if (r != UPNP_ERR_SUCCESS)
- return r;
+ fprintf(stderr, "E: %s but state is not initialized.\n", __func__);
+ return -1;
}
- if (options->verbose)
- fprintf(stdout, "V: internal port: %d, external port: %d\n",
- (int)options->internal_port, (int)options->external_port);
+ if (is_verbose)
+ fprintf(stderr, "V: UPnP: internal port: %u, external port: %u\n",
+ internal_port, external_port);
tor_snprintf(internal_port_str, sizeof(internal_port_str),
- "%d", (int)options->internal_port);
+ "%u", internal_port);
tor_snprintf(external_port_str, sizeof(external_port_str),
- "%d", (int)options->external_port);
+ "%u", external_port);
- r = UPNP_AddPortMapping(state->urls.controlURL,
- state->data.first.servicetype,
- external_port_str, internal_port_str,
+ retval = UPNP_AddPortMapping(state->urls.controlURL,
+ state->data.first.servicetype,
+ external_port_str, internal_port_str,
#ifdef MINIUPNPC15
- state->lanaddr, UPNP_DESC, "TCP", 0);
+ state->lanaddr, UPNP_DESC, "TCP", 0);
#else
- state->lanaddr, UPNP_DESC, "TCP", 0, 0);
+ state->lanaddr, UPNP_DESC, "TCP", 0, 0);
#endif
- if (r != UPNPCOMMAND_SUCCESS)
- return UPNP_ERR_ADDPORTMAPPING;
- options->upnp_status = 1;
- return UPNP_ERR_SUCCESS;
+ return (retval == UPNP_ERR_SUCCESS) ? 0 : -1;
}
+
#endif
diff --git a/src/tools/tor-fw-helper/tor-fw-helper-upnp.h b/src/tools/tor-fw-helper/tor-fw-helper-upnp.h
index f037c75ba..b6c7ed864 100644
--- a/src/tools/tor-fw-helper/tor-fw-helper-upnp.h
+++ b/src/tools/tor-fw-helper/tor-fw-helper-upnp.h
@@ -1,5 +1,5 @@
/* Copyright (c) 2010, Jacob Appelbaum, Steven J. Murdoch.
- * Copyright (c) 2010-2012, The Tor Project, Inc. */
+ * Copyright (c) 2010-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -8,8 +8,8 @@
**/
#ifdef MINIUPNPC
-#ifndef _TOR_FW_HELPER_UPNP_H
-#define _TOR_FW_HELPER_UPNP_H
+#ifndef TOR_TOR_FW_HELPER_UPNP_H
+#define TOR_TOR_FW_HELPER_UPNP_H
#include <miniupnpc/miniwget.h>
#include <miniupnpc/miniupnpc.h>
@@ -36,7 +36,8 @@ int tor_upnp_cleanup(tor_fw_options_t *options, void *backend_state);
int tor_upnp_fetch_public_ip(tor_fw_options_t *options, void *backend_state);
-int tor_upnp_add_tcp_mapping(tor_fw_options_t *options, void *backend_state);
+int tor_upnp_add_tcp_mapping(uint16_t internal_port, uint16_t external_port,
+ int is_verbose, void *backend_state);
#endif
#endif
diff --git a/src/tools/tor-fw-helper/tor-fw-helper.c b/src/tools/tor-fw-helper/tor-fw-helper.c
index 0510e65d1..84cc21e34 100644
--- a/src/tools/tor-fw-helper/tor-fw-helper.c
+++ b/src/tools/tor-fw-helper/tor-fw-helper.c
@@ -1,5 +1,5 @@
/* Copyright (c) 2010, Jacob Appelbaum, Steven J. Murdoch.
- * Copyright (c) 2010-2012, The Tor Project, Inc. */
+ * Copyright (c) 2010-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -20,6 +20,9 @@
#include <getopt.h>
#include <time.h>
#include <string.h>
+#include <assert.h>
+
+#include "container.h"
#ifdef _WIN32
#include <winsock2.h>
@@ -45,7 +48,7 @@ typedef struct backends_t {
void *backend_state[MAX_BACKENDS];
} backends_t;
-/** Initalize each backend helper with the user input stored in <b>options</b>
+/** Initialize each backend helper with the user input stored in <b>options</b>
* and put the results in the <b>backends</b> struct. */
static int
init_backends(tor_fw_options_t *options, backends_t *backends)
@@ -94,13 +97,10 @@ usage(void)
{
fprintf(stderr, "tor-fw-helper usage:\n"
" [-h|--help]\n"
- " [-T|--Test]\n"
+ " [-T|--test-commandline]\n"
" [-v|--verbose]\n"
" [-g|--fetch-public-ip]\n"
- " -i|--internal-or-port [TCP port]\n"
- " [-e|--external-or-port [TCP port]]\n"
- " [-d|--internal-dir-port [TCP port]\n"
- " [-p|--external-dir-port [TCP port]]]\n");
+ " [-p|--forward-port ([<external port>]:<internal port>)]\n");
}
/** Log commandline options to a hardcoded file <b>tor-fw-helper.log</b> in the
@@ -125,7 +125,7 @@ log_commandline_options(int argc, char **argv)
if (retval < 0)
goto error;
- retval = fprintf(stdout, "ARG: %d: %s\n", i, argv[i]);
+ retval = fprintf(stderr, "ARG: %d: %s\n", i, argv[i]);
if (retval < 0)
goto error;
}
@@ -152,82 +152,141 @@ tor_fw_fetch_public_ip(tor_fw_options_t *tor_fw_options,
int r = 0;
if (tor_fw_options->verbose)
- fprintf(stdout, "V: tor_fw_fetch_public_ip\n");
+ fprintf(stderr, "V: tor_fw_fetch_public_ip\n");
for (i=0; i<backends->n_backends; ++i) {
if (tor_fw_options->verbose) {
- fprintf(stdout, "V: running backend_state now: %i\n", i);
- fprintf(stdout, "V: size of backend state: %u\n",
+ fprintf(stderr, "V: running backend_state now: %i\n", i);
+ fprintf(stderr, "V: size of backend state: %u\n",
(int)(backends->backend_ops)[i].state_len);
- fprintf(stdout, "V: backend state name: %s\n",
+ fprintf(stderr, "V: backend state name: %s\n",
(char *)(backends->backend_ops)[i].name);
}
r = backends->backend_ops[i].fetch_public_ip(tor_fw_options,
backends->backend_state[i]);
- fprintf(stdout, "tor-fw-helper: tor_fw_fetch_public_ip backend %s "
+ fprintf(stderr, "tor-fw-helper: tor_fw_fetch_public_ip backend %s "
" returned: %i\n", (char *)(backends->backend_ops)[i].name, r);
}
}
-/** Iterate over each of the supported <b>backends</b> and attempt to add a
- * port forward for the OR port stored in <b>tor_fw_options</b>. */
+/** Print a spec-conformant string to stdout describing the results of
+ * the TCP port forwarding operation from <b>external_port</b> to
+ * <b>internal_port</b>. */
static void
-tor_fw_add_or_port(tor_fw_options_t *tor_fw_options,
- backends_t *backends)
+tor_fw_helper_report_port_fw_results(uint16_t internal_port,
+ uint16_t external_port,
+ int succeded,
+ const char *message)
+{
+ char *report_string = NULL;
+
+ tor_asprintf(&report_string, "%s %s %u %u %s %s\n",
+ "tor-fw-helper",
+ "tcp-forward",
+ external_port, internal_port,
+ succeded ? "SUCCESS" : "FAIL",
+ message);
+ fprintf(stdout, "%s", report_string);
+ fflush(stdout);
+ tor_free(report_string);
+}
+
+#define tor_fw_helper_report_port_fw_fail(i, e, m) \
+ tor_fw_helper_report_port_fw_results((i), (e), 0, (m))
+
+#define tor_fw_helper_report_port_fw_success(i, e, m) \
+ tor_fw_helper_report_port_fw_results((i), (e), 1, (m))
+
+/** Return a heap-allocated string containing the list of our
+ * backends. It can be used in log messages. Be sure to free it
+ * afterwards! */
+static char *
+get_list_of_backends_string(backends_t *backends)
{
+ char *backend_names = NULL;
int i;
- int r = 0;
+ smartlist_t *backend_names_sl = smartlist_new();
- if (tor_fw_options->verbose)
- fprintf(stdout, "V: tor_fw_add_or_port\n");
+ assert(backends->n_backends);
- for (i=0; i<backends->n_backends; ++i) {
- if (tor_fw_options->verbose) {
- fprintf(stdout, "V: running backend_state now: %i\n", i);
- fprintf(stdout, "V: size of backend state: %u\n",
- (int)(backends->backend_ops)[i].state_len);
- fprintf(stdout, "V: backend state name: %s\n",
- (const char *) backends->backend_ops[i].name);
- }
- r = backends->backend_ops[i].add_tcp_mapping(tor_fw_options,
- backends->backend_state[i]);
- fprintf(stdout, "tor-fw-helper: tor_fw_add_or_port backend %s "
- "returned: %i\n", (const char *) backends->backend_ops[i].name, r);
- }
+ for (i=0; i<backends->n_backends; ++i)
+ smartlist_add(backend_names_sl, (char *) backends->backend_ops[i].name);
+
+ backend_names = smartlist_join_strings(backend_names_sl, ", ", 0, NULL);
+ smartlist_free(backend_names_sl);
+
+ return backend_names;
}
/** Iterate over each of the supported <b>backends</b> and attempt to add a
- * port forward for the Dir port stored in <b>tor_fw_options</b>. */
+ * port forward for the port stored in <b>tor_fw_options</b>. */
static void
-tor_fw_add_dir_port(tor_fw_options_t *tor_fw_options,
- backends_t *backends)
+tor_fw_add_ports(tor_fw_options_t *tor_fw_options,
+ backends_t *backends)
{
int i;
int r = 0;
+ int succeeded = 0;
if (tor_fw_options->verbose)
- fprintf(stdout, "V: tor_fw_add_dir_port\n");
+ fprintf(stderr, "V: %s\n", __func__);
- for (i=0; i<backends->n_backends; ++i) {
- if (tor_fw_options->verbose) {
- fprintf(stdout, "V: running backend_state now: %i\n", i);
- fprintf(stdout, "V: size of backend state: %u\n",
- (int)(backends->backend_ops)[i].state_len);
- fprintf(stdout, "V: backend state name: %s\n",
- (char *)(backends->backend_ops)[i].name);
+ /** Loop all ports that need to be forwarded, and try to use our
+ * backends for each port. If a backend succeeds, break the loop,
+ * report success and get to the next port. If all backends fail,
+ * report failure for that port. */
+ SMARTLIST_FOREACH_BEGIN(tor_fw_options->ports_to_forward,
+ port_to_forward_t *, port_to_forward) {
+
+ succeeded = 0;
+
+ for (i=0; i<backends->n_backends; ++i) {
+ if (tor_fw_options->verbose) {
+ fprintf(stderr, "V: running backend_state now: %i\n", i);
+ fprintf(stderr, "V: size of backend state: %u\n",
+ (int)(backends->backend_ops)[i].state_len);
+ fprintf(stderr, "V: backend state name: %s\n",
+ (const char *) backends->backend_ops[i].name);
+ }
+
+ r =
+ backends->backend_ops[i].add_tcp_mapping(port_to_forward->internal_port,
+ port_to_forward->external_port,
+ tor_fw_options->verbose,
+ backends->backend_state[i]);
+ if (r == 0) { /* backend success */
+ tor_fw_helper_report_port_fw_success(port_to_forward->internal_port,
+ port_to_forward->external_port,
+ backends->backend_ops[i].name);
+ succeeded = 1;
+ break;
+ }
+
+ fprintf(stderr, "tor-fw-helper: tor_fw_add_port backend %s "
+ "returned: %i\n",
+ (const char *) backends->backend_ops[i].name, r);
}
- r = backends->backend_ops[i].add_tcp_mapping(tor_fw_options,
- backends->backend_state[i]);
- fprintf(stdout, "tor-fw-helper: tor_fw_add_dir_port backend %s "
- "returned: %i\n", (const char *)backends->backend_ops[i].name, r);
- }
+
+ if (!succeeded) { /* all backends failed */
+ char *list_of_backends_str = get_list_of_backends_string(backends);
+ char *fail_msg = NULL;
+ tor_asprintf(&fail_msg, "All port forwarding backends (%s) failed.",
+ list_of_backends_str);
+ tor_fw_helper_report_port_fw_fail(port_to_forward->internal_port,
+ port_to_forward->external_port,
+ fail_msg);
+ tor_free(list_of_backends_str);
+ tor_free(fail_msg);
+ }
+
+ } SMARTLIST_FOREACH_END(port_to_forward);
}
/** Called before we make any calls to network-related functions.
* (Some operating systems require their network libraries to be
* initialized.) (from common/compat.c) */
static int
-network_init(void)
+tor_fw_helper_network_init(void)
{
#ifdef _WIN32
/* This silly exercise is necessary before windows will allow
@@ -247,6 +306,67 @@ network_init(void)
return 0;
}
+/** Parse the '-p' argument of tor-fw-helper. Its format is
+ * [<external port>]:<internal port>, and <external port> is optional.
+ * Return NULL if <b>arg</b> was c0rrupted. */
+static port_to_forward_t *
+parse_port(const char *arg)
+{
+ smartlist_t *sl = smartlist_new();
+ port_to_forward_t *port_to_forward = NULL;
+ char *port_str = NULL;
+ int ok;
+ int port;
+
+ smartlist_split_string(sl, arg, ":", 0, 0);
+ if (smartlist_len(sl) != 2)
+ goto err;
+
+ port_to_forward = tor_malloc(sizeof(port_to_forward_t));
+ if (!port_to_forward)
+ goto err;
+
+ port_str = smartlist_get(sl, 0); /* macroify ? */
+ port = (int)tor_parse_long(port_str, 10, 1, 65535, &ok, NULL);
+ if (!ok && strlen(port_str)) /* ":1555" is valid */
+ goto err;
+ port_to_forward->external_port = port;
+
+ port_str = smartlist_get(sl, 1);
+ port = (int)tor_parse_long(port_str, 10, 1, 65535, &ok, NULL);
+ if (!ok)
+ goto err;
+ port_to_forward->internal_port = port;
+
+ goto done;
+
+ err:
+ tor_free(port_to_forward);
+
+ done:
+ SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
+ smartlist_free(sl);
+
+ return port_to_forward;
+}
+
+/** Report a failure of epic proportions: We didn't manage to
+ * initialize any port forwarding backends. */
+static void
+report_full_fail(const smartlist_t *ports_to_forward)
+{
+ if (!ports_to_forward)
+ return;
+
+ SMARTLIST_FOREACH_BEGIN(ports_to_forward,
+ const port_to_forward_t *, port_to_forward) {
+ tor_fw_helper_report_port_fw_fail(port_to_forward->internal_port,
+ port_to_forward->external_port,
+ "All backends (NAT-PMP, UPnP) failed "
+ "to initialize!"); /* XXX hardcoded */
+ } SMARTLIST_FOREACH_END(port_to_forward);
+}
+
int
main(int argc, char **argv)
{
@@ -259,22 +379,20 @@ main(int argc, char **argv)
memset(&tor_fw_options, 0, sizeof(tor_fw_options));
memset(&backend_state, 0, sizeof(backend_state));
+ // Parse CLI arguments.
while (1) {
int option_index = 0;
static struct option long_options[] =
{
{"verbose", 0, 0, 'v'},
{"help", 0, 0, 'h'},
- {"internal-or-port", 1, 0, 'i'},
- {"external-or-port", 1, 0, 'e'},
- {"internal-dir-port", 1, 0, 'd'},
- {"external-dir-port", 1, 0, 'p'},
+ {"port", 1, 0, 'p'},
{"fetch-public-ip", 0, 0, 'g'},
{"test-commandline", 0, 0, 'T'},
{0, 0, 0, 0}
};
- c = getopt_long(argc, argv, "vhi:e:d:p:gT",
+ c = getopt_long(argc, argv, "vhp:gT",
long_options, &option_index);
if (c == -1)
break;
@@ -282,14 +400,31 @@ main(int argc, char **argv)
switch (c) {
case 'v': tor_fw_options.verbose = 1; break;
case 'h': tor_fw_options.help = 1; usage(); exit(1); break;
- case 'i': sscanf(optarg, "%hu", &tor_fw_options.private_or_port);
- break;
- case 'e': sscanf(optarg, "%hu", &tor_fw_options.public_or_port);
- break;
- case 'd': sscanf(optarg, "%hu", &tor_fw_options.private_dir_port);
- break;
- case 'p': sscanf(optarg, "%hu", &tor_fw_options.public_dir_port);
+ case 'p': {
+ port_to_forward_t *port_to_forward = parse_port(optarg);
+ if (!port_to_forward) {
+ fprintf(stderr, "E: Failed to parse '%s'.\n", optarg);
+ usage();
+ exit(1);
+ }
+
+ /* If no external port was given (it's optional), set it to be
+ * equal with the internal port. */
+ if (!port_to_forward->external_port) {
+ assert(port_to_forward->internal_port);
+ if (tor_fw_options.verbose)
+ fprintf(stderr, "V: No external port was given. Setting to %u.\n",
+ port_to_forward->internal_port);
+ port_to_forward->external_port = port_to_forward->internal_port;
+ }
+
+ if (!tor_fw_options.ports_to_forward)
+ tor_fw_options.ports_to_forward = smartlist_new();
+
+ smartlist_add(tor_fw_options.ports_to_forward, port_to_forward);
+
break;
+ }
case 'g': tor_fw_options.fetch_public_ip = 1; break;
case 'T': tor_fw_options.test_commandline = 1; break;
case '?': break;
@@ -297,100 +432,70 @@ main(int argc, char **argv)
}
}
- if (tor_fw_options.verbose) {
- fprintf(stderr, "V: tor-fw-helper version %s\n"
- "V: We were called with the following arguments:\n"
- "V: verbose = %d, help = %d, pub or port = %u, "
- "priv or port = %u\n"
- "V: pub dir port = %u, priv dir port = %u\n"
- "V: fetch_public_ip = %u\n",
- tor_fw_version, tor_fw_options.verbose, tor_fw_options.help,
- tor_fw_options.private_or_port, tor_fw_options.public_or_port,
- tor_fw_options.private_dir_port, tor_fw_options.public_dir_port,
- tor_fw_options.fetch_public_ip);
+ { // Verbose output
+
+ if (tor_fw_options.verbose)
+ fprintf(stderr, "V: tor-fw-helper version %s\n"
+ "V: We were called with the following arguments:\n"
+ "V: verbose = %d, help = %d, fetch_public_ip = %u\n",
+ tor_fw_version, tor_fw_options.verbose, tor_fw_options.help,
+ tor_fw_options.fetch_public_ip);
+
+ if (tor_fw_options.verbose && tor_fw_options.ports_to_forward) {
+ fprintf(stderr, "V: TCP forwarding:\n");
+ SMARTLIST_FOREACH(tor_fw_options.ports_to_forward,
+ const port_to_forward_t *, port_to_forward,
+ fprintf(stderr, "V: External: %u, Internal: %u\n",
+ port_to_forward->external_port,
+ port_to_forward->internal_port));
+ }
}
if (tor_fw_options.test_commandline) {
return log_commandline_options(argc, argv);
}
- /* At the very least, we require an ORPort;
- Given a private ORPort, we can ask for a mapping that matches the port
- externally.
- */
- if (!tor_fw_options.private_or_port && !tor_fw_options.fetch_public_ip) {
- fprintf(stderr, "E: We require an ORPort or fetch_public_ip"
- " request!\n");
+ // See if the user actually wants us to do something.
+ if (!tor_fw_options.fetch_public_ip && !tor_fw_options.ports_to_forward) {
+ fprintf(stderr, "E: We require a port to be forwarded or "
+ "fetch_public_ip request!\n");
usage();
exit(1);
- } else {
- /* When we only have one ORPort, internal/external are
- set to be the same.*/
- if (!tor_fw_options.public_or_port && tor_fw_options.private_or_port) {
- if (tor_fw_options.verbose)
- fprintf(stdout, "V: We're setting public_or_port = "
- "private_or_port.\n");
- tor_fw_options.public_or_port = tor_fw_options.private_or_port;
- }
- }
- if (!tor_fw_options.private_dir_port) {
- if (tor_fw_options.verbose)
- fprintf(stdout, "V: We have no DirPort; no hole punching for "
- "DirPorts\n");
-
- } else {
- /* When we only have one DirPort, internal/external are
- set to be the same.*/
- if (!tor_fw_options.public_dir_port && tor_fw_options.private_dir_port) {
- if (tor_fw_options.verbose)
- fprintf(stdout, "V: We're setting public_or_port = "
- "private_or_port.\n");
-
- tor_fw_options.public_dir_port = tor_fw_options.private_dir_port;
- }
- }
-
- if (tor_fw_options.verbose) {
- fprintf(stdout, "V: pub or port = %u, priv or port = %u\n"
- "V: pub dir port = %u, priv dir port = %u\n",
- tor_fw_options.private_or_port, tor_fw_options.public_or_port,
- tor_fw_options.private_dir_port,
- tor_fw_options.public_dir_port);
}
// Initialize networking
- if (network_init())
+ if (tor_fw_helper_network_init())
exit(1);
// Initalize the various fw-helper backend helpers
r = init_backends(&tor_fw_options, &backend_state);
- if (r)
- printf("tor-fw-helper: %i NAT traversal helper(s) loaded\n", r);
-
- if (tor_fw_options.fetch_public_ip) {
- tor_fw_fetch_public_ip(&tor_fw_options, &backend_state);
+ if (!r) { // all backends failed:
+ // report our failure
+ report_full_fail(tor_fw_options.ports_to_forward);
+ fprintf(stderr, "tor-fw-helper: All backends failed.\n");
+ exit(1);
+ } else { // some backends succeeded:
+ fprintf(stderr, "tor-fw-helper: %i NAT traversal helper(s) loaded\n", r);
}
- if (tor_fw_options.private_or_port) {
- tor_fw_options.internal_port = tor_fw_options.private_or_port;
- tor_fw_options.external_port = tor_fw_options.private_or_port;
- tor_fw_add_or_port(&tor_fw_options, &backend_state);
+ // Forward TCP ports.
+ if (tor_fw_options.ports_to_forward) {
+ tor_fw_add_ports(&tor_fw_options, &backend_state);
}
- if (tor_fw_options.private_dir_port) {
- tor_fw_options.internal_port = tor_fw_options.private_dir_port;
- tor_fw_options.external_port = tor_fw_options.private_dir_port;
- tor_fw_add_dir_port(&tor_fw_options, &backend_state);
+ // Fetch our public IP.
+ if (tor_fw_options.fetch_public_ip) {
+ tor_fw_fetch_public_ip(&tor_fw_options, &backend_state);
}
- r = (((tor_fw_options.nat_pmp_status | tor_fw_options.upnp_status)
- |tor_fw_options.public_ip_status));
- if (r > 0) {
- fprintf(stdout, "tor-fw-helper: SUCCESS\n");
- } else {
- fprintf(stderr, "tor-fw-helper: FAILURE\n");
+ // Cleanup and exit.
+ if (tor_fw_options.ports_to_forward) {
+ SMARTLIST_FOREACH(tor_fw_options.ports_to_forward,
+ port_to_forward_t *, port,
+ tor_free(port));
+ smartlist_free(tor_fw_options.ports_to_forward);
}
- exit(r);
+ exit(0);
}
diff --git a/src/tools/tor-fw-helper/tor-fw-helper.h b/src/tools/tor-fw-helper/tor-fw-helper.h
index 058afc4e0..0b0d17993 100644
--- a/src/tools/tor-fw-helper/tor-fw-helper.h
+++ b/src/tools/tor-fw-helper/tor-fw-helper.h
@@ -1,5 +1,5 @@
/* Copyright (c) 2010, Jacob Appelbaum, Steven J. Murdoch.
- * Copyright (c) 2010-2012, The Tor Project, Inc. */
+ * Copyright (c) 2010-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -7,8 +7,8 @@
* \brief The main header for our firewall helper.
**/
-#ifndef _TOR_FW_HELPER_H
-#define _TOR_FW_HELPER_H
+#ifndef TOR_TOR_FW_HELPER_H
+#define TOR_TOR_FW_HELPER_H
#include <stdint.h>
#include <stdio.h>
@@ -17,24 +17,26 @@
#include <time.h>
/** The current version of tor-fw-helper. */
-#define tor_fw_version "0.1"
+#define tor_fw_version "0.2"
/** This is an arbitrary hard limit - We currently have two (NAT-PMP and UPnP).
We're likely going to add the Intel UPnP library but nothing else comes to
mind at the moment. */
#define MAX_BACKENDS 23
+/** Forward traffic received in port <b>external_port</b> in the
+ * external side of our NAT to <b>internal_port</b> in this host. */
+typedef struct {
+ uint16_t external_port;
+ uint16_t internal_port;
+} port_to_forward_t;
+
/** This is where we store parsed commandline options. */
typedef struct {
int verbose;
int help;
int test_commandline;
- uint16_t private_dir_port;
- uint16_t private_or_port;
- uint16_t public_dir_port;
- uint16_t public_or_port;
- uint16_t internal_port;
- uint16_t external_port;
+ struct smartlist_t *ports_to_forward;
int fetch_public_ip;
int nat_pmp_status;
int upnp_status;
@@ -50,8 +52,8 @@ typedef struct tor_fw_backend_t {
int (*init)(tor_fw_options_t *options, void *backend_state);
int (*cleanup)(tor_fw_options_t *options, void *backend_state);
int (*fetch_public_ip)(tor_fw_options_t *options, void *backend_state);
- int (*add_tcp_mapping)(tor_fw_options_t *options, void *backend_state);
+ int (*add_tcp_mapping)(uint16_t internal_port, uint16_t external_port,
+ int is_verbose, void *backend_state);
} tor_fw_backend_t;
-
#endif
diff --git a/src/tools/tor-gencert.c b/src/tools/tor-gencert.c
index c7ab8dc61..e799df5ca 100644
--- a/src/tools/tor-gencert.c
+++ b/src/tools/tor-gencert.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2007-2012, The Tor Project, Inc. */
+/* Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#include "orconfig.h"
@@ -27,8 +27,6 @@
#include <assert.h>
#endif
-#define CRYPTO_PRIVATE
-
#include "compat.h"
#include "../common/util.h"
#include "../common/torlog.h"
@@ -36,7 +34,7 @@
#include "address.h"
#define IDENTITY_KEY_BITS 3072
-#define SIGNING_KEY_BITS 1024
+#define SIGNING_KEY_BITS 2048
#define DEFAULT_LIFETIME 12
/* These globals are set via command line options. */
@@ -82,10 +80,11 @@ crypto_log_errors(int severity, const char *doing)
if (!lib) lib = "(null)";
if (!func) func = "(null)";
if (doing) {
- log(severity, LD_CRYPTO, "crypto error while %s: %s (in %s:%s)",
- doing, msg, lib, func);
+ tor_log(severity, LD_CRYPTO, "crypto error while %s: %s (in %s:%s)",
+ doing, msg, lib, func);
} else {
- log(severity, LD_CRYPTO, "crypto error: %s (in %s:%s)", msg, lib, func);
+ tor_log(severity, LD_CRYPTO, "crypto error: %s (in %s:%s)",
+ msg, lib, func);
}
}
}
@@ -227,7 +226,7 @@ generate_key(int bits)
crypto_pk_t *env = crypto_pk_new();
if (crypto_pk_generate_key_with_bits(env,bits)<0)
goto done;
- rsa = _crypto_pk_get_rsa(env);
+ rsa = crypto_pk_get_rsa_(env);
rsa = RSAPrivateKey_dup(rsa);
done:
crypto_pk_free(env);
@@ -303,6 +302,7 @@ load_identity_key(void)
if (!identity_key) {
log_err(LD_GENERAL, "Couldn't read identity key from %s",
identity_key_file);
+ fclose(f);
return 1;
}
fclose(f);
@@ -323,6 +323,7 @@ load_signing_key(void)
}
if (!(signing_key = PEM_read_PrivateKey(f, NULL, NULL, NULL))) {
log_err(LD_GENERAL, "Couldn't read siging key from %s", signing_key_file);
+ fclose(f);
return 1;
}
fclose(f);
@@ -401,7 +402,7 @@ static int
get_fingerprint(EVP_PKEY *pkey, char *out)
{
int r = 1;
- crypto_pk_t *pk = _crypto_new_pk_from_rsa(EVP_PKEY_get1_RSA(pkey));
+ crypto_pk_t *pk = crypto_new_pk_from_rsa_(EVP_PKEY_get1_RSA(pkey));
if (pk) {
r = crypto_pk_get_fingerprint(pk, out, 0);
crypto_pk_free(pk);
@@ -414,7 +415,7 @@ static int
get_digest(EVP_PKEY *pkey, char *out)
{
int r = 1;
- crypto_pk_t *pk = _crypto_new_pk_from_rsa(EVP_PKEY_get1_RSA(pkey));
+ crypto_pk_t *pk = crypto_new_pk_from_rsa_(EVP_PKEY_get1_RSA(pkey));
if (pk) {
r = crypto_pk_get_digest(pk, out);
crypto_pk_free(pk);
@@ -548,6 +549,9 @@ main(int argc, char **argv)
if (signing_key)
EVP_PKEY_free(signing_key);
tor_free(address);
+ tor_free(identity_key_file);
+ tor_free(signing_key_file);
+ tor_free(certificate_file);
crypto_global_cleanup();
return r;
diff --git a/src/tools/tor-resolve.c b/src/tools/tor-resolve.c
index 4ef84f491..306f6c66a 100644
--- a/src/tools/tor-resolve.c
+++ b/src/tools/tor-resolve.c
@@ -1,10 +1,9 @@
/* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson
- * Copyright (c) 2007-2012, The Tor Project, Inc.
+ * Copyright (c) 2007-2013, The Tor Project, Inc.
*/
/* See LICENSE for licensing information */
#include "orconfig.h"
-
#include "compat.h"
#include "../common/util.h"
#include "address.h"
@@ -74,23 +73,29 @@ build_socks_resolve_request(char **out,
memcpy((*out)+8+strlen(username)+1, hostname, strlen(hostname)+1);
} else if (version == 5) {
int is_ip_address;
- struct in_addr in;
+ tor_addr_t addr;
size_t addrlen;
- is_ip_address = tor_inet_aton(hostname, &in);
+ int ipv6;
+ is_ip_address = tor_addr_parse(&addr, hostname) != -1;
if (!is_ip_address && reverse) {
log_err(LD_GENERAL, "Tried to do a reverse lookup on a non-IP!");
return -1;
}
- addrlen = reverse ? 4 : 1 + strlen(hostname);
+ ipv6 = reverse && tor_addr_family(&addr) == AF_INET6;
+ addrlen = reverse ? (ipv6 ? 16 : 4) : 1 + strlen(hostname);
len = 6 + addrlen;
*out = tor_malloc(len);
(*out)[0] = 5; /* SOCKS version 5 */
(*out)[1] = reverse ? '\xF1' : '\xF0'; /* RESOLVE_PTR or RESOLVE */
(*out)[2] = 0; /* reserved. */
- (*out)[3] = reverse ? 1 : 3;
if (reverse) {
- set_uint32((*out)+4, in.s_addr);
+ (*out)[3] = ipv6 ? 4 : 1;
+ if (ipv6)
+ memcpy((*out)+4, tor_addr_to_in6_addr8(&addr), 16);
+ else
+ set_uint32((*out)+4, tor_addr_to_ipv4n(&addr));
} else {
+ (*out)[3] = 3;
(*out)[4] = (char)(uint8_t)(addrlen - 1);
memcpy((*out)+5, hostname, addrlen - 1);
}
@@ -109,7 +114,7 @@ build_socks_resolve_request(char **out,
static int
parse_socks4a_resolve_response(const char *hostname,
const char *response, size_t len,
- uint32_t *addr_out)
+ tor_addr_t *addr_out)
{
uint8_t status;
tor_assert(response);
@@ -140,7 +145,7 @@ parse_socks4a_resolve_response(const char *hostname,
return -1;
}
- *addr_out = ntohl(get_uint32(response+4));
+ tor_addr_from_ipv4n(addr_out, get_uint32(response+4));
return 0;
}
@@ -179,9 +184,9 @@ socks5_reason_to_string(char reason)
static int
do_resolve(const char *hostname, uint32_t sockshost, uint16_t socksport,
int reverse, int version,
- uint32_t *result_addr, char **result_hostname)
+ tor_addr_t *result_addr, char **result_hostname)
{
- int s;
+ int s = -1;
struct sockaddr_in socksaddr;
char *req = NULL;
ssize_t len = 0;
@@ -190,7 +195,7 @@ do_resolve(const char *hostname, uint32_t sockshost, uint16_t socksport,
tor_assert(result_addr);
tor_assert(version == 4 || version == 5);
- *result_addr = 0;
+ tor_addr_make_unspec(result_addr);
*result_hostname = NULL;
s = tor_open_socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);
@@ -205,28 +210,28 @@ do_resolve(const char *hostname, uint32_t sockshost, uint16_t socksport,
socksaddr.sin_addr.s_addr = htonl(sockshost);
if (connect(s, (struct sockaddr*)&socksaddr, sizeof(socksaddr))) {
log_sock_error("connecting to SOCKS host", s);
- return -1;
+ goto err;
}
if (version == 5) {
char method_buf[2];
if (write_all(s, "\x05\x01\x00", 3, 1) != 3) {
log_err(LD_NET, "Error sending SOCKS5 method list.");
- return -1;
+ goto err;
}
if (read_all(s, method_buf, 2, 1) != 2) {
log_err(LD_NET, "Error reading SOCKS5 methods.");
- return -1;
+ goto err;
}
if (method_buf[0] != '\x05') {
log_err(LD_NET, "Unrecognized socks version: %u",
(unsigned)method_buf[0]);
- return -1;
+ goto err;
}
if (method_buf[1] != '\x00') {
log_err(LD_NET, "Unrecognized socks authentication method: %u",
(unsigned)method_buf[1]);
- return -1;
+ goto err;
}
}
@@ -234,12 +239,12 @@ do_resolve(const char *hostname, uint32_t sockshost, uint16_t socksport,
version))<0) {
log_err(LD_BUG,"Error generating SOCKS request");
tor_assert(!req);
- return -1;
+ goto err;
}
if (write_all(s, req, len, 1) != len) {
log_sock_error("sending SOCKS request", s);
tor_free(req);
- return -1;
+ goto err;
}
tor_free(req);
@@ -247,22 +252,22 @@ do_resolve(const char *hostname, uint32_t sockshost, uint16_t socksport,
char reply_buf[RESPONSE_LEN_4];
if (read_all(s, reply_buf, RESPONSE_LEN_4, 1) != RESPONSE_LEN_4) {
log_err(LD_NET, "Error reading SOCKS4 response.");
- return -1;
+ goto err;
}
if (parse_socks4a_resolve_response(hostname,
reply_buf, RESPONSE_LEN_4,
result_addr)<0) {
- return -1;
+ goto err;
}
} else {
- char reply_buf[4];
+ char reply_buf[16];
if (read_all(s, reply_buf, 4, 1) != 4) {
log_err(LD_NET, "Error reading SOCKS5 response.");
- return -1;
+ goto err;
}
if (reply_buf[0] != 5) {
log_err(LD_NET, "Bad SOCKS5 reply version.");
- return -1;
+ goto err;
}
/* Give a user some useful feedback about SOCKS5 errors */
if (reply_buf[1] != 0) {
@@ -276,32 +281,44 @@ do_resolve(const char *hostname, uint32_t sockshost, uint16_t socksport,
"to Tor; we suggest an application that uses SOCKS 4a.",
hostname);
}
- return -1;
+ goto err;
}
if (reply_buf[3] == 1) {
/* IPv4 address */
if (read_all(s, reply_buf, 4, 1) != 4) {
log_err(LD_NET, "Error reading address in socks5 response.");
- return -1;
+ goto err;
+ }
+ tor_addr_from_ipv4n(result_addr, get_uint32(reply_buf));
+ } else if (reply_buf[3] == 4) {
+ /* IPv6 address */
+ if (read_all(s, reply_buf, 16, 1) != 16) {
+ log_err(LD_NET, "Error reading address in socks5 response.");
+ goto err;
}
- *result_addr = ntohl(get_uint32(reply_buf));
+ tor_addr_from_ipv6_bytes(result_addr, reply_buf);
} else if (reply_buf[3] == 3) {
+ /* Domain name */
size_t result_len;
if (read_all(s, reply_buf, 1, 1) != 1) {
log_err(LD_NET, "Error reading address_length in socks5 response.");
- return -1;
+ goto err;
}
result_len = *(uint8_t*)(reply_buf);
*result_hostname = tor_malloc(result_len+1);
if (read_all(s, *result_hostname, result_len, 1) != (int) result_len) {
log_err(LD_NET, "Error reading hostname in socks5 response.");
- return -1;
+ goto err;
}
(*result_hostname)[result_len] = '\0';
}
}
+ tor_close_socket(s);
return 0;
+ err:
+ tor_close_socket(s);
+ return -1;
}
/** Print a usage message and exit. */
@@ -322,10 +339,8 @@ main(int argc, char **argv)
int isSocks4 = 0, isVerbose = 0, isReverse = 0;
char **arg;
int n_args;
- struct in_addr a;
- uint32_t result = 0;
+ tor_addr_t result;
char *result_hostname = NULL;
- char buf[INET_NTOA_BUF_LEN];
log_severity_list_t *s = tor_malloc_zero(sizeof(log_severity_list_t));
init_logging();
@@ -423,9 +438,7 @@ main(int argc, char **argv)
if (result_hostname) {
printf("%s\n", result_hostname);
} else {
- a.s_addr = htonl(result);
- tor_inet_ntoa(&a, buf, sizeof(buf));
- printf("%s\n", buf);
+ printf("%s\n", fmt_addr(&result));
}
return 0;
}
diff --git a/src/win32/Makefile.am b/src/win32/Makefile.am
deleted file mode 100644
index 7f5d74248..000000000
--- a/src/win32/Makefile.am
+++ /dev/null
@@ -1,3 +0,0 @@
-
-EXTRA_DIST = orconfig.h
-
diff --git a/src/win32/include.am b/src/win32/include.am
new file mode 100644
index 000000000..dad59af3a
--- /dev/null
+++ b/src/win32/include.am
@@ -0,0 +1,3 @@
+
+EXTRA_DIST+= src/win32/orconfig.h
+
diff --git a/src/win32/orconfig.h b/src/win32/orconfig.h
index d780d5d73..7b5877cf9 100644
--- a/src/win32/orconfig.h
+++ b/src/win32/orconfig.h
@@ -145,9 +145,15 @@
/* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H
+/* Define to 1 if you have the `_vscprintf' function. */
+#define HAVE__VSCPRINTF 1
+
/* Define to 1 iff NULL is represented by a 0 in memory. */
#define NULL_REP_IS_ZERO_BYTES 1
+/* Define to 1 iff memset(0) sets doubles to 0.0 */
+#define DOUBLE_0_REP_IS_ZERO_BYTES 1
+
/* Name of package */
#define PACKAGE "tor"
@@ -190,6 +196,9 @@
/* The size of a `long long', as computed by sizeof. */
#undef SIZEOF_LONG_LONG
+/* The size of `pid_t', as computed by sizeof. */
+#define SIZEOF_PID_T 0
+
/* The size of a `short', as computed by sizeof. */
#define SIZEOF_SHORT 2
@@ -232,7 +241,7 @@
#define USING_TWOS_COMPLEMENT
/* Version number of package */
-#define VERSION "0.2.3.18-rc-dev"
+#define VERSION "0.2.5.4-alpha-dev"
@@ -242,3 +251,9 @@
#define FLEXIBLE_ARRAY_MEMBER 0
#define HAVE_EVENT2_EVENT_H
#define SHARE_DATADIR ""
+#define HAVE_EVENT2_DNS_H
+#define HAVE_EVENT_BASE_LOOPEXIT
+#define CURVE25519_ENABLED
+#define USE_CURVE25519_DONNA
+
+#define ENUM_VALS_ARE_SIGNED 1
diff --git a/tor.spec.in b/tor.spec.in
deleted file mode 100644
index b452c9bb3..000000000
--- a/tor.spec.in
+++ /dev/null
@@ -1,360 +0,0 @@
-## NOTE: tor.spec is autogenerated from tor.spec.in . Edit the latter,
-## not the former.
-
-## Things that need to be edited frequently
-#
-# This should be incremented whenever the spec file changes, but
-# can drop back to zero at a new Tor version
-
-%define specver 1
-
-## Things users may want to change
-#
-# User (and group) name under which the Tor daemon runs.
-
-%define toruser @TORUSER@
-%define torgroup @TORGROUP@
-
-## Version song and dance
-#
-# This should be the Tor version number, as it appears on the tarball,
-# including any "pre<x>" or "rc<y>" suffix. This gets massaged to
-# create the RPM version number, in a way that depends on the Tor
-# numbering scheme.
-%define native_version @VERSION@
-
-%define version %(echo %{native_version} | sed -e 's/-/./g')
-
-## Define output filename
-#
-# This creates filenames based upon the value of target_cpu defined above
-
-## Release and OS identification song and dance
-#
-# This identifies the lineage of the spec file. This file is the
-# standard one that comes with Tor; various distributions may
-# have their own ideas about the right ways to do things.
-%define pkgspec tor
-
-# This spec is intended to build and install on multiple distributions
-# (someday). Detect the distribution we're building on.
-
-%define is_rh %(test -e /etc/redhat-release && echo 1 || echo 0)
-%define is_fc %(test -e /etc/fedora-release && echo 1 || echo 0)
-%define is_mdk %(test -e /etc/mandrake-release && echo 1 || echo 0)
-%define is_suse %(test -e /etc/SuSE-release && echo 1 || echo 0)
-%define is_rfl %(test -e /etc/redflag-release && echo 1 || echo 0)
-
-%if %{is_fc}
-%define ostag %(sed -e 's/^.*release /fc/' -e 's/ .*$//' -e 's/\\./_/g' < /etc/fedora-release)
-%endif
-
-%if %{is_rh}
-%define ostag %(sed -e 's/^.*release /rh/' -e 's/ .*$//' -e 's/\\./_/g' < /etc/redhat-release)
-%endif
-
-%if %{is_mdk}
-%define ostag mdk
-%endif
-
-%if %{is_suse}
-%define ostag suse%(grep openSUSE /etc/SuSE-release | awk '{print $2}' | sed -e 's/\\./_/')
-%endif
-
-%if %{is_rfl}
-%define ostag %(sed -e 's/^.*Desktop /redflag/' -e 's/ .*$//' -e 's/\\./_/g' < /etc/redflag-release)
-%endif
-
-# Using the build date ensures that every build really does get
-# a different release number. We use this trick for CVS versions.
-# For release versions, we don't want or need it.
-%define is_dev_version %(echo %{native_version} | grep 'dev' > /dev/null && echo 1 || echo 0)
-
-%if %{is_dev_version}
-%define blddate %(date -u +"%Y%m%d%H%M")
-%define release %{pkgspec}.%{specver}.%{ostag}.%{blddate}
-%else
-%define release %{pkgspec}.%{specver}.%{ostag}
-%endif
-
-## General-purpose macros
-#
-# Some systems don't have some macros. If a macro doesn't seem
-# to exist on your system, add it here...
-
-%if %{!?__make:1}%{?__make:0}
-%define __make make
-%endif
-
-%if %{!?make:1}%{?make:0}
-%define make %{__make}
-%endif
-
-%if %{!?_localstatedir:1}%{?_localstatedir:0}
-%define _localstatedir @LOCALSTATEDIR@
-%endif
-
-## Package information
-#
-Name: tor
-Version: %{version}
-Release: %{release}
-
-Summary: Anonymizing overlay network for TCP (The onion router)
-URL: https://www.torproject.org/
-Group: System Environment/Daemons
-
-License: 3-clause BSD
-Vendor: The Tor Project (https://torproject.org)
-Packager: Erinn Clark <erinn@torproject.org>
-
-Requires: openssl >= 0.9.7, libevent >= 1.4.13
-BuildRequires: openssl-devel >= 0.9.7, libevent-devel >= 1.4.13, asciidoc
-
-# Fedora 16 and RHEL 5 have following conflicting packages according to rpm search
-%if %{is_rh}
-Conflicts: tor-core, tor-lsb, tor-upstart
-%endif
-
-Requires(pre): /usr/bin/id, /bin/date, /bin/sh
-Requires(pre): %{_sbindir}/useradd, %{_sbindir}/groupadd
-
-Source0: https://www.torproject.org/dist/%{name}-%{native_version}.tar.gz
-
-BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
-
-%description
-Tor is a connection-based low-latency anonymous communication system.
-
-This package provides the "tor" program, which serves as both a client and
-a relay node. Scripts will automatically create a "%{toruser}" user and
-a "%{torgroup}" group, and set tor up to run as a daemon when the system
-is rebooted.
-
-Applications connect to the local Tor proxy using the SOCKS
-protocol. The tor client chooses a path through a set of relays, in
-which each relay knows its predecessor and successor, but no
-others. Traffic flowing down the circuit is unwrapped by a symmetric
-key at each relay, which reveals the downstream relay.
-
-Warnings: Tor does no protocol cleaning. That means there is a danger
-that application protocols and associated programs can be induced to
-reveal information about the initiator. Tor depends on Privoxy or
-similar protocol cleaners to solve this problem. This is alpha code,
-and is even more likely than released code to have anonymity-spoiling
-bugs. The present network is small -- this further reduces the
-strength of the anonymity provided. Tor is not presently suitable
-for high-stakes anonymity.
-
-%prep
-%setup -q -n %{name}-%{native_version}
-
-%build
-%if %{is_suse}
-%configure --with-tor-user=%{toruser} --with-tor-group=%{torgroup} --docdir=%{_docdir}/%{name}
-%else
-%configure --with-tor-user=%{toruser} --with-tor-group=%{torgroup}
-%endif
-%make
-
-%install
-%makeinstall
-
-# Install init script and control script
-%__mkdir_p ${RPM_BUILD_ROOT}%{_initrddir}
-%if %{is_suse}
-%__install -p -m 755 contrib/suse/tor.sh ${RPM_BUILD_ROOT}%{_initrddir}/%{name}
-%else
-%__install -p -m 755 contrib/tor.sh ${RPM_BUILD_ROOT}%{_initrddir}/%{name}
-%endif
-%__install -p -m 755 contrib/torctl ${RPM_BUILD_ROOT}%{_bindir}
-
-# Set up config file; "sample" file implements a basic user node.
-%__install -p -m 644 ${RPM_BUILD_ROOT}%{_sysconfdir}/%{name}/torrc.sample ${RPM_BUILD_ROOT}%{_sysconfdir}/%{name}/torrc
-
-# Install the logrotate control file.
-%__mkdir_p -m 755 ${RPM_BUILD_ROOT}%{_sysconfdir}/logrotate.d
-%__install -p -m 644 contrib/tor.logrotate ${RPM_BUILD_ROOT}%{_sysconfdir}/logrotate.d/%{name}
-
-# Directories that don't have any preinstalled files
-%__mkdir_p -m 700 ${RPM_BUILD_ROOT}%{_localstatedir}/lib/%{name}
-%__mkdir_p -m 755 ${RPM_BUILD_ROOT}%{_localstatedir}/run/%{name}
-%__mkdir_p -m 755 ${RPM_BUILD_ROOT}%{_localstatedir}/log/%{name}
-%__mkdir_p -m 700 ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/%{name}
-
-%clean
-[ "${RPM_BUILD_ROOT}" != "/" ] && rm -rf ${RPM_BUILD_ROOT}
-
-# These scripts are probably wrong for Mandrake or SuSE. They're certainly
-# wrong for Debian, but what are you doing using RPM on Debian?
-
-%pre
-
-# If tor is already installed and running (whether installed by RPM
-# or not), then kill it, but remember that it was running.
-%__rm -f /%{_localstatedir}/tmp/${name}-was-running-%{version}-%{release}
-if [ -f %{_initrddir}/%{name} ] && /sbin/service %{name} status ; then
- /sbin/service %{name} stop
- touch /%{_localstatedir}/tmp/${name}-was-running-%{version}-%{release}
-fi
-
-#
-# Create a user and group if need be
-#
-if [ ! -n "`/usr/bin/id -g %{torgroup} 2>/dev/null`" ]; then
- # One would like to default the GID, but doing that properly would
- # require thought.
- %{_sbindir}/groupadd %{torgroup} 2> /dev/null
-fi
-if [ ! -n "`/usr/bin/id -u %{toruser} 2>/dev/null`" ]; then
- # One would also like to default the UID, but doing that properly would
- # also require thought.
- if [ -x %{_sbindir}/nologin ]; then
- %{_sbindir}/useradd -r -g %{torgroup} -d %{_localstatedir}/lib/%{name} -s %{_sbindir}/nologin %{toruser} 2> /dev/null
- else
- %{_sbindir}/useradd -r -g %{torgroup} -d %{_localstatedir}/lib/%{name} -s /bin/false %{toruser} 2> /dev/null
- fi
-fi
-exit 0
-
-%post
-
-# If this is a new installation, use chkconfig to put tor in the
-# default set of runlevels. If it's an upgrade, leave the existing
-# configuration alone.
-if [ $1 -eq 1 ]; then
- /sbin/chkconfig --add %{name}
- /sbin/chkconfig %{name} on
-fi
-
-# Older tor RPMS used a different username for the tor daemon.
-# Make sure the runtime data have the right ownership.
-%__chown -R %{toruser}.%{torgroup} %{_localstatedir}/{lib,log,run}/%{name}
-
-if [ -f /%{_localstatedir}/tmp/${name}-was-running-%{version}-%{release} ]; then
- /sbin/service %{name} start
- %__rm -f /%{_localstatedir}/tmp/${name}-was-running-%{version}-%{release}
-fi
-exit 0
-
-%preun
-
-# If no instances of tor will be installed when we're done, make
-# sure that it gets killed. We *don't* want to kill it or delete
-# any of its data on uninstall if it's being upgraded to a new
-# version, because the new version will actually already have
-# been installed and started before the uninstall script for
-# the old version is run, and we'd end up hosing it.
-if [ $1 -le 0 ]; then
- if [ -f %{_initrddir}/%{name} ] && /sbin/service %{name} status ; then
- /sbin/service %{name} stop
- fi
- %/sbin/chkconfig --del %{name}
- %__rm -f ${_localstatedir}/lib/%{name}/cached-directory
- %__rm -f ${_localstatedir}/lib/%{name}/bw_accounting
- %__rm -f ${_localstatedir}/lib/%{name}/control_auth_cookie
- %__rm -f ${_localstatedir}/lib/%{name}/router.desc
- %__rm -f ${_localstatedir}/lib/%{name}/fingerprint
-fi
-exit 0
-
-%files
-%defattr(-,root,root)
-%if %{is_suse}
-%doc INSTALL LICENSE README ChangeLog doc/HACKING doc/TODO doc/*html
-%endif
-%doc INSTALL LICENSE README ChangeLog doc/HACKING doc/TODO
-%{_mandir}/man*/*
-%{_bindir}/tor
-%{_bindir}/torctl
-%{_bindir}/torify
-%{_bindir}/tor-resolve
-%{_bindir}/tor-gencert
-%if %{is_suse}
-%else
-%{_docdir}/*
-%endif
-%{_datadir}/tor/geoip
-%config %{_initrddir}/%{name}
-%config(noreplace) %attr(0644,root,root) %{_sysconfdir}/logrotate.d/%{name}
-%dir %attr(0755,root,%{torgroup}) %{_sysconfdir}/%{name}/
-%config(noreplace) %attr(0644,root,%{torgroup}) %{_sysconfdir}/%{name}/*
-%attr(0700,%{toruser},%{torgroup}) %dir %{_localstatedir}/lib/%{name}
-%attr(0750,%{toruser},%{torgroup}) %dir %{_localstatedir}/run/%{name}
-%attr(0750,%{toruser},%{torgroup}) %dir %{_localstatedir}/log/%{name}
-
-%changelog
-* Thu Jun 21 2012 Ondrej Mikle <ondrej.mikle@gmail.com>
-- fixed to work with both rpmbuild and mock on RHEL/Fedora
-- removed unnecessary files from rpm such as .git repo
-- fixed build dependencies and package conflicts
-- fixed creating _tor user on Fedora 17 (ancient typo)
-- added/updated build instructions for RPM creation
-- confirmed to build and run on EL5, EL6, Fedora 16/17, OpenSuse 12.1
-
-* Fri Aug 20 2010 Erinn Clark <erinn@torproject.org>
-- add conflicts for Fedora packages
-- add logic for SuSE since it requires special doc handling
-
-* Mon Feb 22 2010 Erinn Clark <erinn@torproject.org>
-- remove AUTHORS from %doc line since it no longer exists upstream
-- switch maintainers
-
-* Fri May 01 2009 Andrew Lewman <andrew@torproject.org>
-- clean up distro detection and remove dead comment blocks
-
-* Sun Feb 22 2009 Andrew Lewman <andrew@torproject.org>
-- update the description, vendor, and packager
-
-* Thu Sep 11 2008 Andrew Lewman <phobos@rootme.org>
-- See r16867
-- http://archives.seul.org/or/cvs/Sep-2008/msg00156.html
-
-* Tue Feb 27 2007 Andrew Lewman <phobos@rootme.org>
-- Fix a potential race condition in how we determine the running state of tor. Found by Stefan Nordhausen.
-- see OR-CVS for details
-
-* Fri May 26 2006 Andrew Lewman <phobos@rootme.org>
-- Add in a few "SUSEisms" to make dist-rpm actually work on suse
-- Turn Tor "on" via chkconfig
-- Update -mcpu to -mtune to make GCC happy
-- see OR-CVS for details
-
-* Tue Mar 28 2006 Andrew Lewman <phobos@rootme.org>
-- converted to build the specified target cpu and arch
-- override related rpm macros to build correctly
-- see OR-CVS for details
-
-* Mon Jan 17 2005 John Bashinski <jbash@velvet.com>
-- Take runtime user and group names from configure system. Default
- user/group names are now "_tor"; blame Roger...
-- Make logrotate control file a separate file in the source distribution,
- rather than creating it from the spec file.
-- Properly handle the order in which RPM executes scriptlets on upgrade.
- The old code would kill the daemon on upgrade.
-- Start the tor daemon after installation if and only if it was
- running before installation. Preserve runlevel setup on upgrade.
-- Package the torctl script; the init script is now a wrapper around it.
-
-* Tue Nov 5 2004 John Bashinski <jbash@velvet.com>
-- Add skeletal support for multiple distributions
-- Even more ridiculous level of macro-ization
-- Modify version numbers so RPM can determine when it has a newer version
-- Return to including distribution name in package release number
-- Sharply trim description
-- Change user/group name from "tor" to "tordmn"; "tor" is a common
- given name (reported by Marius Hjelle)
-- Change group to "System Environment/Daemons" (suggested by Marius Hjelle)
-- Create logrotate file (suggested by Marius Hjelle)
-- Make Tor run as a user proxy by default (suggested by Marius Hjelle)
-- Autogenerate spec file from GNU autotools data, substituting version
- and whatnot
-- Be perhaps excessively paranoid with config file and directory modes
-- Remove auto-start and auto-stop at installation time; there's some kind
- of weird race going on, and it's arguably a bad thing anyway.
-
-* Mon Jun 06 2004 Nick Mathewson <nickm@freehaven.net> 0.0.7-0.std.0.1.rc2
-- Make spec file more happy with fc2 packaging
-
-* Sat Jan 17 2004 John Bashinski <jbash@velvet.com>
-- Basic spec file; tested with Red Hat 9.